diff --git a/harness/sm/non262-Date-shell.js b/harness/sm/non262-Date-shell.js new file mode 100644 index 0000000000..f1f7d18c90 --- /dev/null +++ b/harness/sm/non262-Date-shell.js @@ -0,0 +1,316 @@ +/*--- +defines: [msPerHour, TZ_ADJUST, UTC_01_JAN_1900, UTC_01_JAN_2000, UTC_29_FEB_2000, UTC_01_JAN_2005, inTimeZone, withLocale, Month, assertDateTime, runDSTOffsetCachingTestsFraction] +allow_unused: True +---*/ + +/** + * Date functions used by tests in Date suite + */ +(function(global) { + const msPerDay = 1000 * 60 * 60 * 24; + const msPerHour = 1000 * 60 * 60; + global.msPerHour = msPerHour; + + // Offset of tester's time zone from UTC. + const TZ_DIFF = GetRawTimezoneOffset(); + global.TZ_ADJUST = TZ_DIFF * msPerHour; + + const UTC_01_JAN_1900 = -2208988800000; + const UTC_01_JAN_2000 = 946684800000; + const UTC_29_FEB_2000 = UTC_01_JAN_2000 + 31 * msPerDay + 28 * msPerDay; + const UTC_01_JAN_2005 = UTC_01_JAN_2000 + TimeInYear(2000) + TimeInYear(2001) + + TimeInYear(2002) + TimeInYear(2003) + TimeInYear(2004); + global.UTC_01_JAN_1900 = UTC_01_JAN_1900; + global.UTC_01_JAN_2000 = UTC_01_JAN_2000; + global.UTC_29_FEB_2000 = UTC_29_FEB_2000; + global.UTC_01_JAN_2005 = UTC_01_JAN_2005; + + /* + * Originally, the test suite used a hard-coded value TZ_DIFF = -8. + * But that was only valid for testers in the Pacific Standard Time Zone! + * We calculate the proper number dynamically for any tester. We just + * have to be careful not to use a date subject to Daylight Savings Time... + */ + function GetRawTimezoneOffset() { + let t1 = new Date(2000, 1, 1).getTimezoneOffset(); + let t2 = new Date(2000, 1 + 6, 1).getTimezoneOffset(); + + // 1) Time zone without daylight saving time. + // 2) Northern hemisphere with daylight saving time. + if ((t1 - t2) >= 0) + return -t1 / 60; + + // 3) Southern hemisphere with daylight saving time. + return -t2 / 60; + } + + function DaysInYear(y) { + return y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0) ? 366 : 365; + } + + function TimeInYear(y) { + return DaysInYear(y) * msPerDay; + } + + function getDefaultTimeZone() { + var tz = getTimeZone(); + switch (tz) { + case "EST": + case "EDT": + return "EST5EDT"; + + case "CST": + case "CDT": + return "CST6CDT"; + + case "MST": + case "MDT": + return "MST7MDT"; + + case "PST": + case "PDT": + return "PST8PDT"; + + default: + // Other time zones abbrevations are not supported. + return tz; + } + } + + function getDefaultLocale() { + // If the default locale looks like a BCP-47 language tag, return it. + var locale = global.getDefaultLocale(); + if (locale.match(/^[a-z][a-z0-9\-]+$/i)) + return locale; + + // Otherwise use undefined to reset to the default locale. + return undefined; + } + + let defaultTimeZone = null; + let defaultLocale = null; + + // Run the given test in the requested time zone. + function inTimeZone(tzname, fn) { + if (defaultTimeZone === null) + defaultTimeZone = getDefaultTimeZone(); + + setTimeZone(tzname); + try { + fn(); + } finally { + setTimeZone(defaultTimeZone); + } + } + global.inTimeZone = inTimeZone; + + // Run the given test with the requested locale. + function withLocale(locale, fn) { + if (defaultLocale === null) + defaultLocale = getDefaultLocale(); + + setDefaultLocale(locale); + try { + fn(); + } finally { + setDefaultLocale(defaultLocale); + } + } + global.withLocale = withLocale; + + const Month = { + January: 0, + February: 1, + March: 2, + April: 3, + May: 4, + June: 5, + July: 6, + August: 7, + September: 8, + October: 9, + November: 10, + December: 11, + }; + global.Month = Month; + + const weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].join("|"); + const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"].join("|"); + const datePart = String.raw `(?:${weekdays}) (?:${months}) \d{2}`; + const timePart = String.raw `\d{4,6} \d{2}:\d{2}:\d{2} GMT[+-]\d{4}`; + const dateTimeRE = new RegExp(String.raw `^(${datePart} ${timePart})(?: \((.+)\))?$`); + + function assertDateTime(date, expected, ...alternativeTimeZones) { + let actual = date.toString(); + assertEq(dateTimeRE.test(expected), true, `${expected}`); + assertEq(dateTimeRE.test(actual), true, `${actual}`); + + let [, expectedDateTime, expectedTimeZone] = dateTimeRE.exec(expected); + let [, actualDateTime, actualTimeZone] = dateTimeRE.exec(actual); + + assertEq(actualDateTime, expectedDateTime); + + // The time zone identifier is optional, so only compare its value if + // it's present in |actual| and |expected|. + if (expectedTimeZone !== undefined && actualTimeZone !== undefined) { + // Test against the alternative time zone identifiers if necessary. + if (actualTimeZone !== expectedTimeZone) { + for (let alternativeTimeZone of alternativeTimeZones) { + if (actualTimeZone === alternativeTimeZone) { + expectedTimeZone = alternativeTimeZone; + break; + } + } + } + assertEq(actualTimeZone, expectedTimeZone); + } + } + global.assertDateTime = assertDateTime; +})(this); + + +function runDSTOffsetCachingTestsFraction(part, parts) +{ + var BUGNUMBER = 563938; + var summary = 'Cache DST offsets to improve SunSpider score'; + + print(BUGNUMBER + ": " + summary); + + var MAX_UNIX_TIMET = 2145859200; // "2037-12-31T08:00:00.000Z" (PST8PDT based!) + var RANGE_EXPANSION_AMOUNT = 30 * 24 * 60 * 60; + + /** + * Computes the time zone offset in minutes at the given timestamp. + */ + function tzOffsetFromUnixTimestamp(timestamp) + { + var d = new Date(NaN); + d.setTime(timestamp); // local slot = NaN, UTC slot = timestamp + return d.getTimezoneOffset(); // get UTC, calculate local => diff in minutes + } + + /** + * Clear the DST offset cache, leaving it initialized to include a timestamp + * completely unlike the provided one (i.e. one very, very far away in time + * from it). Thus an immediately following lookup for the provided timestamp + * will cache-miss and compute a clean value. + */ + function clearDSTOffsetCache(undesiredTimestamp) + { + var opposite = (undesiredTimestamp + MAX_UNIX_TIMET / 2) % MAX_UNIX_TIMET; + + // Generic purge to known, but not necessarily desired, state + tzOffsetFromUnixTimestamp(0); + tzOffsetFromUnixTimestamp(MAX_UNIX_TIMET); + + // Purge to desired state. Cycle 2x in case opposite or undesiredTimestamp + // is close to 0 or MAX_UNIX_TIMET. + tzOffsetFromUnixTimestamp(opposite); + tzOffsetFromUnixTimestamp(undesiredTimestamp); + tzOffsetFromUnixTimestamp(opposite); + tzOffsetFromUnixTimestamp(undesiredTimestamp); + } + + function computeCanonicalTZOffset(timestamp) + { + clearDSTOffsetCache(timestamp); + return tzOffsetFromUnixTimestamp(timestamp); + } + + var TEST_TIMESTAMPS_SECONDS = + [ + // Special-ish timestamps + 0, + RANGE_EXPANSION_AMOUNT, + MAX_UNIX_TIMET, + ]; + + var ONE_DAY = 24 * 60 * 60; + var EIGHTY_THREE_HOURS = 83 * 60 * 60; + var NINETY_EIGHT_HOURS = 98 * 60 * 60; + function nextIncrement(i) + { + return i === EIGHTY_THREE_HOURS ? NINETY_EIGHT_HOURS : EIGHTY_THREE_HOURS; + } + + // Now add a long sequence of non-special timestamps, from a fixed range, that + // overlaps a DST change by "a bit" on each side. 67 days should be enough + // displacement that we can occasionally exercise the implementation's + // thirty-day expansion and the DST-offset-change logic. Use two different + // increments just to be safe and catch something a single increment might not. + var DST_CHANGE_DATE = 1268553600; // March 14, 2010 + for (var t = DST_CHANGE_DATE - 67 * ONE_DAY, + i = nextIncrement(NINETY_EIGHT_HOURS), + end = DST_CHANGE_DATE + 67 * ONE_DAY; + t < end; + i = nextIncrement(i), t += i) + { + TEST_TIMESTAMPS_SECONDS.push(t); + } + + var TEST_TIMESTAMPS = + TEST_TIMESTAMPS_SECONDS.map(function(v) { return v * 1000; }); + + /************** + * BEGIN TEST * + **************/ + + // Compute the correct time zone offsets for all timestamps to be tested. + var CORRECT_TZOFFSETS = TEST_TIMESTAMPS.map(computeCanonicalTZOffset); + + // Intentionally and knowingly invoking every single logic path in the cache + // isn't easy for a human to get right (and know he's gotten it right), so + // let's do it the easy way: exhaustively try all possible four-date sequences + // selecting from our array of possible timestamps. + + var sz = TEST_TIMESTAMPS.length; + var start = Math.floor((part - 1) / parts * sz); + var end = Math.floor(part / parts * sz); + + print("Exhaustively testing timestamps " + + "[" + start + ", " + end + ") of " + sz + "..."); + + try + { + for (var i = start; i < end; i++) + { + print("Testing timestamp " + i + "..."); + + var t1 = TEST_TIMESTAMPS[i]; + for (var j = 0; j < sz; j++) + { + var t2 = TEST_TIMESTAMPS[j]; + for (var k = 0; k < sz; k++) + { + var t3 = TEST_TIMESTAMPS[k]; + for (var w = 0; w < sz; w++) + { + var t4 = TEST_TIMESTAMPS[w]; + + clearDSTOffsetCache(t1); + + var tzo1 = tzOffsetFromUnixTimestamp(t1); + var tzo2 = tzOffsetFromUnixTimestamp(t2); + var tzo3 = tzOffsetFromUnixTimestamp(t3); + var tzo4 = tzOffsetFromUnixTimestamp(t4); + + assertEq(tzo1, CORRECT_TZOFFSETS[i]); + assertEq(tzo2, CORRECT_TZOFFSETS[j]); + assertEq(tzo3, CORRECT_TZOFFSETS[k]); + assertEq(tzo4, CORRECT_TZOFFSETS[w]); + } + } + } + } + } + catch (e) + { + assertEq(true, false, + "Error when testing with timestamps " + + i + ", " + j + ", " + k + ", " + w + + " (" + t1 + ", " + t2 + ", " + t3 + ", " + t4 + ")!"); + } + + reportCompare(true, true); + print("All tests passed!"); +} diff --git a/harness/sm/non262-JSON-shell.js b/harness/sm/non262-JSON-shell.js new file mode 100644 index 0000000000..5cf8ebcd8c --- /dev/null +++ b/harness/sm/non262-JSON-shell.js @@ -0,0 +1,114 @@ +/*--- +defines: [testJSON] +allow_unused: True +---*/ +function testJSON(str, expectSyntaxError) +{ + // Leading and trailing whitespace never affect parsing, so test the string + // multiple times with and without whitespace around it as it's easy and can + // potentially detect bugs. + + // Try the provided string + try + { + JSON.parse(str); + reportCompare(false, expectSyntaxError, + "string <" + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string <" + str + "> threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string <" + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } + + // Now try the provided string with trailing whitespace + try + { + JSON.parse(str + " "); + reportCompare(false, expectSyntaxError, + "string <" + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string <" + str + " > threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string <" + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } + + // Now try the provided string with leading whitespace + try + { + JSON.parse(" " + str); + reportCompare(false, expectSyntaxError, + "string < " + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string < " + str + "> threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string < " + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } + + // Now try the provided string with whitespace surrounding it + try + { + JSON.parse(" " + str + " "); + reportCompare(false, expectSyntaxError, + "string < " + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string < " + str + " > threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string < " + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } +} diff --git a/harness/sm/non262-Math-shell.js b/harness/sm/non262-Math-shell.js new file mode 100644 index 0000000000..a4d1071c69 --- /dev/null +++ b/harness/sm/non262-Math-shell.js @@ -0,0 +1,79 @@ +/*--- +defines: [assertNear] +allow_unused: True +---*/ + +// The nearest representable values to +1.0. +const ONE_PLUS_EPSILON = 1 + Math.pow(2, -52); // 0.9999999999999999 +const ONE_MINUS_EPSILON = 1 - Math.pow(2, -53); // 1.0000000000000002 + +{ + const fail = function (msg) { + var exc = new Error(msg); + try { + // Try to improve on exc.fileName and .lineNumber; leave exc.stack + // alone. We skip two frames: fail() and its caller, an assertX() + // function. + var frames = exc.stack.trim().split("\n"); + if (frames.length > 2) { + var m = /@([^@:]*):([0-9]+)$/.exec(frames[2]); + if (m) { + exc.fileName = m[1]; + exc.lineNumber = +m[2]; + } + } + } catch (ignore) { throw ignore;} + throw exc; + }; + + let ENDIAN; // 0 for little-endian, 1 for big-endian. + + // Return the difference between the IEEE 754 bit-patterns for a and b. + // + // This is meaningful when a and b are both finite and have the same + // sign. Then the following hold: + // + // * If a === b, then diff(a, b) === 0. + // + // * If a !== b, then diff(a, b) === 1 + the number of representable values + // between a and b. + // + const f = new Float64Array([0, 0]); + const u = new Uint32Array(f.buffer); + const diff = function (a, b) { + f[0] = a; + f[1] = b; + //print(u[1].toString(16) + u[0].toString(16) + " " + u[3].toString(16) + u[2].toString(16)); + return Math.abs((u[3-ENDIAN] - u[1-ENDIAN]) * 0x100000000 + u[2+ENDIAN] - u[0+ENDIAN]); + }; + + // Set ENDIAN to the platform's endianness. + ENDIAN = 0; // try little-endian first + if (diff(2, 4) === 0x100000) // exact wrong answer we'll get on a big-endian platform + ENDIAN = 1; + assertEq(diff(2,4), 0x10000000000000); + assertEq(diff(0, Number.MIN_VALUE), 1); + assertEq(diff(1, ONE_PLUS_EPSILON), 1); + assertEq(diff(1, ONE_MINUS_EPSILON), 1); + + var assertNear = function assertNear(a, b, tolerance=1) { + if (!Number.isFinite(b)) { + fail("second argument to assertNear (expected value) must be a finite number"); + } else if (Number.isNaN(a)) { + fail("got NaN, expected a number near " + b); + } else if (!Number.isFinite(a)) { + if (b * Math.sign(a) < Number.MAX_VALUE) + fail("got " + a + ", expected a number near " + b); + } else { + // When the two arguments do not have the same sign bit, diff() + // returns some huge number. So if b is positive or negative 0, + // make target the zero that has the same sign bit as a. + var target = b === 0 ? a * 0 : b; + var err = diff(a, target); + if (err > tolerance) { + fail("got " + a + ", expected a number near " + b + + " (relative error: " + err + ")"); + } + } + }; +} diff --git a/harness/sm/non262-Reflect-shell.js b/harness/sm/non262-Reflect-shell.js new file mode 100644 index 0000000000..22d68b3513 --- /dev/null +++ b/harness/sm/non262-Reflect-shell.js @@ -0,0 +1,14 @@ +/*--- +defines: [SOME_PRIMITIVE_VALUES] +allow_unused: True +---*/ + +// List of a few values that are not objects. +var SOME_PRIMITIVE_VALUES = [ + undefined, null, + false, + -Infinity, -1.6e99, -1, -0, 0, Math.pow(2, -1074), 1, 4294967295, + Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER + 1, 1.6e99, Infinity, NaN, + "", "Phaedo", + Symbol(), Symbol("iterator"), Symbol.for("iterator"), Symbol.iterator +]; diff --git a/harness/sm/non262-RegExp-shell.js b/harness/sm/non262-RegExp-shell.js new file mode 100644 index 0000000000..b872c2d3cb --- /dev/null +++ b/harness/sm/non262-RegExp-shell.js @@ -0,0 +1,261 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/*--- +defines: [testRegExp, makeExpectedMatch, checkRegExpMatch] +allow_unused: True +---*/ + +/* + * Date: 07 February 2001 + * + * Functionality common to RegExp testing - + */ +//----------------------------------------------------------------------------- + +(function(global) { + + var MSG_PATTERN = '\nregexp = '; + var MSG_STRING = '\nstring = '; + var MSG_EXPECT = '\nExpect: '; + var MSG_ACTUAL = '\nActual: '; + var ERR_LENGTH = '\nERROR !!! match arrays have different lengths:'; + var ERR_MATCH = '\nERROR !!! regexp failed to give expected match array:'; + var ERR_NO_MATCH = '\nERROR !!! regexp FAILED to match anything !!!'; + var ERR_UNEXP_MATCH = '\nERROR !!! regexp MATCHED when we expected it to fail !!!'; + var CHAR_LBRACKET = '['; + var CHAR_RBRACKET = ']'; + var CHAR_QT_DBL = '"'; + var CHAR_QT = "'"; + var CHAR_NL = '\n'; + var CHAR_COMMA = ','; + var CHAR_SPACE = ' '; + var TYPE_STRING = typeof 'abc'; + + + + global.testRegExp = function testRegExp(statuses, patterns, strings, actualmatches, expectedmatches) + { + var status = ''; + var pattern = new RegExp(); + var string = ''; + var actualmatch = new Array(); + var expectedmatch = new Array(); + var state = ''; + var lActual = -1; + var lExpect = -1; + + + for (var i=0; i != patterns.length; i++) + { + status = statuses[i]; + pattern = patterns[i]; + string = strings[i]; + actualmatch=actualmatches[i]; + expectedmatch=expectedmatches[i]; + state = getState(status, pattern, string); + + description = status; + + if(actualmatch) + { + actual = formatArray(actualmatch); + if(expectedmatch) + { + // expectedmatch and actualmatch are arrays - + lExpect = expectedmatch.length; + lActual = actualmatch.length; + + var expected = formatArray(expectedmatch); + + if (lActual != lExpect) + { + reportCompare(lExpect, lActual, + state + ERR_LENGTH + + MSG_EXPECT + expected + + MSG_ACTUAL + actual + + CHAR_NL + ); + continue; + } + + // OK, the arrays have same length - + if (expected != actual) + { + reportCompare(expected, actual, + state + ERR_MATCH + + MSG_EXPECT + expected + + MSG_ACTUAL + actual + + CHAR_NL + ); + } + else + { + reportCompare(expected, actual, state) + } + + } + else //expectedmatch is null - that is, we did not expect a match - + { + expected = expectedmatch; + reportCompare(expected, actual, + state + ERR_UNEXP_MATCH + + MSG_EXPECT + expectedmatch + + MSG_ACTUAL + actual + + CHAR_NL + ); + } + + } + else // actualmatch is null + { + if (expectedmatch) + { + actual = actualmatch; + reportCompare(expected, actual, + state + ERR_NO_MATCH + + MSG_EXPECT + expectedmatch + + MSG_ACTUAL + actualmatch + + CHAR_NL + ); + } + else // we did not expect a match + { + // Being ultra-cautious. Presumably expectedmatch===actualmatch===null + expected = expectedmatch; + actual = actualmatch; + reportCompare (expectedmatch, actualmatch, state); + } + } + } + } + + function getState(status, pattern, string) + { + /* + * Escape \n's, etc. to make them LITERAL in the presentation string. + * We don't have to worry about this in |pattern|; such escaping is + * done automatically by pattern.toString(), invoked implicitly below. + * + * One would like to simply do: string = string.replace(/(\s)/g, '\$1'). + * However, the backreference $1 is not a literal string value, + * so this method doesn't work. + * + * Also tried string = string.replace(/(\s)/g, escape('$1')); + * but this just inserts the escape of the literal '$1', i.e. '%241'. + */ + string = string.replace(/\n/g, '\\n'); + string = string.replace(/\r/g, '\\r'); + string = string.replace(/\t/g, '\\t'); + string = string.replace(/\v/g, '\\v'); + string = string.replace(/\f/g, '\\f'); + + return (status + MSG_PATTERN + pattern + MSG_STRING + singleQuote(string)); + } + + + + /* + * If available, arr.toSource() gives more detail than arr.toString() + * + * var arr = Array(1,2,'3'); + * + * arr.toSource() + * [1, 2, "3"] + * + * arr.toString() + * 1,2,3 + * + * But toSource() doesn't exist in Rhino, so use our own imitation, below - + * + */ + function formatArray(arr) + { + try + { + return arr.toSource(); + } + catch(e) + { + return toSource(arr); + } + } + + + /* + * Imitate SpiderMonkey's arr.toSource() method: + * + * a) Double-quote each array element that is of string type + * b) Represent |undefined| and |null| by empty strings + * c) Delimit elements by a comma + single space + * d) Do not add delimiter at the end UNLESS the last element is |undefined| + * e) Add square brackets to the beginning and end of the string + */ + function toSource(arr) + { + var delim = CHAR_COMMA + CHAR_SPACE; + var elt = ''; + var ret = ''; + var len = arr.length; + + for (i=0; i String.fromCodePoint(x)).join(""); + } + function stringify(points) { + return points.map(x => x.toString(16)).join(); + } + + var source = codePointsToString(test.source); + var NFC = codePointsToString(test.NFC); + var NFD = codePointsToString(test.NFD); + var NFKC = codePointsToString(test.NFKC); + var NFKD = codePointsToString(test.NFKD); + var sourceStr = stringify(test.source); + var nfcStr = stringify(test.NFC); + var nfdStr = stringify(test.NFD); + var nfkcStr = stringify(test.NFKC); + var nfkdStr = stringify(test.NFKD); + + /* NFC */ + assertEq(source.normalize(), NFC, "NFC of " + sourceStr); + assertEq(NFC.normalize(), NFC, "NFC of " + nfcStr); + assertEq(NFD.normalize(), NFC, "NFC of " + nfdStr); + assertEq(NFKC.normalize(), NFKC, "NFC of " + nfkcStr); + assertEq(NFKD.normalize(), NFKC, "NFC of " + nfkdStr); + + assertEq(source.normalize(undefined), NFC, "NFC of " + sourceStr); + assertEq(NFC.normalize(undefined), NFC, "NFC of " + nfcStr); + assertEq(NFD.normalize(undefined), NFC, "NFC of " + nfdStr); + assertEq(NFKC.normalize(undefined), NFKC, "NFC of " + nfkcStr); + assertEq(NFKD.normalize(undefined), NFKC, "NFC of " + nfkdStr); + + assertEq(source.normalize("NFC"), NFC, "NFC of " + sourceStr); + assertEq(NFC.normalize("NFC"), NFC, "NFC of " + nfcStr); + assertEq(NFD.normalize("NFC"), NFC, "NFC of " + nfdStr); + assertEq(NFKC.normalize("NFC"), NFKC, "NFC of " + nfkcStr); + assertEq(NFKD.normalize("NFC"), NFKC, "NFC of " + nfkdStr); + + /* NFD */ + assertEq(source.normalize("NFD"), NFD, "NFD of " + sourceStr); + assertEq(NFC.normalize("NFD"), NFD, "NFD of " + nfcStr); + assertEq(NFD.normalize("NFD"), NFD, "NFD of " + nfdStr); + assertEq(NFKC.normalize("NFD"), NFKD, "NFD of " + nfkcStr); + assertEq(NFKD.normalize("NFD"), NFKD, "NFD of " + nfkdStr); + + /* NFKC */ + assertEq(source.normalize("NFKC"), NFKC, "NFKC of " + sourceStr); + assertEq(NFC.normalize("NFKC"), NFKC, "NFKC of " + nfcStr); + assertEq(NFD.normalize("NFKC"), NFKC, "NFKC of " + nfdStr); + assertEq(NFKC.normalize("NFKC"), NFKC, "NFKC of " + nfkcStr); + assertEq(NFKD.normalize("NFKC"), NFKC, "NFKC of " + nfkdStr); + + /* NFKD */ + assertEq(source.normalize("NFKD"), NFKD, "NFKD of " + sourceStr); + assertEq(NFC.normalize("NFKD"), NFKD, "NFKD of " + nfcStr); + assertEq(NFD.normalize("NFKD"), NFKD, "NFKD of " + nfdStr); + assertEq(NFKC.normalize("NFKD"), NFKD, "NFKD of " + nfkcStr); + assertEq(NFKD.normalize("NFKD"), NFKD, "NFKD of " + nfkdStr); +} diff --git a/harness/sm/non262-Temporal-PlainMonthDay-shell.js b/harness/sm/non262-Temporal-PlainMonthDay-shell.js new file mode 100644 index 0000000000..98e977bb47 --- /dev/null +++ b/harness/sm/non262-Temporal-PlainMonthDay-shell.js @@ -0,0 +1,49 @@ +/*--- +defines: [ISOFields, assertSameISOFields] +allow_unused: True +---*/ + +function ISOFields(monthDay) { + let re = /^(?\d{4,6})-(?\d{2})-(?\d{2})\[u-ca=(?[\w\-]+)\]$/; + + let str = monthDay.toString({calendarName: "always"}); + let match = str.match(re); + assertEq(match !== null, true, `can't match: ${str}`); + + let {year, month, day, calendar} = match.groups; + let isoYear = Number(year); + let isoMonth = Number(month); + let isoDay = Number(day); + + let date = Temporal.PlainDate.from(str); + let isoDate = date.withCalendar("iso8601"); + + assertEq(calendar, date.calendarId); + assertEq(isoYear, isoDate.year); + assertEq(isoMonth, isoDate.month); + assertEq(isoDay, isoDate.day); + + return { + isoYear, + isoMonth, + isoDay, + calendar, + }; +} + +function assertSameISOFields(actual, expected) { + let actualFields = ISOFields(actual); + let expectedFields = ISOFields(expected); + + assertEq(typeof actualFields.isoYear, "number"); + assertEq(typeof actualFields.isoMonth, "number"); + assertEq(typeof actualFields.isoDay, "number"); + + assertEq(actualFields.isoMonth > 0, true); + assertEq(actualFields.isoDay > 0, true); + + assertEq(actualFields.isoYear, expectedFields.isoYear); + assertEq(actualFields.isoMonth, expectedFields.isoMonth); + assertEq(actualFields.isoDay, expectedFields.isoDay); + assertEq(actualFields.calendar, expectedFields.calendar); +} diff --git a/harness/sm/non262-TypedArray-shell.js b/harness/sm/non262-TypedArray-shell.js new file mode 100644 index 0000000000..5fe532f0f4 --- /dev/null +++ b/harness/sm/non262-TypedArray-shell.js @@ -0,0 +1,133 @@ +/*--- +defines: [typedArrayConstructors, sharedTypedArrayConstructors, anyTypedArrayConstructors, isSharedConstructor, isFloatConstructor, isUnsignedConstructor] +allow_unused: True +---*/ +(function(global) { + "use strict"; + + const { + Float16Array, Float32Array, Float64Array, Object, Reflect, SharedArrayBuffer, WeakMap, + assertEq + } = global; + const { + apply: Reflect_apply, + construct: Reflect_construct, + } = Reflect; + const { + get: WeakMap_prototype_get, + has: WeakMap_prototype_has, + } = WeakMap.prototype; + + const sharedConstructors = new WeakMap(); + + // Synthesize a constructor for a shared memory array from the constructor + // for unshared memory. This has "good enough" fidelity for many uses. In + // cases where it's not good enough, call isSharedConstructor for local + // workarounds. + function sharedConstructor(baseConstructor) { + // Create SharedTypedArray as a subclass of %TypedArray%, following the + // built-in %TypedArray% subclasses. + class SharedTypedArray extends Object.getPrototypeOf(baseConstructor) { + constructor(...args) { + var array = Reflect_construct(baseConstructor, args); + var {buffer, byteOffset, length} = array; + var sharedBuffer = new SharedArrayBuffer(buffer.byteLength); + var sharedArray = Reflect_construct(baseConstructor, + [sharedBuffer, byteOffset, length], + new.target); + for (var i = 0; i < length; i++) + sharedArray[i] = array[i]; + assertEq(sharedArray.buffer, sharedBuffer); + return sharedArray; + } + } + + // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT + Object.defineProperty(SharedTypedArray, "BYTES_PER_ELEMENT", + {__proto__: null, value: baseConstructor.BYTES_PER_ELEMENT}); + + // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT + Object.defineProperty(SharedTypedArray.prototype, "BYTES_PER_ELEMENT", + {__proto__: null, value: baseConstructor.BYTES_PER_ELEMENT}); + + // Share the same name with the base constructor to avoid calling + // isSharedConstructor() in multiple places. + Object.defineProperty(SharedTypedArray, "name", + {__proto__: null, value: baseConstructor.name}); + + sharedConstructors.set(SharedTypedArray, baseConstructor); + + return SharedTypedArray; + } + + /** + * All TypedArray constructors for unshared memory. + */ + const typedArrayConstructors = Object.freeze([ + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array, + ].concat(Float16Array ?? [])); + + /** + * All TypedArray constructors for shared memory. + */ + const sharedTypedArrayConstructors = Object.freeze( + typeof SharedArrayBuffer === "function" + ? typedArrayConstructors.map(sharedConstructor) + : [] + ); + + /** + * All TypedArray constructors for unshared and shared memory. + */ + const anyTypedArrayConstructors = Object.freeze([ + ...typedArrayConstructors, ...sharedTypedArrayConstructors, + ]); + + /** + * Returns `true` if `constructor` is a TypedArray constructor for shared + * memory. + */ + function isSharedConstructor(constructor) { + return Reflect_apply(WeakMap_prototype_has, sharedConstructors, [constructor]); + } + + /** + * Returns `true` if `constructor` is a TypedArray constructor for shared + * or unshared memory, with an underlying element type of one of Float16, Float32 + * or Float64. + */ + function isFloatConstructor(constructor) { + if (isSharedConstructor(constructor)) + constructor = Reflect_apply(WeakMap_prototype_get, sharedConstructors, [constructor]); + return constructor == Float32Array || constructor == Float64Array || (Float16Array && constructor == Float16Array); + } + + /** + * Returns `true` if `constructor` is a TypedArray constructor for shared + * or unshared memory, with an underlying element type of one of Uint8, + * Uint8Clamped, Uint16, or Uint32. + */ + function isUnsignedConstructor(constructor) { + if (isSharedConstructor(constructor)) + constructor = Reflect_apply(WeakMap_prototype_get, sharedConstructors, [constructor]); + return constructor == Uint8Array || + constructor == Uint8ClampedArray || + constructor == Uint16Array || + constructor == Uint32Array; + } + + global.typedArrayConstructors = typedArrayConstructors; + global.sharedTypedArrayConstructors = sharedTypedArrayConstructors; + global.anyTypedArrayConstructors = anyTypedArrayConstructors; + global.isSharedConstructor = isSharedConstructor; + global.isFloatConstructor = isFloatConstructor; + global.isUnsignedConstructor = isUnsignedConstructor; +})(this); diff --git a/harness/sm/non262-expressions-shell.js b/harness/sm/non262-expressions-shell.js new file mode 100644 index 0000000000..e09a03cd1e --- /dev/null +++ b/harness/sm/non262-expressions-shell.js @@ -0,0 +1,284 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/*--- +defines: [testDestructuringArrayDefault, formatArray, toSource] +allow_unused: True +---*/ + +(function(global) { + function func() { + } + class C { + foo() { + } + static foo() { + } + } + + function test_one(pattern, val, opt) { + var stmts = []; + var i = 0; + var c; + + stmts.push(`var ${pattern} = ${val};`); + + for (var stmt of stmts) { + if (!opt.no_plain) { + eval(` +${stmt} +`); + } + + if (!opt.no_func) { + eval(` +function f${i}() { + ${stmt} +} +f${i}(); +`); + i++; + + eval(` +var f${i} = function foo() { + ${stmt} +}; +f${i}(); +`); + i++; + + eval(` +var f${i} = () => { + ${stmt} +}; +f${i}(); +`); + i++; + } + + if (!opt.no_gen) { + eval(` +function* g${i}() { + ${stmt} +} +[...g${i}()]; +`); + i++; + + eval(` +var g${i} = function* foo() { + ${stmt} +}; +[...g${i}()]; +`); + i++; + } + + if (!opt.no_ctor) { + eval(` +class D${i} { + constructor() { + ${stmt} + } +} +new D${i}(); +`); + i++; + } + + if (!opt.no_derived_ctor) { + if (opt.no_pre_super) { + eval(` +class D${i} extends C { + constructor() { + ${stmt} + try { super(); } catch (e) {} + } +} +new D${i}(); +`); + i++; + } else { + eval(` +class D${i} extends C { + constructor() { + super(); + ${stmt} + } +} +new D${i}(); +`); + i++; + } + } + + if (!opt.no_method) { + eval(` +class D${i} extends C { + method() { + ${stmt} + } + static staticMethod() { + ${stmt} + } +} +new D${i}().method(); +D${i}.staticMethod(); +`); + i++; + } + } + + if (!opt.no_func_arg) { + eval(` +function f${i}(${pattern}) {} +f${i}(${val}); +`); + i++; + + eval(` +var f${i} = function foo(${pattern}) {}; +f${i}(${val}); +`); + i++; + + eval(` +var f${i} = (${pattern}) => {}; +f${i}(${val}); +`); + i++; + } + + if (!opt.no_gen_arg) { + eval(` +function* g${i}(${pattern}) {} +[...g${i}(${val})]; +`); + i++; + + eval(` +var g${i} = function* foo(${pattern}) {}; +[...g${i}(${val})]; +`); + i++; + } + } + + function test(expr, opt={}) { + var pattern = `[a=${expr}, ...c]`; + test_one(pattern, "[]", opt); + test_one(pattern, "[1]", opt); + + pattern = `[,a=${expr}]`; + test_one(pattern, "[]", opt); + test_one(pattern, "[1]", opt); + test_one(pattern, "[1, 2]", opt); + + pattern = `[{x: [a=${expr}]}]`; + test_one(pattern, "[{x: [1]}]", opt); + + pattern = `[x=[a=${expr}]=[]]`; + test_one(pattern, "[]", opt); + test_one(pattern, "[1]", opt); + + pattern = `[x=[a=${expr}]=[1]]`; + test_one(pattern, "[]", opt); + test_one(pattern, "[1]", opt); + } + + global.testDestructuringArrayDefault = test; +})(this); + +(function(global) { + /* + * Date: 07 February 2001 + * + * Functionality common to Array testing - + */ + //----------------------------------------------------------------------------- + + + var CHAR_LBRACKET = '['; + var CHAR_RBRACKET = ']'; + var CHAR_QT_DBL = '"'; + var CHAR_COMMA = ','; + var CHAR_SPACE = ' '; + var TYPE_STRING = typeof 'abc'; + + + /* + * If available, arr.toSource() gives more detail than arr.toString() + * + * var arr = Array(1,2,'3'); + * + * arr.toSource() + * [1, 2, "3"] + * + * arr.toString() + * 1,2,3 + * + * But toSource() doesn't exist in Rhino, so use our own imitation, below - + * + */ + function formatArray(arr) + { + try + { + return arr.toSource(); + } + catch(e) + { + return toSource(arr); + } + } + + global.formatArray = formatArray; + + /* + * Imitate SpiderMonkey's arr.toSource() method: + * + * a) Double-quote each array element that is of string type + * b) Represent |undefined| and |null| by empty strings + * c) Delimit elements by a comma + single space + * d) Do not add delimiter at the end UNLESS the last element is |undefined| + * e) Add square brackets to the beginning and end of the string + */ + function toSource(arr) + { + var delim = CHAR_COMMA + CHAR_SPACE; + var elt = ''; + var ret = ''; + var len = arr.length; + + for (i=0; i>> 0; + return !("" + u == p && u != 0xffffffff); + } + + function assertIsCloneOf(a, b, path) { + assertEq(a === b, false); + + var ca = classOf(a); + assertEq(ca, classOf(b), path); + + assertEq(Object.getPrototypeOf(a), + ca == "[object Object]" ? Object.prototype : Array.prototype, + path); + + // 'b', the original object, may have non-enumerable or XMLName + // properties; ignore them (except .length, if it's an Array). + // 'a', the clone, should not have any non-enumerable properties + // (except .length, if it's an Array) or XMLName properties. + var pb = ownProperties(b).filter(function(element) { + return isCloneable(b, element); + }); + var pa = ownProperties(a); + for (var i = 0; i < pa.length; i++) { + assertEq(typeof pa[i][0], "string", "clone should not have E4X properties " + path); + if (!isCloneable(a, pa[i])) { + throw new Error("non-cloneable clone property " + pa[i][0] + " " + path); + } + } + + // Check that, apart from properties whose names are array indexes, + // the enumerable properties appear in the same order. + var aNames = pa.map(function (pair) { return pair[1]; }).filter(notIndex); + var bNames = pa.map(function (pair) { return pair[1]; }).filter(notIndex); + assertEq(aNames.join(","), bNames.join(","), path); + + // Check that the lists are the same when including array indexes. + function byName(a, b) { a = a[0]; b = b[0]; return a < b ? -1 : a === b ? 0 : 1; } + pa.sort(byName); + pb.sort(byName); + assertEq(pa.length, pb.length, "should see the same number of properties " + path); + for (var i = 0; i < pa.length; i++) { + var aName = pa[i][0]; + var bName = pb[i][0]; + assertEq(aName, bName, path); + + var path2 = path + "." + aName; + var da = pa[i][1]; + var db = pb[i][1]; + if (!isArrayLength(a, pa[i])) { + assertEq(da.configurable, true, path2); + } + assertEq(da.writable, true, path2); + assertEq("value" in da, true, path2); + var va = da.value; + var vb = b[pb[i][0]]; + if (typeof va === "object" && va !== null) + queue.push([va, vb, path2]); + else + assertEq(va, vb, path2); + } + } + + var banner = "while testing clone of " + (desc || JSON.stringify(b)); + var a = deserialize(serialize(b)); + var queue = [[a, b, banner]]; + while (queue.length) { + var triple = queue.shift(); + assertIsCloneOf(triple[0], triple[1], triple[2]); + } + + return a; // for further testing + } + global.clone_object_check = clone_object_check; + +})(this); diff --git a/harness/sm/non262-generators-shell.js b/harness/sm/non262-generators-shell.js new file mode 100644 index 0000000000..46161a803c --- /dev/null +++ b/harness/sm/non262-generators-shell.js @@ -0,0 +1,21 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/*--- +defines: [assertFalse, assertTrue, assertNotEq, assertIteratorResult, assertIteratorNext, assertIteratorDone] +allow_unused: True +---*/ + +function assertFalse(a) { assertEq(a, false) } +function assertTrue(a) { assertEq(a, true) } +function assertNotEq(found, not_expected) { assertEq(Object.is(found, not_expected), false) } +function assertIteratorResult(result, value, done) { + assertDeepEq(result.value, value); + assertEq(result.done, done); +} +function assertIteratorNext(iter, value) { + assertIteratorResult(iter.next(), value, false); +} +function assertIteratorDone(iter, value) { + assertIteratorResult(iter.next(), value, true); +} diff --git a/harness/sm/non262-object-shell.js b/harness/sm/non262-object-shell.js new file mode 100644 index 0000000000..c569b52521 --- /dev/null +++ b/harness/sm/non262-object-shell.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/*--- +defines: [getJSClass, findType, findClass, isObject] +allow_unused: True +---*/ + +/* + * Date: 14 Mar 2001 + * + * SUMMARY: Utility functions for testing objects - + * + * Suppose obj is an instance of a native type, e.g. Number. + * Then obj.toString() invokes Number.prototype.toString(). + * We would also like to access Object.prototype.toString(). + * + * The difference is this: suppose obj = new Number(7). + * Invoking Number.prototype.toString() on this just returns 7. + * Object.prototype.toString() on this returns '[object Number]'. + * + * The getJSClass() function returns 'Number', the [[Class]] property of obj. + * See ECMA-262 Edition 3, 13-Oct-1999, Section 8.6.2 + */ +//----------------------------------------------------------------------------- + + +var cnNoObject = 'Unexpected Error!!! Parameter to this function must be an object'; +var cnNoClass = 'Unexpected Error!!! Cannot find Class property'; +var cnObjectToString = Object.prototype.toString; +var GLOBAL = 'global'; + + +// checks that it's safe to call findType() +function getJSClass(obj) +{ + if (isObject(obj)) + return findClass(findType(obj)); + return cnNoObject; +} + + +function findType(obj) +{ + return cnObjectToString.apply(obj); +} + + +// given '[object Number]', return 'Number' +function findClass(sType) +{ + var re = /^\[.*\s+(\w+)\s*\]$/; + var a = sType.match(re); + + if (a && a[1]) + return a[1]; + return cnNoClass; +} + + +function isObject(obj) +{ + return obj instanceof Object; +} + diff --git a/harness/sm/non262-shell.js b/harness/sm/non262-shell.js new file mode 100644 index 0000000000..06f067f566 --- /dev/null +++ b/harness/sm/non262-shell.js @@ -0,0 +1,381 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/*--- +defines: [completesNormally, raisesException, deepEqual, makeIterator, Permutations, assertThrowsValue, assertThrownErrorContains, assertThrowsInstanceOfWithMessageCheck, assertThrowsInstanceOf, assertThrowsInstanceOfWithMessage, assertThrowsInstanceOfWithMessageContains, assertDeepEq] +allow_unused: True +---*/ + +(function() { + const undefined = void 0; + + /* + * completesNormally(CODE) returns true if evaluating CODE (as eval + * code) completes normally (rather than throwing an exception). + */ + globalThis.completesNormally = function completesNormally(code) { + try { + eval(code); + return true; + } catch (exception) { + return false; + } + } + + /* + * raisesException(EXCEPTION)(CODE) returns true if evaluating CODE (as + * eval code) throws an exception object that is an instance of EXCEPTION, + * and returns false if it throws any other error or evaluates + * successfully. For example: raises(TypeError)("0()") == true. + */ + globalThis.raisesException = function raisesException(exception) { + return function (code) { + try { + eval(code); + return false; + } catch (actual) { + return actual instanceof exception; + } + }; + }; + + /* + * Return true if A is equal to B, where equality on arrays and objects + * means that they have the same set of enumerable properties, the values + * of each property are deep_equal, and their 'length' properties are + * equal. Equality on other types is ==. + */ + globalThis.deepEqual = function deepEqual(a, b) { + if (typeof a != typeof b) + return false; + + if (typeof a == 'object') { + var props = {}; + // For every property of a, does b have that property with an equal value? + for (var prop in a) { + if (!deepEqual(a[prop], b[prop])) + return false; + props[prop] = true; + } + // Are all of b's properties present on a? + for (var prop in b) + if (!props[prop]) + return false; + // length isn't enumerable, but we want to check it, too. + return a.length == b.length; + } + + if (a === b) { + // Distinguish 0 from -0, even though they are ===. + return a !== 0 || 1/a === 1/b; + } + + // Treat NaNs as equal, even though NaN !== NaN. + // NaNs are the only non-reflexive values, i.e., if a !== a, then a is a NaN. + // isNaN is broken: it converts its argument to number, so isNaN("foo") => true + return a !== a && b !== b; + } + + /** Make an iterator with a return method. */ + globalThis.makeIterator = function makeIterator(overrides) { + var throwMethod; + if (overrides && overrides.throw) + throwMethod = overrides.throw; + var iterator = { + throw: throwMethod, + next: function(x) { + if (overrides && overrides.next) + return overrides.next(x); + return { done: false }; + }, + return: function(x) { + if (overrides && overrides.ret) + return overrides.ret(x); + return { done: true }; + } + }; + + return function() { return iterator; }; + }; + + /** Yield every permutation of the elements in some array. */ + globalThis.Permutations = function* Permutations(items) { + if (items.length == 0) { + yield []; + } else { + items = items.slice(0); + for (let i = 0; i < items.length; i++) { + let swap = items[0]; + items[0] = items[i]; + items[i] = swap; + for (let e of Permutations(items.slice(1, items.length))) + yield [items[0]].concat(e); + } + } + }; + + if (typeof globalThis.assertThrowsValue === 'undefined') { + globalThis.assertThrowsValue = function assertThrowsValue(f, val, msg) { + var fullmsg; + try { + f(); + } catch (exc) { + if ((exc === val) === (val === val) && (val !== 0 || 1 / exc === 1 / val)) + return; + fullmsg = "Assertion failed: expected exception " + val + ", got " + exc; + } + if (fullmsg === undefined) + fullmsg = "Assertion failed: expected exception " + val + ", no exception thrown"; + if (msg !== undefined) + fullmsg += " - " + msg; + throw new Error(fullmsg); + }; + } + + if (typeof globalThis.assertThrownErrorContains === 'undefined') { + globalThis.assertThrownErrorContains = function assertThrownErrorContains(thunk, substr) { + try { + thunk(); + } catch (e) { + if (e.message.indexOf(substr) !== -1) + return; + throw new Error("Expected error containing " + substr + ", got " + e); + } + throw new Error("Expected error containing " + substr + ", no exception thrown"); + }; + } + + if (typeof globalThis.assertThrowsInstanceOfWithMessageCheck === 'undefined') { + globalThis.assertThrowsInstanceOfWithMessageCheck = function assertThrowsInstanceOfWithMessageCheck(f, ctor, check, msg) { + var fullmsg; + try { + f(); + } catch (exc) { + if (!(exc instanceof ctor)) + fullmsg = `Assertion failed: expected exception ${ctor.name}, got ${exc}`; + else { + var result = check(exc.message); + if (!result) + fullmsg = `Assertion failed: expected exception with message, got ${exc}`; + else + return; + } + } + + if (fullmsg === undefined) + fullmsg = `Assertion failed: expected exception ${ctor.name}, no exception thrown`; + if (msg !== undefined) + fullmsg += " - " + msg; + + throw new Error(fullmsg); + }; + } + + if (typeof globalThis.assertThrowsInstanceOf === 'undefined') { + globalThis.assertThrowsInstanceOf = function assertThrowsInstanceOf(f, ctor, msg) { + assertThrowsInstanceOfWithMessageCheck(f, ctor, _ => true, msg); + }; + } + + if (typeof globalThis.assertThrowsInstanceOfWithMessage === 'undefined') { + globalThis.assertThrowsInstanceOfWithMessage = function assertThrowsInstanceOfWithMessage(f, ctor, expected, msg) { + assertThrowsInstanceOfWithMessageCheck(f, ctor, message => message === expected, msg); + } + } + + if (typeof globalThis.assertThrowsInstanceOfWithMessageContains === 'undefined') { + globalThis.assertThrowsInstanceOfWithMessageContains = function assertThrowsInstanceOfWithMessageContains(f, ctor, substr, msg) { + assertThrowsInstanceOfWithMessageCheck(f, ctor, message => message.indexOf(substr) !== -1, msg); + } + } + + globalThis.assertDeepEq = (function(){ + var call = Function.prototype.call, + Array_isArray = Array.isArray, + Array_includes = call.bind(Array.prototype.includes), + Map_ = Map, + Error_ = Error, + Symbol_ = Symbol, + Symbol_keyFor = Symbol.keyFor, + Symbol_description = call.bind(Object.getOwnPropertyDescriptor(Symbol.prototype, "description").get), + Map_has = call.bind(Map.prototype.has), + Map_get = call.bind(Map.prototype.get), + Map_set = call.bind(Map.prototype.set), + Object_toString = call.bind(Object.prototype.toString), + Function_toString = call.bind(Function.prototype.toString), + Object_getPrototypeOf = Object.getPrototypeOf, + Object_hasOwnProperty = call.bind(Object.prototype.hasOwnProperty), + Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor, + Object_isExtensible = Object.isExtensible, + Object_getOwnPropertyNames = Object.getOwnPropertyNames; + + // Return true iff ES6 Type(v) isn't Object. + // Note that `typeof document.all === "undefined"`. + function isPrimitive(v) { + return (v === null || + v === undefined || + typeof v === "boolean" || + typeof v === "number" || + typeof v === "string" || + typeof v === "symbol"); + } + + function assertSameValue(a, b, msg) { + try { + assertEq(a, b); + } catch (exc) { + throw Error_(exc.message + (msg ? " " + msg : "")); + } + } + + function assertSameClass(a, b, msg) { + var ac = Object_toString(a), bc = Object_toString(b); + assertSameValue(ac, bc, msg); + switch (ac) { + case "[object Function]": + if (typeof isProxy !== "undefined" && !isProxy(a) && !isProxy(b)) + assertSameValue(Function_toString(a), Function_toString(b), msg); + } + } + + function at(prevmsg, segment) { + return prevmsg ? prevmsg + segment : "at _" + segment; + } + + // Assert that the arguments a and b are thoroughly structurally equivalent. + // + // For the sake of speed, we cut a corner: + // var x = {}, y = {}, ax = [x]; + // assertDeepEq([ax, x], [ax, y]); // passes (?!) + // + // Technically this should fail, since the two object graphs are different. + // (The graph of [ax, y] contains one more object than the graph of [ax, x].) + // + // To get technically correct behavior, pass {strictEquivalence: true}. + // This is slower because we have to walk the entire graph, and Object.prototype + // is big. + // + return function assertDeepEq(a, b, options) { + var strictEquivalence = options ? options.strictEquivalence : false; + + function assertSameProto(a, b, msg) { + check(Object_getPrototypeOf(a), Object_getPrototypeOf(b), at(msg, ".__proto__")); + } + + function failPropList(na, nb, msg) { + throw Error_("got own properties " + JSON.stringify(na) + ", expected " + JSON.stringify(nb) + + (msg ? " " + msg : "")); + } + + function assertSameProps(a, b, msg) { + var na = Object_getOwnPropertyNames(a), + nb = Object_getOwnPropertyNames(b); + if (na.length !== nb.length) + failPropList(na, nb, msg); + + // Ignore differences in whether Array elements are stored densely. + if (Array_isArray(a)) { + na.sort(); + nb.sort(); + } + + for (var i = 0; i < na.length; i++) { + var name = na[i]; + if (name !== nb[i]) + failPropList(na, nb, msg); + var da = Object_getOwnPropertyDescriptor(a, name), + db = Object_getOwnPropertyDescriptor(b, name); + var pmsg = at(msg, /^[_$A-Za-z0-9]+$/.test(name) + ? /0|[1-9][0-9]*/.test(name) ? "[" + name + "]" : "." + name + : "[" + JSON.stringify(name) + "]"); + assertSameValue(da.configurable, db.configurable, at(pmsg, ".[[Configurable]]")); + assertSameValue(da.enumerable, db.enumerable, at(pmsg, ".[[Enumerable]]")); + if (Object_hasOwnProperty(da, "value")) { + if (!Object_hasOwnProperty(db, "value")) + throw Error_("got data property, expected accessor property" + pmsg); + check(da.value, db.value, pmsg); + } else { + if (Object_hasOwnProperty(db, "value")) + throw Error_("got accessor property, expected data property" + pmsg); + check(da.get, db.get, at(pmsg, ".[[Get]]")); + check(da.set, db.set, at(pmsg, ".[[Set]]")); + } + } + }; + + const wellKnownSymbols = Reflect.ownKeys(Symbol) + .map(key => Symbol[key]) + .filter(value => typeof value === "symbol"); + + // The standard doesn't offer a convenient way to distinguish well-known + // symbols from user-created symbols. + function isSimilarSymbol(a, b) { + // Fast path for same symbols. + if (a === b) { + return true; + } + + // 1. Symbol descriptions must match. + // 2. Either both symbols are in the registry or none is. + // 3. Neither symbol must be a well-known symbol, because those are + // already handled through the fast path. + return Symbol_description(a) === Symbol_description(b) && + Symbol_keyFor(a) === Symbol_keyFor(b) && + !Array_includes(wellKnownSymbols, a) && + !Array_includes(wellKnownSymbols, b); + } + + var ab = new Map_(); + var bpath = new Map_(); + + function check(a, b, path) { + if (typeof a === "symbol") { + // Symbols are primitives, but they have identity. + // Symbol("x") !== Symbol("x") but + // assertDeepEq(Symbol("x"), Symbol("x")) should pass. + if (typeof b !== "symbol") { + throw Error_("got " + String(a) + ", expected " + String(b) + " " + path); + } else if (!isSimilarSymbol(a, b)) { + throw Error_("got " + String(a) + ", expected " + String(b) + " " + path); + } else if (Map_has(ab, a)) { + assertSameValue(Map_get(ab, a), b, path); + } else if (Map_has(bpath, b)) { + var bPrevPath = Map_get(bpath, b) || "_"; + throw Error_("got distinct symbols " + at(path, "") + " and " + + at(bPrevPath, "") + ", expected the same symbol both places"); + } else { + Map_set(ab, a, b); + Map_set(bpath, b, path); + } + } else if (isPrimitive(a)) { + assertSameValue(a, b, path); + } else if (isPrimitive(b)) { + throw Error_("got " + Object_toString(a) + ", expected " + String(b) + " " + path); + } else if (Map_has(ab, a)) { + assertSameValue(Map_get(ab, a), b, path); + } else if (Map_has(bpath, b)) { + var bPrevPath = Map_get(bpath, b) || "_"; + throw Error_("got distinct objects " + at(path, "") + " and " + at(bPrevPath, "") + + ", expected the same object both places"); + } else { + Map_set(ab, a, b); + Map_set(bpath, b, path); + if (a !== b || strictEquivalence) { + assertSameClass(a, b, path); + assertSameProto(a, b, path); + assertSameProps(a, b, path); + assertSameValue(Object_isExtensible(a), + Object_isExtensible(b), + at(path, ".[[Extensible]]")); + } + } + } + + check(a, b, ""); + }; + })(); + +})(); diff --git a/harness/sm/non262-strict-shell.js b/harness/sm/non262-strict-shell.js new file mode 100644 index 0000000000..198de81071 --- /dev/null +++ b/harness/sm/non262-strict-shell.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/*--- +defines: [testLenientAndStrict, parsesSuccessfully, parseRaisesException, returns] +allow_unused: True +---*/ +(function(global) { + + /* + * Return true if both of these return true: + * - LENIENT_PRED applied to CODE + * - STRICT_PRED applied to CODE with a use strict directive added to the front + * + * Run STRICT_PRED first, for testing code that affects the global environment + * in loose mode, but fails in strict mode. + */ + global.testLenientAndStrict = function testLenientAndStrict(code, lenient_pred, strict_pred) { + return (strict_pred("'use strict'; " + code) && + lenient_pred(code)); + } + + /* + * parsesSuccessfully(CODE) returns true if CODE parses as function + * code without an error. + */ + global.parsesSuccessfully = function parsesSuccessfully(code) { + try { + Function(code); + return true; + } catch (exception) { + return false; + } + }; + + /* + * parseRaisesException(EXCEPTION)(CODE) returns true if parsing CODE + * as function code raises EXCEPTION. + */ + global.parseRaisesException = function parseRaisesException(exception) { + return function (code) { + try { + Function(code); + return false; + } catch (actual) { + return exception.prototype.isPrototypeOf(actual); + } + }; + }; + + /* + * returns(VALUE)(CODE) returns true if evaluating CODE (as eval code) + * completes normally (rather than throwing an exception), yielding a value + * strictly equal to VALUE. + */ + global.returns = function returns(value) { + return function(code) { + try { + return eval(code) === value; + } catch (exception) { + return false; + } + } + } + +})(this); diff --git a/harness/sm/non262.js b/harness/sm/non262.js new file mode 100644 index 0000000000..c1829e3e4c --- /dev/null +++ b/harness/sm/non262.js @@ -0,0 +1,74 @@ +/*--- +defines: [printBugNumber, inSection, printStatus, writeHeaderToLog, + assertThrownErrorContains, assertThrowsInstanceOfWithMessageCheck, newGlobal, print, assertEq, reportCompare, reportMatch, createIsHTMLDDA, createExternalArrayBuffer, + enableGeckoProfilingWithSlowAssertions, enableGeckoProfiling, disableGeckoProfiling] +---*/ + +function printBugNumber() {} +function inSection() {} +function printStatus() {} +function writeHeaderToLog() {} + +function assertThrownErrorContains(f, substr) { + try { + f(); + } catch (exc) { + // Do not test error messages + return; + } + throw new Test262Error("Expected error containing " + substr + ", no exception thrown"); +} + +function assertThrowsInstanceOfWithMessageCheck(f, ctor, _check, msg) { + var fullmsg; + try { + f(); + } catch (exc) { + if (exc instanceof ctor) + return; + fullmsg = `Assertion failed: expected exception ${ctor.name}, got ${exc}`; + } + + if (fullmsg === undefined) + fullmsg = `Assertion failed: expected exception ${ctor.name}, no exception thrown`; + if (msg !== undefined) + fullmsg += " - " + msg; + + throw new Error(fullmsg); +} + +globalThis.createNewGlobal = function() { + return $262.createRealm().global +} + +function print(...args) { +} +function assertEq(...args) { + assert.sameValue(...args) +} +function reportCompare(...args) { + assert.sameValue(...args) +} + +function reportMatch(expectedRegExp, actual, description = "") { + assert.sameValue(typeof actual, "string", + `Type mismatch, expected string, actual type ${typeof actual}`); + assert.notSameValue(expectedRegExp.exec(actual), null, + `Expected match to '${expectedRegExp}', Actual value '${actual}'`); +} + +if (globalThis.createIsHTMLDDA === undefined) { + globalThis.createIsHTMLDDA = function createIsHTMLDDA() { + return $262.IsHTMLDDA; + } +} + +if (globalThis.createExternalArrayBuffer === undefined) { + globalThis.createExternalArrayBuffer = function createExternalArrayBuffer(size) { + return new ArrayBuffer(size); + } +} +if (globalThis.enableGeckoProfilingWithSlowAssertions === undefined) { + globalThis.enableGeckoProfilingWithSlowAssertions = globalThis.enableGeckoProfiling = + globalThis.disableGeckoProfiling = () => {} +} \ No newline at end of file diff --git a/test/staging/sm/Array/array-length-set-during-for-in.js b/test/staging/sm/Array/array-length-set-during-for-in.js new file mode 100644 index 0000000000..3e6c9c1ff3 --- /dev/null +++ b/test/staging/sm/Array/array-length-set-during-for-in.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = [0, 1]; +var iterations = 0; +for (var k in a) { + iterations++; + a.length = 1; +} +assert.sameValue(iterations, 1); + diff --git a/test/staging/sm/Array/array-length-set-on-nonarray.js b/test/staging/sm/Array/array-length-set-on-nonarray.js new file mode 100644 index 0000000000..39c4448b98 --- /dev/null +++ b/test/staging/sm/Array/array-length-set-on-nonarray.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 548671; +var summary = + "Don't use a shared-permanent inherited property to implement " + + "[].length or (function(){}).length"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var a = []; +a.p = 1; +var x = Object.create(a); +assert.sameValue(x.length, 0); +assert.sameValue(x.p, 1); +assert.sameValue(a.length, 0); + +print("All tests passed!"); diff --git a/test/staging/sm/Array/at.js b/test/staging/sm/Array/at.js new file mode 100644 index 0000000000..17d53213c5 --- /dev/null +++ b/test/staging/sm/Array/at.js @@ -0,0 +1,48 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function basic() { + assert.sameValue([0].at(0), 0); + assert.sameValue([0].at(-1), 0); + + assert.sameValue([].at(0), undefined); + assert.sameValue([].at(-1), undefined); + assert.sameValue([].at(1), undefined); + + assert.sameValue([0, 1].at(0), 0); + assert.sameValue([0, 1].at(1), 1); + assert.sameValue([0, 1].at(-2), 0); + assert.sameValue([0, 1].at(-1), 1); + + assert.sameValue([0, 1].at(2), undefined); + assert.sameValue([0, 1].at(-3), undefined); + assert.sameValue([0, 1].at(-4), undefined); + assert.sameValue([0, 1].at(Infinity), undefined); + assert.sameValue([0, 1].at(-Infinity), undefined); + assert.sameValue([0, 1].at(NaN), 0); // ToInteger(NaN) = 0 +} + +function obj() { + var o = {length: 0, [0]: "a", at: Array.prototype.at}; + + assert.sameValue(o.at(0), undefined); + assert.sameValue(o.at(-1), undefined); + + o.length = 1; + assert.sameValue(o.at(0), "a"); + assert.sameValue(o.at(-1), "a"); + assert.sameValue(o.at(1), undefined); + assert.sameValue(o.at(-2), undefined); +} + +basic(); +obj(); + diff --git a/test/staging/sm/Array/change-array-by-copy-cross-compartment-create.js b/test/staging/sm/Array/change-array-by-copy-cross-compartment-create.js new file mode 100644 index 0000000000..5919d1bb83 --- /dev/null +++ b/test/staging/sm/Array/change-array-by-copy-cross-compartment-create.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +function test(otherGlobal) { + let arrays = [ + ["with", otherGlobal.Array.prototype.with.call([1,2,3], 1, 3)], + ["toSpliced", otherGlobal.Array.prototype.toSpliced.call([1, 2, 3], 0, 1, 4, 5)], + ["toReversed", otherGlobal.Array.prototype.toReversed.call([1, 2, 3])], + ["toSorted", otherGlobal.Array.prototype.toSorted.call([1, 2, 3], (x, y) => y > x)] + ] + + // Test that calling each method in a different compartment returns an array, and that + // the returned array's prototype matches the other compartment's Array prototype, + // not this one. + for (const [name, arr] of arrays) { + assert.sameValue(arr instanceof Array, false, name + " returned an instance of Array"); + assert.sameValue(arr instanceof otherGlobal.Array, true, name + " did not return an instance of new global's Array"); + assert.sameValue(Object.getPrototypeOf(arr) !== Object.getPrototypeOf([1, 2, 3]), true, + name + " returned an object with a prototype from the wrong realm"); + } +} + +test(createNewGlobal()); +test(createNewGlobal({newCompartment: true})); + diff --git a/test/staging/sm/Array/change-array-by-copy-errors-from-correct-realm.js b/test/staging/sm/Array/change-array-by-copy-errors-from-correct-realm.js new file mode 100644 index 0000000000..55683fc68e --- /dev/null +++ b/test/staging/sm/Array/change-array-by-copy-errors-from-correct-realm.js @@ -0,0 +1,85 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +function test(otherGlobal) { + assert.sameValue(TypeError !== otherGlobal.TypeError, true); + assert.sameValue(Object.getPrototypeOf(TypeError) !== Object.getPrototypeOf(otherGlobal.TypeError), true); + assert.sameValue(RangeError !== otherGlobal.RangeError, true); + assert.sameValue(Object.getPrototypeOf(RangeError) !== Object.getPrototypeOf(otherGlobal.RangeError), true); + + + var arrayLike = { + get "0"() { + throw new Error("Get 0"); + }, + get "4294967295" () { // 2 ** 32 - 1 + throw new Error("Get 2147483648"); + }, + get "4294967296" () { // 2 ** 32 + throw new Error("Get 2147483648"); + }, + length: 2 ** 32 + }; + + let gToSorted = otherGlobal.Array.prototype.toSorted; + let gToSpliced = otherGlobal.Array.prototype.toSpliced; + let gToReversed = otherGlobal.Array.prototype.toReversed; + let gWith = otherGlobal.Array.prototype.with; + + let typeErrorCalls = [ + ["toSorted - bad comparator", () => gToSorted.call([], 5)], + ["toSorted - this is null", () => gToSorted.call(null)], + ["toSpliced - array too long", () => { + var oldLen = arrayLike.length; + arrayLike.length = 2**53 - 1; + gToSpliced.call(arrayLike, 0, 0, 1); + arrayLike.length = oldLen; + }] + ] + + let rangeErrorCalls = [ + ["toSorted - array too long", () => gToSorted.call(arrayLike)], + ["toReversed - array too long", () => gToReversed.call(arrayLike)], + ["toSpliced - adding elements would exceed max array length", () => gToSpliced.call(arrayLike, 0, 0)], + ["with - index out of range", () => gWith.call([0, 1, 2], 3, 7)], + ["with - negative index", () => gWith.call([0, 1, 2], -4, 7)], + ["with - array too long", () => gWith.call(arrayLike, 0, 0)] + ] + + // For each erroneous case, make sure the error comes from + // the other realm (not this realm) + for (const [message, f] of typeErrorCalls) { + try { + f(); + } catch (exc) { + assert.sameValue(exc instanceof TypeError, false, message + " threw TypeError from wrong realm"); + assert.sameValue(exc instanceof otherGlobal.TypeError, true, message + " didn't throw TypeError from other realm"); + assert.sameValue(Object.getPrototypeOf(exc) !== Object.getPrototypeOf(TypeError), true, + message + " TypeError has wrong prototype"); + } + } + + for (const [message, f] of rangeErrorCalls) { + try { + f(); + } catch (exc) { + assert.sameValue(exc instanceof RangeError, false, message + " threw RangeError from wrong realm"); + assert.sameValue(exc instanceof otherGlobal.RangeError, true, message + " didn't throw RangeError from other realm"); + assert.sameValue(Object.getPrototypeOf(exc) !== Object.getPrototypeOf(RangeError), true, + message + " TypeError has wrong prototype"); + } + } +} + +test(createNewGlobal()); +test(createNewGlobal({newCompartment: true})); + diff --git a/test/staging/sm/Array/concat-proxy.js b/test/staging/sm/Array/concat-proxy.js new file mode 100644 index 0000000000..0bc03e18ac --- /dev/null +++ b/test/staging/sm/Array/concat-proxy.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1287520; +var summary = 'Array.prototype.concat should check HasProperty everytime for non-dense array'; + +print(BUGNUMBER + ": " + summary); + +var a = [1, 2, 3]; +a.constructor = { + [Symbol.species]: function(...args) { + var p = new Proxy(new Array(...args), { + defineProperty(target, propertyKey, receiver) { + if (propertyKey === "0") delete a[1]; + return Reflect.defineProperty(target, propertyKey, receiver); + } + }); + return p; + } +}; + +var p = a.concat(); +assert.sameValue(0 in p, true); +assert.sameValue(1 in p, false); +assert.sameValue(2 in p, true); + diff --git a/test/staging/sm/Array/concat-spreadable-basic.js b/test/staging/sm/Array/concat-spreadable-basic.js new file mode 100644 index 0000000000..aac540836b --- /dev/null +++ b/test/staging/sm/Array/concat-spreadable-basic.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +const x = Object.freeze([1, 2, 3]); + +let fakeArray = { + [Symbol.isConcatSpreadable]: true, + length: 2, + 0: "hello", + 1: "world" +} +assert.deepEqual(x.concat(fakeArray), [1, 2, 3, "hello", "world"]); +assert.deepEqual(x.concat(fakeArray, fakeArray), [1, 2, 3, "hello", "world", "hello", "world"]); + +for (let truthy of [true, 3.41, "abc", Symbol(), {}]) { + let obj = {[Symbol.isConcatSpreadable]: truthy, length: 1, 0: "hey"} + assert.deepEqual(x.concat(obj), [1, 2, 3, "hey"]); +} + +for (let notTruthy of [null, undefined, false, 0, NaN, ""]) { + let obj = {[Symbol.isConcatSpreadable]: notTruthy, length: 1, 0: "hey"} + assert.deepEqual(x.concat(obj), [1, 2, 3, obj]); +} + +let array = [5, 4]; +assert.deepEqual(x.concat(array), [1, 2, 3, 5, 4]); + +// Can make arrays non-spreadable +array[Symbol.isConcatSpreadable] = false; +assert.deepEqual(x.concat(array), [1, 2, 3, [5, 4]]); + +// Explicitly spreadable +array[Symbol.isConcatSpreadable] = true; +assert.deepEqual(x.concat(array), [1, 2, 3, 5, 4]); + diff --git a/test/staging/sm/Array/concat-spreadable-primitive.js b/test/staging/sm/Array/concat-spreadable-primitive.js new file mode 100644 index 0000000000..d4e31318f9 --- /dev/null +++ b/test/staging/sm/Array/concat-spreadable-primitive.js @@ -0,0 +1,44 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +// Primitive values should never be tried to spread +let primitives = [ + 10, + false, + Symbol() + // Can't change String.prototype.length +]; + +for (let value of primitives) { + let prototype = Object.getPrototypeOf(value); + prototype[Symbol.isConcatSpreadable] = true; + + Object.defineProperty(prototype, "length", { + configurable: true, + get() { + // Should never invoke length getter + assert.sameValue(true, false); + }, + }); + + let x = [1, 2].concat(value); + assert.deepEqual(x, [1, 2, value]); + + delete prototype[Symbol.isConcatSpreadable]; + delete prototype.length; + + prototype.length; +} + diff --git a/test/staging/sm/Array/fill.js b/test/staging/sm/Array/fill.js new file mode 100644 index 0000000000..fe04279359 --- /dev/null +++ b/test/staging/sm/Array/fill.js @@ -0,0 +1,104 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 911147; +var summary = 'Array.prototype.fill'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(typeof [].fill, 'function'); +assert.sameValue([].fill.length, 1); + +// Default values for arguments and absolute values for negative start and end +// arguments are resolved correctly. +assert.deepEqual([].fill(1), []); +assert.deepEqual([1,1,1].fill(2), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, 1), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, 1, 2), [1,2,1]); +assert.deepEqual([1,1,1].fill(2, -2), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, -2, -1), [1,2,1]); +assert.deepEqual([1,1,1].fill(2, undefined), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, undefined, undefined), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, 1, undefined), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, undefined, 1), [2,1,1]); +assert.deepEqual([1,1,1].fill(2, 2, 1), [1,1,1]); +assert.deepEqual([1,1,1].fill(2, -1, 1), [1,1,1]); +assert.deepEqual([1,1,1].fill(2, -2, 1), [1,1,1]); +assert.deepEqual([1,1,1].fill(2, 1, -2), [1,1,1]); +assert.deepEqual([1,1,1].fill(2, 0.1), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, 0.9), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, 1.1), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, 0.1, 0.9), [1,1,1]); +assert.deepEqual([1,1,1].fill(2, 0.1, 1.9), [2,1,1]); +assert.deepEqual([1,1,1].fill(2, 0.1, 1.9), [2,1,1]); +assert.deepEqual([1,1,1].fill(2, -0), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, 0, -0), [1,1,1]); +assert.deepEqual([1,1,1].fill(2, NaN), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, 0, NaN), [1,1,1]); +assert.deepEqual([1,1,1].fill(2, false), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, true), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, "0"), [2,2,2]); +assert.deepEqual([1,1,1].fill(2, "1"), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, "-2"), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, "-2", "-1"), [1,2,1]); +assert.deepEqual([1,1,1].fill(2, {valueOf: ()=>1}), [1,2,2]); +assert.deepEqual([1,1,1].fill(2, 0, {valueOf: ()=>1}), [2,1,1]); + +// fill works generically for objects, too. +assert.deepEqual([].fill.call({length: 2}, 2), {0: 2, 1: 2, length: 2}); + +var setterCalled = false; +var objWithSetter = {set "0"(val) { setterCalled = true}, length: 1}; +[].fill.call(objWithSetter, 2); +assert.sameValue(setterCalled, true); + +var setHandlerCallCount = 0; +var proxy = new Proxy({length: 3}, {set(t, i, v, r) { setHandlerCallCount++; return true; }}); +[].fill.call(proxy, 2); +assert.sameValue(setHandlerCallCount, 3); + +var valueOfCallCount = 0; +var typedArray = new Uint8ClampedArray(3); +[].fill.call(typedArray, {valueOf: function() {valueOfCallCount++; return 2000;}}); +assert.sameValue(valueOfCallCount, 3); +assert.sameValue(typedArray[0], 0xff); + +// All remaining cases should throw. +var objWithGetterOnly = {get "0"() {return 1;}, length: 1}; + +var objWithReadOnlyProp = {length: 1}; +Object.defineProperty(objWithReadOnlyProp, 0, {value: 1, writable: false}); + +var objWithNonconfigurableProp = {length: 1}; +Object.defineProperty(objWithNonconfigurableProp, 0, {value: 1, configurable: false}); + +var frozenObj = {length: 1}; +Object.freeze(frozenObj); + +var frozenArray = [1, 1, 1]; +Object.freeze(frozenArray); + +assertThrowsInstanceOf(() => [].fill.call(objWithGetterOnly, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(objWithReadOnlyProp, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(objWithNonconfigurableProp, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(frozenObj, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(frozenArray, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call("111", 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(null, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(undefined, 2), TypeError); + diff --git a/test/staging/sm/Array/for_of_1.js b/test/staging/sm/Array/for_of_1.js new file mode 100644 index 0000000000..bf917223fe --- /dev/null +++ b/test/staging/sm/Array/for_of_1.js @@ -0,0 +1,147 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// Test the properties and prototype of a generator object. +function TestManySmallArrays() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + + var TRUE_SUM = 0; + var N = 100; + var M = 3; + var sum = 0; + for (var i = 0; i < N; i++) { + var arr = new Array(M); + for (var j = 0; j < M; j++) { + arr[j] = j; + TRUE_SUM += j; + } + sum += doIter(fun, arr); + } + assert.sameValue(sum, TRUE_SUM); +} +TestManySmallArrays(); + +// Test the properties and prototype of a generator object. +function TestSingleSmallArray() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + + var TRUE_SUM = 0; + var N = 100; + var M = 3; + var arr = new Array(M); + for (var j = 0; j < M; j++) { + arr[j] = j; + TRUE_SUM += j; + } + TRUE_SUM *= N; + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + } + assert.sameValue(sum, TRUE_SUM); +} +TestSingleSmallArray(); + + +function TestChangeArrayPrototype() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var Proto1 = Object.create(Array.prototype); + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + if (i == MID) + arr.__proto__ = Proto1; + TRUE_SUM += ARR_SUM; + } + assert.sameValue(sum, TRUE_SUM); +} +TestChangeArrayPrototype(); + + +function TestChangeManyArrayShape() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var sum = 0; + for (var i = 0; i < N; i++) { + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + arr['v_' + i] = i; + sum += doIter(fun, arr); + TRUE_SUM += ARR_SUM; + } + assert.sameValue(sum, TRUE_SUM); +} +TestChangeManyArrayShape(); + diff --git a/test/staging/sm/Array/for_of_2.js b/test/staging/sm/Array/for_of_2.js new file mode 100644 index 0000000000..5c9281d339 --- /dev/null +++ b/test/staging/sm/Array/for_of_2.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// +// Check case where ArrayIterator.prototype.next changes in the middle of iteration. +// +function TestChangeArrayIteratorNext() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var GET_COUNT = 0; + function getter() { + GET_COUNT++; + if (GET_COUNT == MID) + iterProto.next = NewNext; + return M2; + } + + var iter = ([])[Symbol.iterator](); + var iterProto = Object.getPrototypeOf(iter); + var OldNext = iterProto.next; + var NewNext = function () { + return OldNext.apply(this, arguments); + }; + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + var M2 = (M/2)|0; + Object.defineProperty(arr, M2, {'get':getter}); + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + TRUE_SUM += ARR_SUM; + } + assert.sameValue(sum, TRUE_SUM); +} +TestChangeArrayIteratorNext(); + diff --git a/test/staging/sm/Array/for_of_3.js b/test/staging/sm/Array/for_of_3.js new file mode 100644 index 0000000000..bc8dbfbd9f --- /dev/null +++ b/test/staging/sm/Array/for_of_3.js @@ -0,0 +1,69 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// +// Check array length increases changes during iteration. +// +function TestIncreaseArrayLength() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var GET_COUNT = 0; + function getter() { + GET_COUNT++; + if (GET_COUNT == MID) { + ARR_SUM += arr.length; + arr.push(arr.length); + } + return M2; + } + + var iter = ([])[Symbol.iterator](); + var iterProto = Object.getPrototypeOf(iter); + var OldNext = iterProto.next; + var NewNext = function () { + return OldNext.apply(this, arguments); + }; + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + var M2 = (M/2)|0; + Object.defineProperty(arr, M2, {'get':getter}); + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + TRUE_SUM += ARR_SUM; + } + assert.sameValue(sum, TRUE_SUM); +} +TestIncreaseArrayLength(); + diff --git a/test/staging/sm/Array/for_of_4.js b/test/staging/sm/Array/for_of_4.js new file mode 100644 index 0000000000..333d15894c --- /dev/null +++ b/test/staging/sm/Array/for_of_4.js @@ -0,0 +1,73 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// +// Check array length decreases changes during iteration. +// +function TestDecreaseArrayLength() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var GET_COUNT = 0; + function getter() { + GET_COUNT++; + if (GET_COUNT == MID) { + arr.length = 0; + } + return M2; + } + + var iter = ([])[Symbol.iterator](); + var iterProto = Object.getPrototypeOf(iter); + var OldNext = iterProto.next; + var NewNext = function () { + return OldNext.apply(this, arguments); + }; + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + var M2 = (M/2)|0; + Object.defineProperty(arr, M2, {'get':getter}); + + var sum = 0; + for (var i = 0; i < N; i++) { + var oldLen = arr.length; + sum += doIter(fun, arr); + var newLen = arr.length; + if (oldLen == newLen) + TRUE_SUM += arr.length > 0 ? ARR_SUM : 0; + else + TRUE_SUM += 1 + } + assert.sameValue(sum, TRUE_SUM); +} +TestDecreaseArrayLength(); + diff --git a/test/staging/sm/Array/from-iterator-close.js b/test/staging/sm/Array/from-iterator-close.js new file mode 100644 index 0000000000..620a199b4b --- /dev/null +++ b/test/staging/sm/Array/from-iterator-close.js @@ -0,0 +1,192 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180306; +var summary = 'Array.from should close iterator on error'; + +print(BUGNUMBER + ": " + summary); + +function test(ctor, { mapVal=undefined, + nextVal=undefined, + nextThrowVal=undefined, + modifier=undefined, + exceptionVal=undefined, + exceptionType=undefined, + closed=true }) { + let iterable = { + closed: false, + [Symbol.iterator]() { + let iterator = { + first: true, + next() { + if (this.first) { + this.first = false; + if (nextThrowVal) + throw nextThrowVal; + return nextVal; + } + return { value: undefined, done: true }; + }, + return() { + iterable.closed = true; + return {}; + } + }; + if (modifier) + modifier(iterator, iterable); + + return iterator; + } + }; + if (exceptionVal) { + let caught = false; + try { + ctor.from(iterable, mapVal); + } catch (e) { + assert.sameValue(e, exceptionVal); + caught = true; + } + assert.sameValue(caught, true); + } else if (exceptionType) { + assertThrowsInstanceOf(() => ctor.from(iterable, mapVal), exceptionType); + } else { + ctor.from(iterable, mapVal); + } + assert.sameValue(iterable.closed, closed); +} + +// == Error cases with close == + +// ES 2017 draft 22.1.2.1 step 5.e.i.1. +// Cannot test. + +// ES 2017 draft 22.1.2.1 step 5.e.vi.2. +test(Array, { + mapVal: () => { throw "map throws"; }, + nextVal: { value: 1, done: false }, + exceptionVal: "map throws", + closed: true, +}); + +// ES 2017 draft 22.1.2.1 step 5.e.ix. +class MyArray extends Array { + constructor() { + return new Proxy({}, { + defineProperty() { + throw "defineProperty throws"; + } + }); + } +} +test(MyArray, { + nextVal: { value: 1, done: false }, + exceptionVal: "defineProperty throws", + closed: true, +}); + +// ES 2021 draft 7.4.6 step 5. +// if GetMethod fails, the thrown value should be ignored. +test(MyArray, { + nextVal: { value: 1, done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + throw "return getter throws"; + } + }); + }, + exceptionVal: "defineProperty throws", + closed: true, +}); +test(MyArray, { + nextVal: { value: 1, done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + return "non object"; + } + }); + }, + exceptionVal: "defineProperty throws", + closed: true, +}); +test(MyArray, { + nextVal: { value: 1, done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + // Non callable. + return {}; + } + }); + }, + exceptionVal: "defineProperty throws", + closed: true, +}); + +// ES 2017 draft 7.4.6 steps 6. +// if return method throws, the thrown value should be ignored. +test(MyArray, { + nextVal: { value: 1, done: false }, + modifier: (iterator, iterable) => { + iterator.return = function() { + iterable.closed = true; + throw "return throws"; + }; + }, + exceptionVal: "defineProperty throws", + closed: true, +}); + +test(MyArray, { + nextVal: { value: 1, done: false }, + modifier: (iterator, iterable) => { + iterator.return = function() { + iterable.closed = true; + return "non object"; + }; + }, + exceptionVal: "defineProperty throws", + closed: true, +}); + +// == Error cases without close == + +// ES 2017 draft 22.1.2.1 step 5.e.iii. +test(Array, { + nextThrowVal: "next throws", + exceptionVal: "next throws", + closed: false, +}); + +test(Array, { + nextVal: { value: {}, get done() { throw "done getter throws"; } }, + exceptionVal: "done getter throws", + closed: false, +}); + +// ES 2017 draft 22.1.2.1 step 5.e.v. +test(Array, { + nextVal: { get value() { throw "value getter throws"; }, done: false }, + exceptionVal: "value getter throws", + closed: false, +}); + +// == Successful cases == + +test(Array, { + nextVal: { value: 1, done: false }, + closed: false, +}); + diff --git a/test/staging/sm/Array/from_basics.js b/test/staging/sm/Array/from_basics.js new file mode 100644 index 0000000000..7f40ef5126 --- /dev/null +++ b/test/staging/sm/Array/from_basics.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array.from copies arrays. +var src = [1, 2, 3], copy = Array.from(src); +assert.sameValue(copy === src, false); +assert.sameValue(Array.isArray(copy), true); +assert.deepEqual(copy, src); + +// Non-element properties are not copied. +var a = [0, 1]; +a.name = "lisa"; +assert.deepEqual(Array.from(a), [0, 1]); + +// It's a shallow copy. +src = [[0], [1]]; +copy = Array.from(src); +assert.sameValue(copy[0], src[0]); +assert.sameValue(copy[1], src[1]); + +// Array.from can copy non-iterable objects, if they're array-like. +src = {0: "zero", 1: "one", length: 2}; +copy = Array.from(src); +assert.sameValue(Array.isArray(copy), true); +assert.deepEqual(copy, ["zero", "one"]); + +// Properties past the .length are not copied. +src = {0: "zero", 1: "one", 2: "two", 9: "nine", name: "lisa", length: 2}; +assert.deepEqual(Array.from(src), ["zero", "one"]); + +// If an object has neither an @@iterator method nor .length, +// then it's treated as zero-length. +assert.deepEqual(Array.from({}), []); + +// Source object property order doesn't matter. +src = {length: 2, 1: "last", 0: "first"}; +assert.deepEqual(Array.from(src), ["first", "last"]); + +// Array.from does not preserve holes. +assert.deepEqual(Array.from(Array(3)), [undefined, undefined, undefined]); +assert.deepEqual(Array.from([, , 2, 3]), [undefined, undefined, 2, 3]); +assert.deepEqual(Array.from([0, , , ,]), [0, undefined, undefined, undefined]); + +// Even on non-iterable objects. +assert.deepEqual(Array.from({length: 4}), [undefined, undefined, undefined, undefined]); + +// Array.from should coerce negative lengths to zero. +assert.deepEqual(Array.from({length: -1}), []); + diff --git a/test/staging/sm/Array/from_constructor.js b/test/staging/sm/Array/from_constructor.js new file mode 100644 index 0000000000..a1322347d8 --- /dev/null +++ b/test/staging/sm/Array/from_constructor.js @@ -0,0 +1,64 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array.from can be applied to any constructor. +// For example, the Date builtin constructor. +var d = Array.from.call(Date, ["A", "B"]); +assert.sameValue(Array.isArray(d), false); +assert.sameValue(Object.prototype.toString.call(d), "[object Date]"); +assert.sameValue(Object.getPrototypeOf(d), Date.prototype); +assert.sameValue(d.length, 2); +assert.sameValue(d[0], "A"); +assert.sameValue(d[1], "B"); + +// Or Object. +var obj = Array.from.call(Object, []); +assert.sameValue(Array.isArray(obj), false); +assert.sameValue(Object.getPrototypeOf(obj), Object.prototype); +assert.sameValue(Object.getOwnPropertyNames(obj).join(","), "length"); +assert.sameValue(obj.length, 0); + +// Or any JS function. +function C(arg) { + this.args = arguments; +} +var c = Array.from.call(C, {length: 1, 0: "zero"}); +assert.sameValue(c instanceof C, true); +assert.sameValue(c.args.length, 1); +assert.sameValue(c.args[0], 1); +assert.sameValue(c.length, 1); +assert.sameValue(c[0], "zero"); + +// If the 'this' value passed to Array.from is not a constructor, +// a plain Array is created. +var arr = [3, 4, 5]; +var nonconstructors = [ + {}, Math, Object.getPrototypeOf, undefined, 17, + () => ({}) // arrow functions are not constructors +]; +for (var v of nonconstructors) { + obj = Array.from.call(v, arr); + assert.sameValue(Array.isArray(obj), true); + assert.deepEqual(obj, arr); +} + +// Array.from does not get confused if global.Array is replaced with another +// constructor. +function NotArray() { +} +var RealArray = Array; +NotArray.from = Array.from; +Array = NotArray; +assert.sameValue(RealArray.from([1]) instanceof RealArray, true); +assert.sameValue(NotArray.from([1]) instanceof NotArray, true); + diff --git a/test/staging/sm/Array/from_errors.js b/test/staging/sm/Array/from_errors.js new file mode 100644 index 0000000000..efbaa04223 --- /dev/null +++ b/test/staging/sm/Array/from_errors.js @@ -0,0 +1,160 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array.from throws if the argument is undefined or null. +assertThrowsInstanceOf(() => Array.from(), TypeError); +assertThrowsInstanceOf(() => Array.from(undefined), TypeError); +assertThrowsInstanceOf(() => Array.from(null), TypeError); + +// Array.from throws if an element can't be defined on the new object. +function ObjectWithReadOnlyElement() { + Object.defineProperty(this, "0", {value: null}); + this.length = 0; +} +ObjectWithReadOnlyElement.from = Array.from; +assert.deepEqual(ObjectWithReadOnlyElement.from([]), new ObjectWithReadOnlyElement); +assertThrowsInstanceOf(() => ObjectWithReadOnlyElement.from([1]), TypeError); + +// The same, but via preventExtensions. +function InextensibleObject() { + Object.preventExtensions(this); +} +InextensibleObject.from = Array.from; +assertThrowsInstanceOf(() => InextensibleObject.from([1]), TypeError); + +// We will now test this property, that Array.from throws if the .length can't +// be assigned, using several different kinds of object. +var obj; +function init(self) { + obj = self; + self[0] = self[1] = self[2] = self[3] = 0; +} + +function testUnsettableLength(C, Exc) { + if (Exc === undefined) + Exc = TypeError; // the usual expected exception type + C.from = Array.from; + + obj = null; + assertThrowsInstanceOf(() => C.from([]), Exc); + assert.sameValue(obj instanceof C, true); + for (var i = 0; i < 4; i++) + assert.sameValue(obj[0], 0); + + obj = null; + assertThrowsInstanceOf(() => C.from([0, 10, 20, 30]), Exc); + assert.sameValue(obj instanceof C, true); + for (var i = 0; i < 4; i++) + assert.sameValue(obj[i], i * 10); +} + +// Array.from throws if the new object's .length can't be assigned because +// there is no .length and the object is inextensible. +function InextensibleObject4() { + init(this); + Object.preventExtensions(this); +} +testUnsettableLength(InextensibleObject4); + +// Array.from throws if the new object's .length can't be assigned because it's +// read-only. +function ObjectWithReadOnlyLength() { + init(this); + Object.defineProperty(this, "length", {configurable: true, writable: false, value: 4}); +} +testUnsettableLength(ObjectWithReadOnlyLength); + +// The same, but using a builtin type. +Uint8Array.from = Array.from; +assertThrowsInstanceOf(() => Uint8Array.from([]), TypeError); + +// Array.from throws if the new object's .length can't be assigned because it +// inherits a readonly .length along the prototype chain. +function ObjectWithInheritedReadOnlyLength() { + init(this); +} +Object.defineProperty(ObjectWithInheritedReadOnlyLength.prototype, + "length", + {configurable: true, writable: false, value: 4}); +testUnsettableLength(ObjectWithInheritedReadOnlyLength); + +// The same, but using an object with a .length getter but no setter. +function ObjectWithGetterOnlyLength() { + init(this); + Object.defineProperty(this, "length", {configurable: true, get: () => 4}); +} +testUnsettableLength(ObjectWithGetterOnlyLength); + +// The same, but with a setter that throws. +function ObjectWithThrowingLengthSetter() { + init(this); + Object.defineProperty(this, "length", { + configurable: true, + get: () => 4, + set: () => { throw new RangeError("surprise!"); } + }); +} +testUnsettableLength(ObjectWithThrowingLengthSetter, RangeError); + +// Array.from throws if mapfn is neither callable nor undefined. +assertThrowsInstanceOf(() => Array.from([3, 4, 5], {}), TypeError); +assertThrowsInstanceOf(() => Array.from([3, 4, 5], "also not a function"), TypeError); +assertThrowsInstanceOf(() => Array.from([3, 4, 5], null), TypeError); + +// Even if the function would not have been called. +assertThrowsInstanceOf(() => Array.from([], JSON), TypeError); + +// If mapfn is not undefined and not callable, the error happens before anything else. +// Before calling the constructor, before touching the arrayLike. +var log = ""; +function C() { + log += "C"; + obj = this; +} +var p = new Proxy({}, { + has: function () { log += "1"; }, + get: function () { log += "2"; }, + getOwnPropertyDescriptor: function () { log += "3"; } +}); +assertThrowsInstanceOf(() => Array.from.call(C, p, {}), TypeError); +assert.sameValue(log, ""); + +// If mapfn throws, the new object has already been created. +var arrayish = { + get length() { log += "l"; return 1; }, + get 0() { log += "0"; return "q"; } +}; +log = ""; +var exc = {surprise: "ponies"}; +assertThrowsValue(() => Array.from.call(C, arrayish, () => { throw exc; }), exc); +assert.sameValue(log, "lC0"); +assert.sameValue(obj instanceof C, true); + +// It's a TypeError if the @@iterator property is a primitive (except null and undefined). +for (var primitive of ["foo", 17, Symbol(), true]) { + assertThrowsInstanceOf(() => Array.from({[Symbol.iterator] : primitive}), TypeError); +} +assert.deepEqual(Array.from({[Symbol.iterator]: null}), []); +assert.deepEqual(Array.from({[Symbol.iterator]: undefined}), []); + +// It's a TypeError if the iterator's .next() method returns a primitive. +for (var primitive of [undefined, null, 17]) { + assertThrowsInstanceOf( + () => Array.from({ + [Symbol.iterator]() { + return {next() { return primitive; }}; + } + }), + TypeError); +} + diff --git a/test/staging/sm/Array/from_iterable.js b/test/staging/sm/Array/from_iterable.js new file mode 100644 index 0000000000..4e60253d5b --- /dev/null +++ b/test/staging/sm/Array/from_iterable.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array.from works on arguments objects. +(function () { + assert.deepEqual(Array.from(arguments), ["arg0", "arg1", undefined]); +})("arg0", "arg1", undefined); + +// If an object has both .length and [@@iterator] properties, [@@iterator] is used. +var a = ['a', 'e', 'i', 'o', 'u']; +a[Symbol.iterator] = function* () { + for (var i = 5; i--; ) + yield this[i]; +}; + +var log = ''; +function f(x) { + log += x; + return x + x; +} + +var b = Array.from(a, f); +assert.deepEqual(b, ['uu', 'oo', 'ii', 'ee', 'aa']); +assert.sameValue(log, 'uoiea'); + +// In fact, if [@@iterator] is present, .length isn't queried at all. +var pa = new Proxy(a, { + has: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (has)"); + return id in target; + }, + get: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (get)"); + return target[id]; + }, + getOwnPropertyDescriptor: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (getOwnPropertyDescriptor)"); + return Object.getOwnPropertyDescriptor(target, id) + } +}); +log = ""; +b = Array.from(pa, f); +assert.deepEqual(b, ['uu', 'oo', 'ii', 'ee', 'aa']); +assert.sameValue(log, 'uoiea'); + diff --git a/test/staging/sm/Array/from_length_setter.js b/test/staging/sm/Array/from_length_setter.js new file mode 100644 index 0000000000..8fb9082d5a --- /dev/null +++ b/test/staging/sm/Array/from_length_setter.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array.from calls a length setter if present. +var hits = 0; +function C() {} +C.prototype = {set length(v) { hits++; }}; +C.from = Array.from; +var copy = C.from(["A", "B"]); +assert.sameValue(hits, 1); + diff --git a/test/staging/sm/Array/from_mapping.js b/test/staging/sm/Array/from_mapping.js new file mode 100644 index 0000000000..20f0803fb0 --- /dev/null +++ b/test/staging/sm/Array/from_mapping.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// If the mapfn argument to Array.from is undefined, don't map. +assert.deepEqual(Array.from([3, 4, 5], undefined), [3, 4, 5]); +assert.deepEqual(Array.from([4, 5, 6], undefined, Math), [4, 5, 6]); + +// mapfn is called with two arguments: value and index. +var log = []; +function f() { + log.push(Array.from(arguments)); + return log.length; +} +assert.deepEqual(Array.from(['a', 'e', 'i', 'o', 'u'], f), [1, 2, 3, 4, 5]); +assert.deepEqual(log, [['a', 0], ['e', 1], ['i', 2], ['o', 3], ['u', 4]]); + +// If the object to be copied is non-iterable, mapfn is still called with two +// arguments. +log = []; +assert.deepEqual(Array.from({0: "zero", 1: "one", length: 2}, f), [1, 2]); +assert.deepEqual(log, [["zero", 0], ["one", 1]]); + +// If the object to be copied is iterable and the constructor is not Array, +// mapfn is still called with two arguments. +log = []; +function C() {} +C.from = Array.from; +var c = new C; +c[0] = 1; +c[1] = 2; +c.length = 2; +assert.deepEqual(C.from(["zero", "one"], f), c); +assert.deepEqual(log, [["zero", 0], ["one", 1]]); + +// The mapfn is called even if the value to be mapped is undefined. +assert.deepEqual(Array.from([0, 1, , 3], String), ["0", "1", "undefined", "3"]); +var arraylike = {length: 4, "0": 0, "1": 1, "3": 3}; +assert.deepEqual(Array.from(arraylike, String), ["0", "1", "undefined", "3"]); + diff --git a/test/staging/sm/Array/from_primitive.js b/test/staging/sm/Array/from_primitive.js new file mode 100644 index 0000000000..f386afc315 --- /dev/null +++ b/test/staging/sm/Array/from_primitive.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (let primitive of [true, 3.14, "hello", Symbol()]) { + let prototype = Object.getPrototypeOf(primitive); + + Object.defineProperty(prototype, Symbol.iterator, { + configurable: true, + get() { + "use strict"; + assert.sameValue(this, primitive); + return () => [this][Symbol.iterator](); + }, + }); + assert.sameValue(Array.from(primitive)[0], primitive); + + delete prototype[Symbol.iterator]; +} + diff --git a/test/staging/sm/Array/from_proxy.js b/test/staging/sm/Array/from_proxy.js new file mode 100644 index 0000000000..239f01a8c7 --- /dev/null +++ b/test/staging/sm/Array/from_proxy.js @@ -0,0 +1,63 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Two tests involving Array.from and a Proxy. +var log = []; +function LoggingProxy(target) { + var h = { + defineProperty: function (t, id) { + log.push("define", id); + return true; + }, + has: function (t, id) { + log.push("has", id); + return id in t; + }, + get: function (t, id) { + log.push("get", id); + return t[id]; + }, + set: function (t, id, v) { + log.push("set", id); + t[id] = v; + return true; + } + }; + return new Proxy(target || [], h); +} + +// When the new object created by Array.from is a Proxy, +// Array.from calls handler.defineProperty to create new elements +// but handler.set to set the length. +LoggingProxy.from = Array.from; +LoggingProxy.from([3, 4, 5]); +assert.deepEqual(log, ["define", "0", "define", "1", "define", "2", "set", "length"]); + +// When the argument passed to Array.from is a Proxy, Array.from +// calls handler.get on it. +log = []; +assert.deepEqual(Array.from(new LoggingProxy([3, 4, 5])), [3, 4, 5]); +assert.deepEqual(log, ["get", Symbol.iterator, + "get", "length", "get", "0", + "get", "length", "get", "1", + "get", "length", "get", "2", + "get", "length"]); + +// Array-like iteration only gets the length once. +log = []; +var arr = [5, 6, 7]; +arr[Symbol.iterator] = undefined; +assert.deepEqual(Array.from(new LoggingProxy(arr)), [5, 6, 7]); +assert.deepEqual(log, ["get", Symbol.iterator, + "get", "length", "get", "0", "get", "1", "get", "2"]); + diff --git a/test/staging/sm/Array/from_realms.js b/test/staging/sm/Array/from_realms.js new file mode 100644 index 0000000000..26b5c4a520 --- /dev/null +++ b/test/staging/sm/Array/from_realms.js @@ -0,0 +1,45 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof createNewGlobal === 'function') { + // G.Array.from, where G is any global, produces an array whose prototype + // is G.Array.prototype. + var g = createNewGlobal(); + var ga = g.Array.from([1, 2, 3]); + assert.sameValue(ga instanceof g.Array, true); + + // Even if G.Array is not passed in as the 'this' value to the call. + var from = g.Array.from + var ga2 = from([1, 2, 3]); + assert.sameValue(ga2 instanceof g.Array, true); + + // Array.from can be applied to a constructor from another realm. + var p = Array.from.call(g.Array, [1, 2, 3]); + assert.sameValue(p instanceof g.Array, true); + var q = g.Array.from.call(Array, [3, 4, 5]); + assert.sameValue(q instanceof Array, true); + + // The default 'this' value received by a non-strict mapping function is + // that function's global, not Array.from's global or the caller's global. + var h = createNewGlobal(), result = undefined; + h.mainGlobal = this; + h.eval("function f() { mainGlobal.result = this; }"); + g.Array.from.call(Array, [5, 6, 7], h.f); + // (Give each global in the test a name, for better error messages. But use + // globalName, because window.name is complicated.) + this.globalName = "main"; + g.globalName = "g"; + h.globalName = "h"; + assert.sameValue(result.globalName, "h"); +} + diff --git a/test/staging/sm/Array/from_string.js b/test/staging/sm/Array/from_string.js new file mode 100644 index 0000000000..415b28fef1 --- /dev/null +++ b/test/staging/sm/Array/from_string.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array.from on a string iterates over the string. +assert.deepEqual(Array.from("test string"), + ['t', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g']); + +// Array.from on a string handles surrogate pairs correctly. +var gclef = "\uD834\uDD1E"; // U+1D11E MUSICAL SYMBOL G CLEF +assert.deepEqual(Array.from(gclef), [gclef]); +assert.deepEqual(Array.from(gclef + " G"), [gclef, " ", "G"]); + +// Array.from on a string calls the @@iterator method. +String.prototype[Symbol.iterator] = function* () { yield 1; yield 2; }; +assert.deepEqual(Array.from("anything"), [1, 2]); + +// If the iterator method is deleted, Strings are still arraylike. +delete String.prototype[Symbol.iterator]; +assert.deepEqual(Array.from("works"), ['w', 'o', 'r', 'k', 's']); +assert.deepEqual(Array.from(gclef), ['\uD834', '\uDD1E']); + diff --git a/test/staging/sm/Array/from_surfaces.js b/test/staging/sm/Array/from_surfaces.js new file mode 100644 index 0000000000..deaff8e230 --- /dev/null +++ b/test/staging/sm/Array/from_surfaces.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Check superficial features of Array.from. +var desc = Object.getOwnPropertyDescriptor(Array, "from"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, true); +assert.sameValue(Array.from.length, 1); +assertThrowsInstanceOf(() => new Array.from(), TypeError); // not a constructor + diff --git a/test/staging/sm/Array/from_this.js b/test/staging/sm/Array/from_this.js new file mode 100644 index 0000000000..ad52b78434 --- /dev/null +++ b/test/staging/sm/Array/from_this.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// The third argument to Array.from is passed as the 'this' value to the +// mapping function. +var hits = 0, obj = {}; +function f(x) { + assert.sameValue(this, obj); + hits++; +} +Array.from(["a", "b", "c"], f, obj); +assert.sameValue(hits, 3); + +// Without an argument, undefined is passed... +hits = 0; +function gs(x) { + "use strict"; + assert.sameValue(this, undefined); + hits++; +} +Array.from("def", gs); +assert.sameValue(hits, 3); + +// ...and if the mapping function is non-strict, that means the global is +// passed. +var global = this; +hits = 0; +function g(x) { + assert.sameValue(this, global); + hits++; +} +Array.from("ghi", g); +assert.sameValue(hits, 3); + +// A primitive value can be passed. +for (var v of [0, "str", undefined]) { + hits = 0; + var mapfn = function h(x) { + "use strict"; + assert.sameValue(this, v); + hits++; + }; + Array.from("pq", mapfn, v); + assert.sameValue(hits, 2); +} + diff --git a/test/staging/sm/Array/frozen-dense-array.js b/test/staging/sm/Array/frozen-dense-array.js new file mode 100644 index 0000000000..51d363ed09 --- /dev/null +++ b/test/staging/sm/Array/frozen-dense-array.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Author: Emilio Cobos Álvarez + */ +var BUGNUMBER = 1310744; +var summary = "Dense array properties shouldn't be modified when they're frozen"; + +print(BUGNUMBER + ": " + summary); + +var a = Object.freeze([4, 5, 1]); + +function assertArrayIsExpected() { + assert.sameValue(a.length, 3); + assert.sameValue(a[0], 4); + assert.sameValue(a[1], 5); + assert.sameValue(a[2], 1); +} + +assertThrowsInstanceOf(() => a.reverse(), TypeError); +assertThrowsInstanceOf(() => a.shift(), TypeError); +assertThrowsInstanceOf(() => a.unshift(0), TypeError); +assertThrowsInstanceOf(() => a.sort(function() {}), TypeError); +assertThrowsInstanceOf(() => a.pop(), TypeError); +assertThrowsInstanceOf(() => a.fill(0), TypeError); +assertThrowsInstanceOf(() => a.splice(0, 1, 1), TypeError); +assertThrowsInstanceOf(() => a.push("foo"), TypeError); +assertThrowsInstanceOf(() => { "use strict"; a.length = 5; }, TypeError); +assertThrowsInstanceOf(() => { "use strict"; a[2] = "foo"; }, TypeError); +assertThrowsInstanceOf(() => { "use strict"; delete a[0]; }, TypeError); +assertThrowsInstanceOf(() => a.splice(Math.a), TypeError); + +// Shouldn't throw, since this is not strict mode, but shouldn't change the +// value of the property. +a.length = 5; +a[2] = "foo"; +assert.sameValue(delete a[0], false); + +assertArrayIsExpected(); + diff --git a/test/staging/sm/Array/frozen-dict-mode-length.js b/test/staging/sm/Array/frozen-dict-mode-length.js new file mode 100644 index 0000000000..ac07c70f11 --- /dev/null +++ b/test/staging/sm/Array/frozen-dict-mode-length.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Author: Emilio Cobos Álvarez + */ +var BUGNUMBER = 1312948; +var summary = "Freezing a dictionary mode object with a length property should make Object.isFrozen report true"; + +print(BUGNUMBER + ": " + summary); + +/* Convert to dictionary mode */ +delete Array.prototype.slice; + +Object.freeze(Array.prototype); +assert.sameValue(Object.isFrozen(Array.prototype), true); + diff --git a/test/staging/sm/Array/getter-name.js b/test/staging/sm/Array/getter-name.js new file mode 100644 index 0000000000..aa63d65506 --- /dev/null +++ b/test/staging/sm/Array/getter-name.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180290; +var summary = 'Array getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Object.getOwnPropertyDescriptor(Array, Symbol.species).get.name, "get [Symbol.species]"); + diff --git a/test/staging/sm/Array/group-callback-evaluation.js b/test/staging/sm/Array/group-callback-evaluation.js new file mode 100644 index 0000000000..b861adce1f --- /dev/null +++ b/test/staging/sm/Array/group-callback-evaluation.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var array = [1, 2, 3]; + +var calls = 0; + +var grouped = Object.groupBy(array, () => { + calls++; + + return { + toString() { + return "a"; + } + } +}); + +assert.sameValue(calls, 3); + diff --git a/test/staging/sm/Array/group-propertkey-is-length.js b/test/staging/sm/Array/group-propertkey-is-length.js new file mode 100644 index 0000000000..1f99255ebd --- /dev/null +++ b/test/staging/sm/Array/group-propertkey-is-length.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var array = [0]; + +var grouped = Object.groupBy(array, () => "length"); + +assert.deepEqual(grouped, Object.create(null, { + length: { + value: [0], + writable: true, + enumerable: true, + configurable: true, + }, +})); + diff --git a/test/staging/sm/Array/group.js b/test/staging/sm/Array/group.js new file mode 100644 index 0000000000..235779964c --- /dev/null +++ b/test/staging/sm/Array/group.js @@ -0,0 +1,98 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function isNeg(x) { + if (Object.is(x, -0) || x < 0) { + return true; + } + return false; +} + +{ + const a1 = [-Infinity, -2, -1, -0, 0, 1, 2, Infinity]; + const expectedObj = { neg: [-Infinity, -2, -1, -0], pos: [0, 1, 2, Infinity] }; + Object.setPrototypeOf(expectedObj, null); + + const groupedArray = Object.groupBy(a1, x => isNeg(x) ? 'neg' : 'pos'); + const mappedArray = Map.groupBy(a1, x => isNeg(x) ? 'neg' : 'pos'); + + assert.sameValue(Object.getPrototypeOf(groupedArray), null) + assert.deepEqual(groupedArray, expectedObj); + assert.deepEqual(mappedArray.get("neg"), expectedObj["neg"]); + assert.deepEqual(mappedArray.get("pos"), expectedObj["pos"]); + + + const expectedObj2 = {"undefined": [1,2,3]} + Object.setPrototypeOf(expectedObj2, null); + assert.deepEqual(Object.groupBy([1,2,3], () => {}), expectedObj2); + assert.deepEqual(Object.groupBy([], () => {}), Object.create(null)); + assert.deepEqual((Map.groupBy([1,2,3], () => {})).get(undefined), [1,2,3]); + assert.sameValue((Map.groupBy([1,2,3], () => {})).size, 1); + + const negMappedArray = Map.groupBy(a1, x => isNeg(x) ? -0 : 0); + assert.deepEqual(negMappedArray.get(0), a1); + assert.deepEqual(negMappedArray.size, 1); + + assertThrowsInstanceOf(() => Object.groupBy([], undefined), TypeError); + assertThrowsInstanceOf(() => Object.groupBy([], null), TypeError); + assertThrowsInstanceOf(() => Object.groupBy([], 0), TypeError); + assertThrowsInstanceOf(() => Object.groupBy([], ""), TypeError); + assertThrowsInstanceOf(() => Map.groupBy([], undefined), TypeError); + assertThrowsInstanceOf(() => Map.groupBy([], null), TypeError); + assertThrowsInstanceOf(() => Map.groupBy([], 0), TypeError); + assertThrowsInstanceOf(() => Map.groupBy([], ""), TypeError); +} + +const array = [ 'test' ]; +Object.defineProperty(Map.prototype, 4, { + get() { + throw new Error('monkey-patched Map get call'); + }, + set(v) { + throw new Error('monkey-patched Map set call'); + }, + has(v) { + throw new Error('monkey-patched Map has call'); + } +}); + +const map1 = Map.groupBy(array, key => key.length); + +assert.sameValue('test', map1.get(4)[0]) + +Object.defineProperty(Array.prototype, '4', { + set(v) { + throw new Error('user observable array set'); + }, + get() { + throw new Error('user observable array get'); + } +}); + +const map2 = Map.groupBy(array, key => key.length); +const arr = Object.groupBy(array, key => key.length); + +assert.sameValue('test', map2.get(4)[0]) +assert.sameValue('test', arr[4][0]) + +Object.defineProperty(Object.prototype, "foo", { + get() { throw new Error("user observable object get"); }, + set(v) { throw new Error("user observable object set"); } +}); +Object.groupBy([1, 2, 3], () => 'foo'); + +// Ensure property key is correctly accessed +count = 0; +p = Object.groupBy([1], () => ({ toString() { count++; return 10 } })); +assert.sameValue(count, 1); +Map.groupBy([1], () => ({ toString() { count++; return 10 } })); +assert.sameValue(count, 1); + diff --git a/test/staging/sm/Array/includes-trailing-holes.js b/test/staging/sm/Array/includes-trailing-holes.js new file mode 100644 index 0000000000..6f650fd2c0 --- /dev/null +++ b/test/staging/sm/Array/includes-trailing-holes.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array with trailing hole as explicit "magic elements hole". +assert.sameValue([,].includes(), true); +assert.sameValue([,].includes(undefined), true); +assert.sameValue([,].includes(undefined, 0), true); +assert.sameValue([,].includes(null), false); +assert.sameValue([,].includes(null, 0), false); + +// Array with trailing hole with no explicit "magic elements hole". +assert.sameValue(Array(1).includes(), true); +assert.sameValue(Array(1).includes(undefined), true); +assert.sameValue(Array(1).includes(undefined, 0), true); +assert.sameValue(Array(1).includes(null), false); +assert.sameValue(Array(1).includes(null, 0), false); + diff --git a/test/staging/sm/Array/includes.js b/test/staging/sm/Array/includes.js new file mode 100644 index 0000000000..7a1f4577e1 --- /dev/null +++ b/test/staging/sm/Array/includes.js @@ -0,0 +1,65 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1069063; +var summary = "Implement Array.prototype.includes"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(typeof [].includes, "function"); +assert.sameValue([].includes.length, 1); + +assertTrue([1, 2, 3].includes(2)); +assertTrue([1,,2].includes(2)); +assertTrue([1, 2, 3].includes(2, 1)); +assertTrue([1, 2, 3].includes(2, -2)); +assertTrue([1, 2, 3].includes(2, -100)); +assertTrue([Object, Function, Array].includes(Function)); +assertTrue([-0].includes(0)); +assertTrue([NaN].includes(NaN)); +assertTrue([,].includes()); +assertTrue(staticIncludes("123", "2")); +assertTrue(staticIncludes({length: 3, 1: 2}, 2)); +assertTrue(staticIncludes({length: 3, 1: 2, get 3(){throw ""}}, 2)); +assertTrue(staticIncludes({length: 3, get 1() {return 2}}, 2)); +assertTrue(staticIncludes({__proto__: {1: 2}, length: 3}, 2)); +assertTrue(staticIncludes(new Proxy([1], {get(){return 2}}), 2)); + +assertFalse([1, 2, 3].includes("2")); +assertFalse([1, 2, 3].includes(2, 2)); +assertFalse([1, 2, 3].includes(2, -1)); +assertFalse([undefined].includes(NaN)); +assertFalse([{}].includes({})); +assertFalse(staticIncludes({length: 3, 1: 2}, 2, 2)); +assertFalse(staticIncludes({length: 3, get 0(){delete this[1]}, 1: 2}, 2)); +assertFalse(staticIncludes({length: -100, 0: 1}, 1)); + +assertThrowsInstanceOf(() => staticIncludes(), TypeError); +assertThrowsInstanceOf(() => staticIncludes(null), TypeError); +assertThrowsInstanceOf(() => staticIncludes({get length(){throw TypeError()}}), TypeError); +assertThrowsInstanceOf(() => staticIncludes({length: 3, get 1() {throw TypeError()}}, 2), TypeError); +assertThrowsInstanceOf(() => staticIncludes({__proto__: {get 1() {throw TypeError()}}, length: 3}, 2), TypeError); +assertThrowsInstanceOf(() => staticIncludes(new Proxy([1], {get(){throw TypeError()}})), TypeError); + +function assertTrue(v) { + assert.sameValue(v, true); +} + +function assertFalse(v) { + assert.sameValue(v, false); +} + +function staticIncludes(o, v, f) { + return [].includes.call(o, v, f); +} + diff --git a/test/staging/sm/Array/index-with-null-character.js b/test/staging/sm/Array/index-with-null-character.js new file mode 100644 index 0000000000..4b2821b110 --- /dev/null +++ b/test/staging/sm/Array/index-with-null-character.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var testArray = [1, 2, 3] +assert.sameValue(testArray['0' + '\0'], undefined); +assert.sameValue(testArray['1' + '\0' + 'aaaa'], undefined) +assert.sameValue(testArray['\0' + '2'], undefined); +assert.sameValue(testArray['\0' + ' 2'], undefined); + +testArray['\0'] = 'hello'; +testArray[' \0'] = 'world'; +assert.sameValue(testArray['\0'], 'hello'); +assert.sameValue(testArray[' \0'], 'world'); + diff --git a/test/staging/sm/Array/indexOf-never-returns-negative-zero.js b/test/staging/sm/Array/indexOf-never-returns-negative-zero.js new file mode 100644 index 0000000000..98d77f6565 --- /dev/null +++ b/test/staging/sm/Array/indexOf-never-returns-negative-zero.js @@ -0,0 +1,13 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue([17].indexOf(17, -0), +0); + diff --git a/test/staging/sm/Array/indexOf-packed-array.js b/test/staging/sm/Array/indexOf-packed-array.js new file mode 100644 index 0000000000..99c1e00351 --- /dev/null +++ b/test/staging/sm/Array/indexOf-packed-array.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function makeArray(array) { + var log = []; + Object.setPrototypeOf(array, new Proxy(Array.prototype, new Proxy({ + has(t, pk) { + log.push(`Has:${String(pk)}`); + return Reflect.has(t, pk); + }, + }, { + get(t, pk, r) { + if (pk in t) + return Reflect.get(t, pk, r); + throw new Error(`Unexpected trap "${pk}" called`); + } + }))); + return {array, log}; +} + + +var {array, log} = makeArray([1, null, 3]); +Array.prototype.indexOf.call(array, 100, { + valueOf() { + array.length = 0; + return 0; + } +}); +assert.compareArray(log, ["Has:0", "Has:1", "Has:2"]); + + +var {array, log} = makeArray([5, undefined, 7]); +Array.prototype.lastIndexOf.call(array, 100, { + valueOf() { + array.length = 0; + return 2; + } +}); +assert.compareArray(log, ["Has:2", "Has:1", "Has:0"]); + + diff --git a/test/staging/sm/Array/isArray.js b/test/staging/sm/Array/isArray.js new file mode 100644 index 0000000000..0d9c8e0354 --- /dev/null +++ b/test/staging/sm/Array/isArray.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var global = this; +var otherGlobal = createNewGlobal(); + +var thisGlobal = () => global; +var alternateGlobals = (function(i) { + return () => (i++ % 2) === 0 ? global : otherGlobal; +})(0); + +function performTests(pickGlobal) +{ + // Base case. + assert.sameValue(Array.isArray([]), true); + + // Simple case: proxy to an array. + var proxy = new (pickGlobal()).Proxy([], {}); + assert.sameValue(Array.isArray(proxy), true); + + // Recursive proxy ultimately terminating in an array. + for (var i = 0; i < 10; i++) { + proxy = new (pickGlobal()).Proxy(proxy, {}); + assert.sameValue(Array.isArray(proxy), true); + } + + // Revocable proxy to an array. + var revocable = (pickGlobal()).Proxy.revocable([], {}); + proxy = revocable.proxy; + assert.sameValue(Array.isArray(proxy), true); + + // Recursive proxy ultimately terminating in a revocable proxy to an array. + for (var i = 0; i < 10; i++) { + proxy = new (pickGlobal()).Proxy(proxy, {}); + assert.sameValue(Array.isArray(proxy), true); + } + + // Revoked proxy to (formerly) an array. + revocable.revoke(); + assertThrowsInstanceOf(() => Array.isArray(revocable.proxy), TypeError); + + // Recursive proxy ultimately terminating in a revoked proxy to an array. + assertThrowsInstanceOf(() => Array.isArray(proxy), TypeError); + +} + +performTests(thisGlobal); +performTests(alternateGlobals); + +function crossGlobalTest() +{ + var array = new otherGlobal.Array(); + + // Array from another global. + assert.sameValue(Array.isArray(array), true); + + // Proxy to an array from another global. + assert.sameValue(Array.isArray(new Proxy(array, {})), true); + + // Other-global proxy to an array from that selfsame global. + assert.sameValue(Array.isArray(new otherGlobal.Proxy(array, {})), true); +} + +crossGlobalTest(); + diff --git a/test/staging/sm/Array/join-01.js b/test/staging/sm/Array/join-01.js new file mode 100644 index 0000000000..c84a20bed3 --- /dev/null +++ b/test/staging/sm/Array/join-01.js @@ -0,0 +1,86 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +print("ES5: Array.prototype.join"); + +/************** + * BEGIN TEST * + **************/ + +var count; +var stringifyCounter = { toString: function() { count++; return "obj"; } }; + +var arr = [1, 2, 3, 4, 5]; +assert.sameValue(arr.join(), "1,2,3,4,5"); +assert.sameValue(arr.join(","), "1,2,3,4,5"); +assert.sameValue(arr.join(undefined), "1,2,3,4,5"); +assert.sameValue(arr.join(4), "142434445"); +assert.sameValue(arr.join(""), "12345"); + +count = 0; +assert.sameValue(arr.join(stringifyCounter), "1obj2obj3obj4obj5"); +assert.sameValue(count, 1); + +var holey = [1, 2, , 4, 5]; +assert.sameValue(holey.join(), "1,2,,4,5"); +assert.sameValue(holey.join(","), "1,2,,4,5"); +assert.sameValue(holey.join(undefined), "1,2,,4,5"); +assert.sameValue(holey.join(4), "14244445"); + +count = 0; +assert.sameValue(holey.join(stringifyCounter), "1obj2objobj4obj5"); +assert.sameValue(count, 1); + +var nully = [1, 2, 3, null, 5]; +assert.sameValue(nully.join(), "1,2,3,,5"); +assert.sameValue(nully.join(","), "1,2,3,,5"); +assert.sameValue(nully.join(undefined), "1,2,3,,5"); +assert.sameValue(nully.join(4), "14243445"); + +count = 0; +assert.sameValue(nully.join(stringifyCounter), "1obj2obj3objobj5"); +assert.sameValue(count, 1); + +var undefiney = [1, undefined, 3, 4, 5]; +assert.sameValue(undefiney.join(), "1,,3,4,5"); +assert.sameValue(undefiney.join(","), "1,,3,4,5"); +assert.sameValue(undefiney.join(undefined), "1,,3,4,5"); +assert.sameValue(undefiney.join(4), "14434445"); + +count = 0; +assert.sameValue(undefiney.join(stringifyCounter), "1objobj3obj4obj5"); +assert.sameValue(count, 1); + +var log = ''; +arr = {length: {valueOf: function () { log += "L"; return 2; }}, + 0: "x", 1: "z"}; +var sep = {toString: function () { log += "S"; return "y"; }}; +assert.sameValue(Array.prototype.join.call(arr, sep), "xyz"); +assert.sameValue(log, "LS"); + +var funky = + { + toString: function() + { + Array.prototype[1] = "chorp"; + Object.prototype[3] = "fnord"; + return "funky"; + } + }; +var trailingHoles = [0, funky, /* 2 */, /* 3 */,]; +assert.sameValue(trailingHoles.join(""), "0funkyfnord"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/join-no-has-trap.js b/test/staging/sm/Array/join-no-has-trap.js new file mode 100644 index 0000000000..1d2b8c8097 --- /dev/null +++ b/test/staging/sm/Array/join-no-has-trap.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that Array.prototype.join doesn't call the [[HasProperty]] internal +// method of objects. + +var log = []; +var array = []; +var proxy = new Proxy(array, new Proxy({}, { + get(t, trap, r) { + return (t, pk, ...more) => { + log.push(`${trap}:${String(pk)}`); + return Reflect[trap](t, pk, ...more); + }; + } +})); + +var result; + +result = Array.prototype.join.call(proxy); +assert.compareArray(log, [ "get:length" ]); +assert.sameValue(result, ""); + +log.length = 0; +array.push(1); + +result = Array.prototype.join.call(proxy); +assert.compareArray(log, [ "get:length", "get:0" ]); +assert.sameValue(result, "1"); + +log.length = 0; +array.push(2); + +result = Array.prototype.join.call(proxy); +assert.compareArray(log, [ "get:length", "get:0", "get:1" ]); +assert.sameValue(result, "1,2"); + diff --git a/test/staging/sm/Array/lastIndexOf-never-returns-negative-zero.js b/test/staging/sm/Array/lastIndexOf-never-returns-negative-zero.js new file mode 100644 index 0000000000..b6d2e8f536 --- /dev/null +++ b/test/staging/sm/Array/lastIndexOf-never-returns-negative-zero.js @@ -0,0 +1,13 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue([17].lastIndexOf(17, -0), +0); + diff --git a/test/staging/sm/Array/length-01.js b/test/staging/sm/Array/length-01.js new file mode 100644 index 0000000000..ed8805c012 --- /dev/null +++ b/test/staging/sm/Array/length-01.js @@ -0,0 +1,74 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 600392; +var summary = + 'Object.preventExtensions([]).length = 0 should do nothing, not throw'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + + +function testEmpty() +{ + var a = []; + assert.sameValue(a.length, 0); + assert.sameValue(Object.preventExtensions(a), a); + assert.sameValue(a.length, 0); + a.length = 0; + assert.sameValue(a.length, 0); +} +testEmpty(); + +function testEmptyStrict() +{ + "use strict"; + var a = []; + assert.sameValue(a.length, 0); + assert.sameValue(Object.preventExtensions(a), a); + assert.sameValue(a.length, 0); + a.length = 0; + assert.sameValue(a.length, 0); +} +testEmptyStrict(); + +function testNonEmpty() +{ + var a = [1, 2, 3]; + assert.sameValue(a.length, 3); + assert.sameValue(Object.preventExtensions(a), a); + assert.sameValue(a.length, 3); + a.length = 0; + assert.sameValue(a.length, 0); +} +testNonEmpty(); + +function testNonEmptyStrict() +{ + "use strict"; + var a = [1, 2, 3]; + assert.sameValue(a.length, 3); + assert.sameValue(Object.preventExtensions(a), a); + assert.sameValue(a.length, 3); + a.length = 0; + assert.sameValue(a.length, 0); +} +testNonEmptyStrict(); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Array/length-nonwritable-redefine-nop.js b/test/staging/sm/Array/length-nonwritable-redefine-nop.js new file mode 100644 index 0000000000..3fdaf37593 --- /dev/null +++ b/test/staging/sm/Array/length-nonwritable-redefine-nop.js @@ -0,0 +1,73 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 858381; +var summary = "No-op array length redefinition"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr; + +// initializedLength == capacity == length +// 6 == 6 == 6 +arr = Object.defineProperty([0, 1, 2, 3, 4, 5], "length", { writable: false }); +Object.defineProperty(arr, "length", { value: 6 }); +Object.defineProperty(arr, "length", { writable: false }); +Object.defineProperty(arr, "length", { configurable: false }); +Object.defineProperty(arr, "length", { writable: false, configurable: false }); +Object.defineProperty(arr, "length", { writable: false, value: 6 }); +Object.defineProperty(arr, "length", { configurable: false, value: 6 }); +Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 6 }); + +// initializedLength == capacity < length +// 6 == 6 < 8 +arr = Object.defineProperty([0, 1, 2, 3, 4, 5], "length", { value: 8, writable: false }); +Object.defineProperty(arr, "length", { value: 8 }); +Object.defineProperty(arr, "length", { writable: false }); +Object.defineProperty(arr, "length", { configurable: false }); +Object.defineProperty(arr, "length", { writable: false, configurable: false }); +Object.defineProperty(arr, "length", { writable: false, value: 8 }); +Object.defineProperty(arr, "length", { configurable: false, value: 8 }); +Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 8 }); + +// initializedLength < capacity == length +// 7 < 8 == 8 +arr = Object.defineProperty([0, 1, 2, 3, 4, 5, 6, /* hole */, ], "length", + { value: 8, writable: false }); +Object.defineProperty(arr, "length", { value: 8 }); +Object.defineProperty(arr, "length", { writable: false }); +Object.defineProperty(arr, "length", { configurable: false }); +Object.defineProperty(arr, "length", { writable: false, configurable: false }); +Object.defineProperty(arr, "length", { writable: false, value: 8 }); +Object.defineProperty(arr, "length", { configurable: false, value: 8 }); +Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 8 }); + +// initializedLength < capacity < length +// 3 < 6 < 8 +arr = Object.defineProperty([0, 1, 2], "length", { value: 8, writable: false }); +Object.defineProperty(arr, "length", { value: 8 }); +Object.defineProperty(arr, "length", { writable: false }); +Object.defineProperty(arr, "length", { configurable: false }); +Object.defineProperty(arr, "length", { writable: false, configurable: false }); +Object.defineProperty(arr, "length", { writable: false, value: 8 }); +Object.defineProperty(arr, "length", { configurable: false, value: 8 }); +Object.defineProperty(arr, "length", { writable: false, configurable: false, value: 8 }); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/length-set-object.js b/test/staging/sm/Array/length-set-object.js new file mode 100644 index 0000000000..31977a470c --- /dev/null +++ b/test/staging/sm/Array/length-set-object.js @@ -0,0 +1,71 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 657298; +var summary = 'Various quirks of setting array length properties to objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function invokeConversionTwice1() +{ + var count = 0; + [].length = { valueOf: function() { count++; return 1; } }; + assert.sameValue(count, 2); +} +invokeConversionTwice1(); + +function invokeConversionTwice2() +{ + var count = 0; + [].length = { toString: function() { count++; return 1; }, valueOf: null }; + assert.sameValue(count, 2); +} +invokeConversionTwice2(); + +function dontOverwriteError1() +{ + try + { + [].length = { valueOf: {}, toString: {} }; + throw new Error("didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "expected a TypeError running out of conversion options, got " + e); + } +} +dontOverwriteError1(); + +function dontOverwriteError2() +{ + try + { + [].length = { valueOf: function() { throw "error"; } }; + throw new Error("didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e, "error", "expected 'error' from failed conversion, got " + e); + } +} +dontOverwriteError2(); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Array/length-truncate-nonconfigurable-sparse.js b/test/staging/sm/Array/length-truncate-nonconfigurable-sparse.js new file mode 100644 index 0000000000..6e470246e1 --- /dev/null +++ b/test/staging/sm/Array/length-truncate-nonconfigurable-sparse.js @@ -0,0 +1,113 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 858381; +var summary = + "Array length redefinition behavior with non-configurable elements"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function addDataProperty(obj, prop, value, enumerable, configurable, writable) +{ + var desc = + { enumerable: enumerable, + configurable: configurable, + writable: writable, + value: value }; + Object.defineProperty(obj, prop, desc); +} + +function nonstrict() +{ + var arr = [0, , 2, , , 5]; + + addDataProperty(arr, 31415926, "foo", true, true, true); + addDataProperty(arr, 123456789, "bar", true, true, false); + addDataProperty(arr, 8675309, "qux", false, true, true); + addDataProperty(arr, 1735039, "eit", false, true, false); + addDataProperty(arr, 987654321, "fun", false, true, false); + + // non-array indexes to spice things up + addDataProperty(arr, "foopy", "sdfsd", false, false, false); + addDataProperty(arr, 4294967296, "psych", true, false, false); + addDataProperty(arr, 4294967295, "psych", true, false, false); + + addDataProperty(arr, 27182818, "eep", false, false, false); + + // Truncate...but only as far as possible. + arr.length = 1; + + assert.sameValue(arr.length, 27182819); + + var props = Object.getOwnPropertyNames(arr).sort(); + var expected = + ["0", "2", "5", "1735039", "8675309", "27182818", + "foopy", "4294967296", "4294967295", "length"].sort(); + + assert.sameValue(props.length, expected.length); + for (var i = 0; i < props.length; i++) + assert.sameValue(props[i], expected[i], "unexpected property: " + props[i]); +} +nonstrict(); + +function strict() +{ + "use strict"; + + var arr = [0, , 2, , , 5]; + + addDataProperty(arr, 31415926, "foo", true, true, true); + addDataProperty(arr, 123456789, "bar", true, true, false); + addDataProperty(arr, 8675309, "qux", false, true, true); + addDataProperty(arr, 1735039, "eit", false, true, false); + addDataProperty(arr, 987654321, "fun", false, true, false); + + // non-array indexes to spice things up + addDataProperty(arr, "foopy", "sdfsd", false, false, false); + addDataProperty(arr, 4294967296, "psych", true, false, false); + addDataProperty(arr, 4294967295, "psych", true, false, false); + + addDataProperty(arr, 27182818, "eep", false, false, false); + + try + { + arr.length = 1; + throw new Error("didn't throw?!"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "non-configurable property should trigger TypeError, got " + e); + } + + assert.sameValue(arr.length, 27182819); + + var props = Object.getOwnPropertyNames(arr).sort(); + var expected = + ["0", "2", "5", "1735039", "8675309", "27182818", + "foopy", "4294967296", "4294967295", "length"].sort(); + + assert.sameValue(props.length, expected.length); + for (var i = 0; i < props.length; i++) + assert.sameValue(props[i], expected[i], "unexpected property: " + props[i]); +} +strict(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/length-truncate-nonconfigurable.js b/test/staging/sm/Array/length-truncate-nonconfigurable.js new file mode 100644 index 0000000000..84c07e64a9 --- /dev/null +++ b/test/staging/sm/Array/length-truncate-nonconfigurable.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 858381; +var summary = + "Array length redefinition behavior with non-configurable elements"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = [0, 1, 2]; +Object.defineProperty(arr, 1, { configurable: false }); + +try +{ + Object.defineProperty(arr, "length", { value: 0, writable: false }); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "must throw TypeError when array truncation would have to remove " + + "non-configurable elements"); +} + +assert.sameValue(arr.length, 2, "length is highest remaining index plus one"); + +var desc = Object.getOwnPropertyDescriptor(arr, "length"); +assert.sameValue(desc !== undefined, true); + +assert.sameValue(desc.value, 2); +assert.sameValue(desc.writable, false); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/length-truncate-with-indexed.js b/test/staging/sm/Array/length-truncate-with-indexed.js new file mode 100644 index 0000000000..c5de9d4d60 --- /dev/null +++ b/test/staging/sm/Array/length-truncate-with-indexed.js @@ -0,0 +1,104 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 858381; +var summary = + "Array length setting/truncating with non-dense, indexed elements"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testTruncateDenseAndSparse() +{ + var arr; + + // initialized length 16, capacity same + arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]; + + // plus a sparse element + arr[987654321] = 987654321; + + // lop off the sparse element and half the dense elements, shrink capacity + arr.length = 8; + + assert.sameValue(987654321 in arr, false); + assert.sameValue(arr[987654321], undefined); + assert.sameValue(arr.length, 8); +} +testTruncateDenseAndSparse(); + +function testTruncateSparse() +{ + // initialized length 8, capacity same + var arr = [0, 1, 2, 3, 4, 5, 6, 7]; + + // plus a sparse element + arr[987654321] = 987654321; + + // lop off the sparse element, leave initialized length/capacity unchanged + arr.length = 8; + + assert.sameValue(987654321 in arr, false); + assert.sameValue(arr[987654321], undefined); + assert.sameValue(arr.length, 8); +} +testTruncateSparse(); + +function testTruncateDenseAndSparseShrinkCapacity() +{ + // initialized length 11, capacity...somewhat larger, likely 16 + var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + // plus a sparse element + arr[987654321] = 987654321; + + // lop off the sparse element, reduce initialized length, reduce capacity + arr.length = 8; + + assert.sameValue(987654321 in arr, false); + assert.sameValue(arr[987654321], undefined); + assert.sameValue(arr.length, 8); +} +testTruncateDenseAndSparseShrinkCapacity(); + +function testTruncateSparseShrinkCapacity() +{ + // initialized length 8, capacity same + var arr = [0, 1, 2, 3, 4, 5, 6, 7]; + + // capacity expands to accommodate, initialized length remains same (not equal + // to capacity or length) + arr[15] = 15; + + // now no elements past initialized length + delete arr[15]; + + // ...except a sparse element + arr[987654321] = 987654321; + + // trims sparse element, doesn't change initialized length, shrinks capacity + arr.length = 8; + + assert.sameValue(987654321 in arr, false); + assert.sameValue(arr[987654321], undefined); + assert.sameValue(arr.length, 8); +} +testTruncateSparseShrinkCapacity(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/pop-empty-nonwritable.js b/test/staging/sm/Array/pop-empty-nonwritable.js new file mode 100644 index 0000000000..bc997dcaa6 --- /dev/null +++ b/test/staging/sm/Array/pop-empty-nonwritable.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 858381; +var summary = 'Object.freeze([]).pop() must throw a TypeError'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + Object.freeze([]).pop(); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown TypeError, instead got: " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/pop-no-has-trap.js b/test/staging/sm/Array/pop-no-has-trap.js new file mode 100644 index 0000000000..893b353e47 --- /dev/null +++ b/test/staging/sm/Array/pop-no-has-trap.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that Array.prototype.pop doesn't call the [[HasProperty]] internal +// method of objects when retrieving the element at the last index. + +var log = []; +var array = []; +var proxy = new Proxy(array, new Proxy({}, { + get(t, trap, r) { + return (t, pk, ...more) => { + log.push(`${trap}:${String(pk)}`); + return Reflect[trap](t, pk, ...more); + }; + } +})); + +var result; + +result = Array.prototype.pop.call(proxy); +assert.compareArray(log, [ + "get:length", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, undefined); + +log.length = 0; +array.push(1); + +result = Array.prototype.pop.call(proxy); +assert.compareArray(log, [ + "get:length", + "get:0", "deleteProperty:0", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, 1); + +log.length = 0; +array.push(2, 3); + +result = Array.prototype.pop.call(proxy); +assert.compareArray(log, [ + "get:length", + "get:1", "deleteProperty:1", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, 3); + +log.length = 0; +array.push(4, 5); + +result = Array.prototype.pop.call(proxy); +assert.compareArray(log, [ + "get:length", + "get:2", "deleteProperty:2", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, 5); + diff --git a/test/staging/sm/Array/pop-nonarray-higher-elements.js b/test/staging/sm/Array/pop-nonarray-higher-elements.js new file mode 100644 index 0000000000..89bb6a1cda --- /dev/null +++ b/test/staging/sm/Array/pop-nonarray-higher-elements.js @@ -0,0 +1,96 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 909602; +var summary = + "Array.prototype.pop shouldn't touch elements greater than length on " + + "non-arrays"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function doTest(obj, index) +{ + // print("testing " + JSON.stringify(obj) + " with index " + index); + assert.sameValue(Array.prototype.pop.call(obj), undefined); + assert.sameValue(index in obj, true); + assert.sameValue(obj[index], 42); +} + +// not-super-much-later element + +// non-zero length +function testPop1() +{ + var obj = { length: 2, 3: 42 }; + doTest(obj, 3); +} +for (var i = 0; i < 50; i++) + testPop1(); + +// zero length +function testPop2() +{ + var obj = { length: 0, 3: 42 }; + doTest(obj, 3); +} +for (var i = 0; i < 50; i++) + testPop2(); + +// much-later (but dense) element + +// non-zero length +function testPop3() +{ + var obj = { length: 2, 55: 42 }; + doTest(obj, 55); +} +for (var i = 0; i < 50; i++) + testPop3(); + +// zero length +function testPop4() +{ + var obj = { length: 0, 55: 42 }; + doTest(obj, 55); +} +for (var i = 0; i < 50; i++) + testPop4(); + +// much much much later (sparse) element + +// non-zero length +function testPop5() +{ + var obj = { length: 2, 65530: 42 }; + doTest(obj, 65530); +} +for (var i = 0; i < 50; i++) + testPop5(); + +// zero length +function testPop6() +{ + var obj = { length: 0, 65530: 42 }; + doTest(obj, 65530); +} +for (var i = 0; i < 50; i++) + testPop6(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/redefine-length-frozen-array.js b/test/staging/sm/Array/redefine-length-frozen-array.js new file mode 100644 index 0000000000..e41133711b --- /dev/null +++ b/test/staging/sm/Array/redefine-length-frozen-array.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 866580; +var summary = "Assertion redefining length property of a frozen array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = Object.freeze([]); +Object.defineProperty(arr, "length", {}); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/redefine-length-frozen-dictionarymode-array.js b/test/staging/sm/Array/redefine-length-frozen-dictionarymode-array.js new file mode 100644 index 0000000000..c7e2106fdb --- /dev/null +++ b/test/staging/sm/Array/redefine-length-frozen-dictionarymode-array.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 880591; +var summary = + "Assertion redefining length property of a frozen dictionary-mode array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function convertToDictionaryMode(arr) +{ + Object.defineProperty(arr, 0, { configurable: true }); + Object.defineProperty(arr, 1, { configurable: true }); + delete arr[0]; +} + +var arr = []; +convertToDictionaryMode(arr); +Object.freeze(arr); +Object.defineProperty(arr, "length", {}); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/redefine-nonwritable-length-custom-conversion-call-counts.js b/test/staging/sm/Array/redefine-nonwritable-length-custom-conversion-call-counts.js new file mode 100644 index 0000000000..6e56d75fff --- /dev/null +++ b/test/staging/sm/Array/redefine-nonwritable-length-custom-conversion-call-counts.js @@ -0,0 +1,48 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 866700; +var summary = "Assertion redefining non-writable length to a non-numeric value"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var count = 0; + +var convertible = + { + valueOf: function() + { + count++; + return 0; + } + }; + +var arr = []; +Object.defineProperty(arr, "length", { value: 0, writable: false }); + +Object.defineProperty(arr, "length", { value: convertible }); +assert.sameValue(count, 2); + +Object.defineProperty(arr, "length", { value: convertible }); +assert.sameValue(count, 4); + +assert.sameValue(arr.length, 0); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/redefine-nonwritable-length-custom-conversion-throw.js b/test/staging/sm/Array/redefine-nonwritable-length-custom-conversion-throw.js new file mode 100644 index 0000000000..e56a8d6bd8 --- /dev/null +++ b/test/staging/sm/Array/redefine-nonwritable-length-custom-conversion-throw.js @@ -0,0 +1,61 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 866700; +var summary = "Assertion redefining non-writable length to a non-numeric value"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var count = 0; + +var convertible = + { + valueOf: function() + { + count++; + if (count > 2) + return 0; + throw new SyntaxError("fnord"); + } + }; + +var arr = []; +Object.defineProperty(arr, "length", { value: 0, writable: false }); + +try +{ + Object.defineProperty(arr, "length", + { + value: convertible, + writable: true, + configurable: true, + enumerable: true + }); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, "expected SyntaxError, got " + e); +} + +assert.sameValue(count, 1); +assert.sameValue(arr.length, 0); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/redefine-nonwritable-length-nonnumeric.js b/test/staging/sm/Array/redefine-nonwritable-length-nonnumeric.js new file mode 100644 index 0000000000..592faee8a3 --- /dev/null +++ b/test/staging/sm/Array/redefine-nonwritable-length-nonnumeric.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 866700; +var summary = "Assertion redefining non-writable length to a non-numeric value"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +Object.defineProperty(arr, "length", { value: 0, writable: false }); + +// Per Array's magical behavior, the value in the descriptor gets canonicalized +// *before* SameValue comparisons occur, so this shouldn't throw. +Object.defineProperty(arr, "length", { value: '' }); + +assert.sameValue(arr.length, 0); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/regress-386030.js b/test/staging/sm/Array/regress-386030.js new file mode 100644 index 0000000000..42af859ada --- /dev/null +++ b/test/staging/sm/Array/regress-386030.js @@ -0,0 +1,70 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 386030; +var summary = 'Array.reduce should ignore holes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + function add(a, b) { return a + b; } + function testreduce(v) { return v == 3 ? "PASS" : "FAIL"; } + + expect = 'PASS'; + + try { + a = new Array(2); + a[1] = 3; + actual = testreduce(a.reduce(add)); + } catch (e) { + actual = "FAIL, reduce"; + } + assert.sameValue(expect, actual, summary + ': 1'); + + try { + a = new Array(2); + a[0] = 3; + actual = testreduce(a.reduceRight(add)); + } catch (e) { + actual = "FAIL, reduceRight"; + } + assert.sameValue(expect, actual, summary + ': 2'); + + try { + a = new Array(2); + a.reduce(add); + actual = "FAIL, empty reduce"; + } catch (e) { + actual = "PASS"; + } + assert.sameValue(expect, actual, summary + ': 3'); + + try { + a = new Array(2); + print(a.reduceRight(add)); + actual = "FAIL, empty reduceRight"; + } catch (e) { + actual = "PASS"; + } + assert.sameValue(expect, actual, summary + ': 4'); +} diff --git a/test/staging/sm/Array/regress-424954.js b/test/staging/sm/Array/regress-424954.js new file mode 100644 index 0000000000..dea2e91231 --- /dev/null +++ b/test/staging/sm/Array/regress-424954.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 424954; +var summary = 'Do not crash with [].concat(null)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + [].concat(null); + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/Array/regress-566651.js b/test/staging/sm/Array/regress-566651.js new file mode 100644 index 0000000000..cdd680a49f --- /dev/null +++ b/test/staging/sm/Array/regress-566651.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 566651; +var summary = 'setting array.length to null should not throw an uncatchable exception'; +var actual = 0; +var expect = 0; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var a = []; +a.length = null; + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/Array/regress-599159.js b/test/staging/sm/Array/regress-599159.js new file mode 100644 index 0000000000..8197d3bb75 --- /dev/null +++ b/test/staging/sm/Array/regress-599159.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var b = Object.create(Array.prototype); +b.length = 12; +assert.sameValue(b.length, 12); + diff --git a/test/staging/sm/Array/regress-619970.js b/test/staging/sm/Array/regress-619970.js new file mode 100644 index 0000000000..413634042a --- /dev/null +++ b/test/staging/sm/Array/regress-619970.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test() { + delete arguments[1]; + return Array.prototype.join.call(arguments); +} +assert.sameValue(test(1,2,3), "1,,3"); +Object.prototype[1] = "ponies!!!1"; +assert.sameValue(test(1,2,3), "1,ponies!!!1,3"); diff --git a/test/staging/sm/Array/reverse-order-of-low-high-accesses.js b/test/staging/sm/Array/reverse-order-of-low-high-accesses.js new file mode 100644 index 0000000000..9e69ce783f --- /dev/null +++ b/test/staging/sm/Array/reverse-order-of-low-high-accesses.js @@ -0,0 +1,93 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 858677; +var summary = + "[].reverse should swap elements low to high using accesses to low " + + "elements, then accesses to high elements"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var observed = []; + +// (0, 7) hits the lowerExists/upperExists case. +// (1, 6) hits the !lowerExists/upperExists case. +// (2, 5) hits the lowerExists/!upperExists case. +// (3, 4) hits the !lowerExists/!upperExists case. +// +// It'd be a good idea to have a second version of this test at some point +// where the "array" being reversed is a proxy, to detect proper ordering of +// getproperty, hasproperty, setproperty into a hole, and deleteproperty from a +// non-configurable element. But at present our Array.prototype.reverse +// implementation probably doesn't conform fully to all this (because our +// internal MOP is still slightly off), so punt for now. +var props = + { + 0: { + configurable: true, + get: function() { observed.push("index 0 get"); return "index 0 get"; }, + set: function(v) { observed.push("index 0 set: " + v); } + }, + /* 1: hole */ + 2: { + configurable: true, + get: function() { observed.push("index 2 get"); return "index 2 get"; }, + set: function(v) { observed.push("index 2 set: " + v); } + }, + /* 3: hole */ + /* 4: hole */ + /* 5: hole */ + 6: { + configurable: true, + get: function() { observed.push("index 6 get"); return "index 6 get"; }, + set: function(v) { observed.push("index 6 set: " + v); } + }, + 7: { + configurable: true, + get: function() { observed.push("index 7 get"); return "index 7 get"; }, + set: function(v) { observed.push("index 7 set: " + v); } + }, + }; + +var arr = Object.defineProperties(new Array(8), props); + +arr.reverse(); + +var expectedObserved = + ["index 0 get", "index 7 get", "index 0 set: index 7 get", "index 7 set: index 0 get", + "index 6 get", + "index 2 get" + /* nothing for 3/4 */]; +print(observed); +// Do this before the assertions below futz even more with |observed|. +assert.sameValue(observed.length, expectedObserved.length); +for (var i = 0; i < expectedObserved.length; i++) + assert.sameValue(observed[i], expectedObserved[i]); + +assert.sameValue(arr[0], "index 0 get"); // no deletion, setting doesn't overwrite +assert.sameValue(arr[1], "index 6 get"); // copies result of getter +assert.sameValue(2 in arr, false); // deleted +assert.sameValue(3 in arr, false); // never there +assert.sameValue(4 in arr, false); // never there +assert.sameValue(arr[5], "index 2 get"); // copies result of getter +assert.sameValue(6 in arr, false); // deleted +assert.sameValue(arr[7], "index 7 get"); // no deletion, setter doesn't overwrite + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/set-with-indexed-property-on-prototype-chain.js b/test/staging/sm/Array/set-with-indexed-property-on-prototype-chain.js new file mode 100644 index 0000000000..1e1553c47b --- /dev/null +++ b/test/staging/sm/Array/set-with-indexed-property-on-prototype-chain.js @@ -0,0 +1,69 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function ensureSetterCalledOnce(fn, value, index) { + var setterCalled = false; + Object.defineProperty(Array.prototype, index, { + configurable: true, + set: function(v) { + assert.sameValue(setterCalled, false); + setterCalled = true; + assert.sameValue(v, value); + } + }); + + assert.sameValue(setterCalled, false); + fn(); + assert.sameValue(setterCalled, true); + + delete Array.prototype[index]; +} + +ensureSetterCalledOnce(function() { + [].push("push"); +}, "push", 0); + +ensureSetterCalledOnce(function() { + [/* hole */, "reverse"].reverse(); +}, "reverse", 0); + +ensureSetterCalledOnce(function() { + ["reverse", /* hole */,].reverse(); +}, "reverse", 1); + +ensureSetterCalledOnce(function() { + [/* hole */, "shift"].shift(); +}, "shift", 0); + +ensureSetterCalledOnce(function() { + [/* hole */, "sort"].sort(); +}, "sort", 0); + +ensureSetterCalledOnce(function() { + [/* hole */, undefined].sort(); +}, undefined, 0); + +ensureSetterCalledOnce(function() { + [].splice(0, 0, "splice"); +}, "splice", 0); + +ensureSetterCalledOnce(function() { + [/* hole */, "splice"].splice(0, 1); +}, "splice", 0); + +ensureSetterCalledOnce(function(v) { + ["splice", /* hole */,].splice(0, 0, "item"); +}, "splice", 1); + +ensureSetterCalledOnce(function() { + [].unshift("unshift"); +}, "unshift", 0); + diff --git a/test/staging/sm/Array/shift-no-has-trap.js b/test/staging/sm/Array/shift-no-has-trap.js new file mode 100644 index 0000000000..8ac9e0fd82 --- /dev/null +++ b/test/staging/sm/Array/shift-no-has-trap.js @@ -0,0 +1,73 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that Array.prototype.shift doesn't call the [[HasProperty]] internal +// method of objects when retrieving the element at index 0. + +var log = []; +var array = []; +var proxy = new Proxy(array, new Proxy({}, { + get(t, trap, r) { + return (t, pk, ...more) => { + log.push(`${trap}:${String(pk)}`); + return Reflect[trap](t, pk, ...more); + }; + } +})); + +var result; + +result = Array.prototype.shift.call(proxy); +assert.compareArray(log, [ + "get:length", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, undefined); + +log.length = 0; +array.push(1); + +result = Array.prototype.shift.call(proxy); +assert.compareArray(log, [ + "get:length", + "get:0", + "deleteProperty:0", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, 1); + +log.length = 0; +array.push(2, 3); + +result = Array.prototype.shift.call(proxy); +assert.compareArray(log, [ + "get:length", + "get:0", + "has:1", "get:1", "set:0", "getOwnPropertyDescriptor:0", "defineProperty:0", + "deleteProperty:1", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, 2); + +log.length = 0; +array.push(4, 5); + +result = Array.prototype.shift.call(proxy); +assert.compareArray(log, [ + "get:length", + "get:0", + "has:1", "get:1", "set:0", "getOwnPropertyDescriptor:0", "defineProperty:0", + "has:2", "get:2", "set:1", "getOwnPropertyDescriptor:1", "defineProperty:1", + "deleteProperty:2", + "set:length", "getOwnPropertyDescriptor:length", "defineProperty:length" +]); +assert.sameValue(result, 3); + diff --git a/test/staging/sm/Array/shift_for_in.js b/test/staging/sm/Array/shift_for_in.js new file mode 100644 index 0000000000..17f8f5e8a8 --- /dev/null +++ b/test/staging/sm/Array/shift_for_in.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1247701; +var summary = 'Array.prototype.shift on a dense array with holes should update for-in enumeration properties.'; + +print(BUGNUMBER + ": " + summary); + +var x = ["a", , "b", , "c", "d" , "e", "f", "g"]; +for (var p in x) { + assert.sameValue(p in x, true); + x.shift(); +} + diff --git a/test/staging/sm/Array/sort-01.js b/test/staging/sm/Array/sort-01.js new file mode 100644 index 0000000000..07036f8521 --- /dev/null +++ b/test/staging/sm/Array/sort-01.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 604971; +var summary = 'array.sort compare-function gets incorrect this'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +[1, 2, 3].sort(function() { "use strict"; assert.sameValue(this, undefined); }); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Array/sort-array-with-holes-and-undefined.js b/test/staging/sm/Array/sort-array-with-holes-and-undefined.js new file mode 100644 index 0000000000..c6f7afef77 --- /dev/null +++ b/test/staging/sm/Array/sort-array-with-holes-and-undefined.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 664528; +var summary = + "Sorting an array containing only holes and |undefined| should move all " + + "|undefined| to the start of the array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var a = [, , , undefined]; +a.sort(); + +assert.sameValue(a.hasOwnProperty(0), true); +assert.sameValue(a[0], undefined); +assert.sameValue(a.hasOwnProperty(1), false); +assert.sameValue(a.hasOwnProperty(2), false); +assert.sameValue(a.hasOwnProperty(3), false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/sort-delete-ascending-order.js b/test/staging/sm/Array/sort-delete-ascending-order.js new file mode 100644 index 0000000000..935fd572aa --- /dev/null +++ b/test/staging/sm/Array/sort-delete-ascending-order.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Calls Array.prototype.sort and tests that properties are deleted in the same order in the +// native and the self-hosted implementation. + +function createProxy() { + var deleted = []; + var proxy = new Proxy([, , 0], { + deleteProperty(t, pk){ + deleted.push(pk); + return delete t[pk]; + } + }); + + return {proxy, deleted}; +} + +function compareFn(a, b) { + return a < b ? -1 : a > b ? 1 : 0; +} + +// Sort an array without a comparator function. This calls the native sort implementation. + +var {proxy, deleted} = createProxy(); + +assert.compareArray(deleted, []); +proxy.sort() +assert.compareArray(deleted, ["1", "2"]); + +// Now sort an array with a comparator function. This calls the self-hosted sort implementation. + +var {proxy, deleted} = createProxy(); + +assert.compareArray(deleted, []); +proxy.sort(compareFn); +assert.compareArray(deleted, ["1", "2"]); + diff --git a/test/staging/sm/Array/sort-non-function.js b/test/staging/sm/Array/sort-non-function.js new file mode 100644 index 0000000000..a558eaa489 --- /dev/null +++ b/test/staging/sm/Array/sort-non-function.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Array.prototype.sort throws if the comparator is neither undefined nor +// a callable object. + +// Use a zero length array, so we can provide any kind of callable object +// without worrying that the function is actually a valid comparator function. +const array = new Array(0); + +// Throws if the comparator is neither undefined nor callable. +for (let invalidComparator of [null, 0, true, Symbol(), {}, []]) { + assertThrowsInstanceOf(() => array.sort(invalidComparator), TypeError); +} + +// Doesn't throw if the comparator is undefined or a callable object. +for (let validComparator of [undefined, () => {}, Math.max, class {}, new Proxy(function(){}, {})]) { + array.sort(validComparator); +} + +// Also doesn't throw if no comparator was provided at all. +array.sort(); + diff --git a/test/staging/sm/Array/sort-typedarray-with-own-length.js b/test/staging/sm/Array/sort-typedarray-with-own-length.js new file mode 100644 index 0000000000..b29bf402df --- /dev/null +++ b/test/staging/sm/Array/sort-typedarray-with-own-length.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function sortTypedArray(comparator) { + // Create a typed array with three elements, but also add an own "length" + // property with the value `2` to restrict the range of elements which + // will be sorted by Array.prototype.sort(). + var ta = new Int8Array([3, 2, 1]); + Object.defineProperty(ta, "length", {value: 2}); + + // Sort with Array.prototype.sort(), not %TypedArray%.prototype.sort()! + Array.prototype.sort.call(ta, comparator); + + return ta; +} + +// Comparators using the form |return a - b| are special-cased in +// Array.prototype.sort(). +function optimizedComparator(a, b) { + return a - b; +} + +// This comparator doesn't compile to the byte code sequence which gets +// special-cased in Array.prototype.sort(). +function nonOptimizedComparator(a, b) { + var d = a - b; + return d; +} + +// Both comparators should produce the same result. +assert.sameValue(sortTypedArray(optimizedComparator).toString(), "2,3,1"); +assert.sameValue(sortTypedArray(nonOptimizedComparator).toString(), "2,3,1"); + + diff --git a/test/staging/sm/Array/sort_holes.js b/test/staging/sm/Array/sort_holes.js new file mode 100644 index 0000000000..92614d0c20 --- /dev/null +++ b/test/staging/sm/Array/sort_holes.js @@ -0,0 +1,74 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// We should preserve holes when sorting sparce arrays. +// See bug: 1246860 + +function denseCount(arr) { + var c = 0; + for (var i = 0; i < arr.length; i++) + if (i in arr) + c++; + return c; +} + +let a = [,,,,,,,,,,,,,,,,,,,,{size: 1},{size: 2}]; +let b = [,,,,,,,,,,,,,,,,,,,,{size: 1},{size: 2}].sort(); +let c = [,,,,,,,,,,,,,,,,,,,,{size: 1},{size: 2}].sort((a, b) => {+a.size - +b.size}); + +assert.sameValue(a.length, 22); +assert.sameValue(denseCount(a), 2); +assert.sameValue(a.length, b.length); +assert.sameValue(b.length, c.length); +assert.sameValue(denseCount(a), denseCount(b)); +assert.sameValue(denseCount(b), denseCount(c)); + +let superSparce = new Array(5000); +superSparce[0] = 99; +superSparce[4000] = 0; +superSparce[4999] = -1; + +assert.sameValue(superSparce.length, 5000); +assert.sameValue(denseCount(superSparce), 3); + +superSparce.sort((a, b) => 1*a-b); +assert.sameValue(superSparce.length, 5000); +assert.sameValue(denseCount(superSparce), 3); +assert.sameValue(superSparce[0], -1); +assert.sameValue(superSparce[1], 0); +assert.sameValue(superSparce[2], 99); + +let allHoles = new Array(2600); +assert.sameValue(allHoles.length, 2600); +assert.sameValue(denseCount(allHoles), 0); +allHoles.sort((a, b) => 1*a-b); +assert.sameValue(allHoles.length, 2600); +assert.sameValue(denseCount(allHoles), 0); + +let oneHole = new Array(2600); +oneHole[1399] = {size: 27}; +assert.sameValue(oneHole.length, 2600); +assert.sameValue(denseCount(oneHole), 1); +oneHole.sort((a, b) => {+a.size - +b.size}); +assert.deepEqual(oneHole[0], {size: 27}); +assert.sameValue(oneHole.length, 2600); +assert.sameValue(denseCount(oneHole), 1); + +// Sealed objects should be sortable, including those with holes (so long +// as the holes appear at the end, so that they don't need to be moved). +assert.deepEqual(Object.seal([0, 99, -1]).sort((x, y) => 1 * x - y), + Object.seal([-1, 0, 99])); + +assert.deepEqual(Object.seal([1, 5, 4, , ,]).sort((x, y) => 1 * x - y), + Object.seal([1, 4, 5, , ,])); + diff --git a/test/staging/sm/Array/sort_native_string_nan.js b/test/staging/sm/Array/sort_native_string_nan.js new file mode 100644 index 0000000000..560f9071ad --- /dev/null +++ b/test/staging/sm/Array/sort_native_string_nan.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var array = ["not-a-number", "also-not-a-number"]; +var copy = [...array]; + +// The sort comparator must be exactly equal to the bytecode pattern: +// +// JSOp::GetArg 0/1 +// JSOp::GetArg 1/0 +// JSOp::Sub +// JSOp::Return +array.sort(function(a, b) { return a - b; }); + +assert.compareArray(array, copy); + diff --git a/test/staging/sm/Array/sort_proxy.js b/test/staging/sm/Array/sort_proxy.js new file mode 100644 index 0000000000..4dddb31498 --- /dev/null +++ b/test/staging/sm/Array/sort_proxy.js @@ -0,0 +1,48 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Ensure, via proxy, that only get, set, delete, has, and getOwnPropertyDescriptor +// are touched during sorting. + +const handler = { + set: function(target, prop, value) { + target[prop] = value; + return value; + }, + getPrototypeOf: () => { throw "You shouldn't touch getPrototypeOf!" }, + setPrototypeOf: () => { throw "You shouldn't touch setPrototypeOf!" }, + isExtensible: () => { throw "You shouldn't touch isExtensible!" }, + preventExtensions: () => { throw "You shouldn't touch preventExtensions!" }, + defineProperty: () => { throw "You shouldn't touch defineProperty!" }, + ownKeys: () => { throw "You shouldn't touch ownKeys!" }, + apply: () => { throw "You shouldn't touch apply!" }, + construct: () => { throw "You shouldn't touch construct!" }, +} + +function testArray(arr) { + let proxy = new Proxy(arr, handler) + + // The supplied comparators trigger a JavaScript implemented sort. + proxy.sort((x, y) => 1 * x - y); + arr.sort((x, y) => 1 * x - y); + + for (let i in arr) + assert.sameValue(arr[i], proxy[i]); +} + +testArray([-1]); +testArray([5, -1, 2, 99]); +testArray([5, -1, , , , 2, 99]); +testArray([]); + diff --git a/test/staging/sm/Array/sort_small.js b/test/staging/sm/Array/sort_small.js new file mode 100644 index 0000000000..20b7e25fd8 --- /dev/null +++ b/test/staging/sm/Array/sort_small.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Sort every possible permutation of some arrays. +function sortAllPermutations(data, comparefn) { + for (let permutation of Permutations(Array.from(data))) { + let sorted = (Array.from(permutation)).sort(comparefn); + for (let i in sorted) { + assert.sameValue(sorted[i], data[i], + [`[${permutation}].sort(${comparefn})`, + `returned ${sorted}, expected ${data}`].join(' ')); + } + } +} + +let lex = [2112, "bob", "is", "my", "name"]; +let nans = [1/undefined, NaN, Number.NaN] + +let num1 = [-11, 0, 0, 100, 101]; +let num2 = [-11, 100, 201234.23, undefined, undefined]; + +sortAllPermutations(lex); +sortAllPermutations(nans); + +sortAllPermutations(nans, (x, y) => x - y); +// Multiplication kills comparator optimization. +sortAllPermutations(nans, (x, y) => (1*x - 1*y)); + +sortAllPermutations(num1, (x, y) => x - y); +sortAllPermutations(num1, (x, y) => (1*x - 1*y)); + +sortAllPermutations(num2, (x, y) => x - y); +sortAllPermutations(num2, (x, y) => (1*x - 1*y)); + diff --git a/test/staging/sm/Array/species.js b/test/staging/sm/Array/species.js new file mode 100644 index 0000000000..44c56d01fb --- /dev/null +++ b/test/staging/sm/Array/species.js @@ -0,0 +1,191 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1165052; +var summary = 'Use ArraySpeciesCreate in Array.prototype.{concat,filter,map,slice,splice}.'; + +print(BUGNUMBER + ": " + summary); + +function test(funcName, args, expectedLength, expectedLogs) { + // modified @@species + function FakeArray(n) { + this.length = n; + } + var a = [1, 2, 3, 4, 5]; + a.constructor = { + [Symbol.species]: FakeArray + }; + var b = a[funcName](...args); + assert.sameValue(b.constructor, FakeArray); + + function FakeArrayWithSpecies(n) { + this.length = n; + } + FakeArrayWithSpecies[Symbol.species] = FakeArrayWithSpecies; + a = [1, 2, 3, 4, 5]; + a.constructor = FakeArrayWithSpecies; + b = a[funcName](...args); + assert.sameValue(b.constructor, FakeArrayWithSpecies); + + function FakeArrayWithHook(n) { + return new Proxy(new FakeArray(n), { + set(that, name, value) { + logs += "set:" + name + ":" + value + ","; + return true; + }, + defineProperty(that, name, desc) { + logs += "define:" + name + ":" + desc.value + ":" + desc.configurable + ":" + desc.enumerable + ":" + desc.writable + ","; + return true; + } + }); + } + var logs = ""; + var ctorProxy = new Proxy({}, { + get(that, name) { + logs += "c-get:" + name.toString() + ","; + if (name == Symbol.species) + return FakeArrayWithHook; + + return undefined; + } + }); + a = new Proxy([1, 2, 3, 4, 5], { + get(that, name) { + logs += "get:" + name.toString() + ","; + if (name == "constructor") + return ctorProxy; + return that[name]; + } + }); + b = a[funcName](...args); + assert.sameValue(b.constructor, FakeArray); + assert.sameValue(Object.keys(b).sort().join(","), "length"); + assert.sameValue(b.length, expectedLength); + assert.sameValue(logs, expectedLogs); + + // no @@species + a = [1, 2, 3, 4, 5]; + a.constructor = FakeArray; + b = a[funcName](...args); + assert.sameValue(b.constructor, Array); + + a = [1, 2, 3, 4, 5]; + a.constructor = { + [Symbol.species]: undefined + }; + b = a[funcName](...args); + assert.sameValue(b.constructor, Array); + + a = [1, 2, 3, 4, 5]; + a.constructor = { + [Symbol.species]: null + }; + b = a[funcName](...args); + assert.sameValue(b.constructor, Array); + + // invalid @@species + for (var species of [0, 1.1, true, false, "a", /a/, Symbol.iterator, [], {}]) { + a = [1, 2, 3, 4, 5]; + a.constructor = { + [Symbol.species]: species + }; + assertThrowsInstanceOf(() => a[funcName](...args), TypeError); + } + + // undefined constructor + a = [1, 2, 3, 4, 5]; + a.constructor = undefined; + b = a[funcName](...args); + assert.sameValue(b.constructor, Array); + + // invalid constructor + for (var ctor of [null, 0, 1.1, true, false, "a", Symbol.iterator]) { + a = [1, 2, 3, 4, 5]; + a.constructor = ctor; + assertThrowsInstanceOf(() => a[funcName](...args), TypeError); + } + + // not an array + a = new Proxy({ + 0: 1, 1: 2, 2: 3, 3: 4, 4: 5, + length: 5, + [funcName]: Array.prototype[funcName] + }, { + get(that, name) { + assert.sameValue(name !== "constructor", true); + return that[name]; + } + }); + b = a[funcName](...args); + assert.sameValue(b.constructor, Array); + + // @@species from different global + var g = createNewGlobal(); + g.eval("function FakeArray(n) { this.length = n; }"); + a = [1, 2, 3, 4, 5]; + a.constructor = { + [Symbol.species]: g.FakeArray + }; + b = a[funcName](...args); + assert.sameValue(b.constructor, g.FakeArray); + + a = [1, 2, 3, 4, 5]; + a.constructor = { + [Symbol.species]: g.Array + }; + b = a[funcName](...args); + assert.sameValue(b.constructor, g.Array); + + // constructor from different global + g.eval("function FakeArrayWithSpecies(n) { this.length = n; }"); + g.eval("FakeArrayWithSpecies[Symbol.species] = FakeArrayWithSpecies;"); + a = [1, 2, 3, 4, 5]; + a.constructor = g.FakeArrayWithSpecies; + b = a[funcName](...args); + assert.sameValue(b.constructor, g.FakeArrayWithSpecies); + + g.eval("var a = [1, 2, 3, 4, 5];"); + b = Array.prototype[funcName].apply(g.a, args); + assert.sameValue(b.constructor, Array); + + // running in different global + b = g.a[funcName](...args); + assert.sameValue(b.constructor, g.Array); + + // subclasses + // not-modified @@species + eval(` +class ${funcName}Class extends Array { +} +a = new ${funcName}Class(1, 2, 3, 4, 5); +b = a[funcName](...args); +assert.sameValue(b.constructor, ${funcName}Class); +`); + + // modified @@species + eval(` +class ${funcName}Class2 extends Array { + static get [Symbol.species]() { + return Date; + } +} +a = new ${funcName}Class2(1, 2, 3, 4, 5); +b = a[funcName](...args); +assert.sameValue(b.constructor, Date); +`); +} + +test("concat", [], 0, "get:concat,get:constructor,c-get:Symbol(Symbol.species),get:Symbol(Symbol.isConcatSpreadable),get:length,get:0,define:0:1:true:true:true,get:1,define:1:2:true:true:true,get:2,define:2:3:true:true:true,get:3,define:3:4:true:true:true,get:4,define:4:5:true:true:true,set:length:5,"); +test("filter", [x => x % 2], 0, "get:filter,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:1:true:true:true,get:1,get:2,define:1:3:true:true:true,get:3,get:4,define:2:5:true:true:true,"); +test("map", [x => x * 2], 5, "get:map,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:2:true:true:true,get:1,define:1:4:true:true:true,get:2,define:2:6:true:true:true,get:3,define:3:8:true:true:true,get:4,define:4:10:true:true:true,"); +test("slice", [], 5, "get:slice,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:1:true:true:true,get:1,define:1:2:true:true:true,get:2,define:2:3:true:true:true,get:3,define:3:4:true:true:true,get:4,define:4:5:true:true:true,set:length:5,"); +test("splice", [0, 5], 5, "get:splice,get:length,get:constructor,c-get:Symbol(Symbol.species),get:0,define:0:1:true:true:true,get:1,define:1:2:true:true:true,get:2,define:2:3:true:true:true,get:3,define:3:4:true:true:true,get:4,define:4:5:true:true:true,set:length:5,"); + diff --git a/test/staging/sm/Array/splice-return-array-elements-defined-not-set.js b/test/staging/sm/Array/splice-return-array-elements-defined-not-set.js new file mode 100644 index 0000000000..bc0ab47391 --- /dev/null +++ b/test/staging/sm/Array/splice-return-array-elements-defined-not-set.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 668024; +var summary = + 'Array.prototype.splice should define, not set, the elements of the array ' + + 'it returns'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +Object.defineProperty(Object.prototype, 2, + { + set: function(v) + { + throw new Error("setter on Object.prototype called!"); + }, + get: function() { return "fnord"; }, + enumerable: false, + configurable: true + }); + +var arr = [0, 1, 2, 3, 4, 5]; +var removed = arr.splice(0, 6); + +assert.sameValue(arr.length, 0); +assert.sameValue(removed.length, 6); +assert.sameValue(removed[0], 0); +assert.sameValue(removed[1], 1); +assert.sameValue(removed[2], 2); +assert.sameValue(removed[3], 3); +assert.sameValue(removed[4], 4); +assert.sameValue(removed[5], 5); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/splice-species-changes-length.js b/test/staging/sm/Array/splice-species-changes-length.js new file mode 100644 index 0000000000..377167690e --- /dev/null +++ b/test/staging/sm/Array/splice-species-changes-length.js @@ -0,0 +1,57 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Case 1: splice() removes an element from the array. +{ + let array = []; + array.push(0, 1, 2); + + array.constructor = { + [Symbol.species]: function(n) { + // Increase the initialized length of the array. + array.push(3, 4, 5); + + // Make the length property non-writable. + Object.defineProperty(array, "length", {writable: false}); + + return new Array(n); + } + } + + assertThrowsInstanceOf(() => Array.prototype.splice.call(array, 0, 1), TypeError); + + assert.sameValue(array.length, 6); + assert.compareArray(array, [1, 2, /* hole */, 3, 4, 5]); +} + +// Case 2: splice() adds an element to the array. +{ + let array = []; + array.push(0, 1, 2); + + array.constructor = { + [Symbol.species]: function(n) { + // Increase the initialized length of the array. + array.push(3, 4, 5); + + // Make the length property non-writable. + Object.defineProperty(array, "length", {writable: false}); + + return new Array(n); + } + } + + assertThrowsInstanceOf(() => Array.prototype.splice.call(array, 0, 0, 123), TypeError); + + assert.sameValue(array.length, 6); + assert.compareArray(array, [123, 0, 1, 2, 4, 5]); +} + diff --git a/test/staging/sm/Array/splice-suppresses-unvisited-indexes.js b/test/staging/sm/Array/splice-suppresses-unvisited-indexes.js new file mode 100644 index 0000000000..a0bbe99624 --- /dev/null +++ b/test/staging/sm/Array/splice-suppresses-unvisited-indexes.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 668024; +var summary = + 'Array.prototype.splice, when it deletes elements, should make sure any ' + + 'deleted but not visited elements are suppressed from subsequent enumeration'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = [0, 1, 2, 3, 4, 5, , 7]; + +var seen = []; +var sawOneBeforeThree = true; +for (var p in arr) +{ + if (p === "1") + { + // The order of enumeration of properties is unspecified, so technically, + // it would be kosher to enumerate "1" last, say, such that all properties + // in the array actually were enumerated, including an index which splice + // would delete. Don't flag that case as a failure. (SpiderMonkey doesn't + // do this, and neither do any of the other browser engines, but it is + // permissible behavior.) + if (seen.indexOf("3") >= 0) + { + sawOneBeforeThree = false; + break; + } + + arr.splice(2, 3); + } + + seen.push(p); +} + +if (sawOneBeforeThree) +{ + // ES5 12.6.4 states: + // + // If a property that has not yet been visited during enumeration is + // deleted, then it will not be visited. + // + // So if we haven't seen "3" by the time we see "1", the splice call above + // will delete "3", and therefore we must not see it. + assert.sameValue(seen.indexOf("3"), -1); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Array/to-length.js b/test/staging/sm/Array/to-length.js new file mode 100644 index 0000000000..9b158f32dd --- /dev/null +++ b/test/staging/sm/Array/to-length.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const max = Number.MAX_SAFE_INTEGER; + +assert.sameValue(Array.prototype.indexOf.call({length: Infinity, [max - 1]: 'test'}, 'test', max - 3), max - 1); +assert.sameValue(Array.prototype.lastIndexOf.call({length: Infinity, [max - 2]: 'test', [max - 1]: 'test2'}, 'test'), max - 2); + +// ToLength doesn't truncate Infinity to zero, so the callback should be invoked +assertThrowsValue(() => Array.prototype.every.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.some.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked"); +// Timeout before calling our callback +// assertThrowsValue(() => Array.prototype.sort.call({length: Infinity}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.forEach.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.filter.call({length: Infinity, [0]: undefined}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.reduce.call({length: Infinity, [0]: undefined, [1]: undefined}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.reduceRight.call({length: Infinity, [max - 1]: undefined, [max - 2]: undefined}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.find.call({length: Infinity}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.findIndex.call({length: Infinity}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.fill.call({length: Infinity, set "0"(v) { throw "invoked"; }}, () => { throw "invoked" }), "invoked"); +assertThrowsValue(() => Array.prototype.copyWithin.call({length: Infinity, get [max - 2]() { throw "invoked"; }}, max - 2, max - 2), "invoked"); + +assert.sameValue(Array.prototype.includes.call({length: Infinity, [max - 1]: "test"}, "test", max - 3), true); + +// Invoking the Array constructor with MAX_SAFE_INTEGER will throw, 0 won't +assertThrowsInstanceOf(() => Array.from({length: Infinity}), RangeError); + +// Make sure ArraySpeciesCreate is called with ToLength applied to the length property +var proxy = new Proxy([], { + get(target, property) { + if (property === "length") + return Infinity; + + assert.sameValue(property, "constructor"); + function fakeConstructor(length) { assert.sameValue(length, max); throw "invoked"; }; + fakeConstructor[Symbol.species] = fakeConstructor; + return fakeConstructor; + } +}) +assertThrowsValue(() => Array.prototype.map.call(proxy, () => { }), "invoked"); + diff --git a/test/staging/sm/Array/toLocaleString-01.js b/test/staging/sm/Array/toLocaleString-01.js new file mode 100644 index 0000000000..8e74e6a87d --- /dev/null +++ b/test/staging/sm/Array/toLocaleString-01.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 562446; +var summary = 'ES5: Array.prototype.toLocaleString'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var o; + +o = { length: 2, 0: 7, 1: { toLocaleString: function() { return "baz" } } }; +assert.sameValue(Array.prototype.toLocaleString.call(o), "7,baz"); + +o = {}; +assert.sameValue(Array.prototype.toLocaleString.call(o), ""); + +var log = ''; +arr = {length: {valueOf: function () { log += "L"; return 2; }}, + 0: "x", 1: "z"}; +assert.sameValue(Array.prototype.toLocaleString.call(arr), "x,z"); +assert.sameValue(log, "L"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Array/toLocaleString-nointl.js b/test/staging/sm/Array/toLocaleString-nointl.js new file mode 100644 index 0000000000..a9a993669b --- /dev/null +++ b/test/staging/sm/Array/toLocaleString-nointl.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof Intl !== "object") { + const localeSep = [,,].toLocaleString(); + + const obj = { + toLocaleString() { + assert.sameValue(arguments.length, 0); + return "pass"; + } + }; + + // Ensure no arguments are passed to the array elements. + // - Single element case. + assert.sameValue([obj].toLocaleString(), "pass"); + // - More than one element. + assert.sameValue([obj, obj].toLocaleString(), "pass" + localeSep + "pass"); + + // Ensure no arguments are passed to the array elements even if supplied. + const locales = {}, options = {}; + // - Single element case. + assert.sameValue([obj].toLocaleString(locales, options), "pass"); + // - More than one element. + assert.sameValue([obj, obj].toLocaleString(locales, options), "pass" + localeSep + "pass"); +} + diff --git a/test/staging/sm/Array/toLocaleString.js b/test/staging/sm/Array/toLocaleString.js new file mode 100644 index 0000000000..b5d2ed5bb8 --- /dev/null +++ b/test/staging/sm/Array/toLocaleString.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +Object.defineProperty(String.prototype, "toLocaleString", { + get() { + assert.sameValue(typeof this, "string"); + + return function() { return typeof this; }; + } +}) + +assert.sameValue(["test"].toLocaleString(), "string"); + diff --git a/test/staging/sm/Array/toSpliced-dense.js b/test/staging/sm/Array/toSpliced-dense.js new file mode 100644 index 0000000000..9d359ca3c1 --- /dev/null +++ b/test/staging/sm/Array/toSpliced-dense.js @@ -0,0 +1,135 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +const startIndices = [ + -10, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 10, +]; + +const deleteCounts = [ + 0, 1, 2, 3, 4, 5, 10, +]; + +const insertCounts = [ + 0, 1, 2, 3, 4, 5, 10, +]; + +const itemsList = insertCounts.map(count => { + return new Array(count).fill(0); +}); + +const arrays = [ + // Dense no holes. + [], + [1], + [1,2], + [1,2,3], + [1,2,3,4], + [1,2,3,4,5,6,7,8], + + // Dense trailing holes. + [,], + [1,,], + [1,2,,], + [1,2,3,,], + [1,2,3,4,,], + [1,2,3,4,5,6,7,8,,], + + // Dense leading holes. + [,], + [,1], + [,1,2], + [,1,2,3], + [,1,2,3,4], + [,1,2,3,4,5,6,7,8], + + // Dense with holes. + [1,,3], + [1,2,,4], + [1,,3,,5,6,,8], +]; + +const objects = arrays.map(array => { + let obj = { + length: array.length, + }; + for (let i = 0; i < array.length; ++i) { + if (i in array) { + obj[i] = array[i]; + } + } + return obj; +}); + +const objectsWithLargerDenseInitializedLength = arrays.map(array => { + let obj = { + length: array.length, + }; + for (let i = 0; i < array.length; ++i) { + if (i in array) { + obj[i] = array[i]; + } + } + + // Add some extra dense elements after |length|. + for (let i = 0; i < 5; ++i) { + obj[array.length + i] = "extra"; + } + + return obj; +}); + +const thisValues = [ + ...arrays, + ...objects, + ...objectsWithLargerDenseInitializedLength, +]; + +for (let thisValue of thisValues) { + for (let startIndex of startIndices) { + for (let deleteCount of deleteCounts) { + for (let items of itemsList) { + let res = Array.prototype.toSpliced.call(thisValue, startIndex, deleteCount, ...items); + + // Array.prototype.toSpliced(), steps 3-6. + let actualStart; + if (startIndex < 0) { + actualStart = Math.max(thisValue.length + startIndex, 0); + } else { + actualStart = Math.min(startIndex, thisValue.length); + } + + // Array.prototype.toSpliced(), step 10. + let actualDeleteCount = Math.min(Math.max(0, deleteCount), thisValue.length - actualStart); + + let newLength = thisValue.length + items.length - actualDeleteCount; + assert.sameValue(res.length, newLength); + + for (let i = 0; i < actualStart; ++i) { + assert.sameValue(Object.hasOwn(res, i), true); + assert.sameValue(res[i], thisValue[i]); + } + + for (let i = 0; i < items.length; ++i) { + assert.sameValue(Object.hasOwn(res, actualStart + i), true); + assert.sameValue(res[actualStart + i], items[i]); + } + + for (let i = 0; i < newLength - actualStart - items.length; ++i) { + assert.sameValue(Object.hasOwn(res, actualStart + items.length + i), true); + assert.sameValue(res[actualStart + items.length + i], + thisValue[actualStart + actualDeleteCount + i]); + } + } + } + } +} + diff --git a/test/staging/sm/Array/toSpliced.js b/test/staging/sm/Array/toSpliced.js new file mode 100644 index 0000000000..9e063c40d6 --- /dev/null +++ b/test/staging/sm/Array/toSpliced.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +Object.defineProperty(Array.prototype, 0, { + set() { + throw "bad 0"; + }, +}); + +Object.defineProperty(Array.prototype, 1, { + set() { + throw "bad 1"; + }, +}); + +assert.deepEqual([].toSpliced(0, 0, 1), [1]); + +assert.deepEqual([0].toSpliced(0, 0, 0), [0, 0]); +assert.deepEqual([0].toSpliced(0, 0, 1), [1, 0]); +assert.deepEqual([0].toSpliced(0, 1, 0), [0]); +assert.deepEqual([0].toSpliced(0, 1, 1), [1]); +assert.deepEqual([0].toSpliced(1, 0, 0), [0, 0]); +assert.deepEqual([0].toSpliced(1, 0, 1), [0, 1]); +assert.deepEqual([0].toSpliced(1, 1, 0), [0, 0]); +assert.deepEqual([0].toSpliced(1, 1, 1), [0, 1]); + diff --git a/test/staging/sm/Array/toString-01.js b/test/staging/sm/Array/toString-01.js new file mode 100644 index 0000000000..32c159f592 --- /dev/null +++ b/test/staging/sm/Array/toString-01.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 562446; +var summary = 'ES5: Array.prototype.toString'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var o; + +o = { join: function() { assert.sameValue(arguments.length, 0); return "ohai"; } }; +assert.sameValue(Array.prototype.toString.call(o), "ohai"); + +o = {}; +assert.sameValue(Array.prototype.toString.call(o), "[object Object]"); + +Array.prototype.join = function() { return "kthxbai"; }; +assert.sameValue(Array.prototype.toString.call([]), "kthxbai"); + +o = { join: 17 }; +assert.sameValue(Array.prototype.toString.call(o), "[object Object]"); + +o = { get join() { throw 42; } }; +try +{ + var str = Array.prototype.toString.call(o); + assert.sameValue(true, false, + "expected an exception calling [].toString on an object with a " + + "join getter that throws, got " + str + " instead"); +} +catch (e) +{ + assert.sameValue(e, 42, + "expected thrown e === 42 when calling [].toString on an object " + + "with a join getter that throws, got " + e); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Array/unscopables.js b/test/staging/sm/Array/unscopables.js new file mode 100644 index 0000000000..227920e436 --- /dev/null +++ b/test/staging/sm/Array/unscopables.js @@ -0,0 +1,71 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let Array_unscopables = Array.prototype[Symbol.unscopables]; + +let desc = Reflect.getOwnPropertyDescriptor(Array.prototype, Symbol.unscopables); +assert.deepEqual(desc, { + value: Array_unscopables, + writable: false, + enumerable: false, + configurable: true +}); + +assert.sameValue(Reflect.getPrototypeOf(Array_unscopables), null); + +let desc2 = Object.getOwnPropertyDescriptor(Array_unscopables, "values"); +assert.deepEqual(desc2, { + value: true, + writable: true, + enumerable: true, + configurable: true +}); + +let keys = Reflect.ownKeys(Array_unscopables); + +// FIXME: Once bug 1826643 is fixed, change this test so that all +// the keys are in alphabetical order +let expectedKeys = ["at", + "copyWithin", + "entries", + "fill", + "find", + "findIndex", + "findLast", + "findLastIndex", + "flat", + "flatMap", + "includes", + "keys", + "toReversed", + "toSorted", + "toSpliced", + "values"]; + +assert.deepEqual(keys, expectedKeys); + +for (let key of keys) + assert.sameValue(Array_unscopables[key], true); + +// Test that it actually works +assertThrowsInstanceOf(() => { + with ([]) { + return entries; + } +}, ReferenceError); + +{ + let fill = 33; + with (Array.prototype) { + assert.sameValue(fill, 33); + } +} + diff --git a/test/staging/sm/Array/unshift-01.js b/test/staging/sm/Array/unshift-01.js new file mode 100644 index 0000000000..cb92393605 --- /dev/null +++ b/test/staging/sm/Array/unshift-01.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 614070; +var summary = 'Array.prototype.unshift without args'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// ES6 ToLength clamps length values to 2^53 - 1. +var MAX_LENGTH = 2**53 - 1; + +var a = {}; +a.length = MAX_LENGTH + 1; +assert.sameValue([].unshift.call(a), MAX_LENGTH); +assert.sameValue(a.length, MAX_LENGTH); + +function testGetSet(len, expected) { + var newlen; + var a = { get length() { return len; }, set length(v) { newlen = v; } }; + var res = [].unshift.call(a); + assert.sameValue(res, expected); + assert.sameValue(newlen, expected); +} + +testGetSet(0, 0); +testGetSet(10, 10); +testGetSet("1", 1); +testGetSet(null, 0); +testGetSet(MAX_LENGTH + 2, MAX_LENGTH); +testGetSet(-5, 0); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Array/unshift-with-enumeration.js b/test/staging/sm/Array/unshift-with-enumeration.js new file mode 100644 index 0000000000..715d360f69 --- /dev/null +++ b/test/staging/sm/Array/unshift-with-enumeration.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(array, method, args) { + var called = false; + var keys = []; + for (var key in array) { + keys.push(key); + if (!called) { + called = true; + Reflect.apply(method, array, args); + } + } + return keys; +} + +assert.compareArray(f([1, /* hole */, 3], Array.prototype.unshift, [0]), ["0"]); +assert.compareArray(f([1, /* hole */, 3], Array.prototype.splice, [0, 0, 0]), ["0"]); + diff --git a/test/staging/sm/Array/values.js b/test/staging/sm/Array/values.js new file mode 100644 index 0000000000..8a6550b128 --- /dev/null +++ b/test/staging/sm/Array/values.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (Array.prototype.values) { + assert.sameValue(Array.prototype.values, Array.prototype[Symbol.iterator]); + assert.sameValue(Array.prototype.values.name, "values"); + assert.sameValue(Array.prototype.values.length, 0); + + function valuesUnscopeable() { + var values = "foo"; + with ([1, 2, 3]) { + assert.sameValue(indexOf, Array.prototype.indexOf); + assert.sameValue(values, "foo"); + } + } + valuesUnscopeable(); +} + diff --git a/test/staging/sm/Array/with-dense.js b/test/staging/sm/Array/with-dense.js new file mode 100644 index 0000000000..58652b4d77 --- /dev/null +++ b/test/staging/sm/Array/with-dense.js @@ -0,0 +1,111 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +const indices = [ + -10, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 10, +]; + +const arrays = [ + // Dense no holes. + [], + [1], + [1,2], + [1,2,3], + [1,2,3,4], + [1,2,3,4,5,6,7,8], + + // Dense trailing holes. + [,], + [1,,], + [1,2,,], + [1,2,3,,], + [1,2,3,4,,], + [1,2,3,4,5,6,7,8,,], + + // Dense leading holes. + [,], + [,1], + [,1,2], + [,1,2,3], + [,1,2,3,4], + [,1,2,3,4,5,6,7,8], + + // Dense with holes. + [1,,3], + [1,2,,4], + [1,,3,,5,6,,8], +]; + +const objects = arrays.map(array => { + let obj = { + length: array.length, + }; + for (let i = 0; i < array.length; ++i) { + if (i in array) { + obj[i] = array[i]; + } + } + return obj; +}); + +const objectsWithLargerDenseInitializedLength = arrays.map(array => { + let obj = { + length: array.length, + }; + for (let i = 0; i < array.length; ++i) { + if (i in array) { + obj[i] = array[i]; + } + } + + // Add some extra dense elements after |length|. + for (let i = 0; i < 5; ++i) { + obj[array.length + i] = "extra"; + } + + return obj; +}); + +const thisValues = [ + ...arrays, + ...objects, + ...objectsWithLargerDenseInitializedLength, +]; + +const replacement = {}; + +for (let thisValue of thisValues) { + for (let index of indices) { + let actualIndex = index; + if (actualIndex < 0) { + actualIndex += thisValue.length; + } + + if (actualIndex < 0 || actualIndex >= thisValue.length) { + continue; + } + + let res = Array.prototype.with.call(thisValue, index, replacement); + assert.sameValue(res.length, thisValue.length); + + for (let i = 0; i < thisValue.length; ++i) { + assert.sameValue(Object.hasOwn(res, i), true); + + if (i === actualIndex) { + assert.sameValue(res[i], replacement); + } else { + assert.sameValue(res[i], thisValue[i]); + } + } + } +} + diff --git a/test/staging/sm/Array/with.js b/test/staging/sm/Array/with.js new file mode 100644 index 0000000000..097e78488e --- /dev/null +++ b/test/staging/sm/Array/with.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +Object.defineProperty(Array.prototype, 0, { + set() { + throw "bad"; + }, +}); + +// Single element case. +assert.deepEqual([0].with(0, 1), [1]); + +// More than one element. +assert.deepEqual([1, 2].with(0, 3), [3, 2]); +assert.deepEqual([1, 2].with(1, 3), [1, 3]); + diff --git a/test/staging/sm/ArrayBuffer/CloneArrayBuffer.js b/test/staging/sm/ArrayBuffer/CloneArrayBuffer.js new file mode 100644 index 0000000000..8af7756c21 --- /dev/null +++ b/test/staging/sm/ArrayBuffer/CloneArrayBuffer.js @@ -0,0 +1,44 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1264941; +var summary = 'CloneArrayBuffer should be called with byteLength of source typedArray'; + +print(BUGNUMBER + ": " + summary); + +function test(ctor, byteLength) { + var abuf = new ctor(byteLength); + assert.sameValue(abuf.byteLength, byteLength); + + for (var byteOffset of [0, 16]) { + for (var elementLength = 0; + elementLength < (byteLength - byteOffset) / Float64Array.BYTES_PER_ELEMENT; + elementLength++) { + var a1 = new Float64Array(abuf, byteOffset, elementLength); + assert.sameValue(a1.buffer.byteLength, byteLength); + assert.sameValue(a1.byteLength, elementLength * Float64Array.BYTES_PER_ELEMENT); + assert.sameValue(a1.byteOffset, byteOffset); + + var a2 = new Float64Array(a1); + assert.sameValue(a2.buffer.byteLength, a1.byteLength); + assert.sameValue(a2.byteLength, a1.byteLength); + assert.sameValue(a2.byteOffset, 0); + } + } +} + +test(ArrayBuffer, 16); +test(ArrayBuffer, 128); + +class MyArrayBuffer extends ArrayBuffer {} +test(MyArrayBuffer, 16); +test(MyArrayBuffer, 128); + diff --git a/test/staging/sm/ArrayBuffer/bug1777413.js b/test/staging/sm/ArrayBuffer/bug1777413.js new file mode 100644 index 0000000000..8549858c49 --- /dev/null +++ b/test/staging/sm/ArrayBuffer/bug1777413.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + needs shell functions +description: | + pending +esid: pending +---*/ + +var b = createExternalArrayBuffer(0); +assert.sameValue(b.byteLength, 0); + diff --git a/test/staging/sm/ArrayBuffer/constructorNotCallable.js b/test/staging/sm/ArrayBuffer/constructorNotCallable.js new file mode 100644 index 0000000000..97bf738b41 --- /dev/null +++ b/test/staging/sm/ArrayBuffer/constructorNotCallable.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => ArrayBuffer(), TypeError); +assertThrowsInstanceOf(() => ArrayBuffer(1), TypeError); +assertThrowsInstanceOf(() => ArrayBuffer.call(null), TypeError); +assertThrowsInstanceOf(() => ArrayBuffer.apply(null, []), TypeError); +assertThrowsInstanceOf(() => Reflect.apply(ArrayBuffer, null, []), TypeError); + diff --git a/test/staging/sm/ArrayBuffer/getter-name.js b/test/staging/sm/ArrayBuffer/getter-name.js new file mode 100644 index 0000000000..4a24737049 --- /dev/null +++ b/test/staging/sm/ArrayBuffer/getter-name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180290; +var summary = 'ArrayBuffer getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Object.getOwnPropertyDescriptor(ArrayBuffer, Symbol.species).get.name, "get [Symbol.species]"); +assert.sameValue(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, "byteLength").get.name, "get byteLength"); + diff --git a/test/staging/sm/ArrayBuffer/slice-species.js b/test/staging/sm/ArrayBuffer/slice-species.js new file mode 100644 index 0000000000..060389c005 --- /dev/null +++ b/test/staging/sm/ArrayBuffer/slice-species.js @@ -0,0 +1,189 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const tests = [ + [Int8Array, [9, 10, 11, 12, 13, 14, 15, 16]], + [Uint8Array, [9, 10, 11, 12, 13, 14, 15, 16]], + [Uint8ClampedArray, [9, 10, 11, 12, 13, 14, 15, 16]], + [Int16Array, [5, 6, 7, 8]], + [Uint16Array, [5, 6, 7, 8]], + [Int32Array, [3, 4]], + [Uint32Array, [3, 4]], + [Float32Array, [3, 4]], + [Float64Array, [2]], +]; + +let logs = []; +for (let [ctor, answer] of tests) { + let arr = new ctor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); + + let proxyProto = new Proxy({}, { + get(that, name) { + throw new Error("unexpected prop access"); + } + }); + + class MyArrayBuffer extends ArrayBuffer {} + + arr.buffer.constructor = new Proxy({}, { + get(that, name) { + if (name == Symbol.species) { + logs.push("get @@species"); + let C = new Proxy(function(...args) { + logs.push("call ctor"); + return new MyArrayBuffer(...args); + }, { + get(that, name) { + logs.push("get ctor." + String(name)); + if (name == "prototype") { + return proxyProto; + } + throw new Error("unexpected prop access"); + } + }); + return C; + } + throw new Error("unexpected prop access"); + } + }); + + logs.length = 0; + let buf = arr.buffer.slice(8, 16); + assert.sameValue(buf.constructor, MyArrayBuffer); + assert.deepEqual(logs, ["get @@species", "get ctor.prototype", "call ctor"]); + assert.deepEqual([...new ctor(buf)], answer); + + + // modified @@species + let a = arr.buffer; + a.constructor = { + [Symbol.species]: MyArrayBuffer + }; + let b = a.slice(8, 16); + assert.sameValue(b.constructor, MyArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + class MyArrayBufferWithSpecies extends ArrayBuffer { + get [Symbol.species]() { + return MyArrayBufferWithSpecies; + } + } + a = arr.buffer; + a.constructor = MyArrayBufferWithSpecies; + b = a.slice(8, 16); + assert.sameValue(b.constructor, MyArrayBufferWithSpecies); + assert.deepEqual([...new ctor(b)], answer); + + // no @@species + a = arr.buffer; + a.constructor = { + [Symbol.species]: undefined + }; + b = a.slice(8, 16); + assert.sameValue(b.constructor, ArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + a = arr.buffer; + a.constructor = { + [Symbol.species]: null + }; + b = a.slice(8, 16); + assert.sameValue(b.constructor, ArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + // invalid @@species + for (let species of [0, 1.1, true, false, "a", /a/, Symbol.iterator, [], {}]) { + a = arr.buffer; + a.constructor = { + [Symbol.species]: species + }; + assertThrowsInstanceOf(() => a.slice(8, 16), TypeError); + } + + // undefined constructor + a = arr.buffer; + a.constructor = undefined; + b = a.slice(8, 16); + assert.sameValue(b.constructor, ArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + // invalid constructor + for (let ctor of [null, 0, 1.1, true, false, "a", Symbol.iterator]) { + a = arr.buffer; + a.constructor = ctor; + assertThrowsInstanceOf(() => a.slice(8, 16), TypeError); + } + + // @@species from different global + let g = createNewGlobal(); + g.eval("var MyArrayBuffer = class MyArrayBuffer extends ArrayBuffer {};"); + a = arr.buffer; + a.constructor = { + [Symbol.species]: g.MyArrayBuffer + }; + b = a.slice(8, 16); + assert.sameValue(b.constructor, g.MyArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + a = arr.buffer; + a.constructor = { + [Symbol.species]: g.ArrayBuffer + }; + b = a.slice(8, 16); + assert.sameValue(b.constructor, g.ArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + // constructor from different global + g.eval(` +var MyArrayBufferWithSpecies = class MyArrayBufferWithSpecies extends ArrayBuffer { + get [Symbol.species]() { + return MyArrayBufferWithSpecies; + } +}; +`); + a = arr.buffer; + a.constructor = g.MyArrayBufferWithSpecies; + b = a.slice(8, 16); + assert.sameValue(b.constructor, g.MyArrayBufferWithSpecies); + assert.deepEqual([...new ctor(b)], answer); + + g.eval(` +var arr = new ${ctor.name}([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); +var a = arr.buffer; +`); + b = ArrayBuffer.prototype.slice.call(g.a, 8, 16); + assert.sameValue(b.constructor, g.ArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + // running in different global + b = g.a.slice(8, 16); + assert.sameValue(b.constructor, g.ArrayBuffer); + assert.deepEqual([...new ctor(b)], answer); + + // subclasses + // not-modified @@species + a = new MyArrayBuffer(16); + b = a.slice(8, 16); + assert.sameValue(b.constructor, MyArrayBuffer); + + // modified @@species + class MyArrayBuffer2 extends ArrayBuffer { + } + class MyArrayBuffer3 extends ArrayBuffer { + static get [Symbol.species]() { + return MyArrayBuffer2; + } + } + a = new MyArrayBuffer3(16); + b = a.slice(8, 16); + assert.sameValue(b.constructor, MyArrayBuffer2); +} + diff --git a/test/staging/sm/AsyncGenerators/async-generator-declaration-in-modules.js b/test/staging/sm/AsyncGenerators/async-generator-declaration-in-modules.js new file mode 100644 index 0000000000..d390d956a5 --- /dev/null +++ b/test/staging/sm/AsyncGenerators/async-generator-declaration-in-modules.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +async function* f() { + return "success"; +} + +var AsyncGenerator = (async function*(){}).constructor; + +assert.sameValue(f instanceof AsyncGenerator, true); + +f().next().then(v => { + assert.sameValue("success", v.value); +}); diff --git a/test/staging/sm/AsyncGenerators/create-function-parse-before-getprototype.js b/test/staging/sm/AsyncGenerators/create-function-parse-before-getprototype.js new file mode 100644 index 0000000000..e0cbe5ddcc --- /dev/null +++ b/test/staging/sm/AsyncGenerators/create-function-parse-before-getprototype.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var getProtoCalled = false; + +var newTarget = Object.defineProperty(function(){}.bind(), "prototype", { + get() { + getProtoCalled = true; + return null; + } +}); + +var AsyncGenerator = async function*(){}.constructor; + +assertThrowsInstanceOf(() => { + Reflect.construct(AsyncGenerator, ["@error"], newTarget); +}, SyntaxError); + +assert.sameValue(getProtoCalled, false); + diff --git a/test/staging/sm/AsyncGenerators/for-await-bad-syntax.js b/test/staging/sm/AsyncGenerators/for-await-bad-syntax.js new file mode 100644 index 0000000000..42c3626ac0 --- /dev/null +++ b/test/staging/sm/AsyncGenerators/for-await-bad-syntax.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var AsyncGenerator = async function*(){}.constructor; + +function assertSyntaxError(code) { + var functionCode = `async function* f() { ${code} }`; + assertThrowsInstanceOf(() => AsyncGenerator(code), SyntaxError, "AsyncGenerator:" + code); + assertThrowsInstanceOf(() => eval(functionCode), SyntaxError, "eval:" + functionCode); + var ieval = eval; + assertThrowsInstanceOf(() => ieval(functionCode), SyntaxError, "indirect eval:" + functionCode); +} + +assertSyntaxError(`for await (;;) ;`); + +for (var decl of ["", "var", "let", "const"]) { + for (var head of ["a", "a = 0", "a, b", "[a]", "[a] = 0", "{a}", "{a} = 0"]) { + // Ends with C-style for loop syntax. + assertSyntaxError(`for await (${decl} ${head} ;;) ;`); + + // Ends with for-in loop syntax. + assertSyntaxError(`for await (${decl} ${head} in null) ;`); + } +} + diff --git a/test/staging/sm/AsyncGenerators/for-await-of-error.js b/test/staging/sm/AsyncGenerators/for-await-of-error.js new file mode 100644 index 0000000000..a965d4d49d --- /dev/null +++ b/test/staging/sm/AsyncGenerators/for-await-of-error.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1391519; +var summary = "for-await-of outside of async function should provide better error"; + +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOfWithMessageContains( + () => eval("for await (let x of []) {}"), + SyntaxError, + "for await (... of ...) is only valid in" +); + +// Extra `await` shouldn't throw that error. +assertThrowsInstanceOfWithMessageContains( + () => eval("async function f() { for await await (let x of []) {} }"), + SyntaxError, + "missing ( after for" +); + diff --git a/test/staging/sm/AsyncIterator/asynciterator.js b/test/staging/sm/AsyncIterator/asynciterator.js new file mode 100644 index 0000000000..af30060555 --- /dev/null +++ b/test/staging/sm/AsyncIterator/asynciterator.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Property descriptor of AsyncIterator. + + AsyncIterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(this, 'AsyncIterator'); +assert.sameValue(propDesc.value, AsyncIterator); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/constructor-subclassable.js b/test/staging/sm/AsyncIterator/constructor-subclassable.js new file mode 100644 index 0000000000..76063c91e2 --- /dev/null +++ b/test/staging/sm/AsyncIterator/constructor-subclassable.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + AsyncIterator constructor can be subclassed. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +class TestIterator extends AsyncIterator { +} + +assert.sameValue(new TestIterator() instanceof AsyncIterator, true); + diff --git a/test/staging/sm/AsyncIterator/constructor-throw-when-called-directly.js b/test/staging/sm/AsyncIterator/constructor-throw-when-called-directly.js new file mode 100644 index 0000000000..1c2c198cc0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/constructor-throw-when-called-directly.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + AsyncIterator constructor throws when called directly. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => new AsyncIterator(), TypeError); + diff --git a/test/staging/sm/AsyncIterator/constructor-throw-without-new.js b/test/staging/sm/AsyncIterator/constructor-throw-without-new.js new file mode 100644 index 0000000000..fe7d86c6bd --- /dev/null +++ b/test/staging/sm/AsyncIterator/constructor-throw-without-new.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + AsyncIterator constructor throws when called without new. + + AsyncIterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => AsyncIterator(), TypeError); + diff --git a/test/staging/sm/AsyncIterator/constructor.js b/test/staging/sm/AsyncIterator/constructor.js new file mode 100644 index 0000000000..a621016147 --- /dev/null +++ b/test/staging/sm/AsyncIterator/constructor.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The AsyncIterator constructor is a built-in function. + + AsyncIterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +assert.sameValue(typeof AsyncIterator, 'function'); + diff --git a/test/staging/sm/AsyncIterator/length.js b/test/staging/sm/AsyncIterator/length.js new file mode 100644 index 0000000000..29148b98a6 --- /dev/null +++ b/test/staging/sm/AsyncIterator/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The "length" property of AsyncIterator + + AsyncIterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator, 'length'); +assert.sameValue(propDesc.value, 0); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/name.js b/test/staging/sm/AsyncIterator/name.js new file mode 100644 index 0000000000..140ab86e6b --- /dev/null +++ b/test/staging/sm/AsyncIterator/name.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The "name" property of AsyncIterator + + AsyncIterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator, 'name'); +assert.sameValue(propDesc.value, 'AsyncIterator'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/proto.js b/test/staging/sm/AsyncIterator/proto.js new file mode 100644 index 0000000000..1b0c6c7c12 --- /dev/null +++ b/test/staging/sm/AsyncIterator/proto.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The prototype of the AsyncIterator constructor is the intrinsic object %FunctionPrototype%. + + AsyncIterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +assert.sameValue(Object.getPrototypeOf(AsyncIterator), Function.prototype); + +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator, 'prototype'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, false); + diff --git a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/asIndexedPairs.js b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/asIndexedPairs.js new file mode 100644 index 0000000000..40f97095cc --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/asIndexedPairs.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +let iter = gen().asIndexedPairs(); + +for (const v of [[0, 1], [1, 2], [2, 3]]) { + iter.next().then( + result => { + assert.sameValue(result.done, false); + assert.sameValue(result.value[0], v[0]); + assert.sameValue(result.value[1], v[1]); + } + ); +} + +iter.next().then(({done}) => assert.sameValue(done, true)); + diff --git a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/length.js b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/length.js new file mode 100644 index 0000000000..33919d3bdd --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/length.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.asIndexedPairs length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(AsyncIterator.prototype.asIndexedPairs.length, 0); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.asIndexedPairs, 'length'); +assert.sameValue(propertyDescriptor.value, 0); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/name.js b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/name.js new file mode 100644 index 0000000000..d4820c4268 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/asIndexedPairs/name.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.asIndexedPairs.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +assert.sameValue(AsyncIterator.prototype.asIndexedPairs.name, 'asIndexedPairs'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.asIndexedPairs, 'name'); +assert.sameValue(propertyDescriptor.value, 'asIndexedPairs'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/async-iterator-helpers-from-other-global.js b/test/staging/sm/AsyncIterator/prototype/async-iterator-helpers-from-other-global.js new file mode 100644 index 0000000000..f0d99cdecb --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/async-iterator-helpers-from-other-global.js @@ -0,0 +1,75 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} + +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 'value'}; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +function checkIterResult({done, value}, expectedDone, expectedValue) { + assert.sameValue(done, expectedDone); + assert.sameValue(Array.isArray(value) ? value[1] : value, expectedValue); +} + +const otherGlobal = createNewGlobal({newCompartment: true}); + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["asIndexedPairs", undefined], + ["flatMap", async function*(x) { yield x; }], +]; + +const {next: otherNext, return: otherReturn, throw: otherThrow} = + Object.getPrototypeOf(otherGlobal.eval("(async function*() {})().map(x => x)")); + +(async () => { + for (const [method, arg] of methods) { + const iterator = new TestIterator(); + const helper = iterator[method](arg); + checkIterResult(await otherNext.call(helper), false, 'value'); + } + + for (const [method, arg] of methods) { + const iterator = new TestIterator(); + const helper = iterator[method](arg); + assert.sameValue(iterator.closed, false); + checkIterResult(await otherReturn.call(helper), true, undefined); + assert.sameValue(iterator.closed, true); + } + + for (const [method, arg] of methods) { + const iterator = new TestIterator(); + const helper = iterator[method](arg); + try { + await otherThrow.call(helper, new TestError()); + assert.sameValue(true, false, 'Expected exception'); + } catch (exc) { + assert.sameValue(exc instanceof TestError, true); + } + checkIterResult(await helper.next(), true, undefined); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/clobber-symbol.js b/test/staging/sm/AsyncIterator/prototype/clobber-symbol.js new file mode 100644 index 0000000000..06565cfa87 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/clobber-symbol.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype% methods work even if the global Symbol has been clobbered. +info: | + Iterator Helpers proposal 2.1.6 +features: +- Symbol.asyncIterator +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// +// + +Symbol = undefined; +assertThrowsInstanceOf(() => Symbol.asyncIterator, TypeError); + +async function* gen(value) { + yield value; +} + +const lazyMethods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +const strictMethods = [ + iter => iter.reduce((_, x) => x, undefined), + iter => iter.toArray(), + iter => iter.forEach(() => undefined), + iter => iter.some(x => true), + iter => iter.every(x => true), + iter => iter.find(x => true), +]; + +(async () => { + for (const method of lazyMethods) { + const {value} = await method(gen('value')).next(); + assert.sameValue(Array.isArray(value) ? value[1] : value, 'value'); + } + + for (const method of strictMethods) { + await method(gen('value')); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/drop/drop-more-than-available.js b/test/staging/sm/AsyncIterator/prototype/drop/drop-more-than-available.js new file mode 100644 index 0000000000..3b64a39ea0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/drop/drop-more-than-available.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.drop returns if the iterator is done. +info: | + Iterator Helpers proposal 2.1.6.5 1. Repeat, while remaining > 0, + ... + b. Let next be ? Await(? IteratorStep(iterated)). + c. If ? IteratorComplete(next) is true, return undefined. +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + counter = 0; + async next() { + return {done: ++this.counter >= 2, value: undefined}; + } +} + +(async () => { + let iter = [1, 2].values().drop(3); + let result = await iter.next(); + assert.sameValue(result.value, undefined); + assert.sameValue(result.done, true); + + iter = new TestIterator(); + let dropped = iter.drop(10); + result = await dropped.next(); + assert.sameValue(result.value, undefined); + assert.sameValue(result.done, true); + assert.sameValue(iter.counter, 2); +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/drop/drop.js b/test/staging/sm/AsyncIterator/prototype/drop/drop.js new file mode 100644 index 0000000000..224e5eb3ee --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/drop/drop.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +let iter = gen().drop(1); + +for (const v of [2, 3]) { + iter.next().then( + ({done, value}) => { + assert.sameValue(done, false); + assert.sameValue(value, v); + } + ); +} + +iter.next().then(({done}) => assert.sameValue(done, true)); + diff --git a/test/staging/sm/AsyncIterator/prototype/drop/length.js b/test/staging/sm/AsyncIterator/prototype/drop/length.js new file mode 100644 index 0000000000..dba4cc5306 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/drop/length.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.drop length value and descriptor. +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(AsyncIterator.prototype.drop.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.drop, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/drop/name.js b/test/staging/sm/AsyncIterator/prototype/drop/name.js new file mode 100644 index 0000000000..9158234e92 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/drop/name.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.drop.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +assert.sameValue(AsyncIterator.prototype.drop.name, 'drop'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.drop, 'name'); +assert.sameValue(propertyDescriptor.value, 'drop'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/async-writes.js b/test/staging/sm/AsyncIterator/prototype/every/async-writes.js new file mode 100644 index 0000000000..d95d33e8b3 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/async-writes.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let x = {a: () => true}; + +async function* gen() { + yield x.a(); + yield x.a(); +} + +gen().every(() => true).then( + () => assert.sameValue(true, false, 'expected error'), + err => assert.sameValue(err instanceof Error, true), +); + +x.a = () => { + throw Error(); +}; + diff --git a/test/staging/sm/AsyncIterator/prototype/every/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/every/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..e5860a831c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/check-fn-after-getting-iterator.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({done: true}); + } +} + +async function* gen() { + yield 1; +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +iter.every(1).then(() => assert.sameValue(true, false, 'expected error'), err => assert.sameValue(err instanceof TypeError, true)); + +assert.sameValue( + log.join('\n'), + `get: every +get: next` +); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/every/coerce-result-to-boolean.js new file mode 100644 index 0000000000..bf4261991a --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/coerce-result-to-boolean.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- async-iteration +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +async function* gen(value) { + yield value; +} +const fn = x => x; +function check(value, expected) { + gen(value).every(fn).then(result => assert.sameValue(result, expected)); +} + +check(true, true); +check(1, true); +check([], true); +check({}, true); +check('test', true); + +check(false, false); +check(0, false); +check('', false); +check(null, false); +check(undefined, false); +check(NaN, false); +check(-0, false); +check(0n, false); +check(createIsHTMLDDA(), false); +check(Promise.resolve(false), false); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/descriptor.js b/test/staging/sm/AsyncIterator/prototype/every/descriptor.js new file mode 100644 index 0000000000..1befd8b84e --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/descriptor.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'every'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/every/error-from-correct-realm.js new file mode 100644 index 0000000000..533bb81ce3 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/error-from-correct-realm.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +async function *gen() {} + +gen().every().then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); +}); + +otherGlobal.AsyncIterator.prototype.every.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue( + err instanceof otherGlobal.TypeError, + true, + 'TypeError comes from the realm of the method.', + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/every/fn-not-callable-throws.js new file mode 100644 index 0000000000..b345e4a825 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/fn-not-callable-throws.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function *gen() { + yield 1; +} + +function check(fn) { + gen().every(fn).then(() => { + throw new Error('every should have thrown'); + }, + (err) => { + assert.sameValue(err instanceof TypeError, true); + }); +} + +check(); +check(undefined); +check(null); +check(0); +check(false); +check(''); +check(Symbol('')); +check({}); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/every/fn-throws-close-iterator.js new file mode 100644 index 0000000000..0ef5a24281 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/fn-throws-close-iterator.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ done: this.closed }); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.every(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, true); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/every/interleaving-calls.js new file mode 100644 index 0000000000..b65b39bc85 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/interleaving-calls.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const log = []; +async function* gen(n) { + log.push(`${n}`); + yield 1; + log.push(`${n}`); + yield 2; +} + +Promise.all([gen(1).every(() => true), gen(2).every(() => true)]).then( + () => { + assert.sameValue( + log.join(' '), + '1 2 1 2', + ); + }, + err => { + throw err; + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/length.js b/test/staging/sm/AsyncIterator/prototype/every/length.js new file mode 100644 index 0000000000..603b56c51f --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of AsyncIterator.prototype.every. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.every, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/name.js b/test/staging/sm/AsyncIterator/prototype/every/name.js new file mode 100644 index 0000000000..de3695890e --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of AsyncIterator.prototype.every. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.every, 'name'); +assert.sameValue(propDesc.value, 'every'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/every/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..91804d4255 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => {}; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.every(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, false); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/proxy.js b/test/staging/sm/AsyncIterator/prototype/every/proxy.js new file mode 100644 index 0000000000..b0d47327cd --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +// +// This test checks that %AsyncIterator.prototype%.every only gets the `next` method off of the +// iterator once, and never accesses the @@asyncIterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends AsyncIterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return Promise.resolve({done: false, value}); + } + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.every(x => x % 2 == 0).then(value => { + assert.sameValue(value, false) + + assert.sameValue( + log.join('\n'), + `get: every +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: return` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/return-true-if-all-match.js b/test/staging/sm/AsyncIterator/prototype/every/return-true-if-all-match.js new file mode 100644 index 0000000000..05b34832ba --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/return-true-if-all-match.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 3; + yield 5; +} +const fn = x => x % 2 == 1; + +gen().every(fn).then(result => assert.sameValue(result, true)); + +async function* empty() {} +empty().every(x => x).then(result => assert.sameValue(result, true)); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/short-circuit-on-false.js b/test/staging/sm/AsyncIterator/prototype/every/short-circuit-on-false.js new file mode 100644 index 0000000000..6ecf8b404d --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/short-circuit-on-false.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +const log = []; +const fn = value => { + log.push(value.toString()); + return value % 2 == 1; +}; + +gen().every(fn).then(result => { + assert.sameValue(result, false); + assert.sameValue(log.join(','), '1,2'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/every/this-not-iterator-throws.js new file mode 100644 index 0000000000..5f14d22c32 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/this-not-iterator-throws.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const fn = x => x; + +function check(x) { + AsyncIterator.prototype.every.call(x, fn).then( + () => { + throw new Error('check should have been rejected'); + }, + err => { + assert.sameValue(err instanceof TypeError, true); + } + ); +} + +check(); +check(undefined); +check({}); +check({next: 0}); + diff --git a/test/staging/sm/AsyncIterator/prototype/every/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/every/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..1fe2de45db --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/every/value-throws-iterator-not-closed.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ + done: false, + get value() { + throw new TestError(); + } + }); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +iterator.every(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/filter/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/filter/coerce-result-to-boolean.js new file mode 100644 index 0000000000..e2ba13648b --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/filter/coerce-result-to-boolean.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- async-iteration +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +async function* gen(iterable) { + yield* iterable; +} + +// All truthy values are kept. +const truthyValues = [true, 1, [], {}, 'test']; +(async () => { + for await (const value of gen([...truthyValues]).filter(x => x)) { + assert.sameValue(truthyValues.shift(), value); + } +})(); + +// All falsy values are filtered out. +const falsyValues = [false, 0, '', null, undefined, NaN, -0, 0n, createIsHTMLDDA()]; +gen(falsyValues).filter(x => x).next().then( + ({done, value}) => { + assert.sameValue(done, true); + assert.sameValue(value, undefined); + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/filter/filter.js b/test/staging/sm/AsyncIterator/prototype/filter/filter.js new file mode 100644 index 0000000000..6204d78ddb --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/filter/filter.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +let iter = gen().filter(x => x % 2); + +for (const v of [1, 3]) { + iter.next().then( + ({done, value}) => { + assert.sameValue(done, false); + assert.sameValue(value, v); + } + ); +} + +iter.next().then(({done}) => assert.sameValue(done, true)); + diff --git a/test/staging/sm/AsyncIterator/prototype/filter/length.js b/test/staging/sm/AsyncIterator/prototype/filter/length.js new file mode 100644 index 0000000000..1baed8d8e0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/filter/length.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.filter length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(AsyncIterator.prototype.filter.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.filter, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/filter/name.js b/test/staging/sm/AsyncIterator/prototype/filter/name.js new file mode 100644 index 0000000000..58f157bc34 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/filter/name.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.filter.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(AsyncIterator.prototype.filter.name, 'filter'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.filter, 'name'); +assert.sameValue(propertyDescriptor.value, 'filter'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/async-writes.js b/test/staging/sm/AsyncIterator/prototype/find/async-writes.js new file mode 100644 index 0000000000..aa9697b294 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/async-writes.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let x = {a: () => true}; + +async function* gen() { + yield x.a(); + yield x.a(); +} + +gen().find(() => {}).then( + () => assert.sameValue(true, false, 'expected error'), + err => assert.sameValue(err instanceof Error, true), +); + +x.a = () => { + throw Error(); +}; + diff --git a/test/staging/sm/AsyncIterator/prototype/find/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/find/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..0b05d8a6d8 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/check-fn-after-getting-iterator.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +iter.find(1).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); + assert.sameValue( + log.join('\n'), + `get: find +get: next` + ); +}); + + diff --git a/test/staging/sm/AsyncIterator/prototype/find/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/find/coerce-result-to-boolean.js new file mode 100644 index 0000000000..e1da77e9fc --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/coerce-result-to-boolean.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- async-iteration +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +async function* gen(value) { + yield value; +} +const fn = x => x; +function check(value, expected) { + gen(value).find(fn).then(result => assert.sameValue(result, expected)); +} + +check(true, true); +check(1, 1); +check('test', 'test'); + +check(false, undefined); +check(0, undefined); +check('', undefined); +check(null, undefined); +check(undefined, undefined); +check(NaN, undefined); +check(-0, undefined); +check(0n, undefined); +check(Promise.resolve(false), undefined); + +let array = []; +check(array, array); + +let object = {}; +check(object, object); + +const htmlDDA = createIsHTMLDDA(); +check(htmlDDA, undefined); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/descriptor.js b/test/staging/sm/AsyncIterator/prototype/find/descriptor.js new file mode 100644 index 0000000000..04ca7b9150 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/descriptor.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of AsyncIterator.prototype.find +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'find'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/find/error-from-correct-realm.js new file mode 100644 index 0000000000..0c1f3dfb69 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/error-from-correct-realm.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +async function *gen() {} + +gen().find().then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); +}); + +otherGlobal.AsyncIterator.prototype.find.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue( + err instanceof otherGlobal.TypeError, + true, + 'TypeError comes from the realm of the method.', + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/find/fn-not-callable-throws.js new file mode 100644 index 0000000000..b345e4a825 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/fn-not-callable-throws.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function *gen() { + yield 1; +} + +function check(fn) { + gen().every(fn).then(() => { + throw new Error('every should have thrown'); + }, + (err) => { + assert.sameValue(err instanceof TypeError, true); + }); +} + +check(); +check(undefined); +check(null); +check(0); +check(false); +check(''); +check(Symbol('')); +check({}); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/find/fn-throws-close-iterator.js new file mode 100644 index 0000000000..c2e1141595 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/fn-throws-close-iterator.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({done: this.closed}); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.find(fn).then(() => { + throw new Error('promise should be rejected'); +}, err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, true); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/find/interleaving-calls.js new file mode 100644 index 0000000000..66e424a42c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/interleaving-calls.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const log = []; +async function* gen(n) { + log.push(`${n}`); + yield 1; + log.push(`${n}`); + yield 2; +} + +Promise.all([gen(1).find(() => {}), gen(2).find(() => {})]).then( + () => { + assert.sameValue( + log.join(' '), + '1 2 1 2', + ); + }, + err => { + throw err; + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/length.js b/test/staging/sm/AsyncIterator/prototype/find/length.js new file mode 100644 index 0000000000..6b68ff0f5c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of AsyncIterator.prototype.find. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.find, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/name.js b/test/staging/sm/AsyncIterator/prototype/find/name.js new file mode 100644 index 0000000000..4b53e2550f --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of AsyncIterator.prototype.find. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.find, 'name'); +assert.sameValue(propDesc.value, 'find'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/find/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..8ff3da47d8 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = x => x; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.find(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, false); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/proxy.js b/test/staging/sm/AsyncIterator/prototype/find/proxy.js new file mode 100644 index 0000000000..e319f6a0ce --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.find only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends AsyncIterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return Promise.resolve({done: false, value}); + } + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.find(x => x % 2 == 1).then(value => { + assert.sameValue(value, 1); + + assert.sameValue( + log.join('\n'), + `get: find +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: return` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/return-undefined-if-none-match.js b/test/staging/sm/AsyncIterator/prototype/find/return-undefined-if-none-match.js new file mode 100644 index 0000000000..b8261c6cf9 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/return-undefined-if-none-match.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 3; + yield 5; +} +const fn = x => x % 2 == 0; + +gen().find(fn).then(result => assert.sameValue(result, undefined)); + +async function* empty() {} +empty().find(x => x).then(result => assert.sameValue(result, undefined)); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/short-circuit-on-match.js b/test/staging/sm/AsyncIterator/prototype/find/short-circuit-on-match.js new file mode 100644 index 0000000000..ca0930f996 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/short-circuit-on-match.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +const log = []; +const fn = (value) => { + log.push(value.toString()); + return value % 2 == 0; +}; + +gen().find(fn).then(result => { + assert.sameValue(result, 2); + assert.sameValue(log.join(','), '1,2'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/find/this-not-iterator-throws.js new file mode 100644 index 0000000000..d5c121c121 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/this-not-iterator-throws.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const fn = x => x; + +function check(x) { + AsyncIterator.prototype.find.call(x, fn).then( + () => assert.sameValue(true, false, 'expected error'), + err => { + assert.sameValue(err instanceof TypeError, true); + } + ); +} + +check(); +check(undefined); +check({}); +check({next: 0}); + diff --git a/test/staging/sm/AsyncIterator/prototype/find/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/find/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..22192e1350 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/find/value-throws-iterator-not-closed.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ + done: false, + get value() { + throw new TestError(); + } + }); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +iterator.find(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js new file mode 100644 index 0000000000..c1b35e29d5 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js @@ -0,0 +1,59 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap closes the iterator when innerComplete throws. +info: | + Iterator Helpers proposal 2.1.6.7 1. Repeat, + ... + k. Repeat, while innerAlive is true, + ... + v. Let innerComplete be IteratorComplete(innerNext). + vi. IfAbruptCloseAsyncIterator(innerComplete, iterated). +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 0}; + } + + closed = false; + async return() { + this.closed = true; + return {done: true}; + } +} + +class TestError extends Error {} +class InnerIterator extends AsyncIterator { + async next() { + return { + get done() { + throw new TestError(); + } + }; + } +} + +const iter = new TestIterator(); +const mapped = iter.flatMap(x => new InnerIterator()); + +assert.sameValue(iter.closed, false); +mapped.next().then( + _ => assert.sameValue(true, false, 'Expected reject.'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iter.closed, true); + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-next-throws.js b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-next-throws.js new file mode 100644 index 0000000000..17715ad7ec --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-next-throws.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap closes the iterator when IteratorNext throws. +info: | + Iterator Helpers proposal 2.1.6.7 1. Repeat, + ... + k. Repeat, while innerAlive is true, + i. Let innerNextPromise be IteratorNext(innerIterator). + ii. IfAbruptCloseAsyncIterator(innerNextPromise, iterated). +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 0}; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +class TestError extends Error {} +class InnerIterator extends AsyncIterator { + async next() { + throw new TestError(); + } +} + +const iter = new TestIterator(); +const mapped = iter.flatMap(x => new InnerIterator()); + +assert.sameValue(iter.closed, false); +mapped.next().then( + _ => assert.sameValue(true, false, 'Expected reject.'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iter.closed, true); + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-value-throws.js b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-value-throws.js new file mode 100644 index 0000000000..23350f02b6 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/close-iterator-when-inner-value-throws.js @@ -0,0 +1,61 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap closes the iterator when innerValue throws. +info: | + Iterator Helpers proposal 2.1.6.7 1. Repeat, + ... + k. Repeat, while innerAlive is true, + ... + viii. Else, + 1. Let innerValue be IteratorValue(innerNext). + 2. IfAbruptCloseAsyncIterator(innerValue, iterated). +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 0}; + } + + closed = false; + async return() { + this.closed = true; + return {done: true}; + } +} + +class TestError extends Error {} +class InnerIterator extends AsyncIterator { + async next() { + return { + done: false, + get value() { + throw new TestError(); + }, + }; + } +} + +const iter = new TestIterator(); +const mapped = iter.flatMap(x => new InnerIterator()); + +assert.sameValue(iter.closed, false); +mapped.next().then( + _ => assert.sameValue(true, false, 'Expected reject.'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iter.closed, true); + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/flatMap.js b/test/staging/sm/AsyncIterator/prototype/flatMap/flatMap.js new file mode 100644 index 0000000000..eb49761d20 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/flatMap.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +async function* inner(x) { + yield x; + yield x + 1; +} + +let iter = gen().flatMap(x => inner(x)); + +for (const v of [1, 2, 2, 3, 3, 4]) { + iter.next().then( + ({done, value}) => { + assert.sameValue(done, false); + assert.sameValue(value, v); + } + ); +} + +iter.next().then(({done}) => assert.sameValue(done, true)); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/inner-empty-iterable.js b/test/staging/sm/AsyncIterator/prototype/flatMap/inner-empty-iterable.js new file mode 100644 index 0000000000..996abcf340 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/inner-empty-iterable.js @@ -0,0 +1,48 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap skips empty inner iterables. +info: | + Iterator Helpers proposal 2.1.6.7 1. Repeat, + ... + k. Repeat, while innerAlive is true, + ... + v. Let innerComplete be IteratorComplete(innerNext). + ... + vii. If innerComplete is true, set innerAlive to false. +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen(values) { + yield* values; +} + +(async () => { + let iter = gen([0, 1, 2, 3]).flatMap(x => x % 2 ? gen([]) : gen([x])); + + for (const expected of [0, 2]) { + const result = await iter.next(); + assert.sameValue(result.value, expected); + assert.sameValue(result.done, false); + } + + let result = await iter.next(); + assert.sameValue(result.value, undefined); + assert.sameValue(result.done, true); + + iter = gen([0, 1, 2, 3]).flatMap(x => gen([])); + result = await iter.next(); + assert.sameValue(result.value, undefined); + assert.sameValue(result.done, true); +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/inner-generator.js b/test/staging/sm/AsyncIterator/prototype/flatMap/inner-generator.js new file mode 100644 index 0000000000..dcf18cffb2 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/inner-generator.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap innerIterator can be a generator. +info: | + Iterator Helpers proposal 2.1.6.7 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen() { + yield 1; + yield 2; +} + +(async () => { + const iter = gen().flatMap(async function*(x) { + yield x; + yield* [x + 1, x + 2]; + }); + + for (const expected of [1, 2, 3, 2, 3, 4]) { + const result = await iter.next(); + assert.sameValue(result.value, expected); + assert.sameValue(result.done, false); + } + + const result = await iter.next(); + assert.sameValue(result.value, undefined); + assert.sameValue(result.done, true); +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/length.js b/test/staging/sm/AsyncIterator/prototype/flatMap/length.js new file mode 100644 index 0000000000..403d207ddb --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/length.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(AsyncIterator.prototype.flatMap.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.flatMap, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/name.js b/test/staging/sm/AsyncIterator/prototype/flatMap/name.js new file mode 100644 index 0000000000..f6ede692fb --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/name.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(AsyncIterator.prototype.flatMap.name, 'flatMap'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.flatMap, 'name'); +assert.sameValue(propertyDescriptor.value, 'flatMap'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/flatMap/throw-when-inner-not-iterable.js b/test/staging/sm/AsyncIterator/prototype/flatMap/throw-when-inner-not-iterable.js new file mode 100644 index 0000000000..176ef608f0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/flatMap/throw-when-inner-not-iterable.js @@ -0,0 +1,74 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.flatMap closes the iterator and throws when mapped isn't iterable. +info: | + Iterator Helpers proposal 2.1.6.7 1. Repeat, + ... + h. Let innerIterator be GetIterator(mapped, async). + i. IfAbruptCloseAsyncIterator(innerIterator, iterated). +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class NotIterable { + async next() { + return {done: true}; + } +} + +class InvalidIterable { + [Symbol.asyncIterator]() { + return {}; + } +} + +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 0}; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +const nonIterables = [ + new NotIterable(), + new InvalidIterable(), + undefined, + null, + 0, + false, + Symbol(''), + 0n, + {}, +]; + +(async () => { + for (const value of nonIterables) { + const iter = new TestIterator(); + const mapped = iter.flatMap(x => value); + + assert.sameValue(iter.closed, false); + try { + await mapped.next(); + assert.sameValue(true, false, 'Expected reject'); + } catch (exc) { + assert.sameValue(exc instanceof TypeError, true); + } + assert.sameValue(iter.closed, true); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/async-writes.js b/test/staging/sm/AsyncIterator/prototype/forEach/async-writes.js new file mode 100644 index 0000000000..999e0230ec --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/async-writes.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let x = {a: () => true}; + +async function* gen() { + yield x.a(); + yield x.a(); +} + +gen().forEach(() => {}).then( + () => assert.sameValue(true, false, 'expected error'), + err => assert.sameValue(err instanceof Error, true), +); + +x.a = () => { + throw Error(); +}; + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/forEach/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..ec284bd497 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/check-fn-after-getting-iterator.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +iter.forEach(1).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); + assert.sameValue( + log.join('\n'), + `get: forEach +get: next` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/descriptor.js b/test/staging/sm/AsyncIterator/prototype/forEach/descriptor.js new file mode 100644 index 0000000000..3a1f9cd396 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/descriptor.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of AsyncIterator.prototype.forEach +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'forEach'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/forEach/error-from-correct-realm.js new file mode 100644 index 0000000000..1f3d20463a --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/error-from-correct-realm.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +async function *gen() {} + +gen().forEach().then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); +}); + +otherGlobal.AsyncIterator.prototype.forEach.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue( + err instanceof otherGlobal.TypeError, + true, + 'TypeError comes from the realm of the method.', + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/forEach/fn-not-callable-throws.js new file mode 100644 index 0000000000..72ac8dc085 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/fn-not-callable-throws.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function *gen() {} + +function check(fn) { + gen().forEach(fn).then(() => { + throw new Error('every should have thrown'); + }, + (err) => { + assert.sameValue(err instanceof TypeError, true); + }); +} + +check(); +check(undefined); +check(null); +check(0); +check(false); +check(''); +check(Symbol('')); +check({}); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/forEach/fn-throws-close-iterator.js new file mode 100644 index 0000000000..6513c5611e --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/fn-throws-close-iterator.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ done: this.closed }); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.forEach(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, true); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/forEach/interleaving-calls.js new file mode 100644 index 0000000000..dfb7f82f1d --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/interleaving-calls.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const log = []; +async function* gen(n) { + log.push(`${n}`); + yield 1; + log.push(`${n}`); + yield 2; +} + +Promise.all([gen(1).forEach(() => {}), gen(2).forEach(() => {})]).then( + () => { + assert.sameValue( + log.join(' '), + '1 2 1 2', + ); + }, + err => { + throw err; + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/length.js b/test/staging/sm/AsyncIterator/prototype/forEach/length.js new file mode 100644 index 0000000000..f20087e6e3 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of AsyncIterator.prototype.forEach. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.forEach, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/name.js b/test/staging/sm/AsyncIterator/prototype/forEach/name.js new file mode 100644 index 0000000000..f385222bfd --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of AsyncIterator.prototype.forEach. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.forEach, 'name'); +assert.sameValue(propDesc.value, 'forEach'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/forEach/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..eb4a9efed7 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => {}; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.forEach(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, false); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/proxy.js b/test/staging/sm/AsyncIterator/prototype/forEach/proxy.js new file mode 100644 index 0000000000..cd6d04b7a0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/proxy.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.forEach only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends AsyncIterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return Promise.resolve({done: false, value}); + } + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.forEach(x => x).then(() => { + assert.sameValue( + log.join('\n'), + `get: forEach +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/forEach/this-not-iterator-throws.js new file mode 100644 index 0000000000..88737dcd31 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/this-not-iterator-throws.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const fn = x => x; +function check(x) { + AsyncIterator.prototype.forEach.call(x, fn).then( + () => assert.sameValue(true, false, 'expected error'), + err => { + assert.sameValue(err instanceof TypeError, true); + } + ); +} + +check(); +check(undefined); +check({}); +check({next: 0}); + diff --git a/test/staging/sm/AsyncIterator/prototype/forEach/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/forEach/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..de1535e38c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/forEach/value-throws-iterator-not-closed.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ + done: false, + get value() { + throw new TestError(); + } + }); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +iterator.forEach(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/generator-methods-throw-on-iterator-helpers.js b/test/staging/sm/AsyncIterator/prototype/generator-methods-throw-on-iterator-helpers.js new file mode 100644 index 0000000000..ce941e9087 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/generator-methods-throw-on-iterator-helpers.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const asyncGeneratorProto = Object.getPrototypeOf( + Object.getPrototypeOf( + (async function *() {})() + ) +); + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(x => (async function*() {})()), +]; + +for (const method of methods) { + const iteratorHelper = method((async function*() {})()); + asyncGeneratorProto.next.call(iteratorHelper).then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => assert.sameValue(err instanceof TypeError, true), + ); + asyncGeneratorProto.return.call(iteratorHelper).then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => assert.sameValue(err instanceof TypeError, true), + ); + asyncGeneratorProto.throw.call(iteratorHelper).then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => assert.sameValue(err instanceof TypeError, true), + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/iterator-helper-methods-throw-on-generators.js b/test/staging/sm/AsyncIterator/prototype/iterator-helper-methods-throw-on-generators.js new file mode 100644 index 0000000000..5eb4f3609f --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/iterator-helper-methods-throw-on-generators.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function *gen() { yield 'value'; } + +const asyncIteratorHelperProto = Object.getPrototypeOf(gen().map(x => x)); + +assertThrowsInstanceOf(() => asyncIteratorHelperProto.next.call(gen()), TypeError); +assertThrowsInstanceOf(() => asyncIteratorHelperProto.return.call(gen()), TypeError); +assertThrowsInstanceOf(() => asyncIteratorHelperProto.throw.call(gen()), TypeError); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-from-other-global.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-from-other-global.js new file mode 100644 index 0000000000..7ce488d05e --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-from-other-global.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen(values) { + yield* values; +} + +const otherAsyncIteratorProto = createNewGlobal({newCompartment: true}).AsyncIterator.prototype; + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["asIndexedPairs", undefined], + ["flatMap", x => gen([x])], +]; + +(async () => { + for (const [method, arg] of methods) { + const iterator = gen([1, 2, 3]); + const helper = otherAsyncIteratorProto[method].call(iterator, arg); + + for (const expected of [1, 2, 3]) { + const {done, value} = await helper.next(); + assert.sameValue(done, false); + assert.sameValue(Array.isArray(value) ? value[1] : value, expected); + } + + const {done, value} = await helper.next(); + assert.sameValue(done, true); + assert.sameValue(value, undefined); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-handle-empty-iterators.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-handle-empty-iterators.js new file mode 100644 index 0000000000..c56a705122 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-handle-empty-iterators.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods handle empty iterators. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class EmptyIterator extends AsyncIterator { + async next() { + return {done: true}; + } +} + +async function* gen() {} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(x => gen()), +]; + +for (const method of methods) { + for (const iterator of [new EmptyIterator(), gen()]) { + method(iterator).next().then( + ({done, value}) => { + assert.sameValue(done, true); + assert.sameValue(value, undefined); + } + ); + } +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-interleaved.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-interleaved.js new file mode 100644 index 0000000000..86bd6de9df --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-interleaved.js @@ -0,0 +1,64 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% method calls can be interleaved. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + value = 0; + async next() { + return {done: false, value: this.value++}; + } +} + +function unwrapResult(value) { + // Unwrap the asIndexedPair return values. + while (Array.isArray(value)) { + value = value[1]; + } + return value; +} + +function check({done, value}, expectedDone, expectedValue) { + assert.sameValue(done, expectedDone); + assert.sameValue(unwrapResult(value), expectedValue); +} + +const methods = [ + ['map', x => x], + ['filter', x => true], + ['take', Infinity], + ['drop', 0], + ['asIndexedPairs', undefined], + ['flatMap', async function*(x) { yield x; }], +]; + +(async () => { + for (const [firstMethod, firstArg] of methods) { + for (const [secondMethod, secondArg] of methods) { + const iterator = new TestIterator(); + + const firstHelper = iterator[firstMethod](firstArg); + const secondHelper = iterator[secondMethod](secondArg); + + check(await firstHelper.next(), false, 0); + check(await secondHelper.next(), false, 1); + check(await firstHelper.next(), false, 2); + check(await secondHelper.next(), false, 3); + } + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-call-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-call-throws.js new file mode 100644 index 0000000000..8a2191ce28 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-call-throws.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods close the iterator if callback throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestAsyncIterator extends AsyncIterator { + async next() { + return {done: false, value: 1}; + } + + closed = false; + async return() { + this.closed = true; + return {done: true}; + } +} + +function fn() { + throw new TestError(); +} +const methods = [ + iter => iter.map(fn), + iter => iter.filter(fn), + iter => iter.flatMap(fn), +]; + +for (const method of methods) { + const iter = new TestAsyncIterator(); + assert.sameValue(iter.closed, false); + method(iter).next().then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iter.closed, true); + }, + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js new file mode 100644 index 0000000000..dee1898a3a --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods close the iterator if `yield` throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestAsyncIterator extends AsyncIterator { + async next() { + return {done: false, value: 1}; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +async function* gen(x) { yield x; } +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + const iterator = new TestAsyncIterator(); + const iteratorHelper = method(iterator); + + assert.sameValue(iterator.closed, false); + iteratorHelper.next().then( + _ => iteratorHelper.throw(new TestError()).then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, true); + }, + ), + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-get-then-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-get-then-throws.js new file mode 100644 index 0000000000..ca74aa42c8 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-get-then-throws.js @@ -0,0 +1,61 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods don't close the iterator if getting `then` throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} + +class TestIterator extends AsyncIterator { + next() { + return { + get then() { + throw new TestError(); + } + }; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["asIndexedPairs", undefined], + ["flatMap", async function*(x) { yield x; }], +]; + +(async () => { + for (const [method, arg] of methods) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + + try { + await iterator[method](arg).next(); + assert.sameValue(true, false, 'Expected exception'); + } catch(err) { + assert.sameValue(err instanceof TestError, true); + } + assert.sameValue(iterator.closed, false); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-promise-executor-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-promise-executor-throws.js new file mode 100644 index 0000000000..96202825a0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-promise-executor-throws.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods don't close the iterator if executor of Promise returned by `.next` throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return new Promise((resolve, reject) => { + throw new TestError(); + }); + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["asIndexedPairs", undefined], + ["flatMap", async function*(x) { yield x; }], +]; + +(async () => { + for (const [method, arg] of methods) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + + try { + await iterator[method](arg).next(); + assert.sameValue(true, false, 'Expected exception'); + } catch(err) { + assert.sameValue(err instanceof TestError, true); + } + assert.sameValue(iterator.closed, false); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-returns-reject.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-returns-reject.js new file mode 100644 index 0000000000..dd049890d0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-returns-reject.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods don't close the iterator if `.next` returns a rejected Promise. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return Promise.reject(new TestError()); + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["asIndexedPairs", undefined], + ["flatMap", async function*(x) { yield x; }], +]; + +(async () => { + for (const [method, arg] of methods) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + + try { + await iterator[method](arg).next(); + assert.sameValue(true, false, 'Expected exception'); + } catch(err) { + assert.sameValue(err instanceof TestError, true); + } + assert.sameValue(iterator.closed, false); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-then-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-then-throws.js new file mode 100644 index 0000000000..1e76f2e9fa --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-then-throws.js @@ -0,0 +1,61 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods don't close the iterator if `then` returned by `next` throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} + +class TestIterator extends AsyncIterator { + next() { + return { + then() { + throw new TestError(); + } + }; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["asIndexedPairs", undefined], + ["flatMap", async function*(x) { yield x; }], +]; + +(async () => { + for (const [method, arg] of methods) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + + try { + await iterator[method](arg).next(); + assert.sameValue(true, false, 'Expected exception'); + } catch(err) { + assert.sameValue(err instanceof TestError, true); + } + assert.sameValue(iterator.closed, false); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js new file mode 100644 index 0000000000..80ba2ec3b2 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods don't close the iterator if `.next` call throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestAsyncIterator extends AsyncIterator { + next() { + throw new TestError(); + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +async function* gen(x) { yield x; } +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + const iterator = new TestAsyncIterator(); + assert.sameValue(iterator.closed, false); + method(iterator).next().then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false); + }, + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js new file mode 100644 index 0000000000..dda8ce2462 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js @@ -0,0 +1,59 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods don't close the iterator if `value` throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestAsyncIterator extends AsyncIterator { + async next() { + return { + get value() { + throw new TestError(); + } + }; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +const iterator = new TestAsyncIterator(); + +async function* gen(x) { yield x; } +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + assert.sameValue(iterator.closed, false); + method(iterator).next().then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false); + }, + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js new file mode 100644 index 0000000000..4c8dd94344 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + async next() { + return {done: true, value: 'value'}; + } +} + +async function* gen(x) { yield x; } + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +(async () => { + for (const method of methods) { + const iterator = method(new TestIterator()); + const {done, value} = await iterator.next(); + assert.sameValue(done, true); + assert.sameValue(value, undefined); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-return-close-iterator-once.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-return-close-iterator-once.js new file mode 100644 index 0000000000..00e9cc90e8 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-return-close-iterator-once.js @@ -0,0 +1,69 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Calling `.return()` on a lazy %AsyncIterator.prototype% method multiple times closes the source iterator once. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 1}; + } + + closeCount = 0; + async return(value) { + this.closeCount++; + return {done: true, value}; + } +} + +async function* gen(x) { yield x; } + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +(async () => { + // Call `return` after stepping the iterator once: + for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + await iterHelper.next(); + assert.sameValue(iter.closeCount, 0); + await iterHelper.return(); + assert.sameValue(iter.closeCount, 1); + await iterHelper.return(); + assert.sameValue(iter.closeCount, 1); + } + + // Call `return` before stepping the iterator: + for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + assert.sameValue(iter.closeCount, 0); + await iterHelper.return(); + assert.sameValue(iter.closeCount, 1); + await iterHelper.return(); + assert.sameValue(iter.closeCount, 1); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-throw-close-iterator-once.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-throw-close-iterator-once.js new file mode 100644 index 0000000000..9ef7044291 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-multiple-throw-close-iterator-once.js @@ -0,0 +1,95 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Calling `throw` on a lazy %AsyncIterator.prototype% method multiple times closes the source iterator once. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} + +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 1}; + } + + closeCount = 0; + async return(value) { + this.closeCount++; + return {done: true, value}; + } +} + +async function* gen(x) { yield x; } + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(Infinity), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +(async () => { + // Call `throw` after stepping the iterator once: + for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + await iterHelper.next() + assert.sameValue(iter.closeCount, 0); + + try { + await iterHelper.throw(new TestError()); + assert.sameValue(true, false, 'Expected reject'); + } catch (exc) { + assert.sameValue(exc instanceof TestError, true); + } + assert.sameValue(iter.closeCount, 1); + + try { + await iterHelper.throw(new TestError()); + assert.sameValue(true, false, 'Expected reject'); + } catch (exc) { + assert.sameValue(exc instanceof TestError, true); + } + assert.sameValue(iter.closeCount, 1); + } + + // Call `throw` before stepping the iterator: + for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + assert.sameValue(iter.closeCount, 0); + + try { + await iterHelper.throw(new TestError()); + assert.sameValue(true, false, 'Expected reject'); + } catch (exc) { + assert.sameValue(exc instanceof TestError, true); + } + assert.sameValue(iter.closeCount, 1); + + try { + await iterHelper.throw(new TestError()); + assert.sameValue(true, false, 'Expected reject'); + } catch (exc) { + assert.sameValue(exc instanceof TestError, true); + } + assert.sameValue(iter.closeCount, 1); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator-after-done.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator-after-done.js new file mode 100644 index 0000000000..17dde50fc8 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator-after-done.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype% methods ignore iterator mutation if already done. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// +// + +class TestIterator extends AsyncIterator { + values = [1, 2]; + async next() { + if (this.values.length == 0) + return {done: true}; + return {done: false, value: this.values.shift()}; + } +} + +function check({done, value}, expectedDone, expectedValue) { + assert.sameValue(done, expectedDone); + assert.sameValue(Array.isArray(value) ? value[1] : value, expectedValue); +} + +const methods = [ + ['map', x => x], + ['filter', x => true], + ['take', Infinity], + ['drop', 0], + ['asIndexedPairs', undefined], + ['flatMap', async function*(x) { yield x; }], +]; + +for (const [method, arg] of methods) { + (async () => { + const iter = new TestIterator(); + const iterHelper = iter[method](arg); + check(await iterHelper.next(), false, 1); + check(await iterHelper.next(), false, 2); + check(await iterHelper.next(), true, undefined); + iter.values.push(3); + check(await iterHelper.next(), true, undefined); + })(); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator.js new file mode 100644 index 0000000000..1799f31abf --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-mutate-iterator.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype% methods work properly if the iterator has been mutated. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// +// + +class TestIterator extends AsyncIterator { + values = [1, 2]; + async next() { + if (this.values.length == 0) + return {done: true}; + return {done: false, value: this.values.shift()}; + } +} + +function check({done, value}, expectedDone, expectedValue) { + assert.sameValue(done, expectedDone); + assert.sameValue(Array.isArray(value) ? value[1] : value, expectedValue); +} + +const methods = [ + ['map', x => x], + ['filter', x => true], + ['take', Infinity], + ['drop', 0], + ['asIndexedPairs', undefined], + ['flatMap', async function*(x) { yield x; }], +]; + +for (const [method, arg] of methods) { + (async () => { + const iter = new TestIterator(); + const iterHelper = iter[method](arg); + check(await iterHelper.next(), false, 1); + check(await iterHelper.next(), false, 2); + iter.values.push(3); + check(await iterHelper.next(), false, 3); + check(await iterHelper.next(), true, undefined); + })(); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-not-close-iterator-next-reject.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-not-close-iterator-next-reject.js new file mode 100644 index 0000000000..35bf90f57a --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-not-close-iterator-next-reject.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods don't close the iterator if `next` returns rejected promise. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + next() { + return Promise.reject('rejection'); + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +async function* gen(x) { yield x; } +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + method(iterator).next().then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => { + assert.sameValue(err, 'rejection'); + assert.sameValue(iterator.closed, false); + }, + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-through-lastValue.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-through-lastValue.js new file mode 100644 index 0000000000..e43b025633 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-through-lastValue.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestAsyncIterator extends AsyncIterator { + async next(value) { + return {done: false, value}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(2), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), +]; + +for (const method of methods) { + const iterator = new TestAsyncIterator(); + const iteratorHelper = method(iterator); + iteratorHelper.next().then( + _ => iteratorHelper.next('last value').then( + ({done, value}) => { + assert.sameValue(done, false); + // Unwrap the return value from asIndexedPairs. + assert.sameValue(Array.isArray(value) ? value[1] : value, 'last value'); + } + ), + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-value-through-chain.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-value-through-chain.js new file mode 100644 index 0000000000..834e0554f1 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-pass-value-through-chain.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestAsyncIterator extends AsyncIterator { + async next(value) { + return {done: false, value}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(2), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), +]; + +for (const outerMethod of methods) { + for (const innerMethod of methods) { + const iterator = new TestAsyncIterator(); + const iteratorChain = outerMethod(innerMethod(iterator)); + iteratorChain.next().then( + _ => iteratorChain.next('last value').then( + ({done, value}) => { + assert.sameValue(done, false); + // Unwrap the asIndexedPair return values. + while (Array.isArray(value)) { + value = value[1]; + } + assert.sameValue(value, 'last value'); + } + ), + ); + } +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-proxy-accesses.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-proxy-accesses.js new file mode 100644 index 0000000000..9e2cf5bea9 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-proxy-accesses.js @@ -0,0 +1,73 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods access specified properties only. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +let log; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args.filter(x => typeof x != 'object').map(x => x.toString())}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends AsyncIterator { + value = 0; + async next() { + if (this.value < 1) + return new Proxy({done: false, value: this.value++}, handlerProxy); + return new Proxy({done: true, value: undefined}, handlerProxy); + } +} + +const methods = [ + ['map', x => x], + ['filter', x => true], + ['take', 4], + ['drop', 0], + ['asIndexedPairs', undefined], + ['flatMap', async function*(x) { yield x; }], +]; + +(async () => { + for (const [method, argument] of methods) { + log = []; + const iteratorProxy = new Proxy(new TestIterator(), handlerProxy); + const iteratorHelper = iteratorProxy[method](argument); + + await iteratorHelper.next(); + await iteratorHelper.next(); + const {done} = await iteratorHelper.next(); + assert.sameValue(done, true); + assert.sameValue( + log.join('\n'), + `get: ${method} +get: next +get: value +get: value +set: value,1 +getOwnPropertyDescriptor: value +defineProperty: value +get: then +get: done +get: value +get: value +get: then +get: done` + ); + } +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-closes-iterator.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-closes-iterator.js new file mode 100644 index 0000000000..879df287b9 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-closes-iterator.js @@ -0,0 +1,68 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Calling `return` on a lazy %AsyncIterator.prototype% method closes the source iterator. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 1}; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +async function* gen(x) { yield x; } + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + iterHelper.next().then(() => { + assert.sameValue(iter.closed, false); + iterHelper.return(0).then(({done, value}) => { + assert.sameValue(iter.closed, true); + assert.sameValue(done, true); + assert.sameValue(value, 0); + }); + }); +} + +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + assert.sameValue(iter.closed, false); + iterHelper.return(0).then(({done, value}) => { + assert.sameValue(iter.closed, true); + assert.sameValue(done, true); + assert.sameValue(value, 0); + }); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-new-iterator-result.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-new-iterator-result.js new file mode 100644 index 0000000000..c97e03d32c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-return-new-iterator-result.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy Iterator Helper methods return new iterator result objects. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +const iterResult = {done: false, value: 1, testProperty: 'test'}; +class TestIterator extends AsyncIterator { + async next() { + return iterResult; + } +} + +async function* gen(x) { yield x; } + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +// Call `return` before stepping the iterator: +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + iterHelper.next().then(result => { + assert.sameValue(result == iterResult, false); + assert.sameValue(result.testProperty, undefined); + }); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-closes-iterator-before-next.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-closes-iterator-before-next.js new file mode 100644 index 0000000000..d94e844bab --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-closes-iterator-before-next.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Calling `throw` on a lazy %AsyncIterator.prototype% method closes the source iterator. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} + +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 1}; + } + + closed = false; + async return(value) { + this.closed = true; + return {done: true, value}; + } +} + +async function* gen(x) { yield x; } + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + assert.sameValue(iter.closed, false); + iterHelper.throw(new TestError()).then( + _ => assert.sameValue(true, false, 'Expected reject.'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iter.closed, true); + + iterHelper.next().then(({done, value}) => { + assert.sameValue(done, true); + assert.sameValue(value, undefined); + }); + }, + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js new file mode 100644 index 0000000000..fd022c64a3 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods throw eagerly when `next` is non-callable. +info: | + Iterator Helpers proposal 1.1.1 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen(x) { yield x; } +const methods = [ + next => AsyncIterator.prototype.map.bind({next}, x => x), + next => AsyncIterator.prototype.filter.bind({next}, x => x), + next => AsyncIterator.prototype.take.bind({next}, 1), + next => AsyncIterator.prototype.drop.bind({next}, 0), + next => AsyncIterator.prototype.asIndexedPairs.bind({next}), + next => AsyncIterator.prototype.flatMap.bind({next}, gen), +]; + +for (const method of methods) { + assertThrowsInstanceOf(method(0), TypeError); + assertThrowsInstanceOf(method(false), TypeError); + assertThrowsInstanceOf(method(undefined), TypeError); + assertThrowsInstanceOf(method(null), TypeError); + assertThrowsInstanceOf(method(''), TypeError); + assertThrowsInstanceOf(method(Symbol('')), TypeError); + assertThrowsInstanceOf(method({}), TypeError); + assertThrowsInstanceOf(method([]), TypeError); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js new file mode 100644 index 0000000000..cf98719869 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods throw eagerly when passed non-callables. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen() {} + +const methods = [ + (iter, fn) => iter.map(fn), + (iter, fn) => iter.filter(fn), + (iter, fn) => iter.flatMap(fn), +]; + +for (const method of methods) { + assertThrowsInstanceOf(() => method(AsyncIterator.prototype, 0), TypeError); + assertThrowsInstanceOf(() => method(AsyncIterator.prototype, false), TypeError); + assertThrowsInstanceOf(() => method(AsyncIterator.prototype, undefined), TypeError); + assertThrowsInstanceOf(() => method(AsyncIterator.prototype, null), TypeError); + assertThrowsInstanceOf(() => method(AsyncIterator.prototype, ''), TypeError); + assertThrowsInstanceOf(() => method(AsyncIterator.prototype, Symbol('')), TypeError); + assertThrowsInstanceOf(() => method(AsyncIterator.prototype, {}), TypeError); + + assertThrowsInstanceOf(() => method(gen(), 0), TypeError); + assertThrowsInstanceOf(() => method(gen(), false), TypeError); + assertThrowsInstanceOf(() => method(gen(), undefined), TypeError); + assertThrowsInstanceOf(() => method(gen(), null), TypeError); + assertThrowsInstanceOf(() => method(gen(), ''), TypeError); + assertThrowsInstanceOf(() => method(gen(), Symbol('')), TypeError); + assertThrowsInstanceOf(() => method(gen(), {}), TypeError); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js new file mode 100644 index 0000000000..fce8ffdadc --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods throw eagerly when called on non-iterators. +info: | + AsyncIterator Helpers proposal 1.1.1 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen(x) { yield x; } + +const methods = [ + iter => AsyncIterator.prototype.map.bind(iter, x => x), + iter => AsyncIterator.prototype.filter.bind(iter, x => x), + iter => AsyncIterator.prototype.take.bind(iter, 1), + iter => AsyncIterator.prototype.drop.bind(iter, 0), + iter => AsyncIterator.prototype.asIndexedPairs.bind(iter), + iter => AsyncIterator.prototype.flatMap.bind(iter, gen), +]; + +for (const method of methods) { + for (const value of [undefined, null, 0, false, '', Symbol(''), {}, []]) { + assertThrowsInstanceOf(method(value), TypeError); + } +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-done-throws.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-done-throws.js new file mode 100644 index 0000000000..1c8b00552b --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-done-throws.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods throw if `next.done` throws. +info: | + AsyncIterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestAsyncIterator extends AsyncIterator { + async next() { + return { + get done() { + throw new TestError(); + } + }; + } + + closed = false; + async return() { + this.closed = true; + return {done: true}; + } +} + +async function* gen(x) { yield x; } +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + const iterator = new TestAsyncIterator(); + assert.sameValue(iterator.closed, false); + method(iterator).next().then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false); + }, + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-not-object.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-not-object.js new file mode 100644 index 0000000000..bf713c24cd --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-next-not-object.js @@ -0,0 +1,55 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %AsyncIterator.prototype% methods throw if `next` call returns a non-object. +info: | + Iterator Helpers proposal 2.1.6 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestAsyncIterator extends AsyncIterator { + async next(value) { + return value; + } + + closed = false; + async return() { + this.closed = true; + return {done: true}; + } +} + +async function* gen(x) { yield x; } +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.asIndexedPairs(), + iter => iter.flatMap(gen), +]; + +for (const method of methods) { + for (const value of [undefined, null, 0, false, '', Symbol('')]) { + const iterator = new TestAsyncIterator(); + assert.sameValue(iterator.closed, false); + method(iterator).next(value).then( + _ => assert.sameValue(true, false, 'Expected reject'), + err => { + assert.sameValue(err instanceof TypeError, true); + assert.sameValue(iterator.closed, false); + }, + ); + } +} + diff --git a/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-on-reentry.js b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-on-reentry.js new file mode 100644 index 0000000000..d0842087a3 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/lazy-methods-throw-on-reentry.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen(x) { yield x; } + +const methods = ['map', 'filter', 'flatMap']; + +for (const method of methods) { + const iter = gen('value'); + const iterHelper = iter[method](x => iterHelper.next()); + iterHelper.next().then( + _ => assert.sameValue(true, false, 'Expected reject.'), + err => assert.sameValue(err instanceof TypeError, true), + ); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/map/length.js b/test/staging/sm/AsyncIterator/prototype/map/length.js new file mode 100644 index 0000000000..3f969a4255 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/map/length.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.map length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(AsyncIterator.prototype.map.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.map, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/map/map.js b/test/staging/sm/AsyncIterator/prototype/map/map.js new file mode 100644 index 0000000000..22e3b737f9 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/map/map.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +const iter = gen().map(x => x**2); + +for (const v of [1, 4, 9]) { + iter.next().then( + ({done, value}) => { + assert.sameValue(done, false); + assert.sameValue(value, v); + } + ); +} + +iter.next().then(({done}) => assert.sameValue(done, true)); + diff --git a/test/staging/sm/AsyncIterator/prototype/map/name.js b/test/staging/sm/AsyncIterator/prototype/map/name.js new file mode 100644 index 0000000000..8fcdd061df --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/map/name.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.map.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(AsyncIterator.prototype.map.name, 'map'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.map, 'name'); +assert.sameValue(propertyDescriptor.value, 'map'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/accumulator-set-to-initial-value.js b/test/staging/sm/AsyncIterator/prototype/reduce/accumulator-set-to-initial-value.js new file mode 100644 index 0000000000..a172092462 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/accumulator-set-to-initial-value.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const reducer = (acc, _) => acc; +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +gen().reduce(reducer, 0).then(value => assert.sameValue(value, 0)); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/async-writes.js b/test/staging/sm/AsyncIterator/prototype/reduce/async-writes.js new file mode 100644 index 0000000000..fa2bc2b2d1 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/async-writes.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let x = {a: () => true}; + +async function* gen() { + yield x.a(); + yield x.a(); +} + +gen().reduce(() => {}, 0).then( + () => assert.sameValue(true, false, 'expected error'), + err => assert.sameValue(err instanceof Error, true), +); + +x.a = () => { + throw Error(); +}; + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/reduce/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..f2f44aad9f --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/check-fn-after-getting-iterator.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ done: this.closed }); + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +iter.reduce(1).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); + assert.sameValue( + log.join('\n'), + `get: reduce +get: next` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/descriptor.js b/test/staging/sm/AsyncIterator/prototype/reduce/descriptor.js new file mode 100644 index 0000000000..af0d2daaf4 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/descriptor.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of AsyncIterator.prototype.reduce +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'reduce'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/empty-iterator-without-initial-value-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/empty-iterator-without-initial-value-throws.js new file mode 100644 index 0000000000..11b982406b --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/empty-iterator-without-initial-value-throws.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() {} +gen().reduce((x, y) => x + y).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/reduce/error-from-correct-realm.js new file mode 100644 index 0000000000..77d818c741 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/error-from-correct-realm.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +async function *gen() {} + +gen().reduce().then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); +}); + +otherGlobal.AsyncIterator.prototype.reduce.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue( + err instanceof otherGlobal.TypeError, + true, + 'TypeError comes from the realm of the method.', + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/reduce/interleaving-calls.js new file mode 100644 index 0000000000..022b098c6b --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/interleaving-calls.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const log = []; +async function* gen(n) { + log.push(`${n}`); + yield 1; + log.push(`${n}`); + yield 2; +} + +Promise.all([gen(1).reduce(() => {}, 0), gen(2).reduce(() => {}, 0)]).then( + () => { + assert.sameValue( + log.join(' '), + '1 2 1 2', + ); + }, + err => { + throw err; + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/iterator-empty-return-initial-value.js b/test/staging/sm/AsyncIterator/prototype/reduce/iterator-empty-return-initial-value.js new file mode 100644 index 0000000000..186a36c346 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/iterator-empty-return-initial-value.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const reducer = (x, y) => 0; +async function *gen() {} + +gen().reduce(reducer, 1).then(result => assert.sameValue(result, 1)); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/iterator-next-return-non-object-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/iterator-next-return-non-object-throws.js new file mode 100644 index 0000000000..98485db69c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/iterator-next-return-non-object-throws.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + constructor(value) { + super(); + this.value = value; + } + + next() { + return Promise.resolve(this.value); + } +} + +const sum = (x, y) => x + y; +function check(value) { + const iter = new TestIterator(value); + iter.reduce(sum).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); + }); +} + +check(); +check(undefined); +check(null); +check(0); +check(false); +check(''); +check(Symbol('')); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/left-associative.js b/test/staging/sm/AsyncIterator/prototype/reduce/left-associative.js new file mode 100644 index 0000000000..e8550c21ed --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/left-associative.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +gen().reduce((x, y) => `(${x}+${y})`, 0) + .then(result => assert.sameValue(result, '(((0+1)+2)+3)')); +gen().reduce((x, y) => `(${x}+${y})`) + .then(result => assert.sameValue(result, '((1+2)+3)')); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/length.js b/test/staging/sm/AsyncIterator/prototype/reduce/length.js new file mode 100644 index 0000000000..d9bdc36cd3 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of AsyncIterator.prototype.reduce. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.reduce, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/name.js b/test/staging/sm/AsyncIterator/prototype/reduce/name.js new file mode 100644 index 0000000000..66fb10efca --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of AsyncIterator.prototype.reduce. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.reduce, 'name'); +assert.sameValue(propDesc.value, 'reduce'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/reduce/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..e1d35cbd1d --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const sum = (x, y) => x + y; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.reduce(sum).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, false); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js b/test/staging/sm/AsyncIterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js new file mode 100644 index 0000000000..664f9e4f3d --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const reducer = (acc, _) => acc; +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +gen().reduce(reducer).then(result => assert.sameValue(result, 1)); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/proxy.js b/test/staging/sm/AsyncIterator/prototype/reduce/proxy.js new file mode 100644 index 0000000000..caf4f6c600 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/proxy.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.reduce only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends AsyncIterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return Promise.resolve({done: false, value}); + } + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.reduce((x, y) => x + y).then(() => { + assert.sameValue( + log.join('\n'), + `get: reduce +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/reduce.js b/test/staging/sm/AsyncIterator/prototype/reduce/reduce.js new file mode 100644 index 0000000000..05e65405d2 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/reduce.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const reducer = (acc, value) => acc + value; +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +gen().reduce(reducer, 0).then(result => assert.sameValue(result, 6)); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/reducer-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/reducer-not-callable-throws.js new file mode 100644 index 0000000000..dd0ccc88b8 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/reducer-not-callable-throws.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function *gen() {} + +function check(fn) { + gen().reduce(fn).then(() => { + throw new Error('every should have thrown'); + }, + err => { + assert.sameValue(err instanceof TypeError, true); + }); +} + +check(); +check(undefined); +check(null); +check(0); +check(false); +check(''); +check(Symbol('')); +check({}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/reducer-throws-iterator-closed.js b/test/staging/sm/AsyncIterator/prototype/reduce/reducer-throws-iterator-closed.js new file mode 100644 index 0000000000..1b738c1a2e --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/reducer-throws-iterator-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ done: this.closed, value: undefined }); + } + + closed = false; + return() { + this.closed = true; + } +} + +const reducer = (x, y) => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.reduce(reducer).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, true); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/reduce/this-not-iterator-throws.js new file mode 100644 index 0000000000..7414f207d5 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/this-not-iterator-throws.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const sum = (x, y) => x + y; +function check(x) { + AsyncIterator.prototype.reduce.call(x, sum).then( + () => assert.sameValue(true, false, 'expected error'), + err => { + assert.sameValue(err instanceof TypeError, true); + } + ); +} + +check(); +check(undefined); +check({}); +check({next: 0}); + diff --git a/test/staging/sm/AsyncIterator/prototype/reduce/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/reduce/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..e27e6f0d90 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/reduce/value-throws-iterator-not-closed.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ + done: false, + get value() { + throw new TestError(); + } + }); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +iterator.reduce((x, y) => x + y, 0).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/async-writes.js b/test/staging/sm/AsyncIterator/prototype/some/async-writes.js new file mode 100644 index 0000000000..57cbad099f --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/async-writes.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let x = {a: () => true}; + +async function* gen() { + yield x.a(); + yield x.a(); +} + +gen().some(() => {}).then( + () => assert.sameValue(true, false, 'expected error'), + err => assert.sameValue(err instanceof Error, true), +); + +x.a = () => { + throw Error(); +}; + diff --git a/test/staging/sm/AsyncIterator/prototype/some/check-fn-after-getting-iterator.js b/test/staging/sm/AsyncIterator/prototype/some/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..bc21cef8e0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/check-fn-after-getting-iterator.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({done: true}); + } +} + +async function* gen() { + yield 1; +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +iter.some(1).then(() => assert.sameValue(true, false, 'expected error'), err => assert.sameValue(err instanceof TypeError, true)); + +assert.sameValue( + log.join('\n'), + `get: some +get: next` +); + + diff --git a/test/staging/sm/AsyncIterator/prototype/some/coerce-result-to-boolean.js b/test/staging/sm/AsyncIterator/prototype/some/coerce-result-to-boolean.js new file mode 100644 index 0000000000..1f31f13fc0 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/coerce-result-to-boolean.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- async-iteration +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +async function* gen(value) { + yield value; +} +const fn = x => x; +function check(value, expected) { + gen(value).some(fn).then(result => assert.sameValue(result, expected)); +} + +check(true, true); +check(1, true); +check([], true); +check({}, true); +check('test', true); + +check(false, false); +check(0, false); +check('', false); +check(null, false); +check(undefined, false); +check(NaN, false); +check(-0, false); +check(0n, false); +check(createIsHTMLDDA(), false); +check(Promise.resolve(false), false); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/descriptor.js b/test/staging/sm/AsyncIterator/prototype/some/descriptor.js new file mode 100644 index 0000000000..69b2d5ff74 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/descriptor.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of AsyncIterator.prototype.some +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'some'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/error-from-correct-realm.js b/test/staging/sm/AsyncIterator/prototype/some/error-from-correct-realm.js new file mode 100644 index 0000000000..e0e534a818 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/error-from-correct-realm.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +async function *gen() {} + +gen().some().then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TypeError, true); +}); + +otherGlobal.AsyncIterator.prototype.some.call(gen()).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue( + err instanceof otherGlobal.TypeError, + true, + 'TypeError comes from the realm of the method.', + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/fn-not-callable-throws.js b/test/staging/sm/AsyncIterator/prototype/some/fn-not-callable-throws.js new file mode 100644 index 0000000000..7cc3edaef1 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/fn-not-callable-throws.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function *gen() { + yield 1; +} + +function check(fn) { + gen().some(fn).then( + () => { + throw new Error('every should have thrown'); + }, + err => { + assert.sameValue(err instanceof TypeError, true); + } + ); +} + +check(); +check(undefined); +check(null); +check(0); +check(false); +check(''); +check(Symbol('')); +check({}); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/fn-throws-close-iterator.js b/test/staging/sm/AsyncIterator/prototype/some/fn-throws-close-iterator.js new file mode 100644 index 0000000000..4d2bbb4c83 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/fn-throws-close-iterator.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ done: this.closed }); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.some(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, true); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/some/interleaving-calls.js new file mode 100644 index 0000000000..e4a45b6a00 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/interleaving-calls.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const log = []; +async function* gen(n) { + log.push(`${n}`); + yield 1; + log.push(`${n}`); + yield 2; +} + +Promise.all([gen(1).some(() => {}), gen(2).some(() => {})]).then( + () => { + assert.sameValue( + log.join(' '), + '1 2 1 2', + ); + }, + err => { + throw err; + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/length.js b/test/staging/sm/AsyncIterator/prototype/some/length.js new file mode 100644 index 0000000000..da9ce8a586 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of AsyncIterator.prototype.some. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.some, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/name.js b/test/staging/sm/AsyncIterator/prototype/some/name.js new file mode 100644 index 0000000000..45dd02d01d --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of AsyncIterator.prototype.some. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.some, 'name'); +assert.sameValue(propDesc.value, 'some'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/next-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/some/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..83e4b6679e --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/next-throws-iterator-not-closed.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => {}; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.some(fn).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, false); +}); diff --git a/test/staging/sm/AsyncIterator/prototype/some/proxy.js b/test/staging/sm/AsyncIterator/prototype/some/proxy.js new file mode 100644 index 0000000000..fdecbeee29 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.some only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends AsyncIterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return Promise.resolve({done: false, value}); + } + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.some(x => x % 2 == 1).then(value => { + assert.sameValue(value, true); + + assert.sameValue( + log.join('\n'), + `get: some +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: return` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/return-false-if-none-match.js b/test/staging/sm/AsyncIterator/prototype/some/return-false-if-none-match.js new file mode 100644 index 0000000000..64fea05208 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/return-false-if-none-match.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 3; + yield 5; +} +const fn = x => x % 2 == 0; + +gen().some(fn).then(result => assert.sameValue(result, false)); + +async function* empty() {} +empty().some(x => x).then(result => assert.sameValue(result, false)); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/short-circuit-on-true.js b/test/staging/sm/AsyncIterator/prototype/some/short-circuit-on-true.js new file mode 100644 index 0000000000..5d5d7498b2 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/short-circuit-on-true.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} +const log = []; +const fn = (value) => { + log.push(value.toString()); + return value % 2 == 0; +}; + +gen().some(fn).then(result => { + assert.sameValue(result, true); + assert.sameValue(log.join(','), '1,2'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/some/this-not-iterator-throws.js new file mode 100644 index 0000000000..fd30eae2be --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/this-not-iterator-throws.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const fn = x => x; +function check(x) { + AsyncIterator.prototype.some.call(x, fn).then( + () => assert.sameValue(true, false, 'expected error'), + err => { + assert.sameValue(err instanceof TypeError, true); + } + ); +} + +check(); +check(undefined); +check({}); +check({next: 0}); + diff --git a/test/staging/sm/AsyncIterator/prototype/some/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/some/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..2b0bd819e7 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/some/value-throws-iterator-not-closed.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ + done: false, + get value() { + throw new TestError(); + } + }); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +iterator.some(x => x).then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-negative.js b/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-negative.js new file mode 100644 index 0000000000..825e9e2307 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-negative.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + `take` and `drop` throw eagerly when passed negative numbers, after rounding towards 0. +info: | + Iterator Helpers proposal 2.1.6.4 and 2.1.6.5 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen() {} +const iter = gen(); +const methods = [ + value => iter.take(value), + value => iter.drop(value), +]; + +for (const method of methods) { + assertThrowsInstanceOf(() => method(-1), RangeError); + assertThrowsInstanceOf(() => method(-Infinity), RangeError); + + // Both -0 and -0.9 round towards 0. + method(-0); + method(-0.9); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-non-integer.js b/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-non-integer.js new file mode 100644 index 0000000000..4d333b847b --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/take-drop-throw-eagerly-on-non-integer.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + `take` and `drop` throw eagerly when passed values that can't be converted to numbers. +info: | + Iterator Helpers proposal 2.1.6.4 and 2.1.6.5 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen() {} +const iter = gen(); +const methods = [ + value => iter.take(value), + value => iter.drop(value), +]; + +const objectWithToPrimitive = { + [Symbol.toPrimitive]() { + return {}; + } +}; + +for (const method of methods) { + assertThrowsInstanceOf(() => method(0n), TypeError); + assertThrowsInstanceOf(() => method(Symbol('')), TypeError); + assertThrowsInstanceOf(() => method(objectWithToPrimitive), TypeError); +} + diff --git a/test/staging/sm/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js b/test/staging/sm/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js new file mode 100644 index 0000000000..7f23118dcc --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js @@ -0,0 +1,50 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.take closes the iterator when remaining is 0. +info: | + Iterator Helpers proposal 2.1.6.4 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 'value'}; + } + + closed = false; + async return() { + this.closed = true; + return {done: true}; + } +} + +const iter = new TestIterator(); +const iterTake = iter.take(1); + +iterTake.next().then( + ({done, value}) => { + assert.sameValue(done, false); + assert.sameValue(value, 'value'); + assert.sameValue(iter.closed, false); + + iterTake.next().then( + ({done, value}) => { + assert.sameValue(done, true); + assert.sameValue(value, undefined); + assert.sameValue(iter.closed, true); + } + ); + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/take/length.js b/test/staging/sm/AsyncIterator/prototype/take/length.js new file mode 100644 index 0000000000..226a6f4ad7 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/take/length.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.take length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(AsyncIterator.prototype.take.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.take, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/take/name.js b/test/staging/sm/AsyncIterator/prototype/take/name.js new file mode 100644 index 0000000000..0d28911acc --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/take/name.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.take.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(AsyncIterator.prototype.take.name, 'take'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.take, 'name'); +assert.sameValue(propertyDescriptor.value, 'take'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/take/take-more-than-available.js b/test/staging/sm/AsyncIterator/prototype/take/take-more-than-available.js new file mode 100644 index 0000000000..b53fadcffe --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/take/take-more-than-available.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %AsyncIterator.prototype%.take returns if the iterator is done. +info: | + Iterator Helpers proposal 2.1.6.4 2. Repeat, + ... + c. Let next be ? Await(? IteratorNext(iterated, lastValue)). + d. If ? IteratorComplete(next) is false, return undefined. +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +async function* gen(values) { + yield* values; +} + +(async () => { + const iter = gen([1, 2]).take(10); + for (const expected of [1, 2]) { + const result = await iter.next(); + assert.sameValue(result.value, expected); + assert.sameValue(result.done, false); + } + const result = await iter.next(); + assert.sameValue(result.value, undefined); + assert.sameValue(result.done, true); +})(); + diff --git a/test/staging/sm/AsyncIterator/prototype/take/take.js b/test/staging/sm/AsyncIterator/prototype/take/take.js new file mode 100644 index 0000000000..6657f4d60a --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/take/take.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +let iter = gen().take(2); + +for (const v of [1, 2]) { + iter.next().then( + ({done, value}) => { + assert.sameValue(done, false); + assert.sameValue(value, v); + } + ); +} + +iter.next().then(({done}) => assert.sameValue(done, true)); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/async-writes.js b/test/staging/sm/AsyncIterator/prototype/toArray/async-writes.js new file mode 100644 index 0000000000..17c6851114 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/async-writes.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let x = {a: () => true}; + +async function* gen() { + yield x.a(); + yield x.a(); +} + +gen().toArray().then( + () => assert.sameValue(true, false, 'expected error'), + err => assert.sameValue(err instanceof Error, true), +); + +x.a = () => { + throw Error(); +}; + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/create-in-current-realm.js b/test/staging/sm/AsyncIterator/prototype/toArray/create-in-current-realm.js new file mode 100644 index 0000000000..f3adb5ed7c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/create-in-current-realm.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +gen().toArray().then(array => { + assert.sameValue(array instanceof Array, true); + assert.sameValue(array instanceof otherGlobal.Array, false); +}); + +otherGlobal.AsyncIterator.prototype.toArray.call(gen()).then(array => { + assert.sameValue(array instanceof Array, false); + assert.sameValue(array instanceof otherGlobal.Array, true); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/descriptor.js b/test/staging/sm/AsyncIterator/prototype/toArray/descriptor.js new file mode 100644 index 0000000000..755dd5debf --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/descriptor.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of AsyncIterator.prototype.toArray +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype, 'toArray'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/interleaving-calls.js b/test/staging/sm/AsyncIterator/prototype/toArray/interleaving-calls.js new file mode 100644 index 0000000000..461f76f414 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/interleaving-calls.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +const log = []; +async function* gen(n) { + log.push(`${n}`); + yield 1; + log.push(`${n}`); + yield 2; +} + +Promise.all([gen(1).toArray(), gen(2).toArray()]).then( + () => { + assert.sameValue( + log.join(' '), + '1 2 1 2', + ); + }, + err => { + throw err; + } +); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/iterator-empty.js b/test/staging/sm/AsyncIterator/prototype/toArray/iterator-empty.js new file mode 100644 index 0000000000..82f511be9d --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/iterator-empty.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() {} +gen().toArray().then(array => { + assert.sameValue(Array.isArray(array), true); + assert.sameValue(array.length, 0); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/length.js b/test/staging/sm/AsyncIterator/prototype/toArray/length.js new file mode 100644 index 0000000000..2e108f6191 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of AsyncIterator.prototype.toArray. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.toArray, 'length'); +assert.sameValue(propDesc.value, 0); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/name.js b/test/staging/sm/AsyncIterator/prototype/toArray/name.js new file mode 100644 index 0000000000..c4a7ddee58 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of AsyncIterator.prototype.toArray. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.toArray, 'name'); +assert.sameValue(propDesc.value, 'toArray'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/next-throws.js b/test/staging/sm/AsyncIterator/prototype/toArray/next-throws.js new file mode 100644 index 0000000000..204eaca266 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/next-throws.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestIterator extends AsyncIterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +iter.toArray().then(() => assert.sameValue(true, false, 'expected error'), err => { + assert.sameValue(err instanceof Error, true); + assert.sameValue(iter.closed, false); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/proxy.js b/test/staging/sm/AsyncIterator/prototype/toArray/proxy.js new file mode 100644 index 0000000000..fdd46757dc --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/proxy.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.toArray only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends AsyncIterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return Promise.resolve({done: false, value}); + } + return Promise.resolve({done: true}); + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.toArray().then(() => { + assert.sameValue( + log.join('\n'), + `get: toArray +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value` + ); +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/this-not-iterator-throws.js b/test/staging/sm/AsyncIterator/prototype/toArray/this-not-iterator-throws.js new file mode 100644 index 0000000000..1c44a88308 --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/this-not-iterator-throws.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + + +function check(x) { + AsyncIterator.prototype.toArray.call(x).then( + () => { + throw new Error('check should have been rejected'); + }, + err => { + assert.sameValue(err instanceof TypeError, true); + } + ); +} + +check(); +check(undefined); +check({}); +check({next: 0}); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/toArray.js b/test/staging/sm/AsyncIterator/prototype/toArray/toArray.js new file mode 100644 index 0000000000..a215d8faeb --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/toArray.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +async function* gen() { + yield 1; + yield 2; + yield 3; +} +assert.sameValue(Array.isArray(gen()), false); + +gen().toArray().then(array => { + assert.sameValue(Array.isArray(array), true); + assert.sameValue(array.length, 3); + + const expected = [1, 2, 3]; + for (const item of array) { + const expect = expected.shift(); + assert.sameValue(item, expect); + } +}); + diff --git a/test/staging/sm/AsyncIterator/prototype/toArray/value-throws-iterator-not-closed.js b/test/staging/sm/AsyncIterator/prototype/toArray/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..ca57594e4c --- /dev/null +++ b/test/staging/sm/AsyncIterator/prototype/toArray/value-throws-iterator-not-closed.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends AsyncIterator { + next() { + return Promise.resolve({ + done: false, + get value() { + throw new TestError(); + } + }); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +iterator.toArray().then( + () => { + throw new Error('toArray should have thrown'); + }, + err => { + assert.sameValue(err instanceof TestError, true); + assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); + } +); + diff --git a/test/staging/sm/Atomics/cross-compartment.js b/test/staging/sm/Atomics/cross-compartment.js new file mode 100644 index 0000000000..ea92192357 --- /dev/null +++ b/test/staging/sm/Atomics/cross-compartment.js @@ -0,0 +1,117 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal(); + +const intArrayConstructors = [ + otherGlobal.Int32Array, + otherGlobal.Int16Array, + otherGlobal.Int8Array, + otherGlobal.Uint32Array, + otherGlobal.Uint16Array, + otherGlobal.Uint8Array, +]; + +// Atomics.load +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 1; + + assert.sameValue(Atomics.load(ta, 0), 1); +} + +// Atomics.store +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + + Atomics.store(ta, 0, 1); + + assert.sameValue(ta[0], 1); +} + +// Atomics.compareExchange +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 1; + + let val = Atomics.compareExchange(ta, 0, 1, 2); + + assert.sameValue(val, 1); + assert.sameValue(ta[0], 2); +} + +// Atomics.exchange +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 1; + + let val = Atomics.exchange(ta, 0, 2); + + assert.sameValue(val, 1); + assert.sameValue(ta[0], 2); +} + +// Atomics.add +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 1; + + let val = Atomics.add(ta, 0, 2); + + assert.sameValue(val, 1); + assert.sameValue(ta[0], 3); +} + +// Atomics.sub +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 3; + + let val = Atomics.sub(ta, 0, 2); + + assert.sameValue(val, 3); + assert.sameValue(ta[0], 1); +} + +// Atomics.and +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 3; + + let val = Atomics.and(ta, 0, 1); + + assert.sameValue(val, 3); + assert.sameValue(ta[0], 1); +} + +// Atomics.or +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 2; + + let val = Atomics.or(ta, 0, 1); + + assert.sameValue(val, 2); + assert.sameValue(ta[0], 3); +} + +// Atomics.xor +for (let TA of intArrayConstructors) { + let ta = new TA(new otherGlobal.SharedArrayBuffer(4)); + ta[0] = 3; + + let val = Atomics.xor(ta, 0, 1); + + assert.sameValue(val, 3); + assert.sameValue(ta[0], 2); +} + diff --git a/test/staging/sm/Atomics/detached-buffers.js b/test/staging/sm/Atomics/detached-buffers.js new file mode 100644 index 0000000000..cdfeafcf99 --- /dev/null +++ b/test/staging/sm/Atomics/detached-buffers.js @@ -0,0 +1,102 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +const intArrayConstructors = [ + Int32Array, + Int16Array, + Int8Array, + Uint32Array, + Uint16Array, + Uint8Array, +]; + +function badValue(ta) { + return { + valueOf() { + $262.detachArrayBuffer(ta.buffer); + return 0; + } + }; +} + +// Atomics.load +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.load(ta, badValue(ta)), TypeError); +} + +// Atomics.store +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.store(ta, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.store(ta, 0, badValue(ta)), TypeError); +} + +// Atomics.compareExchange +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.compareExchange(ta, badValue(ta), 0, 0), TypeError); + assertThrowsInstanceOf(() => Atomics.compareExchange(ta, 0, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.compareExchange(ta, 0, 0, badValue(ta)), TypeError); +} + +// Atomics.exchange +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.exchange(ta, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.exchange(ta, 0, badValue(ta)), TypeError); +} + +// Atomics.add +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.add(ta, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.add(ta, 0, badValue(ta)), TypeError); +} + +// Atomics.sub +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.sub(ta, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.sub(ta, 0, badValue(ta)), TypeError); +} + +// Atomics.and +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.and(ta, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.and(ta, 0, badValue(ta)), TypeError); +} + +// Atomics.or +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.or(ta, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.or(ta, 0, badValue(ta)), TypeError); +} + +// Atomics.xor +for (let TA of intArrayConstructors) { + let ta = new TA(1); + + assertThrowsInstanceOf(() => Atomics.xor(ta, badValue(ta), 0), TypeError); + assertThrowsInstanceOf(() => Atomics.xor(ta, 0, badValue(ta)), TypeError); +} + diff --git a/test/staging/sm/BigInt/Number-conversion-rounding.js b/test/staging/sm/BigInt/Number-conversion-rounding.js new file mode 100644 index 0000000000..9b0155b167 --- /dev/null +++ b/test/staging/sm/BigInt/Number-conversion-rounding.js @@ -0,0 +1,253 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Any copyright is dedicated to the Public Domain. +// https://creativecommons.org/licenses/publicdomain/ + +/** + * Edge-case behavior at Number.MAX_VALUE and beyond til overflow to Infinity. + */ +function maxMagnitudeTests(isNegative) +{ + var sign = isNegative ? -1 : +1; + var signBigInt = isNegative ? -1n : 1n; + + const MAX_VALUE = isNegative ? -Number.MAX_VALUE : +Number.MAX_VALUE; + + // 2**971+2**972+...+2**1022+2**1023 + var maxMagnitudeNumber = 0; + for (let i = 971; i < 1024; i++) + maxMagnitudeNumber += 2**i; + maxMagnitudeNumber *= sign; + assert.sameValue(maxMagnitudeNumber, MAX_VALUE); + + // 2**971+2**972+...+2**1022+2**1023 + var maxMagnitudeNumberAsBigInt = 0n; + for (let i = 971n; i < 1024n; i++) + maxMagnitudeNumberAsBigInt += 2n**i; + maxMagnitudeNumberAsBigInt *= signBigInt; + var expectedMaxMagnitude = isNegative + ? -(2n**1024n) + 2n**971n + : 2n**1024n - 2n**971n; + assert.sameValue(maxMagnitudeNumberAsBigInt, expectedMaxMagnitude); + + // Initial sanity tests. + assert.sameValue(BigInt(maxMagnitudeNumber), maxMagnitudeNumberAsBigInt); + assert.sameValue(maxMagnitudeNumber, Number(maxMagnitudeNumberAsBigInt)); + + // Test conversion of BigInt values above Number.MAX_VALUE. + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 1n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 2n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 3n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 4n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 5n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 6n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 7n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 8n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 9n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 2n**20n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 2n**400n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 2n**800n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 2n**900n), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 2n**969n), MAX_VALUE); + + // For conversion purposes, rounding for values above Number.MAX_VALUE do + // rounding with respect to Number.MAX_VALUE and 2**1024 (which is treated as + // the "even" value -- so if the value to convert lies halfway between those two + // values, 2**1024 is selected). But if 2**1024 is the value that *would* have + // been chosen by this process, Infinity is substituted. + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * (2n**970n - 1n)), MAX_VALUE); + assert.sameValue(Number(maxMagnitudeNumberAsBigInt + signBigInt * 2n**970n), sign * Infinity); +} +maxMagnitudeTests(false); +maxMagnitudeTests(true); + +/** + * Simple single-Digit on x64, double-Digit on x86 tests. + */ + +assert.sameValue(BigInt(Number(2n**53n - 2n)), 2n**53n - 2n); +assert.sameValue(BigInt(Number(2n**53n - 1n)), 2n**53n - 1n); +assert.sameValue(BigInt(Number(2n**53n)), 2n**53n); +assert.sameValue(BigInt(Number(2n**53n + 1n)), 2n**53n); +assert.sameValue(BigInt(Number(2n**53n + 2n)), 2n**53n + 2n); +assert.sameValue(BigInt(Number(2n**53n + 3n)), 2n**53n + 4n); +assert.sameValue(BigInt(Number(2n**53n + 4n)), 2n**53n + 4n); +assert.sameValue(BigInt(Number(2n**53n + 5n)), 2n**53n + 4n); +assert.sameValue(BigInt(Number(2n**53n + 6n)), 2n**53n + 6n); +assert.sameValue(BigInt(Number(2n**53n + 7n)), 2n**53n + 8n); +assert.sameValue(BigInt(Number(2n**53n + 8n)), 2n**53n + 8n); + +assert.sameValue(BigInt(Number(2n**54n - 4n)), 2n**54n - 4n); +assert.sameValue(BigInt(Number(2n**54n - 3n)), 2n**54n - 4n); +assert.sameValue(BigInt(Number(2n**54n - 2n)), 2n**54n - 2n); +assert.sameValue(BigInt(Number(2n**54n - 1n)), 2n**54n); +assert.sameValue(BigInt(Number(2n**54n)), 2n**54n); +assert.sameValue(BigInt(Number(2n**54n + 1n)), 2n**54n); +assert.sameValue(BigInt(Number(2n**54n + 2n)), 2n**54n); +assert.sameValue(BigInt(Number(2n**54n + 3n)), 2n**54n + 4n); +assert.sameValue(BigInt(Number(2n**54n + 4n)), 2n**54n + 4n); +assert.sameValue(BigInt(Number(2n**54n + 5n)), 2n**54n + 4n); +assert.sameValue(BigInt(Number(2n**54n + 6n)), 2n**54n + 8n); +assert.sameValue(BigInt(Number(2n**54n + 7n)), 2n**54n + 8n); +assert.sameValue(BigInt(Number(2n**54n + 8n)), 2n**54n + 8n); + +assert.sameValue(BigInt(Number(2n**55n - 8n)), 2n**55n - 8n); +assert.sameValue(BigInt(Number(2n**55n - 7n)), 2n**55n - 8n); +assert.sameValue(BigInt(Number(2n**55n - 6n)), 2n**55n - 8n); +assert.sameValue(BigInt(Number(2n**55n - 5n)), 2n**55n - 4n); +assert.sameValue(BigInt(Number(2n**55n - 4n)), 2n**55n - 4n); +assert.sameValue(BigInt(Number(2n**55n - 3n)), 2n**55n - 4n); +assert.sameValue(BigInt(Number(2n**55n - 2n)), 2n**55n); +assert.sameValue(BigInt(Number(2n**55n - 1n)), 2n**55n); +assert.sameValue(BigInt(Number(2n**55n)), 2n**55n); +assert.sameValue(BigInt(Number(2n**55n + 1n)), 2n**55n); +assert.sameValue(BigInt(Number(2n**55n + 2n)), 2n**55n); +assert.sameValue(BigInt(Number(2n**55n + 3n)), 2n**55n); +assert.sameValue(BigInt(Number(2n**55n + 4n)), 2n**55n); +assert.sameValue(BigInt(Number(2n**55n + 5n)), 2n**55n + 8n); +assert.sameValue(BigInt(Number(2n**55n + 6n)), 2n**55n + 8n); +assert.sameValue(BigInt(Number(2n**55n + 7n)), 2n**55n + 8n); +assert.sameValue(BigInt(Number(2n**55n + 8n)), 2n**55n + 8n); +assert.sameValue(BigInt(Number(2n**55n + 9n)), 2n**55n + 8n); +assert.sameValue(BigInt(Number(2n**55n + 10n)), 2n**55n + 8n); +assert.sameValue(BigInt(Number(2n**55n + 11n)), 2n**55n + 8n); +assert.sameValue(BigInt(Number(2n**55n + 12n)), 2n**55n + 16n); +assert.sameValue(BigInt(Number(2n**55n + 13n)), 2n**55n + 16n); +assert.sameValue(BigInt(Number(2n**55n + 14n)), 2n**55n + 16n); +assert.sameValue(BigInt(Number(2n**55n + 15n)), 2n**55n + 16n); +assert.sameValue(BigInt(Number(2n**55n + 16n)), 2n**55n + 16n); + + +/** + * Simple double-Digit on x64, triple-Digit on x86 tests. + */ + +// The tests below that aren't subtracting bits will have no bits in the +// ultimate significand from the most-significant digit (because of the implicit +// one being excluded). +assert.sameValue(BigInt(Number(2n**64n - 2n**11n)), 2n**64n - 2n**11n); +assert.sameValue(BigInt(Number(2n**64n - 2n**11n + 2n**10n - 1n)), 2n**64n - 2n**11n); +assert.sameValue(BigInt(Number(2n**64n - 2n**11n + 2n**10n)), 2n**64n); +assert.sameValue(BigInt(Number(2n**64n - 2n**10n)), 2n**64n); +assert.sameValue(BigInt(Number(2n**64n)), 2n**64n); +assert.sameValue(BigInt(Number(2n**64n + 1n)), 2n**64n); +assert.sameValue(BigInt(Number(2n**64n + 2n**5n)), 2n**64n); +assert.sameValue(BigInt(Number(2n**64n + 2n**10n)), 2n**64n); +assert.sameValue(BigInt(Number(2n**64n + 2n**11n)), 2n**64n); +assert.sameValue(BigInt(Number(2n**64n + 2n**11n + 1n)), 2n**64n + 2n**12n); +assert.sameValue(BigInt(Number(2n**64n + 2n**12n)), 2n**64n + 2n**12n); +assert.sameValue(BigInt(Number(2n**64n + 2n**12n + 1n)), 2n**64n + 2n**12n); +assert.sameValue(BigInt(Number(2n**64n + 2n**12n + 2n**5n)), 2n**64n + 2n**12n); +assert.sameValue(BigInt(Number(2n**64n + 2n**12n + 2n**10n)), 2n**64n + 2n**12n); +assert.sameValue(BigInt(Number(2n**64n + 2n**12n + 2n**11n - 1n)), 2n**64n + 2n**12n); +assert.sameValue(BigInt(Number(2n**64n + 2n**12n + 2n**11n)), 2n**64n + 2n**13n); +assert.sameValue(BigInt(Number(2n**64n + 2n**12n + 2n**11n + 1n)), 2n**64n + 2n**13n); + +// These tests *will* have a bit from the most-significant digit in the ultimate +// significand. +assert.sameValue(BigInt(Number(2n**65n - 2n**12n)), 2n**65n - 2n**12n); +assert.sameValue(BigInt(Number(2n**65n - 2n**12n + 2n**11n - 1n)), 2n**65n - 2n**12n); +assert.sameValue(BigInt(Number(2n**65n - 2n**12n + 2n**11n)), 2n**65n); +assert.sameValue(BigInt(Number(2n**65n - 2n**11n)), 2n**65n); +assert.sameValue(BigInt(Number(2n**65n)), 2n**65n); +assert.sameValue(BigInt(Number(2n**65n + 1n)), 2n**65n); +assert.sameValue(BigInt(Number(2n**65n + 2n**5n)), 2n**65n); +assert.sameValue(BigInt(Number(2n**65n + 2n**11n)), 2n**65n); +assert.sameValue(BigInt(Number(2n**65n + 2n**12n)), 2n**65n); +assert.sameValue(BigInt(Number(2n**65n + 2n**12n + 1n)), 2n**65n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**13n)), 2n**65n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**13n + 1n)), 2n**65n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**13n + 2n**5n)), 2n**65n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**13n + 2n**11n)), 2n**65n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**13n + 2n**12n - 1n)), 2n**65n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**13n + 2n**12n)), 2n**65n + 2n**14n); +assert.sameValue(BigInt(Number(2n**65n + 2n**13n + 2n**12n + 1n)), 2n**65n + 2n**14n); + +// ...and in these tests, the contributed bit from the most-significant digit +// is additionally nonzero. +assert.sameValue(BigInt(Number(2n**65n + 2n**64n)), 2n**65n + 2n**64n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 1n)), 2n**65n + 2n**64n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**5n)), 2n**65n + 2n**64n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**11n)), 2n**65n + 2n**64n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**12n)), 2n**65n + 2n**64n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**12n + 1n)), 2n**65n + 2n**64n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**13n)), 2n**65n + 2n**64n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**13n + 1n)), 2n**65n + 2n**64n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**13n + 2n**5n)), 2n**65n + 2n**64n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**13n + 2n**11n)), 2n**65n + 2n**64n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**13n + 2n**12n - 1n)), 2n**65n + 2n**64n + 2n**13n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**13n + 2n**12n)), 2n**65n + 2n**64n + 2n**14n); +assert.sameValue(BigInt(Number(2n**65n + 2n**64n + 2n**13n + 2n**12n + 1n)), 2n**65n + 2n**64n + 2n**14n); + +/** + * Versions of the testing above with all the high-order bits massively bumped + * upward to test that super-low bits, not just bits in high digits, are + * properly accounted for in rounding. + */ + +// The tests below that aren't subtracting bits will have no bits in the +// ultimate significand from the most-significant digit (because of the implicit +// one being excluded). +assert.sameValue(BigInt(Number(2n**940n - 2n**887n + 1n)), 2n**940n - 2n**887n); +assert.sameValue(BigInt(Number(2n**940n - 2n**887n + 2n**886n - 1n)), 2n**940n - 2n**887n); +assert.sameValue(BigInt(Number(2n**940n - 2n**887n + 2n**886n)), 2n**940n); +assert.sameValue(BigInt(Number(2n**940n - 2n**886n)), 2n**940n); +assert.sameValue(BigInt(Number(2n**940n)), 2n**940n); +assert.sameValue(BigInt(Number(2n**940n + 1n)), 2n**940n); +assert.sameValue(BigInt(Number(2n**940n + 2n**880n)), 2n**940n); +assert.sameValue(BigInt(Number(2n**940n + 2n**885n)), 2n**940n); +assert.sameValue(BigInt(Number(2n**940n + 2n**887n)), 2n**940n); +assert.sameValue(BigInt(Number(2n**940n + 2n**887n + 1n)), 2n**940n + 2n**888n); +assert.sameValue(BigInt(Number(2n**940n + 2n**888n)), 2n**940n + 2n**888n); +assert.sameValue(BigInt(Number(2n**940n + 2n**888n + 1n)), 2n**940n + 2n**888n); +assert.sameValue(BigInt(Number(2n**940n + 2n**888n + 2n**5n)), 2n**940n + 2n**888n); +assert.sameValue(BigInt(Number(2n**940n + 2n**888n + 2n**12n)), 2n**940n + 2n**888n); +assert.sameValue(BigInt(Number(2n**940n + 2n**888n + 2n**887n - 1n)), 2n**940n + 2n**888n); +assert.sameValue(BigInt(Number(2n**940n + 2n**888n + 2n**887n)), 2n**940n + 2n**889n); +assert.sameValue(BigInt(Number(2n**940n + 2n**888n + 2n**887n + 1n)), 2n**940n + 2n**889n); + +// These tests *will* have a bit from the most-significant digit in the ultimate +// significand. +assert.sameValue(BigInt(Number(2n**941n - 2n**888n)), 2n**941n - 2n**888n); +assert.sameValue(BigInt(Number(2n**941n - 2n**888n + 2n**887n - 1n)), 2n**941n - 2n**888n); +assert.sameValue(BigInt(Number(2n**941n - 2n**888n + 2n**887n)), 2n**941n); +assert.sameValue(BigInt(Number(2n**941n - 2n**887n)), 2n**941n); +assert.sameValue(BigInt(Number(2n**941n)), 2n**941n); +assert.sameValue(BigInt(Number(2n**941n + 1n)), 2n**941n); +assert.sameValue(BigInt(Number(2n**941n + 2n**881n)), 2n**941n); +assert.sameValue(BigInt(Number(2n**941n + 2n**886n)), 2n**941n); +assert.sameValue(BigInt(Number(2n**941n + 2n**888n)), 2n**941n); +assert.sameValue(BigInt(Number(2n**941n + 2n**888n + 1n)), 2n**941n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**889n)), 2n**941n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**889n + 1n)), 2n**941n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**889n + 2n**5n)), 2n**941n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**889n + 2n**12n)), 2n**941n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**889n + 2n**888n - 1n)), 2n**941n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**889n + 2n**888n)), 2n**941n + 2n**890n); +assert.sameValue(BigInt(Number(2n**941n + 2n**889n + 2n**888n + 1n)), 2n**941n + 2n**890n); + +// ...and in these tests, the contributed bit from the most-significant digit +// is additionally nonzero. +assert.sameValue(BigInt(Number(2n**941n + 2n**940n)), 2n**941n + 2n**940n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 1n)), 2n**941n + 2n**940n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**881n)), 2n**941n + 2n**940n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**886n)), 2n**941n + 2n**940n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**888n)), 2n**941n + 2n**940n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**888n + 1n)), 2n**941n + 2n**940n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**889n)), 2n**941n + 2n**940n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**889n + 1n)), 2n**941n + 2n**940n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**889n + 2n**5n)), 2n**941n + 2n**940n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**889n + 2n**12n)), 2n**941n + 2n**940n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**889n + 2n**888n - 1n)), 2n**941n + 2n**940n + 2n**889n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**889n + 2n**888n)), 2n**941n + 2n**940n + 2n**890n); +assert.sameValue(BigInt(Number(2n**941n + 2n**940n + 2n**889n + 2n**888n + 1n)), 2n**941n + 2n**940n + 2n**890n); + diff --git a/test/staging/sm/BigInt/decimal.js b/test/staging/sm/BigInt/decimal.js new file mode 100644 index 0000000000..acbdce00b0 --- /dev/null +++ b/test/staging/sm/BigInt/decimal.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Any copyright is dedicated to the Public Domain. +// https://creativecommons.org/licenses/publicdomain/ + +// Check base-10 BigInt string conversion +const decimalTests = [ + [32n, -1n, 1n, "4294967295"], + [32n, -1n, -1n, "-4294967295"], + [32n, 0n, 1n, "4294967296"], + [32n, 0n, -1n, "-4294967296"], + [32n, 1n, 1n, "4294967297"], + [32n, 1n, -1n, "-4294967297"], + [64n, -1n, 1n, "18446744073709551615"], + [64n, -1n, -1n, "-18446744073709551615"], + [64n, 0n, 1n, "18446744073709551616"], + [64n, 0n, -1n, "-18446744073709551616"], + [64n, 1n, 1n, "18446744073709551617"], + [64n, 1n, -1n, "-18446744073709551617"], + [128n, -1n, 1n, "340282366920938463463374607431768211455"], + [128n, -1n, -1n, "-340282366920938463463374607431768211455"], + [128n, 0n, 1n, "340282366920938463463374607431768211456"], + [128n, 0n, -1n, "-340282366920938463463374607431768211456"], + [128n, 1n, 1n, "340282366920938463463374607431768211457"], + [128n, 1n, -1n, "-340282366920938463463374607431768211457"], +]; +for (const [power, offset, sign, result] of decimalTests) { + assert.sameValue(((2n**power+offset)*sign).toString(), + result); +} + diff --git a/test/staging/sm/BigInt/large-bit-length.js b/test/staging/sm/BigInt/large-bit-length.js new file mode 100644 index 0000000000..64479a92d0 --- /dev/null +++ b/test/staging/sm/BigInt/large-bit-length.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Any copyright is dedicated to the Public Domain. +// https://creativecommons.org/licenses/publicdomain/ + +function test(thunk, result) { + let val, err; + try { + val = thunk(); + } catch (e) { + err = e; + } + if (err) { + assert.sameValue(err instanceof RangeError, true); + } else { + assert.sameValue(val, result); + } +} + +const UINT32_MAX = 2**32-1; + +// Check that BigInt.asIntN and BigInt.asUintN either return correct results or +// throw RangeErrors for large |bits| arguments. GMP uses a type equivalent to +// 'unsigned long' for bit counts, which may be too small to represent all JS +// integer indexes. +for (let bits of [UINT32_MAX-1, UINT32_MAX, UINT32_MAX+1, Number.MAX_SAFE_INTEGER]) { + test(() => BigInt.asIntN(bits, 1n), 1n); + test(() => BigInt.asIntN(bits, 0n), 0n); + test(() => BigInt.asIntN(bits, -1n), -1n); + test(() => BigInt.asUintN(bits, 1n), 1n); + test(() => BigInt.asUintN(bits, 0n), 0n); + // Skip testing asUintN with negative BigInts since it could OOM. +} + diff --git a/test/staging/sm/BigInt/mod.js b/test/staging/sm/BigInt/mod.js new file mode 100644 index 0000000000..d9a3015f26 --- /dev/null +++ b/test/staging/sm/BigInt/mod.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Any copyright is dedicated to the Public Domain. +// https://creativecommons.org/licenses/publicdomain/ + +// Check that |x % x| returns zero when |x| contains multiple digits +assert.sameValue(0x10000000000000000n % 0x10000000000000000n, 0n); +assert.sameValue(-0x10000000000000000n % -0x10000000000000000n, 0n); + diff --git a/test/staging/sm/BigInt/property-name.js b/test/staging/sm/BigInt/property-name.js new file mode 100644 index 0000000000..7cef596427 --- /dev/null +++ b/test/staging/sm/BigInt/property-name.js @@ -0,0 +1,203 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// BigInt literals as property keys. +{ + let o = { + 0n: "0", + 1n: "1", + + // 2**31 + 2147483647n: "2^31-1", + 2147483648n: "2^31", + 2147483649n: "2^31+1", + + // 2**32 + 4294967295n: "2^32-1", + 4294967296n: "2^32", + 4294967297n: "2^32+1", + + // 2n**63n + 9223372036854775807n: "2^63-1", + 9223372036854775808n: "2^63", + 9223372036854775809n: "2^63+1", + + // 2n**64n + 18446744073709551615n: "2^64-1", + 18446744073709551616n: "2^64", + 18446744073709551617n: "2^64+1", + }; + + assert.sameValue(o[0], "0"); + assert.sameValue(o[1], "1"); + + assert.sameValue(o[2147483647], "2^31-1"); + assert.sameValue(o[2147483648], "2^31"); + assert.sameValue(o[2147483649], "2^31+1"); + + assert.sameValue(o[4294967295], "2^32-1"); + assert.sameValue(o[4294967296], "2^32"); + assert.sameValue(o[4294967297], "2^32+1"); + + assert.sameValue(o["9223372036854775807"], "2^63-1"); + assert.sameValue(o["9223372036854775808"], "2^63"); + assert.sameValue(o["9223372036854775809"], "2^63+1"); + + assert.sameValue(o["18446744073709551615"], "2^64-1"); + assert.sameValue(o["18446744073709551616"], "2^64"); + assert.sameValue(o["18446744073709551617"], "2^64+1"); +} + +// With non-decimal different base. +{ + let o = { + 0b1n: "1", + 0o2n: "2", + 0x3n: "3", + }; + + assert.sameValue(o[1], "1"); + assert.sameValue(o[2], "2"); + assert.sameValue(o[3], "3"); +} + +// With numeric separators. +{ + let o = { + 1_2_3n: "123", + }; + + assert.sameValue(o[123], "123"); +} + +// BigInt literals as method property names. +{ + let o = { + 1n() {}, + *2n() {}, + async 3n() {}, + async* 4n() {}, + get 5n() {}, + set 6n(x) {}, + }; + + assert.compareArray(Object.getOwnPropertyNames(o), [ + "1", "2", "3", "4", "5", "6", + ]); + + assert.sameValue(o[1].name, "1"); + assert.sameValue(o[2].name, "2"); + assert.sameValue(o[3].name, "3"); + assert.sameValue(o[4].name, "4"); + assert.sameValue(Object.getOwnPropertyDescriptor(o, 5).get.name, "get 5"); + assert.sameValue(Object.getOwnPropertyDescriptor(o, 6).set.name, "set 6"); +} + +// BigInt literals as class method property names. +{ + class C { + 1n() {} + *2n() {} + async 3n() {} + async* 4n() {} + get 5n() {} + set 6n(x) {} + } + let o = C.prototype; + + assert.compareArray(Object.getOwnPropertyNames(o), [ + "1", "2", "3", "4", "5", "6", + "constructor", + ]); + + assert.sameValue(o[1].name, "1"); + assert.sameValue(o[2].name, "2"); + assert.sameValue(o[3].name, "3"); + assert.sameValue(o[4].name, "4"); + assert.sameValue(Object.getOwnPropertyDescriptor(o, 5).get.name, "get 5"); + assert.sameValue(Object.getOwnPropertyDescriptor(o, 6).set.name, "set 6"); +} + +// BigInt literals as static class method property names. +{ + class C { + static 1n() {} + static *2n() {} + static async 3n() {} + static async* 4n() {} + static get 5n() {} + static set 6n(x) {} + } + let o = C; + + // NB: Sort names because lazily resolved "length" and "name" properties are + // inserted in the wrong order. + assert.compareArray(Object.getOwnPropertyNames(o).sort(), [ + "1", "2", "3", "4", "5", "6", + "length", "name", "prototype", + ]); + + assert.sameValue(o[1].name, "1"); + assert.sameValue(o[2].name, "2"); + assert.sameValue(o[3].name, "3"); + assert.sameValue(o[4].name, "4"); + assert.sameValue(Object.getOwnPropertyDescriptor(o, 5).get.name, "get 5"); + assert.sameValue(Object.getOwnPropertyDescriptor(o, 6).set.name, "set 6"); +} + +// BigInt literals as class field property names. +{ + let o = new class { + 1n; + 2n = "ok"; + }; + + assert.sameValue(o[1], undefined); + assert.sameValue(o[2], "ok"); +} + +// In binding destructuring contexts. +{ + let {0n: a} = ["ok"]; + assert.sameValue(a, "ok"); +} + +// In binding destructuring contexts with object rest pattern. +{ + let {0n: a, ...b} = ["ok", "test"]; + assert.sameValue(a, "ok"); + assert.compareArray(Object.getOwnPropertyNames(b), ["1"]); +} + +// In assignment destructuring contexts. +{ + let a; + ({0n: a} = ["ok"]); + assert.sameValue(a, "ok"); +} + +// In assignment destructuring contexts with object rest pattern. +{ + let a, b; + ({0n: a, ...b} = ["ok", "test"]); + assert.sameValue(a, "ok"); + assert.compareArray(Object.getOwnPropertyNames(b), ["1"]); +} + +// BigInt literals as inferred names. +{ + let o = { + 0xan: function(){}, + }; + + assert.sameValue(o[10].name, "10"); +} + diff --git a/test/staging/sm/Boolean/15.6.4.2.js b/test/staging/sm/Boolean/15.6.4.2.js new file mode 100644 index 0000000000..b356c17ace --- /dev/null +++ b/test/staging/sm/Boolean/15.6.4.2.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(raisesException(TypeError)('Boolean.prototype.toString.call(42)'), true); +assert.sameValue(raisesException(TypeError)('Boolean.prototype.toString.call("")'), true); +assert.sameValue(raisesException(TypeError)('Boolean.prototype.toString.call({})'), true); +assert.sameValue(raisesException(TypeError)('Boolean.prototype.toString.call(null)'), true); +assert.sameValue(raisesException(TypeError)('Boolean.prototype.toString.call([])'), true); +assert.sameValue(raisesException(TypeError)('Boolean.prototype.toString.call(undefined)'), true); +assert.sameValue(raisesException(TypeError)('Boolean.prototype.toString.call(new String())'), true); + +assert.sameValue(completesNormally('Boolean.prototype.toString.call(true)'), true); +assert.sameValue(completesNormally('Boolean.prototype.toString.call(new Boolean(true))'), true); + diff --git a/test/staging/sm/Boolean/no-boolean-toJSON.js b/test/staging/sm/Boolean/no-boolean-toJSON.js new file mode 100644 index 0000000000..bb89e2002d --- /dev/null +++ b/test/staging/sm/Boolean/no-boolean-toJSON.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Author: Tom Schuster + */ + +JSON.stringify(new Boolean(false), function(k, v) { + assert.sameValue(typeof v, "object"); +}); + +assert.sameValue(Boolean.prototype.hasOwnProperty('toJSON'), false); + +Object.prototype.toJSON = function() { return 2; }; +assert.sameValue(JSON.stringify(new Boolean(true)), "2"); + diff --git a/test/staging/sm/DataView/detach-after-construction.js b/test/staging/sm/DataView/detach-after-construction.js new file mode 100644 index 0000000000..1234e4b1d3 --- /dev/null +++ b/test/staging/sm/DataView/detach-after-construction.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var buf = new ArrayBuffer([1,2]); +var bufView = new DataView(buf); + +$262.detachArrayBuffer(buf); + +assertThrowsInstanceOf(() => bufView.getInt8(0), TypeError); + diff --git a/test/staging/sm/DataView/get-set-index-range.js b/test/staging/sm/DataView/get-set-index-range.js new file mode 100644 index 0000000000..e8a567ea88 --- /dev/null +++ b/test/staging/sm/DataView/get-set-index-range.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var buffer = new ArrayBuffer(2); +var view = new DataView(buffer); + +function check(view) { + for (let fun of ['getInt8', 'setInt8', 'getInt16', 'setInt16']) { + assertThrowsInstanceOf(() => view[fun](-10), RangeError); + assertThrowsInstanceOf(() => view[fun](-Infinity), RangeError); + assertThrowsInstanceOf(() => view[fun](Infinity), RangeError); + + assertThrowsInstanceOf(() => view[fun](Math.pow(2, 53)), RangeError); + assertThrowsInstanceOf(() => view[fun](Math.pow(2, 54)), RangeError); + } +} + +check(view); + +for (let fun of ['getInt8', 'getInt16']) { + assert.sameValue(view[fun](0), 0); + assert.sameValue(view[fun](undefined), 0); + assert.sameValue(view[fun](NaN), 0); +} + +if ('$262.detachArrayBuffer' in this) { + // ToIndex is called before detachment check, so we can tell the difference + // between a ToIndex failure and a real out of bounds failure. + $262.detachArrayBuffer(buffer); + + check(view); + + assertThrowsInstanceOf(() => view.getInt8(0), TypeError); + assertThrowsInstanceOf(() => view.setInt8(0, 0), TypeError); + assertThrowsInstanceOf(() => view.getInt8(Math.pow(2, 53) - 1), TypeError); + assertThrowsInstanceOf(() => view.setInt8(Math.pow(2, 53) - 1, 0), TypeError); +} + diff --git a/test/staging/sm/DataView/getter-name.js b/test/staging/sm/DataView/getter-name.js new file mode 100644 index 0000000000..67df56b47b --- /dev/null +++ b/test/staging/sm/DataView/getter-name.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180290; +var summary = 'DataView getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Object.getOwnPropertyDescriptor(DataView.prototype, "buffer").get.name, "get buffer"); +assert.sameValue(Object.getOwnPropertyDescriptor(DataView.prototype, "byteLength").get.name, "get byteLength"); +assert.sameValue(Object.getOwnPropertyDescriptor(DataView.prototype, "byteOffset").get.name, "get byteOffset"); + diff --git a/test/staging/sm/Date/UTC-convert-all-arguments.js b/test/staging/sm/Date/UTC-convert-all-arguments.js new file mode 100644 index 0000000000..50312f04ab --- /dev/null +++ b/test/staging/sm/Date/UTC-convert-all-arguments.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1160356; +var summary = + "Date.UTC must convert *all* arguments to number, not return NaN early if " + + "a non-finite argument is encountered"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(f, i) +{ + try + { + f(); + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e, 42, "index " + i + ": expected 42, got " + e); + } +} + +var bad = + { toString: function() { throw 17; }, valueOf: function() { throw 42; } }; + +var args = + [ + [bad], + + [NaN, bad], + [Infinity, bad], + [1970, bad], + + [1970, NaN, bad], + [1970, Infinity, bad], + [1970, 4, bad], + + [1970, 4, NaN, bad], + [1970, 4, Infinity, bad], + [1970, 4, 17, bad], + + [1970, 4, 17, NaN, bad], + [1970, 4, 17, Infinity, bad], + [1970, 4, 17, 13, bad], + + [1970, 4, 17, 13, NaN, bad], + [1970, 4, 17, 13, Infinity, bad], + [1970, 4, 17, 13, 37, bad], + + [1970, 4, 17, 13, 37, NaN, bad], + [1970, 4, 17, 13, 37, Infinity, bad], + [1970, 4, 17, 13, 37, 23, bad], + ]; + +for (var i = 0, len = args.length; i < len; i++) + expectThrowTypeError(function() { Date.UTC.apply(null, args[i]); }, i); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/constructor-convert-all-arguments.js b/test/staging/sm/Date/constructor-convert-all-arguments.js new file mode 100644 index 0000000000..c5949e42a8 --- /dev/null +++ b/test/staging/sm/Date/constructor-convert-all-arguments.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1160356; +var summary = + "new Date(...) must convert *all* arguments to number, not return NaN " + + "early if a non-finite argument is encountered"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(f, i) +{ + try + { + f(); + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e, 42, "index " + i + ": expected 42, got " + e); + } +} + +var bad = + { toString: function() { throw 17; }, valueOf: function() { throw 42; } }; + +var funcs = + [ + function() { new Date(bad); }, + + function() { new Date(NaN, bad); }, + function() { new Date(Infinity, bad); }, + function() { new Date(1970, bad); }, + + function() { new Date(1970, NaN, bad); }, + function() { new Date(1970, Infinity, bad); }, + function() { new Date(1970, 4, bad); }, + + function() { new Date(1970, 4, NaN, bad); }, + function() { new Date(1970, 4, Infinity, bad); }, + function() { new Date(1970, 4, 17, bad); }, + + function() { new Date(1970, 4, 17, NaN, bad); }, + function() { new Date(1970, 4, 17, Infinity, bad); }, + function() { new Date(1970, 4, 17, 13, bad); }, + + function() { new Date(1970, 4, 17, 13, NaN, bad); }, + function() { new Date(1970, 4, 17, 13, Infinity, bad); }, + function() { new Date(1970, 4, 17, 13, 37, bad); }, + + function() { new Date(1970, 4, 17, 13, 37, NaN, bad); }, + function() { new Date(1970, 4, 17, 13, 37, Infinity, bad); }, + function() { new Date(1970, 4, 17, 13, 37, 23, bad); }, + ]; + +for (var i = 0, len = funcs.length; i < len; i++) + expectThrowTypeError(funcs[i]); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/constructor-one-Date-argument.js b/test/staging/sm/Date/constructor-one-Date-argument.js new file mode 100644 index 0000000000..38923dfeb8 --- /dev/null +++ b/test/staging/sm/Date/constructor-one-Date-argument.js @@ -0,0 +1,45 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1187233; +var summary = + "Passing a Date object to |new Date()| should copy it, not convert it to " + + "a primitive and create it from that."; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +Date.prototype.toString = Date.prototype.valueOf = null; +var d = new Date(new Date(8675309)); +assert.sameValue(d.getTime(), 8675309); + +Date.prototype.valueOf = () => 42; +d = new Date(new Date(8675309)); +assert.sameValue(d.getTime(), 8675309); + +var D = createNewGlobal().Date; + +D.prototype.toString = D.prototype.valueOf = null; +var d = new Date(new D(3141592654)); +assert.sameValue(d.getTime(), 3141592654); + +D.prototype.valueOf = () => 525600; +d = new Date(new D(3141592654)); +assert.sameValue(d.getTime(), 3141592654); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/constructor-one-argument.js b/test/staging/sm/Date/constructor-one-argument.js new file mode 100644 index 0000000000..8b5b047f90 --- /dev/null +++ b/test/staging/sm/Date/constructor-one-argument.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 738511; +var summary = + "new Date(value) should call ToPrimitive on value before testing for " + + "string-ness"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(new Date(new String("2012-01-31T00:00:00.000Z")).valueOf(), + 1327968000000, + "Date constructor passed a String object should parse it"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/defaultvalue.js b/test/staging/sm/Date/defaultvalue.js new file mode 100644 index 0000000000..ece5ded2e7 --- /dev/null +++ b/test/staging/sm/Date/defaultvalue.js @@ -0,0 +1,195 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 645464; +var summary = + "[[DefaultValue]] behavior wrong for Date with overridden valueOf/toString"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function allTests() +{ + var DS = new Date(2010, 1, 1).toString(); + + // equality + + var d = new Date(2010, 1, 1); + assert.sameValue(d == DS, true); + + var d2 = new Date(2010, 1, 1); + d2.valueOf = function() { assert.sameValue(arguments.length, 0); return 17; }; + assert.sameValue(d2 == DS, true); + + var d3 = new Date(2010, 1, 1); + d3.toString = function() { return 42; }; + assert.sameValue(d3 == 42, true); + + function testEquality() + { + var d = new Date(2010, 1, 1); + assert.sameValue(d == DS, true); + + var d2 = new Date(2010, 1, 1); + d2.valueOf = function() { assert.sameValue(arguments.length, 0); return 17; }; + assert.sameValue(d2 == DS, true); + + var d3 = new Date(2010, 1, 1); + d3.toString = function() { return 42; }; + assert.sameValue(d3 == 42, true); + } + testEquality(); + + + // addition of Date to number + + var d = new Date(2010, 1, 1); + assert.sameValue(d + 5, DS + "5"); + + var d2 = new Date(2010, 1, 1); + d2.toString = function() { return 9; }; + assert.sameValue(d2 + 3, 9 + 3); + + var d3 = new Date(2010, 1, 1); + d3.valueOf = function() { assert.sameValue(arguments.length, 0); return 17; }; + assert.sameValue(d3 + 5, DS + "5"); + + function testDateNumberAddition() + { + var d = new Date(2010, 1, 1); + assert.sameValue(d + 5, DS + "5"); + + var d2 = new Date(2010, 1, 1); + d2.toString = function() { return 9; }; + assert.sameValue(d2 + 3, 9 + 3); + + var d3 = new Date(2010, 1, 1); + d3.valueOf = function() { assert.sameValue(arguments.length, 0); return 17; }; + assert.sameValue(d3 + 5, DS + "5"); + } + testDateNumberAddition(); + + + // addition of Date to Date + + var d = new Date(2010, 1, 1); + assert.sameValue(d + d, DS + DS); + + var d2 = new Date(2010, 1, 1); + d2.toString = function() { return 5; }; + assert.sameValue(d2 + d2, 10); + + var d3 = new Date(2010, 1, 1); + d3.valueOf = function() { assert.sameValue(arguments.length, 0); return 8.5; }; + assert.sameValue(d3 + d3, DS + DS); + + function testDateDateAddition() + { + var d = new Date(2010, 1, 1); + assert.sameValue(d + d, DS + DS); + + var d2 = new Date(2010, 1, 1); + d2.toString = function() { return 5; }; + assert.sameValue(d2 + d2, 10); + + var d3 = new Date(2010, 1, 1); + d3.valueOf = function() { assert.sameValue(arguments.length, 0); return 8.5; }; + assert.sameValue(d3 + d3, DS + DS); + } + testDateDateAddition(); + + + // Date as bracketed property name + + var obj = { 8: 42, 9: 73 }; + obj[DS] = 17; + + var d = new Date(2010, 1, 1); + assert.sameValue(obj[d], 17); + + var d2 = new Date(2010, 1, 1); + d2.valueOf = function() { assert.sameValue(arguments.length, 0); return 8; } + assert.sameValue(obj[d2], 17); + + var d3 = new Date(2010, 1, 1); + d3.toString = function() { return 9; }; + assert.sameValue(obj[d3], 73); + + function testPropertyName() + { + var obj = { 8: 42, 9: 73 }; + obj[DS] = 17; + + var d = new Date(2010, 1, 1); + assert.sameValue(obj[d], 17); + + var d2 = new Date(2010, 1, 1); + d2.valueOf = function() { assert.sameValue(arguments.length, 0); return 8; } + assert.sameValue(obj[d2], 17); + + var d3 = new Date(2010, 1, 1); + d3.toString = function() { return 9; }; + assert.sameValue(obj[d3], 73); + } + testPropertyName(); + + + // Date as property name with |in| operator + + var obj = {}; + obj[DS] = 5; + + var d = new Date(2010, 1, 1); + assert.sameValue(d in obj, true); + + var d2 = new Date(2010, 1, 1); + d2.toString = function() { return "baz"; }; + assert.sameValue(d2 in { baz: 42 }, true); + + var d3 = new Date(2010, 1, 1); + d3.valueOf = function() { assert.sameValue(arguments.length, 0); return "quux"; }; + assert.sameValue(d3 in obj, true); + + function testInOperatorName() + { + var obj = {}; + obj[DS] = 5; + + var d = new Date(2010, 1, 1); + assert.sameValue(d in obj, true); + + var d2 = new Date(2010, 1, 1); + d2.toString = function() { return "baz"; }; + assert.sameValue(d2 in { baz: 42 }, true); + + var d3 = new Date(2010, 1, 1); + d3.valueOf = function() { assert.sameValue(arguments.length, 0); return "quux"; }; + assert.sameValue(d3 in obj, true); + } + testInOperatorName(); +} + +allTests(); + +if (typeof createNewGlobal === "function") +{ + Date = createNewGlobal().Date; + allTests(); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Date/dst-offset-caching-1-of-8.js b/test/staging/sm/Date/dst-offset-caching-1-of-8.js new file mode 100644 index 0000000000..11b513eb9e --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-1-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(1, 8); diff --git a/test/staging/sm/Date/dst-offset-caching-2-of-8.js b/test/staging/sm/Date/dst-offset-caching-2-of-8.js new file mode 100644 index 0000000000..25be52fdd2 --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-2-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(2, 8); diff --git a/test/staging/sm/Date/dst-offset-caching-3-of-8.js b/test/staging/sm/Date/dst-offset-caching-3-of-8.js new file mode 100644 index 0000000000..01ad1c4ad8 --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-3-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(3, 8); diff --git a/test/staging/sm/Date/dst-offset-caching-4-of-8.js b/test/staging/sm/Date/dst-offset-caching-4-of-8.js new file mode 100644 index 0000000000..430c477a4d --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-4-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(4, 8); diff --git a/test/staging/sm/Date/dst-offset-caching-5-of-8.js b/test/staging/sm/Date/dst-offset-caching-5-of-8.js new file mode 100644 index 0000000000..af062e04de --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-5-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(5, 8); diff --git a/test/staging/sm/Date/dst-offset-caching-6-of-8.js b/test/staging/sm/Date/dst-offset-caching-6-of-8.js new file mode 100644 index 0000000000..ec4585f9a6 --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-6-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(6, 8); diff --git a/test/staging/sm/Date/dst-offset-caching-7-of-8.js b/test/staging/sm/Date/dst-offset-caching-7-of-8.js new file mode 100644 index 0000000000..94b6533929 --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-7-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(7, 8); diff --git a/test/staging/sm/Date/dst-offset-caching-8-of-8.js b/test/staging/sm/Date/dst-offset-caching-8-of-8.js new file mode 100644 index 0000000000..1c64ddde30 --- /dev/null +++ b/test/staging/sm/Date/dst-offset-caching-8-of-8.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +runDSTOffsetCachingTestsFraction(8, 8); diff --git a/test/staging/sm/Date/equality-to-boolean.js b/test/staging/sm/Date/equality-to-boolean.js new file mode 100644 index 0000000000..2af63855f5 --- /dev/null +++ b/test/staging/sm/Date/equality-to-boolean.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +print("Test for correct implementation of |Date == boolean| and vice versa"); + +/************** + * BEGIN TEST * + **************/ + +Date.prototype.toString = function() { return 1; }; +Date.prototype.valueOf = function() { return 0; }; + +/* + * ES5 11.9.3 doesn't directly handle obj == boolean. Instead it translates it + * as follows: + * + * obj == boolean + * ↳ obj == ToNumber(boolean), per step 7 + * ↳ ToPrimitive(obj) == ToNumber(boolean), per step 9 + * + * ToPrimitive calls [[DefaultValue]] with no hint. For Date objects this is + * treated as if it were instead called with hint String. That calls toString, + * which returns 1, so Date objects here should compare equal to true and + * unequal to false. + */ +assert.sameValue(new Date == true, true); +assert.sameValue(new Date == false, false); + +/* == is symmetric. */ +assert.sameValue(true == new Date, true); +assert.sameValue(false == new Date, false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/fractions.js b/test/staging/sm/Date/fractions.js new file mode 100644 index 0000000000..45e00b79d4 --- /dev/null +++ b/test/staging/sm/Date/fractions.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 771946; +var summary = "Fractional days, months, years shouldn't trigger asserts"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +new Date(0).setFullYear(1.5); +new Date(0).setUTCDate(1.5); +new Date(0).setMonth(1.5); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/makeday-year-month-is-infinity.js b/test/staging/sm/Date/makeday-year-month-is-infinity.js new file mode 100644 index 0000000000..8745c4ab06 --- /dev/null +++ b/test/staging/sm/Date/makeday-year-month-is-infinity.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// MakeDay: Adding finite |year| and |month| can result in non-finite intermediate result. + +assert.sameValue(Date.UTC(Number.MAX_VALUE, Number.MAX_VALUE), NaN); +assert.sameValue(new Date(Number.MAX_VALUE, Number.MAX_VALUE).getTime(), NaN); + +// https://github.com/tc39/ecma262/issues/1087 + +var d = new Date(0); +d.setUTCFullYear(Number.MAX_VALUE, Number.MAX_VALUE); +assert.sameValue(d.getTime(), NaN); + diff --git a/test/staging/sm/Date/non-iso.js b/test/staging/sm/Date/non-iso.js new file mode 100644 index 0000000000..68e9c6459c --- /dev/null +++ b/test/staging/sm/Date/non-iso.js @@ -0,0 +1,76 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * For the sake of cross compatibility with other implementations we + * follow the W3C "NOTE-datetime" specification when parsing dates of + * the form YYYY-MM-DDTHH:MM:SS save for a few exceptions: months, days, hours + * minutes, and seconds may be either one _or_ two digits long, and the 'T' + * preceding the time part may be replaced with a space. So, a string like + * "1997-3-8 1:1:1" will parse successfully. See bug: 1203298 + */ + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(new Date("1997-03-08 1:1:1.01").getTime(), + new Date("1997-03-08T01:01:01.01").getTime()); +assert.sameValue(new Date("1997-03-08 11:19:20").getTime(), + new Date("1997-03-08T11:19:20").getTime()); +assert.sameValue(new Date("1997-3-08 11:19:20").getTime(), + new Date("1997-03-08T11:19:20").getTime()); +assert.sameValue(new Date("1997-3-8 11:19:20").getTime(), + new Date("1997-03-08T11:19:20").getTime()); +assert.sameValue(new Date("+001997-3-8 11:19:20").getTime(), + new Date("1997-03-08T11:19:20").getTime()); +assert.sameValue(new Date("+001997-03-8 11:19:20").getTime(), + new Date("1997-03-08T11:19:20").getTime()); +assert.sameValue(new Date("1997-03-08 11:19").getTime(), + new Date("1997-03-08T11:19").getTime()); +assert.sameValue(new Date("1997-03-08 1:19").getTime(), + new Date("1997-03-08T01:19").getTime()); +assert.sameValue(new Date("1997-03-08 1:1").getTime(), + new Date("1997-03-08T01:01").getTime()); +assert.sameValue(new Date("1997-03-08 1:1:01").getTime(), + new Date("1997-03-08T01:01:01").getTime()); +assert.sameValue(new Date("1997-03-08 1:1:1").getTime(), + new Date("1997-03-08T01:01:01").getTime()); +assert.sameValue(new Date("1997-03-08 11").getTime(), + new Date("1997-03-08T11").getTime()); // Date(NaN) +assert.sameValue(new Date("1997-03-08 11:19:10-07").getTime(), + new Date("1997-03-08 11:19:10-0700").getTime()); +assert.sameValue(new Date("1997-03-08T11:19:10-07").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("1997-03-08T").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("1997-3-8T11:19:20").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("1997-03-8T11:19:20").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("+001997-3-8T11:19:20").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("+001997-3-08T11:19:20").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("1997-03-08T1:19").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("1997-03-08T1:1").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("1997-03-08T1:1:01").getTime(), + new Date(NaN).getTime()); +assert.sameValue(new Date("1997-03-08T1:1:1").getTime(), + new Date(NaN).getTime()); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/prototype-is-not-a-date.js b/test/staging/sm/Date/prototype-is-not-a-date.js new file mode 100644 index 0000000000..21a3c12a15 --- /dev/null +++ b/test/staging/sm/Date/prototype-is-not-a-date.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 861219; +var summary = "Date.prototype isn't an instance of Date"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Date.prototype instanceof Date, false); +assert.sameValue(Date.prototype.__proto__, Object.prototype); + diff --git a/test/staging/sm/Date/setTime-argument-shortcircuiting.js b/test/staging/sm/Date/setTime-argument-shortcircuiting.js new file mode 100644 index 0000000000..131413f320 --- /dev/null +++ b/test/staging/sm/Date/setTime-argument-shortcircuiting.js @@ -0,0 +1,154 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +print("Test for correct short-circuiting implementation of Date.set methods"); + +/************** + * BEGIN TEST * + **************/ +var global = 0; +var date; + +/* Test that methods don't short circuit argument evaluation. */ +date = new Date(0).setSeconds(NaN, {valueOf:function(){global = 3}}); +assert.sameValue(global, 3); + +date = new Date(0).setUTCSeconds(NaN, {valueOf:function(){global = 4}}); +assert.sameValue(global, 4); + +date = new Date(0).setMinutes(NaN, {valueOf:function(){global = 5}}); +assert.sameValue(global, 5); + +date = new Date(0).setUTCMinutes(NaN, {valueOf:function(){global = 6}}); +assert.sameValue(global, 6); + +date = new Date(0).setHours(NaN, {valueOf:function(){global = 7}}); +assert.sameValue(global, 7); + +date = new Date(0).setUTCHours(NaN, {valueOf:function(){global = 8}}); +assert.sameValue(global, 8); + +date = new Date(0).setMonth(NaN, {valueOf:function(){global = 11}}); +assert.sameValue(global, 11); + +date = new Date(0).setUTCMonth(NaN, {valueOf:function(){global = 12}}); +assert.sameValue(global, 12); + +date = new Date(0).setFullYear(NaN, {valueOf:function(){global = 13}}); +assert.sameValue(global, 13); + +date = new Date(0).setUTCFullYear(NaN, {valueOf:function(){global = 14}}); +assert.sameValue(global, 14); + + + +/* Test that argument evaluation is not short circuited if Date == NaN */ +date = new Date(NaN).setMilliseconds({valueOf:function(){global = 15}}); +assert.sameValue(global, 15); + +date = new Date(NaN).setUTCMilliseconds({valueOf:function(){global = 16}}); +assert.sameValue(global, 16); + +date = new Date(NaN).setSeconds({valueOf:function(){global = 17}}); +assert.sameValue(global, 17); + +date = new Date(NaN).setUTCSeconds({valueOf:function(){global = 18}}); +assert.sameValue(global, 18); + +date = new Date(NaN).setMinutes({valueOf:function(){global = 19}}); +assert.sameValue(global, 19); + +date = new Date(NaN).setUTCMinutes({valueOf:function(){global = 20}}); +assert.sameValue(global, 20); + +date = new Date(NaN).setHours({valueOf:function(){global = 21}}); +assert.sameValue(global, 21); + +date = new Date(NaN).setUTCHours({valueOf:function(){global = 22}}); +assert.sameValue(global, 22); + +date = new Date(NaN).setDate({valueOf:function(){global = 23}}); +assert.sameValue(global, 23); + +date = new Date(NaN).setUTCDate({valueOf:function(){global = 24}}); +assert.sameValue(global, 24); + +date = new Date(NaN).setMonth({valueOf:function(){global = 25}}); +assert.sameValue(global, 25); + +date = new Date(NaN).setUTCMonth({valueOf:function(){global = 26}}); +assert.sameValue(global, 26); + +date = new Date(NaN).setFullYear({valueOf:function(){global = 27}}); +assert.sameValue(global, 27); + +date = new Date(NaN).setUTCFullYear({valueOf:function(){global = 28}}); +assert.sameValue(global, 28); + + +/* Test the combination of the above two. */ +date = new Date(NaN).setSeconds(NaN, {valueOf:function(){global = 31}}); +assert.sameValue(global, 31); + +date = new Date(NaN).setUTCSeconds(NaN, {valueOf:function(){global = 32}}); +assert.sameValue(global, 32); + +date = new Date(NaN).setMinutes(NaN, {valueOf:function(){global = 33}}); +assert.sameValue(global, 33); + +date = new Date(NaN).setUTCMinutes(NaN, {valueOf:function(){global = 34}}); +assert.sameValue(global, 34); + +date = new Date(NaN).setHours(NaN, {valueOf:function(){global = 35}}); +assert.sameValue(global, 35); + +date = new Date(NaN).setUTCHours(NaN, {valueOf:function(){global = 36}}); +assert.sameValue(global, 36); + +date = new Date(NaN).setMonth(NaN, {valueOf:function(){global = 39}}); +assert.sameValue(global, 39); + +date = new Date(NaN).setUTCMonth(NaN, {valueOf:function(){global = 40}}); +assert.sameValue(global, 40); + +date = new Date(NaN).setFullYear(NaN, {valueOf:function(){global = 41}}); +assert.sameValue(global, 41); + +date = new Date(NaN).setUTCFullYear(NaN, {valueOf:function(){global = 42}}); +assert.sameValue(global, 42); + + +/*Test two methods evaluation*/ +var secondGlobal = 0; + +date = new Date(NaN).setFullYear({valueOf:function(){global = 43}}, {valueOf:function(){secondGlobal = 1}}); +assert.sameValue(global, 43); +assert.sameValue(secondGlobal, 1); + +date = new Date(0).setFullYear(NaN, {valueOf:function(){global = 44}}, {valueOf:function(){secondGlobal = 2}}); +assert.sameValue(global, 44); +assert.sameValue(secondGlobal, 2); + + +/* Test year methods*/ +date = new Date(0).setYear({valueOf:function(){global = 45}}); +assert.sameValue(global, 45); + +date = new Date(NaN).setYear({valueOf:function(){global = 46}}); +assert.sameValue(global, 46); + + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/time-components-negative-zero.js b/test/staging/sm/Date/time-components-negative-zero.js new file mode 100644 index 0000000000..a5966525ae --- /dev/null +++ b/test/staging/sm/Date/time-components-negative-zero.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Don't return negative zero for get[Hours,Minutes,Seconds,Milliseconds] for dates before 1970. + +let date = new Date(1955, 0, 1); +assert.sameValue(date.getTime() < 0, true); +assert.sameValue(date.getHours(), +0); +assert.sameValue(date.getMinutes(), +0); +assert.sameValue(date.getSeconds(), +0); +assert.sameValue(date.getMilliseconds(), +0); + +let utc = new Date(Date.UTC(1955, 0, 1)); +assert.sameValue(utc.getTime() < 0, true); +assert.sameValue(utc.getUTCHours(), +0); +assert.sameValue(utc.getUTCMinutes(), +0); +assert.sameValue(utc.getUTCSeconds(), +0); +assert.sameValue(utc.getUTCMilliseconds(), +0); + diff --git a/test/staging/sm/Date/timeclip.js b/test/staging/sm/Date/timeclip.js new file mode 100644 index 0000000000..cd1d40f002 --- /dev/null +++ b/test/staging/sm/Date/timeclip.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 747197; +var summary = "TimeClip behavior for very large numbers"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function addToLimit(n) { return 8.64e15 + n; } + +assert.sameValue(8.64e15 === addToLimit(0.0), true); +assert.sameValue(8.64e15 === addToLimit(0.5), true); +assert.sameValue(8.64e15 === addToLimit(0.5000000000000001), false); + +var times = + [Number.MAX_VALUE, + -Number.MAX_VALUE, + Infinity, + -Infinity, + addToLimit(0.5000000000000001), + -addToLimit(0.5000000000000001)]; + +for (var i = 0, len = times.length; i < len; i++) +{ + var d = new Date(); + assert.sameValue(d.setTime(times[i]), NaN, "times[" + i + "]"); + assert.sameValue(d.getTime(), NaN); + assert.sameValue(d.valueOf(), NaN); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Date/to-temporal-instant.js b/test/staging/sm/Date/to-temporal-instant.js new file mode 100644 index 0000000000..db9992c627 --- /dev/null +++ b/test/staging/sm/Date/to-temporal-instant.js @@ -0,0 +1,72 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +const min = new Date(-8640000000000000).toTemporalInstant(); +const max = new Date(8640000000000000).toTemporalInstant(); +const epoch = new Date(0).toTemporalInstant(); + +const minTemporalInstant = new Temporal.Instant(-8640000000000000000000n) +const maxTemporalInstant = new Temporal.Instant(8640000000000000000000n) +const zeroInstant = new Temporal.Instant(0n) + +let zero = Temporal.Duration.from({nanoseconds: 0}); +let one = Temporal.Duration.from({nanoseconds: 1}); +let minusOne = Temporal.Duration.from({nanoseconds: -1}); + +//Test invalid date +{ + const invalidDate = new Date(NaN); + assertThrowsInstanceOf(() => invalidDate.toTemporalInstant(), RangeError); +} + +//Test Temporal.Instant properties +{ + // epochNanoseconds + assert.sameValue(min.epochNanoseconds, minTemporalInstant.epochNanoseconds); + assert.sameValue(max.epochNanoseconds, maxTemporalInstant.epochNanoseconds); + assert.sameValue(epoch.epochNanoseconds, zeroInstant.epochNanoseconds); + + // toZonedDateTime + assert.sameValue(min.toZonedDateTimeISO('UTC').toString(), minTemporalInstant.toZonedDateTimeISO('UTC').toString()); + assert.sameValue(max.toZonedDateTimeISO('UTC').toString(), maxTemporalInstant.toZonedDateTimeISO('UTC').toString()); + assert.sameValue(epoch.toZonedDateTimeISO('UTC').toString(), zeroInstant.toZonedDateTimeISO('UTC').toString()); +} + +// Test values around the minimum/maximum instant. +{ + // Adding zero to the minimum instant. + assert.sameValue(min.add(zero).epochNanoseconds, min.epochNanoseconds); + assert.sameValue(min.subtract(zero).epochNanoseconds, min.epochNanoseconds); + + // Adding zero to the maximum instant. + assert.sameValue(max.add(zero).epochNanoseconds, max.epochNanoseconds); + assert.sameValue(max.subtract(zero).epochNanoseconds, max.epochNanoseconds); + + // Adding one to the minimum instant. + assert.sameValue(min.add(one).epochNanoseconds, min.epochNanoseconds + 1n); + assert.sameValue(min.subtract(minusOne).epochNanoseconds, min.epochNanoseconds + 1n); + + // Subtracting one from the maximum instant. + assert.sameValue(max.add(minusOne).epochNanoseconds, max.epochNanoseconds - 1n); + assert.sameValue(max.subtract(one).epochNanoseconds, max.epochNanoseconds - 1n); + + // Subtracting one from the minimum instant. + assertThrowsInstanceOf(() => min.add(minusOne), RangeError); + assertThrowsInstanceOf(() => min.subtract(one), RangeError); + + // Adding one to the maximum instant. + assertThrowsInstanceOf(() => max.add(one), RangeError); + assertThrowsInstanceOf(() => max.subtract(minusOne), RangeError); +} + diff --git a/test/staging/sm/Date/toISOString-01.js b/test/staging/sm/Date/toISOString-01.js new file mode 100644 index 0000000000..422769da1c --- /dev/null +++ b/test/staging/sm/Date/toISOString-01.js @@ -0,0 +1,62 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 730831; +var summary = 'Date.prototype.toISOString returns an invalid ISO-8601 string'; + +print(BUGNUMBER + ": " + summary); + +function iso(t) { + return new Date(t).toISOString(); +} + +function utc(year, month, day, hour, minute, second, millis) { + var date = new Date(0); + date.setUTCFullYear(year, month - 1, day); + date.setUTCHours(hour, minute, second, millis); + return date.getTime(); +} + + +// Values around maximum date for simple iso format. +var maxDateSimple = utc(9999, 12, 31, 23, 59, 59, 999); +assert.sameValue(iso(maxDateSimple - 1), "9999-12-31T23:59:59.998Z"); +assert.sameValue(iso(maxDateSimple ), "9999-12-31T23:59:59.999Z"); +assert.sameValue(iso(maxDateSimple + 1), "+010000-01-01T00:00:00.000Z"); + + +// Values around minimum date for simple iso format. +var minDateSimple = utc(0, 1, 1, 0, 0, 0, 0); +assert.sameValue(iso(minDateSimple - 1), "-000001-12-31T23:59:59.999Z"); +assert.sameValue(iso(minDateSimple ), "0000-01-01T00:00:00.000Z"); +assert.sameValue(iso(minDateSimple + 1), "0000-01-01T00:00:00.001Z"); + + +// Values around maximum date for extended iso format. +var maxDateExtended = utc(+275760, 9, 13, 0, 0, 0, 0); +assert.sameValue(maxDateExtended, +8.64e15); +assert.sameValue(iso(maxDateExtended - 1), "+275760-09-12T23:59:59.999Z"); +assert.sameValue(iso(maxDateExtended ), "+275760-09-13T00:00:00.000Z"); +assertThrowsInstanceOf(() => iso(maxDateExtended + 1), RangeError); + + +// Values around minimum date for extended iso format. +var minDateExtended = utc(-271821, 4, 20, 0, 0, 0, 0); +assert.sameValue(minDateExtended, -8.64e15); +assertThrowsInstanceOf(() => iso(minDateExtended - 1), RangeError); +assert.sameValue(iso(minDateExtended ), "-271821-04-20T00:00:00.000Z"); +assert.sameValue(iso(minDateExtended + 1), "-271821-04-20T00:00:00.001Z"); + + diff --git a/test/staging/sm/Date/toISOString.js b/test/staging/sm/Date/toISOString.js new file mode 100644 index 0000000000..62836a2fed --- /dev/null +++ b/test/staging/sm/Date/toISOString.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function throwsRangeError(t) { + try { + var date = new Date(); + date.setTime(t); + var r = date.toISOString(); + throw new Error("toISOString didn't throw, instead returned " + r); + } catch (err) { + assert.sameValue(err instanceof RangeError, true, 'wrong error: ' + err); + return; + } + assert.sameValue(0, 1, 'not good, nyan, nyan'); +} + +throwsRangeError(Infinity); +throwsRangeError(-Infinity); +throwsRangeError(NaN); + diff --git a/test/staging/sm/Date/toJSON-01.js b/test/staging/sm/Date/toJSON-01.js new file mode 100644 index 0000000000..e4a890b400 --- /dev/null +++ b/test/staging/sm/Date/toJSON-01.js @@ -0,0 +1,245 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'toJSON-01.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584811; +var summary = "Date.prototype.toJSON isn't to spec"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var called; + +var dateToJSON = Date.prototype.toJSON; +assert.sameValue(Date.prototype.hasOwnProperty("toJSON"), true); +assert.sameValue(typeof dateToJSON, "function"); + +// brief test to exercise this outside of isolation, just for sanity +var invalidDate = new Date(); +invalidDate.setTime(NaN); +assert.sameValue(JSON.stringify({ p: invalidDate }), '{"p":null}'); + + +/* 15.9.5.44 Date.prototype.toJSON ( key ) */ +assert.sameValue(dateToJSON.length, 1); + +/* + * 1. Let O be the result of calling ToObject, giving it the this value as its + * argument. + */ +try +{ + dateToJSON.call(null); + throw new Error("should have thrown a TypeError"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "ToObject throws TypeError for null/undefined"); +} + +try +{ + dateToJSON.call(undefined); + throw new Error("should have thrown a TypeError"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "ToObject throws TypeError for null/undefined"); +} + + +/* + * 2. Let tv be ToPrimitive(O, hint Number). + * ...expands to: + * 1. Let valueOf be the result of calling the [[Get]] internal method of object O with argument "valueOf". + * 2. If IsCallable(valueOf) is true then, + * a. Let val be the result of calling the [[Call]] internal method of valueOf, with O as the this value and + * an empty argument list. + * b. If val is a primitive value, return val. + * 3. Let toString be the result of calling the [[Get]] internal method of object O with argument "toString". + * 4. If IsCallable(toString) is true then, + * a. Let str be the result of calling the [[Call]] internal method of toString, with O as the this value and + * an empty argument list. + * b. If str is a primitive value, return str. + * 5. Throw a TypeError exception. + */ +try +{ + var r = dateToJSON.call({ get valueOf() { throw 17; } }); + throw new Error("didn't throw, returned: " + r); +} +catch (e) +{ + assert.sameValue(e, 17, "bad exception: " + e); +} + +called = false; +assert.sameValue(dateToJSON.call({ valueOf: null, + toString: function() { called = true; return 12; }, + toISOString: function() { return "ohai"; } }), + "ohai"); +assert.sameValue(called, true); + +called = false; +assert.sameValue(dateToJSON.call({ valueOf: function() { called = true; return 42; }, + toISOString: function() { return null; } }), + null); +assert.sameValue(called, true); + +try +{ + called = false; + dateToJSON.call({ valueOf: function() { called = true; return {}; }, + get toString() { throw 42; } }); +} +catch (e) +{ + assert.sameValue(called, true); + assert.sameValue(e, 42, "bad exception: " + e); +} + +called = false; +assert.sameValue(dateToJSON.call({ valueOf: function() { called = true; return {}; }, + get toString() { return function() { return 8675309; }; }, + toISOString: function() { return true; } }), + true); +assert.sameValue(called, true); + +var asserted = false; +called = false; +assert.sameValue(dateToJSON.call({ valueOf: function() { called = true; return {}; }, + get toString() + { + assert.sameValue(called, true); + asserted = true; + return function() { return 8675309; }; + }, + toISOString: function() { return NaN; } }), + NaN); +assert.sameValue(asserted, true); + +try +{ + var r = dateToJSON.call({ valueOf: null, toString: null, + get toISOString() + { + throw new Error("shouldn't have been gotten"); + } }); + throw new Error("didn't throw, returned: " + r); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "bad exception: " + e); +} + + +/* 3. If tv is a Number and is not finite, return null. */ +assert.sameValue(dateToJSON.call({ valueOf: function() { return Infinity; } }), null); +assert.sameValue(dateToJSON.call({ valueOf: function() { return -Infinity; } }), null); +assert.sameValue(dateToJSON.call({ valueOf: function() { return NaN; } }), null); + +assert.sameValue(dateToJSON.call({ valueOf: function() { return Infinity; }, + toISOString: function() { return {}; } }), null); +assert.sameValue(dateToJSON.call({ valueOf: function() { return -Infinity; }, + toISOString: function() { return []; } }), null); +assert.sameValue(dateToJSON.call({ valueOf: function() { return NaN; }, + toISOString: function() { return undefined; } }), null); + + +/* + * 4. Let toISO be the result of calling the [[Get]] internal method of O with + * argument "toISOString". + */ +try +{ + var r = dateToJSON.call({ get toISOString() { throw 42; } }); + throw new Error("didn't throw, returned: " + r); +} +catch (e) +{ + assert.sameValue(e, 42, "bad exception: " + e); +} + + +/* 5. If IsCallable(toISO) is false, throw a TypeError exception. */ +try +{ + var r = dateToJSON.call({ toISOString: null }); + throw new Error("didn't throw, returned: " + r); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "bad exception: " + e); +} + +try +{ + var r = dateToJSON.call({ toISOString: undefined }); + throw new Error("didn't throw, returned: " + r); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "bad exception: " + e); +} + +try +{ + var r = dateToJSON.call({ toISOString: "oogabooga" }); + throw new Error("didn't throw, returned: " + r); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "bad exception: " + e); +} + +try +{ + var r = dateToJSON.call({ toISOString: Math.PI }); + throw new Error("didn't throw, returned: " + r); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "bad exception: " + e); +} + + +/* + * 6. Return the result of calling the [[Call]] internal method of toISO with O + * as the this value and an empty argument list. + */ +var o = + { + toISOString: function(a) + { + called = true; + assert.sameValue(this, o); + assert.sameValue(a, undefined); + assert.sameValue(arguments.length, 0); + return obj; + } + }; +var obj = {}; +called = false; +assert.sameValue(dateToJSON.call(o), obj, "should have gotten obj back"); +assert.sameValue(called, true); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Date/toPrimitive.js b/test/staging/sm/Date/toPrimitive.js new file mode 100644 index 0000000000..408e8b7fd1 --- /dev/null +++ b/test/staging/sm/Date/toPrimitive.js @@ -0,0 +1,72 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// ES6 20.3.4.45 Date.prototype[@@toPrimitive](hint) + +// The toPrimitive method throws if the this value isn't an object. +var toPrimitive = Date.prototype[Symbol.toPrimitive]; +assertThrowsInstanceOf(() => toPrimitive.call(undefined, "default"), TypeError); +assertThrowsInstanceOf(() => toPrimitive.call(3, "default"), TypeError); + +// It doesn't have to be a Date object, though. +var obj = { + toString() { return "str"; }, + valueOf() { return "val"; } +}; +assert.sameValue(toPrimitive.call(obj, "number"), "val"); +assert.sameValue(toPrimitive.call(obj, "string"), "str"); +assert.sameValue(toPrimitive.call(obj, "default"), "str"); + +// It throws if the hint argument is missing or not one of the three allowed values. +assertThrowsInstanceOf(() => toPrimitive.call(obj), TypeError); +assertThrowsInstanceOf(() => toPrimitive.call(obj, undefined), TypeError); +assertThrowsInstanceOf(() => toPrimitive.call(obj, "boolean"), TypeError); +assertThrowsInstanceOf(() => toPrimitive.call(obj, ["number"]), TypeError); +assertThrowsInstanceOf(() => toPrimitive.call(obj, {toString() { throw "FAIL"; }}), TypeError); + +// The next few tests cover the OrdinaryToPrimitive algorithm, specified in +// ES6 7.1.1 ToPrimitive(input [, PreferredType]). + +// Date.prototype.toString or .valueOf can be overridden. +var dateobj = new Date(); +Date.prototype.toString = function () { + assert.sameValue(this, dateobj); + return 14; +}; +Date.prototype.valueOf = function () { + return "92"; +}; +assert.sameValue(dateobj[Symbol.toPrimitive]("number"), "92"); +assert.sameValue(dateobj[Symbol.toPrimitive]("string"), 14); +assert.sameValue(dateobj[Symbol.toPrimitive]("default"), 14); +assert.sameValue(dateobj == 14, true); // equality comparison: passes "default" + +// If this.toString is a non-callable value, this.valueOf is called instead. +Date.prototype.toString = {}; +assert.sameValue(dateobj[Symbol.toPrimitive]("string"), "92"); +assert.sameValue(dateobj[Symbol.toPrimitive]("default"), "92"); + +// And vice versa. +Date.prototype.toString = function () { return 15; }; +Date.prototype.valueOf = "ponies"; +assert.sameValue(dateobj[Symbol.toPrimitive]("number"), 15); + +// If neither is callable, it throws a TypeError. +Date.prototype.toString = "ponies"; +assertThrowsInstanceOf(() => dateobj[Symbol.toPrimitive]("default"), TypeError); + +// Surface features. +assert.sameValue(toPrimitive.name, "[Symbol.toPrimitive]"); +var desc = Object.getOwnPropertyDescriptor(Date.prototype, Symbol.toPrimitive); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, false); + diff --git a/test/staging/sm/Date/toString-generic.js b/test/staging/sm/Date/toString-generic.js new file mode 100644 index 0000000000..1c12f86bc9 --- /dev/null +++ b/test/staging/sm/Date/toString-generic.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 861219; +var summary = 'Date.prototype.toString is a generic function'; + +// Revised in ECMA 2018, Date.prototype.toString is no longer generic (bug 1381433). + +print(BUGNUMBER + ": " + summary); + +for (var thisValue of [{}, [], /foo/, Date.prototype, new Proxy(new Date(), {})]) + assertThrowsInstanceOf(() => Date.prototype.toString.call(thisValue), TypeError); + +for (var prim of [null, undefined, 0, 1.2, true, false, "foo", Symbol.iterator]) + assertThrowsInstanceOf(() => Date.prototype.toString.call(prim), TypeError); + diff --git a/test/staging/sm/Date/two-digit-years.js b/test/staging/sm/Date/two-digit-years.js new file mode 100644 index 0000000000..01215220f4 --- /dev/null +++ b/test/staging/sm/Date/two-digit-years.js @@ -0,0 +1,76 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Date-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * For the sake of cross compatibility with other implementations we + * implement date parsing heuristics which support single and double + * digit years. See bug: 1265136 + */ + +/************** + * BEGIN TEST * + **************/ + +for (let year of Array(100).keys()) { + for (let month of Array(12).keys()) { + for (let day of Array(31).keys()) { + let fullYear = year >= 50 ? year + 1900 : year + 2000; + let fullDate = new Date(`${month + 1}/${day + 1}/${fullYear}`); + + // mm/dd/yy + let d1 = new Date(`${month + 1}/${day + 1}/${year}`); + assert.sameValue(d1.getTime(), fullDate.getTime()) + + // yy/mm/dd + let d2 = new Date(`${year}/${month + 1}/${day + 1}`); + if (year > 31) { + assert.sameValue(d2.getTime(), fullDate.getTime()) + } else if (year > 12) { + assert.sameValue(d2.getTime(), new Date(NaN).getTime()) + } + } + } +} + +assert.sameValue(new Date("99/1/99").getTime(), new Date(NaN).getTime()); +assert.sameValue(new Date("13/13/13").getTime(), new Date(NaN).getTime()); +assert.sameValue(new Date("0/10/0").getTime(), new Date(NaN).getTime()); + +// Written months. +for (let year of Array(1000).keys()) { + let fullDate = new Date(`5/1/${year}`); + let d1 = new Date(`may 1 ${year}`); + let d2 = new Date(`1 may ${year}`); + let d3 = new Date(`1 ${year} may`); + + assert.sameValue(d1.getTime(), fullDate.getTime()) + assert.sameValue(d2.getTime(), fullDate.getTime()) + assert.sameValue(d3.getTime(), fullDate.getTime()) + + if (year > 31) { + let d4 = new Date(`may ${year} 1`); + let d5 = new Date(`${year} may 1`); + let d6 = new Date(`${year} 1 may`); + + assert.sameValue(d4.getTime(), fullDate.getTime()) + assert.sameValue(d5.getTime(), fullDate.getTime()) + assert.sameValue(d6.getTime(), fullDate.getTime()) + } +} + +assert.sameValue(new Date("may 1999 1999").getTime(), new Date(NaN).getTime()); +assert.sameValue(new Date("may 0 0").getTime(), new Date(NaN).getTime()); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Error/AggregateError.js b/test/staging/sm/Error/AggregateError.js new file mode 100644 index 0000000000..b2de967956 --- /dev/null +++ b/test/staging/sm/Error/AggregateError.js @@ -0,0 +1,89 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(typeof AggregateError, "function"); +assert.sameValue(Object.getPrototypeOf(AggregateError), Error); +assert.sameValue(AggregateError.name, "AggregateError"); +assert.sameValue(AggregateError.length, 2); + +assert.sameValue(Object.getPrototypeOf(AggregateError.prototype), Error.prototype); +assert.sameValue(AggregateError.prototype.name, "AggregateError"); +assert.sameValue(AggregateError.prototype.message, ""); + +// The |errors| argument is mandatory. +assertThrowsInstanceOf(() => new AggregateError(), TypeError); +assertThrowsInstanceOf(() => AggregateError(), TypeError); + +// The .errors data property is an array object. +{ + let err = new AggregateError([]); + + let {errors} = err; + assert.sameValue(Array.isArray(errors), true); + assert.sameValue(errors.length, 0); + + // The errors object is modifiable. + errors.push(123); + assert.sameValue(errors.length, 1); + assert.sameValue(errors[0], 123); + assert.sameValue(err.errors[0], 123); + + // The property is writable. + err.errors = undefined; + assert.sameValue(err.errors, undefined); +} + +// The errors argument can be any iterable. +{ + function* g() { yield* [1, 2, 3]; } + + let {errors} = new AggregateError(g()); + assert.compareArray(errors, [1, 2, 3]); +} + +// The message property is populated by the second argument. +{ + let err; + + err = new AggregateError([]); + assert.sameValue(err.message, ""); + + err = new AggregateError([], "my message"); + assert.sameValue(err.message, "my message"); +} + +{ + assert.sameValue("errors" in AggregateError.prototype, false); + + const { + configurable, + enumerable, + value, + writable + } = Object.getOwnPropertyDescriptor(new AggregateError([]), "errors"); + assert.sameValue(configurable, true); + assert.sameValue(enumerable, false); + assert.sameValue(writable, true); + assert.sameValue(value.length, 0); + + const g = createNewGlobal(); + + let obj = {}; + let errors = new g.AggregateError([obj]).errors; + + assert.sameValue(errors.length, 1); + assert.sameValue(errors[0], obj); + + // The prototype is |g.Array.prototype| in the cross-compartment case. + let proto = Object.getPrototypeOf(errors); + assert.sameValue(proto === g.Array.prototype, true); +} + diff --git a/test/staging/sm/Error/constructor-ordering.js b/test/staging/sm/Error/constructor-ordering.js new file mode 100644 index 0000000000..b2ce16d4e8 --- /dev/null +++ b/test/staging/sm/Error/constructor-ordering.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var order = 0; +function assertOrdering(ordering) { + assert.sameValue(order, ordering); + order++; +} + +// Spec mandates that the prototype is looked up /before/ we toString the +// argument. +var handler = { get() { assertOrdering(0); return Error.prototype } }; +var errorProxy = new Proxy(Error, handler); + +var toStringable = { toString() { assertOrdering(1); return "Argument"; } }; + +new errorProxy(toStringable); + diff --git a/test/staging/sm/Error/constructor-proto.js b/test/staging/sm/Error/constructor-proto.js new file mode 100644 index 0000000000..0c6aa0f71a --- /dev/null +++ b/test/staging/sm/Error/constructor-proto.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const nativeErrors = [ + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +]; + +assert.sameValue(Reflect.getPrototypeOf(Error), Function.prototype) + +for (const error of nativeErrors) + assert.sameValue(Reflect.getPrototypeOf(error), Error); + diff --git a/test/staging/sm/Error/prototype-properties.js b/test/staging/sm/Error/prototype-properties.js new file mode 100644 index 0000000000..b67661df41 --- /dev/null +++ b/test/staging/sm/Error/prototype-properties.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const nativeErrors = [ + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +]; + +const ownKeys = Reflect.ownKeys(Error.prototype); +for (const expected of ["constructor", "message", "name", "toString"]) { + assert.sameValue(ownKeys.includes(expected), true, "Error.prototype should have a key named " + expected); +} +assert.sameValue(Error.prototype.name, "Error"); +assert.sameValue(Error.prototype.message, ""); + +for (const error of nativeErrors) { + assert.sameValue(Reflect.ownKeys(error.prototype).sort().toString(), "constructor,message,name"); + assert.sameValue(error.prototype.name, error.name); + assert.sameValue(error.prototype.message, ""); + assert.sameValue(error.prototype.constructor, error); +} + diff --git a/test/staging/sm/Error/prototype.js b/test/staging/sm/Error/prototype.js new file mode 100644 index 0000000000..99e8ee30fb --- /dev/null +++ b/test/staging/sm/Error/prototype.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const nativeErrors = [ + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +]; + +assert.sameValue(Reflect.getPrototypeOf(Error.prototype), Object.prototype) + +for (const error of nativeErrors) { + assert.sameValue(Reflect.getPrototypeOf(error.prototype), Error.prototype); +} + diff --git a/test/staging/sm/Exceptions/error-expando-reconfigure.js b/test/staging/sm/Exceptions/error-expando-reconfigure.js new file mode 100644 index 0000000000..5996b3d546 --- /dev/null +++ b/test/staging/sm/Exceptions/error-expando-reconfigure.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "error-expando-reconfigure.js" +//----------------------------------------------------------------------------- +var BUGNUMBER = 961494; +var summary = + "Reconfiguring the first expando property added to an Error object " + + "shouldn't assert"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var err = new Error(); // no message argument => no err.message property +err.expando = 17; +Object.defineProperty(err, "expando", { configurable: false }); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Exceptions/error-property-enumerability.js b/test/staging/sm/Exceptions/error-property-enumerability.js new file mode 100644 index 0000000000..10184a9fc3 --- /dev/null +++ b/test/staging/sm/Exceptions/error-property-enumerability.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var errors = ["Error", "EvalError", "RangeError", "ReferenceError", + "SyntaxError", "TypeError", "URIError"]; + +for (var i = 0; i < errors.length; i++) { + var error = this[errors[i]]; + + var desc = Object.getOwnPropertyDescriptor(error.prototype, "name"); + assert.sameValue(!!desc, true, errors[i] + ".prototype.name should exist"); + assert.sameValue((desc || {}).enumerable, false, errors[i] + ".prototype.name should not be enumerable"); + + desc = Object.getOwnPropertyDescriptor(error.prototype, "message"); + assert.sameValue(!!desc, true, errors[i] + ".prototype.message should exist"); + assert.sameValue((desc || {}).enumerable, false, errors[i] + ".prototype.message should not be enumerable"); + + var instance = new error; + desc = Object.getOwnPropertyDescriptor(instance, "message"); + assert.sameValue(!!desc, false, "new " + errors[i] + ".message should not exist"); + + instance = new error("a message"); + desc = Object.getOwnPropertyDescriptor(instance, "message"); + assert.sameValue(!!desc, true, "new " + errors[i] + "(...).message should exist"); + assert.sameValue((desc || {}).enumerable, false, "new " + errors[i] + "(...).message should not be enumerable"); +} + diff --git a/test/staging/sm/Function/10.2.1.1.6.js b/test/staging/sm/Function/10.2.1.1.6.js new file mode 100644 index 0000000000..684c8b0976 --- /dev/null +++ b/test/staging/sm/Function/10.2.1.1.6.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function strictThis() { 'use strict'; return this; } + +/* Check that calls of flat closure slots get the right |this|. */ +function flat(g) { + function h() { return g(); } + return h; +} +assert.sameValue(flat(strictThis)(), undefined); + +/* Check that calls up upvars get the right |this|. */ +function upvar(f) { + function h() { + return f(); + } + return h(); +} +assert.sameValue(upvar(strictThis), undefined); + +/* Check that calls to with-object properties get an appropriate 'this'. */ +var obj = { f: strictThis }; +with (obj) { + /* + * The method won't compile anything containing a 'with', but it can + * compile 'g'. + */ + function g() { return f(); } + assert.sameValue(g(), obj); +} + diff --git a/test/staging/sm/Function/15.3.4.3-01.js b/test/staging/sm/Function/15.3.4.3-01.js new file mode 100644 index 0000000000..0173747ba5 --- /dev/null +++ b/test/staging/sm/Function/15.3.4.3-01.js @@ -0,0 +1,248 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 562448; +var summary = 'Function.prototype.apply should accept any arraylike arguments'; +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectTypeError(fun, msg) +{ + try + { + fun(); + assert.sameValue(true, false, "should have thrown a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, msg + "; instead threw " + e); + } +} + +function fun() { } + +var global = this; + + +/* Step 1. */ +var nonfuns = [null, 1, -1, 2.5, "[[Call]]", undefined, true, false, {}]; +for (var i = 0, sz = nonfuns.length; i < sz; i++) +{ + var f = function() + { + Function.prototype.apply.apply(nonfuns[i], [1, 2, 3]); + }; + var msg = + "expected TypeError calling Function.prototype.apply with uncallable this"; + expectTypeError(f, msg); +} + + +/* Step 2. */ +var thisObj = {}; + +var currentThis, currentThisBox; +function funLength() +{ + assert.sameValue(arguments.length, 0, "should have been called with no arguments"); + assert.sameValue(this, currentThis, "wrong this"); +} +function strictFunLength() +{ + "use strict"; + assert.sameValue(arguments.length, 0, "should have been called with no arguments"); + assert.sameValue(this, currentThis, "wrong this"); +} + +currentThis = global; +funLength.apply(); +funLength.apply(undefined); +funLength.apply(undefined, undefined); +funLength.apply(undefined, null); + +currentThis = undefined; +strictFunLength.apply(); +strictFunLength.apply(undefined); +strictFunLength.apply(undefined, undefined); +strictFunLength.apply(undefined, null); + +currentThis = null; +strictFunLength.apply(null); +strictFunLength.apply(null, undefined); +strictFunLength.apply(null, null); + +currentThis = thisObj; +funLength.apply(thisObj); +funLength.apply(thisObj, null); +funLength.apply(thisObj, undefined); +strictFunLength.apply(thisObj); +strictFunLength.apply(thisObj, null); +strictFunLength.apply(thisObj, undefined); + +currentThis = 17; +strictFunLength.apply(17); +strictFunLength.apply(17, null); +strictFunLength.apply(17, undefined); + +function funThisPrimitive() +{ + assert.sameValue(arguments.length, 0, "should have been called with no arguments"); + assert.sameValue(this instanceof currentThisBox, true, + "this not instanceof " + currentThisBox); + assert.sameValue(this.valueOf(), currentThis, + "wrong this valueOf()"); +} + +currentThis = 17; +currentThisBox = Number; +funThisPrimitive.apply(17); +funThisPrimitive.apply(17, undefined); +funThisPrimitive.apply(17, null); + +currentThis = "foopy"; +currentThisBox = String; +funThisPrimitive.apply("foopy"); +funThisPrimitive.apply("foopy", undefined); +funThisPrimitive.apply("foopy", null); + +currentThis = false; +currentThisBox = Boolean; +funThisPrimitive.apply(false); +funThisPrimitive.apply(false, undefined); +funThisPrimitive.apply(false, null); + + +/* Step 3. */ +var nonobjs = [1, -1, 2.5, "[[Call]]", true, false]; +for (var i = 0, sz = nonobjs.length; i < sz; i++) +{ + var f = function() { fun.apply(thisObj, nonobjs[i]); }; + var msg = "should have thrown a TypeError with non-object arguments"; + expectTypeError(f, msg); +} + + +/* Step 4. */ +var args = { get length() { throw 42; } }; +try +{ + fun.apply(thisObj, args); +} +catch (e) +{ + assert.sameValue(e, 42, "didn't throw result of [[Get]] on arguments object"); +} + + +/* + * NB: There was an erratum removing the steps numbered 5 and 7 in the original + * version of ES5; see also the comments in js_fun_apply. + */ + +/* Step 5. */ +var called = false; +var argsObjectLength = + { length: { valueOf: function() { called = true; return 17; } } }; + +fun.apply({}, argsObjectLength); +assert.sameValue(called, true, "should have been set in valueOf called via ToUint32"); + +var upvar = "unset"; +var argsObjectPrimitiveLength = + { + length: + { + valueOf: function() { upvar = "valueOf"; return {}; }, + toString: function() + { + upvar = upvar === "valueOf" ? "both" : "toString"; + return 17; + } + } + }; +fun.apply({}, argsObjectPrimitiveLength); +assert.sameValue(upvar, "both", "didn't call all hooks properly"); + + +/* Step 6-9. */ +var seenThis, res, steps; +var argsAccessors = + { + length: 4, + get 0() { steps.push("0"); return 1; }, + get 1() { steps.push("1"); return 2; }, + // make sure values shine through holes + get 3() { steps.push("3"); return 8; }, + }; + +Object.prototype[2] = 729; + +seenThis = "not seen"; +function argsAsArray() +{ + seenThis = this; + steps.push(Math.PI); + return Array.prototype.map.call(arguments, function(v) { return v; }); +} + +steps = []; +res = argsAsArray.apply(thisObj, argsAccessors); +assert.sameValue(seenThis, thisObj, "saw wrong this"); + +assert.sameValue(steps.length, 4, "wrong steps: " + steps); +assert.sameValue(steps[0], "0", "bad step 0"); +assert.sameValue(steps[1], "1", "bad step 1"); +assert.sameValue(steps[2], "3", "bad step 3"); +assert.sameValue(steps[3], Math.PI, "bad last step"); + +assert.sameValue(res.length, 4, "wrong return: " + res); +assert.sameValue(res[0], 1, "wrong ret[0]"); +assert.sameValue(res[1], 2, "wrong ret[0]"); +assert.sameValue(res[2], 729, "wrong ret[0]"); +assert.sameValue(res[3], 8, "wrong ret[0]"); + +seenThis = "not seen"; +function strictArgsAsArray() +{ + "use strict"; + seenThis = this; + steps.push(NaN); + return Array.prototype.map.call(arguments, function(v) { return v; }); +} + +steps = []; +res = strictArgsAsArray.apply(null, argsAccessors); +assert.sameValue(seenThis, null, "saw wrong this"); + +assert.sameValue(steps.length, 4, "wrong steps: " + steps); +assert.sameValue(steps[0], "0", "bad step 0"); +assert.sameValue(steps[1], "1", "bad step 1"); +assert.sameValue(steps[2], "3", "bad step 3"); +assert.sameValue(steps[3], 0 / 0, "bad last step"); + +assert.sameValue(res.length, 4, "wrong return: " + res); +assert.sameValue(res[0], 1, "wrong ret[0]"); +assert.sameValue(res[1], 2, "wrong ret[0]"); +assert.sameValue(res[2], 729, "wrong ret[0]"); +assert.sameValue(res[3], 8, "wrong ret[0]"); + +strictArgsAsArray.apply(17, argsAccessors); +assert.sameValue(seenThis, 17, "saw wrong this"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/Function-prototype.js b/test/staging/sm/Function/Function-prototype.js new file mode 100644 index 0000000000..a9ca8df4e8 --- /dev/null +++ b/test/staging/sm/Function/Function-prototype.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var desc = Object.getOwnPropertyDescriptor(Function.prototype, "length"); +assert.deepEqual(desc, + {value: 0, writable: false, enumerable: false, configurable: true}); + +assert.sameValue(Function.prototype.prototype, undefined); +assert.sameValue(Function.prototype.callee, undefined); +assertThrowsInstanceOf(() => Function.prototype.caller, TypeError); +assertThrowsInstanceOf(() => Function.prototype.arguments, TypeError); + diff --git a/test/staging/sm/Function/Function-with-eval.js b/test/staging/sm/Function/Function-with-eval.js new file mode 100644 index 0000000000..80655f729d --- /dev/null +++ b/test/staging/sm/Function/Function-with-eval.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(new Function( + "eval('var foo = 915805');" + + "return foo;" + )(), + 915805); + +assert.sameValue(new Function( + "eval('function foo() {" + + "return 915805;" + + "}');" + + "return foo;" + )()(), + 915805); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Function/arguments-caller-callee.js b/test/staging/sm/Function/arguments-caller-callee.js new file mode 100644 index 0000000000..84e7640e68 --- /dev/null +++ b/test/staging/sm/Function/arguments-caller-callee.js @@ -0,0 +1,69 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'arguments-caller-callee.js'; +var BUGNUMBER = 514563; +var summary = "arguments.caller and arguments.callee are poison pills in ES5, " + + "later changed in ES2017 to only poison pill arguments.callee."; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// behavior + +function expectTypeError(fun) +{ + try + { + fun(); + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "expected TypeError calling function" + + ("name" in fun ? " " + fun.name : "") + ", instead got: " + e); + } +} + +function bar() { "use strict"; return arguments; } +assert.sameValue(bar().caller, undefined); // No error when accessing arguments.caller in ES2017+ +expectTypeError(function barCallee() { bar().callee; }); + +function baz() { return arguments; } +assert.sameValue(baz().callee, baz); + + +// accessor identity + +function strictMode() { "use strict"; return arguments; } +var canonicalTTE = Object.getOwnPropertyDescriptor(strictMode(), "callee").get; + +var args = strictMode(); + +var argsCaller = Object.getOwnPropertyDescriptor(args, "caller"); +assert.sameValue(argsCaller, undefined); + +var argsCallee = Object.getOwnPropertyDescriptor(args, "callee"); +assert.sameValue("get" in argsCallee, true); +assert.sameValue("set" in argsCallee, true); +assert.sameValue(argsCallee.get, canonicalTTE); +assert.sameValue(argsCallee.set, canonicalTTE); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/arguments-extra-property.js b/test/staging/sm/Function/arguments-extra-property.js new file mode 100644 index 0000000000..24c2680a1f --- /dev/null +++ b/test/staging/sm/Function/arguments-extra-property.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1263811; +var summary = "GetElem for modified arguments shouldn't be optimized to get original argument."; + +print(BUGNUMBER + ": " + summary); + +function testModifyFirst() { + function f() { + Object.defineProperty(arguments, 1, { value: 30 }); + assert.sameValue(arguments[1], 30); + } + for (let i = 0; i < 10; i++) + f(10, 20); +} +testModifyFirst(); + +function testModifyLater() { + function f() { + var ans = 20; + for (let i = 0; i < 10; i++) { + if (i == 5) { + Object.defineProperty(arguments, 1, { value: 30 }); + ans = 30; + } + assert.sameValue(arguments[1], ans); + } + } + for (let i = 0; i < 10; i++) + f(10, 20); +} +testModifyLater(); + diff --git a/test/staging/sm/Function/arguments-iterator.js b/test/staging/sm/Function/arguments-iterator.js new file mode 100644 index 0000000000..2e05a291be --- /dev/null +++ b/test/staging/sm/Function/arguments-iterator.js @@ -0,0 +1,176 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 992617; +var summary = "Implement arguments[@@iterator]."; + +print(BUGNUMBER + ": " + summary); + +// MappedArgumentsObject +let mapped = [ + function(a, b, c) { + assert.sameValue(Symbol.iterator in arguments, true); + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function(a, b, c) { + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function(a, b, c) { + arguments[Symbol.iterator] = 10; + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function(a, b, c) { + Object.defineProperty(arguments, Symbol.iterator, { + value: 10, writable: true, enumerable: true, configurable: true + }); + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function(a, b, c) { + assert.sameValue(arguments[Symbol.iterator], Array.prototype[Symbol.iterator]); + }, + function(a, b, c) { + assert.sameValue(arguments[Symbol.iterator].name, "values"); + }, + function(a, b, c) { + var desc = Object.getOwnPropertyDescriptor(arguments, Symbol.iterator); + assert.sameValue("value" in desc, true); + assert.sameValue(desc.value, Array.prototype[Symbol.iterator]); + assert.sameValue(desc.writable, true); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + }, + function(a, b, c) { + var iter = arguments[Symbol.iterator](); + assert.deepEqual(iter.next(), { value: 10, done: false }); + assert.deepEqual(iter.next(), { value: 20, done: false }); + assert.deepEqual(iter.next(), { value: 30, done: false }); + assert.deepEqual(iter.next(), { value: undefined, done: true }); + }, + function(a, b, c) { + assert.deepEqual([...arguments], [10, 20, 30]); + }, + function(a, b, c) { + b = 40; + assert.deepEqual([...arguments], [10, 40, 30]); + }, + function(a, b, c) { + arguments.length = 4; + assert.deepEqual([...arguments], [10, 20, 30, undefined]); + }, + function(a, b, c) { + arguments[5] = 50; + assert.deepEqual([...arguments], [10, 20, 30]); + }, + function(a, b, c) { + arguments[Symbol.iterator] = function*() { + yield 40; + yield 50; + yield 60; + }; + assert.deepEqual([...arguments], [40, 50, 60]); + }, +]; +for (let f of mapped) { + f(10, 20, 30); +} + +var g1 = createNewGlobal(); +assert.sameValue(g1.eval(` +function f(a, b, c) { + return arguments[Symbol.iterator].name; +} +f(1, 2, 3); +`), "values"); + +// UnmappedArgumentsObject +let unmapped = [ + function([a], b, c) { + assert.sameValue(Symbol.iterator in arguments, true); + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function([a], b, c) { + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function([a], b, c) { + arguments[Symbol.iterator] = 10; + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function([a], b, c) { + Object.defineProperty(arguments, Symbol.iterator, { + value: 10, writable: true, enumerable: true, configurable: true + }); + delete arguments[Symbol.iterator]; + assert.sameValue(Symbol.iterator in arguments, false); + }, + function([a], b, c) { + assert.sameValue(arguments[Symbol.iterator], Array.prototype[Symbol.iterator]); + }, + function([a], b, c) { + assert.sameValue(arguments[Symbol.iterator].name, "values"); + }, + function([a], b, c) { + var desc = Object.getOwnPropertyDescriptor(arguments, Symbol.iterator); + assert.sameValue("value" in desc, true); + assert.sameValue(desc.value, Array.prototype[Symbol.iterator]); + assert.sameValue(desc.writable, true); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + }, + function([a], b, c) { + var iter = arguments[Symbol.iterator](); + assert.deepEqual(iter.next(), { value: [10], done: false }); + assert.deepEqual(iter.next(), { value: 20, done: false }); + assert.deepEqual(iter.next(), { value: 30, done: false }); + assert.deepEqual(iter.next(), { value: undefined, done: true }); + }, + function([a], b, c) { + assert.deepEqual([...arguments], [[10], 20, 30]); + }, + function([a], b, c) { + b = 40; + assert.deepEqual([...arguments], [[10], 20, 30]); + }, + function([a], b, c) { + arguments.length = 4; + assert.deepEqual([...arguments], [[10], 20, 30, undefined]); + }, + function([a], b, c) { + arguments[5] = 50; + assert.deepEqual([...arguments], [[10], 20, 30]); + }, + function([a], b, c) { + arguments[Symbol.iterator] = function*() { + yield 40; + yield 50; + yield 60; + }; + assert.deepEqual([...arguments], [40, 50, 60]); + }, +]; +for (let f of unmapped) { + f([10], 20, 30); +} + +var g2 = createNewGlobal(); +assert.sameValue(g2.eval(` +function f([a], b, c) { + return arguments[Symbol.iterator].name; +} +f([1], 2, 3); +`), "values"); + diff --git a/test/staging/sm/Function/arguments-parameter-shadowing.js b/test/staging/sm/Function/arguments-parameter-shadowing.js new file mode 100644 index 0000000000..d68c73d174 --- /dev/null +++ b/test/staging/sm/Function/arguments-parameter-shadowing.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that var declarations of arguments "shadows" the arguments binding +// used in parameter expressions. + +function g8(h = () => arguments) { + var arguments = 0; + assert.sameValue(arguments, 0); + assert.sameValue(arguments === h(), false); +} +g8(); + +function g9(h = () => arguments) { + var arguments; + assert.sameValue(void 0 === arguments, false); + assert.sameValue(h(), arguments); + arguments = 0; + assert.sameValue(arguments, 0); + assert.sameValue(arguments === h(), false); +} +g9(); + diff --git a/test/staging/sm/Function/arguments-property-attributes.js b/test/staging/sm/Function/arguments-property-attributes.js new file mode 100644 index 0000000000..12eb714b50 --- /dev/null +++ b/test/staging/sm/Function/arguments-property-attributes.js @@ -0,0 +1,103 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'arguments-property-attributes.js'; +var BUGNUMBER = 516255; +var summary = "Attributes for properties of arguments objects"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// normal + +function args() { return arguments; } +var a = args(0, 1); + +var argProps = Object.getOwnPropertyNames(a).sort(); +assert.sameValue(argProps.indexOf("callee") >= 0, true); +assert.sameValue(argProps.indexOf("0") >= 0, true); +assert.sameValue(argProps.indexOf("1") >= 0, true); +assert.sameValue(argProps.indexOf("length") >= 0, true); + +var calleeDesc = Object.getOwnPropertyDescriptor(a, "callee"); +assert.sameValue(calleeDesc.value, args); +assert.sameValue(calleeDesc.writable, true); +assert.sameValue(calleeDesc.enumerable, false); +assert.sameValue(calleeDesc.configurable, true); + +var zeroDesc = Object.getOwnPropertyDescriptor(a, "0"); +assert.sameValue(zeroDesc.value, 0); +assert.sameValue(zeroDesc.writable, true); +assert.sameValue(zeroDesc.enumerable, true); +assert.sameValue(zeroDesc.configurable, true); + +var oneDesc = Object.getOwnPropertyDescriptor(a, "1"); +assert.sameValue(oneDesc.value, 1); +assert.sameValue(oneDesc.writable, true); +assert.sameValue(oneDesc.enumerable, true); +assert.sameValue(oneDesc.configurable, true); + +var lengthDesc = Object.getOwnPropertyDescriptor(a, "length"); +assert.sameValue(lengthDesc.value, 2); +assert.sameValue(lengthDesc.writable, true); +assert.sameValue(lengthDesc.enumerable, false); +assert.sameValue(lengthDesc.configurable, true); + + +// strict + +function strictArgs() { "use strict"; return arguments; } +var sa = strictArgs(0, 1); + +var strictArgProps = Object.getOwnPropertyNames(sa).sort(); +assert.sameValue(strictArgProps.indexOf("callee") >= 0, true); +assert.sameValue(strictArgProps.indexOf("caller") >= 0, false); +assert.sameValue(strictArgProps.indexOf("0") >= 0, true); +assert.sameValue(strictArgProps.indexOf("1") >= 0, true); +assert.sameValue(strictArgProps.indexOf("length") >= 0, true); + +var strictCalleeDesc = Object.getOwnPropertyDescriptor(sa, "callee"); +assert.sameValue(typeof strictCalleeDesc.get, "function"); +assert.sameValue(typeof strictCalleeDesc.set, "function"); +assert.sameValue(strictCalleeDesc.get, strictCalleeDesc.set); +assert.sameValue(strictCalleeDesc.enumerable, false); +assert.sameValue(strictCalleeDesc.configurable, false); + +var strictCallerDesc = Object.getOwnPropertyDescriptor(sa, "caller"); +assert.sameValue(strictCallerDesc, undefined); + +var strictZeroDesc = Object.getOwnPropertyDescriptor(sa, "0"); +assert.sameValue(strictZeroDesc.value, 0); +assert.sameValue(strictZeroDesc.writable, true); +assert.sameValue(strictZeroDesc.enumerable, true); +assert.sameValue(strictZeroDesc.configurable, true); + +var strictOneDesc = Object.getOwnPropertyDescriptor(sa, "1"); +assert.sameValue(strictOneDesc.value, 1); +assert.sameValue(strictOneDesc.writable, true); +assert.sameValue(strictOneDesc.enumerable, true); +assert.sameValue(strictOneDesc.configurable, true); + +var strictLengthDesc = Object.getOwnPropertyDescriptor(sa, "length"); +assert.sameValue(strictLengthDesc.value, 2); +assert.sameValue(strictLengthDesc.writable, true); +assert.sameValue(strictLengthDesc.enumerable, false); +assert.sameValue(strictLengthDesc.configurable, true); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/arrow-has-duplicated.js b/test/staging/sm/Function/arrow-has-duplicated.js new file mode 100644 index 0000000000..5234061ff5 --- /dev/null +++ b/test/staging/sm/Function/arrow-has-duplicated.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure duplicated name is allowed in non-strict. +function f0(a, a) { +} + +// SyntaxError should be thrown if arrow function has duplicated name. +assertThrowsInstanceOf(() => eval(` +(a, a) => { +}; +`), SyntaxError); +assertThrowsInstanceOf(() => eval(` +(a, ...a) => { +}; +`), SyntaxError); + diff --git a/test/staging/sm/Function/bound-length-and-name.js b/test/staging/sm/Function/bound-length-and-name.js new file mode 100644 index 0000000000..dcff97cbac --- /dev/null +++ b/test/staging/sm/Function/bound-length-and-name.js @@ -0,0 +1,50 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var proxy = new Proxy(function() {}, { + getOwnPropertyDescriptor(target, name) { + assert.sameValue(name, "length"); + return {value: 3, configurable: true}; + }, + + get(target, name) { + if (name == "length") + return 3; + if (name == "name") + return "hello world"; + assert.sameValue(false, true); + } +}) + +var bound = Function.prototype.bind.call(proxy); +assert.sameValue(bound.name, "bound hello world"); +assert.sameValue(bound.length, 3); + +var fun = function() {}; +Object.defineProperty(fun, "name", {value: 1337}); +Object.defineProperty(fun, "length", {value: "15"}); +bound = fun.bind(); +assert.sameValue(bound.name, "bound "); +assert.sameValue(bound.length, 0); + +Object.defineProperty(fun, "length", {value: Number.MAX_SAFE_INTEGER}); +bound = fun.bind(); +assert.sameValue(bound.length, Number.MAX_SAFE_INTEGER); + +Object.defineProperty(fun, "length", {value: -100}); +bound = fun.bind(); +assert.sameValue(bound.length, 0); + +fun = function f(a, ...b) { }; +assert.sameValue(fun.length, 1); +bound = fun.bind(); +assert.sameValue(bound.length, 1); + diff --git a/test/staging/sm/Function/bound-non-constructable.js b/test/staging/sm/Function/bound-non-constructable.js new file mode 100644 index 0000000000..92f9f6d510 --- /dev/null +++ b/test/staging/sm/Function/bound-non-constructable.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var objects = [ + Math.sin.bind(null), + new Proxy(Math.sin.bind(null), {}), + Function.prototype.bind.call(new Proxy(Math.sin, {})) +] + +for (var obj of objects) { + // Target is not constructable, so a new array should be created internally. + assert.deepEqual(Array.from.call(obj, [1, 2, 3]), [1, 2, 3]); + assert.deepEqual(Array.of.call(obj, 1, 2, 3), [1, 2, 3]); + + // Make sure they are callable, but not constructable. + obj(); + assertThrowsInstanceOf(() => new obj, TypeError); +} + diff --git a/test/staging/sm/Function/builtin-no-construct.js b/test/staging/sm/Function/builtin-no-construct.js new file mode 100644 index 0000000000..60c51ccadc --- /dev/null +++ b/test/staging/sm/Function/builtin-no-construct.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function checkMethod(method) { + try { + new method(); + assert.sameValue(0, 1, "not reached " + method); + } catch (e) { + assert.sameValue(e.message.indexOf(" is not a constructor") === -1, false); + } +} + +function checkMethods(proto) { + var names = Object.getOwnPropertyNames(proto); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (["constructor", "arguments", "caller"].indexOf(name) >= 0) + continue; + var prop = proto[name]; + if (typeof prop === "function") + checkMethod(prop); + } +} + +checkMethod(Function.prototype); +checkMethods(JSON); +checkMethods(Math); +checkMethods(Proxy); + +var builtin_ctors = [ + Object, Function, Array, String, Boolean, Number, Date, RegExp, Error, + EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError, +]; + +for (var i = 0; i < builtin_ctors.length; i++) { + checkMethods(builtin_ctors[i]); + checkMethods(builtin_ctors[i].prototype); +} + +var builtin_funcs = [ + eval, isFinite, isNaN, parseFloat, parseInt, + decodeURI, decodeURIComponent, encodeURI, encodeURIComponent +]; + +for (var i = 0; i < builtin_funcs.length; i++) { + checkMethod(builtin_funcs[i]); +} + diff --git a/test/staging/sm/Function/builtin-no-prototype.js b/test/staging/sm/Function/builtin-no-prototype.js new file mode 100644 index 0000000000..1129de2493 --- /dev/null +++ b/test/staging/sm/Function/builtin-no-prototype.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(undefined, void 0); + +assert.sameValue(Function.prototype.hasOwnProperty('prototype'), false); +assert.sameValue(Function.prototype.prototype, undefined); + +var builtin_ctors = [ + Object, Function, Array, String, Boolean, Number, Date, RegExp, Error, + EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError +]; + +for (var i = 0; i < builtin_ctors.length; i++) { + var c = builtin_ctors[i]; + assert.sameValue(typeof c.prototype, (c === Function) ? "function" : "object"); + assert.sameValue(c.prototype.constructor, c); +} + +var builtin_funcs = [ + eval, isFinite, isNaN, parseFloat, parseInt, + decodeURI, decodeURIComponent, encodeURI, encodeURIComponent +]; + +for (var i = 0; i < builtin_funcs.length; i++) { + assert.sameValue(builtin_funcs[i].hasOwnProperty('prototype'), false); + assert.sameValue(builtin_funcs[i].prototype, undefined); +} + +var names = Object.getOwnPropertyNames(Math); +for (var i = 0; i < names.length; i++) { + var m = Math[names[i]]; + if (typeof m === "function") + assert.sameValue(m.prototype, undefined); +} + +assert.sameValue(0, 0, "don't crash"); diff --git a/test/staging/sm/Function/configurable-length-builtins.js b/test/staging/sm/Function/configurable-length-builtins.js new file mode 100644 index 0000000000..c898c43d38 --- /dev/null +++ b/test/staging/sm/Function/configurable-length-builtins.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Deleting .length from a variety of builtin functions works as expected. +for (var fun of [Math.sin, Array.prototype.map, eval]) { + assert.sameValue(delete fun.length, true); + assert.sameValue(fun.hasOwnProperty("length"), false); + assert.sameValue("length" in fun, true); // still inheriting Function.prototype.length + assert.sameValue(fun.length, 0); + + // The inherited property is nonwritable, so assigning still fails + // (silently, in sloppy mode). + fun.length = Math.hypot; + assert.sameValue(fun.length, 0); + + // It can be shadowed via defineProperty. + Object.defineProperty(fun, "length", {value: Math.hypot}); + assert.sameValue(fun.length, Math.hypot); +} + diff --git a/test/staging/sm/Function/configurable-length.js b/test/staging/sm/Function/configurable-length.js new file mode 100644 index 0000000000..cd3d3737e6 --- /dev/null +++ b/test/staging/sm/Function/configurable-length.js @@ -0,0 +1,95 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Very simple initial test that the "length" property of a function is +// configurable. More thorough tests follow. +var f = function (a1, a2, a3, a4) {}; +assert.sameValue(delete f.length, true); +assert.sameValue(f.hasOwnProperty("length"), false); +assert.sameValue(f.length, 0); // inherited from Function.prototype.length +assert.sameValue(delete Function.prototype.length, true); +assert.sameValue(f.length, undefined); + + +// Now for the details. +// +// Many of these tests are poking at the "resolve hook" mechanism SM uses to +// lazily create this property, which is wonky and deserving of some extra +// skepticism. + +// We've deleted Function.prototype.length. Check that the resolve hook does +// not resurrect it. +assert.sameValue("length" in Function.prototype, false); +Function.prototype.length = 7; +assert.sameValue(Function.prototype.length, 7); +delete Function.prototype.length; +assert.sameValue(Function.prototype.length, undefined); + +// OK, define Function.prototype.length back to its original state per spec, so +// the remaining tests can run in a more typical environment. +Object.defineProperty(Function.prototype, "length", {value: 0, configurable: true}); + +// Check the property descriptor of a function length property. +var g = function f(a1, a2, a3, a4, a5) {}; +var desc = Object.getOwnPropertyDescriptor(g, "length"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, false); +assert.sameValue(desc.value, 5); + +// After deleting the length property, assigning to f.length fails because +// Function.prototype.length is non-writable. In strict mode it would throw. +delete g.length; +g.length = 12; +assert.sameValue(g.hasOwnProperty("length"), false); +assert.sameValue(g.length, 0); + +// After deleting both the length property and Function.prototype.length, +// assigning to f.length creates a new plain old data property. +delete Function.prototype.length; +g.length = 13; +var desc = Object.getOwnPropertyDescriptor(g, "length"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.value, 13); + +// Deleting the .length of one instance of a FunctionDeclaration does not +// affect other instances. +function mkfun() { + function fun(a1, a2, a3, a4, a5) {} + return fun; +} +g = mkfun(); +var h = mkfun(); +delete h.length; +assert.sameValue(g.length, 5); +assert.sameValue(mkfun().length, 5); + +// Object.defineProperty on a brand-new function is sufficient to cause the +// LENGTH_RESOLVED flag to be set. +g = mkfun(); +Object.defineProperty(g, "length", {value: 0}); +assert.sameValue(delete g.length, true); +assert.sameValue(g.hasOwnProperty("length"), false); + +// Object.defineProperty on a brand-new function correctly merges new +// attributes with the builtin ones. +g = mkfun(); +Object.defineProperty(g, "length", { value: 42 }); +desc = Object.getOwnPropertyDescriptor(g, "length"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, false); +assert.sameValue(desc.value, 42); + diff --git a/test/staging/sm/Function/constructor-binding.js b/test/staging/sm/Function/constructor-binding.js new file mode 100644 index 0000000000..287ebc3806 --- /dev/null +++ b/test/staging/sm/Function/constructor-binding.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 636635; +var summary = "A function created by Function constructor shouldn't have anonymous binding"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(new Function("return typeof anonymous")(), "undefined"); +assert.sameValue(new Function("return function() { return typeof anonymous; }")()(), "undefined"); +assert.sameValue(new Function("return function() { eval(''); return typeof anonymous; }")()(), "undefined"); + diff --git a/test/staging/sm/Function/create-function-parse-before-getprototype.js b/test/staging/sm/Function/create-function-parse-before-getprototype.js new file mode 100644 index 0000000000..da2a1ddb72 --- /dev/null +++ b/test/staging/sm/Function/create-function-parse-before-getprototype.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var getProtoCalled = false; + +var newTarget = Object.defineProperty(function(){}.bind(), "prototype", { + get() { + getProtoCalled = true; + return null; + } +}); + +assertThrowsInstanceOf(() => { + Reflect.construct(Function, ["@error"], newTarget); +}, SyntaxError); + +assert.sameValue(getProtoCalled, false); + diff --git a/test/staging/sm/Function/function-bind.js b/test/staging/sm/Function/function-bind.js new file mode 100644 index 0000000000..4cd9e3a875 --- /dev/null +++ b/test/staging/sm/Function/function-bind.js @@ -0,0 +1,275 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'function-bind.js'; +var BUGNUMBER = 429507; +var summary = "ES5: Function.prototype.bind"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// ad-hoc testing + +assert.sameValue(Function.prototype.hasOwnProperty("bind"), true); + +var bind = Function.prototype.bind; +assert.sameValue(bind.length, 1); + + +var strictReturnThis = function() { "use strict"; return this; }; + +assert.sameValue(strictReturnThis.bind(undefined)(), undefined); +assert.sameValue(strictReturnThis.bind(null)(), null); + +var obj = {}; +assert.sameValue(strictReturnThis.bind(obj)(), obj); + +assert.sameValue(strictReturnThis.bind(NaN)(), NaN); + +assert.sameValue(strictReturnThis.bind(true)(), true); +assert.sameValue(strictReturnThis.bind(false)(), false); + +assert.sameValue(strictReturnThis.bind("foopy")(), "foopy"); + + +// rigorous, step-by-step testing + +function expectThrowTypeError(fun) +{ + assertThrowsInstanceOf(fun, TypeError); +} + +/* + * 1. Let Target be the this value. + * 2. If IsCallable(Target) is false, throw a TypeError exception. + */ +expectThrowTypeError(function() { bind.call(null); }); +expectThrowTypeError(function() { bind.call(undefined); }); +expectThrowTypeError(function() { bind.call(NaN); }); +expectThrowTypeError(function() { bind.call(0); }); +expectThrowTypeError(function() { bind.call(-0); }); +expectThrowTypeError(function() { bind.call(17); }); +expectThrowTypeError(function() { bind.call(42); }); +expectThrowTypeError(function() { bind.call("foobar"); }); +expectThrowTypeError(function() { bind.call(true); }); +expectThrowTypeError(function() { bind.call(false); }); +expectThrowTypeError(function() { bind.call([]); }); +expectThrowTypeError(function() { bind.call({}); }); + + +/* + * 3. Let A be a new (possibly empty) internal list of all of the argument + * values provided after thisArg (arg1, arg2 etc), in order. + * 4. Let F be a new native ECMAScript object . + * 5. Set all the internal methods, except for [[Get]], of F as specified in + * 8.12. + * 6. Set the [[Get]] internal property of F as specified in 15.3.5.4. + * 7. Set the [[TargetFunction]] internal property of F to Target. + * 8. Set the [[BoundThis]] internal property of F to the value of thisArg. + * 9. Set the [[BoundArgs]] internal property of F to A. + */ +// throughout + + +/* 10. Set the [[Class]] internal property of F to "Function". */ +var toString = Object.prototype.toString; +assert.sameValue(toString.call(function(){}), "[object Function]"); +assert.sameValue(toString.call(function a(){}), "[object Function]"); +assert.sameValue(toString.call(function(a){}), "[object Function]"); +assert.sameValue(toString.call(function a(b){}), "[object Function]"); +assert.sameValue(toString.call(function(){}.bind()), "[object Function]"); +assert.sameValue(toString.call(function a(){}.bind()), "[object Function]"); +assert.sameValue(toString.call(function(a){}.bind()), "[object Function]"); +assert.sameValue(toString.call(function a(b){}.bind()), "[object Function]"); + + +/* + * 11. Set the [[Prototype]] internal property of F to the standard built-in + * Function prototype object as specified in 15.3.3.1. + */ +assert.sameValue(Object.getPrototypeOf(bind.call(function(){})), Function.prototype); +assert.sameValue(Object.getPrototypeOf(bind.call(function a(){})), Function.prototype); +assert.sameValue(Object.getPrototypeOf(bind.call(function(a){})), Function.prototype); +assert.sameValue(Object.getPrototypeOf(bind.call(function a(b){})), Function.prototype); + + +/* + * 12. Set the [[Call]] internal property of F as described in 15.3.4.5.1. + */ +var a = Array.bind(1, 2); +assert.sameValue(a().length, 2); +assert.sameValue(a(4).length, 2); +assert.sameValue(a(4, 8).length, 3); + +function t() { return this; } +var bt = t.bind(t); +assert.sameValue(bt(), t); + +function callee() { return arguments.callee; } +var call = callee.bind(); +assert.sameValue(call(), callee); +assert.sameValue(new call(), callee); + + +/* + * 13. Set the [[Construct]] internal property of F as described in 15.3.4.5.2. + */ +function Point(x, y) +{ + this.x = x; + this.y = y; +} +var YAxisPoint = Point.bind(null, 0) + +assert.sameValue(YAxisPoint.hasOwnProperty("prototype"), false); +var p = new YAxisPoint(5); +assert.sameValue(p.x, 0); +assert.sameValue(p.y, 5); +assert.sameValue(p instanceof Point, true); +assert.sameValue(p instanceof YAxisPoint, true); +assert.sameValue(Object.prototype.toString.call(YAxisPoint), "[object Function]"); +assert.sameValue(YAxisPoint.length, 1); + + +/* + * 14. Set the [[HasInstance]] internal property of F as described in + * 15.3.4.5.3. + */ +function JoinArguments() +{ + this.args = Array.prototype.join.call(arguments, ", "); +} + +var Join1 = JoinArguments.bind(null, 1); +var Join2 = Join1.bind(null, 2); +var Join3 = Join2.bind(null, 3); +var Join4 = Join3.bind(null, 4); +var Join5 = Join4.bind(null, 5); +var Join6 = Join5.bind(null, 6); + +var r = new Join6(7); +assert.sameValue(r instanceof Join6, true); +assert.sameValue(r instanceof Join5, true); +assert.sameValue(r instanceof Join4, true); +assert.sameValue(r instanceof Join3, true); +assert.sameValue(r instanceof Join2, true); +assert.sameValue(r instanceof Join1, true); +assert.sameValue(r instanceof JoinArguments, true); +assert.sameValue(r.args, "1, 2, 3, 4, 5, 6, 7"); + + +/* + * 15. If the [[Class]] internal property of Target is "Function", then + * a. Let L be the length property of Target minus the length of A. + * b. Set the length own property of F to either 0 or L, whichever is larger. + * 16. Else set the length own property of F to 0. + */ +function none() { return arguments.length; } +assert.sameValue(none.bind(1, 2)(3, 4), 3); +assert.sameValue(none.bind(1, 2)(), 1); +assert.sameValue(none.bind(1)(2, 3), 2); +assert.sameValue(none.bind().length, 0); +assert.sameValue(none.bind(null).length, 0); +assert.sameValue(none.bind(null, 1).length, 0); +assert.sameValue(none.bind(null, 1, 2).length, 0); + +function one(a) { } +assert.sameValue(one.bind().length, 1); +assert.sameValue(one.bind(null).length, 1); +assert.sameValue(one.bind(null, 1).length, 0); +assert.sameValue(one.bind(null, 1, 2).length, 0); + +// retch +var br = Object.create(null, { length: { value: 0 } }); +try +{ + br = bind.call(/a/g, /a/g, "aaaa"); +} +catch (e) { /* nothing */ } +assert.sameValue(br.length, 0); + + +/* + * 17. Set the attributes of the length own property of F to the values + * specified in 15.3.5.1. + */ +var len1Desc = + Object.getOwnPropertyDescriptor(function(a, b, c){}.bind(), "length"); +assert.sameValue(len1Desc.value, 3); +assert.sameValue(len1Desc.writable, false); +assert.sameValue(len1Desc.enumerable, false); +assert.sameValue(len1Desc.configurable, true); + +var len2Desc = + Object.getOwnPropertyDescriptor(function(a, b, c){}.bind(null, 2), "length"); +assert.sameValue(len2Desc.value, 2); +assert.sameValue(len2Desc.writable, false); +assert.sameValue(len2Desc.enumerable, false); +assert.sameValue(len2Desc.configurable, true); + + +/* + * 18. Set the [[Extensible]] internal property of F to true. + */ +var bound = (function() { }).bind(); + +var isExtensible = Object.isExtensible || function() { return true; }; +assert.sameValue(isExtensible(bound), true); + +bound.foo = 17; +var fooDesc = Object.getOwnPropertyDescriptor(bound, "foo"); +assert.sameValue(fooDesc.value, 17); +assert.sameValue(fooDesc.writable, true); +assert.sameValue(fooDesc.enumerable, true); +assert.sameValue(fooDesc.configurable, true); + + +/* + * Steps 19-21 are removed from ES6, instead implemented through "arguments" and + * "caller" accessors on Function.prototype. So no own properties, but do check + * for the same observable behavior (modulo where the accessors live). + */ +function strict() { "use strict"; } +function nonstrict() {} + +function testBound(fun) +{ + var boundf = fun.bind(); + + assert.sameValue(Object.getOwnPropertyDescriptor(boundf, "arguments"), undefined, + "should be no arguments property"); + assert.sameValue(Object.getOwnPropertyDescriptor(boundf, "caller"), undefined, + "should be no caller property"); + + expectThrowTypeError(function() { return boundf.arguments; }); + expectThrowTypeError(function() { return boundf.caller; }); +} + +testBound(strict); +testBound(nonstrict); + +var nativeFunctionRegex = /^function\s*\(\)\s*{\s*\[native code\]\s*}$/ +assert.sameValue(nativeFunctionRegex.test((function unbound(){"body"}).bind().toString()), true); + + +/* 22. Return F. */ +var passim = function p(){}.bind(1); +assert.sameValue(typeof passim, "function"); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/function-call.js b/test/staging/sm/Function/function-call.js new file mode 100644 index 0000000000..849d074ea4 --- /dev/null +++ b/test/staging/sm/Function/function-call.js @@ -0,0 +1,137 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 575535; +var summary = 'Function.prototype.call'; +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectTypeError(fun, msg) +{ + try + { + fun(); + assert.sameValue(true, false, "should have thrown a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, msg + "; instead threw " + e); + } +} + +function fun() { } + +var global = this; + +assert.sameValue(Function.prototype.call.length, 1); + + +/* Step 1. */ +var nonfuns = [null, 1, -1, 2.5, "[[Call]]", undefined, true, false, {}]; +for (var i = 0, sz = nonfuns.length; i < sz; i++) +{ + var f = function() + { + Function.prototype.call.apply(nonfuns[i]); + }; + var msg = + "expected TypeError calling Function.prototype.call with uncallable this"; + expectTypeError(f, msg); +} + + +/* Steps 2-4. */ +function none() +{ + assert.sameValue(this, global, "bad this"); + assert.sameValue(arguments.length, 0, "wrong arguments"); +} + +none.call(); +none.call(undefined); +none.call(null); + +var seenThis; +function strictNone() +{ + "use strict"; + assert.sameValue(this, seenThis, "bad this"); + assert.sameValue(arguments.length, 0, "wrong arguments"); +} + +seenThis = undefined; +strictNone.call(); +strictNone.call(undefined); + +seenThis = null; +strictNone.call(null); + +seenThis = 17; +strictNone.call(17); + +var seenThisBox, args; +function some() +{ + assert.sameValue(this instanceof seenThisBox, true, + "this not instanceof " + seenThisBox); + assert.sameValue(this.valueOf(), seenThis, + "wrong this valueOf()"); + assert.sameValue(arguments.length, args.length, "wrong arguments count"); + for (var i = 0; i < args.length; i++) + assert.sameValue(arguments[i], args[i], "wrong argument " + i); +} + +seenThis = false; +seenThisBox = Boolean; +args = [8, 6, 7, NaN, undefined, 0.3]; +some.call(false, 8, 6, 7, NaN, undefined, 0.3); + +var obj = {}; + +seenThis = "foo"; +seenThisBox = String; +args = [obj]; +some.call("foo", obj); + +seenThis = obj; +seenThisBox = Object; +some.call(obj, obj); + +function strictSome() +{ + "use strict"; + assert.sameValue(this, seenThis, "wrong this"); + assert.sameValue(arguments.length, args.length, "wrong arguments count"); + for (var i = 0; i < args.length; i++) + assert.sameValue(arguments[i], args[i], "wrong argument " + i); +} + +seenThis = NaN; +args = [8, 6, 7, NaN, undefined, 0.3]; +strictSome.call(NaN, 8, 6, 7, NaN, undefined, 0.3); + +seenThis = "foo"; +args = [obj]; +strictSome.call("foo", obj); + +seenThis = obj; +strictSome.call(obj, obj); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/function-caller-restrictions.js b/test/staging/sm/Function/function-caller-restrictions.js new file mode 100644 index 0000000000..c0f76d32c2 --- /dev/null +++ b/test/staging/sm/Function/function-caller-restrictions.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Function#caller restrictions as proposed by +// https://github.com/claudepache/es-legacy-function-reflection/ + +function caller() { + return caller.caller; +} + +assert.sameValue(caller(), null); +assert.sameValue(Reflect.apply(caller, undefined, []), null); + +assert.sameValue([0].map(caller)[0], null); + +(function strict() { + "use strict"; + assert.sameValue(caller(), null); +})(); + +(async function() { + assert.sameValue(caller(), null); +})(); + +assert.sameValue(function*() { + yield caller(); +}().next().value, null); + + +if (typeof assert.sameValue === "function") { +} diff --git a/test/staging/sm/Function/function-caller.js b/test/staging/sm/Function/function-caller.js new file mode 100644 index 0000000000..770dfa598e --- /dev/null +++ b/test/staging/sm/Function/function-caller.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'function-caller.js'; +var BUGNUMBER = 514581; +var summary = "Function.prototype.caller should throw a TypeError for " + + "strict-mode functions"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// behavior + +function expectTypeError(fun) +{ + try + { + fun(); + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "expected TypeError calling function" + + ("name" in fun ? " " + fun.name : "") + ", instead got: " + e); + } +} + +function bar() { "use strict"; } +expectTypeError(function barCaller() { bar.caller; }); + +function baz() { "use strict"; return 17; } +expectTypeError(function bazCaller() { baz.caller; }); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/function-constructor-toString-arguments-before-parsing-params.js b/test/staging/sm/Function/function-constructor-toString-arguments-before-parsing-params.js new file mode 100644 index 0000000000..ff7e93371f --- /dev/null +++ b/test/staging/sm/Function/function-constructor-toString-arguments-before-parsing-params.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 920479; +var summary = + "Convert all arguments passed to Function() to string before doing any " + + "parsing of the to-be-created Function's parameters or body text"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertThrowsValue(() => Function("@", { toString() { throw 42; } }), 42); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Function/function-name-assignment.js b/test/staging/sm/Function/function-name-assignment.js new file mode 100644 index 0000000000..9913651bf3 --- /dev/null +++ b/test/staging/sm/Function/function-name-assignment.js @@ -0,0 +1,148 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 883377; +var summary = "Anonymous function name should be set based on assignment"; + +print(BUGNUMBER + ": " + summary); + +var fooSymbol = Symbol("foo"); +var emptySymbol = Symbol(""); +var undefSymbol = Symbol(); +var globalVar; + +var exprs = [ + ["function() {}", false], + ["function named() {}", true], + ["function*() {}", false], + ["function* named() {}", true], + ["async function() {}", false], + ["async function named() {}", true], + ["() => {}", false], + ["async () => {}", false], + ["class {}", false], + ["class named {}", true], +]; + +function testAssignmentExpression(expr, named) { + eval(` + var assignment; + assignment = ${expr}; + assert.sameValue(assignment.name, named ? "named" : "assignment"); + + globalVar = ${expr}; + assert.sameValue(globalVar.name, named ? "named" : "globalVar"); + + var obj = { dynamic: null }; + with (obj) { + dynamic = ${expr}; + } + assert.sameValue(obj.dynamic.name, named ? "named" : "dynamic"); + + (function namedLambda(param1, param2) { + var assignedToNamedLambda; + assignedToNamedLambda = namedLambda = ${expr}; + assert.sameValue(namedLambda.name, "namedLambda"); + assert.sameValue(assignedToNamedLambda.name, named ? "named" : "namedLambda"); + + param1 = ${expr}; + assert.sameValue(param1.name, named ? "named" : "param1"); + + { + let param1 = ${expr}; + assert.sameValue(param1.name, named ? "named" : "param1"); + + param2 = ${expr}; + assert.sameValue(param2.name, named ? "named" : "param2"); + } + })(); + + { + let nextedLexical1, nextedLexical2; + { + let nextedLexical1 = ${expr}; + assert.sameValue(nextedLexical1.name, named ? "named" : "nextedLexical1"); + + nextedLexical2 = ${expr}; + assert.sameValue(nextedLexical2.name, named ? "named" : "nextedLexical2"); + } + } + `); + + // Not applicable cases: not IsIdentifierRef. + eval(` + var inParen; + (inParen) = ${expr}; + assert.sameValue(inParen.name, named ? "named" : ""); + `); + + // Not applicable cases: not direct RHS. + if (!expr.includes("=>")) { + eval(` + var a = true && ${expr}; + assert.sameValue(a.name, named ? "named" : ""); + `); + } else { + // Arrow function cannot be RHS of &&. + eval(` + var a = true && (${expr}); + assert.sameValue(a.name, named ? "named" : ""); + `); + } + + // Not applicable cases: property. + eval(` + var obj = {}; + + obj.prop = ${expr}; + assert.sameValue(obj.prop.name, named ? "named" : ""); + + obj["literal"] = ${expr}; + assert.sameValue(obj["literal"].name, named ? "named" : ""); + `); + + // Not applicable cases: assigned again. + eval(` + var tmp = [${expr}]; + assert.sameValue(tmp[0].name, named ? "named" : ""); + + var assignment; + assignment = tmp[0]; + assert.sameValue(assignment.name, named ? "named" : ""); + `); +} +for (var [expr, named] of exprs) { + testAssignmentExpression(expr, named); +} + +function testVariableDeclaration(expr, named) { + eval(` + var varDecl = ${expr}; + assert.sameValue(varDecl.name, named ? "named" : "varDecl"); + `); +} +for (var [expr, named] of exprs) { + testVariableDeclaration(expr, named); +} + +function testLexicalBinding(expr, named) { + eval(` + let lexical = ${expr}; + assert.sameValue(lexical.name, named ? "named" : "lexical"); + + const constLexical = ${expr}; + assert.sameValue(constLexical.name, named ? "named" : "constLexical"); + `); +} +for (var [expr, named] of exprs) { + testLexicalBinding(expr, named); +} + diff --git a/test/staging/sm/Function/function-name-binding.js b/test/staging/sm/Function/function-name-binding.js new file mode 100644 index 0000000000..07ee62a2b8 --- /dev/null +++ b/test/staging/sm/Function/function-name-binding.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 883377; +var summary = "Anonymous function name should be set based on binding pattern"; + +print(BUGNUMBER + ": " + summary); + +var exprs = [ + ["function() {}", false], + ["function named() {}", true], + ["function*() {}", false], + ["function* named() {}", true], + ["async function() {}", false], + ["async function named() {}", true], + ["() => {}", false], + ["async () => {}", false], + ["class {}", false], + ["class named {}", true], +]; + +function testAssignmentProperty(expr, named) { + var f = eval(`(function({ prop1 = ${expr} }) { return prop1; })`); + assert.sameValue(f({}).name, named ? "named" : "prop1"); + + eval(` + var { prop1 = ${expr} } = {}; + assert.sameValue(prop1.name, named ? "named" : "prop1"); + `); +} +for (var [expr, named] of exprs) { + testAssignmentProperty(expr, named); +} + +function testAssignmentElement(expr, named) { + var f = eval(`(function([elem1 = ${expr}]) { return elem1; })`); + assert.sameValue(f([]).name, named ? "named" : "elem1"); + + eval(` + var [elem1 = ${expr}] = []; + assert.sameValue(elem1.name, named ? "named" : "elem1"); + `); +} +for (var [expr, named] of exprs) { + testAssignmentElement(expr, named); +} + +function testSingleNameBinding(expr, named) { + var f = eval(`(function(param1 = ${expr}) { return param1; })`); + assert.sameValue(f().name, named ? "named" : "param1"); +} +for (var [expr, named] of exprs) { + testSingleNameBinding(expr, named); +} + diff --git a/test/staging/sm/Function/function-name-class.js b/test/staging/sm/Function/function-name-class.js new file mode 100644 index 0000000000..05332af985 --- /dev/null +++ b/test/staging/sm/Function/function-name-class.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 883377; +var summary = "Anonymous class with name method shouldn't be affected by assignment"; + +print(BUGNUMBER + ": " + summary); + +var classWithStaticNameMethod = class { static name() {} }; +assert.sameValue(typeof classWithStaticNameMethod.name, "function"); + +var classWithStaticNameGetter = class { static get name() { return "static name"; } }; +assert.sameValue(typeof Object.getOwnPropertyDescriptor(classWithStaticNameGetter, "name").get, "function"); +assert.sameValue(classWithStaticNameGetter.name, "static name"); + +var classWithStaticNameSetter = class { static set name(v) {} }; +assert.sameValue(typeof Object.getOwnPropertyDescriptor(classWithStaticNameSetter, "name").set, "function"); + +var n = "NAME".toLowerCase(); +var classWithStaticNameMethodComputed = class { static [n]() {} }; +assert.sameValue(typeof classWithStaticNameMethodComputed.name, "function"); + +// It doesn't apply for non-static method. + +var classWithNameMethod = class { name() {} }; +assert.sameValue(classWithNameMethod.name, "classWithNameMethod"); + +var classWithNameGetter = class { get name() { return "name"; } }; +assert.sameValue(classWithNameGetter.name, "classWithNameGetter"); + +var classWithNameSetter = class { set name(v) {} }; +assert.sameValue(classWithNameSetter.name, "classWithNameSetter"); + diff --git a/test/staging/sm/Function/function-name-computed-01.js b/test/staging/sm/Function/function-name-computed-01.js new file mode 100644 index 0000000000..d712ee6669 --- /dev/null +++ b/test/staging/sm/Function/function-name-computed-01.js @@ -0,0 +1,65 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var obj = { + ["func"]: function() {}, + ["genFunc"]: function*() {}, + ["asyncFunc"]: async function() {}, + ["asyncGenFunc"]: async function*() {}, + ["arrowFunc"]: ()=>{}, + ["asyncArrowFunc"]: async ()=>{}, + ["method"]() {}, + ["anonClass"]: class {}, + ["nonAnonymousFunc"]: function F() {}, + ["nonAnonymousClass"]: class C{}, + get ["getter"]() {}, + set ["setter"](x) {}, +}; + +assert.sameValue(obj.func.name, "func"); +assert.sameValue(obj.genFunc.name, "genFunc"); +assert.sameValue(obj.asyncFunc.name, "asyncFunc"); +assert.sameValue(obj.asyncGenFunc.name, "asyncGenFunc"); +assert.sameValue(obj.arrowFunc.name, "arrowFunc"); +assert.sameValue(obj.asyncArrowFunc.name, "asyncArrowFunc"); +assert.sameValue(obj.method.name, "method"); +assert.sameValue(obj.anonClass.name, "anonClass"); +assert.sameValue(obj.nonAnonymousFunc.name, "F"); +assert.sameValue(obj.nonAnonymousClass.name, "C"); + +assert.sameValue(Object.getOwnPropertyDescriptor(obj, "getter").get.name, "get getter"); +assert.sameValue(Object.getOwnPropertyDescriptor(obj, "setter").set.name, "set setter"); + +let dummy = class { + ["func"]() {} + *["genFunc"] () {} + async ["asyncFunc"]() {} + async *["asyncGenFunc"]() {} + ["arrowFunc"] = ()=>{} + ["asyncArrowFunc"] = async ()=>{}; + ["method"]() {} + get ["getter"]() {} + set ["setter"](x) {} +}; + +dum = new dummy(); + +assert.sameValue(dum.func.name, "func"); +assert.sameValue(dum.genFunc.name, "genFunc"); +assert.sameValue(dum.asyncFunc.name, "asyncFunc"); +assert.sameValue(dum.asyncGenFunc.name, "asyncGenFunc"); +assert.sameValue(dum.arrowFunc.name, "arrowFunc"); +assert.sameValue(dum.asyncArrowFunc.name, "asyncArrowFunc"); +assert.sameValue(dum.method.name, "method"); + +assert.sameValue(Object.getOwnPropertyDescriptor(dummy.prototype, "getter").get.name, "get getter"); +assert.sameValue(Object.getOwnPropertyDescriptor(dummy.prototype, "setter").set.name, "set setter"); + diff --git a/test/staging/sm/Function/function-name-computed-02.js b/test/staging/sm/Function/function-name-computed-02.js new file mode 100644 index 0000000000..24c6f56c2e --- /dev/null +++ b/test/staging/sm/Function/function-name-computed-02.js @@ -0,0 +1,65 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var obj = { + [1]: function() {}, + [2]: function*() {}, + [3]: async function() {}, + [4]: async function*() {}, + [5]: ()=>{}, + [6]: async ()=>{}, + [7] () {}, + [8]: class {}, + [9]: function F() {}, + [10]: class C{}, + get [11]() {}, + set [12](x) {}, +}; + +assert.sameValue(obj[1].name, "1"); +assert.sameValue(obj[2].name, "2"); +assert.sameValue(obj[3].name, "3"); +assert.sameValue(obj[4].name, "4"); +assert.sameValue(obj[5].name, "5"); +assert.sameValue(obj[6].name, "6"); +assert.sameValue(obj[7].name, "7"); +assert.sameValue(obj[8].name, "8"); +assert.sameValue(obj[9].name, "F"); +assert.sameValue(obj[10].name, "C"); +assert.sameValue(Object.getOwnPropertyDescriptor(obj, "11").get.name, "get 11"); +assert.sameValue(Object.getOwnPropertyDescriptor(obj, "12").set.name, "set 12"); + +let dummy = class { + [1]() {} + *[2]() {} + async [3]() {} + async *[4]() {} + [5] = ()=>{} + [6] = async ()=>{}; + [7] () {} + get [11]() {} + set [12](x) {} +}; + +dum = new dummy(); + +assert.sameValue(dum[1].name, "1"); +assert.sameValue(dum[2].name, "2"); +assert.sameValue(dum[3].name, "3"); +assert.sameValue(dum[4].name, "4"); +assert.sameValue(dum[5].name, "5"); +assert.sameValue(dum[6].name, "6"); +assert.sameValue(dum[7].name, "7"); + +assert.sameValue(Object.getOwnPropertyDescriptor(dummy.prototype, "11").get.name, "get 11"); +assert.sameValue(Object.getOwnPropertyDescriptor(dummy.prototype, "12").set.name, "set 12"); + + diff --git a/test/staging/sm/Function/function-name-for.js b/test/staging/sm/Function/function-name-for.js new file mode 100644 index 0000000000..714d4e214b --- /dev/null +++ b/test/staging/sm/Function/function-name-for.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 883377; +var summary = "Anonymous function name should be set based on for-in initializer"; + +print(BUGNUMBER + ": " + summary); + +var exprs = [ + ["function() {}", false], + ["function named() {}", true], + ["function*() {}", false], + ["function* named() {}", true], + ["async function() {}", false], + ["async function named() {}", true], + ["() => {}", false], + ["async () => {}", false], + ["class {}", false], + ["class named {}", true], +]; + +function testForInHead(expr, named) { + eval(` + for (var forInHead = ${expr} in {}) { + } + `); + assert.sameValue(forInHead.name, named ? "named" : "forInHead"); +} +for (var [expr, named] of exprs) { + testForInHead(expr, named); +} + diff --git a/test/staging/sm/Function/function-name-method.js b/test/staging/sm/Function/function-name-method.js new file mode 100644 index 0000000000..07220cf5e5 --- /dev/null +++ b/test/staging/sm/Function/function-name-method.js @@ -0,0 +1,79 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 883377; +var summary = "Anonymous function name should be set based on method definition"; + +print(BUGNUMBER + ": " + summary); + +var fooSymbol = Symbol("foo"); +var emptySymbol = Symbol(""); +var undefSymbol = Symbol(); + +function testMethod(prefix, classPrefix="", prototype=false) { + var param = (prefix == "set" || prefix == "static set") ? "v" : ""; + var sep = classPrefix ? "" : ","; + var objOrClass = eval(`(${classPrefix}{ + ${prefix} prop(${param}) {} ${sep} + ${prefix} "literal"(${param}) {} ${sep} + ${prefix} ""(${param}) {} ${sep} + ${prefix} 5(${param}) {} ${sep} + ${prefix} [Symbol.iterator](${param}) {} ${sep} + ${prefix} [fooSymbol](${param}) {} ${sep} + ${prefix} [emptySymbol](${param}) {} ${sep} + ${prefix} [undefSymbol](${param}) {} ${sep} + ${prefix} [/a/](${param}) {} ${sep} + })`); + + var target = prototype ? objOrClass.prototype : objOrClass; + + function testOne(methodName, expectedName) { + var f; + if (prefix == "get" || prefix == "static get") { + f = Object.getOwnPropertyDescriptor(target, methodName).get; + expectedName = "get " + expectedName; + } else if (prefix == "set" || prefix == "static set") { + f = Object.getOwnPropertyDescriptor(target, methodName).set; + expectedName = "set " + expectedName; + } else { + f = Object.getOwnPropertyDescriptor(target, methodName).value; + } + + assert.sameValue(f.name, expectedName); + } + testOne("prop", "prop"); + testOne("literal", "literal"); + testOne("", ""); + testOne(5, "5"); + testOne(Symbol.iterator, "[Symbol.iterator]"); + testOne(fooSymbol, "[foo]"); + testOne(emptySymbol, "[]"); + testOne(undefSymbol, ""); + testOne(/a/, "/a/"); +} +testMethod(""); +testMethod("*"); +testMethod("async"); +testMethod("get"); +testMethod("set"); + +testMethod("", "class", true); +testMethod("*", "class", true); +testMethod("async", "class", true); +testMethod("get", "class", true); +testMethod("set", "class", true); + +testMethod("static", "class"); +testMethod("static *", "class"); +testMethod("static async", "class"); +testMethod("static get", "class"); +testMethod("static set", "class"); + diff --git a/test/staging/sm/Function/function-name-property.js b/test/staging/sm/Function/function-name-property.js new file mode 100644 index 0000000000..6fad7685af --- /dev/null +++ b/test/staging/sm/Function/function-name-property.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 883377; +var summary = "Anonymous function name should be set based on property name"; + +print(BUGNUMBER + ": " + summary); + +var fooSymbol = Symbol("foo"); +var emptySymbol = Symbol(""); +var undefSymbol = Symbol(); + +var exprs = [ + ["function() {}", false], + ["function named() {}", true], + ["function*() {}", false], + ["function* named() {}", true], + ["async function() {}", false], + ["async function named() {}", true], + ["() => {}", false], + ["async () => {}", false], + ["class {}", false], + ["class named {}", true], +]; + +function testPropertyDefinition(expr, named) { + var obj = eval(`({ + prop: ${expr}, + "literal": ${expr}, + "": ${expr}, + 5: ${expr}, + 0.4: ${expr}, + [Symbol.iterator]: ${expr}, + [fooSymbol]: ${expr}, + [emptySymbol]: ${expr}, + [undefSymbol]: ${expr}, + [/a/]: ${expr}, + })`); + assert.sameValue(obj.prop.name, named ? "named" : "prop"); + assert.sameValue(obj["literal"].name, named ? "named" : "literal"); + assert.sameValue(obj[""].name, named ? "named" : ""); + assert.sameValue(obj[5].name, named ? "named" : "5"); + assert.sameValue(obj[0.4].name, named ? "named" : "0.4"); + assert.sameValue(obj[Symbol.iterator].name, named ? "named" : "[Symbol.iterator]"); + assert.sameValue(obj[fooSymbol].name, named ? "named" : "[foo]"); + assert.sameValue(obj[emptySymbol].name, named ? "named" : "[]"); + assert.sameValue(obj[undefSymbol].name, named ? "named" : ""); + assert.sameValue(obj[/a/].name, named ? "named" : "/a/"); + + // Not applicable cases: __proto__. + obj = { + __proto__: function() {} + }; + assert.sameValue(obj.__proto__.name, ""); +} +for (var [expr, named] of exprs) { + testPropertyDefinition(expr, named); +} + diff --git a/test/staging/sm/Function/function-name.js b/test/staging/sm/Function/function-name.js new file mode 100644 index 0000000000..22f0e4465a --- /dev/null +++ b/test/staging/sm/Function/function-name.js @@ -0,0 +1,73 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function testFunctionName(f) { + var name = f.name; + f.name = 'g'; + assert.sameValue(f.name, name); + assert.sameValue(delete f.name, true); + assert.sameValue(f.name, ''); + assert.sameValue(f.hasOwnProperty('name'), false); + f.name = 'g'; + assert.sameValue(f.name, ''); + Object.defineProperty(f, 'name', {value: 'g'}); + assert.sameValue(f.name, 'g'); +} +function testFunctionNameStrict(f) { + "use strict"; + var name = f.name; + var error; + try { + f.name = 'g'; + } catch (e) { + error = e; + } + assert.sameValue(f.name, name); + assert.sameValue(error instanceof TypeError, true); + assert.sameValue(delete f.name, true); + assert.sameValue(f.name, ''); + assert.sameValue(f.hasOwnProperty('name'), false); + error = null; + try { + f.name = 'g'; + } catch (e) { + error = e; + } + assert.sameValue(f.name, ''); + assert.sameValue(error instanceof TypeError, true); + Object.defineProperty(f, 'name', {value: 'g'}); + assert.sameValue(f.name, 'g'); +} + +assert.sameValue(Object.getOwnPropertyDescriptor(Object, "name").writable, false); +assert.sameValue(Object.getOwnPropertyDescriptor(Object, "name").enumerable, false); +assert.sameValue(Object.getOwnPropertyDescriptor(Object, "name").configurable, true); +assert.sameValue(Object.getOwnPropertyDescriptor(Object, "name").value, 'Object'); +assert.sameValue(Object.getOwnPropertyDescriptor(function f(){}, "name").writable, false); +assert.sameValue(Object.getOwnPropertyDescriptor(function f(){}, "name").enumerable, false); +assert.sameValue(Object.getOwnPropertyDescriptor(function f(){}, "name").configurable, true); +assert.sameValue(Object.getOwnPropertyDescriptor(function f(){}, "name").value, 'f'); + +// Basic test ensuring that Object.defineProperty works on pristine function. +function f() {}; +Object.defineProperty(f, 'name', {value: 'g'}); +assert.sameValue(f.name, 'g'); + +// .name behaves as expected on scripted function. +testFunctionName(function f(){}); +testFunctionNameStrict(function f(){}); +// .name behaves as expected on builtin function. +testFunctionName(Function.prototype.apply); +testFunctionNameStrict(Function.prototype.call); +// .name behaves as expected on self-hosted builtin function. +testFunctionName(Array.prototype.forEach); +testFunctionNameStrict(Array.prototype.some); + diff --git a/test/staging/sm/Function/function-toString-builtin-name.js b/test/staging/sm/Function/function-toString-builtin-name.js new file mode 100644 index 0000000000..f588876fd6 --- /dev/null +++ b/test/staging/sm/Function/function-toString-builtin-name.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Repeats the test from 'Function/function-toString-builtin.js' and additionally +// verifies the name matches the expected value. +// +// This behaviour is not required by the ECMAScript standard. + +// Greatly (!) simplified patterns for the PropertyName production. +var propertyName = [ + // PropertyName :: LiteralPropertyName :: IdentifierName + "\\w+", + + // PropertyName :: LiteralPropertyName :: StringLiteral + "(?:'[^']*')", + "(?:\"[^\"]*\")", + + // PropertyName :: LiteralPropertyName :: NumericLiteral + "\\d+", + + // PropertyName :: ComputedPropertyName + "(?:\\[[^\\]]+\\])", +].join("|") + +var nativeCode = RegExp([ + "^", "function", "(get|set)?", ("(" + propertyName + ")?"), "\\(", "\\)", "\\{", "\\[native code\\]", "\\}", "$" +].join("\\s*")); + +function assertFunctionName(fun, expected) { + var match = nativeCode.exec(fun.toString()); + assert.sameValue(match === null, false, "No match for " + expected); + assert.sameValue(match[2], expected, "Incorrect match for " + expected); +} + +// Bound functions are considered built-ins. +assertFunctionName(function(){}.bind(), undefined); +assertFunctionName(function fn(){}.bind(), undefined); + +// Built-ins which are well-known intrinsic objects. +assertFunctionName(Array, "Array"); +assertFunctionName(Object.prototype.toString, "toString"); +assertFunctionName(decodeURI, "decodeURI"); + +// Other built-in functions. +assertFunctionName(Math.asin, "asin"); +assertFunctionName(String.prototype.blink, "blink"); +assertFunctionName(RegExp.prototype[Symbol.split], "[Symbol.split]"); + +// Built-in getter functions. +assertFunctionName(Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get, "flags"); +assertFunctionName(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").get, "__proto__"); + +// Built-in setter functions. +assertFunctionName(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set, "__proto__"); + diff --git a/test/staging/sm/Function/function-toString-builtin.js b/test/staging/sm/Function/function-toString-builtin.js new file mode 100644 index 0000000000..72f8ee4bad --- /dev/null +++ b/test/staging/sm/Function/function-toString-builtin.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Greatly (!) simplified patterns for the PropertyName production. +var propertyName = [ + // PropertyName :: LiteralPropertyName :: IdentifierName + "\\w+", + + // PropertyName :: LiteralPropertyName :: StringLiteral + "(?:'[^']*')", + "(?:\"[^\"]*\")", + + // PropertyName :: LiteralPropertyName :: NumericLiteral + "\\d+", + + // PropertyName :: ComputedPropertyName + "(?:\\[[^\\]]+\\])", +].join("|") + +var nativeCode = RegExp([ + "^", "function", "(get|set)?", ("(" + propertyName + ")?"), "\\(", "\\)", "\\{", "\\[native code\\]", "\\}", "$" +].join("\\s*")); + + +// Bound functions are considered built-ins. +reportMatch(nativeCode, function(){}.bind().toString()); +reportMatch(nativeCode, function fn(){}.bind().toString()); + +// Built-ins which are well-known intrinsic objects. +reportMatch(nativeCode, Array.toString()); +reportMatch(nativeCode, Object.prototype.toString.toString()); +reportMatch(nativeCode, decodeURI.toString()); + +// Other built-in functions. +reportMatch(nativeCode, Math.asin.toString()); +reportMatch(nativeCode, String.prototype.blink.toString()); +reportMatch(nativeCode, RegExp.prototype[Symbol.split].toString()); + +// Built-in getter functions. +reportMatch(nativeCode, Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get.toString()); +reportMatch(nativeCode, Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").get.toString()); + +// Built-in setter functions. +reportMatch(nativeCode, Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set.toString()); diff --git a/test/staging/sm/Function/has-instance-jitted.js b/test/staging/sm/Function/has-instance-jitted.js new file mode 100644 index 0000000000..ab142bb39e --- /dev/null +++ b/test/staging/sm/Function/has-instance-jitted.js @@ -0,0 +1,105 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const OriginalHasInstance = Function.prototype[Symbol.hasInstance]; + +// Ensure that folding doesn't impact user defined @@hasInstance methods. +{ + function Test() { + this.x = 1; + } + + Object.defineProperty(Test, Symbol.hasInstance, + {writable: true, value: () => false}); + + function x(t) { + return t instanceof Test; + } + + function y() { + let t = new Test; + let b = true; + for (let i = 0; i < 10; i++) { + b = b && x(t); + } + return b; + } + + + function z() { + let f = 0; + let t = 0; + for (let i = 0; i < 100; i++) + assert.sameValue(y(), false); + } + + z(); +} + +// Ensure that the jitting does not clobber user defined @@hasInstance methods. +{ + function a() { + function b() {}; + b.__proto__ = a.prototype; + return b; + }; + let c = new a(); + + let t = 0; + let f = 0; + let e = 0; + for (let i = 0; i < 40000; i++) { + if (i == 20000) + Object.defineProperty(a.prototype, Symbol.hasInstance, + {writable: true, value: () => true}); + if (i == 30000) + Object.setPrototypeOf(c, Function.prototype); + + if (1 instanceof c) { + t++; + } else { + f++; + } + } + + assert.sameValue(t, 10000); + assert.sameValue(f, 30000); +} + +{ + function a() {}; + function b() {}; + Object.defineProperty(a, Symbol.hasInstance, {writable: true, value: () => true}); + assert.sameValue(b instanceof a, true); + for (let _ of Array(10000)) + assert.sameValue(b instanceof a, true); +} + +{ + function a(){}; + function b(){}; + function c(){}; + function d(){}; + function e(){}; + Object.defineProperty(a, Symbol.hasInstance, {value: () => true }); + Object.defineProperty(b, Symbol.hasInstance, {value: () => true }); + Object.defineProperty(c, Symbol.hasInstance, {value: () => true }); + Object.defineProperty(d, Symbol.hasInstance, {value: () => true }); + let funcs = [a, b, c, d]; + for (let f of funcs) + assert.sameValue(e instanceof f, true); + + for (let _ of Array(10001)) { + for (let f of funcs) + assert.sameValue(e instanceof f, true); + } +} + diff --git a/test/staging/sm/Function/has-instance.js b/test/staging/sm/Function/has-instance.js new file mode 100644 index 0000000000..f0201cff06 --- /dev/null +++ b/test/staging/sm/Function/has-instance.js @@ -0,0 +1,110 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// It is possible to override Function.prototype[@@hasInstance]. +let passed = false; +let obj = { foo: true }; +let C = function(){}; + +Object.defineProperty(C, Symbol.hasInstance, { + value: function(inst) { passed = inst.foo; return false; } +}); + +assert.sameValue(obj instanceof C, false); +assert.sameValue(passed, true); + +{ + let obj = { + [Symbol.hasInstance](v) { return true; }, + }; + let whatevs = {}; + assert.sameValue(whatevs instanceof obj, true); +} + +{ + + function zzzz() {}; + let xxxx = new zzzz(); + assert.sameValue(xxxx instanceof zzzz, true); + assert.sameValue(zzzz[Symbol.hasInstance](xxxx), true); + +} + +// Non-callable objects should return false. +const nonCallables = [ + 1, + undefined, + null, + "nope", +] + +for (let nonCallable of nonCallables) { + assert.sameValue(nonCallable instanceof Function, false); + assert.sameValue(nonCallable instanceof Object, false); +} + +// Non-callables should throw when used on the right hand side +// of `instanceof`. +assertThrowsInstanceOf(() => { + function foo() {}; + let obj = {}; + foo instanceof obj; +}, TypeError); + +// Non-callables do not throw for overridden methods +let o = {[Symbol.hasInstance](v) { return true; }} +assert.sameValue(1 instanceof o, true); + +// Non-callables return false instead of an exception when +// Function.prototype[Symbol.hasInstance] is called directly. +for (let nonCallable of nonCallables) { + assert.sameValue(Function.prototype[Symbol.hasInstance].call(nonCallable, Object), false); +} + +// It should be possible to call the Symbol.hasInstance method directly. +assert.sameValue(Function.prototype[Symbol.hasInstance].call(Function, () => 1), true); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(Function, Object), true); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(Function, null), false); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(Function, Array), true); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(Object, Array), true); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(Array, Function), false); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(({}), Function), false); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(), false) +assert.sameValue(Function.prototype[Symbol.hasInstance].call(({})), false) + +// Ensure that bound functions are unwrapped properly +let bindme = {x: function() {}}; +let instance = new bindme.x(); +let xOuter = bindme.x; +let bound = xOuter.bind(bindme); +let doubleBound = bound.bind(bindme); +let tripleBound = bound.bind(doubleBound); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(bound, instance), true); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(doubleBound, instance), true); +assert.sameValue(Function.prototype[Symbol.hasInstance].call(tripleBound, instance), true); + +// Function.prototype[Symbol.hasInstance] is not configurable +let desc = Object.getOwnPropertyDescriptor(Function.prototype, Symbol.hasInstance); +assert.sameValue(desc.configurable, false); + +// Attempting to use a non-callable @@hasInstance triggers a type error +// Bug 1280892 +assertThrowsInstanceOf(() => { + var fun = function() {} + var p = new Proxy(fun, { + get(target, key) { + return /not-callable/; + } + }); + fun instanceof p; +}, TypeError); + + diff --git a/test/staging/sm/Function/implicit-this-in-parameter-expression.js b/test/staging/sm/Function/implicit-this-in-parameter-expression.js new file mode 100644 index 0000000000..ce1dec35d8 --- /dev/null +++ b/test/staging/sm/Function/implicit-this-in-parameter-expression.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +function f(a = eval(` + function g() { + 'use strict'; + return this; + } + + with ({}) { + g() /* implicit return value */ + } + `)) { + return a +}; + +assert.sameValue(f(), undefined); + diff --git a/test/staging/sm/Function/invalid-parameter-list.js b/test/staging/sm/Function/invalid-parameter-list.js new file mode 100644 index 0000000000..0073bb9a4e --- /dev/null +++ b/test/staging/sm/Function/invalid-parameter-list.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This constructor behaves like `Function` without checking +// if the parameter list end is at the expected position. +// We use this to make sure that the tests we use are otherwise +// syntactically correct. +function DumpFunction(...args) { + let code = "function anonymous("; + code += args.slice(0, -1).join(", "); + code += ") {\n"; + code += args[args.length -1]; + code += "\n}"; + eval(code); +} + +const tests = [ + ["/*", "*/) {"], + ["//", ") {"], + ["a = `", "` ) {"], + [") { var x = function (", "} "], + ["x = function (", "}) {"] +]; + +for (const test of tests) { + DumpFunction(...test); + assertThrowsInstanceOf(() => new Function(...test), SyntaxError); +} + diff --git a/test/staging/sm/Function/line-terminator-before-arrow.js b/test/staging/sm/Function/line-terminator-before-arrow.js new file mode 100644 index 0000000000..f166377e1d --- /dev/null +++ b/test/staging/sm/Function/line-terminator-before-arrow.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => eval("() \n => {}"), SyntaxError); +assertThrowsInstanceOf(() => eval("a \n => {}"), SyntaxError); +assertThrowsInstanceOf(() => eval("(a) /*\n*/ => {}"), SyntaxError); +assertThrowsInstanceOf(() => eval("(a, b) \n => {}"), SyntaxError); +assertThrowsInstanceOf(() => eval("(a, b = 1) \n => {}"), SyntaxError); +assertThrowsInstanceOf(() => eval("(a, ...b) \n => {}"), SyntaxError); +assertThrowsInstanceOf(() => eval("(a, b = 1, ...c) \n => {}"), SyntaxError); + diff --git a/test/staging/sm/Function/method-has-duplicated.js b/test/staging/sm/Function/method-has-duplicated.js new file mode 100644 index 0000000000..766feff288 --- /dev/null +++ b/test/staging/sm/Function/method-has-duplicated.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure duplicated name is allowed in non-strict. +function f0(a) { +} + +// SyntaxError should be thrown if method definition has duplicated name. +assertThrowsInstanceOf(() => eval(` +({ + m1(a, a) { + } +}); +`), SyntaxError); +assertThrowsInstanceOf(() => eval(` +({ + m2(a, ...a) { + } +}); +`), SyntaxError); + diff --git a/test/staging/sm/Function/parameter-redeclaration.js b/test/staging/sm/Function/parameter-redeclaration.js new file mode 100644 index 0000000000..317a330e6b --- /dev/null +++ b/test/staging/sm/Function/parameter-redeclaration.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// 'var' is allowed to redeclare parameters. +function f1(a = 0) { + var a; +} + +// 'let' and 'const' at body-level are not allowed to redeclare parameters. +assertThrowsInstanceOf(() => { + eval(`function f2(a = 0) { + let a; + }`); +}, SyntaxError); +assertThrowsInstanceOf(() => { + eval(`function f3(a = 0) { + const a; + }`); +}, SyntaxError); + diff --git a/test/staging/sm/Function/redefine-arguments-length.js b/test/staging/sm/Function/redefine-arguments-length.js new file mode 100644 index 0000000000..d55f6d1aaf --- /dev/null +++ b/test/staging/sm/Function/redefine-arguments-length.js @@ -0,0 +1,71 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'redefine-arguments-length.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 539766; +var summary = + "Object.defineProperty sets arguments.length without setting the " + + "length-overridden bit"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function test_JSOP_ARGCNT() +{ + var length = "length"; + Object.defineProperty(arguments, length, { value: 17 }); + assert.sameValue(arguments.length, 17); + assert.sameValue(arguments[length], 17); +} +test_JSOP_ARGCNT(); + +function test_js_fun_apply() +{ + var length = "length"; + Object.defineProperty(arguments, length, { value: 17 }); + + function fun() + { + assert.sameValue(arguments.length, 17); + assert.sameValue(arguments[length], 17); + assert.sameValue(arguments[0], "foo"); + for (var i = 1; i < 17; i++) + assert.sameValue(arguments[i], undefined); + } + fun.apply(null, arguments); +} +test_js_fun_apply("foo"); + +function test_array_toString_sub_1() +{ + Object.defineProperty(arguments, "length", { value: 1 }); + arguments.join = [].join; + assert.sameValue([].toString.call(arguments), "1"); +} +test_array_toString_sub_1(1, 2); + +function test_array_toString_sub_2() +{ + Object.defineProperty(arguments, "length", { value: 1 }); + assert.sameValue([].toLocaleString.call(arguments), "1"); +} +test_array_toString_sub_2(1, 2); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/regress-518103.js b/test/staging/sm/Function/regress-518103.js new file mode 100644 index 0000000000..77bfe1b3e6 --- /dev/null +++ b/test/staging/sm/Function/regress-518103.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 518103; +var summary = 'lambda constructor "method" vs. instanceof'; +var actual; +var expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var Y = {widget: {}}; + +Y.widget.DataSource = function () {}; +Y.widget.DS_JSArray = function (A) { this.data = A; }; +Y.widget.DS_JSArray.prototype = new Y.widget.DataSource(); + +var J = new Y.widget.DS_JSArray( [ ] ); + +actual = J instanceof Y.widget.DataSource; +expect = true; + +assert.sameValue(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/test/staging/sm/Function/regress-524826.js b/test/staging/sm/Function/regress-524826.js new file mode 100644 index 0000000000..4e70d1534f --- /dev/null +++ b/test/staging/sm/Function/regress-524826.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 524826; +var summary = 'null-closure property initialiser mis-brands object literal scope'; +var actual; +var expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function make(g) { + var o = {f: function(a,b) { return a*b; }, g: g}; + return o; +} +var z = -1; +var x = make(function(c) { return c*z; }); +var y = make(function(c) { return -c*z; }); + +function callg(o, c) { return o.g(c); }; +actual = callg(x, 1); +expect = -callg(y, 1); + +assert.sameValue(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/test/staging/sm/Function/regress-528082.js b/test/staging/sm/Function/regress-528082.js new file mode 100644 index 0000000000..e8036d683e --- /dev/null +++ b/test/staging/sm/Function/regress-528082.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 528082; +var summary = 'named function expression function-name-as-upvar slot botch'; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function f() { + return function g(a) { return function () { return g; }(); }(); +} +var actual = typeof f(); +var expect = "function"; + +assert.sameValue(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/test/staging/sm/Function/regress-533254.js b/test/staging/sm/Function/regress-533254.js new file mode 100644 index 0000000000..0a22781d82 --- /dev/null +++ b/test/staging/sm/Function/regress-533254.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 533254; +var summary = 'init-method late in table-big initialiser screwup'; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function f() { + var proto = {p8:8}; + var obj = { + p0:0, p1:1, p2:2, p3:3, p4:4, p5:5, p6:6, p7:7, p8:8, p9:9, + p10:0, p11:1, p12:2, p13:3, p14:4, p15:5, p16:6, p17:7, p18:8, p19:9, + m: function() { return 42; } + }; + return obj; +} +var expect = f(), + actual = f(); + +expect += ''; +actual += ''; +assert.sameValue(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/test/staging/sm/Function/regress-545980.js b/test/staging/sm/Function/regress-545980.js new file mode 100644 index 0000000000..cc7f27a020 --- /dev/null +++ b/test/staging/sm/Function/regress-545980.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 518103; +var summary = 'partial flat closures must not reach across funargs'; +var actual = "no crash"; +var expect = actual; + +function Timer(){} +Timer.prototype = { initWithCallback: function (o) {Timer.q.push(o)} }; +Timer.q = []; + +var later; +var ac = {startSearch: function(q,s,n,o){later=o}}; + +var bm = {insertBookmark: function(){}, getIdForItemAt: function(){}}; + +function run_test() { + var tagIds = []; + + (function doSearch(query) { + ac.startSearch(query, "", null, { + onSearchResult: function() { + var num = tagIds.length; + + var timer = new Timer; + var next = query.slice(1); + timer.initWithCallback({ notify: function() { return doSearch(next); } }); + } + }); + })("title"); +} + +run_test(); +later.onSearchResult(); +for (var i in Timer.q) + Timer.q[i].notify(); + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/Function/rest-has-duplicated.js b/test/staging/sm/Function/rest-has-duplicated.js new file mode 100644 index 0000000000..8ce1b168f6 --- /dev/null +++ b/test/staging/sm/Function/rest-has-duplicated.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure duplicated name is allowed in non-strict. +function f0(a, a) { +} + +// SyntaxError should be thrown if rest parameter name is duplicated. +assertThrowsInstanceOf(() => eval(` +function f1(a, ...a) { +} +`), SyntaxError); + +// SyntaxError should be thrown if there is a duplicated parameter. +assertThrowsInstanceOf(() => eval(` +function f2(a, a, ...b) { +} +`), SyntaxError); + diff --git a/test/staging/sm/Function/rest-parameter-names.js b/test/staging/sm/Function/rest-parameter-names.js new file mode 100644 index 0000000000..21a56201e2 --- /dev/null +++ b/test/staging/sm/Function/rest-parameter-names.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1288460; +var summary = + "Rest parameters to functions can be named |yield| or |eval| or |let| in " + "non-strict code"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var f1 = (...yield) => yield + 42; +assert.sameValue(f1(), "42"); +assert.sameValue(f1(1), "142"); + +var f2 = (...eval) => eval + 42; +assert.sameValue(f2(), "42"); +assert.sameValue(f2(1), "142"); + +var f3 = (...let) => let + 42; +assert.sameValue(f3(), "42"); +assert.sameValue(f3(1), "142"); + +function g1(x, ...yield) +{ + return yield + x; +} +assert.sameValue(g1(0, 42), "420"); + +function g2(x, ...eval) +{ + return eval + x; +} +assert.sameValue(g2(0, 42), "420"); + +function g3(x, ...let) +{ + return let + x; +} +assert.sameValue(g3(0, 42), "420"); + +function h() +{ + "use strict"; + + var badNames = ["yield", "eval", "let"]; + + for (var badName of ["yield", "eval", "let"]) + { + assertThrowsInstanceOf(() => eval(`var q = (...${badName}) => ${badName} + 42;`), + SyntaxError); + + assertThrowsInstanceOf(() => eval(`function r(x, ...${badName}) { return x + ${badName}; }`), + SyntaxError); + } +} +h(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Function/return-finally.js b/test/staging/sm/Function/return-finally.js new file mode 100644 index 0000000000..a41c46f9e5 --- /dev/null +++ b/test/staging/sm/Function/return-finally.js @@ -0,0 +1,181 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1202134; +var summary = "Return value should not be overwritten by finally block with normal execution."; + +print(BUGNUMBER + ": " + summary); + +// ==== single ==== + +var f; +f = function() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + } +}; +assert.sameValue(f(), 42); + +f = function() { + // F.[[type]] is return + try { + return 42; + } finally { + return 43; + } +}; +assert.sameValue(f(), 43); + +f = function() { + // F.[[type]] is throw + try { + return 42; + } finally { + throw 43; + } +}; +var caught = false; +try { + f(); +} catch (e) { + assert.sameValue(e, 43); + caught = true; +} +assert.sameValue(caught, true); + +f = function() { + // F.[[type]] is break + do try { + return 42; + } finally { + break; + } while (false); + return 43; +}; +assert.sameValue(f(), 43); + +f = function() { + // F.[[type]] is break + L: try { + return 42; + } finally { + break L; + } + return 43; +}; +assert.sameValue(f(), 43); + +f = function() { + // F.[[type]] is continue + do try { + return 42; + } finally { + continue; + } while (false); + return 43; +}; +assert.sameValue(f(), 43); + +// ==== nested ==== + +f = function() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is break + do try { + return 43; + } finally { + break; + } while (0); + } +}; +assert.sameValue(f(), 42); + +f = function() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is break + L: try { + return 43; + } finally { + break L; + } + } +} +assert.sameValue(f(), 42); + +f = function() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is continue + do try { + return 43; + } finally { + continue; + } while (0); + } +}; +assert.sameValue(f(), 42); + +f = function() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is normal + // B.[[type]] is normal + try { + // F.[[type]] is throw + try { + return 43; + } finally { + throw 9; + } + } catch (e) { + } + } +}; +assert.sameValue(f(), 42); + +f = function() { + // F.[[type]] is return + try { + return 41; + } finally { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is break + do try { + return 43; + } finally { + break; + } while (0); + } + } +}; +assert.sameValue(f(), 42); + diff --git a/test/staging/sm/Function/spread-iterator-primitive.js b/test/staging/sm/Function/spread-iterator-primitive.js new file mode 100644 index 0000000000..df0b03b0ee --- /dev/null +++ b/test/staging/sm/Function/spread-iterator-primitive.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1021835; +var summary = "Returning non-object from @@iterator should throw"; + +print(BUGNUMBER + ": " + summary); + +let primitives = [ + 1, + true, + undefined, + null, + "foo", + Symbol.iterator +]; + +function f() { +} + +for (let primitive of primitives) { + let arg = { + [Symbol.iterator]() { + return primitive; + } + }; + assertThrowsInstanceOf(() => f(...arg), TypeError); +} + diff --git a/test/staging/sm/Function/strict-arguments.js b/test/staging/sm/Function/strict-arguments.js new file mode 100644 index 0000000000..9373995c88 --- /dev/null +++ b/test/staging/sm/Function/strict-arguments.js @@ -0,0 +1,458 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'strict-arguments.js'; +var BUGNUMBER = 516255; +var summary = + "ES5 strict mode: arguments objects of strict mode functions must copy " + + "argument values"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function arrayEvery(arr, fun) +{ + return Array.prototype.every.call(arr, fun); +} + +function arraysEqual(a1, a2) +{ + return a1.length === a2.length && + arrayEvery(a1, function(v, i) { return v === a2[i]; }); +} + + +/************************ + * NON-STRICT ARGUMENTS * + ************************/ + +var obj = {}; + +function noargs() { return arguments; } + +assert.sameValue(arraysEqual(noargs(), []), true); +assert.sameValue(arraysEqual(noargs(1), [1]), true); +assert.sameValue(arraysEqual(noargs(2, obj, 8), [2, obj, 8]), true); + +function args(a) { return arguments; } + +assert.sameValue(arraysEqual(args(), []), true); +assert.sameValue(arraysEqual(args(1), [1]), true); +assert.sameValue(arraysEqual(args(1, obj), [1, obj]), true); +assert.sameValue(arraysEqual(args("foopy"), ["foopy"]), true); + +function assign(a) +{ + a = 17; + return arguments; +} + +assert.sameValue(arraysEqual(assign(1), [17]), true); + +function getLaterAssign(a) +{ + var o = arguments; + a = 17; + return o; +} + +assert.sameValue(arraysEqual(getLaterAssign(1), [17]), true); + +function assignElementGetParameter(a) +{ + arguments[0] = 17; + return a; +} + +assert.sameValue(assignElementGetParameter(42), 17); + +function assignParameterGetElement(a) +{ + a = 17; + return arguments[0]; +} + +assert.sameValue(assignParameterGetElement(42), 17); + +function assignArgSub(x, y) +{ + arguments[0] = 3; + return arguments[0]; +} + +assert.sameValue(assignArgSub(1), 3); + +function assignArgSubParamUse(x, y) +{ + arguments[0] = 3; + assert.sameValue(x, 3); + return arguments[0]; +} + +assert.sameValue(assignArgSubParamUse(1), 3); + +function assignArgumentsElement(x, y) +{ + arguments[0] = 3; + return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations +} + +assert.sameValue(assignArgumentsElement(1), 3); + +function assignArgumentsElementParamUse(x, y) +{ + arguments[0] = 3; + assert.sameValue(x, 3); + return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations +} + +assert.sameValue(assignArgumentsElementParamUse(1), 3); + +/******************** + * STRICT ARGUMENTS * + ********************/ + +function strictNoargs() +{ + "use strict"; + return arguments; +} + +assert.sameValue(arraysEqual(strictNoargs(), []), true); +assert.sameValue(arraysEqual(strictNoargs(1), [1]), true); +assert.sameValue(arraysEqual(strictNoargs(1, obj), [1, obj]), true); + +function strictArgs(a) +{ + "use strict"; + return arguments; +} + +assert.sameValue(arraysEqual(strictArgs(), []), true); +assert.sameValue(arraysEqual(strictArgs(1), [1]), true); +assert.sameValue(arraysEqual(strictArgs(1, obj), [1, obj]), true); + +function strictAssign(a) +{ + "use strict"; + a = 17; + return arguments; +} + +assert.sameValue(arraysEqual(strictAssign(), []), true); +assert.sameValue(arraysEqual(strictAssign(1), [1]), true); +assert.sameValue(arraysEqual(strictAssign(1, obj), [1, obj]), true); + +var upper; +function strictAssignAfter(a) +{ + "use strict"; + upper = arguments; + a = 42; + return upper; +} + +assert.sameValue(arraysEqual(strictAssignAfter(), []), true); +assert.sameValue(arraysEqual(strictAssignAfter(17), [17]), true); +assert.sameValue(arraysEqual(strictAssignAfter(obj), [obj]), true); + +function strictMaybeAssignOuterParam(p) +{ + "use strict"; + function inner() { p = 17; } + return arguments; +} + +assert.sameValue(arraysEqual(strictMaybeAssignOuterParam(), []), true); +assert.sameValue(arraysEqual(strictMaybeAssignOuterParam(42), [42]), true); +assert.sameValue(arraysEqual(strictMaybeAssignOuterParam(obj), [obj]), true); + +function strictAssignOuterParam(p) +{ + "use strict"; + function inner() { p = 17; } + inner(); + return arguments; +} + +assert.sameValue(arraysEqual(strictAssignOuterParam(), []), true); +assert.sameValue(arraysEqual(strictAssignOuterParam(17), [17]), true); +assert.sameValue(arraysEqual(strictAssignOuterParam(obj), [obj]), true); + +function strictAssignOuterParamPSYCH(p) +{ + "use strict"; + function inner(p) { p = 17; } + inner(); + return arguments; +} + +assert.sameValue(arraysEqual(strictAssignOuterParamPSYCH(), []), true); +assert.sameValue(arraysEqual(strictAssignOuterParamPSYCH(17), [17]), true); +assert.sameValue(arraysEqual(strictAssignOuterParamPSYCH(obj), [obj]), true); + +function strictEval(code, p) +{ + "use strict"; + eval(code); + return arguments; +} + +assert.sameValue(arraysEqual(strictEval("1", 2), ["1", 2]), true); +assert.sameValue(arraysEqual(strictEval("arguments"), ["arguments"]), true); +assert.sameValue(arraysEqual(strictEval("p = 2"), ["p = 2"]), true); +assert.sameValue(arraysEqual(strictEval("p = 2", 17), ["p = 2", 17]), true); +assert.sameValue(arraysEqual(strictEval("arguments[0] = 17"), [17]), true); +assert.sameValue(arraysEqual(strictEval("arguments[0] = 17", 42), [17, 42]), true); + +function strictMaybeNestedEval(code, p) +{ + "use strict"; + function inner() { eval(code); } + return arguments; +} + +assert.sameValue(arraysEqual(strictMaybeNestedEval("1", 2), ["1", 2]), true); +assert.sameValue(arraysEqual(strictMaybeNestedEval("arguments"), ["arguments"]), true); +assert.sameValue(arraysEqual(strictMaybeNestedEval("p = 2"), ["p = 2"]), true); +assert.sameValue(arraysEqual(strictMaybeNestedEval("p = 2", 17), ["p = 2", 17]), true); + +function strictNestedEval(code, p) +{ + "use strict"; + function inner() { eval(code); } + inner(); + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedEval("1", 2), ["1", 2]), true); +assert.sameValue(arraysEqual(strictNestedEval("arguments"), ["arguments"]), true); +assert.sameValue(arraysEqual(strictNestedEval("p = 2"), ["p = 2"]), true); +assert.sameValue(arraysEqual(strictNestedEval("p = 2", 17), ["p = 2", 17]), true); +assert.sameValue(arraysEqual(strictNestedEval("arguments[0] = 17"), ["arguments[0] = 17"]), true); +assert.sameValue(arraysEqual(strictNestedEval("arguments[0] = 17", 42), ["arguments[0] = 17", 42]), true); + +function strictAssignArguments(a) +{ + "use strict"; + arguments[0] = 42; + return a; +} + +assert.sameValue(strictAssignArguments(), undefined); +assert.sameValue(strictAssignArguments(obj), obj); +assert.sameValue(strictAssignArguments(17), 17); + +function strictAssignParameterGetElement(a) +{ + "use strict"; + a = 17; + return arguments[0]; +} + +assert.sameValue(strictAssignParameterGetElement(42), 42); + +function strictAssignArgSub(x, y) +{ + "use strict"; + arguments[0] = 3; + return arguments[0]; +} + +assert.sameValue(strictAssignArgSub(1), 3); + +function strictAssignArgSubParamUse(x, y) +{ + "use strict"; + arguments[0] = 3; + assert.sameValue(x, 1); + return arguments[0]; +} + +assert.sameValue(strictAssignArgSubParamUse(1), 3); + +function strictAssignArgumentsElement(x, y) +{ + "use strict"; + arguments[0] = 3; + return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations +} + +assert.sameValue(strictAssignArgumentsElement(1), 3); + +function strictAssignArgumentsElementParamUse(x, y) +{ + "use strict"; + arguments[0] = 3; + assert.sameValue(x, 1); + return arguments[Math.random() ? "0" : 0]; // nix arguments[const] optimizations +} + +assert.sameValue(strictAssignArgumentsElementParamUse(1), 3); + +function strictNestedAssignShadowVar(p) +{ + "use strict"; + function inner() + { + var p = 12; + function innermost() { p = 1776; return 12; } + return innermost(); + } + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedAssignShadowVar(), []), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowVar(99), [99]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowVar(""), [""]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowVar(obj), [obj]), true); + +function strictNestedAssignShadowCatch(p) +{ + "use strict"; + function inner() + { + try + { + } + catch (p) + { + var f = function innermost() { p = 1776; return 12; }; + f(); + } + } + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedAssignShadowCatch(), []), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowCatch(99), [99]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowCatch(""), [""]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowCatch(obj), [obj]), true); + +function strictNestedAssignShadowCatchCall(p) +{ + "use strict"; + function inner() + { + try + { + } + catch (p) + { + var f = function innermost() { p = 1776; return 12; }; + f(); + } + } + inner(); + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedAssignShadowCatchCall(), []), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowCatchCall(99), [99]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowCatchCall(""), [""]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowCatchCall(obj), [obj]), true); + +function strictNestedAssignShadowFunction(p) +{ + "use strict"; + function inner() + { + function p() { } + p = 1776; + } + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedAssignShadowFunction(), []), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunction(99), [99]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunction(""), [""]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunction(obj), [obj]), true); + +function strictNestedAssignShadowFunctionCall(p) +{ + "use strict"; + function inner() + { + function p() { } + p = 1776; + } + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionCall(), []), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionCall(99), [99]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionCall(""), [""]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionCall(obj), [obj]), true); + +function strictNestedShadowAndMaybeEval(code, p) +{ + "use strict"; + function inner(p) { eval(code); } + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedShadowAndMaybeEval("1", 2), ["1", 2]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndMaybeEval("arguments"), ["arguments"]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndMaybeEval("p = 2"), ["p = 2"]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndMaybeEval("p = 2", 17), ["p = 2", 17]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndMaybeEval("arguments[0] = 17"), ["arguments[0] = 17"]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndMaybeEval("arguments[0] = 17", 42), ["arguments[0] = 17", 42]), true); + +function strictNestedShadowAndEval(code, p) +{ + "use strict"; + function inner(p) { eval(code); } + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedShadowAndEval("1", 2), ["1", 2]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndEval("arguments"), ["arguments"]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndEval("p = 2"), ["p = 2"]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndEval("p = 2", 17), ["p = 2", 17]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndEval("arguments[0] = 17"), ["arguments[0] = 17"]), true); +assert.sameValue(arraysEqual(strictNestedShadowAndEval("arguments[0] = 17", 42), ["arguments[0] = 17", 42]), true); + +function strictEvalContainsMutation(code) +{ + "use strict"; + return eval(code); +} + +assert.sameValue(arraysEqual(strictEvalContainsMutation("code = 17; arguments"), ["code = 17; arguments"]), true); +assert.sameValue(arraysEqual(strictEvalContainsMutation("arguments[0] = 17; arguments"), [17]), true); +assert.sameValue(strictEvalContainsMutation("arguments[0] = 17; code"), "arguments[0] = 17; code"); + +function strictNestedAssignShadowFunctionName(p) +{ + "use strict"; + function inner() + { + function p() { p = 1776; } + p(); + } + inner(); + return arguments; +} + +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionName(), []), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionName(99), [99]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionName(""), [""]), true); +assert.sameValue(arraysEqual(strictNestedAssignShadowFunctionName(obj), [obj]), true); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Function/throw-type-error.js b/test/staging/sm/Function/throw-type-error.js new file mode 100644 index 0000000000..19914ff8f4 --- /dev/null +++ b/test/staging/sm/Function/throw-type-error.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/publicdomain/zero/1.0/ + +const ThrowTypeError = function(){ + "use strict"; + return Object.getOwnPropertyDescriptor(arguments, "callee").get; +}(); + +assert.deepEqual(Object.getOwnPropertyDescriptor(ThrowTypeError, "length"), { + value: 0, writable: false, enumerable: false, configurable: false +}); + +assert.sameValue(Object.isFrozen(ThrowTypeError), true); + diff --git a/test/staging/sm/Iterator/constructor-subclassable.js b/test/staging/sm/Iterator/constructor-subclassable.js new file mode 100644 index 0000000000..e0ad14fd29 --- /dev/null +++ b/test/staging/sm/Iterator/constructor-subclassable.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator constructor can be subclassed. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +class TestIterator extends Iterator { +} + +assert.sameValue(new TestIterator() instanceof Iterator, true); + diff --git a/test/staging/sm/Iterator/constructor-throw-when-called-directly.js b/test/staging/sm/Iterator/constructor-throw-when-called-directly.js new file mode 100644 index 0000000000..2a7442a072 --- /dev/null +++ b/test/staging/sm/Iterator/constructor-throw-when-called-directly.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator constructor throws when called directly. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => new Iterator(), TypeError); + diff --git a/test/staging/sm/Iterator/constructor-throw-without-new.js b/test/staging/sm/Iterator/constructor-throw-without-new.js new file mode 100644 index 0000000000..0950d43ada --- /dev/null +++ b/test/staging/sm/Iterator/constructor-throw-without-new.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator constructor throws when called without new. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => Iterator(), TypeError); + diff --git a/test/staging/sm/Iterator/constructor.js b/test/staging/sm/Iterator/constructor.js new file mode 100644 index 0000000000..cc96fa07b3 --- /dev/null +++ b/test/staging/sm/Iterator/constructor.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The Iterator constructor is a built-in function. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +assert.sameValue(typeof Iterator, 'function'); + diff --git a/test/staging/sm/Iterator/from/Iterator.from-descriptor.js b/test/staging/sm/Iterator/from/Iterator.from-descriptor.js new file mode 100644 index 0000000000..d4bac38b76 --- /dev/null +++ b/test/staging/sm/Iterator/from/Iterator.from-descriptor.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of Iterator.from + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator, 'from'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/from/Iterator.from-length.js b/test/staging/sm/Iterator/from/Iterator.from-length.js new file mode 100644 index 0000000000..4774a21b4f --- /dev/null +++ b/test/staging/sm/Iterator/from/Iterator.from-length.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of Iterator.from. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.from, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/from/Iterator.from-name.js b/test/staging/sm/Iterator/from/Iterator.from-name.js new file mode 100644 index 0000000000..f6c9f65648 --- /dev/null +++ b/test/staging/sm/Iterator/from/Iterator.from-name.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of Iterator.from. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.from, 'name'); +assert.sameValue(propDesc.value, 'from'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/from/call-from-with-different-this.js b/test/staging/sm/Iterator/from/call-from-with-different-this.js new file mode 100644 index 0000000000..aca44aaad1 --- /dev/null +++ b/test/staging/sm/Iterator/from/call-from-with-different-this.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const iter = { + next() { + assert.sameValue(arguments.length, 0); + return {done: false, value: 0}; + }, +}; +const wrap = Iterator.from.call(undefined, iter); + +const result = wrap.next("next argument is ignored"); +assert.sameValue(result.done, false); +assert.sameValue(result.value, 0); + +const returnResult = wrap.return("return argument is ignored"); +assert.sameValue(returnResult.done, true); +assert.sameValue(returnResult.value, undefined); + diff --git a/test/staging/sm/Iterator/from/iterator-not-callable-throws.js b/test/staging/sm/Iterator/from/iterator-not-callable-throws.js new file mode 100644 index 0000000000..30b752e687 --- /dev/null +++ b/test/staging/sm/Iterator/from/iterator-not-callable-throws.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator.from throws when called with an object with a non-callable @@iterator property. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => Iterator.from({ [Symbol.iterator]: 0 }), TypeError); +assertThrowsInstanceOf(() => Iterator.from({ [Symbol.iterator]: false }), TypeError); +assertThrowsInstanceOf(() => Iterator.from({ [Symbol.iterator]: "" }), TypeError); +assertThrowsInstanceOf(() => Iterator.from({ [Symbol.iterator]: {} }), TypeError); +assertThrowsInstanceOf(() => Iterator.from({ [Symbol.iterator]: Symbol('') }), TypeError); + diff --git a/test/staging/sm/Iterator/from/modify-next.js b/test/staging/sm/Iterator/from/modify-next.js new file mode 100644 index 0000000000..9b468d3b01 --- /dev/null +++ b/test/staging/sm/Iterator/from/modify-next.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const iter = { + next: () => ({ done: false, value: 0 }), +}; + +const wrap = Iterator.from(iter); + +iter.next = () => ({ done: true, value: undefined }); + +let {done, value} = wrap.next(); +assert.sameValue(done, false); +assert.sameValue(value, 0); + diff --git a/test/staging/sm/Iterator/from/modify-return.js b/test/staging/sm/Iterator/from/modify-return.js new file mode 100644 index 0000000000..2313c255d3 --- /dev/null +++ b/test/staging/sm/Iterator/from/modify-return.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const iter = { + next: () => ({ done: false, value: 0 }), + return: (value = "old return") => ({ done: true, value }), +}; + +const wrap = Iterator.from(iter); + +let {done, value} = wrap.return("return argument ignored"); +assert.sameValue(done, true); +assert.sameValue(value, "old return"); + +iter.return = () => { throw new Error(); }; +assertThrowsInstanceOf(() => wrap.return(), Error); + +iter.return = null; +let nullResult = wrap.return("return argument ignored"); +assert.sameValue(nullResult.done, true); +assert.sameValue(nullResult.value, undefined); + diff --git a/test/staging/sm/Iterator/from/o-not-object-throws.js b/test/staging/sm/Iterator/from/o-not-object-throws.js new file mode 100644 index 0000000000..031870e4d1 --- /dev/null +++ b/test/staging/sm/Iterator/from/o-not-object-throws.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator.from throws when called with a non-object. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => Iterator.from(undefined), TypeError); +assertThrowsInstanceOf(() => Iterator.from(null), TypeError); +assertThrowsInstanceOf(() => Iterator.from(0), TypeError); +assertThrowsInstanceOf(() => Iterator.from(false), TypeError); +assertThrowsInstanceOf(() => Iterator.from(Symbol('')), TypeError); + diff --git a/test/staging/sm/Iterator/from/proxy-not-wrapped.js b/test/staging/sm/Iterator/from/proxy-not-wrapped.js new file mode 100644 index 0000000000..5c1e967df5 --- /dev/null +++ b/test/staging/sm/Iterator/from/proxy-not-wrapped.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + + const item = Reflect[key](...args); + if (typeof item === 'function') + return (...args) => new Proxy(item.apply(receiver, args), handlerProxy); + return item; + }, +}); + +class Iter extends Iterator { + [Symbol.iterator]() { + return this; + } + next() { + return { done: false, value: 0 }; + } +} +const iter = new Iter(); +const proxy = new Proxy(iter, handlerProxy); +const wrap = Iterator.from(proxy); + +assert.sameValue( + log.join('\n'), + `get: Symbol(Symbol.iterator) +get: next +getPrototypeOf: undefined` +); + diff --git a/test/staging/sm/Iterator/from/proxy-wrap-next.js b/test/staging/sm/Iterator/from/proxy-wrap-next.js new file mode 100644 index 0000000000..6f0f2df72d --- /dev/null +++ b/test/staging/sm/Iterator/from/proxy-wrap-next.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + + const item = Reflect[key](...args); + if (typeof item === 'function') + return item.bind(receiver); + return item; + }, +}); +const iter = new Proxy({ + next: () => ({ done: false, value: 0 }), +}, handlerProxy); + +const wrap = Iterator.from(iter); +// Call next multiple times. Should not call `get` on proxy. +wrap.next(); +wrap.next(); +wrap.next(); + +assert.compareArray(log, [ + "get: Symbol(Symbol.iterator)", + "get: next", + "getPrototypeOf: undefined", +]); + diff --git a/test/staging/sm/Iterator/from/proxy-wrap-return.js b/test/staging/sm/Iterator/from/proxy-wrap-return.js new file mode 100644 index 0000000000..5af980fbde --- /dev/null +++ b/test/staging/sm/Iterator/from/proxy-wrap-return.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + + const item = Reflect[key](...args); + if (typeof item === 'function') + return item.bind(receiver); + return item; + }, +}); +const iter = new Proxy({ + next: () => ({ done: false, value: 0 }), + return: (value) => ({ done: true, value }), +}, handlerProxy); + +const wrap = Iterator.from(iter); +wrap.return(); +wrap.return(); + +assert.compareArray(log, [ + "get: Symbol(Symbol.iterator)", + "get: next", + "getPrototypeOf: undefined", + "get: return", + "get: return", +]); + diff --git a/test/staging/sm/Iterator/from/return-iterator-if-iterable.js b/test/staging/sm/Iterator/from/return-iterator-if-iterable.js new file mode 100644 index 0000000000..4f72c51fa7 --- /dev/null +++ b/test/staging/sm/Iterator/from/return-iterator-if-iterable.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator.from returns O if it is iterable, an iterator, and an instance of Iterator. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +class TestIterator extends Iterator { + [Symbol.iterator]() { + return this; + } + + next() { + return { done: false, value: this.value++ }; + } + + value = 0; +} + +const iter = new TestIterator(); +assert.sameValue(iter, Iterator.from(iter)); + +const arrayIter = [1, 2, 3][Symbol.iterator](); +assert.sameValue(arrayIter, Iterator.from(arrayIter)); + diff --git a/test/staging/sm/Iterator/from/return-wrapper-if-not-iterable.js b/test/staging/sm/Iterator/from/return-wrapper-if-not-iterable.js new file mode 100644 index 0000000000..6604f9a20b --- /dev/null +++ b/test/staging/sm/Iterator/from/return-wrapper-if-not-iterable.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator.from returns an iterator wrapper if O is not an iterable. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +class TestIterator { + next() { + return { done: false, value: 0 }; + } +} + +const iter = new TestIterator(); +assert.sameValue( + Symbol.iterator in iter, + false, + 'iter is not an iterable.' +); + +const wrapper = Iterator.from(iter); +assert.sameValue(iter !== wrapper, true); +assert.sameValue( + Symbol.iterator in wrapper, + true, + 'wrapper is an iterable.' +); + diff --git a/test/staging/sm/Iterator/from/return-wrapper-if-not-iterator-instance.js b/test/staging/sm/Iterator/from/return-wrapper-if-not-iterator-instance.js new file mode 100644 index 0000000000..08cb09f631 --- /dev/null +++ b/test/staging/sm/Iterator/from/return-wrapper-if-not-iterator-instance.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Iterator.from returns an iterator wrapper if O is not an instance of Iterator. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +class TestIterator { + [Symbol.iterator]() { + return this; + } + + next() { + return { done: false, value: 0 }; + } +} + +const iter = new TestIterator(); +assert.sameValue(iter instanceof Iterator, false); + +const wrapper = Iterator.from(iter); +assert.sameValue(iter !== wrapper, true); +assert.sameValue(wrapper instanceof Iterator, true); + diff --git a/test/staging/sm/Iterator/from/wrap-functions-on-other-global.js b/test/staging/sm/Iterator/from/wrap-functions-on-other-global.js new file mode 100644 index 0000000000..b6c3190656 --- /dev/null +++ b/test/staging/sm/Iterator/from/wrap-functions-on-other-global.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} + +function checkIterResult({done, value}, expectedDone, expectedValue) { + assert.sameValue(done, expectedDone); + assert.sameValue(value, expectedValue); +} + +const iter = { + next(value) { + return {done: false, value: arguments.length}; + }, + return() { + throw new TestError(); + }, + throw: (value) => ({done: true, value}), +}; +const thisWrap = Iterator.from(iter); +const otherGlobal = createNewGlobal({newCompartment: true}); +const otherWrap = otherGlobal.Iterator.from(iter); + +checkIterResult(thisWrap.next.call(otherWrap), false, 0); +checkIterResult(thisWrap.next.call(otherWrap, 'value'), false, 0); + +assertThrowsInstanceOf(thisWrap.return.bind(otherWrap), TestError); + diff --git a/test/staging/sm/Iterator/from/wrap-method-with-non-wrap-this-throws.js b/test/staging/sm/Iterator/from/wrap-method-with-non-wrap-this-throws.js new file mode 100644 index 0000000000..db19b0d5eb --- /dev/null +++ b/test/staging/sm/Iterator/from/wrap-method-with-non-wrap-this-throws.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +// All methods on %WrapForValidIteratorPrototype% require an [[Iterated]] +// internal slot on the `this` object. + +class TestIterator { + next() { + return { + done: false, + value: 0, + }; + } +} + +const nextMethod = Iterator.from(new TestIterator()).next; +assertThrowsInstanceOf(() => nextMethod.call(undefined), TypeError); +assertThrowsInstanceOf(() => nextMethod.call(null), TypeError); +assertThrowsInstanceOf(() => nextMethod.call(0), TypeError); +assertThrowsInstanceOf(() => nextMethod.call(false), TypeError); +assertThrowsInstanceOf(() => nextMethod.call('test'), TypeError); +assertThrowsInstanceOf(() => nextMethod.call(Object(1)), TypeError); +assertThrowsInstanceOf(() => nextMethod.call({}), TypeError); + +const returnMethod = Iterator.from(new TestIterator()).next; +assertThrowsInstanceOf(() => returnMethod.call(undefined), TypeError); +assertThrowsInstanceOf(() => returnMethod.call(null), TypeError); +assertThrowsInstanceOf(() => returnMethod.call(0), TypeError); +assertThrowsInstanceOf(() => returnMethod.call(false), TypeError); +assertThrowsInstanceOf(() => returnMethod.call('test'), TypeError); +assertThrowsInstanceOf(() => returnMethod.call(Object(1)), TypeError); +assertThrowsInstanceOf(() => returnMethod.call({}), TypeError); + +const throwMethod = Iterator.from(new TestIterator()).next; +assertThrowsInstanceOf(() => throwMethod.call(undefined), TypeError); +assertThrowsInstanceOf(() => throwMethod.call(null), TypeError); +assertThrowsInstanceOf(() => throwMethod.call(0), TypeError); +assertThrowsInstanceOf(() => throwMethod.call(false), TypeError); +assertThrowsInstanceOf(() => throwMethod.call('test'), TypeError); +assertThrowsInstanceOf(() => throwMethod.call(Object(1)), TypeError); +assertThrowsInstanceOf(() => throwMethod.call({}), TypeError); + diff --git a/test/staging/sm/Iterator/from/wrap-new-global.js b/test/staging/sm/Iterator/from/wrap-new-global.js new file mode 100644 index 0000000000..1b24c614bd --- /dev/null +++ b/test/staging/sm/Iterator/from/wrap-new-global.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const otherGlobal = createNewGlobal({newCompartment: true}); + +const iter = [1, 2, 3].values(); +assert.sameValue(iter, Iterator.from(iter)); +assert.sameValue(iter !== otherGlobal.Iterator.from(iter), true); + diff --git a/test/staging/sm/Iterator/from/wrap-next-forwards-value.js b/test/staging/sm/Iterator/from/wrap-next-forwards-value.js new file mode 100644 index 0000000000..f67ccabee0 --- /dev/null +++ b/test/staging/sm/Iterator/from/wrap-next-forwards-value.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +class Iter { + next(value) { + assert.sameValue(arguments.length, 0); + return { done: false, value }; + } +} + +const iter = new Iter(); +const wrap = Iterator.from(iter); +assert.sameValue(iter !== wrap, true); + +assert.sameValue(iter.v, undefined); +wrap.next(1); + diff --git a/test/staging/sm/Iterator/from/wrap-next-not-object-throws.js b/test/staging/sm/Iterator/from/wrap-next-not-object-throws.js new file mode 100644 index 0000000000..5fbc438436 --- /dev/null +++ b/test/staging/sm/Iterator/from/wrap-next-not-object-throws.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const iter = (value) => Iterator.from({ + next: () => value, +}); + +for (let value of [ + undefined, + null, + 0, + false, + "test", + Symbol(""), +]) { + assert.sameValue(iter(value).next(), value); +} + diff --git a/test/staging/sm/Iterator/from/wrap-return-closes-iterator.js b/test/staging/sm/Iterator/from/wrap-return-closes-iterator.js new file mode 100644 index 0000000000..e301e47764 --- /dev/null +++ b/test/staging/sm/Iterator/from/wrap-return-closes-iterator.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +class Iter { + next() { + if (this.closed) + return { done: true, value: undefined }; + return { done: false, value: 0 }; + } + + return(value) { + assert.sameValue(arguments.length, 0); + this.closed = true; + return { done: true, value: 42 }; + } +} + +const iter = new Iter(); +const wrap = Iterator.from(iter); +assert.sameValue(iter.closed, undefined); + +let result = wrap.next(); +assert.sameValue(result.done, false); +assert.sameValue(result.value, 0); + +result = wrap.return(1); +assert.sameValue(result.done, true); +assert.sameValue(result.value, 42); + +assert.sameValue(iter.closed, true); +result = wrap.next(); +assert.sameValue(result.done, true); +assert.sameValue(result.value, undefined); + diff --git a/test/staging/sm/Iterator/iterator.js b/test/staging/sm/Iterator/iterator.js new file mode 100644 index 0000000000..ee7879d50f --- /dev/null +++ b/test/staging/sm/Iterator/iterator.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Property descriptor of Iterator. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(this, 'Iterator'); +assert.sameValue(propDesc.value, Iterator); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/length.js b/test/staging/sm/Iterator/length.js new file mode 100644 index 0000000000..d108db7845 --- /dev/null +++ b/test/staging/sm/Iterator/length.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The "length" property of Iterator + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator, 'length'); +assert.sameValue(propDesc.value, 0); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/name.js b/test/staging/sm/Iterator/name.js new file mode 100644 index 0000000000..2d0404bb6a --- /dev/null +++ b/test/staging/sm/Iterator/name.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The "name" property of Iterator + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator, 'name'); +assert.sameValue(propDesc.value, 'Iterator'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/proto.js b/test/staging/sm/Iterator/proto.js new file mode 100644 index 0000000000..90244ed2f5 --- /dev/null +++ b/test/staging/sm/Iterator/proto.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + The prototype of the Iterator constructor is the intrinsic object %FunctionPrototype%. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +assert.sameValue(Object.getPrototypeOf(Iterator), Function.prototype); + +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator, 'prototype'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, false); + diff --git a/test/staging/sm/Iterator/prototype/drop/drop-more-than-available.js b/test/staging/sm/Iterator/prototype/drop/drop-more-than-available.js new file mode 100644 index 0000000000..431ff88ae1 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/drop/drop-more-than-available.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.drop returns if the iterator is done. +info: | + Iterator Helpers proposal 2.1.5.5 1. Repeat, while remaining > 0, + ... + b. Let next be ? IteratorStep(iterated). + c. If next is false, return undefined. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +let iter = [1, 2].values().drop(3); +let result = iter.next(); +assert.sameValue(result.value, undefined); +assert.sameValue(result.done, true); + +class TestIterator extends Iterator { + counter = 0; + next() { + return {done: ++this.counter >= 2, value: undefined}; + } +} + +iter = new TestIterator(); +let dropped = iter.drop(10); +result = dropped.next(); +assert.sameValue(result.value, undefined); +assert.sameValue(result.done, true); +assert.sameValue(iter.counter, 2); + diff --git a/test/staging/sm/Iterator/prototype/drop/drop.js b/test/staging/sm/Iterator/prototype/drop/drop.js new file mode 100644 index 0000000000..9fb1e9e806 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/drop/drop.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Smoketest of %Iterator.prototype%.drop. +info: | + Iterator Helpers proposal 2.1.5.5 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +let iter = [1, 2, 3].values().drop(1); + +for (const v of [2, 3]) { + let result = iter.next(); + assert.sameValue(result.done, false); + assert.sameValue(result.value, v); +} + +assert.sameValue(iter.next().done, true); + +// `drop`, when called without arguments, throws a RangeError, +assertThrowsInstanceOf(() => ['test'].values().drop(), RangeError); + diff --git a/test/staging/sm/Iterator/prototype/drop/length.js b/test/staging/sm/Iterator/prototype/drop/length.js new file mode 100644 index 0000000000..60a8ca0d11 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/drop/length.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.drop length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- Symbol.iterator +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(Iterator.prototype.drop.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.drop, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/drop/name.js b/test/staging/sm/Iterator/prototype/drop/name.js new file mode 100644 index 0000000000..abbeeb2e49 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/drop/name.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.drop.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.drop.name, 'drop'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.drop, 'name'); +assert.sameValue(propertyDescriptor.value, 'drop'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/every/check-fn-after-getting-iterator.js b/test/staging/sm/Iterator/prototype/every/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..33b144ce73 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/check-fn-after-getting-iterator.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends Iterator { + next() { + return {done: true}; + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +assertThrowsInstanceOf(() => iter.every(1), TypeError); + +assert.compareArray( + log, + ["get: every"] +); + diff --git a/test/staging/sm/Iterator/prototype/every/coerce-result-to-boolean.js b/test/staging/sm/Iterator/prototype/every/coerce-result-to-boolean.js new file mode 100644 index 0000000000..1d742fa1f5 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/coerce-result-to-boolean.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const fn = (value) => value; +assert.sameValue([true].values().every(fn), true); +assert.sameValue([1].values().every(fn), true); +assert.sameValue([[]].values().every(fn), true); +assert.sameValue([{}].values().every(fn), true); +assert.sameValue(['test'].values().every(fn), true); + +assert.sameValue([false].values().every(fn), false); +assert.sameValue([0].values().every(fn), false); +assert.sameValue([''].values().every(fn), false); +assert.sameValue([null].values().every(fn), false); +assert.sameValue([undefined].values().every(fn), false); +assert.sameValue([NaN].values().every(fn), false); +assert.sameValue([-0].values().every(fn), false); +assert.sameValue([0n].values().every(fn), false); + +const htmlDDA = createIsHTMLDDA(); +assert.sameValue([htmlDDA].values().every(fn), false); + diff --git a/test/staging/sm/Iterator/prototype/every/descriptor.js b/test/staging/sm/Iterator/prototype/every/descriptor.js new file mode 100644 index 0000000000..a111f06948 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/descriptor.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of Iterator.prototype.every + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype, 'every'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/every/error-from-correct-realm.js b/test/staging/sm/Iterator/prototype/every/error-from-correct-realm.js new file mode 100644 index 0000000000..b2ca885786 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/error-from-correct-realm.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.every(), TypeError); +assertThrowsInstanceOf( + otherGlobal.Iterator.prototype.every.bind(iter), + otherGlobal.TypeError, + 'TypeError comes from the realm of the method.', +); + diff --git a/test/staging/sm/Iterator/prototype/every/fn-not-callable-throws.js b/test/staging/sm/Iterator/prototype/every/fn-not-callable-throws.js new file mode 100644 index 0000000000..095c718c77 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/fn-not-callable-throws.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.every(), TypeError); +assertThrowsInstanceOf(() => iter.every(undefined), TypeError); +assertThrowsInstanceOf(() => iter.every(null), TypeError); +assertThrowsInstanceOf(() => iter.every(0), TypeError); +assertThrowsInstanceOf(() => iter.every(false), TypeError); +assertThrowsInstanceOf(() => iter.every(''), TypeError); +assertThrowsInstanceOf(() => iter.every(Symbol('')), TypeError); +assertThrowsInstanceOf(() => iter.every({}), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/every/fn-throws-close-iterator.js b/test/staging/sm/Iterator/prototype/every/fn-throws-close-iterator.js new file mode 100644 index 0000000000..eec0666339 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/fn-throws-close-iterator.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + return { done: this.closed }; + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.every(fn), Error); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/every/length.js b/test/staging/sm/Iterator/prototype/every/length.js new file mode 100644 index 0000000000..a8e0163a86 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/length.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of Iterator.prototype.every. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.every, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/every/name.js b/test/staging/sm/Iterator/prototype/every/name.js new file mode 100644 index 0000000000..f8d9ccc7b8 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/name.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of Iterator.prototype.every. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.every, 'name'); +assert.sameValue(propDesc.value, 'every'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/every/next-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/every/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..bea05d4cad --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => {}; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.every(fn), Error); +assert.sameValue(iter.closed, false); + diff --git a/test/staging/sm/Iterator/prototype/every/proxy.js b/test/staging/sm/Iterator/prototype/every/proxy.js new file mode 100644 index 0000000000..9a9b5a8c86 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.every only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends Iterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return {done: false, value}; + } + return {done: true}; + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +assert.sameValue(iter.every(x => x % 2 == 0), false); + +assert.sameValue( + log.join('\n'), + `get: every +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: return` +); + diff --git a/test/staging/sm/Iterator/prototype/every/return-true-if-all-match.js b/test/staging/sm/Iterator/prototype/every/return-true-if-all-match.js new file mode 100644 index 0000000000..a63f555ea3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/return-true-if-all-match.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [1, 3, 5].values(); +const fn = (value) => value % 2 == 1; + +assert.sameValue(iter.every(fn), true); + +assert.sameValue([].values().every(x => x), true); + diff --git a/test/staging/sm/Iterator/prototype/every/short-circuit-on-false.js b/test/staging/sm/Iterator/prototype/every/short-circuit-on-false.js new file mode 100644 index 0000000000..1f4a310b3d --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/short-circuit-on-false.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [1, 2, 3].values(); +const log = []; +const fn = (value) => { + log.push(value.toString()); + return value % 2 == 1; +}; + +assert.sameValue(iter.every(fn), false); +assert.sameValue(log.join(','), '1,2'); + diff --git a/test/staging/sm/Iterator/prototype/every/this-not-iterator-throws.js b/test/staging/sm/Iterator/prototype/every/this-not-iterator-throws.js new file mode 100644 index 0000000000..14951b2bec --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/this-not-iterator-throws.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const fn = x => x; +assertThrowsInstanceOf(Iterator.prototype.every.bind(undefined, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.every.bind({}, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.every.bind({next: 0}, fn), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/every/value-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/every/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..11b9b9e3f0 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/every/value-throws-iterator-not-closed.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return new Proxy({done: false}, {get: (target, key, receiver) => { + if (key === 'value') + throw new TestError(); + return 0; + }}); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +assertThrowsInstanceOf(() => iterator.every(x => x), TestError); +assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); + diff --git a/test/staging/sm/Iterator/prototype/filter/coerce-result-to-boolean.js b/test/staging/sm/Iterator/prototype/filter/coerce-result-to-boolean.js new file mode 100644 index 0000000000..0ac497f3fa --- /dev/null +++ b/test/staging/sm/Iterator/prototype/filter/coerce-result-to-boolean.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +// All truthy values are kept. +const truthyValues = [true, 1, [], {}, 'test']; +for (const value of [...truthyValues].values().filter(x => x)) { + assert.sameValue(truthyValues.shift(), value); +} + +// All falsy values are filtered out. +const falsyValues = [false, 0, '', null, undefined, NaN, -0, 0n, createIsHTMLDDA()]; +const result = falsyValues.values().filter(x => x).next(); +assert.sameValue(result.done, true); +assert.sameValue(result.value, undefined); + diff --git a/test/staging/sm/Iterator/prototype/filter/filter.js b/test/staging/sm/Iterator/prototype/filter/filter.js new file mode 100644 index 0000000000..8a9de01e1c --- /dev/null +++ b/test/staging/sm/Iterator/prototype/filter/filter.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let iter = [1, 2, 3].values().filter(x => x % 2); + +for (const v of [1, 3]) { + let result = iter.next(); + assert.sameValue(result.done, false); + assert.sameValue(result.value, v); +} + +assert.sameValue(iter.next().done, true); + diff --git a/test/staging/sm/Iterator/prototype/filter/length.js b/test/staging/sm/Iterator/prototype/filter/length.js new file mode 100644 index 0000000000..a3d1bc9e8b --- /dev/null +++ b/test/staging/sm/Iterator/prototype/filter/length.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.filter length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- Symbol.iterator +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assert.sameValue(Iterator.prototype.filter.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.filter, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/filter/name.js b/test/staging/sm/Iterator/prototype/filter/name.js new file mode 100644 index 0000000000..9a673bfec7 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/filter/name.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.filter.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.filter.name, 'filter'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.filter, 'name'); +assert.sameValue(propertyDescriptor.value, 'filter'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/find/check-fn-after-getting-iterator.js b/test/staging/sm/Iterator/prototype/find/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..b7f520fda3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/check-fn-after-getting-iterator.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends Iterator { + next() { + return {done: true}; + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +assertThrowsInstanceOf(() => iter.find(1), TypeError); + +assert.compareArray( + log, + ["get: find"] +); + diff --git a/test/staging/sm/Iterator/prototype/find/coerce-result-to-boolean.js b/test/staging/sm/Iterator/prototype/find/coerce-result-to-boolean.js new file mode 100644 index 0000000000..60d4fe0ed3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/coerce-result-to-boolean.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const fn = (value) => value; +assert.sameValue([true].values().find(fn), true); +assert.sameValue([1].values().find(fn), 1); +assert.sameValue(['test'].values().find(fn), 'test'); + +assert.sameValue([false].values().find(fn), undefined); +assert.sameValue([0].values().find(fn), undefined); +assert.sameValue([''].values().find(fn), undefined); +assert.sameValue([null].values().find(fn), undefined); +assert.sameValue([undefined].values().find(fn), undefined); +assert.sameValue([NaN].values().find(fn), undefined); +assert.sameValue([-0].values().find(fn), undefined); +assert.sameValue([0n].values().find(fn), undefined); + +let array = []; +assert.sameValue([array].values().find(fn), array); + +let object = {}; +assert.sameValue([object].values().find(fn), object); + +const htmlDDA = createIsHTMLDDA(); +assert.sameValue([htmlDDA].values().find(fn), undefined); + diff --git a/test/staging/sm/Iterator/prototype/find/descriptor.js b/test/staging/sm/Iterator/prototype/find/descriptor.js new file mode 100644 index 0000000000..190c29ee64 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/descriptor.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of Iterator.prototype.find + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype, 'find'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/find/error-from-correct-realm.js b/test/staging/sm/Iterator/prototype/find/error-from-correct-realm.js new file mode 100644 index 0000000000..5b3ab3a0bb --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/error-from-correct-realm.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.find(), TypeError); +assertThrowsInstanceOf( + otherGlobal.Iterator.prototype.find.bind(iter), + otherGlobal.TypeError, + 'TypeError comes from the realm of the method.', +); + diff --git a/test/staging/sm/Iterator/prototype/find/fn-not-callable-throws.js b/test/staging/sm/Iterator/prototype/find/fn-not-callable-throws.js new file mode 100644 index 0000000000..1b79cc65d3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/fn-not-callable-throws.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.find(), TypeError); +assertThrowsInstanceOf(() => iter.find(undefined), TypeError); +assertThrowsInstanceOf(() => iter.find(null), TypeError); +assertThrowsInstanceOf(() => iter.find(0), TypeError); +assertThrowsInstanceOf(() => iter.find(false), TypeError); +assertThrowsInstanceOf(() => iter.find(''), TypeError); +assertThrowsInstanceOf(() => iter.find(Symbol('')), TypeError); +assertThrowsInstanceOf(() => iter.find({}), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/find/fn-throws-close-iterator.js b/test/staging/sm/Iterator/prototype/find/fn-throws-close-iterator.js new file mode 100644 index 0000000000..94f31e6247 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/fn-throws-close-iterator.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + return { done: this.closed }; + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = (value) => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.find(fn), Error); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/find/length.js b/test/staging/sm/Iterator/prototype/find/length.js new file mode 100644 index 0000000000..2b6bc43ded --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/length.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of Iterator.prototype.find. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.find, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/find/name.js b/test/staging/sm/Iterator/prototype/find/name.js new file mode 100644 index 0000000000..c5f7542049 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/name.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of Iterator.prototype.find. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.find, 'name'); +assert.sameValue(propDesc.value, 'find'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/find/next-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/find/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..c66201f15b --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = x => x; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.find(fn), Error); +assert.sameValue(iter.closed, false); + diff --git a/test/staging/sm/Iterator/prototype/find/proxy.js b/test/staging/sm/Iterator/prototype/find/proxy.js new file mode 100644 index 0000000000..e7ca06dd6a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.find only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends Iterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return {done: false, value}; + } + return {done: true}; + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +assert.sameValue(iter.find(x => x % 2 == 1), 1); + +assert.sameValue( + log.join('\n'), + `get: find +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: return` +); + diff --git a/test/staging/sm/Iterator/prototype/find/return-undefined-if-none-match.js b/test/staging/sm/Iterator/prototype/find/return-undefined-if-none-match.js new file mode 100644 index 0000000000..7c36cdeac0 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/return-undefined-if-none-match.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [1, 3, 5].values(); +const fn = (value) => value % 2 == 0; + +assert.sameValue(iter.find(fn), undefined); + +assert.sameValue([].values().find(x => x), undefined); + diff --git a/test/staging/sm/Iterator/prototype/find/short-circuit-on-match.js b/test/staging/sm/Iterator/prototype/find/short-circuit-on-match.js new file mode 100644 index 0000000000..5153c4572f --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/short-circuit-on-match.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [1, 2, 3].values(); +const log = []; +const fn = (value) => { + log.push(value.toString()); + return value % 2 == 0; +}; + +assert.sameValue(iter.find(fn), 2); +assert.sameValue(log.join(','), '1,2'); + diff --git a/test/staging/sm/Iterator/prototype/find/this-not-iterator-throws.js b/test/staging/sm/Iterator/prototype/find/this-not-iterator-throws.js new file mode 100644 index 0000000000..4749750fd6 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/this-not-iterator-throws.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const fn = x => x; +assertThrowsInstanceOf(Iterator.prototype.find.bind(undefined, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.find.bind({}, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.find.bind({next: 0}, fn), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/find/value-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/find/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..71bd7eee30 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/find/value-throws-iterator-not-closed.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return new Proxy({done: false}, {get: (target, key, receiver) => { + if (key === 'value') + throw new TestError(); + return 0; + }}); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +assertThrowsInstanceOf(() => iterator.find(x => x), TestError); +assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js b/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js new file mode 100644 index 0000000000..b2c462c57e --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-complete-throws.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap closes the iterator when innerComplete throws. +info: | + Iterator Helpers proposal 2.1.5.7 1. Repeat, + ... + i. Repeat, while innerAlive is true, + iii. Let innerComplete be IteratorComplete(innerNext). + iv. IfAbruptCloseIterator(innerComplete, iterated). +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +class TestIterator extends Iterator { + next() { + return {done: false, value: 0}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +class TestError extends Error {} +class InnerIterator extends Iterator { + next() { + return { + get done() { + throw new TestError(); + } + }; + } +} + +const iter = new TestIterator(); +const mapped = iter.flatMap(x => new InnerIterator()); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => mapped.next(), TestError); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-next-throws.js b/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-next-throws.js new file mode 100644 index 0000000000..d583b17773 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-next-throws.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap closes the iterator when innerNext throws. +info: | + Iterator Helpers proposal 2.1.5.7 1. Repeat, + ... + i. Repeat, while innerAlive is true, + i. Let innerNext be IteratorNext(innerIterator). + ii. IfAbruptCloseIterator(innerNext, iterated). +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +class TestIterator extends Iterator { + next() { + return {done: false, value: 0}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +class TestError extends Error {} +class InnerIterator extends Iterator { + next() { + throw new TestError(); + } +} + +const iter = new TestIterator(); +const mapped = iter.flatMap(x => new InnerIterator()); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => mapped.next(), TestError); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-value-throws.js b/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-value-throws.js new file mode 100644 index 0000000000..1cd2a661d8 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/close-iterator-when-inner-value-throws.js @@ -0,0 +1,52 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap closes the iterator when innerValue throws. +info: | + Iterator Helpers proposal 2.1.5.7 1. Repeat, + ... + i. Repeat, while innerAlive is true, + ... + vi. Else, + 1. Let innerValue be IteratorValue(innerNext). + 2. IfAbruptCloseIterator(innerValue, iterated). +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +class TestIterator extends Iterator { + next() { + return {done: false, value: 0}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +class TestError extends Error {} +class InnerIterator extends Iterator { + next() { + return { + done: false, + get value() { + throw new TestError(); + }, + }; + } +} + +const iter = new TestIterator(); +const mapped = iter.flatMap(x => new InnerIterator()); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => mapped.next(), TestError); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/flatMap.js b/test/staging/sm/Iterator/prototype/flatMap/flatMap.js new file mode 100644 index 0000000000..cadad5f967 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/flatMap.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- async-iteration +description: | + pending +esid: pending +---*/ + +let iter = [1, 2, 3].values().flatMap(x => [x, x + 1]); +for (const v of [1, 2, 2, 3, 3, 4]) { + let result = iter.next(); + assert.sameValue(result.done, false); + assert.sameValue(result.value, v); +} +assert.sameValue(iter.next().done, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/inner-empty-iterable.js b/test/staging/sm/Iterator/prototype/flatMap/inner-empty-iterable.js new file mode 100644 index 0000000000..20a06ab098 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/inner-empty-iterable.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap skips empty inner iterables. +info: | + Iterator Helpers proposal 2.1.5.7 1. Repeat, + ... + i. Repeat, while innerAlive is true, + ... + iii. Let innerComplete be IteratorComplete(innerNext). + ... + v. If innerComplete is true, set innerAlive to false. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +let iter = [0, 1, 2, 3].values().flatMap(x => x % 2 ? [] : [x]); + +for (const expected of [0, 2]) { + const result = iter.next(); + assert.sameValue(result.value, expected); + assert.sameValue(result.done, false); +} + +let result = iter.next(); +assert.sameValue(result.value, undefined); +assert.sameValue(result.done, true); + +iter = [0, 1, 2, 3].values().flatMap(x => []); +result = iter.next(); +assert.sameValue(result.value, undefined); +assert.sameValue(result.done, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/inner-generator.js b/test/staging/sm/Iterator/prototype/flatMap/inner-generator.js new file mode 100644 index 0000000000..d215bbd7c5 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/inner-generator.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap innerIterator can be a generator. +info: | + Iterator Helpers proposal 2.1.5.7 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +const iter = [1, 2].values().flatMap(function*(x) { + yield x; + yield* [x + 1, x + 2]; +}); + +for (const expected of [1, 2, 3, 2, 3, 4]) { + const result = iter.next(); + assert.sameValue(result.value, expected); + assert.sameValue(result.done, false); +} + +const result = iter.next(); +assert.sameValue(result.value, undefined); +assert.sameValue(result.done, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/length.js b/test/staging/sm/Iterator/prototype/flatMap/length.js new file mode 100644 index 0000000000..e4b89dfe65 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/length.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- Symbol.iterator +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.flatMap.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.flatMap, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/name.js b/test/staging/sm/Iterator/prototype/flatMap/name.js new file mode 100644 index 0000000000..8acedc67cf --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/name.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.flatMap.name, 'flatMap'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.flatMap, 'name'); +assert.sameValue(propertyDescriptor.value, 'flatMap'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/flatMap/throw-when-inner-not-iterable.js b/test/staging/sm/Iterator/prototype/flatMap/throw-when-inner-not-iterable.js new file mode 100644 index 0000000000..4be84cecb0 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/flatMap/throw-when-inner-not-iterable.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.flatMap closes the iterator and throws when mapped isn't iterable. +info: | + Iterator Helpers proposal 2.1.5.7 1. Repeat, + ... + f. Let innerIterator be GetIteratorFlattenable(mapped). + g. IfAbruptCloseIterator(innerIterator, iterated). +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +class InvalidIterable { + [Symbol.iterator]() { + return {}; + } +} + +class TestIterator extends Iterator { + next() { + return {done: false, value: 0}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const nonIterables = [ + new InvalidIterable(), + undefined, + null, + 0, + false, + Symbol(''), + 0n, + {}, +]; + +for (const value of nonIterables) { + const iter = new TestIterator(); + const mapped = iter.flatMap(x => value); + + assert.sameValue(iter.closed, false); + assertThrowsInstanceOf(() => mapped.next(), TypeError); + assert.sameValue(iter.closed, true); +} + diff --git a/test/staging/sm/Iterator/prototype/forEach/check-fn-after-getting-iterator.js b/test/staging/sm/Iterator/prototype/forEach/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..a77dc16950 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/check-fn-after-getting-iterator.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends Iterator { + next() { + return {done: true}; + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +assertThrowsInstanceOf(() => iter.forEach(1), TypeError); + +assert.compareArray( + log, + ["get: forEach"] +); + diff --git a/test/staging/sm/Iterator/prototype/forEach/descriptor.js b/test/staging/sm/Iterator/prototype/forEach/descriptor.js new file mode 100644 index 0000000000..042dedbe2a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/descriptor.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of Iterator.prototype.forEach + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype, 'forEach'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/forEach/error-from-correct-realm.js b/test/staging/sm/Iterator/prototype/forEach/error-from-correct-realm.js new file mode 100644 index 0000000000..dbdb220a63 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/error-from-correct-realm.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.forEach(), TypeError); +assertThrowsInstanceOf( + otherGlobal.Iterator.prototype.forEach.bind(iter), + otherGlobal.TypeError, + 'TypeError comes from the realm of the method.', +); + diff --git a/test/staging/sm/Iterator/prototype/forEach/fn-not-callable-throws.js b/test/staging/sm/Iterator/prototype/forEach/fn-not-callable-throws.js new file mode 100644 index 0000000000..9e943ebf69 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/fn-not-callable-throws.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.forEach(), TypeError); +assertThrowsInstanceOf(() => iter.forEach(undefined), TypeError); +assertThrowsInstanceOf(() => iter.forEach(null), TypeError); +assertThrowsInstanceOf(() => iter.forEach(0), TypeError); +assertThrowsInstanceOf(() => iter.forEach(false), TypeError); +assertThrowsInstanceOf(() => iter.forEach(''), TypeError); +assertThrowsInstanceOf(() => iter.forEach(Symbol('')), TypeError); +assertThrowsInstanceOf(() => iter.forEach({}), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/forEach/fn-throws-close-iterator.js b/test/staging/sm/Iterator/prototype/forEach/fn-throws-close-iterator.js new file mode 100644 index 0000000000..f174667d57 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/fn-throws-close-iterator.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + return { done: this.closed }; + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.forEach(fn), Error); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/forEach/forEach.js b/test/staging/sm/Iterator/prototype/forEach/forEach.js new file mode 100644 index 0000000000..875038fe6a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/forEach.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const log = []; +const fn = (value) => log.push(value); +const iter = [1, 2, 3].values(); + +assert.sameValue(iter.forEach(fn), undefined); +assert.sameValue(log.join(','), '1,2,3'); + diff --git a/test/staging/sm/Iterator/prototype/forEach/length.js b/test/staging/sm/Iterator/prototype/forEach/length.js new file mode 100644 index 0000000000..54da4f41a1 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/length.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of Iterator.prototype.forEach. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.forEach, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/forEach/name.js b/test/staging/sm/Iterator/prototype/forEach/name.js new file mode 100644 index 0000000000..5f9ab02e1c --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/name.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of Iterator.prototype.forEach. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.forEach, 'name'); +assert.sameValue(propDesc.value, 'forEach'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/forEach/next-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/forEach/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..99cc3e292a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => {}; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.forEach(fn), Error); +assert.sameValue(iter.closed, false); + diff --git a/test/staging/sm/Iterator/prototype/forEach/proxy.js b/test/staging/sm/Iterator/prototype/forEach/proxy.js new file mode 100644 index 0000000000..3bcbc4a1bb --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.forEach only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends Iterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return {done: false, value}; + } + return {done: true}; + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.forEach(x => x); + +assert.sameValue( + log.join('\n'), + `get: forEach +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value` +); + diff --git a/test/staging/sm/Iterator/prototype/forEach/this-not-iterator-throws.js b/test/staging/sm/Iterator/prototype/forEach/this-not-iterator-throws.js new file mode 100644 index 0000000000..a5e03f0341 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/this-not-iterator-throws.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const fn = x => x; +assertThrowsInstanceOf(Iterator.prototype.forEach.bind(undefined, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.forEach.bind({}, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.forEach.bind({next: 0}, fn), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/forEach/value-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/forEach/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..715efe7780 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/forEach/value-throws-iterator-not-closed.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return new Proxy({done: false}, {get: (target, key, receiver) => { + if (key === 'value') + throw new TestError(); + return 0; + }}); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +assertThrowsInstanceOf(() => iterator.forEach(x => x), TestError); +assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); + diff --git a/test/staging/sm/Iterator/prototype/generator-methods-throw-on-iterator-helpers.js b/test/staging/sm/Iterator/prototype/generator-methods-throw-on-iterator-helpers.js new file mode 100644 index 0000000000..9ab5ed0bc9 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/generator-methods-throw-on-iterator-helpers.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +const generatorProto = Object.getPrototypeOf( + Object.getPrototypeOf( + (function *() {})() + ) +); + +const iteratorHelper = [0].values().map(x => x); + +assertThrowsInstanceOf(() => generatorProto.next.call(iteratorHelper), TypeError); +assertThrowsInstanceOf(() => generatorProto.return.call(iteratorHelper), TypeError); +assertThrowsInstanceOf(() => generatorProto.throw.call(iteratorHelper), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/iterator-helper-methods-throw-on-generators.js b/test/staging/sm/Iterator/prototype/iterator-helper-methods-throw-on-generators.js new file mode 100644 index 0000000000..a8d5464bb3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/iterator-helper-methods-throw-on-generators.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +const iteratorHelperProto = Object.getPrototypeOf([].values().map(x => x)); + +function *gen() { + yield 1; +} + +assertThrowsInstanceOf(() => iteratorHelperProto.next.call(gen()), TypeError); +assertThrowsInstanceOf(() => iteratorHelperProto.return.call(gen()), TypeError); +assertThrowsInstanceOf(() => iteratorHelperProto.throw.call(gen()), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/iterator-helpers-from-other-global.js b/test/staging/sm/Iterator/prototype/iterator-helpers-from-other-global.js new file mode 100644 index 0000000000..aa02274fbd --- /dev/null +++ b/test/staging/sm/Iterator/prototype/iterator-helpers-from-other-global.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} + +class TestIterator extends Iterator { + next() { + return {done: false, value: 'value'}; + } + + closed = false; + return(value) { + this.closed = true; + return {done: true, value}; + } +} + +function checkIterResult({done, value}, expectedDone, expectedValue) { + assert.sameValue(done, expectedDone); + assert.sameValue(Array.isArray(value) ? value[1] : value, expectedValue); +} + +const otherGlobal = createNewGlobal({newCompartment: true}); + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["flatMap", x => [x]], +]; + +for (const [method, arg] of methods) { + const {next: otherNext} = Object.getPrototypeOf( + new otherGlobal.Array().values()[method](arg) + ); + const iterator = new TestIterator(); + const helper = iterator[method](arg); + checkIterResult(otherNext.call(helper), false, 'value'); +} + +for (const [method, arg] of methods) { + const {return: otherReturn} = Object.getPrototypeOf( + new otherGlobal.Array().values()[method](arg) + ); + const iterator = new TestIterator(); + const helper = iterator[method](arg); + assert.sameValue(iterator.closed, false); + checkIterResult(otherReturn.call(helper), true, undefined); + assert.sameValue(iterator.closed, true); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-from-other-global.js b/test/staging/sm/Iterator/prototype/lazy-methods-from-other-global.js new file mode 100644 index 0000000000..0a71509479 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-from-other-global.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +const otherIteratorProto = createNewGlobal({newCompartment: true}).Iterator.prototype; + +const methods = [ + ["map", x => x], + ["filter", x => true], + ["take", Infinity], + ["drop", 0], + ["flatMap", x => [x]], +]; + +// Use the lazy Iterator methods from another global on an iterator from this global. +for (const [method, arg] of methods) { + const iterator = [1, 2, 3].values(); + const helper = otherIteratorProto[method].call(iterator, arg); + + for (const expected of [1, 2, 3]) { + const {done, value} = helper.next(); + assert.sameValue(done, false); + assert.sameValue(Array.isArray(value) ? value[1] : value, expected); + } + + const {done, value} = helper.next(); + assert.sameValue(done, true); + assert.sameValue(value, undefined); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-handle-empty-iterators.js b/test/staging/sm/Iterator/prototype/lazy-methods-handle-empty-iterators.js new file mode 100644 index 0000000000..d899a905d9 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-handle-empty-iterators.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods handle empty iterators. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class EmptyIterator extends Iterator { + next() { + return {done: true}; + } +} + +const emptyIterator1 = new EmptyIterator(); +const emptyIterator2 = [].values(); + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + for (const iterator of [emptyIterator1, emptyIterator2]) { + const result = method(iterator).next(); + assert.sameValue(result.done, true); + assert.sameValue(result.value, undefined); + } +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-interleaved.js b/test/staging/sm/Iterator/prototype/lazy-methods-interleaved.js new file mode 100644 index 0000000000..dc8769f506 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-interleaved.js @@ -0,0 +1,61 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% method calls can be interleaved. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends Iterator { + value = 0; + next() { + return {done: false, value: this.value++}; + } +} + +function unwrapResult(result) { + return result; +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(2), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const firstMethod of methods) { + for (const secondMethod of methods) { + const iterator = new TestIterator(); + const firstHelper = firstMethod(iterator); + const secondHelper = secondMethod(iterator); + + let firstResult = unwrapResult(firstHelper.next()); + assert.sameValue(firstResult.done, false); + assert.sameValue(firstResult.value, 0); + + let secondResult = unwrapResult(secondHelper.next()); + assert.sameValue(secondResult.done, false); + assert.sameValue(secondResult.value, 1); + + firstResult = unwrapResult(firstHelper.next()); + assert.sameValue(firstResult.done, false); + assert.sameValue(firstResult.value, 2); + + secondResult = unwrapResult(secondHelper.next()); + assert.sameValue(secondResult.done, false); + assert.sameValue(secondResult.value, 3); + } +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-iterator-closed-on-call-throws.js b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-closed-on-call-throws.js new file mode 100644 index 0000000000..a3d2c539de --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-closed-on-call-throws.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods close the iterator if callback throws. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return {done: false, value: 1}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +function fn() { + throw new TestError(); +} +const methods = [ + iter => iter.map(fn), + iter => iter.filter(fn), + iter => iter.flatMap(fn), +]; + +for (const method of methods) { + const iter = new TestIterator(); + assert.sameValue(iter.closed, false); + assertThrowsInstanceOf(() => method(iter).next(), TestError); + assert.sameValue(iter.closed, true); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js new file mode 100644 index 0000000000..b4f8b59d54 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-closed-on-yield-throws.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods close the iterator if `yield` throws. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends Iterator { + next() { + return {done: false, value: 1}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + const iteratorHelper = method(iterator); + iteratorHelper.next(); + iteratorHelper.return(); + assert.sameValue(iterator.closed, true); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js new file mode 100644 index 0000000000..0c60d3a9ad --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-not-closed-on-next-throws.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods don't close the iterator if `.next` call throws. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + throw new TestError(); + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const iterator = new TestIterator(); + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + assert.sameValue(iterator.closed, false); + assertThrowsInstanceOf(() => method(iterator).next(), TestError); + assert.sameValue(iterator.closed, false); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js new file mode 100644 index 0000000000..b766e5e5b0 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-not-closed-on-value-throws.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods don't close the iterator if `value` throws. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return { + get value() { + throw new TestError(); + } + }; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const iterator = new TestIterator(); + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + assert.sameValue(iterator.closed, false); + assertThrowsInstanceOf(() => method(iterator).next(), TestError); + assert.sameValue(iterator.closed, false); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js new file mode 100644 index 0000000000..fd3c61a1b6 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-iterator-returns-done-generator-finishes.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + return {done: true, value: 'value'}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + const iterator = method(new TestIterator()); + const result = iterator.next(); + assert.sameValue(result.done, true); + assert.sameValue(result.value, undefined); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-multiple-return-close-iterator-once.js b/test/staging/sm/Iterator/prototype/lazy-methods-multiple-return-close-iterator-once.js new file mode 100644 index 0000000000..c84a60d654 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-multiple-return-close-iterator-once.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Calling `.return()` on a lazy %Iterator.prototype% method multiple times closes the source iterator once. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends Iterator { + next() { + return {done: false, value: 1}; + } + + closeCount = 0; + return(value) { + this.closeCount++; + return {done: true, value}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +// Call `return` after stepping the iterator once: +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + iterHelper.next(); + + assert.sameValue(iter.closeCount, 0); + iterHelper.return(); + assert.sameValue(iter.closeCount, 1); + iterHelper.return(); + assert.sameValue(iter.closeCount, 1); +} + +// Call `return` before stepping the iterator: +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + assert.sameValue(iter.closeCount, 0); + iterHelper.return(); + assert.sameValue(iter.closeCount, 1); + iterHelper.return(); + assert.sameValue(iter.closeCount, 1); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-pass-through-lastValue.js b/test/staging/sm/Iterator/prototype/lazy-methods-pass-through-lastValue.js new file mode 100644 index 0000000000..b4807c9a1d --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-pass-through-lastValue.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next(value = "next value") { + assert.sameValue(arguments.length, 0); + return {done: false, value}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(2), + iter => iter.drop(0), +]; + +for (const method of methods) { + const iterator = new TestIterator(); + const iteratorHelper = method(iterator); + iteratorHelper.next(); + let result = iteratorHelper.next('last value'); + assert.sameValue(result.done, false); + assert.sameValue(result.value, 'next value'); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-pass-value-through-chain.js b/test/staging/sm/Iterator/prototype/lazy-methods-pass-value-through-chain.js new file mode 100644 index 0000000000..8f52a8350b --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-pass-value-through-chain.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next(value = "next value") { + assert.sameValue(arguments.length, 0); + return {done: false, value}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(2), + iter => iter.drop(0), +]; + +for (const outerMethod of methods) { + for (const innerMethod of methods) { + const iterator = new TestIterator(); + const iteratorChain = outerMethod(innerMethod(iterator)); + iteratorChain.next(); + let result = iteratorChain.next('last value'); + assert.sameValue(result.done, false); + assert.sameValue(result.value, 'next value'); + } +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-proxy-accesses.js b/test/staging/sm/Iterator/prototype/lazy-methods-proxy-accesses.js new file mode 100644 index 0000000000..52627882a5 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-proxy-accesses.js @@ -0,0 +1,72 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods access specified properties only. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +class TestIterator extends Iterator { + value = 0; + next() { + if (this.value < 2) + return { done: false, value: this.value++ }; + return { done: true, value: undefined }; + } +} + +const handlerProxy = log => new Proxy({}, { + get: (target, key, receiver) => (...args) => { + const target = args[0]; + const item = Reflect[key](...args); + + log.push(`${key}: ${args.filter(x => typeof x != 'object').map(x => x.toString())}`); + + return item; + }, +}); + +const methods = [ + [iter => iter.map(x => x), 'map'], + [iter => iter.filter(x => true), 'filter'], + [iter => iter.take(4), 'take'], + [iter => iter.drop(0), 'drop'], + [iter => iter.flatMap(x => [x]), 'flatMap'], +]; + +for (const method of methods) { + const log = []; + const iteratorProxy = new Proxy(new TestIterator(), handlerProxy(log)); + const iteratorHelper = method[0](iteratorProxy); + const methodName = method[1]; + + iteratorHelper.next(); + iteratorHelper.next(); + iteratorHelper.next(); + assert.sameValue(iteratorHelper.next().done, true); + + assert.sameValue( + log.join('\n'), + `get: ${methodName} +get: next +get: value +get: value +getOwnPropertyDescriptor: value +defineProperty: value +set: value,1 +get: value +get: value +getOwnPropertyDescriptor: value +defineProperty: value +set: value,2 +get: value` + ) +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-reentry-not-close-iterator.js b/test/staging/sm/Iterator/prototype/lazy-methods-reentry-not-close-iterator.js new file mode 100644 index 0000000000..93d721aef4 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-reentry-not-close-iterator.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +const methods = [ + [iter => iter.map, x => x], + [iter => iter.filter, x => true], + [iter => iter.flatMap, x => [x]], +]; + +for (const method of methods) { + const iter = [1, 2, 3].values(); + const iterMethod = method[0](iter); + let iterHelper; + let reentered = false; + iterHelper = iterMethod.call(iter, x => { + if (x == 2) { + // Reenter the currently running generator. + reentered = true; + assertThrowsInstanceOf(() => iterHelper.next(), TypeError); + } + return method[1](x); + }); + + let result = iterHelper.next(); + assert.sameValue(result.value, 1); + assert.sameValue(result.done, false); + + assert.sameValue(reentered, false); + result = iterHelper.next(); + assert.sameValue(reentered, true); + assert.sameValue(result.value, 2); + assert.sameValue(result.done, false); + + result = iterHelper.next(); + assert.sameValue(result.value, 3); + assert.sameValue(result.done, false); + + result = iterHelper.next(); + assert.sameValue(result.value, undefined); + assert.sameValue(result.done, true); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-return-closes-iterator.js b/test/staging/sm/Iterator/prototype/lazy-methods-return-closes-iterator.js new file mode 100644 index 0000000000..eca0038d4a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-return-closes-iterator.js @@ -0,0 +1,61 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Calling `.return()` on a lazy %Iterator.prototype% method closes the source iterator. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends Iterator { + next() { + return {done: false, value: 1}; + } + + closed = false; + return(value) { + this.closed = true; + return {done: true, value}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + iterHelper.next(); + + assert.sameValue(iter.closed, false); + const result = iterHelper.return("ignored"); + assert.sameValue(iter.closed, true); + assert.sameValue(result.done, true); + assert.sameValue(result.value, undefined); +} + +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + + assert.sameValue(iter.closed, false); + const result = iterHelper.return("ignored"); + assert.sameValue(iter.closed, true); + assert.sameValue(result.done, true); + assert.sameValue(result.value, undefined); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-return-new-iterator-result.js b/test/staging/sm/Iterator/prototype/lazy-methods-return-new-iterator-result.js new file mode 100644 index 0000000000..26c69d5f7a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-return-new-iterator-result.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy Iterator Helper methods return new iterator result objects. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +const iterResult = {done: false, value: 1, testProperty: 'test'}; +class TestIterator extends Iterator { + next() { + return iterResult; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => true), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +// Call `return` before stepping the iterator: +for (const method of methods) { + const iter = new TestIterator(); + const iterHelper = method(iter); + const result = iterHelper.next(); + assert.sameValue(result == iterResult, false); + assert.sameValue(result.testProperty, undefined); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js b/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js new file mode 100644 index 0000000000..d01a868e65 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-next-non-callable.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods don't throw when `next` is non-callable. +info: | + Iterator Helpers proposal 1.1.1 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +const methods = [ + next => Iterator.prototype.map.bind({next}, x => x), + next => Iterator.prototype.filter.bind({next}, x => x), + next => Iterator.prototype.take.bind({next}, 1), + next => Iterator.prototype.drop.bind({next}, 0), + next => Iterator.prototype.flatMap.bind({next}, x => [x]), +]; + +for (const method of methods) { + method(0); + method(false); + method(undefined); + method(null); + method(''); + method(Symbol('')); + method({}); + method([]); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js b/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js new file mode 100644 index 0000000000..9b5b131900 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-non-callable.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods throw eagerly when passed non-callables. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +const methods = [ + (iter, fn) => iter.map(fn), + (iter, fn) => iter.filter(fn), + (iter, fn) => iter.flatMap(fn), +]; + +for (const method of methods) { + assertThrowsInstanceOf(() => method(Iterator.prototype, 0), TypeError); + assertThrowsInstanceOf(() => method(Iterator.prototype, false), TypeError); + assertThrowsInstanceOf(() => method(Iterator.prototype, undefined), TypeError); + assertThrowsInstanceOf(() => method(Iterator.prototype, null), TypeError); + assertThrowsInstanceOf(() => method(Iterator.prototype, ''), TypeError); + assertThrowsInstanceOf(() => method(Iterator.prototype, Symbol('')), TypeError); + assertThrowsInstanceOf(() => method(Iterator.prototype, {}), TypeError); + + assertThrowsInstanceOf(() => method([].values(), 0), TypeError); + assertThrowsInstanceOf(() => method([].values(), false), TypeError); + assertThrowsInstanceOf(() => method([].values(), undefined), TypeError); + assertThrowsInstanceOf(() => method([].values(), null), TypeError); + assertThrowsInstanceOf(() => method([].values(), ''), TypeError); + assertThrowsInstanceOf(() => method([].values(), Symbol('')), TypeError); + assertThrowsInstanceOf(() => method([].values(), {}), TypeError); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js b/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js new file mode 100644 index 0000000000..5f9bc89718 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-throw-eagerly-on-non-iterator.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods don't throw when called with non-objects. +info: | + Iterator Helpers proposal 1.1.1 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +const methods = [ + iter => Iterator.prototype.map.bind(iter, x => x), + iter => Iterator.prototype.filter.bind(iter, x => x), + iter => Iterator.prototype.take.bind(iter, 1), + iter => Iterator.prototype.drop.bind(iter, 0), + iter => Iterator.prototype.flatMap.bind(iter, x => [x]), +]; + +for (const method of methods) { + assertThrowsInstanceOf(method(undefined), TypeError); + assertThrowsInstanceOf(method(null), TypeError); + assertThrowsInstanceOf(method(0), TypeError); + assertThrowsInstanceOf(method(false), TypeError); + assertThrowsInstanceOf(method(''), TypeError); + assertThrowsInstanceOf(method(Symbol('')), TypeError); + + // No error here. + method({}); + method([]); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-throw-next-done-throws.js b/test/staging/sm/Iterator/prototype/lazy-methods-throw-next-done-throws.js new file mode 100644 index 0000000000..a91899830c --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-throw-next-done-throws.js @@ -0,0 +1,50 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods throw if `next.done` throws. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return { + get done() { + throw new TestError(); + } + }; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + assertThrowsInstanceOf(() => method(iterator).next(), TestError); + assert.sameValue(iterator.closed, false); +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-throw-next-not-object.js b/test/staging/sm/Iterator/prototype/lazy-methods-throw-next-not-object.js new file mode 100644 index 0000000000..f252b7f10a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-throw-next-not-object.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Lazy %Iterator.prototype% methods throw if `next` call returns a non-object. +info: | + Iterator Helpers proposal 2.1.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends Iterator { + next(value) { + return value; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const methods = [ + iter => iter.map(x => x), + iter => iter.filter(x => x), + iter => iter.take(1), + iter => iter.drop(0), + iter => iter.flatMap(x => [x]), +]; + +for (const method of methods) { + for (const value of [undefined, null, 0, false, '', Symbol('')]) { + const iterator = new TestIterator(); + assert.sameValue(iterator.closed, false); + assertThrowsInstanceOf(() => method(iterator).next(value), TypeError); + assert.sameValue(iterator.closed, false); + } +} + diff --git a/test/staging/sm/Iterator/prototype/lazy-methods-throw-on-reentry.js b/test/staging/sm/Iterator/prototype/lazy-methods-throw-on-reentry.js new file mode 100644 index 0000000000..a33a0558a3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/lazy-methods-throw-on-reentry.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +const methods = [ + iter => iter.map, + iter => iter.filter, + iter => iter.flatMap, +]; + +for (const method of methods) { + const iter = [1].values(); + const iterMethod = method(iter); + let iterHelper; + iterHelper = iterMethod.call(iter, x => iterHelper.next()); + assertThrowsInstanceOf(() => iterHelper.next(), TypeError); +} + diff --git a/test/staging/sm/Iterator/prototype/map/call-next-on-iterator-while-iterating.js b/test/staging/sm/Iterator/prototype/map/call-next-on-iterator-while-iterating.js new file mode 100644 index 0000000000..8cfb85cadc --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/call-next-on-iterator-while-iterating.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Call next on an iterator that is being iterated over. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +const iterator = [1, 2, 3].values() +const items = []; + +for (const item of iterator.map(x => x ** 2)) { + const nextItem = iterator.next(); + items.push(item, nextItem.value); +} + +assert.sameValue(items[0], 1); +assert.sameValue(items[1], 2); +assert.sameValue(items[2], 9); +assert.sameValue(items[3], undefined); + diff --git a/test/staging/sm/Iterator/prototype/map/clobber-symbol.js b/test/staging/sm/Iterator/prototype/map/clobber-symbol.js new file mode 100644 index 0000000000..c769e1aadd --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/clobber-symbol.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map works even if the global Symbol has been clobbered.. +features: +- Symbol +- Symbol.iterator +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + Iterator is not enabled unconditionally +---*/ +Symbol = undefined; +assertThrowsInstanceOf(() => Symbol.iterator, TypeError); + +const iterator = [0].values(); +assert.sameValue( + iterator.map(x => x + 1).next().value, 1, + '`%Iterator.prototype%.map` still works after Symbol has been clobbered' +); + diff --git a/test/staging/sm/Iterator/prototype/map/interleaved-map-calls.js b/test/staging/sm/Iterator/prototype/map/interleaved-map-calls.js new file mode 100644 index 0000000000..e435e21d27 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/interleaved-map-calls.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Interleaved %Iterator.prototype%.map calls on the same iterator. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +const iterator = [1, 2, 3].values(); +const mapped1 = iterator.map(x => x); +const mapped2 = iterator.map(x => 0); + +assert.sameValue(mapped1.next().value, 1); +assert.sameValue(mapped2.next().value, 0); +assert.sameValue(mapped1.next().value, 3); + +assert.sameValue(mapped1.next().done, true); +assert.sameValue(mapped2.next().done, true); + diff --git a/test/staging/sm/Iterator/prototype/map/length.js b/test/staging/sm/Iterator/prototype/map/length.js new file mode 100644 index 0000000000..63440f74f2 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/length.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- Symbol.iterator +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.map.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.map, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/map/map.js b/test/staging/sm/Iterator/prototype/map/map.js new file mode 100644 index 0000000000..a8b642ad08 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/map.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +const map = Reflect.getOwnPropertyDescriptor(Iterator.prototype, 'map'); + +assert.sameValue( + Iterator.prototype.map, map.value, + 'The value of `%Iterator.prototype%.map` is the same as the value in the property descriptor.' +); + +assert.sameValue( + typeof map.value, 'function', + '%Iterator.prototype%.map is a function.' +); + +assert.sameValue(map.enumerable, false); +assert.sameValue(map.writable, true); +assert.sameValue(map.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/map/mapper-not-callable-throw.js b/test/staging/sm/Iterator/prototype/map/mapper-not-callable-throw.js new file mode 100644 index 0000000000..59805be7b3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/mapper-not-callable-throw.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Eagerly throw TypeError when `mapper` is not callable. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +assertThrowsInstanceOf(() => Iterator.prototype.map(undefined), TypeError); +assertThrowsInstanceOf(() => [].values().map(undefined), TypeError); + +assertThrowsInstanceOf(() => Iterator.prototype.map(null), TypeError); +assertThrowsInstanceOf(() => [].values().map(null), TypeError); + +assertThrowsInstanceOf(() => Iterator.prototype.map(0), TypeError); +assertThrowsInstanceOf(() => [].values().map(0), TypeError); + +assertThrowsInstanceOf(() => Iterator.prototype.map(false), TypeError); +assertThrowsInstanceOf(() => [].values().map(false), TypeError); + +assertThrowsInstanceOf(() => Iterator.prototype.map({}), TypeError); +assertThrowsInstanceOf(() => [].values().map({}), TypeError); + +assertThrowsInstanceOf(() => Iterator.prototype.map(''), TypeError); +assertThrowsInstanceOf(() => [].values().map(''), TypeError); + +assertThrowsInstanceOf(() => Iterator.prototype.map(Symbol('')), TypeError); +assertThrowsInstanceOf(() => [].values().map(Symbol('')), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/map/mutate-iterator-after-done.js b/test/staging/sm/Iterator/prototype/map/mutate-iterator-after-done.js new file mode 100644 index 0000000000..71096a2f68 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/mutate-iterator-after-done.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Mutate an iterator after it has been mapped and returned done. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +const array = [1, 2, 3]; +const iterator = [1, 2, 3].values().map(x => x * 2); + +assert.sameValue(iterator.next().value, 2); +assert.sameValue(iterator.next().value, 4); +assert.sameValue(iterator.next().value, 6); +assert.sameValue(iterator.next().done, true); + +array.push(4); +assert.sameValue(iterator.next().done, true); + diff --git a/test/staging/sm/Iterator/prototype/map/mutate-iterator.js b/test/staging/sm/Iterator/prototype/map/mutate-iterator.js new file mode 100644 index 0000000000..ad7dc015be --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/mutate-iterator.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Mutate an iterator after it has been mapped. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +const array = [1, 2, 3]; +const iterator = array.values().map(x => x * 2); +array.push(4); + +assert.sameValue(iterator.next().value, 2); +assert.sameValue(iterator.next().value, 4); +assert.sameValue(iterator.next().value, 6); +assert.sameValue(iterator.next().value, 8); +assert.sameValue(iterator.next().done, true); + diff --git a/test/staging/sm/Iterator/prototype/map/name.js b/test/staging/sm/Iterator/prototype/map/name.js new file mode 100644 index 0000000000..145ecf45f5 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/name.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.map.name, 'map'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.map, 'name'); +assert.sameValue(propertyDescriptor.value, 'map'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/map/output-at-generator-end.js b/test/staging/sm/Iterator/prototype/map/output-at-generator-end.js new file mode 100644 index 0000000000..5000917df8 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/output-at-generator-end.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map outputs correct value at end of iterator. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +const iterator = [0].values().map(x => x); + +const iterRecord = iterator.next(); +assert.sameValue(iterRecord.done, false); +assert.sameValue(iterRecord.value, 0); + +let endRecord = iterator.next(); +assert.sameValue(endRecord.done, true); +assert.sameValue(endRecord.value, undefined); + +endRecord = iterator.next(); +assert.sameValue(endRecord.done, true); +assert.sameValue(endRecord.value, undefined); + diff --git a/test/staging/sm/Iterator/prototype/map/pass-lastValue-to-next.js b/test/staging/sm/Iterator/prototype/map/pass-lastValue-to-next.js new file mode 100644 index 0000000000..c8e713672d --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/pass-lastValue-to-next.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map passes lastValue to the `next` call. +info: | + Iterator Helpers Proposal 2.1.5.2 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +const iteratorWhereNextTakesValue = Object.setPrototypeOf({ + next: function(value) { + assert.sameValue(arguments.length, 0); + + if (this.value < 3) + return { done: false, value: this.value++ }; + return { done: true, value: undefined }; + }, + value: 0, +}, Iterator.prototype); + +const mappedIterator = iteratorWhereNextTakesValue.map(x => x); + +assert.sameValue(mappedIterator.next(1).value, 0); + +assert.sameValue(mappedIterator.next(2).value, 1); + +assert.sameValue(mappedIterator.next(3).value, 2); + +assert.sameValue(mappedIterator.next(4).done, true); + +assert.sameValue(mappedIterator.next(5).done, true); + diff --git a/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion-in-iteratorValue.js b/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion-in-iteratorValue.js new file mode 100644 index 0000000000..5ab1e17968 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion-in-iteratorValue.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map does not call return when IteratorValue returns an abrupt completion. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +const handlerProxy = log => new Proxy({}, { + get: (target, key, receiver) => (...args) => { + const target = args[0]; + const item = Reflect[key](...args); + + log.push(`${key}: ${args.filter(x => typeof x != 'object').map(x => x.toString())}`); + + switch (typeof item) { + case 'function': return item.bind(new Proxy(target, handlerProxy(log))); + case 'object': return new Proxy(item, handlerProxy(log)); + default: return item; + } + }, +}); + +const log = []; +const iterator = Object.setPrototypeOf({ + next: function() { + throw 'error'; + return { done: false, value: 0 }; + }, + return: function(value) { + log.push('close iterator'); + return { done: true, value }; + }, +}, Iterator.prototype); +const iteratorProxy = new Proxy(iterator, handlerProxy(log)); +const mappedProxy = iteratorProxy.map(x => x); + +try { + mappedProxy.next(); +} catch (exc) { + assert.sameValue(exc, 'error'); +} + +assert.sameValue( + log.join('\n'), +`get: map +get: next` +); + diff --git a/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion-in-yield.js b/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion-in-yield.js new file mode 100644 index 0000000000..5f9060b978 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion-in-yield.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map calls return when yield throws. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +class TestError extends Error {} + +class TestIterator extends Iterator { + constructor(log) { + super(); + this.log = log; + } + + next() { + return {done: false, value: 0}; + } + + return(value) { + log.push('close iterator'); + return {done: true, value}; + } +} + +const handlerProxy = log => new Proxy({}, { + get: (target, key, receiver) => (...args) => { + const target = args[0]; + const item = Reflect[key](...args); + + log.push(`${key}: ${args.filter(x => typeof x != 'object').map(x => x.toString())}`); + + switch (typeof item) { + case 'function': return item.bind(new Proxy(target, handlerProxy(log))); + case 'object': return new Proxy(item, handlerProxy(log)); + default: return item; + } + }, +}); + +const log = []; +const iterator = new TestIterator(log); +const iteratorProxy = new Proxy(iterator, handlerProxy(log)); +const mappedProxy = iteratorProxy.map(x => x); + +mappedProxy.next(); +mappedProxy.return(); +mappedProxy.next(); + +assert.sameValue( + log.join('\n'), +`get: map +get: next +get: return +close iterator` +); + diff --git a/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion.js b/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion.js new file mode 100644 index 0000000000..59f05ed6c9 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/proxy-abrupt-completion.js @@ -0,0 +1,55 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map accesses specified properties only. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +const handlerProxy = log => new Proxy({}, { + get: (target, key, receiver) => (...args) => { + const target = args[0]; + const item = Reflect[key](...args); + + log.push(`${key}: ${args.filter(x => typeof x != 'object').map(x => x.toString())}`); + + switch (typeof item) { + case 'function': return item.bind(new Proxy(target, handlerProxy(log))); + case 'object': return new Proxy(item, handlerProxy(log)); + default: return item; + } + }, +}); + +const log = []; +const iterator = Object.setPrototypeOf({ + next: function() { + return { done: false, value: 0 }; + }, + return: function(value) { + log.push('close iterator'); + return { done: true, value }; + }, +}, Iterator.prototype); +const iteratorProxy = new Proxy(iterator, handlerProxy(log)); +const mappedProxy = iteratorProxy.map(x => { throw 'error'; }); + +try { + mappedProxy.next(); +} catch (exc) { + assert.sameValue(exc, 'error'); +} + +assert.sameValue( + log.join('\n'), +`get: map +get: next +get: return +close iterator` +); + diff --git a/test/staging/sm/Iterator/prototype/map/proxy-accesses.js b/test/staging/sm/Iterator/prototype/map/proxy-accesses.js new file mode 100644 index 0000000000..72c0791e05 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/proxy-accesses.js @@ -0,0 +1,95 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.map accesses specified properties only. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +const handlerProxy = log => new Proxy({}, { + get: (target, key, receiver) => (...args) => { + const target = args[0]; + const item = Reflect[key](...args); + + log.push(`${key}: ${args.filter(x => typeof x != 'object').map(x => x.toString())}`); + + switch (typeof item) { + case 'function': return item.bind(new Proxy(target, handlerProxy(log))); + case 'object': return new Proxy(item, handlerProxy(log)); + default: return item; + } + }, +}); + +const log = []; +const iterator = Object.setPrototypeOf({ + next: function() { + if (this.value < 3) + return { done: false, value: this.value++ }; + return { done: true, value: undefined }; + }, + value: 0, +}, Iterator.prototype); +const iteratorProxy = new Proxy(iterator, handlerProxy(log)); +const mappedProxy = iteratorProxy.map(x => x); + +for (const item of mappedProxy) { +} + +assert.sameValue( + log.join('\n'), +`get: map +get: next +get: value +get: value +getOwnPropertyDescriptor: value +has: enumerable +get: enumerable +has: configurable +get: configurable +has: value +get: value +has: writable +get: writable +has: get +has: set +defineProperty: value +set: value,1 +get: value +get: value +getOwnPropertyDescriptor: value +has: enumerable +get: enumerable +has: configurable +get: configurable +has: value +get: value +has: writable +get: writable +has: get +has: set +defineProperty: value +set: value,2 +get: value +get: value +getOwnPropertyDescriptor: value +has: enumerable +get: enumerable +has: configurable +get: configurable +has: value +get: value +has: writable +get: writable +has: get +has: set +defineProperty: value +set: value,3 +get: value` +); + diff --git a/test/staging/sm/Iterator/prototype/map/reenter-map-generator-from-mapper.js b/test/staging/sm/Iterator/prototype/map/reenter-map-generator-from-mapper.js new file mode 100644 index 0000000000..ea2468bd5e --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/reenter-map-generator-from-mapper.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ + +// Re-entering the map() generator from the called mapper fails. + +let iterator; +function mapper(x) { + let n = iterator.next(); + return x; +} +iterator = [0].values().map(mapper); + +assertThrowsInstanceOf(iterator.next, TypeError); + diff --git a/test/staging/sm/Iterator/prototype/map/this-not-iterator-throw.js b/test/staging/sm/Iterator/prototype/map/this-not-iterator-throw.js new file mode 100644 index 0000000000..732ed8c60f --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/this-not-iterator-throw.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Eagerly throw TypeError when `this` is not an iterator. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +const mapper = (x) => x; + +assertThrowsInstanceOf(() => Iterator.prototype.map.call(undefined, mapper), TypeError); +assertThrowsInstanceOf(() => Iterator.prototype.map.call(null, mapper), TypeError); +assertThrowsInstanceOf(() => Iterator.prototype.map.call(0, mapper), TypeError); +assertThrowsInstanceOf(() => Iterator.prototype.map.call(false, mapper), TypeError); +assertThrowsInstanceOf(() => Iterator.prototype.map.call('', mapper), TypeError); +assertThrowsInstanceOf(() => Iterator.prototype.map.call(new Symbol(''), mapper), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/map/this-value-array-throws.js b/test/staging/sm/Iterator/prototype/map/this-value-array-throws.js new file mode 100644 index 0000000000..da3326e4d9 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/this-value-array-throws.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + TypeError not thrown when `this` is an Array. +features: +- Symbol.iterator +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +Iterator.prototype.map.call([], x => x); + diff --git a/test/staging/sm/Iterator/prototype/map/throw-when-iterator-returns-non-object.js b/test/staging/sm/Iterator/prototype/map/throw-when-iterator-returns-non-object.js new file mode 100644 index 0000000000..894f481c9e --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/throw-when-iterator-returns-non-object.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Throw TypeError if `next` call returns non-object. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +const iterator = returnValue => Object.setPrototypeOf({ + next: () => returnValue, +}, Iterator.prototype); +const mapper = x => x; + +assertThrowsInstanceOf(() => iterator(undefined).map(mapper).next(), TypeError); +assertThrowsInstanceOf(() => iterator(null).map(mapper).next(), TypeError); +assertThrowsInstanceOf(() => iterator(0).map(mapper).next(), TypeError); +assertThrowsInstanceOf(() => iterator(false).map(mapper).next(), TypeError); +assertThrowsInstanceOf(() => iterator('').map(mapper).next(), TypeError); +assertThrowsInstanceOf(() => iterator(Symbol()).map(mapper).next(), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/map/values-pass-through-chained-maps-to-next.js b/test/staging/sm/Iterator/prototype/map/values-pass-through-chained-maps-to-next.js new file mode 100644 index 0000000000..3e90b310eb --- /dev/null +++ b/test/staging/sm/Iterator/prototype/map/values-pass-through-chained-maps-to-next.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Multiple chained %Iterator.prototype%.map calls pass `lastValue` to the iterator's `next` call. +info: | + Iterator Helpers Proposal 2.1.5.2 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +// + +const iteratorWhereNextTakesValue = Object.setPrototypeOf({ + next: function(value) { + assert.sameValue(arguments.length, 0); + + if (this.value < 3) + return { done: false, value: this.value++ }; + return { done: true, value: undefined }; + }, + value: 0, +}, Iterator.prototype); + +const mappedIterator = iteratorWhereNextTakesValue.map(x => 2 * x).map(x => 1 + x); + +assert.sameValue(mappedIterator.next(1).value, 1); + +assert.sameValue(mappedIterator.next(2).value, 3); + +assert.sameValue(mappedIterator.next(3).value, 5); + +assert.sameValue(mappedIterator.next(4).done, true); + +assert.sameValue(mappedIterator.next(5).done, true); + diff --git a/test/staging/sm/Iterator/prototype/reduce/accumulator-set-to-initial-value.js b/test/staging/sm/Iterator/prototype/reduce/accumulator-set-to-initial-value.js new file mode 100644 index 0000000000..1e97cc0f9b --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/accumulator-set-to-initial-value.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const reducer = (acc, value) => acc; +const iterator = [1, 2, 3].values(); + +assert.sameValue(iterator.reduce(reducer, 0), 0); + diff --git a/test/staging/sm/Iterator/prototype/reduce/check-fn-after-getting-iterator.js b/test/staging/sm/Iterator/prototype/reduce/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..985e6ff2a5 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/check-fn-after-getting-iterator.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends Iterator { + next() { + return {done: true}; + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +assertThrowsInstanceOf(() => iter.reduce(1), TypeError); + +assert.compareArray( + log, + ["get: reduce"] +); + diff --git a/test/staging/sm/Iterator/prototype/reduce/descriptor.js b/test/staging/sm/Iterator/prototype/reduce/descriptor.js new file mode 100644 index 0000000000..aeb3b6095f --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/descriptor.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of Iterator.prototype.reduce + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype, 'reduce'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/reduce/empty-iterator-without-initial-value-throws.js b/test/staging/sm/Iterator/prototype/reduce/empty-iterator-without-initial-value-throws.js new file mode 100644 index 0000000000..ac7a2ac860 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/empty-iterator-without-initial-value-throws.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [].values(); +assertThrowsInstanceOf(() => iter.reduce((x, y) => x + y), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/reduce/error-from-correct-realm.js b/test/staging/sm/Iterator/prototype/reduce/error-from-correct-realm.js new file mode 100644 index 0000000000..254cf27cfe --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/error-from-correct-realm.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.reduce(), TypeError); +assertThrowsInstanceOf( + otherGlobal.Iterator.prototype.reduce.bind(iter), + otherGlobal.TypeError, + 'TypeError comes from the realm of the method.', +); + diff --git a/test/staging/sm/Iterator/prototype/reduce/iterator-empty-return-initial-value.js b/test/staging/sm/Iterator/prototype/reduce/iterator-empty-return-initial-value.js new file mode 100644 index 0000000000..530d4f041c --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/iterator-empty-return-initial-value.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const reducer = (x, y) => 0; +const iterator = [].values(); + +assert.sameValue(iterator.reduce(reducer, 1), 1); + diff --git a/test/staging/sm/Iterator/prototype/reduce/iterator-next-return-non-object-throws.js b/test/staging/sm/Iterator/prototype/reduce/iterator-next-return-non-object-throws.js new file mode 100644 index 0000000000..7eb1377045 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/iterator-next-return-non-object-throws.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + constructor(value) { + super(); + this.value = value; + } + + next() { + return this.value; + } +} + +const sum = (x, y) => x + y; + +let iter = new TestIterator(undefined); +assertThrowsInstanceOf(() => iter.reduce(sum), TypeError); +iter = new TestIterator(null); +assertThrowsInstanceOf(() => iter.reduce(sum), TypeError); +iter = new TestIterator(0); +assertThrowsInstanceOf(() => iter.reduce(sum), TypeError); +iter = new TestIterator(false); +assertThrowsInstanceOf(() => iter.reduce(sum), TypeError); +iter = new TestIterator(''); +assertThrowsInstanceOf(() => iter.reduce(sum), TypeError); +iter = new TestIterator(Symbol('')); +assertThrowsInstanceOf(() => iter.reduce(sum), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/reduce/left-associative.js b/test/staging/sm/Iterator/prototype/reduce/left-associative.js new file mode 100644 index 0000000000..3476cbf6c7 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/left-associative.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +assert.sameValue([1, 2, 3].values().reduce((x, y) => `(${x}+${y})`, 0), '(((0+1)+2)+3)'); +assert.sameValue([1, 2, 3].values().reduce((x, y) => `(${x}+${y})`), '((1+2)+3)'); + diff --git a/test/staging/sm/Iterator/prototype/reduce/length.js b/test/staging/sm/Iterator/prototype/reduce/length.js new file mode 100644 index 0000000000..d10914e6f1 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/length.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of Iterator.prototype.reduce. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.reduce, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/reduce/name.js b/test/staging/sm/Iterator/prototype/reduce/name.js new file mode 100644 index 0000000000..bb07ab9bb3 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/name.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of Iterator.prototype.reduce. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.reduce, 'name'); +assert.sameValue(propDesc.value, 'reduce'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/reduce/next-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/reduce/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..e16e70cd59 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const sum = (x, y) => x + y; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.reduce(sum), Error); +assert.sameValue(iter.closed, false); + diff --git a/test/staging/sm/Iterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js b/test/staging/sm/Iterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js new file mode 100644 index 0000000000..5d17678ca6 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/no-initial-value-set-accumulator-to-first-value.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const reducer = (acc, value) => acc; +const iterator = [1, 2, 3].values(); + +assert.sameValue(iterator.reduce(reducer), 1); + diff --git a/test/staging/sm/Iterator/prototype/reduce/proxy.js b/test/staging/sm/Iterator/prototype/reduce/proxy.js new file mode 100644 index 0000000000..e9caea25df --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.reduce only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends Iterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return {done: false, value}; + } + return {done: true}; + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +iter.reduce((x, y) => x + y); + +assert.sameValue( + log.join('\n'), + `get: reduce +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value` +); + diff --git a/test/staging/sm/Iterator/prototype/reduce/reduce.js b/test/staging/sm/Iterator/prototype/reduce/reduce.js new file mode 100644 index 0000000000..c448bed33d --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/reduce.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const reducer = (acc, value) => acc + value; +const iterator = [1, 2, 3].values(); + +assert.sameValue(iterator.reduce(reducer, 0), 6); + diff --git a/test/staging/sm/Iterator/prototype/reduce/reducer-not-callable-throws.js b/test/staging/sm/Iterator/prototype/reduce/reducer-not-callable-throws.js new file mode 100644 index 0000000000..d60a9f4b56 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/reducer-not-callable-throws.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + return { done: false, value: 0 }; + } +} + +const iter = new TestIterator(); +assertThrowsInstanceOf(() => iter.reduce(), TypeError); +assertThrowsInstanceOf(() => iter.reduce(undefined), TypeError); +assertThrowsInstanceOf(() => iter.reduce(null), TypeError); +assertThrowsInstanceOf(() => iter.reduce(0), TypeError); +assertThrowsInstanceOf(() => iter.reduce(false), TypeError); +assertThrowsInstanceOf(() => iter.reduce(''), TypeError); +assertThrowsInstanceOf(() => iter.reduce(Symbol('')), TypeError); +assertThrowsInstanceOf(() => iter.reduce({}), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/reduce/reducer-throws-iterator-closed.js b/test/staging/sm/Iterator/prototype/reduce/reducer-throws-iterator-closed.js new file mode 100644 index 0000000000..ad308faf15 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/reducer-throws-iterator-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + return { done: this.closed, value: undefined }; + } + + closed = false; + return() { + this.closed = true; + } +} + +const reducer = (x, y) => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.reduce(reducer), Error); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/reduce/this-not-iterator-throws.js b/test/staging/sm/Iterator/prototype/reduce/this-not-iterator-throws.js new file mode 100644 index 0000000000..2e40e31bb7 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/this-not-iterator-throws.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const sum = (x, y) => x + y; +assertThrowsInstanceOf(Iterator.prototype.reduce.bind(undefined, sum), TypeError); +assertThrowsInstanceOf(Iterator.prototype.reduce.bind({}, sum), TypeError); +assertThrowsInstanceOf(Iterator.prototype.reduce.bind({next: 0}, sum), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/reduce/value-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/reduce/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..e24edf573e --- /dev/null +++ b/test/staging/sm/Iterator/prototype/reduce/value-throws-iterator-not-closed.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return new Proxy({done: false}, {get: (target, key, receiver) => { + if (key === 'value') + throw new TestError(); + return 0; + }}); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +assertThrowsInstanceOf(() => iterator.reduce((x, y) => x + y, 0), TestError); +assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); + diff --git a/test/staging/sm/Iterator/prototype/some/check-fn-after-getting-iterator.js b/test/staging/sm/Iterator/prototype/some/check-fn-after-getting-iterator.js new file mode 100644 index 0000000000..4ed28d539c --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/check-fn-after-getting-iterator.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class TestIterator extends Iterator { + next() { + return {done: true}; + } +} + +const iter = new Proxy(new TestIterator(), handlerProxy); +assertThrowsInstanceOf(() => iter.some(1), TypeError); + +assert.compareArray( + log, + ["get: some"] +); + diff --git a/test/staging/sm/Iterator/prototype/some/coerce-result-to-boolean.js b/test/staging/sm/Iterator/prototype/some/coerce-result-to-boolean.js new file mode 100644 index 0000000000..2b1aae48bd --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/coerce-result-to-boolean.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const fn = (value) => value; +assert.sameValue([true].values().some(fn), true); +assert.sameValue([1].values().some(fn), true); +assert.sameValue([[]].values().some(fn), true); +assert.sameValue([{}].values().some(fn), true); +assert.sameValue(['test'].values().some(fn), true); + +assert.sameValue([false].values().some(fn), false); +assert.sameValue([0].values().some(fn), false); +assert.sameValue([''].values().some(fn), false); +assert.sameValue([null].values().some(fn), false); +assert.sameValue([undefined].values().some(fn), false); +assert.sameValue([NaN].values().some(fn), false); +assert.sameValue([-0].values().some(fn), false); +assert.sameValue([0n].values().some(fn), false); + +const htmlDDA = createIsHTMLDDA(); +assert.sameValue([htmlDDA].values().some(fn), false); + diff --git a/test/staging/sm/Iterator/prototype/some/descriptor.js b/test/staging/sm/Iterator/prototype/some/descriptor.js new file mode 100644 index 0000000000..4d6e634a94 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/descriptor.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of Iterator.prototype.some + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype, 'some'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/some/error-from-correct-realm.js b/test/staging/sm/Iterator/prototype/some/error-from-correct-realm.js new file mode 100644 index 0000000000..347cf9db61 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/error-from-correct-realm.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); +assert.sameValue(TypeError !== otherGlobal.TypeError, true); + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.some(), TypeError); +assertThrowsInstanceOf( + otherGlobal.Iterator.prototype.some.bind(iter), + otherGlobal.TypeError, + 'TypeError comes from the realm of the method.', +); + diff --git a/test/staging/sm/Iterator/prototype/some/fn-not-callable-throws.js b/test/staging/sm/Iterator/prototype/some/fn-not-callable-throws.js new file mode 100644 index 0000000000..a35aa1bd55 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/fn-not-callable-throws.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [].values(); + +assertThrowsInstanceOf(() => iter.some(), TypeError); +assertThrowsInstanceOf(() => iter.some(undefined), TypeError); +assertThrowsInstanceOf(() => iter.some(null), TypeError); +assertThrowsInstanceOf(() => iter.some(0), TypeError); +assertThrowsInstanceOf(() => iter.some(false), TypeError); +assertThrowsInstanceOf(() => iter.some(''), TypeError); +assertThrowsInstanceOf(() => iter.some(Symbol('')), TypeError); +assertThrowsInstanceOf(() => iter.some({}), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/some/fn-throws-close-iterator.js b/test/staging/sm/Iterator/prototype/some/fn-throws-close-iterator.js new file mode 100644 index 0000000000..f96fb33e0a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/fn-throws-close-iterator.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + return { done: this.closed }; + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => { throw new Error(); }; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.some(fn), Error); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/some/length.js b/test/staging/sm/Iterator/prototype/some/length.js new file mode 100644 index 0000000000..847dffc8a4 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/length.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of Iterator.prototype.some. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.some, 'length'); +assert.sameValue(propDesc.value, 1); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/some/name.js b/test/staging/sm/Iterator/prototype/some/name.js new file mode 100644 index 0000000000..2602902e84 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/name.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of Iterator.prototype.some. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.some, 'name'); +assert.sameValue(propDesc.value, 'some'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/some/next-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/some/next-throws-iterator-not-closed.js new file mode 100644 index 0000000000..12ad43399a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/next-throws-iterator-not-closed.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + throw new Error(); + } + + closed = false; + return() { + this.closed = true; + } +} + +const fn = () => {}; +const iter = new TestIterator(); + +assert.sameValue(iter.closed, false); +assertThrowsInstanceOf(() => iter.some(fn), Error); +assert.sameValue(iter.closed, false); + diff --git a/test/staging/sm/Iterator/prototype/some/proxy.js b/test/staging/sm/Iterator/prototype/some/proxy.js new file mode 100644 index 0000000000..c800c3a88b --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.some only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends Iterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return {done: false, value}; + } + return {done: true}; + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +assert.sameValue(iter.some(x => x % 2 == 1), true); + +assert.sameValue( + log.join('\n'), + `get: some +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: return` +); + diff --git a/test/staging/sm/Iterator/prototype/some/return-false-if-none-match.js b/test/staging/sm/Iterator/prototype/some/return-false-if-none-match.js new file mode 100644 index 0000000000..30e540756b --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/return-false-if-none-match.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [1, 3, 5].values(); +const fn = (value) => value % 2 == 0; + +assert.sameValue(iter.some(fn), false); + +assert.sameValue([].values().some(x => x), false); + diff --git a/test/staging/sm/Iterator/prototype/some/short-circuit-on-true.js b/test/staging/sm/Iterator/prototype/some/short-circuit-on-true.js new file mode 100644 index 0000000000..47fbbdc9d6 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/short-circuit-on-true.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [1, 2, 3].values(); +const log = []; +const fn = (value) => { + log.push(value.toString()); + return value % 2 == 0; +}; + +assert.sameValue(iter.some(fn), true); +assert.sameValue(log.join(','), '1,2'); + diff --git a/test/staging/sm/Iterator/prototype/some/this-not-iterator-throws.js b/test/staging/sm/Iterator/prototype/some/this-not-iterator-throws.js new file mode 100644 index 0000000000..fc49a84ab0 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/this-not-iterator-throws.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const fn = x => x; +assertThrowsInstanceOf(Iterator.prototype.some.bind(undefined, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.some.bind({}, fn), TypeError); +assertThrowsInstanceOf(Iterator.prototype.some.bind({next: 0}, fn), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/some/value-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/some/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..cd540ac2dc --- /dev/null +++ b/test/staging/sm/Iterator/prototype/some/value-throws-iterator-not-closed.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return new Proxy({done: false}, {get: (target, key, receiver) => { + if (key === 'value') + throw new TestError(); + return 0; + }}); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +assertThrowsInstanceOf(() => iterator.some(x => x), TestError); +assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); + diff --git a/test/staging/sm/Iterator/prototype/take-drop-throw-eagerly-on-negative.js b/test/staging/sm/Iterator/prototype/take-drop-throw-eagerly-on-negative.js new file mode 100644 index 0000000000..407f517809 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/take-drop-throw-eagerly-on-negative.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + `take` and `drop` throw eagerly when passed negative numbers, after rounding towards 0. +info: | + Iterator Helpers proposal 2.1.5.4 and 2.1.5.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +const iter = [].values(); +const methods = [ + value => iter.take(value), + value => iter.drop(value), +]; + +for (const method of methods) { + assertThrowsInstanceOf(() => method(-1), RangeError); + assertThrowsInstanceOf(() => method(-Infinity), RangeError); + assertThrowsInstanceOf(() => method(NaN), RangeError); + assertThrowsInstanceOf(() => method(-NaN), RangeError); + + method(-0); + method(-0.9); +} + diff --git a/test/staging/sm/Iterator/prototype/take-drop-throw-eagerly-on-non-integer.js b/test/staging/sm/Iterator/prototype/take-drop-throw-eagerly-on-non-integer.js new file mode 100644 index 0000000000..56f5092dc7 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/take-drop-throw-eagerly-on-non-integer.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + `take` and `drop` throw eagerly when passed values that can't be converted to numbers. +info: | + Iterator Helpers proposal 2.1.5.4 and 2.1.5.5 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +const iter = [].values(); +const methods = [ + value => iter.take(value), + value => iter.drop(value), +]; + +const objectWithToPrimitive = { + [Symbol.toPrimitive]() { + return {}; + } +}; + +for (const method of methods) { + assertThrowsInstanceOf(() => method(0n), TypeError); + assertThrowsInstanceOf(() => method(Symbol('')), TypeError); + assertThrowsInstanceOf(() => method(objectWithToPrimitive), TypeError); +} + diff --git a/test/staging/sm/Iterator/prototype/take/close-iterator-when-none-remaining.js b/test/staging/sm/Iterator/prototype/take/close-iterator-when-none-remaining.js new file mode 100644 index 0000000000..6af6996e82 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/take/close-iterator-when-none-remaining.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.take closes the iterator when remaining is 0. +info: | + Iterator Helpers proposal 2.1.5.4 +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +class TestIterator extends Iterator { + next() { + return {done: false, value: 1}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const iter = new TestIterator(); +const iterTake = iter.take(1); + +let result = iterTake.next(); +assert.sameValue(result.done, false); +assert.sameValue(result.value, 1); +assert.sameValue(iter.closed, false); + +result = iterTake.next(); +assert.sameValue(result.done, true); +assert.sameValue(result.value, undefined); +assert.sameValue(iter.closed, true); + diff --git a/test/staging/sm/Iterator/prototype/take/length.js b/test/staging/sm/Iterator/prototype/take/length.js new file mode 100644 index 0000000000..008e45a9d0 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/take/length.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.take length value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- Symbol.iterator +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.take.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.take, 'length'); +assert.sameValue(propertyDescriptor.value, 1); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/take/name.js b/test/staging/sm/Iterator/prototype/take/name.js new file mode 100644 index 0000000000..84b30512c1 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/take/name.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.take.name value and descriptor. +info: | + 17 ECMAScript Standard Built-in Objects +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ +assert.sameValue(Iterator.prototype.take.name, 'take'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.prototype.take, 'name'); +assert.sameValue(propertyDescriptor.value, 'take'); +assert.sameValue(propertyDescriptor.enumerable, false); +assert.sameValue(propertyDescriptor.writable, false); +assert.sameValue(propertyDescriptor.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/take/take-more-than-available.js b/test/staging/sm/Iterator/prototype/take/take-more-than-available.js new file mode 100644 index 0000000000..ec9b16e2ec --- /dev/null +++ b/test/staging/sm/Iterator/prototype/take/take-more-than-available.js @@ -0,0 +1,55 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + %Iterator.prototype%.take returns if the iterator is done. +info: | + Iterator Helpers proposal 2.1.5.4 2. Repeat, + ... + c. Let next be ? IteratorStep(iterated, lastValue). + d. If next is false, return undefined. +features: +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +// +// +let iter = [1, 2].values().take(3); +for (const expected of [1, 2]) { + const result = iter.next(); + assert.sameValue(result.value, expected); + assert.sameValue(result.done, false); +} +let result = iter.next(); +assert.sameValue(result.value, undefined); +assert.sameValue(result.done, true); + +class TestIterator extends Iterator { + counter = 0; + next() { + return {done: ++this.counter >= 2, value: undefined}; + } + + closed = false; + return(value) { + this.closed = true; + return {done: true, value}; + } +} + +iter = new TestIterator(); +let taken = iter.take(10); +for (const value of taken) { + assert.sameValue(value, undefined); +} +result = taken.next(); +assert.sameValue(result.value, undefined); +assert.sameValue(result.done, true); +assert.sameValue(iter.counter, 2); +assert.sameValue(iter.closed, false); + diff --git a/test/staging/sm/Iterator/prototype/take/take.js b/test/staging/sm/Iterator/prototype/take/take.js new file mode 100644 index 0000000000..6e00929d06 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/take/take.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: pending +description: | + Smoketest of %Iterator.prototype%.take. +info: | + Iterator Helpers proposal 2.1.5.4 +features: +- async-iteration +- iterator-helpers +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +---*/ + +let iter = [1, 2, 3].values().take(2); + +for (const v of [1, 2]) { + let result = iter.next(); + assert.sameValue(result.done, false); + assert.sameValue(result.value, v); +} + +assert.sameValue(iter.next().done, true); + +// `take`, when called without arguments, throws a RangeError, +assertThrowsInstanceOf(() => ['test'].values().take(), RangeError); + diff --git a/test/staging/sm/Iterator/prototype/toArray/create-in-current-realm.js b/test/staging/sm/Iterator/prototype/toArray/create-in-current-realm.js new file mode 100644 index 0000000000..42e8d88d9d --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/create-in-current-realm.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const otherGlobal = createNewGlobal({newCompartment: true}); + +let array = [1, 2, 3].values().toArray(); +assert.sameValue(array instanceof Array, true); +assert.sameValue(array instanceof otherGlobal.Array, false); + +array = otherGlobal.Iterator.prototype.toArray.call([1, 2, 3].values()); +assert.sameValue(array instanceof Array, false); +assert.sameValue(array instanceof otherGlobal.Array, true); + diff --git a/test/staging/sm/Iterator/prototype/toArray/descriptor.js b/test/staging/sm/Iterator/prototype/toArray/descriptor.js new file mode 100644 index 0000000000..0f814ca413 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/descriptor.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +info: | + Descriptor property of Iterator.prototype.toArray + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +description: | + pending +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype, 'toArray'); +assert.sameValue(typeof propDesc.value, 'function'); +assert.sameValue(propDesc.writable, true); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/toArray/iterator-empty.js b/test/staging/sm/Iterator/prototype/toArray/iterator-empty.js new file mode 100644 index 0000000000..89c3ba66e8 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/iterator-empty.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [].values(); +const array = iter.toArray(); + +assert.sameValue(Array.isArray(array), true); +assert.sameValue(array.length, 0); + diff --git a/test/staging/sm/Iterator/prototype/toArray/length.js b/test/staging/sm/Iterator/prototype/toArray/length.js new file mode 100644 index 0000000000..4f5ab7287a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/length.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + The `length` property of Iterator.prototype.toArray. +info: | + ES7 section 17: Unless otherwise specified, the length property of a built-in + Function object has the attributes { [[Writable]]: false, [[Enumerable]]: + false, [[Configurable]]: true }. + + Iterator is not enabled unconditionally +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.toArray, 'length'); +assert.sameValue(propDesc.value, 0); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/toArray/name.js b/test/staging/sm/Iterator/prototype/toArray/name.js new file mode 100644 index 0000000000..915d1848f0 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/name.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + `name` property of Iterator.prototype.toArray. +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +esid: pending +---*/ +const propDesc = Reflect.getOwnPropertyDescriptor(Iterator.prototype.toArray, 'name'); +assert.sameValue(propDesc.value, 'toArray'); +assert.sameValue(propDesc.writable, false); +assert.sameValue(propDesc.enumerable, false); +assert.sameValue(propDesc.configurable, true); + diff --git a/test/staging/sm/Iterator/prototype/toArray/next-throws.js b/test/staging/sm/Iterator/prototype/toArray/next-throws.js new file mode 100644 index 0000000000..7252c44591 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/next-throws.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestIterator extends Iterator { + next() { + throw new Error(); + } +} + +const iter = new TestIterator(); + +assertThrowsInstanceOf(() => iter.toArray(), Error); + diff --git a/test/staging/sm/Iterator/prototype/toArray/proxy.js b/test/staging/sm/Iterator/prototype/toArray/proxy.js new file mode 100644 index 0000000000..f8f04c500b --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ +// +// This test checks that %Iterator.prototype%.toArray only gets the `next` method off of the +// iterator once, and never accesses the @@iterator property. +const log = []; +const handlerProxy = new Proxy({}, { + get: (target, key, receiver) => (...args) => { + log.push(`${key}: ${args[1]?.toString()}`); + return Reflect[key](...args); + }, +}); + +class Counter extends Iterator { + value = 0; + next() { + const value = this.value; + if (value < 2) { + this.value = value + 1; + return {done: false, value}; + } + return {done: true}; + } +} + +const iter = new Proxy(new Counter(), handlerProxy); +const array = iter.toArray(); + +assert.sameValue( + log.join('\n'), + `get: toArray +get: next +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value +set: value +getOwnPropertyDescriptor: value +defineProperty: value +get: value` +); + diff --git a/test/staging/sm/Iterator/prototype/toArray/this-not-iterator-throws.js b/test/staging/sm/Iterator/prototype/toArray/this-not-iterator-throws.js new file mode 100644 index 0000000000..33b3ba345f --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/this-not-iterator-throws.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +assertThrowsInstanceOf(Iterator.prototype.toArray.bind(undefined), TypeError); +assertThrowsInstanceOf(Iterator.prototype.toArray.bind({}), TypeError); +assertThrowsInstanceOf(Iterator.prototype.toArray.bind({next: 0}), TypeError); + diff --git a/test/staging/sm/Iterator/prototype/toArray/toArray.js b/test/staging/sm/Iterator/prototype/toArray/toArray.js new file mode 100644 index 0000000000..ee66928d08 --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/toArray.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +const iter = [1, 2, 3].values(); +assert.sameValue(Array.isArray(iter), false); + +const array = iter.toArray(); +assert.sameValue(Array.isArray(array), true); +assert.sameValue(array.length, 3); + +const expected = [1, 2, 3]; +for (const item of array) { + const expect = expected.shift(); + assert.sameValue(item, expect); +} + diff --git a/test/staging/sm/Iterator/prototype/toArray/value-throws-iterator-not-closed.js b/test/staging/sm/Iterator/prototype/toArray/value-throws-iterator-not-closed.js new file mode 100644 index 0000000000..b348bf4b1a --- /dev/null +++ b/test/staging/sm/Iterator/prototype/toArray/value-throws-iterator-not-closed.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- iterator-helpers +info: | + Iterator is not enabled unconditionally +description: | + pending +esid: pending +---*/ + +class TestError extends Error {} +class TestIterator extends Iterator { + next() { + return new Proxy({done: false}, {get: (target, key, receiver) => { + if (key === 'value') + throw new TestError(); + return 0; + }}); + } + + closed = false; + return() { + closed = true; + } +} + +const iterator = new TestIterator(); +assert.sameValue(iterator.closed, false, 'iterator starts unclosed'); +assertThrowsInstanceOf(() => iterator.toArray(), TestError); +assert.sameValue(iterator.closed, false, 'iterator remains unclosed'); + diff --git a/test/staging/sm/JSON/cyclic-stringify-unrelated.js b/test/staging/sm/JSON/cyclic-stringify-unrelated.js new file mode 100644 index 0000000000..327f4ad5fe --- /dev/null +++ b/test/staging/sm/JSON/cyclic-stringify-unrelated.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1197097; +var summary = "JSON.stringify shouldn't use context-wide cycle detection"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr; + +// Nested yet separate JSON.stringify is okay. +arr = [{}]; +assert.sameValue(JSON.stringify(arr, function(k, v) { + assert.sameValue(JSON.stringify(arr), "[{}]"); + return v; +}), "[{}]"); + +// SpiderMonkey censors cycles in array-joining. This mechanism must not +// interfere with the cycle detection in JSON.stringify. +arr = [{ + toString: function() { + var s = JSON.stringify(arr); + assert.sameValue(s, "[{}]"); + return s; + } +}]; +assert.sameValue(arr.join(), "[{}]"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/cyclic-stringify.js b/test/staging/sm/JSON/cyclic-stringify.js new file mode 100644 index 0000000000..ece9abc85a --- /dev/null +++ b/test/staging/sm/JSON/cyclic-stringify.js @@ -0,0 +1,107 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 578273; +var summary = + "ES5: Properly detect cycles in JSON.stringify (throw TypeError, check for " + + "cycles rather than imprecisely rely on recursion limits)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// objects + +var count = 0; +var desc = + { + get: function() { count++; return obj; }, + enumerable: true, + configurable: true + }; +var obj = Object.defineProperty({ p1: 0 }, "p2", desc); + +try +{ + var str = JSON.stringify(obj); + assert.sameValue(false, true, "should have thrown, got " + str); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "wrong error type: " + e.constructor.name); + assert.sameValue(count, 1, + "cyclic data structures not detected immediately"); +} + +count = 0; +var obj2 = Object.defineProperty({}, "obj", desc); +try +{ + var str = JSON.stringify(obj2); + assert.sameValue(false, true, "should have thrown, got " + str); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "wrong error type: " + e.constructor.name); + assert.sameValue(count, 2, + "cyclic data structures not detected immediately"); +} + + +// arrays + +var count = 0; +var desc = + { + get: function() { count++; return arr; }, + enumerable: true, + configurable: true + }; +var arr = Object.defineProperty([], "0", desc); + +try +{ + var str = JSON.stringify(arr); + assert.sameValue(false, true, "should have thrown, got " + str); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "wrong error type: " + e.constructor.name); + assert.sameValue(count, 1, + "cyclic data structures not detected immediately"); +} + +count = 0; +var arr2 = Object.defineProperty([], "0", desc); +try +{ + var str = JSON.stringify(arr2); + assert.sameValue(false, true, "should have thrown, got " + str); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "wrong error type: " + e.constructor.name); + assert.sameValue(count, 2, + "cyclic data structures not detected immediately"); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-arguments.js b/test/staging/sm/JSON/parse-arguments.js new file mode 100644 index 0000000000..c3158b139b --- /dev/null +++ b/test/staging/sm/JSON/parse-arguments.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'parse-arguments.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 653847; +var summary = "JSON.parse handling of omitted arguments"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + var r = JSON.parse(); + throw new Error("didn't throw, returned " + r); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, "expected syntax error, got: " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-crockford-01.js b/test/staging/sm/JSON/parse-crockford-01.js new file mode 100644 index 0000000000..84cad8be24 --- /dev/null +++ b/test/staging/sm/JSON/parse-crockford-01.js @@ -0,0 +1,129 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var str = + '[\n' + + ' "JSON Test Pattern pass1",\n' + + ' {"object with 1 member":["array with 1 element"]},\n' + + ' {},\n' + + ' [],\n' + + ' -42,\n' + + ' true,\n' + + ' false,\n' + + ' null,\n' + + ' {\n' + + ' "integer": 1234567890,\n' + + ' "real": -9876.543210,\n' + + ' "e": 0.123456789e-12,\n' + + ' "E": 1.234567890E+34,\n' + + ' "": 23456789012E66,\n' + + ' "zero": 0,\n' + + ' "one": 1,\n' + + ' "space": " ",\n' + + ' "quote": "\\"",\n' + + ' "backslash": "\\\\",\n' + + ' "controls": "\\b\\f\\n\\r\\t",\n' + + ' "slash": "/ & \\/",\n' + + ' "alpha": "abcdefghijklmnopqrstuvwyz",\n' + + ' "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",\n' + + ' "digit": "0123456789",\n' + + ' "0123456789": "digit",\n' + + ' "special": "`1~!@#$%^&*()_+-={\':[,]}|;.?",\n' + + ' "hex": "\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A",\n' + + ' "true": true,\n' + + ' "false": false,\n' + + ' "null": null,\n' + + ' "array":[ ],\n' + + ' "object":{ },\n' + + ' "address": "50 St. James Street",\n' + + ' "url": "http://www.JSON.org/",\n' + + ' "comment": "// /* */": " ",\n' + + ' " s p a c e d " :[1,2 , 3\n' + + '\n' + + ',\n' + + '\n' + + '4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],\n' + + ' "jsontext": "{\\"object with 1 member\\":[\\"array with 1 element\\"]}",\n' + + ' "quotes": "" \\u0022 %22 0x22 034 "",\n' + + ' "\\/\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"\n' + + ': "A key can be any string"\n' + + ' },\n' + + ' 0.5 ,98.6\n' + + ',\n' + + '99.44\n' + + ',\n' + + '\n' + + '1066,\n' + + '1e1,\n' + + '0.1e1,\n' + + '1e-1,\n' + + '1e00,2e+00,2e-00\n' + + ',"rosebud"]\n'; + +var x = JSON.parse(str); + +assert.sameValue(x[0], "JSON Test Pattern pass1"); +assert.sameValue(x[1]["object with 1 member"][0], "array with 1 element"); +assert.sameValue(x[2].constructor, Object); +assert.sameValue(x[3].constructor, Array); +assert.sameValue(x[4], -42); +assert.sameValue(x[5], true); +assert.sameValue(x[6], false); +assert.sameValue(x[7], null); +assert.sameValue(x[8].constructor, Object); +assert.sameValue(x[8]["integer"], 1234567890); +assert.sameValue(x[8]["real"], -9876.543210); +assert.sameValue(x[8]["e"], 0.123456789e-12); +assert.sameValue(x[8]["E"], 1.234567890E+34); +assert.sameValue(x[8][""], 23456789012E66); +assert.sameValue(x[8]["zero"], 0); +assert.sameValue(x[8]["one"], 1); +assert.sameValue(x[8]["space"], " "); +assert.sameValue(x[8]["quote"], "\""); +assert.sameValue(x[8]["backslash"], "\\"); +assert.sameValue(x[8]["controls"], "\b\f\n\r\t"); +assert.sameValue(x[8]["slash"], "/ & /"); +assert.sameValue(x[8]["alpha"], "abcdefghijklmnopqrstuvwyz"); +assert.sameValue(x[8]["ALPHA"], "ABCDEFGHIJKLMNOPQRSTUVWYZ"); +assert.sameValue(x[8]["digit"], "0123456789"); +assert.sameValue(x[8]["0123456789"], "digit"); +assert.sameValue(x[8]["special"], "`1~!@#$%^&*()_+-={':[,]}|;.?"); +assert.sameValue(x[8]["hex"], "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A"); +assert.sameValue(x[8]["true"], true); +assert.sameValue(x[8]["false"], false); +assert.sameValue(x[8]["null"], null); +assert.sameValue(x[8]["array"].length, 0); +assert.sameValue(x[8]["object"].constructor, Object); +assert.sameValue(x[8]["address"], "50 St. James Street"); +assert.sameValue(x[8]["url"], "http://www.JSON.org/"); +assert.sameValue(x[8]["comment"], "// /* */"], " "); +assert.sameValue(x[8][" s p a c e d "].length, 7); +assert.sameValue(x[8]["compact"].length, 7); +assert.sameValue(x[8]["jsontext"], "{\"object with 1 member\":[\"array with 1 element\"]}"); +assert.sameValue(x[8]["quotes"], "" \u0022 %22 0x22 034 ""); +assert.sameValue(x[8]["\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"], "A key can be any string"); +assert.sameValue(x[9], 0.5); +assert.sameValue(x[10], 98.6); +assert.sameValue(x[11], 99.44); +assert.sameValue(x[12], 1066); +assert.sameValue(x[13], 1e1); +assert.sameValue(x[14], 0.1e1); +assert.sameValue(x[15], 1e-1); +assert.sameValue(x[16], 1e00); +assert.sameValue(x[17], 2e+00); +assert.sameValue(x[18], 2e-00); +assert.sameValue(x[19], "rosebud"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-mega-huge-array.js b/test/staging/sm/JSON/parse-mega-huge-array.js new file mode 100644 index 0000000000..219e123b09 --- /dev/null +++ b/test/staging/sm/JSON/parse-mega-huge-array.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'parse-mega-huge-array.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 667527; +var summary = "JSON.parse should parse arrays of essentially unlimited size"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var body = "0,"; +for (var i = 0; i < 21; i++) + body = body + body; +var str = '[' + body + '0]'; + +var arr = JSON.parse(str); +assert.sameValue(arr.length, Math.pow(2, 21) + 1); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-number-syntax.js b/test/staging/sm/JSON/parse-number-syntax.js new file mode 100644 index 0000000000..6251380751 --- /dev/null +++ b/test/staging/sm/JSON/parse-number-syntax.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +testJSON('-', true); +testJSON('+', true); +testJSON('-f', true); +testJSON('+f', true); +testJSON('00', true); +testJSON('01', true); +testJSON('1.', true); +testJSON('1.0e', true); +testJSON('1.0e+', true); +testJSON('1.0e-', true); +testJSON('1.0e+z', true); +testJSON('1.0e-z', true); +testJSON('1.0ee', true); +testJSON('1.e1', true); +testJSON('1.e+1', true); +testJSON('1.e-1', true); +testJSON('.', true); +testJSON('.1', true); +testJSON('.1e', true); +testJSON('.1e1', true); +testJSON('.1e+1', true); +testJSON('.1e-1', true); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-octal-syntax-error.js b/test/staging/sm/JSON/parse-octal-syntax-error.js new file mode 100644 index 0000000000..cedcea35e8 --- /dev/null +++ b/test/staging/sm/JSON/parse-octal-syntax-error.js @@ -0,0 +1,16 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +testJSON('{"Numbers cannot have leading zeroes": 013}', true); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-primitives.js b/test/staging/sm/JSON/parse-primitives.js new file mode 100644 index 0000000000..73f242978e --- /dev/null +++ b/test/staging/sm/JSON/parse-primitives.js @@ -0,0 +1,70 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var x; + +// check an empty object, just for sanity +var emptyObject = "{}"; +x = JSON.parse(emptyObject); +assert.sameValue(typeof x, "object"); +assert.sameValue(x instanceof Object, true); + +x = JSON.parse(emptyObject); +assert.sameValue(typeof x, "object"); + +// booleans and null +x = JSON.parse("true"); +assert.sameValue(x, true); + +x = JSON.parse("true "); +assert.sameValue(x, true); + +x = JSON.parse("false"); +assert.sameValue(x, false); + +x = JSON.parse(" null "); +assert.sameValue(x, null); + +// numbers +x = JSON.parse("1234567890"); +assert.sameValue(x, 1234567890); + +x = JSON.parse("-9876.543210"); +assert.sameValue(x, -9876.543210); + +x = JSON.parse("0.123456789e-12"); +assert.sameValue(x, 0.123456789e-12); + +x = JSON.parse("1.234567890E+34"); +assert.sameValue(x, 1.234567890E+34); + +x = JSON.parse(" 23456789012E66 \r\r\r\r \n\n\n\n "); +assert.sameValue(x, 23456789012E66); + +// strings +x = JSON.parse('"foo"'); +assert.sameValue(x, "foo"); + +x = JSON.parse('"\\r\\n"'); +assert.sameValue(x, "\r\n"); + +x = JSON.parse(' "\\uabcd\uef4A"'); +assert.sameValue(x, "\uabcd\uef4A"); + +x = JSON.parse('"\\uabcd" '); +assert.sameValue(x, "\uabcd"); + +x = JSON.parse('"\\f"'); +assert.sameValue(x, "\f"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-reviver-array-delete.js b/test/staging/sm/JSON/parse-reviver-array-delete.js new file mode 100644 index 0000000000..757a6e8a8a --- /dev/null +++ b/test/staging/sm/JSON/parse-reviver-array-delete.js @@ -0,0 +1,96 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'parse-reviver-array-delete.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 999999; +var summary = "JSON.parse with a reviver which elides array elements"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* + * The reviver deletes all properties from the to-be-returned array. Thus + * stringification reveals properties on the prototype chain -- but there are + * none, so this result is unsurprising. + */ +assert.sameValue(JSON.parse('[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]', + function revive(k, v) + { + if (k === "") + return v; + return undefined; + }) + "", + ",,,,,,,,,,,,,,,,,,,"); + +/* + * Now let's try a reviver that deletes every property but a mega-huge one. + */ +var str = "["; +var expected = ""; +var expected2 = ""; +for (var i = 0; i < 2048; i++) +{ + str += "1,"; + if (i === 2047) + { + expected += "1"; + expected2 += "1"; + } + if (i === 3) + expected2 += "17"; + expected += ","; + expected2 += ","; +} +str += "1]"; + +assert.sameValue(JSON.parse(str, + function reviver(k, v) + { + if (k === "" || k === "2047") + return v; + return undefined; + }) + "", + expected); + + +Array.prototype[3] = 17; + +/* Now, with a property on the prototype chain, it'll show through. */ +assert.sameValue(JSON.parse('[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]', + function revive(k, v) + { + if (k === "") + return v; + return undefined; + }) + "", + ",,,17,,,,,,,,,,,,,,,,"); + + +/* And here too. */ +assert.sameValue(JSON.parse(str, + function reviver(k, v) + { + if (k === "" || k === "2047") + return v; + return undefined; + }) + "", + expected2); + + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-reviver.js b/test/staging/sm/JSON/parse-reviver.js new file mode 100644 index 0000000000..2de53c599f --- /dev/null +++ b/test/staging/sm/JSON/parse-reviver.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function doubler(k, v) +{ + assert.sameValue(typeof k, "string"); + + if (typeof v == "number") + return 2 * v; + + return v; +} + +var x = JSON.parse('{"a":5,"b":6}', doubler); +assert.sameValue(x.hasOwnProperty('a'), true); +assert.sameValue(x.hasOwnProperty('b'), true); +assert.sameValue(x.a, 10); +assert.sameValue(x.b, 12); + +x = JSON.parse('[3, 4, 5]', doubler); +assert.sameValue(x[0], 6); +assert.sameValue(x[1], 8); +assert.sameValue(x[2], 10); + +// make sure reviver isn't called after a failed parse +var called = false; +function dontCallMe(k, v) +{ + called = true; +} + +try +{ + JSON.parse('{{{{{{{}}}}', dontCallMe); + throw new Error("didn't throw?"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, "wrong exception: " + e); +} +assert.sameValue(called, false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-syntax-errors-01.js b/test/staging/sm/JSON/parse-syntax-errors-01.js new file mode 100644 index 0000000000..abd25e6358 --- /dev/null +++ b/test/staging/sm/JSON/parse-syntax-errors-01.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +testJSON("{}...", true); +testJSON('{"foo": truBBBB}', true); +testJSON('{foo: truBBBB}', true); +testJSON('{"foo": undefined}', true); +testJSON('{"foo": ]', true); +testJSON('{"foo', true); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-syntax-errors-02.js b/test/staging/sm/JSON/parse-syntax-errors-02.js new file mode 100644 index 0000000000..50119fbe41 --- /dev/null +++ b/test/staging/sm/JSON/parse-syntax-errors-02.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +testJSON('"Unterminated string literal', true); +testJSON('["Unclosed array"', true); +testJSON('{unquoted_key: "keys must be quoted"}', true); +testJSON('["extra comma",]', true); +testJSON('["double extra comma",,]', true); +testJSON('[ , "<-- missing value"]', true); +testJSON('["Comma after the close"],', true); +testJSON('["Extra close"]]', true); +testJSON('{"Extra comma": true,}', true); +testJSON('{"Extra value after close": true} "misplaced quoted value"', true); +testJSON('{"Illegal expression": 1 + 2}', true); +testJSON('{"Illegal invocation": alert()}', true); +testJSON('{"Numbers cannot be hex": 0x14}', true); +testJSON('["Illegal backslash escape: \\x15"]', true); +testJSON('[\\naked]', true); +testJSON('["Illegal backslash escape: \\017"]', true); +testJSON('{"Missing colon" null}', true); +testJSON('{"Double colon":: null}', true); +testJSON('{"Comma instead of colon", null}', true); +testJSON('["Colon instead of comma": false]', true); +testJSON('["Bad value", truth]', true); +testJSON("['single quote']", true); +testJSON('[" tab character in string "]', true); +testJSON('["tab\\ character\\ in\\ string\\ "]', true); +testJSON('["line\rbreak"]', true); +testJSON('["line\nbreak"]', true); +testJSON('["line\r\nbreak"]', true); +testJSON('["line\\\rbreak"]', true); +testJSON('["line\\\nbreak"]', true); +testJSON('["line\\\r\nbreak"]', true); +testJSON('[0e]', true); +testJSON('[0e+]', true); +testJSON('[0e+-1]', true); +testJSON('{"Comma instead of closing brace": true,', true); +testJSON('["mismatch"}', true); +testJSON('0{', true); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-syntax-errors-03.js b/test/staging/sm/JSON/parse-syntax-errors-03.js new file mode 100644 index 0000000000..0fb0559c12 --- /dev/null +++ b/test/staging/sm/JSON/parse-syntax-errors-03.js @@ -0,0 +1,62 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +testJSON('[', true); +testJSON('[1', true); +testJSON('[1,]', true); +testJSON('[1,{', true); +testJSON('[1,}', true); +testJSON('[1,{]', true); +testJSON('[1,}]', true); +testJSON('[1,{"', true); +testJSON('[1,}"', true); +testJSON('[1,{"\\', true); +testJSON('[1,}"\\', true); +testJSON('[1,"', true); +testJSON('[1,"\\', true); + +testJSON('{', true); +testJSON('{1', true); +testJSON('{,', true); +testJSON('{"', true); +testJSON('{"\\', true); +testJSON('{"\\u', true); +testJSON('{"\\uG', true); +testJSON('{"\\u0', true); +testJSON('{"\\u01', true); +testJSON('{"\\u012', true); +testJSON('{"\\u0123', true); +testJSON('{"\\u0123"', true); +testJSON('{"a"', true); +testJSON('{"a"}', true); +testJSON('{"a":', true); +testJSON('{"a",}', true); +testJSON('{"a":}', true); +testJSON('{"a":,}', true); +testJSON('{"a":5,}', true); +testJSON('{"a":5,[', true); +testJSON('{"a":5,"', true); +testJSON('{"a":5,"', true); +testJSON('{"a":5,"\\', true); +testJSON("a[false ]".substring(1, 7) /* "[false" */, true); + +testJSON('this', true); + +testJSON('[1,{}]', false); +testJSON('{}', false); +testJSON('{"a":5}', false); +testJSON('{"\\u0123":5}', false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/parse-with-source.js b/test/staging/sm/JSON/parse-with-source.js new file mode 100644 index 0000000000..85d0b61937 --- /dev/null +++ b/test/staging/sm/JSON/parse-with-source.js @@ -0,0 +1,145 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +(function checkJSONParseWithSource() { + var actual; + + function reviver(key, value, context) { + assert.sameValue(arguments.length, 3); + if ("source" in context) { + actual.push(context["source"]); + } else { // objects and arrays have no "source" + actual.push(null); + } + } + + let tests = [ + // STRINGS + {input: '""', expected: ['""']}, + {input: '"str"', expected: ['"str"']}, + {input: '"str" ', expected: ['"str"']}, + {input: ' "str" ', expected: ['"str"']}, + {input: ' " str"', expected: ['" str"']}, + {input: '"\uD83D\uDE0A\u2764\u2FC1"', expected: ['"\uD83D\uDE0A\u2764\u2FC1"']}, + // NUMBERS + {input: '1', expected: ['1']}, + {input: ' 1', expected: ['1']}, + {input: '4.2', expected: ['4.2']}, + {input: '4.2 ', expected: ['4.2']}, + {input: '4.2000 ', expected: ['4.2000']}, + {input: '4e2000 ', expected: ['4e2000']}, + {input: '4.4e2000 ', expected: ['4.4e2000']}, + {input: '9007199254740999', expected: ['9007199254740999']}, + {input: '-31', expected: ['-31']}, + {input: '-3.1', expected: ['-3.1']}, + {input: ' -31 ', expected: ['-31']}, + // BOOLEANS + {input: 'true', expected: ['true']}, + {input: 'true ', expected: ['true']}, + {input: 'false', expected: ['false']}, + {input: ' false', expected: ['false']}, + // NULL + {input: 'null', expected: ['null']}, + {input: ' null', expected: ['null']}, + {input: '\tnull ', expected: ['null']}, + {input: 'null\t', expected: ['null']}, + // OBJECTS + {input: '{ }', expected: [null]}, + {input: '{ "4": 1 }', expected: ['1', null]}, + {input: '{ "a": 1 }', expected: ['1', null]}, + {input: '{ "b": 2, "a": 1 }', expected: ['2', '1', null]}, + {input: '{ "b": 2, "1": 1 }', expected: ['1', '2', null]}, + {input: '{ "b": 2, "c": null }', expected: ['2', 'null', null]}, + {input: '{ "b": 2, "b": 1, "b": 4 }', expected: ['4', null]}, + {input: '{ "b": 2, "a": "1" }', expected: ['2', '"1"', null]}, + {input: '{ "b": { "c": 3 }, "a": 1 }', expected: ['3', null, '1', null]}, + // ARRAYS + {input: '[]', expected: [null]}, + {input: '[1, 5, 2]', expected: ['1', '5', '2', null]}, + {input: '[1, null, 2]', expected: ['1', 'null', '2', null]}, + {input: '[1, {"a":2}, "7"]', expected: ['1', '2', null, '"7"', null]}, + {input: '[1, [2, [3, [4, 5], [6, 7], 8], 9], 10]', expected: ['1', '2', '3', '4', '5', null, '6', '7', null, '8', null, '9', null, '10', null]}, + {input: '[1, [2, [3, [4, 5, 6, 7, 8, 9, 10], []]]]', expected: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', null, null, null, null, null]}, + {input: '{"a": [1, {"b":2}, "7"], "c": 8}', expected: ['1', '2', null, '"7"', null, '8', null]}, + ]; + for (const test of tests) { + actual = []; + JSON.parse(test.input, reviver); + assert.compareArray(actual, test.expected); + } + + // If the constructed object is modified but the result of the modification is + // the same as the original, we should still provide the source + function replace_c_with_same_val(key, value, context) { + if (key === "a") { + this["c"] = "ABCDEABCDE"; + } + if (key) { + assert.sameValue("source" in context, true); + } + return value; + } + JSON.parse('{ "a": "b", "c": "ABCDEABCDE" }', replace_c_with_same_val); +})(); + +(function checkRawJSON() { + function assertIsRawJson(rawJson, expectedRawJsonValue) { + assert.sameValue(null, Object.getPrototypeOf(rawJson)); + assert.sameValue(true, Object.hasOwn(rawJson, 'rawJSON')); + assert.deepEqual(['rawJSON'], Object.keys(rawJson)); + assert.deepEqual(['rawJSON'], Object.getOwnPropertyNames(rawJson)); + assert.deepEqual([], Object.getOwnPropertySymbols(rawJson)); + assert.sameValue(expectedRawJsonValue, rawJson.rawJSON); + } + + assert.sameValue(true, Object.isFrozen(JSON.rawJSON('"shouldBeFrozen"'))); + assertThrowsInstanceOf(() => JSON.rawJSON(), SyntaxError); + assertIsRawJson(JSON.rawJSON(1, 2), '1'); +})(); + +(function checkIsRawJSON() { + assert.sameValue(false, JSON.isRawJSON()); + assert.sameValue(false, JSON.isRawJSON({}, {})); + assert.sameValue(false, JSON.isRawJSON({}, JSON.rawJSON(2))); + assert.sameValue(true, JSON.isRawJSON(JSON.rawJSON(1), JSON.rawJSON(2))); +})(); + +(function checkUseAsPrototype() { + var p = JSON.rawJSON(false); + var obj = { a: "hi" }; + Object.setPrototypeOf(obj, p); + assert.deepEqual(obj.rawJSON, "false"); +})(); + +(function checkErrorsComeFromCorrectRealm() { + const otherGlobal = createNewGlobal({newCompartment: true}); + assert.sameValue(TypeError !== otherGlobal.TypeError, true); + + assertErrorComesFromCorrectRealm = (fun, thisRealmType) => { + assertThrowsInstanceOf(() => fun(this), thisRealmType, + `${thisRealmType.name} should come from this realm.`); + assertThrowsInstanceOf(() => fun(otherGlobal), otherGlobal[thisRealmType.name], + `${thisRealmType.name} should come from the other realm.`); + } + + otherGlobal.eval('obj = {}'); + + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON(Symbol('123')), TypeError); + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON(undefined), SyntaxError); + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON({}), SyntaxError); + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON(otherGlobal.obj), SyntaxError); + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON([]), SyntaxError); + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON('123\n'), SyntaxError); + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON('\t123'), SyntaxError); + assertErrorComesFromCorrectRealm((gbl) => gbl.JSON.rawJSON(''), SyntaxError); +})(); + diff --git a/test/staging/sm/JSON/parse.js b/test/staging/sm/JSON/parse.js new file mode 100644 index 0000000000..ea3f378d54 --- /dev/null +++ b/test/staging/sm/JSON/parse.js @@ -0,0 +1,183 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertIsObject(x) +{ + assert.sameValue(typeof x, "object"); + assert.sameValue(x instanceof Object, true); +} + +function assertIsArray(x) +{ + assertIsObject(x); + assert.sameValue(Array.isArray(x), true); + assert.sameValue(Object.getPrototypeOf(x), Array.prototype); + assert.sameValue(x instanceof Array, true); + assert.sameValue(x.constructor, Array); +} + +var x; +var props; + +// empty object +x = JSON.parse("{}"); +assertIsObject(x); +assert.sameValue(Object.getOwnPropertyNames(x).length, 0); + +// empty array +x = JSON.parse("[]"); +assertIsArray(x); +assert.sameValue(x.length, 0); + +// one element array +x = JSON.parse("[[]]"); +assertIsArray(x); +assert.sameValue(x.length, 1); +assertIsArray(x[0]); +assert.sameValue(x[0].length, 0); + +// multiple arrays +x = JSON.parse("[[],[],[]]"); +assertIsArray(x); +assert.sameValue(x.length, 3); +assertIsArray(x[0]); +assert.sameValue(x[0].length, 0); +assertIsArray(x[1]); +assert.sameValue(x[1].length, 0); +assertIsArray(x[2]); +assert.sameValue(x[2].length, 0); + +// array key/value +x = JSON.parse('{"foo":[]}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assert.sameValue(props.length, 1); +assert.sameValue(props[0], "foo"); +assertIsArray(x.foo); +assert.sameValue(x.foo.length, 0); + +x = JSON.parse('{"foo":[], "bar":[]}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x).sort(); +assert.sameValue(props.length, 2); +assert.sameValue(props[0], "bar"); +assert.sameValue(props[1], "foo"); +assertIsArray(x.foo); +assert.sameValue(x.foo.length, 0); +assertIsArray(x.bar); +assert.sameValue(x.bar.length, 0); + +// nesting +x = JSON.parse('{"foo":[{}]}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assert.sameValue(props.length, 1); +assert.sameValue(props[0], "foo"); +assertIsArray(x.foo); +assert.sameValue(x.foo.length, 1); +assertIsObject(x.foo[0]); +assert.sameValue(Object.getOwnPropertyNames(x.foo[0]).length, 0); + +x = JSON.parse('{"foo":[{"foo":[{"foo":{}}]}]}'); +assertIsObject(x.foo[0].foo[0].foo); + +x = JSON.parse('{"foo":[{"foo":[{"foo":[]}]}]}'); +assertIsArray(x.foo[0].foo[0].foo); + +// strings +x = JSON.parse('{"foo":"bar"}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assert.sameValue(props.length, 1); +assert.sameValue(props[0], "foo"); +assert.sameValue(x.foo, "bar"); + +x = JSON.parse('["foo", "bar", "baz"]'); +assertIsArray(x); +assert.sameValue(x.length, 3); +assert.sameValue(x[0], "foo"); +assert.sameValue(x[1], "bar"); +assert.sameValue(x[2], "baz"); + +// numbers +x = JSON.parse('{"foo":5.5, "bar":5}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x).sort(); +assert.sameValue(props.length, 2); +assert.sameValue(props[0], "bar"); +assert.sameValue(props[1], "foo"); +assert.sameValue(x.foo, 5.5); +assert.sameValue(x.bar, 5); + +// keywords +x = JSON.parse('{"foo": true, "bar":false, "baz":null}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x).sort(); +assert.sameValue(props.length, 3); +assert.sameValue(props[0], "bar"); +assert.sameValue(props[1], "baz"); +assert.sameValue(props[2], "foo"); +assert.sameValue(x.foo, true); +assert.sameValue(x.bar, false); +assert.sameValue(x.baz, null); + +// short escapes +x = JSON.parse('{"foo": "\\"", "bar":"\\\\", "baz":"\\b","qux":"\\f", "quux":"\\n", "quuux":"\\r","quuuux":"\\t"}'); +props = Object.getOwnPropertyNames(x).sort(); +assert.sameValue(props.length, 7); +assert.sameValue(props[0], "bar"); +assert.sameValue(props[1], "baz"); +assert.sameValue(props[2], "foo"); +assert.sameValue(props[3], "quuuux"); +assert.sameValue(props[4], "quuux"); +assert.sameValue(props[5], "quux"); +assert.sameValue(props[6], "qux"); +assert.sameValue(x.foo, '"'); +assert.sameValue(x.bar, '\\'); +assert.sameValue(x.baz, '\b'); +assert.sameValue(x.qux, '\f'); +assert.sameValue(x.quux, "\n"); +assert.sameValue(x.quuux, "\r"); +assert.sameValue(x.quuuux, "\t"); + +// unicode escape +x = JSON.parse('{"foo":"hmm\\u006dmm"}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assert.sameValue(props.length, 1); +assert.sameValue(props[0], "foo"); +assert.sameValue("hmm\u006dmm", x.foo); + +x = JSON.parse('{"hmm\\u006dmm":"foo"}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assert.sameValue(props.length, 1); +assert.sameValue(props[0], "hmmmmm"); +assert.sameValue(x.hmm\u006dmm, "foo"); + +// miscellaneous +x = JSON.parse('{"JSON Test Pattern pass3": {"The outermost value": "must be an object or array.","In this test": "It is an object." }}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assert.sameValue(props.length, 1); +assert.sameValue(props[0], "JSON Test Pattern pass3"); +assertIsObject(x["JSON Test Pattern pass3"]); +props = Object.getOwnPropertyNames(x["JSON Test Pattern pass3"]).sort(); +assert.sameValue(props.length, 2); +assert.sameValue(props[0], "In this test"); +assert.sameValue(props[1], "The outermost value"); +assert.sameValue(x["JSON Test Pattern pass3"]["The outermost value"], + "must be an object or array."); +assert.sameValue(x["JSON Test Pattern pass3"]["In this test"], "It is an object."); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/regress-459293.js b/test/staging/sm/JSON/regress-459293.js new file mode 100644 index 0000000000..1938c09cd7 --- /dev/null +++ b/test/staging/sm/JSON/regress-459293.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 459293; +var summary = 'Allow redeclaration of JSON'; +var actual = ''; +var expect = ''; + + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval('var JSON = "foo";'); + } + catch(ex) + { + actual = ex + ''; + } + assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/JSON/small-codepoints.js b/test/staging/sm/JSON/small-codepoints.js new file mode 100644 index 0000000000..9a4e1ed06f --- /dev/null +++ b/test/staging/sm/JSON/small-codepoints.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'small-codepoints.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 554079; +var summary = 'JSON.parse should reject U+0000 through U+001F'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (var i = 0; i <= 0x1F; i++) + testJSON('["a' + String.fromCharCode(i) + 'c"]', true); diff --git a/test/staging/sm/JSON/stringify-boxed-primitives.js b/test/staging/sm/JSON/stringify-boxed-primitives.js new file mode 100644 index 0000000000..16d072a547 --- /dev/null +++ b/test/staging/sm/JSON/stringify-boxed-primitives.js @@ -0,0 +1,134 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-boxed-primitives.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Stringification of Boolean/String/Number objects"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function redefine(obj, prop, fun) +{ + var desc = + { value: fun, writable: true, configurable: true, enumerable: false }; + Object.defineProperty(obj, prop, desc); +} + +assert.sameValue(JSON.stringify(new Boolean(false)), "false"); + +assert.sameValue(JSON.stringify(new Number(5)), "5"); + +assert.sameValue(JSON.stringify(new String("foopy")), '"foopy"'); + + +var numToString = Number.prototype.toString; +var numValueOf = Number.prototype.valueOf; +var objToString = Object.prototype.toString; +var objValueOf = Object.prototype.valueOf; +var boolToString = Boolean.prototype.toString; +var boolValueOf = Boolean.prototype.valueOf; + +redefine(Boolean.prototype, "toString", function() { return 17; }); +assert.sameValue(JSON.stringify(new Boolean(false)), "false") +delete Boolean.prototype.toString; +assert.sameValue(JSON.stringify(new Boolean(false)), "false"); +delete Object.prototype.toString; +assert.sameValue(JSON.stringify(new Boolean(false)), "false"); +delete Boolean.prototype.valueOf; +assert.sameValue(JSON.stringify(new Boolean(false)), "false"); +delete Object.prototype.valueOf; +assert.sameValue(JSON.stringify(new Boolean(false)), "false"); + + +redefine(Boolean.prototype, "toString", boolToString); +redefine(Boolean.prototype, "valueOf", boolValueOf); +redefine(Object.prototype, "toString", objToString); +redefine(Object.prototype, "valueOf", objValueOf); + +redefine(Number.prototype, "toString", function() { return 42; }); +assert.sameValue(JSON.stringify(new Number(5)), "5"); +redefine(Number.prototype, "valueOf", function() { return 17; }); +assert.sameValue(JSON.stringify(new Number(5)), "17"); +delete Number.prototype.toString; +assert.sameValue(JSON.stringify(new Number(5)), "17"); +delete Number.prototype.valueOf; +assert.sameValue(JSON.stringify(new Number(5)), "null"); // isNaN(Number("[object Number]")) +delete Object.prototype.toString; +try +{ + JSON.stringify(new Number(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "ToNumber failure, should throw TypeError"); +} +delete Object.prototype.valueOf; +try +{ + JSON.stringify(new Number(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "ToNumber failure, should throw TypeError"); +} + + +redefine(Number.prototype, "toString", numToString); +redefine(Number.prototype, "valueOf", numValueOf); +redefine(Object.prototype, "toString", objToString); +redefine(Object.prototype, "valueOf", objValueOf); + + +redefine(String.prototype, "valueOf", function() { return 17; }); +assert.sameValue(JSON.stringify(new String(5)), '"5"'); +redefine(String.prototype, "toString", function() { return 42; }); +assert.sameValue(JSON.stringify(new String(5)), '"42"'); +delete String.prototype.toString; +assert.sameValue(JSON.stringify(new String(5)), '"[object String]"'); +delete Object.prototype.toString; +assert.sameValue(JSON.stringify(new String(5)), '"17"'); +delete String.prototype.valueOf; +try +{ + JSON.stringify(new String(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "ToString failure, should throw TypeError"); +} +delete Object.prototype.valueOf; +try +{ + JSON.stringify(new String(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "ToString failure, should throw TypeError"); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/JSON/stringify-call-replacer-once.js b/test/staging/sm/JSON/stringify-call-replacer-once.js new file mode 100644 index 0000000000..b9a25dfedc --- /dev/null +++ b/test/staging/sm/JSON/stringify-call-replacer-once.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-call-replacer-once.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Call replacer function exactly once per value"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var factor = 1; +function replacer(k, v) +{ + if (k === "") + return v; + + return v * ++factor; +} + +var obj = { a: 1, b: 2, c: 3 }; + +assert.sameValue(JSON.stringify(obj, replacer), '{"a":2,"b":6,"c":12}'); +assert.sameValue(factor, 4); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-call-toJSON-once.js b/test/staging/sm/JSON/stringify-call-toJSON-once.js new file mode 100644 index 0000000000..46efad8f13 --- /dev/null +++ b/test/staging/sm/JSON/stringify-call-toJSON-once.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-call-toJSON-once.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Stringification of Boolean/String/Number objects"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + p: { + toJSON: function() + { + return { toJSON: function() { return 17; } }; + } + } + }; + +assert.sameValue(JSON.stringify(obj), '{"p":{}}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-dropping-elements.js b/test/staging/sm/JSON/stringify-dropping-elements.js new file mode 100644 index 0000000000..f5687a521b --- /dev/null +++ b/test/staging/sm/JSON/stringify-dropping-elements.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(JSON.stringify({foo: 123}), + '{"foo":123}'); +assert.sameValue(JSON.stringify({foo: 123, bar: function () {}}), + '{"foo":123}'); +assert.sameValue(JSON.stringify({foo: 123, bar: function () {}, baz: 123}), + '{"foo":123,"baz":123}'); + +assert.sameValue(JSON.stringify([123]), + '[123]'); +assert.sameValue(JSON.stringify([123, function () {}]), + '[123,null]'); +assert.sameValue(JSON.stringify([123, function () {}, 456]), + '[123,null,456]'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-gap.js b/test/staging/sm/JSON/stringify-gap.js new file mode 100644 index 0000000000..8f16401b97 --- /dev/null +++ b/test/staging/sm/JSON/stringify-gap.js @@ -0,0 +1,68 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-gap.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = + "JSON.stringify(_1, _2, numberGreaterThanOne) produces wrong output"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var LF = "\n"; +var GAP = " "; + +var obj = { a: { b: [1, 2], c: { d: 3, e: 4 }, f: [], g: {}, h: [5], i: { j: 6 } } }; + +var expected = + '{\n' + + ' "a": {\n' + + ' "b": [\n' + + ' 1,\n' + + ' 2\n' + + ' ],\n' + + ' "c": {\n' + + ' "d": 3,\n' + + ' "e": 4\n' + + ' },\n' + + ' "f": [],\n' + + ' "g": {},\n' + + ' "h": [\n' + + ' 5\n' + + ' ],\n' + + ' "i": {\n' + + ' "j": 6\n' + + ' }\n' + + ' }\n' + + '}'; + +assert.sameValue(JSON.stringify(obj, null, 3), expected); +assert.sameValue(JSON.stringify(obj, null, " "), expected); + +obj = [1, 2, 3]; + +String.prototype.toString = function() { return "--"; }; + +assert.sameValue(JSON.stringify(obj, null, new String(" ")), "[\n--1,\n--2,\n--3\n]"); + +Number.prototype.valueOf = function() { return 0; }; + +assert.sameValue(JSON.stringify(obj, null, new Number(3)), "[1,2,3]"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/JSON/stringify-ignore-noncallable-toJSON.js b/test/staging/sm/JSON/stringify-ignore-noncallable-toJSON.js new file mode 100644 index 0000000000..d7f4f23dba --- /dev/null +++ b/test/staging/sm/JSON/stringify-ignore-noncallable-toJSON.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-ignore-noncallable-toJSON.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "If the toJSON property isn't callable, don't try to call it"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + p: { toJSON: null }, + m: { toJSON: {} } + }; + +assert.sameValue(JSON.stringify(obj), '{"p":{"toJSON":null},"m":{"toJSON":{}}}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-large-replacer-array.js b/test/staging/sm/JSON/stringify-large-replacer-array.js new file mode 100644 index 0000000000..040a0794d2 --- /dev/null +++ b/test/staging/sm/JSON/stringify-large-replacer-array.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-large-replacer-array.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 816033; +var summary = "JSON.stringify with a large replacer array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var replacer = []; +for (var i = 0; i < 4096; i++) + replacer.push(i); + +assert.sameValue(JSON.stringify({ "foopy": "FAIL", "4093": 17 }, replacer), '{"4093":17}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-missing-arguments.js b/test/staging/sm/JSON/stringify-missing-arguments.js new file mode 100644 index 0000000000..e6521962cf --- /dev/null +++ b/test/staging/sm/JSON/stringify-missing-arguments.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-missing-arguments.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = "JSON.stringify with no arguments"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(JSON.stringify(), undefined); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/JSON/stringify-nonarray-noncallable-replacer.js b/test/staging/sm/JSON/stringify-nonarray-noncallable-replacer.js new file mode 100644 index 0000000000..ff1f637b39 --- /dev/null +++ b/test/staging/sm/JSON/stringify-nonarray-noncallable-replacer.js @@ -0,0 +1,48 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-nonarray-noncallable-replacer.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 653782; +var summary = + "Treat non-array, non-callable replacers as if none had been specified"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = { p: 2 }; +var str = '{"p":2}'; + +assert.sameValue(JSON.stringify(obj), str); +assert.sameValue(JSON.stringify(obj, ["p"]), str); +assert.sameValue(JSON.stringify(obj, null), str); +assert.sameValue(JSON.stringify(obj, undefined), str); +assert.sameValue(JSON.stringify(obj, 2), str); +assert.sameValue(JSON.stringify(obj, Math.PI), str); +assert.sameValue(JSON.stringify(obj, NaN), str); +assert.sameValue(JSON.stringify(obj, true), str); +assert.sameValue(JSON.stringify(obj, false), str); +assert.sameValue(JSON.stringify(obj, Infinity), str); +assert.sameValue(JSON.stringify(obj, "foopy"), str); +assert.sameValue(JSON.stringify(obj, {}), str); +assert.sameValue(JSON.stringify(obj, /abcd/), str); +assert.sameValue(JSON.stringify(obj, new Boolean(true)), str); +assert.sameValue(JSON.stringify(obj, new Number(42)), str); +assert.sameValue(JSON.stringify(obj, new String("aequorin")), str); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-primitives.js b/test/staging/sm/JSON/stringify-primitives.js new file mode 100644 index 0000000000..805e0f97e1 --- /dev/null +++ b/test/staging/sm/JSON/stringify-primitives.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// sanity +var x = JSON.stringify({}); +assert.sameValue(x, "{}"); + +// booleans and null +x = JSON.stringify(true); +assert.sameValue(x, "true"); + +x = JSON.stringify(false); +assert.sameValue(x, "false"); + +x = JSON.stringify(new Boolean(false)); +assert.sameValue(x, "false"); + +x = JSON.stringify(null); +assert.sameValue(x, "null"); + +x = JSON.stringify(1234); +assert.sameValue(x, "1234"); + +x = JSON.stringify(new Number(1234)); +assert.sameValue(x, "1234"); + +x = JSON.stringify("asdf"); +assert.sameValue(x, '"asdf"'); + +x = JSON.stringify(new String("asdf")); +assert.sameValue(x, '"asdf"'); + +assert.sameValue(JSON.stringify(undefined), undefined); +assert.sameValue(JSON.stringify(function(){}), undefined); +assert.sameValue(JSON.stringify(JSON.stringify), undefined); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer-array-boxed-elements.js b/test/staging/sm/JSON/stringify-replacer-array-boxed-elements.js new file mode 100644 index 0000000000..20d8370cf3 --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer-array-boxed-elements.js @@ -0,0 +1,67 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-replacer-array-boxed-elements.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = "Boxed-string/number objects in replacer arrays"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var S = new String(3); +var N = new Number(4); + +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"3":3}'); +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"4":4}'); + +Number.prototype.toString = function() { return 3; }; +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"3":3}'); + +String.prototype.toString = function() { return 4; }; +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"4":4}'); + +Number.prototype.toString = function() { return new String(42); }; +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"4":4}'); + +String.prototype.toString = function() { return new Number(17); }; +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"3":3}'); + +Number.prototype.toString = null; +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"4":4}'); + +String.prototype.toString = null; +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"3":3}'); + +Number.prototype.valueOf = function() { return 17; }; +assert.sameValue(JSON.stringify({ 4: 4, 17: 17 }, [N]), + '{"17":17}'); + +String.prototype.valueOf = function() { return 42; }; +assert.sameValue(JSON.stringify({ 3: 3, 42: 42 }, [S]), + '{"42":42}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer-array-duplicated-element.js b/test/staging/sm/JSON/stringify-replacer-array-duplicated-element.js new file mode 100644 index 0000000000..3e181de30a --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer-array-duplicated-element.js @@ -0,0 +1,76 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-replacer-array-hijinks.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var bigOdd = Math.pow(2, 50) + 1; + +function two() +{ + return Math.random() < 0.5 ? 2 : "2"; +} + +assert.sameValue(JSON.stringify({ 1: 1 }, [1, 1]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [1, "1"]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [1, bigOdd % two()]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, ["1", 1]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, ["1", "1"]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, ["1", bigOdd % two()]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [bigOdd % two(), 1]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [bigOdd % two(), "1"]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [bigOdd % two(), bigOdd % two()]), '{"1":1}'); + + +assert.sameValue(JSON.stringify({ 1: 1 }, [1, new String(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [1, new Number(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, ["1", new Number(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, ["1", new String(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [bigOdd % two(), new Number(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [bigOdd % two(), new String(1)]), '{"1":1}'); + + +assert.sameValue(JSON.stringify({ 1: 1 }, [new String(1), new String(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [new String(1), new Number(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [new Number(1), new String(1)]), '{"1":1}'); + +assert.sameValue(JSON.stringify({ 1: 1 }, [new Number(1), new Number(1)]), '{"1":1}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer-array-edgecase-jsid-elements.js b/test/staging/sm/JSON/stringify-replacer-array-edgecase-jsid-elements.js new file mode 100644 index 0000000000..ecab508dac --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer-array-edgecase-jsid-elements.js @@ -0,0 +1,84 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-replacer-array-edgecase-jsid-elements.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* JSID_INT_MIN/MAX copied from jsapi.h. */ + +var obj = + { + /* [JSID_INT_MIN - 1, JSID_INT_MIN + 1] */ + "-1073741825": -1073741825, + "-1073741824": -1073741824, + "-1073741823": -1073741823, + + "-2.5": -2.5, + "-1": -1, + + 0: 0, + + 1: 1, + 2.5: 2.5, + + /* [JSID_INT_MAX - 1, JSID_INT_MAX + 1] */ + 1073741822: 1073741822, + 1073741823: 1073741823, + 1073741824: 1073741824, + }; + +for (var s in obj) +{ + var n = obj[s]; + assert.sameValue(+s, n); + assert.sameValue(JSON.stringify(obj, [n]), + '{"' + s + '":' + n + '}', + "Failed to stringify numeric property " + n + "correctly"); + assert.sameValue(JSON.stringify(obj, [s]), + '{"' + s + '":' + n + '}', + "Failed to stringify string property " + n + "correctly"); + assert.sameValue(JSON.stringify(obj, [s, ]), + '{"' + s + '":' + n + '}', + "Failed to stringify string then number properties ('" + s + "', " + n + ") correctly"); + assert.sameValue(JSON.stringify(obj, [n, s]), + '{"' + s + '":' + n + '}', + "Failed to stringify number then string properties (" + n + ", '" + s + "') correctly"); +} + +// -0 is tricky, because ToString(-0) === "0", so test it specially. +assert.sameValue(JSON.stringify({ "-0": 17, 0: 42 }, [-0]), + '{"0":42}', + "Failed to stringify numeric property -0 correctly"); +assert.sameValue(JSON.stringify({ "-0": 17, 0: 42 }, ["-0"]), + '{"-0":17}', + "Failed to stringify string property -0 correctly"); +assert.sameValue(JSON.stringify({ "-0": 17, 0: 42 }, ["-0", -0]), + '{"-0":17,"0":42}', + "Failed to stringify string then number properties ('-0', -0) correctly"); +assert.sameValue(JSON.stringify({ "-0": 17, 0: 42 }, [-0, "-0"]), + '{"0":42,"-0":17}', + "Failed to stringify number then string properties (-0, '-0) correctly"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer-array-hijinks.js b/test/staging/sm/JSON/stringify-replacer-array-hijinks.js new file mode 100644 index 0000000000..d77a8f9e40 --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer-array-hijinks.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-replacer-array-hijinks.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var replacer = [0, 1, 2, 3]; +Object.prototype[3] = 3; +Object.defineProperty(replacer, 1, { + get: function() + { + Object.defineProperty(replacer, 4, { value: 4 }); + delete replacer[2]; + delete replacer[3]; + replacer[5] = 5; + return 1; + } +}); + +var s = + JSON.stringify({0: { 1: { 3: { 4: { 5: { 2: "omitted" } } } } } }, replacer); + +// The replacer array's length is as seen on first query, so property names are +// accumulated for indexes i ∈ {0, 1, 2, 3}, but index 1 deletes 2 and 3, so 2 +// isn't seen but 3 is seen as Object.prototype[3]. +assert.sameValue('{"0":{"1":{"3":{"3":3}},"3":3},"3":3}', s); + + +var replacer = [0, 1, 2, 3]; +Object.defineProperty(replacer, 0, { + get: function() + { + replacer.length = 0; + return {}; + } +}); + +// The replacer.length truncation means only properties on the prototype chain +// shine through, but it doesn't affect the original bounds of the iteration +// used to determine property names which will be included in the final string. +assert.sameValue(JSON.stringify({ 0: 0, 1: 1, 2: 2, 3: 3 }, replacer), + '{"3":3}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer-array-skipped-element.js b/test/staging/sm/JSON/stringify-replacer-array-skipped-element.js new file mode 100644 index 0000000000..61ebe8c7aa --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer-array-skipped-element.js @@ -0,0 +1,69 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-replacer-array-skipped-element.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(JSON.stringify({ 3: 3, 4: 4 }, + ["3", { toString: function() { return "4" } }]), + '{"3":3}'); + +assert.sameValue(JSON.stringify({ 3: 3, true: 4 }, ["3", true]), + '{"3":3}'); + +assert.sameValue(JSON.stringify({ 3: 3, true: 4 }, ["3", "true", true]), + '{"3":3,"true":4}'); + +assert.sameValue(JSON.stringify({ 3: 3, true: 4 }, ["3", true, "true"]), + '{"3":3,"true":4}'); + +assert.sameValue(JSON.stringify({ 3: 3, false: 4 }, ["3", false]), + '{"3":3}'); + +assert.sameValue(JSON.stringify({ 3: 3, false: 4 }, ["3", "false", false]), + '{"3":3,"false":4}'); + +assert.sameValue(JSON.stringify({ 3: 3, false: 4 }, ["3", false, "false"]), + '{"3":3,"false":4}'); + +assert.sameValue(JSON.stringify({ 3: 3, undefined: 4 }, ["3", undefined]), + '{"3":3}'); + +assert.sameValue(JSON.stringify({ 3: 3, undefined: 4 }, ["3", "undefined", undefined]), + '{"3":3,"undefined":4}'); + +assert.sameValue(JSON.stringify({ 3: 3, undefined: 4 }, ["3", undefined, "undefined"]), + '{"3":3,"undefined":4}'); + +assert.sameValue(JSON.stringify({ 3: 3, null: 4 }, ["3", null]), + '{"3":3}'); + +assert.sameValue(JSON.stringify({ 3: 3, null: 4 }, ["3", "null", null]), + '{"3":3,"null":4}'); + +assert.sameValue(JSON.stringify({ 3: 3, null: 4 }, ["3", null, "null"]), + '{"3":3,"null":4}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer-array-trailing-holes.js b/test/staging/sm/JSON/stringify-replacer-array-trailing-holes.js new file mode 100644 index 0000000000..a37c7f20c2 --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer-array-trailing-holes.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "stringify-replacer-array-trailing-holes.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1217069; +var summary = + "Better/more correct handling for replacer arrays with trailing holes " + + "through which inherited elements might appear"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = { 0: "hi", 1: "n-nao", 2: "run away!", 3: "bye" }; + +var s; + +var replacer = [0, /* 1 */, /* 2 */, /* 3 */, ]; + +assert.sameValue(JSON.stringify(obj, replacer), + '{"0":"hi"}'); + +var nobj = new Number(0); +nobj.toString = () => { replacer[1] = 1; return 0; }; +replacer[0] = nobj; + +assert.sameValue(JSON.stringify(obj, replacer), + '{"0":"hi","1":"n-nao"}'); + +delete replacer[1]; +replacer[0] = 0; + +Object.prototype[0] = 0; +Object.prototype[1] = 1; +Object.prototype[2] = 2; +Object.prototype[3] = 3; + +assert.sameValue(JSON.stringify(obj, replacer), + '{"0":"hi","1":"n-nao","2":"run away!","3":"bye"}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer-with-array-indexes.js b/test/staging/sm/JSON/stringify-replacer-with-array-indexes.js new file mode 100644 index 0000000000..4eb939a51e --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer-with-array-indexes.js @@ -0,0 +1,63 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-replacer-with-array-indexes.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = + "Call the replacer function for array elements with stringified indexes"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = [0, 1, 2, 3, 4]; + +var seenTopmost = false; +var index = 0; +function replacer() +{ + assert.sameValue(arguments.length, 2); + + var key = arguments[0], value = arguments[1]; + + // Topmost array: ignore replacer call. + if (key === "") + { + assert.sameValue(seenTopmost, false); + seenTopmost = true; + return value; + } + + assert.sameValue(seenTopmost, true); + + assert.sameValue(typeof key, "string"); + assert.sameValue(key === index, false); + assert.sameValue(key === index + "", true); + + assert.sameValue(value, index); + + index++; + + assert.sameValue(this, arr); + + return value; +} + +assert.sameValue(JSON.stringify(arr, replacer), '[0,1,2,3,4]'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-replacer.js b/test/staging/sm/JSON/stringify-replacer.js new file mode 100644 index 0000000000..80ad14610a --- /dev/null +++ b/test/staging/sm/JSON/stringify-replacer.js @@ -0,0 +1,163 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/** + * These return* functions are used by the + * replacer tests taken from bug 512447 + */ +function returnObjectFor1(k, v) +{ + if (k == "1") + return {}; + return v; +} +function returnArrayFor1(k, v) +{ + if (k == "1") + return []; + return v; +} +function returnNullFor1(k, v) +{ + if (k == "1") + return null; + return v; +} +function returnStringForUndefined(k, v) +{ + if (v === undefined) + return "undefined value"; + return v; +} +var cycleObject = {}; cycleObject.cycle = cycleObject; +function returnCycleObjectFor1(k, v) +{ + if (k == "1") + return cycleObject; + return v; +} +var array = [0, 1, 2]; array[3] = array; +function returnCycleArrayFor1(k, v) +{ + if (k == "1") + return array; + return v; +} + +// BEGIN TEST +var x; + +x = JSON.stringify({ key: 2 }, + function(k,v) { return k ? undefined : v; }); +assert.sameValue(x, "{}"); + +x = JSON.stringify(["hmm", "hmm"], + function(k,v) { return k !== "" ? undefined : v; }); +assert.sameValue(x, "[null,null]"); + +var foo = ["hmm"]; +function censor(k, v) +{ + if (v !== foo) + return "XXX"; + return v; +} +x = JSON.stringify(foo, censor); +assert.sameValue(x, '["XXX"]'); + +foo = ["bar", ["baz"], "qux"]; +x = JSON.stringify(foo, censor); +assert.sameValue(x, '["XXX","XXX","XXX"]'); + +function censor2(k, v) +{ + if (typeof(v) == "string") + return "XXX"; + return v; +} + +foo = ["bar", ["baz"], "qux"]; +x = JSON.stringify(foo, censor2); +assert.sameValue(x, '["XXX",["XXX"],"XXX"]'); + +foo = { bar: 42, qux: 42, quux: 42 }; +x = JSON.stringify(foo, ["bar"]); +assert.sameValue(x, '{"bar":42}'); + +foo = {bar: {bar: 42, schmoo:[]}, qux: 42, quux: 42}; +x = JSON.stringify(foo, ["bar", "schmoo"]); +assert.sameValue(x, '{"bar":{"bar":42,"schmoo":[]}}'); + +x = JSON.stringify(foo, null, ""); +assert.sameValue(x, '{"bar":{"bar":42,"schmoo":[]},"qux":42,"quux":42}'); + +x = JSON.stringify(foo, null, " "); +assert.sameValue(x, '{\n "bar": {\n "bar": 42,\n "schmoo": []\n },\n "qux": 42,\n "quux": 42\n}'); + +foo = {bar:{bar:{}}} +x = JSON.stringify(foo, null, " "); +assert.sameValue(x, '{\n "bar": {\n "bar": {}\n }\n}'); + +x = JSON.stringify({ x: 1, arr: [1] }, + function (k,v) { return typeof v === 'number' ? 3 : v; }); +assert.sameValue(x, '{"x":3,"arr":[3]}'); + +foo = ['e']; +x = JSON.stringify(foo, null, '\t'); +assert.sameValue(x, '[\n\t"e"\n]'); + +foo = {0:0, 1:1, 2:2, 3:undefined}; +x = JSON.stringify(foo, returnObjectFor1); +assert.sameValue(x, '{"0":0,"1":{},"2":2}'); + +x = JSON.stringify(foo, returnArrayFor1); +assert.sameValue(x, '{"0":0,"1":[],"2":2}'); + +x = JSON.stringify(foo, returnNullFor1); +assert.sameValue(x, '{"0":0,"1":null,"2":2}'); + +x = JSON.stringify(foo, returnStringForUndefined); +assert.sameValue(x, '{"0":0,"1":1,"2":2,"3":"undefined value"}'); + +try +{ + JSON.stringify(foo, returnCycleObjectFor1); + throw new Error("no error thrown"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "no TypeError thrown: " + e); +} + +try +{ + JSON.stringify(foo, returnCycleArrayFor1); + throw new Error("no error thrown"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "no TypeError thrown: " + e); +} + +foo = [0, 1, 2, undefined]; +try +{ + JSON.stringify(foo, returnCycleObjectFor1); + throw new Error("no error thrown"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "no TypeError thrown: " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-special-escapes.js b/test/staging/sm/JSON/stringify-special-escapes.js new file mode 100644 index 0000000000..4f4c091c2d --- /dev/null +++ b/test/staging/sm/JSON/stringify-special-escapes.js @@ -0,0 +1,284 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-special-escapes.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 512266; +var summary = + "JSON.stringify of \\b\\f\\n\\r\\t should use one-character escapes, not hex"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(JSON.stringify("\u0000"), '"\\u0000"'); +assert.sameValue(JSON.stringify("\u0001"), '"\\u0001"'); +assert.sameValue(JSON.stringify("\u0002"), '"\\u0002"'); +assert.sameValue(JSON.stringify("\u0003"), '"\\u0003"'); +assert.sameValue(JSON.stringify("\u0004"), '"\\u0004"'); +assert.sameValue(JSON.stringify("\u0005"), '"\\u0005"'); +assert.sameValue(JSON.stringify("\u0006"), '"\\u0006"'); +assert.sameValue(JSON.stringify("\u0007"), '"\\u0007"'); +assert.sameValue(JSON.stringify("\u0008"), '"\\b"'); +assert.sameValue(JSON.stringify("\u0009"), '"\\t"'); +assert.sameValue(JSON.stringify("\u000A"), '"\\n"'); +assert.sameValue(JSON.stringify("\u000B"), '"\\u000b"'); +assert.sameValue(JSON.stringify("\u000C"), '"\\f"'); +assert.sameValue(JSON.stringify("\u000D"), '"\\r"'); +assert.sameValue(JSON.stringify("\u000E"), '"\\u000e"'); +assert.sameValue(JSON.stringify("\u000F"), '"\\u000f"'); +assert.sameValue(JSON.stringify("\u0010"), '"\\u0010"'); +assert.sameValue(JSON.stringify("\u0011"), '"\\u0011"'); +assert.sameValue(JSON.stringify("\u0012"), '"\\u0012"'); +assert.sameValue(JSON.stringify("\u0013"), '"\\u0013"'); +assert.sameValue(JSON.stringify("\u0014"), '"\\u0014"'); +assert.sameValue(JSON.stringify("\u0015"), '"\\u0015"'); +assert.sameValue(JSON.stringify("\u0016"), '"\\u0016"'); +assert.sameValue(JSON.stringify("\u0017"), '"\\u0017"'); +assert.sameValue(JSON.stringify("\u0018"), '"\\u0018"'); +assert.sameValue(JSON.stringify("\u0019"), '"\\u0019"'); +assert.sameValue(JSON.stringify("\u001A"), '"\\u001a"'); +assert.sameValue(JSON.stringify("\u001B"), '"\\u001b"'); +assert.sameValue(JSON.stringify("\u001C"), '"\\u001c"'); +assert.sameValue(JSON.stringify("\u001D"), '"\\u001d"'); +assert.sameValue(JSON.stringify("\u001E"), '"\\u001e"'); +assert.sameValue(JSON.stringify("\u001F"), '"\\u001f"'); +assert.sameValue(JSON.stringify("\u0020"), '" "'); + +assert.sameValue(JSON.stringify("\\u0000"), '"\\\\u0000"'); +assert.sameValue(JSON.stringify("\\u0001"), '"\\\\u0001"'); +assert.sameValue(JSON.stringify("\\u0002"), '"\\\\u0002"'); +assert.sameValue(JSON.stringify("\\u0003"), '"\\\\u0003"'); +assert.sameValue(JSON.stringify("\\u0004"), '"\\\\u0004"'); +assert.sameValue(JSON.stringify("\\u0005"), '"\\\\u0005"'); +assert.sameValue(JSON.stringify("\\u0006"), '"\\\\u0006"'); +assert.sameValue(JSON.stringify("\\u0007"), '"\\\\u0007"'); +assert.sameValue(JSON.stringify("\\u0008"), '"\\\\u0008"'); +assert.sameValue(JSON.stringify("\\u0009"), '"\\\\u0009"'); +assert.sameValue(JSON.stringify("\\u000A"), '"\\\\u000A"'); +assert.sameValue(JSON.stringify("\\u000B"), '"\\\\u000B"'); +assert.sameValue(JSON.stringify("\\u000C"), '"\\\\u000C"'); +assert.sameValue(JSON.stringify("\\u000D"), '"\\\\u000D"'); +assert.sameValue(JSON.stringify("\\u000E"), '"\\\\u000E"'); +assert.sameValue(JSON.stringify("\\u000F"), '"\\\\u000F"'); +assert.sameValue(JSON.stringify("\\u0010"), '"\\\\u0010"'); +assert.sameValue(JSON.stringify("\\u0011"), '"\\\\u0011"'); +assert.sameValue(JSON.stringify("\\u0012"), '"\\\\u0012"'); +assert.sameValue(JSON.stringify("\\u0013"), '"\\\\u0013"'); +assert.sameValue(JSON.stringify("\\u0014"), '"\\\\u0014"'); +assert.sameValue(JSON.stringify("\\u0015"), '"\\\\u0015"'); +assert.sameValue(JSON.stringify("\\u0016"), '"\\\\u0016"'); +assert.sameValue(JSON.stringify("\\u0017"), '"\\\\u0017"'); +assert.sameValue(JSON.stringify("\\u0018"), '"\\\\u0018"'); +assert.sameValue(JSON.stringify("\\u0019"), '"\\\\u0019"'); +assert.sameValue(JSON.stringify("\\u001A"), '"\\\\u001A"'); +assert.sameValue(JSON.stringify("\\u001B"), '"\\\\u001B"'); +assert.sameValue(JSON.stringify("\\u001C"), '"\\\\u001C"'); +assert.sameValue(JSON.stringify("\\u001D"), '"\\\\u001D"'); +assert.sameValue(JSON.stringify("\\u001E"), '"\\\\u001E"'); +assert.sameValue(JSON.stringify("\\u001F"), '"\\\\u001F"'); +assert.sameValue(JSON.stringify("\\u0020"), '"\\\\u0020"'); + + +assert.sameValue(JSON.stringify("a\u0000"), '"a\\u0000"'); +assert.sameValue(JSON.stringify("a\u0001"), '"a\\u0001"'); +assert.sameValue(JSON.stringify("a\u0002"), '"a\\u0002"'); +assert.sameValue(JSON.stringify("a\u0003"), '"a\\u0003"'); +assert.sameValue(JSON.stringify("a\u0004"), '"a\\u0004"'); +assert.sameValue(JSON.stringify("a\u0005"), '"a\\u0005"'); +assert.sameValue(JSON.stringify("a\u0006"), '"a\\u0006"'); +assert.sameValue(JSON.stringify("a\u0007"), '"a\\u0007"'); +assert.sameValue(JSON.stringify("a\u0008"), '"a\\b"'); +assert.sameValue(JSON.stringify("a\u0009"), '"a\\t"'); +assert.sameValue(JSON.stringify("a\u000A"), '"a\\n"'); +assert.sameValue(JSON.stringify("a\u000B"), '"a\\u000b"'); +assert.sameValue(JSON.stringify("a\u000C"), '"a\\f"'); +assert.sameValue(JSON.stringify("a\u000D"), '"a\\r"'); +assert.sameValue(JSON.stringify("a\u000E"), '"a\\u000e"'); +assert.sameValue(JSON.stringify("a\u000F"), '"a\\u000f"'); +assert.sameValue(JSON.stringify("a\u0010"), '"a\\u0010"'); +assert.sameValue(JSON.stringify("a\u0011"), '"a\\u0011"'); +assert.sameValue(JSON.stringify("a\u0012"), '"a\\u0012"'); +assert.sameValue(JSON.stringify("a\u0013"), '"a\\u0013"'); +assert.sameValue(JSON.stringify("a\u0014"), '"a\\u0014"'); +assert.sameValue(JSON.stringify("a\u0015"), '"a\\u0015"'); +assert.sameValue(JSON.stringify("a\u0016"), '"a\\u0016"'); +assert.sameValue(JSON.stringify("a\u0017"), '"a\\u0017"'); +assert.sameValue(JSON.stringify("a\u0018"), '"a\\u0018"'); +assert.sameValue(JSON.stringify("a\u0019"), '"a\\u0019"'); +assert.sameValue(JSON.stringify("a\u001A"), '"a\\u001a"'); +assert.sameValue(JSON.stringify("a\u001B"), '"a\\u001b"'); +assert.sameValue(JSON.stringify("a\u001C"), '"a\\u001c"'); +assert.sameValue(JSON.stringify("a\u001D"), '"a\\u001d"'); +assert.sameValue(JSON.stringify("a\u001E"), '"a\\u001e"'); +assert.sameValue(JSON.stringify("a\u001F"), '"a\\u001f"'); +assert.sameValue(JSON.stringify("a\u0020"), '"a "'); + +assert.sameValue(JSON.stringify("a\\u0000"), '"a\\\\u0000"'); +assert.sameValue(JSON.stringify("a\\u0001"), '"a\\\\u0001"'); +assert.sameValue(JSON.stringify("a\\u0002"), '"a\\\\u0002"'); +assert.sameValue(JSON.stringify("a\\u0003"), '"a\\\\u0003"'); +assert.sameValue(JSON.stringify("a\\u0004"), '"a\\\\u0004"'); +assert.sameValue(JSON.stringify("a\\u0005"), '"a\\\\u0005"'); +assert.sameValue(JSON.stringify("a\\u0006"), '"a\\\\u0006"'); +assert.sameValue(JSON.stringify("a\\u0007"), '"a\\\\u0007"'); +assert.sameValue(JSON.stringify("a\\u0008"), '"a\\\\u0008"'); +assert.sameValue(JSON.stringify("a\\u0009"), '"a\\\\u0009"'); +assert.sameValue(JSON.stringify("a\\u000A"), '"a\\\\u000A"'); +assert.sameValue(JSON.stringify("a\\u000B"), '"a\\\\u000B"'); +assert.sameValue(JSON.stringify("a\\u000C"), '"a\\\\u000C"'); +assert.sameValue(JSON.stringify("a\\u000D"), '"a\\\\u000D"'); +assert.sameValue(JSON.stringify("a\\u000E"), '"a\\\\u000E"'); +assert.sameValue(JSON.stringify("a\\u000F"), '"a\\\\u000F"'); +assert.sameValue(JSON.stringify("a\\u0010"), '"a\\\\u0010"'); +assert.sameValue(JSON.stringify("a\\u0011"), '"a\\\\u0011"'); +assert.sameValue(JSON.stringify("a\\u0012"), '"a\\\\u0012"'); +assert.sameValue(JSON.stringify("a\\u0013"), '"a\\\\u0013"'); +assert.sameValue(JSON.stringify("a\\u0014"), '"a\\\\u0014"'); +assert.sameValue(JSON.stringify("a\\u0015"), '"a\\\\u0015"'); +assert.sameValue(JSON.stringify("a\\u0016"), '"a\\\\u0016"'); +assert.sameValue(JSON.stringify("a\\u0017"), '"a\\\\u0017"'); +assert.sameValue(JSON.stringify("a\\u0018"), '"a\\\\u0018"'); +assert.sameValue(JSON.stringify("a\\u0019"), '"a\\\\u0019"'); +assert.sameValue(JSON.stringify("a\\u001A"), '"a\\\\u001A"'); +assert.sameValue(JSON.stringify("a\\u001B"), '"a\\\\u001B"'); +assert.sameValue(JSON.stringify("a\\u001C"), '"a\\\\u001C"'); +assert.sameValue(JSON.stringify("a\\u001D"), '"a\\\\u001D"'); +assert.sameValue(JSON.stringify("a\\u001E"), '"a\\\\u001E"'); +assert.sameValue(JSON.stringify("a\\u001F"), '"a\\\\u001F"'); +assert.sameValue(JSON.stringify("a\\u0020"), '"a\\\\u0020"'); + + +assert.sameValue(JSON.stringify("\u0000Q"), '"\\u0000Q"'); +assert.sameValue(JSON.stringify("\u0001Q"), '"\\u0001Q"'); +assert.sameValue(JSON.stringify("\u0002Q"), '"\\u0002Q"'); +assert.sameValue(JSON.stringify("\u0003Q"), '"\\u0003Q"'); +assert.sameValue(JSON.stringify("\u0004Q"), '"\\u0004Q"'); +assert.sameValue(JSON.stringify("\u0005Q"), '"\\u0005Q"'); +assert.sameValue(JSON.stringify("\u0006Q"), '"\\u0006Q"'); +assert.sameValue(JSON.stringify("\u0007Q"), '"\\u0007Q"'); +assert.sameValue(JSON.stringify("\u0008Q"), '"\\bQ"'); +assert.sameValue(JSON.stringify("\u0009Q"), '"\\tQ"'); +assert.sameValue(JSON.stringify("\u000AQ"), '"\\nQ"'); +assert.sameValue(JSON.stringify("\u000BQ"), '"\\u000bQ"'); +assert.sameValue(JSON.stringify("\u000CQ"), '"\\fQ"'); +assert.sameValue(JSON.stringify("\u000DQ"), '"\\rQ"'); +assert.sameValue(JSON.stringify("\u000EQ"), '"\\u000eQ"'); +assert.sameValue(JSON.stringify("\u000FQ"), '"\\u000fQ"'); +assert.sameValue(JSON.stringify("\u0010Q"), '"\\u0010Q"'); +assert.sameValue(JSON.stringify("\u0011Q"), '"\\u0011Q"'); +assert.sameValue(JSON.stringify("\u0012Q"), '"\\u0012Q"'); +assert.sameValue(JSON.stringify("\u0013Q"), '"\\u0013Q"'); +assert.sameValue(JSON.stringify("\u0014Q"), '"\\u0014Q"'); +assert.sameValue(JSON.stringify("\u0015Q"), '"\\u0015Q"'); +assert.sameValue(JSON.stringify("\u0016Q"), '"\\u0016Q"'); +assert.sameValue(JSON.stringify("\u0017Q"), '"\\u0017Q"'); +assert.sameValue(JSON.stringify("\u0018Q"), '"\\u0018Q"'); +assert.sameValue(JSON.stringify("\u0019Q"), '"\\u0019Q"'); +assert.sameValue(JSON.stringify("\u001AQ"), '"\\u001aQ"'); +assert.sameValue(JSON.stringify("\u001BQ"), '"\\u001bQ"'); +assert.sameValue(JSON.stringify("\u001CQ"), '"\\u001cQ"'); +assert.sameValue(JSON.stringify("\u001DQ"), '"\\u001dQ"'); +assert.sameValue(JSON.stringify("\u001EQ"), '"\\u001eQ"'); +assert.sameValue(JSON.stringify("\u001FQ"), '"\\u001fQ"'); +assert.sameValue(JSON.stringify("\u0020Q"), '" Q"'); + +assert.sameValue(JSON.stringify("\\u0000Q"), '"\\\\u0000Q"'); +assert.sameValue(JSON.stringify("\\u0001Q"), '"\\\\u0001Q"'); +assert.sameValue(JSON.stringify("\\u0002Q"), '"\\\\u0002Q"'); +assert.sameValue(JSON.stringify("\\u0003Q"), '"\\\\u0003Q"'); +assert.sameValue(JSON.stringify("\\u0004Q"), '"\\\\u0004Q"'); +assert.sameValue(JSON.stringify("\\u0005Q"), '"\\\\u0005Q"'); +assert.sameValue(JSON.stringify("\\u0006Q"), '"\\\\u0006Q"'); +assert.sameValue(JSON.stringify("\\u0007Q"), '"\\\\u0007Q"'); +assert.sameValue(JSON.stringify("\\u0008Q"), '"\\\\u0008Q"'); +assert.sameValue(JSON.stringify("\\u0009Q"), '"\\\\u0009Q"'); +assert.sameValue(JSON.stringify("\\u000AQ"), '"\\\\u000AQ"'); +assert.sameValue(JSON.stringify("\\u000BQ"), '"\\\\u000BQ"'); +assert.sameValue(JSON.stringify("\\u000CQ"), '"\\\\u000CQ"'); +assert.sameValue(JSON.stringify("\\u000DQ"), '"\\\\u000DQ"'); +assert.sameValue(JSON.stringify("\\u000EQ"), '"\\\\u000EQ"'); +assert.sameValue(JSON.stringify("\\u000FQ"), '"\\\\u000FQ"'); +assert.sameValue(JSON.stringify("\\u0010Q"), '"\\\\u0010Q"'); +assert.sameValue(JSON.stringify("\\u0011Q"), '"\\\\u0011Q"'); +assert.sameValue(JSON.stringify("\\u0012Q"), '"\\\\u0012Q"'); +assert.sameValue(JSON.stringify("\\u0013Q"), '"\\\\u0013Q"'); +assert.sameValue(JSON.stringify("\\u0014Q"), '"\\\\u0014Q"'); +assert.sameValue(JSON.stringify("\\u0015Q"), '"\\\\u0015Q"'); +assert.sameValue(JSON.stringify("\\u0016Q"), '"\\\\u0016Q"'); +assert.sameValue(JSON.stringify("\\u0017Q"), '"\\\\u0017Q"'); +assert.sameValue(JSON.stringify("\\u0018Q"), '"\\\\u0018Q"'); +assert.sameValue(JSON.stringify("\\u0019Q"), '"\\\\u0019Q"'); +assert.sameValue(JSON.stringify("\\u001AQ"), '"\\\\u001AQ"'); +assert.sameValue(JSON.stringify("\\u001BQ"), '"\\\\u001BQ"'); +assert.sameValue(JSON.stringify("\\u001CQ"), '"\\\\u001CQ"'); +assert.sameValue(JSON.stringify("\\u001DQ"), '"\\\\u001DQ"'); +assert.sameValue(JSON.stringify("\\u001EQ"), '"\\\\u001EQ"'); +assert.sameValue(JSON.stringify("\\u001FQ"), '"\\\\u001FQ"'); +assert.sameValue(JSON.stringify("\\u0020Q"), '"\\\\u0020Q"'); + +// https://tc39.github.io/proposal-well-formed-stringify/ + +assert.sameValue(JSON.stringify("\ud7ff"), '"\ud7ff"'); +assert.sameValue(JSON.stringify("\ud800"), '"\\ud800"'); +assert.sameValue(JSON.stringify("\ud937"), '"\\ud937"'); +assert.sameValue(JSON.stringify("\uda20"), '"\\uda20"'); +assert.sameValue(JSON.stringify("\udbff"), '"\\udbff"'); + +assert.sameValue(JSON.stringify("\udc00"), '"\\udc00"'); +assert.sameValue(JSON.stringify("\udddd"), '"\\udddd"'); +assert.sameValue(JSON.stringify("\udeaf"), '"\\udeaf"'); +assert.sameValue(JSON.stringify("\udfff"), '"\\udfff"'); +assert.sameValue(JSON.stringify("\ue000"), '"\ue000"'); + +assert.sameValue(JSON.stringify("\ud7ffa"), '"\ud7ffa"'); +assert.sameValue(JSON.stringify("\ud800a"), '"\\ud800a"'); +assert.sameValue(JSON.stringify("\ud937a"), '"\\ud937a"'); +assert.sameValue(JSON.stringify("\uda20a"), '"\\uda20a"'); +assert.sameValue(JSON.stringify("\udbffa"), '"\\udbffa"'); + +assert.sameValue(JSON.stringify("\udc00a"), '"\\udc00a"'); +assert.sameValue(JSON.stringify("\udddda"), '"\\udddda"'); +assert.sameValue(JSON.stringify("\udeafa"), '"\\udeafa"'); +assert.sameValue(JSON.stringify("\udfffa"), '"\\udfffa"'); +assert.sameValue(JSON.stringify("\ue000a"), '"\ue000a"'); + +assert.sameValue(JSON.stringify("\ud7ff\ud800"), '"\ud7ff\\ud800"'); +assert.sameValue(JSON.stringify("\ud800\ud800"), '"\\ud800\\ud800"'); +assert.sameValue(JSON.stringify("\ud937\ud800"), '"\\ud937\\ud800"'); +assert.sameValue(JSON.stringify("\uda20\ud800"), '"\\uda20\\ud800"'); +assert.sameValue(JSON.stringify("\udbff\ud800"), '"\\udbff\\ud800"'); + +assert.sameValue(JSON.stringify("\udc00\ud800"), '"\\udc00\\ud800"'); +assert.sameValue(JSON.stringify("\udddd\ud800"), '"\\udddd\\ud800"'); +assert.sameValue(JSON.stringify("\udeaf\ud800"), '"\\udeaf\\ud800"'); +assert.sameValue(JSON.stringify("\udfff\ud800"), '"\\udfff\\ud800"'); +assert.sameValue(JSON.stringify("\ue000\ud800"), '"\ue000\\ud800"'); + +assert.sameValue(JSON.stringify("\ud7ff\udc00"), '"\ud7ff\\udc00"'); +assert.sameValue(JSON.stringify("\ud800\udc00"), '"\ud800\udc00"'); +assert.sameValue(JSON.stringify("\ud937\udc00"), '"\ud937\udc00"'); +assert.sameValue(JSON.stringify("\uda20\udc00"), '"\uda20\udc00"'); +assert.sameValue(JSON.stringify("\udbff\udc00"), '"\udbff\udc00"'); + +assert.sameValue(JSON.stringify("\udc00\udc00"), '"\\udc00\\udc00"'); +assert.sameValue(JSON.stringify("\udddd\udc00"), '"\\udddd\\udc00"'); +assert.sameValue(JSON.stringify("\udeaf\udc00"), '"\\udeaf\\udc00"'); +assert.sameValue(JSON.stringify("\udfff\udc00"), '"\\udfff\\udc00"'); +assert.sameValue(JSON.stringify("\ue000\udc00"), '"\ue000\\udc00"'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify-toJSON-arguments.js b/test/staging/sm/JSON/stringify-toJSON-arguments.js new file mode 100644 index 0000000000..80d5c7c098 --- /dev/null +++ b/test/staging/sm/JSON/stringify-toJSON-arguments.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'stringify-toJSON-arguments.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Arguments when an object's toJSON method is called"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + p: { + toJSON: function(key) + { + assert.sameValue(arguments.length, 1); + assert.sameValue(key, "p"); + return 17; + } + } + }; + +assert.sameValue(JSON.stringify(obj), '{"p":17}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/stringify.js b/test/staging/sm/JSON/stringify.js new file mode 100644 index 0000000000..1e4efaf41f --- /dev/null +++ b/test/staging/sm/JSON/stringify.js @@ -0,0 +1,95 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertStringify(v, expect) +{ + assert.sameValue(JSON.stringify(v), expect); +} + +assertStringify({}, "{}"); +assertStringify([], "[]"); +assertStringify({"foo":"bar"}, '{"foo":"bar"}'); +assertStringify({"null":null}, '{"null":null}'); +assertStringify({"five":5}, '{"five":5}'); +assertStringify({"five":5, "six":6}, '{"five":5,"six":6}'); +assertStringify({"x":{"y":"z"}}, '{"x":{"y":"z"}}'); +assertStringify({"w":{"x":{"y":"z"}}}, '{"w":{"x":{"y":"z"}}}'); +assertStringify([1,2,3], '[1,2,3]'); +assertStringify({"w":{"x":{"y":[1,2,3]}}}, '{"w":{"x":{"y":[1,2,3]}}}'); +assertStringify({"false":false}, '{"false":false}'); +assertStringify({"true":true}, '{"true":true}'); +assertStringify({"child has two members": {"this":"one", 2:"and this one"}}, + '{"child has two members":{"2":"and this one","this":"one"}}'); +assertStringify({"x":{"a":"b","c":{"y":"z"},"f":"g"}}, + '{"x":{"a":"b","c":{"y":"z"},"f":"g"}}'); +assertStringify({"x":[1,{"y":"z"},3]}, '{"x":[1,{"y":"z"},3]}'); +assertStringify([new String("hmm")], '["hmm"]'); +assertStringify([new Boolean(true)], '[true]'); +assertStringify([new Number(42)], '[42]'); +assertStringify([new Date(Date.UTC(1978, 8, 13, 12, 24, 34, 23))], + '["1978-09-13T12:24:34.023Z"]'); +assertStringify([1,,3], '[1,null,3]'); +assertStringify({"mm\"mm":"hmm"}, '{"mm\\\"mm":"hmm"}'); +assertStringify({"mm\"mm\"mm":"hmm"}, '{"mm\\\"mm\\\"mm":"hmm"}'); +assertStringify({'"':"hmm"}, '{"\\\"":"hmm"}'); +assertStringify({'\\':"hmm"}, '{"\\\\":"hmm"}'); +assertStringify({'mmm\\mmm':"hmm"}, '{"mmm\\\\mmm":"hmm"}'); +assertStringify({'mmm\\mmm\\mmm':"hmm"}, '{"mmm\\\\mmm\\\\mmm":"hmm"}'); +assertStringify({"mm\u000bmm":"hmm"}, '{"mm\\u000bmm":"hmm"}'); +assertStringify({"mm\u0000mm":"hmm"}, '{"mm\\u0000mm":"hmm"}'); +assertStringify({"\u0000\u000b":""}, '{"\\u0000\\u000b":""}'); +assertStringify({"\u000b\ufdfd":"hmm"}, '{"\\u000b\ufdfd":"hmm"}'); +assertStringify({"\u000b\ufdfd":"h\xfc\ufdfdm"}, '{"\\u000b\ufdfd":"h\xfc\ufdfdm"}'); + +var x = {"free":"variable"}; +assertStringify(x, '{"free":"variable"}'); +assertStringify({"y":x}, '{"y":{"free":"variable"}}'); + +// array prop +assertStringify({ a: [1,2,3] }, '{"a":[1,2,3]}'); + +assertStringify({"y": { foo: function(hmm) { return hmm; } } }, '{"y":{}}'); + +// test toJSON +var hmm = { toJSON: function() { return {"foo":"bar"} } }; +assertStringify({"hmm":hmm}, '{"hmm":{"foo":"bar"}}'); +assertStringify(hmm, '{"foo":"bar"}'); // on the root + +// toJSON on prototype +var Y = function() { + this.not = "there?"; + this.d = "e"; +}; +Y.prototype = { + not: "there?", + toJSON: function() { return {"foo":"bar"}} +}; +var y = new Y(); +assertStringify(y.toJSON(), '{"foo":"bar"}'); +assertStringify(y, '{"foo":"bar"}'); + +// return undefined from toJSON +assertStringify({"hmm": { toJSON: function() { return; } } }, '{}'); + +// array with named prop +var x = new Array(); +x[0] = 1; +x.foo = "bar"; +assertStringify(x, '[1]'); + +// prototype +var X = function() { this.a = "b" }; +X.prototype = { c: "d" }; +assertStringify(new X(), '{"a":"b"}'); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/JSON/trailing-comma.js b/test/staging/sm/JSON/trailing-comma.js new file mode 100644 index 0000000000..f585cf86a3 --- /dev/null +++ b/test/staging/sm/JSON/trailing-comma.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-JSON-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'trailing-comma.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 564621; +var summary = 'JSON.parse should reject {"a" : "b",} or [1,]'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +testJSON('[]', false); +testJSON('[1]', false); +testJSON('["a"]', false); +testJSON('{}', false); +testJSON('{"a":1}', false); +testJSON('{"a":"b"}', false); +testJSON('{"a":true}', false); +testJSON('[{}]', false); + +testJSON('[1,]', true); +testJSON('["a",]', true); +testJSON('{,}', true); +testJSON('{"a":1,}', true); +testJSON('{"a":"b",}', true); +testJSON('{"a":true,}', true); +testJSON('[{,}]', true); +testJSON('[[1,]]', true); +testJSON('[{"a":"b",}]', true); diff --git a/test/staging/sm/Map/NaN-as-key.js b/test/staging/sm/Map/NaN-as-key.js new file mode 100644 index 0000000000..ed1ead2170 --- /dev/null +++ b/test/staging/sm/Map/NaN-as-key.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 722260; +var summary = 'All NaNs must be treated as identical keys for Map'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* Avoid constant-folding that would happen were |undefined| to be used. */ +var key = -/a/g.missingProperty; + +var m = new Map(); +m.set(key, 17); +assert.sameValue(m.get(key), 17); +assert.sameValue(m.get(-key), 17); +assert.sameValue(m.get(NaN), 17); + +m.delete(-key); +assert.sameValue(m.has(key), false); +assert.sameValue(m.has(-key), false); +assert.sameValue(m.has(NaN), false); + +m.set(-key, 17); +assert.sameValue(m.get(key), 17); +assert.sameValue(m.get(-key), 17); +assert.sameValue(m.get(NaN), 17); + +m.delete(NaN); +assert.sameValue(m.has(key), false); +assert.sameValue(m.has(-key), false); +assert.sameValue(m.has(NaN), false); + +m.set(NaN, 17); +assert.sameValue(m.get(key), 17); +assert.sameValue(m.get(-key), 17); +assert.sameValue(m.get(NaN), 17); + +m.delete(key); +assert.sameValue(m.has(key), false); +assert.sameValue(m.has(-key), false); +assert.sameValue(m.has(NaN), false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Map/constructor-iterator-close.js b/test/staging/sm/Map/constructor-iterator-close.js new file mode 100644 index 0000000000..f78e0f1909 --- /dev/null +++ b/test/staging/sm/Map/constructor-iterator-close.js @@ -0,0 +1,302 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180306; +var summary = 'Map/Set/WeakMap/WeakSet constructor should close iterator on error'; + +print(BUGNUMBER + ": " + summary); + +function test(ctors, { nextVal=undefined, + nextThrowVal=undefined, + modifier=undefined, + exceptionVal=undefined, + exceptionType=undefined, + closed=true }) { + function getIterable() { + let iterable = { + closed: false, + [Symbol.iterator]() { + let iterator = { + first: true, + next() { + if (this.first) { + this.first = false; + if (nextThrowVal) + throw nextThrowVal; + return nextVal; + } + return { value: undefined, done: true }; + }, + return() { + iterable.closed = true; + return {}; + } + }; + if (modifier) + modifier(iterator, iterable); + + return iterator; + } + }; + return iterable; + } + + for (let ctor of ctors) { + let iterable = getIterable(); + if (exceptionVal) { + let caught = false; + try { + new ctor(iterable); + } catch (e) { + assert.sameValue(e, exceptionVal); + caught = true; + } + assert.sameValue(caught, true); + } else if (exceptionType) { + assertThrowsInstanceOf(() => new ctor(iterable), exceptionType); + } else { + new ctor(iterable); + } + assert.sameValue(iterable.closed, closed); + } +} + +// == Error cases with close == + +// ES 2017 draft 23.1.1.1 Map step 8.d.ii. +// ES 2017 draft 23.3.1.1 WeakMap step 8.d.ii. +test([Map, WeakMap], { + nextVal: { value: "non object", done: false }, + exceptionType: TypeError, + closed: true, +}); + +// ES 2017 draft 23.1.1.1 Map step 8.f. +// ES 2017 draft 23.3.1.1 WeakMap step 8.f. +test([Map, WeakMap], { + nextVal: { value: { get 0() { throw "0 getter throws"; } }, done: false }, + exceptionVal: "0 getter throws", + closed: true, +}); + +// ES 2017 draft 23.1.1.1 Map step 8.h. +// ES 2017 draft 23.3.1.1 WeakMap step 8.h. +test([Map, WeakMap], { + nextVal: { value: { 0: {}, get 1() { throw "1 getter throws"; } }, done: false }, + exceptionVal: "1 getter throws", + closed: true, +}); + +// ES 2017 draft 23.1.1.1 Map step 8.j. +// ES 2017 draft 23.3.1.1 WeakMap step 8.j. +class MyMap extends Map { + set(k, v) { + throw "setter throws"; + } +} +class MyWeakMap extends WeakMap { + set(k, v) { + throw "setter throws"; + } +} +test([MyMap, MyWeakMap], { + nextVal: { value: [{}, {}], done: false }, + exceptionVal: "setter throws", + closed: true, +}); + +// ES 2017 draft 23.2.1.1 Set step 8.e. +// ES 2017 draft 23.4.1.1 WeakSet step 8.e. +class MySet extends Set { + add(v) { + throw "adder throws"; + } +} +class MyWeakSet extends WeakSet { + add(v) { + throw "adder throws"; + } +} +test([MySet, MyWeakSet], { + nextVal: { value: {}, done: false }, + exceptionVal: "adder throws", + closed: true, +}); + +// ES 2021 draft 7.4.6 step 5. +// if GetMethod fails, the thrown value should be ignored. +test([MyMap, MyWeakMap], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + throw "return getter throws"; + } + }); + }, + exceptionVal: "setter throws", + closed: true, +}); +test([MySet, MyWeakSet], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + throw "return getter throws"; + } + }); + }, + exceptionVal: "adder throws", + closed: true, +}); +test([MyMap, MyWeakMap], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + return "non object"; + } + }); + }, + exceptionVal: "setter throws", + closed: true, +}); +test([MySet, MyWeakSet], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + return "non object"; + } + }); + }, + exceptionVal: "adder throws", + closed: true, +}); +test([MyMap, MyWeakMap], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + // Non callable. + return {}; + } + }); + }, + exceptionVal: "setter throws", + closed: true, +}); +test([MySet, MyWeakSet], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + Object.defineProperty(iterator, "return", { + get: function() { + iterable.closed = true; + // Non callable. + return {}; + } + }); + }, + exceptionVal: "adder throws", + closed: true, +}); + +// ES 2017 draft 7.4.6 steps 6. +// if return method throws, the thrown value should be ignored. +test([MyMap, MyWeakMap], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + iterator.return = function() { + iterable.closed = true; + throw "return throws"; + }; + }, + exceptionVal: "setter throws", + closed: true, +}); +test([MySet, MyWeakSet], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + iterator.return = function() { + iterable.closed = true; + throw "return throws"; + }; + }, + exceptionVal: "adder throws", + closed: true, +}); + +test([MyMap, MyWeakMap], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + iterator.return = function() { + iterable.closed = true; + return "non object"; + }; + }, + exceptionVal: "setter throws", + closed: true, +}); +test([MySet, MyWeakSet], { + nextVal: { value: [{}, {}], done: false }, + modifier: (iterator, iterable) => { + iterator.return = function() { + iterable.closed = true; + return "non object"; + }; + }, + exceptionVal: "adder throws", + closed: true, +}); + +// == Error cases without close == + +// ES 2017 draft 23.1.1.1 Map step 8.a. +// ES 2017 draft 23.3.1.1 WeakMap step 8.a. +// ES 2017 draft 23.2.1.1 Set step 8.a. +// ES 2017 draft 23.4.1.1 WeakSet step 8.a. +test([Map, WeakMap, Set, WeakSet], { + nextThrowVal: "next throws", + exceptionVal: "next throws", + closed: false, +}); +test([Map, WeakMap, Set, WeakSet], { + nextVal: { value: {}, get done() { throw "done getter throws"; } }, + exceptionVal: "done getter throws", + closed: false, +}); + +// ES 2017 draft 23.1.1.1 Map step 8.c. +// ES 2017 draft 23.3.1.1 WeakMap step 8.c. +// ES 2017 draft 23.2.1.1 Set step 8.c. +// ES 2017 draft 23.4.1.1 WeakSet step 8.c. +test([Map, WeakMap, Set, WeakSet], { + nextVal: { get value() { throw "value getter throws"; }, done: false }, + exceptionVal: "value getter throws", + closed: false, +}); + +// == Successful cases == + +test([Map, WeakMap], { + nextVal: { value: [{}, {}], done: false }, + closed: false, +}); +test([Set, WeakSet], { + nextVal: { value: {}, done: false }, + closed: false, +}); + diff --git a/test/staging/sm/Map/constructor-iterator-primitive.js b/test/staging/sm/Map/constructor-iterator-primitive.js new file mode 100644 index 0000000000..b37fc504e6 --- /dev/null +++ b/test/staging/sm/Map/constructor-iterator-primitive.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1021835; +var summary = "Returning non-object from @@iterator should throw"; + +print(BUGNUMBER + ": " + summary); + +let ctors = [ + Map, + Set, + WeakMap, + WeakSet +]; + +let primitives = [ + 1, + true, + undefined, + null, + "foo", + Symbol.iterator +]; + +for (let ctor of ctors) { + for (let primitive of primitives) { + let arg = { + [Symbol.iterator]() { + return primitive; + } + }; + assertThrowsInstanceOf(() => new ctor(arg), TypeError); + } +} + diff --git a/test/staging/sm/Map/forEach-selfhosted-behavior.js b/test/staging/sm/Map/forEach-selfhosted-behavior.js new file mode 100644 index 0000000000..7a9a3ca6de --- /dev/null +++ b/test/staging/sm/Map/forEach-selfhosted-behavior.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 987243; +var summary = "Don't use .call(...) in the self-hosted Map.prototype.forEach"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var functionCall = Function.prototype.call; + +function throwSyntaxError() +{ + throw new SyntaxError("Function.prototype.call incorrectly called"); +} + +function lalala() {} + +Function.prototype.call = throwSyntaxError; + +new Map().forEach(throwSyntaxError); +new Map([[1, 2]]).forEach(lalala); +new Map([[1, 2], [3, 4]]).forEach(lalala); + +Function.prototype.call = function() { this.set(42, "fnord"); }; + +new Map().forEach(throwSyntaxError); +new Map([[1, 2]]).forEach(lalala); +new Map([[1, 2], [3, 4]]).forEach(lalala); + +var callCount = 0; +Function.prototype.call = function() { callCount++; }; + +new Map().forEach(throwSyntaxError); +new Map([[1, 2]]).forEach(lalala); +new Map([[1, 2], [3, 4]]).forEach(lalala); + +assert.sameValue(callCount, 0); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Map/getter-name.js b/test/staging/sm/Map/getter-name.js new file mode 100644 index 0000000000..3d2815811d --- /dev/null +++ b/test/staging/sm/Map/getter-name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180290; +var summary = 'Map getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Object.getOwnPropertyDescriptor(Map, Symbol.species).get.name, "get [Symbol.species]"); +assert.sameValue(Object.getOwnPropertyDescriptor(Map.prototype, "size").get.name, "get size"); + diff --git a/test/staging/sm/Map/iterable.js b/test/staging/sm/Map/iterable.js new file mode 100644 index 0000000000..96628a6ebf --- /dev/null +++ b/test/staging/sm/Map/iterable.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let length; +let iterable = { + [Symbol.iterator]() { return this; }, + next() { length = arguments.length; return {done: true}; } +}; + +new Map(iterable); +// ensure no arguments are passed to next() during construction (Bug 1197095) +assert.sameValue(length, 0); + +let typeofThis; +Object.defineProperty(Number.prototype, Symbol.iterator, { + value() { + "use strict"; + typeofThis = typeof this; + return { next() { return {done: true}; } }; + } +}); + +new Map(0); +// ensure that iterable objects retain their type (Bug 1197094) +assert.sameValue(typeofThis, "number"); + diff --git a/test/staging/sm/Map/iterator-thisv-error.js b/test/staging/sm/Map/iterator-thisv-error.js new file mode 100644 index 0000000000..a25d1aaa7e --- /dev/null +++ b/test/staging/sm/Map/iterator-thisv-error.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test(fn, thisv) { + assertThrowsInstanceOfWithMessageCheck( + () => fn.call(thisv), + TypeError, + message => + /^\w+ method called on incompatible.+/.test(message) && !message.includes("std_")); +} + +for (var thisv of [null, undefined, false, true, 0, ""]) { + test(Map.prototype.values, thisv); + test(Map.prototype.keys, thisv); + test(Map.prototype.entries, thisv); + test(Map.prototype[Symbol.iterator], thisv); +} + diff --git a/test/staging/sm/Map/symbols.js b/test/staging/sm/Map/symbols.js new file mode 100644 index 0000000000..3c2eae5932 --- /dev/null +++ b/test/staging/sm/Map/symbols.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var m = new Map; + +// Symbols can be Map keys. +var sym = Symbol(); +m.set(sym, "zero"); +assert.sameValue(m.has(sym), true); +assert.sameValue(m.get(sym), "zero"); +assert.sameValue(m.has(Symbol()), false); +assert.sameValue(m.get(Symbol()), undefined); +assert.sameValue([...m][0][0], sym); +m.set(sym, "replaced"); +assert.sameValue(m.get(sym), "replaced"); +m.delete(sym); +assert.sameValue(m.has(sym), false); +assert.sameValue(m.size, 0); + +// Symbols returned by Symbol.for() can be Map keys. +for (var word of "that that is is that that is not is not is that not it".split(' ')) { + sym = Symbol.for(word); + m.set(sym, (m.get(sym) || 0) + 1); +} +assert.deepEqual([...m], [ + [Symbol.for("that"), 5], + [Symbol.for("is"), 5], + [Symbol.for("not"), 3], + [Symbol.for("it"), 1] +]); + diff --git a/test/staging/sm/Math/20.2.2.ToNumber.js b/test/staging/sm/Math/20.2.2.ToNumber.js new file mode 100644 index 0000000000..f585e0ace4 --- /dev/null +++ b/test/staging/sm/Math/20.2.2.ToNumber.js @@ -0,0 +1,118 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * ECMA-262 6th Edition / Draft November 8, 2013 + * + * 20.2.2 Function Properties of the Math Object + */ + +/* + * This custom object will allow us to check if valueOf() is called + */ + +TestNumber.prototype = new Number(); + +function TestNumber(value) { + this.value = value; + this.valueOfCalled = false; +} + +TestNumber.prototype = { + valueOf: function() { + this.valueOfCalled = true; + return this.value; + } +} + +// Verify that each TestNumber's flag is set after calling Math func +function test(func /*, args */) { + var args = Array.prototype.slice.call(arguments, 1); + func.apply(null, args); + + for (var i = 0; i < args.length; ++i) + assert.sameValue(args[i].valueOfCalled, true); +} + +// Note that we are not testing these functions' return values +// We only test whether valueOf() is called for each argument + +// 1. Test Math.atan2() +var x = new TestNumber(1); +test(Math.atan2, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.atan2, y, x); + +// Remove comment block once patch for bug 896264 is approved +/* +// 2. Test Math.hypot() +var x = new TestNumber(1); +test(Math.hypot, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.hypot, x, y); + +var x = new TestNumber(1); +var y = new TestNumber(2); +var z = new TestNumber(3); +test(Math.hypot, x, y, z); +*/ + +// Remove comment block once patch for bug 808148 is approved +/* +// 3. Test Math.imul() +var x = new TestNumber(1); +test(Math.imul, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.imul, x, y); +*/ + +// 4. Test Math.max() +var x = new TestNumber(1); +test(Math.max, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.max, x, y); + +var x = new TestNumber(1); +var y = new TestNumber(2); +var z = new TestNumber(3); +test(Math.max, x, y, z); + +// 5. Test Math.min() +var x = new TestNumber(1); +test(Math.min, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.min, x, y); + +var x = new TestNumber(1); +var y = new TestNumber(2); +var z = new TestNumber(3); +test(Math.min, x, y, z); + +// 6. Test Math.pow() +var x = new TestNumber(1); +test(Math.pow, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.pow, x, y); + diff --git a/test/staging/sm/Math/acosh-approx.js b/test/staging/sm/Math/acosh-approx.js new file mode 100644 index 0000000000..6f64dbe33b --- /dev/null +++ b/test/staging/sm/Math/acosh-approx.js @@ -0,0 +1,293 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var cosh_data = [ + [1.0000014305114746, 0.0016914556651292944], + [1.0000019073486328, 0.001953124689559275], + [1.000007152557373, 0.003782208044661295], + [1.000013828277588, 0.005258943946801101], + [1.0000171661376953, 0.005859366618129203], + [1.0000600814819336, 0.010961831992188852], + [1.0001168251037598, 0.015285472131830425], + [1.0001487731933594, 0.017249319093529877], + [1.0003981590270996, 0.028218171738655373], + [1.000638484954834, 0.03573281468231457], + [1.0010714530944824, 0.046287402472878776], + [1.0030217170715332, 0.07771996527168971], + [1.0049939155578613, 0.0998975930860278], + [1.0092840194702148, 0.13615938768032465], + [1.024169921875, 0.21942279004958354], + [1.0622773170471191, 0.3511165938166055], + [1.1223440170288086, 0.48975026711288183], + [1.2495574951171875, 0.692556883708491], + [1.4912219047546387, 0.954530572221414], + [1.9838471412658691, 1.307581416910453], + [2.1576128005981445, 1.4035188779741334], + [2.406397819519043, 1.5250070845427517], + [3.386958122253418, 1.8905372013072799], + [4.451677322387695, 2.1735673399948254], + [6.9391326904296875, 2.625091127868242], + [7.756023406982422, 2.737434918695162], + [8.882369995117188, 2.8740317167801948], + [9.869171142578125, 2.97998639328949], + [16.848876953125, 3.516549380542481], + [16.88458251953125, 3.51867003468025], + [18.18859100341797, 3.593185165198829], + [18.82012176513672, 3.6273672142963385], + [19.184181213378906, 3.646553244410946], + [24.039520263671875, 3.872413451393967], + [26.556991577148438, 3.972085568933329], + [27.921104431152344, 4.022209178119238], + [32.314666748046875, 4.168428891496629], + [34.73008728027344, 4.240546229861005], + [36.51556396484375, 4.290698214968891], + [38.851287841796875, 4.352722738491574], + [49.46875, 4.594386162629449], + [49.67265319824219, 4.598500387004538], + [55.821014404296875, 4.7152173401856095], + [57.119781494140625, 4.73822104001982], + [60.37983703613281, 4.793733825338029], + [63.4661865234375, 4.8435923769530165], + [63.822418212890625, 4.849190310904695], + [64.36642456054688, 4.85767897228448], + [65.82318115234375, 4.880061548144127], + [68.60302734375, 4.921430721025434], + [70.173583984375, 4.94406835208057], + [71.80126953125, 4.967000841791218], + [75.40786743164062, 5.016014824864732], + [75.49771118164062, 5.017205657609766], + [78.06475830078125, 5.0506448716550825], + [79.64892578125, 5.0707363201405276], + [79.8707275390625, 5.073517411135063], + [82.14324951171875, 5.101574796209937], + [86.42214965820312, 5.152357710985635], + [87.75869750976562, 5.167705692500117], + [94.24942016601562, 5.2390637098028074], + [95.00259399414062, 5.247023676519904], + [96.06402587890625, 5.258134994273664], + [99.10101318359375, 5.289261389093961], + [104.82595825195312, 5.345425863147171], + [105.89431762695312, 5.3555664787245885], + [106.750244140625, 5.363617180711895], + [109.40167236328125, 5.388152468690488], + [111.29598999023438, 5.405320225963013], + [112.68215942382812, 5.417698597745429], + [115.84786987304688, 5.445406415908933], + [122.51895141601562, 5.501396249028249], + [126.29083251953125, 5.531718947357248], + [127.88677978515625, 5.544277233951787], + [128.29241943359375, 5.547444176085567], + [129.49658203125, 5.556786759298988], + [138.73651123046875, 5.625710723366437], + [139.18450927734375, 5.628934733085022], + [139.9705810546875, 5.634566685055491], + [143.6336669921875, 5.660401141376928], + [149.2176513671875, 5.698541939965668], + [150.61602783203125, 5.7078698961812995], + [151.65460205078125, 5.714741890601693], + [154.77532958984375, 5.735111323217677], + [158.9586181640625, 5.761781191641161], + [159.23260498046875, 5.763503378028959], + [166.89166259765625, 5.810483079631769], + [169.22418212890625, 5.824362807770767], + [170.85247802734375, 5.833939098607025], + [175.641845703125, 5.861586030831371], + [176.47808837890625, 5.866335876872544], + [177.0284423828125, 5.869449614294116], + [178.81622314453125, 5.879497954012966], + [181.28570556640625, 5.893213844044451], + [190.84246826171875, 5.944588630523773], + [191.39764404296875, 5.947493525920713], + [194.2606201171875, 5.962341215900494], + [194.89630126953125, 5.9656082276276], + [196.72125244140625, 5.9749284849312865], + [196.76788330078125, 5.975165500176202], + [198.0592041015625, 5.981706804024238], + [199.97052001953125, 5.991310884439669], + [202.70001220703125, 6.004868209578554], + [204.95684814453125, 6.0159406892865155], + [206.92059326171875, 6.025476453825986], + [211.4588623046875, 6.047172064627678], + [211.6217041015625, 6.0479418642231595], + [212.15936279296875, 6.050479329955437], + [219.93341064453125, 6.086466833749719], + [223.34747314453125, 6.101870903204913], + [228.56036376953125, 6.1249427443985525], + [229.53656005859375, 6.129204755426344], + [231.15753173828125, 6.136241935513706], + [235.22589111328125, 6.153688953514383], + [237.17108154296875, 6.1619244798633215], + [237.904541015625, 6.165012268502458], + [243.202392578125, 6.187036941752032], + [244.296875, 6.191527178125454], + [245.39239501953125, 6.196001570568187], + [245.80389404296875, 6.197677082130341], + [249.68365478515625, 6.2133379061260285], + [252.32763671875, 6.223871642756905], + [253.4725341796875, 6.228398760115369], + [264.1583251953125, 6.269692237869835], + [265.867919921875, 6.276143287577458], + [273.893798828125, 6.305884283737176], + [274.060546875, 6.306492908028797], + [274.06298828125, 6.3065018163217115], + [275.31201171875, 6.31104892482331], + [281.2171630859375, 6.3322712125431915], + [284.3428955078125, 6.343324976847916], + [284.8428955078125, 6.345081883725142], + [287.3035888671875, 6.353683609448096], + [290.8973388671875, 6.366114643735997], + [293.0467529296875, 6.373476431987165], + [293.048583984375, 6.3734826803404045], + [296.819091796875, 6.3862671775996915], + [297.6572265625, 6.389086936901673], + [308.40625, 6.424562459508495], + [316.5472412109375, 6.4506171773701535], + [320.2418212890625, 6.462221144761522], + [322.33642578125, 6.468740575092418], + [323.5101318359375, 6.472375224718483], + [327.8939208984375, 6.485834999462654], + [328.0833740234375, 6.486412623146554], + [328.214599609375, 6.486812521370483], + [332.13916015625, 6.498698952535687], + [339.6888427734375, 6.521175044233963], + [340.171630859375, 6.522595306993373], + [340.22998046875, 6.522766822935215], + [340.9984130859375, 6.52502285413445], + [347.719482421875, 6.5445411825986985], + [347.921142578125, 6.5451209675856825], + [349.8392333984375, 6.55061885367159], + [353.1812744140625, 6.560126626713879], + [353.3170166015625, 6.560510895819139], + [354.9730224609375, 6.565186990039135], + [355.6412353515625, 6.567067660815945], + [363.193603515625, 6.588081320423386], + [363.7503662109375, 6.5896131163651415], + [366.66650390625, 6.597598047275183], + [370.5828857421875, 6.608222493065004], + [371.822998046875, 6.611563301604297], + [375.8822021484375, 6.622421213257873], + [377.1107177734375, 6.625684248051368], + [377.588623046875, 6.626950731244344], + [378.8428955078125, 6.630267034079059], + [379.1123046875, 6.630977920761718], + [381.1038818359375, 6.636217452968849], + [382.1112060546875, 6.638857149899159], + [382.9927978515625, 6.641161660644278], + [387.1845703125, 6.652047018118426], + [389.669921875, 6.658445560711748], + [389.804443359375, 6.658790721334144], + [396.3114013671875, 6.675345858154136], + [397.005126953125, 6.677094789236718], + [397.1934814453125, 6.6775691166680895], + [397.8046875, 6.679106750673113], + [398.8426513671875, 6.681712590609845], + [399.1663818359375, 6.682523938576487], + [399.2547607421875, 6.68274532345516], + [400.33984375, 6.685459416477178], + [403.9578857421875, 6.694456277839498], + [404.279541015625, 6.6952522228540765], + [405.0574951171875, 6.6971746771142415], + [407.328125, 6.702764738337774], + [407.547119140625, 6.7033022311799595], + [410.5994873046875, 6.710763953621196], + [410.8016357421875, 6.711256159037373], + [411.129638671875, 6.712054288828399], + [411.9053955078125, 6.713939407502346], + [415.5833740234375, 6.722828986708716], + [417.669189453125, 6.727835453862132], + [420.517822265625, 6.734632628835641], + [424.3853759765625, 6.743787740494532], + [424.7154541015625, 6.744565219553757], + [436.3419189453125, 6.7715720212680655], + [438.501953125, 6.776510146304201], + [439.3369140625, 6.778412462065226], + [445.5606689453125, 6.79247934060035], + [452.9901123046875, 6.809016260337229], + [453.77490234375, 6.810747231716348], + [456.7745361328125, 6.817335895109251], + [457.9520263671875, 6.819910421197311], + [458.6795654296875, 6.821497844004013], + [460.5164794921875, 6.8254946428721475], + [461.8717041015625, 6.828433164406687], + [464.7025146484375, 6.834543470287694], + [467.0626220703125, 6.839609377592375], + [467.0712890625, 6.839627933844213], + [470.096923828125, 6.846084943645239], + [475.1607666015625, 6.856799276049143], + [477.5537109375, 6.861822721577315], + [478.626220703125, 6.864066049482581], + [478.7958984375, 6.864420497333681], + [479.6864013671875, 6.866278653973069], + [479.7867431640625, 6.866487814627139], + [479.9122314453125, 6.8667493311188395], + [482.4793701171875, 6.872084270243208], + [482.5181884765625, 6.872164723177875], + [483.8797607421875, 6.874982560453874], + [484.4649658203125, 6.876191234145179], + [485.3258056640625, 6.877966548833207], + [490.57373046875, 6.888721726428236], + [493.7423095703125, 6.89515989558997], + [494.272216796875, 6.896232568812718], + [496.44775390625, 6.900624415355815], + [497.0401611328125, 6.901816998553275], + [498.234130859375, 6.9042162822876465], + [665.0791015625, 7.193052598670793], + [1170.29150390625, 7.758155143419732], + [2058.7958984375, 8.323023697145112], + [5824.533203125, 9.36298131161099], + [9114.30859375, 9.810748008110926], + [31388.40625, 11.047341056314202], + [53732.765625, 11.584925435512535], + [117455.09375, 12.366958539207397], + [246210.625, 13.107089828327874], + [513670.125, 13.84248373881162], + [788353.25, 14.27084873575108], + [1736171, 15.060339852215408], + [3770530, 15.835873313657556], + [4344090, 15.977474039173265], + [11419360, 16.943967899150145], + [31023240, 17.943394339560967], + [40665424, 18.214035936745432], + [129788064, 19.374560581709215], + [225668224, 19.927723623778547], + [450631936, 20.619308638400597], + [750941952, 21.129986093026698], + [1887358976, 22.05159150215413], + [3738011648, 22.734966842639743], + [7486695424, 23.42954051928097], + [12668080128, 23.955498471391667], + [23918272512, 24.591055724582848], + [48862560256, 25.305424481799395], + [113763549184, 26.150535181949436], + [161334755328, 26.499894449532565], + [321933279232, 27.19075733422632], + [715734122496, 27.989721778208146], + [1875817529344, 28.953212876533797] +]; + +var sloppy_tolerance = 8; // FIXME + +for (var [x, y] of cosh_data) + assertNear(Math.acosh(x), y, sloppy_tolerance); + +assertNear(Math.acosh(1e300), 691.4686750787737, sloppy_tolerance); +assertNear(Math.acosh(1.0000000001), 0.000014142136208675862, sloppy_tolerance); + +for (var i = 0; i <= 100; i++) { + var x = (i - 50) / 5; + var y = Math.cosh(x); + var z = Math.acosh(y); + assertNear(z, Math.abs(x), sloppy_tolerance); +} + +for (var i = 1; i < 20; i++) + assertNear(Math.acosh(Math.cosh(i)), i, sloppy_tolerance); + diff --git a/test/staging/sm/Math/acosh-exact.js b/test/staging/sm/Math/acosh-exact.js new file mode 100644 index 0000000000..6e06e243b5 --- /dev/null +++ b/test/staging/sm/Math/acosh-exact.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.acosh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.acosh(NaN), NaN); + +// If x is less than 1, the result is NaN. +assert.sameValue(Math.acosh(ONE_MINUS_EPSILON), NaN); +assert.sameValue(Math.acosh(Number.MIN_VALUE), NaN); +assert.sameValue(Math.acosh(+0), NaN); +assert.sameValue(Math.acosh(-0), NaN); +assert.sameValue(Math.acosh(-Number.MIN_VALUE), NaN); +assert.sameValue(Math.acosh(-1), NaN); +assert.sameValue(Math.acosh(-Number.MAX_VALUE), NaN); +assert.sameValue(Math.acosh(-Infinity), NaN); + +for (var i = -20; i < 1; i++) + assert.sameValue(Math.acosh(i), NaN); + +// If x is 1, the result is +0. +assert.sameValue(Math.acosh(1), +0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.acosh(Number.POSITIVE_INFINITY), Number.POSITIVE_INFINITY); + + diff --git a/test/staging/sm/Math/asinh-approx.js b/test/staging/sm/Math/asinh-approx.js new file mode 100644 index 0000000000..7be2f8c424 --- /dev/null +++ b/test/staging/sm/Math/asinh-approx.js @@ -0,0 +1,312 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var sinh_data = [ + [-497.181640625, -6.902103625349695], + [-495.216552734375, -6.898143347143859], + [-488.0980224609375, -6.883664481302669], + [-486.4609375, -6.880304842490273], + [-482.2261962890625, -6.871561546509046], + [-468.167236328125, -6.841973895837549], + [-465.553955078125, -6.836376331805493], + [-464.288330078125, -6.833654100575195], + [-463.558837890625, -6.8320816635009045], + [-453.82861328125, -6.8108680173663085], + [-448.7835693359375, -6.799689165151487], + [-446.0499267578125, -6.793579326246197], + [-432.4046630859375, -6.762510387544996], + [-424.145751953125, -6.743225720989222], + [-402.8682861328125, -6.691758395994307], + [-402.4595947265625, -6.690743430063694], + [-390.1383056640625, -6.6596501292114505], + [-387.5355224609375, -6.652956360641761], + [-381.0023193359375, -6.635954365364267], + [-374.8172607421875, -6.619587562578274], + [-374.1033935546875, -6.617681179427804], + [-373.01318359375, -6.614762741096185], + [-370.0938720703125, -6.60690568753706], + [-364.5230712890625, -6.591738907156094], + [-361.3756103515625, -6.583066984213974], + [-358.1136474609375, -6.573999516974134], + [-350.8861083984375, -6.553610904389896], + [-350.7060546875, -6.553097634736138], + [-345.5616455078125, -6.538320325468202], + [-342.386962890625, -6.529090881007076], + [-341.9425048828125, -6.527791927233787], + [-337.3883056640625, -6.514383886150781], + [-328.8133544921875, -6.488639771044976], + [-326.1348876953125, -6.480460592697477], + [-313.12744140625, -6.439759999015992], + [-311.6180419921875, -6.434927968512049], + [-303.40478515625, -6.4082177348965725], + [-291.9320068359375, -6.369671035834965], + [-289.791015625, -6.362310184909175], + [-288.07568359375, -6.356373428913315], + [-282.76220703125, -6.337756593913614], + [-278.9659423828125, -6.32424009706147], + [-276.1881103515625, -6.314232650754295], + [-269.843994140625, -6.290994606392703], + [-256.47509765625, -6.240182555852785], + [-248.91619873046875, -6.2102675039793604], + [-245.71783447265625, -6.197335184435549], + [-244.9049072265625, -6.194021350132335], + [-242.49176025390625, -6.184119163536406], + [-223.97491455078125, -6.104686221071835], + [-223.0770263671875, -6.100669325836893], + [-221.50177001953125, -6.093582856519022], + [-214.1610107421875, -6.0598807500687935], + [-202.9705810546875, -6.0062142965262515], + [-200.1683349609375, -5.9923121073369945], + [-198.0869140625, -5.981859446096083], + [-191.8330078125, -5.9497792165852905], + [-183.4495849609375, -5.90509449745879], + [-182.9005126953125, -5.902097012275789], + [-167.5517578125, -5.8144483910067954], + [-162.87738037109375, -5.786154254111214], + [-159.6142578125, -5.765917008989405], + [-150.01629638671875, -5.703902219845274], + [-148.34051513671875, -5.6926689504460395], + [-147.23760986328125, -5.685206387751923], + [-143.65484619140625, -5.660572815631807], + [-138.70599365234375, -5.625516713960633], + [-119.55416870117188, -5.476934234171879], + [-118.44155883789062, -5.467584665632571], + [-112.7041015625, -5.417932675603434], + [-111.43020629882812, -5.406565756574079], + [-107.77297973632812, -5.373195678988387], + [-107.6795654296875, -5.3723285712183735], + [-105.091796875, -5.348004040102253], + [-101.261474609375, -5.31087758970896], + [-95.79150390625, -5.255348419702703], + [-91.26885986328125, -5.206986845736275], + [-87.33349609375, -5.162914035396619], + [-78.23873901367188, -5.052952927749896], + [-77.912353515625, -5.048772883924985], + [-76.83489990234375, -5.034848487644809], + [-61.255645751953125, -4.808269821238499], + [-54.41380310058594, -4.689849459883311], + [-43.967193603515625, -4.476720236388958], + [-42.01084899902344, -4.431216695067421], + [-30.609375, -4.114720236218123], + [-26.711166381835938, -3.9785790831656023], + [-25.241317749023438, -3.9220215830953484], + [-14.624359130859375, -3.3770026324620295], + [-12.431087493896484, -3.214961448471211], + [-10.235607147216797, -3.021397455139021], + [-9.41094970703125, -2.937831931335705], + [-1.635939121246338, -1.267878515574959], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.3050326092288742e-8, 2.305032609228874e-8], + [5.9392490925347374e-8, 5.939249092534734e-8], + [1.166764889148908e-7, 1.1667648891489053e-7], + [2.3799674409019644e-7, 2.379967440901942e-7], + [4.684659415943315e-7, 4.6846594159431437e-7], + [9.382699772686465e-7, 9.382699772685088e-7], + [0.00000110398559627356, 0.0000011039855962733358], + [0.0000032917760108830407, 0.000003291776010877096], + [0.00000751721381675452, 0.000007517213816683722], + [0.000015114666894078255, 0.000015114666893502755], + [0.00002986399340443313, 0.00002986399339999406], + [0.00003387028118595481, 0.000033870281179478836], + [0.00009066011989489198, 0.00009066011977069884], + [0.00021949532674625516, 0.00021949532498377364], + [0.00043952150736004114, 0.00043952149320897676], + [0.0006333151832222939, 0.0006333151408864353], + [0.001115123275667429, 0.0011151230445582744], + [0.001962467096745968, 0.0019624658370807177], + [0.005553754046559334, 0.005553725496786973], + [0.008691128343343735, 0.008691018931968294], + [0.02993336319923401, 0.02992889492062484], + [0.05124260485172272, 0.05122020579778827], + [0.11201295256614685, 0.1117800293787828], + [0.23480379581451416, 0.23269806521543376], + [0.4898730516433716, 0.4721357117742938], + [0.7518312931060791, 0.694611571189336], + [1.655740737915039, 1.2781607348262256], + [3.5958566665649414, 1.9917262343245115], + [3.662705421447754, 2.009484184971722], + [4.142845153808594, 2.128787712416205], + [5.957065582275391, 2.4846967934155475], + [10.890350341796875, 3.083125584533294], + [27.3714599609375, 4.002981567623351], + [29.58606719970703, 4.080736210902826], + [30.79753875732422, 4.120845430011113], + [38.78157043457031, 4.351258506393416], + [46.88148498535156, 4.540883728536112], + [47.21551513671875, 4.547981853382592], + [47.2205810546875, 4.5480891170767], + [49.72361755371094, 4.599728302509061], + [61.557464599609375, 4.8131842711857535], + [67.82162475585938, 4.910082619934558], + [68.82363891601562, 4.924747230639767], + [73.75466918945312, 4.993937439635391], + [80.95669555664062, 5.087099712053554], + [85.26406860351562, 5.1389346970196295], + [85.2677001953125, 5.138977285472121], + [92.8238525390625, 5.223879832616765], + [94.50357055664062, 5.241812789460327], + [116.044677734375, 5.447141014648796], + [123.77554321289062, 5.511633288238573], + [132.3592529296875, 5.578681289305598], + [139.7633056640625, 5.633110296634631], + [143.9609375, 5.662701238627725], + [146.31298828125, 5.678906941005323], + [155.0980224609375, 5.737214893086866], + [155.47784423828125, 5.739660763047893], + [155.74066162109375, 5.741349685869528], + [163.60546875, 5.790614371552514], + [178.735107421875, 5.879059869096351], + [179.70269775390625, 5.884458728291027], + [179.81976318359375, 5.885109945587401], + [181.3594970703125, 5.893636014368936], + [194.82861328125, 5.965274032538233], + [195.23284912109375, 5.967346683696556], + [199.07666015625, 5.986843466070591], + [205.77423095703125, 6.019932686217942], + [206.04608154296875, 6.021252909681261], + [209.36480712890625, 6.037231102920489], + [210.703857421875, 6.043606439928324], + [215.2139892578125, 6.06478541011501], + [225.83892822265625, 6.112974120371601], + [226.95465087890625, 6.117902255760311], + [232.79864501953125, 6.1433256889594094], + [240.647216796875, 6.176483527820343], + [243.1324462890625, 6.186757751007361], + [251.26702880859375, 6.219667373726848], + [253.72906494140625, 6.229418088083555], + [254.6866455078125, 6.233184983047428], + [257.2001953125, 6.243005711460192], + [257.7401123046875, 6.245102704489327], + [261.731201171875, 6.260468857392134], + [263.75, 6.268152459140511], + [265.5167236328125, 6.2748285545831655], + [273.9171142578125, 6.305976070434008], + [278.897705078125, 6.32399546069982], + [279.167236328125, 6.324961403980197], + [292.207275390625, 6.370613506132747], + [293.5975341796875, 6.375359978930309], + [293.9749755859375, 6.3766447200146], + [295.1998291015625, 6.380802563199264], + [297.2799072265625, 6.387824152942429], + [297.9285888671875, 6.390003820200831], + [298.1058349609375, 6.3905985680679], + [300.2803955078125, 6.397866642974941], + [307.531005859375, 6.421725738171608], + [308.1754150390625, 6.423818963102848], + [309.7344970703125, 6.428865255911759], + [314.2847900390625, 6.443449261058927], + [314.7236328125, 6.444844602076255], + [320.8406982421875, 6.464094341970107], + [321.2459716796875, 6.465356699668166], + [321.9031982421875, 6.467400466944125], + [323.457763671875, 6.472218114936839], + [330.82861328125, 6.4947499213823265], + [335.008544921875, 6.507305446835735], + [340.7171630859375, 6.524202033435675], + [348.4677734375, 6.546694993078936], + [349.1292724609375, 6.548591493378012], + [372.4288330078125, 6.613194950203132], + [376.7574462890625, 6.6247505436339065], + [378.4306640625, 6.629181796246806], + [390.9031982421875, 6.6616087711302185], + [405.7918701171875, 6.698989091751707], + [407.3646240234375, 6.702857353572475], + [413.3758544921875, 6.717505881986416], + [415.7354736328125, 6.723197804327891], + [417.193603515625, 6.726699007993023], + [420.874755859375, 6.735483889307782], + [429.2635498046875, 6.755219602793124], + [429.756103515625, 6.756366380816258], + [433.9931640625, 6.766177290841293], + [434.0106201171875, 6.766217511883346], + [440.073974609375, 6.780091308338912], + [450.2220458984375, 6.802889310303153], + [455.017578125, 6.813484439494547], + [457.1668701171875, 6.818196843455478], + [457.5068359375, 6.818940201487998], + [459.2913818359375, 6.822833193143805], + [459.492431640625, 6.82327083544577], + [459.743896484375, 6.823817951018], + [464.888427734375, 6.834945773756887], + [464.96630859375, 6.835113285253827], + [467.6949462890625, 6.840964582694129], + [468.86767578125, 6.84346890521034], + [470.5927734375, 6.847141429556457], + [481.109619140625, 6.869243403190376], + [487.4595947265625, 6.882355637062964], + [488.521484375, 6.884531678915821], + [492.8812255859375, 6.89341643293734], + [494.0684814453125, 6.895822338701104], + [496.4613037109375, 6.900653737167637], + [716.154052734375, 7.2670429692740965], + [1799.92578125, 8.188647968122073], + [3564.845703125, 8.872023251113289], + [7139.869140625, 9.566596912986167], + [12081.22265625, 10.092554861905608], + [22810.2421875, 10.728112113864427], + [46598.96875, 11.442480870715618], + [108493.375, 12.28759157077177], + [153860.8125, 12.636950838344218], + [307019.5, 13.327813723030063], + [682577.25, 14.126778167009777], + [1788919, 15.090269265334971], + [3769169, 15.835512291283944], + [4327820, 15.973721689554742], + [11044024, 16.910547205715446], + [21423208, 17.573132558903225], + [62828288, 18.649063156437965], + [70207360, 18.760110887365155], + [154231424, 19.547111966180875], + [294509056, 20.193967491567523], + [1070557184, 21.484592263156223], + [1957922816, 22.088297141021556], + [3912507392, 22.780591462699917], + [7279233024, 23.401438520318692], + [9665245184, 23.684949498080787], + [22627590144, 24.5355829820426], + [60601991168, 25.520740767599584], + [134018236416, 26.31438890085422], + [204864946176, 26.73876398039979], + [284346286080, 27.06660583008718], + [914576637952, 28.234874284944635], + [1581915832320, 28.78280496108106] +]; + +for (var [x, y] of sinh_data) + assertNear(Math.asinh(x), y); + +assertNear(Math.asinh(1e300), 691.4686750787737); +assertNear(Math.asinh(1e-300), 1e-300); +assertNear(Math.asinh(1e-5), 0.000009999999999833334); +assertNear(Math.asinh(0.3), 0.29567304756342244); +assertNear(Math.asinh(1), 0.881373587019543); + +for (var i = 0; i <= 80; i++) { + var x = (i - 40) / 4; + assertNear(Math.asinh(Math.sinh(x)), x); +} + +for (var i = -20; i < 20; i++) + assertNear(Math.asinh(Math.sinh(i)), i); + diff --git a/test/staging/sm/Math/asinh-exact.js b/test/staging/sm/Math/asinh-exact.js new file mode 100644 index 0000000000..bdc74cd2e6 --- /dev/null +++ b/test/staging/sm/Math/asinh-exact.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.asinh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.asinh(NaN), NaN); + +// If x is +0, the result is +0. +assert.sameValue(Math.asinh(+0), +0); + +// If x is −0, the result is −0. +assert.sameValue(Math.asinh(-0), -0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.asinh(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assert.sameValue(Math.asinh(-Infinity), -Infinity); + + diff --git a/test/staging/sm/Math/atanh-approx.js b/test/staging/sm/Math/atanh-approx.js new file mode 100644 index 0000000000..af36caaf2a --- /dev/null +++ b/test/staging/sm/Math/atanh-approx.js @@ -0,0 +1,290 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var tanh_data = [ + [-0.9999983310699463, -6.998237084679027], + [-0.9999978542327881, -6.87257975132917], + [-0.999992847442627, -6.2705920974657525], + [-0.9999861717224121, -5.940967614084813], + [-0.9999828338623047, -5.832855225378502], + [-0.9999399185180664, -5.20646301208756], + [-0.9998834133148193, -4.8749821841810785], + [-0.9998509883880615, -4.752279497280338], + [-0.9996016025543213, -4.260504202858904], + [-0.9993612766265869, -4.0244334353203115], + [-0.9989283084869385, -3.7655641082999236], + [-0.9969782829284668, -3.246782610980921], + [-0.9950058460235596, -2.9950671179940938], + [-0.9942638874053955, -2.9256242749609536], + [-0.990715742111206, -2.6839646283308363], + [-0.9903340339660645, -2.663723350226518], + [-0.9760982990264893, -2.207464998348322], + [-0.975830078125, -2.201817459680556], + [-0.9728245735168457, -2.1424542308291437], + [-0.9643559455871582, -2.0046686756020917], + [-0.9377224445343018, -1.7188337346177065], + [-0.9362406730651855, -1.7066940482565154], + [-0.9310147762298584, -1.6659543005533146], + [-0.9284839630126953, -1.6472838718760747], + [-0.9270248413085938, -1.6368067340881562], + [-0.9075665473937988, -1.5135473477311114], + [-0.897477388381958, -1.4590986086331497], + [-0.8920106887817383, -1.431681573516303], + [-0.8776559829711914, -1.365471286049011], + [-0.864722728729248, -1.3117705583444539], + [-0.8482067584991455, -1.249725893334944], + [-0.8056559562683105, -1.1145246028592257], + [-0.8048388957977295, -1.112200609756455], + [-0.7801985740661621, -1.0458778330822556], + [-0.7749934196472168, -1.032711173436253], + [-0.7619285583496094, -1.0007967281362184], + [-0.7504425048828125, -0.9739672824457072], + [-0.7495596408843994, -0.9719492983286864], + [-0.7481319904327393, -0.968698942014487], + [-0.7459518909454346, -0.9637657636705832], + [-0.7401137351989746, -0.9507308314464193], + [-0.7289731502532959, -0.9265325319867653], + [-0.7226788997650146, -0.9132299082876396], + [-0.7161557674407959, -0.8997082193533088], + [-0.7017018795013428, -0.8706453720344796], + [-0.7013418674468994, -0.86993650130945], + [-0.691054105758667, -0.8499705913361888], + [-0.6847054958343506, -0.837919455842005], + [-0.6838164329528809, -0.8362476144993315], + [-0.6747090816497803, -0.8193374156276964], + [-0.6575610637664795, -0.7885046044142132], + [-0.6522045135498047, -0.7791255597799839], + [-0.6261923313140869, -0.7351275788820003], + [-0.623173713684082, -0.7301771459970386], + [-0.6067488193511963, -0.7037597526130627], + [-0.5838055610656738, -0.6682166303197608], + [-0.579524040222168, -0.6617457665293066], + [-0.5760939121246338, -0.656596458857398], + [-0.5654678344726562, -0.6408350116350283], + [-0.5578761100769043, -0.6297442839791668], + [-0.5523209571838379, -0.6217149641475687], + [-0.5396339893341064, -0.6036390747171698], + [-0.5128989219665527, -0.5666556256064771], + [-0.5087778568267822, -0.5610793900942042], + [-0.4977825880050659, -0.546353950571504], + [-0.4913865327835083, -0.5378865967606703], + [-0.48976075649261475, -0.5357455496477738], + [-0.48493504524230957, -0.5294166456244711], + [-0.4479050636291504, -0.4820764946679979], + [-0.4461095333099365, -0.4798325976916711], + [-0.4429593086242676, -0.47590653371561276], + [-0.42827916145324707, -0.45778739362936793], + [-0.40590059757232666, -0.4306933608076879], + [-0.40029656887054443, -0.4240020382545707], + [-0.3961341381072998, -0.4190551379319939], + [-0.3836275339126587, -0.40430627175908734], + [-0.36686253547668457, -0.3847928551425507], + [-0.3657644987106323, -0.38352464227459343], + [-0.33507001399993896, -0.3485286317501442], + [-0.32572221755981445, -0.3380352468276522], + [-0.3191967010498047, -0.3307524237890151], + [-0.3000025749206543, -0.3095224337886503], + [-0.29665136337280273, -0.3058438250228025], + [-0.2944457530975342, -0.3034271164344305], + [-0.2872810363769531, -0.29560018347246825], + [-0.27738428115844727, -0.28484608203169437], + [-0.2390844225883484, -0.2438028008332661], + [-0.23685944080352783, -0.24144425169391517], + [-0.2253856658935547, -0.2293228153248168], + [-0.22283810377120972, -0.22664053064745143], + [-0.21552443504333496, -0.21895773601143995], + [-0.2153375744819641, -0.21876178107952995], + [-0.21016258001327515, -0.21334143320771737], + [-0.20250272750854492, -0.2053409277979887], + [-0.19156384468078613, -0.19396008474133075], + [-0.18251943588256836, -0.18458771439322938], + [-0.17464947700500488, -0.17645844608618066], + [-0.15646183490753174, -0.15775766677189154], + [-0.15580910444259644, -0.15708862621964176], + [-0.15365445613861084, -0.15488112515549593], + [-0.122499018907547, -0.12311733609904851], + [-0.1088167130947113, -0.10924929296737837], + [-0.08792558312416077, -0.08815322150790302], + [-0.08401328325271606, -0.08421178632314608], + [-0.06121261417865753, -0.06128924075509796], + [-0.05341699719429016, -0.05346789060550386], + [-0.05047759413719177, -0.05052053189238029], + [-0.02924579381942749, -0.029254136237332657], + [-0.02485968917608261, -0.02486481220617492], + [-0.020469173789024353, -0.02047203328100153], + [-0.01882001757621765, -0.018822240021756347], + [-0.016152501106262207, -0.016153906073109205], + [-0.0032715508714318275, -0.003271562543358962], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.3050326092288742e-8, 2.3050326092288745e-8], + [5.9392490925347374e-8, 5.939249092534745e-8], + [1.166764889148908e-7, 1.1667648891489133e-7], + [2.3799674409019644e-7, 2.3799674409020094e-7], + [4.684659415943315e-7, 4.684659415943658e-7], + [9.382699772686465e-7, 9.382699772689218e-7], + [0.00000110398559627356, 0.0000011039855962740086], + [0.0000032917760108830407, 0.0000032917760108949305], + [0.00000751721381675452, 0.000007517213816896115], + [0.000015114666894078255, 0.000015114666895229252], + [0.00002986399340443313, 0.00002986399341331128], + [0.00003387028118595481, 0.000033870281198906756], + [0.00009066011989489198, 0.00009066012014327826], + [0.00021949532674625516, 0.0002194953302712184], + [0.00043952150736004114, 0.0004395215356621756], + [0.0006333151832222939, 0.0006333152678940465], + [0.001115123275667429, 0.0011151237378863419], + [0.001962467096745968, 0.001962469616086656], + [0.005553754046559334, 0.005553811147953338], + [0.007324676960706711, 0.0073248079567425], + [0.008691128343343735, 0.008691347183450786], + [0.011912941932678223, 0.011913505535037906], + [0.02993336319923401, 0.029942308168570204], + [0.05124260485172272, 0.05128752666822782], + [0.05473744869232178, 0.05479221508125444], + [0.06158891320228577, 0.061666963819518306], + [0.09375360608100891, 0.09402975380882211], + [0.09442159533500671, 0.09470370926367391], + [0.09443172812461853, 0.09471393321406026], + [0.09943729639053345, 0.09976699249016487], + [0.11201295256614685, 0.11248498303558895], + [0.12310260534286499, 0.12373016402339168], + [0.13562965393066406, 0.13647060950861248], + [0.13763350248336792, 0.13851257866094746], + [0.14749455451965332, 0.14857829980464834], + [0.1618971824645996, 0.16333433166790448], + [0.17051106691360474, 0.17219298693637355], + [0.17051833868026733, 0.17220047646299907], + [0.18562912940979004, 0.18780647318150087], + [0.18898820877075195, 0.1912876932893582], + [0.23206615447998047, 0.23637212433914523], + [0.23480379581451416, 0.2392675448267427], + [0.2646920680999756, 0.27114729033023005], + [0.2794986963272095, 0.2871382059344433], + [0.28789305686950684, 0.2962673858386819], + [0.292596697807312, 0.30140373665239234], + [0.3101649284362793, 0.320727882769785], + [0.3109246492385864, 0.3215686893944558], + [0.31145012378692627, 0.3221505056451929], + [0.3271782398223877, 0.3396649461699478], + [0.3574345111846924, 0.37394153436545424], + [0.3593693971633911, 0.37616159223090223], + [0.35960352420806885, 0.37643046596933716], + [0.3626827001571655, 0.3799714809649667], + [0.38961827754974365, 0.4113499159905353], + [0.3904266357421875, 0.41230330080214], + [0.3981136083602905, 0.4214052375603139], + [0.411507248878479, 0.43742438709579096], + [0.4120509624481201, 0.43807911823743495], + [0.41868770122528076, 0.4460997186945703], + [0.42136549949645996, 0.4493511447897729], + [0.4516327381134033, 0.48674948990473677], + [0.4538639783859253, 0.4895560176112375], + [0.4655507802963257, 0.5043748446613433], + [0.48124635219573975, 0.5246050193978663], + [0.48621630668640137, 0.5310932154891663], + [0.4898730516433716, 0.5358932909903701], + [0.5024838447570801, 0.5526234425942533], + [0.5074074268341064, 0.5592320547729962], + [0.5093221664428711, 0.5618140818296767], + [0.5143489837646484, 0.5686253097655146], + [0.5154285430908203, 0.5700943191671631], + [0.5234100818634033, 0.5810250825991418], + [0.5274472236633301, 0.5866018515043636], + [0.5309803485870361, 0.5915094458340507], + [0.5477793216705322, 0.6152030999229688], + [0.5577394962310791, 0.6295459624918965], + [0.5582785606384277, 0.6303287742357745], + [0.5843560695648193, 0.6690521906099505], + [0.5871362686157227, 0.6732844960442398], + [0.5878911018371582, 0.6744372167164567], + [0.5903406143188477, 0.6781887236623534], + [0.5945003032684326, 0.684597775489552], + [0.5957975387573242, 0.6866065102131665], + [0.5961520671844482, 0.6871563252400655], + [0.6005008220672607, 0.6939300827887145], + [0.6150004863739014, 0.7169242329194352], + [0.6162893772125244, 0.7189998055497108], + [0.6194069385528564, 0.7240422748778544], + [0.6285066604614258, 0.7389438896054792], + [0.6293842792510986, 0.7403958734869583], + [0.6416172981262207, 0.7609178886018204], + [0.6424276828765869, 0.7622965466812235], + [0.6437420845031738, 0.7645378650643101], + [0.6468508243560791, 0.769864795178161], + [0.6615910530090332, 0.7956379107512945], + [0.669950008392334, 0.8106524185805045], + [0.6813662052154541, 0.8316597473423232], + [0.6968657970428467, 0.8611812790659296], + [0.6981887817382812, 0.8637579113749143], + [0.7447831630706787, 0.9611360201710216], + [0.7518312931060791, 0.9771540941752986], + [0.7534394264221191, 0.9808634133542229], + [0.7567856311798096, 0.9886489208209699], + [0.7817282676696777, 1.0497991719828956], + [0.8115026950836182, 1.1314141444187586], + [0.814647912979126, 1.1406947755584418], + [0.8266689777374268, 1.1775230833699681], + [0.8313877582550049, 1.1926138225701433], + [0.8343038558959961, 1.2021323323039612], + [0.8416652679443359, 1.2268570644335162], + [0.8584413528442383, 1.2873896671573652], + [0.8678996562957764, 1.3245040433929398], + [0.8679344654083252, 1.3246451309261607], + [0.8800599575042725, 1.3760334877782177], + [0.9003539085388184, 1.4740852961194106], + [0.9099440574645996, 1.5271990851861994], + [0.9142425060272217, 1.5527768948273004], + [0.9149219989776611, 1.556931837197936], + [0.9184908866882324, 1.5792896628381612], + [0.9188928604125977, 1.5818663359427627], + [0.919395923614502, 1.5851082843320008], + [0.9296839237213135, 1.6560555223295368], + [0.9298396110534668, 1.6572041418041492], + [0.9352962970733643, 1.6990986433619266], + [0.9376416206359863, 1.718164398807965], + [0.9410912990570068, 1.7475084077246632], + [0.962122917175293, 1.9737180163455101], + [0.9748215675354004, 2.1811227771083783], + [0.9769454002380371, 2.2257214499698255], + [0.985663890838623, 2.4654635601650536], + [0.9880380630493164, 2.5565869228142004], + [0.9928233623504639, 2.8132383539094192], + [1e-300, 1e-300], + [0.00001, 0.000010000000000333334], + [0.3, 0.3095196042031117], + [1e-30, 1e-30], + [1e-10, 1e-10], +]; + +var sloppy_tolerance = 2; // FIXME + +for (var [x, y] of tanh_data) + assertNear(Math.atanh(x), y, sloppy_tolerance); + +assertNear(Math.atanh(+3 / 5), +Math.log(2), sloppy_tolerance); +assertNear(Math.atanh(-3 / 5), -Math.log(2), sloppy_tolerance); + +for (var i = -1; i < 1; i += 0.05) + assertNear(Math.atanh(Math.tanh(i)), i, sloppy_tolerance); + diff --git a/test/staging/sm/Math/atanh-exact.js b/test/staging/sm/Math/atanh-exact.js new file mode 100644 index 0000000000..677531be83 --- /dev/null +++ b/test/staging/sm/Math/atanh-exact.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.atanh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.atanh(NaN), NaN); + +// If x is less than −1, the result is NaN. +assert.sameValue(Math.atanh(-ONE_PLUS_EPSILON), NaN); +assert.sameValue(Math.atanh(-Number.MAX_VALUE), NaN); +assert.sameValue(Math.atanh(-Infinity), NaN); + +for (var i = -5; i < -1; i += 0.1) + assert.sameValue(Math.atanh(i), NaN); + +// If x is greater than 1, the result is NaN. +assert.sameValue(Math.atanh(ONE_PLUS_EPSILON), NaN); +assert.sameValue(Math.atanh(Number.MAX_VALUE), NaN); +assert.sameValue(Math.atanh(Infinity), NaN); + +for (var i = +5; i > +1; i -= 0.1) + assert.sameValue(Math.atanh(i), NaN); + +// If x is −1, the result is −∞. +assert.sameValue(Math.atanh(-1), -Infinity); + +// If x is +1, the result is +∞. +assert.sameValue(Math.atanh(+1), Infinity); + +// If x is +0, the result is +0. +assert.sameValue(Math.atanh(+0), +0); + +// If x is −0, the result is −0. +assert.sameValue(Math.atanh(-0), -0); + + diff --git a/test/staging/sm/Math/cbrt-approx.js b/test/staging/sm/Math/cbrt-approx.js new file mode 100644 index 0000000000..1f9614c68d --- /dev/null +++ b/test/staging/sm/Math/cbrt-approx.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Math.cbrt(1), 1); +assert.sameValue(Math.cbrt(-1), -1); + +assertNear(Math.cbrt(1e-300), 1e-100); +assertNear(Math.cbrt(-1e-300), -1e-100); + +var cbrt_data = [ + [ Math.E, 1.3956124250860895 ], + [ Math.PI, 1.4645918875615231 ], + [ Math.LN2, 0.8849970445005177 ], + [ Math.SQRT2, 1.1224620483093728 ] +]; + +for (var [x, y] of cbrt_data) + assertNear(Math.cbrt(x), y); + diff --git a/test/staging/sm/Math/cbrt-exact.js b/test/staging/sm/Math/cbrt-exact.js new file mode 100644 index 0000000000..635b4cf3eb --- /dev/null +++ b/test/staging/sm/Math/cbrt-exact.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.cbrt that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.cbrt(NaN), NaN); + +// If x is +0, the result is +0. +assert.sameValue(Math.cbrt(+0), +0); + +// If x is −0, the result is −0. +assert.sameValue(Math.cbrt(-0), -0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.cbrt(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assert.sameValue(Math.cbrt(-Infinity), -Infinity); + + diff --git a/test/staging/sm/Math/clz32.js b/test/staging/sm/Math/clz32.js new file mode 100644 index 0000000000..7db62e57fa --- /dev/null +++ b/test/staging/sm/Math/clz32.js @@ -0,0 +1,50 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Undefined and NaN end up as zero after ToUint32 +assert.sameValue(Math.clz32(), 32); +assert.sameValue(Math.clz32(NaN), 32); +assert.sameValue(Math.clz32.call(), 32); +// 0 +assert.sameValue(Math.clz32(null), 32); +assert.sameValue(Math.clz32(false), 32); +// 1 +assert.sameValue(Math.clz32(true), 31); +// 3 +assert.sameValue(Math.clz32(3.5), 30); +// NaN -> 0 +assert.sameValue(Math.clz32({}), 32); +// 2 +assert.sameValue(Math.clz32({valueOf: function() { return 2; }}), 30); +// 0 -> 0 +assert.sameValue(Math.clz32([]), 32); +assert.sameValue(Math.clz32(""), 32); +// NaN -> 0 +assert.sameValue(Math.clz32([1, 2, 3]), 32); +assert.sameValue(Math.clz32("bar"), 32); +// 15 +assert.sameValue(Math.clz32("15"), 28); + + +assert.sameValue(Math.clz32(0x80000000), 0); +assert.sameValue(Math.clz32(0xF0FF1000), 0); +assert.sameValue(Math.clz32(0x7F8F0001), 1); +assert.sameValue(Math.clz32(0x3FFF0100), 2); +assert.sameValue(Math.clz32(0x1FF50010), 3); +assert.sameValue(Math.clz32(0x00800000), 8); +assert.sameValue(Math.clz32(0x00400000), 9); +assert.sameValue(Math.clz32(0x00008000), 16); +assert.sameValue(Math.clz32(0x00004000), 17); +assert.sameValue(Math.clz32(0x00000080), 24); +assert.sameValue(Math.clz32(0x00000040), 25); +assert.sameValue(Math.clz32(0x00000001), 31); +assert.sameValue(Math.clz32(0), 32); + diff --git a/test/staging/sm/Math/cosh-approx.js b/test/staging/sm/Math/cosh-approx.js new file mode 100644 index 0000000000..57da63d5a3 --- /dev/null +++ b/test/staging/sm/Math/cosh-approx.js @@ -0,0 +1,286 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Math.cosh(1000), Infinity); +assert.sameValue(Math.cosh(Number.MAX_VALUE), Infinity); +assertNear(Math.cosh(1e-30), 1); +assertNear(Math.cosh(1e-10), 1); + +var cosh_data = [ + [0.0016914556651292944, 1.0000014305114746], + [0.001953124689559275, 1.0000019073486328], + [0.003782208044661295, 1.000007152557373], + [0.005258943946801101, 1.000013828277588], + [0.005859366618129203, 1.0000171661376953], + [0.010961831992188852, 1.0000600814819336], + [0.015285472131830425, 1.0001168251037598], + [0.017249319093529877, 1.0001487731933594], + [0.028218171738655373, 1.0003981590270996], + [0.03573281468231457, 1.000638484954834], + [0.046287402472878776, 1.0010714530944824], + [0.07771996527168971, 1.0030217170715332], + [0.0998975930860278, 1.0049939155578613], + [0.13615938768032465, 1.0092840194702148], + [0.21942279004958354, 1.024169921875], + [0.3511165938166055, 1.0622773170471191], + [0.48975026711288183, 1.1223440170288086], + [0.692556883708491, 1.2495574951171875], + [0.954530572221414, 1.4912219047546387], + [1.307581416910453, 1.983847141265869], + [1.4035188779741334, 2.1576128005981445], + [1.5250070845427517, 2.406397819519043], + [1.8905372013072799, 3.386958122253418], + [2.1735673399948254, 4.451677322387695], + [2.625091127868242, 6.939132690429686], + [2.737434918695162, 7.756023406982421], + [2.8740317167801948, 8.88236999511719], + [2.97998639328949, 9.869171142578123], + [3.516549380542481, 16.848876953125], + [3.51867003468025, 16.884582519531254], + [3.593185165198829, 18.18859100341797], + [3.6273672142963385, 18.82012176513672], + [3.646553244410946, 19.184181213378906], + [3.872413451393967, 24.03952026367187], + [3.972085568933329, 26.556991577148434], + [4.022209178119238, 27.921104431152337], + [4.168428891496629, 32.31466674804686], + [4.240546229861005, 34.730087280273445], + [4.290698214968891, 36.51556396484376], + [4.352722738491574, 38.851287841796875], + [4.594386162629449, 49.46875], + [4.598500387004538, 49.67265319824219], + [4.7152173401856095, 55.821014404296896], + [4.73822104001982, 57.119781494140604], + [4.793733825338029, 60.37983703613279], + [4.8435923769530165, 63.46618652343747], + [4.849190310904695, 63.82241821289062], + [4.85767897228448, 64.36642456054685], + [4.880061548144127, 65.82318115234375], + [4.921430721025434, 68.60302734374997], + [4.94406835208057, 70.17358398437497], + [4.967000841791218, 71.80126953124997], + [5.016014824864732, 75.40786743164065], + [5.017205657609766, 75.49771118164062], + [5.0506448716550825, 78.06475830078126], + [5.0707363201405276, 79.64892578125], + [5.073517411135063, 79.87072753906253], + [5.101574796209937, 82.14324951171874], + [5.152357710985635, 86.4221496582031], + [5.167705692500117, 87.75869750976562], + [5.2390637098028074, 94.24942016601562], + [5.247023676519904, 95.00259399414062], + [5.258134994273664, 96.06402587890626], + [5.289261389093961, 99.10101318359374], + [5.345425863147171, 104.82595825195315], + [5.3555664787245885, 105.89431762695308], + [5.363617180711895, 106.750244140625], + [5.388152468690488, 109.40167236328122], + [5.405320225963013, 111.2959899902344], + [5.417698597745429, 112.68215942382815], + [5.445406415908933, 115.8478698730469], + [5.501396249028249, 122.51895141601562], + [5.531718947357248, 126.29083251953128], + [5.544277233951787, 127.88677978515626], + [5.547444176085567, 128.29241943359372], + [5.556786759298988, 129.49658203125006], + [5.625710723366437, 138.7365112304687], + [5.628934733085022, 139.18450927734378], + [5.634566685055491, 139.97058105468747], + [5.660401141376928, 143.63366699218747], + [5.698541939965668, 149.21765136718753], + [5.7078698961812995, 150.6160278320313], + [5.714741890601693, 151.6546020507813], + [5.735111323217677, 154.77532958984378], + [5.761781191641161, 158.95861816406253], + [5.763503378028959, 159.23260498046878], + [5.810483079631769, 166.89166259765622], + [5.824362807770767, 169.22418212890625], + [5.833939098607025, 170.85247802734372], + [5.861586030831371, 175.64184570312503], + [5.866335876872544, 176.47808837890625], + [5.869449614294116, 177.02844238281247], + [5.879497954012966, 178.81622314453122], + [5.893213844044451, 181.28570556640625], + [5.944588630523773, 190.84246826171866], + [5.947493525920713, 191.39764404296875], + [5.962341215900494, 194.26062011718753], + [5.9656082276276, 194.89630126953122], + [5.9749284849312865, 196.7212524414062], + [5.975165500176202, 196.76788330078128], + [5.981706804024238, 198.05920410156241], + [5.991310884439669, 199.9705200195312], + [6.004868209578554, 202.70001220703122], + [6.0159406892865155, 204.95684814453116], + [6.025476453825986, 206.92059326171866], + [6.047172064627678, 211.45886230468741], + [6.0479418642231595, 211.62170410156256], + [6.050479329955437, 212.1593627929687], + [6.086466833749719, 219.93341064453125], + [6.101870903204913, 223.3474731445312], + [6.1249427443985525, 228.56036376953128], + [6.129204755426344, 229.53656005859375], + [6.136241935513706, 231.1575317382813], + [6.153688953514383, 235.22589111328134], + [6.1619244798633215, 237.17108154296884], + [6.165012268502458, 237.90454101562506], + [6.187036941752032, 243.202392578125], + [6.191527178125454, 244.29687500000003], + [6.196001570568187, 245.3923950195312], + [6.197677082130341, 245.80389404296875], + [6.2133379061260285, 249.68365478515622], + [6.223871642756905, 252.3276367187501], + [6.228398760115369, 253.47253417968756], + [6.269692237869835, 264.1583251953126], + [6.276143287577458, 265.8679199218749], + [6.305884283737176, 273.89379882812494], + [6.306492908028797, 274.0605468750001], + [6.3065018163217115, 274.06298828125006], + [6.31104892482331, 275.3120117187501], + [6.3322712125431915, 281.2171630859374], + [6.343324976847916, 284.34289550781244], + [6.345081883725142, 284.84289550781256], + [6.353683609448096, 287.30358886718756], + [6.366114643735997, 290.8973388671876], + [6.373476431987165, 293.0467529296875], + [6.3734826803404045, 293.04858398437494], + [6.3862671775996915, 296.819091796875], + [6.389086936901673, 297.6572265625], + [6.424562459508495, 308.4062500000001], + [6.4506171773701535, 316.5472412109376], + [6.462221144761522, 320.24182128906256], + [6.468740575092418, 322.33642578125], + [6.472375224718483, 323.5101318359374], + [6.485834999462654, 327.8939208984375], + [6.486412623146554, 328.08337402343744], + [6.486812521370483, 328.214599609375], + [6.498698952535687, 332.1391601562501], + [6.521175044233963, 339.6888427734376], + [6.522595306993373, 340.171630859375], + [6.522766822935215, 340.2299804687499], + [6.52502285413445, 340.99841308593744], + [6.5445411825986985, 347.7194824218749], + [6.5451209675856825, 347.9211425781249], + [6.55061885367159, 349.8392333984375], + [6.560126626713879, 353.1812744140626], + [6.560510895819139, 353.31701660156244], + [6.565186990039135, 354.97302246093756], + [6.567067660815945, 355.64123535156233], + [6.588081320423386, 363.19360351562517], + [6.5896131163651415, 363.7503662109376], + [6.597598047275183, 366.66650390624983], + [6.608222493065004, 370.5828857421874], + [6.611563301604297, 371.822998046875], + [6.622421213257873, 375.88220214843756], + [6.625684248051368, 377.11071777343744], + [6.626950731244344, 377.58862304687483], + [6.630267034079059, 378.8428955078124], + [6.630977920761718, 379.11230468749994], + [6.636217452968849, 381.10388183593756], + [6.638857149899159, 382.1112060546874], + [6.641161660644278, 382.9927978515625], + [6.652047018118426, 387.1845703124999], + [6.658445560711748, 389.66992187499994], + [6.658790721334144, 389.8044433593749], + [6.675345858154136, 396.3114013671875], + [6.677094789236718, 397.00512695312494], + [6.6775691166680895, 397.1934814453124], + [6.679106750673113, 397.80468749999994], + [6.681712590609845, 398.84265136718744], + [6.682523938576487, 399.16638183593744], + [6.68274532345516, 399.2547607421874], + [6.685459416477178, 400.3398437499999], + [6.694456277839498, 403.9578857421875], + [6.6952522228540765, 404.27954101562517], + [6.6971746771142415, 405.05749511718744], + [6.702764738337774, 407.328125], + [6.7033022311799595, 407.54711914062506], + [6.710763953621196, 410.59948730468756], + [6.711256159037373, 410.8016357421876], + [6.712054288828399, 411.12963867187494], + [6.713939407502346, 411.9053955078124], + [6.722828986708716, 415.5833740234374], + [6.727835453862132, 417.66918945312506], + [6.734632628835641, 420.51782226562506], + [6.743787740494532, 424.38537597656233], + [6.744565219553757, 424.71545410156244], + [6.7715720212680655, 436.3419189453125], + [6.776510146304201, 438.50195312500017], + [6.778412462065226, 439.33691406250017], + [6.79247934060035, 445.5606689453126], + [6.809016260337229, 452.9901123046875], + [6.810747231716348, 453.7749023437499], + [6.817335895109251, 456.7745361328125], + [6.819910421197311, 457.9520263671875], + [6.821497844004013, 458.6795654296874], + [6.8254946428721475, 460.51647949218767], + [6.828433164406687, 461.87170410156256], + [6.834543470287694, 464.70251464843756], + [6.839609377592375, 467.06262207031267], + [6.839627933844213, 467.0712890625001], + [6.846084943645239, 470.09692382812494], + [6.856799276049143, 475.16076660156233], + [6.861822721577315, 477.5537109374998], + [6.864066049482581, 478.62622070312517], + [6.864420497333681, 478.79589843750017], + [6.866278653973069, 479.68640136718733], + [6.866487814627139, 479.7867431640625], + [6.8667493311188395, 479.9122314453126], + [6.872084270243208, 482.4793701171875], + [6.872164723177875, 482.5181884765627], + [6.874982560453874, 483.87976074218767], + [6.876191234145179, 484.46496582031233], + [6.877966548833207, 485.3258056640624], + [6.888721726428236, 490.57373046875006], + [6.89515989558997, 493.74230957031244], + [6.896232568812718, 494.2722167968751], + [6.900624415355815, 496.44775390624983], + [6.901816998553275, 497.0401611328125], + [6.9042162822876465, 498.23413085937483], + [7.193052598670793, 665.0791015625001], + [7.758155143419732, 1170.29150390625], + [8.323023697145112, 2058.795898437501], + [9.36298131161099, 5824.533203125004], + [9.810748008110926, 9114.308593750004], + [11.047341056314202, 31388.40624999998], + [11.584925435512535, 53732.765624999956], + [12.366958539207397, 117455.0937500001], + [13.107089828327874, 246210.62499999983], + [13.84248373881162, 513670.1250000003], + [14.27084873575108, 788353.2499999999], + [15.060339852215408, 1736170.999999999], + [15.835873313657556, 3770530.0000000005], + [15.977474039173265, 4344089.999999998], + [16.943967899150145, 11419360.000000006], + [17.943394339560967, 31023239.99999997], + [18.214035936745432, 40665424.00000006], + [19.374560581709215, 129788063.99999991], + [19.927723623778547, 225668224.00000027], + [20.619308638400597, 450631936.0000006], + [21.129986093026698, 750941952.0000008], + [22.05159150215413, 1887358976.0000033], + [22.734966842639743, 3738011648.0000052], + [23.42954051928097, 7486695423.99999], + [23.955498471391667, 12668080127.99998], + [24.591055724582848, 23918272512], + [25.305424481799395, 48862560256.00005], + [26.150535181949436, 113763549183.99998], + [26.499894449532565, 161334755328.00018], + [27.19075733422632, 321933279232.0004], + [27.989721778208146, 715734122496], + [28.953212876533797, 1875817529343.9976], +]; + +for (var [x, y] of cosh_data) + assertNear(Math.cosh(x), y); + +for (var i = -20; i < 20; i++) + assertNear(Math.cosh(i), (Math.exp(i) + Math.exp(-i)) / 2); + diff --git a/test/staging/sm/Math/cosh-exact.js b/test/staging/sm/Math/cosh-exact.js new file mode 100644 index 0000000000..6653e00963 --- /dev/null +++ b/test/staging/sm/Math/cosh-exact.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.cosh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.cosh(NaN), NaN); + +// If x is +0, the result is 1. +assert.sameValue(Math.cosh(+0), 1); + +// If x is −0, the result is 1. +assert.sameValue(Math.cosh(-0), 1); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.cosh(Infinity), Infinity); + +// If x is −∞, the result is +∞. +assert.sameValue(Math.cosh(-Infinity), Infinity); + + diff --git a/test/staging/sm/Math/exp-exact.js b/test/staging/sm/Math/exp-exact.js new file mode 100644 index 0000000000..89d9310ced --- /dev/null +++ b/test/staging/sm/Math/exp-exact.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.exp that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.exp(NaN), NaN); + +// If x is +0, the result is 1. +assert.sameValue(Math.exp(+0), 1); + +// If x is −0, the result is 1. +assert.sameValue(Math.exp(-0), 1); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.exp(Infinity), Infinity); + +// If x is −∞, the result is +0. +assert.sameValue(Math.exp(-Infinity), +0); + + +// Not guaranteed by the specification, but generally assumed to hold. + +// If x is 1, the result is Math.E. +assert.sameValue(Math.exp(1), Math.E); + +// If x is -1, the result is 1/Math.E. +assert.sameValue(Math.exp(-1), 1 / Math.E); + + diff --git a/test/staging/sm/Math/expm1-approx.js b/test/staging/sm/Math/expm1-approx.js new file mode 100644 index 0000000000..ef7f34c7df --- /dev/null +++ b/test/staging/sm/Math/expm1-approx.js @@ -0,0 +1,72 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertNear(Math.expm1(1e-300), 1e-300); +assertNear(Math.expm1(1e-100), 1e-100); +assertNear(Math.expm1(1e-14), 1.000000000000005e-14); +assertNear(Math.expm1(1e-6), 0.0000010000005000001665); + +var expm1_data = [ + [ -1.875817529344e-70, -1.875817529344e-70 ], + [ -7.09962844069878e-15, -7.099628440698755e-15 ], + [ -2.114990849122478e-10, -2.1149908488988187e-10 ], + [ -0.0000031404608812881633, -0.000003140455950046052 ], + + [ -0.0000011039855962733358, -0.0000011039849868814618 ], + [ -0.000015114666893502755, -0.0000151145526675006 ], + [ -0.000033870281179478836, -0.000033869707587981166 ], + [ -0.00043952149320897676, -0.00043942491778698985 ], + [ -0.005553725496786973, -0.005538332073473123 ], + [ -0.05122020579778827, -0.049930563302241604 ], + [ -0.4721357117742938, -0.3763311320344197 ], + [ -1.2781607348262256, -0.7214508446489242 ], + + [ 1.875817529344e-70, 1.875817529344e-70 ], + [ 6.261923313140869e-30, 6.261923313140869e-30 ], + [ 7.09962844069878e-15, 7.099628440698805e-15 ], + [ 1.3671879628418538e-12, 1.3671879628427884e-12 ], + [ 2.114990849122478e-10, 2.1149908493461373e-10 ], + [ 1.6900931765206906e-8, 1.6900931908027652e-8 ], + [ 0.0000031404608812881633, 0.0000031404658125405988 ], + + [ 0.0000011039855962733358, 0.0000011039862056656584 ], + [ 0.000015114666893502755, 0.000015114781120655907 ], + [ 0.000033870281179478836, 0.00003387085478392845 ], + [ 0.00043952149320897676, 0.0004396180969330924 ], + [ 0.005553725496786973, 0.005569176019645543 ], + [ 0.05122020579778827, 0.05255464640120383 ], + [ 0.4721357117742938, 0.6034149712523235 ], + [ 1.2781607348262256, 2.590030631181154 ], + + [ 3.0693960800487883, 20.528897017773147 ], + [ 5.560441648750136, 258.9376120972927 ], + [ 7.4227656046482595, 1672.6557833191303 ], + [ 11.378926299184645, 87458.07941992789 ], +]; + +for (var [x, y] of expm1_data) + assertNear(Math.expm1(x), y); + +var sloppy_tolerance = 34; + +var expm1_data_sloppy = [ + [ 20.11881628179155, 546375092.2355127 ], + [ 33.45034324980283, 336743709091858.2 ], + [ 46.43974518513109, 147409364838076710000 ], + [ 54.60105936314322, 5.163435870507142e+23 ], + [ 84.29619209850242, 4.067907545704549e+36 ], + [ 125.38131800315817, 2.8340959047812913e+54 ], + [ 216.85489905212918, 1.5096839294759775e+94 ], +]; + +for (var [x, y] of expm1_data_sloppy) + assertNear(Math.expm1(x), y, sloppy_tolerance); + diff --git a/test/staging/sm/Math/expm1-exact.js b/test/staging/sm/Math/expm1-exact.js new file mode 100644 index 0000000000..5417855762 --- /dev/null +++ b/test/staging/sm/Math/expm1-exact.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.expm1 that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.expm1(NaN), NaN); + +// If x is +0, the result is +0. +assert.sameValue(Math.expm1(+0), +0); + +// If x is −0, the result is −0. +assert.sameValue(Math.expm1(-0), -0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.expm1(Infinity), Infinity); + +// If x is −∞, the result is -1. +assert.sameValue(Math.expm1(-Infinity), -1); + + diff --git a/test/staging/sm/Math/expm1-monotonicity.js b/test/staging/sm/Math/expm1-monotonicity.js new file mode 100644 index 0000000000..86ee775158 --- /dev/null +++ b/test/staging/sm/Math/expm1-monotonicity.js @@ -0,0 +1,103 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 897634; +var summary = "expm1 should be monotonically increasing"; + +print(BUGNUMBER + ": " + summary); + +function test(x, prev, next) { + assert.sameValue(Math.expm1(prev) <= Math.expm1(x), true); + assert.sameValue(Math.expm1(x) <= Math.expm1(next), true); +} + +// Thresholds in fdlibm expm1 implementation. + +// |hx| == 0x40862E42 or not +test(-709.7822265625, -709.7822265625001, -709.7822265624999); +test(709.7822265625, 709.7822265624999, 709.7822265625001); + +// |hx| == 0x4043687A or not +test(-38.81622314453125, -38.81622314453126, -38.81622314453124); +test(38.81622314453125, 38.81622314453124, 38.81622314453126); + +// |hx| == 0x7ff00000 or not +test(-1.7976931348623157e+308, -Infinity, -1.7976931348623155e+308); +test(1.7976931348623157e+308, 1.7976931348623155e+308, Infinity); + +// |hx| == 0x3fd62e42 or not +test(-0.3465733528137207, -0.34657335281372076, -0.34657335281372065); +test(0.3465733528137207, 0.34657335281372065, 0.34657335281372076); + +// |hx| == 0x3FF0A2B2 or not +test(-1.0397205352783203, -1.0397205352783205, -1.03972053527832); +test(1.0397205352783203, 1.03972053527832, 1.0397205352783205); + +// |hx| == 0x3c900000 or not +test(-5.551115123125783e-17, -5.551115123125784e-17, -5.551115123125782e-17); +test(5.551115123125783e-17, 5.551115123125782e-17, 5.551115123125784e-17); + +// x < -0.25 or not +test(-0.25, -0.25000000000000006, -0.24999999999999997); + +// k == -1 or k == -2 +test(-1.0397207708399179, -1.039720770839918, -1.0397207708399177); + +// k == -1 or k == 0 +test(-0.3465735912322998, -0.34657359123229986, -0.34657359123229975); + +// k == 0 or k == 1 +test(0.3465735912322998, 0.34657359123229975, 0.34657359123229986); + +// k == 1 or k == 2 +test(1.039720770839918, 1.0397207708399179, 1.0397207708399183); + +// k == 19 or k == 20 +test(13.516370020918933, 13.51637002091893, 13.516370020918934); + +// k == 56 or k == 57 +test(39.16281570163691, 39.1628157016369, 39.162815701636916); + +// k == 1023 or k == 1024 +test(709.436139303104, 709.4361393031039, 709.4361393031041); + +// k == 1024 or more +test(709.7827128933841, 709.782712893384, 709.7827128933842); + +// Some more random cases. +test(-1.7976931348623157e+308, -Infinity, -1.7976931348623155e+308); +test(-1e+223, -1.0000000000000002e+223, -9.999999999999999e+222); +test(-1e+100, -1.0000000000000002e+100, -9.999999999999998e+99); +test(-10000000000, -10000000000.000002, -9999999999.999998); +test(-100000, -100000.00000000001, -99999.99999999999); +test(-100, -100.00000000000001, -99.99999999999999); +test(-10, -10.000000000000002, -9.999999999999998); +test(-1, -1, -0.9999999999999999); +test(-0.01, -0.010000000000000002, -0.009999999999999998); +test(-0.00001, -0.000010000000000000003, -0.000009999999999999999); +test(-1e-10, -1.0000000000000002e-10, -9.999999999999999e-11); +test(-1e-100, -1.0000000000000001e-100, -9.999999999999999e-101); +test(-5e-324, -1e-323, 0); +test(0, -5e-324, 5e-324); +test(5e-324, 0, 1e-323); +test(1e-100, 9.999999999999999e-101, 1.0000000000000001e-100); +test(1e-10, 9.999999999999999e-11, 1.0000000000000002e-10); +test(0.00001, 0.000009999999999999999, 0.000010000000000000003); +test(0.01, 0.009999999999999998, 0.010000000000000002); +test(1, 0.9999999999999999, 1); +test(10, 9.999999999999998, 10.000000000000002); +test(100, 99.99999999999999, 100.00000000000001); +test(100000, 99999.99999999999, 100000.00000000001); +test(10000000000, 9999999999.999998, 10000000000.000002); +test(1e+100, 9.999999999999998e+99, 1.0000000000000002e+100); +test(1e+223, 9.999999999999999e+222, 1.0000000000000002e+223); +test(1.7976931348623157e+308, 1.7976931348623155e+308, Infinity); + diff --git a/test/staging/sm/Math/f16round.js b/test/staging/sm/Math/f16round.js new file mode 100644 index 0000000000..011908ad72 --- /dev/null +++ b/test/staging/sm/Math/f16round.js @@ -0,0 +1,164 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Some tests regarding conversion to Float16 +assert.sameValue(Math.f16round(), NaN); + +// Special values +assert.sameValue(Math.f16round(NaN), NaN); +assert.sameValue(Math.f16round(-Infinity), -Infinity); +assert.sameValue(Math.f16round(Infinity), Infinity); +assert.sameValue(Math.f16round(-0), -0); +assert.sameValue(Math.f16round(+0), +0); + +// Polyfill function for Float16 conversion, adapted from +// https://github.com/petamoriken/float16/. +// The original license is preseved below. +function toFloat16(num) { + // MIT License + + // Copyright (c) 2017-2024 Kenta Moriuchi + + // Permission is hereby granted, free of charge, to any person obtaining a copy + // of this software and associated documentation files (the "Software"), to deal + // in the Software without restriction, including without limitation the rights + // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + // copies of the Software, and to permit persons to whom the Software is + // furnished to do so, subject to the following conditions: + + // The above copyright notice and this permission notice shall be included in all + // copies or substantial portions of the Software. + + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + // SOFTWARE. + + const INVERSE_OF_EPSILON = 1 / Number.EPSILON; + + /** + * rounds to the nearest value; + * if the number falls midway, it is rounded to the nearest value with an even least significant digit + * @param {number} num + * @returns {number} + */ + function roundTiesToEven(num) { + return (num + INVERSE_OF_EPSILON) - INVERSE_OF_EPSILON; + } + + const FLOAT16_MIN_VALUE = 6.103515625e-05; + const FLOAT16_MAX_VALUE = 65504; + const FLOAT16_EPSILON = 0.0009765625; + + const FLOAT16_EPSILON_MULTIPLIED_BY_FLOAT16_MIN_VALUE = FLOAT16_EPSILON * FLOAT16_MIN_VALUE; + const FLOAT16_EPSILON_DEVIDED_BY_EPSILON = FLOAT16_EPSILON * INVERSE_OF_EPSILON; + + function roundToFloat16(num) { + const number = +num; + + // NaN, Infinity, -Infinity, 0, -0 + if (!isFinite(number) || number === 0) { + return number; + } + + // finite except 0, -0 + const sign = number > 0 ? 1 : -1; + const absolute = Math.abs(number); + + // small number + if (absolute < FLOAT16_MIN_VALUE) { + return sign * roundTiesToEven(absolute / FLOAT16_EPSILON_MULTIPLIED_BY_FLOAT16_MIN_VALUE) * FLOAT16_EPSILON_MULTIPLIED_BY_FLOAT16_MIN_VALUE; + } + + const temp = (1 + FLOAT16_EPSILON_DEVIDED_BY_EPSILON) * absolute; + const result = temp - (temp - absolute); + + // large number + if (result > FLOAT16_MAX_VALUE || isNaN(result)) { + return sign * Infinity; + } + + return sign * result; + } + + return roundToFloat16(num); +}; + +// A test on a certain range of numbers, including big numbers, so that +// we get a loss in precision for some of them. +for (var i = 0; i < 64; ++i) { + var p = Math.pow(2, i) + 1; + assert.sameValue(Math.f16round(p), toFloat16(p)); + assert.sameValue(Math.f16round(-p), toFloat16(-p)); +} + +/******************************************** +/* Tests on maximal Float16 / Double values * +/*******************************************/ +function maxValue(exponentWidth, significandWidth) { + var n = 0; + var maxExp = Math.pow(2, exponentWidth - 1) - 1; + for (var i = significandWidth; i >= 0; i--) + n += Math.pow(2, maxExp - i); + return n; +} + +var DBL_MAX = maxValue(11, 52); +assert.sameValue(DBL_MAX, Number.MAX_VALUE); // sanity check + +// Finite as a double, too big for a float16 +assert.sameValue(Math.f16round(DBL_MAX), Infinity); + +var FLT16_MAX = maxValue(5, 10); +assert.sameValue(Math.f16round(FLT16_MAX), FLT16_MAX); +assert.sameValue(Math.f16round(65519), FLT16_MAX); // round-nearest rounds down to FLT16_MAX +assert.sameValue(Math.f16round(65520), Infinity); // no longer rounds down to FLT16_MAX + +/********************************************************* +/******* Tests on denormalizations and roundings ********* +/********************************************************/ +function minValue(exponentWidth, significandWidth) { + return Math.pow(2, -(Math.pow(2, exponentWidth - 1) - 2) - significandWidth); +} + +var DBL_MIN = Math.pow(2, -1074); +assert.sameValue(DBL_MIN, Number.MIN_VALUE); // sanity check + +// Too small for a float16 +assert.sameValue(Math.f16round(DBL_MIN), 0); + +var FLT16_MIN = minValue(5, 10); +assert.sameValue(Math.f16round(FLT16_MIN), FLT16_MIN); + +assert.sameValue(Math.f16round(FLT16_MIN / 2), 0); // halfway, round-nearest rounds down to 0 (even) + +// FLT16_MIN + a small amount rounds up to FLT16_MIN +// Constant taken from https://github.com/petamoriken/float16/ +assert.sameValue(Math.f16round(2.980232238769531911744490042422139897126953655970282852649688720703125e-8), FLT16_MIN); + +assert.sameValue(Math.f16round(-FLT16_MIN), -FLT16_MIN); +assert.sameValue(Math.f16round(-FLT16_MIN / 2), -0); // halfway, round-nearest rounds up to -0 (even) +// -FLT16_MIN - a small amount rounds down to -FLT16_MIN +// Constant taken from https://github.com/petamoriken/float16/ +assert.sameValue(Math.f16round(2.980232238769531911744490042422139897126953655970282852649688720703125e-8), FLT16_MIN); + +// Test some constants from https://github.com/petamoriken/float16/ +assert.sameValue(Math.f16round(0.499994), 0.5); +assert.sameValue(Math.f16round(1.337), 1.3369140625); + +// This will round incorrectly if the implementation first rounds to Float32, +// then to Float16 +assert.sameValue(Math.f16round(1.00048828125000022204), 1.0009765625); + diff --git a/test/staging/sm/Math/fround.js b/test/staging/sm/Math/fround.js new file mode 100644 index 0000000000..58f6817f58 --- /dev/null +++ b/test/staging/sm/Math/fround.js @@ -0,0 +1,88 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Some tests regarding conversion to Float32 +assert.sameValue(Math.fround(), NaN); + +// Special values +assert.sameValue(Math.fround(NaN), NaN); +assert.sameValue(Math.fround(-Infinity), -Infinity); +assert.sameValue(Math.fround(Infinity), Infinity); +assert.sameValue(Math.fround(-0), -0); +assert.sameValue(Math.fround(+0), +0); + +// Polyfill function for Float32 conversion +var toFloat32 = (function() { + var f32 = new Float32Array(1); + function f(x) { + f32[0] = x; + return f32[0]; + } + return f; +})(); + +// A test on a certain range of numbers, including big numbers, so that +// we get a loss in precision for some of them. +for (var i = 0; i < 64; ++i) { + var p = Math.pow(2, i) + 1; + assert.sameValue(Math.fround(p), toFloat32(p)); + assert.sameValue(Math.fround(-p), toFloat32(-p)); +} + +/******************************************** +/* Tests on maximal Float32 / Double values * +/*******************************************/ +function maxValue(exponentWidth, significandWidth) { + var n = 0; + var maxExp = Math.pow(2, exponentWidth - 1) - 1; + for (var i = significandWidth; i >= 0; i--) + n += Math.pow(2, maxExp - i); + return n; +} + +var DBL_MAX = maxValue(11, 52); +assert.sameValue(DBL_MAX, Number.MAX_VALUE); // sanity check + +// Finite as a double, too big for a float +assert.sameValue(Math.fround(DBL_MAX), Infinity); + +var FLT_MAX = maxValue(8, 23); +assert.sameValue(Math.fround(FLT_MAX), FLT_MAX); +assert.sameValue(Math.fround(FLT_MAX + Math.pow(2, Math.pow(2, 8 - 1) - 1 - 23 - 2)), FLT_MAX); // round-nearest rounds down to FLT_MAX +assert.sameValue(Math.fround(FLT_MAX + Math.pow(2, Math.pow(2, 8 - 1) - 1 - 23 - 1)), Infinity); // no longer rounds down to FLT_MAX + +/********************************************************* +/******* Tests on denormalizations and roundings ********* +/********************************************************/ + +function minValue(exponentWidth, significandWidth) { + return Math.pow(2, -(Math.pow(2, exponentWidth - 1) - 2) - significandWidth); +} + +var DBL_MIN = Math.pow(2, -1074); +assert.sameValue(DBL_MIN, Number.MIN_VALUE); // sanity check + +// Too small for a float +assert.sameValue(Math.fround(DBL_MIN), 0); + +var FLT_MIN = minValue(8, 23); +assert.sameValue(Math.fround(FLT_MIN), FLT_MIN); + +assert.sameValue(Math.fround(FLT_MIN / 2), 0); // halfway, round-nearest rounds down to 0 (even) +assert.sameValue(Math.fround(FLT_MIN / 2 + Math.pow(2, -202)), FLT_MIN); // first double > FLT_MIN / 2, rounds up to FLT_MIN + +assert.sameValue(Math.fround(-FLT_MIN), -FLT_MIN); + +assert.sameValue(Math.fround(-FLT_MIN / 2), -0); // halfway, round-nearest rounds up to -0 (even) +assert.sameValue(Math.fround(-FLT_MIN / 2 - Math.pow(2, -202)), -FLT_MIN); // first double < -FLT_MIN / 2, rounds down to -FLT_MIN + diff --git a/test/staging/sm/Math/log10-approx.js b/test/staging/sm/Math/log10-approx.js new file mode 100644 index 0000000000..1e141651bb --- /dev/null +++ b/test/staging/sm/Math/log10-approx.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertNear(Math.log10(2), 0.3010299956639812); +assertNear(Math.log10(7), 0.8450980400142568); +assertNear(Math.log10(Math.E), Math.LOG10E); + +for (var i = -10; i < 10; i++) + assertNear(Math.log10(Math.pow(10, i)), i); + diff --git a/test/staging/sm/Math/log10-exact.js b/test/staging/sm/Math/log10-exact.js new file mode 100644 index 0000000000..ec076b365d --- /dev/null +++ b/test/staging/sm/Math/log10-exact.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.log10 that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.log10(NaN), NaN); + +// If x is less than 0, the result is NaN. +assert.sameValue(Math.log10(-1e-10), NaN); +assert.sameValue(Math.log10(-1e-5), NaN); +assert.sameValue(Math.log10(-1e-1), NaN); +assert.sameValue(Math.log10(-Number.MIN_VALUE), NaN); +assert.sameValue(Math.log10(-Number.MAX_VALUE), NaN); +assert.sameValue(Math.log10(-Infinity), NaN); + +for (var i = -1; i > -10; i--) + assert.sameValue(Math.log10(i), NaN); + +// If x is +0, the result is −∞. +assert.sameValue(Math.log10(+0), -Infinity); + +// If x is −0, the result is −∞. +assert.sameValue(Math.log10(-0), -Infinity); + +// If x is 1, the result is +0. +assert.sameValue(Math.log10(1), +0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.log10(Infinity), Infinity); + + diff --git a/test/staging/sm/Math/log1p-approx.js b/test/staging/sm/Math/log1p-approx.js new file mode 100644 index 0000000000..d4e10db4bc --- /dev/null +++ b/test/staging/sm/Math/log1p-approx.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertNear(Math.log1p(1e-300), 1e-300); +assertNear(Math.log1p(1e-15), 9.999999999999995e-16); +assertNear(Math.log1p(1e-6), 9.999995000003334e-7); + +var log1p_data = [ + [ 1.875817529344e-70, 1.875817529344e-70 ], + [ 6.261923313140869e-30, 6.261923313140869e-30 ], + [ 7.09962844069878e-15, 7.099628440698755e-15 ], + [ 1.3671879628418538e-12, 1.3671879628409192e-12 ], + [ 2.114990849122478e-10, 2.1149908488988187e-10 ], + [ 1.6900931765206906e-8, 1.690093162238616e-8 ], + [ 0.0000709962844069878, 0.00007099376429006658 ], + [ 0.0016793412882520897, 0.00167793277137076 ], + [ 0.011404608812881634, 0.011340066517988035 ], +]; + +for (var [x, y] of log1p_data) + assertNear(Math.log1p(x), y); + diff --git a/test/staging/sm/Math/log1p-exact.js b/test/staging/sm/Math/log1p-exact.js new file mode 100644 index 0000000000..981635d7d1 --- /dev/null +++ b/test/staging/sm/Math/log1p-exact.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.log1p that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.log1p(NaN), NaN); + +// If x is less than -1, the result is NaN. +assert.sameValue(Math.log1p(-1 - 1e-10), NaN); +assert.sameValue(Math.log1p(-1 - 1e-5), NaN); +assert.sameValue(Math.log1p(-1 - 1e-1), NaN); +assert.sameValue(Math.log1p(-ONE_PLUS_EPSILON), NaN); + +for (var i = -2; i > -20; i--) + assert.sameValue(Math.log1p(i), NaN); + +// If x is -1, the result is -∞. +assert.sameValue(Math.log1p(-1), -Infinity); + +// If x is +0, the result is +0. +assert.sameValue(Math.log1p(+0), +0); + +// If x is −0, the result is −0. +assert.sameValue(Math.log1p(-0), -0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.log1p(Infinity), Infinity); + + diff --git a/test/staging/sm/Math/log2-approx.js b/test/staging/sm/Math/log2-approx.js new file mode 100644 index 0000000000..239f7ffa69 --- /dev/null +++ b/test/staging/sm/Math/log2-approx.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var i = -1074; i < 1023; i++) + assertNear(Math.log2(Math.pow(2, i)), i); + +assertNear(Math.log2(5), 2.321928094887362); +assertNear(Math.log2(7), 2.807354922057604); +assertNear(Math.log2(Math.E), Math.LOG2E); + diff --git a/test/staging/sm/Math/log2-exact.js b/test/staging/sm/Math/log2-exact.js new file mode 100644 index 0000000000..5bb01e9619 --- /dev/null +++ b/test/staging/sm/Math/log2-exact.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.log2 that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.log2(NaN), NaN); + +// If x is less than 0, the result is NaN. +assert.sameValue(Math.log2(-1e-10), NaN); +assert.sameValue(Math.log2(-1e-5), NaN); +assert.sameValue(Math.log2(-1e-1), NaN); +assert.sameValue(Math.log2(-Number.MIN_VALUE), NaN); +assert.sameValue(Math.log2(-Number.MAX_VALUE), NaN); +assert.sameValue(Math.log2(-Infinity), NaN); + +for (var i = -1; i > -10; i--) + assert.sameValue(Math.log2(i), NaN); + +// If x is +0, the result is −∞. +assert.sameValue(Math.log2(+0), -Infinity); + +// If x is −0, the result is −∞. +assert.sameValue(Math.log2(-0), -Infinity); + +// If x is 1, the result is +0. +assert.sameValue(Math.log2(1), +0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.log2(Infinity), Infinity); + + diff --git a/test/staging/sm/Math/sign.js b/test/staging/sm/Math/sign.js new file mode 100644 index 0000000000..40607e8512 --- /dev/null +++ b/test/staging/sm/Math/sign.js @@ -0,0 +1,44 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// If x is NaN, the result is NaN. +assert.sameValue(Math.sign(NaN), NaN); + +// If x is −0, the result is −0. +assert.sameValue(Math.sign(-0), -0); + +// If x is +0, the result is +0. +assert.sameValue(Math.sign(+0), +0); + +// If x is negative and not −0, the result is −1. +assert.sameValue(Math.sign(-Number.MIN_VALUE), -1); +assert.sameValue(Math.sign(-Number.MAX_VALUE), -1); +assert.sameValue(Math.sign(-Infinity), -1); + +for (var i = -1; i > -20; i--) + assert.sameValue(Math.sign(i), -1); + +assert.sameValue(Math.sign(-1e-300), -1); +assert.sameValue(Math.sign(-0x80000000), -1); + +// If x is positive and not +0, the result is +1. +assert.sameValue(Math.sign(Number.MIN_VALUE), +1); +assert.sameValue(Math.sign(Number.MAX_VALUE), +1); +assert.sameValue(Math.sign(Infinity), +1); + +for (var i = 1; i < 20; i++) + assert.sameValue(Math.sign(i), +1); + +assert.sameValue(Math.sign(+1e-300), +1); +assert.sameValue(Math.sign(0x80000000), +1); +assert.sameValue(Math.sign(0xffffffff), +1); + + diff --git a/test/staging/sm/Math/sinh-approx.js b/test/staging/sm/Math/sinh-approx.js new file mode 100644 index 0000000000..d46204e125 --- /dev/null +++ b/test/staging/sm/Math/sinh-approx.js @@ -0,0 +1,306 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var i = -20; i < 20; i++) + assertNear(Math.sinh(i), (Math.exp(i) - Math.exp(-i)) / 2); + +assert.sameValue(Math.sinh(1000), Infinity); +assert.sameValue(Math.sinh(Number.MAX_VALUE), Infinity); +assertNear(Math.sinh(1e-30), 1e-30); +assertNear(Math.sinh(1e-10), 1e-10); + +var sinh_data = [ + [-6.902103625349695, -497.1816406250001], + [-6.898143347143859, -495.21655273437517], + [-6.883664481302669, -488.0980224609375], + [-6.880304842490273, -486.46093750000006], + [-6.871561546509046, -482.2261962890624], + [-6.841973895837549, -468.167236328125], + [-6.836376331805493, -465.5539550781251], + [-6.833654100575195, -464.2883300781251], + [-6.8320816635009045, -463.55883789062483], + [-6.8108680173663085, -453.82861328125], + [-6.799689165151487, -448.78356933593756], + [-6.793579326246197, -446.0499267578126], + [-6.762510387544996, -432.4046630859374], + [-6.743225720989222, -424.14575195312506], + [-6.691758395994307, -402.86828613281244], + [-6.690743430063694, -402.4595947265625], + [-6.6596501292114505, -390.1383056640624], + [-6.652956360641761, -387.5355224609375], + [-6.635954365364267, -381.00231933593767], + [-6.619587562578274, -374.81726074218744], + [-6.617681179427804, -374.10339355468744], + [-6.614762741096185, -373.0131835937501], + [-6.60690568753706, -370.0938720703124], + [-6.591738907156094, -364.5230712890626], + [-6.583066984213974, -361.3756103515625], + [-6.573999516974134, -358.1136474609374], + [-6.553610904389896, -350.8861083984376], + [-6.553097634736138, -350.7060546875001], + [-6.538320325468202, -345.56164550781267], + [-6.529090881007076, -342.386962890625], + [-6.527791927233787, -341.94250488281256], + [-6.514383886150781, -337.38830566406244], + [-6.488639771044976, -328.8133544921875], + [-6.480460592697477, -326.13488769531256], + [-6.439759999015992, -313.1274414062499], + [-6.434927968512049, -311.61804199218744], + [-6.4082177348965725, -303.4047851562501], + [-6.369671035834965, -291.93200683593756], + [-6.362310184909175, -289.79101562500006], + [-6.356373428913315, -288.0756835937499], + [-6.337756593913614, -282.76220703125006], + [-6.32424009706147, -278.96594238281256], + [-6.314232650754295, -276.18811035156256], + [-6.290994606392703, -269.8439941406249], + [-6.240182555852785, -256.4750976562499], + [-6.2102675039793604, -248.9161987304687], + [-6.197335184435549, -245.71783447265628], + [-6.194021350132335, -244.90490722656253], + [-6.184119163536406, -242.4917602539062], + [-6.104686221071835, -223.97491455078116], + [-6.100669325836893, -223.07702636718747], + [-6.093582856519022, -221.50177001953122], + [-6.0598807500687935, -214.16101074218741], + [-6.0062142965262515, -202.97058105468741], + [-5.9923121073369945, -200.1683349609375], + [-5.981859446096083, -198.08691406249997], + [-5.9497792165852905, -191.83300781250006], + [-5.90509449745879, -183.44958496093747], + [-5.902097012275789, -182.90051269531256], + [-5.8144483910067954, -167.55175781250006], + [-5.786154254111214, -162.8773803710938], + [-5.765917008989405, -159.61425781250006], + [-5.703902219845274, -150.0162963867188], + [-5.6926689504460395, -148.34051513671872], + [-5.685206387751923, -147.23760986328122], + [-5.660572815631807, -143.6548461914062], + [-5.625516713960633, -138.70599365234375], + [-5.476934234171879, -119.55416870117192], + [-5.467584665632571, -118.4415588378906], + [-5.417932675603434, -112.70410156250004], + [-5.406565756574079, -111.43020629882811], + [-5.373195678988387, -107.77297973632808], + [-5.3723285712183735, -107.67956542968749], + [-5.348004040102253, -105.09179687499999], + [-5.31087758970896, -101.261474609375], + [-5.255348419702703, -95.79150390624997], + [-5.206986845736275, -91.26885986328122], + [-5.162914035396619, -87.33349609375003], + [-5.052952927749896, -78.23873901367186], + [-5.048772883924985, -77.91235351562501], + [-5.034848487644809, -76.83489990234378], + [-4.808269821238499, -61.25564575195312], + [-4.689849459883311, -54.413803100585945], + [-4.476720236388958, -43.96719360351561], + [-4.431216695067421, -42.01084899902342], + [-4.114720236218123, -30.60937499999999], + [-3.9785790831656023, -26.711166381835938], + [-3.9220215830953484, -25.24131774902344], + [-3.3770026324620295, -14.624359130859379], + [-3.214961448471211, -12.431087493896483], + [-3.021397455139021, -10.235607147216797], + [-2.937831931335705, -9.41094970703125], + [-1.267878515574959, -1.6359391212463381], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.305032609228874e-8, 2.3050326092288742e-8], + [5.939249092534734e-8, 5.9392490925347374e-8], + [1.1667648891489053e-7, 1.166764889148908e-7], + [2.379967440901942e-7, 2.3799674409019644e-7], + [4.6846594159431437e-7, 4.684659415943315e-7], + [9.382699772685088e-7, 9.382699772686465e-7], + [0.0000011039855962733358, 0.00000110398559627356], + [0.000003291776010877096, 0.0000032917760108830407], + [0.000007517213816683722, 0.00000751721381675452], + [0.000015114666893502755, 0.000015114666894078255], + [0.00002986399339999406, 0.00002986399340443313], + [0.000033870281179478836, 0.00003387028118595481], + [0.00009066011977069884, 0.00009066011989489198], + [0.00021949532498377364, 0.00021949532674625516], + [0.00043952149320897676, 0.00043952150736004114], + [0.0006333151408864353, 0.0006333151832222939], + [0.0011151230445582744, 0.001115123275667429], + [0.0019624658370807177, 0.001962467096745968], + [0.005553725496786973, 0.005553754046559334], + [0.008691018931968294, 0.008691128343343735], + [0.02992889492062484, 0.02993336319923401], + [0.05122020579778827, 0.05124260485172272], + [0.1117800293787828, 0.11201295256614685], + [0.23269806521543376, 0.23480379581451416], + [0.4721357117742938, 0.4898730516433716], + [0.694611571189336, 0.7518312931060792], + [1.2781607348262256, 1.6557407379150393], + [1.9917262343245115, 3.5958566665649414], + [2.009484184971722, 3.6627054214477544], + [2.128787712416205, 4.142845153808595], + [2.4846967934155475, 5.95706558227539], + [3.083125584533294, 10.890350341796875], + [4.002981567623351, 27.3714599609375], + [4.080736210902826, 29.586067199707028], + [4.120845430011113, 30.79753875732421], + [4.351258506393416, 38.78157043457031], + [4.540883728536112, 46.88148498535155], + [4.547981853382592, 47.21551513671875], + [4.5480891170767, 47.220581054687514], + [4.599728302509061, 49.72361755371096], + [4.8131842711857535, 61.557464599609396], + [4.910082619934558, 67.82162475585939], + [4.924747230639767, 68.82363891601564], + [4.993937439635391, 73.75466918945312], + [5.087099712053554, 80.95669555664065], + [5.1389346970196295, 85.26406860351562], + [5.138977285472121, 85.26770019531251], + [5.223879832616765, 92.82385253906247], + [5.241812789460327, 94.50357055664062], + [5.447141014648796, 116.04467773437499], + [5.511633288238573, 123.77554321289061], + [5.578681289305598, 132.3592529296875], + [5.633110296634631, 139.76330566406253], + [5.662701238627725, 143.96093750000003], + [5.678906941005323, 146.31298828124997], + [5.737214893086866, 155.0980224609375], + [5.739660763047893, 155.4778442382812], + [5.741349685869528, 155.74066162109372], + [5.790614371552514, 163.60546874999994], + [5.879059869096351, 178.73510742187494], + [5.884458728291027, 179.70269775390622], + [5.885109945587401, 179.8197631835937], + [5.893636014368936, 181.35949707031256], + [5.965274032538233, 194.82861328125003], + [5.967346683696556, 195.23284912109375], + [5.986843466070591, 199.07666015624994], + [6.019932686217942, 205.77423095703134], + [6.021252909681261, 206.0460815429687], + [6.037231102920489, 209.36480712890634], + [6.043606439928324, 210.70385742187506], + [6.06478541011501, 215.21398925781244], + [6.112974120371601, 225.83892822265622], + [6.117902255760311, 226.95465087890622], + [6.1433256889594094, 232.79864501953136], + [6.176483527820343, 240.64721679687503], + [6.186757751007361, 243.13244628906241], + [6.219667373726848, 251.26702880859372], + [6.229418088083555, 253.72906494140634], + [6.233184983047428, 254.68664550781241], + [6.243005711460192, 257.20019531250006], + [6.245102704489327, 257.74011230468744], + [6.260468857392134, 261.73120117187506], + [6.268152459140511, 263.74999999999994], + [6.2748285545831655, 265.5167236328125], + [6.305976070434008, 273.9171142578125], + [6.32399546069982, 278.8977050781249], + [6.324961403980197, 279.16723632812506], + [6.370613506132747, 292.20727539062494], + [6.375359978930309, 293.59753417968744], + [6.3766447200146, 293.9749755859376], + [6.380802563199264, 295.19982910156244], + [6.387824152942429, 297.27990722656244], + [6.390003820200831, 297.9285888671876], + [6.3905985680679, 298.10583496093744], + [6.397866642974941, 300.2803955078125], + [6.421725738171608, 307.5310058593751], + [6.423818963102848, 308.17541503906244], + [6.428865255911759, 309.7344970703124], + [6.443449261058927, 314.28479003906244], + [6.444844602076255, 314.7236328125], + [6.464094341970107, 320.84069824218756], + [6.465356699668166, 321.24597167968744], + [6.467400466944125, 321.90319824218756], + [6.472218114936839, 323.457763671875], + [6.4947499213823265, 330.8286132812501], + [6.507305446835735, 335.00854492187483], + [6.524202033435675, 340.71716308593756], + [6.546694993078936, 348.46777343749994], + [6.548591493378012, 349.1292724609374], + [6.613194950203132, 372.4288330078126], + [6.6247505436339065, 376.7574462890626], + [6.629181796246806, 378.43066406249994], + [6.6616087711302185, 390.9031982421874], + [6.698989091751707, 405.79187011718744], + [6.702857353572475, 407.3646240234375], + [6.717505881986416, 413.37585449218756], + [6.723197804327891, 415.73547363281256], + [6.726699007993023, 417.1936035156251], + [6.735483889307782, 420.87475585937483], + [6.755219602793124, 429.26354980468756], + [6.756366380816258, 429.75610351562506], + [6.766177290841293, 433.99316406250006], + [6.766217511883346, 434.01062011718767], + [6.780091308338912, 440.0739746093749], + [6.802889310303153, 450.22204589843744], + [6.813484439494547, 455.017578125], + [6.818196843455478, 457.16687011718744], + [6.818940201487998, 457.50683593749994], + [6.822833193143805, 459.29138183593756], + [6.82327083544577, 459.49243164062506], + [6.823817951018, 459.743896484375], + [6.834945773756887, 464.8884277343749], + [6.835113285253827, 464.96630859375017], + [6.840964582694129, 467.6949462890624], + [6.84346890521034, 468.86767578125017], + [6.847141429556457, 470.5927734375002], + [6.869243403190376, 481.10961914062483], + [6.882355637062964, 487.4595947265624], + [6.884531678915821, 488.5214843750001], + [6.89341643293734, 492.8812255859376], + [6.895822338701104, 494.06848144531233], + [6.900653737167637, 496.46130371093733], + [7.2670429692740965, 716.1540527343751], + [8.188647968122073, 1799.925781250001], + [8.872023251113289, 3564.8457031250014], + [9.566596912986167, 7139.869140625004], + [10.092554861905608, 12081.222656249996], + [10.728112113864427, 22810.24218749999], + [11.442480870715618, 46598.96875000003], + [12.28759157077177, 108493.37500000009], + [12.636950838344218, 153860.81249999988], + [13.327813723030063, 307019.4999999998], + [14.126778167009777, 682577.25], + [15.090269265334971, 1788919.000000001], + [15.835512291283944, 3769169], + [15.973721689554742, 4327820.000000002], + [16.910547205715446, 11044023.999999983], + [17.573132558903225, 21423208.000000004], + [18.649063156437965, 62828288.00000006], + [18.760110887365155, 70207360.00000012], + [19.547111966180875, 154231424.00000012], + [20.193967491567523, 294509055.9999997], + [21.484592263156223, 1070557183.9999999], + [22.088297141021556, 1957922816.0000024], + [22.780591462699917, 3912507392.0000005], + [23.401438520318692, 7279233024.000007], + [23.684949498080787, 9665245184.000017], + [24.5355829820426, 22627590144.000004], + [25.520740767599584, 60601991168.00004], + [26.31438890085422, 134018236416.00002], + [26.73876398039979, 204864946175.99973], + [27.06660583008718, 284346286080.00024], + [28.234874284944635, 914576637951.9989], + [28.78280496108106, 1581915832319.9973] +]; + +for (var [x, y] of sinh_data) + assertNear(Math.sinh(x), y); + diff --git a/test/staging/sm/Math/sinh-exact.js b/test/staging/sm/Math/sinh-exact.js new file mode 100644 index 0000000000..43cc4e823c --- /dev/null +++ b/test/staging/sm/Math/sinh-exact.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.sinh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.sinh(NaN), NaN); + +// If x is +0, the result is +0. +assert.sameValue(Math.sinh(+0), +0); + +// If x is −0, the result is −0. +assert.sameValue(Math.sinh(-0), -0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.sinh(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assert.sameValue(Math.sinh(-Infinity), -Infinity); + + diff --git a/test/staging/sm/Math/tanh-approx.js b/test/staging/sm/Math/tanh-approx.js new file mode 100644 index 0000000000..05fe14c04e --- /dev/null +++ b/test/staging/sm/Math/tanh-approx.js @@ -0,0 +1,292 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var sloppy_tolerance = 2; + +for (var i = -20; i < 20; i++) { + assertNear(Math.tanh(i), + (Math.exp(i) - Math.exp(-i)) / (Math.exp(i) + Math.exp(-i)), + sloppy_tolerance); +} + +assert.sameValue(Math.tanh(1e300), 1); + +var tanh_data = [ + [-0.9999983310699463, -6.998237084679027], + [-0.9999978542327881, -6.87257975132917], + [-0.999992847442627, -6.2705920974657525], + [-0.9999861717224121, -5.940967614084813], + [-0.9999828338623047, -5.832855225378502], + [-0.9999399185180664, -5.20646301208756], + [-0.9998834133148193, -4.8749821841810785], + [-0.9998509883880615, -4.752279497280338], + [-0.9996016025543213, -4.260504202858904], + [-0.9993612766265869, -4.0244334353203115], + [-0.9989283084869385, -3.7655641082999236], + [-0.9969782829284668, -3.246782610980921], + [-0.9950058460235596, -2.9950671179940938], + [-0.9942638874053955, -2.9256242749609536], + [-0.990715742111206, -2.6839646283308363], + [-0.9903340339660645, -2.663723350226518], + [-0.9760982990264893, -2.207464998348322], + [-0.975830078125, -2.201817459680556], + [-0.9728245735168457, -2.1424542308291437], + [-0.9643559455871582, -2.0046686756020917], + [-0.9377224445343018, -1.7188337346177065], + [-0.9362406730651855, -1.7066940482565154], + [-0.9310147762298584, -1.6659543005533146], + [-0.9284839630126953, -1.6472838718760747], + [-0.9270248413085938, -1.6368067340881562], + [-0.9075665473937988, -1.5135473477311114], + [-0.897477388381958, -1.4590986086331497], + [-0.8920106887817383, -1.431681573516303], + [-0.8776559829711914, -1.365471286049011], + [-0.864722728729248, -1.3117705583444539], + [-0.8482067584991455, -1.249725893334944], + [-0.8056559562683105, -1.1145246028592257], + [-0.8048388957977295, -1.112200609756455], + [-0.7801985740661621, -1.0458778330822556], + [-0.7749934196472168, -1.032711173436253], + [-0.7619285583496094, -1.0007967281362184], + [-0.7504425048828125, -0.9739672824457072], + [-0.7495596408843994, -0.9719492983286864], + [-0.7481319904327393, -0.968698942014487], + [-0.7459518909454346, -0.9637657636705832], + [-0.7401137351989746, -0.9507308314464193], + [-0.7289731502532959, -0.9265325319867653], + [-0.7226788997650146, -0.9132299082876396], + [-0.7161557674407959, -0.8997082193533088], + [-0.7017018795013428, -0.8706453720344796], + [-0.7013418674468994, -0.86993650130945], + [-0.691054105758667, -0.8499705913361888], + [-0.6847054958343506, -0.837919455842005], + [-0.6838164329528809, -0.8362476144993315], + [-0.6747090816497803, -0.8193374156276964], + [-0.6575610637664795, -0.7885046044142132], + [-0.6522045135498047, -0.7791255597799839], + [-0.6261923313140869, -0.7351275788820003], + [-0.623173713684082, -0.7301771459970386], + [-0.6067488193511963, -0.7037597526130627], + [-0.5838055610656738, -0.6682166303197608], + [-0.579524040222168, -0.6617457665293066], + [-0.5760939121246338, -0.656596458857398], + [-0.5654678344726562, -0.6408350116350283], + [-0.5578761100769043, -0.6297442839791668], + [-0.5523209571838379, -0.6217149641475687], + [-0.5396339893341064, -0.6036390747171698], + [-0.5128989219665527, -0.5666556256064771], + [-0.5087778568267822, -0.5610793900942042], + [-0.4977825880050659, -0.546353950571504], + [-0.4913865327835083, -0.5378865967606703], + [-0.48976075649261475, -0.5357455496477738], + [-0.48493504524230957, -0.5294166456244711], + [-0.4479050636291504, -0.4820764946679979], + [-0.4461095333099365, -0.4798325976916711], + [-0.4429593086242676, -0.47590653371561276], + [-0.42827916145324707, -0.45778739362936793], + [-0.40590059757232666, -0.4306933608076879], + [-0.40029656887054443, -0.4240020382545707], + [-0.3961341381072998, -0.4190551379319939], + [-0.3836275339126587, -0.40430627175908734], + [-0.36686253547668457, -0.3847928551425507], + [-0.3657644987106323, -0.38352464227459343], + [-0.33507001399993896, -0.3485286317501442], + [-0.32572221755981445, -0.3380352468276522], + [-0.3191967010498047, -0.3307524237890151], + [-0.3000025749206543, -0.3095224337886503], + [-0.29665136337280273, -0.3058438250228025], + [-0.2944457530975342, -0.3034271164344305], + [-0.2872810363769531, -0.29560018347246825], + [-0.27738428115844727, -0.28484608203169437], + [-0.2390844225883484, -0.2438028008332661], + [-0.23685944080352783, -0.24144425169391517], + [-0.2253856658935547, -0.2293228153248168], + [-0.22283810377120972, -0.22664053064745143], + [-0.21552443504333496, -0.21895773601143995], + [-0.2153375744819641, -0.21876178107952995], + [-0.21016258001327515, -0.21334143320771737], + [-0.20250272750854492, -0.2053409277979887], + [-0.19156384468078613, -0.19396008474133075], + [-0.18251943588256836, -0.18458771439322938], + [-0.17464947700500488, -0.17645844608618066], + [-0.15646183490753174, -0.15775766677189154], + [-0.15580910444259644, -0.15708862621964176], + [-0.15365445613861084, -0.15488112515549593], + [-0.122499018907547, -0.12311733609904851], + [-0.1088167130947113, -0.10924929296737837], + [-0.08792558312416077, -0.08815322150790302], + [-0.08401328325271606, -0.08421178632314608], + [-0.06121261417865753, -0.06128924075509796], + [-0.05341699719429016, -0.05346789060550386], + [-0.05047759413719177, -0.05052053189238029], + [-0.02924579381942749, -0.029254136237332657], + [-0.02485968917608261, -0.02486481220617492], + [-0.020469173789024353, -0.02047203328100153], + [-0.01882001757621765, -0.018822240021756347], + [-0.016152501106262207, -0.016153906073109205], + [-0.0032715508714318275, -0.003271562543358962], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.3050326092288742e-8, 2.3050326092288745e-8], + [5.9392490925347374e-8, 5.939249092534745e-8], + [1.166764889148908e-7, 1.1667648891489133e-7], + [2.3799674409019644e-7, 2.3799674409020094e-7], + [4.684659415943315e-7, 4.684659415943658e-7], + [9.382699772686465e-7, 9.382699772689218e-7], + [0.00000110398559627356, 0.0000011039855962740086], + [0.0000032917760108830407, 0.0000032917760108949305], + [0.00000751721381675452, 0.000007517213816896115], + [0.000015114666894078255, 0.000015114666895229252], + [0.00002986399340443313, 0.00002986399341331128], + [0.00003387028118595481, 0.000033870281198906756], + [0.00009066011989489198, 0.00009066012014327826], + [0.00021949532674625516, 0.0002194953302712184], + [0.00043952150736004114, 0.0004395215356621756], + [0.0006333151832222939, 0.0006333152678940465], + [0.001115123275667429, 0.0011151237378863419], + [0.001962467096745968, 0.001962469616086656], + [0.005553754046559334, 0.005553811147953338], + [0.007324676960706711, 0.0073248079567425], + [0.008691128343343735, 0.008691347183450786], + [0.011912941932678223, 0.011913505535037906], + [0.02993336319923401, 0.029942308168570204], + [0.05124260485172272, 0.05128752666822782], + [0.05473744869232178, 0.05479221508125444], + [0.06158891320228577, 0.061666963819518306], + [0.09375360608100891, 0.09402975380882211], + [0.09442159533500671, 0.09470370926367391], + [0.09443172812461853, 0.09471393321406026], + [0.09943729639053345, 0.09976699249016487], + [0.11201295256614685, 0.11248498303558895], + [0.12310260534286499, 0.12373016402339168], + [0.13562965393066406, 0.13647060950861248], + [0.13763350248336792, 0.13851257866094746], + [0.14749455451965332, 0.14857829980464834], + [0.1618971824645996, 0.16333433166790448], + [0.17051106691360474, 0.17219298693637355], + [0.17051833868026733, 0.17220047646299907], + [0.18562912940979004, 0.18780647318150087], + [0.18898820877075195, 0.1912876932893582], + [0.23206615447998047, 0.23637212433914523], + [0.23480379581451416, 0.2392675448267427], + [0.2646920680999756, 0.27114729033023005], + [0.2794986963272095, 0.2871382059344433], + [0.28789305686950684, 0.2962673858386819], + [0.292596697807312, 0.30140373665239234], + [0.3101649284362793, 0.320727882769785], + [0.3109246492385864, 0.3215686893944558], + [0.31145012378692627, 0.3221505056451929], + [0.3271782398223877, 0.3396649461699478], + [0.3574345111846924, 0.37394153436545424], + [0.3593693971633911, 0.37616159223090223], + [0.35960352420806885, 0.37643046596933716], + [0.3626827001571655, 0.3799714809649667], + [0.38961827754974365, 0.4113499159905353], + [0.3904266357421875, 0.41230330080214], + [0.3981136083602905, 0.4214052375603139], + [0.411507248878479, 0.43742438709579096], + [0.4120509624481201, 0.43807911823743495], + [0.41868770122528076, 0.4460997186945703], + [0.42136549949645996, 0.4493511447897729], + [0.4516327381134033, 0.48674948990473677], + [0.4538639783859253, 0.4895560176112375], + [0.4655507802963257, 0.5043748446613433], + [0.48124635219573975, 0.5246050193978663], + [0.48621630668640137, 0.5310932154891663], + [0.4898730516433716, 0.5358932909903701], + [0.5024838447570801, 0.5526234425942533], + [0.5074074268341064, 0.5592320547729962], + [0.5093221664428711, 0.5618140818296767], + [0.5143489837646484, 0.5686253097655146], + [0.5154285430908203, 0.5700943191671631], + [0.5234100818634033, 0.5810250825991418], + [0.5274472236633301, 0.5866018515043636], + [0.5309803485870361, 0.5915094458340507], + [0.5477793216705322, 0.6152030999229688], + [0.5577394962310791, 0.6295459624918965], + [0.5582785606384277, 0.6303287742357745], + [0.5843560695648193, 0.6690521906099505], + [0.5871362686157227, 0.6732844960442398], + [0.5878911018371582, 0.6744372167164567], + [0.5903406143188477, 0.6781887236623534], + [0.5945003032684326, 0.684597775489552], + [0.5957975387573242, 0.6866065102131665], + [0.5961520671844482, 0.6871563252400655], + [0.6005008220672607, 0.6939300827887145], + [0.6150004863739014, 0.7169242329194352], + [0.6162893772125244, 0.7189998055497108], + [0.6194069385528564, 0.7240422748778544], + [0.6285066604614258, 0.7389438896054792], + [0.6293842792510986, 0.7403958734869583], + [0.6416172981262207, 0.7609178886018204], + [0.6424276828765869, 0.7622965466812235], + [0.6437420845031738, 0.7645378650643101], + [0.6468508243560791, 0.769864795178161], + [0.6615910530090332, 0.7956379107512945], + [0.669950008392334, 0.8106524185805045], + [0.6813662052154541, 0.8316597473423232], + [0.6968657970428467, 0.8611812790659296], + [0.6981887817382812, 0.8637579113749143], + [0.7447831630706787, 0.9611360201710216], + [0.7518312931060791, 0.9771540941752986], + [0.7534394264221191, 0.9808634133542229], + [0.7567856311798096, 0.9886489208209699], + [0.7817282676696777, 1.0497991719828956], + [0.8115026950836182, 1.1314141444187586], + [0.814647912979126, 1.1406947755584418], + [0.8266689777374268, 1.1775230833699681], + [0.8313877582550049, 1.1926138225701433], + [0.8343038558959961, 1.2021323323039612], + [0.8416652679443359, 1.2268570644335162], + [0.8584413528442383, 1.2873896671573652], + [0.8678996562957764, 1.3245040433929398], + [0.8679344654083252, 1.3246451309261607], + [0.8800599575042725, 1.3760334877782177], + [0.9003539085388184, 1.4740852961194106], + [0.9099440574645996, 1.5271990851861994], + [0.9142425060272217, 1.5527768948273004], + [0.9149219989776611, 1.556931837197936], + [0.9184908866882324, 1.5792896628381612], + [0.9188928604125977, 1.5818663359427627], + [0.919395923614502, 1.5851082843320008], + [0.9296839237213135, 1.6560555223295368], + [0.9298396110534668, 1.6572041418041492], + [0.9352962970733643, 1.6990986433619266], + [0.9376416206359863, 1.718164398807965], + [0.9410912990570068, 1.7475084077246632], + [0.962122917175293, 1.9737180163455101], + [0.9748215675354004, 2.1811227771083783], + [0.9769454002380371, 2.2257214499698255], + [0.985663890838623, 2.4654635601650536], + [0.9880380630493164, 2.5565869228142004], + [0.9928233623504639, 2.8132383539094192], + [1e-300, 1e-300], + [0.00001, 0.000010000000000333334], + [0.3, 0.3095196042031117], + [1e-30, 1e-30], + [1e-10, 1e-10], +]; + +for (var [x, y] of tanh_data) + assertNear(Math.tanh(y), x, sloppy_tolerance); + diff --git a/test/staging/sm/Math/tanh-exact.js b/test/staging/sm/Math/tanh-exact.js new file mode 100644 index 0000000000..40575b291f --- /dev/null +++ b/test/staging/sm/Math/tanh-exact.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Properties of Math.tanh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assert.sameValue(Math.tanh(NaN), NaN); + +// If x is +0, the result is +0. +assert.sameValue(Math.tanh(+0), +0); + +// If x is −0, the result is −0. +assert.sameValue(Math.tanh(-0), -0); + +// If x is +∞, the result is +1. +assert.sameValue(Math.tanh(Number.POSITIVE_INFINITY), +1); + +// If x is −∞, the result is -1. +assert.sameValue(Math.tanh(Number.NEGATIVE_INFINITY), -1); + + diff --git a/test/staging/sm/Math/trunc.js b/test/staging/sm/Math/trunc.js new file mode 100644 index 0000000000..b320daad29 --- /dev/null +++ b/test/staging/sm/Math/trunc.js @@ -0,0 +1,60 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Math-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// If x is NaN, the result is NaN. +assert.sameValue(Math.trunc(NaN), NaN); + +// If x is −0, the result is −0. +assert.sameValue(Math.trunc(-0), -0); + +// If x is +0, the result is +0. +assert.sameValue(Math.trunc(+0), +0); + +// If x is +∞, the result is +∞. +assert.sameValue(Math.trunc(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assert.sameValue(Math.trunc(-Infinity), -Infinity); + +// Other boundary cases. +var MAX_NONINTEGER_VALUE = 4503599627370495.5; +var TRUNC_MAX_NONINTEGER_VALUE = 4503599627370495; + +assert.sameValue(Math.trunc(Number.MIN_VALUE), +0); +assert.sameValue(Math.trunc(ONE_MINUS_EPSILON), +0); +assert.sameValue(Math.trunc(ONE_PLUS_EPSILON), 1); +assert.sameValue(Math.trunc(MAX_NONINTEGER_VALUE), TRUNC_MAX_NONINTEGER_VALUE); +assert.sameValue(Math.trunc(Number.MAX_VALUE), Number.MAX_VALUE); + +assert.sameValue(Math.trunc(-Number.MIN_VALUE), -0); +assert.sameValue(Math.trunc(-ONE_MINUS_EPSILON), -0); +assert.sameValue(Math.trunc(-ONE_PLUS_EPSILON), -1); +assert.sameValue(Math.trunc(-MAX_NONINTEGER_VALUE), -TRUNC_MAX_NONINTEGER_VALUE); +assert.sameValue(Math.trunc(-Number.MAX_VALUE), -Number.MAX_VALUE); + +// Other cases. +for (var i = 1, f = 1.1; i < 20; i++, f += 1.0) + assert.sameValue(Math.trunc(f), i); + +for (var i = -1, f = -1.1; i > -20; i--, f -= 1.0) + assert.sameValue(Math.trunc(f), i); + +assert.sameValue(Math.trunc(1e40 + 0.5), 1e40); + +assert.sameValue(Math.trunc(1e300), 1e300); +assert.sameValue(Math.trunc(-1e300), -1e300); +assert.sameValue(Math.trunc(1e-300), 0); +assert.sameValue(Math.trunc(-1e-300), -0); + +assert.sameValue(Math.trunc(+0.9999), +0); +assert.sameValue(Math.trunc(-0.9999), -0); + + diff --git a/test/staging/sm/Number/0x-without-following-hexdigits.js b/test/staging/sm/Number/0x-without-following-hexdigits.js new file mode 100644 index 0000000000..8e932edef6 --- /dev/null +++ b/test/staging/sm/Number/0x-without-following-hexdigits.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 582643; +var summary = "'0x' not followed by hex digits should be a syntax error"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + eval("0x"); + throw new Error("didn't throw parsing 0x (with no subsequent hex digits)"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, + "bad exception thrown: " + e); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Number/15.7.3.7-EPSILON.js b/test/staging/sm/Number/15.7.3.7-EPSILON.js new file mode 100644 index 0000000000..1df47ba54f --- /dev/null +++ b/test/staging/sm/Number/15.7.3.7-EPSILON.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 885798; +var summary = "ES6 (draft May 2013) 15.7.3.7 Number.EPSILON"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Test value +assert.sameValue(Number.EPSILON, Math.pow(2, -52)); + +// Test property attributes +var descriptor = Object.getOwnPropertyDescriptor(Number, 'EPSILON'); +assert.sameValue(descriptor.writable, false); +assert.sameValue(descriptor.configurable, false); +assert.sameValue(descriptor.enumerable, false); + diff --git a/test/staging/sm/Number/15.7.4.2.js b/test/staging/sm/Number/15.7.4.2.js new file mode 100644 index 0000000000..2a99b80b70 --- /dev/null +++ b/test/staging/sm/Number/15.7.4.2.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(raisesException(TypeError)('Number.prototype.toString.call(true)'), true); +assert.sameValue(raisesException(TypeError)('Number.prototype.toString.call("")'), true); +assert.sameValue(raisesException(TypeError)('Number.prototype.toString.call({})'), true); +assert.sameValue(raisesException(TypeError)('Number.prototype.toString.call(null)'), true); +assert.sameValue(raisesException(TypeError)('Number.prototype.toString.call([])'), true); +assert.sameValue(raisesException(TypeError)('Number.prototype.toString.call(undefined)'), true); +assert.sameValue(raisesException(TypeError)('Number.prototype.toString.call(new Boolean(true))'), true); + +assert.sameValue(completesNormally('Number.prototype.toString.call(42)'), true); +assert.sameValue(completesNormally('Number.prototype.toString.call(new Number(42))'), true); + +function testAround(middle) +{ + var range = 260; + var low = middle - range/2; + for (var i = 0; i < range; ++i) + assert.sameValue(low + i, parseInt(String(low + i))); +} + +testAround(-Math.pow(2,32)); +testAround(-Math.pow(2,16)); +testAround(0); +testAround(+Math.pow(2,16)); +testAround(+Math.pow(2,32)); + diff --git a/test/staging/sm/Number/20.1.2.10-MIN_SAFE_INTEGER.js b/test/staging/sm/Number/20.1.2.10-MIN_SAFE_INTEGER.js new file mode 100644 index 0000000000..a5e3b79f9f --- /dev/null +++ b/test/staging/sm/Number/20.1.2.10-MIN_SAFE_INTEGER.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- + +var BUGNUMBER = 885798; +var summary = "ES6 (draft April 2014) 20.1.2.10 Number.MIN_SAFE_INTEGER"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Test value +assert.sameValue(Number.MIN_SAFE_INTEGER, -(Math.pow(2, 53) - 1)); + +//Test property attributes +var descriptor = Object.getOwnPropertyDescriptor(Number, 'MIN_SAFE_INTEGER'); + +assert.sameValue(descriptor.writable, false); +assert.sameValue(descriptor.configurable, false); +assert.sameValue(descriptor.enumerable, false); + diff --git a/test/staging/sm/Number/20.1.2.6-MAX_SAFE_INTEGER.js b/test/staging/sm/Number/20.1.2.6-MAX_SAFE_INTEGER.js new file mode 100644 index 0000000000..336b5bb559 --- /dev/null +++ b/test/staging/sm/Number/20.1.2.6-MAX_SAFE_INTEGER.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- + +var BUGNUMBER = 885798; +var summary = "ES6 (draft April 2014) 20.1.2.6 Number.MAX_SAFE_INTEGER"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Test value +assert.sameValue(Number.MAX_SAFE_INTEGER, Math.pow(2, 53) - 1); + +//Test property attributes +var descriptor = Object.getOwnPropertyDescriptor(Number, 'MAX_SAFE_INTEGER'); + +assert.sameValue(descriptor.writable, false); +assert.sameValue(descriptor.configurable, false); +assert.sameValue(descriptor.enumerable, false); + diff --git a/test/staging/sm/Number/20.1.3.2-toExponential.js b/test/staging/sm/Number/20.1.3.2-toExponential.js new file mode 100644 index 0000000000..895e928140 --- /dev/null +++ b/test/staging/sm/Number/20.1.3.2-toExponential.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- + +var BUGNUMBER = 818617; +var summary = "ECMAScript 2017 Draft ECMA-262 Section 20.1.3.2: Number.prototype.toExponential"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// With NaN, fractionDigits out of range. +assert.sameValue(Number.prototype.toExponential.call(NaN, 555), 'NaN'); + +// With NaN fractionDigits in range. +assert.sameValue(Number.prototype.toExponential.call(NaN, 5), 'NaN'); + +// With Infinity, fractionDigits out of range. +assert.sameValue(Number.prototype.toExponential.call(Infinity, 555), 'Infinity'); + +// With Infinity, fractionDigits in range. +assert.sameValue(Number.prototype.toExponential.call(Infinity, 5), 'Infinity'); + +// With -Infinity, fractionDigits out of range. +assert.sameValue(Number.prototype.toExponential.call(-Infinity, 555), '-Infinity'); + +// With -Infinity, fractionDigits in range. +assert.sameValue(Number.prototype.toExponential.call(-Infinity, 5), '-Infinity'); + +// With NaN, function assigning a value. +let x = 10; +assert.sameValue(Number.prototype.toExponential.call(NaN, { valueOf() { x = 20; return 1; } }), 'NaN'); +assert.sameValue(x, 20); + +// With NaN, function throwing an exception. +assertThrowsValue( + () => Number.prototype.toExponential.call(NaN, { valueOf() { throw "hello"; } }), + "hello"); + +// Not a number throws TypeError +assertThrowsInstanceOf(() => Number.prototype.toExponential.call("Hello"), TypeError); + +if (typeof assert.sameValue === "function") { +} + diff --git a/test/staging/sm/Number/20.1.3.2-toPrecision.js b/test/staging/sm/Number/20.1.3.2-toPrecision.js new file mode 100644 index 0000000000..4b12d0627d --- /dev/null +++ b/test/staging/sm/Number/20.1.3.2-toPrecision.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- + +var BUGNUMBER = 818617; +var summary = "ECMAScript 2017 Draft ECMA-262 Section 20.1.3.5: Number.prototype.toPrecision"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// With NaN, fractionDigits out of range. +assert.sameValue(Number.prototype.toPrecision.call(NaN, 555), 'NaN'); + +// With NaN, fractionDigits in range. +assert.sameValue(Number.prototype.toPrecision.call(NaN, 5), 'NaN'); + +// With Infinity, fractionDigits out of range. +assert.sameValue(Number.prototype.toPrecision.call(Infinity, 555), 'Infinity'); + +// With Infinity, fractionDigits in range. +assert.sameValue(Number.prototype.toPrecision.call(Infinity, 5), 'Infinity'); + +// With -Infinity, fractionDigits out of range. +assert.sameValue(Number.prototype.toPrecision.call(-Infinity, 555), '-Infinity'); + +// With -Infinity, fractionDigits in range. +assert.sameValue(Number.prototype.toPrecision.call(-Infinity, 5), '-Infinity'); + +// With NaN, function assigning a value. +let x = 10; +assert.sameValue(Number.prototype.toPrecision.call(NaN, { valueOf() { x = 20; return 1; } }), 'NaN'); +assert.sameValue(x, 20); + +// With NaN, function throwing an exception. +assertThrowsValue( + () => Number.prototype.toPrecision.call(NaN, { valueOf() { throw "hello"; } }), + "hello"); + +// Not a number throws TypeError +assertThrowsInstanceOf(() => Number.prototype.toPrecision.call("Hello"), TypeError); + +if (typeof assert.sameValue === "function") { +} + diff --git a/test/staging/sm/Number/20.1.3.3-toFixed.js b/test/staging/sm/Number/20.1.3.3-toFixed.js new file mode 100644 index 0000000000..90a6ead719 --- /dev/null +++ b/test/staging/sm/Number/20.1.3.3-toFixed.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Number.prototype.toFixed.call(-Infinity), "-Infinity"); +assert.sameValue(Number.prototype.toFixed.call(Infinity), "Infinity"); +assert.sameValue(Number.prototype.toFixed.call(NaN), "NaN"); + +assertThrowsInstanceOf(() => Number.prototype.toFixed.call(-Infinity, 555), RangeError); +assertThrowsInstanceOf(() => Number.prototype.toFixed.call(Infinity, 555), RangeError); +assertThrowsInstanceOf(() => Number.prototype.toFixed.call(NaN, 555), RangeError); + +assertThrowsInstanceOf(() => Number.prototype.toFixed.call("Hello"), TypeError); + diff --git a/test/staging/sm/Number/conversion-invalid-precision.js b/test/staging/sm/Number/conversion-invalid-precision.js new file mode 100644 index 0000000000..1bdedddf61 --- /dev/null +++ b/test/staging/sm/Number/conversion-invalid-precision.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 795745; +var summary = + "Number.prototype.to* should throw a RangeError when passed a bad precision"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function test(method, prec) +{ + try + { + Number.prototype[method].call(0, prec); + throw "should have thrown"; + } + catch (e) + { + assert.sameValue(e instanceof RangeError, true, + "expected RangeError for " + method + " with precision " + prec + + ", got " + e); + } +} + +test("toExponential", -32); +test("toFixed", -32); +test("toPrecision", -32); + +test("toExponential", 9999999); +test("toFixed", 9999999); +test("toPrecision", 9999999); + +test("toPrecision", 0); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Number/defaultvalue.js b/test/staging/sm/Number/defaultvalue.js new file mode 100644 index 0000000000..5bfcd2dd17 --- /dev/null +++ b/test/staging/sm/Number/defaultvalue.js @@ -0,0 +1,175 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 645464; +var summary = + "[[DefaultValue]] behavior wrong for Number with overridden valueOf/toString"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + + +// equality + +var n = new Number(); +assert.sameValue(n == 0, true); + +var n2 = new Number(); +n2.valueOf = function() { return 17; }; +assert.sameValue(n2 == 17, true); + +var n3 = new Number(); +n3.toString = function() { return 42; }; +assert.sameValue(n3 == 0, true); + +function testEquality() +{ + var n = new Number(); + assert.sameValue(n == 0, true); + + var n2 = new Number(); + n2.valueOf = function() { return 17; }; + assert.sameValue(n2 == 17, true); + + var n3 = new Number(); + n3.toString = function() { return 42; }; + assert.sameValue(n3 == 0, true); +} +testEquality(); + + +// addition of Number to number + +var n = new Number(); +assert.sameValue(n + 5, 5); + +var n2 = new Number(); +n2.toString = function() { return 9; }; +assert.sameValue(n2 + 3, 3); + +var n3 = new Number(); +n3.valueOf = function() { return 17; }; +assert.sameValue(n3 + 5, 22); + +function testNumberAddition() +{ + var n = new Number(); + assert.sameValue(n + 5, 5); + + var n2 = new Number(); + n2.toString = function() { return 9; }; + assert.sameValue(n2 + 3, 3); + + var n3 = new Number(); + n3.valueOf = function() { return 17; }; + assert.sameValue(n3 + 5, 22); +} +testNumberAddition(); + + +// addition of Number to Number + +var n = new Number(); +assert.sameValue(n + n, 0); + +var n2 = new Number(); +n2.toString = function() { return 5; }; +assert.sameValue(n2 + n2, 0); + +var n3 = new Number(); +n3.valueOf = function() { return 8.5; }; +assert.sameValue(n3 + n3, 17); + +function testNonNumberAddition() +{ + var n = new Number(); + assert.sameValue(n + n, 0); + + var n2 = new Number(); + n2.toString = function() { return 5; }; + assert.sameValue(n2 + n2, 0); + + var n3 = new Number(); + n3.valueOf = function() { return 8.5; }; + assert.sameValue(n3 + n3, 17); +} +testNonNumberAddition(); + + +// Number as bracketed property name + +var obj = { 0: 17, 8: 42, 9: 8675309 }; + +var n = new Number(); +assert.sameValue(obj[n], 17); + +var n2 = new Number(); +n2.valueOf = function() { return 8; } +assert.sameValue(obj[n2], 17); + +var n3 = new Number(); +n3.toString = function() { return 9; }; +assert.sameValue(obj[n3], 8675309); + +function testPropertyNameToNumber() +{ + var obj = { 0: 17, 8: 42, 9: 8675309 }; + + var n = new Number(); + assert.sameValue(obj[n], 17); + + var n2 = new Number(); + n2.valueOf = function() { return 8; } + assert.sameValue(obj[n2], 17); + + var n3 = new Number(); + n3.toString = function() { return 9; }; + assert.sameValue(obj[n3], 8675309); +} +testPropertyNameToNumber(); + + +// Number as property name with |in| operator + +var n = new Number(); +assert.sameValue(n in { 0: 5 }, true); + +var n2 = new Number(); +n2.toString = function() { return "baz"; }; +assert.sameValue(n2 in { baz: 42 }, true); + +var n3 = new Number(); +n3.valueOf = function() { return "quux"; }; +assert.sameValue(n3 in { 0: 17 }, true); + +function testInOperatorName() +{ + var n = new Number(); + assert.sameValue(n in { 0: 5 }, true); + + var n2 = new Number(); + n2.toString = function() { return "baz"; }; + assert.sameValue(n2 in { baz: 42 }, true); + + var n3 = new Number(); + n3.valueOf = function() { return "quux"; }; + assert.sameValue(n3 in { 0: 17 }, true); +} +testInOperatorName(); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Number/isSafeInteger-01.js b/test/staging/sm/Number/isSafeInteger-01.js new file mode 100644 index 0000000000..d362a684ce --- /dev/null +++ b/test/staging/sm/Number/isSafeInteger-01.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1003764; +var summary = "ES6 (draft Draft May 22, 2014) ES6 20.1.2.5 Number.isSafeInteger(number)"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Number.isSafeInteger.length, 1); + +assert.sameValue(Number.isSafeInteger({}), false); +assert.sameValue(Number.isSafeInteger(NaN), false); +assert.sameValue(Number.isSafeInteger(+Infinity), false); +assert.sameValue(Number.isSafeInteger(-Infinity), false); + +assert.sameValue(Number.isSafeInteger(-1), true); +assert.sameValue(Number.isSafeInteger(+0), true); +assert.sameValue(Number.isSafeInteger(-0), true); +assert.sameValue(Number.isSafeInteger(1), true); + +assert.sameValue(Number.isSafeInteger(3.2), false); + +assert.sameValue(Number.isSafeInteger(Math.pow(2, 53) - 2), true); +assert.sameValue(Number.isSafeInteger(Math.pow(2, 53) - 1), true); +assert.sameValue(Number.isSafeInteger(Math.pow(2, 53)), false); +assert.sameValue(Number.isSafeInteger(Math.pow(2, 53) + 1), false); +assert.sameValue(Number.isSafeInteger(Math.pow(2, 53) + 2), false); + +assert.sameValue(Number.isSafeInteger(-Math.pow(2, 53) - 2), false); +assert.sameValue(Number.isSafeInteger(-Math.pow(2, 53) - 1), false); +assert.sameValue(Number.isSafeInteger(-Math.pow(2, 53)), false); +assert.sameValue(Number.isSafeInteger(-Math.pow(2, 53) + 1), true); +assert.sameValue(Number.isSafeInteger(-Math.pow(2, 53) + 2), true); + + +print("All tests passed!"); diff --git a/test/staging/sm/Number/numericSeparator.js b/test/staging/sm/Number/numericSeparator.js new file mode 100644 index 0000000000..53de156c9b --- /dev/null +++ b/test/staging/sm/Number/numericSeparator.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(function() { eval('let a = 100_00_;'); }, SyntaxError); +assertThrowsInstanceOf(() => eval("let b = 10__;"), SyntaxError); +assertThrowsInstanceOf(() => eval("let b = 1._2;"), SyntaxError); + diff --git a/test/staging/sm/Number/parseFloat-01.js b/test/staging/sm/Number/parseFloat-01.js new file mode 100644 index 0000000000..99f20e3bd3 --- /dev/null +++ b/test/staging/sm/Number/parseFloat-01.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 886949; +var summary = "ES6 (draft May 2013) 15.7.3.10 Number.parseFloat(string)"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Number.parseFloat("Infinity"), Infinity); +assert.sameValue(Number.parseFloat("+Infinity"), Infinity); +assert.sameValue(Number.parseFloat("-Infinity"), -Infinity); + +assert.sameValue(Number.parseFloat("inf"), NaN); +assert.sameValue(Number.parseFloat("Inf"), NaN); +assert.sameValue(Number.parseFloat("infinity"), NaN); + +assert.sameValue(Number.parseFloat("nan"), NaN); +assert.sameValue(Number.parseFloat("NaN"), NaN); + +/* Number.parseFloat should be the same function object as global parseFloat. */ +assert.sameValue(Number.parseFloat, parseFloat); + +print("All tests passed!"); diff --git a/test/staging/sm/Number/parseInt-01.js b/test/staging/sm/Number/parseInt-01.js new file mode 100644 index 0000000000..72f179206b --- /dev/null +++ b/test/staging/sm/Number/parseInt-01.js @@ -0,0 +1,179 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 886949; +var summary = "ES6 (draft May 2013) 15.7.3.9 Number.parseInt(string, radix)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var str, radix; +var upvar; + +/* 1. Let inputString be ToString(string). */ + +assert.sameValue(Number.parseInt({ toString: function() { return "17" } }, 10), 17); + +upvar = 0; +str = { get toString() { upvar++; return function() { upvar++; return "12345"; } } }; +assert.sameValue(Number.parseInt(str, 10), 12345); +assert.sameValue(upvar, 2); + + +/* + * 2. Let S be a newly created substring of inputString consisting of the first + * character that is not a StrWhiteSpaceChar and all characters following + * that character. (In other words, remove leading white space.) + */ + +var ws = + ["\t", "\v", "\f", " ", "\xA0", "\uFEFF", + "\u2004", "\u3000", // a few Unicode whitespaces + "\r", "\n", "\u2028", "\u2029"]; + +str = "8675309"; +for (var i = 0, sz = ws.length; i < sz; i++) +{ + assert.sameValue(Number.parseInt(ws[i] + str, 10), 8675309); + for (var j = 0, sz = ws.length; j < sz; j++) + { + assert.sameValue(Number.parseInt(ws[i] + ws[j] + str, 10), 8675309, + ws[i].charCodeAt(0).toString(16) + ", " + + ws[j].charCodeAt(0).toString(16)); + } +} + + +/* + * 3. Let sign be 1. + * 4. If S is not empty and the first character of S is a minus sign -, let + * sign be −1. + */ +str = "5552368"; +assert.sameValue(Number.parseInt("-" + str, 10), -Number.parseInt(str, 10)); +assert.sameValue(Number.parseInt(" -" + str, 10), -Number.parseInt(str, 10)); +assert.sameValue(Number.parseInt("-", 10), NaN); +assert.sameValue(Number.parseInt("", 10), NaN); +assert.sameValue(Number.parseInt("-0", 10), -0); + + +/* + * 5. If S is not empty and the first character of S is a plus sign + or a + * minus sign -, then remove the first character from S. + */ +assert.sameValue(Number.parseInt("+12345", 10), 12345); +assert.sameValue(Number.parseInt(" +12345", 10), 12345); +assert.sameValue(Number.parseInt("-12345", 10), -12345); +assert.sameValue(Number.parseInt(" -12345", 10), -12345); + + +/* + * 6. Let R = ToInt32(radix). + */ + +upvar = ""; +str = + { toString: function() { if (!upvar) upvar = "string"; return "42"; } }; +radix = + { toString: function() { if (!upvar) upvar = "radix"; return "10"; } }; + +assert.sameValue(Number.parseInt(str, radix), 42); +assert.sameValue(upvar, "string"); + +assert.sameValue(Number.parseInt("123", null), 123); +assert.sameValue(Number.parseInt("123", undefined), 123); +assert.sameValue(Number.parseInt("123", NaN), 123); +assert.sameValue(Number.parseInt("123", -0), 123); +assert.sameValue(Number.parseInt("10", 72057594037927950), 16); +assert.sameValue(Number.parseInt("10", -4294967292), 4); +assert.sameValue(Number.parseInt("0x10", 1e308), 16); +assert.sameValue(Number.parseInt("10", 1e308), 10); +assert.sameValue(Number.parseInt("10", { valueOf: function() { return 16; } }), 16); + + +/* + * 7. Let stripPrefix be true. + * 8. If R ≠ 0, then + * a. If R < 2 or R > 36, then return NaN. + * b. If R ≠ 16, let stripPrefix be false. + * 9. Else, R = 0 + * a. Let R = 10. + * 10. If stripPrefix is true, then + * a. If the length of S is at least 2 and the first two characters of S + * are either “0x” or “0X”, then remove the first two characters from S and + * let R = 16. + */ +var vs = ["1", "51", "917", "2343", "99963"]; +for (var i = 0, sz = vs.length; i < sz; i++) + assert.sameValue(Number.parseInt(vs[i], 0), Number.parseInt(vs[i], 10), "bad " + vs[i]); + +assert.sameValue(Number.parseInt("0x10"), 16); +assert.sameValue(Number.parseInt("0x10", 0), 16); +assert.sameValue(Number.parseInt("0x10", 16), 16); +assert.sameValue(Number.parseInt("0x10", 8), 0); +assert.sameValue(Number.parseInt("-0x10", 16), -16); + +assert.sameValue(Number.parseInt("5", 1), NaN); +assert.sameValue(Number.parseInt("5", 37), NaN); +assert.sameValue(Number.parseInt("5", { valueOf: function() { return -1; } }), NaN); + + +/* + * 11. If S contains any character that is not a radix-R digit, then let Z be + * the substring of S consisting of all characters before the first such + * character; otherwise, let Z be S. + * 12. If Z is empty, return NaN. + */ +assert.sameValue(Number.parseInt(""), NaN); +assert.sameValue(Number.parseInt("ohai"), NaN); +assert.sameValue(Number.parseInt("0xohai"), NaN); +assert.sameValue(Number.parseInt("-ohai"), NaN); +assert.sameValue(Number.parseInt("+ohai"), NaN); +assert.sameValue(Number.parseInt(" ohai"), NaN); + +assert.sameValue(Number.parseInt("0xaohai"), 10); +assert.sameValue(Number.parseInt("hohai", 18), 17); + + +/* + * 13. Let mathInt be the mathematical integer value that is represented by Z + * in radix-R notation, using the letters A-Z and a-z for digits with + * values 10 through 35. (However, if R is 10 and Z contains more than 20 + * significant digits, every significant digit after the 20th may be + * replaced by a 0 digit, at the option of the implementation; and if R is + * not 2, 4, 8, 10, 16, or 32, then mathInt may be an implementation- + * dependent approximation to the mathematical integer value that is + * represented by Z in radix-R notation.) + * 14. Let number be the Number value for mathInt. + * 15. Return sign × number. + */ +assert.sameValue(Number.parseInt("ohai", 36), 1142154); +assert.sameValue(Number.parseInt("0ohai", 36), 1142154); +assert.sameValue(Number.parseInt("00ohai", 36), 1142154); +assert.sameValue(Number.parseInt("A", 16), 10); +assert.sameValue(Number.parseInt("0A", 16), 10); +assert.sameValue(Number.parseInt("00A", 16), 10); +assert.sameValue(Number.parseInt("A", 17), 10); +assert.sameValue(Number.parseInt("0A", 17), 10); +assert.sameValue(Number.parseInt("00A", 17), 10); + +/* Number.parseInt should be the same function object as global parseInt. */ +assert.sameValue(Number.parseInt, parseInt); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Number/parseInt-default-to-decimal.js b/test/staging/sm/Number/parseInt-default-to-decimal.js new file mode 100644 index 0000000000..606e3f7ac7 --- /dev/null +++ b/test/staging/sm/Number/parseInt-default-to-decimal.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 886949; +var summary = "ES6 (draft May 2013) 15.7.3.9 Number.parseInt(string, radix)." + + " Verify that Number.parseInt defaults to decimal."; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(Number.parseInt("08"), 8); +assert.sameValue(Number.parseInt("09"), 9); +assert.sameValue(Number.parseInt("014"), 14); + +function strictParseInt(s) { "use strict"; return Number.parseInt(s); } + +assert.sameValue(strictParseInt("08"), 8); +assert.sameValue(strictParseInt("09"), 9); +assert.sameValue(strictParseInt("014"), 14); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Number/toExponential-values.js b/test/staging/sm/Number/toExponential-values.js new file mode 100644 index 0000000000..05d611f191 --- /dev/null +++ b/test/staging/sm/Number/toExponential-values.js @@ -0,0 +1,128 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let values = [ + [-0, undefined, "0e+0"], + [-0, 0, "0e+0"], + [-0, 1, "0.0e+0"], + [-0, 10, "0.0000000000e+0"], + [-0, 50, "0.00000000000000000000000000000000000000000000000000e+0"], + [-0, 100, "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0"], + [0, undefined, "0e+0"], + [0, 0, "0e+0"], + [0, 1, "0.0e+0"], + [0, 10, "0.0000000000e+0"], + [0, 50, "0.00000000000000000000000000000000000000000000000000e+0"], + [0, 100, "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0"], + [NaN, undefined, "NaN"], + [NaN, 0, "NaN"], + [NaN, 1, "NaN"], + [NaN, 10, "NaN"], + [NaN, 50, "NaN"], + [NaN, 100, "NaN"], + [Infinity, undefined, "Infinity"], + [Infinity, 0, "Infinity"], + [Infinity, 1, "Infinity"], + [Infinity, 10, "Infinity"], + [Infinity, 50, "Infinity"], + [Infinity, 100, "Infinity"], + [-Infinity, undefined, "-Infinity"], + [-Infinity, 0, "-Infinity"], + [-Infinity, 1, "-Infinity"], + [-Infinity, 10, "-Infinity"], + [-Infinity, 50, "-Infinity"], + [-Infinity, 100, "-Infinity"], + [3.141592653589793, undefined, "3.141592653589793e+0"], + [3.141592653589793, 0, "3e+0"], + [3.141592653589793, 1, "3.1e+0"], + [3.141592653589793, 10, "3.1415926536e+0"], + [3.141592653589793, 50, "3.14159265358979311599796346854418516159057617187500e+0"], + [3.141592653589793, 100, "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000e+0"], + [-1, undefined, "-1e+0"], + [-1, 0, "-1e+0"], + [-1, 1, "-1.0e+0"], + [-1, 10, "-1.0000000000e+0"], + [-1, 50, "-1.00000000000000000000000000000000000000000000000000e+0"], + [-1, 100, "-1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0"], + [1, undefined, "1e+0"], + [1, 0, "1e+0"], + [1, 1, "1.0e+0"], + [1, 10, "1.0000000000e+0"], + [1, 50, "1.00000000000000000000000000000000000000000000000000e+0"], + [1, 100, "1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+0"], + [-123456.78, undefined, "-1.2345678e+5"], + [-123456.78, 0, "-1e+5"], + [-123456.78, 1, "-1.2e+5"], + [-123456.78, 10, "-1.2345678000e+5"], + [-123456.78, 50, "-1.23456779999999998835846781730651855468750000000000e+5"], + [-123456.78, 100, "-1.2345677999999999883584678173065185546875000000000000000000000000000000000000000000000000000000000000e+5"], + [123456.78, undefined, "1.2345678e+5"], + [123456.78, 0, "1e+5"], + [123456.78, 1, "1.2e+5"], + [123456.78, 10, "1.2345678000e+5"], + [123456.78, 50, "1.23456779999999998835846781730651855468750000000000e+5"], + [123456.78, 100, "1.2345677999999999883584678173065185546875000000000000000000000000000000000000000000000000000000000000e+5"], + [100000000000000000000, undefined, "1e+20"], + [100000000000000000000, 0, "1e+20"], + [100000000000000000000, 1, "1.0e+20"], + [100000000000000000000, 10, "1.0000000000e+20"], + [100000000000000000000, 50, "1.00000000000000000000000000000000000000000000000000e+20"], + [100000000000000000000, 100, "1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+20"], + [1e+21, undefined, "1e+21"], + [1e+21, 0, "1e+21"], + [1e+21, 1, "1.0e+21"], + [1e+21, 10, "1.0000000000e+21"], + [1e+21, 50, "1.00000000000000000000000000000000000000000000000000e+21"], + [1e+21, 100, "1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+21"], + [-100000000000000000000, undefined, "-1e+20"], + [-100000000000000000000, 0, "-1e+20"], + [-100000000000000000000, 1, "-1.0e+20"], + [-100000000000000000000, 10, "-1.0000000000e+20"], + [-100000000000000000000, 50, "-1.00000000000000000000000000000000000000000000000000e+20"], + [-100000000000000000000, 100, "-1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+20"], + [-1e+21, undefined, "-1e+21"], + [-1e+21, 0, "-1e+21"], + [-1e+21, 1, "-1.0e+21"], + [-1e+21, 10, "-1.0000000000e+21"], + [-1e+21, 50, "-1.00000000000000000000000000000000000000000000000000e+21"], + [-1e+21, 100, "-1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+21"], + [Number.MAX_VALUE, undefined, "1.7976931348623157e+308"], + [Number.MAX_VALUE, 0, "2e+308"], + [Number.MAX_VALUE, 1, "1.8e+308"], + [Number.MAX_VALUE, 10, "1.7976931349e+308"], + [Number.MAX_VALUE, 50, "1.79769313486231570814527423731704356798070567525845e+308"], + [Number.MAX_VALUE, 100, "1.7976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817e+308"], + [-Number.MAX_VALUE, undefined, "-1.7976931348623157e+308"], + [-Number.MAX_VALUE, 0, "-2e+308"], + [-Number.MAX_VALUE, 1, "-1.8e+308"], + [-Number.MAX_VALUE, 10, "-1.7976931349e+308"], + [-Number.MAX_VALUE, 50, "-1.79769313486231570814527423731704356798070567525845e+308"], + [-Number.MAX_VALUE, 100, "-1.7976931348623157081452742373170435679807056752584499659891747680315726078002853876058955863276687817e+308"], + [Number.MIN_VALUE, undefined, "5e-324"], + [Number.MIN_VALUE, 0, "5e-324"], + [Number.MIN_VALUE, 1, "4.9e-324"], + [Number.MIN_VALUE, 10, "4.9406564584e-324"], + [Number.MIN_VALUE, 50, "4.94065645841246544176568792868221372365059802614325e-324"], + [Number.MIN_VALUE, 100, "4.9406564584124654417656879286822137236505980261432476442558568250067550727020875186529983636163599238e-324"], + [-Number.MIN_VALUE, undefined, "-5e-324"], + [-Number.MIN_VALUE, 0, "-5e-324"], + [-Number.MIN_VALUE, 1, "-4.9e-324"], + [-Number.MIN_VALUE, 10, "-4.9406564584e-324"], + [-Number.MIN_VALUE, 50, "-4.94065645841246544176568792868221372365059802614325e-324"], + [-Number.MIN_VALUE, 100, "-4.9406564584124654417656879286822137236505980261432476442558568250067550727020875186529983636163599238e-324"], +]; + +for (let [val, prec, expected] of values) { + assert.sameValue(Number.prototype.toExponential.call(val, prec), expected); +} + +if (typeof assert.sameValue === "function") { +} diff --git a/test/staging/sm/Number/toFixed-values.js b/test/staging/sm/Number/toFixed-values.js new file mode 100644 index 0000000000..3fc53ebbb8 --- /dev/null +++ b/test/staging/sm/Number/toFixed-values.js @@ -0,0 +1,128 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let values = [ + [-0, undefined, "0"], + [-0, 0, "0"], + [-0, 1, "0.0"], + [-0, 10, "0.0000000000"], + [-0, 50, "0.00000000000000000000000000000000000000000000000000"], + [-0, 100, "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [0, undefined, "0"], + [0, 0, "0"], + [0, 1, "0.0"], + [0, 10, "0.0000000000"], + [0, 50, "0.00000000000000000000000000000000000000000000000000"], + [0, 100, "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [NaN, undefined, "NaN"], + [NaN, 0, "NaN"], + [NaN, 1, "NaN"], + [NaN, 10, "NaN"], + [NaN, 50, "NaN"], + [NaN, 100, "NaN"], + [Infinity, undefined, "Infinity"], + [Infinity, 0, "Infinity"], + [Infinity, 1, "Infinity"], + [Infinity, 10, "Infinity"], + [Infinity, 50, "Infinity"], + [Infinity, 100, "Infinity"], + [-Infinity, undefined, "-Infinity"], + [-Infinity, 0, "-Infinity"], + [-Infinity, 1, "-Infinity"], + [-Infinity, 10, "-Infinity"], + [-Infinity, 50, "-Infinity"], + [-Infinity, 100, "-Infinity"], + [3.141592653589793, undefined, "3"], + [3.141592653589793, 0, "3"], + [3.141592653589793, 1, "3.1"], + [3.141592653589793, 10, "3.1415926536"], + [3.141592653589793, 50, "3.14159265358979311599796346854418516159057617187500"], + [3.141592653589793, 100, "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"], + [-1, undefined, "-1"], + [-1, 0, "-1"], + [-1, 1, "-1.0"], + [-1, 10, "-1.0000000000"], + [-1, 50, "-1.00000000000000000000000000000000000000000000000000"], + [-1, 100, "-1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [1, undefined, "1"], + [1, 0, "1"], + [1, 1, "1.0"], + [1, 10, "1.0000000000"], + [1, 50, "1.00000000000000000000000000000000000000000000000000"], + [1, 100, "1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [-123456.78, undefined, "-123457"], + [-123456.78, 0, "-123457"], + [-123456.78, 1, "-123456.8"], + [-123456.78, 10, "-123456.7800000000"], + [-123456.78, 50, "-123456.77999999999883584678173065185546875000000000000000"], + [-123456.78, 100, "-123456.7799999999988358467817306518554687500000000000000000000000000000000000000000000000000000000000000000"], + [123456.78, undefined, "123457"], + [123456.78, 0, "123457"], + [123456.78, 1, "123456.8"], + [123456.78, 10, "123456.7800000000"], + [123456.78, 50, "123456.77999999999883584678173065185546875000000000000000"], + [123456.78, 100, "123456.7799999999988358467817306518554687500000000000000000000000000000000000000000000000000000000000000000"], + [100000000000000000000, undefined, "100000000000000000000"], + [100000000000000000000, 0, "100000000000000000000"], + [100000000000000000000, 1, "100000000000000000000.0"], + [100000000000000000000, 10, "100000000000000000000.0000000000"], + [100000000000000000000, 50, "100000000000000000000.00000000000000000000000000000000000000000000000000"], + [100000000000000000000, 100, "100000000000000000000.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [1e+21, undefined, "1e+21"], + [1e+21, 0, "1e+21"], + [1e+21, 1, "1e+21"], + [1e+21, 10, "1e+21"], + [1e+21, 50, "1e+21"], + [1e+21, 100, "1e+21"], + [-100000000000000000000, undefined, "-100000000000000000000"], + [-100000000000000000000, 0, "-100000000000000000000"], + [-100000000000000000000, 1, "-100000000000000000000.0"], + [-100000000000000000000, 10, "-100000000000000000000.0000000000"], + [-100000000000000000000, 50, "-100000000000000000000.00000000000000000000000000000000000000000000000000"], + [-100000000000000000000, 100, "-100000000000000000000.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [-1e+21, undefined, "-1e+21"], + [-1e+21, 0, "-1e+21"], + [-1e+21, 1, "-1e+21"], + [-1e+21, 10, "-1e+21"], + [-1e+21, 50, "-1e+21"], + [-1e+21, 100, "-1e+21"], + [Number.MAX_VALUE, undefined, "1.7976931348623157e+308"], + [Number.MAX_VALUE, 0, "1.7976931348623157e+308"], + [Number.MAX_VALUE, 1, "1.7976931348623157e+308"], + [Number.MAX_VALUE, 10, "1.7976931348623157e+308"], + [Number.MAX_VALUE, 50, "1.7976931348623157e+308"], + [Number.MAX_VALUE, 100, "1.7976931348623157e+308"], + [-Number.MAX_VALUE, undefined, "-1.7976931348623157e+308"], + [-Number.MAX_VALUE, 0, "-1.7976931348623157e+308"], + [-Number.MAX_VALUE, 1, "-1.7976931348623157e+308"], + [-Number.MAX_VALUE, 10, "-1.7976931348623157e+308"], + [-Number.MAX_VALUE, 50, "-1.7976931348623157e+308"], + [-Number.MAX_VALUE, 100, "-1.7976931348623157e+308"], + [Number.MIN_VALUE, undefined, "0"], + [Number.MIN_VALUE, 0, "0"], + [Number.MIN_VALUE, 1, "0.0"], + [Number.MIN_VALUE, 10, "0.0000000000"], + [Number.MIN_VALUE, 50, "0.00000000000000000000000000000000000000000000000000"], + [Number.MIN_VALUE, 100, "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [-Number.MIN_VALUE, undefined, "-0"], + [-Number.MIN_VALUE, 0, "-0"], + [-Number.MIN_VALUE, 1, "-0.0"], + [-Number.MIN_VALUE, 10, "-0.0000000000"], + [-Number.MIN_VALUE, 50, "-0.00000000000000000000000000000000000000000000000000"], + [-Number.MIN_VALUE, 100, "-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], +]; + +for (let [val, prec, expected] of values) { + assert.sameValue(Number.prototype.toFixed.call(val, prec), expected); +} + +if (typeof assert.sameValue === "function") { +} diff --git a/test/staging/sm/Number/toPrecision-values.js b/test/staging/sm/Number/toPrecision-values.js new file mode 100644 index 0000000000..929b2f0eee --- /dev/null +++ b/test/staging/sm/Number/toPrecision-values.js @@ -0,0 +1,110 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let values = [ + [-0, undefined, "0"], + [-0, 1, "0"], + [-0, 10, "0.000000000"], + [-0, 50, "0.0000000000000000000000000000000000000000000000000"], + [-0, 100, "0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [0, undefined, "0"], + [0, 1, "0"], + [0, 10, "0.000000000"], + [0, 50, "0.0000000000000000000000000000000000000000000000000"], + [0, 100, "0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [NaN, undefined, "NaN"], + [NaN, 1, "NaN"], + [NaN, 10, "NaN"], + [NaN, 50, "NaN"], + [NaN, 100, "NaN"], + [Infinity, undefined, "Infinity"], + [Infinity, 1, "Infinity"], + [Infinity, 10, "Infinity"], + [Infinity, 50, "Infinity"], + [Infinity, 100, "Infinity"], + [-Infinity, undefined, "-Infinity"], + [-Infinity, 1, "-Infinity"], + [-Infinity, 10, "-Infinity"], + [-Infinity, 50, "-Infinity"], + [-Infinity, 100, "-Infinity"], + [3.141592653589793, undefined, "3.141592653589793"], + [3.141592653589793, 1, "3"], + [3.141592653589793, 10, "3.141592654"], + [3.141592653589793, 50, "3.1415926535897931159979634685441851615905761718750"], + [3.141592653589793, 100, "3.141592653589793115997963468544185161590576171875000000000000000000000000000000000000000000000000000"], + [-1, undefined, "-1"], + [-1, 1, "-1"], + [-1, 10, "-1.000000000"], + [-1, 50, "-1.0000000000000000000000000000000000000000000000000"], + [-1, 100, "-1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [1, undefined, "1"], + [1, 1, "1"], + [1, 10, "1.000000000"], + [1, 50, "1.0000000000000000000000000000000000000000000000000"], + [1, 100, "1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [-123456.78, undefined, "-123456.78"], + [-123456.78, 1, "-1e+5"], + [-123456.78, 10, "-123456.7800"], + [-123456.78, 50, "-123456.77999999999883584678173065185546875000000000"], + [-123456.78, 100, "-123456.7799999999988358467817306518554687500000000000000000000000000000000000000000000000000000000000"], + [123456.78, undefined, "123456.78"], + [123456.78, 1, "1e+5"], + [123456.78, 10, "123456.7800"], + [123456.78, 50, "123456.77999999999883584678173065185546875000000000"], + [123456.78, 100, "123456.7799999999988358467817306518554687500000000000000000000000000000000000000000000000000000000000"], + [100000000000000000000, undefined, "100000000000000000000"], + [100000000000000000000, 1, "1e+20"], + [100000000000000000000, 10, "1.000000000e+20"], + [100000000000000000000, 50, "100000000000000000000.00000000000000000000000000000"], + [100000000000000000000, 100, "100000000000000000000.0000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [1e+21, undefined, "1e+21"], + [1e+21, 1, "1e+21"], + [1e+21, 10, "1.000000000e+21"], + [1e+21, 50, "1000000000000000000000.0000000000000000000000000000"], + [1e+21, 100, "1000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [-100000000000000000000, undefined, "-100000000000000000000"], + [-100000000000000000000, 1, "-1e+20"], + [-100000000000000000000, 10, "-1.000000000e+20"], + [-100000000000000000000, 50, "-100000000000000000000.00000000000000000000000000000"], + [-100000000000000000000, 100, "-100000000000000000000.0000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [-1e+21, undefined, "-1e+21"], + [-1e+21, 1, "-1e+21"], + [-1e+21, 10, "-1.000000000e+21"], + [-1e+21, 50, "-1000000000000000000000.0000000000000000000000000000"], + [-1e+21, 100, "-1000000000000000000000.000000000000000000000000000000000000000000000000000000000000000000000000000000"], + [Number.MAX_VALUE, undefined, "1.7976931348623157e+308"], + [Number.MAX_VALUE, 1, "2e+308"], + [Number.MAX_VALUE, 10, "1.797693135e+308"], + [Number.MAX_VALUE, 50, "1.7976931348623157081452742373170435679807056752584e+308"], + [Number.MAX_VALUE, 100, "1.797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668782e+308"], + [-Number.MAX_VALUE, undefined, "-1.7976931348623157e+308"], + [-Number.MAX_VALUE, 1, "-2e+308"], + [-Number.MAX_VALUE, 10, "-1.797693135e+308"], + [-Number.MAX_VALUE, 50, "-1.7976931348623157081452742373170435679807056752584e+308"], + [-Number.MAX_VALUE, 100, "-1.797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668782e+308"], + [Number.MIN_VALUE, undefined, "5e-324"], + [Number.MIN_VALUE, 1, "5e-324"], + [Number.MIN_VALUE, 10, "4.940656458e-324"], + [Number.MIN_VALUE, 50, "4.9406564584124654417656879286822137236505980261432e-324"], + [Number.MIN_VALUE, 100, "4.940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359924e-324"], + [-Number.MIN_VALUE, undefined, "-5e-324"], + [-Number.MIN_VALUE, 1, "-5e-324"], + [-Number.MIN_VALUE, 10, "-4.940656458e-324"], + [-Number.MIN_VALUE, 50, "-4.9406564584124654417656879286822137236505980261432e-324"], + [-Number.MIN_VALUE, 100, "-4.940656458412465441765687928682213723650598026143247644255856825006755072702087518652998363616359924e-324"], +]; + +for (let [val, prec, expected] of values) { + assert.sameValue(Number.prototype.toPrecision.call(val, prec), expected); +} + +if (typeof assert.sameValue === "function") { +} diff --git a/test/staging/sm/Number/toString-radix-handling.js b/test/staging/sm/Number/toString-radix-handling.js new file mode 100644 index 0000000000..0c924573de --- /dev/null +++ b/test/staging/sm/Number/toString-radix-handling.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 647385; +var summary = + "Number.prototype.toString should use ToInteger on the radix and should " + + "throw a RangeError if the radix is bad"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function test(r) +{ + try + { + 5..toString(r); + throw "should have thrown"; + } + catch (e) + { + assert.sameValue(e instanceof RangeError, true, "expected a RangeError, got " + e); + } +} +test(Math.pow(2, 32) + 10); +test(55); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/Number/tonumber-string-hex.js b/test/staging/sm/Number/tonumber-string-hex.js new file mode 100644 index 0000000000..b58dbe1edf --- /dev/null +++ b/test/staging/sm/Number/tonumber-string-hex.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 872853; +var summary = 'Various tests of ToNumber(string), particularly +"0x" being NaN'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(+"0x", NaN); +assert.sameValue(+"\t0x", NaN); +assert.sameValue(+"0x\n", NaN); +assert.sameValue(+"\n0x\t", NaN); +assert.sameValue(+"0x0", 0); +assert.sameValue(+"0xa", 10); +assert.sameValue(+"0xff", 255); +assert.sameValue(+"-0x", NaN); +assert.sameValue(+"-0xa", NaN); +assert.sameValue(+"-0xff", NaN); +assert.sameValue(+"0xInfinity", NaN); +assert.sameValue(+"+Infinity", Infinity); +assert.sameValue(+"-Infinity", -Infinity); +assert.sameValue(+"\t+Infinity", Infinity); +assert.sameValue(+"-Infinity\n", -Infinity); +assert.sameValue(+"+ Infinity", NaN); +assert.sameValue(+"- Infinity", NaN); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/PrivateName/constructor-args.js b/test/staging/sm/PrivateName/constructor-args.js new file mode 100644 index 0000000000..880fffb4cc --- /dev/null +++ b/test/staging/sm/PrivateName/constructor-args.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class A { + #x = "hello"; + constructor(o = this.#x) { + this.value = o; + } +}; + +var a = new A; +assert.sameValue(a.value, "hello"); + + +class B extends A { + constructor() { + // Cannot access 'this' until super() called. + super(); + assert.sameValue("value" in this, true); + assert.sameValue(this.value, "hello"); + } +} + +var b = new B; + diff --git a/test/staging/sm/PrivateName/error-outside-class.js b/test/staging/sm/PrivateName/error-outside-class.js new file mode 100644 index 0000000000..352f06a660 --- /dev/null +++ b/test/staging/sm/PrivateName/error-outside-class.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Can't reference a private field without an object +assertThrowsInstanceOf(() => eval('#x'), SyntaxError); + +// Can't reference a private field without an enclosing class +assertThrowsInstanceOf(() => eval('this.#x'), SyntaxError); + +// Can't reference a private field in a random function outside a class context +assertThrowsInstanceOf( + () => eval('function foo() { return this.#x'), SyntaxError); + + diff --git a/test/staging/sm/PrivateName/home-object-when-preceded-by-computed-key.js b/test/staging/sm/PrivateName/home-object-when-preceded-by-computed-key.js new file mode 100644 index 0000000000..4a8ed7725d --- /dev/null +++ b/test/staging/sm/PrivateName/home-object-when-preceded-by-computed-key.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class Base { + m() { return "pass"; } + static m() { return "fail"; } +} + +var key = { + toString() { + return "computed"; + } +}; + +let obj1 = new class extends Base { + [key]() {} + + // Private method with a directly preceding method using a computed key led + // to assigning the wrong home object. + #m() { return super.m(); } + m() { return this.#m(); } +}; + +assert.sameValue(obj1.m(), "pass"); + +let obj2 = new class extends Base { + // Same test as above, but this time preceded by a static method. + static [key]() {} + + #m() { return super.m(); } + m() { return this.#m(); } +}; + +assert.sameValue(obj2.m(), "pass"); + diff --git a/test/staging/sm/PrivateName/illegal-in-class-context.js b/test/staging/sm/PrivateName/illegal-in-class-context.js new file mode 100644 index 0000000000..bae96b5852 --- /dev/null +++ b/test/staging/sm/PrivateName/illegal-in-class-context.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assertThrowsInstanceOf(() => eval(`class A { #x; #x; }`), SyntaxError); + +// No computed private fields +assertThrowsInstanceOf( + () => eval(`var x = "foo"; class A { #[x] = 20; }`), SyntaxError); + +assertThrowsInstanceOfWithMessage(() => eval(`class A { #x; h(o) { return !#x; }}`), + SyntaxError, + "invalid use of private name in unary expression without object reference"); +assertThrowsInstanceOfWithMessage(() => eval(`class A { #x; h(o) { return 1 + #x in o; }}`), + SyntaxError, + "invalid use of private name due to operator precedence"); + + diff --git a/test/staging/sm/PrivateName/illegal-in-identifier-context.js b/test/staging/sm/PrivateName/illegal-in-identifier-context.js new file mode 100644 index 0000000000..740e5c8142 --- /dev/null +++ b/test/staging/sm/PrivateName/illegal-in-identifier-context.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Private names can't appear in contexts where plain identifiers are expected. + +// Private names as binding identifiers. +assertThrowsInstanceOf(() => eval(`var #a;`), SyntaxError); +assertThrowsInstanceOf(() => eval(`let #a;`), SyntaxError); +assertThrowsInstanceOf(() => eval(`const #a = 0;`), SyntaxError); +assertThrowsInstanceOf(() => eval(`function #a(){}`), SyntaxError); +assertThrowsInstanceOf(() => eval(`function f(#a){}`), SyntaxError); + +// With escape sequences (leading and non-leading case). +assertThrowsInstanceOf(() => eval(String.raw`var #\u0061;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`var #a\u0061;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`let #\u0061;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`let #a\u0061;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`const #\u0061 = 0;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`const #a\u0061 = 0;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`function #\u0061(){}`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`function #a\u0061(){}`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`function f(#\u0061){}`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`function f(#a\u0061){}`), SyntaxError); + + +// Private names as label identifiers. +assertThrowsInstanceOf(() => eval(`#a: ;`), SyntaxError); + +// With escape sequences (leading and non-leading case). +assertThrowsInstanceOf(() => eval(String.raw`#\u0061: ;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`#a\u0061: ;`), SyntaxError); + + +// Private names as identifier references. +assertThrowsInstanceOf(() => eval(`#a = 0;`), SyntaxError); +assertThrowsInstanceOf(() => eval(`typeof #a;`), SyntaxError); + +// With escape sequences (leading and non-leading case). +assertThrowsInstanceOf(() => eval(String.raw`#\u0061 = 0;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`#a\u0061 = 0;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`typeof #\u0061;`), SyntaxError); +assertThrowsInstanceOf(() => eval(String.raw`typeof #a\u0061;`), SyntaxError); + + diff --git a/test/staging/sm/PrivateName/illegal-in-object-context.js b/test/staging/sm/PrivateName/illegal-in-object-context.js new file mode 100644 index 0000000000..7e4d11e041 --- /dev/null +++ b/test/staging/sm/PrivateName/illegal-in-object-context.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Private names aren't valid in object literals. + +assertThrowsInstanceOf(() => eval(`var o = {#a: 0};`), SyntaxError); +assertThrowsInstanceOf(() => eval(`var o = {#a};`), SyntaxError); +assertThrowsInstanceOf(() => eval(`var o = {#a(){}};`), SyntaxError); +assertThrowsInstanceOf(() => eval(`var o = {get #a(){}};`), SyntaxError); +assertThrowsInstanceOf(() => eval(`var o = {set #a(v){}};`), SyntaxError); +assertThrowsInstanceOf(() => eval(`var o = {*#a(v){}};`), SyntaxError); +assertThrowsInstanceOf(() => eval(`var o = {async #a(v){}};`), SyntaxError); +assertThrowsInstanceOf(() => eval(`var o = {async *#a(v){}};`), SyntaxError); + diff --git a/test/staging/sm/PrivateName/lexical-presence.js b/test/staging/sm/PrivateName/lexical-presence.js new file mode 100644 index 0000000000..874e2f1292 --- /dev/null +++ b/test/staging/sm/PrivateName/lexical-presence.js @@ -0,0 +1,64 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Verify that private fields are enabled. +class A { + #x; +}; + +function assertThrowsSyntaxError(str) { + assertThrowsInstanceOf(() => eval(str), SyntaxError); // Direct Eval + assertThrowsInstanceOf(() => (1, eval)(str), SyntaxError); // Indirect Eval + assertThrowsInstanceOf(() => Function(str), SyntaxError); // Function +} + +assertThrowsSyntaxError(` + class B { + g() { + return this.#x; + } + }; +`); + +assertThrowsSyntaxError(` +with (new class A { #x; }) { + class B { + #y; + constructor() { return this.#x; } + } + } +`); + +// Make sure we don't create a generic binding for #x. +with (new class { + #x = 12; +}) { + assert.sameValue('#x' in this, false); +} + +// Try to fetch a non-existing field using different +// compilation contexts +function assertNonExisting(fetchCode) { + source = `var X = class { + b() { + ${fetchCode} + } + } + var a = new X; + a.b()` + assertThrowsInstanceOf(() => eval(source), SyntaxError); +} + +assertNonExisting(`return eval("this.#x")"`); +assertNonExisting(`return (1,eval)("this.#x")`); +assertNonExisting(`var f = Function("this.#x"); return f();`); + diff --git a/test/staging/sm/PrivateName/modify-non-extensible.js b/test/staging/sm/PrivateName/modify-non-extensible.js new file mode 100644 index 0000000000..250f71e4d9 --- /dev/null +++ b/test/staging/sm/PrivateName/modify-non-extensible.js @@ -0,0 +1,84 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// Returns the argument in the constructor to allow stamping private fields into +// arbitrary objects. +class OverrideBase { + constructor(o) { + return o; + } +}; + +class A extends OverrideBase { + #a = 1; + g() { + return this.#a + } + + static gs(o) { + return o.#a; + } + static inca(obj) { + obj.#a++; + } +} + +var obj = {}; +Object.seal(obj); +new A(obj); // Add #a to obj, but not g. +assert.sameValue('g' in obj, false); +assert.sameValue(A.gs(obj), 1); +A.inca(obj); +assert.sameValue(A.gs(obj), 2); + +// Ensure that the object remains non-extensible +obj.h = 'hi' +assert.sameValue('h' in obj, false); + + +Object.freeze(obj); +A.inca(obj); // Despite being frozen, private names are modifiable. +assert.sameValue(A.gs(obj), 3); +assert.sameValue(Object.isFrozen(obj), true); + +var proxy = new Proxy({}, {}); +assert.sameValue(Object.isFrozen(proxy), false); + +new A(proxy); +assert.sameValue(A.gs(proxy), 1); + +// Note: this doesn't exercise the non-native object +// path in TestIntegrityLevel like you might expect. +// +// For that see below. +Object.freeze(proxy); +assert.sameValue(Object.isFrozen(proxy), true); + +A.inca(proxy); +assert.sameValue(A.gs(proxy), 2) + +var target = { a: 10 }; +Object.freeze(target); +new A(target); +assert.sameValue(Object.isFrozen(target), true) + +var getOwnKeys = []; +var proxy = new Proxy(target, { + getOwnPropertyDescriptor: function (target, key) { + getOwnKeys.push(key); + return Reflect.getOwnPropertyDescriptor(target, key); + }, +}); + +Object.isFrozen(proxy); +assert.sameValue(getOwnKeys.length, 1); + diff --git a/test/staging/sm/PrivateName/names.js b/test/staging/sm/PrivateName/names.js new file mode 100644 index 0000000000..03d485c177 --- /dev/null +++ b/test/staging/sm/PrivateName/names.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var C = class { + static #field = () => 'Test262'; + static field = () => 'Test262'; + #instance = () => 'Test262'; + instance = () => 'Test262'; + + static accessPrivateField() { + return this.#field; + } + + accessPrivateInstanceField() { + return this.#instance; + } + + static accessField() { + return this.field; + } + + accessInstanceField() { + return this.instance; + } +} +assert.sameValue(C.accessPrivateField().name, '#field') +assert.sameValue(C.accessField().name, 'field'); +var c = new C; +assert.sameValue(c.accessPrivateInstanceField().name, '#instance'); +assert.sameValue(c.accessInstanceField().name, 'instance'); + diff --git a/test/staging/sm/PrivateName/nested-class-in-computed-property-key.js b/test/staging/sm/PrivateName/nested-class-in-computed-property-key.js new file mode 100644 index 0000000000..7b92ae24c2 --- /dev/null +++ b/test/staging/sm/PrivateName/nested-class-in-computed-property-key.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let capturedPrivateAccess; +class A { + // Declare private name in outer class. + static #x = 42; + + static [( + // Inner class in computed property key. + class {}, + + // Access to private name from outer class. + capturedPrivateAccess = () => A.#x + )]; +} +assert.sameValue(capturedPrivateAccess(), 42); + diff --git a/test/staging/sm/PrivateName/nested-class-name-used.js b/test/staging/sm/PrivateName/nested-class-name-used.js new file mode 100644 index 0000000000..536aa030d1 --- /dev/null +++ b/test/staging/sm/PrivateName/nested-class-name-used.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// AllPrivateIdentifiersValid uses only lexical string names, not +// the dynamic private names; which means the below is not a syntax +// error but is instead a TypeError on access. + +class A { + #x = 10; + f() { + class B { + g() { + return this.#x; // note: #x isn't declared in this class, but + // the enclosing. + } + }; + this.y = new B; + } + constructor() { + this.f(); + } + g() { + return this.y.g(); + } +}; + +a = new A; +try { + a.g(); +} catch (e) { + assert.sameValue(e instanceof TypeError, true); +} + diff --git a/test/staging/sm/PrivateName/not-iterable.js b/test/staging/sm/PrivateName/not-iterable.js new file mode 100644 index 0000000000..9489c5479c --- /dev/null +++ b/test/staging/sm/PrivateName/not-iterable.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// +// Ensure PrivateNames aren't iterable. + +class O { + #x = 123; + gx() { + return this.#x; + } +} +var o = new O; + +assert.sameValue(o.gx(), 123); + +assert.sameValue(Object.keys(o).length, 0); +assert.sameValue(Object.getOwnPropertyNames(o).length, 0); +assert.sameValue(Object.getOwnPropertySymbols(o).length, 0); +assert.sameValue(Reflect.ownKeys(o).length, 0); + +var forIn = []; +for (var pk in o) { + forIn.push(pk); +} +assert.sameValue(forIn.length, 0); + +// Proxy case +var proxy = new Proxy(o, {}); +assert.sameValue(Object.keys(proxy).length, 0); +assert.sameValue(Object.getOwnPropertyNames(proxy).length, 0); +assert.sameValue(Object.getOwnPropertySymbols(proxy).length, 0); +assert.sameValue(Reflect.ownKeys(proxy).length, 0); + +for (var pk in proxy) { + forIn.push(pk); +} +assert.sameValue(forIn.length, 0); + diff --git a/test/staging/sm/PrivateName/parse-utf8-non-ascii-identifier.js b/test/staging/sm/PrivateName/parse-utf8-non-ascii-identifier.js new file mode 100644 index 0000000000..be9d89dacc --- /dev/null +++ b/test/staging/sm/PrivateName/parse-utf8-non-ascii-identifier.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that non-ASCII identifier names are correctly parsed in the Utf-8 parser. + +// Utf-8 encoding for U+05EF is (0xD7 0xAF), the first code unit isn't a valid +// Ascii ID_START code unit. +class NonAscii { + // U+05EF HEBREW YOD TRIANGLE + #ׯ; +} + +// Also check using Unicode escapes works. +class NonAsciiUnicodeEscape1 { + // U+05EF HEBREW YOD TRIANGLE + #\u05ef; +} + +class NonAsciiUnicodeEscape2 { + // U+05EF HEBREW YOD TRIANGLE + #\u{5ef}; +} + diff --git a/test/staging/sm/PrivateName/proxy-1.js b/test/staging/sm/PrivateName/proxy-1.js new file mode 100644 index 0000000000..cbbf42a0d5 --- /dev/null +++ b/test/staging/sm/PrivateName/proxy-1.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +class A { + #x = 10; + g() { + return this.#x; + } +}; + +var p = new Proxy(new A, {}); +var completed = false; +try { + p.g(); + completed = true; +} catch (e) { + assert.sameValue(e instanceof TypeError, true); +} +assert.sameValue(completed, false); + + diff --git a/test/staging/sm/PrivateName/proxy-init-set.js b/test/staging/sm/PrivateName/proxy-init-set.js new file mode 100644 index 0000000000..e6fd9d9659 --- /dev/null +++ b/test/staging/sm/PrivateName/proxy-init-set.js @@ -0,0 +1,83 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that the distinction between Proxy Init and Proxy Set holds + +function assertThrowsTypeError(f) { + var type; + try { + f(); + } catch (ex) { + type = ex.name; + } + assert.sameValue(type, 'TypeError'); +} + + + +var target = {}; +var p1 = new Proxy(target, {}); +var p2 = new Proxy(target, {}); + +class Base { + constructor(o) { + return o; + } +} + +class A extends Base { + #field = 10; + static gf(o) { + return o.#field; + } + static sf(o) { + o.#field = 15; + } +} + +class B extends Base { + #field = 25; + static gf(o) { + return o.#field; + } + static sf(o) { + o.#field = 20; + } +} + +// Verify field handling on the proxy we install it on. +new A(p1); +assert.sameValue(A.gf(p1), 10); +A.sf(p1) +assert.sameValue(A.gf(p1), 15); + +// Despite P1 being stamped with A's field, it shouldn't +// be sufficient to set B's field. +assertThrowsTypeError(() => B.sf(p1)); +assertThrowsTypeError(() => B.gf(p1)); +assertThrowsTypeError(() => B.sf(p1)); +new B(p1); +assert.sameValue(B.gf(p1), 25); +B.sf(p1); +assert.sameValue(B.gf(p1), 20); + +// A's field should't be on the target +assertThrowsTypeError(() => A.gf(target)); + +// Can't set the field, doesn't exist +assertThrowsTypeError(() => A.sf(p2)); + +// Definitely can't get the field, doesn't exist. +assertThrowsTypeError(() => A.gf(p2)); + +// Still should't be on the target. +assertThrowsTypeError(() => A.gf(target)); + diff --git a/test/staging/sm/PrivateName/read-private-eval.js b/test/staging/sm/PrivateName/read-private-eval.js new file mode 100644 index 0000000000..29c3d66b60 --- /dev/null +++ b/test/staging/sm/PrivateName/read-private-eval.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +class A { + #x = 14; + g() { + return eval('this.#x'); + } +} + +a = new A; +assert.sameValue(a.g(), 14); + diff --git a/test/staging/sm/PrivateName/unicode-names.js b/test/staging/sm/PrivateName/unicode-names.js new file mode 100644 index 0000000000..5ef70d46cc --- /dev/null +++ b/test/staging/sm/PrivateName/unicode-names.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +source = `class A { + // Ensure this name parses. + #℘; +}`; + +Function(source); + diff --git a/test/staging/sm/Promise/bug-1287334.js b/test/staging/sm/Promise/bug-1287334.js new file mode 100644 index 0000000000..c02f79c249 --- /dev/null +++ b/test/staging/sm/Promise/bug-1287334.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var promise = Promise.resolve(1); +var FakeCtor = function(exec){ exec(function(){}, function(){}); }; +Object.defineProperty(Promise, Symbol.species, {value: FakeCtor}); +// This just shouldn't crash. It does without bug 1287334 fixed. +promise.then(function(){}); + diff --git a/test/staging/sm/Promise/bug-1288382.js b/test/staging/sm/Promise/bug-1288382.js new file mode 100644 index 0000000000..1e578a665f --- /dev/null +++ b/test/staging/sm/Promise/bug-1288382.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This just shouldn't trigger a failed assert. +// It does without bug 1288382 fixed. +Promise.all.call(class { + constructor(exec){ exec(()=>{}, ()=>{}); } + static resolve() { return {then(){}}; } +}, [null]); + diff --git a/test/staging/sm/Promise/bug-1289040.js b/test/staging/sm/Promise/bug-1289040.js new file mode 100644 index 0000000000..7ad6b46121 --- /dev/null +++ b/test/staging/sm/Promise/bug-1289040.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var global = createNewGlobal(); +Promise.prototype.then = global.Promise.prototype.then; +p1 = new Promise(function f(r) { + r(1); +}); +p2 = p1.then(function g(){}); + diff --git a/test/staging/sm/Promise/for-of-iterator-uses-getv.js b/test/staging/sm/Promise/for-of-iterator-uses-getv.js new file mode 100644 index 0000000000..08b01c84ca --- /dev/null +++ b/test/staging/sm/Promise/for-of-iterator-uses-getv.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; // Use strict-mode to ensure |this| arguments aren't converted to objects. + +var emptyIterator = { + next() { + return {done: true}; + } +}; + +Object.defineProperty(Number.prototype, Symbol.iterator, { + configurable: true, + get() { + assert.sameValue(typeof this, "number"); + return function() { + assert.sameValue(typeof this, "number"); + return emptyIterator; + } + } +}); + +Promise.all(0); +Promise.allSettled(0); +Promise.race(0); + diff --git a/test/staging/sm/Promise/methods-non-enumerable.js b/test/staging/sm/Promise/methods-non-enumerable.js new file mode 100644 index 0000000000..a0bcdb5237 --- /dev/null +++ b/test/staging/sm/Promise/methods-non-enumerable.js @@ -0,0 +1,14 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Object.keys(Promise).length, 0); +assert.sameValue(Object.keys(Promise.prototype).length, 0); + diff --git a/test/staging/sm/Promise/promise-species.js b/test/staging/sm/Promise/promise-species.js new file mode 100644 index 0000000000..efa9a1831e --- /dev/null +++ b/test/staging/sm/Promise/promise-species.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Promise[Symbol.species], Promise); +let prop = Object.getOwnPropertyDescriptor(Promise, Symbol.species); +assert.sameValue('get' in prop, true); +assert.sameValue(typeof prop.get, 'function'); +assert.sameValue('set' in prop, true); +assert.sameValue(prop.set, undefined); + diff --git a/test/staging/sm/Proxy/define-writable-as-non-writable.js b/test/staging/sm/Proxy/define-writable-as-non-writable.js new file mode 100644 index 0000000000..42132ed717 --- /dev/null +++ b/test/staging/sm/Proxy/define-writable-as-non-writable.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +var target = {}; +Object.defineProperty(target, "test", {configurable: false, writable: true, value: 5}); + +var proxy = new Proxy(target, { + defineProperty(target, property) { + assert.sameValue(property, "test"); + return true; + } +}); + +assertThrowsInstanceOf( + () => Object.defineProperty(proxy, "test", {writable: false}), TypeError); + +assertThrowsInstanceOf( + () => Reflect.defineProperty(proxy, "test", {writable: false}), TypeError); + diff --git a/test/staging/sm/Proxy/delete-non-extensible.js b/test/staging/sm/Proxy/delete-non-extensible.js new file mode 100644 index 0000000000..80fb7cc47e --- /dev/null +++ b/test/staging/sm/Proxy/delete-non-extensible.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +var target = { test: true }; +Object.preventExtensions(target); + +var proxy = new Proxy(target, { + deleteProperty(target, property) { + return true; + } +}); + +assert.sameValue(delete proxy.missing, true); +assert.sameValue(Reflect.deleteProperty(proxy, "missing"), true); + +assertThrowsInstanceOf(() => { delete proxy.test; }, TypeError); +assertThrowsInstanceOf(() => Reflect.deleteProperty(proxy, "test"), TypeError); + diff --git a/test/staging/sm/Proxy/getPrototypeOf.js b/test/staging/sm/Proxy/getPrototypeOf.js new file mode 100644 index 0000000000..803599574a --- /dev/null +++ b/test/staging/sm/Proxy/getPrototypeOf.js @@ -0,0 +1,290 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "getPrototypeOf.js"; +var BUGNUMBER = 888969; +var summary = "Scripted proxies' [[GetPrototypeOf]] behavior"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +const log = []; + +function observe(obj) +{ + var observingHandler = new Proxy({}, { + get(target, p, receiver) { + log.push(p); + return Reflect.get(target, p, receiver); + } + }); + + return new Proxy(obj, observingHandler); +} + +function nop() {} + +var p, h; + +// 1. Let handler be the value of the [[ProxyHandler]] internal slot of O. +// 2. If handler is null, throw a TypeError exception. +// 3. Assert: Type(handler) is Object. +var rev = Proxy.revocable({}, {}); +p = rev.proxy; + +assert.sameValue(Object.getPrototypeOf(p), Object.prototype); +rev.revoke(); +assertThrowsInstanceOf(() => Object.getPrototypeOf(p), TypeError); + +// 4. Let target be the value of the [[ProxyTarget]] internal slot of O. +// 5. Let trap be ? GetMethod(handler, "getPrototypeOf"). + +// Getting handler.getPrototypeOf might throw. +assertThrowsValue(() => Object.getPrototypeOf(new Proxy({}, + { get getPrototypeOf() { + throw 17; + } })), + 17); + +// The handler's getPrototypeOf, once gotten, might throw. +p = new Proxy({}, { getPrototypeOf() { throw 42; } }); + +assertThrowsValue(() => Object.getPrototypeOf(p), 42); + +// The trap might not be callable. +p = new Proxy({}, { getPrototypeOf: 17 }); + +assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + +// 6. If trap is undefined, then +// a. Return ? target.[[GetPrototypeOf]](). + +var x, tp; + +tp = + new Proxy(new Number(8675309), // behavior overridden by getPrototypeOf + { getPrototypeOf() { x = "getPrototypeOf trap"; return null; } }); + +// The target's [[GetPrototypeOf]] should be invoked if the handler's +// .getPrototypeOf is undefined. +p = new Proxy(tp, { getPrototypeOf: undefined }); +x = "unset"; +assert.sameValue(Object.getPrototypeOf(p), null); +assert.sameValue(x, "getPrototypeOf trap"); + +// Likewise if the handler's .getPrototypeOf is null. +p = new Proxy(tp, { getPrototypeOf: null }); +x = "unset"; +assert.sameValue(Object.getPrototypeOf(p), null); +assert.sameValue(x, "getPrototypeOf trap"); + +// Now the target is an empty object with a Number object as its [[Prototype]]. +var customProto = new Number(8675309); +tp = + new Proxy({}, + { getPrototypeOf() { + x = "getPrototypeOf trap"; + return customProto; + } }); + +// The target's [[GetPrototypeOf]] should be invoked if the handler's +// .getPrototypeOf is undefined. +p = new Proxy(tp, { getPrototypeOf: undefined }); +x = "unset"; +assert.sameValue(Object.getPrototypeOf(p), customProto); +assert.sameValue(x, "getPrototypeOf trap"); + +// Likewise if the handler's .getPrototypeOf is null. +p = new Proxy(tp, { getPrototypeOf: null }); +x = "unset"; +assert.sameValue(Object.getPrototypeOf(p), customProto); +assert.sameValue(x, "getPrototypeOf trap"); + +// 7. Let handlerProto be ? Call(trap, handler, « target »). + +// The trap callable might throw. +p = new Proxy({}, { getPrototypeOf() { throw "ohai"; } }); + +assertThrowsValue(() => Object.getPrototypeOf(p), + "ohai"); + +var throwingTrap = + new Proxy(function() { throw "not called"; }, + { apply() { throw 37; } }); + +p = new Proxy({}, { getPrototypeOf: throwingTrap }); + +assertThrowsValue(() => Object.getPrototypeOf(p), + 37); + +// The trap callable must *only* be called. +p = new Proxy({}, + { + getPrototypeOf: observe(function() { throw "boo-urns"; }) + }); + +log.length = 0; +assertThrowsValue(() => Object.getPrototypeOf(p), + "boo-urns"); + +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "apply"); + +// 8. If Type(handlerProto) is neither Object nor Null, throw a TypeError exception. + +var rval; + +var typeTestingTarget = {}; +p = new Proxy(typeTestingTarget, { getPrototypeOf() { return rval; } }); + +function returnsPrimitives() +{ + rval = undefined; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = true; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = false; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = 0.0; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = -0.0; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = 3.141592654; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = NaN; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = -Infinity; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = "[[Prototype]] FOR REALZ"; + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + + rval = Symbol("[[Prototype]] FOR REALZ"); + assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); +} + +returnsPrimitives(); +Object.preventExtensions(typeTestingTarget); +returnsPrimitives(); + +// 9. Let extensibleTarget be ? IsExtensible(target). + +var act, extens; + +var typeTestingProxyTarget = + new Proxy({}, { isExtensible() { + seen = act(); + return extens; + } }); + +p = new Proxy(typeTestingProxyTarget, { getPrototypeOf() { return rval; } }); + +rval = null; +act = () => { throw "fnord" }; +assertThrowsValue(() => Object.getPrototypeOf(p), + "fnord"); + +rval = /abc/; +act = () => { throw "fnord again" }; +assertThrowsValue(() => Object.getPrototypeOf(p), + "fnord again"); + +rval = Object.prototype; +act = () => { throw "fnord" }; +assertThrowsValue(() => Object.getPrototypeOf(p), + "fnord"); + +// 10. If extensibleTarget is true, return handlerProto. + +p = new Proxy({}, { getPrototypeOf() { return rval; } }); + +rval = Number.prototype; +assert.sameValue(Object.getPrototypeOf(p), Number.prototype); + +// 11. Let targetProto be ? target.[[GetPrototypeOf]](). + +var targetProto; + +var targetWithProto = + new Proxy(Object.preventExtensions(Object.create(null)), + { getPrototypeOf() { act2(); return targetProto; } }); + +p = new Proxy(targetWithProto, + { getPrototypeOf() { act1(); return rval; } }); + +rval = null; +targetProto = null; + +var regex = /targetProto/; + +act1 = () => log.push("act1"); +act2 = () => log.push("act2"); + +log.length = 0; +assert.sameValue(Object.getPrototypeOf(p), null); +assert.sameValue(log.length, 2); +assert.sameValue(log[0], "act1"); +assert.sameValue(log[1], "act2"); + +act1 = () => log.push("act1 again"); +act2 = () => { throw "target throw"; }; + +log.length = 0; +assertThrowsValue(() => Object.getPrototypeOf(p), + "target throw"); +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "act1 again"); + +// 12. If SameValue(handlerProto, targetProto) is false, throw a TypeError exception. + +act1 = act2 = nop; +rval = /a/; +assertThrowsInstanceOf(() => Object.getPrototypeOf(p), + TypeError); + +// 13. Return handlerProto. + +rval = null; +targetProto = null; + +assert.sameValue(Object.getPrototypeOf(p), null); + +p = new Proxy(Object.preventExtensions(new Number(55)), + { getPrototypeOf() { return Number.prototype; } }); + +assert.sameValue(Object.getPrototypeOf(p), Number.prototype); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Proxy/global-receiver.js b/test/staging/sm/Proxy/global-receiver.js new file mode 100644 index 0000000000..97cc9b1f45 --- /dev/null +++ b/test/staging/sm/Proxy/global-receiver.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// The global object can be the receiver passed to the get and set traps of a Proxy. +var global = this; +var proto = Object.getPrototypeOf(global); +var gets = 0, sets = 0; + +try { + Object.setPrototypeOf(global, new Proxy(proto, { + has(t, id) { + return id === "bareword" || Reflect.has(t, id); + }, + get(t, id, r) { + gets++; + assert.sameValue(r, global); + return Reflect.get(t, id, r); + }, + set(t, id, v, r) { + sets++; + assert.sameValue(r, global); + return Reflect.set(t, id, v, r); + } + })); +} catch (e) { + global.bareword = undefined; + gets = 1; + sets = 1; +} + +assert.sameValue(bareword, undefined); +assert.sameValue(gets, 1); + +bareword = 12; +assert.sameValue(sets, 1); +assert.sameValue(global.bareword, 12); + diff --git a/test/staging/sm/Proxy/hasInstance.js b/test/staging/sm/Proxy/hasInstance.js new file mode 100644 index 0000000000..6b8a790574 --- /dev/null +++ b/test/staging/sm/Proxy/hasInstance.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var get = []; +var fun = function() {} +var p = new Proxy(fun, { + get(target, key) { + get.push(key); + return target[key]; + } +}); + +assert.sameValue(new fun instanceof p, true); +assert.deepEqual(get, [Symbol.hasInstance, "prototype"]); + diff --git a/test/staging/sm/Proxy/json-stringify-replacer-array-revocable-proxy.js b/test/staging/sm/Proxy/json-stringify-replacer-array-revocable-proxy.js new file mode 100644 index 0000000000..fb2c8762b1 --- /dev/null +++ b/test/staging/sm/Proxy/json-stringify-replacer-array-revocable-proxy.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "json-stringify-replacer-array-revocable-proxy.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1196497; +var summary = + "Don't assert when JSON.stringify is passed a revocable proxy to an array, " + + "then that proxy is revoked midflight during stringification"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +var { proxy, revoke } = Proxy.revocable(arr, { + get(thisv, prop, receiver) { + // First (and only) get will be for "length", to determine the length of the + // list of properties to serialize. Returning 0 uses the empty list, + // resulting in |a: 0| being ignored below. + assert.sameValue(thisv, arr); + assert.sameValue(prop, "length"); + assert.sameValue(receiver, proxy); + + revoke(); + return 0; + } +}); + +assert.sameValue(JSON.stringify({a: 0}, proxy), "{}"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Proxy/ownkeys-allowed-types.js b/test/staging/sm/Proxy/ownkeys-allowed-types.js new file mode 100644 index 0000000000..0ab2a0a491 --- /dev/null +++ b/test/staging/sm/Proxy/ownkeys-allowed-types.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function makeProxy(type) { + return new Proxy({}, { ownKeys() { return [type]; } }); +} + +for (var type of [123, 12.5, true, false, undefined, null, {}, []]) { + var proxy = makeProxy(type); + assertThrowsInstanceOf(() => Object.ownKeys(proxy), TypeError); + assertThrowsInstanceOf(() => Object.getOwnPropertyNames(proxy), TypeError); +} + +type = Symbol(); +proxy = makeProxy(type); +assert.sameValue(Object.getOwnPropertySymbols(proxy)[0], type); + +type = "abc"; +proxy = makeProxy(type); +assert.sameValue(Object.getOwnPropertyNames(proxy)[0], type); + diff --git a/test/staging/sm/Proxy/ownkeys-linear.js b/test/staging/sm/Proxy/ownkeys-linear.js new file mode 100644 index 0000000000..44e728fa2f --- /dev/null +++ b/test/staging/sm/Proxy/ownkeys-linear.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'ownkeys-linear.js'; +var BUGNUMBER = 1257779; +var summary = + "Scripted proxies' [[OwnPropertyKeys]] should have linear complexity"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Making this 50k makes cgc builds time out on tbpl. 5k takes 28s locally. +// 10k takes 84s locally. So pick an intermediate number, with a generous +// constant factor in case cgc-on-tbpl is much slower. +const HALF_COUNT = 7500; + +var configurables = []; +for (var i = 0; i < HALF_COUNT; i++) + configurables.push("conf" + i); + +var nonconfigurables = []; +for (var i = 0; i < HALF_COUNT; i++) + nonconfigurables.push("nonconf" + i); + +var target = {}; +for (var name of configurables) + Object.defineProperty(target, name, { configurable: false, value: 0 }); +for (var name of nonconfigurables) + Object.defineProperty(target, name, { configurable: true, value: 0 }); + +var handler = { + ownKeys(t) { + assert.sameValue(t, target, "target mismatch!"); + + var trapResult = []; + + // Append all nonconfigurables in reverse order of presence. + for (var i = nonconfigurables.length; i > 0; i--) + trapResult.push(nonconfigurables[i - 1]); + + // Then the same for all configurables. + for (var i = configurables.length; i > 0; i--) + trapResult.push(configurables[i - 1]); + + // The end consequence is that this ordering is exactly opposite the + // ordering they'll have on the target, and so worst-case performance will + // occur if the spec's |uncheckedResultKeys| structure is a vector having + // the same order as |trapResult|, searched from beginning to end in the + // presence-checks in the last few steps of the [[OwnPropertyKeys]] + // algorithm. + return trapResult; + } +}; + +var p = new Proxy(target, handler); + +// The test passes if it doesn't time out. +assert.sameValue(Object.getOwnPropertyNames(p).length, HALF_COUNT * 2); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Proxy/ownkeys-trap-duplicates.js b/test/staging/sm/Proxy/ownkeys-trap-duplicates.js new file mode 100644 index 0000000000..7a2d1dc24e --- /dev/null +++ b/test/staging/sm/Proxy/ownkeys-trap-duplicates.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'ownkeys-trap-duplicates.js'; +var BUGNUMBER = 1293995; +var summary = + "Scripted proxies' [[OwnPropertyKeys]] should not throw if the trap " + + "implementation returns duplicate properties and the object is " + + "non-extensible or has non-configurable properties." + + "Revised (bug 1389752): Throw TypeError for duplicate properties."; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var target = Object.preventExtensions({ a: 1 }); +var proxy = new Proxy(target, { ownKeys(t) { return ["a", "a"]; } }); +assertThrowsInstanceOf(() => Object.getOwnPropertyNames(proxy), TypeError); + +target = Object.freeze({ a: 1 }); +proxy = new Proxy(target, { ownKeys(t) { return ["a", "a"]; } }); +assertThrowsInstanceOf(() => Object.getOwnPropertyNames(proxy), TypeError); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Proxy/proxy-__proto__.js b/test/staging/sm/Proxy/proxy-__proto__.js new file mode 100644 index 0000000000..936faa576f --- /dev/null +++ b/test/staging/sm/Proxy/proxy-__proto__.js @@ -0,0 +1,64 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'proxy-__proto__.js'; +var BUGNUMBER = 950407; +var summary = "Behavior of __proto__ on ES6 proxies"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var protoDesc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); +var protoGetter = protoDesc.get; +var protoSetter = protoDesc.set; + +function testProxy(target, initialProto) +{ + print("Now testing behavior for new Proxy(" + ("" + target) + ", {})"); + + var pobj = new Proxy(target, {}); + + // Check [[Prototype]] before attempted mutation + assert.sameValue(Object.getPrototypeOf(pobj), initialProto); + assert.sameValue(protoGetter.call(pobj), initialProto); + + // Attempt [[Prototype]] mutation + protoSetter.call(pobj, null); + + // Check [[Prototype]] after attempted mutation + assert.sameValue(Object.getPrototypeOf(pobj), null); + assert.sameValue(protoGetter.call(pobj), null); + assert.sameValue(Object.getPrototypeOf(target), null); +} + +// Proxy object with non-null [[Prototype]] +var nonNullProto = { toString: function() { return "non-null prototype"; } }; +var target = Object.create(nonNullProto); +testProxy(target, nonNullProto); + +// Proxy object with null [[Prototype]] +target = Object.create(null); +target.toString = function() { return "null prototype" }; +testProxy(target, null); + +// Proxy function with [[Call]] +var callForCallOnly = function () { }; +callForCallOnly.toString = function() { return "callable target"; }; +testProxy(callForCallOnly, Function.prototype); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Proxy/proxy-constructNonObject.js b/test/staging/sm/Proxy/proxy-constructNonObject.js new file mode 100644 index 0000000000..69347f1c01 --- /dev/null +++ b/test/staging/sm/Proxy/proxy-constructNonObject.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function bogusConstruct(target) { return 4; } +function bogusConstructUndefined(target) { } + +var handler = { construct: bogusConstruct } + +function callable() {} + +var p = new Proxy(callable, handler); + +assertThrowsInstanceOf(function () { new p(); }, TypeError, + "[[Construct must throw if an object is not returned."); + +handler.construct = bogusConstructUndefined; +assertThrowsInstanceOf(function () { new p(); }, TypeError, + "[[Construct must throw if an object is not returned."); + diff --git a/test/staging/sm/Proxy/proxy-no-receiver-overwrite.js b/test/staging/sm/Proxy/proxy-no-receiver-overwrite.js new file mode 100644 index 0000000000..ea815f5ee2 --- /dev/null +++ b/test/staging/sm/Proxy/proxy-no-receiver-overwrite.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +var y = new Proxy({}, { + getOwnPropertyDescriptor(target, key) { + if (key === "a") { + return { configurable: true, get: function(v) {} }; + } else { + assert.sameValue(key, "b"); + return { configurable: true, writable: false, value: 15 }; + } + }, + + defineProperty() { + throw "not invoked"; + } +}) + +// This will invoke [[Set]] on the target, with the proxy as receiver. +assertThrowsInstanceOf(() => y.a = 1, TypeError); +assertThrowsInstanceOf(() => y.b = 2, TypeError); + diff --git a/test/staging/sm/Proxy/proxy-proto-lazy-props.js b/test/staging/sm/Proxy/proxy-proto-lazy-props.js new file mode 100644 index 0000000000..34a82f1479 --- /dev/null +++ b/test/staging/sm/Proxy/proxy-proto-lazy-props.js @@ -0,0 +1,70 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function makeProxyPrototype(target) { + return Object.setPrototypeOf(target, new Proxy({}, new Proxy({ + getPrototypeOf() { + return null; + }, + ownKeys() { + return []; + }, + get(t, pk, r) { + throw new Error("Unexpected [[Get]]: " + String(pk)); + } + }, { + get(t, pk, r) { + if (pk in t) + return Reflect.get(t, pk, r); + throw new Error("Unexpected trap called: " + pk); + } + }))); +} + +function enumerateMappedArgs(x) { + var a = makeProxyPrototype(arguments); + + // Delete all lazy properties and ensure no [[Has]] trap is called for them + // on the prototype chain. + delete a.length; + delete a.callee; + delete a[Symbol.iterator]; + delete a[0]; + + for (var k in a); +} +enumerateMappedArgs(0); + +function enumerateUnmappedArgs(x) { + "use strict"; + var a = makeProxyPrototype(arguments); + + delete a.length; + // delete a.callee; // .callee is non-configurable + delete a[Symbol.iterator]; + delete a[0]; + + for (var k in a); +} +enumerateUnmappedArgs(0); + +function enumerateFunction() { + var f = makeProxyPrototype(function named() {}); + + // delete f.prototype; // .prototype is non-configurable + delete f.length; + delete f.name; + + for (var k in f); +} +enumerateFunction(); + + diff --git a/test/staging/sm/Proxy/proxy-with-revoked-arguments.js b/test/staging/sm/Proxy/proxy-with-revoked-arguments.js new file mode 100644 index 0000000000..31ab4fc5ca --- /dev/null +++ b/test/staging/sm/Proxy/proxy-with-revoked-arguments.js @@ -0,0 +1,62 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1151149; +var summary = "Proxy constructor should not throw if either the target or handler is a revoked proxy."; + +print(BUGNUMBER + ": " + summary); + +var p = new Proxy({}, {}); + +new Proxy(p, {}); +new Proxy({}, p); + +var r = Proxy.revocable({}, {}); +p = r.proxy; + +new Proxy(p, {}); +new Proxy({}, p); + +r.revoke(); + +new Proxy(p, {}); +new Proxy({}, p); + + +var r2 = Proxy.revocable({}, {}); +r = Proxy.revocable(r2.proxy, {}); +p = r.proxy; + +new Proxy(p, {}); +new Proxy({}, p); + +r2.revoke(); + +new Proxy(p, {}); +new Proxy({}, p); + +r.revoke(); + +new Proxy(p, {}); +new Proxy({}, p); + + +var g = createNewGlobal(); +p = g.eval(`var r = Proxy.revocable({}, {}); r.proxy;`); + +new Proxy(p, {}); +new Proxy({}, p); + +g.eval(`r.revoke();`); + +new Proxy(p, {}); +new Proxy({}, p); + diff --git a/test/staging/sm/Proxy/regress-bug1037770.js b/test/staging/sm/Proxy/regress-bug1037770.js new file mode 100644 index 0000000000..5f4b866e3e --- /dev/null +++ b/test/staging/sm/Proxy/regress-bug1037770.js @@ -0,0 +1,16 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +foo = 1; +Object.defineProperty(this, "foo", {writable:false, configurable:true}); +foo = 2; +assert.sameValue(foo, 1); + diff --git a/test/staging/sm/Proxy/regress-bug1062349.js b/test/staging/sm/Proxy/regress-bug1062349.js new file mode 100644 index 0000000000..dbd8400f70 --- /dev/null +++ b/test/staging/sm/Proxy/regress-bug1062349.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Adapted from a test case contributed by André Bargull in bug 1062349. + +var log = []; +var hh = { + get(t, pk) { + log.push("trap: " + pk); + return t[pk]; + } +}; +var h = new Proxy({ + get set() { + log.push("called set()"); + Object.defineProperty(o, "prop", {value: 0}); + log.push("o.prop:", Object.getOwnPropertyDescriptor(o, "prop")); + } +}, hh); +var p = new Proxy({}, h); +var o = {__proto__: p}; + +o.prop = 1; + +var expectedDesc = {value: 0, writable: false, enumerable: false, configurable: false}; +assert.deepEqual(log, [ + "trap: set", + "called set()", + "o.prop:", + expectedDesc +]); +assert.deepEqual(Object.getOwnPropertyDescriptor(o, "prop"), expectedDesc); + diff --git a/test/staging/sm/Proxy/regress-bug950407.js b/test/staging/sm/Proxy/regress-bug950407.js new file mode 100644 index 0000000000..d2fa6ea2c4 --- /dev/null +++ b/test/staging/sm/Proxy/regress-bug950407.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var ab = new ArrayBuffer(5); +var p = new Proxy(ab, {}); +var ps = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set; +var new_proto = {}; +ps.call(p, new_proto); + +assert.sameValue(ab.__proto__, new_proto); diff --git a/test/staging/sm/Proxy/report-writable-as-non-writable.js b/test/staging/sm/Proxy/report-writable-as-non-writable.js new file mode 100644 index 0000000000..5278781948 --- /dev/null +++ b/test/staging/sm/Proxy/report-writable-as-non-writable.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +var target = {}; +Object.defineProperty(target, "test", + {configurable: false, writable: true, value: 1}); + +var proxy = new Proxy(target, { + getOwnPropertyDescriptor(target, property) { + assert.sameValue(property, "test"); + return {configurable: false, writable: false, value: 1}; + } +}); + +assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(proxy, "test"), + TypeError); + +assertThrowsInstanceOf(() => Reflect.getOwnPropertyDescriptor(proxy, "test"), + TypeError); + diff --git a/test/staging/sm/Proxy/revocable-proxy-prototype.js b/test/staging/sm/Proxy/revocable-proxy-prototype.js new file mode 100644 index 0000000000..31de3b7c62 --- /dev/null +++ b/test/staging/sm/Proxy/revocable-proxy-prototype.js @@ -0,0 +1,45 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'revocable-proxy-prototype.js'; +var BUGNUMBER = 1052139; +var summary = "Accessing a revocable proxy's [[Prototype]] shouldn't crash"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ +function checkFunctionAppliedToRevokedProxy(fun) +{ + var p = Proxy.revocable({}, {}); + p.revoke(); + + try + { + fun(p.proxy); + throw "didn't throw"; + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "expected TypeError, got " + e); + } +} + +checkFunctionAppliedToRevokedProxy(proxy => Object.getPrototypeOf(proxy)); +checkFunctionAppliedToRevokedProxy(proxy => Object.setPrototypeOf(proxy, null)); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Proxy/revoke-as-side-effect.js b/test/staging/sm/Proxy/revoke-as-side-effect.js new file mode 100644 index 0000000000..475d6aaf0b --- /dev/null +++ b/test/staging/sm/Proxy/revoke-as-side-effect.js @@ -0,0 +1,82 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function createProxy(proxyTarget) { + var {proxy, revoke} = Proxy.revocable(proxyTarget, new Proxy({}, { + get(target, propertyKey, receiver) { + print("trap get:", propertyKey); + revoke(); + } + })); + return proxy; +} + +var obj; + +// [[GetPrototypeOf]] +assert.sameValue(Object.getPrototypeOf(createProxy({})), Object.prototype); +assert.sameValue(Object.getPrototypeOf(createProxy([])), Array.prototype); + +// [[SetPrototypeOf]] +obj = {}; +Object.setPrototypeOf(createProxy(obj), Array.prototype); +assert.sameValue(Object.getPrototypeOf(obj), Array.prototype); + +// [[IsExtensible]] +assert.sameValue(Object.isExtensible(createProxy({})), true); +assert.sameValue(Object.isExtensible(createProxy(Object.preventExtensions({}))), false); + +// [[PreventExtensions]] +obj = {}; +Object.preventExtensions(createProxy(obj)); +assert.sameValue(Object.isExtensible(obj), false); + +// [[GetOwnProperty]] +assert.sameValue(Object.getOwnPropertyDescriptor(createProxy({}), "a"), undefined); +assert.sameValue(Object.getOwnPropertyDescriptor(createProxy({a: 5}), "a").value, 5); + +// [[DefineOwnProperty]] +obj = {}; +Object.defineProperty(createProxy(obj), "a", {value: 5}); +assert.sameValue(obj.a, 5); + +// [[HasProperty]] +assert.sameValue("a" in createProxy({}), false); +assert.sameValue("a" in createProxy({a: 5}), true); + +// [[Get]] +assert.sameValue(createProxy({}).a, undefined); +assert.sameValue(createProxy({a: 5}).a, 5); + +// [[Set]] +assertThrowsInstanceOf(() => createProxy({}).a = 0, TypeError); +assertThrowsInstanceOf(() => createProxy({a: 5}).a = 0, TypeError); + +// [[Delete]] +assert.sameValue(delete createProxy({}).a, true); +assert.sameValue(delete createProxy(Object.defineProperty({}, "a", {configurable: false})).a, false); + +// [[OwnPropertyKeys]] +assert.sameValue(Object.getOwnPropertyNames(createProxy({})).length, 0); +assert.sameValue(Object.getOwnPropertyNames(createProxy({a: 5})).length, 1); + +// [[Call]] +assert.sameValue(createProxy(function() { return "ok" })(), "ok"); + +// [[Construct]] +// This throws because after the "construct" trap on the proxy is consulted, +// OrdinaryCreateFromConstructor (called because the |q| function's +// [[ConstructorKind]] is "base" per FunctionAllocate) accesses +// |new.target.prototype| to create the |this| for the construct operation, that +// would be returned if |return obj;| didn't override it. +assertThrowsInstanceOf(() => new (createProxy(function q(){ return obj; })), + TypeError); + diff --git a/test/staging/sm/Proxy/revoke-no-name.js b/test/staging/sm/Proxy/revoke-no-name.js new file mode 100644 index 0000000000..24abb3169f --- /dev/null +++ b/test/staging/sm/Proxy/revoke-no-name.js @@ -0,0 +1,13 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var revocationFunction = Proxy.revocable({}, {}).revoke; +assert.sameValue(revocationFunction.name, ""); diff --git a/test/staging/sm/Proxy/revoked-get-function-realm-typeerror.js b/test/staging/sm/Proxy/revoked-get-function-realm-typeerror.js new file mode 100644 index 0000000000..151cd521b6 --- /dev/null +++ b/test/staging/sm/Proxy/revoked-get-function-realm-typeerror.js @@ -0,0 +1,128 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var constructors = [ + // 19.1 Object Objects + {constructor: Object}, + + // 19.2 Function Objects + {constructor: Function}, + + // 19.3 Boolean Objects + {constructor: Boolean}, + + // 19.5 Error Objects + {constructor: Error}, + + // 19.5.5 Native Error Types Used in This Standard + {constructor: EvalError}, + {constructor: RangeError}, + {constructor: ReferenceError}, + {constructor: SyntaxError}, + {constructor: TypeError}, + {constructor: URIError}, + + // 20.1 Number Objects + {constructor: Number}, + + // 20.3 Date Objects + {constructor: Date}, + + // 21.1 String Objects + {constructor: String}, + + // 21.2 RegExp (Regular Expression) Objects + {constructor: RegExp}, + + // 22.1 Array Objects + {constructor: Array}, + + // 22.2 TypedArray Objects + {constructor: Int8Array}, + + // 23.1 Map Objects + {constructor: Map}, + + // 23.2 Set Objects + {constructor: Set}, + + // 23.3 WeakMap Objects + {constructor: WeakMap}, + + // 23.4 WeakSet Objects + {constructor: WeakSet}, + + // 24.1 ArrayBuffer Objects + {constructor: ArrayBuffer}, + + // 24.2 SharedArrayBuffer Objects + ...(typeof SharedArrayBuffer === "function" ? [{constructor: SharedArrayBuffer}] : []), + + // 24.3 DataView Objects + {constructor: DataView, args: [new ArrayBuffer(0)]}, + + // 25.2 GeneratorFunction Objects + {constructor: function*(){}.constructor}, + + // 25.3 AsyncGeneratorFunction Objects + {constructor: async function*(){}.constructor}, + + // 25.6 Promise Objects + {constructor: Promise, args: [function(){}]}, + + // 25.7 AsyncFunction Objects + {constructor: async function(){}.constructor}, + + // 9.2 ECMAScript Function Objects + {constructor: function(){}}, + + // Intl can be disabled at compile-time. + ...(typeof Intl !== "undefined" ? [ + // 10 Collator Objects + {constructor: Intl.Collator}, + + // 11 NumberFormat Objects + {constructor: Intl.NumberFormat}, + + // 12 DateTimeFormat Objects + {constructor: Intl.DateTimeFormat}, + + // 13 PluralRules Objects + {constructor: Intl.PluralRules}, + + // Intl.RelativeTimeFormat proposal + {constructor: Intl.RelativeTimeFormat}, + + // Intl.Locale is not yet enabled by default. + ...(Intl.Locale ? [Intl.Locale] : []), + ] : []), +]; + +for (let {constructor, args = []} of constructors) { + let revoked = 0; + let {proxy, revoke} = Proxy.revocable(function(){}, { + get(t, pk, r) { + if (pk === "prototype") { + revoked++; + revoke(); + return undefined; + } + return Reflect.get(t, pk, r); + } + }); + + assertThrowsInstanceOf(() => { + Reflect.construct(constructor, args, proxy); + }, TypeError); + + assert.sameValue(revoked, 1); +} + diff --git a/test/staging/sm/Proxy/setPrototypeOf.js b/test/staging/sm/Proxy/setPrototypeOf.js new file mode 100644 index 0000000000..69c31b746c --- /dev/null +++ b/test/staging/sm/Proxy/setPrototypeOf.js @@ -0,0 +1,263 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "setPrototypeOf.js"; +var BUGNUMBER = 888969; +var summary = "Scripted proxies' [[SetPrototypeOf]] behavior"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +const log = []; + +function observe(obj) +{ + var observingHandler = new Proxy({}, { + get(target, p, receiver) { + log.push(p); + return Reflect.get(target, p, receiver); + } + }); + + return new Proxy(obj, observingHandler); +} + +var p, h; + +// 1. Assert: Either Type(V) is Object or Type(V) is Null. +// 2. Let handler be the value of the [[ProxyHandler]] internal slot of O. +// 3. If handler is null, throw a TypeError exception. +// 4. Assert: Type(handler) is Object. +// 5. Let target be the value of the [[ProxyTarget]] internal slot of O. + +var rev = Proxy.revocable({}, {}); +p = rev.proxy; + +var originalProto = Reflect.getPrototypeOf(p); +assert.sameValue(originalProto, Object.prototype); + +rev.revoke(); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, originalProto), + TypeError); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +// 6. Let trap be ? GetMethod(handler, "setPrototypeOf"). + +// handler has uncallable (and not null/undefined) property +p = new Proxy({}, { setPrototypeOf: 9 }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, { setPrototypeOf: -3.7 }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, { setPrototypeOf: NaN }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, { setPrototypeOf: Infinity }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, { setPrototypeOf: true }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, { setPrototypeOf: /x/ }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, { setPrototypeOf: Symbol(42) }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, { setPrototypeOf: class X {} }); +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +p = new Proxy({}, observe({})); + +assert.sameValue(Reflect.setPrototypeOf(p, Object.prototype), true); +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "get"); + +h = observe({ setPrototypeOf() { throw 3.14; } }); +p = new Proxy(Object.create(Object.prototype), h); + +// "setting" without change +log.length = 0; +assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype), + 3.14); +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "get"); + +// "setting" with change +log.length = 0; +assertThrowsValue(() => Reflect.setPrototypeOf(p, /foo/), + 3.14); +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "get"); + +// 7. If trap is undefined, then +// a. Return ? target.[[SetPrototypeOf]](V). + +var settingProtoThrows = + new Proxy({}, { setPrototypeOf() { throw "agnizes"; } }); + +p = new Proxy(settingProtoThrows, { setPrototypeOf: undefined }); +assertThrowsValue(() => Reflect.setPrototypeOf(p, null), + "agnizes"); + +p = new Proxy(settingProtoThrows, { setPrototypeOf: null }); +assertThrowsValue(() => Reflect.setPrototypeOf(p, null), + "agnizes"); + +var anotherProto = + new Proxy({}, + { setPrototypeOf(t, p) { + log.push("reached"); + return Reflect.setPrototypeOf(t, p); + } }); + +p = new Proxy(anotherProto, { setPrototypeOf: undefined }); + +log.length = 0; +assert.sameValue(Reflect.setPrototypeOf(p, null), true); +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "reached"); + +p = new Proxy(anotherProto, { setPrototypeOf: null }); + +log.length = 0; +assert.sameValue(Reflect.setPrototypeOf(p, null), true); +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "reached"); + +// 8. Let booleanTrapResult be ToBoolean(? Call(trap, handler, « target, V »)). + +// The trap callable might throw. +p = new Proxy({}, { setPrototypeOf() { throw "ohai"; } }); + +assertThrowsValue(() => Reflect.setPrototypeOf(p, /x/), + "ohai"); + +var throwingTrap = + new Proxy(function() { throw "not called"; }, + { apply() { throw 37; } }); + +p = new Proxy({}, { setPrototypeOf: throwingTrap }); + +assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype), + 37); + +// The trap callable must *only* be called. +p = new Proxy({}, + { + setPrototypeOf: observe(function() { throw "boo-urns"; }) + }); + +log.length = 0; +assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype), + "boo-urns"); + +assert.sameValue(log.length, 1); +assert.sameValue(log[0], "apply"); + +// 9. If booleanTrapResult is false, return false. + +p = new Proxy({}, { setPrototypeOf() { return false; } }); +assert.sameValue(Reflect.setPrototypeOf(p, Object.prototype), false); + +p = new Proxy({}, { setPrototypeOf() { return +0; } }); +assert.sameValue(Reflect.setPrototypeOf(p, Object.prototype), false); + +p = new Proxy({}, { setPrototypeOf() { return -0; } }); +assert.sameValue(Reflect.setPrototypeOf(p, Object.prototype), false); + +p = new Proxy({}, { setPrototypeOf() { return NaN; } }); +assert.sameValue(Reflect.setPrototypeOf(p, Object.prototype), false); + +p = new Proxy({}, { setPrototypeOf() { return ""; } }); +assert.sameValue(Reflect.setPrototypeOf(p, Object.prototype), false); + +p = new Proxy({}, { setPrototypeOf() { return undefined; } }); +assert.sameValue(Reflect.setPrototypeOf(p, Object.prototype), false); + +// 10. Let extensibleTarget be ? IsExtensible(target). + +var targetThrowIsExtensible = + new Proxy({}, { isExtensible() { throw "psych!"; } }); + +p = new Proxy(targetThrowIsExtensible, { setPrototypeOf() { return true; } }); +assertThrowsValue(() => Reflect.setPrototypeOf(p, Object.prototype), + "psych!"); + +// 11. If extensibleTarget is true, return true. + +var targ = {}; + +p = new Proxy(targ, { setPrototypeOf() { return true; } }); +assert.sameValue(Reflect.setPrototypeOf(p, /x/), true); +assert.sameValue(Reflect.getPrototypeOf(targ), Object.prototype); +assert.sameValue(Reflect.getPrototypeOf(p), Object.prototype); + +p = new Proxy(targ, { setPrototypeOf() { return /x/; } }); +assert.sameValue(Reflect.setPrototypeOf(p, /x/), true); +assert.sameValue(Reflect.getPrototypeOf(targ), Object.prototype); +assert.sameValue(Reflect.getPrototypeOf(p), Object.prototype); + +p = new Proxy(targ, { setPrototypeOf() { return Infinity; } }); +assert.sameValue(Reflect.setPrototypeOf(p, /x/), true); +assert.sameValue(Reflect.getPrototypeOf(targ), Object.prototype); +assert.sameValue(Reflect.getPrototypeOf(p), Object.prototype); + +p = new Proxy(targ, { setPrototypeOf() { return Symbol(true); } }); +assert.sameValue(Reflect.setPrototypeOf(p, /x/), true); +assert.sameValue(Reflect.getPrototypeOf(targ), Object.prototype); +assert.sameValue(Reflect.getPrototypeOf(p), Object.prototype); + +// 12. Let targetProto be ? target.[[GetPrototypeOf]](). + +var targetNotExtensibleGetProtoThrows = + new Proxy(Object.preventExtensions({}), + { getPrototypeOf() { throw NaN; } }); + +p = new Proxy(targetNotExtensibleGetProtoThrows, + { setPrototypeOf() { log.push("goober"); return true; } }); + +log.length = 0; +assertThrowsValue(() => Reflect.setPrototypeOf(p, /abcd/), + NaN); + +// 13. If SameValue(V, targetProto) is false, throw a TypeError exception. + +var newProto; + +p = new Proxy(Object.preventExtensions(Object.create(Math)), + { setPrototypeOf(t, p) { return true; } }); + +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(p, null), + TypeError); + +// 14. Return true. + +assert.sameValue(Reflect.setPrototypeOf(p, Math), true); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Proxy/trap-null.js b/test/staging/sm/Proxy/trap-null.js new file mode 100644 index 0000000000..5125aa87a6 --- /dev/null +++ b/test/staging/sm/Proxy/trap-null.js @@ -0,0 +1,108 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'trap-null.js'; +var BUGNUMBER = 1257102; +var summary = "null as a trap value on a handler should operate on the target"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// This might seem like overkill, but this proxying trick caught typos of +// several trap names before this test landed. \o/ /o\ +var allTraps = { + getPrototypeOf: null, + setPrototypeOf: null, + isExtensible: null, + preventExtensions: null, + getOwnPropertyDescriptor: null, + defineProperty: null, + has: null, + get: null, + set: null, + deleteProperty: null, + ownKeys: null, + apply: null, + construct: null, +}; + +var complainingHandler = new Proxy(allTraps, { + get(target, p, receiver) { + var v = Reflect.get(target, p, receiver); + if (v !== null) + throw new TypeError("failed to set one of the traps to null? " + p); + + return v; + } +}); + +var proxyTarget = function(x) { + "use strict"; + var str = this + x; + str += new.target ? "constructing" : "calling"; + return new.target ? new String(str) : str; +}; +proxyTarget.prototype.toString = () => "###"; +proxyTarget.prototype.valueOf = () => "@@@"; + +var proxy = new Proxy(proxyTarget, complainingHandler); + +assert.sameValue(Reflect.getPrototypeOf(proxy), Function.prototype); + +assert.sameValue(Object.getPrototypeOf(proxyTarget), Function.prototype); +assert.sameValue(Reflect.setPrototypeOf(proxy, null), true); +assert.sameValue(Object.getPrototypeOf(proxyTarget), null); + +assert.sameValue(Reflect.isExtensible(proxy), true); + +assert.sameValue(Reflect.isExtensible(proxyTarget), true); +assert.sameValue(Reflect.preventExtensions(proxy), true); +assert.sameValue(Reflect.isExtensible(proxy), false); +assert.sameValue(Reflect.isExtensible(proxyTarget), false); + +var desc = Reflect.getOwnPropertyDescriptor(proxy, "length"); +assert.sameValue(desc.value, 1); + +assert.sameValue(desc.configurable, true); +assert.sameValue(Reflect.defineProperty(proxy, "length", { value: 3, configurable: false }), true); +desc = Reflect.getOwnPropertyDescriptor(proxy, "length"); +assert.sameValue(desc.configurable, false); + +assert.sameValue(Reflect.has(proxy, "length"), true); + +assert.sameValue(Reflect.get(proxy, "length"), 3); + +assert.sameValue(Reflect.set(proxy, "length", 3), false); + +assert.sameValue(Reflect.deleteProperty(proxy, "length"), false); + +var keys = Reflect.ownKeys(proxy); +assert.sameValue(keys.length, 3); +keys.sort(); +assert.sameValue(keys[0], "length"); +assert.sameValue(keys[1], "name"); +assert.sameValue(keys[2], "prototype"); + +assert.sameValue(Reflect.apply(proxy, "hi!", [" "]), "hi! calling"); + +var res = Reflect.construct(proxy, [" - "]); +assert.sameValue(typeof res, "object"); +assert.sameValue(res instanceof String, true); +assert.sameValue(res.valueOf(), "@@@ - constructing"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/Reflect/apply.js b/test/staging/sm/Reflect/apply.js new file mode 100644 index 0000000000..0a5dc762f4 --- /dev/null +++ b/test/staging/sm/Reflect/apply.js @@ -0,0 +1,139 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.apply calls functions. +assert.sameValue(Reflect.apply(Math.floor, undefined, [1.75]), 1); + +// Reflect.apply requires a target object that's callable. +var nonCallable = [{}, [], (class clsX { constructor() {} })]; +for (var value of nonCallable) { + assertThrowsInstanceOf(() => Reflect.apply(nonCallable), TypeError); +} + +// When target is not callable, Reflect.apply does not try to get argumentList.length before throwing. +var hits = 0; +var bogusArgumentList = {get length() { hit++; throw "FAIL";}}; +assertThrowsInstanceOf(() => Reflect.apply({callable: false}, null, bogusArgumentList), + TypeError); +assert.sameValue(hits, 0); + +// Reflect.apply works on a range of different callable objects. +// Builtin functions (we also tested Math.floor above): +assert.sameValue(Reflect.apply(String.fromCharCode, + undefined, + [104, 101, 108, 108, 111]), + "hello"); + +// Builtin methods: +assert.sameValue(Reflect.apply(RegExp.prototype.exec, + /ab/, + ["confabulation"]).index, + 4); + +// Builtin methods of primitive objects: +assert.sameValue(Reflect.apply("".charAt, + "ponies", + [3]), + "i"); + +// Bound functions: +assert.sameValue(Reflect.apply(function () { return this; }.bind(Math), + Function, + []), + Math); +assert.sameValue(Reflect.apply(Array.prototype.concat.bind([1, 2], [3]), + [4, 5], + [[6, 7, 8]]).join(), + "1,2,3,6,7,8"); + +// Generator functions: +function* g(arg) { yield "pass" + arg; } +assert.sameValue(Reflect.apply(g, + undefined, + ["word"]).next().value, + "password"); + +// Proxies: +function f() { return 13; } +assert.sameValue(Reflect.apply(new Proxy(f, {}), + undefined, + []), + 13); + +// Cross-compartment wrappers: +var gw = createNewGlobal(); +assert.sameValue(Reflect.apply(gw.parseInt, + undefined, + ["45"]), + 45); +assert.sameValue(Reflect.apply(gw.Symbol.for, + undefined, + ["moon"]), + Symbol.for("moon")); + +gw.eval("function q() { return q; }"); +assert.sameValue(Reflect.apply(gw.q, + undefined, + []), + gw.q); + + +// Exceptions are propagated. +var nope = new Error("nope"); +function fail() { + throw nope; +} +assertThrowsValue(() => Reflect.apply(fail, undefined, []), + nope); + +// Exceptions thrown by cross-compartment wrappers are re-wrapped for the +// calling compartment. +var gxw = gw.eval("var x = new Error('x'); x"); +gw.eval("function fail() { throw x; }"); +assertThrowsValue(() => Reflect.apply(gw.fail, undefined, []), + gxw); + +// The thisArgument is passed to the target function as the 'this' value. +var obj = {}; +hits = 0; +assert.sameValue(Reflect.apply(function () { hits++; assert.sameValue(this, obj); }, + obj, + []), + undefined); +assert.sameValue(hits, 1); + +// Primitive values can be thisArgument. +function strictThis() { "use strict"; return this; } +for (var value of [null, undefined, 0, -0, NaN, Symbol("moon")]) { + assert.sameValue(Reflect.apply(strictThis, value, []), + value); +} + +// If the target is a non-strict function and thisArgument is a primitive value +// other than null or undefined, then thisArgument is converted to a wrapper +// object. +var testValues = [true, 1e9, "ok", Symbol("ok")]; +function nonStrictThis(expected) { + assert.sameValue(typeof this, "object"); + assert.sameValue(Reflect.apply(Object.prototype.toString, this, []).toLowerCase(), expected); + return "ok"; +} +for (var value of testValues) { + assert.sameValue(Reflect.apply(nonStrictThis, + value, + ["[object " + typeof value + "]"]), + "ok"); +} + +// For more Reflect.apply tests, see target.js and argumentsList.js. + diff --git a/test/staging/sm/Reflect/argumentsList.js b/test/staging/sm/Reflect/argumentsList.js new file mode 100644 index 0000000000..c35f28775e --- /dev/null +++ b/test/staging/sm/Reflect/argumentsList.js @@ -0,0 +1,149 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for the argumentList argument to Reflect.apply and Reflect.construct. + +// Reflect.apply and Reflect.construct require an argumentList argument that must be an object. +assertThrowsInstanceOf(() => Reflect.apply(Math.min, undefined), // missing + TypeError); +assertThrowsInstanceOf(() => Reflect.construct(Object), // missing + TypeError); +for (var primitive of SOME_PRIMITIVE_VALUES) { + assertThrowsInstanceOf(() => Reflect.apply(Math.min, undefined, primitive), + TypeError); + assertThrowsInstanceOf(() => Reflect.construct(Object, primitive), + TypeError); +} + +// Array used by several tests below. +var BOTH = [ + Reflect.apply, + // Adapt Reflect.construct to accept the same arguments as Reflect.apply. + (target, thisArgument, argumentList) => Reflect.construct(target, argumentList) +]; + +// The argumentList is copied and becomes the list of arguments passed to the function. +function getRest(...x) { return x; } +var args = [1, 2, 3]; +for (var method of BOTH) { + var result = method(getRest, undefined, args); + assert.sameValue(result.join(), args.join()); + assert.sameValue(result !== args, true); +} + +// argumentList.length can be less than func.length. +function testLess(a, b, c, d, e) { + assert.sameValue(a, 1); + assert.sameValue(b, true); + assert.sameValue(c, "three"); + assert.sameValue(d, Symbol.for); + assert.sameValue(e, undefined); + + assert.sameValue(arguments.length, 4); + assert.sameValue(arguments !== args, true); + return "ok"; +} +args = [1, true, "three", Symbol.for]; +assert.sameValue(Reflect.apply(testLess, undefined, args), "ok"); +assert.sameValue(Reflect.construct(testLess, args) instanceof testLess, true); + +// argumentList.length can be more than func.length. +function testMoar(a) { + assert.sameValue(a, args[0]); + return "good"; +} +assert.sameValue(Reflect.apply(testMoar, undefined, args), "good"); +assert.sameValue(Reflect.construct(testMoar, args) instanceof testMoar, true); + +// argumentList can be any object with a .length property. +function getArgs(...args) { + return args; +} +for (var method of BOTH) { + assert.deepEqual(method(getArgs, undefined, {length: 0}), + []); + assert.deepEqual(method(getArgs, undefined, {length: 1, "0": "zero"}), + ["zero"]); + assert.deepEqual(method(getArgs, undefined, {length: 2}), + [undefined, undefined]); + assert.deepEqual(method(getArgs, undefined, function (a, b, c) {}), + [undefined, undefined, undefined]); +} + +// The Iterable/Iterator interfaces are not used. +var funnyArgs = { + 0: "zero", + 1: "one", + length: 2, + [Symbol.iterator]() { throw "FAIL 1"; }, + next() { throw "FAIL 2"; } +}; +for (var method of BOTH) { + assert.deepEqual(method(getArgs, undefined, funnyArgs), + ["zero", "one"]); +} + +// If argumentList has no .length property, no arguments are passed. +function count() { return {numArgsReceived: arguments.length}; } +for (var method of BOTH) { + assert.sameValue(method(count, undefined, {"0": 0, "1": 1}).numArgsReceived, + 0); + function* g() { yield 1; yield 2; } + assert.sameValue(method(count, undefined, g()).numArgsReceived, + 0); +} + +// If argumentsList.length has a getter, it is called. +var log; +args = { + get length() { log += "L"; return 1; }, + get "0"() { log += "0"; return "zero"; }, + get "1"() { log += "1"; return "one"; } +}; +for (var method of BOTH) { + log = ""; + assert.deepEqual(method(getArgs, undefined, args), + ["zero"]); + assert.sameValue(log, "L0"); +} + +// The argumentsList.length getter can throw; the exception is propagated. +var exc = {status: "bad"}; +args = { + get length() { throw exc; } +}; +for (var method of BOTH) { + assertThrowsValue(() => method(count, undefined, args), exc); +} + +// argumentsList.length is converted to an integer. +for (var value of [1.7, "1", {valueOf() { return "1"; }}]) { + args = { + length: value, + "0": "ponies" + }; + for (var method of BOTH) { + var result = method(getArgs, undefined, args); + assert.sameValue(result.length, 1); + assert.sameValue(result[0], "ponies"); + } +} + +// If argumentsList.length is negative or NaN, no arguments are passed. +for (var method of BOTH) { + for (var num of [-1, -0.1, -0, -1e99, -Infinity, NaN]) { + assert.sameValue(method(count, undefined, {length: num}).numArgsReceived, + 0); + } +} + diff --git a/test/staging/sm/Reflect/construct.js b/test/staging/sm/Reflect/construct.js new file mode 100644 index 0000000000..1c3a752e07 --- /dev/null +++ b/test/staging/sm/Reflect/construct.js @@ -0,0 +1,116 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.construct invokes constructors. + +assert.deepEqual(Reflect.construct(Object, []), {}); +assert.deepEqual(Reflect.construct(String, ["hello"]), new String("hello")); + +// Constructing Date creates a real Date object. +var d = Reflect.construct(Date, [1776, 6, 4]); +assert.sameValue(d instanceof Date, true); +assert.sameValue(d.getFullYear(), 1776); // non-generic method requires real Date object + +// [[Construct]] methods don't necessarily create new objects. +var obj = {}; +assert.sameValue(Reflect.construct(Object, [obj]), obj); + + +// === Various kinds of constructors +// We've already seen some builtin constructors. +// +// JS functions: +function f(x) { this.x = x; } +assert.deepEqual(Reflect.construct(f, [3]), new f(3)); +f.prototype = Array.prototype; +assert.deepEqual(Reflect.construct(f, [3]), new f(3)); + +// Bound functions: +var bound = f.bind(null, "carrot"); +assert.deepEqual(Reflect.construct(bound, []), new bound); + +// Classes: +class Base { + constructor(...args) { + this.args = args; + this.newTarget = new.target; + } +} +class Derived extends Base { + constructor(...args) { super(...args); } +} + +assert.deepEqual(Reflect.construct(Base, []), new Base); +assert.deepEqual(Reflect.construct(Derived, [7]), new Derived(7)); +g = Derived.bind(null, "q"); +assert.deepEqual(Reflect.construct(g, [8, 9]), new g(8, 9)); + +// Cross-compartment wrappers: +var g = createNewGlobal(); +var local = {here: this}; +g.eval("function F(arg) { this.arg = arg }"); +assert.deepEqual(Reflect.construct(g.F, [local]), new g.F(local)); + +// If first argument to Reflect.construct isn't a constructor, it throws a +// TypeError. +var nonConstructors = [ + {}, + Reflect.construct, // builtin functions aren't constructors + x => x + 1, + Math.max.bind(null, 0), // bound non-constructors aren't constructors + ((x, y) => x > y).bind(null, 0), + + // A Proxy to a non-constructor function isn't a constructor, even if a + // construct handler is present. + new Proxy(Reflect.construct, {construct(){}}), +]; +for (var obj of nonConstructors) { + assertThrowsInstanceOf(() => Reflect.construct(obj, []), TypeError); + assertThrowsInstanceOf(() => Reflect.construct(obj, [], Object), TypeError); +} + + +// === new.target tests + +// If the newTarget argument to Reflect.construct is missing, the target is used. +function checkNewTarget() { + assert.sameValue(new.target, expected); + expected = undefined; +} +var expected = checkNewTarget; +Reflect.construct(checkNewTarget, []); + +// The newTarget argument is correctly passed to the constructor. +var constructors = [Object, Function, f, bound]; +for (var ctor of constructors) { + expected = ctor; + Reflect.construct(checkNewTarget, [], ctor); + assert.sameValue(expected, undefined); +} + +// The newTarget argument must be a constructor. +for (var v of SOME_PRIMITIVE_VALUES.concat(nonConstructors)) { + assertThrowsInstanceOf(() => Reflect.construct(checkNewTarget, [], v), TypeError); +} + +// The builtin Array constructor uses new.target.prototype and always +// creates a real array object. +function someConstructor() {} +var result = Reflect.construct(Array, [], someConstructor); +assert.sameValue(Reflect.getPrototypeOf(result), someConstructor.prototype); +assert.sameValue(result.length, 0); +assert.sameValue(Array.isArray(result), true); + + +// For more Reflect.construct tests, see target.js and argumentsList.js. + diff --git a/test/staging/sm/Reflect/defineProperty.js b/test/staging/sm/Reflect/defineProperty.js new file mode 100644 index 0000000000..0ddd4481c7 --- /dev/null +++ b/test/staging/sm/Reflect/defineProperty.js @@ -0,0 +1,175 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +features: +- IsHTMLDDA +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.defineProperty defines properties. +var obj = {}; +assert.sameValue(Reflect.defineProperty(obj, "x", {value: 7}), true); +assert.sameValue(obj.x, 7); +var desc = Reflect.getOwnPropertyDescriptor(obj, "x"); +assert.deepEqual(desc, {value: 7, + writable: false, + enumerable: false, + configurable: false}); + +// Reflect.defineProperty can define a symbol-keyed property. +var key = Symbol(":o)"); +assert.sameValue(Reflect.defineProperty(obj, key, {value: 8}), true); +assert.sameValue(obj[key], 8); + +// array .length property +obj = [1, 2, 3, 4, 5]; +assert.sameValue(Reflect.defineProperty(obj, "length", {value: 4}), true); +assert.deepEqual(obj, [1, 2, 3, 4]); + +// The target can be a proxy. +obj = {}; +var proxy = new Proxy(obj, { + defineProperty(t, id, desc) { + t[id] = 1; + return true; + } +}); +assert.sameValue(Reflect.defineProperty(proxy, "prop", {value: 7}), true); +assert.sameValue(obj.prop, 1); +assert.sameValue(delete obj.prop, true); +assert.sameValue("prop" in obj, false); + +// The attributes object is re-parsed, not passed through to the +// handler.defineProperty method. +obj = {}; +var attributes = { + configurable: 17, + enumerable: undefined, + value: null +}; +proxy = new Proxy(obj, { + defineProperty(t, id, desc) { + assert.sameValue(desc !== attributes, true); + assert.sameValue(desc.configurable, true); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.value, null); + assert.sameValue("writable" in desc, false); + return 15; // and the return value here is coerced to boolean + } +}); +assert.sameValue(Reflect.defineProperty(proxy, "prop", attributes), true); + + +// === Failure and error cases +// +// Reflect.defineProperty behaves much like Object.defineProperty, which has +// extremely thorough tests elsewhere, and the implementation is largely +// shared. Duplicating those tests with Reflect.defineProperty would be a +// big waste. +// +// However, certain failures cause Reflect.defineProperty to return false +// without throwing a TypeError (unlike Object.defineProperty). So here we test +// many error cases to check that behavior. + +// missing attributes argument +assertThrowsInstanceOf(() => Reflect.defineProperty(obj, "y"), + TypeError); + +// non-object attributes argument +for (var attributes of SOME_PRIMITIVE_VALUES) { + assertThrowsInstanceOf(() => Reflect.defineProperty(obj, "y", attributes), + TypeError); +} + +// inextensible object +obj = Object.preventExtensions({}); +assert.sameValue(Reflect.defineProperty(obj, "prop", {value: 4}), false); + +// inextensible object with irrelevant inherited property +obj = Object.preventExtensions(Object.create({"prop": 3})); +assert.sameValue(Reflect.defineProperty(obj, "prop", {value: 4}), false); + +// redefine nonconfigurable to configurable +obj = Object.freeze({prop: 1}); +assert.sameValue(Reflect.defineProperty(obj, "prop", {configurable: true}), false); + +// redefine enumerability of nonconfigurable property +obj = Object.freeze(Object.defineProperties({}, { + x: {enumerable: true, configurable: false, value: 0}, + y: {enumerable: false, configurable: false, value: 0}, +})); +assert.sameValue(Reflect.defineProperty(obj, "x", {enumerable: false}), false); +assert.sameValue(Reflect.defineProperty(obj, "y", {enumerable: true}), false); + +// redefine nonconfigurable data to accessor property, or vice versa +obj = Object.seal({x: 1, get y() { return 2; }}); +assert.sameValue(Reflect.defineProperty(obj, "x", {get() { return 2; }}), false); +assert.sameValue(Reflect.defineProperty(obj, "y", {value: 1}), false); + +// redefine nonwritable, nonconfigurable property as writable +obj = Object.freeze({prop: 0}); +assert.sameValue(Reflect.defineProperty(obj, "prop", {writable: true}), false); +assert.sameValue(Reflect.defineProperty(obj, "prop", {writable: false}), true); // no-op + +// change value of nonconfigurable nonwritable property +obj = Object.freeze({prop: 0}); +assert.sameValue(Reflect.defineProperty(obj, "prop", {value: -0}), false); +assert.sameValue(Reflect.defineProperty(obj, "prop", {value: +0}), true); // no-op + +// change getter or setter +function g() {} +function s(x) {} +obj = {}; +Object.defineProperty(obj, "prop", {get: g, set: s, configurable: false}); +assert.sameValue(Reflect.defineProperty(obj, "prop", {get: s}), false); +assert.sameValue(Reflect.defineProperty(obj, "prop", {get: g}), true); // no-op +assert.sameValue(Reflect.defineProperty(obj, "prop", {set: g}), false); +assert.sameValue(Reflect.defineProperty(obj, "prop", {set: s}), true); // no-op + +// Proxy defineProperty handler method that returns false +var falseValues = [false, 0, -0, "", NaN, null, undefined]; +if (typeof createIsHTMLDDA === "function") + falseValues.push(createIsHTMLDDA()); +var value; +proxy = new Proxy({}, { + defineProperty(t, id, desc) { + return value; + } +}); +for (value of falseValues) { + assert.sameValue(Reflect.defineProperty(proxy, "prop", {value: 1}), false); +} + +// Proxy defineProperty handler method returns true, in violation of invariants. +// Per spec, this is a TypeError, not a false return. +obj = Object.freeze({x: 1}); +proxy = new Proxy(obj, { + defineProperty(t, id, desc) { + return true; + } +}); +assertThrowsInstanceOf(() => Reflect.defineProperty(proxy, "x", {value: 2}), TypeError); +assertThrowsInstanceOf(() => Reflect.defineProperty(proxy, "y", {value: 0}), TypeError); +assert.sameValue(Reflect.defineProperty(proxy, "x", {value: 1}), true); + +// The second argument is converted ToPropertyKey before any internal methods +// are called on the first argument. +var poison = + (counter => new Proxy({}, new Proxy({}, { get() { throw counter++; } })))(42); +assertThrowsValue(() => { + Reflect.defineProperty(poison, { + toString() { throw 17; }, + valueOf() { throw 8675309; } + }, poison); +}, 17); + + +// For more Reflect.defineProperty tests, see target.js and propertyKeys.js. + diff --git a/test/staging/sm/Reflect/deleteProperty.js b/test/staging/sm/Reflect/deleteProperty.js new file mode 100644 index 0000000000..b6ec719de1 --- /dev/null +++ b/test/staging/sm/Reflect/deleteProperty.js @@ -0,0 +1,89 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.deleteProperty deletes properties. +var obj = {x: 1, y: 2}; +assert.sameValue(Reflect.deleteProperty(obj, "x"), true); +assert.deepEqual(obj, {y: 2}); + +var arr = [1, 1, 2, 3, 5]; +assert.sameValue(Reflect.deleteProperty(arr, "3"), true); +assert.deepEqual(arr, [1, 1, 2, , 5]); + + +// === Failure and error cases +// Since Reflect.deleteProperty is almost exactly identical to the non-strict +// `delete` operator, there is not much to test that would not be redundant. + +// Returns true if no such property exists. +assert.sameValue(Reflect.deleteProperty({}, "q"), true); + +// Or if it's inherited. +var proto = {x: 1}; +assert.sameValue(Reflect.deleteProperty(Object.create(proto), "x"), true); +assert.sameValue(proto.x, 1); + +// Return false if asked to delete a non-configurable property. +var arr = []; +assert.sameValue(Reflect.deleteProperty(arr, "length"), false); +assert.sameValue(arr.hasOwnProperty("length"), true); +assert.sameValue(Reflect.deleteProperty(this, "undefined"), false); +assert.sameValue(this.undefined, void 0); + +// Return false if a Proxy's deleteProperty handler returns a false-y value. +var value; +var proxy = new Proxy({}, { + deleteProperty(t, k) { + return value; + } +}); +for (value of [true, false, 0, "something", {}]) { + assert.sameValue(Reflect.deleteProperty(proxy, "q"), !!value); +} + +// If a Proxy's handler method throws, the error is propagated. +proxy = new Proxy({}, { + deleteProperty(t, k) { throw "vase"; } +}); +assertThrowsValue(() => Reflect.deleteProperty(proxy, "prop"), "vase"); + +// Throw a TypeError if a Proxy's handler method returns true in violation of +// the object invariants. +proxy = new Proxy(Object.freeze({prop: 1}), { + deleteProperty(t, k) { return true; } +}); +assertThrowsInstanceOf(() => Reflect.deleteProperty(proxy, "prop"), TypeError); + + +// === Deleting elements from `arguments` + +// Non-strict arguments element becomes unmapped +function f(x, y, z) { + assert.sameValue(Reflect.deleteProperty(arguments, "0"), true); + arguments.x = 33; + return x; +} +assert.sameValue(f(17, 19, 23), 17); + +// Frozen non-strict arguments element +function testFrozenArguments() { + Object.freeze(arguments); + assert.sameValue(Reflect.deleteProperty(arguments, "0"), false); + assert.sameValue(arguments[0], "zero"); + assert.sameValue(arguments[1], "one"); +} +testFrozenArguments("zero", "one"); + + +// For more Reflect.deleteProperty tests, see target.js and propertyKeys.js. + diff --git a/test/staging/sm/Reflect/get.js b/test/staging/sm/Reflect/get.js new file mode 100644 index 0000000000..5359a8bfc3 --- /dev/null +++ b/test/staging/sm/Reflect/get.js @@ -0,0 +1,81 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.get gets the value of a property. + +var x = {p: 1}; +assert.sameValue(Reflect.get(x, "p"), 1); +assert.sameValue(Reflect.get(x, "toString"), Object.prototype.toString); +assert.sameValue(Reflect.get(x, "missing"), undefined); + + +// === Various targets + +// Array +assert.sameValue(Reflect.get([], 700), undefined); +assert.sameValue(Reflect.get(["zero", "one"], 1), "one"); + +// TypedArray +assert.sameValue(Reflect.get(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7]), 7), 7); + +// Treatment of NaN +var f = new Float64Array([NaN]); +var u = new Uint32Array(f.buffer); +u[0]++; +u[1]++; +assert.sameValue(f[0], NaN); +assert.sameValue(Reflect.get(f, 0), NaN); + +// Proxy with no get handler +assert.sameValue(Reflect.get(new Proxy(x, {}), "p"), 1); + +// Proxy with a get handler +var obj = new Proxy(x, { + get(t, k, r) { return k + "ful"; } +}); +assert.sameValue(Reflect.get(obj, "mood"), "moodful"); + +// Exceptions thrown by a proxy's get handler are propagated. +assertThrowsInstanceOf(() => Reflect.get(obj, Symbol()), TypeError); + +// Ordinary object, property has a setter and no getter +obj = {set name(x) {}}; +assert.sameValue(Reflect.get(obj, "name"), undefined); + + +// === Receiver + +// Receiver argument is passed to getters as the this-value. +obj = { get x() { return this; }}; +assert.sameValue(Reflect.get(obj, "x", Math), Math); +assert.sameValue(Reflect.get(Object.create(obj), "x", JSON), JSON); + +// If missing, target is passed instead. +assert.sameValue(Reflect.get(obj, "x"), obj); + +// Receiver argument is passed to the proxy get handler. +obj = new Proxy({}, { + get(t, k, r) { + assert.sameValue(k, "itself"); + return r; + } +}); +assert.sameValue(Reflect.get(obj, "itself"), obj); +assert.sameValue(Reflect.get(obj, "itself", Math), Math); +assert.sameValue(Reflect.get(Object.create(obj), "itself", Math), Math); + +// The receiver shouldn't have to be an object +assert.sameValue(Reflect.get(obj, "itself", 37.2), 37.2); + +// For more Reflect.get tests, see target.js and propertyKeys.js. + diff --git a/test/staging/sm/Reflect/getOwnPropertyDescriptor.js b/test/staging/sm/Reflect/getOwnPropertyDescriptor.js new file mode 100644 index 0000000000..8fd2459b46 --- /dev/null +++ b/test/staging/sm/Reflect/getOwnPropertyDescriptor.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.getOwnPropertyDescriptor inspects object properties. +assert.deepEqual( + Reflect.getOwnPropertyDescriptor({x: "hello"}, "x"), + {value: "hello", writable: true, enumerable: true, configurable: true}); +assert.sameValue( + Reflect.getOwnPropertyDescriptor({x: "hello"}, "y"), + undefined); +assert.deepEqual( + Reflect.getOwnPropertyDescriptor([], "length"), + {value: 0, writable: true, enumerable: false, configurable: false}); + +// Reflect.getOwnPropertyDescriptor shares its implementation with +// Object.getOwnPropertyDescriptor. The only difference is how non-object +// targets are handled. +// +// For more Reflect.getOwnPropertyDescriptor tests, see target.js and propertyKeys.js. + diff --git a/test/staging/sm/Reflect/getPrototypeOf.js b/test/staging/sm/Reflect/getPrototypeOf.js new file mode 100644 index 0000000000..905917bedd --- /dev/null +++ b/test/staging/sm/Reflect/getPrototypeOf.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.getPrototypeOf returns an object's prototype. +assert.sameValue(Reflect.getPrototypeOf({}), Object.prototype); +assert.sameValue(Reflect.getPrototypeOf(Object.prototype), null); +assert.sameValue(Reflect.getPrototypeOf(Object.create(null)), null); + +var proxy = new Proxy({}, { + getPrototypeOf(t) { return Math; } +}); + +assert.sameValue(Reflect.getPrototypeOf(proxy), Math); + +// For more Reflect.getPrototypeOf tests, see target.js. + diff --git a/test/staging/sm/Reflect/has.js b/test/staging/sm/Reflect/has.js new file mode 100644 index 0000000000..52728c9827 --- /dev/null +++ b/test/staging/sm/Reflect/has.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.has is identical to the `in` operator. +assert.sameValue(Reflect.has({x: 0}, "x"), true); +assert.sameValue(Reflect.has({x: 0}, "y"), false); +assert.sameValue(Reflect.has({x: 0}, "toString"), true); + +// The target can be an array; Reflect.has works on array elements. +var arr = ["zero"]; +arr[10000] = 0; +assert.sameValue(Reflect.has(arr, "10000"), true); +assert.sameValue(Reflect.has(arr, 10000), true); +assert.sameValue(Reflect.has(arr, "-0"), false); +assert.sameValue(Reflect.has(arr, -0), true); + +// And string objects (though not string primitives; see target.js). +var str = new String("hello"); +assert.sameValue(Reflect.has(str, "4"), true); +assert.sameValue(Reflect.has(str, "-0"), false); +assert.sameValue(Reflect.has(str, -0), true); + +// Proxy without .has() handler method +var obj = {get prop() {}}; +for (var i = 0; i < 2; i++) { + obj = new Proxy(obj, {}); + assert.sameValue(Reflect.has(obj, "prop"), true); + assert.sameValue(Reflect.has(obj, "nope"), false); +} + +// Proxy with .has() handler method +obj = new Proxy({}, { + has(t, k) { return k.startsWith("door"); } +}); +assert.sameValue(Reflect.has(obj, "doorbell"), true); +assert.sameValue(Reflect.has(obj, "dormitory"), false); + + +// For more Reflect.has tests, see target.js and propertyKeys.js. + diff --git a/test/staging/sm/Reflect/isExtensible.js b/test/staging/sm/Reflect/isExtensible.js new file mode 100644 index 0000000000..3125a09c02 --- /dev/null +++ b/test/staging/sm/Reflect/isExtensible.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.isExtensible behaves just like Object.extensible except when the +// target argument is missing or is not an object (and that behavior is tested +// in target.js). + +// Test basic functionality. +var someObjects = [ + {}, + {a: "a"}, + [0, 1], + new Uint8Array(64), + Object(Symbol("table")), + new Proxy({}, {}) +]; +if (typeof SharedArrayBuffer != "undefined") + someObjects.push(new Uint8Array(new SharedArrayBuffer(64))); + +for (var obj of someObjects) { + assert.sameValue(Reflect.isExtensible(obj), true); + assert.sameValue(Reflect.preventExtensions(obj), true); + assert.sameValue(Reflect.isExtensible(obj), false); +} + +// Array with nonwritable length. +var arr = [0, 1, 2, 3]; +Object.defineProperty(arr, "length", {writable: false}); +assert.sameValue(Reflect.isExtensible(arr), true); + +// Proxy case. +for (var ext of [true, false]) { + var obj = {}; + if (!ext) + Object.preventExtensions(obj); + var proxy = new Proxy(obj, { + isExtensible() { return ext; } + }); + assert.sameValue(Reflect.isExtensible(proxy), ext); +} + +// If a Proxy's isExtensible method throws, the exception is propagated. +proxy = new Proxy({}, { + isExtensible() { throw "oops"; } +}); +assertThrowsValue(() => Reflect.isExtensible(proxy), "oops"); + +// If an invariant is broken, [[IsExtensible]] does not return false. It throws +// a TypeError. +proxy = new Proxy({}, { + isExtensible() { return false; } +}); +assertThrowsInstanceOf(() => Reflect.isExtensible(proxy), TypeError); + +// For more Reflect.isExtensible tests, see target.js. + diff --git a/test/staging/sm/Reflect/ownKeys.js b/test/staging/sm/Reflect/ownKeys.js new file mode 100644 index 0000000000..ebd01dec1b --- /dev/null +++ b/test/staging/sm/Reflect/ownKeys.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.ownKeys(obj) returns an array of an object's own property keys. + +// Test that Reflect.ownKeys gets the expected result when applied to various +// objects. (These tests also check the basics: that the result is an array, +// that its prototype is correct, etc.) +var sym = Symbol.for("comet"); +var sym2 = Symbol.for("meteor"); +var cases = [ + {object: {z: 3, y: 2, x: 1}, + keys: ["z", "y", "x"]}, + {object: [], + keys: ["length"]}, + {object: new Int8Array(4), + keys: ["0", "1", "2", "3"]}, + {object: new Proxy({a: 7}, {}), + keys: ["a"]}, + {object: {[sym]: "ok"}, + keys: [sym]}, + {object: {[sym]: 0, // test 9.1.12 ordering + "str": 0, + "773": 0, + "0": 0, + [sym2]: 0, + "-1": 0, + "8": 0, + "second str": 0}, + keys: ["0", "8", "773", // indexes in numeric order + "str", "-1", "second str", // strings in insertion order + sym, sym2]}, // symbols in insertion order + {object: createNewGlobal().Math, // cross-compartment wrapper + keys: Reflect.ownKeys(Math)} +]; +for (var {object, keys} of cases) + assert.deepEqual(Reflect.ownKeys(object), keys); + +// Reflect.ownKeys() creates a new array each time it is called. +var object = {}, keys = []; +for (var i = 0; i < 3; i++) { + var newKeys = Reflect.ownKeys(object); + assert.sameValue(newKeys !== keys, true); + keys = newKeys; +} + +// Proxy behavior with successful ownKeys() handler +keys = ["str", "0"]; +obj = {}; +proxy = new Proxy(obj, { + ownKeys() { return keys; } +}); +var actual = Reflect.ownKeys(proxy); +assert.deepEqual(actual, keys); // we get correct answers +assert.sameValue(actual !== keys, true); // but not the same object + +// If a proxy breaks invariants, a TypeError is thrown. +var obj = Object.preventExtensions({}); +var proxy = new Proxy(obj, { + ownKeys() { return ["something"]; } +}); +assertThrowsInstanceOf(() => Reflect.ownKeys(proxy), TypeError); + +// For more Reflect.ownKeys tests, see target.js. + diff --git a/test/staging/sm/Reflect/preventExtensions.js b/test/staging/sm/Reflect/preventExtensions.js new file mode 100644 index 0000000000..99a3df1974 --- /dev/null +++ b/test/staging/sm/Reflect/preventExtensions.js @@ -0,0 +1,65 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.preventExtensions is the same as Object.preventExtensions, except +// for the return value and the behavior in error cases. + +var someObjects = [ + {}, + new Int32Array(7), + Object(Symbol("table")), + new Proxy({}, {}) +]; + +for (var obj of someObjects) { + assert.sameValue(Reflect.preventExtensions(obj), true); + // [[PreventExtensions]] on an already-inextensible object is a no-op. + assert.sameValue(Reflect.preventExtensions(obj), true); +} + +// Error cases. +assertThrowsInstanceOf(() => Reflect.isExtensible(), TypeError); +for (var value of [undefined, null, true, 1, NaN, "Phaedo", Symbol("good")]) { + assertThrowsInstanceOf(() => Reflect.isExtensible(value), TypeError); +} + +// A proxy's preventExtensions handler can return false without doing anything. +obj = {}; +var proxy = new Proxy(obj, { + preventExtensions() { return false; } +}); +assert.sameValue(Reflect.preventExtensions(proxy), false); +assert.sameValue(Reflect.isExtensible(obj), true); +assert.sameValue(Reflect.isExtensible(proxy), true); + +// If a proxy's preventExtensions handler throws, the exception is propagated. +obj = {}; +proxy = new Proxy(obj, { + preventExtensions() { throw "fit"; } +}); +assertThrowsValue(() => Reflect.preventExtensions(proxy), "fit"); +assert.sameValue(Reflect.isExtensible(obj), true); +assert.sameValue(Reflect.isExtensible(proxy), true); + +// If a proxy's preventExtensions handler returns true while leaving the target +// extensible, that's a TypeError. +obj = {}; +proxy = new Proxy(obj, { + preventExtensions() { return true; } +}); +assertThrowsInstanceOf(() => Reflect.preventExtensions(proxy), TypeError); +assert.sameValue(Reflect.isExtensible(obj), true); +assert.sameValue(Reflect.isExtensible(proxy), true); + +// For more Reflect.preventExtensions tests, see target.js. + diff --git a/test/staging/sm/Reflect/propertyKeys.js b/test/staging/sm/Reflect/propertyKeys.js new file mode 100644 index 0000000000..af3ab50cde --- /dev/null +++ b/test/staging/sm/Reflect/propertyKeys.js @@ -0,0 +1,93 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test corner cases involving Reflect methods' propertyKey arguments. + +// keys - Array of propertyKey values to be tested. +// +// Each element of this array is a record with these properties: +// +// * value: a value that will be passed as a property key +// to the various Reflect methods; +// +// * expected: (optional) the string or symbol that ToPropertyKey(value) +// should return. If this is omitted, ToPropertyKey(value) === value. +// +var keys = [ + {value: null, expected: "null"}, + {value: undefined, expected: "undefined"}, + {value: true, expected: "true"}, + {value: 42, expected: "42"}, + {value: "string"}, + {value: ""}, + {value: "string with \0"}, + {value: new String("ok"), expected: "ok"}, + {value: Symbol("sym")}, + {value: Symbol.iterator}, + {value: Object(Symbol.for("comet")), expected: Symbol.for("comet")}, + { + value: { + toString() { return "key"; }, + valueOf() { return "bad"; } + }, + expected: "key" + }, + { + value: { + toString: undefined, + valueOf() { return "fallback"; } + }, + expected: "fallback" + }, + { + value: { + [Symbol.toPrimitive](hint) { return hint; } + }, + expected: "string" + }, + { + value: { + [Symbol.toPrimitive](hint) { return Symbol.for(hint); } + }, + expected: Symbol.for("string") + } +]; + +for (var {value, expected} of keys) { + if (expected === undefined) + expected = value; + + var obj = {}; + assert.sameValue(Reflect.defineProperty(obj, value, {value: 1, configurable: true}), true); + assert.deepEqual(Reflect.ownKeys(obj), [expected]); + assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj, value), + {value: 1, + writable: false, + enumerable: false, + configurable: true}); + assert.sameValue(Reflect.deleteProperty(obj, value), true); + assert.sameValue(Reflect.has(obj, value), false); + assert.sameValue(Reflect.set(obj, value, 113), true); + assert.sameValue(obj[expected], 113); + assert.sameValue(Reflect.has(obj, value), true); + assert.sameValue(Reflect.get(obj, value), 113); +} + +// ToPropertyKey can throw. +var exc = {}; +var badKey = {toString() { throw exc; }}; +var methodNames = ["defineProperty", "deleteProperty", "has", "get", "getOwnPropertyDescriptor", "set"]; +for (var name of methodNames) { + assertThrowsValue(() => Reflect[name]({}, badKey), exc); +} + diff --git a/test/staging/sm/Reflect/set.js b/test/staging/sm/Reflect/set.js new file mode 100644 index 0000000000..d7be0bbaf1 --- /dev/null +++ b/test/staging/sm/Reflect/set.js @@ -0,0 +1,291 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.set does property assignment. +// With three arguments, this is pretty straightforward. +var obj = {}; +assert.sameValue(Reflect.set(obj, "prop", "value"), true); +assert.sameValue(obj.prop, "value"); + + +// === Various targets + +// It can assign array elements. +var arr = ["duck", "duck", "duck"]; +assert.sameValue(Reflect.set(arr, 2, "goose"), true); +assert.sameValue(arr[2], "goose"); + +// It can extend an array. +assert.sameValue(Reflect.set(arr, 3, "Model T"), true); +assert.sameValue(arr.length, 4); + +// It can truncate an array. +assert.sameValue(Reflect.set(arr, "length", 1), true); +assert.deepEqual(arr, ["duck"]); + +// It won't assign to non-writable properties of String objects. +var str = new String("hello"); +assert.sameValue(Reflect.set(str, "0", "y"), false); +assert.sameValue(str[0], "h"); +assert.sameValue(Reflect.set(str, "length", 700), false); +assert.sameValue(str.length, 5); + + +// === Receivers +// The optional fourth argument is the receiver, which [[Set]] methods use for +// various things. + +// On ordinary objects, if the property has a setter, the receiver is passed as +// the this-value to the setter. +var expected; +var obj = { + set prop(v) { + "use strict"; + assert.sameValue(v, 32); + assert.sameValue(this, expected); + } +}; +for (expected of [obj, {}, [], 37.3]) { + assert.sameValue(Reflect.set(obj, "prop", 32, expected), true); +} + +// If the property doesn't already exist, it is defined on the receiver. +obj = {}; +var obj2 = {}; +assert.sameValue(Reflect.set(obj, "prop", 47, obj2), true); +assert.deepEqual(obj, {}); +assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj2, "prop"), + {value: 47, writable: true, enumerable: true, configurable: true}); + +// If the property doesn't already exist, and the receiver isn't an object, return false. +for (var v of SOME_PRIMITIVE_VALUES) { + assert.sameValue(Reflect.set({}, "x", 0, v), false); +} + +// Receiver defaults to the target. +obj = {}; +var hits; +var expectedReceiver; +var proxy = new Proxy(obj, { + set(t, k, v, r) { + assert.sameValue(t, obj); + assert.sameValue(k, "key"); + assert.sameValue(v, "value"); + assert.sameValue(r, expectedReceiver); // not obj + hits++; + return true; + } +}); +hits = 0; +expectedReceiver = proxy; +assert.sameValue(Reflect.set(proxy, "key", "value"), true); +assert.sameValue(hits, 1); + +// But not if explicitly present and undefined. +hits = 0; +expectedReceiver = undefined; +assert.sameValue(Reflect.set(proxy, "key", "value", undefined), true); +assert.sameValue(hits, 1); + +// Reflect.set can be used as fallback behavior in a proxy handler .set() +// method. +var log; +obj = { + set prop(v) { + log += "p"; + assert.sameValue(v, "value"); + assert.sameValue(this, proxy); // not obj! + } +}; +proxy = new Proxy(obj, { + set(t, k, v, r) { + assert.sameValue(t, obj); + assert.sameValue(r, proxy); + log += "s"; + return Reflect.set(t, k, v, r); + } +}); +log = ""; +assert.sameValue(Reflect.set(proxy, "prop", "value"), true); +assert.sameValue(log, "sp"); + + +// === Cross-compartment wrapper behavior. + +// When calling a cross-compartment wrapper, receiver is rewrapped for the +// target compartment. +var g = createNewGlobal(); +if (!("assert" in g) && "assert" in globalThis) + g.assert = assert; // necessary when exporting to test262 +if (!("assert.sameValue" in g)) + g.assert.sameValue = assert.sameValue; // necessary in the browser +g.eval(` + var hits; + var obj = { + set x(v) { + "use strict"; + assert.sameValue(this, receiver); + assert.sameValue(v, "xyzzy"); + hits++; + } + }; + var receiver = {}; +`); +g.hits = 0; +assert.sameValue(Reflect.set(g.obj, "x", "xyzzy", g.receiver), true); +assert.sameValue(g.hits, 1); + +// ...even when receiver is from a different compartment than target. +var receiver = {}; +g.receiver = receiver; +g.hits = 0; +assert.sameValue(Reflect.set(g.obj, "x", "xyzzy", receiver), true); +assert.sameValue(g.hits, 1); + +// ...even when receiver is a primtive value, even undefined. +for (receiver of SOME_PRIMITIVE_VALUES) { + g.receiver = receiver; + g.hits = 0; + assert.sameValue(Reflect.set(g.obj, "x", "xyzzy", receiver), true); + assert.sameValue(g.hits, 1); +} + + +// === Less than 3 arguments + +// With two arguments, the value is assumed to be undefined. +obj = {}; +assert.sameValue(Reflect.set(obj, "size"), true); +assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj, "size"), + {value: undefined, writable: true, enumerable: true, configurable: true}); + +// With just one argument, the key is "undefined". +obj = {}; +assert.sameValue(Reflect.set(obj), true); +assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj, "undefined"), + {value: undefined, writable: true, enumerable: true, configurable: true}); + +// For the no argument-case, see target.js. + + +// === Failure cases + +// Non-writable data property +obj = {}; +Reflect.defineProperty(obj, "x", {value: 0, writable: false}); +assert.sameValue(Reflect.set(obj, "x", 1), false); +assert.sameValue(obj.x, 0); + +// The same, but inherited from a prototype +var obj2 = Object.create(obj); +assert.sameValue(Reflect.set(obj2, "x", 1), false); +assert.sameValue(obj2.hasOwnProperty("x"), false); +assert.sameValue(obj2.x, 0); + +// Getter, no setter +obj = {}; +var desc = {get: () => 12, set: undefined, enumerable: false, configurable: true}; +Reflect.defineProperty(obj, "y", desc); +assert.sameValue(Reflect.set(obj, "y", 13), false); +assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj, "y"), desc); + +// The same, but inherited from a prototype +obj2 = Object.create(obj); +assert.sameValue(Reflect.set(obj2, "y", 1), false); +assert.sameValue(obj2.hasOwnProperty("y"), false); +assert.deepEqual(Reflect.getOwnPropertyDescriptor(obj, "y"), desc); + +// Proxy set handler returns a false value +for (var no of [false, ""]) { + var hits = 0; + obj = {}; + var proxy = new Proxy(obj, { + set(t, k, v, r) { + assert.sameValue(t, obj); + assert.sameValue(k, "x"); + assert.sameValue(v, 33); + assert.sameValue(r, proxy); + hits++; + return no; + } + }); + assert.sameValue(Reflect.set(proxy, "x", 33), false); + assert.sameValue(hits, 1); + assert.sameValue("x" in obj, false); +} + +// Proxy handler method throws +obj = {}; +proxy = new Proxy(obj, { + set(t, k, v, r) { throw "i don't like " + v; } +}); +assertThrowsValue(() => Reflect.set(proxy, "food", "cheese"), "i don't like cheese"); + +// If a Proxy set handler breaks the object invariants, it's a TypeError. +for (obj of [{a: 0}, {get a() { return 0; }}]) { + Object.freeze(obj); + proxy = new Proxy(obj, { + set(t, k, v, r) { return true; } + }); + assertThrowsInstanceOf(() => Reflect.set(proxy, "a", "b"), TypeError); +} + +// Per spec, this should first call p.[[Set]]("0", 42, a) and +// then (since p has no own properties) a.[[Set]]("0", 42, a). +// The latter should not define a property on p. +var a = [0, 1, 2, 3]; +var p = Object.create(a); +Reflect.set(p, "0", 42, a); +assert.sameValue(p.hasOwnProperty("0"), false); +assert.deepEqual(Reflect.getOwnPropertyDescriptor(a, "0"), + {value: 42, writable: true, enumerable: true, configurable: true}); + +// Test behavior of ordinary objects' [[Set]] method (ES6 9.1.9). +// On an ordinary object, if the property key isn't present, [[Set]] calls +// receiver.[[GetOwnProperty]]() and then receiver.[[DefineProperty]](). +var log; +obj = {}; +var proxyTarget = {}; +var existingDescriptor, expected, defineResult; +var receiver = new Proxy(proxyTarget, { + getOwnPropertyDescriptor(t, k) { + log += "g"; + return existingDescriptor; + }, + defineProperty(t, k, desc) { + log += "d"; + assert.sameValue(t, proxyTarget); + assert.sameValue(k, "prop"); + assert.deepEqual(desc, expected); + return defineResult; + } +}); +existingDescriptor = undefined; +expected = {value: 5, writable: true, enumerable: true, configurable: true}; +for (var defineResult of [true, false]) { + log = ""; + assert.sameValue(Reflect.set(obj, "prop", 5, receiver), defineResult); + assert.sameValue(log, "gd"); +} + +existingDescriptor = {value: 7, writable: true, enumerable: false, configurable: true}; +expected = {value: 4}; +for (var defineResult of [true, false]) { + log = ""; + assert.sameValue(Reflect.set(obj, "prop", 4, receiver), defineResult); + assert.sameValue(log, "gd"); +} + + +// For more Reflect.set tests, see target.js and propertyKeys.js. + diff --git a/test/staging/sm/Reflect/setPrototypeOf.js b/test/staging/sm/Reflect/setPrototypeOf.js new file mode 100644 index 0000000000..86e9ee1a36 --- /dev/null +++ b/test/staging/sm/Reflect/setPrototypeOf.js @@ -0,0 +1,81 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Reflect.setPrototypeOf changes an object's [[Prototype]]. +var obj = {}; +assert.sameValue(Object.getPrototypeOf(obj), Object.prototype); +var proto = {}; +assert.sameValue(Reflect.setPrototypeOf(obj, proto), true); +assert.sameValue(Object.getPrototypeOf(obj), proto); + +// It can change an object's [[Prototype]] to null. +obj = {}; +assert.sameValue(Reflect.setPrototypeOf(obj, null), true); +assert.sameValue(Object.getPrototypeOf(obj), null); + +// The proto argument is required too. +obj = {}; +assertThrowsInstanceOf(() => Reflect.setPrototypeOf(obj), TypeError); + +// The proto argument must be either null or an object. +for (proto of [undefined, false, 0, 1.6, "that", Symbol.iterator]) { + assertThrowsInstanceOf(() => Reflect.setPrototypeOf(obj, proto), TypeError); +} + +// Return false if the target isn't extensible. +proto = {}; +obj = Object.preventExtensions(Object.create(proto)); +assert.sameValue(Reflect.setPrototypeOf(obj, {}), false); +assert.sameValue(Reflect.setPrototypeOf(obj, null), false); +assert.sameValue(Reflect.setPrototypeOf(obj, proto), true); // except if not changing anything + +// Return false rather than create a [[Prototype]] cycle. +obj = {}; +assert.sameValue(Reflect.setPrototypeOf(obj, obj), false); + +// Don't create a [[Prototype]] cycle involving 2 objects. +obj = Object.create(proto); +assert.sameValue(Reflect.setPrototypeOf(proto, obj), false); + +// Don't create a longish [[Prototype]] cycle. +for (var i = 0; i < 256; i++) + obj = Object.create(obj); +assert.sameValue(Reflect.setPrototypeOf(proto, obj), false); + +// The spec claims we should allow creating cycles involving proxies. (The +// cycle check quietly exits on encountering the proxy.) +obj = {}; +var proxy = new Proxy(Object.create(obj), {}); + +assert.sameValue(Reflect.setPrototypeOf(obj, proxy), true); +assert.sameValue(Reflect.getPrototypeOf(obj), proxy); +assert.sameValue(Reflect.getPrototypeOf(proxy), obj); + +// If a proxy handler returns a false-y value, return false. +var hits = 0; +proto = {name: "proto"}; +obj = {name: "obj"}; +proxy = new Proxy(obj, { + setPrototypeOf(t, p) { + assert.sameValue(t, obj); + assert.sameValue(p, proto); + hits++; + return 0; + } +}); + +assert.sameValue(Reflect.setPrototypeOf(proxy, proto), false); +assert.sameValue(hits, 1); + +// For more Reflect.setPrototypeOf tests, see target.js. + diff --git a/test/staging/sm/Reflect/surfaces.js b/test/staging/sm/Reflect/surfaces.js new file mode 100644 index 0000000000..831e42108e --- /dev/null +++ b/test/staging/sm/Reflect/surfaces.js @@ -0,0 +1,68 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Check surface features of the Reflect object. +assert.sameValue(typeof Reflect, 'object'); +assert.sameValue(Object.getPrototypeOf(Reflect), Object.prototype); +assert.sameValue(Reflect.toString(), '[object Reflect]'); +assertThrowsInstanceOf(() => new Reflect, TypeError); + +var desc = Object.getOwnPropertyDescriptor(this, "Reflect"); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.writable, true); + +for (const name in Reflect) + throw new Error("Reflect should not have any enumerable properties"); + +// The name and length of all the standard Reflect methods. +var methods = { + apply: 3, + construct: 2, + defineProperty: 3, + deleteProperty: 2, + get: 2, + getOwnPropertyDescriptor: 2, + getPrototypeOf: 1, + has: 2, + isExtensible: 1, + ownKeys: 1, + preventExtensions: 1, + set: 3, + setPrototypeOf: 2 +}; + +// Check that all Reflect properties are listed above. +for (const name of Reflect.ownKeys(Reflect)) { + // If this assertion fails, congratulations on implementing a new Reflect feature! + // Add it to the list of methods above. + if (typeof name !== "symbol" && name !== "parse") + assert.sameValue(name in methods, true, `unexpected property found: Reflect.${name}`); +} + +// Check the .length and property attributes of each Reflect method. +for (const name of Object.keys(methods)) { + var desc = Object.getOwnPropertyDescriptor(Reflect, name); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + assert.sameValue(desc.writable, true); + var f = desc.value; + assert.sameValue(typeof f, "function"); + assert.sameValue(f.length, methods[name]); +} + +// Check that the SpiderMonkey "resolve hook" mechanism does not resurrect the +// Reflect property once it is deleted. +delete this.Reflect; +assert.sameValue("Reflect" in this, false); + diff --git a/test/staging/sm/Reflect/target.js b/test/staging/sm/Reflect/target.js new file mode 100644 index 0000000000..dbcc30b8d3 --- /dev/null +++ b/test/staging/sm/Reflect/target.js @@ -0,0 +1,53 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-Reflect-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Check correct handling of the `target` argument shared by every Reflect method. + +// For each standard Reflect method, an array of arguments +// that would be OK after a suitable target argument. +var methodInfo = { + apply: [undefined, []], + construct: [[]], + defineProperty: ["x", {}], + deleteProperty: ["x"], + get: ["x", {}], + getOwnPropertyDescriptor: ["x"], + getPrototypeOf: [], + has: ["x"], + isExtensible: [], + ownKeys: [], + preventExtensions: [], + set: ["x", 0], + setPrototypeOf: [{}] +}; + +// Check that all Reflect properties are listed above. +for (const name of Reflect.ownKeys(Reflect)) { + // If this assertion fails, congratulations on implementing a new Reflect feature! + // Add it to methodInfo above. + if (typeof name !== "symbol" && name !== "parse") + assert.sameValue(name in methodInfo, true); +} + +for (const name of Object.keys(methodInfo)) { + var args = methodInfo[name]; + + // The target argument is required. + assertThrowsInstanceOf(Reflect[name], TypeError); + + // Throw if the target argument is not an object. + for (var value of SOME_PRIMITIVE_VALUES) { + assertThrowsInstanceOf(() => Reflect[name](value, ...args), TypeError); + } +} + diff --git a/test/staging/sm/RegExp/15.10.5-01.js b/test/staging/sm/RegExp/15.10.5-01.js new file mode 100644 index 0000000000..7f6382f456 --- /dev/null +++ b/test/staging/sm/RegExp/15.10.5-01.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 614603; +var summary = "RegExp.length"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(RegExp.length, 2); +assert.sameValue(/a/.constructor.length, 2); + +print("All tests passed!"); diff --git a/test/staging/sm/RegExp/15.10.7.5-01.js b/test/staging/sm/RegExp/15.10.7.5-01.js new file mode 100644 index 0000000000..d4a3ca74b3 --- /dev/null +++ b/test/staging/sm/RegExp/15.10.7.5-01.js @@ -0,0 +1,76 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 465199; +var summary = "RegExp lastIndex property set should not coerce type to number"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var called = false; +var o = { valueOf: function() { called = true; return 1; } }; +var r = /a/g; +var desc, m; + +assert.sameValue(r.lastIndex, 0); + +desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.value, 0); +assert.sameValue(desc.writable, true); + +r.lastIndex = o; + +assert.sameValue(r.lastIndex, o); + +desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.value, o); +assert.sameValue(desc.writable, true); + +assert.sameValue(called, false); +assert.sameValue(r.exec("aaaa").length, 1); +assert.sameValue(called, true); +assert.sameValue(r.lastIndex, 2); + +desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.value, 2); +assert.sameValue(desc.writable, true); + + +r.lastIndex = -0.2; +assert.sameValue(r.lastIndex, -0.2); + +m = r.exec("aaaa"); +assert.sameValue(Array.isArray(m), true); +assert.sameValue(m.length, 1); +assert.sameValue(m[0], "a"); +assert.sameValue(r.lastIndex, 1); + +m = r.exec("aaaa"); +assert.sameValue(Array.isArray(m), true); +assert.sameValue(m.length, 1); +assert.sameValue(m[0], "a"); +assert.sameValue(r.lastIndex, 2); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/RegExp/7.8.5-01.js b/test/staging/sm/RegExp/7.8.5-01.js new file mode 100644 index 0000000000..f7a61fe84d --- /dev/null +++ b/test/staging/sm/RegExp/7.8.5-01.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 615070; +var summary = "Line terminator after backslash is invalid in regexp literals"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var regexps = ["/\\\u000A/", "/\\\u000D/", "/\\\u2028/", "/\\\u2029/", + "/ab\\\n/", "/ab\\\r/", "/ab\\\u2028/", "/ab\\\u2029/", + "/ab[c\\\n]/", "/a[bc\\", "/\\"]; + +for(var i=0; i RegExp.prototype[Symbol.match].call({ exec }, "foo"), + TypeError); +} + diff --git a/test/staging/sm/RegExp/RegExpExec-return.js b/test/staging/sm/RegExp/RegExpExec-return.js new file mode 100644 index 0000000000..9203912b03 --- /dev/null +++ b/test/staging/sm/RegExp/RegExpExec-return.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "RegExpExec should throw if returned value is not an object nor null."; + +print(BUGNUMBER + ": " + summary); + +for (var ret of [null, {}, [], /a/]) { + assert.sameValue(RegExp.prototype[Symbol.match].call({ + get global() { + return false; + }, + exec(S) { + return ret; + } + }, "foo"), ret); +} + +for (ret of [undefined, 1, true, false, Symbol.iterator]) { + assertThrowsInstanceOf(() => { + RegExp.prototype[Symbol.match].call({ + get global() { + return false; + }, + exec(S) { + return ret; + } + }, "foo"); + }, TypeError); +} + diff --git a/test/staging/sm/RegExp/character-class-escape-s.js b/test/staging/sm/RegExp/character-class-escape-s.js new file mode 100644 index 0000000000..fe2a21bfd1 --- /dev/null +++ b/test/staging/sm/RegExp/character-class-escape-s.js @@ -0,0 +1,61 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Generated by make_unicode.py DO NOT MODIFY */ +/* Unicode version: 15.0.0 */ + +var onlySpace = String.fromCodePoint( + 0x0009 /* (CHARACTER TABULATION) */, + 0x000A /* (LINE FEED (LF)) */, + 0x000B /* (LINE TABULATION) */, + 0x000C /* (FORM FEED (FF)) */, + 0x000D /* (CARRIAGE RETURN (CR)) */, + 0x0020 /* SPACE */, + 0x00A0 /* NO-BREAK SPACE (NON-BREAKING SPACE) */, + 0x1680 /* OGHAM SPACE MARK */, + 0x2000 /* EN QUAD */, + 0x2001 /* EM QUAD */, + 0x2002 /* EN SPACE */, + 0x2003 /* EM SPACE */, + 0x2004 /* THREE-PER-EM SPACE */, + 0x2005 /* FOUR-PER-EM SPACE */, + 0x2006 /* SIX-PER-EM SPACE */, + 0x2007 /* FIGURE SPACE */, + 0x2008 /* PUNCTUATION SPACE */, + 0x2009 /* THIN SPACE */, + 0x200A /* HAIR SPACE */, + 0x2028 /* LINE SEPARATOR */, + 0x2029 /* PARAGRAPH SEPARATOR */, + 0x202F /* NARROW NO-BREAK SPACE */, + 0x205F /* MEDIUM MATHEMATICAL SPACE */, + 0x3000 /* IDEOGRAPHIC SPACE */, + 0xFEFF /* ZERO WIDTH NO-BREAK SPACE (BYTE ORDER MARK) */ +); + +assert.sameValue(/^\s+$/.exec(onlySpace) !== null, true); +assert.sameValue(/^[\s]+$/.exec(onlySpace) !== null, true); +assert.sameValue(/^[^\s]+$/.exec(onlySpace) === null, true); + +assert.sameValue(/^\S+$/.exec(onlySpace) === null, true); +assert.sameValue(/^[\S]+$/.exec(onlySpace) === null, true); +assert.sameValue(/^[^\S]+$/.exec(onlySpace) !== null, true); + +// Also test with Unicode RegExps. +assert.sameValue(/^\s+$/u.exec(onlySpace) !== null, true); +assert.sameValue(/^[\s]+$/u.exec(onlySpace) !== null, true); +assert.sameValue(/^[^\s]+$/u.exec(onlySpace) === null, true); + +assert.sameValue(/^\S+$/u.exec(onlySpace) === null, true); +assert.sameValue(/^[\S]+$/u.exec(onlySpace) === null, true); +assert.sameValue(/^[^\S]+$/u.exec(onlySpace) !== null, true); + diff --git a/test/staging/sm/RegExp/class-null.js b/test/staging/sm/RegExp/class-null.js new file mode 100644 index 0000000000..421a00947a --- /dev/null +++ b/test/staging/sm/RegExp/class-null.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1279467; +var summary = "Null in character class in RegExp with unicode flag."; + +print(BUGNUMBER + ": " + summary); + +var m = /([\0]+)/u.exec("\u0000"); +assert.sameValue(m.length, 2); +assert.sameValue(m[0], '\u0000'); +assert.sameValue(m[1], '\u0000'); + +var m = /([\0]+)/u.exec("0"); +assert.sameValue(m, null); + diff --git a/test/staging/sm/RegExp/compile-lastIndex.js b/test/staging/sm/RegExp/compile-lastIndex.js new file mode 100644 index 0000000000..c1c9d83b57 --- /dev/null +++ b/test/staging/sm/RegExp/compile-lastIndex.js @@ -0,0 +1,87 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1253099; +var summary = + "RegExp.prototype.compile must perform all its steps *except* setting " + + ".lastIndex, then throw, when provided a RegExp whose .lastIndex has been " + + "made non-writable"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var regex = /foo/i; + +// Aside from making .lastIndex non-writable, this has one incidental effect +// ubiquitously tested through the remainder of this test: +// +// * RegExp.prototype.compile will do everything it ordinarily does, BUT it +// will throw a TypeError when attempting to zero .lastIndex immediately +// before succeeding overall. +// +// Ain't it great? +Object.defineProperty(regex, "lastIndex", { value: 42, writable: false }); + +assert.sameValue(regex.global, false); +assert.sameValue(regex.ignoreCase, true); +assert.sameValue(regex.multiline, false); +assert.sameValue(regex.unicode, false); +assert.sameValue(regex.sticky, false); +assert.sameValue(Object.getOwnPropertyDescriptor(regex, "lastIndex").writable, false); +assert.sameValue(regex.lastIndex, 42); + +assert.sameValue(regex.test("foo"), true); +assert.sameValue(regex.test("FOO"), true); +assert.sameValue(regex.test("bar"), false); +assert.sameValue(regex.test("BAR"), false); + +assertThrowsInstanceOf(() => regex.compile("bar"), TypeError); + +assert.sameValue(regex.global, false); +assert.sameValue(regex.ignoreCase, false); +assert.sameValue(regex.multiline, false); +assert.sameValue(regex.unicode, false); +assert.sameValue(regex.sticky, false); +assert.sameValue(Object.getOwnPropertyDescriptor(regex, "lastIndex").writable, false); +assert.sameValue(regex.lastIndex, 42); +assert.sameValue(regex.test("foo"), false); +assert.sameValue(regex.test("FOO"), false); +assert.sameValue(regex.test("bar"), true); +assert.sameValue(regex.test("BAR"), false); + +assertThrowsInstanceOf(() => regex.compile("^baz", "m"), TypeError); + +assert.sameValue(regex.global, false); +assert.sameValue(regex.ignoreCase, false); +assert.sameValue(regex.multiline, true); +assert.sameValue(regex.unicode, false); +assert.sameValue(regex.sticky, false); +assert.sameValue(Object.getOwnPropertyDescriptor(regex, "lastIndex").writable, false); +assert.sameValue(regex.lastIndex, 42); +assert.sameValue(regex.test("foo"), false); +assert.sameValue(regex.test("FOO"), false); +assert.sameValue(regex.test("bar"), false); +assert.sameValue(regex.test("BAR"), false); +assert.sameValue(regex.test("baz"), true); +assert.sameValue(regex.test("BAZ"), false); +assert.sameValue(regex.test("012345678901234567890123456789012345678901baz"), false); +assert.sameValue(regex.test("012345678901234567890123456789012345678901\nbaz"), true); +assert.sameValue(regex.test("012345678901234567890123456789012345678901BAZ"), false); +assert.sameValue(regex.test("012345678901234567890123456789012345678901\nBAZ"), false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/RegExp/constructor-IsRegExp.js b/test/staging/sm/RegExp/constructor-IsRegExp.js new file mode 100644 index 0000000000..f18e20a9b9 --- /dev/null +++ b/test/staging/sm/RegExp/constructor-IsRegExp.js @@ -0,0 +1,95 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1147817; +var summary = "RegExp constructor with pattern with @@match."; + +print(BUGNUMBER + ": " + summary); + +var matchValue; +var constructorValue; + +var matchGet; +var constructorGet; +var sourceGet; +var flagsGet; +function reset() { + matchGet = false; + constructorGet = false; + sourceGet = false; + flagsGet = false; +} +var obj = { + get [Symbol.match]() { + matchGet = true; + return matchValue; + }, + get constructor() { + constructorGet = true; + return constructorValue; + }, + get source() { + sourceGet = true; + return "foo"; + }, + get flags() { + flagsGet = true; + return "i"; + }, + toString() { + return "bar"; + } +}; + +matchValue = true; +constructorValue = function() {}; + +reset(); +assert.sameValue(RegExp(obj).toString(), "/foo/i"); +assert.sameValue(matchGet, true); +assert.sameValue(constructorGet, true); +assert.sameValue(sourceGet, true); +assert.sameValue(flagsGet, true); + +reset(); +assert.sameValue(RegExp(obj, "g").toString(), "/foo/g"); +assert.sameValue(matchGet, true); +assert.sameValue(constructorGet, false); +assert.sameValue(sourceGet, true); +assert.sameValue(flagsGet, false); + +matchValue = false; +constructorValue = function() {}; + +reset(); +assert.sameValue(RegExp(obj).toString(), "/bar/"); +assert.sameValue(matchGet, true); +assert.sameValue(constructorGet, false); +assert.sameValue(sourceGet, false); +assert.sameValue(flagsGet, false); + +reset(); +assert.sameValue(RegExp(obj, "g").toString(), "/bar/g"); +assert.sameValue(matchGet, true); +assert.sameValue(constructorGet, false); +assert.sameValue(sourceGet, false); +assert.sameValue(flagsGet, false); + +matchValue = true; +constructorValue = RegExp; + +reset(); +assert.sameValue(RegExp(obj), obj); +assert.sameValue(matchGet, true); +assert.sameValue(constructorGet, true); +assert.sameValue(sourceGet, false); +assert.sameValue(flagsGet, false); + diff --git a/test/staging/sm/RegExp/constructor-constructor.js b/test/staging/sm/RegExp/constructor-constructor.js new file mode 100644 index 0000000000..966293af09 --- /dev/null +++ b/test/staging/sm/RegExp/constructor-constructor.js @@ -0,0 +1,87 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1147817; +var summary = "RegExp constructor should check pattern.constructor."; + +print(BUGNUMBER + ": " + summary); + +var g = createNewGlobal(); + +var re = /foo/; +assert.sameValue(RegExp(re), re); +re.constructor = 10; +assert.sameValue(RegExp(re) === re, false); +assert.sameValue(RegExp(re).toString(), re.toString()); + +// If pattern comes from different global, RegExp shouldn't return it. +re = g.eval(`var re = /foo/; re;`); +assert.sameValue(RegExp(re) === re, false); +assert.sameValue(RegExp(re).toString(), re.toString()); +g.eval(`re.constructor = 10;`); +assert.sameValue(RegExp(re) === re, false); +assert.sameValue(RegExp(re).toString(), re.toString()); + + +re = new Proxy(/a/, { + get(that, name) { + return that[name]; + } +}); +assert.sameValue(RegExp(re), re); +re = new Proxy(/a/, { + get(that, name) { + if (name == "constructor") { + return function() {}; + } + return that[name]; + } +}); +assert.sameValue(RegExp(re) === re, false); +re = new Proxy(/a/, { + get(that, name) { + if (name == Symbol.match) { + return undefined; + } + return that[name]; + } +}); +assert.sameValue(RegExp(re) === re, false); + +re = new Proxy(g.eval(`/a/`), { + get(that, name) { + return that[name]; + } +}); +assert.sameValue(RegExp(re) === re, false); + +re = g.eval(`new Proxy(/a/, { + get(that, name) { + return that[name]; + } +});`); +assert.sameValue(RegExp(re) === re, false); + + +var obj = { [Symbol.match]: true, source: "foo", flags: "gi" }; +assert.sameValue(RegExp(obj) === obj, false); +assert.sameValue(RegExp(obj).toString(), "/foo/gi"); +obj.constructor = RegExp; +assert.sameValue(RegExp(obj), obj); + +obj = g.eval(`var obj = { [Symbol.match]: true, source: "foo", flags: "gi" }; obj;`); +assert.sameValue(RegExp(obj) === obj, false); +assert.sameValue(RegExp(obj).toString(), "/foo/gi"); +g.eval(`obj.constructor = RegExp`); +assert.sameValue(RegExp(obj) === obj, false); +obj.constructor = RegExp; +assert.sameValue(RegExp(obj), obj); + diff --git a/test/staging/sm/RegExp/constructor-ordering-2.js b/test/staging/sm/RegExp/constructor-ordering-2.js new file mode 100644 index 0000000000..f150aa777a --- /dev/null +++ b/test/staging/sm/RegExp/constructor-ordering-2.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure that we don't ToString the second argument until /after/ doing +// the appropriate subclassing lookups + +var didLookup = false; + +var re = /a/; +var flags = { toString() { assert.sameValue(didLookup, true); return "g"; } }; +var newRe = Reflect.construct(RegExp, [re, flags], + Object.defineProperty(function(){}.bind(null), "prototype", { + get() { + didLookup = true; + return RegExp.prototype; + } +})); + +assert.sameValue(Object.getPrototypeOf(newRe), RegExp.prototype); +assert.sameValue(didLookup, true); + + diff --git a/test/staging/sm/RegExp/constructor-ordering.js b/test/staging/sm/RegExp/constructor-ordering.js new file mode 100644 index 0000000000..62d5dc51a3 --- /dev/null +++ b/test/staging/sm/RegExp/constructor-ordering.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure that we don't misorder subclassing accesses with respect to +// accessing regex arg internal slots +// +// Test credit André Bargull. + +var re = /a/; +var newRe = Reflect.construct(RegExp, [re], Object.defineProperty(function(){}.bind(null), "prototype", { + get() { + re.compile("b"); + return RegExp.prototype; + } +})); +assert.sameValue(newRe.source, "a"); + diff --git a/test/staging/sm/RegExp/constructor-regexp-unicode.js b/test/staging/sm/RegExp/constructor-regexp-unicode.js new file mode 100644 index 0000000000..f8e958b314 --- /dev/null +++ b/test/staging/sm/RegExp/constructor-regexp-unicode.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1274393; +var summary = "RegExp constructor should check the pattern syntax again when adding unicode flag."; + +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => RegExp(/\-/, "u"), SyntaxError); + diff --git a/test/staging/sm/RegExp/constructor-regexp.js b/test/staging/sm/RegExp/constructor-regexp.js new file mode 100644 index 0000000000..7dad024d93 --- /dev/null +++ b/test/staging/sm/RegExp/constructor-regexp.js @@ -0,0 +1,70 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1130860; +var summary = "RegExp constructor shouldn't invoke source/flags getters on argument RegExp instance."; + +print(BUGNUMBER + ": " + summary); + +// same-compartment +var a = /foo/; +var flagsCalled = false; +var sourceCalled = false; +Object.defineProperty(a, "source", { get: () => { + sourceCalled = true; + return "bar"; +}}); +Object.defineProperty(a, "flags", { get: () => { + flagsCalled = true; + return "i"; +}}); + +assert.sameValue(a.source, "bar"); +assert.sameValue(a.flags, "i"); +assert.sameValue(sourceCalled, true); +assert.sameValue(flagsCalled, true); + +sourceCalled = false; +flagsCalled = false; +assert.sameValue(new RegExp(a).source, "foo"); +assert.sameValue(sourceCalled, false); +assert.sameValue(flagsCalled, false); + +// cross-compartment +var g = createNewGlobal(); +var b = g.eval(` +var b = /foo2/; +var flagsCalled = false; +var sourceCalled = false; +Object.defineProperty(b, "source", { get: () => { + sourceCalled = true; + return "bar2"; +}}); +Object.defineProperty(b, "flags", { get: () => { + flagsCalled = true; + return "i"; +}}); +b; +`); + +assert.sameValue(b.source, "bar2"); +assert.sameValue(b.flags, "i"); +assert.sameValue(g.eval("sourceCalled;"), true); +assert.sameValue(g.eval("flagsCalled;"), true); + +g.eval(` +sourceCalled = false; +flagsCalled = false; +`); +assert.sameValue(new RegExp(b).source, "foo2"); +assert.sameValue(g.eval("sourceCalled;"), false); +assert.sameValue(g.eval("flagsCalled;"), false); + diff --git a/test/staging/sm/RegExp/cross-compartment-getter.js b/test/staging/sm/RegExp/cross-compartment-getter.js new file mode 100644 index 0000000000..92e0c26d80 --- /dev/null +++ b/test/staging/sm/RegExp/cross-compartment-getter.js @@ -0,0 +1,52 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const otherGlobal = createNewGlobal({newCompartment: true}); + +let regExp = otherGlobal.eval("/a(b|c)/iy"); + +function get(name) { + const descriptor = Object.getOwnPropertyDescriptor(RegExp.prototype, name); + return descriptor.get.call(regExp); +} + +assert.sameValue(get("flags"), "iy"); +assert.sameValue(get("global"), false); +assert.sameValue(get("ignoreCase"), true); +assert.sameValue(get("multiline"), false); +assert.sameValue(get("dotAll"), false); +assert.sameValue(get("source"), "a(b|c)"); +assert.sameValue(get("sticky"), true); +assert.sameValue(get("unicode"), false); + +regExp = otherGlobal.eval("new RegExp('', 'gu')"); + +assert.sameValue(get("flags"), "gu"); +assert.sameValue(get("global"), true); +assert.sameValue(get("ignoreCase"), false); +assert.sameValue(get("multiline"), false); +assert.sameValue(get("dotAll"), false); +assert.sameValue(get("source"), "(?:)"); +assert.sameValue(get("sticky"), false); +assert.sameValue(get("unicode"), true); + +// Trigger escaping +regExp = otherGlobal.eval("new RegExp('a/b', '')"); + +assert.sameValue(get("flags"), ""); +assert.sameValue(get("global"), false); +assert.sameValue(get("ignoreCase"), false); +assert.sameValue(get("multiline"), false); +assert.sameValue(get("dotAll"), false); +assert.sameValue(get("source"), "a\\/b"); +assert.sameValue(get("sticky"), false); +assert.sameValue(get("unicode"), false); + diff --git a/test/staging/sm/RegExp/descriptor.js b/test/staging/sm/RegExp/descriptor.js new file mode 100644 index 0000000000..1718f5c92d --- /dev/null +++ b/test/staging/sm/RegExp/descriptor.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1120169; +var summary = "Implement RegExp.prototype.{global, ignoreCase, multiline, sticky, unicode} - property descriptor"; + +print(BUGNUMBER + ": " + summary); + +var getters = [ + "flags", + "global", + "ignoreCase", + "multiline", + "source", + "sticky", + "unicode", +]; + +for (var name of getters) { + var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, name); + assert.sameValue(desc.configurable, true); + assert.sameValue(desc.enumerable, false); + assert.sameValue("writable" in desc, false); + assert.sameValue("get" in desc, true); +} + diff --git a/test/staging/sm/RegExp/empty-lookahead.js b/test/staging/sm/RegExp/empty-lookahead.js new file mode 100644 index 0000000000..465eb2dc14 --- /dev/null +++ b/test/staging/sm/RegExp/empty-lookahead.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//bug 473941 +var regexp; + +regexp = /(?=)/; +assert.sameValue(regexp.test('test'), true); + diff --git a/test/staging/sm/RegExp/escape.js b/test/staging/sm/RegExp/escape.js new file mode 100644 index 0000000000..e55eca1744 --- /dev/null +++ b/test/staging/sm/RegExp/escape.js @@ -0,0 +1,79 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1130860; +var summary = 'Slash and LineTerminator should be escaped correctly.'; + +print(BUGNUMBER + ": " + summary); + +function test(re, source) { + assert.sameValue(re.source, source); + assert.sameValue(eval("/" + re.source + "/").source, source); + assert.sameValue(re.toString(), "/" + source + "/"); +} + +test(/\\n/, "\\\\n"); +test(/\\\n/, "\\\\\\n"); +test(/\\\\n/, "\\\\\\\\n"); +test(RegExp("\\n"), "\\n"); +test(RegExp("\\\n"), "\\n"); +test(RegExp("\\\\n"), "\\\\n"); + +test(/\\r/, "\\\\r"); +test(/\\\r/, "\\\\\\r"); +test(/\\\\r/, "\\\\\\\\r"); +test(RegExp("\\r"), "\\r"); +test(RegExp("\\\r"), "\\r"); +test(RegExp("\\\\r"), "\\\\r"); + +test(/\\u2028/, "\\\\u2028"); +test(/\\\u2028/, "\\\\\\u2028"); +test(/\\\\u2028/, "\\\\\\\\u2028"); +test(RegExp("\\u2028"), "\\u2028"); +test(RegExp("\\\u2028"), "\\u2028"); +test(RegExp("\\\\u2028"), "\\\\u2028"); + +test(/\\u2029/, "\\\\u2029"); +test(/\\\u2029/, "\\\\\\u2029"); +test(/\\\\u2029/, "\\\\\\\\u2029"); +test(RegExp("\\u2029"), "\\u2029"); +test(RegExp("\\\u2029"), "\\u2029"); +test(RegExp("\\\\u2029"), "\\\\u2029"); + +test(/\//, "\\/"); +test(/\\\//, "\\\\\\/"); +test(RegExp("/"), "\\/"); +test(RegExp("\/"), "\\/"); +test(RegExp("\\/"), "\\/"); +test(RegExp("\\\/"), "\\/"); +test(RegExp("\\\\/"), "\\\\\\/"); + +test(/[/]/, "[/]"); +test(/[\/]/, "[\\/]"); +test(/[\\/]/, "[\\\\/]"); +test(/[\\\/]/, "[\\\\\\/]"); +test(RegExp("[/]"), "[/]"); +test(RegExp("[\/]"), "[/]"); +test(RegExp("[\\/]"), "[\\/]"); +test(RegExp("[\\\/]"), "[\\/]"); +test(RegExp("[\\\\/]"), "[\\\\/]"); + +test(RegExp("\[/\]"), "[/]"); +test(RegExp("\[\\/\]"), "[\\/]"); + +test(/\[\/\]/, "\\[\\/\\]"); +test(/\[\\\/\]/, "\\[\\\\\\/\\]"); +test(RegExp("\\[/\\]"), "\\[\\/\\]"); +test(RegExp("\\[\/\\]"), "\\[\\/\\]"); +test(RegExp("\\[\\/\\]"), "\\[\\/\\]"); +test(RegExp("\\[\\\/\\]"), "\\[\\/\\]"); +test(RegExp("\\[\\\\/\\]"), "\\[\\\\\\/\\]"); + diff --git a/test/staging/sm/RegExp/exec-lastIndex-ToInteger.js b/test/staging/sm/RegExp/exec-lastIndex-ToInteger.js new file mode 100644 index 0000000000..6cc4cebf5b --- /dev/null +++ b/test/staging/sm/RegExp/exec-lastIndex-ToInteger.js @@ -0,0 +1,44 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * + * Author: Geoffrey Sneddon + */ + +var BUGNUMBER = 646490; +var summary = + "RegExp.prototype.exec doesn't get the lastIndex and ToInteger() it for " + + "non-global regular expressions when it should"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var re = /./, called = 0; +re.lastIndex = {valueOf: function() { called++; return 0; }}; +re.exec("."); +re.lastIndex = {toString: function() { called++; return "0"; }}; +re.exec("."); +re.lastIndex = { + valueOf: function() { called++; return 0; }, + toString: function() { called--; } +}; +re.exec("."); +assert.sameValue(called, 3, "FAIL, got " + called); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/RegExp/exec-lastIndex-negative.js b/test/staging/sm/RegExp/exec-lastIndex-negative.js new file mode 100644 index 0000000000..e3b4f9e301 --- /dev/null +++ b/test/staging/sm/RegExp/exec-lastIndex-negative.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1207922; +var summary = "negative lastIndex should be treated as 0."; + +print(BUGNUMBER + ": " + summary); + +var pattern = /abc/gi; +var string = 'AbcaBcabC'; + +var indices = [ + -1, + -Math.pow(2,32), + -(Math.pow(2,32) + 1), + -Math.pow(2,32) * 2, + -Math.pow(2,40), + -Number.MAX_VALUE, +]; +for (var index of indices) { + pattern.lastIndex = index; + var result = pattern.exec(string); + assert.sameValue(result.index, 0); + assert.sameValue(result.length, 1); + assert.sameValue(result[0], "Abc"); + assert.sameValue(pattern.lastIndex, 3); +} + diff --git a/test/staging/sm/RegExp/exec.js b/test/staging/sm/RegExp/exec.js new file mode 100644 index 0000000000..6fdade5756 --- /dev/null +++ b/test/staging/sm/RegExp/exec.js @@ -0,0 +1,245 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 646490; +var summary = + "RegExp.prototype.exec doesn't get the lastIndex and ToInteger() it for " + + "non-global regular expressions when it should"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(fun) +{ + try + { + var r = fun(); + throw new Error("didn't throw TypeError, returned " + r); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "didn't throw TypeError, got: " + e); + } +} + +function checkExec(description, regex, args, obj) +{ + var lastIndex = obj.lastIndex; + var index = obj.index; + var input = obj.input; + var indexArray = obj.indexArray; + + var res = regex.exec.apply(regex, args); + + assert.sameValue(Array.isArray(res), true, description + ": not an array"); + assert.sameValue(regex.lastIndex, lastIndex, description + ": wrong lastIndex"); + assert.sameValue(res.index, index, description + ": wrong index"); + assert.sameValue(res.input, input, description + ": wrong input"); + assert.sameValue(res.length, indexArray.length, description + ": wrong length"); + for (var i = 0, sz = indexArray.length; i < sz; i++) + assert.sameValue(res[i], indexArray[i], description + " " + i + ": wrong index value"); +} + +var exec = RegExp.prototype.exec; +var r, res, called, obj; + +/* 1. Let R be this RegExp object. */ +expectThrowTypeError(function() { exec.call(null); }); +expectThrowTypeError(function() { exec.call(""); }); +expectThrowTypeError(function() { exec.call(5); }); +expectThrowTypeError(function() { exec.call({}); }); +expectThrowTypeError(function() { exec.call([]); }); +expectThrowTypeError(function() { exec.call(); }); +expectThrowTypeError(function() { exec.call(true); }); +expectThrowTypeError(function() { exec.call(Object.create(RegExp.prototype)); }); +expectThrowTypeError(function() { exec.call(Object.create(/a/)); }); + + +/* 2. Let S be the value of ToString(string). */ +called = false; +r = /a/; +assert.sameValue(r.lastIndex, 0); + +checkExec("/a/", r, [{ toString: function() { called = true; return 'ba'; } }], + { lastIndex: 0, + index: 1, + input: "ba", + indexArray: ["a"] }); +assert.sameValue(called, true); + +called = false; +try +{ + res = r.exec({ toString: null, valueOf: function() { called = true; throw 17; } }); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e, 17); +} + +assert.sameValue(called, true); + +called = false; +obj = r.lastIndex = { valueOf: function() { assert.sameValue(true, false, "shouldn't have been called"); } }; +try +{ + res = r.exec({ toString: null, valueOf: function() { assert.sameValue(called, false); called = true; throw 17; } }); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e, 17); +} + +assert.sameValue(called, true); +assert.sameValue(r.lastIndex, obj); + +// We don't test lack of an argument because of RegExp statics non-standard +// behaviors overriding what really should happen for lack of an argument, sigh. + + +/* + * 3. Let length be the length of S. + * 4. Let lastIndex be the result of calling the [[Get]] internal method of R with argument "lastIndex". + * 5. Let i be the value of ToInteger(lastIndex). + */ +r = /b/; +r.lastIndex = { valueOf: {}, toString: {} }; +expectThrowTypeError(function() { r.exec("foopy"); }); +r.lastIndex = { valueOf: function() { throw new TypeError(); } }; +expectThrowTypeError(function() { r.exec("foopy"); }); + + +/* + * 6. Let global be the result of calling the [[Get]] internal method of R with argument "global". + * 7. If global is false, then let i = 0. + */ +obj = { valueOf: function() { return 5; } }; +r = /abc/; +r.lastIndex = obj; + +checkExec("/abc/ take one", r, ["abc-------abc"], + { lastIndex: obj, + index: 0, + input: "abc-------abc", + indexArray: ["abc"] }); + +checkExec("/abc/ take two", r, ["abc-------abc"], + { lastIndex: obj, + index: 0, + input: "abc-------abc", + indexArray: ["abc"] }); + + +/* + * 8. Let matchSucceeded be false. + * 9. Repeat, while matchSucceeded is false + * a. If i < 0 or i > length, then + * i. Call the [[Put]] internal method of R with arguments "lastIndex", 0, and true. + * ii. Return null. + * b. Call the [[Match]] internal method of R with arguments S and i. + * c. If [[Match]] returned failure, then + * i. Let i = i+1. + * d. else + * i. Let r be the State result of the call to [[Match]]. + * ii. Set matchSucceeded to true. + * e. Let i = i+1. + */ +r = /abc()?/; +r.lastIndex = -5; +checkExec("/abc()?/ with lastIndex -5", r, ["abc-------abc"], + { lastIndex: -5, + index: 0, + input: "abc-------abc", + indexArray: ["abc", undefined] }); + + +r = /abc/; +r.lastIndex = -17; +res = r.exec("cdefg"); +assert.sameValue(res, null); +assert.sameValue(r.lastIndex, -17); + +r = /abc/g; +r.lastIndex = -42; +res = r.exec("cdefg"); +assert.sameValue(res, null); +assert.sameValue(r.lastIndex, 0); + + +/* + * 10. Let e be r's endIndex value. + * 11. If global is true, + * a. Call the [[Put]] internal method of R with arguments "lastIndex", e, and true. + */ +r = /abc/g; +r.lastIndex = 17; +assert.sameValue(r.exec("sdfs"), null); +assert.sameValue(r.lastIndex, 0); + +r = /abc/g; +r.lastIndex = 2; +checkExec("/abc/g", r, ["00abc"], + { lastIndex: 5, + index: 2, + input: "00abc", + indexArray: ["abc"] }); + + + +r = /a(b)c/g; +r.lastIndex = 2; +checkExec("/a(b)c/g take two", r, ["00abcd"], + { lastIndex: 5, + index: 2, + input: "00abcd", + indexArray: ["abc", "b"] }); + + +/* + * 12. Let n be the length of r's captures array. (This is the same value as + * 15.10.2.1's NCapturingParens.) + * 13. Let A be a new array created as if by the expression new Array() where + * Array is the standard built-in constructor with that name. + * 14. Let matchIndex be the position of the matched substring within the + * complete String S. + * 15. Call the [[DefineOwnProperty]] internal method of A with arguments + * "index", Property Descriptor {[[Value]]: matchIndex, [[Writable]: true, + * [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 16. Call the [[DefineOwnProperty]] internal method of A with arguments + * "input", Property Descriptor {[[Value]]: S, [[Writable]: true, + * [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 17. Call the [[DefineOwnProperty]] internal method of A with arguments + * "length", Property Descriptor {[[Value]]: n + 1}, and true. + * 18. Let matchedSubstr be the matched substring (i.e. the portion of S + * between offset i inclusive and offset e exclusive). + * 19. Call the [[DefineOwnProperty]] internal method of A with arguments "0", + * Property Descriptor {[[Value]]: matchedSubstr, [[Writable]: true, + * [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 20. For each integer i such that I > 0 and I ≤ n + * a. Let captureI be i th element of r's captures array. + * b. Call the [[DefineOwnProperty]] internal method of A with arguments + * ToString(i), Property Descriptor {[[Value]]: captureI, [[Writable]: + * true, [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 21. Return A. + */ +// throughout, above (and in other tests) + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/RegExp/flag-accessors.js b/test/staging/sm/RegExp/flag-accessors.js new file mode 100644 index 0000000000..77259233c6 --- /dev/null +++ b/test/staging/sm/RegExp/flag-accessors.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1120169; +var summary = "Implement RegExp.prototype.{global, ignoreCase, multiline, sticky, unicode}"; + +print(BUGNUMBER + ": " + summary); + +var props = [ + "global", + "ignoreCase", + "multiline", + "sticky", + "unicode", +]; + +for (var prop of props) { + assert.sameValue(RegExp.prototype[prop], undefined, + `expected undefined for ${prop} on prototype`); +} + +test(/foo/iymg, [true, true, true, true, false]); +test(RegExp(""), [false, false, false, false, false]); +test(RegExp("", "mygi"), [true, true, true, true, false]); +test(RegExp("", "mygiu"), [true, true, true, true, true]); + +testThrowsGeneric(); +testThrowsGeneric(1); +testThrowsGeneric(""); +testThrowsGeneric({}); +testThrowsGeneric(new Proxy({}, {get(){ return true; }})); + +function test(obj, expects) { + for (var i = 0; i < props.length; i++) { + assert.sameValue(obj[props[i]], expects[i]); + } +} + +function testThrowsGeneric(obj) { + for (var prop of props) { + assertThrowsInstanceOf(() => genericGet(obj, prop), TypeError); + } +} + +function genericGet(obj, prop) { + return Object.getOwnPropertyDescriptor(RegExp.prototype, prop).get.call(obj); +} + diff --git a/test/staging/sm/RegExp/flags-param-handling.js b/test/staging/sm/RegExp/flags-param-handling.js new file mode 100644 index 0000000000..dc20b548cb --- /dev/null +++ b/test/staging/sm/RegExp/flags-param-handling.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(RegExp(/foo/my).flags, "my"); +assert.sameValue(RegExp(/foo/, "gi").flags, "gi"); +assert.sameValue(RegExp(/foo/my, "gi").flags, "gi"); +assert.sameValue(RegExp(/foo/my, "").flags, ""); +assert.sameValue(RegExp(/foo/my, undefined).flags, "my"); +assertThrowsInstanceOf(() => RegExp(/foo/my, null), SyntaxError); +assertThrowsInstanceOf(() => RegExp(/foo/my, "foo"), SyntaxError); + +assert.sameValue(/a/.compile("b", "gi").flags, "gi"); +assert.sameValue(/a/.compile(/b/my).flags, "my"); +assert.sameValue(/a/.compile(/b/my, undefined).flags, "my"); +assertThrowsInstanceOf(() => /a/.compile(/b/my, "gi"), TypeError); +assertThrowsInstanceOf(() => /a/.compile(/b/my, ""), TypeError); +assertThrowsInstanceOf(() => /a/.compile(/b/my, null), TypeError); +assertThrowsInstanceOf(() => /a/.compile(/b/my, "foo"), TypeError); + diff --git a/test/staging/sm/RegExp/flags.js b/test/staging/sm/RegExp/flags.js new file mode 100644 index 0000000000..d5ac99be9f --- /dev/null +++ b/test/staging/sm/RegExp/flags.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1108467; +var summary = "Implement RegExp.prototype.flags"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(RegExp.prototype.flags, ""); +assert.sameValue(/foo/iymg.flags, "gimy"); +assert.sameValue(RegExp("").flags, ""); +assert.sameValue(RegExp("", "mygi").flags, "gimy"); +assert.sameValue(RegExp("", "mygui").flags, "gimuy"); +assert.sameValue(genericFlags({}), ""); +assert.sameValue(genericFlags({ignoreCase: true}), "i"); +assert.sameValue(genericFlags({sticky:1, unicode:1, global: 0}), "uy"); +assert.sameValue(genericFlags({__proto__: {multiline: true}}), "m"); +assert.sameValue(genericFlags(new Proxy({}, {get(){return true}})), "dgimsuvy"); + +assertThrowsInstanceOf(() => genericFlags(), TypeError); +assertThrowsInstanceOf(() => genericFlags(1), TypeError); +assertThrowsInstanceOf(() => genericFlags(""), TypeError); + +function genericFlags(obj) { + return Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call(obj); +} + diff --git a/test/staging/sm/RegExp/getter-name.js b/test/staging/sm/RegExp/getter-name.js new file mode 100644 index 0000000000..8a48ef665e --- /dev/null +++ b/test/staging/sm/RegExp/getter-name.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180290; +var summary = 'RegExp getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp, Symbol.species).get.name, "get [Symbol.species]"); +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get.name, "get flags"); +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp.prototype, "global").get.name, "get global"); +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp.prototype, "ignoreCase").get.name, "get ignoreCase"); +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp.prototype, "multiline").get.name, "get multiline"); +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp.prototype, "source").get.name, "get source"); +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp.prototype, "sticky").get.name, "get sticky"); +assert.sameValue(Object.getOwnPropertyDescriptor(RegExp.prototype, "unicode").get.name, "get unicode"); + diff --git a/test/staging/sm/RegExp/ignoreCase-multiple.js b/test/staging/sm/RegExp/ignoreCase-multiple.js new file mode 100644 index 0000000000..206c49e6a4 --- /dev/null +++ b/test/staging/sm/RegExp/ignoreCase-multiple.js @@ -0,0 +1,80 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1280046; +var summary = "ignoreCase match should perform Canonicalize both on input and pattern."; + +print(BUGNUMBER + ": " + summary); + +// Each element [code1, upper, code2] satisfies the following condition: +// ToUpperCase(code1) == upper +// ToUpperCase(code2) == upper +var pairs = + [ + // U+00B5: MICRO SIGN + // U+039C: GREEK CAPITAL LETTER MU + // U+03BC: GREEK SMALL LETTER MU + ["\u00B5", "\u039C", "\u03BC"], + // U+0345: COMBINING GREEK YPOGEGRAMMENI + // U+0399: GREEK CAPITAL LETTER IOTA + // U+03B9: GREEK SMALL LETTER IOTA + ["\u0345", "\u0399", "\u03B9"], + // U+03C2: GREEK SMALL LETTER FINAL SIGMA + // U+03A3: GREEK CAPITAL LETTER SIGMA + // U+03C3: GREEK SMALL LETTER SIGMA + ["\u03C2", "\u03A3", "\u03C3"], + // U+03D0: GREEK BETA SYMBOL + // U+0392: GREEK CAPITAL LETTER BETA + // U+03B2: GREEK SMALL LETTER BETA + ["\u03D0", "\u0392", "\u03B2"], + // U+03D1: GREEK THETA SYMBOL + // U+0398: GREEK CAPITAL LETTER THETA + // U+03B8: GREEK SMALL LETTER THETA + ["\u03D1", "\u0398", "\u03B8"], + // U+03D5: GREEK PHI SYMBOL + // U+03A6: GREEK CAPITAL LETTER PHI + // U+03C6: GREEK SMALL LETTER PHI + ["\u03D5", "\u03A6", "\u03C6"], + // U+03D6: GREEK PI SYMBOL + // U+03A0: GREEK CAPITAL LETTER PI + // U+03C0: GREEK SMALL LETTER PI + ["\u03D6", "\u03A0", "\u03C0"], + // U+03F0: GREEK KAPPA SYMBOL + // U+039A: GREEK CAPITAL LETTER KAPPA + // U+03BA: GREEK SMALL LETTER KAPPA + ["\u03F0", "\u039A", "\u03BA"], + // U+03F1: GREEK RHO SYMBOL + // U+03A1: GREEK CAPITAL LETTER RHO + // U+03C1: GREEK SMALL LETTER RHO + ["\u03F1", "\u03A1", "\u03C1"], + // U+03F5: GREEK LUNATE EPSILON SYMBOL + // U+0395: GREEK CAPITAL LETTER EPSILON + // U+03B5: GREEK SMALL LETTER EPSILON + ["\u03F5", "\u0395", "\u03B5"], + // U+1E9B: LATIN SMALL LETTER LONG S WITH DOT ABOVE + // U+1E60: LATIN CAPITAL LETTER S WITH DOT ABOVE + // U+1E61: LATIN SMALL LETTER S WITH DOT ABOVE + ["\u1E9B", "\u1E60", "\u1E61"], + // U+1FBE: GREEK PROSGEGRAMMENI + // U+0399: GREEK CAPITAL LETTER IOTA + // U+03B9: GREEK SMALL LETTER IOTA + ["\u1FBE", "\u0399", "\u03B9"], + ]; + +for (var [code1, upper, code2] of pairs) { + assert.sameValue(new RegExp(code1, "i").test(code2), true); + assert.sameValue(new RegExp(code1, "i").test(upper), true); + assert.sameValue(new RegExp(upper, "i").test(code1), true); + assert.sameValue(new RegExp(upper, "i").test(code2), true); + assert.sameValue(new RegExp(code2, "i").test(code1), true); + assert.sameValue(new RegExp(code2, "i").test(upper), true); +} + diff --git a/test/staging/sm/RegExp/ignoreCase-non-latin1-to-latin1.js b/test/staging/sm/RegExp/ignoreCase-non-latin1-to-latin1.js new file mode 100644 index 0000000000..d341dc9bdd --- /dev/null +++ b/test/staging/sm/RegExp/ignoreCase-non-latin1-to-latin1.js @@ -0,0 +1,128 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var BUGNUMBER = 1338779; +var summary = "Non-Latin1 to Latin1 mapping in ignoreCase."; + +assert.sameValue(/(\u039C)/.test("\xB5"), false); +assert.sameValue(/(\u039C)+/.test("\xB5"), false); +assert.sameValue(/(\u039C)/i.test("\xB5"), true); +assert.sameValue(/(\u039C)+/i.test("\xB5"), true); +assert.sameValue(/(\u039C)/u.test("\xB5"), false); +assert.sameValue(/(\u039C)+/u.test("\xB5"), false); +assert.sameValue(/(\u039C)/ui.test("\xB5"), true); +assert.sameValue(/(\u039C)+/ui.test("\xB5"), true); + +assert.sameValue(/(\xB5)/.test("\u039C"), false); +assert.sameValue(/(\xB5)+/.test("\u039C"), false); +assert.sameValue(/(\xB5)/i.test("\u039C"), true); +assert.sameValue(/(\xB5)+/i.test("\u039C"), true); +assert.sameValue(/(\xB5)/u.test("\u039C"), false); +assert.sameValue(/(\xB5)+/u.test("\u039C"), false); +assert.sameValue(/(\xB5)/ui.test("\u039C"), true); +assert.sameValue(/(\xB5)+/ui.test("\u039C"), true); + + +assert.sameValue(/(\u0178)/.test("\xFF"), false); +assert.sameValue(/(\u0178)+/.test("\xFF"), false); +assert.sameValue(/(\u0178)/i.test("\xFF"), true); +assert.sameValue(/(\u0178)+/i.test("\xFF"), true); +assert.sameValue(/(\u0178)/u.test("\xFF"), false); +assert.sameValue(/(\u0178)+/u.test("\xFF"), false); +assert.sameValue(/(\u0178)/ui.test("\xFF"), true); +assert.sameValue(/(\u0178)+/ui.test("\xFF"), true); + +assert.sameValue(/(\xFF)/.test("\u0178"), false); +assert.sameValue(/(\xFF)+/.test("\u0178"), false); +assert.sameValue(/(\xFF)/i.test("\u0178"), true); +assert.sameValue(/(\xFF)+/i.test("\u0178"), true); +assert.sameValue(/(\xFF)/u.test("\u0178"), false); +assert.sameValue(/(\xFF)+/u.test("\u0178"), false); +assert.sameValue(/(\xFF)/ui.test("\u0178"), true); +assert.sameValue(/(\xFF)+/ui.test("\u0178"), true); + + +assert.sameValue(/(\u017F)/.test("\x73"), false); +assert.sameValue(/(\u017F)+/.test("\x73"), false); +assert.sameValue(/(\u017F)/i.test("\x73"), false); +assert.sameValue(/(\u017F)+/i.test("\x73"), false); +assert.sameValue(/(\u017F)/u.test("\x73"), false); +assert.sameValue(/(\u017F)+/u.test("\x73"), false); +assert.sameValue(/(\u017F)/iu.test("\x73"), true); +assert.sameValue(/(\u017F)+/iu.test("\x73"), true); + +assert.sameValue(/(\x73)/.test("\u017F"), false); +assert.sameValue(/(\x73)+/.test("\u017F"), false); +assert.sameValue(/(\x73)/i.test("\u017F"), false); +assert.sameValue(/(\x73)+/i.test("\u017F"), false); +assert.sameValue(/(\x73)/u.test("\u017F"), false); +assert.sameValue(/(\x73)+/u.test("\u017F"), false); +assert.sameValue(/(\x73)/iu.test("\u017F"), true); +assert.sameValue(/(\x73)+/iu.test("\u017F"), true); + + +assert.sameValue(/(\u1E9E)/.test("\xDF"), false); +assert.sameValue(/(\u1E9E)+/.test("\xDF"), false); +assert.sameValue(/(\u1E9E)/i.test("\xDF"), false); +assert.sameValue(/(\u1E9E)+/i.test("\xDF"), false); +assert.sameValue(/(\u1E9E)/u.test("\xDF"), false); +assert.sameValue(/(\u1E9E)+/u.test("\xDF"), false); +assert.sameValue(/(\u1E9E)/iu.test("\xDF"), true); +assert.sameValue(/(\u1E9E)+/iu.test("\xDF"), true); + +assert.sameValue(/(\xDF)/.test("\u1E9E"), false); +assert.sameValue(/(\xDF)+/.test("\u1E9E"), false); +assert.sameValue(/(\xDF)/i.test("\u1E9E"), false); +assert.sameValue(/(\xDF)+/i.test("\u1E9E"), false); +assert.sameValue(/(\xDF)/u.test("\u1E9E"), false); +assert.sameValue(/(\xDF)+/u.test("\u1E9E"), false); +assert.sameValue(/(\xDF)/iu.test("\u1E9E"), true); +assert.sameValue(/(\xDF)+/iu.test("\u1E9E"), true); + + +assert.sameValue(/(\u212A)/.test("\x6B"), false); +assert.sameValue(/(\u212A)+/.test("\x6B"), false); +assert.sameValue(/(\u212A)/i.test("\x6B"), false); +assert.sameValue(/(\u212A)+/i.test("\x6B"), false); +assert.sameValue(/(\u212A)/u.test("\x6B"), false); +assert.sameValue(/(\u212A)+/u.test("\x6B"), false); +assert.sameValue(/(\u212A)/iu.test("\x6B"), true); +assert.sameValue(/(\u212A)+/iu.test("\x6B"), true); + +assert.sameValue(/(\x6B)/.test("\u212A"), false); +assert.sameValue(/(\x6B)+/.test("\u212A"), false); +assert.sameValue(/(\x6B)/i.test("\u212A"), false); +assert.sameValue(/(\x6B)+/i.test("\u212A"), false); +assert.sameValue(/(\x6B)/u.test("\u212A"), false); +assert.sameValue(/(\x6B)+/u.test("\u212A"), false); +assert.sameValue(/(\x6B)/iu.test("\u212A"), true); +assert.sameValue(/(\x6B)+/iu.test("\u212A"), true); + + +assert.sameValue(/(\u212B)/.test("\xE5"), false); +assert.sameValue(/(\u212B)+/.test("\xE5"), false); +assert.sameValue(/(\u212B)/i.test("\xE5"), false); +assert.sameValue(/(\u212B)+/i.test("\xE5"), false); +assert.sameValue(/(\u212B)/u.test("\xE5"), false); +assert.sameValue(/(\u212B)+/u.test("\xE5"), false); +assert.sameValue(/(\u212B)/iu.test("\xE5"), true); +assert.sameValue(/(\u212B)+/iu.test("\xE5"), true); + +assert.sameValue(/(\xE5)/.test("\u212B"), false); +assert.sameValue(/(\xE5)+/.test("\u212B"), false); +assert.sameValue(/(\xE5)/i.test("\u212B"), false); +assert.sameValue(/(\xE5)+/i.test("\u212B"), false); +assert.sameValue(/(\xE5)/u.test("\u212B"), false); +assert.sameValue(/(\xE5)+/u.test("\u212B"), false); +assert.sameValue(/(\xE5)/iu.test("\u212B"), true); +assert.sameValue(/(\xE5)+/iu.test("\u212B"), true); + diff --git a/test/staging/sm/RegExp/instance-property-storage-introspection.js b/test/staging/sm/RegExp/instance-property-storage-introspection.js new file mode 100644 index 0000000000..6491d460ac --- /dev/null +++ b/test/staging/sm/RegExp/instance-property-storage-introspection.js @@ -0,0 +1,133 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 640072; +var summary = + "Represent /a/.{lastIndex,global,source,multiline,sticky,ignoreCase} with " + + "plain old data properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function checkDataProperty(obj, p, expect, msg) +{ + var d = Object.getOwnPropertyDescriptor(obj, p); + + assert.sameValue(d.value, expect.value, msg + ": bad value for " + p); + assert.sameValue(d.writable, expect.writable, msg + ": bad writable for " + p); + assert.sameValue(d.enumerable, expect.enumerable, msg + ": bad enumerable for " + p); + assert.sameValue(d.configurable, expect.configurable, msg + ": bad configurable for " + p); + + // Try redefining the property using its initial values: these should all be + // silent no-ops. + Object.defineProperty(obj, p, { value: expect.value }); + Object.defineProperty(obj, p, { writable: expect.writable }); + Object.defineProperty(obj, p, { enumerable: expect.enumerable }); + Object.defineProperty(obj, p, { configurable: expect.configurable }); + + var d2 = Object.getOwnPropertyDescriptor(obj, p); + assert.sameValue(d.value, d2.value, msg + ": value changed on redefinition of " + p + "?"); + assert.sameValue(d.writable, d2.writable, msg + ": writable changed on redefinition of " + p + "?"); + assert.sameValue(d.enumerable, d2.enumerable, msg + ": enumerable changed on redefinition of " + p + "?"); + assert.sameValue(d.configurable, d2.configurable, msg + ": configurable changed on redefinition of " + p + "?"); +} + + +// Check a bunch of "empty" regular expressions first. + +var choices = [{ msg: "new RegExp()", + get: function() { return new RegExp(); } }, + { msg: "/(?:)/", + get: Function("return /(?:)/;") }]; + +function checkRegExp(r, msg, lastIndex) +{ + var expect; + + expect = { value: lastIndex, enumerable: false, configurable: false, writable: true }; + checkDataProperty(r, "lastIndex", expect, msg); +} + +checkRegExp(new RegExp(), "new RegExp()", 0); +checkRegExp(/(?:)/, "/(?:)/", 0); +checkRegExp(Function("return /(?:)/;")(), 'Function("return /(?:)/;")()', 0); + +for (var i = 0; i < choices.length; i++) +{ + var choice = choices[i]; + var msg = choice.msg; + var r = choice.get(); + + checkRegExp(r, msg, 0); +} + +// Now test less generic regular expressions + +checkRegExp(/a/gim, "/a/gim", 0); + +var r; + +do +{ + r = /abcd/mg; + checkRegExp(r, "/abcd/mg initially", 0); + r.exec("abcdefg"); + checkRegExp(r, "/abcd/mg step 1", 4); + r.exec("abcdabcd"); + checkRegExp(r, "/abcd/mg step 2", 8); + r.exec("abcdabcd"); + checkRegExp(r, "/abcd/mg end", 0); + + r = /cde/ig; + checkRegExp(r, "/cde/ig initially", 0); + var obj = r.lastIndex = { valueOf: function() { return 2; } }; + checkRegExp(r, "/cde/ig after lastIndex", obj); + r.exec("aaacdef"); + checkRegExp(r, "/cde/ig after exec", 6); + Object.defineProperty(r, "lastIndex", { value: 3 }); + checkRegExp(r, "/cde/ig after define 3", 3); + Object.defineProperty(r, "lastIndex", { value: obj }); + checkRegExp(r, "/cde/ig after lastIndex", obj); + + + // Tricky bits of testing: make sure that redefining lastIndex doesn't change + // the slot where the lastIndex property is initially stored, even if + // the redefinition also changes writability. + r = /a/g; + checkRegExp(r, "/a/g initially", 0); + Object.defineProperty(r, "lastIndex", { value: 2 }); + r.exec("aabbbba"); + checkRegExp(r, "/a/g after first exec", 7); + assert.sameValue(r.lastIndex, 7); + r.lastIndex = 2; + checkRegExp(r, "/a/g after assign", 2); + r.exec("aabbbba"); + assert.sameValue(r.lastIndex, 7); // check in reverse order + checkRegExp(r, "/a/g after second exec", 7); + + r = /c/g; + r.lastIndex = 2; + checkRegExp(r, "/c/g initially", 2); + Object.defineProperty(r, "lastIndex", { writable: false }); + assert.sameValue(Object.getOwnPropertyDescriptor(r, "lastIndex").writable, false); + try { r.exec("aabbbba"); } catch (e) { /* swallow error if thrown */ } + assert.sameValue(Object.getOwnPropertyDescriptor(r, "lastIndex").writable, false); +} +while (Math.random() > 17); // fake loop to discourage RegExp object caching + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/RegExp/lastIndex-exec.js b/test/staging/sm/RegExp/lastIndex-exec.js new file mode 100644 index 0000000000..2903e16a4f --- /dev/null +++ b/test/staging/sm/RegExp/lastIndex-exec.js @@ -0,0 +1,89 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// RegExp.prototype.exec: Test lastIndex changes for ES2017. + +// Test various combinations of: +// - Pattern matches or doesn't match +// - Global and/or sticky flag is set. +// - lastIndex exceeds the input string length +// - lastIndex is +-0 +const testCases = [ + { regExp: /a/, lastIndex: 0, input: "a", result: 0 }, + { regExp: /a/g, lastIndex: 0, input: "a", result: 1 }, + { regExp: /a/y, lastIndex: 0, input: "a", result: 1 }, + + { regExp: /a/, lastIndex: 0, input: "b", result: 0 }, + { regExp: /a/g, lastIndex: 0, input: "b", result: 0 }, + { regExp: /a/y, lastIndex: 0, input: "b", result: 0 }, + + { regExp: /a/, lastIndex: -0, input: "a", result: -0 }, + { regExp: /a/g, lastIndex: -0, input: "a", result: 1 }, + { regExp: /a/y, lastIndex: -0, input: "a", result: 1 }, + + { regExp: /a/, lastIndex: -0, input: "b", result: -0 }, + { regExp: /a/g, lastIndex: -0, input: "b", result: 0 }, + { regExp: /a/y, lastIndex: -0, input: "b", result: 0 }, + + { regExp: /a/, lastIndex: -1, input: "a", result: -1 }, + { regExp: /a/g, lastIndex: -1, input: "a", result: 1 }, + { regExp: /a/y, lastIndex: -1, input: "a", result: 1 }, + + { regExp: /a/, lastIndex: -1, input: "b", result: -1 }, + { regExp: /a/g, lastIndex: -1, input: "b", result: 0 }, + { regExp: /a/y, lastIndex: -1, input: "b", result: 0 }, + + { regExp: /a/, lastIndex: 100, input: "a", result: 100 }, + { regExp: /a/g, lastIndex: 100, input: "a", result: 0 }, + { regExp: /a/y, lastIndex: 100, input: "a", result: 0 }, +]; + +// Basic test. +for (let {regExp, lastIndex, input, result} of testCases) { + let re = new RegExp(regExp); + re.lastIndex = lastIndex; + re.exec(input); + assert.sameValue(re.lastIndex, result); +} + +// Test when lastIndex is non-writable. +for (let {regExp, lastIndex, input} of testCases) { + let re = new RegExp(regExp); + Object.defineProperty(re, "lastIndex", { value: lastIndex, writable: false }); + if (re.global || re.sticky) { + assertThrowsInstanceOf(() => re.exec(input), TypeError); + } else { + re.exec(input); + } + assert.sameValue(re.lastIndex, lastIndex); +} + +// Test when lastIndex is changed to non-writable as a side-effect. +for (let {regExp, lastIndex, input} of testCases) { + let re = new RegExp(regExp); + let called = false; + re.lastIndex = { + valueOf() { + assert.sameValue(called, false); + called = true; + Object.defineProperty(re, "lastIndex", { value: 9000, writable: false }); + return lastIndex; + } + }; + if (re.global || re.sticky) { + assertThrowsInstanceOf(() => re.exec(input), TypeError); + } else { + re.exec(input); + } + assert.sameValue(re.lastIndex, 9000); + assert.sameValue(called, true); +} + diff --git a/test/staging/sm/RegExp/lastIndex-match-or-replace.js b/test/staging/sm/RegExp/lastIndex-match-or-replace.js new file mode 100644 index 0000000000..460a755abf --- /dev/null +++ b/test/staging/sm/RegExp/lastIndex-match-or-replace.js @@ -0,0 +1,132 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// RegExp.prototype[Symbol.match, Symbol.replace]: Test lastIndex changes for ES2017. + +// RegExp-like class to test the RegExp method slow paths. +class DuckRegExp extends RegExp { + constructor(pattern, flags) { + return Object.create(DuckRegExp.prototype, { + regExp: { + value: new RegExp(pattern, flags) + }, + lastIndex: { + value: 0, writable: true, enumerable: false, configurable: false + } + }); + } + + exec(...args) { + this.regExp.lastIndex = this.lastIndex; + try { + return this.regExp.exec(...args); + } finally { + if (this.global || this.sticky) + this.lastIndex = this.regExp.lastIndex; + } + } + + get source() { return this.regExp.source; } + + get flags() { return this.regExp.flags; } + get global() { return this.regExp.global; } + get ignoreCase() { return this.regExp.ignoreCase; } + get multiline() { return this.regExp.multiline; } + get sticky() { return this.regExp.sticky; } + get unicode() { return this.regExp.unicode; } +} + +// Test various combinations of: +// - Pattern matches or doesn't match +// - Global and/or sticky flag is set. +// - lastIndex exceeds the input string length +// - lastIndex is +-0 +const testCases = [ + { regExp: /a/, lastIndex: 0, input: "a", result: 0 }, + { regExp: /a/g, lastIndex: 0, input: "a", result: 0 }, + { regExp: /a/y, lastIndex: 0, input: "a", result: 1 }, + + { regExp: /a/, lastIndex: 0, input: "b", result: 0 }, + { regExp: /a/g, lastIndex: 0, input: "b", result: 0 }, + { regExp: /a/y, lastIndex: 0, input: "b", result: 0 }, + + { regExp: /a/, lastIndex: -0, input: "a", result: -0 }, + { regExp: /a/g, lastIndex: -0, input: "a", result: 0 }, + { regExp: /a/y, lastIndex: -0, input: "a", result: 1 }, + + { regExp: /a/, lastIndex: -0, input: "b", result: -0 }, + { regExp: /a/g, lastIndex: -0, input: "b", result: 0 }, + { regExp: /a/y, lastIndex: -0, input: "b", result: 0 }, + + { regExp: /a/, lastIndex: -1, input: "a", result: -1 }, + { regExp: /a/g, lastIndex: -1, input: "a", result: 0 }, + { regExp: /a/y, lastIndex: -1, input: "a", result: 1 }, + + { regExp: /a/, lastIndex: -1, input: "b", result: -1 }, + { regExp: /a/g, lastIndex: -1, input: "b", result: 0 }, + { regExp: /a/y, lastIndex: -1, input: "b", result: 0 }, + + { regExp: /a/, lastIndex: 100, input: "a", result: 100 }, + { regExp: /a/g, lastIndex: 100, input: "a", result: 0 }, + { regExp: /a/y, lastIndex: 100, input: "a", result: 0 }, +]; + +for (let method of [RegExp.prototype[Symbol.match], RegExp.prototype[Symbol.replace]]) { + for (let Constructor of [RegExp, DuckRegExp]) { + // Basic test. + for (let {regExp, lastIndex, input, result} of testCases) { + let re = new Constructor(regExp); + re.lastIndex = lastIndex; + Reflect.apply(method, re, [input]); + assert.sameValue(re.lastIndex, result); + } + + // Test when lastIndex is non-writable. + for (let {regExp, lastIndex, input} of testCases) { + let re = new Constructor(regExp); + Object.defineProperty(re, "lastIndex", { value: lastIndex, writable: false }); + if (re.global || re.sticky) { + assertThrowsInstanceOf(() => Reflect.apply(method, re, [input]), TypeError); + } else { + Reflect.apply(method, re, [input]); + } + assert.sameValue(re.lastIndex, lastIndex); + } + + // Test when lastIndex is changed to non-writable as a side-effect. + for (let {regExp, lastIndex, input, result} of testCases) { + let re = new Constructor(regExp); + let called = false; + re.lastIndex = { + valueOf() { + assert.sameValue(called, false); + called = true; + Object.defineProperty(re, "lastIndex", { value: 9000, writable: false }); + return lastIndex; + } + }; + if (re.sticky) { + assertThrowsInstanceOf(() => Reflect.apply(method, re, [input]), TypeError); + assert.sameValue(called, true); + assert.sameValue(re.lastIndex, 9000); + } else if (re.global) { + Reflect.apply(method, re, [input]); + assert.sameValue(called, false); + assert.sameValue(re.lastIndex, result); + } else { + Reflect.apply(method, re, [input]); + assert.sameValue(called, true); + assert.sameValue(re.lastIndex, 9000); + } + } + } +} + diff --git a/test/staging/sm/RegExp/lastIndex-nonwritable.js b/test/staging/sm/RegExp/lastIndex-nonwritable.js new file mode 100644 index 0000000000..93a75b18c3 --- /dev/null +++ b/test/staging/sm/RegExp/lastIndex-nonwritable.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1168416; +var summary = "Regexp.prototype.test/exec shouldn't change lastIndex if not writable."; + +print(BUGNUMBER + ": " + summary); + +var regex = /0/g; +Object.freeze(regex); +var str = "abc000"; + +var desc = Object.getOwnPropertyDescriptor(regex, "lastIndex"); +assert.sameValue(desc.writable, false); +assert.sameValue(desc.value, 0); + +assertThrowsInstanceOf(() => regex.test(str), TypeError); + +desc = Object.getOwnPropertyDescriptor(regex, "lastIndex"); +assert.sameValue(desc.writable, false); +assert.sameValue(desc.value, 0); + +assertThrowsInstanceOf(() => regex.exec(str), TypeError); + +desc = Object.getOwnPropertyDescriptor(regex, "lastIndex"); +assert.sameValue(desc.writable, false); +assert.sameValue(desc.value, 0); + diff --git a/test/staging/sm/RegExp/lastIndex-search.js b/test/staging/sm/RegExp/lastIndex-search.js new file mode 100644 index 0000000000..6904c06327 --- /dev/null +++ b/test/staging/sm/RegExp/lastIndex-search.js @@ -0,0 +1,127 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// RegExp.prototype[Symbol.search]: Test lastIndex changes for ES2017. + +// RegExp-like class to test the RegExp method slow paths. +class DuckRegExp extends RegExp { + constructor(pattern, flags) { + return Object.create(DuckRegExp.prototype, { + regExp: { + value: new RegExp(pattern, flags) + }, + lastIndex: { + value: 0, writable: true, enumerable: false, configurable: false + } + }); + } + + exec(...args) { + this.regExp.lastIndex = this.lastIndex; + try { + return this.regExp.exec(...args); + } finally { + if (this.global || this.sticky) + this.lastIndex = this.regExp.lastIndex; + } + } + + get source() { return this.regExp.source; } + + get global() { return this.regExp.global; } + get ignoreCase() { return this.regExp.ignoreCase; } + get multiline() { return this.regExp.multiline; } + get sticky() { return this.regExp.sticky; } + get unicode() { return this.regExp.unicode; } +} + +// Test various combinations of: +// - Pattern matches or doesn't match +// - Global and/or sticky flag is set. +// - lastIndex exceeds the input string length +// - lastIndex is +-0 +const testCasesNotPositiveZero = [ + { regExp: /a/, lastIndex: -1, input: "a" }, + { regExp: /a/g, lastIndex: -1, input: "a" }, + { regExp: /a/y, lastIndex: -1, input: "a" }, + + { regExp: /a/, lastIndex: 100, input: "a" }, + { regExp: /a/g, lastIndex: 100, input: "a" }, + { regExp: /a/y, lastIndex: 100, input: "a" }, + + { regExp: /a/, lastIndex: -1, input: "b" }, + { regExp: /a/g, lastIndex: -1, input: "b" }, + { regExp: /a/y, lastIndex: -1, input: "b" }, + + { regExp: /a/, lastIndex: -0, input: "a" }, + { regExp: /a/g, lastIndex: -0, input: "a" }, + { regExp: /a/y, lastIndex: -0, input: "a" }, + + { regExp: /a/, lastIndex: -0, input: "b" }, + { regExp: /a/g, lastIndex: -0, input: "b" }, + { regExp: /a/y, lastIndex: -0, input: "b" }, +]; + +const testCasesPositiveZero = [ + { regExp: /a/, lastIndex: 0, input: "a" }, + { regExp: /a/g, lastIndex: 0, input: "a" }, + { regExp: /a/y, lastIndex: 0, input: "a" }, + + { regExp: /a/, lastIndex: 0, input: "b" }, + { regExp: /a/g, lastIndex: 0, input: "b" }, + { regExp: /a/y, lastIndex: 0, input: "b" }, +]; + +const testCases = [...testCasesNotPositiveZero, ...testCasesPositiveZero]; + +for (let Constructor of [RegExp, DuckRegExp]) { + // Basic test. + for (let {regExp, lastIndex, input} of testCases) { + let re = new Constructor(regExp); + re.lastIndex = lastIndex; + re[Symbol.search](input); + assert.sameValue(re.lastIndex, lastIndex); + } + + // Test when lastIndex is non-writable and not positive zero. + for (let {regExp, lastIndex, input} of testCasesNotPositiveZero) { + let re = new Constructor(regExp); + Object.defineProperty(re, "lastIndex", { value: lastIndex, writable: false }); + assertThrowsInstanceOf(() => re[Symbol.search](input), TypeError); + assert.sameValue(re.lastIndex, lastIndex); + } + + // Test when lastIndex is non-writable and positive zero. + for (let {regExp, lastIndex, input} of testCasesPositiveZero) { + let re = new Constructor(regExp); + Object.defineProperty(re, "lastIndex", { value: lastIndex, writable: false }); + if (re.global || re.sticky) { + assertThrowsInstanceOf(() => re[Symbol.search](input), TypeError); + } else { + re[Symbol.search](input); + } + assert.sameValue(re.lastIndex, lastIndex); + } + + // Test lastIndex isn't converted to a number. + for (let {regExp, lastIndex, input} of testCases) { + let re = new RegExp(regExp); + let badIndex = { + valueOf() { + assert.sameValue(false, true); + } + }; + re.lastIndex = badIndex; + re[Symbol.search](input); + assert.sameValue(re.lastIndex, badIndex); + } +} + diff --git a/test/staging/sm/RegExp/match-local-tolength-recompilation.js b/test/staging/sm/RegExp/match-local-tolength-recompilation.js new file mode 100644 index 0000000000..3bbd3cbe92 --- /dev/null +++ b/test/staging/sm/RegExp/match-local-tolength-recompilation.js @@ -0,0 +1,84 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Side-effects when calling ToLength(regExp.lastIndex) in +// RegExp.prototype[@@match] for non-global RegExp can recompile the RegExp. + +for (var flag of ["", "y"]) { + var regExp = new RegExp("a", flag); + + regExp.lastIndex = { + valueOf() { + regExp.compile("b"); + return 0; + } + }; + + var result = regExp[Symbol.match]("b"); + assert.sameValue(result !== null, true); +} + +// Recompilation modifies flag: +// Case 1: Adds global flag, validate by checking lastIndex. +var regExp = new RegExp("a", ""); +regExp.lastIndex = { + valueOf() { + // |regExp| is now in global mode, RegExpBuiltinExec should update the + // lastIndex property to reflect last match. + regExp.compile("a", "g"); + return 0; + } +}; +regExp[Symbol.match]("a"); +assert.sameValue(regExp.lastIndex, 1); + +// Case 2: Removes sticky flag with match, validate by checking lastIndex. +var regExp = new RegExp("a", "y"); +regExp.lastIndex = { + valueOf() { + // |regExp| is no longer sticky, RegExpBuiltinExec shouldn't modify the + // lastIndex property. + regExp.compile("a", ""); + regExp.lastIndex = 9000; + return 0; + } +}; +regExp[Symbol.match]("a"); +assert.sameValue(regExp.lastIndex, 9000); + +// Case 3.a: Removes sticky flag without match, validate by checking lastIndex. +var regExp = new RegExp("a", "y"); +regExp.lastIndex = { + valueOf() { + // |regExp| is no longer sticky, RegExpBuiltinExec shouldn't modify the + // lastIndex property. + regExp.compile("b", ""); + regExp.lastIndex = 9001; + return 0; + } +}; +regExp[Symbol.match]("a"); +assert.sameValue(regExp.lastIndex, 9001); + +// Case 3.b: Removes sticky flag without match, validate by checking lastIndex. +var regExp = new RegExp("a", "y"); +regExp.lastIndex = { + valueOf() { + // |regExp| is no longer sticky, RegExpBuiltinExec shouldn't modify the + // lastIndex property. + regExp.compile("b", ""); + regExp.lastIndex = 9002; + return 10000; + } +}; +regExp[Symbol.match]("a"); +assert.sameValue(regExp.lastIndex, 9002); + diff --git a/test/staging/sm/RegExp/match-this.js b/test/staging/sm/RegExp/match-this.js new file mode 100644 index 0000000000..4f9067b797 --- /dev/null +++ b/test/staging/sm/RegExp/match-this.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "RegExp.prototype[@@match] should check this value."; + +print(BUGNUMBER + ": " + summary); + +for (var v of [null, 1, true, undefined, "", Symbol.iterator]) { + assertThrowsInstanceOf(() => RegExp.prototype[Symbol.match].call(v), + TypeError); +} + diff --git a/test/staging/sm/RegExp/match-trace.js b/test/staging/sm/RegExp/match-trace.js new file mode 100644 index 0000000000..52a7521cdc --- /dev/null +++ b/test/staging/sm/RegExp/match-trace.js @@ -0,0 +1,159 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Trace RegExp.prototype[@@match] behavior."; + +print(BUGNUMBER + ": " + summary); + +var n; +var log; +var target; +var global; +var unicode; +var logProxy; + +var execResult; +var lastIndexResult; +var lastIndexExpected; + +function P(A) { + return new Proxy(A, { + get(that, name) { + if (logProxy) + log += "get:result[" + name + "],"; + return that[name]; + } + }); +} + +var myRegExp = { + get flags() { + log += "get:flags,"; + var flags = ""; + if (global) flags += "g"; + if (unicode) flags += "u"; + return flags; + }, + get global() { + // This getter should not be invoked, because we override the flags getter. + log += "get:global," + }, + get unicode() { + // This getter should not be invoked, because we override the flags getter. + log += "get:unicode," + }, + get lastIndex() { + log += "get:lastIndex,"; + return lastIndexResult[n]; + }, + set lastIndex(v) { + log += "set:lastIndex,"; + assert.sameValue(v, lastIndexExpected[n]); + }, + get exec() { + log += "get:exec,"; + return function(S) { + log += "call:exec,"; + assert.sameValue(S, target); + return execResult[n++]; + }; + }, +}; + +function reset() { + n = 0; + log = ""; + target = "abcAbcABC"; + global = true; + unicode = false; + logProxy = true; +} + +// Trace global with non-empty match. +reset(); +execResult = [ P(["abc"]), P(["ABC"]), null ]; +lastIndexResult = [ , , , ]; +lastIndexExpected = [ 0, , , ]; +var ret = RegExp.prototype[Symbol.match].call(myRegExp, target); +assert.sameValue(JSON.stringify(ret), `["abc","ABC"]`); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec,get:result[0]," + + "get:exec,call:exec,get:result[0]," + + "get:exec,call:exec,"); + +// Trace global with empty match. +reset(); +execResult = [ P([""]), P([""]), null ]; +lastIndexResult = [ , 4, 20, ]; +lastIndexExpected = [ 0, 5, 21, ]; +ret = RegExp.prototype[Symbol.match].call(myRegExp, target); +assert.sameValue(JSON.stringify(ret), `["",""]`); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," + + "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," + + "get:exec,call:exec,"); + +// Trace global and unicode with empty match. +// 1. not surrogate pair +// 2. lead surrogate pair +// 3. trail surrogate pair +// 4. lead surrogate pair without trail surrogate pair +// 5. index overflow +reset(); +unicode = true; +// 0123 4 5678 +target = "___\uD83D\uDC38___\uD83D"; +execResult = [ P([""]), P([""]), P([""]), P([""]), P([""]), null ]; +lastIndexResult = [ , 2, 3, 4, 8, 9, ]; +lastIndexExpected = [ 0, 3, 5, 5, 9, 10, ]; +ret = RegExp.prototype[Symbol.match].call(myRegExp, target); +assert.sameValue(JSON.stringify(ret), `["","","","",""]`); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," + + "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," + + "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," + + "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," + + "get:exec,call:exec,get:result[0],get:lastIndex,set:lastIndex," + + "get:exec,call:exec,"); + +// Trace global with no match. +reset(); +execResult = [ null ]; +lastIndexResult = [ , ]; +lastIndexExpected = [ 0, ]; +ret = RegExp.prototype[Symbol.match].call(myRegExp, target); +assert.sameValue(ret, null); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec,"); + +// Trace non-global. +reset(); +global = false; +execResult = [ P(["abc"]) ]; +lastIndexResult = []; +lastIndexExpected = []; +ret = RegExp.prototype[Symbol.match].call(myRegExp, target); +// ret is the Proxy on non-global case, disable logging. +logProxy = false; +assert.sameValue(JSON.stringify(ret), `["abc"]`); +assert.sameValue(log, + "get:flags," + + "get:exec,call:exec,"); + diff --git a/test/staging/sm/RegExp/match.js b/test/staging/sm/RegExp/match.js new file mode 100644 index 0000000000..67749678b8 --- /dev/null +++ b/test/staging/sm/RegExp/match.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Implement RegExp.prototype[@@match]."; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(RegExp.prototype[Symbol.match].name, "[Symbol.match]"); +assert.sameValue(RegExp.prototype[Symbol.match].length, 1); +var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.match); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, true); + +var re = /a/; +var v = re[Symbol.match]("abcAbcABC"); +assert.sameValue(Array.isArray(v), true); +assert.sameValue(v.length, 1); +assert.sameValue(v[0], "a"); + +re = /d/; +v = re[Symbol.match]("abcAbcABC"); +assert.sameValue(v, null); + +re = /a/ig; +v = re[Symbol.match]("abcAbcABC"); +assert.sameValue(Array.isArray(v), true); +assert.sameValue(v.length, 3); +assert.sameValue(v[0], "a"); +assert.sameValue(v[1], "A"); +assert.sameValue(v[2], "A"); + +re = /d/g; +v = re[Symbol.match]("abcAbcABC"); +assert.sameValue(v, null); + diff --git a/test/staging/sm/RegExp/prototype-different-global.js b/test/staging/sm/RegExp/prototype-different-global.js new file mode 100644 index 0000000000..2bfb4d8698 --- /dev/null +++ b/test/staging/sm/RegExp/prototype-different-global.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test(otherGlobal) { + var otherRegExp = otherGlobal.RegExp; + + for (let name of ["global", "ignoreCase", "multiline", "sticky", "unicode", "source"]) { + let getter = Object.getOwnPropertyDescriptor(RegExp.prototype, name).get; + assert.sameValue(typeof getter, "function"); + + // Note: TypeError gets reported from wrong global if cross-compartment, + // so we test both cases. + let ex; + try { + getter.call(otherRegExp.prototype); + } catch (e) { + ex = e; + } + assert.sameValue(ex instanceof TypeError || ex instanceof otherGlobal.TypeError, true); + } + + let flagsGetter = Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get; + assert.sameValue(flagsGetter.call(otherRegExp.prototype), ""); + + assert.sameValue(RegExp.prototype.toString.call(otherRegExp.prototype), "/(?:)/"); +} +test(createNewGlobal()); +test(createNewGlobal({newCompartment: true})); + diff --git a/test/staging/sm/RegExp/prototype.js b/test/staging/sm/RegExp/prototype.js new file mode 100644 index 0000000000..828628ac42 --- /dev/null +++ b/test/staging/sm/RegExp/prototype.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const t = RegExp.prototype; + +let properties = "toString,compile,exec,test," + + "flags,dotAll,global,hasIndices,ignoreCase,multiline,source,sticky,unicode,unicodeSets," + + "constructor," + + "Symbol(Symbol.match),Symbol(Symbol.replace),Symbol(Symbol.search),Symbol(Symbol.split)"; +if (Object.prototype.toSource) { + properties = "toSource," + properties; +} +if (Symbol.matchAll) { + properties += ",Symbol(Symbol.matchAll)"; +} +assert.compareArray(Reflect.ownKeys(t).map(String).sort(), properties.split(",").sort()); + + +// Invoking getters on the prototype should not throw +function getter(name) { + return Object.getOwnPropertyDescriptor(t, name).get.call(t); +} + +assert.sameValue(getter("flags"), ""); +assert.sameValue(getter("global"), undefined); +assert.sameValue(getter("ignoreCase"), undefined); +assert.sameValue(getter("multiline"), undefined); +assert.sameValue(getter("source"), "(?:)"); +assert.sameValue(getter("sticky"), undefined); +assert.sameValue(getter("unicode"), undefined); + +assert.sameValue(t.toString(), "/(?:)/"); + +// The methods don't work with the prototype +assertThrowsInstanceOf(() => t.compile("b", "i"), TypeError); +assertThrowsInstanceOf(() => t.test("x"), TypeError); +assertThrowsInstanceOf(() => t.exec("x"), TypeError); + diff --git a/test/staging/sm/RegExp/regress-576828.js b/test/staging/sm/RegExp/regress-576828.js new file mode 100644 index 0000000000..7de773cddc --- /dev/null +++ b/test/staging/sm/RegExp/regress-576828.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var re = /(z\1){3}/; +var str = 'zzz'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['zzz', 'z'], 0, str); +checkRegExpMatch(actual, expected); + diff --git a/test/staging/sm/RegExp/regress-613820-1.js b/test/staging/sm/RegExp/regress-613820-1.js new file mode 100644 index 0000000000..6d11983471 --- /dev/null +++ b/test/staging/sm/RegExp/regress-613820-1.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Back reference is actually a forwards reference. */ +var re = /(\2(a)){2}/; +var str = 'aaa'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['aa', 'a', 'a'], 0, str); +checkRegExpMatch(actual, expected); + diff --git a/test/staging/sm/RegExp/regress-613820-2.js b/test/staging/sm/RegExp/regress-613820-2.js new file mode 100644 index 0000000000..65f8e99d51 --- /dev/null +++ b/test/staging/sm/RegExp/regress-613820-2.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Resetting of inner capture groups across quantified capturing parens. */ +var re = /(?:(f)(o)(o)|(b)(a)(r))*/; +var str = 'foobar'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['foobar', undefined, undefined, undefined, 'b', 'a', 'r'], 0, str); +checkRegExpMatch(actual, expected); + diff --git a/test/staging/sm/RegExp/regress-613820-3.js b/test/staging/sm/RegExp/regress-613820-3.js new file mode 100644 index 0000000000..ebdfea8cd2 --- /dev/null +++ b/test/staging/sm/RegExp/regress-613820-3.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Capture group reset to undefined during second iteration, so backreference doesn't see prior result. */ +var re = /(?:^(a)|\1(a)|(ab)){2}/; +var str = 'aab'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['aa', undefined, 'a', undefined], 0, str); +checkRegExpMatch(actual, expected); + diff --git a/test/staging/sm/RegExp/regress-yarr-regexp.js b/test/staging/sm/RegExp/regress-yarr-regexp.js new file mode 100644 index 0000000000..10758de485 --- /dev/null +++ b/test/staging/sm/RegExp/regress-yarr-regexp.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gcgcz = /((?:.)+)((?:.)*)/; /* Greedy capture, greedy capture zero. */ +assert.compareArray(["a", "a", ""], gcgcz.exec("a")); +assert.compareArray(["ab", "ab", ""], gcgcz.exec("ab")); +assert.compareArray(["abc", "abc", ""], gcgcz.exec("abc")); + +assert.compareArray(["a", ""], /((?:)*?)a/.exec("a")); +assert.compareArray(["a", ""], /((?:.)*?)a/.exec("a")); +assert.compareArray(["a", ""], /a((?:.)*)/.exec("a")); + +assert.compareArray(["B", "B"], /([A-Z])/.exec("fooBar")); + +// These just mustn't crash. See bug 872971 +try { assert.sameValue(/x{2147483648}x/.test('1'), false); } catch (e) {} +try { assert.sameValue(/x{2147483648,}x/.test('1'), false); } catch (e) {} +try { assert.sameValue(/x{2147483647,2147483648}x/.test('1'), false); } catch (e) {} +// Same for these. See bug 813366 +try { assert.sameValue("".match(/.{2147483647}11/), null); } catch (e) {} +try { assert.sameValue("".match(/(?:(?=g)).{2147483648,}/ + ""), null); } catch (e) {} diff --git a/test/staging/sm/RegExp/replace-compile-elembase.js b/test/staging/sm/RegExp/replace-compile-elembase.js new file mode 100644 index 0000000000..c889b4ed8d --- /dev/null +++ b/test/staging/sm/RegExp/replace-compile-elembase.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(function() { + var rx = /a/g; + var b = { + get a() { + rx.compile("b"); + return "A"; + } + }; + + // Replacer function which is applicable for the elem-base optimization in + // RegExp.prototype.@@replace. + function replacer(a) { + return b[a]; + } + + var result = rx[Symbol.replace]("aaa", replacer); + + assert.sameValue(result, "AAA"); +})(); + diff --git a/test/staging/sm/RegExp/replace-compile.js b/test/staging/sm/RegExp/replace-compile.js new file mode 100644 index 0000000000..561ca9016f --- /dev/null +++ b/test/staging/sm/RegExp/replace-compile.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1287524; +var summary = 'RegExp.prototype[@@replace] should call replacer function after collecting all matches.'; + +print(BUGNUMBER + ": " + summary); + +var rx = RegExp("a", "g"); +var r = rx[Symbol.replace]("abba", function() { + rx.compile("b", "g"); + return "?"; +}); +assert.sameValue(r, "?bb?"); + +rx = RegExp("a", "g"); +r = "abba".replace(rx, function() { + rx.compile("b", "g"); + return "?"; +}); +assert.sameValue(r, "?bb?"); + diff --git a/test/staging/sm/RegExp/replace-global-unicode.js b/test/staging/sm/RegExp/replace-global-unicode.js new file mode 100644 index 0000000000..267af322c7 --- /dev/null +++ b/test/staging/sm/RegExp/replace-global-unicode.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1287524; +var summary = 'RegExp.prototype[@@replace] should not use optimized path if RegExp.prototype.unicode is modified.'; + +print(BUGNUMBER + ": " + summary); + +Object.defineProperty(RegExp.prototype, "unicode", { + get() { + RegExp.prototype.exec = () => null; + } +}); + +var rx = RegExp("a", "g"); +var s = "abba"; +var r = rx[Symbol.replace](s, "c"); +assert.sameValue(r, "abba"); + diff --git a/test/staging/sm/RegExp/replace-local-tolength-lastindex.js b/test/staging/sm/RegExp/replace-local-tolength-lastindex.js new file mode 100644 index 0000000000..eb715a9086 --- /dev/null +++ b/test/staging/sm/RegExp/replace-local-tolength-lastindex.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// RegExp.prototype[@@replace] always executes ToLength(regExp.lastIndex) for +// non-global RegExps. + +for (var flag of ["", "g", "y", "gy"]) { + var regExp = new RegExp("a", flag); + + var called = false; + regExp.lastIndex = { + valueOf() { + assert.sameValue(called, false); + called = true; + return 0; + } + }; + + assert.sameValue(called, false); + regExp[Symbol.replace](""); + assert.sameValue(called, !flag.includes("g")); +} + diff --git a/test/staging/sm/RegExp/replace-local-tolength-recompilation.js b/test/staging/sm/RegExp/replace-local-tolength-recompilation.js new file mode 100644 index 0000000000..1d4e49b16e --- /dev/null +++ b/test/staging/sm/RegExp/replace-local-tolength-recompilation.js @@ -0,0 +1,84 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Side-effects when calling ToLength(regExp.lastIndex) in +// RegExp.prototype[@@replace] for non-global RegExp can recompile the RegExp. + +for (var flag of ["", "y"]) { + var regExp = new RegExp("a", flag); + + regExp.lastIndex = { + valueOf() { + regExp.compile("b"); + return 0; + } + }; + + var result = regExp[Symbol.replace]("b", "pass"); + assert.sameValue(result, "pass"); +} + +// Recompilation modifies flag: +// Case 1: Adds global flag, validate by checking lastIndex. +var regExp = new RegExp("a", ""); +regExp.lastIndex = { + valueOf() { + // |regExp| is now in global mode, RegExpBuiltinExec should update the + // lastIndex property to reflect last match. + regExp.compile("a", "g"); + return 0; + } +}; +regExp[Symbol.replace]("a", ""); +assert.sameValue(regExp.lastIndex, 1); + +// Case 2: Removes sticky flag with match, validate by checking lastIndex. +var regExp = new RegExp("a", "y"); +regExp.lastIndex = { + valueOf() { + // |regExp| is no longer sticky, RegExpBuiltinExec shouldn't modify the + // lastIndex property. + regExp.compile("a", ""); + regExp.lastIndex = 9000; + return 0; + } +}; +regExp[Symbol.replace]("a", ""); +assert.sameValue(regExp.lastIndex, 9000); + +// Case 3.a: Removes sticky flag without match, validate by checking lastIndex. +var regExp = new RegExp("a", "y"); +regExp.lastIndex = { + valueOf() { + // |regExp| is no longer sticky, RegExpBuiltinExec shouldn't modify the + // lastIndex property. + regExp.compile("b", ""); + regExp.lastIndex = 9001; + return 0; + } +}; +regExp[Symbol.replace]("a", ""); +assert.sameValue(regExp.lastIndex, 9001); + +// Case 3.b: Removes sticky flag without match, validate by checking lastIndex. +var regExp = new RegExp("a", "y"); +regExp.lastIndex = { + valueOf() { + // |regExp| is no longer sticky, RegExpBuiltinExec shouldn't modify the + // lastIndex property. + regExp.compile("b", ""); + regExp.lastIndex = 9002; + return 10000; + } +}; +regExp[Symbol.replace]("a", ""); +assert.sameValue(regExp.lastIndex, 9002); + diff --git a/test/staging/sm/RegExp/replace-sticky-lastIndex.js b/test/staging/sm/RegExp/replace-sticky-lastIndex.js new file mode 100644 index 0000000000..ce5359a9db --- /dev/null +++ b/test/staging/sm/RegExp/replace-sticky-lastIndex.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "String.prototype.replace should do nothing if lastIndex is invalid for sticky RegExp"; + +print(BUGNUMBER + ": " + summary); + +var re = /a/y; +re.lastIndex = -1; +assert.sameValue("a".replace(re, "b"), "b"); +re.lastIndex = 0; +assert.sameValue("a".replace(re, "b"), "b"); +re.lastIndex = 1; +assert.sameValue("a".replace(re, "b"), "a"); +re.lastIndex = 2; +assert.sameValue("a".replace(re, "b"), "a"); +re.lastIndex = "foo"; +assert.sameValue("a".replace(re, "b"), "b"); +re.lastIndex = "1"; +assert.sameValue("a".replace(re, "b"), "a"); +re.lastIndex = {}; +assert.sameValue("a".replace(re, "b"), "b"); + diff --git a/test/staging/sm/RegExp/replace-sticky.js b/test/staging/sm/RegExp/replace-sticky.js new file mode 100644 index 0000000000..950f1b0900 --- /dev/null +++ b/test/staging/sm/RegExp/replace-sticky.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "String.prototype.replace should use and update lastIndex if sticky flag is set"; + +print(BUGNUMBER + ": " + summary); + +var input = "abcdeabcdeabcdefghij"; +var re = new RegExp("abcde", "y"); +re.test(input); +assert.sameValue(re.lastIndex, 5); +var ret = input.replace(re, "ABCDE"); +assert.sameValue(ret, "abcdeABCDEabcdefghij"); +assert.sameValue(re.lastIndex, 10); +ret = input.replace(re, "ABCDE"); +assert.sameValue(ret, "abcdeabcdeABCDEfghij"); +assert.sameValue(re.lastIndex, 15); +ret = input.replace(re, "ABCDE"); +assert.sameValue(ret, "abcdeabcdeabcdefghij"); +assert.sameValue(re.lastIndex, 0); + diff --git a/test/staging/sm/RegExp/replace-this.js b/test/staging/sm/RegExp/replace-this.js new file mode 100644 index 0000000000..a90007609b --- /dev/null +++ b/test/staging/sm/RegExp/replace-this.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "RegExp.prototype[@@replace] should check |this| value."; + +print(BUGNUMBER + ": " + summary); + +for (var v of [null, 1, true, undefined, "", Symbol.iterator]) { + assertThrowsInstanceOf(() => RegExp.prototype[Symbol.replace].call(v), + TypeError); +} + diff --git a/test/staging/sm/RegExp/replace-trace.js b/test/staging/sm/RegExp/replace-trace.js new file mode 100644 index 0000000000..9f2b9351d4 --- /dev/null +++ b/test/staging/sm/RegExp/replace-trace.js @@ -0,0 +1,316 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Trace RegExp.prototype[@@replace] behavior."; + +print(BUGNUMBER + ": " + summary); + +var n; +var log; +var target; +var global; +var unicode; + +var execResult; +var lastIndexResult; +var lastIndexExpected; + +var arraySetterObserved = false; +function startObserve() { + for (var i = 0; i < 10; i++) { + Object.defineProperty(Array.prototype, i, { + set: function(v) { + arraySetterObserved = true; + }, + configurable: true, + }); + } +} +function stopObserve() { + for (var i = 0; i < 10; i++) + delete Array.prototype[i] +} + +startObserve(); + +function P(A, index, matched2) { + var i = 0; + A.index = index; + return new Proxy(A, { + get(that, name) { + log += "get:result[" + name + "],"; + + // Return a different value for 2nd access to result[0]. + if (matched2 !== undefined && name == 0) { + if (i == 1) { + return matched2; + } + i++; + } + + return that[name]; + } + }); +} + +var myRegExp = { + get flags() { + log += "get:flags,"; + var flags = ""; + if (global) flags += "g"; + if (unicode) flags += "u"; + return flags; + }, + get global() { + // This getter should not be invoked, because we override the flags getter. + log += "get:global," + }, + get unicode() { + // This getter should not be invoked, because we override the flags getter. + log += "get:unicode," + }, + get lastIndex() { + log += "get:lastIndex,"; + return lastIndexResult[n]; + }, + set lastIndex(v) { + log += "set:lastIndex,"; + assert.sameValue(v, lastIndexExpected[n]); + }, + get exec() { + log += "get:exec,"; + return function(S) { + log += "call:exec,"; + assert.sameValue(S, target); + return execResult[n++]; + }; + }, +}; + +function reset() { + n = 0; + log = ""; + target = "abcAbcABC"; + global = true; + unicode = false; + arraySetterObserved = false; +} + +// Trace global with non-empty match. +reset(); +execResult = [ P(["bc"], 1), null ]; +lastIndexResult = [ , , ]; +lastIndexExpected = [ 0, , ]; +var ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "a_XYZ_AbcABC"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index],get:result[groups],"); + +// Trace global with empty match. +reset(); +execResult = [ P([""], 1), null ]; +lastIndexResult = [ , 5, ]; +lastIndexExpected = [ 0, 6, ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "a_XYZ_bcAbcABC"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index],get:result[groups],"); + +// Trace global and unicode with empty match. +// 1. not surrogate pair +// 2. lead surrogate pair +// 3. trail surrogate pair +// 4. lead surrogate pair without trail surrogate pair +// 5. index overflow +reset(); +unicode = true; +// 0123 4 5678 +target = "---\uD83D\uDC38---\uD83D"; +execResult = [ P([""], 1), P([""], 2), P([""], 3), P([""], 4), P([""], 5), null ]; +lastIndexResult = [ , 2, 3, 4, 8, 9, ]; +lastIndexExpected = [ 0, 3, 5, 5, 9, 10, ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "-_XYZ_-_XYZ_-_XYZ_\uD83D_XYZ_\uDC38_XYZ_---\uD83D"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index],get:result[groups]," + + "get:result[length],get:result[0],get:result[index],get:result[groups]," + + "get:result[length],get:result[0],get:result[index],get:result[groups]," + + "get:result[length],get:result[0],get:result[index],get:result[groups]," + + "get:result[length],get:result[0],get:result[index],get:result[groups],"); + +// Trace global with captures and substitutions. +reset(); +execResult = [ P(["bc", "b", "c"], 1), null ]; +lastIndexResult = [ , , ]; +lastIndexExpected = [ 0, , ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "[$&,$`,$',$1,$2,$3,$]"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "a[bc,a,AbcABC,b,c,$3,$]AbcABC"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index]," + + "get:result[1],get:result[2],get:result[groups],"); + +// Trace global with empty match and captures and substitutions, +// with different matched. +reset(); +execResult = [ P(["", "b", "c"], 1, "BC"), null ]; +lastIndexResult = [ , 5, ]; +lastIndexExpected = [ 0, 6, ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "[$&,$`,$',$1,$2,$3,$]"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "a[BC,a,AbcABC,b,c,$3,$]AbcABC"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index]," + + "get:result[1],get:result[2],get:result[groups],"); + +// Trace global with empty match and captures and function, +// with different matched. +reset(); +execResult = [ P(["", "b", "c"], 1, "BC"), null ]; +lastIndexResult = [ , 5, ]; +lastIndexExpected = [ 0, 6, ]; +function replaceFunc(...args) { + log += "call:replaceFunc,"; + assert.sameValue(args.length, 5); + assert.sameValue(args[0], "BC"); + assert.sameValue(args[1], "b"); + assert.sameValue(args[2], "c"); + assert.sameValue(args[3], 1); + assert.sameValue(args[4], target); + return "_ret_"; +} +// This also tests RegExpStatics save/restore with no match. +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, replaceFunc); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "a_ret_AbcABC"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:lastIndex,set:lastIndex," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index]," + + "get:result[1],get:result[2],get:result[groups]," + + "call:replaceFunc,"); + +// Trace global with non-empty match, move backwards. +// 2nd match shouldn't be replaced. +reset(); +execResult = [ P(["X"], 5), P(["YZ"], 1), null ]; +lastIndexResult = [ , , , ]; +lastIndexExpected = [ 0, , , ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "abcAb_XYZ_ABC"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:exec,call:exec," + + "get:result[0]," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index],get:result[groups]," + + "get:result[length],get:result[0],get:result[index],get:result[groups],"); + +// Trace global with non-empty match, position + matchLength overflows. +reset(); +execResult = [ P(["fooooooo"], 7), null ]; +lastIndexResult = [ , , ]; +lastIndexExpected = [ 0, , ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "abcAbcA_XYZ_"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index],get:result[groups],"); + +// Trace global with non-empty match, position overflows. +reset(); +execResult = [ P(["fooooooo"], 12), null ]; +lastIndexResult = [ , , ]; +lastIndexExpected = [ 0, , ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "abcAbcABC_XYZ_"); +assert.sameValue(log, + "get:flags," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:result[0]," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index],get:result[groups],"); + +// Trace non-global. +reset(); +global = false; +execResult = [ P(["bc"], 1) ]; +lastIndexResult = [ , , ]; +lastIndexExpected = [ 0, , ]; +ret = RegExp.prototype[Symbol.replace].call(myRegExp, target, "_XYZ_"); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(ret, "a_XYZ_AbcABC"); +assert.sameValue(log, + "get:flags," + + "get:exec,call:exec," + + "get:result[length],get:result[0],get:result[index],get:result[groups],"); + +stopObserve(); + diff --git a/test/staging/sm/RegExp/replace-twoBytes.js b/test/staging/sm/RegExp/replace-twoBytes.js new file mode 100644 index 0000000000..b0163ba9be --- /dev/null +++ b/test/staging/sm/RegExp/replace-twoBytes.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1269719; +var summary = "RegExp.prototype[@@replace] should check latin1/twoBytes for all strings used in relate operation."; + +print(BUGNUMBER + ": " + summary); + +var ans = [ + "[AB$2$3$]", + "[AB$2$3$]\u3048", + "[AB$2$3$]", + "[AB$2$3$]\u3048", + "[A\u3044$2$3$]", + "[A\u3044$2$3$]\u3048", + "[A\u3044$2$3$]", + "[A\u3044$2$3$]\u3048", + "[\u3042B$2$3$]", + "[\u3042B$2$3$]\u3048", + "[\u3042B$2$3$]", + "[\u3042B$2$3$]\u3048", + "[\u3042\u3044$2$3$]", + "[\u3042\u3044$2$3$]\u3048", + "[\u3042\u3044$2$3$]", + "[\u3042\u3044$2$3$]\u3048", +]; +var i = 0; +for (var matched of ["A", "\u3042"]) { + for (var group1 of ["B", "\u3044"]) { + for (var string of ["C", "\u3046"]) { + for (var replacement of ["[$&$`$'$1$2$3$]", "[$&$`$'$1$2$3$]\u3048"]) { + var myRegExp = { + get exec() { + return function() { + return [matched, group1]; + }; + } + }; + assert.sameValue(RegExp.prototype[Symbol.replace].call(myRegExp, string, replacement), ans[i]); + i++; + } + } + } +} + diff --git a/test/staging/sm/RegExp/replace.js b/test/staging/sm/RegExp/replace.js new file mode 100644 index 0000000000..8956a9b237 --- /dev/null +++ b/test/staging/sm/RegExp/replace.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Implement RegExp.prototype[@@replace]."; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(RegExp.prototype[Symbol.replace].name, "[Symbol.replace]"); +assert.sameValue(RegExp.prototype[Symbol.replace].length, 2); +var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.replace); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, true); + +var re = /a/; +var v = re[Symbol.replace]("abcAbcABC", "X"); +assert.sameValue(v, "XbcAbcABC"); + +re = /d/; +v = re[Symbol.replace]("abcAbcABC", "X"); +assert.sameValue(v, "abcAbcABC"); + +re = /a/ig; +v = re[Symbol.replace]("abcAbcABC", "X"); +assert.sameValue(v, "XbcXbcXBC"); + +re = /(a)(b)(cd)/; +v = re[Symbol.replace]("012abcd345", "_$$_$&_$`_$'_$0_$1_$2_$3_$4_$+_$"); +assert.sameValue(v, "012_$_abcd_012_345_$0_a_b_cd_$4_$+_$345"); + +re = /(a)(b)(cd)/; +v = re[Symbol.replace]("012abcd345", "_\u3042_$$_$&_$`_$'_$0_$1_$2_$3_$4_$+_$"); +assert.sameValue(v, "012_\u3042_$_abcd_012_345_$0_a_b_cd_$4_$+_$345"); + diff --git a/test/staging/sm/RegExp/search-this.js b/test/staging/sm/RegExp/search-this.js new file mode 100644 index 0000000000..3e578800d2 --- /dev/null +++ b/test/staging/sm/RegExp/search-this.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "RegExp.prototype[@@search] should check this value."; + +print(BUGNUMBER + ": " + summary); + +for (var v of [null, 1, true, undefined, "", Symbol.iterator]) { + assertThrowsInstanceOf(() => RegExp.prototype[Symbol.search].call(v), + TypeError); +} + diff --git a/test/staging/sm/RegExp/search-trace.js b/test/staging/sm/RegExp/search-trace.js new file mode 100644 index 0000000000..7d1b8b78cb --- /dev/null +++ b/test/staging/sm/RegExp/search-trace.js @@ -0,0 +1,87 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Trace RegExp.prototype[@@search] behavior."; + +print(BUGNUMBER + ": " + summary); + +var n; +var log; +var target; + +var execResult; +var lastIndexResult; +var lastIndexExpected; + +function P(index) { + return new Proxy({ index }, { + get(that, name) { + log += "get:result[" + name + "],"; + return that[name]; + } + }); +} + +var myRegExp = { + get lastIndex() { + log += "get:lastIndex,"; + return lastIndexResult[n]; + }, + set lastIndex(v) { + log += "set:lastIndex,"; + assert.sameValue(v, lastIndexExpected[n]); + }, + get exec() { + log += "get:exec,"; + return function(S) { + log += "call:exec,"; + assert.sameValue(S, target); + return execResult[n++]; + }; + }, +}; + +function reset() { + n = 0; + log = ""; + target = "abcAbcABC"; +} + +// Trace hit. +reset(); +execResult = [ P(16) ]; +lastIndexResult = [ 10, , ]; +lastIndexExpected = [ 0, 10 ]; +var ret = RegExp.prototype[Symbol.search].call(myRegExp, target); +assert.sameValue(ret, 16); +assert.sameValue(log, + "get:lastIndex," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:lastIndex," + + "set:lastIndex," + + "get:result[index],"); + +// Trace not hit. +reset(); +execResult = [ null ]; +lastIndexResult = [ 10, , ]; +lastIndexExpected = [ 0, 10 ]; +ret = RegExp.prototype[Symbol.search].call(myRegExp, target); +assert.sameValue(ret, -1); +assert.sameValue(log, + "get:lastIndex," + + "set:lastIndex," + + "get:exec,call:exec," + + "get:lastIndex," + + "set:lastIndex,"); + diff --git a/test/staging/sm/RegExp/search.js b/test/staging/sm/RegExp/search.js new file mode 100644 index 0000000000..07a5c7a593 --- /dev/null +++ b/test/staging/sm/RegExp/search.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Implement RegExp.prototype[@@search]."; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(RegExp.prototype[Symbol.search].name, "[Symbol.search]"); +assert.sameValue(RegExp.prototype[Symbol.search].length, 1); +var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.search); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, true); + +var re = /B/; +var v = re[Symbol.search]("abcAbcABC"); +assert.sameValue(v, 7); + +re = /B/i; +v = re[Symbol.search]("abcAbcABCD"); +assert.sameValue(v, 1); + +re = /d/; +v = re[Symbol.search]("abcAbcABCD"); +assert.sameValue(v, -1); + diff --git a/test/staging/sm/RegExp/source.js b/test/staging/sm/RegExp/source.js new file mode 100644 index 0000000000..209e6097da --- /dev/null +++ b/test/staging/sm/RegExp/source.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1120169; +var summary = "Implement RegExp.prototype.source"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(RegExp.prototype.source, "(?:)"); +assert.sameValue(/foo/.source, "foo"); +assert.sameValue(/foo/iymg.source, "foo"); +assert.sameValue(/\//.source, "\\/"); +assert.sameValue(/\n\r/.source, "\\n\\r"); +assert.sameValue(/\u2028\u2029/.source, "\\u2028\\u2029"); +assert.sameValue(RegExp("").source, "(?:)"); +assert.sameValue(RegExp("", "mygi").source, "(?:)"); +assert.sameValue(RegExp("/").source, "\\/"); +assert.sameValue(RegExp("\n\r").source, "\\n\\r"); +assert.sameValue(RegExp("\u2028\u2029").source, "\\u2028\\u2029"); + +assertThrowsInstanceOf(() => genericSource(), TypeError); +assertThrowsInstanceOf(() => genericSource(1), TypeError); +assertThrowsInstanceOf(() => genericSource(""), TypeError); +assertThrowsInstanceOf(() => genericSource({}), TypeError); +assertThrowsInstanceOf(() => genericSource(new Proxy(/foo/, {get(){ return true; }})), TypeError); + +function genericSource(obj) { + return Object.getOwnPropertyDescriptor(RegExp.prototype, "source").get.call(obj); +} + diff --git a/test/staging/sm/RegExp/split-deleted-flags.js b/test/staging/sm/RegExp/split-deleted-flags.js new file mode 100644 index 0000000000..07bce6de51 --- /dev/null +++ b/test/staging/sm/RegExp/split-deleted-flags.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1322319; +var summary = "RegExp.prototype.split should throw if RegRxp.prototype.flags is deleted." + +print(BUGNUMBER + ": " + summary); + +delete RegExp.prototype.flags; + +assertThrowsInstanceOf(() => "aaaaa".split(/a/), SyntaxError); + diff --git a/test/staging/sm/RegExp/split-flags-on-obj.js b/test/staging/sm/RegExp/split-flags-on-obj.js new file mode 100644 index 0000000000..9180ab65aa --- /dev/null +++ b/test/staging/sm/RegExp/split-flags-on-obj.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 0; +var summary = "RegExp.prototype.split should reflect the change to Object.prototype.flags."; + +print(BUGNUMBER + ": " + summary); + +Object.defineProperty(Object.prototype, "flags", Object.getOwnPropertyDescriptor(RegExp.prototype, "flags")); +delete RegExp.prototype.flags; + +let re = /a/i; +let a = re[Symbol.split]("1a2A3a4A5"); +assert.deepEqual(a, ["1", "2", "3", "4", "5"]); + +delete Object.prototype.flags; + +Object.prototype.flags = ""; + +a = re[Symbol.split]("1a2A3a4A5"); +assert.deepEqual(a, ["1", "2A3", "4A5"]); + diff --git a/test/staging/sm/RegExp/split-invalid-lastIndex.js b/test/staging/sm/RegExp/split-invalid-lastIndex.js new file mode 100644 index 0000000000..6403bc49ba --- /dev/null +++ b/test/staging/sm/RegExp/split-invalid-lastIndex.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1263851; +var summary = "RegExp.prototype[@@split] should handle if lastIndex is out of bound."; + +print(BUGNUMBER + ": " + summary); + +var myRegExp = { + get constructor() { + return { + get [Symbol.species]() { + return function() { + return { + get lastIndex() { + return 9; + }, + set lastIndex(v) {}, + exec() { + return []; + } + }; + }; + } + }; + } +}; +var result = RegExp.prototype[Symbol.split].call(myRegExp, "abcde");; +assert.sameValue(result.length, 2); +assert.sameValue(result[0], ""); +assert.sameValue(result[1], ""); + diff --git a/test/staging/sm/RegExp/split-limit.js b/test/staging/sm/RegExp/split-limit.js new file mode 100644 index 0000000000..bfcce73bff --- /dev/null +++ b/test/staging/sm/RegExp/split-limit.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1287525; +var summary = "RegExp.prototype[@@split] shouldn't use optimized path if limit is not number."; + +print(BUGNUMBER + ": " + summary); + +var rx = /a/; +var r = rx[Symbol.split]("abba", {valueOf() { + RegExp.prototype.exec = () => null; + return 100; +}}); +assert.sameValue(r.length, 1); + diff --git a/test/staging/sm/RegExp/split-obj.js b/test/staging/sm/RegExp/split-obj.js new file mode 100644 index 0000000000..9d6afa4cda --- /dev/null +++ b/test/staging/sm/RegExp/split-obj.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "RegExp.prototype[@@split] should check if this value is RegExp."; + +print(BUGNUMBER + ": " + summary); + +var obj = { flags: "", toString: () => "-" }; +assert.deepEqual(RegExp.prototype[Symbol.split].call(obj, "a-b-c"), + ["a", "b", "c"]); + diff --git a/test/staging/sm/RegExp/split-prop-access.js b/test/staging/sm/RegExp/split-prop-access.js new file mode 100644 index 0000000000..46617f5687 --- /dev/null +++ b/test/staging/sm/RegExp/split-prop-access.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1287525; +var summary = 'String.prototype.split should call ToUint32(limit) before ToString(separator).'; + +print(BUGNUMBER + ": " + summary); + +var accessed = false; + +var rx = /a/; +Object.defineProperty(rx, Symbol.match, { + get() { + accessed = true; + } +}); +rx[Symbol.split]("abba"); + +assert.sameValue(accessed, true); + diff --git a/test/staging/sm/RegExp/split-this.js b/test/staging/sm/RegExp/split-this.js new file mode 100644 index 0000000000..7e151b5538 --- /dev/null +++ b/test/staging/sm/RegExp/split-this.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "RegExp.prototype[@@split] should check this value."; + +print(BUGNUMBER + ": " + summary); + +for (var v of [null, 1, true, undefined, "", Symbol.iterator]) { + assertThrowsInstanceOf(() => RegExp.prototype[Symbol.split].call(v), + TypeError); +} + diff --git a/test/staging/sm/RegExp/split-trace.js b/test/staging/sm/RegExp/split-trace.js new file mode 100644 index 0000000000..47a4921481 --- /dev/null +++ b/test/staging/sm/RegExp/split-trace.js @@ -0,0 +1,238 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Trace RegExp.prototype[@@split] behavior."; + +print(BUGNUMBER + ": " + summary); + +var n; +var log; +var target; +var flags; +var expectedFlags; + +var execResult; +var lastIndexResult; +var lastIndexExpected; + +var arraySetterObserved = false; +function startObserve() { + for (var i = 0; i < 10; i++) { + Object.defineProperty(Array.prototype, i, { + set: function(v) { + arraySetterObserved = true; + }, + configurable: true, + }); + } +} +function stopObserve() { + for (var i = 0; i < 10; i++) + delete Array.prototype[i] +} + +startObserve(); + +function P(A) { + return new Proxy(A, { + get(that, name) { + log += "get:result[" + name + "],"; + return that[name]; + } + }); +} + +var myRegExp = { + get constructor() { + log += "get:constructor,"; + return { + get [Symbol.species]() { + log += "get:species,"; + return function(pattern, flags) { + assert.sameValue(pattern, myRegExp); + assert.sameValue(flags, expectedFlags); + log += "call:constructor,"; + return { + get lastIndex() { + log += "get:lastIndex,"; + return lastIndexResult[n]; + }, + set lastIndex(v) { + log += "set:lastIndex,"; + assert.sameValue(v, lastIndexExpected[n]); + }, + get flags() { + log += "get:flags,"; + return flags; + }, + get exec() { + log += "get:exec,"; + return function(S) { + log += "call:exec,"; + assert.sameValue(S, target); + return execResult[n++]; + }; + }, + }; + }; + } + }; + }, + get flags() { + log += "get:flags,"; + return flags; + }, +}; + +function reset() { + n = 0; + log = ""; + target = "abcde"; + flags = ""; + expectedFlags = "y"; + arraySetterObserved = false; +} + +// Trace match and no match. +reset(); +execResult = [ null, P(["b"]), null, P(["d"]), null ]; +lastIndexResult = [ , , 2, , 4, , ]; +lastIndexExpected = [ 0, 1, 2, 3, 4, ]; +var ret = RegExp.prototype[Symbol.split].call(myRegExp, target); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(JSON.stringify(ret), `["a","c","e"]`); +assert.sameValue(log, + "get:constructor," + + "get:species," + + "get:flags," + + "call:constructor," + + "set:lastIndex,get:exec,call:exec," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "get:result[length]," + + "set:lastIndex,get:exec,call:exec," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "get:result[length]," + + "set:lastIndex,get:exec,call:exec,"); + +// Trace non-empty flags, empty target, no match. +reset(); +flags = "iy"; +expectedFlags = "iy"; +target = ""; +execResult = [ null ]; +lastIndexResult = []; +lastIndexExpected = []; +ret = RegExp.prototype[Symbol.split].call(myRegExp, target); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(JSON.stringify(ret), `[""]`); +assert.sameValue(log, + "get:constructor," + + "get:species," + + "get:flags," + + "call:constructor," + + "get:exec,call:exec,"); + +// Trace empty target, match. +reset(); +target = ""; +execResult = [ P([""]) ]; +lastIndexResult = []; +lastIndexExpected = []; +ret = RegExp.prototype[Symbol.split].call(myRegExp, target); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(JSON.stringify(ret), `[]`); +assert.sameValue(log, + "get:constructor," + + "get:species," + + "get:flags," + + "call:constructor," + + "get:exec,call:exec,"); + +// Trace captures. +reset(); +target = "abc"; +execResult = [ null, P(["b", "X", "YZ"]), null ]; +lastIndexResult = [ , , 2, , ]; +lastIndexExpected = [ 0, 1, 2, ]; +ret = RegExp.prototype[Symbol.split].call(myRegExp, target); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(JSON.stringify(ret), `["a","X","YZ","c"]`); +assert.sameValue(log, + "get:constructor," + + "get:species," + + "get:flags," + + "call:constructor," + + "set:lastIndex,get:exec,call:exec," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "get:result[length]," + + "get:result[1],get:result[2]," + + "set:lastIndex,get:exec,call:exec,"); + +// Trace unicode. +// 1. not surrogate pair +// 2. lead surrogate pair +// 3. trail surrogate pair +// 4. lead surrogate pair without trail surrogate pair +// 5. index overflow +reset(); +flags = "u"; +expectedFlags = "uy"; +target = "-\uD83D\uDC38\uDC38\uD83D"; +execResult = [ null, null, null, null ]; +lastIndexResult = [ , , , , , ]; +lastIndexExpected = [ 0, 1, 3, 4, ]; +ret = RegExp.prototype[Symbol.split].call(myRegExp, target); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(JSON.stringify(ret), `["-\uD83D\uDC38\\udc38\\ud83d"]`); +assert.sameValue(log, + "get:constructor," + + "get:species," + + "get:flags," + + "call:constructor," + + "set:lastIndex,get:exec,call:exec," + + "set:lastIndex,get:exec,call:exec," + + "set:lastIndex,get:exec,call:exec," + + "set:lastIndex,get:exec,call:exec,"); + +// Trace unicode, match, same position and different position. +reset(); +flags = "u"; +expectedFlags = "uy"; +target = "-\uD83D\uDC38\uDC38\uD83D"; +var E = P(["", "X"]); +execResult = [ E, E, E, E, E, E, E ]; +lastIndexResult = [ , 0, 1, 1, 3, 3, 4, 4 ]; +lastIndexExpected = [ 0, 1, 1, 3, 3, 4, 4, ]; +ret = RegExp.prototype[Symbol.split].call(myRegExp, target); +assert.sameValue(arraySetterObserved, false); +assert.sameValue(JSON.stringify(ret), `["-","X","\uD83D\uDC38","X","\\udc38","X","\\ud83d"]`); +assert.sameValue(log, + "get:constructor," + + "get:species," + + "get:flags," + + "call:constructor," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "get:result[length]," + + "get:result[1]," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "get:result[length]," + + "get:result[1]," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "set:lastIndex,get:exec,call:exec,get:lastIndex," + + "get:result[length]," + + "get:result[1]," + + "set:lastIndex,get:exec,call:exec,get:lastIndex,"); + +stopObserve(); + diff --git a/test/staging/sm/RegExp/split.js b/test/staging/sm/RegExp/split.js new file mode 100644 index 0000000000..f83d5b6e70 --- /dev/null +++ b/test/staging/sm/RegExp/split.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Implement RegExp.prototype[@@split]."; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(RegExp.prototype[Symbol.split].name, "[Symbol.split]"); +assert.sameValue(RegExp.prototype[Symbol.split].length, 2); +var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, Symbol.split); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, true); + +var re = /b/; +var v = re[Symbol.split]("abcAbcABC"); +assert.sameValue(JSON.stringify(v), `["a","cA","cABC"]`); + +re = /d/; +v = re[Symbol.split]("abcAbcABC"); +assert.sameValue(JSON.stringify(v), `["abcAbcABC"]`); + +re = /b/ig; +v = re[Symbol.split]("abcAbcABC"); +assert.sameValue(JSON.stringify(v), `["a","cA","cA","C"]`); + +re = /b/ig; +v = re[Symbol.split]("abcAbcABC", 2); +assert.sameValue(JSON.stringify(v), `["a","cA"]`); + diff --git a/test/staging/sm/RegExp/sticky.js b/test/staging/sm/RegExp/sticky.js new file mode 100644 index 0000000000..8e7ce5bc80 --- /dev/null +++ b/test/staging/sm/RegExp/sticky.js @@ -0,0 +1,135 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 773687; +var summary = 'sticky flag should not break assertion behavior.'; + +print(BUGNUMBER + ": " + summary); + +function test(re, text, expectations) { + // Sanity check for test data itself. + assert.sameValue(expectations.length, text.length + 1); + + for (var i = 0; i < expectations.length; i++) { + var result = expectations[i]; + + re.lastIndex = i; + var match = re.exec(text); + if (result === null) { + assert.sameValue(re.lastIndex, 0); + assert.sameValue(match, null); + } else { + assert.sameValue(re.lastIndex, result.lastIndex); + assert.sameValue(match !== null, true); + assert.sameValue(match.length, result.matches.length); + for (var j = 0; j < result.matches.length; j++) + assert.sameValue(match[j], result.matches[j]); + assert.sameValue(match.index, result.index); + } + } +} + +// simple text +test(/bc/y, "abcabd", [ + null, + { lastIndex: 3, matches: ["bc"], index: 1 }, + null, + null, + null, + null, + null, +]); + +// complex pattern +test(/bc|c|d/y, "abcabd", [ + null, + { lastIndex: 3, matches: ["bc"], index: 1 }, + { lastIndex: 3, matches: ["c"], index: 2 }, + null, + null, + { lastIndex: 6, matches: ["d"], index: 5 }, + null, +]); + +test(/.*(bc|c|d)/y, "abcabd", [ + { lastIndex: 6, matches: ["abcabd", "d"], index: 0 }, + { lastIndex: 6, matches: ["bcabd", "d"], index: 1 }, + { lastIndex: 6, matches: ["cabd", "d"], index: 2 }, + { lastIndex: 6, matches: ["abd", "d"], index: 3 }, + { lastIndex: 6, matches: ["bd", "d"], index: 4 }, + { lastIndex: 6, matches: ["d", "d"], index: 5 }, + null, +]); + +test(/.*?(bc|c|d)/y, "abcabd", [ + { lastIndex: 3, matches: ["abc", "bc"], index: 0 }, + { lastIndex: 3, matches: ["bc", "bc"], index: 1 }, + { lastIndex: 3, matches: ["c", "c"], index: 2 }, + { lastIndex: 6, matches: ["abd", "d"], index: 3 }, + { lastIndex: 6, matches: ["bd", "d"], index: 4 }, + { lastIndex: 6, matches: ["d", "d"], index: 5 }, + null, +]); + +test(/(bc|.*c|d)/y, "abcabd", [ + { lastIndex: 3, matches: ["abc", "abc"], index: 0 }, + { lastIndex: 3, matches: ["bc", "bc"], index: 1 }, + { lastIndex: 3, matches: ["c", "c"], index: 2 }, + null, + null, + { lastIndex: 6, matches: ["d", "d"], index: 5 }, + null, +]); + +// ^ assertions +test(/^/y, "abcabc", [ + { lastIndex: 0, matches: [""], index: 0 }, + null, + null, + null, + null, + null, + null, +]); + +test(/^a/my, "abc\nabc", [ + { lastIndex: 1, matches: ["a"], index: 0 }, + null, + null, + null, + { lastIndex: 5, matches: ["a"], index: 4 }, + null, + null, + null, +]); + +// \b assertions +test(/\b/y, "abc bc", [ + { lastIndex: 0, matches: [""], index: 0 }, + null, + null, + { lastIndex: 3, matches: [""], index: 3 }, + { lastIndex: 4, matches: [""], index: 4 }, + null, + { lastIndex: 6, matches: [""], index: 6 }, +]); + +// \B assertions +test(/\B/y, "abc bc", [ + null, + { lastIndex: 1, matches: [""], index: 1 }, + { lastIndex: 2, matches: [""], index: 2 }, + null, + null, + { lastIndex: 5, matches: [""], index: 5 }, + null, +]); + diff --git a/test/staging/sm/RegExp/test-emptyMatch.js b/test/staging/sm/RegExp/test-emptyMatch.js new file mode 100644 index 0000000000..f1051e5aff --- /dev/null +++ b/test/staging/sm/RegExp/test-emptyMatch.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1322035; +var summary = 'RegExp.prototype.test should update lastIndex to correct position even if pattern starts with .*'; + +print(BUGNUMBER + ": " + summary); + +var regExp = /.*x?/g; +regExp.test('12345'); +assert.sameValue(regExp.lastIndex, 5); + +regExp = /.*x*/g; +regExp.test('12345'); +assert.sameValue(regExp.lastIndex, 5); + +regExp = /.*()/g; +regExp.test('12345'); +assert.sameValue(regExp.lastIndex, 5); + +regExp = /.*(x|)/g; +regExp.test('12345'); +assert.sameValue(regExp.lastIndex, 5); + diff --git a/test/staging/sm/RegExp/test-trailing.js b/test/staging/sm/RegExp/test-trailing.js new file mode 100644 index 0000000000..52949891f8 --- /dev/null +++ b/test/staging/sm/RegExp/test-trailing.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1304737; +var summary = "Trailing .* should not be ignored on matchOnly match."; + +print(BUGNUMBER + ": " + summary); + +function test(r, lastIndexIsZero) { + r.lastIndex = 0; + r.test("foo"); + assert.sameValue(r.lastIndex, lastIndexIsZero ? 0 : 3); + + r.lastIndex = 0; + r.test("foo\nbar"); + assert.sameValue(r.lastIndex, lastIndexIsZero ? 0 : 3); + + var input = "foo" + ".bar".repeat(20000); + r.lastIndex = 0; + r.test(input); + assert.sameValue(r.lastIndex, lastIndexIsZero ? 0 : input.length); + + r.lastIndex = 0; + r.test(input + "\nbaz"); + assert.sameValue(r.lastIndex, lastIndexIsZero ? 0 : input.length); +} + +test(/f.*/, true); +test(/f.*/g, false); +test(/f.*/y, false); +test(/f.*/gy, false); + diff --git a/test/staging/sm/RegExp/toString.js b/test/staging/sm/RegExp/toString.js new file mode 100644 index 0000000000..2f81bf6917 --- /dev/null +++ b/test/staging/sm/RegExp/toString.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1079919; +var summary = "Make RegExp.prototype.toString to be a generic function."; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(RegExp.prototype.toString(), "/(?:)/"); +assert.sameValue(/foo/.toString(), "/foo/"); +assert.sameValue(/foo/i.toString(), "/foo/i"); +assert.sameValue(/foo/gimy.toString(), "/foo/gimy"); +assert.sameValue(/foo/igym.toString(), "/foo/gimy"); +assert.sameValue(/\n\r/.toString(), "/\\n\\r/"); +assert.sameValue(/\u2028\u2029/.toString(), "/\\u2028\\u2029/"); +assert.sameValue(/\//.toString(), "/\\//"); +assert.sameValue(RegExp().toString(), "/(?:)/"); +assert.sameValue(RegExp("", "gimy").toString(), "/(?:)/gimy"); +assert.sameValue(RegExp("\n\r").toString(), "/\\n\\r/"); +assert.sameValue(RegExp("\u2028\u2029").toString(), "/\\u2028\\u2029/"); +assert.sameValue(RegExp("/").toString(), "/\\//"); + +assertThrowsInstanceOf(() => RegExp.prototype.toString.call(), TypeError); +assertThrowsInstanceOf(() => RegExp.prototype.toString.call(1), TypeError); +assertThrowsInstanceOf(() => RegExp.prototype.toString.call(""), TypeError); +assert.sameValue(RegExp.prototype.toString.call({}), "/undefined/undefined"); +assert.sameValue(RegExp.prototype.toString.call({ source:"foo", flags:"bar" }), "/foo/bar"); + +var a = []; +var p = new Proxy({}, { + get(that, name) { + a.push(name); + return { + toString() { + a.push(name + "-tostring"); + return name; + } + }; + } +}); +assert.sameValue(RegExp.prototype.toString.call(p), "/source/flags"); +assert.sameValue(a.join(","), "source,source-tostring,flags,flags-tostring"); + diff --git a/test/staging/sm/RegExp/unicode-back-reference.js b/test/staging/sm/RegExp/unicode-back-reference.js new file mode 100644 index 0000000000..f5dd4ff3ed --- /dev/null +++ b/test/staging/sm/RegExp/unicode-back-reference.js @@ -0,0 +1,48 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- back reference should not match lead surrogate that has corresponding trail surrogate."; + +print(BUGNUMBER + ": " + summary); + +// The last character of back reference is not a surrogate. +assert.compareArray(/foo(.+)bar\1/u.exec("fooAbarA\uDC00"), + ["fooAbarA", "A"]); +assert.compareArray(/foo(.+)bar\1/u.exec("fooAbarA\uD834"), + ["fooAbarA", "A"]); +assert.compareArray(/foo(.+)bar\1/u.exec("fooAbarAA"), + ["fooAbarA", "A"]); +assert.compareArray(/foo(.+)bar\1/u.exec("fooAbarA"), + ["fooAbarA", "A"]); + +// The last character of back reference is a lead surrogate. +assert.sameValue(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834\uDC00"), null); +assert.compareArray(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834\uD834"), + ["foo\uD834bar\uD834", "\uD834"]); +assert.compareArray(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834A"), + ["foo\uD834bar\uD834", "\uD834"]); +assert.compareArray(/foo(.+)bar\1/u.exec("foo\uD834bar\uD834"), + ["foo\uD834bar\uD834", "\uD834"]); + +// The last character of back reference is a trail surrogate. +assert.compareArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00\uDC00"), + ["foo\uDC00bar\uDC00", "\uDC00"]); +assert.compareArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00\uD834"), + ["foo\uDC00bar\uDC00", "\uDC00"]); +assert.compareArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00A"), + ["foo\uDC00bar\uDC00", "\uDC00"]); +assert.compareArray(/foo(.+)bar\1/u.exec("foo\uDC00bar\uDC00"), + ["foo\uDC00bar\uDC00", "\uDC00"]); + +// Pattern should not match to surrogate pair partially. +assert.sameValue(/^(.+)\1$/u.exec("\uDC00foobar\uD834\uDC00foobar\uD834"), null); + diff --git a/test/staging/sm/RegExp/unicode-braced.js b/test/staging/sm/RegExp/unicode-braced.js new file mode 100644 index 0000000000..d57a5cdcbe --- /dev/null +++ b/test/staging/sm/RegExp/unicode-braced.js @@ -0,0 +1,175 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- braced pattern in RegExpUnicodeEscapeSequence."; + +print(BUGNUMBER + ": " + summary); + +// ==== standalone ==== + +assert.compareArray(/\u{41}/u.exec("ABC"), + ["A"]); +assert.compareArray(/\u{41}/.exec("ABC" + "u".repeat(41)), + ["u".repeat(41)]); + +assert.compareArray(/\u{4A}/u.exec("JKL"), + ["J"]); +assert.compareArray(/\u{4A}/.exec("JKLu{4A}"), + ["u{4A}"]); + +assert.compareArray(/\u{1F438}/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\u{1F438}/.exec("u{1F438}"), + ["u{1F438}"]); + +assert.compareArray(/\u{0}/u.exec("\u{0}"), + ["\u{0}"]); +assert.compareArray(/\u{10FFFF}/u.exec("\u{10FFFF}"), + ["\u{10FFFF}"]); +assert.compareArray(/\u{10ffff}/u.exec("\u{10FFFF}"), + ["\u{10FFFF}"]); + +// leading 0 +assert.compareArray(/\u{0000000000000000000000}/u.exec("\u{0}"), + ["\u{0}"]); +assert.compareArray(/\u{000000000000000010FFFF}/u.exec("\u{10FFFF}"), + ["\u{10FFFF}"]); + +// RegExp constructor +assert.compareArray(new RegExp("\\u{0}", "u").exec("\u{0}"), + ["\u{0}"]); +assert.compareArray(new RegExp("\\u{41}", "u").exec("ABC"), + ["A"]); +assert.compareArray(new RegExp("\\u{1F438}", "u").exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(new RegExp("\\u{10FFFF}", "u").exec("\u{10FFFF}"), + ["\u{10FFFF}"]); + +assert.compareArray(new RegExp("\\u{0000000000000000}", "u").exec("\u{0}"), + ["\u{0}"]); + +assert.compareArray(eval(`/\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}/u`).exec("\u{1234}"), + ["\u{1234}"]); +assert.compareArray(new RegExp(`\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}`, "u").exec("\u{1234}"), + ["\u{1234}"]); + +// ==== ? ==== + +assert.compareArray(/\u{1F438}?/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\u{1F438}?/u.exec(""), + [""]); + +// lead-only target +assert.compareArray(/\u{1F438}?/u.exec("\uD83D"), + [""]); + +// RegExp constructor +assert.compareArray(new RegExp("\\u{1F438}?", "u").exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(new RegExp("\\u{1F438}?", "u").exec(""), + [""]); +assert.compareArray(new RegExp("\\u{1F438}?", "u").exec("\uD83D"), + [""]); + +// ==== + ==== + +assert.compareArray(/\u{1F438}+/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\u{1F438}+/u.exec("\u{1F438}\u{1F438}"), + ["\u{1F438}\u{1F438}"]); +assert.sameValue(/\u{1F438}+/u.exec(""), + null); + +// lead-only target +assert.sameValue(/\u{1F438}+/u.exec("\uD83D"), + null); +assert.compareArray(/\u{1F438}+/u.exec("\uD83D\uDC38\uDC38"), + ["\uD83D\uDC38"]); + +// ==== * ==== + +assert.compareArray(/\u{1F438}*/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\u{1F438}*/u.exec("\u{1F438}\u{1F438}"), + ["\u{1F438}\u{1F438}"]); +assert.compareArray(/\u{1F438}*/u.exec(""), + [""]); + +// lead-only target +assert.compareArray(/\u{1F438}*/u.exec("\uD83D"), + [""]); +assert.compareArray(/\u{1F438}*/u.exec("\uD83D\uDC38\uDC38"), + ["\uD83D\uDC38"]); + +// ==== lead-only ==== + +// match only non-surrogate pair +assert.compareArray(/\u{D83D}/u.exec("\uD83D\uDBFF"), + ["\uD83D"]); +assert.sameValue(/\u{D83D}/u.exec("\uD83D\uDC00"), + null); +assert.sameValue(/\u{D83D}/u.exec("\uD83D\uDFFF"), + null); +assert.compareArray(/\u{D83D}/u.exec("\uD83D\uE000"), + ["\uD83D"]); + +// match before non-tail char +assert.compareArray(/\u{D83D}/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/\u{D83D}/u.exec("\uD83DA"), + ["\uD83D"]); + +// ==== trail-only ==== + +// match only non-surrogate pair +assert.compareArray(/\u{DC38}/u.exec("\uD7FF\uDC38"), + ["\uDC38"]); +assert.sameValue(/\u{DC38}/u.exec("\uD800\uDC38"), + null); +assert.sameValue(/\u{DC38}/u.exec("\uDBFF\uDC38"), + null); +assert.compareArray(/\u{DC38}/u.exec("\uDC00\uDC38"), + ["\uDC38"]); + +// match after non-lead char +assert.compareArray(/\u{DC38}/u.exec("\uDC38"), + ["\uDC38"]); +assert.compareArray(/\u{DC38}/u.exec("A\uDC38"), + ["\uDC38"]); + +// ==== wrong patterns ==== + +assertThrowsInstanceOf(() => eval(`/\\u{-1}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{0.0}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{G}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{{/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{110000}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{00110000}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{100000000000000000000000000000}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{ FFFF}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{FFFF }/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{FF FF}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{F F F F}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u{100000001}/u`), SyntaxError); + +// surrogate pair with braced +assert.sameValue(/\u{D83D}\u{DC38}+/u.exec("\uD83D\uDC38\uDC38"), + null); +assert.sameValue(/\uD83D\u{DC38}+/u.exec("\uD83D\uDC38\uDC38"), + null); +assert.sameValue(/\u{D83D}\uDC38+/u.exec("\uD83D\uDC38\uDC38"), + null); + diff --git a/test/staging/sm/RegExp/unicode-character-class-escape.js b/test/staging/sm/RegExp/unicode-character-class-escape.js new file mode 100644 index 0000000000..a16e97ddec --- /dev/null +++ b/test/staging/sm/RegExp/unicode-character-class-escape.js @@ -0,0 +1,84 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- CharacterClassEscape."; + +print(BUGNUMBER + ": " + summary); + +// BMP + +assert.compareArray(/\d+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["0123456789"]); +assert.compareArray(/\D+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["abcxyzABCXYZ"]); + +assert.compareArray(/\s+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["\t\r\n\v\x0c\xa0\uFEFF"]); +assert.compareArray(/\S+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["abcxyzABCXYZ0123456789_"]); + +assert.compareArray(/\w+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["abcxyzABCXYZ0123456789_"]); +assert.compareArray(/\W+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["\t\r\n\v\x0c\xa0\uFEFF*"]); + +assert.compareArray(/\n+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["\n"]); + +assert.compareArray(/[\d]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["0123456789"]); +assert.compareArray(/[\D]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["abcxyzABCXYZ"]); + +assert.compareArray(/[\s]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["\t\r\n\v\x0c\xa0\uFEFF"]); +assert.compareArray(/[\S]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["abcxyzABCXYZ0123456789_"]); + +assert.compareArray(/[\w]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["abcxyzABCXYZ0123456789_"]); +assert.compareArray(/[\W]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["\t\r\n\v\x0c\xa0\uFEFF*"]); + +assert.compareArray(/[\n]+/u.exec("abcxyzABCXYZ0123456789_\t\r\n\v\x0c\xa0\uFEFF*"), + ["\n"]); + +// non-BMP + +function testNonBMP(re) { + assert.compareArray(re.exec("\uD83D\uDBFF"), + ["\uD83D"]); + assert.compareArray(re.exec("\uD83D\uDC00"), + ["\uD83D\uDC00"]); + assert.compareArray(re.exec("\uD83D\uDFFF"), + ["\uD83D\uDFFF"]); + assert.compareArray(re.exec("\uD83D\uE000"), + ["\uD83D"]); + + assert.compareArray(re.exec("\uD7FF\uDC38"), + ["\uD7FF"]); + assert.compareArray(re.exec("\uD800\uDC38"), + ["\uD800\uDC38"]); + assert.compareArray(re.exec("\uDBFF\uDC38"), + ["\uDBFF\uDC38"]); + assert.compareArray(re.exec("\uDC00\uDC38"), + ["\uDC00"]); +} + +testNonBMP(/\D/u); +testNonBMP(/\S/u); +testNonBMP(/\W/u); + +testNonBMP(/[\D]/u); +testNonBMP(/[\S]/u); +testNonBMP(/[\W]/u); + diff --git a/test/staging/sm/RegExp/unicode-class-braced.js b/test/staging/sm/RegExp/unicode-class-braced.js new file mode 100644 index 0000000000..0b582ffd03 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-class-braced.js @@ -0,0 +1,245 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- braced pattern in RegExpUnicodeEscapeSequence in CharacterClass."; + +print(BUGNUMBER + ": " + summary); + +// ==== standalone ==== + +assert.compareArray(/[\u{41}]/u.exec("ABC"), + ["A"]); + +assert.compareArray(/[\u{1F438}]/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(/[\u{1F438}]/u.exec("\uD83D"), + null); +assert.sameValue(/[\u{1F438}]/u.exec("\uDC38"), + null); + +assert.compareArray(/[\u{0}]/u.exec("\u{0}"), + ["\u{0}"]); +assert.compareArray(/[\u{10FFFF}]/u.exec("\u{10FFFF}"), + ["\u{10FFFF}"]); +assert.compareArray(/[\u{10ffff}]/u.exec("\u{10FFFF}"), + ["\u{10FFFF}"]); + +// leading 0 +assert.compareArray(/[\u{0000000000000000000000}]/u.exec("\u{0}"), + ["\u{0}"]); +assert.compareArray(/[\u{000000000000000010FFFF}]/u.exec("\u{10FFFF}"), + ["\u{10FFFF}"]); + +// RegExp constructor +assert.compareArray(new RegExp("[\\u{0}]", "u").exec("\u{0}"), + ["\u{0}"]); +assert.compareArray(new RegExp("[\\u{41}]", "u").exec("ABC"), + ["A"]); +assert.compareArray(new RegExp("[\\u{1F438}]", "u").exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(new RegExp("[\\u{10FFFF}]", "u").exec("\u{10FFFF}"), + ["\u{10FFFF}"]); + +assert.compareArray(new RegExp("[\\u{0000000000000000}]", "u").exec("\u{0}"), + ["\u{0}"]); + +assert.compareArray(eval(`/[\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}]/u`).exec("\u{1234}"), + ["\u{1234}"]); +assert.compareArray(new RegExp(`[\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}]`, "u").exec("\u{1234}"), + ["\u{1234}"]); + +// ==== BMP + non-BMP ==== + +assert.compareArray(/[A\u{1F438}]/u.exec("A\u{1F438}"), + ["A"]); +assert.compareArray(/[A\u{1F438}]/u.exec("\u{1F438}A"), + ["\u{1F438}"]); + +// lead-only target +assert.compareArray(/[A\u{1F438}]/u.exec("\uD83DA"), + ["A"]); +assert.sameValue(/[A\u{1F438}]/u.exec("\uD83D"), + null); + +// + +assert.compareArray(/[A\u{1F438}]+/u.exec("\u{1F438}A\u{1F438}A"), + ["\u{1F438}A\u{1F438}A"]); + +// trail surrogate + lead surrogate +assert.compareArray(/[A\u{1F438}]+/u.exec("\uD83D\uDC38A\uDC38\uD83DA"), + ["\uD83D\uDC38A"]); + +// ==== non-BMP + non-BMP ==== + +assert.compareArray(/[\u{1F418}\u{1F438}]/u.exec("\u{1F418}\u{1F438}"), + ["\u{1F418}"]); + +assert.compareArray(/[\u{1F418}\u{1F438}]+/u.exec("\u{1F418}\u{1F438}"), + ["\u{1F418}\u{1F438}"]); +assert.compareArray(/[\u{1F418}\u{1F438}]+/u.exec("\u{1F418}\uDC38\uD83D"), + ["\u{1F418}"]); +assert.compareArray(/[\u{1F418}\u{1F438}]+/u.exec("\uDC18\uD83D\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/[\u{1F418}\u{1F438}]+/u.exec("\uDC18\u{1F438}\uD83D"), + ["\u{1F438}"]); + +// trail surrogate + lead surrogate +assert.sameValue(/[\u{1F418}\u{1F438}]+/u.exec("\uDC18\uDC38\uD83D\uD83D"), + null); + +// ==== non-BMP + non-BMP range (from_lead == to_lead) ==== + +assert.compareArray(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F418}"), + ["\u{1F418}"]); +assert.compareArray(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F427}"), + ["\u{1F427}"]); + +assert.sameValue(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F417}"), + null); +assert.sameValue(/[\u{1F418}-\u{1F438}]/u.exec("\u{1F439}"), + null); + +// ==== non-BMP + non-BMP range (from_lead + 1 == to_lead) ==== + +assert.compareArray(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uDD7C"), + ["\uD83C\uDD7C"]); +assert.compareArray(/[\u{1F17C}-\u{1F438}]/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uDF99"), + ["\uD83C\uDF99"]); +assert.compareArray(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83D\uDC00"), + ["\uD83D\uDC00"]); + +assert.sameValue(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uDD7B"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83C\uE000"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83D\uDB99"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F438}]/u.exec("\uD83D\uDC39"), + null); + +// ==== non-BMP + non-BMP range (from_lead + 2 == to_lead) ==== + +assert.compareArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uDD7C"), + ["\uD83C\uDD7C"]); +assert.compareArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDC29"), + ["\uD83E\uDC29"]); + +assert.compareArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uDF99"), + ["\uD83C\uDF99"]); +assert.compareArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uDC00"), + ["\uD83D\uDC00"]); +assert.compareArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uDF99"), + ["\uD83D\uDF99"]); +assert.compareArray(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDC00"), + ["\uD83E\uDC00"]); + +assert.sameValue(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uDD7B"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83C\uE000"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uDB99"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83D\uE000"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDB99"), + null); +assert.sameValue(/[\u{1F17C}-\u{1F829}]/u.exec("\uD83E\uDC30"), + null); + +// ==== non-BMP + non-BMP range (other) ==== + +assert.compareArray(/[\u{1D164}-\u{1F438}]/u.exec("\uD834\uDD64"), + ["\uD834\uDD64"]); +assert.compareArray(/[\u{1D164}-\u{1F438}]/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/[\u{1D164}-\u{1F438}]/u.exec("\uD836\uDF99"), + ["\uD836\uDF99"]); +assert.compareArray(/[\u{1D164}-\u{1F438}]/u.exec("\uD838\uDC00"), + ["\uD838\uDC00"]); + +assert.sameValue(/[\u{1D164}-\u{1F438}]/u.exec("\uD834\uDD63"), + null); +assert.sameValue(/[\u{1D164}-\u{1F438}]/u.exec("\uD83D\uDC39"), + null); + +assert.sameValue(/[\u{1D164}-\u{1F438}]/u.exec("\uD834\uE000"), + null); +assert.sameValue(/[\u{1D164}-\u{1F438}]/u.exec("\uD835\uDB99"), + null); +assert.sameValue(/[\u{1D164}-\u{1F438}]/u.exec("\uD83C\uE000"), + null); +assert.sameValue(/[\u{1D164}-\u{1F438}]/u.exec("\uD83D\uDB99"), + null); + +// ==== BMP + non-BMP range ==== + +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("B"), + ["B"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("C"), + ["C"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uFFFF"), + ["\uFFFF"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uD800\uDC00"), + ["\uD800\uDC00"]); + +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uD800"), + ["\uD800"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uDBFF"), + ["\uDBFF"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uDC00"), + ["\uDC00"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uDFFF"), + ["\uDFFF"]); + +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uDC38"), + ["\uDC38"]); + +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDBFF"), + ["\uD83D"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDC00"), + ["\uD83D\uDC00"]); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDC38"), + ["\uD83D\uDC38"]); +assert.sameValue(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDC39"), + null); +assert.sameValue(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uDFFF"), + null); +assert.compareArray(/[\u{42}-\u{1F438}]/u.exec("\uD83D\uE000"), + ["\uD83D"]); + +assert.sameValue(/[\u{42}-\u{1F438}]/u.exec("A"), + null); + +// ==== wrong patterns ==== + +assertThrowsInstanceOf(() => eval(`/[\\u{-1}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{0.0}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{G}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{{]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{110000}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{00110000}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{100000000000000000000000000000}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{ FFFF}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{FFFF }]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{FF FF}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{F F F F}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u{100000001}]/u`), SyntaxError); + diff --git a/test/staging/sm/RegExp/unicode-class-empty.js b/test/staging/sm/RegExp/unicode-class-empty.js new file mode 100644 index 0000000000..6badbaa4f1 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-class-empty.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- empty class should not match anything."; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(/[]/u.exec("A"), + null); +assert.sameValue(/[]/u.exec("\uD83D"), + null); +assert.sameValue(/[]/u.exec("\uDC38"), + null); +assert.sameValue(/[]/u.exec("\uD83D\uDC38"), + null); + +assert.compareArray(/[^]/u.exec("A"), + ["A"]); +assert.compareArray(/[^]/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[^]/u.exec("\uDC38"), + ["\uDC38"]); +assert.compareArray(/[^]/u.exec("\uD83D\uDC38"), + ["\uD83D\uDC38"]); + diff --git a/test/staging/sm/RegExp/unicode-class-ignoreCase.js b/test/staging/sm/RegExp/unicode-class-ignoreCase.js new file mode 100644 index 0000000000..fb7f3bd899 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-class-ignoreCase.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- ignoreCase flag for CharacterClass."; + +print(BUGNUMBER + ": " + summary); + +assert.compareArray(/[ABC]+/iu.exec("DCBAabcd"), + ["CBAabc"]); + +assert.compareArray(/[A\u{10401}]+/iu.exec("A\u{10401}a\u{10429}"), + ["A\u{10401}a\u{10429}"]); + +assert.compareArray(/[\u{10401}-\u{10404}\u{10408}-\u{1040B}]+/iu.exec("\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}"), + ["\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}"]); +assert.compareArray(/[\u{10401}-\u{10404}\u{10408}-\u{1040B}]+/iu.exec("\u{10428}\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}\u{10434}"), + ["\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}"]); + +assert.compareArray(/[\u{10429}-\u{1042C}\u{10430}-\u{10433}]+/iu.exec("\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}"), + ["\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}"]); +assert.compareArray(/[\u{10429}-\u{1042C}\u{10430}-\u{10433}]+/iu.exec("\u{10428}\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}\u{10434}"), + ["\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}"]); + +assert.compareArray(/[\u{10401}-\u{10404}\u{10430}-\u{10433}]+/iu.exec("\u{10400}\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}\u{1040C}"), + ["\u{10401}\u{10402}\u{10403}\u{10404}\u{10408}\u{10409}\u{1040A}\u{1040B}"]); +assert.compareArray(/[\u{10401}-\u{10404}\u{10430}-\u{10433}]+/iu.exec("\u{10428}\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}\u{10434}"), + ["\u{10429}\u{1042A}\u{1042B}\u{1042C}\u{10430}\u{10431}\u{10432}\u{10433}"]); + diff --git a/test/staging/sm/RegExp/unicode-class-lead-trail.js b/test/staging/sm/RegExp/unicode-class-lead-trail.js new file mode 100644 index 0000000000..113baeee2b --- /dev/null +++ b/test/staging/sm/RegExp/unicode-class-lead-trail.js @@ -0,0 +1,151 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- lead and trail pattern in RegExpUnicodeEscapeSequence in CharacterClass."; + +print(BUGNUMBER + ": " + summary); + +// ==== standalone ==== + +assert.compareArray(/[\uD83D\uDC38]/u.exec("\uD83D\uDC38"), + ["\uD83D\uDC38"]); +assert.sameValue(/[\uD83D\uDC38]/u.exec("\uD83D"), + null); +assert.sameValue(/[\uD83D\uDC38]/u.exec("\uDC38"), + null); + +// no unicode flag +assert.compareArray(/[\uD83D\uDC38]/.exec("\uD83D\uDC38"), + ["\uD83D"]); +assert.compareArray(/[\uD83D\uDC38]/.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[\uD83D\uDC38]/.exec("\uDC38"), + ["\uDC38"]); + +// RegExp constructor +assert.compareArray(new RegExp("[\uD83D\uDC38]", "u").exec("\uD83D\uDC38"), + ["\uD83D\uDC38"]); +assert.sameValue(new RegExp("[\uD83D\uDC38]", "u").exec("\uD83D"), + null); +assert.sameValue(new RegExp("[\uD83D\uDC38]", "u").exec("\uDC38"), + null); + +// RegExp constructor, no unicode flag +assert.compareArray(new RegExp("[\uD83D\uDC38]", "").exec("\uD83D\uDC38"), + ["\uD83D"]); +assert.compareArray(new RegExp("[\uD83D\uDC38]", "").exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(new RegExp("[\uD83D\uDC38]", "").exec("\uDC38"), + ["\uDC38"]); + +// ==== lead-only ==== + +// match only non-surrogate pair +assert.compareArray(/[\uD83D]/u.exec("\uD83D\uDBFF"), + ["\uD83D"]); +assert.sameValue(/[\uD83D]/u.exec("\uD83D\uDC00"), + null); +assert.sameValue(/[\uD83D]/u.exec("\uD83D\uDFFF"), + null); +assert.compareArray(/[\uD83D]/u.exec("\uD83D\uE000"), + ["\uD83D"]); + +// match before non-tail char +assert.compareArray(/[\uD83D]/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[\uD83D]/u.exec("\uD83DA"), + ["\uD83D"]); + +// no unicode flag +assert.compareArray(/[\uD83D]/.exec("\uD83D\uDBFF"), + ["\uD83D"]); +assert.compareArray(/[\uD83D]/.exec("\uD83D\uDC00"), + ["\uD83D"]); +assert.compareArray(/[\uD83D]/.exec("\uD83D\uDFFF"), + ["\uD83D"]); +assert.compareArray(/[\uD83D]/.exec("\uD83D\uE000"), + ["\uD83D"]); +assert.compareArray(/[\uD83D]/.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[\uD83D]/.exec("\uD83DA"), + ["\uD83D"]); + +// ==== trail-only ==== + +// match only non-surrogate pair +assert.compareArray(/[\uDC38]/u.exec("\uD7FF\uDC38"), + ["\uDC38"]); +assert.sameValue(/[\uDC38]/u.exec("\uD800\uDC38"), + null); +assert.sameValue(/[\uDC38]/u.exec("\uDBFF\uDC38"), + null); +assert.compareArray(/[\uDC38]/u.exec("\uDC00\uDC38"), + ["\uDC38"]); + +// match after non-lead char +assert.compareArray(/[\uDC38]/u.exec("\uDC38"), + ["\uDC38"]); +assert.compareArray(/[\uDC38]/u.exec("A\uDC38"), + ["\uDC38"]); + +// no unicode flag +assert.compareArray(/[\uDC38]/.exec("\uD7FF\uDC38"), + ["\uDC38"]); +assert.compareArray(/[\uDC38]/.exec("\uD800\uDC38"), + ["\uDC38"]); +assert.compareArray(/[\uDC38]/.exec("\uDBFF\uDC38"), + ["\uDC38"]); +assert.compareArray(/[\uDC38]/.exec("\uDC00\uDC38"), + ["\uDC38"]); +assert.compareArray(/[\uDC38]/.exec("\uDC38"), + ["\uDC38"]); +assert.compareArray(/[\uDC38]/.exec("A\uDC38"), + ["\uDC38"]); + +// ==== invalid trail ==== + +assert.compareArray(/[\uD83D\u3042]*/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[\uD83D\u3042]*/u.exec("\uD83D\u3042"), + ["\uD83D\u3042"]); +assert.compareArray(/[\uD83D\u3042]*/u.exec("\uD83D\u3042\u3042\uD83D"), + ["\uD83D\u3042\u3042\uD83D"]); + +assert.compareArray(/[\uD83D\u{3042}]*/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[\uD83D\u{3042}]*/u.exec("\uD83D\u3042"), + ["\uD83D\u3042"]); +assert.compareArray(/[\uD83D\u{3042}]*/u.exec("\uD83D\u3042\u3042\uD83D"), + ["\uD83D\u3042\u3042\uD83D"]); + +assert.compareArray(/[\uD83DA]*/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/[\uD83DA]*/u.exec("\uD83DA"), + ["\uD83DA"]); +assert.compareArray(/[\uD83DA]*/u.exec("\uD83DAA\uD83D"), + ["\uD83DAA\uD83D"]); + +// ==== wrong patterns ==== + +assertThrowsInstanceOf(() => eval(`/[\\u]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u0]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u00]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u000]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u000G]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\u0.00]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u0]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u00]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u000]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u000G]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uD83D\\u0.00]/u`), SyntaxError); + diff --git a/test/staging/sm/RegExp/unicode-class-negated.js b/test/staging/sm/RegExp/unicode-class-negated.js new file mode 100644 index 0000000000..a4d7a91bde --- /dev/null +++ b/test/staging/sm/RegExp/unicode-class-negated.js @@ -0,0 +1,73 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- negated CharacterClass."; + +print(BUGNUMBER + ": " + summary); + +// ==== BMP ==== + +assert.compareArray(/[^A]/u.exec("ABC"), + ["B"]); +assert.compareArray(/[^A]/u.exec("A\u{1F438}C"), + ["\u{1F438}"]); +assert.compareArray(/[^A]/u.exec("A\uD83DC"), + ["\uD83D"]); +assert.compareArray(/[^A]/u.exec("A\uDC38C"), + ["\uDC38"]); + +assert.compareArray(/[^\uE000]/u.exec("\uE000\uE001"), + ["\uE001"]); +assert.compareArray(/[^\uE000]/u.exec("\uE000\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/[^\uE000]/u.exec("\uE000\uD83D"), + ["\uD83D"]); +assert.compareArray(/[^\uE000]/u.exec("\uE000\uDC38"), + ["\uDC38"]); + +// ==== non-BMP ==== + +assert.compareArray(/[^\u{1F438}]/u.exec("\u{1F438}A"), + ["A"]); +assert.compareArray(/[^\u{1F438}]/u.exec("\u{1F438}\u{1F439}"), + ["\u{1F439}"]); +assert.compareArray(/[^\u{1F438}]/u.exec("\u{1F438}\uD83D"), + ["\uD83D"]); +assert.compareArray(/[^\u{1F438}]/u.exec("\u{1F438}\uDC38"), + ["\uDC38"]); + +// ==== lead-only ==== + +assert.compareArray(/[^\uD83D]/u.exec("\u{1F438}A"), + ["\u{1F438}"]); +assert.compareArray(/[^\uD83D]/u.exec("\uD83D\uDBFF"), + ["\uDBFF"]); +assert.compareArray(/[^\uD83D]/u.exec("\uD83D\uDC00"), + ["\uD83D\uDC00"]); +assert.compareArray(/[^\uD83D]/u.exec("\uD83D\uDFFF"), + ["\uD83D\uDFFF"]); +assert.compareArray(/[^\uD83D]/u.exec("\uD83D\uE000"), + ["\uE000"]); + +// ==== trail-only ==== + +assert.compareArray(/[^\uDC38]/u.exec("\u{1F438}A"), + ["\u{1F438}"]); +assert.compareArray(/[^\uDC38]/u.exec("\uD7FF\uDC38"), + ["\uD7FF"]); +assert.compareArray(/[^\uDC38]/u.exec("\uD800\uDC38"), + ["\uD800\uDC38"]); +assert.compareArray(/[^\uDC38]/u.exec("\uDBFF\uDC38"), + ["\uDBFF\uDC38"]); +assert.compareArray(/[^\uDC38]/u.exec("\uDC00\uDC38"), + ["\uDC00"]); + diff --git a/test/staging/sm/RegExp/unicode-class-range.js b/test/staging/sm/RegExp/unicode-class-range.js new file mode 100644 index 0000000000..55cdfa80bf --- /dev/null +++ b/test/staging/sm/RegExp/unicode-class-range.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- disallow range with CharacterClassEscape."; + +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => eval(`/[\\w-\\uFFFF]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\W-\\uFFFF]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\d-\\uFFFF]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\D-\\uFFFF]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\s-\\uFFFF]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\S-\\uFFFF]/u`), SyntaxError); + +assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\w]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\W]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\d]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\D]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\s]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uFFFF-\\S]/u`), SyntaxError); + +assertThrowsInstanceOf(() => eval(`/[\\w-\\w]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\W-\\W]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\d-\\d]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\D-\\D]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\s-\\s]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\S-\\S]/u`), SyntaxError); + diff --git a/test/staging/sm/RegExp/unicode-class-raw.js b/test/staging/sm/RegExp/unicode-class-raw.js new file mode 100644 index 0000000000..668e4d532f --- /dev/null +++ b/test/staging/sm/RegExp/unicode-class-raw.js @@ -0,0 +1,74 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- raw unicode."; + +print(BUGNUMBER + ": " + summary); + +// ==== standalone ==== + +assert.compareArray(eval(`/[\uD83D\uDC38]/u`).exec("\u{1F438}"), + ["\u{1F438}"]); + +// no unicode flag +assert.compareArray(eval(`/[\uD83D\uDC38]/`).exec("\u{1F438}"), + ["\uD83D"]); + +// escaped (lead) +assert.sameValue(eval(`/[\\uD83D\uDC38]/u`).exec("\u{1F438}"), + null); +assert.sameValue(eval(`/[\\u{D83D}\uDC38]/u`).exec("\u{1F438}"), + null); + +// escaped (trail) +assert.sameValue(eval(`/[\uD83D\\uDC38]/u`).exec("\u{1F438}"), + null); +assert.sameValue(eval(`/[\uD83D\\u{DC38}]/u`).exec("\u{1F438}"), + null); + +// escaped (lead), no unicode flag +assert.compareArray(eval(`/[\\uD83D\uDC38]/`).exec("\u{1F438}"), + ["\uD83D"]); + +// escaped (trail), no unicode flag +assert.compareArray(eval(`/[\uD83D\\uDC38]/`).exec("\u{1F438}"), + ["\uD83D"]); + +// ==== RegExp constructor ==== + +assert.compareArray(new RegExp("[\uD83D\uDC38]", "u").exec("\u{1F438}"), + ["\u{1F438}"]); + +// no unicode flag +assert.compareArray(new RegExp("[\uD83D\uDC38]", "").exec("\u{1F438}"), + ["\uD83D"]); + +// escaped(lead) +assert.sameValue(new RegExp("[\\uD83D\uDC38]", "u").exec("\u{1F438}"), + null); +assert.sameValue(new RegExp("[\\u{D83D}\uDC38]", "u").exec("\u{1F438}"), + null); + +// escaped(trail) +assert.sameValue(new RegExp("[\uD83D\\uDC38]", "u").exec("\u{1F438}"), + null); +assert.sameValue(new RegExp("[\uD83D\\u{DC38}]", "u").exec("\u{1F438}"), + null); + +// escaped(lead), no unicode flag +assert.compareArray(new RegExp("[\\uD83D\uDC38]", "").exec("\u{1F438}"), + ["\uD83D"]); + +// escaped(trail), no unicode flag +assert.compareArray(new RegExp("[\uD83D\\uDC38]", "").exec("\u{1F438}"), + ["\uD83D"]); + diff --git a/test/staging/sm/RegExp/unicode-disallow-extended.js b/test/staging/sm/RegExp/unicode-disallow-extended.js new file mode 100644 index 0000000000..fbc28bc7c9 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-disallow-extended.js @@ -0,0 +1,148 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- disallow extended patterns."; + +print(BUGNUMBER + ": " + summary); + +// IdentityEscape + +assert.compareArray(/\^\$\\\.\*\+\?\(\)\[\]\{\}\|/u.exec("^$\\.*+?()[]{}|"), + ["^$\\.*+?()[]{}|"]); +assertThrowsInstanceOf(() => eval(`/\\A/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\-/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\U{10}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\U0000/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\uD83D\\U0000/u`), SyntaxError); + +assert.compareArray(/[\^\$\\\.\*\+\?\(\)\[\]\{\}\|]+/u.exec("^$\\.*+?()[]{}|"), + ["^$\\.*+?()[]{}|"]); +assertThrowsInstanceOf(() => eval(`/[\\A]/u`), SyntaxError); +assert.compareArray(/[A\-Z]+/u.exec("a-zABC"), + ["-"]); +assertThrowsInstanceOf(() => eval(`/[\\U{10}]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\U0000]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\uD83D\\U0000]/u`), SyntaxError); + +// PatternCharacter +assertThrowsInstanceOf(() => eval(`/{}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/{/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/{0}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/{1,}/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/{1,2}/u`), SyntaxError); + +// QuantifiableAssertion +assert.compareArray(/.B(?=A)/u.exec("cBaCBA"), + ["CB"]); +assert.compareArray(/.B(?!A)/u.exec("CBAcBa"), + ["cB"]); +assert.compareArray(/.B(?:A)/u.exec("cBaCBA"), + ["CBA"]); +assert.compareArray(/.B(A)/u.exec("cBaCBA"), + ["CBA", "A"]); + +assertThrowsInstanceOf(() => eval(`/.B(?=A)+/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/.B(?!A)+/u`), SyntaxError); +assert.compareArray(/.B(?:A)+/u.exec("cBaCBA"), + ["CBA"]); +assert.compareArray(/.B(A)+/u.exec("cBaCBA"), + ["CBA", "A"]); + +// ControlLetter +assert.compareArray(/\cA/u.exec("\u0001"), + ["\u0001"]); +assert.compareArray(/\cZ/u.exec("\u001a"), + ["\u001a"]); +assert.compareArray(/\ca/u.exec("\u0001"), + ["\u0001"]); +assert.compareArray(/\cz/u.exec("\u001a"), + ["\u001a"]); + +assert.compareArray(/[\cA]/u.exec("\u0001"), + ["\u0001"]); +assert.compareArray(/[\cZ]/u.exec("\u001a"), + ["\u001a"]); +assert.compareArray(/[\ca]/u.exec("\u0001"), + ["\u0001"]); +assert.compareArray(/[\cz]/u.exec("\u001a"), + ["\u001a"]); + +assertThrowsInstanceOf(() => eval(`/\\c/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\c1/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\c_/u`), SyntaxError); + +assertThrowsInstanceOf(() => eval(`/[\\c]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\c1]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\c_]/u`), SyntaxError); + +// HexEscapeSequence +assertThrowsInstanceOf(() => eval(`/\\x/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\x0/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\x1/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\x1G/u`), SyntaxError); + +assertThrowsInstanceOf(() => eval(`/[\\x]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\x0]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\x1]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\x1G]/u`), SyntaxError); + +// LegacyOctalEscapeSequence +assertThrowsInstanceOf(() => eval(`/\\52/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\052/u`), SyntaxError); + +assertThrowsInstanceOf(() => eval(`/[\\52]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\052]/u`), SyntaxError); + +// DecimalEscape +assert.compareArray(/\0/u.exec("\0"), + ["\0"]); +assert.compareArray(/[\0]/u.exec("\0"), + ["\0"]); +assert.compareArray(/\0A/u.exec("\0A"), + ["\0A"]); +assert.compareArray(/\0G/u.exec("\0G"), + ["\0G"]); +assert.compareArray(/(A.)\1/u.exec("ABACABAB"), + ["ABAB", "AB"]); +assert.compareArray(/(A.)(B.)(C.)(D.)(E.)(F.)(G.)(H.)(I.)(J.)(K.)\10/u.exec("A1B2C3D4E5F6G7H8I9JaKbJa"), + ["A1B2C3D4E5F6G7H8I9JaKbJa", "A1", "B2", "C3", "D4", "E5", "F6", "G7", "H8", "I9", "Ja", "Kb"]); + +assertThrowsInstanceOf(() => eval(`/\\00/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\01/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\09/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\1/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\2/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\3/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\4/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\5/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\6/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\7/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\8/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\9/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\10/u`), SyntaxError); + +assertThrowsInstanceOf(() => eval(`/[\\00]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\01]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\09]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\1]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\2]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\3]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\4]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\5]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\6]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\7]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\8]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\9]/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/[\\10]/u`), SyntaxError); + diff --git a/test/staging/sm/RegExp/unicode-everything.js b/test/staging/sm/RegExp/unicode-everything.js new file mode 100644 index 0000000000..ade05b8db9 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-everything.js @@ -0,0 +1,68 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- everything Atom."; + +print(BUGNUMBER + ": " + summary); + +// ==== standalone ==== + +assert.compareArray(/./u.exec("ABC"), + ["A"]); +assert.compareArray(/./u.exec("\u{1F438}BC"), + ["\u{1F438}"]); + +assert.compareArray(/./u.exec("\uD83D\uDBFF"), + ["\uD83D"]); +assert.compareArray(/./u.exec("\uD83D\uDC00"), + ["\uD83D\uDC00"]); +assert.compareArray(/./u.exec("\uD83D\uDFFF"), + ["\uD83D\uDFFF"]); +assert.compareArray(/./u.exec("\uD83D\uE000"), + ["\uD83D"]); +assert.compareArray(/./u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/./u.exec("\uD83DA"), + ["\uD83D"]); + +assert.compareArray(/./u.exec("\uD7FF\uDC38"), + ["\uD7FF"]); +assert.compareArray(/./u.exec("\uD800\uDC38"), + ["\uD800\uDC38"]); +assert.compareArray(/./u.exec("\uDBFF\uDC38"), + ["\uDBFF\uDC38"]); +assert.compareArray(/./u.exec("\uDC00\uDC38"), + ["\uDC00"]); +assert.compareArray(/./u.exec("\uDC38"), + ["\uDC38"]); +assert.compareArray(/./u.exec("A\uDC38"), + ["A"]); + +assert.compareArray(/.A/u.exec("\uD7FF\uDC38A"), + ["\uDC38A"]); +assert.compareArray(/.A/u.exec("\uD800\uDC38A"), + ["\uD800\uDC38A"]); +assert.compareArray(/.A/u.exec("\uDBFF\uDC38A"), + ["\uDBFF\uDC38A"]); +assert.compareArray(/.A/u.exec("\uDC00\uDC38A"), + ["\uDC38A"]); + +// ==== leading multiple ==== + +assert.compareArray(/.*A/u.exec("\u{1F438}\u{1F438}\u{1F438}A"), + ["\u{1F438}\u{1F438}\u{1F438}A"]); + +// ==== trailing multiple ==== + +assert.compareArray(/A.*/u.exec("A\u{1F438}\u{1F438}\u{1F438}"), + ["A\u{1F438}\u{1F438}\u{1F438}"]); + diff --git a/test/staging/sm/RegExp/unicode-ignoreCase-ascii.js b/test/staging/sm/RegExp/unicode-ignoreCase-ascii.js new file mode 100644 index 0000000000..ca35350805 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-ignoreCase-ascii.js @@ -0,0 +1,55 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- ignoreCase flag with non-ascii to ascii map."; + +print(BUGNUMBER + ": " + summary); + +// LATIN CAPITAL LETTER Y WITH DIAERESIS +assert.compareArray(/\u0178/iu.exec("\u00FF"), + ["\u00FF"]); +assert.compareArray(/\u00FF/iu.exec("\u0178"), + ["\u0178"]); + +// LATIN SMALL LETTER LONG S +assert.compareArray(/\u017F/iu.exec("S"), + ["S"]); +assert.compareArray(/\u017F/iu.exec("s"), + ["s"]); +assert.compareArray(/S/iu.exec("\u017F"), + ["\u017F"]); +assert.compareArray(/s/iu.exec("\u017F"), + ["\u017F"]); + +// LATIN CAPITAL LETTER SHARP S +assert.compareArray(/\u1E9E/iu.exec("\u00DF"), + ["\u00DF"]); +assert.compareArray(/\u00DF/iu.exec("\u1E9E"), + ["\u1E9E"]); + +// KELVIN SIGN +assert.compareArray(/\u212A/iu.exec("K"), + ["K"]); +assert.compareArray(/\u212A/iu.exec("k"), + ["k"]); +assert.compareArray(/K/iu.exec("\u212A"), + ["\u212A"]); +assert.compareArray(/k/iu.exec("\u212A"), + ["\u212A"]); + +// ANGSTROM SIGN +assert.compareArray(/\u212B/iu.exec("\u00E5"), + ["\u00E5"]); +assert.compareArray(/\u00E5/iu.exec("\u212B"), + ["\u212B"]); + diff --git a/test/staging/sm/RegExp/unicode-ignoreCase-escape.js b/test/staging/sm/RegExp/unicode-ignoreCase-escape.js new file mode 100644 index 0000000000..2a48cdc2c8 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-ignoreCase-escape.js @@ -0,0 +1,81 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- ignoreCase flag with character class escape."; + +// \W doesn't match S or K from the change in +// https://github.com/tc39/ecma262/pull/525 +// (bug 1281739) + +print(BUGNUMBER + ": " + summary); + +// LATIN SMALL LETTER LONG S + +assert.compareArray(/\w/iu.exec("S"), + ["S"]); +assert.compareArray(/\w/iu.exec("s"), + ["s"]); +assert.compareArray(/\w/iu.exec("\u017F"), + ["\u017F"]); + +assert.compareArray(/[^\W]/iu.exec("S"), + ["S"]); +assert.compareArray(/[^\W]/iu.exec("s"), + ["s"]); +assert.compareArray(/[^\W]/iu.exec("\u017F"), + ["\u017F"]); + +assert.sameValue(/\W/iu.exec("S"), + null); +assert.sameValue(/\W/iu.exec("s"), + null); +assert.sameValue(/\W/iu.exec("\u017F"), + null); + +assert.sameValue(/[^\w]/iu.exec("S"), + null); +assert.sameValue(/[^\w]/iu.exec("s"), + null); +assert.sameValue(/[^\w]/iu.exec("\u017F"), + null); + +// KELVIN SIGN + +assert.compareArray(/\w/iu.exec("k"), + ["k"]); +assert.compareArray(/\w/iu.exec("k"), + ["k"]); +assert.compareArray(/\w/iu.exec("\u212A"), + ["\u212A"]); + +assert.compareArray(/[^\W]/iu.exec("k"), + ["k"]); +assert.compareArray(/[^\W]/iu.exec("k"), + ["k"]); +assert.compareArray(/[^\W]/iu.exec("\u212A"), + ["\u212A"]); + +assert.sameValue(/\W/iu.exec("k"), + null); +assert.sameValue(/\W/iu.exec("k"), + null); +assert.sameValue(/\W/iu.exec("\u212A"), + null); + +assert.sameValue(/[^\w]/iu.exec("k"), + null); +assert.sameValue(/[^\w]/iu.exec("k"), + null); +assert.sameValue(/[^\w]/iu.exec("\u212A"), + null); + diff --git a/test/staging/sm/RegExp/unicode-ignoreCase-negated.js b/test/staging/sm/RegExp/unicode-ignoreCase-negated.js new file mode 100644 index 0000000000..1ab4a247a5 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-ignoreCase-negated.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- ignoreCase flag with negated character class."; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(/[^A]/iu.exec("A"), + null); +assert.sameValue(/[^a]/iu.exec("A"), + null); +assert.sameValue(/[^A]/iu.exec("a"), + null); +assert.sameValue(/[^a]/iu.exec("a"), + null); + +assert.compareArray(/[^A]/iu.exec("b"), + ["b"]); + diff --git a/test/staging/sm/RegExp/unicode-ignoreCase-word-boundary.js b/test/staging/sm/RegExp/unicode-ignoreCase-word-boundary.js new file mode 100644 index 0000000000..c29718bfc7 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-ignoreCase-word-boundary.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var BUGNUMBER = 1338373; +var summary = "Word boundary should match U+017F and U+212A in unicode+ignoreCase."; + +assert.sameValue(/\b/iu.test('\u017F'), true); +assert.sameValue(/\b/i.test('\u017F'), false); +assert.sameValue(/\b/u.test('\u017F'), false); +assert.sameValue(/\b/.test('\u017F'), false); + +assert.sameValue(/\b/iu.test('\u212A'), true); +assert.sameValue(/\b/i.test('\u212A'), false); +assert.sameValue(/\b/u.test('\u212A'), false); +assert.sameValue(/\b/.test('\u212A'), false); + +assert.sameValue(/\B/iu.test('\u017F'), false); +assert.sameValue(/\B/i.test('\u017F'), true); +assert.sameValue(/\B/u.test('\u017F'), true); +assert.sameValue(/\B/.test('\u017F'), true); + +assert.sameValue(/\B/iu.test('\u212A'), false); +assert.sameValue(/\B/i.test('\u212A'), true); +assert.sameValue(/\B/u.test('\u212A'), true); +assert.sameValue(/\B/.test('\u212A'), true); + +// Bug 1338779 - More testcases. +assert.sameValue(/(i\B\u017F)/ui.test("is"), true); +assert.sameValue(/(i\B\u017F)/ui.test("it"), false); +assert.sameValue(/(i\B\u017F)+/ui.test("is"), true); +assert.sameValue(/(i\B\u017F)+/ui.test("it"), false); + +assert.sameValue(/(\u017F\Bi)/ui.test("si"), true); +assert.sameValue(/(\u017F\Bi)/ui.test("ti"), false); +assert.sameValue(/(\u017F\Bi)+/ui.test("si"), true); +assert.sameValue(/(\u017F\Bi)+/ui.test("ti"), false); + +assert.sameValue(/(i\B\u212A)/ui.test("ik"), true); +assert.sameValue(/(i\B\u212A)/ui.test("it"), false); +assert.sameValue(/(i\B\u212A)+/ui.test("ik"), true); +assert.sameValue(/(i\B\u212A)+/ui.test("it"), false); + +assert.sameValue(/(\u212A\Bi)/ui.test("ki"), true); +assert.sameValue(/(\u212A\Bi)/ui.test("ti"), false); +assert.sameValue(/(\u212A\Bi)+/ui.test("ki"), true); +assert.sameValue(/(\u212A\Bi)+/ui.test("ti"), false); + diff --git a/test/staging/sm/RegExp/unicode-ignoreCase.js b/test/staging/sm/RegExp/unicode-ignoreCase.js new file mode 100644 index 0000000000..f92e235a92 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-ignoreCase.js @@ -0,0 +1,2908 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +/* Generated by make_unicode.py DO NOT MODIFY */ +/* Unicode version: 15.0.0 */ + +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- ignoreCase flag."; + +print(BUGNUMBER + ": " + summary); + +function test(code, ...equivs) { + var codeRe = new RegExp(String.fromCodePoint(code) + "+", "iu"); + var ans = String.fromCodePoint(code) + equivs.map(c => String.fromCodePoint(c)).join(""); + assert.compareArray(codeRe.exec("<" + ans + ">"), [ans]); + codeRe = new RegExp("[" + String.fromCodePoint(code) + "]+", "iu"); + assert.compareArray(codeRe.exec("<" + ans + ">"), [ans]); +} +test(0x0041, 0x0061); // LATIN CAPITAL LETTER A, LATIN SMALL LETTER A +test(0x0042, 0x0062); // LATIN CAPITAL LETTER B, LATIN SMALL LETTER B +test(0x0043, 0x0063); // LATIN CAPITAL LETTER C, LATIN SMALL LETTER C +test(0x0044, 0x0064); // LATIN CAPITAL LETTER D, LATIN SMALL LETTER D +test(0x0045, 0x0065); // LATIN CAPITAL LETTER E, LATIN SMALL LETTER E +test(0x0046, 0x0066); // LATIN CAPITAL LETTER F, LATIN SMALL LETTER F +test(0x0047, 0x0067); // LATIN CAPITAL LETTER G, LATIN SMALL LETTER G +test(0x0048, 0x0068); // LATIN CAPITAL LETTER H, LATIN SMALL LETTER H +test(0x0049, 0x0069); // LATIN CAPITAL LETTER I, LATIN SMALL LETTER I +test(0x004A, 0x006A); // LATIN CAPITAL LETTER J, LATIN SMALL LETTER J +test(0x004B, 0x006B, 0x212A); // LATIN CAPITAL LETTER K, LATIN SMALL LETTER K, KELVIN SIGN (DEGREES KELVIN) +test(0x004C, 0x006C); // LATIN CAPITAL LETTER L, LATIN SMALL LETTER L +test(0x004D, 0x006D); // LATIN CAPITAL LETTER M, LATIN SMALL LETTER M +test(0x004E, 0x006E); // LATIN CAPITAL LETTER N, LATIN SMALL LETTER N +test(0x004F, 0x006F); // LATIN CAPITAL LETTER O, LATIN SMALL LETTER O +test(0x0050, 0x0070); // LATIN CAPITAL LETTER P, LATIN SMALL LETTER P +test(0x0051, 0x0071); // LATIN CAPITAL LETTER Q, LATIN SMALL LETTER Q +test(0x0052, 0x0072); // LATIN CAPITAL LETTER R, LATIN SMALL LETTER R +test(0x0053, 0x0073, 0x017F); // LATIN CAPITAL LETTER S, LATIN SMALL LETTER S, LATIN SMALL LETTER LONG S +test(0x0054, 0x0074); // LATIN CAPITAL LETTER T, LATIN SMALL LETTER T +test(0x0055, 0x0075); // LATIN CAPITAL LETTER U, LATIN SMALL LETTER U +test(0x0056, 0x0076); // LATIN CAPITAL LETTER V, LATIN SMALL LETTER V +test(0x0057, 0x0077); // LATIN CAPITAL LETTER W, LATIN SMALL LETTER W +test(0x0058, 0x0078); // LATIN CAPITAL LETTER X, LATIN SMALL LETTER X +test(0x0059, 0x0079); // LATIN CAPITAL LETTER Y, LATIN SMALL LETTER Y +test(0x005A, 0x007A); // LATIN CAPITAL LETTER Z, LATIN SMALL LETTER Z +test(0x0061, 0x0041); // LATIN SMALL LETTER A, LATIN CAPITAL LETTER A +test(0x0062, 0x0042); // LATIN SMALL LETTER B, LATIN CAPITAL LETTER B +test(0x0063, 0x0043); // LATIN SMALL LETTER C, LATIN CAPITAL LETTER C +test(0x0064, 0x0044); // LATIN SMALL LETTER D, LATIN CAPITAL LETTER D +test(0x0065, 0x0045); // LATIN SMALL LETTER E, LATIN CAPITAL LETTER E +test(0x0066, 0x0046); // LATIN SMALL LETTER F, LATIN CAPITAL LETTER F +test(0x0067, 0x0047); // LATIN SMALL LETTER G, LATIN CAPITAL LETTER G +test(0x0068, 0x0048); // LATIN SMALL LETTER H, LATIN CAPITAL LETTER H +test(0x0069, 0x0049); // LATIN SMALL LETTER I, LATIN CAPITAL LETTER I +test(0x006A, 0x004A); // LATIN SMALL LETTER J, LATIN CAPITAL LETTER J +test(0x006B, 0x004B, 0x212A); // LATIN SMALL LETTER K, LATIN CAPITAL LETTER K, KELVIN SIGN (DEGREES KELVIN) +test(0x006C, 0x004C); // LATIN SMALL LETTER L, LATIN CAPITAL LETTER L +test(0x006D, 0x004D); // LATIN SMALL LETTER M, LATIN CAPITAL LETTER M +test(0x006E, 0x004E); // LATIN SMALL LETTER N, LATIN CAPITAL LETTER N +test(0x006F, 0x004F); // LATIN SMALL LETTER O, LATIN CAPITAL LETTER O +test(0x0070, 0x0050); // LATIN SMALL LETTER P, LATIN CAPITAL LETTER P +test(0x0071, 0x0051); // LATIN SMALL LETTER Q, LATIN CAPITAL LETTER Q +test(0x0072, 0x0052); // LATIN SMALL LETTER R, LATIN CAPITAL LETTER R +test(0x0073, 0x0053, 0x017F); // LATIN SMALL LETTER S, LATIN CAPITAL LETTER S, LATIN SMALL LETTER LONG S +test(0x0074, 0x0054); // LATIN SMALL LETTER T, LATIN CAPITAL LETTER T +test(0x0075, 0x0055); // LATIN SMALL LETTER U, LATIN CAPITAL LETTER U +test(0x0076, 0x0056); // LATIN SMALL LETTER V, LATIN CAPITAL LETTER V +test(0x0077, 0x0057); // LATIN SMALL LETTER W, LATIN CAPITAL LETTER W +test(0x0078, 0x0058); // LATIN SMALL LETTER X, LATIN CAPITAL LETTER X +test(0x0079, 0x0059); // LATIN SMALL LETTER Y, LATIN CAPITAL LETTER Y +test(0x007A, 0x005A); // LATIN SMALL LETTER Z, LATIN CAPITAL LETTER Z +test(0x00B5, 0x03BC, 0x039C); // MICRO SIGN, GREEK SMALL LETTER MU, GREEK CAPITAL LETTER MU +test(0x00C0, 0x00E0); // LATIN CAPITAL LETTER A WITH GRAVE (LATIN CAPITAL LETTER A GRAVE), LATIN SMALL LETTER A WITH GRAVE (LATIN SMALL LETTER A GRAVE) +test(0x00C1, 0x00E1); // LATIN CAPITAL LETTER A WITH ACUTE (LATIN CAPITAL LETTER A ACUTE), LATIN SMALL LETTER A WITH ACUTE (LATIN SMALL LETTER A ACUTE) +test(0x00C2, 0x00E2); // LATIN CAPITAL LETTER A WITH CIRCUMFLEX (LATIN CAPITAL LETTER A CIRCUMFLEX), LATIN SMALL LETTER A WITH CIRCUMFLEX (LATIN SMALL LETTER A CIRCUMFLEX) +test(0x00C3, 0x00E3); // LATIN CAPITAL LETTER A WITH TILDE (LATIN CAPITAL LETTER A TILDE), LATIN SMALL LETTER A WITH TILDE (LATIN SMALL LETTER A TILDE) +test(0x00C4, 0x00E4); // LATIN CAPITAL LETTER A WITH DIAERESIS (LATIN CAPITAL LETTER A DIAERESIS), LATIN SMALL LETTER A WITH DIAERESIS (LATIN SMALL LETTER A DIAERESIS) +test(0x00C5, 0x00E5, 0x212B); // LATIN CAPITAL LETTER A WITH RING ABOVE (LATIN CAPITAL LETTER A RING), LATIN SMALL LETTER A WITH RING ABOVE (LATIN SMALL LETTER A RING), ANGSTROM SIGN (ANGSTROM UNIT) +test(0x00C6, 0x00E6); // LATIN CAPITAL LETTER AE (LATIN CAPITAL LETTER A E), LATIN SMALL LETTER AE (LATIN SMALL LETTER A E) +test(0x00C7, 0x00E7); // LATIN CAPITAL LETTER C WITH CEDILLA (LATIN CAPITAL LETTER C CEDILLA), LATIN SMALL LETTER C WITH CEDILLA (LATIN SMALL LETTER C CEDILLA) +test(0x00C8, 0x00E8); // LATIN CAPITAL LETTER E WITH GRAVE (LATIN CAPITAL LETTER E GRAVE), LATIN SMALL LETTER E WITH GRAVE (LATIN SMALL LETTER E GRAVE) +test(0x00C9, 0x00E9); // LATIN CAPITAL LETTER E WITH ACUTE (LATIN CAPITAL LETTER E ACUTE), LATIN SMALL LETTER E WITH ACUTE (LATIN SMALL LETTER E ACUTE) +test(0x00CA, 0x00EA); // LATIN CAPITAL LETTER E WITH CIRCUMFLEX (LATIN CAPITAL LETTER E CIRCUMFLEX), LATIN SMALL LETTER E WITH CIRCUMFLEX (LATIN SMALL LETTER E CIRCUMFLEX) +test(0x00CB, 0x00EB); // LATIN CAPITAL LETTER E WITH DIAERESIS (LATIN CAPITAL LETTER E DIAERESIS), LATIN SMALL LETTER E WITH DIAERESIS (LATIN SMALL LETTER E DIAERESIS) +test(0x00CC, 0x00EC); // LATIN CAPITAL LETTER I WITH GRAVE (LATIN CAPITAL LETTER I GRAVE), LATIN SMALL LETTER I WITH GRAVE (LATIN SMALL LETTER I GRAVE) +test(0x00CD, 0x00ED); // LATIN CAPITAL LETTER I WITH ACUTE (LATIN CAPITAL LETTER I ACUTE), LATIN SMALL LETTER I WITH ACUTE (LATIN SMALL LETTER I ACUTE) +test(0x00CE, 0x00EE); // LATIN CAPITAL LETTER I WITH CIRCUMFLEX (LATIN CAPITAL LETTER I CIRCUMFLEX), LATIN SMALL LETTER I WITH CIRCUMFLEX (LATIN SMALL LETTER I CIRCUMFLEX) +test(0x00CF, 0x00EF); // LATIN CAPITAL LETTER I WITH DIAERESIS (LATIN CAPITAL LETTER I DIAERESIS), LATIN SMALL LETTER I WITH DIAERESIS (LATIN SMALL LETTER I DIAERESIS) +test(0x00D0, 0x00F0); // LATIN CAPITAL LETTER ETH, LATIN SMALL LETTER ETH +test(0x00D1, 0x00F1); // LATIN CAPITAL LETTER N WITH TILDE (LATIN CAPITAL LETTER N TILDE), LATIN SMALL LETTER N WITH TILDE (LATIN SMALL LETTER N TILDE) +test(0x00D2, 0x00F2); // LATIN CAPITAL LETTER O WITH GRAVE (LATIN CAPITAL LETTER O GRAVE), LATIN SMALL LETTER O WITH GRAVE (LATIN SMALL LETTER O GRAVE) +test(0x00D3, 0x00F3); // LATIN CAPITAL LETTER O WITH ACUTE (LATIN CAPITAL LETTER O ACUTE), LATIN SMALL LETTER O WITH ACUTE (LATIN SMALL LETTER O ACUTE) +test(0x00D4, 0x00F4); // LATIN CAPITAL LETTER O WITH CIRCUMFLEX (LATIN CAPITAL LETTER O CIRCUMFLEX), LATIN SMALL LETTER O WITH CIRCUMFLEX (LATIN SMALL LETTER O CIRCUMFLEX) +test(0x00D5, 0x00F5); // LATIN CAPITAL LETTER O WITH TILDE (LATIN CAPITAL LETTER O TILDE), LATIN SMALL LETTER O WITH TILDE (LATIN SMALL LETTER O TILDE) +test(0x00D6, 0x00F6); // LATIN CAPITAL LETTER O WITH DIAERESIS (LATIN CAPITAL LETTER O DIAERESIS), LATIN SMALL LETTER O WITH DIAERESIS (LATIN SMALL LETTER O DIAERESIS) +test(0x00D8, 0x00F8); // LATIN CAPITAL LETTER O WITH STROKE (LATIN CAPITAL LETTER O SLASH), LATIN SMALL LETTER O WITH STROKE (LATIN SMALL LETTER O SLASH) +test(0x00D9, 0x00F9); // LATIN CAPITAL LETTER U WITH GRAVE (LATIN CAPITAL LETTER U GRAVE), LATIN SMALL LETTER U WITH GRAVE (LATIN SMALL LETTER U GRAVE) +test(0x00DA, 0x00FA); // LATIN CAPITAL LETTER U WITH ACUTE (LATIN CAPITAL LETTER U ACUTE), LATIN SMALL LETTER U WITH ACUTE (LATIN SMALL LETTER U ACUTE) +test(0x00DB, 0x00FB); // LATIN CAPITAL LETTER U WITH CIRCUMFLEX (LATIN CAPITAL LETTER U CIRCUMFLEX), LATIN SMALL LETTER U WITH CIRCUMFLEX (LATIN SMALL LETTER U CIRCUMFLEX) +test(0x00DC, 0x00FC); // LATIN CAPITAL LETTER U WITH DIAERESIS (LATIN CAPITAL LETTER U DIAERESIS), LATIN SMALL LETTER U WITH DIAERESIS (LATIN SMALL LETTER U DIAERESIS) +test(0x00DD, 0x00FD); // LATIN CAPITAL LETTER Y WITH ACUTE (LATIN CAPITAL LETTER Y ACUTE), LATIN SMALL LETTER Y WITH ACUTE (LATIN SMALL LETTER Y ACUTE) +test(0x00DE, 0x00FE); // LATIN CAPITAL LETTER THORN, LATIN SMALL LETTER THORN +test(0x00DF, 0x1E9E); // LATIN SMALL LETTER SHARP S, LATIN CAPITAL LETTER SHARP S +test(0x00E0, 0x00C0); // LATIN SMALL LETTER A WITH GRAVE (LATIN SMALL LETTER A GRAVE), LATIN CAPITAL LETTER A WITH GRAVE (LATIN CAPITAL LETTER A GRAVE) +test(0x00E1, 0x00C1); // LATIN SMALL LETTER A WITH ACUTE (LATIN SMALL LETTER A ACUTE), LATIN CAPITAL LETTER A WITH ACUTE (LATIN CAPITAL LETTER A ACUTE) +test(0x00E2, 0x00C2); // LATIN SMALL LETTER A WITH CIRCUMFLEX (LATIN SMALL LETTER A CIRCUMFLEX), LATIN CAPITAL LETTER A WITH CIRCUMFLEX (LATIN CAPITAL LETTER A CIRCUMFLEX) +test(0x00E3, 0x00C3); // LATIN SMALL LETTER A WITH TILDE (LATIN SMALL LETTER A TILDE), LATIN CAPITAL LETTER A WITH TILDE (LATIN CAPITAL LETTER A TILDE) +test(0x00E4, 0x00C4); // LATIN SMALL LETTER A WITH DIAERESIS (LATIN SMALL LETTER A DIAERESIS), LATIN CAPITAL LETTER A WITH DIAERESIS (LATIN CAPITAL LETTER A DIAERESIS) +test(0x00E5, 0x00C5, 0x212B); // LATIN SMALL LETTER A WITH RING ABOVE (LATIN SMALL LETTER A RING), LATIN CAPITAL LETTER A WITH RING ABOVE (LATIN CAPITAL LETTER A RING), ANGSTROM SIGN (ANGSTROM UNIT) +test(0x00E6, 0x00C6); // LATIN SMALL LETTER AE (LATIN SMALL LETTER A E), LATIN CAPITAL LETTER AE (LATIN CAPITAL LETTER A E) +test(0x00E7, 0x00C7); // LATIN SMALL LETTER C WITH CEDILLA (LATIN SMALL LETTER C CEDILLA), LATIN CAPITAL LETTER C WITH CEDILLA (LATIN CAPITAL LETTER C CEDILLA) +test(0x00E8, 0x00C8); // LATIN SMALL LETTER E WITH GRAVE (LATIN SMALL LETTER E GRAVE), LATIN CAPITAL LETTER E WITH GRAVE (LATIN CAPITAL LETTER E GRAVE) +test(0x00E9, 0x00C9); // LATIN SMALL LETTER E WITH ACUTE (LATIN SMALL LETTER E ACUTE), LATIN CAPITAL LETTER E WITH ACUTE (LATIN CAPITAL LETTER E ACUTE) +test(0x00EA, 0x00CA); // LATIN SMALL LETTER E WITH CIRCUMFLEX (LATIN SMALL LETTER E CIRCUMFLEX), LATIN CAPITAL LETTER E WITH CIRCUMFLEX (LATIN CAPITAL LETTER E CIRCUMFLEX) +test(0x00EB, 0x00CB); // LATIN SMALL LETTER E WITH DIAERESIS (LATIN SMALL LETTER E DIAERESIS), LATIN CAPITAL LETTER E WITH DIAERESIS (LATIN CAPITAL LETTER E DIAERESIS) +test(0x00EC, 0x00CC); // LATIN SMALL LETTER I WITH GRAVE (LATIN SMALL LETTER I GRAVE), LATIN CAPITAL LETTER I WITH GRAVE (LATIN CAPITAL LETTER I GRAVE) +test(0x00ED, 0x00CD); // LATIN SMALL LETTER I WITH ACUTE (LATIN SMALL LETTER I ACUTE), LATIN CAPITAL LETTER I WITH ACUTE (LATIN CAPITAL LETTER I ACUTE) +test(0x00EE, 0x00CE); // LATIN SMALL LETTER I WITH CIRCUMFLEX (LATIN SMALL LETTER I CIRCUMFLEX), LATIN CAPITAL LETTER I WITH CIRCUMFLEX (LATIN CAPITAL LETTER I CIRCUMFLEX) +test(0x00EF, 0x00CF); // LATIN SMALL LETTER I WITH DIAERESIS (LATIN SMALL LETTER I DIAERESIS), LATIN CAPITAL LETTER I WITH DIAERESIS (LATIN CAPITAL LETTER I DIAERESIS) +test(0x00F0, 0x00D0); // LATIN SMALL LETTER ETH, LATIN CAPITAL LETTER ETH +test(0x00F1, 0x00D1); // LATIN SMALL LETTER N WITH TILDE (LATIN SMALL LETTER N TILDE), LATIN CAPITAL LETTER N WITH TILDE (LATIN CAPITAL LETTER N TILDE) +test(0x00F2, 0x00D2); // LATIN SMALL LETTER O WITH GRAVE (LATIN SMALL LETTER O GRAVE), LATIN CAPITAL LETTER O WITH GRAVE (LATIN CAPITAL LETTER O GRAVE) +test(0x00F3, 0x00D3); // LATIN SMALL LETTER O WITH ACUTE (LATIN SMALL LETTER O ACUTE), LATIN CAPITAL LETTER O WITH ACUTE (LATIN CAPITAL LETTER O ACUTE) +test(0x00F4, 0x00D4); // LATIN SMALL LETTER O WITH CIRCUMFLEX (LATIN SMALL LETTER O CIRCUMFLEX), LATIN CAPITAL LETTER O WITH CIRCUMFLEX (LATIN CAPITAL LETTER O CIRCUMFLEX) +test(0x00F5, 0x00D5); // LATIN SMALL LETTER O WITH TILDE (LATIN SMALL LETTER O TILDE), LATIN CAPITAL LETTER O WITH TILDE (LATIN CAPITAL LETTER O TILDE) +test(0x00F6, 0x00D6); // LATIN SMALL LETTER O WITH DIAERESIS (LATIN SMALL LETTER O DIAERESIS), LATIN CAPITAL LETTER O WITH DIAERESIS (LATIN CAPITAL LETTER O DIAERESIS) +test(0x00F8, 0x00D8); // LATIN SMALL LETTER O WITH STROKE (LATIN SMALL LETTER O SLASH), LATIN CAPITAL LETTER O WITH STROKE (LATIN CAPITAL LETTER O SLASH) +test(0x00F9, 0x00D9); // LATIN SMALL LETTER U WITH GRAVE (LATIN SMALL LETTER U GRAVE), LATIN CAPITAL LETTER U WITH GRAVE (LATIN CAPITAL LETTER U GRAVE) +test(0x00FA, 0x00DA); // LATIN SMALL LETTER U WITH ACUTE (LATIN SMALL LETTER U ACUTE), LATIN CAPITAL LETTER U WITH ACUTE (LATIN CAPITAL LETTER U ACUTE) +test(0x00FB, 0x00DB); // LATIN SMALL LETTER U WITH CIRCUMFLEX (LATIN SMALL LETTER U CIRCUMFLEX), LATIN CAPITAL LETTER U WITH CIRCUMFLEX (LATIN CAPITAL LETTER U CIRCUMFLEX) +test(0x00FC, 0x00DC); // LATIN SMALL LETTER U WITH DIAERESIS (LATIN SMALL LETTER U DIAERESIS), LATIN CAPITAL LETTER U WITH DIAERESIS (LATIN CAPITAL LETTER U DIAERESIS) +test(0x00FD, 0x00DD); // LATIN SMALL LETTER Y WITH ACUTE (LATIN SMALL LETTER Y ACUTE), LATIN CAPITAL LETTER Y WITH ACUTE (LATIN CAPITAL LETTER Y ACUTE) +test(0x00FE, 0x00DE); // LATIN SMALL LETTER THORN, LATIN CAPITAL LETTER THORN +test(0x00FF, 0x0178); // LATIN SMALL LETTER Y WITH DIAERESIS (LATIN SMALL LETTER Y DIAERESIS), LATIN CAPITAL LETTER Y WITH DIAERESIS (LATIN CAPITAL LETTER Y DIAERESIS) +test(0x0100, 0x0101); // LATIN CAPITAL LETTER A WITH MACRON (LATIN CAPITAL LETTER A MACRON), LATIN SMALL LETTER A WITH MACRON (LATIN SMALL LETTER A MACRON) +test(0x0101, 0x0100); // LATIN SMALL LETTER A WITH MACRON (LATIN SMALL LETTER A MACRON), LATIN CAPITAL LETTER A WITH MACRON (LATIN CAPITAL LETTER A MACRON) +test(0x0102, 0x0103); // LATIN CAPITAL LETTER A WITH BREVE (LATIN CAPITAL LETTER A BREVE), LATIN SMALL LETTER A WITH BREVE (LATIN SMALL LETTER A BREVE) +test(0x0103, 0x0102); // LATIN SMALL LETTER A WITH BREVE (LATIN SMALL LETTER A BREVE), LATIN CAPITAL LETTER A WITH BREVE (LATIN CAPITAL LETTER A BREVE) +test(0x0104, 0x0105); // LATIN CAPITAL LETTER A WITH OGONEK (LATIN CAPITAL LETTER A OGONEK), LATIN SMALL LETTER A WITH OGONEK (LATIN SMALL LETTER A OGONEK) +test(0x0105, 0x0104); // LATIN SMALL LETTER A WITH OGONEK (LATIN SMALL LETTER A OGONEK), LATIN CAPITAL LETTER A WITH OGONEK (LATIN CAPITAL LETTER A OGONEK) +test(0x0106, 0x0107); // LATIN CAPITAL LETTER C WITH ACUTE (LATIN CAPITAL LETTER C ACUTE), LATIN SMALL LETTER C WITH ACUTE (LATIN SMALL LETTER C ACUTE) +test(0x0107, 0x0106); // LATIN SMALL LETTER C WITH ACUTE (LATIN SMALL LETTER C ACUTE), LATIN CAPITAL LETTER C WITH ACUTE (LATIN CAPITAL LETTER C ACUTE) +test(0x0108, 0x0109); // LATIN CAPITAL LETTER C WITH CIRCUMFLEX (LATIN CAPITAL LETTER C CIRCUMFLEX), LATIN SMALL LETTER C WITH CIRCUMFLEX (LATIN SMALL LETTER C CIRCUMFLEX) +test(0x0109, 0x0108); // LATIN SMALL LETTER C WITH CIRCUMFLEX (LATIN SMALL LETTER C CIRCUMFLEX), LATIN CAPITAL LETTER C WITH CIRCUMFLEX (LATIN CAPITAL LETTER C CIRCUMFLEX) +test(0x010A, 0x010B); // LATIN CAPITAL LETTER C WITH DOT ABOVE (LATIN CAPITAL LETTER C DOT), LATIN SMALL LETTER C WITH DOT ABOVE (LATIN SMALL LETTER C DOT) +test(0x010B, 0x010A); // LATIN SMALL LETTER C WITH DOT ABOVE (LATIN SMALL LETTER C DOT), LATIN CAPITAL LETTER C WITH DOT ABOVE (LATIN CAPITAL LETTER C DOT) +test(0x010C, 0x010D); // LATIN CAPITAL LETTER C WITH CARON (LATIN CAPITAL LETTER C HACEK), LATIN SMALL LETTER C WITH CARON (LATIN SMALL LETTER C HACEK) +test(0x010D, 0x010C); // LATIN SMALL LETTER C WITH CARON (LATIN SMALL LETTER C HACEK), LATIN CAPITAL LETTER C WITH CARON (LATIN CAPITAL LETTER C HACEK) +test(0x010E, 0x010F); // LATIN CAPITAL LETTER D WITH CARON (LATIN CAPITAL LETTER D HACEK), LATIN SMALL LETTER D WITH CARON (LATIN SMALL LETTER D HACEK) +test(0x010F, 0x010E); // LATIN SMALL LETTER D WITH CARON (LATIN SMALL LETTER D HACEK), LATIN CAPITAL LETTER D WITH CARON (LATIN CAPITAL LETTER D HACEK) +test(0x0110, 0x0111); // LATIN CAPITAL LETTER D WITH STROKE (LATIN CAPITAL LETTER D BAR), LATIN SMALL LETTER D WITH STROKE (LATIN SMALL LETTER D BAR) +test(0x0111, 0x0110); // LATIN SMALL LETTER D WITH STROKE (LATIN SMALL LETTER D BAR), LATIN CAPITAL LETTER D WITH STROKE (LATIN CAPITAL LETTER D BAR) +test(0x0112, 0x0113); // LATIN CAPITAL LETTER E WITH MACRON (LATIN CAPITAL LETTER E MACRON), LATIN SMALL LETTER E WITH MACRON (LATIN SMALL LETTER E MACRON) +test(0x0113, 0x0112); // LATIN SMALL LETTER E WITH MACRON (LATIN SMALL LETTER E MACRON), LATIN CAPITAL LETTER E WITH MACRON (LATIN CAPITAL LETTER E MACRON) +test(0x0114, 0x0115); // LATIN CAPITAL LETTER E WITH BREVE (LATIN CAPITAL LETTER E BREVE), LATIN SMALL LETTER E WITH BREVE (LATIN SMALL LETTER E BREVE) +test(0x0115, 0x0114); // LATIN SMALL LETTER E WITH BREVE (LATIN SMALL LETTER E BREVE), LATIN CAPITAL LETTER E WITH BREVE (LATIN CAPITAL LETTER E BREVE) +test(0x0116, 0x0117); // LATIN CAPITAL LETTER E WITH DOT ABOVE (LATIN CAPITAL LETTER E DOT), LATIN SMALL LETTER E WITH DOT ABOVE (LATIN SMALL LETTER E DOT) +test(0x0117, 0x0116); // LATIN SMALL LETTER E WITH DOT ABOVE (LATIN SMALL LETTER E DOT), LATIN CAPITAL LETTER E WITH DOT ABOVE (LATIN CAPITAL LETTER E DOT) +test(0x0118, 0x0119); // LATIN CAPITAL LETTER E WITH OGONEK (LATIN CAPITAL LETTER E OGONEK), LATIN SMALL LETTER E WITH OGONEK (LATIN SMALL LETTER E OGONEK) +test(0x0119, 0x0118); // LATIN SMALL LETTER E WITH OGONEK (LATIN SMALL LETTER E OGONEK), LATIN CAPITAL LETTER E WITH OGONEK (LATIN CAPITAL LETTER E OGONEK) +test(0x011A, 0x011B); // LATIN CAPITAL LETTER E WITH CARON (LATIN CAPITAL LETTER E HACEK), LATIN SMALL LETTER E WITH CARON (LATIN SMALL LETTER E HACEK) +test(0x011B, 0x011A); // LATIN SMALL LETTER E WITH CARON (LATIN SMALL LETTER E HACEK), LATIN CAPITAL LETTER E WITH CARON (LATIN CAPITAL LETTER E HACEK) +test(0x011C, 0x011D); // LATIN CAPITAL LETTER G WITH CIRCUMFLEX (LATIN CAPITAL LETTER G CIRCUMFLEX), LATIN SMALL LETTER G WITH CIRCUMFLEX (LATIN SMALL LETTER G CIRCUMFLEX) +test(0x011D, 0x011C); // LATIN SMALL LETTER G WITH CIRCUMFLEX (LATIN SMALL LETTER G CIRCUMFLEX), LATIN CAPITAL LETTER G WITH CIRCUMFLEX (LATIN CAPITAL LETTER G CIRCUMFLEX) +test(0x011E, 0x011F); // LATIN CAPITAL LETTER G WITH BREVE (LATIN CAPITAL LETTER G BREVE), LATIN SMALL LETTER G WITH BREVE (LATIN SMALL LETTER G BREVE) +test(0x011F, 0x011E); // LATIN SMALL LETTER G WITH BREVE (LATIN SMALL LETTER G BREVE), LATIN CAPITAL LETTER G WITH BREVE (LATIN CAPITAL LETTER G BREVE) +test(0x0120, 0x0121); // LATIN CAPITAL LETTER G WITH DOT ABOVE (LATIN CAPITAL LETTER G DOT), LATIN SMALL LETTER G WITH DOT ABOVE (LATIN SMALL LETTER G DOT) +test(0x0121, 0x0120); // LATIN SMALL LETTER G WITH DOT ABOVE (LATIN SMALL LETTER G DOT), LATIN CAPITAL LETTER G WITH DOT ABOVE (LATIN CAPITAL LETTER G DOT) +test(0x0122, 0x0123); // LATIN CAPITAL LETTER G WITH CEDILLA (LATIN CAPITAL LETTER G CEDILLA), LATIN SMALL LETTER G WITH CEDILLA (LATIN SMALL LETTER G CEDILLA) +test(0x0123, 0x0122); // LATIN SMALL LETTER G WITH CEDILLA (LATIN SMALL LETTER G CEDILLA), LATIN CAPITAL LETTER G WITH CEDILLA (LATIN CAPITAL LETTER G CEDILLA) +test(0x0124, 0x0125); // LATIN CAPITAL LETTER H WITH CIRCUMFLEX (LATIN CAPITAL LETTER H CIRCUMFLEX), LATIN SMALL LETTER H WITH CIRCUMFLEX (LATIN SMALL LETTER H CIRCUMFLEX) +test(0x0125, 0x0124); // LATIN SMALL LETTER H WITH CIRCUMFLEX (LATIN SMALL LETTER H CIRCUMFLEX), LATIN CAPITAL LETTER H WITH CIRCUMFLEX (LATIN CAPITAL LETTER H CIRCUMFLEX) +test(0x0126, 0x0127); // LATIN CAPITAL LETTER H WITH STROKE (LATIN CAPITAL LETTER H BAR), LATIN SMALL LETTER H WITH STROKE (LATIN SMALL LETTER H BAR) +test(0x0127, 0x0126); // LATIN SMALL LETTER H WITH STROKE (LATIN SMALL LETTER H BAR), LATIN CAPITAL LETTER H WITH STROKE (LATIN CAPITAL LETTER H BAR) +test(0x0128, 0x0129); // LATIN CAPITAL LETTER I WITH TILDE (LATIN CAPITAL LETTER I TILDE), LATIN SMALL LETTER I WITH TILDE (LATIN SMALL LETTER I TILDE) +test(0x0129, 0x0128); // LATIN SMALL LETTER I WITH TILDE (LATIN SMALL LETTER I TILDE), LATIN CAPITAL LETTER I WITH TILDE (LATIN CAPITAL LETTER I TILDE) +test(0x012A, 0x012B); // LATIN CAPITAL LETTER I WITH MACRON (LATIN CAPITAL LETTER I MACRON), LATIN SMALL LETTER I WITH MACRON (LATIN SMALL LETTER I MACRON) +test(0x012B, 0x012A); // LATIN SMALL LETTER I WITH MACRON (LATIN SMALL LETTER I MACRON), LATIN CAPITAL LETTER I WITH MACRON (LATIN CAPITAL LETTER I MACRON) +test(0x012C, 0x012D); // LATIN CAPITAL LETTER I WITH BREVE (LATIN CAPITAL LETTER I BREVE), LATIN SMALL LETTER I WITH BREVE (LATIN SMALL LETTER I BREVE) +test(0x012D, 0x012C); // LATIN SMALL LETTER I WITH BREVE (LATIN SMALL LETTER I BREVE), LATIN CAPITAL LETTER I WITH BREVE (LATIN CAPITAL LETTER I BREVE) +test(0x012E, 0x012F); // LATIN CAPITAL LETTER I WITH OGONEK (LATIN CAPITAL LETTER I OGONEK), LATIN SMALL LETTER I WITH OGONEK (LATIN SMALL LETTER I OGONEK) +test(0x012F, 0x012E); // LATIN SMALL LETTER I WITH OGONEK (LATIN SMALL LETTER I OGONEK), LATIN CAPITAL LETTER I WITH OGONEK (LATIN CAPITAL LETTER I OGONEK) +test(0x0132, 0x0133); // LATIN CAPITAL LIGATURE IJ (LATIN CAPITAL LETTER I J), LATIN SMALL LIGATURE IJ (LATIN SMALL LETTER I J) +test(0x0133, 0x0132); // LATIN SMALL LIGATURE IJ (LATIN SMALL LETTER I J), LATIN CAPITAL LIGATURE IJ (LATIN CAPITAL LETTER I J) +test(0x0134, 0x0135); // LATIN CAPITAL LETTER J WITH CIRCUMFLEX (LATIN CAPITAL LETTER J CIRCUMFLEX), LATIN SMALL LETTER J WITH CIRCUMFLEX (LATIN SMALL LETTER J CIRCUMFLEX) +test(0x0135, 0x0134); // LATIN SMALL LETTER J WITH CIRCUMFLEX (LATIN SMALL LETTER J CIRCUMFLEX), LATIN CAPITAL LETTER J WITH CIRCUMFLEX (LATIN CAPITAL LETTER J CIRCUMFLEX) +test(0x0136, 0x0137); // LATIN CAPITAL LETTER K WITH CEDILLA (LATIN CAPITAL LETTER K CEDILLA), LATIN SMALL LETTER K WITH CEDILLA (LATIN SMALL LETTER K CEDILLA) +test(0x0137, 0x0136); // LATIN SMALL LETTER K WITH CEDILLA (LATIN SMALL LETTER K CEDILLA), LATIN CAPITAL LETTER K WITH CEDILLA (LATIN CAPITAL LETTER K CEDILLA) +test(0x0139, 0x013A); // LATIN CAPITAL LETTER L WITH ACUTE (LATIN CAPITAL LETTER L ACUTE), LATIN SMALL LETTER L WITH ACUTE (LATIN SMALL LETTER L ACUTE) +test(0x013A, 0x0139); // LATIN SMALL LETTER L WITH ACUTE (LATIN SMALL LETTER L ACUTE), LATIN CAPITAL LETTER L WITH ACUTE (LATIN CAPITAL LETTER L ACUTE) +test(0x013B, 0x013C); // LATIN CAPITAL LETTER L WITH CEDILLA (LATIN CAPITAL LETTER L CEDILLA), LATIN SMALL LETTER L WITH CEDILLA (LATIN SMALL LETTER L CEDILLA) +test(0x013C, 0x013B); // LATIN SMALL LETTER L WITH CEDILLA (LATIN SMALL LETTER L CEDILLA), LATIN CAPITAL LETTER L WITH CEDILLA (LATIN CAPITAL LETTER L CEDILLA) +test(0x013D, 0x013E); // LATIN CAPITAL LETTER L WITH CARON (LATIN CAPITAL LETTER L HACEK), LATIN SMALL LETTER L WITH CARON (LATIN SMALL LETTER L HACEK) +test(0x013E, 0x013D); // LATIN SMALL LETTER L WITH CARON (LATIN SMALL LETTER L HACEK), LATIN CAPITAL LETTER L WITH CARON (LATIN CAPITAL LETTER L HACEK) +test(0x013F, 0x0140); // LATIN CAPITAL LETTER L WITH MIDDLE DOT, LATIN SMALL LETTER L WITH MIDDLE DOT +test(0x0140, 0x013F); // LATIN SMALL LETTER L WITH MIDDLE DOT, LATIN CAPITAL LETTER L WITH MIDDLE DOT +test(0x0141, 0x0142); // LATIN CAPITAL LETTER L WITH STROKE (LATIN CAPITAL LETTER L SLASH), LATIN SMALL LETTER L WITH STROKE (LATIN SMALL LETTER L SLASH) +test(0x0142, 0x0141); // LATIN SMALL LETTER L WITH STROKE (LATIN SMALL LETTER L SLASH), LATIN CAPITAL LETTER L WITH STROKE (LATIN CAPITAL LETTER L SLASH) +test(0x0143, 0x0144); // LATIN CAPITAL LETTER N WITH ACUTE (LATIN CAPITAL LETTER N ACUTE), LATIN SMALL LETTER N WITH ACUTE (LATIN SMALL LETTER N ACUTE) +test(0x0144, 0x0143); // LATIN SMALL LETTER N WITH ACUTE (LATIN SMALL LETTER N ACUTE), LATIN CAPITAL LETTER N WITH ACUTE (LATIN CAPITAL LETTER N ACUTE) +test(0x0145, 0x0146); // LATIN CAPITAL LETTER N WITH CEDILLA (LATIN CAPITAL LETTER N CEDILLA), LATIN SMALL LETTER N WITH CEDILLA (LATIN SMALL LETTER N CEDILLA) +test(0x0146, 0x0145); // LATIN SMALL LETTER N WITH CEDILLA (LATIN SMALL LETTER N CEDILLA), LATIN CAPITAL LETTER N WITH CEDILLA (LATIN CAPITAL LETTER N CEDILLA) +test(0x0147, 0x0148); // LATIN CAPITAL LETTER N WITH CARON (LATIN CAPITAL LETTER N HACEK), LATIN SMALL LETTER N WITH CARON (LATIN SMALL LETTER N HACEK) +test(0x0148, 0x0147); // LATIN SMALL LETTER N WITH CARON (LATIN SMALL LETTER N HACEK), LATIN CAPITAL LETTER N WITH CARON (LATIN CAPITAL LETTER N HACEK) +test(0x014A, 0x014B); // LATIN CAPITAL LETTER ENG, LATIN SMALL LETTER ENG +test(0x014B, 0x014A); // LATIN SMALL LETTER ENG, LATIN CAPITAL LETTER ENG +test(0x014C, 0x014D); // LATIN CAPITAL LETTER O WITH MACRON (LATIN CAPITAL LETTER O MACRON), LATIN SMALL LETTER O WITH MACRON (LATIN SMALL LETTER O MACRON) +test(0x014D, 0x014C); // LATIN SMALL LETTER O WITH MACRON (LATIN SMALL LETTER O MACRON), LATIN CAPITAL LETTER O WITH MACRON (LATIN CAPITAL LETTER O MACRON) +test(0x014E, 0x014F); // LATIN CAPITAL LETTER O WITH BREVE (LATIN CAPITAL LETTER O BREVE), LATIN SMALL LETTER O WITH BREVE (LATIN SMALL LETTER O BREVE) +test(0x014F, 0x014E); // LATIN SMALL LETTER O WITH BREVE (LATIN SMALL LETTER O BREVE), LATIN CAPITAL LETTER O WITH BREVE (LATIN CAPITAL LETTER O BREVE) +test(0x0150, 0x0151); // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE (LATIN CAPITAL LETTER O DOUBLE ACUTE), LATIN SMALL LETTER O WITH DOUBLE ACUTE (LATIN SMALL LETTER O DOUBLE ACUTE) +test(0x0151, 0x0150); // LATIN SMALL LETTER O WITH DOUBLE ACUTE (LATIN SMALL LETTER O DOUBLE ACUTE), LATIN CAPITAL LETTER O WITH DOUBLE ACUTE (LATIN CAPITAL LETTER O DOUBLE ACUTE) +test(0x0152, 0x0153); // LATIN CAPITAL LIGATURE OE (LATIN CAPITAL LETTER O E), LATIN SMALL LIGATURE OE (LATIN SMALL LETTER O E) +test(0x0153, 0x0152); // LATIN SMALL LIGATURE OE (LATIN SMALL LETTER O E), LATIN CAPITAL LIGATURE OE (LATIN CAPITAL LETTER O E) +test(0x0154, 0x0155); // LATIN CAPITAL LETTER R WITH ACUTE (LATIN CAPITAL LETTER R ACUTE), LATIN SMALL LETTER R WITH ACUTE (LATIN SMALL LETTER R ACUTE) +test(0x0155, 0x0154); // LATIN SMALL LETTER R WITH ACUTE (LATIN SMALL LETTER R ACUTE), LATIN CAPITAL LETTER R WITH ACUTE (LATIN CAPITAL LETTER R ACUTE) +test(0x0156, 0x0157); // LATIN CAPITAL LETTER R WITH CEDILLA (LATIN CAPITAL LETTER R CEDILLA), LATIN SMALL LETTER R WITH CEDILLA (LATIN SMALL LETTER R CEDILLA) +test(0x0157, 0x0156); // LATIN SMALL LETTER R WITH CEDILLA (LATIN SMALL LETTER R CEDILLA), LATIN CAPITAL LETTER R WITH CEDILLA (LATIN CAPITAL LETTER R CEDILLA) +test(0x0158, 0x0159); // LATIN CAPITAL LETTER R WITH CARON (LATIN CAPITAL LETTER R HACEK), LATIN SMALL LETTER R WITH CARON (LATIN SMALL LETTER R HACEK) +test(0x0159, 0x0158); // LATIN SMALL LETTER R WITH CARON (LATIN SMALL LETTER R HACEK), LATIN CAPITAL LETTER R WITH CARON (LATIN CAPITAL LETTER R HACEK) +test(0x015A, 0x015B); // LATIN CAPITAL LETTER S WITH ACUTE (LATIN CAPITAL LETTER S ACUTE), LATIN SMALL LETTER S WITH ACUTE (LATIN SMALL LETTER S ACUTE) +test(0x015B, 0x015A); // LATIN SMALL LETTER S WITH ACUTE (LATIN SMALL LETTER S ACUTE), LATIN CAPITAL LETTER S WITH ACUTE (LATIN CAPITAL LETTER S ACUTE) +test(0x015C, 0x015D); // LATIN CAPITAL LETTER S WITH CIRCUMFLEX (LATIN CAPITAL LETTER S CIRCUMFLEX), LATIN SMALL LETTER S WITH CIRCUMFLEX (LATIN SMALL LETTER S CIRCUMFLEX) +test(0x015D, 0x015C); // LATIN SMALL LETTER S WITH CIRCUMFLEX (LATIN SMALL LETTER S CIRCUMFLEX), LATIN CAPITAL LETTER S WITH CIRCUMFLEX (LATIN CAPITAL LETTER S CIRCUMFLEX) +test(0x015E, 0x015F); // LATIN CAPITAL LETTER S WITH CEDILLA (LATIN CAPITAL LETTER S CEDILLA), LATIN SMALL LETTER S WITH CEDILLA (LATIN SMALL LETTER S CEDILLA) +test(0x015F, 0x015E); // LATIN SMALL LETTER S WITH CEDILLA (LATIN SMALL LETTER S CEDILLA), LATIN CAPITAL LETTER S WITH CEDILLA (LATIN CAPITAL LETTER S CEDILLA) +test(0x0160, 0x0161); // LATIN CAPITAL LETTER S WITH CARON (LATIN CAPITAL LETTER S HACEK), LATIN SMALL LETTER S WITH CARON (LATIN SMALL LETTER S HACEK) +test(0x0161, 0x0160); // LATIN SMALL LETTER S WITH CARON (LATIN SMALL LETTER S HACEK), LATIN CAPITAL LETTER S WITH CARON (LATIN CAPITAL LETTER S HACEK) +test(0x0162, 0x0163); // LATIN CAPITAL LETTER T WITH CEDILLA (LATIN CAPITAL LETTER T CEDILLA), LATIN SMALL LETTER T WITH CEDILLA (LATIN SMALL LETTER T CEDILLA) +test(0x0163, 0x0162); // LATIN SMALL LETTER T WITH CEDILLA (LATIN SMALL LETTER T CEDILLA), LATIN CAPITAL LETTER T WITH CEDILLA (LATIN CAPITAL LETTER T CEDILLA) +test(0x0164, 0x0165); // LATIN CAPITAL LETTER T WITH CARON (LATIN CAPITAL LETTER T HACEK), LATIN SMALL LETTER T WITH CARON (LATIN SMALL LETTER T HACEK) +test(0x0165, 0x0164); // LATIN SMALL LETTER T WITH CARON (LATIN SMALL LETTER T HACEK), LATIN CAPITAL LETTER T WITH CARON (LATIN CAPITAL LETTER T HACEK) +test(0x0166, 0x0167); // LATIN CAPITAL LETTER T WITH STROKE (LATIN CAPITAL LETTER T BAR), LATIN SMALL LETTER T WITH STROKE (LATIN SMALL LETTER T BAR) +test(0x0167, 0x0166); // LATIN SMALL LETTER T WITH STROKE (LATIN SMALL LETTER T BAR), LATIN CAPITAL LETTER T WITH STROKE (LATIN CAPITAL LETTER T BAR) +test(0x0168, 0x0169); // LATIN CAPITAL LETTER U WITH TILDE (LATIN CAPITAL LETTER U TILDE), LATIN SMALL LETTER U WITH TILDE (LATIN SMALL LETTER U TILDE) +test(0x0169, 0x0168); // LATIN SMALL LETTER U WITH TILDE (LATIN SMALL LETTER U TILDE), LATIN CAPITAL LETTER U WITH TILDE (LATIN CAPITAL LETTER U TILDE) +test(0x016A, 0x016B); // LATIN CAPITAL LETTER U WITH MACRON (LATIN CAPITAL LETTER U MACRON), LATIN SMALL LETTER U WITH MACRON (LATIN SMALL LETTER U MACRON) +test(0x016B, 0x016A); // LATIN SMALL LETTER U WITH MACRON (LATIN SMALL LETTER U MACRON), LATIN CAPITAL LETTER U WITH MACRON (LATIN CAPITAL LETTER U MACRON) +test(0x016C, 0x016D); // LATIN CAPITAL LETTER U WITH BREVE (LATIN CAPITAL LETTER U BREVE), LATIN SMALL LETTER U WITH BREVE (LATIN SMALL LETTER U BREVE) +test(0x016D, 0x016C); // LATIN SMALL LETTER U WITH BREVE (LATIN SMALL LETTER U BREVE), LATIN CAPITAL LETTER U WITH BREVE (LATIN CAPITAL LETTER U BREVE) +test(0x016E, 0x016F); // LATIN CAPITAL LETTER U WITH RING ABOVE (LATIN CAPITAL LETTER U RING), LATIN SMALL LETTER U WITH RING ABOVE (LATIN SMALL LETTER U RING) +test(0x016F, 0x016E); // LATIN SMALL LETTER U WITH RING ABOVE (LATIN SMALL LETTER U RING), LATIN CAPITAL LETTER U WITH RING ABOVE (LATIN CAPITAL LETTER U RING) +test(0x0170, 0x0171); // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE (LATIN CAPITAL LETTER U DOUBLE ACUTE), LATIN SMALL LETTER U WITH DOUBLE ACUTE (LATIN SMALL LETTER U DOUBLE ACUTE) +test(0x0171, 0x0170); // LATIN SMALL LETTER U WITH DOUBLE ACUTE (LATIN SMALL LETTER U DOUBLE ACUTE), LATIN CAPITAL LETTER U WITH DOUBLE ACUTE (LATIN CAPITAL LETTER U DOUBLE ACUTE) +test(0x0172, 0x0173); // LATIN CAPITAL LETTER U WITH OGONEK (LATIN CAPITAL LETTER U OGONEK), LATIN SMALL LETTER U WITH OGONEK (LATIN SMALL LETTER U OGONEK) +test(0x0173, 0x0172); // LATIN SMALL LETTER U WITH OGONEK (LATIN SMALL LETTER U OGONEK), LATIN CAPITAL LETTER U WITH OGONEK (LATIN CAPITAL LETTER U OGONEK) +test(0x0174, 0x0175); // LATIN CAPITAL LETTER W WITH CIRCUMFLEX (LATIN CAPITAL LETTER W CIRCUMFLEX), LATIN SMALL LETTER W WITH CIRCUMFLEX (LATIN SMALL LETTER W CIRCUMFLEX) +test(0x0175, 0x0174); // LATIN SMALL LETTER W WITH CIRCUMFLEX (LATIN SMALL LETTER W CIRCUMFLEX), LATIN CAPITAL LETTER W WITH CIRCUMFLEX (LATIN CAPITAL LETTER W CIRCUMFLEX) +test(0x0176, 0x0177); // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX (LATIN CAPITAL LETTER Y CIRCUMFLEX), LATIN SMALL LETTER Y WITH CIRCUMFLEX (LATIN SMALL LETTER Y CIRCUMFLEX) +test(0x0177, 0x0176); // LATIN SMALL LETTER Y WITH CIRCUMFLEX (LATIN SMALL LETTER Y CIRCUMFLEX), LATIN CAPITAL LETTER Y WITH CIRCUMFLEX (LATIN CAPITAL LETTER Y CIRCUMFLEX) +test(0x0178, 0x00FF); // LATIN CAPITAL LETTER Y WITH DIAERESIS (LATIN CAPITAL LETTER Y DIAERESIS), LATIN SMALL LETTER Y WITH DIAERESIS (LATIN SMALL LETTER Y DIAERESIS) +test(0x0179, 0x017A); // LATIN CAPITAL LETTER Z WITH ACUTE (LATIN CAPITAL LETTER Z ACUTE), LATIN SMALL LETTER Z WITH ACUTE (LATIN SMALL LETTER Z ACUTE) +test(0x017A, 0x0179); // LATIN SMALL LETTER Z WITH ACUTE (LATIN SMALL LETTER Z ACUTE), LATIN CAPITAL LETTER Z WITH ACUTE (LATIN CAPITAL LETTER Z ACUTE) +test(0x017B, 0x017C); // LATIN CAPITAL LETTER Z WITH DOT ABOVE (LATIN CAPITAL LETTER Z DOT), LATIN SMALL LETTER Z WITH DOT ABOVE (LATIN SMALL LETTER Z DOT) +test(0x017C, 0x017B); // LATIN SMALL LETTER Z WITH DOT ABOVE (LATIN SMALL LETTER Z DOT), LATIN CAPITAL LETTER Z WITH DOT ABOVE (LATIN CAPITAL LETTER Z DOT) +test(0x017D, 0x017E); // LATIN CAPITAL LETTER Z WITH CARON (LATIN CAPITAL LETTER Z HACEK), LATIN SMALL LETTER Z WITH CARON (LATIN SMALL LETTER Z HACEK) +test(0x017E, 0x017D); // LATIN SMALL LETTER Z WITH CARON (LATIN SMALL LETTER Z HACEK), LATIN CAPITAL LETTER Z WITH CARON (LATIN CAPITAL LETTER Z HACEK) +test(0x017F, 0x0073, 0x0053); // LATIN SMALL LETTER LONG S, LATIN SMALL LETTER S, LATIN CAPITAL LETTER S +test(0x0180, 0x0243); // LATIN SMALL LETTER B WITH STROKE (LATIN SMALL LETTER B BAR), LATIN CAPITAL LETTER B WITH STROKE +test(0x0181, 0x0253); // LATIN CAPITAL LETTER B WITH HOOK (LATIN CAPITAL LETTER B HOOK), LATIN SMALL LETTER B WITH HOOK (LATIN SMALL LETTER B HOOK) +test(0x0182, 0x0183); // LATIN CAPITAL LETTER B WITH TOPBAR (LATIN CAPITAL LETTER B TOPBAR), LATIN SMALL LETTER B WITH TOPBAR (LATIN SMALL LETTER B TOPBAR) +test(0x0183, 0x0182); // LATIN SMALL LETTER B WITH TOPBAR (LATIN SMALL LETTER B TOPBAR), LATIN CAPITAL LETTER B WITH TOPBAR (LATIN CAPITAL LETTER B TOPBAR) +test(0x0184, 0x0185); // LATIN CAPITAL LETTER TONE SIX, LATIN SMALL LETTER TONE SIX +test(0x0185, 0x0184); // LATIN SMALL LETTER TONE SIX, LATIN CAPITAL LETTER TONE SIX +test(0x0186, 0x0254); // LATIN CAPITAL LETTER OPEN O, LATIN SMALL LETTER OPEN O +test(0x0187, 0x0188); // LATIN CAPITAL LETTER C WITH HOOK (LATIN CAPITAL LETTER C HOOK), LATIN SMALL LETTER C WITH HOOK (LATIN SMALL LETTER C HOOK) +test(0x0188, 0x0187); // LATIN SMALL LETTER C WITH HOOK (LATIN SMALL LETTER C HOOK), LATIN CAPITAL LETTER C WITH HOOK (LATIN CAPITAL LETTER C HOOK) +test(0x0189, 0x0256); // LATIN CAPITAL LETTER AFRICAN D, LATIN SMALL LETTER D WITH TAIL (LATIN SMALL LETTER D RETROFLEX HOOK) +test(0x018A, 0x0257); // LATIN CAPITAL LETTER D WITH HOOK (LATIN CAPITAL LETTER D HOOK), LATIN SMALL LETTER D WITH HOOK (LATIN SMALL LETTER D HOOK) +test(0x018B, 0x018C); // LATIN CAPITAL LETTER D WITH TOPBAR (LATIN CAPITAL LETTER D TOPBAR), LATIN SMALL LETTER D WITH TOPBAR (LATIN SMALL LETTER D TOPBAR) +test(0x018C, 0x018B); // LATIN SMALL LETTER D WITH TOPBAR (LATIN SMALL LETTER D TOPBAR), LATIN CAPITAL LETTER D WITH TOPBAR (LATIN CAPITAL LETTER D TOPBAR) +test(0x018E, 0x01DD); // LATIN CAPITAL LETTER REVERSED E (LATIN CAPITAL LETTER TURNED E), LATIN SMALL LETTER TURNED E +test(0x018F, 0x0259); // LATIN CAPITAL LETTER SCHWA, LATIN SMALL LETTER SCHWA +test(0x0190, 0x025B); // LATIN CAPITAL LETTER OPEN E (LATIN CAPITAL LETTER EPSILON), LATIN SMALL LETTER OPEN E (LATIN SMALL LETTER EPSILON) +test(0x0191, 0x0192); // LATIN CAPITAL LETTER F WITH HOOK (LATIN CAPITAL LETTER F HOOK), LATIN SMALL LETTER F WITH HOOK (LATIN SMALL LETTER SCRIPT F) +test(0x0192, 0x0191); // LATIN SMALL LETTER F WITH HOOK (LATIN SMALL LETTER SCRIPT F), LATIN CAPITAL LETTER F WITH HOOK (LATIN CAPITAL LETTER F HOOK) +test(0x0193, 0x0260); // LATIN CAPITAL LETTER G WITH HOOK (LATIN CAPITAL LETTER G HOOK), LATIN SMALL LETTER G WITH HOOK (LATIN SMALL LETTER G HOOK) +test(0x0194, 0x0263); // LATIN CAPITAL LETTER GAMMA, LATIN SMALL LETTER GAMMA +test(0x0195, 0x01F6); // LATIN SMALL LETTER HV (LATIN SMALL LETTER H V), LATIN CAPITAL LETTER HWAIR +test(0x0196, 0x0269); // LATIN CAPITAL LETTER IOTA, LATIN SMALL LETTER IOTA +test(0x0197, 0x0268); // LATIN CAPITAL LETTER I WITH STROKE (LATIN CAPITAL LETTER BARRED I), LATIN SMALL LETTER I WITH STROKE (LATIN SMALL LETTER BARRED I) +test(0x0198, 0x0199); // LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK), LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK) +test(0x0199, 0x0198); // LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK), LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK) +test(0x019A, 0x023D); // LATIN SMALL LETTER L WITH BAR (LATIN SMALL LETTER BARRED L), LATIN CAPITAL LETTER L WITH BAR +test(0x019C, 0x026F); // LATIN CAPITAL LETTER TURNED M, LATIN SMALL LETTER TURNED M +test(0x019D, 0x0272); // LATIN CAPITAL LETTER N WITH LEFT HOOK (LATIN CAPITAL LETTER N HOOK), LATIN SMALL LETTER N WITH LEFT HOOK (LATIN SMALL LETTER N HOOK) +test(0x019E, 0x0220); // LATIN SMALL LETTER N WITH LONG RIGHT LEG, LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +test(0x019F, 0x0275); // LATIN CAPITAL LETTER O WITH MIDDLE TILDE (LATIN CAPITAL LETTER BARRED O), LATIN SMALL LETTER BARRED O +test(0x01A0, 0x01A1); // LATIN CAPITAL LETTER O WITH HORN (LATIN CAPITAL LETTER O HORN), LATIN SMALL LETTER O WITH HORN (LATIN SMALL LETTER O HORN) +test(0x01A1, 0x01A0); // LATIN SMALL LETTER O WITH HORN (LATIN SMALL LETTER O HORN), LATIN CAPITAL LETTER O WITH HORN (LATIN CAPITAL LETTER O HORN) +test(0x01A2, 0x01A3); // LATIN CAPITAL LETTER OI (LATIN CAPITAL LETTER O I), LATIN SMALL LETTER OI (LATIN SMALL LETTER O I) +test(0x01A3, 0x01A2); // LATIN SMALL LETTER OI (LATIN SMALL LETTER O I), LATIN CAPITAL LETTER OI (LATIN CAPITAL LETTER O I) +test(0x01A4, 0x01A5); // LATIN CAPITAL LETTER P WITH HOOK (LATIN CAPITAL LETTER P HOOK), LATIN SMALL LETTER P WITH HOOK (LATIN SMALL LETTER P HOOK) +test(0x01A5, 0x01A4); // LATIN SMALL LETTER P WITH HOOK (LATIN SMALL LETTER P HOOK), LATIN CAPITAL LETTER P WITH HOOK (LATIN CAPITAL LETTER P HOOK) +test(0x01A6, 0x0280); // LATIN LETTER YR (LATIN LETTER Y R), LATIN LETTER SMALL CAPITAL R +test(0x01A7, 0x01A8); // LATIN CAPITAL LETTER TONE TWO, LATIN SMALL LETTER TONE TWO +test(0x01A8, 0x01A7); // LATIN SMALL LETTER TONE TWO, LATIN CAPITAL LETTER TONE TWO +test(0x01A9, 0x0283); // LATIN CAPITAL LETTER ESH, LATIN SMALL LETTER ESH +test(0x01AC, 0x01AD); // LATIN CAPITAL LETTER T WITH HOOK (LATIN CAPITAL LETTER T HOOK), LATIN SMALL LETTER T WITH HOOK (LATIN SMALL LETTER T HOOK) +test(0x01AD, 0x01AC); // LATIN SMALL LETTER T WITH HOOK (LATIN SMALL LETTER T HOOK), LATIN CAPITAL LETTER T WITH HOOK (LATIN CAPITAL LETTER T HOOK) +test(0x01AE, 0x0288); // LATIN CAPITAL LETTER T WITH RETROFLEX HOOK (LATIN CAPITAL LETTER T RETROFLEX HOOK), LATIN SMALL LETTER T WITH RETROFLEX HOOK (LATIN SMALL LETTER T RETROFLEX HOOK) +test(0x01AF, 0x01B0); // LATIN CAPITAL LETTER U WITH HORN (LATIN CAPITAL LETTER U HORN), LATIN SMALL LETTER U WITH HORN (LATIN SMALL LETTER U HORN) +test(0x01B0, 0x01AF); // LATIN SMALL LETTER U WITH HORN (LATIN SMALL LETTER U HORN), LATIN CAPITAL LETTER U WITH HORN (LATIN CAPITAL LETTER U HORN) +test(0x01B1, 0x028A); // LATIN CAPITAL LETTER UPSILON, LATIN SMALL LETTER UPSILON +test(0x01B2, 0x028B); // LATIN CAPITAL LETTER V WITH HOOK (LATIN CAPITAL LETTER SCRIPT V), LATIN SMALL LETTER V WITH HOOK (LATIN SMALL LETTER SCRIPT V) +test(0x01B3, 0x01B4); // LATIN CAPITAL LETTER Y WITH HOOK (LATIN CAPITAL LETTER Y HOOK), LATIN SMALL LETTER Y WITH HOOK (LATIN SMALL LETTER Y HOOK) +test(0x01B4, 0x01B3); // LATIN SMALL LETTER Y WITH HOOK (LATIN SMALL LETTER Y HOOK), LATIN CAPITAL LETTER Y WITH HOOK (LATIN CAPITAL LETTER Y HOOK) +test(0x01B5, 0x01B6); // LATIN CAPITAL LETTER Z WITH STROKE (LATIN CAPITAL LETTER Z BAR), LATIN SMALL LETTER Z WITH STROKE (LATIN SMALL LETTER Z BAR) +test(0x01B6, 0x01B5); // LATIN SMALL LETTER Z WITH STROKE (LATIN SMALL LETTER Z BAR), LATIN CAPITAL LETTER Z WITH STROKE (LATIN CAPITAL LETTER Z BAR) +test(0x01B7, 0x0292); // LATIN CAPITAL LETTER EZH (LATIN CAPITAL LETTER YOGH), LATIN SMALL LETTER EZH (LATIN SMALL LETTER YOGH) +test(0x01B8, 0x01B9); // LATIN CAPITAL LETTER EZH REVERSED (LATIN CAPITAL LETTER REVERSED YOGH), LATIN SMALL LETTER EZH REVERSED (LATIN SMALL LETTER REVERSED YOGH) +test(0x01B9, 0x01B8); // LATIN SMALL LETTER EZH REVERSED (LATIN SMALL LETTER REVERSED YOGH), LATIN CAPITAL LETTER EZH REVERSED (LATIN CAPITAL LETTER REVERSED YOGH) +test(0x01BC, 0x01BD); // LATIN CAPITAL LETTER TONE FIVE, LATIN SMALL LETTER TONE FIVE +test(0x01BD, 0x01BC); // LATIN SMALL LETTER TONE FIVE, LATIN CAPITAL LETTER TONE FIVE +test(0x01BF, 0x01F7); // LATIN LETTER WYNN, LATIN CAPITAL LETTER WYNN +test(0x01C4, 0x01C6, 0x01C5); // LATIN CAPITAL LETTER DZ WITH CARON (LATIN CAPITAL LETTER D Z HACEK), LATIN SMALL LETTER DZ WITH CARON (LATIN SMALL LETTER D Z HACEK), LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (LATIN LETTER CAPITAL D SMALL Z HACEK) +test(0x01C5, 0x01C6, 0x01C4); // LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (LATIN LETTER CAPITAL D SMALL Z HACEK), LATIN SMALL LETTER DZ WITH CARON (LATIN SMALL LETTER D Z HACEK), LATIN CAPITAL LETTER DZ WITH CARON (LATIN CAPITAL LETTER D Z HACEK) +test(0x01C6, 0x01C4, 0x01C5); // LATIN SMALL LETTER DZ WITH CARON (LATIN SMALL LETTER D Z HACEK), LATIN CAPITAL LETTER DZ WITH CARON (LATIN CAPITAL LETTER D Z HACEK), LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (LATIN LETTER CAPITAL D SMALL Z HACEK) +test(0x01C7, 0x01C9, 0x01C8); // LATIN CAPITAL LETTER LJ (LATIN CAPITAL LETTER L J), LATIN SMALL LETTER LJ (LATIN SMALL LETTER L J), LATIN CAPITAL LETTER L WITH SMALL LETTER J (LATIN LETTER CAPITAL L SMALL J) +test(0x01C8, 0x01C9, 0x01C7); // LATIN CAPITAL LETTER L WITH SMALL LETTER J (LATIN LETTER CAPITAL L SMALL J), LATIN SMALL LETTER LJ (LATIN SMALL LETTER L J), LATIN CAPITAL LETTER LJ (LATIN CAPITAL LETTER L J) +test(0x01C9, 0x01C7, 0x01C8); // LATIN SMALL LETTER LJ (LATIN SMALL LETTER L J), LATIN CAPITAL LETTER LJ (LATIN CAPITAL LETTER L J), LATIN CAPITAL LETTER L WITH SMALL LETTER J (LATIN LETTER CAPITAL L SMALL J) +test(0x01CA, 0x01CC, 0x01CB); // LATIN CAPITAL LETTER NJ (LATIN CAPITAL LETTER N J), LATIN SMALL LETTER NJ (LATIN SMALL LETTER N J), LATIN CAPITAL LETTER N WITH SMALL LETTER J (LATIN LETTER CAPITAL N SMALL J) +test(0x01CB, 0x01CC, 0x01CA); // LATIN CAPITAL LETTER N WITH SMALL LETTER J (LATIN LETTER CAPITAL N SMALL J), LATIN SMALL LETTER NJ (LATIN SMALL LETTER N J), LATIN CAPITAL LETTER NJ (LATIN CAPITAL LETTER N J) +test(0x01CC, 0x01CA, 0x01CB); // LATIN SMALL LETTER NJ (LATIN SMALL LETTER N J), LATIN CAPITAL LETTER NJ (LATIN CAPITAL LETTER N J), LATIN CAPITAL LETTER N WITH SMALL LETTER J (LATIN LETTER CAPITAL N SMALL J) +test(0x01CD, 0x01CE); // LATIN CAPITAL LETTER A WITH CARON (LATIN CAPITAL LETTER A HACEK), LATIN SMALL LETTER A WITH CARON (LATIN SMALL LETTER A HACEK) +test(0x01CE, 0x01CD); // LATIN SMALL LETTER A WITH CARON (LATIN SMALL LETTER A HACEK), LATIN CAPITAL LETTER A WITH CARON (LATIN CAPITAL LETTER A HACEK) +test(0x01CF, 0x01D0); // LATIN CAPITAL LETTER I WITH CARON (LATIN CAPITAL LETTER I HACEK), LATIN SMALL LETTER I WITH CARON (LATIN SMALL LETTER I HACEK) +test(0x01D0, 0x01CF); // LATIN SMALL LETTER I WITH CARON (LATIN SMALL LETTER I HACEK), LATIN CAPITAL LETTER I WITH CARON (LATIN CAPITAL LETTER I HACEK) +test(0x01D1, 0x01D2); // LATIN CAPITAL LETTER O WITH CARON (LATIN CAPITAL LETTER O HACEK), LATIN SMALL LETTER O WITH CARON (LATIN SMALL LETTER O HACEK) +test(0x01D2, 0x01D1); // LATIN SMALL LETTER O WITH CARON (LATIN SMALL LETTER O HACEK), LATIN CAPITAL LETTER O WITH CARON (LATIN CAPITAL LETTER O HACEK) +test(0x01D3, 0x01D4); // LATIN CAPITAL LETTER U WITH CARON (LATIN CAPITAL LETTER U HACEK), LATIN SMALL LETTER U WITH CARON (LATIN SMALL LETTER U HACEK) +test(0x01D4, 0x01D3); // LATIN SMALL LETTER U WITH CARON (LATIN SMALL LETTER U HACEK), LATIN CAPITAL LETTER U WITH CARON (LATIN CAPITAL LETTER U HACEK) +test(0x01D5, 0x01D6); // LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER U DIAERESIS MACRON), LATIN SMALL LETTER U WITH DIAERESIS AND MACRON (LATIN SMALL LETTER U DIAERESIS MACRON) +test(0x01D6, 0x01D5); // LATIN SMALL LETTER U WITH DIAERESIS AND MACRON (LATIN SMALL LETTER U DIAERESIS MACRON), LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER U DIAERESIS MACRON) +test(0x01D7, 0x01D8); // LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE (LATIN CAPITAL LETTER U DIAERESIS ACUTE), LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE (LATIN SMALL LETTER U DIAERESIS ACUTE) +test(0x01D8, 0x01D7); // LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE (LATIN SMALL LETTER U DIAERESIS ACUTE), LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE (LATIN CAPITAL LETTER U DIAERESIS ACUTE) +test(0x01D9, 0x01DA); // LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON (LATIN CAPITAL LETTER U DIAERESIS HACEK), LATIN SMALL LETTER U WITH DIAERESIS AND CARON (LATIN SMALL LETTER U DIAERESIS HACEK) +test(0x01DA, 0x01D9); // LATIN SMALL LETTER U WITH DIAERESIS AND CARON (LATIN SMALL LETTER U DIAERESIS HACEK), LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON (LATIN CAPITAL LETTER U DIAERESIS HACEK) +test(0x01DB, 0x01DC); // LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE (LATIN CAPITAL LETTER U DIAERESIS GRAVE), LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE (LATIN SMALL LETTER U DIAERESIS GRAVE) +test(0x01DC, 0x01DB); // LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE (LATIN SMALL LETTER U DIAERESIS GRAVE), LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE (LATIN CAPITAL LETTER U DIAERESIS GRAVE) +test(0x01DD, 0x018E); // LATIN SMALL LETTER TURNED E, LATIN CAPITAL LETTER REVERSED E (LATIN CAPITAL LETTER TURNED E) +test(0x01DE, 0x01DF); // LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER A DIAERESIS MACRON), LATIN SMALL LETTER A WITH DIAERESIS AND MACRON (LATIN SMALL LETTER A DIAERESIS MACRON) +test(0x01DF, 0x01DE); // LATIN SMALL LETTER A WITH DIAERESIS AND MACRON (LATIN SMALL LETTER A DIAERESIS MACRON), LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER A DIAERESIS MACRON) +test(0x01E0, 0x01E1); // LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON (LATIN CAPITAL LETTER A DOT MACRON), LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON (LATIN SMALL LETTER A DOT MACRON) +test(0x01E1, 0x01E0); // LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON (LATIN SMALL LETTER A DOT MACRON), LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON (LATIN CAPITAL LETTER A DOT MACRON) +test(0x01E2, 0x01E3); // LATIN CAPITAL LETTER AE WITH MACRON (LATIN CAPITAL LETTER A E MACRON), LATIN SMALL LETTER AE WITH MACRON (LATIN SMALL LETTER A E MACRON) +test(0x01E3, 0x01E2); // LATIN SMALL LETTER AE WITH MACRON (LATIN SMALL LETTER A E MACRON), LATIN CAPITAL LETTER AE WITH MACRON (LATIN CAPITAL LETTER A E MACRON) +test(0x01E4, 0x01E5); // LATIN CAPITAL LETTER G WITH STROKE (LATIN CAPITAL LETTER G BAR), LATIN SMALL LETTER G WITH STROKE (LATIN SMALL LETTER G BAR) +test(0x01E5, 0x01E4); // LATIN SMALL LETTER G WITH STROKE (LATIN SMALL LETTER G BAR), LATIN CAPITAL LETTER G WITH STROKE (LATIN CAPITAL LETTER G BAR) +test(0x01E6, 0x01E7); // LATIN CAPITAL LETTER G WITH CARON (LATIN CAPITAL LETTER G HACEK), LATIN SMALL LETTER G WITH CARON (LATIN SMALL LETTER G HACEK) +test(0x01E7, 0x01E6); // LATIN SMALL LETTER G WITH CARON (LATIN SMALL LETTER G HACEK), LATIN CAPITAL LETTER G WITH CARON (LATIN CAPITAL LETTER G HACEK) +test(0x01E8, 0x01E9); // LATIN CAPITAL LETTER K WITH CARON (LATIN CAPITAL LETTER K HACEK), LATIN SMALL LETTER K WITH CARON (LATIN SMALL LETTER K HACEK) +test(0x01E9, 0x01E8); // LATIN SMALL LETTER K WITH CARON (LATIN SMALL LETTER K HACEK), LATIN CAPITAL LETTER K WITH CARON (LATIN CAPITAL LETTER K HACEK) +test(0x01EA, 0x01EB); // LATIN CAPITAL LETTER O WITH OGONEK (LATIN CAPITAL LETTER O OGONEK), LATIN SMALL LETTER O WITH OGONEK (LATIN SMALL LETTER O OGONEK) +test(0x01EB, 0x01EA); // LATIN SMALL LETTER O WITH OGONEK (LATIN SMALL LETTER O OGONEK), LATIN CAPITAL LETTER O WITH OGONEK (LATIN CAPITAL LETTER O OGONEK) +test(0x01EC, 0x01ED); // LATIN CAPITAL LETTER O WITH OGONEK AND MACRON (LATIN CAPITAL LETTER O OGONEK MACRON), LATIN SMALL LETTER O WITH OGONEK AND MACRON (LATIN SMALL LETTER O OGONEK MACRON) +test(0x01ED, 0x01EC); // LATIN SMALL LETTER O WITH OGONEK AND MACRON (LATIN SMALL LETTER O OGONEK MACRON), LATIN CAPITAL LETTER O WITH OGONEK AND MACRON (LATIN CAPITAL LETTER O OGONEK MACRON) +test(0x01EE, 0x01EF); // LATIN CAPITAL LETTER EZH WITH CARON (LATIN CAPITAL LETTER YOGH HACEK), LATIN SMALL LETTER EZH WITH CARON (LATIN SMALL LETTER YOGH HACEK) +test(0x01EF, 0x01EE); // LATIN SMALL LETTER EZH WITH CARON (LATIN SMALL LETTER YOGH HACEK), LATIN CAPITAL LETTER EZH WITH CARON (LATIN CAPITAL LETTER YOGH HACEK) +test(0x01F1, 0x01F3, 0x01F2); // LATIN CAPITAL LETTER DZ, LATIN SMALL LETTER DZ, LATIN CAPITAL LETTER D WITH SMALL LETTER Z +test(0x01F2, 0x01F3, 0x01F1); // LATIN CAPITAL LETTER D WITH SMALL LETTER Z, LATIN SMALL LETTER DZ, LATIN CAPITAL LETTER DZ +test(0x01F3, 0x01F1, 0x01F2); // LATIN SMALL LETTER DZ, LATIN CAPITAL LETTER DZ, LATIN CAPITAL LETTER D WITH SMALL LETTER Z +test(0x01F4, 0x01F5); // LATIN CAPITAL LETTER G WITH ACUTE, LATIN SMALL LETTER G WITH ACUTE +test(0x01F5, 0x01F4); // LATIN SMALL LETTER G WITH ACUTE, LATIN CAPITAL LETTER G WITH ACUTE +test(0x01F6, 0x0195); // LATIN CAPITAL LETTER HWAIR, LATIN SMALL LETTER HV (LATIN SMALL LETTER H V) +test(0x01F7, 0x01BF); // LATIN CAPITAL LETTER WYNN, LATIN LETTER WYNN +test(0x01F8, 0x01F9); // LATIN CAPITAL LETTER N WITH GRAVE, LATIN SMALL LETTER N WITH GRAVE +test(0x01F9, 0x01F8); // LATIN SMALL LETTER N WITH GRAVE, LATIN CAPITAL LETTER N WITH GRAVE +test(0x01FA, 0x01FB); // LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE, LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +test(0x01FB, 0x01FA); // LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE, LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +test(0x01FC, 0x01FD); // LATIN CAPITAL LETTER AE WITH ACUTE, LATIN SMALL LETTER AE WITH ACUTE +test(0x01FD, 0x01FC); // LATIN SMALL LETTER AE WITH ACUTE, LATIN CAPITAL LETTER AE WITH ACUTE +test(0x01FE, 0x01FF); // LATIN CAPITAL LETTER O WITH STROKE AND ACUTE, LATIN SMALL LETTER O WITH STROKE AND ACUTE +test(0x01FF, 0x01FE); // LATIN SMALL LETTER O WITH STROKE AND ACUTE, LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +test(0x0200, 0x0201); // LATIN CAPITAL LETTER A WITH DOUBLE GRAVE, LATIN SMALL LETTER A WITH DOUBLE GRAVE +test(0x0201, 0x0200); // LATIN SMALL LETTER A WITH DOUBLE GRAVE, LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +test(0x0202, 0x0203); // LATIN CAPITAL LETTER A WITH INVERTED BREVE, LATIN SMALL LETTER A WITH INVERTED BREVE +test(0x0203, 0x0202); // LATIN SMALL LETTER A WITH INVERTED BREVE, LATIN CAPITAL LETTER A WITH INVERTED BREVE +test(0x0204, 0x0205); // LATIN CAPITAL LETTER E WITH DOUBLE GRAVE, LATIN SMALL LETTER E WITH DOUBLE GRAVE +test(0x0205, 0x0204); // LATIN SMALL LETTER E WITH DOUBLE GRAVE, LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +test(0x0206, 0x0207); // LATIN CAPITAL LETTER E WITH INVERTED BREVE, LATIN SMALL LETTER E WITH INVERTED BREVE +test(0x0207, 0x0206); // LATIN SMALL LETTER E WITH INVERTED BREVE, LATIN CAPITAL LETTER E WITH INVERTED BREVE +test(0x0208, 0x0209); // LATIN CAPITAL LETTER I WITH DOUBLE GRAVE, LATIN SMALL LETTER I WITH DOUBLE GRAVE +test(0x0209, 0x0208); // LATIN SMALL LETTER I WITH DOUBLE GRAVE, LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +test(0x020A, 0x020B); // LATIN CAPITAL LETTER I WITH INVERTED BREVE, LATIN SMALL LETTER I WITH INVERTED BREVE +test(0x020B, 0x020A); // LATIN SMALL LETTER I WITH INVERTED BREVE, LATIN CAPITAL LETTER I WITH INVERTED BREVE +test(0x020C, 0x020D); // LATIN CAPITAL LETTER O WITH DOUBLE GRAVE, LATIN SMALL LETTER O WITH DOUBLE GRAVE +test(0x020D, 0x020C); // LATIN SMALL LETTER O WITH DOUBLE GRAVE, LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +test(0x020E, 0x020F); // LATIN CAPITAL LETTER O WITH INVERTED BREVE, LATIN SMALL LETTER O WITH INVERTED BREVE +test(0x020F, 0x020E); // LATIN SMALL LETTER O WITH INVERTED BREVE, LATIN CAPITAL LETTER O WITH INVERTED BREVE +test(0x0210, 0x0211); // LATIN CAPITAL LETTER R WITH DOUBLE GRAVE, LATIN SMALL LETTER R WITH DOUBLE GRAVE +test(0x0211, 0x0210); // LATIN SMALL LETTER R WITH DOUBLE GRAVE, LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +test(0x0212, 0x0213); // LATIN CAPITAL LETTER R WITH INVERTED BREVE, LATIN SMALL LETTER R WITH INVERTED BREVE +test(0x0213, 0x0212); // LATIN SMALL LETTER R WITH INVERTED BREVE, LATIN CAPITAL LETTER R WITH INVERTED BREVE +test(0x0214, 0x0215); // LATIN CAPITAL LETTER U WITH DOUBLE GRAVE, LATIN SMALL LETTER U WITH DOUBLE GRAVE +test(0x0215, 0x0214); // LATIN SMALL LETTER U WITH DOUBLE GRAVE, LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +test(0x0216, 0x0217); // LATIN CAPITAL LETTER U WITH INVERTED BREVE, LATIN SMALL LETTER U WITH INVERTED BREVE +test(0x0217, 0x0216); // LATIN SMALL LETTER U WITH INVERTED BREVE, LATIN CAPITAL LETTER U WITH INVERTED BREVE +test(0x0218, 0x0219); // LATIN CAPITAL LETTER S WITH COMMA BELOW, LATIN SMALL LETTER S WITH COMMA BELOW +test(0x0219, 0x0218); // LATIN SMALL LETTER S WITH COMMA BELOW, LATIN CAPITAL LETTER S WITH COMMA BELOW +test(0x021A, 0x021B); // LATIN CAPITAL LETTER T WITH COMMA BELOW, LATIN SMALL LETTER T WITH COMMA BELOW +test(0x021B, 0x021A); // LATIN SMALL LETTER T WITH COMMA BELOW, LATIN CAPITAL LETTER T WITH COMMA BELOW +test(0x021C, 0x021D); // LATIN CAPITAL LETTER YOGH, LATIN SMALL LETTER YOGH +test(0x021D, 0x021C); // LATIN SMALL LETTER YOGH, LATIN CAPITAL LETTER YOGH +test(0x021E, 0x021F); // LATIN CAPITAL LETTER H WITH CARON, LATIN SMALL LETTER H WITH CARON +test(0x021F, 0x021E); // LATIN SMALL LETTER H WITH CARON, LATIN CAPITAL LETTER H WITH CARON +test(0x0220, 0x019E); // LATIN CAPITAL LETTER N WITH LONG RIGHT LEG, LATIN SMALL LETTER N WITH LONG RIGHT LEG +test(0x0222, 0x0223); // LATIN CAPITAL LETTER OU, LATIN SMALL LETTER OU +test(0x0223, 0x0222); // LATIN SMALL LETTER OU, LATIN CAPITAL LETTER OU +test(0x0224, 0x0225); // LATIN CAPITAL LETTER Z WITH HOOK, LATIN SMALL LETTER Z WITH HOOK +test(0x0225, 0x0224); // LATIN SMALL LETTER Z WITH HOOK, LATIN CAPITAL LETTER Z WITH HOOK +test(0x0226, 0x0227); // LATIN CAPITAL LETTER A WITH DOT ABOVE, LATIN SMALL LETTER A WITH DOT ABOVE +test(0x0227, 0x0226); // LATIN SMALL LETTER A WITH DOT ABOVE, LATIN CAPITAL LETTER A WITH DOT ABOVE +test(0x0228, 0x0229); // LATIN CAPITAL LETTER E WITH CEDILLA, LATIN SMALL LETTER E WITH CEDILLA +test(0x0229, 0x0228); // LATIN SMALL LETTER E WITH CEDILLA, LATIN CAPITAL LETTER E WITH CEDILLA +test(0x022A, 0x022B); // LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON, LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +test(0x022B, 0x022A); // LATIN SMALL LETTER O WITH DIAERESIS AND MACRON, LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +test(0x022C, 0x022D); // LATIN CAPITAL LETTER O WITH TILDE AND MACRON, LATIN SMALL LETTER O WITH TILDE AND MACRON +test(0x022D, 0x022C); // LATIN SMALL LETTER O WITH TILDE AND MACRON, LATIN CAPITAL LETTER O WITH TILDE AND MACRON +test(0x022E, 0x022F); // LATIN CAPITAL LETTER O WITH DOT ABOVE, LATIN SMALL LETTER O WITH DOT ABOVE +test(0x022F, 0x022E); // LATIN SMALL LETTER O WITH DOT ABOVE, LATIN CAPITAL LETTER O WITH DOT ABOVE +test(0x0230, 0x0231); // LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON, LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +test(0x0231, 0x0230); // LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON, LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +test(0x0232, 0x0233); // LATIN CAPITAL LETTER Y WITH MACRON, LATIN SMALL LETTER Y WITH MACRON +test(0x0233, 0x0232); // LATIN SMALL LETTER Y WITH MACRON, LATIN CAPITAL LETTER Y WITH MACRON +test(0x023A, 0x2C65); // LATIN CAPITAL LETTER A WITH STROKE, LATIN SMALL LETTER A WITH STROKE +test(0x023B, 0x023C); // LATIN CAPITAL LETTER C WITH STROKE, LATIN SMALL LETTER C WITH STROKE +test(0x023C, 0x023B); // LATIN SMALL LETTER C WITH STROKE, LATIN CAPITAL LETTER C WITH STROKE +test(0x023D, 0x019A); // LATIN CAPITAL LETTER L WITH BAR, LATIN SMALL LETTER L WITH BAR (LATIN SMALL LETTER BARRED L) +test(0x023E, 0x2C66); // LATIN CAPITAL LETTER T WITH DIAGONAL STROKE, LATIN SMALL LETTER T WITH DIAGONAL STROKE +test(0x023F, 0x2C7E); // LATIN SMALL LETTER S WITH SWASH TAIL, LATIN CAPITAL LETTER S WITH SWASH TAIL +test(0x0240, 0x2C7F); // LATIN SMALL LETTER Z WITH SWASH TAIL, LATIN CAPITAL LETTER Z WITH SWASH TAIL +test(0x0241, 0x0242); // LATIN CAPITAL LETTER GLOTTAL STOP, LATIN SMALL LETTER GLOTTAL STOP +test(0x0242, 0x0241); // LATIN SMALL LETTER GLOTTAL STOP, LATIN CAPITAL LETTER GLOTTAL STOP +test(0x0243, 0x0180); // LATIN CAPITAL LETTER B WITH STROKE, LATIN SMALL LETTER B WITH STROKE (LATIN SMALL LETTER B BAR) +test(0x0244, 0x0289); // LATIN CAPITAL LETTER U BAR, LATIN SMALL LETTER U BAR +test(0x0245, 0x028C); // LATIN CAPITAL LETTER TURNED V, LATIN SMALL LETTER TURNED V +test(0x0246, 0x0247); // LATIN CAPITAL LETTER E WITH STROKE, LATIN SMALL LETTER E WITH STROKE +test(0x0247, 0x0246); // LATIN SMALL LETTER E WITH STROKE, LATIN CAPITAL LETTER E WITH STROKE +test(0x0248, 0x0249); // LATIN CAPITAL LETTER J WITH STROKE, LATIN SMALL LETTER J WITH STROKE +test(0x0249, 0x0248); // LATIN SMALL LETTER J WITH STROKE, LATIN CAPITAL LETTER J WITH STROKE +test(0x024A, 0x024B); // LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL, LATIN SMALL LETTER Q WITH HOOK TAIL +test(0x024B, 0x024A); // LATIN SMALL LETTER Q WITH HOOK TAIL, LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +test(0x024C, 0x024D); // LATIN CAPITAL LETTER R WITH STROKE, LATIN SMALL LETTER R WITH STROKE +test(0x024D, 0x024C); // LATIN SMALL LETTER R WITH STROKE, LATIN CAPITAL LETTER R WITH STROKE +test(0x024E, 0x024F); // LATIN CAPITAL LETTER Y WITH STROKE, LATIN SMALL LETTER Y WITH STROKE +test(0x024F, 0x024E); // LATIN SMALL LETTER Y WITH STROKE, LATIN CAPITAL LETTER Y WITH STROKE +test(0x0250, 0x2C6F); // LATIN SMALL LETTER TURNED A, LATIN CAPITAL LETTER TURNED A +test(0x0251, 0x2C6D); // LATIN SMALL LETTER ALPHA (LATIN SMALL LETTER SCRIPT A), LATIN CAPITAL LETTER ALPHA +test(0x0252, 0x2C70); // LATIN SMALL LETTER TURNED ALPHA (LATIN SMALL LETTER TURNED SCRIPT A), LATIN CAPITAL LETTER TURNED ALPHA +test(0x0253, 0x0181); // LATIN SMALL LETTER B WITH HOOK (LATIN SMALL LETTER B HOOK), LATIN CAPITAL LETTER B WITH HOOK (LATIN CAPITAL LETTER B HOOK) +test(0x0254, 0x0186); // LATIN SMALL LETTER OPEN O, LATIN CAPITAL LETTER OPEN O +test(0x0256, 0x0189); // LATIN SMALL LETTER D WITH TAIL (LATIN SMALL LETTER D RETROFLEX HOOK), LATIN CAPITAL LETTER AFRICAN D +test(0x0257, 0x018A); // LATIN SMALL LETTER D WITH HOOK (LATIN SMALL LETTER D HOOK), LATIN CAPITAL LETTER D WITH HOOK (LATIN CAPITAL LETTER D HOOK) +test(0x0259, 0x018F); // LATIN SMALL LETTER SCHWA, LATIN CAPITAL LETTER SCHWA +test(0x025B, 0x0190); // LATIN SMALL LETTER OPEN E (LATIN SMALL LETTER EPSILON), LATIN CAPITAL LETTER OPEN E (LATIN CAPITAL LETTER EPSILON) +test(0x025C, 0xA7AB); // LATIN SMALL LETTER REVERSED OPEN E (LATIN SMALL LETTER REVERSED EPSILON), LATIN CAPITAL LETTER REVERSED OPEN E +test(0x0260, 0x0193); // LATIN SMALL LETTER G WITH HOOK (LATIN SMALL LETTER G HOOK), LATIN CAPITAL LETTER G WITH HOOK (LATIN CAPITAL LETTER G HOOK) +test(0x0261, 0xA7AC); // LATIN SMALL LETTER SCRIPT G, LATIN CAPITAL LETTER SCRIPT G +test(0x0263, 0x0194); // LATIN SMALL LETTER GAMMA, LATIN CAPITAL LETTER GAMMA +test(0x0265, 0xA78D); // LATIN SMALL LETTER TURNED H, LATIN CAPITAL LETTER TURNED H +test(0x0266, 0xA7AA); // LATIN SMALL LETTER H WITH HOOK (LATIN SMALL LETTER H HOOK), LATIN CAPITAL LETTER H WITH HOOK +test(0x0268, 0x0197); // LATIN SMALL LETTER I WITH STROKE (LATIN SMALL LETTER BARRED I), LATIN CAPITAL LETTER I WITH STROKE (LATIN CAPITAL LETTER BARRED I) +test(0x0269, 0x0196); // LATIN SMALL LETTER IOTA, LATIN CAPITAL LETTER IOTA +test(0x026A, 0xA7AE); // LATIN LETTER SMALL CAPITAL I, LATIN CAPITAL LETTER SMALL CAPITAL I +test(0x026B, 0x2C62); // LATIN SMALL LETTER L WITH MIDDLE TILDE, LATIN CAPITAL LETTER L WITH MIDDLE TILDE +test(0x026C, 0xA7AD); // LATIN SMALL LETTER L WITH BELT (LATIN SMALL LETTER L BELT), LATIN CAPITAL LETTER L WITH BELT +test(0x026F, 0x019C); // LATIN SMALL LETTER TURNED M, LATIN CAPITAL LETTER TURNED M +test(0x0271, 0x2C6E); // LATIN SMALL LETTER M WITH HOOK (LATIN SMALL LETTER M HOOK), LATIN CAPITAL LETTER M WITH HOOK +test(0x0272, 0x019D); // LATIN SMALL LETTER N WITH LEFT HOOK (LATIN SMALL LETTER N HOOK), LATIN CAPITAL LETTER N WITH LEFT HOOK (LATIN CAPITAL LETTER N HOOK) +test(0x0275, 0x019F); // LATIN SMALL LETTER BARRED O, LATIN CAPITAL LETTER O WITH MIDDLE TILDE (LATIN CAPITAL LETTER BARRED O) +test(0x027D, 0x2C64); // LATIN SMALL LETTER R WITH TAIL (LATIN SMALL LETTER R HOOK), LATIN CAPITAL LETTER R WITH TAIL +test(0x0280, 0x01A6); // LATIN LETTER SMALL CAPITAL R, LATIN LETTER YR (LATIN LETTER Y R) +test(0x0282, 0xA7C5); // LATIN SMALL LETTER S WITH HOOK (LATIN SMALL LETTER S HOOK), LATIN CAPITAL LETTER S WITH HOOK +test(0x0283, 0x01A9); // LATIN SMALL LETTER ESH, LATIN CAPITAL LETTER ESH +test(0x0287, 0xA7B1); // LATIN SMALL LETTER TURNED T, LATIN CAPITAL LETTER TURNED T +test(0x0288, 0x01AE); // LATIN SMALL LETTER T WITH RETROFLEX HOOK (LATIN SMALL LETTER T RETROFLEX HOOK), LATIN CAPITAL LETTER T WITH RETROFLEX HOOK (LATIN CAPITAL LETTER T RETROFLEX HOOK) +test(0x0289, 0x0244); // LATIN SMALL LETTER U BAR, LATIN CAPITAL LETTER U BAR +test(0x028A, 0x01B1); // LATIN SMALL LETTER UPSILON, LATIN CAPITAL LETTER UPSILON +test(0x028B, 0x01B2); // LATIN SMALL LETTER V WITH HOOK (LATIN SMALL LETTER SCRIPT V), LATIN CAPITAL LETTER V WITH HOOK (LATIN CAPITAL LETTER SCRIPT V) +test(0x028C, 0x0245); // LATIN SMALL LETTER TURNED V, LATIN CAPITAL LETTER TURNED V +test(0x0292, 0x01B7); // LATIN SMALL LETTER EZH (LATIN SMALL LETTER YOGH), LATIN CAPITAL LETTER EZH (LATIN CAPITAL LETTER YOGH) +test(0x029D, 0xA7B2); // LATIN SMALL LETTER J WITH CROSSED-TAIL (LATIN SMALL LETTER CROSSED-TAIL J), LATIN CAPITAL LETTER J WITH CROSSED-TAIL +test(0x029E, 0xA7B0); // LATIN SMALL LETTER TURNED K, LATIN CAPITAL LETTER TURNED K +test(0x0345, 0x03B9, 0x0399, 0x1FBE); // COMBINING GREEK YPOGEGRAMMENI (GREEK NON-SPACING IOTA BELOW), GREEK SMALL LETTER IOTA, GREEK CAPITAL LETTER IOTA, GREEK PROSGEGRAMMENI +test(0x0370, 0x0371); // GREEK CAPITAL LETTER HETA, GREEK SMALL LETTER HETA +test(0x0371, 0x0370); // GREEK SMALL LETTER HETA, GREEK CAPITAL LETTER HETA +test(0x0372, 0x0373); // GREEK CAPITAL LETTER ARCHAIC SAMPI, GREEK SMALL LETTER ARCHAIC SAMPI +test(0x0373, 0x0372); // GREEK SMALL LETTER ARCHAIC SAMPI, GREEK CAPITAL LETTER ARCHAIC SAMPI +test(0x0376, 0x0377); // GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA, GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +test(0x0377, 0x0376); // GREEK SMALL LETTER PAMPHYLIAN DIGAMMA, GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +test(0x037B, 0x03FD); // GREEK SMALL REVERSED LUNATE SIGMA SYMBOL, GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +test(0x037C, 0x03FE); // GREEK SMALL DOTTED LUNATE SIGMA SYMBOL, GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +test(0x037D, 0x03FF); // GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL, GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +test(0x037F, 0x03F3); // GREEK CAPITAL LETTER YOT, GREEK LETTER YOT +test(0x0386, 0x03AC); // GREEK CAPITAL LETTER ALPHA WITH TONOS (GREEK CAPITAL LETTER ALPHA TONOS), GREEK SMALL LETTER ALPHA WITH TONOS (GREEK SMALL LETTER ALPHA TONOS) +test(0x0388, 0x03AD); // GREEK CAPITAL LETTER EPSILON WITH TONOS (GREEK CAPITAL LETTER EPSILON TONOS), GREEK SMALL LETTER EPSILON WITH TONOS (GREEK SMALL LETTER EPSILON TONOS) +test(0x0389, 0x03AE); // GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS), GREEK SMALL LETTER ETA WITH TONOS (GREEK SMALL LETTER ETA TONOS) +test(0x038A, 0x03AF); // GREEK CAPITAL LETTER IOTA WITH TONOS (GREEK CAPITAL LETTER IOTA TONOS), GREEK SMALL LETTER IOTA WITH TONOS (GREEK SMALL LETTER IOTA TONOS) +test(0x038C, 0x03CC); // GREEK CAPITAL LETTER OMICRON WITH TONOS (GREEK CAPITAL LETTER OMICRON TONOS), GREEK SMALL LETTER OMICRON WITH TONOS (GREEK SMALL LETTER OMICRON TONOS) +test(0x038E, 0x03CD); // GREEK CAPITAL LETTER UPSILON WITH TONOS (GREEK CAPITAL LETTER UPSILON TONOS), GREEK SMALL LETTER UPSILON WITH TONOS (GREEK SMALL LETTER UPSILON TONOS) +test(0x038F, 0x03CE); // GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS), GREEK SMALL LETTER OMEGA WITH TONOS (GREEK SMALL LETTER OMEGA TONOS) +test(0x0391, 0x03B1); // GREEK CAPITAL LETTER ALPHA, GREEK SMALL LETTER ALPHA +test(0x0392, 0x03B2, 0x03D0); // GREEK CAPITAL LETTER BETA, GREEK SMALL LETTER BETA, GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA) +test(0x0393, 0x03B3); // GREEK CAPITAL LETTER GAMMA, GREEK SMALL LETTER GAMMA +test(0x0394, 0x03B4); // GREEK CAPITAL LETTER DELTA, GREEK SMALL LETTER DELTA +test(0x0395, 0x03B5, 0x03F5); // GREEK CAPITAL LETTER EPSILON, GREEK SMALL LETTER EPSILON, GREEK LUNATE EPSILON SYMBOL +test(0x0396, 0x03B6); // GREEK CAPITAL LETTER ZETA, GREEK SMALL LETTER ZETA +test(0x0397, 0x03B7); // GREEK CAPITAL LETTER ETA, GREEK SMALL LETTER ETA +test(0x0398, 0x03B8, 0x03D1, 0x03F4); // GREEK CAPITAL LETTER THETA, GREEK SMALL LETTER THETA, GREEK THETA SYMBOL (GREEK SMALL LETTER SCRIPT THETA), GREEK CAPITAL THETA SYMBOL +test(0x0399, 0x03B9, 0x0345, 0x1FBE); // GREEK CAPITAL LETTER IOTA, GREEK SMALL LETTER IOTA, COMBINING GREEK YPOGEGRAMMENI (GREEK NON-SPACING IOTA BELOW), GREEK PROSGEGRAMMENI +test(0x039A, 0x03BA, 0x03F0); // GREEK CAPITAL LETTER KAPPA, GREEK SMALL LETTER KAPPA, GREEK KAPPA SYMBOL (GREEK SMALL LETTER SCRIPT KAPPA) +test(0x039B, 0x03BB); // GREEK CAPITAL LETTER LAMDA (GREEK CAPITAL LETTER LAMBDA), GREEK SMALL LETTER LAMDA (GREEK SMALL LETTER LAMBDA) +test(0x039C, 0x03BC, 0x00B5); // GREEK CAPITAL LETTER MU, GREEK SMALL LETTER MU, MICRO SIGN +test(0x039D, 0x03BD); // GREEK CAPITAL LETTER NU, GREEK SMALL LETTER NU +test(0x039E, 0x03BE); // GREEK CAPITAL LETTER XI, GREEK SMALL LETTER XI +test(0x039F, 0x03BF); // GREEK CAPITAL LETTER OMICRON, GREEK SMALL LETTER OMICRON +test(0x03A0, 0x03C0, 0x03D6); // GREEK CAPITAL LETTER PI, GREEK SMALL LETTER PI, GREEK PI SYMBOL (GREEK SMALL LETTER OMEGA PI) +test(0x03A1, 0x03C1, 0x03F1); // GREEK CAPITAL LETTER RHO, GREEK SMALL LETTER RHO, GREEK RHO SYMBOL (GREEK SMALL LETTER TAILED RHO) +test(0x03A3, 0x03C3, 0x03C2); // GREEK CAPITAL LETTER SIGMA, GREEK SMALL LETTER SIGMA, GREEK SMALL LETTER FINAL SIGMA +test(0x03A4, 0x03C4); // GREEK CAPITAL LETTER TAU, GREEK SMALL LETTER TAU +test(0x03A5, 0x03C5); // GREEK CAPITAL LETTER UPSILON, GREEK SMALL LETTER UPSILON +test(0x03A6, 0x03C6, 0x03D5); // GREEK CAPITAL LETTER PHI, GREEK SMALL LETTER PHI, GREEK PHI SYMBOL (GREEK SMALL LETTER SCRIPT PHI) +test(0x03A7, 0x03C7); // GREEK CAPITAL LETTER CHI, GREEK SMALL LETTER CHI +test(0x03A8, 0x03C8); // GREEK CAPITAL LETTER PSI, GREEK SMALL LETTER PSI +test(0x03A9, 0x03C9, 0x2126); // GREEK CAPITAL LETTER OMEGA, GREEK SMALL LETTER OMEGA, OHM SIGN (OHM) +test(0x03AA, 0x03CA); // GREEK CAPITAL LETTER IOTA WITH DIALYTIKA (GREEK CAPITAL LETTER IOTA DIAERESIS), GREEK SMALL LETTER IOTA WITH DIALYTIKA (GREEK SMALL LETTER IOTA DIAERESIS) +test(0x03AB, 0x03CB); // GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA (GREEK CAPITAL LETTER UPSILON DIAERESIS), GREEK SMALL LETTER UPSILON WITH DIALYTIKA (GREEK SMALL LETTER UPSILON DIAERESIS) +test(0x03AC, 0x0386); // GREEK SMALL LETTER ALPHA WITH TONOS (GREEK SMALL LETTER ALPHA TONOS), GREEK CAPITAL LETTER ALPHA WITH TONOS (GREEK CAPITAL LETTER ALPHA TONOS) +test(0x03AD, 0x0388); // GREEK SMALL LETTER EPSILON WITH TONOS (GREEK SMALL LETTER EPSILON TONOS), GREEK CAPITAL LETTER EPSILON WITH TONOS (GREEK CAPITAL LETTER EPSILON TONOS) +test(0x03AE, 0x0389); // GREEK SMALL LETTER ETA WITH TONOS (GREEK SMALL LETTER ETA TONOS), GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS) +test(0x03AF, 0x038A); // GREEK SMALL LETTER IOTA WITH TONOS (GREEK SMALL LETTER IOTA TONOS), GREEK CAPITAL LETTER IOTA WITH TONOS (GREEK CAPITAL LETTER IOTA TONOS) +test(0x03B1, 0x0391); // GREEK SMALL LETTER ALPHA, GREEK CAPITAL LETTER ALPHA +test(0x03B2, 0x0392, 0x03D0); // GREEK SMALL LETTER BETA, GREEK CAPITAL LETTER BETA, GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA) +test(0x03B3, 0x0393); // GREEK SMALL LETTER GAMMA, GREEK CAPITAL LETTER GAMMA +test(0x03B4, 0x0394); // GREEK SMALL LETTER DELTA, GREEK CAPITAL LETTER DELTA +test(0x03B5, 0x0395, 0x03F5); // GREEK SMALL LETTER EPSILON, GREEK CAPITAL LETTER EPSILON, GREEK LUNATE EPSILON SYMBOL +test(0x03B6, 0x0396); // GREEK SMALL LETTER ZETA, GREEK CAPITAL LETTER ZETA +test(0x03B7, 0x0397); // GREEK SMALL LETTER ETA, GREEK CAPITAL LETTER ETA +test(0x03B8, 0x0398, 0x03D1, 0x03F4); // GREEK SMALL LETTER THETA, GREEK CAPITAL LETTER THETA, GREEK THETA SYMBOL (GREEK SMALL LETTER SCRIPT THETA), GREEK CAPITAL THETA SYMBOL +test(0x03B9, 0x0345, 0x0399, 0x1FBE); // GREEK SMALL LETTER IOTA, COMBINING GREEK YPOGEGRAMMENI (GREEK NON-SPACING IOTA BELOW), GREEK CAPITAL LETTER IOTA, GREEK PROSGEGRAMMENI +test(0x03BA, 0x039A, 0x03F0); // GREEK SMALL LETTER KAPPA, GREEK CAPITAL LETTER KAPPA, GREEK KAPPA SYMBOL (GREEK SMALL LETTER SCRIPT KAPPA) +test(0x03BB, 0x039B); // GREEK SMALL LETTER LAMDA (GREEK SMALL LETTER LAMBDA), GREEK CAPITAL LETTER LAMDA (GREEK CAPITAL LETTER LAMBDA) +test(0x03BC, 0x00B5, 0x039C); // GREEK SMALL LETTER MU, MICRO SIGN, GREEK CAPITAL LETTER MU +test(0x03BD, 0x039D); // GREEK SMALL LETTER NU, GREEK CAPITAL LETTER NU +test(0x03BE, 0x039E); // GREEK SMALL LETTER XI, GREEK CAPITAL LETTER XI +test(0x03BF, 0x039F); // GREEK SMALL LETTER OMICRON, GREEK CAPITAL LETTER OMICRON +test(0x03C0, 0x03A0, 0x03D6); // GREEK SMALL LETTER PI, GREEK CAPITAL LETTER PI, GREEK PI SYMBOL (GREEK SMALL LETTER OMEGA PI) +test(0x03C1, 0x03A1, 0x03F1); // GREEK SMALL LETTER RHO, GREEK CAPITAL LETTER RHO, GREEK RHO SYMBOL (GREEK SMALL LETTER TAILED RHO) +test(0x03C2, 0x03C3, 0x03A3); // GREEK SMALL LETTER FINAL SIGMA, GREEK SMALL LETTER SIGMA, GREEK CAPITAL LETTER SIGMA +test(0x03C3, 0x03A3, 0x03C2); // GREEK SMALL LETTER SIGMA, GREEK CAPITAL LETTER SIGMA, GREEK SMALL LETTER FINAL SIGMA +test(0x03C4, 0x03A4); // GREEK SMALL LETTER TAU, GREEK CAPITAL LETTER TAU +test(0x03C5, 0x03A5); // GREEK SMALL LETTER UPSILON, GREEK CAPITAL LETTER UPSILON +test(0x03C6, 0x03A6, 0x03D5); // GREEK SMALL LETTER PHI, GREEK CAPITAL LETTER PHI, GREEK PHI SYMBOL (GREEK SMALL LETTER SCRIPT PHI) +test(0x03C7, 0x03A7); // GREEK SMALL LETTER CHI, GREEK CAPITAL LETTER CHI +test(0x03C8, 0x03A8); // GREEK SMALL LETTER PSI, GREEK CAPITAL LETTER PSI +test(0x03C9, 0x03A9, 0x2126); // GREEK SMALL LETTER OMEGA, GREEK CAPITAL LETTER OMEGA, OHM SIGN (OHM) +test(0x03CA, 0x03AA); // GREEK SMALL LETTER IOTA WITH DIALYTIKA (GREEK SMALL LETTER IOTA DIAERESIS), GREEK CAPITAL LETTER IOTA WITH DIALYTIKA (GREEK CAPITAL LETTER IOTA DIAERESIS) +test(0x03CB, 0x03AB); // GREEK SMALL LETTER UPSILON WITH DIALYTIKA (GREEK SMALL LETTER UPSILON DIAERESIS), GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA (GREEK CAPITAL LETTER UPSILON DIAERESIS) +test(0x03CC, 0x038C); // GREEK SMALL LETTER OMICRON WITH TONOS (GREEK SMALL LETTER OMICRON TONOS), GREEK CAPITAL LETTER OMICRON WITH TONOS (GREEK CAPITAL LETTER OMICRON TONOS) +test(0x03CD, 0x038E); // GREEK SMALL LETTER UPSILON WITH TONOS (GREEK SMALL LETTER UPSILON TONOS), GREEK CAPITAL LETTER UPSILON WITH TONOS (GREEK CAPITAL LETTER UPSILON TONOS) +test(0x03CE, 0x038F); // GREEK SMALL LETTER OMEGA WITH TONOS (GREEK SMALL LETTER OMEGA TONOS), GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS) +test(0x03CF, 0x03D7); // GREEK CAPITAL KAI SYMBOL, GREEK KAI SYMBOL +test(0x03D0, 0x03B2, 0x0392); // GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA), GREEK SMALL LETTER BETA, GREEK CAPITAL LETTER BETA +test(0x03D1, 0x03B8, 0x0398, 0x03F4); // GREEK THETA SYMBOL (GREEK SMALL LETTER SCRIPT THETA), GREEK SMALL LETTER THETA, GREEK CAPITAL LETTER THETA, GREEK CAPITAL THETA SYMBOL +test(0x03D5, 0x03C6, 0x03A6); // GREEK PHI SYMBOL (GREEK SMALL LETTER SCRIPT PHI), GREEK SMALL LETTER PHI, GREEK CAPITAL LETTER PHI +test(0x03D6, 0x03C0, 0x03A0); // GREEK PI SYMBOL (GREEK SMALL LETTER OMEGA PI), GREEK SMALL LETTER PI, GREEK CAPITAL LETTER PI +test(0x03D7, 0x03CF); // GREEK KAI SYMBOL, GREEK CAPITAL KAI SYMBOL +test(0x03D8, 0x03D9); // GREEK LETTER ARCHAIC KOPPA, GREEK SMALL LETTER ARCHAIC KOPPA +test(0x03D9, 0x03D8); // GREEK SMALL LETTER ARCHAIC KOPPA, GREEK LETTER ARCHAIC KOPPA +test(0x03DA, 0x03DB); // GREEK LETTER STIGMA (GREEK CAPITAL LETTER STIGMA), GREEK SMALL LETTER STIGMA +test(0x03DB, 0x03DA); // GREEK SMALL LETTER STIGMA, GREEK LETTER STIGMA (GREEK CAPITAL LETTER STIGMA) +test(0x03DC, 0x03DD); // GREEK LETTER DIGAMMA (GREEK CAPITAL LETTER DIGAMMA), GREEK SMALL LETTER DIGAMMA +test(0x03DD, 0x03DC); // GREEK SMALL LETTER DIGAMMA, GREEK LETTER DIGAMMA (GREEK CAPITAL LETTER DIGAMMA) +test(0x03DE, 0x03DF); // GREEK LETTER KOPPA (GREEK CAPITAL LETTER KOPPA), GREEK SMALL LETTER KOPPA +test(0x03DF, 0x03DE); // GREEK SMALL LETTER KOPPA, GREEK LETTER KOPPA (GREEK CAPITAL LETTER KOPPA) +test(0x03E0, 0x03E1); // GREEK LETTER SAMPI (GREEK CAPITAL LETTER SAMPI), GREEK SMALL LETTER SAMPI +test(0x03E1, 0x03E0); // GREEK SMALL LETTER SAMPI, GREEK LETTER SAMPI (GREEK CAPITAL LETTER SAMPI) +test(0x03E2, 0x03E3); // COPTIC CAPITAL LETTER SHEI (GREEK CAPITAL LETTER SHEI), COPTIC SMALL LETTER SHEI (GREEK SMALL LETTER SHEI) +test(0x03E3, 0x03E2); // COPTIC SMALL LETTER SHEI (GREEK SMALL LETTER SHEI), COPTIC CAPITAL LETTER SHEI (GREEK CAPITAL LETTER SHEI) +test(0x03E4, 0x03E5); // COPTIC CAPITAL LETTER FEI (GREEK CAPITAL LETTER FEI), COPTIC SMALL LETTER FEI (GREEK SMALL LETTER FEI) +test(0x03E5, 0x03E4); // COPTIC SMALL LETTER FEI (GREEK SMALL LETTER FEI), COPTIC CAPITAL LETTER FEI (GREEK CAPITAL LETTER FEI) +test(0x03E6, 0x03E7); // COPTIC CAPITAL LETTER KHEI (GREEK CAPITAL LETTER KHEI), COPTIC SMALL LETTER KHEI (GREEK SMALL LETTER KHEI) +test(0x03E7, 0x03E6); // COPTIC SMALL LETTER KHEI (GREEK SMALL LETTER KHEI), COPTIC CAPITAL LETTER KHEI (GREEK CAPITAL LETTER KHEI) +test(0x03E8, 0x03E9); // COPTIC CAPITAL LETTER HORI (GREEK CAPITAL LETTER HORI), COPTIC SMALL LETTER HORI (GREEK SMALL LETTER HORI) +test(0x03E9, 0x03E8); // COPTIC SMALL LETTER HORI (GREEK SMALL LETTER HORI), COPTIC CAPITAL LETTER HORI (GREEK CAPITAL LETTER HORI) +test(0x03EA, 0x03EB); // COPTIC CAPITAL LETTER GANGIA (GREEK CAPITAL LETTER GANGIA), COPTIC SMALL LETTER GANGIA (GREEK SMALL LETTER GANGIA) +test(0x03EB, 0x03EA); // COPTIC SMALL LETTER GANGIA (GREEK SMALL LETTER GANGIA), COPTIC CAPITAL LETTER GANGIA (GREEK CAPITAL LETTER GANGIA) +test(0x03EC, 0x03ED); // COPTIC CAPITAL LETTER SHIMA (GREEK CAPITAL LETTER SHIMA), COPTIC SMALL LETTER SHIMA (GREEK SMALL LETTER SHIMA) +test(0x03ED, 0x03EC); // COPTIC SMALL LETTER SHIMA (GREEK SMALL LETTER SHIMA), COPTIC CAPITAL LETTER SHIMA (GREEK CAPITAL LETTER SHIMA) +test(0x03EE, 0x03EF); // COPTIC CAPITAL LETTER DEI (GREEK CAPITAL LETTER DEI), COPTIC SMALL LETTER DEI (GREEK SMALL LETTER DEI) +test(0x03EF, 0x03EE); // COPTIC SMALL LETTER DEI (GREEK SMALL LETTER DEI), COPTIC CAPITAL LETTER DEI (GREEK CAPITAL LETTER DEI) +test(0x03F0, 0x03BA, 0x039A); // GREEK KAPPA SYMBOL (GREEK SMALL LETTER SCRIPT KAPPA), GREEK SMALL LETTER KAPPA, GREEK CAPITAL LETTER KAPPA +test(0x03F1, 0x03C1, 0x03A1); // GREEK RHO SYMBOL (GREEK SMALL LETTER TAILED RHO), GREEK SMALL LETTER RHO, GREEK CAPITAL LETTER RHO +test(0x03F2, 0x03F9); // GREEK LUNATE SIGMA SYMBOL (GREEK SMALL LETTER LUNATE SIGMA), GREEK CAPITAL LUNATE SIGMA SYMBOL +test(0x03F3, 0x037F); // GREEK LETTER YOT, GREEK CAPITAL LETTER YOT +test(0x03F4, 0x03B8, 0x0398, 0x03D1); // GREEK CAPITAL THETA SYMBOL, GREEK SMALL LETTER THETA, GREEK CAPITAL LETTER THETA, GREEK THETA SYMBOL (GREEK SMALL LETTER SCRIPT THETA) +test(0x03F5, 0x03B5, 0x0395); // GREEK LUNATE EPSILON SYMBOL, GREEK SMALL LETTER EPSILON, GREEK CAPITAL LETTER EPSILON +test(0x03F7, 0x03F8); // GREEK CAPITAL LETTER SHO, GREEK SMALL LETTER SHO +test(0x03F8, 0x03F7); // GREEK SMALL LETTER SHO, GREEK CAPITAL LETTER SHO +test(0x03F9, 0x03F2); // GREEK CAPITAL LUNATE SIGMA SYMBOL, GREEK LUNATE SIGMA SYMBOL (GREEK SMALL LETTER LUNATE SIGMA) +test(0x03FA, 0x03FB); // GREEK CAPITAL LETTER SAN, GREEK SMALL LETTER SAN +test(0x03FB, 0x03FA); // GREEK SMALL LETTER SAN, GREEK CAPITAL LETTER SAN +test(0x03FD, 0x037B); // GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL, GREEK SMALL REVERSED LUNATE SIGMA SYMBOL +test(0x03FE, 0x037C); // GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL, GREEK SMALL DOTTED LUNATE SIGMA SYMBOL +test(0x03FF, 0x037D); // GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL, GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +test(0x0400, 0x0450); // CYRILLIC CAPITAL LETTER IE WITH GRAVE, CYRILLIC SMALL LETTER IE WITH GRAVE +test(0x0401, 0x0451); // CYRILLIC CAPITAL LETTER IO, CYRILLIC SMALL LETTER IO +test(0x0402, 0x0452); // CYRILLIC CAPITAL LETTER DJE, CYRILLIC SMALL LETTER DJE +test(0x0403, 0x0453); // CYRILLIC CAPITAL LETTER GJE, CYRILLIC SMALL LETTER GJE +test(0x0404, 0x0454); // CYRILLIC CAPITAL LETTER UKRAINIAN IE (CYRILLIC CAPITAL LETTER E), CYRILLIC SMALL LETTER UKRAINIAN IE (CYRILLIC SMALL LETTER E) +test(0x0405, 0x0455); // CYRILLIC CAPITAL LETTER DZE, CYRILLIC SMALL LETTER DZE +test(0x0406, 0x0456); // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC CAPITAL LETTER I), CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC SMALL LETTER I) +test(0x0407, 0x0457); // CYRILLIC CAPITAL LETTER YI, CYRILLIC SMALL LETTER YI +test(0x0408, 0x0458); // CYRILLIC CAPITAL LETTER JE, CYRILLIC SMALL LETTER JE +test(0x0409, 0x0459); // CYRILLIC CAPITAL LETTER LJE, CYRILLIC SMALL LETTER LJE +test(0x040A, 0x045A); // CYRILLIC CAPITAL LETTER NJE, CYRILLIC SMALL LETTER NJE +test(0x040B, 0x045B); // CYRILLIC CAPITAL LETTER TSHE, CYRILLIC SMALL LETTER TSHE +test(0x040C, 0x045C); // CYRILLIC CAPITAL LETTER KJE, CYRILLIC SMALL LETTER KJE +test(0x040D, 0x045D); // CYRILLIC CAPITAL LETTER I WITH GRAVE, CYRILLIC SMALL LETTER I WITH GRAVE +test(0x040E, 0x045E); // CYRILLIC CAPITAL LETTER SHORT U, CYRILLIC SMALL LETTER SHORT U +test(0x040F, 0x045F); // CYRILLIC CAPITAL LETTER DZHE, CYRILLIC SMALL LETTER DZHE +test(0x0410, 0x0430); // CYRILLIC CAPITAL LETTER A, CYRILLIC SMALL LETTER A +test(0x0411, 0x0431); // CYRILLIC CAPITAL LETTER BE, CYRILLIC SMALL LETTER BE +test(0x0412, 0x0432, 0x1C80); // CYRILLIC CAPITAL LETTER VE, CYRILLIC SMALL LETTER VE, CYRILLIC SMALL LETTER ROUNDED VE +test(0x0413, 0x0433); // CYRILLIC CAPITAL LETTER GHE (CYRILLIC CAPITAL LETTER GE), CYRILLIC SMALL LETTER GHE (CYRILLIC SMALL LETTER GE) +test(0x0414, 0x0434, 0x1C81); // CYRILLIC CAPITAL LETTER DE, CYRILLIC SMALL LETTER DE, CYRILLIC SMALL LETTER LONG-LEGGED DE +test(0x0415, 0x0435); // CYRILLIC CAPITAL LETTER IE, CYRILLIC SMALL LETTER IE +test(0x0416, 0x0436); // CYRILLIC CAPITAL LETTER ZHE, CYRILLIC SMALL LETTER ZHE +test(0x0417, 0x0437); // CYRILLIC CAPITAL LETTER ZE, CYRILLIC SMALL LETTER ZE +test(0x0418, 0x0438); // CYRILLIC CAPITAL LETTER I (CYRILLIC CAPITAL LETTER II), CYRILLIC SMALL LETTER I (CYRILLIC SMALL LETTER II) +test(0x0419, 0x0439); // CYRILLIC CAPITAL LETTER SHORT I (CYRILLIC CAPITAL LETTER SHORT II), CYRILLIC SMALL LETTER SHORT I (CYRILLIC SMALL LETTER SHORT II) +test(0x041A, 0x043A); // CYRILLIC CAPITAL LETTER KA, CYRILLIC SMALL LETTER KA +test(0x041B, 0x043B); // CYRILLIC CAPITAL LETTER EL, CYRILLIC SMALL LETTER EL +test(0x041C, 0x043C); // CYRILLIC CAPITAL LETTER EM, CYRILLIC SMALL LETTER EM +test(0x041D, 0x043D); // CYRILLIC CAPITAL LETTER EN, CYRILLIC SMALL LETTER EN +test(0x041E, 0x043E, 0x1C82); // CYRILLIC CAPITAL LETTER O, CYRILLIC SMALL LETTER O, CYRILLIC SMALL LETTER NARROW O +test(0x041F, 0x043F); // CYRILLIC CAPITAL LETTER PE, CYRILLIC SMALL LETTER PE +test(0x0420, 0x0440); // CYRILLIC CAPITAL LETTER ER, CYRILLIC SMALL LETTER ER +test(0x0421, 0x0441, 0x1C83); // CYRILLIC CAPITAL LETTER ES, CYRILLIC SMALL LETTER ES, CYRILLIC SMALL LETTER WIDE ES +test(0x0422, 0x0442, 0x1C84, 0x1C85); // CYRILLIC CAPITAL LETTER TE, CYRILLIC SMALL LETTER TE, CYRILLIC SMALL LETTER TALL TE, CYRILLIC SMALL LETTER THREE-LEGGED TE +test(0x0423, 0x0443); // CYRILLIC CAPITAL LETTER U, CYRILLIC SMALL LETTER U +test(0x0424, 0x0444); // CYRILLIC CAPITAL LETTER EF, CYRILLIC SMALL LETTER EF +test(0x0425, 0x0445); // CYRILLIC CAPITAL LETTER HA (CYRILLIC CAPITAL LETTER KHA), CYRILLIC SMALL LETTER HA (CYRILLIC SMALL LETTER KHA) +test(0x0426, 0x0446); // CYRILLIC CAPITAL LETTER TSE, CYRILLIC SMALL LETTER TSE +test(0x0427, 0x0447); // CYRILLIC CAPITAL LETTER CHE, CYRILLIC SMALL LETTER CHE +test(0x0428, 0x0448); // CYRILLIC CAPITAL LETTER SHA, CYRILLIC SMALL LETTER SHA +test(0x0429, 0x0449); // CYRILLIC CAPITAL LETTER SHCHA, CYRILLIC SMALL LETTER SHCHA +test(0x042A, 0x044A, 0x1C86); // CYRILLIC CAPITAL LETTER HARD SIGN, CYRILLIC SMALL LETTER HARD SIGN, CYRILLIC SMALL LETTER TALL HARD SIGN +test(0x042B, 0x044B); // CYRILLIC CAPITAL LETTER YERU (CYRILLIC CAPITAL LETTER YERI), CYRILLIC SMALL LETTER YERU (CYRILLIC SMALL LETTER YERI) +test(0x042C, 0x044C); // CYRILLIC CAPITAL LETTER SOFT SIGN, CYRILLIC SMALL LETTER SOFT SIGN +test(0x042D, 0x044D); // CYRILLIC CAPITAL LETTER E (CYRILLIC CAPITAL LETTER REVERSED E), CYRILLIC SMALL LETTER E (CYRILLIC SMALL LETTER REVERSED E) +test(0x042E, 0x044E); // CYRILLIC CAPITAL LETTER YU (CYRILLIC CAPITAL LETTER IU), CYRILLIC SMALL LETTER YU (CYRILLIC SMALL LETTER IU) +test(0x042F, 0x044F); // CYRILLIC CAPITAL LETTER YA (CYRILLIC CAPITAL LETTER IA), CYRILLIC SMALL LETTER YA (CYRILLIC SMALL LETTER IA) +test(0x0430, 0x0410); // CYRILLIC SMALL LETTER A, CYRILLIC CAPITAL LETTER A +test(0x0431, 0x0411); // CYRILLIC SMALL LETTER BE, CYRILLIC CAPITAL LETTER BE +test(0x0432, 0x0412, 0x1C80); // CYRILLIC SMALL LETTER VE, CYRILLIC CAPITAL LETTER VE, CYRILLIC SMALL LETTER ROUNDED VE +test(0x0433, 0x0413); // CYRILLIC SMALL LETTER GHE (CYRILLIC SMALL LETTER GE), CYRILLIC CAPITAL LETTER GHE (CYRILLIC CAPITAL LETTER GE) +test(0x0434, 0x0414, 0x1C81); // CYRILLIC SMALL LETTER DE, CYRILLIC CAPITAL LETTER DE, CYRILLIC SMALL LETTER LONG-LEGGED DE +test(0x0435, 0x0415); // CYRILLIC SMALL LETTER IE, CYRILLIC CAPITAL LETTER IE +test(0x0436, 0x0416); // CYRILLIC SMALL LETTER ZHE, CYRILLIC CAPITAL LETTER ZHE +test(0x0437, 0x0417); // CYRILLIC SMALL LETTER ZE, CYRILLIC CAPITAL LETTER ZE +test(0x0438, 0x0418); // CYRILLIC SMALL LETTER I (CYRILLIC SMALL LETTER II), CYRILLIC CAPITAL LETTER I (CYRILLIC CAPITAL LETTER II) +test(0x0439, 0x0419); // CYRILLIC SMALL LETTER SHORT I (CYRILLIC SMALL LETTER SHORT II), CYRILLIC CAPITAL LETTER SHORT I (CYRILLIC CAPITAL LETTER SHORT II) +test(0x043A, 0x041A); // CYRILLIC SMALL LETTER KA, CYRILLIC CAPITAL LETTER KA +test(0x043B, 0x041B); // CYRILLIC SMALL LETTER EL, CYRILLIC CAPITAL LETTER EL +test(0x043C, 0x041C); // CYRILLIC SMALL LETTER EM, CYRILLIC CAPITAL LETTER EM +test(0x043D, 0x041D); // CYRILLIC SMALL LETTER EN, CYRILLIC CAPITAL LETTER EN +test(0x043E, 0x041E, 0x1C82); // CYRILLIC SMALL LETTER O, CYRILLIC CAPITAL LETTER O, CYRILLIC SMALL LETTER NARROW O +test(0x043F, 0x041F); // CYRILLIC SMALL LETTER PE, CYRILLIC CAPITAL LETTER PE +test(0x0440, 0x0420); // CYRILLIC SMALL LETTER ER, CYRILLIC CAPITAL LETTER ER +test(0x0441, 0x0421, 0x1C83); // CYRILLIC SMALL LETTER ES, CYRILLIC CAPITAL LETTER ES, CYRILLIC SMALL LETTER WIDE ES +test(0x0442, 0x0422, 0x1C84, 0x1C85); // CYRILLIC SMALL LETTER TE, CYRILLIC CAPITAL LETTER TE, CYRILLIC SMALL LETTER TALL TE, CYRILLIC SMALL LETTER THREE-LEGGED TE +test(0x0443, 0x0423); // CYRILLIC SMALL LETTER U, CYRILLIC CAPITAL LETTER U +test(0x0444, 0x0424); // CYRILLIC SMALL LETTER EF, CYRILLIC CAPITAL LETTER EF +test(0x0445, 0x0425); // CYRILLIC SMALL LETTER HA (CYRILLIC SMALL LETTER KHA), CYRILLIC CAPITAL LETTER HA (CYRILLIC CAPITAL LETTER KHA) +test(0x0446, 0x0426); // CYRILLIC SMALL LETTER TSE, CYRILLIC CAPITAL LETTER TSE +test(0x0447, 0x0427); // CYRILLIC SMALL LETTER CHE, CYRILLIC CAPITAL LETTER CHE +test(0x0448, 0x0428); // CYRILLIC SMALL LETTER SHA, CYRILLIC CAPITAL LETTER SHA +test(0x0449, 0x0429); // CYRILLIC SMALL LETTER SHCHA, CYRILLIC CAPITAL LETTER SHCHA +test(0x044A, 0x042A, 0x1C86); // CYRILLIC SMALL LETTER HARD SIGN, CYRILLIC CAPITAL LETTER HARD SIGN, CYRILLIC SMALL LETTER TALL HARD SIGN +test(0x044B, 0x042B); // CYRILLIC SMALL LETTER YERU (CYRILLIC SMALL LETTER YERI), CYRILLIC CAPITAL LETTER YERU (CYRILLIC CAPITAL LETTER YERI) +test(0x044C, 0x042C); // CYRILLIC SMALL LETTER SOFT SIGN, CYRILLIC CAPITAL LETTER SOFT SIGN +test(0x044D, 0x042D); // CYRILLIC SMALL LETTER E (CYRILLIC SMALL LETTER REVERSED E), CYRILLIC CAPITAL LETTER E (CYRILLIC CAPITAL LETTER REVERSED E) +test(0x044E, 0x042E); // CYRILLIC SMALL LETTER YU (CYRILLIC SMALL LETTER IU), CYRILLIC CAPITAL LETTER YU (CYRILLIC CAPITAL LETTER IU) +test(0x044F, 0x042F); // CYRILLIC SMALL LETTER YA (CYRILLIC SMALL LETTER IA), CYRILLIC CAPITAL LETTER YA (CYRILLIC CAPITAL LETTER IA) +test(0x0450, 0x0400); // CYRILLIC SMALL LETTER IE WITH GRAVE, CYRILLIC CAPITAL LETTER IE WITH GRAVE +test(0x0451, 0x0401); // CYRILLIC SMALL LETTER IO, CYRILLIC CAPITAL LETTER IO +test(0x0452, 0x0402); // CYRILLIC SMALL LETTER DJE, CYRILLIC CAPITAL LETTER DJE +test(0x0453, 0x0403); // CYRILLIC SMALL LETTER GJE, CYRILLIC CAPITAL LETTER GJE +test(0x0454, 0x0404); // CYRILLIC SMALL LETTER UKRAINIAN IE (CYRILLIC SMALL LETTER E), CYRILLIC CAPITAL LETTER UKRAINIAN IE (CYRILLIC CAPITAL LETTER E) +test(0x0455, 0x0405); // CYRILLIC SMALL LETTER DZE, CYRILLIC CAPITAL LETTER DZE +test(0x0456, 0x0406); // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC SMALL LETTER I), CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC CAPITAL LETTER I) +test(0x0457, 0x0407); // CYRILLIC SMALL LETTER YI, CYRILLIC CAPITAL LETTER YI +test(0x0458, 0x0408); // CYRILLIC SMALL LETTER JE, CYRILLIC CAPITAL LETTER JE +test(0x0459, 0x0409); // CYRILLIC SMALL LETTER LJE, CYRILLIC CAPITAL LETTER LJE +test(0x045A, 0x040A); // CYRILLIC SMALL LETTER NJE, CYRILLIC CAPITAL LETTER NJE +test(0x045B, 0x040B); // CYRILLIC SMALL LETTER TSHE, CYRILLIC CAPITAL LETTER TSHE +test(0x045C, 0x040C); // CYRILLIC SMALL LETTER KJE, CYRILLIC CAPITAL LETTER KJE +test(0x045D, 0x040D); // CYRILLIC SMALL LETTER I WITH GRAVE, CYRILLIC CAPITAL LETTER I WITH GRAVE +test(0x045E, 0x040E); // CYRILLIC SMALL LETTER SHORT U, CYRILLIC CAPITAL LETTER SHORT U +test(0x045F, 0x040F); // CYRILLIC SMALL LETTER DZHE, CYRILLIC CAPITAL LETTER DZHE +test(0x0460, 0x0461); // CYRILLIC CAPITAL LETTER OMEGA, CYRILLIC SMALL LETTER OMEGA +test(0x0461, 0x0460); // CYRILLIC SMALL LETTER OMEGA, CYRILLIC CAPITAL LETTER OMEGA +test(0x0462, 0x0463, 0x1C87); // CYRILLIC CAPITAL LETTER YAT, CYRILLIC SMALL LETTER YAT, CYRILLIC SMALL LETTER TALL YAT +test(0x0463, 0x0462, 0x1C87); // CYRILLIC SMALL LETTER YAT, CYRILLIC CAPITAL LETTER YAT, CYRILLIC SMALL LETTER TALL YAT +test(0x0464, 0x0465); // CYRILLIC CAPITAL LETTER IOTIFIED E, CYRILLIC SMALL LETTER IOTIFIED E +test(0x0465, 0x0464); // CYRILLIC SMALL LETTER IOTIFIED E, CYRILLIC CAPITAL LETTER IOTIFIED E +test(0x0466, 0x0467); // CYRILLIC CAPITAL LETTER LITTLE YUS, CYRILLIC SMALL LETTER LITTLE YUS +test(0x0467, 0x0466); // CYRILLIC SMALL LETTER LITTLE YUS, CYRILLIC CAPITAL LETTER LITTLE YUS +test(0x0468, 0x0469); // CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS, CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +test(0x0469, 0x0468); // CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS, CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +test(0x046A, 0x046B); // CYRILLIC CAPITAL LETTER BIG YUS, CYRILLIC SMALL LETTER BIG YUS +test(0x046B, 0x046A); // CYRILLIC SMALL LETTER BIG YUS, CYRILLIC CAPITAL LETTER BIG YUS +test(0x046C, 0x046D); // CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS, CYRILLIC SMALL LETTER IOTIFIED BIG YUS +test(0x046D, 0x046C); // CYRILLIC SMALL LETTER IOTIFIED BIG YUS, CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +test(0x046E, 0x046F); // CYRILLIC CAPITAL LETTER KSI, CYRILLIC SMALL LETTER KSI +test(0x046F, 0x046E); // CYRILLIC SMALL LETTER KSI, CYRILLIC CAPITAL LETTER KSI +test(0x0470, 0x0471); // CYRILLIC CAPITAL LETTER PSI, CYRILLIC SMALL LETTER PSI +test(0x0471, 0x0470); // CYRILLIC SMALL LETTER PSI, CYRILLIC CAPITAL LETTER PSI +test(0x0472, 0x0473); // CYRILLIC CAPITAL LETTER FITA, CYRILLIC SMALL LETTER FITA +test(0x0473, 0x0472); // CYRILLIC SMALL LETTER FITA, CYRILLIC CAPITAL LETTER FITA +test(0x0474, 0x0475); // CYRILLIC CAPITAL LETTER IZHITSA, CYRILLIC SMALL LETTER IZHITSA +test(0x0475, 0x0474); // CYRILLIC SMALL LETTER IZHITSA, CYRILLIC CAPITAL LETTER IZHITSA +test(0x0476, 0x0477); // CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE), CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE) +test(0x0477, 0x0476); // CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE), CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE) +test(0x0478, 0x0479); // CYRILLIC CAPITAL LETTER UK (CYRILLIC CAPITAL LETTER UK DIGRAPH), CYRILLIC SMALL LETTER UK (CYRILLIC SMALL LETTER UK DIGRAPH) +test(0x0479, 0x0478); // CYRILLIC SMALL LETTER UK (CYRILLIC SMALL LETTER UK DIGRAPH), CYRILLIC CAPITAL LETTER UK (CYRILLIC CAPITAL LETTER UK DIGRAPH) +test(0x047A, 0x047B); // CYRILLIC CAPITAL LETTER ROUND OMEGA, CYRILLIC SMALL LETTER ROUND OMEGA +test(0x047B, 0x047A); // CYRILLIC SMALL LETTER ROUND OMEGA, CYRILLIC CAPITAL LETTER ROUND OMEGA +test(0x047C, 0x047D); // CYRILLIC CAPITAL LETTER OMEGA WITH TITLO (CYRILLIC CAPITAL LETTER OMEGA TITLO), CYRILLIC SMALL LETTER OMEGA WITH TITLO (CYRILLIC SMALL LETTER OMEGA TITLO) +test(0x047D, 0x047C); // CYRILLIC SMALL LETTER OMEGA WITH TITLO (CYRILLIC SMALL LETTER OMEGA TITLO), CYRILLIC CAPITAL LETTER OMEGA WITH TITLO (CYRILLIC CAPITAL LETTER OMEGA TITLO) +test(0x047E, 0x047F); // CYRILLIC CAPITAL LETTER OT, CYRILLIC SMALL LETTER OT +test(0x047F, 0x047E); // CYRILLIC SMALL LETTER OT, CYRILLIC CAPITAL LETTER OT +test(0x0480, 0x0481); // CYRILLIC CAPITAL LETTER KOPPA, CYRILLIC SMALL LETTER KOPPA +test(0x0481, 0x0480); // CYRILLIC SMALL LETTER KOPPA, CYRILLIC CAPITAL LETTER KOPPA +test(0x048A, 0x048B); // CYRILLIC CAPITAL LETTER SHORT I WITH TAIL, CYRILLIC SMALL LETTER SHORT I WITH TAIL +test(0x048B, 0x048A); // CYRILLIC SMALL LETTER SHORT I WITH TAIL, CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +test(0x048C, 0x048D); // CYRILLIC CAPITAL LETTER SEMISOFT SIGN, CYRILLIC SMALL LETTER SEMISOFT SIGN +test(0x048D, 0x048C); // CYRILLIC SMALL LETTER SEMISOFT SIGN, CYRILLIC CAPITAL LETTER SEMISOFT SIGN +test(0x048E, 0x048F); // CYRILLIC CAPITAL LETTER ER WITH TICK, CYRILLIC SMALL LETTER ER WITH TICK +test(0x048F, 0x048E); // CYRILLIC SMALL LETTER ER WITH TICK, CYRILLIC CAPITAL LETTER ER WITH TICK +test(0x0490, 0x0491); // CYRILLIC CAPITAL LETTER GHE WITH UPTURN (CYRILLIC CAPITAL LETTER GE WITH UPTURN), CYRILLIC SMALL LETTER GHE WITH UPTURN (CYRILLIC SMALL LETTER GE WITH UPTURN) +test(0x0491, 0x0490); // CYRILLIC SMALL LETTER GHE WITH UPTURN (CYRILLIC SMALL LETTER GE WITH UPTURN), CYRILLIC CAPITAL LETTER GHE WITH UPTURN (CYRILLIC CAPITAL LETTER GE WITH UPTURN) +test(0x0492, 0x0493); // CYRILLIC CAPITAL LETTER GHE WITH STROKE (CYRILLIC CAPITAL LETTER GE BAR), CYRILLIC SMALL LETTER GHE WITH STROKE (CYRILLIC SMALL LETTER GE BAR) +test(0x0493, 0x0492); // CYRILLIC SMALL LETTER GHE WITH STROKE (CYRILLIC SMALL LETTER GE BAR), CYRILLIC CAPITAL LETTER GHE WITH STROKE (CYRILLIC CAPITAL LETTER GE BAR) +test(0x0494, 0x0495); // CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER GE HOOK), CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER GE HOOK) +test(0x0495, 0x0494); // CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER GE HOOK), CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER GE HOOK) +test(0x0496, 0x0497); // CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER), CYRILLIC SMALL LETTER ZHE WITH DESCENDER (CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER) +test(0x0497, 0x0496); // CYRILLIC SMALL LETTER ZHE WITH DESCENDER (CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER), CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER) +test(0x0498, 0x0499); // CYRILLIC CAPITAL LETTER ZE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZE CEDILLA), CYRILLIC SMALL LETTER ZE WITH DESCENDER (CYRILLIC SMALL LETTER ZE CEDILLA) +test(0x0499, 0x0498); // CYRILLIC SMALL LETTER ZE WITH DESCENDER (CYRILLIC SMALL LETTER ZE CEDILLA), CYRILLIC CAPITAL LETTER ZE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZE CEDILLA) +test(0x049A, 0x049B); // CYRILLIC CAPITAL LETTER KA WITH DESCENDER (CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER), CYRILLIC SMALL LETTER KA WITH DESCENDER (CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER) +test(0x049B, 0x049A); // CYRILLIC SMALL LETTER KA WITH DESCENDER (CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER), CYRILLIC CAPITAL LETTER KA WITH DESCENDER (CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER) +test(0x049C, 0x049D); // CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER KA VERTICAL BAR), CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE (CYRILLIC SMALL LETTER KA VERTICAL BAR) +test(0x049D, 0x049C); // CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE (CYRILLIC SMALL LETTER KA VERTICAL BAR), CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER KA VERTICAL BAR) +test(0x049E, 0x049F); // CYRILLIC CAPITAL LETTER KA WITH STROKE (CYRILLIC CAPITAL LETTER KA BAR), CYRILLIC SMALL LETTER KA WITH STROKE (CYRILLIC SMALL LETTER KA BAR) +test(0x049F, 0x049E); // CYRILLIC SMALL LETTER KA WITH STROKE (CYRILLIC SMALL LETTER KA BAR), CYRILLIC CAPITAL LETTER KA WITH STROKE (CYRILLIC CAPITAL LETTER KA BAR) +test(0x04A0, 0x04A1); // CYRILLIC CAPITAL LETTER BASHKIR KA (CYRILLIC CAPITAL LETTER REVERSED GE KA), CYRILLIC SMALL LETTER BASHKIR KA (CYRILLIC SMALL LETTER REVERSED GE KA) +test(0x04A1, 0x04A0); // CYRILLIC SMALL LETTER BASHKIR KA (CYRILLIC SMALL LETTER REVERSED GE KA), CYRILLIC CAPITAL LETTER BASHKIR KA (CYRILLIC CAPITAL LETTER REVERSED GE KA) +test(0x04A2, 0x04A3); // CYRILLIC CAPITAL LETTER EN WITH DESCENDER (CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER), CYRILLIC SMALL LETTER EN WITH DESCENDER (CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER) +test(0x04A3, 0x04A2); // CYRILLIC SMALL LETTER EN WITH DESCENDER (CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER), CYRILLIC CAPITAL LETTER EN WITH DESCENDER (CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER) +test(0x04A4, 0x04A5); // CYRILLIC CAPITAL LIGATURE EN GHE (CYRILLIC CAPITAL LETTER EN GE), CYRILLIC SMALL LIGATURE EN GHE (CYRILLIC SMALL LETTER EN GE) +test(0x04A5, 0x04A4); // CYRILLIC SMALL LIGATURE EN GHE (CYRILLIC SMALL LETTER EN GE), CYRILLIC CAPITAL LIGATURE EN GHE (CYRILLIC CAPITAL LETTER EN GE) +test(0x04A6, 0x04A7); // CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER PE HOOK), CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER PE HOOK) +test(0x04A7, 0x04A6); // CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER PE HOOK), CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER PE HOOK) +test(0x04A8, 0x04A9); // CYRILLIC CAPITAL LETTER ABKHASIAN HA (CYRILLIC CAPITAL LETTER O HOOK), CYRILLIC SMALL LETTER ABKHASIAN HA (CYRILLIC SMALL LETTER O HOOK) +test(0x04A9, 0x04A8); // CYRILLIC SMALL LETTER ABKHASIAN HA (CYRILLIC SMALL LETTER O HOOK), CYRILLIC CAPITAL LETTER ABKHASIAN HA (CYRILLIC CAPITAL LETTER O HOOK) +test(0x04AA, 0x04AB); // CYRILLIC CAPITAL LETTER ES WITH DESCENDER (CYRILLIC CAPITAL LETTER ES CEDILLA), CYRILLIC SMALL LETTER ES WITH DESCENDER (CYRILLIC SMALL LETTER ES CEDILLA) +test(0x04AB, 0x04AA); // CYRILLIC SMALL LETTER ES WITH DESCENDER (CYRILLIC SMALL LETTER ES CEDILLA), CYRILLIC CAPITAL LETTER ES WITH DESCENDER (CYRILLIC CAPITAL LETTER ES CEDILLA) +test(0x04AC, 0x04AD); // CYRILLIC CAPITAL LETTER TE WITH DESCENDER (CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER), CYRILLIC SMALL LETTER TE WITH DESCENDER (CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER) +test(0x04AD, 0x04AC); // CYRILLIC SMALL LETTER TE WITH DESCENDER (CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER), CYRILLIC CAPITAL LETTER TE WITH DESCENDER (CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER) +test(0x04AE, 0x04AF); // CYRILLIC CAPITAL LETTER STRAIGHT U, CYRILLIC SMALL LETTER STRAIGHT U +test(0x04AF, 0x04AE); // CYRILLIC SMALL LETTER STRAIGHT U, CYRILLIC CAPITAL LETTER STRAIGHT U +test(0x04B0, 0x04B1); // CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE (CYRILLIC CAPITAL LETTER STRAIGHT U BAR), CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE (CYRILLIC SMALL LETTER STRAIGHT U BAR) +test(0x04B1, 0x04B0); // CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE (CYRILLIC SMALL LETTER STRAIGHT U BAR), CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE (CYRILLIC CAPITAL LETTER STRAIGHT U BAR) +test(0x04B2, 0x04B3); // CYRILLIC CAPITAL LETTER HA WITH DESCENDER (CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER), CYRILLIC SMALL LETTER HA WITH DESCENDER (CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER) +test(0x04B3, 0x04B2); // CYRILLIC SMALL LETTER HA WITH DESCENDER (CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER), CYRILLIC CAPITAL LETTER HA WITH DESCENDER (CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER) +test(0x04B4, 0x04B5); // CYRILLIC CAPITAL LIGATURE TE TSE (CYRILLIC CAPITAL LETTER TE TSE), CYRILLIC SMALL LIGATURE TE TSE (CYRILLIC SMALL LETTER TE TSE) +test(0x04B5, 0x04B4); // CYRILLIC SMALL LIGATURE TE TSE (CYRILLIC SMALL LETTER TE TSE), CYRILLIC CAPITAL LIGATURE TE TSE (CYRILLIC CAPITAL LETTER TE TSE) +test(0x04B6, 0x04B7); // CYRILLIC CAPITAL LETTER CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER), CYRILLIC SMALL LETTER CHE WITH DESCENDER (CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER) +test(0x04B7, 0x04B6); // CYRILLIC SMALL LETTER CHE WITH DESCENDER (CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER), CYRILLIC CAPITAL LETTER CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER) +test(0x04B8, 0x04B9); // CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER CHE VERTICAL BAR), CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE (CYRILLIC SMALL LETTER CHE VERTICAL BAR) +test(0x04B9, 0x04B8); // CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE (CYRILLIC SMALL LETTER CHE VERTICAL BAR), CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER CHE VERTICAL BAR) +test(0x04BA, 0x04BB); // CYRILLIC CAPITAL LETTER SHHA (CYRILLIC CAPITAL LETTER H), CYRILLIC SMALL LETTER SHHA (CYRILLIC SMALL LETTER H) +test(0x04BB, 0x04BA); // CYRILLIC SMALL LETTER SHHA (CYRILLIC SMALL LETTER H), CYRILLIC CAPITAL LETTER SHHA (CYRILLIC CAPITAL LETTER H) +test(0x04BC, 0x04BD); // CYRILLIC CAPITAL LETTER ABKHASIAN CHE (CYRILLIC CAPITAL LETTER IE HOOK), CYRILLIC SMALL LETTER ABKHASIAN CHE (CYRILLIC SMALL LETTER IE HOOK) +test(0x04BD, 0x04BC); // CYRILLIC SMALL LETTER ABKHASIAN CHE (CYRILLIC SMALL LETTER IE HOOK), CYRILLIC CAPITAL LETTER ABKHASIAN CHE (CYRILLIC CAPITAL LETTER IE HOOK) +test(0x04BE, 0x04BF); // CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER IE HOOK OGONEK), CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC SMALL LETTER IE HOOK OGONEK) +test(0x04BF, 0x04BE); // CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC SMALL LETTER IE HOOK OGONEK), CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER IE HOOK OGONEK) +test(0x04C0, 0x04CF); // CYRILLIC LETTER PALOCHKA (CYRILLIC LETTER I), CYRILLIC SMALL LETTER PALOCHKA +test(0x04C1, 0x04C2); // CYRILLIC CAPITAL LETTER ZHE WITH BREVE (CYRILLIC CAPITAL LETTER SHORT ZHE), CYRILLIC SMALL LETTER ZHE WITH BREVE (CYRILLIC SMALL LETTER SHORT ZHE) +test(0x04C2, 0x04C1); // CYRILLIC SMALL LETTER ZHE WITH BREVE (CYRILLIC SMALL LETTER SHORT ZHE), CYRILLIC CAPITAL LETTER ZHE WITH BREVE (CYRILLIC CAPITAL LETTER SHORT ZHE) +test(0x04C3, 0x04C4); // CYRILLIC CAPITAL LETTER KA WITH HOOK (CYRILLIC CAPITAL LETTER KA HOOK), CYRILLIC SMALL LETTER KA WITH HOOK (CYRILLIC SMALL LETTER KA HOOK) +test(0x04C4, 0x04C3); // CYRILLIC SMALL LETTER KA WITH HOOK (CYRILLIC SMALL LETTER KA HOOK), CYRILLIC CAPITAL LETTER KA WITH HOOK (CYRILLIC CAPITAL LETTER KA HOOK) +test(0x04C5, 0x04C6); // CYRILLIC CAPITAL LETTER EL WITH TAIL, CYRILLIC SMALL LETTER EL WITH TAIL +test(0x04C6, 0x04C5); // CYRILLIC SMALL LETTER EL WITH TAIL, CYRILLIC CAPITAL LETTER EL WITH TAIL +test(0x04C7, 0x04C8); // CYRILLIC CAPITAL LETTER EN WITH HOOK (CYRILLIC CAPITAL LETTER EN HOOK), CYRILLIC SMALL LETTER EN WITH HOOK (CYRILLIC SMALL LETTER EN HOOK) +test(0x04C8, 0x04C7); // CYRILLIC SMALL LETTER EN WITH HOOK (CYRILLIC SMALL LETTER EN HOOK), CYRILLIC CAPITAL LETTER EN WITH HOOK (CYRILLIC CAPITAL LETTER EN HOOK) +test(0x04C9, 0x04CA); // CYRILLIC CAPITAL LETTER EN WITH TAIL, CYRILLIC SMALL LETTER EN WITH TAIL +test(0x04CA, 0x04C9); // CYRILLIC SMALL LETTER EN WITH TAIL, CYRILLIC CAPITAL LETTER EN WITH TAIL +test(0x04CB, 0x04CC); // CYRILLIC CAPITAL LETTER KHAKASSIAN CHE (CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER), CYRILLIC SMALL LETTER KHAKASSIAN CHE (CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER) +test(0x04CC, 0x04CB); // CYRILLIC SMALL LETTER KHAKASSIAN CHE (CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER), CYRILLIC CAPITAL LETTER KHAKASSIAN CHE (CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER) +test(0x04CD, 0x04CE); // CYRILLIC CAPITAL LETTER EM WITH TAIL, CYRILLIC SMALL LETTER EM WITH TAIL +test(0x04CE, 0x04CD); // CYRILLIC SMALL LETTER EM WITH TAIL, CYRILLIC CAPITAL LETTER EM WITH TAIL +test(0x04CF, 0x04C0); // CYRILLIC SMALL LETTER PALOCHKA, CYRILLIC LETTER PALOCHKA (CYRILLIC LETTER I) +test(0x04D0, 0x04D1); // CYRILLIC CAPITAL LETTER A WITH BREVE, CYRILLIC SMALL LETTER A WITH BREVE +test(0x04D1, 0x04D0); // CYRILLIC SMALL LETTER A WITH BREVE, CYRILLIC CAPITAL LETTER A WITH BREVE +test(0x04D2, 0x04D3); // CYRILLIC CAPITAL LETTER A WITH DIAERESIS, CYRILLIC SMALL LETTER A WITH DIAERESIS +test(0x04D3, 0x04D2); // CYRILLIC SMALL LETTER A WITH DIAERESIS, CYRILLIC CAPITAL LETTER A WITH DIAERESIS +test(0x04D4, 0x04D5); // CYRILLIC CAPITAL LIGATURE A IE, CYRILLIC SMALL LIGATURE A IE +test(0x04D5, 0x04D4); // CYRILLIC SMALL LIGATURE A IE, CYRILLIC CAPITAL LIGATURE A IE +test(0x04D6, 0x04D7); // CYRILLIC CAPITAL LETTER IE WITH BREVE, CYRILLIC SMALL LETTER IE WITH BREVE +test(0x04D7, 0x04D6); // CYRILLIC SMALL LETTER IE WITH BREVE, CYRILLIC CAPITAL LETTER IE WITH BREVE +test(0x04D8, 0x04D9); // CYRILLIC CAPITAL LETTER SCHWA, CYRILLIC SMALL LETTER SCHWA +test(0x04D9, 0x04D8); // CYRILLIC SMALL LETTER SCHWA, CYRILLIC CAPITAL LETTER SCHWA +test(0x04DA, 0x04DB); // CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS, CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +test(0x04DB, 0x04DA); // CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS, CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +test(0x04DC, 0x04DD); // CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS, CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +test(0x04DD, 0x04DC); // CYRILLIC SMALL LETTER ZHE WITH DIAERESIS, CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +test(0x04DE, 0x04DF); // CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS, CYRILLIC SMALL LETTER ZE WITH DIAERESIS +test(0x04DF, 0x04DE); // CYRILLIC SMALL LETTER ZE WITH DIAERESIS, CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +test(0x04E0, 0x04E1); // CYRILLIC CAPITAL LETTER ABKHASIAN DZE, CYRILLIC SMALL LETTER ABKHASIAN DZE +test(0x04E1, 0x04E0); // CYRILLIC SMALL LETTER ABKHASIAN DZE, CYRILLIC CAPITAL LETTER ABKHASIAN DZE +test(0x04E2, 0x04E3); // CYRILLIC CAPITAL LETTER I WITH MACRON, CYRILLIC SMALL LETTER I WITH MACRON +test(0x04E3, 0x04E2); // CYRILLIC SMALL LETTER I WITH MACRON, CYRILLIC CAPITAL LETTER I WITH MACRON +test(0x04E4, 0x04E5); // CYRILLIC CAPITAL LETTER I WITH DIAERESIS, CYRILLIC SMALL LETTER I WITH DIAERESIS +test(0x04E5, 0x04E4); // CYRILLIC SMALL LETTER I WITH DIAERESIS, CYRILLIC CAPITAL LETTER I WITH DIAERESIS +test(0x04E6, 0x04E7); // CYRILLIC CAPITAL LETTER O WITH DIAERESIS, CYRILLIC SMALL LETTER O WITH DIAERESIS +test(0x04E7, 0x04E6); // CYRILLIC SMALL LETTER O WITH DIAERESIS, CYRILLIC CAPITAL LETTER O WITH DIAERESIS +test(0x04E8, 0x04E9); // CYRILLIC CAPITAL LETTER BARRED O, CYRILLIC SMALL LETTER BARRED O +test(0x04E9, 0x04E8); // CYRILLIC SMALL LETTER BARRED O, CYRILLIC CAPITAL LETTER BARRED O +test(0x04EA, 0x04EB); // CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS, CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +test(0x04EB, 0x04EA); // CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS, CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +test(0x04EC, 0x04ED); // CYRILLIC CAPITAL LETTER E WITH DIAERESIS, CYRILLIC SMALL LETTER E WITH DIAERESIS +test(0x04ED, 0x04EC); // CYRILLIC SMALL LETTER E WITH DIAERESIS, CYRILLIC CAPITAL LETTER E WITH DIAERESIS +test(0x04EE, 0x04EF); // CYRILLIC CAPITAL LETTER U WITH MACRON, CYRILLIC SMALL LETTER U WITH MACRON +test(0x04EF, 0x04EE); // CYRILLIC SMALL LETTER U WITH MACRON, CYRILLIC CAPITAL LETTER U WITH MACRON +test(0x04F0, 0x04F1); // CYRILLIC CAPITAL LETTER U WITH DIAERESIS, CYRILLIC SMALL LETTER U WITH DIAERESIS +test(0x04F1, 0x04F0); // CYRILLIC SMALL LETTER U WITH DIAERESIS, CYRILLIC CAPITAL LETTER U WITH DIAERESIS +test(0x04F2, 0x04F3); // CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE, CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +test(0x04F3, 0x04F2); // CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE, CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +test(0x04F4, 0x04F5); // CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS, CYRILLIC SMALL LETTER CHE WITH DIAERESIS +test(0x04F5, 0x04F4); // CYRILLIC SMALL LETTER CHE WITH DIAERESIS, CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +test(0x04F6, 0x04F7); // CYRILLIC CAPITAL LETTER GHE WITH DESCENDER, CYRILLIC SMALL LETTER GHE WITH DESCENDER +test(0x04F7, 0x04F6); // CYRILLIC SMALL LETTER GHE WITH DESCENDER, CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +test(0x04F8, 0x04F9); // CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS, CYRILLIC SMALL LETTER YERU WITH DIAERESIS +test(0x04F9, 0x04F8); // CYRILLIC SMALL LETTER YERU WITH DIAERESIS, CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +test(0x04FA, 0x04FB); // CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK, CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK +test(0x04FB, 0x04FA); // CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK, CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +test(0x04FC, 0x04FD); // CYRILLIC CAPITAL LETTER HA WITH HOOK, CYRILLIC SMALL LETTER HA WITH HOOK +test(0x04FD, 0x04FC); // CYRILLIC SMALL LETTER HA WITH HOOK, CYRILLIC CAPITAL LETTER HA WITH HOOK +test(0x04FE, 0x04FF); // CYRILLIC CAPITAL LETTER HA WITH STROKE, CYRILLIC SMALL LETTER HA WITH STROKE +test(0x04FF, 0x04FE); // CYRILLIC SMALL LETTER HA WITH STROKE, CYRILLIC CAPITAL LETTER HA WITH STROKE +test(0x0500, 0x0501); // CYRILLIC CAPITAL LETTER KOMI DE, CYRILLIC SMALL LETTER KOMI DE +test(0x0501, 0x0500); // CYRILLIC SMALL LETTER KOMI DE, CYRILLIC CAPITAL LETTER KOMI DE +test(0x0502, 0x0503); // CYRILLIC CAPITAL LETTER KOMI DJE, CYRILLIC SMALL LETTER KOMI DJE +test(0x0503, 0x0502); // CYRILLIC SMALL LETTER KOMI DJE, CYRILLIC CAPITAL LETTER KOMI DJE +test(0x0504, 0x0505); // CYRILLIC CAPITAL LETTER KOMI ZJE, CYRILLIC SMALL LETTER KOMI ZJE +test(0x0505, 0x0504); // CYRILLIC SMALL LETTER KOMI ZJE, CYRILLIC CAPITAL LETTER KOMI ZJE +test(0x0506, 0x0507); // CYRILLIC CAPITAL LETTER KOMI DZJE, CYRILLIC SMALL LETTER KOMI DZJE +test(0x0507, 0x0506); // CYRILLIC SMALL LETTER KOMI DZJE, CYRILLIC CAPITAL LETTER KOMI DZJE +test(0x0508, 0x0509); // CYRILLIC CAPITAL LETTER KOMI LJE, CYRILLIC SMALL LETTER KOMI LJE +test(0x0509, 0x0508); // CYRILLIC SMALL LETTER KOMI LJE, CYRILLIC CAPITAL LETTER KOMI LJE +test(0x050A, 0x050B); // CYRILLIC CAPITAL LETTER KOMI NJE, CYRILLIC SMALL LETTER KOMI NJE +test(0x050B, 0x050A); // CYRILLIC SMALL LETTER KOMI NJE, CYRILLIC CAPITAL LETTER KOMI NJE +test(0x050C, 0x050D); // CYRILLIC CAPITAL LETTER KOMI SJE, CYRILLIC SMALL LETTER KOMI SJE +test(0x050D, 0x050C); // CYRILLIC SMALL LETTER KOMI SJE, CYRILLIC CAPITAL LETTER KOMI SJE +test(0x050E, 0x050F); // CYRILLIC CAPITAL LETTER KOMI TJE, CYRILLIC SMALL LETTER KOMI TJE +test(0x050F, 0x050E); // CYRILLIC SMALL LETTER KOMI TJE, CYRILLIC CAPITAL LETTER KOMI TJE +test(0x0510, 0x0511); // CYRILLIC CAPITAL LETTER REVERSED ZE, CYRILLIC SMALL LETTER REVERSED ZE +test(0x0511, 0x0510); // CYRILLIC SMALL LETTER REVERSED ZE, CYRILLIC CAPITAL LETTER REVERSED ZE +test(0x0512, 0x0513); // CYRILLIC CAPITAL LETTER EL WITH HOOK, CYRILLIC SMALL LETTER EL WITH HOOK +test(0x0513, 0x0512); // CYRILLIC SMALL LETTER EL WITH HOOK, CYRILLIC CAPITAL LETTER EL WITH HOOK +test(0x0514, 0x0515); // CYRILLIC CAPITAL LETTER LHA, CYRILLIC SMALL LETTER LHA +test(0x0515, 0x0514); // CYRILLIC SMALL LETTER LHA, CYRILLIC CAPITAL LETTER LHA +test(0x0516, 0x0517); // CYRILLIC CAPITAL LETTER RHA, CYRILLIC SMALL LETTER RHA +test(0x0517, 0x0516); // CYRILLIC SMALL LETTER RHA, CYRILLIC CAPITAL LETTER RHA +test(0x0518, 0x0519); // CYRILLIC CAPITAL LETTER YAE, CYRILLIC SMALL LETTER YAE +test(0x0519, 0x0518); // CYRILLIC SMALL LETTER YAE, CYRILLIC CAPITAL LETTER YAE +test(0x051A, 0x051B); // CYRILLIC CAPITAL LETTER QA, CYRILLIC SMALL LETTER QA +test(0x051B, 0x051A); // CYRILLIC SMALL LETTER QA, CYRILLIC CAPITAL LETTER QA +test(0x051C, 0x051D); // CYRILLIC CAPITAL LETTER WE, CYRILLIC SMALL LETTER WE +test(0x051D, 0x051C); // CYRILLIC SMALL LETTER WE, CYRILLIC CAPITAL LETTER WE +test(0x051E, 0x051F); // CYRILLIC CAPITAL LETTER ALEUT KA, CYRILLIC SMALL LETTER ALEUT KA +test(0x051F, 0x051E); // CYRILLIC SMALL LETTER ALEUT KA, CYRILLIC CAPITAL LETTER ALEUT KA +test(0x0520, 0x0521); // CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK, CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK +test(0x0521, 0x0520); // CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK, CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +test(0x0522, 0x0523); // CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK, CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK +test(0x0523, 0x0522); // CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK, CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +test(0x0524, 0x0525); // CYRILLIC CAPITAL LETTER PE WITH DESCENDER, CYRILLIC SMALL LETTER PE WITH DESCENDER +test(0x0525, 0x0524); // CYRILLIC SMALL LETTER PE WITH DESCENDER, CYRILLIC CAPITAL LETTER PE WITH DESCENDER +test(0x0526, 0x0527); // CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER, CYRILLIC SMALL LETTER SHHA WITH DESCENDER +test(0x0527, 0x0526); // CYRILLIC SMALL LETTER SHHA WITH DESCENDER, CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +test(0x0528, 0x0529); // CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK, CYRILLIC SMALL LETTER EN WITH LEFT HOOK +test(0x0529, 0x0528); // CYRILLIC SMALL LETTER EN WITH LEFT HOOK, CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +test(0x052A, 0x052B); // CYRILLIC CAPITAL LETTER DZZHE, CYRILLIC SMALL LETTER DZZHE +test(0x052B, 0x052A); // CYRILLIC SMALL LETTER DZZHE, CYRILLIC CAPITAL LETTER DZZHE +test(0x052C, 0x052D); // CYRILLIC CAPITAL LETTER DCHE, CYRILLIC SMALL LETTER DCHE +test(0x052D, 0x052C); // CYRILLIC SMALL LETTER DCHE, CYRILLIC CAPITAL LETTER DCHE +test(0x052E, 0x052F); // CYRILLIC CAPITAL LETTER EL WITH DESCENDER, CYRILLIC SMALL LETTER EL WITH DESCENDER +test(0x052F, 0x052E); // CYRILLIC SMALL LETTER EL WITH DESCENDER, CYRILLIC CAPITAL LETTER EL WITH DESCENDER +test(0x0531, 0x0561); // ARMENIAN CAPITAL LETTER AYB, ARMENIAN SMALL LETTER AYB +test(0x0532, 0x0562); // ARMENIAN CAPITAL LETTER BEN, ARMENIAN SMALL LETTER BEN +test(0x0533, 0x0563); // ARMENIAN CAPITAL LETTER GIM, ARMENIAN SMALL LETTER GIM +test(0x0534, 0x0564); // ARMENIAN CAPITAL LETTER DA, ARMENIAN SMALL LETTER DA +test(0x0535, 0x0565); // ARMENIAN CAPITAL LETTER ECH, ARMENIAN SMALL LETTER ECH +test(0x0536, 0x0566); // ARMENIAN CAPITAL LETTER ZA, ARMENIAN SMALL LETTER ZA +test(0x0537, 0x0567); // ARMENIAN CAPITAL LETTER EH, ARMENIAN SMALL LETTER EH +test(0x0538, 0x0568); // ARMENIAN CAPITAL LETTER ET, ARMENIAN SMALL LETTER ET +test(0x0539, 0x0569); // ARMENIAN CAPITAL LETTER TO, ARMENIAN SMALL LETTER TO +test(0x053A, 0x056A); // ARMENIAN CAPITAL LETTER ZHE, ARMENIAN SMALL LETTER ZHE +test(0x053B, 0x056B); // ARMENIAN CAPITAL LETTER INI, ARMENIAN SMALL LETTER INI +test(0x053C, 0x056C); // ARMENIAN CAPITAL LETTER LIWN, ARMENIAN SMALL LETTER LIWN +test(0x053D, 0x056D); // ARMENIAN CAPITAL LETTER XEH, ARMENIAN SMALL LETTER XEH +test(0x053E, 0x056E); // ARMENIAN CAPITAL LETTER CA, ARMENIAN SMALL LETTER CA +test(0x053F, 0x056F); // ARMENIAN CAPITAL LETTER KEN, ARMENIAN SMALL LETTER KEN +test(0x0540, 0x0570); // ARMENIAN CAPITAL LETTER HO, ARMENIAN SMALL LETTER HO +test(0x0541, 0x0571); // ARMENIAN CAPITAL LETTER JA, ARMENIAN SMALL LETTER JA +test(0x0542, 0x0572); // ARMENIAN CAPITAL LETTER GHAD (ARMENIAN CAPITAL LETTER LAD), ARMENIAN SMALL LETTER GHAD (ARMENIAN SMALL LETTER LAD) +test(0x0543, 0x0573); // ARMENIAN CAPITAL LETTER CHEH, ARMENIAN SMALL LETTER CHEH +test(0x0544, 0x0574); // ARMENIAN CAPITAL LETTER MEN, ARMENIAN SMALL LETTER MEN +test(0x0545, 0x0575); // ARMENIAN CAPITAL LETTER YI, ARMENIAN SMALL LETTER YI +test(0x0546, 0x0576); // ARMENIAN CAPITAL LETTER NOW, ARMENIAN SMALL LETTER NOW +test(0x0547, 0x0577); // ARMENIAN CAPITAL LETTER SHA, ARMENIAN SMALL LETTER SHA +test(0x0548, 0x0578); // ARMENIAN CAPITAL LETTER VO, ARMENIAN SMALL LETTER VO +test(0x0549, 0x0579); // ARMENIAN CAPITAL LETTER CHA, ARMENIAN SMALL LETTER CHA +test(0x054A, 0x057A); // ARMENIAN CAPITAL LETTER PEH, ARMENIAN SMALL LETTER PEH +test(0x054B, 0x057B); // ARMENIAN CAPITAL LETTER JHEH, ARMENIAN SMALL LETTER JHEH +test(0x054C, 0x057C); // ARMENIAN CAPITAL LETTER RA, ARMENIAN SMALL LETTER RA +test(0x054D, 0x057D); // ARMENIAN CAPITAL LETTER SEH, ARMENIAN SMALL LETTER SEH +test(0x054E, 0x057E); // ARMENIAN CAPITAL LETTER VEW, ARMENIAN SMALL LETTER VEW +test(0x054F, 0x057F); // ARMENIAN CAPITAL LETTER TIWN, ARMENIAN SMALL LETTER TIWN +test(0x0550, 0x0580); // ARMENIAN CAPITAL LETTER REH, ARMENIAN SMALL LETTER REH +test(0x0551, 0x0581); // ARMENIAN CAPITAL LETTER CO, ARMENIAN SMALL LETTER CO +test(0x0552, 0x0582); // ARMENIAN CAPITAL LETTER YIWN, ARMENIAN SMALL LETTER YIWN +test(0x0553, 0x0583); // ARMENIAN CAPITAL LETTER PIWR, ARMENIAN SMALL LETTER PIWR +test(0x0554, 0x0584); // ARMENIAN CAPITAL LETTER KEH, ARMENIAN SMALL LETTER KEH +test(0x0555, 0x0585); // ARMENIAN CAPITAL LETTER OH, ARMENIAN SMALL LETTER OH +test(0x0556, 0x0586); // ARMENIAN CAPITAL LETTER FEH, ARMENIAN SMALL LETTER FEH +test(0x0561, 0x0531); // ARMENIAN SMALL LETTER AYB, ARMENIAN CAPITAL LETTER AYB +test(0x0562, 0x0532); // ARMENIAN SMALL LETTER BEN, ARMENIAN CAPITAL LETTER BEN +test(0x0563, 0x0533); // ARMENIAN SMALL LETTER GIM, ARMENIAN CAPITAL LETTER GIM +test(0x0564, 0x0534); // ARMENIAN SMALL LETTER DA, ARMENIAN CAPITAL LETTER DA +test(0x0565, 0x0535); // ARMENIAN SMALL LETTER ECH, ARMENIAN CAPITAL LETTER ECH +test(0x0566, 0x0536); // ARMENIAN SMALL LETTER ZA, ARMENIAN CAPITAL LETTER ZA +test(0x0567, 0x0537); // ARMENIAN SMALL LETTER EH, ARMENIAN CAPITAL LETTER EH +test(0x0568, 0x0538); // ARMENIAN SMALL LETTER ET, ARMENIAN CAPITAL LETTER ET +test(0x0569, 0x0539); // ARMENIAN SMALL LETTER TO, ARMENIAN CAPITAL LETTER TO +test(0x056A, 0x053A); // ARMENIAN SMALL LETTER ZHE, ARMENIAN CAPITAL LETTER ZHE +test(0x056B, 0x053B); // ARMENIAN SMALL LETTER INI, ARMENIAN CAPITAL LETTER INI +test(0x056C, 0x053C); // ARMENIAN SMALL LETTER LIWN, ARMENIAN CAPITAL LETTER LIWN +test(0x056D, 0x053D); // ARMENIAN SMALL LETTER XEH, ARMENIAN CAPITAL LETTER XEH +test(0x056E, 0x053E); // ARMENIAN SMALL LETTER CA, ARMENIAN CAPITAL LETTER CA +test(0x056F, 0x053F); // ARMENIAN SMALL LETTER KEN, ARMENIAN CAPITAL LETTER KEN +test(0x0570, 0x0540); // ARMENIAN SMALL LETTER HO, ARMENIAN CAPITAL LETTER HO +test(0x0571, 0x0541); // ARMENIAN SMALL LETTER JA, ARMENIAN CAPITAL LETTER JA +test(0x0572, 0x0542); // ARMENIAN SMALL LETTER GHAD (ARMENIAN SMALL LETTER LAD), ARMENIAN CAPITAL LETTER GHAD (ARMENIAN CAPITAL LETTER LAD) +test(0x0573, 0x0543); // ARMENIAN SMALL LETTER CHEH, ARMENIAN CAPITAL LETTER CHEH +test(0x0574, 0x0544); // ARMENIAN SMALL LETTER MEN, ARMENIAN CAPITAL LETTER MEN +test(0x0575, 0x0545); // ARMENIAN SMALL LETTER YI, ARMENIAN CAPITAL LETTER YI +test(0x0576, 0x0546); // ARMENIAN SMALL LETTER NOW, ARMENIAN CAPITAL LETTER NOW +test(0x0577, 0x0547); // ARMENIAN SMALL LETTER SHA, ARMENIAN CAPITAL LETTER SHA +test(0x0578, 0x0548); // ARMENIAN SMALL LETTER VO, ARMENIAN CAPITAL LETTER VO +test(0x0579, 0x0549); // ARMENIAN SMALL LETTER CHA, ARMENIAN CAPITAL LETTER CHA +test(0x057A, 0x054A); // ARMENIAN SMALL LETTER PEH, ARMENIAN CAPITAL LETTER PEH +test(0x057B, 0x054B); // ARMENIAN SMALL LETTER JHEH, ARMENIAN CAPITAL LETTER JHEH +test(0x057C, 0x054C); // ARMENIAN SMALL LETTER RA, ARMENIAN CAPITAL LETTER RA +test(0x057D, 0x054D); // ARMENIAN SMALL LETTER SEH, ARMENIAN CAPITAL LETTER SEH +test(0x057E, 0x054E); // ARMENIAN SMALL LETTER VEW, ARMENIAN CAPITAL LETTER VEW +test(0x057F, 0x054F); // ARMENIAN SMALL LETTER TIWN, ARMENIAN CAPITAL LETTER TIWN +test(0x0580, 0x0550); // ARMENIAN SMALL LETTER REH, ARMENIAN CAPITAL LETTER REH +test(0x0581, 0x0551); // ARMENIAN SMALL LETTER CO, ARMENIAN CAPITAL LETTER CO +test(0x0582, 0x0552); // ARMENIAN SMALL LETTER YIWN, ARMENIAN CAPITAL LETTER YIWN +test(0x0583, 0x0553); // ARMENIAN SMALL LETTER PIWR, ARMENIAN CAPITAL LETTER PIWR +test(0x0584, 0x0554); // ARMENIAN SMALL LETTER KEH, ARMENIAN CAPITAL LETTER KEH +test(0x0585, 0x0555); // ARMENIAN SMALL LETTER OH, ARMENIAN CAPITAL LETTER OH +test(0x0586, 0x0556); // ARMENIAN SMALL LETTER FEH, ARMENIAN CAPITAL LETTER FEH +test(0x10A0, 0x2D00); // GEORGIAN CAPITAL LETTER AN, GEORGIAN SMALL LETTER AN +test(0x10A1, 0x2D01); // GEORGIAN CAPITAL LETTER BAN, GEORGIAN SMALL LETTER BAN +test(0x10A2, 0x2D02); // GEORGIAN CAPITAL LETTER GAN, GEORGIAN SMALL LETTER GAN +test(0x10A3, 0x2D03); // GEORGIAN CAPITAL LETTER DON, GEORGIAN SMALL LETTER DON +test(0x10A4, 0x2D04); // GEORGIAN CAPITAL LETTER EN, GEORGIAN SMALL LETTER EN +test(0x10A5, 0x2D05); // GEORGIAN CAPITAL LETTER VIN, GEORGIAN SMALL LETTER VIN +test(0x10A6, 0x2D06); // GEORGIAN CAPITAL LETTER ZEN, GEORGIAN SMALL LETTER ZEN +test(0x10A7, 0x2D07); // GEORGIAN CAPITAL LETTER TAN, GEORGIAN SMALL LETTER TAN +test(0x10A8, 0x2D08); // GEORGIAN CAPITAL LETTER IN, GEORGIAN SMALL LETTER IN +test(0x10A9, 0x2D09); // GEORGIAN CAPITAL LETTER KAN, GEORGIAN SMALL LETTER KAN +test(0x10AA, 0x2D0A); // GEORGIAN CAPITAL LETTER LAS, GEORGIAN SMALL LETTER LAS +test(0x10AB, 0x2D0B); // GEORGIAN CAPITAL LETTER MAN, GEORGIAN SMALL LETTER MAN +test(0x10AC, 0x2D0C); // GEORGIAN CAPITAL LETTER NAR, GEORGIAN SMALL LETTER NAR +test(0x10AD, 0x2D0D); // GEORGIAN CAPITAL LETTER ON, GEORGIAN SMALL LETTER ON +test(0x10AE, 0x2D0E); // GEORGIAN CAPITAL LETTER PAR, GEORGIAN SMALL LETTER PAR +test(0x10AF, 0x2D0F); // GEORGIAN CAPITAL LETTER ZHAR, GEORGIAN SMALL LETTER ZHAR +test(0x10B0, 0x2D10); // GEORGIAN CAPITAL LETTER RAE, GEORGIAN SMALL LETTER RAE +test(0x10B1, 0x2D11); // GEORGIAN CAPITAL LETTER SAN, GEORGIAN SMALL LETTER SAN +test(0x10B2, 0x2D12); // GEORGIAN CAPITAL LETTER TAR, GEORGIAN SMALL LETTER TAR +test(0x10B3, 0x2D13); // GEORGIAN CAPITAL LETTER UN, GEORGIAN SMALL LETTER UN +test(0x10B4, 0x2D14); // GEORGIAN CAPITAL LETTER PHAR, GEORGIAN SMALL LETTER PHAR +test(0x10B5, 0x2D15); // GEORGIAN CAPITAL LETTER KHAR, GEORGIAN SMALL LETTER KHAR +test(0x10B6, 0x2D16); // GEORGIAN CAPITAL LETTER GHAN, GEORGIAN SMALL LETTER GHAN +test(0x10B7, 0x2D17); // GEORGIAN CAPITAL LETTER QAR, GEORGIAN SMALL LETTER QAR +test(0x10B8, 0x2D18); // GEORGIAN CAPITAL LETTER SHIN, GEORGIAN SMALL LETTER SHIN +test(0x10B9, 0x2D19); // GEORGIAN CAPITAL LETTER CHIN, GEORGIAN SMALL LETTER CHIN +test(0x10BA, 0x2D1A); // GEORGIAN CAPITAL LETTER CAN, GEORGIAN SMALL LETTER CAN +test(0x10BB, 0x2D1B); // GEORGIAN CAPITAL LETTER JIL, GEORGIAN SMALL LETTER JIL +test(0x10BC, 0x2D1C); // GEORGIAN CAPITAL LETTER CIL, GEORGIAN SMALL LETTER CIL +test(0x10BD, 0x2D1D); // GEORGIAN CAPITAL LETTER CHAR, GEORGIAN SMALL LETTER CHAR +test(0x10BE, 0x2D1E); // GEORGIAN CAPITAL LETTER XAN, GEORGIAN SMALL LETTER XAN +test(0x10BF, 0x2D1F); // GEORGIAN CAPITAL LETTER JHAN, GEORGIAN SMALL LETTER JHAN +test(0x10C0, 0x2D20); // GEORGIAN CAPITAL LETTER HAE, GEORGIAN SMALL LETTER HAE +test(0x10C1, 0x2D21); // GEORGIAN CAPITAL LETTER HE, GEORGIAN SMALL LETTER HE +test(0x10C2, 0x2D22); // GEORGIAN CAPITAL LETTER HIE, GEORGIAN SMALL LETTER HIE +test(0x10C3, 0x2D23); // GEORGIAN CAPITAL LETTER WE, GEORGIAN SMALL LETTER WE +test(0x10C4, 0x2D24); // GEORGIAN CAPITAL LETTER HAR, GEORGIAN SMALL LETTER HAR +test(0x10C5, 0x2D25); // GEORGIAN CAPITAL LETTER HOE, GEORGIAN SMALL LETTER HOE +test(0x10C7, 0x2D27); // GEORGIAN CAPITAL LETTER YN, GEORGIAN SMALL LETTER YN +test(0x10CD, 0x2D2D); // GEORGIAN CAPITAL LETTER AEN, GEORGIAN SMALL LETTER AEN +test(0x10D0, 0x1C90); // GEORGIAN LETTER AN (GEORGIAN SMALL LETTER AN), GEORGIAN MTAVRULI CAPITAL LETTER AN +test(0x10D1, 0x1C91); // GEORGIAN LETTER BAN (GEORGIAN SMALL LETTER BAN), GEORGIAN MTAVRULI CAPITAL LETTER BAN +test(0x10D2, 0x1C92); // GEORGIAN LETTER GAN (GEORGIAN SMALL LETTER GAN), GEORGIAN MTAVRULI CAPITAL LETTER GAN +test(0x10D3, 0x1C93); // GEORGIAN LETTER DON (GEORGIAN SMALL LETTER DON), GEORGIAN MTAVRULI CAPITAL LETTER DON +test(0x10D4, 0x1C94); // GEORGIAN LETTER EN (GEORGIAN SMALL LETTER EN), GEORGIAN MTAVRULI CAPITAL LETTER EN +test(0x10D5, 0x1C95); // GEORGIAN LETTER VIN (GEORGIAN SMALL LETTER VIN), GEORGIAN MTAVRULI CAPITAL LETTER VIN +test(0x10D6, 0x1C96); // GEORGIAN LETTER ZEN (GEORGIAN SMALL LETTER ZEN), GEORGIAN MTAVRULI CAPITAL LETTER ZEN +test(0x10D7, 0x1C97); // GEORGIAN LETTER TAN (GEORGIAN SMALL LETTER TAN), GEORGIAN MTAVRULI CAPITAL LETTER TAN +test(0x10D8, 0x1C98); // GEORGIAN LETTER IN (GEORGIAN SMALL LETTER IN), GEORGIAN MTAVRULI CAPITAL LETTER IN +test(0x10D9, 0x1C99); // GEORGIAN LETTER KAN (GEORGIAN SMALL LETTER KAN), GEORGIAN MTAVRULI CAPITAL LETTER KAN +test(0x10DA, 0x1C9A); // GEORGIAN LETTER LAS (GEORGIAN SMALL LETTER LAS), GEORGIAN MTAVRULI CAPITAL LETTER LAS +test(0x10DB, 0x1C9B); // GEORGIAN LETTER MAN (GEORGIAN SMALL LETTER MAN), GEORGIAN MTAVRULI CAPITAL LETTER MAN +test(0x10DC, 0x1C9C); // GEORGIAN LETTER NAR (GEORGIAN SMALL LETTER NAR), GEORGIAN MTAVRULI CAPITAL LETTER NAR +test(0x10DD, 0x1C9D); // GEORGIAN LETTER ON (GEORGIAN SMALL LETTER ON), GEORGIAN MTAVRULI CAPITAL LETTER ON +test(0x10DE, 0x1C9E); // GEORGIAN LETTER PAR (GEORGIAN SMALL LETTER PAR), GEORGIAN MTAVRULI CAPITAL LETTER PAR +test(0x10DF, 0x1C9F); // GEORGIAN LETTER ZHAR (GEORGIAN SMALL LETTER ZHAR), GEORGIAN MTAVRULI CAPITAL LETTER ZHAR +test(0x10E0, 0x1CA0); // GEORGIAN LETTER RAE (GEORGIAN SMALL LETTER RAE), GEORGIAN MTAVRULI CAPITAL LETTER RAE +test(0x10E1, 0x1CA1); // GEORGIAN LETTER SAN (GEORGIAN SMALL LETTER SAN), GEORGIAN MTAVRULI CAPITAL LETTER SAN +test(0x10E2, 0x1CA2); // GEORGIAN LETTER TAR (GEORGIAN SMALL LETTER TAR), GEORGIAN MTAVRULI CAPITAL LETTER TAR +test(0x10E3, 0x1CA3); // GEORGIAN LETTER UN (GEORGIAN SMALL LETTER UN), GEORGIAN MTAVRULI CAPITAL LETTER UN +test(0x10E4, 0x1CA4); // GEORGIAN LETTER PHAR (GEORGIAN SMALL LETTER PHAR), GEORGIAN MTAVRULI CAPITAL LETTER PHAR +test(0x10E5, 0x1CA5); // GEORGIAN LETTER KHAR (GEORGIAN SMALL LETTER KHAR), GEORGIAN MTAVRULI CAPITAL LETTER KHAR +test(0x10E6, 0x1CA6); // GEORGIAN LETTER GHAN (GEORGIAN SMALL LETTER GHAN), GEORGIAN MTAVRULI CAPITAL LETTER GHAN +test(0x10E7, 0x1CA7); // GEORGIAN LETTER QAR (GEORGIAN SMALL LETTER QAR), GEORGIAN MTAVRULI CAPITAL LETTER QAR +test(0x10E8, 0x1CA8); // GEORGIAN LETTER SHIN (GEORGIAN SMALL LETTER SHIN), GEORGIAN MTAVRULI CAPITAL LETTER SHIN +test(0x10E9, 0x1CA9); // GEORGIAN LETTER CHIN (GEORGIAN SMALL LETTER CHIN), GEORGIAN MTAVRULI CAPITAL LETTER CHIN +test(0x10EA, 0x1CAA); // GEORGIAN LETTER CAN (GEORGIAN SMALL LETTER CAN), GEORGIAN MTAVRULI CAPITAL LETTER CAN +test(0x10EB, 0x1CAB); // GEORGIAN LETTER JIL (GEORGIAN SMALL LETTER JIL), GEORGIAN MTAVRULI CAPITAL LETTER JIL +test(0x10EC, 0x1CAC); // GEORGIAN LETTER CIL (GEORGIAN SMALL LETTER CIL), GEORGIAN MTAVRULI CAPITAL LETTER CIL +test(0x10ED, 0x1CAD); // GEORGIAN LETTER CHAR (GEORGIAN SMALL LETTER CHAR), GEORGIAN MTAVRULI CAPITAL LETTER CHAR +test(0x10EE, 0x1CAE); // GEORGIAN LETTER XAN (GEORGIAN SMALL LETTER XAN), GEORGIAN MTAVRULI CAPITAL LETTER XAN +test(0x10EF, 0x1CAF); // GEORGIAN LETTER JHAN (GEORGIAN SMALL LETTER JHAN), GEORGIAN MTAVRULI CAPITAL LETTER JHAN +test(0x10F0, 0x1CB0); // GEORGIAN LETTER HAE (GEORGIAN SMALL LETTER HAE), GEORGIAN MTAVRULI CAPITAL LETTER HAE +test(0x10F1, 0x1CB1); // GEORGIAN LETTER HE (GEORGIAN SMALL LETTER HE), GEORGIAN MTAVRULI CAPITAL LETTER HE +test(0x10F2, 0x1CB2); // GEORGIAN LETTER HIE (GEORGIAN SMALL LETTER HIE), GEORGIAN MTAVRULI CAPITAL LETTER HIE +test(0x10F3, 0x1CB3); // GEORGIAN LETTER WE (GEORGIAN SMALL LETTER WE), GEORGIAN MTAVRULI CAPITAL LETTER WE +test(0x10F4, 0x1CB4); // GEORGIAN LETTER HAR (GEORGIAN SMALL LETTER HAR), GEORGIAN MTAVRULI CAPITAL LETTER HAR +test(0x10F5, 0x1CB5); // GEORGIAN LETTER HOE (GEORGIAN SMALL LETTER HOE), GEORGIAN MTAVRULI CAPITAL LETTER HOE +test(0x10F6, 0x1CB6); // GEORGIAN LETTER FI (GEORGIAN SMALL LETTER FI), GEORGIAN MTAVRULI CAPITAL LETTER FI +test(0x10F7, 0x1CB7); // GEORGIAN LETTER YN, GEORGIAN MTAVRULI CAPITAL LETTER YN +test(0x10F8, 0x1CB8); // GEORGIAN LETTER ELIFI, GEORGIAN MTAVRULI CAPITAL LETTER ELIFI +test(0x10F9, 0x1CB9); // GEORGIAN LETTER TURNED GAN, GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN +test(0x10FA, 0x1CBA); // GEORGIAN LETTER AIN, GEORGIAN MTAVRULI CAPITAL LETTER AIN +test(0x10FD, 0x1CBD); // GEORGIAN LETTER AEN, GEORGIAN MTAVRULI CAPITAL LETTER AEN +test(0x10FE, 0x1CBE); // GEORGIAN LETTER HARD SIGN, GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN +test(0x10FF, 0x1CBF); // GEORGIAN LETTER LABIAL SIGN, GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +test(0x13A0, 0xAB70); // CHEROKEE LETTER A, CHEROKEE SMALL LETTER A +test(0x13A1, 0xAB71); // CHEROKEE LETTER E, CHEROKEE SMALL LETTER E +test(0x13A2, 0xAB72); // CHEROKEE LETTER I, CHEROKEE SMALL LETTER I +test(0x13A3, 0xAB73); // CHEROKEE LETTER O, CHEROKEE SMALL LETTER O +test(0x13A4, 0xAB74); // CHEROKEE LETTER U, CHEROKEE SMALL LETTER U +test(0x13A5, 0xAB75); // CHEROKEE LETTER V, CHEROKEE SMALL LETTER V +test(0x13A6, 0xAB76); // CHEROKEE LETTER GA, CHEROKEE SMALL LETTER GA +test(0x13A7, 0xAB77); // CHEROKEE LETTER KA, CHEROKEE SMALL LETTER KA +test(0x13A8, 0xAB78); // CHEROKEE LETTER GE, CHEROKEE SMALL LETTER GE +test(0x13A9, 0xAB79); // CHEROKEE LETTER GI, CHEROKEE SMALL LETTER GI +test(0x13AA, 0xAB7A); // CHEROKEE LETTER GO, CHEROKEE SMALL LETTER GO +test(0x13AB, 0xAB7B); // CHEROKEE LETTER GU, CHEROKEE SMALL LETTER GU +test(0x13AC, 0xAB7C); // CHEROKEE LETTER GV, CHEROKEE SMALL LETTER GV +test(0x13AD, 0xAB7D); // CHEROKEE LETTER HA, CHEROKEE SMALL LETTER HA +test(0x13AE, 0xAB7E); // CHEROKEE LETTER HE, CHEROKEE SMALL LETTER HE +test(0x13AF, 0xAB7F); // CHEROKEE LETTER HI, CHEROKEE SMALL LETTER HI +test(0x13B0, 0xAB80); // CHEROKEE LETTER HO, CHEROKEE SMALL LETTER HO +test(0x13B1, 0xAB81); // CHEROKEE LETTER HU, CHEROKEE SMALL LETTER HU +test(0x13B2, 0xAB82); // CHEROKEE LETTER HV, CHEROKEE SMALL LETTER HV +test(0x13B3, 0xAB83); // CHEROKEE LETTER LA, CHEROKEE SMALL LETTER LA +test(0x13B4, 0xAB84); // CHEROKEE LETTER LE, CHEROKEE SMALL LETTER LE +test(0x13B5, 0xAB85); // CHEROKEE LETTER LI, CHEROKEE SMALL LETTER LI +test(0x13B6, 0xAB86); // CHEROKEE LETTER LO, CHEROKEE SMALL LETTER LO +test(0x13B7, 0xAB87); // CHEROKEE LETTER LU, CHEROKEE SMALL LETTER LU +test(0x13B8, 0xAB88); // CHEROKEE LETTER LV, CHEROKEE SMALL LETTER LV +test(0x13B9, 0xAB89); // CHEROKEE LETTER MA, CHEROKEE SMALL LETTER MA +test(0x13BA, 0xAB8A); // CHEROKEE LETTER ME, CHEROKEE SMALL LETTER ME +test(0x13BB, 0xAB8B); // CHEROKEE LETTER MI, CHEROKEE SMALL LETTER MI +test(0x13BC, 0xAB8C); // CHEROKEE LETTER MO, CHEROKEE SMALL LETTER MO +test(0x13BD, 0xAB8D); // CHEROKEE LETTER MU, CHEROKEE SMALL LETTER MU +test(0x13BE, 0xAB8E); // CHEROKEE LETTER NA, CHEROKEE SMALL LETTER NA +test(0x13BF, 0xAB8F); // CHEROKEE LETTER HNA, CHEROKEE SMALL LETTER HNA +test(0x13C0, 0xAB90); // CHEROKEE LETTER NAH, CHEROKEE SMALL LETTER NAH +test(0x13C1, 0xAB91); // CHEROKEE LETTER NE, CHEROKEE SMALL LETTER NE +test(0x13C2, 0xAB92); // CHEROKEE LETTER NI, CHEROKEE SMALL LETTER NI +test(0x13C3, 0xAB93); // CHEROKEE LETTER NO, CHEROKEE SMALL LETTER NO +test(0x13C4, 0xAB94); // CHEROKEE LETTER NU, CHEROKEE SMALL LETTER NU +test(0x13C5, 0xAB95); // CHEROKEE LETTER NV, CHEROKEE SMALL LETTER NV +test(0x13C6, 0xAB96); // CHEROKEE LETTER QUA, CHEROKEE SMALL LETTER QUA +test(0x13C7, 0xAB97); // CHEROKEE LETTER QUE, CHEROKEE SMALL LETTER QUE +test(0x13C8, 0xAB98); // CHEROKEE LETTER QUI, CHEROKEE SMALL LETTER QUI +test(0x13C9, 0xAB99); // CHEROKEE LETTER QUO, CHEROKEE SMALL LETTER QUO +test(0x13CA, 0xAB9A); // CHEROKEE LETTER QUU, CHEROKEE SMALL LETTER QUU +test(0x13CB, 0xAB9B); // CHEROKEE LETTER QUV, CHEROKEE SMALL LETTER QUV +test(0x13CC, 0xAB9C); // CHEROKEE LETTER SA, CHEROKEE SMALL LETTER SA +test(0x13CD, 0xAB9D); // CHEROKEE LETTER S, CHEROKEE SMALL LETTER S +test(0x13CE, 0xAB9E); // CHEROKEE LETTER SE, CHEROKEE SMALL LETTER SE +test(0x13CF, 0xAB9F); // CHEROKEE LETTER SI, CHEROKEE SMALL LETTER SI +test(0x13D0, 0xABA0); // CHEROKEE LETTER SO, CHEROKEE SMALL LETTER SO +test(0x13D1, 0xABA1); // CHEROKEE LETTER SU, CHEROKEE SMALL LETTER SU +test(0x13D2, 0xABA2); // CHEROKEE LETTER SV, CHEROKEE SMALL LETTER SV +test(0x13D3, 0xABA3); // CHEROKEE LETTER DA, CHEROKEE SMALL LETTER DA +test(0x13D4, 0xABA4); // CHEROKEE LETTER TA, CHEROKEE SMALL LETTER TA +test(0x13D5, 0xABA5); // CHEROKEE LETTER DE, CHEROKEE SMALL LETTER DE +test(0x13D6, 0xABA6); // CHEROKEE LETTER TE, CHEROKEE SMALL LETTER TE +test(0x13D7, 0xABA7); // CHEROKEE LETTER DI, CHEROKEE SMALL LETTER DI +test(0x13D8, 0xABA8); // CHEROKEE LETTER TI, CHEROKEE SMALL LETTER TI +test(0x13D9, 0xABA9); // CHEROKEE LETTER DO, CHEROKEE SMALL LETTER DO +test(0x13DA, 0xABAA); // CHEROKEE LETTER DU, CHEROKEE SMALL LETTER DU +test(0x13DB, 0xABAB); // CHEROKEE LETTER DV, CHEROKEE SMALL LETTER DV +test(0x13DC, 0xABAC); // CHEROKEE LETTER DLA, CHEROKEE SMALL LETTER DLA +test(0x13DD, 0xABAD); // CHEROKEE LETTER TLA, CHEROKEE SMALL LETTER TLA +test(0x13DE, 0xABAE); // CHEROKEE LETTER TLE, CHEROKEE SMALL LETTER TLE +test(0x13DF, 0xABAF); // CHEROKEE LETTER TLI, CHEROKEE SMALL LETTER TLI +test(0x13E0, 0xABB0); // CHEROKEE LETTER TLO, CHEROKEE SMALL LETTER TLO +test(0x13E1, 0xABB1); // CHEROKEE LETTER TLU, CHEROKEE SMALL LETTER TLU +test(0x13E2, 0xABB2); // CHEROKEE LETTER TLV, CHEROKEE SMALL LETTER TLV +test(0x13E3, 0xABB3); // CHEROKEE LETTER TSA, CHEROKEE SMALL LETTER TSA +test(0x13E4, 0xABB4); // CHEROKEE LETTER TSE, CHEROKEE SMALL LETTER TSE +test(0x13E5, 0xABB5); // CHEROKEE LETTER TSI, CHEROKEE SMALL LETTER TSI +test(0x13E6, 0xABB6); // CHEROKEE LETTER TSO, CHEROKEE SMALL LETTER TSO +test(0x13E7, 0xABB7); // CHEROKEE LETTER TSU, CHEROKEE SMALL LETTER TSU +test(0x13E8, 0xABB8); // CHEROKEE LETTER TSV, CHEROKEE SMALL LETTER TSV +test(0x13E9, 0xABB9); // CHEROKEE LETTER WA, CHEROKEE SMALL LETTER WA +test(0x13EA, 0xABBA); // CHEROKEE LETTER WE, CHEROKEE SMALL LETTER WE +test(0x13EB, 0xABBB); // CHEROKEE LETTER WI, CHEROKEE SMALL LETTER WI +test(0x13EC, 0xABBC); // CHEROKEE LETTER WO, CHEROKEE SMALL LETTER WO +test(0x13ED, 0xABBD); // CHEROKEE LETTER WU, CHEROKEE SMALL LETTER WU +test(0x13EE, 0xABBE); // CHEROKEE LETTER WV, CHEROKEE SMALL LETTER WV +test(0x13EF, 0xABBF); // CHEROKEE LETTER YA, CHEROKEE SMALL LETTER YA +test(0x13F0, 0x13F8); // CHEROKEE LETTER YE, CHEROKEE SMALL LETTER YE +test(0x13F1, 0x13F9); // CHEROKEE LETTER YI, CHEROKEE SMALL LETTER YI +test(0x13F2, 0x13FA); // CHEROKEE LETTER YO, CHEROKEE SMALL LETTER YO +test(0x13F3, 0x13FB); // CHEROKEE LETTER YU, CHEROKEE SMALL LETTER YU +test(0x13F4, 0x13FC); // CHEROKEE LETTER YV, CHEROKEE SMALL LETTER YV +test(0x13F5, 0x13FD); // CHEROKEE LETTER MV, CHEROKEE SMALL LETTER MV +test(0x13F8, 0x13F0); // CHEROKEE SMALL LETTER YE, CHEROKEE LETTER YE +test(0x13F9, 0x13F1); // CHEROKEE SMALL LETTER YI, CHEROKEE LETTER YI +test(0x13FA, 0x13F2); // CHEROKEE SMALL LETTER YO, CHEROKEE LETTER YO +test(0x13FB, 0x13F3); // CHEROKEE SMALL LETTER YU, CHEROKEE LETTER YU +test(0x13FC, 0x13F4); // CHEROKEE SMALL LETTER YV, CHEROKEE LETTER YV +test(0x13FD, 0x13F5); // CHEROKEE SMALL LETTER MV, CHEROKEE LETTER MV +test(0x1C80, 0x0432, 0x0412); // CYRILLIC SMALL LETTER ROUNDED VE, CYRILLIC SMALL LETTER VE, CYRILLIC CAPITAL LETTER VE +test(0x1C81, 0x0434, 0x0414); // CYRILLIC SMALL LETTER LONG-LEGGED DE, CYRILLIC SMALL LETTER DE, CYRILLIC CAPITAL LETTER DE +test(0x1C82, 0x043E, 0x041E); // CYRILLIC SMALL LETTER NARROW O, CYRILLIC SMALL LETTER O, CYRILLIC CAPITAL LETTER O +test(0x1C83, 0x0441, 0x0421); // CYRILLIC SMALL LETTER WIDE ES, CYRILLIC SMALL LETTER ES, CYRILLIC CAPITAL LETTER ES +test(0x1C84, 0x0442, 0x0422, 0x1C85); // CYRILLIC SMALL LETTER TALL TE, CYRILLIC SMALL LETTER TE, CYRILLIC CAPITAL LETTER TE, CYRILLIC SMALL LETTER THREE-LEGGED TE +test(0x1C85, 0x0442, 0x0422, 0x1C84); // CYRILLIC SMALL LETTER THREE-LEGGED TE, CYRILLIC SMALL LETTER TE, CYRILLIC CAPITAL LETTER TE, CYRILLIC SMALL LETTER TALL TE +test(0x1C86, 0x044A, 0x042A); // CYRILLIC SMALL LETTER TALL HARD SIGN, CYRILLIC SMALL LETTER HARD SIGN, CYRILLIC CAPITAL LETTER HARD SIGN +test(0x1C87, 0x0463, 0x0462); // CYRILLIC SMALL LETTER TALL YAT, CYRILLIC SMALL LETTER YAT, CYRILLIC CAPITAL LETTER YAT +test(0x1C88, 0xA64B, 0xA64A); // CYRILLIC SMALL LETTER UNBLENDED UK, CYRILLIC SMALL LETTER MONOGRAPH UK, CYRILLIC CAPITAL LETTER MONOGRAPH UK +test(0x1C90, 0x10D0); // GEORGIAN MTAVRULI CAPITAL LETTER AN, GEORGIAN LETTER AN (GEORGIAN SMALL LETTER AN) +test(0x1C91, 0x10D1); // GEORGIAN MTAVRULI CAPITAL LETTER BAN, GEORGIAN LETTER BAN (GEORGIAN SMALL LETTER BAN) +test(0x1C92, 0x10D2); // GEORGIAN MTAVRULI CAPITAL LETTER GAN, GEORGIAN LETTER GAN (GEORGIAN SMALL LETTER GAN) +test(0x1C93, 0x10D3); // GEORGIAN MTAVRULI CAPITAL LETTER DON, GEORGIAN LETTER DON (GEORGIAN SMALL LETTER DON) +test(0x1C94, 0x10D4); // GEORGIAN MTAVRULI CAPITAL LETTER EN, GEORGIAN LETTER EN (GEORGIAN SMALL LETTER EN) +test(0x1C95, 0x10D5); // GEORGIAN MTAVRULI CAPITAL LETTER VIN, GEORGIAN LETTER VIN (GEORGIAN SMALL LETTER VIN) +test(0x1C96, 0x10D6); // GEORGIAN MTAVRULI CAPITAL LETTER ZEN, GEORGIAN LETTER ZEN (GEORGIAN SMALL LETTER ZEN) +test(0x1C97, 0x10D7); // GEORGIAN MTAVRULI CAPITAL LETTER TAN, GEORGIAN LETTER TAN (GEORGIAN SMALL LETTER TAN) +test(0x1C98, 0x10D8); // GEORGIAN MTAVRULI CAPITAL LETTER IN, GEORGIAN LETTER IN (GEORGIAN SMALL LETTER IN) +test(0x1C99, 0x10D9); // GEORGIAN MTAVRULI CAPITAL LETTER KAN, GEORGIAN LETTER KAN (GEORGIAN SMALL LETTER KAN) +test(0x1C9A, 0x10DA); // GEORGIAN MTAVRULI CAPITAL LETTER LAS, GEORGIAN LETTER LAS (GEORGIAN SMALL LETTER LAS) +test(0x1C9B, 0x10DB); // GEORGIAN MTAVRULI CAPITAL LETTER MAN, GEORGIAN LETTER MAN (GEORGIAN SMALL LETTER MAN) +test(0x1C9C, 0x10DC); // GEORGIAN MTAVRULI CAPITAL LETTER NAR, GEORGIAN LETTER NAR (GEORGIAN SMALL LETTER NAR) +test(0x1C9D, 0x10DD); // GEORGIAN MTAVRULI CAPITAL LETTER ON, GEORGIAN LETTER ON (GEORGIAN SMALL LETTER ON) +test(0x1C9E, 0x10DE); // GEORGIAN MTAVRULI CAPITAL LETTER PAR, GEORGIAN LETTER PAR (GEORGIAN SMALL LETTER PAR) +test(0x1C9F, 0x10DF); // GEORGIAN MTAVRULI CAPITAL LETTER ZHAR, GEORGIAN LETTER ZHAR (GEORGIAN SMALL LETTER ZHAR) +test(0x1CA0, 0x10E0); // GEORGIAN MTAVRULI CAPITAL LETTER RAE, GEORGIAN LETTER RAE (GEORGIAN SMALL LETTER RAE) +test(0x1CA1, 0x10E1); // GEORGIAN MTAVRULI CAPITAL LETTER SAN, GEORGIAN LETTER SAN (GEORGIAN SMALL LETTER SAN) +test(0x1CA2, 0x10E2); // GEORGIAN MTAVRULI CAPITAL LETTER TAR, GEORGIAN LETTER TAR (GEORGIAN SMALL LETTER TAR) +test(0x1CA3, 0x10E3); // GEORGIAN MTAVRULI CAPITAL LETTER UN, GEORGIAN LETTER UN (GEORGIAN SMALL LETTER UN) +test(0x1CA4, 0x10E4); // GEORGIAN MTAVRULI CAPITAL LETTER PHAR, GEORGIAN LETTER PHAR (GEORGIAN SMALL LETTER PHAR) +test(0x1CA5, 0x10E5); // GEORGIAN MTAVRULI CAPITAL LETTER KHAR, GEORGIAN LETTER KHAR (GEORGIAN SMALL LETTER KHAR) +test(0x1CA6, 0x10E6); // GEORGIAN MTAVRULI CAPITAL LETTER GHAN, GEORGIAN LETTER GHAN (GEORGIAN SMALL LETTER GHAN) +test(0x1CA7, 0x10E7); // GEORGIAN MTAVRULI CAPITAL LETTER QAR, GEORGIAN LETTER QAR (GEORGIAN SMALL LETTER QAR) +test(0x1CA8, 0x10E8); // GEORGIAN MTAVRULI CAPITAL LETTER SHIN, GEORGIAN LETTER SHIN (GEORGIAN SMALL LETTER SHIN) +test(0x1CA9, 0x10E9); // GEORGIAN MTAVRULI CAPITAL LETTER CHIN, GEORGIAN LETTER CHIN (GEORGIAN SMALL LETTER CHIN) +test(0x1CAA, 0x10EA); // GEORGIAN MTAVRULI CAPITAL LETTER CAN, GEORGIAN LETTER CAN (GEORGIAN SMALL LETTER CAN) +test(0x1CAB, 0x10EB); // GEORGIAN MTAVRULI CAPITAL LETTER JIL, GEORGIAN LETTER JIL (GEORGIAN SMALL LETTER JIL) +test(0x1CAC, 0x10EC); // GEORGIAN MTAVRULI CAPITAL LETTER CIL, GEORGIAN LETTER CIL (GEORGIAN SMALL LETTER CIL) +test(0x1CAD, 0x10ED); // GEORGIAN MTAVRULI CAPITAL LETTER CHAR, GEORGIAN LETTER CHAR (GEORGIAN SMALL LETTER CHAR) +test(0x1CAE, 0x10EE); // GEORGIAN MTAVRULI CAPITAL LETTER XAN, GEORGIAN LETTER XAN (GEORGIAN SMALL LETTER XAN) +test(0x1CAF, 0x10EF); // GEORGIAN MTAVRULI CAPITAL LETTER JHAN, GEORGIAN LETTER JHAN (GEORGIAN SMALL LETTER JHAN) +test(0x1CB0, 0x10F0); // GEORGIAN MTAVRULI CAPITAL LETTER HAE, GEORGIAN LETTER HAE (GEORGIAN SMALL LETTER HAE) +test(0x1CB1, 0x10F1); // GEORGIAN MTAVRULI CAPITAL LETTER HE, GEORGIAN LETTER HE (GEORGIAN SMALL LETTER HE) +test(0x1CB2, 0x10F2); // GEORGIAN MTAVRULI CAPITAL LETTER HIE, GEORGIAN LETTER HIE (GEORGIAN SMALL LETTER HIE) +test(0x1CB3, 0x10F3); // GEORGIAN MTAVRULI CAPITAL LETTER WE, GEORGIAN LETTER WE (GEORGIAN SMALL LETTER WE) +test(0x1CB4, 0x10F4); // GEORGIAN MTAVRULI CAPITAL LETTER HAR, GEORGIAN LETTER HAR (GEORGIAN SMALL LETTER HAR) +test(0x1CB5, 0x10F5); // GEORGIAN MTAVRULI CAPITAL LETTER HOE, GEORGIAN LETTER HOE (GEORGIAN SMALL LETTER HOE) +test(0x1CB6, 0x10F6); // GEORGIAN MTAVRULI CAPITAL LETTER FI, GEORGIAN LETTER FI (GEORGIAN SMALL LETTER FI) +test(0x1CB7, 0x10F7); // GEORGIAN MTAVRULI CAPITAL LETTER YN, GEORGIAN LETTER YN +test(0x1CB8, 0x10F8); // GEORGIAN MTAVRULI CAPITAL LETTER ELIFI, GEORGIAN LETTER ELIFI +test(0x1CB9, 0x10F9); // GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN, GEORGIAN LETTER TURNED GAN +test(0x1CBA, 0x10FA); // GEORGIAN MTAVRULI CAPITAL LETTER AIN, GEORGIAN LETTER AIN +test(0x1CBD, 0x10FD); // GEORGIAN MTAVRULI CAPITAL LETTER AEN, GEORGIAN LETTER AEN +test(0x1CBE, 0x10FE); // GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN, GEORGIAN LETTER HARD SIGN +test(0x1CBF, 0x10FF); // GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN, GEORGIAN LETTER LABIAL SIGN +test(0x1D79, 0xA77D); // LATIN SMALL LETTER INSULAR G, LATIN CAPITAL LETTER INSULAR G +test(0x1D7D, 0x2C63); // LATIN SMALL LETTER P WITH STROKE, LATIN CAPITAL LETTER P WITH STROKE +test(0x1D8E, 0xA7C6); // LATIN SMALL LETTER Z WITH PALATAL HOOK, LATIN CAPITAL LETTER Z WITH PALATAL HOOK +test(0x1E00, 0x1E01); // LATIN CAPITAL LETTER A WITH RING BELOW, LATIN SMALL LETTER A WITH RING BELOW +test(0x1E01, 0x1E00); // LATIN SMALL LETTER A WITH RING BELOW, LATIN CAPITAL LETTER A WITH RING BELOW +test(0x1E02, 0x1E03); // LATIN CAPITAL LETTER B WITH DOT ABOVE, LATIN SMALL LETTER B WITH DOT ABOVE +test(0x1E03, 0x1E02); // LATIN SMALL LETTER B WITH DOT ABOVE, LATIN CAPITAL LETTER B WITH DOT ABOVE +test(0x1E04, 0x1E05); // LATIN CAPITAL LETTER B WITH DOT BELOW, LATIN SMALL LETTER B WITH DOT BELOW +test(0x1E05, 0x1E04); // LATIN SMALL LETTER B WITH DOT BELOW, LATIN CAPITAL LETTER B WITH DOT BELOW +test(0x1E06, 0x1E07); // LATIN CAPITAL LETTER B WITH LINE BELOW, LATIN SMALL LETTER B WITH LINE BELOW +test(0x1E07, 0x1E06); // LATIN SMALL LETTER B WITH LINE BELOW, LATIN CAPITAL LETTER B WITH LINE BELOW +test(0x1E08, 0x1E09); // LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE, LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +test(0x1E09, 0x1E08); // LATIN SMALL LETTER C WITH CEDILLA AND ACUTE, LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +test(0x1E0A, 0x1E0B); // LATIN CAPITAL LETTER D WITH DOT ABOVE, LATIN SMALL LETTER D WITH DOT ABOVE +test(0x1E0B, 0x1E0A); // LATIN SMALL LETTER D WITH DOT ABOVE, LATIN CAPITAL LETTER D WITH DOT ABOVE +test(0x1E0C, 0x1E0D); // LATIN CAPITAL LETTER D WITH DOT BELOW, LATIN SMALL LETTER D WITH DOT BELOW +test(0x1E0D, 0x1E0C); // LATIN SMALL LETTER D WITH DOT BELOW, LATIN CAPITAL LETTER D WITH DOT BELOW +test(0x1E0E, 0x1E0F); // LATIN CAPITAL LETTER D WITH LINE BELOW, LATIN SMALL LETTER D WITH LINE BELOW +test(0x1E0F, 0x1E0E); // LATIN SMALL LETTER D WITH LINE BELOW, LATIN CAPITAL LETTER D WITH LINE BELOW +test(0x1E10, 0x1E11); // LATIN CAPITAL LETTER D WITH CEDILLA, LATIN SMALL LETTER D WITH CEDILLA +test(0x1E11, 0x1E10); // LATIN SMALL LETTER D WITH CEDILLA, LATIN CAPITAL LETTER D WITH CEDILLA +test(0x1E12, 0x1E13); // LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW, LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +test(0x1E13, 0x1E12); // LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW, LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +test(0x1E14, 0x1E15); // LATIN CAPITAL LETTER E WITH MACRON AND GRAVE, LATIN SMALL LETTER E WITH MACRON AND GRAVE +test(0x1E15, 0x1E14); // LATIN SMALL LETTER E WITH MACRON AND GRAVE, LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +test(0x1E16, 0x1E17); // LATIN CAPITAL LETTER E WITH MACRON AND ACUTE, LATIN SMALL LETTER E WITH MACRON AND ACUTE +test(0x1E17, 0x1E16); // LATIN SMALL LETTER E WITH MACRON AND ACUTE, LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +test(0x1E18, 0x1E19); // LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW, LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +test(0x1E19, 0x1E18); // LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW, LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +test(0x1E1A, 0x1E1B); // LATIN CAPITAL LETTER E WITH TILDE BELOW, LATIN SMALL LETTER E WITH TILDE BELOW +test(0x1E1B, 0x1E1A); // LATIN SMALL LETTER E WITH TILDE BELOW, LATIN CAPITAL LETTER E WITH TILDE BELOW +test(0x1E1C, 0x1E1D); // LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE, LATIN SMALL LETTER E WITH CEDILLA AND BREVE +test(0x1E1D, 0x1E1C); // LATIN SMALL LETTER E WITH CEDILLA AND BREVE, LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +test(0x1E1E, 0x1E1F); // LATIN CAPITAL LETTER F WITH DOT ABOVE, LATIN SMALL LETTER F WITH DOT ABOVE +test(0x1E1F, 0x1E1E); // LATIN SMALL LETTER F WITH DOT ABOVE, LATIN CAPITAL LETTER F WITH DOT ABOVE +test(0x1E20, 0x1E21); // LATIN CAPITAL LETTER G WITH MACRON, LATIN SMALL LETTER G WITH MACRON +test(0x1E21, 0x1E20); // LATIN SMALL LETTER G WITH MACRON, LATIN CAPITAL LETTER G WITH MACRON +test(0x1E22, 0x1E23); // LATIN CAPITAL LETTER H WITH DOT ABOVE, LATIN SMALL LETTER H WITH DOT ABOVE +test(0x1E23, 0x1E22); // LATIN SMALL LETTER H WITH DOT ABOVE, LATIN CAPITAL LETTER H WITH DOT ABOVE +test(0x1E24, 0x1E25); // LATIN CAPITAL LETTER H WITH DOT BELOW, LATIN SMALL LETTER H WITH DOT BELOW +test(0x1E25, 0x1E24); // LATIN SMALL LETTER H WITH DOT BELOW, LATIN CAPITAL LETTER H WITH DOT BELOW +test(0x1E26, 0x1E27); // LATIN CAPITAL LETTER H WITH DIAERESIS, LATIN SMALL LETTER H WITH DIAERESIS +test(0x1E27, 0x1E26); // LATIN SMALL LETTER H WITH DIAERESIS, LATIN CAPITAL LETTER H WITH DIAERESIS +test(0x1E28, 0x1E29); // LATIN CAPITAL LETTER H WITH CEDILLA, LATIN SMALL LETTER H WITH CEDILLA +test(0x1E29, 0x1E28); // LATIN SMALL LETTER H WITH CEDILLA, LATIN CAPITAL LETTER H WITH CEDILLA +test(0x1E2A, 0x1E2B); // LATIN CAPITAL LETTER H WITH BREVE BELOW, LATIN SMALL LETTER H WITH BREVE BELOW +test(0x1E2B, 0x1E2A); // LATIN SMALL LETTER H WITH BREVE BELOW, LATIN CAPITAL LETTER H WITH BREVE BELOW +test(0x1E2C, 0x1E2D); // LATIN CAPITAL LETTER I WITH TILDE BELOW, LATIN SMALL LETTER I WITH TILDE BELOW +test(0x1E2D, 0x1E2C); // LATIN SMALL LETTER I WITH TILDE BELOW, LATIN CAPITAL LETTER I WITH TILDE BELOW +test(0x1E2E, 0x1E2F); // LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE, LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +test(0x1E2F, 0x1E2E); // LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE, LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +test(0x1E30, 0x1E31); // LATIN CAPITAL LETTER K WITH ACUTE, LATIN SMALL LETTER K WITH ACUTE +test(0x1E31, 0x1E30); // LATIN SMALL LETTER K WITH ACUTE, LATIN CAPITAL LETTER K WITH ACUTE +test(0x1E32, 0x1E33); // LATIN CAPITAL LETTER K WITH DOT BELOW, LATIN SMALL LETTER K WITH DOT BELOW +test(0x1E33, 0x1E32); // LATIN SMALL LETTER K WITH DOT BELOW, LATIN CAPITAL LETTER K WITH DOT BELOW +test(0x1E34, 0x1E35); // LATIN CAPITAL LETTER K WITH LINE BELOW, LATIN SMALL LETTER K WITH LINE BELOW +test(0x1E35, 0x1E34); // LATIN SMALL LETTER K WITH LINE BELOW, LATIN CAPITAL LETTER K WITH LINE BELOW +test(0x1E36, 0x1E37); // LATIN CAPITAL LETTER L WITH DOT BELOW, LATIN SMALL LETTER L WITH DOT BELOW +test(0x1E37, 0x1E36); // LATIN SMALL LETTER L WITH DOT BELOW, LATIN CAPITAL LETTER L WITH DOT BELOW +test(0x1E38, 0x1E39); // LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON, LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +test(0x1E39, 0x1E38); // LATIN SMALL LETTER L WITH DOT BELOW AND MACRON, LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +test(0x1E3A, 0x1E3B); // LATIN CAPITAL LETTER L WITH LINE BELOW, LATIN SMALL LETTER L WITH LINE BELOW +test(0x1E3B, 0x1E3A); // LATIN SMALL LETTER L WITH LINE BELOW, LATIN CAPITAL LETTER L WITH LINE BELOW +test(0x1E3C, 0x1E3D); // LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW, LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +test(0x1E3D, 0x1E3C); // LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW, LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +test(0x1E3E, 0x1E3F); // LATIN CAPITAL LETTER M WITH ACUTE, LATIN SMALL LETTER M WITH ACUTE +test(0x1E3F, 0x1E3E); // LATIN SMALL LETTER M WITH ACUTE, LATIN CAPITAL LETTER M WITH ACUTE +test(0x1E40, 0x1E41); // LATIN CAPITAL LETTER M WITH DOT ABOVE, LATIN SMALL LETTER M WITH DOT ABOVE +test(0x1E41, 0x1E40); // LATIN SMALL LETTER M WITH DOT ABOVE, LATIN CAPITAL LETTER M WITH DOT ABOVE +test(0x1E42, 0x1E43); // LATIN CAPITAL LETTER M WITH DOT BELOW, LATIN SMALL LETTER M WITH DOT BELOW +test(0x1E43, 0x1E42); // LATIN SMALL LETTER M WITH DOT BELOW, LATIN CAPITAL LETTER M WITH DOT BELOW +test(0x1E44, 0x1E45); // LATIN CAPITAL LETTER N WITH DOT ABOVE, LATIN SMALL LETTER N WITH DOT ABOVE +test(0x1E45, 0x1E44); // LATIN SMALL LETTER N WITH DOT ABOVE, LATIN CAPITAL LETTER N WITH DOT ABOVE +test(0x1E46, 0x1E47); // LATIN CAPITAL LETTER N WITH DOT BELOW, LATIN SMALL LETTER N WITH DOT BELOW +test(0x1E47, 0x1E46); // LATIN SMALL LETTER N WITH DOT BELOW, LATIN CAPITAL LETTER N WITH DOT BELOW +test(0x1E48, 0x1E49); // LATIN CAPITAL LETTER N WITH LINE BELOW, LATIN SMALL LETTER N WITH LINE BELOW +test(0x1E49, 0x1E48); // LATIN SMALL LETTER N WITH LINE BELOW, LATIN CAPITAL LETTER N WITH LINE BELOW +test(0x1E4A, 0x1E4B); // LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW, LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +test(0x1E4B, 0x1E4A); // LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW, LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +test(0x1E4C, 0x1E4D); // LATIN CAPITAL LETTER O WITH TILDE AND ACUTE, LATIN SMALL LETTER O WITH TILDE AND ACUTE +test(0x1E4D, 0x1E4C); // LATIN SMALL LETTER O WITH TILDE AND ACUTE, LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +test(0x1E4E, 0x1E4F); // LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS, LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +test(0x1E4F, 0x1E4E); // LATIN SMALL LETTER O WITH TILDE AND DIAERESIS, LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +test(0x1E50, 0x1E51); // LATIN CAPITAL LETTER O WITH MACRON AND GRAVE, LATIN SMALL LETTER O WITH MACRON AND GRAVE +test(0x1E51, 0x1E50); // LATIN SMALL LETTER O WITH MACRON AND GRAVE, LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +test(0x1E52, 0x1E53); // LATIN CAPITAL LETTER O WITH MACRON AND ACUTE, LATIN SMALL LETTER O WITH MACRON AND ACUTE +test(0x1E53, 0x1E52); // LATIN SMALL LETTER O WITH MACRON AND ACUTE, LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +test(0x1E54, 0x1E55); // LATIN CAPITAL LETTER P WITH ACUTE, LATIN SMALL LETTER P WITH ACUTE +test(0x1E55, 0x1E54); // LATIN SMALL LETTER P WITH ACUTE, LATIN CAPITAL LETTER P WITH ACUTE +test(0x1E56, 0x1E57); // LATIN CAPITAL LETTER P WITH DOT ABOVE, LATIN SMALL LETTER P WITH DOT ABOVE +test(0x1E57, 0x1E56); // LATIN SMALL LETTER P WITH DOT ABOVE, LATIN CAPITAL LETTER P WITH DOT ABOVE +test(0x1E58, 0x1E59); // LATIN CAPITAL LETTER R WITH DOT ABOVE, LATIN SMALL LETTER R WITH DOT ABOVE +test(0x1E59, 0x1E58); // LATIN SMALL LETTER R WITH DOT ABOVE, LATIN CAPITAL LETTER R WITH DOT ABOVE +test(0x1E5A, 0x1E5B); // LATIN CAPITAL LETTER R WITH DOT BELOW, LATIN SMALL LETTER R WITH DOT BELOW +test(0x1E5B, 0x1E5A); // LATIN SMALL LETTER R WITH DOT BELOW, LATIN CAPITAL LETTER R WITH DOT BELOW +test(0x1E5C, 0x1E5D); // LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON, LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +test(0x1E5D, 0x1E5C); // LATIN SMALL LETTER R WITH DOT BELOW AND MACRON, LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +test(0x1E5E, 0x1E5F); // LATIN CAPITAL LETTER R WITH LINE BELOW, LATIN SMALL LETTER R WITH LINE BELOW +test(0x1E5F, 0x1E5E); // LATIN SMALL LETTER R WITH LINE BELOW, LATIN CAPITAL LETTER R WITH LINE BELOW +test(0x1E60, 0x1E61, 0x1E9B); // LATIN CAPITAL LETTER S WITH DOT ABOVE, LATIN SMALL LETTER S WITH DOT ABOVE, LATIN SMALL LETTER LONG S WITH DOT ABOVE +test(0x1E61, 0x1E60, 0x1E9B); // LATIN SMALL LETTER S WITH DOT ABOVE, LATIN CAPITAL LETTER S WITH DOT ABOVE, LATIN SMALL LETTER LONG S WITH DOT ABOVE +test(0x1E62, 0x1E63); // LATIN CAPITAL LETTER S WITH DOT BELOW, LATIN SMALL LETTER S WITH DOT BELOW +test(0x1E63, 0x1E62); // LATIN SMALL LETTER S WITH DOT BELOW, LATIN CAPITAL LETTER S WITH DOT BELOW +test(0x1E64, 0x1E65); // LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE, LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +test(0x1E65, 0x1E64); // LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE, LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +test(0x1E66, 0x1E67); // LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE, LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +test(0x1E67, 0x1E66); // LATIN SMALL LETTER S WITH CARON AND DOT ABOVE, LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +test(0x1E68, 0x1E69); // LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE, LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +test(0x1E69, 0x1E68); // LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE, LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +test(0x1E6A, 0x1E6B); // LATIN CAPITAL LETTER T WITH DOT ABOVE, LATIN SMALL LETTER T WITH DOT ABOVE +test(0x1E6B, 0x1E6A); // LATIN SMALL LETTER T WITH DOT ABOVE, LATIN CAPITAL LETTER T WITH DOT ABOVE +test(0x1E6C, 0x1E6D); // LATIN CAPITAL LETTER T WITH DOT BELOW, LATIN SMALL LETTER T WITH DOT BELOW +test(0x1E6D, 0x1E6C); // LATIN SMALL LETTER T WITH DOT BELOW, LATIN CAPITAL LETTER T WITH DOT BELOW +test(0x1E6E, 0x1E6F); // LATIN CAPITAL LETTER T WITH LINE BELOW, LATIN SMALL LETTER T WITH LINE BELOW +test(0x1E6F, 0x1E6E); // LATIN SMALL LETTER T WITH LINE BELOW, LATIN CAPITAL LETTER T WITH LINE BELOW +test(0x1E70, 0x1E71); // LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW, LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +test(0x1E71, 0x1E70); // LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW, LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +test(0x1E72, 0x1E73); // LATIN CAPITAL LETTER U WITH DIAERESIS BELOW, LATIN SMALL LETTER U WITH DIAERESIS BELOW +test(0x1E73, 0x1E72); // LATIN SMALL LETTER U WITH DIAERESIS BELOW, LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +test(0x1E74, 0x1E75); // LATIN CAPITAL LETTER U WITH TILDE BELOW, LATIN SMALL LETTER U WITH TILDE BELOW +test(0x1E75, 0x1E74); // LATIN SMALL LETTER U WITH TILDE BELOW, LATIN CAPITAL LETTER U WITH TILDE BELOW +test(0x1E76, 0x1E77); // LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW, LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +test(0x1E77, 0x1E76); // LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW, LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +test(0x1E78, 0x1E79); // LATIN CAPITAL LETTER U WITH TILDE AND ACUTE, LATIN SMALL LETTER U WITH TILDE AND ACUTE +test(0x1E79, 0x1E78); // LATIN SMALL LETTER U WITH TILDE AND ACUTE, LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +test(0x1E7A, 0x1E7B); // LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS, LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +test(0x1E7B, 0x1E7A); // LATIN SMALL LETTER U WITH MACRON AND DIAERESIS, LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +test(0x1E7C, 0x1E7D); // LATIN CAPITAL LETTER V WITH TILDE, LATIN SMALL LETTER V WITH TILDE +test(0x1E7D, 0x1E7C); // LATIN SMALL LETTER V WITH TILDE, LATIN CAPITAL LETTER V WITH TILDE +test(0x1E7E, 0x1E7F); // LATIN CAPITAL LETTER V WITH DOT BELOW, LATIN SMALL LETTER V WITH DOT BELOW +test(0x1E7F, 0x1E7E); // LATIN SMALL LETTER V WITH DOT BELOW, LATIN CAPITAL LETTER V WITH DOT BELOW +test(0x1E80, 0x1E81); // LATIN CAPITAL LETTER W WITH GRAVE, LATIN SMALL LETTER W WITH GRAVE +test(0x1E81, 0x1E80); // LATIN SMALL LETTER W WITH GRAVE, LATIN CAPITAL LETTER W WITH GRAVE +test(0x1E82, 0x1E83); // LATIN CAPITAL LETTER W WITH ACUTE, LATIN SMALL LETTER W WITH ACUTE +test(0x1E83, 0x1E82); // LATIN SMALL LETTER W WITH ACUTE, LATIN CAPITAL LETTER W WITH ACUTE +test(0x1E84, 0x1E85); // LATIN CAPITAL LETTER W WITH DIAERESIS, LATIN SMALL LETTER W WITH DIAERESIS +test(0x1E85, 0x1E84); // LATIN SMALL LETTER W WITH DIAERESIS, LATIN CAPITAL LETTER W WITH DIAERESIS +test(0x1E86, 0x1E87); // LATIN CAPITAL LETTER W WITH DOT ABOVE, LATIN SMALL LETTER W WITH DOT ABOVE +test(0x1E87, 0x1E86); // LATIN SMALL LETTER W WITH DOT ABOVE, LATIN CAPITAL LETTER W WITH DOT ABOVE +test(0x1E88, 0x1E89); // LATIN CAPITAL LETTER W WITH DOT BELOW, LATIN SMALL LETTER W WITH DOT BELOW +test(0x1E89, 0x1E88); // LATIN SMALL LETTER W WITH DOT BELOW, LATIN CAPITAL LETTER W WITH DOT BELOW +test(0x1E8A, 0x1E8B); // LATIN CAPITAL LETTER X WITH DOT ABOVE, LATIN SMALL LETTER X WITH DOT ABOVE +test(0x1E8B, 0x1E8A); // LATIN SMALL LETTER X WITH DOT ABOVE, LATIN CAPITAL LETTER X WITH DOT ABOVE +test(0x1E8C, 0x1E8D); // LATIN CAPITAL LETTER X WITH DIAERESIS, LATIN SMALL LETTER X WITH DIAERESIS +test(0x1E8D, 0x1E8C); // LATIN SMALL LETTER X WITH DIAERESIS, LATIN CAPITAL LETTER X WITH DIAERESIS +test(0x1E8E, 0x1E8F); // LATIN CAPITAL LETTER Y WITH DOT ABOVE, LATIN SMALL LETTER Y WITH DOT ABOVE +test(0x1E8F, 0x1E8E); // LATIN SMALL LETTER Y WITH DOT ABOVE, LATIN CAPITAL LETTER Y WITH DOT ABOVE +test(0x1E90, 0x1E91); // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX, LATIN SMALL LETTER Z WITH CIRCUMFLEX +test(0x1E91, 0x1E90); // LATIN SMALL LETTER Z WITH CIRCUMFLEX, LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +test(0x1E92, 0x1E93); // LATIN CAPITAL LETTER Z WITH DOT BELOW, LATIN SMALL LETTER Z WITH DOT BELOW +test(0x1E93, 0x1E92); // LATIN SMALL LETTER Z WITH DOT BELOW, LATIN CAPITAL LETTER Z WITH DOT BELOW +test(0x1E94, 0x1E95); // LATIN CAPITAL LETTER Z WITH LINE BELOW, LATIN SMALL LETTER Z WITH LINE BELOW +test(0x1E95, 0x1E94); // LATIN SMALL LETTER Z WITH LINE BELOW, LATIN CAPITAL LETTER Z WITH LINE BELOW +test(0x1E9B, 0x1E61, 0x1E60); // LATIN SMALL LETTER LONG S WITH DOT ABOVE, LATIN SMALL LETTER S WITH DOT ABOVE, LATIN CAPITAL LETTER S WITH DOT ABOVE +test(0x1E9E, 0x00DF); // LATIN CAPITAL LETTER SHARP S, LATIN SMALL LETTER SHARP S +test(0x1EA0, 0x1EA1); // LATIN CAPITAL LETTER A WITH DOT BELOW, LATIN SMALL LETTER A WITH DOT BELOW +test(0x1EA1, 0x1EA0); // LATIN SMALL LETTER A WITH DOT BELOW, LATIN CAPITAL LETTER A WITH DOT BELOW +test(0x1EA2, 0x1EA3); // LATIN CAPITAL LETTER A WITH HOOK ABOVE, LATIN SMALL LETTER A WITH HOOK ABOVE +test(0x1EA3, 0x1EA2); // LATIN SMALL LETTER A WITH HOOK ABOVE, LATIN CAPITAL LETTER A WITH HOOK ABOVE +test(0x1EA4, 0x1EA5); // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE, LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +test(0x1EA5, 0x1EA4); // LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE, LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +test(0x1EA6, 0x1EA7); // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE, LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +test(0x1EA7, 0x1EA6); // LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE, LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +test(0x1EA8, 0x1EA9); // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE, LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +test(0x1EA9, 0x1EA8); // LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE, LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +test(0x1EAA, 0x1EAB); // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE, LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +test(0x1EAB, 0x1EAA); // LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE, LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +test(0x1EAC, 0x1EAD); // LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW, LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +test(0x1EAD, 0x1EAC); // LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW, LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +test(0x1EAE, 0x1EAF); // LATIN CAPITAL LETTER A WITH BREVE AND ACUTE, LATIN SMALL LETTER A WITH BREVE AND ACUTE +test(0x1EAF, 0x1EAE); // LATIN SMALL LETTER A WITH BREVE AND ACUTE, LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +test(0x1EB0, 0x1EB1); // LATIN CAPITAL LETTER A WITH BREVE AND GRAVE, LATIN SMALL LETTER A WITH BREVE AND GRAVE +test(0x1EB1, 0x1EB0); // LATIN SMALL LETTER A WITH BREVE AND GRAVE, LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +test(0x1EB2, 0x1EB3); // LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE, LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +test(0x1EB3, 0x1EB2); // LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE, LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +test(0x1EB4, 0x1EB5); // LATIN CAPITAL LETTER A WITH BREVE AND TILDE, LATIN SMALL LETTER A WITH BREVE AND TILDE +test(0x1EB5, 0x1EB4); // LATIN SMALL LETTER A WITH BREVE AND TILDE, LATIN CAPITAL LETTER A WITH BREVE AND TILDE +test(0x1EB6, 0x1EB7); // LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW, LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +test(0x1EB7, 0x1EB6); // LATIN SMALL LETTER A WITH BREVE AND DOT BELOW, LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +test(0x1EB8, 0x1EB9); // LATIN CAPITAL LETTER E WITH DOT BELOW, LATIN SMALL LETTER E WITH DOT BELOW +test(0x1EB9, 0x1EB8); // LATIN SMALL LETTER E WITH DOT BELOW, LATIN CAPITAL LETTER E WITH DOT BELOW +test(0x1EBA, 0x1EBB); // LATIN CAPITAL LETTER E WITH HOOK ABOVE, LATIN SMALL LETTER E WITH HOOK ABOVE +test(0x1EBB, 0x1EBA); // LATIN SMALL LETTER E WITH HOOK ABOVE, LATIN CAPITAL LETTER E WITH HOOK ABOVE +test(0x1EBC, 0x1EBD); // LATIN CAPITAL LETTER E WITH TILDE, LATIN SMALL LETTER E WITH TILDE +test(0x1EBD, 0x1EBC); // LATIN SMALL LETTER E WITH TILDE, LATIN CAPITAL LETTER E WITH TILDE +test(0x1EBE, 0x1EBF); // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE, LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +test(0x1EBF, 0x1EBE); // LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +test(0x1EC0, 0x1EC1); // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE, LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +test(0x1EC1, 0x1EC0); // LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +test(0x1EC2, 0x1EC3); // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE, LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +test(0x1EC3, 0x1EC2); // LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +test(0x1EC4, 0x1EC5); // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE, LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +test(0x1EC5, 0x1EC4); // LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +test(0x1EC6, 0x1EC7); // LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW, LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +test(0x1EC7, 0x1EC6); // LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +test(0x1EC8, 0x1EC9); // LATIN CAPITAL LETTER I WITH HOOK ABOVE, LATIN SMALL LETTER I WITH HOOK ABOVE +test(0x1EC9, 0x1EC8); // LATIN SMALL LETTER I WITH HOOK ABOVE, LATIN CAPITAL LETTER I WITH HOOK ABOVE +test(0x1ECA, 0x1ECB); // LATIN CAPITAL LETTER I WITH DOT BELOW, LATIN SMALL LETTER I WITH DOT BELOW +test(0x1ECB, 0x1ECA); // LATIN SMALL LETTER I WITH DOT BELOW, LATIN CAPITAL LETTER I WITH DOT BELOW +test(0x1ECC, 0x1ECD); // LATIN CAPITAL LETTER O WITH DOT BELOW, LATIN SMALL LETTER O WITH DOT BELOW +test(0x1ECD, 0x1ECC); // LATIN SMALL LETTER O WITH DOT BELOW, LATIN CAPITAL LETTER O WITH DOT BELOW +test(0x1ECE, 0x1ECF); // LATIN CAPITAL LETTER O WITH HOOK ABOVE, LATIN SMALL LETTER O WITH HOOK ABOVE +test(0x1ECF, 0x1ECE); // LATIN SMALL LETTER O WITH HOOK ABOVE, LATIN CAPITAL LETTER O WITH HOOK ABOVE +test(0x1ED0, 0x1ED1); // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE, LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +test(0x1ED1, 0x1ED0); // LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE, LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +test(0x1ED2, 0x1ED3); // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE, LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +test(0x1ED3, 0x1ED2); // LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE, LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +test(0x1ED4, 0x1ED5); // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE, LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +test(0x1ED5, 0x1ED4); // LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE, LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +test(0x1ED6, 0x1ED7); // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE, LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +test(0x1ED7, 0x1ED6); // LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE, LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +test(0x1ED8, 0x1ED9); // LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW, LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +test(0x1ED9, 0x1ED8); // LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW, LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +test(0x1EDA, 0x1EDB); // LATIN CAPITAL LETTER O WITH HORN AND ACUTE, LATIN SMALL LETTER O WITH HORN AND ACUTE +test(0x1EDB, 0x1EDA); // LATIN SMALL LETTER O WITH HORN AND ACUTE, LATIN CAPITAL LETTER O WITH HORN AND ACUTE +test(0x1EDC, 0x1EDD); // LATIN CAPITAL LETTER O WITH HORN AND GRAVE, LATIN SMALL LETTER O WITH HORN AND GRAVE +test(0x1EDD, 0x1EDC); // LATIN SMALL LETTER O WITH HORN AND GRAVE, LATIN CAPITAL LETTER O WITH HORN AND GRAVE +test(0x1EDE, 0x1EDF); // LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE, LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +test(0x1EDF, 0x1EDE); // LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE, LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +test(0x1EE0, 0x1EE1); // LATIN CAPITAL LETTER O WITH HORN AND TILDE, LATIN SMALL LETTER O WITH HORN AND TILDE +test(0x1EE1, 0x1EE0); // LATIN SMALL LETTER O WITH HORN AND TILDE, LATIN CAPITAL LETTER O WITH HORN AND TILDE +test(0x1EE2, 0x1EE3); // LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW, LATIN SMALL LETTER O WITH HORN AND DOT BELOW +test(0x1EE3, 0x1EE2); // LATIN SMALL LETTER O WITH HORN AND DOT BELOW, LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +test(0x1EE4, 0x1EE5); // LATIN CAPITAL LETTER U WITH DOT BELOW, LATIN SMALL LETTER U WITH DOT BELOW +test(0x1EE5, 0x1EE4); // LATIN SMALL LETTER U WITH DOT BELOW, LATIN CAPITAL LETTER U WITH DOT BELOW +test(0x1EE6, 0x1EE7); // LATIN CAPITAL LETTER U WITH HOOK ABOVE, LATIN SMALL LETTER U WITH HOOK ABOVE +test(0x1EE7, 0x1EE6); // LATIN SMALL LETTER U WITH HOOK ABOVE, LATIN CAPITAL LETTER U WITH HOOK ABOVE +test(0x1EE8, 0x1EE9); // LATIN CAPITAL LETTER U WITH HORN AND ACUTE, LATIN SMALL LETTER U WITH HORN AND ACUTE +test(0x1EE9, 0x1EE8); // LATIN SMALL LETTER U WITH HORN AND ACUTE, LATIN CAPITAL LETTER U WITH HORN AND ACUTE +test(0x1EEA, 0x1EEB); // LATIN CAPITAL LETTER U WITH HORN AND GRAVE, LATIN SMALL LETTER U WITH HORN AND GRAVE +test(0x1EEB, 0x1EEA); // LATIN SMALL LETTER U WITH HORN AND GRAVE, LATIN CAPITAL LETTER U WITH HORN AND GRAVE +test(0x1EEC, 0x1EED); // LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE, LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +test(0x1EED, 0x1EEC); // LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE, LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +test(0x1EEE, 0x1EEF); // LATIN CAPITAL LETTER U WITH HORN AND TILDE, LATIN SMALL LETTER U WITH HORN AND TILDE +test(0x1EEF, 0x1EEE); // LATIN SMALL LETTER U WITH HORN AND TILDE, LATIN CAPITAL LETTER U WITH HORN AND TILDE +test(0x1EF0, 0x1EF1); // LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW, LATIN SMALL LETTER U WITH HORN AND DOT BELOW +test(0x1EF1, 0x1EF0); // LATIN SMALL LETTER U WITH HORN AND DOT BELOW, LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +test(0x1EF2, 0x1EF3); // LATIN CAPITAL LETTER Y WITH GRAVE, LATIN SMALL LETTER Y WITH GRAVE +test(0x1EF3, 0x1EF2); // LATIN SMALL LETTER Y WITH GRAVE, LATIN CAPITAL LETTER Y WITH GRAVE +test(0x1EF4, 0x1EF5); // LATIN CAPITAL LETTER Y WITH DOT BELOW, LATIN SMALL LETTER Y WITH DOT BELOW +test(0x1EF5, 0x1EF4); // LATIN SMALL LETTER Y WITH DOT BELOW, LATIN CAPITAL LETTER Y WITH DOT BELOW +test(0x1EF6, 0x1EF7); // LATIN CAPITAL LETTER Y WITH HOOK ABOVE, LATIN SMALL LETTER Y WITH HOOK ABOVE +test(0x1EF7, 0x1EF6); // LATIN SMALL LETTER Y WITH HOOK ABOVE, LATIN CAPITAL LETTER Y WITH HOOK ABOVE +test(0x1EF8, 0x1EF9); // LATIN CAPITAL LETTER Y WITH TILDE, LATIN SMALL LETTER Y WITH TILDE +test(0x1EF9, 0x1EF8); // LATIN SMALL LETTER Y WITH TILDE, LATIN CAPITAL LETTER Y WITH TILDE +test(0x1EFA, 0x1EFB); // LATIN CAPITAL LETTER MIDDLE-WELSH LL, LATIN SMALL LETTER MIDDLE-WELSH LL +test(0x1EFB, 0x1EFA); // LATIN SMALL LETTER MIDDLE-WELSH LL, LATIN CAPITAL LETTER MIDDLE-WELSH LL +test(0x1EFC, 0x1EFD); // LATIN CAPITAL LETTER MIDDLE-WELSH V, LATIN SMALL LETTER MIDDLE-WELSH V +test(0x1EFD, 0x1EFC); // LATIN SMALL LETTER MIDDLE-WELSH V, LATIN CAPITAL LETTER MIDDLE-WELSH V +test(0x1EFE, 0x1EFF); // LATIN CAPITAL LETTER Y WITH LOOP, LATIN SMALL LETTER Y WITH LOOP +test(0x1EFF, 0x1EFE); // LATIN SMALL LETTER Y WITH LOOP, LATIN CAPITAL LETTER Y WITH LOOP +test(0x1F00, 0x1F08); // GREEK SMALL LETTER ALPHA WITH PSILI, GREEK CAPITAL LETTER ALPHA WITH PSILI +test(0x1F01, 0x1F09); // GREEK SMALL LETTER ALPHA WITH DASIA, GREEK CAPITAL LETTER ALPHA WITH DASIA +test(0x1F02, 0x1F0A); // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA, GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +test(0x1F03, 0x1F0B); // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA, GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +test(0x1F04, 0x1F0C); // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA, GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +test(0x1F05, 0x1F0D); // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA, GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +test(0x1F06, 0x1F0E); // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI, GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +test(0x1F07, 0x1F0F); // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI, GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +test(0x1F08, 0x1F00); // GREEK CAPITAL LETTER ALPHA WITH PSILI, GREEK SMALL LETTER ALPHA WITH PSILI +test(0x1F09, 0x1F01); // GREEK CAPITAL LETTER ALPHA WITH DASIA, GREEK SMALL LETTER ALPHA WITH DASIA +test(0x1F0A, 0x1F02); // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA, GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA +test(0x1F0B, 0x1F03); // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA, GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA +test(0x1F0C, 0x1F04); // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA, GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA +test(0x1F0D, 0x1F05); // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA, GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA +test(0x1F0E, 0x1F06); // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI, GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI +test(0x1F0F, 0x1F07); // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI, GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +test(0x1F10, 0x1F18); // GREEK SMALL LETTER EPSILON WITH PSILI, GREEK CAPITAL LETTER EPSILON WITH PSILI +test(0x1F11, 0x1F19); // GREEK SMALL LETTER EPSILON WITH DASIA, GREEK CAPITAL LETTER EPSILON WITH DASIA +test(0x1F12, 0x1F1A); // GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA, GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +test(0x1F13, 0x1F1B); // GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA, GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +test(0x1F14, 0x1F1C); // GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA, GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +test(0x1F15, 0x1F1D); // GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA, GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +test(0x1F18, 0x1F10); // GREEK CAPITAL LETTER EPSILON WITH PSILI, GREEK SMALL LETTER EPSILON WITH PSILI +test(0x1F19, 0x1F11); // GREEK CAPITAL LETTER EPSILON WITH DASIA, GREEK SMALL LETTER EPSILON WITH DASIA +test(0x1F1A, 0x1F12); // GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA, GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA +test(0x1F1B, 0x1F13); // GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA, GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA +test(0x1F1C, 0x1F14); // GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA, GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA +test(0x1F1D, 0x1F15); // GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA, GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +test(0x1F20, 0x1F28); // GREEK SMALL LETTER ETA WITH PSILI, GREEK CAPITAL LETTER ETA WITH PSILI +test(0x1F21, 0x1F29); // GREEK SMALL LETTER ETA WITH DASIA, GREEK CAPITAL LETTER ETA WITH DASIA +test(0x1F22, 0x1F2A); // GREEK SMALL LETTER ETA WITH PSILI AND VARIA, GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +test(0x1F23, 0x1F2B); // GREEK SMALL LETTER ETA WITH DASIA AND VARIA, GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +test(0x1F24, 0x1F2C); // GREEK SMALL LETTER ETA WITH PSILI AND OXIA, GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +test(0x1F25, 0x1F2D); // GREEK SMALL LETTER ETA WITH DASIA AND OXIA, GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +test(0x1F26, 0x1F2E); // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI, GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +test(0x1F27, 0x1F2F); // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI, GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +test(0x1F28, 0x1F20); // GREEK CAPITAL LETTER ETA WITH PSILI, GREEK SMALL LETTER ETA WITH PSILI +test(0x1F29, 0x1F21); // GREEK CAPITAL LETTER ETA WITH DASIA, GREEK SMALL LETTER ETA WITH DASIA +test(0x1F2A, 0x1F22); // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA, GREEK SMALL LETTER ETA WITH PSILI AND VARIA +test(0x1F2B, 0x1F23); // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA, GREEK SMALL LETTER ETA WITH DASIA AND VARIA +test(0x1F2C, 0x1F24); // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA, GREEK SMALL LETTER ETA WITH PSILI AND OXIA +test(0x1F2D, 0x1F25); // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA, GREEK SMALL LETTER ETA WITH DASIA AND OXIA +test(0x1F2E, 0x1F26); // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI, GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI +test(0x1F2F, 0x1F27); // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI, GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +test(0x1F30, 0x1F38); // GREEK SMALL LETTER IOTA WITH PSILI, GREEK CAPITAL LETTER IOTA WITH PSILI +test(0x1F31, 0x1F39); // GREEK SMALL LETTER IOTA WITH DASIA, GREEK CAPITAL LETTER IOTA WITH DASIA +test(0x1F32, 0x1F3A); // GREEK SMALL LETTER IOTA WITH PSILI AND VARIA, GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +test(0x1F33, 0x1F3B); // GREEK SMALL LETTER IOTA WITH DASIA AND VARIA, GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +test(0x1F34, 0x1F3C); // GREEK SMALL LETTER IOTA WITH PSILI AND OXIA, GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +test(0x1F35, 0x1F3D); // GREEK SMALL LETTER IOTA WITH DASIA AND OXIA, GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +test(0x1F36, 0x1F3E); // GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI, GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +test(0x1F37, 0x1F3F); // GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI, GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +test(0x1F38, 0x1F30); // GREEK CAPITAL LETTER IOTA WITH PSILI, GREEK SMALL LETTER IOTA WITH PSILI +test(0x1F39, 0x1F31); // GREEK CAPITAL LETTER IOTA WITH DASIA, GREEK SMALL LETTER IOTA WITH DASIA +test(0x1F3A, 0x1F32); // GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA, GREEK SMALL LETTER IOTA WITH PSILI AND VARIA +test(0x1F3B, 0x1F33); // GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA, GREEK SMALL LETTER IOTA WITH DASIA AND VARIA +test(0x1F3C, 0x1F34); // GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA, GREEK SMALL LETTER IOTA WITH PSILI AND OXIA +test(0x1F3D, 0x1F35); // GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA, GREEK SMALL LETTER IOTA WITH DASIA AND OXIA +test(0x1F3E, 0x1F36); // GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI, GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI +test(0x1F3F, 0x1F37); // GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI, GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +test(0x1F40, 0x1F48); // GREEK SMALL LETTER OMICRON WITH PSILI, GREEK CAPITAL LETTER OMICRON WITH PSILI +test(0x1F41, 0x1F49); // GREEK SMALL LETTER OMICRON WITH DASIA, GREEK CAPITAL LETTER OMICRON WITH DASIA +test(0x1F42, 0x1F4A); // GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA, GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +test(0x1F43, 0x1F4B); // GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA, GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +test(0x1F44, 0x1F4C); // GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA, GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +test(0x1F45, 0x1F4D); // GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA, GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +test(0x1F48, 0x1F40); // GREEK CAPITAL LETTER OMICRON WITH PSILI, GREEK SMALL LETTER OMICRON WITH PSILI +test(0x1F49, 0x1F41); // GREEK CAPITAL LETTER OMICRON WITH DASIA, GREEK SMALL LETTER OMICRON WITH DASIA +test(0x1F4A, 0x1F42); // GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA, GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA +test(0x1F4B, 0x1F43); // GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA, GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA +test(0x1F4C, 0x1F44); // GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA, GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA +test(0x1F4D, 0x1F45); // GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA, GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +test(0x1F51, 0x1F59); // GREEK SMALL LETTER UPSILON WITH DASIA, GREEK CAPITAL LETTER UPSILON WITH DASIA +test(0x1F53, 0x1F5B); // GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA, GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +test(0x1F55, 0x1F5D); // GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA, GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +test(0x1F57, 0x1F5F); // GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI, GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +test(0x1F59, 0x1F51); // GREEK CAPITAL LETTER UPSILON WITH DASIA, GREEK SMALL LETTER UPSILON WITH DASIA +test(0x1F5B, 0x1F53); // GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA, GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA +test(0x1F5D, 0x1F55); // GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA, GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA +test(0x1F5F, 0x1F57); // GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI, GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +test(0x1F60, 0x1F68); // GREEK SMALL LETTER OMEGA WITH PSILI, GREEK CAPITAL LETTER OMEGA WITH PSILI +test(0x1F61, 0x1F69); // GREEK SMALL LETTER OMEGA WITH DASIA, GREEK CAPITAL LETTER OMEGA WITH DASIA +test(0x1F62, 0x1F6A); // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA, GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +test(0x1F63, 0x1F6B); // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA, GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +test(0x1F64, 0x1F6C); // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA, GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +test(0x1F65, 0x1F6D); // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA, GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +test(0x1F66, 0x1F6E); // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI, GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +test(0x1F67, 0x1F6F); // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI, GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +test(0x1F68, 0x1F60); // GREEK CAPITAL LETTER OMEGA WITH PSILI, GREEK SMALL LETTER OMEGA WITH PSILI +test(0x1F69, 0x1F61); // GREEK CAPITAL LETTER OMEGA WITH DASIA, GREEK SMALL LETTER OMEGA WITH DASIA +test(0x1F6A, 0x1F62); // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA, GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA +test(0x1F6B, 0x1F63); // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA, GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA +test(0x1F6C, 0x1F64); // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA, GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA +test(0x1F6D, 0x1F65); // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA, GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA +test(0x1F6E, 0x1F66); // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI, GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI +test(0x1F6F, 0x1F67); // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI, GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +test(0x1F70, 0x1FBA); // GREEK SMALL LETTER ALPHA WITH VARIA, GREEK CAPITAL LETTER ALPHA WITH VARIA +test(0x1F71, 0x1FBB); // GREEK SMALL LETTER ALPHA WITH OXIA, GREEK CAPITAL LETTER ALPHA WITH OXIA +test(0x1F72, 0x1FC8); // GREEK SMALL LETTER EPSILON WITH VARIA, GREEK CAPITAL LETTER EPSILON WITH VARIA +test(0x1F73, 0x1FC9); // GREEK SMALL LETTER EPSILON WITH OXIA, GREEK CAPITAL LETTER EPSILON WITH OXIA +test(0x1F74, 0x1FCA); // GREEK SMALL LETTER ETA WITH VARIA, GREEK CAPITAL LETTER ETA WITH VARIA +test(0x1F75, 0x1FCB); // GREEK SMALL LETTER ETA WITH OXIA, GREEK CAPITAL LETTER ETA WITH OXIA +test(0x1F76, 0x1FDA); // GREEK SMALL LETTER IOTA WITH VARIA, GREEK CAPITAL LETTER IOTA WITH VARIA +test(0x1F77, 0x1FDB); // GREEK SMALL LETTER IOTA WITH OXIA, GREEK CAPITAL LETTER IOTA WITH OXIA +test(0x1F78, 0x1FF8); // GREEK SMALL LETTER OMICRON WITH VARIA, GREEK CAPITAL LETTER OMICRON WITH VARIA +test(0x1F79, 0x1FF9); // GREEK SMALL LETTER OMICRON WITH OXIA, GREEK CAPITAL LETTER OMICRON WITH OXIA +test(0x1F7A, 0x1FEA); // GREEK SMALL LETTER UPSILON WITH VARIA, GREEK CAPITAL LETTER UPSILON WITH VARIA +test(0x1F7B, 0x1FEB); // GREEK SMALL LETTER UPSILON WITH OXIA, GREEK CAPITAL LETTER UPSILON WITH OXIA +test(0x1F7C, 0x1FFA); // GREEK SMALL LETTER OMEGA WITH VARIA, GREEK CAPITAL LETTER OMEGA WITH VARIA +test(0x1F7D, 0x1FFB); // GREEK SMALL LETTER OMEGA WITH OXIA, GREEK CAPITAL LETTER OMEGA WITH OXIA +test(0x1F80, 0x1F88); // GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +test(0x1F81, 0x1F89); // GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +test(0x1F82, 0x1F8A); // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +test(0x1F83, 0x1F8B); // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +test(0x1F84, 0x1F8C); // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +test(0x1F85, 0x1F8D); // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +test(0x1F86, 0x1F8E); // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +test(0x1F87, 0x1F8F); // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +test(0x1F88, 0x1F80); // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +test(0x1F89, 0x1F81); // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +test(0x1F8A, 0x1F82); // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +test(0x1F8B, 0x1F83); // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +test(0x1F8C, 0x1F84); // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +test(0x1F8D, 0x1F85); // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +test(0x1F8E, 0x1F86); // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +test(0x1F8F, 0x1F87); // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +test(0x1F90, 0x1F98); // GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +test(0x1F91, 0x1F99); // GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +test(0x1F92, 0x1F9A); // GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +test(0x1F93, 0x1F9B); // GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +test(0x1F94, 0x1F9C); // GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +test(0x1F95, 0x1F9D); // GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +test(0x1F96, 0x1F9E); // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +test(0x1F97, 0x1F9F); // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +test(0x1F98, 0x1F90); // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +test(0x1F99, 0x1F91); // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +test(0x1F9A, 0x1F92); // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +test(0x1F9B, 0x1F93); // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +test(0x1F9C, 0x1F94); // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +test(0x1F9D, 0x1F95); // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +test(0x1F9E, 0x1F96); // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +test(0x1F9F, 0x1F97); // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +test(0x1FA0, 0x1FA8); // GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +test(0x1FA1, 0x1FA9); // GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +test(0x1FA2, 0x1FAA); // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +test(0x1FA3, 0x1FAB); // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +test(0x1FA4, 0x1FAC); // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +test(0x1FA5, 0x1FAD); // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +test(0x1FA6, 0x1FAE); // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +test(0x1FA7, 0x1FAF); // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +test(0x1FA8, 0x1FA0); // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +test(0x1FA9, 0x1FA1); // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +test(0x1FAA, 0x1FA2); // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +test(0x1FAB, 0x1FA3); // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +test(0x1FAC, 0x1FA4); // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +test(0x1FAD, 0x1FA5); // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +test(0x1FAE, 0x1FA6); // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +test(0x1FAF, 0x1FA7); // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +test(0x1FB0, 0x1FB8); // GREEK SMALL LETTER ALPHA WITH VRACHY, GREEK CAPITAL LETTER ALPHA WITH VRACHY +test(0x1FB1, 0x1FB9); // GREEK SMALL LETTER ALPHA WITH MACRON, GREEK CAPITAL LETTER ALPHA WITH MACRON +test(0x1FB3, 0x1FBC); // GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI, GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +test(0x1FB8, 0x1FB0); // GREEK CAPITAL LETTER ALPHA WITH VRACHY, GREEK SMALL LETTER ALPHA WITH VRACHY +test(0x1FB9, 0x1FB1); // GREEK CAPITAL LETTER ALPHA WITH MACRON, GREEK SMALL LETTER ALPHA WITH MACRON +test(0x1FBA, 0x1F70); // GREEK CAPITAL LETTER ALPHA WITH VARIA, GREEK SMALL LETTER ALPHA WITH VARIA +test(0x1FBB, 0x1F71); // GREEK CAPITAL LETTER ALPHA WITH OXIA, GREEK SMALL LETTER ALPHA WITH OXIA +test(0x1FBC, 0x1FB3); // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI, GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +test(0x1FBE, 0x03B9, 0x0345, 0x0399); // GREEK PROSGEGRAMMENI, GREEK SMALL LETTER IOTA, COMBINING GREEK YPOGEGRAMMENI (GREEK NON-SPACING IOTA BELOW), GREEK CAPITAL LETTER IOTA +test(0x1FC3, 0x1FCC); // GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI, GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +test(0x1FC8, 0x1F72); // GREEK CAPITAL LETTER EPSILON WITH VARIA, GREEK SMALL LETTER EPSILON WITH VARIA +test(0x1FC9, 0x1F73); // GREEK CAPITAL LETTER EPSILON WITH OXIA, GREEK SMALL LETTER EPSILON WITH OXIA +test(0x1FCA, 0x1F74); // GREEK CAPITAL LETTER ETA WITH VARIA, GREEK SMALL LETTER ETA WITH VARIA +test(0x1FCB, 0x1F75); // GREEK CAPITAL LETTER ETA WITH OXIA, GREEK SMALL LETTER ETA WITH OXIA +test(0x1FCC, 0x1FC3); // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI, GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +test(0x1FD0, 0x1FD8); // GREEK SMALL LETTER IOTA WITH VRACHY, GREEK CAPITAL LETTER IOTA WITH VRACHY +test(0x1FD1, 0x1FD9); // GREEK SMALL LETTER IOTA WITH MACRON, GREEK CAPITAL LETTER IOTA WITH MACRON +test(0x1FD8, 0x1FD0); // GREEK CAPITAL LETTER IOTA WITH VRACHY, GREEK SMALL LETTER IOTA WITH VRACHY +test(0x1FD9, 0x1FD1); // GREEK CAPITAL LETTER IOTA WITH MACRON, GREEK SMALL LETTER IOTA WITH MACRON +test(0x1FDA, 0x1F76); // GREEK CAPITAL LETTER IOTA WITH VARIA, GREEK SMALL LETTER IOTA WITH VARIA +test(0x1FDB, 0x1F77); // GREEK CAPITAL LETTER IOTA WITH OXIA, GREEK SMALL LETTER IOTA WITH OXIA +test(0x1FE0, 0x1FE8); // GREEK SMALL LETTER UPSILON WITH VRACHY, GREEK CAPITAL LETTER UPSILON WITH VRACHY +test(0x1FE1, 0x1FE9); // GREEK SMALL LETTER UPSILON WITH MACRON, GREEK CAPITAL LETTER UPSILON WITH MACRON +test(0x1FE5, 0x1FEC); // GREEK SMALL LETTER RHO WITH DASIA, GREEK CAPITAL LETTER RHO WITH DASIA +test(0x1FE8, 0x1FE0); // GREEK CAPITAL LETTER UPSILON WITH VRACHY, GREEK SMALL LETTER UPSILON WITH VRACHY +test(0x1FE9, 0x1FE1); // GREEK CAPITAL LETTER UPSILON WITH MACRON, GREEK SMALL LETTER UPSILON WITH MACRON +test(0x1FEA, 0x1F7A); // GREEK CAPITAL LETTER UPSILON WITH VARIA, GREEK SMALL LETTER UPSILON WITH VARIA +test(0x1FEB, 0x1F7B); // GREEK CAPITAL LETTER UPSILON WITH OXIA, GREEK SMALL LETTER UPSILON WITH OXIA +test(0x1FEC, 0x1FE5); // GREEK CAPITAL LETTER RHO WITH DASIA, GREEK SMALL LETTER RHO WITH DASIA +test(0x1FF3, 0x1FFC); // GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI, GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +test(0x1FF8, 0x1F78); // GREEK CAPITAL LETTER OMICRON WITH VARIA, GREEK SMALL LETTER OMICRON WITH VARIA +test(0x1FF9, 0x1F79); // GREEK CAPITAL LETTER OMICRON WITH OXIA, GREEK SMALL LETTER OMICRON WITH OXIA +test(0x1FFA, 0x1F7C); // GREEK CAPITAL LETTER OMEGA WITH VARIA, GREEK SMALL LETTER OMEGA WITH VARIA +test(0x1FFB, 0x1F7D); // GREEK CAPITAL LETTER OMEGA WITH OXIA, GREEK SMALL LETTER OMEGA WITH OXIA +test(0x1FFC, 0x1FF3); // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI, GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +test(0x2126, 0x03C9, 0x03A9); // OHM SIGN (OHM), GREEK SMALL LETTER OMEGA, GREEK CAPITAL LETTER OMEGA +test(0x212A, 0x006B, 0x004B); // KELVIN SIGN (DEGREES KELVIN), LATIN SMALL LETTER K, LATIN CAPITAL LETTER K +test(0x212B, 0x00E5, 0x00C5); // ANGSTROM SIGN (ANGSTROM UNIT), LATIN SMALL LETTER A WITH RING ABOVE (LATIN SMALL LETTER A RING), LATIN CAPITAL LETTER A WITH RING ABOVE (LATIN CAPITAL LETTER A RING) +test(0x2132, 0x214E); // TURNED CAPITAL F (TURNED F), TURNED SMALL F +test(0x214E, 0x2132); // TURNED SMALL F, TURNED CAPITAL F (TURNED F) +test(0x2160, 0x2170); // ROMAN NUMERAL ONE, SMALL ROMAN NUMERAL ONE +test(0x2161, 0x2171); // ROMAN NUMERAL TWO, SMALL ROMAN NUMERAL TWO +test(0x2162, 0x2172); // ROMAN NUMERAL THREE, SMALL ROMAN NUMERAL THREE +test(0x2163, 0x2173); // ROMAN NUMERAL FOUR, SMALL ROMAN NUMERAL FOUR +test(0x2164, 0x2174); // ROMAN NUMERAL FIVE, SMALL ROMAN NUMERAL FIVE +test(0x2165, 0x2175); // ROMAN NUMERAL SIX, SMALL ROMAN NUMERAL SIX +test(0x2166, 0x2176); // ROMAN NUMERAL SEVEN, SMALL ROMAN NUMERAL SEVEN +test(0x2167, 0x2177); // ROMAN NUMERAL EIGHT, SMALL ROMAN NUMERAL EIGHT +test(0x2168, 0x2178); // ROMAN NUMERAL NINE, SMALL ROMAN NUMERAL NINE +test(0x2169, 0x2179); // ROMAN NUMERAL TEN, SMALL ROMAN NUMERAL TEN +test(0x216A, 0x217A); // ROMAN NUMERAL ELEVEN, SMALL ROMAN NUMERAL ELEVEN +test(0x216B, 0x217B); // ROMAN NUMERAL TWELVE, SMALL ROMAN NUMERAL TWELVE +test(0x216C, 0x217C); // ROMAN NUMERAL FIFTY, SMALL ROMAN NUMERAL FIFTY +test(0x216D, 0x217D); // ROMAN NUMERAL ONE HUNDRED, SMALL ROMAN NUMERAL ONE HUNDRED +test(0x216E, 0x217E); // ROMAN NUMERAL FIVE HUNDRED, SMALL ROMAN NUMERAL FIVE HUNDRED +test(0x216F, 0x217F); // ROMAN NUMERAL ONE THOUSAND, SMALL ROMAN NUMERAL ONE THOUSAND +test(0x2170, 0x2160); // SMALL ROMAN NUMERAL ONE, ROMAN NUMERAL ONE +test(0x2171, 0x2161); // SMALL ROMAN NUMERAL TWO, ROMAN NUMERAL TWO +test(0x2172, 0x2162); // SMALL ROMAN NUMERAL THREE, ROMAN NUMERAL THREE +test(0x2173, 0x2163); // SMALL ROMAN NUMERAL FOUR, ROMAN NUMERAL FOUR +test(0x2174, 0x2164); // SMALL ROMAN NUMERAL FIVE, ROMAN NUMERAL FIVE +test(0x2175, 0x2165); // SMALL ROMAN NUMERAL SIX, ROMAN NUMERAL SIX +test(0x2176, 0x2166); // SMALL ROMAN NUMERAL SEVEN, ROMAN NUMERAL SEVEN +test(0x2177, 0x2167); // SMALL ROMAN NUMERAL EIGHT, ROMAN NUMERAL EIGHT +test(0x2178, 0x2168); // SMALL ROMAN NUMERAL NINE, ROMAN NUMERAL NINE +test(0x2179, 0x2169); // SMALL ROMAN NUMERAL TEN, ROMAN NUMERAL TEN +test(0x217A, 0x216A); // SMALL ROMAN NUMERAL ELEVEN, ROMAN NUMERAL ELEVEN +test(0x217B, 0x216B); // SMALL ROMAN NUMERAL TWELVE, ROMAN NUMERAL TWELVE +test(0x217C, 0x216C); // SMALL ROMAN NUMERAL FIFTY, ROMAN NUMERAL FIFTY +test(0x217D, 0x216D); // SMALL ROMAN NUMERAL ONE HUNDRED, ROMAN NUMERAL ONE HUNDRED +test(0x217E, 0x216E); // SMALL ROMAN NUMERAL FIVE HUNDRED, ROMAN NUMERAL FIVE HUNDRED +test(0x217F, 0x216F); // SMALL ROMAN NUMERAL ONE THOUSAND, ROMAN NUMERAL ONE THOUSAND +test(0x2183, 0x2184); // ROMAN NUMERAL REVERSED ONE HUNDRED, LATIN SMALL LETTER REVERSED C +test(0x2184, 0x2183); // LATIN SMALL LETTER REVERSED C, ROMAN NUMERAL REVERSED ONE HUNDRED +test(0x24B6, 0x24D0); // CIRCLED LATIN CAPITAL LETTER A, CIRCLED LATIN SMALL LETTER A +test(0x24B7, 0x24D1); // CIRCLED LATIN CAPITAL LETTER B, CIRCLED LATIN SMALL LETTER B +test(0x24B8, 0x24D2); // CIRCLED LATIN CAPITAL LETTER C, CIRCLED LATIN SMALL LETTER C +test(0x24B9, 0x24D3); // CIRCLED LATIN CAPITAL LETTER D, CIRCLED LATIN SMALL LETTER D +test(0x24BA, 0x24D4); // CIRCLED LATIN CAPITAL LETTER E, CIRCLED LATIN SMALL LETTER E +test(0x24BB, 0x24D5); // CIRCLED LATIN CAPITAL LETTER F, CIRCLED LATIN SMALL LETTER F +test(0x24BC, 0x24D6); // CIRCLED LATIN CAPITAL LETTER G, CIRCLED LATIN SMALL LETTER G +test(0x24BD, 0x24D7); // CIRCLED LATIN CAPITAL LETTER H, CIRCLED LATIN SMALL LETTER H +test(0x24BE, 0x24D8); // CIRCLED LATIN CAPITAL LETTER I, CIRCLED LATIN SMALL LETTER I +test(0x24BF, 0x24D9); // CIRCLED LATIN CAPITAL LETTER J, CIRCLED LATIN SMALL LETTER J +test(0x24C0, 0x24DA); // CIRCLED LATIN CAPITAL LETTER K, CIRCLED LATIN SMALL LETTER K +test(0x24C1, 0x24DB); // CIRCLED LATIN CAPITAL LETTER L, CIRCLED LATIN SMALL LETTER L +test(0x24C2, 0x24DC); // CIRCLED LATIN CAPITAL LETTER M, CIRCLED LATIN SMALL LETTER M +test(0x24C3, 0x24DD); // CIRCLED LATIN CAPITAL LETTER N, CIRCLED LATIN SMALL LETTER N +test(0x24C4, 0x24DE); // CIRCLED LATIN CAPITAL LETTER O, CIRCLED LATIN SMALL LETTER O +test(0x24C5, 0x24DF); // CIRCLED LATIN CAPITAL LETTER P, CIRCLED LATIN SMALL LETTER P +test(0x24C6, 0x24E0); // CIRCLED LATIN CAPITAL LETTER Q, CIRCLED LATIN SMALL LETTER Q +test(0x24C7, 0x24E1); // CIRCLED LATIN CAPITAL LETTER R, CIRCLED LATIN SMALL LETTER R +test(0x24C8, 0x24E2); // CIRCLED LATIN CAPITAL LETTER S, CIRCLED LATIN SMALL LETTER S +test(0x24C9, 0x24E3); // CIRCLED LATIN CAPITAL LETTER T, CIRCLED LATIN SMALL LETTER T +test(0x24CA, 0x24E4); // CIRCLED LATIN CAPITAL LETTER U, CIRCLED LATIN SMALL LETTER U +test(0x24CB, 0x24E5); // CIRCLED LATIN CAPITAL LETTER V, CIRCLED LATIN SMALL LETTER V +test(0x24CC, 0x24E6); // CIRCLED LATIN CAPITAL LETTER W, CIRCLED LATIN SMALL LETTER W +test(0x24CD, 0x24E7); // CIRCLED LATIN CAPITAL LETTER X, CIRCLED LATIN SMALL LETTER X +test(0x24CE, 0x24E8); // CIRCLED LATIN CAPITAL LETTER Y, CIRCLED LATIN SMALL LETTER Y +test(0x24CF, 0x24E9); // CIRCLED LATIN CAPITAL LETTER Z, CIRCLED LATIN SMALL LETTER Z +test(0x24D0, 0x24B6); // CIRCLED LATIN SMALL LETTER A, CIRCLED LATIN CAPITAL LETTER A +test(0x24D1, 0x24B7); // CIRCLED LATIN SMALL LETTER B, CIRCLED LATIN CAPITAL LETTER B +test(0x24D2, 0x24B8); // CIRCLED LATIN SMALL LETTER C, CIRCLED LATIN CAPITAL LETTER C +test(0x24D3, 0x24B9); // CIRCLED LATIN SMALL LETTER D, CIRCLED LATIN CAPITAL LETTER D +test(0x24D4, 0x24BA); // CIRCLED LATIN SMALL LETTER E, CIRCLED LATIN CAPITAL LETTER E +test(0x24D5, 0x24BB); // CIRCLED LATIN SMALL LETTER F, CIRCLED LATIN CAPITAL LETTER F +test(0x24D6, 0x24BC); // CIRCLED LATIN SMALL LETTER G, CIRCLED LATIN CAPITAL LETTER G +test(0x24D7, 0x24BD); // CIRCLED LATIN SMALL LETTER H, CIRCLED LATIN CAPITAL LETTER H +test(0x24D8, 0x24BE); // CIRCLED LATIN SMALL LETTER I, CIRCLED LATIN CAPITAL LETTER I +test(0x24D9, 0x24BF); // CIRCLED LATIN SMALL LETTER J, CIRCLED LATIN CAPITAL LETTER J +test(0x24DA, 0x24C0); // CIRCLED LATIN SMALL LETTER K, CIRCLED LATIN CAPITAL LETTER K +test(0x24DB, 0x24C1); // CIRCLED LATIN SMALL LETTER L, CIRCLED LATIN CAPITAL LETTER L +test(0x24DC, 0x24C2); // CIRCLED LATIN SMALL LETTER M, CIRCLED LATIN CAPITAL LETTER M +test(0x24DD, 0x24C3); // CIRCLED LATIN SMALL LETTER N, CIRCLED LATIN CAPITAL LETTER N +test(0x24DE, 0x24C4); // CIRCLED LATIN SMALL LETTER O, CIRCLED LATIN CAPITAL LETTER O +test(0x24DF, 0x24C5); // CIRCLED LATIN SMALL LETTER P, CIRCLED LATIN CAPITAL LETTER P +test(0x24E0, 0x24C6); // CIRCLED LATIN SMALL LETTER Q, CIRCLED LATIN CAPITAL LETTER Q +test(0x24E1, 0x24C7); // CIRCLED LATIN SMALL LETTER R, CIRCLED LATIN CAPITAL LETTER R +test(0x24E2, 0x24C8); // CIRCLED LATIN SMALL LETTER S, CIRCLED LATIN CAPITAL LETTER S +test(0x24E3, 0x24C9); // CIRCLED LATIN SMALL LETTER T, CIRCLED LATIN CAPITAL LETTER T +test(0x24E4, 0x24CA); // CIRCLED LATIN SMALL LETTER U, CIRCLED LATIN CAPITAL LETTER U +test(0x24E5, 0x24CB); // CIRCLED LATIN SMALL LETTER V, CIRCLED LATIN CAPITAL LETTER V +test(0x24E6, 0x24CC); // CIRCLED LATIN SMALL LETTER W, CIRCLED LATIN CAPITAL LETTER W +test(0x24E7, 0x24CD); // CIRCLED LATIN SMALL LETTER X, CIRCLED LATIN CAPITAL LETTER X +test(0x24E8, 0x24CE); // CIRCLED LATIN SMALL LETTER Y, CIRCLED LATIN CAPITAL LETTER Y +test(0x24E9, 0x24CF); // CIRCLED LATIN SMALL LETTER Z, CIRCLED LATIN CAPITAL LETTER Z +test(0x2C00, 0x2C30); // GLAGOLITIC CAPITAL LETTER AZU, GLAGOLITIC SMALL LETTER AZU +test(0x2C01, 0x2C31); // GLAGOLITIC CAPITAL LETTER BUKY, GLAGOLITIC SMALL LETTER BUKY +test(0x2C02, 0x2C32); // GLAGOLITIC CAPITAL LETTER VEDE, GLAGOLITIC SMALL LETTER VEDE +test(0x2C03, 0x2C33); // GLAGOLITIC CAPITAL LETTER GLAGOLI, GLAGOLITIC SMALL LETTER GLAGOLI +test(0x2C04, 0x2C34); // GLAGOLITIC CAPITAL LETTER DOBRO, GLAGOLITIC SMALL LETTER DOBRO +test(0x2C05, 0x2C35); // GLAGOLITIC CAPITAL LETTER YESTU, GLAGOLITIC SMALL LETTER YESTU +test(0x2C06, 0x2C36); // GLAGOLITIC CAPITAL LETTER ZHIVETE, GLAGOLITIC SMALL LETTER ZHIVETE +test(0x2C07, 0x2C37); // GLAGOLITIC CAPITAL LETTER DZELO, GLAGOLITIC SMALL LETTER DZELO +test(0x2C08, 0x2C38); // GLAGOLITIC CAPITAL LETTER ZEMLJA, GLAGOLITIC SMALL LETTER ZEMLJA +test(0x2C09, 0x2C39); // GLAGOLITIC CAPITAL LETTER IZHE, GLAGOLITIC SMALL LETTER IZHE +test(0x2C0A, 0x2C3A); // GLAGOLITIC CAPITAL LETTER INITIAL IZHE, GLAGOLITIC SMALL LETTER INITIAL IZHE +test(0x2C0B, 0x2C3B); // GLAGOLITIC CAPITAL LETTER I, GLAGOLITIC SMALL LETTER I +test(0x2C0C, 0x2C3C); // GLAGOLITIC CAPITAL LETTER DJERVI, GLAGOLITIC SMALL LETTER DJERVI +test(0x2C0D, 0x2C3D); // GLAGOLITIC CAPITAL LETTER KAKO, GLAGOLITIC SMALL LETTER KAKO +test(0x2C0E, 0x2C3E); // GLAGOLITIC CAPITAL LETTER LJUDIJE, GLAGOLITIC SMALL LETTER LJUDIJE +test(0x2C0F, 0x2C3F); // GLAGOLITIC CAPITAL LETTER MYSLITE, GLAGOLITIC SMALL LETTER MYSLITE +test(0x2C10, 0x2C40); // GLAGOLITIC CAPITAL LETTER NASHI, GLAGOLITIC SMALL LETTER NASHI +test(0x2C11, 0x2C41); // GLAGOLITIC CAPITAL LETTER ONU, GLAGOLITIC SMALL LETTER ONU +test(0x2C12, 0x2C42); // GLAGOLITIC CAPITAL LETTER POKOJI, GLAGOLITIC SMALL LETTER POKOJI +test(0x2C13, 0x2C43); // GLAGOLITIC CAPITAL LETTER RITSI, GLAGOLITIC SMALL LETTER RITSI +test(0x2C14, 0x2C44); // GLAGOLITIC CAPITAL LETTER SLOVO, GLAGOLITIC SMALL LETTER SLOVO +test(0x2C15, 0x2C45); // GLAGOLITIC CAPITAL LETTER TVRIDO, GLAGOLITIC SMALL LETTER TVRIDO +test(0x2C16, 0x2C46); // GLAGOLITIC CAPITAL LETTER UKU, GLAGOLITIC SMALL LETTER UKU +test(0x2C17, 0x2C47); // GLAGOLITIC CAPITAL LETTER FRITU, GLAGOLITIC SMALL LETTER FRITU +test(0x2C18, 0x2C48); // GLAGOLITIC CAPITAL LETTER HERU, GLAGOLITIC SMALL LETTER HERU +test(0x2C19, 0x2C49); // GLAGOLITIC CAPITAL LETTER OTU, GLAGOLITIC SMALL LETTER OTU +test(0x2C1A, 0x2C4A); // GLAGOLITIC CAPITAL LETTER PE, GLAGOLITIC SMALL LETTER PE +test(0x2C1B, 0x2C4B); // GLAGOLITIC CAPITAL LETTER SHTA, GLAGOLITIC SMALL LETTER SHTA +test(0x2C1C, 0x2C4C); // GLAGOLITIC CAPITAL LETTER TSI, GLAGOLITIC SMALL LETTER TSI +test(0x2C1D, 0x2C4D); // GLAGOLITIC CAPITAL LETTER CHRIVI, GLAGOLITIC SMALL LETTER CHRIVI +test(0x2C1E, 0x2C4E); // GLAGOLITIC CAPITAL LETTER SHA, GLAGOLITIC SMALL LETTER SHA +test(0x2C1F, 0x2C4F); // GLAGOLITIC CAPITAL LETTER YERU, GLAGOLITIC SMALL LETTER YERU +test(0x2C20, 0x2C50); // GLAGOLITIC CAPITAL LETTER YERI, GLAGOLITIC SMALL LETTER YERI +test(0x2C21, 0x2C51); // GLAGOLITIC CAPITAL LETTER YATI, GLAGOLITIC SMALL LETTER YATI +test(0x2C22, 0x2C52); // GLAGOLITIC CAPITAL LETTER SPIDERY HA, GLAGOLITIC SMALL LETTER SPIDERY HA +test(0x2C23, 0x2C53); // GLAGOLITIC CAPITAL LETTER YU, GLAGOLITIC SMALL LETTER YU +test(0x2C24, 0x2C54); // GLAGOLITIC CAPITAL LETTER SMALL YUS, GLAGOLITIC SMALL LETTER SMALL YUS +test(0x2C25, 0x2C55); // GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL, GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL +test(0x2C26, 0x2C56); // GLAGOLITIC CAPITAL LETTER YO, GLAGOLITIC SMALL LETTER YO +test(0x2C27, 0x2C57); // GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS, GLAGOLITIC SMALL LETTER IOTATED SMALL YUS +test(0x2C28, 0x2C58); // GLAGOLITIC CAPITAL LETTER BIG YUS, GLAGOLITIC SMALL LETTER BIG YUS +test(0x2C29, 0x2C59); // GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS, GLAGOLITIC SMALL LETTER IOTATED BIG YUS +test(0x2C2A, 0x2C5A); // GLAGOLITIC CAPITAL LETTER FITA, GLAGOLITIC SMALL LETTER FITA +test(0x2C2B, 0x2C5B); // GLAGOLITIC CAPITAL LETTER IZHITSA, GLAGOLITIC SMALL LETTER IZHITSA +test(0x2C2C, 0x2C5C); // GLAGOLITIC CAPITAL LETTER SHTAPIC, GLAGOLITIC SMALL LETTER SHTAPIC +test(0x2C2D, 0x2C5D); // GLAGOLITIC CAPITAL LETTER TROKUTASTI A, GLAGOLITIC SMALL LETTER TROKUTASTI A +test(0x2C2E, 0x2C5E); // GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE, GLAGOLITIC SMALL LETTER LATINATE MYSLITE +test(0x2C2F, 0x2C5F); // GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI, GLAGOLITIC SMALL LETTER CAUDATE CHRIVI +test(0x2C30, 0x2C00); // GLAGOLITIC SMALL LETTER AZU, GLAGOLITIC CAPITAL LETTER AZU +test(0x2C31, 0x2C01); // GLAGOLITIC SMALL LETTER BUKY, GLAGOLITIC CAPITAL LETTER BUKY +test(0x2C32, 0x2C02); // GLAGOLITIC SMALL LETTER VEDE, GLAGOLITIC CAPITAL LETTER VEDE +test(0x2C33, 0x2C03); // GLAGOLITIC SMALL LETTER GLAGOLI, GLAGOLITIC CAPITAL LETTER GLAGOLI +test(0x2C34, 0x2C04); // GLAGOLITIC SMALL LETTER DOBRO, GLAGOLITIC CAPITAL LETTER DOBRO +test(0x2C35, 0x2C05); // GLAGOLITIC SMALL LETTER YESTU, GLAGOLITIC CAPITAL LETTER YESTU +test(0x2C36, 0x2C06); // GLAGOLITIC SMALL LETTER ZHIVETE, GLAGOLITIC CAPITAL LETTER ZHIVETE +test(0x2C37, 0x2C07); // GLAGOLITIC SMALL LETTER DZELO, GLAGOLITIC CAPITAL LETTER DZELO +test(0x2C38, 0x2C08); // GLAGOLITIC SMALL LETTER ZEMLJA, GLAGOLITIC CAPITAL LETTER ZEMLJA +test(0x2C39, 0x2C09); // GLAGOLITIC SMALL LETTER IZHE, GLAGOLITIC CAPITAL LETTER IZHE +test(0x2C3A, 0x2C0A); // GLAGOLITIC SMALL LETTER INITIAL IZHE, GLAGOLITIC CAPITAL LETTER INITIAL IZHE +test(0x2C3B, 0x2C0B); // GLAGOLITIC SMALL LETTER I, GLAGOLITIC CAPITAL LETTER I +test(0x2C3C, 0x2C0C); // GLAGOLITIC SMALL LETTER DJERVI, GLAGOLITIC CAPITAL LETTER DJERVI +test(0x2C3D, 0x2C0D); // GLAGOLITIC SMALL LETTER KAKO, GLAGOLITIC CAPITAL LETTER KAKO +test(0x2C3E, 0x2C0E); // GLAGOLITIC SMALL LETTER LJUDIJE, GLAGOLITIC CAPITAL LETTER LJUDIJE +test(0x2C3F, 0x2C0F); // GLAGOLITIC SMALL LETTER MYSLITE, GLAGOLITIC CAPITAL LETTER MYSLITE +test(0x2C40, 0x2C10); // GLAGOLITIC SMALL LETTER NASHI, GLAGOLITIC CAPITAL LETTER NASHI +test(0x2C41, 0x2C11); // GLAGOLITIC SMALL LETTER ONU, GLAGOLITIC CAPITAL LETTER ONU +test(0x2C42, 0x2C12); // GLAGOLITIC SMALL LETTER POKOJI, GLAGOLITIC CAPITAL LETTER POKOJI +test(0x2C43, 0x2C13); // GLAGOLITIC SMALL LETTER RITSI, GLAGOLITIC CAPITAL LETTER RITSI +test(0x2C44, 0x2C14); // GLAGOLITIC SMALL LETTER SLOVO, GLAGOLITIC CAPITAL LETTER SLOVO +test(0x2C45, 0x2C15); // GLAGOLITIC SMALL LETTER TVRIDO, GLAGOLITIC CAPITAL LETTER TVRIDO +test(0x2C46, 0x2C16); // GLAGOLITIC SMALL LETTER UKU, GLAGOLITIC CAPITAL LETTER UKU +test(0x2C47, 0x2C17); // GLAGOLITIC SMALL LETTER FRITU, GLAGOLITIC CAPITAL LETTER FRITU +test(0x2C48, 0x2C18); // GLAGOLITIC SMALL LETTER HERU, GLAGOLITIC CAPITAL LETTER HERU +test(0x2C49, 0x2C19); // GLAGOLITIC SMALL LETTER OTU, GLAGOLITIC CAPITAL LETTER OTU +test(0x2C4A, 0x2C1A); // GLAGOLITIC SMALL LETTER PE, GLAGOLITIC CAPITAL LETTER PE +test(0x2C4B, 0x2C1B); // GLAGOLITIC SMALL LETTER SHTA, GLAGOLITIC CAPITAL LETTER SHTA +test(0x2C4C, 0x2C1C); // GLAGOLITIC SMALL LETTER TSI, GLAGOLITIC CAPITAL LETTER TSI +test(0x2C4D, 0x2C1D); // GLAGOLITIC SMALL LETTER CHRIVI, GLAGOLITIC CAPITAL LETTER CHRIVI +test(0x2C4E, 0x2C1E); // GLAGOLITIC SMALL LETTER SHA, GLAGOLITIC CAPITAL LETTER SHA +test(0x2C4F, 0x2C1F); // GLAGOLITIC SMALL LETTER YERU, GLAGOLITIC CAPITAL LETTER YERU +test(0x2C50, 0x2C20); // GLAGOLITIC SMALL LETTER YERI, GLAGOLITIC CAPITAL LETTER YERI +test(0x2C51, 0x2C21); // GLAGOLITIC SMALL LETTER YATI, GLAGOLITIC CAPITAL LETTER YATI +test(0x2C52, 0x2C22); // GLAGOLITIC SMALL LETTER SPIDERY HA, GLAGOLITIC CAPITAL LETTER SPIDERY HA +test(0x2C53, 0x2C23); // GLAGOLITIC SMALL LETTER YU, GLAGOLITIC CAPITAL LETTER YU +test(0x2C54, 0x2C24); // GLAGOLITIC SMALL LETTER SMALL YUS, GLAGOLITIC CAPITAL LETTER SMALL YUS +test(0x2C55, 0x2C25); // GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL, GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL +test(0x2C56, 0x2C26); // GLAGOLITIC SMALL LETTER YO, GLAGOLITIC CAPITAL LETTER YO +test(0x2C57, 0x2C27); // GLAGOLITIC SMALL LETTER IOTATED SMALL YUS, GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS +test(0x2C58, 0x2C28); // GLAGOLITIC SMALL LETTER BIG YUS, GLAGOLITIC CAPITAL LETTER BIG YUS +test(0x2C59, 0x2C29); // GLAGOLITIC SMALL LETTER IOTATED BIG YUS, GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS +test(0x2C5A, 0x2C2A); // GLAGOLITIC SMALL LETTER FITA, GLAGOLITIC CAPITAL LETTER FITA +test(0x2C5B, 0x2C2B); // GLAGOLITIC SMALL LETTER IZHITSA, GLAGOLITIC CAPITAL LETTER IZHITSA +test(0x2C5C, 0x2C2C); // GLAGOLITIC SMALL LETTER SHTAPIC, GLAGOLITIC CAPITAL LETTER SHTAPIC +test(0x2C5D, 0x2C2D); // GLAGOLITIC SMALL LETTER TROKUTASTI A, GLAGOLITIC CAPITAL LETTER TROKUTASTI A +test(0x2C5E, 0x2C2E); // GLAGOLITIC SMALL LETTER LATINATE MYSLITE, GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +test(0x2C5F, 0x2C2F); // GLAGOLITIC SMALL LETTER CAUDATE CHRIVI, GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +test(0x2C60, 0x2C61); // LATIN CAPITAL LETTER L WITH DOUBLE BAR, LATIN SMALL LETTER L WITH DOUBLE BAR +test(0x2C61, 0x2C60); // LATIN SMALL LETTER L WITH DOUBLE BAR, LATIN CAPITAL LETTER L WITH DOUBLE BAR +test(0x2C62, 0x026B); // LATIN CAPITAL LETTER L WITH MIDDLE TILDE, LATIN SMALL LETTER L WITH MIDDLE TILDE +test(0x2C63, 0x1D7D); // LATIN CAPITAL LETTER P WITH STROKE, LATIN SMALL LETTER P WITH STROKE +test(0x2C64, 0x027D); // LATIN CAPITAL LETTER R WITH TAIL, LATIN SMALL LETTER R WITH TAIL (LATIN SMALL LETTER R HOOK) +test(0x2C65, 0x023A); // LATIN SMALL LETTER A WITH STROKE, LATIN CAPITAL LETTER A WITH STROKE +test(0x2C66, 0x023E); // LATIN SMALL LETTER T WITH DIAGONAL STROKE, LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +test(0x2C67, 0x2C68); // LATIN CAPITAL LETTER H WITH DESCENDER, LATIN SMALL LETTER H WITH DESCENDER +test(0x2C68, 0x2C67); // LATIN SMALL LETTER H WITH DESCENDER, LATIN CAPITAL LETTER H WITH DESCENDER +test(0x2C69, 0x2C6A); // LATIN CAPITAL LETTER K WITH DESCENDER, LATIN SMALL LETTER K WITH DESCENDER +test(0x2C6A, 0x2C69); // LATIN SMALL LETTER K WITH DESCENDER, LATIN CAPITAL LETTER K WITH DESCENDER +test(0x2C6B, 0x2C6C); // LATIN CAPITAL LETTER Z WITH DESCENDER, LATIN SMALL LETTER Z WITH DESCENDER +test(0x2C6C, 0x2C6B); // LATIN SMALL LETTER Z WITH DESCENDER, LATIN CAPITAL LETTER Z WITH DESCENDER +test(0x2C6D, 0x0251); // LATIN CAPITAL LETTER ALPHA, LATIN SMALL LETTER ALPHA (LATIN SMALL LETTER SCRIPT A) +test(0x2C6E, 0x0271); // LATIN CAPITAL LETTER M WITH HOOK, LATIN SMALL LETTER M WITH HOOK (LATIN SMALL LETTER M HOOK) +test(0x2C6F, 0x0250); // LATIN CAPITAL LETTER TURNED A, LATIN SMALL LETTER TURNED A +test(0x2C70, 0x0252); // LATIN CAPITAL LETTER TURNED ALPHA, LATIN SMALL LETTER TURNED ALPHA (LATIN SMALL LETTER TURNED SCRIPT A) +test(0x2C72, 0x2C73); // LATIN CAPITAL LETTER W WITH HOOK, LATIN SMALL LETTER W WITH HOOK +test(0x2C73, 0x2C72); // LATIN SMALL LETTER W WITH HOOK, LATIN CAPITAL LETTER W WITH HOOK +test(0x2C75, 0x2C76); // LATIN CAPITAL LETTER HALF H, LATIN SMALL LETTER HALF H +test(0x2C76, 0x2C75); // LATIN SMALL LETTER HALF H, LATIN CAPITAL LETTER HALF H +test(0x2C7E, 0x023F); // LATIN CAPITAL LETTER S WITH SWASH TAIL, LATIN SMALL LETTER S WITH SWASH TAIL +test(0x2C7F, 0x0240); // LATIN CAPITAL LETTER Z WITH SWASH TAIL, LATIN SMALL LETTER Z WITH SWASH TAIL +test(0x2C80, 0x2C81); // COPTIC CAPITAL LETTER ALFA, COPTIC SMALL LETTER ALFA +test(0x2C81, 0x2C80); // COPTIC SMALL LETTER ALFA, COPTIC CAPITAL LETTER ALFA +test(0x2C82, 0x2C83); // COPTIC CAPITAL LETTER VIDA, COPTIC SMALL LETTER VIDA +test(0x2C83, 0x2C82); // COPTIC SMALL LETTER VIDA, COPTIC CAPITAL LETTER VIDA +test(0x2C84, 0x2C85); // COPTIC CAPITAL LETTER GAMMA, COPTIC SMALL LETTER GAMMA +test(0x2C85, 0x2C84); // COPTIC SMALL LETTER GAMMA, COPTIC CAPITAL LETTER GAMMA +test(0x2C86, 0x2C87); // COPTIC CAPITAL LETTER DALDA, COPTIC SMALL LETTER DALDA +test(0x2C87, 0x2C86); // COPTIC SMALL LETTER DALDA, COPTIC CAPITAL LETTER DALDA +test(0x2C88, 0x2C89); // COPTIC CAPITAL LETTER EIE, COPTIC SMALL LETTER EIE +test(0x2C89, 0x2C88); // COPTIC SMALL LETTER EIE, COPTIC CAPITAL LETTER EIE +test(0x2C8A, 0x2C8B); // COPTIC CAPITAL LETTER SOU, COPTIC SMALL LETTER SOU +test(0x2C8B, 0x2C8A); // COPTIC SMALL LETTER SOU, COPTIC CAPITAL LETTER SOU +test(0x2C8C, 0x2C8D); // COPTIC CAPITAL LETTER ZATA, COPTIC SMALL LETTER ZATA +test(0x2C8D, 0x2C8C); // COPTIC SMALL LETTER ZATA, COPTIC CAPITAL LETTER ZATA +test(0x2C8E, 0x2C8F); // COPTIC CAPITAL LETTER HATE, COPTIC SMALL LETTER HATE +test(0x2C8F, 0x2C8E); // COPTIC SMALL LETTER HATE, COPTIC CAPITAL LETTER HATE +test(0x2C90, 0x2C91); // COPTIC CAPITAL LETTER THETHE, COPTIC SMALL LETTER THETHE +test(0x2C91, 0x2C90); // COPTIC SMALL LETTER THETHE, COPTIC CAPITAL LETTER THETHE +test(0x2C92, 0x2C93); // COPTIC CAPITAL LETTER IAUDA, COPTIC SMALL LETTER IAUDA +test(0x2C93, 0x2C92); // COPTIC SMALL LETTER IAUDA, COPTIC CAPITAL LETTER IAUDA +test(0x2C94, 0x2C95); // COPTIC CAPITAL LETTER KAPA, COPTIC SMALL LETTER KAPA +test(0x2C95, 0x2C94); // COPTIC SMALL LETTER KAPA, COPTIC CAPITAL LETTER KAPA +test(0x2C96, 0x2C97); // COPTIC CAPITAL LETTER LAULA, COPTIC SMALL LETTER LAULA +test(0x2C97, 0x2C96); // COPTIC SMALL LETTER LAULA, COPTIC CAPITAL LETTER LAULA +test(0x2C98, 0x2C99); // COPTIC CAPITAL LETTER MI, COPTIC SMALL LETTER MI +test(0x2C99, 0x2C98); // COPTIC SMALL LETTER MI, COPTIC CAPITAL LETTER MI +test(0x2C9A, 0x2C9B); // COPTIC CAPITAL LETTER NI, COPTIC SMALL LETTER NI +test(0x2C9B, 0x2C9A); // COPTIC SMALL LETTER NI, COPTIC CAPITAL LETTER NI +test(0x2C9C, 0x2C9D); // COPTIC CAPITAL LETTER KSI, COPTIC SMALL LETTER KSI +test(0x2C9D, 0x2C9C); // COPTIC SMALL LETTER KSI, COPTIC CAPITAL LETTER KSI +test(0x2C9E, 0x2C9F); // COPTIC CAPITAL LETTER O, COPTIC SMALL LETTER O +test(0x2C9F, 0x2C9E); // COPTIC SMALL LETTER O, COPTIC CAPITAL LETTER O +test(0x2CA0, 0x2CA1); // COPTIC CAPITAL LETTER PI, COPTIC SMALL LETTER PI +test(0x2CA1, 0x2CA0); // COPTIC SMALL LETTER PI, COPTIC CAPITAL LETTER PI +test(0x2CA2, 0x2CA3); // COPTIC CAPITAL LETTER RO, COPTIC SMALL LETTER RO +test(0x2CA3, 0x2CA2); // COPTIC SMALL LETTER RO, COPTIC CAPITAL LETTER RO +test(0x2CA4, 0x2CA5); // COPTIC CAPITAL LETTER SIMA, COPTIC SMALL LETTER SIMA +test(0x2CA5, 0x2CA4); // COPTIC SMALL LETTER SIMA, COPTIC CAPITAL LETTER SIMA +test(0x2CA6, 0x2CA7); // COPTIC CAPITAL LETTER TAU, COPTIC SMALL LETTER TAU +test(0x2CA7, 0x2CA6); // COPTIC SMALL LETTER TAU, COPTIC CAPITAL LETTER TAU +test(0x2CA8, 0x2CA9); // COPTIC CAPITAL LETTER UA, COPTIC SMALL LETTER UA +test(0x2CA9, 0x2CA8); // COPTIC SMALL LETTER UA, COPTIC CAPITAL LETTER UA +test(0x2CAA, 0x2CAB); // COPTIC CAPITAL LETTER FI, COPTIC SMALL LETTER FI +test(0x2CAB, 0x2CAA); // COPTIC SMALL LETTER FI, COPTIC CAPITAL LETTER FI +test(0x2CAC, 0x2CAD); // COPTIC CAPITAL LETTER KHI, COPTIC SMALL LETTER KHI +test(0x2CAD, 0x2CAC); // COPTIC SMALL LETTER KHI, COPTIC CAPITAL LETTER KHI +test(0x2CAE, 0x2CAF); // COPTIC CAPITAL LETTER PSI, COPTIC SMALL LETTER PSI +test(0x2CAF, 0x2CAE); // COPTIC SMALL LETTER PSI, COPTIC CAPITAL LETTER PSI +test(0x2CB0, 0x2CB1); // COPTIC CAPITAL LETTER OOU, COPTIC SMALL LETTER OOU +test(0x2CB1, 0x2CB0); // COPTIC SMALL LETTER OOU, COPTIC CAPITAL LETTER OOU +test(0x2CB2, 0x2CB3); // COPTIC CAPITAL LETTER DIALECT-P ALEF, COPTIC SMALL LETTER DIALECT-P ALEF +test(0x2CB3, 0x2CB2); // COPTIC SMALL LETTER DIALECT-P ALEF, COPTIC CAPITAL LETTER DIALECT-P ALEF +test(0x2CB4, 0x2CB5); // COPTIC CAPITAL LETTER OLD COPTIC AIN, COPTIC SMALL LETTER OLD COPTIC AIN +test(0x2CB5, 0x2CB4); // COPTIC SMALL LETTER OLD COPTIC AIN, COPTIC CAPITAL LETTER OLD COPTIC AIN +test(0x2CB6, 0x2CB7); // COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE, COPTIC SMALL LETTER CRYPTOGRAMMIC EIE +test(0x2CB7, 0x2CB6); // COPTIC SMALL LETTER CRYPTOGRAMMIC EIE, COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +test(0x2CB8, 0x2CB9); // COPTIC CAPITAL LETTER DIALECT-P KAPA, COPTIC SMALL LETTER DIALECT-P KAPA +test(0x2CB9, 0x2CB8); // COPTIC SMALL LETTER DIALECT-P KAPA, COPTIC CAPITAL LETTER DIALECT-P KAPA +test(0x2CBA, 0x2CBB); // COPTIC CAPITAL LETTER DIALECT-P NI, COPTIC SMALL LETTER DIALECT-P NI +test(0x2CBB, 0x2CBA); // COPTIC SMALL LETTER DIALECT-P NI, COPTIC CAPITAL LETTER DIALECT-P NI +test(0x2CBC, 0x2CBD); // COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI, COPTIC SMALL LETTER CRYPTOGRAMMIC NI +test(0x2CBD, 0x2CBC); // COPTIC SMALL LETTER CRYPTOGRAMMIC NI, COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +test(0x2CBE, 0x2CBF); // COPTIC CAPITAL LETTER OLD COPTIC OOU, COPTIC SMALL LETTER OLD COPTIC OOU +test(0x2CBF, 0x2CBE); // COPTIC SMALL LETTER OLD COPTIC OOU, COPTIC CAPITAL LETTER OLD COPTIC OOU +test(0x2CC0, 0x2CC1); // COPTIC CAPITAL LETTER SAMPI, COPTIC SMALL LETTER SAMPI +test(0x2CC1, 0x2CC0); // COPTIC SMALL LETTER SAMPI, COPTIC CAPITAL LETTER SAMPI +test(0x2CC2, 0x2CC3); // COPTIC CAPITAL LETTER CROSSED SHEI, COPTIC SMALL LETTER CROSSED SHEI +test(0x2CC3, 0x2CC2); // COPTIC SMALL LETTER CROSSED SHEI, COPTIC CAPITAL LETTER CROSSED SHEI +test(0x2CC4, 0x2CC5); // COPTIC CAPITAL LETTER OLD COPTIC SHEI, COPTIC SMALL LETTER OLD COPTIC SHEI +test(0x2CC5, 0x2CC4); // COPTIC SMALL LETTER OLD COPTIC SHEI, COPTIC CAPITAL LETTER OLD COPTIC SHEI +test(0x2CC6, 0x2CC7); // COPTIC CAPITAL LETTER OLD COPTIC ESH, COPTIC SMALL LETTER OLD COPTIC ESH +test(0x2CC7, 0x2CC6); // COPTIC SMALL LETTER OLD COPTIC ESH, COPTIC CAPITAL LETTER OLD COPTIC ESH +test(0x2CC8, 0x2CC9); // COPTIC CAPITAL LETTER AKHMIMIC KHEI, COPTIC SMALL LETTER AKHMIMIC KHEI +test(0x2CC9, 0x2CC8); // COPTIC SMALL LETTER AKHMIMIC KHEI, COPTIC CAPITAL LETTER AKHMIMIC KHEI +test(0x2CCA, 0x2CCB); // COPTIC CAPITAL LETTER DIALECT-P HORI, COPTIC SMALL LETTER DIALECT-P HORI +test(0x2CCB, 0x2CCA); // COPTIC SMALL LETTER DIALECT-P HORI, COPTIC CAPITAL LETTER DIALECT-P HORI +test(0x2CCC, 0x2CCD); // COPTIC CAPITAL LETTER OLD COPTIC HORI, COPTIC SMALL LETTER OLD COPTIC HORI +test(0x2CCD, 0x2CCC); // COPTIC SMALL LETTER OLD COPTIC HORI, COPTIC CAPITAL LETTER OLD COPTIC HORI +test(0x2CCE, 0x2CCF); // COPTIC CAPITAL LETTER OLD COPTIC HA, COPTIC SMALL LETTER OLD COPTIC HA +test(0x2CCF, 0x2CCE); // COPTIC SMALL LETTER OLD COPTIC HA, COPTIC CAPITAL LETTER OLD COPTIC HA +test(0x2CD0, 0x2CD1); // COPTIC CAPITAL LETTER L-SHAPED HA, COPTIC SMALL LETTER L-SHAPED HA +test(0x2CD1, 0x2CD0); // COPTIC SMALL LETTER L-SHAPED HA, COPTIC CAPITAL LETTER L-SHAPED HA +test(0x2CD2, 0x2CD3); // COPTIC CAPITAL LETTER OLD COPTIC HEI, COPTIC SMALL LETTER OLD COPTIC HEI +test(0x2CD3, 0x2CD2); // COPTIC SMALL LETTER OLD COPTIC HEI, COPTIC CAPITAL LETTER OLD COPTIC HEI +test(0x2CD4, 0x2CD5); // COPTIC CAPITAL LETTER OLD COPTIC HAT, COPTIC SMALL LETTER OLD COPTIC HAT +test(0x2CD5, 0x2CD4); // COPTIC SMALL LETTER OLD COPTIC HAT, COPTIC CAPITAL LETTER OLD COPTIC HAT +test(0x2CD6, 0x2CD7); // COPTIC CAPITAL LETTER OLD COPTIC GANGIA, COPTIC SMALL LETTER OLD COPTIC GANGIA +test(0x2CD7, 0x2CD6); // COPTIC SMALL LETTER OLD COPTIC GANGIA, COPTIC CAPITAL LETTER OLD COPTIC GANGIA +test(0x2CD8, 0x2CD9); // COPTIC CAPITAL LETTER OLD COPTIC DJA, COPTIC SMALL LETTER OLD COPTIC DJA +test(0x2CD9, 0x2CD8); // COPTIC SMALL LETTER OLD COPTIC DJA, COPTIC CAPITAL LETTER OLD COPTIC DJA +test(0x2CDA, 0x2CDB); // COPTIC CAPITAL LETTER OLD COPTIC SHIMA, COPTIC SMALL LETTER OLD COPTIC SHIMA +test(0x2CDB, 0x2CDA); // COPTIC SMALL LETTER OLD COPTIC SHIMA, COPTIC CAPITAL LETTER OLD COPTIC SHIMA +test(0x2CDC, 0x2CDD); // COPTIC CAPITAL LETTER OLD NUBIAN SHIMA, COPTIC SMALL LETTER OLD NUBIAN SHIMA +test(0x2CDD, 0x2CDC); // COPTIC SMALL LETTER OLD NUBIAN SHIMA, COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +test(0x2CDE, 0x2CDF); // COPTIC CAPITAL LETTER OLD NUBIAN NGI, COPTIC SMALL LETTER OLD NUBIAN NGI +test(0x2CDF, 0x2CDE); // COPTIC SMALL LETTER OLD NUBIAN NGI, COPTIC CAPITAL LETTER OLD NUBIAN NGI +test(0x2CE0, 0x2CE1); // COPTIC CAPITAL LETTER OLD NUBIAN NYI, COPTIC SMALL LETTER OLD NUBIAN NYI +test(0x2CE1, 0x2CE0); // COPTIC SMALL LETTER OLD NUBIAN NYI, COPTIC CAPITAL LETTER OLD NUBIAN NYI +test(0x2CE2, 0x2CE3); // COPTIC CAPITAL LETTER OLD NUBIAN WAU, COPTIC SMALL LETTER OLD NUBIAN WAU +test(0x2CE3, 0x2CE2); // COPTIC SMALL LETTER OLD NUBIAN WAU, COPTIC CAPITAL LETTER OLD NUBIAN WAU +test(0x2CEB, 0x2CEC); // COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI, COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI +test(0x2CEC, 0x2CEB); // COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI, COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +test(0x2CED, 0x2CEE); // COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA, COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +test(0x2CEE, 0x2CED); // COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA, COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +test(0x2CF2, 0x2CF3); // COPTIC CAPITAL LETTER BOHAIRIC KHEI, COPTIC SMALL LETTER BOHAIRIC KHEI +test(0x2CF3, 0x2CF2); // COPTIC SMALL LETTER BOHAIRIC KHEI, COPTIC CAPITAL LETTER BOHAIRIC KHEI +test(0x2D00, 0x10A0); // GEORGIAN SMALL LETTER AN, GEORGIAN CAPITAL LETTER AN +test(0x2D01, 0x10A1); // GEORGIAN SMALL LETTER BAN, GEORGIAN CAPITAL LETTER BAN +test(0x2D02, 0x10A2); // GEORGIAN SMALL LETTER GAN, GEORGIAN CAPITAL LETTER GAN +test(0x2D03, 0x10A3); // GEORGIAN SMALL LETTER DON, GEORGIAN CAPITAL LETTER DON +test(0x2D04, 0x10A4); // GEORGIAN SMALL LETTER EN, GEORGIAN CAPITAL LETTER EN +test(0x2D05, 0x10A5); // GEORGIAN SMALL LETTER VIN, GEORGIAN CAPITAL LETTER VIN +test(0x2D06, 0x10A6); // GEORGIAN SMALL LETTER ZEN, GEORGIAN CAPITAL LETTER ZEN +test(0x2D07, 0x10A7); // GEORGIAN SMALL LETTER TAN, GEORGIAN CAPITAL LETTER TAN +test(0x2D08, 0x10A8); // GEORGIAN SMALL LETTER IN, GEORGIAN CAPITAL LETTER IN +test(0x2D09, 0x10A9); // GEORGIAN SMALL LETTER KAN, GEORGIAN CAPITAL LETTER KAN +test(0x2D0A, 0x10AA); // GEORGIAN SMALL LETTER LAS, GEORGIAN CAPITAL LETTER LAS +test(0x2D0B, 0x10AB); // GEORGIAN SMALL LETTER MAN, GEORGIAN CAPITAL LETTER MAN +test(0x2D0C, 0x10AC); // GEORGIAN SMALL LETTER NAR, GEORGIAN CAPITAL LETTER NAR +test(0x2D0D, 0x10AD); // GEORGIAN SMALL LETTER ON, GEORGIAN CAPITAL LETTER ON +test(0x2D0E, 0x10AE); // GEORGIAN SMALL LETTER PAR, GEORGIAN CAPITAL LETTER PAR +test(0x2D0F, 0x10AF); // GEORGIAN SMALL LETTER ZHAR, GEORGIAN CAPITAL LETTER ZHAR +test(0x2D10, 0x10B0); // GEORGIAN SMALL LETTER RAE, GEORGIAN CAPITAL LETTER RAE +test(0x2D11, 0x10B1); // GEORGIAN SMALL LETTER SAN, GEORGIAN CAPITAL LETTER SAN +test(0x2D12, 0x10B2); // GEORGIAN SMALL LETTER TAR, GEORGIAN CAPITAL LETTER TAR +test(0x2D13, 0x10B3); // GEORGIAN SMALL LETTER UN, GEORGIAN CAPITAL LETTER UN +test(0x2D14, 0x10B4); // GEORGIAN SMALL LETTER PHAR, GEORGIAN CAPITAL LETTER PHAR +test(0x2D15, 0x10B5); // GEORGIAN SMALL LETTER KHAR, GEORGIAN CAPITAL LETTER KHAR +test(0x2D16, 0x10B6); // GEORGIAN SMALL LETTER GHAN, GEORGIAN CAPITAL LETTER GHAN +test(0x2D17, 0x10B7); // GEORGIAN SMALL LETTER QAR, GEORGIAN CAPITAL LETTER QAR +test(0x2D18, 0x10B8); // GEORGIAN SMALL LETTER SHIN, GEORGIAN CAPITAL LETTER SHIN +test(0x2D19, 0x10B9); // GEORGIAN SMALL LETTER CHIN, GEORGIAN CAPITAL LETTER CHIN +test(0x2D1A, 0x10BA); // GEORGIAN SMALL LETTER CAN, GEORGIAN CAPITAL LETTER CAN +test(0x2D1B, 0x10BB); // GEORGIAN SMALL LETTER JIL, GEORGIAN CAPITAL LETTER JIL +test(0x2D1C, 0x10BC); // GEORGIAN SMALL LETTER CIL, GEORGIAN CAPITAL LETTER CIL +test(0x2D1D, 0x10BD); // GEORGIAN SMALL LETTER CHAR, GEORGIAN CAPITAL LETTER CHAR +test(0x2D1E, 0x10BE); // GEORGIAN SMALL LETTER XAN, GEORGIAN CAPITAL LETTER XAN +test(0x2D1F, 0x10BF); // GEORGIAN SMALL LETTER JHAN, GEORGIAN CAPITAL LETTER JHAN +test(0x2D20, 0x10C0); // GEORGIAN SMALL LETTER HAE, GEORGIAN CAPITAL LETTER HAE +test(0x2D21, 0x10C1); // GEORGIAN SMALL LETTER HE, GEORGIAN CAPITAL LETTER HE +test(0x2D22, 0x10C2); // GEORGIAN SMALL LETTER HIE, GEORGIAN CAPITAL LETTER HIE +test(0x2D23, 0x10C3); // GEORGIAN SMALL LETTER WE, GEORGIAN CAPITAL LETTER WE +test(0x2D24, 0x10C4); // GEORGIAN SMALL LETTER HAR, GEORGIAN CAPITAL LETTER HAR +test(0x2D25, 0x10C5); // GEORGIAN SMALL LETTER HOE, GEORGIAN CAPITAL LETTER HOE +test(0x2D27, 0x10C7); // GEORGIAN SMALL LETTER YN, GEORGIAN CAPITAL LETTER YN +test(0x2D2D, 0x10CD); // GEORGIAN SMALL LETTER AEN, GEORGIAN CAPITAL LETTER AEN +test(0xA640, 0xA641); // CYRILLIC CAPITAL LETTER ZEMLYA, CYRILLIC SMALL LETTER ZEMLYA +test(0xA641, 0xA640); // CYRILLIC SMALL LETTER ZEMLYA, CYRILLIC CAPITAL LETTER ZEMLYA +test(0xA642, 0xA643); // CYRILLIC CAPITAL LETTER DZELO, CYRILLIC SMALL LETTER DZELO +test(0xA643, 0xA642); // CYRILLIC SMALL LETTER DZELO, CYRILLIC CAPITAL LETTER DZELO +test(0xA644, 0xA645); // CYRILLIC CAPITAL LETTER REVERSED DZE, CYRILLIC SMALL LETTER REVERSED DZE +test(0xA645, 0xA644); // CYRILLIC SMALL LETTER REVERSED DZE, CYRILLIC CAPITAL LETTER REVERSED DZE +test(0xA646, 0xA647); // CYRILLIC CAPITAL LETTER IOTA, CYRILLIC SMALL LETTER IOTA +test(0xA647, 0xA646); // CYRILLIC SMALL LETTER IOTA, CYRILLIC CAPITAL LETTER IOTA +test(0xA648, 0xA649); // CYRILLIC CAPITAL LETTER DJERV, CYRILLIC SMALL LETTER DJERV +test(0xA649, 0xA648); // CYRILLIC SMALL LETTER DJERV, CYRILLIC CAPITAL LETTER DJERV +test(0xA64A, 0xA64B, 0x1C88); // CYRILLIC CAPITAL LETTER MONOGRAPH UK, CYRILLIC SMALL LETTER MONOGRAPH UK, CYRILLIC SMALL LETTER UNBLENDED UK +test(0xA64B, 0x1C88, 0xA64A); // CYRILLIC SMALL LETTER MONOGRAPH UK, CYRILLIC SMALL LETTER UNBLENDED UK, CYRILLIC CAPITAL LETTER MONOGRAPH UK +test(0xA64C, 0xA64D); // CYRILLIC CAPITAL LETTER BROAD OMEGA, CYRILLIC SMALL LETTER BROAD OMEGA +test(0xA64D, 0xA64C); // CYRILLIC SMALL LETTER BROAD OMEGA, CYRILLIC CAPITAL LETTER BROAD OMEGA +test(0xA64E, 0xA64F); // CYRILLIC CAPITAL LETTER NEUTRAL YER, CYRILLIC SMALL LETTER NEUTRAL YER +test(0xA64F, 0xA64E); // CYRILLIC SMALL LETTER NEUTRAL YER, CYRILLIC CAPITAL LETTER NEUTRAL YER +test(0xA650, 0xA651); // CYRILLIC CAPITAL LETTER YERU WITH BACK YER, CYRILLIC SMALL LETTER YERU WITH BACK YER +test(0xA651, 0xA650); // CYRILLIC SMALL LETTER YERU WITH BACK YER, CYRILLIC CAPITAL LETTER YERU WITH BACK YER +test(0xA652, 0xA653); // CYRILLIC CAPITAL LETTER IOTIFIED YAT, CYRILLIC SMALL LETTER IOTIFIED YAT +test(0xA653, 0xA652); // CYRILLIC SMALL LETTER IOTIFIED YAT, CYRILLIC CAPITAL LETTER IOTIFIED YAT +test(0xA654, 0xA655); // CYRILLIC CAPITAL LETTER REVERSED YU, CYRILLIC SMALL LETTER REVERSED YU +test(0xA655, 0xA654); // CYRILLIC SMALL LETTER REVERSED YU, CYRILLIC CAPITAL LETTER REVERSED YU +test(0xA656, 0xA657); // CYRILLIC CAPITAL LETTER IOTIFIED A, CYRILLIC SMALL LETTER IOTIFIED A +test(0xA657, 0xA656); // CYRILLIC SMALL LETTER IOTIFIED A, CYRILLIC CAPITAL LETTER IOTIFIED A +test(0xA658, 0xA659); // CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS, CYRILLIC SMALL LETTER CLOSED LITTLE YUS +test(0xA659, 0xA658); // CYRILLIC SMALL LETTER CLOSED LITTLE YUS, CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +test(0xA65A, 0xA65B); // CYRILLIC CAPITAL LETTER BLENDED YUS, CYRILLIC SMALL LETTER BLENDED YUS +test(0xA65B, 0xA65A); // CYRILLIC SMALL LETTER BLENDED YUS, CYRILLIC CAPITAL LETTER BLENDED YUS +test(0xA65C, 0xA65D); // CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS, CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS +test(0xA65D, 0xA65C); // CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS, CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +test(0xA65E, 0xA65F); // CYRILLIC CAPITAL LETTER YN, CYRILLIC SMALL LETTER YN +test(0xA65F, 0xA65E); // CYRILLIC SMALL LETTER YN, CYRILLIC CAPITAL LETTER YN +test(0xA660, 0xA661); // CYRILLIC CAPITAL LETTER REVERSED TSE, CYRILLIC SMALL LETTER REVERSED TSE +test(0xA661, 0xA660); // CYRILLIC SMALL LETTER REVERSED TSE, CYRILLIC CAPITAL LETTER REVERSED TSE +test(0xA662, 0xA663); // CYRILLIC CAPITAL LETTER SOFT DE, CYRILLIC SMALL LETTER SOFT DE +test(0xA663, 0xA662); // CYRILLIC SMALL LETTER SOFT DE, CYRILLIC CAPITAL LETTER SOFT DE +test(0xA664, 0xA665); // CYRILLIC CAPITAL LETTER SOFT EL, CYRILLIC SMALL LETTER SOFT EL +test(0xA665, 0xA664); // CYRILLIC SMALL LETTER SOFT EL, CYRILLIC CAPITAL LETTER SOFT EL +test(0xA666, 0xA667); // CYRILLIC CAPITAL LETTER SOFT EM, CYRILLIC SMALL LETTER SOFT EM +test(0xA667, 0xA666); // CYRILLIC SMALL LETTER SOFT EM, CYRILLIC CAPITAL LETTER SOFT EM +test(0xA668, 0xA669); // CYRILLIC CAPITAL LETTER MONOCULAR O, CYRILLIC SMALL LETTER MONOCULAR O +test(0xA669, 0xA668); // CYRILLIC SMALL LETTER MONOCULAR O, CYRILLIC CAPITAL LETTER MONOCULAR O +test(0xA66A, 0xA66B); // CYRILLIC CAPITAL LETTER BINOCULAR O, CYRILLIC SMALL LETTER BINOCULAR O +test(0xA66B, 0xA66A); // CYRILLIC SMALL LETTER BINOCULAR O, CYRILLIC CAPITAL LETTER BINOCULAR O +test(0xA66C, 0xA66D); // CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O, CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +test(0xA66D, 0xA66C); // CYRILLIC SMALL LETTER DOUBLE MONOCULAR O, CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +test(0xA680, 0xA681); // CYRILLIC CAPITAL LETTER DWE, CYRILLIC SMALL LETTER DWE +test(0xA681, 0xA680); // CYRILLIC SMALL LETTER DWE, CYRILLIC CAPITAL LETTER DWE +test(0xA682, 0xA683); // CYRILLIC CAPITAL LETTER DZWE, CYRILLIC SMALL LETTER DZWE +test(0xA683, 0xA682); // CYRILLIC SMALL LETTER DZWE, CYRILLIC CAPITAL LETTER DZWE +test(0xA684, 0xA685); // CYRILLIC CAPITAL LETTER ZHWE, CYRILLIC SMALL LETTER ZHWE +test(0xA685, 0xA684); // CYRILLIC SMALL LETTER ZHWE, CYRILLIC CAPITAL LETTER ZHWE +test(0xA686, 0xA687); // CYRILLIC CAPITAL LETTER CCHE, CYRILLIC SMALL LETTER CCHE +test(0xA687, 0xA686); // CYRILLIC SMALL LETTER CCHE, CYRILLIC CAPITAL LETTER CCHE +test(0xA688, 0xA689); // CYRILLIC CAPITAL LETTER DZZE, CYRILLIC SMALL LETTER DZZE +test(0xA689, 0xA688); // CYRILLIC SMALL LETTER DZZE, CYRILLIC CAPITAL LETTER DZZE +test(0xA68A, 0xA68B); // CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK, CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK +test(0xA68B, 0xA68A); // CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK, CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +test(0xA68C, 0xA68D); // CYRILLIC CAPITAL LETTER TWE, CYRILLIC SMALL LETTER TWE +test(0xA68D, 0xA68C); // CYRILLIC SMALL LETTER TWE, CYRILLIC CAPITAL LETTER TWE +test(0xA68E, 0xA68F); // CYRILLIC CAPITAL LETTER TSWE, CYRILLIC SMALL LETTER TSWE +test(0xA68F, 0xA68E); // CYRILLIC SMALL LETTER TSWE, CYRILLIC CAPITAL LETTER TSWE +test(0xA690, 0xA691); // CYRILLIC CAPITAL LETTER TSSE, CYRILLIC SMALL LETTER TSSE +test(0xA691, 0xA690); // CYRILLIC SMALL LETTER TSSE, CYRILLIC CAPITAL LETTER TSSE +test(0xA692, 0xA693); // CYRILLIC CAPITAL LETTER TCHE, CYRILLIC SMALL LETTER TCHE +test(0xA693, 0xA692); // CYRILLIC SMALL LETTER TCHE, CYRILLIC CAPITAL LETTER TCHE +test(0xA694, 0xA695); // CYRILLIC CAPITAL LETTER HWE, CYRILLIC SMALL LETTER HWE +test(0xA695, 0xA694); // CYRILLIC SMALL LETTER HWE, CYRILLIC CAPITAL LETTER HWE +test(0xA696, 0xA697); // CYRILLIC CAPITAL LETTER SHWE, CYRILLIC SMALL LETTER SHWE +test(0xA697, 0xA696); // CYRILLIC SMALL LETTER SHWE, CYRILLIC CAPITAL LETTER SHWE +test(0xA698, 0xA699); // CYRILLIC CAPITAL LETTER DOUBLE O, CYRILLIC SMALL LETTER DOUBLE O +test(0xA699, 0xA698); // CYRILLIC SMALL LETTER DOUBLE O, CYRILLIC CAPITAL LETTER DOUBLE O +test(0xA69A, 0xA69B); // CYRILLIC CAPITAL LETTER CROSSED O, CYRILLIC SMALL LETTER CROSSED O +test(0xA69B, 0xA69A); // CYRILLIC SMALL LETTER CROSSED O, CYRILLIC CAPITAL LETTER CROSSED O +test(0xA722, 0xA723); // LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF, LATIN SMALL LETTER EGYPTOLOGICAL ALEF +test(0xA723, 0xA722); // LATIN SMALL LETTER EGYPTOLOGICAL ALEF, LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +test(0xA724, 0xA725); // LATIN CAPITAL LETTER EGYPTOLOGICAL AIN, LATIN SMALL LETTER EGYPTOLOGICAL AIN +test(0xA725, 0xA724); // LATIN SMALL LETTER EGYPTOLOGICAL AIN, LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +test(0xA726, 0xA727); // LATIN CAPITAL LETTER HENG, LATIN SMALL LETTER HENG +test(0xA727, 0xA726); // LATIN SMALL LETTER HENG, LATIN CAPITAL LETTER HENG +test(0xA728, 0xA729); // LATIN CAPITAL LETTER TZ, LATIN SMALL LETTER TZ +test(0xA729, 0xA728); // LATIN SMALL LETTER TZ, LATIN CAPITAL LETTER TZ +test(0xA72A, 0xA72B); // LATIN CAPITAL LETTER TRESILLO, LATIN SMALL LETTER TRESILLO +test(0xA72B, 0xA72A); // LATIN SMALL LETTER TRESILLO, LATIN CAPITAL LETTER TRESILLO +test(0xA72C, 0xA72D); // LATIN CAPITAL LETTER CUATRILLO, LATIN SMALL LETTER CUATRILLO +test(0xA72D, 0xA72C); // LATIN SMALL LETTER CUATRILLO, LATIN CAPITAL LETTER CUATRILLO +test(0xA72E, 0xA72F); // LATIN CAPITAL LETTER CUATRILLO WITH COMMA, LATIN SMALL LETTER CUATRILLO WITH COMMA +test(0xA72F, 0xA72E); // LATIN SMALL LETTER CUATRILLO WITH COMMA, LATIN CAPITAL LETTER CUATRILLO WITH COMMA +test(0xA732, 0xA733); // LATIN CAPITAL LETTER AA, LATIN SMALL LETTER AA +test(0xA733, 0xA732); // LATIN SMALL LETTER AA, LATIN CAPITAL LETTER AA +test(0xA734, 0xA735); // LATIN CAPITAL LETTER AO, LATIN SMALL LETTER AO +test(0xA735, 0xA734); // LATIN SMALL LETTER AO, LATIN CAPITAL LETTER AO +test(0xA736, 0xA737); // LATIN CAPITAL LETTER AU, LATIN SMALL LETTER AU +test(0xA737, 0xA736); // LATIN SMALL LETTER AU, LATIN CAPITAL LETTER AU +test(0xA738, 0xA739); // LATIN CAPITAL LETTER AV, LATIN SMALL LETTER AV +test(0xA739, 0xA738); // LATIN SMALL LETTER AV, LATIN CAPITAL LETTER AV +test(0xA73A, 0xA73B); // LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR, LATIN SMALL LETTER AV WITH HORIZONTAL BAR +test(0xA73B, 0xA73A); // LATIN SMALL LETTER AV WITH HORIZONTAL BAR, LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +test(0xA73C, 0xA73D); // LATIN CAPITAL LETTER AY, LATIN SMALL LETTER AY +test(0xA73D, 0xA73C); // LATIN SMALL LETTER AY, LATIN CAPITAL LETTER AY +test(0xA73E, 0xA73F); // LATIN CAPITAL LETTER REVERSED C WITH DOT, LATIN SMALL LETTER REVERSED C WITH DOT +test(0xA73F, 0xA73E); // LATIN SMALL LETTER REVERSED C WITH DOT, LATIN CAPITAL LETTER REVERSED C WITH DOT +test(0xA740, 0xA741); // LATIN CAPITAL LETTER K WITH STROKE, LATIN SMALL LETTER K WITH STROKE +test(0xA741, 0xA740); // LATIN SMALL LETTER K WITH STROKE, LATIN CAPITAL LETTER K WITH STROKE +test(0xA742, 0xA743); // LATIN CAPITAL LETTER K WITH DIAGONAL STROKE, LATIN SMALL LETTER K WITH DIAGONAL STROKE +test(0xA743, 0xA742); // LATIN SMALL LETTER K WITH DIAGONAL STROKE, LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +test(0xA744, 0xA745); // LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE, LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE +test(0xA745, 0xA744); // LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE, LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +test(0xA746, 0xA747); // LATIN CAPITAL LETTER BROKEN L, LATIN SMALL LETTER BROKEN L +test(0xA747, 0xA746); // LATIN SMALL LETTER BROKEN L, LATIN CAPITAL LETTER BROKEN L +test(0xA748, 0xA749); // LATIN CAPITAL LETTER L WITH HIGH STROKE, LATIN SMALL LETTER L WITH HIGH STROKE +test(0xA749, 0xA748); // LATIN SMALL LETTER L WITH HIGH STROKE, LATIN CAPITAL LETTER L WITH HIGH STROKE +test(0xA74A, 0xA74B); // LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY, LATIN SMALL LETTER O WITH LONG STROKE OVERLAY +test(0xA74B, 0xA74A); // LATIN SMALL LETTER O WITH LONG STROKE OVERLAY, LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +test(0xA74C, 0xA74D); // LATIN CAPITAL LETTER O WITH LOOP, LATIN SMALL LETTER O WITH LOOP +test(0xA74D, 0xA74C); // LATIN SMALL LETTER O WITH LOOP, LATIN CAPITAL LETTER O WITH LOOP +test(0xA74E, 0xA74F); // LATIN CAPITAL LETTER OO, LATIN SMALL LETTER OO +test(0xA74F, 0xA74E); // LATIN SMALL LETTER OO, LATIN CAPITAL LETTER OO +test(0xA750, 0xA751); // LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER, LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER +test(0xA751, 0xA750); // LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER, LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +test(0xA752, 0xA753); // LATIN CAPITAL LETTER P WITH FLOURISH, LATIN SMALL LETTER P WITH FLOURISH +test(0xA753, 0xA752); // LATIN SMALL LETTER P WITH FLOURISH, LATIN CAPITAL LETTER P WITH FLOURISH +test(0xA754, 0xA755); // LATIN CAPITAL LETTER P WITH SQUIRREL TAIL, LATIN SMALL LETTER P WITH SQUIRREL TAIL +test(0xA755, 0xA754); // LATIN SMALL LETTER P WITH SQUIRREL TAIL, LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +test(0xA756, 0xA757); // LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER, LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER +test(0xA757, 0xA756); // LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER, LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +test(0xA758, 0xA759); // LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE, LATIN SMALL LETTER Q WITH DIAGONAL STROKE +test(0xA759, 0xA758); // LATIN SMALL LETTER Q WITH DIAGONAL STROKE, LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +test(0xA75A, 0xA75B); // LATIN CAPITAL LETTER R ROTUNDA, LATIN SMALL LETTER R ROTUNDA +test(0xA75B, 0xA75A); // LATIN SMALL LETTER R ROTUNDA, LATIN CAPITAL LETTER R ROTUNDA +test(0xA75C, 0xA75D); // LATIN CAPITAL LETTER RUM ROTUNDA, LATIN SMALL LETTER RUM ROTUNDA +test(0xA75D, 0xA75C); // LATIN SMALL LETTER RUM ROTUNDA, LATIN CAPITAL LETTER RUM ROTUNDA +test(0xA75E, 0xA75F); // LATIN CAPITAL LETTER V WITH DIAGONAL STROKE, LATIN SMALL LETTER V WITH DIAGONAL STROKE +test(0xA75F, 0xA75E); // LATIN SMALL LETTER V WITH DIAGONAL STROKE, LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +test(0xA760, 0xA761); // LATIN CAPITAL LETTER VY, LATIN SMALL LETTER VY +test(0xA761, 0xA760); // LATIN SMALL LETTER VY, LATIN CAPITAL LETTER VY +test(0xA762, 0xA763); // LATIN CAPITAL LETTER VISIGOTHIC Z, LATIN SMALL LETTER VISIGOTHIC Z +test(0xA763, 0xA762); // LATIN SMALL LETTER VISIGOTHIC Z, LATIN CAPITAL LETTER VISIGOTHIC Z +test(0xA764, 0xA765); // LATIN CAPITAL LETTER THORN WITH STROKE, LATIN SMALL LETTER THORN WITH STROKE +test(0xA765, 0xA764); // LATIN SMALL LETTER THORN WITH STROKE, LATIN CAPITAL LETTER THORN WITH STROKE +test(0xA766, 0xA767); // LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER, LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER +test(0xA767, 0xA766); // LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER, LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +test(0xA768, 0xA769); // LATIN CAPITAL LETTER VEND, LATIN SMALL LETTER VEND +test(0xA769, 0xA768); // LATIN SMALL LETTER VEND, LATIN CAPITAL LETTER VEND +test(0xA76A, 0xA76B); // LATIN CAPITAL LETTER ET, LATIN SMALL LETTER ET +test(0xA76B, 0xA76A); // LATIN SMALL LETTER ET, LATIN CAPITAL LETTER ET +test(0xA76C, 0xA76D); // LATIN CAPITAL LETTER IS, LATIN SMALL LETTER IS +test(0xA76D, 0xA76C); // LATIN SMALL LETTER IS, LATIN CAPITAL LETTER IS +test(0xA76E, 0xA76F); // LATIN CAPITAL LETTER CON, LATIN SMALL LETTER CON +test(0xA76F, 0xA76E); // LATIN SMALL LETTER CON, LATIN CAPITAL LETTER CON +test(0xA779, 0xA77A); // LATIN CAPITAL LETTER INSULAR D, LATIN SMALL LETTER INSULAR D +test(0xA77A, 0xA779); // LATIN SMALL LETTER INSULAR D, LATIN CAPITAL LETTER INSULAR D +test(0xA77B, 0xA77C); // LATIN CAPITAL LETTER INSULAR F, LATIN SMALL LETTER INSULAR F +test(0xA77C, 0xA77B); // LATIN SMALL LETTER INSULAR F, LATIN CAPITAL LETTER INSULAR F +test(0xA77D, 0x1D79); // LATIN CAPITAL LETTER INSULAR G, LATIN SMALL LETTER INSULAR G +test(0xA77E, 0xA77F); // LATIN CAPITAL LETTER TURNED INSULAR G, LATIN SMALL LETTER TURNED INSULAR G +test(0xA77F, 0xA77E); // LATIN SMALL LETTER TURNED INSULAR G, LATIN CAPITAL LETTER TURNED INSULAR G +test(0xA780, 0xA781); // LATIN CAPITAL LETTER TURNED L, LATIN SMALL LETTER TURNED L +test(0xA781, 0xA780); // LATIN SMALL LETTER TURNED L, LATIN CAPITAL LETTER TURNED L +test(0xA782, 0xA783); // LATIN CAPITAL LETTER INSULAR R, LATIN SMALL LETTER INSULAR R +test(0xA783, 0xA782); // LATIN SMALL LETTER INSULAR R, LATIN CAPITAL LETTER INSULAR R +test(0xA784, 0xA785); // LATIN CAPITAL LETTER INSULAR S, LATIN SMALL LETTER INSULAR S +test(0xA785, 0xA784); // LATIN SMALL LETTER INSULAR S, LATIN CAPITAL LETTER INSULAR S +test(0xA786, 0xA787); // LATIN CAPITAL LETTER INSULAR T, LATIN SMALL LETTER INSULAR T +test(0xA787, 0xA786); // LATIN SMALL LETTER INSULAR T, LATIN CAPITAL LETTER INSULAR T +test(0xA78B, 0xA78C); // LATIN CAPITAL LETTER SALTILLO, LATIN SMALL LETTER SALTILLO +test(0xA78C, 0xA78B); // LATIN SMALL LETTER SALTILLO, LATIN CAPITAL LETTER SALTILLO +test(0xA78D, 0x0265); // LATIN CAPITAL LETTER TURNED H, LATIN SMALL LETTER TURNED H +test(0xA790, 0xA791); // LATIN CAPITAL LETTER N WITH DESCENDER, LATIN SMALL LETTER N WITH DESCENDER +test(0xA791, 0xA790); // LATIN SMALL LETTER N WITH DESCENDER, LATIN CAPITAL LETTER N WITH DESCENDER +test(0xA792, 0xA793); // LATIN CAPITAL LETTER C WITH BAR, LATIN SMALL LETTER C WITH BAR +test(0xA793, 0xA792); // LATIN SMALL LETTER C WITH BAR, LATIN CAPITAL LETTER C WITH BAR +test(0xA794, 0xA7C4); // LATIN SMALL LETTER C WITH PALATAL HOOK, LATIN CAPITAL LETTER C WITH PALATAL HOOK +test(0xA796, 0xA797); // LATIN CAPITAL LETTER B WITH FLOURISH, LATIN SMALL LETTER B WITH FLOURISH +test(0xA797, 0xA796); // LATIN SMALL LETTER B WITH FLOURISH, LATIN CAPITAL LETTER B WITH FLOURISH +test(0xA798, 0xA799); // LATIN CAPITAL LETTER F WITH STROKE, LATIN SMALL LETTER F WITH STROKE +test(0xA799, 0xA798); // LATIN SMALL LETTER F WITH STROKE, LATIN CAPITAL LETTER F WITH STROKE +test(0xA79A, 0xA79B); // LATIN CAPITAL LETTER VOLAPUK AE, LATIN SMALL LETTER VOLAPUK AE +test(0xA79B, 0xA79A); // LATIN SMALL LETTER VOLAPUK AE, LATIN CAPITAL LETTER VOLAPUK AE +test(0xA79C, 0xA79D); // LATIN CAPITAL LETTER VOLAPUK OE, LATIN SMALL LETTER VOLAPUK OE +test(0xA79D, 0xA79C); // LATIN SMALL LETTER VOLAPUK OE, LATIN CAPITAL LETTER VOLAPUK OE +test(0xA79E, 0xA79F); // LATIN CAPITAL LETTER VOLAPUK UE, LATIN SMALL LETTER VOLAPUK UE +test(0xA79F, 0xA79E); // LATIN SMALL LETTER VOLAPUK UE, LATIN CAPITAL LETTER VOLAPUK UE +test(0xA7A0, 0xA7A1); // LATIN CAPITAL LETTER G WITH OBLIQUE STROKE, LATIN SMALL LETTER G WITH OBLIQUE STROKE +test(0xA7A1, 0xA7A0); // LATIN SMALL LETTER G WITH OBLIQUE STROKE, LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +test(0xA7A2, 0xA7A3); // LATIN CAPITAL LETTER K WITH OBLIQUE STROKE, LATIN SMALL LETTER K WITH OBLIQUE STROKE +test(0xA7A3, 0xA7A2); // LATIN SMALL LETTER K WITH OBLIQUE STROKE, LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +test(0xA7A4, 0xA7A5); // LATIN CAPITAL LETTER N WITH OBLIQUE STROKE, LATIN SMALL LETTER N WITH OBLIQUE STROKE +test(0xA7A5, 0xA7A4); // LATIN SMALL LETTER N WITH OBLIQUE STROKE, LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +test(0xA7A6, 0xA7A7); // LATIN CAPITAL LETTER R WITH OBLIQUE STROKE, LATIN SMALL LETTER R WITH OBLIQUE STROKE +test(0xA7A7, 0xA7A6); // LATIN SMALL LETTER R WITH OBLIQUE STROKE, LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +test(0xA7A8, 0xA7A9); // LATIN CAPITAL LETTER S WITH OBLIQUE STROKE, LATIN SMALL LETTER S WITH OBLIQUE STROKE +test(0xA7A9, 0xA7A8); // LATIN SMALL LETTER S WITH OBLIQUE STROKE, LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +test(0xA7AA, 0x0266); // LATIN CAPITAL LETTER H WITH HOOK, LATIN SMALL LETTER H WITH HOOK (LATIN SMALL LETTER H HOOK) +test(0xA7AB, 0x025C); // LATIN CAPITAL LETTER REVERSED OPEN E, LATIN SMALL LETTER REVERSED OPEN E (LATIN SMALL LETTER REVERSED EPSILON) +test(0xA7AC, 0x0261); // LATIN CAPITAL LETTER SCRIPT G, LATIN SMALL LETTER SCRIPT G +test(0xA7AD, 0x026C); // LATIN CAPITAL LETTER L WITH BELT, LATIN SMALL LETTER L WITH BELT (LATIN SMALL LETTER L BELT) +test(0xA7AE, 0x026A); // LATIN CAPITAL LETTER SMALL CAPITAL I, LATIN LETTER SMALL CAPITAL I +test(0xA7B0, 0x029E); // LATIN CAPITAL LETTER TURNED K, LATIN SMALL LETTER TURNED K +test(0xA7B1, 0x0287); // LATIN CAPITAL LETTER TURNED T, LATIN SMALL LETTER TURNED T +test(0xA7B2, 0x029D); // LATIN CAPITAL LETTER J WITH CROSSED-TAIL, LATIN SMALL LETTER J WITH CROSSED-TAIL (LATIN SMALL LETTER CROSSED-TAIL J) +test(0xA7B3, 0xAB53); // LATIN CAPITAL LETTER CHI, LATIN SMALL LETTER CHI +test(0xA7B4, 0xA7B5); // LATIN CAPITAL LETTER BETA, LATIN SMALL LETTER BETA +test(0xA7B5, 0xA7B4); // LATIN SMALL LETTER BETA, LATIN CAPITAL LETTER BETA +test(0xA7B6, 0xA7B7); // LATIN CAPITAL LETTER OMEGA, LATIN SMALL LETTER OMEGA +test(0xA7B7, 0xA7B6); // LATIN SMALL LETTER OMEGA, LATIN CAPITAL LETTER OMEGA +test(0xA7B8, 0xA7B9); // LATIN CAPITAL LETTER U WITH STROKE, LATIN SMALL LETTER U WITH STROKE +test(0xA7B9, 0xA7B8); // LATIN SMALL LETTER U WITH STROKE, LATIN CAPITAL LETTER U WITH STROKE +test(0xA7BA, 0xA7BB); // LATIN CAPITAL LETTER GLOTTAL A, LATIN SMALL LETTER GLOTTAL A +test(0xA7BB, 0xA7BA); // LATIN SMALL LETTER GLOTTAL A, LATIN CAPITAL LETTER GLOTTAL A +test(0xA7BC, 0xA7BD); // LATIN CAPITAL LETTER GLOTTAL I, LATIN SMALL LETTER GLOTTAL I +test(0xA7BD, 0xA7BC); // LATIN SMALL LETTER GLOTTAL I, LATIN CAPITAL LETTER GLOTTAL I +test(0xA7BE, 0xA7BF); // LATIN CAPITAL LETTER GLOTTAL U, LATIN SMALL LETTER GLOTTAL U +test(0xA7BF, 0xA7BE); // LATIN SMALL LETTER GLOTTAL U, LATIN CAPITAL LETTER GLOTTAL U +test(0xA7C0, 0xA7C1); // LATIN CAPITAL LETTER OLD POLISH O, LATIN SMALL LETTER OLD POLISH O +test(0xA7C1, 0xA7C0); // LATIN SMALL LETTER OLD POLISH O, LATIN CAPITAL LETTER OLD POLISH O +test(0xA7C2, 0xA7C3); // LATIN CAPITAL LETTER ANGLICANA W, LATIN SMALL LETTER ANGLICANA W +test(0xA7C3, 0xA7C2); // LATIN SMALL LETTER ANGLICANA W, LATIN CAPITAL LETTER ANGLICANA W +test(0xA7C4, 0xA794); // LATIN CAPITAL LETTER C WITH PALATAL HOOK, LATIN SMALL LETTER C WITH PALATAL HOOK +test(0xA7C5, 0x0282); // LATIN CAPITAL LETTER S WITH HOOK, LATIN SMALL LETTER S WITH HOOK (LATIN SMALL LETTER S HOOK) +test(0xA7C6, 0x1D8E); // LATIN CAPITAL LETTER Z WITH PALATAL HOOK, LATIN SMALL LETTER Z WITH PALATAL HOOK +test(0xA7C7, 0xA7C8); // LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY, LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY +test(0xA7C8, 0xA7C7); // LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY, LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY +test(0xA7C9, 0xA7CA); // LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY, LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +test(0xA7CA, 0xA7C9); // LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY, LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +test(0xA7D0, 0xA7D1); // LATIN CAPITAL LETTER CLOSED INSULAR G, LATIN SMALL LETTER CLOSED INSULAR G +test(0xA7D1, 0xA7D0); // LATIN SMALL LETTER CLOSED INSULAR G, LATIN CAPITAL LETTER CLOSED INSULAR G +test(0xA7D6, 0xA7D7); // LATIN CAPITAL LETTER MIDDLE SCOTS S, LATIN SMALL LETTER MIDDLE SCOTS S +test(0xA7D7, 0xA7D6); // LATIN SMALL LETTER MIDDLE SCOTS S, LATIN CAPITAL LETTER MIDDLE SCOTS S +test(0xA7D8, 0xA7D9); // LATIN CAPITAL LETTER SIGMOID S, LATIN SMALL LETTER SIGMOID S +test(0xA7D9, 0xA7D8); // LATIN SMALL LETTER SIGMOID S, LATIN CAPITAL LETTER SIGMOID S +test(0xA7F5, 0xA7F6); // LATIN CAPITAL LETTER REVERSED HALF H, LATIN SMALL LETTER REVERSED HALF H +test(0xA7F6, 0xA7F5); // LATIN SMALL LETTER REVERSED HALF H, LATIN CAPITAL LETTER REVERSED HALF H +test(0xAB53, 0xA7B3); // LATIN SMALL LETTER CHI, LATIN CAPITAL LETTER CHI +test(0xAB70, 0x13A0); // CHEROKEE SMALL LETTER A, CHEROKEE LETTER A +test(0xAB71, 0x13A1); // CHEROKEE SMALL LETTER E, CHEROKEE LETTER E +test(0xAB72, 0x13A2); // CHEROKEE SMALL LETTER I, CHEROKEE LETTER I +test(0xAB73, 0x13A3); // CHEROKEE SMALL LETTER O, CHEROKEE LETTER O +test(0xAB74, 0x13A4); // CHEROKEE SMALL LETTER U, CHEROKEE LETTER U +test(0xAB75, 0x13A5); // CHEROKEE SMALL LETTER V, CHEROKEE LETTER V +test(0xAB76, 0x13A6); // CHEROKEE SMALL LETTER GA, CHEROKEE LETTER GA +test(0xAB77, 0x13A7); // CHEROKEE SMALL LETTER KA, CHEROKEE LETTER KA +test(0xAB78, 0x13A8); // CHEROKEE SMALL LETTER GE, CHEROKEE LETTER GE +test(0xAB79, 0x13A9); // CHEROKEE SMALL LETTER GI, CHEROKEE LETTER GI +test(0xAB7A, 0x13AA); // CHEROKEE SMALL LETTER GO, CHEROKEE LETTER GO +test(0xAB7B, 0x13AB); // CHEROKEE SMALL LETTER GU, CHEROKEE LETTER GU +test(0xAB7C, 0x13AC); // CHEROKEE SMALL LETTER GV, CHEROKEE LETTER GV +test(0xAB7D, 0x13AD); // CHEROKEE SMALL LETTER HA, CHEROKEE LETTER HA +test(0xAB7E, 0x13AE); // CHEROKEE SMALL LETTER HE, CHEROKEE LETTER HE +test(0xAB7F, 0x13AF); // CHEROKEE SMALL LETTER HI, CHEROKEE LETTER HI +test(0xAB80, 0x13B0); // CHEROKEE SMALL LETTER HO, CHEROKEE LETTER HO +test(0xAB81, 0x13B1); // CHEROKEE SMALL LETTER HU, CHEROKEE LETTER HU +test(0xAB82, 0x13B2); // CHEROKEE SMALL LETTER HV, CHEROKEE LETTER HV +test(0xAB83, 0x13B3); // CHEROKEE SMALL LETTER LA, CHEROKEE LETTER LA +test(0xAB84, 0x13B4); // CHEROKEE SMALL LETTER LE, CHEROKEE LETTER LE +test(0xAB85, 0x13B5); // CHEROKEE SMALL LETTER LI, CHEROKEE LETTER LI +test(0xAB86, 0x13B6); // CHEROKEE SMALL LETTER LO, CHEROKEE LETTER LO +test(0xAB87, 0x13B7); // CHEROKEE SMALL LETTER LU, CHEROKEE LETTER LU +test(0xAB88, 0x13B8); // CHEROKEE SMALL LETTER LV, CHEROKEE LETTER LV +test(0xAB89, 0x13B9); // CHEROKEE SMALL LETTER MA, CHEROKEE LETTER MA +test(0xAB8A, 0x13BA); // CHEROKEE SMALL LETTER ME, CHEROKEE LETTER ME +test(0xAB8B, 0x13BB); // CHEROKEE SMALL LETTER MI, CHEROKEE LETTER MI +test(0xAB8C, 0x13BC); // CHEROKEE SMALL LETTER MO, CHEROKEE LETTER MO +test(0xAB8D, 0x13BD); // CHEROKEE SMALL LETTER MU, CHEROKEE LETTER MU +test(0xAB8E, 0x13BE); // CHEROKEE SMALL LETTER NA, CHEROKEE LETTER NA +test(0xAB8F, 0x13BF); // CHEROKEE SMALL LETTER HNA, CHEROKEE LETTER HNA +test(0xAB90, 0x13C0); // CHEROKEE SMALL LETTER NAH, CHEROKEE LETTER NAH +test(0xAB91, 0x13C1); // CHEROKEE SMALL LETTER NE, CHEROKEE LETTER NE +test(0xAB92, 0x13C2); // CHEROKEE SMALL LETTER NI, CHEROKEE LETTER NI +test(0xAB93, 0x13C3); // CHEROKEE SMALL LETTER NO, CHEROKEE LETTER NO +test(0xAB94, 0x13C4); // CHEROKEE SMALL LETTER NU, CHEROKEE LETTER NU +test(0xAB95, 0x13C5); // CHEROKEE SMALL LETTER NV, CHEROKEE LETTER NV +test(0xAB96, 0x13C6); // CHEROKEE SMALL LETTER QUA, CHEROKEE LETTER QUA +test(0xAB97, 0x13C7); // CHEROKEE SMALL LETTER QUE, CHEROKEE LETTER QUE +test(0xAB98, 0x13C8); // CHEROKEE SMALL LETTER QUI, CHEROKEE LETTER QUI +test(0xAB99, 0x13C9); // CHEROKEE SMALL LETTER QUO, CHEROKEE LETTER QUO +test(0xAB9A, 0x13CA); // CHEROKEE SMALL LETTER QUU, CHEROKEE LETTER QUU +test(0xAB9B, 0x13CB); // CHEROKEE SMALL LETTER QUV, CHEROKEE LETTER QUV +test(0xAB9C, 0x13CC); // CHEROKEE SMALL LETTER SA, CHEROKEE LETTER SA +test(0xAB9D, 0x13CD); // CHEROKEE SMALL LETTER S, CHEROKEE LETTER S +test(0xAB9E, 0x13CE); // CHEROKEE SMALL LETTER SE, CHEROKEE LETTER SE +test(0xAB9F, 0x13CF); // CHEROKEE SMALL LETTER SI, CHEROKEE LETTER SI +test(0xABA0, 0x13D0); // CHEROKEE SMALL LETTER SO, CHEROKEE LETTER SO +test(0xABA1, 0x13D1); // CHEROKEE SMALL LETTER SU, CHEROKEE LETTER SU +test(0xABA2, 0x13D2); // CHEROKEE SMALL LETTER SV, CHEROKEE LETTER SV +test(0xABA3, 0x13D3); // CHEROKEE SMALL LETTER DA, CHEROKEE LETTER DA +test(0xABA4, 0x13D4); // CHEROKEE SMALL LETTER TA, CHEROKEE LETTER TA +test(0xABA5, 0x13D5); // CHEROKEE SMALL LETTER DE, CHEROKEE LETTER DE +test(0xABA6, 0x13D6); // CHEROKEE SMALL LETTER TE, CHEROKEE LETTER TE +test(0xABA7, 0x13D7); // CHEROKEE SMALL LETTER DI, CHEROKEE LETTER DI +test(0xABA8, 0x13D8); // CHEROKEE SMALL LETTER TI, CHEROKEE LETTER TI +test(0xABA9, 0x13D9); // CHEROKEE SMALL LETTER DO, CHEROKEE LETTER DO +test(0xABAA, 0x13DA); // CHEROKEE SMALL LETTER DU, CHEROKEE LETTER DU +test(0xABAB, 0x13DB); // CHEROKEE SMALL LETTER DV, CHEROKEE LETTER DV +test(0xABAC, 0x13DC); // CHEROKEE SMALL LETTER DLA, CHEROKEE LETTER DLA +test(0xABAD, 0x13DD); // CHEROKEE SMALL LETTER TLA, CHEROKEE LETTER TLA +test(0xABAE, 0x13DE); // CHEROKEE SMALL LETTER TLE, CHEROKEE LETTER TLE +test(0xABAF, 0x13DF); // CHEROKEE SMALL LETTER TLI, CHEROKEE LETTER TLI +test(0xABB0, 0x13E0); // CHEROKEE SMALL LETTER TLO, CHEROKEE LETTER TLO +test(0xABB1, 0x13E1); // CHEROKEE SMALL LETTER TLU, CHEROKEE LETTER TLU +test(0xABB2, 0x13E2); // CHEROKEE SMALL LETTER TLV, CHEROKEE LETTER TLV +test(0xABB3, 0x13E3); // CHEROKEE SMALL LETTER TSA, CHEROKEE LETTER TSA +test(0xABB4, 0x13E4); // CHEROKEE SMALL LETTER TSE, CHEROKEE LETTER TSE +test(0xABB5, 0x13E5); // CHEROKEE SMALL LETTER TSI, CHEROKEE LETTER TSI +test(0xABB6, 0x13E6); // CHEROKEE SMALL LETTER TSO, CHEROKEE LETTER TSO +test(0xABB7, 0x13E7); // CHEROKEE SMALL LETTER TSU, CHEROKEE LETTER TSU +test(0xABB8, 0x13E8); // CHEROKEE SMALL LETTER TSV, CHEROKEE LETTER TSV +test(0xABB9, 0x13E9); // CHEROKEE SMALL LETTER WA, CHEROKEE LETTER WA +test(0xABBA, 0x13EA); // CHEROKEE SMALL LETTER WE, CHEROKEE LETTER WE +test(0xABBB, 0x13EB); // CHEROKEE SMALL LETTER WI, CHEROKEE LETTER WI +test(0xABBC, 0x13EC); // CHEROKEE SMALL LETTER WO, CHEROKEE LETTER WO +test(0xABBD, 0x13ED); // CHEROKEE SMALL LETTER WU, CHEROKEE LETTER WU +test(0xABBE, 0x13EE); // CHEROKEE SMALL LETTER WV, CHEROKEE LETTER WV +test(0xABBF, 0x13EF); // CHEROKEE SMALL LETTER YA, CHEROKEE LETTER YA +test(0xFF21, 0xFF41); // FULLWIDTH LATIN CAPITAL LETTER A, FULLWIDTH LATIN SMALL LETTER A +test(0xFF22, 0xFF42); // FULLWIDTH LATIN CAPITAL LETTER B, FULLWIDTH LATIN SMALL LETTER B +test(0xFF23, 0xFF43); // FULLWIDTH LATIN CAPITAL LETTER C, FULLWIDTH LATIN SMALL LETTER C +test(0xFF24, 0xFF44); // FULLWIDTH LATIN CAPITAL LETTER D, FULLWIDTH LATIN SMALL LETTER D +test(0xFF25, 0xFF45); // FULLWIDTH LATIN CAPITAL LETTER E, FULLWIDTH LATIN SMALL LETTER E +test(0xFF26, 0xFF46); // FULLWIDTH LATIN CAPITAL LETTER F, FULLWIDTH LATIN SMALL LETTER F +test(0xFF27, 0xFF47); // FULLWIDTH LATIN CAPITAL LETTER G, FULLWIDTH LATIN SMALL LETTER G +test(0xFF28, 0xFF48); // FULLWIDTH LATIN CAPITAL LETTER H, FULLWIDTH LATIN SMALL LETTER H +test(0xFF29, 0xFF49); // FULLWIDTH LATIN CAPITAL LETTER I, FULLWIDTH LATIN SMALL LETTER I +test(0xFF2A, 0xFF4A); // FULLWIDTH LATIN CAPITAL LETTER J, FULLWIDTH LATIN SMALL LETTER J +test(0xFF2B, 0xFF4B); // FULLWIDTH LATIN CAPITAL LETTER K, FULLWIDTH LATIN SMALL LETTER K +test(0xFF2C, 0xFF4C); // FULLWIDTH LATIN CAPITAL LETTER L, FULLWIDTH LATIN SMALL LETTER L +test(0xFF2D, 0xFF4D); // FULLWIDTH LATIN CAPITAL LETTER M, FULLWIDTH LATIN SMALL LETTER M +test(0xFF2E, 0xFF4E); // FULLWIDTH LATIN CAPITAL LETTER N, FULLWIDTH LATIN SMALL LETTER N +test(0xFF2F, 0xFF4F); // FULLWIDTH LATIN CAPITAL LETTER O, FULLWIDTH LATIN SMALL LETTER O +test(0xFF30, 0xFF50); // FULLWIDTH LATIN CAPITAL LETTER P, FULLWIDTH LATIN SMALL LETTER P +test(0xFF31, 0xFF51); // FULLWIDTH LATIN CAPITAL LETTER Q, FULLWIDTH LATIN SMALL LETTER Q +test(0xFF32, 0xFF52); // FULLWIDTH LATIN CAPITAL LETTER R, FULLWIDTH LATIN SMALL LETTER R +test(0xFF33, 0xFF53); // FULLWIDTH LATIN CAPITAL LETTER S, FULLWIDTH LATIN SMALL LETTER S +test(0xFF34, 0xFF54); // FULLWIDTH LATIN CAPITAL LETTER T, FULLWIDTH LATIN SMALL LETTER T +test(0xFF35, 0xFF55); // FULLWIDTH LATIN CAPITAL LETTER U, FULLWIDTH LATIN SMALL LETTER U +test(0xFF36, 0xFF56); // FULLWIDTH LATIN CAPITAL LETTER V, FULLWIDTH LATIN SMALL LETTER V +test(0xFF37, 0xFF57); // FULLWIDTH LATIN CAPITAL LETTER W, FULLWIDTH LATIN SMALL LETTER W +test(0xFF38, 0xFF58); // FULLWIDTH LATIN CAPITAL LETTER X, FULLWIDTH LATIN SMALL LETTER X +test(0xFF39, 0xFF59); // FULLWIDTH LATIN CAPITAL LETTER Y, FULLWIDTH LATIN SMALL LETTER Y +test(0xFF3A, 0xFF5A); // FULLWIDTH LATIN CAPITAL LETTER Z, FULLWIDTH LATIN SMALL LETTER Z +test(0xFF41, 0xFF21); // FULLWIDTH LATIN SMALL LETTER A, FULLWIDTH LATIN CAPITAL LETTER A +test(0xFF42, 0xFF22); // FULLWIDTH LATIN SMALL LETTER B, FULLWIDTH LATIN CAPITAL LETTER B +test(0xFF43, 0xFF23); // FULLWIDTH LATIN SMALL LETTER C, FULLWIDTH LATIN CAPITAL LETTER C +test(0xFF44, 0xFF24); // FULLWIDTH LATIN SMALL LETTER D, FULLWIDTH LATIN CAPITAL LETTER D +test(0xFF45, 0xFF25); // FULLWIDTH LATIN SMALL LETTER E, FULLWIDTH LATIN CAPITAL LETTER E +test(0xFF46, 0xFF26); // FULLWIDTH LATIN SMALL LETTER F, FULLWIDTH LATIN CAPITAL LETTER F +test(0xFF47, 0xFF27); // FULLWIDTH LATIN SMALL LETTER G, FULLWIDTH LATIN CAPITAL LETTER G +test(0xFF48, 0xFF28); // FULLWIDTH LATIN SMALL LETTER H, FULLWIDTH LATIN CAPITAL LETTER H +test(0xFF49, 0xFF29); // FULLWIDTH LATIN SMALL LETTER I, FULLWIDTH LATIN CAPITAL LETTER I +test(0xFF4A, 0xFF2A); // FULLWIDTH LATIN SMALL LETTER J, FULLWIDTH LATIN CAPITAL LETTER J +test(0xFF4B, 0xFF2B); // FULLWIDTH LATIN SMALL LETTER K, FULLWIDTH LATIN CAPITAL LETTER K +test(0xFF4C, 0xFF2C); // FULLWIDTH LATIN SMALL LETTER L, FULLWIDTH LATIN CAPITAL LETTER L +test(0xFF4D, 0xFF2D); // FULLWIDTH LATIN SMALL LETTER M, FULLWIDTH LATIN CAPITAL LETTER M +test(0xFF4E, 0xFF2E); // FULLWIDTH LATIN SMALL LETTER N, FULLWIDTH LATIN CAPITAL LETTER N +test(0xFF4F, 0xFF2F); // FULLWIDTH LATIN SMALL LETTER O, FULLWIDTH LATIN CAPITAL LETTER O +test(0xFF50, 0xFF30); // FULLWIDTH LATIN SMALL LETTER P, FULLWIDTH LATIN CAPITAL LETTER P +test(0xFF51, 0xFF31); // FULLWIDTH LATIN SMALL LETTER Q, FULLWIDTH LATIN CAPITAL LETTER Q +test(0xFF52, 0xFF32); // FULLWIDTH LATIN SMALL LETTER R, FULLWIDTH LATIN CAPITAL LETTER R +test(0xFF53, 0xFF33); // FULLWIDTH LATIN SMALL LETTER S, FULLWIDTH LATIN CAPITAL LETTER S +test(0xFF54, 0xFF34); // FULLWIDTH LATIN SMALL LETTER T, FULLWIDTH LATIN CAPITAL LETTER T +test(0xFF55, 0xFF35); // FULLWIDTH LATIN SMALL LETTER U, FULLWIDTH LATIN CAPITAL LETTER U +test(0xFF56, 0xFF36); // FULLWIDTH LATIN SMALL LETTER V, FULLWIDTH LATIN CAPITAL LETTER V +test(0xFF57, 0xFF37); // FULLWIDTH LATIN SMALL LETTER W, FULLWIDTH LATIN CAPITAL LETTER W +test(0xFF58, 0xFF38); // FULLWIDTH LATIN SMALL LETTER X, FULLWIDTH LATIN CAPITAL LETTER X +test(0xFF59, 0xFF39); // FULLWIDTH LATIN SMALL LETTER Y, FULLWIDTH LATIN CAPITAL LETTER Y +test(0xFF5A, 0xFF3A); // FULLWIDTH LATIN SMALL LETTER Z, FULLWIDTH LATIN CAPITAL LETTER Z +test(0x10400, 0x10428); // DESERET CAPITAL LETTER LONG I, DESERET SMALL LETTER LONG I +test(0x10401, 0x10429); // DESERET CAPITAL LETTER LONG E, DESERET SMALL LETTER LONG E +test(0x10402, 0x1042A); // DESERET CAPITAL LETTER LONG A, DESERET SMALL LETTER LONG A +test(0x10403, 0x1042B); // DESERET CAPITAL LETTER LONG AH, DESERET SMALL LETTER LONG AH +test(0x10404, 0x1042C); // DESERET CAPITAL LETTER LONG O, DESERET SMALL LETTER LONG O +test(0x10405, 0x1042D); // DESERET CAPITAL LETTER LONG OO, DESERET SMALL LETTER LONG OO +test(0x10406, 0x1042E); // DESERET CAPITAL LETTER SHORT I, DESERET SMALL LETTER SHORT I +test(0x10407, 0x1042F); // DESERET CAPITAL LETTER SHORT E, DESERET SMALL LETTER SHORT E +test(0x10408, 0x10430); // DESERET CAPITAL LETTER SHORT A, DESERET SMALL LETTER SHORT A +test(0x10409, 0x10431); // DESERET CAPITAL LETTER SHORT AH, DESERET SMALL LETTER SHORT AH +test(0x1040A, 0x10432); // DESERET CAPITAL LETTER SHORT O, DESERET SMALL LETTER SHORT O +test(0x1040B, 0x10433); // DESERET CAPITAL LETTER SHORT OO, DESERET SMALL LETTER SHORT OO +test(0x1040C, 0x10434); // DESERET CAPITAL LETTER AY, DESERET SMALL LETTER AY +test(0x1040D, 0x10435); // DESERET CAPITAL LETTER OW, DESERET SMALL LETTER OW +test(0x1040E, 0x10436); // DESERET CAPITAL LETTER WU, DESERET SMALL LETTER WU +test(0x1040F, 0x10437); // DESERET CAPITAL LETTER YEE, DESERET SMALL LETTER YEE +test(0x10410, 0x10438); // DESERET CAPITAL LETTER H, DESERET SMALL LETTER H +test(0x10411, 0x10439); // DESERET CAPITAL LETTER PEE, DESERET SMALL LETTER PEE +test(0x10412, 0x1043A); // DESERET CAPITAL LETTER BEE, DESERET SMALL LETTER BEE +test(0x10413, 0x1043B); // DESERET CAPITAL LETTER TEE, DESERET SMALL LETTER TEE +test(0x10414, 0x1043C); // DESERET CAPITAL LETTER DEE, DESERET SMALL LETTER DEE +test(0x10415, 0x1043D); // DESERET CAPITAL LETTER CHEE, DESERET SMALL LETTER CHEE +test(0x10416, 0x1043E); // DESERET CAPITAL LETTER JEE, DESERET SMALL LETTER JEE +test(0x10417, 0x1043F); // DESERET CAPITAL LETTER KAY, DESERET SMALL LETTER KAY +test(0x10418, 0x10440); // DESERET CAPITAL LETTER GAY, DESERET SMALL LETTER GAY +test(0x10419, 0x10441); // DESERET CAPITAL LETTER EF, DESERET SMALL LETTER EF +test(0x1041A, 0x10442); // DESERET CAPITAL LETTER VEE, DESERET SMALL LETTER VEE +test(0x1041B, 0x10443); // DESERET CAPITAL LETTER ETH, DESERET SMALL LETTER ETH +test(0x1041C, 0x10444); // DESERET CAPITAL LETTER THEE, DESERET SMALL LETTER THEE +test(0x1041D, 0x10445); // DESERET CAPITAL LETTER ES, DESERET SMALL LETTER ES +test(0x1041E, 0x10446); // DESERET CAPITAL LETTER ZEE, DESERET SMALL LETTER ZEE +test(0x1041F, 0x10447); // DESERET CAPITAL LETTER ESH, DESERET SMALL LETTER ESH +test(0x10420, 0x10448); // DESERET CAPITAL LETTER ZHEE, DESERET SMALL LETTER ZHEE +test(0x10421, 0x10449); // DESERET CAPITAL LETTER ER, DESERET SMALL LETTER ER +test(0x10422, 0x1044A); // DESERET CAPITAL LETTER EL, DESERET SMALL LETTER EL +test(0x10423, 0x1044B); // DESERET CAPITAL LETTER EM, DESERET SMALL LETTER EM +test(0x10424, 0x1044C); // DESERET CAPITAL LETTER EN, DESERET SMALL LETTER EN +test(0x10425, 0x1044D); // DESERET CAPITAL LETTER ENG, DESERET SMALL LETTER ENG +test(0x10426, 0x1044E); // DESERET CAPITAL LETTER OI, DESERET SMALL LETTER OI +test(0x10427, 0x1044F); // DESERET CAPITAL LETTER EW, DESERET SMALL LETTER EW +test(0x10428, 0x10400); // DESERET SMALL LETTER LONG I, DESERET CAPITAL LETTER LONG I +test(0x10429, 0x10401); // DESERET SMALL LETTER LONG E, DESERET CAPITAL LETTER LONG E +test(0x1042A, 0x10402); // DESERET SMALL LETTER LONG A, DESERET CAPITAL LETTER LONG A +test(0x1042B, 0x10403); // DESERET SMALL LETTER LONG AH, DESERET CAPITAL LETTER LONG AH +test(0x1042C, 0x10404); // DESERET SMALL LETTER LONG O, DESERET CAPITAL LETTER LONG O +test(0x1042D, 0x10405); // DESERET SMALL LETTER LONG OO, DESERET CAPITAL LETTER LONG OO +test(0x1042E, 0x10406); // DESERET SMALL LETTER SHORT I, DESERET CAPITAL LETTER SHORT I +test(0x1042F, 0x10407); // DESERET SMALL LETTER SHORT E, DESERET CAPITAL LETTER SHORT E +test(0x10430, 0x10408); // DESERET SMALL LETTER SHORT A, DESERET CAPITAL LETTER SHORT A +test(0x10431, 0x10409); // DESERET SMALL LETTER SHORT AH, DESERET CAPITAL LETTER SHORT AH +test(0x10432, 0x1040A); // DESERET SMALL LETTER SHORT O, DESERET CAPITAL LETTER SHORT O +test(0x10433, 0x1040B); // DESERET SMALL LETTER SHORT OO, DESERET CAPITAL LETTER SHORT OO +test(0x10434, 0x1040C); // DESERET SMALL LETTER AY, DESERET CAPITAL LETTER AY +test(0x10435, 0x1040D); // DESERET SMALL LETTER OW, DESERET CAPITAL LETTER OW +test(0x10436, 0x1040E); // DESERET SMALL LETTER WU, DESERET CAPITAL LETTER WU +test(0x10437, 0x1040F); // DESERET SMALL LETTER YEE, DESERET CAPITAL LETTER YEE +test(0x10438, 0x10410); // DESERET SMALL LETTER H, DESERET CAPITAL LETTER H +test(0x10439, 0x10411); // DESERET SMALL LETTER PEE, DESERET CAPITAL LETTER PEE +test(0x1043A, 0x10412); // DESERET SMALL LETTER BEE, DESERET CAPITAL LETTER BEE +test(0x1043B, 0x10413); // DESERET SMALL LETTER TEE, DESERET CAPITAL LETTER TEE +test(0x1043C, 0x10414); // DESERET SMALL LETTER DEE, DESERET CAPITAL LETTER DEE +test(0x1043D, 0x10415); // DESERET SMALL LETTER CHEE, DESERET CAPITAL LETTER CHEE +test(0x1043E, 0x10416); // DESERET SMALL LETTER JEE, DESERET CAPITAL LETTER JEE +test(0x1043F, 0x10417); // DESERET SMALL LETTER KAY, DESERET CAPITAL LETTER KAY +test(0x10440, 0x10418); // DESERET SMALL LETTER GAY, DESERET CAPITAL LETTER GAY +test(0x10441, 0x10419); // DESERET SMALL LETTER EF, DESERET CAPITAL LETTER EF +test(0x10442, 0x1041A); // DESERET SMALL LETTER VEE, DESERET CAPITAL LETTER VEE +test(0x10443, 0x1041B); // DESERET SMALL LETTER ETH, DESERET CAPITAL LETTER ETH +test(0x10444, 0x1041C); // DESERET SMALL LETTER THEE, DESERET CAPITAL LETTER THEE +test(0x10445, 0x1041D); // DESERET SMALL LETTER ES, DESERET CAPITAL LETTER ES +test(0x10446, 0x1041E); // DESERET SMALL LETTER ZEE, DESERET CAPITAL LETTER ZEE +test(0x10447, 0x1041F); // DESERET SMALL LETTER ESH, DESERET CAPITAL LETTER ESH +test(0x10448, 0x10420); // DESERET SMALL LETTER ZHEE, DESERET CAPITAL LETTER ZHEE +test(0x10449, 0x10421); // DESERET SMALL LETTER ER, DESERET CAPITAL LETTER ER +test(0x1044A, 0x10422); // DESERET SMALL LETTER EL, DESERET CAPITAL LETTER EL +test(0x1044B, 0x10423); // DESERET SMALL LETTER EM, DESERET CAPITAL LETTER EM +test(0x1044C, 0x10424); // DESERET SMALL LETTER EN, DESERET CAPITAL LETTER EN +test(0x1044D, 0x10425); // DESERET SMALL LETTER ENG, DESERET CAPITAL LETTER ENG +test(0x1044E, 0x10426); // DESERET SMALL LETTER OI, DESERET CAPITAL LETTER OI +test(0x1044F, 0x10427); // DESERET SMALL LETTER EW, DESERET CAPITAL LETTER EW +test(0x104B0, 0x104D8); // OSAGE CAPITAL LETTER A, OSAGE SMALL LETTER A +test(0x104B1, 0x104D9); // OSAGE CAPITAL LETTER AI, OSAGE SMALL LETTER AI +test(0x104B2, 0x104DA); // OSAGE CAPITAL LETTER AIN, OSAGE SMALL LETTER AIN +test(0x104B3, 0x104DB); // OSAGE CAPITAL LETTER AH, OSAGE SMALL LETTER AH +test(0x104B4, 0x104DC); // OSAGE CAPITAL LETTER BRA, OSAGE SMALL LETTER BRA +test(0x104B5, 0x104DD); // OSAGE CAPITAL LETTER CHA, OSAGE SMALL LETTER CHA +test(0x104B6, 0x104DE); // OSAGE CAPITAL LETTER EHCHA, OSAGE SMALL LETTER EHCHA +test(0x104B7, 0x104DF); // OSAGE CAPITAL LETTER E, OSAGE SMALL LETTER E +test(0x104B8, 0x104E0); // OSAGE CAPITAL LETTER EIN, OSAGE SMALL LETTER EIN +test(0x104B9, 0x104E1); // OSAGE CAPITAL LETTER HA, OSAGE SMALL LETTER HA +test(0x104BA, 0x104E2); // OSAGE CAPITAL LETTER HYA, OSAGE SMALL LETTER HYA +test(0x104BB, 0x104E3); // OSAGE CAPITAL LETTER I, OSAGE SMALL LETTER I +test(0x104BC, 0x104E4); // OSAGE CAPITAL LETTER KA, OSAGE SMALL LETTER KA +test(0x104BD, 0x104E5); // OSAGE CAPITAL LETTER EHKA, OSAGE SMALL LETTER EHKA +test(0x104BE, 0x104E6); // OSAGE CAPITAL LETTER KYA, OSAGE SMALL LETTER KYA +test(0x104BF, 0x104E7); // OSAGE CAPITAL LETTER LA, OSAGE SMALL LETTER LA +test(0x104C0, 0x104E8); // OSAGE CAPITAL LETTER MA, OSAGE SMALL LETTER MA +test(0x104C1, 0x104E9); // OSAGE CAPITAL LETTER NA, OSAGE SMALL LETTER NA +test(0x104C2, 0x104EA); // OSAGE CAPITAL LETTER O, OSAGE SMALL LETTER O +test(0x104C3, 0x104EB); // OSAGE CAPITAL LETTER OIN, OSAGE SMALL LETTER OIN +test(0x104C4, 0x104EC); // OSAGE CAPITAL LETTER PA, OSAGE SMALL LETTER PA +test(0x104C5, 0x104ED); // OSAGE CAPITAL LETTER EHPA, OSAGE SMALL LETTER EHPA +test(0x104C6, 0x104EE); // OSAGE CAPITAL LETTER SA, OSAGE SMALL LETTER SA +test(0x104C7, 0x104EF); // OSAGE CAPITAL LETTER SHA, OSAGE SMALL LETTER SHA +test(0x104C8, 0x104F0); // OSAGE CAPITAL LETTER TA, OSAGE SMALL LETTER TA +test(0x104C9, 0x104F1); // OSAGE CAPITAL LETTER EHTA, OSAGE SMALL LETTER EHTA +test(0x104CA, 0x104F2); // OSAGE CAPITAL LETTER TSA, OSAGE SMALL LETTER TSA +test(0x104CB, 0x104F3); // OSAGE CAPITAL LETTER EHTSA, OSAGE SMALL LETTER EHTSA +test(0x104CC, 0x104F4); // OSAGE CAPITAL LETTER TSHA, OSAGE SMALL LETTER TSHA +test(0x104CD, 0x104F5); // OSAGE CAPITAL LETTER DHA, OSAGE SMALL LETTER DHA +test(0x104CE, 0x104F6); // OSAGE CAPITAL LETTER U, OSAGE SMALL LETTER U +test(0x104CF, 0x104F7); // OSAGE CAPITAL LETTER WA, OSAGE SMALL LETTER WA +test(0x104D0, 0x104F8); // OSAGE CAPITAL LETTER KHA, OSAGE SMALL LETTER KHA +test(0x104D1, 0x104F9); // OSAGE CAPITAL LETTER GHA, OSAGE SMALL LETTER GHA +test(0x104D2, 0x104FA); // OSAGE CAPITAL LETTER ZA, OSAGE SMALL LETTER ZA +test(0x104D3, 0x104FB); // OSAGE CAPITAL LETTER ZHA, OSAGE SMALL LETTER ZHA +test(0x104D8, 0x104B0); // OSAGE SMALL LETTER A, OSAGE CAPITAL LETTER A +test(0x104D9, 0x104B1); // OSAGE SMALL LETTER AI, OSAGE CAPITAL LETTER AI +test(0x104DA, 0x104B2); // OSAGE SMALL LETTER AIN, OSAGE CAPITAL LETTER AIN +test(0x104DB, 0x104B3); // OSAGE SMALL LETTER AH, OSAGE CAPITAL LETTER AH +test(0x104DC, 0x104B4); // OSAGE SMALL LETTER BRA, OSAGE CAPITAL LETTER BRA +test(0x104DD, 0x104B5); // OSAGE SMALL LETTER CHA, OSAGE CAPITAL LETTER CHA +test(0x104DE, 0x104B6); // OSAGE SMALL LETTER EHCHA, OSAGE CAPITAL LETTER EHCHA +test(0x104DF, 0x104B7); // OSAGE SMALL LETTER E, OSAGE CAPITAL LETTER E +test(0x104E0, 0x104B8); // OSAGE SMALL LETTER EIN, OSAGE CAPITAL LETTER EIN +test(0x104E1, 0x104B9); // OSAGE SMALL LETTER HA, OSAGE CAPITAL LETTER HA +test(0x104E2, 0x104BA); // OSAGE SMALL LETTER HYA, OSAGE CAPITAL LETTER HYA +test(0x104E3, 0x104BB); // OSAGE SMALL LETTER I, OSAGE CAPITAL LETTER I +test(0x104E4, 0x104BC); // OSAGE SMALL LETTER KA, OSAGE CAPITAL LETTER KA +test(0x104E5, 0x104BD); // OSAGE SMALL LETTER EHKA, OSAGE CAPITAL LETTER EHKA +test(0x104E6, 0x104BE); // OSAGE SMALL LETTER KYA, OSAGE CAPITAL LETTER KYA +test(0x104E7, 0x104BF); // OSAGE SMALL LETTER LA, OSAGE CAPITAL LETTER LA +test(0x104E8, 0x104C0); // OSAGE SMALL LETTER MA, OSAGE CAPITAL LETTER MA +test(0x104E9, 0x104C1); // OSAGE SMALL LETTER NA, OSAGE CAPITAL LETTER NA +test(0x104EA, 0x104C2); // OSAGE SMALL LETTER O, OSAGE CAPITAL LETTER O +test(0x104EB, 0x104C3); // OSAGE SMALL LETTER OIN, OSAGE CAPITAL LETTER OIN +test(0x104EC, 0x104C4); // OSAGE SMALL LETTER PA, OSAGE CAPITAL LETTER PA +test(0x104ED, 0x104C5); // OSAGE SMALL LETTER EHPA, OSAGE CAPITAL LETTER EHPA +test(0x104EE, 0x104C6); // OSAGE SMALL LETTER SA, OSAGE CAPITAL LETTER SA +test(0x104EF, 0x104C7); // OSAGE SMALL LETTER SHA, OSAGE CAPITAL LETTER SHA +test(0x104F0, 0x104C8); // OSAGE SMALL LETTER TA, OSAGE CAPITAL LETTER TA +test(0x104F1, 0x104C9); // OSAGE SMALL LETTER EHTA, OSAGE CAPITAL LETTER EHTA +test(0x104F2, 0x104CA); // OSAGE SMALL LETTER TSA, OSAGE CAPITAL LETTER TSA +test(0x104F3, 0x104CB); // OSAGE SMALL LETTER EHTSA, OSAGE CAPITAL LETTER EHTSA +test(0x104F4, 0x104CC); // OSAGE SMALL LETTER TSHA, OSAGE CAPITAL LETTER TSHA +test(0x104F5, 0x104CD); // OSAGE SMALL LETTER DHA, OSAGE CAPITAL LETTER DHA +test(0x104F6, 0x104CE); // OSAGE SMALL LETTER U, OSAGE CAPITAL LETTER U +test(0x104F7, 0x104CF); // OSAGE SMALL LETTER WA, OSAGE CAPITAL LETTER WA +test(0x104F8, 0x104D0); // OSAGE SMALL LETTER KHA, OSAGE CAPITAL LETTER KHA +test(0x104F9, 0x104D1); // OSAGE SMALL LETTER GHA, OSAGE CAPITAL LETTER GHA +test(0x104FA, 0x104D2); // OSAGE SMALL LETTER ZA, OSAGE CAPITAL LETTER ZA +test(0x104FB, 0x104D3); // OSAGE SMALL LETTER ZHA, OSAGE CAPITAL LETTER ZHA +test(0x10570, 0x10597); // VITHKUQI CAPITAL LETTER A, VITHKUQI SMALL LETTER A +test(0x10571, 0x10598); // VITHKUQI CAPITAL LETTER BBE, VITHKUQI SMALL LETTER BBE +test(0x10572, 0x10599); // VITHKUQI CAPITAL LETTER BE, VITHKUQI SMALL LETTER BE +test(0x10573, 0x1059A); // VITHKUQI CAPITAL LETTER CE, VITHKUQI SMALL LETTER CE +test(0x10574, 0x1059B); // VITHKUQI CAPITAL LETTER CHE, VITHKUQI SMALL LETTER CHE +test(0x10575, 0x1059C); // VITHKUQI CAPITAL LETTER DE, VITHKUQI SMALL LETTER DE +test(0x10576, 0x1059D); // VITHKUQI CAPITAL LETTER DHE, VITHKUQI SMALL LETTER DHE +test(0x10577, 0x1059E); // VITHKUQI CAPITAL LETTER EI, VITHKUQI SMALL LETTER EI +test(0x10578, 0x1059F); // VITHKUQI CAPITAL LETTER E, VITHKUQI SMALL LETTER E +test(0x10579, 0x105A0); // VITHKUQI CAPITAL LETTER FE, VITHKUQI SMALL LETTER FE +test(0x1057A, 0x105A1); // VITHKUQI CAPITAL LETTER GA, VITHKUQI SMALL LETTER GA +test(0x1057C, 0x105A3); // VITHKUQI CAPITAL LETTER HA, VITHKUQI SMALL LETTER HA +test(0x1057D, 0x105A4); // VITHKUQI CAPITAL LETTER HHA, VITHKUQI SMALL LETTER HHA +test(0x1057E, 0x105A5); // VITHKUQI CAPITAL LETTER I, VITHKUQI SMALL LETTER I +test(0x1057F, 0x105A6); // VITHKUQI CAPITAL LETTER IJE, VITHKUQI SMALL LETTER IJE +test(0x10580, 0x105A7); // VITHKUQI CAPITAL LETTER JE, VITHKUQI SMALL LETTER JE +test(0x10581, 0x105A8); // VITHKUQI CAPITAL LETTER KA, VITHKUQI SMALL LETTER KA +test(0x10582, 0x105A9); // VITHKUQI CAPITAL LETTER LA, VITHKUQI SMALL LETTER LA +test(0x10583, 0x105AA); // VITHKUQI CAPITAL LETTER LLA, VITHKUQI SMALL LETTER LLA +test(0x10584, 0x105AB); // VITHKUQI CAPITAL LETTER ME, VITHKUQI SMALL LETTER ME +test(0x10585, 0x105AC); // VITHKUQI CAPITAL LETTER NE, VITHKUQI SMALL LETTER NE +test(0x10586, 0x105AD); // VITHKUQI CAPITAL LETTER NJE, VITHKUQI SMALL LETTER NJE +test(0x10587, 0x105AE); // VITHKUQI CAPITAL LETTER O, VITHKUQI SMALL LETTER O +test(0x10588, 0x105AF); // VITHKUQI CAPITAL LETTER PE, VITHKUQI SMALL LETTER PE +test(0x10589, 0x105B0); // VITHKUQI CAPITAL LETTER QA, VITHKUQI SMALL LETTER QA +test(0x1058A, 0x105B1); // VITHKUQI CAPITAL LETTER RE, VITHKUQI SMALL LETTER RE +test(0x1058C, 0x105B3); // VITHKUQI CAPITAL LETTER SE, VITHKUQI SMALL LETTER SE +test(0x1058D, 0x105B4); // VITHKUQI CAPITAL LETTER SHE, VITHKUQI SMALL LETTER SHE +test(0x1058E, 0x105B5); // VITHKUQI CAPITAL LETTER TE, VITHKUQI SMALL LETTER TE +test(0x1058F, 0x105B6); // VITHKUQI CAPITAL LETTER THE, VITHKUQI SMALL LETTER THE +test(0x10590, 0x105B7); // VITHKUQI CAPITAL LETTER U, VITHKUQI SMALL LETTER U +test(0x10591, 0x105B8); // VITHKUQI CAPITAL LETTER VE, VITHKUQI SMALL LETTER VE +test(0x10592, 0x105B9); // VITHKUQI CAPITAL LETTER XE, VITHKUQI SMALL LETTER XE +test(0x10594, 0x105BB); // VITHKUQI CAPITAL LETTER Y, VITHKUQI SMALL LETTER Y +test(0x10595, 0x105BC); // VITHKUQI CAPITAL LETTER ZE, VITHKUQI SMALL LETTER ZE +test(0x10597, 0x10570); // VITHKUQI SMALL LETTER A, VITHKUQI CAPITAL LETTER A +test(0x10598, 0x10571); // VITHKUQI SMALL LETTER BBE, VITHKUQI CAPITAL LETTER BBE +test(0x10599, 0x10572); // VITHKUQI SMALL LETTER BE, VITHKUQI CAPITAL LETTER BE +test(0x1059A, 0x10573); // VITHKUQI SMALL LETTER CE, VITHKUQI CAPITAL LETTER CE +test(0x1059B, 0x10574); // VITHKUQI SMALL LETTER CHE, VITHKUQI CAPITAL LETTER CHE +test(0x1059C, 0x10575); // VITHKUQI SMALL LETTER DE, VITHKUQI CAPITAL LETTER DE +test(0x1059D, 0x10576); // VITHKUQI SMALL LETTER DHE, VITHKUQI CAPITAL LETTER DHE +test(0x1059E, 0x10577); // VITHKUQI SMALL LETTER EI, VITHKUQI CAPITAL LETTER EI +test(0x1059F, 0x10578); // VITHKUQI SMALL LETTER E, VITHKUQI CAPITAL LETTER E +test(0x105A0, 0x10579); // VITHKUQI SMALL LETTER FE, VITHKUQI CAPITAL LETTER FE +test(0x105A1, 0x1057A); // VITHKUQI SMALL LETTER GA, VITHKUQI CAPITAL LETTER GA +test(0x105A3, 0x1057C); // VITHKUQI SMALL LETTER HA, VITHKUQI CAPITAL LETTER HA +test(0x105A4, 0x1057D); // VITHKUQI SMALL LETTER HHA, VITHKUQI CAPITAL LETTER HHA +test(0x105A5, 0x1057E); // VITHKUQI SMALL LETTER I, VITHKUQI CAPITAL LETTER I +test(0x105A6, 0x1057F); // VITHKUQI SMALL LETTER IJE, VITHKUQI CAPITAL LETTER IJE +test(0x105A7, 0x10580); // VITHKUQI SMALL LETTER JE, VITHKUQI CAPITAL LETTER JE +test(0x105A8, 0x10581); // VITHKUQI SMALL LETTER KA, VITHKUQI CAPITAL LETTER KA +test(0x105A9, 0x10582); // VITHKUQI SMALL LETTER LA, VITHKUQI CAPITAL LETTER LA +test(0x105AA, 0x10583); // VITHKUQI SMALL LETTER LLA, VITHKUQI CAPITAL LETTER LLA +test(0x105AB, 0x10584); // VITHKUQI SMALL LETTER ME, VITHKUQI CAPITAL LETTER ME +test(0x105AC, 0x10585); // VITHKUQI SMALL LETTER NE, VITHKUQI CAPITAL LETTER NE +test(0x105AD, 0x10586); // VITHKUQI SMALL LETTER NJE, VITHKUQI CAPITAL LETTER NJE +test(0x105AE, 0x10587); // VITHKUQI SMALL LETTER O, VITHKUQI CAPITAL LETTER O +test(0x105AF, 0x10588); // VITHKUQI SMALL LETTER PE, VITHKUQI CAPITAL LETTER PE +test(0x105B0, 0x10589); // VITHKUQI SMALL LETTER QA, VITHKUQI CAPITAL LETTER QA +test(0x105B1, 0x1058A); // VITHKUQI SMALL LETTER RE, VITHKUQI CAPITAL LETTER RE +test(0x105B3, 0x1058C); // VITHKUQI SMALL LETTER SE, VITHKUQI CAPITAL LETTER SE +test(0x105B4, 0x1058D); // VITHKUQI SMALL LETTER SHE, VITHKUQI CAPITAL LETTER SHE +test(0x105B5, 0x1058E); // VITHKUQI SMALL LETTER TE, VITHKUQI CAPITAL LETTER TE +test(0x105B6, 0x1058F); // VITHKUQI SMALL LETTER THE, VITHKUQI CAPITAL LETTER THE +test(0x105B7, 0x10590); // VITHKUQI SMALL LETTER U, VITHKUQI CAPITAL LETTER U +test(0x105B8, 0x10591); // VITHKUQI SMALL LETTER VE, VITHKUQI CAPITAL LETTER VE +test(0x105B9, 0x10592); // VITHKUQI SMALL LETTER XE, VITHKUQI CAPITAL LETTER XE +test(0x105BB, 0x10594); // VITHKUQI SMALL LETTER Y, VITHKUQI CAPITAL LETTER Y +test(0x105BC, 0x10595); // VITHKUQI SMALL LETTER ZE, VITHKUQI CAPITAL LETTER ZE +test(0x10C80, 0x10CC0); // OLD HUNGARIAN CAPITAL LETTER A, OLD HUNGARIAN SMALL LETTER A +test(0x10C81, 0x10CC1); // OLD HUNGARIAN CAPITAL LETTER AA, OLD HUNGARIAN SMALL LETTER AA +test(0x10C82, 0x10CC2); // OLD HUNGARIAN CAPITAL LETTER EB, OLD HUNGARIAN SMALL LETTER EB +test(0x10C83, 0x10CC3); // OLD HUNGARIAN CAPITAL LETTER AMB, OLD HUNGARIAN SMALL LETTER AMB +test(0x10C84, 0x10CC4); // OLD HUNGARIAN CAPITAL LETTER EC, OLD HUNGARIAN SMALL LETTER EC +test(0x10C85, 0x10CC5); // OLD HUNGARIAN CAPITAL LETTER ENC, OLD HUNGARIAN SMALL LETTER ENC +test(0x10C86, 0x10CC6); // OLD HUNGARIAN CAPITAL LETTER ECS, OLD HUNGARIAN SMALL LETTER ECS +test(0x10C87, 0x10CC7); // OLD HUNGARIAN CAPITAL LETTER ED, OLD HUNGARIAN SMALL LETTER ED +test(0x10C88, 0x10CC8); // OLD HUNGARIAN CAPITAL LETTER AND, OLD HUNGARIAN SMALL LETTER AND +test(0x10C89, 0x10CC9); // OLD HUNGARIAN CAPITAL LETTER E, OLD HUNGARIAN SMALL LETTER E +test(0x10C8A, 0x10CCA); // OLD HUNGARIAN CAPITAL LETTER CLOSE E, OLD HUNGARIAN SMALL LETTER CLOSE E +test(0x10C8B, 0x10CCB); // OLD HUNGARIAN CAPITAL LETTER EE, OLD HUNGARIAN SMALL LETTER EE +test(0x10C8C, 0x10CCC); // OLD HUNGARIAN CAPITAL LETTER EF, OLD HUNGARIAN SMALL LETTER EF +test(0x10C8D, 0x10CCD); // OLD HUNGARIAN CAPITAL LETTER EG, OLD HUNGARIAN SMALL LETTER EG +test(0x10C8E, 0x10CCE); // OLD HUNGARIAN CAPITAL LETTER EGY, OLD HUNGARIAN SMALL LETTER EGY +test(0x10C8F, 0x10CCF); // OLD HUNGARIAN CAPITAL LETTER EH, OLD HUNGARIAN SMALL LETTER EH +test(0x10C90, 0x10CD0); // OLD HUNGARIAN CAPITAL LETTER I, OLD HUNGARIAN SMALL LETTER I +test(0x10C91, 0x10CD1); // OLD HUNGARIAN CAPITAL LETTER II, OLD HUNGARIAN SMALL LETTER II +test(0x10C92, 0x10CD2); // OLD HUNGARIAN CAPITAL LETTER EJ, OLD HUNGARIAN SMALL LETTER EJ +test(0x10C93, 0x10CD3); // OLD HUNGARIAN CAPITAL LETTER EK, OLD HUNGARIAN SMALL LETTER EK +test(0x10C94, 0x10CD4); // OLD HUNGARIAN CAPITAL LETTER AK, OLD HUNGARIAN SMALL LETTER AK +test(0x10C95, 0x10CD5); // OLD HUNGARIAN CAPITAL LETTER UNK, OLD HUNGARIAN SMALL LETTER UNK +test(0x10C96, 0x10CD6); // OLD HUNGARIAN CAPITAL LETTER EL, OLD HUNGARIAN SMALL LETTER EL +test(0x10C97, 0x10CD7); // OLD HUNGARIAN CAPITAL LETTER ELY, OLD HUNGARIAN SMALL LETTER ELY +test(0x10C98, 0x10CD8); // OLD HUNGARIAN CAPITAL LETTER EM, OLD HUNGARIAN SMALL LETTER EM +test(0x10C99, 0x10CD9); // OLD HUNGARIAN CAPITAL LETTER EN, OLD HUNGARIAN SMALL LETTER EN +test(0x10C9A, 0x10CDA); // OLD HUNGARIAN CAPITAL LETTER ENY, OLD HUNGARIAN SMALL LETTER ENY +test(0x10C9B, 0x10CDB); // OLD HUNGARIAN CAPITAL LETTER O, OLD HUNGARIAN SMALL LETTER O +test(0x10C9C, 0x10CDC); // OLD HUNGARIAN CAPITAL LETTER OO, OLD HUNGARIAN SMALL LETTER OO +test(0x10C9D, 0x10CDD); // OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE, OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE +test(0x10C9E, 0x10CDE); // OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE, OLD HUNGARIAN SMALL LETTER RUDIMENTA OE +test(0x10C9F, 0x10CDF); // OLD HUNGARIAN CAPITAL LETTER OEE, OLD HUNGARIAN SMALL LETTER OEE +test(0x10CA0, 0x10CE0); // OLD HUNGARIAN CAPITAL LETTER EP, OLD HUNGARIAN SMALL LETTER EP +test(0x10CA1, 0x10CE1); // OLD HUNGARIAN CAPITAL LETTER EMP, OLD HUNGARIAN SMALL LETTER EMP +test(0x10CA2, 0x10CE2); // OLD HUNGARIAN CAPITAL LETTER ER, OLD HUNGARIAN SMALL LETTER ER +test(0x10CA3, 0x10CE3); // OLD HUNGARIAN CAPITAL LETTER SHORT ER, OLD HUNGARIAN SMALL LETTER SHORT ER +test(0x10CA4, 0x10CE4); // OLD HUNGARIAN CAPITAL LETTER ES, OLD HUNGARIAN SMALL LETTER ES +test(0x10CA5, 0x10CE5); // OLD HUNGARIAN CAPITAL LETTER ESZ, OLD HUNGARIAN SMALL LETTER ESZ +test(0x10CA6, 0x10CE6); // OLD HUNGARIAN CAPITAL LETTER ET, OLD HUNGARIAN SMALL LETTER ET +test(0x10CA7, 0x10CE7); // OLD HUNGARIAN CAPITAL LETTER ENT, OLD HUNGARIAN SMALL LETTER ENT +test(0x10CA8, 0x10CE8); // OLD HUNGARIAN CAPITAL LETTER ETY, OLD HUNGARIAN SMALL LETTER ETY +test(0x10CA9, 0x10CE9); // OLD HUNGARIAN CAPITAL LETTER ECH, OLD HUNGARIAN SMALL LETTER ECH +test(0x10CAA, 0x10CEA); // OLD HUNGARIAN CAPITAL LETTER U, OLD HUNGARIAN SMALL LETTER U +test(0x10CAB, 0x10CEB); // OLD HUNGARIAN CAPITAL LETTER UU, OLD HUNGARIAN SMALL LETTER UU +test(0x10CAC, 0x10CEC); // OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE, OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE +test(0x10CAD, 0x10CED); // OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE, OLD HUNGARIAN SMALL LETTER RUDIMENTA UE +test(0x10CAE, 0x10CEE); // OLD HUNGARIAN CAPITAL LETTER EV, OLD HUNGARIAN SMALL LETTER EV +test(0x10CAF, 0x10CEF); // OLD HUNGARIAN CAPITAL LETTER EZ, OLD HUNGARIAN SMALL LETTER EZ +test(0x10CB0, 0x10CF0); // OLD HUNGARIAN CAPITAL LETTER EZS, OLD HUNGARIAN SMALL LETTER EZS +test(0x10CB1, 0x10CF1); // OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN, OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN +test(0x10CB2, 0x10CF2); // OLD HUNGARIAN CAPITAL LETTER US, OLD HUNGARIAN SMALL LETTER US +test(0x10CC0, 0x10C80); // OLD HUNGARIAN SMALL LETTER A, OLD HUNGARIAN CAPITAL LETTER A +test(0x10CC1, 0x10C81); // OLD HUNGARIAN SMALL LETTER AA, OLD HUNGARIAN CAPITAL LETTER AA +test(0x10CC2, 0x10C82); // OLD HUNGARIAN SMALL LETTER EB, OLD HUNGARIAN CAPITAL LETTER EB +test(0x10CC3, 0x10C83); // OLD HUNGARIAN SMALL LETTER AMB, OLD HUNGARIAN CAPITAL LETTER AMB +test(0x10CC4, 0x10C84); // OLD HUNGARIAN SMALL LETTER EC, OLD HUNGARIAN CAPITAL LETTER EC +test(0x10CC5, 0x10C85); // OLD HUNGARIAN SMALL LETTER ENC, OLD HUNGARIAN CAPITAL LETTER ENC +test(0x10CC6, 0x10C86); // OLD HUNGARIAN SMALL LETTER ECS, OLD HUNGARIAN CAPITAL LETTER ECS +test(0x10CC7, 0x10C87); // OLD HUNGARIAN SMALL LETTER ED, OLD HUNGARIAN CAPITAL LETTER ED +test(0x10CC8, 0x10C88); // OLD HUNGARIAN SMALL LETTER AND, OLD HUNGARIAN CAPITAL LETTER AND +test(0x10CC9, 0x10C89); // OLD HUNGARIAN SMALL LETTER E, OLD HUNGARIAN CAPITAL LETTER E +test(0x10CCA, 0x10C8A); // OLD HUNGARIAN SMALL LETTER CLOSE E, OLD HUNGARIAN CAPITAL LETTER CLOSE E +test(0x10CCB, 0x10C8B); // OLD HUNGARIAN SMALL LETTER EE, OLD HUNGARIAN CAPITAL LETTER EE +test(0x10CCC, 0x10C8C); // OLD HUNGARIAN SMALL LETTER EF, OLD HUNGARIAN CAPITAL LETTER EF +test(0x10CCD, 0x10C8D); // OLD HUNGARIAN SMALL LETTER EG, OLD HUNGARIAN CAPITAL LETTER EG +test(0x10CCE, 0x10C8E); // OLD HUNGARIAN SMALL LETTER EGY, OLD HUNGARIAN CAPITAL LETTER EGY +test(0x10CCF, 0x10C8F); // OLD HUNGARIAN SMALL LETTER EH, OLD HUNGARIAN CAPITAL LETTER EH +test(0x10CD0, 0x10C90); // OLD HUNGARIAN SMALL LETTER I, OLD HUNGARIAN CAPITAL LETTER I +test(0x10CD1, 0x10C91); // OLD HUNGARIAN SMALL LETTER II, OLD HUNGARIAN CAPITAL LETTER II +test(0x10CD2, 0x10C92); // OLD HUNGARIAN SMALL LETTER EJ, OLD HUNGARIAN CAPITAL LETTER EJ +test(0x10CD3, 0x10C93); // OLD HUNGARIAN SMALL LETTER EK, OLD HUNGARIAN CAPITAL LETTER EK +test(0x10CD4, 0x10C94); // OLD HUNGARIAN SMALL LETTER AK, OLD HUNGARIAN CAPITAL LETTER AK +test(0x10CD5, 0x10C95); // OLD HUNGARIAN SMALL LETTER UNK, OLD HUNGARIAN CAPITAL LETTER UNK +test(0x10CD6, 0x10C96); // OLD HUNGARIAN SMALL LETTER EL, OLD HUNGARIAN CAPITAL LETTER EL +test(0x10CD7, 0x10C97); // OLD HUNGARIAN SMALL LETTER ELY, OLD HUNGARIAN CAPITAL LETTER ELY +test(0x10CD8, 0x10C98); // OLD HUNGARIAN SMALL LETTER EM, OLD HUNGARIAN CAPITAL LETTER EM +test(0x10CD9, 0x10C99); // OLD HUNGARIAN SMALL LETTER EN, OLD HUNGARIAN CAPITAL LETTER EN +test(0x10CDA, 0x10C9A); // OLD HUNGARIAN SMALL LETTER ENY, OLD HUNGARIAN CAPITAL LETTER ENY +test(0x10CDB, 0x10C9B); // OLD HUNGARIAN SMALL LETTER O, OLD HUNGARIAN CAPITAL LETTER O +test(0x10CDC, 0x10C9C); // OLD HUNGARIAN SMALL LETTER OO, OLD HUNGARIAN CAPITAL LETTER OO +test(0x10CDD, 0x10C9D); // OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE, OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE +test(0x10CDE, 0x10C9E); // OLD HUNGARIAN SMALL LETTER RUDIMENTA OE, OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE +test(0x10CDF, 0x10C9F); // OLD HUNGARIAN SMALL LETTER OEE, OLD HUNGARIAN CAPITAL LETTER OEE +test(0x10CE0, 0x10CA0); // OLD HUNGARIAN SMALL LETTER EP, OLD HUNGARIAN CAPITAL LETTER EP +test(0x10CE1, 0x10CA1); // OLD HUNGARIAN SMALL LETTER EMP, OLD HUNGARIAN CAPITAL LETTER EMP +test(0x10CE2, 0x10CA2); // OLD HUNGARIAN SMALL LETTER ER, OLD HUNGARIAN CAPITAL LETTER ER +test(0x10CE3, 0x10CA3); // OLD HUNGARIAN SMALL LETTER SHORT ER, OLD HUNGARIAN CAPITAL LETTER SHORT ER +test(0x10CE4, 0x10CA4); // OLD HUNGARIAN SMALL LETTER ES, OLD HUNGARIAN CAPITAL LETTER ES +test(0x10CE5, 0x10CA5); // OLD HUNGARIAN SMALL LETTER ESZ, OLD HUNGARIAN CAPITAL LETTER ESZ +test(0x10CE6, 0x10CA6); // OLD HUNGARIAN SMALL LETTER ET, OLD HUNGARIAN CAPITAL LETTER ET +test(0x10CE7, 0x10CA7); // OLD HUNGARIAN SMALL LETTER ENT, OLD HUNGARIAN CAPITAL LETTER ENT +test(0x10CE8, 0x10CA8); // OLD HUNGARIAN SMALL LETTER ETY, OLD HUNGARIAN CAPITAL LETTER ETY +test(0x10CE9, 0x10CA9); // OLD HUNGARIAN SMALL LETTER ECH, OLD HUNGARIAN CAPITAL LETTER ECH +test(0x10CEA, 0x10CAA); // OLD HUNGARIAN SMALL LETTER U, OLD HUNGARIAN CAPITAL LETTER U +test(0x10CEB, 0x10CAB); // OLD HUNGARIAN SMALL LETTER UU, OLD HUNGARIAN CAPITAL LETTER UU +test(0x10CEC, 0x10CAC); // OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE, OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE +test(0x10CED, 0x10CAD); // OLD HUNGARIAN SMALL LETTER RUDIMENTA UE, OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE +test(0x10CEE, 0x10CAE); // OLD HUNGARIAN SMALL LETTER EV, OLD HUNGARIAN CAPITAL LETTER EV +test(0x10CEF, 0x10CAF); // OLD HUNGARIAN SMALL LETTER EZ, OLD HUNGARIAN CAPITAL LETTER EZ +test(0x10CF0, 0x10CB0); // OLD HUNGARIAN SMALL LETTER EZS, OLD HUNGARIAN CAPITAL LETTER EZS +test(0x10CF1, 0x10CB1); // OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN, OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN +test(0x10CF2, 0x10CB2); // OLD HUNGARIAN SMALL LETTER US, OLD HUNGARIAN CAPITAL LETTER US +test(0x118A0, 0x118C0); // WARANG CITI CAPITAL LETTER NGAA, WARANG CITI SMALL LETTER NGAA +test(0x118A1, 0x118C1); // WARANG CITI CAPITAL LETTER A, WARANG CITI SMALL LETTER A +test(0x118A2, 0x118C2); // WARANG CITI CAPITAL LETTER WI, WARANG CITI SMALL LETTER WI +test(0x118A3, 0x118C3); // WARANG CITI CAPITAL LETTER YU, WARANG CITI SMALL LETTER YU +test(0x118A4, 0x118C4); // WARANG CITI CAPITAL LETTER YA, WARANG CITI SMALL LETTER YA +test(0x118A5, 0x118C5); // WARANG CITI CAPITAL LETTER YO, WARANG CITI SMALL LETTER YO +test(0x118A6, 0x118C6); // WARANG CITI CAPITAL LETTER II, WARANG CITI SMALL LETTER II +test(0x118A7, 0x118C7); // WARANG CITI CAPITAL LETTER UU, WARANG CITI SMALL LETTER UU +test(0x118A8, 0x118C8); // WARANG CITI CAPITAL LETTER E, WARANG CITI SMALL LETTER E +test(0x118A9, 0x118C9); // WARANG CITI CAPITAL LETTER O, WARANG CITI SMALL LETTER O +test(0x118AA, 0x118CA); // WARANG CITI CAPITAL LETTER ANG, WARANG CITI SMALL LETTER ANG +test(0x118AB, 0x118CB); // WARANG CITI CAPITAL LETTER GA, WARANG CITI SMALL LETTER GA +test(0x118AC, 0x118CC); // WARANG CITI CAPITAL LETTER KO, WARANG CITI SMALL LETTER KO +test(0x118AD, 0x118CD); // WARANG CITI CAPITAL LETTER ENY, WARANG CITI SMALL LETTER ENY +test(0x118AE, 0x118CE); // WARANG CITI CAPITAL LETTER YUJ, WARANG CITI SMALL LETTER YUJ +test(0x118AF, 0x118CF); // WARANG CITI CAPITAL LETTER UC, WARANG CITI SMALL LETTER UC +test(0x118B0, 0x118D0); // WARANG CITI CAPITAL LETTER ENN, WARANG CITI SMALL LETTER ENN +test(0x118B1, 0x118D1); // WARANG CITI CAPITAL LETTER ODD, WARANG CITI SMALL LETTER ODD +test(0x118B2, 0x118D2); // WARANG CITI CAPITAL LETTER TTE, WARANG CITI SMALL LETTER TTE +test(0x118B3, 0x118D3); // WARANG CITI CAPITAL LETTER NUNG, WARANG CITI SMALL LETTER NUNG +test(0x118B4, 0x118D4); // WARANG CITI CAPITAL LETTER DA, WARANG CITI SMALL LETTER DA +test(0x118B5, 0x118D5); // WARANG CITI CAPITAL LETTER AT, WARANG CITI SMALL LETTER AT +test(0x118B6, 0x118D6); // WARANG CITI CAPITAL LETTER AM, WARANG CITI SMALL LETTER AM +test(0x118B7, 0x118D7); // WARANG CITI CAPITAL LETTER BU, WARANG CITI SMALL LETTER BU +test(0x118B8, 0x118D8); // WARANG CITI CAPITAL LETTER PU, WARANG CITI SMALL LETTER PU +test(0x118B9, 0x118D9); // WARANG CITI CAPITAL LETTER HIYO, WARANG CITI SMALL LETTER HIYO +test(0x118BA, 0x118DA); // WARANG CITI CAPITAL LETTER HOLO, WARANG CITI SMALL LETTER HOLO +test(0x118BB, 0x118DB); // WARANG CITI CAPITAL LETTER HORR, WARANG CITI SMALL LETTER HORR +test(0x118BC, 0x118DC); // WARANG CITI CAPITAL LETTER HAR, WARANG CITI SMALL LETTER HAR +test(0x118BD, 0x118DD); // WARANG CITI CAPITAL LETTER SSUU, WARANG CITI SMALL LETTER SSUU +test(0x118BE, 0x118DE); // WARANG CITI CAPITAL LETTER SII, WARANG CITI SMALL LETTER SII +test(0x118BF, 0x118DF); // WARANG CITI CAPITAL LETTER VIYO, WARANG CITI SMALL LETTER VIYO +test(0x118C0, 0x118A0); // WARANG CITI SMALL LETTER NGAA, WARANG CITI CAPITAL LETTER NGAA +test(0x118C1, 0x118A1); // WARANG CITI SMALL LETTER A, WARANG CITI CAPITAL LETTER A +test(0x118C2, 0x118A2); // WARANG CITI SMALL LETTER WI, WARANG CITI CAPITAL LETTER WI +test(0x118C3, 0x118A3); // WARANG CITI SMALL LETTER YU, WARANG CITI CAPITAL LETTER YU +test(0x118C4, 0x118A4); // WARANG CITI SMALL LETTER YA, WARANG CITI CAPITAL LETTER YA +test(0x118C5, 0x118A5); // WARANG CITI SMALL LETTER YO, WARANG CITI CAPITAL LETTER YO +test(0x118C6, 0x118A6); // WARANG CITI SMALL LETTER II, WARANG CITI CAPITAL LETTER II +test(0x118C7, 0x118A7); // WARANG CITI SMALL LETTER UU, WARANG CITI CAPITAL LETTER UU +test(0x118C8, 0x118A8); // WARANG CITI SMALL LETTER E, WARANG CITI CAPITAL LETTER E +test(0x118C9, 0x118A9); // WARANG CITI SMALL LETTER O, WARANG CITI CAPITAL LETTER O +test(0x118CA, 0x118AA); // WARANG CITI SMALL LETTER ANG, WARANG CITI CAPITAL LETTER ANG +test(0x118CB, 0x118AB); // WARANG CITI SMALL LETTER GA, WARANG CITI CAPITAL LETTER GA +test(0x118CC, 0x118AC); // WARANG CITI SMALL LETTER KO, WARANG CITI CAPITAL LETTER KO +test(0x118CD, 0x118AD); // WARANG CITI SMALL LETTER ENY, WARANG CITI CAPITAL LETTER ENY +test(0x118CE, 0x118AE); // WARANG CITI SMALL LETTER YUJ, WARANG CITI CAPITAL LETTER YUJ +test(0x118CF, 0x118AF); // WARANG CITI SMALL LETTER UC, WARANG CITI CAPITAL LETTER UC +test(0x118D0, 0x118B0); // WARANG CITI SMALL LETTER ENN, WARANG CITI CAPITAL LETTER ENN +test(0x118D1, 0x118B1); // WARANG CITI SMALL LETTER ODD, WARANG CITI CAPITAL LETTER ODD +test(0x118D2, 0x118B2); // WARANG CITI SMALL LETTER TTE, WARANG CITI CAPITAL LETTER TTE +test(0x118D3, 0x118B3); // WARANG CITI SMALL LETTER NUNG, WARANG CITI CAPITAL LETTER NUNG +test(0x118D4, 0x118B4); // WARANG CITI SMALL LETTER DA, WARANG CITI CAPITAL LETTER DA +test(0x118D5, 0x118B5); // WARANG CITI SMALL LETTER AT, WARANG CITI CAPITAL LETTER AT +test(0x118D6, 0x118B6); // WARANG CITI SMALL LETTER AM, WARANG CITI CAPITAL LETTER AM +test(0x118D7, 0x118B7); // WARANG CITI SMALL LETTER BU, WARANG CITI CAPITAL LETTER BU +test(0x118D8, 0x118B8); // WARANG CITI SMALL LETTER PU, WARANG CITI CAPITAL LETTER PU +test(0x118D9, 0x118B9); // WARANG CITI SMALL LETTER HIYO, WARANG CITI CAPITAL LETTER HIYO +test(0x118DA, 0x118BA); // WARANG CITI SMALL LETTER HOLO, WARANG CITI CAPITAL LETTER HOLO +test(0x118DB, 0x118BB); // WARANG CITI SMALL LETTER HORR, WARANG CITI CAPITAL LETTER HORR +test(0x118DC, 0x118BC); // WARANG CITI SMALL LETTER HAR, WARANG CITI CAPITAL LETTER HAR +test(0x118DD, 0x118BD); // WARANG CITI SMALL LETTER SSUU, WARANG CITI CAPITAL LETTER SSUU +test(0x118DE, 0x118BE); // WARANG CITI SMALL LETTER SII, WARANG CITI CAPITAL LETTER SII +test(0x118DF, 0x118BF); // WARANG CITI SMALL LETTER VIYO, WARANG CITI CAPITAL LETTER VIYO +test(0x16E40, 0x16E60); // MEDEFAIDRIN CAPITAL LETTER M, MEDEFAIDRIN SMALL LETTER M +test(0x16E41, 0x16E61); // MEDEFAIDRIN CAPITAL LETTER S, MEDEFAIDRIN SMALL LETTER S +test(0x16E42, 0x16E62); // MEDEFAIDRIN CAPITAL LETTER V, MEDEFAIDRIN SMALL LETTER V +test(0x16E43, 0x16E63); // MEDEFAIDRIN CAPITAL LETTER W, MEDEFAIDRIN SMALL LETTER W +test(0x16E44, 0x16E64); // MEDEFAIDRIN CAPITAL LETTER ATIU, MEDEFAIDRIN SMALL LETTER ATIU +test(0x16E45, 0x16E65); // MEDEFAIDRIN CAPITAL LETTER Z, MEDEFAIDRIN SMALL LETTER Z +test(0x16E46, 0x16E66); // MEDEFAIDRIN CAPITAL LETTER KP, MEDEFAIDRIN SMALL LETTER KP +test(0x16E47, 0x16E67); // MEDEFAIDRIN CAPITAL LETTER P, MEDEFAIDRIN SMALL LETTER P +test(0x16E48, 0x16E68); // MEDEFAIDRIN CAPITAL LETTER T, MEDEFAIDRIN SMALL LETTER T +test(0x16E49, 0x16E69); // MEDEFAIDRIN CAPITAL LETTER G, MEDEFAIDRIN SMALL LETTER G +test(0x16E4A, 0x16E6A); // MEDEFAIDRIN CAPITAL LETTER F, MEDEFAIDRIN SMALL LETTER F +test(0x16E4B, 0x16E6B); // MEDEFAIDRIN CAPITAL LETTER I, MEDEFAIDRIN SMALL LETTER I +test(0x16E4C, 0x16E6C); // MEDEFAIDRIN CAPITAL LETTER K, MEDEFAIDRIN SMALL LETTER K +test(0x16E4D, 0x16E6D); // MEDEFAIDRIN CAPITAL LETTER A, MEDEFAIDRIN SMALL LETTER A +test(0x16E4E, 0x16E6E); // MEDEFAIDRIN CAPITAL LETTER J, MEDEFAIDRIN SMALL LETTER J +test(0x16E4F, 0x16E6F); // MEDEFAIDRIN CAPITAL LETTER E, MEDEFAIDRIN SMALL LETTER E +test(0x16E50, 0x16E70); // MEDEFAIDRIN CAPITAL LETTER B, MEDEFAIDRIN SMALL LETTER B +test(0x16E51, 0x16E71); // MEDEFAIDRIN CAPITAL LETTER C, MEDEFAIDRIN SMALL LETTER C +test(0x16E52, 0x16E72); // MEDEFAIDRIN CAPITAL LETTER U, MEDEFAIDRIN SMALL LETTER U +test(0x16E53, 0x16E73); // MEDEFAIDRIN CAPITAL LETTER YU, MEDEFAIDRIN SMALL LETTER YU +test(0x16E54, 0x16E74); // MEDEFAIDRIN CAPITAL LETTER L, MEDEFAIDRIN SMALL LETTER L +test(0x16E55, 0x16E75); // MEDEFAIDRIN CAPITAL LETTER Q, MEDEFAIDRIN SMALL LETTER Q +test(0x16E56, 0x16E76); // MEDEFAIDRIN CAPITAL LETTER HP, MEDEFAIDRIN SMALL LETTER HP +test(0x16E57, 0x16E77); // MEDEFAIDRIN CAPITAL LETTER NY, MEDEFAIDRIN SMALL LETTER NY +test(0x16E58, 0x16E78); // MEDEFAIDRIN CAPITAL LETTER X, MEDEFAIDRIN SMALL LETTER X +test(0x16E59, 0x16E79); // MEDEFAIDRIN CAPITAL LETTER D, MEDEFAIDRIN SMALL LETTER D +test(0x16E5A, 0x16E7A); // MEDEFAIDRIN CAPITAL LETTER OE, MEDEFAIDRIN SMALL LETTER OE +test(0x16E5B, 0x16E7B); // MEDEFAIDRIN CAPITAL LETTER N, MEDEFAIDRIN SMALL LETTER N +test(0x16E5C, 0x16E7C); // MEDEFAIDRIN CAPITAL LETTER R, MEDEFAIDRIN SMALL LETTER R +test(0x16E5D, 0x16E7D); // MEDEFAIDRIN CAPITAL LETTER O, MEDEFAIDRIN SMALL LETTER O +test(0x16E5E, 0x16E7E); // MEDEFAIDRIN CAPITAL LETTER AI, MEDEFAIDRIN SMALL LETTER AI +test(0x16E5F, 0x16E7F); // MEDEFAIDRIN CAPITAL LETTER Y, MEDEFAIDRIN SMALL LETTER Y +test(0x16E60, 0x16E40); // MEDEFAIDRIN SMALL LETTER M, MEDEFAIDRIN CAPITAL LETTER M +test(0x16E61, 0x16E41); // MEDEFAIDRIN SMALL LETTER S, MEDEFAIDRIN CAPITAL LETTER S +test(0x16E62, 0x16E42); // MEDEFAIDRIN SMALL LETTER V, MEDEFAIDRIN CAPITAL LETTER V +test(0x16E63, 0x16E43); // MEDEFAIDRIN SMALL LETTER W, MEDEFAIDRIN CAPITAL LETTER W +test(0x16E64, 0x16E44); // MEDEFAIDRIN SMALL LETTER ATIU, MEDEFAIDRIN CAPITAL LETTER ATIU +test(0x16E65, 0x16E45); // MEDEFAIDRIN SMALL LETTER Z, MEDEFAIDRIN CAPITAL LETTER Z +test(0x16E66, 0x16E46); // MEDEFAIDRIN SMALL LETTER KP, MEDEFAIDRIN CAPITAL LETTER KP +test(0x16E67, 0x16E47); // MEDEFAIDRIN SMALL LETTER P, MEDEFAIDRIN CAPITAL LETTER P +test(0x16E68, 0x16E48); // MEDEFAIDRIN SMALL LETTER T, MEDEFAIDRIN CAPITAL LETTER T +test(0x16E69, 0x16E49); // MEDEFAIDRIN SMALL LETTER G, MEDEFAIDRIN CAPITAL LETTER G +test(0x16E6A, 0x16E4A); // MEDEFAIDRIN SMALL LETTER F, MEDEFAIDRIN CAPITAL LETTER F +test(0x16E6B, 0x16E4B); // MEDEFAIDRIN SMALL LETTER I, MEDEFAIDRIN CAPITAL LETTER I +test(0x16E6C, 0x16E4C); // MEDEFAIDRIN SMALL LETTER K, MEDEFAIDRIN CAPITAL LETTER K +test(0x16E6D, 0x16E4D); // MEDEFAIDRIN SMALL LETTER A, MEDEFAIDRIN CAPITAL LETTER A +test(0x16E6E, 0x16E4E); // MEDEFAIDRIN SMALL LETTER J, MEDEFAIDRIN CAPITAL LETTER J +test(0x16E6F, 0x16E4F); // MEDEFAIDRIN SMALL LETTER E, MEDEFAIDRIN CAPITAL LETTER E +test(0x16E70, 0x16E50); // MEDEFAIDRIN SMALL LETTER B, MEDEFAIDRIN CAPITAL LETTER B +test(0x16E71, 0x16E51); // MEDEFAIDRIN SMALL LETTER C, MEDEFAIDRIN CAPITAL LETTER C +test(0x16E72, 0x16E52); // MEDEFAIDRIN SMALL LETTER U, MEDEFAIDRIN CAPITAL LETTER U +test(0x16E73, 0x16E53); // MEDEFAIDRIN SMALL LETTER YU, MEDEFAIDRIN CAPITAL LETTER YU +test(0x16E74, 0x16E54); // MEDEFAIDRIN SMALL LETTER L, MEDEFAIDRIN CAPITAL LETTER L +test(0x16E75, 0x16E55); // MEDEFAIDRIN SMALL LETTER Q, MEDEFAIDRIN CAPITAL LETTER Q +test(0x16E76, 0x16E56); // MEDEFAIDRIN SMALL LETTER HP, MEDEFAIDRIN CAPITAL LETTER HP +test(0x16E77, 0x16E57); // MEDEFAIDRIN SMALL LETTER NY, MEDEFAIDRIN CAPITAL LETTER NY +test(0x16E78, 0x16E58); // MEDEFAIDRIN SMALL LETTER X, MEDEFAIDRIN CAPITAL LETTER X +test(0x16E79, 0x16E59); // MEDEFAIDRIN SMALL LETTER D, MEDEFAIDRIN CAPITAL LETTER D +test(0x16E7A, 0x16E5A); // MEDEFAIDRIN SMALL LETTER OE, MEDEFAIDRIN CAPITAL LETTER OE +test(0x16E7B, 0x16E5B); // MEDEFAIDRIN SMALL LETTER N, MEDEFAIDRIN CAPITAL LETTER N +test(0x16E7C, 0x16E5C); // MEDEFAIDRIN SMALL LETTER R, MEDEFAIDRIN CAPITAL LETTER R +test(0x16E7D, 0x16E5D); // MEDEFAIDRIN SMALL LETTER O, MEDEFAIDRIN CAPITAL LETTER O +test(0x16E7E, 0x16E5E); // MEDEFAIDRIN SMALL LETTER AI, MEDEFAIDRIN CAPITAL LETTER AI +test(0x16E7F, 0x16E5F); // MEDEFAIDRIN SMALL LETTER Y, MEDEFAIDRIN CAPITAL LETTER Y +test(0x1E900, 0x1E922); // ADLAM CAPITAL LETTER ALIF, ADLAM SMALL LETTER ALIF +test(0x1E901, 0x1E923); // ADLAM CAPITAL LETTER DAALI, ADLAM SMALL LETTER DAALI +test(0x1E902, 0x1E924); // ADLAM CAPITAL LETTER LAAM, ADLAM SMALL LETTER LAAM +test(0x1E903, 0x1E925); // ADLAM CAPITAL LETTER MIIM, ADLAM SMALL LETTER MIIM +test(0x1E904, 0x1E926); // ADLAM CAPITAL LETTER BA, ADLAM SMALL LETTER BA +test(0x1E905, 0x1E927); // ADLAM CAPITAL LETTER SINNYIIYHE, ADLAM SMALL LETTER SINNYIIYHE +test(0x1E906, 0x1E928); // ADLAM CAPITAL LETTER PE, ADLAM SMALL LETTER PE +test(0x1E907, 0x1E929); // ADLAM CAPITAL LETTER BHE, ADLAM SMALL LETTER BHE +test(0x1E908, 0x1E92A); // ADLAM CAPITAL LETTER RA, ADLAM SMALL LETTER RA +test(0x1E909, 0x1E92B); // ADLAM CAPITAL LETTER E, ADLAM SMALL LETTER E +test(0x1E90A, 0x1E92C); // ADLAM CAPITAL LETTER FA, ADLAM SMALL LETTER FA +test(0x1E90B, 0x1E92D); // ADLAM CAPITAL LETTER I, ADLAM SMALL LETTER I +test(0x1E90C, 0x1E92E); // ADLAM CAPITAL LETTER O, ADLAM SMALL LETTER O +test(0x1E90D, 0x1E92F); // ADLAM CAPITAL LETTER DHA, ADLAM SMALL LETTER DHA +test(0x1E90E, 0x1E930); // ADLAM CAPITAL LETTER YHE, ADLAM SMALL LETTER YHE +test(0x1E90F, 0x1E931); // ADLAM CAPITAL LETTER WAW, ADLAM SMALL LETTER WAW +test(0x1E910, 0x1E932); // ADLAM CAPITAL LETTER NUN, ADLAM SMALL LETTER NUN +test(0x1E911, 0x1E933); // ADLAM CAPITAL LETTER KAF, ADLAM SMALL LETTER KAF +test(0x1E912, 0x1E934); // ADLAM CAPITAL LETTER YA, ADLAM SMALL LETTER YA +test(0x1E913, 0x1E935); // ADLAM CAPITAL LETTER U, ADLAM SMALL LETTER U +test(0x1E914, 0x1E936); // ADLAM CAPITAL LETTER JIIM, ADLAM SMALL LETTER JIIM +test(0x1E915, 0x1E937); // ADLAM CAPITAL LETTER CHI, ADLAM SMALL LETTER CHI +test(0x1E916, 0x1E938); // ADLAM CAPITAL LETTER HA, ADLAM SMALL LETTER HA +test(0x1E917, 0x1E939); // ADLAM CAPITAL LETTER QAAF, ADLAM SMALL LETTER QAAF +test(0x1E918, 0x1E93A); // ADLAM CAPITAL LETTER GA, ADLAM SMALL LETTER GA +test(0x1E919, 0x1E93B); // ADLAM CAPITAL LETTER NYA, ADLAM SMALL LETTER NYA +test(0x1E91A, 0x1E93C); // ADLAM CAPITAL LETTER TU, ADLAM SMALL LETTER TU +test(0x1E91B, 0x1E93D); // ADLAM CAPITAL LETTER NHA, ADLAM SMALL LETTER NHA +test(0x1E91C, 0x1E93E); // ADLAM CAPITAL LETTER VA, ADLAM SMALL LETTER VA +test(0x1E91D, 0x1E93F); // ADLAM CAPITAL LETTER KHA, ADLAM SMALL LETTER KHA +test(0x1E91E, 0x1E940); // ADLAM CAPITAL LETTER GBE, ADLAM SMALL LETTER GBE +test(0x1E91F, 0x1E941); // ADLAM CAPITAL LETTER ZAL, ADLAM SMALL LETTER ZAL +test(0x1E920, 0x1E942); // ADLAM CAPITAL LETTER KPO, ADLAM SMALL LETTER KPO +test(0x1E921, 0x1E943); // ADLAM CAPITAL LETTER SHA, ADLAM SMALL LETTER SHA +test(0x1E922, 0x1E900); // ADLAM SMALL LETTER ALIF, ADLAM CAPITAL LETTER ALIF +test(0x1E923, 0x1E901); // ADLAM SMALL LETTER DAALI, ADLAM CAPITAL LETTER DAALI +test(0x1E924, 0x1E902); // ADLAM SMALL LETTER LAAM, ADLAM CAPITAL LETTER LAAM +test(0x1E925, 0x1E903); // ADLAM SMALL LETTER MIIM, ADLAM CAPITAL LETTER MIIM +test(0x1E926, 0x1E904); // ADLAM SMALL LETTER BA, ADLAM CAPITAL LETTER BA +test(0x1E927, 0x1E905); // ADLAM SMALL LETTER SINNYIIYHE, ADLAM CAPITAL LETTER SINNYIIYHE +test(0x1E928, 0x1E906); // ADLAM SMALL LETTER PE, ADLAM CAPITAL LETTER PE +test(0x1E929, 0x1E907); // ADLAM SMALL LETTER BHE, ADLAM CAPITAL LETTER BHE +test(0x1E92A, 0x1E908); // ADLAM SMALL LETTER RA, ADLAM CAPITAL LETTER RA +test(0x1E92B, 0x1E909); // ADLAM SMALL LETTER E, ADLAM CAPITAL LETTER E +test(0x1E92C, 0x1E90A); // ADLAM SMALL LETTER FA, ADLAM CAPITAL LETTER FA +test(0x1E92D, 0x1E90B); // ADLAM SMALL LETTER I, ADLAM CAPITAL LETTER I +test(0x1E92E, 0x1E90C); // ADLAM SMALL LETTER O, ADLAM CAPITAL LETTER O +test(0x1E92F, 0x1E90D); // ADLAM SMALL LETTER DHA, ADLAM CAPITAL LETTER DHA +test(0x1E930, 0x1E90E); // ADLAM SMALL LETTER YHE, ADLAM CAPITAL LETTER YHE +test(0x1E931, 0x1E90F); // ADLAM SMALL LETTER WAW, ADLAM CAPITAL LETTER WAW +test(0x1E932, 0x1E910); // ADLAM SMALL LETTER NUN, ADLAM CAPITAL LETTER NUN +test(0x1E933, 0x1E911); // ADLAM SMALL LETTER KAF, ADLAM CAPITAL LETTER KAF +test(0x1E934, 0x1E912); // ADLAM SMALL LETTER YA, ADLAM CAPITAL LETTER YA +test(0x1E935, 0x1E913); // ADLAM SMALL LETTER U, ADLAM CAPITAL LETTER U +test(0x1E936, 0x1E914); // ADLAM SMALL LETTER JIIM, ADLAM CAPITAL LETTER JIIM +test(0x1E937, 0x1E915); // ADLAM SMALL LETTER CHI, ADLAM CAPITAL LETTER CHI +test(0x1E938, 0x1E916); // ADLAM SMALL LETTER HA, ADLAM CAPITAL LETTER HA +test(0x1E939, 0x1E917); // ADLAM SMALL LETTER QAAF, ADLAM CAPITAL LETTER QAAF +test(0x1E93A, 0x1E918); // ADLAM SMALL LETTER GA, ADLAM CAPITAL LETTER GA +test(0x1E93B, 0x1E919); // ADLAM SMALL LETTER NYA, ADLAM CAPITAL LETTER NYA +test(0x1E93C, 0x1E91A); // ADLAM SMALL LETTER TU, ADLAM CAPITAL LETTER TU +test(0x1E93D, 0x1E91B); // ADLAM SMALL LETTER NHA, ADLAM CAPITAL LETTER NHA +test(0x1E93E, 0x1E91C); // ADLAM SMALL LETTER VA, ADLAM CAPITAL LETTER VA +test(0x1E93F, 0x1E91D); // ADLAM SMALL LETTER KHA, ADLAM CAPITAL LETTER KHA +test(0x1E940, 0x1E91E); // ADLAM SMALL LETTER GBE, ADLAM CAPITAL LETTER GBE +test(0x1E941, 0x1E91F); // ADLAM SMALL LETTER ZAL, ADLAM CAPITAL LETTER ZAL +test(0x1E942, 0x1E920); // ADLAM SMALL LETTER KPO, ADLAM CAPITAL LETTER KPO +test(0x1E943, 0x1E921); // ADLAM SMALL LETTER SHA, ADLAM CAPITAL LETTER SHA + diff --git a/test/staging/sm/RegExp/unicode-lead-trail.js b/test/staging/sm/RegExp/unicode-lead-trail.js new file mode 100644 index 0000000000..72ad453d41 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-lead-trail.js @@ -0,0 +1,227 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- lead and trail patterns in RegExpUnicodeEscapeSequence."; + +print(BUGNUMBER + ": " + summary); + +// ==== standalone ==== + +assert.compareArray(/\uD83D\uDC38/u.exec("\u{1F438}"), + ["\u{1F438}"]); + +// no unicode flag +assert.compareArray(/\uD83D\uDC38/.exec("\u{1F438}"), + ["\u{1F438}"]); + +// RegExp constructor +assert.compareArray(new RegExp("\\uD83D\\uDC38", "u").exec("\u{1F438}"), + ["\u{1F438}"]); + +// RegExp constructor, no unicode flag +assert.compareArray(new RegExp("\\uD83D\\uDC38", "").exec("\u{1F438}"), + ["\u{1F438}"]); + +// ==== ? ==== + +assert.compareArray(/\uD83D\uDC38?/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\uD83D\uDC38?/u.exec(""), + [""]); + +// lead-only target +assert.compareArray(/\uD83D\uDC38?/u.exec("\uD83D"), + [""]); + +// no unicode flag +assert.compareArray(/\uD83D\uDC38?/.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(/\uD83D\uDC38?/.exec(""), + null); + +assert.compareArray(/\uD83D\uDC38?/.exec("\uD83D"), + ["\uD83D"]); + +// RegExp constructor +assert.compareArray(new RegExp("\\uD83D\\uDC38?", "u").exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(new RegExp("\\uD83D\\uDC38?", "u").exec(""), + [""]); + +assert.compareArray(new RegExp("\\uD83D\\uDC38?", "u").exec("\uD83D"), + [""]); + +// RegExp constructor, no unicode flag +assert.compareArray(new RegExp("\\uD83D\\uDC38?", "").exec("\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(new RegExp("\\uD83D\\uDC38?", "").exec(""), + null); + +assert.compareArray(new RegExp("\\uD83D\\uDC38?", "").exec("\uD83D"), + ["\uD83D"]); + +// ==== + ==== + +assert.compareArray(/\uD83D\uDC38+/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\uD83D\uDC38+/u.exec("\u{1F438}\u{1F438}"), + ["\u{1F438}\u{1F438}"]); +assert.sameValue(/\uD83D\uDC38+/u.exec(""), + null); + +// lead-only target +assert.sameValue(/\uD83D\uDC38+/u.exec("\uD83D"), + null); +assert.compareArray(/\uD83D\uDC38+/u.exec("\uD83D\uDC38\uDC38"), + ["\uD83D\uDC38"]); + +// no unicode flag +assert.compareArray(/\uD83D\uDC38+/.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\uD83D\uDC38+/.exec("\u{1F438}\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(/\uD83D\uDC38+/.exec("\uD83D"), + null); +assert.compareArray(/\uD83D\uDC38+/.exec("\uD83D\uDC38\uDC38"), + ["\uD83D\uDC38\uDC38"]); +assert.sameValue(/\uD83D\uDC38+/.exec(""), + null); + +// ==== * ==== + +assert.compareArray(/\uD83D\uDC38*/u.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\uD83D\uDC38*/u.exec("\u{1F438}\u{1F438}"), + ["\u{1F438}\u{1F438}"]); +assert.compareArray(/\uD83D\uDC38*/u.exec(""), + [""]); + +// lead-only target +assert.compareArray(/\uD83D\uDC38*/u.exec("\uD83D"), + [""]); +assert.compareArray(/\uD83D\uDC38*/u.exec("\uD83D\uDC38\uDC38"), + ["\uD83D\uDC38"]); + +// no unicode flag +assert.compareArray(/\uD83D\uDC38*/.exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\uD83D\uDC38*/.exec("\u{1F438}\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(/\uD83D\uDC38*/.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/\uD83D\uDC38*/.exec("\uD83D\uDC38\uDC38"), + ["\uD83D\uDC38\uDC38"]); +assert.sameValue(/\uD83D\uDC38*/.exec(""), + null); + +// ==== lead-only ==== + +// match only non-surrogate pair +assert.compareArray(/\uD83D/u.exec("\uD83D\uDBFF"), + ["\uD83D"]); +assert.sameValue(/\uD83D/u.exec("\uD83D\uDC00"), + null); +assert.sameValue(/\uD83D/u.exec("\uD83D\uDFFF"), + null); +assert.compareArray(/\uD83D/u.exec("\uD83D\uE000"), + ["\uD83D"]); + +// match before non-tail char +assert.compareArray(/\uD83D/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/\uD83D/u.exec("\uD83DA"), + ["\uD83D"]); + +// no unicode flag +assert.compareArray(/\uD83D/.exec("\uD83D\uDBFF"), + ["\uD83D"]); +assert.compareArray(/\uD83D/.exec("\uD83D\uDC00"), + ["\uD83D"]); +assert.compareArray(/\uD83D/.exec("\uD83D\uDFFF"), + ["\uD83D"]); +assert.compareArray(/\uD83D/.exec("\uD83D\uE000"), + ["\uD83D"]); +assert.compareArray(/\uD83D/.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/\uD83D/.exec("\uD83DA"), + ["\uD83D"]); + +// ==== trail-only ==== + +// match only non-surrogate pair +assert.compareArray(/\uDC38/u.exec("\uD7FF\uDC38"), + ["\uDC38"]); +assert.sameValue(/\uDC38/u.exec("\uD800\uDC38"), + null); +assert.sameValue(/\uDC38/u.exec("\uDBFF\uDC38"), + null); +assert.compareArray(/\uDC38/u.exec("\uDC00\uDC38"), + ["\uDC38"]); + +// match after non-lead char +assert.compareArray(/\uDC38/u.exec("\uDC38"), + ["\uDC38"]); +assert.compareArray(/\uDC38/u.exec("A\uDC38"), + ["\uDC38"]); + +// no unicode flag +assert.compareArray(/\uDC38/.exec("\uD7FF\uDC38"), + ["\uDC38"]); +assert.compareArray(/\uDC38/.exec("\uD800\uDC38"), + ["\uDC38"]); +assert.compareArray(/\uDC38/.exec("\uDBFF\uDC38"), + ["\uDC38"]); +assert.compareArray(/\uDC38/.exec("\uDC00\uDC38"), + ["\uDC38"]); +assert.compareArray(/\uDC38/.exec("\uDC38"), + ["\uDC38"]); +assert.compareArray(/\uDC38/.exec("A\uDC38"), + ["\uDC38"]); + +// ==== invalid trail ==== + +assert.compareArray(/\uD83D\u3042*/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/\uD83D\u3042*/u.exec("\uD83D\u3042"), + ["\uD83D\u3042"]); +assert.compareArray(/\uD83D\u3042*/u.exec("\uD83D\u3042\u3042"), + ["\uD83D\u3042\u3042"]); + +assert.compareArray(/\uD83D\u{3042}*/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/\uD83D\u{3042}*/u.exec("\uD83D\u3042"), + ["\uD83D\u3042"]); +assert.compareArray(/\uD83D\u{3042}*/u.exec("\uD83D\u3042\u3042"), + ["\uD83D\u3042\u3042"]); + +assert.compareArray(/\uD83DA*/u.exec("\uD83D"), + ["\uD83D"]); +assert.compareArray(/\uD83DA*/u.exec("\uD83DA"), + ["\uD83DA"]); +assert.compareArray(/\uD83DA*/u.exec("\uD83DAA"), + ["\uD83DAA"]); + +// ==== wrong patterns ==== + +assertThrowsInstanceOf(() => eval(`/\\u/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u0/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u00/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u000/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u000G/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\u0.00/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\uD83D\\u/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\uD83D\\u0/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\uD83D\\u00/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\uD83D\\u000/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\uD83D\\u000G/u`), SyntaxError); +assertThrowsInstanceOf(() => eval(`/\\uD83D\\u0.00/u`), SyntaxError); + diff --git a/test/staging/sm/RegExp/unicode-raw.js b/test/staging/sm/RegExp/unicode-raw.js new file mode 100644 index 0000000000..ed7bd6f3e0 --- /dev/null +++ b/test/staging/sm/RegExp/unicode-raw.js @@ -0,0 +1,148 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-RegExp-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- raw unicode."; + +print(BUGNUMBER + ": " + summary); + +// ==== standalone ==== + +assert.compareArray(eval(`/\uD83D\uDC38/u`).exec("\u{1F438}"), + ["\u{1F438}"]); + +// no unicode flag +assert.compareArray(eval(`/\uD83D\uDC38/`).exec("\u{1F438}"), + ["\u{1F438}"]); + +// escaped (lead) +assert.sameValue(eval(`/\\uD83D\uDC38/u`).exec("\u{1F438}"), + null); +assert.sameValue(eval(`/\\u{D83D}\uDC38/u`).exec("\u{1F438}"), + null); + +// escaped (trail) +assert.sameValue(eval(`/\uD83D\\uDC38/u`).exec("\u{1F438}"), + null); +assert.sameValue(eval(`/\uD83D\\u{DC38}/u`).exec("\u{1F438}"), + null); + +// escaped (lead), no unicode flag +assert.compareArray(eval(`/\\uD83D\uDC38/`).exec("\u{1F438}"), + ["\u{1F438}"]); + +// escaped (trail), no unicode flag +assert.compareArray(eval(`/\uD83D\\uDC38/`).exec("\u{1F438}"), + ["\u{1F438}"]); + +// ==== RegExp constructor ==== + +assert.compareArray(new RegExp("\uD83D\uDC38", "u").exec("\u{1F438}"), + ["\u{1F438}"]); + +// no unicode flag +assert.compareArray(new RegExp("\uD83D\uDC38", "").exec("\u{1F438}"), + ["\u{1F438}"]); + +// escaped(lead) +assert.sameValue(new RegExp("\\uD83D\uDC38", "u").exec("\u{1F438}"), + null); +assert.sameValue(new RegExp("\\u{D83D}\uDC38", "u").exec("\u{1F438}"), + null); + +// escaped(trail) +assert.sameValue(new RegExp("\uD83D\\uDC38", "u").exec("\u{1F438}"), + null); +assert.sameValue(new RegExp("\uD83D\\u{DC38}", "u").exec("\u{1F438}"), + null); + +// escaped(lead), no unicode flag +assert.compareArray(new RegExp("\\uD83D\uDC38", "").exec("\u{1F438}"), + ["\u{1F438}"]); + +// escaped(trail), no unicode flag +assert.compareArray(new RegExp("\uD83D\\uDC38", "").exec("\u{1F438}"), + ["\u{1F438}"]); + +// ==== ? ==== + +assert.compareArray(eval(`/\uD83D\uDC38?/u`).exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(eval(`/\uD83D\uDC38?/u`).exec(""), + [""]); + +assert.compareArray(eval(`/\uD83D\uDC38?/u`).exec("\uD83D"), + [""]); + +// no unicode flag +assert.compareArray(eval(`/\uD83D\uDC38?/`).exec("\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(eval(`/\uD83D\uDC38?/`).exec(""), + null); + +assert.compareArray(eval(`/\uD83D\uDC38?/`).exec("\uD83D"), + ["\uD83D"]); + +// escaped (lead) +assert.sameValue(eval(`/\\uD83D\uDC38?/u`).exec("\u{1F438}"), + null); +assert.sameValue(eval(`/\\uD83D\uDC38?/u`).exec(""), + null); + +assert.compareArray(eval(`/\\uD83D\uDC38?/u`).exec("\uD83D"), + ["\uD83D"]); + +// escaped (trail) +assert.sameValue(eval(`/\uD83D\\uDC38?/u`).exec("\u{1F438}"), + null); +assert.sameValue(eval(`/\uD83D\\uDC38?/u`).exec(""), + null); + +assert.compareArray(eval(`/\uD83D\\uDC38?/u`).exec("\uD83D"), + ["\uD83D"]); + +// escaped (lead), no unicode flag +assert.compareArray(eval(`/\\uD83D\uDC38?/`).exec("\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(eval(`/\\uD83D\uDC38?/`).exec(""), + null); + +assert.compareArray(eval(`/\\uD83D\uDC38?/`).exec("\uD83D"), + ["\uD83D"]); + +// escaped (trail), no unicode flag +assert.compareArray(eval(`/\uD83D\\uDC38?/`).exec("\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(eval(`/\uD83D\\uDC38?/`).exec(""), + null); + +assert.compareArray(eval(`/\uD83D\\uDC38?/`).exec("\uD83D"), + ["\uD83D"]); + +// ==== RegExp constructor, ? ==== + +assert.compareArray(new RegExp("\uD83D\uDC38?", "u").exec("\u{1F438}"), + ["\u{1F438}"]); +assert.compareArray(new RegExp("\uD83D\uDC38?", "u").exec(""), + [""]); + +assert.compareArray(new RegExp("\uD83D\uDC38?", "u").exec("\uD83D"), + [""]); + +// no unicode flag +assert.compareArray(new RegExp("\uD83D\uDC38?", "").exec("\u{1F438}"), + ["\u{1F438}"]); +assert.sameValue(new RegExp("\uD83D\uDC38?", "").exec(""), + null); + +assert.compareArray(new RegExp("\uD83D\uDC38?", "").exec("\uD83D"), + ["\uD83D"]); + diff --git a/test/staging/sm/Set/difference.js b/test/staging/sm/Set/difference.js new file mode 100644 index 0000000000..234704f4d0 --- /dev/null +++ b/test/staging/sm/Set/difference.js @@ -0,0 +1,470 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-Set-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assert.sameValue(typeof Set.prototype.difference, "function"); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.difference, "length"), { + value: 1, writable: false, enumerable: false, configurable: true, +}); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.difference, "name"), { + value: "difference", writable: false, enumerable: false, configurable: true, +}); + +const emptySet = new Set(); +const emptySetLike = new SetLike(); +const emptyMap = new Map(); + +function asMap(values) { + return new Map(values.map(v => [v, v])); +} + +// Difference of two empty sets is an empty set. +assertSetContainsExactOrderedItems(emptySet.difference(emptySet), []); +assertSetContainsExactOrderedItems(emptySet.difference(emptySetLike), []); +assertSetContainsExactOrderedItems(emptySet.difference(emptyMap), []); + +// Test native Set, Set-like, and Map objects. +for (let values of [ + [], [1], [1, 2], [1, true, null, {}], +]) { + // Difference with an empty set. + assertSetContainsExactOrderedItems(new Set(values).difference(emptySet), values); + assertSetContainsExactOrderedItems(new Set(values).difference(emptySetLike), values); + assertSetContainsExactOrderedItems(new Set(values).difference(emptyMap), values); + assertSetContainsExactOrderedItems(emptySet.difference(new Set(values)), []); + assertSetContainsExactOrderedItems(emptySet.difference(new SetLike(values)), []); + assertSetContainsExactOrderedItems(emptySet.difference(asMap(values)), []); + + // Two sets with the exact same values. + assertSetContainsExactOrderedItems(new Set(values).difference(new Set(values)), []); + assertSetContainsExactOrderedItems(new Set(values).difference(new SetLike(values)), []); + assertSetContainsExactOrderedItems(new Set(values).difference(asMap(values)), []); + + // Difference of the same set object. + let set = new Set(values); + assertSetContainsExactOrderedItems(set.difference(set), []); +} + +// Check property accesses are in the correct order. +{ + let log = []; + + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next() { + log.push("next()"); + return {done: true}; + } + }, log); + + let {proxy: setLike} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.difference(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Input has more elements than the this-value. + sizeValue = 1; + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.difference(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Input has fewer elements than the this-value. + sizeValue = 0; + + log.length = 0; + assertSetContainsExactOrderedItems(new Set([1]).difference(setLike), [1]); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + "next()", + ]); +} + +// Check input validation. +{ + let log = []; + + const nonCallable = {}; + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next: nonCallable, + }, log); + + let {proxy: setLike, obj: setLikeObj} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.difference(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + log.length = 0; + assertThrowsInstanceOf(() => new Set([1]).difference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + ]); + + // Change |keys| to return a non-object value. + setLikeObj.keys = () => 123; + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.difference(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + log.length = 0; + assertThrowsInstanceOf(() => new Set([1]).difference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |keys| to a non-callable value. + setLikeObj.keys = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.difference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |has| to a non-callable value. + setLikeObj.has = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.difference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + ]); + + // Change |size| to NaN. + sizeValue = NaN; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.difference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); + + // Change |size| to undefined. + sizeValue = undefined; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.difference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); +} + +// Doesn't accept Array as an input. +assertThrowsInstanceOf(() => emptySet.difference([]), TypeError); + +// Works with Set subclasses. +{ + class MySet extends Set {} + + let myEmptySet = new MySet; + + assertSetContainsExactOrderedItems(emptySet.difference(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.difference(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.difference(emptySet), []); +} + +// Doesn't access any properties on the this-value. +{ + let log = []; + + let {proxy: setProto} = LoggingProxy(Set.prototype, log); + + let set = new Set([1, 2, 3]); + Object.setPrototypeOf(set, setProto); + + assertSetContainsExactOrderedItems(Set.prototype.difference.call(set, emptySet), [1, 2, 3]); + + assert.compareArray(log, []); +} + +// Throws a TypeError when the this-value isn't a Set object. +for (let thisValue of [ + null, undefined, true, "", {}, new Map, new Proxy(new Set, {}), +]) { + assertThrowsInstanceOf(() => Set.prototype.difference.call(thisValue, emptySet), TypeError); +} + +// Doesn't return the original Set object. +{ + let set = new Set([1]); + assert.sameValue(set.difference(emptySet) !== set, true); + assert.sameValue(set.difference(new Set([2])) !== set, true); +} + +// Test insertion order +{ + let set = new Set([1, 2, 3]); + + // Case 1: Input is empty. + assertSetContainsExactOrderedItems(set.difference(new Set([])), [1, 2, 3]); + + // Case 2: Input has fewer elements. + assertSetContainsExactOrderedItems(set.difference(new Set([1, 2])), [3]); + assertSetContainsExactOrderedItems(set.difference(new Set([2, 1])), [3]); + assertSetContainsExactOrderedItems(set.difference(new Set([11, 2])), [1, 3]); + assertSetContainsExactOrderedItems(set.difference(new Set([2, 11])), [1, 3]); + + // Case 3: Input has same number of elements. + assertSetContainsExactOrderedItems(set.difference(new Set([1, 2, 3])), []); + assertSetContainsExactOrderedItems(set.difference(new Set([2, 3, 1])), []); + assertSetContainsExactOrderedItems(set.difference(new Set([3, 2, 1])), []); + assertSetContainsExactOrderedItems(set.difference(new Set([11, 2, 3])), [1]); + assertSetContainsExactOrderedItems(set.difference(new Set([2, 3, 11])), [1]); + assertSetContainsExactOrderedItems(set.difference(new Set([3, 2, 11])), [1]); + + // Case 4: Input has more elements. + assertSetContainsExactOrderedItems(set.difference(new Set([2, 3, 4, 5])), [1]); + assertSetContainsExactOrderedItems(set.difference(new Set([4, 5, 2, 3])), [1]); + assertSetContainsExactOrderedItems(set.difference(new Set([5, 4, 3, 2])), [1]); +} + +// Calls |has| when the this-value has fewer or the same number of keys. +{ + const keys = [1, 2, 3]; + + for (let size of [keys.length, 100, Infinity]) { + let i = 0; + + let setLike = { + size, + has(v) { + assert.sameValue(this, setLike); + assert.sameValue(arguments.length, 1); + assert.sameValue(i < keys.length, true); + assert.sameValue(v, keys[i++]); + return true; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assertSetContainsExactOrderedItems(new Set(keys).difference(setLike), []); + } +} + +// Calls |keys| when the this-value has more keys. +{ + const keys = [1, 2, 3]; + + for (let size of [0, 1, 2]) { + let i = 0; + + let setLike = { + size, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + assert.sameValue(this, setLike); + assert.sameValue(arguments.length, 0); + + let iterator = { + next() { + assert.sameValue(this, iterator); + assert.sameValue(arguments.length, 0); + if (i < keys.length) { + return { + done: false, + value: keys[i++], + }; + } + return { + done: true, + get value() { + throw new Error("Unexpected call to |value| getter"); + }, + }; + } + }; + + return iterator; + }, + }; + + assertSetContainsExactOrderedItems(new Set(keys).difference(setLike), []); + } +} + +// Test result set order when the this-value was modified. +{ + let originalKeys = null; + + let setLike = { + size: 100, + has(v) { + if (!originalKeys) { + assertSetContainsExactOrderedItems(set, [1, 2, 3, 4]); + + originalKeys = [...set.keys()]; + + // Remove all existing items. + set.clear(); + + // Add new keys 11 and 22. + set.add(11); + set.add(22); + } + + // |has| is called exactly once for each key. + assert.sameValue(originalKeys.includes(v), true); + + originalKeys.splice(originalKeys.indexOf(v), 1); + + return true; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + let set = new Set([1, 2, 3, 4]); + + assertSetContainsExactOrderedItems(set.difference(setLike), []); + assertSetContainsExactOrderedItems(set, [11, 22]); + assert.compareArray(originalKeys, []); +} +{ + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + *keys() { + assertSetContainsExactOrderedItems(set, [1, 2, 3, 4]); + + let originalKeys = [...set.keys()]; + + // Remove all existing items. + set.clear(); + + // Add new keys 11 and 22. + set.add(11); + set.add(22); + + // Yield the original keys of |set|. + yield* originalKeys; + }, + }; + + let set = new Set([1, 2, 3, 4]); + + assertSetContainsExactOrderedItems(set.difference(setLike), []); + assertSetContainsExactOrderedItems(set, [11, 22]); +} + +// Tests which modify any built-ins should appear last, because modifications may disable +// optimised code paths. + +// Doesn't call the built-in |Set.prototype.{has, keys, size}| functions. +const SetPrototypeHas = Object.getOwnPropertyDescriptor(Set.prototype, "has"); +const SetPrototypeKeys = Object.getOwnPropertyDescriptor(Set.prototype, "keys"); +const SetPrototypeSize = Object.getOwnPropertyDescriptor(Set.prototype, "size"); + +delete Set.prototype.has; +delete Set.prototype.keys; +delete Set.prototype.size; + +try { + let set = new Set([1, 2, 3]); + let other = new SetLike([1, 2, 3]); + assertSetContainsExactOrderedItems(set.difference(other), []); +} finally { + Object.defineProperty(Set.prototype, "has", SetPrototypeHas); + Object.defineProperty(Set.prototype, "keys", SetPrototypeKeys); + Object.defineProperty(Set.prototype, "size", SetPrototypeSize); +} + diff --git a/test/staging/sm/Set/intersection.js b/test/staging/sm/Set/intersection.js new file mode 100644 index 0000000000..eff9a8d363 --- /dev/null +++ b/test/staging/sm/Set/intersection.js @@ -0,0 +1,486 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-Set-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assert.sameValue(typeof Set.prototype.intersection, "function"); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.intersection, "length"), { + value: 1, writable: false, enumerable: false, configurable: true, +}); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.intersection, "name"), { + value: "intersection", writable: false, enumerable: false, configurable: true, +}); + +const emptySet = new Set(); +const emptySetLike = new SetLike(); +const emptyMap = new Map(); + +function asMap(values) { + return new Map(values.map(v => [v, v])); +} + +// Intersection of two empty sets is an empty set. +assertSetContainsExactOrderedItems(emptySet.intersection(emptySet), []); +assertSetContainsExactOrderedItems(emptySet.intersection(emptySetLike), []); +assertSetContainsExactOrderedItems(emptySet.intersection(emptyMap), []); + +// Test native Set, Set-like, and Map objects. +for (let values of [ + [], [1], [1, 2], [1, true, null, {}], +]) { + // Intersection with an empty set. + assertSetContainsExactOrderedItems(new Set(values).intersection(emptySet), []); + assertSetContainsExactOrderedItems(new Set(values).intersection(emptySetLike), []); + assertSetContainsExactOrderedItems(new Set(values).intersection(emptyMap), []); + assertSetContainsExactOrderedItems(emptySet.intersection(new Set(values)), []); + assertSetContainsExactOrderedItems(emptySet.intersection(new SetLike(values)), []); + assertSetContainsExactOrderedItems(emptySet.intersection(asMap(values)), []); + + // Two sets with the exact same values. + assertSetContainsExactOrderedItems(new Set(values).intersection(new Set(values)), values); + assertSetContainsExactOrderedItems(new Set(values).intersection(new SetLike(values)), values); + assertSetContainsExactOrderedItems(new Set(values).intersection(asMap(values)), values); + + // Intersection of the same set object. + let set = new Set(values); + assertSetContainsExactOrderedItems(set.intersection(set), values); +} + +// Check property accesses are in the correct order. +{ + let log = []; + + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next() { + log.push("next()"); + return {done: true}; + } + }, log); + + let {proxy: setLike} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.intersection(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Input has more elements than the this-value. + sizeValue = 1; + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.intersection(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Input has fewer elements than the this-value. + sizeValue = 0; + + log.length = 0; + assertSetContainsExactOrderedItems(new Set([1]).intersection(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + "next()", + ]); +} + +// Check input validation. +{ + let log = []; + + const nonCallable = {}; + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next: nonCallable, + }, log); + + let {proxy: setLike, obj: setLikeObj} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.intersection(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + log.length = 0; + assertThrowsInstanceOf(() => new Set([1]).intersection(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + ]); + + // Change |keys| to return a non-object value. + setLikeObj.keys = () => 123; + + log.length = 0; + assertSetContainsExactOrderedItems(emptySet.intersection(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + log.length = 0; + assertThrowsInstanceOf(() => new Set([1]).intersection(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |keys| to a non-callable value. + setLikeObj.keys = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.intersection(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |has| to a non-callable value. + setLikeObj.has = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.intersection(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + ]); + + // Change |size| to NaN. + sizeValue = NaN; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.intersection(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); + + // Change |size| to undefined. + sizeValue = undefined; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.intersection(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); +} + +// Doesn't accept Array as an input. +assertThrowsInstanceOf(() => emptySet.intersection([]), TypeError); + +// Works with Set subclasses. +{ + class MySet extends Set {} + + let myEmptySet = new MySet; + + assertSetContainsExactOrderedItems(emptySet.intersection(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.intersection(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.intersection(emptySet), []); +} + +// Doesn't access any properties on the this-value. +{ + let log = []; + + let {proxy: setProto} = LoggingProxy(Set.prototype, log); + + let set = new Set([1, 2, 3]); + Object.setPrototypeOf(set, setProto); + + assertSetContainsExactOrderedItems(Set.prototype.intersection.call(set, emptySet), []); + + assert.compareArray(log, []); +} + +// Throws a TypeError when the this-value isn't a Set object. +for (let thisValue of [ + null, undefined, true, "", {}, new Map, new Proxy(new Set, {}), +]) { + assertThrowsInstanceOf(() => Set.prototype.intersection.call(thisValue, emptySet), TypeError); +} + +// Doesn't return the original Set object. +{ + let set = new Set([1]); + assert.sameValue(set.intersection(emptySet) !== set, true); + assert.sameValue(set.intersection(new Set([2])) !== set, true); +} + +// Test insertion order +{ + let set = new Set([1, 2, 3]); + + // Case 1: Input is empty. + assertSetContainsExactOrderedItems(set.intersection(new Set([])), []); + + // Case 2: Input has fewer elements. + assertSetContainsExactOrderedItems(set.intersection(new Set([1, 2])), [1, 2]); + assertSetContainsExactOrderedItems(set.intersection(new Set([2, 1])), [2, 1]); + assertSetContainsExactOrderedItems(set.intersection(new Set([11, 2])), [2]); + assertSetContainsExactOrderedItems(set.intersection(new Set([2, 11])), [2]); + + // Case 3: Input has same number of elements. + assertSetContainsExactOrderedItems(set.intersection(new Set([1, 2, 3])), [1, 2, 3]); + assertSetContainsExactOrderedItems(set.intersection(new Set([2, 3, 1])), [1, 2, 3]); + assertSetContainsExactOrderedItems(set.intersection(new Set([3, 2, 1])), [1, 2, 3]); + assertSetContainsExactOrderedItems(set.intersection(new Set([11, 2, 3])), [2, 3]); + assertSetContainsExactOrderedItems(set.intersection(new Set([2, 3, 11])), [2, 3]); + assertSetContainsExactOrderedItems(set.intersection(new Set([3, 2, 11])), [2, 3]); + + // Case 4: Input has more elements. + assertSetContainsExactOrderedItems(set.intersection(new Set([2, 3, 4, 5])), [2, 3]); + assertSetContainsExactOrderedItems(set.intersection(new Set([4, 5, 2, 3])), [2, 3]); + assertSetContainsExactOrderedItems(set.intersection(new Set([5, 4, 3, 2])), [2, 3]); +} + +// Calls |has| when the this-value has fewer or the same number of keys. +{ + const keys = [1, 2, 3]; + + for (let size of [keys.length, 100, Infinity]) { + let i = 0; + + let setLike = { + size, + has(v) { + assert.sameValue(this, setLike); + assert.sameValue(arguments.length, 1); + assert.sameValue(i < keys.length, true); + assert.sameValue(v, keys[i++]); + return true; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assertSetContainsExactOrderedItems(new Set(keys).intersection(setLike), keys); + } +} + +// Calls |keys| when the this-value has more keys. +{ + const keys = [1, 2, 3]; + + for (let size of [0, 1, 2]) { + let i = 0; + + let setLike = { + size, + has() { + throw new Error("Unexpected call to |keys| method"); + }, + keys() { + assert.sameValue(this, setLike); + assert.sameValue(arguments.length, 0); + + let iterator = { + next() { + assert.sameValue(this, iterator); + assert.sameValue(arguments.length, 0); + if (i < keys.length) { + return { + done: false, + value: keys[i++], + }; + } + return { + done: true, + get value() { + throw new Error("Unexpected call to |value| getter"); + }, + }; + } + }; + + return iterator; + }, + }; + + assertSetContainsExactOrderedItems(new Set(keys).intersection(setLike), keys); + } +} + +// Test result set order when the this-value was modified. +{ + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + *keys() { + // Yield the same keys as in |set|. + yield* set.keys(); + + // Remove all existing items. + set.clear(); + + // Re-add keys 2 and 3, but in reversed order. + set.add(3); + set.add(2); + + // Additionally add 99. + set.add(99); + }, + }; + + let set = new Set([1, 2, 3, 4]); + + assertSetContainsExactOrderedItems(set.intersection(setLike), [1, 2, 3, 4]); + assertSetContainsExactOrderedItems(set, [3, 2, 99]); +} +{ + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + *keys() { + // Yield the same keys as in |set|. + yield* set.keys(); + + // Remove only keys 2 and 3. + set.delete(2); + set.delete(3); + + // Re-add keys 2 and 3, but in reversed order. + set.add(3); + set.add(2); + }, + }; + + let set = new Set([1, 2, 3, 4]); + + assertSetContainsExactOrderedItems(set.intersection(setLike), [1, 2, 3, 4]); + assertSetContainsExactOrderedItems(set, [1, 4, 3, 2]); +} + +// Test the same item can't be added multiple times. +{ + let seen = []; + + let setLike = { + size: 100, + has(v) { + // Remove and then re-add 2. + if (v === 2 && !seen.includes(v)) { + set.delete(v); + set.add(v); + } + + // Remember all visited keys. + seen.push(v); + + return true; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + let set = new Set([1, 2, 3]); + + assertSetContainsExactOrderedItems(set.intersection(setLike), [1, 2, 3]); + assert.compareArray(seen, [1, 2, 3, 2]); +} + +// Tests which modify any built-ins should appear last, because modifications may disable +// optimised code paths. + +// Doesn't call the built-in |Set.prototype.{has, keys, size}| functions. +const SetPrototypeHas = Object.getOwnPropertyDescriptor(Set.prototype, "has"); +const SetPrototypeKeys = Object.getOwnPropertyDescriptor(Set.prototype, "keys"); +const SetPrototypeSize = Object.getOwnPropertyDescriptor(Set.prototype, "size"); + +delete Set.prototype.has; +delete Set.prototype.keys; +delete Set.prototype.size; + +try { + let set = new Set([1, 2, 3]); + let other = new SetLike([1, 2, 3]); + assertSetContainsExactOrderedItems(set.intersection(other), [1, 2, 3]); +} finally { + Object.defineProperty(Set.prototype, "has", SetPrototypeHas); + Object.defineProperty(Set.prototype, "keys", SetPrototypeKeys); + Object.defineProperty(Set.prototype, "size", SetPrototypeSize); +} + diff --git a/test/staging/sm/Set/is-disjoint-from.js b/test/staging/sm/Set/is-disjoint-from.js new file mode 100644 index 0000000000..cd74aa39ab --- /dev/null +++ b/test/staging/sm/Set/is-disjoint-from.js @@ -0,0 +1,456 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-Set-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assert.sameValue(typeof Set.prototype.isDisjointFrom, "function"); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.isDisjointFrom, "length"), { + value: 1, writable: false, enumerable: false, configurable: true, +}); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.isDisjointFrom, "name"), { + value: "isDisjointFrom", writable: false, enumerable: false, configurable: true, +}); + +const emptySet = new Set(); +const emptySetLike = new SetLike(); +const emptyMap = new Map(); + +function asMap(values) { + return new Map(values.map(v => [v, v])); +} + +// Empty set is disjoint from the empty set. +assert.sameValue(emptySet.isDisjointFrom(emptySet), true); +assert.sameValue(emptySet.isDisjointFrom(emptySetLike), true); +assert.sameValue(emptySet.isDisjointFrom(emptyMap), true); + +// Test native Set, Set-like, and Map objects. +for (let values of [ + [], [1], [1, 2], [1, true, null, {}], +]) { + // Disjoint operation with an empty set. + assert.sameValue(new Set(values).isDisjointFrom(emptySet), true); + assert.sameValue(new Set(values).isDisjointFrom(emptySetLike), true); + assert.sameValue(new Set(values).isDisjointFrom(emptyMap), true); + assert.sameValue(emptySet.isDisjointFrom(new Set(values)), true); + assert.sameValue(emptySet.isDisjointFrom(new SetLike(values)), true); + assert.sameValue(emptySet.isDisjointFrom(asMap(values)), true); + + // Two sets with the exact same values. + assert.sameValue(new Set(values).isDisjointFrom(new Set(values)), values.length === 0); + assert.sameValue(new Set(values).isDisjointFrom(new SetLike(values)), values.length === 0); + assert.sameValue(new Set(values).isDisjointFrom(asMap(values)), values.length === 0); + + // Disjoint operation of the same set object. + let set = new Set(values); + assert.sameValue(set.isDisjointFrom(set), values.length === 0); +} + +// Check property accesses are in the correct order. +{ + let log = []; + + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next() { + log.push("next()"); + return {done: true}; + } + }, log); + + let {proxy: setLike} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + assert.sameValue(emptySet.isDisjointFrom(setLike), true); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // |keys| is called when the this-value has more elements. + + log.length = 0; + assert.sameValue(new Set([1]).isDisjointFrom(setLike), true); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + "next()", + ]); +} + +// Check input validation. +{ + let log = []; + + const nonCallable = {}; + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next: nonCallable, + }, log); + + let {proxy: setLike, obj: setLikeObj} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assert.sameValue(emptySet.isDisjointFrom(setLike), true); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + log.length = 0; + assertThrowsInstanceOf(() => new Set([1]).isDisjointFrom(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + ]); + + // Change |keys| to return a non-object value. + setLikeObj.keys = () => 123; + + log.length = 0; + assert.sameValue(emptySet.isDisjointFrom(setLike), true); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + log.length = 0; + assertThrowsInstanceOf(() => new Set([1]).isDisjointFrom(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |keys| to a non-callable value. + setLikeObj.keys = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isDisjointFrom(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |has| to a non-callable value. + setLikeObj.has = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isDisjointFrom(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + ]); + + // Change |size| to NaN. + sizeValue = NaN; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isDisjointFrom(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); + + // Change |size| to undefined. + sizeValue = undefined; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isDisjointFrom(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); +} + +// Doesn't accept Array as an input. +assertThrowsInstanceOf(() => emptySet.isDisjointFrom([]), TypeError); + +// Works with Set subclasses. +{ + class MySet extends Set {} + + let myEmptySet = new MySet; + + assert.sameValue(emptySet.isDisjointFrom(myEmptySet), true); + assert.sameValue(myEmptySet.isDisjointFrom(myEmptySet), true); + assert.sameValue(myEmptySet.isDisjointFrom(emptySet), true); +} + +// Doesn't access any properties on the this-value. +{ + let log = []; + + let {proxy: setProto} = LoggingProxy(Set.prototype, log); + + let set = new Set([]); + Object.setPrototypeOf(set, setProto); + + assert.sameValue(Set.prototype.isDisjointFrom.call(set, emptySet), true); + + assert.compareArray(log, []); +} + +// Throws a TypeError when the this-value isn't a Set object. +for (let thisValue of [ + null, undefined, true, "", {}, new Map, new Proxy(new Set, {}), +]) { + assertThrowsInstanceOf(() => Set.prototype.isDisjointFrom.call(thisValue, emptySet), TypeError); +} + +// Calls |has| when the this-value has fewer keys. +{ + const keys = [1, 2, 3]; + + for (let size of [keys.length, 100, Infinity]) { + let i = 0; + + let setLike = { + size, + has(v) { + assert.sameValue(this, setLike); + assert.sameValue(arguments.length, 1); + assert.sameValue(i < keys.length, true); + assert.sameValue(v, keys[i++]); + return false; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assert.sameValue(new Set([1, 2, 3]).isDisjointFrom(setLike), true); + } +} + +// Calls |keys| when the this-value has more keys. +{ + const keys = [1, 2, 3]; + + for (let size of [0, 1, 2]) { + let setLike = { + size, + has() { + throw new Error("Unexpected call to |has| method"); + }, + *keys() { + yield* [4, 5, 6]; + }, + }; + + assert.sameValue(new Set(keys).isDisjointFrom(setLike), true); + } + + // Also test early return after first match. + for (let size of [0, 1, 2]) { + let setLike = { + size, + has() { + throw new Error("Unexpected call to |has| method"); + }, + *keys() { + yield keys[0]; + + throw new Error("keys iterator called too many times"); + }, + }; + + assert.sameValue(new Set(keys).isDisjointFrom(setLike), false); + } +} + +// Test when this-value is modified during iteration. +{ + let set = new Set([]); + + // |setLike| has more entries than |set|. + let setLike = { + size: 100, + has(v) { + assert.sameValue(set.has(v), true); + set.delete(v); + return false; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assert.sameValue(set.isDisjointFrom(setLike), true); + assertSetContainsExactOrderedItems(set, []); +} +{ + let set = new Set([0]); + + let keys = [1, 2, 3]; + + let lastValue; + let keysIter = { + next() { + if (lastValue !== undefined) { + assert.sameValue(set.has(lastValue), false); + set.add(lastValue); + + lastValue = undefined; + } + + if (keys.length) { + let value = keys.shift(); + lastValue = value; + return { + done: false, + get value() { + return value; + } + }; + } + return { + done: true, + get value() { + throw new Error("Unexpected call to |value| getter"); + } + }; + } + }; + + // |setLike| has fewer entries than |set|. + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + return keysIter; + }, + }; + + assert.sameValue(set.isDisjointFrom(setLike), true); + assertSetContainsExactOrderedItems(set, [0, 1, 2, 3]); +} + +// IteratorClose is called for early returns. +{ + let log = []; + + let keysIter = { + next() { + log.push("next"); + return {done: false, value: 1}; + }, + return() { + log.push("return"); + return { + get value() { throw new Error("Unexpected call to |value| getter"); }, + get done() { throw new Error("Unexpected call to |done| getter"); }, + }; + } + }; + + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + return keysIter; + }, + }; + + assert.sameValue(new Set([1, 2, 3]).isDisjointFrom(setLike), false); + + assert.compareArray(log, ["next", "return"]); +} + +// IteratorClose isn't called for non-early returns. +{ + let setLike = new SetLike([4, 5, 6]); + + assert.sameValue(new Set([1, 2, 3]).isDisjointFrom(setLike), true); +} + +// Tests which modify any built-ins should appear last, because modifications may disable +// optimised code paths. + +// Doesn't call the built-in |Set.prototype.{has, keys, size}| functions. +const SetPrototypeHas = Object.getOwnPropertyDescriptor(Set.prototype, "has"); +const SetPrototypeKeys = Object.getOwnPropertyDescriptor(Set.prototype, "keys"); +const SetPrototypeSize = Object.getOwnPropertyDescriptor(Set.prototype, "size"); + +delete Set.prototype.has; +delete Set.prototype.keys; +delete Set.prototype.size; + +try { + let set = new Set([1, 2, 3]); + let other = new SetLike([1, 2, 3]); + assert.sameValue(set.isDisjointFrom(other), false); +} finally { + Object.defineProperty(Set.prototype, "has", SetPrototypeHas); + Object.defineProperty(Set.prototype, "keys", SetPrototypeKeys); + Object.defineProperty(Set.prototype, "size", SetPrototypeSize); +} + diff --git a/test/staging/sm/Set/is-subset-of.js b/test/staging/sm/Set/is-subset-of.js new file mode 100644 index 0000000000..a4974f62d1 --- /dev/null +++ b/test/staging/sm/Set/is-subset-of.js @@ -0,0 +1,341 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-Set-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assert.sameValue(typeof Set.prototype.isSubsetOf, "function"); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.isSubsetOf, "length"), { + value: 1, writable: false, enumerable: false, configurable: true, +}); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.isSubsetOf, "name"), { + value: "isSubsetOf", writable: false, enumerable: false, configurable: true, +}); + +const emptySet = new Set(); +const emptySetLike = new SetLike(); +const emptyMap = new Map(); + +function asMap(values) { + return new Map(values.map(v => [v, v])); +} + +// Empty set is a subset of the empty set. +assert.sameValue(emptySet.isSubsetOf(emptySet), true); +assert.sameValue(emptySet.isSubsetOf(emptySetLike), true); +assert.sameValue(emptySet.isSubsetOf(emptyMap), true); + +// Test native Set, Set-like, and Map objects. +for (let values of [ + [], [1], [1, 2], [1, true, null, {}], +]) { + // Subset operation with an empty set. + assert.sameValue(new Set(values).isSubsetOf(emptySet), values.length === 0); + assert.sameValue(new Set(values).isSubsetOf(emptySetLike), values.length === 0); + assert.sameValue(new Set(values).isSubsetOf(emptyMap), values.length === 0); + assert.sameValue(emptySet.isSubsetOf(new Set(values)), true); + assert.sameValue(emptySet.isSubsetOf(new SetLike(values)), true); + assert.sameValue(emptySet.isSubsetOf(asMap(values)), true); + + // Two sets with the exact same values. + assert.sameValue(new Set(values).isSubsetOf(new Set(values)), true); + assert.sameValue(new Set(values).isSubsetOf(new SetLike(values)), true); + assert.sameValue(new Set(values).isSubsetOf(asMap(values)), true); + + // Subset operation of the same set object. + let set = new Set(values); + assert.sameValue(set.isSubsetOf(set), true); +} + +// Check property accesses are in the correct order. +{ + let log = []; + + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next() { + log.push("next()"); + return {done: true}; + } + }, log); + + let {proxy: setLike} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + assert.sameValue(emptySet.isSubsetOf(setLike), true); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); +} + +// Check input validation. +{ + let log = []; + + const nonCallable = {}; + let sizeValue = 0; + + let {proxy: setLike, obj: setLikeObj} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }, log); + + // Change |keys| to a non-callable value. + setLikeObj.keys = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSubsetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |has| to a non-callable value. + setLikeObj.has = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSubsetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + ]); + + // Change |size| to NaN. + sizeValue = NaN; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSubsetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); + + // Change |size| to undefined. + sizeValue = undefined; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSubsetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); +} + +// Doesn't accept Array as an input. +assertThrowsInstanceOf(() => emptySet.isSubsetOf([]), TypeError); + +// Works with Set subclasses. +{ + class MySet extends Set {} + + let myEmptySet = new MySet; + + assert.sameValue(emptySet.isSubsetOf(myEmptySet), true); + assert.sameValue(myEmptySet.isSubsetOf(myEmptySet), true); + assert.sameValue(myEmptySet.isSubsetOf(emptySet), true); +} + +// Doesn't access any properties on the this-value. +{ + let log = []; + + let {proxy: setProto} = LoggingProxy(Set.prototype, log); + + let set = new Set([]); + Object.setPrototypeOf(set, setProto); + + assert.sameValue(Set.prototype.isSubsetOf.call(set, emptySet), true); + + assert.compareArray(log, []); +} + +// Throws a TypeError when the this-value isn't a Set object. +for (let thisValue of [ + null, undefined, true, "", {}, new Map, new Proxy(new Set, {}), +]) { + assertThrowsInstanceOf(() => Set.prototype.isSubsetOf.call(thisValue, emptySet), TypeError); +} + +// Doesn't call |has| when this-value has more elements. +{ + let set = new Set([1, 2, 3]); + + for (let size of [0, 1, 2]) { + let setLike = { + size, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assert.sameValue(set.isSubsetOf(setLike), false); + } +} + +// Test when this-value is modified during iteration. +{ + let set = new Set([1, 2, 3]); + + let seen = new Set(); + + let setLike = { + size: 100, + has(v) { + assert.sameValue(arguments.length, 1); + assert.sameValue(this, setLike); + assert.sameValue(set.has(v), true); + + assert.sameValue(seen.has(v), false); + seen.add(v); + + // Delete the current element. + set.delete(v); + + return true; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assert.sameValue(set.isSubsetOf(setLike), true); + assertSetContainsExactOrderedItems(set, []); + assertSetContainsExactOrderedItems(seen, [1, 2, 3]); +} +{ + let set = new Set([1]); + + let seen = new Set(); + let newKeys = [2, 3, 4, 5]; + + let setLike = { + size: 100, + has(v) { + assert.sameValue(arguments.length, 1); + assert.sameValue(this, setLike); + assert.sameValue(set.has(v), true); + + assert.sameValue(seen.has(v), false); + seen.add(v); + + // Delete the current element. + set.delete(v); + + // Add new elements. + if (newKeys.length) { + set.add(newKeys.shift()); + } + + return true; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assert.sameValue(set.isSubsetOf(setLike), true); + assertSetContainsExactOrderedItems(set, []); + assertSetContainsExactOrderedItems(seen, [1, 2, 3, 4, 5]); + assert.sameValue(newKeys.length, 0); +} +{ + let set = new Set([1, 2, 3]); + + let seen = new Set(); + let deleted = false; + + let setLike = { + size: 100, + has(v) { + assert.sameValue(arguments.length, 1); + assert.sameValue(this, setLike); + assert.sameValue(set.has(v), true); + + assert.sameValue(seen.has(v), false); + seen.add(v); + + if (!deleted) { + assert.sameValue(v, 1); + set.delete(2); + deleted = true; + } + + return true; + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assert.sameValue(set.isSubsetOf(setLike), true); + assertSetContainsExactOrderedItems(set, [1, 3]); + assertSetContainsExactOrderedItems(seen, [1, 3]); + assert.sameValue(deleted, true); +} + +// Tests which modify any built-ins should appear last, because modifications may disable +// optimised code paths. + +// Doesn't call the built-in |Set.prototype.{has, keys, size}| functions. +const SetPrototypeHas = Object.getOwnPropertyDescriptor(Set.prototype, "has"); +const SetPrototypeKeys = Object.getOwnPropertyDescriptor(Set.prototype, "keys"); +const SetPrototypeSize = Object.getOwnPropertyDescriptor(Set.prototype, "size"); + +delete Set.prototype.has; +delete Set.prototype.keys; +delete Set.prototype.size; + +try { + let set = new Set([1, 2, 3]); + let other = new SetLike([1, 2, 3]); + assert.sameValue(set.isSubsetOf(other), true); +} finally { + Object.defineProperty(Set.prototype, "has", SetPrototypeHas); + Object.defineProperty(Set.prototype, "keys", SetPrototypeKeys); + Object.defineProperty(Set.prototype, "size", SetPrototypeSize); +} + diff --git a/test/staging/sm/Set/is-superset-of.js b/test/staging/sm/Set/is-superset-of.js new file mode 100644 index 0000000000..ef66fa12dc --- /dev/null +++ b/test/staging/sm/Set/is-superset-of.js @@ -0,0 +1,368 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-Set-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assert.sameValue(typeof Set.prototype.isSupersetOf, "function"); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.isSupersetOf, "length"), { + value: 1, writable: false, enumerable: false, configurable: true, +}); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.isSupersetOf, "name"), { + value: "isSupersetOf", writable: false, enumerable: false, configurable: true, +}); + +const emptySet = new Set(); +const emptySetLike = new SetLike(); +const emptyMap = new Map(); + +function asMap(values) { + return new Map(values.map(v => [v, v])); +} + +// Empty set is a superset of the empty set. +assert.sameValue(emptySet.isSupersetOf(emptySet), true); +assert.sameValue(emptySet.isSupersetOf(emptySetLike), true); +assert.sameValue(emptySet.isSupersetOf(emptyMap), true); + +// Test native Set, Set-like, and Map objects. +for (let values of [ + [], [1], [1, 2], [1, true, null, {}], +]) { + // Superset operation with an empty set. + assert.sameValue(new Set(values).isSupersetOf(emptySet), true); + assert.sameValue(new Set(values).isSupersetOf(emptySetLike), true); + assert.sameValue(new Set(values).isSupersetOf(emptyMap), true); + assert.sameValue(emptySet.isSupersetOf(new Set(values)), values.length === 0); + assert.sameValue(emptySet.isSupersetOf(new SetLike(values)), values.length === 0); + assert.sameValue(emptySet.isSupersetOf(asMap(values)), values.length === 0); + + // Two sets with the exact same values. + assert.sameValue(new Set(values).isSupersetOf(new Set(values)), true); + assert.sameValue(new Set(values).isSupersetOf(new SetLike(values)), true); + assert.sameValue(new Set(values).isSupersetOf(asMap(values)), true); + + // Superset operation of the same set object. + let set = new Set(values); + assert.sameValue(set.isSupersetOf(set), true); +} + +// Check property accesses are in the correct order. +{ + let log = []; + + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next() { + log.push("next()"); + return {done: true}; + } + }, log); + + let {proxy: setLike} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + assert.sameValue(emptySet.isSupersetOf(setLike), true); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + "next()", + ]); + + // |keys| isn't called when the this-value has fewer elements. + sizeValue = 1; + + log.length = 0; + assert.sameValue(emptySet.isSupersetOf(setLike), false); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); +} + +// Check input validation. +{ + let log = []; + + const nonCallable = {}; + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next: nonCallable, + }, log); + + let {proxy: setLike, obj: setLikeObj} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSupersetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + ]); + + // Change |keys| to return a non-object value. + setLikeObj.keys = () => 123; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSupersetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |keys| to a non-callable value. + setLikeObj.keys = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSupersetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |has| to a non-callable value. + setLikeObj.has = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSupersetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + ]); + + // Change |size| to NaN. + sizeValue = NaN; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSupersetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); + + // Change |size| to undefined. + sizeValue = undefined; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.isSupersetOf(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); +} + +// Doesn't accept Array as an input. +assertThrowsInstanceOf(() => emptySet.isSupersetOf([]), TypeError); + +// Works with Set subclasses. +{ + class MySet extends Set {} + + let myEmptySet = new MySet; + + assert.sameValue(emptySet.isSupersetOf(myEmptySet), true); + assert.sameValue(myEmptySet.isSupersetOf(myEmptySet), true); + assert.sameValue(myEmptySet.isSupersetOf(emptySet), true); +} + +// Doesn't access any properties on the this-value. +{ + let log = []; + + let {proxy: setProto} = LoggingProxy(Set.prototype, log); + + let set = new Set([]); + Object.setPrototypeOf(set, setProto); + + assert.sameValue(Set.prototype.isSupersetOf.call(set, emptySet), true); + + assert.compareArray(log, []); +} + +// Throws a TypeError when the this-value isn't a Set object. +for (let thisValue of [ + null, undefined, true, "", {}, new Map, new Proxy(new Set, {}), +]) { + assertThrowsInstanceOf(() => Set.prototype.isSupersetOf.call(thisValue, emptySet), TypeError); +} + +// Doesn't call |has| nor |keys| when this-value has fewer elements. +{ + let set = new Set([1, 2, 3]); + + for (let size of [100, Infinity]) { + let setLike = { + size, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + throw new Error("Unexpected call to |keys| method"); + }, + }; + + assert.sameValue(set.isSupersetOf(setLike), false); + } +} + +// Test when this-value is modified during iteration. +{ + let set = new Set([]); + + let keys = [1, 2, 3]; + + let keysIter = { + next() { + if (keys.length) { + let value = keys.shift(); + return { + done: false, + get value() { + assert.sameValue(set.has(value), false); + set.add(value); + return value; + } + }; + } + return { + done: true, + get value() { + throw new Error("Unexpected call to |value| getter"); + } + }; + } + }; + + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + return keysIter; + }, + }; + + assert.sameValue(set.isSupersetOf(setLike), true); + assertSetContainsExactOrderedItems(set, [1, 2, 3]); +} + +// IteratorClose is called for early returns. +{ + let log = []; + + let keysIter = { + next() { + log.push("next"); + return {done: false, value: 1}; + }, + return() { + log.push("return"); + return { + get value() { throw new Error("Unexpected call to |value| getter"); }, + get done() { throw new Error("Unexpected call to |done| getter"); }, + }; + } + }; + + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + return keysIter; + }, + }; + + assert.sameValue(new Set([2, 3, 4]).isSupersetOf(setLike), false); + + assert.compareArray(log, ["next", "return"]); +} + +// IteratorClose isn't called for non-early returns. +{ + let setLike = new SetLike([1, 2, 3]); + + assert.sameValue(new Set([1, 2, 3]).isSupersetOf(setLike), true); +} + +// Tests which modify any built-ins should appear last, because modifications may disable +// optimised code paths. + +// Doesn't call the built-in |Set.prototype.{has, keys, size}| functions. +const SetPrototypeHas = Object.getOwnPropertyDescriptor(Set.prototype, "has"); +const SetPrototypeKeys = Object.getOwnPropertyDescriptor(Set.prototype, "keys"); +const SetPrototypeSize = Object.getOwnPropertyDescriptor(Set.prototype, "size"); + +delete Set.prototype.has; +delete Set.prototype.keys; +delete Set.prototype.size; + +try { + let set = new Set([1, 2, 3]); + let other = new SetLike([1, 2, 3]); + assert.sameValue(set.isSupersetOf(other), true); +} finally { + Object.defineProperty(Set.prototype, "has", SetPrototypeHas); + Object.defineProperty(Set.prototype, "keys", SetPrototypeKeys); + Object.defineProperty(Set.prototype, "size", SetPrototypeSize); +} + diff --git a/test/staging/sm/Set/symmetric-difference.js b/test/staging/sm/Set/symmetric-difference.js new file mode 100644 index 0000000000..6758824276 --- /dev/null +++ b/test/staging/sm/Set/symmetric-difference.js @@ -0,0 +1,311 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-Set-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assert.sameValue(typeof Set.prototype.symmetricDifference, "function"); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.symmetricDifference, "length"), { + value: 1, writable: false, enumerable: false, configurable: true, +}); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.symmetricDifference, "name"), { + value: "symmetricDifference", writable: false, enumerable: false, configurable: true, +}); + +const emptySet = new Set(); +const emptySetLike = new SetLike(); +const emptyMap = new Map(); + +function asMap(values) { + return new Map(values.map(v => [v, v])); +} + +// Symmetric difference of two empty sets is an empty set. +assertSetContainsExactOrderedItems(emptySet.symmetricDifference(emptySet), []); +assertSetContainsExactOrderedItems(emptySet.symmetricDifference(emptySetLike), []); +assertSetContainsExactOrderedItems(emptySet.symmetricDifference(emptyMap), []); + +// Test native Set, Set-like, and Map objects. +for (let values of [ + [], [1], [1, 2], [1, true, null, {}], +]) { + // Symmetric difference with an empty set. + assertSetContainsExactOrderedItems(new Set(values).symmetricDifference(emptySet), values); + assertSetContainsExactOrderedItems(new Set(values).symmetricDifference(emptySetLike), values); + assertSetContainsExactOrderedItems(new Set(values).symmetricDifference(emptyMap), values); + assertSetContainsExactOrderedItems(emptySet.symmetricDifference(new Set(values)), values); + assertSetContainsExactOrderedItems(emptySet.symmetricDifference(new SetLike(values)), values); + assertSetContainsExactOrderedItems(emptySet.symmetricDifference(asMap(values)), values); + + // Two sets with the exact same values. + assertSetContainsExactOrderedItems(new Set(values).symmetricDifference(new Set(values)), []); + assertSetContainsExactOrderedItems(new Set(values).symmetricDifference(new SetLike(values)), []); + assertSetContainsExactOrderedItems(new Set(values).symmetricDifference(asMap(values)), []); + + // Symmetric difference of the same set object. + let set = new Set(values); + assertSetContainsExactOrderedItems(set.symmetricDifference(set), []); +} + +// Check property accesses are in the correct order. +{ + let log = []; + + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next() { + log.push("next()"); + return {done: true}; + } + }, log); + + let {proxy: setLike} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + assertSetContainsExactOrderedItems(emptySet.symmetricDifference(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + "next()", + ]); +} + +// Check input validation. +{ + let log = []; + + const nonCallable = {}; + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next: nonCallable, + }, log); + + let {proxy: setLike, obj: setLikeObj} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.symmetricDifference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + ]); + + // Change |keys| to return a non-object value. + setLikeObj.keys = () => 123; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.symmetricDifference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |keys| to a non-callable value. + setLikeObj.keys = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.symmetricDifference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |has| to a non-callable value. + setLikeObj.has = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.symmetricDifference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + ]); + + // Change |size| to NaN. + sizeValue = NaN; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.symmetricDifference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); + + // Change |size| to undefined. + sizeValue = undefined; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.symmetricDifference(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); +} + +// Doesn't accept Array as an input. +assertThrowsInstanceOf(() => emptySet.symmetricDifference([]), TypeError); + +// Works with Set subclasses. +{ + class MySet extends Set {} + + let myEmptySet = new MySet; + + assertSetContainsExactOrderedItems(emptySet.symmetricDifference(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.symmetricDifference(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.symmetricDifference(emptySet), []); +} + +// Doesn't access any properties on the this-value. +{ + let log = []; + + let {proxy: setProto} = LoggingProxy(Set.prototype, log); + + let set = new Set([1, 2, 3]); + Object.setPrototypeOf(set, setProto); + + assertSetContainsExactOrderedItems(Set.prototype.symmetricDifference.call(set, emptySet), [1, 2, 3]); + + assert.compareArray(log, []); +} + +// Throws a TypeError when the this-value isn't a Set object. +for (let thisValue of [ + null, undefined, true, "", {}, new Map, new Proxy(new Set, {}), +]) { + assertThrowsInstanceOf(() => Set.prototype.symmetricDifference.call(thisValue, emptySet), TypeError); +} + +// Doesn't return the original Set object. +{ + let set = new Set([1]); + assert.sameValue(set.symmetricDifference(emptySet) !== set, true); + assert.sameValue(set.symmetricDifference(new Set([2])) !== set, true); +} + +// Test insertion order +{ + let set = new Set([1, 2]); + + // Case 1: Input is empty. + assertSetContainsExactOrderedItems(set.symmetricDifference(new Set([])), [1, 2]); + + // Case 2: Input has fewer elements. + assertSetContainsExactOrderedItems(set.symmetricDifference(new Set([3])), [1, 2, 3]); + assertSetContainsExactOrderedItems(set.symmetricDifference(new Set([2])), [1]); + + // Case 3: Input has same number of elements. + assertSetContainsExactOrderedItems(set.symmetricDifference(new Set([3, 4])), [1, 2, 3, 4]); + assertSetContainsExactOrderedItems(set.symmetricDifference(new Set([2, 3])), [1, 3]); + + // Case 4: Input has more elements. + assertSetContainsExactOrderedItems(set.symmetricDifference(new Set([3, 4, 5])), [1, 2, 3, 4, 5]); + assertSetContainsExactOrderedItems(set.symmetricDifference(new Set([2, 4, 5])), [1, 4, 5]); +} + +// Test that the input set is copied after accessing the |next| property of the keys iterator. +{ + let set = new Set([1, 2, 3]); + + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + return { + get next() { + // Clear the set when getting the |next| method. + set.clear(); + + // And then add a single new key. + set.add(4); + + return function() { + return {done: true}; + }; + } + }; + }, + }; + + // The result should consist of the single, newly added key. + assertSetContainsExactOrderedItems(set.symmetricDifference(setLike), [4]); +} + +// Tests which modify any built-ins should appear last, because modifications may disable +// optimised code paths. + +// Doesn't call the built-in |Set.prototype.{has, keys, size}| functions. +const SetPrototypeHas = Object.getOwnPropertyDescriptor(Set.prototype, "has"); +const SetPrototypeKeys = Object.getOwnPropertyDescriptor(Set.prototype, "keys"); +const SetPrototypeSize = Object.getOwnPropertyDescriptor(Set.prototype, "size"); + +delete Set.prototype.has; +delete Set.prototype.keys; +delete Set.prototype.size; + +try { + let set = new Set([1, 2, 3]); + let other = new SetLike([1, 2, 3]); + assertSetContainsExactOrderedItems(set.symmetricDifference(other), []); +} finally { + Object.defineProperty(Set.prototype, "has", SetPrototypeHas); + Object.defineProperty(Set.prototype, "keys", SetPrototypeKeys); + Object.defineProperty(Set.prototype, "size", SetPrototypeSize); +} + diff --git a/test/staging/sm/Set/union.js b/test/staging/sm/Set/union.js new file mode 100644 index 0000000000..9f5fcc9a51 --- /dev/null +++ b/test/staging/sm/Set/union.js @@ -0,0 +1,308 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-Set-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +assert.sameValue(typeof Set.prototype.union, "function"); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.union, "length"), { + value: 1, writable: false, enumerable: false, configurable: true, +}); +assert.deepEqual(Object.getOwnPropertyDescriptor(Set.prototype.union, "name"), { + value: "union", writable: false, enumerable: false, configurable: true, +}); + +const emptySet = new Set(); +const emptySetLike = new SetLike(); +const emptyMap = new Map(); + +function asMap(values) { + return new Map(values.map(v => [v, v])); +} + +// Union of two empty sets is an empty set. +assertSetContainsExactOrderedItems(emptySet.union(emptySet), []); +assertSetContainsExactOrderedItems(emptySet.union(emptySetLike), []); +assertSetContainsExactOrderedItems(emptySet.union(emptyMap), []); + +// Test native Set, Set-like, and Map objects. +for (let values of [ + [], [1], [1, 2], [1, true, null, {}], +]) { + // Union with an empty set. + assertSetContainsExactOrderedItems(new Set(values).union(emptySet), values); + assertSetContainsExactOrderedItems(new Set(values).union(emptySetLike), values); + assertSetContainsExactOrderedItems(new Set(values).union(emptyMap), values); + assertSetContainsExactOrderedItems(emptySet.union(new Set(values)), values); + assertSetContainsExactOrderedItems(emptySet.union(new SetLike(values)), values); + assertSetContainsExactOrderedItems(emptySet.union(asMap(values)), values); + + // Two sets with the exact same values. + assertSetContainsExactOrderedItems(new Set(values).union(new Set(values)), values); + assertSetContainsExactOrderedItems(new Set(values).union(new SetLike(values)), values); + assertSetContainsExactOrderedItems(new Set(values).union(asMap(values)), values); + + // Union of the same set object. + let set = new Set(values); + assertSetContainsExactOrderedItems(set.union(set), values); +} + +// Check property accesses are in the correct order. +{ + let log = []; + + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next() { + log.push("next()"); + return {done: true}; + } + }, log); + + let {proxy: setLike} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + assertSetContainsExactOrderedItems(emptySet.union(setLike), []); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + "next()", + ]); +} + +// Check input validation. +{ + let log = []; + + const nonCallable = {}; + let sizeValue = 0; + + let {proxy: keysIter} = LoggingProxy({ + next: nonCallable, + }, log); + + let {proxy: setLike, obj: setLikeObj} = LoggingProxy({ + size: { + valueOf() { + log.push("valueOf()"); + return sizeValue; + } + }, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + log.push("keys()"); + return keysIter; + }, + }, log); + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.union(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + "keys()", + "[[get]]", "next", + ]); + + // Change |keys| to return a non-object value. + setLikeObj.keys = () => 123; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.union(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |keys| to a non-callable value. + setLikeObj.keys = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.union(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + "[[get]]", "keys", + ]); + + // Change |has| to a non-callable value. + setLikeObj.has = nonCallable; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.union(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + "[[get]]", "has", + ]); + + // Change |size| to NaN. + sizeValue = NaN; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.union(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); + + // Change |size| to undefined. + sizeValue = undefined; + + log.length = 0; + assertThrowsInstanceOf(() => emptySet.union(setLike), TypeError); + + assert.compareArray(log, [ + "[[get]]", "size", + "valueOf()", + ]); +} + +// Doesn't accept Array as an input. +assertThrowsInstanceOf(() => emptySet.union([]), TypeError); + +// Works with Set subclasses. +{ + class MySet extends Set {} + + let myEmptySet = new MySet; + + assertSetContainsExactOrderedItems(emptySet.union(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.union(myEmptySet), []); + assertSetContainsExactOrderedItems(myEmptySet.union(emptySet), []); +} + +// Doesn't access any properties on the this-value. +{ + let log = []; + + let {proxy: setProto} = LoggingProxy(Set.prototype, log); + + let set = new Set([1, 2, 3]); + Object.setPrototypeOf(set, setProto); + + assertSetContainsExactOrderedItems(Set.prototype.union.call(set, emptySet), [1, 2, 3]); + + assert.compareArray(log, []); +} + +// Throws a TypeError when the this-value isn't a Set object. +for (let thisValue of [ + null, undefined, true, "", {}, new Map, new Proxy(new Set, {}), +]) { + assertThrowsInstanceOf(() => Set.prototype.union.call(thisValue, emptySet), TypeError); +} + +// Doesn't return the original Set object. +{ + let set = new Set([1]); + assert.sameValue(set.union(emptySet) !== set, true); + assert.sameValue(set.union(new Set([2])) !== set, true); +} + +// Test insertion order +{ + let set = new Set([1, 2]); + + // Case 1: Input is empty. + assertSetContainsExactOrderedItems(set.union(new Set([])), [1, 2]); + + // Case 2: Input has fewer elements. + assertSetContainsExactOrderedItems(set.union(new Set([3])), [1, 2, 3]); + + // Case 3: Input has same number of elements. + assertSetContainsExactOrderedItems(set.union(new Set([3, 4])), [1, 2, 3, 4]); + + // Case 4: Input has more elements. + assertSetContainsExactOrderedItems(set.union(new Set([3, 4, 5])), [1, 2, 3, 4, 5]); +} + +// Test that the input set is copied after accessing the |next| property of the keys iterator. +{ + let set = new Set([1, 2, 3]); + + let setLike = { + size: 0, + has() { + throw new Error("Unexpected call to |has| method"); + }, + keys() { + return { + get next() { + // Clear the set when getting the |next| method. + set.clear(); + + // And then add a single new key. + set.add(4); + + return function() { + return {done: true}; + }; + } + }; + }, + }; + + // The result should consist of the single, newly added key. + assertSetContainsExactOrderedItems(set.union(setLike), [4]); +} + +// Tests which modify any built-ins should appear last, because modifications may disable +// optimised code paths. + +// Doesn't call the built-in |Set.prototype.{has, keys, size}| functions. +const SetPrototypeHas = Object.getOwnPropertyDescriptor(Set.prototype, "has"); +const SetPrototypeKeys = Object.getOwnPropertyDescriptor(Set.prototype, "keys"); +const SetPrototypeSize = Object.getOwnPropertyDescriptor(Set.prototype, "size"); + +delete Set.prototype.has; +delete Set.prototype.keys; +delete Set.prototype.size; + +try { + let set = new Set([1, 2, 3]); + let other = new SetLike([1, 2, 3]); + assertSetContainsExactOrderedItems(set.union(other), [1, 2, 3]); +} finally { + Object.defineProperty(Set.prototype, "has", SetPrototypeHas); + Object.defineProperty(Set.prototype, "keys", SetPrototypeKeys); + Object.defineProperty(Set.prototype, "size", SetPrototypeSize); +} + diff --git a/test/staging/sm/String/15.5.4.11-01.js b/test/staging/sm/String/15.5.4.11-01.js new file mode 100644 index 0000000000..a657d3cfed --- /dev/null +++ b/test/staging/sm/String/15.5.4.11-01.js @@ -0,0 +1,71 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 587366; +var summary = "String.prototype.replace with non-regexp searchValue"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* + * Check that regexp statics are preserved across the whole test. + * If the engine is trying to cheat by turning stuff into regexps, + * we should catch it! + */ +/(a|(b)|c)+/.exec('abcabc'); +var before = { + "source" : RegExp.source, + "$`": RegExp.leftContext, + "$'": RegExp.rightContext, + "$&": RegExp.lastMatch, + "$1": RegExp.$1, + "$2": RegExp.$2 +}; + +var text = 'I once was lost but now am found.'; +var searchValue = 'found'; +var replaceValue; + +/* Lambda substitution. */ +replaceValue = function(matchStr, matchStart, textStr) { + assert.sameValue(matchStr, searchValue); + assert.sameValue(matchStart, 27); + assert.sameValue(textStr, text); + return 'not watching that show anymore'; +} +var result = text.replace(searchValue, replaceValue); +assert.sameValue(result, 'I once was lost but now am not watching that show anymore.'); + +/* Dollar substitution. */ +replaceValue = "...wait, where was I again? And where is all my $$$$$$? Oh right, $`$&$'" + + " But with no $$$$$$"; /* Note the dot is not replaced and trails the end. */ +result = text.replace(searchValue, replaceValue); +assert.sameValue(result, 'I once was lost but now am ...wait, where was I again?' + + ' And where is all my $$$? Oh right, I once was lost but now am found.' + + ' But with no $$$.'); + +/* Missing capture group dollar substitution. */ +replaceValue = "$1$&$2$'$3"; +result = text.replace(searchValue, replaceValue); +assert.sameValue(result, 'I once was lost but now am $1found$2.$3.'); + +/* Check RegExp statics haven't been mutated. */ +for (var ident in before) + assert.sameValue(RegExp[ident], before[ident]); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/String/15.5.4.2.js b/test/staging/sm/String/15.5.4.2.js new file mode 100644 index 0000000000..47485b303f --- /dev/null +++ b/test/staging/sm/String/15.5.4.2.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(raisesException(TypeError)('String.prototype.toString.call(42)'), true); +assert.sameValue(raisesException(TypeError)('String.prototype.toString.call(true)'), true); +assert.sameValue(raisesException(TypeError)('String.prototype.toString.call({})'), true); +assert.sameValue(raisesException(TypeError)('String.prototype.toString.call(null)'), true); +assert.sameValue(raisesException(TypeError)('String.prototype.toString.call([])'), true); +assert.sameValue(raisesException(TypeError)('String.prototype.toString.call(undefined)'), true); +assert.sameValue(completesNormally('String.prototype.toString.call("")'), true); + diff --git a/test/staging/sm/String/15.5.4.7.js b/test/staging/sm/String/15.5.4.7.js new file mode 100644 index 0000000000..e72a9abbe7 --- /dev/null +++ b/test/staging/sm/String/15.5.4.7.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 612838; +var summary = "String.prototype.indexOf with empty searchString"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue("123".indexOf("", -1), 0); +assert.sameValue("123".indexOf("", 0), 0); +assert.sameValue("123".indexOf("", 1), 1); +assert.sameValue("123".indexOf("", 3), 3); +assert.sameValue("123".indexOf("", 4), 3); +assert.sameValue("123".indexOf("", 12345), 3); + +print("All tests passed!"); diff --git a/test/staging/sm/String/AdvanceStringIndex.js b/test/staging/sm/String/AdvanceStringIndex.js new file mode 100644 index 0000000000..40b5b8fd60 --- /dev/null +++ b/test/staging/sm/String/AdvanceStringIndex.js @@ -0,0 +1,52 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1135377; +var summary = "Implement RegExp unicode flag -- AdvanceStringIndex in global match and replace."; + +print(BUGNUMBER + ": " + summary); + +// ==== String.prototype.match ==== + +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uD83D|X|/gu), + ["", "", "X", "", ""]); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uDC38|X|/gu), + ["", "", "X", "", ""]); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".match(/\uD83D\uDC38|X|/gu), + ["\uD83D\uDC38", "", "X", "", ""]); + +// ==== String.prototype.replace ==== + +// empty string replacement (optimized) +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D|X|/gu, ""), + "\uD83D\uDC38\uD83D\uDC39\uD83D\uDC3A"); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uDC38|X|/gu, ""), + "\uD83D\uDC38\uD83D\uDC39\uD83D\uDC3A"); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D\uDC38|X|/gu, ""), + "\uD83D\uDC39\uD83D\uDC3A"); + +// non-empty string replacement +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D|X|/gu, "x"), + "x\uD83D\uDC38x\uD83D\uDC39xx\uD83D\uDC3Ax"); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uDC38|X|/gu, "x"), + "x\uD83D\uDC38x\uD83D\uDC39xx\uD83D\uDC3Ax"); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".replace(/\uD83D\uDC38|X|/gu, "x"), + "xx\uD83D\uDC39xx\uD83D\uDC3Ax"); + +// ==== String.prototype.split ==== + +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uD83D|X|/u), + ["\uD83D\uDC38", "\uD83D\uDC39", "\uD83D\uDC3A"]); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uDC38|X|/u), + ["\uD83D\uDC38", "\uD83D\uDC39", "\uD83D\uDC3A"]); +assert.compareArray("\uD83D\uDC38\uD83D\uDC39X\uD83D\uDC3A".split(/\uD83D\uDC38|X|/u), + ["", "\uD83D\uDC39", "\uD83D\uDC3A"]); + diff --git a/test/staging/sm/String/IsRegExp.js b/test/staging/sm/String/IsRegExp.js new file mode 100644 index 0000000000..41b1f03135 --- /dev/null +++ b/test/staging/sm/String/IsRegExp.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1054755; +var summary = 'String.prototype.{startsWith,endsWith,includes} should call IsRegExp.'; + +print(BUGNUMBER + ": " + summary); + +for (var method of ["startsWith", "endsWith", "includes"]) { + for (var re of [/foo/, new RegExp()]) { + assertThrowsInstanceOf(() => "foo"[method](re), TypeError); + + re[Symbol.match] = false; + "foo"[method](re); + } + + for (var v1 of [true, 1, "bar", [], {}, Symbol.iterator]) { + assertThrowsInstanceOf(() => "foo"[method]({ [Symbol.match]: v1 }), TypeError); + } + + for (var v2 of [false, 0, undefined, ""]) { + "foo"[method]({ [Symbol.match]: v2 }); + } +} + diff --git a/test/staging/sm/String/at.js b/test/staging/sm/String/at.js new file mode 100644 index 0000000000..dbea79a66a --- /dev/null +++ b/test/staging/sm/String/at.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function basic() { + assert.sameValue("a".at(0), "a"); + assert.sameValue("a".at(-1), "a"); + + assert.sameValue("".at(0), undefined); + assert.sameValue("".at(-1), undefined); + assert.sameValue("".at(1), undefined); + + assert.sameValue("ab".at(0), "a"); + assert.sameValue("ab".at(1), "b"); + assert.sameValue("ab".at(-2), "a"); + assert.sameValue("ab".at(-1), "b"); + + assert.sameValue("ab".at(2), undefined); + assert.sameValue("ab".at(-3), undefined); + assert.sameValue("ab".at(-4), undefined); + assert.sameValue("ab".at(Infinity), undefined); + assert.sameValue("ab".at(-Infinity), undefined); + assert.sameValue("ab".at(NaN), "a"); // ToInteger(NaN) = 0 + + assert.sameValue("\u{1f921}".at(0), "\u{d83e}"); + assert.sameValue("\u{1f921}".at(1), "\u{dd21}"); +} + +function other() { + var n = 146; + assert.sameValue(String.prototype.at.call(n, 0), "1"); + var obj = {}; + assert.sameValue(String.prototype.at.call(obj, -1), "]"); + var b = true; + assert.sameValue(String.prototype.at.call(b, 0), "t"); +} + +basic(); +other(); + diff --git a/test/staging/sm/String/codePointAt.js b/test/staging/sm/String/codePointAt.js new file mode 100644 index 0000000000..301727cc8d --- /dev/null +++ b/test/staging/sm/String/codePointAt.js @@ -0,0 +1,94 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 918879; +var summary = 'String.prototype.codePointAt'; + +print(BUGNUMBER + ": " + summary); + +// Tests taken from: +// https://github.com/mathiasbynens/String.prototype.codePointAt/blob/master/tests/tests.js +assert.sameValue(String.prototype.codePointAt.length, 1); +assert.sameValue(String.prototype.propertyIsEnumerable('codePointAt'), false); + +// String that starts with a BMP symbol +assert.sameValue('abc\uD834\uDF06def'.codePointAt(''), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt('_'), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(-Infinity), undefined); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(-1), undefined); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(-0), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(0), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(3), 0x1D306); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(4), 0xDF06); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(5), 0x64); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(42), undefined); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(NaN), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(false), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(null), 0x61); +assert.sameValue('abc\uD834\uDF06def'.codePointAt(undefined), 0x61); + +// String that starts with an astral symbol +assert.sameValue('\uD834\uDF06def'.codePointAt(''), 0x1D306); +assert.sameValue('\uD834\uDF06def'.codePointAt('1'), 0xDF06); +assert.sameValue('\uD834\uDF06def'.codePointAt('_'), 0x1D306); +assert.sameValue('\uD834\uDF06def'.codePointAt(), 0x1D306); +assert.sameValue('\uD834\uDF06def'.codePointAt(-1), undefined); +assert.sameValue('\uD834\uDF06def'.codePointAt(-0), 0x1D306); +assert.sameValue('\uD834\uDF06def'.codePointAt(0), 0x1D306); +assert.sameValue('\uD834\uDF06def'.codePointAt(1), 0xDF06); +assert.sameValue('\uD834\uDF06def'.codePointAt(42), undefined); +assert.sameValue('\uD834\uDF06def'.codePointAt(false), 0x1D306); +assert.sameValue('\uD834\uDF06def'.codePointAt(null), 0x1D306); +assert.sameValue('\uD834\uDF06def'.codePointAt(undefined), 0x1D306); + +// Lone high surrogates +assert.sameValue('\uD834abc'.codePointAt(''), 0xD834); +assert.sameValue('\uD834abc'.codePointAt('_'), 0xD834); +assert.sameValue('\uD834abc'.codePointAt(), 0xD834); +assert.sameValue('\uD834abc'.codePointAt(-1), undefined); +assert.sameValue('\uD834abc'.codePointAt(-0), 0xD834); +assert.sameValue('\uD834abc'.codePointAt(0), 0xD834); +assert.sameValue('\uD834abc'.codePointAt(false), 0xD834); +assert.sameValue('\uD834abc'.codePointAt(NaN), 0xD834); +assert.sameValue('\uD834abc'.codePointAt(null), 0xD834); +assert.sameValue('\uD834abc'.codePointAt(undefined), 0xD834); + +// Lone low surrogates +assert.sameValue('\uDF06abc'.codePointAt(''), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt('_'), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt(), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt(-1), undefined); +assert.sameValue('\uDF06abc'.codePointAt(-0), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt(0), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt(false), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt(NaN), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt(null), 0xDF06); +assert.sameValue('\uDF06abc'.codePointAt(undefined), 0xDF06); + +(function() { String.prototype.codePointAt.call(undefined); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(undefined, 4); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(null); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(null, 4); }, TypeError); +assert.sameValue(String.prototype.codePointAt.call(42, 0), 0x34); +assert.sameValue(String.prototype.codePointAt.call(42, 1), 0x32); +assert.sameValue(String.prototype.codePointAt.call({ 'toString': function() { return 'abc'; } }, 2), 0x63); + +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(undefined); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(undefined, [4]); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(null); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(null, [4]); }, TypeError); +assert.sameValue(String.prototype.codePointAt.apply(42, [0]), 0x34); +assert.sameValue(String.prototype.codePointAt.apply(42, [1]), 0x32); +assert.sameValue(String.prototype.codePointAt.apply({ 'toString': function() { return 'abc'; } }, [2]), 0x63); + diff --git a/test/staging/sm/String/defaultvalue.js b/test/staging/sm/String/defaultvalue.js new file mode 100644 index 0000000000..6f62c65ff5 --- /dev/null +++ b/test/staging/sm/String/defaultvalue.js @@ -0,0 +1,174 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 645464; +var summary = + "[[DefaultValue]] behavior wrong for String with overridden valueOf/toString"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// equality + +var s = new String("c"); +assert.sameValue(s == "c", true); + +var s2 = new String(); +s2.valueOf = function() { return "foo"; }; +assert.sameValue(s2 == "foo", true); + +var s3 = new String(); +s3.toString = function() { return "bar"; }; +assert.sameValue(s3 == "", true); + +function testEquality() +{ + var s = new String("c"); + assert.sameValue(s == "c", true); + + var s2 = new String(); + s2.valueOf = function() { return "foo"; }; + assert.sameValue(s2 == "foo", true); + + var s3 = new String(); + s3.toString = function() { return "bar"; }; + assert.sameValue(s3 == "", true); +} +testEquality(); + + +// addition of String to string + +var s = new String(); +assert.sameValue(s + "", ""); + +var s2 = new String(); +s2.toString = function() { return "bar"; }; +assert.sameValue(s2 + "", ""); + +var s3 = new String(); +s3.valueOf = function() { return "baz"; }; +assert.sameValue(s3 + "", "baz"); + +function testStringAddition() +{ + var s = new String(); + assert.sameValue(s + "", ""); + + var s2 = new String(); + s2.toString = function() { return "bar"; }; + assert.sameValue(s2 + "", ""); + + var s3 = new String(); + s3.valueOf = function() { return "baz"; }; + assert.sameValue(s3 + "", "baz"); +} +testStringAddition(); + + +// addition of String to String + +var s = new String(); +assert.sameValue(s + s, ""); + +var s2 = new String(); +s2.toString = function() { return "baz"; }; +assert.sameValue(s2 + s2, ""); + +var s3 = new String(); +s3.valueOf = function() { return "quux"; }; +assert.sameValue(s3 + s3, "quuxquux"); + +function testNonStringAddition() +{ + var s = new String(); + assert.sameValue(s + s, ""); + + var s2 = new String(); + s2.toString = function() { return "baz"; }; + assert.sameValue(s2 + s2, ""); + + var s3 = new String(); + s3.valueOf = function() { return "quux"; }; + assert.sameValue(s3 + s3, "quuxquux"); +} +testNonStringAddition(); + + +// String as bracketed property name + +var obj = { primitive: 17, valueOf: 42, toString: 8675309 }; + +var s = new String("primitive"); +assert.sameValue(obj[s], 17); + +var s2 = new String("primitive"); +s2.valueOf = function() { return "valueOf"; } +assert.sameValue(obj[s2], 17); + +var s3 = new String("primitive"); +s3.toString = function() { return "toString"; }; +assert.sameValue(obj[s3], 8675309); + +function testPropertyNameToString() +{ + var obj = { primitive: 17, valueOf: 42, toString: 8675309 }; + + var s = new String("primitive"); + assert.sameValue(obj[s], 17); + + var s2 = new String("primitive"); + s2.valueOf = function() { return "valueOf"; } + assert.sameValue(obj[s2], 17); + + var s3 = new String("primitive"); + s3.toString = function() { return "toString"; }; + assert.sameValue(obj[s3], 8675309); +} +testPropertyNameToString(); + + +// String as property name with |in| operator + +var s = new String(); +assert.sameValue(s in { "": 5 }, true); + +var s2 = new String(); +s.toString = function() { return "baz"; }; +assert.sameValue(s in { baz: 42 }, true); + +var s3 = new String(); +s3.valueOf = function() { return "quux"; }; +assert.sameValue(s3 in { "": 17 }, true); + +function testInOperatorName() +{ + var s = new String(); + assert.sameValue(s in { "": 5 }, true); + + var s2 = new String(); + s.toString = function() { return "baz"; }; + assert.sameValue(s in { baz: 42 }, true); + + var s3 = new String(); + s3.valueOf = function() { return "quux"; }; + assert.sameValue(s3 in { "": 17 }, true); +} +testInOperatorName(); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/String/fromCodePoint.js b/test/staging/sm/String/fromCodePoint.js new file mode 100644 index 0000000000..5f788aede2 --- /dev/null +++ b/test/staging/sm/String/fromCodePoint.js @@ -0,0 +1,70 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 918879; +var summary = 'String.fromCodePoint'; + +print(BUGNUMBER + ": " + summary); + +// Tests taken from: +// https://github.com/mathiasbynens/String.fromCodePoint/blob/master/tests/tests.js + +assert.sameValue(String.fromCodePoint.length, 1); +assert.sameValue(String.fromCodePoint.name, 'fromCodePoint'); +assert.sameValue(String.propertyIsEnumerable('fromCodePoint'), false); + +assert.sameValue(String.fromCodePoint(''), '\0'); +assert.sameValue(String.fromCodePoint(), ''); +assert.sameValue(String.fromCodePoint(-0), '\0'); +assert.sameValue(String.fromCodePoint(0), '\0'); +assert.sameValue(String.fromCodePoint(0x1D306), '\uD834\uDF06'); +assert.sameValue(String.fromCodePoint(0x1D306, 0x61, 0x1D307), '\uD834\uDF06a\uD834\uDF07'); +assert.sameValue(String.fromCodePoint(0x61, 0x62, 0x1D307), 'ab\uD834\uDF07'); +assert.sameValue(String.fromCodePoint(false), '\0'); +assert.sameValue(String.fromCodePoint(null), '\0'); + +assertThrowsInstanceOf(function() { String.fromCodePoint('_'); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint('+Infinity'); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint('-Infinity'); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(-1); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(0x10FFFF + 1); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(3.14); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(3e-2); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(Infinity); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(NaN); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(undefined); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint({}); }, RangeError); + +var counter = Math.pow(2, 15) * 3 / 2; +var result = []; +while (--counter >= 0) { + result.push(0); // one code unit per symbol +} +String.fromCodePoint.apply(null, result); // must not throw + +var counter = Math.pow(2, 15) * 3 / 2; +var result = []; +while (--counter >= 0) { + result.push(0xFFFF + 1); // two code units per symbol +} +String.fromCodePoint.apply(null, result); // must not throw + +// str_fromCodePoint_one_arg (single argument, creates an inline string) +assert.sameValue(String.fromCodePoint(0x31), '1'); +// str_fromCodePoint_few_args (few arguments, creates an inline string) +// JSFatInlineString::MAX_LENGTH_TWO_BYTE / 2 = floor(11 / 2) = 5 +assert.sameValue(String.fromCodePoint(0x31, 0x32), '12'); +assert.sameValue(String.fromCodePoint(0x31, 0x32, 0x33), '123'); +assert.sameValue(String.fromCodePoint(0x31, 0x32, 0x33, 0x34), '1234'); +assert.sameValue(String.fromCodePoint(0x31, 0x32, 0x33, 0x34, 0x35), '12345'); +// str_fromCodePoint (many arguments, creates a malloc string) +assert.sameValue(String.fromCodePoint(0x31, 0x32, 0x33, 0x34, 0x35, 0x36), '123456'); + diff --git a/test/staging/sm/String/internalUsage.js b/test/staging/sm/String/internalUsage.js new file mode 100644 index 0000000000..c7f19d61ea --- /dev/null +++ b/test/staging/sm/String/internalUsage.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1268138; +var summary = 'Internal usage of split should not be affected by prototpe change'; + +print(BUGNUMBER + ": " + summary); + +function test() { + var t = 24*60*60*1000; + var possibleAnswer = ["1.1.1970", "2.1.1970", "3.1.1970"]; + + String.prototype[Symbol.split] = function(s, limit) { return [""]; }; + var s = Intl.DateTimeFormat("de", {}).format(t); + assert.sameValue(possibleAnswer.includes(s), true); + + String.prototype[Symbol.split] = function(s, limit) { return ["x-foo"]; }; + s = Intl.DateTimeFormat("de", {}).format(t); + assert.sameValue(possibleAnswer.includes(s), true); + + String.prototype[Symbol.split] = function(s, limit) { return ["de-u-co"]; }; + s = Intl.DateTimeFormat("de", {}).format(t); + assert.sameValue(possibleAnswer.includes(s), true); + + String.prototype[Symbol.split] = function(s, limit) { return ["en-US"]; }; + s = Intl.DateTimeFormat("de", {}).format(t); + assert.sameValue(possibleAnswer.includes(s), true); +} + +if (this.hasOwnProperty("Intl")) + test(); + diff --git a/test/staging/sm/String/iterator_edge_cases.js b/test/staging/sm/String/iterator_edge_cases.js new file mode 100644 index 0000000000..3689e59443 --- /dev/null +++ b/test/staging/sm/String/iterator_edge_cases.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that we can't confuse %StringIteratorPrototype% for a +// StringIterator object. +function TestStringIteratorPrototypeConfusion() { + var iter = ""[Symbol.iterator](); + assertThrowsInstanceOfWithMessage( + () => iter.next.call(Object.getPrototypeOf(iter)), + TypeError, + "next method called on incompatible String Iterator"); +} +TestStringIteratorPrototypeConfusion(); + +// Tests that we can use %StringIteratorPrototype%.next on a +// cross-compartment iterator. +function TestStringIteratorWrappers() { + var iter = ""[Symbol.iterator](); + assert.deepEqual(iter.next.call(createNewGlobal().eval('"x"[Symbol.iterator]()')), + { value: "x", done: false }) +} +if (typeof createNewGlobal === "function") { + TestStringIteratorWrappers(); +} + diff --git a/test/staging/sm/String/make-normalize-generateddata-input.py b/test/staging/sm/String/make-normalize-generateddata-input.py new file mode 100644 index 0000000000..086275e67d --- /dev/null +++ b/test/staging/sm/String/make-normalize-generateddata-input.py @@ -0,0 +1,87 @@ +#!/usr/bin/python -B + +""" Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL + + This script generates test input data for String.prototype.normalize + from intl/icu/source/data/unidata/NormalizationTest.txt + to js/src/tests/non262/String/normalize-generateddata-input.js +""" + +import re +import sys + +sep_pat = re.compile(" +") + + +def to_code_list(codes): + return "[" + ", ".join("0x{0}".format(x) for x in re.split(sep_pat, codes)) + "]" + + +def convert(dir): + ver_pat = re.compile(r"NormalizationTest-([0-9\.]+)\.txt") + part_pat = re.compile("^@(Part([0-9]+) .+)$") + test_pat = re.compile( + "^([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);$" + ) + ignore_pat = re.compile("^#|^$") + js_path = "js/src/tests/non262/String/normalize-generateddata-input.js" + txt_path = "intl/icu/source/data/unidata/NormalizationTest.txt" + + part_opened = False + not_empty = False + with open("{dir}/{path}".format(dir=dir, path=txt_path), "r") as f: + with open("{dir}/{path}".format(dir=dir, path=js_path), "w") as outf: + for line in f: + m = test_pat.search(line) + if m: + if not_empty: + outf.write(",") + outf.write("\n") + pat = "{{ source: {source}, NFC: {NFC}, NFD: {NFD}, NFKC: {NFKC}, NFKD: {NFKD} }}" # NOQA: E501 + outf.write( + pat.format( + source=to_code_list(m.group(1)), + NFC=to_code_list(m.group(2)), + NFD=to_code_list(m.group(3)), + NFKC=to_code_list(m.group(4)), + NFKD=to_code_list(m.group(5)), + ) + ) + not_empty = True + continue + m = part_pat.search(line) + if m: + desc = m.group(1) + part = m.group(2) + if part_opened: + outf.write("\n];\n") + outf.write("/* {desc} */\n".format(desc=desc)) + outf.write("var tests_part{part} = [".format(part=part)) + part_opened = True + not_empty = False + continue + m = ver_pat.search(line) + if m: + ver = m.group(1) + outf.write( + "/* created from NormalizationTest-{ver}.txt */\n".format( + ver=ver + ) + ) + continue + m = ignore_pat.search(line) + if m: + continue + print("Unknown line: {0}".format(line), file=sys.stderr) + if part_opened: + outf.write("\n];\n") + + +if __name__ == "__main__": + if len(sys.argv) < 2: + print( + "Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL", + file=sys.stderr, + ) + sys.exit(1) + convert(sys.argv[1]) diff --git a/test/staging/sm/String/match-GetMethod.js b/test/staging/sm/String/match-GetMethod.js new file mode 100644 index 0000000000..a92e1bddba --- /dev/null +++ b/test/staging/sm/String/match-GetMethod.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1290655; +var summary = "String.prototype.match should call GetMethod."; + +print(BUGNUMBER + ": " + summary); + +function create(value) { + return { + [Symbol.match]: value, + toString() { + return "-"; + } + }; +} + +var expected = ["-"]; +expected.index = 1; +expected.input = "a-a"; +expected.groups = undefined; + +for (let v of [null, undefined]) { + assert.deepEqual("a-a".match(create(v)), expected); +} + +for (let v of [1, true, Symbol.iterator, "", {}, []]) { + assertThrowsInstanceOf(() => "a-a".match(create(v)), TypeError); +} + diff --git a/test/staging/sm/String/match-defines-match-elements.js b/test/staging/sm/String/match-defines-match-elements.js new file mode 100644 index 0000000000..09ae47b1f7 --- /dev/null +++ b/test/staging/sm/String/match-defines-match-elements.js @@ -0,0 +1,52 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 677820; +var summary = + "String.prototype.match must define matches on the returned array, not set " + + "them"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var called = false; +function setterFunction(v) { called = true; } +function getterFunction(v) { return "getter"; } + +Object.defineProperty(Array.prototype, 1, + { get: getterFunction, set: setterFunction }); + +assert.sameValue(called, false); +var matches = "abcdef".match(/./g); +assert.sameValue(called, false); +assert.sameValue(matches.length, 6); +assert.sameValue(matches[0], "a"); +assert.sameValue(matches[1], "b"); +assert.sameValue(matches[2], "c"); +assert.sameValue(matches[3], "d"); +assert.sameValue(matches[4], "e"); +assert.sameValue(matches[5], "f"); + +var desc = Object.getOwnPropertyDescriptor(Array.prototype, 1); +assert.sameValue(desc.get, getterFunction); +assert.sameValue(desc.set, setterFunction); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, false); +assert.sameValue([][1], "getter"); + +assert.sameValue(called, false); + +print("Tests complete"); diff --git a/test/staging/sm/String/match-forward-lookahead.js b/test/staging/sm/String/match-forward-lookahead.js new file mode 100644 index 0000000000..8947a39f8b --- /dev/null +++ b/test/staging/sm/String/match-forward-lookahead.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 501739; +var summary = + "String.prototype.match behavior with zero-length matches involving " + + "forward lookahead"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var r = /(?=x)/g; + +var res = "aaaaaaaaaxaaaaaaaaax".match(r); +assert.sameValue(res.length, 2); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/String/match-throws-nonwritable-lastIndex-global.js b/test/staging/sm/String/match-throws-nonwritable-lastIndex-global.js new file mode 100644 index 0000000000..42cc6a1380 --- /dev/null +++ b/test/staging/sm/String/match-throws-nonwritable-lastIndex-global.js @@ -0,0 +1,93 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 501739; +var summary = + "String.prototype.match should throw when called with a global RegExp " + + "whose .lastIndex is non-writable"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; + +// First time with .lastIndex === 0 + +var p1 = /x/g; +Object.defineProperty(p1, "lastIndex", { writable: false }); + +try +{ + s.match(p1); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +// Second time with .lastIndex !== 0 + +var p2 = /x/g; +Object.defineProperty(p2, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.match(p2); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +// Third time with .lastIndex === 0, no matches + +var p3 = /q/g; +Object.defineProperty(p3, "lastIndex", { writable: false }); + +try +{ + s.match(p3); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +// Fourth time with .lastIndex !== 0, no matches + +var p4 = /q/g; +Object.defineProperty(p4, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.match(p4); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/String/match-updates-global-lastIndex.js b/test/staging/sm/String/match-updates-global-lastIndex.js new file mode 100644 index 0000000000..f02c7000fa --- /dev/null +++ b/test/staging/sm/String/match-updates-global-lastIndex.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 501739; +var summary = + "String.prototype.match should zero the .lastIndex when called with a " + + "global RegExp"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; +var p = /x/g; +p.lastIndex = 3; + +var arr = s.match(p); +assert.sameValue(arr.length, 4); +arr.forEach(function(v) { assert.sameValue(v, "x"); }); +assert.sameValue(p.lastIndex, 0); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/String/match.js b/test/staging/sm/String/match.js new file mode 100644 index 0000000000..34093cf18f --- /dev/null +++ b/test/staging/sm/String/match.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Call RegExp.prototype[@@match] from String.prototype.match."; + +print(BUGNUMBER + ": " + summary); + +var called = 0; +var myRegExp = { + [Symbol.match](S) { + assert.sameValue(S, "abcAbcABC"); + called++; + return 42; + } +}; +assert.sameValue("abcAbcABC".match(myRegExp), 42); +assert.sameValue(called, 1); + +var origMatch = RegExp.prototype[Symbol.match]; + +called = 0; +RegExp.prototype[Symbol.match] = function(S) { + assert.sameValue(S, "abcAbcABC"); + called++; + return 43; +}; +assert.sameValue("abcAbcABC".match("abc"), 43); +assert.sameValue(called, 1); + +RegExp.prototype[Symbol.match] = origMatch; + diff --git a/test/staging/sm/String/matchAll.js b/test/staging/sm/String/matchAll.js new file mode 100644 index 0000000000..a02f403621 --- /dev/null +++ b/test/staging/sm/String/matchAll.js @@ -0,0 +1,297 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Basic surface tests. + +assert.sameValue(typeof String.prototype.matchAll, "function"); +assert.sameValue(String.prototype.matchAll.name, "matchAll"); +assert.sameValue(String.prototype.matchAll.length, 1); + +assert.sameValue(typeof Symbol.matchAll, "symbol"); + +assert.sameValue(typeof RegExp.prototype[Symbol.matchAll], "function"); +assert.sameValue(RegExp.prototype[Symbol.matchAll].name, "[Symbol.matchAll]"); +assert.sameValue(RegExp.prototype[Symbol.matchAll].length, 1); + +const IteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); +const RegExpStringIteratorPrototype = Object.getPrototypeOf("".matchAll("")); + +assert.sameValue(Object.getPrototypeOf(RegExpStringIteratorPrototype), IteratorPrototype); + +assert.sameValue(typeof RegExpStringIteratorPrototype.next, "function"); +assert.sameValue(RegExpStringIteratorPrototype.next.name, "next"); +assert.sameValue(RegExpStringIteratorPrototype.next.length, 0); + +assert.sameValue(RegExpStringIteratorPrototype[Symbol.toStringTag], "RegExp String Iterator"); + + +// Basic functional tests. + +const RegExp_prototype_exec = RegExp.prototype.exec; +const RegExp_prototype_match = RegExp.prototype[Symbol.match]; + +function assertEqIterMatchResult(actual, expected) { + assert.sameValue(actual.done, expected.done); + if (actual.value === undefined || expected.value === undefined) { + assert.sameValue(actual.value, expected.value); + } else { + assert.compareArray(actual.value, expected.value); + assert.sameValue(actual.value.input, expected.value.input); + assert.sameValue(actual.value.index, expected.value.index); + } +} + +function assertEqMatchResults(actual, expected) { + var actualIter = actual[Symbol.iterator](); + var expectedIter = expected[Symbol.iterator](); + while (true) { + var actualResult = actualIter.next(); + var expectedResult = expectedIter.next(); + assertEqIterMatchResult(actualResult, expectedResult); + if (actualResult.done && expectedResult.done) + return; + } +} + +function* matchResults(string, regexp, lastIndex = 0) { + regexp.lastIndex = lastIndex; + while (true) { + var match = Reflect.apply(RegExp_prototype_exec, regexp, [string]); + if (match === null) + return; + yield match; + if (!regexp.global) + return; + } +} + +assertEqMatchResults(/a/[Symbol.matchAll]("ababcca"), matchResults("ababcca", /a/)); +assertEqMatchResults("ababcca".matchAll(/a/g), matchResults("ababcca", /a/g)); +assertEqMatchResults("ababcca".matchAll("a"), matchResults("ababcca", /a/g)); + + +// Cross-compartment tests. + +{ + let otherGlobal = createNewGlobal(); + + let iterator = otherGlobal.eval(`"ababcca".matchAll(/a/g)`); + let expected = matchResults("ababcca", /a/g); + + assertEqIterMatchResult(RegExpStringIteratorPrototype.next.call(iterator), + expected.next()); +} + + +// Optimization tests. +// +// The optimized path for MatchAllIterator reuses the input RegExp to avoid +// extra RegExp allocations. To make this optimization undetectable from +// user code, we need to ensure that: +// 1. Modifications to the input RegExp through RegExp.prototype.compile are +// detected and properly handled (= ignored). +// 2. The RegExpStringIterator doesn't modify the input RegExp, for example +// by updating the lastIndex property. +// 3. Guards against modifications of built-in RegExp.prototype are installed. + +// Recompile RegExp (source) before first match. +{ + let regexp = /a+/g; + let iterator = "aabb".matchAll(regexp); + + regexp.compile("b+", "g"); + assertEqMatchResults(iterator, matchResults("aabb", /a+/g)); +} + +// Recompile RegExp (flags) before first match. +{ + let regexp = /a+/gi; + let iterator = "aAbb".matchAll(regexp); + + regexp.compile("a+", ""); + assertEqMatchResults(iterator, matchResults("aAbb", /a+/gi)); +} + +// Recompile RegExp (source) after first match. +{ + let regexp = /a+/g; + let iterator = "aabbaa".matchAll(regexp); + let expected = matchResults("aabbaa", /a+/g); + + assertEqIterMatchResult(iterator.next(), expected.next()); + regexp.compile("b+", "g"); + assertEqIterMatchResult(iterator.next(), expected.next()); +} + +// Recompile RegExp (flags) after first match. +{ + let regexp = /a+/g; + let iterator = "aabbAA".matchAll(regexp); + let expected = matchResults("aabbAA", /a+/g); + + assertEqIterMatchResult(iterator.next(), expected.next()); + regexp.compile("a+", "i"); + assertEqIterMatchResult(iterator.next(), expected.next()); +} + +// lastIndex property of input RegExp not modified when optimized path used. +{ + let regexp = /a+/g; + regexp.lastIndex = 1; + let iterator = "aabbaa".matchAll(regexp); + let expected = matchResults("aabbaa", /a+/g, 1); + + assert.sameValue(regexp.lastIndex, 1); + assertEqIterMatchResult(iterator.next(), expected.next()); + assert.sameValue(regexp.lastIndex, 1); + assertEqIterMatchResult(iterator.next(), expected.next()); + assert.sameValue(regexp.lastIndex, 1); +} + +// Modifications to lastIndex property of input RegExp ignored when optimized path used. +{ + let regexp = /a+/g; + let iterator = "aabbaa".matchAll(regexp); + regexp.lastIndex = 1; + let expected = matchResults("aabbaa", /a+/g); + + assert.sameValue(regexp.lastIndex, 1); + assertEqIterMatchResult(iterator.next(), expected.next()); + assert.sameValue(regexp.lastIndex, 1); + assertEqIterMatchResult(iterator.next(), expected.next()); + assert.sameValue(regexp.lastIndex, 1); +} + +// RegExp.prototype[Symbol.match] is modified to a getter, ensure this getter +// is called exactly twice. +try { + let regexp = /a+/g; + + let callCount = 0; + Object.defineProperty(RegExp.prototype, Symbol.match, { + get() { + assert.sameValue(this, regexp); + callCount++; + return RegExp_prototype_match; + } + }); + let iterator = "aabbaa".matchAll(regexp); + assert.sameValue(callCount, 2); +} finally { + // Restore optimizable RegExp.prototype shape. + Object.defineProperty(RegExp.prototype, Symbol.match, { + value: RegExp_prototype_match, + writable: true, enumerable: false, configurable: true + }); +} + +// RegExp.prototype.exec is changed to a getter. +try { + let regexp = /a+/g; + let iterator = "aabbaa".matchAll(regexp); + let lastIndices = [0, 2, 6][Symbol.iterator](); + + let iteratorRegExp = null; + let callCount = 0; + Object.defineProperty(RegExp.prototype, "exec", { + get() { + callCount++; + + if (iteratorRegExp === null) + iteratorRegExp = this; + + assert.sameValue(this === regexp, false); + assert.sameValue(this, iteratorRegExp); + assert.sameValue(this.source, regexp.source); + assert.sameValue(this.flags, regexp.flags); + assert.sameValue(this.lastIndex, lastIndices.next().value); + return RegExp_prototype_exec; + } + }); + + assertEqMatchResults(iterator, matchResults("aabbaa", /a+/g)); + assert.sameValue(callCount, 3); +} finally { + // Restore optimizable RegExp.prototype shape. + Object.defineProperty(RegExp.prototype, "exec", { + value: RegExp_prototype_exec, + writable: true, enumerable: false, configurable: true + }); +} + +// RegExp.prototype.exec is changed to a value property. +try { + let regexp = /a+/g; + let iterator = "aabbaa".matchAll(regexp); + let lastIndices = [0, 2, 6][Symbol.iterator](); + + let iteratorRegExp = null; + let callCount = 0; + RegExp.prototype.exec = function(...args) { + callCount++; + + if (iteratorRegExp === null) + iteratorRegExp = this; + + assert.sameValue(this === regexp, false); + assert.sameValue(this, iteratorRegExp); + assert.sameValue(this.source, regexp.source); + assert.sameValue(this.flags, regexp.flags); + assert.sameValue(this.lastIndex, lastIndices.next().value); + return Reflect.apply(RegExp_prototype_exec, this, args); + }; + + assertEqMatchResults(iterator, matchResults("aabbaa", /a+/g)); + assert.sameValue(callCount, 3); +} finally { + // Restore optimizable RegExp.prototype shape. + Object.defineProperty(RegExp.prototype, "exec", { + value: RegExp_prototype_exec, + writable: true, enumerable: false, configurable: true + }); +} + +// Initial 'lastIndex' is zero if the RegExp is neither global nor sticky (1). +{ + let regexp = /a+/; + regexp.lastIndex = 2; + + let iterator = regexp[Symbol.matchAll]("aaaaa"); + assertEqMatchResults(iterator, matchResults("aaaaa", /a+/g, 0)); +} + +// Initial 'lastIndex' is zero if the RegExp is neither global nor sticky (2). +{ + let regexp = /a+/g; + regexp.lastIndex = 2; + + let iterator = regexp[Symbol.matchAll]("aaaaa"); + assertEqMatchResults(iterator, matchResults("aaaaa", /a+/g, 2)); +} + +// Initial 'lastIndex' is zero if the RegExp is neither global nor sticky (3). +{ + let regexp = /a+/y; + regexp.lastIndex = 2; + + let iterator = regexp[Symbol.matchAll]("aaaaa"); + assertEqMatchResults(iterator, matchResults("aaaaa", /a+/g, 2)); +} + +//Initial 'lastIndex' is zero if the RegExp is neither global nor sticky (4). +{ + let regexp = /a+/gy; + regexp.lastIndex = 2; + + let iterator = regexp[Symbol.matchAll]("aaaaa"); + assertEqMatchResults(iterator, matchResults("aaaaa", /a+/g, 2)); +} + diff --git a/test/staging/sm/String/normalize-form-non-atom.js b/test/staging/sm/String/normalize-form-non-atom.js new file mode 100644 index 0000000000..191cc5f232 --- /dev/null +++ b/test/staging/sm/String/normalize-form-non-atom.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1145326; +var summary = 'String.prototype.normalize error when normalization form parameter is not an atom'; + +print(BUGNUMBER + ": " + summary); + +function test() { + assert.sameValue("abc".normalize("NFKC".split("").join("")), "abc"); + assert.sameValue("abc".normalize("NFKCabc".replace("abc", "")), "abc"); + assert.sameValue("abc".normalize("N" + "F" + "K" + "C"), "abc"); +} + +if ("normalize" in String.prototype) { + // String.prototype.normalize is not enabled in all builds. + test(); +} + diff --git a/test/staging/sm/String/normalize-generateddata-input.js b/test/staging/sm/String/normalize-generateddata-input.js new file mode 100644 index 0000000000..ad1b15e8ed --- /dev/null +++ b/test/staging/sm/String/normalize-generateddata-input.js @@ -0,0 +1,19098 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* created from NormalizationTest-15.0.0.txt */ +/* Part0 # Specific cases */ +var tests_part0 = [ +{ source: [0x1E0A], NFC: [0x1E0A], NFD: [0x0044, 0x0307], NFKC: [0x1E0A], NFKD: [0x0044, 0x0307] }, +{ source: [0x1E0C], NFC: [0x1E0C], NFD: [0x0044, 0x0323], NFKC: [0x1E0C], NFKD: [0x0044, 0x0323] }, +{ source: [0x1E0A, 0x0323], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x1E0C, 0x0307], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x0044, 0x0307, 0x0323], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x0044, 0x0323, 0x0307], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x1E0A, 0x031B], NFC: [0x1E0A, 0x031B], NFD: [0x0044, 0x031B, 0x0307], NFKC: [0x1E0A, 0x031B], NFKD: [0x0044, 0x031B, 0x0307] }, +{ source: [0x1E0C, 0x031B], NFC: [0x1E0C, 0x031B], NFD: [0x0044, 0x031B, 0x0323], NFKC: [0x1E0C, 0x031B], NFKD: [0x0044, 0x031B, 0x0323] }, +{ source: [0x1E0A, 0x031B, 0x0323], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x1E0C, 0x031B, 0x0307], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x0044, 0x031B, 0x0307, 0x0323], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x0044, 0x031B, 0x0323, 0x0307], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x00C8], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] }, +{ source: [0x0112], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] }, +{ source: [0x0045, 0x0300], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] }, +{ source: [0x0045, 0x0304], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] }, +{ source: [0x1E14], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x0112, 0x0300], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x1E14, 0x0304], NFC: [0x1E14, 0x0304], NFD: [0x0045, 0x0304, 0x0300, 0x0304], NFKC: [0x1E14, 0x0304], NFKD: [0x0045, 0x0304, 0x0300, 0x0304] }, +{ source: [0x0045, 0x0304, 0x0300], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x0045, 0x0300, 0x0304], NFC: [0x00C8, 0x0304], NFD: [0x0045, 0x0300, 0x0304], NFKC: [0x00C8, 0x0304], NFKD: [0x0045, 0x0300, 0x0304] }, +{ source: [0x05B8, 0x05B9, 0x05B1, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F] }, +{ source: [0x0592, 0x05B7, 0x05BC, 0x05A5, 0x05B0, 0x05C0, 0x05C4, 0x05AD], NFC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4] }, +{ source: [0x1100, 0xAC00, 0x11A8], NFC: [0x1100, 0xAC01], NFD: [0x1100, 0x1100, 0x1161, 0x11A8], NFKC: [0x1100, 0xAC01], NFKD: [0x1100, 0x1100, 0x1161, 0x11A8] }, +{ source: [0x1100, 0xAC00, 0x11A8, 0x11A8], NFC: [0x1100, 0xAC01, 0x11A8], NFD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8], NFKC: [0x1100, 0xAC01, 0x11A8], NFKD: [0x1100, 0x1100, 0x1161, 0x11A8, 0x11A8] } +]; +/* Part1 # Character by character test */ +var tests_part1 = [ +{ source: [0x00A0], NFC: [0x00A0], NFD: [0x00A0], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x00A8], NFC: [0x00A8], NFD: [0x00A8], NFKC: [0x0020, 0x0308], NFKD: [0x0020, 0x0308] }, +{ source: [0x00AA], NFC: [0x00AA], NFD: [0x00AA], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x00AF], NFC: [0x00AF], NFD: [0x00AF], NFKC: [0x0020, 0x0304], NFKD: [0x0020, 0x0304] }, +{ source: [0x00B2], NFC: [0x00B2], NFD: [0x00B2], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x00B3], NFC: [0x00B3], NFD: [0x00B3], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x00B4], NFC: [0x00B4], NFD: [0x00B4], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] }, +{ source: [0x00B5], NFC: [0x00B5], NFD: [0x00B5], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x00B8], NFC: [0x00B8], NFD: [0x00B8], NFKC: [0x0020, 0x0327], NFKD: [0x0020, 0x0327] }, +{ source: [0x00B9], NFC: [0x00B9], NFD: [0x00B9], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x00BA], NFC: [0x00BA], NFD: [0x00BA], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x00BC], NFC: [0x00BC], NFD: [0x00BC], NFKC: [0x0031, 0x2044, 0x0034], NFKD: [0x0031, 0x2044, 0x0034] }, +{ source: [0x00BD], NFC: [0x00BD], NFD: [0x00BD], NFKC: [0x0031, 0x2044, 0x0032], NFKD: [0x0031, 0x2044, 0x0032] }, +{ source: [0x00BE], NFC: [0x00BE], NFD: [0x00BE], NFKC: [0x0033, 0x2044, 0x0034], NFKD: [0x0033, 0x2044, 0x0034] }, +{ source: [0x00C0], NFC: [0x00C0], NFD: [0x0041, 0x0300], NFKC: [0x00C0], NFKD: [0x0041, 0x0300] }, +{ source: [0x00C1], NFC: [0x00C1], NFD: [0x0041, 0x0301], NFKC: [0x00C1], NFKD: [0x0041, 0x0301] }, +{ source: [0x00C2], NFC: [0x00C2], NFD: [0x0041, 0x0302], NFKC: [0x00C2], NFKD: [0x0041, 0x0302] }, +{ source: [0x00C3], NFC: [0x00C3], NFD: [0x0041, 0x0303], NFKC: [0x00C3], NFKD: [0x0041, 0x0303] }, +{ source: [0x00C4], NFC: [0x00C4], NFD: [0x0041, 0x0308], NFKC: [0x00C4], NFKD: [0x0041, 0x0308] }, +{ source: [0x00C5], NFC: [0x00C5], NFD: [0x0041, 0x030A], NFKC: [0x00C5], NFKD: [0x0041, 0x030A] }, +{ source: [0x00C7], NFC: [0x00C7], NFD: [0x0043, 0x0327], NFKC: [0x00C7], NFKD: [0x0043, 0x0327] }, +{ source: [0x00C8], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] }, +{ source: [0x00C9], NFC: [0x00C9], NFD: [0x0045, 0x0301], NFKC: [0x00C9], NFKD: [0x0045, 0x0301] }, +{ source: [0x00CA], NFC: [0x00CA], NFD: [0x0045, 0x0302], NFKC: [0x00CA], NFKD: [0x0045, 0x0302] }, +{ source: [0x00CB], NFC: [0x00CB], NFD: [0x0045, 0x0308], NFKC: [0x00CB], NFKD: [0x0045, 0x0308] }, +{ source: [0x00CC], NFC: [0x00CC], NFD: [0x0049, 0x0300], NFKC: [0x00CC], NFKD: [0x0049, 0x0300] }, +{ source: [0x00CD], NFC: [0x00CD], NFD: [0x0049, 0x0301], NFKC: [0x00CD], NFKD: [0x0049, 0x0301] }, +{ source: [0x00CE], NFC: [0x00CE], NFD: [0x0049, 0x0302], NFKC: [0x00CE], NFKD: [0x0049, 0x0302] }, +{ source: [0x00CF], NFC: [0x00CF], NFD: [0x0049, 0x0308], NFKC: [0x00CF], NFKD: [0x0049, 0x0308] }, +{ source: [0x00D1], NFC: [0x00D1], NFD: [0x004E, 0x0303], NFKC: [0x00D1], NFKD: [0x004E, 0x0303] }, +{ source: [0x00D2], NFC: [0x00D2], NFD: [0x004F, 0x0300], NFKC: [0x00D2], NFKD: [0x004F, 0x0300] }, +{ source: [0x00D3], NFC: [0x00D3], NFD: [0x004F, 0x0301], NFKC: [0x00D3], NFKD: [0x004F, 0x0301] }, +{ source: [0x00D4], NFC: [0x00D4], NFD: [0x004F, 0x0302], NFKC: [0x00D4], NFKD: [0x004F, 0x0302] }, +{ source: [0x00D5], NFC: [0x00D5], NFD: [0x004F, 0x0303], NFKC: [0x00D5], NFKD: [0x004F, 0x0303] }, +{ source: [0x00D6], NFC: [0x00D6], NFD: [0x004F, 0x0308], NFKC: [0x00D6], NFKD: [0x004F, 0x0308] }, +{ source: [0x00D9], NFC: [0x00D9], NFD: [0x0055, 0x0300], NFKC: [0x00D9], NFKD: [0x0055, 0x0300] }, +{ source: [0x00DA], NFC: [0x00DA], NFD: [0x0055, 0x0301], NFKC: [0x00DA], NFKD: [0x0055, 0x0301] }, +{ source: [0x00DB], NFC: [0x00DB], NFD: [0x0055, 0x0302], NFKC: [0x00DB], NFKD: [0x0055, 0x0302] }, +{ source: [0x00DC], NFC: [0x00DC], NFD: [0x0055, 0x0308], NFKC: [0x00DC], NFKD: [0x0055, 0x0308] }, +{ source: [0x00DD], NFC: [0x00DD], NFD: [0x0059, 0x0301], NFKC: [0x00DD], NFKD: [0x0059, 0x0301] }, +{ source: [0x00E0], NFC: [0x00E0], NFD: [0x0061, 0x0300], NFKC: [0x00E0], NFKD: [0x0061, 0x0300] }, +{ source: [0x00E1], NFC: [0x00E1], NFD: [0x0061, 0x0301], NFKC: [0x00E1], NFKD: [0x0061, 0x0301] }, +{ source: [0x00E2], NFC: [0x00E2], NFD: [0x0061, 0x0302], NFKC: [0x00E2], NFKD: [0x0061, 0x0302] }, +{ source: [0x00E3], NFC: [0x00E3], NFD: [0x0061, 0x0303], NFKC: [0x00E3], NFKD: [0x0061, 0x0303] }, +{ source: [0x00E4], NFC: [0x00E4], NFD: [0x0061, 0x0308], NFKC: [0x00E4], NFKD: [0x0061, 0x0308] }, +{ source: [0x00E5], NFC: [0x00E5], NFD: [0x0061, 0x030A], NFKC: [0x00E5], NFKD: [0x0061, 0x030A] }, +{ source: [0x00E7], NFC: [0x00E7], NFD: [0x0063, 0x0327], NFKC: [0x00E7], NFKD: [0x0063, 0x0327] }, +{ source: [0x00E8], NFC: [0x00E8], NFD: [0x0065, 0x0300], NFKC: [0x00E8], NFKD: [0x0065, 0x0300] }, +{ source: [0x00E9], NFC: [0x00E9], NFD: [0x0065, 0x0301], NFKC: [0x00E9], NFKD: [0x0065, 0x0301] }, +{ source: [0x00EA], NFC: [0x00EA], NFD: [0x0065, 0x0302], NFKC: [0x00EA], NFKD: [0x0065, 0x0302] }, +{ source: [0x00EB], NFC: [0x00EB], NFD: [0x0065, 0x0308], NFKC: [0x00EB], NFKD: [0x0065, 0x0308] }, +{ source: [0x00EC], NFC: [0x00EC], NFD: [0x0069, 0x0300], NFKC: [0x00EC], NFKD: [0x0069, 0x0300] }, +{ source: [0x00ED], NFC: [0x00ED], NFD: [0x0069, 0x0301], NFKC: [0x00ED], NFKD: [0x0069, 0x0301] }, +{ source: [0x00EE], NFC: [0x00EE], NFD: [0x0069, 0x0302], NFKC: [0x00EE], NFKD: [0x0069, 0x0302] }, +{ source: [0x00EF], NFC: [0x00EF], NFD: [0x0069, 0x0308], NFKC: [0x00EF], NFKD: [0x0069, 0x0308] }, +{ source: [0x00F1], NFC: [0x00F1], NFD: [0x006E, 0x0303], NFKC: [0x00F1], NFKD: [0x006E, 0x0303] }, +{ source: [0x00F2], NFC: [0x00F2], NFD: [0x006F, 0x0300], NFKC: [0x00F2], NFKD: [0x006F, 0x0300] }, +{ source: [0x00F3], NFC: [0x00F3], NFD: [0x006F, 0x0301], NFKC: [0x00F3], NFKD: [0x006F, 0x0301] }, +{ source: [0x00F4], NFC: [0x00F4], NFD: [0x006F, 0x0302], NFKC: [0x00F4], NFKD: [0x006F, 0x0302] }, +{ source: [0x00F5], NFC: [0x00F5], NFD: [0x006F, 0x0303], NFKC: [0x00F5], NFKD: [0x006F, 0x0303] }, +{ source: [0x00F6], NFC: [0x00F6], NFD: [0x006F, 0x0308], NFKC: [0x00F6], NFKD: [0x006F, 0x0308] }, +{ source: [0x00F9], NFC: [0x00F9], NFD: [0x0075, 0x0300], NFKC: [0x00F9], NFKD: [0x0075, 0x0300] }, +{ source: [0x00FA], NFC: [0x00FA], NFD: [0x0075, 0x0301], NFKC: [0x00FA], NFKD: [0x0075, 0x0301] }, +{ source: [0x00FB], NFC: [0x00FB], NFD: [0x0075, 0x0302], NFKC: [0x00FB], NFKD: [0x0075, 0x0302] }, +{ source: [0x00FC], NFC: [0x00FC], NFD: [0x0075, 0x0308], NFKC: [0x00FC], NFKD: [0x0075, 0x0308] }, +{ source: [0x00FD], NFC: [0x00FD], NFD: [0x0079, 0x0301], NFKC: [0x00FD], NFKD: [0x0079, 0x0301] }, +{ source: [0x00FF], NFC: [0x00FF], NFD: [0x0079, 0x0308], NFKC: [0x00FF], NFKD: [0x0079, 0x0308] }, +{ source: [0x0100], NFC: [0x0100], NFD: [0x0041, 0x0304], NFKC: [0x0100], NFKD: [0x0041, 0x0304] }, +{ source: [0x0101], NFC: [0x0101], NFD: [0x0061, 0x0304], NFKC: [0x0101], NFKD: [0x0061, 0x0304] }, +{ source: [0x0102], NFC: [0x0102], NFD: [0x0041, 0x0306], NFKC: [0x0102], NFKD: [0x0041, 0x0306] }, +{ source: [0x0103], NFC: [0x0103], NFD: [0x0061, 0x0306], NFKC: [0x0103], NFKD: [0x0061, 0x0306] }, +{ source: [0x0104], NFC: [0x0104], NFD: [0x0041, 0x0328], NFKC: [0x0104], NFKD: [0x0041, 0x0328] }, +{ source: [0x0105], NFC: [0x0105], NFD: [0x0061, 0x0328], NFKC: [0x0105], NFKD: [0x0061, 0x0328] }, +{ source: [0x0106], NFC: [0x0106], NFD: [0x0043, 0x0301], NFKC: [0x0106], NFKD: [0x0043, 0x0301] }, +{ source: [0x0107], NFC: [0x0107], NFD: [0x0063, 0x0301], NFKC: [0x0107], NFKD: [0x0063, 0x0301] }, +{ source: [0x0108], NFC: [0x0108], NFD: [0x0043, 0x0302], NFKC: [0x0108], NFKD: [0x0043, 0x0302] }, +{ source: [0x0109], NFC: [0x0109], NFD: [0x0063, 0x0302], NFKC: [0x0109], NFKD: [0x0063, 0x0302] }, +{ source: [0x010A], NFC: [0x010A], NFD: [0x0043, 0x0307], NFKC: [0x010A], NFKD: [0x0043, 0x0307] }, +{ source: [0x010B], NFC: [0x010B], NFD: [0x0063, 0x0307], NFKC: [0x010B], NFKD: [0x0063, 0x0307] }, +{ source: [0x010C], NFC: [0x010C], NFD: [0x0043, 0x030C], NFKC: [0x010C], NFKD: [0x0043, 0x030C] }, +{ source: [0x010D], NFC: [0x010D], NFD: [0x0063, 0x030C], NFKC: [0x010D], NFKD: [0x0063, 0x030C] }, +{ source: [0x010E], NFC: [0x010E], NFD: [0x0044, 0x030C], NFKC: [0x010E], NFKD: [0x0044, 0x030C] }, +{ source: [0x010F], NFC: [0x010F], NFD: [0x0064, 0x030C], NFKC: [0x010F], NFKD: [0x0064, 0x030C] }, +{ source: [0x0112], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] }, +{ source: [0x0113], NFC: [0x0113], NFD: [0x0065, 0x0304], NFKC: [0x0113], NFKD: [0x0065, 0x0304] }, +{ source: [0x0114], NFC: [0x0114], NFD: [0x0045, 0x0306], NFKC: [0x0114], NFKD: [0x0045, 0x0306] }, +{ source: [0x0115], NFC: [0x0115], NFD: [0x0065, 0x0306], NFKC: [0x0115], NFKD: [0x0065, 0x0306] }, +{ source: [0x0116], NFC: [0x0116], NFD: [0x0045, 0x0307], NFKC: [0x0116], NFKD: [0x0045, 0x0307] }, +{ source: [0x0117], NFC: [0x0117], NFD: [0x0065, 0x0307], NFKC: [0x0117], NFKD: [0x0065, 0x0307] }, +{ source: [0x0118], NFC: [0x0118], NFD: [0x0045, 0x0328], NFKC: [0x0118], NFKD: [0x0045, 0x0328] }, +{ source: [0x0119], NFC: [0x0119], NFD: [0x0065, 0x0328], NFKC: [0x0119], NFKD: [0x0065, 0x0328] }, +{ source: [0x011A], NFC: [0x011A], NFD: [0x0045, 0x030C], NFKC: [0x011A], NFKD: [0x0045, 0x030C] }, +{ source: [0x011B], NFC: [0x011B], NFD: [0x0065, 0x030C], NFKC: [0x011B], NFKD: [0x0065, 0x030C] }, +{ source: [0x011C], NFC: [0x011C], NFD: [0x0047, 0x0302], NFKC: [0x011C], NFKD: [0x0047, 0x0302] }, +{ source: [0x011D], NFC: [0x011D], NFD: [0x0067, 0x0302], NFKC: [0x011D], NFKD: [0x0067, 0x0302] }, +{ source: [0x011E], NFC: [0x011E], NFD: [0x0047, 0x0306], NFKC: [0x011E], NFKD: [0x0047, 0x0306] }, +{ source: [0x011F], NFC: [0x011F], NFD: [0x0067, 0x0306], NFKC: [0x011F], NFKD: [0x0067, 0x0306] }, +{ source: [0x0120], NFC: [0x0120], NFD: [0x0047, 0x0307], NFKC: [0x0120], NFKD: [0x0047, 0x0307] }, +{ source: [0x0121], NFC: [0x0121], NFD: [0x0067, 0x0307], NFKC: [0x0121], NFKD: [0x0067, 0x0307] }, +{ source: [0x0122], NFC: [0x0122], NFD: [0x0047, 0x0327], NFKC: [0x0122], NFKD: [0x0047, 0x0327] }, +{ source: [0x0123], NFC: [0x0123], NFD: [0x0067, 0x0327], NFKC: [0x0123], NFKD: [0x0067, 0x0327] }, +{ source: [0x0124], NFC: [0x0124], NFD: [0x0048, 0x0302], NFKC: [0x0124], NFKD: [0x0048, 0x0302] }, +{ source: [0x0125], NFC: [0x0125], NFD: [0x0068, 0x0302], NFKC: [0x0125], NFKD: [0x0068, 0x0302] }, +{ source: [0x0128], NFC: [0x0128], NFD: [0x0049, 0x0303], NFKC: [0x0128], NFKD: [0x0049, 0x0303] }, +{ source: [0x0129], NFC: [0x0129], NFD: [0x0069, 0x0303], NFKC: [0x0129], NFKD: [0x0069, 0x0303] }, +{ source: [0x012A], NFC: [0x012A], NFD: [0x0049, 0x0304], NFKC: [0x012A], NFKD: [0x0049, 0x0304] }, +{ source: [0x012B], NFC: [0x012B], NFD: [0x0069, 0x0304], NFKC: [0x012B], NFKD: [0x0069, 0x0304] }, +{ source: [0x012C], NFC: [0x012C], NFD: [0x0049, 0x0306], NFKC: [0x012C], NFKD: [0x0049, 0x0306] }, +{ source: [0x012D], NFC: [0x012D], NFD: [0x0069, 0x0306], NFKC: [0x012D], NFKD: [0x0069, 0x0306] }, +{ source: [0x012E], NFC: [0x012E], NFD: [0x0049, 0x0328], NFKC: [0x012E], NFKD: [0x0049, 0x0328] }, +{ source: [0x012F], NFC: [0x012F], NFD: [0x0069, 0x0328], NFKC: [0x012F], NFKD: [0x0069, 0x0328] }, +{ source: [0x0130], NFC: [0x0130], NFD: [0x0049, 0x0307], NFKC: [0x0130], NFKD: [0x0049, 0x0307] }, +{ source: [0x0132], NFC: [0x0132], NFD: [0x0132], NFKC: [0x0049, 0x004A], NFKD: [0x0049, 0x004A] }, +{ source: [0x0133], NFC: [0x0133], NFD: [0x0133], NFKC: [0x0069, 0x006A], NFKD: [0x0069, 0x006A] }, +{ source: [0x0134], NFC: [0x0134], NFD: [0x004A, 0x0302], NFKC: [0x0134], NFKD: [0x004A, 0x0302] }, +{ source: [0x0135], NFC: [0x0135], NFD: [0x006A, 0x0302], NFKC: [0x0135], NFKD: [0x006A, 0x0302] }, +{ source: [0x0136], NFC: [0x0136], NFD: [0x004B, 0x0327], NFKC: [0x0136], NFKD: [0x004B, 0x0327] }, +{ source: [0x0137], NFC: [0x0137], NFD: [0x006B, 0x0327], NFKC: [0x0137], NFKD: [0x006B, 0x0327] }, +{ source: [0x0139], NFC: [0x0139], NFD: [0x004C, 0x0301], NFKC: [0x0139], NFKD: [0x004C, 0x0301] }, +{ source: [0x013A], NFC: [0x013A], NFD: [0x006C, 0x0301], NFKC: [0x013A], NFKD: [0x006C, 0x0301] }, +{ source: [0x013B], NFC: [0x013B], NFD: [0x004C, 0x0327], NFKC: [0x013B], NFKD: [0x004C, 0x0327] }, +{ source: [0x013C], NFC: [0x013C], NFD: [0x006C, 0x0327], NFKC: [0x013C], NFKD: [0x006C, 0x0327] }, +{ source: [0x013D], NFC: [0x013D], NFD: [0x004C, 0x030C], NFKC: [0x013D], NFKD: [0x004C, 0x030C] }, +{ source: [0x013E], NFC: [0x013E], NFD: [0x006C, 0x030C], NFKC: [0x013E], NFKD: [0x006C, 0x030C] }, +{ source: [0x013F], NFC: [0x013F], NFD: [0x013F], NFKC: [0x004C, 0x00B7], NFKD: [0x004C, 0x00B7] }, +{ source: [0x0140], NFC: [0x0140], NFD: [0x0140], NFKC: [0x006C, 0x00B7], NFKD: [0x006C, 0x00B7] }, +{ source: [0x0143], NFC: [0x0143], NFD: [0x004E, 0x0301], NFKC: [0x0143], NFKD: [0x004E, 0x0301] }, +{ source: [0x0144], NFC: [0x0144], NFD: [0x006E, 0x0301], NFKC: [0x0144], NFKD: [0x006E, 0x0301] }, +{ source: [0x0145], NFC: [0x0145], NFD: [0x004E, 0x0327], NFKC: [0x0145], NFKD: [0x004E, 0x0327] }, +{ source: [0x0146], NFC: [0x0146], NFD: [0x006E, 0x0327], NFKC: [0x0146], NFKD: [0x006E, 0x0327] }, +{ source: [0x0147], NFC: [0x0147], NFD: [0x004E, 0x030C], NFKC: [0x0147], NFKD: [0x004E, 0x030C] }, +{ source: [0x0148], NFC: [0x0148], NFD: [0x006E, 0x030C], NFKC: [0x0148], NFKD: [0x006E, 0x030C] }, +{ source: [0x0149], NFC: [0x0149], NFD: [0x0149], NFKC: [0x02BC, 0x006E], NFKD: [0x02BC, 0x006E] }, +{ source: [0x014C], NFC: [0x014C], NFD: [0x004F, 0x0304], NFKC: [0x014C], NFKD: [0x004F, 0x0304] }, +{ source: [0x014D], NFC: [0x014D], NFD: [0x006F, 0x0304], NFKC: [0x014D], NFKD: [0x006F, 0x0304] }, +{ source: [0x014E], NFC: [0x014E], NFD: [0x004F, 0x0306], NFKC: [0x014E], NFKD: [0x004F, 0x0306] }, +{ source: [0x014F], NFC: [0x014F], NFD: [0x006F, 0x0306], NFKC: [0x014F], NFKD: [0x006F, 0x0306] }, +{ source: [0x0150], NFC: [0x0150], NFD: [0x004F, 0x030B], NFKC: [0x0150], NFKD: [0x004F, 0x030B] }, +{ source: [0x0151], NFC: [0x0151], NFD: [0x006F, 0x030B], NFKC: [0x0151], NFKD: [0x006F, 0x030B] }, +{ source: [0x0154], NFC: [0x0154], NFD: [0x0052, 0x0301], NFKC: [0x0154], NFKD: [0x0052, 0x0301] }, +{ source: [0x0155], NFC: [0x0155], NFD: [0x0072, 0x0301], NFKC: [0x0155], NFKD: [0x0072, 0x0301] }, +{ source: [0x0156], NFC: [0x0156], NFD: [0x0052, 0x0327], NFKC: [0x0156], NFKD: [0x0052, 0x0327] }, +{ source: [0x0157], NFC: [0x0157], NFD: [0x0072, 0x0327], NFKC: [0x0157], NFKD: [0x0072, 0x0327] }, +{ source: [0x0158], NFC: [0x0158], NFD: [0x0052, 0x030C], NFKC: [0x0158], NFKD: [0x0052, 0x030C] }, +{ source: [0x0159], NFC: [0x0159], NFD: [0x0072, 0x030C], NFKC: [0x0159], NFKD: [0x0072, 0x030C] }, +{ source: [0x015A], NFC: [0x015A], NFD: [0x0053, 0x0301], NFKC: [0x015A], NFKD: [0x0053, 0x0301] }, +{ source: [0x015B], NFC: [0x015B], NFD: [0x0073, 0x0301], NFKC: [0x015B], NFKD: [0x0073, 0x0301] }, +{ source: [0x015C], NFC: [0x015C], NFD: [0x0053, 0x0302], NFKC: [0x015C], NFKD: [0x0053, 0x0302] }, +{ source: [0x015D], NFC: [0x015D], NFD: [0x0073, 0x0302], NFKC: [0x015D], NFKD: [0x0073, 0x0302] }, +{ source: [0x015E], NFC: [0x015E], NFD: [0x0053, 0x0327], NFKC: [0x015E], NFKD: [0x0053, 0x0327] }, +{ source: [0x015F], NFC: [0x015F], NFD: [0x0073, 0x0327], NFKC: [0x015F], NFKD: [0x0073, 0x0327] }, +{ source: [0x0160], NFC: [0x0160], NFD: [0x0053, 0x030C], NFKC: [0x0160], NFKD: [0x0053, 0x030C] }, +{ source: [0x0161], NFC: [0x0161], NFD: [0x0073, 0x030C], NFKC: [0x0161], NFKD: [0x0073, 0x030C] }, +{ source: [0x0162], NFC: [0x0162], NFD: [0x0054, 0x0327], NFKC: [0x0162], NFKD: [0x0054, 0x0327] }, +{ source: [0x0163], NFC: [0x0163], NFD: [0x0074, 0x0327], NFKC: [0x0163], NFKD: [0x0074, 0x0327] }, +{ source: [0x0164], NFC: [0x0164], NFD: [0x0054, 0x030C], NFKC: [0x0164], NFKD: [0x0054, 0x030C] }, +{ source: [0x0165], NFC: [0x0165], NFD: [0x0074, 0x030C], NFKC: [0x0165], NFKD: [0x0074, 0x030C] }, +{ source: [0x0168], NFC: [0x0168], NFD: [0x0055, 0x0303], NFKC: [0x0168], NFKD: [0x0055, 0x0303] }, +{ source: [0x0169], NFC: [0x0169], NFD: [0x0075, 0x0303], NFKC: [0x0169], NFKD: [0x0075, 0x0303] }, +{ source: [0x016A], NFC: [0x016A], NFD: [0x0055, 0x0304], NFKC: [0x016A], NFKD: [0x0055, 0x0304] }, +{ source: [0x016B], NFC: [0x016B], NFD: [0x0075, 0x0304], NFKC: [0x016B], NFKD: [0x0075, 0x0304] }, +{ source: [0x016C], NFC: [0x016C], NFD: [0x0055, 0x0306], NFKC: [0x016C], NFKD: [0x0055, 0x0306] }, +{ source: [0x016D], NFC: [0x016D], NFD: [0x0075, 0x0306], NFKC: [0x016D], NFKD: [0x0075, 0x0306] }, +{ source: [0x016E], NFC: [0x016E], NFD: [0x0055, 0x030A], NFKC: [0x016E], NFKD: [0x0055, 0x030A] }, +{ source: [0x016F], NFC: [0x016F], NFD: [0x0075, 0x030A], NFKC: [0x016F], NFKD: [0x0075, 0x030A] }, +{ source: [0x0170], NFC: [0x0170], NFD: [0x0055, 0x030B], NFKC: [0x0170], NFKD: [0x0055, 0x030B] }, +{ source: [0x0171], NFC: [0x0171], NFD: [0x0075, 0x030B], NFKC: [0x0171], NFKD: [0x0075, 0x030B] }, +{ source: [0x0172], NFC: [0x0172], NFD: [0x0055, 0x0328], NFKC: [0x0172], NFKD: [0x0055, 0x0328] }, +{ source: [0x0173], NFC: [0x0173], NFD: [0x0075, 0x0328], NFKC: [0x0173], NFKD: [0x0075, 0x0328] }, +{ source: [0x0174], NFC: [0x0174], NFD: [0x0057, 0x0302], NFKC: [0x0174], NFKD: [0x0057, 0x0302] }, +{ source: [0x0175], NFC: [0x0175], NFD: [0x0077, 0x0302], NFKC: [0x0175], NFKD: [0x0077, 0x0302] }, +{ source: [0x0176], NFC: [0x0176], NFD: [0x0059, 0x0302], NFKC: [0x0176], NFKD: [0x0059, 0x0302] }, +{ source: [0x0177], NFC: [0x0177], NFD: [0x0079, 0x0302], NFKC: [0x0177], NFKD: [0x0079, 0x0302] }, +{ source: [0x0178], NFC: [0x0178], NFD: [0x0059, 0x0308], NFKC: [0x0178], NFKD: [0x0059, 0x0308] }, +{ source: [0x0179], NFC: [0x0179], NFD: [0x005A, 0x0301], NFKC: [0x0179], NFKD: [0x005A, 0x0301] }, +{ source: [0x017A], NFC: [0x017A], NFD: [0x007A, 0x0301], NFKC: [0x017A], NFKD: [0x007A, 0x0301] }, +{ source: [0x017B], NFC: [0x017B], NFD: [0x005A, 0x0307], NFKC: [0x017B], NFKD: [0x005A, 0x0307] }, +{ source: [0x017C], NFC: [0x017C], NFD: [0x007A, 0x0307], NFKC: [0x017C], NFKD: [0x007A, 0x0307] }, +{ source: [0x017D], NFC: [0x017D], NFD: [0x005A, 0x030C], NFKC: [0x017D], NFKD: [0x005A, 0x030C] }, +{ source: [0x017E], NFC: [0x017E], NFD: [0x007A, 0x030C], NFKC: [0x017E], NFKD: [0x007A, 0x030C] }, +{ source: [0x017F], NFC: [0x017F], NFD: [0x017F], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x01A0], NFC: [0x01A0], NFD: [0x004F, 0x031B], NFKC: [0x01A0], NFKD: [0x004F, 0x031B] }, +{ source: [0x01A1], NFC: [0x01A1], NFD: [0x006F, 0x031B], NFKC: [0x01A1], NFKD: [0x006F, 0x031B] }, +{ source: [0x01AF], NFC: [0x01AF], NFD: [0x0055, 0x031B], NFKC: [0x01AF], NFKD: [0x0055, 0x031B] }, +{ source: [0x01B0], NFC: [0x01B0], NFD: [0x0075, 0x031B], NFKC: [0x01B0], NFKD: [0x0075, 0x031B] }, +{ source: [0x01C4], NFC: [0x01C4], NFD: [0x01C4], NFKC: [0x0044, 0x017D], NFKD: [0x0044, 0x005A, 0x030C] }, +{ source: [0x01C5], NFC: [0x01C5], NFD: [0x01C5], NFKC: [0x0044, 0x017E], NFKD: [0x0044, 0x007A, 0x030C] }, +{ source: [0x01C6], NFC: [0x01C6], NFD: [0x01C6], NFKC: [0x0064, 0x017E], NFKD: [0x0064, 0x007A, 0x030C] }, +{ source: [0x01C7], NFC: [0x01C7], NFD: [0x01C7], NFKC: [0x004C, 0x004A], NFKD: [0x004C, 0x004A] }, +{ source: [0x01C8], NFC: [0x01C8], NFD: [0x01C8], NFKC: [0x004C, 0x006A], NFKD: [0x004C, 0x006A] }, +{ source: [0x01C9], NFC: [0x01C9], NFD: [0x01C9], NFKC: [0x006C, 0x006A], NFKD: [0x006C, 0x006A] }, +{ source: [0x01CA], NFC: [0x01CA], NFD: [0x01CA], NFKC: [0x004E, 0x004A], NFKD: [0x004E, 0x004A] }, +{ source: [0x01CB], NFC: [0x01CB], NFD: [0x01CB], NFKC: [0x004E, 0x006A], NFKD: [0x004E, 0x006A] }, +{ source: [0x01CC], NFC: [0x01CC], NFD: [0x01CC], NFKC: [0x006E, 0x006A], NFKD: [0x006E, 0x006A] }, +{ source: [0x01CD], NFC: [0x01CD], NFD: [0x0041, 0x030C], NFKC: [0x01CD], NFKD: [0x0041, 0x030C] }, +{ source: [0x01CE], NFC: [0x01CE], NFD: [0x0061, 0x030C], NFKC: [0x01CE], NFKD: [0x0061, 0x030C] }, +{ source: [0x01CF], NFC: [0x01CF], NFD: [0x0049, 0x030C], NFKC: [0x01CF], NFKD: [0x0049, 0x030C] }, +{ source: [0x01D0], NFC: [0x01D0], NFD: [0x0069, 0x030C], NFKC: [0x01D0], NFKD: [0x0069, 0x030C] }, +{ source: [0x01D1], NFC: [0x01D1], NFD: [0x004F, 0x030C], NFKC: [0x01D1], NFKD: [0x004F, 0x030C] }, +{ source: [0x01D2], NFC: [0x01D2], NFD: [0x006F, 0x030C], NFKC: [0x01D2], NFKD: [0x006F, 0x030C] }, +{ source: [0x01D3], NFC: [0x01D3], NFD: [0x0055, 0x030C], NFKC: [0x01D3], NFKD: [0x0055, 0x030C] }, +{ source: [0x01D4], NFC: [0x01D4], NFD: [0x0075, 0x030C], NFKC: [0x01D4], NFKD: [0x0075, 0x030C] }, +{ source: [0x01D5], NFC: [0x01D5], NFD: [0x0055, 0x0308, 0x0304], NFKC: [0x01D5], NFKD: [0x0055, 0x0308, 0x0304] }, +{ source: [0x01D6], NFC: [0x01D6], NFD: [0x0075, 0x0308, 0x0304], NFKC: [0x01D6], NFKD: [0x0075, 0x0308, 0x0304] }, +{ source: [0x01D7], NFC: [0x01D7], NFD: [0x0055, 0x0308, 0x0301], NFKC: [0x01D7], NFKD: [0x0055, 0x0308, 0x0301] }, +{ source: [0x01D8], NFC: [0x01D8], NFD: [0x0075, 0x0308, 0x0301], NFKC: [0x01D8], NFKD: [0x0075, 0x0308, 0x0301] }, +{ source: [0x01D9], NFC: [0x01D9], NFD: [0x0055, 0x0308, 0x030C], NFKC: [0x01D9], NFKD: [0x0055, 0x0308, 0x030C] }, +{ source: [0x01DA], NFC: [0x01DA], NFD: [0x0075, 0x0308, 0x030C], NFKC: [0x01DA], NFKD: [0x0075, 0x0308, 0x030C] }, +{ source: [0x01DB], NFC: [0x01DB], NFD: [0x0055, 0x0308, 0x0300], NFKC: [0x01DB], NFKD: [0x0055, 0x0308, 0x0300] }, +{ source: [0x01DC], NFC: [0x01DC], NFD: [0x0075, 0x0308, 0x0300], NFKC: [0x01DC], NFKD: [0x0075, 0x0308, 0x0300] }, +{ source: [0x01DE], NFC: [0x01DE], NFD: [0x0041, 0x0308, 0x0304], NFKC: [0x01DE], NFKD: [0x0041, 0x0308, 0x0304] }, +{ source: [0x01DF], NFC: [0x01DF], NFD: [0x0061, 0x0308, 0x0304], NFKC: [0x01DF], NFKD: [0x0061, 0x0308, 0x0304] }, +{ source: [0x01E0], NFC: [0x01E0], NFD: [0x0041, 0x0307, 0x0304], NFKC: [0x01E0], NFKD: [0x0041, 0x0307, 0x0304] }, +{ source: [0x01E1], NFC: [0x01E1], NFD: [0x0061, 0x0307, 0x0304], NFKC: [0x01E1], NFKD: [0x0061, 0x0307, 0x0304] }, +{ source: [0x01E2], NFC: [0x01E2], NFD: [0x00C6, 0x0304], NFKC: [0x01E2], NFKD: [0x00C6, 0x0304] }, +{ source: [0x01E3], NFC: [0x01E3], NFD: [0x00E6, 0x0304], NFKC: [0x01E3], NFKD: [0x00E6, 0x0304] }, +{ source: [0x01E6], NFC: [0x01E6], NFD: [0x0047, 0x030C], NFKC: [0x01E6], NFKD: [0x0047, 0x030C] }, +{ source: [0x01E7], NFC: [0x01E7], NFD: [0x0067, 0x030C], NFKC: [0x01E7], NFKD: [0x0067, 0x030C] }, +{ source: [0x01E8], NFC: [0x01E8], NFD: [0x004B, 0x030C], NFKC: [0x01E8], NFKD: [0x004B, 0x030C] }, +{ source: [0x01E9], NFC: [0x01E9], NFD: [0x006B, 0x030C], NFKC: [0x01E9], NFKD: [0x006B, 0x030C] }, +{ source: [0x01EA], NFC: [0x01EA], NFD: [0x004F, 0x0328], NFKC: [0x01EA], NFKD: [0x004F, 0x0328] }, +{ source: [0x01EB], NFC: [0x01EB], NFD: [0x006F, 0x0328], NFKC: [0x01EB], NFKD: [0x006F, 0x0328] }, +{ source: [0x01EC], NFC: [0x01EC], NFD: [0x004F, 0x0328, 0x0304], NFKC: [0x01EC], NFKD: [0x004F, 0x0328, 0x0304] }, +{ source: [0x01ED], NFC: [0x01ED], NFD: [0x006F, 0x0328, 0x0304], NFKC: [0x01ED], NFKD: [0x006F, 0x0328, 0x0304] }, +{ source: [0x01EE], NFC: [0x01EE], NFD: [0x01B7, 0x030C], NFKC: [0x01EE], NFKD: [0x01B7, 0x030C] }, +{ source: [0x01EF], NFC: [0x01EF], NFD: [0x0292, 0x030C], NFKC: [0x01EF], NFKD: [0x0292, 0x030C] }, +{ source: [0x01F0], NFC: [0x01F0], NFD: [0x006A, 0x030C], NFKC: [0x01F0], NFKD: [0x006A, 0x030C] }, +{ source: [0x01F1], NFC: [0x01F1], NFD: [0x01F1], NFKC: [0x0044, 0x005A], NFKD: [0x0044, 0x005A] }, +{ source: [0x01F2], NFC: [0x01F2], NFD: [0x01F2], NFKC: [0x0044, 0x007A], NFKD: [0x0044, 0x007A] }, +{ source: [0x01F3], NFC: [0x01F3], NFD: [0x01F3], NFKC: [0x0064, 0x007A], NFKD: [0x0064, 0x007A] }, +{ source: [0x01F4], NFC: [0x01F4], NFD: [0x0047, 0x0301], NFKC: [0x01F4], NFKD: [0x0047, 0x0301] }, +{ source: [0x01F5], NFC: [0x01F5], NFD: [0x0067, 0x0301], NFKC: [0x01F5], NFKD: [0x0067, 0x0301] }, +{ source: [0x01F8], NFC: [0x01F8], NFD: [0x004E, 0x0300], NFKC: [0x01F8], NFKD: [0x004E, 0x0300] }, +{ source: [0x01F9], NFC: [0x01F9], NFD: [0x006E, 0x0300], NFKC: [0x01F9], NFKD: [0x006E, 0x0300] }, +{ source: [0x01FA], NFC: [0x01FA], NFD: [0x0041, 0x030A, 0x0301], NFKC: [0x01FA], NFKD: [0x0041, 0x030A, 0x0301] }, +{ source: [0x01FB], NFC: [0x01FB], NFD: [0x0061, 0x030A, 0x0301], NFKC: [0x01FB], NFKD: [0x0061, 0x030A, 0x0301] }, +{ source: [0x01FC], NFC: [0x01FC], NFD: [0x00C6, 0x0301], NFKC: [0x01FC], NFKD: [0x00C6, 0x0301] }, +{ source: [0x01FD], NFC: [0x01FD], NFD: [0x00E6, 0x0301], NFKC: [0x01FD], NFKD: [0x00E6, 0x0301] }, +{ source: [0x01FE], NFC: [0x01FE], NFD: [0x00D8, 0x0301], NFKC: [0x01FE], NFKD: [0x00D8, 0x0301] }, +{ source: [0x01FF], NFC: [0x01FF], NFD: [0x00F8, 0x0301], NFKC: [0x01FF], NFKD: [0x00F8, 0x0301] }, +{ source: [0x0200], NFC: [0x0200], NFD: [0x0041, 0x030F], NFKC: [0x0200], NFKD: [0x0041, 0x030F] }, +{ source: [0x0201], NFC: [0x0201], NFD: [0x0061, 0x030F], NFKC: [0x0201], NFKD: [0x0061, 0x030F] }, +{ source: [0x0202], NFC: [0x0202], NFD: [0x0041, 0x0311], NFKC: [0x0202], NFKD: [0x0041, 0x0311] }, +{ source: [0x0203], NFC: [0x0203], NFD: [0x0061, 0x0311], NFKC: [0x0203], NFKD: [0x0061, 0x0311] }, +{ source: [0x0204], NFC: [0x0204], NFD: [0x0045, 0x030F], NFKC: [0x0204], NFKD: [0x0045, 0x030F] }, +{ source: [0x0205], NFC: [0x0205], NFD: [0x0065, 0x030F], NFKC: [0x0205], NFKD: [0x0065, 0x030F] }, +{ source: [0x0206], NFC: [0x0206], NFD: [0x0045, 0x0311], NFKC: [0x0206], NFKD: [0x0045, 0x0311] }, +{ source: [0x0207], NFC: [0x0207], NFD: [0x0065, 0x0311], NFKC: [0x0207], NFKD: [0x0065, 0x0311] }, +{ source: [0x0208], NFC: [0x0208], NFD: [0x0049, 0x030F], NFKC: [0x0208], NFKD: [0x0049, 0x030F] }, +{ source: [0x0209], NFC: [0x0209], NFD: [0x0069, 0x030F], NFKC: [0x0209], NFKD: [0x0069, 0x030F] }, +{ source: [0x020A], NFC: [0x020A], NFD: [0x0049, 0x0311], NFKC: [0x020A], NFKD: [0x0049, 0x0311] }, +{ source: [0x020B], NFC: [0x020B], NFD: [0x0069, 0x0311], NFKC: [0x020B], NFKD: [0x0069, 0x0311] }, +{ source: [0x020C], NFC: [0x020C], NFD: [0x004F, 0x030F], NFKC: [0x020C], NFKD: [0x004F, 0x030F] }, +{ source: [0x020D], NFC: [0x020D], NFD: [0x006F, 0x030F], NFKC: [0x020D], NFKD: [0x006F, 0x030F] }, +{ source: [0x020E], NFC: [0x020E], NFD: [0x004F, 0x0311], NFKC: [0x020E], NFKD: [0x004F, 0x0311] }, +{ source: [0x020F], NFC: [0x020F], NFD: [0x006F, 0x0311], NFKC: [0x020F], NFKD: [0x006F, 0x0311] }, +{ source: [0x0210], NFC: [0x0210], NFD: [0x0052, 0x030F], NFKC: [0x0210], NFKD: [0x0052, 0x030F] }, +{ source: [0x0211], NFC: [0x0211], NFD: [0x0072, 0x030F], NFKC: [0x0211], NFKD: [0x0072, 0x030F] }, +{ source: [0x0212], NFC: [0x0212], NFD: [0x0052, 0x0311], NFKC: [0x0212], NFKD: [0x0052, 0x0311] }, +{ source: [0x0213], NFC: [0x0213], NFD: [0x0072, 0x0311], NFKC: [0x0213], NFKD: [0x0072, 0x0311] }, +{ source: [0x0214], NFC: [0x0214], NFD: [0x0055, 0x030F], NFKC: [0x0214], NFKD: [0x0055, 0x030F] }, +{ source: [0x0215], NFC: [0x0215], NFD: [0x0075, 0x030F], NFKC: [0x0215], NFKD: [0x0075, 0x030F] }, +{ source: [0x0216], NFC: [0x0216], NFD: [0x0055, 0x0311], NFKC: [0x0216], NFKD: [0x0055, 0x0311] }, +{ source: [0x0217], NFC: [0x0217], NFD: [0x0075, 0x0311], NFKC: [0x0217], NFKD: [0x0075, 0x0311] }, +{ source: [0x0218], NFC: [0x0218], NFD: [0x0053, 0x0326], NFKC: [0x0218], NFKD: [0x0053, 0x0326] }, +{ source: [0x0219], NFC: [0x0219], NFD: [0x0073, 0x0326], NFKC: [0x0219], NFKD: [0x0073, 0x0326] }, +{ source: [0x021A], NFC: [0x021A], NFD: [0x0054, 0x0326], NFKC: [0x021A], NFKD: [0x0054, 0x0326] }, +{ source: [0x021B], NFC: [0x021B], NFD: [0x0074, 0x0326], NFKC: [0x021B], NFKD: [0x0074, 0x0326] }, +{ source: [0x021E], NFC: [0x021E], NFD: [0x0048, 0x030C], NFKC: [0x021E], NFKD: [0x0048, 0x030C] }, +{ source: [0x021F], NFC: [0x021F], NFD: [0x0068, 0x030C], NFKC: [0x021F], NFKD: [0x0068, 0x030C] }, +{ source: [0x0226], NFC: [0x0226], NFD: [0x0041, 0x0307], NFKC: [0x0226], NFKD: [0x0041, 0x0307] }, +{ source: [0x0227], NFC: [0x0227], NFD: [0x0061, 0x0307], NFKC: [0x0227], NFKD: [0x0061, 0x0307] }, +{ source: [0x0228], NFC: [0x0228], NFD: [0x0045, 0x0327], NFKC: [0x0228], NFKD: [0x0045, 0x0327] }, +{ source: [0x0229], NFC: [0x0229], NFD: [0x0065, 0x0327], NFKC: [0x0229], NFKD: [0x0065, 0x0327] }, +{ source: [0x022A], NFC: [0x022A], NFD: [0x004F, 0x0308, 0x0304], NFKC: [0x022A], NFKD: [0x004F, 0x0308, 0x0304] }, +{ source: [0x022B], NFC: [0x022B], NFD: [0x006F, 0x0308, 0x0304], NFKC: [0x022B], NFKD: [0x006F, 0x0308, 0x0304] }, +{ source: [0x022C], NFC: [0x022C], NFD: [0x004F, 0x0303, 0x0304], NFKC: [0x022C], NFKD: [0x004F, 0x0303, 0x0304] }, +{ source: [0x022D], NFC: [0x022D], NFD: [0x006F, 0x0303, 0x0304], NFKC: [0x022D], NFKD: [0x006F, 0x0303, 0x0304] }, +{ source: [0x022E], NFC: [0x022E], NFD: [0x004F, 0x0307], NFKC: [0x022E], NFKD: [0x004F, 0x0307] }, +{ source: [0x022F], NFC: [0x022F], NFD: [0x006F, 0x0307], NFKC: [0x022F], NFKD: [0x006F, 0x0307] }, +{ source: [0x0230], NFC: [0x0230], NFD: [0x004F, 0x0307, 0x0304], NFKC: [0x0230], NFKD: [0x004F, 0x0307, 0x0304] }, +{ source: [0x0231], NFC: [0x0231], NFD: [0x006F, 0x0307, 0x0304], NFKC: [0x0231], NFKD: [0x006F, 0x0307, 0x0304] }, +{ source: [0x0232], NFC: [0x0232], NFD: [0x0059, 0x0304], NFKC: [0x0232], NFKD: [0x0059, 0x0304] }, +{ source: [0x0233], NFC: [0x0233], NFD: [0x0079, 0x0304], NFKC: [0x0233], NFKD: [0x0079, 0x0304] }, +{ source: [0x02B0], NFC: [0x02B0], NFD: [0x02B0], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x02B1], NFC: [0x02B1], NFD: [0x02B1], NFKC: [0x0266], NFKD: [0x0266] }, +{ source: [0x02B2], NFC: [0x02B2], NFD: [0x02B2], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x02B3], NFC: [0x02B3], NFD: [0x02B3], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x02B4], NFC: [0x02B4], NFD: [0x02B4], NFKC: [0x0279], NFKD: [0x0279] }, +{ source: [0x02B5], NFC: [0x02B5], NFD: [0x02B5], NFKC: [0x027B], NFKD: [0x027B] }, +{ source: [0x02B6], NFC: [0x02B6], NFD: [0x02B6], NFKC: [0x0281], NFKD: [0x0281] }, +{ source: [0x02B7], NFC: [0x02B7], NFD: [0x02B7], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x02B8], NFC: [0x02B8], NFD: [0x02B8], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x02D8], NFC: [0x02D8], NFD: [0x02D8], NFKC: [0x0020, 0x0306], NFKD: [0x0020, 0x0306] }, +{ source: [0x02D9], NFC: [0x02D9], NFD: [0x02D9], NFKC: [0x0020, 0x0307], NFKD: [0x0020, 0x0307] }, +{ source: [0x02DA], NFC: [0x02DA], NFD: [0x02DA], NFKC: [0x0020, 0x030A], NFKD: [0x0020, 0x030A] }, +{ source: [0x02DB], NFC: [0x02DB], NFD: [0x02DB], NFKC: [0x0020, 0x0328], NFKD: [0x0020, 0x0328] }, +{ source: [0x02DC], NFC: [0x02DC], NFD: [0x02DC], NFKC: [0x0020, 0x0303], NFKD: [0x0020, 0x0303] }, +{ source: [0x02DD], NFC: [0x02DD], NFD: [0x02DD], NFKC: [0x0020, 0x030B], NFKD: [0x0020, 0x030B] }, +{ source: [0x02E0], NFC: [0x02E0], NFD: [0x02E0], NFKC: [0x0263], NFKD: [0x0263] }, +{ source: [0x02E1], NFC: [0x02E1], NFD: [0x02E1], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x02E2], NFC: [0x02E2], NFD: [0x02E2], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x02E3], NFC: [0x02E3], NFD: [0x02E3], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x02E4], NFC: [0x02E4], NFD: [0x02E4], NFKC: [0x0295], NFKD: [0x0295] }, +{ source: [0x0340], NFC: [0x0300], NFD: [0x0300], NFKC: [0x0300], NFKD: [0x0300] }, +{ source: [0x0341], NFC: [0x0301], NFD: [0x0301], NFKC: [0x0301], NFKD: [0x0301] }, +{ source: [0x0343], NFC: [0x0313], NFD: [0x0313], NFKC: [0x0313], NFKD: [0x0313] }, +{ source: [0x0344], NFC: [0x0308, 0x0301], NFD: [0x0308, 0x0301], NFKC: [0x0308, 0x0301], NFKD: [0x0308, 0x0301] }, +{ source: [0x0374], NFC: [0x02B9], NFD: [0x02B9], NFKC: [0x02B9], NFKD: [0x02B9] }, +{ source: [0x037A], NFC: [0x037A], NFD: [0x037A], NFKC: [0x0020, 0x0345], NFKD: [0x0020, 0x0345] }, +{ source: [0x037E], NFC: [0x003B], NFD: [0x003B], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0x0384], NFC: [0x0384], NFD: [0x0384], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] }, +{ source: [0x0385], NFC: [0x0385], NFD: [0x00A8, 0x0301], NFKC: [0x0020, 0x0308, 0x0301], NFKD: [0x0020, 0x0308, 0x0301] }, +{ source: [0x0386], NFC: [0x0386], NFD: [0x0391, 0x0301], NFKC: [0x0386], NFKD: [0x0391, 0x0301] }, +{ source: [0x0387], NFC: [0x00B7], NFD: [0x00B7], NFKC: [0x00B7], NFKD: [0x00B7] }, +{ source: [0x0388], NFC: [0x0388], NFD: [0x0395, 0x0301], NFKC: [0x0388], NFKD: [0x0395, 0x0301] }, +{ source: [0x0389], NFC: [0x0389], NFD: [0x0397, 0x0301], NFKC: [0x0389], NFKD: [0x0397, 0x0301] }, +{ source: [0x038A], NFC: [0x038A], NFD: [0x0399, 0x0301], NFKC: [0x038A], NFKD: [0x0399, 0x0301] }, +{ source: [0x038C], NFC: [0x038C], NFD: [0x039F, 0x0301], NFKC: [0x038C], NFKD: [0x039F, 0x0301] }, +{ source: [0x038E], NFC: [0x038E], NFD: [0x03A5, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] }, +{ source: [0x038F], NFC: [0x038F], NFD: [0x03A9, 0x0301], NFKC: [0x038F], NFKD: [0x03A9, 0x0301] }, +{ source: [0x0390], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03AA], NFC: [0x03AA], NFD: [0x0399, 0x0308], NFKC: [0x03AA], NFKD: [0x0399, 0x0308] }, +{ source: [0x03AB], NFC: [0x03AB], NFD: [0x03A5, 0x0308], NFKC: [0x03AB], NFKD: [0x03A5, 0x0308] }, +{ source: [0x03AC], NFC: [0x03AC], NFD: [0x03B1, 0x0301], NFKC: [0x03AC], NFKD: [0x03B1, 0x0301] }, +{ source: [0x03AD], NFC: [0x03AD], NFD: [0x03B5, 0x0301], NFKC: [0x03AD], NFKD: [0x03B5, 0x0301] }, +{ source: [0x03AE], NFC: [0x03AE], NFD: [0x03B7, 0x0301], NFKC: [0x03AE], NFKD: [0x03B7, 0x0301] }, +{ source: [0x03AF], NFC: [0x03AF], NFD: [0x03B9, 0x0301], NFKC: [0x03AF], NFKD: [0x03B9, 0x0301] }, +{ source: [0x03B0], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x03CA], NFC: [0x03CA], NFD: [0x03B9, 0x0308], NFKC: [0x03CA], NFKD: [0x03B9, 0x0308] }, +{ source: [0x03CB], NFC: [0x03CB], NFD: [0x03C5, 0x0308], NFKC: [0x03CB], NFKD: [0x03C5, 0x0308] }, +{ source: [0x03CC], NFC: [0x03CC], NFD: [0x03BF, 0x0301], NFKC: [0x03CC], NFKD: [0x03BF, 0x0301] }, +{ source: [0x03CD], NFC: [0x03CD], NFD: [0x03C5, 0x0301], NFKC: [0x03CD], NFKD: [0x03C5, 0x0301] }, +{ source: [0x03CE], NFC: [0x03CE], NFD: [0x03C9, 0x0301], NFKC: [0x03CE], NFKD: [0x03C9, 0x0301] }, +{ source: [0x03D0], NFC: [0x03D0], NFD: [0x03D0], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x03D1], NFC: [0x03D1], NFD: [0x03D1], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x03D2], NFC: [0x03D2], NFD: [0x03D2], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x03D3], NFC: [0x03D3], NFD: [0x03D2, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] }, +{ source: [0x03D4], NFC: [0x03D4], NFD: [0x03D2, 0x0308], NFKC: [0x03AB], NFKD: [0x03A5, 0x0308] }, +{ source: [0x03D5], NFC: [0x03D5], NFD: [0x03D5], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x03D6], NFC: [0x03D6], NFD: [0x03D6], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x03F0], NFC: [0x03F0], NFD: [0x03F0], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x03F1], NFC: [0x03F1], NFD: [0x03F1], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x03F2], NFC: [0x03F2], NFD: [0x03F2], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x03F4], NFC: [0x03F4], NFD: [0x03F4], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x03F5], NFC: [0x03F5], NFD: [0x03F5], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x03F9], NFC: [0x03F9], NFD: [0x03F9], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x0400], NFC: [0x0400], NFD: [0x0415, 0x0300], NFKC: [0x0400], NFKD: [0x0415, 0x0300] }, +{ source: [0x0401], NFC: [0x0401], NFD: [0x0415, 0x0308], NFKC: [0x0401], NFKD: [0x0415, 0x0308] }, +{ source: [0x0403], NFC: [0x0403], NFD: [0x0413, 0x0301], NFKC: [0x0403], NFKD: [0x0413, 0x0301] }, +{ source: [0x0407], NFC: [0x0407], NFD: [0x0406, 0x0308], NFKC: [0x0407], NFKD: [0x0406, 0x0308] }, +{ source: [0x040C], NFC: [0x040C], NFD: [0x041A, 0x0301], NFKC: [0x040C], NFKD: [0x041A, 0x0301] }, +{ source: [0x040D], NFC: [0x040D], NFD: [0x0418, 0x0300], NFKC: [0x040D], NFKD: [0x0418, 0x0300] }, +{ source: [0x040E], NFC: [0x040E], NFD: [0x0423, 0x0306], NFKC: [0x040E], NFKD: [0x0423, 0x0306] }, +{ source: [0x0419], NFC: [0x0419], NFD: [0x0418, 0x0306], NFKC: [0x0419], NFKD: [0x0418, 0x0306] }, +{ source: [0x0439], NFC: [0x0439], NFD: [0x0438, 0x0306], NFKC: [0x0439], NFKD: [0x0438, 0x0306] }, +{ source: [0x0450], NFC: [0x0450], NFD: [0x0435, 0x0300], NFKC: [0x0450], NFKD: [0x0435, 0x0300] }, +{ source: [0x0451], NFC: [0x0451], NFD: [0x0435, 0x0308], NFKC: [0x0451], NFKD: [0x0435, 0x0308] }, +{ source: [0x0453], NFC: [0x0453], NFD: [0x0433, 0x0301], NFKC: [0x0453], NFKD: [0x0433, 0x0301] }, +{ source: [0x0457], NFC: [0x0457], NFD: [0x0456, 0x0308], NFKC: [0x0457], NFKD: [0x0456, 0x0308] }, +{ source: [0x045C], NFC: [0x045C], NFD: [0x043A, 0x0301], NFKC: [0x045C], NFKD: [0x043A, 0x0301] }, +{ source: [0x045D], NFC: [0x045D], NFD: [0x0438, 0x0300], NFKC: [0x045D], NFKD: [0x0438, 0x0300] }, +{ source: [0x045E], NFC: [0x045E], NFD: [0x0443, 0x0306], NFKC: [0x045E], NFKD: [0x0443, 0x0306] }, +{ source: [0x0476], NFC: [0x0476], NFD: [0x0474, 0x030F], NFKC: [0x0476], NFKD: [0x0474, 0x030F] }, +{ source: [0x0477], NFC: [0x0477], NFD: [0x0475, 0x030F], NFKC: [0x0477], NFKD: [0x0475, 0x030F] }, +{ source: [0x04C1], NFC: [0x04C1], NFD: [0x0416, 0x0306], NFKC: [0x04C1], NFKD: [0x0416, 0x0306] }, +{ source: [0x04C2], NFC: [0x04C2], NFD: [0x0436, 0x0306], NFKC: [0x04C2], NFKD: [0x0436, 0x0306] }, +{ source: [0x04D0], NFC: [0x04D0], NFD: [0x0410, 0x0306], NFKC: [0x04D0], NFKD: [0x0410, 0x0306] }, +{ source: [0x04D1], NFC: [0x04D1], NFD: [0x0430, 0x0306], NFKC: [0x04D1], NFKD: [0x0430, 0x0306] }, +{ source: [0x04D2], NFC: [0x04D2], NFD: [0x0410, 0x0308], NFKC: [0x04D2], NFKD: [0x0410, 0x0308] }, +{ source: [0x04D3], NFC: [0x04D3], NFD: [0x0430, 0x0308], NFKC: [0x04D3], NFKD: [0x0430, 0x0308] }, +{ source: [0x04D6], NFC: [0x04D6], NFD: [0x0415, 0x0306], NFKC: [0x04D6], NFKD: [0x0415, 0x0306] }, +{ source: [0x04D7], NFC: [0x04D7], NFD: [0x0435, 0x0306], NFKC: [0x04D7], NFKD: [0x0435, 0x0306] }, +{ source: [0x04DA], NFC: [0x04DA], NFD: [0x04D8, 0x0308], NFKC: [0x04DA], NFKD: [0x04D8, 0x0308] }, +{ source: [0x04DB], NFC: [0x04DB], NFD: [0x04D9, 0x0308], NFKC: [0x04DB], NFKD: [0x04D9, 0x0308] }, +{ source: [0x04DC], NFC: [0x04DC], NFD: [0x0416, 0x0308], NFKC: [0x04DC], NFKD: [0x0416, 0x0308] }, +{ source: [0x04DD], NFC: [0x04DD], NFD: [0x0436, 0x0308], NFKC: [0x04DD], NFKD: [0x0436, 0x0308] }, +{ source: [0x04DE], NFC: [0x04DE], NFD: [0x0417, 0x0308], NFKC: [0x04DE], NFKD: [0x0417, 0x0308] }, +{ source: [0x04DF], NFC: [0x04DF], NFD: [0x0437, 0x0308], NFKC: [0x04DF], NFKD: [0x0437, 0x0308] }, +{ source: [0x04E2], NFC: [0x04E2], NFD: [0x0418, 0x0304], NFKC: [0x04E2], NFKD: [0x0418, 0x0304] }, +{ source: [0x04E3], NFC: [0x04E3], NFD: [0x0438, 0x0304], NFKC: [0x04E3], NFKD: [0x0438, 0x0304] }, +{ source: [0x04E4], NFC: [0x04E4], NFD: [0x0418, 0x0308], NFKC: [0x04E4], NFKD: [0x0418, 0x0308] }, +{ source: [0x04E5], NFC: [0x04E5], NFD: [0x0438, 0x0308], NFKC: [0x04E5], NFKD: [0x0438, 0x0308] }, +{ source: [0x04E6], NFC: [0x04E6], NFD: [0x041E, 0x0308], NFKC: [0x04E6], NFKD: [0x041E, 0x0308] }, +{ source: [0x04E7], NFC: [0x04E7], NFD: [0x043E, 0x0308], NFKC: [0x04E7], NFKD: [0x043E, 0x0308] }, +{ source: [0x04EA], NFC: [0x04EA], NFD: [0x04E8, 0x0308], NFKC: [0x04EA], NFKD: [0x04E8, 0x0308] }, +{ source: [0x04EB], NFC: [0x04EB], NFD: [0x04E9, 0x0308], NFKC: [0x04EB], NFKD: [0x04E9, 0x0308] }, +{ source: [0x04EC], NFC: [0x04EC], NFD: [0x042D, 0x0308], NFKC: [0x04EC], NFKD: [0x042D, 0x0308] }, +{ source: [0x04ED], NFC: [0x04ED], NFD: [0x044D, 0x0308], NFKC: [0x04ED], NFKD: [0x044D, 0x0308] }, +{ source: [0x04EE], NFC: [0x04EE], NFD: [0x0423, 0x0304], NFKC: [0x04EE], NFKD: [0x0423, 0x0304] }, +{ source: [0x04EF], NFC: [0x04EF], NFD: [0x0443, 0x0304], NFKC: [0x04EF], NFKD: [0x0443, 0x0304] }, +{ source: [0x04F0], NFC: [0x04F0], NFD: [0x0423, 0x0308], NFKC: [0x04F0], NFKD: [0x0423, 0x0308] }, +{ source: [0x04F1], NFC: [0x04F1], NFD: [0x0443, 0x0308], NFKC: [0x04F1], NFKD: [0x0443, 0x0308] }, +{ source: [0x04F2], NFC: [0x04F2], NFD: [0x0423, 0x030B], NFKC: [0x04F2], NFKD: [0x0423, 0x030B] }, +{ source: [0x04F3], NFC: [0x04F3], NFD: [0x0443, 0x030B], NFKC: [0x04F3], NFKD: [0x0443, 0x030B] }, +{ source: [0x04F4], NFC: [0x04F4], NFD: [0x0427, 0x0308], NFKC: [0x04F4], NFKD: [0x0427, 0x0308] }, +{ source: [0x04F5], NFC: [0x04F5], NFD: [0x0447, 0x0308], NFKC: [0x04F5], NFKD: [0x0447, 0x0308] }, +{ source: [0x04F8], NFC: [0x04F8], NFD: [0x042B, 0x0308], NFKC: [0x04F8], NFKD: [0x042B, 0x0308] }, +{ source: [0x04F9], NFC: [0x04F9], NFD: [0x044B, 0x0308], NFKC: [0x04F9], NFKD: [0x044B, 0x0308] }, +{ source: [0x0587], NFC: [0x0587], NFD: [0x0587], NFKC: [0x0565, 0x0582], NFKD: [0x0565, 0x0582] }, +{ source: [0x0622], NFC: [0x0622], NFD: [0x0627, 0x0653], NFKC: [0x0622], NFKD: [0x0627, 0x0653] }, +{ source: [0x0623], NFC: [0x0623], NFD: [0x0627, 0x0654], NFKC: [0x0623], NFKD: [0x0627, 0x0654] }, +{ source: [0x0624], NFC: [0x0624], NFD: [0x0648, 0x0654], NFKC: [0x0624], NFKD: [0x0648, 0x0654] }, +{ source: [0x0625], NFC: [0x0625], NFD: [0x0627, 0x0655], NFKC: [0x0625], NFKD: [0x0627, 0x0655] }, +{ source: [0x0626], NFC: [0x0626], NFD: [0x064A, 0x0654], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0x0675], NFC: [0x0675], NFD: [0x0675], NFKC: [0x0627, 0x0674], NFKD: [0x0627, 0x0674] }, +{ source: [0x0676], NFC: [0x0676], NFD: [0x0676], NFKC: [0x0648, 0x0674], NFKD: [0x0648, 0x0674] }, +{ source: [0x0677], NFC: [0x0677], NFD: [0x0677], NFKC: [0x06C7, 0x0674], NFKD: [0x06C7, 0x0674] }, +{ source: [0x0678], NFC: [0x0678], NFD: [0x0678], NFKC: [0x064A, 0x0674], NFKD: [0x064A, 0x0674] }, +{ source: [0x06C0], NFC: [0x06C0], NFD: [0x06D5, 0x0654], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] }, +{ source: [0x06C2], NFC: [0x06C2], NFD: [0x06C1, 0x0654], NFKC: [0x06C2], NFKD: [0x06C1, 0x0654] }, +{ source: [0x06D3], NFC: [0x06D3], NFD: [0x06D2, 0x0654], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] }, +{ source: [0x0929], NFC: [0x0929], NFD: [0x0928, 0x093C], NFKC: [0x0929], NFKD: [0x0928, 0x093C] }, +{ source: [0x0931], NFC: [0x0931], NFD: [0x0930, 0x093C], NFKC: [0x0931], NFKD: [0x0930, 0x093C] }, +{ source: [0x0934], NFC: [0x0934], NFD: [0x0933, 0x093C], NFKC: [0x0934], NFKD: [0x0933, 0x093C] }, +{ source: [0x0958], NFC: [0x0915, 0x093C], NFD: [0x0915, 0x093C], NFKC: [0x0915, 0x093C], NFKD: [0x0915, 0x093C] }, +{ source: [0x0959], NFC: [0x0916, 0x093C], NFD: [0x0916, 0x093C], NFKC: [0x0916, 0x093C], NFKD: [0x0916, 0x093C] }, +{ source: [0x095A], NFC: [0x0917, 0x093C], NFD: [0x0917, 0x093C], NFKC: [0x0917, 0x093C], NFKD: [0x0917, 0x093C] }, +{ source: [0x095B], NFC: [0x091C, 0x093C], NFD: [0x091C, 0x093C], NFKC: [0x091C, 0x093C], NFKD: [0x091C, 0x093C] }, +{ source: [0x095C], NFC: [0x0921, 0x093C], NFD: [0x0921, 0x093C], NFKC: [0x0921, 0x093C], NFKD: [0x0921, 0x093C] }, +{ source: [0x095D], NFC: [0x0922, 0x093C], NFD: [0x0922, 0x093C], NFKC: [0x0922, 0x093C], NFKD: [0x0922, 0x093C] }, +{ source: [0x095E], NFC: [0x092B, 0x093C], NFD: [0x092B, 0x093C], NFKC: [0x092B, 0x093C], NFKD: [0x092B, 0x093C] }, +{ source: [0x095F], NFC: [0x092F, 0x093C], NFD: [0x092F, 0x093C], NFKC: [0x092F, 0x093C], NFKD: [0x092F, 0x093C] }, +{ source: [0x09CB], NFC: [0x09CB], NFD: [0x09C7, 0x09BE], NFKC: [0x09CB], NFKD: [0x09C7, 0x09BE] }, +{ source: [0x09CC], NFC: [0x09CC], NFD: [0x09C7, 0x09D7], NFKC: [0x09CC], NFKD: [0x09C7, 0x09D7] }, +{ source: [0x09DC], NFC: [0x09A1, 0x09BC], NFD: [0x09A1, 0x09BC], NFKC: [0x09A1, 0x09BC], NFKD: [0x09A1, 0x09BC] }, +{ source: [0x09DD], NFC: [0x09A2, 0x09BC], NFD: [0x09A2, 0x09BC], NFKC: [0x09A2, 0x09BC], NFKD: [0x09A2, 0x09BC] }, +{ source: [0x09DF], NFC: [0x09AF, 0x09BC], NFD: [0x09AF, 0x09BC], NFKC: [0x09AF, 0x09BC], NFKD: [0x09AF, 0x09BC] }, +{ source: [0x0A33], NFC: [0x0A32, 0x0A3C], NFD: [0x0A32, 0x0A3C], NFKC: [0x0A32, 0x0A3C], NFKD: [0x0A32, 0x0A3C] }, +{ source: [0x0A36], NFC: [0x0A38, 0x0A3C], NFD: [0x0A38, 0x0A3C], NFKC: [0x0A38, 0x0A3C], NFKD: [0x0A38, 0x0A3C] }, +{ source: [0x0A59], NFC: [0x0A16, 0x0A3C], NFD: [0x0A16, 0x0A3C], NFKC: [0x0A16, 0x0A3C], NFKD: [0x0A16, 0x0A3C] }, +{ source: [0x0A5A], NFC: [0x0A17, 0x0A3C], NFD: [0x0A17, 0x0A3C], NFKC: [0x0A17, 0x0A3C], NFKD: [0x0A17, 0x0A3C] }, +{ source: [0x0A5B], NFC: [0x0A1C, 0x0A3C], NFD: [0x0A1C, 0x0A3C], NFKC: [0x0A1C, 0x0A3C], NFKD: [0x0A1C, 0x0A3C] }, +{ source: [0x0A5E], NFC: [0x0A2B, 0x0A3C], NFD: [0x0A2B, 0x0A3C], NFKC: [0x0A2B, 0x0A3C], NFKD: [0x0A2B, 0x0A3C] }, +{ source: [0x0B48], NFC: [0x0B48], NFD: [0x0B47, 0x0B56], NFKC: [0x0B48], NFKD: [0x0B47, 0x0B56] }, +{ source: [0x0B4B], NFC: [0x0B4B], NFD: [0x0B47, 0x0B3E], NFKC: [0x0B4B], NFKD: [0x0B47, 0x0B3E] }, +{ source: [0x0B4C], NFC: [0x0B4C], NFD: [0x0B47, 0x0B57], NFKC: [0x0B4C], NFKD: [0x0B47, 0x0B57] }, +{ source: [0x0B5C], NFC: [0x0B21, 0x0B3C], NFD: [0x0B21, 0x0B3C], NFKC: [0x0B21, 0x0B3C], NFKD: [0x0B21, 0x0B3C] }, +{ source: [0x0B5D], NFC: [0x0B22, 0x0B3C], NFD: [0x0B22, 0x0B3C], NFKC: [0x0B22, 0x0B3C], NFKD: [0x0B22, 0x0B3C] }, +{ source: [0x0B94], NFC: [0x0B94], NFD: [0x0B92, 0x0BD7], NFKC: [0x0B94], NFKD: [0x0B92, 0x0BD7] }, +{ source: [0x0BCA], NFC: [0x0BCA], NFD: [0x0BC6, 0x0BBE], NFKC: [0x0BCA], NFKD: [0x0BC6, 0x0BBE] }, +{ source: [0x0BCB], NFC: [0x0BCB], NFD: [0x0BC7, 0x0BBE], NFKC: [0x0BCB], NFKD: [0x0BC7, 0x0BBE] }, +{ source: [0x0BCC], NFC: [0x0BCC], NFD: [0x0BC6, 0x0BD7], NFKC: [0x0BCC], NFKD: [0x0BC6, 0x0BD7] }, +{ source: [0x0C48], NFC: [0x0C48], NFD: [0x0C46, 0x0C56], NFKC: [0x0C48], NFKD: [0x0C46, 0x0C56] }, +{ source: [0x0CC0], NFC: [0x0CC0], NFD: [0x0CBF, 0x0CD5], NFKC: [0x0CC0], NFKD: [0x0CBF, 0x0CD5] }, +{ source: [0x0CC7], NFC: [0x0CC7], NFD: [0x0CC6, 0x0CD5], NFKC: [0x0CC7], NFKD: [0x0CC6, 0x0CD5] }, +{ source: [0x0CC8], NFC: [0x0CC8], NFD: [0x0CC6, 0x0CD6], NFKC: [0x0CC8], NFKD: [0x0CC6, 0x0CD6] }, +{ source: [0x0CCA], NFC: [0x0CCA], NFD: [0x0CC6, 0x0CC2], NFKC: [0x0CCA], NFKD: [0x0CC6, 0x0CC2] }, +{ source: [0x0CCB], NFC: [0x0CCB], NFD: [0x0CC6, 0x0CC2, 0x0CD5], NFKC: [0x0CCB], NFKD: [0x0CC6, 0x0CC2, 0x0CD5] }, +{ source: [0x0D4A], NFC: [0x0D4A], NFD: [0x0D46, 0x0D3E], NFKC: [0x0D4A], NFKD: [0x0D46, 0x0D3E] }, +{ source: [0x0D4B], NFC: [0x0D4B], NFD: [0x0D47, 0x0D3E], NFKC: [0x0D4B], NFKD: [0x0D47, 0x0D3E] }, +{ source: [0x0D4C], NFC: [0x0D4C], NFD: [0x0D46, 0x0D57], NFKC: [0x0D4C], NFKD: [0x0D46, 0x0D57] }, +{ source: [0x0DDA], NFC: [0x0DDA], NFD: [0x0DD9, 0x0DCA], NFKC: [0x0DDA], NFKD: [0x0DD9, 0x0DCA] }, +{ source: [0x0DDC], NFC: [0x0DDC], NFD: [0x0DD9, 0x0DCF], NFKC: [0x0DDC], NFKD: [0x0DD9, 0x0DCF] }, +{ source: [0x0DDD], NFC: [0x0DDD], NFD: [0x0DD9, 0x0DCF, 0x0DCA], NFKC: [0x0DDD], NFKD: [0x0DD9, 0x0DCF, 0x0DCA] }, +{ source: [0x0DDE], NFC: [0x0DDE], NFD: [0x0DD9, 0x0DDF], NFKC: [0x0DDE], NFKD: [0x0DD9, 0x0DDF] }, +{ source: [0x0E33], NFC: [0x0E33], NFD: [0x0E33], NFKC: [0x0E4D, 0x0E32], NFKD: [0x0E4D, 0x0E32] }, +{ source: [0x0EB3], NFC: [0x0EB3], NFD: [0x0EB3], NFKC: [0x0ECD, 0x0EB2], NFKD: [0x0ECD, 0x0EB2] }, +{ source: [0x0EDC], NFC: [0x0EDC], NFD: [0x0EDC], NFKC: [0x0EAB, 0x0E99], NFKD: [0x0EAB, 0x0E99] }, +{ source: [0x0EDD], NFC: [0x0EDD], NFD: [0x0EDD], NFKC: [0x0EAB, 0x0EA1], NFKD: [0x0EAB, 0x0EA1] }, +{ source: [0x0F0C], NFC: [0x0F0C], NFD: [0x0F0C], NFKC: [0x0F0B], NFKD: [0x0F0B] }, +{ source: [0x0F43], NFC: [0x0F42, 0x0FB7], NFD: [0x0F42, 0x0FB7], NFKC: [0x0F42, 0x0FB7], NFKD: [0x0F42, 0x0FB7] }, +{ source: [0x0F4D], NFC: [0x0F4C, 0x0FB7], NFD: [0x0F4C, 0x0FB7], NFKC: [0x0F4C, 0x0FB7], NFKD: [0x0F4C, 0x0FB7] }, +{ source: [0x0F52], NFC: [0x0F51, 0x0FB7], NFD: [0x0F51, 0x0FB7], NFKC: [0x0F51, 0x0FB7], NFKD: [0x0F51, 0x0FB7] }, +{ source: [0x0F57], NFC: [0x0F56, 0x0FB7], NFD: [0x0F56, 0x0FB7], NFKC: [0x0F56, 0x0FB7], NFKD: [0x0F56, 0x0FB7] }, +{ source: [0x0F5C], NFC: [0x0F5B, 0x0FB7], NFD: [0x0F5B, 0x0FB7], NFKC: [0x0F5B, 0x0FB7], NFKD: [0x0F5B, 0x0FB7] }, +{ source: [0x0F69], NFC: [0x0F40, 0x0FB5], NFD: [0x0F40, 0x0FB5], NFKC: [0x0F40, 0x0FB5], NFKD: [0x0F40, 0x0FB5] }, +{ source: [0x0F73], NFC: [0x0F71, 0x0F72], NFD: [0x0F71, 0x0F72], NFKC: [0x0F71, 0x0F72], NFKD: [0x0F71, 0x0F72] }, +{ source: [0x0F75], NFC: [0x0F71, 0x0F74], NFD: [0x0F71, 0x0F74], NFKC: [0x0F71, 0x0F74], NFKD: [0x0F71, 0x0F74] }, +{ source: [0x0F76], NFC: [0x0FB2, 0x0F80], NFD: [0x0FB2, 0x0F80], NFKC: [0x0FB2, 0x0F80], NFKD: [0x0FB2, 0x0F80] }, +{ source: [0x0F77], NFC: [0x0F77], NFD: [0x0F77], NFKC: [0x0FB2, 0x0F71, 0x0F80], NFKD: [0x0FB2, 0x0F71, 0x0F80] }, +{ source: [0x0F78], NFC: [0x0FB3, 0x0F80], NFD: [0x0FB3, 0x0F80], NFKC: [0x0FB3, 0x0F80], NFKD: [0x0FB3, 0x0F80] }, +{ source: [0x0F79], NFC: [0x0F79], NFD: [0x0F79], NFKC: [0x0FB3, 0x0F71, 0x0F80], NFKD: [0x0FB3, 0x0F71, 0x0F80] }, +{ source: [0x0F81], NFC: [0x0F71, 0x0F80], NFD: [0x0F71, 0x0F80], NFKC: [0x0F71, 0x0F80], NFKD: [0x0F71, 0x0F80] }, +{ source: [0x0F93], NFC: [0x0F92, 0x0FB7], NFD: [0x0F92, 0x0FB7], NFKC: [0x0F92, 0x0FB7], NFKD: [0x0F92, 0x0FB7] }, +{ source: [0x0F9D], NFC: [0x0F9C, 0x0FB7], NFD: [0x0F9C, 0x0FB7], NFKC: [0x0F9C, 0x0FB7], NFKD: [0x0F9C, 0x0FB7] }, +{ source: [0x0FA2], NFC: [0x0FA1, 0x0FB7], NFD: [0x0FA1, 0x0FB7], NFKC: [0x0FA1, 0x0FB7], NFKD: [0x0FA1, 0x0FB7] }, +{ source: [0x0FA7], NFC: [0x0FA6, 0x0FB7], NFD: [0x0FA6, 0x0FB7], NFKC: [0x0FA6, 0x0FB7], NFKD: [0x0FA6, 0x0FB7] }, +{ source: [0x0FAC], NFC: [0x0FAB, 0x0FB7], NFD: [0x0FAB, 0x0FB7], NFKC: [0x0FAB, 0x0FB7], NFKD: [0x0FAB, 0x0FB7] }, +{ source: [0x0FB9], NFC: [0x0F90, 0x0FB5], NFD: [0x0F90, 0x0FB5], NFKC: [0x0F90, 0x0FB5], NFKD: [0x0F90, 0x0FB5] }, +{ source: [0x1026], NFC: [0x1026], NFD: [0x1025, 0x102E], NFKC: [0x1026], NFKD: [0x1025, 0x102E] }, +{ source: [0x10FC], NFC: [0x10FC], NFD: [0x10FC], NFKC: [0x10DC], NFKD: [0x10DC] }, +{ source: [0x1B06], NFC: [0x1B06], NFD: [0x1B05, 0x1B35], NFKC: [0x1B06], NFKD: [0x1B05, 0x1B35] }, +{ source: [0x1B08], NFC: [0x1B08], NFD: [0x1B07, 0x1B35], NFKC: [0x1B08], NFKD: [0x1B07, 0x1B35] }, +{ source: [0x1B0A], NFC: [0x1B0A], NFD: [0x1B09, 0x1B35], NFKC: [0x1B0A], NFKD: [0x1B09, 0x1B35] }, +{ source: [0x1B0C], NFC: [0x1B0C], NFD: [0x1B0B, 0x1B35], NFKC: [0x1B0C], NFKD: [0x1B0B, 0x1B35] }, +{ source: [0x1B0E], NFC: [0x1B0E], NFD: [0x1B0D, 0x1B35], NFKC: [0x1B0E], NFKD: [0x1B0D, 0x1B35] }, +{ source: [0x1B12], NFC: [0x1B12], NFD: [0x1B11, 0x1B35], NFKC: [0x1B12], NFKD: [0x1B11, 0x1B35] }, +{ source: [0x1B3B], NFC: [0x1B3B], NFD: [0x1B3A, 0x1B35], NFKC: [0x1B3B], NFKD: [0x1B3A, 0x1B35] }, +{ source: [0x1B3D], NFC: [0x1B3D], NFD: [0x1B3C, 0x1B35], NFKC: [0x1B3D], NFKD: [0x1B3C, 0x1B35] }, +{ source: [0x1B40], NFC: [0x1B40], NFD: [0x1B3E, 0x1B35], NFKC: [0x1B40], NFKD: [0x1B3E, 0x1B35] }, +{ source: [0x1B41], NFC: [0x1B41], NFD: [0x1B3F, 0x1B35], NFKC: [0x1B41], NFKD: [0x1B3F, 0x1B35] }, +{ source: [0x1B43], NFC: [0x1B43], NFD: [0x1B42, 0x1B35], NFKC: [0x1B43], NFKD: [0x1B42, 0x1B35] }, +{ source: [0x1D2C], NFC: [0x1D2C], NFD: [0x1D2C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D2D], NFC: [0x1D2D], NFD: [0x1D2D], NFKC: [0x00C6], NFKD: [0x00C6] }, +{ source: [0x1D2E], NFC: [0x1D2E], NFD: [0x1D2E], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D30], NFC: [0x1D30], NFD: [0x1D30], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D31], NFC: [0x1D31], NFD: [0x1D31], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D32], NFC: [0x1D32], NFD: [0x1D32], NFKC: [0x018E], NFKD: [0x018E] }, +{ source: [0x1D33], NFC: [0x1D33], NFD: [0x1D33], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D34], NFC: [0x1D34], NFD: [0x1D34], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D35], NFC: [0x1D35], NFD: [0x1D35], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D36], NFC: [0x1D36], NFD: [0x1D36], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D37], NFC: [0x1D37], NFD: [0x1D37], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D38], NFC: [0x1D38], NFD: [0x1D38], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D39], NFC: [0x1D39], NFD: [0x1D39], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D3A], NFC: [0x1D3A], NFD: [0x1D3A], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D3C], NFC: [0x1D3C], NFD: [0x1D3C], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D3D], NFC: [0x1D3D], NFD: [0x1D3D], NFKC: [0x0222], NFKD: [0x0222] }, +{ source: [0x1D3E], NFC: [0x1D3E], NFD: [0x1D3E], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D3F], NFC: [0x1D3F], NFD: [0x1D3F], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D40], NFC: [0x1D40], NFD: [0x1D40], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D41], NFC: [0x1D41], NFD: [0x1D41], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D42], NFC: [0x1D42], NFD: [0x1D42], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D43], NFC: [0x1D43], NFD: [0x1D43], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D44], NFC: [0x1D44], NFD: [0x1D44], NFKC: [0x0250], NFKD: [0x0250] }, +{ source: [0x1D45], NFC: [0x1D45], NFD: [0x1D45], NFKC: [0x0251], NFKD: [0x0251] }, +{ source: [0x1D46], NFC: [0x1D46], NFD: [0x1D46], NFKC: [0x1D02], NFKD: [0x1D02] }, +{ source: [0x1D47], NFC: [0x1D47], NFD: [0x1D47], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D48], NFC: [0x1D48], NFD: [0x1D48], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D49], NFC: [0x1D49], NFD: [0x1D49], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D4A], NFC: [0x1D4A], NFD: [0x1D4A], NFKC: [0x0259], NFKD: [0x0259] }, +{ source: [0x1D4B], NFC: [0x1D4B], NFD: [0x1D4B], NFKC: [0x025B], NFKD: [0x025B] }, +{ source: [0x1D4C], NFC: [0x1D4C], NFD: [0x1D4C], NFKC: [0x025C], NFKD: [0x025C] }, +{ source: [0x1D4D], NFC: [0x1D4D], NFD: [0x1D4D], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D4F], NFC: [0x1D4F], NFD: [0x1D4F], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D50], NFC: [0x1D50], NFD: [0x1D50], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D51], NFC: [0x1D51], NFD: [0x1D51], NFKC: [0x014B], NFKD: [0x014B] }, +{ source: [0x1D52], NFC: [0x1D52], NFD: [0x1D52], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D53], NFC: [0x1D53], NFD: [0x1D53], NFKC: [0x0254], NFKD: [0x0254] }, +{ source: [0x1D54], NFC: [0x1D54], NFD: [0x1D54], NFKC: [0x1D16], NFKD: [0x1D16] }, +{ source: [0x1D55], NFC: [0x1D55], NFD: [0x1D55], NFKC: [0x1D17], NFKD: [0x1D17] }, +{ source: [0x1D56], NFC: [0x1D56], NFD: [0x1D56], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D57], NFC: [0x1D57], NFD: [0x1D57], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D58], NFC: [0x1D58], NFD: [0x1D58], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D59], NFC: [0x1D59], NFD: [0x1D59], NFKC: [0x1D1D], NFKD: [0x1D1D] }, +{ source: [0x1D5A], NFC: [0x1D5A], NFD: [0x1D5A], NFKC: [0x026F], NFKD: [0x026F] }, +{ source: [0x1D5B], NFC: [0x1D5B], NFD: [0x1D5B], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D5C], NFC: [0x1D5C], NFD: [0x1D5C], NFKC: [0x1D25], NFKD: [0x1D25] }, +{ source: [0x1D5D], NFC: [0x1D5D], NFD: [0x1D5D], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D5E], NFC: [0x1D5E], NFD: [0x1D5E], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D5F], NFC: [0x1D5F], NFD: [0x1D5F], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D60], NFC: [0x1D60], NFD: [0x1D60], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D61], NFC: [0x1D61], NFD: [0x1D61], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D62], NFC: [0x1D62], NFD: [0x1D62], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D63], NFC: [0x1D63], NFD: [0x1D63], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D64], NFC: [0x1D64], NFD: [0x1D64], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D65], NFC: [0x1D65], NFD: [0x1D65], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D66], NFC: [0x1D66], NFD: [0x1D66], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D67], NFC: [0x1D67], NFD: [0x1D67], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D68], NFC: [0x1D68], NFD: [0x1D68], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D69], NFC: [0x1D69], NFD: [0x1D69], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D6A], NFC: [0x1D6A], NFD: [0x1D6A], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D78], NFC: [0x1D78], NFD: [0x1D78], NFKC: [0x043D], NFKD: [0x043D] }, +{ source: [0x1D9B], NFC: [0x1D9B], NFD: [0x1D9B], NFKC: [0x0252], NFKD: [0x0252] }, +{ source: [0x1D9C], NFC: [0x1D9C], NFD: [0x1D9C], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D9D], NFC: [0x1D9D], NFD: [0x1D9D], NFKC: [0x0255], NFKD: [0x0255] }, +{ source: [0x1D9E], NFC: [0x1D9E], NFD: [0x1D9E], NFKC: [0x00F0], NFKD: [0x00F0] }, +{ source: [0x1D9F], NFC: [0x1D9F], NFD: [0x1D9F], NFKC: [0x025C], NFKD: [0x025C] }, +{ source: [0x1DA0], NFC: [0x1DA0], NFD: [0x1DA0], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1DA1], NFC: [0x1DA1], NFD: [0x1DA1], NFKC: [0x025F], NFKD: [0x025F] }, +{ source: [0x1DA2], NFC: [0x1DA2], NFD: [0x1DA2], NFKC: [0x0261], NFKD: [0x0261] }, +{ source: [0x1DA3], NFC: [0x1DA3], NFD: [0x1DA3], NFKC: [0x0265], NFKD: [0x0265] }, +{ source: [0x1DA4], NFC: [0x1DA4], NFD: [0x1DA4], NFKC: [0x0268], NFKD: [0x0268] }, +{ source: [0x1DA5], NFC: [0x1DA5], NFD: [0x1DA5], NFKC: [0x0269], NFKD: [0x0269] }, +{ source: [0x1DA6], NFC: [0x1DA6], NFD: [0x1DA6], NFKC: [0x026A], NFKD: [0x026A] }, +{ source: [0x1DA7], NFC: [0x1DA7], NFD: [0x1DA7], NFKC: [0x1D7B], NFKD: [0x1D7B] }, +{ source: [0x1DA8], NFC: [0x1DA8], NFD: [0x1DA8], NFKC: [0x029D], NFKD: [0x029D] }, +{ source: [0x1DA9], NFC: [0x1DA9], NFD: [0x1DA9], NFKC: [0x026D], NFKD: [0x026D] }, +{ source: [0x1DAA], NFC: [0x1DAA], NFD: [0x1DAA], NFKC: [0x1D85], NFKD: [0x1D85] }, +{ source: [0x1DAB], NFC: [0x1DAB], NFD: [0x1DAB], NFKC: [0x029F], NFKD: [0x029F] }, +{ source: [0x1DAC], NFC: [0x1DAC], NFD: [0x1DAC], NFKC: [0x0271], NFKD: [0x0271] }, +{ source: [0x1DAD], NFC: [0x1DAD], NFD: [0x1DAD], NFKC: [0x0270], NFKD: [0x0270] }, +{ source: [0x1DAE], NFC: [0x1DAE], NFD: [0x1DAE], NFKC: [0x0272], NFKD: [0x0272] }, +{ source: [0x1DAF], NFC: [0x1DAF], NFD: [0x1DAF], NFKC: [0x0273], NFKD: [0x0273] }, +{ source: [0x1DB0], NFC: [0x1DB0], NFD: [0x1DB0], NFKC: [0x0274], NFKD: [0x0274] }, +{ source: [0x1DB1], NFC: [0x1DB1], NFD: [0x1DB1], NFKC: [0x0275], NFKD: [0x0275] }, +{ source: [0x1DB2], NFC: [0x1DB2], NFD: [0x1DB2], NFKC: [0x0278], NFKD: [0x0278] }, +{ source: [0x1DB3], NFC: [0x1DB3], NFD: [0x1DB3], NFKC: [0x0282], NFKD: [0x0282] }, +{ source: [0x1DB4], NFC: [0x1DB4], NFD: [0x1DB4], NFKC: [0x0283], NFKD: [0x0283] }, +{ source: [0x1DB5], NFC: [0x1DB5], NFD: [0x1DB5], NFKC: [0x01AB], NFKD: [0x01AB] }, +{ source: [0x1DB6], NFC: [0x1DB6], NFD: [0x1DB6], NFKC: [0x0289], NFKD: [0x0289] }, +{ source: [0x1DB7], NFC: [0x1DB7], NFD: [0x1DB7], NFKC: [0x028A], NFKD: [0x028A] }, +{ source: [0x1DB8], NFC: [0x1DB8], NFD: [0x1DB8], NFKC: [0x1D1C], NFKD: [0x1D1C] }, +{ source: [0x1DB9], NFC: [0x1DB9], NFD: [0x1DB9], NFKC: [0x028B], NFKD: [0x028B] }, +{ source: [0x1DBA], NFC: [0x1DBA], NFD: [0x1DBA], NFKC: [0x028C], NFKD: [0x028C] }, +{ source: [0x1DBB], NFC: [0x1DBB], NFD: [0x1DBB], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1DBC], NFC: [0x1DBC], NFD: [0x1DBC], NFKC: [0x0290], NFKD: [0x0290] }, +{ source: [0x1DBD], NFC: [0x1DBD], NFD: [0x1DBD], NFKC: [0x0291], NFKD: [0x0291] }, +{ source: [0x1DBE], NFC: [0x1DBE], NFD: [0x1DBE], NFKC: [0x0292], NFKD: [0x0292] }, +{ source: [0x1DBF], NFC: [0x1DBF], NFD: [0x1DBF], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1E00], NFC: [0x1E00], NFD: [0x0041, 0x0325], NFKC: [0x1E00], NFKD: [0x0041, 0x0325] }, +{ source: [0x1E01], NFC: [0x1E01], NFD: [0x0061, 0x0325], NFKC: [0x1E01], NFKD: [0x0061, 0x0325] }, +{ source: [0x1E02], NFC: [0x1E02], NFD: [0x0042, 0x0307], NFKC: [0x1E02], NFKD: [0x0042, 0x0307] }, +{ source: [0x1E03], NFC: [0x1E03], NFD: [0x0062, 0x0307], NFKC: [0x1E03], NFKD: [0x0062, 0x0307] }, +{ source: [0x1E04], NFC: [0x1E04], NFD: [0x0042, 0x0323], NFKC: [0x1E04], NFKD: [0x0042, 0x0323] }, +{ source: [0x1E05], NFC: [0x1E05], NFD: [0x0062, 0x0323], NFKC: [0x1E05], NFKD: [0x0062, 0x0323] }, +{ source: [0x1E06], NFC: [0x1E06], NFD: [0x0042, 0x0331], NFKC: [0x1E06], NFKD: [0x0042, 0x0331] }, +{ source: [0x1E07], NFC: [0x1E07], NFD: [0x0062, 0x0331], NFKC: [0x1E07], NFKD: [0x0062, 0x0331] }, +{ source: [0x1E08], NFC: [0x1E08], NFD: [0x0043, 0x0327, 0x0301], NFKC: [0x1E08], NFKD: [0x0043, 0x0327, 0x0301] }, +{ source: [0x1E09], NFC: [0x1E09], NFD: [0x0063, 0x0327, 0x0301], NFKC: [0x1E09], NFKD: [0x0063, 0x0327, 0x0301] }, +{ source: [0x1E0A], NFC: [0x1E0A], NFD: [0x0044, 0x0307], NFKC: [0x1E0A], NFKD: [0x0044, 0x0307] }, +{ source: [0x1E0B], NFC: [0x1E0B], NFD: [0x0064, 0x0307], NFKC: [0x1E0B], NFKD: [0x0064, 0x0307] }, +{ source: [0x1E0C], NFC: [0x1E0C], NFD: [0x0044, 0x0323], NFKC: [0x1E0C], NFKD: [0x0044, 0x0323] }, +{ source: [0x1E0D], NFC: [0x1E0D], NFD: [0x0064, 0x0323], NFKC: [0x1E0D], NFKD: [0x0064, 0x0323] }, +{ source: [0x1E0E], NFC: [0x1E0E], NFD: [0x0044, 0x0331], NFKC: [0x1E0E], NFKD: [0x0044, 0x0331] }, +{ source: [0x1E0F], NFC: [0x1E0F], NFD: [0x0064, 0x0331], NFKC: [0x1E0F], NFKD: [0x0064, 0x0331] }, +{ source: [0x1E10], NFC: [0x1E10], NFD: [0x0044, 0x0327], NFKC: [0x1E10], NFKD: [0x0044, 0x0327] }, +{ source: [0x1E11], NFC: [0x1E11], NFD: [0x0064, 0x0327], NFKC: [0x1E11], NFKD: [0x0064, 0x0327] }, +{ source: [0x1E12], NFC: [0x1E12], NFD: [0x0044, 0x032D], NFKC: [0x1E12], NFKD: [0x0044, 0x032D] }, +{ source: [0x1E13], NFC: [0x1E13], NFD: [0x0064, 0x032D], NFKC: [0x1E13], NFKD: [0x0064, 0x032D] }, +{ source: [0x1E14], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x1E15], NFC: [0x1E15], NFD: [0x0065, 0x0304, 0x0300], NFKC: [0x1E15], NFKD: [0x0065, 0x0304, 0x0300] }, +{ source: [0x1E16], NFC: [0x1E16], NFD: [0x0045, 0x0304, 0x0301], NFKC: [0x1E16], NFKD: [0x0045, 0x0304, 0x0301] }, +{ source: [0x1E17], NFC: [0x1E17], NFD: [0x0065, 0x0304, 0x0301], NFKC: [0x1E17], NFKD: [0x0065, 0x0304, 0x0301] }, +{ source: [0x1E18], NFC: [0x1E18], NFD: [0x0045, 0x032D], NFKC: [0x1E18], NFKD: [0x0045, 0x032D] }, +{ source: [0x1E19], NFC: [0x1E19], NFD: [0x0065, 0x032D], NFKC: [0x1E19], NFKD: [0x0065, 0x032D] }, +{ source: [0x1E1A], NFC: [0x1E1A], NFD: [0x0045, 0x0330], NFKC: [0x1E1A], NFKD: [0x0045, 0x0330] }, +{ source: [0x1E1B], NFC: [0x1E1B], NFD: [0x0065, 0x0330], NFKC: [0x1E1B], NFKD: [0x0065, 0x0330] }, +{ source: [0x1E1C], NFC: [0x1E1C], NFD: [0x0045, 0x0327, 0x0306], NFKC: [0x1E1C], NFKD: [0x0045, 0x0327, 0x0306] }, +{ source: [0x1E1D], NFC: [0x1E1D], NFD: [0x0065, 0x0327, 0x0306], NFKC: [0x1E1D], NFKD: [0x0065, 0x0327, 0x0306] }, +{ source: [0x1E1E], NFC: [0x1E1E], NFD: [0x0046, 0x0307], NFKC: [0x1E1E], NFKD: [0x0046, 0x0307] }, +{ source: [0x1E1F], NFC: [0x1E1F], NFD: [0x0066, 0x0307], NFKC: [0x1E1F], NFKD: [0x0066, 0x0307] }, +{ source: [0x1E20], NFC: [0x1E20], NFD: [0x0047, 0x0304], NFKC: [0x1E20], NFKD: [0x0047, 0x0304] }, +{ source: [0x1E21], NFC: [0x1E21], NFD: [0x0067, 0x0304], NFKC: [0x1E21], NFKD: [0x0067, 0x0304] }, +{ source: [0x1E22], NFC: [0x1E22], NFD: [0x0048, 0x0307], NFKC: [0x1E22], NFKD: [0x0048, 0x0307] }, +{ source: [0x1E23], NFC: [0x1E23], NFD: [0x0068, 0x0307], NFKC: [0x1E23], NFKD: [0x0068, 0x0307] }, +{ source: [0x1E24], NFC: [0x1E24], NFD: [0x0048, 0x0323], NFKC: [0x1E24], NFKD: [0x0048, 0x0323] }, +{ source: [0x1E25], NFC: [0x1E25], NFD: [0x0068, 0x0323], NFKC: [0x1E25], NFKD: [0x0068, 0x0323] }, +{ source: [0x1E26], NFC: [0x1E26], NFD: [0x0048, 0x0308], NFKC: [0x1E26], NFKD: [0x0048, 0x0308] }, +{ source: [0x1E27], NFC: [0x1E27], NFD: [0x0068, 0x0308], NFKC: [0x1E27], NFKD: [0x0068, 0x0308] }, +{ source: [0x1E28], NFC: [0x1E28], NFD: [0x0048, 0x0327], NFKC: [0x1E28], NFKD: [0x0048, 0x0327] }, +{ source: [0x1E29], NFC: [0x1E29], NFD: [0x0068, 0x0327], NFKC: [0x1E29], NFKD: [0x0068, 0x0327] }, +{ source: [0x1E2A], NFC: [0x1E2A], NFD: [0x0048, 0x032E], NFKC: [0x1E2A], NFKD: [0x0048, 0x032E] }, +{ source: [0x1E2B], NFC: [0x1E2B], NFD: [0x0068, 0x032E], NFKC: [0x1E2B], NFKD: [0x0068, 0x032E] }, +{ source: [0x1E2C], NFC: [0x1E2C], NFD: [0x0049, 0x0330], NFKC: [0x1E2C], NFKD: [0x0049, 0x0330] }, +{ source: [0x1E2D], NFC: [0x1E2D], NFD: [0x0069, 0x0330], NFKC: [0x1E2D], NFKD: [0x0069, 0x0330] }, +{ source: [0x1E2E], NFC: [0x1E2E], NFD: [0x0049, 0x0308, 0x0301], NFKC: [0x1E2E], NFKD: [0x0049, 0x0308, 0x0301] }, +{ source: [0x1E2F], NFC: [0x1E2F], NFD: [0x0069, 0x0308, 0x0301], NFKC: [0x1E2F], NFKD: [0x0069, 0x0308, 0x0301] }, +{ source: [0x1E30], NFC: [0x1E30], NFD: [0x004B, 0x0301], NFKC: [0x1E30], NFKD: [0x004B, 0x0301] }, +{ source: [0x1E31], NFC: [0x1E31], NFD: [0x006B, 0x0301], NFKC: [0x1E31], NFKD: [0x006B, 0x0301] }, +{ source: [0x1E32], NFC: [0x1E32], NFD: [0x004B, 0x0323], NFKC: [0x1E32], NFKD: [0x004B, 0x0323] }, +{ source: [0x1E33], NFC: [0x1E33], NFD: [0x006B, 0x0323], NFKC: [0x1E33], NFKD: [0x006B, 0x0323] }, +{ source: [0x1E34], NFC: [0x1E34], NFD: [0x004B, 0x0331], NFKC: [0x1E34], NFKD: [0x004B, 0x0331] }, +{ source: [0x1E35], NFC: [0x1E35], NFD: [0x006B, 0x0331], NFKC: [0x1E35], NFKD: [0x006B, 0x0331] }, +{ source: [0x1E36], NFC: [0x1E36], NFD: [0x004C, 0x0323], NFKC: [0x1E36], NFKD: [0x004C, 0x0323] }, +{ source: [0x1E37], NFC: [0x1E37], NFD: [0x006C, 0x0323], NFKC: [0x1E37], NFKD: [0x006C, 0x0323] }, +{ source: [0x1E38], NFC: [0x1E38], NFD: [0x004C, 0x0323, 0x0304], NFKC: [0x1E38], NFKD: [0x004C, 0x0323, 0x0304] }, +{ source: [0x1E39], NFC: [0x1E39], NFD: [0x006C, 0x0323, 0x0304], NFKC: [0x1E39], NFKD: [0x006C, 0x0323, 0x0304] }, +{ source: [0x1E3A], NFC: [0x1E3A], NFD: [0x004C, 0x0331], NFKC: [0x1E3A], NFKD: [0x004C, 0x0331] }, +{ source: [0x1E3B], NFC: [0x1E3B], NFD: [0x006C, 0x0331], NFKC: [0x1E3B], NFKD: [0x006C, 0x0331] }, +{ source: [0x1E3C], NFC: [0x1E3C], NFD: [0x004C, 0x032D], NFKC: [0x1E3C], NFKD: [0x004C, 0x032D] }, +{ source: [0x1E3D], NFC: [0x1E3D], NFD: [0x006C, 0x032D], NFKC: [0x1E3D], NFKD: [0x006C, 0x032D] }, +{ source: [0x1E3E], NFC: [0x1E3E], NFD: [0x004D, 0x0301], NFKC: [0x1E3E], NFKD: [0x004D, 0x0301] }, +{ source: [0x1E3F], NFC: [0x1E3F], NFD: [0x006D, 0x0301], NFKC: [0x1E3F], NFKD: [0x006D, 0x0301] }, +{ source: [0x1E40], NFC: [0x1E40], NFD: [0x004D, 0x0307], NFKC: [0x1E40], NFKD: [0x004D, 0x0307] }, +{ source: [0x1E41], NFC: [0x1E41], NFD: [0x006D, 0x0307], NFKC: [0x1E41], NFKD: [0x006D, 0x0307] }, +{ source: [0x1E42], NFC: [0x1E42], NFD: [0x004D, 0x0323], NFKC: [0x1E42], NFKD: [0x004D, 0x0323] }, +{ source: [0x1E43], NFC: [0x1E43], NFD: [0x006D, 0x0323], NFKC: [0x1E43], NFKD: [0x006D, 0x0323] }, +{ source: [0x1E44], NFC: [0x1E44], NFD: [0x004E, 0x0307], NFKC: [0x1E44], NFKD: [0x004E, 0x0307] }, +{ source: [0x1E45], NFC: [0x1E45], NFD: [0x006E, 0x0307], NFKC: [0x1E45], NFKD: [0x006E, 0x0307] }, +{ source: [0x1E46], NFC: [0x1E46], NFD: [0x004E, 0x0323], NFKC: [0x1E46], NFKD: [0x004E, 0x0323] }, +{ source: [0x1E47], NFC: [0x1E47], NFD: [0x006E, 0x0323], NFKC: [0x1E47], NFKD: [0x006E, 0x0323] }, +{ source: [0x1E48], NFC: [0x1E48], NFD: [0x004E, 0x0331], NFKC: [0x1E48], NFKD: [0x004E, 0x0331] }, +{ source: [0x1E49], NFC: [0x1E49], NFD: [0x006E, 0x0331], NFKC: [0x1E49], NFKD: [0x006E, 0x0331] }, +{ source: [0x1E4A], NFC: [0x1E4A], NFD: [0x004E, 0x032D], NFKC: [0x1E4A], NFKD: [0x004E, 0x032D] }, +{ source: [0x1E4B], NFC: [0x1E4B], NFD: [0x006E, 0x032D], NFKC: [0x1E4B], NFKD: [0x006E, 0x032D] }, +{ source: [0x1E4C], NFC: [0x1E4C], NFD: [0x004F, 0x0303, 0x0301], NFKC: [0x1E4C], NFKD: [0x004F, 0x0303, 0x0301] }, +{ source: [0x1E4D], NFC: [0x1E4D], NFD: [0x006F, 0x0303, 0x0301], NFKC: [0x1E4D], NFKD: [0x006F, 0x0303, 0x0301] }, +{ source: [0x1E4E], NFC: [0x1E4E], NFD: [0x004F, 0x0303, 0x0308], NFKC: [0x1E4E], NFKD: [0x004F, 0x0303, 0x0308] }, +{ source: [0x1E4F], NFC: [0x1E4F], NFD: [0x006F, 0x0303, 0x0308], NFKC: [0x1E4F], NFKD: [0x006F, 0x0303, 0x0308] }, +{ source: [0x1E50], NFC: [0x1E50], NFD: [0x004F, 0x0304, 0x0300], NFKC: [0x1E50], NFKD: [0x004F, 0x0304, 0x0300] }, +{ source: [0x1E51], NFC: [0x1E51], NFD: [0x006F, 0x0304, 0x0300], NFKC: [0x1E51], NFKD: [0x006F, 0x0304, 0x0300] }, +{ source: [0x1E52], NFC: [0x1E52], NFD: [0x004F, 0x0304, 0x0301], NFKC: [0x1E52], NFKD: [0x004F, 0x0304, 0x0301] }, +{ source: [0x1E53], NFC: [0x1E53], NFD: [0x006F, 0x0304, 0x0301], NFKC: [0x1E53], NFKD: [0x006F, 0x0304, 0x0301] }, +{ source: [0x1E54], NFC: [0x1E54], NFD: [0x0050, 0x0301], NFKC: [0x1E54], NFKD: [0x0050, 0x0301] }, +{ source: [0x1E55], NFC: [0x1E55], NFD: [0x0070, 0x0301], NFKC: [0x1E55], NFKD: [0x0070, 0x0301] }, +{ source: [0x1E56], NFC: [0x1E56], NFD: [0x0050, 0x0307], NFKC: [0x1E56], NFKD: [0x0050, 0x0307] }, +{ source: [0x1E57], NFC: [0x1E57], NFD: [0x0070, 0x0307], NFKC: [0x1E57], NFKD: [0x0070, 0x0307] }, +{ source: [0x1E58], NFC: [0x1E58], NFD: [0x0052, 0x0307], NFKC: [0x1E58], NFKD: [0x0052, 0x0307] }, +{ source: [0x1E59], NFC: [0x1E59], NFD: [0x0072, 0x0307], NFKC: [0x1E59], NFKD: [0x0072, 0x0307] }, +{ source: [0x1E5A], NFC: [0x1E5A], NFD: [0x0052, 0x0323], NFKC: [0x1E5A], NFKD: [0x0052, 0x0323] }, +{ source: [0x1E5B], NFC: [0x1E5B], NFD: [0x0072, 0x0323], NFKC: [0x1E5B], NFKD: [0x0072, 0x0323] }, +{ source: [0x1E5C], NFC: [0x1E5C], NFD: [0x0052, 0x0323, 0x0304], NFKC: [0x1E5C], NFKD: [0x0052, 0x0323, 0x0304] }, +{ source: [0x1E5D], NFC: [0x1E5D], NFD: [0x0072, 0x0323, 0x0304], NFKC: [0x1E5D], NFKD: [0x0072, 0x0323, 0x0304] }, +{ source: [0x1E5E], NFC: [0x1E5E], NFD: [0x0052, 0x0331], NFKC: [0x1E5E], NFKD: [0x0052, 0x0331] }, +{ source: [0x1E5F], NFC: [0x1E5F], NFD: [0x0072, 0x0331], NFKC: [0x1E5F], NFKD: [0x0072, 0x0331] }, +{ source: [0x1E60], NFC: [0x1E60], NFD: [0x0053, 0x0307], NFKC: [0x1E60], NFKD: [0x0053, 0x0307] }, +{ source: [0x1E61], NFC: [0x1E61], NFD: [0x0073, 0x0307], NFKC: [0x1E61], NFKD: [0x0073, 0x0307] }, +{ source: [0x1E62], NFC: [0x1E62], NFD: [0x0053, 0x0323], NFKC: [0x1E62], NFKD: [0x0053, 0x0323] }, +{ source: [0x1E63], NFC: [0x1E63], NFD: [0x0073, 0x0323], NFKC: [0x1E63], NFKD: [0x0073, 0x0323] }, +{ source: [0x1E64], NFC: [0x1E64], NFD: [0x0053, 0x0301, 0x0307], NFKC: [0x1E64], NFKD: [0x0053, 0x0301, 0x0307] }, +{ source: [0x1E65], NFC: [0x1E65], NFD: [0x0073, 0x0301, 0x0307], NFKC: [0x1E65], NFKD: [0x0073, 0x0301, 0x0307] }, +{ source: [0x1E66], NFC: [0x1E66], NFD: [0x0053, 0x030C, 0x0307], NFKC: [0x1E66], NFKD: [0x0053, 0x030C, 0x0307] }, +{ source: [0x1E67], NFC: [0x1E67], NFD: [0x0073, 0x030C, 0x0307], NFKC: [0x1E67], NFKD: [0x0073, 0x030C, 0x0307] }, +{ source: [0x1E68], NFC: [0x1E68], NFD: [0x0053, 0x0323, 0x0307], NFKC: [0x1E68], NFKD: [0x0053, 0x0323, 0x0307] }, +{ source: [0x1E69], NFC: [0x1E69], NFD: [0x0073, 0x0323, 0x0307], NFKC: [0x1E69], NFKD: [0x0073, 0x0323, 0x0307] }, +{ source: [0x1E6A], NFC: [0x1E6A], NFD: [0x0054, 0x0307], NFKC: [0x1E6A], NFKD: [0x0054, 0x0307] }, +{ source: [0x1E6B], NFC: [0x1E6B], NFD: [0x0074, 0x0307], NFKC: [0x1E6B], NFKD: [0x0074, 0x0307] }, +{ source: [0x1E6C], NFC: [0x1E6C], NFD: [0x0054, 0x0323], NFKC: [0x1E6C], NFKD: [0x0054, 0x0323] }, +{ source: [0x1E6D], NFC: [0x1E6D], NFD: [0x0074, 0x0323], NFKC: [0x1E6D], NFKD: [0x0074, 0x0323] }, +{ source: [0x1E6E], NFC: [0x1E6E], NFD: [0x0054, 0x0331], NFKC: [0x1E6E], NFKD: [0x0054, 0x0331] }, +{ source: [0x1E6F], NFC: [0x1E6F], NFD: [0x0074, 0x0331], NFKC: [0x1E6F], NFKD: [0x0074, 0x0331] }, +{ source: [0x1E70], NFC: [0x1E70], NFD: [0x0054, 0x032D], NFKC: [0x1E70], NFKD: [0x0054, 0x032D] }, +{ source: [0x1E71], NFC: [0x1E71], NFD: [0x0074, 0x032D], NFKC: [0x1E71], NFKD: [0x0074, 0x032D] }, +{ source: [0x1E72], NFC: [0x1E72], NFD: [0x0055, 0x0324], NFKC: [0x1E72], NFKD: [0x0055, 0x0324] }, +{ source: [0x1E73], NFC: [0x1E73], NFD: [0x0075, 0x0324], NFKC: [0x1E73], NFKD: [0x0075, 0x0324] }, +{ source: [0x1E74], NFC: [0x1E74], NFD: [0x0055, 0x0330], NFKC: [0x1E74], NFKD: [0x0055, 0x0330] }, +{ source: [0x1E75], NFC: [0x1E75], NFD: [0x0075, 0x0330], NFKC: [0x1E75], NFKD: [0x0075, 0x0330] }, +{ source: [0x1E76], NFC: [0x1E76], NFD: [0x0055, 0x032D], NFKC: [0x1E76], NFKD: [0x0055, 0x032D] }, +{ source: [0x1E77], NFC: [0x1E77], NFD: [0x0075, 0x032D], NFKC: [0x1E77], NFKD: [0x0075, 0x032D] }, +{ source: [0x1E78], NFC: [0x1E78], NFD: [0x0055, 0x0303, 0x0301], NFKC: [0x1E78], NFKD: [0x0055, 0x0303, 0x0301] }, +{ source: [0x1E79], NFC: [0x1E79], NFD: [0x0075, 0x0303, 0x0301], NFKC: [0x1E79], NFKD: [0x0075, 0x0303, 0x0301] }, +{ source: [0x1E7A], NFC: [0x1E7A], NFD: [0x0055, 0x0304, 0x0308], NFKC: [0x1E7A], NFKD: [0x0055, 0x0304, 0x0308] }, +{ source: [0x1E7B], NFC: [0x1E7B], NFD: [0x0075, 0x0304, 0x0308], NFKC: [0x1E7B], NFKD: [0x0075, 0x0304, 0x0308] }, +{ source: [0x1E7C], NFC: [0x1E7C], NFD: [0x0056, 0x0303], NFKC: [0x1E7C], NFKD: [0x0056, 0x0303] }, +{ source: [0x1E7D], NFC: [0x1E7D], NFD: [0x0076, 0x0303], NFKC: [0x1E7D], NFKD: [0x0076, 0x0303] }, +{ source: [0x1E7E], NFC: [0x1E7E], NFD: [0x0056, 0x0323], NFKC: [0x1E7E], NFKD: [0x0056, 0x0323] }, +{ source: [0x1E7F], NFC: [0x1E7F], NFD: [0x0076, 0x0323], NFKC: [0x1E7F], NFKD: [0x0076, 0x0323] }, +{ source: [0x1E80], NFC: [0x1E80], NFD: [0x0057, 0x0300], NFKC: [0x1E80], NFKD: [0x0057, 0x0300] }, +{ source: [0x1E81], NFC: [0x1E81], NFD: [0x0077, 0x0300], NFKC: [0x1E81], NFKD: [0x0077, 0x0300] }, +{ source: [0x1E82], NFC: [0x1E82], NFD: [0x0057, 0x0301], NFKC: [0x1E82], NFKD: [0x0057, 0x0301] }, +{ source: [0x1E83], NFC: [0x1E83], NFD: [0x0077, 0x0301], NFKC: [0x1E83], NFKD: [0x0077, 0x0301] }, +{ source: [0x1E84], NFC: [0x1E84], NFD: [0x0057, 0x0308], NFKC: [0x1E84], NFKD: [0x0057, 0x0308] }, +{ source: [0x1E85], NFC: [0x1E85], NFD: [0x0077, 0x0308], NFKC: [0x1E85], NFKD: [0x0077, 0x0308] }, +{ source: [0x1E86], NFC: [0x1E86], NFD: [0x0057, 0x0307], NFKC: [0x1E86], NFKD: [0x0057, 0x0307] }, +{ source: [0x1E87], NFC: [0x1E87], NFD: [0x0077, 0x0307], NFKC: [0x1E87], NFKD: [0x0077, 0x0307] }, +{ source: [0x1E88], NFC: [0x1E88], NFD: [0x0057, 0x0323], NFKC: [0x1E88], NFKD: [0x0057, 0x0323] }, +{ source: [0x1E89], NFC: [0x1E89], NFD: [0x0077, 0x0323], NFKC: [0x1E89], NFKD: [0x0077, 0x0323] }, +{ source: [0x1E8A], NFC: [0x1E8A], NFD: [0x0058, 0x0307], NFKC: [0x1E8A], NFKD: [0x0058, 0x0307] }, +{ source: [0x1E8B], NFC: [0x1E8B], NFD: [0x0078, 0x0307], NFKC: [0x1E8B], NFKD: [0x0078, 0x0307] }, +{ source: [0x1E8C], NFC: [0x1E8C], NFD: [0x0058, 0x0308], NFKC: [0x1E8C], NFKD: [0x0058, 0x0308] }, +{ source: [0x1E8D], NFC: [0x1E8D], NFD: [0x0078, 0x0308], NFKC: [0x1E8D], NFKD: [0x0078, 0x0308] }, +{ source: [0x1E8E], NFC: [0x1E8E], NFD: [0x0059, 0x0307], NFKC: [0x1E8E], NFKD: [0x0059, 0x0307] }, +{ source: [0x1E8F], NFC: [0x1E8F], NFD: [0x0079, 0x0307], NFKC: [0x1E8F], NFKD: [0x0079, 0x0307] }, +{ source: [0x1E90], NFC: [0x1E90], NFD: [0x005A, 0x0302], NFKC: [0x1E90], NFKD: [0x005A, 0x0302] }, +{ source: [0x1E91], NFC: [0x1E91], NFD: [0x007A, 0x0302], NFKC: [0x1E91], NFKD: [0x007A, 0x0302] }, +{ source: [0x1E92], NFC: [0x1E92], NFD: [0x005A, 0x0323], NFKC: [0x1E92], NFKD: [0x005A, 0x0323] }, +{ source: [0x1E93], NFC: [0x1E93], NFD: [0x007A, 0x0323], NFKC: [0x1E93], NFKD: [0x007A, 0x0323] }, +{ source: [0x1E94], NFC: [0x1E94], NFD: [0x005A, 0x0331], NFKC: [0x1E94], NFKD: [0x005A, 0x0331] }, +{ source: [0x1E95], NFC: [0x1E95], NFD: [0x007A, 0x0331], NFKC: [0x1E95], NFKD: [0x007A, 0x0331] }, +{ source: [0x1E96], NFC: [0x1E96], NFD: [0x0068, 0x0331], NFKC: [0x1E96], NFKD: [0x0068, 0x0331] }, +{ source: [0x1E97], NFC: [0x1E97], NFD: [0x0074, 0x0308], NFKC: [0x1E97], NFKD: [0x0074, 0x0308] }, +{ source: [0x1E98], NFC: [0x1E98], NFD: [0x0077, 0x030A], NFKC: [0x1E98], NFKD: [0x0077, 0x030A] }, +{ source: [0x1E99], NFC: [0x1E99], NFD: [0x0079, 0x030A], NFKC: [0x1E99], NFKD: [0x0079, 0x030A] }, +{ source: [0x1E9A], NFC: [0x1E9A], NFD: [0x1E9A], NFKC: [0x0061, 0x02BE], NFKD: [0x0061, 0x02BE] }, +{ source: [0x1E9B], NFC: [0x1E9B], NFD: [0x017F, 0x0307], NFKC: [0x1E61], NFKD: [0x0073, 0x0307] }, +{ source: [0x1EA0], NFC: [0x1EA0], NFD: [0x0041, 0x0323], NFKC: [0x1EA0], NFKD: [0x0041, 0x0323] }, +{ source: [0x1EA1], NFC: [0x1EA1], NFD: [0x0061, 0x0323], NFKC: [0x1EA1], NFKD: [0x0061, 0x0323] }, +{ source: [0x1EA2], NFC: [0x1EA2], NFD: [0x0041, 0x0309], NFKC: [0x1EA2], NFKD: [0x0041, 0x0309] }, +{ source: [0x1EA3], NFC: [0x1EA3], NFD: [0x0061, 0x0309], NFKC: [0x1EA3], NFKD: [0x0061, 0x0309] }, +{ source: [0x1EA4], NFC: [0x1EA4], NFD: [0x0041, 0x0302, 0x0301], NFKC: [0x1EA4], NFKD: [0x0041, 0x0302, 0x0301] }, +{ source: [0x1EA5], NFC: [0x1EA5], NFD: [0x0061, 0x0302, 0x0301], NFKC: [0x1EA5], NFKD: [0x0061, 0x0302, 0x0301] }, +{ source: [0x1EA6], NFC: [0x1EA6], NFD: [0x0041, 0x0302, 0x0300], NFKC: [0x1EA6], NFKD: [0x0041, 0x0302, 0x0300] }, +{ source: [0x1EA7], NFC: [0x1EA7], NFD: [0x0061, 0x0302, 0x0300], NFKC: [0x1EA7], NFKD: [0x0061, 0x0302, 0x0300] }, +{ source: [0x1EA8], NFC: [0x1EA8], NFD: [0x0041, 0x0302, 0x0309], NFKC: [0x1EA8], NFKD: [0x0041, 0x0302, 0x0309] }, +{ source: [0x1EA9], NFC: [0x1EA9], NFD: [0x0061, 0x0302, 0x0309], NFKC: [0x1EA9], NFKD: [0x0061, 0x0302, 0x0309] }, +{ source: [0x1EAA], NFC: [0x1EAA], NFD: [0x0041, 0x0302, 0x0303], NFKC: [0x1EAA], NFKD: [0x0041, 0x0302, 0x0303] }, +{ source: [0x1EAB], NFC: [0x1EAB], NFD: [0x0061, 0x0302, 0x0303], NFKC: [0x1EAB], NFKD: [0x0061, 0x0302, 0x0303] }, +{ source: [0x1EAC], NFC: [0x1EAC], NFD: [0x0041, 0x0323, 0x0302], NFKC: [0x1EAC], NFKD: [0x0041, 0x0323, 0x0302] }, +{ source: [0x1EAD], NFC: [0x1EAD], NFD: [0x0061, 0x0323, 0x0302], NFKC: [0x1EAD], NFKD: [0x0061, 0x0323, 0x0302] }, +{ source: [0x1EAE], NFC: [0x1EAE], NFD: [0x0041, 0x0306, 0x0301], NFKC: [0x1EAE], NFKD: [0x0041, 0x0306, 0x0301] }, +{ source: [0x1EAF], NFC: [0x1EAF], NFD: [0x0061, 0x0306, 0x0301], NFKC: [0x1EAF], NFKD: [0x0061, 0x0306, 0x0301] }, +{ source: [0x1EB0], NFC: [0x1EB0], NFD: [0x0041, 0x0306, 0x0300], NFKC: [0x1EB0], NFKD: [0x0041, 0x0306, 0x0300] }, +{ source: [0x1EB1], NFC: [0x1EB1], NFD: [0x0061, 0x0306, 0x0300], NFKC: [0x1EB1], NFKD: [0x0061, 0x0306, 0x0300] }, +{ source: [0x1EB2], NFC: [0x1EB2], NFD: [0x0041, 0x0306, 0x0309], NFKC: [0x1EB2], NFKD: [0x0041, 0x0306, 0x0309] }, +{ source: [0x1EB3], NFC: [0x1EB3], NFD: [0x0061, 0x0306, 0x0309], NFKC: [0x1EB3], NFKD: [0x0061, 0x0306, 0x0309] }, +{ source: [0x1EB4], NFC: [0x1EB4], NFD: [0x0041, 0x0306, 0x0303], NFKC: [0x1EB4], NFKD: [0x0041, 0x0306, 0x0303] }, +{ source: [0x1EB5], NFC: [0x1EB5], NFD: [0x0061, 0x0306, 0x0303], NFKC: [0x1EB5], NFKD: [0x0061, 0x0306, 0x0303] }, +{ source: [0x1EB6], NFC: [0x1EB6], NFD: [0x0041, 0x0323, 0x0306], NFKC: [0x1EB6], NFKD: [0x0041, 0x0323, 0x0306] }, +{ source: [0x1EB7], NFC: [0x1EB7], NFD: [0x0061, 0x0323, 0x0306], NFKC: [0x1EB7], NFKD: [0x0061, 0x0323, 0x0306] }, +{ source: [0x1EB8], NFC: [0x1EB8], NFD: [0x0045, 0x0323], NFKC: [0x1EB8], NFKD: [0x0045, 0x0323] }, +{ source: [0x1EB9], NFC: [0x1EB9], NFD: [0x0065, 0x0323], NFKC: [0x1EB9], NFKD: [0x0065, 0x0323] }, +{ source: [0x1EBA], NFC: [0x1EBA], NFD: [0x0045, 0x0309], NFKC: [0x1EBA], NFKD: [0x0045, 0x0309] }, +{ source: [0x1EBB], NFC: [0x1EBB], NFD: [0x0065, 0x0309], NFKC: [0x1EBB], NFKD: [0x0065, 0x0309] }, +{ source: [0x1EBC], NFC: [0x1EBC], NFD: [0x0045, 0x0303], NFKC: [0x1EBC], NFKD: [0x0045, 0x0303] }, +{ source: [0x1EBD], NFC: [0x1EBD], NFD: [0x0065, 0x0303], NFKC: [0x1EBD], NFKD: [0x0065, 0x0303] }, +{ source: [0x1EBE], NFC: [0x1EBE], NFD: [0x0045, 0x0302, 0x0301], NFKC: [0x1EBE], NFKD: [0x0045, 0x0302, 0x0301] }, +{ source: [0x1EBF], NFC: [0x1EBF], NFD: [0x0065, 0x0302, 0x0301], NFKC: [0x1EBF], NFKD: [0x0065, 0x0302, 0x0301] }, +{ source: [0x1EC0], NFC: [0x1EC0], NFD: [0x0045, 0x0302, 0x0300], NFKC: [0x1EC0], NFKD: [0x0045, 0x0302, 0x0300] }, +{ source: [0x1EC1], NFC: [0x1EC1], NFD: [0x0065, 0x0302, 0x0300], NFKC: [0x1EC1], NFKD: [0x0065, 0x0302, 0x0300] }, +{ source: [0x1EC2], NFC: [0x1EC2], NFD: [0x0045, 0x0302, 0x0309], NFKC: [0x1EC2], NFKD: [0x0045, 0x0302, 0x0309] }, +{ source: [0x1EC3], NFC: [0x1EC3], NFD: [0x0065, 0x0302, 0x0309], NFKC: [0x1EC3], NFKD: [0x0065, 0x0302, 0x0309] }, +{ source: [0x1EC4], NFC: [0x1EC4], NFD: [0x0045, 0x0302, 0x0303], NFKC: [0x1EC4], NFKD: [0x0045, 0x0302, 0x0303] }, +{ source: [0x1EC5], NFC: [0x1EC5], NFD: [0x0065, 0x0302, 0x0303], NFKC: [0x1EC5], NFKD: [0x0065, 0x0302, 0x0303] }, +{ source: [0x1EC6], NFC: [0x1EC6], NFD: [0x0045, 0x0323, 0x0302], NFKC: [0x1EC6], NFKD: [0x0045, 0x0323, 0x0302] }, +{ source: [0x1EC7], NFC: [0x1EC7], NFD: [0x0065, 0x0323, 0x0302], NFKC: [0x1EC7], NFKD: [0x0065, 0x0323, 0x0302] }, +{ source: [0x1EC8], NFC: [0x1EC8], NFD: [0x0049, 0x0309], NFKC: [0x1EC8], NFKD: [0x0049, 0x0309] }, +{ source: [0x1EC9], NFC: [0x1EC9], NFD: [0x0069, 0x0309], NFKC: [0x1EC9], NFKD: [0x0069, 0x0309] }, +{ source: [0x1ECA], NFC: [0x1ECA], NFD: [0x0049, 0x0323], NFKC: [0x1ECA], NFKD: [0x0049, 0x0323] }, +{ source: [0x1ECB], NFC: [0x1ECB], NFD: [0x0069, 0x0323], NFKC: [0x1ECB], NFKD: [0x0069, 0x0323] }, +{ source: [0x1ECC], NFC: [0x1ECC], NFD: [0x004F, 0x0323], NFKC: [0x1ECC], NFKD: [0x004F, 0x0323] }, +{ source: [0x1ECD], NFC: [0x1ECD], NFD: [0x006F, 0x0323], NFKC: [0x1ECD], NFKD: [0x006F, 0x0323] }, +{ source: [0x1ECE], NFC: [0x1ECE], NFD: [0x004F, 0x0309], NFKC: [0x1ECE], NFKD: [0x004F, 0x0309] }, +{ source: [0x1ECF], NFC: [0x1ECF], NFD: [0x006F, 0x0309], NFKC: [0x1ECF], NFKD: [0x006F, 0x0309] }, +{ source: [0x1ED0], NFC: [0x1ED0], NFD: [0x004F, 0x0302, 0x0301], NFKC: [0x1ED0], NFKD: [0x004F, 0x0302, 0x0301] }, +{ source: [0x1ED1], NFC: [0x1ED1], NFD: [0x006F, 0x0302, 0x0301], NFKC: [0x1ED1], NFKD: [0x006F, 0x0302, 0x0301] }, +{ source: [0x1ED2], NFC: [0x1ED2], NFD: [0x004F, 0x0302, 0x0300], NFKC: [0x1ED2], NFKD: [0x004F, 0x0302, 0x0300] }, +{ source: [0x1ED3], NFC: [0x1ED3], NFD: [0x006F, 0x0302, 0x0300], NFKC: [0x1ED3], NFKD: [0x006F, 0x0302, 0x0300] }, +{ source: [0x1ED4], NFC: [0x1ED4], NFD: [0x004F, 0x0302, 0x0309], NFKC: [0x1ED4], NFKD: [0x004F, 0x0302, 0x0309] }, +{ source: [0x1ED5], NFC: [0x1ED5], NFD: [0x006F, 0x0302, 0x0309], NFKC: [0x1ED5], NFKD: [0x006F, 0x0302, 0x0309] }, +{ source: [0x1ED6], NFC: [0x1ED6], NFD: [0x004F, 0x0302, 0x0303], NFKC: [0x1ED6], NFKD: [0x004F, 0x0302, 0x0303] }, +{ source: [0x1ED7], NFC: [0x1ED7], NFD: [0x006F, 0x0302, 0x0303], NFKC: [0x1ED7], NFKD: [0x006F, 0x0302, 0x0303] }, +{ source: [0x1ED8], NFC: [0x1ED8], NFD: [0x004F, 0x0323, 0x0302], NFKC: [0x1ED8], NFKD: [0x004F, 0x0323, 0x0302] }, +{ source: [0x1ED9], NFC: [0x1ED9], NFD: [0x006F, 0x0323, 0x0302], NFKC: [0x1ED9], NFKD: [0x006F, 0x0323, 0x0302] }, +{ source: [0x1EDA], NFC: [0x1EDA], NFD: [0x004F, 0x031B, 0x0301], NFKC: [0x1EDA], NFKD: [0x004F, 0x031B, 0x0301] }, +{ source: [0x1EDB], NFC: [0x1EDB], NFD: [0x006F, 0x031B, 0x0301], NFKC: [0x1EDB], NFKD: [0x006F, 0x031B, 0x0301] }, +{ source: [0x1EDC], NFC: [0x1EDC], NFD: [0x004F, 0x031B, 0x0300], NFKC: [0x1EDC], NFKD: [0x004F, 0x031B, 0x0300] }, +{ source: [0x1EDD], NFC: [0x1EDD], NFD: [0x006F, 0x031B, 0x0300], NFKC: [0x1EDD], NFKD: [0x006F, 0x031B, 0x0300] }, +{ source: [0x1EDE], NFC: [0x1EDE], NFD: [0x004F, 0x031B, 0x0309], NFKC: [0x1EDE], NFKD: [0x004F, 0x031B, 0x0309] }, +{ source: [0x1EDF], NFC: [0x1EDF], NFD: [0x006F, 0x031B, 0x0309], NFKC: [0x1EDF], NFKD: [0x006F, 0x031B, 0x0309] }, +{ source: [0x1EE0], NFC: [0x1EE0], NFD: [0x004F, 0x031B, 0x0303], NFKC: [0x1EE0], NFKD: [0x004F, 0x031B, 0x0303] }, +{ source: [0x1EE1], NFC: [0x1EE1], NFD: [0x006F, 0x031B, 0x0303], NFKC: [0x1EE1], NFKD: [0x006F, 0x031B, 0x0303] }, +{ source: [0x1EE2], NFC: [0x1EE2], NFD: [0x004F, 0x031B, 0x0323], NFKC: [0x1EE2], NFKD: [0x004F, 0x031B, 0x0323] }, +{ source: [0x1EE3], NFC: [0x1EE3], NFD: [0x006F, 0x031B, 0x0323], NFKC: [0x1EE3], NFKD: [0x006F, 0x031B, 0x0323] }, +{ source: [0x1EE4], NFC: [0x1EE4], NFD: [0x0055, 0x0323], NFKC: [0x1EE4], NFKD: [0x0055, 0x0323] }, +{ source: [0x1EE5], NFC: [0x1EE5], NFD: [0x0075, 0x0323], NFKC: [0x1EE5], NFKD: [0x0075, 0x0323] }, +{ source: [0x1EE6], NFC: [0x1EE6], NFD: [0x0055, 0x0309], NFKC: [0x1EE6], NFKD: [0x0055, 0x0309] }, +{ source: [0x1EE7], NFC: [0x1EE7], NFD: [0x0075, 0x0309], NFKC: [0x1EE7], NFKD: [0x0075, 0x0309] }, +{ source: [0x1EE8], NFC: [0x1EE8], NFD: [0x0055, 0x031B, 0x0301], NFKC: [0x1EE8], NFKD: [0x0055, 0x031B, 0x0301] }, +{ source: [0x1EE9], NFC: [0x1EE9], NFD: [0x0075, 0x031B, 0x0301], NFKC: [0x1EE9], NFKD: [0x0075, 0x031B, 0x0301] }, +{ source: [0x1EEA], NFC: [0x1EEA], NFD: [0x0055, 0x031B, 0x0300], NFKC: [0x1EEA], NFKD: [0x0055, 0x031B, 0x0300] }, +{ source: [0x1EEB], NFC: [0x1EEB], NFD: [0x0075, 0x031B, 0x0300], NFKC: [0x1EEB], NFKD: [0x0075, 0x031B, 0x0300] }, +{ source: [0x1EEC], NFC: [0x1EEC], NFD: [0x0055, 0x031B, 0x0309], NFKC: [0x1EEC], NFKD: [0x0055, 0x031B, 0x0309] }, +{ source: [0x1EED], NFC: [0x1EED], NFD: [0x0075, 0x031B, 0x0309], NFKC: [0x1EED], NFKD: [0x0075, 0x031B, 0x0309] }, +{ source: [0x1EEE], NFC: [0x1EEE], NFD: [0x0055, 0x031B, 0x0303], NFKC: [0x1EEE], NFKD: [0x0055, 0x031B, 0x0303] }, +{ source: [0x1EEF], NFC: [0x1EEF], NFD: [0x0075, 0x031B, 0x0303], NFKC: [0x1EEF], NFKD: [0x0075, 0x031B, 0x0303] }, +{ source: [0x1EF0], NFC: [0x1EF0], NFD: [0x0055, 0x031B, 0x0323], NFKC: [0x1EF0], NFKD: [0x0055, 0x031B, 0x0323] }, +{ source: [0x1EF1], NFC: [0x1EF1], NFD: [0x0075, 0x031B, 0x0323], NFKC: [0x1EF1], NFKD: [0x0075, 0x031B, 0x0323] }, +{ source: [0x1EF2], NFC: [0x1EF2], NFD: [0x0059, 0x0300], NFKC: [0x1EF2], NFKD: [0x0059, 0x0300] }, +{ source: [0x1EF3], NFC: [0x1EF3], NFD: [0x0079, 0x0300], NFKC: [0x1EF3], NFKD: [0x0079, 0x0300] }, +{ source: [0x1EF4], NFC: [0x1EF4], NFD: [0x0059, 0x0323], NFKC: [0x1EF4], NFKD: [0x0059, 0x0323] }, +{ source: [0x1EF5], NFC: [0x1EF5], NFD: [0x0079, 0x0323], NFKC: [0x1EF5], NFKD: [0x0079, 0x0323] }, +{ source: [0x1EF6], NFC: [0x1EF6], NFD: [0x0059, 0x0309], NFKC: [0x1EF6], NFKD: [0x0059, 0x0309] }, +{ source: [0x1EF7], NFC: [0x1EF7], NFD: [0x0079, 0x0309], NFKC: [0x1EF7], NFKD: [0x0079, 0x0309] }, +{ source: [0x1EF8], NFC: [0x1EF8], NFD: [0x0059, 0x0303], NFKC: [0x1EF8], NFKD: [0x0059, 0x0303] }, +{ source: [0x1EF9], NFC: [0x1EF9], NFD: [0x0079, 0x0303], NFKC: [0x1EF9], NFKD: [0x0079, 0x0303] }, +{ source: [0x1F00], NFC: [0x1F00], NFD: [0x03B1, 0x0313], NFKC: [0x1F00], NFKD: [0x03B1, 0x0313] }, +{ source: [0x1F01], NFC: [0x1F01], NFD: [0x03B1, 0x0314], NFKC: [0x1F01], NFKD: [0x03B1, 0x0314] }, +{ source: [0x1F02], NFC: [0x1F02], NFD: [0x03B1, 0x0313, 0x0300], NFKC: [0x1F02], NFKD: [0x03B1, 0x0313, 0x0300] }, +{ source: [0x1F03], NFC: [0x1F03], NFD: [0x03B1, 0x0314, 0x0300], NFKC: [0x1F03], NFKD: [0x03B1, 0x0314, 0x0300] }, +{ source: [0x1F04], NFC: [0x1F04], NFD: [0x03B1, 0x0313, 0x0301], NFKC: [0x1F04], NFKD: [0x03B1, 0x0313, 0x0301] }, +{ source: [0x1F05], NFC: [0x1F05], NFD: [0x03B1, 0x0314, 0x0301], NFKC: [0x1F05], NFKD: [0x03B1, 0x0314, 0x0301] }, +{ source: [0x1F06], NFC: [0x1F06], NFD: [0x03B1, 0x0313, 0x0342], NFKC: [0x1F06], NFKD: [0x03B1, 0x0313, 0x0342] }, +{ source: [0x1F07], NFC: [0x1F07], NFD: [0x03B1, 0x0314, 0x0342], NFKC: [0x1F07], NFKD: [0x03B1, 0x0314, 0x0342] }, +{ source: [0x1F08], NFC: [0x1F08], NFD: [0x0391, 0x0313], NFKC: [0x1F08], NFKD: [0x0391, 0x0313] }, +{ source: [0x1F09], NFC: [0x1F09], NFD: [0x0391, 0x0314], NFKC: [0x1F09], NFKD: [0x0391, 0x0314] }, +{ source: [0x1F0A], NFC: [0x1F0A], NFD: [0x0391, 0x0313, 0x0300], NFKC: [0x1F0A], NFKD: [0x0391, 0x0313, 0x0300] }, +{ source: [0x1F0B], NFC: [0x1F0B], NFD: [0x0391, 0x0314, 0x0300], NFKC: [0x1F0B], NFKD: [0x0391, 0x0314, 0x0300] }, +{ source: [0x1F0C], NFC: [0x1F0C], NFD: [0x0391, 0x0313, 0x0301], NFKC: [0x1F0C], NFKD: [0x0391, 0x0313, 0x0301] }, +{ source: [0x1F0D], NFC: [0x1F0D], NFD: [0x0391, 0x0314, 0x0301], NFKC: [0x1F0D], NFKD: [0x0391, 0x0314, 0x0301] }, +{ source: [0x1F0E], NFC: [0x1F0E], NFD: [0x0391, 0x0313, 0x0342], NFKC: [0x1F0E], NFKD: [0x0391, 0x0313, 0x0342] }, +{ source: [0x1F0F], NFC: [0x1F0F], NFD: [0x0391, 0x0314, 0x0342], NFKC: [0x1F0F], NFKD: [0x0391, 0x0314, 0x0342] }, +{ source: [0x1F10], NFC: [0x1F10], NFD: [0x03B5, 0x0313], NFKC: [0x1F10], NFKD: [0x03B5, 0x0313] }, +{ source: [0x1F11], NFC: [0x1F11], NFD: [0x03B5, 0x0314], NFKC: [0x1F11], NFKD: [0x03B5, 0x0314] }, +{ source: [0x1F12], NFC: [0x1F12], NFD: [0x03B5, 0x0313, 0x0300], NFKC: [0x1F12], NFKD: [0x03B5, 0x0313, 0x0300] }, +{ source: [0x1F13], NFC: [0x1F13], NFD: [0x03B5, 0x0314, 0x0300], NFKC: [0x1F13], NFKD: [0x03B5, 0x0314, 0x0300] }, +{ source: [0x1F14], NFC: [0x1F14], NFD: [0x03B5, 0x0313, 0x0301], NFKC: [0x1F14], NFKD: [0x03B5, 0x0313, 0x0301] }, +{ source: [0x1F15], NFC: [0x1F15], NFD: [0x03B5, 0x0314, 0x0301], NFKC: [0x1F15], NFKD: [0x03B5, 0x0314, 0x0301] }, +{ source: [0x1F18], NFC: [0x1F18], NFD: [0x0395, 0x0313], NFKC: [0x1F18], NFKD: [0x0395, 0x0313] }, +{ source: [0x1F19], NFC: [0x1F19], NFD: [0x0395, 0x0314], NFKC: [0x1F19], NFKD: [0x0395, 0x0314] }, +{ source: [0x1F1A], NFC: [0x1F1A], NFD: [0x0395, 0x0313, 0x0300], NFKC: [0x1F1A], NFKD: [0x0395, 0x0313, 0x0300] }, +{ source: [0x1F1B], NFC: [0x1F1B], NFD: [0x0395, 0x0314, 0x0300], NFKC: [0x1F1B], NFKD: [0x0395, 0x0314, 0x0300] }, +{ source: [0x1F1C], NFC: [0x1F1C], NFD: [0x0395, 0x0313, 0x0301], NFKC: [0x1F1C], NFKD: [0x0395, 0x0313, 0x0301] }, +{ source: [0x1F1D], NFC: [0x1F1D], NFD: [0x0395, 0x0314, 0x0301], NFKC: [0x1F1D], NFKD: [0x0395, 0x0314, 0x0301] }, +{ source: [0x1F20], NFC: [0x1F20], NFD: [0x03B7, 0x0313], NFKC: [0x1F20], NFKD: [0x03B7, 0x0313] }, +{ source: [0x1F21], NFC: [0x1F21], NFD: [0x03B7, 0x0314], NFKC: [0x1F21], NFKD: [0x03B7, 0x0314] }, +{ source: [0x1F22], NFC: [0x1F22], NFD: [0x03B7, 0x0313, 0x0300], NFKC: [0x1F22], NFKD: [0x03B7, 0x0313, 0x0300] }, +{ source: [0x1F23], NFC: [0x1F23], NFD: [0x03B7, 0x0314, 0x0300], NFKC: [0x1F23], NFKD: [0x03B7, 0x0314, 0x0300] }, +{ source: [0x1F24], NFC: [0x1F24], NFD: [0x03B7, 0x0313, 0x0301], NFKC: [0x1F24], NFKD: [0x03B7, 0x0313, 0x0301] }, +{ source: [0x1F25], NFC: [0x1F25], NFD: [0x03B7, 0x0314, 0x0301], NFKC: [0x1F25], NFKD: [0x03B7, 0x0314, 0x0301] }, +{ source: [0x1F26], NFC: [0x1F26], NFD: [0x03B7, 0x0313, 0x0342], NFKC: [0x1F26], NFKD: [0x03B7, 0x0313, 0x0342] }, +{ source: [0x1F27], NFC: [0x1F27], NFD: [0x03B7, 0x0314, 0x0342], NFKC: [0x1F27], NFKD: [0x03B7, 0x0314, 0x0342] }, +{ source: [0x1F28], NFC: [0x1F28], NFD: [0x0397, 0x0313], NFKC: [0x1F28], NFKD: [0x0397, 0x0313] }, +{ source: [0x1F29], NFC: [0x1F29], NFD: [0x0397, 0x0314], NFKC: [0x1F29], NFKD: [0x0397, 0x0314] }, +{ source: [0x1F2A], NFC: [0x1F2A], NFD: [0x0397, 0x0313, 0x0300], NFKC: [0x1F2A], NFKD: [0x0397, 0x0313, 0x0300] }, +{ source: [0x1F2B], NFC: [0x1F2B], NFD: [0x0397, 0x0314, 0x0300], NFKC: [0x1F2B], NFKD: [0x0397, 0x0314, 0x0300] }, +{ source: [0x1F2C], NFC: [0x1F2C], NFD: [0x0397, 0x0313, 0x0301], NFKC: [0x1F2C], NFKD: [0x0397, 0x0313, 0x0301] }, +{ source: [0x1F2D], NFC: [0x1F2D], NFD: [0x0397, 0x0314, 0x0301], NFKC: [0x1F2D], NFKD: [0x0397, 0x0314, 0x0301] }, +{ source: [0x1F2E], NFC: [0x1F2E], NFD: [0x0397, 0x0313, 0x0342], NFKC: [0x1F2E], NFKD: [0x0397, 0x0313, 0x0342] }, +{ source: [0x1F2F], NFC: [0x1F2F], NFD: [0x0397, 0x0314, 0x0342], NFKC: [0x1F2F], NFKD: [0x0397, 0x0314, 0x0342] }, +{ source: [0x1F30], NFC: [0x1F30], NFD: [0x03B9, 0x0313], NFKC: [0x1F30], NFKD: [0x03B9, 0x0313] }, +{ source: [0x1F31], NFC: [0x1F31], NFD: [0x03B9, 0x0314], NFKC: [0x1F31], NFKD: [0x03B9, 0x0314] }, +{ source: [0x1F32], NFC: [0x1F32], NFD: [0x03B9, 0x0313, 0x0300], NFKC: [0x1F32], NFKD: [0x03B9, 0x0313, 0x0300] }, +{ source: [0x1F33], NFC: [0x1F33], NFD: [0x03B9, 0x0314, 0x0300], NFKC: [0x1F33], NFKD: [0x03B9, 0x0314, 0x0300] }, +{ source: [0x1F34], NFC: [0x1F34], NFD: [0x03B9, 0x0313, 0x0301], NFKC: [0x1F34], NFKD: [0x03B9, 0x0313, 0x0301] }, +{ source: [0x1F35], NFC: [0x1F35], NFD: [0x03B9, 0x0314, 0x0301], NFKC: [0x1F35], NFKD: [0x03B9, 0x0314, 0x0301] }, +{ source: [0x1F36], NFC: [0x1F36], NFD: [0x03B9, 0x0313, 0x0342], NFKC: [0x1F36], NFKD: [0x03B9, 0x0313, 0x0342] }, +{ source: [0x1F37], NFC: [0x1F37], NFD: [0x03B9, 0x0314, 0x0342], NFKC: [0x1F37], NFKD: [0x03B9, 0x0314, 0x0342] }, +{ source: [0x1F38], NFC: [0x1F38], NFD: [0x0399, 0x0313], NFKC: [0x1F38], NFKD: [0x0399, 0x0313] }, +{ source: [0x1F39], NFC: [0x1F39], NFD: [0x0399, 0x0314], NFKC: [0x1F39], NFKD: [0x0399, 0x0314] }, +{ source: [0x1F3A], NFC: [0x1F3A], NFD: [0x0399, 0x0313, 0x0300], NFKC: [0x1F3A], NFKD: [0x0399, 0x0313, 0x0300] }, +{ source: [0x1F3B], NFC: [0x1F3B], NFD: [0x0399, 0x0314, 0x0300], NFKC: [0x1F3B], NFKD: [0x0399, 0x0314, 0x0300] }, +{ source: [0x1F3C], NFC: [0x1F3C], NFD: [0x0399, 0x0313, 0x0301], NFKC: [0x1F3C], NFKD: [0x0399, 0x0313, 0x0301] }, +{ source: [0x1F3D], NFC: [0x1F3D], NFD: [0x0399, 0x0314, 0x0301], NFKC: [0x1F3D], NFKD: [0x0399, 0x0314, 0x0301] }, +{ source: [0x1F3E], NFC: [0x1F3E], NFD: [0x0399, 0x0313, 0x0342], NFKC: [0x1F3E], NFKD: [0x0399, 0x0313, 0x0342] }, +{ source: [0x1F3F], NFC: [0x1F3F], NFD: [0x0399, 0x0314, 0x0342], NFKC: [0x1F3F], NFKD: [0x0399, 0x0314, 0x0342] }, +{ source: [0x1F40], NFC: [0x1F40], NFD: [0x03BF, 0x0313], NFKC: [0x1F40], NFKD: [0x03BF, 0x0313] }, +{ source: [0x1F41], NFC: [0x1F41], NFD: [0x03BF, 0x0314], NFKC: [0x1F41], NFKD: [0x03BF, 0x0314] }, +{ source: [0x1F42], NFC: [0x1F42], NFD: [0x03BF, 0x0313, 0x0300], NFKC: [0x1F42], NFKD: [0x03BF, 0x0313, 0x0300] }, +{ source: [0x1F43], NFC: [0x1F43], NFD: [0x03BF, 0x0314, 0x0300], NFKC: [0x1F43], NFKD: [0x03BF, 0x0314, 0x0300] }, +{ source: [0x1F44], NFC: [0x1F44], NFD: [0x03BF, 0x0313, 0x0301], NFKC: [0x1F44], NFKD: [0x03BF, 0x0313, 0x0301] }, +{ source: [0x1F45], NFC: [0x1F45], NFD: [0x03BF, 0x0314, 0x0301], NFKC: [0x1F45], NFKD: [0x03BF, 0x0314, 0x0301] }, +{ source: [0x1F48], NFC: [0x1F48], NFD: [0x039F, 0x0313], NFKC: [0x1F48], NFKD: [0x039F, 0x0313] }, +{ source: [0x1F49], NFC: [0x1F49], NFD: [0x039F, 0x0314], NFKC: [0x1F49], NFKD: [0x039F, 0x0314] }, +{ source: [0x1F4A], NFC: [0x1F4A], NFD: [0x039F, 0x0313, 0x0300], NFKC: [0x1F4A], NFKD: [0x039F, 0x0313, 0x0300] }, +{ source: [0x1F4B], NFC: [0x1F4B], NFD: [0x039F, 0x0314, 0x0300], NFKC: [0x1F4B], NFKD: [0x039F, 0x0314, 0x0300] }, +{ source: [0x1F4C], NFC: [0x1F4C], NFD: [0x039F, 0x0313, 0x0301], NFKC: [0x1F4C], NFKD: [0x039F, 0x0313, 0x0301] }, +{ source: [0x1F4D], NFC: [0x1F4D], NFD: [0x039F, 0x0314, 0x0301], NFKC: [0x1F4D], NFKD: [0x039F, 0x0314, 0x0301] }, +{ source: [0x1F50], NFC: [0x1F50], NFD: [0x03C5, 0x0313], NFKC: [0x1F50], NFKD: [0x03C5, 0x0313] }, +{ source: [0x1F51], NFC: [0x1F51], NFD: [0x03C5, 0x0314], NFKC: [0x1F51], NFKD: [0x03C5, 0x0314] }, +{ source: [0x1F52], NFC: [0x1F52], NFD: [0x03C5, 0x0313, 0x0300], NFKC: [0x1F52], NFKD: [0x03C5, 0x0313, 0x0300] }, +{ source: [0x1F53], NFC: [0x1F53], NFD: [0x03C5, 0x0314, 0x0300], NFKC: [0x1F53], NFKD: [0x03C5, 0x0314, 0x0300] }, +{ source: [0x1F54], NFC: [0x1F54], NFD: [0x03C5, 0x0313, 0x0301], NFKC: [0x1F54], NFKD: [0x03C5, 0x0313, 0x0301] }, +{ source: [0x1F55], NFC: [0x1F55], NFD: [0x03C5, 0x0314, 0x0301], NFKC: [0x1F55], NFKD: [0x03C5, 0x0314, 0x0301] }, +{ source: [0x1F56], NFC: [0x1F56], NFD: [0x03C5, 0x0313, 0x0342], NFKC: [0x1F56], NFKD: [0x03C5, 0x0313, 0x0342] }, +{ source: [0x1F57], NFC: [0x1F57], NFD: [0x03C5, 0x0314, 0x0342], NFKC: [0x1F57], NFKD: [0x03C5, 0x0314, 0x0342] }, +{ source: [0x1F59], NFC: [0x1F59], NFD: [0x03A5, 0x0314], NFKC: [0x1F59], NFKD: [0x03A5, 0x0314] }, +{ source: [0x1F5B], NFC: [0x1F5B], NFD: [0x03A5, 0x0314, 0x0300], NFKC: [0x1F5B], NFKD: [0x03A5, 0x0314, 0x0300] }, +{ source: [0x1F5D], NFC: [0x1F5D], NFD: [0x03A5, 0x0314, 0x0301], NFKC: [0x1F5D], NFKD: [0x03A5, 0x0314, 0x0301] }, +{ source: [0x1F5F], NFC: [0x1F5F], NFD: [0x03A5, 0x0314, 0x0342], NFKC: [0x1F5F], NFKD: [0x03A5, 0x0314, 0x0342] }, +{ source: [0x1F60], NFC: [0x1F60], NFD: [0x03C9, 0x0313], NFKC: [0x1F60], NFKD: [0x03C9, 0x0313] }, +{ source: [0x1F61], NFC: [0x1F61], NFD: [0x03C9, 0x0314], NFKC: [0x1F61], NFKD: [0x03C9, 0x0314] }, +{ source: [0x1F62], NFC: [0x1F62], NFD: [0x03C9, 0x0313, 0x0300], NFKC: [0x1F62], NFKD: [0x03C9, 0x0313, 0x0300] }, +{ source: [0x1F63], NFC: [0x1F63], NFD: [0x03C9, 0x0314, 0x0300], NFKC: [0x1F63], NFKD: [0x03C9, 0x0314, 0x0300] }, +{ source: [0x1F64], NFC: [0x1F64], NFD: [0x03C9, 0x0313, 0x0301], NFKC: [0x1F64], NFKD: [0x03C9, 0x0313, 0x0301] }, +{ source: [0x1F65], NFC: [0x1F65], NFD: [0x03C9, 0x0314, 0x0301], NFKC: [0x1F65], NFKD: [0x03C9, 0x0314, 0x0301] }, +{ source: [0x1F66], NFC: [0x1F66], NFD: [0x03C9, 0x0313, 0x0342], NFKC: [0x1F66], NFKD: [0x03C9, 0x0313, 0x0342] }, +{ source: [0x1F67], NFC: [0x1F67], NFD: [0x03C9, 0x0314, 0x0342], NFKC: [0x1F67], NFKD: [0x03C9, 0x0314, 0x0342] }, +{ source: [0x1F68], NFC: [0x1F68], NFD: [0x03A9, 0x0313], NFKC: [0x1F68], NFKD: [0x03A9, 0x0313] }, +{ source: [0x1F69], NFC: [0x1F69], NFD: [0x03A9, 0x0314], NFKC: [0x1F69], NFKD: [0x03A9, 0x0314] }, +{ source: [0x1F6A], NFC: [0x1F6A], NFD: [0x03A9, 0x0313, 0x0300], NFKC: [0x1F6A], NFKD: [0x03A9, 0x0313, 0x0300] }, +{ source: [0x1F6B], NFC: [0x1F6B], NFD: [0x03A9, 0x0314, 0x0300], NFKC: [0x1F6B], NFKD: [0x03A9, 0x0314, 0x0300] }, +{ source: [0x1F6C], NFC: [0x1F6C], NFD: [0x03A9, 0x0313, 0x0301], NFKC: [0x1F6C], NFKD: [0x03A9, 0x0313, 0x0301] }, +{ source: [0x1F6D], NFC: [0x1F6D], NFD: [0x03A9, 0x0314, 0x0301], NFKC: [0x1F6D], NFKD: [0x03A9, 0x0314, 0x0301] }, +{ source: [0x1F6E], NFC: [0x1F6E], NFD: [0x03A9, 0x0313, 0x0342], NFKC: [0x1F6E], NFKD: [0x03A9, 0x0313, 0x0342] }, +{ source: [0x1F6F], NFC: [0x1F6F], NFD: [0x03A9, 0x0314, 0x0342], NFKC: [0x1F6F], NFKD: [0x03A9, 0x0314, 0x0342] }, +{ source: [0x1F70], NFC: [0x1F70], NFD: [0x03B1, 0x0300], NFKC: [0x1F70], NFKD: [0x03B1, 0x0300] }, +{ source: [0x1F71], NFC: [0x03AC], NFD: [0x03B1, 0x0301], NFKC: [0x03AC], NFKD: [0x03B1, 0x0301] }, +{ source: [0x1F72], NFC: [0x1F72], NFD: [0x03B5, 0x0300], NFKC: [0x1F72], NFKD: [0x03B5, 0x0300] }, +{ source: [0x1F73], NFC: [0x03AD], NFD: [0x03B5, 0x0301], NFKC: [0x03AD], NFKD: [0x03B5, 0x0301] }, +{ source: [0x1F74], NFC: [0x1F74], NFD: [0x03B7, 0x0300], NFKC: [0x1F74], NFKD: [0x03B7, 0x0300] }, +{ source: [0x1F75], NFC: [0x03AE], NFD: [0x03B7, 0x0301], NFKC: [0x03AE], NFKD: [0x03B7, 0x0301] }, +{ source: [0x1F76], NFC: [0x1F76], NFD: [0x03B9, 0x0300], NFKC: [0x1F76], NFKD: [0x03B9, 0x0300] }, +{ source: [0x1F77], NFC: [0x03AF], NFD: [0x03B9, 0x0301], NFKC: [0x03AF], NFKD: [0x03B9, 0x0301] }, +{ source: [0x1F78], NFC: [0x1F78], NFD: [0x03BF, 0x0300], NFKC: [0x1F78], NFKD: [0x03BF, 0x0300] }, +{ source: [0x1F79], NFC: [0x03CC], NFD: [0x03BF, 0x0301], NFKC: [0x03CC], NFKD: [0x03BF, 0x0301] }, +{ source: [0x1F7A], NFC: [0x1F7A], NFD: [0x03C5, 0x0300], NFKC: [0x1F7A], NFKD: [0x03C5, 0x0300] }, +{ source: [0x1F7B], NFC: [0x03CD], NFD: [0x03C5, 0x0301], NFKC: [0x03CD], NFKD: [0x03C5, 0x0301] }, +{ source: [0x1F7C], NFC: [0x1F7C], NFD: [0x03C9, 0x0300], NFKC: [0x1F7C], NFKD: [0x03C9, 0x0300] }, +{ source: [0x1F7D], NFC: [0x03CE], NFD: [0x03C9, 0x0301], NFKC: [0x03CE], NFKD: [0x03C9, 0x0301] }, +{ source: [0x1F80], NFC: [0x1F80], NFD: [0x03B1, 0x0313, 0x0345], NFKC: [0x1F80], NFKD: [0x03B1, 0x0313, 0x0345] }, +{ source: [0x1F81], NFC: [0x1F81], NFD: [0x03B1, 0x0314, 0x0345], NFKC: [0x1F81], NFKD: [0x03B1, 0x0314, 0x0345] }, +{ source: [0x1F82], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F83], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F84], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F85], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F86], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F87], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F88], NFC: [0x1F88], NFD: [0x0391, 0x0313, 0x0345], NFKC: [0x1F88], NFKD: [0x0391, 0x0313, 0x0345] }, +{ source: [0x1F89], NFC: [0x1F89], NFD: [0x0391, 0x0314, 0x0345], NFKC: [0x1F89], NFKD: [0x0391, 0x0314, 0x0345] }, +{ source: [0x1F8A], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F8B], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F8C], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F8D], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F8E], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F8F], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F90], NFC: [0x1F90], NFD: [0x03B7, 0x0313, 0x0345], NFKC: [0x1F90], NFKD: [0x03B7, 0x0313, 0x0345] }, +{ source: [0x1F91], NFC: [0x1F91], NFD: [0x03B7, 0x0314, 0x0345], NFKC: [0x1F91], NFKD: [0x03B7, 0x0314, 0x0345] }, +{ source: [0x1F92], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F93], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F94], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F95], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F96], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F97], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F98], NFC: [0x1F98], NFD: [0x0397, 0x0313, 0x0345], NFKC: [0x1F98], NFKD: [0x0397, 0x0313, 0x0345] }, +{ source: [0x1F99], NFC: [0x1F99], NFD: [0x0397, 0x0314, 0x0345], NFKC: [0x1F99], NFKD: [0x0397, 0x0314, 0x0345] }, +{ source: [0x1F9A], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F9B], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F9C], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F9D], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F9E], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F9F], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FA0], NFC: [0x1FA0], NFD: [0x03C9, 0x0313, 0x0345], NFKC: [0x1FA0], NFKD: [0x03C9, 0x0313, 0x0345] }, +{ source: [0x1FA1], NFC: [0x1FA1], NFD: [0x03C9, 0x0314, 0x0345], NFKC: [0x1FA1], NFKD: [0x03C9, 0x0314, 0x0345] }, +{ source: [0x1FA2], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FA3], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FA4], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FA5], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FA6], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FA7], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FA8], NFC: [0x1FA8], NFD: [0x03A9, 0x0313, 0x0345], NFKC: [0x1FA8], NFKD: [0x03A9, 0x0313, 0x0345] }, +{ source: [0x1FA9], NFC: [0x1FA9], NFD: [0x03A9, 0x0314, 0x0345], NFKC: [0x1FA9], NFKD: [0x03A9, 0x0314, 0x0345] }, +{ source: [0x1FAA], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FAB], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FAC], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FAD], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FAE], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FAF], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FB0], NFC: [0x1FB0], NFD: [0x03B1, 0x0306], NFKC: [0x1FB0], NFKD: [0x03B1, 0x0306] }, +{ source: [0x1FB1], NFC: [0x1FB1], NFD: [0x03B1, 0x0304], NFKC: [0x1FB1], NFKD: [0x03B1, 0x0304] }, +{ source: [0x1FB2], NFC: [0x1FB2], NFD: [0x03B1, 0x0300, 0x0345], NFKC: [0x1FB2], NFKD: [0x03B1, 0x0300, 0x0345] }, +{ source: [0x1FB3], NFC: [0x1FB3], NFD: [0x03B1, 0x0345], NFKC: [0x1FB3], NFKD: [0x03B1, 0x0345] }, +{ source: [0x1FB4], NFC: [0x1FB4], NFD: [0x03B1, 0x0301, 0x0345], NFKC: [0x1FB4], NFKD: [0x03B1, 0x0301, 0x0345] }, +{ source: [0x1FB6], NFC: [0x1FB6], NFD: [0x03B1, 0x0342], NFKC: [0x1FB6], NFKD: [0x03B1, 0x0342] }, +{ source: [0x1FB7], NFC: [0x1FB7], NFD: [0x03B1, 0x0342, 0x0345], NFKC: [0x1FB7], NFKD: [0x03B1, 0x0342, 0x0345] }, +{ source: [0x1FB8], NFC: [0x1FB8], NFD: [0x0391, 0x0306], NFKC: [0x1FB8], NFKD: [0x0391, 0x0306] }, +{ source: [0x1FB9], NFC: [0x1FB9], NFD: [0x0391, 0x0304], NFKC: [0x1FB9], NFKD: [0x0391, 0x0304] }, +{ source: [0x1FBA], NFC: [0x1FBA], NFD: [0x0391, 0x0300], NFKC: [0x1FBA], NFKD: [0x0391, 0x0300] }, +{ source: [0x1FBB], NFC: [0x0386], NFD: [0x0391, 0x0301], NFKC: [0x0386], NFKD: [0x0391, 0x0301] }, +{ source: [0x1FBC], NFC: [0x1FBC], NFD: [0x0391, 0x0345], NFKC: [0x1FBC], NFKD: [0x0391, 0x0345] }, +{ source: [0x1FBD], NFC: [0x1FBD], NFD: [0x1FBD], NFKC: [0x0020, 0x0313], NFKD: [0x0020, 0x0313] }, +{ source: [0x1FBE], NFC: [0x03B9], NFD: [0x03B9], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1FBF], NFC: [0x1FBF], NFD: [0x1FBF], NFKC: [0x0020, 0x0313], NFKD: [0x0020, 0x0313] }, +{ source: [0x1FC0], NFC: [0x1FC0], NFD: [0x1FC0], NFKC: [0x0020, 0x0342], NFKD: [0x0020, 0x0342] }, +{ source: [0x1FC1], NFC: [0x1FC1], NFD: [0x00A8, 0x0342], NFKC: [0x0020, 0x0308, 0x0342], NFKD: [0x0020, 0x0308, 0x0342] }, +{ source: [0x1FC2], NFC: [0x1FC2], NFD: [0x03B7, 0x0300, 0x0345], NFKC: [0x1FC2], NFKD: [0x03B7, 0x0300, 0x0345] }, +{ source: [0x1FC3], NFC: [0x1FC3], NFD: [0x03B7, 0x0345], NFKC: [0x1FC3], NFKD: [0x03B7, 0x0345] }, +{ source: [0x1FC4], NFC: [0x1FC4], NFD: [0x03B7, 0x0301, 0x0345], NFKC: [0x1FC4], NFKD: [0x03B7, 0x0301, 0x0345] }, +{ source: [0x1FC6], NFC: [0x1FC6], NFD: [0x03B7, 0x0342], NFKC: [0x1FC6], NFKD: [0x03B7, 0x0342] }, +{ source: [0x1FC7], NFC: [0x1FC7], NFD: [0x03B7, 0x0342, 0x0345], NFKC: [0x1FC7], NFKD: [0x03B7, 0x0342, 0x0345] }, +{ source: [0x1FC8], NFC: [0x1FC8], NFD: [0x0395, 0x0300], NFKC: [0x1FC8], NFKD: [0x0395, 0x0300] }, +{ source: [0x1FC9], NFC: [0x0388], NFD: [0x0395, 0x0301], NFKC: [0x0388], NFKD: [0x0395, 0x0301] }, +{ source: [0x1FCA], NFC: [0x1FCA], NFD: [0x0397, 0x0300], NFKC: [0x1FCA], NFKD: [0x0397, 0x0300] }, +{ source: [0x1FCB], NFC: [0x0389], NFD: [0x0397, 0x0301], NFKC: [0x0389], NFKD: [0x0397, 0x0301] }, +{ source: [0x1FCC], NFC: [0x1FCC], NFD: [0x0397, 0x0345], NFKC: [0x1FCC], NFKD: [0x0397, 0x0345] }, +{ source: [0x1FCD], NFC: [0x1FCD], NFD: [0x1FBF, 0x0300], NFKC: [0x0020, 0x0313, 0x0300], NFKD: [0x0020, 0x0313, 0x0300] }, +{ source: [0x1FCE], NFC: [0x1FCE], NFD: [0x1FBF, 0x0301], NFKC: [0x0020, 0x0313, 0x0301], NFKD: [0x0020, 0x0313, 0x0301] }, +{ source: [0x1FCF], NFC: [0x1FCF], NFD: [0x1FBF, 0x0342], NFKC: [0x0020, 0x0313, 0x0342], NFKD: [0x0020, 0x0313, 0x0342] }, +{ source: [0x1FD0], NFC: [0x1FD0], NFD: [0x03B9, 0x0306], NFKC: [0x1FD0], NFKD: [0x03B9, 0x0306] }, +{ source: [0x1FD1], NFC: [0x1FD1], NFD: [0x03B9, 0x0304], NFKC: [0x1FD1], NFKD: [0x03B9, 0x0304] }, +{ source: [0x1FD2], NFC: [0x1FD2], NFD: [0x03B9, 0x0308, 0x0300], NFKC: [0x1FD2], NFKD: [0x03B9, 0x0308, 0x0300] }, +{ source: [0x1FD3], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x1FD6], NFC: [0x1FD6], NFD: [0x03B9, 0x0342], NFKC: [0x1FD6], NFKD: [0x03B9, 0x0342] }, +{ source: [0x1FD7], NFC: [0x1FD7], NFD: [0x03B9, 0x0308, 0x0342], NFKC: [0x1FD7], NFKD: [0x03B9, 0x0308, 0x0342] }, +{ source: [0x1FD8], NFC: [0x1FD8], NFD: [0x0399, 0x0306], NFKC: [0x1FD8], NFKD: [0x0399, 0x0306] }, +{ source: [0x1FD9], NFC: [0x1FD9], NFD: [0x0399, 0x0304], NFKC: [0x1FD9], NFKD: [0x0399, 0x0304] }, +{ source: [0x1FDA], NFC: [0x1FDA], NFD: [0x0399, 0x0300], NFKC: [0x1FDA], NFKD: [0x0399, 0x0300] }, +{ source: [0x1FDB], NFC: [0x038A], NFD: [0x0399, 0x0301], NFKC: [0x038A], NFKD: [0x0399, 0x0301] }, +{ source: [0x1FDD], NFC: [0x1FDD], NFD: [0x1FFE, 0x0300], NFKC: [0x0020, 0x0314, 0x0300], NFKD: [0x0020, 0x0314, 0x0300] }, +{ source: [0x1FDE], NFC: [0x1FDE], NFD: [0x1FFE, 0x0301], NFKC: [0x0020, 0x0314, 0x0301], NFKD: [0x0020, 0x0314, 0x0301] }, +{ source: [0x1FDF], NFC: [0x1FDF], NFD: [0x1FFE, 0x0342], NFKC: [0x0020, 0x0314, 0x0342], NFKD: [0x0020, 0x0314, 0x0342] }, +{ source: [0x1FE0], NFC: [0x1FE0], NFD: [0x03C5, 0x0306], NFKC: [0x1FE0], NFKD: [0x03C5, 0x0306] }, +{ source: [0x1FE1], NFC: [0x1FE1], NFD: [0x03C5, 0x0304], NFKC: [0x1FE1], NFKD: [0x03C5, 0x0304] }, +{ source: [0x1FE2], NFC: [0x1FE2], NFD: [0x03C5, 0x0308, 0x0300], NFKC: [0x1FE2], NFKD: [0x03C5, 0x0308, 0x0300] }, +{ source: [0x1FE3], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x1FE4], NFC: [0x1FE4], NFD: [0x03C1, 0x0313], NFKC: [0x1FE4], NFKD: [0x03C1, 0x0313] }, +{ source: [0x1FE5], NFC: [0x1FE5], NFD: [0x03C1, 0x0314], NFKC: [0x1FE5], NFKD: [0x03C1, 0x0314] }, +{ source: [0x1FE6], NFC: [0x1FE6], NFD: [0x03C5, 0x0342], NFKC: [0x1FE6], NFKD: [0x03C5, 0x0342] }, +{ source: [0x1FE7], NFC: [0x1FE7], NFD: [0x03C5, 0x0308, 0x0342], NFKC: [0x1FE7], NFKD: [0x03C5, 0x0308, 0x0342] }, +{ source: [0x1FE8], NFC: [0x1FE8], NFD: [0x03A5, 0x0306], NFKC: [0x1FE8], NFKD: [0x03A5, 0x0306] }, +{ source: [0x1FE9], NFC: [0x1FE9], NFD: [0x03A5, 0x0304], NFKC: [0x1FE9], NFKD: [0x03A5, 0x0304] }, +{ source: [0x1FEA], NFC: [0x1FEA], NFD: [0x03A5, 0x0300], NFKC: [0x1FEA], NFKD: [0x03A5, 0x0300] }, +{ source: [0x1FEB], NFC: [0x038E], NFD: [0x03A5, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] }, +{ source: [0x1FEC], NFC: [0x1FEC], NFD: [0x03A1, 0x0314], NFKC: [0x1FEC], NFKD: [0x03A1, 0x0314] }, +{ source: [0x1FED], NFC: [0x1FED], NFD: [0x00A8, 0x0300], NFKC: [0x0020, 0x0308, 0x0300], NFKD: [0x0020, 0x0308, 0x0300] }, +{ source: [0x1FEE], NFC: [0x0385], NFD: [0x00A8, 0x0301], NFKC: [0x0020, 0x0308, 0x0301], NFKD: [0x0020, 0x0308, 0x0301] }, +{ source: [0x1FEF], NFC: [0x0060], NFD: [0x0060], NFKC: [0x0060], NFKD: [0x0060] }, +{ source: [0x1FF2], NFC: [0x1FF2], NFD: [0x03C9, 0x0300, 0x0345], NFKC: [0x1FF2], NFKD: [0x03C9, 0x0300, 0x0345] }, +{ source: [0x1FF3], NFC: [0x1FF3], NFD: [0x03C9, 0x0345], NFKC: [0x1FF3], NFKD: [0x03C9, 0x0345] }, +{ source: [0x1FF4], NFC: [0x1FF4], NFD: [0x03C9, 0x0301, 0x0345], NFKC: [0x1FF4], NFKD: [0x03C9, 0x0301, 0x0345] }, +{ source: [0x1FF6], NFC: [0x1FF6], NFD: [0x03C9, 0x0342], NFKC: [0x1FF6], NFKD: [0x03C9, 0x0342] }, +{ source: [0x1FF7], NFC: [0x1FF7], NFD: [0x03C9, 0x0342, 0x0345], NFKC: [0x1FF7], NFKD: [0x03C9, 0x0342, 0x0345] }, +{ source: [0x1FF8], NFC: [0x1FF8], NFD: [0x039F, 0x0300], NFKC: [0x1FF8], NFKD: [0x039F, 0x0300] }, +{ source: [0x1FF9], NFC: [0x038C], NFD: [0x039F, 0x0301], NFKC: [0x038C], NFKD: [0x039F, 0x0301] }, +{ source: [0x1FFA], NFC: [0x1FFA], NFD: [0x03A9, 0x0300], NFKC: [0x1FFA], NFKD: [0x03A9, 0x0300] }, +{ source: [0x1FFB], NFC: [0x038F], NFD: [0x03A9, 0x0301], NFKC: [0x038F], NFKD: [0x03A9, 0x0301] }, +{ source: [0x1FFC], NFC: [0x1FFC], NFD: [0x03A9, 0x0345], NFKC: [0x1FFC], NFKD: [0x03A9, 0x0345] }, +{ source: [0x1FFD], NFC: [0x00B4], NFD: [0x00B4], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] }, +{ source: [0x1FFE], NFC: [0x1FFE], NFD: [0x1FFE], NFKC: [0x0020, 0x0314], NFKD: [0x0020, 0x0314] }, +{ source: [0x2000], NFC: [0x2002], NFD: [0x2002], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2001], NFC: [0x2003], NFD: [0x2003], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2002], NFC: [0x2002], NFD: [0x2002], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2003], NFC: [0x2003], NFD: [0x2003], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2004], NFC: [0x2004], NFD: [0x2004], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2005], NFC: [0x2005], NFD: [0x2005], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2006], NFC: [0x2006], NFD: [0x2006], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2007], NFC: [0x2007], NFD: [0x2007], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2008], NFC: [0x2008], NFD: [0x2008], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2009], NFC: [0x2009], NFD: [0x2009], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x200A], NFC: [0x200A], NFD: [0x200A], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2011], NFC: [0x2011], NFD: [0x2011], NFKC: [0x2010], NFKD: [0x2010] }, +{ source: [0x2017], NFC: [0x2017], NFD: [0x2017], NFKC: [0x0020, 0x0333], NFKD: [0x0020, 0x0333] }, +{ source: [0x2024], NFC: [0x2024], NFD: [0x2024], NFKC: [0x002E], NFKD: [0x002E] }, +{ source: [0x2025], NFC: [0x2025], NFD: [0x2025], NFKC: [0x002E, 0x002E], NFKD: [0x002E, 0x002E] }, +{ source: [0x2026], NFC: [0x2026], NFD: [0x2026], NFKC: [0x002E, 0x002E, 0x002E], NFKD: [0x002E, 0x002E, 0x002E] }, +{ source: [0x202F], NFC: [0x202F], NFD: [0x202F], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2033], NFC: [0x2033], NFD: [0x2033], NFKC: [0x2032, 0x2032], NFKD: [0x2032, 0x2032] }, +{ source: [0x2034], NFC: [0x2034], NFD: [0x2034], NFKC: [0x2032, 0x2032, 0x2032], NFKD: [0x2032, 0x2032, 0x2032] }, +{ source: [0x2036], NFC: [0x2036], NFD: [0x2036], NFKC: [0x2035, 0x2035], NFKD: [0x2035, 0x2035] }, +{ source: [0x2037], NFC: [0x2037], NFD: [0x2037], NFKC: [0x2035, 0x2035, 0x2035], NFKD: [0x2035, 0x2035, 0x2035] }, +{ source: [0x203C], NFC: [0x203C], NFD: [0x203C], NFKC: [0x0021, 0x0021], NFKD: [0x0021, 0x0021] }, +{ source: [0x203E], NFC: [0x203E], NFD: [0x203E], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0x2047], NFC: [0x2047], NFD: [0x2047], NFKC: [0x003F, 0x003F], NFKD: [0x003F, 0x003F] }, +{ source: [0x2048], NFC: [0x2048], NFD: [0x2048], NFKC: [0x003F, 0x0021], NFKD: [0x003F, 0x0021] }, +{ source: [0x2049], NFC: [0x2049], NFD: [0x2049], NFKC: [0x0021, 0x003F], NFKD: [0x0021, 0x003F] }, +{ source: [0x2057], NFC: [0x2057], NFD: [0x2057], NFKC: [0x2032, 0x2032, 0x2032, 0x2032], NFKD: [0x2032, 0x2032, 0x2032, 0x2032] }, +{ source: [0x205F], NFC: [0x205F], NFD: [0x205F], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2070], NFC: [0x2070], NFD: [0x2070], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x2071], NFC: [0x2071], NFD: [0x2071], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x2074], NFC: [0x2074], NFD: [0x2074], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x2075], NFC: [0x2075], NFD: [0x2075], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x2076], NFC: [0x2076], NFD: [0x2076], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x2077], NFC: [0x2077], NFD: [0x2077], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x2078], NFC: [0x2078], NFD: [0x2078], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x2079], NFC: [0x2079], NFD: [0x2079], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x207A], NFC: [0x207A], NFD: [0x207A], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0x207B], NFC: [0x207B], NFD: [0x207B], NFKC: [0x2212], NFKD: [0x2212] }, +{ source: [0x207C], NFC: [0x207C], NFD: [0x207C], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0x207D], NFC: [0x207D], NFD: [0x207D], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0x207E], NFC: [0x207E], NFD: [0x207E], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0x207F], NFC: [0x207F], NFD: [0x207F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x2080], NFC: [0x2080], NFD: [0x2080], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x2081], NFC: [0x2081], NFD: [0x2081], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x2082], NFC: [0x2082], NFD: [0x2082], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x2083], NFC: [0x2083], NFD: [0x2083], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x2084], NFC: [0x2084], NFD: [0x2084], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x2085], NFC: [0x2085], NFD: [0x2085], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x2086], NFC: [0x2086], NFD: [0x2086], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x2087], NFC: [0x2087], NFD: [0x2087], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x2088], NFC: [0x2088], NFD: [0x2088], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x2089], NFC: [0x2089], NFD: [0x2089], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x208A], NFC: [0x208A], NFD: [0x208A], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0x208B], NFC: [0x208B], NFD: [0x208B], NFKC: [0x2212], NFKD: [0x2212] }, +{ source: [0x208C], NFC: [0x208C], NFD: [0x208C], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0x208D], NFC: [0x208D], NFD: [0x208D], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0x208E], NFC: [0x208E], NFD: [0x208E], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0x2090], NFC: [0x2090], NFD: [0x2090], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x2091], NFC: [0x2091], NFD: [0x2091], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x2092], NFC: [0x2092], NFD: [0x2092], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x2093], NFC: [0x2093], NFD: [0x2093], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x2094], NFC: [0x2094], NFD: [0x2094], NFKC: [0x0259], NFKD: [0x0259] }, +{ source: [0x2095], NFC: [0x2095], NFD: [0x2095], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x2096], NFC: [0x2096], NFD: [0x2096], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x2097], NFC: [0x2097], NFD: [0x2097], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x2098], NFC: [0x2098], NFD: [0x2098], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x2099], NFC: [0x2099], NFD: [0x2099], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x209A], NFC: [0x209A], NFD: [0x209A], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x209B], NFC: [0x209B], NFD: [0x209B], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x209C], NFC: [0x209C], NFD: [0x209C], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x20A8], NFC: [0x20A8], NFD: [0x20A8], NFKC: [0x0052, 0x0073], NFKD: [0x0052, 0x0073] }, +{ source: [0x2100], NFC: [0x2100], NFD: [0x2100], NFKC: [0x0061, 0x002F, 0x0063], NFKD: [0x0061, 0x002F, 0x0063] }, +{ source: [0x2101], NFC: [0x2101], NFD: [0x2101], NFKC: [0x0061, 0x002F, 0x0073], NFKD: [0x0061, 0x002F, 0x0073] }, +{ source: [0x2102], NFC: [0x2102], NFD: [0x2102], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x2103], NFC: [0x2103], NFD: [0x2103], NFKC: [0x00B0, 0x0043], NFKD: [0x00B0, 0x0043] }, +{ source: [0x2105], NFC: [0x2105], NFD: [0x2105], NFKC: [0x0063, 0x002F, 0x006F], NFKD: [0x0063, 0x002F, 0x006F] }, +{ source: [0x2106], NFC: [0x2106], NFD: [0x2106], NFKC: [0x0063, 0x002F, 0x0075], NFKD: [0x0063, 0x002F, 0x0075] }, +{ source: [0x2107], NFC: [0x2107], NFD: [0x2107], NFKC: [0x0190], NFKD: [0x0190] }, +{ source: [0x2109], NFC: [0x2109], NFD: [0x2109], NFKC: [0x00B0, 0x0046], NFKD: [0x00B0, 0x0046] }, +{ source: [0x210A], NFC: [0x210A], NFD: [0x210A], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x210B], NFC: [0x210B], NFD: [0x210B], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x210C], NFC: [0x210C], NFD: [0x210C], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x210D], NFC: [0x210D], NFD: [0x210D], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x210E], NFC: [0x210E], NFD: [0x210E], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x210F], NFC: [0x210F], NFD: [0x210F], NFKC: [0x0127], NFKD: [0x0127] }, +{ source: [0x2110], NFC: [0x2110], NFD: [0x2110], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x2111], NFC: [0x2111], NFD: [0x2111], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x2112], NFC: [0x2112], NFD: [0x2112], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x2113], NFC: [0x2113], NFD: [0x2113], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x2115], NFC: [0x2115], NFD: [0x2115], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x2116], NFC: [0x2116], NFD: [0x2116], NFKC: [0x004E, 0x006F], NFKD: [0x004E, 0x006F] }, +{ source: [0x2119], NFC: [0x2119], NFD: [0x2119], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x211A], NFC: [0x211A], NFD: [0x211A], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x211B], NFC: [0x211B], NFD: [0x211B], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x211C], NFC: [0x211C], NFD: [0x211C], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x211D], NFC: [0x211D], NFD: [0x211D], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x2120], NFC: [0x2120], NFD: [0x2120], NFKC: [0x0053, 0x004D], NFKD: [0x0053, 0x004D] }, +{ source: [0x2121], NFC: [0x2121], NFD: [0x2121], NFKC: [0x0054, 0x0045, 0x004C], NFKD: [0x0054, 0x0045, 0x004C] }, +{ source: [0x2122], NFC: [0x2122], NFD: [0x2122], NFKC: [0x0054, 0x004D], NFKD: [0x0054, 0x004D] }, +{ source: [0x2124], NFC: [0x2124], NFD: [0x2124], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x2126], NFC: [0x03A9], NFD: [0x03A9], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x2128], NFC: [0x2128], NFD: [0x2128], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x212A], NFC: [0x004B], NFD: [0x004B], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x212B], NFC: [0x00C5], NFD: [0x0041, 0x030A], NFKC: [0x00C5], NFKD: [0x0041, 0x030A] }, +{ source: [0x212C], NFC: [0x212C], NFD: [0x212C], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x212D], NFC: [0x212D], NFD: [0x212D], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x212F], NFC: [0x212F], NFD: [0x212F], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x2130], NFC: [0x2130], NFD: [0x2130], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x2131], NFC: [0x2131], NFD: [0x2131], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x2133], NFC: [0x2133], NFD: [0x2133], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x2134], NFC: [0x2134], NFD: [0x2134], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x2135], NFC: [0x2135], NFD: [0x2135], NFKC: [0x05D0], NFKD: [0x05D0] }, +{ source: [0x2136], NFC: [0x2136], NFD: [0x2136], NFKC: [0x05D1], NFKD: [0x05D1] }, +{ source: [0x2137], NFC: [0x2137], NFD: [0x2137], NFKC: [0x05D2], NFKD: [0x05D2] }, +{ source: [0x2138], NFC: [0x2138], NFD: [0x2138], NFKC: [0x05D3], NFKD: [0x05D3] }, +{ source: [0x2139], NFC: [0x2139], NFD: [0x2139], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x213B], NFC: [0x213B], NFD: [0x213B], NFKC: [0x0046, 0x0041, 0x0058], NFKD: [0x0046, 0x0041, 0x0058] }, +{ source: [0x213C], NFC: [0x213C], NFD: [0x213C], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x213D], NFC: [0x213D], NFD: [0x213D], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x213E], NFC: [0x213E], NFD: [0x213E], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x213F], NFC: [0x213F], NFD: [0x213F], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x2140], NFC: [0x2140], NFD: [0x2140], NFKC: [0x2211], NFKD: [0x2211] }, +{ source: [0x2145], NFC: [0x2145], NFD: [0x2145], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x2146], NFC: [0x2146], NFD: [0x2146], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x2147], NFC: [0x2147], NFD: [0x2147], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x2148], NFC: [0x2148], NFD: [0x2148], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x2149], NFC: [0x2149], NFD: [0x2149], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x2150], NFC: [0x2150], NFD: [0x2150], NFKC: [0x0031, 0x2044, 0x0037], NFKD: [0x0031, 0x2044, 0x0037] }, +{ source: [0x2151], NFC: [0x2151], NFD: [0x2151], NFKC: [0x0031, 0x2044, 0x0039], NFKD: [0x0031, 0x2044, 0x0039] }, +{ source: [0x2152], NFC: [0x2152], NFD: [0x2152], NFKC: [0x0031, 0x2044, 0x0031, 0x0030], NFKD: [0x0031, 0x2044, 0x0031, 0x0030] }, +{ source: [0x2153], NFC: [0x2153], NFD: [0x2153], NFKC: [0x0031, 0x2044, 0x0033], NFKD: [0x0031, 0x2044, 0x0033] }, +{ source: [0x2154], NFC: [0x2154], NFD: [0x2154], NFKC: [0x0032, 0x2044, 0x0033], NFKD: [0x0032, 0x2044, 0x0033] }, +{ source: [0x2155], NFC: [0x2155], NFD: [0x2155], NFKC: [0x0031, 0x2044, 0x0035], NFKD: [0x0031, 0x2044, 0x0035] }, +{ source: [0x2156], NFC: [0x2156], NFD: [0x2156], NFKC: [0x0032, 0x2044, 0x0035], NFKD: [0x0032, 0x2044, 0x0035] }, +{ source: [0x2157], NFC: [0x2157], NFD: [0x2157], NFKC: [0x0033, 0x2044, 0x0035], NFKD: [0x0033, 0x2044, 0x0035] }, +{ source: [0x2158], NFC: [0x2158], NFD: [0x2158], NFKC: [0x0034, 0x2044, 0x0035], NFKD: [0x0034, 0x2044, 0x0035] }, +{ source: [0x2159], NFC: [0x2159], NFD: [0x2159], NFKC: [0x0031, 0x2044, 0x0036], NFKD: [0x0031, 0x2044, 0x0036] }, +{ source: [0x215A], NFC: [0x215A], NFD: [0x215A], NFKC: [0x0035, 0x2044, 0x0036], NFKD: [0x0035, 0x2044, 0x0036] }, +{ source: [0x215B], NFC: [0x215B], NFD: [0x215B], NFKC: [0x0031, 0x2044, 0x0038], NFKD: [0x0031, 0x2044, 0x0038] }, +{ source: [0x215C], NFC: [0x215C], NFD: [0x215C], NFKC: [0x0033, 0x2044, 0x0038], NFKD: [0x0033, 0x2044, 0x0038] }, +{ source: [0x215D], NFC: [0x215D], NFD: [0x215D], NFKC: [0x0035, 0x2044, 0x0038], NFKD: [0x0035, 0x2044, 0x0038] }, +{ source: [0x215E], NFC: [0x215E], NFD: [0x215E], NFKC: [0x0037, 0x2044, 0x0038], NFKD: [0x0037, 0x2044, 0x0038] }, +{ source: [0x215F], NFC: [0x215F], NFD: [0x215F], NFKC: [0x0031, 0x2044], NFKD: [0x0031, 0x2044] }, +{ source: [0x2160], NFC: [0x2160], NFD: [0x2160], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x2161], NFC: [0x2161], NFD: [0x2161], NFKC: [0x0049, 0x0049], NFKD: [0x0049, 0x0049] }, +{ source: [0x2162], NFC: [0x2162], NFD: [0x2162], NFKC: [0x0049, 0x0049, 0x0049], NFKD: [0x0049, 0x0049, 0x0049] }, +{ source: [0x2163], NFC: [0x2163], NFD: [0x2163], NFKC: [0x0049, 0x0056], NFKD: [0x0049, 0x0056] }, +{ source: [0x2164], NFC: [0x2164], NFD: [0x2164], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x2165], NFC: [0x2165], NFD: [0x2165], NFKC: [0x0056, 0x0049], NFKD: [0x0056, 0x0049] }, +{ source: [0x2166], NFC: [0x2166], NFD: [0x2166], NFKC: [0x0056, 0x0049, 0x0049], NFKD: [0x0056, 0x0049, 0x0049] }, +{ source: [0x2167], NFC: [0x2167], NFD: [0x2167], NFKC: [0x0056, 0x0049, 0x0049, 0x0049], NFKD: [0x0056, 0x0049, 0x0049, 0x0049] }, +{ source: [0x2168], NFC: [0x2168], NFD: [0x2168], NFKC: [0x0049, 0x0058], NFKD: [0x0049, 0x0058] }, +{ source: [0x2169], NFC: [0x2169], NFD: [0x2169], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x216A], NFC: [0x216A], NFD: [0x216A], NFKC: [0x0058, 0x0049], NFKD: [0x0058, 0x0049] }, +{ source: [0x216B], NFC: [0x216B], NFD: [0x216B], NFKC: [0x0058, 0x0049, 0x0049], NFKD: [0x0058, 0x0049, 0x0049] }, +{ source: [0x216C], NFC: [0x216C], NFD: [0x216C], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x216D], NFC: [0x216D], NFD: [0x216D], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x216E], NFC: [0x216E], NFD: [0x216E], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x216F], NFC: [0x216F], NFD: [0x216F], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x2170], NFC: [0x2170], NFD: [0x2170], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x2171], NFC: [0x2171], NFD: [0x2171], NFKC: [0x0069, 0x0069], NFKD: [0x0069, 0x0069] }, +{ source: [0x2172], NFC: [0x2172], NFD: [0x2172], NFKC: [0x0069, 0x0069, 0x0069], NFKD: [0x0069, 0x0069, 0x0069] }, +{ source: [0x2173], NFC: [0x2173], NFD: [0x2173], NFKC: [0x0069, 0x0076], NFKD: [0x0069, 0x0076] }, +{ source: [0x2174], NFC: [0x2174], NFD: [0x2174], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x2175], NFC: [0x2175], NFD: [0x2175], NFKC: [0x0076, 0x0069], NFKD: [0x0076, 0x0069] }, +{ source: [0x2176], NFC: [0x2176], NFD: [0x2176], NFKC: [0x0076, 0x0069, 0x0069], NFKD: [0x0076, 0x0069, 0x0069] }, +{ source: [0x2177], NFC: [0x2177], NFD: [0x2177], NFKC: [0x0076, 0x0069, 0x0069, 0x0069], NFKD: [0x0076, 0x0069, 0x0069, 0x0069] }, +{ source: [0x2178], NFC: [0x2178], NFD: [0x2178], NFKC: [0x0069, 0x0078], NFKD: [0x0069, 0x0078] }, +{ source: [0x2179], NFC: [0x2179], NFD: [0x2179], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x217A], NFC: [0x217A], NFD: [0x217A], NFKC: [0x0078, 0x0069], NFKD: [0x0078, 0x0069] }, +{ source: [0x217B], NFC: [0x217B], NFD: [0x217B], NFKC: [0x0078, 0x0069, 0x0069], NFKD: [0x0078, 0x0069, 0x0069] }, +{ source: [0x217C], NFC: [0x217C], NFD: [0x217C], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x217D], NFC: [0x217D], NFD: [0x217D], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x217E], NFC: [0x217E], NFD: [0x217E], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x217F], NFC: [0x217F], NFD: [0x217F], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x2189], NFC: [0x2189], NFD: [0x2189], NFKC: [0x0030, 0x2044, 0x0033], NFKD: [0x0030, 0x2044, 0x0033] }, +{ source: [0x219A], NFC: [0x219A], NFD: [0x2190, 0x0338], NFKC: [0x219A], NFKD: [0x2190, 0x0338] }, +{ source: [0x219B], NFC: [0x219B], NFD: [0x2192, 0x0338], NFKC: [0x219B], NFKD: [0x2192, 0x0338] }, +{ source: [0x21AE], NFC: [0x21AE], NFD: [0x2194, 0x0338], NFKC: [0x21AE], NFKD: [0x2194, 0x0338] }, +{ source: [0x21CD], NFC: [0x21CD], NFD: [0x21D0, 0x0338], NFKC: [0x21CD], NFKD: [0x21D0, 0x0338] }, +{ source: [0x21CE], NFC: [0x21CE], NFD: [0x21D4, 0x0338], NFKC: [0x21CE], NFKD: [0x21D4, 0x0338] }, +{ source: [0x21CF], NFC: [0x21CF], NFD: [0x21D2, 0x0338], NFKC: [0x21CF], NFKD: [0x21D2, 0x0338] }, +{ source: [0x2204], NFC: [0x2204], NFD: [0x2203, 0x0338], NFKC: [0x2204], NFKD: [0x2203, 0x0338] }, +{ source: [0x2209], NFC: [0x2209], NFD: [0x2208, 0x0338], NFKC: [0x2209], NFKD: [0x2208, 0x0338] }, +{ source: [0x220C], NFC: [0x220C], NFD: [0x220B, 0x0338], NFKC: [0x220C], NFKD: [0x220B, 0x0338] }, +{ source: [0x2224], NFC: [0x2224], NFD: [0x2223, 0x0338], NFKC: [0x2224], NFKD: [0x2223, 0x0338] }, +{ source: [0x2226], NFC: [0x2226], NFD: [0x2225, 0x0338], NFKC: [0x2226], NFKD: [0x2225, 0x0338] }, +{ source: [0x222C], NFC: [0x222C], NFD: [0x222C], NFKC: [0x222B, 0x222B], NFKD: [0x222B, 0x222B] }, +{ source: [0x222D], NFC: [0x222D], NFD: [0x222D], NFKC: [0x222B, 0x222B, 0x222B], NFKD: [0x222B, 0x222B, 0x222B] }, +{ source: [0x222F], NFC: [0x222F], NFD: [0x222F], NFKC: [0x222E, 0x222E], NFKD: [0x222E, 0x222E] }, +{ source: [0x2230], NFC: [0x2230], NFD: [0x2230], NFKC: [0x222E, 0x222E, 0x222E], NFKD: [0x222E, 0x222E, 0x222E] }, +{ source: [0x2241], NFC: [0x2241], NFD: [0x223C, 0x0338], NFKC: [0x2241], NFKD: [0x223C, 0x0338] }, +{ source: [0x2244], NFC: [0x2244], NFD: [0x2243, 0x0338], NFKC: [0x2244], NFKD: [0x2243, 0x0338] }, +{ source: [0x2247], NFC: [0x2247], NFD: [0x2245, 0x0338], NFKC: [0x2247], NFKD: [0x2245, 0x0338] }, +{ source: [0x2249], NFC: [0x2249], NFD: [0x2248, 0x0338], NFKC: [0x2249], NFKD: [0x2248, 0x0338] }, +{ source: [0x2260], NFC: [0x2260], NFD: [0x003D, 0x0338], NFKC: [0x2260], NFKD: [0x003D, 0x0338] }, +{ source: [0x2262], NFC: [0x2262], NFD: [0x2261, 0x0338], NFKC: [0x2262], NFKD: [0x2261, 0x0338] }, +{ source: [0x226D], NFC: [0x226D], NFD: [0x224D, 0x0338], NFKC: [0x226D], NFKD: [0x224D, 0x0338] }, +{ source: [0x226E], NFC: [0x226E], NFD: [0x003C, 0x0338], NFKC: [0x226E], NFKD: [0x003C, 0x0338] }, +{ source: [0x226F], NFC: [0x226F], NFD: [0x003E, 0x0338], NFKC: [0x226F], NFKD: [0x003E, 0x0338] }, +{ source: [0x2270], NFC: [0x2270], NFD: [0x2264, 0x0338], NFKC: [0x2270], NFKD: [0x2264, 0x0338] }, +{ source: [0x2271], NFC: [0x2271], NFD: [0x2265, 0x0338], NFKC: [0x2271], NFKD: [0x2265, 0x0338] }, +{ source: [0x2274], NFC: [0x2274], NFD: [0x2272, 0x0338], NFKC: [0x2274], NFKD: [0x2272, 0x0338] }, +{ source: [0x2275], NFC: [0x2275], NFD: [0x2273, 0x0338], NFKC: [0x2275], NFKD: [0x2273, 0x0338] }, +{ source: [0x2278], NFC: [0x2278], NFD: [0x2276, 0x0338], NFKC: [0x2278], NFKD: [0x2276, 0x0338] }, +{ source: [0x2279], NFC: [0x2279], NFD: [0x2277, 0x0338], NFKC: [0x2279], NFKD: [0x2277, 0x0338] }, +{ source: [0x2280], NFC: [0x2280], NFD: [0x227A, 0x0338], NFKC: [0x2280], NFKD: [0x227A, 0x0338] }, +{ source: [0x2281], NFC: [0x2281], NFD: [0x227B, 0x0338], NFKC: [0x2281], NFKD: [0x227B, 0x0338] }, +{ source: [0x2284], NFC: [0x2284], NFD: [0x2282, 0x0338], NFKC: [0x2284], NFKD: [0x2282, 0x0338] }, +{ source: [0x2285], NFC: [0x2285], NFD: [0x2283, 0x0338], NFKC: [0x2285], NFKD: [0x2283, 0x0338] }, +{ source: [0x2288], NFC: [0x2288], NFD: [0x2286, 0x0338], NFKC: [0x2288], NFKD: [0x2286, 0x0338] }, +{ source: [0x2289], NFC: [0x2289], NFD: [0x2287, 0x0338], NFKC: [0x2289], NFKD: [0x2287, 0x0338] }, +{ source: [0x22AC], NFC: [0x22AC], NFD: [0x22A2, 0x0338], NFKC: [0x22AC], NFKD: [0x22A2, 0x0338] }, +{ source: [0x22AD], NFC: [0x22AD], NFD: [0x22A8, 0x0338], NFKC: [0x22AD], NFKD: [0x22A8, 0x0338] }, +{ source: [0x22AE], NFC: [0x22AE], NFD: [0x22A9, 0x0338], NFKC: [0x22AE], NFKD: [0x22A9, 0x0338] }, +{ source: [0x22AF], NFC: [0x22AF], NFD: [0x22AB, 0x0338], NFKC: [0x22AF], NFKD: [0x22AB, 0x0338] }, +{ source: [0x22E0], NFC: [0x22E0], NFD: [0x227C, 0x0338], NFKC: [0x22E0], NFKD: [0x227C, 0x0338] }, +{ source: [0x22E1], NFC: [0x22E1], NFD: [0x227D, 0x0338], NFKC: [0x22E1], NFKD: [0x227D, 0x0338] }, +{ source: [0x22E2], NFC: [0x22E2], NFD: [0x2291, 0x0338], NFKC: [0x22E2], NFKD: [0x2291, 0x0338] }, +{ source: [0x22E3], NFC: [0x22E3], NFD: [0x2292, 0x0338], NFKC: [0x22E3], NFKD: [0x2292, 0x0338] }, +{ source: [0x22EA], NFC: [0x22EA], NFD: [0x22B2, 0x0338], NFKC: [0x22EA], NFKD: [0x22B2, 0x0338] }, +{ source: [0x22EB], NFC: [0x22EB], NFD: [0x22B3, 0x0338], NFKC: [0x22EB], NFKD: [0x22B3, 0x0338] }, +{ source: [0x22EC], NFC: [0x22EC], NFD: [0x22B4, 0x0338], NFKC: [0x22EC], NFKD: [0x22B4, 0x0338] }, +{ source: [0x22ED], NFC: [0x22ED], NFD: [0x22B5, 0x0338], NFKC: [0x22ED], NFKD: [0x22B5, 0x0338] }, +{ source: [0x2329], NFC: [0x3008], NFD: [0x3008], NFKC: [0x3008], NFKD: [0x3008] }, +{ source: [0x232A], NFC: [0x3009], NFD: [0x3009], NFKC: [0x3009], NFKD: [0x3009] }, +{ source: [0x2460], NFC: [0x2460], NFD: [0x2460], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x2461], NFC: [0x2461], NFD: [0x2461], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x2462], NFC: [0x2462], NFD: [0x2462], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x2463], NFC: [0x2463], NFD: [0x2463], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x2464], NFC: [0x2464], NFD: [0x2464], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x2465], NFC: [0x2465], NFD: [0x2465], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x2466], NFC: [0x2466], NFD: [0x2466], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x2467], NFC: [0x2467], NFD: [0x2467], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x2468], NFC: [0x2468], NFD: [0x2468], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x2469], NFC: [0x2469], NFD: [0x2469], NFKC: [0x0031, 0x0030], NFKD: [0x0031, 0x0030] }, +{ source: [0x246A], NFC: [0x246A], NFD: [0x246A], NFKC: [0x0031, 0x0031], NFKD: [0x0031, 0x0031] }, +{ source: [0x246B], NFC: [0x246B], NFD: [0x246B], NFKC: [0x0031, 0x0032], NFKD: [0x0031, 0x0032] }, +{ source: [0x246C], NFC: [0x246C], NFD: [0x246C], NFKC: [0x0031, 0x0033], NFKD: [0x0031, 0x0033] }, +{ source: [0x246D], NFC: [0x246D], NFD: [0x246D], NFKC: [0x0031, 0x0034], NFKD: [0x0031, 0x0034] }, +{ source: [0x246E], NFC: [0x246E], NFD: [0x246E], NFKC: [0x0031, 0x0035], NFKD: [0x0031, 0x0035] }, +{ source: [0x246F], NFC: [0x246F], NFD: [0x246F], NFKC: [0x0031, 0x0036], NFKD: [0x0031, 0x0036] }, +{ source: [0x2470], NFC: [0x2470], NFD: [0x2470], NFKC: [0x0031, 0x0037], NFKD: [0x0031, 0x0037] }, +{ source: [0x2471], NFC: [0x2471], NFD: [0x2471], NFKC: [0x0031, 0x0038], NFKD: [0x0031, 0x0038] }, +{ source: [0x2472], NFC: [0x2472], NFD: [0x2472], NFKC: [0x0031, 0x0039], NFKD: [0x0031, 0x0039] }, +{ source: [0x2473], NFC: [0x2473], NFD: [0x2473], NFKC: [0x0032, 0x0030], NFKD: [0x0032, 0x0030] }, +{ source: [0x2474], NFC: [0x2474], NFD: [0x2474], NFKC: [0x0028, 0x0031, 0x0029], NFKD: [0x0028, 0x0031, 0x0029] }, +{ source: [0x2475], NFC: [0x2475], NFD: [0x2475], NFKC: [0x0028, 0x0032, 0x0029], NFKD: [0x0028, 0x0032, 0x0029] }, +{ source: [0x2476], NFC: [0x2476], NFD: [0x2476], NFKC: [0x0028, 0x0033, 0x0029], NFKD: [0x0028, 0x0033, 0x0029] }, +{ source: [0x2477], NFC: [0x2477], NFD: [0x2477], NFKC: [0x0028, 0x0034, 0x0029], NFKD: [0x0028, 0x0034, 0x0029] }, +{ source: [0x2478], NFC: [0x2478], NFD: [0x2478], NFKC: [0x0028, 0x0035, 0x0029], NFKD: [0x0028, 0x0035, 0x0029] }, +{ source: [0x2479], NFC: [0x2479], NFD: [0x2479], NFKC: [0x0028, 0x0036, 0x0029], NFKD: [0x0028, 0x0036, 0x0029] }, +{ source: [0x247A], NFC: [0x247A], NFD: [0x247A], NFKC: [0x0028, 0x0037, 0x0029], NFKD: [0x0028, 0x0037, 0x0029] }, +{ source: [0x247B], NFC: [0x247B], NFD: [0x247B], NFKC: [0x0028, 0x0038, 0x0029], NFKD: [0x0028, 0x0038, 0x0029] }, +{ source: [0x247C], NFC: [0x247C], NFD: [0x247C], NFKC: [0x0028, 0x0039, 0x0029], NFKD: [0x0028, 0x0039, 0x0029] }, +{ source: [0x247D], NFC: [0x247D], NFD: [0x247D], NFKC: [0x0028, 0x0031, 0x0030, 0x0029], NFKD: [0x0028, 0x0031, 0x0030, 0x0029] }, +{ source: [0x247E], NFC: [0x247E], NFD: [0x247E], NFKC: [0x0028, 0x0031, 0x0031, 0x0029], NFKD: [0x0028, 0x0031, 0x0031, 0x0029] }, +{ source: [0x247F], NFC: [0x247F], NFD: [0x247F], NFKC: [0x0028, 0x0031, 0x0032, 0x0029], NFKD: [0x0028, 0x0031, 0x0032, 0x0029] }, +{ source: [0x2480], NFC: [0x2480], NFD: [0x2480], NFKC: [0x0028, 0x0031, 0x0033, 0x0029], NFKD: [0x0028, 0x0031, 0x0033, 0x0029] }, +{ source: [0x2481], NFC: [0x2481], NFD: [0x2481], NFKC: [0x0028, 0x0031, 0x0034, 0x0029], NFKD: [0x0028, 0x0031, 0x0034, 0x0029] }, +{ source: [0x2482], NFC: [0x2482], NFD: [0x2482], NFKC: [0x0028, 0x0031, 0x0035, 0x0029], NFKD: [0x0028, 0x0031, 0x0035, 0x0029] }, +{ source: [0x2483], NFC: [0x2483], NFD: [0x2483], NFKC: [0x0028, 0x0031, 0x0036, 0x0029], NFKD: [0x0028, 0x0031, 0x0036, 0x0029] }, +{ source: [0x2484], NFC: [0x2484], NFD: [0x2484], NFKC: [0x0028, 0x0031, 0x0037, 0x0029], NFKD: [0x0028, 0x0031, 0x0037, 0x0029] }, +{ source: [0x2485], NFC: [0x2485], NFD: [0x2485], NFKC: [0x0028, 0x0031, 0x0038, 0x0029], NFKD: [0x0028, 0x0031, 0x0038, 0x0029] }, +{ source: [0x2486], NFC: [0x2486], NFD: [0x2486], NFKC: [0x0028, 0x0031, 0x0039, 0x0029], NFKD: [0x0028, 0x0031, 0x0039, 0x0029] }, +{ source: [0x2487], NFC: [0x2487], NFD: [0x2487], NFKC: [0x0028, 0x0032, 0x0030, 0x0029], NFKD: [0x0028, 0x0032, 0x0030, 0x0029] }, +{ source: [0x2488], NFC: [0x2488], NFD: [0x2488], NFKC: [0x0031, 0x002E], NFKD: [0x0031, 0x002E] }, +{ source: [0x2489], NFC: [0x2489], NFD: [0x2489], NFKC: [0x0032, 0x002E], NFKD: [0x0032, 0x002E] }, +{ source: [0x248A], NFC: [0x248A], NFD: [0x248A], NFKC: [0x0033, 0x002E], NFKD: [0x0033, 0x002E] }, +{ source: [0x248B], NFC: [0x248B], NFD: [0x248B], NFKC: [0x0034, 0x002E], NFKD: [0x0034, 0x002E] }, +{ source: [0x248C], NFC: [0x248C], NFD: [0x248C], NFKC: [0x0035, 0x002E], NFKD: [0x0035, 0x002E] }, +{ source: [0x248D], NFC: [0x248D], NFD: [0x248D], NFKC: [0x0036, 0x002E], NFKD: [0x0036, 0x002E] }, +{ source: [0x248E], NFC: [0x248E], NFD: [0x248E], NFKC: [0x0037, 0x002E], NFKD: [0x0037, 0x002E] }, +{ source: [0x248F], NFC: [0x248F], NFD: [0x248F], NFKC: [0x0038, 0x002E], NFKD: [0x0038, 0x002E] }, +{ source: [0x2490], NFC: [0x2490], NFD: [0x2490], NFKC: [0x0039, 0x002E], NFKD: [0x0039, 0x002E] }, +{ source: [0x2491], NFC: [0x2491], NFD: [0x2491], NFKC: [0x0031, 0x0030, 0x002E], NFKD: [0x0031, 0x0030, 0x002E] }, +{ source: [0x2492], NFC: [0x2492], NFD: [0x2492], NFKC: [0x0031, 0x0031, 0x002E], NFKD: [0x0031, 0x0031, 0x002E] }, +{ source: [0x2493], NFC: [0x2493], NFD: [0x2493], NFKC: [0x0031, 0x0032, 0x002E], NFKD: [0x0031, 0x0032, 0x002E] }, +{ source: [0x2494], NFC: [0x2494], NFD: [0x2494], NFKC: [0x0031, 0x0033, 0x002E], NFKD: [0x0031, 0x0033, 0x002E] }, +{ source: [0x2495], NFC: [0x2495], NFD: [0x2495], NFKC: [0x0031, 0x0034, 0x002E], NFKD: [0x0031, 0x0034, 0x002E] }, +{ source: [0x2496], NFC: [0x2496], NFD: [0x2496], NFKC: [0x0031, 0x0035, 0x002E], NFKD: [0x0031, 0x0035, 0x002E] }, +{ source: [0x2497], NFC: [0x2497], NFD: [0x2497], NFKC: [0x0031, 0x0036, 0x002E], NFKD: [0x0031, 0x0036, 0x002E] }, +{ source: [0x2498], NFC: [0x2498], NFD: [0x2498], NFKC: [0x0031, 0x0037, 0x002E], NFKD: [0x0031, 0x0037, 0x002E] }, +{ source: [0x2499], NFC: [0x2499], NFD: [0x2499], NFKC: [0x0031, 0x0038, 0x002E], NFKD: [0x0031, 0x0038, 0x002E] }, +{ source: [0x249A], NFC: [0x249A], NFD: [0x249A], NFKC: [0x0031, 0x0039, 0x002E], NFKD: [0x0031, 0x0039, 0x002E] }, +{ source: [0x249B], NFC: [0x249B], NFD: [0x249B], NFKC: [0x0032, 0x0030, 0x002E], NFKD: [0x0032, 0x0030, 0x002E] }, +{ source: [0x249C], NFC: [0x249C], NFD: [0x249C], NFKC: [0x0028, 0x0061, 0x0029], NFKD: [0x0028, 0x0061, 0x0029] }, +{ source: [0x249D], NFC: [0x249D], NFD: [0x249D], NFKC: [0x0028, 0x0062, 0x0029], NFKD: [0x0028, 0x0062, 0x0029] }, +{ source: [0x249E], NFC: [0x249E], NFD: [0x249E], NFKC: [0x0028, 0x0063, 0x0029], NFKD: [0x0028, 0x0063, 0x0029] }, +{ source: [0x249F], NFC: [0x249F], NFD: [0x249F], NFKC: [0x0028, 0x0064, 0x0029], NFKD: [0x0028, 0x0064, 0x0029] }, +{ source: [0x24A0], NFC: [0x24A0], NFD: [0x24A0], NFKC: [0x0028, 0x0065, 0x0029], NFKD: [0x0028, 0x0065, 0x0029] }, +{ source: [0x24A1], NFC: [0x24A1], NFD: [0x24A1], NFKC: [0x0028, 0x0066, 0x0029], NFKD: [0x0028, 0x0066, 0x0029] }, +{ source: [0x24A2], NFC: [0x24A2], NFD: [0x24A2], NFKC: [0x0028, 0x0067, 0x0029], NFKD: [0x0028, 0x0067, 0x0029] }, +{ source: [0x24A3], NFC: [0x24A3], NFD: [0x24A3], NFKC: [0x0028, 0x0068, 0x0029], NFKD: [0x0028, 0x0068, 0x0029] }, +{ source: [0x24A4], NFC: [0x24A4], NFD: [0x24A4], NFKC: [0x0028, 0x0069, 0x0029], NFKD: [0x0028, 0x0069, 0x0029] }, +{ source: [0x24A5], NFC: [0x24A5], NFD: [0x24A5], NFKC: [0x0028, 0x006A, 0x0029], NFKD: [0x0028, 0x006A, 0x0029] }, +{ source: [0x24A6], NFC: [0x24A6], NFD: [0x24A6], NFKC: [0x0028, 0x006B, 0x0029], NFKD: [0x0028, 0x006B, 0x0029] }, +{ source: [0x24A7], NFC: [0x24A7], NFD: [0x24A7], NFKC: [0x0028, 0x006C, 0x0029], NFKD: [0x0028, 0x006C, 0x0029] }, +{ source: [0x24A8], NFC: [0x24A8], NFD: [0x24A8], NFKC: [0x0028, 0x006D, 0x0029], NFKD: [0x0028, 0x006D, 0x0029] }, +{ source: [0x24A9], NFC: [0x24A9], NFD: [0x24A9], NFKC: [0x0028, 0x006E, 0x0029], NFKD: [0x0028, 0x006E, 0x0029] }, +{ source: [0x24AA], NFC: [0x24AA], NFD: [0x24AA], NFKC: [0x0028, 0x006F, 0x0029], NFKD: [0x0028, 0x006F, 0x0029] }, +{ source: [0x24AB], NFC: [0x24AB], NFD: [0x24AB], NFKC: [0x0028, 0x0070, 0x0029], NFKD: [0x0028, 0x0070, 0x0029] }, +{ source: [0x24AC], NFC: [0x24AC], NFD: [0x24AC], NFKC: [0x0028, 0x0071, 0x0029], NFKD: [0x0028, 0x0071, 0x0029] }, +{ source: [0x24AD], NFC: [0x24AD], NFD: [0x24AD], NFKC: [0x0028, 0x0072, 0x0029], NFKD: [0x0028, 0x0072, 0x0029] }, +{ source: [0x24AE], NFC: [0x24AE], NFD: [0x24AE], NFKC: [0x0028, 0x0073, 0x0029], NFKD: [0x0028, 0x0073, 0x0029] }, +{ source: [0x24AF], NFC: [0x24AF], NFD: [0x24AF], NFKC: [0x0028, 0x0074, 0x0029], NFKD: [0x0028, 0x0074, 0x0029] }, +{ source: [0x24B0], NFC: [0x24B0], NFD: [0x24B0], NFKC: [0x0028, 0x0075, 0x0029], NFKD: [0x0028, 0x0075, 0x0029] }, +{ source: [0x24B1], NFC: [0x24B1], NFD: [0x24B1], NFKC: [0x0028, 0x0076, 0x0029], NFKD: [0x0028, 0x0076, 0x0029] }, +{ source: [0x24B2], NFC: [0x24B2], NFD: [0x24B2], NFKC: [0x0028, 0x0077, 0x0029], NFKD: [0x0028, 0x0077, 0x0029] }, +{ source: [0x24B3], NFC: [0x24B3], NFD: [0x24B3], NFKC: [0x0028, 0x0078, 0x0029], NFKD: [0x0028, 0x0078, 0x0029] }, +{ source: [0x24B4], NFC: [0x24B4], NFD: [0x24B4], NFKC: [0x0028, 0x0079, 0x0029], NFKD: [0x0028, 0x0079, 0x0029] }, +{ source: [0x24B5], NFC: [0x24B5], NFD: [0x24B5], NFKC: [0x0028, 0x007A, 0x0029], NFKD: [0x0028, 0x007A, 0x0029] }, +{ source: [0x24B6], NFC: [0x24B6], NFD: [0x24B6], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x24B7], NFC: [0x24B7], NFD: [0x24B7], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x24B8], NFC: [0x24B8], NFD: [0x24B8], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x24B9], NFC: [0x24B9], NFD: [0x24B9], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x24BA], NFC: [0x24BA], NFD: [0x24BA], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x24BB], NFC: [0x24BB], NFD: [0x24BB], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x24BC], NFC: [0x24BC], NFD: [0x24BC], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x24BD], NFC: [0x24BD], NFD: [0x24BD], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x24BE], NFC: [0x24BE], NFD: [0x24BE], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x24BF], NFC: [0x24BF], NFD: [0x24BF], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x24C0], NFC: [0x24C0], NFD: [0x24C0], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x24C1], NFC: [0x24C1], NFD: [0x24C1], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x24C2], NFC: [0x24C2], NFD: [0x24C2], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x24C3], NFC: [0x24C3], NFD: [0x24C3], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x24C4], NFC: [0x24C4], NFD: [0x24C4], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x24C5], NFC: [0x24C5], NFD: [0x24C5], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x24C6], NFC: [0x24C6], NFD: [0x24C6], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x24C7], NFC: [0x24C7], NFD: [0x24C7], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x24C8], NFC: [0x24C8], NFD: [0x24C8], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x24C9], NFC: [0x24C9], NFD: [0x24C9], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x24CA], NFC: [0x24CA], NFD: [0x24CA], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x24CB], NFC: [0x24CB], NFD: [0x24CB], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x24CC], NFC: [0x24CC], NFD: [0x24CC], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x24CD], NFC: [0x24CD], NFD: [0x24CD], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x24CE], NFC: [0x24CE], NFD: [0x24CE], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x24CF], NFC: [0x24CF], NFD: [0x24CF], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x24D0], NFC: [0x24D0], NFD: [0x24D0], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x24D1], NFC: [0x24D1], NFD: [0x24D1], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x24D2], NFC: [0x24D2], NFD: [0x24D2], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x24D3], NFC: [0x24D3], NFD: [0x24D3], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x24D4], NFC: [0x24D4], NFD: [0x24D4], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x24D5], NFC: [0x24D5], NFD: [0x24D5], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x24D6], NFC: [0x24D6], NFD: [0x24D6], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x24D7], NFC: [0x24D7], NFD: [0x24D7], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x24D8], NFC: [0x24D8], NFD: [0x24D8], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x24D9], NFC: [0x24D9], NFD: [0x24D9], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x24DA], NFC: [0x24DA], NFD: [0x24DA], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x24DB], NFC: [0x24DB], NFD: [0x24DB], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x24DC], NFC: [0x24DC], NFD: [0x24DC], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x24DD], NFC: [0x24DD], NFD: [0x24DD], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x24DE], NFC: [0x24DE], NFD: [0x24DE], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x24DF], NFC: [0x24DF], NFD: [0x24DF], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x24E0], NFC: [0x24E0], NFD: [0x24E0], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x24E1], NFC: [0x24E1], NFD: [0x24E1], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x24E2], NFC: [0x24E2], NFD: [0x24E2], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x24E3], NFC: [0x24E3], NFD: [0x24E3], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x24E4], NFC: [0x24E4], NFD: [0x24E4], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x24E5], NFC: [0x24E5], NFD: [0x24E5], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x24E6], NFC: [0x24E6], NFD: [0x24E6], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x24E7], NFC: [0x24E7], NFD: [0x24E7], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x24E8], NFC: [0x24E8], NFD: [0x24E8], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x24E9], NFC: [0x24E9], NFD: [0x24E9], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x24EA], NFC: [0x24EA], NFD: [0x24EA], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x2A0C], NFC: [0x2A0C], NFD: [0x2A0C], NFKC: [0x222B, 0x222B, 0x222B, 0x222B], NFKD: [0x222B, 0x222B, 0x222B, 0x222B] }, +{ source: [0x2A74], NFC: [0x2A74], NFD: [0x2A74], NFKC: [0x003A, 0x003A, 0x003D], NFKD: [0x003A, 0x003A, 0x003D] }, +{ source: [0x2A75], NFC: [0x2A75], NFD: [0x2A75], NFKC: [0x003D, 0x003D], NFKD: [0x003D, 0x003D] }, +{ source: [0x2A76], NFC: [0x2A76], NFD: [0x2A76], NFKC: [0x003D, 0x003D, 0x003D], NFKD: [0x003D, 0x003D, 0x003D] }, +{ source: [0x2ADC], NFC: [0x2ADD, 0x0338], NFD: [0x2ADD, 0x0338], NFKC: [0x2ADD, 0x0338], NFKD: [0x2ADD, 0x0338] }, +{ source: [0x2C7C], NFC: [0x2C7C], NFD: [0x2C7C], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x2C7D], NFC: [0x2C7D], NFD: [0x2C7D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x2D6F], NFC: [0x2D6F], NFD: [0x2D6F], NFKC: [0x2D61], NFKD: [0x2D61] }, +{ source: [0x2E9F], NFC: [0x2E9F], NFD: [0x2E9F], NFKC: [0x6BCD], NFKD: [0x6BCD] }, +{ source: [0x2EF3], NFC: [0x2EF3], NFD: [0x2EF3], NFKC: [0x9F9F], NFKD: [0x9F9F] }, +{ source: [0x2F00], NFC: [0x2F00], NFD: [0x2F00], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x2F01], NFC: [0x2F01], NFD: [0x2F01], NFKC: [0x4E28], NFKD: [0x4E28] }, +{ source: [0x2F02], NFC: [0x2F02], NFD: [0x2F02], NFKC: [0x4E36], NFKD: [0x4E36] }, +{ source: [0x2F03], NFC: [0x2F03], NFD: [0x2F03], NFKC: [0x4E3F], NFKD: [0x4E3F] }, +{ source: [0x2F04], NFC: [0x2F04], NFD: [0x2F04], NFKC: [0x4E59], NFKD: [0x4E59] }, +{ source: [0x2F05], NFC: [0x2F05], NFD: [0x2F05], NFKC: [0x4E85], NFKD: [0x4E85] }, +{ source: [0x2F06], NFC: [0x2F06], NFD: [0x2F06], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x2F07], NFC: [0x2F07], NFD: [0x2F07], NFKC: [0x4EA0], NFKD: [0x4EA0] }, +{ source: [0x2F08], NFC: [0x2F08], NFD: [0x2F08], NFKC: [0x4EBA], NFKD: [0x4EBA] }, +{ source: [0x2F09], NFC: [0x2F09], NFD: [0x2F09], NFKC: [0x513F], NFKD: [0x513F] }, +{ source: [0x2F0A], NFC: [0x2F0A], NFD: [0x2F0A], NFKC: [0x5165], NFKD: [0x5165] }, +{ source: [0x2F0B], NFC: [0x2F0B], NFD: [0x2F0B], NFKC: [0x516B], NFKD: [0x516B] }, +{ source: [0x2F0C], NFC: [0x2F0C], NFD: [0x2F0C], NFKC: [0x5182], NFKD: [0x5182] }, +{ source: [0x2F0D], NFC: [0x2F0D], NFD: [0x2F0D], NFKC: [0x5196], NFKD: [0x5196] }, +{ source: [0x2F0E], NFC: [0x2F0E], NFD: [0x2F0E], NFKC: [0x51AB], NFKD: [0x51AB] }, +{ source: [0x2F0F], NFC: [0x2F0F], NFD: [0x2F0F], NFKC: [0x51E0], NFKD: [0x51E0] }, +{ source: [0x2F10], NFC: [0x2F10], NFD: [0x2F10], NFKC: [0x51F5], NFKD: [0x51F5] }, +{ source: [0x2F11], NFC: [0x2F11], NFD: [0x2F11], NFKC: [0x5200], NFKD: [0x5200] }, +{ source: [0x2F12], NFC: [0x2F12], NFD: [0x2F12], NFKC: [0x529B], NFKD: [0x529B] }, +{ source: [0x2F13], NFC: [0x2F13], NFD: [0x2F13], NFKC: [0x52F9], NFKD: [0x52F9] }, +{ source: [0x2F14], NFC: [0x2F14], NFD: [0x2F14], NFKC: [0x5315], NFKD: [0x5315] }, +{ source: [0x2F15], NFC: [0x2F15], NFD: [0x2F15], NFKC: [0x531A], NFKD: [0x531A] }, +{ source: [0x2F16], NFC: [0x2F16], NFD: [0x2F16], NFKC: [0x5338], NFKD: [0x5338] }, +{ source: [0x2F17], NFC: [0x2F17], NFD: [0x2F17], NFKC: [0x5341], NFKD: [0x5341] }, +{ source: [0x2F18], NFC: [0x2F18], NFD: [0x2F18], NFKC: [0x535C], NFKD: [0x535C] }, +{ source: [0x2F19], NFC: [0x2F19], NFD: [0x2F19], NFKC: [0x5369], NFKD: [0x5369] }, +{ source: [0x2F1A], NFC: [0x2F1A], NFD: [0x2F1A], NFKC: [0x5382], NFKD: [0x5382] }, +{ source: [0x2F1B], NFC: [0x2F1B], NFD: [0x2F1B], NFKC: [0x53B6], NFKD: [0x53B6] }, +{ source: [0x2F1C], NFC: [0x2F1C], NFD: [0x2F1C], NFKC: [0x53C8], NFKD: [0x53C8] }, +{ source: [0x2F1D], NFC: [0x2F1D], NFD: [0x2F1D], NFKC: [0x53E3], NFKD: [0x53E3] }, +{ source: [0x2F1E], NFC: [0x2F1E], NFD: [0x2F1E], NFKC: [0x56D7], NFKD: [0x56D7] }, +{ source: [0x2F1F], NFC: [0x2F1F], NFD: [0x2F1F], NFKC: [0x571F], NFKD: [0x571F] }, +{ source: [0x2F20], NFC: [0x2F20], NFD: [0x2F20], NFKC: [0x58EB], NFKD: [0x58EB] }, +{ source: [0x2F21], NFC: [0x2F21], NFD: [0x2F21], NFKC: [0x5902], NFKD: [0x5902] }, +{ source: [0x2F22], NFC: [0x2F22], NFD: [0x2F22], NFKC: [0x590A], NFKD: [0x590A] }, +{ source: [0x2F23], NFC: [0x2F23], NFD: [0x2F23], NFKC: [0x5915], NFKD: [0x5915] }, +{ source: [0x2F24], NFC: [0x2F24], NFD: [0x2F24], NFKC: [0x5927], NFKD: [0x5927] }, +{ source: [0x2F25], NFC: [0x2F25], NFD: [0x2F25], NFKC: [0x5973], NFKD: [0x5973] }, +{ source: [0x2F26], NFC: [0x2F26], NFD: [0x2F26], NFKC: [0x5B50], NFKD: [0x5B50] }, +{ source: [0x2F27], NFC: [0x2F27], NFD: [0x2F27], NFKC: [0x5B80], NFKD: [0x5B80] }, +{ source: [0x2F28], NFC: [0x2F28], NFD: [0x2F28], NFKC: [0x5BF8], NFKD: [0x5BF8] }, +{ source: [0x2F29], NFC: [0x2F29], NFD: [0x2F29], NFKC: [0x5C0F], NFKD: [0x5C0F] }, +{ source: [0x2F2A], NFC: [0x2F2A], NFD: [0x2F2A], NFKC: [0x5C22], NFKD: [0x5C22] }, +{ source: [0x2F2B], NFC: [0x2F2B], NFD: [0x2F2B], NFKC: [0x5C38], NFKD: [0x5C38] }, +{ source: [0x2F2C], NFC: [0x2F2C], NFD: [0x2F2C], NFKC: [0x5C6E], NFKD: [0x5C6E] }, +{ source: [0x2F2D], NFC: [0x2F2D], NFD: [0x2F2D], NFKC: [0x5C71], NFKD: [0x5C71] }, +{ source: [0x2F2E], NFC: [0x2F2E], NFD: [0x2F2E], NFKC: [0x5DDB], NFKD: [0x5DDB] }, +{ source: [0x2F2F], NFC: [0x2F2F], NFD: [0x2F2F], NFKC: [0x5DE5], NFKD: [0x5DE5] }, +{ source: [0x2F30], NFC: [0x2F30], NFD: [0x2F30], NFKC: [0x5DF1], NFKD: [0x5DF1] }, +{ source: [0x2F31], NFC: [0x2F31], NFD: [0x2F31], NFKC: [0x5DFE], NFKD: [0x5DFE] }, +{ source: [0x2F32], NFC: [0x2F32], NFD: [0x2F32], NFKC: [0x5E72], NFKD: [0x5E72] }, +{ source: [0x2F33], NFC: [0x2F33], NFD: [0x2F33], NFKC: [0x5E7A], NFKD: [0x5E7A] }, +{ source: [0x2F34], NFC: [0x2F34], NFD: [0x2F34], NFKC: [0x5E7F], NFKD: [0x5E7F] }, +{ source: [0x2F35], NFC: [0x2F35], NFD: [0x2F35], NFKC: [0x5EF4], NFKD: [0x5EF4] }, +{ source: [0x2F36], NFC: [0x2F36], NFD: [0x2F36], NFKC: [0x5EFE], NFKD: [0x5EFE] }, +{ source: [0x2F37], NFC: [0x2F37], NFD: [0x2F37], NFKC: [0x5F0B], NFKD: [0x5F0B] }, +{ source: [0x2F38], NFC: [0x2F38], NFD: [0x2F38], NFKC: [0x5F13], NFKD: [0x5F13] }, +{ source: [0x2F39], NFC: [0x2F39], NFD: [0x2F39], NFKC: [0x5F50], NFKD: [0x5F50] }, +{ source: [0x2F3A], NFC: [0x2F3A], NFD: [0x2F3A], NFKC: [0x5F61], NFKD: [0x5F61] }, +{ source: [0x2F3B], NFC: [0x2F3B], NFD: [0x2F3B], NFKC: [0x5F73], NFKD: [0x5F73] }, +{ source: [0x2F3C], NFC: [0x2F3C], NFD: [0x2F3C], NFKC: [0x5FC3], NFKD: [0x5FC3] }, +{ source: [0x2F3D], NFC: [0x2F3D], NFD: [0x2F3D], NFKC: [0x6208], NFKD: [0x6208] }, +{ source: [0x2F3E], NFC: [0x2F3E], NFD: [0x2F3E], NFKC: [0x6236], NFKD: [0x6236] }, +{ source: [0x2F3F], NFC: [0x2F3F], NFD: [0x2F3F], NFKC: [0x624B], NFKD: [0x624B] }, +{ source: [0x2F40], NFC: [0x2F40], NFD: [0x2F40], NFKC: [0x652F], NFKD: [0x652F] }, +{ source: [0x2F41], NFC: [0x2F41], NFD: [0x2F41], NFKC: [0x6534], NFKD: [0x6534] }, +{ source: [0x2F42], NFC: [0x2F42], NFD: [0x2F42], NFKC: [0x6587], NFKD: [0x6587] }, +{ source: [0x2F43], NFC: [0x2F43], NFD: [0x2F43], NFKC: [0x6597], NFKD: [0x6597] }, +{ source: [0x2F44], NFC: [0x2F44], NFD: [0x2F44], NFKC: [0x65A4], NFKD: [0x65A4] }, +{ source: [0x2F45], NFC: [0x2F45], NFD: [0x2F45], NFKC: [0x65B9], NFKD: [0x65B9] }, +{ source: [0x2F46], NFC: [0x2F46], NFD: [0x2F46], NFKC: [0x65E0], NFKD: [0x65E0] }, +{ source: [0x2F47], NFC: [0x2F47], NFD: [0x2F47], NFKC: [0x65E5], NFKD: [0x65E5] }, +{ source: [0x2F48], NFC: [0x2F48], NFD: [0x2F48], NFKC: [0x66F0], NFKD: [0x66F0] }, +{ source: [0x2F49], NFC: [0x2F49], NFD: [0x2F49], NFKC: [0x6708], NFKD: [0x6708] }, +{ source: [0x2F4A], NFC: [0x2F4A], NFD: [0x2F4A], NFKC: [0x6728], NFKD: [0x6728] }, +{ source: [0x2F4B], NFC: [0x2F4B], NFD: [0x2F4B], NFKC: [0x6B20], NFKD: [0x6B20] }, +{ source: [0x2F4C], NFC: [0x2F4C], NFD: [0x2F4C], NFKC: [0x6B62], NFKD: [0x6B62] }, +{ source: [0x2F4D], NFC: [0x2F4D], NFD: [0x2F4D], NFKC: [0x6B79], NFKD: [0x6B79] }, +{ source: [0x2F4E], NFC: [0x2F4E], NFD: [0x2F4E], NFKC: [0x6BB3], NFKD: [0x6BB3] }, +{ source: [0x2F4F], NFC: [0x2F4F], NFD: [0x2F4F], NFKC: [0x6BCB], NFKD: [0x6BCB] }, +{ source: [0x2F50], NFC: [0x2F50], NFD: [0x2F50], NFKC: [0x6BD4], NFKD: [0x6BD4] }, +{ source: [0x2F51], NFC: [0x2F51], NFD: [0x2F51], NFKC: [0x6BDB], NFKD: [0x6BDB] }, +{ source: [0x2F52], NFC: [0x2F52], NFD: [0x2F52], NFKC: [0x6C0F], NFKD: [0x6C0F] }, +{ source: [0x2F53], NFC: [0x2F53], NFD: [0x2F53], NFKC: [0x6C14], NFKD: [0x6C14] }, +{ source: [0x2F54], NFC: [0x2F54], NFD: [0x2F54], NFKC: [0x6C34], NFKD: [0x6C34] }, +{ source: [0x2F55], NFC: [0x2F55], NFD: [0x2F55], NFKC: [0x706B], NFKD: [0x706B] }, +{ source: [0x2F56], NFC: [0x2F56], NFD: [0x2F56], NFKC: [0x722A], NFKD: [0x722A] }, +{ source: [0x2F57], NFC: [0x2F57], NFD: [0x2F57], NFKC: [0x7236], NFKD: [0x7236] }, +{ source: [0x2F58], NFC: [0x2F58], NFD: [0x2F58], NFKC: [0x723B], NFKD: [0x723B] }, +{ source: [0x2F59], NFC: [0x2F59], NFD: [0x2F59], NFKC: [0x723F], NFKD: [0x723F] }, +{ source: [0x2F5A], NFC: [0x2F5A], NFD: [0x2F5A], NFKC: [0x7247], NFKD: [0x7247] }, +{ source: [0x2F5B], NFC: [0x2F5B], NFD: [0x2F5B], NFKC: [0x7259], NFKD: [0x7259] }, +{ source: [0x2F5C], NFC: [0x2F5C], NFD: [0x2F5C], NFKC: [0x725B], NFKD: [0x725B] }, +{ source: [0x2F5D], NFC: [0x2F5D], NFD: [0x2F5D], NFKC: [0x72AC], NFKD: [0x72AC] }, +{ source: [0x2F5E], NFC: [0x2F5E], NFD: [0x2F5E], NFKC: [0x7384], NFKD: [0x7384] }, +{ source: [0x2F5F], NFC: [0x2F5F], NFD: [0x2F5F], NFKC: [0x7389], NFKD: [0x7389] }, +{ source: [0x2F60], NFC: [0x2F60], NFD: [0x2F60], NFKC: [0x74DC], NFKD: [0x74DC] }, +{ source: [0x2F61], NFC: [0x2F61], NFD: [0x2F61], NFKC: [0x74E6], NFKD: [0x74E6] }, +{ source: [0x2F62], NFC: [0x2F62], NFD: [0x2F62], NFKC: [0x7518], NFKD: [0x7518] }, +{ source: [0x2F63], NFC: [0x2F63], NFD: [0x2F63], NFKC: [0x751F], NFKD: [0x751F] }, +{ source: [0x2F64], NFC: [0x2F64], NFD: [0x2F64], NFKC: [0x7528], NFKD: [0x7528] }, +{ source: [0x2F65], NFC: [0x2F65], NFD: [0x2F65], NFKC: [0x7530], NFKD: [0x7530] }, +{ source: [0x2F66], NFC: [0x2F66], NFD: [0x2F66], NFKC: [0x758B], NFKD: [0x758B] }, +{ source: [0x2F67], NFC: [0x2F67], NFD: [0x2F67], NFKC: [0x7592], NFKD: [0x7592] }, +{ source: [0x2F68], NFC: [0x2F68], NFD: [0x2F68], NFKC: [0x7676], NFKD: [0x7676] }, +{ source: [0x2F69], NFC: [0x2F69], NFD: [0x2F69], NFKC: [0x767D], NFKD: [0x767D] }, +{ source: [0x2F6A], NFC: [0x2F6A], NFD: [0x2F6A], NFKC: [0x76AE], NFKD: [0x76AE] }, +{ source: [0x2F6B], NFC: [0x2F6B], NFD: [0x2F6B], NFKC: [0x76BF], NFKD: [0x76BF] }, +{ source: [0x2F6C], NFC: [0x2F6C], NFD: [0x2F6C], NFKC: [0x76EE], NFKD: [0x76EE] }, +{ source: [0x2F6D], NFC: [0x2F6D], NFD: [0x2F6D], NFKC: [0x77DB], NFKD: [0x77DB] }, +{ source: [0x2F6E], NFC: [0x2F6E], NFD: [0x2F6E], NFKC: [0x77E2], NFKD: [0x77E2] }, +{ source: [0x2F6F], NFC: [0x2F6F], NFD: [0x2F6F], NFKC: [0x77F3], NFKD: [0x77F3] }, +{ source: [0x2F70], NFC: [0x2F70], NFD: [0x2F70], NFKC: [0x793A], NFKD: [0x793A] }, +{ source: [0x2F71], NFC: [0x2F71], NFD: [0x2F71], NFKC: [0x79B8], NFKD: [0x79B8] }, +{ source: [0x2F72], NFC: [0x2F72], NFD: [0x2F72], NFKC: [0x79BE], NFKD: [0x79BE] }, +{ source: [0x2F73], NFC: [0x2F73], NFD: [0x2F73], NFKC: [0x7A74], NFKD: [0x7A74] }, +{ source: [0x2F74], NFC: [0x2F74], NFD: [0x2F74], NFKC: [0x7ACB], NFKD: [0x7ACB] }, +{ source: [0x2F75], NFC: [0x2F75], NFD: [0x2F75], NFKC: [0x7AF9], NFKD: [0x7AF9] }, +{ source: [0x2F76], NFC: [0x2F76], NFD: [0x2F76], NFKC: [0x7C73], NFKD: [0x7C73] }, +{ source: [0x2F77], NFC: [0x2F77], NFD: [0x2F77], NFKC: [0x7CF8], NFKD: [0x7CF8] }, +{ source: [0x2F78], NFC: [0x2F78], NFD: [0x2F78], NFKC: [0x7F36], NFKD: [0x7F36] }, +{ source: [0x2F79], NFC: [0x2F79], NFD: [0x2F79], NFKC: [0x7F51], NFKD: [0x7F51] }, +{ source: [0x2F7A], NFC: [0x2F7A], NFD: [0x2F7A], NFKC: [0x7F8A], NFKD: [0x7F8A] }, +{ source: [0x2F7B], NFC: [0x2F7B], NFD: [0x2F7B], NFKC: [0x7FBD], NFKD: [0x7FBD] }, +{ source: [0x2F7C], NFC: [0x2F7C], NFD: [0x2F7C], NFKC: [0x8001], NFKD: [0x8001] }, +{ source: [0x2F7D], NFC: [0x2F7D], NFD: [0x2F7D], NFKC: [0x800C], NFKD: [0x800C] }, +{ source: [0x2F7E], NFC: [0x2F7E], NFD: [0x2F7E], NFKC: [0x8012], NFKD: [0x8012] }, +{ source: [0x2F7F], NFC: [0x2F7F], NFD: [0x2F7F], NFKC: [0x8033], NFKD: [0x8033] }, +{ source: [0x2F80], NFC: [0x2F80], NFD: [0x2F80], NFKC: [0x807F], NFKD: [0x807F] }, +{ source: [0x2F81], NFC: [0x2F81], NFD: [0x2F81], NFKC: [0x8089], NFKD: [0x8089] }, +{ source: [0x2F82], NFC: [0x2F82], NFD: [0x2F82], NFKC: [0x81E3], NFKD: [0x81E3] }, +{ source: [0x2F83], NFC: [0x2F83], NFD: [0x2F83], NFKC: [0x81EA], NFKD: [0x81EA] }, +{ source: [0x2F84], NFC: [0x2F84], NFD: [0x2F84], NFKC: [0x81F3], NFKD: [0x81F3] }, +{ source: [0x2F85], NFC: [0x2F85], NFD: [0x2F85], NFKC: [0x81FC], NFKD: [0x81FC] }, +{ source: [0x2F86], NFC: [0x2F86], NFD: [0x2F86], NFKC: [0x820C], NFKD: [0x820C] }, +{ source: [0x2F87], NFC: [0x2F87], NFD: [0x2F87], NFKC: [0x821B], NFKD: [0x821B] }, +{ source: [0x2F88], NFC: [0x2F88], NFD: [0x2F88], NFKC: [0x821F], NFKD: [0x821F] }, +{ source: [0x2F89], NFC: [0x2F89], NFD: [0x2F89], NFKC: [0x826E], NFKD: [0x826E] }, +{ source: [0x2F8A], NFC: [0x2F8A], NFD: [0x2F8A], NFKC: [0x8272], NFKD: [0x8272] }, +{ source: [0x2F8B], NFC: [0x2F8B], NFD: [0x2F8B], NFKC: [0x8278], NFKD: [0x8278] }, +{ source: [0x2F8C], NFC: [0x2F8C], NFD: [0x2F8C], NFKC: [0x864D], NFKD: [0x864D] }, +{ source: [0x2F8D], NFC: [0x2F8D], NFD: [0x2F8D], NFKC: [0x866B], NFKD: [0x866B] }, +{ source: [0x2F8E], NFC: [0x2F8E], NFD: [0x2F8E], NFKC: [0x8840], NFKD: [0x8840] }, +{ source: [0x2F8F], NFC: [0x2F8F], NFD: [0x2F8F], NFKC: [0x884C], NFKD: [0x884C] }, +{ source: [0x2F90], NFC: [0x2F90], NFD: [0x2F90], NFKC: [0x8863], NFKD: [0x8863] }, +{ source: [0x2F91], NFC: [0x2F91], NFD: [0x2F91], NFKC: [0x897E], NFKD: [0x897E] }, +{ source: [0x2F92], NFC: [0x2F92], NFD: [0x2F92], NFKC: [0x898B], NFKD: [0x898B] }, +{ source: [0x2F93], NFC: [0x2F93], NFD: [0x2F93], NFKC: [0x89D2], NFKD: [0x89D2] }, +{ source: [0x2F94], NFC: [0x2F94], NFD: [0x2F94], NFKC: [0x8A00], NFKD: [0x8A00] }, +{ source: [0x2F95], NFC: [0x2F95], NFD: [0x2F95], NFKC: [0x8C37], NFKD: [0x8C37] }, +{ source: [0x2F96], NFC: [0x2F96], NFD: [0x2F96], NFKC: [0x8C46], NFKD: [0x8C46] }, +{ source: [0x2F97], NFC: [0x2F97], NFD: [0x2F97], NFKC: [0x8C55], NFKD: [0x8C55] }, +{ source: [0x2F98], NFC: [0x2F98], NFD: [0x2F98], NFKC: [0x8C78], NFKD: [0x8C78] }, +{ source: [0x2F99], NFC: [0x2F99], NFD: [0x2F99], NFKC: [0x8C9D], NFKD: [0x8C9D] }, +{ source: [0x2F9A], NFC: [0x2F9A], NFD: [0x2F9A], NFKC: [0x8D64], NFKD: [0x8D64] }, +{ source: [0x2F9B], NFC: [0x2F9B], NFD: [0x2F9B], NFKC: [0x8D70], NFKD: [0x8D70] }, +{ source: [0x2F9C], NFC: [0x2F9C], NFD: [0x2F9C], NFKC: [0x8DB3], NFKD: [0x8DB3] }, +{ source: [0x2F9D], NFC: [0x2F9D], NFD: [0x2F9D], NFKC: [0x8EAB], NFKD: [0x8EAB] }, +{ source: [0x2F9E], NFC: [0x2F9E], NFD: [0x2F9E], NFKC: [0x8ECA], NFKD: [0x8ECA] }, +{ source: [0x2F9F], NFC: [0x2F9F], NFD: [0x2F9F], NFKC: [0x8F9B], NFKD: [0x8F9B] }, +{ source: [0x2FA0], NFC: [0x2FA0], NFD: [0x2FA0], NFKC: [0x8FB0], NFKD: [0x8FB0] }, +{ source: [0x2FA1], NFC: [0x2FA1], NFD: [0x2FA1], NFKC: [0x8FB5], NFKD: [0x8FB5] }, +{ source: [0x2FA2], NFC: [0x2FA2], NFD: [0x2FA2], NFKC: [0x9091], NFKD: [0x9091] }, +{ source: [0x2FA3], NFC: [0x2FA3], NFD: [0x2FA3], NFKC: [0x9149], NFKD: [0x9149] }, +{ source: [0x2FA4], NFC: [0x2FA4], NFD: [0x2FA4], NFKC: [0x91C6], NFKD: [0x91C6] }, +{ source: [0x2FA5], NFC: [0x2FA5], NFD: [0x2FA5], NFKC: [0x91CC], NFKD: [0x91CC] }, +{ source: [0x2FA6], NFC: [0x2FA6], NFD: [0x2FA6], NFKC: [0x91D1], NFKD: [0x91D1] }, +{ source: [0x2FA7], NFC: [0x2FA7], NFD: [0x2FA7], NFKC: [0x9577], NFKD: [0x9577] }, +{ source: [0x2FA8], NFC: [0x2FA8], NFD: [0x2FA8], NFKC: [0x9580], NFKD: [0x9580] }, +{ source: [0x2FA9], NFC: [0x2FA9], NFD: [0x2FA9], NFKC: [0x961C], NFKD: [0x961C] }, +{ source: [0x2FAA], NFC: [0x2FAA], NFD: [0x2FAA], NFKC: [0x96B6], NFKD: [0x96B6] }, +{ source: [0x2FAB], NFC: [0x2FAB], NFD: [0x2FAB], NFKC: [0x96B9], NFKD: [0x96B9] }, +{ source: [0x2FAC], NFC: [0x2FAC], NFD: [0x2FAC], NFKC: [0x96E8], NFKD: [0x96E8] }, +{ source: [0x2FAD], NFC: [0x2FAD], NFD: [0x2FAD], NFKC: [0x9751], NFKD: [0x9751] }, +{ source: [0x2FAE], NFC: [0x2FAE], NFD: [0x2FAE], NFKC: [0x975E], NFKD: [0x975E] }, +{ source: [0x2FAF], NFC: [0x2FAF], NFD: [0x2FAF], NFKC: [0x9762], NFKD: [0x9762] }, +{ source: [0x2FB0], NFC: [0x2FB0], NFD: [0x2FB0], NFKC: [0x9769], NFKD: [0x9769] }, +{ source: [0x2FB1], NFC: [0x2FB1], NFD: [0x2FB1], NFKC: [0x97CB], NFKD: [0x97CB] }, +{ source: [0x2FB2], NFC: [0x2FB2], NFD: [0x2FB2], NFKC: [0x97ED], NFKD: [0x97ED] }, +{ source: [0x2FB3], NFC: [0x2FB3], NFD: [0x2FB3], NFKC: [0x97F3], NFKD: [0x97F3] }, +{ source: [0x2FB4], NFC: [0x2FB4], NFD: [0x2FB4], NFKC: [0x9801], NFKD: [0x9801] }, +{ source: [0x2FB5], NFC: [0x2FB5], NFD: [0x2FB5], NFKC: [0x98A8], NFKD: [0x98A8] }, +{ source: [0x2FB6], NFC: [0x2FB6], NFD: [0x2FB6], NFKC: [0x98DB], NFKD: [0x98DB] }, +{ source: [0x2FB7], NFC: [0x2FB7], NFD: [0x2FB7], NFKC: [0x98DF], NFKD: [0x98DF] }, +{ source: [0x2FB8], NFC: [0x2FB8], NFD: [0x2FB8], NFKC: [0x9996], NFKD: [0x9996] }, +{ source: [0x2FB9], NFC: [0x2FB9], NFD: [0x2FB9], NFKC: [0x9999], NFKD: [0x9999] }, +{ source: [0x2FBA], NFC: [0x2FBA], NFD: [0x2FBA], NFKC: [0x99AC], NFKD: [0x99AC] }, +{ source: [0x2FBB], NFC: [0x2FBB], NFD: [0x2FBB], NFKC: [0x9AA8], NFKD: [0x9AA8] }, +{ source: [0x2FBC], NFC: [0x2FBC], NFD: [0x2FBC], NFKC: [0x9AD8], NFKD: [0x9AD8] }, +{ source: [0x2FBD], NFC: [0x2FBD], NFD: [0x2FBD], NFKC: [0x9ADF], NFKD: [0x9ADF] }, +{ source: [0x2FBE], NFC: [0x2FBE], NFD: [0x2FBE], NFKC: [0x9B25], NFKD: [0x9B25] }, +{ source: [0x2FBF], NFC: [0x2FBF], NFD: [0x2FBF], NFKC: [0x9B2F], NFKD: [0x9B2F] }, +{ source: [0x2FC0], NFC: [0x2FC0], NFD: [0x2FC0], NFKC: [0x9B32], NFKD: [0x9B32] }, +{ source: [0x2FC1], NFC: [0x2FC1], NFD: [0x2FC1], NFKC: [0x9B3C], NFKD: [0x9B3C] }, +{ source: [0x2FC2], NFC: [0x2FC2], NFD: [0x2FC2], NFKC: [0x9B5A], NFKD: [0x9B5A] }, +{ source: [0x2FC3], NFC: [0x2FC3], NFD: [0x2FC3], NFKC: [0x9CE5], NFKD: [0x9CE5] }, +{ source: [0x2FC4], NFC: [0x2FC4], NFD: [0x2FC4], NFKC: [0x9E75], NFKD: [0x9E75] }, +{ source: [0x2FC5], NFC: [0x2FC5], NFD: [0x2FC5], NFKC: [0x9E7F], NFKD: [0x9E7F] }, +{ source: [0x2FC6], NFC: [0x2FC6], NFD: [0x2FC6], NFKC: [0x9EA5], NFKD: [0x9EA5] }, +{ source: [0x2FC7], NFC: [0x2FC7], NFD: [0x2FC7], NFKC: [0x9EBB], NFKD: [0x9EBB] }, +{ source: [0x2FC8], NFC: [0x2FC8], NFD: [0x2FC8], NFKC: [0x9EC3], NFKD: [0x9EC3] }, +{ source: [0x2FC9], NFC: [0x2FC9], NFD: [0x2FC9], NFKC: [0x9ECD], NFKD: [0x9ECD] }, +{ source: [0x2FCA], NFC: [0x2FCA], NFD: [0x2FCA], NFKC: [0x9ED1], NFKD: [0x9ED1] }, +{ source: [0x2FCB], NFC: [0x2FCB], NFD: [0x2FCB], NFKC: [0x9EF9], NFKD: [0x9EF9] }, +{ source: [0x2FCC], NFC: [0x2FCC], NFD: [0x2FCC], NFKC: [0x9EFD], NFKD: [0x9EFD] }, +{ source: [0x2FCD], NFC: [0x2FCD], NFD: [0x2FCD], NFKC: [0x9F0E], NFKD: [0x9F0E] }, +{ source: [0x2FCE], NFC: [0x2FCE], NFD: [0x2FCE], NFKC: [0x9F13], NFKD: [0x9F13] }, +{ source: [0x2FCF], NFC: [0x2FCF], NFD: [0x2FCF], NFKC: [0x9F20], NFKD: [0x9F20] }, +{ source: [0x2FD0], NFC: [0x2FD0], NFD: [0x2FD0], NFKC: [0x9F3B], NFKD: [0x9F3B] }, +{ source: [0x2FD1], NFC: [0x2FD1], NFD: [0x2FD1], NFKC: [0x9F4A], NFKD: [0x9F4A] }, +{ source: [0x2FD2], NFC: [0x2FD2], NFD: [0x2FD2], NFKC: [0x9F52], NFKD: [0x9F52] }, +{ source: [0x2FD3], NFC: [0x2FD3], NFD: [0x2FD3], NFKC: [0x9F8D], NFKD: [0x9F8D] }, +{ source: [0x2FD4], NFC: [0x2FD4], NFD: [0x2FD4], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0x2FD5], NFC: [0x2FD5], NFD: [0x2FD5], NFKC: [0x9FA0], NFKD: [0x9FA0] }, +{ source: [0x3000], NFC: [0x3000], NFD: [0x3000], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x3036], NFC: [0x3036], NFD: [0x3036], NFKC: [0x3012], NFKD: [0x3012] }, +{ source: [0x3038], NFC: [0x3038], NFD: [0x3038], NFKC: [0x5341], NFKD: [0x5341] }, +{ source: [0x3039], NFC: [0x3039], NFD: [0x3039], NFKC: [0x5344], NFKD: [0x5344] }, +{ source: [0x303A], NFC: [0x303A], NFD: [0x303A], NFKC: [0x5345], NFKD: [0x5345] }, +{ source: [0x304C], NFC: [0x304C], NFD: [0x304B, 0x3099], NFKC: [0x304C], NFKD: [0x304B, 0x3099] }, +{ source: [0x304E], NFC: [0x304E], NFD: [0x304D, 0x3099], NFKC: [0x304E], NFKD: [0x304D, 0x3099] }, +{ source: [0x3050], NFC: [0x3050], NFD: [0x304F, 0x3099], NFKC: [0x3050], NFKD: [0x304F, 0x3099] }, +{ source: [0x3052], NFC: [0x3052], NFD: [0x3051, 0x3099], NFKC: [0x3052], NFKD: [0x3051, 0x3099] }, +{ source: [0x3054], NFC: [0x3054], NFD: [0x3053, 0x3099], NFKC: [0x3054], NFKD: [0x3053, 0x3099] }, +{ source: [0x3056], NFC: [0x3056], NFD: [0x3055, 0x3099], NFKC: [0x3056], NFKD: [0x3055, 0x3099] }, +{ source: [0x3058], NFC: [0x3058], NFD: [0x3057, 0x3099], NFKC: [0x3058], NFKD: [0x3057, 0x3099] }, +{ source: [0x305A], NFC: [0x305A], NFD: [0x3059, 0x3099], NFKC: [0x305A], NFKD: [0x3059, 0x3099] }, +{ source: [0x305C], NFC: [0x305C], NFD: [0x305B, 0x3099], NFKC: [0x305C], NFKD: [0x305B, 0x3099] }, +{ source: [0x305E], NFC: [0x305E], NFD: [0x305D, 0x3099], NFKC: [0x305E], NFKD: [0x305D, 0x3099] }, +{ source: [0x3060], NFC: [0x3060], NFD: [0x305F, 0x3099], NFKC: [0x3060], NFKD: [0x305F, 0x3099] }, +{ source: [0x3062], NFC: [0x3062], NFD: [0x3061, 0x3099], NFKC: [0x3062], NFKD: [0x3061, 0x3099] }, +{ source: [0x3065], NFC: [0x3065], NFD: [0x3064, 0x3099], NFKC: [0x3065], NFKD: [0x3064, 0x3099] }, +{ source: [0x3067], NFC: [0x3067], NFD: [0x3066, 0x3099], NFKC: [0x3067], NFKD: [0x3066, 0x3099] }, +{ source: [0x3069], NFC: [0x3069], NFD: [0x3068, 0x3099], NFKC: [0x3069], NFKD: [0x3068, 0x3099] }, +{ source: [0x3070], NFC: [0x3070], NFD: [0x306F, 0x3099], NFKC: [0x3070], NFKD: [0x306F, 0x3099] }, +{ source: [0x3071], NFC: [0x3071], NFD: [0x306F, 0x309A], NFKC: [0x3071], NFKD: [0x306F, 0x309A] }, +{ source: [0x3073], NFC: [0x3073], NFD: [0x3072, 0x3099], NFKC: [0x3073], NFKD: [0x3072, 0x3099] }, +{ source: [0x3074], NFC: [0x3074], NFD: [0x3072, 0x309A], NFKC: [0x3074], NFKD: [0x3072, 0x309A] }, +{ source: [0x3076], NFC: [0x3076], NFD: [0x3075, 0x3099], NFKC: [0x3076], NFKD: [0x3075, 0x3099] }, +{ source: [0x3077], NFC: [0x3077], NFD: [0x3075, 0x309A], NFKC: [0x3077], NFKD: [0x3075, 0x309A] }, +{ source: [0x3079], NFC: [0x3079], NFD: [0x3078, 0x3099], NFKC: [0x3079], NFKD: [0x3078, 0x3099] }, +{ source: [0x307A], NFC: [0x307A], NFD: [0x3078, 0x309A], NFKC: [0x307A], NFKD: [0x3078, 0x309A] }, +{ source: [0x307C], NFC: [0x307C], NFD: [0x307B, 0x3099], NFKC: [0x307C], NFKD: [0x307B, 0x3099] }, +{ source: [0x307D], NFC: [0x307D], NFD: [0x307B, 0x309A], NFKC: [0x307D], NFKD: [0x307B, 0x309A] }, +{ source: [0x3094], NFC: [0x3094], NFD: [0x3046, 0x3099], NFKC: [0x3094], NFKD: [0x3046, 0x3099] }, +{ source: [0x309B], NFC: [0x309B], NFD: [0x309B], NFKC: [0x0020, 0x3099], NFKD: [0x0020, 0x3099] }, +{ source: [0x309C], NFC: [0x309C], NFD: [0x309C], NFKC: [0x0020, 0x309A], NFKD: [0x0020, 0x309A] }, +{ source: [0x309E], NFC: [0x309E], NFD: [0x309D, 0x3099], NFKC: [0x309E], NFKD: [0x309D, 0x3099] }, +{ source: [0x309F], NFC: [0x309F], NFD: [0x309F], NFKC: [0x3088, 0x308A], NFKD: [0x3088, 0x308A] }, +{ source: [0x30AC], NFC: [0x30AC], NFD: [0x30AB, 0x3099], NFKC: [0x30AC], NFKD: [0x30AB, 0x3099] }, +{ source: [0x30AE], NFC: [0x30AE], NFD: [0x30AD, 0x3099], NFKC: [0x30AE], NFKD: [0x30AD, 0x3099] }, +{ source: [0x30B0], NFC: [0x30B0], NFD: [0x30AF, 0x3099], NFKC: [0x30B0], NFKD: [0x30AF, 0x3099] }, +{ source: [0x30B2], NFC: [0x30B2], NFD: [0x30B1, 0x3099], NFKC: [0x30B2], NFKD: [0x30B1, 0x3099] }, +{ source: [0x30B4], NFC: [0x30B4], NFD: [0x30B3, 0x3099], NFKC: [0x30B4], NFKD: [0x30B3, 0x3099] }, +{ source: [0x30B6], NFC: [0x30B6], NFD: [0x30B5, 0x3099], NFKC: [0x30B6], NFKD: [0x30B5, 0x3099] }, +{ source: [0x30B8], NFC: [0x30B8], NFD: [0x30B7, 0x3099], NFKC: [0x30B8], NFKD: [0x30B7, 0x3099] }, +{ source: [0x30BA], NFC: [0x30BA], NFD: [0x30B9, 0x3099], NFKC: [0x30BA], NFKD: [0x30B9, 0x3099] }, +{ source: [0x30BC], NFC: [0x30BC], NFD: [0x30BB, 0x3099], NFKC: [0x30BC], NFKD: [0x30BB, 0x3099] }, +{ source: [0x30BE], NFC: [0x30BE], NFD: [0x30BD, 0x3099], NFKC: [0x30BE], NFKD: [0x30BD, 0x3099] }, +{ source: [0x30C0], NFC: [0x30C0], NFD: [0x30BF, 0x3099], NFKC: [0x30C0], NFKD: [0x30BF, 0x3099] }, +{ source: [0x30C2], NFC: [0x30C2], NFD: [0x30C1, 0x3099], NFKC: [0x30C2], NFKD: [0x30C1, 0x3099] }, +{ source: [0x30C5], NFC: [0x30C5], NFD: [0x30C4, 0x3099], NFKC: [0x30C5], NFKD: [0x30C4, 0x3099] }, +{ source: [0x30C7], NFC: [0x30C7], NFD: [0x30C6, 0x3099], NFKC: [0x30C7], NFKD: [0x30C6, 0x3099] }, +{ source: [0x30C9], NFC: [0x30C9], NFD: [0x30C8, 0x3099], NFKC: [0x30C9], NFKD: [0x30C8, 0x3099] }, +{ source: [0x30D0], NFC: [0x30D0], NFD: [0x30CF, 0x3099], NFKC: [0x30D0], NFKD: [0x30CF, 0x3099] }, +{ source: [0x30D1], NFC: [0x30D1], NFD: [0x30CF, 0x309A], NFKC: [0x30D1], NFKD: [0x30CF, 0x309A] }, +{ source: [0x30D3], NFC: [0x30D3], NFD: [0x30D2, 0x3099], NFKC: [0x30D3], NFKD: [0x30D2, 0x3099] }, +{ source: [0x30D4], NFC: [0x30D4], NFD: [0x30D2, 0x309A], NFKC: [0x30D4], NFKD: [0x30D2, 0x309A] }, +{ source: [0x30D6], NFC: [0x30D6], NFD: [0x30D5, 0x3099], NFKC: [0x30D6], NFKD: [0x30D5, 0x3099] }, +{ source: [0x30D7], NFC: [0x30D7], NFD: [0x30D5, 0x309A], NFKC: [0x30D7], NFKD: [0x30D5, 0x309A] }, +{ source: [0x30D9], NFC: [0x30D9], NFD: [0x30D8, 0x3099], NFKC: [0x30D9], NFKD: [0x30D8, 0x3099] }, +{ source: [0x30DA], NFC: [0x30DA], NFD: [0x30D8, 0x309A], NFKC: [0x30DA], NFKD: [0x30D8, 0x309A] }, +{ source: [0x30DC], NFC: [0x30DC], NFD: [0x30DB, 0x3099], NFKC: [0x30DC], NFKD: [0x30DB, 0x3099] }, +{ source: [0x30DD], NFC: [0x30DD], NFD: [0x30DB, 0x309A], NFKC: [0x30DD], NFKD: [0x30DB, 0x309A] }, +{ source: [0x30F4], NFC: [0x30F4], NFD: [0x30A6, 0x3099], NFKC: [0x30F4], NFKD: [0x30A6, 0x3099] }, +{ source: [0x30F7], NFC: [0x30F7], NFD: [0x30EF, 0x3099], NFKC: [0x30F7], NFKD: [0x30EF, 0x3099] }, +{ source: [0x30F8], NFC: [0x30F8], NFD: [0x30F0, 0x3099], NFKC: [0x30F8], NFKD: [0x30F0, 0x3099] }, +{ source: [0x30F9], NFC: [0x30F9], NFD: [0x30F1, 0x3099], NFKC: [0x30F9], NFKD: [0x30F1, 0x3099] }, +{ source: [0x30FA], NFC: [0x30FA], NFD: [0x30F2, 0x3099], NFKC: [0x30FA], NFKD: [0x30F2, 0x3099] }, +{ source: [0x30FE], NFC: [0x30FE], NFD: [0x30FD, 0x3099], NFKC: [0x30FE], NFKD: [0x30FD, 0x3099] }, +{ source: [0x30FF], NFC: [0x30FF], NFD: [0x30FF], NFKC: [0x30B3, 0x30C8], NFKD: [0x30B3, 0x30C8] }, +{ source: [0x3131], NFC: [0x3131], NFD: [0x3131], NFKC: [0x1100], NFKD: [0x1100] }, +{ source: [0x3132], NFC: [0x3132], NFD: [0x3132], NFKC: [0x1101], NFKD: [0x1101] }, +{ source: [0x3133], NFC: [0x3133], NFD: [0x3133], NFKC: [0x11AA], NFKD: [0x11AA] }, +{ source: [0x3134], NFC: [0x3134], NFD: [0x3134], NFKC: [0x1102], NFKD: [0x1102] }, +{ source: [0x3135], NFC: [0x3135], NFD: [0x3135], NFKC: [0x11AC], NFKD: [0x11AC] }, +{ source: [0x3136], NFC: [0x3136], NFD: [0x3136], NFKC: [0x11AD], NFKD: [0x11AD] }, +{ source: [0x3137], NFC: [0x3137], NFD: [0x3137], NFKC: [0x1103], NFKD: [0x1103] }, +{ source: [0x3138], NFC: [0x3138], NFD: [0x3138], NFKC: [0x1104], NFKD: [0x1104] }, +{ source: [0x3139], NFC: [0x3139], NFD: [0x3139], NFKC: [0x1105], NFKD: [0x1105] }, +{ source: [0x313A], NFC: [0x313A], NFD: [0x313A], NFKC: [0x11B0], NFKD: [0x11B0] }, +{ source: [0x313B], NFC: [0x313B], NFD: [0x313B], NFKC: [0x11B1], NFKD: [0x11B1] }, +{ source: [0x313C], NFC: [0x313C], NFD: [0x313C], NFKC: [0x11B2], NFKD: [0x11B2] }, +{ source: [0x313D], NFC: [0x313D], NFD: [0x313D], NFKC: [0x11B3], NFKD: [0x11B3] }, +{ source: [0x313E], NFC: [0x313E], NFD: [0x313E], NFKC: [0x11B4], NFKD: [0x11B4] }, +{ source: [0x313F], NFC: [0x313F], NFD: [0x313F], NFKC: [0x11B5], NFKD: [0x11B5] }, +{ source: [0x3140], NFC: [0x3140], NFD: [0x3140], NFKC: [0x111A], NFKD: [0x111A] }, +{ source: [0x3141], NFC: [0x3141], NFD: [0x3141], NFKC: [0x1106], NFKD: [0x1106] }, +{ source: [0x3142], NFC: [0x3142], NFD: [0x3142], NFKC: [0x1107], NFKD: [0x1107] }, +{ source: [0x3143], NFC: [0x3143], NFD: [0x3143], NFKC: [0x1108], NFKD: [0x1108] }, +{ source: [0x3144], NFC: [0x3144], NFD: [0x3144], NFKC: [0x1121], NFKD: [0x1121] }, +{ source: [0x3145], NFC: [0x3145], NFD: [0x3145], NFKC: [0x1109], NFKD: [0x1109] }, +{ source: [0x3146], NFC: [0x3146], NFD: [0x3146], NFKC: [0x110A], NFKD: [0x110A] }, +{ source: [0x3147], NFC: [0x3147], NFD: [0x3147], NFKC: [0x110B], NFKD: [0x110B] }, +{ source: [0x3148], NFC: [0x3148], NFD: [0x3148], NFKC: [0x110C], NFKD: [0x110C] }, +{ source: [0x3149], NFC: [0x3149], NFD: [0x3149], NFKC: [0x110D], NFKD: [0x110D] }, +{ source: [0x314A], NFC: [0x314A], NFD: [0x314A], NFKC: [0x110E], NFKD: [0x110E] }, +{ source: [0x314B], NFC: [0x314B], NFD: [0x314B], NFKC: [0x110F], NFKD: [0x110F] }, +{ source: [0x314C], NFC: [0x314C], NFD: [0x314C], NFKC: [0x1110], NFKD: [0x1110] }, +{ source: [0x314D], NFC: [0x314D], NFD: [0x314D], NFKC: [0x1111], NFKD: [0x1111] }, +{ source: [0x314E], NFC: [0x314E], NFD: [0x314E], NFKC: [0x1112], NFKD: [0x1112] }, +{ source: [0x314F], NFC: [0x314F], NFD: [0x314F], NFKC: [0x1161], NFKD: [0x1161] }, +{ source: [0x3150], NFC: [0x3150], NFD: [0x3150], NFKC: [0x1162], NFKD: [0x1162] }, +{ source: [0x3151], NFC: [0x3151], NFD: [0x3151], NFKC: [0x1163], NFKD: [0x1163] }, +{ source: [0x3152], NFC: [0x3152], NFD: [0x3152], NFKC: [0x1164], NFKD: [0x1164] }, +{ source: [0x3153], NFC: [0x3153], NFD: [0x3153], NFKC: [0x1165], NFKD: [0x1165] }, +{ source: [0x3154], NFC: [0x3154], NFD: [0x3154], NFKC: [0x1166], NFKD: [0x1166] }, +{ source: [0x3155], NFC: [0x3155], NFD: [0x3155], NFKC: [0x1167], NFKD: [0x1167] }, +{ source: [0x3156], NFC: [0x3156], NFD: [0x3156], NFKC: [0x1168], NFKD: [0x1168] }, +{ source: [0x3157], NFC: [0x3157], NFD: [0x3157], NFKC: [0x1169], NFKD: [0x1169] }, +{ source: [0x3158], NFC: [0x3158], NFD: [0x3158], NFKC: [0x116A], NFKD: [0x116A] }, +{ source: [0x3159], NFC: [0x3159], NFD: [0x3159], NFKC: [0x116B], NFKD: [0x116B] }, +{ source: [0x315A], NFC: [0x315A], NFD: [0x315A], NFKC: [0x116C], NFKD: [0x116C] }, +{ source: [0x315B], NFC: [0x315B], NFD: [0x315B], NFKC: [0x116D], NFKD: [0x116D] }, +{ source: [0x315C], NFC: [0x315C], NFD: [0x315C], NFKC: [0x116E], NFKD: [0x116E] }, +{ source: [0x315D], NFC: [0x315D], NFD: [0x315D], NFKC: [0x116F], NFKD: [0x116F] }, +{ source: [0x315E], NFC: [0x315E], NFD: [0x315E], NFKC: [0x1170], NFKD: [0x1170] }, +{ source: [0x315F], NFC: [0x315F], NFD: [0x315F], NFKC: [0x1171], NFKD: [0x1171] }, +{ source: [0x3160], NFC: [0x3160], NFD: [0x3160], NFKC: [0x1172], NFKD: [0x1172] }, +{ source: [0x3161], NFC: [0x3161], NFD: [0x3161], NFKC: [0x1173], NFKD: [0x1173] }, +{ source: [0x3162], NFC: [0x3162], NFD: [0x3162], NFKC: [0x1174], NFKD: [0x1174] }, +{ source: [0x3163], NFC: [0x3163], NFD: [0x3163], NFKC: [0x1175], NFKD: [0x1175] }, +{ source: [0x3164], NFC: [0x3164], NFD: [0x3164], NFKC: [0x1160], NFKD: [0x1160] }, +{ source: [0x3165], NFC: [0x3165], NFD: [0x3165], NFKC: [0x1114], NFKD: [0x1114] }, +{ source: [0x3166], NFC: [0x3166], NFD: [0x3166], NFKC: [0x1115], NFKD: [0x1115] }, +{ source: [0x3167], NFC: [0x3167], NFD: [0x3167], NFKC: [0x11C7], NFKD: [0x11C7] }, +{ source: [0x3168], NFC: [0x3168], NFD: [0x3168], NFKC: [0x11C8], NFKD: [0x11C8] }, +{ source: [0x3169], NFC: [0x3169], NFD: [0x3169], NFKC: [0x11CC], NFKD: [0x11CC] }, +{ source: [0x316A], NFC: [0x316A], NFD: [0x316A], NFKC: [0x11CE], NFKD: [0x11CE] }, +{ source: [0x316B], NFC: [0x316B], NFD: [0x316B], NFKC: [0x11D3], NFKD: [0x11D3] }, +{ source: [0x316C], NFC: [0x316C], NFD: [0x316C], NFKC: [0x11D7], NFKD: [0x11D7] }, +{ source: [0x316D], NFC: [0x316D], NFD: [0x316D], NFKC: [0x11D9], NFKD: [0x11D9] }, +{ source: [0x316E], NFC: [0x316E], NFD: [0x316E], NFKC: [0x111C], NFKD: [0x111C] }, +{ source: [0x316F], NFC: [0x316F], NFD: [0x316F], NFKC: [0x11DD], NFKD: [0x11DD] }, +{ source: [0x3170], NFC: [0x3170], NFD: [0x3170], NFKC: [0x11DF], NFKD: [0x11DF] }, +{ source: [0x3171], NFC: [0x3171], NFD: [0x3171], NFKC: [0x111D], NFKD: [0x111D] }, +{ source: [0x3172], NFC: [0x3172], NFD: [0x3172], NFKC: [0x111E], NFKD: [0x111E] }, +{ source: [0x3173], NFC: [0x3173], NFD: [0x3173], NFKC: [0x1120], NFKD: [0x1120] }, +{ source: [0x3174], NFC: [0x3174], NFD: [0x3174], NFKC: [0x1122], NFKD: [0x1122] }, +{ source: [0x3175], NFC: [0x3175], NFD: [0x3175], NFKC: [0x1123], NFKD: [0x1123] }, +{ source: [0x3176], NFC: [0x3176], NFD: [0x3176], NFKC: [0x1127], NFKD: [0x1127] }, +{ source: [0x3177], NFC: [0x3177], NFD: [0x3177], NFKC: [0x1129], NFKD: [0x1129] }, +{ source: [0x3178], NFC: [0x3178], NFD: [0x3178], NFKC: [0x112B], NFKD: [0x112B] }, +{ source: [0x3179], NFC: [0x3179], NFD: [0x3179], NFKC: [0x112C], NFKD: [0x112C] }, +{ source: [0x317A], NFC: [0x317A], NFD: [0x317A], NFKC: [0x112D], NFKD: [0x112D] }, +{ source: [0x317B], NFC: [0x317B], NFD: [0x317B], NFKC: [0x112E], NFKD: [0x112E] }, +{ source: [0x317C], NFC: [0x317C], NFD: [0x317C], NFKC: [0x112F], NFKD: [0x112F] }, +{ source: [0x317D], NFC: [0x317D], NFD: [0x317D], NFKC: [0x1132], NFKD: [0x1132] }, +{ source: [0x317E], NFC: [0x317E], NFD: [0x317E], NFKC: [0x1136], NFKD: [0x1136] }, +{ source: [0x317F], NFC: [0x317F], NFD: [0x317F], NFKC: [0x1140], NFKD: [0x1140] }, +{ source: [0x3180], NFC: [0x3180], NFD: [0x3180], NFKC: [0x1147], NFKD: [0x1147] }, +{ source: [0x3181], NFC: [0x3181], NFD: [0x3181], NFKC: [0x114C], NFKD: [0x114C] }, +{ source: [0x3182], NFC: [0x3182], NFD: [0x3182], NFKC: [0x11F1], NFKD: [0x11F1] }, +{ source: [0x3183], NFC: [0x3183], NFD: [0x3183], NFKC: [0x11F2], NFKD: [0x11F2] }, +{ source: [0x3184], NFC: [0x3184], NFD: [0x3184], NFKC: [0x1157], NFKD: [0x1157] }, +{ source: [0x3185], NFC: [0x3185], NFD: [0x3185], NFKC: [0x1158], NFKD: [0x1158] }, +{ source: [0x3186], NFC: [0x3186], NFD: [0x3186], NFKC: [0x1159], NFKD: [0x1159] }, +{ source: [0x3187], NFC: [0x3187], NFD: [0x3187], NFKC: [0x1184], NFKD: [0x1184] }, +{ source: [0x3188], NFC: [0x3188], NFD: [0x3188], NFKC: [0x1185], NFKD: [0x1185] }, +{ source: [0x3189], NFC: [0x3189], NFD: [0x3189], NFKC: [0x1188], NFKD: [0x1188] }, +{ source: [0x318A], NFC: [0x318A], NFD: [0x318A], NFKC: [0x1191], NFKD: [0x1191] }, +{ source: [0x318B], NFC: [0x318B], NFD: [0x318B], NFKC: [0x1192], NFKD: [0x1192] }, +{ source: [0x318C], NFC: [0x318C], NFD: [0x318C], NFKC: [0x1194], NFKD: [0x1194] }, +{ source: [0x318D], NFC: [0x318D], NFD: [0x318D], NFKC: [0x119E], NFKD: [0x119E] }, +{ source: [0x318E], NFC: [0x318E], NFD: [0x318E], NFKC: [0x11A1], NFKD: [0x11A1] }, +{ source: [0x3192], NFC: [0x3192], NFD: [0x3192], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x3193], NFC: [0x3193], NFD: [0x3193], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x3194], NFC: [0x3194], NFD: [0x3194], NFKC: [0x4E09], NFKD: [0x4E09] }, +{ source: [0x3195], NFC: [0x3195], NFD: [0x3195], NFKC: [0x56DB], NFKD: [0x56DB] }, +{ source: [0x3196], NFC: [0x3196], NFD: [0x3196], NFKC: [0x4E0A], NFKD: [0x4E0A] }, +{ source: [0x3197], NFC: [0x3197], NFD: [0x3197], NFKC: [0x4E2D], NFKD: [0x4E2D] }, +{ source: [0x3198], NFC: [0x3198], NFD: [0x3198], NFKC: [0x4E0B], NFKD: [0x4E0B] }, +{ source: [0x3199], NFC: [0x3199], NFD: [0x3199], NFKC: [0x7532], NFKD: [0x7532] }, +{ source: [0x319A], NFC: [0x319A], NFD: [0x319A], NFKC: [0x4E59], NFKD: [0x4E59] }, +{ source: [0x319B], NFC: [0x319B], NFD: [0x319B], NFKC: [0x4E19], NFKD: [0x4E19] }, +{ source: [0x319C], NFC: [0x319C], NFD: [0x319C], NFKC: [0x4E01], NFKD: [0x4E01] }, +{ source: [0x319D], NFC: [0x319D], NFD: [0x319D], NFKC: [0x5929], NFKD: [0x5929] }, +{ source: [0x319E], NFC: [0x319E], NFD: [0x319E], NFKC: [0x5730], NFKD: [0x5730] }, +{ source: [0x319F], NFC: [0x319F], NFD: [0x319F], NFKC: [0x4EBA], NFKD: [0x4EBA] }, +{ source: [0x3200], NFC: [0x3200], NFD: [0x3200], NFKC: [0x0028, 0x1100, 0x0029], NFKD: [0x0028, 0x1100, 0x0029] }, +{ source: [0x3201], NFC: [0x3201], NFD: [0x3201], NFKC: [0x0028, 0x1102, 0x0029], NFKD: [0x0028, 0x1102, 0x0029] }, +{ source: [0x3202], NFC: [0x3202], NFD: [0x3202], NFKC: [0x0028, 0x1103, 0x0029], NFKD: [0x0028, 0x1103, 0x0029] }, +{ source: [0x3203], NFC: [0x3203], NFD: [0x3203], NFKC: [0x0028, 0x1105, 0x0029], NFKD: [0x0028, 0x1105, 0x0029] }, +{ source: [0x3204], NFC: [0x3204], NFD: [0x3204], NFKC: [0x0028, 0x1106, 0x0029], NFKD: [0x0028, 0x1106, 0x0029] }, +{ source: [0x3205], NFC: [0x3205], NFD: [0x3205], NFKC: [0x0028, 0x1107, 0x0029], NFKD: [0x0028, 0x1107, 0x0029] }, +{ source: [0x3206], NFC: [0x3206], NFD: [0x3206], NFKC: [0x0028, 0x1109, 0x0029], NFKD: [0x0028, 0x1109, 0x0029] }, +{ source: [0x3207], NFC: [0x3207], NFD: [0x3207], NFKC: [0x0028, 0x110B, 0x0029], NFKD: [0x0028, 0x110B, 0x0029] }, +{ source: [0x3208], NFC: [0x3208], NFD: [0x3208], NFKC: [0x0028, 0x110C, 0x0029], NFKD: [0x0028, 0x110C, 0x0029] }, +{ source: [0x3209], NFC: [0x3209], NFD: [0x3209], NFKC: [0x0028, 0x110E, 0x0029], NFKD: [0x0028, 0x110E, 0x0029] }, +{ source: [0x320A], NFC: [0x320A], NFD: [0x320A], NFKC: [0x0028, 0x110F, 0x0029], NFKD: [0x0028, 0x110F, 0x0029] }, +{ source: [0x320B], NFC: [0x320B], NFD: [0x320B], NFKC: [0x0028, 0x1110, 0x0029], NFKD: [0x0028, 0x1110, 0x0029] }, +{ source: [0x320C], NFC: [0x320C], NFD: [0x320C], NFKC: [0x0028, 0x1111, 0x0029], NFKD: [0x0028, 0x1111, 0x0029] }, +{ source: [0x320D], NFC: [0x320D], NFD: [0x320D], NFKC: [0x0028, 0x1112, 0x0029], NFKD: [0x0028, 0x1112, 0x0029] }, +{ source: [0x320E], NFC: [0x320E], NFD: [0x320E], NFKC: [0x0028, 0xAC00, 0x0029], NFKD: [0x0028, 0x1100, 0x1161, 0x0029] }, +{ source: [0x320F], NFC: [0x320F], NFD: [0x320F], NFKC: [0x0028, 0xB098, 0x0029], NFKD: [0x0028, 0x1102, 0x1161, 0x0029] }, +{ source: [0x3210], NFC: [0x3210], NFD: [0x3210], NFKC: [0x0028, 0xB2E4, 0x0029], NFKD: [0x0028, 0x1103, 0x1161, 0x0029] }, +{ source: [0x3211], NFC: [0x3211], NFD: [0x3211], NFKC: [0x0028, 0xB77C, 0x0029], NFKD: [0x0028, 0x1105, 0x1161, 0x0029] }, +{ source: [0x3212], NFC: [0x3212], NFD: [0x3212], NFKC: [0x0028, 0xB9C8, 0x0029], NFKD: [0x0028, 0x1106, 0x1161, 0x0029] }, +{ source: [0x3213], NFC: [0x3213], NFD: [0x3213], NFKC: [0x0028, 0xBC14, 0x0029], NFKD: [0x0028, 0x1107, 0x1161, 0x0029] }, +{ source: [0x3214], NFC: [0x3214], NFD: [0x3214], NFKC: [0x0028, 0xC0AC, 0x0029], NFKD: [0x0028, 0x1109, 0x1161, 0x0029] }, +{ source: [0x3215], NFC: [0x3215], NFD: [0x3215], NFKC: [0x0028, 0xC544, 0x0029], NFKD: [0x0028, 0x110B, 0x1161, 0x0029] }, +{ source: [0x3216], NFC: [0x3216], NFD: [0x3216], NFKC: [0x0028, 0xC790, 0x0029], NFKD: [0x0028, 0x110C, 0x1161, 0x0029] }, +{ source: [0x3217], NFC: [0x3217], NFD: [0x3217], NFKC: [0x0028, 0xCC28, 0x0029], NFKD: [0x0028, 0x110E, 0x1161, 0x0029] }, +{ source: [0x3218], NFC: [0x3218], NFD: [0x3218], NFKC: [0x0028, 0xCE74, 0x0029], NFKD: [0x0028, 0x110F, 0x1161, 0x0029] }, +{ source: [0x3219], NFC: [0x3219], NFD: [0x3219], NFKC: [0x0028, 0xD0C0, 0x0029], NFKD: [0x0028, 0x1110, 0x1161, 0x0029] }, +{ source: [0x321A], NFC: [0x321A], NFD: [0x321A], NFKC: [0x0028, 0xD30C, 0x0029], NFKD: [0x0028, 0x1111, 0x1161, 0x0029] }, +{ source: [0x321B], NFC: [0x321B], NFD: [0x321B], NFKC: [0x0028, 0xD558, 0x0029], NFKD: [0x0028, 0x1112, 0x1161, 0x0029] }, +{ source: [0x321C], NFC: [0x321C], NFD: [0x321C], NFKC: [0x0028, 0xC8FC, 0x0029], NFKD: [0x0028, 0x110C, 0x116E, 0x0029] }, +{ source: [0x321D], NFC: [0x321D], NFD: [0x321D], NFKC: [0x0028, 0xC624, 0xC804, 0x0029], NFKD: [0x0028, 0x110B, 0x1169, 0x110C, 0x1165, 0x11AB, 0x0029] }, +{ source: [0x321E], NFC: [0x321E], NFD: [0x321E], NFKC: [0x0028, 0xC624, 0xD6C4, 0x0029], NFKD: [0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029] }, +{ source: [0x3220], NFC: [0x3220], NFD: [0x3220], NFKC: [0x0028, 0x4E00, 0x0029], NFKD: [0x0028, 0x4E00, 0x0029] }, +{ source: [0x3221], NFC: [0x3221], NFD: [0x3221], NFKC: [0x0028, 0x4E8C, 0x0029], NFKD: [0x0028, 0x4E8C, 0x0029] }, +{ source: [0x3222], NFC: [0x3222], NFD: [0x3222], NFKC: [0x0028, 0x4E09, 0x0029], NFKD: [0x0028, 0x4E09, 0x0029] }, +{ source: [0x3223], NFC: [0x3223], NFD: [0x3223], NFKC: [0x0028, 0x56DB, 0x0029], NFKD: [0x0028, 0x56DB, 0x0029] }, +{ source: [0x3224], NFC: [0x3224], NFD: [0x3224], NFKC: [0x0028, 0x4E94, 0x0029], NFKD: [0x0028, 0x4E94, 0x0029] }, +{ source: [0x3225], NFC: [0x3225], NFD: [0x3225], NFKC: [0x0028, 0x516D, 0x0029], NFKD: [0x0028, 0x516D, 0x0029] }, +{ source: [0x3226], NFC: [0x3226], NFD: [0x3226], NFKC: [0x0028, 0x4E03, 0x0029], NFKD: [0x0028, 0x4E03, 0x0029] }, +{ source: [0x3227], NFC: [0x3227], NFD: [0x3227], NFKC: [0x0028, 0x516B, 0x0029], NFKD: [0x0028, 0x516B, 0x0029] }, +{ source: [0x3228], NFC: [0x3228], NFD: [0x3228], NFKC: [0x0028, 0x4E5D, 0x0029], NFKD: [0x0028, 0x4E5D, 0x0029] }, +{ source: [0x3229], NFC: [0x3229], NFD: [0x3229], NFKC: [0x0028, 0x5341, 0x0029], NFKD: [0x0028, 0x5341, 0x0029] }, +{ source: [0x322A], NFC: [0x322A], NFD: [0x322A], NFKC: [0x0028, 0x6708, 0x0029], NFKD: [0x0028, 0x6708, 0x0029] }, +{ source: [0x322B], NFC: [0x322B], NFD: [0x322B], NFKC: [0x0028, 0x706B, 0x0029], NFKD: [0x0028, 0x706B, 0x0029] }, +{ source: [0x322C], NFC: [0x322C], NFD: [0x322C], NFKC: [0x0028, 0x6C34, 0x0029], NFKD: [0x0028, 0x6C34, 0x0029] }, +{ source: [0x322D], NFC: [0x322D], NFD: [0x322D], NFKC: [0x0028, 0x6728, 0x0029], NFKD: [0x0028, 0x6728, 0x0029] }, +{ source: [0x322E], NFC: [0x322E], NFD: [0x322E], NFKC: [0x0028, 0x91D1, 0x0029], NFKD: [0x0028, 0x91D1, 0x0029] }, +{ source: [0x322F], NFC: [0x322F], NFD: [0x322F], NFKC: [0x0028, 0x571F, 0x0029], NFKD: [0x0028, 0x571F, 0x0029] }, +{ source: [0x3230], NFC: [0x3230], NFD: [0x3230], NFKC: [0x0028, 0x65E5, 0x0029], NFKD: [0x0028, 0x65E5, 0x0029] }, +{ source: [0x3231], NFC: [0x3231], NFD: [0x3231], NFKC: [0x0028, 0x682A, 0x0029], NFKD: [0x0028, 0x682A, 0x0029] }, +{ source: [0x3232], NFC: [0x3232], NFD: [0x3232], NFKC: [0x0028, 0x6709, 0x0029], NFKD: [0x0028, 0x6709, 0x0029] }, +{ source: [0x3233], NFC: [0x3233], NFD: [0x3233], NFKC: [0x0028, 0x793E, 0x0029], NFKD: [0x0028, 0x793E, 0x0029] }, +{ source: [0x3234], NFC: [0x3234], NFD: [0x3234], NFKC: [0x0028, 0x540D, 0x0029], NFKD: [0x0028, 0x540D, 0x0029] }, +{ source: [0x3235], NFC: [0x3235], NFD: [0x3235], NFKC: [0x0028, 0x7279, 0x0029], NFKD: [0x0028, 0x7279, 0x0029] }, +{ source: [0x3236], NFC: [0x3236], NFD: [0x3236], NFKC: [0x0028, 0x8CA1, 0x0029], NFKD: [0x0028, 0x8CA1, 0x0029] }, +{ source: [0x3237], NFC: [0x3237], NFD: [0x3237], NFKC: [0x0028, 0x795D, 0x0029], NFKD: [0x0028, 0x795D, 0x0029] }, +{ source: [0x3238], NFC: [0x3238], NFD: [0x3238], NFKC: [0x0028, 0x52B4, 0x0029], NFKD: [0x0028, 0x52B4, 0x0029] }, +{ source: [0x3239], NFC: [0x3239], NFD: [0x3239], NFKC: [0x0028, 0x4EE3, 0x0029], NFKD: [0x0028, 0x4EE3, 0x0029] }, +{ source: [0x323A], NFC: [0x323A], NFD: [0x323A], NFKC: [0x0028, 0x547C, 0x0029], NFKD: [0x0028, 0x547C, 0x0029] }, +{ source: [0x323B], NFC: [0x323B], NFD: [0x323B], NFKC: [0x0028, 0x5B66, 0x0029], NFKD: [0x0028, 0x5B66, 0x0029] }, +{ source: [0x323C], NFC: [0x323C], NFD: [0x323C], NFKC: [0x0028, 0x76E3, 0x0029], NFKD: [0x0028, 0x76E3, 0x0029] }, +{ source: [0x323D], NFC: [0x323D], NFD: [0x323D], NFKC: [0x0028, 0x4F01, 0x0029], NFKD: [0x0028, 0x4F01, 0x0029] }, +{ source: [0x323E], NFC: [0x323E], NFD: [0x323E], NFKC: [0x0028, 0x8CC7, 0x0029], NFKD: [0x0028, 0x8CC7, 0x0029] }, +{ source: [0x323F], NFC: [0x323F], NFD: [0x323F], NFKC: [0x0028, 0x5354, 0x0029], NFKD: [0x0028, 0x5354, 0x0029] }, +{ source: [0x3240], NFC: [0x3240], NFD: [0x3240], NFKC: [0x0028, 0x796D, 0x0029], NFKD: [0x0028, 0x796D, 0x0029] }, +{ source: [0x3241], NFC: [0x3241], NFD: [0x3241], NFKC: [0x0028, 0x4F11, 0x0029], NFKD: [0x0028, 0x4F11, 0x0029] }, +{ source: [0x3242], NFC: [0x3242], NFD: [0x3242], NFKC: [0x0028, 0x81EA, 0x0029], NFKD: [0x0028, 0x81EA, 0x0029] }, +{ source: [0x3243], NFC: [0x3243], NFD: [0x3243], NFKC: [0x0028, 0x81F3, 0x0029], NFKD: [0x0028, 0x81F3, 0x0029] }, +{ source: [0x3244], NFC: [0x3244], NFD: [0x3244], NFKC: [0x554F], NFKD: [0x554F] }, +{ source: [0x3245], NFC: [0x3245], NFD: [0x3245], NFKC: [0x5E7C], NFKD: [0x5E7C] }, +{ source: [0x3246], NFC: [0x3246], NFD: [0x3246], NFKC: [0x6587], NFKD: [0x6587] }, +{ source: [0x3247], NFC: [0x3247], NFD: [0x3247], NFKC: [0x7B8F], NFKD: [0x7B8F] }, +{ source: [0x3250], NFC: [0x3250], NFD: [0x3250], NFKC: [0x0050, 0x0054, 0x0045], NFKD: [0x0050, 0x0054, 0x0045] }, +{ source: [0x3251], NFC: [0x3251], NFD: [0x3251], NFKC: [0x0032, 0x0031], NFKD: [0x0032, 0x0031] }, +{ source: [0x3252], NFC: [0x3252], NFD: [0x3252], NFKC: [0x0032, 0x0032], NFKD: [0x0032, 0x0032] }, +{ source: [0x3253], NFC: [0x3253], NFD: [0x3253], NFKC: [0x0032, 0x0033], NFKD: [0x0032, 0x0033] }, +{ source: [0x3254], NFC: [0x3254], NFD: [0x3254], NFKC: [0x0032, 0x0034], NFKD: [0x0032, 0x0034] }, +{ source: [0x3255], NFC: [0x3255], NFD: [0x3255], NFKC: [0x0032, 0x0035], NFKD: [0x0032, 0x0035] }, +{ source: [0x3256], NFC: [0x3256], NFD: [0x3256], NFKC: [0x0032, 0x0036], NFKD: [0x0032, 0x0036] }, +{ source: [0x3257], NFC: [0x3257], NFD: [0x3257], NFKC: [0x0032, 0x0037], NFKD: [0x0032, 0x0037] }, +{ source: [0x3258], NFC: [0x3258], NFD: [0x3258], NFKC: [0x0032, 0x0038], NFKD: [0x0032, 0x0038] }, +{ source: [0x3259], NFC: [0x3259], NFD: [0x3259], NFKC: [0x0032, 0x0039], NFKD: [0x0032, 0x0039] }, +{ source: [0x325A], NFC: [0x325A], NFD: [0x325A], NFKC: [0x0033, 0x0030], NFKD: [0x0033, 0x0030] }, +{ source: [0x325B], NFC: [0x325B], NFD: [0x325B], NFKC: [0x0033, 0x0031], NFKD: [0x0033, 0x0031] }, +{ source: [0x325C], NFC: [0x325C], NFD: [0x325C], NFKC: [0x0033, 0x0032], NFKD: [0x0033, 0x0032] }, +{ source: [0x325D], NFC: [0x325D], NFD: [0x325D], NFKC: [0x0033, 0x0033], NFKD: [0x0033, 0x0033] }, +{ source: [0x325E], NFC: [0x325E], NFD: [0x325E], NFKC: [0x0033, 0x0034], NFKD: [0x0033, 0x0034] }, +{ source: [0x325F], NFC: [0x325F], NFD: [0x325F], NFKC: [0x0033, 0x0035], NFKD: [0x0033, 0x0035] }, +{ source: [0x3260], NFC: [0x3260], NFD: [0x3260], NFKC: [0x1100], NFKD: [0x1100] }, +{ source: [0x3261], NFC: [0x3261], NFD: [0x3261], NFKC: [0x1102], NFKD: [0x1102] }, +{ source: [0x3262], NFC: [0x3262], NFD: [0x3262], NFKC: [0x1103], NFKD: [0x1103] }, +{ source: [0x3263], NFC: [0x3263], NFD: [0x3263], NFKC: [0x1105], NFKD: [0x1105] }, +{ source: [0x3264], NFC: [0x3264], NFD: [0x3264], NFKC: [0x1106], NFKD: [0x1106] }, +{ source: [0x3265], NFC: [0x3265], NFD: [0x3265], NFKC: [0x1107], NFKD: [0x1107] }, +{ source: [0x3266], NFC: [0x3266], NFD: [0x3266], NFKC: [0x1109], NFKD: [0x1109] }, +{ source: [0x3267], NFC: [0x3267], NFD: [0x3267], NFKC: [0x110B], NFKD: [0x110B] }, +{ source: [0x3268], NFC: [0x3268], NFD: [0x3268], NFKC: [0x110C], NFKD: [0x110C] }, +{ source: [0x3269], NFC: [0x3269], NFD: [0x3269], NFKC: [0x110E], NFKD: [0x110E] }, +{ source: [0x326A], NFC: [0x326A], NFD: [0x326A], NFKC: [0x110F], NFKD: [0x110F] }, +{ source: [0x326B], NFC: [0x326B], NFD: [0x326B], NFKC: [0x1110], NFKD: [0x1110] }, +{ source: [0x326C], NFC: [0x326C], NFD: [0x326C], NFKC: [0x1111], NFKD: [0x1111] }, +{ source: [0x326D], NFC: [0x326D], NFD: [0x326D], NFKC: [0x1112], NFKD: [0x1112] }, +{ source: [0x326E], NFC: [0x326E], NFD: [0x326E], NFKC: [0xAC00], NFKD: [0x1100, 0x1161] }, +{ source: [0x326F], NFC: [0x326F], NFD: [0x326F], NFKC: [0xB098], NFKD: [0x1102, 0x1161] }, +{ source: [0x3270], NFC: [0x3270], NFD: [0x3270], NFKC: [0xB2E4], NFKD: [0x1103, 0x1161] }, +{ source: [0x3271], NFC: [0x3271], NFD: [0x3271], NFKC: [0xB77C], NFKD: [0x1105, 0x1161] }, +{ source: [0x3272], NFC: [0x3272], NFD: [0x3272], NFKC: [0xB9C8], NFKD: [0x1106, 0x1161] }, +{ source: [0x3273], NFC: [0x3273], NFD: [0x3273], NFKC: [0xBC14], NFKD: [0x1107, 0x1161] }, +{ source: [0x3274], NFC: [0x3274], NFD: [0x3274], NFKC: [0xC0AC], NFKD: [0x1109, 0x1161] }, +{ source: [0x3275], NFC: [0x3275], NFD: [0x3275], NFKC: [0xC544], NFKD: [0x110B, 0x1161] }, +{ source: [0x3276], NFC: [0x3276], NFD: [0x3276], NFKC: [0xC790], NFKD: [0x110C, 0x1161] }, +{ source: [0x3277], NFC: [0x3277], NFD: [0x3277], NFKC: [0xCC28], NFKD: [0x110E, 0x1161] }, +{ source: [0x3278], NFC: [0x3278], NFD: [0x3278], NFKC: [0xCE74], NFKD: [0x110F, 0x1161] }, +{ source: [0x3279], NFC: [0x3279], NFD: [0x3279], NFKC: [0xD0C0], NFKD: [0x1110, 0x1161] }, +{ source: [0x327A], NFC: [0x327A], NFD: [0x327A], NFKC: [0xD30C], NFKD: [0x1111, 0x1161] }, +{ source: [0x327B], NFC: [0x327B], NFD: [0x327B], NFKC: [0xD558], NFKD: [0x1112, 0x1161] }, +{ source: [0x327C], NFC: [0x327C], NFD: [0x327C], NFKC: [0xCC38, 0xACE0], NFKD: [0x110E, 0x1161, 0x11B7, 0x1100, 0x1169] }, +{ source: [0x327D], NFC: [0x327D], NFD: [0x327D], NFKC: [0xC8FC, 0xC758], NFKD: [0x110C, 0x116E, 0x110B, 0x1174] }, +{ source: [0x327E], NFC: [0x327E], NFD: [0x327E], NFKC: [0xC6B0], NFKD: [0x110B, 0x116E] }, +{ source: [0x3280], NFC: [0x3280], NFD: [0x3280], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x3281], NFC: [0x3281], NFD: [0x3281], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x3282], NFC: [0x3282], NFD: [0x3282], NFKC: [0x4E09], NFKD: [0x4E09] }, +{ source: [0x3283], NFC: [0x3283], NFD: [0x3283], NFKC: [0x56DB], NFKD: [0x56DB] }, +{ source: [0x3284], NFC: [0x3284], NFD: [0x3284], NFKC: [0x4E94], NFKD: [0x4E94] }, +{ source: [0x3285], NFC: [0x3285], NFD: [0x3285], NFKC: [0x516D], NFKD: [0x516D] }, +{ source: [0x3286], NFC: [0x3286], NFD: [0x3286], NFKC: [0x4E03], NFKD: [0x4E03] }, +{ source: [0x3287], NFC: [0x3287], NFD: [0x3287], NFKC: [0x516B], NFKD: [0x516B] }, +{ source: [0x3288], NFC: [0x3288], NFD: [0x3288], NFKC: [0x4E5D], NFKD: [0x4E5D] }, +{ source: [0x3289], NFC: [0x3289], NFD: [0x3289], NFKC: [0x5341], NFKD: [0x5341] }, +{ source: [0x328A], NFC: [0x328A], NFD: [0x328A], NFKC: [0x6708], NFKD: [0x6708] }, +{ source: [0x328B], NFC: [0x328B], NFD: [0x328B], NFKC: [0x706B], NFKD: [0x706B] }, +{ source: [0x328C], NFC: [0x328C], NFD: [0x328C], NFKC: [0x6C34], NFKD: [0x6C34] }, +{ source: [0x328D], NFC: [0x328D], NFD: [0x328D], NFKC: [0x6728], NFKD: [0x6728] }, +{ source: [0x328E], NFC: [0x328E], NFD: [0x328E], NFKC: [0x91D1], NFKD: [0x91D1] }, +{ source: [0x328F], NFC: [0x328F], NFD: [0x328F], NFKC: [0x571F], NFKD: [0x571F] }, +{ source: [0x3290], NFC: [0x3290], NFD: [0x3290], NFKC: [0x65E5], NFKD: [0x65E5] }, +{ source: [0x3291], NFC: [0x3291], NFD: [0x3291], NFKC: [0x682A], NFKD: [0x682A] }, +{ source: [0x3292], NFC: [0x3292], NFD: [0x3292], NFKC: [0x6709], NFKD: [0x6709] }, +{ source: [0x3293], NFC: [0x3293], NFD: [0x3293], NFKC: [0x793E], NFKD: [0x793E] }, +{ source: [0x3294], NFC: [0x3294], NFD: [0x3294], NFKC: [0x540D], NFKD: [0x540D] }, +{ source: [0x3295], NFC: [0x3295], NFD: [0x3295], NFKC: [0x7279], NFKD: [0x7279] }, +{ source: [0x3296], NFC: [0x3296], NFD: [0x3296], NFKC: [0x8CA1], NFKD: [0x8CA1] }, +{ source: [0x3297], NFC: [0x3297], NFD: [0x3297], NFKC: [0x795D], NFKD: [0x795D] }, +{ source: [0x3298], NFC: [0x3298], NFD: [0x3298], NFKC: [0x52B4], NFKD: [0x52B4] }, +{ source: [0x3299], NFC: [0x3299], NFD: [0x3299], NFKC: [0x79D8], NFKD: [0x79D8] }, +{ source: [0x329A], NFC: [0x329A], NFD: [0x329A], NFKC: [0x7537], NFKD: [0x7537] }, +{ source: [0x329B], NFC: [0x329B], NFD: [0x329B], NFKC: [0x5973], NFKD: [0x5973] }, +{ source: [0x329C], NFC: [0x329C], NFD: [0x329C], NFKC: [0x9069], NFKD: [0x9069] }, +{ source: [0x329D], NFC: [0x329D], NFD: [0x329D], NFKC: [0x512A], NFKD: [0x512A] }, +{ source: [0x329E], NFC: [0x329E], NFD: [0x329E], NFKC: [0x5370], NFKD: [0x5370] }, +{ source: [0x329F], NFC: [0x329F], NFD: [0x329F], NFKC: [0x6CE8], NFKD: [0x6CE8] }, +{ source: [0x32A0], NFC: [0x32A0], NFD: [0x32A0], NFKC: [0x9805], NFKD: [0x9805] }, +{ source: [0x32A1], NFC: [0x32A1], NFD: [0x32A1], NFKC: [0x4F11], NFKD: [0x4F11] }, +{ source: [0x32A2], NFC: [0x32A2], NFD: [0x32A2], NFKC: [0x5199], NFKD: [0x5199] }, +{ source: [0x32A3], NFC: [0x32A3], NFD: [0x32A3], NFKC: [0x6B63], NFKD: [0x6B63] }, +{ source: [0x32A4], NFC: [0x32A4], NFD: [0x32A4], NFKC: [0x4E0A], NFKD: [0x4E0A] }, +{ source: [0x32A5], NFC: [0x32A5], NFD: [0x32A5], NFKC: [0x4E2D], NFKD: [0x4E2D] }, +{ source: [0x32A6], NFC: [0x32A6], NFD: [0x32A6], NFKC: [0x4E0B], NFKD: [0x4E0B] }, +{ source: [0x32A7], NFC: [0x32A7], NFD: [0x32A7], NFKC: [0x5DE6], NFKD: [0x5DE6] }, +{ source: [0x32A8], NFC: [0x32A8], NFD: [0x32A8], NFKC: [0x53F3], NFKD: [0x53F3] }, +{ source: [0x32A9], NFC: [0x32A9], NFD: [0x32A9], NFKC: [0x533B], NFKD: [0x533B] }, +{ source: [0x32AA], NFC: [0x32AA], NFD: [0x32AA], NFKC: [0x5B97], NFKD: [0x5B97] }, +{ source: [0x32AB], NFC: [0x32AB], NFD: [0x32AB], NFKC: [0x5B66], NFKD: [0x5B66] }, +{ source: [0x32AC], NFC: [0x32AC], NFD: [0x32AC], NFKC: [0x76E3], NFKD: [0x76E3] }, +{ source: [0x32AD], NFC: [0x32AD], NFD: [0x32AD], NFKC: [0x4F01], NFKD: [0x4F01] }, +{ source: [0x32AE], NFC: [0x32AE], NFD: [0x32AE], NFKC: [0x8CC7], NFKD: [0x8CC7] }, +{ source: [0x32AF], NFC: [0x32AF], NFD: [0x32AF], NFKC: [0x5354], NFKD: [0x5354] }, +{ source: [0x32B0], NFC: [0x32B0], NFD: [0x32B0], NFKC: [0x591C], NFKD: [0x591C] }, +{ source: [0x32B1], NFC: [0x32B1], NFD: [0x32B1], NFKC: [0x0033, 0x0036], NFKD: [0x0033, 0x0036] }, +{ source: [0x32B2], NFC: [0x32B2], NFD: [0x32B2], NFKC: [0x0033, 0x0037], NFKD: [0x0033, 0x0037] }, +{ source: [0x32B3], NFC: [0x32B3], NFD: [0x32B3], NFKC: [0x0033, 0x0038], NFKD: [0x0033, 0x0038] }, +{ source: [0x32B4], NFC: [0x32B4], NFD: [0x32B4], NFKC: [0x0033, 0x0039], NFKD: [0x0033, 0x0039] }, +{ source: [0x32B5], NFC: [0x32B5], NFD: [0x32B5], NFKC: [0x0034, 0x0030], NFKD: [0x0034, 0x0030] }, +{ source: [0x32B6], NFC: [0x32B6], NFD: [0x32B6], NFKC: [0x0034, 0x0031], NFKD: [0x0034, 0x0031] }, +{ source: [0x32B7], NFC: [0x32B7], NFD: [0x32B7], NFKC: [0x0034, 0x0032], NFKD: [0x0034, 0x0032] }, +{ source: [0x32B8], NFC: [0x32B8], NFD: [0x32B8], NFKC: [0x0034, 0x0033], NFKD: [0x0034, 0x0033] }, +{ source: [0x32B9], NFC: [0x32B9], NFD: [0x32B9], NFKC: [0x0034, 0x0034], NFKD: [0x0034, 0x0034] }, +{ source: [0x32BA], NFC: [0x32BA], NFD: [0x32BA], NFKC: [0x0034, 0x0035], NFKD: [0x0034, 0x0035] }, +{ source: [0x32BB], NFC: [0x32BB], NFD: [0x32BB], NFKC: [0x0034, 0x0036], NFKD: [0x0034, 0x0036] }, +{ source: [0x32BC], NFC: [0x32BC], NFD: [0x32BC], NFKC: [0x0034, 0x0037], NFKD: [0x0034, 0x0037] }, +{ source: [0x32BD], NFC: [0x32BD], NFD: [0x32BD], NFKC: [0x0034, 0x0038], NFKD: [0x0034, 0x0038] }, +{ source: [0x32BE], NFC: [0x32BE], NFD: [0x32BE], NFKC: [0x0034, 0x0039], NFKD: [0x0034, 0x0039] }, +{ source: [0x32BF], NFC: [0x32BF], NFD: [0x32BF], NFKC: [0x0035, 0x0030], NFKD: [0x0035, 0x0030] }, +{ source: [0x32C0], NFC: [0x32C0], NFD: [0x32C0], NFKC: [0x0031, 0x6708], NFKD: [0x0031, 0x6708] }, +{ source: [0x32C1], NFC: [0x32C1], NFD: [0x32C1], NFKC: [0x0032, 0x6708], NFKD: [0x0032, 0x6708] }, +{ source: [0x32C2], NFC: [0x32C2], NFD: [0x32C2], NFKC: [0x0033, 0x6708], NFKD: [0x0033, 0x6708] }, +{ source: [0x32C3], NFC: [0x32C3], NFD: [0x32C3], NFKC: [0x0034, 0x6708], NFKD: [0x0034, 0x6708] }, +{ source: [0x32C4], NFC: [0x32C4], NFD: [0x32C4], NFKC: [0x0035, 0x6708], NFKD: [0x0035, 0x6708] }, +{ source: [0x32C5], NFC: [0x32C5], NFD: [0x32C5], NFKC: [0x0036, 0x6708], NFKD: [0x0036, 0x6708] }, +{ source: [0x32C6], NFC: [0x32C6], NFD: [0x32C6], NFKC: [0x0037, 0x6708], NFKD: [0x0037, 0x6708] }, +{ source: [0x32C7], NFC: [0x32C7], NFD: [0x32C7], NFKC: [0x0038, 0x6708], NFKD: [0x0038, 0x6708] }, +{ source: [0x32C8], NFC: [0x32C8], NFD: [0x32C8], NFKC: [0x0039, 0x6708], NFKD: [0x0039, 0x6708] }, +{ source: [0x32C9], NFC: [0x32C9], NFD: [0x32C9], NFKC: [0x0031, 0x0030, 0x6708], NFKD: [0x0031, 0x0030, 0x6708] }, +{ source: [0x32CA], NFC: [0x32CA], NFD: [0x32CA], NFKC: [0x0031, 0x0031, 0x6708], NFKD: [0x0031, 0x0031, 0x6708] }, +{ source: [0x32CB], NFC: [0x32CB], NFD: [0x32CB], NFKC: [0x0031, 0x0032, 0x6708], NFKD: [0x0031, 0x0032, 0x6708] }, +{ source: [0x32CC], NFC: [0x32CC], NFD: [0x32CC], NFKC: [0x0048, 0x0067], NFKD: [0x0048, 0x0067] }, +{ source: [0x32CD], NFC: [0x32CD], NFD: [0x32CD], NFKC: [0x0065, 0x0072, 0x0067], NFKD: [0x0065, 0x0072, 0x0067] }, +{ source: [0x32CE], NFC: [0x32CE], NFD: [0x32CE], NFKC: [0x0065, 0x0056], NFKD: [0x0065, 0x0056] }, +{ source: [0x32CF], NFC: [0x32CF], NFD: [0x32CF], NFKC: [0x004C, 0x0054, 0x0044], NFKD: [0x004C, 0x0054, 0x0044] }, +{ source: [0x32D0], NFC: [0x32D0], NFD: [0x32D0], NFKC: [0x30A2], NFKD: [0x30A2] }, +{ source: [0x32D1], NFC: [0x32D1], NFD: [0x32D1], NFKC: [0x30A4], NFKD: [0x30A4] }, +{ source: [0x32D2], NFC: [0x32D2], NFD: [0x32D2], NFKC: [0x30A6], NFKD: [0x30A6] }, +{ source: [0x32D3], NFC: [0x32D3], NFD: [0x32D3], NFKC: [0x30A8], NFKD: [0x30A8] }, +{ source: [0x32D4], NFC: [0x32D4], NFD: [0x32D4], NFKC: [0x30AA], NFKD: [0x30AA] }, +{ source: [0x32D5], NFC: [0x32D5], NFD: [0x32D5], NFKC: [0x30AB], NFKD: [0x30AB] }, +{ source: [0x32D6], NFC: [0x32D6], NFD: [0x32D6], NFKC: [0x30AD], NFKD: [0x30AD] }, +{ source: [0x32D7], NFC: [0x32D7], NFD: [0x32D7], NFKC: [0x30AF], NFKD: [0x30AF] }, +{ source: [0x32D8], NFC: [0x32D8], NFD: [0x32D8], NFKC: [0x30B1], NFKD: [0x30B1] }, +{ source: [0x32D9], NFC: [0x32D9], NFD: [0x32D9], NFKC: [0x30B3], NFKD: [0x30B3] }, +{ source: [0x32DA], NFC: [0x32DA], NFD: [0x32DA], NFKC: [0x30B5], NFKD: [0x30B5] }, +{ source: [0x32DB], NFC: [0x32DB], NFD: [0x32DB], NFKC: [0x30B7], NFKD: [0x30B7] }, +{ source: [0x32DC], NFC: [0x32DC], NFD: [0x32DC], NFKC: [0x30B9], NFKD: [0x30B9] }, +{ source: [0x32DD], NFC: [0x32DD], NFD: [0x32DD], NFKC: [0x30BB], NFKD: [0x30BB] }, +{ source: [0x32DE], NFC: [0x32DE], NFD: [0x32DE], NFKC: [0x30BD], NFKD: [0x30BD] }, +{ source: [0x32DF], NFC: [0x32DF], NFD: [0x32DF], NFKC: [0x30BF], NFKD: [0x30BF] }, +{ source: [0x32E0], NFC: [0x32E0], NFD: [0x32E0], NFKC: [0x30C1], NFKD: [0x30C1] }, +{ source: [0x32E1], NFC: [0x32E1], NFD: [0x32E1], NFKC: [0x30C4], NFKD: [0x30C4] }, +{ source: [0x32E2], NFC: [0x32E2], NFD: [0x32E2], NFKC: [0x30C6], NFKD: [0x30C6] }, +{ source: [0x32E3], NFC: [0x32E3], NFD: [0x32E3], NFKC: [0x30C8], NFKD: [0x30C8] }, +{ source: [0x32E4], NFC: [0x32E4], NFD: [0x32E4], NFKC: [0x30CA], NFKD: [0x30CA] }, +{ source: [0x32E5], NFC: [0x32E5], NFD: [0x32E5], NFKC: [0x30CB], NFKD: [0x30CB] }, +{ source: [0x32E6], NFC: [0x32E6], NFD: [0x32E6], NFKC: [0x30CC], NFKD: [0x30CC] }, +{ source: [0x32E7], NFC: [0x32E7], NFD: [0x32E7], NFKC: [0x30CD], NFKD: [0x30CD] }, +{ source: [0x32E8], NFC: [0x32E8], NFD: [0x32E8], NFKC: [0x30CE], NFKD: [0x30CE] }, +{ source: [0x32E9], NFC: [0x32E9], NFD: [0x32E9], NFKC: [0x30CF], NFKD: [0x30CF] }, +{ source: [0x32EA], NFC: [0x32EA], NFD: [0x32EA], NFKC: [0x30D2], NFKD: [0x30D2] }, +{ source: [0x32EB], NFC: [0x32EB], NFD: [0x32EB], NFKC: [0x30D5], NFKD: [0x30D5] }, +{ source: [0x32EC], NFC: [0x32EC], NFD: [0x32EC], NFKC: [0x30D8], NFKD: [0x30D8] }, +{ source: [0x32ED], NFC: [0x32ED], NFD: [0x32ED], NFKC: [0x30DB], NFKD: [0x30DB] }, +{ source: [0x32EE], NFC: [0x32EE], NFD: [0x32EE], NFKC: [0x30DE], NFKD: [0x30DE] }, +{ source: [0x32EF], NFC: [0x32EF], NFD: [0x32EF], NFKC: [0x30DF], NFKD: [0x30DF] }, +{ source: [0x32F0], NFC: [0x32F0], NFD: [0x32F0], NFKC: [0x30E0], NFKD: [0x30E0] }, +{ source: [0x32F1], NFC: [0x32F1], NFD: [0x32F1], NFKC: [0x30E1], NFKD: [0x30E1] }, +{ source: [0x32F2], NFC: [0x32F2], NFD: [0x32F2], NFKC: [0x30E2], NFKD: [0x30E2] }, +{ source: [0x32F3], NFC: [0x32F3], NFD: [0x32F3], NFKC: [0x30E4], NFKD: [0x30E4] }, +{ source: [0x32F4], NFC: [0x32F4], NFD: [0x32F4], NFKC: [0x30E6], NFKD: [0x30E6] }, +{ source: [0x32F5], NFC: [0x32F5], NFD: [0x32F5], NFKC: [0x30E8], NFKD: [0x30E8] }, +{ source: [0x32F6], NFC: [0x32F6], NFD: [0x32F6], NFKC: [0x30E9], NFKD: [0x30E9] }, +{ source: [0x32F7], NFC: [0x32F7], NFD: [0x32F7], NFKC: [0x30EA], NFKD: [0x30EA] }, +{ source: [0x32F8], NFC: [0x32F8], NFD: [0x32F8], NFKC: [0x30EB], NFKD: [0x30EB] }, +{ source: [0x32F9], NFC: [0x32F9], NFD: [0x32F9], NFKC: [0x30EC], NFKD: [0x30EC] }, +{ source: [0x32FA], NFC: [0x32FA], NFD: [0x32FA], NFKC: [0x30ED], NFKD: [0x30ED] }, +{ source: [0x32FB], NFC: [0x32FB], NFD: [0x32FB], NFKC: [0x30EF], NFKD: [0x30EF] }, +{ source: [0x32FC], NFC: [0x32FC], NFD: [0x32FC], NFKC: [0x30F0], NFKD: [0x30F0] }, +{ source: [0x32FD], NFC: [0x32FD], NFD: [0x32FD], NFKC: [0x30F1], NFKD: [0x30F1] }, +{ source: [0x32FE], NFC: [0x32FE], NFD: [0x32FE], NFKC: [0x30F2], NFKD: [0x30F2] }, +{ source: [0x32FF], NFC: [0x32FF], NFD: [0x32FF], NFKC: [0x4EE4, 0x548C], NFKD: [0x4EE4, 0x548C] }, +{ source: [0x3300], NFC: [0x3300], NFD: [0x3300], NFKC: [0x30A2, 0x30D1, 0x30FC, 0x30C8], NFKD: [0x30A2, 0x30CF, 0x309A, 0x30FC, 0x30C8] }, +{ source: [0x3301], NFC: [0x3301], NFD: [0x3301], NFKC: [0x30A2, 0x30EB, 0x30D5, 0x30A1], NFKD: [0x30A2, 0x30EB, 0x30D5, 0x30A1] }, +{ source: [0x3302], NFC: [0x3302], NFD: [0x3302], NFKC: [0x30A2, 0x30F3, 0x30DA, 0x30A2], NFKD: [0x30A2, 0x30F3, 0x30D8, 0x309A, 0x30A2] }, +{ source: [0x3303], NFC: [0x3303], NFD: [0x3303], NFKC: [0x30A2, 0x30FC, 0x30EB], NFKD: [0x30A2, 0x30FC, 0x30EB] }, +{ source: [0x3304], NFC: [0x3304], NFD: [0x3304], NFKC: [0x30A4, 0x30CB, 0x30F3, 0x30B0], NFKD: [0x30A4, 0x30CB, 0x30F3, 0x30AF, 0x3099] }, +{ source: [0x3305], NFC: [0x3305], NFD: [0x3305], NFKC: [0x30A4, 0x30F3, 0x30C1], NFKD: [0x30A4, 0x30F3, 0x30C1] }, +{ source: [0x3306], NFC: [0x3306], NFD: [0x3306], NFKC: [0x30A6, 0x30A9, 0x30F3], NFKD: [0x30A6, 0x30A9, 0x30F3] }, +{ source: [0x3307], NFC: [0x3307], NFD: [0x3307], NFKC: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9], NFKD: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C8, 0x3099] }, +{ source: [0x3308], NFC: [0x3308], NFD: [0x3308], NFKC: [0x30A8, 0x30FC, 0x30AB, 0x30FC], NFKD: [0x30A8, 0x30FC, 0x30AB, 0x30FC] }, +{ source: [0x3309], NFC: [0x3309], NFD: [0x3309], NFKC: [0x30AA, 0x30F3, 0x30B9], NFKD: [0x30AA, 0x30F3, 0x30B9] }, +{ source: [0x330A], NFC: [0x330A], NFD: [0x330A], NFKC: [0x30AA, 0x30FC, 0x30E0], NFKD: [0x30AA, 0x30FC, 0x30E0] }, +{ source: [0x330B], NFC: [0x330B], NFD: [0x330B], NFKC: [0x30AB, 0x30A4, 0x30EA], NFKD: [0x30AB, 0x30A4, 0x30EA] }, +{ source: [0x330C], NFC: [0x330C], NFD: [0x330C], NFKC: [0x30AB, 0x30E9, 0x30C3, 0x30C8], NFKD: [0x30AB, 0x30E9, 0x30C3, 0x30C8] }, +{ source: [0x330D], NFC: [0x330D], NFD: [0x330D], NFKC: [0x30AB, 0x30ED, 0x30EA, 0x30FC], NFKD: [0x30AB, 0x30ED, 0x30EA, 0x30FC] }, +{ source: [0x330E], NFC: [0x330E], NFD: [0x330E], NFKC: [0x30AC, 0x30ED, 0x30F3], NFKD: [0x30AB, 0x3099, 0x30ED, 0x30F3] }, +{ source: [0x330F], NFC: [0x330F], NFD: [0x330F], NFKC: [0x30AC, 0x30F3, 0x30DE], NFKD: [0x30AB, 0x3099, 0x30F3, 0x30DE] }, +{ source: [0x3310], NFC: [0x3310], NFD: [0x3310], NFKC: [0x30AE, 0x30AC], NFKD: [0x30AD, 0x3099, 0x30AB, 0x3099] }, +{ source: [0x3311], NFC: [0x3311], NFD: [0x3311], NFKC: [0x30AE, 0x30CB, 0x30FC], NFKD: [0x30AD, 0x3099, 0x30CB, 0x30FC] }, +{ source: [0x3312], NFC: [0x3312], NFD: [0x3312], NFKC: [0x30AD, 0x30E5, 0x30EA, 0x30FC], NFKD: [0x30AD, 0x30E5, 0x30EA, 0x30FC] }, +{ source: [0x3313], NFC: [0x3313], NFD: [0x3313], NFKC: [0x30AE, 0x30EB, 0x30C0, 0x30FC], NFKD: [0x30AD, 0x3099, 0x30EB, 0x30BF, 0x3099, 0x30FC] }, +{ source: [0x3314], NFC: [0x3314], NFD: [0x3314], NFKC: [0x30AD, 0x30ED], NFKD: [0x30AD, 0x30ED] }, +{ source: [0x3315], NFC: [0x3315], NFD: [0x3315], NFKC: [0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0], NFKD: [0x30AD, 0x30ED, 0x30AF, 0x3099, 0x30E9, 0x30E0] }, +{ source: [0x3316], NFC: [0x3316], NFD: [0x3316], NFKC: [0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB], NFKD: [0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB] }, +{ source: [0x3317], NFC: [0x3317], NFD: [0x3317], NFKC: [0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8], NFKD: [0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8] }, +{ source: [0x3318], NFC: [0x3318], NFD: [0x3318], NFKC: [0x30B0, 0x30E9, 0x30E0], NFKD: [0x30AF, 0x3099, 0x30E9, 0x30E0] }, +{ source: [0x3319], NFC: [0x3319], NFD: [0x3319], NFKC: [0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3], NFKD: [0x30AF, 0x3099, 0x30E9, 0x30E0, 0x30C8, 0x30F3] }, +{ source: [0x331A], NFC: [0x331A], NFD: [0x331A], NFKC: [0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED], NFKD: [0x30AF, 0x30EB, 0x30BB, 0x3099, 0x30A4, 0x30ED] }, +{ source: [0x331B], NFC: [0x331B], NFD: [0x331B], NFKC: [0x30AF, 0x30ED, 0x30FC, 0x30CD], NFKD: [0x30AF, 0x30ED, 0x30FC, 0x30CD] }, +{ source: [0x331C], NFC: [0x331C], NFD: [0x331C], NFKC: [0x30B1, 0x30FC, 0x30B9], NFKD: [0x30B1, 0x30FC, 0x30B9] }, +{ source: [0x331D], NFC: [0x331D], NFD: [0x331D], NFKC: [0x30B3, 0x30EB, 0x30CA], NFKD: [0x30B3, 0x30EB, 0x30CA] }, +{ source: [0x331E], NFC: [0x331E], NFD: [0x331E], NFKC: [0x30B3, 0x30FC, 0x30DD], NFKD: [0x30B3, 0x30FC, 0x30DB, 0x309A] }, +{ source: [0x331F], NFC: [0x331F], NFD: [0x331F], NFKC: [0x30B5, 0x30A4, 0x30AF, 0x30EB], NFKD: [0x30B5, 0x30A4, 0x30AF, 0x30EB] }, +{ source: [0x3320], NFC: [0x3320], NFD: [0x3320], NFKC: [0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0], NFKD: [0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0] }, +{ source: [0x3321], NFC: [0x3321], NFD: [0x3321], NFKC: [0x30B7, 0x30EA, 0x30F3, 0x30B0], NFKD: [0x30B7, 0x30EA, 0x30F3, 0x30AF, 0x3099] }, +{ source: [0x3322], NFC: [0x3322], NFD: [0x3322], NFKC: [0x30BB, 0x30F3, 0x30C1], NFKD: [0x30BB, 0x30F3, 0x30C1] }, +{ source: [0x3323], NFC: [0x3323], NFD: [0x3323], NFKC: [0x30BB, 0x30F3, 0x30C8], NFKD: [0x30BB, 0x30F3, 0x30C8] }, +{ source: [0x3324], NFC: [0x3324], NFD: [0x3324], NFKC: [0x30C0, 0x30FC, 0x30B9], NFKD: [0x30BF, 0x3099, 0x30FC, 0x30B9] }, +{ source: [0x3325], NFC: [0x3325], NFD: [0x3325], NFKC: [0x30C7, 0x30B7], NFKD: [0x30C6, 0x3099, 0x30B7] }, +{ source: [0x3326], NFC: [0x3326], NFD: [0x3326], NFKC: [0x30C9, 0x30EB], NFKD: [0x30C8, 0x3099, 0x30EB] }, +{ source: [0x3327], NFC: [0x3327], NFD: [0x3327], NFKC: [0x30C8, 0x30F3], NFKD: [0x30C8, 0x30F3] }, +{ source: [0x3328], NFC: [0x3328], NFD: [0x3328], NFKC: [0x30CA, 0x30CE], NFKD: [0x30CA, 0x30CE] }, +{ source: [0x3329], NFC: [0x3329], NFD: [0x3329], NFKC: [0x30CE, 0x30C3, 0x30C8], NFKD: [0x30CE, 0x30C3, 0x30C8] }, +{ source: [0x332A], NFC: [0x332A], NFD: [0x332A], NFKC: [0x30CF, 0x30A4, 0x30C4], NFKD: [0x30CF, 0x30A4, 0x30C4] }, +{ source: [0x332B], NFC: [0x332B], NFD: [0x332B], NFKC: [0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8], NFKD: [0x30CF, 0x309A, 0x30FC, 0x30BB, 0x30F3, 0x30C8] }, +{ source: [0x332C], NFC: [0x332C], NFD: [0x332C], NFKC: [0x30D1, 0x30FC, 0x30C4], NFKD: [0x30CF, 0x309A, 0x30FC, 0x30C4] }, +{ source: [0x332D], NFC: [0x332D], NFD: [0x332D], NFKC: [0x30D0, 0x30FC, 0x30EC, 0x30EB], NFKD: [0x30CF, 0x3099, 0x30FC, 0x30EC, 0x30EB] }, +{ source: [0x332E], NFC: [0x332E], NFD: [0x332E], NFKC: [0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB], NFKD: [0x30D2, 0x309A, 0x30A2, 0x30B9, 0x30C8, 0x30EB] }, +{ source: [0x332F], NFC: [0x332F], NFD: [0x332F], NFKC: [0x30D4, 0x30AF, 0x30EB], NFKD: [0x30D2, 0x309A, 0x30AF, 0x30EB] }, +{ source: [0x3330], NFC: [0x3330], NFD: [0x3330], NFKC: [0x30D4, 0x30B3], NFKD: [0x30D2, 0x309A, 0x30B3] }, +{ source: [0x3331], NFC: [0x3331], NFD: [0x3331], NFKC: [0x30D3, 0x30EB], NFKD: [0x30D2, 0x3099, 0x30EB] }, +{ source: [0x3332], NFC: [0x3332], NFD: [0x3332], NFKC: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9], NFKD: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C8, 0x3099] }, +{ source: [0x3333], NFC: [0x3333], NFD: [0x3333], NFKC: [0x30D5, 0x30A3, 0x30FC, 0x30C8], NFKD: [0x30D5, 0x30A3, 0x30FC, 0x30C8] }, +{ source: [0x3334], NFC: [0x3334], NFD: [0x3334], NFKC: [0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB], NFKD: [0x30D5, 0x3099, 0x30C3, 0x30B7, 0x30A7, 0x30EB] }, +{ source: [0x3335], NFC: [0x3335], NFD: [0x3335], NFKC: [0x30D5, 0x30E9, 0x30F3], NFKD: [0x30D5, 0x30E9, 0x30F3] }, +{ source: [0x3336], NFC: [0x3336], NFD: [0x3336], NFKC: [0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB], NFKD: [0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB] }, +{ source: [0x3337], NFC: [0x3337], NFD: [0x3337], NFKC: [0x30DA, 0x30BD], NFKD: [0x30D8, 0x309A, 0x30BD] }, +{ source: [0x3338], NFC: [0x3338], NFD: [0x3338], NFKC: [0x30DA, 0x30CB, 0x30D2], NFKD: [0x30D8, 0x309A, 0x30CB, 0x30D2] }, +{ source: [0x3339], NFC: [0x3339], NFD: [0x3339], NFKC: [0x30D8, 0x30EB, 0x30C4], NFKD: [0x30D8, 0x30EB, 0x30C4] }, +{ source: [0x333A], NFC: [0x333A], NFD: [0x333A], NFKC: [0x30DA, 0x30F3, 0x30B9], NFKD: [0x30D8, 0x309A, 0x30F3, 0x30B9] }, +{ source: [0x333B], NFC: [0x333B], NFD: [0x333B], NFKC: [0x30DA, 0x30FC, 0x30B8], NFKD: [0x30D8, 0x309A, 0x30FC, 0x30B7, 0x3099] }, +{ source: [0x333C], NFC: [0x333C], NFD: [0x333C], NFKC: [0x30D9, 0x30FC, 0x30BF], NFKD: [0x30D8, 0x3099, 0x30FC, 0x30BF] }, +{ source: [0x333D], NFC: [0x333D], NFD: [0x333D], NFKC: [0x30DD, 0x30A4, 0x30F3, 0x30C8], NFKD: [0x30DB, 0x309A, 0x30A4, 0x30F3, 0x30C8] }, +{ source: [0x333E], NFC: [0x333E], NFD: [0x333E], NFKC: [0x30DC, 0x30EB, 0x30C8], NFKD: [0x30DB, 0x3099, 0x30EB, 0x30C8] }, +{ source: [0x333F], NFC: [0x333F], NFD: [0x333F], NFKC: [0x30DB, 0x30F3], NFKD: [0x30DB, 0x30F3] }, +{ source: [0x3340], NFC: [0x3340], NFD: [0x3340], NFKC: [0x30DD, 0x30F3, 0x30C9], NFKD: [0x30DB, 0x309A, 0x30F3, 0x30C8, 0x3099] }, +{ source: [0x3341], NFC: [0x3341], NFD: [0x3341], NFKC: [0x30DB, 0x30FC, 0x30EB], NFKD: [0x30DB, 0x30FC, 0x30EB] }, +{ source: [0x3342], NFC: [0x3342], NFD: [0x3342], NFKC: [0x30DB, 0x30FC, 0x30F3], NFKD: [0x30DB, 0x30FC, 0x30F3] }, +{ source: [0x3343], NFC: [0x3343], NFD: [0x3343], NFKC: [0x30DE, 0x30A4, 0x30AF, 0x30ED], NFKD: [0x30DE, 0x30A4, 0x30AF, 0x30ED] }, +{ source: [0x3344], NFC: [0x3344], NFD: [0x3344], NFKC: [0x30DE, 0x30A4, 0x30EB], NFKD: [0x30DE, 0x30A4, 0x30EB] }, +{ source: [0x3345], NFC: [0x3345], NFD: [0x3345], NFKC: [0x30DE, 0x30C3, 0x30CF], NFKD: [0x30DE, 0x30C3, 0x30CF] }, +{ source: [0x3346], NFC: [0x3346], NFD: [0x3346], NFKC: [0x30DE, 0x30EB, 0x30AF], NFKD: [0x30DE, 0x30EB, 0x30AF] }, +{ source: [0x3347], NFC: [0x3347], NFD: [0x3347], NFKC: [0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3], NFKD: [0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3] }, +{ source: [0x3348], NFC: [0x3348], NFD: [0x3348], NFKC: [0x30DF, 0x30AF, 0x30ED, 0x30F3], NFKD: [0x30DF, 0x30AF, 0x30ED, 0x30F3] }, +{ source: [0x3349], NFC: [0x3349], NFD: [0x3349], NFKC: [0x30DF, 0x30EA], NFKD: [0x30DF, 0x30EA] }, +{ source: [0x334A], NFC: [0x334A], NFD: [0x334A], NFKC: [0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB], NFKD: [0x30DF, 0x30EA, 0x30CF, 0x3099, 0x30FC, 0x30EB] }, +{ source: [0x334B], NFC: [0x334B], NFD: [0x334B], NFKC: [0x30E1, 0x30AC], NFKD: [0x30E1, 0x30AB, 0x3099] }, +{ source: [0x334C], NFC: [0x334C], NFD: [0x334C], NFKC: [0x30E1, 0x30AC, 0x30C8, 0x30F3], NFKD: [0x30E1, 0x30AB, 0x3099, 0x30C8, 0x30F3] }, +{ source: [0x334D], NFC: [0x334D], NFD: [0x334D], NFKC: [0x30E1, 0x30FC, 0x30C8, 0x30EB], NFKD: [0x30E1, 0x30FC, 0x30C8, 0x30EB] }, +{ source: [0x334E], NFC: [0x334E], NFD: [0x334E], NFKC: [0x30E4, 0x30FC, 0x30C9], NFKD: [0x30E4, 0x30FC, 0x30C8, 0x3099] }, +{ source: [0x334F], NFC: [0x334F], NFD: [0x334F], NFKC: [0x30E4, 0x30FC, 0x30EB], NFKD: [0x30E4, 0x30FC, 0x30EB] }, +{ source: [0x3350], NFC: [0x3350], NFD: [0x3350], NFKC: [0x30E6, 0x30A2, 0x30F3], NFKD: [0x30E6, 0x30A2, 0x30F3] }, +{ source: [0x3351], NFC: [0x3351], NFD: [0x3351], NFKC: [0x30EA, 0x30C3, 0x30C8, 0x30EB], NFKD: [0x30EA, 0x30C3, 0x30C8, 0x30EB] }, +{ source: [0x3352], NFC: [0x3352], NFD: [0x3352], NFKC: [0x30EA, 0x30E9], NFKD: [0x30EA, 0x30E9] }, +{ source: [0x3353], NFC: [0x3353], NFD: [0x3353], NFKC: [0x30EB, 0x30D4, 0x30FC], NFKD: [0x30EB, 0x30D2, 0x309A, 0x30FC] }, +{ source: [0x3354], NFC: [0x3354], NFD: [0x3354], NFKC: [0x30EB, 0x30FC, 0x30D6, 0x30EB], NFKD: [0x30EB, 0x30FC, 0x30D5, 0x3099, 0x30EB] }, +{ source: [0x3355], NFC: [0x3355], NFD: [0x3355], NFKC: [0x30EC, 0x30E0], NFKD: [0x30EC, 0x30E0] }, +{ source: [0x3356], NFC: [0x3356], NFD: [0x3356], NFKC: [0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3], NFKD: [0x30EC, 0x30F3, 0x30C8, 0x30B1, 0x3099, 0x30F3] }, +{ source: [0x3357], NFC: [0x3357], NFD: [0x3357], NFKC: [0x30EF, 0x30C3, 0x30C8], NFKD: [0x30EF, 0x30C3, 0x30C8] }, +{ source: [0x3358], NFC: [0x3358], NFD: [0x3358], NFKC: [0x0030, 0x70B9], NFKD: [0x0030, 0x70B9] }, +{ source: [0x3359], NFC: [0x3359], NFD: [0x3359], NFKC: [0x0031, 0x70B9], NFKD: [0x0031, 0x70B9] }, +{ source: [0x335A], NFC: [0x335A], NFD: [0x335A], NFKC: [0x0032, 0x70B9], NFKD: [0x0032, 0x70B9] }, +{ source: [0x335B], NFC: [0x335B], NFD: [0x335B], NFKC: [0x0033, 0x70B9], NFKD: [0x0033, 0x70B9] }, +{ source: [0x335C], NFC: [0x335C], NFD: [0x335C], NFKC: [0x0034, 0x70B9], NFKD: [0x0034, 0x70B9] }, +{ source: [0x335D], NFC: [0x335D], NFD: [0x335D], NFKC: [0x0035, 0x70B9], NFKD: [0x0035, 0x70B9] }, +{ source: [0x335E], NFC: [0x335E], NFD: [0x335E], NFKC: [0x0036, 0x70B9], NFKD: [0x0036, 0x70B9] }, +{ source: [0x335F], NFC: [0x335F], NFD: [0x335F], NFKC: [0x0037, 0x70B9], NFKD: [0x0037, 0x70B9] }, +{ source: [0x3360], NFC: [0x3360], NFD: [0x3360], NFKC: [0x0038, 0x70B9], NFKD: [0x0038, 0x70B9] }, +{ source: [0x3361], NFC: [0x3361], NFD: [0x3361], NFKC: [0x0039, 0x70B9], NFKD: [0x0039, 0x70B9] }, +{ source: [0x3362], NFC: [0x3362], NFD: [0x3362], NFKC: [0x0031, 0x0030, 0x70B9], NFKD: [0x0031, 0x0030, 0x70B9] }, +{ source: [0x3363], NFC: [0x3363], NFD: [0x3363], NFKC: [0x0031, 0x0031, 0x70B9], NFKD: [0x0031, 0x0031, 0x70B9] }, +{ source: [0x3364], NFC: [0x3364], NFD: [0x3364], NFKC: [0x0031, 0x0032, 0x70B9], NFKD: [0x0031, 0x0032, 0x70B9] }, +{ source: [0x3365], NFC: [0x3365], NFD: [0x3365], NFKC: [0x0031, 0x0033, 0x70B9], NFKD: [0x0031, 0x0033, 0x70B9] }, +{ source: [0x3366], NFC: [0x3366], NFD: [0x3366], NFKC: [0x0031, 0x0034, 0x70B9], NFKD: [0x0031, 0x0034, 0x70B9] }, +{ source: [0x3367], NFC: [0x3367], NFD: [0x3367], NFKC: [0x0031, 0x0035, 0x70B9], NFKD: [0x0031, 0x0035, 0x70B9] }, +{ source: [0x3368], NFC: [0x3368], NFD: [0x3368], NFKC: [0x0031, 0x0036, 0x70B9], NFKD: [0x0031, 0x0036, 0x70B9] }, +{ source: [0x3369], NFC: [0x3369], NFD: [0x3369], NFKC: [0x0031, 0x0037, 0x70B9], NFKD: [0x0031, 0x0037, 0x70B9] }, +{ source: [0x336A], NFC: [0x336A], NFD: [0x336A], NFKC: [0x0031, 0x0038, 0x70B9], NFKD: [0x0031, 0x0038, 0x70B9] }, +{ source: [0x336B], NFC: [0x336B], NFD: [0x336B], NFKC: [0x0031, 0x0039, 0x70B9], NFKD: [0x0031, 0x0039, 0x70B9] }, +{ source: [0x336C], NFC: [0x336C], NFD: [0x336C], NFKC: [0x0032, 0x0030, 0x70B9], NFKD: [0x0032, 0x0030, 0x70B9] }, +{ source: [0x336D], NFC: [0x336D], NFD: [0x336D], NFKC: [0x0032, 0x0031, 0x70B9], NFKD: [0x0032, 0x0031, 0x70B9] }, +{ source: [0x336E], NFC: [0x336E], NFD: [0x336E], NFKC: [0x0032, 0x0032, 0x70B9], NFKD: [0x0032, 0x0032, 0x70B9] }, +{ source: [0x336F], NFC: [0x336F], NFD: [0x336F], NFKC: [0x0032, 0x0033, 0x70B9], NFKD: [0x0032, 0x0033, 0x70B9] }, +{ source: [0x3370], NFC: [0x3370], NFD: [0x3370], NFKC: [0x0032, 0x0034, 0x70B9], NFKD: [0x0032, 0x0034, 0x70B9] }, +{ source: [0x3371], NFC: [0x3371], NFD: [0x3371], NFKC: [0x0068, 0x0050, 0x0061], NFKD: [0x0068, 0x0050, 0x0061] }, +{ source: [0x3372], NFC: [0x3372], NFD: [0x3372], NFKC: [0x0064, 0x0061], NFKD: [0x0064, 0x0061] }, +{ source: [0x3373], NFC: [0x3373], NFD: [0x3373], NFKC: [0x0041, 0x0055], NFKD: [0x0041, 0x0055] }, +{ source: [0x3374], NFC: [0x3374], NFD: [0x3374], NFKC: [0x0062, 0x0061, 0x0072], NFKD: [0x0062, 0x0061, 0x0072] }, +{ source: [0x3375], NFC: [0x3375], NFD: [0x3375], NFKC: [0x006F, 0x0056], NFKD: [0x006F, 0x0056] }, +{ source: [0x3376], NFC: [0x3376], NFD: [0x3376], NFKC: [0x0070, 0x0063], NFKD: [0x0070, 0x0063] }, +{ source: [0x3377], NFC: [0x3377], NFD: [0x3377], NFKC: [0x0064, 0x006D], NFKD: [0x0064, 0x006D] }, +{ source: [0x3378], NFC: [0x3378], NFD: [0x3378], NFKC: [0x0064, 0x006D, 0x0032], NFKD: [0x0064, 0x006D, 0x0032] }, +{ source: [0x3379], NFC: [0x3379], NFD: [0x3379], NFKC: [0x0064, 0x006D, 0x0033], NFKD: [0x0064, 0x006D, 0x0033] }, +{ source: [0x337A], NFC: [0x337A], NFD: [0x337A], NFKC: [0x0049, 0x0055], NFKD: [0x0049, 0x0055] }, +{ source: [0x337B], NFC: [0x337B], NFD: [0x337B], NFKC: [0x5E73, 0x6210], NFKD: [0x5E73, 0x6210] }, +{ source: [0x337C], NFC: [0x337C], NFD: [0x337C], NFKC: [0x662D, 0x548C], NFKD: [0x662D, 0x548C] }, +{ source: [0x337D], NFC: [0x337D], NFD: [0x337D], NFKC: [0x5927, 0x6B63], NFKD: [0x5927, 0x6B63] }, +{ source: [0x337E], NFC: [0x337E], NFD: [0x337E], NFKC: [0x660E, 0x6CBB], NFKD: [0x660E, 0x6CBB] }, +{ source: [0x337F], NFC: [0x337F], NFD: [0x337F], NFKC: [0x682A, 0x5F0F, 0x4F1A, 0x793E], NFKD: [0x682A, 0x5F0F, 0x4F1A, 0x793E] }, +{ source: [0x3380], NFC: [0x3380], NFD: [0x3380], NFKC: [0x0070, 0x0041], NFKD: [0x0070, 0x0041] }, +{ source: [0x3381], NFC: [0x3381], NFD: [0x3381], NFKC: [0x006E, 0x0041], NFKD: [0x006E, 0x0041] }, +{ source: [0x3382], NFC: [0x3382], NFD: [0x3382], NFKC: [0x03BC, 0x0041], NFKD: [0x03BC, 0x0041] }, +{ source: [0x3383], NFC: [0x3383], NFD: [0x3383], NFKC: [0x006D, 0x0041], NFKD: [0x006D, 0x0041] }, +{ source: [0x3384], NFC: [0x3384], NFD: [0x3384], NFKC: [0x006B, 0x0041], NFKD: [0x006B, 0x0041] }, +{ source: [0x3385], NFC: [0x3385], NFD: [0x3385], NFKC: [0x004B, 0x0042], NFKD: [0x004B, 0x0042] }, +{ source: [0x3386], NFC: [0x3386], NFD: [0x3386], NFKC: [0x004D, 0x0042], NFKD: [0x004D, 0x0042] }, +{ source: [0x3387], NFC: [0x3387], NFD: [0x3387], NFKC: [0x0047, 0x0042], NFKD: [0x0047, 0x0042] }, +{ source: [0x3388], NFC: [0x3388], NFD: [0x3388], NFKC: [0x0063, 0x0061, 0x006C], NFKD: [0x0063, 0x0061, 0x006C] }, +{ source: [0x3389], NFC: [0x3389], NFD: [0x3389], NFKC: [0x006B, 0x0063, 0x0061, 0x006C], NFKD: [0x006B, 0x0063, 0x0061, 0x006C] }, +{ source: [0x338A], NFC: [0x338A], NFD: [0x338A], NFKC: [0x0070, 0x0046], NFKD: [0x0070, 0x0046] }, +{ source: [0x338B], NFC: [0x338B], NFD: [0x338B], NFKC: [0x006E, 0x0046], NFKD: [0x006E, 0x0046] }, +{ source: [0x338C], NFC: [0x338C], NFD: [0x338C], NFKC: [0x03BC, 0x0046], NFKD: [0x03BC, 0x0046] }, +{ source: [0x338D], NFC: [0x338D], NFD: [0x338D], NFKC: [0x03BC, 0x0067], NFKD: [0x03BC, 0x0067] }, +{ source: [0x338E], NFC: [0x338E], NFD: [0x338E], NFKC: [0x006D, 0x0067], NFKD: [0x006D, 0x0067] }, +{ source: [0x338F], NFC: [0x338F], NFD: [0x338F], NFKC: [0x006B, 0x0067], NFKD: [0x006B, 0x0067] }, +{ source: [0x3390], NFC: [0x3390], NFD: [0x3390], NFKC: [0x0048, 0x007A], NFKD: [0x0048, 0x007A] }, +{ source: [0x3391], NFC: [0x3391], NFD: [0x3391], NFKC: [0x006B, 0x0048, 0x007A], NFKD: [0x006B, 0x0048, 0x007A] }, +{ source: [0x3392], NFC: [0x3392], NFD: [0x3392], NFKC: [0x004D, 0x0048, 0x007A], NFKD: [0x004D, 0x0048, 0x007A] }, +{ source: [0x3393], NFC: [0x3393], NFD: [0x3393], NFKC: [0x0047, 0x0048, 0x007A], NFKD: [0x0047, 0x0048, 0x007A] }, +{ source: [0x3394], NFC: [0x3394], NFD: [0x3394], NFKC: [0x0054, 0x0048, 0x007A], NFKD: [0x0054, 0x0048, 0x007A] }, +{ source: [0x3395], NFC: [0x3395], NFD: [0x3395], NFKC: [0x03BC, 0x006C], NFKD: [0x03BC, 0x006C] }, +{ source: [0x3396], NFC: [0x3396], NFD: [0x3396], NFKC: [0x006D, 0x006C], NFKD: [0x006D, 0x006C] }, +{ source: [0x3397], NFC: [0x3397], NFD: [0x3397], NFKC: [0x0064, 0x006C], NFKD: [0x0064, 0x006C] }, +{ source: [0x3398], NFC: [0x3398], NFD: [0x3398], NFKC: [0x006B, 0x006C], NFKD: [0x006B, 0x006C] }, +{ source: [0x3399], NFC: [0x3399], NFD: [0x3399], NFKC: [0x0066, 0x006D], NFKD: [0x0066, 0x006D] }, +{ source: [0x339A], NFC: [0x339A], NFD: [0x339A], NFKC: [0x006E, 0x006D], NFKD: [0x006E, 0x006D] }, +{ source: [0x339B], NFC: [0x339B], NFD: [0x339B], NFKC: [0x03BC, 0x006D], NFKD: [0x03BC, 0x006D] }, +{ source: [0x339C], NFC: [0x339C], NFD: [0x339C], NFKC: [0x006D, 0x006D], NFKD: [0x006D, 0x006D] }, +{ source: [0x339D], NFC: [0x339D], NFD: [0x339D], NFKC: [0x0063, 0x006D], NFKD: [0x0063, 0x006D] }, +{ source: [0x339E], NFC: [0x339E], NFD: [0x339E], NFKC: [0x006B, 0x006D], NFKD: [0x006B, 0x006D] }, +{ source: [0x339F], NFC: [0x339F], NFD: [0x339F], NFKC: [0x006D, 0x006D, 0x0032], NFKD: [0x006D, 0x006D, 0x0032] }, +{ source: [0x33A0], NFC: [0x33A0], NFD: [0x33A0], NFKC: [0x0063, 0x006D, 0x0032], NFKD: [0x0063, 0x006D, 0x0032] }, +{ source: [0x33A1], NFC: [0x33A1], NFD: [0x33A1], NFKC: [0x006D, 0x0032], NFKD: [0x006D, 0x0032] }, +{ source: [0x33A2], NFC: [0x33A2], NFD: [0x33A2], NFKC: [0x006B, 0x006D, 0x0032], NFKD: [0x006B, 0x006D, 0x0032] }, +{ source: [0x33A3], NFC: [0x33A3], NFD: [0x33A3], NFKC: [0x006D, 0x006D, 0x0033], NFKD: [0x006D, 0x006D, 0x0033] }, +{ source: [0x33A4], NFC: [0x33A4], NFD: [0x33A4], NFKC: [0x0063, 0x006D, 0x0033], NFKD: [0x0063, 0x006D, 0x0033] }, +{ source: [0x33A5], NFC: [0x33A5], NFD: [0x33A5], NFKC: [0x006D, 0x0033], NFKD: [0x006D, 0x0033] }, +{ source: [0x33A6], NFC: [0x33A6], NFD: [0x33A6], NFKC: [0x006B, 0x006D, 0x0033], NFKD: [0x006B, 0x006D, 0x0033] }, +{ source: [0x33A7], NFC: [0x33A7], NFD: [0x33A7], NFKC: [0x006D, 0x2215, 0x0073], NFKD: [0x006D, 0x2215, 0x0073] }, +{ source: [0x33A8], NFC: [0x33A8], NFD: [0x33A8], NFKC: [0x006D, 0x2215, 0x0073, 0x0032], NFKD: [0x006D, 0x2215, 0x0073, 0x0032] }, +{ source: [0x33A9], NFC: [0x33A9], NFD: [0x33A9], NFKC: [0x0050, 0x0061], NFKD: [0x0050, 0x0061] }, +{ source: [0x33AA], NFC: [0x33AA], NFD: [0x33AA], NFKC: [0x006B, 0x0050, 0x0061], NFKD: [0x006B, 0x0050, 0x0061] }, +{ source: [0x33AB], NFC: [0x33AB], NFD: [0x33AB], NFKC: [0x004D, 0x0050, 0x0061], NFKD: [0x004D, 0x0050, 0x0061] }, +{ source: [0x33AC], NFC: [0x33AC], NFD: [0x33AC], NFKC: [0x0047, 0x0050, 0x0061], NFKD: [0x0047, 0x0050, 0x0061] }, +{ source: [0x33AD], NFC: [0x33AD], NFD: [0x33AD], NFKC: [0x0072, 0x0061, 0x0064], NFKD: [0x0072, 0x0061, 0x0064] }, +{ source: [0x33AE], NFC: [0x33AE], NFD: [0x33AE], NFKC: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073], NFKD: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073] }, +{ source: [0x33AF], NFC: [0x33AF], NFD: [0x33AF], NFKC: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0032], NFKD: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0032] }, +{ source: [0x33B0], NFC: [0x33B0], NFD: [0x33B0], NFKC: [0x0070, 0x0073], NFKD: [0x0070, 0x0073] }, +{ source: [0x33B1], NFC: [0x33B1], NFD: [0x33B1], NFKC: [0x006E, 0x0073], NFKD: [0x006E, 0x0073] }, +{ source: [0x33B2], NFC: [0x33B2], NFD: [0x33B2], NFKC: [0x03BC, 0x0073], NFKD: [0x03BC, 0x0073] }, +{ source: [0x33B3], NFC: [0x33B3], NFD: [0x33B3], NFKC: [0x006D, 0x0073], NFKD: [0x006D, 0x0073] }, +{ source: [0x33B4], NFC: [0x33B4], NFD: [0x33B4], NFKC: [0x0070, 0x0056], NFKD: [0x0070, 0x0056] }, +{ source: [0x33B5], NFC: [0x33B5], NFD: [0x33B5], NFKC: [0x006E, 0x0056], NFKD: [0x006E, 0x0056] }, +{ source: [0x33B6], NFC: [0x33B6], NFD: [0x33B6], NFKC: [0x03BC, 0x0056], NFKD: [0x03BC, 0x0056] }, +{ source: [0x33B7], NFC: [0x33B7], NFD: [0x33B7], NFKC: [0x006D, 0x0056], NFKD: [0x006D, 0x0056] }, +{ source: [0x33B8], NFC: [0x33B8], NFD: [0x33B8], NFKC: [0x006B, 0x0056], NFKD: [0x006B, 0x0056] }, +{ source: [0x33B9], NFC: [0x33B9], NFD: [0x33B9], NFKC: [0x004D, 0x0056], NFKD: [0x004D, 0x0056] }, +{ source: [0x33BA], NFC: [0x33BA], NFD: [0x33BA], NFKC: [0x0070, 0x0057], NFKD: [0x0070, 0x0057] }, +{ source: [0x33BB], NFC: [0x33BB], NFD: [0x33BB], NFKC: [0x006E, 0x0057], NFKD: [0x006E, 0x0057] }, +{ source: [0x33BC], NFC: [0x33BC], NFD: [0x33BC], NFKC: [0x03BC, 0x0057], NFKD: [0x03BC, 0x0057] }, +{ source: [0x33BD], NFC: [0x33BD], NFD: [0x33BD], NFKC: [0x006D, 0x0057], NFKD: [0x006D, 0x0057] }, +{ source: [0x33BE], NFC: [0x33BE], NFD: [0x33BE], NFKC: [0x006B, 0x0057], NFKD: [0x006B, 0x0057] }, +{ source: [0x33BF], NFC: [0x33BF], NFD: [0x33BF], NFKC: [0x004D, 0x0057], NFKD: [0x004D, 0x0057] }, +{ source: [0x33C0], NFC: [0x33C0], NFD: [0x33C0], NFKC: [0x006B, 0x03A9], NFKD: [0x006B, 0x03A9] }, +{ source: [0x33C1], NFC: [0x33C1], NFD: [0x33C1], NFKC: [0x004D, 0x03A9], NFKD: [0x004D, 0x03A9] }, +{ source: [0x33C2], NFC: [0x33C2], NFD: [0x33C2], NFKC: [0x0061, 0x002E, 0x006D, 0x002E], NFKD: [0x0061, 0x002E, 0x006D, 0x002E] }, +{ source: [0x33C3], NFC: [0x33C3], NFD: [0x33C3], NFKC: [0x0042, 0x0071], NFKD: [0x0042, 0x0071] }, +{ source: [0x33C4], NFC: [0x33C4], NFD: [0x33C4], NFKC: [0x0063, 0x0063], NFKD: [0x0063, 0x0063] }, +{ source: [0x33C5], NFC: [0x33C5], NFD: [0x33C5], NFKC: [0x0063, 0x0064], NFKD: [0x0063, 0x0064] }, +{ source: [0x33C6], NFC: [0x33C6], NFD: [0x33C6], NFKC: [0x0043, 0x2215, 0x006B, 0x0067], NFKD: [0x0043, 0x2215, 0x006B, 0x0067] }, +{ source: [0x33C7], NFC: [0x33C7], NFD: [0x33C7], NFKC: [0x0043, 0x006F, 0x002E], NFKD: [0x0043, 0x006F, 0x002E] }, +{ source: [0x33C8], NFC: [0x33C8], NFD: [0x33C8], NFKC: [0x0064, 0x0042], NFKD: [0x0064, 0x0042] }, +{ source: [0x33C9], NFC: [0x33C9], NFD: [0x33C9], NFKC: [0x0047, 0x0079], NFKD: [0x0047, 0x0079] }, +{ source: [0x33CA], NFC: [0x33CA], NFD: [0x33CA], NFKC: [0x0068, 0x0061], NFKD: [0x0068, 0x0061] }, +{ source: [0x33CB], NFC: [0x33CB], NFD: [0x33CB], NFKC: [0x0048, 0x0050], NFKD: [0x0048, 0x0050] }, +{ source: [0x33CC], NFC: [0x33CC], NFD: [0x33CC], NFKC: [0x0069, 0x006E], NFKD: [0x0069, 0x006E] }, +{ source: [0x33CD], NFC: [0x33CD], NFD: [0x33CD], NFKC: [0x004B, 0x004B], NFKD: [0x004B, 0x004B] }, +{ source: [0x33CE], NFC: [0x33CE], NFD: [0x33CE], NFKC: [0x004B, 0x004D], NFKD: [0x004B, 0x004D] }, +{ source: [0x33CF], NFC: [0x33CF], NFD: [0x33CF], NFKC: [0x006B, 0x0074], NFKD: [0x006B, 0x0074] }, +{ source: [0x33D0], NFC: [0x33D0], NFD: [0x33D0], NFKC: [0x006C, 0x006D], NFKD: [0x006C, 0x006D] }, +{ source: [0x33D1], NFC: [0x33D1], NFD: [0x33D1], NFKC: [0x006C, 0x006E], NFKD: [0x006C, 0x006E] }, +{ source: [0x33D2], NFC: [0x33D2], NFD: [0x33D2], NFKC: [0x006C, 0x006F, 0x0067], NFKD: [0x006C, 0x006F, 0x0067] }, +{ source: [0x33D3], NFC: [0x33D3], NFD: [0x33D3], NFKC: [0x006C, 0x0078], NFKD: [0x006C, 0x0078] }, +{ source: [0x33D4], NFC: [0x33D4], NFD: [0x33D4], NFKC: [0x006D, 0x0062], NFKD: [0x006D, 0x0062] }, +{ source: [0x33D5], NFC: [0x33D5], NFD: [0x33D5], NFKC: [0x006D, 0x0069, 0x006C], NFKD: [0x006D, 0x0069, 0x006C] }, +{ source: [0x33D6], NFC: [0x33D6], NFD: [0x33D6], NFKC: [0x006D, 0x006F, 0x006C], NFKD: [0x006D, 0x006F, 0x006C] }, +{ source: [0x33D7], NFC: [0x33D7], NFD: [0x33D7], NFKC: [0x0050, 0x0048], NFKD: [0x0050, 0x0048] }, +{ source: [0x33D8], NFC: [0x33D8], NFD: [0x33D8], NFKC: [0x0070, 0x002E, 0x006D, 0x002E], NFKD: [0x0070, 0x002E, 0x006D, 0x002E] }, +{ source: [0x33D9], NFC: [0x33D9], NFD: [0x33D9], NFKC: [0x0050, 0x0050, 0x004D], NFKD: [0x0050, 0x0050, 0x004D] }, +{ source: [0x33DA], NFC: [0x33DA], NFD: [0x33DA], NFKC: [0x0050, 0x0052], NFKD: [0x0050, 0x0052] }, +{ source: [0x33DB], NFC: [0x33DB], NFD: [0x33DB], NFKC: [0x0073, 0x0072], NFKD: [0x0073, 0x0072] }, +{ source: [0x33DC], NFC: [0x33DC], NFD: [0x33DC], NFKC: [0x0053, 0x0076], NFKD: [0x0053, 0x0076] }, +{ source: [0x33DD], NFC: [0x33DD], NFD: [0x33DD], NFKC: [0x0057, 0x0062], NFKD: [0x0057, 0x0062] }, +{ source: [0x33DE], NFC: [0x33DE], NFD: [0x33DE], NFKC: [0x0056, 0x2215, 0x006D], NFKD: [0x0056, 0x2215, 0x006D] }, +{ source: [0x33DF], NFC: [0x33DF], NFD: [0x33DF], NFKC: [0x0041, 0x2215, 0x006D], NFKD: [0x0041, 0x2215, 0x006D] }, +{ source: [0x33E0], NFC: [0x33E0], NFD: [0x33E0], NFKC: [0x0031, 0x65E5], NFKD: [0x0031, 0x65E5] }, +{ source: [0x33E1], NFC: [0x33E1], NFD: [0x33E1], NFKC: [0x0032, 0x65E5], NFKD: [0x0032, 0x65E5] }, +{ source: [0x33E2], NFC: [0x33E2], NFD: [0x33E2], NFKC: [0x0033, 0x65E5], NFKD: [0x0033, 0x65E5] }, +{ source: [0x33E3], NFC: [0x33E3], NFD: [0x33E3], NFKC: [0x0034, 0x65E5], NFKD: [0x0034, 0x65E5] }, +{ source: [0x33E4], NFC: [0x33E4], NFD: [0x33E4], NFKC: [0x0035, 0x65E5], NFKD: [0x0035, 0x65E5] }, +{ source: [0x33E5], NFC: [0x33E5], NFD: [0x33E5], NFKC: [0x0036, 0x65E5], NFKD: [0x0036, 0x65E5] }, +{ source: [0x33E6], NFC: [0x33E6], NFD: [0x33E6], NFKC: [0x0037, 0x65E5], NFKD: [0x0037, 0x65E5] }, +{ source: [0x33E7], NFC: [0x33E7], NFD: [0x33E7], NFKC: [0x0038, 0x65E5], NFKD: [0x0038, 0x65E5] }, +{ source: [0x33E8], NFC: [0x33E8], NFD: [0x33E8], NFKC: [0x0039, 0x65E5], NFKD: [0x0039, 0x65E5] }, +{ source: [0x33E9], NFC: [0x33E9], NFD: [0x33E9], NFKC: [0x0031, 0x0030, 0x65E5], NFKD: [0x0031, 0x0030, 0x65E5] }, +{ source: [0x33EA], NFC: [0x33EA], NFD: [0x33EA], NFKC: [0x0031, 0x0031, 0x65E5], NFKD: [0x0031, 0x0031, 0x65E5] }, +{ source: [0x33EB], NFC: [0x33EB], NFD: [0x33EB], NFKC: [0x0031, 0x0032, 0x65E5], NFKD: [0x0031, 0x0032, 0x65E5] }, +{ source: [0x33EC], NFC: [0x33EC], NFD: [0x33EC], NFKC: [0x0031, 0x0033, 0x65E5], NFKD: [0x0031, 0x0033, 0x65E5] }, +{ source: [0x33ED], NFC: [0x33ED], NFD: [0x33ED], NFKC: [0x0031, 0x0034, 0x65E5], NFKD: [0x0031, 0x0034, 0x65E5] }, +{ source: [0x33EE], NFC: [0x33EE], NFD: [0x33EE], NFKC: [0x0031, 0x0035, 0x65E5], NFKD: [0x0031, 0x0035, 0x65E5] }, +{ source: [0x33EF], NFC: [0x33EF], NFD: [0x33EF], NFKC: [0x0031, 0x0036, 0x65E5], NFKD: [0x0031, 0x0036, 0x65E5] }, +{ source: [0x33F0], NFC: [0x33F0], NFD: [0x33F0], NFKC: [0x0031, 0x0037, 0x65E5], NFKD: [0x0031, 0x0037, 0x65E5] }, +{ source: [0x33F1], NFC: [0x33F1], NFD: [0x33F1], NFKC: [0x0031, 0x0038, 0x65E5], NFKD: [0x0031, 0x0038, 0x65E5] }, +{ source: [0x33F2], NFC: [0x33F2], NFD: [0x33F2], NFKC: [0x0031, 0x0039, 0x65E5], NFKD: [0x0031, 0x0039, 0x65E5] }, +{ source: [0x33F3], NFC: [0x33F3], NFD: [0x33F3], NFKC: [0x0032, 0x0030, 0x65E5], NFKD: [0x0032, 0x0030, 0x65E5] }, +{ source: [0x33F4], NFC: [0x33F4], NFD: [0x33F4], NFKC: [0x0032, 0x0031, 0x65E5], NFKD: [0x0032, 0x0031, 0x65E5] }, +{ source: [0x33F5], NFC: [0x33F5], NFD: [0x33F5], NFKC: [0x0032, 0x0032, 0x65E5], NFKD: [0x0032, 0x0032, 0x65E5] }, +{ source: [0x33F6], NFC: [0x33F6], NFD: [0x33F6], NFKC: [0x0032, 0x0033, 0x65E5], NFKD: [0x0032, 0x0033, 0x65E5] }, +{ source: [0x33F7], NFC: [0x33F7], NFD: [0x33F7], NFKC: [0x0032, 0x0034, 0x65E5], NFKD: [0x0032, 0x0034, 0x65E5] }, +{ source: [0x33F8], NFC: [0x33F8], NFD: [0x33F8], NFKC: [0x0032, 0x0035, 0x65E5], NFKD: [0x0032, 0x0035, 0x65E5] }, +{ source: [0x33F9], NFC: [0x33F9], NFD: [0x33F9], NFKC: [0x0032, 0x0036, 0x65E5], NFKD: [0x0032, 0x0036, 0x65E5] }, +{ source: [0x33FA], NFC: [0x33FA], NFD: [0x33FA], NFKC: [0x0032, 0x0037, 0x65E5], NFKD: [0x0032, 0x0037, 0x65E5] }, +{ source: [0x33FB], NFC: [0x33FB], NFD: [0x33FB], NFKC: [0x0032, 0x0038, 0x65E5], NFKD: [0x0032, 0x0038, 0x65E5] }, +{ source: [0x33FC], NFC: [0x33FC], NFD: [0x33FC], NFKC: [0x0032, 0x0039, 0x65E5], NFKD: [0x0032, 0x0039, 0x65E5] }, +{ source: [0x33FD], NFC: [0x33FD], NFD: [0x33FD], NFKC: [0x0033, 0x0030, 0x65E5], NFKD: [0x0033, 0x0030, 0x65E5] }, +{ source: [0x33FE], NFC: [0x33FE], NFD: [0x33FE], NFKC: [0x0033, 0x0031, 0x65E5], NFKD: [0x0033, 0x0031, 0x65E5] }, +{ source: [0x33FF], NFC: [0x33FF], NFD: [0x33FF], NFKC: [0x0067, 0x0061, 0x006C], NFKD: [0x0067, 0x0061, 0x006C] }, +{ source: [0xA69C], NFC: [0xA69C], NFD: [0xA69C], NFKC: [0x044A], NFKD: [0x044A] }, +{ source: [0xA69D], NFC: [0xA69D], NFD: [0xA69D], NFKC: [0x044C], NFKD: [0x044C] }, +{ source: [0xA770], NFC: [0xA770], NFD: [0xA770], NFKC: [0xA76F], NFKD: [0xA76F] }, +{ source: [0xA7F2], NFC: [0xA7F2], NFD: [0xA7F2], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0xA7F3], NFC: [0xA7F3], NFD: [0xA7F3], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0xA7F4], NFC: [0xA7F4], NFD: [0xA7F4], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0xA7F8], NFC: [0xA7F8], NFD: [0xA7F8], NFKC: [0x0126], NFKD: [0x0126] }, +{ source: [0xA7F9], NFC: [0xA7F9], NFD: [0xA7F9], NFKC: [0x0153], NFKD: [0x0153] }, +{ source: [0xAB5C], NFC: [0xAB5C], NFD: [0xAB5C], NFKC: [0xA727], NFKD: [0xA727] }, +{ source: [0xAB5D], NFC: [0xAB5D], NFD: [0xAB5D], NFKC: [0xAB37], NFKD: [0xAB37] }, +{ source: [0xAB5E], NFC: [0xAB5E], NFD: [0xAB5E], NFKC: [0x026B], NFKD: [0x026B] }, +{ source: [0xAB5F], NFC: [0xAB5F], NFD: [0xAB5F], NFKC: [0xAB52], NFKD: [0xAB52] }, +{ source: [0xAB69], NFC: [0xAB69], NFD: [0xAB69], NFKC: [0x028D], NFKD: [0x028D] }, +{ source: [0xAC00], NFC: [0xAC00], NFD: [0x1100, 0x1161], NFKC: [0xAC00], NFKD: [0x1100, 0x1161] }, +{ source: [0xAC01], NFC: [0xAC01], NFD: [0x1100, 0x1161, 0x11A8], NFKC: [0xAC01], NFKD: [0x1100, 0x1161, 0x11A8] }, +{ source: [0xAC02], NFC: [0xAC02], NFD: [0x1100, 0x1161, 0x11A9], NFKC: [0xAC02], NFKD: [0x1100, 0x1161, 0x11A9] }, +{ source: [0xAC03], NFC: [0xAC03], NFD: [0x1100, 0x1161, 0x11AA], NFKC: [0xAC03], NFKD: [0x1100, 0x1161, 0x11AA] }, +{ source: [0xAC04], NFC: [0xAC04], NFD: [0x1100, 0x1161, 0x11AB], NFKC: [0xAC04], NFKD: [0x1100, 0x1161, 0x11AB] }, +{ source: [0xAC05], NFC: [0xAC05], NFD: [0x1100, 0x1161, 0x11AC], NFKC: [0xAC05], NFKD: [0x1100, 0x1161, 0x11AC] }, +{ source: [0xAC06], NFC: [0xAC06], NFD: [0x1100, 0x1161, 0x11AD], NFKC: [0xAC06], NFKD: [0x1100, 0x1161, 0x11AD] }, +{ source: [0xAC07], NFC: [0xAC07], NFD: [0x1100, 0x1161, 0x11AE], NFKC: [0xAC07], NFKD: [0x1100, 0x1161, 0x11AE] }, +{ source: [0xAC08], NFC: [0xAC08], NFD: [0x1100, 0x1161, 0x11AF], NFKC: [0xAC08], NFKD: [0x1100, 0x1161, 0x11AF] }, +{ source: [0xAC09], NFC: [0xAC09], NFD: [0x1100, 0x1161, 0x11B0], NFKC: [0xAC09], NFKD: [0x1100, 0x1161, 0x11B0] }, +{ source: [0xAC0A], NFC: [0xAC0A], NFD: [0x1100, 0x1161, 0x11B1], NFKC: [0xAC0A], NFKD: [0x1100, 0x1161, 0x11B1] }, +{ source: [0xAC0B], NFC: [0xAC0B], NFD: [0x1100, 0x1161, 0x11B2], NFKC: [0xAC0B], NFKD: [0x1100, 0x1161, 0x11B2] }, +{ source: [0xAC0C], NFC: [0xAC0C], NFD: [0x1100, 0x1161, 0x11B3], NFKC: [0xAC0C], NFKD: [0x1100, 0x1161, 0x11B3] }, +{ source: [0xAC0D], NFC: [0xAC0D], NFD: [0x1100, 0x1161, 0x11B4], NFKC: [0xAC0D], NFKD: [0x1100, 0x1161, 0x11B4] }, +{ source: [0xAC0E], NFC: [0xAC0E], NFD: [0x1100, 0x1161, 0x11B5], NFKC: [0xAC0E], NFKD: [0x1100, 0x1161, 0x11B5] }, +{ source: [0xAC0F], NFC: [0xAC0F], NFD: [0x1100, 0x1161, 0x11B6], NFKC: [0xAC0F], NFKD: [0x1100, 0x1161, 0x11B6] }, +{ source: [0xAC10], NFC: [0xAC10], NFD: [0x1100, 0x1161, 0x11B7], NFKC: [0xAC10], NFKD: [0x1100, 0x1161, 0x11B7] }, +{ source: [0xAC11], NFC: [0xAC11], NFD: [0x1100, 0x1161, 0x11B8], NFKC: [0xAC11], NFKD: [0x1100, 0x1161, 0x11B8] }, +{ source: [0xAC12], NFC: [0xAC12], NFD: [0x1100, 0x1161, 0x11B9], NFKC: [0xAC12], NFKD: [0x1100, 0x1161, 0x11B9] }, +{ source: [0xAC13], NFC: [0xAC13], NFD: [0x1100, 0x1161, 0x11BA], NFKC: [0xAC13], NFKD: [0x1100, 0x1161, 0x11BA] }, +{ source: [0xAC14], NFC: [0xAC14], NFD: [0x1100, 0x1161, 0x11BB], NFKC: [0xAC14], NFKD: [0x1100, 0x1161, 0x11BB] }, +{ source: [0xAC15], NFC: [0xAC15], NFD: [0x1100, 0x1161, 0x11BC], NFKC: [0xAC15], NFKD: [0x1100, 0x1161, 0x11BC] }, +{ source: [0xAC16], NFC: [0xAC16], NFD: [0x1100, 0x1161, 0x11BD], NFKC: [0xAC16], NFKD: [0x1100, 0x1161, 0x11BD] }, +{ source: [0xAC17], NFC: [0xAC17], NFD: [0x1100, 0x1161, 0x11BE], NFKC: [0xAC17], NFKD: [0x1100, 0x1161, 0x11BE] }, +{ source: [0xAC18], NFC: [0xAC18], NFD: [0x1100, 0x1161, 0x11BF], NFKC: [0xAC18], NFKD: [0x1100, 0x1161, 0x11BF] }, +{ source: [0xAC19], NFC: [0xAC19], NFD: [0x1100, 0x1161, 0x11C0], NFKC: [0xAC19], NFKD: [0x1100, 0x1161, 0x11C0] }, +{ source: [0xAC1A], NFC: [0xAC1A], NFD: [0x1100, 0x1161, 0x11C1], NFKC: [0xAC1A], NFKD: [0x1100, 0x1161, 0x11C1] }, +{ source: [0xAC1B], NFC: [0xAC1B], NFD: [0x1100, 0x1161, 0x11C2], NFKC: [0xAC1B], NFKD: [0x1100, 0x1161, 0x11C2] }, +{ source: [0xAC1C], NFC: [0xAC1C], NFD: [0x1100, 0x1162], NFKC: [0xAC1C], NFKD: [0x1100, 0x1162] }, +{ source: [0xAC1D], NFC: [0xAC1D], NFD: [0x1100, 0x1162, 0x11A8], NFKC: [0xAC1D], NFKD: [0x1100, 0x1162, 0x11A8] }, +{ source: [0xAC1E], NFC: [0xAC1E], NFD: [0x1100, 0x1162, 0x11A9], NFKC: [0xAC1E], NFKD: [0x1100, 0x1162, 0x11A9] }, +{ source: [0xAC1F], NFC: [0xAC1F], NFD: [0x1100, 0x1162, 0x11AA], NFKC: [0xAC1F], NFKD: [0x1100, 0x1162, 0x11AA] }, +{ source: [0xAC20], NFC: [0xAC20], NFD: [0x1100, 0x1162, 0x11AB], NFKC: [0xAC20], NFKD: [0x1100, 0x1162, 0x11AB] }, +{ source: [0xAC21], NFC: [0xAC21], NFD: [0x1100, 0x1162, 0x11AC], NFKC: [0xAC21], NFKD: [0x1100, 0x1162, 0x11AC] }, +{ source: [0xAC22], NFC: [0xAC22], NFD: [0x1100, 0x1162, 0x11AD], NFKC: [0xAC22], NFKD: [0x1100, 0x1162, 0x11AD] }, +{ source: [0xAC23], NFC: [0xAC23], NFD: [0x1100, 0x1162, 0x11AE], NFKC: [0xAC23], NFKD: [0x1100, 0x1162, 0x11AE] }, +{ source: [0xAC24], NFC: [0xAC24], NFD: [0x1100, 0x1162, 0x11AF], NFKC: [0xAC24], NFKD: [0x1100, 0x1162, 0x11AF] }, +{ source: [0xAC25], NFC: [0xAC25], NFD: [0x1100, 0x1162, 0x11B0], NFKC: [0xAC25], NFKD: [0x1100, 0x1162, 0x11B0] }, +{ source: [0xAC26], NFC: [0xAC26], NFD: [0x1100, 0x1162, 0x11B1], NFKC: [0xAC26], NFKD: [0x1100, 0x1162, 0x11B1] }, +{ source: [0xAC27], NFC: [0xAC27], NFD: [0x1100, 0x1162, 0x11B2], NFKC: [0xAC27], NFKD: [0x1100, 0x1162, 0x11B2] }, +{ source: [0xAC28], NFC: [0xAC28], NFD: [0x1100, 0x1162, 0x11B3], NFKC: [0xAC28], NFKD: [0x1100, 0x1162, 0x11B3] }, +{ source: [0xAC29], NFC: [0xAC29], NFD: [0x1100, 0x1162, 0x11B4], NFKC: [0xAC29], NFKD: [0x1100, 0x1162, 0x11B4] }, +{ source: [0xAC2A], NFC: [0xAC2A], NFD: [0x1100, 0x1162, 0x11B5], NFKC: [0xAC2A], NFKD: [0x1100, 0x1162, 0x11B5] }, +{ source: [0xAC2B], NFC: [0xAC2B], NFD: [0x1100, 0x1162, 0x11B6], NFKC: [0xAC2B], NFKD: [0x1100, 0x1162, 0x11B6] }, +{ source: [0xAC2C], NFC: [0xAC2C], NFD: [0x1100, 0x1162, 0x11B7], NFKC: [0xAC2C], NFKD: [0x1100, 0x1162, 0x11B7] }, +{ source: [0xAC2D], NFC: [0xAC2D], NFD: [0x1100, 0x1162, 0x11B8], NFKC: [0xAC2D], NFKD: [0x1100, 0x1162, 0x11B8] }, +{ source: [0xAC2E], NFC: [0xAC2E], NFD: [0x1100, 0x1162, 0x11B9], NFKC: [0xAC2E], NFKD: [0x1100, 0x1162, 0x11B9] }, +{ source: [0xAC2F], NFC: [0xAC2F], NFD: [0x1100, 0x1162, 0x11BA], NFKC: [0xAC2F], NFKD: [0x1100, 0x1162, 0x11BA] }, +{ source: [0xAC30], NFC: [0xAC30], NFD: [0x1100, 0x1162, 0x11BB], NFKC: [0xAC30], NFKD: [0x1100, 0x1162, 0x11BB] }, +{ source: [0xAC31], NFC: [0xAC31], NFD: [0x1100, 0x1162, 0x11BC], NFKC: [0xAC31], NFKD: [0x1100, 0x1162, 0x11BC] }, +{ source: [0xAC32], NFC: [0xAC32], NFD: [0x1100, 0x1162, 0x11BD], NFKC: [0xAC32], NFKD: [0x1100, 0x1162, 0x11BD] }, +{ source: [0xAC33], NFC: [0xAC33], NFD: [0x1100, 0x1162, 0x11BE], NFKC: [0xAC33], NFKD: [0x1100, 0x1162, 0x11BE] }, +{ source: [0xAC34], NFC: [0xAC34], NFD: [0x1100, 0x1162, 0x11BF], NFKC: [0xAC34], NFKD: [0x1100, 0x1162, 0x11BF] }, +{ source: [0xAC35], NFC: [0xAC35], NFD: [0x1100, 0x1162, 0x11C0], NFKC: [0xAC35], NFKD: [0x1100, 0x1162, 0x11C0] }, +{ source: [0xAC36], NFC: [0xAC36], NFD: [0x1100, 0x1162, 0x11C1], NFKC: [0xAC36], NFKD: [0x1100, 0x1162, 0x11C1] }, +{ source: [0xAC37], NFC: [0xAC37], NFD: [0x1100, 0x1162, 0x11C2], NFKC: [0xAC37], NFKD: [0x1100, 0x1162, 0x11C2] }, +{ source: [0xAC38], NFC: [0xAC38], NFD: [0x1100, 0x1163], NFKC: [0xAC38], NFKD: [0x1100, 0x1163] }, +{ source: [0xAC39], NFC: [0xAC39], NFD: [0x1100, 0x1163, 0x11A8], NFKC: [0xAC39], NFKD: [0x1100, 0x1163, 0x11A8] }, +{ source: [0xAC3A], NFC: [0xAC3A], NFD: [0x1100, 0x1163, 0x11A9], NFKC: [0xAC3A], NFKD: [0x1100, 0x1163, 0x11A9] }, +{ source: [0xAC3B], NFC: [0xAC3B], NFD: [0x1100, 0x1163, 0x11AA], NFKC: [0xAC3B], NFKD: [0x1100, 0x1163, 0x11AA] }, +{ source: [0xAC3C], NFC: [0xAC3C], NFD: [0x1100, 0x1163, 0x11AB], NFKC: [0xAC3C], NFKD: [0x1100, 0x1163, 0x11AB] }, +{ source: [0xAC3D], NFC: [0xAC3D], NFD: [0x1100, 0x1163, 0x11AC], NFKC: [0xAC3D], NFKD: [0x1100, 0x1163, 0x11AC] }, +{ source: [0xAC3E], NFC: [0xAC3E], NFD: [0x1100, 0x1163, 0x11AD], NFKC: [0xAC3E], NFKD: [0x1100, 0x1163, 0x11AD] }, +{ source: [0xAC3F], NFC: [0xAC3F], NFD: [0x1100, 0x1163, 0x11AE], NFKC: [0xAC3F], NFKD: [0x1100, 0x1163, 0x11AE] }, +{ source: [0xAC40], NFC: [0xAC40], NFD: [0x1100, 0x1163, 0x11AF], NFKC: [0xAC40], NFKD: [0x1100, 0x1163, 0x11AF] }, +{ source: [0xAC41], NFC: [0xAC41], NFD: [0x1100, 0x1163, 0x11B0], NFKC: [0xAC41], NFKD: [0x1100, 0x1163, 0x11B0] }, +{ source: [0xAC42], NFC: [0xAC42], NFD: [0x1100, 0x1163, 0x11B1], NFKC: [0xAC42], NFKD: [0x1100, 0x1163, 0x11B1] }, +{ source: [0xAC43], NFC: [0xAC43], NFD: [0x1100, 0x1163, 0x11B2], NFKC: [0xAC43], NFKD: [0x1100, 0x1163, 0x11B2] }, +{ source: [0xAC44], NFC: [0xAC44], NFD: [0x1100, 0x1163, 0x11B3], NFKC: [0xAC44], NFKD: [0x1100, 0x1163, 0x11B3] }, +{ source: [0xAC45], NFC: [0xAC45], NFD: [0x1100, 0x1163, 0x11B4], NFKC: [0xAC45], NFKD: [0x1100, 0x1163, 0x11B4] }, +{ source: [0xAC46], NFC: [0xAC46], NFD: [0x1100, 0x1163, 0x11B5], NFKC: [0xAC46], NFKD: [0x1100, 0x1163, 0x11B5] }, +{ source: [0xAC47], NFC: [0xAC47], NFD: [0x1100, 0x1163, 0x11B6], NFKC: [0xAC47], NFKD: [0x1100, 0x1163, 0x11B6] }, +{ source: [0xAC48], NFC: [0xAC48], NFD: [0x1100, 0x1163, 0x11B7], NFKC: [0xAC48], NFKD: [0x1100, 0x1163, 0x11B7] }, +{ source: [0xAC49], NFC: [0xAC49], NFD: [0x1100, 0x1163, 0x11B8], NFKC: [0xAC49], NFKD: [0x1100, 0x1163, 0x11B8] }, +{ source: [0xAC4A], NFC: [0xAC4A], NFD: [0x1100, 0x1163, 0x11B9], NFKC: [0xAC4A], NFKD: [0x1100, 0x1163, 0x11B9] }, +{ source: [0xAC4B], NFC: [0xAC4B], NFD: [0x1100, 0x1163, 0x11BA], NFKC: [0xAC4B], NFKD: [0x1100, 0x1163, 0x11BA] }, +{ source: [0xAC4C], NFC: [0xAC4C], NFD: [0x1100, 0x1163, 0x11BB], NFKC: [0xAC4C], NFKD: [0x1100, 0x1163, 0x11BB] }, +{ source: [0xAC4D], NFC: [0xAC4D], NFD: [0x1100, 0x1163, 0x11BC], NFKC: [0xAC4D], NFKD: [0x1100, 0x1163, 0x11BC] }, +{ source: [0xAC4E], NFC: [0xAC4E], NFD: [0x1100, 0x1163, 0x11BD], NFKC: [0xAC4E], NFKD: [0x1100, 0x1163, 0x11BD] }, +{ source: [0xAC4F], NFC: [0xAC4F], NFD: [0x1100, 0x1163, 0x11BE], NFKC: [0xAC4F], NFKD: [0x1100, 0x1163, 0x11BE] }, +{ source: [0xAC50], NFC: [0xAC50], NFD: [0x1100, 0x1163, 0x11BF], NFKC: [0xAC50], NFKD: [0x1100, 0x1163, 0x11BF] }, +{ source: [0xAC51], NFC: [0xAC51], NFD: [0x1100, 0x1163, 0x11C0], NFKC: [0xAC51], NFKD: [0x1100, 0x1163, 0x11C0] }, +{ source: [0xAC52], NFC: [0xAC52], NFD: [0x1100, 0x1163, 0x11C1], NFKC: [0xAC52], NFKD: [0x1100, 0x1163, 0x11C1] }, +{ source: [0xAC53], NFC: [0xAC53], NFD: [0x1100, 0x1163, 0x11C2], NFKC: [0xAC53], NFKD: [0x1100, 0x1163, 0x11C2] }, +{ source: [0xAC54], NFC: [0xAC54], NFD: [0x1100, 0x1164], NFKC: [0xAC54], NFKD: [0x1100, 0x1164] }, +{ source: [0xAC55], NFC: [0xAC55], NFD: [0x1100, 0x1164, 0x11A8], NFKC: [0xAC55], NFKD: [0x1100, 0x1164, 0x11A8] }, +{ source: [0xAC56], NFC: [0xAC56], NFD: [0x1100, 0x1164, 0x11A9], NFKC: [0xAC56], NFKD: [0x1100, 0x1164, 0x11A9] }, +{ source: [0xAC57], NFC: [0xAC57], NFD: [0x1100, 0x1164, 0x11AA], NFKC: [0xAC57], NFKD: [0x1100, 0x1164, 0x11AA] }, +{ source: [0xAC58], NFC: [0xAC58], NFD: [0x1100, 0x1164, 0x11AB], NFKC: [0xAC58], NFKD: [0x1100, 0x1164, 0x11AB] }, +{ source: [0xAC59], NFC: [0xAC59], NFD: [0x1100, 0x1164, 0x11AC], NFKC: [0xAC59], NFKD: [0x1100, 0x1164, 0x11AC] }, +{ source: [0xAC5A], NFC: [0xAC5A], NFD: [0x1100, 0x1164, 0x11AD], NFKC: [0xAC5A], NFKD: [0x1100, 0x1164, 0x11AD] }, +{ source: [0xAC5B], NFC: [0xAC5B], NFD: [0x1100, 0x1164, 0x11AE], NFKC: [0xAC5B], NFKD: [0x1100, 0x1164, 0x11AE] }, +{ source: [0xAC5C], NFC: [0xAC5C], NFD: [0x1100, 0x1164, 0x11AF], NFKC: [0xAC5C], NFKD: [0x1100, 0x1164, 0x11AF] }, +{ source: [0xAC5D], NFC: [0xAC5D], NFD: [0x1100, 0x1164, 0x11B0], NFKC: [0xAC5D], NFKD: [0x1100, 0x1164, 0x11B0] }, +{ source: [0xAC5E], NFC: [0xAC5E], NFD: [0x1100, 0x1164, 0x11B1], NFKC: [0xAC5E], NFKD: [0x1100, 0x1164, 0x11B1] }, +{ source: [0xAC5F], NFC: [0xAC5F], NFD: [0x1100, 0x1164, 0x11B2], NFKC: [0xAC5F], NFKD: [0x1100, 0x1164, 0x11B2] }, +{ source: [0xAC60], NFC: [0xAC60], NFD: [0x1100, 0x1164, 0x11B3], NFKC: [0xAC60], NFKD: [0x1100, 0x1164, 0x11B3] }, +{ source: [0xAC61], NFC: [0xAC61], NFD: [0x1100, 0x1164, 0x11B4], NFKC: [0xAC61], NFKD: [0x1100, 0x1164, 0x11B4] }, +{ source: [0xAC62], NFC: [0xAC62], NFD: [0x1100, 0x1164, 0x11B5], NFKC: [0xAC62], NFKD: [0x1100, 0x1164, 0x11B5] }, +{ source: [0xAC63], NFC: [0xAC63], NFD: [0x1100, 0x1164, 0x11B6], NFKC: [0xAC63], NFKD: [0x1100, 0x1164, 0x11B6] }, +{ source: [0xAC64], NFC: [0xAC64], NFD: [0x1100, 0x1164, 0x11B7], NFKC: [0xAC64], NFKD: [0x1100, 0x1164, 0x11B7] }, +{ source: [0xAC65], NFC: [0xAC65], NFD: [0x1100, 0x1164, 0x11B8], NFKC: [0xAC65], NFKD: [0x1100, 0x1164, 0x11B8] }, +{ source: [0xAC66], NFC: [0xAC66], NFD: [0x1100, 0x1164, 0x11B9], NFKC: [0xAC66], NFKD: [0x1100, 0x1164, 0x11B9] }, +{ source: [0xAC67], NFC: [0xAC67], NFD: [0x1100, 0x1164, 0x11BA], NFKC: [0xAC67], NFKD: [0x1100, 0x1164, 0x11BA] }, +{ source: [0xAC68], NFC: [0xAC68], NFD: [0x1100, 0x1164, 0x11BB], NFKC: [0xAC68], NFKD: [0x1100, 0x1164, 0x11BB] }, +{ source: [0xAC69], NFC: [0xAC69], NFD: [0x1100, 0x1164, 0x11BC], NFKC: [0xAC69], NFKD: [0x1100, 0x1164, 0x11BC] }, +{ source: [0xAC6A], NFC: [0xAC6A], NFD: [0x1100, 0x1164, 0x11BD], NFKC: [0xAC6A], NFKD: [0x1100, 0x1164, 0x11BD] }, +{ source: [0xAC6B], NFC: [0xAC6B], NFD: [0x1100, 0x1164, 0x11BE], NFKC: [0xAC6B], NFKD: [0x1100, 0x1164, 0x11BE] }, +{ source: [0xAC6C], NFC: [0xAC6C], NFD: [0x1100, 0x1164, 0x11BF], NFKC: [0xAC6C], NFKD: [0x1100, 0x1164, 0x11BF] }, +{ source: [0xAC6D], NFC: [0xAC6D], NFD: [0x1100, 0x1164, 0x11C0], NFKC: [0xAC6D], NFKD: [0x1100, 0x1164, 0x11C0] }, +{ source: [0xAC6E], NFC: [0xAC6E], NFD: [0x1100, 0x1164, 0x11C1], NFKC: [0xAC6E], NFKD: [0x1100, 0x1164, 0x11C1] }, +{ source: [0xAC6F], NFC: [0xAC6F], NFD: [0x1100, 0x1164, 0x11C2], NFKC: [0xAC6F], NFKD: [0x1100, 0x1164, 0x11C2] }, +{ source: [0xAC70], NFC: [0xAC70], NFD: [0x1100, 0x1165], NFKC: [0xAC70], NFKD: [0x1100, 0x1165] }, +{ source: [0xAC71], NFC: [0xAC71], NFD: [0x1100, 0x1165, 0x11A8], NFKC: [0xAC71], NFKD: [0x1100, 0x1165, 0x11A8] }, +{ source: [0xAC72], NFC: [0xAC72], NFD: [0x1100, 0x1165, 0x11A9], NFKC: [0xAC72], NFKD: [0x1100, 0x1165, 0x11A9] }, +{ source: [0xAC73], NFC: [0xAC73], NFD: [0x1100, 0x1165, 0x11AA], NFKC: [0xAC73], NFKD: [0x1100, 0x1165, 0x11AA] }, +{ source: [0xAC74], NFC: [0xAC74], NFD: [0x1100, 0x1165, 0x11AB], NFKC: [0xAC74], NFKD: [0x1100, 0x1165, 0x11AB] }, +{ source: [0xAC75], NFC: [0xAC75], NFD: [0x1100, 0x1165, 0x11AC], NFKC: [0xAC75], NFKD: [0x1100, 0x1165, 0x11AC] }, +{ source: [0xAC76], NFC: [0xAC76], NFD: [0x1100, 0x1165, 0x11AD], NFKC: [0xAC76], NFKD: [0x1100, 0x1165, 0x11AD] }, +{ source: [0xAC77], NFC: [0xAC77], NFD: [0x1100, 0x1165, 0x11AE], NFKC: [0xAC77], NFKD: [0x1100, 0x1165, 0x11AE] }, +{ source: [0xAC78], NFC: [0xAC78], NFD: [0x1100, 0x1165, 0x11AF], NFKC: [0xAC78], NFKD: [0x1100, 0x1165, 0x11AF] }, +{ source: [0xAC79], NFC: [0xAC79], NFD: [0x1100, 0x1165, 0x11B0], NFKC: [0xAC79], NFKD: [0x1100, 0x1165, 0x11B0] }, +{ source: [0xAC7A], NFC: [0xAC7A], NFD: [0x1100, 0x1165, 0x11B1], NFKC: [0xAC7A], NFKD: [0x1100, 0x1165, 0x11B1] }, +{ source: [0xAC7B], NFC: [0xAC7B], NFD: [0x1100, 0x1165, 0x11B2], NFKC: [0xAC7B], NFKD: [0x1100, 0x1165, 0x11B2] }, +{ source: [0xAC7C], NFC: [0xAC7C], NFD: [0x1100, 0x1165, 0x11B3], NFKC: [0xAC7C], NFKD: [0x1100, 0x1165, 0x11B3] }, +{ source: [0xAC7D], NFC: [0xAC7D], NFD: [0x1100, 0x1165, 0x11B4], NFKC: [0xAC7D], NFKD: [0x1100, 0x1165, 0x11B4] }, +{ source: [0xAC7E], NFC: [0xAC7E], NFD: [0x1100, 0x1165, 0x11B5], NFKC: [0xAC7E], NFKD: [0x1100, 0x1165, 0x11B5] }, +{ source: [0xAC7F], NFC: [0xAC7F], NFD: [0x1100, 0x1165, 0x11B6], NFKC: [0xAC7F], NFKD: [0x1100, 0x1165, 0x11B6] }, +{ source: [0xAC80], NFC: [0xAC80], NFD: [0x1100, 0x1165, 0x11B7], NFKC: [0xAC80], NFKD: [0x1100, 0x1165, 0x11B7] }, +{ source: [0xAC81], NFC: [0xAC81], NFD: [0x1100, 0x1165, 0x11B8], NFKC: [0xAC81], NFKD: [0x1100, 0x1165, 0x11B8] }, +{ source: [0xAC82], NFC: [0xAC82], NFD: [0x1100, 0x1165, 0x11B9], NFKC: [0xAC82], NFKD: [0x1100, 0x1165, 0x11B9] }, +{ source: [0xAC83], NFC: [0xAC83], NFD: [0x1100, 0x1165, 0x11BA], NFKC: [0xAC83], NFKD: [0x1100, 0x1165, 0x11BA] }, +{ source: [0xAC84], NFC: [0xAC84], NFD: [0x1100, 0x1165, 0x11BB], NFKC: [0xAC84], NFKD: [0x1100, 0x1165, 0x11BB] }, +{ source: [0xAC85], NFC: [0xAC85], NFD: [0x1100, 0x1165, 0x11BC], NFKC: [0xAC85], NFKD: [0x1100, 0x1165, 0x11BC] }, +{ source: [0xAC86], NFC: [0xAC86], NFD: [0x1100, 0x1165, 0x11BD], NFKC: [0xAC86], NFKD: [0x1100, 0x1165, 0x11BD] }, +{ source: [0xAC87], NFC: [0xAC87], NFD: [0x1100, 0x1165, 0x11BE], NFKC: [0xAC87], NFKD: [0x1100, 0x1165, 0x11BE] }, +{ source: [0xAC88], NFC: [0xAC88], NFD: [0x1100, 0x1165, 0x11BF], NFKC: [0xAC88], NFKD: [0x1100, 0x1165, 0x11BF] }, +{ source: [0xAC89], NFC: [0xAC89], NFD: [0x1100, 0x1165, 0x11C0], NFKC: [0xAC89], NFKD: [0x1100, 0x1165, 0x11C0] }, +{ source: [0xAC8A], NFC: [0xAC8A], NFD: [0x1100, 0x1165, 0x11C1], NFKC: [0xAC8A], NFKD: [0x1100, 0x1165, 0x11C1] }, +{ source: [0xAC8B], NFC: [0xAC8B], NFD: [0x1100, 0x1165, 0x11C2], NFKC: [0xAC8B], NFKD: [0x1100, 0x1165, 0x11C2] }, +{ source: [0xAC8C], NFC: [0xAC8C], NFD: [0x1100, 0x1166], NFKC: [0xAC8C], NFKD: [0x1100, 0x1166] }, +{ source: [0xAC8D], NFC: [0xAC8D], NFD: [0x1100, 0x1166, 0x11A8], NFKC: [0xAC8D], NFKD: [0x1100, 0x1166, 0x11A8] }, +{ source: [0xAC8E], NFC: [0xAC8E], NFD: [0x1100, 0x1166, 0x11A9], NFKC: [0xAC8E], NFKD: [0x1100, 0x1166, 0x11A9] }, +{ source: [0xAC8F], NFC: [0xAC8F], NFD: [0x1100, 0x1166, 0x11AA], NFKC: [0xAC8F], NFKD: [0x1100, 0x1166, 0x11AA] }, +{ source: [0xAC90], NFC: [0xAC90], NFD: [0x1100, 0x1166, 0x11AB], NFKC: [0xAC90], NFKD: [0x1100, 0x1166, 0x11AB] }, +{ source: [0xAC91], NFC: [0xAC91], NFD: [0x1100, 0x1166, 0x11AC], NFKC: [0xAC91], NFKD: [0x1100, 0x1166, 0x11AC] }, +{ source: [0xAC92], NFC: [0xAC92], NFD: [0x1100, 0x1166, 0x11AD], NFKC: [0xAC92], NFKD: [0x1100, 0x1166, 0x11AD] }, +{ source: [0xAC93], NFC: [0xAC93], NFD: [0x1100, 0x1166, 0x11AE], NFKC: [0xAC93], NFKD: [0x1100, 0x1166, 0x11AE] }, +{ source: [0xAC94], NFC: [0xAC94], NFD: [0x1100, 0x1166, 0x11AF], NFKC: [0xAC94], NFKD: [0x1100, 0x1166, 0x11AF] }, +{ source: [0xAC95], NFC: [0xAC95], NFD: [0x1100, 0x1166, 0x11B0], NFKC: [0xAC95], NFKD: [0x1100, 0x1166, 0x11B0] }, +{ source: [0xAC96], NFC: [0xAC96], NFD: [0x1100, 0x1166, 0x11B1], NFKC: [0xAC96], NFKD: [0x1100, 0x1166, 0x11B1] }, +{ source: [0xAC97], NFC: [0xAC97], NFD: [0x1100, 0x1166, 0x11B2], NFKC: [0xAC97], NFKD: [0x1100, 0x1166, 0x11B2] }, +{ source: [0xAC98], NFC: [0xAC98], NFD: [0x1100, 0x1166, 0x11B3], NFKC: [0xAC98], NFKD: [0x1100, 0x1166, 0x11B3] }, +{ source: [0xAC99], NFC: [0xAC99], NFD: [0x1100, 0x1166, 0x11B4], NFKC: [0xAC99], NFKD: [0x1100, 0x1166, 0x11B4] }, +{ source: [0xAC9A], NFC: [0xAC9A], NFD: [0x1100, 0x1166, 0x11B5], NFKC: [0xAC9A], NFKD: [0x1100, 0x1166, 0x11B5] }, +{ source: [0xAC9B], NFC: [0xAC9B], NFD: [0x1100, 0x1166, 0x11B6], NFKC: [0xAC9B], NFKD: [0x1100, 0x1166, 0x11B6] }, +{ source: [0xAC9C], NFC: [0xAC9C], NFD: [0x1100, 0x1166, 0x11B7], NFKC: [0xAC9C], NFKD: [0x1100, 0x1166, 0x11B7] }, +{ source: [0xAC9D], NFC: [0xAC9D], NFD: [0x1100, 0x1166, 0x11B8], NFKC: [0xAC9D], NFKD: [0x1100, 0x1166, 0x11B8] }, +{ source: [0xAC9E], NFC: [0xAC9E], NFD: [0x1100, 0x1166, 0x11B9], NFKC: [0xAC9E], NFKD: [0x1100, 0x1166, 0x11B9] }, +{ source: [0xAC9F], NFC: [0xAC9F], NFD: [0x1100, 0x1166, 0x11BA], NFKC: [0xAC9F], NFKD: [0x1100, 0x1166, 0x11BA] }, +{ source: [0xACA0], NFC: [0xACA0], NFD: [0x1100, 0x1166, 0x11BB], NFKC: [0xACA0], NFKD: [0x1100, 0x1166, 0x11BB] }, +{ source: [0xACA1], NFC: [0xACA1], NFD: [0x1100, 0x1166, 0x11BC], NFKC: [0xACA1], NFKD: [0x1100, 0x1166, 0x11BC] }, +{ source: [0xACA2], NFC: [0xACA2], NFD: [0x1100, 0x1166, 0x11BD], NFKC: [0xACA2], NFKD: [0x1100, 0x1166, 0x11BD] }, +{ source: [0xACA3], NFC: [0xACA3], NFD: [0x1100, 0x1166, 0x11BE], NFKC: [0xACA3], NFKD: [0x1100, 0x1166, 0x11BE] }, +{ source: [0xACA4], NFC: [0xACA4], NFD: [0x1100, 0x1166, 0x11BF], NFKC: [0xACA4], NFKD: [0x1100, 0x1166, 0x11BF] }, +{ source: [0xACA5], NFC: [0xACA5], NFD: [0x1100, 0x1166, 0x11C0], NFKC: [0xACA5], NFKD: [0x1100, 0x1166, 0x11C0] }, +{ source: [0xACA6], NFC: [0xACA6], NFD: [0x1100, 0x1166, 0x11C1], NFKC: [0xACA6], NFKD: [0x1100, 0x1166, 0x11C1] }, +{ source: [0xACA7], NFC: [0xACA7], NFD: [0x1100, 0x1166, 0x11C2], NFKC: [0xACA7], NFKD: [0x1100, 0x1166, 0x11C2] }, +{ source: [0xACA8], NFC: [0xACA8], NFD: [0x1100, 0x1167], NFKC: [0xACA8], NFKD: [0x1100, 0x1167] }, +{ source: [0xACA9], NFC: [0xACA9], NFD: [0x1100, 0x1167, 0x11A8], NFKC: [0xACA9], NFKD: [0x1100, 0x1167, 0x11A8] }, +{ source: [0xACAA], NFC: [0xACAA], NFD: [0x1100, 0x1167, 0x11A9], NFKC: [0xACAA], NFKD: [0x1100, 0x1167, 0x11A9] }, +{ source: [0xACAB], NFC: [0xACAB], NFD: [0x1100, 0x1167, 0x11AA], NFKC: [0xACAB], NFKD: [0x1100, 0x1167, 0x11AA] }, +{ source: [0xACAC], NFC: [0xACAC], NFD: [0x1100, 0x1167, 0x11AB], NFKC: [0xACAC], NFKD: [0x1100, 0x1167, 0x11AB] }, +{ source: [0xACAD], NFC: [0xACAD], NFD: [0x1100, 0x1167, 0x11AC], NFKC: [0xACAD], NFKD: [0x1100, 0x1167, 0x11AC] }, +{ source: [0xACAE], NFC: [0xACAE], NFD: [0x1100, 0x1167, 0x11AD], NFKC: [0xACAE], NFKD: [0x1100, 0x1167, 0x11AD] }, +{ source: [0xACAF], NFC: [0xACAF], NFD: [0x1100, 0x1167, 0x11AE], NFKC: [0xACAF], NFKD: [0x1100, 0x1167, 0x11AE] }, +{ source: [0xACB0], NFC: [0xACB0], NFD: [0x1100, 0x1167, 0x11AF], NFKC: [0xACB0], NFKD: [0x1100, 0x1167, 0x11AF] }, +{ source: [0xACB1], NFC: [0xACB1], NFD: [0x1100, 0x1167, 0x11B0], NFKC: [0xACB1], NFKD: [0x1100, 0x1167, 0x11B0] }, +{ source: [0xACB2], NFC: [0xACB2], NFD: [0x1100, 0x1167, 0x11B1], NFKC: [0xACB2], NFKD: [0x1100, 0x1167, 0x11B1] }, +{ source: [0xACB3], NFC: [0xACB3], NFD: [0x1100, 0x1167, 0x11B2], NFKC: [0xACB3], NFKD: [0x1100, 0x1167, 0x11B2] }, +{ source: [0xACB4], NFC: [0xACB4], NFD: [0x1100, 0x1167, 0x11B3], NFKC: [0xACB4], NFKD: [0x1100, 0x1167, 0x11B3] }, +{ source: [0xACB5], NFC: [0xACB5], NFD: [0x1100, 0x1167, 0x11B4], NFKC: [0xACB5], NFKD: [0x1100, 0x1167, 0x11B4] }, +{ source: [0xACB6], NFC: [0xACB6], NFD: [0x1100, 0x1167, 0x11B5], NFKC: [0xACB6], NFKD: [0x1100, 0x1167, 0x11B5] }, +{ source: [0xACB7], NFC: [0xACB7], NFD: [0x1100, 0x1167, 0x11B6], NFKC: [0xACB7], NFKD: [0x1100, 0x1167, 0x11B6] }, +{ source: [0xACB8], NFC: [0xACB8], NFD: [0x1100, 0x1167, 0x11B7], NFKC: [0xACB8], NFKD: [0x1100, 0x1167, 0x11B7] }, +{ source: [0xACB9], NFC: [0xACB9], NFD: [0x1100, 0x1167, 0x11B8], NFKC: [0xACB9], NFKD: [0x1100, 0x1167, 0x11B8] }, +{ source: [0xACBA], NFC: [0xACBA], NFD: [0x1100, 0x1167, 0x11B9], NFKC: [0xACBA], NFKD: [0x1100, 0x1167, 0x11B9] }, +{ source: [0xACBB], NFC: [0xACBB], NFD: [0x1100, 0x1167, 0x11BA], NFKC: [0xACBB], NFKD: [0x1100, 0x1167, 0x11BA] }, +{ source: [0xACBC], NFC: [0xACBC], NFD: [0x1100, 0x1167, 0x11BB], NFKC: [0xACBC], NFKD: [0x1100, 0x1167, 0x11BB] }, +{ source: [0xACBD], NFC: [0xACBD], NFD: [0x1100, 0x1167, 0x11BC], NFKC: [0xACBD], NFKD: [0x1100, 0x1167, 0x11BC] }, +{ source: [0xACBE], NFC: [0xACBE], NFD: [0x1100, 0x1167, 0x11BD], NFKC: [0xACBE], NFKD: [0x1100, 0x1167, 0x11BD] }, +{ source: [0xACBF], NFC: [0xACBF], NFD: [0x1100, 0x1167, 0x11BE], NFKC: [0xACBF], NFKD: [0x1100, 0x1167, 0x11BE] }, +{ source: [0xACC0], NFC: [0xACC0], NFD: [0x1100, 0x1167, 0x11BF], NFKC: [0xACC0], NFKD: [0x1100, 0x1167, 0x11BF] }, +{ source: [0xACC1], NFC: [0xACC1], NFD: [0x1100, 0x1167, 0x11C0], NFKC: [0xACC1], NFKD: [0x1100, 0x1167, 0x11C0] }, +{ source: [0xACC2], NFC: [0xACC2], NFD: [0x1100, 0x1167, 0x11C1], NFKC: [0xACC2], NFKD: [0x1100, 0x1167, 0x11C1] }, +{ source: [0xACC3], NFC: [0xACC3], NFD: [0x1100, 0x1167, 0x11C2], NFKC: [0xACC3], NFKD: [0x1100, 0x1167, 0x11C2] }, +{ source: [0xACC4], NFC: [0xACC4], NFD: [0x1100, 0x1168], NFKC: [0xACC4], NFKD: [0x1100, 0x1168] }, +{ source: [0xACC5], NFC: [0xACC5], NFD: [0x1100, 0x1168, 0x11A8], NFKC: [0xACC5], NFKD: [0x1100, 0x1168, 0x11A8] }, +{ source: [0xACC6], NFC: [0xACC6], NFD: [0x1100, 0x1168, 0x11A9], NFKC: [0xACC6], NFKD: [0x1100, 0x1168, 0x11A9] }, +{ source: [0xACC7], NFC: [0xACC7], NFD: [0x1100, 0x1168, 0x11AA], NFKC: [0xACC7], NFKD: [0x1100, 0x1168, 0x11AA] }, +{ source: [0xACC8], NFC: [0xACC8], NFD: [0x1100, 0x1168, 0x11AB], NFKC: [0xACC8], NFKD: [0x1100, 0x1168, 0x11AB] }, +{ source: [0xACC9], NFC: [0xACC9], NFD: [0x1100, 0x1168, 0x11AC], NFKC: [0xACC9], NFKD: [0x1100, 0x1168, 0x11AC] }, +{ source: [0xACCA], NFC: [0xACCA], NFD: [0x1100, 0x1168, 0x11AD], NFKC: [0xACCA], NFKD: [0x1100, 0x1168, 0x11AD] }, +{ source: [0xACCB], NFC: [0xACCB], NFD: [0x1100, 0x1168, 0x11AE], NFKC: [0xACCB], NFKD: [0x1100, 0x1168, 0x11AE] }, +{ source: [0xACCC], NFC: [0xACCC], NFD: [0x1100, 0x1168, 0x11AF], NFKC: [0xACCC], NFKD: [0x1100, 0x1168, 0x11AF] }, +{ source: [0xACCD], NFC: [0xACCD], NFD: [0x1100, 0x1168, 0x11B0], NFKC: [0xACCD], NFKD: [0x1100, 0x1168, 0x11B0] }, +{ source: [0xACCE], NFC: [0xACCE], NFD: [0x1100, 0x1168, 0x11B1], NFKC: [0xACCE], NFKD: [0x1100, 0x1168, 0x11B1] }, +{ source: [0xACCF], NFC: [0xACCF], NFD: [0x1100, 0x1168, 0x11B2], NFKC: [0xACCF], NFKD: [0x1100, 0x1168, 0x11B2] }, +{ source: [0xACD0], NFC: [0xACD0], NFD: [0x1100, 0x1168, 0x11B3], NFKC: [0xACD0], NFKD: [0x1100, 0x1168, 0x11B3] }, +{ source: [0xACD1], NFC: [0xACD1], NFD: [0x1100, 0x1168, 0x11B4], NFKC: [0xACD1], NFKD: [0x1100, 0x1168, 0x11B4] }, +{ source: [0xACD2], NFC: [0xACD2], NFD: [0x1100, 0x1168, 0x11B5], NFKC: [0xACD2], NFKD: [0x1100, 0x1168, 0x11B5] }, +{ source: [0xACD3], NFC: [0xACD3], NFD: [0x1100, 0x1168, 0x11B6], NFKC: [0xACD3], NFKD: [0x1100, 0x1168, 0x11B6] }, +{ source: [0xACD4], NFC: [0xACD4], NFD: [0x1100, 0x1168, 0x11B7], NFKC: [0xACD4], NFKD: [0x1100, 0x1168, 0x11B7] }, +{ source: [0xACD5], NFC: [0xACD5], NFD: [0x1100, 0x1168, 0x11B8], NFKC: [0xACD5], NFKD: [0x1100, 0x1168, 0x11B8] }, +{ source: [0xACD6], NFC: [0xACD6], NFD: [0x1100, 0x1168, 0x11B9], NFKC: [0xACD6], NFKD: [0x1100, 0x1168, 0x11B9] }, +{ source: [0xACD7], NFC: [0xACD7], NFD: [0x1100, 0x1168, 0x11BA], NFKC: [0xACD7], NFKD: [0x1100, 0x1168, 0x11BA] }, +{ source: [0xACD8], NFC: [0xACD8], NFD: [0x1100, 0x1168, 0x11BB], NFKC: [0xACD8], NFKD: [0x1100, 0x1168, 0x11BB] }, +{ source: [0xACD9], NFC: [0xACD9], NFD: [0x1100, 0x1168, 0x11BC], NFKC: [0xACD9], NFKD: [0x1100, 0x1168, 0x11BC] }, +{ source: [0xACDA], NFC: [0xACDA], NFD: [0x1100, 0x1168, 0x11BD], NFKC: [0xACDA], NFKD: [0x1100, 0x1168, 0x11BD] }, +{ source: [0xACDB], NFC: [0xACDB], NFD: [0x1100, 0x1168, 0x11BE], NFKC: [0xACDB], NFKD: [0x1100, 0x1168, 0x11BE] }, +{ source: [0xACDC], NFC: [0xACDC], NFD: [0x1100, 0x1168, 0x11BF], NFKC: [0xACDC], NFKD: [0x1100, 0x1168, 0x11BF] }, +{ source: [0xACDD], NFC: [0xACDD], NFD: [0x1100, 0x1168, 0x11C0], NFKC: [0xACDD], NFKD: [0x1100, 0x1168, 0x11C0] }, +{ source: [0xACDE], NFC: [0xACDE], NFD: [0x1100, 0x1168, 0x11C1], NFKC: [0xACDE], NFKD: [0x1100, 0x1168, 0x11C1] }, +{ source: [0xACDF], NFC: [0xACDF], NFD: [0x1100, 0x1168, 0x11C2], NFKC: [0xACDF], NFKD: [0x1100, 0x1168, 0x11C2] }, +{ source: [0xACE0], NFC: [0xACE0], NFD: [0x1100, 0x1169], NFKC: [0xACE0], NFKD: [0x1100, 0x1169] }, +{ source: [0xACE1], NFC: [0xACE1], NFD: [0x1100, 0x1169, 0x11A8], NFKC: [0xACE1], NFKD: [0x1100, 0x1169, 0x11A8] }, +{ source: [0xACE2], NFC: [0xACE2], NFD: [0x1100, 0x1169, 0x11A9], NFKC: [0xACE2], NFKD: [0x1100, 0x1169, 0x11A9] }, +{ source: [0xACE3], NFC: [0xACE3], NFD: [0x1100, 0x1169, 0x11AA], NFKC: [0xACE3], NFKD: [0x1100, 0x1169, 0x11AA] }, +{ source: [0xACE4], NFC: [0xACE4], NFD: [0x1100, 0x1169, 0x11AB], NFKC: [0xACE4], NFKD: [0x1100, 0x1169, 0x11AB] }, +{ source: [0xACE5], NFC: [0xACE5], NFD: [0x1100, 0x1169, 0x11AC], NFKC: [0xACE5], NFKD: [0x1100, 0x1169, 0x11AC] }, +{ source: [0xACE6], NFC: [0xACE6], NFD: [0x1100, 0x1169, 0x11AD], NFKC: [0xACE6], NFKD: [0x1100, 0x1169, 0x11AD] }, +{ source: [0xACE7], NFC: [0xACE7], NFD: [0x1100, 0x1169, 0x11AE], NFKC: [0xACE7], NFKD: [0x1100, 0x1169, 0x11AE] }, +{ source: [0xACE8], NFC: [0xACE8], NFD: [0x1100, 0x1169, 0x11AF], NFKC: [0xACE8], NFKD: [0x1100, 0x1169, 0x11AF] }, +{ source: [0xACE9], NFC: [0xACE9], NFD: [0x1100, 0x1169, 0x11B0], NFKC: [0xACE9], NFKD: [0x1100, 0x1169, 0x11B0] }, +{ source: [0xACEA], NFC: [0xACEA], NFD: [0x1100, 0x1169, 0x11B1], NFKC: [0xACEA], NFKD: [0x1100, 0x1169, 0x11B1] }, +{ source: [0xACEB], NFC: [0xACEB], NFD: [0x1100, 0x1169, 0x11B2], NFKC: [0xACEB], NFKD: [0x1100, 0x1169, 0x11B2] }, +{ source: [0xACEC], NFC: [0xACEC], NFD: [0x1100, 0x1169, 0x11B3], NFKC: [0xACEC], NFKD: [0x1100, 0x1169, 0x11B3] }, +{ source: [0xACED], NFC: [0xACED], NFD: [0x1100, 0x1169, 0x11B4], NFKC: [0xACED], NFKD: [0x1100, 0x1169, 0x11B4] }, +{ source: [0xACEE], NFC: [0xACEE], NFD: [0x1100, 0x1169, 0x11B5], NFKC: [0xACEE], NFKD: [0x1100, 0x1169, 0x11B5] }, +{ source: [0xACEF], NFC: [0xACEF], NFD: [0x1100, 0x1169, 0x11B6], NFKC: [0xACEF], NFKD: [0x1100, 0x1169, 0x11B6] }, +{ source: [0xACF0], NFC: [0xACF0], NFD: [0x1100, 0x1169, 0x11B7], NFKC: [0xACF0], NFKD: [0x1100, 0x1169, 0x11B7] }, +{ source: [0xACF1], NFC: [0xACF1], NFD: [0x1100, 0x1169, 0x11B8], NFKC: [0xACF1], NFKD: [0x1100, 0x1169, 0x11B8] }, +{ source: [0xACF2], NFC: [0xACF2], NFD: [0x1100, 0x1169, 0x11B9], NFKC: [0xACF2], NFKD: [0x1100, 0x1169, 0x11B9] }, +{ source: [0xACF3], NFC: [0xACF3], NFD: [0x1100, 0x1169, 0x11BA], NFKC: [0xACF3], NFKD: [0x1100, 0x1169, 0x11BA] }, +{ source: [0xACF4], NFC: [0xACF4], NFD: [0x1100, 0x1169, 0x11BB], NFKC: [0xACF4], NFKD: [0x1100, 0x1169, 0x11BB] }, +{ source: [0xACF5], NFC: [0xACF5], NFD: [0x1100, 0x1169, 0x11BC], NFKC: [0xACF5], NFKD: [0x1100, 0x1169, 0x11BC] }, +{ source: [0xACF6], NFC: [0xACF6], NFD: [0x1100, 0x1169, 0x11BD], NFKC: [0xACF6], NFKD: [0x1100, 0x1169, 0x11BD] }, +{ source: [0xACF7], NFC: [0xACF7], NFD: [0x1100, 0x1169, 0x11BE], NFKC: [0xACF7], NFKD: [0x1100, 0x1169, 0x11BE] }, +{ source: [0xACF8], NFC: [0xACF8], NFD: [0x1100, 0x1169, 0x11BF], NFKC: [0xACF8], NFKD: [0x1100, 0x1169, 0x11BF] }, +{ source: [0xACF9], NFC: [0xACF9], NFD: [0x1100, 0x1169, 0x11C0], NFKC: [0xACF9], NFKD: [0x1100, 0x1169, 0x11C0] }, +{ source: [0xACFA], NFC: [0xACFA], NFD: [0x1100, 0x1169, 0x11C1], NFKC: [0xACFA], NFKD: [0x1100, 0x1169, 0x11C1] }, +{ source: [0xACFB], NFC: [0xACFB], NFD: [0x1100, 0x1169, 0x11C2], NFKC: [0xACFB], NFKD: [0x1100, 0x1169, 0x11C2] }, +{ source: [0xACFC], NFC: [0xACFC], NFD: [0x1100, 0x116A], NFKC: [0xACFC], NFKD: [0x1100, 0x116A] }, +{ source: [0xACFD], NFC: [0xACFD], NFD: [0x1100, 0x116A, 0x11A8], NFKC: [0xACFD], NFKD: [0x1100, 0x116A, 0x11A8] }, +{ source: [0xACFE], NFC: [0xACFE], NFD: [0x1100, 0x116A, 0x11A9], NFKC: [0xACFE], NFKD: [0x1100, 0x116A, 0x11A9] }, +{ source: [0xACFF], NFC: [0xACFF], NFD: [0x1100, 0x116A, 0x11AA], NFKC: [0xACFF], NFKD: [0x1100, 0x116A, 0x11AA] }, +{ source: [0xAD00], NFC: [0xAD00], NFD: [0x1100, 0x116A, 0x11AB], NFKC: [0xAD00], NFKD: [0x1100, 0x116A, 0x11AB] }, +{ source: [0xAD01], NFC: [0xAD01], NFD: [0x1100, 0x116A, 0x11AC], NFKC: [0xAD01], NFKD: [0x1100, 0x116A, 0x11AC] }, +{ source: [0xAD02], NFC: [0xAD02], NFD: [0x1100, 0x116A, 0x11AD], NFKC: [0xAD02], NFKD: [0x1100, 0x116A, 0x11AD] }, +{ source: [0xAD03], NFC: [0xAD03], NFD: [0x1100, 0x116A, 0x11AE], NFKC: [0xAD03], NFKD: [0x1100, 0x116A, 0x11AE] }, +{ source: [0xAD04], NFC: [0xAD04], NFD: [0x1100, 0x116A, 0x11AF], NFKC: [0xAD04], NFKD: [0x1100, 0x116A, 0x11AF] }, +{ source: [0xAD05], NFC: [0xAD05], NFD: [0x1100, 0x116A, 0x11B0], NFKC: [0xAD05], NFKD: [0x1100, 0x116A, 0x11B0] }, +{ source: [0xAD06], NFC: [0xAD06], NFD: [0x1100, 0x116A, 0x11B1], NFKC: [0xAD06], NFKD: [0x1100, 0x116A, 0x11B1] }, +{ source: [0xAD07], NFC: [0xAD07], NFD: [0x1100, 0x116A, 0x11B2], NFKC: [0xAD07], NFKD: [0x1100, 0x116A, 0x11B2] }, +{ source: [0xAD08], NFC: [0xAD08], NFD: [0x1100, 0x116A, 0x11B3], NFKC: [0xAD08], NFKD: [0x1100, 0x116A, 0x11B3] }, +{ source: [0xAD09], NFC: [0xAD09], NFD: [0x1100, 0x116A, 0x11B4], NFKC: [0xAD09], NFKD: [0x1100, 0x116A, 0x11B4] }, +{ source: [0xAD0A], NFC: [0xAD0A], NFD: [0x1100, 0x116A, 0x11B5], NFKC: [0xAD0A], NFKD: [0x1100, 0x116A, 0x11B5] }, +{ source: [0xAD0B], NFC: [0xAD0B], NFD: [0x1100, 0x116A, 0x11B6], NFKC: [0xAD0B], NFKD: [0x1100, 0x116A, 0x11B6] }, +{ source: [0xAD0C], NFC: [0xAD0C], NFD: [0x1100, 0x116A, 0x11B7], NFKC: [0xAD0C], NFKD: [0x1100, 0x116A, 0x11B7] }, +{ source: [0xAD0D], NFC: [0xAD0D], NFD: [0x1100, 0x116A, 0x11B8], NFKC: [0xAD0D], NFKD: [0x1100, 0x116A, 0x11B8] }, +{ source: [0xAD0E], NFC: [0xAD0E], NFD: [0x1100, 0x116A, 0x11B9], NFKC: [0xAD0E], NFKD: [0x1100, 0x116A, 0x11B9] }, +{ source: [0xAD0F], NFC: [0xAD0F], NFD: [0x1100, 0x116A, 0x11BA], NFKC: [0xAD0F], NFKD: [0x1100, 0x116A, 0x11BA] }, +{ source: [0xAD10], NFC: [0xAD10], NFD: [0x1100, 0x116A, 0x11BB], NFKC: [0xAD10], NFKD: [0x1100, 0x116A, 0x11BB] }, +{ source: [0xAD11], NFC: [0xAD11], NFD: [0x1100, 0x116A, 0x11BC], NFKC: [0xAD11], NFKD: [0x1100, 0x116A, 0x11BC] }, +{ source: [0xAD12], NFC: [0xAD12], NFD: [0x1100, 0x116A, 0x11BD], NFKC: [0xAD12], NFKD: [0x1100, 0x116A, 0x11BD] }, +{ source: [0xAD13], NFC: [0xAD13], NFD: [0x1100, 0x116A, 0x11BE], NFKC: [0xAD13], NFKD: [0x1100, 0x116A, 0x11BE] }, +{ source: [0xAD14], NFC: [0xAD14], NFD: [0x1100, 0x116A, 0x11BF], NFKC: [0xAD14], NFKD: [0x1100, 0x116A, 0x11BF] }, +{ source: [0xAD15], NFC: [0xAD15], NFD: [0x1100, 0x116A, 0x11C0], NFKC: [0xAD15], NFKD: [0x1100, 0x116A, 0x11C0] }, +{ source: [0xAD16], NFC: [0xAD16], NFD: [0x1100, 0x116A, 0x11C1], NFKC: [0xAD16], NFKD: [0x1100, 0x116A, 0x11C1] }, +{ source: [0xAD17], NFC: [0xAD17], NFD: [0x1100, 0x116A, 0x11C2], NFKC: [0xAD17], NFKD: [0x1100, 0x116A, 0x11C2] }, +{ source: [0xAD18], NFC: [0xAD18], NFD: [0x1100, 0x116B], NFKC: [0xAD18], NFKD: [0x1100, 0x116B] }, +{ source: [0xAD19], NFC: [0xAD19], NFD: [0x1100, 0x116B, 0x11A8], NFKC: [0xAD19], NFKD: [0x1100, 0x116B, 0x11A8] }, +{ source: [0xAD1A], NFC: [0xAD1A], NFD: [0x1100, 0x116B, 0x11A9], NFKC: [0xAD1A], NFKD: [0x1100, 0x116B, 0x11A9] }, +{ source: [0xAD1B], NFC: [0xAD1B], NFD: [0x1100, 0x116B, 0x11AA], NFKC: [0xAD1B], NFKD: [0x1100, 0x116B, 0x11AA] }, +{ source: [0xAD1C], NFC: [0xAD1C], NFD: [0x1100, 0x116B, 0x11AB], NFKC: [0xAD1C], NFKD: [0x1100, 0x116B, 0x11AB] }, +{ source: [0xAD1D], NFC: [0xAD1D], NFD: [0x1100, 0x116B, 0x11AC], NFKC: [0xAD1D], NFKD: [0x1100, 0x116B, 0x11AC] }, +{ source: [0xAD1E], NFC: [0xAD1E], NFD: [0x1100, 0x116B, 0x11AD], NFKC: [0xAD1E], NFKD: [0x1100, 0x116B, 0x11AD] }, +{ source: [0xAD1F], NFC: [0xAD1F], NFD: [0x1100, 0x116B, 0x11AE], NFKC: [0xAD1F], NFKD: [0x1100, 0x116B, 0x11AE] }, +{ source: [0xAD20], NFC: [0xAD20], NFD: [0x1100, 0x116B, 0x11AF], NFKC: [0xAD20], NFKD: [0x1100, 0x116B, 0x11AF] }, +{ source: [0xAD21], NFC: [0xAD21], NFD: [0x1100, 0x116B, 0x11B0], NFKC: [0xAD21], NFKD: [0x1100, 0x116B, 0x11B0] }, +{ source: [0xAD22], NFC: [0xAD22], NFD: [0x1100, 0x116B, 0x11B1], NFKC: [0xAD22], NFKD: [0x1100, 0x116B, 0x11B1] }, +{ source: [0xAD23], NFC: [0xAD23], NFD: [0x1100, 0x116B, 0x11B2], NFKC: [0xAD23], NFKD: [0x1100, 0x116B, 0x11B2] }, +{ source: [0xAD24], NFC: [0xAD24], NFD: [0x1100, 0x116B, 0x11B3], NFKC: [0xAD24], NFKD: [0x1100, 0x116B, 0x11B3] }, +{ source: [0xAD25], NFC: [0xAD25], NFD: [0x1100, 0x116B, 0x11B4], NFKC: [0xAD25], NFKD: [0x1100, 0x116B, 0x11B4] }, +{ source: [0xAD26], NFC: [0xAD26], NFD: [0x1100, 0x116B, 0x11B5], NFKC: [0xAD26], NFKD: [0x1100, 0x116B, 0x11B5] }, +{ source: [0xAD27], NFC: [0xAD27], NFD: [0x1100, 0x116B, 0x11B6], NFKC: [0xAD27], NFKD: [0x1100, 0x116B, 0x11B6] }, +{ source: [0xAD28], NFC: [0xAD28], NFD: [0x1100, 0x116B, 0x11B7], NFKC: [0xAD28], NFKD: [0x1100, 0x116B, 0x11B7] }, +{ source: [0xAD29], NFC: [0xAD29], NFD: [0x1100, 0x116B, 0x11B8], NFKC: [0xAD29], NFKD: [0x1100, 0x116B, 0x11B8] }, +{ source: [0xAD2A], NFC: [0xAD2A], NFD: [0x1100, 0x116B, 0x11B9], NFKC: [0xAD2A], NFKD: [0x1100, 0x116B, 0x11B9] }, +{ source: [0xAD2B], NFC: [0xAD2B], NFD: [0x1100, 0x116B, 0x11BA], NFKC: [0xAD2B], NFKD: [0x1100, 0x116B, 0x11BA] }, +{ source: [0xAD2C], NFC: [0xAD2C], NFD: [0x1100, 0x116B, 0x11BB], NFKC: [0xAD2C], NFKD: [0x1100, 0x116B, 0x11BB] }, +{ source: [0xAD2D], NFC: [0xAD2D], NFD: [0x1100, 0x116B, 0x11BC], NFKC: [0xAD2D], NFKD: [0x1100, 0x116B, 0x11BC] }, +{ source: [0xAD2E], NFC: [0xAD2E], NFD: [0x1100, 0x116B, 0x11BD], NFKC: [0xAD2E], NFKD: [0x1100, 0x116B, 0x11BD] }, +{ source: [0xAD2F], NFC: [0xAD2F], NFD: [0x1100, 0x116B, 0x11BE], NFKC: [0xAD2F], NFKD: [0x1100, 0x116B, 0x11BE] }, +{ source: [0xAD30], NFC: [0xAD30], NFD: [0x1100, 0x116B, 0x11BF], NFKC: [0xAD30], NFKD: [0x1100, 0x116B, 0x11BF] }, +{ source: [0xAD31], NFC: [0xAD31], NFD: [0x1100, 0x116B, 0x11C0], NFKC: [0xAD31], NFKD: [0x1100, 0x116B, 0x11C0] }, +{ source: [0xAD32], NFC: [0xAD32], NFD: [0x1100, 0x116B, 0x11C1], NFKC: [0xAD32], NFKD: [0x1100, 0x116B, 0x11C1] }, +{ source: [0xAD33], NFC: [0xAD33], NFD: [0x1100, 0x116B, 0x11C2], NFKC: [0xAD33], NFKD: [0x1100, 0x116B, 0x11C2] }, +{ source: [0xAD34], NFC: [0xAD34], NFD: [0x1100, 0x116C], NFKC: [0xAD34], NFKD: [0x1100, 0x116C] }, +{ source: [0xAD35], NFC: [0xAD35], NFD: [0x1100, 0x116C, 0x11A8], NFKC: [0xAD35], NFKD: [0x1100, 0x116C, 0x11A8] }, +{ source: [0xAD36], NFC: [0xAD36], NFD: [0x1100, 0x116C, 0x11A9], NFKC: [0xAD36], NFKD: [0x1100, 0x116C, 0x11A9] }, +{ source: [0xAD37], NFC: [0xAD37], NFD: [0x1100, 0x116C, 0x11AA], NFKC: [0xAD37], NFKD: [0x1100, 0x116C, 0x11AA] }, +{ source: [0xAD38], NFC: [0xAD38], NFD: [0x1100, 0x116C, 0x11AB], NFKC: [0xAD38], NFKD: [0x1100, 0x116C, 0x11AB] }, +{ source: [0xAD39], NFC: [0xAD39], NFD: [0x1100, 0x116C, 0x11AC], NFKC: [0xAD39], NFKD: [0x1100, 0x116C, 0x11AC] }, +{ source: [0xAD3A], NFC: [0xAD3A], NFD: [0x1100, 0x116C, 0x11AD], NFKC: [0xAD3A], NFKD: [0x1100, 0x116C, 0x11AD] }, +{ source: [0xAD3B], NFC: [0xAD3B], NFD: [0x1100, 0x116C, 0x11AE], NFKC: [0xAD3B], NFKD: [0x1100, 0x116C, 0x11AE] }, +{ source: [0xAD3C], NFC: [0xAD3C], NFD: [0x1100, 0x116C, 0x11AF], NFKC: [0xAD3C], NFKD: [0x1100, 0x116C, 0x11AF] }, +{ source: [0xAD3D], NFC: [0xAD3D], NFD: [0x1100, 0x116C, 0x11B0], NFKC: [0xAD3D], NFKD: [0x1100, 0x116C, 0x11B0] }, +{ source: [0xAD3E], NFC: [0xAD3E], NFD: [0x1100, 0x116C, 0x11B1], NFKC: [0xAD3E], NFKD: [0x1100, 0x116C, 0x11B1] }, +{ source: [0xAD3F], NFC: [0xAD3F], NFD: [0x1100, 0x116C, 0x11B2], NFKC: [0xAD3F], NFKD: [0x1100, 0x116C, 0x11B2] }, +{ source: [0xAD40], NFC: [0xAD40], NFD: [0x1100, 0x116C, 0x11B3], NFKC: [0xAD40], NFKD: [0x1100, 0x116C, 0x11B3] }, +{ source: [0xAD41], NFC: [0xAD41], NFD: [0x1100, 0x116C, 0x11B4], NFKC: [0xAD41], NFKD: [0x1100, 0x116C, 0x11B4] }, +{ source: [0xAD42], NFC: [0xAD42], NFD: [0x1100, 0x116C, 0x11B5], NFKC: [0xAD42], NFKD: [0x1100, 0x116C, 0x11B5] }, +{ source: [0xAD43], NFC: [0xAD43], NFD: [0x1100, 0x116C, 0x11B6], NFKC: [0xAD43], NFKD: [0x1100, 0x116C, 0x11B6] }, +{ source: [0xAD44], NFC: [0xAD44], NFD: [0x1100, 0x116C, 0x11B7], NFKC: [0xAD44], NFKD: [0x1100, 0x116C, 0x11B7] }, +{ source: [0xAD45], NFC: [0xAD45], NFD: [0x1100, 0x116C, 0x11B8], NFKC: [0xAD45], NFKD: [0x1100, 0x116C, 0x11B8] }, +{ source: [0xAD46], NFC: [0xAD46], NFD: [0x1100, 0x116C, 0x11B9], NFKC: [0xAD46], NFKD: [0x1100, 0x116C, 0x11B9] }, +{ source: [0xAD47], NFC: [0xAD47], NFD: [0x1100, 0x116C, 0x11BA], NFKC: [0xAD47], NFKD: [0x1100, 0x116C, 0x11BA] }, +{ source: [0xAD48], NFC: [0xAD48], NFD: [0x1100, 0x116C, 0x11BB], NFKC: [0xAD48], NFKD: [0x1100, 0x116C, 0x11BB] }, +{ source: [0xAD49], NFC: [0xAD49], NFD: [0x1100, 0x116C, 0x11BC], NFKC: [0xAD49], NFKD: [0x1100, 0x116C, 0x11BC] }, +{ source: [0xAD4A], NFC: [0xAD4A], NFD: [0x1100, 0x116C, 0x11BD], NFKC: [0xAD4A], NFKD: [0x1100, 0x116C, 0x11BD] }, +{ source: [0xAD4B], NFC: [0xAD4B], NFD: [0x1100, 0x116C, 0x11BE], NFKC: [0xAD4B], NFKD: [0x1100, 0x116C, 0x11BE] }, +{ source: [0xAD4C], NFC: [0xAD4C], NFD: [0x1100, 0x116C, 0x11BF], NFKC: [0xAD4C], NFKD: [0x1100, 0x116C, 0x11BF] }, +{ source: [0xAD4D], NFC: [0xAD4D], NFD: [0x1100, 0x116C, 0x11C0], NFKC: [0xAD4D], NFKD: [0x1100, 0x116C, 0x11C0] }, +{ source: [0xAD4E], NFC: [0xAD4E], NFD: [0x1100, 0x116C, 0x11C1], NFKC: [0xAD4E], NFKD: [0x1100, 0x116C, 0x11C1] }, +{ source: [0xAD4F], NFC: [0xAD4F], NFD: [0x1100, 0x116C, 0x11C2], NFKC: [0xAD4F], NFKD: [0x1100, 0x116C, 0x11C2] }, +{ source: [0xAD50], NFC: [0xAD50], NFD: [0x1100, 0x116D], NFKC: [0xAD50], NFKD: [0x1100, 0x116D] }, +{ source: [0xAD51], NFC: [0xAD51], NFD: [0x1100, 0x116D, 0x11A8], NFKC: [0xAD51], NFKD: [0x1100, 0x116D, 0x11A8] }, +{ source: [0xAD52], NFC: [0xAD52], NFD: [0x1100, 0x116D, 0x11A9], NFKC: [0xAD52], NFKD: [0x1100, 0x116D, 0x11A9] }, +{ source: [0xAD53], NFC: [0xAD53], NFD: [0x1100, 0x116D, 0x11AA], NFKC: [0xAD53], NFKD: [0x1100, 0x116D, 0x11AA] }, +{ source: [0xAD54], NFC: [0xAD54], NFD: [0x1100, 0x116D, 0x11AB], NFKC: [0xAD54], NFKD: [0x1100, 0x116D, 0x11AB] }, +{ source: [0xAD55], NFC: [0xAD55], NFD: [0x1100, 0x116D, 0x11AC], NFKC: [0xAD55], NFKD: [0x1100, 0x116D, 0x11AC] }, +{ source: [0xAD56], NFC: [0xAD56], NFD: [0x1100, 0x116D, 0x11AD], NFKC: [0xAD56], NFKD: [0x1100, 0x116D, 0x11AD] }, +{ source: [0xAD57], NFC: [0xAD57], NFD: [0x1100, 0x116D, 0x11AE], NFKC: [0xAD57], NFKD: [0x1100, 0x116D, 0x11AE] }, +{ source: [0xAD58], NFC: [0xAD58], NFD: [0x1100, 0x116D, 0x11AF], NFKC: [0xAD58], NFKD: [0x1100, 0x116D, 0x11AF] }, +{ source: [0xAD59], NFC: [0xAD59], NFD: [0x1100, 0x116D, 0x11B0], NFKC: [0xAD59], NFKD: [0x1100, 0x116D, 0x11B0] }, +{ source: [0xAD5A], NFC: [0xAD5A], NFD: [0x1100, 0x116D, 0x11B1], NFKC: [0xAD5A], NFKD: [0x1100, 0x116D, 0x11B1] }, +{ source: [0xAD5B], NFC: [0xAD5B], NFD: [0x1100, 0x116D, 0x11B2], NFKC: [0xAD5B], NFKD: [0x1100, 0x116D, 0x11B2] }, +{ source: [0xAD5C], NFC: [0xAD5C], NFD: [0x1100, 0x116D, 0x11B3], NFKC: [0xAD5C], NFKD: [0x1100, 0x116D, 0x11B3] }, +{ source: [0xAD5D], NFC: [0xAD5D], NFD: [0x1100, 0x116D, 0x11B4], NFKC: [0xAD5D], NFKD: [0x1100, 0x116D, 0x11B4] }, +{ source: [0xAD5E], NFC: [0xAD5E], NFD: [0x1100, 0x116D, 0x11B5], NFKC: [0xAD5E], NFKD: [0x1100, 0x116D, 0x11B5] }, +{ source: [0xAD5F], NFC: [0xAD5F], NFD: [0x1100, 0x116D, 0x11B6], NFKC: [0xAD5F], NFKD: [0x1100, 0x116D, 0x11B6] }, +{ source: [0xAD60], NFC: [0xAD60], NFD: [0x1100, 0x116D, 0x11B7], NFKC: [0xAD60], NFKD: [0x1100, 0x116D, 0x11B7] }, +{ source: [0xAD61], NFC: [0xAD61], NFD: [0x1100, 0x116D, 0x11B8], NFKC: [0xAD61], NFKD: [0x1100, 0x116D, 0x11B8] }, +{ source: [0xAD62], NFC: [0xAD62], NFD: [0x1100, 0x116D, 0x11B9], NFKC: [0xAD62], NFKD: [0x1100, 0x116D, 0x11B9] }, +{ source: [0xAD63], NFC: [0xAD63], NFD: [0x1100, 0x116D, 0x11BA], NFKC: [0xAD63], NFKD: [0x1100, 0x116D, 0x11BA] }, +{ source: [0xAD64], NFC: [0xAD64], NFD: [0x1100, 0x116D, 0x11BB], NFKC: [0xAD64], NFKD: [0x1100, 0x116D, 0x11BB] }, +{ source: [0xAD65], NFC: [0xAD65], NFD: [0x1100, 0x116D, 0x11BC], NFKC: [0xAD65], NFKD: [0x1100, 0x116D, 0x11BC] }, +{ source: [0xAD66], NFC: [0xAD66], NFD: [0x1100, 0x116D, 0x11BD], NFKC: [0xAD66], NFKD: [0x1100, 0x116D, 0x11BD] }, +{ source: [0xAD67], NFC: [0xAD67], NFD: [0x1100, 0x116D, 0x11BE], NFKC: [0xAD67], NFKD: [0x1100, 0x116D, 0x11BE] }, +{ source: [0xAD68], NFC: [0xAD68], NFD: [0x1100, 0x116D, 0x11BF], NFKC: [0xAD68], NFKD: [0x1100, 0x116D, 0x11BF] }, +{ source: [0xAD69], NFC: [0xAD69], NFD: [0x1100, 0x116D, 0x11C0], NFKC: [0xAD69], NFKD: [0x1100, 0x116D, 0x11C0] }, +{ source: [0xAD6A], NFC: [0xAD6A], NFD: [0x1100, 0x116D, 0x11C1], NFKC: [0xAD6A], NFKD: [0x1100, 0x116D, 0x11C1] }, +{ source: [0xAD6B], NFC: [0xAD6B], NFD: [0x1100, 0x116D, 0x11C2], NFKC: [0xAD6B], NFKD: [0x1100, 0x116D, 0x11C2] }, +{ source: [0xAD6C], NFC: [0xAD6C], NFD: [0x1100, 0x116E], NFKC: [0xAD6C], NFKD: [0x1100, 0x116E] }, +{ source: [0xAD6D], NFC: [0xAD6D], NFD: [0x1100, 0x116E, 0x11A8], NFKC: [0xAD6D], NFKD: [0x1100, 0x116E, 0x11A8] }, +{ source: [0xAD6E], NFC: [0xAD6E], NFD: [0x1100, 0x116E, 0x11A9], NFKC: [0xAD6E], NFKD: [0x1100, 0x116E, 0x11A9] }, +{ source: [0xAD6F], NFC: [0xAD6F], NFD: [0x1100, 0x116E, 0x11AA], NFKC: [0xAD6F], NFKD: [0x1100, 0x116E, 0x11AA] }, +{ source: [0xAD70], NFC: [0xAD70], NFD: [0x1100, 0x116E, 0x11AB], NFKC: [0xAD70], NFKD: [0x1100, 0x116E, 0x11AB] }, +{ source: [0xAD71], NFC: [0xAD71], NFD: [0x1100, 0x116E, 0x11AC], NFKC: [0xAD71], NFKD: [0x1100, 0x116E, 0x11AC] }, +{ source: [0xAD72], NFC: [0xAD72], NFD: [0x1100, 0x116E, 0x11AD], NFKC: [0xAD72], NFKD: [0x1100, 0x116E, 0x11AD] }, +{ source: [0xAD73], NFC: [0xAD73], NFD: [0x1100, 0x116E, 0x11AE], NFKC: [0xAD73], NFKD: [0x1100, 0x116E, 0x11AE] }, +{ source: [0xAD74], NFC: [0xAD74], NFD: [0x1100, 0x116E, 0x11AF], NFKC: [0xAD74], NFKD: [0x1100, 0x116E, 0x11AF] }, +{ source: [0xAD75], NFC: [0xAD75], NFD: [0x1100, 0x116E, 0x11B0], NFKC: [0xAD75], NFKD: [0x1100, 0x116E, 0x11B0] }, +{ source: [0xAD76], NFC: [0xAD76], NFD: [0x1100, 0x116E, 0x11B1], NFKC: [0xAD76], NFKD: [0x1100, 0x116E, 0x11B1] }, +{ source: [0xAD77], NFC: [0xAD77], NFD: [0x1100, 0x116E, 0x11B2], NFKC: [0xAD77], NFKD: [0x1100, 0x116E, 0x11B2] }, +{ source: [0xAD78], NFC: [0xAD78], NFD: [0x1100, 0x116E, 0x11B3], NFKC: [0xAD78], NFKD: [0x1100, 0x116E, 0x11B3] }, +{ source: [0xAD79], NFC: [0xAD79], NFD: [0x1100, 0x116E, 0x11B4], NFKC: [0xAD79], NFKD: [0x1100, 0x116E, 0x11B4] }, +{ source: [0xAD7A], NFC: [0xAD7A], NFD: [0x1100, 0x116E, 0x11B5], NFKC: [0xAD7A], NFKD: [0x1100, 0x116E, 0x11B5] }, +{ source: [0xAD7B], NFC: [0xAD7B], NFD: [0x1100, 0x116E, 0x11B6], NFKC: [0xAD7B], NFKD: [0x1100, 0x116E, 0x11B6] }, +{ source: [0xAD7C], NFC: [0xAD7C], NFD: [0x1100, 0x116E, 0x11B7], NFKC: [0xAD7C], NFKD: [0x1100, 0x116E, 0x11B7] }, +{ source: [0xAD7D], NFC: [0xAD7D], NFD: [0x1100, 0x116E, 0x11B8], NFKC: [0xAD7D], NFKD: [0x1100, 0x116E, 0x11B8] }, +{ source: [0xAD7E], NFC: [0xAD7E], NFD: [0x1100, 0x116E, 0x11B9], NFKC: [0xAD7E], NFKD: [0x1100, 0x116E, 0x11B9] }, +{ source: [0xAD7F], NFC: [0xAD7F], NFD: [0x1100, 0x116E, 0x11BA], NFKC: [0xAD7F], NFKD: [0x1100, 0x116E, 0x11BA] }, +{ source: [0xAD80], NFC: [0xAD80], NFD: [0x1100, 0x116E, 0x11BB], NFKC: [0xAD80], NFKD: [0x1100, 0x116E, 0x11BB] }, +{ source: [0xAD81], NFC: [0xAD81], NFD: [0x1100, 0x116E, 0x11BC], NFKC: [0xAD81], NFKD: [0x1100, 0x116E, 0x11BC] }, +{ source: [0xAD82], NFC: [0xAD82], NFD: [0x1100, 0x116E, 0x11BD], NFKC: [0xAD82], NFKD: [0x1100, 0x116E, 0x11BD] }, +{ source: [0xAD83], NFC: [0xAD83], NFD: [0x1100, 0x116E, 0x11BE], NFKC: [0xAD83], NFKD: [0x1100, 0x116E, 0x11BE] }, +{ source: [0xAD84], NFC: [0xAD84], NFD: [0x1100, 0x116E, 0x11BF], NFKC: [0xAD84], NFKD: [0x1100, 0x116E, 0x11BF] }, +{ source: [0xAD85], NFC: [0xAD85], NFD: [0x1100, 0x116E, 0x11C0], NFKC: [0xAD85], NFKD: [0x1100, 0x116E, 0x11C0] }, +{ source: [0xAD86], NFC: [0xAD86], NFD: [0x1100, 0x116E, 0x11C1], NFKC: [0xAD86], NFKD: [0x1100, 0x116E, 0x11C1] }, +{ source: [0xAD87], NFC: [0xAD87], NFD: [0x1100, 0x116E, 0x11C2], NFKC: [0xAD87], NFKD: [0x1100, 0x116E, 0x11C2] }, +{ source: [0xAD88], NFC: [0xAD88], NFD: [0x1100, 0x116F], NFKC: [0xAD88], NFKD: [0x1100, 0x116F] }, +{ source: [0xAD89], NFC: [0xAD89], NFD: [0x1100, 0x116F, 0x11A8], NFKC: [0xAD89], NFKD: [0x1100, 0x116F, 0x11A8] }, +{ source: [0xAD8A], NFC: [0xAD8A], NFD: [0x1100, 0x116F, 0x11A9], NFKC: [0xAD8A], NFKD: [0x1100, 0x116F, 0x11A9] }, +{ source: [0xAD8B], NFC: [0xAD8B], NFD: [0x1100, 0x116F, 0x11AA], NFKC: [0xAD8B], NFKD: [0x1100, 0x116F, 0x11AA] }, +{ source: [0xAD8C], NFC: [0xAD8C], NFD: [0x1100, 0x116F, 0x11AB], NFKC: [0xAD8C], NFKD: [0x1100, 0x116F, 0x11AB] }, +{ source: [0xAD8D], NFC: [0xAD8D], NFD: [0x1100, 0x116F, 0x11AC], NFKC: [0xAD8D], NFKD: [0x1100, 0x116F, 0x11AC] }, +{ source: [0xAD8E], NFC: [0xAD8E], NFD: [0x1100, 0x116F, 0x11AD], NFKC: [0xAD8E], NFKD: [0x1100, 0x116F, 0x11AD] }, +{ source: [0xAD8F], NFC: [0xAD8F], NFD: [0x1100, 0x116F, 0x11AE], NFKC: [0xAD8F], NFKD: [0x1100, 0x116F, 0x11AE] }, +{ source: [0xAD90], NFC: [0xAD90], NFD: [0x1100, 0x116F, 0x11AF], NFKC: [0xAD90], NFKD: [0x1100, 0x116F, 0x11AF] }, +{ source: [0xAD91], NFC: [0xAD91], NFD: [0x1100, 0x116F, 0x11B0], NFKC: [0xAD91], NFKD: [0x1100, 0x116F, 0x11B0] }, +{ source: [0xAD92], NFC: [0xAD92], NFD: [0x1100, 0x116F, 0x11B1], NFKC: [0xAD92], NFKD: [0x1100, 0x116F, 0x11B1] }, +{ source: [0xAD93], NFC: [0xAD93], NFD: [0x1100, 0x116F, 0x11B2], NFKC: [0xAD93], NFKD: [0x1100, 0x116F, 0x11B2] }, +{ source: [0xAD94], NFC: [0xAD94], NFD: [0x1100, 0x116F, 0x11B3], NFKC: [0xAD94], NFKD: [0x1100, 0x116F, 0x11B3] }, +{ source: [0xAD95], NFC: [0xAD95], NFD: [0x1100, 0x116F, 0x11B4], NFKC: [0xAD95], NFKD: [0x1100, 0x116F, 0x11B4] }, +{ source: [0xAD96], NFC: [0xAD96], NFD: [0x1100, 0x116F, 0x11B5], NFKC: [0xAD96], NFKD: [0x1100, 0x116F, 0x11B5] }, +{ source: [0xAD97], NFC: [0xAD97], NFD: [0x1100, 0x116F, 0x11B6], NFKC: [0xAD97], NFKD: [0x1100, 0x116F, 0x11B6] }, +{ source: [0xAD98], NFC: [0xAD98], NFD: [0x1100, 0x116F, 0x11B7], NFKC: [0xAD98], NFKD: [0x1100, 0x116F, 0x11B7] }, +{ source: [0xAD99], NFC: [0xAD99], NFD: [0x1100, 0x116F, 0x11B8], NFKC: [0xAD99], NFKD: [0x1100, 0x116F, 0x11B8] }, +{ source: [0xAD9A], NFC: [0xAD9A], NFD: [0x1100, 0x116F, 0x11B9], NFKC: [0xAD9A], NFKD: [0x1100, 0x116F, 0x11B9] }, +{ source: [0xAD9B], NFC: [0xAD9B], NFD: [0x1100, 0x116F, 0x11BA], NFKC: [0xAD9B], NFKD: [0x1100, 0x116F, 0x11BA] }, +{ source: [0xAD9C], NFC: [0xAD9C], NFD: [0x1100, 0x116F, 0x11BB], NFKC: [0xAD9C], NFKD: [0x1100, 0x116F, 0x11BB] }, +{ source: [0xAD9D], NFC: [0xAD9D], NFD: [0x1100, 0x116F, 0x11BC], NFKC: [0xAD9D], NFKD: [0x1100, 0x116F, 0x11BC] }, +{ source: [0xAD9E], NFC: [0xAD9E], NFD: [0x1100, 0x116F, 0x11BD], NFKC: [0xAD9E], NFKD: [0x1100, 0x116F, 0x11BD] }, +{ source: [0xAD9F], NFC: [0xAD9F], NFD: [0x1100, 0x116F, 0x11BE], NFKC: [0xAD9F], NFKD: [0x1100, 0x116F, 0x11BE] }, +{ source: [0xADA0], NFC: [0xADA0], NFD: [0x1100, 0x116F, 0x11BF], NFKC: [0xADA0], NFKD: [0x1100, 0x116F, 0x11BF] }, +{ source: [0xADA1], NFC: [0xADA1], NFD: [0x1100, 0x116F, 0x11C0], NFKC: [0xADA1], NFKD: [0x1100, 0x116F, 0x11C0] }, +{ source: [0xADA2], NFC: [0xADA2], NFD: [0x1100, 0x116F, 0x11C1], NFKC: [0xADA2], NFKD: [0x1100, 0x116F, 0x11C1] }, +{ source: [0xADA3], NFC: [0xADA3], NFD: [0x1100, 0x116F, 0x11C2], NFKC: [0xADA3], NFKD: [0x1100, 0x116F, 0x11C2] }, +{ source: [0xADA4], NFC: [0xADA4], NFD: [0x1100, 0x1170], NFKC: [0xADA4], NFKD: [0x1100, 0x1170] }, +{ source: [0xADA5], NFC: [0xADA5], NFD: [0x1100, 0x1170, 0x11A8], NFKC: [0xADA5], NFKD: [0x1100, 0x1170, 0x11A8] }, +{ source: [0xADA6], NFC: [0xADA6], NFD: [0x1100, 0x1170, 0x11A9], NFKC: [0xADA6], NFKD: [0x1100, 0x1170, 0x11A9] }, +{ source: [0xADA7], NFC: [0xADA7], NFD: [0x1100, 0x1170, 0x11AA], NFKC: [0xADA7], NFKD: [0x1100, 0x1170, 0x11AA] }, +{ source: [0xADA8], NFC: [0xADA8], NFD: [0x1100, 0x1170, 0x11AB], NFKC: [0xADA8], NFKD: [0x1100, 0x1170, 0x11AB] }, +{ source: [0xADA9], NFC: [0xADA9], NFD: [0x1100, 0x1170, 0x11AC], NFKC: [0xADA9], NFKD: [0x1100, 0x1170, 0x11AC] }, +{ source: [0xADAA], NFC: [0xADAA], NFD: [0x1100, 0x1170, 0x11AD], NFKC: [0xADAA], NFKD: [0x1100, 0x1170, 0x11AD] }, +{ source: [0xADAB], NFC: [0xADAB], NFD: [0x1100, 0x1170, 0x11AE], NFKC: [0xADAB], NFKD: [0x1100, 0x1170, 0x11AE] }, +{ source: [0xADAC], NFC: [0xADAC], NFD: [0x1100, 0x1170, 0x11AF], NFKC: [0xADAC], NFKD: [0x1100, 0x1170, 0x11AF] }, +{ source: [0xADAD], NFC: [0xADAD], NFD: [0x1100, 0x1170, 0x11B0], NFKC: [0xADAD], NFKD: [0x1100, 0x1170, 0x11B0] }, +{ source: [0xADAE], NFC: [0xADAE], NFD: [0x1100, 0x1170, 0x11B1], NFKC: [0xADAE], NFKD: [0x1100, 0x1170, 0x11B1] }, +{ source: [0xADAF], NFC: [0xADAF], NFD: [0x1100, 0x1170, 0x11B2], NFKC: [0xADAF], NFKD: [0x1100, 0x1170, 0x11B2] }, +{ source: [0xADB0], NFC: [0xADB0], NFD: [0x1100, 0x1170, 0x11B3], NFKC: [0xADB0], NFKD: [0x1100, 0x1170, 0x11B3] }, +{ source: [0xADB1], NFC: [0xADB1], NFD: [0x1100, 0x1170, 0x11B4], NFKC: [0xADB1], NFKD: [0x1100, 0x1170, 0x11B4] }, +{ source: [0xADB2], NFC: [0xADB2], NFD: [0x1100, 0x1170, 0x11B5], NFKC: [0xADB2], NFKD: [0x1100, 0x1170, 0x11B5] }, +{ source: [0xADB3], NFC: [0xADB3], NFD: [0x1100, 0x1170, 0x11B6], NFKC: [0xADB3], NFKD: [0x1100, 0x1170, 0x11B6] }, +{ source: [0xADB4], NFC: [0xADB4], NFD: [0x1100, 0x1170, 0x11B7], NFKC: [0xADB4], NFKD: [0x1100, 0x1170, 0x11B7] }, +{ source: [0xADB5], NFC: [0xADB5], NFD: [0x1100, 0x1170, 0x11B8], NFKC: [0xADB5], NFKD: [0x1100, 0x1170, 0x11B8] }, +{ source: [0xADB6], NFC: [0xADB6], NFD: [0x1100, 0x1170, 0x11B9], NFKC: [0xADB6], NFKD: [0x1100, 0x1170, 0x11B9] }, +{ source: [0xADB7], NFC: [0xADB7], NFD: [0x1100, 0x1170, 0x11BA], NFKC: [0xADB7], NFKD: [0x1100, 0x1170, 0x11BA] }, +{ source: [0xADB8], NFC: [0xADB8], NFD: [0x1100, 0x1170, 0x11BB], NFKC: [0xADB8], NFKD: [0x1100, 0x1170, 0x11BB] }, +{ source: [0xADB9], NFC: [0xADB9], NFD: [0x1100, 0x1170, 0x11BC], NFKC: [0xADB9], NFKD: [0x1100, 0x1170, 0x11BC] }, +{ source: [0xADBA], NFC: [0xADBA], NFD: [0x1100, 0x1170, 0x11BD], NFKC: [0xADBA], NFKD: [0x1100, 0x1170, 0x11BD] }, +{ source: [0xADBB], NFC: [0xADBB], NFD: [0x1100, 0x1170, 0x11BE], NFKC: [0xADBB], NFKD: [0x1100, 0x1170, 0x11BE] }, +{ source: [0xADBC], NFC: [0xADBC], NFD: [0x1100, 0x1170, 0x11BF], NFKC: [0xADBC], NFKD: [0x1100, 0x1170, 0x11BF] }, +{ source: [0xADBD], NFC: [0xADBD], NFD: [0x1100, 0x1170, 0x11C0], NFKC: [0xADBD], NFKD: [0x1100, 0x1170, 0x11C0] }, +{ source: [0xADBE], NFC: [0xADBE], NFD: [0x1100, 0x1170, 0x11C1], NFKC: [0xADBE], NFKD: [0x1100, 0x1170, 0x11C1] }, +{ source: [0xADBF], NFC: [0xADBF], NFD: [0x1100, 0x1170, 0x11C2], NFKC: [0xADBF], NFKD: [0x1100, 0x1170, 0x11C2] }, +{ source: [0xADC0], NFC: [0xADC0], NFD: [0x1100, 0x1171], NFKC: [0xADC0], NFKD: [0x1100, 0x1171] }, +{ source: [0xADC1], NFC: [0xADC1], NFD: [0x1100, 0x1171, 0x11A8], NFKC: [0xADC1], NFKD: [0x1100, 0x1171, 0x11A8] }, +{ source: [0xADC2], NFC: [0xADC2], NFD: [0x1100, 0x1171, 0x11A9], NFKC: [0xADC2], NFKD: [0x1100, 0x1171, 0x11A9] }, +{ source: [0xADC3], NFC: [0xADC3], NFD: [0x1100, 0x1171, 0x11AA], NFKC: [0xADC3], NFKD: [0x1100, 0x1171, 0x11AA] }, +{ source: [0xADC4], NFC: [0xADC4], NFD: [0x1100, 0x1171, 0x11AB], NFKC: [0xADC4], NFKD: [0x1100, 0x1171, 0x11AB] }, +{ source: [0xADC5], NFC: [0xADC5], NFD: [0x1100, 0x1171, 0x11AC], NFKC: [0xADC5], NFKD: [0x1100, 0x1171, 0x11AC] }, +{ source: [0xADC6], NFC: [0xADC6], NFD: [0x1100, 0x1171, 0x11AD], NFKC: [0xADC6], NFKD: [0x1100, 0x1171, 0x11AD] }, +{ source: [0xADC7], NFC: [0xADC7], NFD: [0x1100, 0x1171, 0x11AE], NFKC: [0xADC7], NFKD: [0x1100, 0x1171, 0x11AE] }, +{ source: [0xADC8], NFC: [0xADC8], NFD: [0x1100, 0x1171, 0x11AF], NFKC: [0xADC8], NFKD: [0x1100, 0x1171, 0x11AF] }, +{ source: [0xADC9], NFC: [0xADC9], NFD: [0x1100, 0x1171, 0x11B0], NFKC: [0xADC9], NFKD: [0x1100, 0x1171, 0x11B0] }, +{ source: [0xADCA], NFC: [0xADCA], NFD: [0x1100, 0x1171, 0x11B1], NFKC: [0xADCA], NFKD: [0x1100, 0x1171, 0x11B1] }, +{ source: [0xADCB], NFC: [0xADCB], NFD: [0x1100, 0x1171, 0x11B2], NFKC: [0xADCB], NFKD: [0x1100, 0x1171, 0x11B2] }, +{ source: [0xADCC], NFC: [0xADCC], NFD: [0x1100, 0x1171, 0x11B3], NFKC: [0xADCC], NFKD: [0x1100, 0x1171, 0x11B3] }, +{ source: [0xADCD], NFC: [0xADCD], NFD: [0x1100, 0x1171, 0x11B4], NFKC: [0xADCD], NFKD: [0x1100, 0x1171, 0x11B4] }, +{ source: [0xADCE], NFC: [0xADCE], NFD: [0x1100, 0x1171, 0x11B5], NFKC: [0xADCE], NFKD: [0x1100, 0x1171, 0x11B5] }, +{ source: [0xADCF], NFC: [0xADCF], NFD: [0x1100, 0x1171, 0x11B6], NFKC: [0xADCF], NFKD: [0x1100, 0x1171, 0x11B6] }, +{ source: [0xADD0], NFC: [0xADD0], NFD: [0x1100, 0x1171, 0x11B7], NFKC: [0xADD0], NFKD: [0x1100, 0x1171, 0x11B7] }, +{ source: [0xADD1], NFC: [0xADD1], NFD: [0x1100, 0x1171, 0x11B8], NFKC: [0xADD1], NFKD: [0x1100, 0x1171, 0x11B8] }, +{ source: [0xADD2], NFC: [0xADD2], NFD: [0x1100, 0x1171, 0x11B9], NFKC: [0xADD2], NFKD: [0x1100, 0x1171, 0x11B9] }, +{ source: [0xADD3], NFC: [0xADD3], NFD: [0x1100, 0x1171, 0x11BA], NFKC: [0xADD3], NFKD: [0x1100, 0x1171, 0x11BA] }, +{ source: [0xADD4], NFC: [0xADD4], NFD: [0x1100, 0x1171, 0x11BB], NFKC: [0xADD4], NFKD: [0x1100, 0x1171, 0x11BB] }, +{ source: [0xADD5], NFC: [0xADD5], NFD: [0x1100, 0x1171, 0x11BC], NFKC: [0xADD5], NFKD: [0x1100, 0x1171, 0x11BC] }, +{ source: [0xADD6], NFC: [0xADD6], NFD: [0x1100, 0x1171, 0x11BD], NFKC: [0xADD6], NFKD: [0x1100, 0x1171, 0x11BD] }, +{ source: [0xADD7], NFC: [0xADD7], NFD: [0x1100, 0x1171, 0x11BE], NFKC: [0xADD7], NFKD: [0x1100, 0x1171, 0x11BE] }, +{ source: [0xADD8], NFC: [0xADD8], NFD: [0x1100, 0x1171, 0x11BF], NFKC: [0xADD8], NFKD: [0x1100, 0x1171, 0x11BF] }, +{ source: [0xADD9], NFC: [0xADD9], NFD: [0x1100, 0x1171, 0x11C0], NFKC: [0xADD9], NFKD: [0x1100, 0x1171, 0x11C0] }, +{ source: [0xADDA], NFC: [0xADDA], NFD: [0x1100, 0x1171, 0x11C1], NFKC: [0xADDA], NFKD: [0x1100, 0x1171, 0x11C1] }, +{ source: [0xADDB], NFC: [0xADDB], NFD: [0x1100, 0x1171, 0x11C2], NFKC: [0xADDB], NFKD: [0x1100, 0x1171, 0x11C2] }, +{ source: [0xADDC], NFC: [0xADDC], NFD: [0x1100, 0x1172], NFKC: [0xADDC], NFKD: [0x1100, 0x1172] }, +{ source: [0xADDD], NFC: [0xADDD], NFD: [0x1100, 0x1172, 0x11A8], NFKC: [0xADDD], NFKD: [0x1100, 0x1172, 0x11A8] }, +{ source: [0xADDE], NFC: [0xADDE], NFD: [0x1100, 0x1172, 0x11A9], NFKC: [0xADDE], NFKD: [0x1100, 0x1172, 0x11A9] }, +{ source: [0xADDF], NFC: [0xADDF], NFD: [0x1100, 0x1172, 0x11AA], NFKC: [0xADDF], NFKD: [0x1100, 0x1172, 0x11AA] }, +{ source: [0xADE0], NFC: [0xADE0], NFD: [0x1100, 0x1172, 0x11AB], NFKC: [0xADE0], NFKD: [0x1100, 0x1172, 0x11AB] }, +{ source: [0xADE1], NFC: [0xADE1], NFD: [0x1100, 0x1172, 0x11AC], NFKC: [0xADE1], NFKD: [0x1100, 0x1172, 0x11AC] }, +{ source: [0xADE2], NFC: [0xADE2], NFD: [0x1100, 0x1172, 0x11AD], NFKC: [0xADE2], NFKD: [0x1100, 0x1172, 0x11AD] }, +{ source: [0xADE3], NFC: [0xADE3], NFD: [0x1100, 0x1172, 0x11AE], NFKC: [0xADE3], NFKD: [0x1100, 0x1172, 0x11AE] }, +{ source: [0xADE4], NFC: [0xADE4], NFD: [0x1100, 0x1172, 0x11AF], NFKC: [0xADE4], NFKD: [0x1100, 0x1172, 0x11AF] }, +{ source: [0xADE5], NFC: [0xADE5], NFD: [0x1100, 0x1172, 0x11B0], NFKC: [0xADE5], NFKD: [0x1100, 0x1172, 0x11B0] }, +{ source: [0xADE6], NFC: [0xADE6], NFD: [0x1100, 0x1172, 0x11B1], NFKC: [0xADE6], NFKD: [0x1100, 0x1172, 0x11B1] }, +{ source: [0xADE7], NFC: [0xADE7], NFD: [0x1100, 0x1172, 0x11B2], NFKC: [0xADE7], NFKD: [0x1100, 0x1172, 0x11B2] }, +{ source: [0xADE8], NFC: [0xADE8], NFD: [0x1100, 0x1172, 0x11B3], NFKC: [0xADE8], NFKD: [0x1100, 0x1172, 0x11B3] }, +{ source: [0xADE9], NFC: [0xADE9], NFD: [0x1100, 0x1172, 0x11B4], NFKC: [0xADE9], NFKD: [0x1100, 0x1172, 0x11B4] }, +{ source: [0xADEA], NFC: [0xADEA], NFD: [0x1100, 0x1172, 0x11B5], NFKC: [0xADEA], NFKD: [0x1100, 0x1172, 0x11B5] }, +{ source: [0xADEB], NFC: [0xADEB], NFD: [0x1100, 0x1172, 0x11B6], NFKC: [0xADEB], NFKD: [0x1100, 0x1172, 0x11B6] }, +{ source: [0xADEC], NFC: [0xADEC], NFD: [0x1100, 0x1172, 0x11B7], NFKC: [0xADEC], NFKD: [0x1100, 0x1172, 0x11B7] }, +{ source: [0xADED], NFC: [0xADED], NFD: [0x1100, 0x1172, 0x11B8], NFKC: [0xADED], NFKD: [0x1100, 0x1172, 0x11B8] }, +{ source: [0xADEE], NFC: [0xADEE], NFD: [0x1100, 0x1172, 0x11B9], NFKC: [0xADEE], NFKD: [0x1100, 0x1172, 0x11B9] }, +{ source: [0xADEF], NFC: [0xADEF], NFD: [0x1100, 0x1172, 0x11BA], NFKC: [0xADEF], NFKD: [0x1100, 0x1172, 0x11BA] }, +{ source: [0xADF0], NFC: [0xADF0], NFD: [0x1100, 0x1172, 0x11BB], NFKC: [0xADF0], NFKD: [0x1100, 0x1172, 0x11BB] }, +{ source: [0xADF1], NFC: [0xADF1], NFD: [0x1100, 0x1172, 0x11BC], NFKC: [0xADF1], NFKD: [0x1100, 0x1172, 0x11BC] }, +{ source: [0xADF2], NFC: [0xADF2], NFD: [0x1100, 0x1172, 0x11BD], NFKC: [0xADF2], NFKD: [0x1100, 0x1172, 0x11BD] }, +{ source: [0xADF3], NFC: [0xADF3], NFD: [0x1100, 0x1172, 0x11BE], NFKC: [0xADF3], NFKD: [0x1100, 0x1172, 0x11BE] }, +{ source: [0xADF4], NFC: [0xADF4], NFD: [0x1100, 0x1172, 0x11BF], NFKC: [0xADF4], NFKD: [0x1100, 0x1172, 0x11BF] }, +{ source: [0xADF5], NFC: [0xADF5], NFD: [0x1100, 0x1172, 0x11C0], NFKC: [0xADF5], NFKD: [0x1100, 0x1172, 0x11C0] }, +{ source: [0xADF6], NFC: [0xADF6], NFD: [0x1100, 0x1172, 0x11C1], NFKC: [0xADF6], NFKD: [0x1100, 0x1172, 0x11C1] }, +{ source: [0xADF7], NFC: [0xADF7], NFD: [0x1100, 0x1172, 0x11C2], NFKC: [0xADF7], NFKD: [0x1100, 0x1172, 0x11C2] }, +{ source: [0xADF8], NFC: [0xADF8], NFD: [0x1100, 0x1173], NFKC: [0xADF8], NFKD: [0x1100, 0x1173] }, +{ source: [0xADF9], NFC: [0xADF9], NFD: [0x1100, 0x1173, 0x11A8], NFKC: [0xADF9], NFKD: [0x1100, 0x1173, 0x11A8] }, +{ source: [0xADFA], NFC: [0xADFA], NFD: [0x1100, 0x1173, 0x11A9], NFKC: [0xADFA], NFKD: [0x1100, 0x1173, 0x11A9] }, +{ source: [0xADFB], NFC: [0xADFB], NFD: [0x1100, 0x1173, 0x11AA], NFKC: [0xADFB], NFKD: [0x1100, 0x1173, 0x11AA] }, +{ source: [0xADFC], NFC: [0xADFC], NFD: [0x1100, 0x1173, 0x11AB], NFKC: [0xADFC], NFKD: [0x1100, 0x1173, 0x11AB] }, +{ source: [0xADFD], NFC: [0xADFD], NFD: [0x1100, 0x1173, 0x11AC], NFKC: [0xADFD], NFKD: [0x1100, 0x1173, 0x11AC] }, +{ source: [0xADFE], NFC: [0xADFE], NFD: [0x1100, 0x1173, 0x11AD], NFKC: [0xADFE], NFKD: [0x1100, 0x1173, 0x11AD] }, +{ source: [0xADFF], NFC: [0xADFF], NFD: [0x1100, 0x1173, 0x11AE], NFKC: [0xADFF], NFKD: [0x1100, 0x1173, 0x11AE] }, +{ source: [0xAE00], NFC: [0xAE00], NFD: [0x1100, 0x1173, 0x11AF], NFKC: [0xAE00], NFKD: [0x1100, 0x1173, 0x11AF] }, +{ source: [0xAE01], NFC: [0xAE01], NFD: [0x1100, 0x1173, 0x11B0], NFKC: [0xAE01], NFKD: [0x1100, 0x1173, 0x11B0] }, +{ source: [0xAE02], NFC: [0xAE02], NFD: [0x1100, 0x1173, 0x11B1], NFKC: [0xAE02], NFKD: [0x1100, 0x1173, 0x11B1] }, +{ source: [0xAE03], NFC: [0xAE03], NFD: [0x1100, 0x1173, 0x11B2], NFKC: [0xAE03], NFKD: [0x1100, 0x1173, 0x11B2] }, +{ source: [0xAE04], NFC: [0xAE04], NFD: [0x1100, 0x1173, 0x11B3], NFKC: [0xAE04], NFKD: [0x1100, 0x1173, 0x11B3] }, +{ source: [0xAE05], NFC: [0xAE05], NFD: [0x1100, 0x1173, 0x11B4], NFKC: [0xAE05], NFKD: [0x1100, 0x1173, 0x11B4] }, +{ source: [0xAE06], NFC: [0xAE06], NFD: [0x1100, 0x1173, 0x11B5], NFKC: [0xAE06], NFKD: [0x1100, 0x1173, 0x11B5] }, +{ source: [0xAE07], NFC: [0xAE07], NFD: [0x1100, 0x1173, 0x11B6], NFKC: [0xAE07], NFKD: [0x1100, 0x1173, 0x11B6] }, +{ source: [0xAE08], NFC: [0xAE08], NFD: [0x1100, 0x1173, 0x11B7], NFKC: [0xAE08], NFKD: [0x1100, 0x1173, 0x11B7] }, +{ source: [0xAE09], NFC: [0xAE09], NFD: [0x1100, 0x1173, 0x11B8], NFKC: [0xAE09], NFKD: [0x1100, 0x1173, 0x11B8] }, +{ source: [0xAE0A], NFC: [0xAE0A], NFD: [0x1100, 0x1173, 0x11B9], NFKC: [0xAE0A], NFKD: [0x1100, 0x1173, 0x11B9] }, +{ source: [0xAE0B], NFC: [0xAE0B], NFD: [0x1100, 0x1173, 0x11BA], NFKC: [0xAE0B], NFKD: [0x1100, 0x1173, 0x11BA] }, +{ source: [0xAE0C], NFC: [0xAE0C], NFD: [0x1100, 0x1173, 0x11BB], NFKC: [0xAE0C], NFKD: [0x1100, 0x1173, 0x11BB] }, +{ source: [0xAE0D], NFC: [0xAE0D], NFD: [0x1100, 0x1173, 0x11BC], NFKC: [0xAE0D], NFKD: [0x1100, 0x1173, 0x11BC] }, +{ source: [0xAE0E], NFC: [0xAE0E], NFD: [0x1100, 0x1173, 0x11BD], NFKC: [0xAE0E], NFKD: [0x1100, 0x1173, 0x11BD] }, +{ source: [0xAE0F], NFC: [0xAE0F], NFD: [0x1100, 0x1173, 0x11BE], NFKC: [0xAE0F], NFKD: [0x1100, 0x1173, 0x11BE] }, +{ source: [0xAE10], NFC: [0xAE10], NFD: [0x1100, 0x1173, 0x11BF], NFKC: [0xAE10], NFKD: [0x1100, 0x1173, 0x11BF] }, +{ source: [0xAE11], NFC: [0xAE11], NFD: [0x1100, 0x1173, 0x11C0], NFKC: [0xAE11], NFKD: [0x1100, 0x1173, 0x11C0] }, +{ source: [0xAE12], NFC: [0xAE12], NFD: [0x1100, 0x1173, 0x11C1], NFKC: [0xAE12], NFKD: [0x1100, 0x1173, 0x11C1] }, +{ source: [0xAE13], NFC: [0xAE13], NFD: [0x1100, 0x1173, 0x11C2], NFKC: [0xAE13], NFKD: [0x1100, 0x1173, 0x11C2] }, +{ source: [0xAE14], NFC: [0xAE14], NFD: [0x1100, 0x1174], NFKC: [0xAE14], NFKD: [0x1100, 0x1174] }, +{ source: [0xAE15], NFC: [0xAE15], NFD: [0x1100, 0x1174, 0x11A8], NFKC: [0xAE15], NFKD: [0x1100, 0x1174, 0x11A8] }, +{ source: [0xAE16], NFC: [0xAE16], NFD: [0x1100, 0x1174, 0x11A9], NFKC: [0xAE16], NFKD: [0x1100, 0x1174, 0x11A9] }, +{ source: [0xAE17], NFC: [0xAE17], NFD: [0x1100, 0x1174, 0x11AA], NFKC: [0xAE17], NFKD: [0x1100, 0x1174, 0x11AA] }, +{ source: [0xAE18], NFC: [0xAE18], NFD: [0x1100, 0x1174, 0x11AB], NFKC: [0xAE18], NFKD: [0x1100, 0x1174, 0x11AB] }, +{ source: [0xAE19], NFC: [0xAE19], NFD: [0x1100, 0x1174, 0x11AC], NFKC: [0xAE19], NFKD: [0x1100, 0x1174, 0x11AC] }, +{ source: [0xAE1A], NFC: [0xAE1A], NFD: [0x1100, 0x1174, 0x11AD], NFKC: [0xAE1A], NFKD: [0x1100, 0x1174, 0x11AD] }, +{ source: [0xAE1B], NFC: [0xAE1B], NFD: [0x1100, 0x1174, 0x11AE], NFKC: [0xAE1B], NFKD: [0x1100, 0x1174, 0x11AE] }, +{ source: [0xAE1C], NFC: [0xAE1C], NFD: [0x1100, 0x1174, 0x11AF], NFKC: [0xAE1C], NFKD: [0x1100, 0x1174, 0x11AF] }, +{ source: [0xAE1D], NFC: [0xAE1D], NFD: [0x1100, 0x1174, 0x11B0], NFKC: [0xAE1D], NFKD: [0x1100, 0x1174, 0x11B0] }, +{ source: [0xAE1E], NFC: [0xAE1E], NFD: [0x1100, 0x1174, 0x11B1], NFKC: [0xAE1E], NFKD: [0x1100, 0x1174, 0x11B1] }, +{ source: [0xAE1F], NFC: [0xAE1F], NFD: [0x1100, 0x1174, 0x11B2], NFKC: [0xAE1F], NFKD: [0x1100, 0x1174, 0x11B2] }, +{ source: [0xAE20], NFC: [0xAE20], NFD: [0x1100, 0x1174, 0x11B3], NFKC: [0xAE20], NFKD: [0x1100, 0x1174, 0x11B3] }, +{ source: [0xAE21], NFC: [0xAE21], NFD: [0x1100, 0x1174, 0x11B4], NFKC: [0xAE21], NFKD: [0x1100, 0x1174, 0x11B4] }, +{ source: [0xAE22], NFC: [0xAE22], NFD: [0x1100, 0x1174, 0x11B5], NFKC: [0xAE22], NFKD: [0x1100, 0x1174, 0x11B5] }, +{ source: [0xAE23], NFC: [0xAE23], NFD: [0x1100, 0x1174, 0x11B6], NFKC: [0xAE23], NFKD: [0x1100, 0x1174, 0x11B6] }, +{ source: [0xAE24], NFC: [0xAE24], NFD: [0x1100, 0x1174, 0x11B7], NFKC: [0xAE24], NFKD: [0x1100, 0x1174, 0x11B7] }, +{ source: [0xAE25], NFC: [0xAE25], NFD: [0x1100, 0x1174, 0x11B8], NFKC: [0xAE25], NFKD: [0x1100, 0x1174, 0x11B8] }, +{ source: [0xAE26], NFC: [0xAE26], NFD: [0x1100, 0x1174, 0x11B9], NFKC: [0xAE26], NFKD: [0x1100, 0x1174, 0x11B9] }, +{ source: [0xAE27], NFC: [0xAE27], NFD: [0x1100, 0x1174, 0x11BA], NFKC: [0xAE27], NFKD: [0x1100, 0x1174, 0x11BA] }, +{ source: [0xAE28], NFC: [0xAE28], NFD: [0x1100, 0x1174, 0x11BB], NFKC: [0xAE28], NFKD: [0x1100, 0x1174, 0x11BB] }, +{ source: [0xAE29], NFC: [0xAE29], NFD: [0x1100, 0x1174, 0x11BC], NFKC: [0xAE29], NFKD: [0x1100, 0x1174, 0x11BC] }, +{ source: [0xAE2A], NFC: [0xAE2A], NFD: [0x1100, 0x1174, 0x11BD], NFKC: [0xAE2A], NFKD: [0x1100, 0x1174, 0x11BD] }, +{ source: [0xAE2B], NFC: [0xAE2B], NFD: [0x1100, 0x1174, 0x11BE], NFKC: [0xAE2B], NFKD: [0x1100, 0x1174, 0x11BE] }, +{ source: [0xAE2C], NFC: [0xAE2C], NFD: [0x1100, 0x1174, 0x11BF], NFKC: [0xAE2C], NFKD: [0x1100, 0x1174, 0x11BF] }, +{ source: [0xAE2D], NFC: [0xAE2D], NFD: [0x1100, 0x1174, 0x11C0], NFKC: [0xAE2D], NFKD: [0x1100, 0x1174, 0x11C0] }, +{ source: [0xAE2E], NFC: [0xAE2E], NFD: [0x1100, 0x1174, 0x11C1], NFKC: [0xAE2E], NFKD: [0x1100, 0x1174, 0x11C1] }, +{ source: [0xAE2F], NFC: [0xAE2F], NFD: [0x1100, 0x1174, 0x11C2], NFKC: [0xAE2F], NFKD: [0x1100, 0x1174, 0x11C2] }, +{ source: [0xAE30], NFC: [0xAE30], NFD: [0x1100, 0x1175], NFKC: [0xAE30], NFKD: [0x1100, 0x1175] }, +{ source: [0xAE31], NFC: [0xAE31], NFD: [0x1100, 0x1175, 0x11A8], NFKC: [0xAE31], NFKD: [0x1100, 0x1175, 0x11A8] }, +{ source: [0xAE32], NFC: [0xAE32], NFD: [0x1100, 0x1175, 0x11A9], NFKC: [0xAE32], NFKD: [0x1100, 0x1175, 0x11A9] }, +{ source: [0xAE33], NFC: [0xAE33], NFD: [0x1100, 0x1175, 0x11AA], NFKC: [0xAE33], NFKD: [0x1100, 0x1175, 0x11AA] }, +{ source: [0xAE34], NFC: [0xAE34], NFD: [0x1100, 0x1175, 0x11AB], NFKC: [0xAE34], NFKD: [0x1100, 0x1175, 0x11AB] }, +{ source: [0xAE35], NFC: [0xAE35], NFD: [0x1100, 0x1175, 0x11AC], NFKC: [0xAE35], NFKD: [0x1100, 0x1175, 0x11AC] }, +{ source: [0xAE36], NFC: [0xAE36], NFD: [0x1100, 0x1175, 0x11AD], NFKC: [0xAE36], NFKD: [0x1100, 0x1175, 0x11AD] }, +{ source: [0xAE37], NFC: [0xAE37], NFD: [0x1100, 0x1175, 0x11AE], NFKC: [0xAE37], NFKD: [0x1100, 0x1175, 0x11AE] }, +{ source: [0xAE38], NFC: [0xAE38], NFD: [0x1100, 0x1175, 0x11AF], NFKC: [0xAE38], NFKD: [0x1100, 0x1175, 0x11AF] }, +{ source: [0xAE39], NFC: [0xAE39], NFD: [0x1100, 0x1175, 0x11B0], NFKC: [0xAE39], NFKD: [0x1100, 0x1175, 0x11B0] }, +{ source: [0xAE3A], NFC: [0xAE3A], NFD: [0x1100, 0x1175, 0x11B1], NFKC: [0xAE3A], NFKD: [0x1100, 0x1175, 0x11B1] }, +{ source: [0xAE3B], NFC: [0xAE3B], NFD: [0x1100, 0x1175, 0x11B2], NFKC: [0xAE3B], NFKD: [0x1100, 0x1175, 0x11B2] }, +{ source: [0xAE3C], NFC: [0xAE3C], NFD: [0x1100, 0x1175, 0x11B3], NFKC: [0xAE3C], NFKD: [0x1100, 0x1175, 0x11B3] }, +{ source: [0xAE3D], NFC: [0xAE3D], NFD: [0x1100, 0x1175, 0x11B4], NFKC: [0xAE3D], NFKD: [0x1100, 0x1175, 0x11B4] }, +{ source: [0xAE3E], NFC: [0xAE3E], NFD: [0x1100, 0x1175, 0x11B5], NFKC: [0xAE3E], NFKD: [0x1100, 0x1175, 0x11B5] }, +{ source: [0xAE3F], NFC: [0xAE3F], NFD: [0x1100, 0x1175, 0x11B6], NFKC: [0xAE3F], NFKD: [0x1100, 0x1175, 0x11B6] }, +{ source: [0xAE40], NFC: [0xAE40], NFD: [0x1100, 0x1175, 0x11B7], NFKC: [0xAE40], NFKD: [0x1100, 0x1175, 0x11B7] }, +{ source: [0xAE41], NFC: [0xAE41], NFD: [0x1100, 0x1175, 0x11B8], NFKC: [0xAE41], NFKD: [0x1100, 0x1175, 0x11B8] }, +{ source: [0xAE42], NFC: [0xAE42], NFD: [0x1100, 0x1175, 0x11B9], NFKC: [0xAE42], NFKD: [0x1100, 0x1175, 0x11B9] }, +{ source: [0xAE43], NFC: [0xAE43], NFD: [0x1100, 0x1175, 0x11BA], NFKC: [0xAE43], NFKD: [0x1100, 0x1175, 0x11BA] }, +{ source: [0xAE44], NFC: [0xAE44], NFD: [0x1100, 0x1175, 0x11BB], NFKC: [0xAE44], NFKD: [0x1100, 0x1175, 0x11BB] }, +{ source: [0xAE45], NFC: [0xAE45], NFD: [0x1100, 0x1175, 0x11BC], NFKC: [0xAE45], NFKD: [0x1100, 0x1175, 0x11BC] }, +{ source: [0xAE46], NFC: [0xAE46], NFD: [0x1100, 0x1175, 0x11BD], NFKC: [0xAE46], NFKD: [0x1100, 0x1175, 0x11BD] }, +{ source: [0xAE47], NFC: [0xAE47], NFD: [0x1100, 0x1175, 0x11BE], NFKC: [0xAE47], NFKD: [0x1100, 0x1175, 0x11BE] }, +{ source: [0xAE48], NFC: [0xAE48], NFD: [0x1100, 0x1175, 0x11BF], NFKC: [0xAE48], NFKD: [0x1100, 0x1175, 0x11BF] }, +{ source: [0xAE49], NFC: [0xAE49], NFD: [0x1100, 0x1175, 0x11C0], NFKC: [0xAE49], NFKD: [0x1100, 0x1175, 0x11C0] }, +{ source: [0xAE4A], NFC: [0xAE4A], NFD: [0x1100, 0x1175, 0x11C1], NFKC: [0xAE4A], NFKD: [0x1100, 0x1175, 0x11C1] }, +{ source: [0xAE4B], NFC: [0xAE4B], NFD: [0x1100, 0x1175, 0x11C2], NFKC: [0xAE4B], NFKD: [0x1100, 0x1175, 0x11C2] }, +{ source: [0xAE4C], NFC: [0xAE4C], NFD: [0x1101, 0x1161], NFKC: [0xAE4C], NFKD: [0x1101, 0x1161] }, +{ source: [0xAE4D], NFC: [0xAE4D], NFD: [0x1101, 0x1161, 0x11A8], NFKC: [0xAE4D], NFKD: [0x1101, 0x1161, 0x11A8] }, +{ source: [0xAE4E], NFC: [0xAE4E], NFD: [0x1101, 0x1161, 0x11A9], NFKC: [0xAE4E], NFKD: [0x1101, 0x1161, 0x11A9] }, +{ source: [0xAE4F], NFC: [0xAE4F], NFD: [0x1101, 0x1161, 0x11AA], NFKC: [0xAE4F], NFKD: [0x1101, 0x1161, 0x11AA] }, +{ source: [0xAE50], NFC: [0xAE50], NFD: [0x1101, 0x1161, 0x11AB], NFKC: [0xAE50], NFKD: [0x1101, 0x1161, 0x11AB] }, +{ source: [0xAE51], NFC: [0xAE51], NFD: [0x1101, 0x1161, 0x11AC], NFKC: [0xAE51], NFKD: [0x1101, 0x1161, 0x11AC] }, +{ source: [0xAE52], NFC: [0xAE52], NFD: [0x1101, 0x1161, 0x11AD], NFKC: [0xAE52], NFKD: [0x1101, 0x1161, 0x11AD] }, +{ source: [0xAE53], NFC: [0xAE53], NFD: [0x1101, 0x1161, 0x11AE], NFKC: [0xAE53], NFKD: [0x1101, 0x1161, 0x11AE] }, +{ source: [0xAE54], NFC: [0xAE54], NFD: [0x1101, 0x1161, 0x11AF], NFKC: [0xAE54], NFKD: [0x1101, 0x1161, 0x11AF] }, +{ source: [0xAE55], NFC: [0xAE55], NFD: [0x1101, 0x1161, 0x11B0], NFKC: [0xAE55], NFKD: [0x1101, 0x1161, 0x11B0] }, +{ source: [0xAE56], NFC: [0xAE56], NFD: [0x1101, 0x1161, 0x11B1], NFKC: [0xAE56], NFKD: [0x1101, 0x1161, 0x11B1] }, +{ source: [0xAE57], NFC: [0xAE57], NFD: [0x1101, 0x1161, 0x11B2], NFKC: [0xAE57], NFKD: [0x1101, 0x1161, 0x11B2] }, +{ source: [0xAE58], NFC: [0xAE58], NFD: [0x1101, 0x1161, 0x11B3], NFKC: [0xAE58], NFKD: [0x1101, 0x1161, 0x11B3] }, +{ source: [0xAE59], NFC: [0xAE59], NFD: [0x1101, 0x1161, 0x11B4], NFKC: [0xAE59], NFKD: [0x1101, 0x1161, 0x11B4] }, +{ source: [0xAE5A], NFC: [0xAE5A], NFD: [0x1101, 0x1161, 0x11B5], NFKC: [0xAE5A], NFKD: [0x1101, 0x1161, 0x11B5] }, +{ source: [0xAE5B], NFC: [0xAE5B], NFD: [0x1101, 0x1161, 0x11B6], NFKC: [0xAE5B], NFKD: [0x1101, 0x1161, 0x11B6] }, +{ source: [0xAE5C], NFC: [0xAE5C], NFD: [0x1101, 0x1161, 0x11B7], NFKC: [0xAE5C], NFKD: [0x1101, 0x1161, 0x11B7] }, +{ source: [0xAE5D], NFC: [0xAE5D], NFD: [0x1101, 0x1161, 0x11B8], NFKC: [0xAE5D], NFKD: [0x1101, 0x1161, 0x11B8] }, +{ source: [0xAE5E], NFC: [0xAE5E], NFD: [0x1101, 0x1161, 0x11B9], NFKC: [0xAE5E], NFKD: [0x1101, 0x1161, 0x11B9] }, +{ source: [0xAE5F], NFC: [0xAE5F], NFD: [0x1101, 0x1161, 0x11BA], NFKC: [0xAE5F], NFKD: [0x1101, 0x1161, 0x11BA] }, +{ source: [0xAE60], NFC: [0xAE60], NFD: [0x1101, 0x1161, 0x11BB], NFKC: [0xAE60], NFKD: [0x1101, 0x1161, 0x11BB] }, +{ source: [0xAE61], NFC: [0xAE61], NFD: [0x1101, 0x1161, 0x11BC], NFKC: [0xAE61], NFKD: [0x1101, 0x1161, 0x11BC] }, +{ source: [0xAE62], NFC: [0xAE62], NFD: [0x1101, 0x1161, 0x11BD], NFKC: [0xAE62], NFKD: [0x1101, 0x1161, 0x11BD] }, +{ source: [0xAE63], NFC: [0xAE63], NFD: [0x1101, 0x1161, 0x11BE], NFKC: [0xAE63], NFKD: [0x1101, 0x1161, 0x11BE] }, +{ source: [0xAE64], NFC: [0xAE64], NFD: [0x1101, 0x1161, 0x11BF], NFKC: [0xAE64], NFKD: [0x1101, 0x1161, 0x11BF] }, +{ source: [0xAE65], NFC: [0xAE65], NFD: [0x1101, 0x1161, 0x11C0], NFKC: [0xAE65], NFKD: [0x1101, 0x1161, 0x11C0] }, +{ source: [0xAE66], NFC: [0xAE66], NFD: [0x1101, 0x1161, 0x11C1], NFKC: [0xAE66], NFKD: [0x1101, 0x1161, 0x11C1] }, +{ source: [0xAE67], NFC: [0xAE67], NFD: [0x1101, 0x1161, 0x11C2], NFKC: [0xAE67], NFKD: [0x1101, 0x1161, 0x11C2] }, +{ source: [0xAE68], NFC: [0xAE68], NFD: [0x1101, 0x1162], NFKC: [0xAE68], NFKD: [0x1101, 0x1162] }, +{ source: [0xAE69], NFC: [0xAE69], NFD: [0x1101, 0x1162, 0x11A8], NFKC: [0xAE69], NFKD: [0x1101, 0x1162, 0x11A8] }, +{ source: [0xAE6A], NFC: [0xAE6A], NFD: [0x1101, 0x1162, 0x11A9], NFKC: [0xAE6A], NFKD: [0x1101, 0x1162, 0x11A9] }, +{ source: [0xAE6B], NFC: [0xAE6B], NFD: [0x1101, 0x1162, 0x11AA], NFKC: [0xAE6B], NFKD: [0x1101, 0x1162, 0x11AA] }, +{ source: [0xAE6C], NFC: [0xAE6C], NFD: [0x1101, 0x1162, 0x11AB], NFKC: [0xAE6C], NFKD: [0x1101, 0x1162, 0x11AB] }, +{ source: [0xAE6D], NFC: [0xAE6D], NFD: [0x1101, 0x1162, 0x11AC], NFKC: [0xAE6D], NFKD: [0x1101, 0x1162, 0x11AC] }, +{ source: [0xAE6E], NFC: [0xAE6E], NFD: [0x1101, 0x1162, 0x11AD], NFKC: [0xAE6E], NFKD: [0x1101, 0x1162, 0x11AD] }, +{ source: [0xAE6F], NFC: [0xAE6F], NFD: [0x1101, 0x1162, 0x11AE], NFKC: [0xAE6F], NFKD: [0x1101, 0x1162, 0x11AE] }, +{ source: [0xAE70], NFC: [0xAE70], NFD: [0x1101, 0x1162, 0x11AF], NFKC: [0xAE70], NFKD: [0x1101, 0x1162, 0x11AF] }, +{ source: [0xAE71], NFC: [0xAE71], NFD: [0x1101, 0x1162, 0x11B0], NFKC: [0xAE71], NFKD: [0x1101, 0x1162, 0x11B0] }, +{ source: [0xAE72], NFC: [0xAE72], NFD: [0x1101, 0x1162, 0x11B1], NFKC: [0xAE72], NFKD: [0x1101, 0x1162, 0x11B1] }, +{ source: [0xAE73], NFC: [0xAE73], NFD: [0x1101, 0x1162, 0x11B2], NFKC: [0xAE73], NFKD: [0x1101, 0x1162, 0x11B2] }, +{ source: [0xAE74], NFC: [0xAE74], NFD: [0x1101, 0x1162, 0x11B3], NFKC: [0xAE74], NFKD: [0x1101, 0x1162, 0x11B3] }, +{ source: [0xAE75], NFC: [0xAE75], NFD: [0x1101, 0x1162, 0x11B4], NFKC: [0xAE75], NFKD: [0x1101, 0x1162, 0x11B4] }, +{ source: [0xAE76], NFC: [0xAE76], NFD: [0x1101, 0x1162, 0x11B5], NFKC: [0xAE76], NFKD: [0x1101, 0x1162, 0x11B5] }, +{ source: [0xAE77], NFC: [0xAE77], NFD: [0x1101, 0x1162, 0x11B6], NFKC: [0xAE77], NFKD: [0x1101, 0x1162, 0x11B6] }, +{ source: [0xAE78], NFC: [0xAE78], NFD: [0x1101, 0x1162, 0x11B7], NFKC: [0xAE78], NFKD: [0x1101, 0x1162, 0x11B7] }, +{ source: [0xAE79], NFC: [0xAE79], NFD: [0x1101, 0x1162, 0x11B8], NFKC: [0xAE79], NFKD: [0x1101, 0x1162, 0x11B8] }, +{ source: [0xAE7A], NFC: [0xAE7A], NFD: [0x1101, 0x1162, 0x11B9], NFKC: [0xAE7A], NFKD: [0x1101, 0x1162, 0x11B9] }, +{ source: [0xAE7B], NFC: [0xAE7B], NFD: [0x1101, 0x1162, 0x11BA], NFKC: [0xAE7B], NFKD: [0x1101, 0x1162, 0x11BA] }, +{ source: [0xAE7C], NFC: [0xAE7C], NFD: [0x1101, 0x1162, 0x11BB], NFKC: [0xAE7C], NFKD: [0x1101, 0x1162, 0x11BB] }, +{ source: [0xAE7D], NFC: [0xAE7D], NFD: [0x1101, 0x1162, 0x11BC], NFKC: [0xAE7D], NFKD: [0x1101, 0x1162, 0x11BC] }, +{ source: [0xAE7E], NFC: [0xAE7E], NFD: [0x1101, 0x1162, 0x11BD], NFKC: [0xAE7E], NFKD: [0x1101, 0x1162, 0x11BD] }, +{ source: [0xAE7F], NFC: [0xAE7F], NFD: [0x1101, 0x1162, 0x11BE], NFKC: [0xAE7F], NFKD: [0x1101, 0x1162, 0x11BE] }, +{ source: [0xAE80], NFC: [0xAE80], NFD: [0x1101, 0x1162, 0x11BF], NFKC: [0xAE80], NFKD: [0x1101, 0x1162, 0x11BF] }, +{ source: [0xAE81], NFC: [0xAE81], NFD: [0x1101, 0x1162, 0x11C0], NFKC: [0xAE81], NFKD: [0x1101, 0x1162, 0x11C0] }, +{ source: [0xAE82], NFC: [0xAE82], NFD: [0x1101, 0x1162, 0x11C1], NFKC: [0xAE82], NFKD: [0x1101, 0x1162, 0x11C1] }, +{ source: [0xAE83], NFC: [0xAE83], NFD: [0x1101, 0x1162, 0x11C2], NFKC: [0xAE83], NFKD: [0x1101, 0x1162, 0x11C2] }, +{ source: [0xAE84], NFC: [0xAE84], NFD: [0x1101, 0x1163], NFKC: [0xAE84], NFKD: [0x1101, 0x1163] }, +{ source: [0xAE85], NFC: [0xAE85], NFD: [0x1101, 0x1163, 0x11A8], NFKC: [0xAE85], NFKD: [0x1101, 0x1163, 0x11A8] }, +{ source: [0xAE86], NFC: [0xAE86], NFD: [0x1101, 0x1163, 0x11A9], NFKC: [0xAE86], NFKD: [0x1101, 0x1163, 0x11A9] }, +{ source: [0xAE87], NFC: [0xAE87], NFD: [0x1101, 0x1163, 0x11AA], NFKC: [0xAE87], NFKD: [0x1101, 0x1163, 0x11AA] }, +{ source: [0xAE88], NFC: [0xAE88], NFD: [0x1101, 0x1163, 0x11AB], NFKC: [0xAE88], NFKD: [0x1101, 0x1163, 0x11AB] }, +{ source: [0xAE89], NFC: [0xAE89], NFD: [0x1101, 0x1163, 0x11AC], NFKC: [0xAE89], NFKD: [0x1101, 0x1163, 0x11AC] }, +{ source: [0xAE8A], NFC: [0xAE8A], NFD: [0x1101, 0x1163, 0x11AD], NFKC: [0xAE8A], NFKD: [0x1101, 0x1163, 0x11AD] }, +{ source: [0xAE8B], NFC: [0xAE8B], NFD: [0x1101, 0x1163, 0x11AE], NFKC: [0xAE8B], NFKD: [0x1101, 0x1163, 0x11AE] }, +{ source: [0xAE8C], NFC: [0xAE8C], NFD: [0x1101, 0x1163, 0x11AF], NFKC: [0xAE8C], NFKD: [0x1101, 0x1163, 0x11AF] }, +{ source: [0xAE8D], NFC: [0xAE8D], NFD: [0x1101, 0x1163, 0x11B0], NFKC: [0xAE8D], NFKD: [0x1101, 0x1163, 0x11B0] }, +{ source: [0xAE8E], NFC: [0xAE8E], NFD: [0x1101, 0x1163, 0x11B1], NFKC: [0xAE8E], NFKD: [0x1101, 0x1163, 0x11B1] }, +{ source: [0xAE8F], NFC: [0xAE8F], NFD: [0x1101, 0x1163, 0x11B2], NFKC: [0xAE8F], NFKD: [0x1101, 0x1163, 0x11B2] }, +{ source: [0xAE90], NFC: [0xAE90], NFD: [0x1101, 0x1163, 0x11B3], NFKC: [0xAE90], NFKD: [0x1101, 0x1163, 0x11B3] }, +{ source: [0xAE91], NFC: [0xAE91], NFD: [0x1101, 0x1163, 0x11B4], NFKC: [0xAE91], NFKD: [0x1101, 0x1163, 0x11B4] }, +{ source: [0xAE92], NFC: [0xAE92], NFD: [0x1101, 0x1163, 0x11B5], NFKC: [0xAE92], NFKD: [0x1101, 0x1163, 0x11B5] }, +{ source: [0xAE93], NFC: [0xAE93], NFD: [0x1101, 0x1163, 0x11B6], NFKC: [0xAE93], NFKD: [0x1101, 0x1163, 0x11B6] }, +{ source: [0xAE94], NFC: [0xAE94], NFD: [0x1101, 0x1163, 0x11B7], NFKC: [0xAE94], NFKD: [0x1101, 0x1163, 0x11B7] }, +{ source: [0xAE95], NFC: [0xAE95], NFD: [0x1101, 0x1163, 0x11B8], NFKC: [0xAE95], NFKD: [0x1101, 0x1163, 0x11B8] }, +{ source: [0xAE96], NFC: [0xAE96], NFD: [0x1101, 0x1163, 0x11B9], NFKC: [0xAE96], NFKD: [0x1101, 0x1163, 0x11B9] }, +{ source: [0xAE97], NFC: [0xAE97], NFD: [0x1101, 0x1163, 0x11BA], NFKC: [0xAE97], NFKD: [0x1101, 0x1163, 0x11BA] }, +{ source: [0xAE98], NFC: [0xAE98], NFD: [0x1101, 0x1163, 0x11BB], NFKC: [0xAE98], NFKD: [0x1101, 0x1163, 0x11BB] }, +{ source: [0xAE99], NFC: [0xAE99], NFD: [0x1101, 0x1163, 0x11BC], NFKC: [0xAE99], NFKD: [0x1101, 0x1163, 0x11BC] }, +{ source: [0xAE9A], NFC: [0xAE9A], NFD: [0x1101, 0x1163, 0x11BD], NFKC: [0xAE9A], NFKD: [0x1101, 0x1163, 0x11BD] }, +{ source: [0xAE9B], NFC: [0xAE9B], NFD: [0x1101, 0x1163, 0x11BE], NFKC: [0xAE9B], NFKD: [0x1101, 0x1163, 0x11BE] }, +{ source: [0xAE9C], NFC: [0xAE9C], NFD: [0x1101, 0x1163, 0x11BF], NFKC: [0xAE9C], NFKD: [0x1101, 0x1163, 0x11BF] }, +{ source: [0xAE9D], NFC: [0xAE9D], NFD: [0x1101, 0x1163, 0x11C0], NFKC: [0xAE9D], NFKD: [0x1101, 0x1163, 0x11C0] }, +{ source: [0xAE9E], NFC: [0xAE9E], NFD: [0x1101, 0x1163, 0x11C1], NFKC: [0xAE9E], NFKD: [0x1101, 0x1163, 0x11C1] }, +{ source: [0xAE9F], NFC: [0xAE9F], NFD: [0x1101, 0x1163, 0x11C2], NFKC: [0xAE9F], NFKD: [0x1101, 0x1163, 0x11C2] }, +{ source: [0xAEA0], NFC: [0xAEA0], NFD: [0x1101, 0x1164], NFKC: [0xAEA0], NFKD: [0x1101, 0x1164] }, +{ source: [0xAEA1], NFC: [0xAEA1], NFD: [0x1101, 0x1164, 0x11A8], NFKC: [0xAEA1], NFKD: [0x1101, 0x1164, 0x11A8] }, +{ source: [0xAEA2], NFC: [0xAEA2], NFD: [0x1101, 0x1164, 0x11A9], NFKC: [0xAEA2], NFKD: [0x1101, 0x1164, 0x11A9] }, +{ source: [0xAEA3], NFC: [0xAEA3], NFD: [0x1101, 0x1164, 0x11AA], NFKC: [0xAEA3], NFKD: [0x1101, 0x1164, 0x11AA] }, +{ source: [0xAEA4], NFC: [0xAEA4], NFD: [0x1101, 0x1164, 0x11AB], NFKC: [0xAEA4], NFKD: [0x1101, 0x1164, 0x11AB] }, +{ source: [0xAEA5], NFC: [0xAEA5], NFD: [0x1101, 0x1164, 0x11AC], NFKC: [0xAEA5], NFKD: [0x1101, 0x1164, 0x11AC] }, +{ source: [0xAEA6], NFC: [0xAEA6], NFD: [0x1101, 0x1164, 0x11AD], NFKC: [0xAEA6], NFKD: [0x1101, 0x1164, 0x11AD] }, +{ source: [0xAEA7], NFC: [0xAEA7], NFD: [0x1101, 0x1164, 0x11AE], NFKC: [0xAEA7], NFKD: [0x1101, 0x1164, 0x11AE] }, +{ source: [0xAEA8], NFC: [0xAEA8], NFD: [0x1101, 0x1164, 0x11AF], NFKC: [0xAEA8], NFKD: [0x1101, 0x1164, 0x11AF] }, +{ source: [0xAEA9], NFC: [0xAEA9], NFD: [0x1101, 0x1164, 0x11B0], NFKC: [0xAEA9], NFKD: [0x1101, 0x1164, 0x11B0] }, +{ source: [0xAEAA], NFC: [0xAEAA], NFD: [0x1101, 0x1164, 0x11B1], NFKC: [0xAEAA], NFKD: [0x1101, 0x1164, 0x11B1] }, +{ source: [0xAEAB], NFC: [0xAEAB], NFD: [0x1101, 0x1164, 0x11B2], NFKC: [0xAEAB], NFKD: [0x1101, 0x1164, 0x11B2] }, +{ source: [0xAEAC], NFC: [0xAEAC], NFD: [0x1101, 0x1164, 0x11B3], NFKC: [0xAEAC], NFKD: [0x1101, 0x1164, 0x11B3] }, +{ source: [0xAEAD], NFC: [0xAEAD], NFD: [0x1101, 0x1164, 0x11B4], NFKC: [0xAEAD], NFKD: [0x1101, 0x1164, 0x11B4] }, +{ source: [0xAEAE], NFC: [0xAEAE], NFD: [0x1101, 0x1164, 0x11B5], NFKC: [0xAEAE], NFKD: [0x1101, 0x1164, 0x11B5] }, +{ source: [0xAEAF], NFC: [0xAEAF], NFD: [0x1101, 0x1164, 0x11B6], NFKC: [0xAEAF], NFKD: [0x1101, 0x1164, 0x11B6] }, +{ source: [0xAEB0], NFC: [0xAEB0], NFD: [0x1101, 0x1164, 0x11B7], NFKC: [0xAEB0], NFKD: [0x1101, 0x1164, 0x11B7] }, +{ source: [0xAEB1], NFC: [0xAEB1], NFD: [0x1101, 0x1164, 0x11B8], NFKC: [0xAEB1], NFKD: [0x1101, 0x1164, 0x11B8] }, +{ source: [0xAEB2], NFC: [0xAEB2], NFD: [0x1101, 0x1164, 0x11B9], NFKC: [0xAEB2], NFKD: [0x1101, 0x1164, 0x11B9] }, +{ source: [0xAEB3], NFC: [0xAEB3], NFD: [0x1101, 0x1164, 0x11BA], NFKC: [0xAEB3], NFKD: [0x1101, 0x1164, 0x11BA] }, +{ source: [0xAEB4], NFC: [0xAEB4], NFD: [0x1101, 0x1164, 0x11BB], NFKC: [0xAEB4], NFKD: [0x1101, 0x1164, 0x11BB] }, +{ source: [0xAEB5], NFC: [0xAEB5], NFD: [0x1101, 0x1164, 0x11BC], NFKC: [0xAEB5], NFKD: [0x1101, 0x1164, 0x11BC] }, +{ source: [0xAEB6], NFC: [0xAEB6], NFD: [0x1101, 0x1164, 0x11BD], NFKC: [0xAEB6], NFKD: [0x1101, 0x1164, 0x11BD] }, +{ source: [0xAEB7], NFC: [0xAEB7], NFD: [0x1101, 0x1164, 0x11BE], NFKC: [0xAEB7], NFKD: [0x1101, 0x1164, 0x11BE] }, +{ source: [0xAEB8], NFC: [0xAEB8], NFD: [0x1101, 0x1164, 0x11BF], NFKC: [0xAEB8], NFKD: [0x1101, 0x1164, 0x11BF] }, +{ source: [0xAEB9], NFC: [0xAEB9], NFD: [0x1101, 0x1164, 0x11C0], NFKC: [0xAEB9], NFKD: [0x1101, 0x1164, 0x11C0] }, +{ source: [0xAEBA], NFC: [0xAEBA], NFD: [0x1101, 0x1164, 0x11C1], NFKC: [0xAEBA], NFKD: [0x1101, 0x1164, 0x11C1] }, +{ source: [0xAEBB], NFC: [0xAEBB], NFD: [0x1101, 0x1164, 0x11C2], NFKC: [0xAEBB], NFKD: [0x1101, 0x1164, 0x11C2] }, +{ source: [0xAEBC], NFC: [0xAEBC], NFD: [0x1101, 0x1165], NFKC: [0xAEBC], NFKD: [0x1101, 0x1165] }, +{ source: [0xAEBD], NFC: [0xAEBD], NFD: [0x1101, 0x1165, 0x11A8], NFKC: [0xAEBD], NFKD: [0x1101, 0x1165, 0x11A8] }, +{ source: [0xAEBE], NFC: [0xAEBE], NFD: [0x1101, 0x1165, 0x11A9], NFKC: [0xAEBE], NFKD: [0x1101, 0x1165, 0x11A9] }, +{ source: [0xAEBF], NFC: [0xAEBF], NFD: [0x1101, 0x1165, 0x11AA], NFKC: [0xAEBF], NFKD: [0x1101, 0x1165, 0x11AA] }, +{ source: [0xAEC0], NFC: [0xAEC0], NFD: [0x1101, 0x1165, 0x11AB], NFKC: [0xAEC0], NFKD: [0x1101, 0x1165, 0x11AB] }, +{ source: [0xAEC1], NFC: [0xAEC1], NFD: [0x1101, 0x1165, 0x11AC], NFKC: [0xAEC1], NFKD: [0x1101, 0x1165, 0x11AC] }, +{ source: [0xAEC2], NFC: [0xAEC2], NFD: [0x1101, 0x1165, 0x11AD], NFKC: [0xAEC2], NFKD: [0x1101, 0x1165, 0x11AD] }, +{ source: [0xAEC3], NFC: [0xAEC3], NFD: [0x1101, 0x1165, 0x11AE], NFKC: [0xAEC3], NFKD: [0x1101, 0x1165, 0x11AE] }, +{ source: [0xAEC4], NFC: [0xAEC4], NFD: [0x1101, 0x1165, 0x11AF], NFKC: [0xAEC4], NFKD: [0x1101, 0x1165, 0x11AF] }, +{ source: [0xAEC5], NFC: [0xAEC5], NFD: [0x1101, 0x1165, 0x11B0], NFKC: [0xAEC5], NFKD: [0x1101, 0x1165, 0x11B0] }, +{ source: [0xAEC6], NFC: [0xAEC6], NFD: [0x1101, 0x1165, 0x11B1], NFKC: [0xAEC6], NFKD: [0x1101, 0x1165, 0x11B1] }, +{ source: [0xAEC7], NFC: [0xAEC7], NFD: [0x1101, 0x1165, 0x11B2], NFKC: [0xAEC7], NFKD: [0x1101, 0x1165, 0x11B2] }, +{ source: [0xAEC8], NFC: [0xAEC8], NFD: [0x1101, 0x1165, 0x11B3], NFKC: [0xAEC8], NFKD: [0x1101, 0x1165, 0x11B3] }, +{ source: [0xAEC9], NFC: [0xAEC9], NFD: [0x1101, 0x1165, 0x11B4], NFKC: [0xAEC9], NFKD: [0x1101, 0x1165, 0x11B4] }, +{ source: [0xAECA], NFC: [0xAECA], NFD: [0x1101, 0x1165, 0x11B5], NFKC: [0xAECA], NFKD: [0x1101, 0x1165, 0x11B5] }, +{ source: [0xAECB], NFC: [0xAECB], NFD: [0x1101, 0x1165, 0x11B6], NFKC: [0xAECB], NFKD: [0x1101, 0x1165, 0x11B6] }, +{ source: [0xAECC], NFC: [0xAECC], NFD: [0x1101, 0x1165, 0x11B7], NFKC: [0xAECC], NFKD: [0x1101, 0x1165, 0x11B7] }, +{ source: [0xAECD], NFC: [0xAECD], NFD: [0x1101, 0x1165, 0x11B8], NFKC: [0xAECD], NFKD: [0x1101, 0x1165, 0x11B8] }, +{ source: [0xAECE], NFC: [0xAECE], NFD: [0x1101, 0x1165, 0x11B9], NFKC: [0xAECE], NFKD: [0x1101, 0x1165, 0x11B9] }, +{ source: [0xAECF], NFC: [0xAECF], NFD: [0x1101, 0x1165, 0x11BA], NFKC: [0xAECF], NFKD: [0x1101, 0x1165, 0x11BA] }, +{ source: [0xAED0], NFC: [0xAED0], NFD: [0x1101, 0x1165, 0x11BB], NFKC: [0xAED0], NFKD: [0x1101, 0x1165, 0x11BB] }, +{ source: [0xAED1], NFC: [0xAED1], NFD: [0x1101, 0x1165, 0x11BC], NFKC: [0xAED1], NFKD: [0x1101, 0x1165, 0x11BC] }, +{ source: [0xAED2], NFC: [0xAED2], NFD: [0x1101, 0x1165, 0x11BD], NFKC: [0xAED2], NFKD: [0x1101, 0x1165, 0x11BD] }, +{ source: [0xAED3], NFC: [0xAED3], NFD: [0x1101, 0x1165, 0x11BE], NFKC: [0xAED3], NFKD: [0x1101, 0x1165, 0x11BE] }, +{ source: [0xAED4], NFC: [0xAED4], NFD: [0x1101, 0x1165, 0x11BF], NFKC: [0xAED4], NFKD: [0x1101, 0x1165, 0x11BF] }, +{ source: [0xAED5], NFC: [0xAED5], NFD: [0x1101, 0x1165, 0x11C0], NFKC: [0xAED5], NFKD: [0x1101, 0x1165, 0x11C0] }, +{ source: [0xAED6], NFC: [0xAED6], NFD: [0x1101, 0x1165, 0x11C1], NFKC: [0xAED6], NFKD: [0x1101, 0x1165, 0x11C1] }, +{ source: [0xAED7], NFC: [0xAED7], NFD: [0x1101, 0x1165, 0x11C2], NFKC: [0xAED7], NFKD: [0x1101, 0x1165, 0x11C2] }, +{ source: [0xAED8], NFC: [0xAED8], NFD: [0x1101, 0x1166], NFKC: [0xAED8], NFKD: [0x1101, 0x1166] }, +{ source: [0xAED9], NFC: [0xAED9], NFD: [0x1101, 0x1166, 0x11A8], NFKC: [0xAED9], NFKD: [0x1101, 0x1166, 0x11A8] }, +{ source: [0xAEDA], NFC: [0xAEDA], NFD: [0x1101, 0x1166, 0x11A9], NFKC: [0xAEDA], NFKD: [0x1101, 0x1166, 0x11A9] }, +{ source: [0xAEDB], NFC: [0xAEDB], NFD: [0x1101, 0x1166, 0x11AA], NFKC: [0xAEDB], NFKD: [0x1101, 0x1166, 0x11AA] }, +{ source: [0xAEDC], NFC: [0xAEDC], NFD: [0x1101, 0x1166, 0x11AB], NFKC: [0xAEDC], NFKD: [0x1101, 0x1166, 0x11AB] }, +{ source: [0xAEDD], NFC: [0xAEDD], NFD: [0x1101, 0x1166, 0x11AC], NFKC: [0xAEDD], NFKD: [0x1101, 0x1166, 0x11AC] }, +{ source: [0xAEDE], NFC: [0xAEDE], NFD: [0x1101, 0x1166, 0x11AD], NFKC: [0xAEDE], NFKD: [0x1101, 0x1166, 0x11AD] }, +{ source: [0xAEDF], NFC: [0xAEDF], NFD: [0x1101, 0x1166, 0x11AE], NFKC: [0xAEDF], NFKD: [0x1101, 0x1166, 0x11AE] }, +{ source: [0xAEE0], NFC: [0xAEE0], NFD: [0x1101, 0x1166, 0x11AF], NFKC: [0xAEE0], NFKD: [0x1101, 0x1166, 0x11AF] }, +{ source: [0xAEE1], NFC: [0xAEE1], NFD: [0x1101, 0x1166, 0x11B0], NFKC: [0xAEE1], NFKD: [0x1101, 0x1166, 0x11B0] }, +{ source: [0xAEE2], NFC: [0xAEE2], NFD: [0x1101, 0x1166, 0x11B1], NFKC: [0xAEE2], NFKD: [0x1101, 0x1166, 0x11B1] }, +{ source: [0xAEE3], NFC: [0xAEE3], NFD: [0x1101, 0x1166, 0x11B2], NFKC: [0xAEE3], NFKD: [0x1101, 0x1166, 0x11B2] }, +{ source: [0xAEE4], NFC: [0xAEE4], NFD: [0x1101, 0x1166, 0x11B3], NFKC: [0xAEE4], NFKD: [0x1101, 0x1166, 0x11B3] }, +{ source: [0xAEE5], NFC: [0xAEE5], NFD: [0x1101, 0x1166, 0x11B4], NFKC: [0xAEE5], NFKD: [0x1101, 0x1166, 0x11B4] }, +{ source: [0xAEE6], NFC: [0xAEE6], NFD: [0x1101, 0x1166, 0x11B5], NFKC: [0xAEE6], NFKD: [0x1101, 0x1166, 0x11B5] }, +{ source: [0xAEE7], NFC: [0xAEE7], NFD: [0x1101, 0x1166, 0x11B6], NFKC: [0xAEE7], NFKD: [0x1101, 0x1166, 0x11B6] }, +{ source: [0xAEE8], NFC: [0xAEE8], NFD: [0x1101, 0x1166, 0x11B7], NFKC: [0xAEE8], NFKD: [0x1101, 0x1166, 0x11B7] }, +{ source: [0xAEE9], NFC: [0xAEE9], NFD: [0x1101, 0x1166, 0x11B8], NFKC: [0xAEE9], NFKD: [0x1101, 0x1166, 0x11B8] }, +{ source: [0xAEEA], NFC: [0xAEEA], NFD: [0x1101, 0x1166, 0x11B9], NFKC: [0xAEEA], NFKD: [0x1101, 0x1166, 0x11B9] }, +{ source: [0xAEEB], NFC: [0xAEEB], NFD: [0x1101, 0x1166, 0x11BA], NFKC: [0xAEEB], NFKD: [0x1101, 0x1166, 0x11BA] }, +{ source: [0xAEEC], NFC: [0xAEEC], NFD: [0x1101, 0x1166, 0x11BB], NFKC: [0xAEEC], NFKD: [0x1101, 0x1166, 0x11BB] }, +{ source: [0xAEED], NFC: [0xAEED], NFD: [0x1101, 0x1166, 0x11BC], NFKC: [0xAEED], NFKD: [0x1101, 0x1166, 0x11BC] }, +{ source: [0xAEEE], NFC: [0xAEEE], NFD: [0x1101, 0x1166, 0x11BD], NFKC: [0xAEEE], NFKD: [0x1101, 0x1166, 0x11BD] }, +{ source: [0xAEEF], NFC: [0xAEEF], NFD: [0x1101, 0x1166, 0x11BE], NFKC: [0xAEEF], NFKD: [0x1101, 0x1166, 0x11BE] }, +{ source: [0xAEF0], NFC: [0xAEF0], NFD: [0x1101, 0x1166, 0x11BF], NFKC: [0xAEF0], NFKD: [0x1101, 0x1166, 0x11BF] }, +{ source: [0xAEF1], NFC: [0xAEF1], NFD: [0x1101, 0x1166, 0x11C0], NFKC: [0xAEF1], NFKD: [0x1101, 0x1166, 0x11C0] }, +{ source: [0xAEF2], NFC: [0xAEF2], NFD: [0x1101, 0x1166, 0x11C1], NFKC: [0xAEF2], NFKD: [0x1101, 0x1166, 0x11C1] }, +{ source: [0xAEF3], NFC: [0xAEF3], NFD: [0x1101, 0x1166, 0x11C2], NFKC: [0xAEF3], NFKD: [0x1101, 0x1166, 0x11C2] }, +{ source: [0xAEF4], NFC: [0xAEF4], NFD: [0x1101, 0x1167], NFKC: [0xAEF4], NFKD: [0x1101, 0x1167] }, +{ source: [0xAEF5], NFC: [0xAEF5], NFD: [0x1101, 0x1167, 0x11A8], NFKC: [0xAEF5], NFKD: [0x1101, 0x1167, 0x11A8] }, +{ source: [0xAEF6], NFC: [0xAEF6], NFD: [0x1101, 0x1167, 0x11A9], NFKC: [0xAEF6], NFKD: [0x1101, 0x1167, 0x11A9] }, +{ source: [0xAEF7], NFC: [0xAEF7], NFD: [0x1101, 0x1167, 0x11AA], NFKC: [0xAEF7], NFKD: [0x1101, 0x1167, 0x11AA] }, +{ source: [0xAEF8], NFC: [0xAEF8], NFD: [0x1101, 0x1167, 0x11AB], NFKC: [0xAEF8], NFKD: [0x1101, 0x1167, 0x11AB] }, +{ source: [0xAEF9], NFC: [0xAEF9], NFD: [0x1101, 0x1167, 0x11AC], NFKC: [0xAEF9], NFKD: [0x1101, 0x1167, 0x11AC] }, +{ source: [0xAEFA], NFC: [0xAEFA], NFD: [0x1101, 0x1167, 0x11AD], NFKC: [0xAEFA], NFKD: [0x1101, 0x1167, 0x11AD] }, +{ source: [0xAEFB], NFC: [0xAEFB], NFD: [0x1101, 0x1167, 0x11AE], NFKC: [0xAEFB], NFKD: [0x1101, 0x1167, 0x11AE] }, +{ source: [0xAEFC], NFC: [0xAEFC], NFD: [0x1101, 0x1167, 0x11AF], NFKC: [0xAEFC], NFKD: [0x1101, 0x1167, 0x11AF] }, +{ source: [0xAEFD], NFC: [0xAEFD], NFD: [0x1101, 0x1167, 0x11B0], NFKC: [0xAEFD], NFKD: [0x1101, 0x1167, 0x11B0] }, +{ source: [0xAEFE], NFC: [0xAEFE], NFD: [0x1101, 0x1167, 0x11B1], NFKC: [0xAEFE], NFKD: [0x1101, 0x1167, 0x11B1] }, +{ source: [0xAEFF], NFC: [0xAEFF], NFD: [0x1101, 0x1167, 0x11B2], NFKC: [0xAEFF], NFKD: [0x1101, 0x1167, 0x11B2] }, +{ source: [0xAF00], NFC: [0xAF00], NFD: [0x1101, 0x1167, 0x11B3], NFKC: [0xAF00], NFKD: [0x1101, 0x1167, 0x11B3] }, +{ source: [0xAF01], NFC: [0xAF01], NFD: [0x1101, 0x1167, 0x11B4], NFKC: [0xAF01], NFKD: [0x1101, 0x1167, 0x11B4] }, +{ source: [0xAF02], NFC: [0xAF02], NFD: [0x1101, 0x1167, 0x11B5], NFKC: [0xAF02], NFKD: [0x1101, 0x1167, 0x11B5] }, +{ source: [0xAF03], NFC: [0xAF03], NFD: [0x1101, 0x1167, 0x11B6], NFKC: [0xAF03], NFKD: [0x1101, 0x1167, 0x11B6] }, +{ source: [0xAF04], NFC: [0xAF04], NFD: [0x1101, 0x1167, 0x11B7], NFKC: [0xAF04], NFKD: [0x1101, 0x1167, 0x11B7] }, +{ source: [0xAF05], NFC: [0xAF05], NFD: [0x1101, 0x1167, 0x11B8], NFKC: [0xAF05], NFKD: [0x1101, 0x1167, 0x11B8] }, +{ source: [0xAF06], NFC: [0xAF06], NFD: [0x1101, 0x1167, 0x11B9], NFKC: [0xAF06], NFKD: [0x1101, 0x1167, 0x11B9] }, +{ source: [0xAF07], NFC: [0xAF07], NFD: [0x1101, 0x1167, 0x11BA], NFKC: [0xAF07], NFKD: [0x1101, 0x1167, 0x11BA] }, +{ source: [0xAF08], NFC: [0xAF08], NFD: [0x1101, 0x1167, 0x11BB], NFKC: [0xAF08], NFKD: [0x1101, 0x1167, 0x11BB] }, +{ source: [0xAF09], NFC: [0xAF09], NFD: [0x1101, 0x1167, 0x11BC], NFKC: [0xAF09], NFKD: [0x1101, 0x1167, 0x11BC] }, +{ source: [0xAF0A], NFC: [0xAF0A], NFD: [0x1101, 0x1167, 0x11BD], NFKC: [0xAF0A], NFKD: [0x1101, 0x1167, 0x11BD] }, +{ source: [0xAF0B], NFC: [0xAF0B], NFD: [0x1101, 0x1167, 0x11BE], NFKC: [0xAF0B], NFKD: [0x1101, 0x1167, 0x11BE] }, +{ source: [0xAF0C], NFC: [0xAF0C], NFD: [0x1101, 0x1167, 0x11BF], NFKC: [0xAF0C], NFKD: [0x1101, 0x1167, 0x11BF] }, +{ source: [0xAF0D], NFC: [0xAF0D], NFD: [0x1101, 0x1167, 0x11C0], NFKC: [0xAF0D], NFKD: [0x1101, 0x1167, 0x11C0] }, +{ source: [0xAF0E], NFC: [0xAF0E], NFD: [0x1101, 0x1167, 0x11C1], NFKC: [0xAF0E], NFKD: [0x1101, 0x1167, 0x11C1] }, +{ source: [0xAF0F], NFC: [0xAF0F], NFD: [0x1101, 0x1167, 0x11C2], NFKC: [0xAF0F], NFKD: [0x1101, 0x1167, 0x11C2] }, +{ source: [0xAF10], NFC: [0xAF10], NFD: [0x1101, 0x1168], NFKC: [0xAF10], NFKD: [0x1101, 0x1168] }, +{ source: [0xAF11], NFC: [0xAF11], NFD: [0x1101, 0x1168, 0x11A8], NFKC: [0xAF11], NFKD: [0x1101, 0x1168, 0x11A8] }, +{ source: [0xAF12], NFC: [0xAF12], NFD: [0x1101, 0x1168, 0x11A9], NFKC: [0xAF12], NFKD: [0x1101, 0x1168, 0x11A9] }, +{ source: [0xAF13], NFC: [0xAF13], NFD: [0x1101, 0x1168, 0x11AA], NFKC: [0xAF13], NFKD: [0x1101, 0x1168, 0x11AA] }, +{ source: [0xAF14], NFC: [0xAF14], NFD: [0x1101, 0x1168, 0x11AB], NFKC: [0xAF14], NFKD: [0x1101, 0x1168, 0x11AB] }, +{ source: [0xAF15], NFC: [0xAF15], NFD: [0x1101, 0x1168, 0x11AC], NFKC: [0xAF15], NFKD: [0x1101, 0x1168, 0x11AC] }, +{ source: [0xAF16], NFC: [0xAF16], NFD: [0x1101, 0x1168, 0x11AD], NFKC: [0xAF16], NFKD: [0x1101, 0x1168, 0x11AD] }, +{ source: [0xAF17], NFC: [0xAF17], NFD: [0x1101, 0x1168, 0x11AE], NFKC: [0xAF17], NFKD: [0x1101, 0x1168, 0x11AE] }, +{ source: [0xAF18], NFC: [0xAF18], NFD: [0x1101, 0x1168, 0x11AF], NFKC: [0xAF18], NFKD: [0x1101, 0x1168, 0x11AF] }, +{ source: [0xAF19], NFC: [0xAF19], NFD: [0x1101, 0x1168, 0x11B0], NFKC: [0xAF19], NFKD: [0x1101, 0x1168, 0x11B0] }, +{ source: [0xAF1A], NFC: [0xAF1A], NFD: [0x1101, 0x1168, 0x11B1], NFKC: [0xAF1A], NFKD: [0x1101, 0x1168, 0x11B1] }, +{ source: [0xAF1B], NFC: [0xAF1B], NFD: [0x1101, 0x1168, 0x11B2], NFKC: [0xAF1B], NFKD: [0x1101, 0x1168, 0x11B2] }, +{ source: [0xAF1C], NFC: [0xAF1C], NFD: [0x1101, 0x1168, 0x11B3], NFKC: [0xAF1C], NFKD: [0x1101, 0x1168, 0x11B3] }, +{ source: [0xAF1D], NFC: [0xAF1D], NFD: [0x1101, 0x1168, 0x11B4], NFKC: [0xAF1D], NFKD: [0x1101, 0x1168, 0x11B4] }, +{ source: [0xAF1E], NFC: [0xAF1E], NFD: [0x1101, 0x1168, 0x11B5], NFKC: [0xAF1E], NFKD: [0x1101, 0x1168, 0x11B5] }, +{ source: [0xAF1F], NFC: [0xAF1F], NFD: [0x1101, 0x1168, 0x11B6], NFKC: [0xAF1F], NFKD: [0x1101, 0x1168, 0x11B6] }, +{ source: [0xAF20], NFC: [0xAF20], NFD: [0x1101, 0x1168, 0x11B7], NFKC: [0xAF20], NFKD: [0x1101, 0x1168, 0x11B7] }, +{ source: [0xAF21], NFC: [0xAF21], NFD: [0x1101, 0x1168, 0x11B8], NFKC: [0xAF21], NFKD: [0x1101, 0x1168, 0x11B8] }, +{ source: [0xAF22], NFC: [0xAF22], NFD: [0x1101, 0x1168, 0x11B9], NFKC: [0xAF22], NFKD: [0x1101, 0x1168, 0x11B9] }, +{ source: [0xAF23], NFC: [0xAF23], NFD: [0x1101, 0x1168, 0x11BA], NFKC: [0xAF23], NFKD: [0x1101, 0x1168, 0x11BA] }, +{ source: [0xAF24], NFC: [0xAF24], NFD: [0x1101, 0x1168, 0x11BB], NFKC: [0xAF24], NFKD: [0x1101, 0x1168, 0x11BB] }, +{ source: [0xAF25], NFC: [0xAF25], NFD: [0x1101, 0x1168, 0x11BC], NFKC: [0xAF25], NFKD: [0x1101, 0x1168, 0x11BC] }, +{ source: [0xAF26], NFC: [0xAF26], NFD: [0x1101, 0x1168, 0x11BD], NFKC: [0xAF26], NFKD: [0x1101, 0x1168, 0x11BD] }, +{ source: [0xAF27], NFC: [0xAF27], NFD: [0x1101, 0x1168, 0x11BE], NFKC: [0xAF27], NFKD: [0x1101, 0x1168, 0x11BE] }, +{ source: [0xAF28], NFC: [0xAF28], NFD: [0x1101, 0x1168, 0x11BF], NFKC: [0xAF28], NFKD: [0x1101, 0x1168, 0x11BF] }, +{ source: [0xAF29], NFC: [0xAF29], NFD: [0x1101, 0x1168, 0x11C0], NFKC: [0xAF29], NFKD: [0x1101, 0x1168, 0x11C0] }, +{ source: [0xAF2A], NFC: [0xAF2A], NFD: [0x1101, 0x1168, 0x11C1], NFKC: [0xAF2A], NFKD: [0x1101, 0x1168, 0x11C1] }, +{ source: [0xAF2B], NFC: [0xAF2B], NFD: [0x1101, 0x1168, 0x11C2], NFKC: [0xAF2B], NFKD: [0x1101, 0x1168, 0x11C2] }, +{ source: [0xAF2C], NFC: [0xAF2C], NFD: [0x1101, 0x1169], NFKC: [0xAF2C], NFKD: [0x1101, 0x1169] }, +{ source: [0xAF2D], NFC: [0xAF2D], NFD: [0x1101, 0x1169, 0x11A8], NFKC: [0xAF2D], NFKD: [0x1101, 0x1169, 0x11A8] }, +{ source: [0xAF2E], NFC: [0xAF2E], NFD: [0x1101, 0x1169, 0x11A9], NFKC: [0xAF2E], NFKD: [0x1101, 0x1169, 0x11A9] }, +{ source: [0xAF2F], NFC: [0xAF2F], NFD: [0x1101, 0x1169, 0x11AA], NFKC: [0xAF2F], NFKD: [0x1101, 0x1169, 0x11AA] }, +{ source: [0xAF30], NFC: [0xAF30], NFD: [0x1101, 0x1169, 0x11AB], NFKC: [0xAF30], NFKD: [0x1101, 0x1169, 0x11AB] }, +{ source: [0xAF31], NFC: [0xAF31], NFD: [0x1101, 0x1169, 0x11AC], NFKC: [0xAF31], NFKD: [0x1101, 0x1169, 0x11AC] }, +{ source: [0xAF32], NFC: [0xAF32], NFD: [0x1101, 0x1169, 0x11AD], NFKC: [0xAF32], NFKD: [0x1101, 0x1169, 0x11AD] }, +{ source: [0xAF33], NFC: [0xAF33], NFD: [0x1101, 0x1169, 0x11AE], NFKC: [0xAF33], NFKD: [0x1101, 0x1169, 0x11AE] }, +{ source: [0xAF34], NFC: [0xAF34], NFD: [0x1101, 0x1169, 0x11AF], NFKC: [0xAF34], NFKD: [0x1101, 0x1169, 0x11AF] }, +{ source: [0xAF35], NFC: [0xAF35], NFD: [0x1101, 0x1169, 0x11B0], NFKC: [0xAF35], NFKD: [0x1101, 0x1169, 0x11B0] }, +{ source: [0xAF36], NFC: [0xAF36], NFD: [0x1101, 0x1169, 0x11B1], NFKC: [0xAF36], NFKD: [0x1101, 0x1169, 0x11B1] }, +{ source: [0xAF37], NFC: [0xAF37], NFD: [0x1101, 0x1169, 0x11B2], NFKC: [0xAF37], NFKD: [0x1101, 0x1169, 0x11B2] }, +{ source: [0xAF38], NFC: [0xAF38], NFD: [0x1101, 0x1169, 0x11B3], NFKC: [0xAF38], NFKD: [0x1101, 0x1169, 0x11B3] }, +{ source: [0xAF39], NFC: [0xAF39], NFD: [0x1101, 0x1169, 0x11B4], NFKC: [0xAF39], NFKD: [0x1101, 0x1169, 0x11B4] }, +{ source: [0xAF3A], NFC: [0xAF3A], NFD: [0x1101, 0x1169, 0x11B5], NFKC: [0xAF3A], NFKD: [0x1101, 0x1169, 0x11B5] }, +{ source: [0xAF3B], NFC: [0xAF3B], NFD: [0x1101, 0x1169, 0x11B6], NFKC: [0xAF3B], NFKD: [0x1101, 0x1169, 0x11B6] }, +{ source: [0xAF3C], NFC: [0xAF3C], NFD: [0x1101, 0x1169, 0x11B7], NFKC: [0xAF3C], NFKD: [0x1101, 0x1169, 0x11B7] }, +{ source: [0xAF3D], NFC: [0xAF3D], NFD: [0x1101, 0x1169, 0x11B8], NFKC: [0xAF3D], NFKD: [0x1101, 0x1169, 0x11B8] }, +{ source: [0xAF3E], NFC: [0xAF3E], NFD: [0x1101, 0x1169, 0x11B9], NFKC: [0xAF3E], NFKD: [0x1101, 0x1169, 0x11B9] }, +{ source: [0xAF3F], NFC: [0xAF3F], NFD: [0x1101, 0x1169, 0x11BA], NFKC: [0xAF3F], NFKD: [0x1101, 0x1169, 0x11BA] }, +{ source: [0xAF40], NFC: [0xAF40], NFD: [0x1101, 0x1169, 0x11BB], NFKC: [0xAF40], NFKD: [0x1101, 0x1169, 0x11BB] }, +{ source: [0xAF41], NFC: [0xAF41], NFD: [0x1101, 0x1169, 0x11BC], NFKC: [0xAF41], NFKD: [0x1101, 0x1169, 0x11BC] }, +{ source: [0xAF42], NFC: [0xAF42], NFD: [0x1101, 0x1169, 0x11BD], NFKC: [0xAF42], NFKD: [0x1101, 0x1169, 0x11BD] }, +{ source: [0xAF43], NFC: [0xAF43], NFD: [0x1101, 0x1169, 0x11BE], NFKC: [0xAF43], NFKD: [0x1101, 0x1169, 0x11BE] }, +{ source: [0xAF44], NFC: [0xAF44], NFD: [0x1101, 0x1169, 0x11BF], NFKC: [0xAF44], NFKD: [0x1101, 0x1169, 0x11BF] }, +{ source: [0xAF45], NFC: [0xAF45], NFD: [0x1101, 0x1169, 0x11C0], NFKC: [0xAF45], NFKD: [0x1101, 0x1169, 0x11C0] }, +{ source: [0xAF46], NFC: [0xAF46], NFD: [0x1101, 0x1169, 0x11C1], NFKC: [0xAF46], NFKD: [0x1101, 0x1169, 0x11C1] }, +{ source: [0xAF47], NFC: [0xAF47], NFD: [0x1101, 0x1169, 0x11C2], NFKC: [0xAF47], NFKD: [0x1101, 0x1169, 0x11C2] }, +{ source: [0xAF48], NFC: [0xAF48], NFD: [0x1101, 0x116A], NFKC: [0xAF48], NFKD: [0x1101, 0x116A] }, +{ source: [0xAF49], NFC: [0xAF49], NFD: [0x1101, 0x116A, 0x11A8], NFKC: [0xAF49], NFKD: [0x1101, 0x116A, 0x11A8] }, +{ source: [0xAF4A], NFC: [0xAF4A], NFD: [0x1101, 0x116A, 0x11A9], NFKC: [0xAF4A], NFKD: [0x1101, 0x116A, 0x11A9] }, +{ source: [0xAF4B], NFC: [0xAF4B], NFD: [0x1101, 0x116A, 0x11AA], NFKC: [0xAF4B], NFKD: [0x1101, 0x116A, 0x11AA] }, +{ source: [0xAF4C], NFC: [0xAF4C], NFD: [0x1101, 0x116A, 0x11AB], NFKC: [0xAF4C], NFKD: [0x1101, 0x116A, 0x11AB] }, +{ source: [0xAF4D], NFC: [0xAF4D], NFD: [0x1101, 0x116A, 0x11AC], NFKC: [0xAF4D], NFKD: [0x1101, 0x116A, 0x11AC] }, +{ source: [0xAF4E], NFC: [0xAF4E], NFD: [0x1101, 0x116A, 0x11AD], NFKC: [0xAF4E], NFKD: [0x1101, 0x116A, 0x11AD] }, +{ source: [0xAF4F], NFC: [0xAF4F], NFD: [0x1101, 0x116A, 0x11AE], NFKC: [0xAF4F], NFKD: [0x1101, 0x116A, 0x11AE] }, +{ source: [0xAF50], NFC: [0xAF50], NFD: [0x1101, 0x116A, 0x11AF], NFKC: [0xAF50], NFKD: [0x1101, 0x116A, 0x11AF] }, +{ source: [0xAF51], NFC: [0xAF51], NFD: [0x1101, 0x116A, 0x11B0], NFKC: [0xAF51], NFKD: [0x1101, 0x116A, 0x11B0] }, +{ source: [0xAF52], NFC: [0xAF52], NFD: [0x1101, 0x116A, 0x11B1], NFKC: [0xAF52], NFKD: [0x1101, 0x116A, 0x11B1] }, +{ source: [0xAF53], NFC: [0xAF53], NFD: [0x1101, 0x116A, 0x11B2], NFKC: [0xAF53], NFKD: [0x1101, 0x116A, 0x11B2] }, +{ source: [0xAF54], NFC: [0xAF54], NFD: [0x1101, 0x116A, 0x11B3], NFKC: [0xAF54], NFKD: [0x1101, 0x116A, 0x11B3] }, +{ source: [0xAF55], NFC: [0xAF55], NFD: [0x1101, 0x116A, 0x11B4], NFKC: [0xAF55], NFKD: [0x1101, 0x116A, 0x11B4] }, +{ source: [0xAF56], NFC: [0xAF56], NFD: [0x1101, 0x116A, 0x11B5], NFKC: [0xAF56], NFKD: [0x1101, 0x116A, 0x11B5] }, +{ source: [0xAF57], NFC: [0xAF57], NFD: [0x1101, 0x116A, 0x11B6], NFKC: [0xAF57], NFKD: [0x1101, 0x116A, 0x11B6] }, +{ source: [0xAF58], NFC: [0xAF58], NFD: [0x1101, 0x116A, 0x11B7], NFKC: [0xAF58], NFKD: [0x1101, 0x116A, 0x11B7] }, +{ source: [0xAF59], NFC: [0xAF59], NFD: [0x1101, 0x116A, 0x11B8], NFKC: [0xAF59], NFKD: [0x1101, 0x116A, 0x11B8] }, +{ source: [0xAF5A], NFC: [0xAF5A], NFD: [0x1101, 0x116A, 0x11B9], NFKC: [0xAF5A], NFKD: [0x1101, 0x116A, 0x11B9] }, +{ source: [0xAF5B], NFC: [0xAF5B], NFD: [0x1101, 0x116A, 0x11BA], NFKC: [0xAF5B], NFKD: [0x1101, 0x116A, 0x11BA] }, +{ source: [0xAF5C], NFC: [0xAF5C], NFD: [0x1101, 0x116A, 0x11BB], NFKC: [0xAF5C], NFKD: [0x1101, 0x116A, 0x11BB] }, +{ source: [0xAF5D], NFC: [0xAF5D], NFD: [0x1101, 0x116A, 0x11BC], NFKC: [0xAF5D], NFKD: [0x1101, 0x116A, 0x11BC] }, +{ source: [0xAF5E], NFC: [0xAF5E], NFD: [0x1101, 0x116A, 0x11BD], NFKC: [0xAF5E], NFKD: [0x1101, 0x116A, 0x11BD] }, +{ source: [0xAF5F], NFC: [0xAF5F], NFD: [0x1101, 0x116A, 0x11BE], NFKC: [0xAF5F], NFKD: [0x1101, 0x116A, 0x11BE] }, +{ source: [0xAF60], NFC: [0xAF60], NFD: [0x1101, 0x116A, 0x11BF], NFKC: [0xAF60], NFKD: [0x1101, 0x116A, 0x11BF] }, +{ source: [0xAF61], NFC: [0xAF61], NFD: [0x1101, 0x116A, 0x11C0], NFKC: [0xAF61], NFKD: [0x1101, 0x116A, 0x11C0] }, +{ source: [0xAF62], NFC: [0xAF62], NFD: [0x1101, 0x116A, 0x11C1], NFKC: [0xAF62], NFKD: [0x1101, 0x116A, 0x11C1] }, +{ source: [0xAF63], NFC: [0xAF63], NFD: [0x1101, 0x116A, 0x11C2], NFKC: [0xAF63], NFKD: [0x1101, 0x116A, 0x11C2] }, +{ source: [0xAF64], NFC: [0xAF64], NFD: [0x1101, 0x116B], NFKC: [0xAF64], NFKD: [0x1101, 0x116B] }, +{ source: [0xAF65], NFC: [0xAF65], NFD: [0x1101, 0x116B, 0x11A8], NFKC: [0xAF65], NFKD: [0x1101, 0x116B, 0x11A8] }, +{ source: [0xAF66], NFC: [0xAF66], NFD: [0x1101, 0x116B, 0x11A9], NFKC: [0xAF66], NFKD: [0x1101, 0x116B, 0x11A9] }, +{ source: [0xAF67], NFC: [0xAF67], NFD: [0x1101, 0x116B, 0x11AA], NFKC: [0xAF67], NFKD: [0x1101, 0x116B, 0x11AA] }, +{ source: [0xAF68], NFC: [0xAF68], NFD: [0x1101, 0x116B, 0x11AB], NFKC: [0xAF68], NFKD: [0x1101, 0x116B, 0x11AB] }, +{ source: [0xAF69], NFC: [0xAF69], NFD: [0x1101, 0x116B, 0x11AC], NFKC: [0xAF69], NFKD: [0x1101, 0x116B, 0x11AC] }, +{ source: [0xAF6A], NFC: [0xAF6A], NFD: [0x1101, 0x116B, 0x11AD], NFKC: [0xAF6A], NFKD: [0x1101, 0x116B, 0x11AD] }, +{ source: [0xAF6B], NFC: [0xAF6B], NFD: [0x1101, 0x116B, 0x11AE], NFKC: [0xAF6B], NFKD: [0x1101, 0x116B, 0x11AE] }, +{ source: [0xAF6C], NFC: [0xAF6C], NFD: [0x1101, 0x116B, 0x11AF], NFKC: [0xAF6C], NFKD: [0x1101, 0x116B, 0x11AF] }, +{ source: [0xAF6D], NFC: [0xAF6D], NFD: [0x1101, 0x116B, 0x11B0], NFKC: [0xAF6D], NFKD: [0x1101, 0x116B, 0x11B0] }, +{ source: [0xAF6E], NFC: [0xAF6E], NFD: [0x1101, 0x116B, 0x11B1], NFKC: [0xAF6E], NFKD: [0x1101, 0x116B, 0x11B1] }, +{ source: [0xAF6F], NFC: [0xAF6F], NFD: [0x1101, 0x116B, 0x11B2], NFKC: [0xAF6F], NFKD: [0x1101, 0x116B, 0x11B2] }, +{ source: [0xAF70], NFC: [0xAF70], NFD: [0x1101, 0x116B, 0x11B3], NFKC: [0xAF70], NFKD: [0x1101, 0x116B, 0x11B3] }, +{ source: [0xAF71], NFC: [0xAF71], NFD: [0x1101, 0x116B, 0x11B4], NFKC: [0xAF71], NFKD: [0x1101, 0x116B, 0x11B4] }, +{ source: [0xAF72], NFC: [0xAF72], NFD: [0x1101, 0x116B, 0x11B5], NFKC: [0xAF72], NFKD: [0x1101, 0x116B, 0x11B5] }, +{ source: [0xAF73], NFC: [0xAF73], NFD: [0x1101, 0x116B, 0x11B6], NFKC: [0xAF73], NFKD: [0x1101, 0x116B, 0x11B6] }, +{ source: [0xAF74], NFC: [0xAF74], NFD: [0x1101, 0x116B, 0x11B7], NFKC: [0xAF74], NFKD: [0x1101, 0x116B, 0x11B7] }, +{ source: [0xAF75], NFC: [0xAF75], NFD: [0x1101, 0x116B, 0x11B8], NFKC: [0xAF75], NFKD: [0x1101, 0x116B, 0x11B8] }, +{ source: [0xAF76], NFC: [0xAF76], NFD: [0x1101, 0x116B, 0x11B9], NFKC: [0xAF76], NFKD: [0x1101, 0x116B, 0x11B9] }, +{ source: [0xAF77], NFC: [0xAF77], NFD: [0x1101, 0x116B, 0x11BA], NFKC: [0xAF77], NFKD: [0x1101, 0x116B, 0x11BA] }, +{ source: [0xAF78], NFC: [0xAF78], NFD: [0x1101, 0x116B, 0x11BB], NFKC: [0xAF78], NFKD: [0x1101, 0x116B, 0x11BB] }, +{ source: [0xAF79], NFC: [0xAF79], NFD: [0x1101, 0x116B, 0x11BC], NFKC: [0xAF79], NFKD: [0x1101, 0x116B, 0x11BC] }, +{ source: [0xAF7A], NFC: [0xAF7A], NFD: [0x1101, 0x116B, 0x11BD], NFKC: [0xAF7A], NFKD: [0x1101, 0x116B, 0x11BD] }, +{ source: [0xAF7B], NFC: [0xAF7B], NFD: [0x1101, 0x116B, 0x11BE], NFKC: [0xAF7B], NFKD: [0x1101, 0x116B, 0x11BE] }, +{ source: [0xAF7C], NFC: [0xAF7C], NFD: [0x1101, 0x116B, 0x11BF], NFKC: [0xAF7C], NFKD: [0x1101, 0x116B, 0x11BF] }, +{ source: [0xAF7D], NFC: [0xAF7D], NFD: [0x1101, 0x116B, 0x11C0], NFKC: [0xAF7D], NFKD: [0x1101, 0x116B, 0x11C0] }, +{ source: [0xAF7E], NFC: [0xAF7E], NFD: [0x1101, 0x116B, 0x11C1], NFKC: [0xAF7E], NFKD: [0x1101, 0x116B, 0x11C1] }, +{ source: [0xAF7F], NFC: [0xAF7F], NFD: [0x1101, 0x116B, 0x11C2], NFKC: [0xAF7F], NFKD: [0x1101, 0x116B, 0x11C2] }, +{ source: [0xAF80], NFC: [0xAF80], NFD: [0x1101, 0x116C], NFKC: [0xAF80], NFKD: [0x1101, 0x116C] }, +{ source: [0xAF81], NFC: [0xAF81], NFD: [0x1101, 0x116C, 0x11A8], NFKC: [0xAF81], NFKD: [0x1101, 0x116C, 0x11A8] }, +{ source: [0xAF82], NFC: [0xAF82], NFD: [0x1101, 0x116C, 0x11A9], NFKC: [0xAF82], NFKD: [0x1101, 0x116C, 0x11A9] }, +{ source: [0xAF83], NFC: [0xAF83], NFD: [0x1101, 0x116C, 0x11AA], NFKC: [0xAF83], NFKD: [0x1101, 0x116C, 0x11AA] }, +{ source: [0xAF84], NFC: [0xAF84], NFD: [0x1101, 0x116C, 0x11AB], NFKC: [0xAF84], NFKD: [0x1101, 0x116C, 0x11AB] }, +{ source: [0xAF85], NFC: [0xAF85], NFD: [0x1101, 0x116C, 0x11AC], NFKC: [0xAF85], NFKD: [0x1101, 0x116C, 0x11AC] }, +{ source: [0xAF86], NFC: [0xAF86], NFD: [0x1101, 0x116C, 0x11AD], NFKC: [0xAF86], NFKD: [0x1101, 0x116C, 0x11AD] }, +{ source: [0xAF87], NFC: [0xAF87], NFD: [0x1101, 0x116C, 0x11AE], NFKC: [0xAF87], NFKD: [0x1101, 0x116C, 0x11AE] }, +{ source: [0xAF88], NFC: [0xAF88], NFD: [0x1101, 0x116C, 0x11AF], NFKC: [0xAF88], NFKD: [0x1101, 0x116C, 0x11AF] }, +{ source: [0xAF89], NFC: [0xAF89], NFD: [0x1101, 0x116C, 0x11B0], NFKC: [0xAF89], NFKD: [0x1101, 0x116C, 0x11B0] }, +{ source: [0xAF8A], NFC: [0xAF8A], NFD: [0x1101, 0x116C, 0x11B1], NFKC: [0xAF8A], NFKD: [0x1101, 0x116C, 0x11B1] }, +{ source: [0xAF8B], NFC: [0xAF8B], NFD: [0x1101, 0x116C, 0x11B2], NFKC: [0xAF8B], NFKD: [0x1101, 0x116C, 0x11B2] }, +{ source: [0xAF8C], NFC: [0xAF8C], NFD: [0x1101, 0x116C, 0x11B3], NFKC: [0xAF8C], NFKD: [0x1101, 0x116C, 0x11B3] }, +{ source: [0xAF8D], NFC: [0xAF8D], NFD: [0x1101, 0x116C, 0x11B4], NFKC: [0xAF8D], NFKD: [0x1101, 0x116C, 0x11B4] }, +{ source: [0xAF8E], NFC: [0xAF8E], NFD: [0x1101, 0x116C, 0x11B5], NFKC: [0xAF8E], NFKD: [0x1101, 0x116C, 0x11B5] }, +{ source: [0xAF8F], NFC: [0xAF8F], NFD: [0x1101, 0x116C, 0x11B6], NFKC: [0xAF8F], NFKD: [0x1101, 0x116C, 0x11B6] }, +{ source: [0xAF90], NFC: [0xAF90], NFD: [0x1101, 0x116C, 0x11B7], NFKC: [0xAF90], NFKD: [0x1101, 0x116C, 0x11B7] }, +{ source: [0xAF91], NFC: [0xAF91], NFD: [0x1101, 0x116C, 0x11B8], NFKC: [0xAF91], NFKD: [0x1101, 0x116C, 0x11B8] }, +{ source: [0xAF92], NFC: [0xAF92], NFD: [0x1101, 0x116C, 0x11B9], NFKC: [0xAF92], NFKD: [0x1101, 0x116C, 0x11B9] }, +{ source: [0xAF93], NFC: [0xAF93], NFD: [0x1101, 0x116C, 0x11BA], NFKC: [0xAF93], NFKD: [0x1101, 0x116C, 0x11BA] }, +{ source: [0xAF94], NFC: [0xAF94], NFD: [0x1101, 0x116C, 0x11BB], NFKC: [0xAF94], NFKD: [0x1101, 0x116C, 0x11BB] }, +{ source: [0xAF95], NFC: [0xAF95], NFD: [0x1101, 0x116C, 0x11BC], NFKC: [0xAF95], NFKD: [0x1101, 0x116C, 0x11BC] }, +{ source: [0xAF96], NFC: [0xAF96], NFD: [0x1101, 0x116C, 0x11BD], NFKC: [0xAF96], NFKD: [0x1101, 0x116C, 0x11BD] }, +{ source: [0xAF97], NFC: [0xAF97], NFD: [0x1101, 0x116C, 0x11BE], NFKC: [0xAF97], NFKD: [0x1101, 0x116C, 0x11BE] }, +{ source: [0xAF98], NFC: [0xAF98], NFD: [0x1101, 0x116C, 0x11BF], NFKC: [0xAF98], NFKD: [0x1101, 0x116C, 0x11BF] }, +{ source: [0xAF99], NFC: [0xAF99], NFD: [0x1101, 0x116C, 0x11C0], NFKC: [0xAF99], NFKD: [0x1101, 0x116C, 0x11C0] }, +{ source: [0xAF9A], NFC: [0xAF9A], NFD: [0x1101, 0x116C, 0x11C1], NFKC: [0xAF9A], NFKD: [0x1101, 0x116C, 0x11C1] }, +{ source: [0xAF9B], NFC: [0xAF9B], NFD: [0x1101, 0x116C, 0x11C2], NFKC: [0xAF9B], NFKD: [0x1101, 0x116C, 0x11C2] }, +{ source: [0xAF9C], NFC: [0xAF9C], NFD: [0x1101, 0x116D], NFKC: [0xAF9C], NFKD: [0x1101, 0x116D] }, +{ source: [0xAF9D], NFC: [0xAF9D], NFD: [0x1101, 0x116D, 0x11A8], NFKC: [0xAF9D], NFKD: [0x1101, 0x116D, 0x11A8] }, +{ source: [0xAF9E], NFC: [0xAF9E], NFD: [0x1101, 0x116D, 0x11A9], NFKC: [0xAF9E], NFKD: [0x1101, 0x116D, 0x11A9] }, +{ source: [0xAF9F], NFC: [0xAF9F], NFD: [0x1101, 0x116D, 0x11AA], NFKC: [0xAF9F], NFKD: [0x1101, 0x116D, 0x11AA] }, +{ source: [0xAFA0], NFC: [0xAFA0], NFD: [0x1101, 0x116D, 0x11AB], NFKC: [0xAFA0], NFKD: [0x1101, 0x116D, 0x11AB] }, +{ source: [0xAFA1], NFC: [0xAFA1], NFD: [0x1101, 0x116D, 0x11AC], NFKC: [0xAFA1], NFKD: [0x1101, 0x116D, 0x11AC] }, +{ source: [0xAFA2], NFC: [0xAFA2], NFD: [0x1101, 0x116D, 0x11AD], NFKC: [0xAFA2], NFKD: [0x1101, 0x116D, 0x11AD] }, +{ source: [0xAFA3], NFC: [0xAFA3], NFD: [0x1101, 0x116D, 0x11AE], NFKC: [0xAFA3], NFKD: [0x1101, 0x116D, 0x11AE] }, +{ source: [0xAFA4], NFC: [0xAFA4], NFD: [0x1101, 0x116D, 0x11AF], NFKC: [0xAFA4], NFKD: [0x1101, 0x116D, 0x11AF] }, +{ source: [0xAFA5], NFC: [0xAFA5], NFD: [0x1101, 0x116D, 0x11B0], NFKC: [0xAFA5], NFKD: [0x1101, 0x116D, 0x11B0] }, +{ source: [0xAFA6], NFC: [0xAFA6], NFD: [0x1101, 0x116D, 0x11B1], NFKC: [0xAFA6], NFKD: [0x1101, 0x116D, 0x11B1] }, +{ source: [0xAFA7], NFC: [0xAFA7], NFD: [0x1101, 0x116D, 0x11B2], NFKC: [0xAFA7], NFKD: [0x1101, 0x116D, 0x11B2] }, +{ source: [0xAFA8], NFC: [0xAFA8], NFD: [0x1101, 0x116D, 0x11B3], NFKC: [0xAFA8], NFKD: [0x1101, 0x116D, 0x11B3] }, +{ source: [0xAFA9], NFC: [0xAFA9], NFD: [0x1101, 0x116D, 0x11B4], NFKC: [0xAFA9], NFKD: [0x1101, 0x116D, 0x11B4] }, +{ source: [0xAFAA], NFC: [0xAFAA], NFD: [0x1101, 0x116D, 0x11B5], NFKC: [0xAFAA], NFKD: [0x1101, 0x116D, 0x11B5] }, +{ source: [0xAFAB], NFC: [0xAFAB], NFD: [0x1101, 0x116D, 0x11B6], NFKC: [0xAFAB], NFKD: [0x1101, 0x116D, 0x11B6] }, +{ source: [0xAFAC], NFC: [0xAFAC], NFD: [0x1101, 0x116D, 0x11B7], NFKC: [0xAFAC], NFKD: [0x1101, 0x116D, 0x11B7] }, +{ source: [0xAFAD], NFC: [0xAFAD], NFD: [0x1101, 0x116D, 0x11B8], NFKC: [0xAFAD], NFKD: [0x1101, 0x116D, 0x11B8] }, +{ source: [0xAFAE], NFC: [0xAFAE], NFD: [0x1101, 0x116D, 0x11B9], NFKC: [0xAFAE], NFKD: [0x1101, 0x116D, 0x11B9] }, +{ source: [0xAFAF], NFC: [0xAFAF], NFD: [0x1101, 0x116D, 0x11BA], NFKC: [0xAFAF], NFKD: [0x1101, 0x116D, 0x11BA] }, +{ source: [0xAFB0], NFC: [0xAFB0], NFD: [0x1101, 0x116D, 0x11BB], NFKC: [0xAFB0], NFKD: [0x1101, 0x116D, 0x11BB] }, +{ source: [0xAFB1], NFC: [0xAFB1], NFD: [0x1101, 0x116D, 0x11BC], NFKC: [0xAFB1], NFKD: [0x1101, 0x116D, 0x11BC] }, +{ source: [0xAFB2], NFC: [0xAFB2], NFD: [0x1101, 0x116D, 0x11BD], NFKC: [0xAFB2], NFKD: [0x1101, 0x116D, 0x11BD] }, +{ source: [0xAFB3], NFC: [0xAFB3], NFD: [0x1101, 0x116D, 0x11BE], NFKC: [0xAFB3], NFKD: [0x1101, 0x116D, 0x11BE] }, +{ source: [0xAFB4], NFC: [0xAFB4], NFD: [0x1101, 0x116D, 0x11BF], NFKC: [0xAFB4], NFKD: [0x1101, 0x116D, 0x11BF] }, +{ source: [0xAFB5], NFC: [0xAFB5], NFD: [0x1101, 0x116D, 0x11C0], NFKC: [0xAFB5], NFKD: [0x1101, 0x116D, 0x11C0] }, +{ source: [0xAFB6], NFC: [0xAFB6], NFD: [0x1101, 0x116D, 0x11C1], NFKC: [0xAFB6], NFKD: [0x1101, 0x116D, 0x11C1] }, +{ source: [0xAFB7], NFC: [0xAFB7], NFD: [0x1101, 0x116D, 0x11C2], NFKC: [0xAFB7], NFKD: [0x1101, 0x116D, 0x11C2] }, +{ source: [0xAFB8], NFC: [0xAFB8], NFD: [0x1101, 0x116E], NFKC: [0xAFB8], NFKD: [0x1101, 0x116E] }, +{ source: [0xAFB9], NFC: [0xAFB9], NFD: [0x1101, 0x116E, 0x11A8], NFKC: [0xAFB9], NFKD: [0x1101, 0x116E, 0x11A8] }, +{ source: [0xAFBA], NFC: [0xAFBA], NFD: [0x1101, 0x116E, 0x11A9], NFKC: [0xAFBA], NFKD: [0x1101, 0x116E, 0x11A9] }, +{ source: [0xAFBB], NFC: [0xAFBB], NFD: [0x1101, 0x116E, 0x11AA], NFKC: [0xAFBB], NFKD: [0x1101, 0x116E, 0x11AA] }, +{ source: [0xAFBC], NFC: [0xAFBC], NFD: [0x1101, 0x116E, 0x11AB], NFKC: [0xAFBC], NFKD: [0x1101, 0x116E, 0x11AB] }, +{ source: [0xAFBD], NFC: [0xAFBD], NFD: [0x1101, 0x116E, 0x11AC], NFKC: [0xAFBD], NFKD: [0x1101, 0x116E, 0x11AC] }, +{ source: [0xAFBE], NFC: [0xAFBE], NFD: [0x1101, 0x116E, 0x11AD], NFKC: [0xAFBE], NFKD: [0x1101, 0x116E, 0x11AD] }, +{ source: [0xAFBF], NFC: [0xAFBF], NFD: [0x1101, 0x116E, 0x11AE], NFKC: [0xAFBF], NFKD: [0x1101, 0x116E, 0x11AE] }, +{ source: [0xAFC0], NFC: [0xAFC0], NFD: [0x1101, 0x116E, 0x11AF], NFKC: [0xAFC0], NFKD: [0x1101, 0x116E, 0x11AF] }, +{ source: [0xAFC1], NFC: [0xAFC1], NFD: [0x1101, 0x116E, 0x11B0], NFKC: [0xAFC1], NFKD: [0x1101, 0x116E, 0x11B0] }, +{ source: [0xAFC2], NFC: [0xAFC2], NFD: [0x1101, 0x116E, 0x11B1], NFKC: [0xAFC2], NFKD: [0x1101, 0x116E, 0x11B1] }, +{ source: [0xAFC3], NFC: [0xAFC3], NFD: [0x1101, 0x116E, 0x11B2], NFKC: [0xAFC3], NFKD: [0x1101, 0x116E, 0x11B2] }, +{ source: [0xAFC4], NFC: [0xAFC4], NFD: [0x1101, 0x116E, 0x11B3], NFKC: [0xAFC4], NFKD: [0x1101, 0x116E, 0x11B3] }, +{ source: [0xAFC5], NFC: [0xAFC5], NFD: [0x1101, 0x116E, 0x11B4], NFKC: [0xAFC5], NFKD: [0x1101, 0x116E, 0x11B4] }, +{ source: [0xAFC6], NFC: [0xAFC6], NFD: [0x1101, 0x116E, 0x11B5], NFKC: [0xAFC6], NFKD: [0x1101, 0x116E, 0x11B5] }, +{ source: [0xAFC7], NFC: [0xAFC7], NFD: [0x1101, 0x116E, 0x11B6], NFKC: [0xAFC7], NFKD: [0x1101, 0x116E, 0x11B6] }, +{ source: [0xAFC8], NFC: [0xAFC8], NFD: [0x1101, 0x116E, 0x11B7], NFKC: [0xAFC8], NFKD: [0x1101, 0x116E, 0x11B7] }, +{ source: [0xAFC9], NFC: [0xAFC9], NFD: [0x1101, 0x116E, 0x11B8], NFKC: [0xAFC9], NFKD: [0x1101, 0x116E, 0x11B8] }, +{ source: [0xAFCA], NFC: [0xAFCA], NFD: [0x1101, 0x116E, 0x11B9], NFKC: [0xAFCA], NFKD: [0x1101, 0x116E, 0x11B9] }, +{ source: [0xAFCB], NFC: [0xAFCB], NFD: [0x1101, 0x116E, 0x11BA], NFKC: [0xAFCB], NFKD: [0x1101, 0x116E, 0x11BA] }, +{ source: [0xAFCC], NFC: [0xAFCC], NFD: [0x1101, 0x116E, 0x11BB], NFKC: [0xAFCC], NFKD: [0x1101, 0x116E, 0x11BB] }, +{ source: [0xAFCD], NFC: [0xAFCD], NFD: [0x1101, 0x116E, 0x11BC], NFKC: [0xAFCD], NFKD: [0x1101, 0x116E, 0x11BC] }, +{ source: [0xAFCE], NFC: [0xAFCE], NFD: [0x1101, 0x116E, 0x11BD], NFKC: [0xAFCE], NFKD: [0x1101, 0x116E, 0x11BD] }, +{ source: [0xAFCF], NFC: [0xAFCF], NFD: [0x1101, 0x116E, 0x11BE], NFKC: [0xAFCF], NFKD: [0x1101, 0x116E, 0x11BE] }, +{ source: [0xAFD0], NFC: [0xAFD0], NFD: [0x1101, 0x116E, 0x11BF], NFKC: [0xAFD0], NFKD: [0x1101, 0x116E, 0x11BF] }, +{ source: [0xAFD1], NFC: [0xAFD1], NFD: [0x1101, 0x116E, 0x11C0], NFKC: [0xAFD1], NFKD: [0x1101, 0x116E, 0x11C0] }, +{ source: [0xAFD2], NFC: [0xAFD2], NFD: [0x1101, 0x116E, 0x11C1], NFKC: [0xAFD2], NFKD: [0x1101, 0x116E, 0x11C1] }, +{ source: [0xAFD3], NFC: [0xAFD3], NFD: [0x1101, 0x116E, 0x11C2], NFKC: [0xAFD3], NFKD: [0x1101, 0x116E, 0x11C2] }, +{ source: [0xAFD4], NFC: [0xAFD4], NFD: [0x1101, 0x116F], NFKC: [0xAFD4], NFKD: [0x1101, 0x116F] }, +{ source: [0xAFD5], NFC: [0xAFD5], NFD: [0x1101, 0x116F, 0x11A8], NFKC: [0xAFD5], NFKD: [0x1101, 0x116F, 0x11A8] }, +{ source: [0xAFD6], NFC: [0xAFD6], NFD: [0x1101, 0x116F, 0x11A9], NFKC: [0xAFD6], NFKD: [0x1101, 0x116F, 0x11A9] }, +{ source: [0xAFD7], NFC: [0xAFD7], NFD: [0x1101, 0x116F, 0x11AA], NFKC: [0xAFD7], NFKD: [0x1101, 0x116F, 0x11AA] }, +{ source: [0xAFD8], NFC: [0xAFD8], NFD: [0x1101, 0x116F, 0x11AB], NFKC: [0xAFD8], NFKD: [0x1101, 0x116F, 0x11AB] }, +{ source: [0xAFD9], NFC: [0xAFD9], NFD: [0x1101, 0x116F, 0x11AC], NFKC: [0xAFD9], NFKD: [0x1101, 0x116F, 0x11AC] }, +{ source: [0xAFDA], NFC: [0xAFDA], NFD: [0x1101, 0x116F, 0x11AD], NFKC: [0xAFDA], NFKD: [0x1101, 0x116F, 0x11AD] }, +{ source: [0xAFDB], NFC: [0xAFDB], NFD: [0x1101, 0x116F, 0x11AE], NFKC: [0xAFDB], NFKD: [0x1101, 0x116F, 0x11AE] }, +{ source: [0xAFDC], NFC: [0xAFDC], NFD: [0x1101, 0x116F, 0x11AF], NFKC: [0xAFDC], NFKD: [0x1101, 0x116F, 0x11AF] }, +{ source: [0xAFDD], NFC: [0xAFDD], NFD: [0x1101, 0x116F, 0x11B0], NFKC: [0xAFDD], NFKD: [0x1101, 0x116F, 0x11B0] }, +{ source: [0xAFDE], NFC: [0xAFDE], NFD: [0x1101, 0x116F, 0x11B1], NFKC: [0xAFDE], NFKD: [0x1101, 0x116F, 0x11B1] }, +{ source: [0xAFDF], NFC: [0xAFDF], NFD: [0x1101, 0x116F, 0x11B2], NFKC: [0xAFDF], NFKD: [0x1101, 0x116F, 0x11B2] }, +{ source: [0xAFE0], NFC: [0xAFE0], NFD: [0x1101, 0x116F, 0x11B3], NFKC: [0xAFE0], NFKD: [0x1101, 0x116F, 0x11B3] }, +{ source: [0xAFE1], NFC: [0xAFE1], NFD: [0x1101, 0x116F, 0x11B4], NFKC: [0xAFE1], NFKD: [0x1101, 0x116F, 0x11B4] }, +{ source: [0xAFE2], NFC: [0xAFE2], NFD: [0x1101, 0x116F, 0x11B5], NFKC: [0xAFE2], NFKD: [0x1101, 0x116F, 0x11B5] }, +{ source: [0xAFE3], NFC: [0xAFE3], NFD: [0x1101, 0x116F, 0x11B6], NFKC: [0xAFE3], NFKD: [0x1101, 0x116F, 0x11B6] }, +{ source: [0xAFE4], NFC: [0xAFE4], NFD: [0x1101, 0x116F, 0x11B7], NFKC: [0xAFE4], NFKD: [0x1101, 0x116F, 0x11B7] }, +{ source: [0xAFE5], NFC: [0xAFE5], NFD: [0x1101, 0x116F, 0x11B8], NFKC: [0xAFE5], NFKD: [0x1101, 0x116F, 0x11B8] }, +{ source: [0xAFE6], NFC: [0xAFE6], NFD: [0x1101, 0x116F, 0x11B9], NFKC: [0xAFE6], NFKD: [0x1101, 0x116F, 0x11B9] }, +{ source: [0xAFE7], NFC: [0xAFE7], NFD: [0x1101, 0x116F, 0x11BA], NFKC: [0xAFE7], NFKD: [0x1101, 0x116F, 0x11BA] }, +{ source: [0xAFE8], NFC: [0xAFE8], NFD: [0x1101, 0x116F, 0x11BB], NFKC: [0xAFE8], NFKD: [0x1101, 0x116F, 0x11BB] }, +{ source: [0xAFE9], NFC: [0xAFE9], NFD: [0x1101, 0x116F, 0x11BC], NFKC: [0xAFE9], NFKD: [0x1101, 0x116F, 0x11BC] }, +{ source: [0xAFEA], NFC: [0xAFEA], NFD: [0x1101, 0x116F, 0x11BD], NFKC: [0xAFEA], NFKD: [0x1101, 0x116F, 0x11BD] }, +{ source: [0xAFEB], NFC: [0xAFEB], NFD: [0x1101, 0x116F, 0x11BE], NFKC: [0xAFEB], NFKD: [0x1101, 0x116F, 0x11BE] }, +{ source: [0xAFEC], NFC: [0xAFEC], NFD: [0x1101, 0x116F, 0x11BF], NFKC: [0xAFEC], NFKD: [0x1101, 0x116F, 0x11BF] }, +{ source: [0xAFED], NFC: [0xAFED], NFD: [0x1101, 0x116F, 0x11C0], NFKC: [0xAFED], NFKD: [0x1101, 0x116F, 0x11C0] }, +{ source: [0xAFEE], NFC: [0xAFEE], NFD: [0x1101, 0x116F, 0x11C1], NFKC: [0xAFEE], NFKD: [0x1101, 0x116F, 0x11C1] }, +{ source: [0xAFEF], NFC: [0xAFEF], NFD: [0x1101, 0x116F, 0x11C2], NFKC: [0xAFEF], NFKD: [0x1101, 0x116F, 0x11C2] }, +{ source: [0xAFF0], NFC: [0xAFF0], NFD: [0x1101, 0x1170], NFKC: [0xAFF0], NFKD: [0x1101, 0x1170] }, +{ source: [0xAFF1], NFC: [0xAFF1], NFD: [0x1101, 0x1170, 0x11A8], NFKC: [0xAFF1], NFKD: [0x1101, 0x1170, 0x11A8] }, +{ source: [0xAFF2], NFC: [0xAFF2], NFD: [0x1101, 0x1170, 0x11A9], NFKC: [0xAFF2], NFKD: [0x1101, 0x1170, 0x11A9] }, +{ source: [0xAFF3], NFC: [0xAFF3], NFD: [0x1101, 0x1170, 0x11AA], NFKC: [0xAFF3], NFKD: [0x1101, 0x1170, 0x11AA] }, +{ source: [0xAFF4], NFC: [0xAFF4], NFD: [0x1101, 0x1170, 0x11AB], NFKC: [0xAFF4], NFKD: [0x1101, 0x1170, 0x11AB] }, +{ source: [0xAFF5], NFC: [0xAFF5], NFD: [0x1101, 0x1170, 0x11AC], NFKC: [0xAFF5], NFKD: [0x1101, 0x1170, 0x11AC] }, +{ source: [0xAFF6], NFC: [0xAFF6], NFD: [0x1101, 0x1170, 0x11AD], NFKC: [0xAFF6], NFKD: [0x1101, 0x1170, 0x11AD] }, +{ source: [0xAFF7], NFC: [0xAFF7], NFD: [0x1101, 0x1170, 0x11AE], NFKC: [0xAFF7], NFKD: [0x1101, 0x1170, 0x11AE] }, +{ source: [0xAFF8], NFC: [0xAFF8], NFD: [0x1101, 0x1170, 0x11AF], NFKC: [0xAFF8], NFKD: [0x1101, 0x1170, 0x11AF] }, +{ source: [0xAFF9], NFC: [0xAFF9], NFD: [0x1101, 0x1170, 0x11B0], NFKC: [0xAFF9], NFKD: [0x1101, 0x1170, 0x11B0] }, +{ source: [0xAFFA], NFC: [0xAFFA], NFD: [0x1101, 0x1170, 0x11B1], NFKC: [0xAFFA], NFKD: [0x1101, 0x1170, 0x11B1] }, +{ source: [0xAFFB], NFC: [0xAFFB], NFD: [0x1101, 0x1170, 0x11B2], NFKC: [0xAFFB], NFKD: [0x1101, 0x1170, 0x11B2] }, +{ source: [0xAFFC], NFC: [0xAFFC], NFD: [0x1101, 0x1170, 0x11B3], NFKC: [0xAFFC], NFKD: [0x1101, 0x1170, 0x11B3] }, +{ source: [0xAFFD], NFC: [0xAFFD], NFD: [0x1101, 0x1170, 0x11B4], NFKC: [0xAFFD], NFKD: [0x1101, 0x1170, 0x11B4] }, +{ source: [0xAFFE], NFC: [0xAFFE], NFD: [0x1101, 0x1170, 0x11B5], NFKC: [0xAFFE], NFKD: [0x1101, 0x1170, 0x11B5] }, +{ source: [0xAFFF], NFC: [0xAFFF], NFD: [0x1101, 0x1170, 0x11B6], NFKC: [0xAFFF], NFKD: [0x1101, 0x1170, 0x11B6] }, +{ source: [0xB000], NFC: [0xB000], NFD: [0x1101, 0x1170, 0x11B7], NFKC: [0xB000], NFKD: [0x1101, 0x1170, 0x11B7] }, +{ source: [0xB001], NFC: [0xB001], NFD: [0x1101, 0x1170, 0x11B8], NFKC: [0xB001], NFKD: [0x1101, 0x1170, 0x11B8] }, +{ source: [0xB002], NFC: [0xB002], NFD: [0x1101, 0x1170, 0x11B9], NFKC: [0xB002], NFKD: [0x1101, 0x1170, 0x11B9] }, +{ source: [0xB003], NFC: [0xB003], NFD: [0x1101, 0x1170, 0x11BA], NFKC: [0xB003], NFKD: [0x1101, 0x1170, 0x11BA] }, +{ source: [0xB004], NFC: [0xB004], NFD: [0x1101, 0x1170, 0x11BB], NFKC: [0xB004], NFKD: [0x1101, 0x1170, 0x11BB] }, +{ source: [0xB005], NFC: [0xB005], NFD: [0x1101, 0x1170, 0x11BC], NFKC: [0xB005], NFKD: [0x1101, 0x1170, 0x11BC] }, +{ source: [0xB006], NFC: [0xB006], NFD: [0x1101, 0x1170, 0x11BD], NFKC: [0xB006], NFKD: [0x1101, 0x1170, 0x11BD] }, +{ source: [0xB007], NFC: [0xB007], NFD: [0x1101, 0x1170, 0x11BE], NFKC: [0xB007], NFKD: [0x1101, 0x1170, 0x11BE] }, +{ source: [0xB008], NFC: [0xB008], NFD: [0x1101, 0x1170, 0x11BF], NFKC: [0xB008], NFKD: [0x1101, 0x1170, 0x11BF] }, +{ source: [0xB009], NFC: [0xB009], NFD: [0x1101, 0x1170, 0x11C0], NFKC: [0xB009], NFKD: [0x1101, 0x1170, 0x11C0] }, +{ source: [0xB00A], NFC: [0xB00A], NFD: [0x1101, 0x1170, 0x11C1], NFKC: [0xB00A], NFKD: [0x1101, 0x1170, 0x11C1] }, +{ source: [0xB00B], NFC: [0xB00B], NFD: [0x1101, 0x1170, 0x11C2], NFKC: [0xB00B], NFKD: [0x1101, 0x1170, 0x11C2] }, +{ source: [0xB00C], NFC: [0xB00C], NFD: [0x1101, 0x1171], NFKC: [0xB00C], NFKD: [0x1101, 0x1171] }, +{ source: [0xB00D], NFC: [0xB00D], NFD: [0x1101, 0x1171, 0x11A8], NFKC: [0xB00D], NFKD: [0x1101, 0x1171, 0x11A8] }, +{ source: [0xB00E], NFC: [0xB00E], NFD: [0x1101, 0x1171, 0x11A9], NFKC: [0xB00E], NFKD: [0x1101, 0x1171, 0x11A9] }, +{ source: [0xB00F], NFC: [0xB00F], NFD: [0x1101, 0x1171, 0x11AA], NFKC: [0xB00F], NFKD: [0x1101, 0x1171, 0x11AA] }, +{ source: [0xB010], NFC: [0xB010], NFD: [0x1101, 0x1171, 0x11AB], NFKC: [0xB010], NFKD: [0x1101, 0x1171, 0x11AB] }, +{ source: [0xB011], NFC: [0xB011], NFD: [0x1101, 0x1171, 0x11AC], NFKC: [0xB011], NFKD: [0x1101, 0x1171, 0x11AC] }, +{ source: [0xB012], NFC: [0xB012], NFD: [0x1101, 0x1171, 0x11AD], NFKC: [0xB012], NFKD: [0x1101, 0x1171, 0x11AD] }, +{ source: [0xB013], NFC: [0xB013], NFD: [0x1101, 0x1171, 0x11AE], NFKC: [0xB013], NFKD: [0x1101, 0x1171, 0x11AE] }, +{ source: [0xB014], NFC: [0xB014], NFD: [0x1101, 0x1171, 0x11AF], NFKC: [0xB014], NFKD: [0x1101, 0x1171, 0x11AF] }, +{ source: [0xB015], NFC: [0xB015], NFD: [0x1101, 0x1171, 0x11B0], NFKC: [0xB015], NFKD: [0x1101, 0x1171, 0x11B0] }, +{ source: [0xB016], NFC: [0xB016], NFD: [0x1101, 0x1171, 0x11B1], NFKC: [0xB016], NFKD: [0x1101, 0x1171, 0x11B1] }, +{ source: [0xB017], NFC: [0xB017], NFD: [0x1101, 0x1171, 0x11B2], NFKC: [0xB017], NFKD: [0x1101, 0x1171, 0x11B2] }, +{ source: [0xB018], NFC: [0xB018], NFD: [0x1101, 0x1171, 0x11B3], NFKC: [0xB018], NFKD: [0x1101, 0x1171, 0x11B3] }, +{ source: [0xB019], NFC: [0xB019], NFD: [0x1101, 0x1171, 0x11B4], NFKC: [0xB019], NFKD: [0x1101, 0x1171, 0x11B4] }, +{ source: [0xB01A], NFC: [0xB01A], NFD: [0x1101, 0x1171, 0x11B5], NFKC: [0xB01A], NFKD: [0x1101, 0x1171, 0x11B5] }, +{ source: [0xB01B], NFC: [0xB01B], NFD: [0x1101, 0x1171, 0x11B6], NFKC: [0xB01B], NFKD: [0x1101, 0x1171, 0x11B6] }, +{ source: [0xB01C], NFC: [0xB01C], NFD: [0x1101, 0x1171, 0x11B7], NFKC: [0xB01C], NFKD: [0x1101, 0x1171, 0x11B7] }, +{ source: [0xB01D], NFC: [0xB01D], NFD: [0x1101, 0x1171, 0x11B8], NFKC: [0xB01D], NFKD: [0x1101, 0x1171, 0x11B8] }, +{ source: [0xB01E], NFC: [0xB01E], NFD: [0x1101, 0x1171, 0x11B9], NFKC: [0xB01E], NFKD: [0x1101, 0x1171, 0x11B9] }, +{ source: [0xB01F], NFC: [0xB01F], NFD: [0x1101, 0x1171, 0x11BA], NFKC: [0xB01F], NFKD: [0x1101, 0x1171, 0x11BA] }, +{ source: [0xB020], NFC: [0xB020], NFD: [0x1101, 0x1171, 0x11BB], NFKC: [0xB020], NFKD: [0x1101, 0x1171, 0x11BB] }, +{ source: [0xB021], NFC: [0xB021], NFD: [0x1101, 0x1171, 0x11BC], NFKC: [0xB021], NFKD: [0x1101, 0x1171, 0x11BC] }, +{ source: [0xB022], NFC: [0xB022], NFD: [0x1101, 0x1171, 0x11BD], NFKC: [0xB022], NFKD: [0x1101, 0x1171, 0x11BD] }, +{ source: [0xB023], NFC: [0xB023], NFD: [0x1101, 0x1171, 0x11BE], NFKC: [0xB023], NFKD: [0x1101, 0x1171, 0x11BE] }, +{ source: [0xB024], NFC: [0xB024], NFD: [0x1101, 0x1171, 0x11BF], NFKC: [0xB024], NFKD: [0x1101, 0x1171, 0x11BF] }, +{ source: [0xB025], NFC: [0xB025], NFD: [0x1101, 0x1171, 0x11C0], NFKC: [0xB025], NFKD: [0x1101, 0x1171, 0x11C0] }, +{ source: [0xB026], NFC: [0xB026], NFD: [0x1101, 0x1171, 0x11C1], NFKC: [0xB026], NFKD: [0x1101, 0x1171, 0x11C1] }, +{ source: [0xB027], NFC: [0xB027], NFD: [0x1101, 0x1171, 0x11C2], NFKC: [0xB027], NFKD: [0x1101, 0x1171, 0x11C2] }, +{ source: [0xB028], NFC: [0xB028], NFD: [0x1101, 0x1172], NFKC: [0xB028], NFKD: [0x1101, 0x1172] }, +{ source: [0xB029], NFC: [0xB029], NFD: [0x1101, 0x1172, 0x11A8], NFKC: [0xB029], NFKD: [0x1101, 0x1172, 0x11A8] }, +{ source: [0xB02A], NFC: [0xB02A], NFD: [0x1101, 0x1172, 0x11A9], NFKC: [0xB02A], NFKD: [0x1101, 0x1172, 0x11A9] }, +{ source: [0xB02B], NFC: [0xB02B], NFD: [0x1101, 0x1172, 0x11AA], NFKC: [0xB02B], NFKD: [0x1101, 0x1172, 0x11AA] }, +{ source: [0xB02C], NFC: [0xB02C], NFD: [0x1101, 0x1172, 0x11AB], NFKC: [0xB02C], NFKD: [0x1101, 0x1172, 0x11AB] }, +{ source: [0xB02D], NFC: [0xB02D], NFD: [0x1101, 0x1172, 0x11AC], NFKC: [0xB02D], NFKD: [0x1101, 0x1172, 0x11AC] }, +{ source: [0xB02E], NFC: [0xB02E], NFD: [0x1101, 0x1172, 0x11AD], NFKC: [0xB02E], NFKD: [0x1101, 0x1172, 0x11AD] }, +{ source: [0xB02F], NFC: [0xB02F], NFD: [0x1101, 0x1172, 0x11AE], NFKC: [0xB02F], NFKD: [0x1101, 0x1172, 0x11AE] }, +{ source: [0xB030], NFC: [0xB030], NFD: [0x1101, 0x1172, 0x11AF], NFKC: [0xB030], NFKD: [0x1101, 0x1172, 0x11AF] }, +{ source: [0xB031], NFC: [0xB031], NFD: [0x1101, 0x1172, 0x11B0], NFKC: [0xB031], NFKD: [0x1101, 0x1172, 0x11B0] }, +{ source: [0xB032], NFC: [0xB032], NFD: [0x1101, 0x1172, 0x11B1], NFKC: [0xB032], NFKD: [0x1101, 0x1172, 0x11B1] }, +{ source: [0xB033], NFC: [0xB033], NFD: [0x1101, 0x1172, 0x11B2], NFKC: [0xB033], NFKD: [0x1101, 0x1172, 0x11B2] }, +{ source: [0xB034], NFC: [0xB034], NFD: [0x1101, 0x1172, 0x11B3], NFKC: [0xB034], NFKD: [0x1101, 0x1172, 0x11B3] }, +{ source: [0xB035], NFC: [0xB035], NFD: [0x1101, 0x1172, 0x11B4], NFKC: [0xB035], NFKD: [0x1101, 0x1172, 0x11B4] }, +{ source: [0xB036], NFC: [0xB036], NFD: [0x1101, 0x1172, 0x11B5], NFKC: [0xB036], NFKD: [0x1101, 0x1172, 0x11B5] }, +{ source: [0xB037], NFC: [0xB037], NFD: [0x1101, 0x1172, 0x11B6], NFKC: [0xB037], NFKD: [0x1101, 0x1172, 0x11B6] }, +{ source: [0xB038], NFC: [0xB038], NFD: [0x1101, 0x1172, 0x11B7], NFKC: [0xB038], NFKD: [0x1101, 0x1172, 0x11B7] }, +{ source: [0xB039], NFC: [0xB039], NFD: [0x1101, 0x1172, 0x11B8], NFKC: [0xB039], NFKD: [0x1101, 0x1172, 0x11B8] }, +{ source: [0xB03A], NFC: [0xB03A], NFD: [0x1101, 0x1172, 0x11B9], NFKC: [0xB03A], NFKD: [0x1101, 0x1172, 0x11B9] }, +{ source: [0xB03B], NFC: [0xB03B], NFD: [0x1101, 0x1172, 0x11BA], NFKC: [0xB03B], NFKD: [0x1101, 0x1172, 0x11BA] }, +{ source: [0xB03C], NFC: [0xB03C], NFD: [0x1101, 0x1172, 0x11BB], NFKC: [0xB03C], NFKD: [0x1101, 0x1172, 0x11BB] }, +{ source: [0xB03D], NFC: [0xB03D], NFD: [0x1101, 0x1172, 0x11BC], NFKC: [0xB03D], NFKD: [0x1101, 0x1172, 0x11BC] }, +{ source: [0xB03E], NFC: [0xB03E], NFD: [0x1101, 0x1172, 0x11BD], NFKC: [0xB03E], NFKD: [0x1101, 0x1172, 0x11BD] }, +{ source: [0xB03F], NFC: [0xB03F], NFD: [0x1101, 0x1172, 0x11BE], NFKC: [0xB03F], NFKD: [0x1101, 0x1172, 0x11BE] }, +{ source: [0xB040], NFC: [0xB040], NFD: [0x1101, 0x1172, 0x11BF], NFKC: [0xB040], NFKD: [0x1101, 0x1172, 0x11BF] }, +{ source: [0xB041], NFC: [0xB041], NFD: [0x1101, 0x1172, 0x11C0], NFKC: [0xB041], NFKD: [0x1101, 0x1172, 0x11C0] }, +{ source: [0xB042], NFC: [0xB042], NFD: [0x1101, 0x1172, 0x11C1], NFKC: [0xB042], NFKD: [0x1101, 0x1172, 0x11C1] }, +{ source: [0xB043], NFC: [0xB043], NFD: [0x1101, 0x1172, 0x11C2], NFKC: [0xB043], NFKD: [0x1101, 0x1172, 0x11C2] }, +{ source: [0xB044], NFC: [0xB044], NFD: [0x1101, 0x1173], NFKC: [0xB044], NFKD: [0x1101, 0x1173] }, +{ source: [0xB045], NFC: [0xB045], NFD: [0x1101, 0x1173, 0x11A8], NFKC: [0xB045], NFKD: [0x1101, 0x1173, 0x11A8] }, +{ source: [0xB046], NFC: [0xB046], NFD: [0x1101, 0x1173, 0x11A9], NFKC: [0xB046], NFKD: [0x1101, 0x1173, 0x11A9] }, +{ source: [0xB047], NFC: [0xB047], NFD: [0x1101, 0x1173, 0x11AA], NFKC: [0xB047], NFKD: [0x1101, 0x1173, 0x11AA] }, +{ source: [0xB048], NFC: [0xB048], NFD: [0x1101, 0x1173, 0x11AB], NFKC: [0xB048], NFKD: [0x1101, 0x1173, 0x11AB] }, +{ source: [0xB049], NFC: [0xB049], NFD: [0x1101, 0x1173, 0x11AC], NFKC: [0xB049], NFKD: [0x1101, 0x1173, 0x11AC] }, +{ source: [0xB04A], NFC: [0xB04A], NFD: [0x1101, 0x1173, 0x11AD], NFKC: [0xB04A], NFKD: [0x1101, 0x1173, 0x11AD] }, +{ source: [0xB04B], NFC: [0xB04B], NFD: [0x1101, 0x1173, 0x11AE], NFKC: [0xB04B], NFKD: [0x1101, 0x1173, 0x11AE] }, +{ source: [0xB04C], NFC: [0xB04C], NFD: [0x1101, 0x1173, 0x11AF], NFKC: [0xB04C], NFKD: [0x1101, 0x1173, 0x11AF] }, +{ source: [0xB04D], NFC: [0xB04D], NFD: [0x1101, 0x1173, 0x11B0], NFKC: [0xB04D], NFKD: [0x1101, 0x1173, 0x11B0] }, +{ source: [0xB04E], NFC: [0xB04E], NFD: [0x1101, 0x1173, 0x11B1], NFKC: [0xB04E], NFKD: [0x1101, 0x1173, 0x11B1] }, +{ source: [0xB04F], NFC: [0xB04F], NFD: [0x1101, 0x1173, 0x11B2], NFKC: [0xB04F], NFKD: [0x1101, 0x1173, 0x11B2] }, +{ source: [0xB050], NFC: [0xB050], NFD: [0x1101, 0x1173, 0x11B3], NFKC: [0xB050], NFKD: [0x1101, 0x1173, 0x11B3] }, +{ source: [0xB051], NFC: [0xB051], NFD: [0x1101, 0x1173, 0x11B4], NFKC: [0xB051], NFKD: [0x1101, 0x1173, 0x11B4] }, +{ source: [0xB052], NFC: [0xB052], NFD: [0x1101, 0x1173, 0x11B5], NFKC: [0xB052], NFKD: [0x1101, 0x1173, 0x11B5] }, +{ source: [0xB053], NFC: [0xB053], NFD: [0x1101, 0x1173, 0x11B6], NFKC: [0xB053], NFKD: [0x1101, 0x1173, 0x11B6] }, +{ source: [0xB054], NFC: [0xB054], NFD: [0x1101, 0x1173, 0x11B7], NFKC: [0xB054], NFKD: [0x1101, 0x1173, 0x11B7] }, +{ source: [0xB055], NFC: [0xB055], NFD: [0x1101, 0x1173, 0x11B8], NFKC: [0xB055], NFKD: [0x1101, 0x1173, 0x11B8] }, +{ source: [0xB056], NFC: [0xB056], NFD: [0x1101, 0x1173, 0x11B9], NFKC: [0xB056], NFKD: [0x1101, 0x1173, 0x11B9] }, +{ source: [0xB057], NFC: [0xB057], NFD: [0x1101, 0x1173, 0x11BA], NFKC: [0xB057], NFKD: [0x1101, 0x1173, 0x11BA] }, +{ source: [0xB058], NFC: [0xB058], NFD: [0x1101, 0x1173, 0x11BB], NFKC: [0xB058], NFKD: [0x1101, 0x1173, 0x11BB] }, +{ source: [0xB059], NFC: [0xB059], NFD: [0x1101, 0x1173, 0x11BC], NFKC: [0xB059], NFKD: [0x1101, 0x1173, 0x11BC] }, +{ source: [0xB05A], NFC: [0xB05A], NFD: [0x1101, 0x1173, 0x11BD], NFKC: [0xB05A], NFKD: [0x1101, 0x1173, 0x11BD] }, +{ source: [0xB05B], NFC: [0xB05B], NFD: [0x1101, 0x1173, 0x11BE], NFKC: [0xB05B], NFKD: [0x1101, 0x1173, 0x11BE] }, +{ source: [0xB05C], NFC: [0xB05C], NFD: [0x1101, 0x1173, 0x11BF], NFKC: [0xB05C], NFKD: [0x1101, 0x1173, 0x11BF] }, +{ source: [0xB05D], NFC: [0xB05D], NFD: [0x1101, 0x1173, 0x11C0], NFKC: [0xB05D], NFKD: [0x1101, 0x1173, 0x11C0] }, +{ source: [0xB05E], NFC: [0xB05E], NFD: [0x1101, 0x1173, 0x11C1], NFKC: [0xB05E], NFKD: [0x1101, 0x1173, 0x11C1] }, +{ source: [0xB05F], NFC: [0xB05F], NFD: [0x1101, 0x1173, 0x11C2], NFKC: [0xB05F], NFKD: [0x1101, 0x1173, 0x11C2] }, +{ source: [0xB060], NFC: [0xB060], NFD: [0x1101, 0x1174], NFKC: [0xB060], NFKD: [0x1101, 0x1174] }, +{ source: [0xB061], NFC: [0xB061], NFD: [0x1101, 0x1174, 0x11A8], NFKC: [0xB061], NFKD: [0x1101, 0x1174, 0x11A8] }, +{ source: [0xB062], NFC: [0xB062], NFD: [0x1101, 0x1174, 0x11A9], NFKC: [0xB062], NFKD: [0x1101, 0x1174, 0x11A9] }, +{ source: [0xB063], NFC: [0xB063], NFD: [0x1101, 0x1174, 0x11AA], NFKC: [0xB063], NFKD: [0x1101, 0x1174, 0x11AA] }, +{ source: [0xB064], NFC: [0xB064], NFD: [0x1101, 0x1174, 0x11AB], NFKC: [0xB064], NFKD: [0x1101, 0x1174, 0x11AB] }, +{ source: [0xB065], NFC: [0xB065], NFD: [0x1101, 0x1174, 0x11AC], NFKC: [0xB065], NFKD: [0x1101, 0x1174, 0x11AC] }, +{ source: [0xB066], NFC: [0xB066], NFD: [0x1101, 0x1174, 0x11AD], NFKC: [0xB066], NFKD: [0x1101, 0x1174, 0x11AD] }, +{ source: [0xB067], NFC: [0xB067], NFD: [0x1101, 0x1174, 0x11AE], NFKC: [0xB067], NFKD: [0x1101, 0x1174, 0x11AE] }, +{ source: [0xB068], NFC: [0xB068], NFD: [0x1101, 0x1174, 0x11AF], NFKC: [0xB068], NFKD: [0x1101, 0x1174, 0x11AF] }, +{ source: [0xB069], NFC: [0xB069], NFD: [0x1101, 0x1174, 0x11B0], NFKC: [0xB069], NFKD: [0x1101, 0x1174, 0x11B0] }, +{ source: [0xB06A], NFC: [0xB06A], NFD: [0x1101, 0x1174, 0x11B1], NFKC: [0xB06A], NFKD: [0x1101, 0x1174, 0x11B1] }, +{ source: [0xB06B], NFC: [0xB06B], NFD: [0x1101, 0x1174, 0x11B2], NFKC: [0xB06B], NFKD: [0x1101, 0x1174, 0x11B2] }, +{ source: [0xB06C], NFC: [0xB06C], NFD: [0x1101, 0x1174, 0x11B3], NFKC: [0xB06C], NFKD: [0x1101, 0x1174, 0x11B3] }, +{ source: [0xB06D], NFC: [0xB06D], NFD: [0x1101, 0x1174, 0x11B4], NFKC: [0xB06D], NFKD: [0x1101, 0x1174, 0x11B4] }, +{ source: [0xB06E], NFC: [0xB06E], NFD: [0x1101, 0x1174, 0x11B5], NFKC: [0xB06E], NFKD: [0x1101, 0x1174, 0x11B5] }, +{ source: [0xB06F], NFC: [0xB06F], NFD: [0x1101, 0x1174, 0x11B6], NFKC: [0xB06F], NFKD: [0x1101, 0x1174, 0x11B6] }, +{ source: [0xB070], NFC: [0xB070], NFD: [0x1101, 0x1174, 0x11B7], NFKC: [0xB070], NFKD: [0x1101, 0x1174, 0x11B7] }, +{ source: [0xB071], NFC: [0xB071], NFD: [0x1101, 0x1174, 0x11B8], NFKC: [0xB071], NFKD: [0x1101, 0x1174, 0x11B8] }, +{ source: [0xB072], NFC: [0xB072], NFD: [0x1101, 0x1174, 0x11B9], NFKC: [0xB072], NFKD: [0x1101, 0x1174, 0x11B9] }, +{ source: [0xB073], NFC: [0xB073], NFD: [0x1101, 0x1174, 0x11BA], NFKC: [0xB073], NFKD: [0x1101, 0x1174, 0x11BA] }, +{ source: [0xB074], NFC: [0xB074], NFD: [0x1101, 0x1174, 0x11BB], NFKC: [0xB074], NFKD: [0x1101, 0x1174, 0x11BB] }, +{ source: [0xB075], NFC: [0xB075], NFD: [0x1101, 0x1174, 0x11BC], NFKC: [0xB075], NFKD: [0x1101, 0x1174, 0x11BC] }, +{ source: [0xB076], NFC: [0xB076], NFD: [0x1101, 0x1174, 0x11BD], NFKC: [0xB076], NFKD: [0x1101, 0x1174, 0x11BD] }, +{ source: [0xB077], NFC: [0xB077], NFD: [0x1101, 0x1174, 0x11BE], NFKC: [0xB077], NFKD: [0x1101, 0x1174, 0x11BE] }, +{ source: [0xB078], NFC: [0xB078], NFD: [0x1101, 0x1174, 0x11BF], NFKC: [0xB078], NFKD: [0x1101, 0x1174, 0x11BF] }, +{ source: [0xB079], NFC: [0xB079], NFD: [0x1101, 0x1174, 0x11C0], NFKC: [0xB079], NFKD: [0x1101, 0x1174, 0x11C0] }, +{ source: [0xB07A], NFC: [0xB07A], NFD: [0x1101, 0x1174, 0x11C1], NFKC: [0xB07A], NFKD: [0x1101, 0x1174, 0x11C1] }, +{ source: [0xB07B], NFC: [0xB07B], NFD: [0x1101, 0x1174, 0x11C2], NFKC: [0xB07B], NFKD: [0x1101, 0x1174, 0x11C2] }, +{ source: [0xB07C], NFC: [0xB07C], NFD: [0x1101, 0x1175], NFKC: [0xB07C], NFKD: [0x1101, 0x1175] }, +{ source: [0xB07D], NFC: [0xB07D], NFD: [0x1101, 0x1175, 0x11A8], NFKC: [0xB07D], NFKD: [0x1101, 0x1175, 0x11A8] }, +{ source: [0xB07E], NFC: [0xB07E], NFD: [0x1101, 0x1175, 0x11A9], NFKC: [0xB07E], NFKD: [0x1101, 0x1175, 0x11A9] }, +{ source: [0xB07F], NFC: [0xB07F], NFD: [0x1101, 0x1175, 0x11AA], NFKC: [0xB07F], NFKD: [0x1101, 0x1175, 0x11AA] }, +{ source: [0xB080], NFC: [0xB080], NFD: [0x1101, 0x1175, 0x11AB], NFKC: [0xB080], NFKD: [0x1101, 0x1175, 0x11AB] }, +{ source: [0xB081], NFC: [0xB081], NFD: [0x1101, 0x1175, 0x11AC], NFKC: [0xB081], NFKD: [0x1101, 0x1175, 0x11AC] }, +{ source: [0xB082], NFC: [0xB082], NFD: [0x1101, 0x1175, 0x11AD], NFKC: [0xB082], NFKD: [0x1101, 0x1175, 0x11AD] }, +{ source: [0xB083], NFC: [0xB083], NFD: [0x1101, 0x1175, 0x11AE], NFKC: [0xB083], NFKD: [0x1101, 0x1175, 0x11AE] }, +{ source: [0xB084], NFC: [0xB084], NFD: [0x1101, 0x1175, 0x11AF], NFKC: [0xB084], NFKD: [0x1101, 0x1175, 0x11AF] }, +{ source: [0xB085], NFC: [0xB085], NFD: [0x1101, 0x1175, 0x11B0], NFKC: [0xB085], NFKD: [0x1101, 0x1175, 0x11B0] }, +{ source: [0xB086], NFC: [0xB086], NFD: [0x1101, 0x1175, 0x11B1], NFKC: [0xB086], NFKD: [0x1101, 0x1175, 0x11B1] }, +{ source: [0xB087], NFC: [0xB087], NFD: [0x1101, 0x1175, 0x11B2], NFKC: [0xB087], NFKD: [0x1101, 0x1175, 0x11B2] }, +{ source: [0xB088], NFC: [0xB088], NFD: [0x1101, 0x1175, 0x11B3], NFKC: [0xB088], NFKD: [0x1101, 0x1175, 0x11B3] }, +{ source: [0xB089], NFC: [0xB089], NFD: [0x1101, 0x1175, 0x11B4], NFKC: [0xB089], NFKD: [0x1101, 0x1175, 0x11B4] }, +{ source: [0xB08A], NFC: [0xB08A], NFD: [0x1101, 0x1175, 0x11B5], NFKC: [0xB08A], NFKD: [0x1101, 0x1175, 0x11B5] }, +{ source: [0xB08B], NFC: [0xB08B], NFD: [0x1101, 0x1175, 0x11B6], NFKC: [0xB08B], NFKD: [0x1101, 0x1175, 0x11B6] }, +{ source: [0xB08C], NFC: [0xB08C], NFD: [0x1101, 0x1175, 0x11B7], NFKC: [0xB08C], NFKD: [0x1101, 0x1175, 0x11B7] }, +{ source: [0xB08D], NFC: [0xB08D], NFD: [0x1101, 0x1175, 0x11B8], NFKC: [0xB08D], NFKD: [0x1101, 0x1175, 0x11B8] }, +{ source: [0xB08E], NFC: [0xB08E], NFD: [0x1101, 0x1175, 0x11B9], NFKC: [0xB08E], NFKD: [0x1101, 0x1175, 0x11B9] }, +{ source: [0xB08F], NFC: [0xB08F], NFD: [0x1101, 0x1175, 0x11BA], NFKC: [0xB08F], NFKD: [0x1101, 0x1175, 0x11BA] }, +{ source: [0xB090], NFC: [0xB090], NFD: [0x1101, 0x1175, 0x11BB], NFKC: [0xB090], NFKD: [0x1101, 0x1175, 0x11BB] }, +{ source: [0xB091], NFC: [0xB091], NFD: [0x1101, 0x1175, 0x11BC], NFKC: [0xB091], NFKD: [0x1101, 0x1175, 0x11BC] }, +{ source: [0xB092], NFC: [0xB092], NFD: [0x1101, 0x1175, 0x11BD], NFKC: [0xB092], NFKD: [0x1101, 0x1175, 0x11BD] }, +{ source: [0xB093], NFC: [0xB093], NFD: [0x1101, 0x1175, 0x11BE], NFKC: [0xB093], NFKD: [0x1101, 0x1175, 0x11BE] }, +{ source: [0xB094], NFC: [0xB094], NFD: [0x1101, 0x1175, 0x11BF], NFKC: [0xB094], NFKD: [0x1101, 0x1175, 0x11BF] }, +{ source: [0xB095], NFC: [0xB095], NFD: [0x1101, 0x1175, 0x11C0], NFKC: [0xB095], NFKD: [0x1101, 0x1175, 0x11C0] }, +{ source: [0xB096], NFC: [0xB096], NFD: [0x1101, 0x1175, 0x11C1], NFKC: [0xB096], NFKD: [0x1101, 0x1175, 0x11C1] }, +{ source: [0xB097], NFC: [0xB097], NFD: [0x1101, 0x1175, 0x11C2], NFKC: [0xB097], NFKD: [0x1101, 0x1175, 0x11C2] }, +{ source: [0xB098], NFC: [0xB098], NFD: [0x1102, 0x1161], NFKC: [0xB098], NFKD: [0x1102, 0x1161] }, +{ source: [0xB099], NFC: [0xB099], NFD: [0x1102, 0x1161, 0x11A8], NFKC: [0xB099], NFKD: [0x1102, 0x1161, 0x11A8] }, +{ source: [0xB09A], NFC: [0xB09A], NFD: [0x1102, 0x1161, 0x11A9], NFKC: [0xB09A], NFKD: [0x1102, 0x1161, 0x11A9] }, +{ source: [0xB09B], NFC: [0xB09B], NFD: [0x1102, 0x1161, 0x11AA], NFKC: [0xB09B], NFKD: [0x1102, 0x1161, 0x11AA] }, +{ source: [0xB09C], NFC: [0xB09C], NFD: [0x1102, 0x1161, 0x11AB], NFKC: [0xB09C], NFKD: [0x1102, 0x1161, 0x11AB] }, +{ source: [0xB09D], NFC: [0xB09D], NFD: [0x1102, 0x1161, 0x11AC], NFKC: [0xB09D], NFKD: [0x1102, 0x1161, 0x11AC] }, +{ source: [0xB09E], NFC: [0xB09E], NFD: [0x1102, 0x1161, 0x11AD], NFKC: [0xB09E], NFKD: [0x1102, 0x1161, 0x11AD] }, +{ source: [0xB09F], NFC: [0xB09F], NFD: [0x1102, 0x1161, 0x11AE], NFKC: [0xB09F], NFKD: [0x1102, 0x1161, 0x11AE] }, +{ source: [0xB0A0], NFC: [0xB0A0], NFD: [0x1102, 0x1161, 0x11AF], NFKC: [0xB0A0], NFKD: [0x1102, 0x1161, 0x11AF] }, +{ source: [0xB0A1], NFC: [0xB0A1], NFD: [0x1102, 0x1161, 0x11B0], NFKC: [0xB0A1], NFKD: [0x1102, 0x1161, 0x11B0] }, +{ source: [0xB0A2], NFC: [0xB0A2], NFD: [0x1102, 0x1161, 0x11B1], NFKC: [0xB0A2], NFKD: [0x1102, 0x1161, 0x11B1] }, +{ source: [0xB0A3], NFC: [0xB0A3], NFD: [0x1102, 0x1161, 0x11B2], NFKC: [0xB0A3], NFKD: [0x1102, 0x1161, 0x11B2] }, +{ source: [0xB0A4], NFC: [0xB0A4], NFD: [0x1102, 0x1161, 0x11B3], NFKC: [0xB0A4], NFKD: [0x1102, 0x1161, 0x11B3] }, +{ source: [0xB0A5], NFC: [0xB0A5], NFD: [0x1102, 0x1161, 0x11B4], NFKC: [0xB0A5], NFKD: [0x1102, 0x1161, 0x11B4] }, +{ source: [0xB0A6], NFC: [0xB0A6], NFD: [0x1102, 0x1161, 0x11B5], NFKC: [0xB0A6], NFKD: [0x1102, 0x1161, 0x11B5] }, +{ source: [0xB0A7], NFC: [0xB0A7], NFD: [0x1102, 0x1161, 0x11B6], NFKC: [0xB0A7], NFKD: [0x1102, 0x1161, 0x11B6] }, +{ source: [0xB0A8], NFC: [0xB0A8], NFD: [0x1102, 0x1161, 0x11B7], NFKC: [0xB0A8], NFKD: [0x1102, 0x1161, 0x11B7] }, +{ source: [0xB0A9], NFC: [0xB0A9], NFD: [0x1102, 0x1161, 0x11B8], NFKC: [0xB0A9], NFKD: [0x1102, 0x1161, 0x11B8] }, +{ source: [0xB0AA], NFC: [0xB0AA], NFD: [0x1102, 0x1161, 0x11B9], NFKC: [0xB0AA], NFKD: [0x1102, 0x1161, 0x11B9] }, +{ source: [0xB0AB], NFC: [0xB0AB], NFD: [0x1102, 0x1161, 0x11BA], NFKC: [0xB0AB], NFKD: [0x1102, 0x1161, 0x11BA] }, +{ source: [0xB0AC], NFC: [0xB0AC], NFD: [0x1102, 0x1161, 0x11BB], NFKC: [0xB0AC], NFKD: [0x1102, 0x1161, 0x11BB] }, +{ source: [0xB0AD], NFC: [0xB0AD], NFD: [0x1102, 0x1161, 0x11BC], NFKC: [0xB0AD], NFKD: [0x1102, 0x1161, 0x11BC] }, +{ source: [0xB0AE], NFC: [0xB0AE], NFD: [0x1102, 0x1161, 0x11BD], NFKC: [0xB0AE], NFKD: [0x1102, 0x1161, 0x11BD] }, +{ source: [0xB0AF], NFC: [0xB0AF], NFD: [0x1102, 0x1161, 0x11BE], NFKC: [0xB0AF], NFKD: [0x1102, 0x1161, 0x11BE] }, +{ source: [0xB0B0], NFC: [0xB0B0], NFD: [0x1102, 0x1161, 0x11BF], NFKC: [0xB0B0], NFKD: [0x1102, 0x1161, 0x11BF] }, +{ source: [0xB0B1], NFC: [0xB0B1], NFD: [0x1102, 0x1161, 0x11C0], NFKC: [0xB0B1], NFKD: [0x1102, 0x1161, 0x11C0] }, +{ source: [0xB0B2], NFC: [0xB0B2], NFD: [0x1102, 0x1161, 0x11C1], NFKC: [0xB0B2], NFKD: [0x1102, 0x1161, 0x11C1] }, +{ source: [0xB0B3], NFC: [0xB0B3], NFD: [0x1102, 0x1161, 0x11C2], NFKC: [0xB0B3], NFKD: [0x1102, 0x1161, 0x11C2] }, +{ source: [0xB0B4], NFC: [0xB0B4], NFD: [0x1102, 0x1162], NFKC: [0xB0B4], NFKD: [0x1102, 0x1162] }, +{ source: [0xB0B5], NFC: [0xB0B5], NFD: [0x1102, 0x1162, 0x11A8], NFKC: [0xB0B5], NFKD: [0x1102, 0x1162, 0x11A8] }, +{ source: [0xB0B6], NFC: [0xB0B6], NFD: [0x1102, 0x1162, 0x11A9], NFKC: [0xB0B6], NFKD: [0x1102, 0x1162, 0x11A9] }, +{ source: [0xB0B7], NFC: [0xB0B7], NFD: [0x1102, 0x1162, 0x11AA], NFKC: [0xB0B7], NFKD: [0x1102, 0x1162, 0x11AA] }, +{ source: [0xB0B8], NFC: [0xB0B8], NFD: [0x1102, 0x1162, 0x11AB], NFKC: [0xB0B8], NFKD: [0x1102, 0x1162, 0x11AB] }, +{ source: [0xB0B9], NFC: [0xB0B9], NFD: [0x1102, 0x1162, 0x11AC], NFKC: [0xB0B9], NFKD: [0x1102, 0x1162, 0x11AC] }, +{ source: [0xB0BA], NFC: [0xB0BA], NFD: [0x1102, 0x1162, 0x11AD], NFKC: [0xB0BA], NFKD: [0x1102, 0x1162, 0x11AD] }, +{ source: [0xB0BB], NFC: [0xB0BB], NFD: [0x1102, 0x1162, 0x11AE], NFKC: [0xB0BB], NFKD: [0x1102, 0x1162, 0x11AE] }, +{ source: [0xB0BC], NFC: [0xB0BC], NFD: [0x1102, 0x1162, 0x11AF], NFKC: [0xB0BC], NFKD: [0x1102, 0x1162, 0x11AF] }, +{ source: [0xB0BD], NFC: [0xB0BD], NFD: [0x1102, 0x1162, 0x11B0], NFKC: [0xB0BD], NFKD: [0x1102, 0x1162, 0x11B0] }, +{ source: [0xB0BE], NFC: [0xB0BE], NFD: [0x1102, 0x1162, 0x11B1], NFKC: [0xB0BE], NFKD: [0x1102, 0x1162, 0x11B1] }, +{ source: [0xB0BF], NFC: [0xB0BF], NFD: [0x1102, 0x1162, 0x11B2], NFKC: [0xB0BF], NFKD: [0x1102, 0x1162, 0x11B2] }, +{ source: [0xB0C0], NFC: [0xB0C0], NFD: [0x1102, 0x1162, 0x11B3], NFKC: [0xB0C0], NFKD: [0x1102, 0x1162, 0x11B3] }, +{ source: [0xB0C1], NFC: [0xB0C1], NFD: [0x1102, 0x1162, 0x11B4], NFKC: [0xB0C1], NFKD: [0x1102, 0x1162, 0x11B4] }, +{ source: [0xB0C2], NFC: [0xB0C2], NFD: [0x1102, 0x1162, 0x11B5], NFKC: [0xB0C2], NFKD: [0x1102, 0x1162, 0x11B5] }, +{ source: [0xB0C3], NFC: [0xB0C3], NFD: [0x1102, 0x1162, 0x11B6], NFKC: [0xB0C3], NFKD: [0x1102, 0x1162, 0x11B6] }, +{ source: [0xB0C4], NFC: [0xB0C4], NFD: [0x1102, 0x1162, 0x11B7], NFKC: [0xB0C4], NFKD: [0x1102, 0x1162, 0x11B7] }, +{ source: [0xB0C5], NFC: [0xB0C5], NFD: [0x1102, 0x1162, 0x11B8], NFKC: [0xB0C5], NFKD: [0x1102, 0x1162, 0x11B8] }, +{ source: [0xB0C6], NFC: [0xB0C6], NFD: [0x1102, 0x1162, 0x11B9], NFKC: [0xB0C6], NFKD: [0x1102, 0x1162, 0x11B9] }, +{ source: [0xB0C7], NFC: [0xB0C7], NFD: [0x1102, 0x1162, 0x11BA], NFKC: [0xB0C7], NFKD: [0x1102, 0x1162, 0x11BA] }, +{ source: [0xB0C8], NFC: [0xB0C8], NFD: [0x1102, 0x1162, 0x11BB], NFKC: [0xB0C8], NFKD: [0x1102, 0x1162, 0x11BB] }, +{ source: [0xB0C9], NFC: [0xB0C9], NFD: [0x1102, 0x1162, 0x11BC], NFKC: [0xB0C9], NFKD: [0x1102, 0x1162, 0x11BC] }, +{ source: [0xB0CA], NFC: [0xB0CA], NFD: [0x1102, 0x1162, 0x11BD], NFKC: [0xB0CA], NFKD: [0x1102, 0x1162, 0x11BD] }, +{ source: [0xB0CB], NFC: [0xB0CB], NFD: [0x1102, 0x1162, 0x11BE], NFKC: [0xB0CB], NFKD: [0x1102, 0x1162, 0x11BE] }, +{ source: [0xB0CC], NFC: [0xB0CC], NFD: [0x1102, 0x1162, 0x11BF], NFKC: [0xB0CC], NFKD: [0x1102, 0x1162, 0x11BF] }, +{ source: [0xB0CD], NFC: [0xB0CD], NFD: [0x1102, 0x1162, 0x11C0], NFKC: [0xB0CD], NFKD: [0x1102, 0x1162, 0x11C0] }, +{ source: [0xB0CE], NFC: [0xB0CE], NFD: [0x1102, 0x1162, 0x11C1], NFKC: [0xB0CE], NFKD: [0x1102, 0x1162, 0x11C1] }, +{ source: [0xB0CF], NFC: [0xB0CF], NFD: [0x1102, 0x1162, 0x11C2], NFKC: [0xB0CF], NFKD: [0x1102, 0x1162, 0x11C2] }, +{ source: [0xB0D0], NFC: [0xB0D0], NFD: [0x1102, 0x1163], NFKC: [0xB0D0], NFKD: [0x1102, 0x1163] }, +{ source: [0xB0D1], NFC: [0xB0D1], NFD: [0x1102, 0x1163, 0x11A8], NFKC: [0xB0D1], NFKD: [0x1102, 0x1163, 0x11A8] }, +{ source: [0xB0D2], NFC: [0xB0D2], NFD: [0x1102, 0x1163, 0x11A9], NFKC: [0xB0D2], NFKD: [0x1102, 0x1163, 0x11A9] }, +{ source: [0xB0D3], NFC: [0xB0D3], NFD: [0x1102, 0x1163, 0x11AA], NFKC: [0xB0D3], NFKD: [0x1102, 0x1163, 0x11AA] }, +{ source: [0xB0D4], NFC: [0xB0D4], NFD: [0x1102, 0x1163, 0x11AB], NFKC: [0xB0D4], NFKD: [0x1102, 0x1163, 0x11AB] }, +{ source: [0xB0D5], NFC: [0xB0D5], NFD: [0x1102, 0x1163, 0x11AC], NFKC: [0xB0D5], NFKD: [0x1102, 0x1163, 0x11AC] }, +{ source: [0xB0D6], NFC: [0xB0D6], NFD: [0x1102, 0x1163, 0x11AD], NFKC: [0xB0D6], NFKD: [0x1102, 0x1163, 0x11AD] }, +{ source: [0xB0D7], NFC: [0xB0D7], NFD: [0x1102, 0x1163, 0x11AE], NFKC: [0xB0D7], NFKD: [0x1102, 0x1163, 0x11AE] }, +{ source: [0xB0D8], NFC: [0xB0D8], NFD: [0x1102, 0x1163, 0x11AF], NFKC: [0xB0D8], NFKD: [0x1102, 0x1163, 0x11AF] }, +{ source: [0xB0D9], NFC: [0xB0D9], NFD: [0x1102, 0x1163, 0x11B0], NFKC: [0xB0D9], NFKD: [0x1102, 0x1163, 0x11B0] }, +{ source: [0xB0DA], NFC: [0xB0DA], NFD: [0x1102, 0x1163, 0x11B1], NFKC: [0xB0DA], NFKD: [0x1102, 0x1163, 0x11B1] }, +{ source: [0xB0DB], NFC: [0xB0DB], NFD: [0x1102, 0x1163, 0x11B2], NFKC: [0xB0DB], NFKD: [0x1102, 0x1163, 0x11B2] }, +{ source: [0xB0DC], NFC: [0xB0DC], NFD: [0x1102, 0x1163, 0x11B3], NFKC: [0xB0DC], NFKD: [0x1102, 0x1163, 0x11B3] }, +{ source: [0xB0DD], NFC: [0xB0DD], NFD: [0x1102, 0x1163, 0x11B4], NFKC: [0xB0DD], NFKD: [0x1102, 0x1163, 0x11B4] }, +{ source: [0xB0DE], NFC: [0xB0DE], NFD: [0x1102, 0x1163, 0x11B5], NFKC: [0xB0DE], NFKD: [0x1102, 0x1163, 0x11B5] }, +{ source: [0xB0DF], NFC: [0xB0DF], NFD: [0x1102, 0x1163, 0x11B6], NFKC: [0xB0DF], NFKD: [0x1102, 0x1163, 0x11B6] }, +{ source: [0xB0E0], NFC: [0xB0E0], NFD: [0x1102, 0x1163, 0x11B7], NFKC: [0xB0E0], NFKD: [0x1102, 0x1163, 0x11B7] }, +{ source: [0xB0E1], NFC: [0xB0E1], NFD: [0x1102, 0x1163, 0x11B8], NFKC: [0xB0E1], NFKD: [0x1102, 0x1163, 0x11B8] }, +{ source: [0xB0E2], NFC: [0xB0E2], NFD: [0x1102, 0x1163, 0x11B9], NFKC: [0xB0E2], NFKD: [0x1102, 0x1163, 0x11B9] }, +{ source: [0xB0E3], NFC: [0xB0E3], NFD: [0x1102, 0x1163, 0x11BA], NFKC: [0xB0E3], NFKD: [0x1102, 0x1163, 0x11BA] }, +{ source: [0xB0E4], NFC: [0xB0E4], NFD: [0x1102, 0x1163, 0x11BB], NFKC: [0xB0E4], NFKD: [0x1102, 0x1163, 0x11BB] }, +{ source: [0xB0E5], NFC: [0xB0E5], NFD: [0x1102, 0x1163, 0x11BC], NFKC: [0xB0E5], NFKD: [0x1102, 0x1163, 0x11BC] }, +{ source: [0xB0E6], NFC: [0xB0E6], NFD: [0x1102, 0x1163, 0x11BD], NFKC: [0xB0E6], NFKD: [0x1102, 0x1163, 0x11BD] }, +{ source: [0xB0E7], NFC: [0xB0E7], NFD: [0x1102, 0x1163, 0x11BE], NFKC: [0xB0E7], NFKD: [0x1102, 0x1163, 0x11BE] }, +{ source: [0xB0E8], NFC: [0xB0E8], NFD: [0x1102, 0x1163, 0x11BF], NFKC: [0xB0E8], NFKD: [0x1102, 0x1163, 0x11BF] }, +{ source: [0xB0E9], NFC: [0xB0E9], NFD: [0x1102, 0x1163, 0x11C0], NFKC: [0xB0E9], NFKD: [0x1102, 0x1163, 0x11C0] }, +{ source: [0xB0EA], NFC: [0xB0EA], NFD: [0x1102, 0x1163, 0x11C1], NFKC: [0xB0EA], NFKD: [0x1102, 0x1163, 0x11C1] }, +{ source: [0xB0EB], NFC: [0xB0EB], NFD: [0x1102, 0x1163, 0x11C2], NFKC: [0xB0EB], NFKD: [0x1102, 0x1163, 0x11C2] }, +{ source: [0xB0EC], NFC: [0xB0EC], NFD: [0x1102, 0x1164], NFKC: [0xB0EC], NFKD: [0x1102, 0x1164] }, +{ source: [0xB0ED], NFC: [0xB0ED], NFD: [0x1102, 0x1164, 0x11A8], NFKC: [0xB0ED], NFKD: [0x1102, 0x1164, 0x11A8] }, +{ source: [0xB0EE], NFC: [0xB0EE], NFD: [0x1102, 0x1164, 0x11A9], NFKC: [0xB0EE], NFKD: [0x1102, 0x1164, 0x11A9] }, +{ source: [0xB0EF], NFC: [0xB0EF], NFD: [0x1102, 0x1164, 0x11AA], NFKC: [0xB0EF], NFKD: [0x1102, 0x1164, 0x11AA] }, +{ source: [0xB0F0], NFC: [0xB0F0], NFD: [0x1102, 0x1164, 0x11AB], NFKC: [0xB0F0], NFKD: [0x1102, 0x1164, 0x11AB] }, +{ source: [0xB0F1], NFC: [0xB0F1], NFD: [0x1102, 0x1164, 0x11AC], NFKC: [0xB0F1], NFKD: [0x1102, 0x1164, 0x11AC] }, +{ source: [0xB0F2], NFC: [0xB0F2], NFD: [0x1102, 0x1164, 0x11AD], NFKC: [0xB0F2], NFKD: [0x1102, 0x1164, 0x11AD] }, +{ source: [0xB0F3], NFC: [0xB0F3], NFD: [0x1102, 0x1164, 0x11AE], NFKC: [0xB0F3], NFKD: [0x1102, 0x1164, 0x11AE] }, +{ source: [0xB0F4], NFC: [0xB0F4], NFD: [0x1102, 0x1164, 0x11AF], NFKC: [0xB0F4], NFKD: [0x1102, 0x1164, 0x11AF] }, +{ source: [0xB0F5], NFC: [0xB0F5], NFD: [0x1102, 0x1164, 0x11B0], NFKC: [0xB0F5], NFKD: [0x1102, 0x1164, 0x11B0] }, +{ source: [0xB0F6], NFC: [0xB0F6], NFD: [0x1102, 0x1164, 0x11B1], NFKC: [0xB0F6], NFKD: [0x1102, 0x1164, 0x11B1] }, +{ source: [0xB0F7], NFC: [0xB0F7], NFD: [0x1102, 0x1164, 0x11B2], NFKC: [0xB0F7], NFKD: [0x1102, 0x1164, 0x11B2] }, +{ source: [0xB0F8], NFC: [0xB0F8], NFD: [0x1102, 0x1164, 0x11B3], NFKC: [0xB0F8], NFKD: [0x1102, 0x1164, 0x11B3] }, +{ source: [0xB0F9], NFC: [0xB0F9], NFD: [0x1102, 0x1164, 0x11B4], NFKC: [0xB0F9], NFKD: [0x1102, 0x1164, 0x11B4] }, +{ source: [0xB0FA], NFC: [0xB0FA], NFD: [0x1102, 0x1164, 0x11B5], NFKC: [0xB0FA], NFKD: [0x1102, 0x1164, 0x11B5] }, +{ source: [0xB0FB], NFC: [0xB0FB], NFD: [0x1102, 0x1164, 0x11B6], NFKC: [0xB0FB], NFKD: [0x1102, 0x1164, 0x11B6] }, +{ source: [0xB0FC], NFC: [0xB0FC], NFD: [0x1102, 0x1164, 0x11B7], NFKC: [0xB0FC], NFKD: [0x1102, 0x1164, 0x11B7] }, +{ source: [0xB0FD], NFC: [0xB0FD], NFD: [0x1102, 0x1164, 0x11B8], NFKC: [0xB0FD], NFKD: [0x1102, 0x1164, 0x11B8] }, +{ source: [0xB0FE], NFC: [0xB0FE], NFD: [0x1102, 0x1164, 0x11B9], NFKC: [0xB0FE], NFKD: [0x1102, 0x1164, 0x11B9] }, +{ source: [0xB0FF], NFC: [0xB0FF], NFD: [0x1102, 0x1164, 0x11BA], NFKC: [0xB0FF], NFKD: [0x1102, 0x1164, 0x11BA] }, +{ source: [0xB100], NFC: [0xB100], NFD: [0x1102, 0x1164, 0x11BB], NFKC: [0xB100], NFKD: [0x1102, 0x1164, 0x11BB] }, +{ source: [0xB101], NFC: [0xB101], NFD: [0x1102, 0x1164, 0x11BC], NFKC: [0xB101], NFKD: [0x1102, 0x1164, 0x11BC] }, +{ source: [0xB102], NFC: [0xB102], NFD: [0x1102, 0x1164, 0x11BD], NFKC: [0xB102], NFKD: [0x1102, 0x1164, 0x11BD] }, +{ source: [0xB103], NFC: [0xB103], NFD: [0x1102, 0x1164, 0x11BE], NFKC: [0xB103], NFKD: [0x1102, 0x1164, 0x11BE] }, +{ source: [0xB104], NFC: [0xB104], NFD: [0x1102, 0x1164, 0x11BF], NFKC: [0xB104], NFKD: [0x1102, 0x1164, 0x11BF] }, +{ source: [0xB105], NFC: [0xB105], NFD: [0x1102, 0x1164, 0x11C0], NFKC: [0xB105], NFKD: [0x1102, 0x1164, 0x11C0] }, +{ source: [0xB106], NFC: [0xB106], NFD: [0x1102, 0x1164, 0x11C1], NFKC: [0xB106], NFKD: [0x1102, 0x1164, 0x11C1] }, +{ source: [0xB107], NFC: [0xB107], NFD: [0x1102, 0x1164, 0x11C2], NFKC: [0xB107], NFKD: [0x1102, 0x1164, 0x11C2] }, +{ source: [0xB108], NFC: [0xB108], NFD: [0x1102, 0x1165], NFKC: [0xB108], NFKD: [0x1102, 0x1165] }, +{ source: [0xB109], NFC: [0xB109], NFD: [0x1102, 0x1165, 0x11A8], NFKC: [0xB109], NFKD: [0x1102, 0x1165, 0x11A8] }, +{ source: [0xB10A], NFC: [0xB10A], NFD: [0x1102, 0x1165, 0x11A9], NFKC: [0xB10A], NFKD: [0x1102, 0x1165, 0x11A9] }, +{ source: [0xB10B], NFC: [0xB10B], NFD: [0x1102, 0x1165, 0x11AA], NFKC: [0xB10B], NFKD: [0x1102, 0x1165, 0x11AA] }, +{ source: [0xB10C], NFC: [0xB10C], NFD: [0x1102, 0x1165, 0x11AB], NFKC: [0xB10C], NFKD: [0x1102, 0x1165, 0x11AB] }, +{ source: [0xB10D], NFC: [0xB10D], NFD: [0x1102, 0x1165, 0x11AC], NFKC: [0xB10D], NFKD: [0x1102, 0x1165, 0x11AC] }, +{ source: [0xB10E], NFC: [0xB10E], NFD: [0x1102, 0x1165, 0x11AD], NFKC: [0xB10E], NFKD: [0x1102, 0x1165, 0x11AD] }, +{ source: [0xB10F], NFC: [0xB10F], NFD: [0x1102, 0x1165, 0x11AE], NFKC: [0xB10F], NFKD: [0x1102, 0x1165, 0x11AE] }, +{ source: [0xB110], NFC: [0xB110], NFD: [0x1102, 0x1165, 0x11AF], NFKC: [0xB110], NFKD: [0x1102, 0x1165, 0x11AF] }, +{ source: [0xB111], NFC: [0xB111], NFD: [0x1102, 0x1165, 0x11B0], NFKC: [0xB111], NFKD: [0x1102, 0x1165, 0x11B0] }, +{ source: [0xB112], NFC: [0xB112], NFD: [0x1102, 0x1165, 0x11B1], NFKC: [0xB112], NFKD: [0x1102, 0x1165, 0x11B1] }, +{ source: [0xB113], NFC: [0xB113], NFD: [0x1102, 0x1165, 0x11B2], NFKC: [0xB113], NFKD: [0x1102, 0x1165, 0x11B2] }, +{ source: [0xB114], NFC: [0xB114], NFD: [0x1102, 0x1165, 0x11B3], NFKC: [0xB114], NFKD: [0x1102, 0x1165, 0x11B3] }, +{ source: [0xB115], NFC: [0xB115], NFD: [0x1102, 0x1165, 0x11B4], NFKC: [0xB115], NFKD: [0x1102, 0x1165, 0x11B4] }, +{ source: [0xB116], NFC: [0xB116], NFD: [0x1102, 0x1165, 0x11B5], NFKC: [0xB116], NFKD: [0x1102, 0x1165, 0x11B5] }, +{ source: [0xB117], NFC: [0xB117], NFD: [0x1102, 0x1165, 0x11B6], NFKC: [0xB117], NFKD: [0x1102, 0x1165, 0x11B6] }, +{ source: [0xB118], NFC: [0xB118], NFD: [0x1102, 0x1165, 0x11B7], NFKC: [0xB118], NFKD: [0x1102, 0x1165, 0x11B7] }, +{ source: [0xB119], NFC: [0xB119], NFD: [0x1102, 0x1165, 0x11B8], NFKC: [0xB119], NFKD: [0x1102, 0x1165, 0x11B8] }, +{ source: [0xB11A], NFC: [0xB11A], NFD: [0x1102, 0x1165, 0x11B9], NFKC: [0xB11A], NFKD: [0x1102, 0x1165, 0x11B9] }, +{ source: [0xB11B], NFC: [0xB11B], NFD: [0x1102, 0x1165, 0x11BA], NFKC: [0xB11B], NFKD: [0x1102, 0x1165, 0x11BA] }, +{ source: [0xB11C], NFC: [0xB11C], NFD: [0x1102, 0x1165, 0x11BB], NFKC: [0xB11C], NFKD: [0x1102, 0x1165, 0x11BB] }, +{ source: [0xB11D], NFC: [0xB11D], NFD: [0x1102, 0x1165, 0x11BC], NFKC: [0xB11D], NFKD: [0x1102, 0x1165, 0x11BC] }, +{ source: [0xB11E], NFC: [0xB11E], NFD: [0x1102, 0x1165, 0x11BD], NFKC: [0xB11E], NFKD: [0x1102, 0x1165, 0x11BD] }, +{ source: [0xB11F], NFC: [0xB11F], NFD: [0x1102, 0x1165, 0x11BE], NFKC: [0xB11F], NFKD: [0x1102, 0x1165, 0x11BE] }, +{ source: [0xB120], NFC: [0xB120], NFD: [0x1102, 0x1165, 0x11BF], NFKC: [0xB120], NFKD: [0x1102, 0x1165, 0x11BF] }, +{ source: [0xB121], NFC: [0xB121], NFD: [0x1102, 0x1165, 0x11C0], NFKC: [0xB121], NFKD: [0x1102, 0x1165, 0x11C0] }, +{ source: [0xB122], NFC: [0xB122], NFD: [0x1102, 0x1165, 0x11C1], NFKC: [0xB122], NFKD: [0x1102, 0x1165, 0x11C1] }, +{ source: [0xB123], NFC: [0xB123], NFD: [0x1102, 0x1165, 0x11C2], NFKC: [0xB123], NFKD: [0x1102, 0x1165, 0x11C2] }, +{ source: [0xB124], NFC: [0xB124], NFD: [0x1102, 0x1166], NFKC: [0xB124], NFKD: [0x1102, 0x1166] }, +{ source: [0xB125], NFC: [0xB125], NFD: [0x1102, 0x1166, 0x11A8], NFKC: [0xB125], NFKD: [0x1102, 0x1166, 0x11A8] }, +{ source: [0xB126], NFC: [0xB126], NFD: [0x1102, 0x1166, 0x11A9], NFKC: [0xB126], NFKD: [0x1102, 0x1166, 0x11A9] }, +{ source: [0xB127], NFC: [0xB127], NFD: [0x1102, 0x1166, 0x11AA], NFKC: [0xB127], NFKD: [0x1102, 0x1166, 0x11AA] }, +{ source: [0xB128], NFC: [0xB128], NFD: [0x1102, 0x1166, 0x11AB], NFKC: [0xB128], NFKD: [0x1102, 0x1166, 0x11AB] }, +{ source: [0xB129], NFC: [0xB129], NFD: [0x1102, 0x1166, 0x11AC], NFKC: [0xB129], NFKD: [0x1102, 0x1166, 0x11AC] }, +{ source: [0xB12A], NFC: [0xB12A], NFD: [0x1102, 0x1166, 0x11AD], NFKC: [0xB12A], NFKD: [0x1102, 0x1166, 0x11AD] }, +{ source: [0xB12B], NFC: [0xB12B], NFD: [0x1102, 0x1166, 0x11AE], NFKC: [0xB12B], NFKD: [0x1102, 0x1166, 0x11AE] }, +{ source: [0xB12C], NFC: [0xB12C], NFD: [0x1102, 0x1166, 0x11AF], NFKC: [0xB12C], NFKD: [0x1102, 0x1166, 0x11AF] }, +{ source: [0xB12D], NFC: [0xB12D], NFD: [0x1102, 0x1166, 0x11B0], NFKC: [0xB12D], NFKD: [0x1102, 0x1166, 0x11B0] }, +{ source: [0xB12E], NFC: [0xB12E], NFD: [0x1102, 0x1166, 0x11B1], NFKC: [0xB12E], NFKD: [0x1102, 0x1166, 0x11B1] }, +{ source: [0xB12F], NFC: [0xB12F], NFD: [0x1102, 0x1166, 0x11B2], NFKC: [0xB12F], NFKD: [0x1102, 0x1166, 0x11B2] }, +{ source: [0xB130], NFC: [0xB130], NFD: [0x1102, 0x1166, 0x11B3], NFKC: [0xB130], NFKD: [0x1102, 0x1166, 0x11B3] }, +{ source: [0xB131], NFC: [0xB131], NFD: [0x1102, 0x1166, 0x11B4], NFKC: [0xB131], NFKD: [0x1102, 0x1166, 0x11B4] }, +{ source: [0xB132], NFC: [0xB132], NFD: [0x1102, 0x1166, 0x11B5], NFKC: [0xB132], NFKD: [0x1102, 0x1166, 0x11B5] }, +{ source: [0xB133], NFC: [0xB133], NFD: [0x1102, 0x1166, 0x11B6], NFKC: [0xB133], NFKD: [0x1102, 0x1166, 0x11B6] }, +{ source: [0xB134], NFC: [0xB134], NFD: [0x1102, 0x1166, 0x11B7], NFKC: [0xB134], NFKD: [0x1102, 0x1166, 0x11B7] }, +{ source: [0xB135], NFC: [0xB135], NFD: [0x1102, 0x1166, 0x11B8], NFKC: [0xB135], NFKD: [0x1102, 0x1166, 0x11B8] }, +{ source: [0xB136], NFC: [0xB136], NFD: [0x1102, 0x1166, 0x11B9], NFKC: [0xB136], NFKD: [0x1102, 0x1166, 0x11B9] }, +{ source: [0xB137], NFC: [0xB137], NFD: [0x1102, 0x1166, 0x11BA], NFKC: [0xB137], NFKD: [0x1102, 0x1166, 0x11BA] }, +{ source: [0xB138], NFC: [0xB138], NFD: [0x1102, 0x1166, 0x11BB], NFKC: [0xB138], NFKD: [0x1102, 0x1166, 0x11BB] }, +{ source: [0xB139], NFC: [0xB139], NFD: [0x1102, 0x1166, 0x11BC], NFKC: [0xB139], NFKD: [0x1102, 0x1166, 0x11BC] }, +{ source: [0xB13A], NFC: [0xB13A], NFD: [0x1102, 0x1166, 0x11BD], NFKC: [0xB13A], NFKD: [0x1102, 0x1166, 0x11BD] }, +{ source: [0xB13B], NFC: [0xB13B], NFD: [0x1102, 0x1166, 0x11BE], NFKC: [0xB13B], NFKD: [0x1102, 0x1166, 0x11BE] }, +{ source: [0xB13C], NFC: [0xB13C], NFD: [0x1102, 0x1166, 0x11BF], NFKC: [0xB13C], NFKD: [0x1102, 0x1166, 0x11BF] }, +{ source: [0xB13D], NFC: [0xB13D], NFD: [0x1102, 0x1166, 0x11C0], NFKC: [0xB13D], NFKD: [0x1102, 0x1166, 0x11C0] }, +{ source: [0xB13E], NFC: [0xB13E], NFD: [0x1102, 0x1166, 0x11C1], NFKC: [0xB13E], NFKD: [0x1102, 0x1166, 0x11C1] }, +{ source: [0xB13F], NFC: [0xB13F], NFD: [0x1102, 0x1166, 0x11C2], NFKC: [0xB13F], NFKD: [0x1102, 0x1166, 0x11C2] }, +{ source: [0xB140], NFC: [0xB140], NFD: [0x1102, 0x1167], NFKC: [0xB140], NFKD: [0x1102, 0x1167] }, +{ source: [0xB141], NFC: [0xB141], NFD: [0x1102, 0x1167, 0x11A8], NFKC: [0xB141], NFKD: [0x1102, 0x1167, 0x11A8] }, +{ source: [0xB142], NFC: [0xB142], NFD: [0x1102, 0x1167, 0x11A9], NFKC: [0xB142], NFKD: [0x1102, 0x1167, 0x11A9] }, +{ source: [0xB143], NFC: [0xB143], NFD: [0x1102, 0x1167, 0x11AA], NFKC: [0xB143], NFKD: [0x1102, 0x1167, 0x11AA] }, +{ source: [0xB144], NFC: [0xB144], NFD: [0x1102, 0x1167, 0x11AB], NFKC: [0xB144], NFKD: [0x1102, 0x1167, 0x11AB] }, +{ source: [0xB145], NFC: [0xB145], NFD: [0x1102, 0x1167, 0x11AC], NFKC: [0xB145], NFKD: [0x1102, 0x1167, 0x11AC] }, +{ source: [0xB146], NFC: [0xB146], NFD: [0x1102, 0x1167, 0x11AD], NFKC: [0xB146], NFKD: [0x1102, 0x1167, 0x11AD] }, +{ source: [0xB147], NFC: [0xB147], NFD: [0x1102, 0x1167, 0x11AE], NFKC: [0xB147], NFKD: [0x1102, 0x1167, 0x11AE] }, +{ source: [0xB148], NFC: [0xB148], NFD: [0x1102, 0x1167, 0x11AF], NFKC: [0xB148], NFKD: [0x1102, 0x1167, 0x11AF] }, +{ source: [0xB149], NFC: [0xB149], NFD: [0x1102, 0x1167, 0x11B0], NFKC: [0xB149], NFKD: [0x1102, 0x1167, 0x11B0] }, +{ source: [0xB14A], NFC: [0xB14A], NFD: [0x1102, 0x1167, 0x11B1], NFKC: [0xB14A], NFKD: [0x1102, 0x1167, 0x11B1] }, +{ source: [0xB14B], NFC: [0xB14B], NFD: [0x1102, 0x1167, 0x11B2], NFKC: [0xB14B], NFKD: [0x1102, 0x1167, 0x11B2] }, +{ source: [0xB14C], NFC: [0xB14C], NFD: [0x1102, 0x1167, 0x11B3], NFKC: [0xB14C], NFKD: [0x1102, 0x1167, 0x11B3] }, +{ source: [0xB14D], NFC: [0xB14D], NFD: [0x1102, 0x1167, 0x11B4], NFKC: [0xB14D], NFKD: [0x1102, 0x1167, 0x11B4] }, +{ source: [0xB14E], NFC: [0xB14E], NFD: [0x1102, 0x1167, 0x11B5], NFKC: [0xB14E], NFKD: [0x1102, 0x1167, 0x11B5] }, +{ source: [0xB14F], NFC: [0xB14F], NFD: [0x1102, 0x1167, 0x11B6], NFKC: [0xB14F], NFKD: [0x1102, 0x1167, 0x11B6] }, +{ source: [0xB150], NFC: [0xB150], NFD: [0x1102, 0x1167, 0x11B7], NFKC: [0xB150], NFKD: [0x1102, 0x1167, 0x11B7] }, +{ source: [0xB151], NFC: [0xB151], NFD: [0x1102, 0x1167, 0x11B8], NFKC: [0xB151], NFKD: [0x1102, 0x1167, 0x11B8] }, +{ source: [0xB152], NFC: [0xB152], NFD: [0x1102, 0x1167, 0x11B9], NFKC: [0xB152], NFKD: [0x1102, 0x1167, 0x11B9] }, +{ source: [0xB153], NFC: [0xB153], NFD: [0x1102, 0x1167, 0x11BA], NFKC: [0xB153], NFKD: [0x1102, 0x1167, 0x11BA] }, +{ source: [0xB154], NFC: [0xB154], NFD: [0x1102, 0x1167, 0x11BB], NFKC: [0xB154], NFKD: [0x1102, 0x1167, 0x11BB] }, +{ source: [0xB155], NFC: [0xB155], NFD: [0x1102, 0x1167, 0x11BC], NFKC: [0xB155], NFKD: [0x1102, 0x1167, 0x11BC] }, +{ source: [0xB156], NFC: [0xB156], NFD: [0x1102, 0x1167, 0x11BD], NFKC: [0xB156], NFKD: [0x1102, 0x1167, 0x11BD] }, +{ source: [0xB157], NFC: [0xB157], NFD: [0x1102, 0x1167, 0x11BE], NFKC: [0xB157], NFKD: [0x1102, 0x1167, 0x11BE] }, +{ source: [0xB158], NFC: [0xB158], NFD: [0x1102, 0x1167, 0x11BF], NFKC: [0xB158], NFKD: [0x1102, 0x1167, 0x11BF] }, +{ source: [0xB159], NFC: [0xB159], NFD: [0x1102, 0x1167, 0x11C0], NFKC: [0xB159], NFKD: [0x1102, 0x1167, 0x11C0] }, +{ source: [0xB15A], NFC: [0xB15A], NFD: [0x1102, 0x1167, 0x11C1], NFKC: [0xB15A], NFKD: [0x1102, 0x1167, 0x11C1] }, +{ source: [0xB15B], NFC: [0xB15B], NFD: [0x1102, 0x1167, 0x11C2], NFKC: [0xB15B], NFKD: [0x1102, 0x1167, 0x11C2] }, +{ source: [0xB15C], NFC: [0xB15C], NFD: [0x1102, 0x1168], NFKC: [0xB15C], NFKD: [0x1102, 0x1168] }, +{ source: [0xB15D], NFC: [0xB15D], NFD: [0x1102, 0x1168, 0x11A8], NFKC: [0xB15D], NFKD: [0x1102, 0x1168, 0x11A8] }, +{ source: [0xB15E], NFC: [0xB15E], NFD: [0x1102, 0x1168, 0x11A9], NFKC: [0xB15E], NFKD: [0x1102, 0x1168, 0x11A9] }, +{ source: [0xB15F], NFC: [0xB15F], NFD: [0x1102, 0x1168, 0x11AA], NFKC: [0xB15F], NFKD: [0x1102, 0x1168, 0x11AA] }, +{ source: [0xB160], NFC: [0xB160], NFD: [0x1102, 0x1168, 0x11AB], NFKC: [0xB160], NFKD: [0x1102, 0x1168, 0x11AB] }, +{ source: [0xB161], NFC: [0xB161], NFD: [0x1102, 0x1168, 0x11AC], NFKC: [0xB161], NFKD: [0x1102, 0x1168, 0x11AC] }, +{ source: [0xB162], NFC: [0xB162], NFD: [0x1102, 0x1168, 0x11AD], NFKC: [0xB162], NFKD: [0x1102, 0x1168, 0x11AD] }, +{ source: [0xB163], NFC: [0xB163], NFD: [0x1102, 0x1168, 0x11AE], NFKC: [0xB163], NFKD: [0x1102, 0x1168, 0x11AE] }, +{ source: [0xB164], NFC: [0xB164], NFD: [0x1102, 0x1168, 0x11AF], NFKC: [0xB164], NFKD: [0x1102, 0x1168, 0x11AF] }, +{ source: [0xB165], NFC: [0xB165], NFD: [0x1102, 0x1168, 0x11B0], NFKC: [0xB165], NFKD: [0x1102, 0x1168, 0x11B0] }, +{ source: [0xB166], NFC: [0xB166], NFD: [0x1102, 0x1168, 0x11B1], NFKC: [0xB166], NFKD: [0x1102, 0x1168, 0x11B1] }, +{ source: [0xB167], NFC: [0xB167], NFD: [0x1102, 0x1168, 0x11B2], NFKC: [0xB167], NFKD: [0x1102, 0x1168, 0x11B2] }, +{ source: [0xB168], NFC: [0xB168], NFD: [0x1102, 0x1168, 0x11B3], NFKC: [0xB168], NFKD: [0x1102, 0x1168, 0x11B3] }, +{ source: [0xB169], NFC: [0xB169], NFD: [0x1102, 0x1168, 0x11B4], NFKC: [0xB169], NFKD: [0x1102, 0x1168, 0x11B4] }, +{ source: [0xB16A], NFC: [0xB16A], NFD: [0x1102, 0x1168, 0x11B5], NFKC: [0xB16A], NFKD: [0x1102, 0x1168, 0x11B5] }, +{ source: [0xB16B], NFC: [0xB16B], NFD: [0x1102, 0x1168, 0x11B6], NFKC: [0xB16B], NFKD: [0x1102, 0x1168, 0x11B6] }, +{ source: [0xB16C], NFC: [0xB16C], NFD: [0x1102, 0x1168, 0x11B7], NFKC: [0xB16C], NFKD: [0x1102, 0x1168, 0x11B7] }, +{ source: [0xB16D], NFC: [0xB16D], NFD: [0x1102, 0x1168, 0x11B8], NFKC: [0xB16D], NFKD: [0x1102, 0x1168, 0x11B8] }, +{ source: [0xB16E], NFC: [0xB16E], NFD: [0x1102, 0x1168, 0x11B9], NFKC: [0xB16E], NFKD: [0x1102, 0x1168, 0x11B9] }, +{ source: [0xB16F], NFC: [0xB16F], NFD: [0x1102, 0x1168, 0x11BA], NFKC: [0xB16F], NFKD: [0x1102, 0x1168, 0x11BA] }, +{ source: [0xB170], NFC: [0xB170], NFD: [0x1102, 0x1168, 0x11BB], NFKC: [0xB170], NFKD: [0x1102, 0x1168, 0x11BB] }, +{ source: [0xB171], NFC: [0xB171], NFD: [0x1102, 0x1168, 0x11BC], NFKC: [0xB171], NFKD: [0x1102, 0x1168, 0x11BC] }, +{ source: [0xB172], NFC: [0xB172], NFD: [0x1102, 0x1168, 0x11BD], NFKC: [0xB172], NFKD: [0x1102, 0x1168, 0x11BD] }, +{ source: [0xB173], NFC: [0xB173], NFD: [0x1102, 0x1168, 0x11BE], NFKC: [0xB173], NFKD: [0x1102, 0x1168, 0x11BE] }, +{ source: [0xB174], NFC: [0xB174], NFD: [0x1102, 0x1168, 0x11BF], NFKC: [0xB174], NFKD: [0x1102, 0x1168, 0x11BF] }, +{ source: [0xB175], NFC: [0xB175], NFD: [0x1102, 0x1168, 0x11C0], NFKC: [0xB175], NFKD: [0x1102, 0x1168, 0x11C0] }, +{ source: [0xB176], NFC: [0xB176], NFD: [0x1102, 0x1168, 0x11C1], NFKC: [0xB176], NFKD: [0x1102, 0x1168, 0x11C1] }, +{ source: [0xB177], NFC: [0xB177], NFD: [0x1102, 0x1168, 0x11C2], NFKC: [0xB177], NFKD: [0x1102, 0x1168, 0x11C2] }, +{ source: [0xB178], NFC: [0xB178], NFD: [0x1102, 0x1169], NFKC: [0xB178], NFKD: [0x1102, 0x1169] }, +{ source: [0xB179], NFC: [0xB179], NFD: [0x1102, 0x1169, 0x11A8], NFKC: [0xB179], NFKD: [0x1102, 0x1169, 0x11A8] }, +{ source: [0xB17A], NFC: [0xB17A], NFD: [0x1102, 0x1169, 0x11A9], NFKC: [0xB17A], NFKD: [0x1102, 0x1169, 0x11A9] }, +{ source: [0xB17B], NFC: [0xB17B], NFD: [0x1102, 0x1169, 0x11AA], NFKC: [0xB17B], NFKD: [0x1102, 0x1169, 0x11AA] }, +{ source: [0xB17C], NFC: [0xB17C], NFD: [0x1102, 0x1169, 0x11AB], NFKC: [0xB17C], NFKD: [0x1102, 0x1169, 0x11AB] }, +{ source: [0xB17D], NFC: [0xB17D], NFD: [0x1102, 0x1169, 0x11AC], NFKC: [0xB17D], NFKD: [0x1102, 0x1169, 0x11AC] }, +{ source: [0xB17E], NFC: [0xB17E], NFD: [0x1102, 0x1169, 0x11AD], NFKC: [0xB17E], NFKD: [0x1102, 0x1169, 0x11AD] }, +{ source: [0xB17F], NFC: [0xB17F], NFD: [0x1102, 0x1169, 0x11AE], NFKC: [0xB17F], NFKD: [0x1102, 0x1169, 0x11AE] }, +{ source: [0xB180], NFC: [0xB180], NFD: [0x1102, 0x1169, 0x11AF], NFKC: [0xB180], NFKD: [0x1102, 0x1169, 0x11AF] }, +{ source: [0xB181], NFC: [0xB181], NFD: [0x1102, 0x1169, 0x11B0], NFKC: [0xB181], NFKD: [0x1102, 0x1169, 0x11B0] }, +{ source: [0xB182], NFC: [0xB182], NFD: [0x1102, 0x1169, 0x11B1], NFKC: [0xB182], NFKD: [0x1102, 0x1169, 0x11B1] }, +{ source: [0xB183], NFC: [0xB183], NFD: [0x1102, 0x1169, 0x11B2], NFKC: [0xB183], NFKD: [0x1102, 0x1169, 0x11B2] }, +{ source: [0xB184], NFC: [0xB184], NFD: [0x1102, 0x1169, 0x11B3], NFKC: [0xB184], NFKD: [0x1102, 0x1169, 0x11B3] }, +{ source: [0xB185], NFC: [0xB185], NFD: [0x1102, 0x1169, 0x11B4], NFKC: [0xB185], NFKD: [0x1102, 0x1169, 0x11B4] }, +{ source: [0xB186], NFC: [0xB186], NFD: [0x1102, 0x1169, 0x11B5], NFKC: [0xB186], NFKD: [0x1102, 0x1169, 0x11B5] }, +{ source: [0xB187], NFC: [0xB187], NFD: [0x1102, 0x1169, 0x11B6], NFKC: [0xB187], NFKD: [0x1102, 0x1169, 0x11B6] }, +{ source: [0xB188], NFC: [0xB188], NFD: [0x1102, 0x1169, 0x11B7], NFKC: [0xB188], NFKD: [0x1102, 0x1169, 0x11B7] }, +{ source: [0xB189], NFC: [0xB189], NFD: [0x1102, 0x1169, 0x11B8], NFKC: [0xB189], NFKD: [0x1102, 0x1169, 0x11B8] }, +{ source: [0xB18A], NFC: [0xB18A], NFD: [0x1102, 0x1169, 0x11B9], NFKC: [0xB18A], NFKD: [0x1102, 0x1169, 0x11B9] }, +{ source: [0xB18B], NFC: [0xB18B], NFD: [0x1102, 0x1169, 0x11BA], NFKC: [0xB18B], NFKD: [0x1102, 0x1169, 0x11BA] }, +{ source: [0xB18C], NFC: [0xB18C], NFD: [0x1102, 0x1169, 0x11BB], NFKC: [0xB18C], NFKD: [0x1102, 0x1169, 0x11BB] }, +{ source: [0xB18D], NFC: [0xB18D], NFD: [0x1102, 0x1169, 0x11BC], NFKC: [0xB18D], NFKD: [0x1102, 0x1169, 0x11BC] }, +{ source: [0xB18E], NFC: [0xB18E], NFD: [0x1102, 0x1169, 0x11BD], NFKC: [0xB18E], NFKD: [0x1102, 0x1169, 0x11BD] }, +{ source: [0xB18F], NFC: [0xB18F], NFD: [0x1102, 0x1169, 0x11BE], NFKC: [0xB18F], NFKD: [0x1102, 0x1169, 0x11BE] }, +{ source: [0xB190], NFC: [0xB190], NFD: [0x1102, 0x1169, 0x11BF], NFKC: [0xB190], NFKD: [0x1102, 0x1169, 0x11BF] }, +{ source: [0xB191], NFC: [0xB191], NFD: [0x1102, 0x1169, 0x11C0], NFKC: [0xB191], NFKD: [0x1102, 0x1169, 0x11C0] }, +{ source: [0xB192], NFC: [0xB192], NFD: [0x1102, 0x1169, 0x11C1], NFKC: [0xB192], NFKD: [0x1102, 0x1169, 0x11C1] }, +{ source: [0xB193], NFC: [0xB193], NFD: [0x1102, 0x1169, 0x11C2], NFKC: [0xB193], NFKD: [0x1102, 0x1169, 0x11C2] }, +{ source: [0xB194], NFC: [0xB194], NFD: [0x1102, 0x116A], NFKC: [0xB194], NFKD: [0x1102, 0x116A] }, +{ source: [0xB195], NFC: [0xB195], NFD: [0x1102, 0x116A, 0x11A8], NFKC: [0xB195], NFKD: [0x1102, 0x116A, 0x11A8] }, +{ source: [0xB196], NFC: [0xB196], NFD: [0x1102, 0x116A, 0x11A9], NFKC: [0xB196], NFKD: [0x1102, 0x116A, 0x11A9] }, +{ source: [0xB197], NFC: [0xB197], NFD: [0x1102, 0x116A, 0x11AA], NFKC: [0xB197], NFKD: [0x1102, 0x116A, 0x11AA] }, +{ source: [0xB198], NFC: [0xB198], NFD: [0x1102, 0x116A, 0x11AB], NFKC: [0xB198], NFKD: [0x1102, 0x116A, 0x11AB] }, +{ source: [0xB199], NFC: [0xB199], NFD: [0x1102, 0x116A, 0x11AC], NFKC: [0xB199], NFKD: [0x1102, 0x116A, 0x11AC] }, +{ source: [0xB19A], NFC: [0xB19A], NFD: [0x1102, 0x116A, 0x11AD], NFKC: [0xB19A], NFKD: [0x1102, 0x116A, 0x11AD] }, +{ source: [0xB19B], NFC: [0xB19B], NFD: [0x1102, 0x116A, 0x11AE], NFKC: [0xB19B], NFKD: [0x1102, 0x116A, 0x11AE] }, +{ source: [0xB19C], NFC: [0xB19C], NFD: [0x1102, 0x116A, 0x11AF], NFKC: [0xB19C], NFKD: [0x1102, 0x116A, 0x11AF] }, +{ source: [0xB19D], NFC: [0xB19D], NFD: [0x1102, 0x116A, 0x11B0], NFKC: [0xB19D], NFKD: [0x1102, 0x116A, 0x11B0] }, +{ source: [0xB19E], NFC: [0xB19E], NFD: [0x1102, 0x116A, 0x11B1], NFKC: [0xB19E], NFKD: [0x1102, 0x116A, 0x11B1] }, +{ source: [0xB19F], NFC: [0xB19F], NFD: [0x1102, 0x116A, 0x11B2], NFKC: [0xB19F], NFKD: [0x1102, 0x116A, 0x11B2] }, +{ source: [0xB1A0], NFC: [0xB1A0], NFD: [0x1102, 0x116A, 0x11B3], NFKC: [0xB1A0], NFKD: [0x1102, 0x116A, 0x11B3] }, +{ source: [0xB1A1], NFC: [0xB1A1], NFD: [0x1102, 0x116A, 0x11B4], NFKC: [0xB1A1], NFKD: [0x1102, 0x116A, 0x11B4] }, +{ source: [0xB1A2], NFC: [0xB1A2], NFD: [0x1102, 0x116A, 0x11B5], NFKC: [0xB1A2], NFKD: [0x1102, 0x116A, 0x11B5] }, +{ source: [0xB1A3], NFC: [0xB1A3], NFD: [0x1102, 0x116A, 0x11B6], NFKC: [0xB1A3], NFKD: [0x1102, 0x116A, 0x11B6] }, +{ source: [0xB1A4], NFC: [0xB1A4], NFD: [0x1102, 0x116A, 0x11B7], NFKC: [0xB1A4], NFKD: [0x1102, 0x116A, 0x11B7] }, +{ source: [0xB1A5], NFC: [0xB1A5], NFD: [0x1102, 0x116A, 0x11B8], NFKC: [0xB1A5], NFKD: [0x1102, 0x116A, 0x11B8] }, +{ source: [0xB1A6], NFC: [0xB1A6], NFD: [0x1102, 0x116A, 0x11B9], NFKC: [0xB1A6], NFKD: [0x1102, 0x116A, 0x11B9] }, +{ source: [0xB1A7], NFC: [0xB1A7], NFD: [0x1102, 0x116A, 0x11BA], NFKC: [0xB1A7], NFKD: [0x1102, 0x116A, 0x11BA] }, +{ source: [0xB1A8], NFC: [0xB1A8], NFD: [0x1102, 0x116A, 0x11BB], NFKC: [0xB1A8], NFKD: [0x1102, 0x116A, 0x11BB] }, +{ source: [0xB1A9], NFC: [0xB1A9], NFD: [0x1102, 0x116A, 0x11BC], NFKC: [0xB1A9], NFKD: [0x1102, 0x116A, 0x11BC] }, +{ source: [0xB1AA], NFC: [0xB1AA], NFD: [0x1102, 0x116A, 0x11BD], NFKC: [0xB1AA], NFKD: [0x1102, 0x116A, 0x11BD] }, +{ source: [0xB1AB], NFC: [0xB1AB], NFD: [0x1102, 0x116A, 0x11BE], NFKC: [0xB1AB], NFKD: [0x1102, 0x116A, 0x11BE] }, +{ source: [0xB1AC], NFC: [0xB1AC], NFD: [0x1102, 0x116A, 0x11BF], NFKC: [0xB1AC], NFKD: [0x1102, 0x116A, 0x11BF] }, +{ source: [0xB1AD], NFC: [0xB1AD], NFD: [0x1102, 0x116A, 0x11C0], NFKC: [0xB1AD], NFKD: [0x1102, 0x116A, 0x11C0] }, +{ source: [0xB1AE], NFC: [0xB1AE], NFD: [0x1102, 0x116A, 0x11C1], NFKC: [0xB1AE], NFKD: [0x1102, 0x116A, 0x11C1] }, +{ source: [0xB1AF], NFC: [0xB1AF], NFD: [0x1102, 0x116A, 0x11C2], NFKC: [0xB1AF], NFKD: [0x1102, 0x116A, 0x11C2] }, +{ source: [0xB1B0], NFC: [0xB1B0], NFD: [0x1102, 0x116B], NFKC: [0xB1B0], NFKD: [0x1102, 0x116B] }, +{ source: [0xB1B1], NFC: [0xB1B1], NFD: [0x1102, 0x116B, 0x11A8], NFKC: [0xB1B1], NFKD: [0x1102, 0x116B, 0x11A8] }, +{ source: [0xB1B2], NFC: [0xB1B2], NFD: [0x1102, 0x116B, 0x11A9], NFKC: [0xB1B2], NFKD: [0x1102, 0x116B, 0x11A9] }, +{ source: [0xB1B3], NFC: [0xB1B3], NFD: [0x1102, 0x116B, 0x11AA], NFKC: [0xB1B3], NFKD: [0x1102, 0x116B, 0x11AA] }, +{ source: [0xB1B4], NFC: [0xB1B4], NFD: [0x1102, 0x116B, 0x11AB], NFKC: [0xB1B4], NFKD: [0x1102, 0x116B, 0x11AB] }, +{ source: [0xB1B5], NFC: [0xB1B5], NFD: [0x1102, 0x116B, 0x11AC], NFKC: [0xB1B5], NFKD: [0x1102, 0x116B, 0x11AC] }, +{ source: [0xB1B6], NFC: [0xB1B6], NFD: [0x1102, 0x116B, 0x11AD], NFKC: [0xB1B6], NFKD: [0x1102, 0x116B, 0x11AD] }, +{ source: [0xB1B7], NFC: [0xB1B7], NFD: [0x1102, 0x116B, 0x11AE], NFKC: [0xB1B7], NFKD: [0x1102, 0x116B, 0x11AE] }, +{ source: [0xB1B8], NFC: [0xB1B8], NFD: [0x1102, 0x116B, 0x11AF], NFKC: [0xB1B8], NFKD: [0x1102, 0x116B, 0x11AF] }, +{ source: [0xB1B9], NFC: [0xB1B9], NFD: [0x1102, 0x116B, 0x11B0], NFKC: [0xB1B9], NFKD: [0x1102, 0x116B, 0x11B0] }, +{ source: [0xB1BA], NFC: [0xB1BA], NFD: [0x1102, 0x116B, 0x11B1], NFKC: [0xB1BA], NFKD: [0x1102, 0x116B, 0x11B1] }, +{ source: [0xB1BB], NFC: [0xB1BB], NFD: [0x1102, 0x116B, 0x11B2], NFKC: [0xB1BB], NFKD: [0x1102, 0x116B, 0x11B2] }, +{ source: [0xB1BC], NFC: [0xB1BC], NFD: [0x1102, 0x116B, 0x11B3], NFKC: [0xB1BC], NFKD: [0x1102, 0x116B, 0x11B3] }, +{ source: [0xB1BD], NFC: [0xB1BD], NFD: [0x1102, 0x116B, 0x11B4], NFKC: [0xB1BD], NFKD: [0x1102, 0x116B, 0x11B4] }, +{ source: [0xB1BE], NFC: [0xB1BE], NFD: [0x1102, 0x116B, 0x11B5], NFKC: [0xB1BE], NFKD: [0x1102, 0x116B, 0x11B5] }, +{ source: [0xB1BF], NFC: [0xB1BF], NFD: [0x1102, 0x116B, 0x11B6], NFKC: [0xB1BF], NFKD: [0x1102, 0x116B, 0x11B6] }, +{ source: [0xB1C0], NFC: [0xB1C0], NFD: [0x1102, 0x116B, 0x11B7], NFKC: [0xB1C0], NFKD: [0x1102, 0x116B, 0x11B7] }, +{ source: [0xB1C1], NFC: [0xB1C1], NFD: [0x1102, 0x116B, 0x11B8], NFKC: [0xB1C1], NFKD: [0x1102, 0x116B, 0x11B8] }, +{ source: [0xB1C2], NFC: [0xB1C2], NFD: [0x1102, 0x116B, 0x11B9], NFKC: [0xB1C2], NFKD: [0x1102, 0x116B, 0x11B9] }, +{ source: [0xB1C3], NFC: [0xB1C3], NFD: [0x1102, 0x116B, 0x11BA], NFKC: [0xB1C3], NFKD: [0x1102, 0x116B, 0x11BA] }, +{ source: [0xB1C4], NFC: [0xB1C4], NFD: [0x1102, 0x116B, 0x11BB], NFKC: [0xB1C4], NFKD: [0x1102, 0x116B, 0x11BB] }, +{ source: [0xB1C5], NFC: [0xB1C5], NFD: [0x1102, 0x116B, 0x11BC], NFKC: [0xB1C5], NFKD: [0x1102, 0x116B, 0x11BC] }, +{ source: [0xB1C6], NFC: [0xB1C6], NFD: [0x1102, 0x116B, 0x11BD], NFKC: [0xB1C6], NFKD: [0x1102, 0x116B, 0x11BD] }, +{ source: [0xB1C7], NFC: [0xB1C7], NFD: [0x1102, 0x116B, 0x11BE], NFKC: [0xB1C7], NFKD: [0x1102, 0x116B, 0x11BE] }, +{ source: [0xB1C8], NFC: [0xB1C8], NFD: [0x1102, 0x116B, 0x11BF], NFKC: [0xB1C8], NFKD: [0x1102, 0x116B, 0x11BF] }, +{ source: [0xB1C9], NFC: [0xB1C9], NFD: [0x1102, 0x116B, 0x11C0], NFKC: [0xB1C9], NFKD: [0x1102, 0x116B, 0x11C0] }, +{ source: [0xB1CA], NFC: [0xB1CA], NFD: [0x1102, 0x116B, 0x11C1], NFKC: [0xB1CA], NFKD: [0x1102, 0x116B, 0x11C1] }, +{ source: [0xB1CB], NFC: [0xB1CB], NFD: [0x1102, 0x116B, 0x11C2], NFKC: [0xB1CB], NFKD: [0x1102, 0x116B, 0x11C2] }, +{ source: [0xB1CC], NFC: [0xB1CC], NFD: [0x1102, 0x116C], NFKC: [0xB1CC], NFKD: [0x1102, 0x116C] }, +{ source: [0xB1CD], NFC: [0xB1CD], NFD: [0x1102, 0x116C, 0x11A8], NFKC: [0xB1CD], NFKD: [0x1102, 0x116C, 0x11A8] }, +{ source: [0xB1CE], NFC: [0xB1CE], NFD: [0x1102, 0x116C, 0x11A9], NFKC: [0xB1CE], NFKD: [0x1102, 0x116C, 0x11A9] }, +{ source: [0xB1CF], NFC: [0xB1CF], NFD: [0x1102, 0x116C, 0x11AA], NFKC: [0xB1CF], NFKD: [0x1102, 0x116C, 0x11AA] }, +{ source: [0xB1D0], NFC: [0xB1D0], NFD: [0x1102, 0x116C, 0x11AB], NFKC: [0xB1D0], NFKD: [0x1102, 0x116C, 0x11AB] }, +{ source: [0xB1D1], NFC: [0xB1D1], NFD: [0x1102, 0x116C, 0x11AC], NFKC: [0xB1D1], NFKD: [0x1102, 0x116C, 0x11AC] }, +{ source: [0xB1D2], NFC: [0xB1D2], NFD: [0x1102, 0x116C, 0x11AD], NFKC: [0xB1D2], NFKD: [0x1102, 0x116C, 0x11AD] }, +{ source: [0xB1D3], NFC: [0xB1D3], NFD: [0x1102, 0x116C, 0x11AE], NFKC: [0xB1D3], NFKD: [0x1102, 0x116C, 0x11AE] }, +{ source: [0xB1D4], NFC: [0xB1D4], NFD: [0x1102, 0x116C, 0x11AF], NFKC: [0xB1D4], NFKD: [0x1102, 0x116C, 0x11AF] }, +{ source: [0xB1D5], NFC: [0xB1D5], NFD: [0x1102, 0x116C, 0x11B0], NFKC: [0xB1D5], NFKD: [0x1102, 0x116C, 0x11B0] }, +{ source: [0xB1D6], NFC: [0xB1D6], NFD: [0x1102, 0x116C, 0x11B1], NFKC: [0xB1D6], NFKD: [0x1102, 0x116C, 0x11B1] }, +{ source: [0xB1D7], NFC: [0xB1D7], NFD: [0x1102, 0x116C, 0x11B2], NFKC: [0xB1D7], NFKD: [0x1102, 0x116C, 0x11B2] }, +{ source: [0xB1D8], NFC: [0xB1D8], NFD: [0x1102, 0x116C, 0x11B3], NFKC: [0xB1D8], NFKD: [0x1102, 0x116C, 0x11B3] }, +{ source: [0xB1D9], NFC: [0xB1D9], NFD: [0x1102, 0x116C, 0x11B4], NFKC: [0xB1D9], NFKD: [0x1102, 0x116C, 0x11B4] }, +{ source: [0xB1DA], NFC: [0xB1DA], NFD: [0x1102, 0x116C, 0x11B5], NFKC: [0xB1DA], NFKD: [0x1102, 0x116C, 0x11B5] }, +{ source: [0xB1DB], NFC: [0xB1DB], NFD: [0x1102, 0x116C, 0x11B6], NFKC: [0xB1DB], NFKD: [0x1102, 0x116C, 0x11B6] }, +{ source: [0xB1DC], NFC: [0xB1DC], NFD: [0x1102, 0x116C, 0x11B7], NFKC: [0xB1DC], NFKD: [0x1102, 0x116C, 0x11B7] }, +{ source: [0xB1DD], NFC: [0xB1DD], NFD: [0x1102, 0x116C, 0x11B8], NFKC: [0xB1DD], NFKD: [0x1102, 0x116C, 0x11B8] }, +{ source: [0xB1DE], NFC: [0xB1DE], NFD: [0x1102, 0x116C, 0x11B9], NFKC: [0xB1DE], NFKD: [0x1102, 0x116C, 0x11B9] }, +{ source: [0xB1DF], NFC: [0xB1DF], NFD: [0x1102, 0x116C, 0x11BA], NFKC: [0xB1DF], NFKD: [0x1102, 0x116C, 0x11BA] }, +{ source: [0xB1E0], NFC: [0xB1E0], NFD: [0x1102, 0x116C, 0x11BB], NFKC: [0xB1E0], NFKD: [0x1102, 0x116C, 0x11BB] }, +{ source: [0xB1E1], NFC: [0xB1E1], NFD: [0x1102, 0x116C, 0x11BC], NFKC: [0xB1E1], NFKD: [0x1102, 0x116C, 0x11BC] }, +{ source: [0xB1E2], NFC: [0xB1E2], NFD: [0x1102, 0x116C, 0x11BD], NFKC: [0xB1E2], NFKD: [0x1102, 0x116C, 0x11BD] }, +{ source: [0xB1E3], NFC: [0xB1E3], NFD: [0x1102, 0x116C, 0x11BE], NFKC: [0xB1E3], NFKD: [0x1102, 0x116C, 0x11BE] }, +{ source: [0xB1E4], NFC: [0xB1E4], NFD: [0x1102, 0x116C, 0x11BF], NFKC: [0xB1E4], NFKD: [0x1102, 0x116C, 0x11BF] }, +{ source: [0xB1E5], NFC: [0xB1E5], NFD: [0x1102, 0x116C, 0x11C0], NFKC: [0xB1E5], NFKD: [0x1102, 0x116C, 0x11C0] }, +{ source: [0xB1E6], NFC: [0xB1E6], NFD: [0x1102, 0x116C, 0x11C1], NFKC: [0xB1E6], NFKD: [0x1102, 0x116C, 0x11C1] }, +{ source: [0xB1E7], NFC: [0xB1E7], NFD: [0x1102, 0x116C, 0x11C2], NFKC: [0xB1E7], NFKD: [0x1102, 0x116C, 0x11C2] }, +{ source: [0xB1E8], NFC: [0xB1E8], NFD: [0x1102, 0x116D], NFKC: [0xB1E8], NFKD: [0x1102, 0x116D] }, +{ source: [0xB1E9], NFC: [0xB1E9], NFD: [0x1102, 0x116D, 0x11A8], NFKC: [0xB1E9], NFKD: [0x1102, 0x116D, 0x11A8] }, +{ source: [0xB1EA], NFC: [0xB1EA], NFD: [0x1102, 0x116D, 0x11A9], NFKC: [0xB1EA], NFKD: [0x1102, 0x116D, 0x11A9] }, +{ source: [0xB1EB], NFC: [0xB1EB], NFD: [0x1102, 0x116D, 0x11AA], NFKC: [0xB1EB], NFKD: [0x1102, 0x116D, 0x11AA] }, +{ source: [0xB1EC], NFC: [0xB1EC], NFD: [0x1102, 0x116D, 0x11AB], NFKC: [0xB1EC], NFKD: [0x1102, 0x116D, 0x11AB] }, +{ source: [0xB1ED], NFC: [0xB1ED], NFD: [0x1102, 0x116D, 0x11AC], NFKC: [0xB1ED], NFKD: [0x1102, 0x116D, 0x11AC] }, +{ source: [0xB1EE], NFC: [0xB1EE], NFD: [0x1102, 0x116D, 0x11AD], NFKC: [0xB1EE], NFKD: [0x1102, 0x116D, 0x11AD] }, +{ source: [0xB1EF], NFC: [0xB1EF], NFD: [0x1102, 0x116D, 0x11AE], NFKC: [0xB1EF], NFKD: [0x1102, 0x116D, 0x11AE] }, +{ source: [0xB1F0], NFC: [0xB1F0], NFD: [0x1102, 0x116D, 0x11AF], NFKC: [0xB1F0], NFKD: [0x1102, 0x116D, 0x11AF] }, +{ source: [0xB1F1], NFC: [0xB1F1], NFD: [0x1102, 0x116D, 0x11B0], NFKC: [0xB1F1], NFKD: [0x1102, 0x116D, 0x11B0] }, +{ source: [0xB1F2], NFC: [0xB1F2], NFD: [0x1102, 0x116D, 0x11B1], NFKC: [0xB1F2], NFKD: [0x1102, 0x116D, 0x11B1] }, +{ source: [0xB1F3], NFC: [0xB1F3], NFD: [0x1102, 0x116D, 0x11B2], NFKC: [0xB1F3], NFKD: [0x1102, 0x116D, 0x11B2] }, +{ source: [0xB1F4], NFC: [0xB1F4], NFD: [0x1102, 0x116D, 0x11B3], NFKC: [0xB1F4], NFKD: [0x1102, 0x116D, 0x11B3] }, +{ source: [0xB1F5], NFC: [0xB1F5], NFD: [0x1102, 0x116D, 0x11B4], NFKC: [0xB1F5], NFKD: [0x1102, 0x116D, 0x11B4] }, +{ source: [0xB1F6], NFC: [0xB1F6], NFD: [0x1102, 0x116D, 0x11B5], NFKC: [0xB1F6], NFKD: [0x1102, 0x116D, 0x11B5] }, +{ source: [0xB1F7], NFC: [0xB1F7], NFD: [0x1102, 0x116D, 0x11B6], NFKC: [0xB1F7], NFKD: [0x1102, 0x116D, 0x11B6] }, +{ source: [0xB1F8], NFC: [0xB1F8], NFD: [0x1102, 0x116D, 0x11B7], NFKC: [0xB1F8], NFKD: [0x1102, 0x116D, 0x11B7] }, +{ source: [0xB1F9], NFC: [0xB1F9], NFD: [0x1102, 0x116D, 0x11B8], NFKC: [0xB1F9], NFKD: [0x1102, 0x116D, 0x11B8] }, +{ source: [0xB1FA], NFC: [0xB1FA], NFD: [0x1102, 0x116D, 0x11B9], NFKC: [0xB1FA], NFKD: [0x1102, 0x116D, 0x11B9] }, +{ source: [0xB1FB], NFC: [0xB1FB], NFD: [0x1102, 0x116D, 0x11BA], NFKC: [0xB1FB], NFKD: [0x1102, 0x116D, 0x11BA] }, +{ source: [0xB1FC], NFC: [0xB1FC], NFD: [0x1102, 0x116D, 0x11BB], NFKC: [0xB1FC], NFKD: [0x1102, 0x116D, 0x11BB] }, +{ source: [0xB1FD], NFC: [0xB1FD], NFD: [0x1102, 0x116D, 0x11BC], NFKC: [0xB1FD], NFKD: [0x1102, 0x116D, 0x11BC] }, +{ source: [0xB1FE], NFC: [0xB1FE], NFD: [0x1102, 0x116D, 0x11BD], NFKC: [0xB1FE], NFKD: [0x1102, 0x116D, 0x11BD] }, +{ source: [0xB1FF], NFC: [0xB1FF], NFD: [0x1102, 0x116D, 0x11BE], NFKC: [0xB1FF], NFKD: [0x1102, 0x116D, 0x11BE] }, +{ source: [0xB200], NFC: [0xB200], NFD: [0x1102, 0x116D, 0x11BF], NFKC: [0xB200], NFKD: [0x1102, 0x116D, 0x11BF] }, +{ source: [0xB201], NFC: [0xB201], NFD: [0x1102, 0x116D, 0x11C0], NFKC: [0xB201], NFKD: [0x1102, 0x116D, 0x11C0] }, +{ source: [0xB202], NFC: [0xB202], NFD: [0x1102, 0x116D, 0x11C1], NFKC: [0xB202], NFKD: [0x1102, 0x116D, 0x11C1] }, +{ source: [0xB203], NFC: [0xB203], NFD: [0x1102, 0x116D, 0x11C2], NFKC: [0xB203], NFKD: [0x1102, 0x116D, 0x11C2] }, +{ source: [0xB204], NFC: [0xB204], NFD: [0x1102, 0x116E], NFKC: [0xB204], NFKD: [0x1102, 0x116E] }, +{ source: [0xB205], NFC: [0xB205], NFD: [0x1102, 0x116E, 0x11A8], NFKC: [0xB205], NFKD: [0x1102, 0x116E, 0x11A8] }, +{ source: [0xB206], NFC: [0xB206], NFD: [0x1102, 0x116E, 0x11A9], NFKC: [0xB206], NFKD: [0x1102, 0x116E, 0x11A9] }, +{ source: [0xB207], NFC: [0xB207], NFD: [0x1102, 0x116E, 0x11AA], NFKC: [0xB207], NFKD: [0x1102, 0x116E, 0x11AA] }, +{ source: [0xB208], NFC: [0xB208], NFD: [0x1102, 0x116E, 0x11AB], NFKC: [0xB208], NFKD: [0x1102, 0x116E, 0x11AB] }, +{ source: [0xB209], NFC: [0xB209], NFD: [0x1102, 0x116E, 0x11AC], NFKC: [0xB209], NFKD: [0x1102, 0x116E, 0x11AC] }, +{ source: [0xB20A], NFC: [0xB20A], NFD: [0x1102, 0x116E, 0x11AD], NFKC: [0xB20A], NFKD: [0x1102, 0x116E, 0x11AD] }, +{ source: [0xB20B], NFC: [0xB20B], NFD: [0x1102, 0x116E, 0x11AE], NFKC: [0xB20B], NFKD: [0x1102, 0x116E, 0x11AE] }, +{ source: [0xB20C], NFC: [0xB20C], NFD: [0x1102, 0x116E, 0x11AF], NFKC: [0xB20C], NFKD: [0x1102, 0x116E, 0x11AF] }, +{ source: [0xB20D], NFC: [0xB20D], NFD: [0x1102, 0x116E, 0x11B0], NFKC: [0xB20D], NFKD: [0x1102, 0x116E, 0x11B0] }, +{ source: [0xB20E], NFC: [0xB20E], NFD: [0x1102, 0x116E, 0x11B1], NFKC: [0xB20E], NFKD: [0x1102, 0x116E, 0x11B1] }, +{ source: [0xB20F], NFC: [0xB20F], NFD: [0x1102, 0x116E, 0x11B2], NFKC: [0xB20F], NFKD: [0x1102, 0x116E, 0x11B2] }, +{ source: [0xB210], NFC: [0xB210], NFD: [0x1102, 0x116E, 0x11B3], NFKC: [0xB210], NFKD: [0x1102, 0x116E, 0x11B3] }, +{ source: [0xB211], NFC: [0xB211], NFD: [0x1102, 0x116E, 0x11B4], NFKC: [0xB211], NFKD: [0x1102, 0x116E, 0x11B4] }, +{ source: [0xB212], NFC: [0xB212], NFD: [0x1102, 0x116E, 0x11B5], NFKC: [0xB212], NFKD: [0x1102, 0x116E, 0x11B5] }, +{ source: [0xB213], NFC: [0xB213], NFD: [0x1102, 0x116E, 0x11B6], NFKC: [0xB213], NFKD: [0x1102, 0x116E, 0x11B6] }, +{ source: [0xB214], NFC: [0xB214], NFD: [0x1102, 0x116E, 0x11B7], NFKC: [0xB214], NFKD: [0x1102, 0x116E, 0x11B7] }, +{ source: [0xB215], NFC: [0xB215], NFD: [0x1102, 0x116E, 0x11B8], NFKC: [0xB215], NFKD: [0x1102, 0x116E, 0x11B8] }, +{ source: [0xB216], NFC: [0xB216], NFD: [0x1102, 0x116E, 0x11B9], NFKC: [0xB216], NFKD: [0x1102, 0x116E, 0x11B9] }, +{ source: [0xB217], NFC: [0xB217], NFD: [0x1102, 0x116E, 0x11BA], NFKC: [0xB217], NFKD: [0x1102, 0x116E, 0x11BA] }, +{ source: [0xB218], NFC: [0xB218], NFD: [0x1102, 0x116E, 0x11BB], NFKC: [0xB218], NFKD: [0x1102, 0x116E, 0x11BB] }, +{ source: [0xB219], NFC: [0xB219], NFD: [0x1102, 0x116E, 0x11BC], NFKC: [0xB219], NFKD: [0x1102, 0x116E, 0x11BC] }, +{ source: [0xB21A], NFC: [0xB21A], NFD: [0x1102, 0x116E, 0x11BD], NFKC: [0xB21A], NFKD: [0x1102, 0x116E, 0x11BD] }, +{ source: [0xB21B], NFC: [0xB21B], NFD: [0x1102, 0x116E, 0x11BE], NFKC: [0xB21B], NFKD: [0x1102, 0x116E, 0x11BE] }, +{ source: [0xB21C], NFC: [0xB21C], NFD: [0x1102, 0x116E, 0x11BF], NFKC: [0xB21C], NFKD: [0x1102, 0x116E, 0x11BF] }, +{ source: [0xB21D], NFC: [0xB21D], NFD: [0x1102, 0x116E, 0x11C0], NFKC: [0xB21D], NFKD: [0x1102, 0x116E, 0x11C0] }, +{ source: [0xB21E], NFC: [0xB21E], NFD: [0x1102, 0x116E, 0x11C1], NFKC: [0xB21E], NFKD: [0x1102, 0x116E, 0x11C1] }, +{ source: [0xB21F], NFC: [0xB21F], NFD: [0x1102, 0x116E, 0x11C2], NFKC: [0xB21F], NFKD: [0x1102, 0x116E, 0x11C2] }, +{ source: [0xB220], NFC: [0xB220], NFD: [0x1102, 0x116F], NFKC: [0xB220], NFKD: [0x1102, 0x116F] }, +{ source: [0xB221], NFC: [0xB221], NFD: [0x1102, 0x116F, 0x11A8], NFKC: [0xB221], NFKD: [0x1102, 0x116F, 0x11A8] }, +{ source: [0xB222], NFC: [0xB222], NFD: [0x1102, 0x116F, 0x11A9], NFKC: [0xB222], NFKD: [0x1102, 0x116F, 0x11A9] }, +{ source: [0xB223], NFC: [0xB223], NFD: [0x1102, 0x116F, 0x11AA], NFKC: [0xB223], NFKD: [0x1102, 0x116F, 0x11AA] }, +{ source: [0xB224], NFC: [0xB224], NFD: [0x1102, 0x116F, 0x11AB], NFKC: [0xB224], NFKD: [0x1102, 0x116F, 0x11AB] }, +{ source: [0xB225], NFC: [0xB225], NFD: [0x1102, 0x116F, 0x11AC], NFKC: [0xB225], NFKD: [0x1102, 0x116F, 0x11AC] }, +{ source: [0xB226], NFC: [0xB226], NFD: [0x1102, 0x116F, 0x11AD], NFKC: [0xB226], NFKD: [0x1102, 0x116F, 0x11AD] }, +{ source: [0xB227], NFC: [0xB227], NFD: [0x1102, 0x116F, 0x11AE], NFKC: [0xB227], NFKD: [0x1102, 0x116F, 0x11AE] }, +{ source: [0xB228], NFC: [0xB228], NFD: [0x1102, 0x116F, 0x11AF], NFKC: [0xB228], NFKD: [0x1102, 0x116F, 0x11AF] }, +{ source: [0xB229], NFC: [0xB229], NFD: [0x1102, 0x116F, 0x11B0], NFKC: [0xB229], NFKD: [0x1102, 0x116F, 0x11B0] }, +{ source: [0xB22A], NFC: [0xB22A], NFD: [0x1102, 0x116F, 0x11B1], NFKC: [0xB22A], NFKD: [0x1102, 0x116F, 0x11B1] }, +{ source: [0xB22B], NFC: [0xB22B], NFD: [0x1102, 0x116F, 0x11B2], NFKC: [0xB22B], NFKD: [0x1102, 0x116F, 0x11B2] }, +{ source: [0xB22C], NFC: [0xB22C], NFD: [0x1102, 0x116F, 0x11B3], NFKC: [0xB22C], NFKD: [0x1102, 0x116F, 0x11B3] }, +{ source: [0xB22D], NFC: [0xB22D], NFD: [0x1102, 0x116F, 0x11B4], NFKC: [0xB22D], NFKD: [0x1102, 0x116F, 0x11B4] }, +{ source: [0xB22E], NFC: [0xB22E], NFD: [0x1102, 0x116F, 0x11B5], NFKC: [0xB22E], NFKD: [0x1102, 0x116F, 0x11B5] }, +{ source: [0xB22F], NFC: [0xB22F], NFD: [0x1102, 0x116F, 0x11B6], NFKC: [0xB22F], NFKD: [0x1102, 0x116F, 0x11B6] }, +{ source: [0xB230], NFC: [0xB230], NFD: [0x1102, 0x116F, 0x11B7], NFKC: [0xB230], NFKD: [0x1102, 0x116F, 0x11B7] }, +{ source: [0xB231], NFC: [0xB231], NFD: [0x1102, 0x116F, 0x11B8], NFKC: [0xB231], NFKD: [0x1102, 0x116F, 0x11B8] }, +{ source: [0xB232], NFC: [0xB232], NFD: [0x1102, 0x116F, 0x11B9], NFKC: [0xB232], NFKD: [0x1102, 0x116F, 0x11B9] }, +{ source: [0xB233], NFC: [0xB233], NFD: [0x1102, 0x116F, 0x11BA], NFKC: [0xB233], NFKD: [0x1102, 0x116F, 0x11BA] }, +{ source: [0xB234], NFC: [0xB234], NFD: [0x1102, 0x116F, 0x11BB], NFKC: [0xB234], NFKD: [0x1102, 0x116F, 0x11BB] }, +{ source: [0xB235], NFC: [0xB235], NFD: [0x1102, 0x116F, 0x11BC], NFKC: [0xB235], NFKD: [0x1102, 0x116F, 0x11BC] }, +{ source: [0xB236], NFC: [0xB236], NFD: [0x1102, 0x116F, 0x11BD], NFKC: [0xB236], NFKD: [0x1102, 0x116F, 0x11BD] }, +{ source: [0xB237], NFC: [0xB237], NFD: [0x1102, 0x116F, 0x11BE], NFKC: [0xB237], NFKD: [0x1102, 0x116F, 0x11BE] }, +{ source: [0xB238], NFC: [0xB238], NFD: [0x1102, 0x116F, 0x11BF], NFKC: [0xB238], NFKD: [0x1102, 0x116F, 0x11BF] }, +{ source: [0xB239], NFC: [0xB239], NFD: [0x1102, 0x116F, 0x11C0], NFKC: [0xB239], NFKD: [0x1102, 0x116F, 0x11C0] }, +{ source: [0xB23A], NFC: [0xB23A], NFD: [0x1102, 0x116F, 0x11C1], NFKC: [0xB23A], NFKD: [0x1102, 0x116F, 0x11C1] }, +{ source: [0xB23B], NFC: [0xB23B], NFD: [0x1102, 0x116F, 0x11C2], NFKC: [0xB23B], NFKD: [0x1102, 0x116F, 0x11C2] }, +{ source: [0xB23C], NFC: [0xB23C], NFD: [0x1102, 0x1170], NFKC: [0xB23C], NFKD: [0x1102, 0x1170] }, +{ source: [0xB23D], NFC: [0xB23D], NFD: [0x1102, 0x1170, 0x11A8], NFKC: [0xB23D], NFKD: [0x1102, 0x1170, 0x11A8] }, +{ source: [0xB23E], NFC: [0xB23E], NFD: [0x1102, 0x1170, 0x11A9], NFKC: [0xB23E], NFKD: [0x1102, 0x1170, 0x11A9] }, +{ source: [0xB23F], NFC: [0xB23F], NFD: [0x1102, 0x1170, 0x11AA], NFKC: [0xB23F], NFKD: [0x1102, 0x1170, 0x11AA] }, +{ source: [0xB240], NFC: [0xB240], NFD: [0x1102, 0x1170, 0x11AB], NFKC: [0xB240], NFKD: [0x1102, 0x1170, 0x11AB] }, +{ source: [0xB241], NFC: [0xB241], NFD: [0x1102, 0x1170, 0x11AC], NFKC: [0xB241], NFKD: [0x1102, 0x1170, 0x11AC] }, +{ source: [0xB242], NFC: [0xB242], NFD: [0x1102, 0x1170, 0x11AD], NFKC: [0xB242], NFKD: [0x1102, 0x1170, 0x11AD] }, +{ source: [0xB243], NFC: [0xB243], NFD: [0x1102, 0x1170, 0x11AE], NFKC: [0xB243], NFKD: [0x1102, 0x1170, 0x11AE] }, +{ source: [0xB244], NFC: [0xB244], NFD: [0x1102, 0x1170, 0x11AF], NFKC: [0xB244], NFKD: [0x1102, 0x1170, 0x11AF] }, +{ source: [0xB245], NFC: [0xB245], NFD: [0x1102, 0x1170, 0x11B0], NFKC: [0xB245], NFKD: [0x1102, 0x1170, 0x11B0] }, +{ source: [0xB246], NFC: [0xB246], NFD: [0x1102, 0x1170, 0x11B1], NFKC: [0xB246], NFKD: [0x1102, 0x1170, 0x11B1] }, +{ source: [0xB247], NFC: [0xB247], NFD: [0x1102, 0x1170, 0x11B2], NFKC: [0xB247], NFKD: [0x1102, 0x1170, 0x11B2] }, +{ source: [0xB248], NFC: [0xB248], NFD: [0x1102, 0x1170, 0x11B3], NFKC: [0xB248], NFKD: [0x1102, 0x1170, 0x11B3] }, +{ source: [0xB249], NFC: [0xB249], NFD: [0x1102, 0x1170, 0x11B4], NFKC: [0xB249], NFKD: [0x1102, 0x1170, 0x11B4] }, +{ source: [0xB24A], NFC: [0xB24A], NFD: [0x1102, 0x1170, 0x11B5], NFKC: [0xB24A], NFKD: [0x1102, 0x1170, 0x11B5] }, +{ source: [0xB24B], NFC: [0xB24B], NFD: [0x1102, 0x1170, 0x11B6], NFKC: [0xB24B], NFKD: [0x1102, 0x1170, 0x11B6] }, +{ source: [0xB24C], NFC: [0xB24C], NFD: [0x1102, 0x1170, 0x11B7], NFKC: [0xB24C], NFKD: [0x1102, 0x1170, 0x11B7] }, +{ source: [0xB24D], NFC: [0xB24D], NFD: [0x1102, 0x1170, 0x11B8], NFKC: [0xB24D], NFKD: [0x1102, 0x1170, 0x11B8] }, +{ source: [0xB24E], NFC: [0xB24E], NFD: [0x1102, 0x1170, 0x11B9], NFKC: [0xB24E], NFKD: [0x1102, 0x1170, 0x11B9] }, +{ source: [0xB24F], NFC: [0xB24F], NFD: [0x1102, 0x1170, 0x11BA], NFKC: [0xB24F], NFKD: [0x1102, 0x1170, 0x11BA] }, +{ source: [0xB250], NFC: [0xB250], NFD: [0x1102, 0x1170, 0x11BB], NFKC: [0xB250], NFKD: [0x1102, 0x1170, 0x11BB] }, +{ source: [0xB251], NFC: [0xB251], NFD: [0x1102, 0x1170, 0x11BC], NFKC: [0xB251], NFKD: [0x1102, 0x1170, 0x11BC] }, +{ source: [0xB252], NFC: [0xB252], NFD: [0x1102, 0x1170, 0x11BD], NFKC: [0xB252], NFKD: [0x1102, 0x1170, 0x11BD] }, +{ source: [0xB253], NFC: [0xB253], NFD: [0x1102, 0x1170, 0x11BE], NFKC: [0xB253], NFKD: [0x1102, 0x1170, 0x11BE] }, +{ source: [0xB254], NFC: [0xB254], NFD: [0x1102, 0x1170, 0x11BF], NFKC: [0xB254], NFKD: [0x1102, 0x1170, 0x11BF] }, +{ source: [0xB255], NFC: [0xB255], NFD: [0x1102, 0x1170, 0x11C0], NFKC: [0xB255], NFKD: [0x1102, 0x1170, 0x11C0] }, +{ source: [0xB256], NFC: [0xB256], NFD: [0x1102, 0x1170, 0x11C1], NFKC: [0xB256], NFKD: [0x1102, 0x1170, 0x11C1] }, +{ source: [0xB257], NFC: [0xB257], NFD: [0x1102, 0x1170, 0x11C2], NFKC: [0xB257], NFKD: [0x1102, 0x1170, 0x11C2] }, +{ source: [0xB258], NFC: [0xB258], NFD: [0x1102, 0x1171], NFKC: [0xB258], NFKD: [0x1102, 0x1171] }, +{ source: [0xB259], NFC: [0xB259], NFD: [0x1102, 0x1171, 0x11A8], NFKC: [0xB259], NFKD: [0x1102, 0x1171, 0x11A8] }, +{ source: [0xB25A], NFC: [0xB25A], NFD: [0x1102, 0x1171, 0x11A9], NFKC: [0xB25A], NFKD: [0x1102, 0x1171, 0x11A9] }, +{ source: [0xB25B], NFC: [0xB25B], NFD: [0x1102, 0x1171, 0x11AA], NFKC: [0xB25B], NFKD: [0x1102, 0x1171, 0x11AA] }, +{ source: [0xB25C], NFC: [0xB25C], NFD: [0x1102, 0x1171, 0x11AB], NFKC: [0xB25C], NFKD: [0x1102, 0x1171, 0x11AB] }, +{ source: [0xB25D], NFC: [0xB25D], NFD: [0x1102, 0x1171, 0x11AC], NFKC: [0xB25D], NFKD: [0x1102, 0x1171, 0x11AC] }, +{ source: [0xB25E], NFC: [0xB25E], NFD: [0x1102, 0x1171, 0x11AD], NFKC: [0xB25E], NFKD: [0x1102, 0x1171, 0x11AD] }, +{ source: [0xB25F], NFC: [0xB25F], NFD: [0x1102, 0x1171, 0x11AE], NFKC: [0xB25F], NFKD: [0x1102, 0x1171, 0x11AE] }, +{ source: [0xB260], NFC: [0xB260], NFD: [0x1102, 0x1171, 0x11AF], NFKC: [0xB260], NFKD: [0x1102, 0x1171, 0x11AF] }, +{ source: [0xB261], NFC: [0xB261], NFD: [0x1102, 0x1171, 0x11B0], NFKC: [0xB261], NFKD: [0x1102, 0x1171, 0x11B0] }, +{ source: [0xB262], NFC: [0xB262], NFD: [0x1102, 0x1171, 0x11B1], NFKC: [0xB262], NFKD: [0x1102, 0x1171, 0x11B1] }, +{ source: [0xB263], NFC: [0xB263], NFD: [0x1102, 0x1171, 0x11B2], NFKC: [0xB263], NFKD: [0x1102, 0x1171, 0x11B2] }, +{ source: [0xB264], NFC: [0xB264], NFD: [0x1102, 0x1171, 0x11B3], NFKC: [0xB264], NFKD: [0x1102, 0x1171, 0x11B3] }, +{ source: [0xB265], NFC: [0xB265], NFD: [0x1102, 0x1171, 0x11B4], NFKC: [0xB265], NFKD: [0x1102, 0x1171, 0x11B4] }, +{ source: [0xB266], NFC: [0xB266], NFD: [0x1102, 0x1171, 0x11B5], NFKC: [0xB266], NFKD: [0x1102, 0x1171, 0x11B5] }, +{ source: [0xB267], NFC: [0xB267], NFD: [0x1102, 0x1171, 0x11B6], NFKC: [0xB267], NFKD: [0x1102, 0x1171, 0x11B6] }, +{ source: [0xB268], NFC: [0xB268], NFD: [0x1102, 0x1171, 0x11B7], NFKC: [0xB268], NFKD: [0x1102, 0x1171, 0x11B7] }, +{ source: [0xB269], NFC: [0xB269], NFD: [0x1102, 0x1171, 0x11B8], NFKC: [0xB269], NFKD: [0x1102, 0x1171, 0x11B8] }, +{ source: [0xB26A], NFC: [0xB26A], NFD: [0x1102, 0x1171, 0x11B9], NFKC: [0xB26A], NFKD: [0x1102, 0x1171, 0x11B9] }, +{ source: [0xB26B], NFC: [0xB26B], NFD: [0x1102, 0x1171, 0x11BA], NFKC: [0xB26B], NFKD: [0x1102, 0x1171, 0x11BA] }, +{ source: [0xB26C], NFC: [0xB26C], NFD: [0x1102, 0x1171, 0x11BB], NFKC: [0xB26C], NFKD: [0x1102, 0x1171, 0x11BB] }, +{ source: [0xB26D], NFC: [0xB26D], NFD: [0x1102, 0x1171, 0x11BC], NFKC: [0xB26D], NFKD: [0x1102, 0x1171, 0x11BC] }, +{ source: [0xB26E], NFC: [0xB26E], NFD: [0x1102, 0x1171, 0x11BD], NFKC: [0xB26E], NFKD: [0x1102, 0x1171, 0x11BD] }, +{ source: [0xB26F], NFC: [0xB26F], NFD: [0x1102, 0x1171, 0x11BE], NFKC: [0xB26F], NFKD: [0x1102, 0x1171, 0x11BE] }, +{ source: [0xB270], NFC: [0xB270], NFD: [0x1102, 0x1171, 0x11BF], NFKC: [0xB270], NFKD: [0x1102, 0x1171, 0x11BF] }, +{ source: [0xB271], NFC: [0xB271], NFD: [0x1102, 0x1171, 0x11C0], NFKC: [0xB271], NFKD: [0x1102, 0x1171, 0x11C0] }, +{ source: [0xB272], NFC: [0xB272], NFD: [0x1102, 0x1171, 0x11C1], NFKC: [0xB272], NFKD: [0x1102, 0x1171, 0x11C1] }, +{ source: [0xB273], NFC: [0xB273], NFD: [0x1102, 0x1171, 0x11C2], NFKC: [0xB273], NFKD: [0x1102, 0x1171, 0x11C2] }, +{ source: [0xB274], NFC: [0xB274], NFD: [0x1102, 0x1172], NFKC: [0xB274], NFKD: [0x1102, 0x1172] }, +{ source: [0xB275], NFC: [0xB275], NFD: [0x1102, 0x1172, 0x11A8], NFKC: [0xB275], NFKD: [0x1102, 0x1172, 0x11A8] }, +{ source: [0xB276], NFC: [0xB276], NFD: [0x1102, 0x1172, 0x11A9], NFKC: [0xB276], NFKD: [0x1102, 0x1172, 0x11A9] }, +{ source: [0xB277], NFC: [0xB277], NFD: [0x1102, 0x1172, 0x11AA], NFKC: [0xB277], NFKD: [0x1102, 0x1172, 0x11AA] }, +{ source: [0xB278], NFC: [0xB278], NFD: [0x1102, 0x1172, 0x11AB], NFKC: [0xB278], NFKD: [0x1102, 0x1172, 0x11AB] }, +{ source: [0xB279], NFC: [0xB279], NFD: [0x1102, 0x1172, 0x11AC], NFKC: [0xB279], NFKD: [0x1102, 0x1172, 0x11AC] }, +{ source: [0xB27A], NFC: [0xB27A], NFD: [0x1102, 0x1172, 0x11AD], NFKC: [0xB27A], NFKD: [0x1102, 0x1172, 0x11AD] }, +{ source: [0xB27B], NFC: [0xB27B], NFD: [0x1102, 0x1172, 0x11AE], NFKC: [0xB27B], NFKD: [0x1102, 0x1172, 0x11AE] }, +{ source: [0xB27C], NFC: [0xB27C], NFD: [0x1102, 0x1172, 0x11AF], NFKC: [0xB27C], NFKD: [0x1102, 0x1172, 0x11AF] }, +{ source: [0xB27D], NFC: [0xB27D], NFD: [0x1102, 0x1172, 0x11B0], NFKC: [0xB27D], NFKD: [0x1102, 0x1172, 0x11B0] }, +{ source: [0xB27E], NFC: [0xB27E], NFD: [0x1102, 0x1172, 0x11B1], NFKC: [0xB27E], NFKD: [0x1102, 0x1172, 0x11B1] }, +{ source: [0xB27F], NFC: [0xB27F], NFD: [0x1102, 0x1172, 0x11B2], NFKC: [0xB27F], NFKD: [0x1102, 0x1172, 0x11B2] }, +{ source: [0xB280], NFC: [0xB280], NFD: [0x1102, 0x1172, 0x11B3], NFKC: [0xB280], NFKD: [0x1102, 0x1172, 0x11B3] }, +{ source: [0xB281], NFC: [0xB281], NFD: [0x1102, 0x1172, 0x11B4], NFKC: [0xB281], NFKD: [0x1102, 0x1172, 0x11B4] }, +{ source: [0xB282], NFC: [0xB282], NFD: [0x1102, 0x1172, 0x11B5], NFKC: [0xB282], NFKD: [0x1102, 0x1172, 0x11B5] }, +{ source: [0xB283], NFC: [0xB283], NFD: [0x1102, 0x1172, 0x11B6], NFKC: [0xB283], NFKD: [0x1102, 0x1172, 0x11B6] }, +{ source: [0xB284], NFC: [0xB284], NFD: [0x1102, 0x1172, 0x11B7], NFKC: [0xB284], NFKD: [0x1102, 0x1172, 0x11B7] }, +{ source: [0xB285], NFC: [0xB285], NFD: [0x1102, 0x1172, 0x11B8], NFKC: [0xB285], NFKD: [0x1102, 0x1172, 0x11B8] }, +{ source: [0xB286], NFC: [0xB286], NFD: [0x1102, 0x1172, 0x11B9], NFKC: [0xB286], NFKD: [0x1102, 0x1172, 0x11B9] }, +{ source: [0xB287], NFC: [0xB287], NFD: [0x1102, 0x1172, 0x11BA], NFKC: [0xB287], NFKD: [0x1102, 0x1172, 0x11BA] }, +{ source: [0xB288], NFC: [0xB288], NFD: [0x1102, 0x1172, 0x11BB], NFKC: [0xB288], NFKD: [0x1102, 0x1172, 0x11BB] }, +{ source: [0xB289], NFC: [0xB289], NFD: [0x1102, 0x1172, 0x11BC], NFKC: [0xB289], NFKD: [0x1102, 0x1172, 0x11BC] }, +{ source: [0xB28A], NFC: [0xB28A], NFD: [0x1102, 0x1172, 0x11BD], NFKC: [0xB28A], NFKD: [0x1102, 0x1172, 0x11BD] }, +{ source: [0xB28B], NFC: [0xB28B], NFD: [0x1102, 0x1172, 0x11BE], NFKC: [0xB28B], NFKD: [0x1102, 0x1172, 0x11BE] }, +{ source: [0xB28C], NFC: [0xB28C], NFD: [0x1102, 0x1172, 0x11BF], NFKC: [0xB28C], NFKD: [0x1102, 0x1172, 0x11BF] }, +{ source: [0xB28D], NFC: [0xB28D], NFD: [0x1102, 0x1172, 0x11C0], NFKC: [0xB28D], NFKD: [0x1102, 0x1172, 0x11C0] }, +{ source: [0xB28E], NFC: [0xB28E], NFD: [0x1102, 0x1172, 0x11C1], NFKC: [0xB28E], NFKD: [0x1102, 0x1172, 0x11C1] }, +{ source: [0xB28F], NFC: [0xB28F], NFD: [0x1102, 0x1172, 0x11C2], NFKC: [0xB28F], NFKD: [0x1102, 0x1172, 0x11C2] }, +{ source: [0xB290], NFC: [0xB290], NFD: [0x1102, 0x1173], NFKC: [0xB290], NFKD: [0x1102, 0x1173] }, +{ source: [0xB291], NFC: [0xB291], NFD: [0x1102, 0x1173, 0x11A8], NFKC: [0xB291], NFKD: [0x1102, 0x1173, 0x11A8] }, +{ source: [0xB292], NFC: [0xB292], NFD: [0x1102, 0x1173, 0x11A9], NFKC: [0xB292], NFKD: [0x1102, 0x1173, 0x11A9] }, +{ source: [0xB293], NFC: [0xB293], NFD: [0x1102, 0x1173, 0x11AA], NFKC: [0xB293], NFKD: [0x1102, 0x1173, 0x11AA] }, +{ source: [0xB294], NFC: [0xB294], NFD: [0x1102, 0x1173, 0x11AB], NFKC: [0xB294], NFKD: [0x1102, 0x1173, 0x11AB] }, +{ source: [0xB295], NFC: [0xB295], NFD: [0x1102, 0x1173, 0x11AC], NFKC: [0xB295], NFKD: [0x1102, 0x1173, 0x11AC] }, +{ source: [0xB296], NFC: [0xB296], NFD: [0x1102, 0x1173, 0x11AD], NFKC: [0xB296], NFKD: [0x1102, 0x1173, 0x11AD] }, +{ source: [0xB297], NFC: [0xB297], NFD: [0x1102, 0x1173, 0x11AE], NFKC: [0xB297], NFKD: [0x1102, 0x1173, 0x11AE] }, +{ source: [0xB298], NFC: [0xB298], NFD: [0x1102, 0x1173, 0x11AF], NFKC: [0xB298], NFKD: [0x1102, 0x1173, 0x11AF] }, +{ source: [0xB299], NFC: [0xB299], NFD: [0x1102, 0x1173, 0x11B0], NFKC: [0xB299], NFKD: [0x1102, 0x1173, 0x11B0] }, +{ source: [0xB29A], NFC: [0xB29A], NFD: [0x1102, 0x1173, 0x11B1], NFKC: [0xB29A], NFKD: [0x1102, 0x1173, 0x11B1] }, +{ source: [0xB29B], NFC: [0xB29B], NFD: [0x1102, 0x1173, 0x11B2], NFKC: [0xB29B], NFKD: [0x1102, 0x1173, 0x11B2] }, +{ source: [0xB29C], NFC: [0xB29C], NFD: [0x1102, 0x1173, 0x11B3], NFKC: [0xB29C], NFKD: [0x1102, 0x1173, 0x11B3] }, +{ source: [0xB29D], NFC: [0xB29D], NFD: [0x1102, 0x1173, 0x11B4], NFKC: [0xB29D], NFKD: [0x1102, 0x1173, 0x11B4] }, +{ source: [0xB29E], NFC: [0xB29E], NFD: [0x1102, 0x1173, 0x11B5], NFKC: [0xB29E], NFKD: [0x1102, 0x1173, 0x11B5] }, +{ source: [0xB29F], NFC: [0xB29F], NFD: [0x1102, 0x1173, 0x11B6], NFKC: [0xB29F], NFKD: [0x1102, 0x1173, 0x11B6] }, +{ source: [0xB2A0], NFC: [0xB2A0], NFD: [0x1102, 0x1173, 0x11B7], NFKC: [0xB2A0], NFKD: [0x1102, 0x1173, 0x11B7] }, +{ source: [0xB2A1], NFC: [0xB2A1], NFD: [0x1102, 0x1173, 0x11B8], NFKC: [0xB2A1], NFKD: [0x1102, 0x1173, 0x11B8] }, +{ source: [0xB2A2], NFC: [0xB2A2], NFD: [0x1102, 0x1173, 0x11B9], NFKC: [0xB2A2], NFKD: [0x1102, 0x1173, 0x11B9] }, +{ source: [0xB2A3], NFC: [0xB2A3], NFD: [0x1102, 0x1173, 0x11BA], NFKC: [0xB2A3], NFKD: [0x1102, 0x1173, 0x11BA] }, +{ source: [0xB2A4], NFC: [0xB2A4], NFD: [0x1102, 0x1173, 0x11BB], NFKC: [0xB2A4], NFKD: [0x1102, 0x1173, 0x11BB] }, +{ source: [0xB2A5], NFC: [0xB2A5], NFD: [0x1102, 0x1173, 0x11BC], NFKC: [0xB2A5], NFKD: [0x1102, 0x1173, 0x11BC] }, +{ source: [0xB2A6], NFC: [0xB2A6], NFD: [0x1102, 0x1173, 0x11BD], NFKC: [0xB2A6], NFKD: [0x1102, 0x1173, 0x11BD] }, +{ source: [0xB2A7], NFC: [0xB2A7], NFD: [0x1102, 0x1173, 0x11BE], NFKC: [0xB2A7], NFKD: [0x1102, 0x1173, 0x11BE] }, +{ source: [0xB2A8], NFC: [0xB2A8], NFD: [0x1102, 0x1173, 0x11BF], NFKC: [0xB2A8], NFKD: [0x1102, 0x1173, 0x11BF] }, +{ source: [0xB2A9], NFC: [0xB2A9], NFD: [0x1102, 0x1173, 0x11C0], NFKC: [0xB2A9], NFKD: [0x1102, 0x1173, 0x11C0] }, +{ source: [0xB2AA], NFC: [0xB2AA], NFD: [0x1102, 0x1173, 0x11C1], NFKC: [0xB2AA], NFKD: [0x1102, 0x1173, 0x11C1] }, +{ source: [0xB2AB], NFC: [0xB2AB], NFD: [0x1102, 0x1173, 0x11C2], NFKC: [0xB2AB], NFKD: [0x1102, 0x1173, 0x11C2] }, +{ source: [0xB2AC], NFC: [0xB2AC], NFD: [0x1102, 0x1174], NFKC: [0xB2AC], NFKD: [0x1102, 0x1174] }, +{ source: [0xB2AD], NFC: [0xB2AD], NFD: [0x1102, 0x1174, 0x11A8], NFKC: [0xB2AD], NFKD: [0x1102, 0x1174, 0x11A8] }, +{ source: [0xB2AE], NFC: [0xB2AE], NFD: [0x1102, 0x1174, 0x11A9], NFKC: [0xB2AE], NFKD: [0x1102, 0x1174, 0x11A9] }, +{ source: [0xB2AF], NFC: [0xB2AF], NFD: [0x1102, 0x1174, 0x11AA], NFKC: [0xB2AF], NFKD: [0x1102, 0x1174, 0x11AA] }, +{ source: [0xB2B0], NFC: [0xB2B0], NFD: [0x1102, 0x1174, 0x11AB], NFKC: [0xB2B0], NFKD: [0x1102, 0x1174, 0x11AB] }, +{ source: [0xB2B1], NFC: [0xB2B1], NFD: [0x1102, 0x1174, 0x11AC], NFKC: [0xB2B1], NFKD: [0x1102, 0x1174, 0x11AC] }, +{ source: [0xB2B2], NFC: [0xB2B2], NFD: [0x1102, 0x1174, 0x11AD], NFKC: [0xB2B2], NFKD: [0x1102, 0x1174, 0x11AD] }, +{ source: [0xB2B3], NFC: [0xB2B3], NFD: [0x1102, 0x1174, 0x11AE], NFKC: [0xB2B3], NFKD: [0x1102, 0x1174, 0x11AE] }, +{ source: [0xB2B4], NFC: [0xB2B4], NFD: [0x1102, 0x1174, 0x11AF], NFKC: [0xB2B4], NFKD: [0x1102, 0x1174, 0x11AF] }, +{ source: [0xB2B5], NFC: [0xB2B5], NFD: [0x1102, 0x1174, 0x11B0], NFKC: [0xB2B5], NFKD: [0x1102, 0x1174, 0x11B0] }, +{ source: [0xB2B6], NFC: [0xB2B6], NFD: [0x1102, 0x1174, 0x11B1], NFKC: [0xB2B6], NFKD: [0x1102, 0x1174, 0x11B1] }, +{ source: [0xB2B7], NFC: [0xB2B7], NFD: [0x1102, 0x1174, 0x11B2], NFKC: [0xB2B7], NFKD: [0x1102, 0x1174, 0x11B2] }, +{ source: [0xB2B8], NFC: [0xB2B8], NFD: [0x1102, 0x1174, 0x11B3], NFKC: [0xB2B8], NFKD: [0x1102, 0x1174, 0x11B3] }, +{ source: [0xB2B9], NFC: [0xB2B9], NFD: [0x1102, 0x1174, 0x11B4], NFKC: [0xB2B9], NFKD: [0x1102, 0x1174, 0x11B4] }, +{ source: [0xB2BA], NFC: [0xB2BA], NFD: [0x1102, 0x1174, 0x11B5], NFKC: [0xB2BA], NFKD: [0x1102, 0x1174, 0x11B5] }, +{ source: [0xB2BB], NFC: [0xB2BB], NFD: [0x1102, 0x1174, 0x11B6], NFKC: [0xB2BB], NFKD: [0x1102, 0x1174, 0x11B6] }, +{ source: [0xB2BC], NFC: [0xB2BC], NFD: [0x1102, 0x1174, 0x11B7], NFKC: [0xB2BC], NFKD: [0x1102, 0x1174, 0x11B7] }, +{ source: [0xB2BD], NFC: [0xB2BD], NFD: [0x1102, 0x1174, 0x11B8], NFKC: [0xB2BD], NFKD: [0x1102, 0x1174, 0x11B8] }, +{ source: [0xB2BE], NFC: [0xB2BE], NFD: [0x1102, 0x1174, 0x11B9], NFKC: [0xB2BE], NFKD: [0x1102, 0x1174, 0x11B9] }, +{ source: [0xB2BF], NFC: [0xB2BF], NFD: [0x1102, 0x1174, 0x11BA], NFKC: [0xB2BF], NFKD: [0x1102, 0x1174, 0x11BA] }, +{ source: [0xB2C0], NFC: [0xB2C0], NFD: [0x1102, 0x1174, 0x11BB], NFKC: [0xB2C0], NFKD: [0x1102, 0x1174, 0x11BB] }, +{ source: [0xB2C1], NFC: [0xB2C1], NFD: [0x1102, 0x1174, 0x11BC], NFKC: [0xB2C1], NFKD: [0x1102, 0x1174, 0x11BC] }, +{ source: [0xB2C2], NFC: [0xB2C2], NFD: [0x1102, 0x1174, 0x11BD], NFKC: [0xB2C2], NFKD: [0x1102, 0x1174, 0x11BD] }, +{ source: [0xB2C3], NFC: [0xB2C3], NFD: [0x1102, 0x1174, 0x11BE], NFKC: [0xB2C3], NFKD: [0x1102, 0x1174, 0x11BE] }, +{ source: [0xB2C4], NFC: [0xB2C4], NFD: [0x1102, 0x1174, 0x11BF], NFKC: [0xB2C4], NFKD: [0x1102, 0x1174, 0x11BF] }, +{ source: [0xB2C5], NFC: [0xB2C5], NFD: [0x1102, 0x1174, 0x11C0], NFKC: [0xB2C5], NFKD: [0x1102, 0x1174, 0x11C0] }, +{ source: [0xB2C6], NFC: [0xB2C6], NFD: [0x1102, 0x1174, 0x11C1], NFKC: [0xB2C6], NFKD: [0x1102, 0x1174, 0x11C1] }, +{ source: [0xB2C7], NFC: [0xB2C7], NFD: [0x1102, 0x1174, 0x11C2], NFKC: [0xB2C7], NFKD: [0x1102, 0x1174, 0x11C2] }, +{ source: [0xB2C8], NFC: [0xB2C8], NFD: [0x1102, 0x1175], NFKC: [0xB2C8], NFKD: [0x1102, 0x1175] }, +{ source: [0xB2C9], NFC: [0xB2C9], NFD: [0x1102, 0x1175, 0x11A8], NFKC: [0xB2C9], NFKD: [0x1102, 0x1175, 0x11A8] }, +{ source: [0xB2CA], NFC: [0xB2CA], NFD: [0x1102, 0x1175, 0x11A9], NFKC: [0xB2CA], NFKD: [0x1102, 0x1175, 0x11A9] }, +{ source: [0xB2CB], NFC: [0xB2CB], NFD: [0x1102, 0x1175, 0x11AA], NFKC: [0xB2CB], NFKD: [0x1102, 0x1175, 0x11AA] }, +{ source: [0xB2CC], NFC: [0xB2CC], NFD: [0x1102, 0x1175, 0x11AB], NFKC: [0xB2CC], NFKD: [0x1102, 0x1175, 0x11AB] }, +{ source: [0xB2CD], NFC: [0xB2CD], NFD: [0x1102, 0x1175, 0x11AC], NFKC: [0xB2CD], NFKD: [0x1102, 0x1175, 0x11AC] }, +{ source: [0xB2CE], NFC: [0xB2CE], NFD: [0x1102, 0x1175, 0x11AD], NFKC: [0xB2CE], NFKD: [0x1102, 0x1175, 0x11AD] }, +{ source: [0xB2CF], NFC: [0xB2CF], NFD: [0x1102, 0x1175, 0x11AE], NFKC: [0xB2CF], NFKD: [0x1102, 0x1175, 0x11AE] }, +{ source: [0xB2D0], NFC: [0xB2D0], NFD: [0x1102, 0x1175, 0x11AF], NFKC: [0xB2D0], NFKD: [0x1102, 0x1175, 0x11AF] }, +{ source: [0xB2D1], NFC: [0xB2D1], NFD: [0x1102, 0x1175, 0x11B0], NFKC: [0xB2D1], NFKD: [0x1102, 0x1175, 0x11B0] }, +{ source: [0xB2D2], NFC: [0xB2D2], NFD: [0x1102, 0x1175, 0x11B1], NFKC: [0xB2D2], NFKD: [0x1102, 0x1175, 0x11B1] }, +{ source: [0xB2D3], NFC: [0xB2D3], NFD: [0x1102, 0x1175, 0x11B2], NFKC: [0xB2D3], NFKD: [0x1102, 0x1175, 0x11B2] }, +{ source: [0xB2D4], NFC: [0xB2D4], NFD: [0x1102, 0x1175, 0x11B3], NFKC: [0xB2D4], NFKD: [0x1102, 0x1175, 0x11B3] }, +{ source: [0xB2D5], NFC: [0xB2D5], NFD: [0x1102, 0x1175, 0x11B4], NFKC: [0xB2D5], NFKD: [0x1102, 0x1175, 0x11B4] }, +{ source: [0xB2D6], NFC: [0xB2D6], NFD: [0x1102, 0x1175, 0x11B5], NFKC: [0xB2D6], NFKD: [0x1102, 0x1175, 0x11B5] }, +{ source: [0xB2D7], NFC: [0xB2D7], NFD: [0x1102, 0x1175, 0x11B6], NFKC: [0xB2D7], NFKD: [0x1102, 0x1175, 0x11B6] }, +{ source: [0xB2D8], NFC: [0xB2D8], NFD: [0x1102, 0x1175, 0x11B7], NFKC: [0xB2D8], NFKD: [0x1102, 0x1175, 0x11B7] }, +{ source: [0xB2D9], NFC: [0xB2D9], NFD: [0x1102, 0x1175, 0x11B8], NFKC: [0xB2D9], NFKD: [0x1102, 0x1175, 0x11B8] }, +{ source: [0xB2DA], NFC: [0xB2DA], NFD: [0x1102, 0x1175, 0x11B9], NFKC: [0xB2DA], NFKD: [0x1102, 0x1175, 0x11B9] }, +{ source: [0xB2DB], NFC: [0xB2DB], NFD: [0x1102, 0x1175, 0x11BA], NFKC: [0xB2DB], NFKD: [0x1102, 0x1175, 0x11BA] }, +{ source: [0xB2DC], NFC: [0xB2DC], NFD: [0x1102, 0x1175, 0x11BB], NFKC: [0xB2DC], NFKD: [0x1102, 0x1175, 0x11BB] }, +{ source: [0xB2DD], NFC: [0xB2DD], NFD: [0x1102, 0x1175, 0x11BC], NFKC: [0xB2DD], NFKD: [0x1102, 0x1175, 0x11BC] }, +{ source: [0xB2DE], NFC: [0xB2DE], NFD: [0x1102, 0x1175, 0x11BD], NFKC: [0xB2DE], NFKD: [0x1102, 0x1175, 0x11BD] }, +{ source: [0xB2DF], NFC: [0xB2DF], NFD: [0x1102, 0x1175, 0x11BE], NFKC: [0xB2DF], NFKD: [0x1102, 0x1175, 0x11BE] }, +{ source: [0xB2E0], NFC: [0xB2E0], NFD: [0x1102, 0x1175, 0x11BF], NFKC: [0xB2E0], NFKD: [0x1102, 0x1175, 0x11BF] }, +{ source: [0xB2E1], NFC: [0xB2E1], NFD: [0x1102, 0x1175, 0x11C0], NFKC: [0xB2E1], NFKD: [0x1102, 0x1175, 0x11C0] }, +{ source: [0xB2E2], NFC: [0xB2E2], NFD: [0x1102, 0x1175, 0x11C1], NFKC: [0xB2E2], NFKD: [0x1102, 0x1175, 0x11C1] }, +{ source: [0xB2E3], NFC: [0xB2E3], NFD: [0x1102, 0x1175, 0x11C2], NFKC: [0xB2E3], NFKD: [0x1102, 0x1175, 0x11C2] }, +{ source: [0xB2E4], NFC: [0xB2E4], NFD: [0x1103, 0x1161], NFKC: [0xB2E4], NFKD: [0x1103, 0x1161] }, +{ source: [0xB2E5], NFC: [0xB2E5], NFD: [0x1103, 0x1161, 0x11A8], NFKC: [0xB2E5], NFKD: [0x1103, 0x1161, 0x11A8] }, +{ source: [0xB2E6], NFC: [0xB2E6], NFD: [0x1103, 0x1161, 0x11A9], NFKC: [0xB2E6], NFKD: [0x1103, 0x1161, 0x11A9] }, +{ source: [0xB2E7], NFC: [0xB2E7], NFD: [0x1103, 0x1161, 0x11AA], NFKC: [0xB2E7], NFKD: [0x1103, 0x1161, 0x11AA] }, +{ source: [0xB2E8], NFC: [0xB2E8], NFD: [0x1103, 0x1161, 0x11AB], NFKC: [0xB2E8], NFKD: [0x1103, 0x1161, 0x11AB] }, +{ source: [0xB2E9], NFC: [0xB2E9], NFD: [0x1103, 0x1161, 0x11AC], NFKC: [0xB2E9], NFKD: [0x1103, 0x1161, 0x11AC] }, +{ source: [0xB2EA], NFC: [0xB2EA], NFD: [0x1103, 0x1161, 0x11AD], NFKC: [0xB2EA], NFKD: [0x1103, 0x1161, 0x11AD] }, +{ source: [0xB2EB], NFC: [0xB2EB], NFD: [0x1103, 0x1161, 0x11AE], NFKC: [0xB2EB], NFKD: [0x1103, 0x1161, 0x11AE] }, +{ source: [0xB2EC], NFC: [0xB2EC], NFD: [0x1103, 0x1161, 0x11AF], NFKC: [0xB2EC], NFKD: [0x1103, 0x1161, 0x11AF] }, +{ source: [0xB2ED], NFC: [0xB2ED], NFD: [0x1103, 0x1161, 0x11B0], NFKC: [0xB2ED], NFKD: [0x1103, 0x1161, 0x11B0] }, +{ source: [0xB2EE], NFC: [0xB2EE], NFD: [0x1103, 0x1161, 0x11B1], NFKC: [0xB2EE], NFKD: [0x1103, 0x1161, 0x11B1] }, +{ source: [0xB2EF], NFC: [0xB2EF], NFD: [0x1103, 0x1161, 0x11B2], NFKC: [0xB2EF], NFKD: [0x1103, 0x1161, 0x11B2] }, +{ source: [0xB2F0], NFC: [0xB2F0], NFD: [0x1103, 0x1161, 0x11B3], NFKC: [0xB2F0], NFKD: [0x1103, 0x1161, 0x11B3] }, +{ source: [0xB2F1], NFC: [0xB2F1], NFD: [0x1103, 0x1161, 0x11B4], NFKC: [0xB2F1], NFKD: [0x1103, 0x1161, 0x11B4] }, +{ source: [0xB2F2], NFC: [0xB2F2], NFD: [0x1103, 0x1161, 0x11B5], NFKC: [0xB2F2], NFKD: [0x1103, 0x1161, 0x11B5] }, +{ source: [0xB2F3], NFC: [0xB2F3], NFD: [0x1103, 0x1161, 0x11B6], NFKC: [0xB2F3], NFKD: [0x1103, 0x1161, 0x11B6] }, +{ source: [0xB2F4], NFC: [0xB2F4], NFD: [0x1103, 0x1161, 0x11B7], NFKC: [0xB2F4], NFKD: [0x1103, 0x1161, 0x11B7] }, +{ source: [0xB2F5], NFC: [0xB2F5], NFD: [0x1103, 0x1161, 0x11B8], NFKC: [0xB2F5], NFKD: [0x1103, 0x1161, 0x11B8] }, +{ source: [0xB2F6], NFC: [0xB2F6], NFD: [0x1103, 0x1161, 0x11B9], NFKC: [0xB2F6], NFKD: [0x1103, 0x1161, 0x11B9] }, +{ source: [0xB2F7], NFC: [0xB2F7], NFD: [0x1103, 0x1161, 0x11BA], NFKC: [0xB2F7], NFKD: [0x1103, 0x1161, 0x11BA] }, +{ source: [0xB2F8], NFC: [0xB2F8], NFD: [0x1103, 0x1161, 0x11BB], NFKC: [0xB2F8], NFKD: [0x1103, 0x1161, 0x11BB] }, +{ source: [0xB2F9], NFC: [0xB2F9], NFD: [0x1103, 0x1161, 0x11BC], NFKC: [0xB2F9], NFKD: [0x1103, 0x1161, 0x11BC] }, +{ source: [0xB2FA], NFC: [0xB2FA], NFD: [0x1103, 0x1161, 0x11BD], NFKC: [0xB2FA], NFKD: [0x1103, 0x1161, 0x11BD] }, +{ source: [0xB2FB], NFC: [0xB2FB], NFD: [0x1103, 0x1161, 0x11BE], NFKC: [0xB2FB], NFKD: [0x1103, 0x1161, 0x11BE] }, +{ source: [0xB2FC], NFC: [0xB2FC], NFD: [0x1103, 0x1161, 0x11BF], NFKC: [0xB2FC], NFKD: [0x1103, 0x1161, 0x11BF] }, +{ source: [0xB2FD], NFC: [0xB2FD], NFD: [0x1103, 0x1161, 0x11C0], NFKC: [0xB2FD], NFKD: [0x1103, 0x1161, 0x11C0] }, +{ source: [0xB2FE], NFC: [0xB2FE], NFD: [0x1103, 0x1161, 0x11C1], NFKC: [0xB2FE], NFKD: [0x1103, 0x1161, 0x11C1] }, +{ source: [0xB2FF], NFC: [0xB2FF], NFD: [0x1103, 0x1161, 0x11C2], NFKC: [0xB2FF], NFKD: [0x1103, 0x1161, 0x11C2] }, +{ source: [0xB300], NFC: [0xB300], NFD: [0x1103, 0x1162], NFKC: [0xB300], NFKD: [0x1103, 0x1162] }, +{ source: [0xB301], NFC: [0xB301], NFD: [0x1103, 0x1162, 0x11A8], NFKC: [0xB301], NFKD: [0x1103, 0x1162, 0x11A8] }, +{ source: [0xB302], NFC: [0xB302], NFD: [0x1103, 0x1162, 0x11A9], NFKC: [0xB302], NFKD: [0x1103, 0x1162, 0x11A9] }, +{ source: [0xB303], NFC: [0xB303], NFD: [0x1103, 0x1162, 0x11AA], NFKC: [0xB303], NFKD: [0x1103, 0x1162, 0x11AA] }, +{ source: [0xB304], NFC: [0xB304], NFD: [0x1103, 0x1162, 0x11AB], NFKC: [0xB304], NFKD: [0x1103, 0x1162, 0x11AB] }, +{ source: [0xB305], NFC: [0xB305], NFD: [0x1103, 0x1162, 0x11AC], NFKC: [0xB305], NFKD: [0x1103, 0x1162, 0x11AC] }, +{ source: [0xB306], NFC: [0xB306], NFD: [0x1103, 0x1162, 0x11AD], NFKC: [0xB306], NFKD: [0x1103, 0x1162, 0x11AD] }, +{ source: [0xB307], NFC: [0xB307], NFD: [0x1103, 0x1162, 0x11AE], NFKC: [0xB307], NFKD: [0x1103, 0x1162, 0x11AE] }, +{ source: [0xB308], NFC: [0xB308], NFD: [0x1103, 0x1162, 0x11AF], NFKC: [0xB308], NFKD: [0x1103, 0x1162, 0x11AF] }, +{ source: [0xB309], NFC: [0xB309], NFD: [0x1103, 0x1162, 0x11B0], NFKC: [0xB309], NFKD: [0x1103, 0x1162, 0x11B0] }, +{ source: [0xB30A], NFC: [0xB30A], NFD: [0x1103, 0x1162, 0x11B1], NFKC: [0xB30A], NFKD: [0x1103, 0x1162, 0x11B1] }, +{ source: [0xB30B], NFC: [0xB30B], NFD: [0x1103, 0x1162, 0x11B2], NFKC: [0xB30B], NFKD: [0x1103, 0x1162, 0x11B2] }, +{ source: [0xB30C], NFC: [0xB30C], NFD: [0x1103, 0x1162, 0x11B3], NFKC: [0xB30C], NFKD: [0x1103, 0x1162, 0x11B3] }, +{ source: [0xB30D], NFC: [0xB30D], NFD: [0x1103, 0x1162, 0x11B4], NFKC: [0xB30D], NFKD: [0x1103, 0x1162, 0x11B4] }, +{ source: [0xB30E], NFC: [0xB30E], NFD: [0x1103, 0x1162, 0x11B5], NFKC: [0xB30E], NFKD: [0x1103, 0x1162, 0x11B5] }, +{ source: [0xB30F], NFC: [0xB30F], NFD: [0x1103, 0x1162, 0x11B6], NFKC: [0xB30F], NFKD: [0x1103, 0x1162, 0x11B6] }, +{ source: [0xB310], NFC: [0xB310], NFD: [0x1103, 0x1162, 0x11B7], NFKC: [0xB310], NFKD: [0x1103, 0x1162, 0x11B7] }, +{ source: [0xB311], NFC: [0xB311], NFD: [0x1103, 0x1162, 0x11B8], NFKC: [0xB311], NFKD: [0x1103, 0x1162, 0x11B8] }, +{ source: [0xB312], NFC: [0xB312], NFD: [0x1103, 0x1162, 0x11B9], NFKC: [0xB312], NFKD: [0x1103, 0x1162, 0x11B9] }, +{ source: [0xB313], NFC: [0xB313], NFD: [0x1103, 0x1162, 0x11BA], NFKC: [0xB313], NFKD: [0x1103, 0x1162, 0x11BA] }, +{ source: [0xB314], NFC: [0xB314], NFD: [0x1103, 0x1162, 0x11BB], NFKC: [0xB314], NFKD: [0x1103, 0x1162, 0x11BB] }, +{ source: [0xB315], NFC: [0xB315], NFD: [0x1103, 0x1162, 0x11BC], NFKC: [0xB315], NFKD: [0x1103, 0x1162, 0x11BC] }, +{ source: [0xB316], NFC: [0xB316], NFD: [0x1103, 0x1162, 0x11BD], NFKC: [0xB316], NFKD: [0x1103, 0x1162, 0x11BD] }, +{ source: [0xB317], NFC: [0xB317], NFD: [0x1103, 0x1162, 0x11BE], NFKC: [0xB317], NFKD: [0x1103, 0x1162, 0x11BE] }, +{ source: [0xB318], NFC: [0xB318], NFD: [0x1103, 0x1162, 0x11BF], NFKC: [0xB318], NFKD: [0x1103, 0x1162, 0x11BF] }, +{ source: [0xB319], NFC: [0xB319], NFD: [0x1103, 0x1162, 0x11C0], NFKC: [0xB319], NFKD: [0x1103, 0x1162, 0x11C0] }, +{ source: [0xB31A], NFC: [0xB31A], NFD: [0x1103, 0x1162, 0x11C1], NFKC: [0xB31A], NFKD: [0x1103, 0x1162, 0x11C1] }, +{ source: [0xB31B], NFC: [0xB31B], NFD: [0x1103, 0x1162, 0x11C2], NFKC: [0xB31B], NFKD: [0x1103, 0x1162, 0x11C2] }, +{ source: [0xB31C], NFC: [0xB31C], NFD: [0x1103, 0x1163], NFKC: [0xB31C], NFKD: [0x1103, 0x1163] }, +{ source: [0xB31D], NFC: [0xB31D], NFD: [0x1103, 0x1163, 0x11A8], NFKC: [0xB31D], NFKD: [0x1103, 0x1163, 0x11A8] }, +{ source: [0xB31E], NFC: [0xB31E], NFD: [0x1103, 0x1163, 0x11A9], NFKC: [0xB31E], NFKD: [0x1103, 0x1163, 0x11A9] }, +{ source: [0xB31F], NFC: [0xB31F], NFD: [0x1103, 0x1163, 0x11AA], NFKC: [0xB31F], NFKD: [0x1103, 0x1163, 0x11AA] }, +{ source: [0xB320], NFC: [0xB320], NFD: [0x1103, 0x1163, 0x11AB], NFKC: [0xB320], NFKD: [0x1103, 0x1163, 0x11AB] }, +{ source: [0xB321], NFC: [0xB321], NFD: [0x1103, 0x1163, 0x11AC], NFKC: [0xB321], NFKD: [0x1103, 0x1163, 0x11AC] }, +{ source: [0xB322], NFC: [0xB322], NFD: [0x1103, 0x1163, 0x11AD], NFKC: [0xB322], NFKD: [0x1103, 0x1163, 0x11AD] }, +{ source: [0xB323], NFC: [0xB323], NFD: [0x1103, 0x1163, 0x11AE], NFKC: [0xB323], NFKD: [0x1103, 0x1163, 0x11AE] }, +{ source: [0xB324], NFC: [0xB324], NFD: [0x1103, 0x1163, 0x11AF], NFKC: [0xB324], NFKD: [0x1103, 0x1163, 0x11AF] }, +{ source: [0xB325], NFC: [0xB325], NFD: [0x1103, 0x1163, 0x11B0], NFKC: [0xB325], NFKD: [0x1103, 0x1163, 0x11B0] }, +{ source: [0xB326], NFC: [0xB326], NFD: [0x1103, 0x1163, 0x11B1], NFKC: [0xB326], NFKD: [0x1103, 0x1163, 0x11B1] }, +{ source: [0xB327], NFC: [0xB327], NFD: [0x1103, 0x1163, 0x11B2], NFKC: [0xB327], NFKD: [0x1103, 0x1163, 0x11B2] }, +{ source: [0xB328], NFC: [0xB328], NFD: [0x1103, 0x1163, 0x11B3], NFKC: [0xB328], NFKD: [0x1103, 0x1163, 0x11B3] }, +{ source: [0xB329], NFC: [0xB329], NFD: [0x1103, 0x1163, 0x11B4], NFKC: [0xB329], NFKD: [0x1103, 0x1163, 0x11B4] }, +{ source: [0xB32A], NFC: [0xB32A], NFD: [0x1103, 0x1163, 0x11B5], NFKC: [0xB32A], NFKD: [0x1103, 0x1163, 0x11B5] }, +{ source: [0xB32B], NFC: [0xB32B], NFD: [0x1103, 0x1163, 0x11B6], NFKC: [0xB32B], NFKD: [0x1103, 0x1163, 0x11B6] }, +{ source: [0xB32C], NFC: [0xB32C], NFD: [0x1103, 0x1163, 0x11B7], NFKC: [0xB32C], NFKD: [0x1103, 0x1163, 0x11B7] }, +{ source: [0xB32D], NFC: [0xB32D], NFD: [0x1103, 0x1163, 0x11B8], NFKC: [0xB32D], NFKD: [0x1103, 0x1163, 0x11B8] }, +{ source: [0xB32E], NFC: [0xB32E], NFD: [0x1103, 0x1163, 0x11B9], NFKC: [0xB32E], NFKD: [0x1103, 0x1163, 0x11B9] }, +{ source: [0xB32F], NFC: [0xB32F], NFD: [0x1103, 0x1163, 0x11BA], NFKC: [0xB32F], NFKD: [0x1103, 0x1163, 0x11BA] }, +{ source: [0xB330], NFC: [0xB330], NFD: [0x1103, 0x1163, 0x11BB], NFKC: [0xB330], NFKD: [0x1103, 0x1163, 0x11BB] }, +{ source: [0xB331], NFC: [0xB331], NFD: [0x1103, 0x1163, 0x11BC], NFKC: [0xB331], NFKD: [0x1103, 0x1163, 0x11BC] }, +{ source: [0xB332], NFC: [0xB332], NFD: [0x1103, 0x1163, 0x11BD], NFKC: [0xB332], NFKD: [0x1103, 0x1163, 0x11BD] }, +{ source: [0xB333], NFC: [0xB333], NFD: [0x1103, 0x1163, 0x11BE], NFKC: [0xB333], NFKD: [0x1103, 0x1163, 0x11BE] }, +{ source: [0xB334], NFC: [0xB334], NFD: [0x1103, 0x1163, 0x11BF], NFKC: [0xB334], NFKD: [0x1103, 0x1163, 0x11BF] }, +{ source: [0xB335], NFC: [0xB335], NFD: [0x1103, 0x1163, 0x11C0], NFKC: [0xB335], NFKD: [0x1103, 0x1163, 0x11C0] }, +{ source: [0xB336], NFC: [0xB336], NFD: [0x1103, 0x1163, 0x11C1], NFKC: [0xB336], NFKD: [0x1103, 0x1163, 0x11C1] }, +{ source: [0xB337], NFC: [0xB337], NFD: [0x1103, 0x1163, 0x11C2], NFKC: [0xB337], NFKD: [0x1103, 0x1163, 0x11C2] }, +{ source: [0xB338], NFC: [0xB338], NFD: [0x1103, 0x1164], NFKC: [0xB338], NFKD: [0x1103, 0x1164] }, +{ source: [0xB339], NFC: [0xB339], NFD: [0x1103, 0x1164, 0x11A8], NFKC: [0xB339], NFKD: [0x1103, 0x1164, 0x11A8] }, +{ source: [0xB33A], NFC: [0xB33A], NFD: [0x1103, 0x1164, 0x11A9], NFKC: [0xB33A], NFKD: [0x1103, 0x1164, 0x11A9] }, +{ source: [0xB33B], NFC: [0xB33B], NFD: [0x1103, 0x1164, 0x11AA], NFKC: [0xB33B], NFKD: [0x1103, 0x1164, 0x11AA] }, +{ source: [0xB33C], NFC: [0xB33C], NFD: [0x1103, 0x1164, 0x11AB], NFKC: [0xB33C], NFKD: [0x1103, 0x1164, 0x11AB] }, +{ source: [0xB33D], NFC: [0xB33D], NFD: [0x1103, 0x1164, 0x11AC], NFKC: [0xB33D], NFKD: [0x1103, 0x1164, 0x11AC] }, +{ source: [0xB33E], NFC: [0xB33E], NFD: [0x1103, 0x1164, 0x11AD], NFKC: [0xB33E], NFKD: [0x1103, 0x1164, 0x11AD] }, +{ source: [0xB33F], NFC: [0xB33F], NFD: [0x1103, 0x1164, 0x11AE], NFKC: [0xB33F], NFKD: [0x1103, 0x1164, 0x11AE] }, +{ source: [0xB340], NFC: [0xB340], NFD: [0x1103, 0x1164, 0x11AF], NFKC: [0xB340], NFKD: [0x1103, 0x1164, 0x11AF] }, +{ source: [0xB341], NFC: [0xB341], NFD: [0x1103, 0x1164, 0x11B0], NFKC: [0xB341], NFKD: [0x1103, 0x1164, 0x11B0] }, +{ source: [0xB342], NFC: [0xB342], NFD: [0x1103, 0x1164, 0x11B1], NFKC: [0xB342], NFKD: [0x1103, 0x1164, 0x11B1] }, +{ source: [0xB343], NFC: [0xB343], NFD: [0x1103, 0x1164, 0x11B2], NFKC: [0xB343], NFKD: [0x1103, 0x1164, 0x11B2] }, +{ source: [0xB344], NFC: [0xB344], NFD: [0x1103, 0x1164, 0x11B3], NFKC: [0xB344], NFKD: [0x1103, 0x1164, 0x11B3] }, +{ source: [0xB345], NFC: [0xB345], NFD: [0x1103, 0x1164, 0x11B4], NFKC: [0xB345], NFKD: [0x1103, 0x1164, 0x11B4] }, +{ source: [0xB346], NFC: [0xB346], NFD: [0x1103, 0x1164, 0x11B5], NFKC: [0xB346], NFKD: [0x1103, 0x1164, 0x11B5] }, +{ source: [0xB347], NFC: [0xB347], NFD: [0x1103, 0x1164, 0x11B6], NFKC: [0xB347], NFKD: [0x1103, 0x1164, 0x11B6] }, +{ source: [0xB348], NFC: [0xB348], NFD: [0x1103, 0x1164, 0x11B7], NFKC: [0xB348], NFKD: [0x1103, 0x1164, 0x11B7] }, +{ source: [0xB349], NFC: [0xB349], NFD: [0x1103, 0x1164, 0x11B8], NFKC: [0xB349], NFKD: [0x1103, 0x1164, 0x11B8] }, +{ source: [0xB34A], NFC: [0xB34A], NFD: [0x1103, 0x1164, 0x11B9], NFKC: [0xB34A], NFKD: [0x1103, 0x1164, 0x11B9] }, +{ source: [0xB34B], NFC: [0xB34B], NFD: [0x1103, 0x1164, 0x11BA], NFKC: [0xB34B], NFKD: [0x1103, 0x1164, 0x11BA] }, +{ source: [0xB34C], NFC: [0xB34C], NFD: [0x1103, 0x1164, 0x11BB], NFKC: [0xB34C], NFKD: [0x1103, 0x1164, 0x11BB] }, +{ source: [0xB34D], NFC: [0xB34D], NFD: [0x1103, 0x1164, 0x11BC], NFKC: [0xB34D], NFKD: [0x1103, 0x1164, 0x11BC] }, +{ source: [0xB34E], NFC: [0xB34E], NFD: [0x1103, 0x1164, 0x11BD], NFKC: [0xB34E], NFKD: [0x1103, 0x1164, 0x11BD] }, +{ source: [0xB34F], NFC: [0xB34F], NFD: [0x1103, 0x1164, 0x11BE], NFKC: [0xB34F], NFKD: [0x1103, 0x1164, 0x11BE] }, +{ source: [0xB350], NFC: [0xB350], NFD: [0x1103, 0x1164, 0x11BF], NFKC: [0xB350], NFKD: [0x1103, 0x1164, 0x11BF] }, +{ source: [0xB351], NFC: [0xB351], NFD: [0x1103, 0x1164, 0x11C0], NFKC: [0xB351], NFKD: [0x1103, 0x1164, 0x11C0] }, +{ source: [0xB352], NFC: [0xB352], NFD: [0x1103, 0x1164, 0x11C1], NFKC: [0xB352], NFKD: [0x1103, 0x1164, 0x11C1] }, +{ source: [0xB353], NFC: [0xB353], NFD: [0x1103, 0x1164, 0x11C2], NFKC: [0xB353], NFKD: [0x1103, 0x1164, 0x11C2] }, +{ source: [0xB354], NFC: [0xB354], NFD: [0x1103, 0x1165], NFKC: [0xB354], NFKD: [0x1103, 0x1165] }, +{ source: [0xB355], NFC: [0xB355], NFD: [0x1103, 0x1165, 0x11A8], NFKC: [0xB355], NFKD: [0x1103, 0x1165, 0x11A8] }, +{ source: [0xB356], NFC: [0xB356], NFD: [0x1103, 0x1165, 0x11A9], NFKC: [0xB356], NFKD: [0x1103, 0x1165, 0x11A9] }, +{ source: [0xB357], NFC: [0xB357], NFD: [0x1103, 0x1165, 0x11AA], NFKC: [0xB357], NFKD: [0x1103, 0x1165, 0x11AA] }, +{ source: [0xB358], NFC: [0xB358], NFD: [0x1103, 0x1165, 0x11AB], NFKC: [0xB358], NFKD: [0x1103, 0x1165, 0x11AB] }, +{ source: [0xB359], NFC: [0xB359], NFD: [0x1103, 0x1165, 0x11AC], NFKC: [0xB359], NFKD: [0x1103, 0x1165, 0x11AC] }, +{ source: [0xB35A], NFC: [0xB35A], NFD: [0x1103, 0x1165, 0x11AD], NFKC: [0xB35A], NFKD: [0x1103, 0x1165, 0x11AD] }, +{ source: [0xB35B], NFC: [0xB35B], NFD: [0x1103, 0x1165, 0x11AE], NFKC: [0xB35B], NFKD: [0x1103, 0x1165, 0x11AE] }, +{ source: [0xB35C], NFC: [0xB35C], NFD: [0x1103, 0x1165, 0x11AF], NFKC: [0xB35C], NFKD: [0x1103, 0x1165, 0x11AF] }, +{ source: [0xB35D], NFC: [0xB35D], NFD: [0x1103, 0x1165, 0x11B0], NFKC: [0xB35D], NFKD: [0x1103, 0x1165, 0x11B0] }, +{ source: [0xB35E], NFC: [0xB35E], NFD: [0x1103, 0x1165, 0x11B1], NFKC: [0xB35E], NFKD: [0x1103, 0x1165, 0x11B1] }, +{ source: [0xB35F], NFC: [0xB35F], NFD: [0x1103, 0x1165, 0x11B2], NFKC: [0xB35F], NFKD: [0x1103, 0x1165, 0x11B2] }, +{ source: [0xB360], NFC: [0xB360], NFD: [0x1103, 0x1165, 0x11B3], NFKC: [0xB360], NFKD: [0x1103, 0x1165, 0x11B3] }, +{ source: [0xB361], NFC: [0xB361], NFD: [0x1103, 0x1165, 0x11B4], NFKC: [0xB361], NFKD: [0x1103, 0x1165, 0x11B4] }, +{ source: [0xB362], NFC: [0xB362], NFD: [0x1103, 0x1165, 0x11B5], NFKC: [0xB362], NFKD: [0x1103, 0x1165, 0x11B5] }, +{ source: [0xB363], NFC: [0xB363], NFD: [0x1103, 0x1165, 0x11B6], NFKC: [0xB363], NFKD: [0x1103, 0x1165, 0x11B6] }, +{ source: [0xB364], NFC: [0xB364], NFD: [0x1103, 0x1165, 0x11B7], NFKC: [0xB364], NFKD: [0x1103, 0x1165, 0x11B7] }, +{ source: [0xB365], NFC: [0xB365], NFD: [0x1103, 0x1165, 0x11B8], NFKC: [0xB365], NFKD: [0x1103, 0x1165, 0x11B8] }, +{ source: [0xB366], NFC: [0xB366], NFD: [0x1103, 0x1165, 0x11B9], NFKC: [0xB366], NFKD: [0x1103, 0x1165, 0x11B9] }, +{ source: [0xB367], NFC: [0xB367], NFD: [0x1103, 0x1165, 0x11BA], NFKC: [0xB367], NFKD: [0x1103, 0x1165, 0x11BA] }, +{ source: [0xB368], NFC: [0xB368], NFD: [0x1103, 0x1165, 0x11BB], NFKC: [0xB368], NFKD: [0x1103, 0x1165, 0x11BB] }, +{ source: [0xB369], NFC: [0xB369], NFD: [0x1103, 0x1165, 0x11BC], NFKC: [0xB369], NFKD: [0x1103, 0x1165, 0x11BC] }, +{ source: [0xB36A], NFC: [0xB36A], NFD: [0x1103, 0x1165, 0x11BD], NFKC: [0xB36A], NFKD: [0x1103, 0x1165, 0x11BD] }, +{ source: [0xB36B], NFC: [0xB36B], NFD: [0x1103, 0x1165, 0x11BE], NFKC: [0xB36B], NFKD: [0x1103, 0x1165, 0x11BE] }, +{ source: [0xB36C], NFC: [0xB36C], NFD: [0x1103, 0x1165, 0x11BF], NFKC: [0xB36C], NFKD: [0x1103, 0x1165, 0x11BF] }, +{ source: [0xB36D], NFC: [0xB36D], NFD: [0x1103, 0x1165, 0x11C0], NFKC: [0xB36D], NFKD: [0x1103, 0x1165, 0x11C0] }, +{ source: [0xB36E], NFC: [0xB36E], NFD: [0x1103, 0x1165, 0x11C1], NFKC: [0xB36E], NFKD: [0x1103, 0x1165, 0x11C1] }, +{ source: [0xB36F], NFC: [0xB36F], NFD: [0x1103, 0x1165, 0x11C2], NFKC: [0xB36F], NFKD: [0x1103, 0x1165, 0x11C2] }, +{ source: [0xB370], NFC: [0xB370], NFD: [0x1103, 0x1166], NFKC: [0xB370], NFKD: [0x1103, 0x1166] }, +{ source: [0xB371], NFC: [0xB371], NFD: [0x1103, 0x1166, 0x11A8], NFKC: [0xB371], NFKD: [0x1103, 0x1166, 0x11A8] }, +{ source: [0xB372], NFC: [0xB372], NFD: [0x1103, 0x1166, 0x11A9], NFKC: [0xB372], NFKD: [0x1103, 0x1166, 0x11A9] }, +{ source: [0xB373], NFC: [0xB373], NFD: [0x1103, 0x1166, 0x11AA], NFKC: [0xB373], NFKD: [0x1103, 0x1166, 0x11AA] }, +{ source: [0xB374], NFC: [0xB374], NFD: [0x1103, 0x1166, 0x11AB], NFKC: [0xB374], NFKD: [0x1103, 0x1166, 0x11AB] }, +{ source: [0xB375], NFC: [0xB375], NFD: [0x1103, 0x1166, 0x11AC], NFKC: [0xB375], NFKD: [0x1103, 0x1166, 0x11AC] }, +{ source: [0xB376], NFC: [0xB376], NFD: [0x1103, 0x1166, 0x11AD], NFKC: [0xB376], NFKD: [0x1103, 0x1166, 0x11AD] }, +{ source: [0xB377], NFC: [0xB377], NFD: [0x1103, 0x1166, 0x11AE], NFKC: [0xB377], NFKD: [0x1103, 0x1166, 0x11AE] }, +{ source: [0xB378], NFC: [0xB378], NFD: [0x1103, 0x1166, 0x11AF], NFKC: [0xB378], NFKD: [0x1103, 0x1166, 0x11AF] }, +{ source: [0xB379], NFC: [0xB379], NFD: [0x1103, 0x1166, 0x11B0], NFKC: [0xB379], NFKD: [0x1103, 0x1166, 0x11B0] }, +{ source: [0xB37A], NFC: [0xB37A], NFD: [0x1103, 0x1166, 0x11B1], NFKC: [0xB37A], NFKD: [0x1103, 0x1166, 0x11B1] }, +{ source: [0xB37B], NFC: [0xB37B], NFD: [0x1103, 0x1166, 0x11B2], NFKC: [0xB37B], NFKD: [0x1103, 0x1166, 0x11B2] }, +{ source: [0xB37C], NFC: [0xB37C], NFD: [0x1103, 0x1166, 0x11B3], NFKC: [0xB37C], NFKD: [0x1103, 0x1166, 0x11B3] }, +{ source: [0xB37D], NFC: [0xB37D], NFD: [0x1103, 0x1166, 0x11B4], NFKC: [0xB37D], NFKD: [0x1103, 0x1166, 0x11B4] }, +{ source: [0xB37E], NFC: [0xB37E], NFD: [0x1103, 0x1166, 0x11B5], NFKC: [0xB37E], NFKD: [0x1103, 0x1166, 0x11B5] }, +{ source: [0xB37F], NFC: [0xB37F], NFD: [0x1103, 0x1166, 0x11B6], NFKC: [0xB37F], NFKD: [0x1103, 0x1166, 0x11B6] }, +{ source: [0xB380], NFC: [0xB380], NFD: [0x1103, 0x1166, 0x11B7], NFKC: [0xB380], NFKD: [0x1103, 0x1166, 0x11B7] }, +{ source: [0xB381], NFC: [0xB381], NFD: [0x1103, 0x1166, 0x11B8], NFKC: [0xB381], NFKD: [0x1103, 0x1166, 0x11B8] }, +{ source: [0xB382], NFC: [0xB382], NFD: [0x1103, 0x1166, 0x11B9], NFKC: [0xB382], NFKD: [0x1103, 0x1166, 0x11B9] }, +{ source: [0xB383], NFC: [0xB383], NFD: [0x1103, 0x1166, 0x11BA], NFKC: [0xB383], NFKD: [0x1103, 0x1166, 0x11BA] }, +{ source: [0xB384], NFC: [0xB384], NFD: [0x1103, 0x1166, 0x11BB], NFKC: [0xB384], NFKD: [0x1103, 0x1166, 0x11BB] }, +{ source: [0xB385], NFC: [0xB385], NFD: [0x1103, 0x1166, 0x11BC], NFKC: [0xB385], NFKD: [0x1103, 0x1166, 0x11BC] }, +{ source: [0xB386], NFC: [0xB386], NFD: [0x1103, 0x1166, 0x11BD], NFKC: [0xB386], NFKD: [0x1103, 0x1166, 0x11BD] }, +{ source: [0xB387], NFC: [0xB387], NFD: [0x1103, 0x1166, 0x11BE], NFKC: [0xB387], NFKD: [0x1103, 0x1166, 0x11BE] }, +{ source: [0xB388], NFC: [0xB388], NFD: [0x1103, 0x1166, 0x11BF], NFKC: [0xB388], NFKD: [0x1103, 0x1166, 0x11BF] }, +{ source: [0xB389], NFC: [0xB389], NFD: [0x1103, 0x1166, 0x11C0], NFKC: [0xB389], NFKD: [0x1103, 0x1166, 0x11C0] }, +{ source: [0xB38A], NFC: [0xB38A], NFD: [0x1103, 0x1166, 0x11C1], NFKC: [0xB38A], NFKD: [0x1103, 0x1166, 0x11C1] }, +{ source: [0xB38B], NFC: [0xB38B], NFD: [0x1103, 0x1166, 0x11C2], NFKC: [0xB38B], NFKD: [0x1103, 0x1166, 0x11C2] }, +{ source: [0xB38C], NFC: [0xB38C], NFD: [0x1103, 0x1167], NFKC: [0xB38C], NFKD: [0x1103, 0x1167] }, +{ source: [0xB38D], NFC: [0xB38D], NFD: [0x1103, 0x1167, 0x11A8], NFKC: [0xB38D], NFKD: [0x1103, 0x1167, 0x11A8] }, +{ source: [0xB38E], NFC: [0xB38E], NFD: [0x1103, 0x1167, 0x11A9], NFKC: [0xB38E], NFKD: [0x1103, 0x1167, 0x11A9] }, +{ source: [0xB38F], NFC: [0xB38F], NFD: [0x1103, 0x1167, 0x11AA], NFKC: [0xB38F], NFKD: [0x1103, 0x1167, 0x11AA] }, +{ source: [0xB390], NFC: [0xB390], NFD: [0x1103, 0x1167, 0x11AB], NFKC: [0xB390], NFKD: [0x1103, 0x1167, 0x11AB] }, +{ source: [0xB391], NFC: [0xB391], NFD: [0x1103, 0x1167, 0x11AC], NFKC: [0xB391], NFKD: [0x1103, 0x1167, 0x11AC] }, +{ source: [0xB392], NFC: [0xB392], NFD: [0x1103, 0x1167, 0x11AD], NFKC: [0xB392], NFKD: [0x1103, 0x1167, 0x11AD] }, +{ source: [0xB393], NFC: [0xB393], NFD: [0x1103, 0x1167, 0x11AE], NFKC: [0xB393], NFKD: [0x1103, 0x1167, 0x11AE] }, +{ source: [0xB394], NFC: [0xB394], NFD: [0x1103, 0x1167, 0x11AF], NFKC: [0xB394], NFKD: [0x1103, 0x1167, 0x11AF] }, +{ source: [0xB395], NFC: [0xB395], NFD: [0x1103, 0x1167, 0x11B0], NFKC: [0xB395], NFKD: [0x1103, 0x1167, 0x11B0] }, +{ source: [0xB396], NFC: [0xB396], NFD: [0x1103, 0x1167, 0x11B1], NFKC: [0xB396], NFKD: [0x1103, 0x1167, 0x11B1] }, +{ source: [0xB397], NFC: [0xB397], NFD: [0x1103, 0x1167, 0x11B2], NFKC: [0xB397], NFKD: [0x1103, 0x1167, 0x11B2] }, +{ source: [0xB398], NFC: [0xB398], NFD: [0x1103, 0x1167, 0x11B3], NFKC: [0xB398], NFKD: [0x1103, 0x1167, 0x11B3] }, +{ source: [0xB399], NFC: [0xB399], NFD: [0x1103, 0x1167, 0x11B4], NFKC: [0xB399], NFKD: [0x1103, 0x1167, 0x11B4] }, +{ source: [0xB39A], NFC: [0xB39A], NFD: [0x1103, 0x1167, 0x11B5], NFKC: [0xB39A], NFKD: [0x1103, 0x1167, 0x11B5] }, +{ source: [0xB39B], NFC: [0xB39B], NFD: [0x1103, 0x1167, 0x11B6], NFKC: [0xB39B], NFKD: [0x1103, 0x1167, 0x11B6] }, +{ source: [0xB39C], NFC: [0xB39C], NFD: [0x1103, 0x1167, 0x11B7], NFKC: [0xB39C], NFKD: [0x1103, 0x1167, 0x11B7] }, +{ source: [0xB39D], NFC: [0xB39D], NFD: [0x1103, 0x1167, 0x11B8], NFKC: [0xB39D], NFKD: [0x1103, 0x1167, 0x11B8] }, +{ source: [0xB39E], NFC: [0xB39E], NFD: [0x1103, 0x1167, 0x11B9], NFKC: [0xB39E], NFKD: [0x1103, 0x1167, 0x11B9] }, +{ source: [0xB39F], NFC: [0xB39F], NFD: [0x1103, 0x1167, 0x11BA], NFKC: [0xB39F], NFKD: [0x1103, 0x1167, 0x11BA] }, +{ source: [0xB3A0], NFC: [0xB3A0], NFD: [0x1103, 0x1167, 0x11BB], NFKC: [0xB3A0], NFKD: [0x1103, 0x1167, 0x11BB] }, +{ source: [0xB3A1], NFC: [0xB3A1], NFD: [0x1103, 0x1167, 0x11BC], NFKC: [0xB3A1], NFKD: [0x1103, 0x1167, 0x11BC] }, +{ source: [0xB3A2], NFC: [0xB3A2], NFD: [0x1103, 0x1167, 0x11BD], NFKC: [0xB3A2], NFKD: [0x1103, 0x1167, 0x11BD] }, +{ source: [0xB3A3], NFC: [0xB3A3], NFD: [0x1103, 0x1167, 0x11BE], NFKC: [0xB3A3], NFKD: [0x1103, 0x1167, 0x11BE] }, +{ source: [0xB3A4], NFC: [0xB3A4], NFD: [0x1103, 0x1167, 0x11BF], NFKC: [0xB3A4], NFKD: [0x1103, 0x1167, 0x11BF] }, +{ source: [0xB3A5], NFC: [0xB3A5], NFD: [0x1103, 0x1167, 0x11C0], NFKC: [0xB3A5], NFKD: [0x1103, 0x1167, 0x11C0] }, +{ source: [0xB3A6], NFC: [0xB3A6], NFD: [0x1103, 0x1167, 0x11C1], NFKC: [0xB3A6], NFKD: [0x1103, 0x1167, 0x11C1] }, +{ source: [0xB3A7], NFC: [0xB3A7], NFD: [0x1103, 0x1167, 0x11C2], NFKC: [0xB3A7], NFKD: [0x1103, 0x1167, 0x11C2] }, +{ source: [0xB3A8], NFC: [0xB3A8], NFD: [0x1103, 0x1168], NFKC: [0xB3A8], NFKD: [0x1103, 0x1168] }, +{ source: [0xB3A9], NFC: [0xB3A9], NFD: [0x1103, 0x1168, 0x11A8], NFKC: [0xB3A9], NFKD: [0x1103, 0x1168, 0x11A8] }, +{ source: [0xB3AA], NFC: [0xB3AA], NFD: [0x1103, 0x1168, 0x11A9], NFKC: [0xB3AA], NFKD: [0x1103, 0x1168, 0x11A9] }, +{ source: [0xB3AB], NFC: [0xB3AB], NFD: [0x1103, 0x1168, 0x11AA], NFKC: [0xB3AB], NFKD: [0x1103, 0x1168, 0x11AA] }, +{ source: [0xB3AC], NFC: [0xB3AC], NFD: [0x1103, 0x1168, 0x11AB], NFKC: [0xB3AC], NFKD: [0x1103, 0x1168, 0x11AB] }, +{ source: [0xB3AD], NFC: [0xB3AD], NFD: [0x1103, 0x1168, 0x11AC], NFKC: [0xB3AD], NFKD: [0x1103, 0x1168, 0x11AC] }, +{ source: [0xB3AE], NFC: [0xB3AE], NFD: [0x1103, 0x1168, 0x11AD], NFKC: [0xB3AE], NFKD: [0x1103, 0x1168, 0x11AD] }, +{ source: [0xB3AF], NFC: [0xB3AF], NFD: [0x1103, 0x1168, 0x11AE], NFKC: [0xB3AF], NFKD: [0x1103, 0x1168, 0x11AE] }, +{ source: [0xB3B0], NFC: [0xB3B0], NFD: [0x1103, 0x1168, 0x11AF], NFKC: [0xB3B0], NFKD: [0x1103, 0x1168, 0x11AF] }, +{ source: [0xB3B1], NFC: [0xB3B1], NFD: [0x1103, 0x1168, 0x11B0], NFKC: [0xB3B1], NFKD: [0x1103, 0x1168, 0x11B0] }, +{ source: [0xB3B2], NFC: [0xB3B2], NFD: [0x1103, 0x1168, 0x11B1], NFKC: [0xB3B2], NFKD: [0x1103, 0x1168, 0x11B1] }, +{ source: [0xB3B3], NFC: [0xB3B3], NFD: [0x1103, 0x1168, 0x11B2], NFKC: [0xB3B3], NFKD: [0x1103, 0x1168, 0x11B2] }, +{ source: [0xB3B4], NFC: [0xB3B4], NFD: [0x1103, 0x1168, 0x11B3], NFKC: [0xB3B4], NFKD: [0x1103, 0x1168, 0x11B3] }, +{ source: [0xB3B5], NFC: [0xB3B5], NFD: [0x1103, 0x1168, 0x11B4], NFKC: [0xB3B5], NFKD: [0x1103, 0x1168, 0x11B4] }, +{ source: [0xB3B6], NFC: [0xB3B6], NFD: [0x1103, 0x1168, 0x11B5], NFKC: [0xB3B6], NFKD: [0x1103, 0x1168, 0x11B5] }, +{ source: [0xB3B7], NFC: [0xB3B7], NFD: [0x1103, 0x1168, 0x11B6], NFKC: [0xB3B7], NFKD: [0x1103, 0x1168, 0x11B6] }, +{ source: [0xB3B8], NFC: [0xB3B8], NFD: [0x1103, 0x1168, 0x11B7], NFKC: [0xB3B8], NFKD: [0x1103, 0x1168, 0x11B7] }, +{ source: [0xB3B9], NFC: [0xB3B9], NFD: [0x1103, 0x1168, 0x11B8], NFKC: [0xB3B9], NFKD: [0x1103, 0x1168, 0x11B8] }, +{ source: [0xB3BA], NFC: [0xB3BA], NFD: [0x1103, 0x1168, 0x11B9], NFKC: [0xB3BA], NFKD: [0x1103, 0x1168, 0x11B9] }, +{ source: [0xB3BB], NFC: [0xB3BB], NFD: [0x1103, 0x1168, 0x11BA], NFKC: [0xB3BB], NFKD: [0x1103, 0x1168, 0x11BA] }, +{ source: [0xB3BC], NFC: [0xB3BC], NFD: [0x1103, 0x1168, 0x11BB], NFKC: [0xB3BC], NFKD: [0x1103, 0x1168, 0x11BB] }, +{ source: [0xB3BD], NFC: [0xB3BD], NFD: [0x1103, 0x1168, 0x11BC], NFKC: [0xB3BD], NFKD: [0x1103, 0x1168, 0x11BC] }, +{ source: [0xB3BE], NFC: [0xB3BE], NFD: [0x1103, 0x1168, 0x11BD], NFKC: [0xB3BE], NFKD: [0x1103, 0x1168, 0x11BD] }, +{ source: [0xB3BF], NFC: [0xB3BF], NFD: [0x1103, 0x1168, 0x11BE], NFKC: [0xB3BF], NFKD: [0x1103, 0x1168, 0x11BE] }, +{ source: [0xB3C0], NFC: [0xB3C0], NFD: [0x1103, 0x1168, 0x11BF], NFKC: [0xB3C0], NFKD: [0x1103, 0x1168, 0x11BF] }, +{ source: [0xB3C1], NFC: [0xB3C1], NFD: [0x1103, 0x1168, 0x11C0], NFKC: [0xB3C1], NFKD: [0x1103, 0x1168, 0x11C0] }, +{ source: [0xB3C2], NFC: [0xB3C2], NFD: [0x1103, 0x1168, 0x11C1], NFKC: [0xB3C2], NFKD: [0x1103, 0x1168, 0x11C1] }, +{ source: [0xB3C3], NFC: [0xB3C3], NFD: [0x1103, 0x1168, 0x11C2], NFKC: [0xB3C3], NFKD: [0x1103, 0x1168, 0x11C2] }, +{ source: [0xB3C4], NFC: [0xB3C4], NFD: [0x1103, 0x1169], NFKC: [0xB3C4], NFKD: [0x1103, 0x1169] }, +{ source: [0xB3C5], NFC: [0xB3C5], NFD: [0x1103, 0x1169, 0x11A8], NFKC: [0xB3C5], NFKD: [0x1103, 0x1169, 0x11A8] }, +{ source: [0xB3C6], NFC: [0xB3C6], NFD: [0x1103, 0x1169, 0x11A9], NFKC: [0xB3C6], NFKD: [0x1103, 0x1169, 0x11A9] }, +{ source: [0xB3C7], NFC: [0xB3C7], NFD: [0x1103, 0x1169, 0x11AA], NFKC: [0xB3C7], NFKD: [0x1103, 0x1169, 0x11AA] }, +{ source: [0xB3C8], NFC: [0xB3C8], NFD: [0x1103, 0x1169, 0x11AB], NFKC: [0xB3C8], NFKD: [0x1103, 0x1169, 0x11AB] }, +{ source: [0xB3C9], NFC: [0xB3C9], NFD: [0x1103, 0x1169, 0x11AC], NFKC: [0xB3C9], NFKD: [0x1103, 0x1169, 0x11AC] }, +{ source: [0xB3CA], NFC: [0xB3CA], NFD: [0x1103, 0x1169, 0x11AD], NFKC: [0xB3CA], NFKD: [0x1103, 0x1169, 0x11AD] }, +{ source: [0xB3CB], NFC: [0xB3CB], NFD: [0x1103, 0x1169, 0x11AE], NFKC: [0xB3CB], NFKD: [0x1103, 0x1169, 0x11AE] }, +{ source: [0xB3CC], NFC: [0xB3CC], NFD: [0x1103, 0x1169, 0x11AF], NFKC: [0xB3CC], NFKD: [0x1103, 0x1169, 0x11AF] }, +{ source: [0xB3CD], NFC: [0xB3CD], NFD: [0x1103, 0x1169, 0x11B0], NFKC: [0xB3CD], NFKD: [0x1103, 0x1169, 0x11B0] }, +{ source: [0xB3CE], NFC: [0xB3CE], NFD: [0x1103, 0x1169, 0x11B1], NFKC: [0xB3CE], NFKD: [0x1103, 0x1169, 0x11B1] }, +{ source: [0xB3CF], NFC: [0xB3CF], NFD: [0x1103, 0x1169, 0x11B2], NFKC: [0xB3CF], NFKD: [0x1103, 0x1169, 0x11B2] }, +{ source: [0xB3D0], NFC: [0xB3D0], NFD: [0x1103, 0x1169, 0x11B3], NFKC: [0xB3D0], NFKD: [0x1103, 0x1169, 0x11B3] }, +{ source: [0xB3D1], NFC: [0xB3D1], NFD: [0x1103, 0x1169, 0x11B4], NFKC: [0xB3D1], NFKD: [0x1103, 0x1169, 0x11B4] }, +{ source: [0xB3D2], NFC: [0xB3D2], NFD: [0x1103, 0x1169, 0x11B5], NFKC: [0xB3D2], NFKD: [0x1103, 0x1169, 0x11B5] }, +{ source: [0xB3D3], NFC: [0xB3D3], NFD: [0x1103, 0x1169, 0x11B6], NFKC: [0xB3D3], NFKD: [0x1103, 0x1169, 0x11B6] }, +{ source: [0xB3D4], NFC: [0xB3D4], NFD: [0x1103, 0x1169, 0x11B7], NFKC: [0xB3D4], NFKD: [0x1103, 0x1169, 0x11B7] }, +{ source: [0xB3D5], NFC: [0xB3D5], NFD: [0x1103, 0x1169, 0x11B8], NFKC: [0xB3D5], NFKD: [0x1103, 0x1169, 0x11B8] }, +{ source: [0xB3D6], NFC: [0xB3D6], NFD: [0x1103, 0x1169, 0x11B9], NFKC: [0xB3D6], NFKD: [0x1103, 0x1169, 0x11B9] }, +{ source: [0xB3D7], NFC: [0xB3D7], NFD: [0x1103, 0x1169, 0x11BA], NFKC: [0xB3D7], NFKD: [0x1103, 0x1169, 0x11BA] }, +{ source: [0xB3D8], NFC: [0xB3D8], NFD: [0x1103, 0x1169, 0x11BB], NFKC: [0xB3D8], NFKD: [0x1103, 0x1169, 0x11BB] }, +{ source: [0xB3D9], NFC: [0xB3D9], NFD: [0x1103, 0x1169, 0x11BC], NFKC: [0xB3D9], NFKD: [0x1103, 0x1169, 0x11BC] }, +{ source: [0xB3DA], NFC: [0xB3DA], NFD: [0x1103, 0x1169, 0x11BD], NFKC: [0xB3DA], NFKD: [0x1103, 0x1169, 0x11BD] }, +{ source: [0xB3DB], NFC: [0xB3DB], NFD: [0x1103, 0x1169, 0x11BE], NFKC: [0xB3DB], NFKD: [0x1103, 0x1169, 0x11BE] }, +{ source: [0xB3DC], NFC: [0xB3DC], NFD: [0x1103, 0x1169, 0x11BF], NFKC: [0xB3DC], NFKD: [0x1103, 0x1169, 0x11BF] }, +{ source: [0xB3DD], NFC: [0xB3DD], NFD: [0x1103, 0x1169, 0x11C0], NFKC: [0xB3DD], NFKD: [0x1103, 0x1169, 0x11C0] }, +{ source: [0xB3DE], NFC: [0xB3DE], NFD: [0x1103, 0x1169, 0x11C1], NFKC: [0xB3DE], NFKD: [0x1103, 0x1169, 0x11C1] }, +{ source: [0xB3DF], NFC: [0xB3DF], NFD: [0x1103, 0x1169, 0x11C2], NFKC: [0xB3DF], NFKD: [0x1103, 0x1169, 0x11C2] }, +{ source: [0xB3E0], NFC: [0xB3E0], NFD: [0x1103, 0x116A], NFKC: [0xB3E0], NFKD: [0x1103, 0x116A] }, +{ source: [0xB3E1], NFC: [0xB3E1], NFD: [0x1103, 0x116A, 0x11A8], NFKC: [0xB3E1], NFKD: [0x1103, 0x116A, 0x11A8] }, +{ source: [0xB3E2], NFC: [0xB3E2], NFD: [0x1103, 0x116A, 0x11A9], NFKC: [0xB3E2], NFKD: [0x1103, 0x116A, 0x11A9] }, +{ source: [0xB3E3], NFC: [0xB3E3], NFD: [0x1103, 0x116A, 0x11AA], NFKC: [0xB3E3], NFKD: [0x1103, 0x116A, 0x11AA] }, +{ source: [0xB3E4], NFC: [0xB3E4], NFD: [0x1103, 0x116A, 0x11AB], NFKC: [0xB3E4], NFKD: [0x1103, 0x116A, 0x11AB] }, +{ source: [0xB3E5], NFC: [0xB3E5], NFD: [0x1103, 0x116A, 0x11AC], NFKC: [0xB3E5], NFKD: [0x1103, 0x116A, 0x11AC] }, +{ source: [0xB3E6], NFC: [0xB3E6], NFD: [0x1103, 0x116A, 0x11AD], NFKC: [0xB3E6], NFKD: [0x1103, 0x116A, 0x11AD] }, +{ source: [0xB3E7], NFC: [0xB3E7], NFD: [0x1103, 0x116A, 0x11AE], NFKC: [0xB3E7], NFKD: [0x1103, 0x116A, 0x11AE] }, +{ source: [0xB3E8], NFC: [0xB3E8], NFD: [0x1103, 0x116A, 0x11AF], NFKC: [0xB3E8], NFKD: [0x1103, 0x116A, 0x11AF] }, +{ source: [0xB3E9], NFC: [0xB3E9], NFD: [0x1103, 0x116A, 0x11B0], NFKC: [0xB3E9], NFKD: [0x1103, 0x116A, 0x11B0] }, +{ source: [0xB3EA], NFC: [0xB3EA], NFD: [0x1103, 0x116A, 0x11B1], NFKC: [0xB3EA], NFKD: [0x1103, 0x116A, 0x11B1] }, +{ source: [0xB3EB], NFC: [0xB3EB], NFD: [0x1103, 0x116A, 0x11B2], NFKC: [0xB3EB], NFKD: [0x1103, 0x116A, 0x11B2] }, +{ source: [0xB3EC], NFC: [0xB3EC], NFD: [0x1103, 0x116A, 0x11B3], NFKC: [0xB3EC], NFKD: [0x1103, 0x116A, 0x11B3] }, +{ source: [0xB3ED], NFC: [0xB3ED], NFD: [0x1103, 0x116A, 0x11B4], NFKC: [0xB3ED], NFKD: [0x1103, 0x116A, 0x11B4] }, +{ source: [0xB3EE], NFC: [0xB3EE], NFD: [0x1103, 0x116A, 0x11B5], NFKC: [0xB3EE], NFKD: [0x1103, 0x116A, 0x11B5] }, +{ source: [0xB3EF], NFC: [0xB3EF], NFD: [0x1103, 0x116A, 0x11B6], NFKC: [0xB3EF], NFKD: [0x1103, 0x116A, 0x11B6] }, +{ source: [0xB3F0], NFC: [0xB3F0], NFD: [0x1103, 0x116A, 0x11B7], NFKC: [0xB3F0], NFKD: [0x1103, 0x116A, 0x11B7] }, +{ source: [0xB3F1], NFC: [0xB3F1], NFD: [0x1103, 0x116A, 0x11B8], NFKC: [0xB3F1], NFKD: [0x1103, 0x116A, 0x11B8] }, +{ source: [0xB3F2], NFC: [0xB3F2], NFD: [0x1103, 0x116A, 0x11B9], NFKC: [0xB3F2], NFKD: [0x1103, 0x116A, 0x11B9] }, +{ source: [0xB3F3], NFC: [0xB3F3], NFD: [0x1103, 0x116A, 0x11BA], NFKC: [0xB3F3], NFKD: [0x1103, 0x116A, 0x11BA] }, +{ source: [0xB3F4], NFC: [0xB3F4], NFD: [0x1103, 0x116A, 0x11BB], NFKC: [0xB3F4], NFKD: [0x1103, 0x116A, 0x11BB] }, +{ source: [0xB3F5], NFC: [0xB3F5], NFD: [0x1103, 0x116A, 0x11BC], NFKC: [0xB3F5], NFKD: [0x1103, 0x116A, 0x11BC] }, +{ source: [0xB3F6], NFC: [0xB3F6], NFD: [0x1103, 0x116A, 0x11BD], NFKC: [0xB3F6], NFKD: [0x1103, 0x116A, 0x11BD] }, +{ source: [0xB3F7], NFC: [0xB3F7], NFD: [0x1103, 0x116A, 0x11BE], NFKC: [0xB3F7], NFKD: [0x1103, 0x116A, 0x11BE] }, +{ source: [0xB3F8], NFC: [0xB3F8], NFD: [0x1103, 0x116A, 0x11BF], NFKC: [0xB3F8], NFKD: [0x1103, 0x116A, 0x11BF] }, +{ source: [0xB3F9], NFC: [0xB3F9], NFD: [0x1103, 0x116A, 0x11C0], NFKC: [0xB3F9], NFKD: [0x1103, 0x116A, 0x11C0] }, +{ source: [0xB3FA], NFC: [0xB3FA], NFD: [0x1103, 0x116A, 0x11C1], NFKC: [0xB3FA], NFKD: [0x1103, 0x116A, 0x11C1] }, +{ source: [0xB3FB], NFC: [0xB3FB], NFD: [0x1103, 0x116A, 0x11C2], NFKC: [0xB3FB], NFKD: [0x1103, 0x116A, 0x11C2] }, +{ source: [0xB3FC], NFC: [0xB3FC], NFD: [0x1103, 0x116B], NFKC: [0xB3FC], NFKD: [0x1103, 0x116B] }, +{ source: [0xB3FD], NFC: [0xB3FD], NFD: [0x1103, 0x116B, 0x11A8], NFKC: [0xB3FD], NFKD: [0x1103, 0x116B, 0x11A8] }, +{ source: [0xB3FE], NFC: [0xB3FE], NFD: [0x1103, 0x116B, 0x11A9], NFKC: [0xB3FE], NFKD: [0x1103, 0x116B, 0x11A9] }, +{ source: [0xB3FF], NFC: [0xB3FF], NFD: [0x1103, 0x116B, 0x11AA], NFKC: [0xB3FF], NFKD: [0x1103, 0x116B, 0x11AA] }, +{ source: [0xB400], NFC: [0xB400], NFD: [0x1103, 0x116B, 0x11AB], NFKC: [0xB400], NFKD: [0x1103, 0x116B, 0x11AB] }, +{ source: [0xB401], NFC: [0xB401], NFD: [0x1103, 0x116B, 0x11AC], NFKC: [0xB401], NFKD: [0x1103, 0x116B, 0x11AC] }, +{ source: [0xB402], NFC: [0xB402], NFD: [0x1103, 0x116B, 0x11AD], NFKC: [0xB402], NFKD: [0x1103, 0x116B, 0x11AD] }, +{ source: [0xB403], NFC: [0xB403], NFD: [0x1103, 0x116B, 0x11AE], NFKC: [0xB403], NFKD: [0x1103, 0x116B, 0x11AE] }, +{ source: [0xB404], NFC: [0xB404], NFD: [0x1103, 0x116B, 0x11AF], NFKC: [0xB404], NFKD: [0x1103, 0x116B, 0x11AF] }, +{ source: [0xB405], NFC: [0xB405], NFD: [0x1103, 0x116B, 0x11B0], NFKC: [0xB405], NFKD: [0x1103, 0x116B, 0x11B0] }, +{ source: [0xB406], NFC: [0xB406], NFD: [0x1103, 0x116B, 0x11B1], NFKC: [0xB406], NFKD: [0x1103, 0x116B, 0x11B1] }, +{ source: [0xB407], NFC: [0xB407], NFD: [0x1103, 0x116B, 0x11B2], NFKC: [0xB407], NFKD: [0x1103, 0x116B, 0x11B2] }, +{ source: [0xB408], NFC: [0xB408], NFD: [0x1103, 0x116B, 0x11B3], NFKC: [0xB408], NFKD: [0x1103, 0x116B, 0x11B3] }, +{ source: [0xB409], NFC: [0xB409], NFD: [0x1103, 0x116B, 0x11B4], NFKC: [0xB409], NFKD: [0x1103, 0x116B, 0x11B4] }, +{ source: [0xB40A], NFC: [0xB40A], NFD: [0x1103, 0x116B, 0x11B5], NFKC: [0xB40A], NFKD: [0x1103, 0x116B, 0x11B5] }, +{ source: [0xB40B], NFC: [0xB40B], NFD: [0x1103, 0x116B, 0x11B6], NFKC: [0xB40B], NFKD: [0x1103, 0x116B, 0x11B6] }, +{ source: [0xB40C], NFC: [0xB40C], NFD: [0x1103, 0x116B, 0x11B7], NFKC: [0xB40C], NFKD: [0x1103, 0x116B, 0x11B7] }, +{ source: [0xB40D], NFC: [0xB40D], NFD: [0x1103, 0x116B, 0x11B8], NFKC: [0xB40D], NFKD: [0x1103, 0x116B, 0x11B8] }, +{ source: [0xB40E], NFC: [0xB40E], NFD: [0x1103, 0x116B, 0x11B9], NFKC: [0xB40E], NFKD: [0x1103, 0x116B, 0x11B9] }, +{ source: [0xB40F], NFC: [0xB40F], NFD: [0x1103, 0x116B, 0x11BA], NFKC: [0xB40F], NFKD: [0x1103, 0x116B, 0x11BA] }, +{ source: [0xB410], NFC: [0xB410], NFD: [0x1103, 0x116B, 0x11BB], NFKC: [0xB410], NFKD: [0x1103, 0x116B, 0x11BB] }, +{ source: [0xB411], NFC: [0xB411], NFD: [0x1103, 0x116B, 0x11BC], NFKC: [0xB411], NFKD: [0x1103, 0x116B, 0x11BC] }, +{ source: [0xB412], NFC: [0xB412], NFD: [0x1103, 0x116B, 0x11BD], NFKC: [0xB412], NFKD: [0x1103, 0x116B, 0x11BD] }, +{ source: [0xB413], NFC: [0xB413], NFD: [0x1103, 0x116B, 0x11BE], NFKC: [0xB413], NFKD: [0x1103, 0x116B, 0x11BE] }, +{ source: [0xB414], NFC: [0xB414], NFD: [0x1103, 0x116B, 0x11BF], NFKC: [0xB414], NFKD: [0x1103, 0x116B, 0x11BF] }, +{ source: [0xB415], NFC: [0xB415], NFD: [0x1103, 0x116B, 0x11C0], NFKC: [0xB415], NFKD: [0x1103, 0x116B, 0x11C0] }, +{ source: [0xB416], NFC: [0xB416], NFD: [0x1103, 0x116B, 0x11C1], NFKC: [0xB416], NFKD: [0x1103, 0x116B, 0x11C1] }, +{ source: [0xB417], NFC: [0xB417], NFD: [0x1103, 0x116B, 0x11C2], NFKC: [0xB417], NFKD: [0x1103, 0x116B, 0x11C2] }, +{ source: [0xB418], NFC: [0xB418], NFD: [0x1103, 0x116C], NFKC: [0xB418], NFKD: [0x1103, 0x116C] }, +{ source: [0xB419], NFC: [0xB419], NFD: [0x1103, 0x116C, 0x11A8], NFKC: [0xB419], NFKD: [0x1103, 0x116C, 0x11A8] }, +{ source: [0xB41A], NFC: [0xB41A], NFD: [0x1103, 0x116C, 0x11A9], NFKC: [0xB41A], NFKD: [0x1103, 0x116C, 0x11A9] }, +{ source: [0xB41B], NFC: [0xB41B], NFD: [0x1103, 0x116C, 0x11AA], NFKC: [0xB41B], NFKD: [0x1103, 0x116C, 0x11AA] }, +{ source: [0xB41C], NFC: [0xB41C], NFD: [0x1103, 0x116C, 0x11AB], NFKC: [0xB41C], NFKD: [0x1103, 0x116C, 0x11AB] }, +{ source: [0xB41D], NFC: [0xB41D], NFD: [0x1103, 0x116C, 0x11AC], NFKC: [0xB41D], NFKD: [0x1103, 0x116C, 0x11AC] }, +{ source: [0xB41E], NFC: [0xB41E], NFD: [0x1103, 0x116C, 0x11AD], NFKC: [0xB41E], NFKD: [0x1103, 0x116C, 0x11AD] }, +{ source: [0xB41F], NFC: [0xB41F], NFD: [0x1103, 0x116C, 0x11AE], NFKC: [0xB41F], NFKD: [0x1103, 0x116C, 0x11AE] }, +{ source: [0xB420], NFC: [0xB420], NFD: [0x1103, 0x116C, 0x11AF], NFKC: [0xB420], NFKD: [0x1103, 0x116C, 0x11AF] }, +{ source: [0xB421], NFC: [0xB421], NFD: [0x1103, 0x116C, 0x11B0], NFKC: [0xB421], NFKD: [0x1103, 0x116C, 0x11B0] }, +{ source: [0xB422], NFC: [0xB422], NFD: [0x1103, 0x116C, 0x11B1], NFKC: [0xB422], NFKD: [0x1103, 0x116C, 0x11B1] }, +{ source: [0xB423], NFC: [0xB423], NFD: [0x1103, 0x116C, 0x11B2], NFKC: [0xB423], NFKD: [0x1103, 0x116C, 0x11B2] }, +{ source: [0xB424], NFC: [0xB424], NFD: [0x1103, 0x116C, 0x11B3], NFKC: [0xB424], NFKD: [0x1103, 0x116C, 0x11B3] }, +{ source: [0xB425], NFC: [0xB425], NFD: [0x1103, 0x116C, 0x11B4], NFKC: [0xB425], NFKD: [0x1103, 0x116C, 0x11B4] }, +{ source: [0xB426], NFC: [0xB426], NFD: [0x1103, 0x116C, 0x11B5], NFKC: [0xB426], NFKD: [0x1103, 0x116C, 0x11B5] }, +{ source: [0xB427], NFC: [0xB427], NFD: [0x1103, 0x116C, 0x11B6], NFKC: [0xB427], NFKD: [0x1103, 0x116C, 0x11B6] }, +{ source: [0xB428], NFC: [0xB428], NFD: [0x1103, 0x116C, 0x11B7], NFKC: [0xB428], NFKD: [0x1103, 0x116C, 0x11B7] }, +{ source: [0xB429], NFC: [0xB429], NFD: [0x1103, 0x116C, 0x11B8], NFKC: [0xB429], NFKD: [0x1103, 0x116C, 0x11B8] }, +{ source: [0xB42A], NFC: [0xB42A], NFD: [0x1103, 0x116C, 0x11B9], NFKC: [0xB42A], NFKD: [0x1103, 0x116C, 0x11B9] }, +{ source: [0xB42B], NFC: [0xB42B], NFD: [0x1103, 0x116C, 0x11BA], NFKC: [0xB42B], NFKD: [0x1103, 0x116C, 0x11BA] }, +{ source: [0xB42C], NFC: [0xB42C], NFD: [0x1103, 0x116C, 0x11BB], NFKC: [0xB42C], NFKD: [0x1103, 0x116C, 0x11BB] }, +{ source: [0xB42D], NFC: [0xB42D], NFD: [0x1103, 0x116C, 0x11BC], NFKC: [0xB42D], NFKD: [0x1103, 0x116C, 0x11BC] }, +{ source: [0xB42E], NFC: [0xB42E], NFD: [0x1103, 0x116C, 0x11BD], NFKC: [0xB42E], NFKD: [0x1103, 0x116C, 0x11BD] }, +{ source: [0xB42F], NFC: [0xB42F], NFD: [0x1103, 0x116C, 0x11BE], NFKC: [0xB42F], NFKD: [0x1103, 0x116C, 0x11BE] }, +{ source: [0xB430], NFC: [0xB430], NFD: [0x1103, 0x116C, 0x11BF], NFKC: [0xB430], NFKD: [0x1103, 0x116C, 0x11BF] }, +{ source: [0xB431], NFC: [0xB431], NFD: [0x1103, 0x116C, 0x11C0], NFKC: [0xB431], NFKD: [0x1103, 0x116C, 0x11C0] }, +{ source: [0xB432], NFC: [0xB432], NFD: [0x1103, 0x116C, 0x11C1], NFKC: [0xB432], NFKD: [0x1103, 0x116C, 0x11C1] }, +{ source: [0xB433], NFC: [0xB433], NFD: [0x1103, 0x116C, 0x11C2], NFKC: [0xB433], NFKD: [0x1103, 0x116C, 0x11C2] }, +{ source: [0xB434], NFC: [0xB434], NFD: [0x1103, 0x116D], NFKC: [0xB434], NFKD: [0x1103, 0x116D] }, +{ source: [0xB435], NFC: [0xB435], NFD: [0x1103, 0x116D, 0x11A8], NFKC: [0xB435], NFKD: [0x1103, 0x116D, 0x11A8] }, +{ source: [0xB436], NFC: [0xB436], NFD: [0x1103, 0x116D, 0x11A9], NFKC: [0xB436], NFKD: [0x1103, 0x116D, 0x11A9] }, +{ source: [0xB437], NFC: [0xB437], NFD: [0x1103, 0x116D, 0x11AA], NFKC: [0xB437], NFKD: [0x1103, 0x116D, 0x11AA] }, +{ source: [0xB438], NFC: [0xB438], NFD: [0x1103, 0x116D, 0x11AB], NFKC: [0xB438], NFKD: [0x1103, 0x116D, 0x11AB] }, +{ source: [0xB439], NFC: [0xB439], NFD: [0x1103, 0x116D, 0x11AC], NFKC: [0xB439], NFKD: [0x1103, 0x116D, 0x11AC] }, +{ source: [0xB43A], NFC: [0xB43A], NFD: [0x1103, 0x116D, 0x11AD], NFKC: [0xB43A], NFKD: [0x1103, 0x116D, 0x11AD] }, +{ source: [0xB43B], NFC: [0xB43B], NFD: [0x1103, 0x116D, 0x11AE], NFKC: [0xB43B], NFKD: [0x1103, 0x116D, 0x11AE] }, +{ source: [0xB43C], NFC: [0xB43C], NFD: [0x1103, 0x116D, 0x11AF], NFKC: [0xB43C], NFKD: [0x1103, 0x116D, 0x11AF] }, +{ source: [0xB43D], NFC: [0xB43D], NFD: [0x1103, 0x116D, 0x11B0], NFKC: [0xB43D], NFKD: [0x1103, 0x116D, 0x11B0] }, +{ source: [0xB43E], NFC: [0xB43E], NFD: [0x1103, 0x116D, 0x11B1], NFKC: [0xB43E], NFKD: [0x1103, 0x116D, 0x11B1] }, +{ source: [0xB43F], NFC: [0xB43F], NFD: [0x1103, 0x116D, 0x11B2], NFKC: [0xB43F], NFKD: [0x1103, 0x116D, 0x11B2] }, +{ source: [0xB440], NFC: [0xB440], NFD: [0x1103, 0x116D, 0x11B3], NFKC: [0xB440], NFKD: [0x1103, 0x116D, 0x11B3] }, +{ source: [0xB441], NFC: [0xB441], NFD: [0x1103, 0x116D, 0x11B4], NFKC: [0xB441], NFKD: [0x1103, 0x116D, 0x11B4] }, +{ source: [0xB442], NFC: [0xB442], NFD: [0x1103, 0x116D, 0x11B5], NFKC: [0xB442], NFKD: [0x1103, 0x116D, 0x11B5] }, +{ source: [0xB443], NFC: [0xB443], NFD: [0x1103, 0x116D, 0x11B6], NFKC: [0xB443], NFKD: [0x1103, 0x116D, 0x11B6] }, +{ source: [0xB444], NFC: [0xB444], NFD: [0x1103, 0x116D, 0x11B7], NFKC: [0xB444], NFKD: [0x1103, 0x116D, 0x11B7] }, +{ source: [0xB445], NFC: [0xB445], NFD: [0x1103, 0x116D, 0x11B8], NFKC: [0xB445], NFKD: [0x1103, 0x116D, 0x11B8] }, +{ source: [0xB446], NFC: [0xB446], NFD: [0x1103, 0x116D, 0x11B9], NFKC: [0xB446], NFKD: [0x1103, 0x116D, 0x11B9] }, +{ source: [0xB447], NFC: [0xB447], NFD: [0x1103, 0x116D, 0x11BA], NFKC: [0xB447], NFKD: [0x1103, 0x116D, 0x11BA] }, +{ source: [0xB448], NFC: [0xB448], NFD: [0x1103, 0x116D, 0x11BB], NFKC: [0xB448], NFKD: [0x1103, 0x116D, 0x11BB] }, +{ source: [0xB449], NFC: [0xB449], NFD: [0x1103, 0x116D, 0x11BC], NFKC: [0xB449], NFKD: [0x1103, 0x116D, 0x11BC] }, +{ source: [0xB44A], NFC: [0xB44A], NFD: [0x1103, 0x116D, 0x11BD], NFKC: [0xB44A], NFKD: [0x1103, 0x116D, 0x11BD] }, +{ source: [0xB44B], NFC: [0xB44B], NFD: [0x1103, 0x116D, 0x11BE], NFKC: [0xB44B], NFKD: [0x1103, 0x116D, 0x11BE] }, +{ source: [0xB44C], NFC: [0xB44C], NFD: [0x1103, 0x116D, 0x11BF], NFKC: [0xB44C], NFKD: [0x1103, 0x116D, 0x11BF] }, +{ source: [0xB44D], NFC: [0xB44D], NFD: [0x1103, 0x116D, 0x11C0], NFKC: [0xB44D], NFKD: [0x1103, 0x116D, 0x11C0] }, +{ source: [0xB44E], NFC: [0xB44E], NFD: [0x1103, 0x116D, 0x11C1], NFKC: [0xB44E], NFKD: [0x1103, 0x116D, 0x11C1] }, +{ source: [0xB44F], NFC: [0xB44F], NFD: [0x1103, 0x116D, 0x11C2], NFKC: [0xB44F], NFKD: [0x1103, 0x116D, 0x11C2] }, +{ source: [0xB450], NFC: [0xB450], NFD: [0x1103, 0x116E], NFKC: [0xB450], NFKD: [0x1103, 0x116E] }, +{ source: [0xB451], NFC: [0xB451], NFD: [0x1103, 0x116E, 0x11A8], NFKC: [0xB451], NFKD: [0x1103, 0x116E, 0x11A8] }, +{ source: [0xB452], NFC: [0xB452], NFD: [0x1103, 0x116E, 0x11A9], NFKC: [0xB452], NFKD: [0x1103, 0x116E, 0x11A9] }, +{ source: [0xB453], NFC: [0xB453], NFD: [0x1103, 0x116E, 0x11AA], NFKC: [0xB453], NFKD: [0x1103, 0x116E, 0x11AA] }, +{ source: [0xB454], NFC: [0xB454], NFD: [0x1103, 0x116E, 0x11AB], NFKC: [0xB454], NFKD: [0x1103, 0x116E, 0x11AB] }, +{ source: [0xB455], NFC: [0xB455], NFD: [0x1103, 0x116E, 0x11AC], NFKC: [0xB455], NFKD: [0x1103, 0x116E, 0x11AC] }, +{ source: [0xB456], NFC: [0xB456], NFD: [0x1103, 0x116E, 0x11AD], NFKC: [0xB456], NFKD: [0x1103, 0x116E, 0x11AD] }, +{ source: [0xB457], NFC: [0xB457], NFD: [0x1103, 0x116E, 0x11AE], NFKC: [0xB457], NFKD: [0x1103, 0x116E, 0x11AE] }, +{ source: [0xB458], NFC: [0xB458], NFD: [0x1103, 0x116E, 0x11AF], NFKC: [0xB458], NFKD: [0x1103, 0x116E, 0x11AF] }, +{ source: [0xB459], NFC: [0xB459], NFD: [0x1103, 0x116E, 0x11B0], NFKC: [0xB459], NFKD: [0x1103, 0x116E, 0x11B0] }, +{ source: [0xB45A], NFC: [0xB45A], NFD: [0x1103, 0x116E, 0x11B1], NFKC: [0xB45A], NFKD: [0x1103, 0x116E, 0x11B1] }, +{ source: [0xB45B], NFC: [0xB45B], NFD: [0x1103, 0x116E, 0x11B2], NFKC: [0xB45B], NFKD: [0x1103, 0x116E, 0x11B2] }, +{ source: [0xB45C], NFC: [0xB45C], NFD: [0x1103, 0x116E, 0x11B3], NFKC: [0xB45C], NFKD: [0x1103, 0x116E, 0x11B3] }, +{ source: [0xB45D], NFC: [0xB45D], NFD: [0x1103, 0x116E, 0x11B4], NFKC: [0xB45D], NFKD: [0x1103, 0x116E, 0x11B4] }, +{ source: [0xB45E], NFC: [0xB45E], NFD: [0x1103, 0x116E, 0x11B5], NFKC: [0xB45E], NFKD: [0x1103, 0x116E, 0x11B5] }, +{ source: [0xB45F], NFC: [0xB45F], NFD: [0x1103, 0x116E, 0x11B6], NFKC: [0xB45F], NFKD: [0x1103, 0x116E, 0x11B6] }, +{ source: [0xB460], NFC: [0xB460], NFD: [0x1103, 0x116E, 0x11B7], NFKC: [0xB460], NFKD: [0x1103, 0x116E, 0x11B7] }, +{ source: [0xB461], NFC: [0xB461], NFD: [0x1103, 0x116E, 0x11B8], NFKC: [0xB461], NFKD: [0x1103, 0x116E, 0x11B8] }, +{ source: [0xB462], NFC: [0xB462], NFD: [0x1103, 0x116E, 0x11B9], NFKC: [0xB462], NFKD: [0x1103, 0x116E, 0x11B9] }, +{ source: [0xB463], NFC: [0xB463], NFD: [0x1103, 0x116E, 0x11BA], NFKC: [0xB463], NFKD: [0x1103, 0x116E, 0x11BA] }, +{ source: [0xB464], NFC: [0xB464], NFD: [0x1103, 0x116E, 0x11BB], NFKC: [0xB464], NFKD: [0x1103, 0x116E, 0x11BB] }, +{ source: [0xB465], NFC: [0xB465], NFD: [0x1103, 0x116E, 0x11BC], NFKC: [0xB465], NFKD: [0x1103, 0x116E, 0x11BC] }, +{ source: [0xB466], NFC: [0xB466], NFD: [0x1103, 0x116E, 0x11BD], NFKC: [0xB466], NFKD: [0x1103, 0x116E, 0x11BD] }, +{ source: [0xB467], NFC: [0xB467], NFD: [0x1103, 0x116E, 0x11BE], NFKC: [0xB467], NFKD: [0x1103, 0x116E, 0x11BE] }, +{ source: [0xB468], NFC: [0xB468], NFD: [0x1103, 0x116E, 0x11BF], NFKC: [0xB468], NFKD: [0x1103, 0x116E, 0x11BF] }, +{ source: [0xB469], NFC: [0xB469], NFD: [0x1103, 0x116E, 0x11C0], NFKC: [0xB469], NFKD: [0x1103, 0x116E, 0x11C0] }, +{ source: [0xB46A], NFC: [0xB46A], NFD: [0x1103, 0x116E, 0x11C1], NFKC: [0xB46A], NFKD: [0x1103, 0x116E, 0x11C1] }, +{ source: [0xB46B], NFC: [0xB46B], NFD: [0x1103, 0x116E, 0x11C2], NFKC: [0xB46B], NFKD: [0x1103, 0x116E, 0x11C2] }, +{ source: [0xB46C], NFC: [0xB46C], NFD: [0x1103, 0x116F], NFKC: [0xB46C], NFKD: [0x1103, 0x116F] }, +{ source: [0xB46D], NFC: [0xB46D], NFD: [0x1103, 0x116F, 0x11A8], NFKC: [0xB46D], NFKD: [0x1103, 0x116F, 0x11A8] }, +{ source: [0xB46E], NFC: [0xB46E], NFD: [0x1103, 0x116F, 0x11A9], NFKC: [0xB46E], NFKD: [0x1103, 0x116F, 0x11A9] }, +{ source: [0xB46F], NFC: [0xB46F], NFD: [0x1103, 0x116F, 0x11AA], NFKC: [0xB46F], NFKD: [0x1103, 0x116F, 0x11AA] }, +{ source: [0xB470], NFC: [0xB470], NFD: [0x1103, 0x116F, 0x11AB], NFKC: [0xB470], NFKD: [0x1103, 0x116F, 0x11AB] }, +{ source: [0xB471], NFC: [0xB471], NFD: [0x1103, 0x116F, 0x11AC], NFKC: [0xB471], NFKD: [0x1103, 0x116F, 0x11AC] }, +{ source: [0xB472], NFC: [0xB472], NFD: [0x1103, 0x116F, 0x11AD], NFKC: [0xB472], NFKD: [0x1103, 0x116F, 0x11AD] }, +{ source: [0xB473], NFC: [0xB473], NFD: [0x1103, 0x116F, 0x11AE], NFKC: [0xB473], NFKD: [0x1103, 0x116F, 0x11AE] }, +{ source: [0xB474], NFC: [0xB474], NFD: [0x1103, 0x116F, 0x11AF], NFKC: [0xB474], NFKD: [0x1103, 0x116F, 0x11AF] }, +{ source: [0xB475], NFC: [0xB475], NFD: [0x1103, 0x116F, 0x11B0], NFKC: [0xB475], NFKD: [0x1103, 0x116F, 0x11B0] }, +{ source: [0xB476], NFC: [0xB476], NFD: [0x1103, 0x116F, 0x11B1], NFKC: [0xB476], NFKD: [0x1103, 0x116F, 0x11B1] }, +{ source: [0xB477], NFC: [0xB477], NFD: [0x1103, 0x116F, 0x11B2], NFKC: [0xB477], NFKD: [0x1103, 0x116F, 0x11B2] }, +{ source: [0xB478], NFC: [0xB478], NFD: [0x1103, 0x116F, 0x11B3], NFKC: [0xB478], NFKD: [0x1103, 0x116F, 0x11B3] }, +{ source: [0xB479], NFC: [0xB479], NFD: [0x1103, 0x116F, 0x11B4], NFKC: [0xB479], NFKD: [0x1103, 0x116F, 0x11B4] }, +{ source: [0xB47A], NFC: [0xB47A], NFD: [0x1103, 0x116F, 0x11B5], NFKC: [0xB47A], NFKD: [0x1103, 0x116F, 0x11B5] }, +{ source: [0xB47B], NFC: [0xB47B], NFD: [0x1103, 0x116F, 0x11B6], NFKC: [0xB47B], NFKD: [0x1103, 0x116F, 0x11B6] }, +{ source: [0xB47C], NFC: [0xB47C], NFD: [0x1103, 0x116F, 0x11B7], NFKC: [0xB47C], NFKD: [0x1103, 0x116F, 0x11B7] }, +{ source: [0xB47D], NFC: [0xB47D], NFD: [0x1103, 0x116F, 0x11B8], NFKC: [0xB47D], NFKD: [0x1103, 0x116F, 0x11B8] }, +{ source: [0xB47E], NFC: [0xB47E], NFD: [0x1103, 0x116F, 0x11B9], NFKC: [0xB47E], NFKD: [0x1103, 0x116F, 0x11B9] }, +{ source: [0xB47F], NFC: [0xB47F], NFD: [0x1103, 0x116F, 0x11BA], NFKC: [0xB47F], NFKD: [0x1103, 0x116F, 0x11BA] }, +{ source: [0xB480], NFC: [0xB480], NFD: [0x1103, 0x116F, 0x11BB], NFKC: [0xB480], NFKD: [0x1103, 0x116F, 0x11BB] }, +{ source: [0xB481], NFC: [0xB481], NFD: [0x1103, 0x116F, 0x11BC], NFKC: [0xB481], NFKD: [0x1103, 0x116F, 0x11BC] }, +{ source: [0xB482], NFC: [0xB482], NFD: [0x1103, 0x116F, 0x11BD], NFKC: [0xB482], NFKD: [0x1103, 0x116F, 0x11BD] }, +{ source: [0xB483], NFC: [0xB483], NFD: [0x1103, 0x116F, 0x11BE], NFKC: [0xB483], NFKD: [0x1103, 0x116F, 0x11BE] }, +{ source: [0xB484], NFC: [0xB484], NFD: [0x1103, 0x116F, 0x11BF], NFKC: [0xB484], NFKD: [0x1103, 0x116F, 0x11BF] }, +{ source: [0xB485], NFC: [0xB485], NFD: [0x1103, 0x116F, 0x11C0], NFKC: [0xB485], NFKD: [0x1103, 0x116F, 0x11C0] }, +{ source: [0xB486], NFC: [0xB486], NFD: [0x1103, 0x116F, 0x11C1], NFKC: [0xB486], NFKD: [0x1103, 0x116F, 0x11C1] }, +{ source: [0xB487], NFC: [0xB487], NFD: [0x1103, 0x116F, 0x11C2], NFKC: [0xB487], NFKD: [0x1103, 0x116F, 0x11C2] }, +{ source: [0xB488], NFC: [0xB488], NFD: [0x1103, 0x1170], NFKC: [0xB488], NFKD: [0x1103, 0x1170] }, +{ source: [0xB489], NFC: [0xB489], NFD: [0x1103, 0x1170, 0x11A8], NFKC: [0xB489], NFKD: [0x1103, 0x1170, 0x11A8] }, +{ source: [0xB48A], NFC: [0xB48A], NFD: [0x1103, 0x1170, 0x11A9], NFKC: [0xB48A], NFKD: [0x1103, 0x1170, 0x11A9] }, +{ source: [0xB48B], NFC: [0xB48B], NFD: [0x1103, 0x1170, 0x11AA], NFKC: [0xB48B], NFKD: [0x1103, 0x1170, 0x11AA] }, +{ source: [0xB48C], NFC: [0xB48C], NFD: [0x1103, 0x1170, 0x11AB], NFKC: [0xB48C], NFKD: [0x1103, 0x1170, 0x11AB] }, +{ source: [0xB48D], NFC: [0xB48D], NFD: [0x1103, 0x1170, 0x11AC], NFKC: [0xB48D], NFKD: [0x1103, 0x1170, 0x11AC] }, +{ source: [0xB48E], NFC: [0xB48E], NFD: [0x1103, 0x1170, 0x11AD], NFKC: [0xB48E], NFKD: [0x1103, 0x1170, 0x11AD] }, +{ source: [0xB48F], NFC: [0xB48F], NFD: [0x1103, 0x1170, 0x11AE], NFKC: [0xB48F], NFKD: [0x1103, 0x1170, 0x11AE] }, +{ source: [0xB490], NFC: [0xB490], NFD: [0x1103, 0x1170, 0x11AF], NFKC: [0xB490], NFKD: [0x1103, 0x1170, 0x11AF] }, +{ source: [0xB491], NFC: [0xB491], NFD: [0x1103, 0x1170, 0x11B0], NFKC: [0xB491], NFKD: [0x1103, 0x1170, 0x11B0] }, +{ source: [0xB492], NFC: [0xB492], NFD: [0x1103, 0x1170, 0x11B1], NFKC: [0xB492], NFKD: [0x1103, 0x1170, 0x11B1] }, +{ source: [0xB493], NFC: [0xB493], NFD: [0x1103, 0x1170, 0x11B2], NFKC: [0xB493], NFKD: [0x1103, 0x1170, 0x11B2] }, +{ source: [0xB494], NFC: [0xB494], NFD: [0x1103, 0x1170, 0x11B3], NFKC: [0xB494], NFKD: [0x1103, 0x1170, 0x11B3] }, +{ source: [0xB495], NFC: [0xB495], NFD: [0x1103, 0x1170, 0x11B4], NFKC: [0xB495], NFKD: [0x1103, 0x1170, 0x11B4] }, +{ source: [0xB496], NFC: [0xB496], NFD: [0x1103, 0x1170, 0x11B5], NFKC: [0xB496], NFKD: [0x1103, 0x1170, 0x11B5] }, +{ source: [0xB497], NFC: [0xB497], NFD: [0x1103, 0x1170, 0x11B6], NFKC: [0xB497], NFKD: [0x1103, 0x1170, 0x11B6] }, +{ source: [0xB498], NFC: [0xB498], NFD: [0x1103, 0x1170, 0x11B7], NFKC: [0xB498], NFKD: [0x1103, 0x1170, 0x11B7] }, +{ source: [0xB499], NFC: [0xB499], NFD: [0x1103, 0x1170, 0x11B8], NFKC: [0xB499], NFKD: [0x1103, 0x1170, 0x11B8] }, +{ source: [0xB49A], NFC: [0xB49A], NFD: [0x1103, 0x1170, 0x11B9], NFKC: [0xB49A], NFKD: [0x1103, 0x1170, 0x11B9] }, +{ source: [0xB49B], NFC: [0xB49B], NFD: [0x1103, 0x1170, 0x11BA], NFKC: [0xB49B], NFKD: [0x1103, 0x1170, 0x11BA] }, +{ source: [0xB49C], NFC: [0xB49C], NFD: [0x1103, 0x1170, 0x11BB], NFKC: [0xB49C], NFKD: [0x1103, 0x1170, 0x11BB] }, +{ source: [0xB49D], NFC: [0xB49D], NFD: [0x1103, 0x1170, 0x11BC], NFKC: [0xB49D], NFKD: [0x1103, 0x1170, 0x11BC] }, +{ source: [0xB49E], NFC: [0xB49E], NFD: [0x1103, 0x1170, 0x11BD], NFKC: [0xB49E], NFKD: [0x1103, 0x1170, 0x11BD] }, +{ source: [0xB49F], NFC: [0xB49F], NFD: [0x1103, 0x1170, 0x11BE], NFKC: [0xB49F], NFKD: [0x1103, 0x1170, 0x11BE] }, +{ source: [0xB4A0], NFC: [0xB4A0], NFD: [0x1103, 0x1170, 0x11BF], NFKC: [0xB4A0], NFKD: [0x1103, 0x1170, 0x11BF] }, +{ source: [0xB4A1], NFC: [0xB4A1], NFD: [0x1103, 0x1170, 0x11C0], NFKC: [0xB4A1], NFKD: [0x1103, 0x1170, 0x11C0] }, +{ source: [0xB4A2], NFC: [0xB4A2], NFD: [0x1103, 0x1170, 0x11C1], NFKC: [0xB4A2], NFKD: [0x1103, 0x1170, 0x11C1] }, +{ source: [0xB4A3], NFC: [0xB4A3], NFD: [0x1103, 0x1170, 0x11C2], NFKC: [0xB4A3], NFKD: [0x1103, 0x1170, 0x11C2] }, +{ source: [0xB4A4], NFC: [0xB4A4], NFD: [0x1103, 0x1171], NFKC: [0xB4A4], NFKD: [0x1103, 0x1171] }, +{ source: [0xB4A5], NFC: [0xB4A5], NFD: [0x1103, 0x1171, 0x11A8], NFKC: [0xB4A5], NFKD: [0x1103, 0x1171, 0x11A8] }, +{ source: [0xB4A6], NFC: [0xB4A6], NFD: [0x1103, 0x1171, 0x11A9], NFKC: [0xB4A6], NFKD: [0x1103, 0x1171, 0x11A9] }, +{ source: [0xB4A7], NFC: [0xB4A7], NFD: [0x1103, 0x1171, 0x11AA], NFKC: [0xB4A7], NFKD: [0x1103, 0x1171, 0x11AA] }, +{ source: [0xB4A8], NFC: [0xB4A8], NFD: [0x1103, 0x1171, 0x11AB], NFKC: [0xB4A8], NFKD: [0x1103, 0x1171, 0x11AB] }, +{ source: [0xB4A9], NFC: [0xB4A9], NFD: [0x1103, 0x1171, 0x11AC], NFKC: [0xB4A9], NFKD: [0x1103, 0x1171, 0x11AC] }, +{ source: [0xB4AA], NFC: [0xB4AA], NFD: [0x1103, 0x1171, 0x11AD], NFKC: [0xB4AA], NFKD: [0x1103, 0x1171, 0x11AD] }, +{ source: [0xB4AB], NFC: [0xB4AB], NFD: [0x1103, 0x1171, 0x11AE], NFKC: [0xB4AB], NFKD: [0x1103, 0x1171, 0x11AE] }, +{ source: [0xB4AC], NFC: [0xB4AC], NFD: [0x1103, 0x1171, 0x11AF], NFKC: [0xB4AC], NFKD: [0x1103, 0x1171, 0x11AF] }, +{ source: [0xB4AD], NFC: [0xB4AD], NFD: [0x1103, 0x1171, 0x11B0], NFKC: [0xB4AD], NFKD: [0x1103, 0x1171, 0x11B0] }, +{ source: [0xB4AE], NFC: [0xB4AE], NFD: [0x1103, 0x1171, 0x11B1], NFKC: [0xB4AE], NFKD: [0x1103, 0x1171, 0x11B1] }, +{ source: [0xB4AF], NFC: [0xB4AF], NFD: [0x1103, 0x1171, 0x11B2], NFKC: [0xB4AF], NFKD: [0x1103, 0x1171, 0x11B2] }, +{ source: [0xB4B0], NFC: [0xB4B0], NFD: [0x1103, 0x1171, 0x11B3], NFKC: [0xB4B0], NFKD: [0x1103, 0x1171, 0x11B3] }, +{ source: [0xB4B1], NFC: [0xB4B1], NFD: [0x1103, 0x1171, 0x11B4], NFKC: [0xB4B1], NFKD: [0x1103, 0x1171, 0x11B4] }, +{ source: [0xB4B2], NFC: [0xB4B2], NFD: [0x1103, 0x1171, 0x11B5], NFKC: [0xB4B2], NFKD: [0x1103, 0x1171, 0x11B5] }, +{ source: [0xB4B3], NFC: [0xB4B3], NFD: [0x1103, 0x1171, 0x11B6], NFKC: [0xB4B3], NFKD: [0x1103, 0x1171, 0x11B6] }, +{ source: [0xB4B4], NFC: [0xB4B4], NFD: [0x1103, 0x1171, 0x11B7], NFKC: [0xB4B4], NFKD: [0x1103, 0x1171, 0x11B7] }, +{ source: [0xB4B5], NFC: [0xB4B5], NFD: [0x1103, 0x1171, 0x11B8], NFKC: [0xB4B5], NFKD: [0x1103, 0x1171, 0x11B8] }, +{ source: [0xB4B6], NFC: [0xB4B6], NFD: [0x1103, 0x1171, 0x11B9], NFKC: [0xB4B6], NFKD: [0x1103, 0x1171, 0x11B9] }, +{ source: [0xB4B7], NFC: [0xB4B7], NFD: [0x1103, 0x1171, 0x11BA], NFKC: [0xB4B7], NFKD: [0x1103, 0x1171, 0x11BA] }, +{ source: [0xB4B8], NFC: [0xB4B8], NFD: [0x1103, 0x1171, 0x11BB], NFKC: [0xB4B8], NFKD: [0x1103, 0x1171, 0x11BB] }, +{ source: [0xB4B9], NFC: [0xB4B9], NFD: [0x1103, 0x1171, 0x11BC], NFKC: [0xB4B9], NFKD: [0x1103, 0x1171, 0x11BC] }, +{ source: [0xB4BA], NFC: [0xB4BA], NFD: [0x1103, 0x1171, 0x11BD], NFKC: [0xB4BA], NFKD: [0x1103, 0x1171, 0x11BD] }, +{ source: [0xB4BB], NFC: [0xB4BB], NFD: [0x1103, 0x1171, 0x11BE], NFKC: [0xB4BB], NFKD: [0x1103, 0x1171, 0x11BE] }, +{ source: [0xB4BC], NFC: [0xB4BC], NFD: [0x1103, 0x1171, 0x11BF], NFKC: [0xB4BC], NFKD: [0x1103, 0x1171, 0x11BF] }, +{ source: [0xB4BD], NFC: [0xB4BD], NFD: [0x1103, 0x1171, 0x11C0], NFKC: [0xB4BD], NFKD: [0x1103, 0x1171, 0x11C0] }, +{ source: [0xB4BE], NFC: [0xB4BE], NFD: [0x1103, 0x1171, 0x11C1], NFKC: [0xB4BE], NFKD: [0x1103, 0x1171, 0x11C1] }, +{ source: [0xB4BF], NFC: [0xB4BF], NFD: [0x1103, 0x1171, 0x11C2], NFKC: [0xB4BF], NFKD: [0x1103, 0x1171, 0x11C2] }, +{ source: [0xB4C0], NFC: [0xB4C0], NFD: [0x1103, 0x1172], NFKC: [0xB4C0], NFKD: [0x1103, 0x1172] }, +{ source: [0xB4C1], NFC: [0xB4C1], NFD: [0x1103, 0x1172, 0x11A8], NFKC: [0xB4C1], NFKD: [0x1103, 0x1172, 0x11A8] }, +{ source: [0xB4C2], NFC: [0xB4C2], NFD: [0x1103, 0x1172, 0x11A9], NFKC: [0xB4C2], NFKD: [0x1103, 0x1172, 0x11A9] }, +{ source: [0xB4C3], NFC: [0xB4C3], NFD: [0x1103, 0x1172, 0x11AA], NFKC: [0xB4C3], NFKD: [0x1103, 0x1172, 0x11AA] }, +{ source: [0xB4C4], NFC: [0xB4C4], NFD: [0x1103, 0x1172, 0x11AB], NFKC: [0xB4C4], NFKD: [0x1103, 0x1172, 0x11AB] }, +{ source: [0xB4C5], NFC: [0xB4C5], NFD: [0x1103, 0x1172, 0x11AC], NFKC: [0xB4C5], NFKD: [0x1103, 0x1172, 0x11AC] }, +{ source: [0xB4C6], NFC: [0xB4C6], NFD: [0x1103, 0x1172, 0x11AD], NFKC: [0xB4C6], NFKD: [0x1103, 0x1172, 0x11AD] }, +{ source: [0xB4C7], NFC: [0xB4C7], NFD: [0x1103, 0x1172, 0x11AE], NFKC: [0xB4C7], NFKD: [0x1103, 0x1172, 0x11AE] }, +{ source: [0xB4C8], NFC: [0xB4C8], NFD: [0x1103, 0x1172, 0x11AF], NFKC: [0xB4C8], NFKD: [0x1103, 0x1172, 0x11AF] }, +{ source: [0xB4C9], NFC: [0xB4C9], NFD: [0x1103, 0x1172, 0x11B0], NFKC: [0xB4C9], NFKD: [0x1103, 0x1172, 0x11B0] }, +{ source: [0xB4CA], NFC: [0xB4CA], NFD: [0x1103, 0x1172, 0x11B1], NFKC: [0xB4CA], NFKD: [0x1103, 0x1172, 0x11B1] }, +{ source: [0xB4CB], NFC: [0xB4CB], NFD: [0x1103, 0x1172, 0x11B2], NFKC: [0xB4CB], NFKD: [0x1103, 0x1172, 0x11B2] }, +{ source: [0xB4CC], NFC: [0xB4CC], NFD: [0x1103, 0x1172, 0x11B3], NFKC: [0xB4CC], NFKD: [0x1103, 0x1172, 0x11B3] }, +{ source: [0xB4CD], NFC: [0xB4CD], NFD: [0x1103, 0x1172, 0x11B4], NFKC: [0xB4CD], NFKD: [0x1103, 0x1172, 0x11B4] }, +{ source: [0xB4CE], NFC: [0xB4CE], NFD: [0x1103, 0x1172, 0x11B5], NFKC: [0xB4CE], NFKD: [0x1103, 0x1172, 0x11B5] }, +{ source: [0xB4CF], NFC: [0xB4CF], NFD: [0x1103, 0x1172, 0x11B6], NFKC: [0xB4CF], NFKD: [0x1103, 0x1172, 0x11B6] }, +{ source: [0xB4D0], NFC: [0xB4D0], NFD: [0x1103, 0x1172, 0x11B7], NFKC: [0xB4D0], NFKD: [0x1103, 0x1172, 0x11B7] }, +{ source: [0xB4D1], NFC: [0xB4D1], NFD: [0x1103, 0x1172, 0x11B8], NFKC: [0xB4D1], NFKD: [0x1103, 0x1172, 0x11B8] }, +{ source: [0xB4D2], NFC: [0xB4D2], NFD: [0x1103, 0x1172, 0x11B9], NFKC: [0xB4D2], NFKD: [0x1103, 0x1172, 0x11B9] }, +{ source: [0xB4D3], NFC: [0xB4D3], NFD: [0x1103, 0x1172, 0x11BA], NFKC: [0xB4D3], NFKD: [0x1103, 0x1172, 0x11BA] }, +{ source: [0xB4D4], NFC: [0xB4D4], NFD: [0x1103, 0x1172, 0x11BB], NFKC: [0xB4D4], NFKD: [0x1103, 0x1172, 0x11BB] }, +{ source: [0xB4D5], NFC: [0xB4D5], NFD: [0x1103, 0x1172, 0x11BC], NFKC: [0xB4D5], NFKD: [0x1103, 0x1172, 0x11BC] }, +{ source: [0xB4D6], NFC: [0xB4D6], NFD: [0x1103, 0x1172, 0x11BD], NFKC: [0xB4D6], NFKD: [0x1103, 0x1172, 0x11BD] }, +{ source: [0xB4D7], NFC: [0xB4D7], NFD: [0x1103, 0x1172, 0x11BE], NFKC: [0xB4D7], NFKD: [0x1103, 0x1172, 0x11BE] }, +{ source: [0xB4D8], NFC: [0xB4D8], NFD: [0x1103, 0x1172, 0x11BF], NFKC: [0xB4D8], NFKD: [0x1103, 0x1172, 0x11BF] }, +{ source: [0xB4D9], NFC: [0xB4D9], NFD: [0x1103, 0x1172, 0x11C0], NFKC: [0xB4D9], NFKD: [0x1103, 0x1172, 0x11C0] }, +{ source: [0xB4DA], NFC: [0xB4DA], NFD: [0x1103, 0x1172, 0x11C1], NFKC: [0xB4DA], NFKD: [0x1103, 0x1172, 0x11C1] }, +{ source: [0xB4DB], NFC: [0xB4DB], NFD: [0x1103, 0x1172, 0x11C2], NFKC: [0xB4DB], NFKD: [0x1103, 0x1172, 0x11C2] }, +{ source: [0xB4DC], NFC: [0xB4DC], NFD: [0x1103, 0x1173], NFKC: [0xB4DC], NFKD: [0x1103, 0x1173] }, +{ source: [0xB4DD], NFC: [0xB4DD], NFD: [0x1103, 0x1173, 0x11A8], NFKC: [0xB4DD], NFKD: [0x1103, 0x1173, 0x11A8] }, +{ source: [0xB4DE], NFC: [0xB4DE], NFD: [0x1103, 0x1173, 0x11A9], NFKC: [0xB4DE], NFKD: [0x1103, 0x1173, 0x11A9] }, +{ source: [0xB4DF], NFC: [0xB4DF], NFD: [0x1103, 0x1173, 0x11AA], NFKC: [0xB4DF], NFKD: [0x1103, 0x1173, 0x11AA] }, +{ source: [0xB4E0], NFC: [0xB4E0], NFD: [0x1103, 0x1173, 0x11AB], NFKC: [0xB4E0], NFKD: [0x1103, 0x1173, 0x11AB] }, +{ source: [0xB4E1], NFC: [0xB4E1], NFD: [0x1103, 0x1173, 0x11AC], NFKC: [0xB4E1], NFKD: [0x1103, 0x1173, 0x11AC] }, +{ source: [0xB4E2], NFC: [0xB4E2], NFD: [0x1103, 0x1173, 0x11AD], NFKC: [0xB4E2], NFKD: [0x1103, 0x1173, 0x11AD] }, +{ source: [0xB4E3], NFC: [0xB4E3], NFD: [0x1103, 0x1173, 0x11AE], NFKC: [0xB4E3], NFKD: [0x1103, 0x1173, 0x11AE] }, +{ source: [0xB4E4], NFC: [0xB4E4], NFD: [0x1103, 0x1173, 0x11AF], NFKC: [0xB4E4], NFKD: [0x1103, 0x1173, 0x11AF] }, +{ source: [0xB4E5], NFC: [0xB4E5], NFD: [0x1103, 0x1173, 0x11B0], NFKC: [0xB4E5], NFKD: [0x1103, 0x1173, 0x11B0] }, +{ source: [0xB4E6], NFC: [0xB4E6], NFD: [0x1103, 0x1173, 0x11B1], NFKC: [0xB4E6], NFKD: [0x1103, 0x1173, 0x11B1] }, +{ source: [0xB4E7], NFC: [0xB4E7], NFD: [0x1103, 0x1173, 0x11B2], NFKC: [0xB4E7], NFKD: [0x1103, 0x1173, 0x11B2] }, +{ source: [0xB4E8], NFC: [0xB4E8], NFD: [0x1103, 0x1173, 0x11B3], NFKC: [0xB4E8], NFKD: [0x1103, 0x1173, 0x11B3] }, +{ source: [0xB4E9], NFC: [0xB4E9], NFD: [0x1103, 0x1173, 0x11B4], NFKC: [0xB4E9], NFKD: [0x1103, 0x1173, 0x11B4] }, +{ source: [0xB4EA], NFC: [0xB4EA], NFD: [0x1103, 0x1173, 0x11B5], NFKC: [0xB4EA], NFKD: [0x1103, 0x1173, 0x11B5] }, +{ source: [0xB4EB], NFC: [0xB4EB], NFD: [0x1103, 0x1173, 0x11B6], NFKC: [0xB4EB], NFKD: [0x1103, 0x1173, 0x11B6] }, +{ source: [0xB4EC], NFC: [0xB4EC], NFD: [0x1103, 0x1173, 0x11B7], NFKC: [0xB4EC], NFKD: [0x1103, 0x1173, 0x11B7] }, +{ source: [0xB4ED], NFC: [0xB4ED], NFD: [0x1103, 0x1173, 0x11B8], NFKC: [0xB4ED], NFKD: [0x1103, 0x1173, 0x11B8] }, +{ source: [0xB4EE], NFC: [0xB4EE], NFD: [0x1103, 0x1173, 0x11B9], NFKC: [0xB4EE], NFKD: [0x1103, 0x1173, 0x11B9] }, +{ source: [0xB4EF], NFC: [0xB4EF], NFD: [0x1103, 0x1173, 0x11BA], NFKC: [0xB4EF], NFKD: [0x1103, 0x1173, 0x11BA] }, +{ source: [0xB4F0], NFC: [0xB4F0], NFD: [0x1103, 0x1173, 0x11BB], NFKC: [0xB4F0], NFKD: [0x1103, 0x1173, 0x11BB] }, +{ source: [0xB4F1], NFC: [0xB4F1], NFD: [0x1103, 0x1173, 0x11BC], NFKC: [0xB4F1], NFKD: [0x1103, 0x1173, 0x11BC] }, +{ source: [0xB4F2], NFC: [0xB4F2], NFD: [0x1103, 0x1173, 0x11BD], NFKC: [0xB4F2], NFKD: [0x1103, 0x1173, 0x11BD] }, +{ source: [0xB4F3], NFC: [0xB4F3], NFD: [0x1103, 0x1173, 0x11BE], NFKC: [0xB4F3], NFKD: [0x1103, 0x1173, 0x11BE] }, +{ source: [0xB4F4], NFC: [0xB4F4], NFD: [0x1103, 0x1173, 0x11BF], NFKC: [0xB4F4], NFKD: [0x1103, 0x1173, 0x11BF] }, +{ source: [0xB4F5], NFC: [0xB4F5], NFD: [0x1103, 0x1173, 0x11C0], NFKC: [0xB4F5], NFKD: [0x1103, 0x1173, 0x11C0] }, +{ source: [0xB4F6], NFC: [0xB4F6], NFD: [0x1103, 0x1173, 0x11C1], NFKC: [0xB4F6], NFKD: [0x1103, 0x1173, 0x11C1] }, +{ source: [0xB4F7], NFC: [0xB4F7], NFD: [0x1103, 0x1173, 0x11C2], NFKC: [0xB4F7], NFKD: [0x1103, 0x1173, 0x11C2] }, +{ source: [0xB4F8], NFC: [0xB4F8], NFD: [0x1103, 0x1174], NFKC: [0xB4F8], NFKD: [0x1103, 0x1174] }, +{ source: [0xB4F9], NFC: [0xB4F9], NFD: [0x1103, 0x1174, 0x11A8], NFKC: [0xB4F9], NFKD: [0x1103, 0x1174, 0x11A8] }, +{ source: [0xB4FA], NFC: [0xB4FA], NFD: [0x1103, 0x1174, 0x11A9], NFKC: [0xB4FA], NFKD: [0x1103, 0x1174, 0x11A9] }, +{ source: [0xB4FB], NFC: [0xB4FB], NFD: [0x1103, 0x1174, 0x11AA], NFKC: [0xB4FB], NFKD: [0x1103, 0x1174, 0x11AA] }, +{ source: [0xB4FC], NFC: [0xB4FC], NFD: [0x1103, 0x1174, 0x11AB], NFKC: [0xB4FC], NFKD: [0x1103, 0x1174, 0x11AB] }, +{ source: [0xB4FD], NFC: [0xB4FD], NFD: [0x1103, 0x1174, 0x11AC], NFKC: [0xB4FD], NFKD: [0x1103, 0x1174, 0x11AC] }, +{ source: [0xB4FE], NFC: [0xB4FE], NFD: [0x1103, 0x1174, 0x11AD], NFKC: [0xB4FE], NFKD: [0x1103, 0x1174, 0x11AD] }, +{ source: [0xB4FF], NFC: [0xB4FF], NFD: [0x1103, 0x1174, 0x11AE], NFKC: [0xB4FF], NFKD: [0x1103, 0x1174, 0x11AE] }, +{ source: [0xB500], NFC: [0xB500], NFD: [0x1103, 0x1174, 0x11AF], NFKC: [0xB500], NFKD: [0x1103, 0x1174, 0x11AF] }, +{ source: [0xB501], NFC: [0xB501], NFD: [0x1103, 0x1174, 0x11B0], NFKC: [0xB501], NFKD: [0x1103, 0x1174, 0x11B0] }, +{ source: [0xB502], NFC: [0xB502], NFD: [0x1103, 0x1174, 0x11B1], NFKC: [0xB502], NFKD: [0x1103, 0x1174, 0x11B1] }, +{ source: [0xB503], NFC: [0xB503], NFD: [0x1103, 0x1174, 0x11B2], NFKC: [0xB503], NFKD: [0x1103, 0x1174, 0x11B2] }, +{ source: [0xB504], NFC: [0xB504], NFD: [0x1103, 0x1174, 0x11B3], NFKC: [0xB504], NFKD: [0x1103, 0x1174, 0x11B3] }, +{ source: [0xB505], NFC: [0xB505], NFD: [0x1103, 0x1174, 0x11B4], NFKC: [0xB505], NFKD: [0x1103, 0x1174, 0x11B4] }, +{ source: [0xB506], NFC: [0xB506], NFD: [0x1103, 0x1174, 0x11B5], NFKC: [0xB506], NFKD: [0x1103, 0x1174, 0x11B5] }, +{ source: [0xB507], NFC: [0xB507], NFD: [0x1103, 0x1174, 0x11B6], NFKC: [0xB507], NFKD: [0x1103, 0x1174, 0x11B6] }, +{ source: [0xB508], NFC: [0xB508], NFD: [0x1103, 0x1174, 0x11B7], NFKC: [0xB508], NFKD: [0x1103, 0x1174, 0x11B7] }, +{ source: [0xB509], NFC: [0xB509], NFD: [0x1103, 0x1174, 0x11B8], NFKC: [0xB509], NFKD: [0x1103, 0x1174, 0x11B8] }, +{ source: [0xB50A], NFC: [0xB50A], NFD: [0x1103, 0x1174, 0x11B9], NFKC: [0xB50A], NFKD: [0x1103, 0x1174, 0x11B9] }, +{ source: [0xB50B], NFC: [0xB50B], NFD: [0x1103, 0x1174, 0x11BA], NFKC: [0xB50B], NFKD: [0x1103, 0x1174, 0x11BA] }, +{ source: [0xB50C], NFC: [0xB50C], NFD: [0x1103, 0x1174, 0x11BB], NFKC: [0xB50C], NFKD: [0x1103, 0x1174, 0x11BB] }, +{ source: [0xB50D], NFC: [0xB50D], NFD: [0x1103, 0x1174, 0x11BC], NFKC: [0xB50D], NFKD: [0x1103, 0x1174, 0x11BC] }, +{ source: [0xB50E], NFC: [0xB50E], NFD: [0x1103, 0x1174, 0x11BD], NFKC: [0xB50E], NFKD: [0x1103, 0x1174, 0x11BD] }, +{ source: [0xB50F], NFC: [0xB50F], NFD: [0x1103, 0x1174, 0x11BE], NFKC: [0xB50F], NFKD: [0x1103, 0x1174, 0x11BE] }, +{ source: [0xB510], NFC: [0xB510], NFD: [0x1103, 0x1174, 0x11BF], NFKC: [0xB510], NFKD: [0x1103, 0x1174, 0x11BF] }, +{ source: [0xB511], NFC: [0xB511], NFD: [0x1103, 0x1174, 0x11C0], NFKC: [0xB511], NFKD: [0x1103, 0x1174, 0x11C0] }, +{ source: [0xB512], NFC: [0xB512], NFD: [0x1103, 0x1174, 0x11C1], NFKC: [0xB512], NFKD: [0x1103, 0x1174, 0x11C1] }, +{ source: [0xB513], NFC: [0xB513], NFD: [0x1103, 0x1174, 0x11C2], NFKC: [0xB513], NFKD: [0x1103, 0x1174, 0x11C2] }, +{ source: [0xB514], NFC: [0xB514], NFD: [0x1103, 0x1175], NFKC: [0xB514], NFKD: [0x1103, 0x1175] }, +{ source: [0xB515], NFC: [0xB515], NFD: [0x1103, 0x1175, 0x11A8], NFKC: [0xB515], NFKD: [0x1103, 0x1175, 0x11A8] }, +{ source: [0xB516], NFC: [0xB516], NFD: [0x1103, 0x1175, 0x11A9], NFKC: [0xB516], NFKD: [0x1103, 0x1175, 0x11A9] }, +{ source: [0xB517], NFC: [0xB517], NFD: [0x1103, 0x1175, 0x11AA], NFKC: [0xB517], NFKD: [0x1103, 0x1175, 0x11AA] }, +{ source: [0xB518], NFC: [0xB518], NFD: [0x1103, 0x1175, 0x11AB], NFKC: [0xB518], NFKD: [0x1103, 0x1175, 0x11AB] }, +{ source: [0xB519], NFC: [0xB519], NFD: [0x1103, 0x1175, 0x11AC], NFKC: [0xB519], NFKD: [0x1103, 0x1175, 0x11AC] }, +{ source: [0xB51A], NFC: [0xB51A], NFD: [0x1103, 0x1175, 0x11AD], NFKC: [0xB51A], NFKD: [0x1103, 0x1175, 0x11AD] }, +{ source: [0xB51B], NFC: [0xB51B], NFD: [0x1103, 0x1175, 0x11AE], NFKC: [0xB51B], NFKD: [0x1103, 0x1175, 0x11AE] }, +{ source: [0xB51C], NFC: [0xB51C], NFD: [0x1103, 0x1175, 0x11AF], NFKC: [0xB51C], NFKD: [0x1103, 0x1175, 0x11AF] }, +{ source: [0xB51D], NFC: [0xB51D], NFD: [0x1103, 0x1175, 0x11B0], NFKC: [0xB51D], NFKD: [0x1103, 0x1175, 0x11B0] }, +{ source: [0xB51E], NFC: [0xB51E], NFD: [0x1103, 0x1175, 0x11B1], NFKC: [0xB51E], NFKD: [0x1103, 0x1175, 0x11B1] }, +{ source: [0xB51F], NFC: [0xB51F], NFD: [0x1103, 0x1175, 0x11B2], NFKC: [0xB51F], NFKD: [0x1103, 0x1175, 0x11B2] }, +{ source: [0xB520], NFC: [0xB520], NFD: [0x1103, 0x1175, 0x11B3], NFKC: [0xB520], NFKD: [0x1103, 0x1175, 0x11B3] }, +{ source: [0xB521], NFC: [0xB521], NFD: [0x1103, 0x1175, 0x11B4], NFKC: [0xB521], NFKD: [0x1103, 0x1175, 0x11B4] }, +{ source: [0xB522], NFC: [0xB522], NFD: [0x1103, 0x1175, 0x11B5], NFKC: [0xB522], NFKD: [0x1103, 0x1175, 0x11B5] }, +{ source: [0xB523], NFC: [0xB523], NFD: [0x1103, 0x1175, 0x11B6], NFKC: [0xB523], NFKD: [0x1103, 0x1175, 0x11B6] }, +{ source: [0xB524], NFC: [0xB524], NFD: [0x1103, 0x1175, 0x11B7], NFKC: [0xB524], NFKD: [0x1103, 0x1175, 0x11B7] }, +{ source: [0xB525], NFC: [0xB525], NFD: [0x1103, 0x1175, 0x11B8], NFKC: [0xB525], NFKD: [0x1103, 0x1175, 0x11B8] }, +{ source: [0xB526], NFC: [0xB526], NFD: [0x1103, 0x1175, 0x11B9], NFKC: [0xB526], NFKD: [0x1103, 0x1175, 0x11B9] }, +{ source: [0xB527], NFC: [0xB527], NFD: [0x1103, 0x1175, 0x11BA], NFKC: [0xB527], NFKD: [0x1103, 0x1175, 0x11BA] }, +{ source: [0xB528], NFC: [0xB528], NFD: [0x1103, 0x1175, 0x11BB], NFKC: [0xB528], NFKD: [0x1103, 0x1175, 0x11BB] }, +{ source: [0xB529], NFC: [0xB529], NFD: [0x1103, 0x1175, 0x11BC], NFKC: [0xB529], NFKD: [0x1103, 0x1175, 0x11BC] }, +{ source: [0xB52A], NFC: [0xB52A], NFD: [0x1103, 0x1175, 0x11BD], NFKC: [0xB52A], NFKD: [0x1103, 0x1175, 0x11BD] }, +{ source: [0xB52B], NFC: [0xB52B], NFD: [0x1103, 0x1175, 0x11BE], NFKC: [0xB52B], NFKD: [0x1103, 0x1175, 0x11BE] }, +{ source: [0xB52C], NFC: [0xB52C], NFD: [0x1103, 0x1175, 0x11BF], NFKC: [0xB52C], NFKD: [0x1103, 0x1175, 0x11BF] }, +{ source: [0xB52D], NFC: [0xB52D], NFD: [0x1103, 0x1175, 0x11C0], NFKC: [0xB52D], NFKD: [0x1103, 0x1175, 0x11C0] }, +{ source: [0xB52E], NFC: [0xB52E], NFD: [0x1103, 0x1175, 0x11C1], NFKC: [0xB52E], NFKD: [0x1103, 0x1175, 0x11C1] }, +{ source: [0xB52F], NFC: [0xB52F], NFD: [0x1103, 0x1175, 0x11C2], NFKC: [0xB52F], NFKD: [0x1103, 0x1175, 0x11C2] }, +{ source: [0xB530], NFC: [0xB530], NFD: [0x1104, 0x1161], NFKC: [0xB530], NFKD: [0x1104, 0x1161] }, +{ source: [0xB531], NFC: [0xB531], NFD: [0x1104, 0x1161, 0x11A8], NFKC: [0xB531], NFKD: [0x1104, 0x1161, 0x11A8] }, +{ source: [0xB532], NFC: [0xB532], NFD: [0x1104, 0x1161, 0x11A9], NFKC: [0xB532], NFKD: [0x1104, 0x1161, 0x11A9] }, +{ source: [0xB533], NFC: [0xB533], NFD: [0x1104, 0x1161, 0x11AA], NFKC: [0xB533], NFKD: [0x1104, 0x1161, 0x11AA] }, +{ source: [0xB534], NFC: [0xB534], NFD: [0x1104, 0x1161, 0x11AB], NFKC: [0xB534], NFKD: [0x1104, 0x1161, 0x11AB] }, +{ source: [0xB535], NFC: [0xB535], NFD: [0x1104, 0x1161, 0x11AC], NFKC: [0xB535], NFKD: [0x1104, 0x1161, 0x11AC] }, +{ source: [0xB536], NFC: [0xB536], NFD: [0x1104, 0x1161, 0x11AD], NFKC: [0xB536], NFKD: [0x1104, 0x1161, 0x11AD] }, +{ source: [0xB537], NFC: [0xB537], NFD: [0x1104, 0x1161, 0x11AE], NFKC: [0xB537], NFKD: [0x1104, 0x1161, 0x11AE] }, +{ source: [0xB538], NFC: [0xB538], NFD: [0x1104, 0x1161, 0x11AF], NFKC: [0xB538], NFKD: [0x1104, 0x1161, 0x11AF] }, +{ source: [0xB539], NFC: [0xB539], NFD: [0x1104, 0x1161, 0x11B0], NFKC: [0xB539], NFKD: [0x1104, 0x1161, 0x11B0] }, +{ source: [0xB53A], NFC: [0xB53A], NFD: [0x1104, 0x1161, 0x11B1], NFKC: [0xB53A], NFKD: [0x1104, 0x1161, 0x11B1] }, +{ source: [0xB53B], NFC: [0xB53B], NFD: [0x1104, 0x1161, 0x11B2], NFKC: [0xB53B], NFKD: [0x1104, 0x1161, 0x11B2] }, +{ source: [0xB53C], NFC: [0xB53C], NFD: [0x1104, 0x1161, 0x11B3], NFKC: [0xB53C], NFKD: [0x1104, 0x1161, 0x11B3] }, +{ source: [0xB53D], NFC: [0xB53D], NFD: [0x1104, 0x1161, 0x11B4], NFKC: [0xB53D], NFKD: [0x1104, 0x1161, 0x11B4] }, +{ source: [0xB53E], NFC: [0xB53E], NFD: [0x1104, 0x1161, 0x11B5], NFKC: [0xB53E], NFKD: [0x1104, 0x1161, 0x11B5] }, +{ source: [0xB53F], NFC: [0xB53F], NFD: [0x1104, 0x1161, 0x11B6], NFKC: [0xB53F], NFKD: [0x1104, 0x1161, 0x11B6] }, +{ source: [0xB540], NFC: [0xB540], NFD: [0x1104, 0x1161, 0x11B7], NFKC: [0xB540], NFKD: [0x1104, 0x1161, 0x11B7] }, +{ source: [0xB541], NFC: [0xB541], NFD: [0x1104, 0x1161, 0x11B8], NFKC: [0xB541], NFKD: [0x1104, 0x1161, 0x11B8] }, +{ source: [0xB542], NFC: [0xB542], NFD: [0x1104, 0x1161, 0x11B9], NFKC: [0xB542], NFKD: [0x1104, 0x1161, 0x11B9] }, +{ source: [0xB543], NFC: [0xB543], NFD: [0x1104, 0x1161, 0x11BA], NFKC: [0xB543], NFKD: [0x1104, 0x1161, 0x11BA] }, +{ source: [0xB544], NFC: [0xB544], NFD: [0x1104, 0x1161, 0x11BB], NFKC: [0xB544], NFKD: [0x1104, 0x1161, 0x11BB] }, +{ source: [0xB545], NFC: [0xB545], NFD: [0x1104, 0x1161, 0x11BC], NFKC: [0xB545], NFKD: [0x1104, 0x1161, 0x11BC] }, +{ source: [0xB546], NFC: [0xB546], NFD: [0x1104, 0x1161, 0x11BD], NFKC: [0xB546], NFKD: [0x1104, 0x1161, 0x11BD] }, +{ source: [0xB547], NFC: [0xB547], NFD: [0x1104, 0x1161, 0x11BE], NFKC: [0xB547], NFKD: [0x1104, 0x1161, 0x11BE] }, +{ source: [0xB548], NFC: [0xB548], NFD: [0x1104, 0x1161, 0x11BF], NFKC: [0xB548], NFKD: [0x1104, 0x1161, 0x11BF] }, +{ source: [0xB549], NFC: [0xB549], NFD: [0x1104, 0x1161, 0x11C0], NFKC: [0xB549], NFKD: [0x1104, 0x1161, 0x11C0] }, +{ source: [0xB54A], NFC: [0xB54A], NFD: [0x1104, 0x1161, 0x11C1], NFKC: [0xB54A], NFKD: [0x1104, 0x1161, 0x11C1] }, +{ source: [0xB54B], NFC: [0xB54B], NFD: [0x1104, 0x1161, 0x11C2], NFKC: [0xB54B], NFKD: [0x1104, 0x1161, 0x11C2] }, +{ source: [0xB54C], NFC: [0xB54C], NFD: [0x1104, 0x1162], NFKC: [0xB54C], NFKD: [0x1104, 0x1162] }, +{ source: [0xB54D], NFC: [0xB54D], NFD: [0x1104, 0x1162, 0x11A8], NFKC: [0xB54D], NFKD: [0x1104, 0x1162, 0x11A8] }, +{ source: [0xB54E], NFC: [0xB54E], NFD: [0x1104, 0x1162, 0x11A9], NFKC: [0xB54E], NFKD: [0x1104, 0x1162, 0x11A9] }, +{ source: [0xB54F], NFC: [0xB54F], NFD: [0x1104, 0x1162, 0x11AA], NFKC: [0xB54F], NFKD: [0x1104, 0x1162, 0x11AA] }, +{ source: [0xB550], NFC: [0xB550], NFD: [0x1104, 0x1162, 0x11AB], NFKC: [0xB550], NFKD: [0x1104, 0x1162, 0x11AB] }, +{ source: [0xB551], NFC: [0xB551], NFD: [0x1104, 0x1162, 0x11AC], NFKC: [0xB551], NFKD: [0x1104, 0x1162, 0x11AC] }, +{ source: [0xB552], NFC: [0xB552], NFD: [0x1104, 0x1162, 0x11AD], NFKC: [0xB552], NFKD: [0x1104, 0x1162, 0x11AD] }, +{ source: [0xB553], NFC: [0xB553], NFD: [0x1104, 0x1162, 0x11AE], NFKC: [0xB553], NFKD: [0x1104, 0x1162, 0x11AE] }, +{ source: [0xB554], NFC: [0xB554], NFD: [0x1104, 0x1162, 0x11AF], NFKC: [0xB554], NFKD: [0x1104, 0x1162, 0x11AF] }, +{ source: [0xB555], NFC: [0xB555], NFD: [0x1104, 0x1162, 0x11B0], NFKC: [0xB555], NFKD: [0x1104, 0x1162, 0x11B0] }, +{ source: [0xB556], NFC: [0xB556], NFD: [0x1104, 0x1162, 0x11B1], NFKC: [0xB556], NFKD: [0x1104, 0x1162, 0x11B1] }, +{ source: [0xB557], NFC: [0xB557], NFD: [0x1104, 0x1162, 0x11B2], NFKC: [0xB557], NFKD: [0x1104, 0x1162, 0x11B2] }, +{ source: [0xB558], NFC: [0xB558], NFD: [0x1104, 0x1162, 0x11B3], NFKC: [0xB558], NFKD: [0x1104, 0x1162, 0x11B3] }, +{ source: [0xB559], NFC: [0xB559], NFD: [0x1104, 0x1162, 0x11B4], NFKC: [0xB559], NFKD: [0x1104, 0x1162, 0x11B4] }, +{ source: [0xB55A], NFC: [0xB55A], NFD: [0x1104, 0x1162, 0x11B5], NFKC: [0xB55A], NFKD: [0x1104, 0x1162, 0x11B5] }, +{ source: [0xB55B], NFC: [0xB55B], NFD: [0x1104, 0x1162, 0x11B6], NFKC: [0xB55B], NFKD: [0x1104, 0x1162, 0x11B6] }, +{ source: [0xB55C], NFC: [0xB55C], NFD: [0x1104, 0x1162, 0x11B7], NFKC: [0xB55C], NFKD: [0x1104, 0x1162, 0x11B7] }, +{ source: [0xB55D], NFC: [0xB55D], NFD: [0x1104, 0x1162, 0x11B8], NFKC: [0xB55D], NFKD: [0x1104, 0x1162, 0x11B8] }, +{ source: [0xB55E], NFC: [0xB55E], NFD: [0x1104, 0x1162, 0x11B9], NFKC: [0xB55E], NFKD: [0x1104, 0x1162, 0x11B9] }, +{ source: [0xB55F], NFC: [0xB55F], NFD: [0x1104, 0x1162, 0x11BA], NFKC: [0xB55F], NFKD: [0x1104, 0x1162, 0x11BA] }, +{ source: [0xB560], NFC: [0xB560], NFD: [0x1104, 0x1162, 0x11BB], NFKC: [0xB560], NFKD: [0x1104, 0x1162, 0x11BB] }, +{ source: [0xB561], NFC: [0xB561], NFD: [0x1104, 0x1162, 0x11BC], NFKC: [0xB561], NFKD: [0x1104, 0x1162, 0x11BC] }, +{ source: [0xB562], NFC: [0xB562], NFD: [0x1104, 0x1162, 0x11BD], NFKC: [0xB562], NFKD: [0x1104, 0x1162, 0x11BD] }, +{ source: [0xB563], NFC: [0xB563], NFD: [0x1104, 0x1162, 0x11BE], NFKC: [0xB563], NFKD: [0x1104, 0x1162, 0x11BE] }, +{ source: [0xB564], NFC: [0xB564], NFD: [0x1104, 0x1162, 0x11BF], NFKC: [0xB564], NFKD: [0x1104, 0x1162, 0x11BF] }, +{ source: [0xB565], NFC: [0xB565], NFD: [0x1104, 0x1162, 0x11C0], NFKC: [0xB565], NFKD: [0x1104, 0x1162, 0x11C0] }, +{ source: [0xB566], NFC: [0xB566], NFD: [0x1104, 0x1162, 0x11C1], NFKC: [0xB566], NFKD: [0x1104, 0x1162, 0x11C1] }, +{ source: [0xB567], NFC: [0xB567], NFD: [0x1104, 0x1162, 0x11C2], NFKC: [0xB567], NFKD: [0x1104, 0x1162, 0x11C2] }, +{ source: [0xB568], NFC: [0xB568], NFD: [0x1104, 0x1163], NFKC: [0xB568], NFKD: [0x1104, 0x1163] }, +{ source: [0xB569], NFC: [0xB569], NFD: [0x1104, 0x1163, 0x11A8], NFKC: [0xB569], NFKD: [0x1104, 0x1163, 0x11A8] }, +{ source: [0xB56A], NFC: [0xB56A], NFD: [0x1104, 0x1163, 0x11A9], NFKC: [0xB56A], NFKD: [0x1104, 0x1163, 0x11A9] }, +{ source: [0xB56B], NFC: [0xB56B], NFD: [0x1104, 0x1163, 0x11AA], NFKC: [0xB56B], NFKD: [0x1104, 0x1163, 0x11AA] }, +{ source: [0xB56C], NFC: [0xB56C], NFD: [0x1104, 0x1163, 0x11AB], NFKC: [0xB56C], NFKD: [0x1104, 0x1163, 0x11AB] }, +{ source: [0xB56D], NFC: [0xB56D], NFD: [0x1104, 0x1163, 0x11AC], NFKC: [0xB56D], NFKD: [0x1104, 0x1163, 0x11AC] }, +{ source: [0xB56E], NFC: [0xB56E], NFD: [0x1104, 0x1163, 0x11AD], NFKC: [0xB56E], NFKD: [0x1104, 0x1163, 0x11AD] }, +{ source: [0xB56F], NFC: [0xB56F], NFD: [0x1104, 0x1163, 0x11AE], NFKC: [0xB56F], NFKD: [0x1104, 0x1163, 0x11AE] }, +{ source: [0xB570], NFC: [0xB570], NFD: [0x1104, 0x1163, 0x11AF], NFKC: [0xB570], NFKD: [0x1104, 0x1163, 0x11AF] }, +{ source: [0xB571], NFC: [0xB571], NFD: [0x1104, 0x1163, 0x11B0], NFKC: [0xB571], NFKD: [0x1104, 0x1163, 0x11B0] }, +{ source: [0xB572], NFC: [0xB572], NFD: [0x1104, 0x1163, 0x11B1], NFKC: [0xB572], NFKD: [0x1104, 0x1163, 0x11B1] }, +{ source: [0xB573], NFC: [0xB573], NFD: [0x1104, 0x1163, 0x11B2], NFKC: [0xB573], NFKD: [0x1104, 0x1163, 0x11B2] }, +{ source: [0xB574], NFC: [0xB574], NFD: [0x1104, 0x1163, 0x11B3], NFKC: [0xB574], NFKD: [0x1104, 0x1163, 0x11B3] }, +{ source: [0xB575], NFC: [0xB575], NFD: [0x1104, 0x1163, 0x11B4], NFKC: [0xB575], NFKD: [0x1104, 0x1163, 0x11B4] }, +{ source: [0xB576], NFC: [0xB576], NFD: [0x1104, 0x1163, 0x11B5], NFKC: [0xB576], NFKD: [0x1104, 0x1163, 0x11B5] }, +{ source: [0xB577], NFC: [0xB577], NFD: [0x1104, 0x1163, 0x11B6], NFKC: [0xB577], NFKD: [0x1104, 0x1163, 0x11B6] }, +{ source: [0xB578], NFC: [0xB578], NFD: [0x1104, 0x1163, 0x11B7], NFKC: [0xB578], NFKD: [0x1104, 0x1163, 0x11B7] }, +{ source: [0xB579], NFC: [0xB579], NFD: [0x1104, 0x1163, 0x11B8], NFKC: [0xB579], NFKD: [0x1104, 0x1163, 0x11B8] }, +{ source: [0xB57A], NFC: [0xB57A], NFD: [0x1104, 0x1163, 0x11B9], NFKC: [0xB57A], NFKD: [0x1104, 0x1163, 0x11B9] }, +{ source: [0xB57B], NFC: [0xB57B], NFD: [0x1104, 0x1163, 0x11BA], NFKC: [0xB57B], NFKD: [0x1104, 0x1163, 0x11BA] }, +{ source: [0xB57C], NFC: [0xB57C], NFD: [0x1104, 0x1163, 0x11BB], NFKC: [0xB57C], NFKD: [0x1104, 0x1163, 0x11BB] }, +{ source: [0xB57D], NFC: [0xB57D], NFD: [0x1104, 0x1163, 0x11BC], NFKC: [0xB57D], NFKD: [0x1104, 0x1163, 0x11BC] }, +{ source: [0xB57E], NFC: [0xB57E], NFD: [0x1104, 0x1163, 0x11BD], NFKC: [0xB57E], NFKD: [0x1104, 0x1163, 0x11BD] }, +{ source: [0xB57F], NFC: [0xB57F], NFD: [0x1104, 0x1163, 0x11BE], NFKC: [0xB57F], NFKD: [0x1104, 0x1163, 0x11BE] }, +{ source: [0xB580], NFC: [0xB580], NFD: [0x1104, 0x1163, 0x11BF], NFKC: [0xB580], NFKD: [0x1104, 0x1163, 0x11BF] }, +{ source: [0xB581], NFC: [0xB581], NFD: [0x1104, 0x1163, 0x11C0], NFKC: [0xB581], NFKD: [0x1104, 0x1163, 0x11C0] }, +{ source: [0xB582], NFC: [0xB582], NFD: [0x1104, 0x1163, 0x11C1], NFKC: [0xB582], NFKD: [0x1104, 0x1163, 0x11C1] }, +{ source: [0xB583], NFC: [0xB583], NFD: [0x1104, 0x1163, 0x11C2], NFKC: [0xB583], NFKD: [0x1104, 0x1163, 0x11C2] }, +{ source: [0xB584], NFC: [0xB584], NFD: [0x1104, 0x1164], NFKC: [0xB584], NFKD: [0x1104, 0x1164] }, +{ source: [0xB585], NFC: [0xB585], NFD: [0x1104, 0x1164, 0x11A8], NFKC: [0xB585], NFKD: [0x1104, 0x1164, 0x11A8] }, +{ source: [0xB586], NFC: [0xB586], NFD: [0x1104, 0x1164, 0x11A9], NFKC: [0xB586], NFKD: [0x1104, 0x1164, 0x11A9] }, +{ source: [0xB587], NFC: [0xB587], NFD: [0x1104, 0x1164, 0x11AA], NFKC: [0xB587], NFKD: [0x1104, 0x1164, 0x11AA] }, +{ source: [0xB588], NFC: [0xB588], NFD: [0x1104, 0x1164, 0x11AB], NFKC: [0xB588], NFKD: [0x1104, 0x1164, 0x11AB] }, +{ source: [0xB589], NFC: [0xB589], NFD: [0x1104, 0x1164, 0x11AC], NFKC: [0xB589], NFKD: [0x1104, 0x1164, 0x11AC] }, +{ source: [0xB58A], NFC: [0xB58A], NFD: [0x1104, 0x1164, 0x11AD], NFKC: [0xB58A], NFKD: [0x1104, 0x1164, 0x11AD] }, +{ source: [0xB58B], NFC: [0xB58B], NFD: [0x1104, 0x1164, 0x11AE], NFKC: [0xB58B], NFKD: [0x1104, 0x1164, 0x11AE] }, +{ source: [0xB58C], NFC: [0xB58C], NFD: [0x1104, 0x1164, 0x11AF], NFKC: [0xB58C], NFKD: [0x1104, 0x1164, 0x11AF] }, +{ source: [0xB58D], NFC: [0xB58D], NFD: [0x1104, 0x1164, 0x11B0], NFKC: [0xB58D], NFKD: [0x1104, 0x1164, 0x11B0] }, +{ source: [0xB58E], NFC: [0xB58E], NFD: [0x1104, 0x1164, 0x11B1], NFKC: [0xB58E], NFKD: [0x1104, 0x1164, 0x11B1] }, +{ source: [0xB58F], NFC: [0xB58F], NFD: [0x1104, 0x1164, 0x11B2], NFKC: [0xB58F], NFKD: [0x1104, 0x1164, 0x11B2] }, +{ source: [0xB590], NFC: [0xB590], NFD: [0x1104, 0x1164, 0x11B3], NFKC: [0xB590], NFKD: [0x1104, 0x1164, 0x11B3] }, +{ source: [0xB591], NFC: [0xB591], NFD: [0x1104, 0x1164, 0x11B4], NFKC: [0xB591], NFKD: [0x1104, 0x1164, 0x11B4] }, +{ source: [0xB592], NFC: [0xB592], NFD: [0x1104, 0x1164, 0x11B5], NFKC: [0xB592], NFKD: [0x1104, 0x1164, 0x11B5] }, +{ source: [0xB593], NFC: [0xB593], NFD: [0x1104, 0x1164, 0x11B6], NFKC: [0xB593], NFKD: [0x1104, 0x1164, 0x11B6] }, +{ source: [0xB594], NFC: [0xB594], NFD: [0x1104, 0x1164, 0x11B7], NFKC: [0xB594], NFKD: [0x1104, 0x1164, 0x11B7] }, +{ source: [0xB595], NFC: [0xB595], NFD: [0x1104, 0x1164, 0x11B8], NFKC: [0xB595], NFKD: [0x1104, 0x1164, 0x11B8] }, +{ source: [0xB596], NFC: [0xB596], NFD: [0x1104, 0x1164, 0x11B9], NFKC: [0xB596], NFKD: [0x1104, 0x1164, 0x11B9] }, +{ source: [0xB597], NFC: [0xB597], NFD: [0x1104, 0x1164, 0x11BA], NFKC: [0xB597], NFKD: [0x1104, 0x1164, 0x11BA] }, +{ source: [0xB598], NFC: [0xB598], NFD: [0x1104, 0x1164, 0x11BB], NFKC: [0xB598], NFKD: [0x1104, 0x1164, 0x11BB] }, +{ source: [0xB599], NFC: [0xB599], NFD: [0x1104, 0x1164, 0x11BC], NFKC: [0xB599], NFKD: [0x1104, 0x1164, 0x11BC] }, +{ source: [0xB59A], NFC: [0xB59A], NFD: [0x1104, 0x1164, 0x11BD], NFKC: [0xB59A], NFKD: [0x1104, 0x1164, 0x11BD] }, +{ source: [0xB59B], NFC: [0xB59B], NFD: [0x1104, 0x1164, 0x11BE], NFKC: [0xB59B], NFKD: [0x1104, 0x1164, 0x11BE] }, +{ source: [0xB59C], NFC: [0xB59C], NFD: [0x1104, 0x1164, 0x11BF], NFKC: [0xB59C], NFKD: [0x1104, 0x1164, 0x11BF] }, +{ source: [0xB59D], NFC: [0xB59D], NFD: [0x1104, 0x1164, 0x11C0], NFKC: [0xB59D], NFKD: [0x1104, 0x1164, 0x11C0] }, +{ source: [0xB59E], NFC: [0xB59E], NFD: [0x1104, 0x1164, 0x11C1], NFKC: [0xB59E], NFKD: [0x1104, 0x1164, 0x11C1] }, +{ source: [0xB59F], NFC: [0xB59F], NFD: [0x1104, 0x1164, 0x11C2], NFKC: [0xB59F], NFKD: [0x1104, 0x1164, 0x11C2] }, +{ source: [0xB5A0], NFC: [0xB5A0], NFD: [0x1104, 0x1165], NFKC: [0xB5A0], NFKD: [0x1104, 0x1165] }, +{ source: [0xB5A1], NFC: [0xB5A1], NFD: [0x1104, 0x1165, 0x11A8], NFKC: [0xB5A1], NFKD: [0x1104, 0x1165, 0x11A8] }, +{ source: [0xB5A2], NFC: [0xB5A2], NFD: [0x1104, 0x1165, 0x11A9], NFKC: [0xB5A2], NFKD: [0x1104, 0x1165, 0x11A9] }, +{ source: [0xB5A3], NFC: [0xB5A3], NFD: [0x1104, 0x1165, 0x11AA], NFKC: [0xB5A3], NFKD: [0x1104, 0x1165, 0x11AA] }, +{ source: [0xB5A4], NFC: [0xB5A4], NFD: [0x1104, 0x1165, 0x11AB], NFKC: [0xB5A4], NFKD: [0x1104, 0x1165, 0x11AB] }, +{ source: [0xB5A5], NFC: [0xB5A5], NFD: [0x1104, 0x1165, 0x11AC], NFKC: [0xB5A5], NFKD: [0x1104, 0x1165, 0x11AC] }, +{ source: [0xB5A6], NFC: [0xB5A6], NFD: [0x1104, 0x1165, 0x11AD], NFKC: [0xB5A6], NFKD: [0x1104, 0x1165, 0x11AD] }, +{ source: [0xB5A7], NFC: [0xB5A7], NFD: [0x1104, 0x1165, 0x11AE], NFKC: [0xB5A7], NFKD: [0x1104, 0x1165, 0x11AE] }, +{ source: [0xB5A8], NFC: [0xB5A8], NFD: [0x1104, 0x1165, 0x11AF], NFKC: [0xB5A8], NFKD: [0x1104, 0x1165, 0x11AF] }, +{ source: [0xB5A9], NFC: [0xB5A9], NFD: [0x1104, 0x1165, 0x11B0], NFKC: [0xB5A9], NFKD: [0x1104, 0x1165, 0x11B0] }, +{ source: [0xB5AA], NFC: [0xB5AA], NFD: [0x1104, 0x1165, 0x11B1], NFKC: [0xB5AA], NFKD: [0x1104, 0x1165, 0x11B1] }, +{ source: [0xB5AB], NFC: [0xB5AB], NFD: [0x1104, 0x1165, 0x11B2], NFKC: [0xB5AB], NFKD: [0x1104, 0x1165, 0x11B2] }, +{ source: [0xB5AC], NFC: [0xB5AC], NFD: [0x1104, 0x1165, 0x11B3], NFKC: [0xB5AC], NFKD: [0x1104, 0x1165, 0x11B3] }, +{ source: [0xB5AD], NFC: [0xB5AD], NFD: [0x1104, 0x1165, 0x11B4], NFKC: [0xB5AD], NFKD: [0x1104, 0x1165, 0x11B4] }, +{ source: [0xB5AE], NFC: [0xB5AE], NFD: [0x1104, 0x1165, 0x11B5], NFKC: [0xB5AE], NFKD: [0x1104, 0x1165, 0x11B5] }, +{ source: [0xB5AF], NFC: [0xB5AF], NFD: [0x1104, 0x1165, 0x11B6], NFKC: [0xB5AF], NFKD: [0x1104, 0x1165, 0x11B6] }, +{ source: [0xB5B0], NFC: [0xB5B0], NFD: [0x1104, 0x1165, 0x11B7], NFKC: [0xB5B0], NFKD: [0x1104, 0x1165, 0x11B7] }, +{ source: [0xB5B1], NFC: [0xB5B1], NFD: [0x1104, 0x1165, 0x11B8], NFKC: [0xB5B1], NFKD: [0x1104, 0x1165, 0x11B8] }, +{ source: [0xB5B2], NFC: [0xB5B2], NFD: [0x1104, 0x1165, 0x11B9], NFKC: [0xB5B2], NFKD: [0x1104, 0x1165, 0x11B9] }, +{ source: [0xB5B3], NFC: [0xB5B3], NFD: [0x1104, 0x1165, 0x11BA], NFKC: [0xB5B3], NFKD: [0x1104, 0x1165, 0x11BA] }, +{ source: [0xB5B4], NFC: [0xB5B4], NFD: [0x1104, 0x1165, 0x11BB], NFKC: [0xB5B4], NFKD: [0x1104, 0x1165, 0x11BB] }, +{ source: [0xB5B5], NFC: [0xB5B5], NFD: [0x1104, 0x1165, 0x11BC], NFKC: [0xB5B5], NFKD: [0x1104, 0x1165, 0x11BC] }, +{ source: [0xB5B6], NFC: [0xB5B6], NFD: [0x1104, 0x1165, 0x11BD], NFKC: [0xB5B6], NFKD: [0x1104, 0x1165, 0x11BD] }, +{ source: [0xB5B7], NFC: [0xB5B7], NFD: [0x1104, 0x1165, 0x11BE], NFKC: [0xB5B7], NFKD: [0x1104, 0x1165, 0x11BE] }, +{ source: [0xB5B8], NFC: [0xB5B8], NFD: [0x1104, 0x1165, 0x11BF], NFKC: [0xB5B8], NFKD: [0x1104, 0x1165, 0x11BF] }, +{ source: [0xB5B9], NFC: [0xB5B9], NFD: [0x1104, 0x1165, 0x11C0], NFKC: [0xB5B9], NFKD: [0x1104, 0x1165, 0x11C0] }, +{ source: [0xB5BA], NFC: [0xB5BA], NFD: [0x1104, 0x1165, 0x11C1], NFKC: [0xB5BA], NFKD: [0x1104, 0x1165, 0x11C1] }, +{ source: [0xB5BB], NFC: [0xB5BB], NFD: [0x1104, 0x1165, 0x11C2], NFKC: [0xB5BB], NFKD: [0x1104, 0x1165, 0x11C2] }, +{ source: [0xB5BC], NFC: [0xB5BC], NFD: [0x1104, 0x1166], NFKC: [0xB5BC], NFKD: [0x1104, 0x1166] }, +{ source: [0xB5BD], NFC: [0xB5BD], NFD: [0x1104, 0x1166, 0x11A8], NFKC: [0xB5BD], NFKD: [0x1104, 0x1166, 0x11A8] }, +{ source: [0xB5BE], NFC: [0xB5BE], NFD: [0x1104, 0x1166, 0x11A9], NFKC: [0xB5BE], NFKD: [0x1104, 0x1166, 0x11A9] }, +{ source: [0xB5BF], NFC: [0xB5BF], NFD: [0x1104, 0x1166, 0x11AA], NFKC: [0xB5BF], NFKD: [0x1104, 0x1166, 0x11AA] }, +{ source: [0xB5C0], NFC: [0xB5C0], NFD: [0x1104, 0x1166, 0x11AB], NFKC: [0xB5C0], NFKD: [0x1104, 0x1166, 0x11AB] }, +{ source: [0xB5C1], NFC: [0xB5C1], NFD: [0x1104, 0x1166, 0x11AC], NFKC: [0xB5C1], NFKD: [0x1104, 0x1166, 0x11AC] }, +{ source: [0xB5C2], NFC: [0xB5C2], NFD: [0x1104, 0x1166, 0x11AD], NFKC: [0xB5C2], NFKD: [0x1104, 0x1166, 0x11AD] }, +{ source: [0xB5C3], NFC: [0xB5C3], NFD: [0x1104, 0x1166, 0x11AE], NFKC: [0xB5C3], NFKD: [0x1104, 0x1166, 0x11AE] }, +{ source: [0xB5C4], NFC: [0xB5C4], NFD: [0x1104, 0x1166, 0x11AF], NFKC: [0xB5C4], NFKD: [0x1104, 0x1166, 0x11AF] }, +{ source: [0xB5C5], NFC: [0xB5C5], NFD: [0x1104, 0x1166, 0x11B0], NFKC: [0xB5C5], NFKD: [0x1104, 0x1166, 0x11B0] }, +{ source: [0xB5C6], NFC: [0xB5C6], NFD: [0x1104, 0x1166, 0x11B1], NFKC: [0xB5C6], NFKD: [0x1104, 0x1166, 0x11B1] }, +{ source: [0xB5C7], NFC: [0xB5C7], NFD: [0x1104, 0x1166, 0x11B2], NFKC: [0xB5C7], NFKD: [0x1104, 0x1166, 0x11B2] }, +{ source: [0xB5C8], NFC: [0xB5C8], NFD: [0x1104, 0x1166, 0x11B3], NFKC: [0xB5C8], NFKD: [0x1104, 0x1166, 0x11B3] }, +{ source: [0xB5C9], NFC: [0xB5C9], NFD: [0x1104, 0x1166, 0x11B4], NFKC: [0xB5C9], NFKD: [0x1104, 0x1166, 0x11B4] }, +{ source: [0xB5CA], NFC: [0xB5CA], NFD: [0x1104, 0x1166, 0x11B5], NFKC: [0xB5CA], NFKD: [0x1104, 0x1166, 0x11B5] }, +{ source: [0xB5CB], NFC: [0xB5CB], NFD: [0x1104, 0x1166, 0x11B6], NFKC: [0xB5CB], NFKD: [0x1104, 0x1166, 0x11B6] }, +{ source: [0xB5CC], NFC: [0xB5CC], NFD: [0x1104, 0x1166, 0x11B7], NFKC: [0xB5CC], NFKD: [0x1104, 0x1166, 0x11B7] }, +{ source: [0xB5CD], NFC: [0xB5CD], NFD: [0x1104, 0x1166, 0x11B8], NFKC: [0xB5CD], NFKD: [0x1104, 0x1166, 0x11B8] }, +{ source: [0xB5CE], NFC: [0xB5CE], NFD: [0x1104, 0x1166, 0x11B9], NFKC: [0xB5CE], NFKD: [0x1104, 0x1166, 0x11B9] }, +{ source: [0xB5CF], NFC: [0xB5CF], NFD: [0x1104, 0x1166, 0x11BA], NFKC: [0xB5CF], NFKD: [0x1104, 0x1166, 0x11BA] }, +{ source: [0xB5D0], NFC: [0xB5D0], NFD: [0x1104, 0x1166, 0x11BB], NFKC: [0xB5D0], NFKD: [0x1104, 0x1166, 0x11BB] }, +{ source: [0xB5D1], NFC: [0xB5D1], NFD: [0x1104, 0x1166, 0x11BC], NFKC: [0xB5D1], NFKD: [0x1104, 0x1166, 0x11BC] }, +{ source: [0xB5D2], NFC: [0xB5D2], NFD: [0x1104, 0x1166, 0x11BD], NFKC: [0xB5D2], NFKD: [0x1104, 0x1166, 0x11BD] }, +{ source: [0xB5D3], NFC: [0xB5D3], NFD: [0x1104, 0x1166, 0x11BE], NFKC: [0xB5D3], NFKD: [0x1104, 0x1166, 0x11BE] }, +{ source: [0xB5D4], NFC: [0xB5D4], NFD: [0x1104, 0x1166, 0x11BF], NFKC: [0xB5D4], NFKD: [0x1104, 0x1166, 0x11BF] }, +{ source: [0xB5D5], NFC: [0xB5D5], NFD: [0x1104, 0x1166, 0x11C0], NFKC: [0xB5D5], NFKD: [0x1104, 0x1166, 0x11C0] }, +{ source: [0xB5D6], NFC: [0xB5D6], NFD: [0x1104, 0x1166, 0x11C1], NFKC: [0xB5D6], NFKD: [0x1104, 0x1166, 0x11C1] }, +{ source: [0xB5D7], NFC: [0xB5D7], NFD: [0x1104, 0x1166, 0x11C2], NFKC: [0xB5D7], NFKD: [0x1104, 0x1166, 0x11C2] }, +{ source: [0xB5D8], NFC: [0xB5D8], NFD: [0x1104, 0x1167], NFKC: [0xB5D8], NFKD: [0x1104, 0x1167] }, +{ source: [0xB5D9], NFC: [0xB5D9], NFD: [0x1104, 0x1167, 0x11A8], NFKC: [0xB5D9], NFKD: [0x1104, 0x1167, 0x11A8] }, +{ source: [0xB5DA], NFC: [0xB5DA], NFD: [0x1104, 0x1167, 0x11A9], NFKC: [0xB5DA], NFKD: [0x1104, 0x1167, 0x11A9] }, +{ source: [0xB5DB], NFC: [0xB5DB], NFD: [0x1104, 0x1167, 0x11AA], NFKC: [0xB5DB], NFKD: [0x1104, 0x1167, 0x11AA] }, +{ source: [0xB5DC], NFC: [0xB5DC], NFD: [0x1104, 0x1167, 0x11AB], NFKC: [0xB5DC], NFKD: [0x1104, 0x1167, 0x11AB] }, +{ source: [0xB5DD], NFC: [0xB5DD], NFD: [0x1104, 0x1167, 0x11AC], NFKC: [0xB5DD], NFKD: [0x1104, 0x1167, 0x11AC] }, +{ source: [0xB5DE], NFC: [0xB5DE], NFD: [0x1104, 0x1167, 0x11AD], NFKC: [0xB5DE], NFKD: [0x1104, 0x1167, 0x11AD] }, +{ source: [0xB5DF], NFC: [0xB5DF], NFD: [0x1104, 0x1167, 0x11AE], NFKC: [0xB5DF], NFKD: [0x1104, 0x1167, 0x11AE] }, +{ source: [0xB5E0], NFC: [0xB5E0], NFD: [0x1104, 0x1167, 0x11AF], NFKC: [0xB5E0], NFKD: [0x1104, 0x1167, 0x11AF] }, +{ source: [0xB5E1], NFC: [0xB5E1], NFD: [0x1104, 0x1167, 0x11B0], NFKC: [0xB5E1], NFKD: [0x1104, 0x1167, 0x11B0] }, +{ source: [0xB5E2], NFC: [0xB5E2], NFD: [0x1104, 0x1167, 0x11B1], NFKC: [0xB5E2], NFKD: [0x1104, 0x1167, 0x11B1] }, +{ source: [0xB5E3], NFC: [0xB5E3], NFD: [0x1104, 0x1167, 0x11B2], NFKC: [0xB5E3], NFKD: [0x1104, 0x1167, 0x11B2] }, +{ source: [0xB5E4], NFC: [0xB5E4], NFD: [0x1104, 0x1167, 0x11B3], NFKC: [0xB5E4], NFKD: [0x1104, 0x1167, 0x11B3] }, +{ source: [0xB5E5], NFC: [0xB5E5], NFD: [0x1104, 0x1167, 0x11B4], NFKC: [0xB5E5], NFKD: [0x1104, 0x1167, 0x11B4] }, +{ source: [0xB5E6], NFC: [0xB5E6], NFD: [0x1104, 0x1167, 0x11B5], NFKC: [0xB5E6], NFKD: [0x1104, 0x1167, 0x11B5] }, +{ source: [0xB5E7], NFC: [0xB5E7], NFD: [0x1104, 0x1167, 0x11B6], NFKC: [0xB5E7], NFKD: [0x1104, 0x1167, 0x11B6] }, +{ source: [0xB5E8], NFC: [0xB5E8], NFD: [0x1104, 0x1167, 0x11B7], NFKC: [0xB5E8], NFKD: [0x1104, 0x1167, 0x11B7] }, +{ source: [0xB5E9], NFC: [0xB5E9], NFD: [0x1104, 0x1167, 0x11B8], NFKC: [0xB5E9], NFKD: [0x1104, 0x1167, 0x11B8] }, +{ source: [0xB5EA], NFC: [0xB5EA], NFD: [0x1104, 0x1167, 0x11B9], NFKC: [0xB5EA], NFKD: [0x1104, 0x1167, 0x11B9] }, +{ source: [0xB5EB], NFC: [0xB5EB], NFD: [0x1104, 0x1167, 0x11BA], NFKC: [0xB5EB], NFKD: [0x1104, 0x1167, 0x11BA] }, +{ source: [0xB5EC], NFC: [0xB5EC], NFD: [0x1104, 0x1167, 0x11BB], NFKC: [0xB5EC], NFKD: [0x1104, 0x1167, 0x11BB] }, +{ source: [0xB5ED], NFC: [0xB5ED], NFD: [0x1104, 0x1167, 0x11BC], NFKC: [0xB5ED], NFKD: [0x1104, 0x1167, 0x11BC] }, +{ source: [0xB5EE], NFC: [0xB5EE], NFD: [0x1104, 0x1167, 0x11BD], NFKC: [0xB5EE], NFKD: [0x1104, 0x1167, 0x11BD] }, +{ source: [0xB5EF], NFC: [0xB5EF], NFD: [0x1104, 0x1167, 0x11BE], NFKC: [0xB5EF], NFKD: [0x1104, 0x1167, 0x11BE] }, +{ source: [0xB5F0], NFC: [0xB5F0], NFD: [0x1104, 0x1167, 0x11BF], NFKC: [0xB5F0], NFKD: [0x1104, 0x1167, 0x11BF] }, +{ source: [0xB5F1], NFC: [0xB5F1], NFD: [0x1104, 0x1167, 0x11C0], NFKC: [0xB5F1], NFKD: [0x1104, 0x1167, 0x11C0] }, +{ source: [0xB5F2], NFC: [0xB5F2], NFD: [0x1104, 0x1167, 0x11C1], NFKC: [0xB5F2], NFKD: [0x1104, 0x1167, 0x11C1] }, +{ source: [0xB5F3], NFC: [0xB5F3], NFD: [0x1104, 0x1167, 0x11C2], NFKC: [0xB5F3], NFKD: [0x1104, 0x1167, 0x11C2] }, +{ source: [0xB5F4], NFC: [0xB5F4], NFD: [0x1104, 0x1168], NFKC: [0xB5F4], NFKD: [0x1104, 0x1168] }, +{ source: [0xB5F5], NFC: [0xB5F5], NFD: [0x1104, 0x1168, 0x11A8], NFKC: [0xB5F5], NFKD: [0x1104, 0x1168, 0x11A8] }, +{ source: [0xB5F6], NFC: [0xB5F6], NFD: [0x1104, 0x1168, 0x11A9], NFKC: [0xB5F6], NFKD: [0x1104, 0x1168, 0x11A9] }, +{ source: [0xB5F7], NFC: [0xB5F7], NFD: [0x1104, 0x1168, 0x11AA], NFKC: [0xB5F7], NFKD: [0x1104, 0x1168, 0x11AA] }, +{ source: [0xB5F8], NFC: [0xB5F8], NFD: [0x1104, 0x1168, 0x11AB], NFKC: [0xB5F8], NFKD: [0x1104, 0x1168, 0x11AB] }, +{ source: [0xB5F9], NFC: [0xB5F9], NFD: [0x1104, 0x1168, 0x11AC], NFKC: [0xB5F9], NFKD: [0x1104, 0x1168, 0x11AC] }, +{ source: [0xB5FA], NFC: [0xB5FA], NFD: [0x1104, 0x1168, 0x11AD], NFKC: [0xB5FA], NFKD: [0x1104, 0x1168, 0x11AD] }, +{ source: [0xB5FB], NFC: [0xB5FB], NFD: [0x1104, 0x1168, 0x11AE], NFKC: [0xB5FB], NFKD: [0x1104, 0x1168, 0x11AE] }, +{ source: [0xB5FC], NFC: [0xB5FC], NFD: [0x1104, 0x1168, 0x11AF], NFKC: [0xB5FC], NFKD: [0x1104, 0x1168, 0x11AF] }, +{ source: [0xB5FD], NFC: [0xB5FD], NFD: [0x1104, 0x1168, 0x11B0], NFKC: [0xB5FD], NFKD: [0x1104, 0x1168, 0x11B0] }, +{ source: [0xB5FE], NFC: [0xB5FE], NFD: [0x1104, 0x1168, 0x11B1], NFKC: [0xB5FE], NFKD: [0x1104, 0x1168, 0x11B1] }, +{ source: [0xB5FF], NFC: [0xB5FF], NFD: [0x1104, 0x1168, 0x11B2], NFKC: [0xB5FF], NFKD: [0x1104, 0x1168, 0x11B2] }, +{ source: [0xB600], NFC: [0xB600], NFD: [0x1104, 0x1168, 0x11B3], NFKC: [0xB600], NFKD: [0x1104, 0x1168, 0x11B3] }, +{ source: [0xB601], NFC: [0xB601], NFD: [0x1104, 0x1168, 0x11B4], NFKC: [0xB601], NFKD: [0x1104, 0x1168, 0x11B4] }, +{ source: [0xB602], NFC: [0xB602], NFD: [0x1104, 0x1168, 0x11B5], NFKC: [0xB602], NFKD: [0x1104, 0x1168, 0x11B5] }, +{ source: [0xB603], NFC: [0xB603], NFD: [0x1104, 0x1168, 0x11B6], NFKC: [0xB603], NFKD: [0x1104, 0x1168, 0x11B6] }, +{ source: [0xB604], NFC: [0xB604], NFD: [0x1104, 0x1168, 0x11B7], NFKC: [0xB604], NFKD: [0x1104, 0x1168, 0x11B7] }, +{ source: [0xB605], NFC: [0xB605], NFD: [0x1104, 0x1168, 0x11B8], NFKC: [0xB605], NFKD: [0x1104, 0x1168, 0x11B8] }, +{ source: [0xB606], NFC: [0xB606], NFD: [0x1104, 0x1168, 0x11B9], NFKC: [0xB606], NFKD: [0x1104, 0x1168, 0x11B9] }, +{ source: [0xB607], NFC: [0xB607], NFD: [0x1104, 0x1168, 0x11BA], NFKC: [0xB607], NFKD: [0x1104, 0x1168, 0x11BA] }, +{ source: [0xB608], NFC: [0xB608], NFD: [0x1104, 0x1168, 0x11BB], NFKC: [0xB608], NFKD: [0x1104, 0x1168, 0x11BB] }, +{ source: [0xB609], NFC: [0xB609], NFD: [0x1104, 0x1168, 0x11BC], NFKC: [0xB609], NFKD: [0x1104, 0x1168, 0x11BC] }, +{ source: [0xB60A], NFC: [0xB60A], NFD: [0x1104, 0x1168, 0x11BD], NFKC: [0xB60A], NFKD: [0x1104, 0x1168, 0x11BD] }, +{ source: [0xB60B], NFC: [0xB60B], NFD: [0x1104, 0x1168, 0x11BE], NFKC: [0xB60B], NFKD: [0x1104, 0x1168, 0x11BE] }, +{ source: [0xB60C], NFC: [0xB60C], NFD: [0x1104, 0x1168, 0x11BF], NFKC: [0xB60C], NFKD: [0x1104, 0x1168, 0x11BF] }, +{ source: [0xB60D], NFC: [0xB60D], NFD: [0x1104, 0x1168, 0x11C0], NFKC: [0xB60D], NFKD: [0x1104, 0x1168, 0x11C0] }, +{ source: [0xB60E], NFC: [0xB60E], NFD: [0x1104, 0x1168, 0x11C1], NFKC: [0xB60E], NFKD: [0x1104, 0x1168, 0x11C1] }, +{ source: [0xB60F], NFC: [0xB60F], NFD: [0x1104, 0x1168, 0x11C2], NFKC: [0xB60F], NFKD: [0x1104, 0x1168, 0x11C2] }, +{ source: [0xB610], NFC: [0xB610], NFD: [0x1104, 0x1169], NFKC: [0xB610], NFKD: [0x1104, 0x1169] }, +{ source: [0xB611], NFC: [0xB611], NFD: [0x1104, 0x1169, 0x11A8], NFKC: [0xB611], NFKD: [0x1104, 0x1169, 0x11A8] }, +{ source: [0xB612], NFC: [0xB612], NFD: [0x1104, 0x1169, 0x11A9], NFKC: [0xB612], NFKD: [0x1104, 0x1169, 0x11A9] }, +{ source: [0xB613], NFC: [0xB613], NFD: [0x1104, 0x1169, 0x11AA], NFKC: [0xB613], NFKD: [0x1104, 0x1169, 0x11AA] }, +{ source: [0xB614], NFC: [0xB614], NFD: [0x1104, 0x1169, 0x11AB], NFKC: [0xB614], NFKD: [0x1104, 0x1169, 0x11AB] }, +{ source: [0xB615], NFC: [0xB615], NFD: [0x1104, 0x1169, 0x11AC], NFKC: [0xB615], NFKD: [0x1104, 0x1169, 0x11AC] }, +{ source: [0xB616], NFC: [0xB616], NFD: [0x1104, 0x1169, 0x11AD], NFKC: [0xB616], NFKD: [0x1104, 0x1169, 0x11AD] }, +{ source: [0xB617], NFC: [0xB617], NFD: [0x1104, 0x1169, 0x11AE], NFKC: [0xB617], NFKD: [0x1104, 0x1169, 0x11AE] }, +{ source: [0xB618], NFC: [0xB618], NFD: [0x1104, 0x1169, 0x11AF], NFKC: [0xB618], NFKD: [0x1104, 0x1169, 0x11AF] }, +{ source: [0xB619], NFC: [0xB619], NFD: [0x1104, 0x1169, 0x11B0], NFKC: [0xB619], NFKD: [0x1104, 0x1169, 0x11B0] }, +{ source: [0xB61A], NFC: [0xB61A], NFD: [0x1104, 0x1169, 0x11B1], NFKC: [0xB61A], NFKD: [0x1104, 0x1169, 0x11B1] }, +{ source: [0xB61B], NFC: [0xB61B], NFD: [0x1104, 0x1169, 0x11B2], NFKC: [0xB61B], NFKD: [0x1104, 0x1169, 0x11B2] }, +{ source: [0xB61C], NFC: [0xB61C], NFD: [0x1104, 0x1169, 0x11B3], NFKC: [0xB61C], NFKD: [0x1104, 0x1169, 0x11B3] }, +{ source: [0xB61D], NFC: [0xB61D], NFD: [0x1104, 0x1169, 0x11B4], NFKC: [0xB61D], NFKD: [0x1104, 0x1169, 0x11B4] }, +{ source: [0xB61E], NFC: [0xB61E], NFD: [0x1104, 0x1169, 0x11B5], NFKC: [0xB61E], NFKD: [0x1104, 0x1169, 0x11B5] }, +{ source: [0xB61F], NFC: [0xB61F], NFD: [0x1104, 0x1169, 0x11B6], NFKC: [0xB61F], NFKD: [0x1104, 0x1169, 0x11B6] }, +{ source: [0xB620], NFC: [0xB620], NFD: [0x1104, 0x1169, 0x11B7], NFKC: [0xB620], NFKD: [0x1104, 0x1169, 0x11B7] }, +{ source: [0xB621], NFC: [0xB621], NFD: [0x1104, 0x1169, 0x11B8], NFKC: [0xB621], NFKD: [0x1104, 0x1169, 0x11B8] }, +{ source: [0xB622], NFC: [0xB622], NFD: [0x1104, 0x1169, 0x11B9], NFKC: [0xB622], NFKD: [0x1104, 0x1169, 0x11B9] }, +{ source: [0xB623], NFC: [0xB623], NFD: [0x1104, 0x1169, 0x11BA], NFKC: [0xB623], NFKD: [0x1104, 0x1169, 0x11BA] }, +{ source: [0xB624], NFC: [0xB624], NFD: [0x1104, 0x1169, 0x11BB], NFKC: [0xB624], NFKD: [0x1104, 0x1169, 0x11BB] }, +{ source: [0xB625], NFC: [0xB625], NFD: [0x1104, 0x1169, 0x11BC], NFKC: [0xB625], NFKD: [0x1104, 0x1169, 0x11BC] }, +{ source: [0xB626], NFC: [0xB626], NFD: [0x1104, 0x1169, 0x11BD], NFKC: [0xB626], NFKD: [0x1104, 0x1169, 0x11BD] }, +{ source: [0xB627], NFC: [0xB627], NFD: [0x1104, 0x1169, 0x11BE], NFKC: [0xB627], NFKD: [0x1104, 0x1169, 0x11BE] }, +{ source: [0xB628], NFC: [0xB628], NFD: [0x1104, 0x1169, 0x11BF], NFKC: [0xB628], NFKD: [0x1104, 0x1169, 0x11BF] }, +{ source: [0xB629], NFC: [0xB629], NFD: [0x1104, 0x1169, 0x11C0], NFKC: [0xB629], NFKD: [0x1104, 0x1169, 0x11C0] }, +{ source: [0xB62A], NFC: [0xB62A], NFD: [0x1104, 0x1169, 0x11C1], NFKC: [0xB62A], NFKD: [0x1104, 0x1169, 0x11C1] }, +{ source: [0xB62B], NFC: [0xB62B], NFD: [0x1104, 0x1169, 0x11C2], NFKC: [0xB62B], NFKD: [0x1104, 0x1169, 0x11C2] }, +{ source: [0xB62C], NFC: [0xB62C], NFD: [0x1104, 0x116A], NFKC: [0xB62C], NFKD: [0x1104, 0x116A] }, +{ source: [0xB62D], NFC: [0xB62D], NFD: [0x1104, 0x116A, 0x11A8], NFKC: [0xB62D], NFKD: [0x1104, 0x116A, 0x11A8] }, +{ source: [0xB62E], NFC: [0xB62E], NFD: [0x1104, 0x116A, 0x11A9], NFKC: [0xB62E], NFKD: [0x1104, 0x116A, 0x11A9] }, +{ source: [0xB62F], NFC: [0xB62F], NFD: [0x1104, 0x116A, 0x11AA], NFKC: [0xB62F], NFKD: [0x1104, 0x116A, 0x11AA] }, +{ source: [0xB630], NFC: [0xB630], NFD: [0x1104, 0x116A, 0x11AB], NFKC: [0xB630], NFKD: [0x1104, 0x116A, 0x11AB] }, +{ source: [0xB631], NFC: [0xB631], NFD: [0x1104, 0x116A, 0x11AC], NFKC: [0xB631], NFKD: [0x1104, 0x116A, 0x11AC] }, +{ source: [0xB632], NFC: [0xB632], NFD: [0x1104, 0x116A, 0x11AD], NFKC: [0xB632], NFKD: [0x1104, 0x116A, 0x11AD] }, +{ source: [0xB633], NFC: [0xB633], NFD: [0x1104, 0x116A, 0x11AE], NFKC: [0xB633], NFKD: [0x1104, 0x116A, 0x11AE] }, +{ source: [0xB634], NFC: [0xB634], NFD: [0x1104, 0x116A, 0x11AF], NFKC: [0xB634], NFKD: [0x1104, 0x116A, 0x11AF] }, +{ source: [0xB635], NFC: [0xB635], NFD: [0x1104, 0x116A, 0x11B0], NFKC: [0xB635], NFKD: [0x1104, 0x116A, 0x11B0] }, +{ source: [0xB636], NFC: [0xB636], NFD: [0x1104, 0x116A, 0x11B1], NFKC: [0xB636], NFKD: [0x1104, 0x116A, 0x11B1] }, +{ source: [0xB637], NFC: [0xB637], NFD: [0x1104, 0x116A, 0x11B2], NFKC: [0xB637], NFKD: [0x1104, 0x116A, 0x11B2] }, +{ source: [0xB638], NFC: [0xB638], NFD: [0x1104, 0x116A, 0x11B3], NFKC: [0xB638], NFKD: [0x1104, 0x116A, 0x11B3] }, +{ source: [0xB639], NFC: [0xB639], NFD: [0x1104, 0x116A, 0x11B4], NFKC: [0xB639], NFKD: [0x1104, 0x116A, 0x11B4] }, +{ source: [0xB63A], NFC: [0xB63A], NFD: [0x1104, 0x116A, 0x11B5], NFKC: [0xB63A], NFKD: [0x1104, 0x116A, 0x11B5] }, +{ source: [0xB63B], NFC: [0xB63B], NFD: [0x1104, 0x116A, 0x11B6], NFKC: [0xB63B], NFKD: [0x1104, 0x116A, 0x11B6] }, +{ source: [0xB63C], NFC: [0xB63C], NFD: [0x1104, 0x116A, 0x11B7], NFKC: [0xB63C], NFKD: [0x1104, 0x116A, 0x11B7] }, +{ source: [0xB63D], NFC: [0xB63D], NFD: [0x1104, 0x116A, 0x11B8], NFKC: [0xB63D], NFKD: [0x1104, 0x116A, 0x11B8] }, +{ source: [0xB63E], NFC: [0xB63E], NFD: [0x1104, 0x116A, 0x11B9], NFKC: [0xB63E], NFKD: [0x1104, 0x116A, 0x11B9] }, +{ source: [0xB63F], NFC: [0xB63F], NFD: [0x1104, 0x116A, 0x11BA], NFKC: [0xB63F], NFKD: [0x1104, 0x116A, 0x11BA] }, +{ source: [0xB640], NFC: [0xB640], NFD: [0x1104, 0x116A, 0x11BB], NFKC: [0xB640], NFKD: [0x1104, 0x116A, 0x11BB] }, +{ source: [0xB641], NFC: [0xB641], NFD: [0x1104, 0x116A, 0x11BC], NFKC: [0xB641], NFKD: [0x1104, 0x116A, 0x11BC] }, +{ source: [0xB642], NFC: [0xB642], NFD: [0x1104, 0x116A, 0x11BD], NFKC: [0xB642], NFKD: [0x1104, 0x116A, 0x11BD] }, +{ source: [0xB643], NFC: [0xB643], NFD: [0x1104, 0x116A, 0x11BE], NFKC: [0xB643], NFKD: [0x1104, 0x116A, 0x11BE] }, +{ source: [0xB644], NFC: [0xB644], NFD: [0x1104, 0x116A, 0x11BF], NFKC: [0xB644], NFKD: [0x1104, 0x116A, 0x11BF] }, +{ source: [0xB645], NFC: [0xB645], NFD: [0x1104, 0x116A, 0x11C0], NFKC: [0xB645], NFKD: [0x1104, 0x116A, 0x11C0] }, +{ source: [0xB646], NFC: [0xB646], NFD: [0x1104, 0x116A, 0x11C1], NFKC: [0xB646], NFKD: [0x1104, 0x116A, 0x11C1] }, +{ source: [0xB647], NFC: [0xB647], NFD: [0x1104, 0x116A, 0x11C2], NFKC: [0xB647], NFKD: [0x1104, 0x116A, 0x11C2] }, +{ source: [0xB648], NFC: [0xB648], NFD: [0x1104, 0x116B], NFKC: [0xB648], NFKD: [0x1104, 0x116B] }, +{ source: [0xB649], NFC: [0xB649], NFD: [0x1104, 0x116B, 0x11A8], NFKC: [0xB649], NFKD: [0x1104, 0x116B, 0x11A8] }, +{ source: [0xB64A], NFC: [0xB64A], NFD: [0x1104, 0x116B, 0x11A9], NFKC: [0xB64A], NFKD: [0x1104, 0x116B, 0x11A9] }, +{ source: [0xB64B], NFC: [0xB64B], NFD: [0x1104, 0x116B, 0x11AA], NFKC: [0xB64B], NFKD: [0x1104, 0x116B, 0x11AA] }, +{ source: [0xB64C], NFC: [0xB64C], NFD: [0x1104, 0x116B, 0x11AB], NFKC: [0xB64C], NFKD: [0x1104, 0x116B, 0x11AB] }, +{ source: [0xB64D], NFC: [0xB64D], NFD: [0x1104, 0x116B, 0x11AC], NFKC: [0xB64D], NFKD: [0x1104, 0x116B, 0x11AC] }, +{ source: [0xB64E], NFC: [0xB64E], NFD: [0x1104, 0x116B, 0x11AD], NFKC: [0xB64E], NFKD: [0x1104, 0x116B, 0x11AD] }, +{ source: [0xB64F], NFC: [0xB64F], NFD: [0x1104, 0x116B, 0x11AE], NFKC: [0xB64F], NFKD: [0x1104, 0x116B, 0x11AE] }, +{ source: [0xB650], NFC: [0xB650], NFD: [0x1104, 0x116B, 0x11AF], NFKC: [0xB650], NFKD: [0x1104, 0x116B, 0x11AF] }, +{ source: [0xB651], NFC: [0xB651], NFD: [0x1104, 0x116B, 0x11B0], NFKC: [0xB651], NFKD: [0x1104, 0x116B, 0x11B0] }, +{ source: [0xB652], NFC: [0xB652], NFD: [0x1104, 0x116B, 0x11B1], NFKC: [0xB652], NFKD: [0x1104, 0x116B, 0x11B1] }, +{ source: [0xB653], NFC: [0xB653], NFD: [0x1104, 0x116B, 0x11B2], NFKC: [0xB653], NFKD: [0x1104, 0x116B, 0x11B2] }, +{ source: [0xB654], NFC: [0xB654], NFD: [0x1104, 0x116B, 0x11B3], NFKC: [0xB654], NFKD: [0x1104, 0x116B, 0x11B3] }, +{ source: [0xB655], NFC: [0xB655], NFD: [0x1104, 0x116B, 0x11B4], NFKC: [0xB655], NFKD: [0x1104, 0x116B, 0x11B4] }, +{ source: [0xB656], NFC: [0xB656], NFD: [0x1104, 0x116B, 0x11B5], NFKC: [0xB656], NFKD: [0x1104, 0x116B, 0x11B5] }, +{ source: [0xB657], NFC: [0xB657], NFD: [0x1104, 0x116B, 0x11B6], NFKC: [0xB657], NFKD: [0x1104, 0x116B, 0x11B6] }, +{ source: [0xB658], NFC: [0xB658], NFD: [0x1104, 0x116B, 0x11B7], NFKC: [0xB658], NFKD: [0x1104, 0x116B, 0x11B7] }, +{ source: [0xB659], NFC: [0xB659], NFD: [0x1104, 0x116B, 0x11B8], NFKC: [0xB659], NFKD: [0x1104, 0x116B, 0x11B8] }, +{ source: [0xB65A], NFC: [0xB65A], NFD: [0x1104, 0x116B, 0x11B9], NFKC: [0xB65A], NFKD: [0x1104, 0x116B, 0x11B9] }, +{ source: [0xB65B], NFC: [0xB65B], NFD: [0x1104, 0x116B, 0x11BA], NFKC: [0xB65B], NFKD: [0x1104, 0x116B, 0x11BA] }, +{ source: [0xB65C], NFC: [0xB65C], NFD: [0x1104, 0x116B, 0x11BB], NFKC: [0xB65C], NFKD: [0x1104, 0x116B, 0x11BB] }, +{ source: [0xB65D], NFC: [0xB65D], NFD: [0x1104, 0x116B, 0x11BC], NFKC: [0xB65D], NFKD: [0x1104, 0x116B, 0x11BC] }, +{ source: [0xB65E], NFC: [0xB65E], NFD: [0x1104, 0x116B, 0x11BD], NFKC: [0xB65E], NFKD: [0x1104, 0x116B, 0x11BD] }, +{ source: [0xB65F], NFC: [0xB65F], NFD: [0x1104, 0x116B, 0x11BE], NFKC: [0xB65F], NFKD: [0x1104, 0x116B, 0x11BE] }, +{ source: [0xB660], NFC: [0xB660], NFD: [0x1104, 0x116B, 0x11BF], NFKC: [0xB660], NFKD: [0x1104, 0x116B, 0x11BF] }, +{ source: [0xB661], NFC: [0xB661], NFD: [0x1104, 0x116B, 0x11C0], NFKC: [0xB661], NFKD: [0x1104, 0x116B, 0x11C0] }, +{ source: [0xB662], NFC: [0xB662], NFD: [0x1104, 0x116B, 0x11C1], NFKC: [0xB662], NFKD: [0x1104, 0x116B, 0x11C1] }, +{ source: [0xB663], NFC: [0xB663], NFD: [0x1104, 0x116B, 0x11C2], NFKC: [0xB663], NFKD: [0x1104, 0x116B, 0x11C2] }, +{ source: [0xB664], NFC: [0xB664], NFD: [0x1104, 0x116C], NFKC: [0xB664], NFKD: [0x1104, 0x116C] }, +{ source: [0xB665], NFC: [0xB665], NFD: [0x1104, 0x116C, 0x11A8], NFKC: [0xB665], NFKD: [0x1104, 0x116C, 0x11A8] }, +{ source: [0xB666], NFC: [0xB666], NFD: [0x1104, 0x116C, 0x11A9], NFKC: [0xB666], NFKD: [0x1104, 0x116C, 0x11A9] }, +{ source: [0xB667], NFC: [0xB667], NFD: [0x1104, 0x116C, 0x11AA], NFKC: [0xB667], NFKD: [0x1104, 0x116C, 0x11AA] }, +{ source: [0xB668], NFC: [0xB668], NFD: [0x1104, 0x116C, 0x11AB], NFKC: [0xB668], NFKD: [0x1104, 0x116C, 0x11AB] }, +{ source: [0xB669], NFC: [0xB669], NFD: [0x1104, 0x116C, 0x11AC], NFKC: [0xB669], NFKD: [0x1104, 0x116C, 0x11AC] }, +{ source: [0xB66A], NFC: [0xB66A], NFD: [0x1104, 0x116C, 0x11AD], NFKC: [0xB66A], NFKD: [0x1104, 0x116C, 0x11AD] }, +{ source: [0xB66B], NFC: [0xB66B], NFD: [0x1104, 0x116C, 0x11AE], NFKC: [0xB66B], NFKD: [0x1104, 0x116C, 0x11AE] }, +{ source: [0xB66C], NFC: [0xB66C], NFD: [0x1104, 0x116C, 0x11AF], NFKC: [0xB66C], NFKD: [0x1104, 0x116C, 0x11AF] }, +{ source: [0xB66D], NFC: [0xB66D], NFD: [0x1104, 0x116C, 0x11B0], NFKC: [0xB66D], NFKD: [0x1104, 0x116C, 0x11B0] }, +{ source: [0xB66E], NFC: [0xB66E], NFD: [0x1104, 0x116C, 0x11B1], NFKC: [0xB66E], NFKD: [0x1104, 0x116C, 0x11B1] }, +{ source: [0xB66F], NFC: [0xB66F], NFD: [0x1104, 0x116C, 0x11B2], NFKC: [0xB66F], NFKD: [0x1104, 0x116C, 0x11B2] }, +{ source: [0xB670], NFC: [0xB670], NFD: [0x1104, 0x116C, 0x11B3], NFKC: [0xB670], NFKD: [0x1104, 0x116C, 0x11B3] }, +{ source: [0xB671], NFC: [0xB671], NFD: [0x1104, 0x116C, 0x11B4], NFKC: [0xB671], NFKD: [0x1104, 0x116C, 0x11B4] }, +{ source: [0xB672], NFC: [0xB672], NFD: [0x1104, 0x116C, 0x11B5], NFKC: [0xB672], NFKD: [0x1104, 0x116C, 0x11B5] }, +{ source: [0xB673], NFC: [0xB673], NFD: [0x1104, 0x116C, 0x11B6], NFKC: [0xB673], NFKD: [0x1104, 0x116C, 0x11B6] }, +{ source: [0xB674], NFC: [0xB674], NFD: [0x1104, 0x116C, 0x11B7], NFKC: [0xB674], NFKD: [0x1104, 0x116C, 0x11B7] }, +{ source: [0xB675], NFC: [0xB675], NFD: [0x1104, 0x116C, 0x11B8], NFKC: [0xB675], NFKD: [0x1104, 0x116C, 0x11B8] }, +{ source: [0xB676], NFC: [0xB676], NFD: [0x1104, 0x116C, 0x11B9], NFKC: [0xB676], NFKD: [0x1104, 0x116C, 0x11B9] }, +{ source: [0xB677], NFC: [0xB677], NFD: [0x1104, 0x116C, 0x11BA], NFKC: [0xB677], NFKD: [0x1104, 0x116C, 0x11BA] }, +{ source: [0xB678], NFC: [0xB678], NFD: [0x1104, 0x116C, 0x11BB], NFKC: [0xB678], NFKD: [0x1104, 0x116C, 0x11BB] }, +{ source: [0xB679], NFC: [0xB679], NFD: [0x1104, 0x116C, 0x11BC], NFKC: [0xB679], NFKD: [0x1104, 0x116C, 0x11BC] }, +{ source: [0xB67A], NFC: [0xB67A], NFD: [0x1104, 0x116C, 0x11BD], NFKC: [0xB67A], NFKD: [0x1104, 0x116C, 0x11BD] }, +{ source: [0xB67B], NFC: [0xB67B], NFD: [0x1104, 0x116C, 0x11BE], NFKC: [0xB67B], NFKD: [0x1104, 0x116C, 0x11BE] }, +{ source: [0xB67C], NFC: [0xB67C], NFD: [0x1104, 0x116C, 0x11BF], NFKC: [0xB67C], NFKD: [0x1104, 0x116C, 0x11BF] }, +{ source: [0xB67D], NFC: [0xB67D], NFD: [0x1104, 0x116C, 0x11C0], NFKC: [0xB67D], NFKD: [0x1104, 0x116C, 0x11C0] }, +{ source: [0xB67E], NFC: [0xB67E], NFD: [0x1104, 0x116C, 0x11C1], NFKC: [0xB67E], NFKD: [0x1104, 0x116C, 0x11C1] }, +{ source: [0xB67F], NFC: [0xB67F], NFD: [0x1104, 0x116C, 0x11C2], NFKC: [0xB67F], NFKD: [0x1104, 0x116C, 0x11C2] }, +{ source: [0xB680], NFC: [0xB680], NFD: [0x1104, 0x116D], NFKC: [0xB680], NFKD: [0x1104, 0x116D] }, +{ source: [0xB681], NFC: [0xB681], NFD: [0x1104, 0x116D, 0x11A8], NFKC: [0xB681], NFKD: [0x1104, 0x116D, 0x11A8] }, +{ source: [0xB682], NFC: [0xB682], NFD: [0x1104, 0x116D, 0x11A9], NFKC: [0xB682], NFKD: [0x1104, 0x116D, 0x11A9] }, +{ source: [0xB683], NFC: [0xB683], NFD: [0x1104, 0x116D, 0x11AA], NFKC: [0xB683], NFKD: [0x1104, 0x116D, 0x11AA] }, +{ source: [0xB684], NFC: [0xB684], NFD: [0x1104, 0x116D, 0x11AB], NFKC: [0xB684], NFKD: [0x1104, 0x116D, 0x11AB] }, +{ source: [0xB685], NFC: [0xB685], NFD: [0x1104, 0x116D, 0x11AC], NFKC: [0xB685], NFKD: [0x1104, 0x116D, 0x11AC] }, +{ source: [0xB686], NFC: [0xB686], NFD: [0x1104, 0x116D, 0x11AD], NFKC: [0xB686], NFKD: [0x1104, 0x116D, 0x11AD] }, +{ source: [0xB687], NFC: [0xB687], NFD: [0x1104, 0x116D, 0x11AE], NFKC: [0xB687], NFKD: [0x1104, 0x116D, 0x11AE] }, +{ source: [0xB688], NFC: [0xB688], NFD: [0x1104, 0x116D, 0x11AF], NFKC: [0xB688], NFKD: [0x1104, 0x116D, 0x11AF] }, +{ source: [0xB689], NFC: [0xB689], NFD: [0x1104, 0x116D, 0x11B0], NFKC: [0xB689], NFKD: [0x1104, 0x116D, 0x11B0] }, +{ source: [0xB68A], NFC: [0xB68A], NFD: [0x1104, 0x116D, 0x11B1], NFKC: [0xB68A], NFKD: [0x1104, 0x116D, 0x11B1] }, +{ source: [0xB68B], NFC: [0xB68B], NFD: [0x1104, 0x116D, 0x11B2], NFKC: [0xB68B], NFKD: [0x1104, 0x116D, 0x11B2] }, +{ source: [0xB68C], NFC: [0xB68C], NFD: [0x1104, 0x116D, 0x11B3], NFKC: [0xB68C], NFKD: [0x1104, 0x116D, 0x11B3] }, +{ source: [0xB68D], NFC: [0xB68D], NFD: [0x1104, 0x116D, 0x11B4], NFKC: [0xB68D], NFKD: [0x1104, 0x116D, 0x11B4] }, +{ source: [0xB68E], NFC: [0xB68E], NFD: [0x1104, 0x116D, 0x11B5], NFKC: [0xB68E], NFKD: [0x1104, 0x116D, 0x11B5] }, +{ source: [0xB68F], NFC: [0xB68F], NFD: [0x1104, 0x116D, 0x11B6], NFKC: [0xB68F], NFKD: [0x1104, 0x116D, 0x11B6] }, +{ source: [0xB690], NFC: [0xB690], NFD: [0x1104, 0x116D, 0x11B7], NFKC: [0xB690], NFKD: [0x1104, 0x116D, 0x11B7] }, +{ source: [0xB691], NFC: [0xB691], NFD: [0x1104, 0x116D, 0x11B8], NFKC: [0xB691], NFKD: [0x1104, 0x116D, 0x11B8] }, +{ source: [0xB692], NFC: [0xB692], NFD: [0x1104, 0x116D, 0x11B9], NFKC: [0xB692], NFKD: [0x1104, 0x116D, 0x11B9] }, +{ source: [0xB693], NFC: [0xB693], NFD: [0x1104, 0x116D, 0x11BA], NFKC: [0xB693], NFKD: [0x1104, 0x116D, 0x11BA] }, +{ source: [0xB694], NFC: [0xB694], NFD: [0x1104, 0x116D, 0x11BB], NFKC: [0xB694], NFKD: [0x1104, 0x116D, 0x11BB] }, +{ source: [0xB695], NFC: [0xB695], NFD: [0x1104, 0x116D, 0x11BC], NFKC: [0xB695], NFKD: [0x1104, 0x116D, 0x11BC] }, +{ source: [0xB696], NFC: [0xB696], NFD: [0x1104, 0x116D, 0x11BD], NFKC: [0xB696], NFKD: [0x1104, 0x116D, 0x11BD] }, +{ source: [0xB697], NFC: [0xB697], NFD: [0x1104, 0x116D, 0x11BE], NFKC: [0xB697], NFKD: [0x1104, 0x116D, 0x11BE] }, +{ source: [0xB698], NFC: [0xB698], NFD: [0x1104, 0x116D, 0x11BF], NFKC: [0xB698], NFKD: [0x1104, 0x116D, 0x11BF] }, +{ source: [0xB699], NFC: [0xB699], NFD: [0x1104, 0x116D, 0x11C0], NFKC: [0xB699], NFKD: [0x1104, 0x116D, 0x11C0] }, +{ source: [0xB69A], NFC: [0xB69A], NFD: [0x1104, 0x116D, 0x11C1], NFKC: [0xB69A], NFKD: [0x1104, 0x116D, 0x11C1] }, +{ source: [0xB69B], NFC: [0xB69B], NFD: [0x1104, 0x116D, 0x11C2], NFKC: [0xB69B], NFKD: [0x1104, 0x116D, 0x11C2] }, +{ source: [0xB69C], NFC: [0xB69C], NFD: [0x1104, 0x116E], NFKC: [0xB69C], NFKD: [0x1104, 0x116E] }, +{ source: [0xB69D], NFC: [0xB69D], NFD: [0x1104, 0x116E, 0x11A8], NFKC: [0xB69D], NFKD: [0x1104, 0x116E, 0x11A8] }, +{ source: [0xB69E], NFC: [0xB69E], NFD: [0x1104, 0x116E, 0x11A9], NFKC: [0xB69E], NFKD: [0x1104, 0x116E, 0x11A9] }, +{ source: [0xB69F], NFC: [0xB69F], NFD: [0x1104, 0x116E, 0x11AA], NFKC: [0xB69F], NFKD: [0x1104, 0x116E, 0x11AA] }, +{ source: [0xB6A0], NFC: [0xB6A0], NFD: [0x1104, 0x116E, 0x11AB], NFKC: [0xB6A0], NFKD: [0x1104, 0x116E, 0x11AB] }, +{ source: [0xB6A1], NFC: [0xB6A1], NFD: [0x1104, 0x116E, 0x11AC], NFKC: [0xB6A1], NFKD: [0x1104, 0x116E, 0x11AC] }, +{ source: [0xB6A2], NFC: [0xB6A2], NFD: [0x1104, 0x116E, 0x11AD], NFKC: [0xB6A2], NFKD: [0x1104, 0x116E, 0x11AD] }, +{ source: [0xB6A3], NFC: [0xB6A3], NFD: [0x1104, 0x116E, 0x11AE], NFKC: [0xB6A3], NFKD: [0x1104, 0x116E, 0x11AE] }, +{ source: [0xB6A4], NFC: [0xB6A4], NFD: [0x1104, 0x116E, 0x11AF], NFKC: [0xB6A4], NFKD: [0x1104, 0x116E, 0x11AF] }, +{ source: [0xB6A5], NFC: [0xB6A5], NFD: [0x1104, 0x116E, 0x11B0], NFKC: [0xB6A5], NFKD: [0x1104, 0x116E, 0x11B0] }, +{ source: [0xB6A6], NFC: [0xB6A6], NFD: [0x1104, 0x116E, 0x11B1], NFKC: [0xB6A6], NFKD: [0x1104, 0x116E, 0x11B1] }, +{ source: [0xB6A7], NFC: [0xB6A7], NFD: [0x1104, 0x116E, 0x11B2], NFKC: [0xB6A7], NFKD: [0x1104, 0x116E, 0x11B2] }, +{ source: [0xB6A8], NFC: [0xB6A8], NFD: [0x1104, 0x116E, 0x11B3], NFKC: [0xB6A8], NFKD: [0x1104, 0x116E, 0x11B3] }, +{ source: [0xB6A9], NFC: [0xB6A9], NFD: [0x1104, 0x116E, 0x11B4], NFKC: [0xB6A9], NFKD: [0x1104, 0x116E, 0x11B4] }, +{ source: [0xB6AA], NFC: [0xB6AA], NFD: [0x1104, 0x116E, 0x11B5], NFKC: [0xB6AA], NFKD: [0x1104, 0x116E, 0x11B5] }, +{ source: [0xB6AB], NFC: [0xB6AB], NFD: [0x1104, 0x116E, 0x11B6], NFKC: [0xB6AB], NFKD: [0x1104, 0x116E, 0x11B6] }, +{ source: [0xB6AC], NFC: [0xB6AC], NFD: [0x1104, 0x116E, 0x11B7], NFKC: [0xB6AC], NFKD: [0x1104, 0x116E, 0x11B7] }, +{ source: [0xB6AD], NFC: [0xB6AD], NFD: [0x1104, 0x116E, 0x11B8], NFKC: [0xB6AD], NFKD: [0x1104, 0x116E, 0x11B8] }, +{ source: [0xB6AE], NFC: [0xB6AE], NFD: [0x1104, 0x116E, 0x11B9], NFKC: [0xB6AE], NFKD: [0x1104, 0x116E, 0x11B9] }, +{ source: [0xB6AF], NFC: [0xB6AF], NFD: [0x1104, 0x116E, 0x11BA], NFKC: [0xB6AF], NFKD: [0x1104, 0x116E, 0x11BA] }, +{ source: [0xB6B0], NFC: [0xB6B0], NFD: [0x1104, 0x116E, 0x11BB], NFKC: [0xB6B0], NFKD: [0x1104, 0x116E, 0x11BB] }, +{ source: [0xB6B1], NFC: [0xB6B1], NFD: [0x1104, 0x116E, 0x11BC], NFKC: [0xB6B1], NFKD: [0x1104, 0x116E, 0x11BC] }, +{ source: [0xB6B2], NFC: [0xB6B2], NFD: [0x1104, 0x116E, 0x11BD], NFKC: [0xB6B2], NFKD: [0x1104, 0x116E, 0x11BD] }, +{ source: [0xB6B3], NFC: [0xB6B3], NFD: [0x1104, 0x116E, 0x11BE], NFKC: [0xB6B3], NFKD: [0x1104, 0x116E, 0x11BE] }, +{ source: [0xB6B4], NFC: [0xB6B4], NFD: [0x1104, 0x116E, 0x11BF], NFKC: [0xB6B4], NFKD: [0x1104, 0x116E, 0x11BF] }, +{ source: [0xB6B5], NFC: [0xB6B5], NFD: [0x1104, 0x116E, 0x11C0], NFKC: [0xB6B5], NFKD: [0x1104, 0x116E, 0x11C0] }, +{ source: [0xB6B6], NFC: [0xB6B6], NFD: [0x1104, 0x116E, 0x11C1], NFKC: [0xB6B6], NFKD: [0x1104, 0x116E, 0x11C1] }, +{ source: [0xB6B7], NFC: [0xB6B7], NFD: [0x1104, 0x116E, 0x11C2], NFKC: [0xB6B7], NFKD: [0x1104, 0x116E, 0x11C2] }, +{ source: [0xB6B8], NFC: [0xB6B8], NFD: [0x1104, 0x116F], NFKC: [0xB6B8], NFKD: [0x1104, 0x116F] }, +{ source: [0xB6B9], NFC: [0xB6B9], NFD: [0x1104, 0x116F, 0x11A8], NFKC: [0xB6B9], NFKD: [0x1104, 0x116F, 0x11A8] }, +{ source: [0xB6BA], NFC: [0xB6BA], NFD: [0x1104, 0x116F, 0x11A9], NFKC: [0xB6BA], NFKD: [0x1104, 0x116F, 0x11A9] }, +{ source: [0xB6BB], NFC: [0xB6BB], NFD: [0x1104, 0x116F, 0x11AA], NFKC: [0xB6BB], NFKD: [0x1104, 0x116F, 0x11AA] }, +{ source: [0xB6BC], NFC: [0xB6BC], NFD: [0x1104, 0x116F, 0x11AB], NFKC: [0xB6BC], NFKD: [0x1104, 0x116F, 0x11AB] }, +{ source: [0xB6BD], NFC: [0xB6BD], NFD: [0x1104, 0x116F, 0x11AC], NFKC: [0xB6BD], NFKD: [0x1104, 0x116F, 0x11AC] }, +{ source: [0xB6BE], NFC: [0xB6BE], NFD: [0x1104, 0x116F, 0x11AD], NFKC: [0xB6BE], NFKD: [0x1104, 0x116F, 0x11AD] }, +{ source: [0xB6BF], NFC: [0xB6BF], NFD: [0x1104, 0x116F, 0x11AE], NFKC: [0xB6BF], NFKD: [0x1104, 0x116F, 0x11AE] }, +{ source: [0xB6C0], NFC: [0xB6C0], NFD: [0x1104, 0x116F, 0x11AF], NFKC: [0xB6C0], NFKD: [0x1104, 0x116F, 0x11AF] }, +{ source: [0xB6C1], NFC: [0xB6C1], NFD: [0x1104, 0x116F, 0x11B0], NFKC: [0xB6C1], NFKD: [0x1104, 0x116F, 0x11B0] }, +{ source: [0xB6C2], NFC: [0xB6C2], NFD: [0x1104, 0x116F, 0x11B1], NFKC: [0xB6C2], NFKD: [0x1104, 0x116F, 0x11B1] }, +{ source: [0xB6C3], NFC: [0xB6C3], NFD: [0x1104, 0x116F, 0x11B2], NFKC: [0xB6C3], NFKD: [0x1104, 0x116F, 0x11B2] }, +{ source: [0xB6C4], NFC: [0xB6C4], NFD: [0x1104, 0x116F, 0x11B3], NFKC: [0xB6C4], NFKD: [0x1104, 0x116F, 0x11B3] }, +{ source: [0xB6C5], NFC: [0xB6C5], NFD: [0x1104, 0x116F, 0x11B4], NFKC: [0xB6C5], NFKD: [0x1104, 0x116F, 0x11B4] }, +{ source: [0xB6C6], NFC: [0xB6C6], NFD: [0x1104, 0x116F, 0x11B5], NFKC: [0xB6C6], NFKD: [0x1104, 0x116F, 0x11B5] }, +{ source: [0xB6C7], NFC: [0xB6C7], NFD: [0x1104, 0x116F, 0x11B6], NFKC: [0xB6C7], NFKD: [0x1104, 0x116F, 0x11B6] }, +{ source: [0xB6C8], NFC: [0xB6C8], NFD: [0x1104, 0x116F, 0x11B7], NFKC: [0xB6C8], NFKD: [0x1104, 0x116F, 0x11B7] }, +{ source: [0xB6C9], NFC: [0xB6C9], NFD: [0x1104, 0x116F, 0x11B8], NFKC: [0xB6C9], NFKD: [0x1104, 0x116F, 0x11B8] }, +{ source: [0xB6CA], NFC: [0xB6CA], NFD: [0x1104, 0x116F, 0x11B9], NFKC: [0xB6CA], NFKD: [0x1104, 0x116F, 0x11B9] }, +{ source: [0xB6CB], NFC: [0xB6CB], NFD: [0x1104, 0x116F, 0x11BA], NFKC: [0xB6CB], NFKD: [0x1104, 0x116F, 0x11BA] }, +{ source: [0xB6CC], NFC: [0xB6CC], NFD: [0x1104, 0x116F, 0x11BB], NFKC: [0xB6CC], NFKD: [0x1104, 0x116F, 0x11BB] }, +{ source: [0xB6CD], NFC: [0xB6CD], NFD: [0x1104, 0x116F, 0x11BC], NFKC: [0xB6CD], NFKD: [0x1104, 0x116F, 0x11BC] }, +{ source: [0xB6CE], NFC: [0xB6CE], NFD: [0x1104, 0x116F, 0x11BD], NFKC: [0xB6CE], NFKD: [0x1104, 0x116F, 0x11BD] }, +{ source: [0xB6CF], NFC: [0xB6CF], NFD: [0x1104, 0x116F, 0x11BE], NFKC: [0xB6CF], NFKD: [0x1104, 0x116F, 0x11BE] }, +{ source: [0xB6D0], NFC: [0xB6D0], NFD: [0x1104, 0x116F, 0x11BF], NFKC: [0xB6D0], NFKD: [0x1104, 0x116F, 0x11BF] }, +{ source: [0xB6D1], NFC: [0xB6D1], NFD: [0x1104, 0x116F, 0x11C0], NFKC: [0xB6D1], NFKD: [0x1104, 0x116F, 0x11C0] }, +{ source: [0xB6D2], NFC: [0xB6D2], NFD: [0x1104, 0x116F, 0x11C1], NFKC: [0xB6D2], NFKD: [0x1104, 0x116F, 0x11C1] }, +{ source: [0xB6D3], NFC: [0xB6D3], NFD: [0x1104, 0x116F, 0x11C2], NFKC: [0xB6D3], NFKD: [0x1104, 0x116F, 0x11C2] }, +{ source: [0xB6D4], NFC: [0xB6D4], NFD: [0x1104, 0x1170], NFKC: [0xB6D4], NFKD: [0x1104, 0x1170] }, +{ source: [0xB6D5], NFC: [0xB6D5], NFD: [0x1104, 0x1170, 0x11A8], NFKC: [0xB6D5], NFKD: [0x1104, 0x1170, 0x11A8] }, +{ source: [0xB6D6], NFC: [0xB6D6], NFD: [0x1104, 0x1170, 0x11A9], NFKC: [0xB6D6], NFKD: [0x1104, 0x1170, 0x11A9] }, +{ source: [0xB6D7], NFC: [0xB6D7], NFD: [0x1104, 0x1170, 0x11AA], NFKC: [0xB6D7], NFKD: [0x1104, 0x1170, 0x11AA] }, +{ source: [0xB6D8], NFC: [0xB6D8], NFD: [0x1104, 0x1170, 0x11AB], NFKC: [0xB6D8], NFKD: [0x1104, 0x1170, 0x11AB] }, +{ source: [0xB6D9], NFC: [0xB6D9], NFD: [0x1104, 0x1170, 0x11AC], NFKC: [0xB6D9], NFKD: [0x1104, 0x1170, 0x11AC] }, +{ source: [0xB6DA], NFC: [0xB6DA], NFD: [0x1104, 0x1170, 0x11AD], NFKC: [0xB6DA], NFKD: [0x1104, 0x1170, 0x11AD] }, +{ source: [0xB6DB], NFC: [0xB6DB], NFD: [0x1104, 0x1170, 0x11AE], NFKC: [0xB6DB], NFKD: [0x1104, 0x1170, 0x11AE] }, +{ source: [0xB6DC], NFC: [0xB6DC], NFD: [0x1104, 0x1170, 0x11AF], NFKC: [0xB6DC], NFKD: [0x1104, 0x1170, 0x11AF] }, +{ source: [0xB6DD], NFC: [0xB6DD], NFD: [0x1104, 0x1170, 0x11B0], NFKC: [0xB6DD], NFKD: [0x1104, 0x1170, 0x11B0] }, +{ source: [0xB6DE], NFC: [0xB6DE], NFD: [0x1104, 0x1170, 0x11B1], NFKC: [0xB6DE], NFKD: [0x1104, 0x1170, 0x11B1] }, +{ source: [0xB6DF], NFC: [0xB6DF], NFD: [0x1104, 0x1170, 0x11B2], NFKC: [0xB6DF], NFKD: [0x1104, 0x1170, 0x11B2] }, +{ source: [0xB6E0], NFC: [0xB6E0], NFD: [0x1104, 0x1170, 0x11B3], NFKC: [0xB6E0], NFKD: [0x1104, 0x1170, 0x11B3] }, +{ source: [0xB6E1], NFC: [0xB6E1], NFD: [0x1104, 0x1170, 0x11B4], NFKC: [0xB6E1], NFKD: [0x1104, 0x1170, 0x11B4] }, +{ source: [0xB6E2], NFC: [0xB6E2], NFD: [0x1104, 0x1170, 0x11B5], NFKC: [0xB6E2], NFKD: [0x1104, 0x1170, 0x11B5] }, +{ source: [0xB6E3], NFC: [0xB6E3], NFD: [0x1104, 0x1170, 0x11B6], NFKC: [0xB6E3], NFKD: [0x1104, 0x1170, 0x11B6] }, +{ source: [0xB6E4], NFC: [0xB6E4], NFD: [0x1104, 0x1170, 0x11B7], NFKC: [0xB6E4], NFKD: [0x1104, 0x1170, 0x11B7] }, +{ source: [0xB6E5], NFC: [0xB6E5], NFD: [0x1104, 0x1170, 0x11B8], NFKC: [0xB6E5], NFKD: [0x1104, 0x1170, 0x11B8] }, +{ source: [0xB6E6], NFC: [0xB6E6], NFD: [0x1104, 0x1170, 0x11B9], NFKC: [0xB6E6], NFKD: [0x1104, 0x1170, 0x11B9] }, +{ source: [0xB6E7], NFC: [0xB6E7], NFD: [0x1104, 0x1170, 0x11BA], NFKC: [0xB6E7], NFKD: [0x1104, 0x1170, 0x11BA] }, +{ source: [0xB6E8], NFC: [0xB6E8], NFD: [0x1104, 0x1170, 0x11BB], NFKC: [0xB6E8], NFKD: [0x1104, 0x1170, 0x11BB] }, +{ source: [0xB6E9], NFC: [0xB6E9], NFD: [0x1104, 0x1170, 0x11BC], NFKC: [0xB6E9], NFKD: [0x1104, 0x1170, 0x11BC] }, +{ source: [0xB6EA], NFC: [0xB6EA], NFD: [0x1104, 0x1170, 0x11BD], NFKC: [0xB6EA], NFKD: [0x1104, 0x1170, 0x11BD] }, +{ source: [0xB6EB], NFC: [0xB6EB], NFD: [0x1104, 0x1170, 0x11BE], NFKC: [0xB6EB], NFKD: [0x1104, 0x1170, 0x11BE] }, +{ source: [0xB6EC], NFC: [0xB6EC], NFD: [0x1104, 0x1170, 0x11BF], NFKC: [0xB6EC], NFKD: [0x1104, 0x1170, 0x11BF] }, +{ source: [0xB6ED], NFC: [0xB6ED], NFD: [0x1104, 0x1170, 0x11C0], NFKC: [0xB6ED], NFKD: [0x1104, 0x1170, 0x11C0] }, +{ source: [0xB6EE], NFC: [0xB6EE], NFD: [0x1104, 0x1170, 0x11C1], NFKC: [0xB6EE], NFKD: [0x1104, 0x1170, 0x11C1] }, +{ source: [0xB6EF], NFC: [0xB6EF], NFD: [0x1104, 0x1170, 0x11C2], NFKC: [0xB6EF], NFKD: [0x1104, 0x1170, 0x11C2] }, +{ source: [0xB6F0], NFC: [0xB6F0], NFD: [0x1104, 0x1171], NFKC: [0xB6F0], NFKD: [0x1104, 0x1171] }, +{ source: [0xB6F1], NFC: [0xB6F1], NFD: [0x1104, 0x1171, 0x11A8], NFKC: [0xB6F1], NFKD: [0x1104, 0x1171, 0x11A8] }, +{ source: [0xB6F2], NFC: [0xB6F2], NFD: [0x1104, 0x1171, 0x11A9], NFKC: [0xB6F2], NFKD: [0x1104, 0x1171, 0x11A9] }, +{ source: [0xB6F3], NFC: [0xB6F3], NFD: [0x1104, 0x1171, 0x11AA], NFKC: [0xB6F3], NFKD: [0x1104, 0x1171, 0x11AA] }, +{ source: [0xB6F4], NFC: [0xB6F4], NFD: [0x1104, 0x1171, 0x11AB], NFKC: [0xB6F4], NFKD: [0x1104, 0x1171, 0x11AB] }, +{ source: [0xB6F5], NFC: [0xB6F5], NFD: [0x1104, 0x1171, 0x11AC], NFKC: [0xB6F5], NFKD: [0x1104, 0x1171, 0x11AC] }, +{ source: [0xB6F6], NFC: [0xB6F6], NFD: [0x1104, 0x1171, 0x11AD], NFKC: [0xB6F6], NFKD: [0x1104, 0x1171, 0x11AD] }, +{ source: [0xB6F7], NFC: [0xB6F7], NFD: [0x1104, 0x1171, 0x11AE], NFKC: [0xB6F7], NFKD: [0x1104, 0x1171, 0x11AE] }, +{ source: [0xB6F8], NFC: [0xB6F8], NFD: [0x1104, 0x1171, 0x11AF], NFKC: [0xB6F8], NFKD: [0x1104, 0x1171, 0x11AF] }, +{ source: [0xB6F9], NFC: [0xB6F9], NFD: [0x1104, 0x1171, 0x11B0], NFKC: [0xB6F9], NFKD: [0x1104, 0x1171, 0x11B0] }, +{ source: [0xB6FA], NFC: [0xB6FA], NFD: [0x1104, 0x1171, 0x11B1], NFKC: [0xB6FA], NFKD: [0x1104, 0x1171, 0x11B1] }, +{ source: [0xB6FB], NFC: [0xB6FB], NFD: [0x1104, 0x1171, 0x11B2], NFKC: [0xB6FB], NFKD: [0x1104, 0x1171, 0x11B2] }, +{ source: [0xB6FC], NFC: [0xB6FC], NFD: [0x1104, 0x1171, 0x11B3], NFKC: [0xB6FC], NFKD: [0x1104, 0x1171, 0x11B3] }, +{ source: [0xB6FD], NFC: [0xB6FD], NFD: [0x1104, 0x1171, 0x11B4], NFKC: [0xB6FD], NFKD: [0x1104, 0x1171, 0x11B4] }, +{ source: [0xB6FE], NFC: [0xB6FE], NFD: [0x1104, 0x1171, 0x11B5], NFKC: [0xB6FE], NFKD: [0x1104, 0x1171, 0x11B5] }, +{ source: [0xB6FF], NFC: [0xB6FF], NFD: [0x1104, 0x1171, 0x11B6], NFKC: [0xB6FF], NFKD: [0x1104, 0x1171, 0x11B6] }, +{ source: [0xB700], NFC: [0xB700], NFD: [0x1104, 0x1171, 0x11B7], NFKC: [0xB700], NFKD: [0x1104, 0x1171, 0x11B7] }, +{ source: [0xB701], NFC: [0xB701], NFD: [0x1104, 0x1171, 0x11B8], NFKC: [0xB701], NFKD: [0x1104, 0x1171, 0x11B8] }, +{ source: [0xB702], NFC: [0xB702], NFD: [0x1104, 0x1171, 0x11B9], NFKC: [0xB702], NFKD: [0x1104, 0x1171, 0x11B9] }, +{ source: [0xB703], NFC: [0xB703], NFD: [0x1104, 0x1171, 0x11BA], NFKC: [0xB703], NFKD: [0x1104, 0x1171, 0x11BA] }, +{ source: [0xB704], NFC: [0xB704], NFD: [0x1104, 0x1171, 0x11BB], NFKC: [0xB704], NFKD: [0x1104, 0x1171, 0x11BB] }, +{ source: [0xB705], NFC: [0xB705], NFD: [0x1104, 0x1171, 0x11BC], NFKC: [0xB705], NFKD: [0x1104, 0x1171, 0x11BC] }, +{ source: [0xB706], NFC: [0xB706], NFD: [0x1104, 0x1171, 0x11BD], NFKC: [0xB706], NFKD: [0x1104, 0x1171, 0x11BD] }, +{ source: [0xB707], NFC: [0xB707], NFD: [0x1104, 0x1171, 0x11BE], NFKC: [0xB707], NFKD: [0x1104, 0x1171, 0x11BE] }, +{ source: [0xB708], NFC: [0xB708], NFD: [0x1104, 0x1171, 0x11BF], NFKC: [0xB708], NFKD: [0x1104, 0x1171, 0x11BF] }, +{ source: [0xB709], NFC: [0xB709], NFD: [0x1104, 0x1171, 0x11C0], NFKC: [0xB709], NFKD: [0x1104, 0x1171, 0x11C0] }, +{ source: [0xB70A], NFC: [0xB70A], NFD: [0x1104, 0x1171, 0x11C1], NFKC: [0xB70A], NFKD: [0x1104, 0x1171, 0x11C1] }, +{ source: [0xB70B], NFC: [0xB70B], NFD: [0x1104, 0x1171, 0x11C2], NFKC: [0xB70B], NFKD: [0x1104, 0x1171, 0x11C2] }, +{ source: [0xB70C], NFC: [0xB70C], NFD: [0x1104, 0x1172], NFKC: [0xB70C], NFKD: [0x1104, 0x1172] }, +{ source: [0xB70D], NFC: [0xB70D], NFD: [0x1104, 0x1172, 0x11A8], NFKC: [0xB70D], NFKD: [0x1104, 0x1172, 0x11A8] }, +{ source: [0xB70E], NFC: [0xB70E], NFD: [0x1104, 0x1172, 0x11A9], NFKC: [0xB70E], NFKD: [0x1104, 0x1172, 0x11A9] }, +{ source: [0xB70F], NFC: [0xB70F], NFD: [0x1104, 0x1172, 0x11AA], NFKC: [0xB70F], NFKD: [0x1104, 0x1172, 0x11AA] }, +{ source: [0xB710], NFC: [0xB710], NFD: [0x1104, 0x1172, 0x11AB], NFKC: [0xB710], NFKD: [0x1104, 0x1172, 0x11AB] }, +{ source: [0xB711], NFC: [0xB711], NFD: [0x1104, 0x1172, 0x11AC], NFKC: [0xB711], NFKD: [0x1104, 0x1172, 0x11AC] }, +{ source: [0xB712], NFC: [0xB712], NFD: [0x1104, 0x1172, 0x11AD], NFKC: [0xB712], NFKD: [0x1104, 0x1172, 0x11AD] }, +{ source: [0xB713], NFC: [0xB713], NFD: [0x1104, 0x1172, 0x11AE], NFKC: [0xB713], NFKD: [0x1104, 0x1172, 0x11AE] }, +{ source: [0xB714], NFC: [0xB714], NFD: [0x1104, 0x1172, 0x11AF], NFKC: [0xB714], NFKD: [0x1104, 0x1172, 0x11AF] }, +{ source: [0xB715], NFC: [0xB715], NFD: [0x1104, 0x1172, 0x11B0], NFKC: [0xB715], NFKD: [0x1104, 0x1172, 0x11B0] }, +{ source: [0xB716], NFC: [0xB716], NFD: [0x1104, 0x1172, 0x11B1], NFKC: [0xB716], NFKD: [0x1104, 0x1172, 0x11B1] }, +{ source: [0xB717], NFC: [0xB717], NFD: [0x1104, 0x1172, 0x11B2], NFKC: [0xB717], NFKD: [0x1104, 0x1172, 0x11B2] }, +{ source: [0xB718], NFC: [0xB718], NFD: [0x1104, 0x1172, 0x11B3], NFKC: [0xB718], NFKD: [0x1104, 0x1172, 0x11B3] }, +{ source: [0xB719], NFC: [0xB719], NFD: [0x1104, 0x1172, 0x11B4], NFKC: [0xB719], NFKD: [0x1104, 0x1172, 0x11B4] }, +{ source: [0xB71A], NFC: [0xB71A], NFD: [0x1104, 0x1172, 0x11B5], NFKC: [0xB71A], NFKD: [0x1104, 0x1172, 0x11B5] }, +{ source: [0xB71B], NFC: [0xB71B], NFD: [0x1104, 0x1172, 0x11B6], NFKC: [0xB71B], NFKD: [0x1104, 0x1172, 0x11B6] }, +{ source: [0xB71C], NFC: [0xB71C], NFD: [0x1104, 0x1172, 0x11B7], NFKC: [0xB71C], NFKD: [0x1104, 0x1172, 0x11B7] }, +{ source: [0xB71D], NFC: [0xB71D], NFD: [0x1104, 0x1172, 0x11B8], NFKC: [0xB71D], NFKD: [0x1104, 0x1172, 0x11B8] }, +{ source: [0xB71E], NFC: [0xB71E], NFD: [0x1104, 0x1172, 0x11B9], NFKC: [0xB71E], NFKD: [0x1104, 0x1172, 0x11B9] }, +{ source: [0xB71F], NFC: [0xB71F], NFD: [0x1104, 0x1172, 0x11BA], NFKC: [0xB71F], NFKD: [0x1104, 0x1172, 0x11BA] }, +{ source: [0xB720], NFC: [0xB720], NFD: [0x1104, 0x1172, 0x11BB], NFKC: [0xB720], NFKD: [0x1104, 0x1172, 0x11BB] }, +{ source: [0xB721], NFC: [0xB721], NFD: [0x1104, 0x1172, 0x11BC], NFKC: [0xB721], NFKD: [0x1104, 0x1172, 0x11BC] }, +{ source: [0xB722], NFC: [0xB722], NFD: [0x1104, 0x1172, 0x11BD], NFKC: [0xB722], NFKD: [0x1104, 0x1172, 0x11BD] }, +{ source: [0xB723], NFC: [0xB723], NFD: [0x1104, 0x1172, 0x11BE], NFKC: [0xB723], NFKD: [0x1104, 0x1172, 0x11BE] }, +{ source: [0xB724], NFC: [0xB724], NFD: [0x1104, 0x1172, 0x11BF], NFKC: [0xB724], NFKD: [0x1104, 0x1172, 0x11BF] }, +{ source: [0xB725], NFC: [0xB725], NFD: [0x1104, 0x1172, 0x11C0], NFKC: [0xB725], NFKD: [0x1104, 0x1172, 0x11C0] }, +{ source: [0xB726], NFC: [0xB726], NFD: [0x1104, 0x1172, 0x11C1], NFKC: [0xB726], NFKD: [0x1104, 0x1172, 0x11C1] }, +{ source: [0xB727], NFC: [0xB727], NFD: [0x1104, 0x1172, 0x11C2], NFKC: [0xB727], NFKD: [0x1104, 0x1172, 0x11C2] }, +{ source: [0xB728], NFC: [0xB728], NFD: [0x1104, 0x1173], NFKC: [0xB728], NFKD: [0x1104, 0x1173] }, +{ source: [0xB729], NFC: [0xB729], NFD: [0x1104, 0x1173, 0x11A8], NFKC: [0xB729], NFKD: [0x1104, 0x1173, 0x11A8] }, +{ source: [0xB72A], NFC: [0xB72A], NFD: [0x1104, 0x1173, 0x11A9], NFKC: [0xB72A], NFKD: [0x1104, 0x1173, 0x11A9] }, +{ source: [0xB72B], NFC: [0xB72B], NFD: [0x1104, 0x1173, 0x11AA], NFKC: [0xB72B], NFKD: [0x1104, 0x1173, 0x11AA] }, +{ source: [0xB72C], NFC: [0xB72C], NFD: [0x1104, 0x1173, 0x11AB], NFKC: [0xB72C], NFKD: [0x1104, 0x1173, 0x11AB] }, +{ source: [0xB72D], NFC: [0xB72D], NFD: [0x1104, 0x1173, 0x11AC], NFKC: [0xB72D], NFKD: [0x1104, 0x1173, 0x11AC] }, +{ source: [0xB72E], NFC: [0xB72E], NFD: [0x1104, 0x1173, 0x11AD], NFKC: [0xB72E], NFKD: [0x1104, 0x1173, 0x11AD] }, +{ source: [0xB72F], NFC: [0xB72F], NFD: [0x1104, 0x1173, 0x11AE], NFKC: [0xB72F], NFKD: [0x1104, 0x1173, 0x11AE] }, +{ source: [0xB730], NFC: [0xB730], NFD: [0x1104, 0x1173, 0x11AF], NFKC: [0xB730], NFKD: [0x1104, 0x1173, 0x11AF] }, +{ source: [0xB731], NFC: [0xB731], NFD: [0x1104, 0x1173, 0x11B0], NFKC: [0xB731], NFKD: [0x1104, 0x1173, 0x11B0] }, +{ source: [0xB732], NFC: [0xB732], NFD: [0x1104, 0x1173, 0x11B1], NFKC: [0xB732], NFKD: [0x1104, 0x1173, 0x11B1] }, +{ source: [0xB733], NFC: [0xB733], NFD: [0x1104, 0x1173, 0x11B2], NFKC: [0xB733], NFKD: [0x1104, 0x1173, 0x11B2] }, +{ source: [0xB734], NFC: [0xB734], NFD: [0x1104, 0x1173, 0x11B3], NFKC: [0xB734], NFKD: [0x1104, 0x1173, 0x11B3] }, +{ source: [0xB735], NFC: [0xB735], NFD: [0x1104, 0x1173, 0x11B4], NFKC: [0xB735], NFKD: [0x1104, 0x1173, 0x11B4] }, +{ source: [0xB736], NFC: [0xB736], NFD: [0x1104, 0x1173, 0x11B5], NFKC: [0xB736], NFKD: [0x1104, 0x1173, 0x11B5] }, +{ source: [0xB737], NFC: [0xB737], NFD: [0x1104, 0x1173, 0x11B6], NFKC: [0xB737], NFKD: [0x1104, 0x1173, 0x11B6] }, +{ source: [0xB738], NFC: [0xB738], NFD: [0x1104, 0x1173, 0x11B7], NFKC: [0xB738], NFKD: [0x1104, 0x1173, 0x11B7] }, +{ source: [0xB739], NFC: [0xB739], NFD: [0x1104, 0x1173, 0x11B8], NFKC: [0xB739], NFKD: [0x1104, 0x1173, 0x11B8] }, +{ source: [0xB73A], NFC: [0xB73A], NFD: [0x1104, 0x1173, 0x11B9], NFKC: [0xB73A], NFKD: [0x1104, 0x1173, 0x11B9] }, +{ source: [0xB73B], NFC: [0xB73B], NFD: [0x1104, 0x1173, 0x11BA], NFKC: [0xB73B], NFKD: [0x1104, 0x1173, 0x11BA] }, +{ source: [0xB73C], NFC: [0xB73C], NFD: [0x1104, 0x1173, 0x11BB], NFKC: [0xB73C], NFKD: [0x1104, 0x1173, 0x11BB] }, +{ source: [0xB73D], NFC: [0xB73D], NFD: [0x1104, 0x1173, 0x11BC], NFKC: [0xB73D], NFKD: [0x1104, 0x1173, 0x11BC] }, +{ source: [0xB73E], NFC: [0xB73E], NFD: [0x1104, 0x1173, 0x11BD], NFKC: [0xB73E], NFKD: [0x1104, 0x1173, 0x11BD] }, +{ source: [0xB73F], NFC: [0xB73F], NFD: [0x1104, 0x1173, 0x11BE], NFKC: [0xB73F], NFKD: [0x1104, 0x1173, 0x11BE] }, +{ source: [0xB740], NFC: [0xB740], NFD: [0x1104, 0x1173, 0x11BF], NFKC: [0xB740], NFKD: [0x1104, 0x1173, 0x11BF] }, +{ source: [0xB741], NFC: [0xB741], NFD: [0x1104, 0x1173, 0x11C0], NFKC: [0xB741], NFKD: [0x1104, 0x1173, 0x11C0] }, +{ source: [0xB742], NFC: [0xB742], NFD: [0x1104, 0x1173, 0x11C1], NFKC: [0xB742], NFKD: [0x1104, 0x1173, 0x11C1] }, +{ source: [0xB743], NFC: [0xB743], NFD: [0x1104, 0x1173, 0x11C2], NFKC: [0xB743], NFKD: [0x1104, 0x1173, 0x11C2] }, +{ source: [0xB744], NFC: [0xB744], NFD: [0x1104, 0x1174], NFKC: [0xB744], NFKD: [0x1104, 0x1174] }, +{ source: [0xB745], NFC: [0xB745], NFD: [0x1104, 0x1174, 0x11A8], NFKC: [0xB745], NFKD: [0x1104, 0x1174, 0x11A8] }, +{ source: [0xB746], NFC: [0xB746], NFD: [0x1104, 0x1174, 0x11A9], NFKC: [0xB746], NFKD: [0x1104, 0x1174, 0x11A9] }, +{ source: [0xB747], NFC: [0xB747], NFD: [0x1104, 0x1174, 0x11AA], NFKC: [0xB747], NFKD: [0x1104, 0x1174, 0x11AA] }, +{ source: [0xB748], NFC: [0xB748], NFD: [0x1104, 0x1174, 0x11AB], NFKC: [0xB748], NFKD: [0x1104, 0x1174, 0x11AB] }, +{ source: [0xB749], NFC: [0xB749], NFD: [0x1104, 0x1174, 0x11AC], NFKC: [0xB749], NFKD: [0x1104, 0x1174, 0x11AC] }, +{ source: [0xB74A], NFC: [0xB74A], NFD: [0x1104, 0x1174, 0x11AD], NFKC: [0xB74A], NFKD: [0x1104, 0x1174, 0x11AD] }, +{ source: [0xB74B], NFC: [0xB74B], NFD: [0x1104, 0x1174, 0x11AE], NFKC: [0xB74B], NFKD: [0x1104, 0x1174, 0x11AE] }, +{ source: [0xB74C], NFC: [0xB74C], NFD: [0x1104, 0x1174, 0x11AF], NFKC: [0xB74C], NFKD: [0x1104, 0x1174, 0x11AF] }, +{ source: [0xB74D], NFC: [0xB74D], NFD: [0x1104, 0x1174, 0x11B0], NFKC: [0xB74D], NFKD: [0x1104, 0x1174, 0x11B0] }, +{ source: [0xB74E], NFC: [0xB74E], NFD: [0x1104, 0x1174, 0x11B1], NFKC: [0xB74E], NFKD: [0x1104, 0x1174, 0x11B1] }, +{ source: [0xB74F], NFC: [0xB74F], NFD: [0x1104, 0x1174, 0x11B2], NFKC: [0xB74F], NFKD: [0x1104, 0x1174, 0x11B2] }, +{ source: [0xB750], NFC: [0xB750], NFD: [0x1104, 0x1174, 0x11B3], NFKC: [0xB750], NFKD: [0x1104, 0x1174, 0x11B3] }, +{ source: [0xB751], NFC: [0xB751], NFD: [0x1104, 0x1174, 0x11B4], NFKC: [0xB751], NFKD: [0x1104, 0x1174, 0x11B4] }, +{ source: [0xB752], NFC: [0xB752], NFD: [0x1104, 0x1174, 0x11B5], NFKC: [0xB752], NFKD: [0x1104, 0x1174, 0x11B5] }, +{ source: [0xB753], NFC: [0xB753], NFD: [0x1104, 0x1174, 0x11B6], NFKC: [0xB753], NFKD: [0x1104, 0x1174, 0x11B6] }, +{ source: [0xB754], NFC: [0xB754], NFD: [0x1104, 0x1174, 0x11B7], NFKC: [0xB754], NFKD: [0x1104, 0x1174, 0x11B7] }, +{ source: [0xB755], NFC: [0xB755], NFD: [0x1104, 0x1174, 0x11B8], NFKC: [0xB755], NFKD: [0x1104, 0x1174, 0x11B8] }, +{ source: [0xB756], NFC: [0xB756], NFD: [0x1104, 0x1174, 0x11B9], NFKC: [0xB756], NFKD: [0x1104, 0x1174, 0x11B9] }, +{ source: [0xB757], NFC: [0xB757], NFD: [0x1104, 0x1174, 0x11BA], NFKC: [0xB757], NFKD: [0x1104, 0x1174, 0x11BA] }, +{ source: [0xB758], NFC: [0xB758], NFD: [0x1104, 0x1174, 0x11BB], NFKC: [0xB758], NFKD: [0x1104, 0x1174, 0x11BB] }, +{ source: [0xB759], NFC: [0xB759], NFD: [0x1104, 0x1174, 0x11BC], NFKC: [0xB759], NFKD: [0x1104, 0x1174, 0x11BC] }, +{ source: [0xB75A], NFC: [0xB75A], NFD: [0x1104, 0x1174, 0x11BD], NFKC: [0xB75A], NFKD: [0x1104, 0x1174, 0x11BD] }, +{ source: [0xB75B], NFC: [0xB75B], NFD: [0x1104, 0x1174, 0x11BE], NFKC: [0xB75B], NFKD: [0x1104, 0x1174, 0x11BE] }, +{ source: [0xB75C], NFC: [0xB75C], NFD: [0x1104, 0x1174, 0x11BF], NFKC: [0xB75C], NFKD: [0x1104, 0x1174, 0x11BF] }, +{ source: [0xB75D], NFC: [0xB75D], NFD: [0x1104, 0x1174, 0x11C0], NFKC: [0xB75D], NFKD: [0x1104, 0x1174, 0x11C0] }, +{ source: [0xB75E], NFC: [0xB75E], NFD: [0x1104, 0x1174, 0x11C1], NFKC: [0xB75E], NFKD: [0x1104, 0x1174, 0x11C1] }, +{ source: [0xB75F], NFC: [0xB75F], NFD: [0x1104, 0x1174, 0x11C2], NFKC: [0xB75F], NFKD: [0x1104, 0x1174, 0x11C2] }, +{ source: [0xB760], NFC: [0xB760], NFD: [0x1104, 0x1175], NFKC: [0xB760], NFKD: [0x1104, 0x1175] }, +{ source: [0xB761], NFC: [0xB761], NFD: [0x1104, 0x1175, 0x11A8], NFKC: [0xB761], NFKD: [0x1104, 0x1175, 0x11A8] }, +{ source: [0xB762], NFC: [0xB762], NFD: [0x1104, 0x1175, 0x11A9], NFKC: [0xB762], NFKD: [0x1104, 0x1175, 0x11A9] }, +{ source: [0xB763], NFC: [0xB763], NFD: [0x1104, 0x1175, 0x11AA], NFKC: [0xB763], NFKD: [0x1104, 0x1175, 0x11AA] }, +{ source: [0xB764], NFC: [0xB764], NFD: [0x1104, 0x1175, 0x11AB], NFKC: [0xB764], NFKD: [0x1104, 0x1175, 0x11AB] }, +{ source: [0xB765], NFC: [0xB765], NFD: [0x1104, 0x1175, 0x11AC], NFKC: [0xB765], NFKD: [0x1104, 0x1175, 0x11AC] }, +{ source: [0xB766], NFC: [0xB766], NFD: [0x1104, 0x1175, 0x11AD], NFKC: [0xB766], NFKD: [0x1104, 0x1175, 0x11AD] }, +{ source: [0xB767], NFC: [0xB767], NFD: [0x1104, 0x1175, 0x11AE], NFKC: [0xB767], NFKD: [0x1104, 0x1175, 0x11AE] }, +{ source: [0xB768], NFC: [0xB768], NFD: [0x1104, 0x1175, 0x11AF], NFKC: [0xB768], NFKD: [0x1104, 0x1175, 0x11AF] }, +{ source: [0xB769], NFC: [0xB769], NFD: [0x1104, 0x1175, 0x11B0], NFKC: [0xB769], NFKD: [0x1104, 0x1175, 0x11B0] }, +{ source: [0xB76A], NFC: [0xB76A], NFD: [0x1104, 0x1175, 0x11B1], NFKC: [0xB76A], NFKD: [0x1104, 0x1175, 0x11B1] }, +{ source: [0xB76B], NFC: [0xB76B], NFD: [0x1104, 0x1175, 0x11B2], NFKC: [0xB76B], NFKD: [0x1104, 0x1175, 0x11B2] }, +{ source: [0xB76C], NFC: [0xB76C], NFD: [0x1104, 0x1175, 0x11B3], NFKC: [0xB76C], NFKD: [0x1104, 0x1175, 0x11B3] }, +{ source: [0xB76D], NFC: [0xB76D], NFD: [0x1104, 0x1175, 0x11B4], NFKC: [0xB76D], NFKD: [0x1104, 0x1175, 0x11B4] }, +{ source: [0xB76E], NFC: [0xB76E], NFD: [0x1104, 0x1175, 0x11B5], NFKC: [0xB76E], NFKD: [0x1104, 0x1175, 0x11B5] }, +{ source: [0xB76F], NFC: [0xB76F], NFD: [0x1104, 0x1175, 0x11B6], NFKC: [0xB76F], NFKD: [0x1104, 0x1175, 0x11B6] }, +{ source: [0xB770], NFC: [0xB770], NFD: [0x1104, 0x1175, 0x11B7], NFKC: [0xB770], NFKD: [0x1104, 0x1175, 0x11B7] }, +{ source: [0xB771], NFC: [0xB771], NFD: [0x1104, 0x1175, 0x11B8], NFKC: [0xB771], NFKD: [0x1104, 0x1175, 0x11B8] }, +{ source: [0xB772], NFC: [0xB772], NFD: [0x1104, 0x1175, 0x11B9], NFKC: [0xB772], NFKD: [0x1104, 0x1175, 0x11B9] }, +{ source: [0xB773], NFC: [0xB773], NFD: [0x1104, 0x1175, 0x11BA], NFKC: [0xB773], NFKD: [0x1104, 0x1175, 0x11BA] }, +{ source: [0xB774], NFC: [0xB774], NFD: [0x1104, 0x1175, 0x11BB], NFKC: [0xB774], NFKD: [0x1104, 0x1175, 0x11BB] }, +{ source: [0xB775], NFC: [0xB775], NFD: [0x1104, 0x1175, 0x11BC], NFKC: [0xB775], NFKD: [0x1104, 0x1175, 0x11BC] }, +{ source: [0xB776], NFC: [0xB776], NFD: [0x1104, 0x1175, 0x11BD], NFKC: [0xB776], NFKD: [0x1104, 0x1175, 0x11BD] }, +{ source: [0xB777], NFC: [0xB777], NFD: [0x1104, 0x1175, 0x11BE], NFKC: [0xB777], NFKD: [0x1104, 0x1175, 0x11BE] }, +{ source: [0xB778], NFC: [0xB778], NFD: [0x1104, 0x1175, 0x11BF], NFKC: [0xB778], NFKD: [0x1104, 0x1175, 0x11BF] }, +{ source: [0xB779], NFC: [0xB779], NFD: [0x1104, 0x1175, 0x11C0], NFKC: [0xB779], NFKD: [0x1104, 0x1175, 0x11C0] }, +{ source: [0xB77A], NFC: [0xB77A], NFD: [0x1104, 0x1175, 0x11C1], NFKC: [0xB77A], NFKD: [0x1104, 0x1175, 0x11C1] }, +{ source: [0xB77B], NFC: [0xB77B], NFD: [0x1104, 0x1175, 0x11C2], NFKC: [0xB77B], NFKD: [0x1104, 0x1175, 0x11C2] }, +{ source: [0xB77C], NFC: [0xB77C], NFD: [0x1105, 0x1161], NFKC: [0xB77C], NFKD: [0x1105, 0x1161] }, +{ source: [0xB77D], NFC: [0xB77D], NFD: [0x1105, 0x1161, 0x11A8], NFKC: [0xB77D], NFKD: [0x1105, 0x1161, 0x11A8] }, +{ source: [0xB77E], NFC: [0xB77E], NFD: [0x1105, 0x1161, 0x11A9], NFKC: [0xB77E], NFKD: [0x1105, 0x1161, 0x11A9] }, +{ source: [0xB77F], NFC: [0xB77F], NFD: [0x1105, 0x1161, 0x11AA], NFKC: [0xB77F], NFKD: [0x1105, 0x1161, 0x11AA] }, +{ source: [0xB780], NFC: [0xB780], NFD: [0x1105, 0x1161, 0x11AB], NFKC: [0xB780], NFKD: [0x1105, 0x1161, 0x11AB] }, +{ source: [0xB781], NFC: [0xB781], NFD: [0x1105, 0x1161, 0x11AC], NFKC: [0xB781], NFKD: [0x1105, 0x1161, 0x11AC] }, +{ source: [0xB782], NFC: [0xB782], NFD: [0x1105, 0x1161, 0x11AD], NFKC: [0xB782], NFKD: [0x1105, 0x1161, 0x11AD] }, +{ source: [0xB783], NFC: [0xB783], NFD: [0x1105, 0x1161, 0x11AE], NFKC: [0xB783], NFKD: [0x1105, 0x1161, 0x11AE] }, +{ source: [0xB784], NFC: [0xB784], NFD: [0x1105, 0x1161, 0x11AF], NFKC: [0xB784], NFKD: [0x1105, 0x1161, 0x11AF] }, +{ source: [0xB785], NFC: [0xB785], NFD: [0x1105, 0x1161, 0x11B0], NFKC: [0xB785], NFKD: [0x1105, 0x1161, 0x11B0] }, +{ source: [0xB786], NFC: [0xB786], NFD: [0x1105, 0x1161, 0x11B1], NFKC: [0xB786], NFKD: [0x1105, 0x1161, 0x11B1] }, +{ source: [0xB787], NFC: [0xB787], NFD: [0x1105, 0x1161, 0x11B2], NFKC: [0xB787], NFKD: [0x1105, 0x1161, 0x11B2] }, +{ source: [0xB788], NFC: [0xB788], NFD: [0x1105, 0x1161, 0x11B3], NFKC: [0xB788], NFKD: [0x1105, 0x1161, 0x11B3] }, +{ source: [0xB789], NFC: [0xB789], NFD: [0x1105, 0x1161, 0x11B4], NFKC: [0xB789], NFKD: [0x1105, 0x1161, 0x11B4] }, +{ source: [0xB78A], NFC: [0xB78A], NFD: [0x1105, 0x1161, 0x11B5], NFKC: [0xB78A], NFKD: [0x1105, 0x1161, 0x11B5] }, +{ source: [0xB78B], NFC: [0xB78B], NFD: [0x1105, 0x1161, 0x11B6], NFKC: [0xB78B], NFKD: [0x1105, 0x1161, 0x11B6] }, +{ source: [0xB78C], NFC: [0xB78C], NFD: [0x1105, 0x1161, 0x11B7], NFKC: [0xB78C], NFKD: [0x1105, 0x1161, 0x11B7] }, +{ source: [0xB78D], NFC: [0xB78D], NFD: [0x1105, 0x1161, 0x11B8], NFKC: [0xB78D], NFKD: [0x1105, 0x1161, 0x11B8] }, +{ source: [0xB78E], NFC: [0xB78E], NFD: [0x1105, 0x1161, 0x11B9], NFKC: [0xB78E], NFKD: [0x1105, 0x1161, 0x11B9] }, +{ source: [0xB78F], NFC: [0xB78F], NFD: [0x1105, 0x1161, 0x11BA], NFKC: [0xB78F], NFKD: [0x1105, 0x1161, 0x11BA] }, +{ source: [0xB790], NFC: [0xB790], NFD: [0x1105, 0x1161, 0x11BB], NFKC: [0xB790], NFKD: [0x1105, 0x1161, 0x11BB] }, +{ source: [0xB791], NFC: [0xB791], NFD: [0x1105, 0x1161, 0x11BC], NFKC: [0xB791], NFKD: [0x1105, 0x1161, 0x11BC] }, +{ source: [0xB792], NFC: [0xB792], NFD: [0x1105, 0x1161, 0x11BD], NFKC: [0xB792], NFKD: [0x1105, 0x1161, 0x11BD] }, +{ source: [0xB793], NFC: [0xB793], NFD: [0x1105, 0x1161, 0x11BE], NFKC: [0xB793], NFKD: [0x1105, 0x1161, 0x11BE] }, +{ source: [0xB794], NFC: [0xB794], NFD: [0x1105, 0x1161, 0x11BF], NFKC: [0xB794], NFKD: [0x1105, 0x1161, 0x11BF] }, +{ source: [0xB795], NFC: [0xB795], NFD: [0x1105, 0x1161, 0x11C0], NFKC: [0xB795], NFKD: [0x1105, 0x1161, 0x11C0] }, +{ source: [0xB796], NFC: [0xB796], NFD: [0x1105, 0x1161, 0x11C1], NFKC: [0xB796], NFKD: [0x1105, 0x1161, 0x11C1] }, +{ source: [0xB797], NFC: [0xB797], NFD: [0x1105, 0x1161, 0x11C2], NFKC: [0xB797], NFKD: [0x1105, 0x1161, 0x11C2] }, +{ source: [0xB798], NFC: [0xB798], NFD: [0x1105, 0x1162], NFKC: [0xB798], NFKD: [0x1105, 0x1162] }, +{ source: [0xB799], NFC: [0xB799], NFD: [0x1105, 0x1162, 0x11A8], NFKC: [0xB799], NFKD: [0x1105, 0x1162, 0x11A8] }, +{ source: [0xB79A], NFC: [0xB79A], NFD: [0x1105, 0x1162, 0x11A9], NFKC: [0xB79A], NFKD: [0x1105, 0x1162, 0x11A9] }, +{ source: [0xB79B], NFC: [0xB79B], NFD: [0x1105, 0x1162, 0x11AA], NFKC: [0xB79B], NFKD: [0x1105, 0x1162, 0x11AA] }, +{ source: [0xB79C], NFC: [0xB79C], NFD: [0x1105, 0x1162, 0x11AB], NFKC: [0xB79C], NFKD: [0x1105, 0x1162, 0x11AB] }, +{ source: [0xB79D], NFC: [0xB79D], NFD: [0x1105, 0x1162, 0x11AC], NFKC: [0xB79D], NFKD: [0x1105, 0x1162, 0x11AC] }, +{ source: [0xB79E], NFC: [0xB79E], NFD: [0x1105, 0x1162, 0x11AD], NFKC: [0xB79E], NFKD: [0x1105, 0x1162, 0x11AD] }, +{ source: [0xB79F], NFC: [0xB79F], NFD: [0x1105, 0x1162, 0x11AE], NFKC: [0xB79F], NFKD: [0x1105, 0x1162, 0x11AE] }, +{ source: [0xB7A0], NFC: [0xB7A0], NFD: [0x1105, 0x1162, 0x11AF], NFKC: [0xB7A0], NFKD: [0x1105, 0x1162, 0x11AF] }, +{ source: [0xB7A1], NFC: [0xB7A1], NFD: [0x1105, 0x1162, 0x11B0], NFKC: [0xB7A1], NFKD: [0x1105, 0x1162, 0x11B0] }, +{ source: [0xB7A2], NFC: [0xB7A2], NFD: [0x1105, 0x1162, 0x11B1], NFKC: [0xB7A2], NFKD: [0x1105, 0x1162, 0x11B1] }, +{ source: [0xB7A3], NFC: [0xB7A3], NFD: [0x1105, 0x1162, 0x11B2], NFKC: [0xB7A3], NFKD: [0x1105, 0x1162, 0x11B2] }, +{ source: [0xB7A4], NFC: [0xB7A4], NFD: [0x1105, 0x1162, 0x11B3], NFKC: [0xB7A4], NFKD: [0x1105, 0x1162, 0x11B3] }, +{ source: [0xB7A5], NFC: [0xB7A5], NFD: [0x1105, 0x1162, 0x11B4], NFKC: [0xB7A5], NFKD: [0x1105, 0x1162, 0x11B4] }, +{ source: [0xB7A6], NFC: [0xB7A6], NFD: [0x1105, 0x1162, 0x11B5], NFKC: [0xB7A6], NFKD: [0x1105, 0x1162, 0x11B5] }, +{ source: [0xB7A7], NFC: [0xB7A7], NFD: [0x1105, 0x1162, 0x11B6], NFKC: [0xB7A7], NFKD: [0x1105, 0x1162, 0x11B6] }, +{ source: [0xB7A8], NFC: [0xB7A8], NFD: [0x1105, 0x1162, 0x11B7], NFKC: [0xB7A8], NFKD: [0x1105, 0x1162, 0x11B7] }, +{ source: [0xB7A9], NFC: [0xB7A9], NFD: [0x1105, 0x1162, 0x11B8], NFKC: [0xB7A9], NFKD: [0x1105, 0x1162, 0x11B8] }, +{ source: [0xB7AA], NFC: [0xB7AA], NFD: [0x1105, 0x1162, 0x11B9], NFKC: [0xB7AA], NFKD: [0x1105, 0x1162, 0x11B9] }, +{ source: [0xB7AB], NFC: [0xB7AB], NFD: [0x1105, 0x1162, 0x11BA], NFKC: [0xB7AB], NFKD: [0x1105, 0x1162, 0x11BA] }, +{ source: [0xB7AC], NFC: [0xB7AC], NFD: [0x1105, 0x1162, 0x11BB], NFKC: [0xB7AC], NFKD: [0x1105, 0x1162, 0x11BB] }, +{ source: [0xB7AD], NFC: [0xB7AD], NFD: [0x1105, 0x1162, 0x11BC], NFKC: [0xB7AD], NFKD: [0x1105, 0x1162, 0x11BC] }, +{ source: [0xB7AE], NFC: [0xB7AE], NFD: [0x1105, 0x1162, 0x11BD], NFKC: [0xB7AE], NFKD: [0x1105, 0x1162, 0x11BD] }, +{ source: [0xB7AF], NFC: [0xB7AF], NFD: [0x1105, 0x1162, 0x11BE], NFKC: [0xB7AF], NFKD: [0x1105, 0x1162, 0x11BE] }, +{ source: [0xB7B0], NFC: [0xB7B0], NFD: [0x1105, 0x1162, 0x11BF], NFKC: [0xB7B0], NFKD: [0x1105, 0x1162, 0x11BF] }, +{ source: [0xB7B1], NFC: [0xB7B1], NFD: [0x1105, 0x1162, 0x11C0], NFKC: [0xB7B1], NFKD: [0x1105, 0x1162, 0x11C0] }, +{ source: [0xB7B2], NFC: [0xB7B2], NFD: [0x1105, 0x1162, 0x11C1], NFKC: [0xB7B2], NFKD: [0x1105, 0x1162, 0x11C1] }, +{ source: [0xB7B3], NFC: [0xB7B3], NFD: [0x1105, 0x1162, 0x11C2], NFKC: [0xB7B3], NFKD: [0x1105, 0x1162, 0x11C2] }, +{ source: [0xB7B4], NFC: [0xB7B4], NFD: [0x1105, 0x1163], NFKC: [0xB7B4], NFKD: [0x1105, 0x1163] }, +{ source: [0xB7B5], NFC: [0xB7B5], NFD: [0x1105, 0x1163, 0x11A8], NFKC: [0xB7B5], NFKD: [0x1105, 0x1163, 0x11A8] }, +{ source: [0xB7B6], NFC: [0xB7B6], NFD: [0x1105, 0x1163, 0x11A9], NFKC: [0xB7B6], NFKD: [0x1105, 0x1163, 0x11A9] }, +{ source: [0xB7B7], NFC: [0xB7B7], NFD: [0x1105, 0x1163, 0x11AA], NFKC: [0xB7B7], NFKD: [0x1105, 0x1163, 0x11AA] }, +{ source: [0xB7B8], NFC: [0xB7B8], NFD: [0x1105, 0x1163, 0x11AB], NFKC: [0xB7B8], NFKD: [0x1105, 0x1163, 0x11AB] }, +{ source: [0xB7B9], NFC: [0xB7B9], NFD: [0x1105, 0x1163, 0x11AC], NFKC: [0xB7B9], NFKD: [0x1105, 0x1163, 0x11AC] }, +{ source: [0xB7BA], NFC: [0xB7BA], NFD: [0x1105, 0x1163, 0x11AD], NFKC: [0xB7BA], NFKD: [0x1105, 0x1163, 0x11AD] }, +{ source: [0xB7BB], NFC: [0xB7BB], NFD: [0x1105, 0x1163, 0x11AE], NFKC: [0xB7BB], NFKD: [0x1105, 0x1163, 0x11AE] }, +{ source: [0xB7BC], NFC: [0xB7BC], NFD: [0x1105, 0x1163, 0x11AF], NFKC: [0xB7BC], NFKD: [0x1105, 0x1163, 0x11AF] }, +{ source: [0xB7BD], NFC: [0xB7BD], NFD: [0x1105, 0x1163, 0x11B0], NFKC: [0xB7BD], NFKD: [0x1105, 0x1163, 0x11B0] }, +{ source: [0xB7BE], NFC: [0xB7BE], NFD: [0x1105, 0x1163, 0x11B1], NFKC: [0xB7BE], NFKD: [0x1105, 0x1163, 0x11B1] }, +{ source: [0xB7BF], NFC: [0xB7BF], NFD: [0x1105, 0x1163, 0x11B2], NFKC: [0xB7BF], NFKD: [0x1105, 0x1163, 0x11B2] }, +{ source: [0xB7C0], NFC: [0xB7C0], NFD: [0x1105, 0x1163, 0x11B3], NFKC: [0xB7C0], NFKD: [0x1105, 0x1163, 0x11B3] }, +{ source: [0xB7C1], NFC: [0xB7C1], NFD: [0x1105, 0x1163, 0x11B4], NFKC: [0xB7C1], NFKD: [0x1105, 0x1163, 0x11B4] }, +{ source: [0xB7C2], NFC: [0xB7C2], NFD: [0x1105, 0x1163, 0x11B5], NFKC: [0xB7C2], NFKD: [0x1105, 0x1163, 0x11B5] }, +{ source: [0xB7C3], NFC: [0xB7C3], NFD: [0x1105, 0x1163, 0x11B6], NFKC: [0xB7C3], NFKD: [0x1105, 0x1163, 0x11B6] }, +{ source: [0xB7C4], NFC: [0xB7C4], NFD: [0x1105, 0x1163, 0x11B7], NFKC: [0xB7C4], NFKD: [0x1105, 0x1163, 0x11B7] }, +{ source: [0xB7C5], NFC: [0xB7C5], NFD: [0x1105, 0x1163, 0x11B8], NFKC: [0xB7C5], NFKD: [0x1105, 0x1163, 0x11B8] }, +{ source: [0xB7C6], NFC: [0xB7C6], NFD: [0x1105, 0x1163, 0x11B9], NFKC: [0xB7C6], NFKD: [0x1105, 0x1163, 0x11B9] }, +{ source: [0xB7C7], NFC: [0xB7C7], NFD: [0x1105, 0x1163, 0x11BA], NFKC: [0xB7C7], NFKD: [0x1105, 0x1163, 0x11BA] }, +{ source: [0xB7C8], NFC: [0xB7C8], NFD: [0x1105, 0x1163, 0x11BB], NFKC: [0xB7C8], NFKD: [0x1105, 0x1163, 0x11BB] }, +{ source: [0xB7C9], NFC: [0xB7C9], NFD: [0x1105, 0x1163, 0x11BC], NFKC: [0xB7C9], NFKD: [0x1105, 0x1163, 0x11BC] }, +{ source: [0xB7CA], NFC: [0xB7CA], NFD: [0x1105, 0x1163, 0x11BD], NFKC: [0xB7CA], NFKD: [0x1105, 0x1163, 0x11BD] }, +{ source: [0xB7CB], NFC: [0xB7CB], NFD: [0x1105, 0x1163, 0x11BE], NFKC: [0xB7CB], NFKD: [0x1105, 0x1163, 0x11BE] }, +{ source: [0xB7CC], NFC: [0xB7CC], NFD: [0x1105, 0x1163, 0x11BF], NFKC: [0xB7CC], NFKD: [0x1105, 0x1163, 0x11BF] }, +{ source: [0xB7CD], NFC: [0xB7CD], NFD: [0x1105, 0x1163, 0x11C0], NFKC: [0xB7CD], NFKD: [0x1105, 0x1163, 0x11C0] }, +{ source: [0xB7CE], NFC: [0xB7CE], NFD: [0x1105, 0x1163, 0x11C1], NFKC: [0xB7CE], NFKD: [0x1105, 0x1163, 0x11C1] }, +{ source: [0xB7CF], NFC: [0xB7CF], NFD: [0x1105, 0x1163, 0x11C2], NFKC: [0xB7CF], NFKD: [0x1105, 0x1163, 0x11C2] }, +{ source: [0xB7D0], NFC: [0xB7D0], NFD: [0x1105, 0x1164], NFKC: [0xB7D0], NFKD: [0x1105, 0x1164] }, +{ source: [0xB7D1], NFC: [0xB7D1], NFD: [0x1105, 0x1164, 0x11A8], NFKC: [0xB7D1], NFKD: [0x1105, 0x1164, 0x11A8] }, +{ source: [0xB7D2], NFC: [0xB7D2], NFD: [0x1105, 0x1164, 0x11A9], NFKC: [0xB7D2], NFKD: [0x1105, 0x1164, 0x11A9] }, +{ source: [0xB7D3], NFC: [0xB7D3], NFD: [0x1105, 0x1164, 0x11AA], NFKC: [0xB7D3], NFKD: [0x1105, 0x1164, 0x11AA] }, +{ source: [0xB7D4], NFC: [0xB7D4], NFD: [0x1105, 0x1164, 0x11AB], NFKC: [0xB7D4], NFKD: [0x1105, 0x1164, 0x11AB] }, +{ source: [0xB7D5], NFC: [0xB7D5], NFD: [0x1105, 0x1164, 0x11AC], NFKC: [0xB7D5], NFKD: [0x1105, 0x1164, 0x11AC] }, +{ source: [0xB7D6], NFC: [0xB7D6], NFD: [0x1105, 0x1164, 0x11AD], NFKC: [0xB7D6], NFKD: [0x1105, 0x1164, 0x11AD] }, +{ source: [0xB7D7], NFC: [0xB7D7], NFD: [0x1105, 0x1164, 0x11AE], NFKC: [0xB7D7], NFKD: [0x1105, 0x1164, 0x11AE] }, +{ source: [0xB7D8], NFC: [0xB7D8], NFD: [0x1105, 0x1164, 0x11AF], NFKC: [0xB7D8], NFKD: [0x1105, 0x1164, 0x11AF] }, +{ source: [0xB7D9], NFC: [0xB7D9], NFD: [0x1105, 0x1164, 0x11B0], NFKC: [0xB7D9], NFKD: [0x1105, 0x1164, 0x11B0] }, +{ source: [0xB7DA], NFC: [0xB7DA], NFD: [0x1105, 0x1164, 0x11B1], NFKC: [0xB7DA], NFKD: [0x1105, 0x1164, 0x11B1] }, +{ source: [0xB7DB], NFC: [0xB7DB], NFD: [0x1105, 0x1164, 0x11B2], NFKC: [0xB7DB], NFKD: [0x1105, 0x1164, 0x11B2] }, +{ source: [0xB7DC], NFC: [0xB7DC], NFD: [0x1105, 0x1164, 0x11B3], NFKC: [0xB7DC], NFKD: [0x1105, 0x1164, 0x11B3] }, +{ source: [0xB7DD], NFC: [0xB7DD], NFD: [0x1105, 0x1164, 0x11B4], NFKC: [0xB7DD], NFKD: [0x1105, 0x1164, 0x11B4] }, +{ source: [0xB7DE], NFC: [0xB7DE], NFD: [0x1105, 0x1164, 0x11B5], NFKC: [0xB7DE], NFKD: [0x1105, 0x1164, 0x11B5] }, +{ source: [0xB7DF], NFC: [0xB7DF], NFD: [0x1105, 0x1164, 0x11B6], NFKC: [0xB7DF], NFKD: [0x1105, 0x1164, 0x11B6] }, +{ source: [0xB7E0], NFC: [0xB7E0], NFD: [0x1105, 0x1164, 0x11B7], NFKC: [0xB7E0], NFKD: [0x1105, 0x1164, 0x11B7] }, +{ source: [0xB7E1], NFC: [0xB7E1], NFD: [0x1105, 0x1164, 0x11B8], NFKC: [0xB7E1], NFKD: [0x1105, 0x1164, 0x11B8] }, +{ source: [0xB7E2], NFC: [0xB7E2], NFD: [0x1105, 0x1164, 0x11B9], NFKC: [0xB7E2], NFKD: [0x1105, 0x1164, 0x11B9] }, +{ source: [0xB7E3], NFC: [0xB7E3], NFD: [0x1105, 0x1164, 0x11BA], NFKC: [0xB7E3], NFKD: [0x1105, 0x1164, 0x11BA] }, +{ source: [0xB7E4], NFC: [0xB7E4], NFD: [0x1105, 0x1164, 0x11BB], NFKC: [0xB7E4], NFKD: [0x1105, 0x1164, 0x11BB] }, +{ source: [0xB7E5], NFC: [0xB7E5], NFD: [0x1105, 0x1164, 0x11BC], NFKC: [0xB7E5], NFKD: [0x1105, 0x1164, 0x11BC] }, +{ source: [0xB7E6], NFC: [0xB7E6], NFD: [0x1105, 0x1164, 0x11BD], NFKC: [0xB7E6], NFKD: [0x1105, 0x1164, 0x11BD] }, +{ source: [0xB7E7], NFC: [0xB7E7], NFD: [0x1105, 0x1164, 0x11BE], NFKC: [0xB7E7], NFKD: [0x1105, 0x1164, 0x11BE] }, +{ source: [0xB7E8], NFC: [0xB7E8], NFD: [0x1105, 0x1164, 0x11BF], NFKC: [0xB7E8], NFKD: [0x1105, 0x1164, 0x11BF] }, +{ source: [0xB7E9], NFC: [0xB7E9], NFD: [0x1105, 0x1164, 0x11C0], NFKC: [0xB7E9], NFKD: [0x1105, 0x1164, 0x11C0] }, +{ source: [0xB7EA], NFC: [0xB7EA], NFD: [0x1105, 0x1164, 0x11C1], NFKC: [0xB7EA], NFKD: [0x1105, 0x1164, 0x11C1] }, +{ source: [0xB7EB], NFC: [0xB7EB], NFD: [0x1105, 0x1164, 0x11C2], NFKC: [0xB7EB], NFKD: [0x1105, 0x1164, 0x11C2] }, +{ source: [0xB7EC], NFC: [0xB7EC], NFD: [0x1105, 0x1165], NFKC: [0xB7EC], NFKD: [0x1105, 0x1165] }, +{ source: [0xB7ED], NFC: [0xB7ED], NFD: [0x1105, 0x1165, 0x11A8], NFKC: [0xB7ED], NFKD: [0x1105, 0x1165, 0x11A8] }, +{ source: [0xB7EE], NFC: [0xB7EE], NFD: [0x1105, 0x1165, 0x11A9], NFKC: [0xB7EE], NFKD: [0x1105, 0x1165, 0x11A9] }, +{ source: [0xB7EF], NFC: [0xB7EF], NFD: [0x1105, 0x1165, 0x11AA], NFKC: [0xB7EF], NFKD: [0x1105, 0x1165, 0x11AA] }, +{ source: [0xB7F0], NFC: [0xB7F0], NFD: [0x1105, 0x1165, 0x11AB], NFKC: [0xB7F0], NFKD: [0x1105, 0x1165, 0x11AB] }, +{ source: [0xB7F1], NFC: [0xB7F1], NFD: [0x1105, 0x1165, 0x11AC], NFKC: [0xB7F1], NFKD: [0x1105, 0x1165, 0x11AC] }, +{ source: [0xB7F2], NFC: [0xB7F2], NFD: [0x1105, 0x1165, 0x11AD], NFKC: [0xB7F2], NFKD: [0x1105, 0x1165, 0x11AD] }, +{ source: [0xB7F3], NFC: [0xB7F3], NFD: [0x1105, 0x1165, 0x11AE], NFKC: [0xB7F3], NFKD: [0x1105, 0x1165, 0x11AE] }, +{ source: [0xB7F4], NFC: [0xB7F4], NFD: [0x1105, 0x1165, 0x11AF], NFKC: [0xB7F4], NFKD: [0x1105, 0x1165, 0x11AF] }, +{ source: [0xB7F5], NFC: [0xB7F5], NFD: [0x1105, 0x1165, 0x11B0], NFKC: [0xB7F5], NFKD: [0x1105, 0x1165, 0x11B0] }, +{ source: [0xB7F6], NFC: [0xB7F6], NFD: [0x1105, 0x1165, 0x11B1], NFKC: [0xB7F6], NFKD: [0x1105, 0x1165, 0x11B1] }, +{ source: [0xB7F7], NFC: [0xB7F7], NFD: [0x1105, 0x1165, 0x11B2], NFKC: [0xB7F7], NFKD: [0x1105, 0x1165, 0x11B2] }, +{ source: [0xB7F8], NFC: [0xB7F8], NFD: [0x1105, 0x1165, 0x11B3], NFKC: [0xB7F8], NFKD: [0x1105, 0x1165, 0x11B3] }, +{ source: [0xB7F9], NFC: [0xB7F9], NFD: [0x1105, 0x1165, 0x11B4], NFKC: [0xB7F9], NFKD: [0x1105, 0x1165, 0x11B4] }, +{ source: [0xB7FA], NFC: [0xB7FA], NFD: [0x1105, 0x1165, 0x11B5], NFKC: [0xB7FA], NFKD: [0x1105, 0x1165, 0x11B5] }, +{ source: [0xB7FB], NFC: [0xB7FB], NFD: [0x1105, 0x1165, 0x11B6], NFKC: [0xB7FB], NFKD: [0x1105, 0x1165, 0x11B6] }, +{ source: [0xB7FC], NFC: [0xB7FC], NFD: [0x1105, 0x1165, 0x11B7], NFKC: [0xB7FC], NFKD: [0x1105, 0x1165, 0x11B7] }, +{ source: [0xB7FD], NFC: [0xB7FD], NFD: [0x1105, 0x1165, 0x11B8], NFKC: [0xB7FD], NFKD: [0x1105, 0x1165, 0x11B8] }, +{ source: [0xB7FE], NFC: [0xB7FE], NFD: [0x1105, 0x1165, 0x11B9], NFKC: [0xB7FE], NFKD: [0x1105, 0x1165, 0x11B9] }, +{ source: [0xB7FF], NFC: [0xB7FF], NFD: [0x1105, 0x1165, 0x11BA], NFKC: [0xB7FF], NFKD: [0x1105, 0x1165, 0x11BA] }, +{ source: [0xB800], NFC: [0xB800], NFD: [0x1105, 0x1165, 0x11BB], NFKC: [0xB800], NFKD: [0x1105, 0x1165, 0x11BB] }, +{ source: [0xB801], NFC: [0xB801], NFD: [0x1105, 0x1165, 0x11BC], NFKC: [0xB801], NFKD: [0x1105, 0x1165, 0x11BC] }, +{ source: [0xB802], NFC: [0xB802], NFD: [0x1105, 0x1165, 0x11BD], NFKC: [0xB802], NFKD: [0x1105, 0x1165, 0x11BD] }, +{ source: [0xB803], NFC: [0xB803], NFD: [0x1105, 0x1165, 0x11BE], NFKC: [0xB803], NFKD: [0x1105, 0x1165, 0x11BE] }, +{ source: [0xB804], NFC: [0xB804], NFD: [0x1105, 0x1165, 0x11BF], NFKC: [0xB804], NFKD: [0x1105, 0x1165, 0x11BF] }, +{ source: [0xB805], NFC: [0xB805], NFD: [0x1105, 0x1165, 0x11C0], NFKC: [0xB805], NFKD: [0x1105, 0x1165, 0x11C0] }, +{ source: [0xB806], NFC: [0xB806], NFD: [0x1105, 0x1165, 0x11C1], NFKC: [0xB806], NFKD: [0x1105, 0x1165, 0x11C1] }, +{ source: [0xB807], NFC: [0xB807], NFD: [0x1105, 0x1165, 0x11C2], NFKC: [0xB807], NFKD: [0x1105, 0x1165, 0x11C2] }, +{ source: [0xB808], NFC: [0xB808], NFD: [0x1105, 0x1166], NFKC: [0xB808], NFKD: [0x1105, 0x1166] }, +{ source: [0xB809], NFC: [0xB809], NFD: [0x1105, 0x1166, 0x11A8], NFKC: [0xB809], NFKD: [0x1105, 0x1166, 0x11A8] }, +{ source: [0xB80A], NFC: [0xB80A], NFD: [0x1105, 0x1166, 0x11A9], NFKC: [0xB80A], NFKD: [0x1105, 0x1166, 0x11A9] }, +{ source: [0xB80B], NFC: [0xB80B], NFD: [0x1105, 0x1166, 0x11AA], NFKC: [0xB80B], NFKD: [0x1105, 0x1166, 0x11AA] }, +{ source: [0xB80C], NFC: [0xB80C], NFD: [0x1105, 0x1166, 0x11AB], NFKC: [0xB80C], NFKD: [0x1105, 0x1166, 0x11AB] }, +{ source: [0xB80D], NFC: [0xB80D], NFD: [0x1105, 0x1166, 0x11AC], NFKC: [0xB80D], NFKD: [0x1105, 0x1166, 0x11AC] }, +{ source: [0xB80E], NFC: [0xB80E], NFD: [0x1105, 0x1166, 0x11AD], NFKC: [0xB80E], NFKD: [0x1105, 0x1166, 0x11AD] }, +{ source: [0xB80F], NFC: [0xB80F], NFD: [0x1105, 0x1166, 0x11AE], NFKC: [0xB80F], NFKD: [0x1105, 0x1166, 0x11AE] }, +{ source: [0xB810], NFC: [0xB810], NFD: [0x1105, 0x1166, 0x11AF], NFKC: [0xB810], NFKD: [0x1105, 0x1166, 0x11AF] }, +{ source: [0xB811], NFC: [0xB811], NFD: [0x1105, 0x1166, 0x11B0], NFKC: [0xB811], NFKD: [0x1105, 0x1166, 0x11B0] }, +{ source: [0xB812], NFC: [0xB812], NFD: [0x1105, 0x1166, 0x11B1], NFKC: [0xB812], NFKD: [0x1105, 0x1166, 0x11B1] }, +{ source: [0xB813], NFC: [0xB813], NFD: [0x1105, 0x1166, 0x11B2], NFKC: [0xB813], NFKD: [0x1105, 0x1166, 0x11B2] }, +{ source: [0xB814], NFC: [0xB814], NFD: [0x1105, 0x1166, 0x11B3], NFKC: [0xB814], NFKD: [0x1105, 0x1166, 0x11B3] }, +{ source: [0xB815], NFC: [0xB815], NFD: [0x1105, 0x1166, 0x11B4], NFKC: [0xB815], NFKD: [0x1105, 0x1166, 0x11B4] }, +{ source: [0xB816], NFC: [0xB816], NFD: [0x1105, 0x1166, 0x11B5], NFKC: [0xB816], NFKD: [0x1105, 0x1166, 0x11B5] }, +{ source: [0xB817], NFC: [0xB817], NFD: [0x1105, 0x1166, 0x11B6], NFKC: [0xB817], NFKD: [0x1105, 0x1166, 0x11B6] }, +{ source: [0xB818], NFC: [0xB818], NFD: [0x1105, 0x1166, 0x11B7], NFKC: [0xB818], NFKD: [0x1105, 0x1166, 0x11B7] }, +{ source: [0xB819], NFC: [0xB819], NFD: [0x1105, 0x1166, 0x11B8], NFKC: [0xB819], NFKD: [0x1105, 0x1166, 0x11B8] }, +{ source: [0xB81A], NFC: [0xB81A], NFD: [0x1105, 0x1166, 0x11B9], NFKC: [0xB81A], NFKD: [0x1105, 0x1166, 0x11B9] }, +{ source: [0xB81B], NFC: [0xB81B], NFD: [0x1105, 0x1166, 0x11BA], NFKC: [0xB81B], NFKD: [0x1105, 0x1166, 0x11BA] }, +{ source: [0xB81C], NFC: [0xB81C], NFD: [0x1105, 0x1166, 0x11BB], NFKC: [0xB81C], NFKD: [0x1105, 0x1166, 0x11BB] }, +{ source: [0xB81D], NFC: [0xB81D], NFD: [0x1105, 0x1166, 0x11BC], NFKC: [0xB81D], NFKD: [0x1105, 0x1166, 0x11BC] }, +{ source: [0xB81E], NFC: [0xB81E], NFD: [0x1105, 0x1166, 0x11BD], NFKC: [0xB81E], NFKD: [0x1105, 0x1166, 0x11BD] }, +{ source: [0xB81F], NFC: [0xB81F], NFD: [0x1105, 0x1166, 0x11BE], NFKC: [0xB81F], NFKD: [0x1105, 0x1166, 0x11BE] }, +{ source: [0xB820], NFC: [0xB820], NFD: [0x1105, 0x1166, 0x11BF], NFKC: [0xB820], NFKD: [0x1105, 0x1166, 0x11BF] }, +{ source: [0xB821], NFC: [0xB821], NFD: [0x1105, 0x1166, 0x11C0], NFKC: [0xB821], NFKD: [0x1105, 0x1166, 0x11C0] }, +{ source: [0xB822], NFC: [0xB822], NFD: [0x1105, 0x1166, 0x11C1], NFKC: [0xB822], NFKD: [0x1105, 0x1166, 0x11C1] }, +{ source: [0xB823], NFC: [0xB823], NFD: [0x1105, 0x1166, 0x11C2], NFKC: [0xB823], NFKD: [0x1105, 0x1166, 0x11C2] }, +{ source: [0xB824], NFC: [0xB824], NFD: [0x1105, 0x1167], NFKC: [0xB824], NFKD: [0x1105, 0x1167] }, +{ source: [0xB825], NFC: [0xB825], NFD: [0x1105, 0x1167, 0x11A8], NFKC: [0xB825], NFKD: [0x1105, 0x1167, 0x11A8] }, +{ source: [0xB826], NFC: [0xB826], NFD: [0x1105, 0x1167, 0x11A9], NFKC: [0xB826], NFKD: [0x1105, 0x1167, 0x11A9] }, +{ source: [0xB827], NFC: [0xB827], NFD: [0x1105, 0x1167, 0x11AA], NFKC: [0xB827], NFKD: [0x1105, 0x1167, 0x11AA] }, +{ source: [0xB828], NFC: [0xB828], NFD: [0x1105, 0x1167, 0x11AB], NFKC: [0xB828], NFKD: [0x1105, 0x1167, 0x11AB] }, +{ source: [0xB829], NFC: [0xB829], NFD: [0x1105, 0x1167, 0x11AC], NFKC: [0xB829], NFKD: [0x1105, 0x1167, 0x11AC] }, +{ source: [0xB82A], NFC: [0xB82A], NFD: [0x1105, 0x1167, 0x11AD], NFKC: [0xB82A], NFKD: [0x1105, 0x1167, 0x11AD] }, +{ source: [0xB82B], NFC: [0xB82B], NFD: [0x1105, 0x1167, 0x11AE], NFKC: [0xB82B], NFKD: [0x1105, 0x1167, 0x11AE] }, +{ source: [0xB82C], NFC: [0xB82C], NFD: [0x1105, 0x1167, 0x11AF], NFKC: [0xB82C], NFKD: [0x1105, 0x1167, 0x11AF] }, +{ source: [0xB82D], NFC: [0xB82D], NFD: [0x1105, 0x1167, 0x11B0], NFKC: [0xB82D], NFKD: [0x1105, 0x1167, 0x11B0] }, +{ source: [0xB82E], NFC: [0xB82E], NFD: [0x1105, 0x1167, 0x11B1], NFKC: [0xB82E], NFKD: [0x1105, 0x1167, 0x11B1] }, +{ source: [0xB82F], NFC: [0xB82F], NFD: [0x1105, 0x1167, 0x11B2], NFKC: [0xB82F], NFKD: [0x1105, 0x1167, 0x11B2] }, +{ source: [0xB830], NFC: [0xB830], NFD: [0x1105, 0x1167, 0x11B3], NFKC: [0xB830], NFKD: [0x1105, 0x1167, 0x11B3] }, +{ source: [0xB831], NFC: [0xB831], NFD: [0x1105, 0x1167, 0x11B4], NFKC: [0xB831], NFKD: [0x1105, 0x1167, 0x11B4] }, +{ source: [0xB832], NFC: [0xB832], NFD: [0x1105, 0x1167, 0x11B5], NFKC: [0xB832], NFKD: [0x1105, 0x1167, 0x11B5] }, +{ source: [0xB833], NFC: [0xB833], NFD: [0x1105, 0x1167, 0x11B6], NFKC: [0xB833], NFKD: [0x1105, 0x1167, 0x11B6] }, +{ source: [0xB834], NFC: [0xB834], NFD: [0x1105, 0x1167, 0x11B7], NFKC: [0xB834], NFKD: [0x1105, 0x1167, 0x11B7] }, +{ source: [0xB835], NFC: [0xB835], NFD: [0x1105, 0x1167, 0x11B8], NFKC: [0xB835], NFKD: [0x1105, 0x1167, 0x11B8] }, +{ source: [0xB836], NFC: [0xB836], NFD: [0x1105, 0x1167, 0x11B9], NFKC: [0xB836], NFKD: [0x1105, 0x1167, 0x11B9] }, +{ source: [0xB837], NFC: [0xB837], NFD: [0x1105, 0x1167, 0x11BA], NFKC: [0xB837], NFKD: [0x1105, 0x1167, 0x11BA] }, +{ source: [0xB838], NFC: [0xB838], NFD: [0x1105, 0x1167, 0x11BB], NFKC: [0xB838], NFKD: [0x1105, 0x1167, 0x11BB] }, +{ source: [0xB839], NFC: [0xB839], NFD: [0x1105, 0x1167, 0x11BC], NFKC: [0xB839], NFKD: [0x1105, 0x1167, 0x11BC] }, +{ source: [0xB83A], NFC: [0xB83A], NFD: [0x1105, 0x1167, 0x11BD], NFKC: [0xB83A], NFKD: [0x1105, 0x1167, 0x11BD] }, +{ source: [0xB83B], NFC: [0xB83B], NFD: [0x1105, 0x1167, 0x11BE], NFKC: [0xB83B], NFKD: [0x1105, 0x1167, 0x11BE] }, +{ source: [0xB83C], NFC: [0xB83C], NFD: [0x1105, 0x1167, 0x11BF], NFKC: [0xB83C], NFKD: [0x1105, 0x1167, 0x11BF] }, +{ source: [0xB83D], NFC: [0xB83D], NFD: [0x1105, 0x1167, 0x11C0], NFKC: [0xB83D], NFKD: [0x1105, 0x1167, 0x11C0] }, +{ source: [0xB83E], NFC: [0xB83E], NFD: [0x1105, 0x1167, 0x11C1], NFKC: [0xB83E], NFKD: [0x1105, 0x1167, 0x11C1] }, +{ source: [0xB83F], NFC: [0xB83F], NFD: [0x1105, 0x1167, 0x11C2], NFKC: [0xB83F], NFKD: [0x1105, 0x1167, 0x11C2] }, +{ source: [0xB840], NFC: [0xB840], NFD: [0x1105, 0x1168], NFKC: [0xB840], NFKD: [0x1105, 0x1168] }, +{ source: [0xB841], NFC: [0xB841], NFD: [0x1105, 0x1168, 0x11A8], NFKC: [0xB841], NFKD: [0x1105, 0x1168, 0x11A8] }, +{ source: [0xB842], NFC: [0xB842], NFD: [0x1105, 0x1168, 0x11A9], NFKC: [0xB842], NFKD: [0x1105, 0x1168, 0x11A9] }, +{ source: [0xB843], NFC: [0xB843], NFD: [0x1105, 0x1168, 0x11AA], NFKC: [0xB843], NFKD: [0x1105, 0x1168, 0x11AA] }, +{ source: [0xB844], NFC: [0xB844], NFD: [0x1105, 0x1168, 0x11AB], NFKC: [0xB844], NFKD: [0x1105, 0x1168, 0x11AB] }, +{ source: [0xB845], NFC: [0xB845], NFD: [0x1105, 0x1168, 0x11AC], NFKC: [0xB845], NFKD: [0x1105, 0x1168, 0x11AC] }, +{ source: [0xB846], NFC: [0xB846], NFD: [0x1105, 0x1168, 0x11AD], NFKC: [0xB846], NFKD: [0x1105, 0x1168, 0x11AD] }, +{ source: [0xB847], NFC: [0xB847], NFD: [0x1105, 0x1168, 0x11AE], NFKC: [0xB847], NFKD: [0x1105, 0x1168, 0x11AE] }, +{ source: [0xB848], NFC: [0xB848], NFD: [0x1105, 0x1168, 0x11AF], NFKC: [0xB848], NFKD: [0x1105, 0x1168, 0x11AF] }, +{ source: [0xB849], NFC: [0xB849], NFD: [0x1105, 0x1168, 0x11B0], NFKC: [0xB849], NFKD: [0x1105, 0x1168, 0x11B0] }, +{ source: [0xB84A], NFC: [0xB84A], NFD: [0x1105, 0x1168, 0x11B1], NFKC: [0xB84A], NFKD: [0x1105, 0x1168, 0x11B1] }, +{ source: [0xB84B], NFC: [0xB84B], NFD: [0x1105, 0x1168, 0x11B2], NFKC: [0xB84B], NFKD: [0x1105, 0x1168, 0x11B2] }, +{ source: [0xB84C], NFC: [0xB84C], NFD: [0x1105, 0x1168, 0x11B3], NFKC: [0xB84C], NFKD: [0x1105, 0x1168, 0x11B3] }, +{ source: [0xB84D], NFC: [0xB84D], NFD: [0x1105, 0x1168, 0x11B4], NFKC: [0xB84D], NFKD: [0x1105, 0x1168, 0x11B4] }, +{ source: [0xB84E], NFC: [0xB84E], NFD: [0x1105, 0x1168, 0x11B5], NFKC: [0xB84E], NFKD: [0x1105, 0x1168, 0x11B5] }, +{ source: [0xB84F], NFC: [0xB84F], NFD: [0x1105, 0x1168, 0x11B6], NFKC: [0xB84F], NFKD: [0x1105, 0x1168, 0x11B6] }, +{ source: [0xB850], NFC: [0xB850], NFD: [0x1105, 0x1168, 0x11B7], NFKC: [0xB850], NFKD: [0x1105, 0x1168, 0x11B7] }, +{ source: [0xB851], NFC: [0xB851], NFD: [0x1105, 0x1168, 0x11B8], NFKC: [0xB851], NFKD: [0x1105, 0x1168, 0x11B8] }, +{ source: [0xB852], NFC: [0xB852], NFD: [0x1105, 0x1168, 0x11B9], NFKC: [0xB852], NFKD: [0x1105, 0x1168, 0x11B9] }, +{ source: [0xB853], NFC: [0xB853], NFD: [0x1105, 0x1168, 0x11BA], NFKC: [0xB853], NFKD: [0x1105, 0x1168, 0x11BA] }, +{ source: [0xB854], NFC: [0xB854], NFD: [0x1105, 0x1168, 0x11BB], NFKC: [0xB854], NFKD: [0x1105, 0x1168, 0x11BB] }, +{ source: [0xB855], NFC: [0xB855], NFD: [0x1105, 0x1168, 0x11BC], NFKC: [0xB855], NFKD: [0x1105, 0x1168, 0x11BC] }, +{ source: [0xB856], NFC: [0xB856], NFD: [0x1105, 0x1168, 0x11BD], NFKC: [0xB856], NFKD: [0x1105, 0x1168, 0x11BD] }, +{ source: [0xB857], NFC: [0xB857], NFD: [0x1105, 0x1168, 0x11BE], NFKC: [0xB857], NFKD: [0x1105, 0x1168, 0x11BE] }, +{ source: [0xB858], NFC: [0xB858], NFD: [0x1105, 0x1168, 0x11BF], NFKC: [0xB858], NFKD: [0x1105, 0x1168, 0x11BF] }, +{ source: [0xB859], NFC: [0xB859], NFD: [0x1105, 0x1168, 0x11C0], NFKC: [0xB859], NFKD: [0x1105, 0x1168, 0x11C0] }, +{ source: [0xB85A], NFC: [0xB85A], NFD: [0x1105, 0x1168, 0x11C1], NFKC: [0xB85A], NFKD: [0x1105, 0x1168, 0x11C1] }, +{ source: [0xB85B], NFC: [0xB85B], NFD: [0x1105, 0x1168, 0x11C2], NFKC: [0xB85B], NFKD: [0x1105, 0x1168, 0x11C2] }, +{ source: [0xB85C], NFC: [0xB85C], NFD: [0x1105, 0x1169], NFKC: [0xB85C], NFKD: [0x1105, 0x1169] }, +{ source: [0xB85D], NFC: [0xB85D], NFD: [0x1105, 0x1169, 0x11A8], NFKC: [0xB85D], NFKD: [0x1105, 0x1169, 0x11A8] }, +{ source: [0xB85E], NFC: [0xB85E], NFD: [0x1105, 0x1169, 0x11A9], NFKC: [0xB85E], NFKD: [0x1105, 0x1169, 0x11A9] }, +{ source: [0xB85F], NFC: [0xB85F], NFD: [0x1105, 0x1169, 0x11AA], NFKC: [0xB85F], NFKD: [0x1105, 0x1169, 0x11AA] }, +{ source: [0xB860], NFC: [0xB860], NFD: [0x1105, 0x1169, 0x11AB], NFKC: [0xB860], NFKD: [0x1105, 0x1169, 0x11AB] }, +{ source: [0xB861], NFC: [0xB861], NFD: [0x1105, 0x1169, 0x11AC], NFKC: [0xB861], NFKD: [0x1105, 0x1169, 0x11AC] }, +{ source: [0xB862], NFC: [0xB862], NFD: [0x1105, 0x1169, 0x11AD], NFKC: [0xB862], NFKD: [0x1105, 0x1169, 0x11AD] }, +{ source: [0xB863], NFC: [0xB863], NFD: [0x1105, 0x1169, 0x11AE], NFKC: [0xB863], NFKD: [0x1105, 0x1169, 0x11AE] }, +{ source: [0xB864], NFC: [0xB864], NFD: [0x1105, 0x1169, 0x11AF], NFKC: [0xB864], NFKD: [0x1105, 0x1169, 0x11AF] }, +{ source: [0xB865], NFC: [0xB865], NFD: [0x1105, 0x1169, 0x11B0], NFKC: [0xB865], NFKD: [0x1105, 0x1169, 0x11B0] }, +{ source: [0xB866], NFC: [0xB866], NFD: [0x1105, 0x1169, 0x11B1], NFKC: [0xB866], NFKD: [0x1105, 0x1169, 0x11B1] }, +{ source: [0xB867], NFC: [0xB867], NFD: [0x1105, 0x1169, 0x11B2], NFKC: [0xB867], NFKD: [0x1105, 0x1169, 0x11B2] }, +{ source: [0xB868], NFC: [0xB868], NFD: [0x1105, 0x1169, 0x11B3], NFKC: [0xB868], NFKD: [0x1105, 0x1169, 0x11B3] }, +{ source: [0xB869], NFC: [0xB869], NFD: [0x1105, 0x1169, 0x11B4], NFKC: [0xB869], NFKD: [0x1105, 0x1169, 0x11B4] }, +{ source: [0xB86A], NFC: [0xB86A], NFD: [0x1105, 0x1169, 0x11B5], NFKC: [0xB86A], NFKD: [0x1105, 0x1169, 0x11B5] }, +{ source: [0xB86B], NFC: [0xB86B], NFD: [0x1105, 0x1169, 0x11B6], NFKC: [0xB86B], NFKD: [0x1105, 0x1169, 0x11B6] }, +{ source: [0xB86C], NFC: [0xB86C], NFD: [0x1105, 0x1169, 0x11B7], NFKC: [0xB86C], NFKD: [0x1105, 0x1169, 0x11B7] }, +{ source: [0xB86D], NFC: [0xB86D], NFD: [0x1105, 0x1169, 0x11B8], NFKC: [0xB86D], NFKD: [0x1105, 0x1169, 0x11B8] }, +{ source: [0xB86E], NFC: [0xB86E], NFD: [0x1105, 0x1169, 0x11B9], NFKC: [0xB86E], NFKD: [0x1105, 0x1169, 0x11B9] }, +{ source: [0xB86F], NFC: [0xB86F], NFD: [0x1105, 0x1169, 0x11BA], NFKC: [0xB86F], NFKD: [0x1105, 0x1169, 0x11BA] }, +{ source: [0xB870], NFC: [0xB870], NFD: [0x1105, 0x1169, 0x11BB], NFKC: [0xB870], NFKD: [0x1105, 0x1169, 0x11BB] }, +{ source: [0xB871], NFC: [0xB871], NFD: [0x1105, 0x1169, 0x11BC], NFKC: [0xB871], NFKD: [0x1105, 0x1169, 0x11BC] }, +{ source: [0xB872], NFC: [0xB872], NFD: [0x1105, 0x1169, 0x11BD], NFKC: [0xB872], NFKD: [0x1105, 0x1169, 0x11BD] }, +{ source: [0xB873], NFC: [0xB873], NFD: [0x1105, 0x1169, 0x11BE], NFKC: [0xB873], NFKD: [0x1105, 0x1169, 0x11BE] }, +{ source: [0xB874], NFC: [0xB874], NFD: [0x1105, 0x1169, 0x11BF], NFKC: [0xB874], NFKD: [0x1105, 0x1169, 0x11BF] }, +{ source: [0xB875], NFC: [0xB875], NFD: [0x1105, 0x1169, 0x11C0], NFKC: [0xB875], NFKD: [0x1105, 0x1169, 0x11C0] }, +{ source: [0xB876], NFC: [0xB876], NFD: [0x1105, 0x1169, 0x11C1], NFKC: [0xB876], NFKD: [0x1105, 0x1169, 0x11C1] }, +{ source: [0xB877], NFC: [0xB877], NFD: [0x1105, 0x1169, 0x11C2], NFKC: [0xB877], NFKD: [0x1105, 0x1169, 0x11C2] }, +{ source: [0xB878], NFC: [0xB878], NFD: [0x1105, 0x116A], NFKC: [0xB878], NFKD: [0x1105, 0x116A] }, +{ source: [0xB879], NFC: [0xB879], NFD: [0x1105, 0x116A, 0x11A8], NFKC: [0xB879], NFKD: [0x1105, 0x116A, 0x11A8] }, +{ source: [0xB87A], NFC: [0xB87A], NFD: [0x1105, 0x116A, 0x11A9], NFKC: [0xB87A], NFKD: [0x1105, 0x116A, 0x11A9] }, +{ source: [0xB87B], NFC: [0xB87B], NFD: [0x1105, 0x116A, 0x11AA], NFKC: [0xB87B], NFKD: [0x1105, 0x116A, 0x11AA] }, +{ source: [0xB87C], NFC: [0xB87C], NFD: [0x1105, 0x116A, 0x11AB], NFKC: [0xB87C], NFKD: [0x1105, 0x116A, 0x11AB] }, +{ source: [0xB87D], NFC: [0xB87D], NFD: [0x1105, 0x116A, 0x11AC], NFKC: [0xB87D], NFKD: [0x1105, 0x116A, 0x11AC] }, +{ source: [0xB87E], NFC: [0xB87E], NFD: [0x1105, 0x116A, 0x11AD], NFKC: [0xB87E], NFKD: [0x1105, 0x116A, 0x11AD] }, +{ source: [0xB87F], NFC: [0xB87F], NFD: [0x1105, 0x116A, 0x11AE], NFKC: [0xB87F], NFKD: [0x1105, 0x116A, 0x11AE] }, +{ source: [0xB880], NFC: [0xB880], NFD: [0x1105, 0x116A, 0x11AF], NFKC: [0xB880], NFKD: [0x1105, 0x116A, 0x11AF] }, +{ source: [0xB881], NFC: [0xB881], NFD: [0x1105, 0x116A, 0x11B0], NFKC: [0xB881], NFKD: [0x1105, 0x116A, 0x11B0] }, +{ source: [0xB882], NFC: [0xB882], NFD: [0x1105, 0x116A, 0x11B1], NFKC: [0xB882], NFKD: [0x1105, 0x116A, 0x11B1] }, +{ source: [0xB883], NFC: [0xB883], NFD: [0x1105, 0x116A, 0x11B2], NFKC: [0xB883], NFKD: [0x1105, 0x116A, 0x11B2] }, +{ source: [0xB884], NFC: [0xB884], NFD: [0x1105, 0x116A, 0x11B3], NFKC: [0xB884], NFKD: [0x1105, 0x116A, 0x11B3] }, +{ source: [0xB885], NFC: [0xB885], NFD: [0x1105, 0x116A, 0x11B4], NFKC: [0xB885], NFKD: [0x1105, 0x116A, 0x11B4] }, +{ source: [0xB886], NFC: [0xB886], NFD: [0x1105, 0x116A, 0x11B5], NFKC: [0xB886], NFKD: [0x1105, 0x116A, 0x11B5] }, +{ source: [0xB887], NFC: [0xB887], NFD: [0x1105, 0x116A, 0x11B6], NFKC: [0xB887], NFKD: [0x1105, 0x116A, 0x11B6] }, +{ source: [0xB888], NFC: [0xB888], NFD: [0x1105, 0x116A, 0x11B7], NFKC: [0xB888], NFKD: [0x1105, 0x116A, 0x11B7] }, +{ source: [0xB889], NFC: [0xB889], NFD: [0x1105, 0x116A, 0x11B8], NFKC: [0xB889], NFKD: [0x1105, 0x116A, 0x11B8] }, +{ source: [0xB88A], NFC: [0xB88A], NFD: [0x1105, 0x116A, 0x11B9], NFKC: [0xB88A], NFKD: [0x1105, 0x116A, 0x11B9] }, +{ source: [0xB88B], NFC: [0xB88B], NFD: [0x1105, 0x116A, 0x11BA], NFKC: [0xB88B], NFKD: [0x1105, 0x116A, 0x11BA] }, +{ source: [0xB88C], NFC: [0xB88C], NFD: [0x1105, 0x116A, 0x11BB], NFKC: [0xB88C], NFKD: [0x1105, 0x116A, 0x11BB] }, +{ source: [0xB88D], NFC: [0xB88D], NFD: [0x1105, 0x116A, 0x11BC], NFKC: [0xB88D], NFKD: [0x1105, 0x116A, 0x11BC] }, +{ source: [0xB88E], NFC: [0xB88E], NFD: [0x1105, 0x116A, 0x11BD], NFKC: [0xB88E], NFKD: [0x1105, 0x116A, 0x11BD] }, +{ source: [0xB88F], NFC: [0xB88F], NFD: [0x1105, 0x116A, 0x11BE], NFKC: [0xB88F], NFKD: [0x1105, 0x116A, 0x11BE] }, +{ source: [0xB890], NFC: [0xB890], NFD: [0x1105, 0x116A, 0x11BF], NFKC: [0xB890], NFKD: [0x1105, 0x116A, 0x11BF] }, +{ source: [0xB891], NFC: [0xB891], NFD: [0x1105, 0x116A, 0x11C0], NFKC: [0xB891], NFKD: [0x1105, 0x116A, 0x11C0] }, +{ source: [0xB892], NFC: [0xB892], NFD: [0x1105, 0x116A, 0x11C1], NFKC: [0xB892], NFKD: [0x1105, 0x116A, 0x11C1] }, +{ source: [0xB893], NFC: [0xB893], NFD: [0x1105, 0x116A, 0x11C2], NFKC: [0xB893], NFKD: [0x1105, 0x116A, 0x11C2] }, +{ source: [0xB894], NFC: [0xB894], NFD: [0x1105, 0x116B], NFKC: [0xB894], NFKD: [0x1105, 0x116B] }, +{ source: [0xB895], NFC: [0xB895], NFD: [0x1105, 0x116B, 0x11A8], NFKC: [0xB895], NFKD: [0x1105, 0x116B, 0x11A8] }, +{ source: [0xB896], NFC: [0xB896], NFD: [0x1105, 0x116B, 0x11A9], NFKC: [0xB896], NFKD: [0x1105, 0x116B, 0x11A9] }, +{ source: [0xB897], NFC: [0xB897], NFD: [0x1105, 0x116B, 0x11AA], NFKC: [0xB897], NFKD: [0x1105, 0x116B, 0x11AA] }, +{ source: [0xB898], NFC: [0xB898], NFD: [0x1105, 0x116B, 0x11AB], NFKC: [0xB898], NFKD: [0x1105, 0x116B, 0x11AB] }, +{ source: [0xB899], NFC: [0xB899], NFD: [0x1105, 0x116B, 0x11AC], NFKC: [0xB899], NFKD: [0x1105, 0x116B, 0x11AC] }, +{ source: [0xB89A], NFC: [0xB89A], NFD: [0x1105, 0x116B, 0x11AD], NFKC: [0xB89A], NFKD: [0x1105, 0x116B, 0x11AD] }, +{ source: [0xB89B], NFC: [0xB89B], NFD: [0x1105, 0x116B, 0x11AE], NFKC: [0xB89B], NFKD: [0x1105, 0x116B, 0x11AE] }, +{ source: [0xB89C], NFC: [0xB89C], NFD: [0x1105, 0x116B, 0x11AF], NFKC: [0xB89C], NFKD: [0x1105, 0x116B, 0x11AF] }, +{ source: [0xB89D], NFC: [0xB89D], NFD: [0x1105, 0x116B, 0x11B0], NFKC: [0xB89D], NFKD: [0x1105, 0x116B, 0x11B0] }, +{ source: [0xB89E], NFC: [0xB89E], NFD: [0x1105, 0x116B, 0x11B1], NFKC: [0xB89E], NFKD: [0x1105, 0x116B, 0x11B1] }, +{ source: [0xB89F], NFC: [0xB89F], NFD: [0x1105, 0x116B, 0x11B2], NFKC: [0xB89F], NFKD: [0x1105, 0x116B, 0x11B2] }, +{ source: [0xB8A0], NFC: [0xB8A0], NFD: [0x1105, 0x116B, 0x11B3], NFKC: [0xB8A0], NFKD: [0x1105, 0x116B, 0x11B3] }, +{ source: [0xB8A1], NFC: [0xB8A1], NFD: [0x1105, 0x116B, 0x11B4], NFKC: [0xB8A1], NFKD: [0x1105, 0x116B, 0x11B4] }, +{ source: [0xB8A2], NFC: [0xB8A2], NFD: [0x1105, 0x116B, 0x11B5], NFKC: [0xB8A2], NFKD: [0x1105, 0x116B, 0x11B5] }, +{ source: [0xB8A3], NFC: [0xB8A3], NFD: [0x1105, 0x116B, 0x11B6], NFKC: [0xB8A3], NFKD: [0x1105, 0x116B, 0x11B6] }, +{ source: [0xB8A4], NFC: [0xB8A4], NFD: [0x1105, 0x116B, 0x11B7], NFKC: [0xB8A4], NFKD: [0x1105, 0x116B, 0x11B7] }, +{ source: [0xB8A5], NFC: [0xB8A5], NFD: [0x1105, 0x116B, 0x11B8], NFKC: [0xB8A5], NFKD: [0x1105, 0x116B, 0x11B8] }, +{ source: [0xB8A6], NFC: [0xB8A6], NFD: [0x1105, 0x116B, 0x11B9], NFKC: [0xB8A6], NFKD: [0x1105, 0x116B, 0x11B9] }, +{ source: [0xB8A7], NFC: [0xB8A7], NFD: [0x1105, 0x116B, 0x11BA], NFKC: [0xB8A7], NFKD: [0x1105, 0x116B, 0x11BA] }, +{ source: [0xB8A8], NFC: [0xB8A8], NFD: [0x1105, 0x116B, 0x11BB], NFKC: [0xB8A8], NFKD: [0x1105, 0x116B, 0x11BB] }, +{ source: [0xB8A9], NFC: [0xB8A9], NFD: [0x1105, 0x116B, 0x11BC], NFKC: [0xB8A9], NFKD: [0x1105, 0x116B, 0x11BC] }, +{ source: [0xB8AA], NFC: [0xB8AA], NFD: [0x1105, 0x116B, 0x11BD], NFKC: [0xB8AA], NFKD: [0x1105, 0x116B, 0x11BD] }, +{ source: [0xB8AB], NFC: [0xB8AB], NFD: [0x1105, 0x116B, 0x11BE], NFKC: [0xB8AB], NFKD: [0x1105, 0x116B, 0x11BE] }, +{ source: [0xB8AC], NFC: [0xB8AC], NFD: [0x1105, 0x116B, 0x11BF], NFKC: [0xB8AC], NFKD: [0x1105, 0x116B, 0x11BF] }, +{ source: [0xB8AD], NFC: [0xB8AD], NFD: [0x1105, 0x116B, 0x11C0], NFKC: [0xB8AD], NFKD: [0x1105, 0x116B, 0x11C0] }, +{ source: [0xB8AE], NFC: [0xB8AE], NFD: [0x1105, 0x116B, 0x11C1], NFKC: [0xB8AE], NFKD: [0x1105, 0x116B, 0x11C1] }, +{ source: [0xB8AF], NFC: [0xB8AF], NFD: [0x1105, 0x116B, 0x11C2], NFKC: [0xB8AF], NFKD: [0x1105, 0x116B, 0x11C2] }, +{ source: [0xB8B0], NFC: [0xB8B0], NFD: [0x1105, 0x116C], NFKC: [0xB8B0], NFKD: [0x1105, 0x116C] }, +{ source: [0xB8B1], NFC: [0xB8B1], NFD: [0x1105, 0x116C, 0x11A8], NFKC: [0xB8B1], NFKD: [0x1105, 0x116C, 0x11A8] }, +{ source: [0xB8B2], NFC: [0xB8B2], NFD: [0x1105, 0x116C, 0x11A9], NFKC: [0xB8B2], NFKD: [0x1105, 0x116C, 0x11A9] }, +{ source: [0xB8B3], NFC: [0xB8B3], NFD: [0x1105, 0x116C, 0x11AA], NFKC: [0xB8B3], NFKD: [0x1105, 0x116C, 0x11AA] }, +{ source: [0xB8B4], NFC: [0xB8B4], NFD: [0x1105, 0x116C, 0x11AB], NFKC: [0xB8B4], NFKD: [0x1105, 0x116C, 0x11AB] }, +{ source: [0xB8B5], NFC: [0xB8B5], NFD: [0x1105, 0x116C, 0x11AC], NFKC: [0xB8B5], NFKD: [0x1105, 0x116C, 0x11AC] }, +{ source: [0xB8B6], NFC: [0xB8B6], NFD: [0x1105, 0x116C, 0x11AD], NFKC: [0xB8B6], NFKD: [0x1105, 0x116C, 0x11AD] }, +{ source: [0xB8B7], NFC: [0xB8B7], NFD: [0x1105, 0x116C, 0x11AE], NFKC: [0xB8B7], NFKD: [0x1105, 0x116C, 0x11AE] }, +{ source: [0xB8B8], NFC: [0xB8B8], NFD: [0x1105, 0x116C, 0x11AF], NFKC: [0xB8B8], NFKD: [0x1105, 0x116C, 0x11AF] }, +{ source: [0xB8B9], NFC: [0xB8B9], NFD: [0x1105, 0x116C, 0x11B0], NFKC: [0xB8B9], NFKD: [0x1105, 0x116C, 0x11B0] }, +{ source: [0xB8BA], NFC: [0xB8BA], NFD: [0x1105, 0x116C, 0x11B1], NFKC: [0xB8BA], NFKD: [0x1105, 0x116C, 0x11B1] }, +{ source: [0xB8BB], NFC: [0xB8BB], NFD: [0x1105, 0x116C, 0x11B2], NFKC: [0xB8BB], NFKD: [0x1105, 0x116C, 0x11B2] }, +{ source: [0xB8BC], NFC: [0xB8BC], NFD: [0x1105, 0x116C, 0x11B3], NFKC: [0xB8BC], NFKD: [0x1105, 0x116C, 0x11B3] }, +{ source: [0xB8BD], NFC: [0xB8BD], NFD: [0x1105, 0x116C, 0x11B4], NFKC: [0xB8BD], NFKD: [0x1105, 0x116C, 0x11B4] }, +{ source: [0xB8BE], NFC: [0xB8BE], NFD: [0x1105, 0x116C, 0x11B5], NFKC: [0xB8BE], NFKD: [0x1105, 0x116C, 0x11B5] }, +{ source: [0xB8BF], NFC: [0xB8BF], NFD: [0x1105, 0x116C, 0x11B6], NFKC: [0xB8BF], NFKD: [0x1105, 0x116C, 0x11B6] }, +{ source: [0xB8C0], NFC: [0xB8C0], NFD: [0x1105, 0x116C, 0x11B7], NFKC: [0xB8C0], NFKD: [0x1105, 0x116C, 0x11B7] }, +{ source: [0xB8C1], NFC: [0xB8C1], NFD: [0x1105, 0x116C, 0x11B8], NFKC: [0xB8C1], NFKD: [0x1105, 0x116C, 0x11B8] }, +{ source: [0xB8C2], NFC: [0xB8C2], NFD: [0x1105, 0x116C, 0x11B9], NFKC: [0xB8C2], NFKD: [0x1105, 0x116C, 0x11B9] }, +{ source: [0xB8C3], NFC: [0xB8C3], NFD: [0x1105, 0x116C, 0x11BA], NFKC: [0xB8C3], NFKD: [0x1105, 0x116C, 0x11BA] }, +{ source: [0xB8C4], NFC: [0xB8C4], NFD: [0x1105, 0x116C, 0x11BB], NFKC: [0xB8C4], NFKD: [0x1105, 0x116C, 0x11BB] }, +{ source: [0xB8C5], NFC: [0xB8C5], NFD: [0x1105, 0x116C, 0x11BC], NFKC: [0xB8C5], NFKD: [0x1105, 0x116C, 0x11BC] }, +{ source: [0xB8C6], NFC: [0xB8C6], NFD: [0x1105, 0x116C, 0x11BD], NFKC: [0xB8C6], NFKD: [0x1105, 0x116C, 0x11BD] }, +{ source: [0xB8C7], NFC: [0xB8C7], NFD: [0x1105, 0x116C, 0x11BE], NFKC: [0xB8C7], NFKD: [0x1105, 0x116C, 0x11BE] }, +{ source: [0xB8C8], NFC: [0xB8C8], NFD: [0x1105, 0x116C, 0x11BF], NFKC: [0xB8C8], NFKD: [0x1105, 0x116C, 0x11BF] }, +{ source: [0xB8C9], NFC: [0xB8C9], NFD: [0x1105, 0x116C, 0x11C0], NFKC: [0xB8C9], NFKD: [0x1105, 0x116C, 0x11C0] }, +{ source: [0xB8CA], NFC: [0xB8CA], NFD: [0x1105, 0x116C, 0x11C1], NFKC: [0xB8CA], NFKD: [0x1105, 0x116C, 0x11C1] }, +{ source: [0xB8CB], NFC: [0xB8CB], NFD: [0x1105, 0x116C, 0x11C2], NFKC: [0xB8CB], NFKD: [0x1105, 0x116C, 0x11C2] }, +{ source: [0xB8CC], NFC: [0xB8CC], NFD: [0x1105, 0x116D], NFKC: [0xB8CC], NFKD: [0x1105, 0x116D] }, +{ source: [0xB8CD], NFC: [0xB8CD], NFD: [0x1105, 0x116D, 0x11A8], NFKC: [0xB8CD], NFKD: [0x1105, 0x116D, 0x11A8] }, +{ source: [0xB8CE], NFC: [0xB8CE], NFD: [0x1105, 0x116D, 0x11A9], NFKC: [0xB8CE], NFKD: [0x1105, 0x116D, 0x11A9] }, +{ source: [0xB8CF], NFC: [0xB8CF], NFD: [0x1105, 0x116D, 0x11AA], NFKC: [0xB8CF], NFKD: [0x1105, 0x116D, 0x11AA] }, +{ source: [0xB8D0], NFC: [0xB8D0], NFD: [0x1105, 0x116D, 0x11AB], NFKC: [0xB8D0], NFKD: [0x1105, 0x116D, 0x11AB] }, +{ source: [0xB8D1], NFC: [0xB8D1], NFD: [0x1105, 0x116D, 0x11AC], NFKC: [0xB8D1], NFKD: [0x1105, 0x116D, 0x11AC] }, +{ source: [0xB8D2], NFC: [0xB8D2], NFD: [0x1105, 0x116D, 0x11AD], NFKC: [0xB8D2], NFKD: [0x1105, 0x116D, 0x11AD] }, +{ source: [0xB8D3], NFC: [0xB8D3], NFD: [0x1105, 0x116D, 0x11AE], NFKC: [0xB8D3], NFKD: [0x1105, 0x116D, 0x11AE] }, +{ source: [0xB8D4], NFC: [0xB8D4], NFD: [0x1105, 0x116D, 0x11AF], NFKC: [0xB8D4], NFKD: [0x1105, 0x116D, 0x11AF] }, +{ source: [0xB8D5], NFC: [0xB8D5], NFD: [0x1105, 0x116D, 0x11B0], NFKC: [0xB8D5], NFKD: [0x1105, 0x116D, 0x11B0] }, +{ source: [0xB8D6], NFC: [0xB8D6], NFD: [0x1105, 0x116D, 0x11B1], NFKC: [0xB8D6], NFKD: [0x1105, 0x116D, 0x11B1] }, +{ source: [0xB8D7], NFC: [0xB8D7], NFD: [0x1105, 0x116D, 0x11B2], NFKC: [0xB8D7], NFKD: [0x1105, 0x116D, 0x11B2] }, +{ source: [0xB8D8], NFC: [0xB8D8], NFD: [0x1105, 0x116D, 0x11B3], NFKC: [0xB8D8], NFKD: [0x1105, 0x116D, 0x11B3] }, +{ source: [0xB8D9], NFC: [0xB8D9], NFD: [0x1105, 0x116D, 0x11B4], NFKC: [0xB8D9], NFKD: [0x1105, 0x116D, 0x11B4] }, +{ source: [0xB8DA], NFC: [0xB8DA], NFD: [0x1105, 0x116D, 0x11B5], NFKC: [0xB8DA], NFKD: [0x1105, 0x116D, 0x11B5] }, +{ source: [0xB8DB], NFC: [0xB8DB], NFD: [0x1105, 0x116D, 0x11B6], NFKC: [0xB8DB], NFKD: [0x1105, 0x116D, 0x11B6] }, +{ source: [0xB8DC], NFC: [0xB8DC], NFD: [0x1105, 0x116D, 0x11B7], NFKC: [0xB8DC], NFKD: [0x1105, 0x116D, 0x11B7] }, +{ source: [0xB8DD], NFC: [0xB8DD], NFD: [0x1105, 0x116D, 0x11B8], NFKC: [0xB8DD], NFKD: [0x1105, 0x116D, 0x11B8] }, +{ source: [0xB8DE], NFC: [0xB8DE], NFD: [0x1105, 0x116D, 0x11B9], NFKC: [0xB8DE], NFKD: [0x1105, 0x116D, 0x11B9] }, +{ source: [0xB8DF], NFC: [0xB8DF], NFD: [0x1105, 0x116D, 0x11BA], NFKC: [0xB8DF], NFKD: [0x1105, 0x116D, 0x11BA] }, +{ source: [0xB8E0], NFC: [0xB8E0], NFD: [0x1105, 0x116D, 0x11BB], NFKC: [0xB8E0], NFKD: [0x1105, 0x116D, 0x11BB] }, +{ source: [0xB8E1], NFC: [0xB8E1], NFD: [0x1105, 0x116D, 0x11BC], NFKC: [0xB8E1], NFKD: [0x1105, 0x116D, 0x11BC] }, +{ source: [0xB8E2], NFC: [0xB8E2], NFD: [0x1105, 0x116D, 0x11BD], NFKC: [0xB8E2], NFKD: [0x1105, 0x116D, 0x11BD] }, +{ source: [0xB8E3], NFC: [0xB8E3], NFD: [0x1105, 0x116D, 0x11BE], NFKC: [0xB8E3], NFKD: [0x1105, 0x116D, 0x11BE] }, +{ source: [0xB8E4], NFC: [0xB8E4], NFD: [0x1105, 0x116D, 0x11BF], NFKC: [0xB8E4], NFKD: [0x1105, 0x116D, 0x11BF] }, +{ source: [0xB8E5], NFC: [0xB8E5], NFD: [0x1105, 0x116D, 0x11C0], NFKC: [0xB8E5], NFKD: [0x1105, 0x116D, 0x11C0] }, +{ source: [0xB8E6], NFC: [0xB8E6], NFD: [0x1105, 0x116D, 0x11C1], NFKC: [0xB8E6], NFKD: [0x1105, 0x116D, 0x11C1] }, +{ source: [0xB8E7], NFC: [0xB8E7], NFD: [0x1105, 0x116D, 0x11C2], NFKC: [0xB8E7], NFKD: [0x1105, 0x116D, 0x11C2] }, +{ source: [0xB8E8], NFC: [0xB8E8], NFD: [0x1105, 0x116E], NFKC: [0xB8E8], NFKD: [0x1105, 0x116E] }, +{ source: [0xB8E9], NFC: [0xB8E9], NFD: [0x1105, 0x116E, 0x11A8], NFKC: [0xB8E9], NFKD: [0x1105, 0x116E, 0x11A8] }, +{ source: [0xB8EA], NFC: [0xB8EA], NFD: [0x1105, 0x116E, 0x11A9], NFKC: [0xB8EA], NFKD: [0x1105, 0x116E, 0x11A9] }, +{ source: [0xB8EB], NFC: [0xB8EB], NFD: [0x1105, 0x116E, 0x11AA], NFKC: [0xB8EB], NFKD: [0x1105, 0x116E, 0x11AA] }, +{ source: [0xB8EC], NFC: [0xB8EC], NFD: [0x1105, 0x116E, 0x11AB], NFKC: [0xB8EC], NFKD: [0x1105, 0x116E, 0x11AB] }, +{ source: [0xB8ED], NFC: [0xB8ED], NFD: [0x1105, 0x116E, 0x11AC], NFKC: [0xB8ED], NFKD: [0x1105, 0x116E, 0x11AC] }, +{ source: [0xB8EE], NFC: [0xB8EE], NFD: [0x1105, 0x116E, 0x11AD], NFKC: [0xB8EE], NFKD: [0x1105, 0x116E, 0x11AD] }, +{ source: [0xB8EF], NFC: [0xB8EF], NFD: [0x1105, 0x116E, 0x11AE], NFKC: [0xB8EF], NFKD: [0x1105, 0x116E, 0x11AE] }, +{ source: [0xB8F0], NFC: [0xB8F0], NFD: [0x1105, 0x116E, 0x11AF], NFKC: [0xB8F0], NFKD: [0x1105, 0x116E, 0x11AF] }, +{ source: [0xB8F1], NFC: [0xB8F1], NFD: [0x1105, 0x116E, 0x11B0], NFKC: [0xB8F1], NFKD: [0x1105, 0x116E, 0x11B0] }, +{ source: [0xB8F2], NFC: [0xB8F2], NFD: [0x1105, 0x116E, 0x11B1], NFKC: [0xB8F2], NFKD: [0x1105, 0x116E, 0x11B1] }, +{ source: [0xB8F3], NFC: [0xB8F3], NFD: [0x1105, 0x116E, 0x11B2], NFKC: [0xB8F3], NFKD: [0x1105, 0x116E, 0x11B2] }, +{ source: [0xB8F4], NFC: [0xB8F4], NFD: [0x1105, 0x116E, 0x11B3], NFKC: [0xB8F4], NFKD: [0x1105, 0x116E, 0x11B3] }, +{ source: [0xB8F5], NFC: [0xB8F5], NFD: [0x1105, 0x116E, 0x11B4], NFKC: [0xB8F5], NFKD: [0x1105, 0x116E, 0x11B4] }, +{ source: [0xB8F6], NFC: [0xB8F6], NFD: [0x1105, 0x116E, 0x11B5], NFKC: [0xB8F6], NFKD: [0x1105, 0x116E, 0x11B5] }, +{ source: [0xB8F7], NFC: [0xB8F7], NFD: [0x1105, 0x116E, 0x11B6], NFKC: [0xB8F7], NFKD: [0x1105, 0x116E, 0x11B6] }, +{ source: [0xB8F8], NFC: [0xB8F8], NFD: [0x1105, 0x116E, 0x11B7], NFKC: [0xB8F8], NFKD: [0x1105, 0x116E, 0x11B7] }, +{ source: [0xB8F9], NFC: [0xB8F9], NFD: [0x1105, 0x116E, 0x11B8], NFKC: [0xB8F9], NFKD: [0x1105, 0x116E, 0x11B8] }, +{ source: [0xB8FA], NFC: [0xB8FA], NFD: [0x1105, 0x116E, 0x11B9], NFKC: [0xB8FA], NFKD: [0x1105, 0x116E, 0x11B9] }, +{ source: [0xB8FB], NFC: [0xB8FB], NFD: [0x1105, 0x116E, 0x11BA], NFKC: [0xB8FB], NFKD: [0x1105, 0x116E, 0x11BA] }, +{ source: [0xB8FC], NFC: [0xB8FC], NFD: [0x1105, 0x116E, 0x11BB], NFKC: [0xB8FC], NFKD: [0x1105, 0x116E, 0x11BB] }, +{ source: [0xB8FD], NFC: [0xB8FD], NFD: [0x1105, 0x116E, 0x11BC], NFKC: [0xB8FD], NFKD: [0x1105, 0x116E, 0x11BC] }, +{ source: [0xB8FE], NFC: [0xB8FE], NFD: [0x1105, 0x116E, 0x11BD], NFKC: [0xB8FE], NFKD: [0x1105, 0x116E, 0x11BD] }, +{ source: [0xB8FF], NFC: [0xB8FF], NFD: [0x1105, 0x116E, 0x11BE], NFKC: [0xB8FF], NFKD: [0x1105, 0x116E, 0x11BE] }, +{ source: [0xB900], NFC: [0xB900], NFD: [0x1105, 0x116E, 0x11BF], NFKC: [0xB900], NFKD: [0x1105, 0x116E, 0x11BF] }, +{ source: [0xB901], NFC: [0xB901], NFD: [0x1105, 0x116E, 0x11C0], NFKC: [0xB901], NFKD: [0x1105, 0x116E, 0x11C0] }, +{ source: [0xB902], NFC: [0xB902], NFD: [0x1105, 0x116E, 0x11C1], NFKC: [0xB902], NFKD: [0x1105, 0x116E, 0x11C1] }, +{ source: [0xB903], NFC: [0xB903], NFD: [0x1105, 0x116E, 0x11C2], NFKC: [0xB903], NFKD: [0x1105, 0x116E, 0x11C2] }, +{ source: [0xB904], NFC: [0xB904], NFD: [0x1105, 0x116F], NFKC: [0xB904], NFKD: [0x1105, 0x116F] }, +{ source: [0xB905], NFC: [0xB905], NFD: [0x1105, 0x116F, 0x11A8], NFKC: [0xB905], NFKD: [0x1105, 0x116F, 0x11A8] }, +{ source: [0xB906], NFC: [0xB906], NFD: [0x1105, 0x116F, 0x11A9], NFKC: [0xB906], NFKD: [0x1105, 0x116F, 0x11A9] }, +{ source: [0xB907], NFC: [0xB907], NFD: [0x1105, 0x116F, 0x11AA], NFKC: [0xB907], NFKD: [0x1105, 0x116F, 0x11AA] }, +{ source: [0xB908], NFC: [0xB908], NFD: [0x1105, 0x116F, 0x11AB], NFKC: [0xB908], NFKD: [0x1105, 0x116F, 0x11AB] }, +{ source: [0xB909], NFC: [0xB909], NFD: [0x1105, 0x116F, 0x11AC], NFKC: [0xB909], NFKD: [0x1105, 0x116F, 0x11AC] }, +{ source: [0xB90A], NFC: [0xB90A], NFD: [0x1105, 0x116F, 0x11AD], NFKC: [0xB90A], NFKD: [0x1105, 0x116F, 0x11AD] }, +{ source: [0xB90B], NFC: [0xB90B], NFD: [0x1105, 0x116F, 0x11AE], NFKC: [0xB90B], NFKD: [0x1105, 0x116F, 0x11AE] }, +{ source: [0xB90C], NFC: [0xB90C], NFD: [0x1105, 0x116F, 0x11AF], NFKC: [0xB90C], NFKD: [0x1105, 0x116F, 0x11AF] }, +{ source: [0xB90D], NFC: [0xB90D], NFD: [0x1105, 0x116F, 0x11B0], NFKC: [0xB90D], NFKD: [0x1105, 0x116F, 0x11B0] }, +{ source: [0xB90E], NFC: [0xB90E], NFD: [0x1105, 0x116F, 0x11B1], NFKC: [0xB90E], NFKD: [0x1105, 0x116F, 0x11B1] }, +{ source: [0xB90F], NFC: [0xB90F], NFD: [0x1105, 0x116F, 0x11B2], NFKC: [0xB90F], NFKD: [0x1105, 0x116F, 0x11B2] }, +{ source: [0xB910], NFC: [0xB910], NFD: [0x1105, 0x116F, 0x11B3], NFKC: [0xB910], NFKD: [0x1105, 0x116F, 0x11B3] }, +{ source: [0xB911], NFC: [0xB911], NFD: [0x1105, 0x116F, 0x11B4], NFKC: [0xB911], NFKD: [0x1105, 0x116F, 0x11B4] }, +{ source: [0xB912], NFC: [0xB912], NFD: [0x1105, 0x116F, 0x11B5], NFKC: [0xB912], NFKD: [0x1105, 0x116F, 0x11B5] }, +{ source: [0xB913], NFC: [0xB913], NFD: [0x1105, 0x116F, 0x11B6], NFKC: [0xB913], NFKD: [0x1105, 0x116F, 0x11B6] }, +{ source: [0xB914], NFC: [0xB914], NFD: [0x1105, 0x116F, 0x11B7], NFKC: [0xB914], NFKD: [0x1105, 0x116F, 0x11B7] }, +{ source: [0xB915], NFC: [0xB915], NFD: [0x1105, 0x116F, 0x11B8], NFKC: [0xB915], NFKD: [0x1105, 0x116F, 0x11B8] }, +{ source: [0xB916], NFC: [0xB916], NFD: [0x1105, 0x116F, 0x11B9], NFKC: [0xB916], NFKD: [0x1105, 0x116F, 0x11B9] }, +{ source: [0xB917], NFC: [0xB917], NFD: [0x1105, 0x116F, 0x11BA], NFKC: [0xB917], NFKD: [0x1105, 0x116F, 0x11BA] }, +{ source: [0xB918], NFC: [0xB918], NFD: [0x1105, 0x116F, 0x11BB], NFKC: [0xB918], NFKD: [0x1105, 0x116F, 0x11BB] }, +{ source: [0xB919], NFC: [0xB919], NFD: [0x1105, 0x116F, 0x11BC], NFKC: [0xB919], NFKD: [0x1105, 0x116F, 0x11BC] }, +{ source: [0xB91A], NFC: [0xB91A], NFD: [0x1105, 0x116F, 0x11BD], NFKC: [0xB91A], NFKD: [0x1105, 0x116F, 0x11BD] }, +{ source: [0xB91B], NFC: [0xB91B], NFD: [0x1105, 0x116F, 0x11BE], NFKC: [0xB91B], NFKD: [0x1105, 0x116F, 0x11BE] }, +{ source: [0xB91C], NFC: [0xB91C], NFD: [0x1105, 0x116F, 0x11BF], NFKC: [0xB91C], NFKD: [0x1105, 0x116F, 0x11BF] }, +{ source: [0xB91D], NFC: [0xB91D], NFD: [0x1105, 0x116F, 0x11C0], NFKC: [0xB91D], NFKD: [0x1105, 0x116F, 0x11C0] }, +{ source: [0xB91E], NFC: [0xB91E], NFD: [0x1105, 0x116F, 0x11C1], NFKC: [0xB91E], NFKD: [0x1105, 0x116F, 0x11C1] }, +{ source: [0xB91F], NFC: [0xB91F], NFD: [0x1105, 0x116F, 0x11C2], NFKC: [0xB91F], NFKD: [0x1105, 0x116F, 0x11C2] }, +{ source: [0xB920], NFC: [0xB920], NFD: [0x1105, 0x1170], NFKC: [0xB920], NFKD: [0x1105, 0x1170] }, +{ source: [0xB921], NFC: [0xB921], NFD: [0x1105, 0x1170, 0x11A8], NFKC: [0xB921], NFKD: [0x1105, 0x1170, 0x11A8] }, +{ source: [0xB922], NFC: [0xB922], NFD: [0x1105, 0x1170, 0x11A9], NFKC: [0xB922], NFKD: [0x1105, 0x1170, 0x11A9] }, +{ source: [0xB923], NFC: [0xB923], NFD: [0x1105, 0x1170, 0x11AA], NFKC: [0xB923], NFKD: [0x1105, 0x1170, 0x11AA] }, +{ source: [0xB924], NFC: [0xB924], NFD: [0x1105, 0x1170, 0x11AB], NFKC: [0xB924], NFKD: [0x1105, 0x1170, 0x11AB] }, +{ source: [0xB925], NFC: [0xB925], NFD: [0x1105, 0x1170, 0x11AC], NFKC: [0xB925], NFKD: [0x1105, 0x1170, 0x11AC] }, +{ source: [0xB926], NFC: [0xB926], NFD: [0x1105, 0x1170, 0x11AD], NFKC: [0xB926], NFKD: [0x1105, 0x1170, 0x11AD] }, +{ source: [0xB927], NFC: [0xB927], NFD: [0x1105, 0x1170, 0x11AE], NFKC: [0xB927], NFKD: [0x1105, 0x1170, 0x11AE] }, +{ source: [0xB928], NFC: [0xB928], NFD: [0x1105, 0x1170, 0x11AF], NFKC: [0xB928], NFKD: [0x1105, 0x1170, 0x11AF] }, +{ source: [0xB929], NFC: [0xB929], NFD: [0x1105, 0x1170, 0x11B0], NFKC: [0xB929], NFKD: [0x1105, 0x1170, 0x11B0] }, +{ source: [0xB92A], NFC: [0xB92A], NFD: [0x1105, 0x1170, 0x11B1], NFKC: [0xB92A], NFKD: [0x1105, 0x1170, 0x11B1] }, +{ source: [0xB92B], NFC: [0xB92B], NFD: [0x1105, 0x1170, 0x11B2], NFKC: [0xB92B], NFKD: [0x1105, 0x1170, 0x11B2] }, +{ source: [0xB92C], NFC: [0xB92C], NFD: [0x1105, 0x1170, 0x11B3], NFKC: [0xB92C], NFKD: [0x1105, 0x1170, 0x11B3] }, +{ source: [0xB92D], NFC: [0xB92D], NFD: [0x1105, 0x1170, 0x11B4], NFKC: [0xB92D], NFKD: [0x1105, 0x1170, 0x11B4] }, +{ source: [0xB92E], NFC: [0xB92E], NFD: [0x1105, 0x1170, 0x11B5], NFKC: [0xB92E], NFKD: [0x1105, 0x1170, 0x11B5] }, +{ source: [0xB92F], NFC: [0xB92F], NFD: [0x1105, 0x1170, 0x11B6], NFKC: [0xB92F], NFKD: [0x1105, 0x1170, 0x11B6] }, +{ source: [0xB930], NFC: [0xB930], NFD: [0x1105, 0x1170, 0x11B7], NFKC: [0xB930], NFKD: [0x1105, 0x1170, 0x11B7] }, +{ source: [0xB931], NFC: [0xB931], NFD: [0x1105, 0x1170, 0x11B8], NFKC: [0xB931], NFKD: [0x1105, 0x1170, 0x11B8] }, +{ source: [0xB932], NFC: [0xB932], NFD: [0x1105, 0x1170, 0x11B9], NFKC: [0xB932], NFKD: [0x1105, 0x1170, 0x11B9] }, +{ source: [0xB933], NFC: [0xB933], NFD: [0x1105, 0x1170, 0x11BA], NFKC: [0xB933], NFKD: [0x1105, 0x1170, 0x11BA] }, +{ source: [0xB934], NFC: [0xB934], NFD: [0x1105, 0x1170, 0x11BB], NFKC: [0xB934], NFKD: [0x1105, 0x1170, 0x11BB] }, +{ source: [0xB935], NFC: [0xB935], NFD: [0x1105, 0x1170, 0x11BC], NFKC: [0xB935], NFKD: [0x1105, 0x1170, 0x11BC] }, +{ source: [0xB936], NFC: [0xB936], NFD: [0x1105, 0x1170, 0x11BD], NFKC: [0xB936], NFKD: [0x1105, 0x1170, 0x11BD] }, +{ source: [0xB937], NFC: [0xB937], NFD: [0x1105, 0x1170, 0x11BE], NFKC: [0xB937], NFKD: [0x1105, 0x1170, 0x11BE] }, +{ source: [0xB938], NFC: [0xB938], NFD: [0x1105, 0x1170, 0x11BF], NFKC: [0xB938], NFKD: [0x1105, 0x1170, 0x11BF] }, +{ source: [0xB939], NFC: [0xB939], NFD: [0x1105, 0x1170, 0x11C0], NFKC: [0xB939], NFKD: [0x1105, 0x1170, 0x11C0] }, +{ source: [0xB93A], NFC: [0xB93A], NFD: [0x1105, 0x1170, 0x11C1], NFKC: [0xB93A], NFKD: [0x1105, 0x1170, 0x11C1] }, +{ source: [0xB93B], NFC: [0xB93B], NFD: [0x1105, 0x1170, 0x11C2], NFKC: [0xB93B], NFKD: [0x1105, 0x1170, 0x11C2] }, +{ source: [0xB93C], NFC: [0xB93C], NFD: [0x1105, 0x1171], NFKC: [0xB93C], NFKD: [0x1105, 0x1171] }, +{ source: [0xB93D], NFC: [0xB93D], NFD: [0x1105, 0x1171, 0x11A8], NFKC: [0xB93D], NFKD: [0x1105, 0x1171, 0x11A8] }, +{ source: [0xB93E], NFC: [0xB93E], NFD: [0x1105, 0x1171, 0x11A9], NFKC: [0xB93E], NFKD: [0x1105, 0x1171, 0x11A9] }, +{ source: [0xB93F], NFC: [0xB93F], NFD: [0x1105, 0x1171, 0x11AA], NFKC: [0xB93F], NFKD: [0x1105, 0x1171, 0x11AA] }, +{ source: [0xB940], NFC: [0xB940], NFD: [0x1105, 0x1171, 0x11AB], NFKC: [0xB940], NFKD: [0x1105, 0x1171, 0x11AB] }, +{ source: [0xB941], NFC: [0xB941], NFD: [0x1105, 0x1171, 0x11AC], NFKC: [0xB941], NFKD: [0x1105, 0x1171, 0x11AC] }, +{ source: [0xB942], NFC: [0xB942], NFD: [0x1105, 0x1171, 0x11AD], NFKC: [0xB942], NFKD: [0x1105, 0x1171, 0x11AD] }, +{ source: [0xB943], NFC: [0xB943], NFD: [0x1105, 0x1171, 0x11AE], NFKC: [0xB943], NFKD: [0x1105, 0x1171, 0x11AE] }, +{ source: [0xB944], NFC: [0xB944], NFD: [0x1105, 0x1171, 0x11AF], NFKC: [0xB944], NFKD: [0x1105, 0x1171, 0x11AF] }, +{ source: [0xB945], NFC: [0xB945], NFD: [0x1105, 0x1171, 0x11B0], NFKC: [0xB945], NFKD: [0x1105, 0x1171, 0x11B0] }, +{ source: [0xB946], NFC: [0xB946], NFD: [0x1105, 0x1171, 0x11B1], NFKC: [0xB946], NFKD: [0x1105, 0x1171, 0x11B1] }, +{ source: [0xB947], NFC: [0xB947], NFD: [0x1105, 0x1171, 0x11B2], NFKC: [0xB947], NFKD: [0x1105, 0x1171, 0x11B2] }, +{ source: [0xB948], NFC: [0xB948], NFD: [0x1105, 0x1171, 0x11B3], NFKC: [0xB948], NFKD: [0x1105, 0x1171, 0x11B3] }, +{ source: [0xB949], NFC: [0xB949], NFD: [0x1105, 0x1171, 0x11B4], NFKC: [0xB949], NFKD: [0x1105, 0x1171, 0x11B4] }, +{ source: [0xB94A], NFC: [0xB94A], NFD: [0x1105, 0x1171, 0x11B5], NFKC: [0xB94A], NFKD: [0x1105, 0x1171, 0x11B5] }, +{ source: [0xB94B], NFC: [0xB94B], NFD: [0x1105, 0x1171, 0x11B6], NFKC: [0xB94B], NFKD: [0x1105, 0x1171, 0x11B6] }, +{ source: [0xB94C], NFC: [0xB94C], NFD: [0x1105, 0x1171, 0x11B7], NFKC: [0xB94C], NFKD: [0x1105, 0x1171, 0x11B7] }, +{ source: [0xB94D], NFC: [0xB94D], NFD: [0x1105, 0x1171, 0x11B8], NFKC: [0xB94D], NFKD: [0x1105, 0x1171, 0x11B8] }, +{ source: [0xB94E], NFC: [0xB94E], NFD: [0x1105, 0x1171, 0x11B9], NFKC: [0xB94E], NFKD: [0x1105, 0x1171, 0x11B9] }, +{ source: [0xB94F], NFC: [0xB94F], NFD: [0x1105, 0x1171, 0x11BA], NFKC: [0xB94F], NFKD: [0x1105, 0x1171, 0x11BA] }, +{ source: [0xB950], NFC: [0xB950], NFD: [0x1105, 0x1171, 0x11BB], NFKC: [0xB950], NFKD: [0x1105, 0x1171, 0x11BB] }, +{ source: [0xB951], NFC: [0xB951], NFD: [0x1105, 0x1171, 0x11BC], NFKC: [0xB951], NFKD: [0x1105, 0x1171, 0x11BC] }, +{ source: [0xB952], NFC: [0xB952], NFD: [0x1105, 0x1171, 0x11BD], NFKC: [0xB952], NFKD: [0x1105, 0x1171, 0x11BD] }, +{ source: [0xB953], NFC: [0xB953], NFD: [0x1105, 0x1171, 0x11BE], NFKC: [0xB953], NFKD: [0x1105, 0x1171, 0x11BE] }, +{ source: [0xB954], NFC: [0xB954], NFD: [0x1105, 0x1171, 0x11BF], NFKC: [0xB954], NFKD: [0x1105, 0x1171, 0x11BF] }, +{ source: [0xB955], NFC: [0xB955], NFD: [0x1105, 0x1171, 0x11C0], NFKC: [0xB955], NFKD: [0x1105, 0x1171, 0x11C0] }, +{ source: [0xB956], NFC: [0xB956], NFD: [0x1105, 0x1171, 0x11C1], NFKC: [0xB956], NFKD: [0x1105, 0x1171, 0x11C1] }, +{ source: [0xB957], NFC: [0xB957], NFD: [0x1105, 0x1171, 0x11C2], NFKC: [0xB957], NFKD: [0x1105, 0x1171, 0x11C2] }, +{ source: [0xB958], NFC: [0xB958], NFD: [0x1105, 0x1172], NFKC: [0xB958], NFKD: [0x1105, 0x1172] }, +{ source: [0xB959], NFC: [0xB959], NFD: [0x1105, 0x1172, 0x11A8], NFKC: [0xB959], NFKD: [0x1105, 0x1172, 0x11A8] }, +{ source: [0xB95A], NFC: [0xB95A], NFD: [0x1105, 0x1172, 0x11A9], NFKC: [0xB95A], NFKD: [0x1105, 0x1172, 0x11A9] }, +{ source: [0xB95B], NFC: [0xB95B], NFD: [0x1105, 0x1172, 0x11AA], NFKC: [0xB95B], NFKD: [0x1105, 0x1172, 0x11AA] }, +{ source: [0xB95C], NFC: [0xB95C], NFD: [0x1105, 0x1172, 0x11AB], NFKC: [0xB95C], NFKD: [0x1105, 0x1172, 0x11AB] }, +{ source: [0xB95D], NFC: [0xB95D], NFD: [0x1105, 0x1172, 0x11AC], NFKC: [0xB95D], NFKD: [0x1105, 0x1172, 0x11AC] }, +{ source: [0xB95E], NFC: [0xB95E], NFD: [0x1105, 0x1172, 0x11AD], NFKC: [0xB95E], NFKD: [0x1105, 0x1172, 0x11AD] }, +{ source: [0xB95F], NFC: [0xB95F], NFD: [0x1105, 0x1172, 0x11AE], NFKC: [0xB95F], NFKD: [0x1105, 0x1172, 0x11AE] }, +{ source: [0xB960], NFC: [0xB960], NFD: [0x1105, 0x1172, 0x11AF], NFKC: [0xB960], NFKD: [0x1105, 0x1172, 0x11AF] }, +{ source: [0xB961], NFC: [0xB961], NFD: [0x1105, 0x1172, 0x11B0], NFKC: [0xB961], NFKD: [0x1105, 0x1172, 0x11B0] }, +{ source: [0xB962], NFC: [0xB962], NFD: [0x1105, 0x1172, 0x11B1], NFKC: [0xB962], NFKD: [0x1105, 0x1172, 0x11B1] }, +{ source: [0xB963], NFC: [0xB963], NFD: [0x1105, 0x1172, 0x11B2], NFKC: [0xB963], NFKD: [0x1105, 0x1172, 0x11B2] }, +{ source: [0xB964], NFC: [0xB964], NFD: [0x1105, 0x1172, 0x11B3], NFKC: [0xB964], NFKD: [0x1105, 0x1172, 0x11B3] }, +{ source: [0xB965], NFC: [0xB965], NFD: [0x1105, 0x1172, 0x11B4], NFKC: [0xB965], NFKD: [0x1105, 0x1172, 0x11B4] }, +{ source: [0xB966], NFC: [0xB966], NFD: [0x1105, 0x1172, 0x11B5], NFKC: [0xB966], NFKD: [0x1105, 0x1172, 0x11B5] }, +{ source: [0xB967], NFC: [0xB967], NFD: [0x1105, 0x1172, 0x11B6], NFKC: [0xB967], NFKD: [0x1105, 0x1172, 0x11B6] }, +{ source: [0xB968], NFC: [0xB968], NFD: [0x1105, 0x1172, 0x11B7], NFKC: [0xB968], NFKD: [0x1105, 0x1172, 0x11B7] }, +{ source: [0xB969], NFC: [0xB969], NFD: [0x1105, 0x1172, 0x11B8], NFKC: [0xB969], NFKD: [0x1105, 0x1172, 0x11B8] }, +{ source: [0xB96A], NFC: [0xB96A], NFD: [0x1105, 0x1172, 0x11B9], NFKC: [0xB96A], NFKD: [0x1105, 0x1172, 0x11B9] }, +{ source: [0xB96B], NFC: [0xB96B], NFD: [0x1105, 0x1172, 0x11BA], NFKC: [0xB96B], NFKD: [0x1105, 0x1172, 0x11BA] }, +{ source: [0xB96C], NFC: [0xB96C], NFD: [0x1105, 0x1172, 0x11BB], NFKC: [0xB96C], NFKD: [0x1105, 0x1172, 0x11BB] }, +{ source: [0xB96D], NFC: [0xB96D], NFD: [0x1105, 0x1172, 0x11BC], NFKC: [0xB96D], NFKD: [0x1105, 0x1172, 0x11BC] }, +{ source: [0xB96E], NFC: [0xB96E], NFD: [0x1105, 0x1172, 0x11BD], NFKC: [0xB96E], NFKD: [0x1105, 0x1172, 0x11BD] }, +{ source: [0xB96F], NFC: [0xB96F], NFD: [0x1105, 0x1172, 0x11BE], NFKC: [0xB96F], NFKD: [0x1105, 0x1172, 0x11BE] }, +{ source: [0xB970], NFC: [0xB970], NFD: [0x1105, 0x1172, 0x11BF], NFKC: [0xB970], NFKD: [0x1105, 0x1172, 0x11BF] }, +{ source: [0xB971], NFC: [0xB971], NFD: [0x1105, 0x1172, 0x11C0], NFKC: [0xB971], NFKD: [0x1105, 0x1172, 0x11C0] }, +{ source: [0xB972], NFC: [0xB972], NFD: [0x1105, 0x1172, 0x11C1], NFKC: [0xB972], NFKD: [0x1105, 0x1172, 0x11C1] }, +{ source: [0xB973], NFC: [0xB973], NFD: [0x1105, 0x1172, 0x11C2], NFKC: [0xB973], NFKD: [0x1105, 0x1172, 0x11C2] }, +{ source: [0xB974], NFC: [0xB974], NFD: [0x1105, 0x1173], NFKC: [0xB974], NFKD: [0x1105, 0x1173] }, +{ source: [0xB975], NFC: [0xB975], NFD: [0x1105, 0x1173, 0x11A8], NFKC: [0xB975], NFKD: [0x1105, 0x1173, 0x11A8] }, +{ source: [0xB976], NFC: [0xB976], NFD: [0x1105, 0x1173, 0x11A9], NFKC: [0xB976], NFKD: [0x1105, 0x1173, 0x11A9] }, +{ source: [0xB977], NFC: [0xB977], NFD: [0x1105, 0x1173, 0x11AA], NFKC: [0xB977], NFKD: [0x1105, 0x1173, 0x11AA] }, +{ source: [0xB978], NFC: [0xB978], NFD: [0x1105, 0x1173, 0x11AB], NFKC: [0xB978], NFKD: [0x1105, 0x1173, 0x11AB] }, +{ source: [0xB979], NFC: [0xB979], NFD: [0x1105, 0x1173, 0x11AC], NFKC: [0xB979], NFKD: [0x1105, 0x1173, 0x11AC] }, +{ source: [0xB97A], NFC: [0xB97A], NFD: [0x1105, 0x1173, 0x11AD], NFKC: [0xB97A], NFKD: [0x1105, 0x1173, 0x11AD] }, +{ source: [0xB97B], NFC: [0xB97B], NFD: [0x1105, 0x1173, 0x11AE], NFKC: [0xB97B], NFKD: [0x1105, 0x1173, 0x11AE] }, +{ source: [0xB97C], NFC: [0xB97C], NFD: [0x1105, 0x1173, 0x11AF], NFKC: [0xB97C], NFKD: [0x1105, 0x1173, 0x11AF] }, +{ source: [0xB97D], NFC: [0xB97D], NFD: [0x1105, 0x1173, 0x11B0], NFKC: [0xB97D], NFKD: [0x1105, 0x1173, 0x11B0] }, +{ source: [0xB97E], NFC: [0xB97E], NFD: [0x1105, 0x1173, 0x11B1], NFKC: [0xB97E], NFKD: [0x1105, 0x1173, 0x11B1] }, +{ source: [0xB97F], NFC: [0xB97F], NFD: [0x1105, 0x1173, 0x11B2], NFKC: [0xB97F], NFKD: [0x1105, 0x1173, 0x11B2] }, +{ source: [0xB980], NFC: [0xB980], NFD: [0x1105, 0x1173, 0x11B3], NFKC: [0xB980], NFKD: [0x1105, 0x1173, 0x11B3] }, +{ source: [0xB981], NFC: [0xB981], NFD: [0x1105, 0x1173, 0x11B4], NFKC: [0xB981], NFKD: [0x1105, 0x1173, 0x11B4] }, +{ source: [0xB982], NFC: [0xB982], NFD: [0x1105, 0x1173, 0x11B5], NFKC: [0xB982], NFKD: [0x1105, 0x1173, 0x11B5] }, +{ source: [0xB983], NFC: [0xB983], NFD: [0x1105, 0x1173, 0x11B6], NFKC: [0xB983], NFKD: [0x1105, 0x1173, 0x11B6] }, +{ source: [0xB984], NFC: [0xB984], NFD: [0x1105, 0x1173, 0x11B7], NFKC: [0xB984], NFKD: [0x1105, 0x1173, 0x11B7] }, +{ source: [0xB985], NFC: [0xB985], NFD: [0x1105, 0x1173, 0x11B8], NFKC: [0xB985], NFKD: [0x1105, 0x1173, 0x11B8] }, +{ source: [0xB986], NFC: [0xB986], NFD: [0x1105, 0x1173, 0x11B9], NFKC: [0xB986], NFKD: [0x1105, 0x1173, 0x11B9] }, +{ source: [0xB987], NFC: [0xB987], NFD: [0x1105, 0x1173, 0x11BA], NFKC: [0xB987], NFKD: [0x1105, 0x1173, 0x11BA] }, +{ source: [0xB988], NFC: [0xB988], NFD: [0x1105, 0x1173, 0x11BB], NFKC: [0xB988], NFKD: [0x1105, 0x1173, 0x11BB] }, +{ source: [0xB989], NFC: [0xB989], NFD: [0x1105, 0x1173, 0x11BC], NFKC: [0xB989], NFKD: [0x1105, 0x1173, 0x11BC] }, +{ source: [0xB98A], NFC: [0xB98A], NFD: [0x1105, 0x1173, 0x11BD], NFKC: [0xB98A], NFKD: [0x1105, 0x1173, 0x11BD] }, +{ source: [0xB98B], NFC: [0xB98B], NFD: [0x1105, 0x1173, 0x11BE], NFKC: [0xB98B], NFKD: [0x1105, 0x1173, 0x11BE] }, +{ source: [0xB98C], NFC: [0xB98C], NFD: [0x1105, 0x1173, 0x11BF], NFKC: [0xB98C], NFKD: [0x1105, 0x1173, 0x11BF] }, +{ source: [0xB98D], NFC: [0xB98D], NFD: [0x1105, 0x1173, 0x11C0], NFKC: [0xB98D], NFKD: [0x1105, 0x1173, 0x11C0] }, +{ source: [0xB98E], NFC: [0xB98E], NFD: [0x1105, 0x1173, 0x11C1], NFKC: [0xB98E], NFKD: [0x1105, 0x1173, 0x11C1] }, +{ source: [0xB98F], NFC: [0xB98F], NFD: [0x1105, 0x1173, 0x11C2], NFKC: [0xB98F], NFKD: [0x1105, 0x1173, 0x11C2] }, +{ source: [0xB990], NFC: [0xB990], NFD: [0x1105, 0x1174], NFKC: [0xB990], NFKD: [0x1105, 0x1174] }, +{ source: [0xB991], NFC: [0xB991], NFD: [0x1105, 0x1174, 0x11A8], NFKC: [0xB991], NFKD: [0x1105, 0x1174, 0x11A8] }, +{ source: [0xB992], NFC: [0xB992], NFD: [0x1105, 0x1174, 0x11A9], NFKC: [0xB992], NFKD: [0x1105, 0x1174, 0x11A9] }, +{ source: [0xB993], NFC: [0xB993], NFD: [0x1105, 0x1174, 0x11AA], NFKC: [0xB993], NFKD: [0x1105, 0x1174, 0x11AA] }, +{ source: [0xB994], NFC: [0xB994], NFD: [0x1105, 0x1174, 0x11AB], NFKC: [0xB994], NFKD: [0x1105, 0x1174, 0x11AB] }, +{ source: [0xB995], NFC: [0xB995], NFD: [0x1105, 0x1174, 0x11AC], NFKC: [0xB995], NFKD: [0x1105, 0x1174, 0x11AC] }, +{ source: [0xB996], NFC: [0xB996], NFD: [0x1105, 0x1174, 0x11AD], NFKC: [0xB996], NFKD: [0x1105, 0x1174, 0x11AD] }, +{ source: [0xB997], NFC: [0xB997], NFD: [0x1105, 0x1174, 0x11AE], NFKC: [0xB997], NFKD: [0x1105, 0x1174, 0x11AE] }, +{ source: [0xB998], NFC: [0xB998], NFD: [0x1105, 0x1174, 0x11AF], NFKC: [0xB998], NFKD: [0x1105, 0x1174, 0x11AF] }, +{ source: [0xB999], NFC: [0xB999], NFD: [0x1105, 0x1174, 0x11B0], NFKC: [0xB999], NFKD: [0x1105, 0x1174, 0x11B0] }, +{ source: [0xB99A], NFC: [0xB99A], NFD: [0x1105, 0x1174, 0x11B1], NFKC: [0xB99A], NFKD: [0x1105, 0x1174, 0x11B1] }, +{ source: [0xB99B], NFC: [0xB99B], NFD: [0x1105, 0x1174, 0x11B2], NFKC: [0xB99B], NFKD: [0x1105, 0x1174, 0x11B2] }, +{ source: [0xB99C], NFC: [0xB99C], NFD: [0x1105, 0x1174, 0x11B3], NFKC: [0xB99C], NFKD: [0x1105, 0x1174, 0x11B3] }, +{ source: [0xB99D], NFC: [0xB99D], NFD: [0x1105, 0x1174, 0x11B4], NFKC: [0xB99D], NFKD: [0x1105, 0x1174, 0x11B4] }, +{ source: [0xB99E], NFC: [0xB99E], NFD: [0x1105, 0x1174, 0x11B5], NFKC: [0xB99E], NFKD: [0x1105, 0x1174, 0x11B5] }, +{ source: [0xB99F], NFC: [0xB99F], NFD: [0x1105, 0x1174, 0x11B6], NFKC: [0xB99F], NFKD: [0x1105, 0x1174, 0x11B6] }, +{ source: [0xB9A0], NFC: [0xB9A0], NFD: [0x1105, 0x1174, 0x11B7], NFKC: [0xB9A0], NFKD: [0x1105, 0x1174, 0x11B7] }, +{ source: [0xB9A1], NFC: [0xB9A1], NFD: [0x1105, 0x1174, 0x11B8], NFKC: [0xB9A1], NFKD: [0x1105, 0x1174, 0x11B8] }, +{ source: [0xB9A2], NFC: [0xB9A2], NFD: [0x1105, 0x1174, 0x11B9], NFKC: [0xB9A2], NFKD: [0x1105, 0x1174, 0x11B9] }, +{ source: [0xB9A3], NFC: [0xB9A3], NFD: [0x1105, 0x1174, 0x11BA], NFKC: [0xB9A3], NFKD: [0x1105, 0x1174, 0x11BA] }, +{ source: [0xB9A4], NFC: [0xB9A4], NFD: [0x1105, 0x1174, 0x11BB], NFKC: [0xB9A4], NFKD: [0x1105, 0x1174, 0x11BB] }, +{ source: [0xB9A5], NFC: [0xB9A5], NFD: [0x1105, 0x1174, 0x11BC], NFKC: [0xB9A5], NFKD: [0x1105, 0x1174, 0x11BC] }, +{ source: [0xB9A6], NFC: [0xB9A6], NFD: [0x1105, 0x1174, 0x11BD], NFKC: [0xB9A6], NFKD: [0x1105, 0x1174, 0x11BD] }, +{ source: [0xB9A7], NFC: [0xB9A7], NFD: [0x1105, 0x1174, 0x11BE], NFKC: [0xB9A7], NFKD: [0x1105, 0x1174, 0x11BE] }, +{ source: [0xB9A8], NFC: [0xB9A8], NFD: [0x1105, 0x1174, 0x11BF], NFKC: [0xB9A8], NFKD: [0x1105, 0x1174, 0x11BF] }, +{ source: [0xB9A9], NFC: [0xB9A9], NFD: [0x1105, 0x1174, 0x11C0], NFKC: [0xB9A9], NFKD: [0x1105, 0x1174, 0x11C0] }, +{ source: [0xB9AA], NFC: [0xB9AA], NFD: [0x1105, 0x1174, 0x11C1], NFKC: [0xB9AA], NFKD: [0x1105, 0x1174, 0x11C1] }, +{ source: [0xB9AB], NFC: [0xB9AB], NFD: [0x1105, 0x1174, 0x11C2], NFKC: [0xB9AB], NFKD: [0x1105, 0x1174, 0x11C2] }, +{ source: [0xB9AC], NFC: [0xB9AC], NFD: [0x1105, 0x1175], NFKC: [0xB9AC], NFKD: [0x1105, 0x1175] }, +{ source: [0xB9AD], NFC: [0xB9AD], NFD: [0x1105, 0x1175, 0x11A8], NFKC: [0xB9AD], NFKD: [0x1105, 0x1175, 0x11A8] }, +{ source: [0xB9AE], NFC: [0xB9AE], NFD: [0x1105, 0x1175, 0x11A9], NFKC: [0xB9AE], NFKD: [0x1105, 0x1175, 0x11A9] }, +{ source: [0xB9AF], NFC: [0xB9AF], NFD: [0x1105, 0x1175, 0x11AA], NFKC: [0xB9AF], NFKD: [0x1105, 0x1175, 0x11AA] }, +{ source: [0xB9B0], NFC: [0xB9B0], NFD: [0x1105, 0x1175, 0x11AB], NFKC: [0xB9B0], NFKD: [0x1105, 0x1175, 0x11AB] }, +{ source: [0xB9B1], NFC: [0xB9B1], NFD: [0x1105, 0x1175, 0x11AC], NFKC: [0xB9B1], NFKD: [0x1105, 0x1175, 0x11AC] }, +{ source: [0xB9B2], NFC: [0xB9B2], NFD: [0x1105, 0x1175, 0x11AD], NFKC: [0xB9B2], NFKD: [0x1105, 0x1175, 0x11AD] }, +{ source: [0xB9B3], NFC: [0xB9B3], NFD: [0x1105, 0x1175, 0x11AE], NFKC: [0xB9B3], NFKD: [0x1105, 0x1175, 0x11AE] }, +{ source: [0xB9B4], NFC: [0xB9B4], NFD: [0x1105, 0x1175, 0x11AF], NFKC: [0xB9B4], NFKD: [0x1105, 0x1175, 0x11AF] }, +{ source: [0xB9B5], NFC: [0xB9B5], NFD: [0x1105, 0x1175, 0x11B0], NFKC: [0xB9B5], NFKD: [0x1105, 0x1175, 0x11B0] }, +{ source: [0xB9B6], NFC: [0xB9B6], NFD: [0x1105, 0x1175, 0x11B1], NFKC: [0xB9B6], NFKD: [0x1105, 0x1175, 0x11B1] }, +{ source: [0xB9B7], NFC: [0xB9B7], NFD: [0x1105, 0x1175, 0x11B2], NFKC: [0xB9B7], NFKD: [0x1105, 0x1175, 0x11B2] }, +{ source: [0xB9B8], NFC: [0xB9B8], NFD: [0x1105, 0x1175, 0x11B3], NFKC: [0xB9B8], NFKD: [0x1105, 0x1175, 0x11B3] }, +{ source: [0xB9B9], NFC: [0xB9B9], NFD: [0x1105, 0x1175, 0x11B4], NFKC: [0xB9B9], NFKD: [0x1105, 0x1175, 0x11B4] }, +{ source: [0xB9BA], NFC: [0xB9BA], NFD: [0x1105, 0x1175, 0x11B5], NFKC: [0xB9BA], NFKD: [0x1105, 0x1175, 0x11B5] }, +{ source: [0xB9BB], NFC: [0xB9BB], NFD: [0x1105, 0x1175, 0x11B6], NFKC: [0xB9BB], NFKD: [0x1105, 0x1175, 0x11B6] }, +{ source: [0xB9BC], NFC: [0xB9BC], NFD: [0x1105, 0x1175, 0x11B7], NFKC: [0xB9BC], NFKD: [0x1105, 0x1175, 0x11B7] }, +{ source: [0xB9BD], NFC: [0xB9BD], NFD: [0x1105, 0x1175, 0x11B8], NFKC: [0xB9BD], NFKD: [0x1105, 0x1175, 0x11B8] }, +{ source: [0xB9BE], NFC: [0xB9BE], NFD: [0x1105, 0x1175, 0x11B9], NFKC: [0xB9BE], NFKD: [0x1105, 0x1175, 0x11B9] }, +{ source: [0xB9BF], NFC: [0xB9BF], NFD: [0x1105, 0x1175, 0x11BA], NFKC: [0xB9BF], NFKD: [0x1105, 0x1175, 0x11BA] }, +{ source: [0xB9C0], NFC: [0xB9C0], NFD: [0x1105, 0x1175, 0x11BB], NFKC: [0xB9C0], NFKD: [0x1105, 0x1175, 0x11BB] }, +{ source: [0xB9C1], NFC: [0xB9C1], NFD: [0x1105, 0x1175, 0x11BC], NFKC: [0xB9C1], NFKD: [0x1105, 0x1175, 0x11BC] }, +{ source: [0xB9C2], NFC: [0xB9C2], NFD: [0x1105, 0x1175, 0x11BD], NFKC: [0xB9C2], NFKD: [0x1105, 0x1175, 0x11BD] }, +{ source: [0xB9C3], NFC: [0xB9C3], NFD: [0x1105, 0x1175, 0x11BE], NFKC: [0xB9C3], NFKD: [0x1105, 0x1175, 0x11BE] }, +{ source: [0xB9C4], NFC: [0xB9C4], NFD: [0x1105, 0x1175, 0x11BF], NFKC: [0xB9C4], NFKD: [0x1105, 0x1175, 0x11BF] }, +{ source: [0xB9C5], NFC: [0xB9C5], NFD: [0x1105, 0x1175, 0x11C0], NFKC: [0xB9C5], NFKD: [0x1105, 0x1175, 0x11C0] }, +{ source: [0xB9C6], NFC: [0xB9C6], NFD: [0x1105, 0x1175, 0x11C1], NFKC: [0xB9C6], NFKD: [0x1105, 0x1175, 0x11C1] }, +{ source: [0xB9C7], NFC: [0xB9C7], NFD: [0x1105, 0x1175, 0x11C2], NFKC: [0xB9C7], NFKD: [0x1105, 0x1175, 0x11C2] }, +{ source: [0xB9C8], NFC: [0xB9C8], NFD: [0x1106, 0x1161], NFKC: [0xB9C8], NFKD: [0x1106, 0x1161] }, +{ source: [0xB9C9], NFC: [0xB9C9], NFD: [0x1106, 0x1161, 0x11A8], NFKC: [0xB9C9], NFKD: [0x1106, 0x1161, 0x11A8] }, +{ source: [0xB9CA], NFC: [0xB9CA], NFD: [0x1106, 0x1161, 0x11A9], NFKC: [0xB9CA], NFKD: [0x1106, 0x1161, 0x11A9] }, +{ source: [0xB9CB], NFC: [0xB9CB], NFD: [0x1106, 0x1161, 0x11AA], NFKC: [0xB9CB], NFKD: [0x1106, 0x1161, 0x11AA] }, +{ source: [0xB9CC], NFC: [0xB9CC], NFD: [0x1106, 0x1161, 0x11AB], NFKC: [0xB9CC], NFKD: [0x1106, 0x1161, 0x11AB] }, +{ source: [0xB9CD], NFC: [0xB9CD], NFD: [0x1106, 0x1161, 0x11AC], NFKC: [0xB9CD], NFKD: [0x1106, 0x1161, 0x11AC] }, +{ source: [0xB9CE], NFC: [0xB9CE], NFD: [0x1106, 0x1161, 0x11AD], NFKC: [0xB9CE], NFKD: [0x1106, 0x1161, 0x11AD] }, +{ source: [0xB9CF], NFC: [0xB9CF], NFD: [0x1106, 0x1161, 0x11AE], NFKC: [0xB9CF], NFKD: [0x1106, 0x1161, 0x11AE] }, +{ source: [0xB9D0], NFC: [0xB9D0], NFD: [0x1106, 0x1161, 0x11AF], NFKC: [0xB9D0], NFKD: [0x1106, 0x1161, 0x11AF] }, +{ source: [0xB9D1], NFC: [0xB9D1], NFD: [0x1106, 0x1161, 0x11B0], NFKC: [0xB9D1], NFKD: [0x1106, 0x1161, 0x11B0] }, +{ source: [0xB9D2], NFC: [0xB9D2], NFD: [0x1106, 0x1161, 0x11B1], NFKC: [0xB9D2], NFKD: [0x1106, 0x1161, 0x11B1] }, +{ source: [0xB9D3], NFC: [0xB9D3], NFD: [0x1106, 0x1161, 0x11B2], NFKC: [0xB9D3], NFKD: [0x1106, 0x1161, 0x11B2] }, +{ source: [0xB9D4], NFC: [0xB9D4], NFD: [0x1106, 0x1161, 0x11B3], NFKC: [0xB9D4], NFKD: [0x1106, 0x1161, 0x11B3] }, +{ source: [0xB9D5], NFC: [0xB9D5], NFD: [0x1106, 0x1161, 0x11B4], NFKC: [0xB9D5], NFKD: [0x1106, 0x1161, 0x11B4] }, +{ source: [0xB9D6], NFC: [0xB9D6], NFD: [0x1106, 0x1161, 0x11B5], NFKC: [0xB9D6], NFKD: [0x1106, 0x1161, 0x11B5] }, +{ source: [0xB9D7], NFC: [0xB9D7], NFD: [0x1106, 0x1161, 0x11B6], NFKC: [0xB9D7], NFKD: [0x1106, 0x1161, 0x11B6] }, +{ source: [0xB9D8], NFC: [0xB9D8], NFD: [0x1106, 0x1161, 0x11B7], NFKC: [0xB9D8], NFKD: [0x1106, 0x1161, 0x11B7] }, +{ source: [0xB9D9], NFC: [0xB9D9], NFD: [0x1106, 0x1161, 0x11B8], NFKC: [0xB9D9], NFKD: [0x1106, 0x1161, 0x11B8] }, +{ source: [0xB9DA], NFC: [0xB9DA], NFD: [0x1106, 0x1161, 0x11B9], NFKC: [0xB9DA], NFKD: [0x1106, 0x1161, 0x11B9] }, +{ source: [0xB9DB], NFC: [0xB9DB], NFD: [0x1106, 0x1161, 0x11BA], NFKC: [0xB9DB], NFKD: [0x1106, 0x1161, 0x11BA] }, +{ source: [0xB9DC], NFC: [0xB9DC], NFD: [0x1106, 0x1161, 0x11BB], NFKC: [0xB9DC], NFKD: [0x1106, 0x1161, 0x11BB] }, +{ source: [0xB9DD], NFC: [0xB9DD], NFD: [0x1106, 0x1161, 0x11BC], NFKC: [0xB9DD], NFKD: [0x1106, 0x1161, 0x11BC] }, +{ source: [0xB9DE], NFC: [0xB9DE], NFD: [0x1106, 0x1161, 0x11BD], NFKC: [0xB9DE], NFKD: [0x1106, 0x1161, 0x11BD] }, +{ source: [0xB9DF], NFC: [0xB9DF], NFD: [0x1106, 0x1161, 0x11BE], NFKC: [0xB9DF], NFKD: [0x1106, 0x1161, 0x11BE] }, +{ source: [0xB9E0], NFC: [0xB9E0], NFD: [0x1106, 0x1161, 0x11BF], NFKC: [0xB9E0], NFKD: [0x1106, 0x1161, 0x11BF] }, +{ source: [0xB9E1], NFC: [0xB9E1], NFD: [0x1106, 0x1161, 0x11C0], NFKC: [0xB9E1], NFKD: [0x1106, 0x1161, 0x11C0] }, +{ source: [0xB9E2], NFC: [0xB9E2], NFD: [0x1106, 0x1161, 0x11C1], NFKC: [0xB9E2], NFKD: [0x1106, 0x1161, 0x11C1] }, +{ source: [0xB9E3], NFC: [0xB9E3], NFD: [0x1106, 0x1161, 0x11C2], NFKC: [0xB9E3], NFKD: [0x1106, 0x1161, 0x11C2] }, +{ source: [0xB9E4], NFC: [0xB9E4], NFD: [0x1106, 0x1162], NFKC: [0xB9E4], NFKD: [0x1106, 0x1162] }, +{ source: [0xB9E5], NFC: [0xB9E5], NFD: [0x1106, 0x1162, 0x11A8], NFKC: [0xB9E5], NFKD: [0x1106, 0x1162, 0x11A8] }, +{ source: [0xB9E6], NFC: [0xB9E6], NFD: [0x1106, 0x1162, 0x11A9], NFKC: [0xB9E6], NFKD: [0x1106, 0x1162, 0x11A9] }, +{ source: [0xB9E7], NFC: [0xB9E7], NFD: [0x1106, 0x1162, 0x11AA], NFKC: [0xB9E7], NFKD: [0x1106, 0x1162, 0x11AA] }, +{ source: [0xB9E8], NFC: [0xB9E8], NFD: [0x1106, 0x1162, 0x11AB], NFKC: [0xB9E8], NFKD: [0x1106, 0x1162, 0x11AB] }, +{ source: [0xB9E9], NFC: [0xB9E9], NFD: [0x1106, 0x1162, 0x11AC], NFKC: [0xB9E9], NFKD: [0x1106, 0x1162, 0x11AC] }, +{ source: [0xB9EA], NFC: [0xB9EA], NFD: [0x1106, 0x1162, 0x11AD], NFKC: [0xB9EA], NFKD: [0x1106, 0x1162, 0x11AD] }, +{ source: [0xB9EB], NFC: [0xB9EB], NFD: [0x1106, 0x1162, 0x11AE], NFKC: [0xB9EB], NFKD: [0x1106, 0x1162, 0x11AE] }, +{ source: [0xB9EC], NFC: [0xB9EC], NFD: [0x1106, 0x1162, 0x11AF], NFKC: [0xB9EC], NFKD: [0x1106, 0x1162, 0x11AF] }, +{ source: [0xB9ED], NFC: [0xB9ED], NFD: [0x1106, 0x1162, 0x11B0], NFKC: [0xB9ED], NFKD: [0x1106, 0x1162, 0x11B0] }, +{ source: [0xB9EE], NFC: [0xB9EE], NFD: [0x1106, 0x1162, 0x11B1], NFKC: [0xB9EE], NFKD: [0x1106, 0x1162, 0x11B1] }, +{ source: [0xB9EF], NFC: [0xB9EF], NFD: [0x1106, 0x1162, 0x11B2], NFKC: [0xB9EF], NFKD: [0x1106, 0x1162, 0x11B2] }, +{ source: [0xB9F0], NFC: [0xB9F0], NFD: [0x1106, 0x1162, 0x11B3], NFKC: [0xB9F0], NFKD: [0x1106, 0x1162, 0x11B3] }, +{ source: [0xB9F1], NFC: [0xB9F1], NFD: [0x1106, 0x1162, 0x11B4], NFKC: [0xB9F1], NFKD: [0x1106, 0x1162, 0x11B4] }, +{ source: [0xB9F2], NFC: [0xB9F2], NFD: [0x1106, 0x1162, 0x11B5], NFKC: [0xB9F2], NFKD: [0x1106, 0x1162, 0x11B5] }, +{ source: [0xB9F3], NFC: [0xB9F3], NFD: [0x1106, 0x1162, 0x11B6], NFKC: [0xB9F3], NFKD: [0x1106, 0x1162, 0x11B6] }, +{ source: [0xB9F4], NFC: [0xB9F4], NFD: [0x1106, 0x1162, 0x11B7], NFKC: [0xB9F4], NFKD: [0x1106, 0x1162, 0x11B7] }, +{ source: [0xB9F5], NFC: [0xB9F5], NFD: [0x1106, 0x1162, 0x11B8], NFKC: [0xB9F5], NFKD: [0x1106, 0x1162, 0x11B8] }, +{ source: [0xB9F6], NFC: [0xB9F6], NFD: [0x1106, 0x1162, 0x11B9], NFKC: [0xB9F6], NFKD: [0x1106, 0x1162, 0x11B9] }, +{ source: [0xB9F7], NFC: [0xB9F7], NFD: [0x1106, 0x1162, 0x11BA], NFKC: [0xB9F7], NFKD: [0x1106, 0x1162, 0x11BA] }, +{ source: [0xB9F8], NFC: [0xB9F8], NFD: [0x1106, 0x1162, 0x11BB], NFKC: [0xB9F8], NFKD: [0x1106, 0x1162, 0x11BB] }, +{ source: [0xB9F9], NFC: [0xB9F9], NFD: [0x1106, 0x1162, 0x11BC], NFKC: [0xB9F9], NFKD: [0x1106, 0x1162, 0x11BC] }, +{ source: [0xB9FA], NFC: [0xB9FA], NFD: [0x1106, 0x1162, 0x11BD], NFKC: [0xB9FA], NFKD: [0x1106, 0x1162, 0x11BD] }, +{ source: [0xB9FB], NFC: [0xB9FB], NFD: [0x1106, 0x1162, 0x11BE], NFKC: [0xB9FB], NFKD: [0x1106, 0x1162, 0x11BE] }, +{ source: [0xB9FC], NFC: [0xB9FC], NFD: [0x1106, 0x1162, 0x11BF], NFKC: [0xB9FC], NFKD: [0x1106, 0x1162, 0x11BF] }, +{ source: [0xB9FD], NFC: [0xB9FD], NFD: [0x1106, 0x1162, 0x11C0], NFKC: [0xB9FD], NFKD: [0x1106, 0x1162, 0x11C0] }, +{ source: [0xB9FE], NFC: [0xB9FE], NFD: [0x1106, 0x1162, 0x11C1], NFKC: [0xB9FE], NFKD: [0x1106, 0x1162, 0x11C1] }, +{ source: [0xB9FF], NFC: [0xB9FF], NFD: [0x1106, 0x1162, 0x11C2], NFKC: [0xB9FF], NFKD: [0x1106, 0x1162, 0x11C2] }, +{ source: [0xBA00], NFC: [0xBA00], NFD: [0x1106, 0x1163], NFKC: [0xBA00], NFKD: [0x1106, 0x1163] }, +{ source: [0xBA01], NFC: [0xBA01], NFD: [0x1106, 0x1163, 0x11A8], NFKC: [0xBA01], NFKD: [0x1106, 0x1163, 0x11A8] }, +{ source: [0xBA02], NFC: [0xBA02], NFD: [0x1106, 0x1163, 0x11A9], NFKC: [0xBA02], NFKD: [0x1106, 0x1163, 0x11A9] }, +{ source: [0xBA03], NFC: [0xBA03], NFD: [0x1106, 0x1163, 0x11AA], NFKC: [0xBA03], NFKD: [0x1106, 0x1163, 0x11AA] }, +{ source: [0xBA04], NFC: [0xBA04], NFD: [0x1106, 0x1163, 0x11AB], NFKC: [0xBA04], NFKD: [0x1106, 0x1163, 0x11AB] }, +{ source: [0xBA05], NFC: [0xBA05], NFD: [0x1106, 0x1163, 0x11AC], NFKC: [0xBA05], NFKD: [0x1106, 0x1163, 0x11AC] }, +{ source: [0xBA06], NFC: [0xBA06], NFD: [0x1106, 0x1163, 0x11AD], NFKC: [0xBA06], NFKD: [0x1106, 0x1163, 0x11AD] }, +{ source: [0xBA07], NFC: [0xBA07], NFD: [0x1106, 0x1163, 0x11AE], NFKC: [0xBA07], NFKD: [0x1106, 0x1163, 0x11AE] }, +{ source: [0xBA08], NFC: [0xBA08], NFD: [0x1106, 0x1163, 0x11AF], NFKC: [0xBA08], NFKD: [0x1106, 0x1163, 0x11AF] }, +{ source: [0xBA09], NFC: [0xBA09], NFD: [0x1106, 0x1163, 0x11B0], NFKC: [0xBA09], NFKD: [0x1106, 0x1163, 0x11B0] }, +{ source: [0xBA0A], NFC: [0xBA0A], NFD: [0x1106, 0x1163, 0x11B1], NFKC: [0xBA0A], NFKD: [0x1106, 0x1163, 0x11B1] }, +{ source: [0xBA0B], NFC: [0xBA0B], NFD: [0x1106, 0x1163, 0x11B2], NFKC: [0xBA0B], NFKD: [0x1106, 0x1163, 0x11B2] }, +{ source: [0xBA0C], NFC: [0xBA0C], NFD: [0x1106, 0x1163, 0x11B3], NFKC: [0xBA0C], NFKD: [0x1106, 0x1163, 0x11B3] }, +{ source: [0xBA0D], NFC: [0xBA0D], NFD: [0x1106, 0x1163, 0x11B4], NFKC: [0xBA0D], NFKD: [0x1106, 0x1163, 0x11B4] }, +{ source: [0xBA0E], NFC: [0xBA0E], NFD: [0x1106, 0x1163, 0x11B5], NFKC: [0xBA0E], NFKD: [0x1106, 0x1163, 0x11B5] }, +{ source: [0xBA0F], NFC: [0xBA0F], NFD: [0x1106, 0x1163, 0x11B6], NFKC: [0xBA0F], NFKD: [0x1106, 0x1163, 0x11B6] }, +{ source: [0xBA10], NFC: [0xBA10], NFD: [0x1106, 0x1163, 0x11B7], NFKC: [0xBA10], NFKD: [0x1106, 0x1163, 0x11B7] }, +{ source: [0xBA11], NFC: [0xBA11], NFD: [0x1106, 0x1163, 0x11B8], NFKC: [0xBA11], NFKD: [0x1106, 0x1163, 0x11B8] }, +{ source: [0xBA12], NFC: [0xBA12], NFD: [0x1106, 0x1163, 0x11B9], NFKC: [0xBA12], NFKD: [0x1106, 0x1163, 0x11B9] }, +{ source: [0xBA13], NFC: [0xBA13], NFD: [0x1106, 0x1163, 0x11BA], NFKC: [0xBA13], NFKD: [0x1106, 0x1163, 0x11BA] }, +{ source: [0xBA14], NFC: [0xBA14], NFD: [0x1106, 0x1163, 0x11BB], NFKC: [0xBA14], NFKD: [0x1106, 0x1163, 0x11BB] }, +{ source: [0xBA15], NFC: [0xBA15], NFD: [0x1106, 0x1163, 0x11BC], NFKC: [0xBA15], NFKD: [0x1106, 0x1163, 0x11BC] }, +{ source: [0xBA16], NFC: [0xBA16], NFD: [0x1106, 0x1163, 0x11BD], NFKC: [0xBA16], NFKD: [0x1106, 0x1163, 0x11BD] }, +{ source: [0xBA17], NFC: [0xBA17], NFD: [0x1106, 0x1163, 0x11BE], NFKC: [0xBA17], NFKD: [0x1106, 0x1163, 0x11BE] }, +{ source: [0xBA18], NFC: [0xBA18], NFD: [0x1106, 0x1163, 0x11BF], NFKC: [0xBA18], NFKD: [0x1106, 0x1163, 0x11BF] }, +{ source: [0xBA19], NFC: [0xBA19], NFD: [0x1106, 0x1163, 0x11C0], NFKC: [0xBA19], NFKD: [0x1106, 0x1163, 0x11C0] }, +{ source: [0xBA1A], NFC: [0xBA1A], NFD: [0x1106, 0x1163, 0x11C1], NFKC: [0xBA1A], NFKD: [0x1106, 0x1163, 0x11C1] }, +{ source: [0xBA1B], NFC: [0xBA1B], NFD: [0x1106, 0x1163, 0x11C2], NFKC: [0xBA1B], NFKD: [0x1106, 0x1163, 0x11C2] }, +{ source: [0xBA1C], NFC: [0xBA1C], NFD: [0x1106, 0x1164], NFKC: [0xBA1C], NFKD: [0x1106, 0x1164] }, +{ source: [0xBA1D], NFC: [0xBA1D], NFD: [0x1106, 0x1164, 0x11A8], NFKC: [0xBA1D], NFKD: [0x1106, 0x1164, 0x11A8] }, +{ source: [0xBA1E], NFC: [0xBA1E], NFD: [0x1106, 0x1164, 0x11A9], NFKC: [0xBA1E], NFKD: [0x1106, 0x1164, 0x11A9] }, +{ source: [0xBA1F], NFC: [0xBA1F], NFD: [0x1106, 0x1164, 0x11AA], NFKC: [0xBA1F], NFKD: [0x1106, 0x1164, 0x11AA] }, +{ source: [0xBA20], NFC: [0xBA20], NFD: [0x1106, 0x1164, 0x11AB], NFKC: [0xBA20], NFKD: [0x1106, 0x1164, 0x11AB] }, +{ source: [0xBA21], NFC: [0xBA21], NFD: [0x1106, 0x1164, 0x11AC], NFKC: [0xBA21], NFKD: [0x1106, 0x1164, 0x11AC] }, +{ source: [0xBA22], NFC: [0xBA22], NFD: [0x1106, 0x1164, 0x11AD], NFKC: [0xBA22], NFKD: [0x1106, 0x1164, 0x11AD] }, +{ source: [0xBA23], NFC: [0xBA23], NFD: [0x1106, 0x1164, 0x11AE], NFKC: [0xBA23], NFKD: [0x1106, 0x1164, 0x11AE] }, +{ source: [0xBA24], NFC: [0xBA24], NFD: [0x1106, 0x1164, 0x11AF], NFKC: [0xBA24], NFKD: [0x1106, 0x1164, 0x11AF] }, +{ source: [0xBA25], NFC: [0xBA25], NFD: [0x1106, 0x1164, 0x11B0], NFKC: [0xBA25], NFKD: [0x1106, 0x1164, 0x11B0] }, +{ source: [0xBA26], NFC: [0xBA26], NFD: [0x1106, 0x1164, 0x11B1], NFKC: [0xBA26], NFKD: [0x1106, 0x1164, 0x11B1] }, +{ source: [0xBA27], NFC: [0xBA27], NFD: [0x1106, 0x1164, 0x11B2], NFKC: [0xBA27], NFKD: [0x1106, 0x1164, 0x11B2] }, +{ source: [0xBA28], NFC: [0xBA28], NFD: [0x1106, 0x1164, 0x11B3], NFKC: [0xBA28], NFKD: [0x1106, 0x1164, 0x11B3] }, +{ source: [0xBA29], NFC: [0xBA29], NFD: [0x1106, 0x1164, 0x11B4], NFKC: [0xBA29], NFKD: [0x1106, 0x1164, 0x11B4] }, +{ source: [0xBA2A], NFC: [0xBA2A], NFD: [0x1106, 0x1164, 0x11B5], NFKC: [0xBA2A], NFKD: [0x1106, 0x1164, 0x11B5] }, +{ source: [0xBA2B], NFC: [0xBA2B], NFD: [0x1106, 0x1164, 0x11B6], NFKC: [0xBA2B], NFKD: [0x1106, 0x1164, 0x11B6] }, +{ source: [0xBA2C], NFC: [0xBA2C], NFD: [0x1106, 0x1164, 0x11B7], NFKC: [0xBA2C], NFKD: [0x1106, 0x1164, 0x11B7] }, +{ source: [0xBA2D], NFC: [0xBA2D], NFD: [0x1106, 0x1164, 0x11B8], NFKC: [0xBA2D], NFKD: [0x1106, 0x1164, 0x11B8] }, +{ source: [0xBA2E], NFC: [0xBA2E], NFD: [0x1106, 0x1164, 0x11B9], NFKC: [0xBA2E], NFKD: [0x1106, 0x1164, 0x11B9] }, +{ source: [0xBA2F], NFC: [0xBA2F], NFD: [0x1106, 0x1164, 0x11BA], NFKC: [0xBA2F], NFKD: [0x1106, 0x1164, 0x11BA] }, +{ source: [0xBA30], NFC: [0xBA30], NFD: [0x1106, 0x1164, 0x11BB], NFKC: [0xBA30], NFKD: [0x1106, 0x1164, 0x11BB] }, +{ source: [0xBA31], NFC: [0xBA31], NFD: [0x1106, 0x1164, 0x11BC], NFKC: [0xBA31], NFKD: [0x1106, 0x1164, 0x11BC] }, +{ source: [0xBA32], NFC: [0xBA32], NFD: [0x1106, 0x1164, 0x11BD], NFKC: [0xBA32], NFKD: [0x1106, 0x1164, 0x11BD] }, +{ source: [0xBA33], NFC: [0xBA33], NFD: [0x1106, 0x1164, 0x11BE], NFKC: [0xBA33], NFKD: [0x1106, 0x1164, 0x11BE] }, +{ source: [0xBA34], NFC: [0xBA34], NFD: [0x1106, 0x1164, 0x11BF], NFKC: [0xBA34], NFKD: [0x1106, 0x1164, 0x11BF] }, +{ source: [0xBA35], NFC: [0xBA35], NFD: [0x1106, 0x1164, 0x11C0], NFKC: [0xBA35], NFKD: [0x1106, 0x1164, 0x11C0] }, +{ source: [0xBA36], NFC: [0xBA36], NFD: [0x1106, 0x1164, 0x11C1], NFKC: [0xBA36], NFKD: [0x1106, 0x1164, 0x11C1] }, +{ source: [0xBA37], NFC: [0xBA37], NFD: [0x1106, 0x1164, 0x11C2], NFKC: [0xBA37], NFKD: [0x1106, 0x1164, 0x11C2] }, +{ source: [0xBA38], NFC: [0xBA38], NFD: [0x1106, 0x1165], NFKC: [0xBA38], NFKD: [0x1106, 0x1165] }, +{ source: [0xBA39], NFC: [0xBA39], NFD: [0x1106, 0x1165, 0x11A8], NFKC: [0xBA39], NFKD: [0x1106, 0x1165, 0x11A8] }, +{ source: [0xBA3A], NFC: [0xBA3A], NFD: [0x1106, 0x1165, 0x11A9], NFKC: [0xBA3A], NFKD: [0x1106, 0x1165, 0x11A9] }, +{ source: [0xBA3B], NFC: [0xBA3B], NFD: [0x1106, 0x1165, 0x11AA], NFKC: [0xBA3B], NFKD: [0x1106, 0x1165, 0x11AA] }, +{ source: [0xBA3C], NFC: [0xBA3C], NFD: [0x1106, 0x1165, 0x11AB], NFKC: [0xBA3C], NFKD: [0x1106, 0x1165, 0x11AB] }, +{ source: [0xBA3D], NFC: [0xBA3D], NFD: [0x1106, 0x1165, 0x11AC], NFKC: [0xBA3D], NFKD: [0x1106, 0x1165, 0x11AC] }, +{ source: [0xBA3E], NFC: [0xBA3E], NFD: [0x1106, 0x1165, 0x11AD], NFKC: [0xBA3E], NFKD: [0x1106, 0x1165, 0x11AD] }, +{ source: [0xBA3F], NFC: [0xBA3F], NFD: [0x1106, 0x1165, 0x11AE], NFKC: [0xBA3F], NFKD: [0x1106, 0x1165, 0x11AE] }, +{ source: [0xBA40], NFC: [0xBA40], NFD: [0x1106, 0x1165, 0x11AF], NFKC: [0xBA40], NFKD: [0x1106, 0x1165, 0x11AF] }, +{ source: [0xBA41], NFC: [0xBA41], NFD: [0x1106, 0x1165, 0x11B0], NFKC: [0xBA41], NFKD: [0x1106, 0x1165, 0x11B0] }, +{ source: [0xBA42], NFC: [0xBA42], NFD: [0x1106, 0x1165, 0x11B1], NFKC: [0xBA42], NFKD: [0x1106, 0x1165, 0x11B1] }, +{ source: [0xBA43], NFC: [0xBA43], NFD: [0x1106, 0x1165, 0x11B2], NFKC: [0xBA43], NFKD: [0x1106, 0x1165, 0x11B2] }, +{ source: [0xBA44], NFC: [0xBA44], NFD: [0x1106, 0x1165, 0x11B3], NFKC: [0xBA44], NFKD: [0x1106, 0x1165, 0x11B3] }, +{ source: [0xBA45], NFC: [0xBA45], NFD: [0x1106, 0x1165, 0x11B4], NFKC: [0xBA45], NFKD: [0x1106, 0x1165, 0x11B4] }, +{ source: [0xBA46], NFC: [0xBA46], NFD: [0x1106, 0x1165, 0x11B5], NFKC: [0xBA46], NFKD: [0x1106, 0x1165, 0x11B5] }, +{ source: [0xBA47], NFC: [0xBA47], NFD: [0x1106, 0x1165, 0x11B6], NFKC: [0xBA47], NFKD: [0x1106, 0x1165, 0x11B6] }, +{ source: [0xBA48], NFC: [0xBA48], NFD: [0x1106, 0x1165, 0x11B7], NFKC: [0xBA48], NFKD: [0x1106, 0x1165, 0x11B7] }, +{ source: [0xBA49], NFC: [0xBA49], NFD: [0x1106, 0x1165, 0x11B8], NFKC: [0xBA49], NFKD: [0x1106, 0x1165, 0x11B8] }, +{ source: [0xBA4A], NFC: [0xBA4A], NFD: [0x1106, 0x1165, 0x11B9], NFKC: [0xBA4A], NFKD: [0x1106, 0x1165, 0x11B9] }, +{ source: [0xBA4B], NFC: [0xBA4B], NFD: [0x1106, 0x1165, 0x11BA], NFKC: [0xBA4B], NFKD: [0x1106, 0x1165, 0x11BA] }, +{ source: [0xBA4C], NFC: [0xBA4C], NFD: [0x1106, 0x1165, 0x11BB], NFKC: [0xBA4C], NFKD: [0x1106, 0x1165, 0x11BB] }, +{ source: [0xBA4D], NFC: [0xBA4D], NFD: [0x1106, 0x1165, 0x11BC], NFKC: [0xBA4D], NFKD: [0x1106, 0x1165, 0x11BC] }, +{ source: [0xBA4E], NFC: [0xBA4E], NFD: [0x1106, 0x1165, 0x11BD], NFKC: [0xBA4E], NFKD: [0x1106, 0x1165, 0x11BD] }, +{ source: [0xBA4F], NFC: [0xBA4F], NFD: [0x1106, 0x1165, 0x11BE], NFKC: [0xBA4F], NFKD: [0x1106, 0x1165, 0x11BE] }, +{ source: [0xBA50], NFC: [0xBA50], NFD: [0x1106, 0x1165, 0x11BF], NFKC: [0xBA50], NFKD: [0x1106, 0x1165, 0x11BF] }, +{ source: [0xBA51], NFC: [0xBA51], NFD: [0x1106, 0x1165, 0x11C0], NFKC: [0xBA51], NFKD: [0x1106, 0x1165, 0x11C0] }, +{ source: [0xBA52], NFC: [0xBA52], NFD: [0x1106, 0x1165, 0x11C1], NFKC: [0xBA52], NFKD: [0x1106, 0x1165, 0x11C1] }, +{ source: [0xBA53], NFC: [0xBA53], NFD: [0x1106, 0x1165, 0x11C2], NFKC: [0xBA53], NFKD: [0x1106, 0x1165, 0x11C2] }, +{ source: [0xBA54], NFC: [0xBA54], NFD: [0x1106, 0x1166], NFKC: [0xBA54], NFKD: [0x1106, 0x1166] }, +{ source: [0xBA55], NFC: [0xBA55], NFD: [0x1106, 0x1166, 0x11A8], NFKC: [0xBA55], NFKD: [0x1106, 0x1166, 0x11A8] }, +{ source: [0xBA56], NFC: [0xBA56], NFD: [0x1106, 0x1166, 0x11A9], NFKC: [0xBA56], NFKD: [0x1106, 0x1166, 0x11A9] }, +{ source: [0xBA57], NFC: [0xBA57], NFD: [0x1106, 0x1166, 0x11AA], NFKC: [0xBA57], NFKD: [0x1106, 0x1166, 0x11AA] }, +{ source: [0xBA58], NFC: [0xBA58], NFD: [0x1106, 0x1166, 0x11AB], NFKC: [0xBA58], NFKD: [0x1106, 0x1166, 0x11AB] }, +{ source: [0xBA59], NFC: [0xBA59], NFD: [0x1106, 0x1166, 0x11AC], NFKC: [0xBA59], NFKD: [0x1106, 0x1166, 0x11AC] }, +{ source: [0xBA5A], NFC: [0xBA5A], NFD: [0x1106, 0x1166, 0x11AD], NFKC: [0xBA5A], NFKD: [0x1106, 0x1166, 0x11AD] }, +{ source: [0xBA5B], NFC: [0xBA5B], NFD: [0x1106, 0x1166, 0x11AE], NFKC: [0xBA5B], NFKD: [0x1106, 0x1166, 0x11AE] }, +{ source: [0xBA5C], NFC: [0xBA5C], NFD: [0x1106, 0x1166, 0x11AF], NFKC: [0xBA5C], NFKD: [0x1106, 0x1166, 0x11AF] }, +{ source: [0xBA5D], NFC: [0xBA5D], NFD: [0x1106, 0x1166, 0x11B0], NFKC: [0xBA5D], NFKD: [0x1106, 0x1166, 0x11B0] }, +{ source: [0xBA5E], NFC: [0xBA5E], NFD: [0x1106, 0x1166, 0x11B1], NFKC: [0xBA5E], NFKD: [0x1106, 0x1166, 0x11B1] }, +{ source: [0xBA5F], NFC: [0xBA5F], NFD: [0x1106, 0x1166, 0x11B2], NFKC: [0xBA5F], NFKD: [0x1106, 0x1166, 0x11B2] }, +{ source: [0xBA60], NFC: [0xBA60], NFD: [0x1106, 0x1166, 0x11B3], NFKC: [0xBA60], NFKD: [0x1106, 0x1166, 0x11B3] }, +{ source: [0xBA61], NFC: [0xBA61], NFD: [0x1106, 0x1166, 0x11B4], NFKC: [0xBA61], NFKD: [0x1106, 0x1166, 0x11B4] }, +{ source: [0xBA62], NFC: [0xBA62], NFD: [0x1106, 0x1166, 0x11B5], NFKC: [0xBA62], NFKD: [0x1106, 0x1166, 0x11B5] }, +{ source: [0xBA63], NFC: [0xBA63], NFD: [0x1106, 0x1166, 0x11B6], NFKC: [0xBA63], NFKD: [0x1106, 0x1166, 0x11B6] }, +{ source: [0xBA64], NFC: [0xBA64], NFD: [0x1106, 0x1166, 0x11B7], NFKC: [0xBA64], NFKD: [0x1106, 0x1166, 0x11B7] }, +{ source: [0xBA65], NFC: [0xBA65], NFD: [0x1106, 0x1166, 0x11B8], NFKC: [0xBA65], NFKD: [0x1106, 0x1166, 0x11B8] }, +{ source: [0xBA66], NFC: [0xBA66], NFD: [0x1106, 0x1166, 0x11B9], NFKC: [0xBA66], NFKD: [0x1106, 0x1166, 0x11B9] }, +{ source: [0xBA67], NFC: [0xBA67], NFD: [0x1106, 0x1166, 0x11BA], NFKC: [0xBA67], NFKD: [0x1106, 0x1166, 0x11BA] }, +{ source: [0xBA68], NFC: [0xBA68], NFD: [0x1106, 0x1166, 0x11BB], NFKC: [0xBA68], NFKD: [0x1106, 0x1166, 0x11BB] }, +{ source: [0xBA69], NFC: [0xBA69], NFD: [0x1106, 0x1166, 0x11BC], NFKC: [0xBA69], NFKD: [0x1106, 0x1166, 0x11BC] }, +{ source: [0xBA6A], NFC: [0xBA6A], NFD: [0x1106, 0x1166, 0x11BD], NFKC: [0xBA6A], NFKD: [0x1106, 0x1166, 0x11BD] }, +{ source: [0xBA6B], NFC: [0xBA6B], NFD: [0x1106, 0x1166, 0x11BE], NFKC: [0xBA6B], NFKD: [0x1106, 0x1166, 0x11BE] }, +{ source: [0xBA6C], NFC: [0xBA6C], NFD: [0x1106, 0x1166, 0x11BF], NFKC: [0xBA6C], NFKD: [0x1106, 0x1166, 0x11BF] }, +{ source: [0xBA6D], NFC: [0xBA6D], NFD: [0x1106, 0x1166, 0x11C0], NFKC: [0xBA6D], NFKD: [0x1106, 0x1166, 0x11C0] }, +{ source: [0xBA6E], NFC: [0xBA6E], NFD: [0x1106, 0x1166, 0x11C1], NFKC: [0xBA6E], NFKD: [0x1106, 0x1166, 0x11C1] }, +{ source: [0xBA6F], NFC: [0xBA6F], NFD: [0x1106, 0x1166, 0x11C2], NFKC: [0xBA6F], NFKD: [0x1106, 0x1166, 0x11C2] }, +{ source: [0xBA70], NFC: [0xBA70], NFD: [0x1106, 0x1167], NFKC: [0xBA70], NFKD: [0x1106, 0x1167] }, +{ source: [0xBA71], NFC: [0xBA71], NFD: [0x1106, 0x1167, 0x11A8], NFKC: [0xBA71], NFKD: [0x1106, 0x1167, 0x11A8] }, +{ source: [0xBA72], NFC: [0xBA72], NFD: [0x1106, 0x1167, 0x11A9], NFKC: [0xBA72], NFKD: [0x1106, 0x1167, 0x11A9] }, +{ source: [0xBA73], NFC: [0xBA73], NFD: [0x1106, 0x1167, 0x11AA], NFKC: [0xBA73], NFKD: [0x1106, 0x1167, 0x11AA] }, +{ source: [0xBA74], NFC: [0xBA74], NFD: [0x1106, 0x1167, 0x11AB], NFKC: [0xBA74], NFKD: [0x1106, 0x1167, 0x11AB] }, +{ source: [0xBA75], NFC: [0xBA75], NFD: [0x1106, 0x1167, 0x11AC], NFKC: [0xBA75], NFKD: [0x1106, 0x1167, 0x11AC] }, +{ source: [0xBA76], NFC: [0xBA76], NFD: [0x1106, 0x1167, 0x11AD], NFKC: [0xBA76], NFKD: [0x1106, 0x1167, 0x11AD] }, +{ source: [0xBA77], NFC: [0xBA77], NFD: [0x1106, 0x1167, 0x11AE], NFKC: [0xBA77], NFKD: [0x1106, 0x1167, 0x11AE] }, +{ source: [0xBA78], NFC: [0xBA78], NFD: [0x1106, 0x1167, 0x11AF], NFKC: [0xBA78], NFKD: [0x1106, 0x1167, 0x11AF] }, +{ source: [0xBA79], NFC: [0xBA79], NFD: [0x1106, 0x1167, 0x11B0], NFKC: [0xBA79], NFKD: [0x1106, 0x1167, 0x11B0] }, +{ source: [0xBA7A], NFC: [0xBA7A], NFD: [0x1106, 0x1167, 0x11B1], NFKC: [0xBA7A], NFKD: [0x1106, 0x1167, 0x11B1] }, +{ source: [0xBA7B], NFC: [0xBA7B], NFD: [0x1106, 0x1167, 0x11B2], NFKC: [0xBA7B], NFKD: [0x1106, 0x1167, 0x11B2] }, +{ source: [0xBA7C], NFC: [0xBA7C], NFD: [0x1106, 0x1167, 0x11B3], NFKC: [0xBA7C], NFKD: [0x1106, 0x1167, 0x11B3] }, +{ source: [0xBA7D], NFC: [0xBA7D], NFD: [0x1106, 0x1167, 0x11B4], NFKC: [0xBA7D], NFKD: [0x1106, 0x1167, 0x11B4] }, +{ source: [0xBA7E], NFC: [0xBA7E], NFD: [0x1106, 0x1167, 0x11B5], NFKC: [0xBA7E], NFKD: [0x1106, 0x1167, 0x11B5] }, +{ source: [0xBA7F], NFC: [0xBA7F], NFD: [0x1106, 0x1167, 0x11B6], NFKC: [0xBA7F], NFKD: [0x1106, 0x1167, 0x11B6] }, +{ source: [0xBA80], NFC: [0xBA80], NFD: [0x1106, 0x1167, 0x11B7], NFKC: [0xBA80], NFKD: [0x1106, 0x1167, 0x11B7] }, +{ source: [0xBA81], NFC: [0xBA81], NFD: [0x1106, 0x1167, 0x11B8], NFKC: [0xBA81], NFKD: [0x1106, 0x1167, 0x11B8] }, +{ source: [0xBA82], NFC: [0xBA82], NFD: [0x1106, 0x1167, 0x11B9], NFKC: [0xBA82], NFKD: [0x1106, 0x1167, 0x11B9] }, +{ source: [0xBA83], NFC: [0xBA83], NFD: [0x1106, 0x1167, 0x11BA], NFKC: [0xBA83], NFKD: [0x1106, 0x1167, 0x11BA] }, +{ source: [0xBA84], NFC: [0xBA84], NFD: [0x1106, 0x1167, 0x11BB], NFKC: [0xBA84], NFKD: [0x1106, 0x1167, 0x11BB] }, +{ source: [0xBA85], NFC: [0xBA85], NFD: [0x1106, 0x1167, 0x11BC], NFKC: [0xBA85], NFKD: [0x1106, 0x1167, 0x11BC] }, +{ source: [0xBA86], NFC: [0xBA86], NFD: [0x1106, 0x1167, 0x11BD], NFKC: [0xBA86], NFKD: [0x1106, 0x1167, 0x11BD] }, +{ source: [0xBA87], NFC: [0xBA87], NFD: [0x1106, 0x1167, 0x11BE], NFKC: [0xBA87], NFKD: [0x1106, 0x1167, 0x11BE] }, +{ source: [0xBA88], NFC: [0xBA88], NFD: [0x1106, 0x1167, 0x11BF], NFKC: [0xBA88], NFKD: [0x1106, 0x1167, 0x11BF] }, +{ source: [0xBA89], NFC: [0xBA89], NFD: [0x1106, 0x1167, 0x11C0], NFKC: [0xBA89], NFKD: [0x1106, 0x1167, 0x11C0] }, +{ source: [0xBA8A], NFC: [0xBA8A], NFD: [0x1106, 0x1167, 0x11C1], NFKC: [0xBA8A], NFKD: [0x1106, 0x1167, 0x11C1] }, +{ source: [0xBA8B], NFC: [0xBA8B], NFD: [0x1106, 0x1167, 0x11C2], NFKC: [0xBA8B], NFKD: [0x1106, 0x1167, 0x11C2] }, +{ source: [0xBA8C], NFC: [0xBA8C], NFD: [0x1106, 0x1168], NFKC: [0xBA8C], NFKD: [0x1106, 0x1168] }, +{ source: [0xBA8D], NFC: [0xBA8D], NFD: [0x1106, 0x1168, 0x11A8], NFKC: [0xBA8D], NFKD: [0x1106, 0x1168, 0x11A8] }, +{ source: [0xBA8E], NFC: [0xBA8E], NFD: [0x1106, 0x1168, 0x11A9], NFKC: [0xBA8E], NFKD: [0x1106, 0x1168, 0x11A9] }, +{ source: [0xBA8F], NFC: [0xBA8F], NFD: [0x1106, 0x1168, 0x11AA], NFKC: [0xBA8F], NFKD: [0x1106, 0x1168, 0x11AA] }, +{ source: [0xBA90], NFC: [0xBA90], NFD: [0x1106, 0x1168, 0x11AB], NFKC: [0xBA90], NFKD: [0x1106, 0x1168, 0x11AB] }, +{ source: [0xBA91], NFC: [0xBA91], NFD: [0x1106, 0x1168, 0x11AC], NFKC: [0xBA91], NFKD: [0x1106, 0x1168, 0x11AC] }, +{ source: [0xBA92], NFC: [0xBA92], NFD: [0x1106, 0x1168, 0x11AD], NFKC: [0xBA92], NFKD: [0x1106, 0x1168, 0x11AD] }, +{ source: [0xBA93], NFC: [0xBA93], NFD: [0x1106, 0x1168, 0x11AE], NFKC: [0xBA93], NFKD: [0x1106, 0x1168, 0x11AE] }, +{ source: [0xBA94], NFC: [0xBA94], NFD: [0x1106, 0x1168, 0x11AF], NFKC: [0xBA94], NFKD: [0x1106, 0x1168, 0x11AF] }, +{ source: [0xBA95], NFC: [0xBA95], NFD: [0x1106, 0x1168, 0x11B0], NFKC: [0xBA95], NFKD: [0x1106, 0x1168, 0x11B0] }, +{ source: [0xBA96], NFC: [0xBA96], NFD: [0x1106, 0x1168, 0x11B1], NFKC: [0xBA96], NFKD: [0x1106, 0x1168, 0x11B1] }, +{ source: [0xBA97], NFC: [0xBA97], NFD: [0x1106, 0x1168, 0x11B2], NFKC: [0xBA97], NFKD: [0x1106, 0x1168, 0x11B2] }, +{ source: [0xBA98], NFC: [0xBA98], NFD: [0x1106, 0x1168, 0x11B3], NFKC: [0xBA98], NFKD: [0x1106, 0x1168, 0x11B3] }, +{ source: [0xBA99], NFC: [0xBA99], NFD: [0x1106, 0x1168, 0x11B4], NFKC: [0xBA99], NFKD: [0x1106, 0x1168, 0x11B4] }, +{ source: [0xBA9A], NFC: [0xBA9A], NFD: [0x1106, 0x1168, 0x11B5], NFKC: [0xBA9A], NFKD: [0x1106, 0x1168, 0x11B5] }, +{ source: [0xBA9B], NFC: [0xBA9B], NFD: [0x1106, 0x1168, 0x11B6], NFKC: [0xBA9B], NFKD: [0x1106, 0x1168, 0x11B6] }, +{ source: [0xBA9C], NFC: [0xBA9C], NFD: [0x1106, 0x1168, 0x11B7], NFKC: [0xBA9C], NFKD: [0x1106, 0x1168, 0x11B7] }, +{ source: [0xBA9D], NFC: [0xBA9D], NFD: [0x1106, 0x1168, 0x11B8], NFKC: [0xBA9D], NFKD: [0x1106, 0x1168, 0x11B8] }, +{ source: [0xBA9E], NFC: [0xBA9E], NFD: [0x1106, 0x1168, 0x11B9], NFKC: [0xBA9E], NFKD: [0x1106, 0x1168, 0x11B9] }, +{ source: [0xBA9F], NFC: [0xBA9F], NFD: [0x1106, 0x1168, 0x11BA], NFKC: [0xBA9F], NFKD: [0x1106, 0x1168, 0x11BA] }, +{ source: [0xBAA0], NFC: [0xBAA0], NFD: [0x1106, 0x1168, 0x11BB], NFKC: [0xBAA0], NFKD: [0x1106, 0x1168, 0x11BB] }, +{ source: [0xBAA1], NFC: [0xBAA1], NFD: [0x1106, 0x1168, 0x11BC], NFKC: [0xBAA1], NFKD: [0x1106, 0x1168, 0x11BC] }, +{ source: [0xBAA2], NFC: [0xBAA2], NFD: [0x1106, 0x1168, 0x11BD], NFKC: [0xBAA2], NFKD: [0x1106, 0x1168, 0x11BD] }, +{ source: [0xBAA3], NFC: [0xBAA3], NFD: [0x1106, 0x1168, 0x11BE], NFKC: [0xBAA3], NFKD: [0x1106, 0x1168, 0x11BE] }, +{ source: [0xBAA4], NFC: [0xBAA4], NFD: [0x1106, 0x1168, 0x11BF], NFKC: [0xBAA4], NFKD: [0x1106, 0x1168, 0x11BF] }, +{ source: [0xBAA5], NFC: [0xBAA5], NFD: [0x1106, 0x1168, 0x11C0], NFKC: [0xBAA5], NFKD: [0x1106, 0x1168, 0x11C0] }, +{ source: [0xBAA6], NFC: [0xBAA6], NFD: [0x1106, 0x1168, 0x11C1], NFKC: [0xBAA6], NFKD: [0x1106, 0x1168, 0x11C1] }, +{ source: [0xBAA7], NFC: [0xBAA7], NFD: [0x1106, 0x1168, 0x11C2], NFKC: [0xBAA7], NFKD: [0x1106, 0x1168, 0x11C2] }, +{ source: [0xBAA8], NFC: [0xBAA8], NFD: [0x1106, 0x1169], NFKC: [0xBAA8], NFKD: [0x1106, 0x1169] }, +{ source: [0xBAA9], NFC: [0xBAA9], NFD: [0x1106, 0x1169, 0x11A8], NFKC: [0xBAA9], NFKD: [0x1106, 0x1169, 0x11A8] }, +{ source: [0xBAAA], NFC: [0xBAAA], NFD: [0x1106, 0x1169, 0x11A9], NFKC: [0xBAAA], NFKD: [0x1106, 0x1169, 0x11A9] }, +{ source: [0xBAAB], NFC: [0xBAAB], NFD: [0x1106, 0x1169, 0x11AA], NFKC: [0xBAAB], NFKD: [0x1106, 0x1169, 0x11AA] }, +{ source: [0xBAAC], NFC: [0xBAAC], NFD: [0x1106, 0x1169, 0x11AB], NFKC: [0xBAAC], NFKD: [0x1106, 0x1169, 0x11AB] }, +{ source: [0xBAAD], NFC: [0xBAAD], NFD: [0x1106, 0x1169, 0x11AC], NFKC: [0xBAAD], NFKD: [0x1106, 0x1169, 0x11AC] }, +{ source: [0xBAAE], NFC: [0xBAAE], NFD: [0x1106, 0x1169, 0x11AD], NFKC: [0xBAAE], NFKD: [0x1106, 0x1169, 0x11AD] }, +{ source: [0xBAAF], NFC: [0xBAAF], NFD: [0x1106, 0x1169, 0x11AE], NFKC: [0xBAAF], NFKD: [0x1106, 0x1169, 0x11AE] }, +{ source: [0xBAB0], NFC: [0xBAB0], NFD: [0x1106, 0x1169, 0x11AF], NFKC: [0xBAB0], NFKD: [0x1106, 0x1169, 0x11AF] }, +{ source: [0xBAB1], NFC: [0xBAB1], NFD: [0x1106, 0x1169, 0x11B0], NFKC: [0xBAB1], NFKD: [0x1106, 0x1169, 0x11B0] }, +{ source: [0xBAB2], NFC: [0xBAB2], NFD: [0x1106, 0x1169, 0x11B1], NFKC: [0xBAB2], NFKD: [0x1106, 0x1169, 0x11B1] }, +{ source: [0xBAB3], NFC: [0xBAB3], NFD: [0x1106, 0x1169, 0x11B2], NFKC: [0xBAB3], NFKD: [0x1106, 0x1169, 0x11B2] }, +{ source: [0xBAB4], NFC: [0xBAB4], NFD: [0x1106, 0x1169, 0x11B3], NFKC: [0xBAB4], NFKD: [0x1106, 0x1169, 0x11B3] }, +{ source: [0xBAB5], NFC: [0xBAB5], NFD: [0x1106, 0x1169, 0x11B4], NFKC: [0xBAB5], NFKD: [0x1106, 0x1169, 0x11B4] }, +{ source: [0xBAB6], NFC: [0xBAB6], NFD: [0x1106, 0x1169, 0x11B5], NFKC: [0xBAB6], NFKD: [0x1106, 0x1169, 0x11B5] }, +{ source: [0xBAB7], NFC: [0xBAB7], NFD: [0x1106, 0x1169, 0x11B6], NFKC: [0xBAB7], NFKD: [0x1106, 0x1169, 0x11B6] }, +{ source: [0xBAB8], NFC: [0xBAB8], NFD: [0x1106, 0x1169, 0x11B7], NFKC: [0xBAB8], NFKD: [0x1106, 0x1169, 0x11B7] }, +{ source: [0xBAB9], NFC: [0xBAB9], NFD: [0x1106, 0x1169, 0x11B8], NFKC: [0xBAB9], NFKD: [0x1106, 0x1169, 0x11B8] }, +{ source: [0xBABA], NFC: [0xBABA], NFD: [0x1106, 0x1169, 0x11B9], NFKC: [0xBABA], NFKD: [0x1106, 0x1169, 0x11B9] }, +{ source: [0xBABB], NFC: [0xBABB], NFD: [0x1106, 0x1169, 0x11BA], NFKC: [0xBABB], NFKD: [0x1106, 0x1169, 0x11BA] }, +{ source: [0xBABC], NFC: [0xBABC], NFD: [0x1106, 0x1169, 0x11BB], NFKC: [0xBABC], NFKD: [0x1106, 0x1169, 0x11BB] }, +{ source: [0xBABD], NFC: [0xBABD], NFD: [0x1106, 0x1169, 0x11BC], NFKC: [0xBABD], NFKD: [0x1106, 0x1169, 0x11BC] }, +{ source: [0xBABE], NFC: [0xBABE], NFD: [0x1106, 0x1169, 0x11BD], NFKC: [0xBABE], NFKD: [0x1106, 0x1169, 0x11BD] }, +{ source: [0xBABF], NFC: [0xBABF], NFD: [0x1106, 0x1169, 0x11BE], NFKC: [0xBABF], NFKD: [0x1106, 0x1169, 0x11BE] }, +{ source: [0xBAC0], NFC: [0xBAC0], NFD: [0x1106, 0x1169, 0x11BF], NFKC: [0xBAC0], NFKD: [0x1106, 0x1169, 0x11BF] }, +{ source: [0xBAC1], NFC: [0xBAC1], NFD: [0x1106, 0x1169, 0x11C0], NFKC: [0xBAC1], NFKD: [0x1106, 0x1169, 0x11C0] }, +{ source: [0xBAC2], NFC: [0xBAC2], NFD: [0x1106, 0x1169, 0x11C1], NFKC: [0xBAC2], NFKD: [0x1106, 0x1169, 0x11C1] }, +{ source: [0xBAC3], NFC: [0xBAC3], NFD: [0x1106, 0x1169, 0x11C2], NFKC: [0xBAC3], NFKD: [0x1106, 0x1169, 0x11C2] }, +{ source: [0xBAC4], NFC: [0xBAC4], NFD: [0x1106, 0x116A], NFKC: [0xBAC4], NFKD: [0x1106, 0x116A] }, +{ source: [0xBAC5], NFC: [0xBAC5], NFD: [0x1106, 0x116A, 0x11A8], NFKC: [0xBAC5], NFKD: [0x1106, 0x116A, 0x11A8] }, +{ source: [0xBAC6], NFC: [0xBAC6], NFD: [0x1106, 0x116A, 0x11A9], NFKC: [0xBAC6], NFKD: [0x1106, 0x116A, 0x11A9] }, +{ source: [0xBAC7], NFC: [0xBAC7], NFD: [0x1106, 0x116A, 0x11AA], NFKC: [0xBAC7], NFKD: [0x1106, 0x116A, 0x11AA] }, +{ source: [0xBAC8], NFC: [0xBAC8], NFD: [0x1106, 0x116A, 0x11AB], NFKC: [0xBAC8], NFKD: [0x1106, 0x116A, 0x11AB] }, +{ source: [0xBAC9], NFC: [0xBAC9], NFD: [0x1106, 0x116A, 0x11AC], NFKC: [0xBAC9], NFKD: [0x1106, 0x116A, 0x11AC] }, +{ source: [0xBACA], NFC: [0xBACA], NFD: [0x1106, 0x116A, 0x11AD], NFKC: [0xBACA], NFKD: [0x1106, 0x116A, 0x11AD] }, +{ source: [0xBACB], NFC: [0xBACB], NFD: [0x1106, 0x116A, 0x11AE], NFKC: [0xBACB], NFKD: [0x1106, 0x116A, 0x11AE] }, +{ source: [0xBACC], NFC: [0xBACC], NFD: [0x1106, 0x116A, 0x11AF], NFKC: [0xBACC], NFKD: [0x1106, 0x116A, 0x11AF] }, +{ source: [0xBACD], NFC: [0xBACD], NFD: [0x1106, 0x116A, 0x11B0], NFKC: [0xBACD], NFKD: [0x1106, 0x116A, 0x11B0] }, +{ source: [0xBACE], NFC: [0xBACE], NFD: [0x1106, 0x116A, 0x11B1], NFKC: [0xBACE], NFKD: [0x1106, 0x116A, 0x11B1] }, +{ source: [0xBACF], NFC: [0xBACF], NFD: [0x1106, 0x116A, 0x11B2], NFKC: [0xBACF], NFKD: [0x1106, 0x116A, 0x11B2] }, +{ source: [0xBAD0], NFC: [0xBAD0], NFD: [0x1106, 0x116A, 0x11B3], NFKC: [0xBAD0], NFKD: [0x1106, 0x116A, 0x11B3] }, +{ source: [0xBAD1], NFC: [0xBAD1], NFD: [0x1106, 0x116A, 0x11B4], NFKC: [0xBAD1], NFKD: [0x1106, 0x116A, 0x11B4] }, +{ source: [0xBAD2], NFC: [0xBAD2], NFD: [0x1106, 0x116A, 0x11B5], NFKC: [0xBAD2], NFKD: [0x1106, 0x116A, 0x11B5] }, +{ source: [0xBAD3], NFC: [0xBAD3], NFD: [0x1106, 0x116A, 0x11B6], NFKC: [0xBAD3], NFKD: [0x1106, 0x116A, 0x11B6] }, +{ source: [0xBAD4], NFC: [0xBAD4], NFD: [0x1106, 0x116A, 0x11B7], NFKC: [0xBAD4], NFKD: [0x1106, 0x116A, 0x11B7] }, +{ source: [0xBAD5], NFC: [0xBAD5], NFD: [0x1106, 0x116A, 0x11B8], NFKC: [0xBAD5], NFKD: [0x1106, 0x116A, 0x11B8] }, +{ source: [0xBAD6], NFC: [0xBAD6], NFD: [0x1106, 0x116A, 0x11B9], NFKC: [0xBAD6], NFKD: [0x1106, 0x116A, 0x11B9] }, +{ source: [0xBAD7], NFC: [0xBAD7], NFD: [0x1106, 0x116A, 0x11BA], NFKC: [0xBAD7], NFKD: [0x1106, 0x116A, 0x11BA] }, +{ source: [0xBAD8], NFC: [0xBAD8], NFD: [0x1106, 0x116A, 0x11BB], NFKC: [0xBAD8], NFKD: [0x1106, 0x116A, 0x11BB] }, +{ source: [0xBAD9], NFC: [0xBAD9], NFD: [0x1106, 0x116A, 0x11BC], NFKC: [0xBAD9], NFKD: [0x1106, 0x116A, 0x11BC] }, +{ source: [0xBADA], NFC: [0xBADA], NFD: [0x1106, 0x116A, 0x11BD], NFKC: [0xBADA], NFKD: [0x1106, 0x116A, 0x11BD] }, +{ source: [0xBADB], NFC: [0xBADB], NFD: [0x1106, 0x116A, 0x11BE], NFKC: [0xBADB], NFKD: [0x1106, 0x116A, 0x11BE] }, +{ source: [0xBADC], NFC: [0xBADC], NFD: [0x1106, 0x116A, 0x11BF], NFKC: [0xBADC], NFKD: [0x1106, 0x116A, 0x11BF] }, +{ source: [0xBADD], NFC: [0xBADD], NFD: [0x1106, 0x116A, 0x11C0], NFKC: [0xBADD], NFKD: [0x1106, 0x116A, 0x11C0] }, +{ source: [0xBADE], NFC: [0xBADE], NFD: [0x1106, 0x116A, 0x11C1], NFKC: [0xBADE], NFKD: [0x1106, 0x116A, 0x11C1] }, +{ source: [0xBADF], NFC: [0xBADF], NFD: [0x1106, 0x116A, 0x11C2], NFKC: [0xBADF], NFKD: [0x1106, 0x116A, 0x11C2] }, +{ source: [0xBAE0], NFC: [0xBAE0], NFD: [0x1106, 0x116B], NFKC: [0xBAE0], NFKD: [0x1106, 0x116B] }, +{ source: [0xBAE1], NFC: [0xBAE1], NFD: [0x1106, 0x116B, 0x11A8], NFKC: [0xBAE1], NFKD: [0x1106, 0x116B, 0x11A8] }, +{ source: [0xBAE2], NFC: [0xBAE2], NFD: [0x1106, 0x116B, 0x11A9], NFKC: [0xBAE2], NFKD: [0x1106, 0x116B, 0x11A9] }, +{ source: [0xBAE3], NFC: [0xBAE3], NFD: [0x1106, 0x116B, 0x11AA], NFKC: [0xBAE3], NFKD: [0x1106, 0x116B, 0x11AA] }, +{ source: [0xBAE4], NFC: [0xBAE4], NFD: [0x1106, 0x116B, 0x11AB], NFKC: [0xBAE4], NFKD: [0x1106, 0x116B, 0x11AB] }, +{ source: [0xBAE5], NFC: [0xBAE5], NFD: [0x1106, 0x116B, 0x11AC], NFKC: [0xBAE5], NFKD: [0x1106, 0x116B, 0x11AC] }, +{ source: [0xBAE6], NFC: [0xBAE6], NFD: [0x1106, 0x116B, 0x11AD], NFKC: [0xBAE6], NFKD: [0x1106, 0x116B, 0x11AD] }, +{ source: [0xBAE7], NFC: [0xBAE7], NFD: [0x1106, 0x116B, 0x11AE], NFKC: [0xBAE7], NFKD: [0x1106, 0x116B, 0x11AE] }, +{ source: [0xBAE8], NFC: [0xBAE8], NFD: [0x1106, 0x116B, 0x11AF], NFKC: [0xBAE8], NFKD: [0x1106, 0x116B, 0x11AF] }, +{ source: [0xBAE9], NFC: [0xBAE9], NFD: [0x1106, 0x116B, 0x11B0], NFKC: [0xBAE9], NFKD: [0x1106, 0x116B, 0x11B0] }, +{ source: [0xBAEA], NFC: [0xBAEA], NFD: [0x1106, 0x116B, 0x11B1], NFKC: [0xBAEA], NFKD: [0x1106, 0x116B, 0x11B1] }, +{ source: [0xBAEB], NFC: [0xBAEB], NFD: [0x1106, 0x116B, 0x11B2], NFKC: [0xBAEB], NFKD: [0x1106, 0x116B, 0x11B2] }, +{ source: [0xBAEC], NFC: [0xBAEC], NFD: [0x1106, 0x116B, 0x11B3], NFKC: [0xBAEC], NFKD: [0x1106, 0x116B, 0x11B3] }, +{ source: [0xBAED], NFC: [0xBAED], NFD: [0x1106, 0x116B, 0x11B4], NFKC: [0xBAED], NFKD: [0x1106, 0x116B, 0x11B4] }, +{ source: [0xBAEE], NFC: [0xBAEE], NFD: [0x1106, 0x116B, 0x11B5], NFKC: [0xBAEE], NFKD: [0x1106, 0x116B, 0x11B5] }, +{ source: [0xBAEF], NFC: [0xBAEF], NFD: [0x1106, 0x116B, 0x11B6], NFKC: [0xBAEF], NFKD: [0x1106, 0x116B, 0x11B6] }, +{ source: [0xBAF0], NFC: [0xBAF0], NFD: [0x1106, 0x116B, 0x11B7], NFKC: [0xBAF0], NFKD: [0x1106, 0x116B, 0x11B7] }, +{ source: [0xBAF1], NFC: [0xBAF1], NFD: [0x1106, 0x116B, 0x11B8], NFKC: [0xBAF1], NFKD: [0x1106, 0x116B, 0x11B8] }, +{ source: [0xBAF2], NFC: [0xBAF2], NFD: [0x1106, 0x116B, 0x11B9], NFKC: [0xBAF2], NFKD: [0x1106, 0x116B, 0x11B9] }, +{ source: [0xBAF3], NFC: [0xBAF3], NFD: [0x1106, 0x116B, 0x11BA], NFKC: [0xBAF3], NFKD: [0x1106, 0x116B, 0x11BA] }, +{ source: [0xBAF4], NFC: [0xBAF4], NFD: [0x1106, 0x116B, 0x11BB], NFKC: [0xBAF4], NFKD: [0x1106, 0x116B, 0x11BB] }, +{ source: [0xBAF5], NFC: [0xBAF5], NFD: [0x1106, 0x116B, 0x11BC], NFKC: [0xBAF5], NFKD: [0x1106, 0x116B, 0x11BC] }, +{ source: [0xBAF6], NFC: [0xBAF6], NFD: [0x1106, 0x116B, 0x11BD], NFKC: [0xBAF6], NFKD: [0x1106, 0x116B, 0x11BD] }, +{ source: [0xBAF7], NFC: [0xBAF7], NFD: [0x1106, 0x116B, 0x11BE], NFKC: [0xBAF7], NFKD: [0x1106, 0x116B, 0x11BE] }, +{ source: [0xBAF8], NFC: [0xBAF8], NFD: [0x1106, 0x116B, 0x11BF], NFKC: [0xBAF8], NFKD: [0x1106, 0x116B, 0x11BF] }, +{ source: [0xBAF9], NFC: [0xBAF9], NFD: [0x1106, 0x116B, 0x11C0], NFKC: [0xBAF9], NFKD: [0x1106, 0x116B, 0x11C0] }, +{ source: [0xBAFA], NFC: [0xBAFA], NFD: [0x1106, 0x116B, 0x11C1], NFKC: [0xBAFA], NFKD: [0x1106, 0x116B, 0x11C1] }, +{ source: [0xBAFB], NFC: [0xBAFB], NFD: [0x1106, 0x116B, 0x11C2], NFKC: [0xBAFB], NFKD: [0x1106, 0x116B, 0x11C2] }, +{ source: [0xBAFC], NFC: [0xBAFC], NFD: [0x1106, 0x116C], NFKC: [0xBAFC], NFKD: [0x1106, 0x116C] }, +{ source: [0xBAFD], NFC: [0xBAFD], NFD: [0x1106, 0x116C, 0x11A8], NFKC: [0xBAFD], NFKD: [0x1106, 0x116C, 0x11A8] }, +{ source: [0xBAFE], NFC: [0xBAFE], NFD: [0x1106, 0x116C, 0x11A9], NFKC: [0xBAFE], NFKD: [0x1106, 0x116C, 0x11A9] }, +{ source: [0xBAFF], NFC: [0xBAFF], NFD: [0x1106, 0x116C, 0x11AA], NFKC: [0xBAFF], NFKD: [0x1106, 0x116C, 0x11AA] }, +{ source: [0xBB00], NFC: [0xBB00], NFD: [0x1106, 0x116C, 0x11AB], NFKC: [0xBB00], NFKD: [0x1106, 0x116C, 0x11AB] }, +{ source: [0xBB01], NFC: [0xBB01], NFD: [0x1106, 0x116C, 0x11AC], NFKC: [0xBB01], NFKD: [0x1106, 0x116C, 0x11AC] }, +{ source: [0xBB02], NFC: [0xBB02], NFD: [0x1106, 0x116C, 0x11AD], NFKC: [0xBB02], NFKD: [0x1106, 0x116C, 0x11AD] }, +{ source: [0xBB03], NFC: [0xBB03], NFD: [0x1106, 0x116C, 0x11AE], NFKC: [0xBB03], NFKD: [0x1106, 0x116C, 0x11AE] }, +{ source: [0xBB04], NFC: [0xBB04], NFD: [0x1106, 0x116C, 0x11AF], NFKC: [0xBB04], NFKD: [0x1106, 0x116C, 0x11AF] }, +{ source: [0xBB05], NFC: [0xBB05], NFD: [0x1106, 0x116C, 0x11B0], NFKC: [0xBB05], NFKD: [0x1106, 0x116C, 0x11B0] }, +{ source: [0xBB06], NFC: [0xBB06], NFD: [0x1106, 0x116C, 0x11B1], NFKC: [0xBB06], NFKD: [0x1106, 0x116C, 0x11B1] }, +{ source: [0xBB07], NFC: [0xBB07], NFD: [0x1106, 0x116C, 0x11B2], NFKC: [0xBB07], NFKD: [0x1106, 0x116C, 0x11B2] }, +{ source: [0xBB08], NFC: [0xBB08], NFD: [0x1106, 0x116C, 0x11B3], NFKC: [0xBB08], NFKD: [0x1106, 0x116C, 0x11B3] }, +{ source: [0xBB09], NFC: [0xBB09], NFD: [0x1106, 0x116C, 0x11B4], NFKC: [0xBB09], NFKD: [0x1106, 0x116C, 0x11B4] }, +{ source: [0xBB0A], NFC: [0xBB0A], NFD: [0x1106, 0x116C, 0x11B5], NFKC: [0xBB0A], NFKD: [0x1106, 0x116C, 0x11B5] }, +{ source: [0xBB0B], NFC: [0xBB0B], NFD: [0x1106, 0x116C, 0x11B6], NFKC: [0xBB0B], NFKD: [0x1106, 0x116C, 0x11B6] }, +{ source: [0xBB0C], NFC: [0xBB0C], NFD: [0x1106, 0x116C, 0x11B7], NFKC: [0xBB0C], NFKD: [0x1106, 0x116C, 0x11B7] }, +{ source: [0xBB0D], NFC: [0xBB0D], NFD: [0x1106, 0x116C, 0x11B8], NFKC: [0xBB0D], NFKD: [0x1106, 0x116C, 0x11B8] }, +{ source: [0xBB0E], NFC: [0xBB0E], NFD: [0x1106, 0x116C, 0x11B9], NFKC: [0xBB0E], NFKD: [0x1106, 0x116C, 0x11B9] }, +{ source: [0xBB0F], NFC: [0xBB0F], NFD: [0x1106, 0x116C, 0x11BA], NFKC: [0xBB0F], NFKD: [0x1106, 0x116C, 0x11BA] }, +{ source: [0xBB10], NFC: [0xBB10], NFD: [0x1106, 0x116C, 0x11BB], NFKC: [0xBB10], NFKD: [0x1106, 0x116C, 0x11BB] }, +{ source: [0xBB11], NFC: [0xBB11], NFD: [0x1106, 0x116C, 0x11BC], NFKC: [0xBB11], NFKD: [0x1106, 0x116C, 0x11BC] }, +{ source: [0xBB12], NFC: [0xBB12], NFD: [0x1106, 0x116C, 0x11BD], NFKC: [0xBB12], NFKD: [0x1106, 0x116C, 0x11BD] }, +{ source: [0xBB13], NFC: [0xBB13], NFD: [0x1106, 0x116C, 0x11BE], NFKC: [0xBB13], NFKD: [0x1106, 0x116C, 0x11BE] }, +{ source: [0xBB14], NFC: [0xBB14], NFD: [0x1106, 0x116C, 0x11BF], NFKC: [0xBB14], NFKD: [0x1106, 0x116C, 0x11BF] }, +{ source: [0xBB15], NFC: [0xBB15], NFD: [0x1106, 0x116C, 0x11C0], NFKC: [0xBB15], NFKD: [0x1106, 0x116C, 0x11C0] }, +{ source: [0xBB16], NFC: [0xBB16], NFD: [0x1106, 0x116C, 0x11C1], NFKC: [0xBB16], NFKD: [0x1106, 0x116C, 0x11C1] }, +{ source: [0xBB17], NFC: [0xBB17], NFD: [0x1106, 0x116C, 0x11C2], NFKC: [0xBB17], NFKD: [0x1106, 0x116C, 0x11C2] }, +{ source: [0xBB18], NFC: [0xBB18], NFD: [0x1106, 0x116D], NFKC: [0xBB18], NFKD: [0x1106, 0x116D] }, +{ source: [0xBB19], NFC: [0xBB19], NFD: [0x1106, 0x116D, 0x11A8], NFKC: [0xBB19], NFKD: [0x1106, 0x116D, 0x11A8] }, +{ source: [0xBB1A], NFC: [0xBB1A], NFD: [0x1106, 0x116D, 0x11A9], NFKC: [0xBB1A], NFKD: [0x1106, 0x116D, 0x11A9] }, +{ source: [0xBB1B], NFC: [0xBB1B], NFD: [0x1106, 0x116D, 0x11AA], NFKC: [0xBB1B], NFKD: [0x1106, 0x116D, 0x11AA] }, +{ source: [0xBB1C], NFC: [0xBB1C], NFD: [0x1106, 0x116D, 0x11AB], NFKC: [0xBB1C], NFKD: [0x1106, 0x116D, 0x11AB] }, +{ source: [0xBB1D], NFC: [0xBB1D], NFD: [0x1106, 0x116D, 0x11AC], NFKC: [0xBB1D], NFKD: [0x1106, 0x116D, 0x11AC] }, +{ source: [0xBB1E], NFC: [0xBB1E], NFD: [0x1106, 0x116D, 0x11AD], NFKC: [0xBB1E], NFKD: [0x1106, 0x116D, 0x11AD] }, +{ source: [0xBB1F], NFC: [0xBB1F], NFD: [0x1106, 0x116D, 0x11AE], NFKC: [0xBB1F], NFKD: [0x1106, 0x116D, 0x11AE] }, +{ source: [0xBB20], NFC: [0xBB20], NFD: [0x1106, 0x116D, 0x11AF], NFKC: [0xBB20], NFKD: [0x1106, 0x116D, 0x11AF] }, +{ source: [0xBB21], NFC: [0xBB21], NFD: [0x1106, 0x116D, 0x11B0], NFKC: [0xBB21], NFKD: [0x1106, 0x116D, 0x11B0] }, +{ source: [0xBB22], NFC: [0xBB22], NFD: [0x1106, 0x116D, 0x11B1], NFKC: [0xBB22], NFKD: [0x1106, 0x116D, 0x11B1] }, +{ source: [0xBB23], NFC: [0xBB23], NFD: [0x1106, 0x116D, 0x11B2], NFKC: [0xBB23], NFKD: [0x1106, 0x116D, 0x11B2] }, +{ source: [0xBB24], NFC: [0xBB24], NFD: [0x1106, 0x116D, 0x11B3], NFKC: [0xBB24], NFKD: [0x1106, 0x116D, 0x11B3] }, +{ source: [0xBB25], NFC: [0xBB25], NFD: [0x1106, 0x116D, 0x11B4], NFKC: [0xBB25], NFKD: [0x1106, 0x116D, 0x11B4] }, +{ source: [0xBB26], NFC: [0xBB26], NFD: [0x1106, 0x116D, 0x11B5], NFKC: [0xBB26], NFKD: [0x1106, 0x116D, 0x11B5] }, +{ source: [0xBB27], NFC: [0xBB27], NFD: [0x1106, 0x116D, 0x11B6], NFKC: [0xBB27], NFKD: [0x1106, 0x116D, 0x11B6] }, +{ source: [0xBB28], NFC: [0xBB28], NFD: [0x1106, 0x116D, 0x11B7], NFKC: [0xBB28], NFKD: [0x1106, 0x116D, 0x11B7] }, +{ source: [0xBB29], NFC: [0xBB29], NFD: [0x1106, 0x116D, 0x11B8], NFKC: [0xBB29], NFKD: [0x1106, 0x116D, 0x11B8] }, +{ source: [0xBB2A], NFC: [0xBB2A], NFD: [0x1106, 0x116D, 0x11B9], NFKC: [0xBB2A], NFKD: [0x1106, 0x116D, 0x11B9] }, +{ source: [0xBB2B], NFC: [0xBB2B], NFD: [0x1106, 0x116D, 0x11BA], NFKC: [0xBB2B], NFKD: [0x1106, 0x116D, 0x11BA] }, +{ source: [0xBB2C], NFC: [0xBB2C], NFD: [0x1106, 0x116D, 0x11BB], NFKC: [0xBB2C], NFKD: [0x1106, 0x116D, 0x11BB] }, +{ source: [0xBB2D], NFC: [0xBB2D], NFD: [0x1106, 0x116D, 0x11BC], NFKC: [0xBB2D], NFKD: [0x1106, 0x116D, 0x11BC] }, +{ source: [0xBB2E], NFC: [0xBB2E], NFD: [0x1106, 0x116D, 0x11BD], NFKC: [0xBB2E], NFKD: [0x1106, 0x116D, 0x11BD] }, +{ source: [0xBB2F], NFC: [0xBB2F], NFD: [0x1106, 0x116D, 0x11BE], NFKC: [0xBB2F], NFKD: [0x1106, 0x116D, 0x11BE] }, +{ source: [0xBB30], NFC: [0xBB30], NFD: [0x1106, 0x116D, 0x11BF], NFKC: [0xBB30], NFKD: [0x1106, 0x116D, 0x11BF] }, +{ source: [0xBB31], NFC: [0xBB31], NFD: [0x1106, 0x116D, 0x11C0], NFKC: [0xBB31], NFKD: [0x1106, 0x116D, 0x11C0] }, +{ source: [0xBB32], NFC: [0xBB32], NFD: [0x1106, 0x116D, 0x11C1], NFKC: [0xBB32], NFKD: [0x1106, 0x116D, 0x11C1] }, +{ source: [0xBB33], NFC: [0xBB33], NFD: [0x1106, 0x116D, 0x11C2], NFKC: [0xBB33], NFKD: [0x1106, 0x116D, 0x11C2] }, +{ source: [0xBB34], NFC: [0xBB34], NFD: [0x1106, 0x116E], NFKC: [0xBB34], NFKD: [0x1106, 0x116E] }, +{ source: [0xBB35], NFC: [0xBB35], NFD: [0x1106, 0x116E, 0x11A8], NFKC: [0xBB35], NFKD: [0x1106, 0x116E, 0x11A8] }, +{ source: [0xBB36], NFC: [0xBB36], NFD: [0x1106, 0x116E, 0x11A9], NFKC: [0xBB36], NFKD: [0x1106, 0x116E, 0x11A9] }, +{ source: [0xBB37], NFC: [0xBB37], NFD: [0x1106, 0x116E, 0x11AA], NFKC: [0xBB37], NFKD: [0x1106, 0x116E, 0x11AA] }, +{ source: [0xBB38], NFC: [0xBB38], NFD: [0x1106, 0x116E, 0x11AB], NFKC: [0xBB38], NFKD: [0x1106, 0x116E, 0x11AB] }, +{ source: [0xBB39], NFC: [0xBB39], NFD: [0x1106, 0x116E, 0x11AC], NFKC: [0xBB39], NFKD: [0x1106, 0x116E, 0x11AC] }, +{ source: [0xBB3A], NFC: [0xBB3A], NFD: [0x1106, 0x116E, 0x11AD], NFKC: [0xBB3A], NFKD: [0x1106, 0x116E, 0x11AD] }, +{ source: [0xBB3B], NFC: [0xBB3B], NFD: [0x1106, 0x116E, 0x11AE], NFKC: [0xBB3B], NFKD: [0x1106, 0x116E, 0x11AE] }, +{ source: [0xBB3C], NFC: [0xBB3C], NFD: [0x1106, 0x116E, 0x11AF], NFKC: [0xBB3C], NFKD: [0x1106, 0x116E, 0x11AF] }, +{ source: [0xBB3D], NFC: [0xBB3D], NFD: [0x1106, 0x116E, 0x11B0], NFKC: [0xBB3D], NFKD: [0x1106, 0x116E, 0x11B0] }, +{ source: [0xBB3E], NFC: [0xBB3E], NFD: [0x1106, 0x116E, 0x11B1], NFKC: [0xBB3E], NFKD: [0x1106, 0x116E, 0x11B1] }, +{ source: [0xBB3F], NFC: [0xBB3F], NFD: [0x1106, 0x116E, 0x11B2], NFKC: [0xBB3F], NFKD: [0x1106, 0x116E, 0x11B2] }, +{ source: [0xBB40], NFC: [0xBB40], NFD: [0x1106, 0x116E, 0x11B3], NFKC: [0xBB40], NFKD: [0x1106, 0x116E, 0x11B3] }, +{ source: [0xBB41], NFC: [0xBB41], NFD: [0x1106, 0x116E, 0x11B4], NFKC: [0xBB41], NFKD: [0x1106, 0x116E, 0x11B4] }, +{ source: [0xBB42], NFC: [0xBB42], NFD: [0x1106, 0x116E, 0x11B5], NFKC: [0xBB42], NFKD: [0x1106, 0x116E, 0x11B5] }, +{ source: [0xBB43], NFC: [0xBB43], NFD: [0x1106, 0x116E, 0x11B6], NFKC: [0xBB43], NFKD: [0x1106, 0x116E, 0x11B6] }, +{ source: [0xBB44], NFC: [0xBB44], NFD: [0x1106, 0x116E, 0x11B7], NFKC: [0xBB44], NFKD: [0x1106, 0x116E, 0x11B7] }, +{ source: [0xBB45], NFC: [0xBB45], NFD: [0x1106, 0x116E, 0x11B8], NFKC: [0xBB45], NFKD: [0x1106, 0x116E, 0x11B8] }, +{ source: [0xBB46], NFC: [0xBB46], NFD: [0x1106, 0x116E, 0x11B9], NFKC: [0xBB46], NFKD: [0x1106, 0x116E, 0x11B9] }, +{ source: [0xBB47], NFC: [0xBB47], NFD: [0x1106, 0x116E, 0x11BA], NFKC: [0xBB47], NFKD: [0x1106, 0x116E, 0x11BA] }, +{ source: [0xBB48], NFC: [0xBB48], NFD: [0x1106, 0x116E, 0x11BB], NFKC: [0xBB48], NFKD: [0x1106, 0x116E, 0x11BB] }, +{ source: [0xBB49], NFC: [0xBB49], NFD: [0x1106, 0x116E, 0x11BC], NFKC: [0xBB49], NFKD: [0x1106, 0x116E, 0x11BC] }, +{ source: [0xBB4A], NFC: [0xBB4A], NFD: [0x1106, 0x116E, 0x11BD], NFKC: [0xBB4A], NFKD: [0x1106, 0x116E, 0x11BD] }, +{ source: [0xBB4B], NFC: [0xBB4B], NFD: [0x1106, 0x116E, 0x11BE], NFKC: [0xBB4B], NFKD: [0x1106, 0x116E, 0x11BE] }, +{ source: [0xBB4C], NFC: [0xBB4C], NFD: [0x1106, 0x116E, 0x11BF], NFKC: [0xBB4C], NFKD: [0x1106, 0x116E, 0x11BF] }, +{ source: [0xBB4D], NFC: [0xBB4D], NFD: [0x1106, 0x116E, 0x11C0], NFKC: [0xBB4D], NFKD: [0x1106, 0x116E, 0x11C0] }, +{ source: [0xBB4E], NFC: [0xBB4E], NFD: [0x1106, 0x116E, 0x11C1], NFKC: [0xBB4E], NFKD: [0x1106, 0x116E, 0x11C1] }, +{ source: [0xBB4F], NFC: [0xBB4F], NFD: [0x1106, 0x116E, 0x11C2], NFKC: [0xBB4F], NFKD: [0x1106, 0x116E, 0x11C2] }, +{ source: [0xBB50], NFC: [0xBB50], NFD: [0x1106, 0x116F], NFKC: [0xBB50], NFKD: [0x1106, 0x116F] }, +{ source: [0xBB51], NFC: [0xBB51], NFD: [0x1106, 0x116F, 0x11A8], NFKC: [0xBB51], NFKD: [0x1106, 0x116F, 0x11A8] }, +{ source: [0xBB52], NFC: [0xBB52], NFD: [0x1106, 0x116F, 0x11A9], NFKC: [0xBB52], NFKD: [0x1106, 0x116F, 0x11A9] }, +{ source: [0xBB53], NFC: [0xBB53], NFD: [0x1106, 0x116F, 0x11AA], NFKC: [0xBB53], NFKD: [0x1106, 0x116F, 0x11AA] }, +{ source: [0xBB54], NFC: [0xBB54], NFD: [0x1106, 0x116F, 0x11AB], NFKC: [0xBB54], NFKD: [0x1106, 0x116F, 0x11AB] }, +{ source: [0xBB55], NFC: [0xBB55], NFD: [0x1106, 0x116F, 0x11AC], NFKC: [0xBB55], NFKD: [0x1106, 0x116F, 0x11AC] }, +{ source: [0xBB56], NFC: [0xBB56], NFD: [0x1106, 0x116F, 0x11AD], NFKC: [0xBB56], NFKD: [0x1106, 0x116F, 0x11AD] }, +{ source: [0xBB57], NFC: [0xBB57], NFD: [0x1106, 0x116F, 0x11AE], NFKC: [0xBB57], NFKD: [0x1106, 0x116F, 0x11AE] }, +{ source: [0xBB58], NFC: [0xBB58], NFD: [0x1106, 0x116F, 0x11AF], NFKC: [0xBB58], NFKD: [0x1106, 0x116F, 0x11AF] }, +{ source: [0xBB59], NFC: [0xBB59], NFD: [0x1106, 0x116F, 0x11B0], NFKC: [0xBB59], NFKD: [0x1106, 0x116F, 0x11B0] }, +{ source: [0xBB5A], NFC: [0xBB5A], NFD: [0x1106, 0x116F, 0x11B1], NFKC: [0xBB5A], NFKD: [0x1106, 0x116F, 0x11B1] }, +{ source: [0xBB5B], NFC: [0xBB5B], NFD: [0x1106, 0x116F, 0x11B2], NFKC: [0xBB5B], NFKD: [0x1106, 0x116F, 0x11B2] }, +{ source: [0xBB5C], NFC: [0xBB5C], NFD: [0x1106, 0x116F, 0x11B3], NFKC: [0xBB5C], NFKD: [0x1106, 0x116F, 0x11B3] }, +{ source: [0xBB5D], NFC: [0xBB5D], NFD: [0x1106, 0x116F, 0x11B4], NFKC: [0xBB5D], NFKD: [0x1106, 0x116F, 0x11B4] }, +{ source: [0xBB5E], NFC: [0xBB5E], NFD: [0x1106, 0x116F, 0x11B5], NFKC: [0xBB5E], NFKD: [0x1106, 0x116F, 0x11B5] }, +{ source: [0xBB5F], NFC: [0xBB5F], NFD: [0x1106, 0x116F, 0x11B6], NFKC: [0xBB5F], NFKD: [0x1106, 0x116F, 0x11B6] }, +{ source: [0xBB60], NFC: [0xBB60], NFD: [0x1106, 0x116F, 0x11B7], NFKC: [0xBB60], NFKD: [0x1106, 0x116F, 0x11B7] }, +{ source: [0xBB61], NFC: [0xBB61], NFD: [0x1106, 0x116F, 0x11B8], NFKC: [0xBB61], NFKD: [0x1106, 0x116F, 0x11B8] }, +{ source: [0xBB62], NFC: [0xBB62], NFD: [0x1106, 0x116F, 0x11B9], NFKC: [0xBB62], NFKD: [0x1106, 0x116F, 0x11B9] }, +{ source: [0xBB63], NFC: [0xBB63], NFD: [0x1106, 0x116F, 0x11BA], NFKC: [0xBB63], NFKD: [0x1106, 0x116F, 0x11BA] }, +{ source: [0xBB64], NFC: [0xBB64], NFD: [0x1106, 0x116F, 0x11BB], NFKC: [0xBB64], NFKD: [0x1106, 0x116F, 0x11BB] }, +{ source: [0xBB65], NFC: [0xBB65], NFD: [0x1106, 0x116F, 0x11BC], NFKC: [0xBB65], NFKD: [0x1106, 0x116F, 0x11BC] }, +{ source: [0xBB66], NFC: [0xBB66], NFD: [0x1106, 0x116F, 0x11BD], NFKC: [0xBB66], NFKD: [0x1106, 0x116F, 0x11BD] }, +{ source: [0xBB67], NFC: [0xBB67], NFD: [0x1106, 0x116F, 0x11BE], NFKC: [0xBB67], NFKD: [0x1106, 0x116F, 0x11BE] }, +{ source: [0xBB68], NFC: [0xBB68], NFD: [0x1106, 0x116F, 0x11BF], NFKC: [0xBB68], NFKD: [0x1106, 0x116F, 0x11BF] }, +{ source: [0xBB69], NFC: [0xBB69], NFD: [0x1106, 0x116F, 0x11C0], NFKC: [0xBB69], NFKD: [0x1106, 0x116F, 0x11C0] }, +{ source: [0xBB6A], NFC: [0xBB6A], NFD: [0x1106, 0x116F, 0x11C1], NFKC: [0xBB6A], NFKD: [0x1106, 0x116F, 0x11C1] }, +{ source: [0xBB6B], NFC: [0xBB6B], NFD: [0x1106, 0x116F, 0x11C2], NFKC: [0xBB6B], NFKD: [0x1106, 0x116F, 0x11C2] }, +{ source: [0xBB6C], NFC: [0xBB6C], NFD: [0x1106, 0x1170], NFKC: [0xBB6C], NFKD: [0x1106, 0x1170] }, +{ source: [0xBB6D], NFC: [0xBB6D], NFD: [0x1106, 0x1170, 0x11A8], NFKC: [0xBB6D], NFKD: [0x1106, 0x1170, 0x11A8] }, +{ source: [0xBB6E], NFC: [0xBB6E], NFD: [0x1106, 0x1170, 0x11A9], NFKC: [0xBB6E], NFKD: [0x1106, 0x1170, 0x11A9] }, +{ source: [0xBB6F], NFC: [0xBB6F], NFD: [0x1106, 0x1170, 0x11AA], NFKC: [0xBB6F], NFKD: [0x1106, 0x1170, 0x11AA] }, +{ source: [0xBB70], NFC: [0xBB70], NFD: [0x1106, 0x1170, 0x11AB], NFKC: [0xBB70], NFKD: [0x1106, 0x1170, 0x11AB] }, +{ source: [0xBB71], NFC: [0xBB71], NFD: [0x1106, 0x1170, 0x11AC], NFKC: [0xBB71], NFKD: [0x1106, 0x1170, 0x11AC] }, +{ source: [0xBB72], NFC: [0xBB72], NFD: [0x1106, 0x1170, 0x11AD], NFKC: [0xBB72], NFKD: [0x1106, 0x1170, 0x11AD] }, +{ source: [0xBB73], NFC: [0xBB73], NFD: [0x1106, 0x1170, 0x11AE], NFKC: [0xBB73], NFKD: [0x1106, 0x1170, 0x11AE] }, +{ source: [0xBB74], NFC: [0xBB74], NFD: [0x1106, 0x1170, 0x11AF], NFKC: [0xBB74], NFKD: [0x1106, 0x1170, 0x11AF] }, +{ source: [0xBB75], NFC: [0xBB75], NFD: [0x1106, 0x1170, 0x11B0], NFKC: [0xBB75], NFKD: [0x1106, 0x1170, 0x11B0] }, +{ source: [0xBB76], NFC: [0xBB76], NFD: [0x1106, 0x1170, 0x11B1], NFKC: [0xBB76], NFKD: [0x1106, 0x1170, 0x11B1] }, +{ source: [0xBB77], NFC: [0xBB77], NFD: [0x1106, 0x1170, 0x11B2], NFKC: [0xBB77], NFKD: [0x1106, 0x1170, 0x11B2] }, +{ source: [0xBB78], NFC: [0xBB78], NFD: [0x1106, 0x1170, 0x11B3], NFKC: [0xBB78], NFKD: [0x1106, 0x1170, 0x11B3] }, +{ source: [0xBB79], NFC: [0xBB79], NFD: [0x1106, 0x1170, 0x11B4], NFKC: [0xBB79], NFKD: [0x1106, 0x1170, 0x11B4] }, +{ source: [0xBB7A], NFC: [0xBB7A], NFD: [0x1106, 0x1170, 0x11B5], NFKC: [0xBB7A], NFKD: [0x1106, 0x1170, 0x11B5] }, +{ source: [0xBB7B], NFC: [0xBB7B], NFD: [0x1106, 0x1170, 0x11B6], NFKC: [0xBB7B], NFKD: [0x1106, 0x1170, 0x11B6] }, +{ source: [0xBB7C], NFC: [0xBB7C], NFD: [0x1106, 0x1170, 0x11B7], NFKC: [0xBB7C], NFKD: [0x1106, 0x1170, 0x11B7] }, +{ source: [0xBB7D], NFC: [0xBB7D], NFD: [0x1106, 0x1170, 0x11B8], NFKC: [0xBB7D], NFKD: [0x1106, 0x1170, 0x11B8] }, +{ source: [0xBB7E], NFC: [0xBB7E], NFD: [0x1106, 0x1170, 0x11B9], NFKC: [0xBB7E], NFKD: [0x1106, 0x1170, 0x11B9] }, +{ source: [0xBB7F], NFC: [0xBB7F], NFD: [0x1106, 0x1170, 0x11BA], NFKC: [0xBB7F], NFKD: [0x1106, 0x1170, 0x11BA] }, +{ source: [0xBB80], NFC: [0xBB80], NFD: [0x1106, 0x1170, 0x11BB], NFKC: [0xBB80], NFKD: [0x1106, 0x1170, 0x11BB] }, +{ source: [0xBB81], NFC: [0xBB81], NFD: [0x1106, 0x1170, 0x11BC], NFKC: [0xBB81], NFKD: [0x1106, 0x1170, 0x11BC] }, +{ source: [0xBB82], NFC: [0xBB82], NFD: [0x1106, 0x1170, 0x11BD], NFKC: [0xBB82], NFKD: [0x1106, 0x1170, 0x11BD] }, +{ source: [0xBB83], NFC: [0xBB83], NFD: [0x1106, 0x1170, 0x11BE], NFKC: [0xBB83], NFKD: [0x1106, 0x1170, 0x11BE] }, +{ source: [0xBB84], NFC: [0xBB84], NFD: [0x1106, 0x1170, 0x11BF], NFKC: [0xBB84], NFKD: [0x1106, 0x1170, 0x11BF] }, +{ source: [0xBB85], NFC: [0xBB85], NFD: [0x1106, 0x1170, 0x11C0], NFKC: [0xBB85], NFKD: [0x1106, 0x1170, 0x11C0] }, +{ source: [0xBB86], NFC: [0xBB86], NFD: [0x1106, 0x1170, 0x11C1], NFKC: [0xBB86], NFKD: [0x1106, 0x1170, 0x11C1] }, +{ source: [0xBB87], NFC: [0xBB87], NFD: [0x1106, 0x1170, 0x11C2], NFKC: [0xBB87], NFKD: [0x1106, 0x1170, 0x11C2] }, +{ source: [0xBB88], NFC: [0xBB88], NFD: [0x1106, 0x1171], NFKC: [0xBB88], NFKD: [0x1106, 0x1171] }, +{ source: [0xBB89], NFC: [0xBB89], NFD: [0x1106, 0x1171, 0x11A8], NFKC: [0xBB89], NFKD: [0x1106, 0x1171, 0x11A8] }, +{ source: [0xBB8A], NFC: [0xBB8A], NFD: [0x1106, 0x1171, 0x11A9], NFKC: [0xBB8A], NFKD: [0x1106, 0x1171, 0x11A9] }, +{ source: [0xBB8B], NFC: [0xBB8B], NFD: [0x1106, 0x1171, 0x11AA], NFKC: [0xBB8B], NFKD: [0x1106, 0x1171, 0x11AA] }, +{ source: [0xBB8C], NFC: [0xBB8C], NFD: [0x1106, 0x1171, 0x11AB], NFKC: [0xBB8C], NFKD: [0x1106, 0x1171, 0x11AB] }, +{ source: [0xBB8D], NFC: [0xBB8D], NFD: [0x1106, 0x1171, 0x11AC], NFKC: [0xBB8D], NFKD: [0x1106, 0x1171, 0x11AC] }, +{ source: [0xBB8E], NFC: [0xBB8E], NFD: [0x1106, 0x1171, 0x11AD], NFKC: [0xBB8E], NFKD: [0x1106, 0x1171, 0x11AD] }, +{ source: [0xBB8F], NFC: [0xBB8F], NFD: [0x1106, 0x1171, 0x11AE], NFKC: [0xBB8F], NFKD: [0x1106, 0x1171, 0x11AE] }, +{ source: [0xBB90], NFC: [0xBB90], NFD: [0x1106, 0x1171, 0x11AF], NFKC: [0xBB90], NFKD: [0x1106, 0x1171, 0x11AF] }, +{ source: [0xBB91], NFC: [0xBB91], NFD: [0x1106, 0x1171, 0x11B0], NFKC: [0xBB91], NFKD: [0x1106, 0x1171, 0x11B0] }, +{ source: [0xBB92], NFC: [0xBB92], NFD: [0x1106, 0x1171, 0x11B1], NFKC: [0xBB92], NFKD: [0x1106, 0x1171, 0x11B1] }, +{ source: [0xBB93], NFC: [0xBB93], NFD: [0x1106, 0x1171, 0x11B2], NFKC: [0xBB93], NFKD: [0x1106, 0x1171, 0x11B2] }, +{ source: [0xBB94], NFC: [0xBB94], NFD: [0x1106, 0x1171, 0x11B3], NFKC: [0xBB94], NFKD: [0x1106, 0x1171, 0x11B3] }, +{ source: [0xBB95], NFC: [0xBB95], NFD: [0x1106, 0x1171, 0x11B4], NFKC: [0xBB95], NFKD: [0x1106, 0x1171, 0x11B4] }, +{ source: [0xBB96], NFC: [0xBB96], NFD: [0x1106, 0x1171, 0x11B5], NFKC: [0xBB96], NFKD: [0x1106, 0x1171, 0x11B5] }, +{ source: [0xBB97], NFC: [0xBB97], NFD: [0x1106, 0x1171, 0x11B6], NFKC: [0xBB97], NFKD: [0x1106, 0x1171, 0x11B6] }, +{ source: [0xBB98], NFC: [0xBB98], NFD: [0x1106, 0x1171, 0x11B7], NFKC: [0xBB98], NFKD: [0x1106, 0x1171, 0x11B7] }, +{ source: [0xBB99], NFC: [0xBB99], NFD: [0x1106, 0x1171, 0x11B8], NFKC: [0xBB99], NFKD: [0x1106, 0x1171, 0x11B8] }, +{ source: [0xBB9A], NFC: [0xBB9A], NFD: [0x1106, 0x1171, 0x11B9], NFKC: [0xBB9A], NFKD: [0x1106, 0x1171, 0x11B9] }, +{ source: [0xBB9B], NFC: [0xBB9B], NFD: [0x1106, 0x1171, 0x11BA], NFKC: [0xBB9B], NFKD: [0x1106, 0x1171, 0x11BA] }, +{ source: [0xBB9C], NFC: [0xBB9C], NFD: [0x1106, 0x1171, 0x11BB], NFKC: [0xBB9C], NFKD: [0x1106, 0x1171, 0x11BB] }, +{ source: [0xBB9D], NFC: [0xBB9D], NFD: [0x1106, 0x1171, 0x11BC], NFKC: [0xBB9D], NFKD: [0x1106, 0x1171, 0x11BC] }, +{ source: [0xBB9E], NFC: [0xBB9E], NFD: [0x1106, 0x1171, 0x11BD], NFKC: [0xBB9E], NFKD: [0x1106, 0x1171, 0x11BD] }, +{ source: [0xBB9F], NFC: [0xBB9F], NFD: [0x1106, 0x1171, 0x11BE], NFKC: [0xBB9F], NFKD: [0x1106, 0x1171, 0x11BE] }, +{ source: [0xBBA0], NFC: [0xBBA0], NFD: [0x1106, 0x1171, 0x11BF], NFKC: [0xBBA0], NFKD: [0x1106, 0x1171, 0x11BF] }, +{ source: [0xBBA1], NFC: [0xBBA1], NFD: [0x1106, 0x1171, 0x11C0], NFKC: [0xBBA1], NFKD: [0x1106, 0x1171, 0x11C0] }, +{ source: [0xBBA2], NFC: [0xBBA2], NFD: [0x1106, 0x1171, 0x11C1], NFKC: [0xBBA2], NFKD: [0x1106, 0x1171, 0x11C1] }, +{ source: [0xBBA3], NFC: [0xBBA3], NFD: [0x1106, 0x1171, 0x11C2], NFKC: [0xBBA3], NFKD: [0x1106, 0x1171, 0x11C2] }, +{ source: [0xBBA4], NFC: [0xBBA4], NFD: [0x1106, 0x1172], NFKC: [0xBBA4], NFKD: [0x1106, 0x1172] }, +{ source: [0xBBA5], NFC: [0xBBA5], NFD: [0x1106, 0x1172, 0x11A8], NFKC: [0xBBA5], NFKD: [0x1106, 0x1172, 0x11A8] }, +{ source: [0xBBA6], NFC: [0xBBA6], NFD: [0x1106, 0x1172, 0x11A9], NFKC: [0xBBA6], NFKD: [0x1106, 0x1172, 0x11A9] }, +{ source: [0xBBA7], NFC: [0xBBA7], NFD: [0x1106, 0x1172, 0x11AA], NFKC: [0xBBA7], NFKD: [0x1106, 0x1172, 0x11AA] }, +{ source: [0xBBA8], NFC: [0xBBA8], NFD: [0x1106, 0x1172, 0x11AB], NFKC: [0xBBA8], NFKD: [0x1106, 0x1172, 0x11AB] }, +{ source: [0xBBA9], NFC: [0xBBA9], NFD: [0x1106, 0x1172, 0x11AC], NFKC: [0xBBA9], NFKD: [0x1106, 0x1172, 0x11AC] }, +{ source: [0xBBAA], NFC: [0xBBAA], NFD: [0x1106, 0x1172, 0x11AD], NFKC: [0xBBAA], NFKD: [0x1106, 0x1172, 0x11AD] }, +{ source: [0xBBAB], NFC: [0xBBAB], NFD: [0x1106, 0x1172, 0x11AE], NFKC: [0xBBAB], NFKD: [0x1106, 0x1172, 0x11AE] }, +{ source: [0xBBAC], NFC: [0xBBAC], NFD: [0x1106, 0x1172, 0x11AF], NFKC: [0xBBAC], NFKD: [0x1106, 0x1172, 0x11AF] }, +{ source: [0xBBAD], NFC: [0xBBAD], NFD: [0x1106, 0x1172, 0x11B0], NFKC: [0xBBAD], NFKD: [0x1106, 0x1172, 0x11B0] }, +{ source: [0xBBAE], NFC: [0xBBAE], NFD: [0x1106, 0x1172, 0x11B1], NFKC: [0xBBAE], NFKD: [0x1106, 0x1172, 0x11B1] }, +{ source: [0xBBAF], NFC: [0xBBAF], NFD: [0x1106, 0x1172, 0x11B2], NFKC: [0xBBAF], NFKD: [0x1106, 0x1172, 0x11B2] }, +{ source: [0xBBB0], NFC: [0xBBB0], NFD: [0x1106, 0x1172, 0x11B3], NFKC: [0xBBB0], NFKD: [0x1106, 0x1172, 0x11B3] }, +{ source: [0xBBB1], NFC: [0xBBB1], NFD: [0x1106, 0x1172, 0x11B4], NFKC: [0xBBB1], NFKD: [0x1106, 0x1172, 0x11B4] }, +{ source: [0xBBB2], NFC: [0xBBB2], NFD: [0x1106, 0x1172, 0x11B5], NFKC: [0xBBB2], NFKD: [0x1106, 0x1172, 0x11B5] }, +{ source: [0xBBB3], NFC: [0xBBB3], NFD: [0x1106, 0x1172, 0x11B6], NFKC: [0xBBB3], NFKD: [0x1106, 0x1172, 0x11B6] }, +{ source: [0xBBB4], NFC: [0xBBB4], NFD: [0x1106, 0x1172, 0x11B7], NFKC: [0xBBB4], NFKD: [0x1106, 0x1172, 0x11B7] }, +{ source: [0xBBB5], NFC: [0xBBB5], NFD: [0x1106, 0x1172, 0x11B8], NFKC: [0xBBB5], NFKD: [0x1106, 0x1172, 0x11B8] }, +{ source: [0xBBB6], NFC: [0xBBB6], NFD: [0x1106, 0x1172, 0x11B9], NFKC: [0xBBB6], NFKD: [0x1106, 0x1172, 0x11B9] }, +{ source: [0xBBB7], NFC: [0xBBB7], NFD: [0x1106, 0x1172, 0x11BA], NFKC: [0xBBB7], NFKD: [0x1106, 0x1172, 0x11BA] }, +{ source: [0xBBB8], NFC: [0xBBB8], NFD: [0x1106, 0x1172, 0x11BB], NFKC: [0xBBB8], NFKD: [0x1106, 0x1172, 0x11BB] }, +{ source: [0xBBB9], NFC: [0xBBB9], NFD: [0x1106, 0x1172, 0x11BC], NFKC: [0xBBB9], NFKD: [0x1106, 0x1172, 0x11BC] }, +{ source: [0xBBBA], NFC: [0xBBBA], NFD: [0x1106, 0x1172, 0x11BD], NFKC: [0xBBBA], NFKD: [0x1106, 0x1172, 0x11BD] }, +{ source: [0xBBBB], NFC: [0xBBBB], NFD: [0x1106, 0x1172, 0x11BE], NFKC: [0xBBBB], NFKD: [0x1106, 0x1172, 0x11BE] }, +{ source: [0xBBBC], NFC: [0xBBBC], NFD: [0x1106, 0x1172, 0x11BF], NFKC: [0xBBBC], NFKD: [0x1106, 0x1172, 0x11BF] }, +{ source: [0xBBBD], NFC: [0xBBBD], NFD: [0x1106, 0x1172, 0x11C0], NFKC: [0xBBBD], NFKD: [0x1106, 0x1172, 0x11C0] }, +{ source: [0xBBBE], NFC: [0xBBBE], NFD: [0x1106, 0x1172, 0x11C1], NFKC: [0xBBBE], NFKD: [0x1106, 0x1172, 0x11C1] }, +{ source: [0xBBBF], NFC: [0xBBBF], NFD: [0x1106, 0x1172, 0x11C2], NFKC: [0xBBBF], NFKD: [0x1106, 0x1172, 0x11C2] }, +{ source: [0xBBC0], NFC: [0xBBC0], NFD: [0x1106, 0x1173], NFKC: [0xBBC0], NFKD: [0x1106, 0x1173] }, +{ source: [0xBBC1], NFC: [0xBBC1], NFD: [0x1106, 0x1173, 0x11A8], NFKC: [0xBBC1], NFKD: [0x1106, 0x1173, 0x11A8] }, +{ source: [0xBBC2], NFC: [0xBBC2], NFD: [0x1106, 0x1173, 0x11A9], NFKC: [0xBBC2], NFKD: [0x1106, 0x1173, 0x11A9] }, +{ source: [0xBBC3], NFC: [0xBBC3], NFD: [0x1106, 0x1173, 0x11AA], NFKC: [0xBBC3], NFKD: [0x1106, 0x1173, 0x11AA] }, +{ source: [0xBBC4], NFC: [0xBBC4], NFD: [0x1106, 0x1173, 0x11AB], NFKC: [0xBBC4], NFKD: [0x1106, 0x1173, 0x11AB] }, +{ source: [0xBBC5], NFC: [0xBBC5], NFD: [0x1106, 0x1173, 0x11AC], NFKC: [0xBBC5], NFKD: [0x1106, 0x1173, 0x11AC] }, +{ source: [0xBBC6], NFC: [0xBBC6], NFD: [0x1106, 0x1173, 0x11AD], NFKC: [0xBBC6], NFKD: [0x1106, 0x1173, 0x11AD] }, +{ source: [0xBBC7], NFC: [0xBBC7], NFD: [0x1106, 0x1173, 0x11AE], NFKC: [0xBBC7], NFKD: [0x1106, 0x1173, 0x11AE] }, +{ source: [0xBBC8], NFC: [0xBBC8], NFD: [0x1106, 0x1173, 0x11AF], NFKC: [0xBBC8], NFKD: [0x1106, 0x1173, 0x11AF] }, +{ source: [0xBBC9], NFC: [0xBBC9], NFD: [0x1106, 0x1173, 0x11B0], NFKC: [0xBBC9], NFKD: [0x1106, 0x1173, 0x11B0] }, +{ source: [0xBBCA], NFC: [0xBBCA], NFD: [0x1106, 0x1173, 0x11B1], NFKC: [0xBBCA], NFKD: [0x1106, 0x1173, 0x11B1] }, +{ source: [0xBBCB], NFC: [0xBBCB], NFD: [0x1106, 0x1173, 0x11B2], NFKC: [0xBBCB], NFKD: [0x1106, 0x1173, 0x11B2] }, +{ source: [0xBBCC], NFC: [0xBBCC], NFD: [0x1106, 0x1173, 0x11B3], NFKC: [0xBBCC], NFKD: [0x1106, 0x1173, 0x11B3] }, +{ source: [0xBBCD], NFC: [0xBBCD], NFD: [0x1106, 0x1173, 0x11B4], NFKC: [0xBBCD], NFKD: [0x1106, 0x1173, 0x11B4] }, +{ source: [0xBBCE], NFC: [0xBBCE], NFD: [0x1106, 0x1173, 0x11B5], NFKC: [0xBBCE], NFKD: [0x1106, 0x1173, 0x11B5] }, +{ source: [0xBBCF], NFC: [0xBBCF], NFD: [0x1106, 0x1173, 0x11B6], NFKC: [0xBBCF], NFKD: [0x1106, 0x1173, 0x11B6] }, +{ source: [0xBBD0], NFC: [0xBBD0], NFD: [0x1106, 0x1173, 0x11B7], NFKC: [0xBBD0], NFKD: [0x1106, 0x1173, 0x11B7] }, +{ source: [0xBBD1], NFC: [0xBBD1], NFD: [0x1106, 0x1173, 0x11B8], NFKC: [0xBBD1], NFKD: [0x1106, 0x1173, 0x11B8] }, +{ source: [0xBBD2], NFC: [0xBBD2], NFD: [0x1106, 0x1173, 0x11B9], NFKC: [0xBBD2], NFKD: [0x1106, 0x1173, 0x11B9] }, +{ source: [0xBBD3], NFC: [0xBBD3], NFD: [0x1106, 0x1173, 0x11BA], NFKC: [0xBBD3], NFKD: [0x1106, 0x1173, 0x11BA] }, +{ source: [0xBBD4], NFC: [0xBBD4], NFD: [0x1106, 0x1173, 0x11BB], NFKC: [0xBBD4], NFKD: [0x1106, 0x1173, 0x11BB] }, +{ source: [0xBBD5], NFC: [0xBBD5], NFD: [0x1106, 0x1173, 0x11BC], NFKC: [0xBBD5], NFKD: [0x1106, 0x1173, 0x11BC] }, +{ source: [0xBBD6], NFC: [0xBBD6], NFD: [0x1106, 0x1173, 0x11BD], NFKC: [0xBBD6], NFKD: [0x1106, 0x1173, 0x11BD] }, +{ source: [0xBBD7], NFC: [0xBBD7], NFD: [0x1106, 0x1173, 0x11BE], NFKC: [0xBBD7], NFKD: [0x1106, 0x1173, 0x11BE] }, +{ source: [0xBBD8], NFC: [0xBBD8], NFD: [0x1106, 0x1173, 0x11BF], NFKC: [0xBBD8], NFKD: [0x1106, 0x1173, 0x11BF] }, +{ source: [0xBBD9], NFC: [0xBBD9], NFD: [0x1106, 0x1173, 0x11C0], NFKC: [0xBBD9], NFKD: [0x1106, 0x1173, 0x11C0] }, +{ source: [0xBBDA], NFC: [0xBBDA], NFD: [0x1106, 0x1173, 0x11C1], NFKC: [0xBBDA], NFKD: [0x1106, 0x1173, 0x11C1] }, +{ source: [0xBBDB], NFC: [0xBBDB], NFD: [0x1106, 0x1173, 0x11C2], NFKC: [0xBBDB], NFKD: [0x1106, 0x1173, 0x11C2] }, +{ source: [0xBBDC], NFC: [0xBBDC], NFD: [0x1106, 0x1174], NFKC: [0xBBDC], NFKD: [0x1106, 0x1174] }, +{ source: [0xBBDD], NFC: [0xBBDD], NFD: [0x1106, 0x1174, 0x11A8], NFKC: [0xBBDD], NFKD: [0x1106, 0x1174, 0x11A8] }, +{ source: [0xBBDE], NFC: [0xBBDE], NFD: [0x1106, 0x1174, 0x11A9], NFKC: [0xBBDE], NFKD: [0x1106, 0x1174, 0x11A9] }, +{ source: [0xBBDF], NFC: [0xBBDF], NFD: [0x1106, 0x1174, 0x11AA], NFKC: [0xBBDF], NFKD: [0x1106, 0x1174, 0x11AA] }, +{ source: [0xBBE0], NFC: [0xBBE0], NFD: [0x1106, 0x1174, 0x11AB], NFKC: [0xBBE0], NFKD: [0x1106, 0x1174, 0x11AB] }, +{ source: [0xBBE1], NFC: [0xBBE1], NFD: [0x1106, 0x1174, 0x11AC], NFKC: [0xBBE1], NFKD: [0x1106, 0x1174, 0x11AC] }, +{ source: [0xBBE2], NFC: [0xBBE2], NFD: [0x1106, 0x1174, 0x11AD], NFKC: [0xBBE2], NFKD: [0x1106, 0x1174, 0x11AD] }, +{ source: [0xBBE3], NFC: [0xBBE3], NFD: [0x1106, 0x1174, 0x11AE], NFKC: [0xBBE3], NFKD: [0x1106, 0x1174, 0x11AE] }, +{ source: [0xBBE4], NFC: [0xBBE4], NFD: [0x1106, 0x1174, 0x11AF], NFKC: [0xBBE4], NFKD: [0x1106, 0x1174, 0x11AF] }, +{ source: [0xBBE5], NFC: [0xBBE5], NFD: [0x1106, 0x1174, 0x11B0], NFKC: [0xBBE5], NFKD: [0x1106, 0x1174, 0x11B0] }, +{ source: [0xBBE6], NFC: [0xBBE6], NFD: [0x1106, 0x1174, 0x11B1], NFKC: [0xBBE6], NFKD: [0x1106, 0x1174, 0x11B1] }, +{ source: [0xBBE7], NFC: [0xBBE7], NFD: [0x1106, 0x1174, 0x11B2], NFKC: [0xBBE7], NFKD: [0x1106, 0x1174, 0x11B2] }, +{ source: [0xBBE8], NFC: [0xBBE8], NFD: [0x1106, 0x1174, 0x11B3], NFKC: [0xBBE8], NFKD: [0x1106, 0x1174, 0x11B3] }, +{ source: [0xBBE9], NFC: [0xBBE9], NFD: [0x1106, 0x1174, 0x11B4], NFKC: [0xBBE9], NFKD: [0x1106, 0x1174, 0x11B4] }, +{ source: [0xBBEA], NFC: [0xBBEA], NFD: [0x1106, 0x1174, 0x11B5], NFKC: [0xBBEA], NFKD: [0x1106, 0x1174, 0x11B5] }, +{ source: [0xBBEB], NFC: [0xBBEB], NFD: [0x1106, 0x1174, 0x11B6], NFKC: [0xBBEB], NFKD: [0x1106, 0x1174, 0x11B6] }, +{ source: [0xBBEC], NFC: [0xBBEC], NFD: [0x1106, 0x1174, 0x11B7], NFKC: [0xBBEC], NFKD: [0x1106, 0x1174, 0x11B7] }, +{ source: [0xBBED], NFC: [0xBBED], NFD: [0x1106, 0x1174, 0x11B8], NFKC: [0xBBED], NFKD: [0x1106, 0x1174, 0x11B8] }, +{ source: [0xBBEE], NFC: [0xBBEE], NFD: [0x1106, 0x1174, 0x11B9], NFKC: [0xBBEE], NFKD: [0x1106, 0x1174, 0x11B9] }, +{ source: [0xBBEF], NFC: [0xBBEF], NFD: [0x1106, 0x1174, 0x11BA], NFKC: [0xBBEF], NFKD: [0x1106, 0x1174, 0x11BA] }, +{ source: [0xBBF0], NFC: [0xBBF0], NFD: [0x1106, 0x1174, 0x11BB], NFKC: [0xBBF0], NFKD: [0x1106, 0x1174, 0x11BB] }, +{ source: [0xBBF1], NFC: [0xBBF1], NFD: [0x1106, 0x1174, 0x11BC], NFKC: [0xBBF1], NFKD: [0x1106, 0x1174, 0x11BC] }, +{ source: [0xBBF2], NFC: [0xBBF2], NFD: [0x1106, 0x1174, 0x11BD], NFKC: [0xBBF2], NFKD: [0x1106, 0x1174, 0x11BD] }, +{ source: [0xBBF3], NFC: [0xBBF3], NFD: [0x1106, 0x1174, 0x11BE], NFKC: [0xBBF3], NFKD: [0x1106, 0x1174, 0x11BE] }, +{ source: [0xBBF4], NFC: [0xBBF4], NFD: [0x1106, 0x1174, 0x11BF], NFKC: [0xBBF4], NFKD: [0x1106, 0x1174, 0x11BF] }, +{ source: [0xBBF5], NFC: [0xBBF5], NFD: [0x1106, 0x1174, 0x11C0], NFKC: [0xBBF5], NFKD: [0x1106, 0x1174, 0x11C0] }, +{ source: [0xBBF6], NFC: [0xBBF6], NFD: [0x1106, 0x1174, 0x11C1], NFKC: [0xBBF6], NFKD: [0x1106, 0x1174, 0x11C1] }, +{ source: [0xBBF7], NFC: [0xBBF7], NFD: [0x1106, 0x1174, 0x11C2], NFKC: [0xBBF7], NFKD: [0x1106, 0x1174, 0x11C2] }, +{ source: [0xBBF8], NFC: [0xBBF8], NFD: [0x1106, 0x1175], NFKC: [0xBBF8], NFKD: [0x1106, 0x1175] }, +{ source: [0xBBF9], NFC: [0xBBF9], NFD: [0x1106, 0x1175, 0x11A8], NFKC: [0xBBF9], NFKD: [0x1106, 0x1175, 0x11A8] }, +{ source: [0xBBFA], NFC: [0xBBFA], NFD: [0x1106, 0x1175, 0x11A9], NFKC: [0xBBFA], NFKD: [0x1106, 0x1175, 0x11A9] }, +{ source: [0xBBFB], NFC: [0xBBFB], NFD: [0x1106, 0x1175, 0x11AA], NFKC: [0xBBFB], NFKD: [0x1106, 0x1175, 0x11AA] }, +{ source: [0xBBFC], NFC: [0xBBFC], NFD: [0x1106, 0x1175, 0x11AB], NFKC: [0xBBFC], NFKD: [0x1106, 0x1175, 0x11AB] }, +{ source: [0xBBFD], NFC: [0xBBFD], NFD: [0x1106, 0x1175, 0x11AC], NFKC: [0xBBFD], NFKD: [0x1106, 0x1175, 0x11AC] }, +{ source: [0xBBFE], NFC: [0xBBFE], NFD: [0x1106, 0x1175, 0x11AD], NFKC: [0xBBFE], NFKD: [0x1106, 0x1175, 0x11AD] }, +{ source: [0xBBFF], NFC: [0xBBFF], NFD: [0x1106, 0x1175, 0x11AE], NFKC: [0xBBFF], NFKD: [0x1106, 0x1175, 0x11AE] }, +{ source: [0xBC00], NFC: [0xBC00], NFD: [0x1106, 0x1175, 0x11AF], NFKC: [0xBC00], NFKD: [0x1106, 0x1175, 0x11AF] }, +{ source: [0xBC01], NFC: [0xBC01], NFD: [0x1106, 0x1175, 0x11B0], NFKC: [0xBC01], NFKD: [0x1106, 0x1175, 0x11B0] }, +{ source: [0xBC02], NFC: [0xBC02], NFD: [0x1106, 0x1175, 0x11B1], NFKC: [0xBC02], NFKD: [0x1106, 0x1175, 0x11B1] }, +{ source: [0xBC03], NFC: [0xBC03], NFD: [0x1106, 0x1175, 0x11B2], NFKC: [0xBC03], NFKD: [0x1106, 0x1175, 0x11B2] }, +{ source: [0xBC04], NFC: [0xBC04], NFD: [0x1106, 0x1175, 0x11B3], NFKC: [0xBC04], NFKD: [0x1106, 0x1175, 0x11B3] }, +{ source: [0xBC05], NFC: [0xBC05], NFD: [0x1106, 0x1175, 0x11B4], NFKC: [0xBC05], NFKD: [0x1106, 0x1175, 0x11B4] }, +{ source: [0xBC06], NFC: [0xBC06], NFD: [0x1106, 0x1175, 0x11B5], NFKC: [0xBC06], NFKD: [0x1106, 0x1175, 0x11B5] }, +{ source: [0xBC07], NFC: [0xBC07], NFD: [0x1106, 0x1175, 0x11B6], NFKC: [0xBC07], NFKD: [0x1106, 0x1175, 0x11B6] }, +{ source: [0xBC08], NFC: [0xBC08], NFD: [0x1106, 0x1175, 0x11B7], NFKC: [0xBC08], NFKD: [0x1106, 0x1175, 0x11B7] }, +{ source: [0xBC09], NFC: [0xBC09], NFD: [0x1106, 0x1175, 0x11B8], NFKC: [0xBC09], NFKD: [0x1106, 0x1175, 0x11B8] }, +{ source: [0xBC0A], NFC: [0xBC0A], NFD: [0x1106, 0x1175, 0x11B9], NFKC: [0xBC0A], NFKD: [0x1106, 0x1175, 0x11B9] }, +{ source: [0xBC0B], NFC: [0xBC0B], NFD: [0x1106, 0x1175, 0x11BA], NFKC: [0xBC0B], NFKD: [0x1106, 0x1175, 0x11BA] }, +{ source: [0xBC0C], NFC: [0xBC0C], NFD: [0x1106, 0x1175, 0x11BB], NFKC: [0xBC0C], NFKD: [0x1106, 0x1175, 0x11BB] }, +{ source: [0xBC0D], NFC: [0xBC0D], NFD: [0x1106, 0x1175, 0x11BC], NFKC: [0xBC0D], NFKD: [0x1106, 0x1175, 0x11BC] }, +{ source: [0xBC0E], NFC: [0xBC0E], NFD: [0x1106, 0x1175, 0x11BD], NFKC: [0xBC0E], NFKD: [0x1106, 0x1175, 0x11BD] }, +{ source: [0xBC0F], NFC: [0xBC0F], NFD: [0x1106, 0x1175, 0x11BE], NFKC: [0xBC0F], NFKD: [0x1106, 0x1175, 0x11BE] }, +{ source: [0xBC10], NFC: [0xBC10], NFD: [0x1106, 0x1175, 0x11BF], NFKC: [0xBC10], NFKD: [0x1106, 0x1175, 0x11BF] }, +{ source: [0xBC11], NFC: [0xBC11], NFD: [0x1106, 0x1175, 0x11C0], NFKC: [0xBC11], NFKD: [0x1106, 0x1175, 0x11C0] }, +{ source: [0xBC12], NFC: [0xBC12], NFD: [0x1106, 0x1175, 0x11C1], NFKC: [0xBC12], NFKD: [0x1106, 0x1175, 0x11C1] }, +{ source: [0xBC13], NFC: [0xBC13], NFD: [0x1106, 0x1175, 0x11C2], NFKC: [0xBC13], NFKD: [0x1106, 0x1175, 0x11C2] }, +{ source: [0xBC14], NFC: [0xBC14], NFD: [0x1107, 0x1161], NFKC: [0xBC14], NFKD: [0x1107, 0x1161] }, +{ source: [0xBC15], NFC: [0xBC15], NFD: [0x1107, 0x1161, 0x11A8], NFKC: [0xBC15], NFKD: [0x1107, 0x1161, 0x11A8] }, +{ source: [0xBC16], NFC: [0xBC16], NFD: [0x1107, 0x1161, 0x11A9], NFKC: [0xBC16], NFKD: [0x1107, 0x1161, 0x11A9] }, +{ source: [0xBC17], NFC: [0xBC17], NFD: [0x1107, 0x1161, 0x11AA], NFKC: [0xBC17], NFKD: [0x1107, 0x1161, 0x11AA] }, +{ source: [0xBC18], NFC: [0xBC18], NFD: [0x1107, 0x1161, 0x11AB], NFKC: [0xBC18], NFKD: [0x1107, 0x1161, 0x11AB] }, +{ source: [0xBC19], NFC: [0xBC19], NFD: [0x1107, 0x1161, 0x11AC], NFKC: [0xBC19], NFKD: [0x1107, 0x1161, 0x11AC] }, +{ source: [0xBC1A], NFC: [0xBC1A], NFD: [0x1107, 0x1161, 0x11AD], NFKC: [0xBC1A], NFKD: [0x1107, 0x1161, 0x11AD] }, +{ source: [0xBC1B], NFC: [0xBC1B], NFD: [0x1107, 0x1161, 0x11AE], NFKC: [0xBC1B], NFKD: [0x1107, 0x1161, 0x11AE] }, +{ source: [0xBC1C], NFC: [0xBC1C], NFD: [0x1107, 0x1161, 0x11AF], NFKC: [0xBC1C], NFKD: [0x1107, 0x1161, 0x11AF] }, +{ source: [0xBC1D], NFC: [0xBC1D], NFD: [0x1107, 0x1161, 0x11B0], NFKC: [0xBC1D], NFKD: [0x1107, 0x1161, 0x11B0] }, +{ source: [0xBC1E], NFC: [0xBC1E], NFD: [0x1107, 0x1161, 0x11B1], NFKC: [0xBC1E], NFKD: [0x1107, 0x1161, 0x11B1] }, +{ source: [0xBC1F], NFC: [0xBC1F], NFD: [0x1107, 0x1161, 0x11B2], NFKC: [0xBC1F], NFKD: [0x1107, 0x1161, 0x11B2] }, +{ source: [0xBC20], NFC: [0xBC20], NFD: [0x1107, 0x1161, 0x11B3], NFKC: [0xBC20], NFKD: [0x1107, 0x1161, 0x11B3] }, +{ source: [0xBC21], NFC: [0xBC21], NFD: [0x1107, 0x1161, 0x11B4], NFKC: [0xBC21], NFKD: [0x1107, 0x1161, 0x11B4] }, +{ source: [0xBC22], NFC: [0xBC22], NFD: [0x1107, 0x1161, 0x11B5], NFKC: [0xBC22], NFKD: [0x1107, 0x1161, 0x11B5] }, +{ source: [0xBC23], NFC: [0xBC23], NFD: [0x1107, 0x1161, 0x11B6], NFKC: [0xBC23], NFKD: [0x1107, 0x1161, 0x11B6] }, +{ source: [0xBC24], NFC: [0xBC24], NFD: [0x1107, 0x1161, 0x11B7], NFKC: [0xBC24], NFKD: [0x1107, 0x1161, 0x11B7] }, +{ source: [0xBC25], NFC: [0xBC25], NFD: [0x1107, 0x1161, 0x11B8], NFKC: [0xBC25], NFKD: [0x1107, 0x1161, 0x11B8] }, +{ source: [0xBC26], NFC: [0xBC26], NFD: [0x1107, 0x1161, 0x11B9], NFKC: [0xBC26], NFKD: [0x1107, 0x1161, 0x11B9] }, +{ source: [0xBC27], NFC: [0xBC27], NFD: [0x1107, 0x1161, 0x11BA], NFKC: [0xBC27], NFKD: [0x1107, 0x1161, 0x11BA] }, +{ source: [0xBC28], NFC: [0xBC28], NFD: [0x1107, 0x1161, 0x11BB], NFKC: [0xBC28], NFKD: [0x1107, 0x1161, 0x11BB] }, +{ source: [0xBC29], NFC: [0xBC29], NFD: [0x1107, 0x1161, 0x11BC], NFKC: [0xBC29], NFKD: [0x1107, 0x1161, 0x11BC] }, +{ source: [0xBC2A], NFC: [0xBC2A], NFD: [0x1107, 0x1161, 0x11BD], NFKC: [0xBC2A], NFKD: [0x1107, 0x1161, 0x11BD] }, +{ source: [0xBC2B], NFC: [0xBC2B], NFD: [0x1107, 0x1161, 0x11BE], NFKC: [0xBC2B], NFKD: [0x1107, 0x1161, 0x11BE] }, +{ source: [0xBC2C], NFC: [0xBC2C], NFD: [0x1107, 0x1161, 0x11BF], NFKC: [0xBC2C], NFKD: [0x1107, 0x1161, 0x11BF] }, +{ source: [0xBC2D], NFC: [0xBC2D], NFD: [0x1107, 0x1161, 0x11C0], NFKC: [0xBC2D], NFKD: [0x1107, 0x1161, 0x11C0] }, +{ source: [0xBC2E], NFC: [0xBC2E], NFD: [0x1107, 0x1161, 0x11C1], NFKC: [0xBC2E], NFKD: [0x1107, 0x1161, 0x11C1] }, +{ source: [0xBC2F], NFC: [0xBC2F], NFD: [0x1107, 0x1161, 0x11C2], NFKC: [0xBC2F], NFKD: [0x1107, 0x1161, 0x11C2] }, +{ source: [0xBC30], NFC: [0xBC30], NFD: [0x1107, 0x1162], NFKC: [0xBC30], NFKD: [0x1107, 0x1162] }, +{ source: [0xBC31], NFC: [0xBC31], NFD: [0x1107, 0x1162, 0x11A8], NFKC: [0xBC31], NFKD: [0x1107, 0x1162, 0x11A8] }, +{ source: [0xBC32], NFC: [0xBC32], NFD: [0x1107, 0x1162, 0x11A9], NFKC: [0xBC32], NFKD: [0x1107, 0x1162, 0x11A9] }, +{ source: [0xBC33], NFC: [0xBC33], NFD: [0x1107, 0x1162, 0x11AA], NFKC: [0xBC33], NFKD: [0x1107, 0x1162, 0x11AA] }, +{ source: [0xBC34], NFC: [0xBC34], NFD: [0x1107, 0x1162, 0x11AB], NFKC: [0xBC34], NFKD: [0x1107, 0x1162, 0x11AB] }, +{ source: [0xBC35], NFC: [0xBC35], NFD: [0x1107, 0x1162, 0x11AC], NFKC: [0xBC35], NFKD: [0x1107, 0x1162, 0x11AC] }, +{ source: [0xBC36], NFC: [0xBC36], NFD: [0x1107, 0x1162, 0x11AD], NFKC: [0xBC36], NFKD: [0x1107, 0x1162, 0x11AD] }, +{ source: [0xBC37], NFC: [0xBC37], NFD: [0x1107, 0x1162, 0x11AE], NFKC: [0xBC37], NFKD: [0x1107, 0x1162, 0x11AE] }, +{ source: [0xBC38], NFC: [0xBC38], NFD: [0x1107, 0x1162, 0x11AF], NFKC: [0xBC38], NFKD: [0x1107, 0x1162, 0x11AF] }, +{ source: [0xBC39], NFC: [0xBC39], NFD: [0x1107, 0x1162, 0x11B0], NFKC: [0xBC39], NFKD: [0x1107, 0x1162, 0x11B0] }, +{ source: [0xBC3A], NFC: [0xBC3A], NFD: [0x1107, 0x1162, 0x11B1], NFKC: [0xBC3A], NFKD: [0x1107, 0x1162, 0x11B1] }, +{ source: [0xBC3B], NFC: [0xBC3B], NFD: [0x1107, 0x1162, 0x11B2], NFKC: [0xBC3B], NFKD: [0x1107, 0x1162, 0x11B2] }, +{ source: [0xBC3C], NFC: [0xBC3C], NFD: [0x1107, 0x1162, 0x11B3], NFKC: [0xBC3C], NFKD: [0x1107, 0x1162, 0x11B3] }, +{ source: [0xBC3D], NFC: [0xBC3D], NFD: [0x1107, 0x1162, 0x11B4], NFKC: [0xBC3D], NFKD: [0x1107, 0x1162, 0x11B4] }, +{ source: [0xBC3E], NFC: [0xBC3E], NFD: [0x1107, 0x1162, 0x11B5], NFKC: [0xBC3E], NFKD: [0x1107, 0x1162, 0x11B5] }, +{ source: [0xBC3F], NFC: [0xBC3F], NFD: [0x1107, 0x1162, 0x11B6], NFKC: [0xBC3F], NFKD: [0x1107, 0x1162, 0x11B6] }, +{ source: [0xBC40], NFC: [0xBC40], NFD: [0x1107, 0x1162, 0x11B7], NFKC: [0xBC40], NFKD: [0x1107, 0x1162, 0x11B7] }, +{ source: [0xBC41], NFC: [0xBC41], NFD: [0x1107, 0x1162, 0x11B8], NFKC: [0xBC41], NFKD: [0x1107, 0x1162, 0x11B8] }, +{ source: [0xBC42], NFC: [0xBC42], NFD: [0x1107, 0x1162, 0x11B9], NFKC: [0xBC42], NFKD: [0x1107, 0x1162, 0x11B9] }, +{ source: [0xBC43], NFC: [0xBC43], NFD: [0x1107, 0x1162, 0x11BA], NFKC: [0xBC43], NFKD: [0x1107, 0x1162, 0x11BA] }, +{ source: [0xBC44], NFC: [0xBC44], NFD: [0x1107, 0x1162, 0x11BB], NFKC: [0xBC44], NFKD: [0x1107, 0x1162, 0x11BB] }, +{ source: [0xBC45], NFC: [0xBC45], NFD: [0x1107, 0x1162, 0x11BC], NFKC: [0xBC45], NFKD: [0x1107, 0x1162, 0x11BC] }, +{ source: [0xBC46], NFC: [0xBC46], NFD: [0x1107, 0x1162, 0x11BD], NFKC: [0xBC46], NFKD: [0x1107, 0x1162, 0x11BD] }, +{ source: [0xBC47], NFC: [0xBC47], NFD: [0x1107, 0x1162, 0x11BE], NFKC: [0xBC47], NFKD: [0x1107, 0x1162, 0x11BE] }, +{ source: [0xBC48], NFC: [0xBC48], NFD: [0x1107, 0x1162, 0x11BF], NFKC: [0xBC48], NFKD: [0x1107, 0x1162, 0x11BF] }, +{ source: [0xBC49], NFC: [0xBC49], NFD: [0x1107, 0x1162, 0x11C0], NFKC: [0xBC49], NFKD: [0x1107, 0x1162, 0x11C0] }, +{ source: [0xBC4A], NFC: [0xBC4A], NFD: [0x1107, 0x1162, 0x11C1], NFKC: [0xBC4A], NFKD: [0x1107, 0x1162, 0x11C1] }, +{ source: [0xBC4B], NFC: [0xBC4B], NFD: [0x1107, 0x1162, 0x11C2], NFKC: [0xBC4B], NFKD: [0x1107, 0x1162, 0x11C2] }, +{ source: [0xBC4C], NFC: [0xBC4C], NFD: [0x1107, 0x1163], NFKC: [0xBC4C], NFKD: [0x1107, 0x1163] }, +{ source: [0xBC4D], NFC: [0xBC4D], NFD: [0x1107, 0x1163, 0x11A8], NFKC: [0xBC4D], NFKD: [0x1107, 0x1163, 0x11A8] }, +{ source: [0xBC4E], NFC: [0xBC4E], NFD: [0x1107, 0x1163, 0x11A9], NFKC: [0xBC4E], NFKD: [0x1107, 0x1163, 0x11A9] }, +{ source: [0xBC4F], NFC: [0xBC4F], NFD: [0x1107, 0x1163, 0x11AA], NFKC: [0xBC4F], NFKD: [0x1107, 0x1163, 0x11AA] }, +{ source: [0xBC50], NFC: [0xBC50], NFD: [0x1107, 0x1163, 0x11AB], NFKC: [0xBC50], NFKD: [0x1107, 0x1163, 0x11AB] }, +{ source: [0xBC51], NFC: [0xBC51], NFD: [0x1107, 0x1163, 0x11AC], NFKC: [0xBC51], NFKD: [0x1107, 0x1163, 0x11AC] }, +{ source: [0xBC52], NFC: [0xBC52], NFD: [0x1107, 0x1163, 0x11AD], NFKC: [0xBC52], NFKD: [0x1107, 0x1163, 0x11AD] }, +{ source: [0xBC53], NFC: [0xBC53], NFD: [0x1107, 0x1163, 0x11AE], NFKC: [0xBC53], NFKD: [0x1107, 0x1163, 0x11AE] }, +{ source: [0xBC54], NFC: [0xBC54], NFD: [0x1107, 0x1163, 0x11AF], NFKC: [0xBC54], NFKD: [0x1107, 0x1163, 0x11AF] }, +{ source: [0xBC55], NFC: [0xBC55], NFD: [0x1107, 0x1163, 0x11B0], NFKC: [0xBC55], NFKD: [0x1107, 0x1163, 0x11B0] }, +{ source: [0xBC56], NFC: [0xBC56], NFD: [0x1107, 0x1163, 0x11B1], NFKC: [0xBC56], NFKD: [0x1107, 0x1163, 0x11B1] }, +{ source: [0xBC57], NFC: [0xBC57], NFD: [0x1107, 0x1163, 0x11B2], NFKC: [0xBC57], NFKD: [0x1107, 0x1163, 0x11B2] }, +{ source: [0xBC58], NFC: [0xBC58], NFD: [0x1107, 0x1163, 0x11B3], NFKC: [0xBC58], NFKD: [0x1107, 0x1163, 0x11B3] }, +{ source: [0xBC59], NFC: [0xBC59], NFD: [0x1107, 0x1163, 0x11B4], NFKC: [0xBC59], NFKD: [0x1107, 0x1163, 0x11B4] }, +{ source: [0xBC5A], NFC: [0xBC5A], NFD: [0x1107, 0x1163, 0x11B5], NFKC: [0xBC5A], NFKD: [0x1107, 0x1163, 0x11B5] }, +{ source: [0xBC5B], NFC: [0xBC5B], NFD: [0x1107, 0x1163, 0x11B6], NFKC: [0xBC5B], NFKD: [0x1107, 0x1163, 0x11B6] }, +{ source: [0xBC5C], NFC: [0xBC5C], NFD: [0x1107, 0x1163, 0x11B7], NFKC: [0xBC5C], NFKD: [0x1107, 0x1163, 0x11B7] }, +{ source: [0xBC5D], NFC: [0xBC5D], NFD: [0x1107, 0x1163, 0x11B8], NFKC: [0xBC5D], NFKD: [0x1107, 0x1163, 0x11B8] }, +{ source: [0xBC5E], NFC: [0xBC5E], NFD: [0x1107, 0x1163, 0x11B9], NFKC: [0xBC5E], NFKD: [0x1107, 0x1163, 0x11B9] }, +{ source: [0xBC5F], NFC: [0xBC5F], NFD: [0x1107, 0x1163, 0x11BA], NFKC: [0xBC5F], NFKD: [0x1107, 0x1163, 0x11BA] }, +{ source: [0xBC60], NFC: [0xBC60], NFD: [0x1107, 0x1163, 0x11BB], NFKC: [0xBC60], NFKD: [0x1107, 0x1163, 0x11BB] }, +{ source: [0xBC61], NFC: [0xBC61], NFD: [0x1107, 0x1163, 0x11BC], NFKC: [0xBC61], NFKD: [0x1107, 0x1163, 0x11BC] }, +{ source: [0xBC62], NFC: [0xBC62], NFD: [0x1107, 0x1163, 0x11BD], NFKC: [0xBC62], NFKD: [0x1107, 0x1163, 0x11BD] }, +{ source: [0xBC63], NFC: [0xBC63], NFD: [0x1107, 0x1163, 0x11BE], NFKC: [0xBC63], NFKD: [0x1107, 0x1163, 0x11BE] }, +{ source: [0xBC64], NFC: [0xBC64], NFD: [0x1107, 0x1163, 0x11BF], NFKC: [0xBC64], NFKD: [0x1107, 0x1163, 0x11BF] }, +{ source: [0xBC65], NFC: [0xBC65], NFD: [0x1107, 0x1163, 0x11C0], NFKC: [0xBC65], NFKD: [0x1107, 0x1163, 0x11C0] }, +{ source: [0xBC66], NFC: [0xBC66], NFD: [0x1107, 0x1163, 0x11C1], NFKC: [0xBC66], NFKD: [0x1107, 0x1163, 0x11C1] }, +{ source: [0xBC67], NFC: [0xBC67], NFD: [0x1107, 0x1163, 0x11C2], NFKC: [0xBC67], NFKD: [0x1107, 0x1163, 0x11C2] }, +{ source: [0xBC68], NFC: [0xBC68], NFD: [0x1107, 0x1164], NFKC: [0xBC68], NFKD: [0x1107, 0x1164] }, +{ source: [0xBC69], NFC: [0xBC69], NFD: [0x1107, 0x1164, 0x11A8], NFKC: [0xBC69], NFKD: [0x1107, 0x1164, 0x11A8] }, +{ source: [0xBC6A], NFC: [0xBC6A], NFD: [0x1107, 0x1164, 0x11A9], NFKC: [0xBC6A], NFKD: [0x1107, 0x1164, 0x11A9] }, +{ source: [0xBC6B], NFC: [0xBC6B], NFD: [0x1107, 0x1164, 0x11AA], NFKC: [0xBC6B], NFKD: [0x1107, 0x1164, 0x11AA] }, +{ source: [0xBC6C], NFC: [0xBC6C], NFD: [0x1107, 0x1164, 0x11AB], NFKC: [0xBC6C], NFKD: [0x1107, 0x1164, 0x11AB] }, +{ source: [0xBC6D], NFC: [0xBC6D], NFD: [0x1107, 0x1164, 0x11AC], NFKC: [0xBC6D], NFKD: [0x1107, 0x1164, 0x11AC] }, +{ source: [0xBC6E], NFC: [0xBC6E], NFD: [0x1107, 0x1164, 0x11AD], NFKC: [0xBC6E], NFKD: [0x1107, 0x1164, 0x11AD] }, +{ source: [0xBC6F], NFC: [0xBC6F], NFD: [0x1107, 0x1164, 0x11AE], NFKC: [0xBC6F], NFKD: [0x1107, 0x1164, 0x11AE] }, +{ source: [0xBC70], NFC: [0xBC70], NFD: [0x1107, 0x1164, 0x11AF], NFKC: [0xBC70], NFKD: [0x1107, 0x1164, 0x11AF] }, +{ source: [0xBC71], NFC: [0xBC71], NFD: [0x1107, 0x1164, 0x11B0], NFKC: [0xBC71], NFKD: [0x1107, 0x1164, 0x11B0] }, +{ source: [0xBC72], NFC: [0xBC72], NFD: [0x1107, 0x1164, 0x11B1], NFKC: [0xBC72], NFKD: [0x1107, 0x1164, 0x11B1] }, +{ source: [0xBC73], NFC: [0xBC73], NFD: [0x1107, 0x1164, 0x11B2], NFKC: [0xBC73], NFKD: [0x1107, 0x1164, 0x11B2] }, +{ source: [0xBC74], NFC: [0xBC74], NFD: [0x1107, 0x1164, 0x11B3], NFKC: [0xBC74], NFKD: [0x1107, 0x1164, 0x11B3] }, +{ source: [0xBC75], NFC: [0xBC75], NFD: [0x1107, 0x1164, 0x11B4], NFKC: [0xBC75], NFKD: [0x1107, 0x1164, 0x11B4] }, +{ source: [0xBC76], NFC: [0xBC76], NFD: [0x1107, 0x1164, 0x11B5], NFKC: [0xBC76], NFKD: [0x1107, 0x1164, 0x11B5] }, +{ source: [0xBC77], NFC: [0xBC77], NFD: [0x1107, 0x1164, 0x11B6], NFKC: [0xBC77], NFKD: [0x1107, 0x1164, 0x11B6] }, +{ source: [0xBC78], NFC: [0xBC78], NFD: [0x1107, 0x1164, 0x11B7], NFKC: [0xBC78], NFKD: [0x1107, 0x1164, 0x11B7] }, +{ source: [0xBC79], NFC: [0xBC79], NFD: [0x1107, 0x1164, 0x11B8], NFKC: [0xBC79], NFKD: [0x1107, 0x1164, 0x11B8] }, +{ source: [0xBC7A], NFC: [0xBC7A], NFD: [0x1107, 0x1164, 0x11B9], NFKC: [0xBC7A], NFKD: [0x1107, 0x1164, 0x11B9] }, +{ source: [0xBC7B], NFC: [0xBC7B], NFD: [0x1107, 0x1164, 0x11BA], NFKC: [0xBC7B], NFKD: [0x1107, 0x1164, 0x11BA] }, +{ source: [0xBC7C], NFC: [0xBC7C], NFD: [0x1107, 0x1164, 0x11BB], NFKC: [0xBC7C], NFKD: [0x1107, 0x1164, 0x11BB] }, +{ source: [0xBC7D], NFC: [0xBC7D], NFD: [0x1107, 0x1164, 0x11BC], NFKC: [0xBC7D], NFKD: [0x1107, 0x1164, 0x11BC] }, +{ source: [0xBC7E], NFC: [0xBC7E], NFD: [0x1107, 0x1164, 0x11BD], NFKC: [0xBC7E], NFKD: [0x1107, 0x1164, 0x11BD] }, +{ source: [0xBC7F], NFC: [0xBC7F], NFD: [0x1107, 0x1164, 0x11BE], NFKC: [0xBC7F], NFKD: [0x1107, 0x1164, 0x11BE] }, +{ source: [0xBC80], NFC: [0xBC80], NFD: [0x1107, 0x1164, 0x11BF], NFKC: [0xBC80], NFKD: [0x1107, 0x1164, 0x11BF] }, +{ source: [0xBC81], NFC: [0xBC81], NFD: [0x1107, 0x1164, 0x11C0], NFKC: [0xBC81], NFKD: [0x1107, 0x1164, 0x11C0] }, +{ source: [0xBC82], NFC: [0xBC82], NFD: [0x1107, 0x1164, 0x11C1], NFKC: [0xBC82], NFKD: [0x1107, 0x1164, 0x11C1] }, +{ source: [0xBC83], NFC: [0xBC83], NFD: [0x1107, 0x1164, 0x11C2], NFKC: [0xBC83], NFKD: [0x1107, 0x1164, 0x11C2] }, +{ source: [0xBC84], NFC: [0xBC84], NFD: [0x1107, 0x1165], NFKC: [0xBC84], NFKD: [0x1107, 0x1165] }, +{ source: [0xBC85], NFC: [0xBC85], NFD: [0x1107, 0x1165, 0x11A8], NFKC: [0xBC85], NFKD: [0x1107, 0x1165, 0x11A8] }, +{ source: [0xBC86], NFC: [0xBC86], NFD: [0x1107, 0x1165, 0x11A9], NFKC: [0xBC86], NFKD: [0x1107, 0x1165, 0x11A9] }, +{ source: [0xBC87], NFC: [0xBC87], NFD: [0x1107, 0x1165, 0x11AA], NFKC: [0xBC87], NFKD: [0x1107, 0x1165, 0x11AA] }, +{ source: [0xBC88], NFC: [0xBC88], NFD: [0x1107, 0x1165, 0x11AB], NFKC: [0xBC88], NFKD: [0x1107, 0x1165, 0x11AB] }, +{ source: [0xBC89], NFC: [0xBC89], NFD: [0x1107, 0x1165, 0x11AC], NFKC: [0xBC89], NFKD: [0x1107, 0x1165, 0x11AC] }, +{ source: [0xBC8A], NFC: [0xBC8A], NFD: [0x1107, 0x1165, 0x11AD], NFKC: [0xBC8A], NFKD: [0x1107, 0x1165, 0x11AD] }, +{ source: [0xBC8B], NFC: [0xBC8B], NFD: [0x1107, 0x1165, 0x11AE], NFKC: [0xBC8B], NFKD: [0x1107, 0x1165, 0x11AE] }, +{ source: [0xBC8C], NFC: [0xBC8C], NFD: [0x1107, 0x1165, 0x11AF], NFKC: [0xBC8C], NFKD: [0x1107, 0x1165, 0x11AF] }, +{ source: [0xBC8D], NFC: [0xBC8D], NFD: [0x1107, 0x1165, 0x11B0], NFKC: [0xBC8D], NFKD: [0x1107, 0x1165, 0x11B0] }, +{ source: [0xBC8E], NFC: [0xBC8E], NFD: [0x1107, 0x1165, 0x11B1], NFKC: [0xBC8E], NFKD: [0x1107, 0x1165, 0x11B1] }, +{ source: [0xBC8F], NFC: [0xBC8F], NFD: [0x1107, 0x1165, 0x11B2], NFKC: [0xBC8F], NFKD: [0x1107, 0x1165, 0x11B2] }, +{ source: [0xBC90], NFC: [0xBC90], NFD: [0x1107, 0x1165, 0x11B3], NFKC: [0xBC90], NFKD: [0x1107, 0x1165, 0x11B3] }, +{ source: [0xBC91], NFC: [0xBC91], NFD: [0x1107, 0x1165, 0x11B4], NFKC: [0xBC91], NFKD: [0x1107, 0x1165, 0x11B4] }, +{ source: [0xBC92], NFC: [0xBC92], NFD: [0x1107, 0x1165, 0x11B5], NFKC: [0xBC92], NFKD: [0x1107, 0x1165, 0x11B5] }, +{ source: [0xBC93], NFC: [0xBC93], NFD: [0x1107, 0x1165, 0x11B6], NFKC: [0xBC93], NFKD: [0x1107, 0x1165, 0x11B6] }, +{ source: [0xBC94], NFC: [0xBC94], NFD: [0x1107, 0x1165, 0x11B7], NFKC: [0xBC94], NFKD: [0x1107, 0x1165, 0x11B7] }, +{ source: [0xBC95], NFC: [0xBC95], NFD: [0x1107, 0x1165, 0x11B8], NFKC: [0xBC95], NFKD: [0x1107, 0x1165, 0x11B8] }, +{ source: [0xBC96], NFC: [0xBC96], NFD: [0x1107, 0x1165, 0x11B9], NFKC: [0xBC96], NFKD: [0x1107, 0x1165, 0x11B9] }, +{ source: [0xBC97], NFC: [0xBC97], NFD: [0x1107, 0x1165, 0x11BA], NFKC: [0xBC97], NFKD: [0x1107, 0x1165, 0x11BA] }, +{ source: [0xBC98], NFC: [0xBC98], NFD: [0x1107, 0x1165, 0x11BB], NFKC: [0xBC98], NFKD: [0x1107, 0x1165, 0x11BB] }, +{ source: [0xBC99], NFC: [0xBC99], NFD: [0x1107, 0x1165, 0x11BC], NFKC: [0xBC99], NFKD: [0x1107, 0x1165, 0x11BC] }, +{ source: [0xBC9A], NFC: [0xBC9A], NFD: [0x1107, 0x1165, 0x11BD], NFKC: [0xBC9A], NFKD: [0x1107, 0x1165, 0x11BD] }, +{ source: [0xBC9B], NFC: [0xBC9B], NFD: [0x1107, 0x1165, 0x11BE], NFKC: [0xBC9B], NFKD: [0x1107, 0x1165, 0x11BE] }, +{ source: [0xBC9C], NFC: [0xBC9C], NFD: [0x1107, 0x1165, 0x11BF], NFKC: [0xBC9C], NFKD: [0x1107, 0x1165, 0x11BF] }, +{ source: [0xBC9D], NFC: [0xBC9D], NFD: [0x1107, 0x1165, 0x11C0], NFKC: [0xBC9D], NFKD: [0x1107, 0x1165, 0x11C0] }, +{ source: [0xBC9E], NFC: [0xBC9E], NFD: [0x1107, 0x1165, 0x11C1], NFKC: [0xBC9E], NFKD: [0x1107, 0x1165, 0x11C1] }, +{ source: [0xBC9F], NFC: [0xBC9F], NFD: [0x1107, 0x1165, 0x11C2], NFKC: [0xBC9F], NFKD: [0x1107, 0x1165, 0x11C2] }, +{ source: [0xBCA0], NFC: [0xBCA0], NFD: [0x1107, 0x1166], NFKC: [0xBCA0], NFKD: [0x1107, 0x1166] }, +{ source: [0xBCA1], NFC: [0xBCA1], NFD: [0x1107, 0x1166, 0x11A8], NFKC: [0xBCA1], NFKD: [0x1107, 0x1166, 0x11A8] }, +{ source: [0xBCA2], NFC: [0xBCA2], NFD: [0x1107, 0x1166, 0x11A9], NFKC: [0xBCA2], NFKD: [0x1107, 0x1166, 0x11A9] }, +{ source: [0xBCA3], NFC: [0xBCA3], NFD: [0x1107, 0x1166, 0x11AA], NFKC: [0xBCA3], NFKD: [0x1107, 0x1166, 0x11AA] }, +{ source: [0xBCA4], NFC: [0xBCA4], NFD: [0x1107, 0x1166, 0x11AB], NFKC: [0xBCA4], NFKD: [0x1107, 0x1166, 0x11AB] }, +{ source: [0xBCA5], NFC: [0xBCA5], NFD: [0x1107, 0x1166, 0x11AC], NFKC: [0xBCA5], NFKD: [0x1107, 0x1166, 0x11AC] }, +{ source: [0xBCA6], NFC: [0xBCA6], NFD: [0x1107, 0x1166, 0x11AD], NFKC: [0xBCA6], NFKD: [0x1107, 0x1166, 0x11AD] }, +{ source: [0xBCA7], NFC: [0xBCA7], NFD: [0x1107, 0x1166, 0x11AE], NFKC: [0xBCA7], NFKD: [0x1107, 0x1166, 0x11AE] }, +{ source: [0xBCA8], NFC: [0xBCA8], NFD: [0x1107, 0x1166, 0x11AF], NFKC: [0xBCA8], NFKD: [0x1107, 0x1166, 0x11AF] }, +{ source: [0xBCA9], NFC: [0xBCA9], NFD: [0x1107, 0x1166, 0x11B0], NFKC: [0xBCA9], NFKD: [0x1107, 0x1166, 0x11B0] }, +{ source: [0xBCAA], NFC: [0xBCAA], NFD: [0x1107, 0x1166, 0x11B1], NFKC: [0xBCAA], NFKD: [0x1107, 0x1166, 0x11B1] }, +{ source: [0xBCAB], NFC: [0xBCAB], NFD: [0x1107, 0x1166, 0x11B2], NFKC: [0xBCAB], NFKD: [0x1107, 0x1166, 0x11B2] }, +{ source: [0xBCAC], NFC: [0xBCAC], NFD: [0x1107, 0x1166, 0x11B3], NFKC: [0xBCAC], NFKD: [0x1107, 0x1166, 0x11B3] }, +{ source: [0xBCAD], NFC: [0xBCAD], NFD: [0x1107, 0x1166, 0x11B4], NFKC: [0xBCAD], NFKD: [0x1107, 0x1166, 0x11B4] }, +{ source: [0xBCAE], NFC: [0xBCAE], NFD: [0x1107, 0x1166, 0x11B5], NFKC: [0xBCAE], NFKD: [0x1107, 0x1166, 0x11B5] }, +{ source: [0xBCAF], NFC: [0xBCAF], NFD: [0x1107, 0x1166, 0x11B6], NFKC: [0xBCAF], NFKD: [0x1107, 0x1166, 0x11B6] }, +{ source: [0xBCB0], NFC: [0xBCB0], NFD: [0x1107, 0x1166, 0x11B7], NFKC: [0xBCB0], NFKD: [0x1107, 0x1166, 0x11B7] }, +{ source: [0xBCB1], NFC: [0xBCB1], NFD: [0x1107, 0x1166, 0x11B8], NFKC: [0xBCB1], NFKD: [0x1107, 0x1166, 0x11B8] }, +{ source: [0xBCB2], NFC: [0xBCB2], NFD: [0x1107, 0x1166, 0x11B9], NFKC: [0xBCB2], NFKD: [0x1107, 0x1166, 0x11B9] }, +{ source: [0xBCB3], NFC: [0xBCB3], NFD: [0x1107, 0x1166, 0x11BA], NFKC: [0xBCB3], NFKD: [0x1107, 0x1166, 0x11BA] }, +{ source: [0xBCB4], NFC: [0xBCB4], NFD: [0x1107, 0x1166, 0x11BB], NFKC: [0xBCB4], NFKD: [0x1107, 0x1166, 0x11BB] }, +{ source: [0xBCB5], NFC: [0xBCB5], NFD: [0x1107, 0x1166, 0x11BC], NFKC: [0xBCB5], NFKD: [0x1107, 0x1166, 0x11BC] }, +{ source: [0xBCB6], NFC: [0xBCB6], NFD: [0x1107, 0x1166, 0x11BD], NFKC: [0xBCB6], NFKD: [0x1107, 0x1166, 0x11BD] }, +{ source: [0xBCB7], NFC: [0xBCB7], NFD: [0x1107, 0x1166, 0x11BE], NFKC: [0xBCB7], NFKD: [0x1107, 0x1166, 0x11BE] }, +{ source: [0xBCB8], NFC: [0xBCB8], NFD: [0x1107, 0x1166, 0x11BF], NFKC: [0xBCB8], NFKD: [0x1107, 0x1166, 0x11BF] }, +{ source: [0xBCB9], NFC: [0xBCB9], NFD: [0x1107, 0x1166, 0x11C0], NFKC: [0xBCB9], NFKD: [0x1107, 0x1166, 0x11C0] }, +{ source: [0xBCBA], NFC: [0xBCBA], NFD: [0x1107, 0x1166, 0x11C1], NFKC: [0xBCBA], NFKD: [0x1107, 0x1166, 0x11C1] }, +{ source: [0xBCBB], NFC: [0xBCBB], NFD: [0x1107, 0x1166, 0x11C2], NFKC: [0xBCBB], NFKD: [0x1107, 0x1166, 0x11C2] }, +{ source: [0xBCBC], NFC: [0xBCBC], NFD: [0x1107, 0x1167], NFKC: [0xBCBC], NFKD: [0x1107, 0x1167] }, +{ source: [0xBCBD], NFC: [0xBCBD], NFD: [0x1107, 0x1167, 0x11A8], NFKC: [0xBCBD], NFKD: [0x1107, 0x1167, 0x11A8] }, +{ source: [0xBCBE], NFC: [0xBCBE], NFD: [0x1107, 0x1167, 0x11A9], NFKC: [0xBCBE], NFKD: [0x1107, 0x1167, 0x11A9] }, +{ source: [0xBCBF], NFC: [0xBCBF], NFD: [0x1107, 0x1167, 0x11AA], NFKC: [0xBCBF], NFKD: [0x1107, 0x1167, 0x11AA] }, +{ source: [0xBCC0], NFC: [0xBCC0], NFD: [0x1107, 0x1167, 0x11AB], NFKC: [0xBCC0], NFKD: [0x1107, 0x1167, 0x11AB] }, +{ source: [0xBCC1], NFC: [0xBCC1], NFD: [0x1107, 0x1167, 0x11AC], NFKC: [0xBCC1], NFKD: [0x1107, 0x1167, 0x11AC] }, +{ source: [0xBCC2], NFC: [0xBCC2], NFD: [0x1107, 0x1167, 0x11AD], NFKC: [0xBCC2], NFKD: [0x1107, 0x1167, 0x11AD] }, +{ source: [0xBCC3], NFC: [0xBCC3], NFD: [0x1107, 0x1167, 0x11AE], NFKC: [0xBCC3], NFKD: [0x1107, 0x1167, 0x11AE] }, +{ source: [0xBCC4], NFC: [0xBCC4], NFD: [0x1107, 0x1167, 0x11AF], NFKC: [0xBCC4], NFKD: [0x1107, 0x1167, 0x11AF] }, +{ source: [0xBCC5], NFC: [0xBCC5], NFD: [0x1107, 0x1167, 0x11B0], NFKC: [0xBCC5], NFKD: [0x1107, 0x1167, 0x11B0] }, +{ source: [0xBCC6], NFC: [0xBCC6], NFD: [0x1107, 0x1167, 0x11B1], NFKC: [0xBCC6], NFKD: [0x1107, 0x1167, 0x11B1] }, +{ source: [0xBCC7], NFC: [0xBCC7], NFD: [0x1107, 0x1167, 0x11B2], NFKC: [0xBCC7], NFKD: [0x1107, 0x1167, 0x11B2] }, +{ source: [0xBCC8], NFC: [0xBCC8], NFD: [0x1107, 0x1167, 0x11B3], NFKC: [0xBCC8], NFKD: [0x1107, 0x1167, 0x11B3] }, +{ source: [0xBCC9], NFC: [0xBCC9], NFD: [0x1107, 0x1167, 0x11B4], NFKC: [0xBCC9], NFKD: [0x1107, 0x1167, 0x11B4] }, +{ source: [0xBCCA], NFC: [0xBCCA], NFD: [0x1107, 0x1167, 0x11B5], NFKC: [0xBCCA], NFKD: [0x1107, 0x1167, 0x11B5] }, +{ source: [0xBCCB], NFC: [0xBCCB], NFD: [0x1107, 0x1167, 0x11B6], NFKC: [0xBCCB], NFKD: [0x1107, 0x1167, 0x11B6] }, +{ source: [0xBCCC], NFC: [0xBCCC], NFD: [0x1107, 0x1167, 0x11B7], NFKC: [0xBCCC], NFKD: [0x1107, 0x1167, 0x11B7] }, +{ source: [0xBCCD], NFC: [0xBCCD], NFD: [0x1107, 0x1167, 0x11B8], NFKC: [0xBCCD], NFKD: [0x1107, 0x1167, 0x11B8] }, +{ source: [0xBCCE], NFC: [0xBCCE], NFD: [0x1107, 0x1167, 0x11B9], NFKC: [0xBCCE], NFKD: [0x1107, 0x1167, 0x11B9] }, +{ source: [0xBCCF], NFC: [0xBCCF], NFD: [0x1107, 0x1167, 0x11BA], NFKC: [0xBCCF], NFKD: [0x1107, 0x1167, 0x11BA] }, +{ source: [0xBCD0], NFC: [0xBCD0], NFD: [0x1107, 0x1167, 0x11BB], NFKC: [0xBCD0], NFKD: [0x1107, 0x1167, 0x11BB] }, +{ source: [0xBCD1], NFC: [0xBCD1], NFD: [0x1107, 0x1167, 0x11BC], NFKC: [0xBCD1], NFKD: [0x1107, 0x1167, 0x11BC] }, +{ source: [0xBCD2], NFC: [0xBCD2], NFD: [0x1107, 0x1167, 0x11BD], NFKC: [0xBCD2], NFKD: [0x1107, 0x1167, 0x11BD] }, +{ source: [0xBCD3], NFC: [0xBCD3], NFD: [0x1107, 0x1167, 0x11BE], NFKC: [0xBCD3], NFKD: [0x1107, 0x1167, 0x11BE] }, +{ source: [0xBCD4], NFC: [0xBCD4], NFD: [0x1107, 0x1167, 0x11BF], NFKC: [0xBCD4], NFKD: [0x1107, 0x1167, 0x11BF] }, +{ source: [0xBCD5], NFC: [0xBCD5], NFD: [0x1107, 0x1167, 0x11C0], NFKC: [0xBCD5], NFKD: [0x1107, 0x1167, 0x11C0] }, +{ source: [0xBCD6], NFC: [0xBCD6], NFD: [0x1107, 0x1167, 0x11C1], NFKC: [0xBCD6], NFKD: [0x1107, 0x1167, 0x11C1] }, +{ source: [0xBCD7], NFC: [0xBCD7], NFD: [0x1107, 0x1167, 0x11C2], NFKC: [0xBCD7], NFKD: [0x1107, 0x1167, 0x11C2] }, +{ source: [0xBCD8], NFC: [0xBCD8], NFD: [0x1107, 0x1168], NFKC: [0xBCD8], NFKD: [0x1107, 0x1168] }, +{ source: [0xBCD9], NFC: [0xBCD9], NFD: [0x1107, 0x1168, 0x11A8], NFKC: [0xBCD9], NFKD: [0x1107, 0x1168, 0x11A8] }, +{ source: [0xBCDA], NFC: [0xBCDA], NFD: [0x1107, 0x1168, 0x11A9], NFKC: [0xBCDA], NFKD: [0x1107, 0x1168, 0x11A9] }, +{ source: [0xBCDB], NFC: [0xBCDB], NFD: [0x1107, 0x1168, 0x11AA], NFKC: [0xBCDB], NFKD: [0x1107, 0x1168, 0x11AA] }, +{ source: [0xBCDC], NFC: [0xBCDC], NFD: [0x1107, 0x1168, 0x11AB], NFKC: [0xBCDC], NFKD: [0x1107, 0x1168, 0x11AB] }, +{ source: [0xBCDD], NFC: [0xBCDD], NFD: [0x1107, 0x1168, 0x11AC], NFKC: [0xBCDD], NFKD: [0x1107, 0x1168, 0x11AC] }, +{ source: [0xBCDE], NFC: [0xBCDE], NFD: [0x1107, 0x1168, 0x11AD], NFKC: [0xBCDE], NFKD: [0x1107, 0x1168, 0x11AD] }, +{ source: [0xBCDF], NFC: [0xBCDF], NFD: [0x1107, 0x1168, 0x11AE], NFKC: [0xBCDF], NFKD: [0x1107, 0x1168, 0x11AE] }, +{ source: [0xBCE0], NFC: [0xBCE0], NFD: [0x1107, 0x1168, 0x11AF], NFKC: [0xBCE0], NFKD: [0x1107, 0x1168, 0x11AF] }, +{ source: [0xBCE1], NFC: [0xBCE1], NFD: [0x1107, 0x1168, 0x11B0], NFKC: [0xBCE1], NFKD: [0x1107, 0x1168, 0x11B0] }, +{ source: [0xBCE2], NFC: [0xBCE2], NFD: [0x1107, 0x1168, 0x11B1], NFKC: [0xBCE2], NFKD: [0x1107, 0x1168, 0x11B1] }, +{ source: [0xBCE3], NFC: [0xBCE3], NFD: [0x1107, 0x1168, 0x11B2], NFKC: [0xBCE3], NFKD: [0x1107, 0x1168, 0x11B2] }, +{ source: [0xBCE4], NFC: [0xBCE4], NFD: [0x1107, 0x1168, 0x11B3], NFKC: [0xBCE4], NFKD: [0x1107, 0x1168, 0x11B3] }, +{ source: [0xBCE5], NFC: [0xBCE5], NFD: [0x1107, 0x1168, 0x11B4], NFKC: [0xBCE5], NFKD: [0x1107, 0x1168, 0x11B4] }, +{ source: [0xBCE6], NFC: [0xBCE6], NFD: [0x1107, 0x1168, 0x11B5], NFKC: [0xBCE6], NFKD: [0x1107, 0x1168, 0x11B5] }, +{ source: [0xBCE7], NFC: [0xBCE7], NFD: [0x1107, 0x1168, 0x11B6], NFKC: [0xBCE7], NFKD: [0x1107, 0x1168, 0x11B6] }, +{ source: [0xBCE8], NFC: [0xBCE8], NFD: [0x1107, 0x1168, 0x11B7], NFKC: [0xBCE8], NFKD: [0x1107, 0x1168, 0x11B7] }, +{ source: [0xBCE9], NFC: [0xBCE9], NFD: [0x1107, 0x1168, 0x11B8], NFKC: [0xBCE9], NFKD: [0x1107, 0x1168, 0x11B8] }, +{ source: [0xBCEA], NFC: [0xBCEA], NFD: [0x1107, 0x1168, 0x11B9], NFKC: [0xBCEA], NFKD: [0x1107, 0x1168, 0x11B9] }, +{ source: [0xBCEB], NFC: [0xBCEB], NFD: [0x1107, 0x1168, 0x11BA], NFKC: [0xBCEB], NFKD: [0x1107, 0x1168, 0x11BA] }, +{ source: [0xBCEC], NFC: [0xBCEC], NFD: [0x1107, 0x1168, 0x11BB], NFKC: [0xBCEC], NFKD: [0x1107, 0x1168, 0x11BB] }, +{ source: [0xBCED], NFC: [0xBCED], NFD: [0x1107, 0x1168, 0x11BC], NFKC: [0xBCED], NFKD: [0x1107, 0x1168, 0x11BC] }, +{ source: [0xBCEE], NFC: [0xBCEE], NFD: [0x1107, 0x1168, 0x11BD], NFKC: [0xBCEE], NFKD: [0x1107, 0x1168, 0x11BD] }, +{ source: [0xBCEF], NFC: [0xBCEF], NFD: [0x1107, 0x1168, 0x11BE], NFKC: [0xBCEF], NFKD: [0x1107, 0x1168, 0x11BE] }, +{ source: [0xBCF0], NFC: [0xBCF0], NFD: [0x1107, 0x1168, 0x11BF], NFKC: [0xBCF0], NFKD: [0x1107, 0x1168, 0x11BF] }, +{ source: [0xBCF1], NFC: [0xBCF1], NFD: [0x1107, 0x1168, 0x11C0], NFKC: [0xBCF1], NFKD: [0x1107, 0x1168, 0x11C0] }, +{ source: [0xBCF2], NFC: [0xBCF2], NFD: [0x1107, 0x1168, 0x11C1], NFKC: [0xBCF2], NFKD: [0x1107, 0x1168, 0x11C1] }, +{ source: [0xBCF3], NFC: [0xBCF3], NFD: [0x1107, 0x1168, 0x11C2], NFKC: [0xBCF3], NFKD: [0x1107, 0x1168, 0x11C2] }, +{ source: [0xBCF4], NFC: [0xBCF4], NFD: [0x1107, 0x1169], NFKC: [0xBCF4], NFKD: [0x1107, 0x1169] }, +{ source: [0xBCF5], NFC: [0xBCF5], NFD: [0x1107, 0x1169, 0x11A8], NFKC: [0xBCF5], NFKD: [0x1107, 0x1169, 0x11A8] }, +{ source: [0xBCF6], NFC: [0xBCF6], NFD: [0x1107, 0x1169, 0x11A9], NFKC: [0xBCF6], NFKD: [0x1107, 0x1169, 0x11A9] }, +{ source: [0xBCF7], NFC: [0xBCF7], NFD: [0x1107, 0x1169, 0x11AA], NFKC: [0xBCF7], NFKD: [0x1107, 0x1169, 0x11AA] }, +{ source: [0xBCF8], NFC: [0xBCF8], NFD: [0x1107, 0x1169, 0x11AB], NFKC: [0xBCF8], NFKD: [0x1107, 0x1169, 0x11AB] }, +{ source: [0xBCF9], NFC: [0xBCF9], NFD: [0x1107, 0x1169, 0x11AC], NFKC: [0xBCF9], NFKD: [0x1107, 0x1169, 0x11AC] }, +{ source: [0xBCFA], NFC: [0xBCFA], NFD: [0x1107, 0x1169, 0x11AD], NFKC: [0xBCFA], NFKD: [0x1107, 0x1169, 0x11AD] }, +{ source: [0xBCFB], NFC: [0xBCFB], NFD: [0x1107, 0x1169, 0x11AE], NFKC: [0xBCFB], NFKD: [0x1107, 0x1169, 0x11AE] }, +{ source: [0xBCFC], NFC: [0xBCFC], NFD: [0x1107, 0x1169, 0x11AF], NFKC: [0xBCFC], NFKD: [0x1107, 0x1169, 0x11AF] }, +{ source: [0xBCFD], NFC: [0xBCFD], NFD: [0x1107, 0x1169, 0x11B0], NFKC: [0xBCFD], NFKD: [0x1107, 0x1169, 0x11B0] }, +{ source: [0xBCFE], NFC: [0xBCFE], NFD: [0x1107, 0x1169, 0x11B1], NFKC: [0xBCFE], NFKD: [0x1107, 0x1169, 0x11B1] }, +{ source: [0xBCFF], NFC: [0xBCFF], NFD: [0x1107, 0x1169, 0x11B2], NFKC: [0xBCFF], NFKD: [0x1107, 0x1169, 0x11B2] }, +{ source: [0xBD00], NFC: [0xBD00], NFD: [0x1107, 0x1169, 0x11B3], NFKC: [0xBD00], NFKD: [0x1107, 0x1169, 0x11B3] }, +{ source: [0xBD01], NFC: [0xBD01], NFD: [0x1107, 0x1169, 0x11B4], NFKC: [0xBD01], NFKD: [0x1107, 0x1169, 0x11B4] }, +{ source: [0xBD02], NFC: [0xBD02], NFD: [0x1107, 0x1169, 0x11B5], NFKC: [0xBD02], NFKD: [0x1107, 0x1169, 0x11B5] }, +{ source: [0xBD03], NFC: [0xBD03], NFD: [0x1107, 0x1169, 0x11B6], NFKC: [0xBD03], NFKD: [0x1107, 0x1169, 0x11B6] }, +{ source: [0xBD04], NFC: [0xBD04], NFD: [0x1107, 0x1169, 0x11B7], NFKC: [0xBD04], NFKD: [0x1107, 0x1169, 0x11B7] }, +{ source: [0xBD05], NFC: [0xBD05], NFD: [0x1107, 0x1169, 0x11B8], NFKC: [0xBD05], NFKD: [0x1107, 0x1169, 0x11B8] }, +{ source: [0xBD06], NFC: [0xBD06], NFD: [0x1107, 0x1169, 0x11B9], NFKC: [0xBD06], NFKD: [0x1107, 0x1169, 0x11B9] }, +{ source: [0xBD07], NFC: [0xBD07], NFD: [0x1107, 0x1169, 0x11BA], NFKC: [0xBD07], NFKD: [0x1107, 0x1169, 0x11BA] }, +{ source: [0xBD08], NFC: [0xBD08], NFD: [0x1107, 0x1169, 0x11BB], NFKC: [0xBD08], NFKD: [0x1107, 0x1169, 0x11BB] }, +{ source: [0xBD09], NFC: [0xBD09], NFD: [0x1107, 0x1169, 0x11BC], NFKC: [0xBD09], NFKD: [0x1107, 0x1169, 0x11BC] }, +{ source: [0xBD0A], NFC: [0xBD0A], NFD: [0x1107, 0x1169, 0x11BD], NFKC: [0xBD0A], NFKD: [0x1107, 0x1169, 0x11BD] }, +{ source: [0xBD0B], NFC: [0xBD0B], NFD: [0x1107, 0x1169, 0x11BE], NFKC: [0xBD0B], NFKD: [0x1107, 0x1169, 0x11BE] }, +{ source: [0xBD0C], NFC: [0xBD0C], NFD: [0x1107, 0x1169, 0x11BF], NFKC: [0xBD0C], NFKD: [0x1107, 0x1169, 0x11BF] }, +{ source: [0xBD0D], NFC: [0xBD0D], NFD: [0x1107, 0x1169, 0x11C0], NFKC: [0xBD0D], NFKD: [0x1107, 0x1169, 0x11C0] }, +{ source: [0xBD0E], NFC: [0xBD0E], NFD: [0x1107, 0x1169, 0x11C1], NFKC: [0xBD0E], NFKD: [0x1107, 0x1169, 0x11C1] }, +{ source: [0xBD0F], NFC: [0xBD0F], NFD: [0x1107, 0x1169, 0x11C2], NFKC: [0xBD0F], NFKD: [0x1107, 0x1169, 0x11C2] }, +{ source: [0xBD10], NFC: [0xBD10], NFD: [0x1107, 0x116A], NFKC: [0xBD10], NFKD: [0x1107, 0x116A] }, +{ source: [0xBD11], NFC: [0xBD11], NFD: [0x1107, 0x116A, 0x11A8], NFKC: [0xBD11], NFKD: [0x1107, 0x116A, 0x11A8] }, +{ source: [0xBD12], NFC: [0xBD12], NFD: [0x1107, 0x116A, 0x11A9], NFKC: [0xBD12], NFKD: [0x1107, 0x116A, 0x11A9] }, +{ source: [0xBD13], NFC: [0xBD13], NFD: [0x1107, 0x116A, 0x11AA], NFKC: [0xBD13], NFKD: [0x1107, 0x116A, 0x11AA] }, +{ source: [0xBD14], NFC: [0xBD14], NFD: [0x1107, 0x116A, 0x11AB], NFKC: [0xBD14], NFKD: [0x1107, 0x116A, 0x11AB] }, +{ source: [0xBD15], NFC: [0xBD15], NFD: [0x1107, 0x116A, 0x11AC], NFKC: [0xBD15], NFKD: [0x1107, 0x116A, 0x11AC] }, +{ source: [0xBD16], NFC: [0xBD16], NFD: [0x1107, 0x116A, 0x11AD], NFKC: [0xBD16], NFKD: [0x1107, 0x116A, 0x11AD] }, +{ source: [0xBD17], NFC: [0xBD17], NFD: [0x1107, 0x116A, 0x11AE], NFKC: [0xBD17], NFKD: [0x1107, 0x116A, 0x11AE] }, +{ source: [0xBD18], NFC: [0xBD18], NFD: [0x1107, 0x116A, 0x11AF], NFKC: [0xBD18], NFKD: [0x1107, 0x116A, 0x11AF] }, +{ source: [0xBD19], NFC: [0xBD19], NFD: [0x1107, 0x116A, 0x11B0], NFKC: [0xBD19], NFKD: [0x1107, 0x116A, 0x11B0] }, +{ source: [0xBD1A], NFC: [0xBD1A], NFD: [0x1107, 0x116A, 0x11B1], NFKC: [0xBD1A], NFKD: [0x1107, 0x116A, 0x11B1] }, +{ source: [0xBD1B], NFC: [0xBD1B], NFD: [0x1107, 0x116A, 0x11B2], NFKC: [0xBD1B], NFKD: [0x1107, 0x116A, 0x11B2] }, +{ source: [0xBD1C], NFC: [0xBD1C], NFD: [0x1107, 0x116A, 0x11B3], NFKC: [0xBD1C], NFKD: [0x1107, 0x116A, 0x11B3] }, +{ source: [0xBD1D], NFC: [0xBD1D], NFD: [0x1107, 0x116A, 0x11B4], NFKC: [0xBD1D], NFKD: [0x1107, 0x116A, 0x11B4] }, +{ source: [0xBD1E], NFC: [0xBD1E], NFD: [0x1107, 0x116A, 0x11B5], NFKC: [0xBD1E], NFKD: [0x1107, 0x116A, 0x11B5] }, +{ source: [0xBD1F], NFC: [0xBD1F], NFD: [0x1107, 0x116A, 0x11B6], NFKC: [0xBD1F], NFKD: [0x1107, 0x116A, 0x11B6] }, +{ source: [0xBD20], NFC: [0xBD20], NFD: [0x1107, 0x116A, 0x11B7], NFKC: [0xBD20], NFKD: [0x1107, 0x116A, 0x11B7] }, +{ source: [0xBD21], NFC: [0xBD21], NFD: [0x1107, 0x116A, 0x11B8], NFKC: [0xBD21], NFKD: [0x1107, 0x116A, 0x11B8] }, +{ source: [0xBD22], NFC: [0xBD22], NFD: [0x1107, 0x116A, 0x11B9], NFKC: [0xBD22], NFKD: [0x1107, 0x116A, 0x11B9] }, +{ source: [0xBD23], NFC: [0xBD23], NFD: [0x1107, 0x116A, 0x11BA], NFKC: [0xBD23], NFKD: [0x1107, 0x116A, 0x11BA] }, +{ source: [0xBD24], NFC: [0xBD24], NFD: [0x1107, 0x116A, 0x11BB], NFKC: [0xBD24], NFKD: [0x1107, 0x116A, 0x11BB] }, +{ source: [0xBD25], NFC: [0xBD25], NFD: [0x1107, 0x116A, 0x11BC], NFKC: [0xBD25], NFKD: [0x1107, 0x116A, 0x11BC] }, +{ source: [0xBD26], NFC: [0xBD26], NFD: [0x1107, 0x116A, 0x11BD], NFKC: [0xBD26], NFKD: [0x1107, 0x116A, 0x11BD] }, +{ source: [0xBD27], NFC: [0xBD27], NFD: [0x1107, 0x116A, 0x11BE], NFKC: [0xBD27], NFKD: [0x1107, 0x116A, 0x11BE] }, +{ source: [0xBD28], NFC: [0xBD28], NFD: [0x1107, 0x116A, 0x11BF], NFKC: [0xBD28], NFKD: [0x1107, 0x116A, 0x11BF] }, +{ source: [0xBD29], NFC: [0xBD29], NFD: [0x1107, 0x116A, 0x11C0], NFKC: [0xBD29], NFKD: [0x1107, 0x116A, 0x11C0] }, +{ source: [0xBD2A], NFC: [0xBD2A], NFD: [0x1107, 0x116A, 0x11C1], NFKC: [0xBD2A], NFKD: [0x1107, 0x116A, 0x11C1] }, +{ source: [0xBD2B], NFC: [0xBD2B], NFD: [0x1107, 0x116A, 0x11C2], NFKC: [0xBD2B], NFKD: [0x1107, 0x116A, 0x11C2] }, +{ source: [0xBD2C], NFC: [0xBD2C], NFD: [0x1107, 0x116B], NFKC: [0xBD2C], NFKD: [0x1107, 0x116B] }, +{ source: [0xBD2D], NFC: [0xBD2D], NFD: [0x1107, 0x116B, 0x11A8], NFKC: [0xBD2D], NFKD: [0x1107, 0x116B, 0x11A8] }, +{ source: [0xBD2E], NFC: [0xBD2E], NFD: [0x1107, 0x116B, 0x11A9], NFKC: [0xBD2E], NFKD: [0x1107, 0x116B, 0x11A9] }, +{ source: [0xBD2F], NFC: [0xBD2F], NFD: [0x1107, 0x116B, 0x11AA], NFKC: [0xBD2F], NFKD: [0x1107, 0x116B, 0x11AA] }, +{ source: [0xBD30], NFC: [0xBD30], NFD: [0x1107, 0x116B, 0x11AB], NFKC: [0xBD30], NFKD: [0x1107, 0x116B, 0x11AB] }, +{ source: [0xBD31], NFC: [0xBD31], NFD: [0x1107, 0x116B, 0x11AC], NFKC: [0xBD31], NFKD: [0x1107, 0x116B, 0x11AC] }, +{ source: [0xBD32], NFC: [0xBD32], NFD: [0x1107, 0x116B, 0x11AD], NFKC: [0xBD32], NFKD: [0x1107, 0x116B, 0x11AD] }, +{ source: [0xBD33], NFC: [0xBD33], NFD: [0x1107, 0x116B, 0x11AE], NFKC: [0xBD33], NFKD: [0x1107, 0x116B, 0x11AE] }, +{ source: [0xBD34], NFC: [0xBD34], NFD: [0x1107, 0x116B, 0x11AF], NFKC: [0xBD34], NFKD: [0x1107, 0x116B, 0x11AF] }, +{ source: [0xBD35], NFC: [0xBD35], NFD: [0x1107, 0x116B, 0x11B0], NFKC: [0xBD35], NFKD: [0x1107, 0x116B, 0x11B0] }, +{ source: [0xBD36], NFC: [0xBD36], NFD: [0x1107, 0x116B, 0x11B1], NFKC: [0xBD36], NFKD: [0x1107, 0x116B, 0x11B1] }, +{ source: [0xBD37], NFC: [0xBD37], NFD: [0x1107, 0x116B, 0x11B2], NFKC: [0xBD37], NFKD: [0x1107, 0x116B, 0x11B2] }, +{ source: [0xBD38], NFC: [0xBD38], NFD: [0x1107, 0x116B, 0x11B3], NFKC: [0xBD38], NFKD: [0x1107, 0x116B, 0x11B3] }, +{ source: [0xBD39], NFC: [0xBD39], NFD: [0x1107, 0x116B, 0x11B4], NFKC: [0xBD39], NFKD: [0x1107, 0x116B, 0x11B4] }, +{ source: [0xBD3A], NFC: [0xBD3A], NFD: [0x1107, 0x116B, 0x11B5], NFKC: [0xBD3A], NFKD: [0x1107, 0x116B, 0x11B5] }, +{ source: [0xBD3B], NFC: [0xBD3B], NFD: [0x1107, 0x116B, 0x11B6], NFKC: [0xBD3B], NFKD: [0x1107, 0x116B, 0x11B6] }, +{ source: [0xBD3C], NFC: [0xBD3C], NFD: [0x1107, 0x116B, 0x11B7], NFKC: [0xBD3C], NFKD: [0x1107, 0x116B, 0x11B7] }, +{ source: [0xBD3D], NFC: [0xBD3D], NFD: [0x1107, 0x116B, 0x11B8], NFKC: [0xBD3D], NFKD: [0x1107, 0x116B, 0x11B8] }, +{ source: [0xBD3E], NFC: [0xBD3E], NFD: [0x1107, 0x116B, 0x11B9], NFKC: [0xBD3E], NFKD: [0x1107, 0x116B, 0x11B9] }, +{ source: [0xBD3F], NFC: [0xBD3F], NFD: [0x1107, 0x116B, 0x11BA], NFKC: [0xBD3F], NFKD: [0x1107, 0x116B, 0x11BA] }, +{ source: [0xBD40], NFC: [0xBD40], NFD: [0x1107, 0x116B, 0x11BB], NFKC: [0xBD40], NFKD: [0x1107, 0x116B, 0x11BB] }, +{ source: [0xBD41], NFC: [0xBD41], NFD: [0x1107, 0x116B, 0x11BC], NFKC: [0xBD41], NFKD: [0x1107, 0x116B, 0x11BC] }, +{ source: [0xBD42], NFC: [0xBD42], NFD: [0x1107, 0x116B, 0x11BD], NFKC: [0xBD42], NFKD: [0x1107, 0x116B, 0x11BD] }, +{ source: [0xBD43], NFC: [0xBD43], NFD: [0x1107, 0x116B, 0x11BE], NFKC: [0xBD43], NFKD: [0x1107, 0x116B, 0x11BE] }, +{ source: [0xBD44], NFC: [0xBD44], NFD: [0x1107, 0x116B, 0x11BF], NFKC: [0xBD44], NFKD: [0x1107, 0x116B, 0x11BF] }, +{ source: [0xBD45], NFC: [0xBD45], NFD: [0x1107, 0x116B, 0x11C0], NFKC: [0xBD45], NFKD: [0x1107, 0x116B, 0x11C0] }, +{ source: [0xBD46], NFC: [0xBD46], NFD: [0x1107, 0x116B, 0x11C1], NFKC: [0xBD46], NFKD: [0x1107, 0x116B, 0x11C1] }, +{ source: [0xBD47], NFC: [0xBD47], NFD: [0x1107, 0x116B, 0x11C2], NFKC: [0xBD47], NFKD: [0x1107, 0x116B, 0x11C2] }, +{ source: [0xBD48], NFC: [0xBD48], NFD: [0x1107, 0x116C], NFKC: [0xBD48], NFKD: [0x1107, 0x116C] }, +{ source: [0xBD49], NFC: [0xBD49], NFD: [0x1107, 0x116C, 0x11A8], NFKC: [0xBD49], NFKD: [0x1107, 0x116C, 0x11A8] }, +{ source: [0xBD4A], NFC: [0xBD4A], NFD: [0x1107, 0x116C, 0x11A9], NFKC: [0xBD4A], NFKD: [0x1107, 0x116C, 0x11A9] }, +{ source: [0xBD4B], NFC: [0xBD4B], NFD: [0x1107, 0x116C, 0x11AA], NFKC: [0xBD4B], NFKD: [0x1107, 0x116C, 0x11AA] }, +{ source: [0xBD4C], NFC: [0xBD4C], NFD: [0x1107, 0x116C, 0x11AB], NFKC: [0xBD4C], NFKD: [0x1107, 0x116C, 0x11AB] }, +{ source: [0xBD4D], NFC: [0xBD4D], NFD: [0x1107, 0x116C, 0x11AC], NFKC: [0xBD4D], NFKD: [0x1107, 0x116C, 0x11AC] }, +{ source: [0xBD4E], NFC: [0xBD4E], NFD: [0x1107, 0x116C, 0x11AD], NFKC: [0xBD4E], NFKD: [0x1107, 0x116C, 0x11AD] }, +{ source: [0xBD4F], NFC: [0xBD4F], NFD: [0x1107, 0x116C, 0x11AE], NFKC: [0xBD4F], NFKD: [0x1107, 0x116C, 0x11AE] }, +{ source: [0xBD50], NFC: [0xBD50], NFD: [0x1107, 0x116C, 0x11AF], NFKC: [0xBD50], NFKD: [0x1107, 0x116C, 0x11AF] }, +{ source: [0xBD51], NFC: [0xBD51], NFD: [0x1107, 0x116C, 0x11B0], NFKC: [0xBD51], NFKD: [0x1107, 0x116C, 0x11B0] }, +{ source: [0xBD52], NFC: [0xBD52], NFD: [0x1107, 0x116C, 0x11B1], NFKC: [0xBD52], NFKD: [0x1107, 0x116C, 0x11B1] }, +{ source: [0xBD53], NFC: [0xBD53], NFD: [0x1107, 0x116C, 0x11B2], NFKC: [0xBD53], NFKD: [0x1107, 0x116C, 0x11B2] }, +{ source: [0xBD54], NFC: [0xBD54], NFD: [0x1107, 0x116C, 0x11B3], NFKC: [0xBD54], NFKD: [0x1107, 0x116C, 0x11B3] }, +{ source: [0xBD55], NFC: [0xBD55], NFD: [0x1107, 0x116C, 0x11B4], NFKC: [0xBD55], NFKD: [0x1107, 0x116C, 0x11B4] }, +{ source: [0xBD56], NFC: [0xBD56], NFD: [0x1107, 0x116C, 0x11B5], NFKC: [0xBD56], NFKD: [0x1107, 0x116C, 0x11B5] }, +{ source: [0xBD57], NFC: [0xBD57], NFD: [0x1107, 0x116C, 0x11B6], NFKC: [0xBD57], NFKD: [0x1107, 0x116C, 0x11B6] }, +{ source: [0xBD58], NFC: [0xBD58], NFD: [0x1107, 0x116C, 0x11B7], NFKC: [0xBD58], NFKD: [0x1107, 0x116C, 0x11B7] }, +{ source: [0xBD59], NFC: [0xBD59], NFD: [0x1107, 0x116C, 0x11B8], NFKC: [0xBD59], NFKD: [0x1107, 0x116C, 0x11B8] }, +{ source: [0xBD5A], NFC: [0xBD5A], NFD: [0x1107, 0x116C, 0x11B9], NFKC: [0xBD5A], NFKD: [0x1107, 0x116C, 0x11B9] }, +{ source: [0xBD5B], NFC: [0xBD5B], NFD: [0x1107, 0x116C, 0x11BA], NFKC: [0xBD5B], NFKD: [0x1107, 0x116C, 0x11BA] }, +{ source: [0xBD5C], NFC: [0xBD5C], NFD: [0x1107, 0x116C, 0x11BB], NFKC: [0xBD5C], NFKD: [0x1107, 0x116C, 0x11BB] }, +{ source: [0xBD5D], NFC: [0xBD5D], NFD: [0x1107, 0x116C, 0x11BC], NFKC: [0xBD5D], NFKD: [0x1107, 0x116C, 0x11BC] }, +{ source: [0xBD5E], NFC: [0xBD5E], NFD: [0x1107, 0x116C, 0x11BD], NFKC: [0xBD5E], NFKD: [0x1107, 0x116C, 0x11BD] }, +{ source: [0xBD5F], NFC: [0xBD5F], NFD: [0x1107, 0x116C, 0x11BE], NFKC: [0xBD5F], NFKD: [0x1107, 0x116C, 0x11BE] }, +{ source: [0xBD60], NFC: [0xBD60], NFD: [0x1107, 0x116C, 0x11BF], NFKC: [0xBD60], NFKD: [0x1107, 0x116C, 0x11BF] }, +{ source: [0xBD61], NFC: [0xBD61], NFD: [0x1107, 0x116C, 0x11C0], NFKC: [0xBD61], NFKD: [0x1107, 0x116C, 0x11C0] }, +{ source: [0xBD62], NFC: [0xBD62], NFD: [0x1107, 0x116C, 0x11C1], NFKC: [0xBD62], NFKD: [0x1107, 0x116C, 0x11C1] }, +{ source: [0xBD63], NFC: [0xBD63], NFD: [0x1107, 0x116C, 0x11C2], NFKC: [0xBD63], NFKD: [0x1107, 0x116C, 0x11C2] }, +{ source: [0xBD64], NFC: [0xBD64], NFD: [0x1107, 0x116D], NFKC: [0xBD64], NFKD: [0x1107, 0x116D] }, +{ source: [0xBD65], NFC: [0xBD65], NFD: [0x1107, 0x116D, 0x11A8], NFKC: [0xBD65], NFKD: [0x1107, 0x116D, 0x11A8] }, +{ source: [0xBD66], NFC: [0xBD66], NFD: [0x1107, 0x116D, 0x11A9], NFKC: [0xBD66], NFKD: [0x1107, 0x116D, 0x11A9] }, +{ source: [0xBD67], NFC: [0xBD67], NFD: [0x1107, 0x116D, 0x11AA], NFKC: [0xBD67], NFKD: [0x1107, 0x116D, 0x11AA] }, +{ source: [0xBD68], NFC: [0xBD68], NFD: [0x1107, 0x116D, 0x11AB], NFKC: [0xBD68], NFKD: [0x1107, 0x116D, 0x11AB] }, +{ source: [0xBD69], NFC: [0xBD69], NFD: [0x1107, 0x116D, 0x11AC], NFKC: [0xBD69], NFKD: [0x1107, 0x116D, 0x11AC] }, +{ source: [0xBD6A], NFC: [0xBD6A], NFD: [0x1107, 0x116D, 0x11AD], NFKC: [0xBD6A], NFKD: [0x1107, 0x116D, 0x11AD] }, +{ source: [0xBD6B], NFC: [0xBD6B], NFD: [0x1107, 0x116D, 0x11AE], NFKC: [0xBD6B], NFKD: [0x1107, 0x116D, 0x11AE] }, +{ source: [0xBD6C], NFC: [0xBD6C], NFD: [0x1107, 0x116D, 0x11AF], NFKC: [0xBD6C], NFKD: [0x1107, 0x116D, 0x11AF] }, +{ source: [0xBD6D], NFC: [0xBD6D], NFD: [0x1107, 0x116D, 0x11B0], NFKC: [0xBD6D], NFKD: [0x1107, 0x116D, 0x11B0] }, +{ source: [0xBD6E], NFC: [0xBD6E], NFD: [0x1107, 0x116D, 0x11B1], NFKC: [0xBD6E], NFKD: [0x1107, 0x116D, 0x11B1] }, +{ source: [0xBD6F], NFC: [0xBD6F], NFD: [0x1107, 0x116D, 0x11B2], NFKC: [0xBD6F], NFKD: [0x1107, 0x116D, 0x11B2] }, +{ source: [0xBD70], NFC: [0xBD70], NFD: [0x1107, 0x116D, 0x11B3], NFKC: [0xBD70], NFKD: [0x1107, 0x116D, 0x11B3] }, +{ source: [0xBD71], NFC: [0xBD71], NFD: [0x1107, 0x116D, 0x11B4], NFKC: [0xBD71], NFKD: [0x1107, 0x116D, 0x11B4] }, +{ source: [0xBD72], NFC: [0xBD72], NFD: [0x1107, 0x116D, 0x11B5], NFKC: [0xBD72], NFKD: [0x1107, 0x116D, 0x11B5] }, +{ source: [0xBD73], NFC: [0xBD73], NFD: [0x1107, 0x116D, 0x11B6], NFKC: [0xBD73], NFKD: [0x1107, 0x116D, 0x11B6] }, +{ source: [0xBD74], NFC: [0xBD74], NFD: [0x1107, 0x116D, 0x11B7], NFKC: [0xBD74], NFKD: [0x1107, 0x116D, 0x11B7] }, +{ source: [0xBD75], NFC: [0xBD75], NFD: [0x1107, 0x116D, 0x11B8], NFKC: [0xBD75], NFKD: [0x1107, 0x116D, 0x11B8] }, +{ source: [0xBD76], NFC: [0xBD76], NFD: [0x1107, 0x116D, 0x11B9], NFKC: [0xBD76], NFKD: [0x1107, 0x116D, 0x11B9] }, +{ source: [0xBD77], NFC: [0xBD77], NFD: [0x1107, 0x116D, 0x11BA], NFKC: [0xBD77], NFKD: [0x1107, 0x116D, 0x11BA] }, +{ source: [0xBD78], NFC: [0xBD78], NFD: [0x1107, 0x116D, 0x11BB], NFKC: [0xBD78], NFKD: [0x1107, 0x116D, 0x11BB] }, +{ source: [0xBD79], NFC: [0xBD79], NFD: [0x1107, 0x116D, 0x11BC], NFKC: [0xBD79], NFKD: [0x1107, 0x116D, 0x11BC] }, +{ source: [0xBD7A], NFC: [0xBD7A], NFD: [0x1107, 0x116D, 0x11BD], NFKC: [0xBD7A], NFKD: [0x1107, 0x116D, 0x11BD] }, +{ source: [0xBD7B], NFC: [0xBD7B], NFD: [0x1107, 0x116D, 0x11BE], NFKC: [0xBD7B], NFKD: [0x1107, 0x116D, 0x11BE] }, +{ source: [0xBD7C], NFC: [0xBD7C], NFD: [0x1107, 0x116D, 0x11BF], NFKC: [0xBD7C], NFKD: [0x1107, 0x116D, 0x11BF] }, +{ source: [0xBD7D], NFC: [0xBD7D], NFD: [0x1107, 0x116D, 0x11C0], NFKC: [0xBD7D], NFKD: [0x1107, 0x116D, 0x11C0] }, +{ source: [0xBD7E], NFC: [0xBD7E], NFD: [0x1107, 0x116D, 0x11C1], NFKC: [0xBD7E], NFKD: [0x1107, 0x116D, 0x11C1] }, +{ source: [0xBD7F], NFC: [0xBD7F], NFD: [0x1107, 0x116D, 0x11C2], NFKC: [0xBD7F], NFKD: [0x1107, 0x116D, 0x11C2] }, +{ source: [0xBD80], NFC: [0xBD80], NFD: [0x1107, 0x116E], NFKC: [0xBD80], NFKD: [0x1107, 0x116E] }, +{ source: [0xBD81], NFC: [0xBD81], NFD: [0x1107, 0x116E, 0x11A8], NFKC: [0xBD81], NFKD: [0x1107, 0x116E, 0x11A8] }, +{ source: [0xBD82], NFC: [0xBD82], NFD: [0x1107, 0x116E, 0x11A9], NFKC: [0xBD82], NFKD: [0x1107, 0x116E, 0x11A9] }, +{ source: [0xBD83], NFC: [0xBD83], NFD: [0x1107, 0x116E, 0x11AA], NFKC: [0xBD83], NFKD: [0x1107, 0x116E, 0x11AA] }, +{ source: [0xBD84], NFC: [0xBD84], NFD: [0x1107, 0x116E, 0x11AB], NFKC: [0xBD84], NFKD: [0x1107, 0x116E, 0x11AB] }, +{ source: [0xBD85], NFC: [0xBD85], NFD: [0x1107, 0x116E, 0x11AC], NFKC: [0xBD85], NFKD: [0x1107, 0x116E, 0x11AC] }, +{ source: [0xBD86], NFC: [0xBD86], NFD: [0x1107, 0x116E, 0x11AD], NFKC: [0xBD86], NFKD: [0x1107, 0x116E, 0x11AD] }, +{ source: [0xBD87], NFC: [0xBD87], NFD: [0x1107, 0x116E, 0x11AE], NFKC: [0xBD87], NFKD: [0x1107, 0x116E, 0x11AE] }, +{ source: [0xBD88], NFC: [0xBD88], NFD: [0x1107, 0x116E, 0x11AF], NFKC: [0xBD88], NFKD: [0x1107, 0x116E, 0x11AF] }, +{ source: [0xBD89], NFC: [0xBD89], NFD: [0x1107, 0x116E, 0x11B0], NFKC: [0xBD89], NFKD: [0x1107, 0x116E, 0x11B0] }, +{ source: [0xBD8A], NFC: [0xBD8A], NFD: [0x1107, 0x116E, 0x11B1], NFKC: [0xBD8A], NFKD: [0x1107, 0x116E, 0x11B1] }, +{ source: [0xBD8B], NFC: [0xBD8B], NFD: [0x1107, 0x116E, 0x11B2], NFKC: [0xBD8B], NFKD: [0x1107, 0x116E, 0x11B2] }, +{ source: [0xBD8C], NFC: [0xBD8C], NFD: [0x1107, 0x116E, 0x11B3], NFKC: [0xBD8C], NFKD: [0x1107, 0x116E, 0x11B3] }, +{ source: [0xBD8D], NFC: [0xBD8D], NFD: [0x1107, 0x116E, 0x11B4], NFKC: [0xBD8D], NFKD: [0x1107, 0x116E, 0x11B4] }, +{ source: [0xBD8E], NFC: [0xBD8E], NFD: [0x1107, 0x116E, 0x11B5], NFKC: [0xBD8E], NFKD: [0x1107, 0x116E, 0x11B5] }, +{ source: [0xBD8F], NFC: [0xBD8F], NFD: [0x1107, 0x116E, 0x11B6], NFKC: [0xBD8F], NFKD: [0x1107, 0x116E, 0x11B6] }, +{ source: [0xBD90], NFC: [0xBD90], NFD: [0x1107, 0x116E, 0x11B7], NFKC: [0xBD90], NFKD: [0x1107, 0x116E, 0x11B7] }, +{ source: [0xBD91], NFC: [0xBD91], NFD: [0x1107, 0x116E, 0x11B8], NFKC: [0xBD91], NFKD: [0x1107, 0x116E, 0x11B8] }, +{ source: [0xBD92], NFC: [0xBD92], NFD: [0x1107, 0x116E, 0x11B9], NFKC: [0xBD92], NFKD: [0x1107, 0x116E, 0x11B9] }, +{ source: [0xBD93], NFC: [0xBD93], NFD: [0x1107, 0x116E, 0x11BA], NFKC: [0xBD93], NFKD: [0x1107, 0x116E, 0x11BA] }, +{ source: [0xBD94], NFC: [0xBD94], NFD: [0x1107, 0x116E, 0x11BB], NFKC: [0xBD94], NFKD: [0x1107, 0x116E, 0x11BB] }, +{ source: [0xBD95], NFC: [0xBD95], NFD: [0x1107, 0x116E, 0x11BC], NFKC: [0xBD95], NFKD: [0x1107, 0x116E, 0x11BC] }, +{ source: [0xBD96], NFC: [0xBD96], NFD: [0x1107, 0x116E, 0x11BD], NFKC: [0xBD96], NFKD: [0x1107, 0x116E, 0x11BD] }, +{ source: [0xBD97], NFC: [0xBD97], NFD: [0x1107, 0x116E, 0x11BE], NFKC: [0xBD97], NFKD: [0x1107, 0x116E, 0x11BE] }, +{ source: [0xBD98], NFC: [0xBD98], NFD: [0x1107, 0x116E, 0x11BF], NFKC: [0xBD98], NFKD: [0x1107, 0x116E, 0x11BF] }, +{ source: [0xBD99], NFC: [0xBD99], NFD: [0x1107, 0x116E, 0x11C0], NFKC: [0xBD99], NFKD: [0x1107, 0x116E, 0x11C0] }, +{ source: [0xBD9A], NFC: [0xBD9A], NFD: [0x1107, 0x116E, 0x11C1], NFKC: [0xBD9A], NFKD: [0x1107, 0x116E, 0x11C1] }, +{ source: [0xBD9B], NFC: [0xBD9B], NFD: [0x1107, 0x116E, 0x11C2], NFKC: [0xBD9B], NFKD: [0x1107, 0x116E, 0x11C2] }, +{ source: [0xBD9C], NFC: [0xBD9C], NFD: [0x1107, 0x116F], NFKC: [0xBD9C], NFKD: [0x1107, 0x116F] }, +{ source: [0xBD9D], NFC: [0xBD9D], NFD: [0x1107, 0x116F, 0x11A8], NFKC: [0xBD9D], NFKD: [0x1107, 0x116F, 0x11A8] }, +{ source: [0xBD9E], NFC: [0xBD9E], NFD: [0x1107, 0x116F, 0x11A9], NFKC: [0xBD9E], NFKD: [0x1107, 0x116F, 0x11A9] }, +{ source: [0xBD9F], NFC: [0xBD9F], NFD: [0x1107, 0x116F, 0x11AA], NFKC: [0xBD9F], NFKD: [0x1107, 0x116F, 0x11AA] }, +{ source: [0xBDA0], NFC: [0xBDA0], NFD: [0x1107, 0x116F, 0x11AB], NFKC: [0xBDA0], NFKD: [0x1107, 0x116F, 0x11AB] }, +{ source: [0xBDA1], NFC: [0xBDA1], NFD: [0x1107, 0x116F, 0x11AC], NFKC: [0xBDA1], NFKD: [0x1107, 0x116F, 0x11AC] }, +{ source: [0xBDA2], NFC: [0xBDA2], NFD: [0x1107, 0x116F, 0x11AD], NFKC: [0xBDA2], NFKD: [0x1107, 0x116F, 0x11AD] }, +{ source: [0xBDA3], NFC: [0xBDA3], NFD: [0x1107, 0x116F, 0x11AE], NFKC: [0xBDA3], NFKD: [0x1107, 0x116F, 0x11AE] }, +{ source: [0xBDA4], NFC: [0xBDA4], NFD: [0x1107, 0x116F, 0x11AF], NFKC: [0xBDA4], NFKD: [0x1107, 0x116F, 0x11AF] }, +{ source: [0xBDA5], NFC: [0xBDA5], NFD: [0x1107, 0x116F, 0x11B0], NFKC: [0xBDA5], NFKD: [0x1107, 0x116F, 0x11B0] }, +{ source: [0xBDA6], NFC: [0xBDA6], NFD: [0x1107, 0x116F, 0x11B1], NFKC: [0xBDA6], NFKD: [0x1107, 0x116F, 0x11B1] }, +{ source: [0xBDA7], NFC: [0xBDA7], NFD: [0x1107, 0x116F, 0x11B2], NFKC: [0xBDA7], NFKD: [0x1107, 0x116F, 0x11B2] }, +{ source: [0xBDA8], NFC: [0xBDA8], NFD: [0x1107, 0x116F, 0x11B3], NFKC: [0xBDA8], NFKD: [0x1107, 0x116F, 0x11B3] }, +{ source: [0xBDA9], NFC: [0xBDA9], NFD: [0x1107, 0x116F, 0x11B4], NFKC: [0xBDA9], NFKD: [0x1107, 0x116F, 0x11B4] }, +{ source: [0xBDAA], NFC: [0xBDAA], NFD: [0x1107, 0x116F, 0x11B5], NFKC: [0xBDAA], NFKD: [0x1107, 0x116F, 0x11B5] }, +{ source: [0xBDAB], NFC: [0xBDAB], NFD: [0x1107, 0x116F, 0x11B6], NFKC: [0xBDAB], NFKD: [0x1107, 0x116F, 0x11B6] }, +{ source: [0xBDAC], NFC: [0xBDAC], NFD: [0x1107, 0x116F, 0x11B7], NFKC: [0xBDAC], NFKD: [0x1107, 0x116F, 0x11B7] }, +{ source: [0xBDAD], NFC: [0xBDAD], NFD: [0x1107, 0x116F, 0x11B8], NFKC: [0xBDAD], NFKD: [0x1107, 0x116F, 0x11B8] }, +{ source: [0xBDAE], NFC: [0xBDAE], NFD: [0x1107, 0x116F, 0x11B9], NFKC: [0xBDAE], NFKD: [0x1107, 0x116F, 0x11B9] }, +{ source: [0xBDAF], NFC: [0xBDAF], NFD: [0x1107, 0x116F, 0x11BA], NFKC: [0xBDAF], NFKD: [0x1107, 0x116F, 0x11BA] }, +{ source: [0xBDB0], NFC: [0xBDB0], NFD: [0x1107, 0x116F, 0x11BB], NFKC: [0xBDB0], NFKD: [0x1107, 0x116F, 0x11BB] }, +{ source: [0xBDB1], NFC: [0xBDB1], NFD: [0x1107, 0x116F, 0x11BC], NFKC: [0xBDB1], NFKD: [0x1107, 0x116F, 0x11BC] }, +{ source: [0xBDB2], NFC: [0xBDB2], NFD: [0x1107, 0x116F, 0x11BD], NFKC: [0xBDB2], NFKD: [0x1107, 0x116F, 0x11BD] }, +{ source: [0xBDB3], NFC: [0xBDB3], NFD: [0x1107, 0x116F, 0x11BE], NFKC: [0xBDB3], NFKD: [0x1107, 0x116F, 0x11BE] }, +{ source: [0xBDB4], NFC: [0xBDB4], NFD: [0x1107, 0x116F, 0x11BF], NFKC: [0xBDB4], NFKD: [0x1107, 0x116F, 0x11BF] }, +{ source: [0xBDB5], NFC: [0xBDB5], NFD: [0x1107, 0x116F, 0x11C0], NFKC: [0xBDB5], NFKD: [0x1107, 0x116F, 0x11C0] }, +{ source: [0xBDB6], NFC: [0xBDB6], NFD: [0x1107, 0x116F, 0x11C1], NFKC: [0xBDB6], NFKD: [0x1107, 0x116F, 0x11C1] }, +{ source: [0xBDB7], NFC: [0xBDB7], NFD: [0x1107, 0x116F, 0x11C2], NFKC: [0xBDB7], NFKD: [0x1107, 0x116F, 0x11C2] }, +{ source: [0xBDB8], NFC: [0xBDB8], NFD: [0x1107, 0x1170], NFKC: [0xBDB8], NFKD: [0x1107, 0x1170] }, +{ source: [0xBDB9], NFC: [0xBDB9], NFD: [0x1107, 0x1170, 0x11A8], NFKC: [0xBDB9], NFKD: [0x1107, 0x1170, 0x11A8] }, +{ source: [0xBDBA], NFC: [0xBDBA], NFD: [0x1107, 0x1170, 0x11A9], NFKC: [0xBDBA], NFKD: [0x1107, 0x1170, 0x11A9] }, +{ source: [0xBDBB], NFC: [0xBDBB], NFD: [0x1107, 0x1170, 0x11AA], NFKC: [0xBDBB], NFKD: [0x1107, 0x1170, 0x11AA] }, +{ source: [0xBDBC], NFC: [0xBDBC], NFD: [0x1107, 0x1170, 0x11AB], NFKC: [0xBDBC], NFKD: [0x1107, 0x1170, 0x11AB] }, +{ source: [0xBDBD], NFC: [0xBDBD], NFD: [0x1107, 0x1170, 0x11AC], NFKC: [0xBDBD], NFKD: [0x1107, 0x1170, 0x11AC] }, +{ source: [0xBDBE], NFC: [0xBDBE], NFD: [0x1107, 0x1170, 0x11AD], NFKC: [0xBDBE], NFKD: [0x1107, 0x1170, 0x11AD] }, +{ source: [0xBDBF], NFC: [0xBDBF], NFD: [0x1107, 0x1170, 0x11AE], NFKC: [0xBDBF], NFKD: [0x1107, 0x1170, 0x11AE] }, +{ source: [0xBDC0], NFC: [0xBDC0], NFD: [0x1107, 0x1170, 0x11AF], NFKC: [0xBDC0], NFKD: [0x1107, 0x1170, 0x11AF] }, +{ source: [0xBDC1], NFC: [0xBDC1], NFD: [0x1107, 0x1170, 0x11B0], NFKC: [0xBDC1], NFKD: [0x1107, 0x1170, 0x11B0] }, +{ source: [0xBDC2], NFC: [0xBDC2], NFD: [0x1107, 0x1170, 0x11B1], NFKC: [0xBDC2], NFKD: [0x1107, 0x1170, 0x11B1] }, +{ source: [0xBDC3], NFC: [0xBDC3], NFD: [0x1107, 0x1170, 0x11B2], NFKC: [0xBDC3], NFKD: [0x1107, 0x1170, 0x11B2] }, +{ source: [0xBDC4], NFC: [0xBDC4], NFD: [0x1107, 0x1170, 0x11B3], NFKC: [0xBDC4], NFKD: [0x1107, 0x1170, 0x11B3] }, +{ source: [0xBDC5], NFC: [0xBDC5], NFD: [0x1107, 0x1170, 0x11B4], NFKC: [0xBDC5], NFKD: [0x1107, 0x1170, 0x11B4] }, +{ source: [0xBDC6], NFC: [0xBDC6], NFD: [0x1107, 0x1170, 0x11B5], NFKC: [0xBDC6], NFKD: [0x1107, 0x1170, 0x11B5] }, +{ source: [0xBDC7], NFC: [0xBDC7], NFD: [0x1107, 0x1170, 0x11B6], NFKC: [0xBDC7], NFKD: [0x1107, 0x1170, 0x11B6] }, +{ source: [0xBDC8], NFC: [0xBDC8], NFD: [0x1107, 0x1170, 0x11B7], NFKC: [0xBDC8], NFKD: [0x1107, 0x1170, 0x11B7] }, +{ source: [0xBDC9], NFC: [0xBDC9], NFD: [0x1107, 0x1170, 0x11B8], NFKC: [0xBDC9], NFKD: [0x1107, 0x1170, 0x11B8] }, +{ source: [0xBDCA], NFC: [0xBDCA], NFD: [0x1107, 0x1170, 0x11B9], NFKC: [0xBDCA], NFKD: [0x1107, 0x1170, 0x11B9] }, +{ source: [0xBDCB], NFC: [0xBDCB], NFD: [0x1107, 0x1170, 0x11BA], NFKC: [0xBDCB], NFKD: [0x1107, 0x1170, 0x11BA] }, +{ source: [0xBDCC], NFC: [0xBDCC], NFD: [0x1107, 0x1170, 0x11BB], NFKC: [0xBDCC], NFKD: [0x1107, 0x1170, 0x11BB] }, +{ source: [0xBDCD], NFC: [0xBDCD], NFD: [0x1107, 0x1170, 0x11BC], NFKC: [0xBDCD], NFKD: [0x1107, 0x1170, 0x11BC] }, +{ source: [0xBDCE], NFC: [0xBDCE], NFD: [0x1107, 0x1170, 0x11BD], NFKC: [0xBDCE], NFKD: [0x1107, 0x1170, 0x11BD] }, +{ source: [0xBDCF], NFC: [0xBDCF], NFD: [0x1107, 0x1170, 0x11BE], NFKC: [0xBDCF], NFKD: [0x1107, 0x1170, 0x11BE] }, +{ source: [0xBDD0], NFC: [0xBDD0], NFD: [0x1107, 0x1170, 0x11BF], NFKC: [0xBDD0], NFKD: [0x1107, 0x1170, 0x11BF] }, +{ source: [0xBDD1], NFC: [0xBDD1], NFD: [0x1107, 0x1170, 0x11C0], NFKC: [0xBDD1], NFKD: [0x1107, 0x1170, 0x11C0] }, +{ source: [0xBDD2], NFC: [0xBDD2], NFD: [0x1107, 0x1170, 0x11C1], NFKC: [0xBDD2], NFKD: [0x1107, 0x1170, 0x11C1] }, +{ source: [0xBDD3], NFC: [0xBDD3], NFD: [0x1107, 0x1170, 0x11C2], NFKC: [0xBDD3], NFKD: [0x1107, 0x1170, 0x11C2] }, +{ source: [0xBDD4], NFC: [0xBDD4], NFD: [0x1107, 0x1171], NFKC: [0xBDD4], NFKD: [0x1107, 0x1171] }, +{ source: [0xBDD5], NFC: [0xBDD5], NFD: [0x1107, 0x1171, 0x11A8], NFKC: [0xBDD5], NFKD: [0x1107, 0x1171, 0x11A8] }, +{ source: [0xBDD6], NFC: [0xBDD6], NFD: [0x1107, 0x1171, 0x11A9], NFKC: [0xBDD6], NFKD: [0x1107, 0x1171, 0x11A9] }, +{ source: [0xBDD7], NFC: [0xBDD7], NFD: [0x1107, 0x1171, 0x11AA], NFKC: [0xBDD7], NFKD: [0x1107, 0x1171, 0x11AA] }, +{ source: [0xBDD8], NFC: [0xBDD8], NFD: [0x1107, 0x1171, 0x11AB], NFKC: [0xBDD8], NFKD: [0x1107, 0x1171, 0x11AB] }, +{ source: [0xBDD9], NFC: [0xBDD9], NFD: [0x1107, 0x1171, 0x11AC], NFKC: [0xBDD9], NFKD: [0x1107, 0x1171, 0x11AC] }, +{ source: [0xBDDA], NFC: [0xBDDA], NFD: [0x1107, 0x1171, 0x11AD], NFKC: [0xBDDA], NFKD: [0x1107, 0x1171, 0x11AD] }, +{ source: [0xBDDB], NFC: [0xBDDB], NFD: [0x1107, 0x1171, 0x11AE], NFKC: [0xBDDB], NFKD: [0x1107, 0x1171, 0x11AE] }, +{ source: [0xBDDC], NFC: [0xBDDC], NFD: [0x1107, 0x1171, 0x11AF], NFKC: [0xBDDC], NFKD: [0x1107, 0x1171, 0x11AF] }, +{ source: [0xBDDD], NFC: [0xBDDD], NFD: [0x1107, 0x1171, 0x11B0], NFKC: [0xBDDD], NFKD: [0x1107, 0x1171, 0x11B0] }, +{ source: [0xBDDE], NFC: [0xBDDE], NFD: [0x1107, 0x1171, 0x11B1], NFKC: [0xBDDE], NFKD: [0x1107, 0x1171, 0x11B1] }, +{ source: [0xBDDF], NFC: [0xBDDF], NFD: [0x1107, 0x1171, 0x11B2], NFKC: [0xBDDF], NFKD: [0x1107, 0x1171, 0x11B2] }, +{ source: [0xBDE0], NFC: [0xBDE0], NFD: [0x1107, 0x1171, 0x11B3], NFKC: [0xBDE0], NFKD: [0x1107, 0x1171, 0x11B3] }, +{ source: [0xBDE1], NFC: [0xBDE1], NFD: [0x1107, 0x1171, 0x11B4], NFKC: [0xBDE1], NFKD: [0x1107, 0x1171, 0x11B4] }, +{ source: [0xBDE2], NFC: [0xBDE2], NFD: [0x1107, 0x1171, 0x11B5], NFKC: [0xBDE2], NFKD: [0x1107, 0x1171, 0x11B5] }, +{ source: [0xBDE3], NFC: [0xBDE3], NFD: [0x1107, 0x1171, 0x11B6], NFKC: [0xBDE3], NFKD: [0x1107, 0x1171, 0x11B6] }, +{ source: [0xBDE4], NFC: [0xBDE4], NFD: [0x1107, 0x1171, 0x11B7], NFKC: [0xBDE4], NFKD: [0x1107, 0x1171, 0x11B7] }, +{ source: [0xBDE5], NFC: [0xBDE5], NFD: [0x1107, 0x1171, 0x11B8], NFKC: [0xBDE5], NFKD: [0x1107, 0x1171, 0x11B8] }, +{ source: [0xBDE6], NFC: [0xBDE6], NFD: [0x1107, 0x1171, 0x11B9], NFKC: [0xBDE6], NFKD: [0x1107, 0x1171, 0x11B9] }, +{ source: [0xBDE7], NFC: [0xBDE7], NFD: [0x1107, 0x1171, 0x11BA], NFKC: [0xBDE7], NFKD: [0x1107, 0x1171, 0x11BA] }, +{ source: [0xBDE8], NFC: [0xBDE8], NFD: [0x1107, 0x1171, 0x11BB], NFKC: [0xBDE8], NFKD: [0x1107, 0x1171, 0x11BB] }, +{ source: [0xBDE9], NFC: [0xBDE9], NFD: [0x1107, 0x1171, 0x11BC], NFKC: [0xBDE9], NFKD: [0x1107, 0x1171, 0x11BC] }, +{ source: [0xBDEA], NFC: [0xBDEA], NFD: [0x1107, 0x1171, 0x11BD], NFKC: [0xBDEA], NFKD: [0x1107, 0x1171, 0x11BD] }, +{ source: [0xBDEB], NFC: [0xBDEB], NFD: [0x1107, 0x1171, 0x11BE], NFKC: [0xBDEB], NFKD: [0x1107, 0x1171, 0x11BE] }, +{ source: [0xBDEC], NFC: [0xBDEC], NFD: [0x1107, 0x1171, 0x11BF], NFKC: [0xBDEC], NFKD: [0x1107, 0x1171, 0x11BF] }, +{ source: [0xBDED], NFC: [0xBDED], NFD: [0x1107, 0x1171, 0x11C0], NFKC: [0xBDED], NFKD: [0x1107, 0x1171, 0x11C0] }, +{ source: [0xBDEE], NFC: [0xBDEE], NFD: [0x1107, 0x1171, 0x11C1], NFKC: [0xBDEE], NFKD: [0x1107, 0x1171, 0x11C1] }, +{ source: [0xBDEF], NFC: [0xBDEF], NFD: [0x1107, 0x1171, 0x11C2], NFKC: [0xBDEF], NFKD: [0x1107, 0x1171, 0x11C2] }, +{ source: [0xBDF0], NFC: [0xBDF0], NFD: [0x1107, 0x1172], NFKC: [0xBDF0], NFKD: [0x1107, 0x1172] }, +{ source: [0xBDF1], NFC: [0xBDF1], NFD: [0x1107, 0x1172, 0x11A8], NFKC: [0xBDF1], NFKD: [0x1107, 0x1172, 0x11A8] }, +{ source: [0xBDF2], NFC: [0xBDF2], NFD: [0x1107, 0x1172, 0x11A9], NFKC: [0xBDF2], NFKD: [0x1107, 0x1172, 0x11A9] }, +{ source: [0xBDF3], NFC: [0xBDF3], NFD: [0x1107, 0x1172, 0x11AA], NFKC: [0xBDF3], NFKD: [0x1107, 0x1172, 0x11AA] }, +{ source: [0xBDF4], NFC: [0xBDF4], NFD: [0x1107, 0x1172, 0x11AB], NFKC: [0xBDF4], NFKD: [0x1107, 0x1172, 0x11AB] }, +{ source: [0xBDF5], NFC: [0xBDF5], NFD: [0x1107, 0x1172, 0x11AC], NFKC: [0xBDF5], NFKD: [0x1107, 0x1172, 0x11AC] }, +{ source: [0xBDF6], NFC: [0xBDF6], NFD: [0x1107, 0x1172, 0x11AD], NFKC: [0xBDF6], NFKD: [0x1107, 0x1172, 0x11AD] }, +{ source: [0xBDF7], NFC: [0xBDF7], NFD: [0x1107, 0x1172, 0x11AE], NFKC: [0xBDF7], NFKD: [0x1107, 0x1172, 0x11AE] }, +{ source: [0xBDF8], NFC: [0xBDF8], NFD: [0x1107, 0x1172, 0x11AF], NFKC: [0xBDF8], NFKD: [0x1107, 0x1172, 0x11AF] }, +{ source: [0xBDF9], NFC: [0xBDF9], NFD: [0x1107, 0x1172, 0x11B0], NFKC: [0xBDF9], NFKD: [0x1107, 0x1172, 0x11B0] }, +{ source: [0xBDFA], NFC: [0xBDFA], NFD: [0x1107, 0x1172, 0x11B1], NFKC: [0xBDFA], NFKD: [0x1107, 0x1172, 0x11B1] }, +{ source: [0xBDFB], NFC: [0xBDFB], NFD: [0x1107, 0x1172, 0x11B2], NFKC: [0xBDFB], NFKD: [0x1107, 0x1172, 0x11B2] }, +{ source: [0xBDFC], NFC: [0xBDFC], NFD: [0x1107, 0x1172, 0x11B3], NFKC: [0xBDFC], NFKD: [0x1107, 0x1172, 0x11B3] }, +{ source: [0xBDFD], NFC: [0xBDFD], NFD: [0x1107, 0x1172, 0x11B4], NFKC: [0xBDFD], NFKD: [0x1107, 0x1172, 0x11B4] }, +{ source: [0xBDFE], NFC: [0xBDFE], NFD: [0x1107, 0x1172, 0x11B5], NFKC: [0xBDFE], NFKD: [0x1107, 0x1172, 0x11B5] }, +{ source: [0xBDFF], NFC: [0xBDFF], NFD: [0x1107, 0x1172, 0x11B6], NFKC: [0xBDFF], NFKD: [0x1107, 0x1172, 0x11B6] }, +{ source: [0xBE00], NFC: [0xBE00], NFD: [0x1107, 0x1172, 0x11B7], NFKC: [0xBE00], NFKD: [0x1107, 0x1172, 0x11B7] }, +{ source: [0xBE01], NFC: [0xBE01], NFD: [0x1107, 0x1172, 0x11B8], NFKC: [0xBE01], NFKD: [0x1107, 0x1172, 0x11B8] }, +{ source: [0xBE02], NFC: [0xBE02], NFD: [0x1107, 0x1172, 0x11B9], NFKC: [0xBE02], NFKD: [0x1107, 0x1172, 0x11B9] }, +{ source: [0xBE03], NFC: [0xBE03], NFD: [0x1107, 0x1172, 0x11BA], NFKC: [0xBE03], NFKD: [0x1107, 0x1172, 0x11BA] }, +{ source: [0xBE04], NFC: [0xBE04], NFD: [0x1107, 0x1172, 0x11BB], NFKC: [0xBE04], NFKD: [0x1107, 0x1172, 0x11BB] }, +{ source: [0xBE05], NFC: [0xBE05], NFD: [0x1107, 0x1172, 0x11BC], NFKC: [0xBE05], NFKD: [0x1107, 0x1172, 0x11BC] }, +{ source: [0xBE06], NFC: [0xBE06], NFD: [0x1107, 0x1172, 0x11BD], NFKC: [0xBE06], NFKD: [0x1107, 0x1172, 0x11BD] }, +{ source: [0xBE07], NFC: [0xBE07], NFD: [0x1107, 0x1172, 0x11BE], NFKC: [0xBE07], NFKD: [0x1107, 0x1172, 0x11BE] }, +{ source: [0xBE08], NFC: [0xBE08], NFD: [0x1107, 0x1172, 0x11BF], NFKC: [0xBE08], NFKD: [0x1107, 0x1172, 0x11BF] }, +{ source: [0xBE09], NFC: [0xBE09], NFD: [0x1107, 0x1172, 0x11C0], NFKC: [0xBE09], NFKD: [0x1107, 0x1172, 0x11C0] }, +{ source: [0xBE0A], NFC: [0xBE0A], NFD: [0x1107, 0x1172, 0x11C1], NFKC: [0xBE0A], NFKD: [0x1107, 0x1172, 0x11C1] }, +{ source: [0xBE0B], NFC: [0xBE0B], NFD: [0x1107, 0x1172, 0x11C2], NFKC: [0xBE0B], NFKD: [0x1107, 0x1172, 0x11C2] }, +{ source: [0xBE0C], NFC: [0xBE0C], NFD: [0x1107, 0x1173], NFKC: [0xBE0C], NFKD: [0x1107, 0x1173] }, +{ source: [0xBE0D], NFC: [0xBE0D], NFD: [0x1107, 0x1173, 0x11A8], NFKC: [0xBE0D], NFKD: [0x1107, 0x1173, 0x11A8] }, +{ source: [0xBE0E], NFC: [0xBE0E], NFD: [0x1107, 0x1173, 0x11A9], NFKC: [0xBE0E], NFKD: [0x1107, 0x1173, 0x11A9] }, +{ source: [0xBE0F], NFC: [0xBE0F], NFD: [0x1107, 0x1173, 0x11AA], NFKC: [0xBE0F], NFKD: [0x1107, 0x1173, 0x11AA] }, +{ source: [0xBE10], NFC: [0xBE10], NFD: [0x1107, 0x1173, 0x11AB], NFKC: [0xBE10], NFKD: [0x1107, 0x1173, 0x11AB] }, +{ source: [0xBE11], NFC: [0xBE11], NFD: [0x1107, 0x1173, 0x11AC], NFKC: [0xBE11], NFKD: [0x1107, 0x1173, 0x11AC] }, +{ source: [0xBE12], NFC: [0xBE12], NFD: [0x1107, 0x1173, 0x11AD], NFKC: [0xBE12], NFKD: [0x1107, 0x1173, 0x11AD] }, +{ source: [0xBE13], NFC: [0xBE13], NFD: [0x1107, 0x1173, 0x11AE], NFKC: [0xBE13], NFKD: [0x1107, 0x1173, 0x11AE] }, +{ source: [0xBE14], NFC: [0xBE14], NFD: [0x1107, 0x1173, 0x11AF], NFKC: [0xBE14], NFKD: [0x1107, 0x1173, 0x11AF] }, +{ source: [0xBE15], NFC: [0xBE15], NFD: [0x1107, 0x1173, 0x11B0], NFKC: [0xBE15], NFKD: [0x1107, 0x1173, 0x11B0] }, +{ source: [0xBE16], NFC: [0xBE16], NFD: [0x1107, 0x1173, 0x11B1], NFKC: [0xBE16], NFKD: [0x1107, 0x1173, 0x11B1] }, +{ source: [0xBE17], NFC: [0xBE17], NFD: [0x1107, 0x1173, 0x11B2], NFKC: [0xBE17], NFKD: [0x1107, 0x1173, 0x11B2] }, +{ source: [0xBE18], NFC: [0xBE18], NFD: [0x1107, 0x1173, 0x11B3], NFKC: [0xBE18], NFKD: [0x1107, 0x1173, 0x11B3] }, +{ source: [0xBE19], NFC: [0xBE19], NFD: [0x1107, 0x1173, 0x11B4], NFKC: [0xBE19], NFKD: [0x1107, 0x1173, 0x11B4] }, +{ source: [0xBE1A], NFC: [0xBE1A], NFD: [0x1107, 0x1173, 0x11B5], NFKC: [0xBE1A], NFKD: [0x1107, 0x1173, 0x11B5] }, +{ source: [0xBE1B], NFC: [0xBE1B], NFD: [0x1107, 0x1173, 0x11B6], NFKC: [0xBE1B], NFKD: [0x1107, 0x1173, 0x11B6] }, +{ source: [0xBE1C], NFC: [0xBE1C], NFD: [0x1107, 0x1173, 0x11B7], NFKC: [0xBE1C], NFKD: [0x1107, 0x1173, 0x11B7] }, +{ source: [0xBE1D], NFC: [0xBE1D], NFD: [0x1107, 0x1173, 0x11B8], NFKC: [0xBE1D], NFKD: [0x1107, 0x1173, 0x11B8] }, +{ source: [0xBE1E], NFC: [0xBE1E], NFD: [0x1107, 0x1173, 0x11B9], NFKC: [0xBE1E], NFKD: [0x1107, 0x1173, 0x11B9] }, +{ source: [0xBE1F], NFC: [0xBE1F], NFD: [0x1107, 0x1173, 0x11BA], NFKC: [0xBE1F], NFKD: [0x1107, 0x1173, 0x11BA] }, +{ source: [0xBE20], NFC: [0xBE20], NFD: [0x1107, 0x1173, 0x11BB], NFKC: [0xBE20], NFKD: [0x1107, 0x1173, 0x11BB] }, +{ source: [0xBE21], NFC: [0xBE21], NFD: [0x1107, 0x1173, 0x11BC], NFKC: [0xBE21], NFKD: [0x1107, 0x1173, 0x11BC] }, +{ source: [0xBE22], NFC: [0xBE22], NFD: [0x1107, 0x1173, 0x11BD], NFKC: [0xBE22], NFKD: [0x1107, 0x1173, 0x11BD] }, +{ source: [0xBE23], NFC: [0xBE23], NFD: [0x1107, 0x1173, 0x11BE], NFKC: [0xBE23], NFKD: [0x1107, 0x1173, 0x11BE] }, +{ source: [0xBE24], NFC: [0xBE24], NFD: [0x1107, 0x1173, 0x11BF], NFKC: [0xBE24], NFKD: [0x1107, 0x1173, 0x11BF] }, +{ source: [0xBE25], NFC: [0xBE25], NFD: [0x1107, 0x1173, 0x11C0], NFKC: [0xBE25], NFKD: [0x1107, 0x1173, 0x11C0] }, +{ source: [0xBE26], NFC: [0xBE26], NFD: [0x1107, 0x1173, 0x11C1], NFKC: [0xBE26], NFKD: [0x1107, 0x1173, 0x11C1] }, +{ source: [0xBE27], NFC: [0xBE27], NFD: [0x1107, 0x1173, 0x11C2], NFKC: [0xBE27], NFKD: [0x1107, 0x1173, 0x11C2] }, +{ source: [0xBE28], NFC: [0xBE28], NFD: [0x1107, 0x1174], NFKC: [0xBE28], NFKD: [0x1107, 0x1174] }, +{ source: [0xBE29], NFC: [0xBE29], NFD: [0x1107, 0x1174, 0x11A8], NFKC: [0xBE29], NFKD: [0x1107, 0x1174, 0x11A8] }, +{ source: [0xBE2A], NFC: [0xBE2A], NFD: [0x1107, 0x1174, 0x11A9], NFKC: [0xBE2A], NFKD: [0x1107, 0x1174, 0x11A9] }, +{ source: [0xBE2B], NFC: [0xBE2B], NFD: [0x1107, 0x1174, 0x11AA], NFKC: [0xBE2B], NFKD: [0x1107, 0x1174, 0x11AA] }, +{ source: [0xBE2C], NFC: [0xBE2C], NFD: [0x1107, 0x1174, 0x11AB], NFKC: [0xBE2C], NFKD: [0x1107, 0x1174, 0x11AB] }, +{ source: [0xBE2D], NFC: [0xBE2D], NFD: [0x1107, 0x1174, 0x11AC], NFKC: [0xBE2D], NFKD: [0x1107, 0x1174, 0x11AC] }, +{ source: [0xBE2E], NFC: [0xBE2E], NFD: [0x1107, 0x1174, 0x11AD], NFKC: [0xBE2E], NFKD: [0x1107, 0x1174, 0x11AD] }, +{ source: [0xBE2F], NFC: [0xBE2F], NFD: [0x1107, 0x1174, 0x11AE], NFKC: [0xBE2F], NFKD: [0x1107, 0x1174, 0x11AE] }, +{ source: [0xBE30], NFC: [0xBE30], NFD: [0x1107, 0x1174, 0x11AF], NFKC: [0xBE30], NFKD: [0x1107, 0x1174, 0x11AF] }, +{ source: [0xBE31], NFC: [0xBE31], NFD: [0x1107, 0x1174, 0x11B0], NFKC: [0xBE31], NFKD: [0x1107, 0x1174, 0x11B0] }, +{ source: [0xBE32], NFC: [0xBE32], NFD: [0x1107, 0x1174, 0x11B1], NFKC: [0xBE32], NFKD: [0x1107, 0x1174, 0x11B1] }, +{ source: [0xBE33], NFC: [0xBE33], NFD: [0x1107, 0x1174, 0x11B2], NFKC: [0xBE33], NFKD: [0x1107, 0x1174, 0x11B2] }, +{ source: [0xBE34], NFC: [0xBE34], NFD: [0x1107, 0x1174, 0x11B3], NFKC: [0xBE34], NFKD: [0x1107, 0x1174, 0x11B3] }, +{ source: [0xBE35], NFC: [0xBE35], NFD: [0x1107, 0x1174, 0x11B4], NFKC: [0xBE35], NFKD: [0x1107, 0x1174, 0x11B4] }, +{ source: [0xBE36], NFC: [0xBE36], NFD: [0x1107, 0x1174, 0x11B5], NFKC: [0xBE36], NFKD: [0x1107, 0x1174, 0x11B5] }, +{ source: [0xBE37], NFC: [0xBE37], NFD: [0x1107, 0x1174, 0x11B6], NFKC: [0xBE37], NFKD: [0x1107, 0x1174, 0x11B6] }, +{ source: [0xBE38], NFC: [0xBE38], NFD: [0x1107, 0x1174, 0x11B7], NFKC: [0xBE38], NFKD: [0x1107, 0x1174, 0x11B7] }, +{ source: [0xBE39], NFC: [0xBE39], NFD: [0x1107, 0x1174, 0x11B8], NFKC: [0xBE39], NFKD: [0x1107, 0x1174, 0x11B8] }, +{ source: [0xBE3A], NFC: [0xBE3A], NFD: [0x1107, 0x1174, 0x11B9], NFKC: [0xBE3A], NFKD: [0x1107, 0x1174, 0x11B9] }, +{ source: [0xBE3B], NFC: [0xBE3B], NFD: [0x1107, 0x1174, 0x11BA], NFKC: [0xBE3B], NFKD: [0x1107, 0x1174, 0x11BA] }, +{ source: [0xBE3C], NFC: [0xBE3C], NFD: [0x1107, 0x1174, 0x11BB], NFKC: [0xBE3C], NFKD: [0x1107, 0x1174, 0x11BB] }, +{ source: [0xBE3D], NFC: [0xBE3D], NFD: [0x1107, 0x1174, 0x11BC], NFKC: [0xBE3D], NFKD: [0x1107, 0x1174, 0x11BC] }, +{ source: [0xBE3E], NFC: [0xBE3E], NFD: [0x1107, 0x1174, 0x11BD], NFKC: [0xBE3E], NFKD: [0x1107, 0x1174, 0x11BD] }, +{ source: [0xBE3F], NFC: [0xBE3F], NFD: [0x1107, 0x1174, 0x11BE], NFKC: [0xBE3F], NFKD: [0x1107, 0x1174, 0x11BE] }, +{ source: [0xBE40], NFC: [0xBE40], NFD: [0x1107, 0x1174, 0x11BF], NFKC: [0xBE40], NFKD: [0x1107, 0x1174, 0x11BF] }, +{ source: [0xBE41], NFC: [0xBE41], NFD: [0x1107, 0x1174, 0x11C0], NFKC: [0xBE41], NFKD: [0x1107, 0x1174, 0x11C0] }, +{ source: [0xBE42], NFC: [0xBE42], NFD: [0x1107, 0x1174, 0x11C1], NFKC: [0xBE42], NFKD: [0x1107, 0x1174, 0x11C1] }, +{ source: [0xBE43], NFC: [0xBE43], NFD: [0x1107, 0x1174, 0x11C2], NFKC: [0xBE43], NFKD: [0x1107, 0x1174, 0x11C2] }, +{ source: [0xBE44], NFC: [0xBE44], NFD: [0x1107, 0x1175], NFKC: [0xBE44], NFKD: [0x1107, 0x1175] }, +{ source: [0xBE45], NFC: [0xBE45], NFD: [0x1107, 0x1175, 0x11A8], NFKC: [0xBE45], NFKD: [0x1107, 0x1175, 0x11A8] }, +{ source: [0xBE46], NFC: [0xBE46], NFD: [0x1107, 0x1175, 0x11A9], NFKC: [0xBE46], NFKD: [0x1107, 0x1175, 0x11A9] }, +{ source: [0xBE47], NFC: [0xBE47], NFD: [0x1107, 0x1175, 0x11AA], NFKC: [0xBE47], NFKD: [0x1107, 0x1175, 0x11AA] }, +{ source: [0xBE48], NFC: [0xBE48], NFD: [0x1107, 0x1175, 0x11AB], NFKC: [0xBE48], NFKD: [0x1107, 0x1175, 0x11AB] }, +{ source: [0xBE49], NFC: [0xBE49], NFD: [0x1107, 0x1175, 0x11AC], NFKC: [0xBE49], NFKD: [0x1107, 0x1175, 0x11AC] }, +{ source: [0xBE4A], NFC: [0xBE4A], NFD: [0x1107, 0x1175, 0x11AD], NFKC: [0xBE4A], NFKD: [0x1107, 0x1175, 0x11AD] }, +{ source: [0xBE4B], NFC: [0xBE4B], NFD: [0x1107, 0x1175, 0x11AE], NFKC: [0xBE4B], NFKD: [0x1107, 0x1175, 0x11AE] }, +{ source: [0xBE4C], NFC: [0xBE4C], NFD: [0x1107, 0x1175, 0x11AF], NFKC: [0xBE4C], NFKD: [0x1107, 0x1175, 0x11AF] }, +{ source: [0xBE4D], NFC: [0xBE4D], NFD: [0x1107, 0x1175, 0x11B0], NFKC: [0xBE4D], NFKD: [0x1107, 0x1175, 0x11B0] }, +{ source: [0xBE4E], NFC: [0xBE4E], NFD: [0x1107, 0x1175, 0x11B1], NFKC: [0xBE4E], NFKD: [0x1107, 0x1175, 0x11B1] }, +{ source: [0xBE4F], NFC: [0xBE4F], NFD: [0x1107, 0x1175, 0x11B2], NFKC: [0xBE4F], NFKD: [0x1107, 0x1175, 0x11B2] }, +{ source: [0xBE50], NFC: [0xBE50], NFD: [0x1107, 0x1175, 0x11B3], NFKC: [0xBE50], NFKD: [0x1107, 0x1175, 0x11B3] }, +{ source: [0xBE51], NFC: [0xBE51], NFD: [0x1107, 0x1175, 0x11B4], NFKC: [0xBE51], NFKD: [0x1107, 0x1175, 0x11B4] }, +{ source: [0xBE52], NFC: [0xBE52], NFD: [0x1107, 0x1175, 0x11B5], NFKC: [0xBE52], NFKD: [0x1107, 0x1175, 0x11B5] }, +{ source: [0xBE53], NFC: [0xBE53], NFD: [0x1107, 0x1175, 0x11B6], NFKC: [0xBE53], NFKD: [0x1107, 0x1175, 0x11B6] }, +{ source: [0xBE54], NFC: [0xBE54], NFD: [0x1107, 0x1175, 0x11B7], NFKC: [0xBE54], NFKD: [0x1107, 0x1175, 0x11B7] }, +{ source: [0xBE55], NFC: [0xBE55], NFD: [0x1107, 0x1175, 0x11B8], NFKC: [0xBE55], NFKD: [0x1107, 0x1175, 0x11B8] }, +{ source: [0xBE56], NFC: [0xBE56], NFD: [0x1107, 0x1175, 0x11B9], NFKC: [0xBE56], NFKD: [0x1107, 0x1175, 0x11B9] }, +{ source: [0xBE57], NFC: [0xBE57], NFD: [0x1107, 0x1175, 0x11BA], NFKC: [0xBE57], NFKD: [0x1107, 0x1175, 0x11BA] }, +{ source: [0xBE58], NFC: [0xBE58], NFD: [0x1107, 0x1175, 0x11BB], NFKC: [0xBE58], NFKD: [0x1107, 0x1175, 0x11BB] }, +{ source: [0xBE59], NFC: [0xBE59], NFD: [0x1107, 0x1175, 0x11BC], NFKC: [0xBE59], NFKD: [0x1107, 0x1175, 0x11BC] }, +{ source: [0xBE5A], NFC: [0xBE5A], NFD: [0x1107, 0x1175, 0x11BD], NFKC: [0xBE5A], NFKD: [0x1107, 0x1175, 0x11BD] }, +{ source: [0xBE5B], NFC: [0xBE5B], NFD: [0x1107, 0x1175, 0x11BE], NFKC: [0xBE5B], NFKD: [0x1107, 0x1175, 0x11BE] }, +{ source: [0xBE5C], NFC: [0xBE5C], NFD: [0x1107, 0x1175, 0x11BF], NFKC: [0xBE5C], NFKD: [0x1107, 0x1175, 0x11BF] }, +{ source: [0xBE5D], NFC: [0xBE5D], NFD: [0x1107, 0x1175, 0x11C0], NFKC: [0xBE5D], NFKD: [0x1107, 0x1175, 0x11C0] }, +{ source: [0xBE5E], NFC: [0xBE5E], NFD: [0x1107, 0x1175, 0x11C1], NFKC: [0xBE5E], NFKD: [0x1107, 0x1175, 0x11C1] }, +{ source: [0xBE5F], NFC: [0xBE5F], NFD: [0x1107, 0x1175, 0x11C2], NFKC: [0xBE5F], NFKD: [0x1107, 0x1175, 0x11C2] }, +{ source: [0xBE60], NFC: [0xBE60], NFD: [0x1108, 0x1161], NFKC: [0xBE60], NFKD: [0x1108, 0x1161] }, +{ source: [0xBE61], NFC: [0xBE61], NFD: [0x1108, 0x1161, 0x11A8], NFKC: [0xBE61], NFKD: [0x1108, 0x1161, 0x11A8] }, +{ source: [0xBE62], NFC: [0xBE62], NFD: [0x1108, 0x1161, 0x11A9], NFKC: [0xBE62], NFKD: [0x1108, 0x1161, 0x11A9] }, +{ source: [0xBE63], NFC: [0xBE63], NFD: [0x1108, 0x1161, 0x11AA], NFKC: [0xBE63], NFKD: [0x1108, 0x1161, 0x11AA] }, +{ source: [0xBE64], NFC: [0xBE64], NFD: [0x1108, 0x1161, 0x11AB], NFKC: [0xBE64], NFKD: [0x1108, 0x1161, 0x11AB] }, +{ source: [0xBE65], NFC: [0xBE65], NFD: [0x1108, 0x1161, 0x11AC], NFKC: [0xBE65], NFKD: [0x1108, 0x1161, 0x11AC] }, +{ source: [0xBE66], NFC: [0xBE66], NFD: [0x1108, 0x1161, 0x11AD], NFKC: [0xBE66], NFKD: [0x1108, 0x1161, 0x11AD] }, +{ source: [0xBE67], NFC: [0xBE67], NFD: [0x1108, 0x1161, 0x11AE], NFKC: [0xBE67], NFKD: [0x1108, 0x1161, 0x11AE] }, +{ source: [0xBE68], NFC: [0xBE68], NFD: [0x1108, 0x1161, 0x11AF], NFKC: [0xBE68], NFKD: [0x1108, 0x1161, 0x11AF] }, +{ source: [0xBE69], NFC: [0xBE69], NFD: [0x1108, 0x1161, 0x11B0], NFKC: [0xBE69], NFKD: [0x1108, 0x1161, 0x11B0] }, +{ source: [0xBE6A], NFC: [0xBE6A], NFD: [0x1108, 0x1161, 0x11B1], NFKC: [0xBE6A], NFKD: [0x1108, 0x1161, 0x11B1] }, +{ source: [0xBE6B], NFC: [0xBE6B], NFD: [0x1108, 0x1161, 0x11B2], NFKC: [0xBE6B], NFKD: [0x1108, 0x1161, 0x11B2] }, +{ source: [0xBE6C], NFC: [0xBE6C], NFD: [0x1108, 0x1161, 0x11B3], NFKC: [0xBE6C], NFKD: [0x1108, 0x1161, 0x11B3] }, +{ source: [0xBE6D], NFC: [0xBE6D], NFD: [0x1108, 0x1161, 0x11B4], NFKC: [0xBE6D], NFKD: [0x1108, 0x1161, 0x11B4] }, +{ source: [0xBE6E], NFC: [0xBE6E], NFD: [0x1108, 0x1161, 0x11B5], NFKC: [0xBE6E], NFKD: [0x1108, 0x1161, 0x11B5] }, +{ source: [0xBE6F], NFC: [0xBE6F], NFD: [0x1108, 0x1161, 0x11B6], NFKC: [0xBE6F], NFKD: [0x1108, 0x1161, 0x11B6] }, +{ source: [0xBE70], NFC: [0xBE70], NFD: [0x1108, 0x1161, 0x11B7], NFKC: [0xBE70], NFKD: [0x1108, 0x1161, 0x11B7] }, +{ source: [0xBE71], NFC: [0xBE71], NFD: [0x1108, 0x1161, 0x11B8], NFKC: [0xBE71], NFKD: [0x1108, 0x1161, 0x11B8] }, +{ source: [0xBE72], NFC: [0xBE72], NFD: [0x1108, 0x1161, 0x11B9], NFKC: [0xBE72], NFKD: [0x1108, 0x1161, 0x11B9] }, +{ source: [0xBE73], NFC: [0xBE73], NFD: [0x1108, 0x1161, 0x11BA], NFKC: [0xBE73], NFKD: [0x1108, 0x1161, 0x11BA] }, +{ source: [0xBE74], NFC: [0xBE74], NFD: [0x1108, 0x1161, 0x11BB], NFKC: [0xBE74], NFKD: [0x1108, 0x1161, 0x11BB] }, +{ source: [0xBE75], NFC: [0xBE75], NFD: [0x1108, 0x1161, 0x11BC], NFKC: [0xBE75], NFKD: [0x1108, 0x1161, 0x11BC] }, +{ source: [0xBE76], NFC: [0xBE76], NFD: [0x1108, 0x1161, 0x11BD], NFKC: [0xBE76], NFKD: [0x1108, 0x1161, 0x11BD] }, +{ source: [0xBE77], NFC: [0xBE77], NFD: [0x1108, 0x1161, 0x11BE], NFKC: [0xBE77], NFKD: [0x1108, 0x1161, 0x11BE] }, +{ source: [0xBE78], NFC: [0xBE78], NFD: [0x1108, 0x1161, 0x11BF], NFKC: [0xBE78], NFKD: [0x1108, 0x1161, 0x11BF] }, +{ source: [0xBE79], NFC: [0xBE79], NFD: [0x1108, 0x1161, 0x11C0], NFKC: [0xBE79], NFKD: [0x1108, 0x1161, 0x11C0] }, +{ source: [0xBE7A], NFC: [0xBE7A], NFD: [0x1108, 0x1161, 0x11C1], NFKC: [0xBE7A], NFKD: [0x1108, 0x1161, 0x11C1] }, +{ source: [0xBE7B], NFC: [0xBE7B], NFD: [0x1108, 0x1161, 0x11C2], NFKC: [0xBE7B], NFKD: [0x1108, 0x1161, 0x11C2] }, +{ source: [0xBE7C], NFC: [0xBE7C], NFD: [0x1108, 0x1162], NFKC: [0xBE7C], NFKD: [0x1108, 0x1162] }, +{ source: [0xBE7D], NFC: [0xBE7D], NFD: [0x1108, 0x1162, 0x11A8], NFKC: [0xBE7D], NFKD: [0x1108, 0x1162, 0x11A8] }, +{ source: [0xBE7E], NFC: [0xBE7E], NFD: [0x1108, 0x1162, 0x11A9], NFKC: [0xBE7E], NFKD: [0x1108, 0x1162, 0x11A9] }, +{ source: [0xBE7F], NFC: [0xBE7F], NFD: [0x1108, 0x1162, 0x11AA], NFKC: [0xBE7F], NFKD: [0x1108, 0x1162, 0x11AA] }, +{ source: [0xBE80], NFC: [0xBE80], NFD: [0x1108, 0x1162, 0x11AB], NFKC: [0xBE80], NFKD: [0x1108, 0x1162, 0x11AB] }, +{ source: [0xBE81], NFC: [0xBE81], NFD: [0x1108, 0x1162, 0x11AC], NFKC: [0xBE81], NFKD: [0x1108, 0x1162, 0x11AC] }, +{ source: [0xBE82], NFC: [0xBE82], NFD: [0x1108, 0x1162, 0x11AD], NFKC: [0xBE82], NFKD: [0x1108, 0x1162, 0x11AD] }, +{ source: [0xBE83], NFC: [0xBE83], NFD: [0x1108, 0x1162, 0x11AE], NFKC: [0xBE83], NFKD: [0x1108, 0x1162, 0x11AE] }, +{ source: [0xBE84], NFC: [0xBE84], NFD: [0x1108, 0x1162, 0x11AF], NFKC: [0xBE84], NFKD: [0x1108, 0x1162, 0x11AF] }, +{ source: [0xBE85], NFC: [0xBE85], NFD: [0x1108, 0x1162, 0x11B0], NFKC: [0xBE85], NFKD: [0x1108, 0x1162, 0x11B0] }, +{ source: [0xBE86], NFC: [0xBE86], NFD: [0x1108, 0x1162, 0x11B1], NFKC: [0xBE86], NFKD: [0x1108, 0x1162, 0x11B1] }, +{ source: [0xBE87], NFC: [0xBE87], NFD: [0x1108, 0x1162, 0x11B2], NFKC: [0xBE87], NFKD: [0x1108, 0x1162, 0x11B2] }, +{ source: [0xBE88], NFC: [0xBE88], NFD: [0x1108, 0x1162, 0x11B3], NFKC: [0xBE88], NFKD: [0x1108, 0x1162, 0x11B3] }, +{ source: [0xBE89], NFC: [0xBE89], NFD: [0x1108, 0x1162, 0x11B4], NFKC: [0xBE89], NFKD: [0x1108, 0x1162, 0x11B4] }, +{ source: [0xBE8A], NFC: [0xBE8A], NFD: [0x1108, 0x1162, 0x11B5], NFKC: [0xBE8A], NFKD: [0x1108, 0x1162, 0x11B5] }, +{ source: [0xBE8B], NFC: [0xBE8B], NFD: [0x1108, 0x1162, 0x11B6], NFKC: [0xBE8B], NFKD: [0x1108, 0x1162, 0x11B6] }, +{ source: [0xBE8C], NFC: [0xBE8C], NFD: [0x1108, 0x1162, 0x11B7], NFKC: [0xBE8C], NFKD: [0x1108, 0x1162, 0x11B7] }, +{ source: [0xBE8D], NFC: [0xBE8D], NFD: [0x1108, 0x1162, 0x11B8], NFKC: [0xBE8D], NFKD: [0x1108, 0x1162, 0x11B8] }, +{ source: [0xBE8E], NFC: [0xBE8E], NFD: [0x1108, 0x1162, 0x11B9], NFKC: [0xBE8E], NFKD: [0x1108, 0x1162, 0x11B9] }, +{ source: [0xBE8F], NFC: [0xBE8F], NFD: [0x1108, 0x1162, 0x11BA], NFKC: [0xBE8F], NFKD: [0x1108, 0x1162, 0x11BA] }, +{ source: [0xBE90], NFC: [0xBE90], NFD: [0x1108, 0x1162, 0x11BB], NFKC: [0xBE90], NFKD: [0x1108, 0x1162, 0x11BB] }, +{ source: [0xBE91], NFC: [0xBE91], NFD: [0x1108, 0x1162, 0x11BC], NFKC: [0xBE91], NFKD: [0x1108, 0x1162, 0x11BC] }, +{ source: [0xBE92], NFC: [0xBE92], NFD: [0x1108, 0x1162, 0x11BD], NFKC: [0xBE92], NFKD: [0x1108, 0x1162, 0x11BD] }, +{ source: [0xBE93], NFC: [0xBE93], NFD: [0x1108, 0x1162, 0x11BE], NFKC: [0xBE93], NFKD: [0x1108, 0x1162, 0x11BE] }, +{ source: [0xBE94], NFC: [0xBE94], NFD: [0x1108, 0x1162, 0x11BF], NFKC: [0xBE94], NFKD: [0x1108, 0x1162, 0x11BF] }, +{ source: [0xBE95], NFC: [0xBE95], NFD: [0x1108, 0x1162, 0x11C0], NFKC: [0xBE95], NFKD: [0x1108, 0x1162, 0x11C0] }, +{ source: [0xBE96], NFC: [0xBE96], NFD: [0x1108, 0x1162, 0x11C1], NFKC: [0xBE96], NFKD: [0x1108, 0x1162, 0x11C1] }, +{ source: [0xBE97], NFC: [0xBE97], NFD: [0x1108, 0x1162, 0x11C2], NFKC: [0xBE97], NFKD: [0x1108, 0x1162, 0x11C2] }, +{ source: [0xBE98], NFC: [0xBE98], NFD: [0x1108, 0x1163], NFKC: [0xBE98], NFKD: [0x1108, 0x1163] }, +{ source: [0xBE99], NFC: [0xBE99], NFD: [0x1108, 0x1163, 0x11A8], NFKC: [0xBE99], NFKD: [0x1108, 0x1163, 0x11A8] }, +{ source: [0xBE9A], NFC: [0xBE9A], NFD: [0x1108, 0x1163, 0x11A9], NFKC: [0xBE9A], NFKD: [0x1108, 0x1163, 0x11A9] }, +{ source: [0xBE9B], NFC: [0xBE9B], NFD: [0x1108, 0x1163, 0x11AA], NFKC: [0xBE9B], NFKD: [0x1108, 0x1163, 0x11AA] }, +{ source: [0xBE9C], NFC: [0xBE9C], NFD: [0x1108, 0x1163, 0x11AB], NFKC: [0xBE9C], NFKD: [0x1108, 0x1163, 0x11AB] }, +{ source: [0xBE9D], NFC: [0xBE9D], NFD: [0x1108, 0x1163, 0x11AC], NFKC: [0xBE9D], NFKD: [0x1108, 0x1163, 0x11AC] }, +{ source: [0xBE9E], NFC: [0xBE9E], NFD: [0x1108, 0x1163, 0x11AD], NFKC: [0xBE9E], NFKD: [0x1108, 0x1163, 0x11AD] }, +{ source: [0xBE9F], NFC: [0xBE9F], NFD: [0x1108, 0x1163, 0x11AE], NFKC: [0xBE9F], NFKD: [0x1108, 0x1163, 0x11AE] }, +{ source: [0xBEA0], NFC: [0xBEA0], NFD: [0x1108, 0x1163, 0x11AF], NFKC: [0xBEA0], NFKD: [0x1108, 0x1163, 0x11AF] }, +{ source: [0xBEA1], NFC: [0xBEA1], NFD: [0x1108, 0x1163, 0x11B0], NFKC: [0xBEA1], NFKD: [0x1108, 0x1163, 0x11B0] }, +{ source: [0xBEA2], NFC: [0xBEA2], NFD: [0x1108, 0x1163, 0x11B1], NFKC: [0xBEA2], NFKD: [0x1108, 0x1163, 0x11B1] }, +{ source: [0xBEA3], NFC: [0xBEA3], NFD: [0x1108, 0x1163, 0x11B2], NFKC: [0xBEA3], NFKD: [0x1108, 0x1163, 0x11B2] }, +{ source: [0xBEA4], NFC: [0xBEA4], NFD: [0x1108, 0x1163, 0x11B3], NFKC: [0xBEA4], NFKD: [0x1108, 0x1163, 0x11B3] }, +{ source: [0xBEA5], NFC: [0xBEA5], NFD: [0x1108, 0x1163, 0x11B4], NFKC: [0xBEA5], NFKD: [0x1108, 0x1163, 0x11B4] }, +{ source: [0xBEA6], NFC: [0xBEA6], NFD: [0x1108, 0x1163, 0x11B5], NFKC: [0xBEA6], NFKD: [0x1108, 0x1163, 0x11B5] }, +{ source: [0xBEA7], NFC: [0xBEA7], NFD: [0x1108, 0x1163, 0x11B6], NFKC: [0xBEA7], NFKD: [0x1108, 0x1163, 0x11B6] }, +{ source: [0xBEA8], NFC: [0xBEA8], NFD: [0x1108, 0x1163, 0x11B7], NFKC: [0xBEA8], NFKD: [0x1108, 0x1163, 0x11B7] }, +{ source: [0xBEA9], NFC: [0xBEA9], NFD: [0x1108, 0x1163, 0x11B8], NFKC: [0xBEA9], NFKD: [0x1108, 0x1163, 0x11B8] }, +{ source: [0xBEAA], NFC: [0xBEAA], NFD: [0x1108, 0x1163, 0x11B9], NFKC: [0xBEAA], NFKD: [0x1108, 0x1163, 0x11B9] }, +{ source: [0xBEAB], NFC: [0xBEAB], NFD: [0x1108, 0x1163, 0x11BA], NFKC: [0xBEAB], NFKD: [0x1108, 0x1163, 0x11BA] }, +{ source: [0xBEAC], NFC: [0xBEAC], NFD: [0x1108, 0x1163, 0x11BB], NFKC: [0xBEAC], NFKD: [0x1108, 0x1163, 0x11BB] }, +{ source: [0xBEAD], NFC: [0xBEAD], NFD: [0x1108, 0x1163, 0x11BC], NFKC: [0xBEAD], NFKD: [0x1108, 0x1163, 0x11BC] }, +{ source: [0xBEAE], NFC: [0xBEAE], NFD: [0x1108, 0x1163, 0x11BD], NFKC: [0xBEAE], NFKD: [0x1108, 0x1163, 0x11BD] }, +{ source: [0xBEAF], NFC: [0xBEAF], NFD: [0x1108, 0x1163, 0x11BE], NFKC: [0xBEAF], NFKD: [0x1108, 0x1163, 0x11BE] }, +{ source: [0xBEB0], NFC: [0xBEB0], NFD: [0x1108, 0x1163, 0x11BF], NFKC: [0xBEB0], NFKD: [0x1108, 0x1163, 0x11BF] }, +{ source: [0xBEB1], NFC: [0xBEB1], NFD: [0x1108, 0x1163, 0x11C0], NFKC: [0xBEB1], NFKD: [0x1108, 0x1163, 0x11C0] }, +{ source: [0xBEB2], NFC: [0xBEB2], NFD: [0x1108, 0x1163, 0x11C1], NFKC: [0xBEB2], NFKD: [0x1108, 0x1163, 0x11C1] }, +{ source: [0xBEB3], NFC: [0xBEB3], NFD: [0x1108, 0x1163, 0x11C2], NFKC: [0xBEB3], NFKD: [0x1108, 0x1163, 0x11C2] }, +{ source: [0xBEB4], NFC: [0xBEB4], NFD: [0x1108, 0x1164], NFKC: [0xBEB4], NFKD: [0x1108, 0x1164] }, +{ source: [0xBEB5], NFC: [0xBEB5], NFD: [0x1108, 0x1164, 0x11A8], NFKC: [0xBEB5], NFKD: [0x1108, 0x1164, 0x11A8] }, +{ source: [0xBEB6], NFC: [0xBEB6], NFD: [0x1108, 0x1164, 0x11A9], NFKC: [0xBEB6], NFKD: [0x1108, 0x1164, 0x11A9] }, +{ source: [0xBEB7], NFC: [0xBEB7], NFD: [0x1108, 0x1164, 0x11AA], NFKC: [0xBEB7], NFKD: [0x1108, 0x1164, 0x11AA] }, +{ source: [0xBEB8], NFC: [0xBEB8], NFD: [0x1108, 0x1164, 0x11AB], NFKC: [0xBEB8], NFKD: [0x1108, 0x1164, 0x11AB] }, +{ source: [0xBEB9], NFC: [0xBEB9], NFD: [0x1108, 0x1164, 0x11AC], NFKC: [0xBEB9], NFKD: [0x1108, 0x1164, 0x11AC] }, +{ source: [0xBEBA], NFC: [0xBEBA], NFD: [0x1108, 0x1164, 0x11AD], NFKC: [0xBEBA], NFKD: [0x1108, 0x1164, 0x11AD] }, +{ source: [0xBEBB], NFC: [0xBEBB], NFD: [0x1108, 0x1164, 0x11AE], NFKC: [0xBEBB], NFKD: [0x1108, 0x1164, 0x11AE] }, +{ source: [0xBEBC], NFC: [0xBEBC], NFD: [0x1108, 0x1164, 0x11AF], NFKC: [0xBEBC], NFKD: [0x1108, 0x1164, 0x11AF] }, +{ source: [0xBEBD], NFC: [0xBEBD], NFD: [0x1108, 0x1164, 0x11B0], NFKC: [0xBEBD], NFKD: [0x1108, 0x1164, 0x11B0] }, +{ source: [0xBEBE], NFC: [0xBEBE], NFD: [0x1108, 0x1164, 0x11B1], NFKC: [0xBEBE], NFKD: [0x1108, 0x1164, 0x11B1] }, +{ source: [0xBEBF], NFC: [0xBEBF], NFD: [0x1108, 0x1164, 0x11B2], NFKC: [0xBEBF], NFKD: [0x1108, 0x1164, 0x11B2] }, +{ source: [0xBEC0], NFC: [0xBEC0], NFD: [0x1108, 0x1164, 0x11B3], NFKC: [0xBEC0], NFKD: [0x1108, 0x1164, 0x11B3] }, +{ source: [0xBEC1], NFC: [0xBEC1], NFD: [0x1108, 0x1164, 0x11B4], NFKC: [0xBEC1], NFKD: [0x1108, 0x1164, 0x11B4] }, +{ source: [0xBEC2], NFC: [0xBEC2], NFD: [0x1108, 0x1164, 0x11B5], NFKC: [0xBEC2], NFKD: [0x1108, 0x1164, 0x11B5] }, +{ source: [0xBEC3], NFC: [0xBEC3], NFD: [0x1108, 0x1164, 0x11B6], NFKC: [0xBEC3], NFKD: [0x1108, 0x1164, 0x11B6] }, +{ source: [0xBEC4], NFC: [0xBEC4], NFD: [0x1108, 0x1164, 0x11B7], NFKC: [0xBEC4], NFKD: [0x1108, 0x1164, 0x11B7] }, +{ source: [0xBEC5], NFC: [0xBEC5], NFD: [0x1108, 0x1164, 0x11B8], NFKC: [0xBEC5], NFKD: [0x1108, 0x1164, 0x11B8] }, +{ source: [0xBEC6], NFC: [0xBEC6], NFD: [0x1108, 0x1164, 0x11B9], NFKC: [0xBEC6], NFKD: [0x1108, 0x1164, 0x11B9] }, +{ source: [0xBEC7], NFC: [0xBEC7], NFD: [0x1108, 0x1164, 0x11BA], NFKC: [0xBEC7], NFKD: [0x1108, 0x1164, 0x11BA] }, +{ source: [0xBEC8], NFC: [0xBEC8], NFD: [0x1108, 0x1164, 0x11BB], NFKC: [0xBEC8], NFKD: [0x1108, 0x1164, 0x11BB] }, +{ source: [0xBEC9], NFC: [0xBEC9], NFD: [0x1108, 0x1164, 0x11BC], NFKC: [0xBEC9], NFKD: [0x1108, 0x1164, 0x11BC] }, +{ source: [0xBECA], NFC: [0xBECA], NFD: [0x1108, 0x1164, 0x11BD], NFKC: [0xBECA], NFKD: [0x1108, 0x1164, 0x11BD] }, +{ source: [0xBECB], NFC: [0xBECB], NFD: [0x1108, 0x1164, 0x11BE], NFKC: [0xBECB], NFKD: [0x1108, 0x1164, 0x11BE] }, +{ source: [0xBECC], NFC: [0xBECC], NFD: [0x1108, 0x1164, 0x11BF], NFKC: [0xBECC], NFKD: [0x1108, 0x1164, 0x11BF] }, +{ source: [0xBECD], NFC: [0xBECD], NFD: [0x1108, 0x1164, 0x11C0], NFKC: [0xBECD], NFKD: [0x1108, 0x1164, 0x11C0] }, +{ source: [0xBECE], NFC: [0xBECE], NFD: [0x1108, 0x1164, 0x11C1], NFKC: [0xBECE], NFKD: [0x1108, 0x1164, 0x11C1] }, +{ source: [0xBECF], NFC: [0xBECF], NFD: [0x1108, 0x1164, 0x11C2], NFKC: [0xBECF], NFKD: [0x1108, 0x1164, 0x11C2] }, +{ source: [0xBED0], NFC: [0xBED0], NFD: [0x1108, 0x1165], NFKC: [0xBED0], NFKD: [0x1108, 0x1165] }, +{ source: [0xBED1], NFC: [0xBED1], NFD: [0x1108, 0x1165, 0x11A8], NFKC: [0xBED1], NFKD: [0x1108, 0x1165, 0x11A8] }, +{ source: [0xBED2], NFC: [0xBED2], NFD: [0x1108, 0x1165, 0x11A9], NFKC: [0xBED2], NFKD: [0x1108, 0x1165, 0x11A9] }, +{ source: [0xBED3], NFC: [0xBED3], NFD: [0x1108, 0x1165, 0x11AA], NFKC: [0xBED3], NFKD: [0x1108, 0x1165, 0x11AA] }, +{ source: [0xBED4], NFC: [0xBED4], NFD: [0x1108, 0x1165, 0x11AB], NFKC: [0xBED4], NFKD: [0x1108, 0x1165, 0x11AB] }, +{ source: [0xBED5], NFC: [0xBED5], NFD: [0x1108, 0x1165, 0x11AC], NFKC: [0xBED5], NFKD: [0x1108, 0x1165, 0x11AC] }, +{ source: [0xBED6], NFC: [0xBED6], NFD: [0x1108, 0x1165, 0x11AD], NFKC: [0xBED6], NFKD: [0x1108, 0x1165, 0x11AD] }, +{ source: [0xBED7], NFC: [0xBED7], NFD: [0x1108, 0x1165, 0x11AE], NFKC: [0xBED7], NFKD: [0x1108, 0x1165, 0x11AE] }, +{ source: [0xBED8], NFC: [0xBED8], NFD: [0x1108, 0x1165, 0x11AF], NFKC: [0xBED8], NFKD: [0x1108, 0x1165, 0x11AF] }, +{ source: [0xBED9], NFC: [0xBED9], NFD: [0x1108, 0x1165, 0x11B0], NFKC: [0xBED9], NFKD: [0x1108, 0x1165, 0x11B0] }, +{ source: [0xBEDA], NFC: [0xBEDA], NFD: [0x1108, 0x1165, 0x11B1], NFKC: [0xBEDA], NFKD: [0x1108, 0x1165, 0x11B1] }, +{ source: [0xBEDB], NFC: [0xBEDB], NFD: [0x1108, 0x1165, 0x11B2], NFKC: [0xBEDB], NFKD: [0x1108, 0x1165, 0x11B2] }, +{ source: [0xBEDC], NFC: [0xBEDC], NFD: [0x1108, 0x1165, 0x11B3], NFKC: [0xBEDC], NFKD: [0x1108, 0x1165, 0x11B3] }, +{ source: [0xBEDD], NFC: [0xBEDD], NFD: [0x1108, 0x1165, 0x11B4], NFKC: [0xBEDD], NFKD: [0x1108, 0x1165, 0x11B4] }, +{ source: [0xBEDE], NFC: [0xBEDE], NFD: [0x1108, 0x1165, 0x11B5], NFKC: [0xBEDE], NFKD: [0x1108, 0x1165, 0x11B5] }, +{ source: [0xBEDF], NFC: [0xBEDF], NFD: [0x1108, 0x1165, 0x11B6], NFKC: [0xBEDF], NFKD: [0x1108, 0x1165, 0x11B6] }, +{ source: [0xBEE0], NFC: [0xBEE0], NFD: [0x1108, 0x1165, 0x11B7], NFKC: [0xBEE0], NFKD: [0x1108, 0x1165, 0x11B7] }, +{ source: [0xBEE1], NFC: [0xBEE1], NFD: [0x1108, 0x1165, 0x11B8], NFKC: [0xBEE1], NFKD: [0x1108, 0x1165, 0x11B8] }, +{ source: [0xBEE2], NFC: [0xBEE2], NFD: [0x1108, 0x1165, 0x11B9], NFKC: [0xBEE2], NFKD: [0x1108, 0x1165, 0x11B9] }, +{ source: [0xBEE3], NFC: [0xBEE3], NFD: [0x1108, 0x1165, 0x11BA], NFKC: [0xBEE3], NFKD: [0x1108, 0x1165, 0x11BA] }, +{ source: [0xBEE4], NFC: [0xBEE4], NFD: [0x1108, 0x1165, 0x11BB], NFKC: [0xBEE4], NFKD: [0x1108, 0x1165, 0x11BB] }, +{ source: [0xBEE5], NFC: [0xBEE5], NFD: [0x1108, 0x1165, 0x11BC], NFKC: [0xBEE5], NFKD: [0x1108, 0x1165, 0x11BC] }, +{ source: [0xBEE6], NFC: [0xBEE6], NFD: [0x1108, 0x1165, 0x11BD], NFKC: [0xBEE6], NFKD: [0x1108, 0x1165, 0x11BD] }, +{ source: [0xBEE7], NFC: [0xBEE7], NFD: [0x1108, 0x1165, 0x11BE], NFKC: [0xBEE7], NFKD: [0x1108, 0x1165, 0x11BE] }, +{ source: [0xBEE8], NFC: [0xBEE8], NFD: [0x1108, 0x1165, 0x11BF], NFKC: [0xBEE8], NFKD: [0x1108, 0x1165, 0x11BF] }, +{ source: [0xBEE9], NFC: [0xBEE9], NFD: [0x1108, 0x1165, 0x11C0], NFKC: [0xBEE9], NFKD: [0x1108, 0x1165, 0x11C0] }, +{ source: [0xBEEA], NFC: [0xBEEA], NFD: [0x1108, 0x1165, 0x11C1], NFKC: [0xBEEA], NFKD: [0x1108, 0x1165, 0x11C1] }, +{ source: [0xBEEB], NFC: [0xBEEB], NFD: [0x1108, 0x1165, 0x11C2], NFKC: [0xBEEB], NFKD: [0x1108, 0x1165, 0x11C2] }, +{ source: [0xBEEC], NFC: [0xBEEC], NFD: [0x1108, 0x1166], NFKC: [0xBEEC], NFKD: [0x1108, 0x1166] }, +{ source: [0xBEED], NFC: [0xBEED], NFD: [0x1108, 0x1166, 0x11A8], NFKC: [0xBEED], NFKD: [0x1108, 0x1166, 0x11A8] }, +{ source: [0xBEEE], NFC: [0xBEEE], NFD: [0x1108, 0x1166, 0x11A9], NFKC: [0xBEEE], NFKD: [0x1108, 0x1166, 0x11A9] }, +{ source: [0xBEEF], NFC: [0xBEEF], NFD: [0x1108, 0x1166, 0x11AA], NFKC: [0xBEEF], NFKD: [0x1108, 0x1166, 0x11AA] }, +{ source: [0xBEF0], NFC: [0xBEF0], NFD: [0x1108, 0x1166, 0x11AB], NFKC: [0xBEF0], NFKD: [0x1108, 0x1166, 0x11AB] }, +{ source: [0xBEF1], NFC: [0xBEF1], NFD: [0x1108, 0x1166, 0x11AC], NFKC: [0xBEF1], NFKD: [0x1108, 0x1166, 0x11AC] }, +{ source: [0xBEF2], NFC: [0xBEF2], NFD: [0x1108, 0x1166, 0x11AD], NFKC: [0xBEF2], NFKD: [0x1108, 0x1166, 0x11AD] }, +{ source: [0xBEF3], NFC: [0xBEF3], NFD: [0x1108, 0x1166, 0x11AE], NFKC: [0xBEF3], NFKD: [0x1108, 0x1166, 0x11AE] }, +{ source: [0xBEF4], NFC: [0xBEF4], NFD: [0x1108, 0x1166, 0x11AF], NFKC: [0xBEF4], NFKD: [0x1108, 0x1166, 0x11AF] }, +{ source: [0xBEF5], NFC: [0xBEF5], NFD: [0x1108, 0x1166, 0x11B0], NFKC: [0xBEF5], NFKD: [0x1108, 0x1166, 0x11B0] }, +{ source: [0xBEF6], NFC: [0xBEF6], NFD: [0x1108, 0x1166, 0x11B1], NFKC: [0xBEF6], NFKD: [0x1108, 0x1166, 0x11B1] }, +{ source: [0xBEF7], NFC: [0xBEF7], NFD: [0x1108, 0x1166, 0x11B2], NFKC: [0xBEF7], NFKD: [0x1108, 0x1166, 0x11B2] }, +{ source: [0xBEF8], NFC: [0xBEF8], NFD: [0x1108, 0x1166, 0x11B3], NFKC: [0xBEF8], NFKD: [0x1108, 0x1166, 0x11B3] }, +{ source: [0xBEF9], NFC: [0xBEF9], NFD: [0x1108, 0x1166, 0x11B4], NFKC: [0xBEF9], NFKD: [0x1108, 0x1166, 0x11B4] }, +{ source: [0xBEFA], NFC: [0xBEFA], NFD: [0x1108, 0x1166, 0x11B5], NFKC: [0xBEFA], NFKD: [0x1108, 0x1166, 0x11B5] }, +{ source: [0xBEFB], NFC: [0xBEFB], NFD: [0x1108, 0x1166, 0x11B6], NFKC: [0xBEFB], NFKD: [0x1108, 0x1166, 0x11B6] }, +{ source: [0xBEFC], NFC: [0xBEFC], NFD: [0x1108, 0x1166, 0x11B7], NFKC: [0xBEFC], NFKD: [0x1108, 0x1166, 0x11B7] }, +{ source: [0xBEFD], NFC: [0xBEFD], NFD: [0x1108, 0x1166, 0x11B8], NFKC: [0xBEFD], NFKD: [0x1108, 0x1166, 0x11B8] }, +{ source: [0xBEFE], NFC: [0xBEFE], NFD: [0x1108, 0x1166, 0x11B9], NFKC: [0xBEFE], NFKD: [0x1108, 0x1166, 0x11B9] }, +{ source: [0xBEFF], NFC: [0xBEFF], NFD: [0x1108, 0x1166, 0x11BA], NFKC: [0xBEFF], NFKD: [0x1108, 0x1166, 0x11BA] }, +{ source: [0xBF00], NFC: [0xBF00], NFD: [0x1108, 0x1166, 0x11BB], NFKC: [0xBF00], NFKD: [0x1108, 0x1166, 0x11BB] }, +{ source: [0xBF01], NFC: [0xBF01], NFD: [0x1108, 0x1166, 0x11BC], NFKC: [0xBF01], NFKD: [0x1108, 0x1166, 0x11BC] }, +{ source: [0xBF02], NFC: [0xBF02], NFD: [0x1108, 0x1166, 0x11BD], NFKC: [0xBF02], NFKD: [0x1108, 0x1166, 0x11BD] }, +{ source: [0xBF03], NFC: [0xBF03], NFD: [0x1108, 0x1166, 0x11BE], NFKC: [0xBF03], NFKD: [0x1108, 0x1166, 0x11BE] }, +{ source: [0xBF04], NFC: [0xBF04], NFD: [0x1108, 0x1166, 0x11BF], NFKC: [0xBF04], NFKD: [0x1108, 0x1166, 0x11BF] }, +{ source: [0xBF05], NFC: [0xBF05], NFD: [0x1108, 0x1166, 0x11C0], NFKC: [0xBF05], NFKD: [0x1108, 0x1166, 0x11C0] }, +{ source: [0xBF06], NFC: [0xBF06], NFD: [0x1108, 0x1166, 0x11C1], NFKC: [0xBF06], NFKD: [0x1108, 0x1166, 0x11C1] }, +{ source: [0xBF07], NFC: [0xBF07], NFD: [0x1108, 0x1166, 0x11C2], NFKC: [0xBF07], NFKD: [0x1108, 0x1166, 0x11C2] }, +{ source: [0xBF08], NFC: [0xBF08], NFD: [0x1108, 0x1167], NFKC: [0xBF08], NFKD: [0x1108, 0x1167] }, +{ source: [0xBF09], NFC: [0xBF09], NFD: [0x1108, 0x1167, 0x11A8], NFKC: [0xBF09], NFKD: [0x1108, 0x1167, 0x11A8] }, +{ source: [0xBF0A], NFC: [0xBF0A], NFD: [0x1108, 0x1167, 0x11A9], NFKC: [0xBF0A], NFKD: [0x1108, 0x1167, 0x11A9] }, +{ source: [0xBF0B], NFC: [0xBF0B], NFD: [0x1108, 0x1167, 0x11AA], NFKC: [0xBF0B], NFKD: [0x1108, 0x1167, 0x11AA] }, +{ source: [0xBF0C], NFC: [0xBF0C], NFD: [0x1108, 0x1167, 0x11AB], NFKC: [0xBF0C], NFKD: [0x1108, 0x1167, 0x11AB] }, +{ source: [0xBF0D], NFC: [0xBF0D], NFD: [0x1108, 0x1167, 0x11AC], NFKC: [0xBF0D], NFKD: [0x1108, 0x1167, 0x11AC] }, +{ source: [0xBF0E], NFC: [0xBF0E], NFD: [0x1108, 0x1167, 0x11AD], NFKC: [0xBF0E], NFKD: [0x1108, 0x1167, 0x11AD] }, +{ source: [0xBF0F], NFC: [0xBF0F], NFD: [0x1108, 0x1167, 0x11AE], NFKC: [0xBF0F], NFKD: [0x1108, 0x1167, 0x11AE] }, +{ source: [0xBF10], NFC: [0xBF10], NFD: [0x1108, 0x1167, 0x11AF], NFKC: [0xBF10], NFKD: [0x1108, 0x1167, 0x11AF] }, +{ source: [0xBF11], NFC: [0xBF11], NFD: [0x1108, 0x1167, 0x11B0], NFKC: [0xBF11], NFKD: [0x1108, 0x1167, 0x11B0] }, +{ source: [0xBF12], NFC: [0xBF12], NFD: [0x1108, 0x1167, 0x11B1], NFKC: [0xBF12], NFKD: [0x1108, 0x1167, 0x11B1] }, +{ source: [0xBF13], NFC: [0xBF13], NFD: [0x1108, 0x1167, 0x11B2], NFKC: [0xBF13], NFKD: [0x1108, 0x1167, 0x11B2] }, +{ source: [0xBF14], NFC: [0xBF14], NFD: [0x1108, 0x1167, 0x11B3], NFKC: [0xBF14], NFKD: [0x1108, 0x1167, 0x11B3] }, +{ source: [0xBF15], NFC: [0xBF15], NFD: [0x1108, 0x1167, 0x11B4], NFKC: [0xBF15], NFKD: [0x1108, 0x1167, 0x11B4] }, +{ source: [0xBF16], NFC: [0xBF16], NFD: [0x1108, 0x1167, 0x11B5], NFKC: [0xBF16], NFKD: [0x1108, 0x1167, 0x11B5] }, +{ source: [0xBF17], NFC: [0xBF17], NFD: [0x1108, 0x1167, 0x11B6], NFKC: [0xBF17], NFKD: [0x1108, 0x1167, 0x11B6] }, +{ source: [0xBF18], NFC: [0xBF18], NFD: [0x1108, 0x1167, 0x11B7], NFKC: [0xBF18], NFKD: [0x1108, 0x1167, 0x11B7] }, +{ source: [0xBF19], NFC: [0xBF19], NFD: [0x1108, 0x1167, 0x11B8], NFKC: [0xBF19], NFKD: [0x1108, 0x1167, 0x11B8] }, +{ source: [0xBF1A], NFC: [0xBF1A], NFD: [0x1108, 0x1167, 0x11B9], NFKC: [0xBF1A], NFKD: [0x1108, 0x1167, 0x11B9] }, +{ source: [0xBF1B], NFC: [0xBF1B], NFD: [0x1108, 0x1167, 0x11BA], NFKC: [0xBF1B], NFKD: [0x1108, 0x1167, 0x11BA] }, +{ source: [0xBF1C], NFC: [0xBF1C], NFD: [0x1108, 0x1167, 0x11BB], NFKC: [0xBF1C], NFKD: [0x1108, 0x1167, 0x11BB] }, +{ source: [0xBF1D], NFC: [0xBF1D], NFD: [0x1108, 0x1167, 0x11BC], NFKC: [0xBF1D], NFKD: [0x1108, 0x1167, 0x11BC] }, +{ source: [0xBF1E], NFC: [0xBF1E], NFD: [0x1108, 0x1167, 0x11BD], NFKC: [0xBF1E], NFKD: [0x1108, 0x1167, 0x11BD] }, +{ source: [0xBF1F], NFC: [0xBF1F], NFD: [0x1108, 0x1167, 0x11BE], NFKC: [0xBF1F], NFKD: [0x1108, 0x1167, 0x11BE] }, +{ source: [0xBF20], NFC: [0xBF20], NFD: [0x1108, 0x1167, 0x11BF], NFKC: [0xBF20], NFKD: [0x1108, 0x1167, 0x11BF] }, +{ source: [0xBF21], NFC: [0xBF21], NFD: [0x1108, 0x1167, 0x11C0], NFKC: [0xBF21], NFKD: [0x1108, 0x1167, 0x11C0] }, +{ source: [0xBF22], NFC: [0xBF22], NFD: [0x1108, 0x1167, 0x11C1], NFKC: [0xBF22], NFKD: [0x1108, 0x1167, 0x11C1] }, +{ source: [0xBF23], NFC: [0xBF23], NFD: [0x1108, 0x1167, 0x11C2], NFKC: [0xBF23], NFKD: [0x1108, 0x1167, 0x11C2] }, +{ source: [0xBF24], NFC: [0xBF24], NFD: [0x1108, 0x1168], NFKC: [0xBF24], NFKD: [0x1108, 0x1168] }, +{ source: [0xBF25], NFC: [0xBF25], NFD: [0x1108, 0x1168, 0x11A8], NFKC: [0xBF25], NFKD: [0x1108, 0x1168, 0x11A8] }, +{ source: [0xBF26], NFC: [0xBF26], NFD: [0x1108, 0x1168, 0x11A9], NFKC: [0xBF26], NFKD: [0x1108, 0x1168, 0x11A9] }, +{ source: [0xBF27], NFC: [0xBF27], NFD: [0x1108, 0x1168, 0x11AA], NFKC: [0xBF27], NFKD: [0x1108, 0x1168, 0x11AA] }, +{ source: [0xBF28], NFC: [0xBF28], NFD: [0x1108, 0x1168, 0x11AB], NFKC: [0xBF28], NFKD: [0x1108, 0x1168, 0x11AB] }, +{ source: [0xBF29], NFC: [0xBF29], NFD: [0x1108, 0x1168, 0x11AC], NFKC: [0xBF29], NFKD: [0x1108, 0x1168, 0x11AC] }, +{ source: [0xBF2A], NFC: [0xBF2A], NFD: [0x1108, 0x1168, 0x11AD], NFKC: [0xBF2A], NFKD: [0x1108, 0x1168, 0x11AD] }, +{ source: [0xBF2B], NFC: [0xBF2B], NFD: [0x1108, 0x1168, 0x11AE], NFKC: [0xBF2B], NFKD: [0x1108, 0x1168, 0x11AE] }, +{ source: [0xBF2C], NFC: [0xBF2C], NFD: [0x1108, 0x1168, 0x11AF], NFKC: [0xBF2C], NFKD: [0x1108, 0x1168, 0x11AF] }, +{ source: [0xBF2D], NFC: [0xBF2D], NFD: [0x1108, 0x1168, 0x11B0], NFKC: [0xBF2D], NFKD: [0x1108, 0x1168, 0x11B0] }, +{ source: [0xBF2E], NFC: [0xBF2E], NFD: [0x1108, 0x1168, 0x11B1], NFKC: [0xBF2E], NFKD: [0x1108, 0x1168, 0x11B1] }, +{ source: [0xBF2F], NFC: [0xBF2F], NFD: [0x1108, 0x1168, 0x11B2], NFKC: [0xBF2F], NFKD: [0x1108, 0x1168, 0x11B2] }, +{ source: [0xBF30], NFC: [0xBF30], NFD: [0x1108, 0x1168, 0x11B3], NFKC: [0xBF30], NFKD: [0x1108, 0x1168, 0x11B3] }, +{ source: [0xBF31], NFC: [0xBF31], NFD: [0x1108, 0x1168, 0x11B4], NFKC: [0xBF31], NFKD: [0x1108, 0x1168, 0x11B4] }, +{ source: [0xBF32], NFC: [0xBF32], NFD: [0x1108, 0x1168, 0x11B5], NFKC: [0xBF32], NFKD: [0x1108, 0x1168, 0x11B5] }, +{ source: [0xBF33], NFC: [0xBF33], NFD: [0x1108, 0x1168, 0x11B6], NFKC: [0xBF33], NFKD: [0x1108, 0x1168, 0x11B6] }, +{ source: [0xBF34], NFC: [0xBF34], NFD: [0x1108, 0x1168, 0x11B7], NFKC: [0xBF34], NFKD: [0x1108, 0x1168, 0x11B7] }, +{ source: [0xBF35], NFC: [0xBF35], NFD: [0x1108, 0x1168, 0x11B8], NFKC: [0xBF35], NFKD: [0x1108, 0x1168, 0x11B8] }, +{ source: [0xBF36], NFC: [0xBF36], NFD: [0x1108, 0x1168, 0x11B9], NFKC: [0xBF36], NFKD: [0x1108, 0x1168, 0x11B9] }, +{ source: [0xBF37], NFC: [0xBF37], NFD: [0x1108, 0x1168, 0x11BA], NFKC: [0xBF37], NFKD: [0x1108, 0x1168, 0x11BA] }, +{ source: [0xBF38], NFC: [0xBF38], NFD: [0x1108, 0x1168, 0x11BB], NFKC: [0xBF38], NFKD: [0x1108, 0x1168, 0x11BB] }, +{ source: [0xBF39], NFC: [0xBF39], NFD: [0x1108, 0x1168, 0x11BC], NFKC: [0xBF39], NFKD: [0x1108, 0x1168, 0x11BC] }, +{ source: [0xBF3A], NFC: [0xBF3A], NFD: [0x1108, 0x1168, 0x11BD], NFKC: [0xBF3A], NFKD: [0x1108, 0x1168, 0x11BD] }, +{ source: [0xBF3B], NFC: [0xBF3B], NFD: [0x1108, 0x1168, 0x11BE], NFKC: [0xBF3B], NFKD: [0x1108, 0x1168, 0x11BE] }, +{ source: [0xBF3C], NFC: [0xBF3C], NFD: [0x1108, 0x1168, 0x11BF], NFKC: [0xBF3C], NFKD: [0x1108, 0x1168, 0x11BF] }, +{ source: [0xBF3D], NFC: [0xBF3D], NFD: [0x1108, 0x1168, 0x11C0], NFKC: [0xBF3D], NFKD: [0x1108, 0x1168, 0x11C0] }, +{ source: [0xBF3E], NFC: [0xBF3E], NFD: [0x1108, 0x1168, 0x11C1], NFKC: [0xBF3E], NFKD: [0x1108, 0x1168, 0x11C1] }, +{ source: [0xBF3F], NFC: [0xBF3F], NFD: [0x1108, 0x1168, 0x11C2], NFKC: [0xBF3F], NFKD: [0x1108, 0x1168, 0x11C2] }, +{ source: [0xBF40], NFC: [0xBF40], NFD: [0x1108, 0x1169], NFKC: [0xBF40], NFKD: [0x1108, 0x1169] }, +{ source: [0xBF41], NFC: [0xBF41], NFD: [0x1108, 0x1169, 0x11A8], NFKC: [0xBF41], NFKD: [0x1108, 0x1169, 0x11A8] }, +{ source: [0xBF42], NFC: [0xBF42], NFD: [0x1108, 0x1169, 0x11A9], NFKC: [0xBF42], NFKD: [0x1108, 0x1169, 0x11A9] }, +{ source: [0xBF43], NFC: [0xBF43], NFD: [0x1108, 0x1169, 0x11AA], NFKC: [0xBF43], NFKD: [0x1108, 0x1169, 0x11AA] }, +{ source: [0xBF44], NFC: [0xBF44], NFD: [0x1108, 0x1169, 0x11AB], NFKC: [0xBF44], NFKD: [0x1108, 0x1169, 0x11AB] }, +{ source: [0xBF45], NFC: [0xBF45], NFD: [0x1108, 0x1169, 0x11AC], NFKC: [0xBF45], NFKD: [0x1108, 0x1169, 0x11AC] }, +{ source: [0xBF46], NFC: [0xBF46], NFD: [0x1108, 0x1169, 0x11AD], NFKC: [0xBF46], NFKD: [0x1108, 0x1169, 0x11AD] }, +{ source: [0xBF47], NFC: [0xBF47], NFD: [0x1108, 0x1169, 0x11AE], NFKC: [0xBF47], NFKD: [0x1108, 0x1169, 0x11AE] }, +{ source: [0xBF48], NFC: [0xBF48], NFD: [0x1108, 0x1169, 0x11AF], NFKC: [0xBF48], NFKD: [0x1108, 0x1169, 0x11AF] }, +{ source: [0xBF49], NFC: [0xBF49], NFD: [0x1108, 0x1169, 0x11B0], NFKC: [0xBF49], NFKD: [0x1108, 0x1169, 0x11B0] }, +{ source: [0xBF4A], NFC: [0xBF4A], NFD: [0x1108, 0x1169, 0x11B1], NFKC: [0xBF4A], NFKD: [0x1108, 0x1169, 0x11B1] }, +{ source: [0xBF4B], NFC: [0xBF4B], NFD: [0x1108, 0x1169, 0x11B2], NFKC: [0xBF4B], NFKD: [0x1108, 0x1169, 0x11B2] }, +{ source: [0xBF4C], NFC: [0xBF4C], NFD: [0x1108, 0x1169, 0x11B3], NFKC: [0xBF4C], NFKD: [0x1108, 0x1169, 0x11B3] }, +{ source: [0xBF4D], NFC: [0xBF4D], NFD: [0x1108, 0x1169, 0x11B4], NFKC: [0xBF4D], NFKD: [0x1108, 0x1169, 0x11B4] }, +{ source: [0xBF4E], NFC: [0xBF4E], NFD: [0x1108, 0x1169, 0x11B5], NFKC: [0xBF4E], NFKD: [0x1108, 0x1169, 0x11B5] }, +{ source: [0xBF4F], NFC: [0xBF4F], NFD: [0x1108, 0x1169, 0x11B6], NFKC: [0xBF4F], NFKD: [0x1108, 0x1169, 0x11B6] }, +{ source: [0xBF50], NFC: [0xBF50], NFD: [0x1108, 0x1169, 0x11B7], NFKC: [0xBF50], NFKD: [0x1108, 0x1169, 0x11B7] }, +{ source: [0xBF51], NFC: [0xBF51], NFD: [0x1108, 0x1169, 0x11B8], NFKC: [0xBF51], NFKD: [0x1108, 0x1169, 0x11B8] }, +{ source: [0xBF52], NFC: [0xBF52], NFD: [0x1108, 0x1169, 0x11B9], NFKC: [0xBF52], NFKD: [0x1108, 0x1169, 0x11B9] }, +{ source: [0xBF53], NFC: [0xBF53], NFD: [0x1108, 0x1169, 0x11BA], NFKC: [0xBF53], NFKD: [0x1108, 0x1169, 0x11BA] }, +{ source: [0xBF54], NFC: [0xBF54], NFD: [0x1108, 0x1169, 0x11BB], NFKC: [0xBF54], NFKD: [0x1108, 0x1169, 0x11BB] }, +{ source: [0xBF55], NFC: [0xBF55], NFD: [0x1108, 0x1169, 0x11BC], NFKC: [0xBF55], NFKD: [0x1108, 0x1169, 0x11BC] }, +{ source: [0xBF56], NFC: [0xBF56], NFD: [0x1108, 0x1169, 0x11BD], NFKC: [0xBF56], NFKD: [0x1108, 0x1169, 0x11BD] }, +{ source: [0xBF57], NFC: [0xBF57], NFD: [0x1108, 0x1169, 0x11BE], NFKC: [0xBF57], NFKD: [0x1108, 0x1169, 0x11BE] }, +{ source: [0xBF58], NFC: [0xBF58], NFD: [0x1108, 0x1169, 0x11BF], NFKC: [0xBF58], NFKD: [0x1108, 0x1169, 0x11BF] }, +{ source: [0xBF59], NFC: [0xBF59], NFD: [0x1108, 0x1169, 0x11C0], NFKC: [0xBF59], NFKD: [0x1108, 0x1169, 0x11C0] }, +{ source: [0xBF5A], NFC: [0xBF5A], NFD: [0x1108, 0x1169, 0x11C1], NFKC: [0xBF5A], NFKD: [0x1108, 0x1169, 0x11C1] }, +{ source: [0xBF5B], NFC: [0xBF5B], NFD: [0x1108, 0x1169, 0x11C2], NFKC: [0xBF5B], NFKD: [0x1108, 0x1169, 0x11C2] }, +{ source: [0xBF5C], NFC: [0xBF5C], NFD: [0x1108, 0x116A], NFKC: [0xBF5C], NFKD: [0x1108, 0x116A] }, +{ source: [0xBF5D], NFC: [0xBF5D], NFD: [0x1108, 0x116A, 0x11A8], NFKC: [0xBF5D], NFKD: [0x1108, 0x116A, 0x11A8] }, +{ source: [0xBF5E], NFC: [0xBF5E], NFD: [0x1108, 0x116A, 0x11A9], NFKC: [0xBF5E], NFKD: [0x1108, 0x116A, 0x11A9] }, +{ source: [0xBF5F], NFC: [0xBF5F], NFD: [0x1108, 0x116A, 0x11AA], NFKC: [0xBF5F], NFKD: [0x1108, 0x116A, 0x11AA] }, +{ source: [0xBF60], NFC: [0xBF60], NFD: [0x1108, 0x116A, 0x11AB], NFKC: [0xBF60], NFKD: [0x1108, 0x116A, 0x11AB] }, +{ source: [0xBF61], NFC: [0xBF61], NFD: [0x1108, 0x116A, 0x11AC], NFKC: [0xBF61], NFKD: [0x1108, 0x116A, 0x11AC] }, +{ source: [0xBF62], NFC: [0xBF62], NFD: [0x1108, 0x116A, 0x11AD], NFKC: [0xBF62], NFKD: [0x1108, 0x116A, 0x11AD] }, +{ source: [0xBF63], NFC: [0xBF63], NFD: [0x1108, 0x116A, 0x11AE], NFKC: [0xBF63], NFKD: [0x1108, 0x116A, 0x11AE] }, +{ source: [0xBF64], NFC: [0xBF64], NFD: [0x1108, 0x116A, 0x11AF], NFKC: [0xBF64], NFKD: [0x1108, 0x116A, 0x11AF] }, +{ source: [0xBF65], NFC: [0xBF65], NFD: [0x1108, 0x116A, 0x11B0], NFKC: [0xBF65], NFKD: [0x1108, 0x116A, 0x11B0] }, +{ source: [0xBF66], NFC: [0xBF66], NFD: [0x1108, 0x116A, 0x11B1], NFKC: [0xBF66], NFKD: [0x1108, 0x116A, 0x11B1] }, +{ source: [0xBF67], NFC: [0xBF67], NFD: [0x1108, 0x116A, 0x11B2], NFKC: [0xBF67], NFKD: [0x1108, 0x116A, 0x11B2] }, +{ source: [0xBF68], NFC: [0xBF68], NFD: [0x1108, 0x116A, 0x11B3], NFKC: [0xBF68], NFKD: [0x1108, 0x116A, 0x11B3] }, +{ source: [0xBF69], NFC: [0xBF69], NFD: [0x1108, 0x116A, 0x11B4], NFKC: [0xBF69], NFKD: [0x1108, 0x116A, 0x11B4] }, +{ source: [0xBF6A], NFC: [0xBF6A], NFD: [0x1108, 0x116A, 0x11B5], NFKC: [0xBF6A], NFKD: [0x1108, 0x116A, 0x11B5] }, +{ source: [0xBF6B], NFC: [0xBF6B], NFD: [0x1108, 0x116A, 0x11B6], NFKC: [0xBF6B], NFKD: [0x1108, 0x116A, 0x11B6] }, +{ source: [0xBF6C], NFC: [0xBF6C], NFD: [0x1108, 0x116A, 0x11B7], NFKC: [0xBF6C], NFKD: [0x1108, 0x116A, 0x11B7] }, +{ source: [0xBF6D], NFC: [0xBF6D], NFD: [0x1108, 0x116A, 0x11B8], NFKC: [0xBF6D], NFKD: [0x1108, 0x116A, 0x11B8] }, +{ source: [0xBF6E], NFC: [0xBF6E], NFD: [0x1108, 0x116A, 0x11B9], NFKC: [0xBF6E], NFKD: [0x1108, 0x116A, 0x11B9] }, +{ source: [0xBF6F], NFC: [0xBF6F], NFD: [0x1108, 0x116A, 0x11BA], NFKC: [0xBF6F], NFKD: [0x1108, 0x116A, 0x11BA] }, +{ source: [0xBF70], NFC: [0xBF70], NFD: [0x1108, 0x116A, 0x11BB], NFKC: [0xBF70], NFKD: [0x1108, 0x116A, 0x11BB] }, +{ source: [0xBF71], NFC: [0xBF71], NFD: [0x1108, 0x116A, 0x11BC], NFKC: [0xBF71], NFKD: [0x1108, 0x116A, 0x11BC] }, +{ source: [0xBF72], NFC: [0xBF72], NFD: [0x1108, 0x116A, 0x11BD], NFKC: [0xBF72], NFKD: [0x1108, 0x116A, 0x11BD] }, +{ source: [0xBF73], NFC: [0xBF73], NFD: [0x1108, 0x116A, 0x11BE], NFKC: [0xBF73], NFKD: [0x1108, 0x116A, 0x11BE] }, +{ source: [0xBF74], NFC: [0xBF74], NFD: [0x1108, 0x116A, 0x11BF], NFKC: [0xBF74], NFKD: [0x1108, 0x116A, 0x11BF] }, +{ source: [0xBF75], NFC: [0xBF75], NFD: [0x1108, 0x116A, 0x11C0], NFKC: [0xBF75], NFKD: [0x1108, 0x116A, 0x11C0] }, +{ source: [0xBF76], NFC: [0xBF76], NFD: [0x1108, 0x116A, 0x11C1], NFKC: [0xBF76], NFKD: [0x1108, 0x116A, 0x11C1] }, +{ source: [0xBF77], NFC: [0xBF77], NFD: [0x1108, 0x116A, 0x11C2], NFKC: [0xBF77], NFKD: [0x1108, 0x116A, 0x11C2] }, +{ source: [0xBF78], NFC: [0xBF78], NFD: [0x1108, 0x116B], NFKC: [0xBF78], NFKD: [0x1108, 0x116B] }, +{ source: [0xBF79], NFC: [0xBF79], NFD: [0x1108, 0x116B, 0x11A8], NFKC: [0xBF79], NFKD: [0x1108, 0x116B, 0x11A8] }, +{ source: [0xBF7A], NFC: [0xBF7A], NFD: [0x1108, 0x116B, 0x11A9], NFKC: [0xBF7A], NFKD: [0x1108, 0x116B, 0x11A9] }, +{ source: [0xBF7B], NFC: [0xBF7B], NFD: [0x1108, 0x116B, 0x11AA], NFKC: [0xBF7B], NFKD: [0x1108, 0x116B, 0x11AA] }, +{ source: [0xBF7C], NFC: [0xBF7C], NFD: [0x1108, 0x116B, 0x11AB], NFKC: [0xBF7C], NFKD: [0x1108, 0x116B, 0x11AB] }, +{ source: [0xBF7D], NFC: [0xBF7D], NFD: [0x1108, 0x116B, 0x11AC], NFKC: [0xBF7D], NFKD: [0x1108, 0x116B, 0x11AC] }, +{ source: [0xBF7E], NFC: [0xBF7E], NFD: [0x1108, 0x116B, 0x11AD], NFKC: [0xBF7E], NFKD: [0x1108, 0x116B, 0x11AD] }, +{ source: [0xBF7F], NFC: [0xBF7F], NFD: [0x1108, 0x116B, 0x11AE], NFKC: [0xBF7F], NFKD: [0x1108, 0x116B, 0x11AE] }, +{ source: [0xBF80], NFC: [0xBF80], NFD: [0x1108, 0x116B, 0x11AF], NFKC: [0xBF80], NFKD: [0x1108, 0x116B, 0x11AF] }, +{ source: [0xBF81], NFC: [0xBF81], NFD: [0x1108, 0x116B, 0x11B0], NFKC: [0xBF81], NFKD: [0x1108, 0x116B, 0x11B0] }, +{ source: [0xBF82], NFC: [0xBF82], NFD: [0x1108, 0x116B, 0x11B1], NFKC: [0xBF82], NFKD: [0x1108, 0x116B, 0x11B1] }, +{ source: [0xBF83], NFC: [0xBF83], NFD: [0x1108, 0x116B, 0x11B2], NFKC: [0xBF83], NFKD: [0x1108, 0x116B, 0x11B2] }, +{ source: [0xBF84], NFC: [0xBF84], NFD: [0x1108, 0x116B, 0x11B3], NFKC: [0xBF84], NFKD: [0x1108, 0x116B, 0x11B3] }, +{ source: [0xBF85], NFC: [0xBF85], NFD: [0x1108, 0x116B, 0x11B4], NFKC: [0xBF85], NFKD: [0x1108, 0x116B, 0x11B4] }, +{ source: [0xBF86], NFC: [0xBF86], NFD: [0x1108, 0x116B, 0x11B5], NFKC: [0xBF86], NFKD: [0x1108, 0x116B, 0x11B5] }, +{ source: [0xBF87], NFC: [0xBF87], NFD: [0x1108, 0x116B, 0x11B6], NFKC: [0xBF87], NFKD: [0x1108, 0x116B, 0x11B6] }, +{ source: [0xBF88], NFC: [0xBF88], NFD: [0x1108, 0x116B, 0x11B7], NFKC: [0xBF88], NFKD: [0x1108, 0x116B, 0x11B7] }, +{ source: [0xBF89], NFC: [0xBF89], NFD: [0x1108, 0x116B, 0x11B8], NFKC: [0xBF89], NFKD: [0x1108, 0x116B, 0x11B8] }, +{ source: [0xBF8A], NFC: [0xBF8A], NFD: [0x1108, 0x116B, 0x11B9], NFKC: [0xBF8A], NFKD: [0x1108, 0x116B, 0x11B9] }, +{ source: [0xBF8B], NFC: [0xBF8B], NFD: [0x1108, 0x116B, 0x11BA], NFKC: [0xBF8B], NFKD: [0x1108, 0x116B, 0x11BA] }, +{ source: [0xBF8C], NFC: [0xBF8C], NFD: [0x1108, 0x116B, 0x11BB], NFKC: [0xBF8C], NFKD: [0x1108, 0x116B, 0x11BB] }, +{ source: [0xBF8D], NFC: [0xBF8D], NFD: [0x1108, 0x116B, 0x11BC], NFKC: [0xBF8D], NFKD: [0x1108, 0x116B, 0x11BC] }, +{ source: [0xBF8E], NFC: [0xBF8E], NFD: [0x1108, 0x116B, 0x11BD], NFKC: [0xBF8E], NFKD: [0x1108, 0x116B, 0x11BD] }, +{ source: [0xBF8F], NFC: [0xBF8F], NFD: [0x1108, 0x116B, 0x11BE], NFKC: [0xBF8F], NFKD: [0x1108, 0x116B, 0x11BE] }, +{ source: [0xBF90], NFC: [0xBF90], NFD: [0x1108, 0x116B, 0x11BF], NFKC: [0xBF90], NFKD: [0x1108, 0x116B, 0x11BF] }, +{ source: [0xBF91], NFC: [0xBF91], NFD: [0x1108, 0x116B, 0x11C0], NFKC: [0xBF91], NFKD: [0x1108, 0x116B, 0x11C0] }, +{ source: [0xBF92], NFC: [0xBF92], NFD: [0x1108, 0x116B, 0x11C1], NFKC: [0xBF92], NFKD: [0x1108, 0x116B, 0x11C1] }, +{ source: [0xBF93], NFC: [0xBF93], NFD: [0x1108, 0x116B, 0x11C2], NFKC: [0xBF93], NFKD: [0x1108, 0x116B, 0x11C2] }, +{ source: [0xBF94], NFC: [0xBF94], NFD: [0x1108, 0x116C], NFKC: [0xBF94], NFKD: [0x1108, 0x116C] }, +{ source: [0xBF95], NFC: [0xBF95], NFD: [0x1108, 0x116C, 0x11A8], NFKC: [0xBF95], NFKD: [0x1108, 0x116C, 0x11A8] }, +{ source: [0xBF96], NFC: [0xBF96], NFD: [0x1108, 0x116C, 0x11A9], NFKC: [0xBF96], NFKD: [0x1108, 0x116C, 0x11A9] }, +{ source: [0xBF97], NFC: [0xBF97], NFD: [0x1108, 0x116C, 0x11AA], NFKC: [0xBF97], NFKD: [0x1108, 0x116C, 0x11AA] }, +{ source: [0xBF98], NFC: [0xBF98], NFD: [0x1108, 0x116C, 0x11AB], NFKC: [0xBF98], NFKD: [0x1108, 0x116C, 0x11AB] }, +{ source: [0xBF99], NFC: [0xBF99], NFD: [0x1108, 0x116C, 0x11AC], NFKC: [0xBF99], NFKD: [0x1108, 0x116C, 0x11AC] }, +{ source: [0xBF9A], NFC: [0xBF9A], NFD: [0x1108, 0x116C, 0x11AD], NFKC: [0xBF9A], NFKD: [0x1108, 0x116C, 0x11AD] }, +{ source: [0xBF9B], NFC: [0xBF9B], NFD: [0x1108, 0x116C, 0x11AE], NFKC: [0xBF9B], NFKD: [0x1108, 0x116C, 0x11AE] }, +{ source: [0xBF9C], NFC: [0xBF9C], NFD: [0x1108, 0x116C, 0x11AF], NFKC: [0xBF9C], NFKD: [0x1108, 0x116C, 0x11AF] }, +{ source: [0xBF9D], NFC: [0xBF9D], NFD: [0x1108, 0x116C, 0x11B0], NFKC: [0xBF9D], NFKD: [0x1108, 0x116C, 0x11B0] }, +{ source: [0xBF9E], NFC: [0xBF9E], NFD: [0x1108, 0x116C, 0x11B1], NFKC: [0xBF9E], NFKD: [0x1108, 0x116C, 0x11B1] }, +{ source: [0xBF9F], NFC: [0xBF9F], NFD: [0x1108, 0x116C, 0x11B2], NFKC: [0xBF9F], NFKD: [0x1108, 0x116C, 0x11B2] }, +{ source: [0xBFA0], NFC: [0xBFA0], NFD: [0x1108, 0x116C, 0x11B3], NFKC: [0xBFA0], NFKD: [0x1108, 0x116C, 0x11B3] }, +{ source: [0xBFA1], NFC: [0xBFA1], NFD: [0x1108, 0x116C, 0x11B4], NFKC: [0xBFA1], NFKD: [0x1108, 0x116C, 0x11B4] }, +{ source: [0xBFA2], NFC: [0xBFA2], NFD: [0x1108, 0x116C, 0x11B5], NFKC: [0xBFA2], NFKD: [0x1108, 0x116C, 0x11B5] }, +{ source: [0xBFA3], NFC: [0xBFA3], NFD: [0x1108, 0x116C, 0x11B6], NFKC: [0xBFA3], NFKD: [0x1108, 0x116C, 0x11B6] }, +{ source: [0xBFA4], NFC: [0xBFA4], NFD: [0x1108, 0x116C, 0x11B7], NFKC: [0xBFA4], NFKD: [0x1108, 0x116C, 0x11B7] }, +{ source: [0xBFA5], NFC: [0xBFA5], NFD: [0x1108, 0x116C, 0x11B8], NFKC: [0xBFA5], NFKD: [0x1108, 0x116C, 0x11B8] }, +{ source: [0xBFA6], NFC: [0xBFA6], NFD: [0x1108, 0x116C, 0x11B9], NFKC: [0xBFA6], NFKD: [0x1108, 0x116C, 0x11B9] }, +{ source: [0xBFA7], NFC: [0xBFA7], NFD: [0x1108, 0x116C, 0x11BA], NFKC: [0xBFA7], NFKD: [0x1108, 0x116C, 0x11BA] }, +{ source: [0xBFA8], NFC: [0xBFA8], NFD: [0x1108, 0x116C, 0x11BB], NFKC: [0xBFA8], NFKD: [0x1108, 0x116C, 0x11BB] }, +{ source: [0xBFA9], NFC: [0xBFA9], NFD: [0x1108, 0x116C, 0x11BC], NFKC: [0xBFA9], NFKD: [0x1108, 0x116C, 0x11BC] }, +{ source: [0xBFAA], NFC: [0xBFAA], NFD: [0x1108, 0x116C, 0x11BD], NFKC: [0xBFAA], NFKD: [0x1108, 0x116C, 0x11BD] }, +{ source: [0xBFAB], NFC: [0xBFAB], NFD: [0x1108, 0x116C, 0x11BE], NFKC: [0xBFAB], NFKD: [0x1108, 0x116C, 0x11BE] }, +{ source: [0xBFAC], NFC: [0xBFAC], NFD: [0x1108, 0x116C, 0x11BF], NFKC: [0xBFAC], NFKD: [0x1108, 0x116C, 0x11BF] }, +{ source: [0xBFAD], NFC: [0xBFAD], NFD: [0x1108, 0x116C, 0x11C0], NFKC: [0xBFAD], NFKD: [0x1108, 0x116C, 0x11C0] }, +{ source: [0xBFAE], NFC: [0xBFAE], NFD: [0x1108, 0x116C, 0x11C1], NFKC: [0xBFAE], NFKD: [0x1108, 0x116C, 0x11C1] }, +{ source: [0xBFAF], NFC: [0xBFAF], NFD: [0x1108, 0x116C, 0x11C2], NFKC: [0xBFAF], NFKD: [0x1108, 0x116C, 0x11C2] }, +{ source: [0xBFB0], NFC: [0xBFB0], NFD: [0x1108, 0x116D], NFKC: [0xBFB0], NFKD: [0x1108, 0x116D] }, +{ source: [0xBFB1], NFC: [0xBFB1], NFD: [0x1108, 0x116D, 0x11A8], NFKC: [0xBFB1], NFKD: [0x1108, 0x116D, 0x11A8] }, +{ source: [0xBFB2], NFC: [0xBFB2], NFD: [0x1108, 0x116D, 0x11A9], NFKC: [0xBFB2], NFKD: [0x1108, 0x116D, 0x11A9] }, +{ source: [0xBFB3], NFC: [0xBFB3], NFD: [0x1108, 0x116D, 0x11AA], NFKC: [0xBFB3], NFKD: [0x1108, 0x116D, 0x11AA] }, +{ source: [0xBFB4], NFC: [0xBFB4], NFD: [0x1108, 0x116D, 0x11AB], NFKC: [0xBFB4], NFKD: [0x1108, 0x116D, 0x11AB] }, +{ source: [0xBFB5], NFC: [0xBFB5], NFD: [0x1108, 0x116D, 0x11AC], NFKC: [0xBFB5], NFKD: [0x1108, 0x116D, 0x11AC] }, +{ source: [0xBFB6], NFC: [0xBFB6], NFD: [0x1108, 0x116D, 0x11AD], NFKC: [0xBFB6], NFKD: [0x1108, 0x116D, 0x11AD] }, +{ source: [0xBFB7], NFC: [0xBFB7], NFD: [0x1108, 0x116D, 0x11AE], NFKC: [0xBFB7], NFKD: [0x1108, 0x116D, 0x11AE] }, +{ source: [0xBFB8], NFC: [0xBFB8], NFD: [0x1108, 0x116D, 0x11AF], NFKC: [0xBFB8], NFKD: [0x1108, 0x116D, 0x11AF] }, +{ source: [0xBFB9], NFC: [0xBFB9], NFD: [0x1108, 0x116D, 0x11B0], NFKC: [0xBFB9], NFKD: [0x1108, 0x116D, 0x11B0] }, +{ source: [0xBFBA], NFC: [0xBFBA], NFD: [0x1108, 0x116D, 0x11B1], NFKC: [0xBFBA], NFKD: [0x1108, 0x116D, 0x11B1] }, +{ source: [0xBFBB], NFC: [0xBFBB], NFD: [0x1108, 0x116D, 0x11B2], NFKC: [0xBFBB], NFKD: [0x1108, 0x116D, 0x11B2] }, +{ source: [0xBFBC], NFC: [0xBFBC], NFD: [0x1108, 0x116D, 0x11B3], NFKC: [0xBFBC], NFKD: [0x1108, 0x116D, 0x11B3] }, +{ source: [0xBFBD], NFC: [0xBFBD], NFD: [0x1108, 0x116D, 0x11B4], NFKC: [0xBFBD], NFKD: [0x1108, 0x116D, 0x11B4] }, +{ source: [0xBFBE], NFC: [0xBFBE], NFD: [0x1108, 0x116D, 0x11B5], NFKC: [0xBFBE], NFKD: [0x1108, 0x116D, 0x11B5] }, +{ source: [0xBFBF], NFC: [0xBFBF], NFD: [0x1108, 0x116D, 0x11B6], NFKC: [0xBFBF], NFKD: [0x1108, 0x116D, 0x11B6] }, +{ source: [0xBFC0], NFC: [0xBFC0], NFD: [0x1108, 0x116D, 0x11B7], NFKC: [0xBFC0], NFKD: [0x1108, 0x116D, 0x11B7] }, +{ source: [0xBFC1], NFC: [0xBFC1], NFD: [0x1108, 0x116D, 0x11B8], NFKC: [0xBFC1], NFKD: [0x1108, 0x116D, 0x11B8] }, +{ source: [0xBFC2], NFC: [0xBFC2], NFD: [0x1108, 0x116D, 0x11B9], NFKC: [0xBFC2], NFKD: [0x1108, 0x116D, 0x11B9] }, +{ source: [0xBFC3], NFC: [0xBFC3], NFD: [0x1108, 0x116D, 0x11BA], NFKC: [0xBFC3], NFKD: [0x1108, 0x116D, 0x11BA] }, +{ source: [0xBFC4], NFC: [0xBFC4], NFD: [0x1108, 0x116D, 0x11BB], NFKC: [0xBFC4], NFKD: [0x1108, 0x116D, 0x11BB] }, +{ source: [0xBFC5], NFC: [0xBFC5], NFD: [0x1108, 0x116D, 0x11BC], NFKC: [0xBFC5], NFKD: [0x1108, 0x116D, 0x11BC] }, +{ source: [0xBFC6], NFC: [0xBFC6], NFD: [0x1108, 0x116D, 0x11BD], NFKC: [0xBFC6], NFKD: [0x1108, 0x116D, 0x11BD] }, +{ source: [0xBFC7], NFC: [0xBFC7], NFD: [0x1108, 0x116D, 0x11BE], NFKC: [0xBFC7], NFKD: [0x1108, 0x116D, 0x11BE] }, +{ source: [0xBFC8], NFC: [0xBFC8], NFD: [0x1108, 0x116D, 0x11BF], NFKC: [0xBFC8], NFKD: [0x1108, 0x116D, 0x11BF] }, +{ source: [0xBFC9], NFC: [0xBFC9], NFD: [0x1108, 0x116D, 0x11C0], NFKC: [0xBFC9], NFKD: [0x1108, 0x116D, 0x11C0] }, +{ source: [0xBFCA], NFC: [0xBFCA], NFD: [0x1108, 0x116D, 0x11C1], NFKC: [0xBFCA], NFKD: [0x1108, 0x116D, 0x11C1] }, +{ source: [0xBFCB], NFC: [0xBFCB], NFD: [0x1108, 0x116D, 0x11C2], NFKC: [0xBFCB], NFKD: [0x1108, 0x116D, 0x11C2] }, +{ source: [0xBFCC], NFC: [0xBFCC], NFD: [0x1108, 0x116E], NFKC: [0xBFCC], NFKD: [0x1108, 0x116E] }, +{ source: [0xBFCD], NFC: [0xBFCD], NFD: [0x1108, 0x116E, 0x11A8], NFKC: [0xBFCD], NFKD: [0x1108, 0x116E, 0x11A8] }, +{ source: [0xBFCE], NFC: [0xBFCE], NFD: [0x1108, 0x116E, 0x11A9], NFKC: [0xBFCE], NFKD: [0x1108, 0x116E, 0x11A9] }, +{ source: [0xBFCF], NFC: [0xBFCF], NFD: [0x1108, 0x116E, 0x11AA], NFKC: [0xBFCF], NFKD: [0x1108, 0x116E, 0x11AA] }, +{ source: [0xBFD0], NFC: [0xBFD0], NFD: [0x1108, 0x116E, 0x11AB], NFKC: [0xBFD0], NFKD: [0x1108, 0x116E, 0x11AB] }, +{ source: [0xBFD1], NFC: [0xBFD1], NFD: [0x1108, 0x116E, 0x11AC], NFKC: [0xBFD1], NFKD: [0x1108, 0x116E, 0x11AC] }, +{ source: [0xBFD2], NFC: [0xBFD2], NFD: [0x1108, 0x116E, 0x11AD], NFKC: [0xBFD2], NFKD: [0x1108, 0x116E, 0x11AD] }, +{ source: [0xBFD3], NFC: [0xBFD3], NFD: [0x1108, 0x116E, 0x11AE], NFKC: [0xBFD3], NFKD: [0x1108, 0x116E, 0x11AE] }, +{ source: [0xBFD4], NFC: [0xBFD4], NFD: [0x1108, 0x116E, 0x11AF], NFKC: [0xBFD4], NFKD: [0x1108, 0x116E, 0x11AF] }, +{ source: [0xBFD5], NFC: [0xBFD5], NFD: [0x1108, 0x116E, 0x11B0], NFKC: [0xBFD5], NFKD: [0x1108, 0x116E, 0x11B0] }, +{ source: [0xBFD6], NFC: [0xBFD6], NFD: [0x1108, 0x116E, 0x11B1], NFKC: [0xBFD6], NFKD: [0x1108, 0x116E, 0x11B1] }, +{ source: [0xBFD7], NFC: [0xBFD7], NFD: [0x1108, 0x116E, 0x11B2], NFKC: [0xBFD7], NFKD: [0x1108, 0x116E, 0x11B2] }, +{ source: [0xBFD8], NFC: [0xBFD8], NFD: [0x1108, 0x116E, 0x11B3], NFKC: [0xBFD8], NFKD: [0x1108, 0x116E, 0x11B3] }, +{ source: [0xBFD9], NFC: [0xBFD9], NFD: [0x1108, 0x116E, 0x11B4], NFKC: [0xBFD9], NFKD: [0x1108, 0x116E, 0x11B4] }, +{ source: [0xBFDA], NFC: [0xBFDA], NFD: [0x1108, 0x116E, 0x11B5], NFKC: [0xBFDA], NFKD: [0x1108, 0x116E, 0x11B5] }, +{ source: [0xBFDB], NFC: [0xBFDB], NFD: [0x1108, 0x116E, 0x11B6], NFKC: [0xBFDB], NFKD: [0x1108, 0x116E, 0x11B6] }, +{ source: [0xBFDC], NFC: [0xBFDC], NFD: [0x1108, 0x116E, 0x11B7], NFKC: [0xBFDC], NFKD: [0x1108, 0x116E, 0x11B7] }, +{ source: [0xBFDD], NFC: [0xBFDD], NFD: [0x1108, 0x116E, 0x11B8], NFKC: [0xBFDD], NFKD: [0x1108, 0x116E, 0x11B8] }, +{ source: [0xBFDE], NFC: [0xBFDE], NFD: [0x1108, 0x116E, 0x11B9], NFKC: [0xBFDE], NFKD: [0x1108, 0x116E, 0x11B9] }, +{ source: [0xBFDF], NFC: [0xBFDF], NFD: [0x1108, 0x116E, 0x11BA], NFKC: [0xBFDF], NFKD: [0x1108, 0x116E, 0x11BA] }, +{ source: [0xBFE0], NFC: [0xBFE0], NFD: [0x1108, 0x116E, 0x11BB], NFKC: [0xBFE0], NFKD: [0x1108, 0x116E, 0x11BB] }, +{ source: [0xBFE1], NFC: [0xBFE1], NFD: [0x1108, 0x116E, 0x11BC], NFKC: [0xBFE1], NFKD: [0x1108, 0x116E, 0x11BC] }, +{ source: [0xBFE2], NFC: [0xBFE2], NFD: [0x1108, 0x116E, 0x11BD], NFKC: [0xBFE2], NFKD: [0x1108, 0x116E, 0x11BD] }, +{ source: [0xBFE3], NFC: [0xBFE3], NFD: [0x1108, 0x116E, 0x11BE], NFKC: [0xBFE3], NFKD: [0x1108, 0x116E, 0x11BE] }, +{ source: [0xBFE4], NFC: [0xBFE4], NFD: [0x1108, 0x116E, 0x11BF], NFKC: [0xBFE4], NFKD: [0x1108, 0x116E, 0x11BF] }, +{ source: [0xBFE5], NFC: [0xBFE5], NFD: [0x1108, 0x116E, 0x11C0], NFKC: [0xBFE5], NFKD: [0x1108, 0x116E, 0x11C0] }, +{ source: [0xBFE6], NFC: [0xBFE6], NFD: [0x1108, 0x116E, 0x11C1], NFKC: [0xBFE6], NFKD: [0x1108, 0x116E, 0x11C1] }, +{ source: [0xBFE7], NFC: [0xBFE7], NFD: [0x1108, 0x116E, 0x11C2], NFKC: [0xBFE7], NFKD: [0x1108, 0x116E, 0x11C2] }, +{ source: [0xBFE8], NFC: [0xBFE8], NFD: [0x1108, 0x116F], NFKC: [0xBFE8], NFKD: [0x1108, 0x116F] }, +{ source: [0xBFE9], NFC: [0xBFE9], NFD: [0x1108, 0x116F, 0x11A8], NFKC: [0xBFE9], NFKD: [0x1108, 0x116F, 0x11A8] }, +{ source: [0xBFEA], NFC: [0xBFEA], NFD: [0x1108, 0x116F, 0x11A9], NFKC: [0xBFEA], NFKD: [0x1108, 0x116F, 0x11A9] }, +{ source: [0xBFEB], NFC: [0xBFEB], NFD: [0x1108, 0x116F, 0x11AA], NFKC: [0xBFEB], NFKD: [0x1108, 0x116F, 0x11AA] }, +{ source: [0xBFEC], NFC: [0xBFEC], NFD: [0x1108, 0x116F, 0x11AB], NFKC: [0xBFEC], NFKD: [0x1108, 0x116F, 0x11AB] }, +{ source: [0xBFED], NFC: [0xBFED], NFD: [0x1108, 0x116F, 0x11AC], NFKC: [0xBFED], NFKD: [0x1108, 0x116F, 0x11AC] }, +{ source: [0xBFEE], NFC: [0xBFEE], NFD: [0x1108, 0x116F, 0x11AD], NFKC: [0xBFEE], NFKD: [0x1108, 0x116F, 0x11AD] }, +{ source: [0xBFEF], NFC: [0xBFEF], NFD: [0x1108, 0x116F, 0x11AE], NFKC: [0xBFEF], NFKD: [0x1108, 0x116F, 0x11AE] }, +{ source: [0xBFF0], NFC: [0xBFF0], NFD: [0x1108, 0x116F, 0x11AF], NFKC: [0xBFF0], NFKD: [0x1108, 0x116F, 0x11AF] }, +{ source: [0xBFF1], NFC: [0xBFF1], NFD: [0x1108, 0x116F, 0x11B0], NFKC: [0xBFF1], NFKD: [0x1108, 0x116F, 0x11B0] }, +{ source: [0xBFF2], NFC: [0xBFF2], NFD: [0x1108, 0x116F, 0x11B1], NFKC: [0xBFF2], NFKD: [0x1108, 0x116F, 0x11B1] }, +{ source: [0xBFF3], NFC: [0xBFF3], NFD: [0x1108, 0x116F, 0x11B2], NFKC: [0xBFF3], NFKD: [0x1108, 0x116F, 0x11B2] }, +{ source: [0xBFF4], NFC: [0xBFF4], NFD: [0x1108, 0x116F, 0x11B3], NFKC: [0xBFF4], NFKD: [0x1108, 0x116F, 0x11B3] }, +{ source: [0xBFF5], NFC: [0xBFF5], NFD: [0x1108, 0x116F, 0x11B4], NFKC: [0xBFF5], NFKD: [0x1108, 0x116F, 0x11B4] }, +{ source: [0xBFF6], NFC: [0xBFF6], NFD: [0x1108, 0x116F, 0x11B5], NFKC: [0xBFF6], NFKD: [0x1108, 0x116F, 0x11B5] }, +{ source: [0xBFF7], NFC: [0xBFF7], NFD: [0x1108, 0x116F, 0x11B6], NFKC: [0xBFF7], NFKD: [0x1108, 0x116F, 0x11B6] }, +{ source: [0xBFF8], NFC: [0xBFF8], NFD: [0x1108, 0x116F, 0x11B7], NFKC: [0xBFF8], NFKD: [0x1108, 0x116F, 0x11B7] }, +{ source: [0xBFF9], NFC: [0xBFF9], NFD: [0x1108, 0x116F, 0x11B8], NFKC: [0xBFF9], NFKD: [0x1108, 0x116F, 0x11B8] }, +{ source: [0xBFFA], NFC: [0xBFFA], NFD: [0x1108, 0x116F, 0x11B9], NFKC: [0xBFFA], NFKD: [0x1108, 0x116F, 0x11B9] }, +{ source: [0xBFFB], NFC: [0xBFFB], NFD: [0x1108, 0x116F, 0x11BA], NFKC: [0xBFFB], NFKD: [0x1108, 0x116F, 0x11BA] }, +{ source: [0xBFFC], NFC: [0xBFFC], NFD: [0x1108, 0x116F, 0x11BB], NFKC: [0xBFFC], NFKD: [0x1108, 0x116F, 0x11BB] }, +{ source: [0xBFFD], NFC: [0xBFFD], NFD: [0x1108, 0x116F, 0x11BC], NFKC: [0xBFFD], NFKD: [0x1108, 0x116F, 0x11BC] }, +{ source: [0xBFFE], NFC: [0xBFFE], NFD: [0x1108, 0x116F, 0x11BD], NFKC: [0xBFFE], NFKD: [0x1108, 0x116F, 0x11BD] }, +{ source: [0xBFFF], NFC: [0xBFFF], NFD: [0x1108, 0x116F, 0x11BE], NFKC: [0xBFFF], NFKD: [0x1108, 0x116F, 0x11BE] }, +{ source: [0xC000], NFC: [0xC000], NFD: [0x1108, 0x116F, 0x11BF], NFKC: [0xC000], NFKD: [0x1108, 0x116F, 0x11BF] }, +{ source: [0xC001], NFC: [0xC001], NFD: [0x1108, 0x116F, 0x11C0], NFKC: [0xC001], NFKD: [0x1108, 0x116F, 0x11C0] }, +{ source: [0xC002], NFC: [0xC002], NFD: [0x1108, 0x116F, 0x11C1], NFKC: [0xC002], NFKD: [0x1108, 0x116F, 0x11C1] }, +{ source: [0xC003], NFC: [0xC003], NFD: [0x1108, 0x116F, 0x11C2], NFKC: [0xC003], NFKD: [0x1108, 0x116F, 0x11C2] }, +{ source: [0xC004], NFC: [0xC004], NFD: [0x1108, 0x1170], NFKC: [0xC004], NFKD: [0x1108, 0x1170] }, +{ source: [0xC005], NFC: [0xC005], NFD: [0x1108, 0x1170, 0x11A8], NFKC: [0xC005], NFKD: [0x1108, 0x1170, 0x11A8] }, +{ source: [0xC006], NFC: [0xC006], NFD: [0x1108, 0x1170, 0x11A9], NFKC: [0xC006], NFKD: [0x1108, 0x1170, 0x11A9] }, +{ source: [0xC007], NFC: [0xC007], NFD: [0x1108, 0x1170, 0x11AA], NFKC: [0xC007], NFKD: [0x1108, 0x1170, 0x11AA] }, +{ source: [0xC008], NFC: [0xC008], NFD: [0x1108, 0x1170, 0x11AB], NFKC: [0xC008], NFKD: [0x1108, 0x1170, 0x11AB] }, +{ source: [0xC009], NFC: [0xC009], NFD: [0x1108, 0x1170, 0x11AC], NFKC: [0xC009], NFKD: [0x1108, 0x1170, 0x11AC] }, +{ source: [0xC00A], NFC: [0xC00A], NFD: [0x1108, 0x1170, 0x11AD], NFKC: [0xC00A], NFKD: [0x1108, 0x1170, 0x11AD] }, +{ source: [0xC00B], NFC: [0xC00B], NFD: [0x1108, 0x1170, 0x11AE], NFKC: [0xC00B], NFKD: [0x1108, 0x1170, 0x11AE] }, +{ source: [0xC00C], NFC: [0xC00C], NFD: [0x1108, 0x1170, 0x11AF], NFKC: [0xC00C], NFKD: [0x1108, 0x1170, 0x11AF] }, +{ source: [0xC00D], NFC: [0xC00D], NFD: [0x1108, 0x1170, 0x11B0], NFKC: [0xC00D], NFKD: [0x1108, 0x1170, 0x11B0] }, +{ source: [0xC00E], NFC: [0xC00E], NFD: [0x1108, 0x1170, 0x11B1], NFKC: [0xC00E], NFKD: [0x1108, 0x1170, 0x11B1] }, +{ source: [0xC00F], NFC: [0xC00F], NFD: [0x1108, 0x1170, 0x11B2], NFKC: [0xC00F], NFKD: [0x1108, 0x1170, 0x11B2] }, +{ source: [0xC010], NFC: [0xC010], NFD: [0x1108, 0x1170, 0x11B3], NFKC: [0xC010], NFKD: [0x1108, 0x1170, 0x11B3] }, +{ source: [0xC011], NFC: [0xC011], NFD: [0x1108, 0x1170, 0x11B4], NFKC: [0xC011], NFKD: [0x1108, 0x1170, 0x11B4] }, +{ source: [0xC012], NFC: [0xC012], NFD: [0x1108, 0x1170, 0x11B5], NFKC: [0xC012], NFKD: [0x1108, 0x1170, 0x11B5] }, +{ source: [0xC013], NFC: [0xC013], NFD: [0x1108, 0x1170, 0x11B6], NFKC: [0xC013], NFKD: [0x1108, 0x1170, 0x11B6] }, +{ source: [0xC014], NFC: [0xC014], NFD: [0x1108, 0x1170, 0x11B7], NFKC: [0xC014], NFKD: [0x1108, 0x1170, 0x11B7] }, +{ source: [0xC015], NFC: [0xC015], NFD: [0x1108, 0x1170, 0x11B8], NFKC: [0xC015], NFKD: [0x1108, 0x1170, 0x11B8] }, +{ source: [0xC016], NFC: [0xC016], NFD: [0x1108, 0x1170, 0x11B9], NFKC: [0xC016], NFKD: [0x1108, 0x1170, 0x11B9] }, +{ source: [0xC017], NFC: [0xC017], NFD: [0x1108, 0x1170, 0x11BA], NFKC: [0xC017], NFKD: [0x1108, 0x1170, 0x11BA] }, +{ source: [0xC018], NFC: [0xC018], NFD: [0x1108, 0x1170, 0x11BB], NFKC: [0xC018], NFKD: [0x1108, 0x1170, 0x11BB] }, +{ source: [0xC019], NFC: [0xC019], NFD: [0x1108, 0x1170, 0x11BC], NFKC: [0xC019], NFKD: [0x1108, 0x1170, 0x11BC] }, +{ source: [0xC01A], NFC: [0xC01A], NFD: [0x1108, 0x1170, 0x11BD], NFKC: [0xC01A], NFKD: [0x1108, 0x1170, 0x11BD] }, +{ source: [0xC01B], NFC: [0xC01B], NFD: [0x1108, 0x1170, 0x11BE], NFKC: [0xC01B], NFKD: [0x1108, 0x1170, 0x11BE] }, +{ source: [0xC01C], NFC: [0xC01C], NFD: [0x1108, 0x1170, 0x11BF], NFKC: [0xC01C], NFKD: [0x1108, 0x1170, 0x11BF] }, +{ source: [0xC01D], NFC: [0xC01D], NFD: [0x1108, 0x1170, 0x11C0], NFKC: [0xC01D], NFKD: [0x1108, 0x1170, 0x11C0] }, +{ source: [0xC01E], NFC: [0xC01E], NFD: [0x1108, 0x1170, 0x11C1], NFKC: [0xC01E], NFKD: [0x1108, 0x1170, 0x11C1] }, +{ source: [0xC01F], NFC: [0xC01F], NFD: [0x1108, 0x1170, 0x11C2], NFKC: [0xC01F], NFKD: [0x1108, 0x1170, 0x11C2] }, +{ source: [0xC020], NFC: [0xC020], NFD: [0x1108, 0x1171], NFKC: [0xC020], NFKD: [0x1108, 0x1171] }, +{ source: [0xC021], NFC: [0xC021], NFD: [0x1108, 0x1171, 0x11A8], NFKC: [0xC021], NFKD: [0x1108, 0x1171, 0x11A8] }, +{ source: [0xC022], NFC: [0xC022], NFD: [0x1108, 0x1171, 0x11A9], NFKC: [0xC022], NFKD: [0x1108, 0x1171, 0x11A9] }, +{ source: [0xC023], NFC: [0xC023], NFD: [0x1108, 0x1171, 0x11AA], NFKC: [0xC023], NFKD: [0x1108, 0x1171, 0x11AA] }, +{ source: [0xC024], NFC: [0xC024], NFD: [0x1108, 0x1171, 0x11AB], NFKC: [0xC024], NFKD: [0x1108, 0x1171, 0x11AB] }, +{ source: [0xC025], NFC: [0xC025], NFD: [0x1108, 0x1171, 0x11AC], NFKC: [0xC025], NFKD: [0x1108, 0x1171, 0x11AC] }, +{ source: [0xC026], NFC: [0xC026], NFD: [0x1108, 0x1171, 0x11AD], NFKC: [0xC026], NFKD: [0x1108, 0x1171, 0x11AD] }, +{ source: [0xC027], NFC: [0xC027], NFD: [0x1108, 0x1171, 0x11AE], NFKC: [0xC027], NFKD: [0x1108, 0x1171, 0x11AE] }, +{ source: [0xC028], NFC: [0xC028], NFD: [0x1108, 0x1171, 0x11AF], NFKC: [0xC028], NFKD: [0x1108, 0x1171, 0x11AF] }, +{ source: [0xC029], NFC: [0xC029], NFD: [0x1108, 0x1171, 0x11B0], NFKC: [0xC029], NFKD: [0x1108, 0x1171, 0x11B0] }, +{ source: [0xC02A], NFC: [0xC02A], NFD: [0x1108, 0x1171, 0x11B1], NFKC: [0xC02A], NFKD: [0x1108, 0x1171, 0x11B1] }, +{ source: [0xC02B], NFC: [0xC02B], NFD: [0x1108, 0x1171, 0x11B2], NFKC: [0xC02B], NFKD: [0x1108, 0x1171, 0x11B2] }, +{ source: [0xC02C], NFC: [0xC02C], NFD: [0x1108, 0x1171, 0x11B3], NFKC: [0xC02C], NFKD: [0x1108, 0x1171, 0x11B3] }, +{ source: [0xC02D], NFC: [0xC02D], NFD: [0x1108, 0x1171, 0x11B4], NFKC: [0xC02D], NFKD: [0x1108, 0x1171, 0x11B4] }, +{ source: [0xC02E], NFC: [0xC02E], NFD: [0x1108, 0x1171, 0x11B5], NFKC: [0xC02E], NFKD: [0x1108, 0x1171, 0x11B5] }, +{ source: [0xC02F], NFC: [0xC02F], NFD: [0x1108, 0x1171, 0x11B6], NFKC: [0xC02F], NFKD: [0x1108, 0x1171, 0x11B6] }, +{ source: [0xC030], NFC: [0xC030], NFD: [0x1108, 0x1171, 0x11B7], NFKC: [0xC030], NFKD: [0x1108, 0x1171, 0x11B7] }, +{ source: [0xC031], NFC: [0xC031], NFD: [0x1108, 0x1171, 0x11B8], NFKC: [0xC031], NFKD: [0x1108, 0x1171, 0x11B8] }, +{ source: [0xC032], NFC: [0xC032], NFD: [0x1108, 0x1171, 0x11B9], NFKC: [0xC032], NFKD: [0x1108, 0x1171, 0x11B9] }, +{ source: [0xC033], NFC: [0xC033], NFD: [0x1108, 0x1171, 0x11BA], NFKC: [0xC033], NFKD: [0x1108, 0x1171, 0x11BA] }, +{ source: [0xC034], NFC: [0xC034], NFD: [0x1108, 0x1171, 0x11BB], NFKC: [0xC034], NFKD: [0x1108, 0x1171, 0x11BB] }, +{ source: [0xC035], NFC: [0xC035], NFD: [0x1108, 0x1171, 0x11BC], NFKC: [0xC035], NFKD: [0x1108, 0x1171, 0x11BC] }, +{ source: [0xC036], NFC: [0xC036], NFD: [0x1108, 0x1171, 0x11BD], NFKC: [0xC036], NFKD: [0x1108, 0x1171, 0x11BD] }, +{ source: [0xC037], NFC: [0xC037], NFD: [0x1108, 0x1171, 0x11BE], NFKC: [0xC037], NFKD: [0x1108, 0x1171, 0x11BE] }, +{ source: [0xC038], NFC: [0xC038], NFD: [0x1108, 0x1171, 0x11BF], NFKC: [0xC038], NFKD: [0x1108, 0x1171, 0x11BF] }, +{ source: [0xC039], NFC: [0xC039], NFD: [0x1108, 0x1171, 0x11C0], NFKC: [0xC039], NFKD: [0x1108, 0x1171, 0x11C0] }, +{ source: [0xC03A], NFC: [0xC03A], NFD: [0x1108, 0x1171, 0x11C1], NFKC: [0xC03A], NFKD: [0x1108, 0x1171, 0x11C1] }, +{ source: [0xC03B], NFC: [0xC03B], NFD: [0x1108, 0x1171, 0x11C2], NFKC: [0xC03B], NFKD: [0x1108, 0x1171, 0x11C2] }, +{ source: [0xC03C], NFC: [0xC03C], NFD: [0x1108, 0x1172], NFKC: [0xC03C], NFKD: [0x1108, 0x1172] }, +{ source: [0xC03D], NFC: [0xC03D], NFD: [0x1108, 0x1172, 0x11A8], NFKC: [0xC03D], NFKD: [0x1108, 0x1172, 0x11A8] }, +{ source: [0xC03E], NFC: [0xC03E], NFD: [0x1108, 0x1172, 0x11A9], NFKC: [0xC03E], NFKD: [0x1108, 0x1172, 0x11A9] }, +{ source: [0xC03F], NFC: [0xC03F], NFD: [0x1108, 0x1172, 0x11AA], NFKC: [0xC03F], NFKD: [0x1108, 0x1172, 0x11AA] }, +{ source: [0xC040], NFC: [0xC040], NFD: [0x1108, 0x1172, 0x11AB], NFKC: [0xC040], NFKD: [0x1108, 0x1172, 0x11AB] }, +{ source: [0xC041], NFC: [0xC041], NFD: [0x1108, 0x1172, 0x11AC], NFKC: [0xC041], NFKD: [0x1108, 0x1172, 0x11AC] }, +{ source: [0xC042], NFC: [0xC042], NFD: [0x1108, 0x1172, 0x11AD], NFKC: [0xC042], NFKD: [0x1108, 0x1172, 0x11AD] }, +{ source: [0xC043], NFC: [0xC043], NFD: [0x1108, 0x1172, 0x11AE], NFKC: [0xC043], NFKD: [0x1108, 0x1172, 0x11AE] }, +{ source: [0xC044], NFC: [0xC044], NFD: [0x1108, 0x1172, 0x11AF], NFKC: [0xC044], NFKD: [0x1108, 0x1172, 0x11AF] }, +{ source: [0xC045], NFC: [0xC045], NFD: [0x1108, 0x1172, 0x11B0], NFKC: [0xC045], NFKD: [0x1108, 0x1172, 0x11B0] }, +{ source: [0xC046], NFC: [0xC046], NFD: [0x1108, 0x1172, 0x11B1], NFKC: [0xC046], NFKD: [0x1108, 0x1172, 0x11B1] }, +{ source: [0xC047], NFC: [0xC047], NFD: [0x1108, 0x1172, 0x11B2], NFKC: [0xC047], NFKD: [0x1108, 0x1172, 0x11B2] }, +{ source: [0xC048], NFC: [0xC048], NFD: [0x1108, 0x1172, 0x11B3], NFKC: [0xC048], NFKD: [0x1108, 0x1172, 0x11B3] }, +{ source: [0xC049], NFC: [0xC049], NFD: [0x1108, 0x1172, 0x11B4], NFKC: [0xC049], NFKD: [0x1108, 0x1172, 0x11B4] }, +{ source: [0xC04A], NFC: [0xC04A], NFD: [0x1108, 0x1172, 0x11B5], NFKC: [0xC04A], NFKD: [0x1108, 0x1172, 0x11B5] }, +{ source: [0xC04B], NFC: [0xC04B], NFD: [0x1108, 0x1172, 0x11B6], NFKC: [0xC04B], NFKD: [0x1108, 0x1172, 0x11B6] }, +{ source: [0xC04C], NFC: [0xC04C], NFD: [0x1108, 0x1172, 0x11B7], NFKC: [0xC04C], NFKD: [0x1108, 0x1172, 0x11B7] }, +{ source: [0xC04D], NFC: [0xC04D], NFD: [0x1108, 0x1172, 0x11B8], NFKC: [0xC04D], NFKD: [0x1108, 0x1172, 0x11B8] }, +{ source: [0xC04E], NFC: [0xC04E], NFD: [0x1108, 0x1172, 0x11B9], NFKC: [0xC04E], NFKD: [0x1108, 0x1172, 0x11B9] }, +{ source: [0xC04F], NFC: [0xC04F], NFD: [0x1108, 0x1172, 0x11BA], NFKC: [0xC04F], NFKD: [0x1108, 0x1172, 0x11BA] }, +{ source: [0xC050], NFC: [0xC050], NFD: [0x1108, 0x1172, 0x11BB], NFKC: [0xC050], NFKD: [0x1108, 0x1172, 0x11BB] }, +{ source: [0xC051], NFC: [0xC051], NFD: [0x1108, 0x1172, 0x11BC], NFKC: [0xC051], NFKD: [0x1108, 0x1172, 0x11BC] }, +{ source: [0xC052], NFC: [0xC052], NFD: [0x1108, 0x1172, 0x11BD], NFKC: [0xC052], NFKD: [0x1108, 0x1172, 0x11BD] }, +{ source: [0xC053], NFC: [0xC053], NFD: [0x1108, 0x1172, 0x11BE], NFKC: [0xC053], NFKD: [0x1108, 0x1172, 0x11BE] }, +{ source: [0xC054], NFC: [0xC054], NFD: [0x1108, 0x1172, 0x11BF], NFKC: [0xC054], NFKD: [0x1108, 0x1172, 0x11BF] }, +{ source: [0xC055], NFC: [0xC055], NFD: [0x1108, 0x1172, 0x11C0], NFKC: [0xC055], NFKD: [0x1108, 0x1172, 0x11C0] }, +{ source: [0xC056], NFC: [0xC056], NFD: [0x1108, 0x1172, 0x11C1], NFKC: [0xC056], NFKD: [0x1108, 0x1172, 0x11C1] }, +{ source: [0xC057], NFC: [0xC057], NFD: [0x1108, 0x1172, 0x11C2], NFKC: [0xC057], NFKD: [0x1108, 0x1172, 0x11C2] }, +{ source: [0xC058], NFC: [0xC058], NFD: [0x1108, 0x1173], NFKC: [0xC058], NFKD: [0x1108, 0x1173] }, +{ source: [0xC059], NFC: [0xC059], NFD: [0x1108, 0x1173, 0x11A8], NFKC: [0xC059], NFKD: [0x1108, 0x1173, 0x11A8] }, +{ source: [0xC05A], NFC: [0xC05A], NFD: [0x1108, 0x1173, 0x11A9], NFKC: [0xC05A], NFKD: [0x1108, 0x1173, 0x11A9] }, +{ source: [0xC05B], NFC: [0xC05B], NFD: [0x1108, 0x1173, 0x11AA], NFKC: [0xC05B], NFKD: [0x1108, 0x1173, 0x11AA] }, +{ source: [0xC05C], NFC: [0xC05C], NFD: [0x1108, 0x1173, 0x11AB], NFKC: [0xC05C], NFKD: [0x1108, 0x1173, 0x11AB] }, +{ source: [0xC05D], NFC: [0xC05D], NFD: [0x1108, 0x1173, 0x11AC], NFKC: [0xC05D], NFKD: [0x1108, 0x1173, 0x11AC] }, +{ source: [0xC05E], NFC: [0xC05E], NFD: [0x1108, 0x1173, 0x11AD], NFKC: [0xC05E], NFKD: [0x1108, 0x1173, 0x11AD] }, +{ source: [0xC05F], NFC: [0xC05F], NFD: [0x1108, 0x1173, 0x11AE], NFKC: [0xC05F], NFKD: [0x1108, 0x1173, 0x11AE] }, +{ source: [0xC060], NFC: [0xC060], NFD: [0x1108, 0x1173, 0x11AF], NFKC: [0xC060], NFKD: [0x1108, 0x1173, 0x11AF] }, +{ source: [0xC061], NFC: [0xC061], NFD: [0x1108, 0x1173, 0x11B0], NFKC: [0xC061], NFKD: [0x1108, 0x1173, 0x11B0] }, +{ source: [0xC062], NFC: [0xC062], NFD: [0x1108, 0x1173, 0x11B1], NFKC: [0xC062], NFKD: [0x1108, 0x1173, 0x11B1] }, +{ source: [0xC063], NFC: [0xC063], NFD: [0x1108, 0x1173, 0x11B2], NFKC: [0xC063], NFKD: [0x1108, 0x1173, 0x11B2] }, +{ source: [0xC064], NFC: [0xC064], NFD: [0x1108, 0x1173, 0x11B3], NFKC: [0xC064], NFKD: [0x1108, 0x1173, 0x11B3] }, +{ source: [0xC065], NFC: [0xC065], NFD: [0x1108, 0x1173, 0x11B4], NFKC: [0xC065], NFKD: [0x1108, 0x1173, 0x11B4] }, +{ source: [0xC066], NFC: [0xC066], NFD: [0x1108, 0x1173, 0x11B5], NFKC: [0xC066], NFKD: [0x1108, 0x1173, 0x11B5] }, +{ source: [0xC067], NFC: [0xC067], NFD: [0x1108, 0x1173, 0x11B6], NFKC: [0xC067], NFKD: [0x1108, 0x1173, 0x11B6] }, +{ source: [0xC068], NFC: [0xC068], NFD: [0x1108, 0x1173, 0x11B7], NFKC: [0xC068], NFKD: [0x1108, 0x1173, 0x11B7] }, +{ source: [0xC069], NFC: [0xC069], NFD: [0x1108, 0x1173, 0x11B8], NFKC: [0xC069], NFKD: [0x1108, 0x1173, 0x11B8] }, +{ source: [0xC06A], NFC: [0xC06A], NFD: [0x1108, 0x1173, 0x11B9], NFKC: [0xC06A], NFKD: [0x1108, 0x1173, 0x11B9] }, +{ source: [0xC06B], NFC: [0xC06B], NFD: [0x1108, 0x1173, 0x11BA], NFKC: [0xC06B], NFKD: [0x1108, 0x1173, 0x11BA] }, +{ source: [0xC06C], NFC: [0xC06C], NFD: [0x1108, 0x1173, 0x11BB], NFKC: [0xC06C], NFKD: [0x1108, 0x1173, 0x11BB] }, +{ source: [0xC06D], NFC: [0xC06D], NFD: [0x1108, 0x1173, 0x11BC], NFKC: [0xC06D], NFKD: [0x1108, 0x1173, 0x11BC] }, +{ source: [0xC06E], NFC: [0xC06E], NFD: [0x1108, 0x1173, 0x11BD], NFKC: [0xC06E], NFKD: [0x1108, 0x1173, 0x11BD] }, +{ source: [0xC06F], NFC: [0xC06F], NFD: [0x1108, 0x1173, 0x11BE], NFKC: [0xC06F], NFKD: [0x1108, 0x1173, 0x11BE] }, +{ source: [0xC070], NFC: [0xC070], NFD: [0x1108, 0x1173, 0x11BF], NFKC: [0xC070], NFKD: [0x1108, 0x1173, 0x11BF] }, +{ source: [0xC071], NFC: [0xC071], NFD: [0x1108, 0x1173, 0x11C0], NFKC: [0xC071], NFKD: [0x1108, 0x1173, 0x11C0] }, +{ source: [0xC072], NFC: [0xC072], NFD: [0x1108, 0x1173, 0x11C1], NFKC: [0xC072], NFKD: [0x1108, 0x1173, 0x11C1] }, +{ source: [0xC073], NFC: [0xC073], NFD: [0x1108, 0x1173, 0x11C2], NFKC: [0xC073], NFKD: [0x1108, 0x1173, 0x11C2] }, +{ source: [0xC074], NFC: [0xC074], NFD: [0x1108, 0x1174], NFKC: [0xC074], NFKD: [0x1108, 0x1174] }, +{ source: [0xC075], NFC: [0xC075], NFD: [0x1108, 0x1174, 0x11A8], NFKC: [0xC075], NFKD: [0x1108, 0x1174, 0x11A8] }, +{ source: [0xC076], NFC: [0xC076], NFD: [0x1108, 0x1174, 0x11A9], NFKC: [0xC076], NFKD: [0x1108, 0x1174, 0x11A9] }, +{ source: [0xC077], NFC: [0xC077], NFD: [0x1108, 0x1174, 0x11AA], NFKC: [0xC077], NFKD: [0x1108, 0x1174, 0x11AA] }, +{ source: [0xC078], NFC: [0xC078], NFD: [0x1108, 0x1174, 0x11AB], NFKC: [0xC078], NFKD: [0x1108, 0x1174, 0x11AB] }, +{ source: [0xC079], NFC: [0xC079], NFD: [0x1108, 0x1174, 0x11AC], NFKC: [0xC079], NFKD: [0x1108, 0x1174, 0x11AC] }, +{ source: [0xC07A], NFC: [0xC07A], NFD: [0x1108, 0x1174, 0x11AD], NFKC: [0xC07A], NFKD: [0x1108, 0x1174, 0x11AD] }, +{ source: [0xC07B], NFC: [0xC07B], NFD: [0x1108, 0x1174, 0x11AE], NFKC: [0xC07B], NFKD: [0x1108, 0x1174, 0x11AE] }, +{ source: [0xC07C], NFC: [0xC07C], NFD: [0x1108, 0x1174, 0x11AF], NFKC: [0xC07C], NFKD: [0x1108, 0x1174, 0x11AF] }, +{ source: [0xC07D], NFC: [0xC07D], NFD: [0x1108, 0x1174, 0x11B0], NFKC: [0xC07D], NFKD: [0x1108, 0x1174, 0x11B0] }, +{ source: [0xC07E], NFC: [0xC07E], NFD: [0x1108, 0x1174, 0x11B1], NFKC: [0xC07E], NFKD: [0x1108, 0x1174, 0x11B1] }, +{ source: [0xC07F], NFC: [0xC07F], NFD: [0x1108, 0x1174, 0x11B2], NFKC: [0xC07F], NFKD: [0x1108, 0x1174, 0x11B2] }, +{ source: [0xC080], NFC: [0xC080], NFD: [0x1108, 0x1174, 0x11B3], NFKC: [0xC080], NFKD: [0x1108, 0x1174, 0x11B3] }, +{ source: [0xC081], NFC: [0xC081], NFD: [0x1108, 0x1174, 0x11B4], NFKC: [0xC081], NFKD: [0x1108, 0x1174, 0x11B4] }, +{ source: [0xC082], NFC: [0xC082], NFD: [0x1108, 0x1174, 0x11B5], NFKC: [0xC082], NFKD: [0x1108, 0x1174, 0x11B5] }, +{ source: [0xC083], NFC: [0xC083], NFD: [0x1108, 0x1174, 0x11B6], NFKC: [0xC083], NFKD: [0x1108, 0x1174, 0x11B6] }, +{ source: [0xC084], NFC: [0xC084], NFD: [0x1108, 0x1174, 0x11B7], NFKC: [0xC084], NFKD: [0x1108, 0x1174, 0x11B7] }, +{ source: [0xC085], NFC: [0xC085], NFD: [0x1108, 0x1174, 0x11B8], NFKC: [0xC085], NFKD: [0x1108, 0x1174, 0x11B8] }, +{ source: [0xC086], NFC: [0xC086], NFD: [0x1108, 0x1174, 0x11B9], NFKC: [0xC086], NFKD: [0x1108, 0x1174, 0x11B9] }, +{ source: [0xC087], NFC: [0xC087], NFD: [0x1108, 0x1174, 0x11BA], NFKC: [0xC087], NFKD: [0x1108, 0x1174, 0x11BA] }, +{ source: [0xC088], NFC: [0xC088], NFD: [0x1108, 0x1174, 0x11BB], NFKC: [0xC088], NFKD: [0x1108, 0x1174, 0x11BB] }, +{ source: [0xC089], NFC: [0xC089], NFD: [0x1108, 0x1174, 0x11BC], NFKC: [0xC089], NFKD: [0x1108, 0x1174, 0x11BC] }, +{ source: [0xC08A], NFC: [0xC08A], NFD: [0x1108, 0x1174, 0x11BD], NFKC: [0xC08A], NFKD: [0x1108, 0x1174, 0x11BD] }, +{ source: [0xC08B], NFC: [0xC08B], NFD: [0x1108, 0x1174, 0x11BE], NFKC: [0xC08B], NFKD: [0x1108, 0x1174, 0x11BE] }, +{ source: [0xC08C], NFC: [0xC08C], NFD: [0x1108, 0x1174, 0x11BF], NFKC: [0xC08C], NFKD: [0x1108, 0x1174, 0x11BF] }, +{ source: [0xC08D], NFC: [0xC08D], NFD: [0x1108, 0x1174, 0x11C0], NFKC: [0xC08D], NFKD: [0x1108, 0x1174, 0x11C0] }, +{ source: [0xC08E], NFC: [0xC08E], NFD: [0x1108, 0x1174, 0x11C1], NFKC: [0xC08E], NFKD: [0x1108, 0x1174, 0x11C1] }, +{ source: [0xC08F], NFC: [0xC08F], NFD: [0x1108, 0x1174, 0x11C2], NFKC: [0xC08F], NFKD: [0x1108, 0x1174, 0x11C2] }, +{ source: [0xC090], NFC: [0xC090], NFD: [0x1108, 0x1175], NFKC: [0xC090], NFKD: [0x1108, 0x1175] }, +{ source: [0xC091], NFC: [0xC091], NFD: [0x1108, 0x1175, 0x11A8], NFKC: [0xC091], NFKD: [0x1108, 0x1175, 0x11A8] }, +{ source: [0xC092], NFC: [0xC092], NFD: [0x1108, 0x1175, 0x11A9], NFKC: [0xC092], NFKD: [0x1108, 0x1175, 0x11A9] }, +{ source: [0xC093], NFC: [0xC093], NFD: [0x1108, 0x1175, 0x11AA], NFKC: [0xC093], NFKD: [0x1108, 0x1175, 0x11AA] }, +{ source: [0xC094], NFC: [0xC094], NFD: [0x1108, 0x1175, 0x11AB], NFKC: [0xC094], NFKD: [0x1108, 0x1175, 0x11AB] }, +{ source: [0xC095], NFC: [0xC095], NFD: [0x1108, 0x1175, 0x11AC], NFKC: [0xC095], NFKD: [0x1108, 0x1175, 0x11AC] }, +{ source: [0xC096], NFC: [0xC096], NFD: [0x1108, 0x1175, 0x11AD], NFKC: [0xC096], NFKD: [0x1108, 0x1175, 0x11AD] }, +{ source: [0xC097], NFC: [0xC097], NFD: [0x1108, 0x1175, 0x11AE], NFKC: [0xC097], NFKD: [0x1108, 0x1175, 0x11AE] }, +{ source: [0xC098], NFC: [0xC098], NFD: [0x1108, 0x1175, 0x11AF], NFKC: [0xC098], NFKD: [0x1108, 0x1175, 0x11AF] }, +{ source: [0xC099], NFC: [0xC099], NFD: [0x1108, 0x1175, 0x11B0], NFKC: [0xC099], NFKD: [0x1108, 0x1175, 0x11B0] }, +{ source: [0xC09A], NFC: [0xC09A], NFD: [0x1108, 0x1175, 0x11B1], NFKC: [0xC09A], NFKD: [0x1108, 0x1175, 0x11B1] }, +{ source: [0xC09B], NFC: [0xC09B], NFD: [0x1108, 0x1175, 0x11B2], NFKC: [0xC09B], NFKD: [0x1108, 0x1175, 0x11B2] }, +{ source: [0xC09C], NFC: [0xC09C], NFD: [0x1108, 0x1175, 0x11B3], NFKC: [0xC09C], NFKD: [0x1108, 0x1175, 0x11B3] }, +{ source: [0xC09D], NFC: [0xC09D], NFD: [0x1108, 0x1175, 0x11B4], NFKC: [0xC09D], NFKD: [0x1108, 0x1175, 0x11B4] }, +{ source: [0xC09E], NFC: [0xC09E], NFD: [0x1108, 0x1175, 0x11B5], NFKC: [0xC09E], NFKD: [0x1108, 0x1175, 0x11B5] }, +{ source: [0xC09F], NFC: [0xC09F], NFD: [0x1108, 0x1175, 0x11B6], NFKC: [0xC09F], NFKD: [0x1108, 0x1175, 0x11B6] }, +{ source: [0xC0A0], NFC: [0xC0A0], NFD: [0x1108, 0x1175, 0x11B7], NFKC: [0xC0A0], NFKD: [0x1108, 0x1175, 0x11B7] }, +{ source: [0xC0A1], NFC: [0xC0A1], NFD: [0x1108, 0x1175, 0x11B8], NFKC: [0xC0A1], NFKD: [0x1108, 0x1175, 0x11B8] }, +{ source: [0xC0A2], NFC: [0xC0A2], NFD: [0x1108, 0x1175, 0x11B9], NFKC: [0xC0A2], NFKD: [0x1108, 0x1175, 0x11B9] }, +{ source: [0xC0A3], NFC: [0xC0A3], NFD: [0x1108, 0x1175, 0x11BA], NFKC: [0xC0A3], NFKD: [0x1108, 0x1175, 0x11BA] }, +{ source: [0xC0A4], NFC: [0xC0A4], NFD: [0x1108, 0x1175, 0x11BB], NFKC: [0xC0A4], NFKD: [0x1108, 0x1175, 0x11BB] }, +{ source: [0xC0A5], NFC: [0xC0A5], NFD: [0x1108, 0x1175, 0x11BC], NFKC: [0xC0A5], NFKD: [0x1108, 0x1175, 0x11BC] }, +{ source: [0xC0A6], NFC: [0xC0A6], NFD: [0x1108, 0x1175, 0x11BD], NFKC: [0xC0A6], NFKD: [0x1108, 0x1175, 0x11BD] }, +{ source: [0xC0A7], NFC: [0xC0A7], NFD: [0x1108, 0x1175, 0x11BE], NFKC: [0xC0A7], NFKD: [0x1108, 0x1175, 0x11BE] }, +{ source: [0xC0A8], NFC: [0xC0A8], NFD: [0x1108, 0x1175, 0x11BF], NFKC: [0xC0A8], NFKD: [0x1108, 0x1175, 0x11BF] }, +{ source: [0xC0A9], NFC: [0xC0A9], NFD: [0x1108, 0x1175, 0x11C0], NFKC: [0xC0A9], NFKD: [0x1108, 0x1175, 0x11C0] }, +{ source: [0xC0AA], NFC: [0xC0AA], NFD: [0x1108, 0x1175, 0x11C1], NFKC: [0xC0AA], NFKD: [0x1108, 0x1175, 0x11C1] }, +{ source: [0xC0AB], NFC: [0xC0AB], NFD: [0x1108, 0x1175, 0x11C2], NFKC: [0xC0AB], NFKD: [0x1108, 0x1175, 0x11C2] }, +{ source: [0xC0AC], NFC: [0xC0AC], NFD: [0x1109, 0x1161], NFKC: [0xC0AC], NFKD: [0x1109, 0x1161] }, +{ source: [0xC0AD], NFC: [0xC0AD], NFD: [0x1109, 0x1161, 0x11A8], NFKC: [0xC0AD], NFKD: [0x1109, 0x1161, 0x11A8] }, +{ source: [0xC0AE], NFC: [0xC0AE], NFD: [0x1109, 0x1161, 0x11A9], NFKC: [0xC0AE], NFKD: [0x1109, 0x1161, 0x11A9] }, +{ source: [0xC0AF], NFC: [0xC0AF], NFD: [0x1109, 0x1161, 0x11AA], NFKC: [0xC0AF], NFKD: [0x1109, 0x1161, 0x11AA] }, +{ source: [0xC0B0], NFC: [0xC0B0], NFD: [0x1109, 0x1161, 0x11AB], NFKC: [0xC0B0], NFKD: [0x1109, 0x1161, 0x11AB] }, +{ source: [0xC0B1], NFC: [0xC0B1], NFD: [0x1109, 0x1161, 0x11AC], NFKC: [0xC0B1], NFKD: [0x1109, 0x1161, 0x11AC] }, +{ source: [0xC0B2], NFC: [0xC0B2], NFD: [0x1109, 0x1161, 0x11AD], NFKC: [0xC0B2], NFKD: [0x1109, 0x1161, 0x11AD] }, +{ source: [0xC0B3], NFC: [0xC0B3], NFD: [0x1109, 0x1161, 0x11AE], NFKC: [0xC0B3], NFKD: [0x1109, 0x1161, 0x11AE] }, +{ source: [0xC0B4], NFC: [0xC0B4], NFD: [0x1109, 0x1161, 0x11AF], NFKC: [0xC0B4], NFKD: [0x1109, 0x1161, 0x11AF] }, +{ source: [0xC0B5], NFC: [0xC0B5], NFD: [0x1109, 0x1161, 0x11B0], NFKC: [0xC0B5], NFKD: [0x1109, 0x1161, 0x11B0] }, +{ source: [0xC0B6], NFC: [0xC0B6], NFD: [0x1109, 0x1161, 0x11B1], NFKC: [0xC0B6], NFKD: [0x1109, 0x1161, 0x11B1] }, +{ source: [0xC0B7], NFC: [0xC0B7], NFD: [0x1109, 0x1161, 0x11B2], NFKC: [0xC0B7], NFKD: [0x1109, 0x1161, 0x11B2] }, +{ source: [0xC0B8], NFC: [0xC0B8], NFD: [0x1109, 0x1161, 0x11B3], NFKC: [0xC0B8], NFKD: [0x1109, 0x1161, 0x11B3] }, +{ source: [0xC0B9], NFC: [0xC0B9], NFD: [0x1109, 0x1161, 0x11B4], NFKC: [0xC0B9], NFKD: [0x1109, 0x1161, 0x11B4] }, +{ source: [0xC0BA], NFC: [0xC0BA], NFD: [0x1109, 0x1161, 0x11B5], NFKC: [0xC0BA], NFKD: [0x1109, 0x1161, 0x11B5] }, +{ source: [0xC0BB], NFC: [0xC0BB], NFD: [0x1109, 0x1161, 0x11B6], NFKC: [0xC0BB], NFKD: [0x1109, 0x1161, 0x11B6] }, +{ source: [0xC0BC], NFC: [0xC0BC], NFD: [0x1109, 0x1161, 0x11B7], NFKC: [0xC0BC], NFKD: [0x1109, 0x1161, 0x11B7] }, +{ source: [0xC0BD], NFC: [0xC0BD], NFD: [0x1109, 0x1161, 0x11B8], NFKC: [0xC0BD], NFKD: [0x1109, 0x1161, 0x11B8] }, +{ source: [0xC0BE], NFC: [0xC0BE], NFD: [0x1109, 0x1161, 0x11B9], NFKC: [0xC0BE], NFKD: [0x1109, 0x1161, 0x11B9] }, +{ source: [0xC0BF], NFC: [0xC0BF], NFD: [0x1109, 0x1161, 0x11BA], NFKC: [0xC0BF], NFKD: [0x1109, 0x1161, 0x11BA] }, +{ source: [0xC0C0], NFC: [0xC0C0], NFD: [0x1109, 0x1161, 0x11BB], NFKC: [0xC0C0], NFKD: [0x1109, 0x1161, 0x11BB] }, +{ source: [0xC0C1], NFC: [0xC0C1], NFD: [0x1109, 0x1161, 0x11BC], NFKC: [0xC0C1], NFKD: [0x1109, 0x1161, 0x11BC] }, +{ source: [0xC0C2], NFC: [0xC0C2], NFD: [0x1109, 0x1161, 0x11BD], NFKC: [0xC0C2], NFKD: [0x1109, 0x1161, 0x11BD] }, +{ source: [0xC0C3], NFC: [0xC0C3], NFD: [0x1109, 0x1161, 0x11BE], NFKC: [0xC0C3], NFKD: [0x1109, 0x1161, 0x11BE] }, +{ source: [0xC0C4], NFC: [0xC0C4], NFD: [0x1109, 0x1161, 0x11BF], NFKC: [0xC0C4], NFKD: [0x1109, 0x1161, 0x11BF] }, +{ source: [0xC0C5], NFC: [0xC0C5], NFD: [0x1109, 0x1161, 0x11C0], NFKC: [0xC0C5], NFKD: [0x1109, 0x1161, 0x11C0] }, +{ source: [0xC0C6], NFC: [0xC0C6], NFD: [0x1109, 0x1161, 0x11C1], NFKC: [0xC0C6], NFKD: [0x1109, 0x1161, 0x11C1] }, +{ source: [0xC0C7], NFC: [0xC0C7], NFD: [0x1109, 0x1161, 0x11C2], NFKC: [0xC0C7], NFKD: [0x1109, 0x1161, 0x11C2] }, +{ source: [0xC0C8], NFC: [0xC0C8], NFD: [0x1109, 0x1162], NFKC: [0xC0C8], NFKD: [0x1109, 0x1162] }, +{ source: [0xC0C9], NFC: [0xC0C9], NFD: [0x1109, 0x1162, 0x11A8], NFKC: [0xC0C9], NFKD: [0x1109, 0x1162, 0x11A8] }, +{ source: [0xC0CA], NFC: [0xC0CA], NFD: [0x1109, 0x1162, 0x11A9], NFKC: [0xC0CA], NFKD: [0x1109, 0x1162, 0x11A9] }, +{ source: [0xC0CB], NFC: [0xC0CB], NFD: [0x1109, 0x1162, 0x11AA], NFKC: [0xC0CB], NFKD: [0x1109, 0x1162, 0x11AA] }, +{ source: [0xC0CC], NFC: [0xC0CC], NFD: [0x1109, 0x1162, 0x11AB], NFKC: [0xC0CC], NFKD: [0x1109, 0x1162, 0x11AB] }, +{ source: [0xC0CD], NFC: [0xC0CD], NFD: [0x1109, 0x1162, 0x11AC], NFKC: [0xC0CD], NFKD: [0x1109, 0x1162, 0x11AC] }, +{ source: [0xC0CE], NFC: [0xC0CE], NFD: [0x1109, 0x1162, 0x11AD], NFKC: [0xC0CE], NFKD: [0x1109, 0x1162, 0x11AD] }, +{ source: [0xC0CF], NFC: [0xC0CF], NFD: [0x1109, 0x1162, 0x11AE], NFKC: [0xC0CF], NFKD: [0x1109, 0x1162, 0x11AE] }, +{ source: [0xC0D0], NFC: [0xC0D0], NFD: [0x1109, 0x1162, 0x11AF], NFKC: [0xC0D0], NFKD: [0x1109, 0x1162, 0x11AF] }, +{ source: [0xC0D1], NFC: [0xC0D1], NFD: [0x1109, 0x1162, 0x11B0], NFKC: [0xC0D1], NFKD: [0x1109, 0x1162, 0x11B0] }, +{ source: [0xC0D2], NFC: [0xC0D2], NFD: [0x1109, 0x1162, 0x11B1], NFKC: [0xC0D2], NFKD: [0x1109, 0x1162, 0x11B1] }, +{ source: [0xC0D3], NFC: [0xC0D3], NFD: [0x1109, 0x1162, 0x11B2], NFKC: [0xC0D3], NFKD: [0x1109, 0x1162, 0x11B2] }, +{ source: [0xC0D4], NFC: [0xC0D4], NFD: [0x1109, 0x1162, 0x11B3], NFKC: [0xC0D4], NFKD: [0x1109, 0x1162, 0x11B3] }, +{ source: [0xC0D5], NFC: [0xC0D5], NFD: [0x1109, 0x1162, 0x11B4], NFKC: [0xC0D5], NFKD: [0x1109, 0x1162, 0x11B4] }, +{ source: [0xC0D6], NFC: [0xC0D6], NFD: [0x1109, 0x1162, 0x11B5], NFKC: [0xC0D6], NFKD: [0x1109, 0x1162, 0x11B5] }, +{ source: [0xC0D7], NFC: [0xC0D7], NFD: [0x1109, 0x1162, 0x11B6], NFKC: [0xC0D7], NFKD: [0x1109, 0x1162, 0x11B6] }, +{ source: [0xC0D8], NFC: [0xC0D8], NFD: [0x1109, 0x1162, 0x11B7], NFKC: [0xC0D8], NFKD: [0x1109, 0x1162, 0x11B7] }, +{ source: [0xC0D9], NFC: [0xC0D9], NFD: [0x1109, 0x1162, 0x11B8], NFKC: [0xC0D9], NFKD: [0x1109, 0x1162, 0x11B8] }, +{ source: [0xC0DA], NFC: [0xC0DA], NFD: [0x1109, 0x1162, 0x11B9], NFKC: [0xC0DA], NFKD: [0x1109, 0x1162, 0x11B9] }, +{ source: [0xC0DB], NFC: [0xC0DB], NFD: [0x1109, 0x1162, 0x11BA], NFKC: [0xC0DB], NFKD: [0x1109, 0x1162, 0x11BA] }, +{ source: [0xC0DC], NFC: [0xC0DC], NFD: [0x1109, 0x1162, 0x11BB], NFKC: [0xC0DC], NFKD: [0x1109, 0x1162, 0x11BB] }, +{ source: [0xC0DD], NFC: [0xC0DD], NFD: [0x1109, 0x1162, 0x11BC], NFKC: [0xC0DD], NFKD: [0x1109, 0x1162, 0x11BC] }, +{ source: [0xC0DE], NFC: [0xC0DE], NFD: [0x1109, 0x1162, 0x11BD], NFKC: [0xC0DE], NFKD: [0x1109, 0x1162, 0x11BD] }, +{ source: [0xC0DF], NFC: [0xC0DF], NFD: [0x1109, 0x1162, 0x11BE], NFKC: [0xC0DF], NFKD: [0x1109, 0x1162, 0x11BE] }, +{ source: [0xC0E0], NFC: [0xC0E0], NFD: [0x1109, 0x1162, 0x11BF], NFKC: [0xC0E0], NFKD: [0x1109, 0x1162, 0x11BF] }, +{ source: [0xC0E1], NFC: [0xC0E1], NFD: [0x1109, 0x1162, 0x11C0], NFKC: [0xC0E1], NFKD: [0x1109, 0x1162, 0x11C0] }, +{ source: [0xC0E2], NFC: [0xC0E2], NFD: [0x1109, 0x1162, 0x11C1], NFKC: [0xC0E2], NFKD: [0x1109, 0x1162, 0x11C1] }, +{ source: [0xC0E3], NFC: [0xC0E3], NFD: [0x1109, 0x1162, 0x11C2], NFKC: [0xC0E3], NFKD: [0x1109, 0x1162, 0x11C2] }, +{ source: [0xC0E4], NFC: [0xC0E4], NFD: [0x1109, 0x1163], NFKC: [0xC0E4], NFKD: [0x1109, 0x1163] }, +{ source: [0xC0E5], NFC: [0xC0E5], NFD: [0x1109, 0x1163, 0x11A8], NFKC: [0xC0E5], NFKD: [0x1109, 0x1163, 0x11A8] }, +{ source: [0xC0E6], NFC: [0xC0E6], NFD: [0x1109, 0x1163, 0x11A9], NFKC: [0xC0E6], NFKD: [0x1109, 0x1163, 0x11A9] }, +{ source: [0xC0E7], NFC: [0xC0E7], NFD: [0x1109, 0x1163, 0x11AA], NFKC: [0xC0E7], NFKD: [0x1109, 0x1163, 0x11AA] }, +{ source: [0xC0E8], NFC: [0xC0E8], NFD: [0x1109, 0x1163, 0x11AB], NFKC: [0xC0E8], NFKD: [0x1109, 0x1163, 0x11AB] }, +{ source: [0xC0E9], NFC: [0xC0E9], NFD: [0x1109, 0x1163, 0x11AC], NFKC: [0xC0E9], NFKD: [0x1109, 0x1163, 0x11AC] }, +{ source: [0xC0EA], NFC: [0xC0EA], NFD: [0x1109, 0x1163, 0x11AD], NFKC: [0xC0EA], NFKD: [0x1109, 0x1163, 0x11AD] }, +{ source: [0xC0EB], NFC: [0xC0EB], NFD: [0x1109, 0x1163, 0x11AE], NFKC: [0xC0EB], NFKD: [0x1109, 0x1163, 0x11AE] }, +{ source: [0xC0EC], NFC: [0xC0EC], NFD: [0x1109, 0x1163, 0x11AF], NFKC: [0xC0EC], NFKD: [0x1109, 0x1163, 0x11AF] }, +{ source: [0xC0ED], NFC: [0xC0ED], NFD: [0x1109, 0x1163, 0x11B0], NFKC: [0xC0ED], NFKD: [0x1109, 0x1163, 0x11B0] }, +{ source: [0xC0EE], NFC: [0xC0EE], NFD: [0x1109, 0x1163, 0x11B1], NFKC: [0xC0EE], NFKD: [0x1109, 0x1163, 0x11B1] }, +{ source: [0xC0EF], NFC: [0xC0EF], NFD: [0x1109, 0x1163, 0x11B2], NFKC: [0xC0EF], NFKD: [0x1109, 0x1163, 0x11B2] }, +{ source: [0xC0F0], NFC: [0xC0F0], NFD: [0x1109, 0x1163, 0x11B3], NFKC: [0xC0F0], NFKD: [0x1109, 0x1163, 0x11B3] }, +{ source: [0xC0F1], NFC: [0xC0F1], NFD: [0x1109, 0x1163, 0x11B4], NFKC: [0xC0F1], NFKD: [0x1109, 0x1163, 0x11B4] }, +{ source: [0xC0F2], NFC: [0xC0F2], NFD: [0x1109, 0x1163, 0x11B5], NFKC: [0xC0F2], NFKD: [0x1109, 0x1163, 0x11B5] }, +{ source: [0xC0F3], NFC: [0xC0F3], NFD: [0x1109, 0x1163, 0x11B6], NFKC: [0xC0F3], NFKD: [0x1109, 0x1163, 0x11B6] }, +{ source: [0xC0F4], NFC: [0xC0F4], NFD: [0x1109, 0x1163, 0x11B7], NFKC: [0xC0F4], NFKD: [0x1109, 0x1163, 0x11B7] }, +{ source: [0xC0F5], NFC: [0xC0F5], NFD: [0x1109, 0x1163, 0x11B8], NFKC: [0xC0F5], NFKD: [0x1109, 0x1163, 0x11B8] }, +{ source: [0xC0F6], NFC: [0xC0F6], NFD: [0x1109, 0x1163, 0x11B9], NFKC: [0xC0F6], NFKD: [0x1109, 0x1163, 0x11B9] }, +{ source: [0xC0F7], NFC: [0xC0F7], NFD: [0x1109, 0x1163, 0x11BA], NFKC: [0xC0F7], NFKD: [0x1109, 0x1163, 0x11BA] }, +{ source: [0xC0F8], NFC: [0xC0F8], NFD: [0x1109, 0x1163, 0x11BB], NFKC: [0xC0F8], NFKD: [0x1109, 0x1163, 0x11BB] }, +{ source: [0xC0F9], NFC: [0xC0F9], NFD: [0x1109, 0x1163, 0x11BC], NFKC: [0xC0F9], NFKD: [0x1109, 0x1163, 0x11BC] }, +{ source: [0xC0FA], NFC: [0xC0FA], NFD: [0x1109, 0x1163, 0x11BD], NFKC: [0xC0FA], NFKD: [0x1109, 0x1163, 0x11BD] }, +{ source: [0xC0FB], NFC: [0xC0FB], NFD: [0x1109, 0x1163, 0x11BE], NFKC: [0xC0FB], NFKD: [0x1109, 0x1163, 0x11BE] }, +{ source: [0xC0FC], NFC: [0xC0FC], NFD: [0x1109, 0x1163, 0x11BF], NFKC: [0xC0FC], NFKD: [0x1109, 0x1163, 0x11BF] }, +{ source: [0xC0FD], NFC: [0xC0FD], NFD: [0x1109, 0x1163, 0x11C0], NFKC: [0xC0FD], NFKD: [0x1109, 0x1163, 0x11C0] }, +{ source: [0xC0FE], NFC: [0xC0FE], NFD: [0x1109, 0x1163, 0x11C1], NFKC: [0xC0FE], NFKD: [0x1109, 0x1163, 0x11C1] }, +{ source: [0xC0FF], NFC: [0xC0FF], NFD: [0x1109, 0x1163, 0x11C2], NFKC: [0xC0FF], NFKD: [0x1109, 0x1163, 0x11C2] }, +{ source: [0xC100], NFC: [0xC100], NFD: [0x1109, 0x1164], NFKC: [0xC100], NFKD: [0x1109, 0x1164] }, +{ source: [0xC101], NFC: [0xC101], NFD: [0x1109, 0x1164, 0x11A8], NFKC: [0xC101], NFKD: [0x1109, 0x1164, 0x11A8] }, +{ source: [0xC102], NFC: [0xC102], NFD: [0x1109, 0x1164, 0x11A9], NFKC: [0xC102], NFKD: [0x1109, 0x1164, 0x11A9] }, +{ source: [0xC103], NFC: [0xC103], NFD: [0x1109, 0x1164, 0x11AA], NFKC: [0xC103], NFKD: [0x1109, 0x1164, 0x11AA] }, +{ source: [0xC104], NFC: [0xC104], NFD: [0x1109, 0x1164, 0x11AB], NFKC: [0xC104], NFKD: [0x1109, 0x1164, 0x11AB] }, +{ source: [0xC105], NFC: [0xC105], NFD: [0x1109, 0x1164, 0x11AC], NFKC: [0xC105], NFKD: [0x1109, 0x1164, 0x11AC] }, +{ source: [0xC106], NFC: [0xC106], NFD: [0x1109, 0x1164, 0x11AD], NFKC: [0xC106], NFKD: [0x1109, 0x1164, 0x11AD] }, +{ source: [0xC107], NFC: [0xC107], NFD: [0x1109, 0x1164, 0x11AE], NFKC: [0xC107], NFKD: [0x1109, 0x1164, 0x11AE] }, +{ source: [0xC108], NFC: [0xC108], NFD: [0x1109, 0x1164, 0x11AF], NFKC: [0xC108], NFKD: [0x1109, 0x1164, 0x11AF] }, +{ source: [0xC109], NFC: [0xC109], NFD: [0x1109, 0x1164, 0x11B0], NFKC: [0xC109], NFKD: [0x1109, 0x1164, 0x11B0] }, +{ source: [0xC10A], NFC: [0xC10A], NFD: [0x1109, 0x1164, 0x11B1], NFKC: [0xC10A], NFKD: [0x1109, 0x1164, 0x11B1] }, +{ source: [0xC10B], NFC: [0xC10B], NFD: [0x1109, 0x1164, 0x11B2], NFKC: [0xC10B], NFKD: [0x1109, 0x1164, 0x11B2] }, +{ source: [0xC10C], NFC: [0xC10C], NFD: [0x1109, 0x1164, 0x11B3], NFKC: [0xC10C], NFKD: [0x1109, 0x1164, 0x11B3] }, +{ source: [0xC10D], NFC: [0xC10D], NFD: [0x1109, 0x1164, 0x11B4], NFKC: [0xC10D], NFKD: [0x1109, 0x1164, 0x11B4] }, +{ source: [0xC10E], NFC: [0xC10E], NFD: [0x1109, 0x1164, 0x11B5], NFKC: [0xC10E], NFKD: [0x1109, 0x1164, 0x11B5] }, +{ source: [0xC10F], NFC: [0xC10F], NFD: [0x1109, 0x1164, 0x11B6], NFKC: [0xC10F], NFKD: [0x1109, 0x1164, 0x11B6] }, +{ source: [0xC110], NFC: [0xC110], NFD: [0x1109, 0x1164, 0x11B7], NFKC: [0xC110], NFKD: [0x1109, 0x1164, 0x11B7] }, +{ source: [0xC111], NFC: [0xC111], NFD: [0x1109, 0x1164, 0x11B8], NFKC: [0xC111], NFKD: [0x1109, 0x1164, 0x11B8] }, +{ source: [0xC112], NFC: [0xC112], NFD: [0x1109, 0x1164, 0x11B9], NFKC: [0xC112], NFKD: [0x1109, 0x1164, 0x11B9] }, +{ source: [0xC113], NFC: [0xC113], NFD: [0x1109, 0x1164, 0x11BA], NFKC: [0xC113], NFKD: [0x1109, 0x1164, 0x11BA] }, +{ source: [0xC114], NFC: [0xC114], NFD: [0x1109, 0x1164, 0x11BB], NFKC: [0xC114], NFKD: [0x1109, 0x1164, 0x11BB] }, +{ source: [0xC115], NFC: [0xC115], NFD: [0x1109, 0x1164, 0x11BC], NFKC: [0xC115], NFKD: [0x1109, 0x1164, 0x11BC] }, +{ source: [0xC116], NFC: [0xC116], NFD: [0x1109, 0x1164, 0x11BD], NFKC: [0xC116], NFKD: [0x1109, 0x1164, 0x11BD] }, +{ source: [0xC117], NFC: [0xC117], NFD: [0x1109, 0x1164, 0x11BE], NFKC: [0xC117], NFKD: [0x1109, 0x1164, 0x11BE] }, +{ source: [0xC118], NFC: [0xC118], NFD: [0x1109, 0x1164, 0x11BF], NFKC: [0xC118], NFKD: [0x1109, 0x1164, 0x11BF] }, +{ source: [0xC119], NFC: [0xC119], NFD: [0x1109, 0x1164, 0x11C0], NFKC: [0xC119], NFKD: [0x1109, 0x1164, 0x11C0] }, +{ source: [0xC11A], NFC: [0xC11A], NFD: [0x1109, 0x1164, 0x11C1], NFKC: [0xC11A], NFKD: [0x1109, 0x1164, 0x11C1] }, +{ source: [0xC11B], NFC: [0xC11B], NFD: [0x1109, 0x1164, 0x11C2], NFKC: [0xC11B], NFKD: [0x1109, 0x1164, 0x11C2] }, +{ source: [0xC11C], NFC: [0xC11C], NFD: [0x1109, 0x1165], NFKC: [0xC11C], NFKD: [0x1109, 0x1165] }, +{ source: [0xC11D], NFC: [0xC11D], NFD: [0x1109, 0x1165, 0x11A8], NFKC: [0xC11D], NFKD: [0x1109, 0x1165, 0x11A8] }, +{ source: [0xC11E], NFC: [0xC11E], NFD: [0x1109, 0x1165, 0x11A9], NFKC: [0xC11E], NFKD: [0x1109, 0x1165, 0x11A9] }, +{ source: [0xC11F], NFC: [0xC11F], NFD: [0x1109, 0x1165, 0x11AA], NFKC: [0xC11F], NFKD: [0x1109, 0x1165, 0x11AA] }, +{ source: [0xC120], NFC: [0xC120], NFD: [0x1109, 0x1165, 0x11AB], NFKC: [0xC120], NFKD: [0x1109, 0x1165, 0x11AB] }, +{ source: [0xC121], NFC: [0xC121], NFD: [0x1109, 0x1165, 0x11AC], NFKC: [0xC121], NFKD: [0x1109, 0x1165, 0x11AC] }, +{ source: [0xC122], NFC: [0xC122], NFD: [0x1109, 0x1165, 0x11AD], NFKC: [0xC122], NFKD: [0x1109, 0x1165, 0x11AD] }, +{ source: [0xC123], NFC: [0xC123], NFD: [0x1109, 0x1165, 0x11AE], NFKC: [0xC123], NFKD: [0x1109, 0x1165, 0x11AE] }, +{ source: [0xC124], NFC: [0xC124], NFD: [0x1109, 0x1165, 0x11AF], NFKC: [0xC124], NFKD: [0x1109, 0x1165, 0x11AF] }, +{ source: [0xC125], NFC: [0xC125], NFD: [0x1109, 0x1165, 0x11B0], NFKC: [0xC125], NFKD: [0x1109, 0x1165, 0x11B0] }, +{ source: [0xC126], NFC: [0xC126], NFD: [0x1109, 0x1165, 0x11B1], NFKC: [0xC126], NFKD: [0x1109, 0x1165, 0x11B1] }, +{ source: [0xC127], NFC: [0xC127], NFD: [0x1109, 0x1165, 0x11B2], NFKC: [0xC127], NFKD: [0x1109, 0x1165, 0x11B2] }, +{ source: [0xC128], NFC: [0xC128], NFD: [0x1109, 0x1165, 0x11B3], NFKC: [0xC128], NFKD: [0x1109, 0x1165, 0x11B3] }, +{ source: [0xC129], NFC: [0xC129], NFD: [0x1109, 0x1165, 0x11B4], NFKC: [0xC129], NFKD: [0x1109, 0x1165, 0x11B4] }, +{ source: [0xC12A], NFC: [0xC12A], NFD: [0x1109, 0x1165, 0x11B5], NFKC: [0xC12A], NFKD: [0x1109, 0x1165, 0x11B5] }, +{ source: [0xC12B], NFC: [0xC12B], NFD: [0x1109, 0x1165, 0x11B6], NFKC: [0xC12B], NFKD: [0x1109, 0x1165, 0x11B6] }, +{ source: [0xC12C], NFC: [0xC12C], NFD: [0x1109, 0x1165, 0x11B7], NFKC: [0xC12C], NFKD: [0x1109, 0x1165, 0x11B7] }, +{ source: [0xC12D], NFC: [0xC12D], NFD: [0x1109, 0x1165, 0x11B8], NFKC: [0xC12D], NFKD: [0x1109, 0x1165, 0x11B8] }, +{ source: [0xC12E], NFC: [0xC12E], NFD: [0x1109, 0x1165, 0x11B9], NFKC: [0xC12E], NFKD: [0x1109, 0x1165, 0x11B9] }, +{ source: [0xC12F], NFC: [0xC12F], NFD: [0x1109, 0x1165, 0x11BA], NFKC: [0xC12F], NFKD: [0x1109, 0x1165, 0x11BA] }, +{ source: [0xC130], NFC: [0xC130], NFD: [0x1109, 0x1165, 0x11BB], NFKC: [0xC130], NFKD: [0x1109, 0x1165, 0x11BB] }, +{ source: [0xC131], NFC: [0xC131], NFD: [0x1109, 0x1165, 0x11BC], NFKC: [0xC131], NFKD: [0x1109, 0x1165, 0x11BC] }, +{ source: [0xC132], NFC: [0xC132], NFD: [0x1109, 0x1165, 0x11BD], NFKC: [0xC132], NFKD: [0x1109, 0x1165, 0x11BD] }, +{ source: [0xC133], NFC: [0xC133], NFD: [0x1109, 0x1165, 0x11BE], NFKC: [0xC133], NFKD: [0x1109, 0x1165, 0x11BE] }, +{ source: [0xC134], NFC: [0xC134], NFD: [0x1109, 0x1165, 0x11BF], NFKC: [0xC134], NFKD: [0x1109, 0x1165, 0x11BF] }, +{ source: [0xC135], NFC: [0xC135], NFD: [0x1109, 0x1165, 0x11C0], NFKC: [0xC135], NFKD: [0x1109, 0x1165, 0x11C0] }, +{ source: [0xC136], NFC: [0xC136], NFD: [0x1109, 0x1165, 0x11C1], NFKC: [0xC136], NFKD: [0x1109, 0x1165, 0x11C1] }, +{ source: [0xC137], NFC: [0xC137], NFD: [0x1109, 0x1165, 0x11C2], NFKC: [0xC137], NFKD: [0x1109, 0x1165, 0x11C2] }, +{ source: [0xC138], NFC: [0xC138], NFD: [0x1109, 0x1166], NFKC: [0xC138], NFKD: [0x1109, 0x1166] }, +{ source: [0xC139], NFC: [0xC139], NFD: [0x1109, 0x1166, 0x11A8], NFKC: [0xC139], NFKD: [0x1109, 0x1166, 0x11A8] }, +{ source: [0xC13A], NFC: [0xC13A], NFD: [0x1109, 0x1166, 0x11A9], NFKC: [0xC13A], NFKD: [0x1109, 0x1166, 0x11A9] }, +{ source: [0xC13B], NFC: [0xC13B], NFD: [0x1109, 0x1166, 0x11AA], NFKC: [0xC13B], NFKD: [0x1109, 0x1166, 0x11AA] }, +{ source: [0xC13C], NFC: [0xC13C], NFD: [0x1109, 0x1166, 0x11AB], NFKC: [0xC13C], NFKD: [0x1109, 0x1166, 0x11AB] }, +{ source: [0xC13D], NFC: [0xC13D], NFD: [0x1109, 0x1166, 0x11AC], NFKC: [0xC13D], NFKD: [0x1109, 0x1166, 0x11AC] }, +{ source: [0xC13E], NFC: [0xC13E], NFD: [0x1109, 0x1166, 0x11AD], NFKC: [0xC13E], NFKD: [0x1109, 0x1166, 0x11AD] }, +{ source: [0xC13F], NFC: [0xC13F], NFD: [0x1109, 0x1166, 0x11AE], NFKC: [0xC13F], NFKD: [0x1109, 0x1166, 0x11AE] }, +{ source: [0xC140], NFC: [0xC140], NFD: [0x1109, 0x1166, 0x11AF], NFKC: [0xC140], NFKD: [0x1109, 0x1166, 0x11AF] }, +{ source: [0xC141], NFC: [0xC141], NFD: [0x1109, 0x1166, 0x11B0], NFKC: [0xC141], NFKD: [0x1109, 0x1166, 0x11B0] }, +{ source: [0xC142], NFC: [0xC142], NFD: [0x1109, 0x1166, 0x11B1], NFKC: [0xC142], NFKD: [0x1109, 0x1166, 0x11B1] }, +{ source: [0xC143], NFC: [0xC143], NFD: [0x1109, 0x1166, 0x11B2], NFKC: [0xC143], NFKD: [0x1109, 0x1166, 0x11B2] }, +{ source: [0xC144], NFC: [0xC144], NFD: [0x1109, 0x1166, 0x11B3], NFKC: [0xC144], NFKD: [0x1109, 0x1166, 0x11B3] }, +{ source: [0xC145], NFC: [0xC145], NFD: [0x1109, 0x1166, 0x11B4], NFKC: [0xC145], NFKD: [0x1109, 0x1166, 0x11B4] }, +{ source: [0xC146], NFC: [0xC146], NFD: [0x1109, 0x1166, 0x11B5], NFKC: [0xC146], NFKD: [0x1109, 0x1166, 0x11B5] }, +{ source: [0xC147], NFC: [0xC147], NFD: [0x1109, 0x1166, 0x11B6], NFKC: [0xC147], NFKD: [0x1109, 0x1166, 0x11B6] }, +{ source: [0xC148], NFC: [0xC148], NFD: [0x1109, 0x1166, 0x11B7], NFKC: [0xC148], NFKD: [0x1109, 0x1166, 0x11B7] }, +{ source: [0xC149], NFC: [0xC149], NFD: [0x1109, 0x1166, 0x11B8], NFKC: [0xC149], NFKD: [0x1109, 0x1166, 0x11B8] }, +{ source: [0xC14A], NFC: [0xC14A], NFD: [0x1109, 0x1166, 0x11B9], NFKC: [0xC14A], NFKD: [0x1109, 0x1166, 0x11B9] }, +{ source: [0xC14B], NFC: [0xC14B], NFD: [0x1109, 0x1166, 0x11BA], NFKC: [0xC14B], NFKD: [0x1109, 0x1166, 0x11BA] }, +{ source: [0xC14C], NFC: [0xC14C], NFD: [0x1109, 0x1166, 0x11BB], NFKC: [0xC14C], NFKD: [0x1109, 0x1166, 0x11BB] }, +{ source: [0xC14D], NFC: [0xC14D], NFD: [0x1109, 0x1166, 0x11BC], NFKC: [0xC14D], NFKD: [0x1109, 0x1166, 0x11BC] }, +{ source: [0xC14E], NFC: [0xC14E], NFD: [0x1109, 0x1166, 0x11BD], NFKC: [0xC14E], NFKD: [0x1109, 0x1166, 0x11BD] }, +{ source: [0xC14F], NFC: [0xC14F], NFD: [0x1109, 0x1166, 0x11BE], NFKC: [0xC14F], NFKD: [0x1109, 0x1166, 0x11BE] }, +{ source: [0xC150], NFC: [0xC150], NFD: [0x1109, 0x1166, 0x11BF], NFKC: [0xC150], NFKD: [0x1109, 0x1166, 0x11BF] }, +{ source: [0xC151], NFC: [0xC151], NFD: [0x1109, 0x1166, 0x11C0], NFKC: [0xC151], NFKD: [0x1109, 0x1166, 0x11C0] }, +{ source: [0xC152], NFC: [0xC152], NFD: [0x1109, 0x1166, 0x11C1], NFKC: [0xC152], NFKD: [0x1109, 0x1166, 0x11C1] }, +{ source: [0xC153], NFC: [0xC153], NFD: [0x1109, 0x1166, 0x11C2], NFKC: [0xC153], NFKD: [0x1109, 0x1166, 0x11C2] }, +{ source: [0xC154], NFC: [0xC154], NFD: [0x1109, 0x1167], NFKC: [0xC154], NFKD: [0x1109, 0x1167] }, +{ source: [0xC155], NFC: [0xC155], NFD: [0x1109, 0x1167, 0x11A8], NFKC: [0xC155], NFKD: [0x1109, 0x1167, 0x11A8] }, +{ source: [0xC156], NFC: [0xC156], NFD: [0x1109, 0x1167, 0x11A9], NFKC: [0xC156], NFKD: [0x1109, 0x1167, 0x11A9] }, +{ source: [0xC157], NFC: [0xC157], NFD: [0x1109, 0x1167, 0x11AA], NFKC: [0xC157], NFKD: [0x1109, 0x1167, 0x11AA] }, +{ source: [0xC158], NFC: [0xC158], NFD: [0x1109, 0x1167, 0x11AB], NFKC: [0xC158], NFKD: [0x1109, 0x1167, 0x11AB] }, +{ source: [0xC159], NFC: [0xC159], NFD: [0x1109, 0x1167, 0x11AC], NFKC: [0xC159], NFKD: [0x1109, 0x1167, 0x11AC] }, +{ source: [0xC15A], NFC: [0xC15A], NFD: [0x1109, 0x1167, 0x11AD], NFKC: [0xC15A], NFKD: [0x1109, 0x1167, 0x11AD] }, +{ source: [0xC15B], NFC: [0xC15B], NFD: [0x1109, 0x1167, 0x11AE], NFKC: [0xC15B], NFKD: [0x1109, 0x1167, 0x11AE] }, +{ source: [0xC15C], NFC: [0xC15C], NFD: [0x1109, 0x1167, 0x11AF], NFKC: [0xC15C], NFKD: [0x1109, 0x1167, 0x11AF] }, +{ source: [0xC15D], NFC: [0xC15D], NFD: [0x1109, 0x1167, 0x11B0], NFKC: [0xC15D], NFKD: [0x1109, 0x1167, 0x11B0] }, +{ source: [0xC15E], NFC: [0xC15E], NFD: [0x1109, 0x1167, 0x11B1], NFKC: [0xC15E], NFKD: [0x1109, 0x1167, 0x11B1] }, +{ source: [0xC15F], NFC: [0xC15F], NFD: [0x1109, 0x1167, 0x11B2], NFKC: [0xC15F], NFKD: [0x1109, 0x1167, 0x11B2] }, +{ source: [0xC160], NFC: [0xC160], NFD: [0x1109, 0x1167, 0x11B3], NFKC: [0xC160], NFKD: [0x1109, 0x1167, 0x11B3] }, +{ source: [0xC161], NFC: [0xC161], NFD: [0x1109, 0x1167, 0x11B4], NFKC: [0xC161], NFKD: [0x1109, 0x1167, 0x11B4] }, +{ source: [0xC162], NFC: [0xC162], NFD: [0x1109, 0x1167, 0x11B5], NFKC: [0xC162], NFKD: [0x1109, 0x1167, 0x11B5] }, +{ source: [0xC163], NFC: [0xC163], NFD: [0x1109, 0x1167, 0x11B6], NFKC: [0xC163], NFKD: [0x1109, 0x1167, 0x11B6] }, +{ source: [0xC164], NFC: [0xC164], NFD: [0x1109, 0x1167, 0x11B7], NFKC: [0xC164], NFKD: [0x1109, 0x1167, 0x11B7] }, +{ source: [0xC165], NFC: [0xC165], NFD: [0x1109, 0x1167, 0x11B8], NFKC: [0xC165], NFKD: [0x1109, 0x1167, 0x11B8] }, +{ source: [0xC166], NFC: [0xC166], NFD: [0x1109, 0x1167, 0x11B9], NFKC: [0xC166], NFKD: [0x1109, 0x1167, 0x11B9] }, +{ source: [0xC167], NFC: [0xC167], NFD: [0x1109, 0x1167, 0x11BA], NFKC: [0xC167], NFKD: [0x1109, 0x1167, 0x11BA] }, +{ source: [0xC168], NFC: [0xC168], NFD: [0x1109, 0x1167, 0x11BB], NFKC: [0xC168], NFKD: [0x1109, 0x1167, 0x11BB] }, +{ source: [0xC169], NFC: [0xC169], NFD: [0x1109, 0x1167, 0x11BC], NFKC: [0xC169], NFKD: [0x1109, 0x1167, 0x11BC] }, +{ source: [0xC16A], NFC: [0xC16A], NFD: [0x1109, 0x1167, 0x11BD], NFKC: [0xC16A], NFKD: [0x1109, 0x1167, 0x11BD] }, +{ source: [0xC16B], NFC: [0xC16B], NFD: [0x1109, 0x1167, 0x11BE], NFKC: [0xC16B], NFKD: [0x1109, 0x1167, 0x11BE] }, +{ source: [0xC16C], NFC: [0xC16C], NFD: [0x1109, 0x1167, 0x11BF], NFKC: [0xC16C], NFKD: [0x1109, 0x1167, 0x11BF] }, +{ source: [0xC16D], NFC: [0xC16D], NFD: [0x1109, 0x1167, 0x11C0], NFKC: [0xC16D], NFKD: [0x1109, 0x1167, 0x11C0] }, +{ source: [0xC16E], NFC: [0xC16E], NFD: [0x1109, 0x1167, 0x11C1], NFKC: [0xC16E], NFKD: [0x1109, 0x1167, 0x11C1] }, +{ source: [0xC16F], NFC: [0xC16F], NFD: [0x1109, 0x1167, 0x11C2], NFKC: [0xC16F], NFKD: [0x1109, 0x1167, 0x11C2] }, +{ source: [0xC170], NFC: [0xC170], NFD: [0x1109, 0x1168], NFKC: [0xC170], NFKD: [0x1109, 0x1168] }, +{ source: [0xC171], NFC: [0xC171], NFD: [0x1109, 0x1168, 0x11A8], NFKC: [0xC171], NFKD: [0x1109, 0x1168, 0x11A8] }, +{ source: [0xC172], NFC: [0xC172], NFD: [0x1109, 0x1168, 0x11A9], NFKC: [0xC172], NFKD: [0x1109, 0x1168, 0x11A9] }, +{ source: [0xC173], NFC: [0xC173], NFD: [0x1109, 0x1168, 0x11AA], NFKC: [0xC173], NFKD: [0x1109, 0x1168, 0x11AA] }, +{ source: [0xC174], NFC: [0xC174], NFD: [0x1109, 0x1168, 0x11AB], NFKC: [0xC174], NFKD: [0x1109, 0x1168, 0x11AB] }, +{ source: [0xC175], NFC: [0xC175], NFD: [0x1109, 0x1168, 0x11AC], NFKC: [0xC175], NFKD: [0x1109, 0x1168, 0x11AC] }, +{ source: [0xC176], NFC: [0xC176], NFD: [0x1109, 0x1168, 0x11AD], NFKC: [0xC176], NFKD: [0x1109, 0x1168, 0x11AD] }, +{ source: [0xC177], NFC: [0xC177], NFD: [0x1109, 0x1168, 0x11AE], NFKC: [0xC177], NFKD: [0x1109, 0x1168, 0x11AE] }, +{ source: [0xC178], NFC: [0xC178], NFD: [0x1109, 0x1168, 0x11AF], NFKC: [0xC178], NFKD: [0x1109, 0x1168, 0x11AF] }, +{ source: [0xC179], NFC: [0xC179], NFD: [0x1109, 0x1168, 0x11B0], NFKC: [0xC179], NFKD: [0x1109, 0x1168, 0x11B0] }, +{ source: [0xC17A], NFC: [0xC17A], NFD: [0x1109, 0x1168, 0x11B1], NFKC: [0xC17A], NFKD: [0x1109, 0x1168, 0x11B1] }, +{ source: [0xC17B], NFC: [0xC17B], NFD: [0x1109, 0x1168, 0x11B2], NFKC: [0xC17B], NFKD: [0x1109, 0x1168, 0x11B2] }, +{ source: [0xC17C], NFC: [0xC17C], NFD: [0x1109, 0x1168, 0x11B3], NFKC: [0xC17C], NFKD: [0x1109, 0x1168, 0x11B3] }, +{ source: [0xC17D], NFC: [0xC17D], NFD: [0x1109, 0x1168, 0x11B4], NFKC: [0xC17D], NFKD: [0x1109, 0x1168, 0x11B4] }, +{ source: [0xC17E], NFC: [0xC17E], NFD: [0x1109, 0x1168, 0x11B5], NFKC: [0xC17E], NFKD: [0x1109, 0x1168, 0x11B5] }, +{ source: [0xC17F], NFC: [0xC17F], NFD: [0x1109, 0x1168, 0x11B6], NFKC: [0xC17F], NFKD: [0x1109, 0x1168, 0x11B6] }, +{ source: [0xC180], NFC: [0xC180], NFD: [0x1109, 0x1168, 0x11B7], NFKC: [0xC180], NFKD: [0x1109, 0x1168, 0x11B7] }, +{ source: [0xC181], NFC: [0xC181], NFD: [0x1109, 0x1168, 0x11B8], NFKC: [0xC181], NFKD: [0x1109, 0x1168, 0x11B8] }, +{ source: [0xC182], NFC: [0xC182], NFD: [0x1109, 0x1168, 0x11B9], NFKC: [0xC182], NFKD: [0x1109, 0x1168, 0x11B9] }, +{ source: [0xC183], NFC: [0xC183], NFD: [0x1109, 0x1168, 0x11BA], NFKC: [0xC183], NFKD: [0x1109, 0x1168, 0x11BA] }, +{ source: [0xC184], NFC: [0xC184], NFD: [0x1109, 0x1168, 0x11BB], NFKC: [0xC184], NFKD: [0x1109, 0x1168, 0x11BB] }, +{ source: [0xC185], NFC: [0xC185], NFD: [0x1109, 0x1168, 0x11BC], NFKC: [0xC185], NFKD: [0x1109, 0x1168, 0x11BC] }, +{ source: [0xC186], NFC: [0xC186], NFD: [0x1109, 0x1168, 0x11BD], NFKC: [0xC186], NFKD: [0x1109, 0x1168, 0x11BD] }, +{ source: [0xC187], NFC: [0xC187], NFD: [0x1109, 0x1168, 0x11BE], NFKC: [0xC187], NFKD: [0x1109, 0x1168, 0x11BE] }, +{ source: [0xC188], NFC: [0xC188], NFD: [0x1109, 0x1168, 0x11BF], NFKC: [0xC188], NFKD: [0x1109, 0x1168, 0x11BF] }, +{ source: [0xC189], NFC: [0xC189], NFD: [0x1109, 0x1168, 0x11C0], NFKC: [0xC189], NFKD: [0x1109, 0x1168, 0x11C0] }, +{ source: [0xC18A], NFC: [0xC18A], NFD: [0x1109, 0x1168, 0x11C1], NFKC: [0xC18A], NFKD: [0x1109, 0x1168, 0x11C1] }, +{ source: [0xC18B], NFC: [0xC18B], NFD: [0x1109, 0x1168, 0x11C2], NFKC: [0xC18B], NFKD: [0x1109, 0x1168, 0x11C2] }, +{ source: [0xC18C], NFC: [0xC18C], NFD: [0x1109, 0x1169], NFKC: [0xC18C], NFKD: [0x1109, 0x1169] }, +{ source: [0xC18D], NFC: [0xC18D], NFD: [0x1109, 0x1169, 0x11A8], NFKC: [0xC18D], NFKD: [0x1109, 0x1169, 0x11A8] }, +{ source: [0xC18E], NFC: [0xC18E], NFD: [0x1109, 0x1169, 0x11A9], NFKC: [0xC18E], NFKD: [0x1109, 0x1169, 0x11A9] }, +{ source: [0xC18F], NFC: [0xC18F], NFD: [0x1109, 0x1169, 0x11AA], NFKC: [0xC18F], NFKD: [0x1109, 0x1169, 0x11AA] }, +{ source: [0xC190], NFC: [0xC190], NFD: [0x1109, 0x1169, 0x11AB], NFKC: [0xC190], NFKD: [0x1109, 0x1169, 0x11AB] }, +{ source: [0xC191], NFC: [0xC191], NFD: [0x1109, 0x1169, 0x11AC], NFKC: [0xC191], NFKD: [0x1109, 0x1169, 0x11AC] }, +{ source: [0xC192], NFC: [0xC192], NFD: [0x1109, 0x1169, 0x11AD], NFKC: [0xC192], NFKD: [0x1109, 0x1169, 0x11AD] }, +{ source: [0xC193], NFC: [0xC193], NFD: [0x1109, 0x1169, 0x11AE], NFKC: [0xC193], NFKD: [0x1109, 0x1169, 0x11AE] }, +{ source: [0xC194], NFC: [0xC194], NFD: [0x1109, 0x1169, 0x11AF], NFKC: [0xC194], NFKD: [0x1109, 0x1169, 0x11AF] }, +{ source: [0xC195], NFC: [0xC195], NFD: [0x1109, 0x1169, 0x11B0], NFKC: [0xC195], NFKD: [0x1109, 0x1169, 0x11B0] }, +{ source: [0xC196], NFC: [0xC196], NFD: [0x1109, 0x1169, 0x11B1], NFKC: [0xC196], NFKD: [0x1109, 0x1169, 0x11B1] }, +{ source: [0xC197], NFC: [0xC197], NFD: [0x1109, 0x1169, 0x11B2], NFKC: [0xC197], NFKD: [0x1109, 0x1169, 0x11B2] }, +{ source: [0xC198], NFC: [0xC198], NFD: [0x1109, 0x1169, 0x11B3], NFKC: [0xC198], NFKD: [0x1109, 0x1169, 0x11B3] }, +{ source: [0xC199], NFC: [0xC199], NFD: [0x1109, 0x1169, 0x11B4], NFKC: [0xC199], NFKD: [0x1109, 0x1169, 0x11B4] }, +{ source: [0xC19A], NFC: [0xC19A], NFD: [0x1109, 0x1169, 0x11B5], NFKC: [0xC19A], NFKD: [0x1109, 0x1169, 0x11B5] }, +{ source: [0xC19B], NFC: [0xC19B], NFD: [0x1109, 0x1169, 0x11B6], NFKC: [0xC19B], NFKD: [0x1109, 0x1169, 0x11B6] }, +{ source: [0xC19C], NFC: [0xC19C], NFD: [0x1109, 0x1169, 0x11B7], NFKC: [0xC19C], NFKD: [0x1109, 0x1169, 0x11B7] }, +{ source: [0xC19D], NFC: [0xC19D], NFD: [0x1109, 0x1169, 0x11B8], NFKC: [0xC19D], NFKD: [0x1109, 0x1169, 0x11B8] }, +{ source: [0xC19E], NFC: [0xC19E], NFD: [0x1109, 0x1169, 0x11B9], NFKC: [0xC19E], NFKD: [0x1109, 0x1169, 0x11B9] }, +{ source: [0xC19F], NFC: [0xC19F], NFD: [0x1109, 0x1169, 0x11BA], NFKC: [0xC19F], NFKD: [0x1109, 0x1169, 0x11BA] }, +{ source: [0xC1A0], NFC: [0xC1A0], NFD: [0x1109, 0x1169, 0x11BB], NFKC: [0xC1A0], NFKD: [0x1109, 0x1169, 0x11BB] }, +{ source: [0xC1A1], NFC: [0xC1A1], NFD: [0x1109, 0x1169, 0x11BC], NFKC: [0xC1A1], NFKD: [0x1109, 0x1169, 0x11BC] }, +{ source: [0xC1A2], NFC: [0xC1A2], NFD: [0x1109, 0x1169, 0x11BD], NFKC: [0xC1A2], NFKD: [0x1109, 0x1169, 0x11BD] }, +{ source: [0xC1A3], NFC: [0xC1A3], NFD: [0x1109, 0x1169, 0x11BE], NFKC: [0xC1A3], NFKD: [0x1109, 0x1169, 0x11BE] }, +{ source: [0xC1A4], NFC: [0xC1A4], NFD: [0x1109, 0x1169, 0x11BF], NFKC: [0xC1A4], NFKD: [0x1109, 0x1169, 0x11BF] }, +{ source: [0xC1A5], NFC: [0xC1A5], NFD: [0x1109, 0x1169, 0x11C0], NFKC: [0xC1A5], NFKD: [0x1109, 0x1169, 0x11C0] }, +{ source: [0xC1A6], NFC: [0xC1A6], NFD: [0x1109, 0x1169, 0x11C1], NFKC: [0xC1A6], NFKD: [0x1109, 0x1169, 0x11C1] }, +{ source: [0xC1A7], NFC: [0xC1A7], NFD: [0x1109, 0x1169, 0x11C2], NFKC: [0xC1A7], NFKD: [0x1109, 0x1169, 0x11C2] }, +{ source: [0xC1A8], NFC: [0xC1A8], NFD: [0x1109, 0x116A], NFKC: [0xC1A8], NFKD: [0x1109, 0x116A] }, +{ source: [0xC1A9], NFC: [0xC1A9], NFD: [0x1109, 0x116A, 0x11A8], NFKC: [0xC1A9], NFKD: [0x1109, 0x116A, 0x11A8] }, +{ source: [0xC1AA], NFC: [0xC1AA], NFD: [0x1109, 0x116A, 0x11A9], NFKC: [0xC1AA], NFKD: [0x1109, 0x116A, 0x11A9] }, +{ source: [0xC1AB], NFC: [0xC1AB], NFD: [0x1109, 0x116A, 0x11AA], NFKC: [0xC1AB], NFKD: [0x1109, 0x116A, 0x11AA] }, +{ source: [0xC1AC], NFC: [0xC1AC], NFD: [0x1109, 0x116A, 0x11AB], NFKC: [0xC1AC], NFKD: [0x1109, 0x116A, 0x11AB] }, +{ source: [0xC1AD], NFC: [0xC1AD], NFD: [0x1109, 0x116A, 0x11AC], NFKC: [0xC1AD], NFKD: [0x1109, 0x116A, 0x11AC] }, +{ source: [0xC1AE], NFC: [0xC1AE], NFD: [0x1109, 0x116A, 0x11AD], NFKC: [0xC1AE], NFKD: [0x1109, 0x116A, 0x11AD] }, +{ source: [0xC1AF], NFC: [0xC1AF], NFD: [0x1109, 0x116A, 0x11AE], NFKC: [0xC1AF], NFKD: [0x1109, 0x116A, 0x11AE] }, +{ source: [0xC1B0], NFC: [0xC1B0], NFD: [0x1109, 0x116A, 0x11AF], NFKC: [0xC1B0], NFKD: [0x1109, 0x116A, 0x11AF] }, +{ source: [0xC1B1], NFC: [0xC1B1], NFD: [0x1109, 0x116A, 0x11B0], NFKC: [0xC1B1], NFKD: [0x1109, 0x116A, 0x11B0] }, +{ source: [0xC1B2], NFC: [0xC1B2], NFD: [0x1109, 0x116A, 0x11B1], NFKC: [0xC1B2], NFKD: [0x1109, 0x116A, 0x11B1] }, +{ source: [0xC1B3], NFC: [0xC1B3], NFD: [0x1109, 0x116A, 0x11B2], NFKC: [0xC1B3], NFKD: [0x1109, 0x116A, 0x11B2] }, +{ source: [0xC1B4], NFC: [0xC1B4], NFD: [0x1109, 0x116A, 0x11B3], NFKC: [0xC1B4], NFKD: [0x1109, 0x116A, 0x11B3] }, +{ source: [0xC1B5], NFC: [0xC1B5], NFD: [0x1109, 0x116A, 0x11B4], NFKC: [0xC1B5], NFKD: [0x1109, 0x116A, 0x11B4] }, +{ source: [0xC1B6], NFC: [0xC1B6], NFD: [0x1109, 0x116A, 0x11B5], NFKC: [0xC1B6], NFKD: [0x1109, 0x116A, 0x11B5] }, +{ source: [0xC1B7], NFC: [0xC1B7], NFD: [0x1109, 0x116A, 0x11B6], NFKC: [0xC1B7], NFKD: [0x1109, 0x116A, 0x11B6] }, +{ source: [0xC1B8], NFC: [0xC1B8], NFD: [0x1109, 0x116A, 0x11B7], NFKC: [0xC1B8], NFKD: [0x1109, 0x116A, 0x11B7] }, +{ source: [0xC1B9], NFC: [0xC1B9], NFD: [0x1109, 0x116A, 0x11B8], NFKC: [0xC1B9], NFKD: [0x1109, 0x116A, 0x11B8] }, +{ source: [0xC1BA], NFC: [0xC1BA], NFD: [0x1109, 0x116A, 0x11B9], NFKC: [0xC1BA], NFKD: [0x1109, 0x116A, 0x11B9] }, +{ source: [0xC1BB], NFC: [0xC1BB], NFD: [0x1109, 0x116A, 0x11BA], NFKC: [0xC1BB], NFKD: [0x1109, 0x116A, 0x11BA] }, +{ source: [0xC1BC], NFC: [0xC1BC], NFD: [0x1109, 0x116A, 0x11BB], NFKC: [0xC1BC], NFKD: [0x1109, 0x116A, 0x11BB] }, +{ source: [0xC1BD], NFC: [0xC1BD], NFD: [0x1109, 0x116A, 0x11BC], NFKC: [0xC1BD], NFKD: [0x1109, 0x116A, 0x11BC] }, +{ source: [0xC1BE], NFC: [0xC1BE], NFD: [0x1109, 0x116A, 0x11BD], NFKC: [0xC1BE], NFKD: [0x1109, 0x116A, 0x11BD] }, +{ source: [0xC1BF], NFC: [0xC1BF], NFD: [0x1109, 0x116A, 0x11BE], NFKC: [0xC1BF], NFKD: [0x1109, 0x116A, 0x11BE] }, +{ source: [0xC1C0], NFC: [0xC1C0], NFD: [0x1109, 0x116A, 0x11BF], NFKC: [0xC1C0], NFKD: [0x1109, 0x116A, 0x11BF] }, +{ source: [0xC1C1], NFC: [0xC1C1], NFD: [0x1109, 0x116A, 0x11C0], NFKC: [0xC1C1], NFKD: [0x1109, 0x116A, 0x11C0] }, +{ source: [0xC1C2], NFC: [0xC1C2], NFD: [0x1109, 0x116A, 0x11C1], NFKC: [0xC1C2], NFKD: [0x1109, 0x116A, 0x11C1] }, +{ source: [0xC1C3], NFC: [0xC1C3], NFD: [0x1109, 0x116A, 0x11C2], NFKC: [0xC1C3], NFKD: [0x1109, 0x116A, 0x11C2] }, +{ source: [0xC1C4], NFC: [0xC1C4], NFD: [0x1109, 0x116B], NFKC: [0xC1C4], NFKD: [0x1109, 0x116B] }, +{ source: [0xC1C5], NFC: [0xC1C5], NFD: [0x1109, 0x116B, 0x11A8], NFKC: [0xC1C5], NFKD: [0x1109, 0x116B, 0x11A8] }, +{ source: [0xC1C6], NFC: [0xC1C6], NFD: [0x1109, 0x116B, 0x11A9], NFKC: [0xC1C6], NFKD: [0x1109, 0x116B, 0x11A9] }, +{ source: [0xC1C7], NFC: [0xC1C7], NFD: [0x1109, 0x116B, 0x11AA], NFKC: [0xC1C7], NFKD: [0x1109, 0x116B, 0x11AA] }, +{ source: [0xC1C8], NFC: [0xC1C8], NFD: [0x1109, 0x116B, 0x11AB], NFKC: [0xC1C8], NFKD: [0x1109, 0x116B, 0x11AB] }, +{ source: [0xC1C9], NFC: [0xC1C9], NFD: [0x1109, 0x116B, 0x11AC], NFKC: [0xC1C9], NFKD: [0x1109, 0x116B, 0x11AC] }, +{ source: [0xC1CA], NFC: [0xC1CA], NFD: [0x1109, 0x116B, 0x11AD], NFKC: [0xC1CA], NFKD: [0x1109, 0x116B, 0x11AD] }, +{ source: [0xC1CB], NFC: [0xC1CB], NFD: [0x1109, 0x116B, 0x11AE], NFKC: [0xC1CB], NFKD: [0x1109, 0x116B, 0x11AE] }, +{ source: [0xC1CC], NFC: [0xC1CC], NFD: [0x1109, 0x116B, 0x11AF], NFKC: [0xC1CC], NFKD: [0x1109, 0x116B, 0x11AF] }, +{ source: [0xC1CD], NFC: [0xC1CD], NFD: [0x1109, 0x116B, 0x11B0], NFKC: [0xC1CD], NFKD: [0x1109, 0x116B, 0x11B0] }, +{ source: [0xC1CE], NFC: [0xC1CE], NFD: [0x1109, 0x116B, 0x11B1], NFKC: [0xC1CE], NFKD: [0x1109, 0x116B, 0x11B1] }, +{ source: [0xC1CF], NFC: [0xC1CF], NFD: [0x1109, 0x116B, 0x11B2], NFKC: [0xC1CF], NFKD: [0x1109, 0x116B, 0x11B2] }, +{ source: [0xC1D0], NFC: [0xC1D0], NFD: [0x1109, 0x116B, 0x11B3], NFKC: [0xC1D0], NFKD: [0x1109, 0x116B, 0x11B3] }, +{ source: [0xC1D1], NFC: [0xC1D1], NFD: [0x1109, 0x116B, 0x11B4], NFKC: [0xC1D1], NFKD: [0x1109, 0x116B, 0x11B4] }, +{ source: [0xC1D2], NFC: [0xC1D2], NFD: [0x1109, 0x116B, 0x11B5], NFKC: [0xC1D2], NFKD: [0x1109, 0x116B, 0x11B5] }, +{ source: [0xC1D3], NFC: [0xC1D3], NFD: [0x1109, 0x116B, 0x11B6], NFKC: [0xC1D3], NFKD: [0x1109, 0x116B, 0x11B6] }, +{ source: [0xC1D4], NFC: [0xC1D4], NFD: [0x1109, 0x116B, 0x11B7], NFKC: [0xC1D4], NFKD: [0x1109, 0x116B, 0x11B7] }, +{ source: [0xC1D5], NFC: [0xC1D5], NFD: [0x1109, 0x116B, 0x11B8], NFKC: [0xC1D5], NFKD: [0x1109, 0x116B, 0x11B8] }, +{ source: [0xC1D6], NFC: [0xC1D6], NFD: [0x1109, 0x116B, 0x11B9], NFKC: [0xC1D6], NFKD: [0x1109, 0x116B, 0x11B9] }, +{ source: [0xC1D7], NFC: [0xC1D7], NFD: [0x1109, 0x116B, 0x11BA], NFKC: [0xC1D7], NFKD: [0x1109, 0x116B, 0x11BA] }, +{ source: [0xC1D8], NFC: [0xC1D8], NFD: [0x1109, 0x116B, 0x11BB], NFKC: [0xC1D8], NFKD: [0x1109, 0x116B, 0x11BB] }, +{ source: [0xC1D9], NFC: [0xC1D9], NFD: [0x1109, 0x116B, 0x11BC], NFKC: [0xC1D9], NFKD: [0x1109, 0x116B, 0x11BC] }, +{ source: [0xC1DA], NFC: [0xC1DA], NFD: [0x1109, 0x116B, 0x11BD], NFKC: [0xC1DA], NFKD: [0x1109, 0x116B, 0x11BD] }, +{ source: [0xC1DB], NFC: [0xC1DB], NFD: [0x1109, 0x116B, 0x11BE], NFKC: [0xC1DB], NFKD: [0x1109, 0x116B, 0x11BE] }, +{ source: [0xC1DC], NFC: [0xC1DC], NFD: [0x1109, 0x116B, 0x11BF], NFKC: [0xC1DC], NFKD: [0x1109, 0x116B, 0x11BF] }, +{ source: [0xC1DD], NFC: [0xC1DD], NFD: [0x1109, 0x116B, 0x11C0], NFKC: [0xC1DD], NFKD: [0x1109, 0x116B, 0x11C0] }, +{ source: [0xC1DE], NFC: [0xC1DE], NFD: [0x1109, 0x116B, 0x11C1], NFKC: [0xC1DE], NFKD: [0x1109, 0x116B, 0x11C1] }, +{ source: [0xC1DF], NFC: [0xC1DF], NFD: [0x1109, 0x116B, 0x11C2], NFKC: [0xC1DF], NFKD: [0x1109, 0x116B, 0x11C2] }, +{ source: [0xC1E0], NFC: [0xC1E0], NFD: [0x1109, 0x116C], NFKC: [0xC1E0], NFKD: [0x1109, 0x116C] }, +{ source: [0xC1E1], NFC: [0xC1E1], NFD: [0x1109, 0x116C, 0x11A8], NFKC: [0xC1E1], NFKD: [0x1109, 0x116C, 0x11A8] }, +{ source: [0xC1E2], NFC: [0xC1E2], NFD: [0x1109, 0x116C, 0x11A9], NFKC: [0xC1E2], NFKD: [0x1109, 0x116C, 0x11A9] }, +{ source: [0xC1E3], NFC: [0xC1E3], NFD: [0x1109, 0x116C, 0x11AA], NFKC: [0xC1E3], NFKD: [0x1109, 0x116C, 0x11AA] }, +{ source: [0xC1E4], NFC: [0xC1E4], NFD: [0x1109, 0x116C, 0x11AB], NFKC: [0xC1E4], NFKD: [0x1109, 0x116C, 0x11AB] }, +{ source: [0xC1E5], NFC: [0xC1E5], NFD: [0x1109, 0x116C, 0x11AC], NFKC: [0xC1E5], NFKD: [0x1109, 0x116C, 0x11AC] }, +{ source: [0xC1E6], NFC: [0xC1E6], NFD: [0x1109, 0x116C, 0x11AD], NFKC: [0xC1E6], NFKD: [0x1109, 0x116C, 0x11AD] }, +{ source: [0xC1E7], NFC: [0xC1E7], NFD: [0x1109, 0x116C, 0x11AE], NFKC: [0xC1E7], NFKD: [0x1109, 0x116C, 0x11AE] }, +{ source: [0xC1E8], NFC: [0xC1E8], NFD: [0x1109, 0x116C, 0x11AF], NFKC: [0xC1E8], NFKD: [0x1109, 0x116C, 0x11AF] }, +{ source: [0xC1E9], NFC: [0xC1E9], NFD: [0x1109, 0x116C, 0x11B0], NFKC: [0xC1E9], NFKD: [0x1109, 0x116C, 0x11B0] }, +{ source: [0xC1EA], NFC: [0xC1EA], NFD: [0x1109, 0x116C, 0x11B1], NFKC: [0xC1EA], NFKD: [0x1109, 0x116C, 0x11B1] }, +{ source: [0xC1EB], NFC: [0xC1EB], NFD: [0x1109, 0x116C, 0x11B2], NFKC: [0xC1EB], NFKD: [0x1109, 0x116C, 0x11B2] }, +{ source: [0xC1EC], NFC: [0xC1EC], NFD: [0x1109, 0x116C, 0x11B3], NFKC: [0xC1EC], NFKD: [0x1109, 0x116C, 0x11B3] }, +{ source: [0xC1ED], NFC: [0xC1ED], NFD: [0x1109, 0x116C, 0x11B4], NFKC: [0xC1ED], NFKD: [0x1109, 0x116C, 0x11B4] }, +{ source: [0xC1EE], NFC: [0xC1EE], NFD: [0x1109, 0x116C, 0x11B5], NFKC: [0xC1EE], NFKD: [0x1109, 0x116C, 0x11B5] }, +{ source: [0xC1EF], NFC: [0xC1EF], NFD: [0x1109, 0x116C, 0x11B6], NFKC: [0xC1EF], NFKD: [0x1109, 0x116C, 0x11B6] }, +{ source: [0xC1F0], NFC: [0xC1F0], NFD: [0x1109, 0x116C, 0x11B7], NFKC: [0xC1F0], NFKD: [0x1109, 0x116C, 0x11B7] }, +{ source: [0xC1F1], NFC: [0xC1F1], NFD: [0x1109, 0x116C, 0x11B8], NFKC: [0xC1F1], NFKD: [0x1109, 0x116C, 0x11B8] }, +{ source: [0xC1F2], NFC: [0xC1F2], NFD: [0x1109, 0x116C, 0x11B9], NFKC: [0xC1F2], NFKD: [0x1109, 0x116C, 0x11B9] }, +{ source: [0xC1F3], NFC: [0xC1F3], NFD: [0x1109, 0x116C, 0x11BA], NFKC: [0xC1F3], NFKD: [0x1109, 0x116C, 0x11BA] }, +{ source: [0xC1F4], NFC: [0xC1F4], NFD: [0x1109, 0x116C, 0x11BB], NFKC: [0xC1F4], NFKD: [0x1109, 0x116C, 0x11BB] }, +{ source: [0xC1F5], NFC: [0xC1F5], NFD: [0x1109, 0x116C, 0x11BC], NFKC: [0xC1F5], NFKD: [0x1109, 0x116C, 0x11BC] }, +{ source: [0xC1F6], NFC: [0xC1F6], NFD: [0x1109, 0x116C, 0x11BD], NFKC: [0xC1F6], NFKD: [0x1109, 0x116C, 0x11BD] }, +{ source: [0xC1F7], NFC: [0xC1F7], NFD: [0x1109, 0x116C, 0x11BE], NFKC: [0xC1F7], NFKD: [0x1109, 0x116C, 0x11BE] }, +{ source: [0xC1F8], NFC: [0xC1F8], NFD: [0x1109, 0x116C, 0x11BF], NFKC: [0xC1F8], NFKD: [0x1109, 0x116C, 0x11BF] }, +{ source: [0xC1F9], NFC: [0xC1F9], NFD: [0x1109, 0x116C, 0x11C0], NFKC: [0xC1F9], NFKD: [0x1109, 0x116C, 0x11C0] }, +{ source: [0xC1FA], NFC: [0xC1FA], NFD: [0x1109, 0x116C, 0x11C1], NFKC: [0xC1FA], NFKD: [0x1109, 0x116C, 0x11C1] }, +{ source: [0xC1FB], NFC: [0xC1FB], NFD: [0x1109, 0x116C, 0x11C2], NFKC: [0xC1FB], NFKD: [0x1109, 0x116C, 0x11C2] }, +{ source: [0xC1FC], NFC: [0xC1FC], NFD: [0x1109, 0x116D], NFKC: [0xC1FC], NFKD: [0x1109, 0x116D] }, +{ source: [0xC1FD], NFC: [0xC1FD], NFD: [0x1109, 0x116D, 0x11A8], NFKC: [0xC1FD], NFKD: [0x1109, 0x116D, 0x11A8] }, +{ source: [0xC1FE], NFC: [0xC1FE], NFD: [0x1109, 0x116D, 0x11A9], NFKC: [0xC1FE], NFKD: [0x1109, 0x116D, 0x11A9] }, +{ source: [0xC1FF], NFC: [0xC1FF], NFD: [0x1109, 0x116D, 0x11AA], NFKC: [0xC1FF], NFKD: [0x1109, 0x116D, 0x11AA] }, +{ source: [0xC200], NFC: [0xC200], NFD: [0x1109, 0x116D, 0x11AB], NFKC: [0xC200], NFKD: [0x1109, 0x116D, 0x11AB] }, +{ source: [0xC201], NFC: [0xC201], NFD: [0x1109, 0x116D, 0x11AC], NFKC: [0xC201], NFKD: [0x1109, 0x116D, 0x11AC] }, +{ source: [0xC202], NFC: [0xC202], NFD: [0x1109, 0x116D, 0x11AD], NFKC: [0xC202], NFKD: [0x1109, 0x116D, 0x11AD] }, +{ source: [0xC203], NFC: [0xC203], NFD: [0x1109, 0x116D, 0x11AE], NFKC: [0xC203], NFKD: [0x1109, 0x116D, 0x11AE] }, +{ source: [0xC204], NFC: [0xC204], NFD: [0x1109, 0x116D, 0x11AF], NFKC: [0xC204], NFKD: [0x1109, 0x116D, 0x11AF] }, +{ source: [0xC205], NFC: [0xC205], NFD: [0x1109, 0x116D, 0x11B0], NFKC: [0xC205], NFKD: [0x1109, 0x116D, 0x11B0] }, +{ source: [0xC206], NFC: [0xC206], NFD: [0x1109, 0x116D, 0x11B1], NFKC: [0xC206], NFKD: [0x1109, 0x116D, 0x11B1] }, +{ source: [0xC207], NFC: [0xC207], NFD: [0x1109, 0x116D, 0x11B2], NFKC: [0xC207], NFKD: [0x1109, 0x116D, 0x11B2] }, +{ source: [0xC208], NFC: [0xC208], NFD: [0x1109, 0x116D, 0x11B3], NFKC: [0xC208], NFKD: [0x1109, 0x116D, 0x11B3] }, +{ source: [0xC209], NFC: [0xC209], NFD: [0x1109, 0x116D, 0x11B4], NFKC: [0xC209], NFKD: [0x1109, 0x116D, 0x11B4] }, +{ source: [0xC20A], NFC: [0xC20A], NFD: [0x1109, 0x116D, 0x11B5], NFKC: [0xC20A], NFKD: [0x1109, 0x116D, 0x11B5] }, +{ source: [0xC20B], NFC: [0xC20B], NFD: [0x1109, 0x116D, 0x11B6], NFKC: [0xC20B], NFKD: [0x1109, 0x116D, 0x11B6] }, +{ source: [0xC20C], NFC: [0xC20C], NFD: [0x1109, 0x116D, 0x11B7], NFKC: [0xC20C], NFKD: [0x1109, 0x116D, 0x11B7] }, +{ source: [0xC20D], NFC: [0xC20D], NFD: [0x1109, 0x116D, 0x11B8], NFKC: [0xC20D], NFKD: [0x1109, 0x116D, 0x11B8] }, +{ source: [0xC20E], NFC: [0xC20E], NFD: [0x1109, 0x116D, 0x11B9], NFKC: [0xC20E], NFKD: [0x1109, 0x116D, 0x11B9] }, +{ source: [0xC20F], NFC: [0xC20F], NFD: [0x1109, 0x116D, 0x11BA], NFKC: [0xC20F], NFKD: [0x1109, 0x116D, 0x11BA] }, +{ source: [0xC210], NFC: [0xC210], NFD: [0x1109, 0x116D, 0x11BB], NFKC: [0xC210], NFKD: [0x1109, 0x116D, 0x11BB] }, +{ source: [0xC211], NFC: [0xC211], NFD: [0x1109, 0x116D, 0x11BC], NFKC: [0xC211], NFKD: [0x1109, 0x116D, 0x11BC] }, +{ source: [0xC212], NFC: [0xC212], NFD: [0x1109, 0x116D, 0x11BD], NFKC: [0xC212], NFKD: [0x1109, 0x116D, 0x11BD] }, +{ source: [0xC213], NFC: [0xC213], NFD: [0x1109, 0x116D, 0x11BE], NFKC: [0xC213], NFKD: [0x1109, 0x116D, 0x11BE] }, +{ source: [0xC214], NFC: [0xC214], NFD: [0x1109, 0x116D, 0x11BF], NFKC: [0xC214], NFKD: [0x1109, 0x116D, 0x11BF] }, +{ source: [0xC215], NFC: [0xC215], NFD: [0x1109, 0x116D, 0x11C0], NFKC: [0xC215], NFKD: [0x1109, 0x116D, 0x11C0] }, +{ source: [0xC216], NFC: [0xC216], NFD: [0x1109, 0x116D, 0x11C1], NFKC: [0xC216], NFKD: [0x1109, 0x116D, 0x11C1] }, +{ source: [0xC217], NFC: [0xC217], NFD: [0x1109, 0x116D, 0x11C2], NFKC: [0xC217], NFKD: [0x1109, 0x116D, 0x11C2] }, +{ source: [0xC218], NFC: [0xC218], NFD: [0x1109, 0x116E], NFKC: [0xC218], NFKD: [0x1109, 0x116E] }, +{ source: [0xC219], NFC: [0xC219], NFD: [0x1109, 0x116E, 0x11A8], NFKC: [0xC219], NFKD: [0x1109, 0x116E, 0x11A8] }, +{ source: [0xC21A], NFC: [0xC21A], NFD: [0x1109, 0x116E, 0x11A9], NFKC: [0xC21A], NFKD: [0x1109, 0x116E, 0x11A9] }, +{ source: [0xC21B], NFC: [0xC21B], NFD: [0x1109, 0x116E, 0x11AA], NFKC: [0xC21B], NFKD: [0x1109, 0x116E, 0x11AA] }, +{ source: [0xC21C], NFC: [0xC21C], NFD: [0x1109, 0x116E, 0x11AB], NFKC: [0xC21C], NFKD: [0x1109, 0x116E, 0x11AB] }, +{ source: [0xC21D], NFC: [0xC21D], NFD: [0x1109, 0x116E, 0x11AC], NFKC: [0xC21D], NFKD: [0x1109, 0x116E, 0x11AC] }, +{ source: [0xC21E], NFC: [0xC21E], NFD: [0x1109, 0x116E, 0x11AD], NFKC: [0xC21E], NFKD: [0x1109, 0x116E, 0x11AD] }, +{ source: [0xC21F], NFC: [0xC21F], NFD: [0x1109, 0x116E, 0x11AE], NFKC: [0xC21F], NFKD: [0x1109, 0x116E, 0x11AE] }, +{ source: [0xC220], NFC: [0xC220], NFD: [0x1109, 0x116E, 0x11AF], NFKC: [0xC220], NFKD: [0x1109, 0x116E, 0x11AF] }, +{ source: [0xC221], NFC: [0xC221], NFD: [0x1109, 0x116E, 0x11B0], NFKC: [0xC221], NFKD: [0x1109, 0x116E, 0x11B0] }, +{ source: [0xC222], NFC: [0xC222], NFD: [0x1109, 0x116E, 0x11B1], NFKC: [0xC222], NFKD: [0x1109, 0x116E, 0x11B1] }, +{ source: [0xC223], NFC: [0xC223], NFD: [0x1109, 0x116E, 0x11B2], NFKC: [0xC223], NFKD: [0x1109, 0x116E, 0x11B2] }, +{ source: [0xC224], NFC: [0xC224], NFD: [0x1109, 0x116E, 0x11B3], NFKC: [0xC224], NFKD: [0x1109, 0x116E, 0x11B3] }, +{ source: [0xC225], NFC: [0xC225], NFD: [0x1109, 0x116E, 0x11B4], NFKC: [0xC225], NFKD: [0x1109, 0x116E, 0x11B4] }, +{ source: [0xC226], NFC: [0xC226], NFD: [0x1109, 0x116E, 0x11B5], NFKC: [0xC226], NFKD: [0x1109, 0x116E, 0x11B5] }, +{ source: [0xC227], NFC: [0xC227], NFD: [0x1109, 0x116E, 0x11B6], NFKC: [0xC227], NFKD: [0x1109, 0x116E, 0x11B6] }, +{ source: [0xC228], NFC: [0xC228], NFD: [0x1109, 0x116E, 0x11B7], NFKC: [0xC228], NFKD: [0x1109, 0x116E, 0x11B7] }, +{ source: [0xC229], NFC: [0xC229], NFD: [0x1109, 0x116E, 0x11B8], NFKC: [0xC229], NFKD: [0x1109, 0x116E, 0x11B8] }, +{ source: [0xC22A], NFC: [0xC22A], NFD: [0x1109, 0x116E, 0x11B9], NFKC: [0xC22A], NFKD: [0x1109, 0x116E, 0x11B9] }, +{ source: [0xC22B], NFC: [0xC22B], NFD: [0x1109, 0x116E, 0x11BA], NFKC: [0xC22B], NFKD: [0x1109, 0x116E, 0x11BA] }, +{ source: [0xC22C], NFC: [0xC22C], NFD: [0x1109, 0x116E, 0x11BB], NFKC: [0xC22C], NFKD: [0x1109, 0x116E, 0x11BB] }, +{ source: [0xC22D], NFC: [0xC22D], NFD: [0x1109, 0x116E, 0x11BC], NFKC: [0xC22D], NFKD: [0x1109, 0x116E, 0x11BC] }, +{ source: [0xC22E], NFC: [0xC22E], NFD: [0x1109, 0x116E, 0x11BD], NFKC: [0xC22E], NFKD: [0x1109, 0x116E, 0x11BD] }, +{ source: [0xC22F], NFC: [0xC22F], NFD: [0x1109, 0x116E, 0x11BE], NFKC: [0xC22F], NFKD: [0x1109, 0x116E, 0x11BE] }, +{ source: [0xC230], NFC: [0xC230], NFD: [0x1109, 0x116E, 0x11BF], NFKC: [0xC230], NFKD: [0x1109, 0x116E, 0x11BF] }, +{ source: [0xC231], NFC: [0xC231], NFD: [0x1109, 0x116E, 0x11C0], NFKC: [0xC231], NFKD: [0x1109, 0x116E, 0x11C0] }, +{ source: [0xC232], NFC: [0xC232], NFD: [0x1109, 0x116E, 0x11C1], NFKC: [0xC232], NFKD: [0x1109, 0x116E, 0x11C1] }, +{ source: [0xC233], NFC: [0xC233], NFD: [0x1109, 0x116E, 0x11C2], NFKC: [0xC233], NFKD: [0x1109, 0x116E, 0x11C2] }, +{ source: [0xC234], NFC: [0xC234], NFD: [0x1109, 0x116F], NFKC: [0xC234], NFKD: [0x1109, 0x116F] }, +{ source: [0xC235], NFC: [0xC235], NFD: [0x1109, 0x116F, 0x11A8], NFKC: [0xC235], NFKD: [0x1109, 0x116F, 0x11A8] }, +{ source: [0xC236], NFC: [0xC236], NFD: [0x1109, 0x116F, 0x11A9], NFKC: [0xC236], NFKD: [0x1109, 0x116F, 0x11A9] }, +{ source: [0xC237], NFC: [0xC237], NFD: [0x1109, 0x116F, 0x11AA], NFKC: [0xC237], NFKD: [0x1109, 0x116F, 0x11AA] }, +{ source: [0xC238], NFC: [0xC238], NFD: [0x1109, 0x116F, 0x11AB], NFKC: [0xC238], NFKD: [0x1109, 0x116F, 0x11AB] }, +{ source: [0xC239], NFC: [0xC239], NFD: [0x1109, 0x116F, 0x11AC], NFKC: [0xC239], NFKD: [0x1109, 0x116F, 0x11AC] }, +{ source: [0xC23A], NFC: [0xC23A], NFD: [0x1109, 0x116F, 0x11AD], NFKC: [0xC23A], NFKD: [0x1109, 0x116F, 0x11AD] }, +{ source: [0xC23B], NFC: [0xC23B], NFD: [0x1109, 0x116F, 0x11AE], NFKC: [0xC23B], NFKD: [0x1109, 0x116F, 0x11AE] }, +{ source: [0xC23C], NFC: [0xC23C], NFD: [0x1109, 0x116F, 0x11AF], NFKC: [0xC23C], NFKD: [0x1109, 0x116F, 0x11AF] }, +{ source: [0xC23D], NFC: [0xC23D], NFD: [0x1109, 0x116F, 0x11B0], NFKC: [0xC23D], NFKD: [0x1109, 0x116F, 0x11B0] }, +{ source: [0xC23E], NFC: [0xC23E], NFD: [0x1109, 0x116F, 0x11B1], NFKC: [0xC23E], NFKD: [0x1109, 0x116F, 0x11B1] }, +{ source: [0xC23F], NFC: [0xC23F], NFD: [0x1109, 0x116F, 0x11B2], NFKC: [0xC23F], NFKD: [0x1109, 0x116F, 0x11B2] }, +{ source: [0xC240], NFC: [0xC240], NFD: [0x1109, 0x116F, 0x11B3], NFKC: [0xC240], NFKD: [0x1109, 0x116F, 0x11B3] }, +{ source: [0xC241], NFC: [0xC241], NFD: [0x1109, 0x116F, 0x11B4], NFKC: [0xC241], NFKD: [0x1109, 0x116F, 0x11B4] }, +{ source: [0xC242], NFC: [0xC242], NFD: [0x1109, 0x116F, 0x11B5], NFKC: [0xC242], NFKD: [0x1109, 0x116F, 0x11B5] }, +{ source: [0xC243], NFC: [0xC243], NFD: [0x1109, 0x116F, 0x11B6], NFKC: [0xC243], NFKD: [0x1109, 0x116F, 0x11B6] }, +{ source: [0xC244], NFC: [0xC244], NFD: [0x1109, 0x116F, 0x11B7], NFKC: [0xC244], NFKD: [0x1109, 0x116F, 0x11B7] }, +{ source: [0xC245], NFC: [0xC245], NFD: [0x1109, 0x116F, 0x11B8], NFKC: [0xC245], NFKD: [0x1109, 0x116F, 0x11B8] }, +{ source: [0xC246], NFC: [0xC246], NFD: [0x1109, 0x116F, 0x11B9], NFKC: [0xC246], NFKD: [0x1109, 0x116F, 0x11B9] }, +{ source: [0xC247], NFC: [0xC247], NFD: [0x1109, 0x116F, 0x11BA], NFKC: [0xC247], NFKD: [0x1109, 0x116F, 0x11BA] }, +{ source: [0xC248], NFC: [0xC248], NFD: [0x1109, 0x116F, 0x11BB], NFKC: [0xC248], NFKD: [0x1109, 0x116F, 0x11BB] }, +{ source: [0xC249], NFC: [0xC249], NFD: [0x1109, 0x116F, 0x11BC], NFKC: [0xC249], NFKD: [0x1109, 0x116F, 0x11BC] }, +{ source: [0xC24A], NFC: [0xC24A], NFD: [0x1109, 0x116F, 0x11BD], NFKC: [0xC24A], NFKD: [0x1109, 0x116F, 0x11BD] }, +{ source: [0xC24B], NFC: [0xC24B], NFD: [0x1109, 0x116F, 0x11BE], NFKC: [0xC24B], NFKD: [0x1109, 0x116F, 0x11BE] }, +{ source: [0xC24C], NFC: [0xC24C], NFD: [0x1109, 0x116F, 0x11BF], NFKC: [0xC24C], NFKD: [0x1109, 0x116F, 0x11BF] }, +{ source: [0xC24D], NFC: [0xC24D], NFD: [0x1109, 0x116F, 0x11C0], NFKC: [0xC24D], NFKD: [0x1109, 0x116F, 0x11C0] }, +{ source: [0xC24E], NFC: [0xC24E], NFD: [0x1109, 0x116F, 0x11C1], NFKC: [0xC24E], NFKD: [0x1109, 0x116F, 0x11C1] }, +{ source: [0xC24F], NFC: [0xC24F], NFD: [0x1109, 0x116F, 0x11C2], NFKC: [0xC24F], NFKD: [0x1109, 0x116F, 0x11C2] }, +{ source: [0xC250], NFC: [0xC250], NFD: [0x1109, 0x1170], NFKC: [0xC250], NFKD: [0x1109, 0x1170] }, +{ source: [0xC251], NFC: [0xC251], NFD: [0x1109, 0x1170, 0x11A8], NFKC: [0xC251], NFKD: [0x1109, 0x1170, 0x11A8] }, +{ source: [0xC252], NFC: [0xC252], NFD: [0x1109, 0x1170, 0x11A9], NFKC: [0xC252], NFKD: [0x1109, 0x1170, 0x11A9] }, +{ source: [0xC253], NFC: [0xC253], NFD: [0x1109, 0x1170, 0x11AA], NFKC: [0xC253], NFKD: [0x1109, 0x1170, 0x11AA] }, +{ source: [0xC254], NFC: [0xC254], NFD: [0x1109, 0x1170, 0x11AB], NFKC: [0xC254], NFKD: [0x1109, 0x1170, 0x11AB] }, +{ source: [0xC255], NFC: [0xC255], NFD: [0x1109, 0x1170, 0x11AC], NFKC: [0xC255], NFKD: [0x1109, 0x1170, 0x11AC] }, +{ source: [0xC256], NFC: [0xC256], NFD: [0x1109, 0x1170, 0x11AD], NFKC: [0xC256], NFKD: [0x1109, 0x1170, 0x11AD] }, +{ source: [0xC257], NFC: [0xC257], NFD: [0x1109, 0x1170, 0x11AE], NFKC: [0xC257], NFKD: [0x1109, 0x1170, 0x11AE] }, +{ source: [0xC258], NFC: [0xC258], NFD: [0x1109, 0x1170, 0x11AF], NFKC: [0xC258], NFKD: [0x1109, 0x1170, 0x11AF] }, +{ source: [0xC259], NFC: [0xC259], NFD: [0x1109, 0x1170, 0x11B0], NFKC: [0xC259], NFKD: [0x1109, 0x1170, 0x11B0] }, +{ source: [0xC25A], NFC: [0xC25A], NFD: [0x1109, 0x1170, 0x11B1], NFKC: [0xC25A], NFKD: [0x1109, 0x1170, 0x11B1] }, +{ source: [0xC25B], NFC: [0xC25B], NFD: [0x1109, 0x1170, 0x11B2], NFKC: [0xC25B], NFKD: [0x1109, 0x1170, 0x11B2] }, +{ source: [0xC25C], NFC: [0xC25C], NFD: [0x1109, 0x1170, 0x11B3], NFKC: [0xC25C], NFKD: [0x1109, 0x1170, 0x11B3] }, +{ source: [0xC25D], NFC: [0xC25D], NFD: [0x1109, 0x1170, 0x11B4], NFKC: [0xC25D], NFKD: [0x1109, 0x1170, 0x11B4] }, +{ source: [0xC25E], NFC: [0xC25E], NFD: [0x1109, 0x1170, 0x11B5], NFKC: [0xC25E], NFKD: [0x1109, 0x1170, 0x11B5] }, +{ source: [0xC25F], NFC: [0xC25F], NFD: [0x1109, 0x1170, 0x11B6], NFKC: [0xC25F], NFKD: [0x1109, 0x1170, 0x11B6] }, +{ source: [0xC260], NFC: [0xC260], NFD: [0x1109, 0x1170, 0x11B7], NFKC: [0xC260], NFKD: [0x1109, 0x1170, 0x11B7] }, +{ source: [0xC261], NFC: [0xC261], NFD: [0x1109, 0x1170, 0x11B8], NFKC: [0xC261], NFKD: [0x1109, 0x1170, 0x11B8] }, +{ source: [0xC262], NFC: [0xC262], NFD: [0x1109, 0x1170, 0x11B9], NFKC: [0xC262], NFKD: [0x1109, 0x1170, 0x11B9] }, +{ source: [0xC263], NFC: [0xC263], NFD: [0x1109, 0x1170, 0x11BA], NFKC: [0xC263], NFKD: [0x1109, 0x1170, 0x11BA] }, +{ source: [0xC264], NFC: [0xC264], NFD: [0x1109, 0x1170, 0x11BB], NFKC: [0xC264], NFKD: [0x1109, 0x1170, 0x11BB] }, +{ source: [0xC265], NFC: [0xC265], NFD: [0x1109, 0x1170, 0x11BC], NFKC: [0xC265], NFKD: [0x1109, 0x1170, 0x11BC] }, +{ source: [0xC266], NFC: [0xC266], NFD: [0x1109, 0x1170, 0x11BD], NFKC: [0xC266], NFKD: [0x1109, 0x1170, 0x11BD] }, +{ source: [0xC267], NFC: [0xC267], NFD: [0x1109, 0x1170, 0x11BE], NFKC: [0xC267], NFKD: [0x1109, 0x1170, 0x11BE] }, +{ source: [0xC268], NFC: [0xC268], NFD: [0x1109, 0x1170, 0x11BF], NFKC: [0xC268], NFKD: [0x1109, 0x1170, 0x11BF] }, +{ source: [0xC269], NFC: [0xC269], NFD: [0x1109, 0x1170, 0x11C0], NFKC: [0xC269], NFKD: [0x1109, 0x1170, 0x11C0] }, +{ source: [0xC26A], NFC: [0xC26A], NFD: [0x1109, 0x1170, 0x11C1], NFKC: [0xC26A], NFKD: [0x1109, 0x1170, 0x11C1] }, +{ source: [0xC26B], NFC: [0xC26B], NFD: [0x1109, 0x1170, 0x11C2], NFKC: [0xC26B], NFKD: [0x1109, 0x1170, 0x11C2] }, +{ source: [0xC26C], NFC: [0xC26C], NFD: [0x1109, 0x1171], NFKC: [0xC26C], NFKD: [0x1109, 0x1171] }, +{ source: [0xC26D], NFC: [0xC26D], NFD: [0x1109, 0x1171, 0x11A8], NFKC: [0xC26D], NFKD: [0x1109, 0x1171, 0x11A8] }, +{ source: [0xC26E], NFC: [0xC26E], NFD: [0x1109, 0x1171, 0x11A9], NFKC: [0xC26E], NFKD: [0x1109, 0x1171, 0x11A9] }, +{ source: [0xC26F], NFC: [0xC26F], NFD: [0x1109, 0x1171, 0x11AA], NFKC: [0xC26F], NFKD: [0x1109, 0x1171, 0x11AA] }, +{ source: [0xC270], NFC: [0xC270], NFD: [0x1109, 0x1171, 0x11AB], NFKC: [0xC270], NFKD: [0x1109, 0x1171, 0x11AB] }, +{ source: [0xC271], NFC: [0xC271], NFD: [0x1109, 0x1171, 0x11AC], NFKC: [0xC271], NFKD: [0x1109, 0x1171, 0x11AC] }, +{ source: [0xC272], NFC: [0xC272], NFD: [0x1109, 0x1171, 0x11AD], NFKC: [0xC272], NFKD: [0x1109, 0x1171, 0x11AD] }, +{ source: [0xC273], NFC: [0xC273], NFD: [0x1109, 0x1171, 0x11AE], NFKC: [0xC273], NFKD: [0x1109, 0x1171, 0x11AE] }, +{ source: [0xC274], NFC: [0xC274], NFD: [0x1109, 0x1171, 0x11AF], NFKC: [0xC274], NFKD: [0x1109, 0x1171, 0x11AF] }, +{ source: [0xC275], NFC: [0xC275], NFD: [0x1109, 0x1171, 0x11B0], NFKC: [0xC275], NFKD: [0x1109, 0x1171, 0x11B0] }, +{ source: [0xC276], NFC: [0xC276], NFD: [0x1109, 0x1171, 0x11B1], NFKC: [0xC276], NFKD: [0x1109, 0x1171, 0x11B1] }, +{ source: [0xC277], NFC: [0xC277], NFD: [0x1109, 0x1171, 0x11B2], NFKC: [0xC277], NFKD: [0x1109, 0x1171, 0x11B2] }, +{ source: [0xC278], NFC: [0xC278], NFD: [0x1109, 0x1171, 0x11B3], NFKC: [0xC278], NFKD: [0x1109, 0x1171, 0x11B3] }, +{ source: [0xC279], NFC: [0xC279], NFD: [0x1109, 0x1171, 0x11B4], NFKC: [0xC279], NFKD: [0x1109, 0x1171, 0x11B4] }, +{ source: [0xC27A], NFC: [0xC27A], NFD: [0x1109, 0x1171, 0x11B5], NFKC: [0xC27A], NFKD: [0x1109, 0x1171, 0x11B5] }, +{ source: [0xC27B], NFC: [0xC27B], NFD: [0x1109, 0x1171, 0x11B6], NFKC: [0xC27B], NFKD: [0x1109, 0x1171, 0x11B6] }, +{ source: [0xC27C], NFC: [0xC27C], NFD: [0x1109, 0x1171, 0x11B7], NFKC: [0xC27C], NFKD: [0x1109, 0x1171, 0x11B7] }, +{ source: [0xC27D], NFC: [0xC27D], NFD: [0x1109, 0x1171, 0x11B8], NFKC: [0xC27D], NFKD: [0x1109, 0x1171, 0x11B8] }, +{ source: [0xC27E], NFC: [0xC27E], NFD: [0x1109, 0x1171, 0x11B9], NFKC: [0xC27E], NFKD: [0x1109, 0x1171, 0x11B9] }, +{ source: [0xC27F], NFC: [0xC27F], NFD: [0x1109, 0x1171, 0x11BA], NFKC: [0xC27F], NFKD: [0x1109, 0x1171, 0x11BA] }, +{ source: [0xC280], NFC: [0xC280], NFD: [0x1109, 0x1171, 0x11BB], NFKC: [0xC280], NFKD: [0x1109, 0x1171, 0x11BB] }, +{ source: [0xC281], NFC: [0xC281], NFD: [0x1109, 0x1171, 0x11BC], NFKC: [0xC281], NFKD: [0x1109, 0x1171, 0x11BC] }, +{ source: [0xC282], NFC: [0xC282], NFD: [0x1109, 0x1171, 0x11BD], NFKC: [0xC282], NFKD: [0x1109, 0x1171, 0x11BD] }, +{ source: [0xC283], NFC: [0xC283], NFD: [0x1109, 0x1171, 0x11BE], NFKC: [0xC283], NFKD: [0x1109, 0x1171, 0x11BE] }, +{ source: [0xC284], NFC: [0xC284], NFD: [0x1109, 0x1171, 0x11BF], NFKC: [0xC284], NFKD: [0x1109, 0x1171, 0x11BF] }, +{ source: [0xC285], NFC: [0xC285], NFD: [0x1109, 0x1171, 0x11C0], NFKC: [0xC285], NFKD: [0x1109, 0x1171, 0x11C0] }, +{ source: [0xC286], NFC: [0xC286], NFD: [0x1109, 0x1171, 0x11C1], NFKC: [0xC286], NFKD: [0x1109, 0x1171, 0x11C1] }, +{ source: [0xC287], NFC: [0xC287], NFD: [0x1109, 0x1171, 0x11C2], NFKC: [0xC287], NFKD: [0x1109, 0x1171, 0x11C2] }, +{ source: [0xC288], NFC: [0xC288], NFD: [0x1109, 0x1172], NFKC: [0xC288], NFKD: [0x1109, 0x1172] }, +{ source: [0xC289], NFC: [0xC289], NFD: [0x1109, 0x1172, 0x11A8], NFKC: [0xC289], NFKD: [0x1109, 0x1172, 0x11A8] }, +{ source: [0xC28A], NFC: [0xC28A], NFD: [0x1109, 0x1172, 0x11A9], NFKC: [0xC28A], NFKD: [0x1109, 0x1172, 0x11A9] }, +{ source: [0xC28B], NFC: [0xC28B], NFD: [0x1109, 0x1172, 0x11AA], NFKC: [0xC28B], NFKD: [0x1109, 0x1172, 0x11AA] }, +{ source: [0xC28C], NFC: [0xC28C], NFD: [0x1109, 0x1172, 0x11AB], NFKC: [0xC28C], NFKD: [0x1109, 0x1172, 0x11AB] }, +{ source: [0xC28D], NFC: [0xC28D], NFD: [0x1109, 0x1172, 0x11AC], NFKC: [0xC28D], NFKD: [0x1109, 0x1172, 0x11AC] }, +{ source: [0xC28E], NFC: [0xC28E], NFD: [0x1109, 0x1172, 0x11AD], NFKC: [0xC28E], NFKD: [0x1109, 0x1172, 0x11AD] }, +{ source: [0xC28F], NFC: [0xC28F], NFD: [0x1109, 0x1172, 0x11AE], NFKC: [0xC28F], NFKD: [0x1109, 0x1172, 0x11AE] }, +{ source: [0xC290], NFC: [0xC290], NFD: [0x1109, 0x1172, 0x11AF], NFKC: [0xC290], NFKD: [0x1109, 0x1172, 0x11AF] }, +{ source: [0xC291], NFC: [0xC291], NFD: [0x1109, 0x1172, 0x11B0], NFKC: [0xC291], NFKD: [0x1109, 0x1172, 0x11B0] }, +{ source: [0xC292], NFC: [0xC292], NFD: [0x1109, 0x1172, 0x11B1], NFKC: [0xC292], NFKD: [0x1109, 0x1172, 0x11B1] }, +{ source: [0xC293], NFC: [0xC293], NFD: [0x1109, 0x1172, 0x11B2], NFKC: [0xC293], NFKD: [0x1109, 0x1172, 0x11B2] }, +{ source: [0xC294], NFC: [0xC294], NFD: [0x1109, 0x1172, 0x11B3], NFKC: [0xC294], NFKD: [0x1109, 0x1172, 0x11B3] }, +{ source: [0xC295], NFC: [0xC295], NFD: [0x1109, 0x1172, 0x11B4], NFKC: [0xC295], NFKD: [0x1109, 0x1172, 0x11B4] }, +{ source: [0xC296], NFC: [0xC296], NFD: [0x1109, 0x1172, 0x11B5], NFKC: [0xC296], NFKD: [0x1109, 0x1172, 0x11B5] }, +{ source: [0xC297], NFC: [0xC297], NFD: [0x1109, 0x1172, 0x11B6], NFKC: [0xC297], NFKD: [0x1109, 0x1172, 0x11B6] }, +{ source: [0xC298], NFC: [0xC298], NFD: [0x1109, 0x1172, 0x11B7], NFKC: [0xC298], NFKD: [0x1109, 0x1172, 0x11B7] }, +{ source: [0xC299], NFC: [0xC299], NFD: [0x1109, 0x1172, 0x11B8], NFKC: [0xC299], NFKD: [0x1109, 0x1172, 0x11B8] }, +{ source: [0xC29A], NFC: [0xC29A], NFD: [0x1109, 0x1172, 0x11B9], NFKC: [0xC29A], NFKD: [0x1109, 0x1172, 0x11B9] }, +{ source: [0xC29B], NFC: [0xC29B], NFD: [0x1109, 0x1172, 0x11BA], NFKC: [0xC29B], NFKD: [0x1109, 0x1172, 0x11BA] }, +{ source: [0xC29C], NFC: [0xC29C], NFD: [0x1109, 0x1172, 0x11BB], NFKC: [0xC29C], NFKD: [0x1109, 0x1172, 0x11BB] }, +{ source: [0xC29D], NFC: [0xC29D], NFD: [0x1109, 0x1172, 0x11BC], NFKC: [0xC29D], NFKD: [0x1109, 0x1172, 0x11BC] }, +{ source: [0xC29E], NFC: [0xC29E], NFD: [0x1109, 0x1172, 0x11BD], NFKC: [0xC29E], NFKD: [0x1109, 0x1172, 0x11BD] }, +{ source: [0xC29F], NFC: [0xC29F], NFD: [0x1109, 0x1172, 0x11BE], NFKC: [0xC29F], NFKD: [0x1109, 0x1172, 0x11BE] }, +{ source: [0xC2A0], NFC: [0xC2A0], NFD: [0x1109, 0x1172, 0x11BF], NFKC: [0xC2A0], NFKD: [0x1109, 0x1172, 0x11BF] }, +{ source: [0xC2A1], NFC: [0xC2A1], NFD: [0x1109, 0x1172, 0x11C0], NFKC: [0xC2A1], NFKD: [0x1109, 0x1172, 0x11C0] }, +{ source: [0xC2A2], NFC: [0xC2A2], NFD: [0x1109, 0x1172, 0x11C1], NFKC: [0xC2A2], NFKD: [0x1109, 0x1172, 0x11C1] }, +{ source: [0xC2A3], NFC: [0xC2A3], NFD: [0x1109, 0x1172, 0x11C2], NFKC: [0xC2A3], NFKD: [0x1109, 0x1172, 0x11C2] }, +{ source: [0xC2A4], NFC: [0xC2A4], NFD: [0x1109, 0x1173], NFKC: [0xC2A4], NFKD: [0x1109, 0x1173] }, +{ source: [0xC2A5], NFC: [0xC2A5], NFD: [0x1109, 0x1173, 0x11A8], NFKC: [0xC2A5], NFKD: [0x1109, 0x1173, 0x11A8] }, +{ source: [0xC2A6], NFC: [0xC2A6], NFD: [0x1109, 0x1173, 0x11A9], NFKC: [0xC2A6], NFKD: [0x1109, 0x1173, 0x11A9] }, +{ source: [0xC2A7], NFC: [0xC2A7], NFD: [0x1109, 0x1173, 0x11AA], NFKC: [0xC2A7], NFKD: [0x1109, 0x1173, 0x11AA] }, +{ source: [0xC2A8], NFC: [0xC2A8], NFD: [0x1109, 0x1173, 0x11AB], NFKC: [0xC2A8], NFKD: [0x1109, 0x1173, 0x11AB] }, +{ source: [0xC2A9], NFC: [0xC2A9], NFD: [0x1109, 0x1173, 0x11AC], NFKC: [0xC2A9], NFKD: [0x1109, 0x1173, 0x11AC] }, +{ source: [0xC2AA], NFC: [0xC2AA], NFD: [0x1109, 0x1173, 0x11AD], NFKC: [0xC2AA], NFKD: [0x1109, 0x1173, 0x11AD] }, +{ source: [0xC2AB], NFC: [0xC2AB], NFD: [0x1109, 0x1173, 0x11AE], NFKC: [0xC2AB], NFKD: [0x1109, 0x1173, 0x11AE] }, +{ source: [0xC2AC], NFC: [0xC2AC], NFD: [0x1109, 0x1173, 0x11AF], NFKC: [0xC2AC], NFKD: [0x1109, 0x1173, 0x11AF] }, +{ source: [0xC2AD], NFC: [0xC2AD], NFD: [0x1109, 0x1173, 0x11B0], NFKC: [0xC2AD], NFKD: [0x1109, 0x1173, 0x11B0] }, +{ source: [0xC2AE], NFC: [0xC2AE], NFD: [0x1109, 0x1173, 0x11B1], NFKC: [0xC2AE], NFKD: [0x1109, 0x1173, 0x11B1] }, +{ source: [0xC2AF], NFC: [0xC2AF], NFD: [0x1109, 0x1173, 0x11B2], NFKC: [0xC2AF], NFKD: [0x1109, 0x1173, 0x11B2] }, +{ source: [0xC2B0], NFC: [0xC2B0], NFD: [0x1109, 0x1173, 0x11B3], NFKC: [0xC2B0], NFKD: [0x1109, 0x1173, 0x11B3] }, +{ source: [0xC2B1], NFC: [0xC2B1], NFD: [0x1109, 0x1173, 0x11B4], NFKC: [0xC2B1], NFKD: [0x1109, 0x1173, 0x11B4] }, +{ source: [0xC2B2], NFC: [0xC2B2], NFD: [0x1109, 0x1173, 0x11B5], NFKC: [0xC2B2], NFKD: [0x1109, 0x1173, 0x11B5] }, +{ source: [0xC2B3], NFC: [0xC2B3], NFD: [0x1109, 0x1173, 0x11B6], NFKC: [0xC2B3], NFKD: [0x1109, 0x1173, 0x11B6] }, +{ source: [0xC2B4], NFC: [0xC2B4], NFD: [0x1109, 0x1173, 0x11B7], NFKC: [0xC2B4], NFKD: [0x1109, 0x1173, 0x11B7] }, +{ source: [0xC2B5], NFC: [0xC2B5], NFD: [0x1109, 0x1173, 0x11B8], NFKC: [0xC2B5], NFKD: [0x1109, 0x1173, 0x11B8] }, +{ source: [0xC2B6], NFC: [0xC2B6], NFD: [0x1109, 0x1173, 0x11B9], NFKC: [0xC2B6], NFKD: [0x1109, 0x1173, 0x11B9] }, +{ source: [0xC2B7], NFC: [0xC2B7], NFD: [0x1109, 0x1173, 0x11BA], NFKC: [0xC2B7], NFKD: [0x1109, 0x1173, 0x11BA] }, +{ source: [0xC2B8], NFC: [0xC2B8], NFD: [0x1109, 0x1173, 0x11BB], NFKC: [0xC2B8], NFKD: [0x1109, 0x1173, 0x11BB] }, +{ source: [0xC2B9], NFC: [0xC2B9], NFD: [0x1109, 0x1173, 0x11BC], NFKC: [0xC2B9], NFKD: [0x1109, 0x1173, 0x11BC] }, +{ source: [0xC2BA], NFC: [0xC2BA], NFD: [0x1109, 0x1173, 0x11BD], NFKC: [0xC2BA], NFKD: [0x1109, 0x1173, 0x11BD] }, +{ source: [0xC2BB], NFC: [0xC2BB], NFD: [0x1109, 0x1173, 0x11BE], NFKC: [0xC2BB], NFKD: [0x1109, 0x1173, 0x11BE] }, +{ source: [0xC2BC], NFC: [0xC2BC], NFD: [0x1109, 0x1173, 0x11BF], NFKC: [0xC2BC], NFKD: [0x1109, 0x1173, 0x11BF] }, +{ source: [0xC2BD], NFC: [0xC2BD], NFD: [0x1109, 0x1173, 0x11C0], NFKC: [0xC2BD], NFKD: [0x1109, 0x1173, 0x11C0] }, +{ source: [0xC2BE], NFC: [0xC2BE], NFD: [0x1109, 0x1173, 0x11C1], NFKC: [0xC2BE], NFKD: [0x1109, 0x1173, 0x11C1] }, +{ source: [0xC2BF], NFC: [0xC2BF], NFD: [0x1109, 0x1173, 0x11C2], NFKC: [0xC2BF], NFKD: [0x1109, 0x1173, 0x11C2] }, +{ source: [0xC2C0], NFC: [0xC2C0], NFD: [0x1109, 0x1174], NFKC: [0xC2C0], NFKD: [0x1109, 0x1174] }, +{ source: [0xC2C1], NFC: [0xC2C1], NFD: [0x1109, 0x1174, 0x11A8], NFKC: [0xC2C1], NFKD: [0x1109, 0x1174, 0x11A8] }, +{ source: [0xC2C2], NFC: [0xC2C2], NFD: [0x1109, 0x1174, 0x11A9], NFKC: [0xC2C2], NFKD: [0x1109, 0x1174, 0x11A9] }, +{ source: [0xC2C3], NFC: [0xC2C3], NFD: [0x1109, 0x1174, 0x11AA], NFKC: [0xC2C3], NFKD: [0x1109, 0x1174, 0x11AA] }, +{ source: [0xC2C4], NFC: [0xC2C4], NFD: [0x1109, 0x1174, 0x11AB], NFKC: [0xC2C4], NFKD: [0x1109, 0x1174, 0x11AB] }, +{ source: [0xC2C5], NFC: [0xC2C5], NFD: [0x1109, 0x1174, 0x11AC], NFKC: [0xC2C5], NFKD: [0x1109, 0x1174, 0x11AC] }, +{ source: [0xC2C6], NFC: [0xC2C6], NFD: [0x1109, 0x1174, 0x11AD], NFKC: [0xC2C6], NFKD: [0x1109, 0x1174, 0x11AD] }, +{ source: [0xC2C7], NFC: [0xC2C7], NFD: [0x1109, 0x1174, 0x11AE], NFKC: [0xC2C7], NFKD: [0x1109, 0x1174, 0x11AE] }, +{ source: [0xC2C8], NFC: [0xC2C8], NFD: [0x1109, 0x1174, 0x11AF], NFKC: [0xC2C8], NFKD: [0x1109, 0x1174, 0x11AF] }, +{ source: [0xC2C9], NFC: [0xC2C9], NFD: [0x1109, 0x1174, 0x11B0], NFKC: [0xC2C9], NFKD: [0x1109, 0x1174, 0x11B0] }, +{ source: [0xC2CA], NFC: [0xC2CA], NFD: [0x1109, 0x1174, 0x11B1], NFKC: [0xC2CA], NFKD: [0x1109, 0x1174, 0x11B1] }, +{ source: [0xC2CB], NFC: [0xC2CB], NFD: [0x1109, 0x1174, 0x11B2], NFKC: [0xC2CB], NFKD: [0x1109, 0x1174, 0x11B2] }, +{ source: [0xC2CC], NFC: [0xC2CC], NFD: [0x1109, 0x1174, 0x11B3], NFKC: [0xC2CC], NFKD: [0x1109, 0x1174, 0x11B3] }, +{ source: [0xC2CD], NFC: [0xC2CD], NFD: [0x1109, 0x1174, 0x11B4], NFKC: [0xC2CD], NFKD: [0x1109, 0x1174, 0x11B4] }, +{ source: [0xC2CE], NFC: [0xC2CE], NFD: [0x1109, 0x1174, 0x11B5], NFKC: [0xC2CE], NFKD: [0x1109, 0x1174, 0x11B5] }, +{ source: [0xC2CF], NFC: [0xC2CF], NFD: [0x1109, 0x1174, 0x11B6], NFKC: [0xC2CF], NFKD: [0x1109, 0x1174, 0x11B6] }, +{ source: [0xC2D0], NFC: [0xC2D0], NFD: [0x1109, 0x1174, 0x11B7], NFKC: [0xC2D0], NFKD: [0x1109, 0x1174, 0x11B7] }, +{ source: [0xC2D1], NFC: [0xC2D1], NFD: [0x1109, 0x1174, 0x11B8], NFKC: [0xC2D1], NFKD: [0x1109, 0x1174, 0x11B8] }, +{ source: [0xC2D2], NFC: [0xC2D2], NFD: [0x1109, 0x1174, 0x11B9], NFKC: [0xC2D2], NFKD: [0x1109, 0x1174, 0x11B9] }, +{ source: [0xC2D3], NFC: [0xC2D3], NFD: [0x1109, 0x1174, 0x11BA], NFKC: [0xC2D3], NFKD: [0x1109, 0x1174, 0x11BA] }, +{ source: [0xC2D4], NFC: [0xC2D4], NFD: [0x1109, 0x1174, 0x11BB], NFKC: [0xC2D4], NFKD: [0x1109, 0x1174, 0x11BB] }, +{ source: [0xC2D5], NFC: [0xC2D5], NFD: [0x1109, 0x1174, 0x11BC], NFKC: [0xC2D5], NFKD: [0x1109, 0x1174, 0x11BC] }, +{ source: [0xC2D6], NFC: [0xC2D6], NFD: [0x1109, 0x1174, 0x11BD], NFKC: [0xC2D6], NFKD: [0x1109, 0x1174, 0x11BD] }, +{ source: [0xC2D7], NFC: [0xC2D7], NFD: [0x1109, 0x1174, 0x11BE], NFKC: [0xC2D7], NFKD: [0x1109, 0x1174, 0x11BE] }, +{ source: [0xC2D8], NFC: [0xC2D8], NFD: [0x1109, 0x1174, 0x11BF], NFKC: [0xC2D8], NFKD: [0x1109, 0x1174, 0x11BF] }, +{ source: [0xC2D9], NFC: [0xC2D9], NFD: [0x1109, 0x1174, 0x11C0], NFKC: [0xC2D9], NFKD: [0x1109, 0x1174, 0x11C0] }, +{ source: [0xC2DA], NFC: [0xC2DA], NFD: [0x1109, 0x1174, 0x11C1], NFKC: [0xC2DA], NFKD: [0x1109, 0x1174, 0x11C1] }, +{ source: [0xC2DB], NFC: [0xC2DB], NFD: [0x1109, 0x1174, 0x11C2], NFKC: [0xC2DB], NFKD: [0x1109, 0x1174, 0x11C2] }, +{ source: [0xC2DC], NFC: [0xC2DC], NFD: [0x1109, 0x1175], NFKC: [0xC2DC], NFKD: [0x1109, 0x1175] }, +{ source: [0xC2DD], NFC: [0xC2DD], NFD: [0x1109, 0x1175, 0x11A8], NFKC: [0xC2DD], NFKD: [0x1109, 0x1175, 0x11A8] }, +{ source: [0xC2DE], NFC: [0xC2DE], NFD: [0x1109, 0x1175, 0x11A9], NFKC: [0xC2DE], NFKD: [0x1109, 0x1175, 0x11A9] }, +{ source: [0xC2DF], NFC: [0xC2DF], NFD: [0x1109, 0x1175, 0x11AA], NFKC: [0xC2DF], NFKD: [0x1109, 0x1175, 0x11AA] }, +{ source: [0xC2E0], NFC: [0xC2E0], NFD: [0x1109, 0x1175, 0x11AB], NFKC: [0xC2E0], NFKD: [0x1109, 0x1175, 0x11AB] }, +{ source: [0xC2E1], NFC: [0xC2E1], NFD: [0x1109, 0x1175, 0x11AC], NFKC: [0xC2E1], NFKD: [0x1109, 0x1175, 0x11AC] }, +{ source: [0xC2E2], NFC: [0xC2E2], NFD: [0x1109, 0x1175, 0x11AD], NFKC: [0xC2E2], NFKD: [0x1109, 0x1175, 0x11AD] }, +{ source: [0xC2E3], NFC: [0xC2E3], NFD: [0x1109, 0x1175, 0x11AE], NFKC: [0xC2E3], NFKD: [0x1109, 0x1175, 0x11AE] }, +{ source: [0xC2E4], NFC: [0xC2E4], NFD: [0x1109, 0x1175, 0x11AF], NFKC: [0xC2E4], NFKD: [0x1109, 0x1175, 0x11AF] }, +{ source: [0xC2E5], NFC: [0xC2E5], NFD: [0x1109, 0x1175, 0x11B0], NFKC: [0xC2E5], NFKD: [0x1109, 0x1175, 0x11B0] }, +{ source: [0xC2E6], NFC: [0xC2E6], NFD: [0x1109, 0x1175, 0x11B1], NFKC: [0xC2E6], NFKD: [0x1109, 0x1175, 0x11B1] }, +{ source: [0xC2E7], NFC: [0xC2E7], NFD: [0x1109, 0x1175, 0x11B2], NFKC: [0xC2E7], NFKD: [0x1109, 0x1175, 0x11B2] }, +{ source: [0xC2E8], NFC: [0xC2E8], NFD: [0x1109, 0x1175, 0x11B3], NFKC: [0xC2E8], NFKD: [0x1109, 0x1175, 0x11B3] }, +{ source: [0xC2E9], NFC: [0xC2E9], NFD: [0x1109, 0x1175, 0x11B4], NFKC: [0xC2E9], NFKD: [0x1109, 0x1175, 0x11B4] }, +{ source: [0xC2EA], NFC: [0xC2EA], NFD: [0x1109, 0x1175, 0x11B5], NFKC: [0xC2EA], NFKD: [0x1109, 0x1175, 0x11B5] }, +{ source: [0xC2EB], NFC: [0xC2EB], NFD: [0x1109, 0x1175, 0x11B6], NFKC: [0xC2EB], NFKD: [0x1109, 0x1175, 0x11B6] }, +{ source: [0xC2EC], NFC: [0xC2EC], NFD: [0x1109, 0x1175, 0x11B7], NFKC: [0xC2EC], NFKD: [0x1109, 0x1175, 0x11B7] }, +{ source: [0xC2ED], NFC: [0xC2ED], NFD: [0x1109, 0x1175, 0x11B8], NFKC: [0xC2ED], NFKD: [0x1109, 0x1175, 0x11B8] }, +{ source: [0xC2EE], NFC: [0xC2EE], NFD: [0x1109, 0x1175, 0x11B9], NFKC: [0xC2EE], NFKD: [0x1109, 0x1175, 0x11B9] }, +{ source: [0xC2EF], NFC: [0xC2EF], NFD: [0x1109, 0x1175, 0x11BA], NFKC: [0xC2EF], NFKD: [0x1109, 0x1175, 0x11BA] }, +{ source: [0xC2F0], NFC: [0xC2F0], NFD: [0x1109, 0x1175, 0x11BB], NFKC: [0xC2F0], NFKD: [0x1109, 0x1175, 0x11BB] }, +{ source: [0xC2F1], NFC: [0xC2F1], NFD: [0x1109, 0x1175, 0x11BC], NFKC: [0xC2F1], NFKD: [0x1109, 0x1175, 0x11BC] }, +{ source: [0xC2F2], NFC: [0xC2F2], NFD: [0x1109, 0x1175, 0x11BD], NFKC: [0xC2F2], NFKD: [0x1109, 0x1175, 0x11BD] }, +{ source: [0xC2F3], NFC: [0xC2F3], NFD: [0x1109, 0x1175, 0x11BE], NFKC: [0xC2F3], NFKD: [0x1109, 0x1175, 0x11BE] }, +{ source: [0xC2F4], NFC: [0xC2F4], NFD: [0x1109, 0x1175, 0x11BF], NFKC: [0xC2F4], NFKD: [0x1109, 0x1175, 0x11BF] }, +{ source: [0xC2F5], NFC: [0xC2F5], NFD: [0x1109, 0x1175, 0x11C0], NFKC: [0xC2F5], NFKD: [0x1109, 0x1175, 0x11C0] }, +{ source: [0xC2F6], NFC: [0xC2F6], NFD: [0x1109, 0x1175, 0x11C1], NFKC: [0xC2F6], NFKD: [0x1109, 0x1175, 0x11C1] }, +{ source: [0xC2F7], NFC: [0xC2F7], NFD: [0x1109, 0x1175, 0x11C2], NFKC: [0xC2F7], NFKD: [0x1109, 0x1175, 0x11C2] }, +{ source: [0xC2F8], NFC: [0xC2F8], NFD: [0x110A, 0x1161], NFKC: [0xC2F8], NFKD: [0x110A, 0x1161] }, +{ source: [0xC2F9], NFC: [0xC2F9], NFD: [0x110A, 0x1161, 0x11A8], NFKC: [0xC2F9], NFKD: [0x110A, 0x1161, 0x11A8] }, +{ source: [0xC2FA], NFC: [0xC2FA], NFD: [0x110A, 0x1161, 0x11A9], NFKC: [0xC2FA], NFKD: [0x110A, 0x1161, 0x11A9] }, +{ source: [0xC2FB], NFC: [0xC2FB], NFD: [0x110A, 0x1161, 0x11AA], NFKC: [0xC2FB], NFKD: [0x110A, 0x1161, 0x11AA] }, +{ source: [0xC2FC], NFC: [0xC2FC], NFD: [0x110A, 0x1161, 0x11AB], NFKC: [0xC2FC], NFKD: [0x110A, 0x1161, 0x11AB] }, +{ source: [0xC2FD], NFC: [0xC2FD], NFD: [0x110A, 0x1161, 0x11AC], NFKC: [0xC2FD], NFKD: [0x110A, 0x1161, 0x11AC] }, +{ source: [0xC2FE], NFC: [0xC2FE], NFD: [0x110A, 0x1161, 0x11AD], NFKC: [0xC2FE], NFKD: [0x110A, 0x1161, 0x11AD] }, +{ source: [0xC2FF], NFC: [0xC2FF], NFD: [0x110A, 0x1161, 0x11AE], NFKC: [0xC2FF], NFKD: [0x110A, 0x1161, 0x11AE] }, +{ source: [0xC300], NFC: [0xC300], NFD: [0x110A, 0x1161, 0x11AF], NFKC: [0xC300], NFKD: [0x110A, 0x1161, 0x11AF] }, +{ source: [0xC301], NFC: [0xC301], NFD: [0x110A, 0x1161, 0x11B0], NFKC: [0xC301], NFKD: [0x110A, 0x1161, 0x11B0] }, +{ source: [0xC302], NFC: [0xC302], NFD: [0x110A, 0x1161, 0x11B1], NFKC: [0xC302], NFKD: [0x110A, 0x1161, 0x11B1] }, +{ source: [0xC303], NFC: [0xC303], NFD: [0x110A, 0x1161, 0x11B2], NFKC: [0xC303], NFKD: [0x110A, 0x1161, 0x11B2] }, +{ source: [0xC304], NFC: [0xC304], NFD: [0x110A, 0x1161, 0x11B3], NFKC: [0xC304], NFKD: [0x110A, 0x1161, 0x11B3] }, +{ source: [0xC305], NFC: [0xC305], NFD: [0x110A, 0x1161, 0x11B4], NFKC: [0xC305], NFKD: [0x110A, 0x1161, 0x11B4] }, +{ source: [0xC306], NFC: [0xC306], NFD: [0x110A, 0x1161, 0x11B5], NFKC: [0xC306], NFKD: [0x110A, 0x1161, 0x11B5] }, +{ source: [0xC307], NFC: [0xC307], NFD: [0x110A, 0x1161, 0x11B6], NFKC: [0xC307], NFKD: [0x110A, 0x1161, 0x11B6] }, +{ source: [0xC308], NFC: [0xC308], NFD: [0x110A, 0x1161, 0x11B7], NFKC: [0xC308], NFKD: [0x110A, 0x1161, 0x11B7] }, +{ source: [0xC309], NFC: [0xC309], NFD: [0x110A, 0x1161, 0x11B8], NFKC: [0xC309], NFKD: [0x110A, 0x1161, 0x11B8] }, +{ source: [0xC30A], NFC: [0xC30A], NFD: [0x110A, 0x1161, 0x11B9], NFKC: [0xC30A], NFKD: [0x110A, 0x1161, 0x11B9] }, +{ source: [0xC30B], NFC: [0xC30B], NFD: [0x110A, 0x1161, 0x11BA], NFKC: [0xC30B], NFKD: [0x110A, 0x1161, 0x11BA] }, +{ source: [0xC30C], NFC: [0xC30C], NFD: [0x110A, 0x1161, 0x11BB], NFKC: [0xC30C], NFKD: [0x110A, 0x1161, 0x11BB] }, +{ source: [0xC30D], NFC: [0xC30D], NFD: [0x110A, 0x1161, 0x11BC], NFKC: [0xC30D], NFKD: [0x110A, 0x1161, 0x11BC] }, +{ source: [0xC30E], NFC: [0xC30E], NFD: [0x110A, 0x1161, 0x11BD], NFKC: [0xC30E], NFKD: [0x110A, 0x1161, 0x11BD] }, +{ source: [0xC30F], NFC: [0xC30F], NFD: [0x110A, 0x1161, 0x11BE], NFKC: [0xC30F], NFKD: [0x110A, 0x1161, 0x11BE] }, +{ source: [0xC310], NFC: [0xC310], NFD: [0x110A, 0x1161, 0x11BF], NFKC: [0xC310], NFKD: [0x110A, 0x1161, 0x11BF] }, +{ source: [0xC311], NFC: [0xC311], NFD: [0x110A, 0x1161, 0x11C0], NFKC: [0xC311], NFKD: [0x110A, 0x1161, 0x11C0] }, +{ source: [0xC312], NFC: [0xC312], NFD: [0x110A, 0x1161, 0x11C1], NFKC: [0xC312], NFKD: [0x110A, 0x1161, 0x11C1] }, +{ source: [0xC313], NFC: [0xC313], NFD: [0x110A, 0x1161, 0x11C2], NFKC: [0xC313], NFKD: [0x110A, 0x1161, 0x11C2] }, +{ source: [0xC314], NFC: [0xC314], NFD: [0x110A, 0x1162], NFKC: [0xC314], NFKD: [0x110A, 0x1162] }, +{ source: [0xC315], NFC: [0xC315], NFD: [0x110A, 0x1162, 0x11A8], NFKC: [0xC315], NFKD: [0x110A, 0x1162, 0x11A8] }, +{ source: [0xC316], NFC: [0xC316], NFD: [0x110A, 0x1162, 0x11A9], NFKC: [0xC316], NFKD: [0x110A, 0x1162, 0x11A9] }, +{ source: [0xC317], NFC: [0xC317], NFD: [0x110A, 0x1162, 0x11AA], NFKC: [0xC317], NFKD: [0x110A, 0x1162, 0x11AA] }, +{ source: [0xC318], NFC: [0xC318], NFD: [0x110A, 0x1162, 0x11AB], NFKC: [0xC318], NFKD: [0x110A, 0x1162, 0x11AB] }, +{ source: [0xC319], NFC: [0xC319], NFD: [0x110A, 0x1162, 0x11AC], NFKC: [0xC319], NFKD: [0x110A, 0x1162, 0x11AC] }, +{ source: [0xC31A], NFC: [0xC31A], NFD: [0x110A, 0x1162, 0x11AD], NFKC: [0xC31A], NFKD: [0x110A, 0x1162, 0x11AD] }, +{ source: [0xC31B], NFC: [0xC31B], NFD: [0x110A, 0x1162, 0x11AE], NFKC: [0xC31B], NFKD: [0x110A, 0x1162, 0x11AE] }, +{ source: [0xC31C], NFC: [0xC31C], NFD: [0x110A, 0x1162, 0x11AF], NFKC: [0xC31C], NFKD: [0x110A, 0x1162, 0x11AF] }, +{ source: [0xC31D], NFC: [0xC31D], NFD: [0x110A, 0x1162, 0x11B0], NFKC: [0xC31D], NFKD: [0x110A, 0x1162, 0x11B0] }, +{ source: [0xC31E], NFC: [0xC31E], NFD: [0x110A, 0x1162, 0x11B1], NFKC: [0xC31E], NFKD: [0x110A, 0x1162, 0x11B1] }, +{ source: [0xC31F], NFC: [0xC31F], NFD: [0x110A, 0x1162, 0x11B2], NFKC: [0xC31F], NFKD: [0x110A, 0x1162, 0x11B2] }, +{ source: [0xC320], NFC: [0xC320], NFD: [0x110A, 0x1162, 0x11B3], NFKC: [0xC320], NFKD: [0x110A, 0x1162, 0x11B3] }, +{ source: [0xC321], NFC: [0xC321], NFD: [0x110A, 0x1162, 0x11B4], NFKC: [0xC321], NFKD: [0x110A, 0x1162, 0x11B4] }, +{ source: [0xC322], NFC: [0xC322], NFD: [0x110A, 0x1162, 0x11B5], NFKC: [0xC322], NFKD: [0x110A, 0x1162, 0x11B5] }, +{ source: [0xC323], NFC: [0xC323], NFD: [0x110A, 0x1162, 0x11B6], NFKC: [0xC323], NFKD: [0x110A, 0x1162, 0x11B6] }, +{ source: [0xC324], NFC: [0xC324], NFD: [0x110A, 0x1162, 0x11B7], NFKC: [0xC324], NFKD: [0x110A, 0x1162, 0x11B7] }, +{ source: [0xC325], NFC: [0xC325], NFD: [0x110A, 0x1162, 0x11B8], NFKC: [0xC325], NFKD: [0x110A, 0x1162, 0x11B8] }, +{ source: [0xC326], NFC: [0xC326], NFD: [0x110A, 0x1162, 0x11B9], NFKC: [0xC326], NFKD: [0x110A, 0x1162, 0x11B9] }, +{ source: [0xC327], NFC: [0xC327], NFD: [0x110A, 0x1162, 0x11BA], NFKC: [0xC327], NFKD: [0x110A, 0x1162, 0x11BA] }, +{ source: [0xC328], NFC: [0xC328], NFD: [0x110A, 0x1162, 0x11BB], NFKC: [0xC328], NFKD: [0x110A, 0x1162, 0x11BB] }, +{ source: [0xC329], NFC: [0xC329], NFD: [0x110A, 0x1162, 0x11BC], NFKC: [0xC329], NFKD: [0x110A, 0x1162, 0x11BC] }, +{ source: [0xC32A], NFC: [0xC32A], NFD: [0x110A, 0x1162, 0x11BD], NFKC: [0xC32A], NFKD: [0x110A, 0x1162, 0x11BD] }, +{ source: [0xC32B], NFC: [0xC32B], NFD: [0x110A, 0x1162, 0x11BE], NFKC: [0xC32B], NFKD: [0x110A, 0x1162, 0x11BE] }, +{ source: [0xC32C], NFC: [0xC32C], NFD: [0x110A, 0x1162, 0x11BF], NFKC: [0xC32C], NFKD: [0x110A, 0x1162, 0x11BF] }, +{ source: [0xC32D], NFC: [0xC32D], NFD: [0x110A, 0x1162, 0x11C0], NFKC: [0xC32D], NFKD: [0x110A, 0x1162, 0x11C0] }, +{ source: [0xC32E], NFC: [0xC32E], NFD: [0x110A, 0x1162, 0x11C1], NFKC: [0xC32E], NFKD: [0x110A, 0x1162, 0x11C1] }, +{ source: [0xC32F], NFC: [0xC32F], NFD: [0x110A, 0x1162, 0x11C2], NFKC: [0xC32F], NFKD: [0x110A, 0x1162, 0x11C2] }, +{ source: [0xC330], NFC: [0xC330], NFD: [0x110A, 0x1163], NFKC: [0xC330], NFKD: [0x110A, 0x1163] }, +{ source: [0xC331], NFC: [0xC331], NFD: [0x110A, 0x1163, 0x11A8], NFKC: [0xC331], NFKD: [0x110A, 0x1163, 0x11A8] }, +{ source: [0xC332], NFC: [0xC332], NFD: [0x110A, 0x1163, 0x11A9], NFKC: [0xC332], NFKD: [0x110A, 0x1163, 0x11A9] }, +{ source: [0xC333], NFC: [0xC333], NFD: [0x110A, 0x1163, 0x11AA], NFKC: [0xC333], NFKD: [0x110A, 0x1163, 0x11AA] }, +{ source: [0xC334], NFC: [0xC334], NFD: [0x110A, 0x1163, 0x11AB], NFKC: [0xC334], NFKD: [0x110A, 0x1163, 0x11AB] }, +{ source: [0xC335], NFC: [0xC335], NFD: [0x110A, 0x1163, 0x11AC], NFKC: [0xC335], NFKD: [0x110A, 0x1163, 0x11AC] }, +{ source: [0xC336], NFC: [0xC336], NFD: [0x110A, 0x1163, 0x11AD], NFKC: [0xC336], NFKD: [0x110A, 0x1163, 0x11AD] }, +{ source: [0xC337], NFC: [0xC337], NFD: [0x110A, 0x1163, 0x11AE], NFKC: [0xC337], NFKD: [0x110A, 0x1163, 0x11AE] }, +{ source: [0xC338], NFC: [0xC338], NFD: [0x110A, 0x1163, 0x11AF], NFKC: [0xC338], NFKD: [0x110A, 0x1163, 0x11AF] }, +{ source: [0xC339], NFC: [0xC339], NFD: [0x110A, 0x1163, 0x11B0], NFKC: [0xC339], NFKD: [0x110A, 0x1163, 0x11B0] }, +{ source: [0xC33A], NFC: [0xC33A], NFD: [0x110A, 0x1163, 0x11B1], NFKC: [0xC33A], NFKD: [0x110A, 0x1163, 0x11B1] }, +{ source: [0xC33B], NFC: [0xC33B], NFD: [0x110A, 0x1163, 0x11B2], NFKC: [0xC33B], NFKD: [0x110A, 0x1163, 0x11B2] }, +{ source: [0xC33C], NFC: [0xC33C], NFD: [0x110A, 0x1163, 0x11B3], NFKC: [0xC33C], NFKD: [0x110A, 0x1163, 0x11B3] }, +{ source: [0xC33D], NFC: [0xC33D], NFD: [0x110A, 0x1163, 0x11B4], NFKC: [0xC33D], NFKD: [0x110A, 0x1163, 0x11B4] }, +{ source: [0xC33E], NFC: [0xC33E], NFD: [0x110A, 0x1163, 0x11B5], NFKC: [0xC33E], NFKD: [0x110A, 0x1163, 0x11B5] }, +{ source: [0xC33F], NFC: [0xC33F], NFD: [0x110A, 0x1163, 0x11B6], NFKC: [0xC33F], NFKD: [0x110A, 0x1163, 0x11B6] }, +{ source: [0xC340], NFC: [0xC340], NFD: [0x110A, 0x1163, 0x11B7], NFKC: [0xC340], NFKD: [0x110A, 0x1163, 0x11B7] }, +{ source: [0xC341], NFC: [0xC341], NFD: [0x110A, 0x1163, 0x11B8], NFKC: [0xC341], NFKD: [0x110A, 0x1163, 0x11B8] }, +{ source: [0xC342], NFC: [0xC342], NFD: [0x110A, 0x1163, 0x11B9], NFKC: [0xC342], NFKD: [0x110A, 0x1163, 0x11B9] }, +{ source: [0xC343], NFC: [0xC343], NFD: [0x110A, 0x1163, 0x11BA], NFKC: [0xC343], NFKD: [0x110A, 0x1163, 0x11BA] }, +{ source: [0xC344], NFC: [0xC344], NFD: [0x110A, 0x1163, 0x11BB], NFKC: [0xC344], NFKD: [0x110A, 0x1163, 0x11BB] }, +{ source: [0xC345], NFC: [0xC345], NFD: [0x110A, 0x1163, 0x11BC], NFKC: [0xC345], NFKD: [0x110A, 0x1163, 0x11BC] }, +{ source: [0xC346], NFC: [0xC346], NFD: [0x110A, 0x1163, 0x11BD], NFKC: [0xC346], NFKD: [0x110A, 0x1163, 0x11BD] }, +{ source: [0xC347], NFC: [0xC347], NFD: [0x110A, 0x1163, 0x11BE], NFKC: [0xC347], NFKD: [0x110A, 0x1163, 0x11BE] }, +{ source: [0xC348], NFC: [0xC348], NFD: [0x110A, 0x1163, 0x11BF], NFKC: [0xC348], NFKD: [0x110A, 0x1163, 0x11BF] }, +{ source: [0xC349], NFC: [0xC349], NFD: [0x110A, 0x1163, 0x11C0], NFKC: [0xC349], NFKD: [0x110A, 0x1163, 0x11C0] }, +{ source: [0xC34A], NFC: [0xC34A], NFD: [0x110A, 0x1163, 0x11C1], NFKC: [0xC34A], NFKD: [0x110A, 0x1163, 0x11C1] }, +{ source: [0xC34B], NFC: [0xC34B], NFD: [0x110A, 0x1163, 0x11C2], NFKC: [0xC34B], NFKD: [0x110A, 0x1163, 0x11C2] }, +{ source: [0xC34C], NFC: [0xC34C], NFD: [0x110A, 0x1164], NFKC: [0xC34C], NFKD: [0x110A, 0x1164] }, +{ source: [0xC34D], NFC: [0xC34D], NFD: [0x110A, 0x1164, 0x11A8], NFKC: [0xC34D], NFKD: [0x110A, 0x1164, 0x11A8] }, +{ source: [0xC34E], NFC: [0xC34E], NFD: [0x110A, 0x1164, 0x11A9], NFKC: [0xC34E], NFKD: [0x110A, 0x1164, 0x11A9] }, +{ source: [0xC34F], NFC: [0xC34F], NFD: [0x110A, 0x1164, 0x11AA], NFKC: [0xC34F], NFKD: [0x110A, 0x1164, 0x11AA] }, +{ source: [0xC350], NFC: [0xC350], NFD: [0x110A, 0x1164, 0x11AB], NFKC: [0xC350], NFKD: [0x110A, 0x1164, 0x11AB] }, +{ source: [0xC351], NFC: [0xC351], NFD: [0x110A, 0x1164, 0x11AC], NFKC: [0xC351], NFKD: [0x110A, 0x1164, 0x11AC] }, +{ source: [0xC352], NFC: [0xC352], NFD: [0x110A, 0x1164, 0x11AD], NFKC: [0xC352], NFKD: [0x110A, 0x1164, 0x11AD] }, +{ source: [0xC353], NFC: [0xC353], NFD: [0x110A, 0x1164, 0x11AE], NFKC: [0xC353], NFKD: [0x110A, 0x1164, 0x11AE] }, +{ source: [0xC354], NFC: [0xC354], NFD: [0x110A, 0x1164, 0x11AF], NFKC: [0xC354], NFKD: [0x110A, 0x1164, 0x11AF] }, +{ source: [0xC355], NFC: [0xC355], NFD: [0x110A, 0x1164, 0x11B0], NFKC: [0xC355], NFKD: [0x110A, 0x1164, 0x11B0] }, +{ source: [0xC356], NFC: [0xC356], NFD: [0x110A, 0x1164, 0x11B1], NFKC: [0xC356], NFKD: [0x110A, 0x1164, 0x11B1] }, +{ source: [0xC357], NFC: [0xC357], NFD: [0x110A, 0x1164, 0x11B2], NFKC: [0xC357], NFKD: [0x110A, 0x1164, 0x11B2] }, +{ source: [0xC358], NFC: [0xC358], NFD: [0x110A, 0x1164, 0x11B3], NFKC: [0xC358], NFKD: [0x110A, 0x1164, 0x11B3] }, +{ source: [0xC359], NFC: [0xC359], NFD: [0x110A, 0x1164, 0x11B4], NFKC: [0xC359], NFKD: [0x110A, 0x1164, 0x11B4] }, +{ source: [0xC35A], NFC: [0xC35A], NFD: [0x110A, 0x1164, 0x11B5], NFKC: [0xC35A], NFKD: [0x110A, 0x1164, 0x11B5] }, +{ source: [0xC35B], NFC: [0xC35B], NFD: [0x110A, 0x1164, 0x11B6], NFKC: [0xC35B], NFKD: [0x110A, 0x1164, 0x11B6] }, +{ source: [0xC35C], NFC: [0xC35C], NFD: [0x110A, 0x1164, 0x11B7], NFKC: [0xC35C], NFKD: [0x110A, 0x1164, 0x11B7] }, +{ source: [0xC35D], NFC: [0xC35D], NFD: [0x110A, 0x1164, 0x11B8], NFKC: [0xC35D], NFKD: [0x110A, 0x1164, 0x11B8] }, +{ source: [0xC35E], NFC: [0xC35E], NFD: [0x110A, 0x1164, 0x11B9], NFKC: [0xC35E], NFKD: [0x110A, 0x1164, 0x11B9] }, +{ source: [0xC35F], NFC: [0xC35F], NFD: [0x110A, 0x1164, 0x11BA], NFKC: [0xC35F], NFKD: [0x110A, 0x1164, 0x11BA] }, +{ source: [0xC360], NFC: [0xC360], NFD: [0x110A, 0x1164, 0x11BB], NFKC: [0xC360], NFKD: [0x110A, 0x1164, 0x11BB] }, +{ source: [0xC361], NFC: [0xC361], NFD: [0x110A, 0x1164, 0x11BC], NFKC: [0xC361], NFKD: [0x110A, 0x1164, 0x11BC] }, +{ source: [0xC362], NFC: [0xC362], NFD: [0x110A, 0x1164, 0x11BD], NFKC: [0xC362], NFKD: [0x110A, 0x1164, 0x11BD] }, +{ source: [0xC363], NFC: [0xC363], NFD: [0x110A, 0x1164, 0x11BE], NFKC: [0xC363], NFKD: [0x110A, 0x1164, 0x11BE] }, +{ source: [0xC364], NFC: [0xC364], NFD: [0x110A, 0x1164, 0x11BF], NFKC: [0xC364], NFKD: [0x110A, 0x1164, 0x11BF] }, +{ source: [0xC365], NFC: [0xC365], NFD: [0x110A, 0x1164, 0x11C0], NFKC: [0xC365], NFKD: [0x110A, 0x1164, 0x11C0] }, +{ source: [0xC366], NFC: [0xC366], NFD: [0x110A, 0x1164, 0x11C1], NFKC: [0xC366], NFKD: [0x110A, 0x1164, 0x11C1] }, +{ source: [0xC367], NFC: [0xC367], NFD: [0x110A, 0x1164, 0x11C2], NFKC: [0xC367], NFKD: [0x110A, 0x1164, 0x11C2] }, +{ source: [0xC368], NFC: [0xC368], NFD: [0x110A, 0x1165], NFKC: [0xC368], NFKD: [0x110A, 0x1165] }, +{ source: [0xC369], NFC: [0xC369], NFD: [0x110A, 0x1165, 0x11A8], NFKC: [0xC369], NFKD: [0x110A, 0x1165, 0x11A8] }, +{ source: [0xC36A], NFC: [0xC36A], NFD: [0x110A, 0x1165, 0x11A9], NFKC: [0xC36A], NFKD: [0x110A, 0x1165, 0x11A9] }, +{ source: [0xC36B], NFC: [0xC36B], NFD: [0x110A, 0x1165, 0x11AA], NFKC: [0xC36B], NFKD: [0x110A, 0x1165, 0x11AA] }, +{ source: [0xC36C], NFC: [0xC36C], NFD: [0x110A, 0x1165, 0x11AB], NFKC: [0xC36C], NFKD: [0x110A, 0x1165, 0x11AB] }, +{ source: [0xC36D], NFC: [0xC36D], NFD: [0x110A, 0x1165, 0x11AC], NFKC: [0xC36D], NFKD: [0x110A, 0x1165, 0x11AC] }, +{ source: [0xC36E], NFC: [0xC36E], NFD: [0x110A, 0x1165, 0x11AD], NFKC: [0xC36E], NFKD: [0x110A, 0x1165, 0x11AD] }, +{ source: [0xC36F], NFC: [0xC36F], NFD: [0x110A, 0x1165, 0x11AE], NFKC: [0xC36F], NFKD: [0x110A, 0x1165, 0x11AE] }, +{ source: [0xC370], NFC: [0xC370], NFD: [0x110A, 0x1165, 0x11AF], NFKC: [0xC370], NFKD: [0x110A, 0x1165, 0x11AF] }, +{ source: [0xC371], NFC: [0xC371], NFD: [0x110A, 0x1165, 0x11B0], NFKC: [0xC371], NFKD: [0x110A, 0x1165, 0x11B0] }, +{ source: [0xC372], NFC: [0xC372], NFD: [0x110A, 0x1165, 0x11B1], NFKC: [0xC372], NFKD: [0x110A, 0x1165, 0x11B1] }, +{ source: [0xC373], NFC: [0xC373], NFD: [0x110A, 0x1165, 0x11B2], NFKC: [0xC373], NFKD: [0x110A, 0x1165, 0x11B2] }, +{ source: [0xC374], NFC: [0xC374], NFD: [0x110A, 0x1165, 0x11B3], NFKC: [0xC374], NFKD: [0x110A, 0x1165, 0x11B3] }, +{ source: [0xC375], NFC: [0xC375], NFD: [0x110A, 0x1165, 0x11B4], NFKC: [0xC375], NFKD: [0x110A, 0x1165, 0x11B4] }, +{ source: [0xC376], NFC: [0xC376], NFD: [0x110A, 0x1165, 0x11B5], NFKC: [0xC376], NFKD: [0x110A, 0x1165, 0x11B5] }, +{ source: [0xC377], NFC: [0xC377], NFD: [0x110A, 0x1165, 0x11B6], NFKC: [0xC377], NFKD: [0x110A, 0x1165, 0x11B6] }, +{ source: [0xC378], NFC: [0xC378], NFD: [0x110A, 0x1165, 0x11B7], NFKC: [0xC378], NFKD: [0x110A, 0x1165, 0x11B7] }, +{ source: [0xC379], NFC: [0xC379], NFD: [0x110A, 0x1165, 0x11B8], NFKC: [0xC379], NFKD: [0x110A, 0x1165, 0x11B8] }, +{ source: [0xC37A], NFC: [0xC37A], NFD: [0x110A, 0x1165, 0x11B9], NFKC: [0xC37A], NFKD: [0x110A, 0x1165, 0x11B9] }, +{ source: [0xC37B], NFC: [0xC37B], NFD: [0x110A, 0x1165, 0x11BA], NFKC: [0xC37B], NFKD: [0x110A, 0x1165, 0x11BA] }, +{ source: [0xC37C], NFC: [0xC37C], NFD: [0x110A, 0x1165, 0x11BB], NFKC: [0xC37C], NFKD: [0x110A, 0x1165, 0x11BB] }, +{ source: [0xC37D], NFC: [0xC37D], NFD: [0x110A, 0x1165, 0x11BC], NFKC: [0xC37D], NFKD: [0x110A, 0x1165, 0x11BC] }, +{ source: [0xC37E], NFC: [0xC37E], NFD: [0x110A, 0x1165, 0x11BD], NFKC: [0xC37E], NFKD: [0x110A, 0x1165, 0x11BD] }, +{ source: [0xC37F], NFC: [0xC37F], NFD: [0x110A, 0x1165, 0x11BE], NFKC: [0xC37F], NFKD: [0x110A, 0x1165, 0x11BE] }, +{ source: [0xC380], NFC: [0xC380], NFD: [0x110A, 0x1165, 0x11BF], NFKC: [0xC380], NFKD: [0x110A, 0x1165, 0x11BF] }, +{ source: [0xC381], NFC: [0xC381], NFD: [0x110A, 0x1165, 0x11C0], NFKC: [0xC381], NFKD: [0x110A, 0x1165, 0x11C0] }, +{ source: [0xC382], NFC: [0xC382], NFD: [0x110A, 0x1165, 0x11C1], NFKC: [0xC382], NFKD: [0x110A, 0x1165, 0x11C1] }, +{ source: [0xC383], NFC: [0xC383], NFD: [0x110A, 0x1165, 0x11C2], NFKC: [0xC383], NFKD: [0x110A, 0x1165, 0x11C2] }, +{ source: [0xC384], NFC: [0xC384], NFD: [0x110A, 0x1166], NFKC: [0xC384], NFKD: [0x110A, 0x1166] }, +{ source: [0xC385], NFC: [0xC385], NFD: [0x110A, 0x1166, 0x11A8], NFKC: [0xC385], NFKD: [0x110A, 0x1166, 0x11A8] }, +{ source: [0xC386], NFC: [0xC386], NFD: [0x110A, 0x1166, 0x11A9], NFKC: [0xC386], NFKD: [0x110A, 0x1166, 0x11A9] }, +{ source: [0xC387], NFC: [0xC387], NFD: [0x110A, 0x1166, 0x11AA], NFKC: [0xC387], NFKD: [0x110A, 0x1166, 0x11AA] }, +{ source: [0xC388], NFC: [0xC388], NFD: [0x110A, 0x1166, 0x11AB], NFKC: [0xC388], NFKD: [0x110A, 0x1166, 0x11AB] }, +{ source: [0xC389], NFC: [0xC389], NFD: [0x110A, 0x1166, 0x11AC], NFKC: [0xC389], NFKD: [0x110A, 0x1166, 0x11AC] }, +{ source: [0xC38A], NFC: [0xC38A], NFD: [0x110A, 0x1166, 0x11AD], NFKC: [0xC38A], NFKD: [0x110A, 0x1166, 0x11AD] }, +{ source: [0xC38B], NFC: [0xC38B], NFD: [0x110A, 0x1166, 0x11AE], NFKC: [0xC38B], NFKD: [0x110A, 0x1166, 0x11AE] }, +{ source: [0xC38C], NFC: [0xC38C], NFD: [0x110A, 0x1166, 0x11AF], NFKC: [0xC38C], NFKD: [0x110A, 0x1166, 0x11AF] }, +{ source: [0xC38D], NFC: [0xC38D], NFD: [0x110A, 0x1166, 0x11B0], NFKC: [0xC38D], NFKD: [0x110A, 0x1166, 0x11B0] }, +{ source: [0xC38E], NFC: [0xC38E], NFD: [0x110A, 0x1166, 0x11B1], NFKC: [0xC38E], NFKD: [0x110A, 0x1166, 0x11B1] }, +{ source: [0xC38F], NFC: [0xC38F], NFD: [0x110A, 0x1166, 0x11B2], NFKC: [0xC38F], NFKD: [0x110A, 0x1166, 0x11B2] }, +{ source: [0xC390], NFC: [0xC390], NFD: [0x110A, 0x1166, 0x11B3], NFKC: [0xC390], NFKD: [0x110A, 0x1166, 0x11B3] }, +{ source: [0xC391], NFC: [0xC391], NFD: [0x110A, 0x1166, 0x11B4], NFKC: [0xC391], NFKD: [0x110A, 0x1166, 0x11B4] }, +{ source: [0xC392], NFC: [0xC392], NFD: [0x110A, 0x1166, 0x11B5], NFKC: [0xC392], NFKD: [0x110A, 0x1166, 0x11B5] }, +{ source: [0xC393], NFC: [0xC393], NFD: [0x110A, 0x1166, 0x11B6], NFKC: [0xC393], NFKD: [0x110A, 0x1166, 0x11B6] }, +{ source: [0xC394], NFC: [0xC394], NFD: [0x110A, 0x1166, 0x11B7], NFKC: [0xC394], NFKD: [0x110A, 0x1166, 0x11B7] }, +{ source: [0xC395], NFC: [0xC395], NFD: [0x110A, 0x1166, 0x11B8], NFKC: [0xC395], NFKD: [0x110A, 0x1166, 0x11B8] }, +{ source: [0xC396], NFC: [0xC396], NFD: [0x110A, 0x1166, 0x11B9], NFKC: [0xC396], NFKD: [0x110A, 0x1166, 0x11B9] }, +{ source: [0xC397], NFC: [0xC397], NFD: [0x110A, 0x1166, 0x11BA], NFKC: [0xC397], NFKD: [0x110A, 0x1166, 0x11BA] }, +{ source: [0xC398], NFC: [0xC398], NFD: [0x110A, 0x1166, 0x11BB], NFKC: [0xC398], NFKD: [0x110A, 0x1166, 0x11BB] }, +{ source: [0xC399], NFC: [0xC399], NFD: [0x110A, 0x1166, 0x11BC], NFKC: [0xC399], NFKD: [0x110A, 0x1166, 0x11BC] }, +{ source: [0xC39A], NFC: [0xC39A], NFD: [0x110A, 0x1166, 0x11BD], NFKC: [0xC39A], NFKD: [0x110A, 0x1166, 0x11BD] }, +{ source: [0xC39B], NFC: [0xC39B], NFD: [0x110A, 0x1166, 0x11BE], NFKC: [0xC39B], NFKD: [0x110A, 0x1166, 0x11BE] }, +{ source: [0xC39C], NFC: [0xC39C], NFD: [0x110A, 0x1166, 0x11BF], NFKC: [0xC39C], NFKD: [0x110A, 0x1166, 0x11BF] }, +{ source: [0xC39D], NFC: [0xC39D], NFD: [0x110A, 0x1166, 0x11C0], NFKC: [0xC39D], NFKD: [0x110A, 0x1166, 0x11C0] }, +{ source: [0xC39E], NFC: [0xC39E], NFD: [0x110A, 0x1166, 0x11C1], NFKC: [0xC39E], NFKD: [0x110A, 0x1166, 0x11C1] }, +{ source: [0xC39F], NFC: [0xC39F], NFD: [0x110A, 0x1166, 0x11C2], NFKC: [0xC39F], NFKD: [0x110A, 0x1166, 0x11C2] }, +{ source: [0xC3A0], NFC: [0xC3A0], NFD: [0x110A, 0x1167], NFKC: [0xC3A0], NFKD: [0x110A, 0x1167] }, +{ source: [0xC3A1], NFC: [0xC3A1], NFD: [0x110A, 0x1167, 0x11A8], NFKC: [0xC3A1], NFKD: [0x110A, 0x1167, 0x11A8] }, +{ source: [0xC3A2], NFC: [0xC3A2], NFD: [0x110A, 0x1167, 0x11A9], NFKC: [0xC3A2], NFKD: [0x110A, 0x1167, 0x11A9] }, +{ source: [0xC3A3], NFC: [0xC3A3], NFD: [0x110A, 0x1167, 0x11AA], NFKC: [0xC3A3], NFKD: [0x110A, 0x1167, 0x11AA] }, +{ source: [0xC3A4], NFC: [0xC3A4], NFD: [0x110A, 0x1167, 0x11AB], NFKC: [0xC3A4], NFKD: [0x110A, 0x1167, 0x11AB] }, +{ source: [0xC3A5], NFC: [0xC3A5], NFD: [0x110A, 0x1167, 0x11AC], NFKC: [0xC3A5], NFKD: [0x110A, 0x1167, 0x11AC] }, +{ source: [0xC3A6], NFC: [0xC3A6], NFD: [0x110A, 0x1167, 0x11AD], NFKC: [0xC3A6], NFKD: [0x110A, 0x1167, 0x11AD] }, +{ source: [0xC3A7], NFC: [0xC3A7], NFD: [0x110A, 0x1167, 0x11AE], NFKC: [0xC3A7], NFKD: [0x110A, 0x1167, 0x11AE] }, +{ source: [0xC3A8], NFC: [0xC3A8], NFD: [0x110A, 0x1167, 0x11AF], NFKC: [0xC3A8], NFKD: [0x110A, 0x1167, 0x11AF] }, +{ source: [0xC3A9], NFC: [0xC3A9], NFD: [0x110A, 0x1167, 0x11B0], NFKC: [0xC3A9], NFKD: [0x110A, 0x1167, 0x11B0] }, +{ source: [0xC3AA], NFC: [0xC3AA], NFD: [0x110A, 0x1167, 0x11B1], NFKC: [0xC3AA], NFKD: [0x110A, 0x1167, 0x11B1] }, +{ source: [0xC3AB], NFC: [0xC3AB], NFD: [0x110A, 0x1167, 0x11B2], NFKC: [0xC3AB], NFKD: [0x110A, 0x1167, 0x11B2] }, +{ source: [0xC3AC], NFC: [0xC3AC], NFD: [0x110A, 0x1167, 0x11B3], NFKC: [0xC3AC], NFKD: [0x110A, 0x1167, 0x11B3] }, +{ source: [0xC3AD], NFC: [0xC3AD], NFD: [0x110A, 0x1167, 0x11B4], NFKC: [0xC3AD], NFKD: [0x110A, 0x1167, 0x11B4] }, +{ source: [0xC3AE], NFC: [0xC3AE], NFD: [0x110A, 0x1167, 0x11B5], NFKC: [0xC3AE], NFKD: [0x110A, 0x1167, 0x11B5] }, +{ source: [0xC3AF], NFC: [0xC3AF], NFD: [0x110A, 0x1167, 0x11B6], NFKC: [0xC3AF], NFKD: [0x110A, 0x1167, 0x11B6] }, +{ source: [0xC3B0], NFC: [0xC3B0], NFD: [0x110A, 0x1167, 0x11B7], NFKC: [0xC3B0], NFKD: [0x110A, 0x1167, 0x11B7] }, +{ source: [0xC3B1], NFC: [0xC3B1], NFD: [0x110A, 0x1167, 0x11B8], NFKC: [0xC3B1], NFKD: [0x110A, 0x1167, 0x11B8] }, +{ source: [0xC3B2], NFC: [0xC3B2], NFD: [0x110A, 0x1167, 0x11B9], NFKC: [0xC3B2], NFKD: [0x110A, 0x1167, 0x11B9] }, +{ source: [0xC3B3], NFC: [0xC3B3], NFD: [0x110A, 0x1167, 0x11BA], NFKC: [0xC3B3], NFKD: [0x110A, 0x1167, 0x11BA] }, +{ source: [0xC3B4], NFC: [0xC3B4], NFD: [0x110A, 0x1167, 0x11BB], NFKC: [0xC3B4], NFKD: [0x110A, 0x1167, 0x11BB] }, +{ source: [0xC3B5], NFC: [0xC3B5], NFD: [0x110A, 0x1167, 0x11BC], NFKC: [0xC3B5], NFKD: [0x110A, 0x1167, 0x11BC] }, +{ source: [0xC3B6], NFC: [0xC3B6], NFD: [0x110A, 0x1167, 0x11BD], NFKC: [0xC3B6], NFKD: [0x110A, 0x1167, 0x11BD] }, +{ source: [0xC3B7], NFC: [0xC3B7], NFD: [0x110A, 0x1167, 0x11BE], NFKC: [0xC3B7], NFKD: [0x110A, 0x1167, 0x11BE] }, +{ source: [0xC3B8], NFC: [0xC3B8], NFD: [0x110A, 0x1167, 0x11BF], NFKC: [0xC3B8], NFKD: [0x110A, 0x1167, 0x11BF] }, +{ source: [0xC3B9], NFC: [0xC3B9], NFD: [0x110A, 0x1167, 0x11C0], NFKC: [0xC3B9], NFKD: [0x110A, 0x1167, 0x11C0] }, +{ source: [0xC3BA], NFC: [0xC3BA], NFD: [0x110A, 0x1167, 0x11C1], NFKC: [0xC3BA], NFKD: [0x110A, 0x1167, 0x11C1] }, +{ source: [0xC3BB], NFC: [0xC3BB], NFD: [0x110A, 0x1167, 0x11C2], NFKC: [0xC3BB], NFKD: [0x110A, 0x1167, 0x11C2] }, +{ source: [0xC3BC], NFC: [0xC3BC], NFD: [0x110A, 0x1168], NFKC: [0xC3BC], NFKD: [0x110A, 0x1168] }, +{ source: [0xC3BD], NFC: [0xC3BD], NFD: [0x110A, 0x1168, 0x11A8], NFKC: [0xC3BD], NFKD: [0x110A, 0x1168, 0x11A8] }, +{ source: [0xC3BE], NFC: [0xC3BE], NFD: [0x110A, 0x1168, 0x11A9], NFKC: [0xC3BE], NFKD: [0x110A, 0x1168, 0x11A9] }, +{ source: [0xC3BF], NFC: [0xC3BF], NFD: [0x110A, 0x1168, 0x11AA], NFKC: [0xC3BF], NFKD: [0x110A, 0x1168, 0x11AA] }, +{ source: [0xC3C0], NFC: [0xC3C0], NFD: [0x110A, 0x1168, 0x11AB], NFKC: [0xC3C0], NFKD: [0x110A, 0x1168, 0x11AB] }, +{ source: [0xC3C1], NFC: [0xC3C1], NFD: [0x110A, 0x1168, 0x11AC], NFKC: [0xC3C1], NFKD: [0x110A, 0x1168, 0x11AC] }, +{ source: [0xC3C2], NFC: [0xC3C2], NFD: [0x110A, 0x1168, 0x11AD], NFKC: [0xC3C2], NFKD: [0x110A, 0x1168, 0x11AD] }, +{ source: [0xC3C3], NFC: [0xC3C3], NFD: [0x110A, 0x1168, 0x11AE], NFKC: [0xC3C3], NFKD: [0x110A, 0x1168, 0x11AE] }, +{ source: [0xC3C4], NFC: [0xC3C4], NFD: [0x110A, 0x1168, 0x11AF], NFKC: [0xC3C4], NFKD: [0x110A, 0x1168, 0x11AF] }, +{ source: [0xC3C5], NFC: [0xC3C5], NFD: [0x110A, 0x1168, 0x11B0], NFKC: [0xC3C5], NFKD: [0x110A, 0x1168, 0x11B0] }, +{ source: [0xC3C6], NFC: [0xC3C6], NFD: [0x110A, 0x1168, 0x11B1], NFKC: [0xC3C6], NFKD: [0x110A, 0x1168, 0x11B1] }, +{ source: [0xC3C7], NFC: [0xC3C7], NFD: [0x110A, 0x1168, 0x11B2], NFKC: [0xC3C7], NFKD: [0x110A, 0x1168, 0x11B2] }, +{ source: [0xC3C8], NFC: [0xC3C8], NFD: [0x110A, 0x1168, 0x11B3], NFKC: [0xC3C8], NFKD: [0x110A, 0x1168, 0x11B3] }, +{ source: [0xC3C9], NFC: [0xC3C9], NFD: [0x110A, 0x1168, 0x11B4], NFKC: [0xC3C9], NFKD: [0x110A, 0x1168, 0x11B4] }, +{ source: [0xC3CA], NFC: [0xC3CA], NFD: [0x110A, 0x1168, 0x11B5], NFKC: [0xC3CA], NFKD: [0x110A, 0x1168, 0x11B5] }, +{ source: [0xC3CB], NFC: [0xC3CB], NFD: [0x110A, 0x1168, 0x11B6], NFKC: [0xC3CB], NFKD: [0x110A, 0x1168, 0x11B6] }, +{ source: [0xC3CC], NFC: [0xC3CC], NFD: [0x110A, 0x1168, 0x11B7], NFKC: [0xC3CC], NFKD: [0x110A, 0x1168, 0x11B7] }, +{ source: [0xC3CD], NFC: [0xC3CD], NFD: [0x110A, 0x1168, 0x11B8], NFKC: [0xC3CD], NFKD: [0x110A, 0x1168, 0x11B8] }, +{ source: [0xC3CE], NFC: [0xC3CE], NFD: [0x110A, 0x1168, 0x11B9], NFKC: [0xC3CE], NFKD: [0x110A, 0x1168, 0x11B9] }, +{ source: [0xC3CF], NFC: [0xC3CF], NFD: [0x110A, 0x1168, 0x11BA], NFKC: [0xC3CF], NFKD: [0x110A, 0x1168, 0x11BA] }, +{ source: [0xC3D0], NFC: [0xC3D0], NFD: [0x110A, 0x1168, 0x11BB], NFKC: [0xC3D0], NFKD: [0x110A, 0x1168, 0x11BB] }, +{ source: [0xC3D1], NFC: [0xC3D1], NFD: [0x110A, 0x1168, 0x11BC], NFKC: [0xC3D1], NFKD: [0x110A, 0x1168, 0x11BC] }, +{ source: [0xC3D2], NFC: [0xC3D2], NFD: [0x110A, 0x1168, 0x11BD], NFKC: [0xC3D2], NFKD: [0x110A, 0x1168, 0x11BD] }, +{ source: [0xC3D3], NFC: [0xC3D3], NFD: [0x110A, 0x1168, 0x11BE], NFKC: [0xC3D3], NFKD: [0x110A, 0x1168, 0x11BE] }, +{ source: [0xC3D4], NFC: [0xC3D4], NFD: [0x110A, 0x1168, 0x11BF], NFKC: [0xC3D4], NFKD: [0x110A, 0x1168, 0x11BF] }, +{ source: [0xC3D5], NFC: [0xC3D5], NFD: [0x110A, 0x1168, 0x11C0], NFKC: [0xC3D5], NFKD: [0x110A, 0x1168, 0x11C0] }, +{ source: [0xC3D6], NFC: [0xC3D6], NFD: [0x110A, 0x1168, 0x11C1], NFKC: [0xC3D6], NFKD: [0x110A, 0x1168, 0x11C1] }, +{ source: [0xC3D7], NFC: [0xC3D7], NFD: [0x110A, 0x1168, 0x11C2], NFKC: [0xC3D7], NFKD: [0x110A, 0x1168, 0x11C2] }, +{ source: [0xC3D8], NFC: [0xC3D8], NFD: [0x110A, 0x1169], NFKC: [0xC3D8], NFKD: [0x110A, 0x1169] }, +{ source: [0xC3D9], NFC: [0xC3D9], NFD: [0x110A, 0x1169, 0x11A8], NFKC: [0xC3D9], NFKD: [0x110A, 0x1169, 0x11A8] }, +{ source: [0xC3DA], NFC: [0xC3DA], NFD: [0x110A, 0x1169, 0x11A9], NFKC: [0xC3DA], NFKD: [0x110A, 0x1169, 0x11A9] }, +{ source: [0xC3DB], NFC: [0xC3DB], NFD: [0x110A, 0x1169, 0x11AA], NFKC: [0xC3DB], NFKD: [0x110A, 0x1169, 0x11AA] }, +{ source: [0xC3DC], NFC: [0xC3DC], NFD: [0x110A, 0x1169, 0x11AB], NFKC: [0xC3DC], NFKD: [0x110A, 0x1169, 0x11AB] }, +{ source: [0xC3DD], NFC: [0xC3DD], NFD: [0x110A, 0x1169, 0x11AC], NFKC: [0xC3DD], NFKD: [0x110A, 0x1169, 0x11AC] }, +{ source: [0xC3DE], NFC: [0xC3DE], NFD: [0x110A, 0x1169, 0x11AD], NFKC: [0xC3DE], NFKD: [0x110A, 0x1169, 0x11AD] }, +{ source: [0xC3DF], NFC: [0xC3DF], NFD: [0x110A, 0x1169, 0x11AE], NFKC: [0xC3DF], NFKD: [0x110A, 0x1169, 0x11AE] }, +{ source: [0xC3E0], NFC: [0xC3E0], NFD: [0x110A, 0x1169, 0x11AF], NFKC: [0xC3E0], NFKD: [0x110A, 0x1169, 0x11AF] }, +{ source: [0xC3E1], NFC: [0xC3E1], NFD: [0x110A, 0x1169, 0x11B0], NFKC: [0xC3E1], NFKD: [0x110A, 0x1169, 0x11B0] }, +{ source: [0xC3E2], NFC: [0xC3E2], NFD: [0x110A, 0x1169, 0x11B1], NFKC: [0xC3E2], NFKD: [0x110A, 0x1169, 0x11B1] }, +{ source: [0xC3E3], NFC: [0xC3E3], NFD: [0x110A, 0x1169, 0x11B2], NFKC: [0xC3E3], NFKD: [0x110A, 0x1169, 0x11B2] }, +{ source: [0xC3E4], NFC: [0xC3E4], NFD: [0x110A, 0x1169, 0x11B3], NFKC: [0xC3E4], NFKD: [0x110A, 0x1169, 0x11B3] }, +{ source: [0xC3E5], NFC: [0xC3E5], NFD: [0x110A, 0x1169, 0x11B4], NFKC: [0xC3E5], NFKD: [0x110A, 0x1169, 0x11B4] }, +{ source: [0xC3E6], NFC: [0xC3E6], NFD: [0x110A, 0x1169, 0x11B5], NFKC: [0xC3E6], NFKD: [0x110A, 0x1169, 0x11B5] }, +{ source: [0xC3E7], NFC: [0xC3E7], NFD: [0x110A, 0x1169, 0x11B6], NFKC: [0xC3E7], NFKD: [0x110A, 0x1169, 0x11B6] }, +{ source: [0xC3E8], NFC: [0xC3E8], NFD: [0x110A, 0x1169, 0x11B7], NFKC: [0xC3E8], NFKD: [0x110A, 0x1169, 0x11B7] }, +{ source: [0xC3E9], NFC: [0xC3E9], NFD: [0x110A, 0x1169, 0x11B8], NFKC: [0xC3E9], NFKD: [0x110A, 0x1169, 0x11B8] }, +{ source: [0xC3EA], NFC: [0xC3EA], NFD: [0x110A, 0x1169, 0x11B9], NFKC: [0xC3EA], NFKD: [0x110A, 0x1169, 0x11B9] }, +{ source: [0xC3EB], NFC: [0xC3EB], NFD: [0x110A, 0x1169, 0x11BA], NFKC: [0xC3EB], NFKD: [0x110A, 0x1169, 0x11BA] }, +{ source: [0xC3EC], NFC: [0xC3EC], NFD: [0x110A, 0x1169, 0x11BB], NFKC: [0xC3EC], NFKD: [0x110A, 0x1169, 0x11BB] }, +{ source: [0xC3ED], NFC: [0xC3ED], NFD: [0x110A, 0x1169, 0x11BC], NFKC: [0xC3ED], NFKD: [0x110A, 0x1169, 0x11BC] }, +{ source: [0xC3EE], NFC: [0xC3EE], NFD: [0x110A, 0x1169, 0x11BD], NFKC: [0xC3EE], NFKD: [0x110A, 0x1169, 0x11BD] }, +{ source: [0xC3EF], NFC: [0xC3EF], NFD: [0x110A, 0x1169, 0x11BE], NFKC: [0xC3EF], NFKD: [0x110A, 0x1169, 0x11BE] }, +{ source: [0xC3F0], NFC: [0xC3F0], NFD: [0x110A, 0x1169, 0x11BF], NFKC: [0xC3F0], NFKD: [0x110A, 0x1169, 0x11BF] }, +{ source: [0xC3F1], NFC: [0xC3F1], NFD: [0x110A, 0x1169, 0x11C0], NFKC: [0xC3F1], NFKD: [0x110A, 0x1169, 0x11C0] }, +{ source: [0xC3F2], NFC: [0xC3F2], NFD: [0x110A, 0x1169, 0x11C1], NFKC: [0xC3F2], NFKD: [0x110A, 0x1169, 0x11C1] }, +{ source: [0xC3F3], NFC: [0xC3F3], NFD: [0x110A, 0x1169, 0x11C2], NFKC: [0xC3F3], NFKD: [0x110A, 0x1169, 0x11C2] }, +{ source: [0xC3F4], NFC: [0xC3F4], NFD: [0x110A, 0x116A], NFKC: [0xC3F4], NFKD: [0x110A, 0x116A] }, +{ source: [0xC3F5], NFC: [0xC3F5], NFD: [0x110A, 0x116A, 0x11A8], NFKC: [0xC3F5], NFKD: [0x110A, 0x116A, 0x11A8] }, +{ source: [0xC3F6], NFC: [0xC3F6], NFD: [0x110A, 0x116A, 0x11A9], NFKC: [0xC3F6], NFKD: [0x110A, 0x116A, 0x11A9] }, +{ source: [0xC3F7], NFC: [0xC3F7], NFD: [0x110A, 0x116A, 0x11AA], NFKC: [0xC3F7], NFKD: [0x110A, 0x116A, 0x11AA] }, +{ source: [0xC3F8], NFC: [0xC3F8], NFD: [0x110A, 0x116A, 0x11AB], NFKC: [0xC3F8], NFKD: [0x110A, 0x116A, 0x11AB] }, +{ source: [0xC3F9], NFC: [0xC3F9], NFD: [0x110A, 0x116A, 0x11AC], NFKC: [0xC3F9], NFKD: [0x110A, 0x116A, 0x11AC] }, +{ source: [0xC3FA], NFC: [0xC3FA], NFD: [0x110A, 0x116A, 0x11AD], NFKC: [0xC3FA], NFKD: [0x110A, 0x116A, 0x11AD] }, +{ source: [0xC3FB], NFC: [0xC3FB], NFD: [0x110A, 0x116A, 0x11AE], NFKC: [0xC3FB], NFKD: [0x110A, 0x116A, 0x11AE] }, +{ source: [0xC3FC], NFC: [0xC3FC], NFD: [0x110A, 0x116A, 0x11AF], NFKC: [0xC3FC], NFKD: [0x110A, 0x116A, 0x11AF] }, +{ source: [0xC3FD], NFC: [0xC3FD], NFD: [0x110A, 0x116A, 0x11B0], NFKC: [0xC3FD], NFKD: [0x110A, 0x116A, 0x11B0] }, +{ source: [0xC3FE], NFC: [0xC3FE], NFD: [0x110A, 0x116A, 0x11B1], NFKC: [0xC3FE], NFKD: [0x110A, 0x116A, 0x11B1] }, +{ source: [0xC3FF], NFC: [0xC3FF], NFD: [0x110A, 0x116A, 0x11B2], NFKC: [0xC3FF], NFKD: [0x110A, 0x116A, 0x11B2] }, +{ source: [0xC400], NFC: [0xC400], NFD: [0x110A, 0x116A, 0x11B3], NFKC: [0xC400], NFKD: [0x110A, 0x116A, 0x11B3] }, +{ source: [0xC401], NFC: [0xC401], NFD: [0x110A, 0x116A, 0x11B4], NFKC: [0xC401], NFKD: [0x110A, 0x116A, 0x11B4] }, +{ source: [0xC402], NFC: [0xC402], NFD: [0x110A, 0x116A, 0x11B5], NFKC: [0xC402], NFKD: [0x110A, 0x116A, 0x11B5] }, +{ source: [0xC403], NFC: [0xC403], NFD: [0x110A, 0x116A, 0x11B6], NFKC: [0xC403], NFKD: [0x110A, 0x116A, 0x11B6] }, +{ source: [0xC404], NFC: [0xC404], NFD: [0x110A, 0x116A, 0x11B7], NFKC: [0xC404], NFKD: [0x110A, 0x116A, 0x11B7] }, +{ source: [0xC405], NFC: [0xC405], NFD: [0x110A, 0x116A, 0x11B8], NFKC: [0xC405], NFKD: [0x110A, 0x116A, 0x11B8] }, +{ source: [0xC406], NFC: [0xC406], NFD: [0x110A, 0x116A, 0x11B9], NFKC: [0xC406], NFKD: [0x110A, 0x116A, 0x11B9] }, +{ source: [0xC407], NFC: [0xC407], NFD: [0x110A, 0x116A, 0x11BA], NFKC: [0xC407], NFKD: [0x110A, 0x116A, 0x11BA] }, +{ source: [0xC408], NFC: [0xC408], NFD: [0x110A, 0x116A, 0x11BB], NFKC: [0xC408], NFKD: [0x110A, 0x116A, 0x11BB] }, +{ source: [0xC409], NFC: [0xC409], NFD: [0x110A, 0x116A, 0x11BC], NFKC: [0xC409], NFKD: [0x110A, 0x116A, 0x11BC] }, +{ source: [0xC40A], NFC: [0xC40A], NFD: [0x110A, 0x116A, 0x11BD], NFKC: [0xC40A], NFKD: [0x110A, 0x116A, 0x11BD] }, +{ source: [0xC40B], NFC: [0xC40B], NFD: [0x110A, 0x116A, 0x11BE], NFKC: [0xC40B], NFKD: [0x110A, 0x116A, 0x11BE] }, +{ source: [0xC40C], NFC: [0xC40C], NFD: [0x110A, 0x116A, 0x11BF], NFKC: [0xC40C], NFKD: [0x110A, 0x116A, 0x11BF] }, +{ source: [0xC40D], NFC: [0xC40D], NFD: [0x110A, 0x116A, 0x11C0], NFKC: [0xC40D], NFKD: [0x110A, 0x116A, 0x11C0] }, +{ source: [0xC40E], NFC: [0xC40E], NFD: [0x110A, 0x116A, 0x11C1], NFKC: [0xC40E], NFKD: [0x110A, 0x116A, 0x11C1] }, +{ source: [0xC40F], NFC: [0xC40F], NFD: [0x110A, 0x116A, 0x11C2], NFKC: [0xC40F], NFKD: [0x110A, 0x116A, 0x11C2] }, +{ source: [0xC410], NFC: [0xC410], NFD: [0x110A, 0x116B], NFKC: [0xC410], NFKD: [0x110A, 0x116B] }, +{ source: [0xC411], NFC: [0xC411], NFD: [0x110A, 0x116B, 0x11A8], NFKC: [0xC411], NFKD: [0x110A, 0x116B, 0x11A8] }, +{ source: [0xC412], NFC: [0xC412], NFD: [0x110A, 0x116B, 0x11A9], NFKC: [0xC412], NFKD: [0x110A, 0x116B, 0x11A9] }, +{ source: [0xC413], NFC: [0xC413], NFD: [0x110A, 0x116B, 0x11AA], NFKC: [0xC413], NFKD: [0x110A, 0x116B, 0x11AA] }, +{ source: [0xC414], NFC: [0xC414], NFD: [0x110A, 0x116B, 0x11AB], NFKC: [0xC414], NFKD: [0x110A, 0x116B, 0x11AB] }, +{ source: [0xC415], NFC: [0xC415], NFD: [0x110A, 0x116B, 0x11AC], NFKC: [0xC415], NFKD: [0x110A, 0x116B, 0x11AC] }, +{ source: [0xC416], NFC: [0xC416], NFD: [0x110A, 0x116B, 0x11AD], NFKC: [0xC416], NFKD: [0x110A, 0x116B, 0x11AD] }, +{ source: [0xC417], NFC: [0xC417], NFD: [0x110A, 0x116B, 0x11AE], NFKC: [0xC417], NFKD: [0x110A, 0x116B, 0x11AE] }, +{ source: [0xC418], NFC: [0xC418], NFD: [0x110A, 0x116B, 0x11AF], NFKC: [0xC418], NFKD: [0x110A, 0x116B, 0x11AF] }, +{ source: [0xC419], NFC: [0xC419], NFD: [0x110A, 0x116B, 0x11B0], NFKC: [0xC419], NFKD: [0x110A, 0x116B, 0x11B0] }, +{ source: [0xC41A], NFC: [0xC41A], NFD: [0x110A, 0x116B, 0x11B1], NFKC: [0xC41A], NFKD: [0x110A, 0x116B, 0x11B1] }, +{ source: [0xC41B], NFC: [0xC41B], NFD: [0x110A, 0x116B, 0x11B2], NFKC: [0xC41B], NFKD: [0x110A, 0x116B, 0x11B2] }, +{ source: [0xC41C], NFC: [0xC41C], NFD: [0x110A, 0x116B, 0x11B3], NFKC: [0xC41C], NFKD: [0x110A, 0x116B, 0x11B3] }, +{ source: [0xC41D], NFC: [0xC41D], NFD: [0x110A, 0x116B, 0x11B4], NFKC: [0xC41D], NFKD: [0x110A, 0x116B, 0x11B4] }, +{ source: [0xC41E], NFC: [0xC41E], NFD: [0x110A, 0x116B, 0x11B5], NFKC: [0xC41E], NFKD: [0x110A, 0x116B, 0x11B5] }, +{ source: [0xC41F], NFC: [0xC41F], NFD: [0x110A, 0x116B, 0x11B6], NFKC: [0xC41F], NFKD: [0x110A, 0x116B, 0x11B6] }, +{ source: [0xC420], NFC: [0xC420], NFD: [0x110A, 0x116B, 0x11B7], NFKC: [0xC420], NFKD: [0x110A, 0x116B, 0x11B7] }, +{ source: [0xC421], NFC: [0xC421], NFD: [0x110A, 0x116B, 0x11B8], NFKC: [0xC421], NFKD: [0x110A, 0x116B, 0x11B8] }, +{ source: [0xC422], NFC: [0xC422], NFD: [0x110A, 0x116B, 0x11B9], NFKC: [0xC422], NFKD: [0x110A, 0x116B, 0x11B9] }, +{ source: [0xC423], NFC: [0xC423], NFD: [0x110A, 0x116B, 0x11BA], NFKC: [0xC423], NFKD: [0x110A, 0x116B, 0x11BA] }, +{ source: [0xC424], NFC: [0xC424], NFD: [0x110A, 0x116B, 0x11BB], NFKC: [0xC424], NFKD: [0x110A, 0x116B, 0x11BB] }, +{ source: [0xC425], NFC: [0xC425], NFD: [0x110A, 0x116B, 0x11BC], NFKC: [0xC425], NFKD: [0x110A, 0x116B, 0x11BC] }, +{ source: [0xC426], NFC: [0xC426], NFD: [0x110A, 0x116B, 0x11BD], NFKC: [0xC426], NFKD: [0x110A, 0x116B, 0x11BD] }, +{ source: [0xC427], NFC: [0xC427], NFD: [0x110A, 0x116B, 0x11BE], NFKC: [0xC427], NFKD: [0x110A, 0x116B, 0x11BE] }, +{ source: [0xC428], NFC: [0xC428], NFD: [0x110A, 0x116B, 0x11BF], NFKC: [0xC428], NFKD: [0x110A, 0x116B, 0x11BF] }, +{ source: [0xC429], NFC: [0xC429], NFD: [0x110A, 0x116B, 0x11C0], NFKC: [0xC429], NFKD: [0x110A, 0x116B, 0x11C0] }, +{ source: [0xC42A], NFC: [0xC42A], NFD: [0x110A, 0x116B, 0x11C1], NFKC: [0xC42A], NFKD: [0x110A, 0x116B, 0x11C1] }, +{ source: [0xC42B], NFC: [0xC42B], NFD: [0x110A, 0x116B, 0x11C2], NFKC: [0xC42B], NFKD: [0x110A, 0x116B, 0x11C2] }, +{ source: [0xC42C], NFC: [0xC42C], NFD: [0x110A, 0x116C], NFKC: [0xC42C], NFKD: [0x110A, 0x116C] }, +{ source: [0xC42D], NFC: [0xC42D], NFD: [0x110A, 0x116C, 0x11A8], NFKC: [0xC42D], NFKD: [0x110A, 0x116C, 0x11A8] }, +{ source: [0xC42E], NFC: [0xC42E], NFD: [0x110A, 0x116C, 0x11A9], NFKC: [0xC42E], NFKD: [0x110A, 0x116C, 0x11A9] }, +{ source: [0xC42F], NFC: [0xC42F], NFD: [0x110A, 0x116C, 0x11AA], NFKC: [0xC42F], NFKD: [0x110A, 0x116C, 0x11AA] }, +{ source: [0xC430], NFC: [0xC430], NFD: [0x110A, 0x116C, 0x11AB], NFKC: [0xC430], NFKD: [0x110A, 0x116C, 0x11AB] }, +{ source: [0xC431], NFC: [0xC431], NFD: [0x110A, 0x116C, 0x11AC], NFKC: [0xC431], NFKD: [0x110A, 0x116C, 0x11AC] }, +{ source: [0xC432], NFC: [0xC432], NFD: [0x110A, 0x116C, 0x11AD], NFKC: [0xC432], NFKD: [0x110A, 0x116C, 0x11AD] }, +{ source: [0xC433], NFC: [0xC433], NFD: [0x110A, 0x116C, 0x11AE], NFKC: [0xC433], NFKD: [0x110A, 0x116C, 0x11AE] }, +{ source: [0xC434], NFC: [0xC434], NFD: [0x110A, 0x116C, 0x11AF], NFKC: [0xC434], NFKD: [0x110A, 0x116C, 0x11AF] }, +{ source: [0xC435], NFC: [0xC435], NFD: [0x110A, 0x116C, 0x11B0], NFKC: [0xC435], NFKD: [0x110A, 0x116C, 0x11B0] }, +{ source: [0xC436], NFC: [0xC436], NFD: [0x110A, 0x116C, 0x11B1], NFKC: [0xC436], NFKD: [0x110A, 0x116C, 0x11B1] }, +{ source: [0xC437], NFC: [0xC437], NFD: [0x110A, 0x116C, 0x11B2], NFKC: [0xC437], NFKD: [0x110A, 0x116C, 0x11B2] }, +{ source: [0xC438], NFC: [0xC438], NFD: [0x110A, 0x116C, 0x11B3], NFKC: [0xC438], NFKD: [0x110A, 0x116C, 0x11B3] }, +{ source: [0xC439], NFC: [0xC439], NFD: [0x110A, 0x116C, 0x11B4], NFKC: [0xC439], NFKD: [0x110A, 0x116C, 0x11B4] }, +{ source: [0xC43A], NFC: [0xC43A], NFD: [0x110A, 0x116C, 0x11B5], NFKC: [0xC43A], NFKD: [0x110A, 0x116C, 0x11B5] }, +{ source: [0xC43B], NFC: [0xC43B], NFD: [0x110A, 0x116C, 0x11B6], NFKC: [0xC43B], NFKD: [0x110A, 0x116C, 0x11B6] }, +{ source: [0xC43C], NFC: [0xC43C], NFD: [0x110A, 0x116C, 0x11B7], NFKC: [0xC43C], NFKD: [0x110A, 0x116C, 0x11B7] }, +{ source: [0xC43D], NFC: [0xC43D], NFD: [0x110A, 0x116C, 0x11B8], NFKC: [0xC43D], NFKD: [0x110A, 0x116C, 0x11B8] }, +{ source: [0xC43E], NFC: [0xC43E], NFD: [0x110A, 0x116C, 0x11B9], NFKC: [0xC43E], NFKD: [0x110A, 0x116C, 0x11B9] }, +{ source: [0xC43F], NFC: [0xC43F], NFD: [0x110A, 0x116C, 0x11BA], NFKC: [0xC43F], NFKD: [0x110A, 0x116C, 0x11BA] }, +{ source: [0xC440], NFC: [0xC440], NFD: [0x110A, 0x116C, 0x11BB], NFKC: [0xC440], NFKD: [0x110A, 0x116C, 0x11BB] }, +{ source: [0xC441], NFC: [0xC441], NFD: [0x110A, 0x116C, 0x11BC], NFKC: [0xC441], NFKD: [0x110A, 0x116C, 0x11BC] }, +{ source: [0xC442], NFC: [0xC442], NFD: [0x110A, 0x116C, 0x11BD], NFKC: [0xC442], NFKD: [0x110A, 0x116C, 0x11BD] }, +{ source: [0xC443], NFC: [0xC443], NFD: [0x110A, 0x116C, 0x11BE], NFKC: [0xC443], NFKD: [0x110A, 0x116C, 0x11BE] }, +{ source: [0xC444], NFC: [0xC444], NFD: [0x110A, 0x116C, 0x11BF], NFKC: [0xC444], NFKD: [0x110A, 0x116C, 0x11BF] }, +{ source: [0xC445], NFC: [0xC445], NFD: [0x110A, 0x116C, 0x11C0], NFKC: [0xC445], NFKD: [0x110A, 0x116C, 0x11C0] }, +{ source: [0xC446], NFC: [0xC446], NFD: [0x110A, 0x116C, 0x11C1], NFKC: [0xC446], NFKD: [0x110A, 0x116C, 0x11C1] }, +{ source: [0xC447], NFC: [0xC447], NFD: [0x110A, 0x116C, 0x11C2], NFKC: [0xC447], NFKD: [0x110A, 0x116C, 0x11C2] }, +{ source: [0xC448], NFC: [0xC448], NFD: [0x110A, 0x116D], NFKC: [0xC448], NFKD: [0x110A, 0x116D] }, +{ source: [0xC449], NFC: [0xC449], NFD: [0x110A, 0x116D, 0x11A8], NFKC: [0xC449], NFKD: [0x110A, 0x116D, 0x11A8] }, +{ source: [0xC44A], NFC: [0xC44A], NFD: [0x110A, 0x116D, 0x11A9], NFKC: [0xC44A], NFKD: [0x110A, 0x116D, 0x11A9] }, +{ source: [0xC44B], NFC: [0xC44B], NFD: [0x110A, 0x116D, 0x11AA], NFKC: [0xC44B], NFKD: [0x110A, 0x116D, 0x11AA] }, +{ source: [0xC44C], NFC: [0xC44C], NFD: [0x110A, 0x116D, 0x11AB], NFKC: [0xC44C], NFKD: [0x110A, 0x116D, 0x11AB] }, +{ source: [0xC44D], NFC: [0xC44D], NFD: [0x110A, 0x116D, 0x11AC], NFKC: [0xC44D], NFKD: [0x110A, 0x116D, 0x11AC] }, +{ source: [0xC44E], NFC: [0xC44E], NFD: [0x110A, 0x116D, 0x11AD], NFKC: [0xC44E], NFKD: [0x110A, 0x116D, 0x11AD] }, +{ source: [0xC44F], NFC: [0xC44F], NFD: [0x110A, 0x116D, 0x11AE], NFKC: [0xC44F], NFKD: [0x110A, 0x116D, 0x11AE] }, +{ source: [0xC450], NFC: [0xC450], NFD: [0x110A, 0x116D, 0x11AF], NFKC: [0xC450], NFKD: [0x110A, 0x116D, 0x11AF] }, +{ source: [0xC451], NFC: [0xC451], NFD: [0x110A, 0x116D, 0x11B0], NFKC: [0xC451], NFKD: [0x110A, 0x116D, 0x11B0] }, +{ source: [0xC452], NFC: [0xC452], NFD: [0x110A, 0x116D, 0x11B1], NFKC: [0xC452], NFKD: [0x110A, 0x116D, 0x11B1] }, +{ source: [0xC453], NFC: [0xC453], NFD: [0x110A, 0x116D, 0x11B2], NFKC: [0xC453], NFKD: [0x110A, 0x116D, 0x11B2] }, +{ source: [0xC454], NFC: [0xC454], NFD: [0x110A, 0x116D, 0x11B3], NFKC: [0xC454], NFKD: [0x110A, 0x116D, 0x11B3] }, +{ source: [0xC455], NFC: [0xC455], NFD: [0x110A, 0x116D, 0x11B4], NFKC: [0xC455], NFKD: [0x110A, 0x116D, 0x11B4] }, +{ source: [0xC456], NFC: [0xC456], NFD: [0x110A, 0x116D, 0x11B5], NFKC: [0xC456], NFKD: [0x110A, 0x116D, 0x11B5] }, +{ source: [0xC457], NFC: [0xC457], NFD: [0x110A, 0x116D, 0x11B6], NFKC: [0xC457], NFKD: [0x110A, 0x116D, 0x11B6] }, +{ source: [0xC458], NFC: [0xC458], NFD: [0x110A, 0x116D, 0x11B7], NFKC: [0xC458], NFKD: [0x110A, 0x116D, 0x11B7] }, +{ source: [0xC459], NFC: [0xC459], NFD: [0x110A, 0x116D, 0x11B8], NFKC: [0xC459], NFKD: [0x110A, 0x116D, 0x11B8] }, +{ source: [0xC45A], NFC: [0xC45A], NFD: [0x110A, 0x116D, 0x11B9], NFKC: [0xC45A], NFKD: [0x110A, 0x116D, 0x11B9] }, +{ source: [0xC45B], NFC: [0xC45B], NFD: [0x110A, 0x116D, 0x11BA], NFKC: [0xC45B], NFKD: [0x110A, 0x116D, 0x11BA] }, +{ source: [0xC45C], NFC: [0xC45C], NFD: [0x110A, 0x116D, 0x11BB], NFKC: [0xC45C], NFKD: [0x110A, 0x116D, 0x11BB] }, +{ source: [0xC45D], NFC: [0xC45D], NFD: [0x110A, 0x116D, 0x11BC], NFKC: [0xC45D], NFKD: [0x110A, 0x116D, 0x11BC] }, +{ source: [0xC45E], NFC: [0xC45E], NFD: [0x110A, 0x116D, 0x11BD], NFKC: [0xC45E], NFKD: [0x110A, 0x116D, 0x11BD] }, +{ source: [0xC45F], NFC: [0xC45F], NFD: [0x110A, 0x116D, 0x11BE], NFKC: [0xC45F], NFKD: [0x110A, 0x116D, 0x11BE] }, +{ source: [0xC460], NFC: [0xC460], NFD: [0x110A, 0x116D, 0x11BF], NFKC: [0xC460], NFKD: [0x110A, 0x116D, 0x11BF] }, +{ source: [0xC461], NFC: [0xC461], NFD: [0x110A, 0x116D, 0x11C0], NFKC: [0xC461], NFKD: [0x110A, 0x116D, 0x11C0] }, +{ source: [0xC462], NFC: [0xC462], NFD: [0x110A, 0x116D, 0x11C1], NFKC: [0xC462], NFKD: [0x110A, 0x116D, 0x11C1] }, +{ source: [0xC463], NFC: [0xC463], NFD: [0x110A, 0x116D, 0x11C2], NFKC: [0xC463], NFKD: [0x110A, 0x116D, 0x11C2] }, +{ source: [0xC464], NFC: [0xC464], NFD: [0x110A, 0x116E], NFKC: [0xC464], NFKD: [0x110A, 0x116E] }, +{ source: [0xC465], NFC: [0xC465], NFD: [0x110A, 0x116E, 0x11A8], NFKC: [0xC465], NFKD: [0x110A, 0x116E, 0x11A8] }, +{ source: [0xC466], NFC: [0xC466], NFD: [0x110A, 0x116E, 0x11A9], NFKC: [0xC466], NFKD: [0x110A, 0x116E, 0x11A9] }, +{ source: [0xC467], NFC: [0xC467], NFD: [0x110A, 0x116E, 0x11AA], NFKC: [0xC467], NFKD: [0x110A, 0x116E, 0x11AA] }, +{ source: [0xC468], NFC: [0xC468], NFD: [0x110A, 0x116E, 0x11AB], NFKC: [0xC468], NFKD: [0x110A, 0x116E, 0x11AB] }, +{ source: [0xC469], NFC: [0xC469], NFD: [0x110A, 0x116E, 0x11AC], NFKC: [0xC469], NFKD: [0x110A, 0x116E, 0x11AC] }, +{ source: [0xC46A], NFC: [0xC46A], NFD: [0x110A, 0x116E, 0x11AD], NFKC: [0xC46A], NFKD: [0x110A, 0x116E, 0x11AD] }, +{ source: [0xC46B], NFC: [0xC46B], NFD: [0x110A, 0x116E, 0x11AE], NFKC: [0xC46B], NFKD: [0x110A, 0x116E, 0x11AE] }, +{ source: [0xC46C], NFC: [0xC46C], NFD: [0x110A, 0x116E, 0x11AF], NFKC: [0xC46C], NFKD: [0x110A, 0x116E, 0x11AF] }, +{ source: [0xC46D], NFC: [0xC46D], NFD: [0x110A, 0x116E, 0x11B0], NFKC: [0xC46D], NFKD: [0x110A, 0x116E, 0x11B0] }, +{ source: [0xC46E], NFC: [0xC46E], NFD: [0x110A, 0x116E, 0x11B1], NFKC: [0xC46E], NFKD: [0x110A, 0x116E, 0x11B1] }, +{ source: [0xC46F], NFC: [0xC46F], NFD: [0x110A, 0x116E, 0x11B2], NFKC: [0xC46F], NFKD: [0x110A, 0x116E, 0x11B2] }, +{ source: [0xC470], NFC: [0xC470], NFD: [0x110A, 0x116E, 0x11B3], NFKC: [0xC470], NFKD: [0x110A, 0x116E, 0x11B3] }, +{ source: [0xC471], NFC: [0xC471], NFD: [0x110A, 0x116E, 0x11B4], NFKC: [0xC471], NFKD: [0x110A, 0x116E, 0x11B4] }, +{ source: [0xC472], NFC: [0xC472], NFD: [0x110A, 0x116E, 0x11B5], NFKC: [0xC472], NFKD: [0x110A, 0x116E, 0x11B5] }, +{ source: [0xC473], NFC: [0xC473], NFD: [0x110A, 0x116E, 0x11B6], NFKC: [0xC473], NFKD: [0x110A, 0x116E, 0x11B6] }, +{ source: [0xC474], NFC: [0xC474], NFD: [0x110A, 0x116E, 0x11B7], NFKC: [0xC474], NFKD: [0x110A, 0x116E, 0x11B7] }, +{ source: [0xC475], NFC: [0xC475], NFD: [0x110A, 0x116E, 0x11B8], NFKC: [0xC475], NFKD: [0x110A, 0x116E, 0x11B8] }, +{ source: [0xC476], NFC: [0xC476], NFD: [0x110A, 0x116E, 0x11B9], NFKC: [0xC476], NFKD: [0x110A, 0x116E, 0x11B9] }, +{ source: [0xC477], NFC: [0xC477], NFD: [0x110A, 0x116E, 0x11BA], NFKC: [0xC477], NFKD: [0x110A, 0x116E, 0x11BA] }, +{ source: [0xC478], NFC: [0xC478], NFD: [0x110A, 0x116E, 0x11BB], NFKC: [0xC478], NFKD: [0x110A, 0x116E, 0x11BB] }, +{ source: [0xC479], NFC: [0xC479], NFD: [0x110A, 0x116E, 0x11BC], NFKC: [0xC479], NFKD: [0x110A, 0x116E, 0x11BC] }, +{ source: [0xC47A], NFC: [0xC47A], NFD: [0x110A, 0x116E, 0x11BD], NFKC: [0xC47A], NFKD: [0x110A, 0x116E, 0x11BD] }, +{ source: [0xC47B], NFC: [0xC47B], NFD: [0x110A, 0x116E, 0x11BE], NFKC: [0xC47B], NFKD: [0x110A, 0x116E, 0x11BE] }, +{ source: [0xC47C], NFC: [0xC47C], NFD: [0x110A, 0x116E, 0x11BF], NFKC: [0xC47C], NFKD: [0x110A, 0x116E, 0x11BF] }, +{ source: [0xC47D], NFC: [0xC47D], NFD: [0x110A, 0x116E, 0x11C0], NFKC: [0xC47D], NFKD: [0x110A, 0x116E, 0x11C0] }, +{ source: [0xC47E], NFC: [0xC47E], NFD: [0x110A, 0x116E, 0x11C1], NFKC: [0xC47E], NFKD: [0x110A, 0x116E, 0x11C1] }, +{ source: [0xC47F], NFC: [0xC47F], NFD: [0x110A, 0x116E, 0x11C2], NFKC: [0xC47F], NFKD: [0x110A, 0x116E, 0x11C2] }, +{ source: [0xC480], NFC: [0xC480], NFD: [0x110A, 0x116F], NFKC: [0xC480], NFKD: [0x110A, 0x116F] }, +{ source: [0xC481], NFC: [0xC481], NFD: [0x110A, 0x116F, 0x11A8], NFKC: [0xC481], NFKD: [0x110A, 0x116F, 0x11A8] }, +{ source: [0xC482], NFC: [0xC482], NFD: [0x110A, 0x116F, 0x11A9], NFKC: [0xC482], NFKD: [0x110A, 0x116F, 0x11A9] }, +{ source: [0xC483], NFC: [0xC483], NFD: [0x110A, 0x116F, 0x11AA], NFKC: [0xC483], NFKD: [0x110A, 0x116F, 0x11AA] }, +{ source: [0xC484], NFC: [0xC484], NFD: [0x110A, 0x116F, 0x11AB], NFKC: [0xC484], NFKD: [0x110A, 0x116F, 0x11AB] }, +{ source: [0xC485], NFC: [0xC485], NFD: [0x110A, 0x116F, 0x11AC], NFKC: [0xC485], NFKD: [0x110A, 0x116F, 0x11AC] }, +{ source: [0xC486], NFC: [0xC486], NFD: [0x110A, 0x116F, 0x11AD], NFKC: [0xC486], NFKD: [0x110A, 0x116F, 0x11AD] }, +{ source: [0xC487], NFC: [0xC487], NFD: [0x110A, 0x116F, 0x11AE], NFKC: [0xC487], NFKD: [0x110A, 0x116F, 0x11AE] }, +{ source: [0xC488], NFC: [0xC488], NFD: [0x110A, 0x116F, 0x11AF], NFKC: [0xC488], NFKD: [0x110A, 0x116F, 0x11AF] }, +{ source: [0xC489], NFC: [0xC489], NFD: [0x110A, 0x116F, 0x11B0], NFKC: [0xC489], NFKD: [0x110A, 0x116F, 0x11B0] }, +{ source: [0xC48A], NFC: [0xC48A], NFD: [0x110A, 0x116F, 0x11B1], NFKC: [0xC48A], NFKD: [0x110A, 0x116F, 0x11B1] }, +{ source: [0xC48B], NFC: [0xC48B], NFD: [0x110A, 0x116F, 0x11B2], NFKC: [0xC48B], NFKD: [0x110A, 0x116F, 0x11B2] }, +{ source: [0xC48C], NFC: [0xC48C], NFD: [0x110A, 0x116F, 0x11B3], NFKC: [0xC48C], NFKD: [0x110A, 0x116F, 0x11B3] }, +{ source: [0xC48D], NFC: [0xC48D], NFD: [0x110A, 0x116F, 0x11B4], NFKC: [0xC48D], NFKD: [0x110A, 0x116F, 0x11B4] }, +{ source: [0xC48E], NFC: [0xC48E], NFD: [0x110A, 0x116F, 0x11B5], NFKC: [0xC48E], NFKD: [0x110A, 0x116F, 0x11B5] }, +{ source: [0xC48F], NFC: [0xC48F], NFD: [0x110A, 0x116F, 0x11B6], NFKC: [0xC48F], NFKD: [0x110A, 0x116F, 0x11B6] }, +{ source: [0xC490], NFC: [0xC490], NFD: [0x110A, 0x116F, 0x11B7], NFKC: [0xC490], NFKD: [0x110A, 0x116F, 0x11B7] }, +{ source: [0xC491], NFC: [0xC491], NFD: [0x110A, 0x116F, 0x11B8], NFKC: [0xC491], NFKD: [0x110A, 0x116F, 0x11B8] }, +{ source: [0xC492], NFC: [0xC492], NFD: [0x110A, 0x116F, 0x11B9], NFKC: [0xC492], NFKD: [0x110A, 0x116F, 0x11B9] }, +{ source: [0xC493], NFC: [0xC493], NFD: [0x110A, 0x116F, 0x11BA], NFKC: [0xC493], NFKD: [0x110A, 0x116F, 0x11BA] }, +{ source: [0xC494], NFC: [0xC494], NFD: [0x110A, 0x116F, 0x11BB], NFKC: [0xC494], NFKD: [0x110A, 0x116F, 0x11BB] }, +{ source: [0xC495], NFC: [0xC495], NFD: [0x110A, 0x116F, 0x11BC], NFKC: [0xC495], NFKD: [0x110A, 0x116F, 0x11BC] }, +{ source: [0xC496], NFC: [0xC496], NFD: [0x110A, 0x116F, 0x11BD], NFKC: [0xC496], NFKD: [0x110A, 0x116F, 0x11BD] }, +{ source: [0xC497], NFC: [0xC497], NFD: [0x110A, 0x116F, 0x11BE], NFKC: [0xC497], NFKD: [0x110A, 0x116F, 0x11BE] }, +{ source: [0xC498], NFC: [0xC498], NFD: [0x110A, 0x116F, 0x11BF], NFKC: [0xC498], NFKD: [0x110A, 0x116F, 0x11BF] }, +{ source: [0xC499], NFC: [0xC499], NFD: [0x110A, 0x116F, 0x11C0], NFKC: [0xC499], NFKD: [0x110A, 0x116F, 0x11C0] }, +{ source: [0xC49A], NFC: [0xC49A], NFD: [0x110A, 0x116F, 0x11C1], NFKC: [0xC49A], NFKD: [0x110A, 0x116F, 0x11C1] }, +{ source: [0xC49B], NFC: [0xC49B], NFD: [0x110A, 0x116F, 0x11C2], NFKC: [0xC49B], NFKD: [0x110A, 0x116F, 0x11C2] }, +{ source: [0xC49C], NFC: [0xC49C], NFD: [0x110A, 0x1170], NFKC: [0xC49C], NFKD: [0x110A, 0x1170] }, +{ source: [0xC49D], NFC: [0xC49D], NFD: [0x110A, 0x1170, 0x11A8], NFKC: [0xC49D], NFKD: [0x110A, 0x1170, 0x11A8] }, +{ source: [0xC49E], NFC: [0xC49E], NFD: [0x110A, 0x1170, 0x11A9], NFKC: [0xC49E], NFKD: [0x110A, 0x1170, 0x11A9] }, +{ source: [0xC49F], NFC: [0xC49F], NFD: [0x110A, 0x1170, 0x11AA], NFKC: [0xC49F], NFKD: [0x110A, 0x1170, 0x11AA] }, +{ source: [0xC4A0], NFC: [0xC4A0], NFD: [0x110A, 0x1170, 0x11AB], NFKC: [0xC4A0], NFKD: [0x110A, 0x1170, 0x11AB] }, +{ source: [0xC4A1], NFC: [0xC4A1], NFD: [0x110A, 0x1170, 0x11AC], NFKC: [0xC4A1], NFKD: [0x110A, 0x1170, 0x11AC] }, +{ source: [0xC4A2], NFC: [0xC4A2], NFD: [0x110A, 0x1170, 0x11AD], NFKC: [0xC4A2], NFKD: [0x110A, 0x1170, 0x11AD] }, +{ source: [0xC4A3], NFC: [0xC4A3], NFD: [0x110A, 0x1170, 0x11AE], NFKC: [0xC4A3], NFKD: [0x110A, 0x1170, 0x11AE] }, +{ source: [0xC4A4], NFC: [0xC4A4], NFD: [0x110A, 0x1170, 0x11AF], NFKC: [0xC4A4], NFKD: [0x110A, 0x1170, 0x11AF] }, +{ source: [0xC4A5], NFC: [0xC4A5], NFD: [0x110A, 0x1170, 0x11B0], NFKC: [0xC4A5], NFKD: [0x110A, 0x1170, 0x11B0] }, +{ source: [0xC4A6], NFC: [0xC4A6], NFD: [0x110A, 0x1170, 0x11B1], NFKC: [0xC4A6], NFKD: [0x110A, 0x1170, 0x11B1] }, +{ source: [0xC4A7], NFC: [0xC4A7], NFD: [0x110A, 0x1170, 0x11B2], NFKC: [0xC4A7], NFKD: [0x110A, 0x1170, 0x11B2] }, +{ source: [0xC4A8], NFC: [0xC4A8], NFD: [0x110A, 0x1170, 0x11B3], NFKC: [0xC4A8], NFKD: [0x110A, 0x1170, 0x11B3] }, +{ source: [0xC4A9], NFC: [0xC4A9], NFD: [0x110A, 0x1170, 0x11B4], NFKC: [0xC4A9], NFKD: [0x110A, 0x1170, 0x11B4] }, +{ source: [0xC4AA], NFC: [0xC4AA], NFD: [0x110A, 0x1170, 0x11B5], NFKC: [0xC4AA], NFKD: [0x110A, 0x1170, 0x11B5] }, +{ source: [0xC4AB], NFC: [0xC4AB], NFD: [0x110A, 0x1170, 0x11B6], NFKC: [0xC4AB], NFKD: [0x110A, 0x1170, 0x11B6] }, +{ source: [0xC4AC], NFC: [0xC4AC], NFD: [0x110A, 0x1170, 0x11B7], NFKC: [0xC4AC], NFKD: [0x110A, 0x1170, 0x11B7] }, +{ source: [0xC4AD], NFC: [0xC4AD], NFD: [0x110A, 0x1170, 0x11B8], NFKC: [0xC4AD], NFKD: [0x110A, 0x1170, 0x11B8] }, +{ source: [0xC4AE], NFC: [0xC4AE], NFD: [0x110A, 0x1170, 0x11B9], NFKC: [0xC4AE], NFKD: [0x110A, 0x1170, 0x11B9] }, +{ source: [0xC4AF], NFC: [0xC4AF], NFD: [0x110A, 0x1170, 0x11BA], NFKC: [0xC4AF], NFKD: [0x110A, 0x1170, 0x11BA] }, +{ source: [0xC4B0], NFC: [0xC4B0], NFD: [0x110A, 0x1170, 0x11BB], NFKC: [0xC4B0], NFKD: [0x110A, 0x1170, 0x11BB] }, +{ source: [0xC4B1], NFC: [0xC4B1], NFD: [0x110A, 0x1170, 0x11BC], NFKC: [0xC4B1], NFKD: [0x110A, 0x1170, 0x11BC] }, +{ source: [0xC4B2], NFC: [0xC4B2], NFD: [0x110A, 0x1170, 0x11BD], NFKC: [0xC4B2], NFKD: [0x110A, 0x1170, 0x11BD] }, +{ source: [0xC4B3], NFC: [0xC4B3], NFD: [0x110A, 0x1170, 0x11BE], NFKC: [0xC4B3], NFKD: [0x110A, 0x1170, 0x11BE] }, +{ source: [0xC4B4], NFC: [0xC4B4], NFD: [0x110A, 0x1170, 0x11BF], NFKC: [0xC4B4], NFKD: [0x110A, 0x1170, 0x11BF] }, +{ source: [0xC4B5], NFC: [0xC4B5], NFD: [0x110A, 0x1170, 0x11C0], NFKC: [0xC4B5], NFKD: [0x110A, 0x1170, 0x11C0] }, +{ source: [0xC4B6], NFC: [0xC4B6], NFD: [0x110A, 0x1170, 0x11C1], NFKC: [0xC4B6], NFKD: [0x110A, 0x1170, 0x11C1] }, +{ source: [0xC4B7], NFC: [0xC4B7], NFD: [0x110A, 0x1170, 0x11C2], NFKC: [0xC4B7], NFKD: [0x110A, 0x1170, 0x11C2] }, +{ source: [0xC4B8], NFC: [0xC4B8], NFD: [0x110A, 0x1171], NFKC: [0xC4B8], NFKD: [0x110A, 0x1171] }, +{ source: [0xC4B9], NFC: [0xC4B9], NFD: [0x110A, 0x1171, 0x11A8], NFKC: [0xC4B9], NFKD: [0x110A, 0x1171, 0x11A8] }, +{ source: [0xC4BA], NFC: [0xC4BA], NFD: [0x110A, 0x1171, 0x11A9], NFKC: [0xC4BA], NFKD: [0x110A, 0x1171, 0x11A9] }, +{ source: [0xC4BB], NFC: [0xC4BB], NFD: [0x110A, 0x1171, 0x11AA], NFKC: [0xC4BB], NFKD: [0x110A, 0x1171, 0x11AA] }, +{ source: [0xC4BC], NFC: [0xC4BC], NFD: [0x110A, 0x1171, 0x11AB], NFKC: [0xC4BC], NFKD: [0x110A, 0x1171, 0x11AB] }, +{ source: [0xC4BD], NFC: [0xC4BD], NFD: [0x110A, 0x1171, 0x11AC], NFKC: [0xC4BD], NFKD: [0x110A, 0x1171, 0x11AC] }, +{ source: [0xC4BE], NFC: [0xC4BE], NFD: [0x110A, 0x1171, 0x11AD], NFKC: [0xC4BE], NFKD: [0x110A, 0x1171, 0x11AD] }, +{ source: [0xC4BF], NFC: [0xC4BF], NFD: [0x110A, 0x1171, 0x11AE], NFKC: [0xC4BF], NFKD: [0x110A, 0x1171, 0x11AE] }, +{ source: [0xC4C0], NFC: [0xC4C0], NFD: [0x110A, 0x1171, 0x11AF], NFKC: [0xC4C0], NFKD: [0x110A, 0x1171, 0x11AF] }, +{ source: [0xC4C1], NFC: [0xC4C1], NFD: [0x110A, 0x1171, 0x11B0], NFKC: [0xC4C1], NFKD: [0x110A, 0x1171, 0x11B0] }, +{ source: [0xC4C2], NFC: [0xC4C2], NFD: [0x110A, 0x1171, 0x11B1], NFKC: [0xC4C2], NFKD: [0x110A, 0x1171, 0x11B1] }, +{ source: [0xC4C3], NFC: [0xC4C3], NFD: [0x110A, 0x1171, 0x11B2], NFKC: [0xC4C3], NFKD: [0x110A, 0x1171, 0x11B2] }, +{ source: [0xC4C4], NFC: [0xC4C4], NFD: [0x110A, 0x1171, 0x11B3], NFKC: [0xC4C4], NFKD: [0x110A, 0x1171, 0x11B3] }, +{ source: [0xC4C5], NFC: [0xC4C5], NFD: [0x110A, 0x1171, 0x11B4], NFKC: [0xC4C5], NFKD: [0x110A, 0x1171, 0x11B4] }, +{ source: [0xC4C6], NFC: [0xC4C6], NFD: [0x110A, 0x1171, 0x11B5], NFKC: [0xC4C6], NFKD: [0x110A, 0x1171, 0x11B5] }, +{ source: [0xC4C7], NFC: [0xC4C7], NFD: [0x110A, 0x1171, 0x11B6], NFKC: [0xC4C7], NFKD: [0x110A, 0x1171, 0x11B6] }, +{ source: [0xC4C8], NFC: [0xC4C8], NFD: [0x110A, 0x1171, 0x11B7], NFKC: [0xC4C8], NFKD: [0x110A, 0x1171, 0x11B7] }, +{ source: [0xC4C9], NFC: [0xC4C9], NFD: [0x110A, 0x1171, 0x11B8], NFKC: [0xC4C9], NFKD: [0x110A, 0x1171, 0x11B8] }, +{ source: [0xC4CA], NFC: [0xC4CA], NFD: [0x110A, 0x1171, 0x11B9], NFKC: [0xC4CA], NFKD: [0x110A, 0x1171, 0x11B9] }, +{ source: [0xC4CB], NFC: [0xC4CB], NFD: [0x110A, 0x1171, 0x11BA], NFKC: [0xC4CB], NFKD: [0x110A, 0x1171, 0x11BA] }, +{ source: [0xC4CC], NFC: [0xC4CC], NFD: [0x110A, 0x1171, 0x11BB], NFKC: [0xC4CC], NFKD: [0x110A, 0x1171, 0x11BB] }, +{ source: [0xC4CD], NFC: [0xC4CD], NFD: [0x110A, 0x1171, 0x11BC], NFKC: [0xC4CD], NFKD: [0x110A, 0x1171, 0x11BC] }, +{ source: [0xC4CE], NFC: [0xC4CE], NFD: [0x110A, 0x1171, 0x11BD], NFKC: [0xC4CE], NFKD: [0x110A, 0x1171, 0x11BD] }, +{ source: [0xC4CF], NFC: [0xC4CF], NFD: [0x110A, 0x1171, 0x11BE], NFKC: [0xC4CF], NFKD: [0x110A, 0x1171, 0x11BE] }, +{ source: [0xC4D0], NFC: [0xC4D0], NFD: [0x110A, 0x1171, 0x11BF], NFKC: [0xC4D0], NFKD: [0x110A, 0x1171, 0x11BF] }, +{ source: [0xC4D1], NFC: [0xC4D1], NFD: [0x110A, 0x1171, 0x11C0], NFKC: [0xC4D1], NFKD: [0x110A, 0x1171, 0x11C0] }, +{ source: [0xC4D2], NFC: [0xC4D2], NFD: [0x110A, 0x1171, 0x11C1], NFKC: [0xC4D2], NFKD: [0x110A, 0x1171, 0x11C1] }, +{ source: [0xC4D3], NFC: [0xC4D3], NFD: [0x110A, 0x1171, 0x11C2], NFKC: [0xC4D3], NFKD: [0x110A, 0x1171, 0x11C2] }, +{ source: [0xC4D4], NFC: [0xC4D4], NFD: [0x110A, 0x1172], NFKC: [0xC4D4], NFKD: [0x110A, 0x1172] }, +{ source: [0xC4D5], NFC: [0xC4D5], NFD: [0x110A, 0x1172, 0x11A8], NFKC: [0xC4D5], NFKD: [0x110A, 0x1172, 0x11A8] }, +{ source: [0xC4D6], NFC: [0xC4D6], NFD: [0x110A, 0x1172, 0x11A9], NFKC: [0xC4D6], NFKD: [0x110A, 0x1172, 0x11A9] }, +{ source: [0xC4D7], NFC: [0xC4D7], NFD: [0x110A, 0x1172, 0x11AA], NFKC: [0xC4D7], NFKD: [0x110A, 0x1172, 0x11AA] }, +{ source: [0xC4D8], NFC: [0xC4D8], NFD: [0x110A, 0x1172, 0x11AB], NFKC: [0xC4D8], NFKD: [0x110A, 0x1172, 0x11AB] }, +{ source: [0xC4D9], NFC: [0xC4D9], NFD: [0x110A, 0x1172, 0x11AC], NFKC: [0xC4D9], NFKD: [0x110A, 0x1172, 0x11AC] }, +{ source: [0xC4DA], NFC: [0xC4DA], NFD: [0x110A, 0x1172, 0x11AD], NFKC: [0xC4DA], NFKD: [0x110A, 0x1172, 0x11AD] }, +{ source: [0xC4DB], NFC: [0xC4DB], NFD: [0x110A, 0x1172, 0x11AE], NFKC: [0xC4DB], NFKD: [0x110A, 0x1172, 0x11AE] }, +{ source: [0xC4DC], NFC: [0xC4DC], NFD: [0x110A, 0x1172, 0x11AF], NFKC: [0xC4DC], NFKD: [0x110A, 0x1172, 0x11AF] }, +{ source: [0xC4DD], NFC: [0xC4DD], NFD: [0x110A, 0x1172, 0x11B0], NFKC: [0xC4DD], NFKD: [0x110A, 0x1172, 0x11B0] }, +{ source: [0xC4DE], NFC: [0xC4DE], NFD: [0x110A, 0x1172, 0x11B1], NFKC: [0xC4DE], NFKD: [0x110A, 0x1172, 0x11B1] }, +{ source: [0xC4DF], NFC: [0xC4DF], NFD: [0x110A, 0x1172, 0x11B2], NFKC: [0xC4DF], NFKD: [0x110A, 0x1172, 0x11B2] }, +{ source: [0xC4E0], NFC: [0xC4E0], NFD: [0x110A, 0x1172, 0x11B3], NFKC: [0xC4E0], NFKD: [0x110A, 0x1172, 0x11B3] }, +{ source: [0xC4E1], NFC: [0xC4E1], NFD: [0x110A, 0x1172, 0x11B4], NFKC: [0xC4E1], NFKD: [0x110A, 0x1172, 0x11B4] }, +{ source: [0xC4E2], NFC: [0xC4E2], NFD: [0x110A, 0x1172, 0x11B5], NFKC: [0xC4E2], NFKD: [0x110A, 0x1172, 0x11B5] }, +{ source: [0xC4E3], NFC: [0xC4E3], NFD: [0x110A, 0x1172, 0x11B6], NFKC: [0xC4E3], NFKD: [0x110A, 0x1172, 0x11B6] }, +{ source: [0xC4E4], NFC: [0xC4E4], NFD: [0x110A, 0x1172, 0x11B7], NFKC: [0xC4E4], NFKD: [0x110A, 0x1172, 0x11B7] }, +{ source: [0xC4E5], NFC: [0xC4E5], NFD: [0x110A, 0x1172, 0x11B8], NFKC: [0xC4E5], NFKD: [0x110A, 0x1172, 0x11B8] }, +{ source: [0xC4E6], NFC: [0xC4E6], NFD: [0x110A, 0x1172, 0x11B9], NFKC: [0xC4E6], NFKD: [0x110A, 0x1172, 0x11B9] }, +{ source: [0xC4E7], NFC: [0xC4E7], NFD: [0x110A, 0x1172, 0x11BA], NFKC: [0xC4E7], NFKD: [0x110A, 0x1172, 0x11BA] }, +{ source: [0xC4E8], NFC: [0xC4E8], NFD: [0x110A, 0x1172, 0x11BB], NFKC: [0xC4E8], NFKD: [0x110A, 0x1172, 0x11BB] }, +{ source: [0xC4E9], NFC: [0xC4E9], NFD: [0x110A, 0x1172, 0x11BC], NFKC: [0xC4E9], NFKD: [0x110A, 0x1172, 0x11BC] }, +{ source: [0xC4EA], NFC: [0xC4EA], NFD: [0x110A, 0x1172, 0x11BD], NFKC: [0xC4EA], NFKD: [0x110A, 0x1172, 0x11BD] }, +{ source: [0xC4EB], NFC: [0xC4EB], NFD: [0x110A, 0x1172, 0x11BE], NFKC: [0xC4EB], NFKD: [0x110A, 0x1172, 0x11BE] }, +{ source: [0xC4EC], NFC: [0xC4EC], NFD: [0x110A, 0x1172, 0x11BF], NFKC: [0xC4EC], NFKD: [0x110A, 0x1172, 0x11BF] }, +{ source: [0xC4ED], NFC: [0xC4ED], NFD: [0x110A, 0x1172, 0x11C0], NFKC: [0xC4ED], NFKD: [0x110A, 0x1172, 0x11C0] }, +{ source: [0xC4EE], NFC: [0xC4EE], NFD: [0x110A, 0x1172, 0x11C1], NFKC: [0xC4EE], NFKD: [0x110A, 0x1172, 0x11C1] }, +{ source: [0xC4EF], NFC: [0xC4EF], NFD: [0x110A, 0x1172, 0x11C2], NFKC: [0xC4EF], NFKD: [0x110A, 0x1172, 0x11C2] }, +{ source: [0xC4F0], NFC: [0xC4F0], NFD: [0x110A, 0x1173], NFKC: [0xC4F0], NFKD: [0x110A, 0x1173] }, +{ source: [0xC4F1], NFC: [0xC4F1], NFD: [0x110A, 0x1173, 0x11A8], NFKC: [0xC4F1], NFKD: [0x110A, 0x1173, 0x11A8] }, +{ source: [0xC4F2], NFC: [0xC4F2], NFD: [0x110A, 0x1173, 0x11A9], NFKC: [0xC4F2], NFKD: [0x110A, 0x1173, 0x11A9] }, +{ source: [0xC4F3], NFC: [0xC4F3], NFD: [0x110A, 0x1173, 0x11AA], NFKC: [0xC4F3], NFKD: [0x110A, 0x1173, 0x11AA] }, +{ source: [0xC4F4], NFC: [0xC4F4], NFD: [0x110A, 0x1173, 0x11AB], NFKC: [0xC4F4], NFKD: [0x110A, 0x1173, 0x11AB] }, +{ source: [0xC4F5], NFC: [0xC4F5], NFD: [0x110A, 0x1173, 0x11AC], NFKC: [0xC4F5], NFKD: [0x110A, 0x1173, 0x11AC] }, +{ source: [0xC4F6], NFC: [0xC4F6], NFD: [0x110A, 0x1173, 0x11AD], NFKC: [0xC4F6], NFKD: [0x110A, 0x1173, 0x11AD] }, +{ source: [0xC4F7], NFC: [0xC4F7], NFD: [0x110A, 0x1173, 0x11AE], NFKC: [0xC4F7], NFKD: [0x110A, 0x1173, 0x11AE] }, +{ source: [0xC4F8], NFC: [0xC4F8], NFD: [0x110A, 0x1173, 0x11AF], NFKC: [0xC4F8], NFKD: [0x110A, 0x1173, 0x11AF] }, +{ source: [0xC4F9], NFC: [0xC4F9], NFD: [0x110A, 0x1173, 0x11B0], NFKC: [0xC4F9], NFKD: [0x110A, 0x1173, 0x11B0] }, +{ source: [0xC4FA], NFC: [0xC4FA], NFD: [0x110A, 0x1173, 0x11B1], NFKC: [0xC4FA], NFKD: [0x110A, 0x1173, 0x11B1] }, +{ source: [0xC4FB], NFC: [0xC4FB], NFD: [0x110A, 0x1173, 0x11B2], NFKC: [0xC4FB], NFKD: [0x110A, 0x1173, 0x11B2] }, +{ source: [0xC4FC], NFC: [0xC4FC], NFD: [0x110A, 0x1173, 0x11B3], NFKC: [0xC4FC], NFKD: [0x110A, 0x1173, 0x11B3] }, +{ source: [0xC4FD], NFC: [0xC4FD], NFD: [0x110A, 0x1173, 0x11B4], NFKC: [0xC4FD], NFKD: [0x110A, 0x1173, 0x11B4] }, +{ source: [0xC4FE], NFC: [0xC4FE], NFD: [0x110A, 0x1173, 0x11B5], NFKC: [0xC4FE], NFKD: [0x110A, 0x1173, 0x11B5] }, +{ source: [0xC4FF], NFC: [0xC4FF], NFD: [0x110A, 0x1173, 0x11B6], NFKC: [0xC4FF], NFKD: [0x110A, 0x1173, 0x11B6] }, +{ source: [0xC500], NFC: [0xC500], NFD: [0x110A, 0x1173, 0x11B7], NFKC: [0xC500], NFKD: [0x110A, 0x1173, 0x11B7] }, +{ source: [0xC501], NFC: [0xC501], NFD: [0x110A, 0x1173, 0x11B8], NFKC: [0xC501], NFKD: [0x110A, 0x1173, 0x11B8] }, +{ source: [0xC502], NFC: [0xC502], NFD: [0x110A, 0x1173, 0x11B9], NFKC: [0xC502], NFKD: [0x110A, 0x1173, 0x11B9] }, +{ source: [0xC503], NFC: [0xC503], NFD: [0x110A, 0x1173, 0x11BA], NFKC: [0xC503], NFKD: [0x110A, 0x1173, 0x11BA] }, +{ source: [0xC504], NFC: [0xC504], NFD: [0x110A, 0x1173, 0x11BB], NFKC: [0xC504], NFKD: [0x110A, 0x1173, 0x11BB] }, +{ source: [0xC505], NFC: [0xC505], NFD: [0x110A, 0x1173, 0x11BC], NFKC: [0xC505], NFKD: [0x110A, 0x1173, 0x11BC] }, +{ source: [0xC506], NFC: [0xC506], NFD: [0x110A, 0x1173, 0x11BD], NFKC: [0xC506], NFKD: [0x110A, 0x1173, 0x11BD] }, +{ source: [0xC507], NFC: [0xC507], NFD: [0x110A, 0x1173, 0x11BE], NFKC: [0xC507], NFKD: [0x110A, 0x1173, 0x11BE] }, +{ source: [0xC508], NFC: [0xC508], NFD: [0x110A, 0x1173, 0x11BF], NFKC: [0xC508], NFKD: [0x110A, 0x1173, 0x11BF] }, +{ source: [0xC509], NFC: [0xC509], NFD: [0x110A, 0x1173, 0x11C0], NFKC: [0xC509], NFKD: [0x110A, 0x1173, 0x11C0] }, +{ source: [0xC50A], NFC: [0xC50A], NFD: [0x110A, 0x1173, 0x11C1], NFKC: [0xC50A], NFKD: [0x110A, 0x1173, 0x11C1] }, +{ source: [0xC50B], NFC: [0xC50B], NFD: [0x110A, 0x1173, 0x11C2], NFKC: [0xC50B], NFKD: [0x110A, 0x1173, 0x11C2] }, +{ source: [0xC50C], NFC: [0xC50C], NFD: [0x110A, 0x1174], NFKC: [0xC50C], NFKD: [0x110A, 0x1174] }, +{ source: [0xC50D], NFC: [0xC50D], NFD: [0x110A, 0x1174, 0x11A8], NFKC: [0xC50D], NFKD: [0x110A, 0x1174, 0x11A8] }, +{ source: [0xC50E], NFC: [0xC50E], NFD: [0x110A, 0x1174, 0x11A9], NFKC: [0xC50E], NFKD: [0x110A, 0x1174, 0x11A9] }, +{ source: [0xC50F], NFC: [0xC50F], NFD: [0x110A, 0x1174, 0x11AA], NFKC: [0xC50F], NFKD: [0x110A, 0x1174, 0x11AA] }, +{ source: [0xC510], NFC: [0xC510], NFD: [0x110A, 0x1174, 0x11AB], NFKC: [0xC510], NFKD: [0x110A, 0x1174, 0x11AB] }, +{ source: [0xC511], NFC: [0xC511], NFD: [0x110A, 0x1174, 0x11AC], NFKC: [0xC511], NFKD: [0x110A, 0x1174, 0x11AC] }, +{ source: [0xC512], NFC: [0xC512], NFD: [0x110A, 0x1174, 0x11AD], NFKC: [0xC512], NFKD: [0x110A, 0x1174, 0x11AD] }, +{ source: [0xC513], NFC: [0xC513], NFD: [0x110A, 0x1174, 0x11AE], NFKC: [0xC513], NFKD: [0x110A, 0x1174, 0x11AE] }, +{ source: [0xC514], NFC: [0xC514], NFD: [0x110A, 0x1174, 0x11AF], NFKC: [0xC514], NFKD: [0x110A, 0x1174, 0x11AF] }, +{ source: [0xC515], NFC: [0xC515], NFD: [0x110A, 0x1174, 0x11B0], NFKC: [0xC515], NFKD: [0x110A, 0x1174, 0x11B0] }, +{ source: [0xC516], NFC: [0xC516], NFD: [0x110A, 0x1174, 0x11B1], NFKC: [0xC516], NFKD: [0x110A, 0x1174, 0x11B1] }, +{ source: [0xC517], NFC: [0xC517], NFD: [0x110A, 0x1174, 0x11B2], NFKC: [0xC517], NFKD: [0x110A, 0x1174, 0x11B2] }, +{ source: [0xC518], NFC: [0xC518], NFD: [0x110A, 0x1174, 0x11B3], NFKC: [0xC518], NFKD: [0x110A, 0x1174, 0x11B3] }, +{ source: [0xC519], NFC: [0xC519], NFD: [0x110A, 0x1174, 0x11B4], NFKC: [0xC519], NFKD: [0x110A, 0x1174, 0x11B4] }, +{ source: [0xC51A], NFC: [0xC51A], NFD: [0x110A, 0x1174, 0x11B5], NFKC: [0xC51A], NFKD: [0x110A, 0x1174, 0x11B5] }, +{ source: [0xC51B], NFC: [0xC51B], NFD: [0x110A, 0x1174, 0x11B6], NFKC: [0xC51B], NFKD: [0x110A, 0x1174, 0x11B6] }, +{ source: [0xC51C], NFC: [0xC51C], NFD: [0x110A, 0x1174, 0x11B7], NFKC: [0xC51C], NFKD: [0x110A, 0x1174, 0x11B7] }, +{ source: [0xC51D], NFC: [0xC51D], NFD: [0x110A, 0x1174, 0x11B8], NFKC: [0xC51D], NFKD: [0x110A, 0x1174, 0x11B8] }, +{ source: [0xC51E], NFC: [0xC51E], NFD: [0x110A, 0x1174, 0x11B9], NFKC: [0xC51E], NFKD: [0x110A, 0x1174, 0x11B9] }, +{ source: [0xC51F], NFC: [0xC51F], NFD: [0x110A, 0x1174, 0x11BA], NFKC: [0xC51F], NFKD: [0x110A, 0x1174, 0x11BA] }, +{ source: [0xC520], NFC: [0xC520], NFD: [0x110A, 0x1174, 0x11BB], NFKC: [0xC520], NFKD: [0x110A, 0x1174, 0x11BB] }, +{ source: [0xC521], NFC: [0xC521], NFD: [0x110A, 0x1174, 0x11BC], NFKC: [0xC521], NFKD: [0x110A, 0x1174, 0x11BC] }, +{ source: [0xC522], NFC: [0xC522], NFD: [0x110A, 0x1174, 0x11BD], NFKC: [0xC522], NFKD: [0x110A, 0x1174, 0x11BD] }, +{ source: [0xC523], NFC: [0xC523], NFD: [0x110A, 0x1174, 0x11BE], NFKC: [0xC523], NFKD: [0x110A, 0x1174, 0x11BE] }, +{ source: [0xC524], NFC: [0xC524], NFD: [0x110A, 0x1174, 0x11BF], NFKC: [0xC524], NFKD: [0x110A, 0x1174, 0x11BF] }, +{ source: [0xC525], NFC: [0xC525], NFD: [0x110A, 0x1174, 0x11C0], NFKC: [0xC525], NFKD: [0x110A, 0x1174, 0x11C0] }, +{ source: [0xC526], NFC: [0xC526], NFD: [0x110A, 0x1174, 0x11C1], NFKC: [0xC526], NFKD: [0x110A, 0x1174, 0x11C1] }, +{ source: [0xC527], NFC: [0xC527], NFD: [0x110A, 0x1174, 0x11C2], NFKC: [0xC527], NFKD: [0x110A, 0x1174, 0x11C2] }, +{ source: [0xC528], NFC: [0xC528], NFD: [0x110A, 0x1175], NFKC: [0xC528], NFKD: [0x110A, 0x1175] }, +{ source: [0xC529], NFC: [0xC529], NFD: [0x110A, 0x1175, 0x11A8], NFKC: [0xC529], NFKD: [0x110A, 0x1175, 0x11A8] }, +{ source: [0xC52A], NFC: [0xC52A], NFD: [0x110A, 0x1175, 0x11A9], NFKC: [0xC52A], NFKD: [0x110A, 0x1175, 0x11A9] }, +{ source: [0xC52B], NFC: [0xC52B], NFD: [0x110A, 0x1175, 0x11AA], NFKC: [0xC52B], NFKD: [0x110A, 0x1175, 0x11AA] }, +{ source: [0xC52C], NFC: [0xC52C], NFD: [0x110A, 0x1175, 0x11AB], NFKC: [0xC52C], NFKD: [0x110A, 0x1175, 0x11AB] }, +{ source: [0xC52D], NFC: [0xC52D], NFD: [0x110A, 0x1175, 0x11AC], NFKC: [0xC52D], NFKD: [0x110A, 0x1175, 0x11AC] }, +{ source: [0xC52E], NFC: [0xC52E], NFD: [0x110A, 0x1175, 0x11AD], NFKC: [0xC52E], NFKD: [0x110A, 0x1175, 0x11AD] }, +{ source: [0xC52F], NFC: [0xC52F], NFD: [0x110A, 0x1175, 0x11AE], NFKC: [0xC52F], NFKD: [0x110A, 0x1175, 0x11AE] }, +{ source: [0xC530], NFC: [0xC530], NFD: [0x110A, 0x1175, 0x11AF], NFKC: [0xC530], NFKD: [0x110A, 0x1175, 0x11AF] }, +{ source: [0xC531], NFC: [0xC531], NFD: [0x110A, 0x1175, 0x11B0], NFKC: [0xC531], NFKD: [0x110A, 0x1175, 0x11B0] }, +{ source: [0xC532], NFC: [0xC532], NFD: [0x110A, 0x1175, 0x11B1], NFKC: [0xC532], NFKD: [0x110A, 0x1175, 0x11B1] }, +{ source: [0xC533], NFC: [0xC533], NFD: [0x110A, 0x1175, 0x11B2], NFKC: [0xC533], NFKD: [0x110A, 0x1175, 0x11B2] }, +{ source: [0xC534], NFC: [0xC534], NFD: [0x110A, 0x1175, 0x11B3], NFKC: [0xC534], NFKD: [0x110A, 0x1175, 0x11B3] }, +{ source: [0xC535], NFC: [0xC535], NFD: [0x110A, 0x1175, 0x11B4], NFKC: [0xC535], NFKD: [0x110A, 0x1175, 0x11B4] }, +{ source: [0xC536], NFC: [0xC536], NFD: [0x110A, 0x1175, 0x11B5], NFKC: [0xC536], NFKD: [0x110A, 0x1175, 0x11B5] }, +{ source: [0xC537], NFC: [0xC537], NFD: [0x110A, 0x1175, 0x11B6], NFKC: [0xC537], NFKD: [0x110A, 0x1175, 0x11B6] }, +{ source: [0xC538], NFC: [0xC538], NFD: [0x110A, 0x1175, 0x11B7], NFKC: [0xC538], NFKD: [0x110A, 0x1175, 0x11B7] }, +{ source: [0xC539], NFC: [0xC539], NFD: [0x110A, 0x1175, 0x11B8], NFKC: [0xC539], NFKD: [0x110A, 0x1175, 0x11B8] }, +{ source: [0xC53A], NFC: [0xC53A], NFD: [0x110A, 0x1175, 0x11B9], NFKC: [0xC53A], NFKD: [0x110A, 0x1175, 0x11B9] }, +{ source: [0xC53B], NFC: [0xC53B], NFD: [0x110A, 0x1175, 0x11BA], NFKC: [0xC53B], NFKD: [0x110A, 0x1175, 0x11BA] }, +{ source: [0xC53C], NFC: [0xC53C], NFD: [0x110A, 0x1175, 0x11BB], NFKC: [0xC53C], NFKD: [0x110A, 0x1175, 0x11BB] }, +{ source: [0xC53D], NFC: [0xC53D], NFD: [0x110A, 0x1175, 0x11BC], NFKC: [0xC53D], NFKD: [0x110A, 0x1175, 0x11BC] }, +{ source: [0xC53E], NFC: [0xC53E], NFD: [0x110A, 0x1175, 0x11BD], NFKC: [0xC53E], NFKD: [0x110A, 0x1175, 0x11BD] }, +{ source: [0xC53F], NFC: [0xC53F], NFD: [0x110A, 0x1175, 0x11BE], NFKC: [0xC53F], NFKD: [0x110A, 0x1175, 0x11BE] }, +{ source: [0xC540], NFC: [0xC540], NFD: [0x110A, 0x1175, 0x11BF], NFKC: [0xC540], NFKD: [0x110A, 0x1175, 0x11BF] }, +{ source: [0xC541], NFC: [0xC541], NFD: [0x110A, 0x1175, 0x11C0], NFKC: [0xC541], NFKD: [0x110A, 0x1175, 0x11C0] }, +{ source: [0xC542], NFC: [0xC542], NFD: [0x110A, 0x1175, 0x11C1], NFKC: [0xC542], NFKD: [0x110A, 0x1175, 0x11C1] }, +{ source: [0xC543], NFC: [0xC543], NFD: [0x110A, 0x1175, 0x11C2], NFKC: [0xC543], NFKD: [0x110A, 0x1175, 0x11C2] }, +{ source: [0xC544], NFC: [0xC544], NFD: [0x110B, 0x1161], NFKC: [0xC544], NFKD: [0x110B, 0x1161] }, +{ source: [0xC545], NFC: [0xC545], NFD: [0x110B, 0x1161, 0x11A8], NFKC: [0xC545], NFKD: [0x110B, 0x1161, 0x11A8] }, +{ source: [0xC546], NFC: [0xC546], NFD: [0x110B, 0x1161, 0x11A9], NFKC: [0xC546], NFKD: [0x110B, 0x1161, 0x11A9] }, +{ source: [0xC547], NFC: [0xC547], NFD: [0x110B, 0x1161, 0x11AA], NFKC: [0xC547], NFKD: [0x110B, 0x1161, 0x11AA] }, +{ source: [0xC548], NFC: [0xC548], NFD: [0x110B, 0x1161, 0x11AB], NFKC: [0xC548], NFKD: [0x110B, 0x1161, 0x11AB] }, +{ source: [0xC549], NFC: [0xC549], NFD: [0x110B, 0x1161, 0x11AC], NFKC: [0xC549], NFKD: [0x110B, 0x1161, 0x11AC] }, +{ source: [0xC54A], NFC: [0xC54A], NFD: [0x110B, 0x1161, 0x11AD], NFKC: [0xC54A], NFKD: [0x110B, 0x1161, 0x11AD] }, +{ source: [0xC54B], NFC: [0xC54B], NFD: [0x110B, 0x1161, 0x11AE], NFKC: [0xC54B], NFKD: [0x110B, 0x1161, 0x11AE] }, +{ source: [0xC54C], NFC: [0xC54C], NFD: [0x110B, 0x1161, 0x11AF], NFKC: [0xC54C], NFKD: [0x110B, 0x1161, 0x11AF] }, +{ source: [0xC54D], NFC: [0xC54D], NFD: [0x110B, 0x1161, 0x11B0], NFKC: [0xC54D], NFKD: [0x110B, 0x1161, 0x11B0] }, +{ source: [0xC54E], NFC: [0xC54E], NFD: [0x110B, 0x1161, 0x11B1], NFKC: [0xC54E], NFKD: [0x110B, 0x1161, 0x11B1] }, +{ source: [0xC54F], NFC: [0xC54F], NFD: [0x110B, 0x1161, 0x11B2], NFKC: [0xC54F], NFKD: [0x110B, 0x1161, 0x11B2] }, +{ source: [0xC550], NFC: [0xC550], NFD: [0x110B, 0x1161, 0x11B3], NFKC: [0xC550], NFKD: [0x110B, 0x1161, 0x11B3] }, +{ source: [0xC551], NFC: [0xC551], NFD: [0x110B, 0x1161, 0x11B4], NFKC: [0xC551], NFKD: [0x110B, 0x1161, 0x11B4] }, +{ source: [0xC552], NFC: [0xC552], NFD: [0x110B, 0x1161, 0x11B5], NFKC: [0xC552], NFKD: [0x110B, 0x1161, 0x11B5] }, +{ source: [0xC553], NFC: [0xC553], NFD: [0x110B, 0x1161, 0x11B6], NFKC: [0xC553], NFKD: [0x110B, 0x1161, 0x11B6] }, +{ source: [0xC554], NFC: [0xC554], NFD: [0x110B, 0x1161, 0x11B7], NFKC: [0xC554], NFKD: [0x110B, 0x1161, 0x11B7] }, +{ source: [0xC555], NFC: [0xC555], NFD: [0x110B, 0x1161, 0x11B8], NFKC: [0xC555], NFKD: [0x110B, 0x1161, 0x11B8] }, +{ source: [0xC556], NFC: [0xC556], NFD: [0x110B, 0x1161, 0x11B9], NFKC: [0xC556], NFKD: [0x110B, 0x1161, 0x11B9] }, +{ source: [0xC557], NFC: [0xC557], NFD: [0x110B, 0x1161, 0x11BA], NFKC: [0xC557], NFKD: [0x110B, 0x1161, 0x11BA] }, +{ source: [0xC558], NFC: [0xC558], NFD: [0x110B, 0x1161, 0x11BB], NFKC: [0xC558], NFKD: [0x110B, 0x1161, 0x11BB] }, +{ source: [0xC559], NFC: [0xC559], NFD: [0x110B, 0x1161, 0x11BC], NFKC: [0xC559], NFKD: [0x110B, 0x1161, 0x11BC] }, +{ source: [0xC55A], NFC: [0xC55A], NFD: [0x110B, 0x1161, 0x11BD], NFKC: [0xC55A], NFKD: [0x110B, 0x1161, 0x11BD] }, +{ source: [0xC55B], NFC: [0xC55B], NFD: [0x110B, 0x1161, 0x11BE], NFKC: [0xC55B], NFKD: [0x110B, 0x1161, 0x11BE] }, +{ source: [0xC55C], NFC: [0xC55C], NFD: [0x110B, 0x1161, 0x11BF], NFKC: [0xC55C], NFKD: [0x110B, 0x1161, 0x11BF] }, +{ source: [0xC55D], NFC: [0xC55D], NFD: [0x110B, 0x1161, 0x11C0], NFKC: [0xC55D], NFKD: [0x110B, 0x1161, 0x11C0] }, +{ source: [0xC55E], NFC: [0xC55E], NFD: [0x110B, 0x1161, 0x11C1], NFKC: [0xC55E], NFKD: [0x110B, 0x1161, 0x11C1] }, +{ source: [0xC55F], NFC: [0xC55F], NFD: [0x110B, 0x1161, 0x11C2], NFKC: [0xC55F], NFKD: [0x110B, 0x1161, 0x11C2] }, +{ source: [0xC560], NFC: [0xC560], NFD: [0x110B, 0x1162], NFKC: [0xC560], NFKD: [0x110B, 0x1162] }, +{ source: [0xC561], NFC: [0xC561], NFD: [0x110B, 0x1162, 0x11A8], NFKC: [0xC561], NFKD: [0x110B, 0x1162, 0x11A8] }, +{ source: [0xC562], NFC: [0xC562], NFD: [0x110B, 0x1162, 0x11A9], NFKC: [0xC562], NFKD: [0x110B, 0x1162, 0x11A9] }, +{ source: [0xC563], NFC: [0xC563], NFD: [0x110B, 0x1162, 0x11AA], NFKC: [0xC563], NFKD: [0x110B, 0x1162, 0x11AA] }, +{ source: [0xC564], NFC: [0xC564], NFD: [0x110B, 0x1162, 0x11AB], NFKC: [0xC564], NFKD: [0x110B, 0x1162, 0x11AB] }, +{ source: [0xC565], NFC: [0xC565], NFD: [0x110B, 0x1162, 0x11AC], NFKC: [0xC565], NFKD: [0x110B, 0x1162, 0x11AC] }, +{ source: [0xC566], NFC: [0xC566], NFD: [0x110B, 0x1162, 0x11AD], NFKC: [0xC566], NFKD: [0x110B, 0x1162, 0x11AD] }, +{ source: [0xC567], NFC: [0xC567], NFD: [0x110B, 0x1162, 0x11AE], NFKC: [0xC567], NFKD: [0x110B, 0x1162, 0x11AE] }, +{ source: [0xC568], NFC: [0xC568], NFD: [0x110B, 0x1162, 0x11AF], NFKC: [0xC568], NFKD: [0x110B, 0x1162, 0x11AF] }, +{ source: [0xC569], NFC: [0xC569], NFD: [0x110B, 0x1162, 0x11B0], NFKC: [0xC569], NFKD: [0x110B, 0x1162, 0x11B0] }, +{ source: [0xC56A], NFC: [0xC56A], NFD: [0x110B, 0x1162, 0x11B1], NFKC: [0xC56A], NFKD: [0x110B, 0x1162, 0x11B1] }, +{ source: [0xC56B], NFC: [0xC56B], NFD: [0x110B, 0x1162, 0x11B2], NFKC: [0xC56B], NFKD: [0x110B, 0x1162, 0x11B2] }, +{ source: [0xC56C], NFC: [0xC56C], NFD: [0x110B, 0x1162, 0x11B3], NFKC: [0xC56C], NFKD: [0x110B, 0x1162, 0x11B3] }, +{ source: [0xC56D], NFC: [0xC56D], NFD: [0x110B, 0x1162, 0x11B4], NFKC: [0xC56D], NFKD: [0x110B, 0x1162, 0x11B4] }, +{ source: [0xC56E], NFC: [0xC56E], NFD: [0x110B, 0x1162, 0x11B5], NFKC: [0xC56E], NFKD: [0x110B, 0x1162, 0x11B5] }, +{ source: [0xC56F], NFC: [0xC56F], NFD: [0x110B, 0x1162, 0x11B6], NFKC: [0xC56F], NFKD: [0x110B, 0x1162, 0x11B6] }, +{ source: [0xC570], NFC: [0xC570], NFD: [0x110B, 0x1162, 0x11B7], NFKC: [0xC570], NFKD: [0x110B, 0x1162, 0x11B7] }, +{ source: [0xC571], NFC: [0xC571], NFD: [0x110B, 0x1162, 0x11B8], NFKC: [0xC571], NFKD: [0x110B, 0x1162, 0x11B8] }, +{ source: [0xC572], NFC: [0xC572], NFD: [0x110B, 0x1162, 0x11B9], NFKC: [0xC572], NFKD: [0x110B, 0x1162, 0x11B9] }, +{ source: [0xC573], NFC: [0xC573], NFD: [0x110B, 0x1162, 0x11BA], NFKC: [0xC573], NFKD: [0x110B, 0x1162, 0x11BA] }, +{ source: [0xC574], NFC: [0xC574], NFD: [0x110B, 0x1162, 0x11BB], NFKC: [0xC574], NFKD: [0x110B, 0x1162, 0x11BB] }, +{ source: [0xC575], NFC: [0xC575], NFD: [0x110B, 0x1162, 0x11BC], NFKC: [0xC575], NFKD: [0x110B, 0x1162, 0x11BC] }, +{ source: [0xC576], NFC: [0xC576], NFD: [0x110B, 0x1162, 0x11BD], NFKC: [0xC576], NFKD: [0x110B, 0x1162, 0x11BD] }, +{ source: [0xC577], NFC: [0xC577], NFD: [0x110B, 0x1162, 0x11BE], NFKC: [0xC577], NFKD: [0x110B, 0x1162, 0x11BE] }, +{ source: [0xC578], NFC: [0xC578], NFD: [0x110B, 0x1162, 0x11BF], NFKC: [0xC578], NFKD: [0x110B, 0x1162, 0x11BF] }, +{ source: [0xC579], NFC: [0xC579], NFD: [0x110B, 0x1162, 0x11C0], NFKC: [0xC579], NFKD: [0x110B, 0x1162, 0x11C0] }, +{ source: [0xC57A], NFC: [0xC57A], NFD: [0x110B, 0x1162, 0x11C1], NFKC: [0xC57A], NFKD: [0x110B, 0x1162, 0x11C1] }, +{ source: [0xC57B], NFC: [0xC57B], NFD: [0x110B, 0x1162, 0x11C2], NFKC: [0xC57B], NFKD: [0x110B, 0x1162, 0x11C2] }, +{ source: [0xC57C], NFC: [0xC57C], NFD: [0x110B, 0x1163], NFKC: [0xC57C], NFKD: [0x110B, 0x1163] }, +{ source: [0xC57D], NFC: [0xC57D], NFD: [0x110B, 0x1163, 0x11A8], NFKC: [0xC57D], NFKD: [0x110B, 0x1163, 0x11A8] }, +{ source: [0xC57E], NFC: [0xC57E], NFD: [0x110B, 0x1163, 0x11A9], NFKC: [0xC57E], NFKD: [0x110B, 0x1163, 0x11A9] }, +{ source: [0xC57F], NFC: [0xC57F], NFD: [0x110B, 0x1163, 0x11AA], NFKC: [0xC57F], NFKD: [0x110B, 0x1163, 0x11AA] }, +{ source: [0xC580], NFC: [0xC580], NFD: [0x110B, 0x1163, 0x11AB], NFKC: [0xC580], NFKD: [0x110B, 0x1163, 0x11AB] }, +{ source: [0xC581], NFC: [0xC581], NFD: [0x110B, 0x1163, 0x11AC], NFKC: [0xC581], NFKD: [0x110B, 0x1163, 0x11AC] }, +{ source: [0xC582], NFC: [0xC582], NFD: [0x110B, 0x1163, 0x11AD], NFKC: [0xC582], NFKD: [0x110B, 0x1163, 0x11AD] }, +{ source: [0xC583], NFC: [0xC583], NFD: [0x110B, 0x1163, 0x11AE], NFKC: [0xC583], NFKD: [0x110B, 0x1163, 0x11AE] }, +{ source: [0xC584], NFC: [0xC584], NFD: [0x110B, 0x1163, 0x11AF], NFKC: [0xC584], NFKD: [0x110B, 0x1163, 0x11AF] }, +{ source: [0xC585], NFC: [0xC585], NFD: [0x110B, 0x1163, 0x11B0], NFKC: [0xC585], NFKD: [0x110B, 0x1163, 0x11B0] }, +{ source: [0xC586], NFC: [0xC586], NFD: [0x110B, 0x1163, 0x11B1], NFKC: [0xC586], NFKD: [0x110B, 0x1163, 0x11B1] }, +{ source: [0xC587], NFC: [0xC587], NFD: [0x110B, 0x1163, 0x11B2], NFKC: [0xC587], NFKD: [0x110B, 0x1163, 0x11B2] }, +{ source: [0xC588], NFC: [0xC588], NFD: [0x110B, 0x1163, 0x11B3], NFKC: [0xC588], NFKD: [0x110B, 0x1163, 0x11B3] }, +{ source: [0xC589], NFC: [0xC589], NFD: [0x110B, 0x1163, 0x11B4], NFKC: [0xC589], NFKD: [0x110B, 0x1163, 0x11B4] }, +{ source: [0xC58A], NFC: [0xC58A], NFD: [0x110B, 0x1163, 0x11B5], NFKC: [0xC58A], NFKD: [0x110B, 0x1163, 0x11B5] }, +{ source: [0xC58B], NFC: [0xC58B], NFD: [0x110B, 0x1163, 0x11B6], NFKC: [0xC58B], NFKD: [0x110B, 0x1163, 0x11B6] }, +{ source: [0xC58C], NFC: [0xC58C], NFD: [0x110B, 0x1163, 0x11B7], NFKC: [0xC58C], NFKD: [0x110B, 0x1163, 0x11B7] }, +{ source: [0xC58D], NFC: [0xC58D], NFD: [0x110B, 0x1163, 0x11B8], NFKC: [0xC58D], NFKD: [0x110B, 0x1163, 0x11B8] }, +{ source: [0xC58E], NFC: [0xC58E], NFD: [0x110B, 0x1163, 0x11B9], NFKC: [0xC58E], NFKD: [0x110B, 0x1163, 0x11B9] }, +{ source: [0xC58F], NFC: [0xC58F], NFD: [0x110B, 0x1163, 0x11BA], NFKC: [0xC58F], NFKD: [0x110B, 0x1163, 0x11BA] }, +{ source: [0xC590], NFC: [0xC590], NFD: [0x110B, 0x1163, 0x11BB], NFKC: [0xC590], NFKD: [0x110B, 0x1163, 0x11BB] }, +{ source: [0xC591], NFC: [0xC591], NFD: [0x110B, 0x1163, 0x11BC], NFKC: [0xC591], NFKD: [0x110B, 0x1163, 0x11BC] }, +{ source: [0xC592], NFC: [0xC592], NFD: [0x110B, 0x1163, 0x11BD], NFKC: [0xC592], NFKD: [0x110B, 0x1163, 0x11BD] }, +{ source: [0xC593], NFC: [0xC593], NFD: [0x110B, 0x1163, 0x11BE], NFKC: [0xC593], NFKD: [0x110B, 0x1163, 0x11BE] }, +{ source: [0xC594], NFC: [0xC594], NFD: [0x110B, 0x1163, 0x11BF], NFKC: [0xC594], NFKD: [0x110B, 0x1163, 0x11BF] }, +{ source: [0xC595], NFC: [0xC595], NFD: [0x110B, 0x1163, 0x11C0], NFKC: [0xC595], NFKD: [0x110B, 0x1163, 0x11C0] }, +{ source: [0xC596], NFC: [0xC596], NFD: [0x110B, 0x1163, 0x11C1], NFKC: [0xC596], NFKD: [0x110B, 0x1163, 0x11C1] }, +{ source: [0xC597], NFC: [0xC597], NFD: [0x110B, 0x1163, 0x11C2], NFKC: [0xC597], NFKD: [0x110B, 0x1163, 0x11C2] }, +{ source: [0xC598], NFC: [0xC598], NFD: [0x110B, 0x1164], NFKC: [0xC598], NFKD: [0x110B, 0x1164] }, +{ source: [0xC599], NFC: [0xC599], NFD: [0x110B, 0x1164, 0x11A8], NFKC: [0xC599], NFKD: [0x110B, 0x1164, 0x11A8] }, +{ source: [0xC59A], NFC: [0xC59A], NFD: [0x110B, 0x1164, 0x11A9], NFKC: [0xC59A], NFKD: [0x110B, 0x1164, 0x11A9] }, +{ source: [0xC59B], NFC: [0xC59B], NFD: [0x110B, 0x1164, 0x11AA], NFKC: [0xC59B], NFKD: [0x110B, 0x1164, 0x11AA] }, +{ source: [0xC59C], NFC: [0xC59C], NFD: [0x110B, 0x1164, 0x11AB], NFKC: [0xC59C], NFKD: [0x110B, 0x1164, 0x11AB] }, +{ source: [0xC59D], NFC: [0xC59D], NFD: [0x110B, 0x1164, 0x11AC], NFKC: [0xC59D], NFKD: [0x110B, 0x1164, 0x11AC] }, +{ source: [0xC59E], NFC: [0xC59E], NFD: [0x110B, 0x1164, 0x11AD], NFKC: [0xC59E], NFKD: [0x110B, 0x1164, 0x11AD] }, +{ source: [0xC59F], NFC: [0xC59F], NFD: [0x110B, 0x1164, 0x11AE], NFKC: [0xC59F], NFKD: [0x110B, 0x1164, 0x11AE] }, +{ source: [0xC5A0], NFC: [0xC5A0], NFD: [0x110B, 0x1164, 0x11AF], NFKC: [0xC5A0], NFKD: [0x110B, 0x1164, 0x11AF] }, +{ source: [0xC5A1], NFC: [0xC5A1], NFD: [0x110B, 0x1164, 0x11B0], NFKC: [0xC5A1], NFKD: [0x110B, 0x1164, 0x11B0] }, +{ source: [0xC5A2], NFC: [0xC5A2], NFD: [0x110B, 0x1164, 0x11B1], NFKC: [0xC5A2], NFKD: [0x110B, 0x1164, 0x11B1] }, +{ source: [0xC5A3], NFC: [0xC5A3], NFD: [0x110B, 0x1164, 0x11B2], NFKC: [0xC5A3], NFKD: [0x110B, 0x1164, 0x11B2] }, +{ source: [0xC5A4], NFC: [0xC5A4], NFD: [0x110B, 0x1164, 0x11B3], NFKC: [0xC5A4], NFKD: [0x110B, 0x1164, 0x11B3] }, +{ source: [0xC5A5], NFC: [0xC5A5], NFD: [0x110B, 0x1164, 0x11B4], NFKC: [0xC5A5], NFKD: [0x110B, 0x1164, 0x11B4] }, +{ source: [0xC5A6], NFC: [0xC5A6], NFD: [0x110B, 0x1164, 0x11B5], NFKC: [0xC5A6], NFKD: [0x110B, 0x1164, 0x11B5] }, +{ source: [0xC5A7], NFC: [0xC5A7], NFD: [0x110B, 0x1164, 0x11B6], NFKC: [0xC5A7], NFKD: [0x110B, 0x1164, 0x11B6] }, +{ source: [0xC5A8], NFC: [0xC5A8], NFD: [0x110B, 0x1164, 0x11B7], NFKC: [0xC5A8], NFKD: [0x110B, 0x1164, 0x11B7] }, +{ source: [0xC5A9], NFC: [0xC5A9], NFD: [0x110B, 0x1164, 0x11B8], NFKC: [0xC5A9], NFKD: [0x110B, 0x1164, 0x11B8] }, +{ source: [0xC5AA], NFC: [0xC5AA], NFD: [0x110B, 0x1164, 0x11B9], NFKC: [0xC5AA], NFKD: [0x110B, 0x1164, 0x11B9] }, +{ source: [0xC5AB], NFC: [0xC5AB], NFD: [0x110B, 0x1164, 0x11BA], NFKC: [0xC5AB], NFKD: [0x110B, 0x1164, 0x11BA] }, +{ source: [0xC5AC], NFC: [0xC5AC], NFD: [0x110B, 0x1164, 0x11BB], NFKC: [0xC5AC], NFKD: [0x110B, 0x1164, 0x11BB] }, +{ source: [0xC5AD], NFC: [0xC5AD], NFD: [0x110B, 0x1164, 0x11BC], NFKC: [0xC5AD], NFKD: [0x110B, 0x1164, 0x11BC] }, +{ source: [0xC5AE], NFC: [0xC5AE], NFD: [0x110B, 0x1164, 0x11BD], NFKC: [0xC5AE], NFKD: [0x110B, 0x1164, 0x11BD] }, +{ source: [0xC5AF], NFC: [0xC5AF], NFD: [0x110B, 0x1164, 0x11BE], NFKC: [0xC5AF], NFKD: [0x110B, 0x1164, 0x11BE] }, +{ source: [0xC5B0], NFC: [0xC5B0], NFD: [0x110B, 0x1164, 0x11BF], NFKC: [0xC5B0], NFKD: [0x110B, 0x1164, 0x11BF] }, +{ source: [0xC5B1], NFC: [0xC5B1], NFD: [0x110B, 0x1164, 0x11C0], NFKC: [0xC5B1], NFKD: [0x110B, 0x1164, 0x11C0] }, +{ source: [0xC5B2], NFC: [0xC5B2], NFD: [0x110B, 0x1164, 0x11C1], NFKC: [0xC5B2], NFKD: [0x110B, 0x1164, 0x11C1] }, +{ source: [0xC5B3], NFC: [0xC5B3], NFD: [0x110B, 0x1164, 0x11C2], NFKC: [0xC5B3], NFKD: [0x110B, 0x1164, 0x11C2] }, +{ source: [0xC5B4], NFC: [0xC5B4], NFD: [0x110B, 0x1165], NFKC: [0xC5B4], NFKD: [0x110B, 0x1165] }, +{ source: [0xC5B5], NFC: [0xC5B5], NFD: [0x110B, 0x1165, 0x11A8], NFKC: [0xC5B5], NFKD: [0x110B, 0x1165, 0x11A8] }, +{ source: [0xC5B6], NFC: [0xC5B6], NFD: [0x110B, 0x1165, 0x11A9], NFKC: [0xC5B6], NFKD: [0x110B, 0x1165, 0x11A9] }, +{ source: [0xC5B7], NFC: [0xC5B7], NFD: [0x110B, 0x1165, 0x11AA], NFKC: [0xC5B7], NFKD: [0x110B, 0x1165, 0x11AA] }, +{ source: [0xC5B8], NFC: [0xC5B8], NFD: [0x110B, 0x1165, 0x11AB], NFKC: [0xC5B8], NFKD: [0x110B, 0x1165, 0x11AB] }, +{ source: [0xC5B9], NFC: [0xC5B9], NFD: [0x110B, 0x1165, 0x11AC], NFKC: [0xC5B9], NFKD: [0x110B, 0x1165, 0x11AC] }, +{ source: [0xC5BA], NFC: [0xC5BA], NFD: [0x110B, 0x1165, 0x11AD], NFKC: [0xC5BA], NFKD: [0x110B, 0x1165, 0x11AD] }, +{ source: [0xC5BB], NFC: [0xC5BB], NFD: [0x110B, 0x1165, 0x11AE], NFKC: [0xC5BB], NFKD: [0x110B, 0x1165, 0x11AE] }, +{ source: [0xC5BC], NFC: [0xC5BC], NFD: [0x110B, 0x1165, 0x11AF], NFKC: [0xC5BC], NFKD: [0x110B, 0x1165, 0x11AF] }, +{ source: [0xC5BD], NFC: [0xC5BD], NFD: [0x110B, 0x1165, 0x11B0], NFKC: [0xC5BD], NFKD: [0x110B, 0x1165, 0x11B0] }, +{ source: [0xC5BE], NFC: [0xC5BE], NFD: [0x110B, 0x1165, 0x11B1], NFKC: [0xC5BE], NFKD: [0x110B, 0x1165, 0x11B1] }, +{ source: [0xC5BF], NFC: [0xC5BF], NFD: [0x110B, 0x1165, 0x11B2], NFKC: [0xC5BF], NFKD: [0x110B, 0x1165, 0x11B2] }, +{ source: [0xC5C0], NFC: [0xC5C0], NFD: [0x110B, 0x1165, 0x11B3], NFKC: [0xC5C0], NFKD: [0x110B, 0x1165, 0x11B3] }, +{ source: [0xC5C1], NFC: [0xC5C1], NFD: [0x110B, 0x1165, 0x11B4], NFKC: [0xC5C1], NFKD: [0x110B, 0x1165, 0x11B4] }, +{ source: [0xC5C2], NFC: [0xC5C2], NFD: [0x110B, 0x1165, 0x11B5], NFKC: [0xC5C2], NFKD: [0x110B, 0x1165, 0x11B5] }, +{ source: [0xC5C3], NFC: [0xC5C3], NFD: [0x110B, 0x1165, 0x11B6], NFKC: [0xC5C3], NFKD: [0x110B, 0x1165, 0x11B6] }, +{ source: [0xC5C4], NFC: [0xC5C4], NFD: [0x110B, 0x1165, 0x11B7], NFKC: [0xC5C4], NFKD: [0x110B, 0x1165, 0x11B7] }, +{ source: [0xC5C5], NFC: [0xC5C5], NFD: [0x110B, 0x1165, 0x11B8], NFKC: [0xC5C5], NFKD: [0x110B, 0x1165, 0x11B8] }, +{ source: [0xC5C6], NFC: [0xC5C6], NFD: [0x110B, 0x1165, 0x11B9], NFKC: [0xC5C6], NFKD: [0x110B, 0x1165, 0x11B9] }, +{ source: [0xC5C7], NFC: [0xC5C7], NFD: [0x110B, 0x1165, 0x11BA], NFKC: [0xC5C7], NFKD: [0x110B, 0x1165, 0x11BA] }, +{ source: [0xC5C8], NFC: [0xC5C8], NFD: [0x110B, 0x1165, 0x11BB], NFKC: [0xC5C8], NFKD: [0x110B, 0x1165, 0x11BB] }, +{ source: [0xC5C9], NFC: [0xC5C9], NFD: [0x110B, 0x1165, 0x11BC], NFKC: [0xC5C9], NFKD: [0x110B, 0x1165, 0x11BC] }, +{ source: [0xC5CA], NFC: [0xC5CA], NFD: [0x110B, 0x1165, 0x11BD], NFKC: [0xC5CA], NFKD: [0x110B, 0x1165, 0x11BD] }, +{ source: [0xC5CB], NFC: [0xC5CB], NFD: [0x110B, 0x1165, 0x11BE], NFKC: [0xC5CB], NFKD: [0x110B, 0x1165, 0x11BE] }, +{ source: [0xC5CC], NFC: [0xC5CC], NFD: [0x110B, 0x1165, 0x11BF], NFKC: [0xC5CC], NFKD: [0x110B, 0x1165, 0x11BF] }, +{ source: [0xC5CD], NFC: [0xC5CD], NFD: [0x110B, 0x1165, 0x11C0], NFKC: [0xC5CD], NFKD: [0x110B, 0x1165, 0x11C0] }, +{ source: [0xC5CE], NFC: [0xC5CE], NFD: [0x110B, 0x1165, 0x11C1], NFKC: [0xC5CE], NFKD: [0x110B, 0x1165, 0x11C1] }, +{ source: [0xC5CF], NFC: [0xC5CF], NFD: [0x110B, 0x1165, 0x11C2], NFKC: [0xC5CF], NFKD: [0x110B, 0x1165, 0x11C2] }, +{ source: [0xC5D0], NFC: [0xC5D0], NFD: [0x110B, 0x1166], NFKC: [0xC5D0], NFKD: [0x110B, 0x1166] }, +{ source: [0xC5D1], NFC: [0xC5D1], NFD: [0x110B, 0x1166, 0x11A8], NFKC: [0xC5D1], NFKD: [0x110B, 0x1166, 0x11A8] }, +{ source: [0xC5D2], NFC: [0xC5D2], NFD: [0x110B, 0x1166, 0x11A9], NFKC: [0xC5D2], NFKD: [0x110B, 0x1166, 0x11A9] }, +{ source: [0xC5D3], NFC: [0xC5D3], NFD: [0x110B, 0x1166, 0x11AA], NFKC: [0xC5D3], NFKD: [0x110B, 0x1166, 0x11AA] }, +{ source: [0xC5D4], NFC: [0xC5D4], NFD: [0x110B, 0x1166, 0x11AB], NFKC: [0xC5D4], NFKD: [0x110B, 0x1166, 0x11AB] }, +{ source: [0xC5D5], NFC: [0xC5D5], NFD: [0x110B, 0x1166, 0x11AC], NFKC: [0xC5D5], NFKD: [0x110B, 0x1166, 0x11AC] }, +{ source: [0xC5D6], NFC: [0xC5D6], NFD: [0x110B, 0x1166, 0x11AD], NFKC: [0xC5D6], NFKD: [0x110B, 0x1166, 0x11AD] }, +{ source: [0xC5D7], NFC: [0xC5D7], NFD: [0x110B, 0x1166, 0x11AE], NFKC: [0xC5D7], NFKD: [0x110B, 0x1166, 0x11AE] }, +{ source: [0xC5D8], NFC: [0xC5D8], NFD: [0x110B, 0x1166, 0x11AF], NFKC: [0xC5D8], NFKD: [0x110B, 0x1166, 0x11AF] }, +{ source: [0xC5D9], NFC: [0xC5D9], NFD: [0x110B, 0x1166, 0x11B0], NFKC: [0xC5D9], NFKD: [0x110B, 0x1166, 0x11B0] }, +{ source: [0xC5DA], NFC: [0xC5DA], NFD: [0x110B, 0x1166, 0x11B1], NFKC: [0xC5DA], NFKD: [0x110B, 0x1166, 0x11B1] }, +{ source: [0xC5DB], NFC: [0xC5DB], NFD: [0x110B, 0x1166, 0x11B2], NFKC: [0xC5DB], NFKD: [0x110B, 0x1166, 0x11B2] }, +{ source: [0xC5DC], NFC: [0xC5DC], NFD: [0x110B, 0x1166, 0x11B3], NFKC: [0xC5DC], NFKD: [0x110B, 0x1166, 0x11B3] }, +{ source: [0xC5DD], NFC: [0xC5DD], NFD: [0x110B, 0x1166, 0x11B4], NFKC: [0xC5DD], NFKD: [0x110B, 0x1166, 0x11B4] }, +{ source: [0xC5DE], NFC: [0xC5DE], NFD: [0x110B, 0x1166, 0x11B5], NFKC: [0xC5DE], NFKD: [0x110B, 0x1166, 0x11B5] }, +{ source: [0xC5DF], NFC: [0xC5DF], NFD: [0x110B, 0x1166, 0x11B6], NFKC: [0xC5DF], NFKD: [0x110B, 0x1166, 0x11B6] }, +{ source: [0xC5E0], NFC: [0xC5E0], NFD: [0x110B, 0x1166, 0x11B7], NFKC: [0xC5E0], NFKD: [0x110B, 0x1166, 0x11B7] }, +{ source: [0xC5E1], NFC: [0xC5E1], NFD: [0x110B, 0x1166, 0x11B8], NFKC: [0xC5E1], NFKD: [0x110B, 0x1166, 0x11B8] }, +{ source: [0xC5E2], NFC: [0xC5E2], NFD: [0x110B, 0x1166, 0x11B9], NFKC: [0xC5E2], NFKD: [0x110B, 0x1166, 0x11B9] }, +{ source: [0xC5E3], NFC: [0xC5E3], NFD: [0x110B, 0x1166, 0x11BA], NFKC: [0xC5E3], NFKD: [0x110B, 0x1166, 0x11BA] }, +{ source: [0xC5E4], NFC: [0xC5E4], NFD: [0x110B, 0x1166, 0x11BB], NFKC: [0xC5E4], NFKD: [0x110B, 0x1166, 0x11BB] }, +{ source: [0xC5E5], NFC: [0xC5E5], NFD: [0x110B, 0x1166, 0x11BC], NFKC: [0xC5E5], NFKD: [0x110B, 0x1166, 0x11BC] }, +{ source: [0xC5E6], NFC: [0xC5E6], NFD: [0x110B, 0x1166, 0x11BD], NFKC: [0xC5E6], NFKD: [0x110B, 0x1166, 0x11BD] }, +{ source: [0xC5E7], NFC: [0xC5E7], NFD: [0x110B, 0x1166, 0x11BE], NFKC: [0xC5E7], NFKD: [0x110B, 0x1166, 0x11BE] }, +{ source: [0xC5E8], NFC: [0xC5E8], NFD: [0x110B, 0x1166, 0x11BF], NFKC: [0xC5E8], NFKD: [0x110B, 0x1166, 0x11BF] }, +{ source: [0xC5E9], NFC: [0xC5E9], NFD: [0x110B, 0x1166, 0x11C0], NFKC: [0xC5E9], NFKD: [0x110B, 0x1166, 0x11C0] }, +{ source: [0xC5EA], NFC: [0xC5EA], NFD: [0x110B, 0x1166, 0x11C1], NFKC: [0xC5EA], NFKD: [0x110B, 0x1166, 0x11C1] }, +{ source: [0xC5EB], NFC: [0xC5EB], NFD: [0x110B, 0x1166, 0x11C2], NFKC: [0xC5EB], NFKD: [0x110B, 0x1166, 0x11C2] }, +{ source: [0xC5EC], NFC: [0xC5EC], NFD: [0x110B, 0x1167], NFKC: [0xC5EC], NFKD: [0x110B, 0x1167] }, +{ source: [0xC5ED], NFC: [0xC5ED], NFD: [0x110B, 0x1167, 0x11A8], NFKC: [0xC5ED], NFKD: [0x110B, 0x1167, 0x11A8] }, +{ source: [0xC5EE], NFC: [0xC5EE], NFD: [0x110B, 0x1167, 0x11A9], NFKC: [0xC5EE], NFKD: [0x110B, 0x1167, 0x11A9] }, +{ source: [0xC5EF], NFC: [0xC5EF], NFD: [0x110B, 0x1167, 0x11AA], NFKC: [0xC5EF], NFKD: [0x110B, 0x1167, 0x11AA] }, +{ source: [0xC5F0], NFC: [0xC5F0], NFD: [0x110B, 0x1167, 0x11AB], NFKC: [0xC5F0], NFKD: [0x110B, 0x1167, 0x11AB] }, +{ source: [0xC5F1], NFC: [0xC5F1], NFD: [0x110B, 0x1167, 0x11AC], NFKC: [0xC5F1], NFKD: [0x110B, 0x1167, 0x11AC] }, +{ source: [0xC5F2], NFC: [0xC5F2], NFD: [0x110B, 0x1167, 0x11AD], NFKC: [0xC5F2], NFKD: [0x110B, 0x1167, 0x11AD] }, +{ source: [0xC5F3], NFC: [0xC5F3], NFD: [0x110B, 0x1167, 0x11AE], NFKC: [0xC5F3], NFKD: [0x110B, 0x1167, 0x11AE] }, +{ source: [0xC5F4], NFC: [0xC5F4], NFD: [0x110B, 0x1167, 0x11AF], NFKC: [0xC5F4], NFKD: [0x110B, 0x1167, 0x11AF] }, +{ source: [0xC5F5], NFC: [0xC5F5], NFD: [0x110B, 0x1167, 0x11B0], NFKC: [0xC5F5], NFKD: [0x110B, 0x1167, 0x11B0] }, +{ source: [0xC5F6], NFC: [0xC5F6], NFD: [0x110B, 0x1167, 0x11B1], NFKC: [0xC5F6], NFKD: [0x110B, 0x1167, 0x11B1] }, +{ source: [0xC5F7], NFC: [0xC5F7], NFD: [0x110B, 0x1167, 0x11B2], NFKC: [0xC5F7], NFKD: [0x110B, 0x1167, 0x11B2] }, +{ source: [0xC5F8], NFC: [0xC5F8], NFD: [0x110B, 0x1167, 0x11B3], NFKC: [0xC5F8], NFKD: [0x110B, 0x1167, 0x11B3] }, +{ source: [0xC5F9], NFC: [0xC5F9], NFD: [0x110B, 0x1167, 0x11B4], NFKC: [0xC5F9], NFKD: [0x110B, 0x1167, 0x11B4] }, +{ source: [0xC5FA], NFC: [0xC5FA], NFD: [0x110B, 0x1167, 0x11B5], NFKC: [0xC5FA], NFKD: [0x110B, 0x1167, 0x11B5] }, +{ source: [0xC5FB], NFC: [0xC5FB], NFD: [0x110B, 0x1167, 0x11B6], NFKC: [0xC5FB], NFKD: [0x110B, 0x1167, 0x11B6] }, +{ source: [0xC5FC], NFC: [0xC5FC], NFD: [0x110B, 0x1167, 0x11B7], NFKC: [0xC5FC], NFKD: [0x110B, 0x1167, 0x11B7] }, +{ source: [0xC5FD], NFC: [0xC5FD], NFD: [0x110B, 0x1167, 0x11B8], NFKC: [0xC5FD], NFKD: [0x110B, 0x1167, 0x11B8] }, +{ source: [0xC5FE], NFC: [0xC5FE], NFD: [0x110B, 0x1167, 0x11B9], NFKC: [0xC5FE], NFKD: [0x110B, 0x1167, 0x11B9] }, +{ source: [0xC5FF], NFC: [0xC5FF], NFD: [0x110B, 0x1167, 0x11BA], NFKC: [0xC5FF], NFKD: [0x110B, 0x1167, 0x11BA] }, +{ source: [0xC600], NFC: [0xC600], NFD: [0x110B, 0x1167, 0x11BB], NFKC: [0xC600], NFKD: [0x110B, 0x1167, 0x11BB] }, +{ source: [0xC601], NFC: [0xC601], NFD: [0x110B, 0x1167, 0x11BC], NFKC: [0xC601], NFKD: [0x110B, 0x1167, 0x11BC] }, +{ source: [0xC602], NFC: [0xC602], NFD: [0x110B, 0x1167, 0x11BD], NFKC: [0xC602], NFKD: [0x110B, 0x1167, 0x11BD] }, +{ source: [0xC603], NFC: [0xC603], NFD: [0x110B, 0x1167, 0x11BE], NFKC: [0xC603], NFKD: [0x110B, 0x1167, 0x11BE] }, +{ source: [0xC604], NFC: [0xC604], NFD: [0x110B, 0x1167, 0x11BF], NFKC: [0xC604], NFKD: [0x110B, 0x1167, 0x11BF] }, +{ source: [0xC605], NFC: [0xC605], NFD: [0x110B, 0x1167, 0x11C0], NFKC: [0xC605], NFKD: [0x110B, 0x1167, 0x11C0] }, +{ source: [0xC606], NFC: [0xC606], NFD: [0x110B, 0x1167, 0x11C1], NFKC: [0xC606], NFKD: [0x110B, 0x1167, 0x11C1] }, +{ source: [0xC607], NFC: [0xC607], NFD: [0x110B, 0x1167, 0x11C2], NFKC: [0xC607], NFKD: [0x110B, 0x1167, 0x11C2] }, +{ source: [0xC608], NFC: [0xC608], NFD: [0x110B, 0x1168], NFKC: [0xC608], NFKD: [0x110B, 0x1168] }, +{ source: [0xC609], NFC: [0xC609], NFD: [0x110B, 0x1168, 0x11A8], NFKC: [0xC609], NFKD: [0x110B, 0x1168, 0x11A8] }, +{ source: [0xC60A], NFC: [0xC60A], NFD: [0x110B, 0x1168, 0x11A9], NFKC: [0xC60A], NFKD: [0x110B, 0x1168, 0x11A9] }, +{ source: [0xC60B], NFC: [0xC60B], NFD: [0x110B, 0x1168, 0x11AA], NFKC: [0xC60B], NFKD: [0x110B, 0x1168, 0x11AA] }, +{ source: [0xC60C], NFC: [0xC60C], NFD: [0x110B, 0x1168, 0x11AB], NFKC: [0xC60C], NFKD: [0x110B, 0x1168, 0x11AB] }, +{ source: [0xC60D], NFC: [0xC60D], NFD: [0x110B, 0x1168, 0x11AC], NFKC: [0xC60D], NFKD: [0x110B, 0x1168, 0x11AC] }, +{ source: [0xC60E], NFC: [0xC60E], NFD: [0x110B, 0x1168, 0x11AD], NFKC: [0xC60E], NFKD: [0x110B, 0x1168, 0x11AD] }, +{ source: [0xC60F], NFC: [0xC60F], NFD: [0x110B, 0x1168, 0x11AE], NFKC: [0xC60F], NFKD: [0x110B, 0x1168, 0x11AE] }, +{ source: [0xC610], NFC: [0xC610], NFD: [0x110B, 0x1168, 0x11AF], NFKC: [0xC610], NFKD: [0x110B, 0x1168, 0x11AF] }, +{ source: [0xC611], NFC: [0xC611], NFD: [0x110B, 0x1168, 0x11B0], NFKC: [0xC611], NFKD: [0x110B, 0x1168, 0x11B0] }, +{ source: [0xC612], NFC: [0xC612], NFD: [0x110B, 0x1168, 0x11B1], NFKC: [0xC612], NFKD: [0x110B, 0x1168, 0x11B1] }, +{ source: [0xC613], NFC: [0xC613], NFD: [0x110B, 0x1168, 0x11B2], NFKC: [0xC613], NFKD: [0x110B, 0x1168, 0x11B2] }, +{ source: [0xC614], NFC: [0xC614], NFD: [0x110B, 0x1168, 0x11B3], NFKC: [0xC614], NFKD: [0x110B, 0x1168, 0x11B3] }, +{ source: [0xC615], NFC: [0xC615], NFD: [0x110B, 0x1168, 0x11B4], NFKC: [0xC615], NFKD: [0x110B, 0x1168, 0x11B4] }, +{ source: [0xC616], NFC: [0xC616], NFD: [0x110B, 0x1168, 0x11B5], NFKC: [0xC616], NFKD: [0x110B, 0x1168, 0x11B5] }, +{ source: [0xC617], NFC: [0xC617], NFD: [0x110B, 0x1168, 0x11B6], NFKC: [0xC617], NFKD: [0x110B, 0x1168, 0x11B6] }, +{ source: [0xC618], NFC: [0xC618], NFD: [0x110B, 0x1168, 0x11B7], NFKC: [0xC618], NFKD: [0x110B, 0x1168, 0x11B7] }, +{ source: [0xC619], NFC: [0xC619], NFD: [0x110B, 0x1168, 0x11B8], NFKC: [0xC619], NFKD: [0x110B, 0x1168, 0x11B8] }, +{ source: [0xC61A], NFC: [0xC61A], NFD: [0x110B, 0x1168, 0x11B9], NFKC: [0xC61A], NFKD: [0x110B, 0x1168, 0x11B9] }, +{ source: [0xC61B], NFC: [0xC61B], NFD: [0x110B, 0x1168, 0x11BA], NFKC: [0xC61B], NFKD: [0x110B, 0x1168, 0x11BA] }, +{ source: [0xC61C], NFC: [0xC61C], NFD: [0x110B, 0x1168, 0x11BB], NFKC: [0xC61C], NFKD: [0x110B, 0x1168, 0x11BB] }, +{ source: [0xC61D], NFC: [0xC61D], NFD: [0x110B, 0x1168, 0x11BC], NFKC: [0xC61D], NFKD: [0x110B, 0x1168, 0x11BC] }, +{ source: [0xC61E], NFC: [0xC61E], NFD: [0x110B, 0x1168, 0x11BD], NFKC: [0xC61E], NFKD: [0x110B, 0x1168, 0x11BD] }, +{ source: [0xC61F], NFC: [0xC61F], NFD: [0x110B, 0x1168, 0x11BE], NFKC: [0xC61F], NFKD: [0x110B, 0x1168, 0x11BE] }, +{ source: [0xC620], NFC: [0xC620], NFD: [0x110B, 0x1168, 0x11BF], NFKC: [0xC620], NFKD: [0x110B, 0x1168, 0x11BF] }, +{ source: [0xC621], NFC: [0xC621], NFD: [0x110B, 0x1168, 0x11C0], NFKC: [0xC621], NFKD: [0x110B, 0x1168, 0x11C0] }, +{ source: [0xC622], NFC: [0xC622], NFD: [0x110B, 0x1168, 0x11C1], NFKC: [0xC622], NFKD: [0x110B, 0x1168, 0x11C1] }, +{ source: [0xC623], NFC: [0xC623], NFD: [0x110B, 0x1168, 0x11C2], NFKC: [0xC623], NFKD: [0x110B, 0x1168, 0x11C2] }, +{ source: [0xC624], NFC: [0xC624], NFD: [0x110B, 0x1169], NFKC: [0xC624], NFKD: [0x110B, 0x1169] }, +{ source: [0xC625], NFC: [0xC625], NFD: [0x110B, 0x1169, 0x11A8], NFKC: [0xC625], NFKD: [0x110B, 0x1169, 0x11A8] }, +{ source: [0xC626], NFC: [0xC626], NFD: [0x110B, 0x1169, 0x11A9], NFKC: [0xC626], NFKD: [0x110B, 0x1169, 0x11A9] }, +{ source: [0xC627], NFC: [0xC627], NFD: [0x110B, 0x1169, 0x11AA], NFKC: [0xC627], NFKD: [0x110B, 0x1169, 0x11AA] }, +{ source: [0xC628], NFC: [0xC628], NFD: [0x110B, 0x1169, 0x11AB], NFKC: [0xC628], NFKD: [0x110B, 0x1169, 0x11AB] }, +{ source: [0xC629], NFC: [0xC629], NFD: [0x110B, 0x1169, 0x11AC], NFKC: [0xC629], NFKD: [0x110B, 0x1169, 0x11AC] }, +{ source: [0xC62A], NFC: [0xC62A], NFD: [0x110B, 0x1169, 0x11AD], NFKC: [0xC62A], NFKD: [0x110B, 0x1169, 0x11AD] }, +{ source: [0xC62B], NFC: [0xC62B], NFD: [0x110B, 0x1169, 0x11AE], NFKC: [0xC62B], NFKD: [0x110B, 0x1169, 0x11AE] }, +{ source: [0xC62C], NFC: [0xC62C], NFD: [0x110B, 0x1169, 0x11AF], NFKC: [0xC62C], NFKD: [0x110B, 0x1169, 0x11AF] }, +{ source: [0xC62D], NFC: [0xC62D], NFD: [0x110B, 0x1169, 0x11B0], NFKC: [0xC62D], NFKD: [0x110B, 0x1169, 0x11B0] }, +{ source: [0xC62E], NFC: [0xC62E], NFD: [0x110B, 0x1169, 0x11B1], NFKC: [0xC62E], NFKD: [0x110B, 0x1169, 0x11B1] }, +{ source: [0xC62F], NFC: [0xC62F], NFD: [0x110B, 0x1169, 0x11B2], NFKC: [0xC62F], NFKD: [0x110B, 0x1169, 0x11B2] }, +{ source: [0xC630], NFC: [0xC630], NFD: [0x110B, 0x1169, 0x11B3], NFKC: [0xC630], NFKD: [0x110B, 0x1169, 0x11B3] }, +{ source: [0xC631], NFC: [0xC631], NFD: [0x110B, 0x1169, 0x11B4], NFKC: [0xC631], NFKD: [0x110B, 0x1169, 0x11B4] }, +{ source: [0xC632], NFC: [0xC632], NFD: [0x110B, 0x1169, 0x11B5], NFKC: [0xC632], NFKD: [0x110B, 0x1169, 0x11B5] }, +{ source: [0xC633], NFC: [0xC633], NFD: [0x110B, 0x1169, 0x11B6], NFKC: [0xC633], NFKD: [0x110B, 0x1169, 0x11B6] }, +{ source: [0xC634], NFC: [0xC634], NFD: [0x110B, 0x1169, 0x11B7], NFKC: [0xC634], NFKD: [0x110B, 0x1169, 0x11B7] }, +{ source: [0xC635], NFC: [0xC635], NFD: [0x110B, 0x1169, 0x11B8], NFKC: [0xC635], NFKD: [0x110B, 0x1169, 0x11B8] }, +{ source: [0xC636], NFC: [0xC636], NFD: [0x110B, 0x1169, 0x11B9], NFKC: [0xC636], NFKD: [0x110B, 0x1169, 0x11B9] }, +{ source: [0xC637], NFC: [0xC637], NFD: [0x110B, 0x1169, 0x11BA], NFKC: [0xC637], NFKD: [0x110B, 0x1169, 0x11BA] }, +{ source: [0xC638], NFC: [0xC638], NFD: [0x110B, 0x1169, 0x11BB], NFKC: [0xC638], NFKD: [0x110B, 0x1169, 0x11BB] }, +{ source: [0xC639], NFC: [0xC639], NFD: [0x110B, 0x1169, 0x11BC], NFKC: [0xC639], NFKD: [0x110B, 0x1169, 0x11BC] }, +{ source: [0xC63A], NFC: [0xC63A], NFD: [0x110B, 0x1169, 0x11BD], NFKC: [0xC63A], NFKD: [0x110B, 0x1169, 0x11BD] }, +{ source: [0xC63B], NFC: [0xC63B], NFD: [0x110B, 0x1169, 0x11BE], NFKC: [0xC63B], NFKD: [0x110B, 0x1169, 0x11BE] }, +{ source: [0xC63C], NFC: [0xC63C], NFD: [0x110B, 0x1169, 0x11BF], NFKC: [0xC63C], NFKD: [0x110B, 0x1169, 0x11BF] }, +{ source: [0xC63D], NFC: [0xC63D], NFD: [0x110B, 0x1169, 0x11C0], NFKC: [0xC63D], NFKD: [0x110B, 0x1169, 0x11C0] }, +{ source: [0xC63E], NFC: [0xC63E], NFD: [0x110B, 0x1169, 0x11C1], NFKC: [0xC63E], NFKD: [0x110B, 0x1169, 0x11C1] }, +{ source: [0xC63F], NFC: [0xC63F], NFD: [0x110B, 0x1169, 0x11C2], NFKC: [0xC63F], NFKD: [0x110B, 0x1169, 0x11C2] }, +{ source: [0xC640], NFC: [0xC640], NFD: [0x110B, 0x116A], NFKC: [0xC640], NFKD: [0x110B, 0x116A] }, +{ source: [0xC641], NFC: [0xC641], NFD: [0x110B, 0x116A, 0x11A8], NFKC: [0xC641], NFKD: [0x110B, 0x116A, 0x11A8] }, +{ source: [0xC642], NFC: [0xC642], NFD: [0x110B, 0x116A, 0x11A9], NFKC: [0xC642], NFKD: [0x110B, 0x116A, 0x11A9] }, +{ source: [0xC643], NFC: [0xC643], NFD: [0x110B, 0x116A, 0x11AA], NFKC: [0xC643], NFKD: [0x110B, 0x116A, 0x11AA] }, +{ source: [0xC644], NFC: [0xC644], NFD: [0x110B, 0x116A, 0x11AB], NFKC: [0xC644], NFKD: [0x110B, 0x116A, 0x11AB] }, +{ source: [0xC645], NFC: [0xC645], NFD: [0x110B, 0x116A, 0x11AC], NFKC: [0xC645], NFKD: [0x110B, 0x116A, 0x11AC] }, +{ source: [0xC646], NFC: [0xC646], NFD: [0x110B, 0x116A, 0x11AD], NFKC: [0xC646], NFKD: [0x110B, 0x116A, 0x11AD] }, +{ source: [0xC647], NFC: [0xC647], NFD: [0x110B, 0x116A, 0x11AE], NFKC: [0xC647], NFKD: [0x110B, 0x116A, 0x11AE] }, +{ source: [0xC648], NFC: [0xC648], NFD: [0x110B, 0x116A, 0x11AF], NFKC: [0xC648], NFKD: [0x110B, 0x116A, 0x11AF] }, +{ source: [0xC649], NFC: [0xC649], NFD: [0x110B, 0x116A, 0x11B0], NFKC: [0xC649], NFKD: [0x110B, 0x116A, 0x11B0] }, +{ source: [0xC64A], NFC: [0xC64A], NFD: [0x110B, 0x116A, 0x11B1], NFKC: [0xC64A], NFKD: [0x110B, 0x116A, 0x11B1] }, +{ source: [0xC64B], NFC: [0xC64B], NFD: [0x110B, 0x116A, 0x11B2], NFKC: [0xC64B], NFKD: [0x110B, 0x116A, 0x11B2] }, +{ source: [0xC64C], NFC: [0xC64C], NFD: [0x110B, 0x116A, 0x11B3], NFKC: [0xC64C], NFKD: [0x110B, 0x116A, 0x11B3] }, +{ source: [0xC64D], NFC: [0xC64D], NFD: [0x110B, 0x116A, 0x11B4], NFKC: [0xC64D], NFKD: [0x110B, 0x116A, 0x11B4] }, +{ source: [0xC64E], NFC: [0xC64E], NFD: [0x110B, 0x116A, 0x11B5], NFKC: [0xC64E], NFKD: [0x110B, 0x116A, 0x11B5] }, +{ source: [0xC64F], NFC: [0xC64F], NFD: [0x110B, 0x116A, 0x11B6], NFKC: [0xC64F], NFKD: [0x110B, 0x116A, 0x11B6] }, +{ source: [0xC650], NFC: [0xC650], NFD: [0x110B, 0x116A, 0x11B7], NFKC: [0xC650], NFKD: [0x110B, 0x116A, 0x11B7] }, +{ source: [0xC651], NFC: [0xC651], NFD: [0x110B, 0x116A, 0x11B8], NFKC: [0xC651], NFKD: [0x110B, 0x116A, 0x11B8] }, +{ source: [0xC652], NFC: [0xC652], NFD: [0x110B, 0x116A, 0x11B9], NFKC: [0xC652], NFKD: [0x110B, 0x116A, 0x11B9] }, +{ source: [0xC653], NFC: [0xC653], NFD: [0x110B, 0x116A, 0x11BA], NFKC: [0xC653], NFKD: [0x110B, 0x116A, 0x11BA] }, +{ source: [0xC654], NFC: [0xC654], NFD: [0x110B, 0x116A, 0x11BB], NFKC: [0xC654], NFKD: [0x110B, 0x116A, 0x11BB] }, +{ source: [0xC655], NFC: [0xC655], NFD: [0x110B, 0x116A, 0x11BC], NFKC: [0xC655], NFKD: [0x110B, 0x116A, 0x11BC] }, +{ source: [0xC656], NFC: [0xC656], NFD: [0x110B, 0x116A, 0x11BD], NFKC: [0xC656], NFKD: [0x110B, 0x116A, 0x11BD] }, +{ source: [0xC657], NFC: [0xC657], NFD: [0x110B, 0x116A, 0x11BE], NFKC: [0xC657], NFKD: [0x110B, 0x116A, 0x11BE] }, +{ source: [0xC658], NFC: [0xC658], NFD: [0x110B, 0x116A, 0x11BF], NFKC: [0xC658], NFKD: [0x110B, 0x116A, 0x11BF] }, +{ source: [0xC659], NFC: [0xC659], NFD: [0x110B, 0x116A, 0x11C0], NFKC: [0xC659], NFKD: [0x110B, 0x116A, 0x11C0] }, +{ source: [0xC65A], NFC: [0xC65A], NFD: [0x110B, 0x116A, 0x11C1], NFKC: [0xC65A], NFKD: [0x110B, 0x116A, 0x11C1] }, +{ source: [0xC65B], NFC: [0xC65B], NFD: [0x110B, 0x116A, 0x11C2], NFKC: [0xC65B], NFKD: [0x110B, 0x116A, 0x11C2] }, +{ source: [0xC65C], NFC: [0xC65C], NFD: [0x110B, 0x116B], NFKC: [0xC65C], NFKD: [0x110B, 0x116B] }, +{ source: [0xC65D], NFC: [0xC65D], NFD: [0x110B, 0x116B, 0x11A8], NFKC: [0xC65D], NFKD: [0x110B, 0x116B, 0x11A8] }, +{ source: [0xC65E], NFC: [0xC65E], NFD: [0x110B, 0x116B, 0x11A9], NFKC: [0xC65E], NFKD: [0x110B, 0x116B, 0x11A9] }, +{ source: [0xC65F], NFC: [0xC65F], NFD: [0x110B, 0x116B, 0x11AA], NFKC: [0xC65F], NFKD: [0x110B, 0x116B, 0x11AA] }, +{ source: [0xC660], NFC: [0xC660], NFD: [0x110B, 0x116B, 0x11AB], NFKC: [0xC660], NFKD: [0x110B, 0x116B, 0x11AB] }, +{ source: [0xC661], NFC: [0xC661], NFD: [0x110B, 0x116B, 0x11AC], NFKC: [0xC661], NFKD: [0x110B, 0x116B, 0x11AC] }, +{ source: [0xC662], NFC: [0xC662], NFD: [0x110B, 0x116B, 0x11AD], NFKC: [0xC662], NFKD: [0x110B, 0x116B, 0x11AD] }, +{ source: [0xC663], NFC: [0xC663], NFD: [0x110B, 0x116B, 0x11AE], NFKC: [0xC663], NFKD: [0x110B, 0x116B, 0x11AE] }, +{ source: [0xC664], NFC: [0xC664], NFD: [0x110B, 0x116B, 0x11AF], NFKC: [0xC664], NFKD: [0x110B, 0x116B, 0x11AF] }, +{ source: [0xC665], NFC: [0xC665], NFD: [0x110B, 0x116B, 0x11B0], NFKC: [0xC665], NFKD: [0x110B, 0x116B, 0x11B0] }, +{ source: [0xC666], NFC: [0xC666], NFD: [0x110B, 0x116B, 0x11B1], NFKC: [0xC666], NFKD: [0x110B, 0x116B, 0x11B1] }, +{ source: [0xC667], NFC: [0xC667], NFD: [0x110B, 0x116B, 0x11B2], NFKC: [0xC667], NFKD: [0x110B, 0x116B, 0x11B2] }, +{ source: [0xC668], NFC: [0xC668], NFD: [0x110B, 0x116B, 0x11B3], NFKC: [0xC668], NFKD: [0x110B, 0x116B, 0x11B3] }, +{ source: [0xC669], NFC: [0xC669], NFD: [0x110B, 0x116B, 0x11B4], NFKC: [0xC669], NFKD: [0x110B, 0x116B, 0x11B4] }, +{ source: [0xC66A], NFC: [0xC66A], NFD: [0x110B, 0x116B, 0x11B5], NFKC: [0xC66A], NFKD: [0x110B, 0x116B, 0x11B5] }, +{ source: [0xC66B], NFC: [0xC66B], NFD: [0x110B, 0x116B, 0x11B6], NFKC: [0xC66B], NFKD: [0x110B, 0x116B, 0x11B6] }, +{ source: [0xC66C], NFC: [0xC66C], NFD: [0x110B, 0x116B, 0x11B7], NFKC: [0xC66C], NFKD: [0x110B, 0x116B, 0x11B7] }, +{ source: [0xC66D], NFC: [0xC66D], NFD: [0x110B, 0x116B, 0x11B8], NFKC: [0xC66D], NFKD: [0x110B, 0x116B, 0x11B8] }, +{ source: [0xC66E], NFC: [0xC66E], NFD: [0x110B, 0x116B, 0x11B9], NFKC: [0xC66E], NFKD: [0x110B, 0x116B, 0x11B9] }, +{ source: [0xC66F], NFC: [0xC66F], NFD: [0x110B, 0x116B, 0x11BA], NFKC: [0xC66F], NFKD: [0x110B, 0x116B, 0x11BA] }, +{ source: [0xC670], NFC: [0xC670], NFD: [0x110B, 0x116B, 0x11BB], NFKC: [0xC670], NFKD: [0x110B, 0x116B, 0x11BB] }, +{ source: [0xC671], NFC: [0xC671], NFD: [0x110B, 0x116B, 0x11BC], NFKC: [0xC671], NFKD: [0x110B, 0x116B, 0x11BC] }, +{ source: [0xC672], NFC: [0xC672], NFD: [0x110B, 0x116B, 0x11BD], NFKC: [0xC672], NFKD: [0x110B, 0x116B, 0x11BD] }, +{ source: [0xC673], NFC: [0xC673], NFD: [0x110B, 0x116B, 0x11BE], NFKC: [0xC673], NFKD: [0x110B, 0x116B, 0x11BE] }, +{ source: [0xC674], NFC: [0xC674], NFD: [0x110B, 0x116B, 0x11BF], NFKC: [0xC674], NFKD: [0x110B, 0x116B, 0x11BF] }, +{ source: [0xC675], NFC: [0xC675], NFD: [0x110B, 0x116B, 0x11C0], NFKC: [0xC675], NFKD: [0x110B, 0x116B, 0x11C0] }, +{ source: [0xC676], NFC: [0xC676], NFD: [0x110B, 0x116B, 0x11C1], NFKC: [0xC676], NFKD: [0x110B, 0x116B, 0x11C1] }, +{ source: [0xC677], NFC: [0xC677], NFD: [0x110B, 0x116B, 0x11C2], NFKC: [0xC677], NFKD: [0x110B, 0x116B, 0x11C2] }, +{ source: [0xC678], NFC: [0xC678], NFD: [0x110B, 0x116C], NFKC: [0xC678], NFKD: [0x110B, 0x116C] }, +{ source: [0xC679], NFC: [0xC679], NFD: [0x110B, 0x116C, 0x11A8], NFKC: [0xC679], NFKD: [0x110B, 0x116C, 0x11A8] }, +{ source: [0xC67A], NFC: [0xC67A], NFD: [0x110B, 0x116C, 0x11A9], NFKC: [0xC67A], NFKD: [0x110B, 0x116C, 0x11A9] }, +{ source: [0xC67B], NFC: [0xC67B], NFD: [0x110B, 0x116C, 0x11AA], NFKC: [0xC67B], NFKD: [0x110B, 0x116C, 0x11AA] }, +{ source: [0xC67C], NFC: [0xC67C], NFD: [0x110B, 0x116C, 0x11AB], NFKC: [0xC67C], NFKD: [0x110B, 0x116C, 0x11AB] }, +{ source: [0xC67D], NFC: [0xC67D], NFD: [0x110B, 0x116C, 0x11AC], NFKC: [0xC67D], NFKD: [0x110B, 0x116C, 0x11AC] }, +{ source: [0xC67E], NFC: [0xC67E], NFD: [0x110B, 0x116C, 0x11AD], NFKC: [0xC67E], NFKD: [0x110B, 0x116C, 0x11AD] }, +{ source: [0xC67F], NFC: [0xC67F], NFD: [0x110B, 0x116C, 0x11AE], NFKC: [0xC67F], NFKD: [0x110B, 0x116C, 0x11AE] }, +{ source: [0xC680], NFC: [0xC680], NFD: [0x110B, 0x116C, 0x11AF], NFKC: [0xC680], NFKD: [0x110B, 0x116C, 0x11AF] }, +{ source: [0xC681], NFC: [0xC681], NFD: [0x110B, 0x116C, 0x11B0], NFKC: [0xC681], NFKD: [0x110B, 0x116C, 0x11B0] }, +{ source: [0xC682], NFC: [0xC682], NFD: [0x110B, 0x116C, 0x11B1], NFKC: [0xC682], NFKD: [0x110B, 0x116C, 0x11B1] }, +{ source: [0xC683], NFC: [0xC683], NFD: [0x110B, 0x116C, 0x11B2], NFKC: [0xC683], NFKD: [0x110B, 0x116C, 0x11B2] }, +{ source: [0xC684], NFC: [0xC684], NFD: [0x110B, 0x116C, 0x11B3], NFKC: [0xC684], NFKD: [0x110B, 0x116C, 0x11B3] }, +{ source: [0xC685], NFC: [0xC685], NFD: [0x110B, 0x116C, 0x11B4], NFKC: [0xC685], NFKD: [0x110B, 0x116C, 0x11B4] }, +{ source: [0xC686], NFC: [0xC686], NFD: [0x110B, 0x116C, 0x11B5], NFKC: [0xC686], NFKD: [0x110B, 0x116C, 0x11B5] }, +{ source: [0xC687], NFC: [0xC687], NFD: [0x110B, 0x116C, 0x11B6], NFKC: [0xC687], NFKD: [0x110B, 0x116C, 0x11B6] }, +{ source: [0xC688], NFC: [0xC688], NFD: [0x110B, 0x116C, 0x11B7], NFKC: [0xC688], NFKD: [0x110B, 0x116C, 0x11B7] }, +{ source: [0xC689], NFC: [0xC689], NFD: [0x110B, 0x116C, 0x11B8], NFKC: [0xC689], NFKD: [0x110B, 0x116C, 0x11B8] }, +{ source: [0xC68A], NFC: [0xC68A], NFD: [0x110B, 0x116C, 0x11B9], NFKC: [0xC68A], NFKD: [0x110B, 0x116C, 0x11B9] }, +{ source: [0xC68B], NFC: [0xC68B], NFD: [0x110B, 0x116C, 0x11BA], NFKC: [0xC68B], NFKD: [0x110B, 0x116C, 0x11BA] }, +{ source: [0xC68C], NFC: [0xC68C], NFD: [0x110B, 0x116C, 0x11BB], NFKC: [0xC68C], NFKD: [0x110B, 0x116C, 0x11BB] }, +{ source: [0xC68D], NFC: [0xC68D], NFD: [0x110B, 0x116C, 0x11BC], NFKC: [0xC68D], NFKD: [0x110B, 0x116C, 0x11BC] }, +{ source: [0xC68E], NFC: [0xC68E], NFD: [0x110B, 0x116C, 0x11BD], NFKC: [0xC68E], NFKD: [0x110B, 0x116C, 0x11BD] }, +{ source: [0xC68F], NFC: [0xC68F], NFD: [0x110B, 0x116C, 0x11BE], NFKC: [0xC68F], NFKD: [0x110B, 0x116C, 0x11BE] }, +{ source: [0xC690], NFC: [0xC690], NFD: [0x110B, 0x116C, 0x11BF], NFKC: [0xC690], NFKD: [0x110B, 0x116C, 0x11BF] }, +{ source: [0xC691], NFC: [0xC691], NFD: [0x110B, 0x116C, 0x11C0], NFKC: [0xC691], NFKD: [0x110B, 0x116C, 0x11C0] }, +{ source: [0xC692], NFC: [0xC692], NFD: [0x110B, 0x116C, 0x11C1], NFKC: [0xC692], NFKD: [0x110B, 0x116C, 0x11C1] }, +{ source: [0xC693], NFC: [0xC693], NFD: [0x110B, 0x116C, 0x11C2], NFKC: [0xC693], NFKD: [0x110B, 0x116C, 0x11C2] }, +{ source: [0xC694], NFC: [0xC694], NFD: [0x110B, 0x116D], NFKC: [0xC694], NFKD: [0x110B, 0x116D] }, +{ source: [0xC695], NFC: [0xC695], NFD: [0x110B, 0x116D, 0x11A8], NFKC: [0xC695], NFKD: [0x110B, 0x116D, 0x11A8] }, +{ source: [0xC696], NFC: [0xC696], NFD: [0x110B, 0x116D, 0x11A9], NFKC: [0xC696], NFKD: [0x110B, 0x116D, 0x11A9] }, +{ source: [0xC697], NFC: [0xC697], NFD: [0x110B, 0x116D, 0x11AA], NFKC: [0xC697], NFKD: [0x110B, 0x116D, 0x11AA] }, +{ source: [0xC698], NFC: [0xC698], NFD: [0x110B, 0x116D, 0x11AB], NFKC: [0xC698], NFKD: [0x110B, 0x116D, 0x11AB] }, +{ source: [0xC699], NFC: [0xC699], NFD: [0x110B, 0x116D, 0x11AC], NFKC: [0xC699], NFKD: [0x110B, 0x116D, 0x11AC] }, +{ source: [0xC69A], NFC: [0xC69A], NFD: [0x110B, 0x116D, 0x11AD], NFKC: [0xC69A], NFKD: [0x110B, 0x116D, 0x11AD] }, +{ source: [0xC69B], NFC: [0xC69B], NFD: [0x110B, 0x116D, 0x11AE], NFKC: [0xC69B], NFKD: [0x110B, 0x116D, 0x11AE] }, +{ source: [0xC69C], NFC: [0xC69C], NFD: [0x110B, 0x116D, 0x11AF], NFKC: [0xC69C], NFKD: [0x110B, 0x116D, 0x11AF] }, +{ source: [0xC69D], NFC: [0xC69D], NFD: [0x110B, 0x116D, 0x11B0], NFKC: [0xC69D], NFKD: [0x110B, 0x116D, 0x11B0] }, +{ source: [0xC69E], NFC: [0xC69E], NFD: [0x110B, 0x116D, 0x11B1], NFKC: [0xC69E], NFKD: [0x110B, 0x116D, 0x11B1] }, +{ source: [0xC69F], NFC: [0xC69F], NFD: [0x110B, 0x116D, 0x11B2], NFKC: [0xC69F], NFKD: [0x110B, 0x116D, 0x11B2] }, +{ source: [0xC6A0], NFC: [0xC6A0], NFD: [0x110B, 0x116D, 0x11B3], NFKC: [0xC6A0], NFKD: [0x110B, 0x116D, 0x11B3] }, +{ source: [0xC6A1], NFC: [0xC6A1], NFD: [0x110B, 0x116D, 0x11B4], NFKC: [0xC6A1], NFKD: [0x110B, 0x116D, 0x11B4] }, +{ source: [0xC6A2], NFC: [0xC6A2], NFD: [0x110B, 0x116D, 0x11B5], NFKC: [0xC6A2], NFKD: [0x110B, 0x116D, 0x11B5] }, +{ source: [0xC6A3], NFC: [0xC6A3], NFD: [0x110B, 0x116D, 0x11B6], NFKC: [0xC6A3], NFKD: [0x110B, 0x116D, 0x11B6] }, +{ source: [0xC6A4], NFC: [0xC6A4], NFD: [0x110B, 0x116D, 0x11B7], NFKC: [0xC6A4], NFKD: [0x110B, 0x116D, 0x11B7] }, +{ source: [0xC6A5], NFC: [0xC6A5], NFD: [0x110B, 0x116D, 0x11B8], NFKC: [0xC6A5], NFKD: [0x110B, 0x116D, 0x11B8] }, +{ source: [0xC6A6], NFC: [0xC6A6], NFD: [0x110B, 0x116D, 0x11B9], NFKC: [0xC6A6], NFKD: [0x110B, 0x116D, 0x11B9] }, +{ source: [0xC6A7], NFC: [0xC6A7], NFD: [0x110B, 0x116D, 0x11BA], NFKC: [0xC6A7], NFKD: [0x110B, 0x116D, 0x11BA] }, +{ source: [0xC6A8], NFC: [0xC6A8], NFD: [0x110B, 0x116D, 0x11BB], NFKC: [0xC6A8], NFKD: [0x110B, 0x116D, 0x11BB] }, +{ source: [0xC6A9], NFC: [0xC6A9], NFD: [0x110B, 0x116D, 0x11BC], NFKC: [0xC6A9], NFKD: [0x110B, 0x116D, 0x11BC] }, +{ source: [0xC6AA], NFC: [0xC6AA], NFD: [0x110B, 0x116D, 0x11BD], NFKC: [0xC6AA], NFKD: [0x110B, 0x116D, 0x11BD] }, +{ source: [0xC6AB], NFC: [0xC6AB], NFD: [0x110B, 0x116D, 0x11BE], NFKC: [0xC6AB], NFKD: [0x110B, 0x116D, 0x11BE] }, +{ source: [0xC6AC], NFC: [0xC6AC], NFD: [0x110B, 0x116D, 0x11BF], NFKC: [0xC6AC], NFKD: [0x110B, 0x116D, 0x11BF] }, +{ source: [0xC6AD], NFC: [0xC6AD], NFD: [0x110B, 0x116D, 0x11C0], NFKC: [0xC6AD], NFKD: [0x110B, 0x116D, 0x11C0] }, +{ source: [0xC6AE], NFC: [0xC6AE], NFD: [0x110B, 0x116D, 0x11C1], NFKC: [0xC6AE], NFKD: [0x110B, 0x116D, 0x11C1] }, +{ source: [0xC6AF], NFC: [0xC6AF], NFD: [0x110B, 0x116D, 0x11C2], NFKC: [0xC6AF], NFKD: [0x110B, 0x116D, 0x11C2] }, +{ source: [0xC6B0], NFC: [0xC6B0], NFD: [0x110B, 0x116E], NFKC: [0xC6B0], NFKD: [0x110B, 0x116E] }, +{ source: [0xC6B1], NFC: [0xC6B1], NFD: [0x110B, 0x116E, 0x11A8], NFKC: [0xC6B1], NFKD: [0x110B, 0x116E, 0x11A8] }, +{ source: [0xC6B2], NFC: [0xC6B2], NFD: [0x110B, 0x116E, 0x11A9], NFKC: [0xC6B2], NFKD: [0x110B, 0x116E, 0x11A9] }, +{ source: [0xC6B3], NFC: [0xC6B3], NFD: [0x110B, 0x116E, 0x11AA], NFKC: [0xC6B3], NFKD: [0x110B, 0x116E, 0x11AA] }, +{ source: [0xC6B4], NFC: [0xC6B4], NFD: [0x110B, 0x116E, 0x11AB], NFKC: [0xC6B4], NFKD: [0x110B, 0x116E, 0x11AB] }, +{ source: [0xC6B5], NFC: [0xC6B5], NFD: [0x110B, 0x116E, 0x11AC], NFKC: [0xC6B5], NFKD: [0x110B, 0x116E, 0x11AC] }, +{ source: [0xC6B6], NFC: [0xC6B6], NFD: [0x110B, 0x116E, 0x11AD], NFKC: [0xC6B6], NFKD: [0x110B, 0x116E, 0x11AD] }, +{ source: [0xC6B7], NFC: [0xC6B7], NFD: [0x110B, 0x116E, 0x11AE], NFKC: [0xC6B7], NFKD: [0x110B, 0x116E, 0x11AE] }, +{ source: [0xC6B8], NFC: [0xC6B8], NFD: [0x110B, 0x116E, 0x11AF], NFKC: [0xC6B8], NFKD: [0x110B, 0x116E, 0x11AF] }, +{ source: [0xC6B9], NFC: [0xC6B9], NFD: [0x110B, 0x116E, 0x11B0], NFKC: [0xC6B9], NFKD: [0x110B, 0x116E, 0x11B0] }, +{ source: [0xC6BA], NFC: [0xC6BA], NFD: [0x110B, 0x116E, 0x11B1], NFKC: [0xC6BA], NFKD: [0x110B, 0x116E, 0x11B1] }, +{ source: [0xC6BB], NFC: [0xC6BB], NFD: [0x110B, 0x116E, 0x11B2], NFKC: [0xC6BB], NFKD: [0x110B, 0x116E, 0x11B2] }, +{ source: [0xC6BC], NFC: [0xC6BC], NFD: [0x110B, 0x116E, 0x11B3], NFKC: [0xC6BC], NFKD: [0x110B, 0x116E, 0x11B3] }, +{ source: [0xC6BD], NFC: [0xC6BD], NFD: [0x110B, 0x116E, 0x11B4], NFKC: [0xC6BD], NFKD: [0x110B, 0x116E, 0x11B4] }, +{ source: [0xC6BE], NFC: [0xC6BE], NFD: [0x110B, 0x116E, 0x11B5], NFKC: [0xC6BE], NFKD: [0x110B, 0x116E, 0x11B5] }, +{ source: [0xC6BF], NFC: [0xC6BF], NFD: [0x110B, 0x116E, 0x11B6], NFKC: [0xC6BF], NFKD: [0x110B, 0x116E, 0x11B6] }, +{ source: [0xC6C0], NFC: [0xC6C0], NFD: [0x110B, 0x116E, 0x11B7], NFKC: [0xC6C0], NFKD: [0x110B, 0x116E, 0x11B7] }, +{ source: [0xC6C1], NFC: [0xC6C1], NFD: [0x110B, 0x116E, 0x11B8], NFKC: [0xC6C1], NFKD: [0x110B, 0x116E, 0x11B8] }, +{ source: [0xC6C2], NFC: [0xC6C2], NFD: [0x110B, 0x116E, 0x11B9], NFKC: [0xC6C2], NFKD: [0x110B, 0x116E, 0x11B9] }, +{ source: [0xC6C3], NFC: [0xC6C3], NFD: [0x110B, 0x116E, 0x11BA], NFKC: [0xC6C3], NFKD: [0x110B, 0x116E, 0x11BA] }, +{ source: [0xC6C4], NFC: [0xC6C4], NFD: [0x110B, 0x116E, 0x11BB], NFKC: [0xC6C4], NFKD: [0x110B, 0x116E, 0x11BB] }, +{ source: [0xC6C5], NFC: [0xC6C5], NFD: [0x110B, 0x116E, 0x11BC], NFKC: [0xC6C5], NFKD: [0x110B, 0x116E, 0x11BC] }, +{ source: [0xC6C6], NFC: [0xC6C6], NFD: [0x110B, 0x116E, 0x11BD], NFKC: [0xC6C6], NFKD: [0x110B, 0x116E, 0x11BD] }, +{ source: [0xC6C7], NFC: [0xC6C7], NFD: [0x110B, 0x116E, 0x11BE], NFKC: [0xC6C7], NFKD: [0x110B, 0x116E, 0x11BE] }, +{ source: [0xC6C8], NFC: [0xC6C8], NFD: [0x110B, 0x116E, 0x11BF], NFKC: [0xC6C8], NFKD: [0x110B, 0x116E, 0x11BF] }, +{ source: [0xC6C9], NFC: [0xC6C9], NFD: [0x110B, 0x116E, 0x11C0], NFKC: [0xC6C9], NFKD: [0x110B, 0x116E, 0x11C0] }, +{ source: [0xC6CA], NFC: [0xC6CA], NFD: [0x110B, 0x116E, 0x11C1], NFKC: [0xC6CA], NFKD: [0x110B, 0x116E, 0x11C1] }, +{ source: [0xC6CB], NFC: [0xC6CB], NFD: [0x110B, 0x116E, 0x11C2], NFKC: [0xC6CB], NFKD: [0x110B, 0x116E, 0x11C2] }, +{ source: [0xC6CC], NFC: [0xC6CC], NFD: [0x110B, 0x116F], NFKC: [0xC6CC], NFKD: [0x110B, 0x116F] }, +{ source: [0xC6CD], NFC: [0xC6CD], NFD: [0x110B, 0x116F, 0x11A8], NFKC: [0xC6CD], NFKD: [0x110B, 0x116F, 0x11A8] }, +{ source: [0xC6CE], NFC: [0xC6CE], NFD: [0x110B, 0x116F, 0x11A9], NFKC: [0xC6CE], NFKD: [0x110B, 0x116F, 0x11A9] }, +{ source: [0xC6CF], NFC: [0xC6CF], NFD: [0x110B, 0x116F, 0x11AA], NFKC: [0xC6CF], NFKD: [0x110B, 0x116F, 0x11AA] }, +{ source: [0xC6D0], NFC: [0xC6D0], NFD: [0x110B, 0x116F, 0x11AB], NFKC: [0xC6D0], NFKD: [0x110B, 0x116F, 0x11AB] }, +{ source: [0xC6D1], NFC: [0xC6D1], NFD: [0x110B, 0x116F, 0x11AC], NFKC: [0xC6D1], NFKD: [0x110B, 0x116F, 0x11AC] }, +{ source: [0xC6D2], NFC: [0xC6D2], NFD: [0x110B, 0x116F, 0x11AD], NFKC: [0xC6D2], NFKD: [0x110B, 0x116F, 0x11AD] }, +{ source: [0xC6D3], NFC: [0xC6D3], NFD: [0x110B, 0x116F, 0x11AE], NFKC: [0xC6D3], NFKD: [0x110B, 0x116F, 0x11AE] }, +{ source: [0xC6D4], NFC: [0xC6D4], NFD: [0x110B, 0x116F, 0x11AF], NFKC: [0xC6D4], NFKD: [0x110B, 0x116F, 0x11AF] }, +{ source: [0xC6D5], NFC: [0xC6D5], NFD: [0x110B, 0x116F, 0x11B0], NFKC: [0xC6D5], NFKD: [0x110B, 0x116F, 0x11B0] }, +{ source: [0xC6D6], NFC: [0xC6D6], NFD: [0x110B, 0x116F, 0x11B1], NFKC: [0xC6D6], NFKD: [0x110B, 0x116F, 0x11B1] }, +{ source: [0xC6D7], NFC: [0xC6D7], NFD: [0x110B, 0x116F, 0x11B2], NFKC: [0xC6D7], NFKD: [0x110B, 0x116F, 0x11B2] }, +{ source: [0xC6D8], NFC: [0xC6D8], NFD: [0x110B, 0x116F, 0x11B3], NFKC: [0xC6D8], NFKD: [0x110B, 0x116F, 0x11B3] }, +{ source: [0xC6D9], NFC: [0xC6D9], NFD: [0x110B, 0x116F, 0x11B4], NFKC: [0xC6D9], NFKD: [0x110B, 0x116F, 0x11B4] }, +{ source: [0xC6DA], NFC: [0xC6DA], NFD: [0x110B, 0x116F, 0x11B5], NFKC: [0xC6DA], NFKD: [0x110B, 0x116F, 0x11B5] }, +{ source: [0xC6DB], NFC: [0xC6DB], NFD: [0x110B, 0x116F, 0x11B6], NFKC: [0xC6DB], NFKD: [0x110B, 0x116F, 0x11B6] }, +{ source: [0xC6DC], NFC: [0xC6DC], NFD: [0x110B, 0x116F, 0x11B7], NFKC: [0xC6DC], NFKD: [0x110B, 0x116F, 0x11B7] }, +{ source: [0xC6DD], NFC: [0xC6DD], NFD: [0x110B, 0x116F, 0x11B8], NFKC: [0xC6DD], NFKD: [0x110B, 0x116F, 0x11B8] }, +{ source: [0xC6DE], NFC: [0xC6DE], NFD: [0x110B, 0x116F, 0x11B9], NFKC: [0xC6DE], NFKD: [0x110B, 0x116F, 0x11B9] }, +{ source: [0xC6DF], NFC: [0xC6DF], NFD: [0x110B, 0x116F, 0x11BA], NFKC: [0xC6DF], NFKD: [0x110B, 0x116F, 0x11BA] }, +{ source: [0xC6E0], NFC: [0xC6E0], NFD: [0x110B, 0x116F, 0x11BB], NFKC: [0xC6E0], NFKD: [0x110B, 0x116F, 0x11BB] }, +{ source: [0xC6E1], NFC: [0xC6E1], NFD: [0x110B, 0x116F, 0x11BC], NFKC: [0xC6E1], NFKD: [0x110B, 0x116F, 0x11BC] }, +{ source: [0xC6E2], NFC: [0xC6E2], NFD: [0x110B, 0x116F, 0x11BD], NFKC: [0xC6E2], NFKD: [0x110B, 0x116F, 0x11BD] }, +{ source: [0xC6E3], NFC: [0xC6E3], NFD: [0x110B, 0x116F, 0x11BE], NFKC: [0xC6E3], NFKD: [0x110B, 0x116F, 0x11BE] }, +{ source: [0xC6E4], NFC: [0xC6E4], NFD: [0x110B, 0x116F, 0x11BF], NFKC: [0xC6E4], NFKD: [0x110B, 0x116F, 0x11BF] }, +{ source: [0xC6E5], NFC: [0xC6E5], NFD: [0x110B, 0x116F, 0x11C0], NFKC: [0xC6E5], NFKD: [0x110B, 0x116F, 0x11C0] }, +{ source: [0xC6E6], NFC: [0xC6E6], NFD: [0x110B, 0x116F, 0x11C1], NFKC: [0xC6E6], NFKD: [0x110B, 0x116F, 0x11C1] }, +{ source: [0xC6E7], NFC: [0xC6E7], NFD: [0x110B, 0x116F, 0x11C2], NFKC: [0xC6E7], NFKD: [0x110B, 0x116F, 0x11C2] }, +{ source: [0xC6E8], NFC: [0xC6E8], NFD: [0x110B, 0x1170], NFKC: [0xC6E8], NFKD: [0x110B, 0x1170] }, +{ source: [0xC6E9], NFC: [0xC6E9], NFD: [0x110B, 0x1170, 0x11A8], NFKC: [0xC6E9], NFKD: [0x110B, 0x1170, 0x11A8] }, +{ source: [0xC6EA], NFC: [0xC6EA], NFD: [0x110B, 0x1170, 0x11A9], NFKC: [0xC6EA], NFKD: [0x110B, 0x1170, 0x11A9] }, +{ source: [0xC6EB], NFC: [0xC6EB], NFD: [0x110B, 0x1170, 0x11AA], NFKC: [0xC6EB], NFKD: [0x110B, 0x1170, 0x11AA] }, +{ source: [0xC6EC], NFC: [0xC6EC], NFD: [0x110B, 0x1170, 0x11AB], NFKC: [0xC6EC], NFKD: [0x110B, 0x1170, 0x11AB] }, +{ source: [0xC6ED], NFC: [0xC6ED], NFD: [0x110B, 0x1170, 0x11AC], NFKC: [0xC6ED], NFKD: [0x110B, 0x1170, 0x11AC] }, +{ source: [0xC6EE], NFC: [0xC6EE], NFD: [0x110B, 0x1170, 0x11AD], NFKC: [0xC6EE], NFKD: [0x110B, 0x1170, 0x11AD] }, +{ source: [0xC6EF], NFC: [0xC6EF], NFD: [0x110B, 0x1170, 0x11AE], NFKC: [0xC6EF], NFKD: [0x110B, 0x1170, 0x11AE] }, +{ source: [0xC6F0], NFC: [0xC6F0], NFD: [0x110B, 0x1170, 0x11AF], NFKC: [0xC6F0], NFKD: [0x110B, 0x1170, 0x11AF] }, +{ source: [0xC6F1], NFC: [0xC6F1], NFD: [0x110B, 0x1170, 0x11B0], NFKC: [0xC6F1], NFKD: [0x110B, 0x1170, 0x11B0] }, +{ source: [0xC6F2], NFC: [0xC6F2], NFD: [0x110B, 0x1170, 0x11B1], NFKC: [0xC6F2], NFKD: [0x110B, 0x1170, 0x11B1] }, +{ source: [0xC6F3], NFC: [0xC6F3], NFD: [0x110B, 0x1170, 0x11B2], NFKC: [0xC6F3], NFKD: [0x110B, 0x1170, 0x11B2] }, +{ source: [0xC6F4], NFC: [0xC6F4], NFD: [0x110B, 0x1170, 0x11B3], NFKC: [0xC6F4], NFKD: [0x110B, 0x1170, 0x11B3] }, +{ source: [0xC6F5], NFC: [0xC6F5], NFD: [0x110B, 0x1170, 0x11B4], NFKC: [0xC6F5], NFKD: [0x110B, 0x1170, 0x11B4] }, +{ source: [0xC6F6], NFC: [0xC6F6], NFD: [0x110B, 0x1170, 0x11B5], NFKC: [0xC6F6], NFKD: [0x110B, 0x1170, 0x11B5] }, +{ source: [0xC6F7], NFC: [0xC6F7], NFD: [0x110B, 0x1170, 0x11B6], NFKC: [0xC6F7], NFKD: [0x110B, 0x1170, 0x11B6] }, +{ source: [0xC6F8], NFC: [0xC6F8], NFD: [0x110B, 0x1170, 0x11B7], NFKC: [0xC6F8], NFKD: [0x110B, 0x1170, 0x11B7] }, +{ source: [0xC6F9], NFC: [0xC6F9], NFD: [0x110B, 0x1170, 0x11B8], NFKC: [0xC6F9], NFKD: [0x110B, 0x1170, 0x11B8] }, +{ source: [0xC6FA], NFC: [0xC6FA], NFD: [0x110B, 0x1170, 0x11B9], NFKC: [0xC6FA], NFKD: [0x110B, 0x1170, 0x11B9] }, +{ source: [0xC6FB], NFC: [0xC6FB], NFD: [0x110B, 0x1170, 0x11BA], NFKC: [0xC6FB], NFKD: [0x110B, 0x1170, 0x11BA] }, +{ source: [0xC6FC], NFC: [0xC6FC], NFD: [0x110B, 0x1170, 0x11BB], NFKC: [0xC6FC], NFKD: [0x110B, 0x1170, 0x11BB] }, +{ source: [0xC6FD], NFC: [0xC6FD], NFD: [0x110B, 0x1170, 0x11BC], NFKC: [0xC6FD], NFKD: [0x110B, 0x1170, 0x11BC] }, +{ source: [0xC6FE], NFC: [0xC6FE], NFD: [0x110B, 0x1170, 0x11BD], NFKC: [0xC6FE], NFKD: [0x110B, 0x1170, 0x11BD] }, +{ source: [0xC6FF], NFC: [0xC6FF], NFD: [0x110B, 0x1170, 0x11BE], NFKC: [0xC6FF], NFKD: [0x110B, 0x1170, 0x11BE] }, +{ source: [0xC700], NFC: [0xC700], NFD: [0x110B, 0x1170, 0x11BF], NFKC: [0xC700], NFKD: [0x110B, 0x1170, 0x11BF] }, +{ source: [0xC701], NFC: [0xC701], NFD: [0x110B, 0x1170, 0x11C0], NFKC: [0xC701], NFKD: [0x110B, 0x1170, 0x11C0] }, +{ source: [0xC702], NFC: [0xC702], NFD: [0x110B, 0x1170, 0x11C1], NFKC: [0xC702], NFKD: [0x110B, 0x1170, 0x11C1] }, +{ source: [0xC703], NFC: [0xC703], NFD: [0x110B, 0x1170, 0x11C2], NFKC: [0xC703], NFKD: [0x110B, 0x1170, 0x11C2] }, +{ source: [0xC704], NFC: [0xC704], NFD: [0x110B, 0x1171], NFKC: [0xC704], NFKD: [0x110B, 0x1171] }, +{ source: [0xC705], NFC: [0xC705], NFD: [0x110B, 0x1171, 0x11A8], NFKC: [0xC705], NFKD: [0x110B, 0x1171, 0x11A8] }, +{ source: [0xC706], NFC: [0xC706], NFD: [0x110B, 0x1171, 0x11A9], NFKC: [0xC706], NFKD: [0x110B, 0x1171, 0x11A9] }, +{ source: [0xC707], NFC: [0xC707], NFD: [0x110B, 0x1171, 0x11AA], NFKC: [0xC707], NFKD: [0x110B, 0x1171, 0x11AA] }, +{ source: [0xC708], NFC: [0xC708], NFD: [0x110B, 0x1171, 0x11AB], NFKC: [0xC708], NFKD: [0x110B, 0x1171, 0x11AB] }, +{ source: [0xC709], NFC: [0xC709], NFD: [0x110B, 0x1171, 0x11AC], NFKC: [0xC709], NFKD: [0x110B, 0x1171, 0x11AC] }, +{ source: [0xC70A], NFC: [0xC70A], NFD: [0x110B, 0x1171, 0x11AD], NFKC: [0xC70A], NFKD: [0x110B, 0x1171, 0x11AD] }, +{ source: [0xC70B], NFC: [0xC70B], NFD: [0x110B, 0x1171, 0x11AE], NFKC: [0xC70B], NFKD: [0x110B, 0x1171, 0x11AE] }, +{ source: [0xC70C], NFC: [0xC70C], NFD: [0x110B, 0x1171, 0x11AF], NFKC: [0xC70C], NFKD: [0x110B, 0x1171, 0x11AF] }, +{ source: [0xC70D], NFC: [0xC70D], NFD: [0x110B, 0x1171, 0x11B0], NFKC: [0xC70D], NFKD: [0x110B, 0x1171, 0x11B0] }, +{ source: [0xC70E], NFC: [0xC70E], NFD: [0x110B, 0x1171, 0x11B1], NFKC: [0xC70E], NFKD: [0x110B, 0x1171, 0x11B1] }, +{ source: [0xC70F], NFC: [0xC70F], NFD: [0x110B, 0x1171, 0x11B2], NFKC: [0xC70F], NFKD: [0x110B, 0x1171, 0x11B2] }, +{ source: [0xC710], NFC: [0xC710], NFD: [0x110B, 0x1171, 0x11B3], NFKC: [0xC710], NFKD: [0x110B, 0x1171, 0x11B3] }, +{ source: [0xC711], NFC: [0xC711], NFD: [0x110B, 0x1171, 0x11B4], NFKC: [0xC711], NFKD: [0x110B, 0x1171, 0x11B4] }, +{ source: [0xC712], NFC: [0xC712], NFD: [0x110B, 0x1171, 0x11B5], NFKC: [0xC712], NFKD: [0x110B, 0x1171, 0x11B5] }, +{ source: [0xC713], NFC: [0xC713], NFD: [0x110B, 0x1171, 0x11B6], NFKC: [0xC713], NFKD: [0x110B, 0x1171, 0x11B6] }, +{ source: [0xC714], NFC: [0xC714], NFD: [0x110B, 0x1171, 0x11B7], NFKC: [0xC714], NFKD: [0x110B, 0x1171, 0x11B7] }, +{ source: [0xC715], NFC: [0xC715], NFD: [0x110B, 0x1171, 0x11B8], NFKC: [0xC715], NFKD: [0x110B, 0x1171, 0x11B8] }, +{ source: [0xC716], NFC: [0xC716], NFD: [0x110B, 0x1171, 0x11B9], NFKC: [0xC716], NFKD: [0x110B, 0x1171, 0x11B9] }, +{ source: [0xC717], NFC: [0xC717], NFD: [0x110B, 0x1171, 0x11BA], NFKC: [0xC717], NFKD: [0x110B, 0x1171, 0x11BA] }, +{ source: [0xC718], NFC: [0xC718], NFD: [0x110B, 0x1171, 0x11BB], NFKC: [0xC718], NFKD: [0x110B, 0x1171, 0x11BB] }, +{ source: [0xC719], NFC: [0xC719], NFD: [0x110B, 0x1171, 0x11BC], NFKC: [0xC719], NFKD: [0x110B, 0x1171, 0x11BC] }, +{ source: [0xC71A], NFC: [0xC71A], NFD: [0x110B, 0x1171, 0x11BD], NFKC: [0xC71A], NFKD: [0x110B, 0x1171, 0x11BD] }, +{ source: [0xC71B], NFC: [0xC71B], NFD: [0x110B, 0x1171, 0x11BE], NFKC: [0xC71B], NFKD: [0x110B, 0x1171, 0x11BE] }, +{ source: [0xC71C], NFC: [0xC71C], NFD: [0x110B, 0x1171, 0x11BF], NFKC: [0xC71C], NFKD: [0x110B, 0x1171, 0x11BF] }, +{ source: [0xC71D], NFC: [0xC71D], NFD: [0x110B, 0x1171, 0x11C0], NFKC: [0xC71D], NFKD: [0x110B, 0x1171, 0x11C0] }, +{ source: [0xC71E], NFC: [0xC71E], NFD: [0x110B, 0x1171, 0x11C1], NFKC: [0xC71E], NFKD: [0x110B, 0x1171, 0x11C1] }, +{ source: [0xC71F], NFC: [0xC71F], NFD: [0x110B, 0x1171, 0x11C2], NFKC: [0xC71F], NFKD: [0x110B, 0x1171, 0x11C2] }, +{ source: [0xC720], NFC: [0xC720], NFD: [0x110B, 0x1172], NFKC: [0xC720], NFKD: [0x110B, 0x1172] }, +{ source: [0xC721], NFC: [0xC721], NFD: [0x110B, 0x1172, 0x11A8], NFKC: [0xC721], NFKD: [0x110B, 0x1172, 0x11A8] }, +{ source: [0xC722], NFC: [0xC722], NFD: [0x110B, 0x1172, 0x11A9], NFKC: [0xC722], NFKD: [0x110B, 0x1172, 0x11A9] }, +{ source: [0xC723], NFC: [0xC723], NFD: [0x110B, 0x1172, 0x11AA], NFKC: [0xC723], NFKD: [0x110B, 0x1172, 0x11AA] }, +{ source: [0xC724], NFC: [0xC724], NFD: [0x110B, 0x1172, 0x11AB], NFKC: [0xC724], NFKD: [0x110B, 0x1172, 0x11AB] }, +{ source: [0xC725], NFC: [0xC725], NFD: [0x110B, 0x1172, 0x11AC], NFKC: [0xC725], NFKD: [0x110B, 0x1172, 0x11AC] }, +{ source: [0xC726], NFC: [0xC726], NFD: [0x110B, 0x1172, 0x11AD], NFKC: [0xC726], NFKD: [0x110B, 0x1172, 0x11AD] }, +{ source: [0xC727], NFC: [0xC727], NFD: [0x110B, 0x1172, 0x11AE], NFKC: [0xC727], NFKD: [0x110B, 0x1172, 0x11AE] }, +{ source: [0xC728], NFC: [0xC728], NFD: [0x110B, 0x1172, 0x11AF], NFKC: [0xC728], NFKD: [0x110B, 0x1172, 0x11AF] }, +{ source: [0xC729], NFC: [0xC729], NFD: [0x110B, 0x1172, 0x11B0], NFKC: [0xC729], NFKD: [0x110B, 0x1172, 0x11B0] }, +{ source: [0xC72A], NFC: [0xC72A], NFD: [0x110B, 0x1172, 0x11B1], NFKC: [0xC72A], NFKD: [0x110B, 0x1172, 0x11B1] }, +{ source: [0xC72B], NFC: [0xC72B], NFD: [0x110B, 0x1172, 0x11B2], NFKC: [0xC72B], NFKD: [0x110B, 0x1172, 0x11B2] }, +{ source: [0xC72C], NFC: [0xC72C], NFD: [0x110B, 0x1172, 0x11B3], NFKC: [0xC72C], NFKD: [0x110B, 0x1172, 0x11B3] }, +{ source: [0xC72D], NFC: [0xC72D], NFD: [0x110B, 0x1172, 0x11B4], NFKC: [0xC72D], NFKD: [0x110B, 0x1172, 0x11B4] }, +{ source: [0xC72E], NFC: [0xC72E], NFD: [0x110B, 0x1172, 0x11B5], NFKC: [0xC72E], NFKD: [0x110B, 0x1172, 0x11B5] }, +{ source: [0xC72F], NFC: [0xC72F], NFD: [0x110B, 0x1172, 0x11B6], NFKC: [0xC72F], NFKD: [0x110B, 0x1172, 0x11B6] }, +{ source: [0xC730], NFC: [0xC730], NFD: [0x110B, 0x1172, 0x11B7], NFKC: [0xC730], NFKD: [0x110B, 0x1172, 0x11B7] }, +{ source: [0xC731], NFC: [0xC731], NFD: [0x110B, 0x1172, 0x11B8], NFKC: [0xC731], NFKD: [0x110B, 0x1172, 0x11B8] }, +{ source: [0xC732], NFC: [0xC732], NFD: [0x110B, 0x1172, 0x11B9], NFKC: [0xC732], NFKD: [0x110B, 0x1172, 0x11B9] }, +{ source: [0xC733], NFC: [0xC733], NFD: [0x110B, 0x1172, 0x11BA], NFKC: [0xC733], NFKD: [0x110B, 0x1172, 0x11BA] }, +{ source: [0xC734], NFC: [0xC734], NFD: [0x110B, 0x1172, 0x11BB], NFKC: [0xC734], NFKD: [0x110B, 0x1172, 0x11BB] }, +{ source: [0xC735], NFC: [0xC735], NFD: [0x110B, 0x1172, 0x11BC], NFKC: [0xC735], NFKD: [0x110B, 0x1172, 0x11BC] }, +{ source: [0xC736], NFC: [0xC736], NFD: [0x110B, 0x1172, 0x11BD], NFKC: [0xC736], NFKD: [0x110B, 0x1172, 0x11BD] }, +{ source: [0xC737], NFC: [0xC737], NFD: [0x110B, 0x1172, 0x11BE], NFKC: [0xC737], NFKD: [0x110B, 0x1172, 0x11BE] }, +{ source: [0xC738], NFC: [0xC738], NFD: [0x110B, 0x1172, 0x11BF], NFKC: [0xC738], NFKD: [0x110B, 0x1172, 0x11BF] }, +{ source: [0xC739], NFC: [0xC739], NFD: [0x110B, 0x1172, 0x11C0], NFKC: [0xC739], NFKD: [0x110B, 0x1172, 0x11C0] }, +{ source: [0xC73A], NFC: [0xC73A], NFD: [0x110B, 0x1172, 0x11C1], NFKC: [0xC73A], NFKD: [0x110B, 0x1172, 0x11C1] }, +{ source: [0xC73B], NFC: [0xC73B], NFD: [0x110B, 0x1172, 0x11C2], NFKC: [0xC73B], NFKD: [0x110B, 0x1172, 0x11C2] }, +{ source: [0xC73C], NFC: [0xC73C], NFD: [0x110B, 0x1173], NFKC: [0xC73C], NFKD: [0x110B, 0x1173] }, +{ source: [0xC73D], NFC: [0xC73D], NFD: [0x110B, 0x1173, 0x11A8], NFKC: [0xC73D], NFKD: [0x110B, 0x1173, 0x11A8] }, +{ source: [0xC73E], NFC: [0xC73E], NFD: [0x110B, 0x1173, 0x11A9], NFKC: [0xC73E], NFKD: [0x110B, 0x1173, 0x11A9] }, +{ source: [0xC73F], NFC: [0xC73F], NFD: [0x110B, 0x1173, 0x11AA], NFKC: [0xC73F], NFKD: [0x110B, 0x1173, 0x11AA] }, +{ source: [0xC740], NFC: [0xC740], NFD: [0x110B, 0x1173, 0x11AB], NFKC: [0xC740], NFKD: [0x110B, 0x1173, 0x11AB] }, +{ source: [0xC741], NFC: [0xC741], NFD: [0x110B, 0x1173, 0x11AC], NFKC: [0xC741], NFKD: [0x110B, 0x1173, 0x11AC] }, +{ source: [0xC742], NFC: [0xC742], NFD: [0x110B, 0x1173, 0x11AD], NFKC: [0xC742], NFKD: [0x110B, 0x1173, 0x11AD] }, +{ source: [0xC743], NFC: [0xC743], NFD: [0x110B, 0x1173, 0x11AE], NFKC: [0xC743], NFKD: [0x110B, 0x1173, 0x11AE] }, +{ source: [0xC744], NFC: [0xC744], NFD: [0x110B, 0x1173, 0x11AF], NFKC: [0xC744], NFKD: [0x110B, 0x1173, 0x11AF] }, +{ source: [0xC745], NFC: [0xC745], NFD: [0x110B, 0x1173, 0x11B0], NFKC: [0xC745], NFKD: [0x110B, 0x1173, 0x11B0] }, +{ source: [0xC746], NFC: [0xC746], NFD: [0x110B, 0x1173, 0x11B1], NFKC: [0xC746], NFKD: [0x110B, 0x1173, 0x11B1] }, +{ source: [0xC747], NFC: [0xC747], NFD: [0x110B, 0x1173, 0x11B2], NFKC: [0xC747], NFKD: [0x110B, 0x1173, 0x11B2] }, +{ source: [0xC748], NFC: [0xC748], NFD: [0x110B, 0x1173, 0x11B3], NFKC: [0xC748], NFKD: [0x110B, 0x1173, 0x11B3] }, +{ source: [0xC749], NFC: [0xC749], NFD: [0x110B, 0x1173, 0x11B4], NFKC: [0xC749], NFKD: [0x110B, 0x1173, 0x11B4] }, +{ source: [0xC74A], NFC: [0xC74A], NFD: [0x110B, 0x1173, 0x11B5], NFKC: [0xC74A], NFKD: [0x110B, 0x1173, 0x11B5] }, +{ source: [0xC74B], NFC: [0xC74B], NFD: [0x110B, 0x1173, 0x11B6], NFKC: [0xC74B], NFKD: [0x110B, 0x1173, 0x11B6] }, +{ source: [0xC74C], NFC: [0xC74C], NFD: [0x110B, 0x1173, 0x11B7], NFKC: [0xC74C], NFKD: [0x110B, 0x1173, 0x11B7] }, +{ source: [0xC74D], NFC: [0xC74D], NFD: [0x110B, 0x1173, 0x11B8], NFKC: [0xC74D], NFKD: [0x110B, 0x1173, 0x11B8] }, +{ source: [0xC74E], NFC: [0xC74E], NFD: [0x110B, 0x1173, 0x11B9], NFKC: [0xC74E], NFKD: [0x110B, 0x1173, 0x11B9] }, +{ source: [0xC74F], NFC: [0xC74F], NFD: [0x110B, 0x1173, 0x11BA], NFKC: [0xC74F], NFKD: [0x110B, 0x1173, 0x11BA] }, +{ source: [0xC750], NFC: [0xC750], NFD: [0x110B, 0x1173, 0x11BB], NFKC: [0xC750], NFKD: [0x110B, 0x1173, 0x11BB] }, +{ source: [0xC751], NFC: [0xC751], NFD: [0x110B, 0x1173, 0x11BC], NFKC: [0xC751], NFKD: [0x110B, 0x1173, 0x11BC] }, +{ source: [0xC752], NFC: [0xC752], NFD: [0x110B, 0x1173, 0x11BD], NFKC: [0xC752], NFKD: [0x110B, 0x1173, 0x11BD] }, +{ source: [0xC753], NFC: [0xC753], NFD: [0x110B, 0x1173, 0x11BE], NFKC: [0xC753], NFKD: [0x110B, 0x1173, 0x11BE] }, +{ source: [0xC754], NFC: [0xC754], NFD: [0x110B, 0x1173, 0x11BF], NFKC: [0xC754], NFKD: [0x110B, 0x1173, 0x11BF] }, +{ source: [0xC755], NFC: [0xC755], NFD: [0x110B, 0x1173, 0x11C0], NFKC: [0xC755], NFKD: [0x110B, 0x1173, 0x11C0] }, +{ source: [0xC756], NFC: [0xC756], NFD: [0x110B, 0x1173, 0x11C1], NFKC: [0xC756], NFKD: [0x110B, 0x1173, 0x11C1] }, +{ source: [0xC757], NFC: [0xC757], NFD: [0x110B, 0x1173, 0x11C2], NFKC: [0xC757], NFKD: [0x110B, 0x1173, 0x11C2] }, +{ source: [0xC758], NFC: [0xC758], NFD: [0x110B, 0x1174], NFKC: [0xC758], NFKD: [0x110B, 0x1174] }, +{ source: [0xC759], NFC: [0xC759], NFD: [0x110B, 0x1174, 0x11A8], NFKC: [0xC759], NFKD: [0x110B, 0x1174, 0x11A8] }, +{ source: [0xC75A], NFC: [0xC75A], NFD: [0x110B, 0x1174, 0x11A9], NFKC: [0xC75A], NFKD: [0x110B, 0x1174, 0x11A9] }, +{ source: [0xC75B], NFC: [0xC75B], NFD: [0x110B, 0x1174, 0x11AA], NFKC: [0xC75B], NFKD: [0x110B, 0x1174, 0x11AA] }, +{ source: [0xC75C], NFC: [0xC75C], NFD: [0x110B, 0x1174, 0x11AB], NFKC: [0xC75C], NFKD: [0x110B, 0x1174, 0x11AB] }, +{ source: [0xC75D], NFC: [0xC75D], NFD: [0x110B, 0x1174, 0x11AC], NFKC: [0xC75D], NFKD: [0x110B, 0x1174, 0x11AC] }, +{ source: [0xC75E], NFC: [0xC75E], NFD: [0x110B, 0x1174, 0x11AD], NFKC: [0xC75E], NFKD: [0x110B, 0x1174, 0x11AD] }, +{ source: [0xC75F], NFC: [0xC75F], NFD: [0x110B, 0x1174, 0x11AE], NFKC: [0xC75F], NFKD: [0x110B, 0x1174, 0x11AE] }, +{ source: [0xC760], NFC: [0xC760], NFD: [0x110B, 0x1174, 0x11AF], NFKC: [0xC760], NFKD: [0x110B, 0x1174, 0x11AF] }, +{ source: [0xC761], NFC: [0xC761], NFD: [0x110B, 0x1174, 0x11B0], NFKC: [0xC761], NFKD: [0x110B, 0x1174, 0x11B0] }, +{ source: [0xC762], NFC: [0xC762], NFD: [0x110B, 0x1174, 0x11B1], NFKC: [0xC762], NFKD: [0x110B, 0x1174, 0x11B1] }, +{ source: [0xC763], NFC: [0xC763], NFD: [0x110B, 0x1174, 0x11B2], NFKC: [0xC763], NFKD: [0x110B, 0x1174, 0x11B2] }, +{ source: [0xC764], NFC: [0xC764], NFD: [0x110B, 0x1174, 0x11B3], NFKC: [0xC764], NFKD: [0x110B, 0x1174, 0x11B3] }, +{ source: [0xC765], NFC: [0xC765], NFD: [0x110B, 0x1174, 0x11B4], NFKC: [0xC765], NFKD: [0x110B, 0x1174, 0x11B4] }, +{ source: [0xC766], NFC: [0xC766], NFD: [0x110B, 0x1174, 0x11B5], NFKC: [0xC766], NFKD: [0x110B, 0x1174, 0x11B5] }, +{ source: [0xC767], NFC: [0xC767], NFD: [0x110B, 0x1174, 0x11B6], NFKC: [0xC767], NFKD: [0x110B, 0x1174, 0x11B6] }, +{ source: [0xC768], NFC: [0xC768], NFD: [0x110B, 0x1174, 0x11B7], NFKC: [0xC768], NFKD: [0x110B, 0x1174, 0x11B7] }, +{ source: [0xC769], NFC: [0xC769], NFD: [0x110B, 0x1174, 0x11B8], NFKC: [0xC769], NFKD: [0x110B, 0x1174, 0x11B8] }, +{ source: [0xC76A], NFC: [0xC76A], NFD: [0x110B, 0x1174, 0x11B9], NFKC: [0xC76A], NFKD: [0x110B, 0x1174, 0x11B9] }, +{ source: [0xC76B], NFC: [0xC76B], NFD: [0x110B, 0x1174, 0x11BA], NFKC: [0xC76B], NFKD: [0x110B, 0x1174, 0x11BA] }, +{ source: [0xC76C], NFC: [0xC76C], NFD: [0x110B, 0x1174, 0x11BB], NFKC: [0xC76C], NFKD: [0x110B, 0x1174, 0x11BB] }, +{ source: [0xC76D], NFC: [0xC76D], NFD: [0x110B, 0x1174, 0x11BC], NFKC: [0xC76D], NFKD: [0x110B, 0x1174, 0x11BC] }, +{ source: [0xC76E], NFC: [0xC76E], NFD: [0x110B, 0x1174, 0x11BD], NFKC: [0xC76E], NFKD: [0x110B, 0x1174, 0x11BD] }, +{ source: [0xC76F], NFC: [0xC76F], NFD: [0x110B, 0x1174, 0x11BE], NFKC: [0xC76F], NFKD: [0x110B, 0x1174, 0x11BE] }, +{ source: [0xC770], NFC: [0xC770], NFD: [0x110B, 0x1174, 0x11BF], NFKC: [0xC770], NFKD: [0x110B, 0x1174, 0x11BF] }, +{ source: [0xC771], NFC: [0xC771], NFD: [0x110B, 0x1174, 0x11C0], NFKC: [0xC771], NFKD: [0x110B, 0x1174, 0x11C0] }, +{ source: [0xC772], NFC: [0xC772], NFD: [0x110B, 0x1174, 0x11C1], NFKC: [0xC772], NFKD: [0x110B, 0x1174, 0x11C1] }, +{ source: [0xC773], NFC: [0xC773], NFD: [0x110B, 0x1174, 0x11C2], NFKC: [0xC773], NFKD: [0x110B, 0x1174, 0x11C2] }, +{ source: [0xC774], NFC: [0xC774], NFD: [0x110B, 0x1175], NFKC: [0xC774], NFKD: [0x110B, 0x1175] }, +{ source: [0xC775], NFC: [0xC775], NFD: [0x110B, 0x1175, 0x11A8], NFKC: [0xC775], NFKD: [0x110B, 0x1175, 0x11A8] }, +{ source: [0xC776], NFC: [0xC776], NFD: [0x110B, 0x1175, 0x11A9], NFKC: [0xC776], NFKD: [0x110B, 0x1175, 0x11A9] }, +{ source: [0xC777], NFC: [0xC777], NFD: [0x110B, 0x1175, 0x11AA], NFKC: [0xC777], NFKD: [0x110B, 0x1175, 0x11AA] }, +{ source: [0xC778], NFC: [0xC778], NFD: [0x110B, 0x1175, 0x11AB], NFKC: [0xC778], NFKD: [0x110B, 0x1175, 0x11AB] }, +{ source: [0xC779], NFC: [0xC779], NFD: [0x110B, 0x1175, 0x11AC], NFKC: [0xC779], NFKD: [0x110B, 0x1175, 0x11AC] }, +{ source: [0xC77A], NFC: [0xC77A], NFD: [0x110B, 0x1175, 0x11AD], NFKC: [0xC77A], NFKD: [0x110B, 0x1175, 0x11AD] }, +{ source: [0xC77B], NFC: [0xC77B], NFD: [0x110B, 0x1175, 0x11AE], NFKC: [0xC77B], NFKD: [0x110B, 0x1175, 0x11AE] }, +{ source: [0xC77C], NFC: [0xC77C], NFD: [0x110B, 0x1175, 0x11AF], NFKC: [0xC77C], NFKD: [0x110B, 0x1175, 0x11AF] }, +{ source: [0xC77D], NFC: [0xC77D], NFD: [0x110B, 0x1175, 0x11B0], NFKC: [0xC77D], NFKD: [0x110B, 0x1175, 0x11B0] }, +{ source: [0xC77E], NFC: [0xC77E], NFD: [0x110B, 0x1175, 0x11B1], NFKC: [0xC77E], NFKD: [0x110B, 0x1175, 0x11B1] }, +{ source: [0xC77F], NFC: [0xC77F], NFD: [0x110B, 0x1175, 0x11B2], NFKC: [0xC77F], NFKD: [0x110B, 0x1175, 0x11B2] }, +{ source: [0xC780], NFC: [0xC780], NFD: [0x110B, 0x1175, 0x11B3], NFKC: [0xC780], NFKD: [0x110B, 0x1175, 0x11B3] }, +{ source: [0xC781], NFC: [0xC781], NFD: [0x110B, 0x1175, 0x11B4], NFKC: [0xC781], NFKD: [0x110B, 0x1175, 0x11B4] }, +{ source: [0xC782], NFC: [0xC782], NFD: [0x110B, 0x1175, 0x11B5], NFKC: [0xC782], NFKD: [0x110B, 0x1175, 0x11B5] }, +{ source: [0xC783], NFC: [0xC783], NFD: [0x110B, 0x1175, 0x11B6], NFKC: [0xC783], NFKD: [0x110B, 0x1175, 0x11B6] }, +{ source: [0xC784], NFC: [0xC784], NFD: [0x110B, 0x1175, 0x11B7], NFKC: [0xC784], NFKD: [0x110B, 0x1175, 0x11B7] }, +{ source: [0xC785], NFC: [0xC785], NFD: [0x110B, 0x1175, 0x11B8], NFKC: [0xC785], NFKD: [0x110B, 0x1175, 0x11B8] }, +{ source: [0xC786], NFC: [0xC786], NFD: [0x110B, 0x1175, 0x11B9], NFKC: [0xC786], NFKD: [0x110B, 0x1175, 0x11B9] }, +{ source: [0xC787], NFC: [0xC787], NFD: [0x110B, 0x1175, 0x11BA], NFKC: [0xC787], NFKD: [0x110B, 0x1175, 0x11BA] }, +{ source: [0xC788], NFC: [0xC788], NFD: [0x110B, 0x1175, 0x11BB], NFKC: [0xC788], NFKD: [0x110B, 0x1175, 0x11BB] }, +{ source: [0xC789], NFC: [0xC789], NFD: [0x110B, 0x1175, 0x11BC], NFKC: [0xC789], NFKD: [0x110B, 0x1175, 0x11BC] }, +{ source: [0xC78A], NFC: [0xC78A], NFD: [0x110B, 0x1175, 0x11BD], NFKC: [0xC78A], NFKD: [0x110B, 0x1175, 0x11BD] }, +{ source: [0xC78B], NFC: [0xC78B], NFD: [0x110B, 0x1175, 0x11BE], NFKC: [0xC78B], NFKD: [0x110B, 0x1175, 0x11BE] }, +{ source: [0xC78C], NFC: [0xC78C], NFD: [0x110B, 0x1175, 0x11BF], NFKC: [0xC78C], NFKD: [0x110B, 0x1175, 0x11BF] }, +{ source: [0xC78D], NFC: [0xC78D], NFD: [0x110B, 0x1175, 0x11C0], NFKC: [0xC78D], NFKD: [0x110B, 0x1175, 0x11C0] }, +{ source: [0xC78E], NFC: [0xC78E], NFD: [0x110B, 0x1175, 0x11C1], NFKC: [0xC78E], NFKD: [0x110B, 0x1175, 0x11C1] }, +{ source: [0xC78F], NFC: [0xC78F], NFD: [0x110B, 0x1175, 0x11C2], NFKC: [0xC78F], NFKD: [0x110B, 0x1175, 0x11C2] }, +{ source: [0xC790], NFC: [0xC790], NFD: [0x110C, 0x1161], NFKC: [0xC790], NFKD: [0x110C, 0x1161] }, +{ source: [0xC791], NFC: [0xC791], NFD: [0x110C, 0x1161, 0x11A8], NFKC: [0xC791], NFKD: [0x110C, 0x1161, 0x11A8] }, +{ source: [0xC792], NFC: [0xC792], NFD: [0x110C, 0x1161, 0x11A9], NFKC: [0xC792], NFKD: [0x110C, 0x1161, 0x11A9] }, +{ source: [0xC793], NFC: [0xC793], NFD: [0x110C, 0x1161, 0x11AA], NFKC: [0xC793], NFKD: [0x110C, 0x1161, 0x11AA] }, +{ source: [0xC794], NFC: [0xC794], NFD: [0x110C, 0x1161, 0x11AB], NFKC: [0xC794], NFKD: [0x110C, 0x1161, 0x11AB] }, +{ source: [0xC795], NFC: [0xC795], NFD: [0x110C, 0x1161, 0x11AC], NFKC: [0xC795], NFKD: [0x110C, 0x1161, 0x11AC] }, +{ source: [0xC796], NFC: [0xC796], NFD: [0x110C, 0x1161, 0x11AD], NFKC: [0xC796], NFKD: [0x110C, 0x1161, 0x11AD] }, +{ source: [0xC797], NFC: [0xC797], NFD: [0x110C, 0x1161, 0x11AE], NFKC: [0xC797], NFKD: [0x110C, 0x1161, 0x11AE] }, +{ source: [0xC798], NFC: [0xC798], NFD: [0x110C, 0x1161, 0x11AF], NFKC: [0xC798], NFKD: [0x110C, 0x1161, 0x11AF] }, +{ source: [0xC799], NFC: [0xC799], NFD: [0x110C, 0x1161, 0x11B0], NFKC: [0xC799], NFKD: [0x110C, 0x1161, 0x11B0] }, +{ source: [0xC79A], NFC: [0xC79A], NFD: [0x110C, 0x1161, 0x11B1], NFKC: [0xC79A], NFKD: [0x110C, 0x1161, 0x11B1] }, +{ source: [0xC79B], NFC: [0xC79B], NFD: [0x110C, 0x1161, 0x11B2], NFKC: [0xC79B], NFKD: [0x110C, 0x1161, 0x11B2] }, +{ source: [0xC79C], NFC: [0xC79C], NFD: [0x110C, 0x1161, 0x11B3], NFKC: [0xC79C], NFKD: [0x110C, 0x1161, 0x11B3] }, +{ source: [0xC79D], NFC: [0xC79D], NFD: [0x110C, 0x1161, 0x11B4], NFKC: [0xC79D], NFKD: [0x110C, 0x1161, 0x11B4] }, +{ source: [0xC79E], NFC: [0xC79E], NFD: [0x110C, 0x1161, 0x11B5], NFKC: [0xC79E], NFKD: [0x110C, 0x1161, 0x11B5] }, +{ source: [0xC79F], NFC: [0xC79F], NFD: [0x110C, 0x1161, 0x11B6], NFKC: [0xC79F], NFKD: [0x110C, 0x1161, 0x11B6] }, +{ source: [0xC7A0], NFC: [0xC7A0], NFD: [0x110C, 0x1161, 0x11B7], NFKC: [0xC7A0], NFKD: [0x110C, 0x1161, 0x11B7] }, +{ source: [0xC7A1], NFC: [0xC7A1], NFD: [0x110C, 0x1161, 0x11B8], NFKC: [0xC7A1], NFKD: [0x110C, 0x1161, 0x11B8] }, +{ source: [0xC7A2], NFC: [0xC7A2], NFD: [0x110C, 0x1161, 0x11B9], NFKC: [0xC7A2], NFKD: [0x110C, 0x1161, 0x11B9] }, +{ source: [0xC7A3], NFC: [0xC7A3], NFD: [0x110C, 0x1161, 0x11BA], NFKC: [0xC7A3], NFKD: [0x110C, 0x1161, 0x11BA] }, +{ source: [0xC7A4], NFC: [0xC7A4], NFD: [0x110C, 0x1161, 0x11BB], NFKC: [0xC7A4], NFKD: [0x110C, 0x1161, 0x11BB] }, +{ source: [0xC7A5], NFC: [0xC7A5], NFD: [0x110C, 0x1161, 0x11BC], NFKC: [0xC7A5], NFKD: [0x110C, 0x1161, 0x11BC] }, +{ source: [0xC7A6], NFC: [0xC7A6], NFD: [0x110C, 0x1161, 0x11BD], NFKC: [0xC7A6], NFKD: [0x110C, 0x1161, 0x11BD] }, +{ source: [0xC7A7], NFC: [0xC7A7], NFD: [0x110C, 0x1161, 0x11BE], NFKC: [0xC7A7], NFKD: [0x110C, 0x1161, 0x11BE] }, +{ source: [0xC7A8], NFC: [0xC7A8], NFD: [0x110C, 0x1161, 0x11BF], NFKC: [0xC7A8], NFKD: [0x110C, 0x1161, 0x11BF] }, +{ source: [0xC7A9], NFC: [0xC7A9], NFD: [0x110C, 0x1161, 0x11C0], NFKC: [0xC7A9], NFKD: [0x110C, 0x1161, 0x11C0] }, +{ source: [0xC7AA], NFC: [0xC7AA], NFD: [0x110C, 0x1161, 0x11C1], NFKC: [0xC7AA], NFKD: [0x110C, 0x1161, 0x11C1] }, +{ source: [0xC7AB], NFC: [0xC7AB], NFD: [0x110C, 0x1161, 0x11C2], NFKC: [0xC7AB], NFKD: [0x110C, 0x1161, 0x11C2] }, +{ source: [0xC7AC], NFC: [0xC7AC], NFD: [0x110C, 0x1162], NFKC: [0xC7AC], NFKD: [0x110C, 0x1162] }, +{ source: [0xC7AD], NFC: [0xC7AD], NFD: [0x110C, 0x1162, 0x11A8], NFKC: [0xC7AD], NFKD: [0x110C, 0x1162, 0x11A8] }, +{ source: [0xC7AE], NFC: [0xC7AE], NFD: [0x110C, 0x1162, 0x11A9], NFKC: [0xC7AE], NFKD: [0x110C, 0x1162, 0x11A9] }, +{ source: [0xC7AF], NFC: [0xC7AF], NFD: [0x110C, 0x1162, 0x11AA], NFKC: [0xC7AF], NFKD: [0x110C, 0x1162, 0x11AA] }, +{ source: [0xC7B0], NFC: [0xC7B0], NFD: [0x110C, 0x1162, 0x11AB], NFKC: [0xC7B0], NFKD: [0x110C, 0x1162, 0x11AB] }, +{ source: [0xC7B1], NFC: [0xC7B1], NFD: [0x110C, 0x1162, 0x11AC], NFKC: [0xC7B1], NFKD: [0x110C, 0x1162, 0x11AC] }, +{ source: [0xC7B2], NFC: [0xC7B2], NFD: [0x110C, 0x1162, 0x11AD], NFKC: [0xC7B2], NFKD: [0x110C, 0x1162, 0x11AD] }, +{ source: [0xC7B3], NFC: [0xC7B3], NFD: [0x110C, 0x1162, 0x11AE], NFKC: [0xC7B3], NFKD: [0x110C, 0x1162, 0x11AE] }, +{ source: [0xC7B4], NFC: [0xC7B4], NFD: [0x110C, 0x1162, 0x11AF], NFKC: [0xC7B4], NFKD: [0x110C, 0x1162, 0x11AF] }, +{ source: [0xC7B5], NFC: [0xC7B5], NFD: [0x110C, 0x1162, 0x11B0], NFKC: [0xC7B5], NFKD: [0x110C, 0x1162, 0x11B0] }, +{ source: [0xC7B6], NFC: [0xC7B6], NFD: [0x110C, 0x1162, 0x11B1], NFKC: [0xC7B6], NFKD: [0x110C, 0x1162, 0x11B1] }, +{ source: [0xC7B7], NFC: [0xC7B7], NFD: [0x110C, 0x1162, 0x11B2], NFKC: [0xC7B7], NFKD: [0x110C, 0x1162, 0x11B2] }, +{ source: [0xC7B8], NFC: [0xC7B8], NFD: [0x110C, 0x1162, 0x11B3], NFKC: [0xC7B8], NFKD: [0x110C, 0x1162, 0x11B3] }, +{ source: [0xC7B9], NFC: [0xC7B9], NFD: [0x110C, 0x1162, 0x11B4], NFKC: [0xC7B9], NFKD: [0x110C, 0x1162, 0x11B4] }, +{ source: [0xC7BA], NFC: [0xC7BA], NFD: [0x110C, 0x1162, 0x11B5], NFKC: [0xC7BA], NFKD: [0x110C, 0x1162, 0x11B5] }, +{ source: [0xC7BB], NFC: [0xC7BB], NFD: [0x110C, 0x1162, 0x11B6], NFKC: [0xC7BB], NFKD: [0x110C, 0x1162, 0x11B6] }, +{ source: [0xC7BC], NFC: [0xC7BC], NFD: [0x110C, 0x1162, 0x11B7], NFKC: [0xC7BC], NFKD: [0x110C, 0x1162, 0x11B7] }, +{ source: [0xC7BD], NFC: [0xC7BD], NFD: [0x110C, 0x1162, 0x11B8], NFKC: [0xC7BD], NFKD: [0x110C, 0x1162, 0x11B8] }, +{ source: [0xC7BE], NFC: [0xC7BE], NFD: [0x110C, 0x1162, 0x11B9], NFKC: [0xC7BE], NFKD: [0x110C, 0x1162, 0x11B9] }, +{ source: [0xC7BF], NFC: [0xC7BF], NFD: [0x110C, 0x1162, 0x11BA], NFKC: [0xC7BF], NFKD: [0x110C, 0x1162, 0x11BA] }, +{ source: [0xC7C0], NFC: [0xC7C0], NFD: [0x110C, 0x1162, 0x11BB], NFKC: [0xC7C0], NFKD: [0x110C, 0x1162, 0x11BB] }, +{ source: [0xC7C1], NFC: [0xC7C1], NFD: [0x110C, 0x1162, 0x11BC], NFKC: [0xC7C1], NFKD: [0x110C, 0x1162, 0x11BC] }, +{ source: [0xC7C2], NFC: [0xC7C2], NFD: [0x110C, 0x1162, 0x11BD], NFKC: [0xC7C2], NFKD: [0x110C, 0x1162, 0x11BD] }, +{ source: [0xC7C3], NFC: [0xC7C3], NFD: [0x110C, 0x1162, 0x11BE], NFKC: [0xC7C3], NFKD: [0x110C, 0x1162, 0x11BE] }, +{ source: [0xC7C4], NFC: [0xC7C4], NFD: [0x110C, 0x1162, 0x11BF], NFKC: [0xC7C4], NFKD: [0x110C, 0x1162, 0x11BF] }, +{ source: [0xC7C5], NFC: [0xC7C5], NFD: [0x110C, 0x1162, 0x11C0], NFKC: [0xC7C5], NFKD: [0x110C, 0x1162, 0x11C0] }, +{ source: [0xC7C6], NFC: [0xC7C6], NFD: [0x110C, 0x1162, 0x11C1], NFKC: [0xC7C6], NFKD: [0x110C, 0x1162, 0x11C1] }, +{ source: [0xC7C7], NFC: [0xC7C7], NFD: [0x110C, 0x1162, 0x11C2], NFKC: [0xC7C7], NFKD: [0x110C, 0x1162, 0x11C2] }, +{ source: [0xC7C8], NFC: [0xC7C8], NFD: [0x110C, 0x1163], NFKC: [0xC7C8], NFKD: [0x110C, 0x1163] }, +{ source: [0xC7C9], NFC: [0xC7C9], NFD: [0x110C, 0x1163, 0x11A8], NFKC: [0xC7C9], NFKD: [0x110C, 0x1163, 0x11A8] }, +{ source: [0xC7CA], NFC: [0xC7CA], NFD: [0x110C, 0x1163, 0x11A9], NFKC: [0xC7CA], NFKD: [0x110C, 0x1163, 0x11A9] }, +{ source: [0xC7CB], NFC: [0xC7CB], NFD: [0x110C, 0x1163, 0x11AA], NFKC: [0xC7CB], NFKD: [0x110C, 0x1163, 0x11AA] }, +{ source: [0xC7CC], NFC: [0xC7CC], NFD: [0x110C, 0x1163, 0x11AB], NFKC: [0xC7CC], NFKD: [0x110C, 0x1163, 0x11AB] }, +{ source: [0xC7CD], NFC: [0xC7CD], NFD: [0x110C, 0x1163, 0x11AC], NFKC: [0xC7CD], NFKD: [0x110C, 0x1163, 0x11AC] }, +{ source: [0xC7CE], NFC: [0xC7CE], NFD: [0x110C, 0x1163, 0x11AD], NFKC: [0xC7CE], NFKD: [0x110C, 0x1163, 0x11AD] }, +{ source: [0xC7CF], NFC: [0xC7CF], NFD: [0x110C, 0x1163, 0x11AE], NFKC: [0xC7CF], NFKD: [0x110C, 0x1163, 0x11AE] }, +{ source: [0xC7D0], NFC: [0xC7D0], NFD: [0x110C, 0x1163, 0x11AF], NFKC: [0xC7D0], NFKD: [0x110C, 0x1163, 0x11AF] }, +{ source: [0xC7D1], NFC: [0xC7D1], NFD: [0x110C, 0x1163, 0x11B0], NFKC: [0xC7D1], NFKD: [0x110C, 0x1163, 0x11B0] }, +{ source: [0xC7D2], NFC: [0xC7D2], NFD: [0x110C, 0x1163, 0x11B1], NFKC: [0xC7D2], NFKD: [0x110C, 0x1163, 0x11B1] }, +{ source: [0xC7D3], NFC: [0xC7D3], NFD: [0x110C, 0x1163, 0x11B2], NFKC: [0xC7D3], NFKD: [0x110C, 0x1163, 0x11B2] }, +{ source: [0xC7D4], NFC: [0xC7D4], NFD: [0x110C, 0x1163, 0x11B3], NFKC: [0xC7D4], NFKD: [0x110C, 0x1163, 0x11B3] }, +{ source: [0xC7D5], NFC: [0xC7D5], NFD: [0x110C, 0x1163, 0x11B4], NFKC: [0xC7D5], NFKD: [0x110C, 0x1163, 0x11B4] }, +{ source: [0xC7D6], NFC: [0xC7D6], NFD: [0x110C, 0x1163, 0x11B5], NFKC: [0xC7D6], NFKD: [0x110C, 0x1163, 0x11B5] }, +{ source: [0xC7D7], NFC: [0xC7D7], NFD: [0x110C, 0x1163, 0x11B6], NFKC: [0xC7D7], NFKD: [0x110C, 0x1163, 0x11B6] }, +{ source: [0xC7D8], NFC: [0xC7D8], NFD: [0x110C, 0x1163, 0x11B7], NFKC: [0xC7D8], NFKD: [0x110C, 0x1163, 0x11B7] }, +{ source: [0xC7D9], NFC: [0xC7D9], NFD: [0x110C, 0x1163, 0x11B8], NFKC: [0xC7D9], NFKD: [0x110C, 0x1163, 0x11B8] }, +{ source: [0xC7DA], NFC: [0xC7DA], NFD: [0x110C, 0x1163, 0x11B9], NFKC: [0xC7DA], NFKD: [0x110C, 0x1163, 0x11B9] }, +{ source: [0xC7DB], NFC: [0xC7DB], NFD: [0x110C, 0x1163, 0x11BA], NFKC: [0xC7DB], NFKD: [0x110C, 0x1163, 0x11BA] }, +{ source: [0xC7DC], NFC: [0xC7DC], NFD: [0x110C, 0x1163, 0x11BB], NFKC: [0xC7DC], NFKD: [0x110C, 0x1163, 0x11BB] }, +{ source: [0xC7DD], NFC: [0xC7DD], NFD: [0x110C, 0x1163, 0x11BC], NFKC: [0xC7DD], NFKD: [0x110C, 0x1163, 0x11BC] }, +{ source: [0xC7DE], NFC: [0xC7DE], NFD: [0x110C, 0x1163, 0x11BD], NFKC: [0xC7DE], NFKD: [0x110C, 0x1163, 0x11BD] }, +{ source: [0xC7DF], NFC: [0xC7DF], NFD: [0x110C, 0x1163, 0x11BE], NFKC: [0xC7DF], NFKD: [0x110C, 0x1163, 0x11BE] }, +{ source: [0xC7E0], NFC: [0xC7E0], NFD: [0x110C, 0x1163, 0x11BF], NFKC: [0xC7E0], NFKD: [0x110C, 0x1163, 0x11BF] }, +{ source: [0xC7E1], NFC: [0xC7E1], NFD: [0x110C, 0x1163, 0x11C0], NFKC: [0xC7E1], NFKD: [0x110C, 0x1163, 0x11C0] }, +{ source: [0xC7E2], NFC: [0xC7E2], NFD: [0x110C, 0x1163, 0x11C1], NFKC: [0xC7E2], NFKD: [0x110C, 0x1163, 0x11C1] }, +{ source: [0xC7E3], NFC: [0xC7E3], NFD: [0x110C, 0x1163, 0x11C2], NFKC: [0xC7E3], NFKD: [0x110C, 0x1163, 0x11C2] }, +{ source: [0xC7E4], NFC: [0xC7E4], NFD: [0x110C, 0x1164], NFKC: [0xC7E4], NFKD: [0x110C, 0x1164] }, +{ source: [0xC7E5], NFC: [0xC7E5], NFD: [0x110C, 0x1164, 0x11A8], NFKC: [0xC7E5], NFKD: [0x110C, 0x1164, 0x11A8] }, +{ source: [0xC7E6], NFC: [0xC7E6], NFD: [0x110C, 0x1164, 0x11A9], NFKC: [0xC7E6], NFKD: [0x110C, 0x1164, 0x11A9] }, +{ source: [0xC7E7], NFC: [0xC7E7], NFD: [0x110C, 0x1164, 0x11AA], NFKC: [0xC7E7], NFKD: [0x110C, 0x1164, 0x11AA] }, +{ source: [0xC7E8], NFC: [0xC7E8], NFD: [0x110C, 0x1164, 0x11AB], NFKC: [0xC7E8], NFKD: [0x110C, 0x1164, 0x11AB] }, +{ source: [0xC7E9], NFC: [0xC7E9], NFD: [0x110C, 0x1164, 0x11AC], NFKC: [0xC7E9], NFKD: [0x110C, 0x1164, 0x11AC] }, +{ source: [0xC7EA], NFC: [0xC7EA], NFD: [0x110C, 0x1164, 0x11AD], NFKC: [0xC7EA], NFKD: [0x110C, 0x1164, 0x11AD] }, +{ source: [0xC7EB], NFC: [0xC7EB], NFD: [0x110C, 0x1164, 0x11AE], NFKC: [0xC7EB], NFKD: [0x110C, 0x1164, 0x11AE] }, +{ source: [0xC7EC], NFC: [0xC7EC], NFD: [0x110C, 0x1164, 0x11AF], NFKC: [0xC7EC], NFKD: [0x110C, 0x1164, 0x11AF] }, +{ source: [0xC7ED], NFC: [0xC7ED], NFD: [0x110C, 0x1164, 0x11B0], NFKC: [0xC7ED], NFKD: [0x110C, 0x1164, 0x11B0] }, +{ source: [0xC7EE], NFC: [0xC7EE], NFD: [0x110C, 0x1164, 0x11B1], NFKC: [0xC7EE], NFKD: [0x110C, 0x1164, 0x11B1] }, +{ source: [0xC7EF], NFC: [0xC7EF], NFD: [0x110C, 0x1164, 0x11B2], NFKC: [0xC7EF], NFKD: [0x110C, 0x1164, 0x11B2] }, +{ source: [0xC7F0], NFC: [0xC7F0], NFD: [0x110C, 0x1164, 0x11B3], NFKC: [0xC7F0], NFKD: [0x110C, 0x1164, 0x11B3] }, +{ source: [0xC7F1], NFC: [0xC7F1], NFD: [0x110C, 0x1164, 0x11B4], NFKC: [0xC7F1], NFKD: [0x110C, 0x1164, 0x11B4] }, +{ source: [0xC7F2], NFC: [0xC7F2], NFD: [0x110C, 0x1164, 0x11B5], NFKC: [0xC7F2], NFKD: [0x110C, 0x1164, 0x11B5] }, +{ source: [0xC7F3], NFC: [0xC7F3], NFD: [0x110C, 0x1164, 0x11B6], NFKC: [0xC7F3], NFKD: [0x110C, 0x1164, 0x11B6] }, +{ source: [0xC7F4], NFC: [0xC7F4], NFD: [0x110C, 0x1164, 0x11B7], NFKC: [0xC7F4], NFKD: [0x110C, 0x1164, 0x11B7] }, +{ source: [0xC7F5], NFC: [0xC7F5], NFD: [0x110C, 0x1164, 0x11B8], NFKC: [0xC7F5], NFKD: [0x110C, 0x1164, 0x11B8] }, +{ source: [0xC7F6], NFC: [0xC7F6], NFD: [0x110C, 0x1164, 0x11B9], NFKC: [0xC7F6], NFKD: [0x110C, 0x1164, 0x11B9] }, +{ source: [0xC7F7], NFC: [0xC7F7], NFD: [0x110C, 0x1164, 0x11BA], NFKC: [0xC7F7], NFKD: [0x110C, 0x1164, 0x11BA] }, +{ source: [0xC7F8], NFC: [0xC7F8], NFD: [0x110C, 0x1164, 0x11BB], NFKC: [0xC7F8], NFKD: [0x110C, 0x1164, 0x11BB] }, +{ source: [0xC7F9], NFC: [0xC7F9], NFD: [0x110C, 0x1164, 0x11BC], NFKC: [0xC7F9], NFKD: [0x110C, 0x1164, 0x11BC] }, +{ source: [0xC7FA], NFC: [0xC7FA], NFD: [0x110C, 0x1164, 0x11BD], NFKC: [0xC7FA], NFKD: [0x110C, 0x1164, 0x11BD] }, +{ source: [0xC7FB], NFC: [0xC7FB], NFD: [0x110C, 0x1164, 0x11BE], NFKC: [0xC7FB], NFKD: [0x110C, 0x1164, 0x11BE] }, +{ source: [0xC7FC], NFC: [0xC7FC], NFD: [0x110C, 0x1164, 0x11BF], NFKC: [0xC7FC], NFKD: [0x110C, 0x1164, 0x11BF] }, +{ source: [0xC7FD], NFC: [0xC7FD], NFD: [0x110C, 0x1164, 0x11C0], NFKC: [0xC7FD], NFKD: [0x110C, 0x1164, 0x11C0] }, +{ source: [0xC7FE], NFC: [0xC7FE], NFD: [0x110C, 0x1164, 0x11C1], NFKC: [0xC7FE], NFKD: [0x110C, 0x1164, 0x11C1] }, +{ source: [0xC7FF], NFC: [0xC7FF], NFD: [0x110C, 0x1164, 0x11C2], NFKC: [0xC7FF], NFKD: [0x110C, 0x1164, 0x11C2] }, +{ source: [0xC800], NFC: [0xC800], NFD: [0x110C, 0x1165], NFKC: [0xC800], NFKD: [0x110C, 0x1165] }, +{ source: [0xC801], NFC: [0xC801], NFD: [0x110C, 0x1165, 0x11A8], NFKC: [0xC801], NFKD: [0x110C, 0x1165, 0x11A8] }, +{ source: [0xC802], NFC: [0xC802], NFD: [0x110C, 0x1165, 0x11A9], NFKC: [0xC802], NFKD: [0x110C, 0x1165, 0x11A9] }, +{ source: [0xC803], NFC: [0xC803], NFD: [0x110C, 0x1165, 0x11AA], NFKC: [0xC803], NFKD: [0x110C, 0x1165, 0x11AA] }, +{ source: [0xC804], NFC: [0xC804], NFD: [0x110C, 0x1165, 0x11AB], NFKC: [0xC804], NFKD: [0x110C, 0x1165, 0x11AB] }, +{ source: [0xC805], NFC: [0xC805], NFD: [0x110C, 0x1165, 0x11AC], NFKC: [0xC805], NFKD: [0x110C, 0x1165, 0x11AC] }, +{ source: [0xC806], NFC: [0xC806], NFD: [0x110C, 0x1165, 0x11AD], NFKC: [0xC806], NFKD: [0x110C, 0x1165, 0x11AD] }, +{ source: [0xC807], NFC: [0xC807], NFD: [0x110C, 0x1165, 0x11AE], NFKC: [0xC807], NFKD: [0x110C, 0x1165, 0x11AE] }, +{ source: [0xC808], NFC: [0xC808], NFD: [0x110C, 0x1165, 0x11AF], NFKC: [0xC808], NFKD: [0x110C, 0x1165, 0x11AF] }, +{ source: [0xC809], NFC: [0xC809], NFD: [0x110C, 0x1165, 0x11B0], NFKC: [0xC809], NFKD: [0x110C, 0x1165, 0x11B0] }, +{ source: [0xC80A], NFC: [0xC80A], NFD: [0x110C, 0x1165, 0x11B1], NFKC: [0xC80A], NFKD: [0x110C, 0x1165, 0x11B1] }, +{ source: [0xC80B], NFC: [0xC80B], NFD: [0x110C, 0x1165, 0x11B2], NFKC: [0xC80B], NFKD: [0x110C, 0x1165, 0x11B2] }, +{ source: [0xC80C], NFC: [0xC80C], NFD: [0x110C, 0x1165, 0x11B3], NFKC: [0xC80C], NFKD: [0x110C, 0x1165, 0x11B3] }, +{ source: [0xC80D], NFC: [0xC80D], NFD: [0x110C, 0x1165, 0x11B4], NFKC: [0xC80D], NFKD: [0x110C, 0x1165, 0x11B4] }, +{ source: [0xC80E], NFC: [0xC80E], NFD: [0x110C, 0x1165, 0x11B5], NFKC: [0xC80E], NFKD: [0x110C, 0x1165, 0x11B5] }, +{ source: [0xC80F], NFC: [0xC80F], NFD: [0x110C, 0x1165, 0x11B6], NFKC: [0xC80F], NFKD: [0x110C, 0x1165, 0x11B6] }, +{ source: [0xC810], NFC: [0xC810], NFD: [0x110C, 0x1165, 0x11B7], NFKC: [0xC810], NFKD: [0x110C, 0x1165, 0x11B7] }, +{ source: [0xC811], NFC: [0xC811], NFD: [0x110C, 0x1165, 0x11B8], NFKC: [0xC811], NFKD: [0x110C, 0x1165, 0x11B8] }, +{ source: [0xC812], NFC: [0xC812], NFD: [0x110C, 0x1165, 0x11B9], NFKC: [0xC812], NFKD: [0x110C, 0x1165, 0x11B9] }, +{ source: [0xC813], NFC: [0xC813], NFD: [0x110C, 0x1165, 0x11BA], NFKC: [0xC813], NFKD: [0x110C, 0x1165, 0x11BA] }, +{ source: [0xC814], NFC: [0xC814], NFD: [0x110C, 0x1165, 0x11BB], NFKC: [0xC814], NFKD: [0x110C, 0x1165, 0x11BB] }, +{ source: [0xC815], NFC: [0xC815], NFD: [0x110C, 0x1165, 0x11BC], NFKC: [0xC815], NFKD: [0x110C, 0x1165, 0x11BC] }, +{ source: [0xC816], NFC: [0xC816], NFD: [0x110C, 0x1165, 0x11BD], NFKC: [0xC816], NFKD: [0x110C, 0x1165, 0x11BD] }, +{ source: [0xC817], NFC: [0xC817], NFD: [0x110C, 0x1165, 0x11BE], NFKC: [0xC817], NFKD: [0x110C, 0x1165, 0x11BE] }, +{ source: [0xC818], NFC: [0xC818], NFD: [0x110C, 0x1165, 0x11BF], NFKC: [0xC818], NFKD: [0x110C, 0x1165, 0x11BF] }, +{ source: [0xC819], NFC: [0xC819], NFD: [0x110C, 0x1165, 0x11C0], NFKC: [0xC819], NFKD: [0x110C, 0x1165, 0x11C0] }, +{ source: [0xC81A], NFC: [0xC81A], NFD: [0x110C, 0x1165, 0x11C1], NFKC: [0xC81A], NFKD: [0x110C, 0x1165, 0x11C1] }, +{ source: [0xC81B], NFC: [0xC81B], NFD: [0x110C, 0x1165, 0x11C2], NFKC: [0xC81B], NFKD: [0x110C, 0x1165, 0x11C2] }, +{ source: [0xC81C], NFC: [0xC81C], NFD: [0x110C, 0x1166], NFKC: [0xC81C], NFKD: [0x110C, 0x1166] }, +{ source: [0xC81D], NFC: [0xC81D], NFD: [0x110C, 0x1166, 0x11A8], NFKC: [0xC81D], NFKD: [0x110C, 0x1166, 0x11A8] }, +{ source: [0xC81E], NFC: [0xC81E], NFD: [0x110C, 0x1166, 0x11A9], NFKC: [0xC81E], NFKD: [0x110C, 0x1166, 0x11A9] }, +{ source: [0xC81F], NFC: [0xC81F], NFD: [0x110C, 0x1166, 0x11AA], NFKC: [0xC81F], NFKD: [0x110C, 0x1166, 0x11AA] }, +{ source: [0xC820], NFC: [0xC820], NFD: [0x110C, 0x1166, 0x11AB], NFKC: [0xC820], NFKD: [0x110C, 0x1166, 0x11AB] }, +{ source: [0xC821], NFC: [0xC821], NFD: [0x110C, 0x1166, 0x11AC], NFKC: [0xC821], NFKD: [0x110C, 0x1166, 0x11AC] }, +{ source: [0xC822], NFC: [0xC822], NFD: [0x110C, 0x1166, 0x11AD], NFKC: [0xC822], NFKD: [0x110C, 0x1166, 0x11AD] }, +{ source: [0xC823], NFC: [0xC823], NFD: [0x110C, 0x1166, 0x11AE], NFKC: [0xC823], NFKD: [0x110C, 0x1166, 0x11AE] }, +{ source: [0xC824], NFC: [0xC824], NFD: [0x110C, 0x1166, 0x11AF], NFKC: [0xC824], NFKD: [0x110C, 0x1166, 0x11AF] }, +{ source: [0xC825], NFC: [0xC825], NFD: [0x110C, 0x1166, 0x11B0], NFKC: [0xC825], NFKD: [0x110C, 0x1166, 0x11B0] }, +{ source: [0xC826], NFC: [0xC826], NFD: [0x110C, 0x1166, 0x11B1], NFKC: [0xC826], NFKD: [0x110C, 0x1166, 0x11B1] }, +{ source: [0xC827], NFC: [0xC827], NFD: [0x110C, 0x1166, 0x11B2], NFKC: [0xC827], NFKD: [0x110C, 0x1166, 0x11B2] }, +{ source: [0xC828], NFC: [0xC828], NFD: [0x110C, 0x1166, 0x11B3], NFKC: [0xC828], NFKD: [0x110C, 0x1166, 0x11B3] }, +{ source: [0xC829], NFC: [0xC829], NFD: [0x110C, 0x1166, 0x11B4], NFKC: [0xC829], NFKD: [0x110C, 0x1166, 0x11B4] }, +{ source: [0xC82A], NFC: [0xC82A], NFD: [0x110C, 0x1166, 0x11B5], NFKC: [0xC82A], NFKD: [0x110C, 0x1166, 0x11B5] }, +{ source: [0xC82B], NFC: [0xC82B], NFD: [0x110C, 0x1166, 0x11B6], NFKC: [0xC82B], NFKD: [0x110C, 0x1166, 0x11B6] }, +{ source: [0xC82C], NFC: [0xC82C], NFD: [0x110C, 0x1166, 0x11B7], NFKC: [0xC82C], NFKD: [0x110C, 0x1166, 0x11B7] }, +{ source: [0xC82D], NFC: [0xC82D], NFD: [0x110C, 0x1166, 0x11B8], NFKC: [0xC82D], NFKD: [0x110C, 0x1166, 0x11B8] }, +{ source: [0xC82E], NFC: [0xC82E], NFD: [0x110C, 0x1166, 0x11B9], NFKC: [0xC82E], NFKD: [0x110C, 0x1166, 0x11B9] }, +{ source: [0xC82F], NFC: [0xC82F], NFD: [0x110C, 0x1166, 0x11BA], NFKC: [0xC82F], NFKD: [0x110C, 0x1166, 0x11BA] }, +{ source: [0xC830], NFC: [0xC830], NFD: [0x110C, 0x1166, 0x11BB], NFKC: [0xC830], NFKD: [0x110C, 0x1166, 0x11BB] }, +{ source: [0xC831], NFC: [0xC831], NFD: [0x110C, 0x1166, 0x11BC], NFKC: [0xC831], NFKD: [0x110C, 0x1166, 0x11BC] }, +{ source: [0xC832], NFC: [0xC832], NFD: [0x110C, 0x1166, 0x11BD], NFKC: [0xC832], NFKD: [0x110C, 0x1166, 0x11BD] }, +{ source: [0xC833], NFC: [0xC833], NFD: [0x110C, 0x1166, 0x11BE], NFKC: [0xC833], NFKD: [0x110C, 0x1166, 0x11BE] }, +{ source: [0xC834], NFC: [0xC834], NFD: [0x110C, 0x1166, 0x11BF], NFKC: [0xC834], NFKD: [0x110C, 0x1166, 0x11BF] }, +{ source: [0xC835], NFC: [0xC835], NFD: [0x110C, 0x1166, 0x11C0], NFKC: [0xC835], NFKD: [0x110C, 0x1166, 0x11C0] }, +{ source: [0xC836], NFC: [0xC836], NFD: [0x110C, 0x1166, 0x11C1], NFKC: [0xC836], NFKD: [0x110C, 0x1166, 0x11C1] }, +{ source: [0xC837], NFC: [0xC837], NFD: [0x110C, 0x1166, 0x11C2], NFKC: [0xC837], NFKD: [0x110C, 0x1166, 0x11C2] }, +{ source: [0xC838], NFC: [0xC838], NFD: [0x110C, 0x1167], NFKC: [0xC838], NFKD: [0x110C, 0x1167] }, +{ source: [0xC839], NFC: [0xC839], NFD: [0x110C, 0x1167, 0x11A8], NFKC: [0xC839], NFKD: [0x110C, 0x1167, 0x11A8] }, +{ source: [0xC83A], NFC: [0xC83A], NFD: [0x110C, 0x1167, 0x11A9], NFKC: [0xC83A], NFKD: [0x110C, 0x1167, 0x11A9] }, +{ source: [0xC83B], NFC: [0xC83B], NFD: [0x110C, 0x1167, 0x11AA], NFKC: [0xC83B], NFKD: [0x110C, 0x1167, 0x11AA] }, +{ source: [0xC83C], NFC: [0xC83C], NFD: [0x110C, 0x1167, 0x11AB], NFKC: [0xC83C], NFKD: [0x110C, 0x1167, 0x11AB] }, +{ source: [0xC83D], NFC: [0xC83D], NFD: [0x110C, 0x1167, 0x11AC], NFKC: [0xC83D], NFKD: [0x110C, 0x1167, 0x11AC] }, +{ source: [0xC83E], NFC: [0xC83E], NFD: [0x110C, 0x1167, 0x11AD], NFKC: [0xC83E], NFKD: [0x110C, 0x1167, 0x11AD] }, +{ source: [0xC83F], NFC: [0xC83F], NFD: [0x110C, 0x1167, 0x11AE], NFKC: [0xC83F], NFKD: [0x110C, 0x1167, 0x11AE] }, +{ source: [0xC840], NFC: [0xC840], NFD: [0x110C, 0x1167, 0x11AF], NFKC: [0xC840], NFKD: [0x110C, 0x1167, 0x11AF] }, +{ source: [0xC841], NFC: [0xC841], NFD: [0x110C, 0x1167, 0x11B0], NFKC: [0xC841], NFKD: [0x110C, 0x1167, 0x11B0] }, +{ source: [0xC842], NFC: [0xC842], NFD: [0x110C, 0x1167, 0x11B1], NFKC: [0xC842], NFKD: [0x110C, 0x1167, 0x11B1] }, +{ source: [0xC843], NFC: [0xC843], NFD: [0x110C, 0x1167, 0x11B2], NFKC: [0xC843], NFKD: [0x110C, 0x1167, 0x11B2] }, +{ source: [0xC844], NFC: [0xC844], NFD: [0x110C, 0x1167, 0x11B3], NFKC: [0xC844], NFKD: [0x110C, 0x1167, 0x11B3] }, +{ source: [0xC845], NFC: [0xC845], NFD: [0x110C, 0x1167, 0x11B4], NFKC: [0xC845], NFKD: [0x110C, 0x1167, 0x11B4] }, +{ source: [0xC846], NFC: [0xC846], NFD: [0x110C, 0x1167, 0x11B5], NFKC: [0xC846], NFKD: [0x110C, 0x1167, 0x11B5] }, +{ source: [0xC847], NFC: [0xC847], NFD: [0x110C, 0x1167, 0x11B6], NFKC: [0xC847], NFKD: [0x110C, 0x1167, 0x11B6] }, +{ source: [0xC848], NFC: [0xC848], NFD: [0x110C, 0x1167, 0x11B7], NFKC: [0xC848], NFKD: [0x110C, 0x1167, 0x11B7] }, +{ source: [0xC849], NFC: [0xC849], NFD: [0x110C, 0x1167, 0x11B8], NFKC: [0xC849], NFKD: [0x110C, 0x1167, 0x11B8] }, +{ source: [0xC84A], NFC: [0xC84A], NFD: [0x110C, 0x1167, 0x11B9], NFKC: [0xC84A], NFKD: [0x110C, 0x1167, 0x11B9] }, +{ source: [0xC84B], NFC: [0xC84B], NFD: [0x110C, 0x1167, 0x11BA], NFKC: [0xC84B], NFKD: [0x110C, 0x1167, 0x11BA] }, +{ source: [0xC84C], NFC: [0xC84C], NFD: [0x110C, 0x1167, 0x11BB], NFKC: [0xC84C], NFKD: [0x110C, 0x1167, 0x11BB] }, +{ source: [0xC84D], NFC: [0xC84D], NFD: [0x110C, 0x1167, 0x11BC], NFKC: [0xC84D], NFKD: [0x110C, 0x1167, 0x11BC] }, +{ source: [0xC84E], NFC: [0xC84E], NFD: [0x110C, 0x1167, 0x11BD], NFKC: [0xC84E], NFKD: [0x110C, 0x1167, 0x11BD] }, +{ source: [0xC84F], NFC: [0xC84F], NFD: [0x110C, 0x1167, 0x11BE], NFKC: [0xC84F], NFKD: [0x110C, 0x1167, 0x11BE] }, +{ source: [0xC850], NFC: [0xC850], NFD: [0x110C, 0x1167, 0x11BF], NFKC: [0xC850], NFKD: [0x110C, 0x1167, 0x11BF] }, +{ source: [0xC851], NFC: [0xC851], NFD: [0x110C, 0x1167, 0x11C0], NFKC: [0xC851], NFKD: [0x110C, 0x1167, 0x11C0] }, +{ source: [0xC852], NFC: [0xC852], NFD: [0x110C, 0x1167, 0x11C1], NFKC: [0xC852], NFKD: [0x110C, 0x1167, 0x11C1] }, +{ source: [0xC853], NFC: [0xC853], NFD: [0x110C, 0x1167, 0x11C2], NFKC: [0xC853], NFKD: [0x110C, 0x1167, 0x11C2] }, +{ source: [0xC854], NFC: [0xC854], NFD: [0x110C, 0x1168], NFKC: [0xC854], NFKD: [0x110C, 0x1168] }, +{ source: [0xC855], NFC: [0xC855], NFD: [0x110C, 0x1168, 0x11A8], NFKC: [0xC855], NFKD: [0x110C, 0x1168, 0x11A8] }, +{ source: [0xC856], NFC: [0xC856], NFD: [0x110C, 0x1168, 0x11A9], NFKC: [0xC856], NFKD: [0x110C, 0x1168, 0x11A9] }, +{ source: [0xC857], NFC: [0xC857], NFD: [0x110C, 0x1168, 0x11AA], NFKC: [0xC857], NFKD: [0x110C, 0x1168, 0x11AA] }, +{ source: [0xC858], NFC: [0xC858], NFD: [0x110C, 0x1168, 0x11AB], NFKC: [0xC858], NFKD: [0x110C, 0x1168, 0x11AB] }, +{ source: [0xC859], NFC: [0xC859], NFD: [0x110C, 0x1168, 0x11AC], NFKC: [0xC859], NFKD: [0x110C, 0x1168, 0x11AC] }, +{ source: [0xC85A], NFC: [0xC85A], NFD: [0x110C, 0x1168, 0x11AD], NFKC: [0xC85A], NFKD: [0x110C, 0x1168, 0x11AD] }, +{ source: [0xC85B], NFC: [0xC85B], NFD: [0x110C, 0x1168, 0x11AE], NFKC: [0xC85B], NFKD: [0x110C, 0x1168, 0x11AE] }, +{ source: [0xC85C], NFC: [0xC85C], NFD: [0x110C, 0x1168, 0x11AF], NFKC: [0xC85C], NFKD: [0x110C, 0x1168, 0x11AF] }, +{ source: [0xC85D], NFC: [0xC85D], NFD: [0x110C, 0x1168, 0x11B0], NFKC: [0xC85D], NFKD: [0x110C, 0x1168, 0x11B0] }, +{ source: [0xC85E], NFC: [0xC85E], NFD: [0x110C, 0x1168, 0x11B1], NFKC: [0xC85E], NFKD: [0x110C, 0x1168, 0x11B1] }, +{ source: [0xC85F], NFC: [0xC85F], NFD: [0x110C, 0x1168, 0x11B2], NFKC: [0xC85F], NFKD: [0x110C, 0x1168, 0x11B2] }, +{ source: [0xC860], NFC: [0xC860], NFD: [0x110C, 0x1168, 0x11B3], NFKC: [0xC860], NFKD: [0x110C, 0x1168, 0x11B3] }, +{ source: [0xC861], NFC: [0xC861], NFD: [0x110C, 0x1168, 0x11B4], NFKC: [0xC861], NFKD: [0x110C, 0x1168, 0x11B4] }, +{ source: [0xC862], NFC: [0xC862], NFD: [0x110C, 0x1168, 0x11B5], NFKC: [0xC862], NFKD: [0x110C, 0x1168, 0x11B5] }, +{ source: [0xC863], NFC: [0xC863], NFD: [0x110C, 0x1168, 0x11B6], NFKC: [0xC863], NFKD: [0x110C, 0x1168, 0x11B6] }, +{ source: [0xC864], NFC: [0xC864], NFD: [0x110C, 0x1168, 0x11B7], NFKC: [0xC864], NFKD: [0x110C, 0x1168, 0x11B7] }, +{ source: [0xC865], NFC: [0xC865], NFD: [0x110C, 0x1168, 0x11B8], NFKC: [0xC865], NFKD: [0x110C, 0x1168, 0x11B8] }, +{ source: [0xC866], NFC: [0xC866], NFD: [0x110C, 0x1168, 0x11B9], NFKC: [0xC866], NFKD: [0x110C, 0x1168, 0x11B9] }, +{ source: [0xC867], NFC: [0xC867], NFD: [0x110C, 0x1168, 0x11BA], NFKC: [0xC867], NFKD: [0x110C, 0x1168, 0x11BA] }, +{ source: [0xC868], NFC: [0xC868], NFD: [0x110C, 0x1168, 0x11BB], NFKC: [0xC868], NFKD: [0x110C, 0x1168, 0x11BB] }, +{ source: [0xC869], NFC: [0xC869], NFD: [0x110C, 0x1168, 0x11BC], NFKC: [0xC869], NFKD: [0x110C, 0x1168, 0x11BC] }, +{ source: [0xC86A], NFC: [0xC86A], NFD: [0x110C, 0x1168, 0x11BD], NFKC: [0xC86A], NFKD: [0x110C, 0x1168, 0x11BD] }, +{ source: [0xC86B], NFC: [0xC86B], NFD: [0x110C, 0x1168, 0x11BE], NFKC: [0xC86B], NFKD: [0x110C, 0x1168, 0x11BE] }, +{ source: [0xC86C], NFC: [0xC86C], NFD: [0x110C, 0x1168, 0x11BF], NFKC: [0xC86C], NFKD: [0x110C, 0x1168, 0x11BF] }, +{ source: [0xC86D], NFC: [0xC86D], NFD: [0x110C, 0x1168, 0x11C0], NFKC: [0xC86D], NFKD: [0x110C, 0x1168, 0x11C0] }, +{ source: [0xC86E], NFC: [0xC86E], NFD: [0x110C, 0x1168, 0x11C1], NFKC: [0xC86E], NFKD: [0x110C, 0x1168, 0x11C1] }, +{ source: [0xC86F], NFC: [0xC86F], NFD: [0x110C, 0x1168, 0x11C2], NFKC: [0xC86F], NFKD: [0x110C, 0x1168, 0x11C2] }, +{ source: [0xC870], NFC: [0xC870], NFD: [0x110C, 0x1169], NFKC: [0xC870], NFKD: [0x110C, 0x1169] }, +{ source: [0xC871], NFC: [0xC871], NFD: [0x110C, 0x1169, 0x11A8], NFKC: [0xC871], NFKD: [0x110C, 0x1169, 0x11A8] }, +{ source: [0xC872], NFC: [0xC872], NFD: [0x110C, 0x1169, 0x11A9], NFKC: [0xC872], NFKD: [0x110C, 0x1169, 0x11A9] }, +{ source: [0xC873], NFC: [0xC873], NFD: [0x110C, 0x1169, 0x11AA], NFKC: [0xC873], NFKD: [0x110C, 0x1169, 0x11AA] }, +{ source: [0xC874], NFC: [0xC874], NFD: [0x110C, 0x1169, 0x11AB], NFKC: [0xC874], NFKD: [0x110C, 0x1169, 0x11AB] }, +{ source: [0xC875], NFC: [0xC875], NFD: [0x110C, 0x1169, 0x11AC], NFKC: [0xC875], NFKD: [0x110C, 0x1169, 0x11AC] }, +{ source: [0xC876], NFC: [0xC876], NFD: [0x110C, 0x1169, 0x11AD], NFKC: [0xC876], NFKD: [0x110C, 0x1169, 0x11AD] }, +{ source: [0xC877], NFC: [0xC877], NFD: [0x110C, 0x1169, 0x11AE], NFKC: [0xC877], NFKD: [0x110C, 0x1169, 0x11AE] }, +{ source: [0xC878], NFC: [0xC878], NFD: [0x110C, 0x1169, 0x11AF], NFKC: [0xC878], NFKD: [0x110C, 0x1169, 0x11AF] }, +{ source: [0xC879], NFC: [0xC879], NFD: [0x110C, 0x1169, 0x11B0], NFKC: [0xC879], NFKD: [0x110C, 0x1169, 0x11B0] }, +{ source: [0xC87A], NFC: [0xC87A], NFD: [0x110C, 0x1169, 0x11B1], NFKC: [0xC87A], NFKD: [0x110C, 0x1169, 0x11B1] }, +{ source: [0xC87B], NFC: [0xC87B], NFD: [0x110C, 0x1169, 0x11B2], NFKC: [0xC87B], NFKD: [0x110C, 0x1169, 0x11B2] }, +{ source: [0xC87C], NFC: [0xC87C], NFD: [0x110C, 0x1169, 0x11B3], NFKC: [0xC87C], NFKD: [0x110C, 0x1169, 0x11B3] }, +{ source: [0xC87D], NFC: [0xC87D], NFD: [0x110C, 0x1169, 0x11B4], NFKC: [0xC87D], NFKD: [0x110C, 0x1169, 0x11B4] }, +{ source: [0xC87E], NFC: [0xC87E], NFD: [0x110C, 0x1169, 0x11B5], NFKC: [0xC87E], NFKD: [0x110C, 0x1169, 0x11B5] }, +{ source: [0xC87F], NFC: [0xC87F], NFD: [0x110C, 0x1169, 0x11B6], NFKC: [0xC87F], NFKD: [0x110C, 0x1169, 0x11B6] }, +{ source: [0xC880], NFC: [0xC880], NFD: [0x110C, 0x1169, 0x11B7], NFKC: [0xC880], NFKD: [0x110C, 0x1169, 0x11B7] }, +{ source: [0xC881], NFC: [0xC881], NFD: [0x110C, 0x1169, 0x11B8], NFKC: [0xC881], NFKD: [0x110C, 0x1169, 0x11B8] }, +{ source: [0xC882], NFC: [0xC882], NFD: [0x110C, 0x1169, 0x11B9], NFKC: [0xC882], NFKD: [0x110C, 0x1169, 0x11B9] }, +{ source: [0xC883], NFC: [0xC883], NFD: [0x110C, 0x1169, 0x11BA], NFKC: [0xC883], NFKD: [0x110C, 0x1169, 0x11BA] }, +{ source: [0xC884], NFC: [0xC884], NFD: [0x110C, 0x1169, 0x11BB], NFKC: [0xC884], NFKD: [0x110C, 0x1169, 0x11BB] }, +{ source: [0xC885], NFC: [0xC885], NFD: [0x110C, 0x1169, 0x11BC], NFKC: [0xC885], NFKD: [0x110C, 0x1169, 0x11BC] }, +{ source: [0xC886], NFC: [0xC886], NFD: [0x110C, 0x1169, 0x11BD], NFKC: [0xC886], NFKD: [0x110C, 0x1169, 0x11BD] }, +{ source: [0xC887], NFC: [0xC887], NFD: [0x110C, 0x1169, 0x11BE], NFKC: [0xC887], NFKD: [0x110C, 0x1169, 0x11BE] }, +{ source: [0xC888], NFC: [0xC888], NFD: [0x110C, 0x1169, 0x11BF], NFKC: [0xC888], NFKD: [0x110C, 0x1169, 0x11BF] }, +{ source: [0xC889], NFC: [0xC889], NFD: [0x110C, 0x1169, 0x11C0], NFKC: [0xC889], NFKD: [0x110C, 0x1169, 0x11C0] }, +{ source: [0xC88A], NFC: [0xC88A], NFD: [0x110C, 0x1169, 0x11C1], NFKC: [0xC88A], NFKD: [0x110C, 0x1169, 0x11C1] }, +{ source: [0xC88B], NFC: [0xC88B], NFD: [0x110C, 0x1169, 0x11C2], NFKC: [0xC88B], NFKD: [0x110C, 0x1169, 0x11C2] }, +{ source: [0xC88C], NFC: [0xC88C], NFD: [0x110C, 0x116A], NFKC: [0xC88C], NFKD: [0x110C, 0x116A] }, +{ source: [0xC88D], NFC: [0xC88D], NFD: [0x110C, 0x116A, 0x11A8], NFKC: [0xC88D], NFKD: [0x110C, 0x116A, 0x11A8] }, +{ source: [0xC88E], NFC: [0xC88E], NFD: [0x110C, 0x116A, 0x11A9], NFKC: [0xC88E], NFKD: [0x110C, 0x116A, 0x11A9] }, +{ source: [0xC88F], NFC: [0xC88F], NFD: [0x110C, 0x116A, 0x11AA], NFKC: [0xC88F], NFKD: [0x110C, 0x116A, 0x11AA] }, +{ source: [0xC890], NFC: [0xC890], NFD: [0x110C, 0x116A, 0x11AB], NFKC: [0xC890], NFKD: [0x110C, 0x116A, 0x11AB] }, +{ source: [0xC891], NFC: [0xC891], NFD: [0x110C, 0x116A, 0x11AC], NFKC: [0xC891], NFKD: [0x110C, 0x116A, 0x11AC] }, +{ source: [0xC892], NFC: [0xC892], NFD: [0x110C, 0x116A, 0x11AD], NFKC: [0xC892], NFKD: [0x110C, 0x116A, 0x11AD] }, +{ source: [0xC893], NFC: [0xC893], NFD: [0x110C, 0x116A, 0x11AE], NFKC: [0xC893], NFKD: [0x110C, 0x116A, 0x11AE] }, +{ source: [0xC894], NFC: [0xC894], NFD: [0x110C, 0x116A, 0x11AF], NFKC: [0xC894], NFKD: [0x110C, 0x116A, 0x11AF] }, +{ source: [0xC895], NFC: [0xC895], NFD: [0x110C, 0x116A, 0x11B0], NFKC: [0xC895], NFKD: [0x110C, 0x116A, 0x11B0] }, +{ source: [0xC896], NFC: [0xC896], NFD: [0x110C, 0x116A, 0x11B1], NFKC: [0xC896], NFKD: [0x110C, 0x116A, 0x11B1] }, +{ source: [0xC897], NFC: [0xC897], NFD: [0x110C, 0x116A, 0x11B2], NFKC: [0xC897], NFKD: [0x110C, 0x116A, 0x11B2] }, +{ source: [0xC898], NFC: [0xC898], NFD: [0x110C, 0x116A, 0x11B3], NFKC: [0xC898], NFKD: [0x110C, 0x116A, 0x11B3] }, +{ source: [0xC899], NFC: [0xC899], NFD: [0x110C, 0x116A, 0x11B4], NFKC: [0xC899], NFKD: [0x110C, 0x116A, 0x11B4] }, +{ source: [0xC89A], NFC: [0xC89A], NFD: [0x110C, 0x116A, 0x11B5], NFKC: [0xC89A], NFKD: [0x110C, 0x116A, 0x11B5] }, +{ source: [0xC89B], NFC: [0xC89B], NFD: [0x110C, 0x116A, 0x11B6], NFKC: [0xC89B], NFKD: [0x110C, 0x116A, 0x11B6] }, +{ source: [0xC89C], NFC: [0xC89C], NFD: [0x110C, 0x116A, 0x11B7], NFKC: [0xC89C], NFKD: [0x110C, 0x116A, 0x11B7] }, +{ source: [0xC89D], NFC: [0xC89D], NFD: [0x110C, 0x116A, 0x11B8], NFKC: [0xC89D], NFKD: [0x110C, 0x116A, 0x11B8] }, +{ source: [0xC89E], NFC: [0xC89E], NFD: [0x110C, 0x116A, 0x11B9], NFKC: [0xC89E], NFKD: [0x110C, 0x116A, 0x11B9] }, +{ source: [0xC89F], NFC: [0xC89F], NFD: [0x110C, 0x116A, 0x11BA], NFKC: [0xC89F], NFKD: [0x110C, 0x116A, 0x11BA] }, +{ source: [0xC8A0], NFC: [0xC8A0], NFD: [0x110C, 0x116A, 0x11BB], NFKC: [0xC8A0], NFKD: [0x110C, 0x116A, 0x11BB] }, +{ source: [0xC8A1], NFC: [0xC8A1], NFD: [0x110C, 0x116A, 0x11BC], NFKC: [0xC8A1], NFKD: [0x110C, 0x116A, 0x11BC] }, +{ source: [0xC8A2], NFC: [0xC8A2], NFD: [0x110C, 0x116A, 0x11BD], NFKC: [0xC8A2], NFKD: [0x110C, 0x116A, 0x11BD] }, +{ source: [0xC8A3], NFC: [0xC8A3], NFD: [0x110C, 0x116A, 0x11BE], NFKC: [0xC8A3], NFKD: [0x110C, 0x116A, 0x11BE] }, +{ source: [0xC8A4], NFC: [0xC8A4], NFD: [0x110C, 0x116A, 0x11BF], NFKC: [0xC8A4], NFKD: [0x110C, 0x116A, 0x11BF] }, +{ source: [0xC8A5], NFC: [0xC8A5], NFD: [0x110C, 0x116A, 0x11C0], NFKC: [0xC8A5], NFKD: [0x110C, 0x116A, 0x11C0] }, +{ source: [0xC8A6], NFC: [0xC8A6], NFD: [0x110C, 0x116A, 0x11C1], NFKC: [0xC8A6], NFKD: [0x110C, 0x116A, 0x11C1] }, +{ source: [0xC8A7], NFC: [0xC8A7], NFD: [0x110C, 0x116A, 0x11C2], NFKC: [0xC8A7], NFKD: [0x110C, 0x116A, 0x11C2] }, +{ source: [0xC8A8], NFC: [0xC8A8], NFD: [0x110C, 0x116B], NFKC: [0xC8A8], NFKD: [0x110C, 0x116B] }, +{ source: [0xC8A9], NFC: [0xC8A9], NFD: [0x110C, 0x116B, 0x11A8], NFKC: [0xC8A9], NFKD: [0x110C, 0x116B, 0x11A8] }, +{ source: [0xC8AA], NFC: [0xC8AA], NFD: [0x110C, 0x116B, 0x11A9], NFKC: [0xC8AA], NFKD: [0x110C, 0x116B, 0x11A9] }, +{ source: [0xC8AB], NFC: [0xC8AB], NFD: [0x110C, 0x116B, 0x11AA], NFKC: [0xC8AB], NFKD: [0x110C, 0x116B, 0x11AA] }, +{ source: [0xC8AC], NFC: [0xC8AC], NFD: [0x110C, 0x116B, 0x11AB], NFKC: [0xC8AC], NFKD: [0x110C, 0x116B, 0x11AB] }, +{ source: [0xC8AD], NFC: [0xC8AD], NFD: [0x110C, 0x116B, 0x11AC], NFKC: [0xC8AD], NFKD: [0x110C, 0x116B, 0x11AC] }, +{ source: [0xC8AE], NFC: [0xC8AE], NFD: [0x110C, 0x116B, 0x11AD], NFKC: [0xC8AE], NFKD: [0x110C, 0x116B, 0x11AD] }, +{ source: [0xC8AF], NFC: [0xC8AF], NFD: [0x110C, 0x116B, 0x11AE], NFKC: [0xC8AF], NFKD: [0x110C, 0x116B, 0x11AE] }, +{ source: [0xC8B0], NFC: [0xC8B0], NFD: [0x110C, 0x116B, 0x11AF], NFKC: [0xC8B0], NFKD: [0x110C, 0x116B, 0x11AF] }, +{ source: [0xC8B1], NFC: [0xC8B1], NFD: [0x110C, 0x116B, 0x11B0], NFKC: [0xC8B1], NFKD: [0x110C, 0x116B, 0x11B0] }, +{ source: [0xC8B2], NFC: [0xC8B2], NFD: [0x110C, 0x116B, 0x11B1], NFKC: [0xC8B2], NFKD: [0x110C, 0x116B, 0x11B1] }, +{ source: [0xC8B3], NFC: [0xC8B3], NFD: [0x110C, 0x116B, 0x11B2], NFKC: [0xC8B3], NFKD: [0x110C, 0x116B, 0x11B2] }, +{ source: [0xC8B4], NFC: [0xC8B4], NFD: [0x110C, 0x116B, 0x11B3], NFKC: [0xC8B4], NFKD: [0x110C, 0x116B, 0x11B3] }, +{ source: [0xC8B5], NFC: [0xC8B5], NFD: [0x110C, 0x116B, 0x11B4], NFKC: [0xC8B5], NFKD: [0x110C, 0x116B, 0x11B4] }, +{ source: [0xC8B6], NFC: [0xC8B6], NFD: [0x110C, 0x116B, 0x11B5], NFKC: [0xC8B6], NFKD: [0x110C, 0x116B, 0x11B5] }, +{ source: [0xC8B7], NFC: [0xC8B7], NFD: [0x110C, 0x116B, 0x11B6], NFKC: [0xC8B7], NFKD: [0x110C, 0x116B, 0x11B6] }, +{ source: [0xC8B8], NFC: [0xC8B8], NFD: [0x110C, 0x116B, 0x11B7], NFKC: [0xC8B8], NFKD: [0x110C, 0x116B, 0x11B7] }, +{ source: [0xC8B9], NFC: [0xC8B9], NFD: [0x110C, 0x116B, 0x11B8], NFKC: [0xC8B9], NFKD: [0x110C, 0x116B, 0x11B8] }, +{ source: [0xC8BA], NFC: [0xC8BA], NFD: [0x110C, 0x116B, 0x11B9], NFKC: [0xC8BA], NFKD: [0x110C, 0x116B, 0x11B9] }, +{ source: [0xC8BB], NFC: [0xC8BB], NFD: [0x110C, 0x116B, 0x11BA], NFKC: [0xC8BB], NFKD: [0x110C, 0x116B, 0x11BA] }, +{ source: [0xC8BC], NFC: [0xC8BC], NFD: [0x110C, 0x116B, 0x11BB], NFKC: [0xC8BC], NFKD: [0x110C, 0x116B, 0x11BB] }, +{ source: [0xC8BD], NFC: [0xC8BD], NFD: [0x110C, 0x116B, 0x11BC], NFKC: [0xC8BD], NFKD: [0x110C, 0x116B, 0x11BC] }, +{ source: [0xC8BE], NFC: [0xC8BE], NFD: [0x110C, 0x116B, 0x11BD], NFKC: [0xC8BE], NFKD: [0x110C, 0x116B, 0x11BD] }, +{ source: [0xC8BF], NFC: [0xC8BF], NFD: [0x110C, 0x116B, 0x11BE], NFKC: [0xC8BF], NFKD: [0x110C, 0x116B, 0x11BE] }, +{ source: [0xC8C0], NFC: [0xC8C0], NFD: [0x110C, 0x116B, 0x11BF], NFKC: [0xC8C0], NFKD: [0x110C, 0x116B, 0x11BF] }, +{ source: [0xC8C1], NFC: [0xC8C1], NFD: [0x110C, 0x116B, 0x11C0], NFKC: [0xC8C1], NFKD: [0x110C, 0x116B, 0x11C0] }, +{ source: [0xC8C2], NFC: [0xC8C2], NFD: [0x110C, 0x116B, 0x11C1], NFKC: [0xC8C2], NFKD: [0x110C, 0x116B, 0x11C1] }, +{ source: [0xC8C3], NFC: [0xC8C3], NFD: [0x110C, 0x116B, 0x11C2], NFKC: [0xC8C3], NFKD: [0x110C, 0x116B, 0x11C2] }, +{ source: [0xC8C4], NFC: [0xC8C4], NFD: [0x110C, 0x116C], NFKC: [0xC8C4], NFKD: [0x110C, 0x116C] }, +{ source: [0xC8C5], NFC: [0xC8C5], NFD: [0x110C, 0x116C, 0x11A8], NFKC: [0xC8C5], NFKD: [0x110C, 0x116C, 0x11A8] }, +{ source: [0xC8C6], NFC: [0xC8C6], NFD: [0x110C, 0x116C, 0x11A9], NFKC: [0xC8C6], NFKD: [0x110C, 0x116C, 0x11A9] }, +{ source: [0xC8C7], NFC: [0xC8C7], NFD: [0x110C, 0x116C, 0x11AA], NFKC: [0xC8C7], NFKD: [0x110C, 0x116C, 0x11AA] }, +{ source: [0xC8C8], NFC: [0xC8C8], NFD: [0x110C, 0x116C, 0x11AB], NFKC: [0xC8C8], NFKD: [0x110C, 0x116C, 0x11AB] }, +{ source: [0xC8C9], NFC: [0xC8C9], NFD: [0x110C, 0x116C, 0x11AC], NFKC: [0xC8C9], NFKD: [0x110C, 0x116C, 0x11AC] }, +{ source: [0xC8CA], NFC: [0xC8CA], NFD: [0x110C, 0x116C, 0x11AD], NFKC: [0xC8CA], NFKD: [0x110C, 0x116C, 0x11AD] }, +{ source: [0xC8CB], NFC: [0xC8CB], NFD: [0x110C, 0x116C, 0x11AE], NFKC: [0xC8CB], NFKD: [0x110C, 0x116C, 0x11AE] }, +{ source: [0xC8CC], NFC: [0xC8CC], NFD: [0x110C, 0x116C, 0x11AF], NFKC: [0xC8CC], NFKD: [0x110C, 0x116C, 0x11AF] }, +{ source: [0xC8CD], NFC: [0xC8CD], NFD: [0x110C, 0x116C, 0x11B0], NFKC: [0xC8CD], NFKD: [0x110C, 0x116C, 0x11B0] }, +{ source: [0xC8CE], NFC: [0xC8CE], NFD: [0x110C, 0x116C, 0x11B1], NFKC: [0xC8CE], NFKD: [0x110C, 0x116C, 0x11B1] }, +{ source: [0xC8CF], NFC: [0xC8CF], NFD: [0x110C, 0x116C, 0x11B2], NFKC: [0xC8CF], NFKD: [0x110C, 0x116C, 0x11B2] }, +{ source: [0xC8D0], NFC: [0xC8D0], NFD: [0x110C, 0x116C, 0x11B3], NFKC: [0xC8D0], NFKD: [0x110C, 0x116C, 0x11B3] }, +{ source: [0xC8D1], NFC: [0xC8D1], NFD: [0x110C, 0x116C, 0x11B4], NFKC: [0xC8D1], NFKD: [0x110C, 0x116C, 0x11B4] }, +{ source: [0xC8D2], NFC: [0xC8D2], NFD: [0x110C, 0x116C, 0x11B5], NFKC: [0xC8D2], NFKD: [0x110C, 0x116C, 0x11B5] }, +{ source: [0xC8D3], NFC: [0xC8D3], NFD: [0x110C, 0x116C, 0x11B6], NFKC: [0xC8D3], NFKD: [0x110C, 0x116C, 0x11B6] }, +{ source: [0xC8D4], NFC: [0xC8D4], NFD: [0x110C, 0x116C, 0x11B7], NFKC: [0xC8D4], NFKD: [0x110C, 0x116C, 0x11B7] }, +{ source: [0xC8D5], NFC: [0xC8D5], NFD: [0x110C, 0x116C, 0x11B8], NFKC: [0xC8D5], NFKD: [0x110C, 0x116C, 0x11B8] }, +{ source: [0xC8D6], NFC: [0xC8D6], NFD: [0x110C, 0x116C, 0x11B9], NFKC: [0xC8D6], NFKD: [0x110C, 0x116C, 0x11B9] }, +{ source: [0xC8D7], NFC: [0xC8D7], NFD: [0x110C, 0x116C, 0x11BA], NFKC: [0xC8D7], NFKD: [0x110C, 0x116C, 0x11BA] }, +{ source: [0xC8D8], NFC: [0xC8D8], NFD: [0x110C, 0x116C, 0x11BB], NFKC: [0xC8D8], NFKD: [0x110C, 0x116C, 0x11BB] }, +{ source: [0xC8D9], NFC: [0xC8D9], NFD: [0x110C, 0x116C, 0x11BC], NFKC: [0xC8D9], NFKD: [0x110C, 0x116C, 0x11BC] }, +{ source: [0xC8DA], NFC: [0xC8DA], NFD: [0x110C, 0x116C, 0x11BD], NFKC: [0xC8DA], NFKD: [0x110C, 0x116C, 0x11BD] }, +{ source: [0xC8DB], NFC: [0xC8DB], NFD: [0x110C, 0x116C, 0x11BE], NFKC: [0xC8DB], NFKD: [0x110C, 0x116C, 0x11BE] }, +{ source: [0xC8DC], NFC: [0xC8DC], NFD: [0x110C, 0x116C, 0x11BF], NFKC: [0xC8DC], NFKD: [0x110C, 0x116C, 0x11BF] }, +{ source: [0xC8DD], NFC: [0xC8DD], NFD: [0x110C, 0x116C, 0x11C0], NFKC: [0xC8DD], NFKD: [0x110C, 0x116C, 0x11C0] }, +{ source: [0xC8DE], NFC: [0xC8DE], NFD: [0x110C, 0x116C, 0x11C1], NFKC: [0xC8DE], NFKD: [0x110C, 0x116C, 0x11C1] }, +{ source: [0xC8DF], NFC: [0xC8DF], NFD: [0x110C, 0x116C, 0x11C2], NFKC: [0xC8DF], NFKD: [0x110C, 0x116C, 0x11C2] }, +{ source: [0xC8E0], NFC: [0xC8E0], NFD: [0x110C, 0x116D], NFKC: [0xC8E0], NFKD: [0x110C, 0x116D] }, +{ source: [0xC8E1], NFC: [0xC8E1], NFD: [0x110C, 0x116D, 0x11A8], NFKC: [0xC8E1], NFKD: [0x110C, 0x116D, 0x11A8] }, +{ source: [0xC8E2], NFC: [0xC8E2], NFD: [0x110C, 0x116D, 0x11A9], NFKC: [0xC8E2], NFKD: [0x110C, 0x116D, 0x11A9] }, +{ source: [0xC8E3], NFC: [0xC8E3], NFD: [0x110C, 0x116D, 0x11AA], NFKC: [0xC8E3], NFKD: [0x110C, 0x116D, 0x11AA] }, +{ source: [0xC8E4], NFC: [0xC8E4], NFD: [0x110C, 0x116D, 0x11AB], NFKC: [0xC8E4], NFKD: [0x110C, 0x116D, 0x11AB] }, +{ source: [0xC8E5], NFC: [0xC8E5], NFD: [0x110C, 0x116D, 0x11AC], NFKC: [0xC8E5], NFKD: [0x110C, 0x116D, 0x11AC] }, +{ source: [0xC8E6], NFC: [0xC8E6], NFD: [0x110C, 0x116D, 0x11AD], NFKC: [0xC8E6], NFKD: [0x110C, 0x116D, 0x11AD] }, +{ source: [0xC8E7], NFC: [0xC8E7], NFD: [0x110C, 0x116D, 0x11AE], NFKC: [0xC8E7], NFKD: [0x110C, 0x116D, 0x11AE] }, +{ source: [0xC8E8], NFC: [0xC8E8], NFD: [0x110C, 0x116D, 0x11AF], NFKC: [0xC8E8], NFKD: [0x110C, 0x116D, 0x11AF] }, +{ source: [0xC8E9], NFC: [0xC8E9], NFD: [0x110C, 0x116D, 0x11B0], NFKC: [0xC8E9], NFKD: [0x110C, 0x116D, 0x11B0] }, +{ source: [0xC8EA], NFC: [0xC8EA], NFD: [0x110C, 0x116D, 0x11B1], NFKC: [0xC8EA], NFKD: [0x110C, 0x116D, 0x11B1] }, +{ source: [0xC8EB], NFC: [0xC8EB], NFD: [0x110C, 0x116D, 0x11B2], NFKC: [0xC8EB], NFKD: [0x110C, 0x116D, 0x11B2] }, +{ source: [0xC8EC], NFC: [0xC8EC], NFD: [0x110C, 0x116D, 0x11B3], NFKC: [0xC8EC], NFKD: [0x110C, 0x116D, 0x11B3] }, +{ source: [0xC8ED], NFC: [0xC8ED], NFD: [0x110C, 0x116D, 0x11B4], NFKC: [0xC8ED], NFKD: [0x110C, 0x116D, 0x11B4] }, +{ source: [0xC8EE], NFC: [0xC8EE], NFD: [0x110C, 0x116D, 0x11B5], NFKC: [0xC8EE], NFKD: [0x110C, 0x116D, 0x11B5] }, +{ source: [0xC8EF], NFC: [0xC8EF], NFD: [0x110C, 0x116D, 0x11B6], NFKC: [0xC8EF], NFKD: [0x110C, 0x116D, 0x11B6] }, +{ source: [0xC8F0], NFC: [0xC8F0], NFD: [0x110C, 0x116D, 0x11B7], NFKC: [0xC8F0], NFKD: [0x110C, 0x116D, 0x11B7] }, +{ source: [0xC8F1], NFC: [0xC8F1], NFD: [0x110C, 0x116D, 0x11B8], NFKC: [0xC8F1], NFKD: [0x110C, 0x116D, 0x11B8] }, +{ source: [0xC8F2], NFC: [0xC8F2], NFD: [0x110C, 0x116D, 0x11B9], NFKC: [0xC8F2], NFKD: [0x110C, 0x116D, 0x11B9] }, +{ source: [0xC8F3], NFC: [0xC8F3], NFD: [0x110C, 0x116D, 0x11BA], NFKC: [0xC8F3], NFKD: [0x110C, 0x116D, 0x11BA] }, +{ source: [0xC8F4], NFC: [0xC8F4], NFD: [0x110C, 0x116D, 0x11BB], NFKC: [0xC8F4], NFKD: [0x110C, 0x116D, 0x11BB] }, +{ source: [0xC8F5], NFC: [0xC8F5], NFD: [0x110C, 0x116D, 0x11BC], NFKC: [0xC8F5], NFKD: [0x110C, 0x116D, 0x11BC] }, +{ source: [0xC8F6], NFC: [0xC8F6], NFD: [0x110C, 0x116D, 0x11BD], NFKC: [0xC8F6], NFKD: [0x110C, 0x116D, 0x11BD] }, +{ source: [0xC8F7], NFC: [0xC8F7], NFD: [0x110C, 0x116D, 0x11BE], NFKC: [0xC8F7], NFKD: [0x110C, 0x116D, 0x11BE] }, +{ source: [0xC8F8], NFC: [0xC8F8], NFD: [0x110C, 0x116D, 0x11BF], NFKC: [0xC8F8], NFKD: [0x110C, 0x116D, 0x11BF] }, +{ source: [0xC8F9], NFC: [0xC8F9], NFD: [0x110C, 0x116D, 0x11C0], NFKC: [0xC8F9], NFKD: [0x110C, 0x116D, 0x11C0] }, +{ source: [0xC8FA], NFC: [0xC8FA], NFD: [0x110C, 0x116D, 0x11C1], NFKC: [0xC8FA], NFKD: [0x110C, 0x116D, 0x11C1] }, +{ source: [0xC8FB], NFC: [0xC8FB], NFD: [0x110C, 0x116D, 0x11C2], NFKC: [0xC8FB], NFKD: [0x110C, 0x116D, 0x11C2] }, +{ source: [0xC8FC], NFC: [0xC8FC], NFD: [0x110C, 0x116E], NFKC: [0xC8FC], NFKD: [0x110C, 0x116E] }, +{ source: [0xC8FD], NFC: [0xC8FD], NFD: [0x110C, 0x116E, 0x11A8], NFKC: [0xC8FD], NFKD: [0x110C, 0x116E, 0x11A8] }, +{ source: [0xC8FE], NFC: [0xC8FE], NFD: [0x110C, 0x116E, 0x11A9], NFKC: [0xC8FE], NFKD: [0x110C, 0x116E, 0x11A9] }, +{ source: [0xC8FF], NFC: [0xC8FF], NFD: [0x110C, 0x116E, 0x11AA], NFKC: [0xC8FF], NFKD: [0x110C, 0x116E, 0x11AA] }, +{ source: [0xC900], NFC: [0xC900], NFD: [0x110C, 0x116E, 0x11AB], NFKC: [0xC900], NFKD: [0x110C, 0x116E, 0x11AB] }, +{ source: [0xC901], NFC: [0xC901], NFD: [0x110C, 0x116E, 0x11AC], NFKC: [0xC901], NFKD: [0x110C, 0x116E, 0x11AC] }, +{ source: [0xC902], NFC: [0xC902], NFD: [0x110C, 0x116E, 0x11AD], NFKC: [0xC902], NFKD: [0x110C, 0x116E, 0x11AD] }, +{ source: [0xC903], NFC: [0xC903], NFD: [0x110C, 0x116E, 0x11AE], NFKC: [0xC903], NFKD: [0x110C, 0x116E, 0x11AE] }, +{ source: [0xC904], NFC: [0xC904], NFD: [0x110C, 0x116E, 0x11AF], NFKC: [0xC904], NFKD: [0x110C, 0x116E, 0x11AF] }, +{ source: [0xC905], NFC: [0xC905], NFD: [0x110C, 0x116E, 0x11B0], NFKC: [0xC905], NFKD: [0x110C, 0x116E, 0x11B0] }, +{ source: [0xC906], NFC: [0xC906], NFD: [0x110C, 0x116E, 0x11B1], NFKC: [0xC906], NFKD: [0x110C, 0x116E, 0x11B1] }, +{ source: [0xC907], NFC: [0xC907], NFD: [0x110C, 0x116E, 0x11B2], NFKC: [0xC907], NFKD: [0x110C, 0x116E, 0x11B2] }, +{ source: [0xC908], NFC: [0xC908], NFD: [0x110C, 0x116E, 0x11B3], NFKC: [0xC908], NFKD: [0x110C, 0x116E, 0x11B3] }, +{ source: [0xC909], NFC: [0xC909], NFD: [0x110C, 0x116E, 0x11B4], NFKC: [0xC909], NFKD: [0x110C, 0x116E, 0x11B4] }, +{ source: [0xC90A], NFC: [0xC90A], NFD: [0x110C, 0x116E, 0x11B5], NFKC: [0xC90A], NFKD: [0x110C, 0x116E, 0x11B5] }, +{ source: [0xC90B], NFC: [0xC90B], NFD: [0x110C, 0x116E, 0x11B6], NFKC: [0xC90B], NFKD: [0x110C, 0x116E, 0x11B6] }, +{ source: [0xC90C], NFC: [0xC90C], NFD: [0x110C, 0x116E, 0x11B7], NFKC: [0xC90C], NFKD: [0x110C, 0x116E, 0x11B7] }, +{ source: [0xC90D], NFC: [0xC90D], NFD: [0x110C, 0x116E, 0x11B8], NFKC: [0xC90D], NFKD: [0x110C, 0x116E, 0x11B8] }, +{ source: [0xC90E], NFC: [0xC90E], NFD: [0x110C, 0x116E, 0x11B9], NFKC: [0xC90E], NFKD: [0x110C, 0x116E, 0x11B9] }, +{ source: [0xC90F], NFC: [0xC90F], NFD: [0x110C, 0x116E, 0x11BA], NFKC: [0xC90F], NFKD: [0x110C, 0x116E, 0x11BA] }, +{ source: [0xC910], NFC: [0xC910], NFD: [0x110C, 0x116E, 0x11BB], NFKC: [0xC910], NFKD: [0x110C, 0x116E, 0x11BB] }, +{ source: [0xC911], NFC: [0xC911], NFD: [0x110C, 0x116E, 0x11BC], NFKC: [0xC911], NFKD: [0x110C, 0x116E, 0x11BC] }, +{ source: [0xC912], NFC: [0xC912], NFD: [0x110C, 0x116E, 0x11BD], NFKC: [0xC912], NFKD: [0x110C, 0x116E, 0x11BD] }, +{ source: [0xC913], NFC: [0xC913], NFD: [0x110C, 0x116E, 0x11BE], NFKC: [0xC913], NFKD: [0x110C, 0x116E, 0x11BE] }, +{ source: [0xC914], NFC: [0xC914], NFD: [0x110C, 0x116E, 0x11BF], NFKC: [0xC914], NFKD: [0x110C, 0x116E, 0x11BF] }, +{ source: [0xC915], NFC: [0xC915], NFD: [0x110C, 0x116E, 0x11C0], NFKC: [0xC915], NFKD: [0x110C, 0x116E, 0x11C0] }, +{ source: [0xC916], NFC: [0xC916], NFD: [0x110C, 0x116E, 0x11C1], NFKC: [0xC916], NFKD: [0x110C, 0x116E, 0x11C1] }, +{ source: [0xC917], NFC: [0xC917], NFD: [0x110C, 0x116E, 0x11C2], NFKC: [0xC917], NFKD: [0x110C, 0x116E, 0x11C2] }, +{ source: [0xC918], NFC: [0xC918], NFD: [0x110C, 0x116F], NFKC: [0xC918], NFKD: [0x110C, 0x116F] }, +{ source: [0xC919], NFC: [0xC919], NFD: [0x110C, 0x116F, 0x11A8], NFKC: [0xC919], NFKD: [0x110C, 0x116F, 0x11A8] }, +{ source: [0xC91A], NFC: [0xC91A], NFD: [0x110C, 0x116F, 0x11A9], NFKC: [0xC91A], NFKD: [0x110C, 0x116F, 0x11A9] }, +{ source: [0xC91B], NFC: [0xC91B], NFD: [0x110C, 0x116F, 0x11AA], NFKC: [0xC91B], NFKD: [0x110C, 0x116F, 0x11AA] }, +{ source: [0xC91C], NFC: [0xC91C], NFD: [0x110C, 0x116F, 0x11AB], NFKC: [0xC91C], NFKD: [0x110C, 0x116F, 0x11AB] }, +{ source: [0xC91D], NFC: [0xC91D], NFD: [0x110C, 0x116F, 0x11AC], NFKC: [0xC91D], NFKD: [0x110C, 0x116F, 0x11AC] }, +{ source: [0xC91E], NFC: [0xC91E], NFD: [0x110C, 0x116F, 0x11AD], NFKC: [0xC91E], NFKD: [0x110C, 0x116F, 0x11AD] }, +{ source: [0xC91F], NFC: [0xC91F], NFD: [0x110C, 0x116F, 0x11AE], NFKC: [0xC91F], NFKD: [0x110C, 0x116F, 0x11AE] }, +{ source: [0xC920], NFC: [0xC920], NFD: [0x110C, 0x116F, 0x11AF], NFKC: [0xC920], NFKD: [0x110C, 0x116F, 0x11AF] }, +{ source: [0xC921], NFC: [0xC921], NFD: [0x110C, 0x116F, 0x11B0], NFKC: [0xC921], NFKD: [0x110C, 0x116F, 0x11B0] }, +{ source: [0xC922], NFC: [0xC922], NFD: [0x110C, 0x116F, 0x11B1], NFKC: [0xC922], NFKD: [0x110C, 0x116F, 0x11B1] }, +{ source: [0xC923], NFC: [0xC923], NFD: [0x110C, 0x116F, 0x11B2], NFKC: [0xC923], NFKD: [0x110C, 0x116F, 0x11B2] }, +{ source: [0xC924], NFC: [0xC924], NFD: [0x110C, 0x116F, 0x11B3], NFKC: [0xC924], NFKD: [0x110C, 0x116F, 0x11B3] }, +{ source: [0xC925], NFC: [0xC925], NFD: [0x110C, 0x116F, 0x11B4], NFKC: [0xC925], NFKD: [0x110C, 0x116F, 0x11B4] }, +{ source: [0xC926], NFC: [0xC926], NFD: [0x110C, 0x116F, 0x11B5], NFKC: [0xC926], NFKD: [0x110C, 0x116F, 0x11B5] }, +{ source: [0xC927], NFC: [0xC927], NFD: [0x110C, 0x116F, 0x11B6], NFKC: [0xC927], NFKD: [0x110C, 0x116F, 0x11B6] }, +{ source: [0xC928], NFC: [0xC928], NFD: [0x110C, 0x116F, 0x11B7], NFKC: [0xC928], NFKD: [0x110C, 0x116F, 0x11B7] }, +{ source: [0xC929], NFC: [0xC929], NFD: [0x110C, 0x116F, 0x11B8], NFKC: [0xC929], NFKD: [0x110C, 0x116F, 0x11B8] }, +{ source: [0xC92A], NFC: [0xC92A], NFD: [0x110C, 0x116F, 0x11B9], NFKC: [0xC92A], NFKD: [0x110C, 0x116F, 0x11B9] }, +{ source: [0xC92B], NFC: [0xC92B], NFD: [0x110C, 0x116F, 0x11BA], NFKC: [0xC92B], NFKD: [0x110C, 0x116F, 0x11BA] }, +{ source: [0xC92C], NFC: [0xC92C], NFD: [0x110C, 0x116F, 0x11BB], NFKC: [0xC92C], NFKD: [0x110C, 0x116F, 0x11BB] }, +{ source: [0xC92D], NFC: [0xC92D], NFD: [0x110C, 0x116F, 0x11BC], NFKC: [0xC92D], NFKD: [0x110C, 0x116F, 0x11BC] }, +{ source: [0xC92E], NFC: [0xC92E], NFD: [0x110C, 0x116F, 0x11BD], NFKC: [0xC92E], NFKD: [0x110C, 0x116F, 0x11BD] }, +{ source: [0xC92F], NFC: [0xC92F], NFD: [0x110C, 0x116F, 0x11BE], NFKC: [0xC92F], NFKD: [0x110C, 0x116F, 0x11BE] }, +{ source: [0xC930], NFC: [0xC930], NFD: [0x110C, 0x116F, 0x11BF], NFKC: [0xC930], NFKD: [0x110C, 0x116F, 0x11BF] }, +{ source: [0xC931], NFC: [0xC931], NFD: [0x110C, 0x116F, 0x11C0], NFKC: [0xC931], NFKD: [0x110C, 0x116F, 0x11C0] }, +{ source: [0xC932], NFC: [0xC932], NFD: [0x110C, 0x116F, 0x11C1], NFKC: [0xC932], NFKD: [0x110C, 0x116F, 0x11C1] }, +{ source: [0xC933], NFC: [0xC933], NFD: [0x110C, 0x116F, 0x11C2], NFKC: [0xC933], NFKD: [0x110C, 0x116F, 0x11C2] }, +{ source: [0xC934], NFC: [0xC934], NFD: [0x110C, 0x1170], NFKC: [0xC934], NFKD: [0x110C, 0x1170] }, +{ source: [0xC935], NFC: [0xC935], NFD: [0x110C, 0x1170, 0x11A8], NFKC: [0xC935], NFKD: [0x110C, 0x1170, 0x11A8] }, +{ source: [0xC936], NFC: [0xC936], NFD: [0x110C, 0x1170, 0x11A9], NFKC: [0xC936], NFKD: [0x110C, 0x1170, 0x11A9] }, +{ source: [0xC937], NFC: [0xC937], NFD: [0x110C, 0x1170, 0x11AA], NFKC: [0xC937], NFKD: [0x110C, 0x1170, 0x11AA] }, +{ source: [0xC938], NFC: [0xC938], NFD: [0x110C, 0x1170, 0x11AB], NFKC: [0xC938], NFKD: [0x110C, 0x1170, 0x11AB] }, +{ source: [0xC939], NFC: [0xC939], NFD: [0x110C, 0x1170, 0x11AC], NFKC: [0xC939], NFKD: [0x110C, 0x1170, 0x11AC] }, +{ source: [0xC93A], NFC: [0xC93A], NFD: [0x110C, 0x1170, 0x11AD], NFKC: [0xC93A], NFKD: [0x110C, 0x1170, 0x11AD] }, +{ source: [0xC93B], NFC: [0xC93B], NFD: [0x110C, 0x1170, 0x11AE], NFKC: [0xC93B], NFKD: [0x110C, 0x1170, 0x11AE] }, +{ source: [0xC93C], NFC: [0xC93C], NFD: [0x110C, 0x1170, 0x11AF], NFKC: [0xC93C], NFKD: [0x110C, 0x1170, 0x11AF] }, +{ source: [0xC93D], NFC: [0xC93D], NFD: [0x110C, 0x1170, 0x11B0], NFKC: [0xC93D], NFKD: [0x110C, 0x1170, 0x11B0] }, +{ source: [0xC93E], NFC: [0xC93E], NFD: [0x110C, 0x1170, 0x11B1], NFKC: [0xC93E], NFKD: [0x110C, 0x1170, 0x11B1] }, +{ source: [0xC93F], NFC: [0xC93F], NFD: [0x110C, 0x1170, 0x11B2], NFKC: [0xC93F], NFKD: [0x110C, 0x1170, 0x11B2] }, +{ source: [0xC940], NFC: [0xC940], NFD: [0x110C, 0x1170, 0x11B3], NFKC: [0xC940], NFKD: [0x110C, 0x1170, 0x11B3] }, +{ source: [0xC941], NFC: [0xC941], NFD: [0x110C, 0x1170, 0x11B4], NFKC: [0xC941], NFKD: [0x110C, 0x1170, 0x11B4] }, +{ source: [0xC942], NFC: [0xC942], NFD: [0x110C, 0x1170, 0x11B5], NFKC: [0xC942], NFKD: [0x110C, 0x1170, 0x11B5] }, +{ source: [0xC943], NFC: [0xC943], NFD: [0x110C, 0x1170, 0x11B6], NFKC: [0xC943], NFKD: [0x110C, 0x1170, 0x11B6] }, +{ source: [0xC944], NFC: [0xC944], NFD: [0x110C, 0x1170, 0x11B7], NFKC: [0xC944], NFKD: [0x110C, 0x1170, 0x11B7] }, +{ source: [0xC945], NFC: [0xC945], NFD: [0x110C, 0x1170, 0x11B8], NFKC: [0xC945], NFKD: [0x110C, 0x1170, 0x11B8] }, +{ source: [0xC946], NFC: [0xC946], NFD: [0x110C, 0x1170, 0x11B9], NFKC: [0xC946], NFKD: [0x110C, 0x1170, 0x11B9] }, +{ source: [0xC947], NFC: [0xC947], NFD: [0x110C, 0x1170, 0x11BA], NFKC: [0xC947], NFKD: [0x110C, 0x1170, 0x11BA] }, +{ source: [0xC948], NFC: [0xC948], NFD: [0x110C, 0x1170, 0x11BB], NFKC: [0xC948], NFKD: [0x110C, 0x1170, 0x11BB] }, +{ source: [0xC949], NFC: [0xC949], NFD: [0x110C, 0x1170, 0x11BC], NFKC: [0xC949], NFKD: [0x110C, 0x1170, 0x11BC] }, +{ source: [0xC94A], NFC: [0xC94A], NFD: [0x110C, 0x1170, 0x11BD], NFKC: [0xC94A], NFKD: [0x110C, 0x1170, 0x11BD] }, +{ source: [0xC94B], NFC: [0xC94B], NFD: [0x110C, 0x1170, 0x11BE], NFKC: [0xC94B], NFKD: [0x110C, 0x1170, 0x11BE] }, +{ source: [0xC94C], NFC: [0xC94C], NFD: [0x110C, 0x1170, 0x11BF], NFKC: [0xC94C], NFKD: [0x110C, 0x1170, 0x11BF] }, +{ source: [0xC94D], NFC: [0xC94D], NFD: [0x110C, 0x1170, 0x11C0], NFKC: [0xC94D], NFKD: [0x110C, 0x1170, 0x11C0] }, +{ source: [0xC94E], NFC: [0xC94E], NFD: [0x110C, 0x1170, 0x11C1], NFKC: [0xC94E], NFKD: [0x110C, 0x1170, 0x11C1] }, +{ source: [0xC94F], NFC: [0xC94F], NFD: [0x110C, 0x1170, 0x11C2], NFKC: [0xC94F], NFKD: [0x110C, 0x1170, 0x11C2] }, +{ source: [0xC950], NFC: [0xC950], NFD: [0x110C, 0x1171], NFKC: [0xC950], NFKD: [0x110C, 0x1171] }, +{ source: [0xC951], NFC: [0xC951], NFD: [0x110C, 0x1171, 0x11A8], NFKC: [0xC951], NFKD: [0x110C, 0x1171, 0x11A8] }, +{ source: [0xC952], NFC: [0xC952], NFD: [0x110C, 0x1171, 0x11A9], NFKC: [0xC952], NFKD: [0x110C, 0x1171, 0x11A9] }, +{ source: [0xC953], NFC: [0xC953], NFD: [0x110C, 0x1171, 0x11AA], NFKC: [0xC953], NFKD: [0x110C, 0x1171, 0x11AA] }, +{ source: [0xC954], NFC: [0xC954], NFD: [0x110C, 0x1171, 0x11AB], NFKC: [0xC954], NFKD: [0x110C, 0x1171, 0x11AB] }, +{ source: [0xC955], NFC: [0xC955], NFD: [0x110C, 0x1171, 0x11AC], NFKC: [0xC955], NFKD: [0x110C, 0x1171, 0x11AC] }, +{ source: [0xC956], NFC: [0xC956], NFD: [0x110C, 0x1171, 0x11AD], NFKC: [0xC956], NFKD: [0x110C, 0x1171, 0x11AD] }, +{ source: [0xC957], NFC: [0xC957], NFD: [0x110C, 0x1171, 0x11AE], NFKC: [0xC957], NFKD: [0x110C, 0x1171, 0x11AE] }, +{ source: [0xC958], NFC: [0xC958], NFD: [0x110C, 0x1171, 0x11AF], NFKC: [0xC958], NFKD: [0x110C, 0x1171, 0x11AF] }, +{ source: [0xC959], NFC: [0xC959], NFD: [0x110C, 0x1171, 0x11B0], NFKC: [0xC959], NFKD: [0x110C, 0x1171, 0x11B0] }, +{ source: [0xC95A], NFC: [0xC95A], NFD: [0x110C, 0x1171, 0x11B1], NFKC: [0xC95A], NFKD: [0x110C, 0x1171, 0x11B1] }, +{ source: [0xC95B], NFC: [0xC95B], NFD: [0x110C, 0x1171, 0x11B2], NFKC: [0xC95B], NFKD: [0x110C, 0x1171, 0x11B2] }, +{ source: [0xC95C], NFC: [0xC95C], NFD: [0x110C, 0x1171, 0x11B3], NFKC: [0xC95C], NFKD: [0x110C, 0x1171, 0x11B3] }, +{ source: [0xC95D], NFC: [0xC95D], NFD: [0x110C, 0x1171, 0x11B4], NFKC: [0xC95D], NFKD: [0x110C, 0x1171, 0x11B4] }, +{ source: [0xC95E], NFC: [0xC95E], NFD: [0x110C, 0x1171, 0x11B5], NFKC: [0xC95E], NFKD: [0x110C, 0x1171, 0x11B5] }, +{ source: [0xC95F], NFC: [0xC95F], NFD: [0x110C, 0x1171, 0x11B6], NFKC: [0xC95F], NFKD: [0x110C, 0x1171, 0x11B6] }, +{ source: [0xC960], NFC: [0xC960], NFD: [0x110C, 0x1171, 0x11B7], NFKC: [0xC960], NFKD: [0x110C, 0x1171, 0x11B7] }, +{ source: [0xC961], NFC: [0xC961], NFD: [0x110C, 0x1171, 0x11B8], NFKC: [0xC961], NFKD: [0x110C, 0x1171, 0x11B8] }, +{ source: [0xC962], NFC: [0xC962], NFD: [0x110C, 0x1171, 0x11B9], NFKC: [0xC962], NFKD: [0x110C, 0x1171, 0x11B9] }, +{ source: [0xC963], NFC: [0xC963], NFD: [0x110C, 0x1171, 0x11BA], NFKC: [0xC963], NFKD: [0x110C, 0x1171, 0x11BA] }, +{ source: [0xC964], NFC: [0xC964], NFD: [0x110C, 0x1171, 0x11BB], NFKC: [0xC964], NFKD: [0x110C, 0x1171, 0x11BB] }, +{ source: [0xC965], NFC: [0xC965], NFD: [0x110C, 0x1171, 0x11BC], NFKC: [0xC965], NFKD: [0x110C, 0x1171, 0x11BC] }, +{ source: [0xC966], NFC: [0xC966], NFD: [0x110C, 0x1171, 0x11BD], NFKC: [0xC966], NFKD: [0x110C, 0x1171, 0x11BD] }, +{ source: [0xC967], NFC: [0xC967], NFD: [0x110C, 0x1171, 0x11BE], NFKC: [0xC967], NFKD: [0x110C, 0x1171, 0x11BE] }, +{ source: [0xC968], NFC: [0xC968], NFD: [0x110C, 0x1171, 0x11BF], NFKC: [0xC968], NFKD: [0x110C, 0x1171, 0x11BF] }, +{ source: [0xC969], NFC: [0xC969], NFD: [0x110C, 0x1171, 0x11C0], NFKC: [0xC969], NFKD: [0x110C, 0x1171, 0x11C0] }, +{ source: [0xC96A], NFC: [0xC96A], NFD: [0x110C, 0x1171, 0x11C1], NFKC: [0xC96A], NFKD: [0x110C, 0x1171, 0x11C1] }, +{ source: [0xC96B], NFC: [0xC96B], NFD: [0x110C, 0x1171, 0x11C2], NFKC: [0xC96B], NFKD: [0x110C, 0x1171, 0x11C2] }, +{ source: [0xC96C], NFC: [0xC96C], NFD: [0x110C, 0x1172], NFKC: [0xC96C], NFKD: [0x110C, 0x1172] }, +{ source: [0xC96D], NFC: [0xC96D], NFD: [0x110C, 0x1172, 0x11A8], NFKC: [0xC96D], NFKD: [0x110C, 0x1172, 0x11A8] }, +{ source: [0xC96E], NFC: [0xC96E], NFD: [0x110C, 0x1172, 0x11A9], NFKC: [0xC96E], NFKD: [0x110C, 0x1172, 0x11A9] }, +{ source: [0xC96F], NFC: [0xC96F], NFD: [0x110C, 0x1172, 0x11AA], NFKC: [0xC96F], NFKD: [0x110C, 0x1172, 0x11AA] }, +{ source: [0xC970], NFC: [0xC970], NFD: [0x110C, 0x1172, 0x11AB], NFKC: [0xC970], NFKD: [0x110C, 0x1172, 0x11AB] }, +{ source: [0xC971], NFC: [0xC971], NFD: [0x110C, 0x1172, 0x11AC], NFKC: [0xC971], NFKD: [0x110C, 0x1172, 0x11AC] }, +{ source: [0xC972], NFC: [0xC972], NFD: [0x110C, 0x1172, 0x11AD], NFKC: [0xC972], NFKD: [0x110C, 0x1172, 0x11AD] }, +{ source: [0xC973], NFC: [0xC973], NFD: [0x110C, 0x1172, 0x11AE], NFKC: [0xC973], NFKD: [0x110C, 0x1172, 0x11AE] }, +{ source: [0xC974], NFC: [0xC974], NFD: [0x110C, 0x1172, 0x11AF], NFKC: [0xC974], NFKD: [0x110C, 0x1172, 0x11AF] }, +{ source: [0xC975], NFC: [0xC975], NFD: [0x110C, 0x1172, 0x11B0], NFKC: [0xC975], NFKD: [0x110C, 0x1172, 0x11B0] }, +{ source: [0xC976], NFC: [0xC976], NFD: [0x110C, 0x1172, 0x11B1], NFKC: [0xC976], NFKD: [0x110C, 0x1172, 0x11B1] }, +{ source: [0xC977], NFC: [0xC977], NFD: [0x110C, 0x1172, 0x11B2], NFKC: [0xC977], NFKD: [0x110C, 0x1172, 0x11B2] }, +{ source: [0xC978], NFC: [0xC978], NFD: [0x110C, 0x1172, 0x11B3], NFKC: [0xC978], NFKD: [0x110C, 0x1172, 0x11B3] }, +{ source: [0xC979], NFC: [0xC979], NFD: [0x110C, 0x1172, 0x11B4], NFKC: [0xC979], NFKD: [0x110C, 0x1172, 0x11B4] }, +{ source: [0xC97A], NFC: [0xC97A], NFD: [0x110C, 0x1172, 0x11B5], NFKC: [0xC97A], NFKD: [0x110C, 0x1172, 0x11B5] }, +{ source: [0xC97B], NFC: [0xC97B], NFD: [0x110C, 0x1172, 0x11B6], NFKC: [0xC97B], NFKD: [0x110C, 0x1172, 0x11B6] }, +{ source: [0xC97C], NFC: [0xC97C], NFD: [0x110C, 0x1172, 0x11B7], NFKC: [0xC97C], NFKD: [0x110C, 0x1172, 0x11B7] }, +{ source: [0xC97D], NFC: [0xC97D], NFD: [0x110C, 0x1172, 0x11B8], NFKC: [0xC97D], NFKD: [0x110C, 0x1172, 0x11B8] }, +{ source: [0xC97E], NFC: [0xC97E], NFD: [0x110C, 0x1172, 0x11B9], NFKC: [0xC97E], NFKD: [0x110C, 0x1172, 0x11B9] }, +{ source: [0xC97F], NFC: [0xC97F], NFD: [0x110C, 0x1172, 0x11BA], NFKC: [0xC97F], NFKD: [0x110C, 0x1172, 0x11BA] }, +{ source: [0xC980], NFC: [0xC980], NFD: [0x110C, 0x1172, 0x11BB], NFKC: [0xC980], NFKD: [0x110C, 0x1172, 0x11BB] }, +{ source: [0xC981], NFC: [0xC981], NFD: [0x110C, 0x1172, 0x11BC], NFKC: [0xC981], NFKD: [0x110C, 0x1172, 0x11BC] }, +{ source: [0xC982], NFC: [0xC982], NFD: [0x110C, 0x1172, 0x11BD], NFKC: [0xC982], NFKD: [0x110C, 0x1172, 0x11BD] }, +{ source: [0xC983], NFC: [0xC983], NFD: [0x110C, 0x1172, 0x11BE], NFKC: [0xC983], NFKD: [0x110C, 0x1172, 0x11BE] }, +{ source: [0xC984], NFC: [0xC984], NFD: [0x110C, 0x1172, 0x11BF], NFKC: [0xC984], NFKD: [0x110C, 0x1172, 0x11BF] }, +{ source: [0xC985], NFC: [0xC985], NFD: [0x110C, 0x1172, 0x11C0], NFKC: [0xC985], NFKD: [0x110C, 0x1172, 0x11C0] }, +{ source: [0xC986], NFC: [0xC986], NFD: [0x110C, 0x1172, 0x11C1], NFKC: [0xC986], NFKD: [0x110C, 0x1172, 0x11C1] }, +{ source: [0xC987], NFC: [0xC987], NFD: [0x110C, 0x1172, 0x11C2], NFKC: [0xC987], NFKD: [0x110C, 0x1172, 0x11C2] }, +{ source: [0xC988], NFC: [0xC988], NFD: [0x110C, 0x1173], NFKC: [0xC988], NFKD: [0x110C, 0x1173] }, +{ source: [0xC989], NFC: [0xC989], NFD: [0x110C, 0x1173, 0x11A8], NFKC: [0xC989], NFKD: [0x110C, 0x1173, 0x11A8] }, +{ source: [0xC98A], NFC: [0xC98A], NFD: [0x110C, 0x1173, 0x11A9], NFKC: [0xC98A], NFKD: [0x110C, 0x1173, 0x11A9] }, +{ source: [0xC98B], NFC: [0xC98B], NFD: [0x110C, 0x1173, 0x11AA], NFKC: [0xC98B], NFKD: [0x110C, 0x1173, 0x11AA] }, +{ source: [0xC98C], NFC: [0xC98C], NFD: [0x110C, 0x1173, 0x11AB], NFKC: [0xC98C], NFKD: [0x110C, 0x1173, 0x11AB] }, +{ source: [0xC98D], NFC: [0xC98D], NFD: [0x110C, 0x1173, 0x11AC], NFKC: [0xC98D], NFKD: [0x110C, 0x1173, 0x11AC] }, +{ source: [0xC98E], NFC: [0xC98E], NFD: [0x110C, 0x1173, 0x11AD], NFKC: [0xC98E], NFKD: [0x110C, 0x1173, 0x11AD] }, +{ source: [0xC98F], NFC: [0xC98F], NFD: [0x110C, 0x1173, 0x11AE], NFKC: [0xC98F], NFKD: [0x110C, 0x1173, 0x11AE] }, +{ source: [0xC990], NFC: [0xC990], NFD: [0x110C, 0x1173, 0x11AF], NFKC: [0xC990], NFKD: [0x110C, 0x1173, 0x11AF] }, +{ source: [0xC991], NFC: [0xC991], NFD: [0x110C, 0x1173, 0x11B0], NFKC: [0xC991], NFKD: [0x110C, 0x1173, 0x11B0] }, +{ source: [0xC992], NFC: [0xC992], NFD: [0x110C, 0x1173, 0x11B1], NFKC: [0xC992], NFKD: [0x110C, 0x1173, 0x11B1] }, +{ source: [0xC993], NFC: [0xC993], NFD: [0x110C, 0x1173, 0x11B2], NFKC: [0xC993], NFKD: [0x110C, 0x1173, 0x11B2] }, +{ source: [0xC994], NFC: [0xC994], NFD: [0x110C, 0x1173, 0x11B3], NFKC: [0xC994], NFKD: [0x110C, 0x1173, 0x11B3] }, +{ source: [0xC995], NFC: [0xC995], NFD: [0x110C, 0x1173, 0x11B4], NFKC: [0xC995], NFKD: [0x110C, 0x1173, 0x11B4] }, +{ source: [0xC996], NFC: [0xC996], NFD: [0x110C, 0x1173, 0x11B5], NFKC: [0xC996], NFKD: [0x110C, 0x1173, 0x11B5] }, +{ source: [0xC997], NFC: [0xC997], NFD: [0x110C, 0x1173, 0x11B6], NFKC: [0xC997], NFKD: [0x110C, 0x1173, 0x11B6] }, +{ source: [0xC998], NFC: [0xC998], NFD: [0x110C, 0x1173, 0x11B7], NFKC: [0xC998], NFKD: [0x110C, 0x1173, 0x11B7] }, +{ source: [0xC999], NFC: [0xC999], NFD: [0x110C, 0x1173, 0x11B8], NFKC: [0xC999], NFKD: [0x110C, 0x1173, 0x11B8] }, +{ source: [0xC99A], NFC: [0xC99A], NFD: [0x110C, 0x1173, 0x11B9], NFKC: [0xC99A], NFKD: [0x110C, 0x1173, 0x11B9] }, +{ source: [0xC99B], NFC: [0xC99B], NFD: [0x110C, 0x1173, 0x11BA], NFKC: [0xC99B], NFKD: [0x110C, 0x1173, 0x11BA] }, +{ source: [0xC99C], NFC: [0xC99C], NFD: [0x110C, 0x1173, 0x11BB], NFKC: [0xC99C], NFKD: [0x110C, 0x1173, 0x11BB] }, +{ source: [0xC99D], NFC: [0xC99D], NFD: [0x110C, 0x1173, 0x11BC], NFKC: [0xC99D], NFKD: [0x110C, 0x1173, 0x11BC] }, +{ source: [0xC99E], NFC: [0xC99E], NFD: [0x110C, 0x1173, 0x11BD], NFKC: [0xC99E], NFKD: [0x110C, 0x1173, 0x11BD] }, +{ source: [0xC99F], NFC: [0xC99F], NFD: [0x110C, 0x1173, 0x11BE], NFKC: [0xC99F], NFKD: [0x110C, 0x1173, 0x11BE] }, +{ source: [0xC9A0], NFC: [0xC9A0], NFD: [0x110C, 0x1173, 0x11BF], NFKC: [0xC9A0], NFKD: [0x110C, 0x1173, 0x11BF] }, +{ source: [0xC9A1], NFC: [0xC9A1], NFD: [0x110C, 0x1173, 0x11C0], NFKC: [0xC9A1], NFKD: [0x110C, 0x1173, 0x11C0] }, +{ source: [0xC9A2], NFC: [0xC9A2], NFD: [0x110C, 0x1173, 0x11C1], NFKC: [0xC9A2], NFKD: [0x110C, 0x1173, 0x11C1] }, +{ source: [0xC9A3], NFC: [0xC9A3], NFD: [0x110C, 0x1173, 0x11C2], NFKC: [0xC9A3], NFKD: [0x110C, 0x1173, 0x11C2] }, +{ source: [0xC9A4], NFC: [0xC9A4], NFD: [0x110C, 0x1174], NFKC: [0xC9A4], NFKD: [0x110C, 0x1174] }, +{ source: [0xC9A5], NFC: [0xC9A5], NFD: [0x110C, 0x1174, 0x11A8], NFKC: [0xC9A5], NFKD: [0x110C, 0x1174, 0x11A8] }, +{ source: [0xC9A6], NFC: [0xC9A6], NFD: [0x110C, 0x1174, 0x11A9], NFKC: [0xC9A6], NFKD: [0x110C, 0x1174, 0x11A9] }, +{ source: [0xC9A7], NFC: [0xC9A7], NFD: [0x110C, 0x1174, 0x11AA], NFKC: [0xC9A7], NFKD: [0x110C, 0x1174, 0x11AA] }, +{ source: [0xC9A8], NFC: [0xC9A8], NFD: [0x110C, 0x1174, 0x11AB], NFKC: [0xC9A8], NFKD: [0x110C, 0x1174, 0x11AB] }, +{ source: [0xC9A9], NFC: [0xC9A9], NFD: [0x110C, 0x1174, 0x11AC], NFKC: [0xC9A9], NFKD: [0x110C, 0x1174, 0x11AC] }, +{ source: [0xC9AA], NFC: [0xC9AA], NFD: [0x110C, 0x1174, 0x11AD], NFKC: [0xC9AA], NFKD: [0x110C, 0x1174, 0x11AD] }, +{ source: [0xC9AB], NFC: [0xC9AB], NFD: [0x110C, 0x1174, 0x11AE], NFKC: [0xC9AB], NFKD: [0x110C, 0x1174, 0x11AE] }, +{ source: [0xC9AC], NFC: [0xC9AC], NFD: [0x110C, 0x1174, 0x11AF], NFKC: [0xC9AC], NFKD: [0x110C, 0x1174, 0x11AF] }, +{ source: [0xC9AD], NFC: [0xC9AD], NFD: [0x110C, 0x1174, 0x11B0], NFKC: [0xC9AD], NFKD: [0x110C, 0x1174, 0x11B0] }, +{ source: [0xC9AE], NFC: [0xC9AE], NFD: [0x110C, 0x1174, 0x11B1], NFKC: [0xC9AE], NFKD: [0x110C, 0x1174, 0x11B1] }, +{ source: [0xC9AF], NFC: [0xC9AF], NFD: [0x110C, 0x1174, 0x11B2], NFKC: [0xC9AF], NFKD: [0x110C, 0x1174, 0x11B2] }, +{ source: [0xC9B0], NFC: [0xC9B0], NFD: [0x110C, 0x1174, 0x11B3], NFKC: [0xC9B0], NFKD: [0x110C, 0x1174, 0x11B3] }, +{ source: [0xC9B1], NFC: [0xC9B1], NFD: [0x110C, 0x1174, 0x11B4], NFKC: [0xC9B1], NFKD: [0x110C, 0x1174, 0x11B4] }, +{ source: [0xC9B2], NFC: [0xC9B2], NFD: [0x110C, 0x1174, 0x11B5], NFKC: [0xC9B2], NFKD: [0x110C, 0x1174, 0x11B5] }, +{ source: [0xC9B3], NFC: [0xC9B3], NFD: [0x110C, 0x1174, 0x11B6], NFKC: [0xC9B3], NFKD: [0x110C, 0x1174, 0x11B6] }, +{ source: [0xC9B4], NFC: [0xC9B4], NFD: [0x110C, 0x1174, 0x11B7], NFKC: [0xC9B4], NFKD: [0x110C, 0x1174, 0x11B7] }, +{ source: [0xC9B5], NFC: [0xC9B5], NFD: [0x110C, 0x1174, 0x11B8], NFKC: [0xC9B5], NFKD: [0x110C, 0x1174, 0x11B8] }, +{ source: [0xC9B6], NFC: [0xC9B6], NFD: [0x110C, 0x1174, 0x11B9], NFKC: [0xC9B6], NFKD: [0x110C, 0x1174, 0x11B9] }, +{ source: [0xC9B7], NFC: [0xC9B7], NFD: [0x110C, 0x1174, 0x11BA], NFKC: [0xC9B7], NFKD: [0x110C, 0x1174, 0x11BA] }, +{ source: [0xC9B8], NFC: [0xC9B8], NFD: [0x110C, 0x1174, 0x11BB], NFKC: [0xC9B8], NFKD: [0x110C, 0x1174, 0x11BB] }, +{ source: [0xC9B9], NFC: [0xC9B9], NFD: [0x110C, 0x1174, 0x11BC], NFKC: [0xC9B9], NFKD: [0x110C, 0x1174, 0x11BC] }, +{ source: [0xC9BA], NFC: [0xC9BA], NFD: [0x110C, 0x1174, 0x11BD], NFKC: [0xC9BA], NFKD: [0x110C, 0x1174, 0x11BD] }, +{ source: [0xC9BB], NFC: [0xC9BB], NFD: [0x110C, 0x1174, 0x11BE], NFKC: [0xC9BB], NFKD: [0x110C, 0x1174, 0x11BE] }, +{ source: [0xC9BC], NFC: [0xC9BC], NFD: [0x110C, 0x1174, 0x11BF], NFKC: [0xC9BC], NFKD: [0x110C, 0x1174, 0x11BF] }, +{ source: [0xC9BD], NFC: [0xC9BD], NFD: [0x110C, 0x1174, 0x11C0], NFKC: [0xC9BD], NFKD: [0x110C, 0x1174, 0x11C0] }, +{ source: [0xC9BE], NFC: [0xC9BE], NFD: [0x110C, 0x1174, 0x11C1], NFKC: [0xC9BE], NFKD: [0x110C, 0x1174, 0x11C1] }, +{ source: [0xC9BF], NFC: [0xC9BF], NFD: [0x110C, 0x1174, 0x11C2], NFKC: [0xC9BF], NFKD: [0x110C, 0x1174, 0x11C2] }, +{ source: [0xC9C0], NFC: [0xC9C0], NFD: [0x110C, 0x1175], NFKC: [0xC9C0], NFKD: [0x110C, 0x1175] }, +{ source: [0xC9C1], NFC: [0xC9C1], NFD: [0x110C, 0x1175, 0x11A8], NFKC: [0xC9C1], NFKD: [0x110C, 0x1175, 0x11A8] }, +{ source: [0xC9C2], NFC: [0xC9C2], NFD: [0x110C, 0x1175, 0x11A9], NFKC: [0xC9C2], NFKD: [0x110C, 0x1175, 0x11A9] }, +{ source: [0xC9C3], NFC: [0xC9C3], NFD: [0x110C, 0x1175, 0x11AA], NFKC: [0xC9C3], NFKD: [0x110C, 0x1175, 0x11AA] }, +{ source: [0xC9C4], NFC: [0xC9C4], NFD: [0x110C, 0x1175, 0x11AB], NFKC: [0xC9C4], NFKD: [0x110C, 0x1175, 0x11AB] }, +{ source: [0xC9C5], NFC: [0xC9C5], NFD: [0x110C, 0x1175, 0x11AC], NFKC: [0xC9C5], NFKD: [0x110C, 0x1175, 0x11AC] }, +{ source: [0xC9C6], NFC: [0xC9C6], NFD: [0x110C, 0x1175, 0x11AD], NFKC: [0xC9C6], NFKD: [0x110C, 0x1175, 0x11AD] }, +{ source: [0xC9C7], NFC: [0xC9C7], NFD: [0x110C, 0x1175, 0x11AE], NFKC: [0xC9C7], NFKD: [0x110C, 0x1175, 0x11AE] }, +{ source: [0xC9C8], NFC: [0xC9C8], NFD: [0x110C, 0x1175, 0x11AF], NFKC: [0xC9C8], NFKD: [0x110C, 0x1175, 0x11AF] }, +{ source: [0xC9C9], NFC: [0xC9C9], NFD: [0x110C, 0x1175, 0x11B0], NFKC: [0xC9C9], NFKD: [0x110C, 0x1175, 0x11B0] }, +{ source: [0xC9CA], NFC: [0xC9CA], NFD: [0x110C, 0x1175, 0x11B1], NFKC: [0xC9CA], NFKD: [0x110C, 0x1175, 0x11B1] }, +{ source: [0xC9CB], NFC: [0xC9CB], NFD: [0x110C, 0x1175, 0x11B2], NFKC: [0xC9CB], NFKD: [0x110C, 0x1175, 0x11B2] }, +{ source: [0xC9CC], NFC: [0xC9CC], NFD: [0x110C, 0x1175, 0x11B3], NFKC: [0xC9CC], NFKD: [0x110C, 0x1175, 0x11B3] }, +{ source: [0xC9CD], NFC: [0xC9CD], NFD: [0x110C, 0x1175, 0x11B4], NFKC: [0xC9CD], NFKD: [0x110C, 0x1175, 0x11B4] }, +{ source: [0xC9CE], NFC: [0xC9CE], NFD: [0x110C, 0x1175, 0x11B5], NFKC: [0xC9CE], NFKD: [0x110C, 0x1175, 0x11B5] }, +{ source: [0xC9CF], NFC: [0xC9CF], NFD: [0x110C, 0x1175, 0x11B6], NFKC: [0xC9CF], NFKD: [0x110C, 0x1175, 0x11B6] }, +{ source: [0xC9D0], NFC: [0xC9D0], NFD: [0x110C, 0x1175, 0x11B7], NFKC: [0xC9D0], NFKD: [0x110C, 0x1175, 0x11B7] }, +{ source: [0xC9D1], NFC: [0xC9D1], NFD: [0x110C, 0x1175, 0x11B8], NFKC: [0xC9D1], NFKD: [0x110C, 0x1175, 0x11B8] }, +{ source: [0xC9D2], NFC: [0xC9D2], NFD: [0x110C, 0x1175, 0x11B9], NFKC: [0xC9D2], NFKD: [0x110C, 0x1175, 0x11B9] }, +{ source: [0xC9D3], NFC: [0xC9D3], NFD: [0x110C, 0x1175, 0x11BA], NFKC: [0xC9D3], NFKD: [0x110C, 0x1175, 0x11BA] }, +{ source: [0xC9D4], NFC: [0xC9D4], NFD: [0x110C, 0x1175, 0x11BB], NFKC: [0xC9D4], NFKD: [0x110C, 0x1175, 0x11BB] }, +{ source: [0xC9D5], NFC: [0xC9D5], NFD: [0x110C, 0x1175, 0x11BC], NFKC: [0xC9D5], NFKD: [0x110C, 0x1175, 0x11BC] }, +{ source: [0xC9D6], NFC: [0xC9D6], NFD: [0x110C, 0x1175, 0x11BD], NFKC: [0xC9D6], NFKD: [0x110C, 0x1175, 0x11BD] }, +{ source: [0xC9D7], NFC: [0xC9D7], NFD: [0x110C, 0x1175, 0x11BE], NFKC: [0xC9D7], NFKD: [0x110C, 0x1175, 0x11BE] }, +{ source: [0xC9D8], NFC: [0xC9D8], NFD: [0x110C, 0x1175, 0x11BF], NFKC: [0xC9D8], NFKD: [0x110C, 0x1175, 0x11BF] }, +{ source: [0xC9D9], NFC: [0xC9D9], NFD: [0x110C, 0x1175, 0x11C0], NFKC: [0xC9D9], NFKD: [0x110C, 0x1175, 0x11C0] }, +{ source: [0xC9DA], NFC: [0xC9DA], NFD: [0x110C, 0x1175, 0x11C1], NFKC: [0xC9DA], NFKD: [0x110C, 0x1175, 0x11C1] }, +{ source: [0xC9DB], NFC: [0xC9DB], NFD: [0x110C, 0x1175, 0x11C2], NFKC: [0xC9DB], NFKD: [0x110C, 0x1175, 0x11C2] }, +{ source: [0xC9DC], NFC: [0xC9DC], NFD: [0x110D, 0x1161], NFKC: [0xC9DC], NFKD: [0x110D, 0x1161] }, +{ source: [0xC9DD], NFC: [0xC9DD], NFD: [0x110D, 0x1161, 0x11A8], NFKC: [0xC9DD], NFKD: [0x110D, 0x1161, 0x11A8] }, +{ source: [0xC9DE], NFC: [0xC9DE], NFD: [0x110D, 0x1161, 0x11A9], NFKC: [0xC9DE], NFKD: [0x110D, 0x1161, 0x11A9] }, +{ source: [0xC9DF], NFC: [0xC9DF], NFD: [0x110D, 0x1161, 0x11AA], NFKC: [0xC9DF], NFKD: [0x110D, 0x1161, 0x11AA] }, +{ source: [0xC9E0], NFC: [0xC9E0], NFD: [0x110D, 0x1161, 0x11AB], NFKC: [0xC9E0], NFKD: [0x110D, 0x1161, 0x11AB] }, +{ source: [0xC9E1], NFC: [0xC9E1], NFD: [0x110D, 0x1161, 0x11AC], NFKC: [0xC9E1], NFKD: [0x110D, 0x1161, 0x11AC] }, +{ source: [0xC9E2], NFC: [0xC9E2], NFD: [0x110D, 0x1161, 0x11AD], NFKC: [0xC9E2], NFKD: [0x110D, 0x1161, 0x11AD] }, +{ source: [0xC9E3], NFC: [0xC9E3], NFD: [0x110D, 0x1161, 0x11AE], NFKC: [0xC9E3], NFKD: [0x110D, 0x1161, 0x11AE] }, +{ source: [0xC9E4], NFC: [0xC9E4], NFD: [0x110D, 0x1161, 0x11AF], NFKC: [0xC9E4], NFKD: [0x110D, 0x1161, 0x11AF] }, +{ source: [0xC9E5], NFC: [0xC9E5], NFD: [0x110D, 0x1161, 0x11B0], NFKC: [0xC9E5], NFKD: [0x110D, 0x1161, 0x11B0] }, +{ source: [0xC9E6], NFC: [0xC9E6], NFD: [0x110D, 0x1161, 0x11B1], NFKC: [0xC9E6], NFKD: [0x110D, 0x1161, 0x11B1] }, +{ source: [0xC9E7], NFC: [0xC9E7], NFD: [0x110D, 0x1161, 0x11B2], NFKC: [0xC9E7], NFKD: [0x110D, 0x1161, 0x11B2] }, +{ source: [0xC9E8], NFC: [0xC9E8], NFD: [0x110D, 0x1161, 0x11B3], NFKC: [0xC9E8], NFKD: [0x110D, 0x1161, 0x11B3] }, +{ source: [0xC9E9], NFC: [0xC9E9], NFD: [0x110D, 0x1161, 0x11B4], NFKC: [0xC9E9], NFKD: [0x110D, 0x1161, 0x11B4] }, +{ source: [0xC9EA], NFC: [0xC9EA], NFD: [0x110D, 0x1161, 0x11B5], NFKC: [0xC9EA], NFKD: [0x110D, 0x1161, 0x11B5] }, +{ source: [0xC9EB], NFC: [0xC9EB], NFD: [0x110D, 0x1161, 0x11B6], NFKC: [0xC9EB], NFKD: [0x110D, 0x1161, 0x11B6] }, +{ source: [0xC9EC], NFC: [0xC9EC], NFD: [0x110D, 0x1161, 0x11B7], NFKC: [0xC9EC], NFKD: [0x110D, 0x1161, 0x11B7] }, +{ source: [0xC9ED], NFC: [0xC9ED], NFD: [0x110D, 0x1161, 0x11B8], NFKC: [0xC9ED], NFKD: [0x110D, 0x1161, 0x11B8] }, +{ source: [0xC9EE], NFC: [0xC9EE], NFD: [0x110D, 0x1161, 0x11B9], NFKC: [0xC9EE], NFKD: [0x110D, 0x1161, 0x11B9] }, +{ source: [0xC9EF], NFC: [0xC9EF], NFD: [0x110D, 0x1161, 0x11BA], NFKC: [0xC9EF], NFKD: [0x110D, 0x1161, 0x11BA] }, +{ source: [0xC9F0], NFC: [0xC9F0], NFD: [0x110D, 0x1161, 0x11BB], NFKC: [0xC9F0], NFKD: [0x110D, 0x1161, 0x11BB] }, +{ source: [0xC9F1], NFC: [0xC9F1], NFD: [0x110D, 0x1161, 0x11BC], NFKC: [0xC9F1], NFKD: [0x110D, 0x1161, 0x11BC] }, +{ source: [0xC9F2], NFC: [0xC9F2], NFD: [0x110D, 0x1161, 0x11BD], NFKC: [0xC9F2], NFKD: [0x110D, 0x1161, 0x11BD] }, +{ source: [0xC9F3], NFC: [0xC9F3], NFD: [0x110D, 0x1161, 0x11BE], NFKC: [0xC9F3], NFKD: [0x110D, 0x1161, 0x11BE] }, +{ source: [0xC9F4], NFC: [0xC9F4], NFD: [0x110D, 0x1161, 0x11BF], NFKC: [0xC9F4], NFKD: [0x110D, 0x1161, 0x11BF] }, +{ source: [0xC9F5], NFC: [0xC9F5], NFD: [0x110D, 0x1161, 0x11C0], NFKC: [0xC9F5], NFKD: [0x110D, 0x1161, 0x11C0] }, +{ source: [0xC9F6], NFC: [0xC9F6], NFD: [0x110D, 0x1161, 0x11C1], NFKC: [0xC9F6], NFKD: [0x110D, 0x1161, 0x11C1] }, +{ source: [0xC9F7], NFC: [0xC9F7], NFD: [0x110D, 0x1161, 0x11C2], NFKC: [0xC9F7], NFKD: [0x110D, 0x1161, 0x11C2] }, +{ source: [0xC9F8], NFC: [0xC9F8], NFD: [0x110D, 0x1162], NFKC: [0xC9F8], NFKD: [0x110D, 0x1162] }, +{ source: [0xC9F9], NFC: [0xC9F9], NFD: [0x110D, 0x1162, 0x11A8], NFKC: [0xC9F9], NFKD: [0x110D, 0x1162, 0x11A8] }, +{ source: [0xC9FA], NFC: [0xC9FA], NFD: [0x110D, 0x1162, 0x11A9], NFKC: [0xC9FA], NFKD: [0x110D, 0x1162, 0x11A9] }, +{ source: [0xC9FB], NFC: [0xC9FB], NFD: [0x110D, 0x1162, 0x11AA], NFKC: [0xC9FB], NFKD: [0x110D, 0x1162, 0x11AA] }, +{ source: [0xC9FC], NFC: [0xC9FC], NFD: [0x110D, 0x1162, 0x11AB], NFKC: [0xC9FC], NFKD: [0x110D, 0x1162, 0x11AB] }, +{ source: [0xC9FD], NFC: [0xC9FD], NFD: [0x110D, 0x1162, 0x11AC], NFKC: [0xC9FD], NFKD: [0x110D, 0x1162, 0x11AC] }, +{ source: [0xC9FE], NFC: [0xC9FE], NFD: [0x110D, 0x1162, 0x11AD], NFKC: [0xC9FE], NFKD: [0x110D, 0x1162, 0x11AD] }, +{ source: [0xC9FF], NFC: [0xC9FF], NFD: [0x110D, 0x1162, 0x11AE], NFKC: [0xC9FF], NFKD: [0x110D, 0x1162, 0x11AE] }, +{ source: [0xCA00], NFC: [0xCA00], NFD: [0x110D, 0x1162, 0x11AF], NFKC: [0xCA00], NFKD: [0x110D, 0x1162, 0x11AF] }, +{ source: [0xCA01], NFC: [0xCA01], NFD: [0x110D, 0x1162, 0x11B0], NFKC: [0xCA01], NFKD: [0x110D, 0x1162, 0x11B0] }, +{ source: [0xCA02], NFC: [0xCA02], NFD: [0x110D, 0x1162, 0x11B1], NFKC: [0xCA02], NFKD: [0x110D, 0x1162, 0x11B1] }, +{ source: [0xCA03], NFC: [0xCA03], NFD: [0x110D, 0x1162, 0x11B2], NFKC: [0xCA03], NFKD: [0x110D, 0x1162, 0x11B2] }, +{ source: [0xCA04], NFC: [0xCA04], NFD: [0x110D, 0x1162, 0x11B3], NFKC: [0xCA04], NFKD: [0x110D, 0x1162, 0x11B3] }, +{ source: [0xCA05], NFC: [0xCA05], NFD: [0x110D, 0x1162, 0x11B4], NFKC: [0xCA05], NFKD: [0x110D, 0x1162, 0x11B4] }, +{ source: [0xCA06], NFC: [0xCA06], NFD: [0x110D, 0x1162, 0x11B5], NFKC: [0xCA06], NFKD: [0x110D, 0x1162, 0x11B5] }, +{ source: [0xCA07], NFC: [0xCA07], NFD: [0x110D, 0x1162, 0x11B6], NFKC: [0xCA07], NFKD: [0x110D, 0x1162, 0x11B6] }, +{ source: [0xCA08], NFC: [0xCA08], NFD: [0x110D, 0x1162, 0x11B7], NFKC: [0xCA08], NFKD: [0x110D, 0x1162, 0x11B7] }, +{ source: [0xCA09], NFC: [0xCA09], NFD: [0x110D, 0x1162, 0x11B8], NFKC: [0xCA09], NFKD: [0x110D, 0x1162, 0x11B8] }, +{ source: [0xCA0A], NFC: [0xCA0A], NFD: [0x110D, 0x1162, 0x11B9], NFKC: [0xCA0A], NFKD: [0x110D, 0x1162, 0x11B9] }, +{ source: [0xCA0B], NFC: [0xCA0B], NFD: [0x110D, 0x1162, 0x11BA], NFKC: [0xCA0B], NFKD: [0x110D, 0x1162, 0x11BA] }, +{ source: [0xCA0C], NFC: [0xCA0C], NFD: [0x110D, 0x1162, 0x11BB], NFKC: [0xCA0C], NFKD: [0x110D, 0x1162, 0x11BB] }, +{ source: [0xCA0D], NFC: [0xCA0D], NFD: [0x110D, 0x1162, 0x11BC], NFKC: [0xCA0D], NFKD: [0x110D, 0x1162, 0x11BC] }, +{ source: [0xCA0E], NFC: [0xCA0E], NFD: [0x110D, 0x1162, 0x11BD], NFKC: [0xCA0E], NFKD: [0x110D, 0x1162, 0x11BD] }, +{ source: [0xCA0F], NFC: [0xCA0F], NFD: [0x110D, 0x1162, 0x11BE], NFKC: [0xCA0F], NFKD: [0x110D, 0x1162, 0x11BE] }, +{ source: [0xCA10], NFC: [0xCA10], NFD: [0x110D, 0x1162, 0x11BF], NFKC: [0xCA10], NFKD: [0x110D, 0x1162, 0x11BF] }, +{ source: [0xCA11], NFC: [0xCA11], NFD: [0x110D, 0x1162, 0x11C0], NFKC: [0xCA11], NFKD: [0x110D, 0x1162, 0x11C0] }, +{ source: [0xCA12], NFC: [0xCA12], NFD: [0x110D, 0x1162, 0x11C1], NFKC: [0xCA12], NFKD: [0x110D, 0x1162, 0x11C1] }, +{ source: [0xCA13], NFC: [0xCA13], NFD: [0x110D, 0x1162, 0x11C2], NFKC: [0xCA13], NFKD: [0x110D, 0x1162, 0x11C2] }, +{ source: [0xCA14], NFC: [0xCA14], NFD: [0x110D, 0x1163], NFKC: [0xCA14], NFKD: [0x110D, 0x1163] }, +{ source: [0xCA15], NFC: [0xCA15], NFD: [0x110D, 0x1163, 0x11A8], NFKC: [0xCA15], NFKD: [0x110D, 0x1163, 0x11A8] }, +{ source: [0xCA16], NFC: [0xCA16], NFD: [0x110D, 0x1163, 0x11A9], NFKC: [0xCA16], NFKD: [0x110D, 0x1163, 0x11A9] }, +{ source: [0xCA17], NFC: [0xCA17], NFD: [0x110D, 0x1163, 0x11AA], NFKC: [0xCA17], NFKD: [0x110D, 0x1163, 0x11AA] }, +{ source: [0xCA18], NFC: [0xCA18], NFD: [0x110D, 0x1163, 0x11AB], NFKC: [0xCA18], NFKD: [0x110D, 0x1163, 0x11AB] }, +{ source: [0xCA19], NFC: [0xCA19], NFD: [0x110D, 0x1163, 0x11AC], NFKC: [0xCA19], NFKD: [0x110D, 0x1163, 0x11AC] }, +{ source: [0xCA1A], NFC: [0xCA1A], NFD: [0x110D, 0x1163, 0x11AD], NFKC: [0xCA1A], NFKD: [0x110D, 0x1163, 0x11AD] }, +{ source: [0xCA1B], NFC: [0xCA1B], NFD: [0x110D, 0x1163, 0x11AE], NFKC: [0xCA1B], NFKD: [0x110D, 0x1163, 0x11AE] }, +{ source: [0xCA1C], NFC: [0xCA1C], NFD: [0x110D, 0x1163, 0x11AF], NFKC: [0xCA1C], NFKD: [0x110D, 0x1163, 0x11AF] }, +{ source: [0xCA1D], NFC: [0xCA1D], NFD: [0x110D, 0x1163, 0x11B0], NFKC: [0xCA1D], NFKD: [0x110D, 0x1163, 0x11B0] }, +{ source: [0xCA1E], NFC: [0xCA1E], NFD: [0x110D, 0x1163, 0x11B1], NFKC: [0xCA1E], NFKD: [0x110D, 0x1163, 0x11B1] }, +{ source: [0xCA1F], NFC: [0xCA1F], NFD: [0x110D, 0x1163, 0x11B2], NFKC: [0xCA1F], NFKD: [0x110D, 0x1163, 0x11B2] }, +{ source: [0xCA20], NFC: [0xCA20], NFD: [0x110D, 0x1163, 0x11B3], NFKC: [0xCA20], NFKD: [0x110D, 0x1163, 0x11B3] }, +{ source: [0xCA21], NFC: [0xCA21], NFD: [0x110D, 0x1163, 0x11B4], NFKC: [0xCA21], NFKD: [0x110D, 0x1163, 0x11B4] }, +{ source: [0xCA22], NFC: [0xCA22], NFD: [0x110D, 0x1163, 0x11B5], NFKC: [0xCA22], NFKD: [0x110D, 0x1163, 0x11B5] }, +{ source: [0xCA23], NFC: [0xCA23], NFD: [0x110D, 0x1163, 0x11B6], NFKC: [0xCA23], NFKD: [0x110D, 0x1163, 0x11B6] }, +{ source: [0xCA24], NFC: [0xCA24], NFD: [0x110D, 0x1163, 0x11B7], NFKC: [0xCA24], NFKD: [0x110D, 0x1163, 0x11B7] }, +{ source: [0xCA25], NFC: [0xCA25], NFD: [0x110D, 0x1163, 0x11B8], NFKC: [0xCA25], NFKD: [0x110D, 0x1163, 0x11B8] }, +{ source: [0xCA26], NFC: [0xCA26], NFD: [0x110D, 0x1163, 0x11B9], NFKC: [0xCA26], NFKD: [0x110D, 0x1163, 0x11B9] }, +{ source: [0xCA27], NFC: [0xCA27], NFD: [0x110D, 0x1163, 0x11BA], NFKC: [0xCA27], NFKD: [0x110D, 0x1163, 0x11BA] }, +{ source: [0xCA28], NFC: [0xCA28], NFD: [0x110D, 0x1163, 0x11BB], NFKC: [0xCA28], NFKD: [0x110D, 0x1163, 0x11BB] }, +{ source: [0xCA29], NFC: [0xCA29], NFD: [0x110D, 0x1163, 0x11BC], NFKC: [0xCA29], NFKD: [0x110D, 0x1163, 0x11BC] }, +{ source: [0xCA2A], NFC: [0xCA2A], NFD: [0x110D, 0x1163, 0x11BD], NFKC: [0xCA2A], NFKD: [0x110D, 0x1163, 0x11BD] }, +{ source: [0xCA2B], NFC: [0xCA2B], NFD: [0x110D, 0x1163, 0x11BE], NFKC: [0xCA2B], NFKD: [0x110D, 0x1163, 0x11BE] }, +{ source: [0xCA2C], NFC: [0xCA2C], NFD: [0x110D, 0x1163, 0x11BF], NFKC: [0xCA2C], NFKD: [0x110D, 0x1163, 0x11BF] }, +{ source: [0xCA2D], NFC: [0xCA2D], NFD: [0x110D, 0x1163, 0x11C0], NFKC: [0xCA2D], NFKD: [0x110D, 0x1163, 0x11C0] }, +{ source: [0xCA2E], NFC: [0xCA2E], NFD: [0x110D, 0x1163, 0x11C1], NFKC: [0xCA2E], NFKD: [0x110D, 0x1163, 0x11C1] }, +{ source: [0xCA2F], NFC: [0xCA2F], NFD: [0x110D, 0x1163, 0x11C2], NFKC: [0xCA2F], NFKD: [0x110D, 0x1163, 0x11C2] }, +{ source: [0xCA30], NFC: [0xCA30], NFD: [0x110D, 0x1164], NFKC: [0xCA30], NFKD: [0x110D, 0x1164] }, +{ source: [0xCA31], NFC: [0xCA31], NFD: [0x110D, 0x1164, 0x11A8], NFKC: [0xCA31], NFKD: [0x110D, 0x1164, 0x11A8] }, +{ source: [0xCA32], NFC: [0xCA32], NFD: [0x110D, 0x1164, 0x11A9], NFKC: [0xCA32], NFKD: [0x110D, 0x1164, 0x11A9] }, +{ source: [0xCA33], NFC: [0xCA33], NFD: [0x110D, 0x1164, 0x11AA], NFKC: [0xCA33], NFKD: [0x110D, 0x1164, 0x11AA] }, +{ source: [0xCA34], NFC: [0xCA34], NFD: [0x110D, 0x1164, 0x11AB], NFKC: [0xCA34], NFKD: [0x110D, 0x1164, 0x11AB] }, +{ source: [0xCA35], NFC: [0xCA35], NFD: [0x110D, 0x1164, 0x11AC], NFKC: [0xCA35], NFKD: [0x110D, 0x1164, 0x11AC] }, +{ source: [0xCA36], NFC: [0xCA36], NFD: [0x110D, 0x1164, 0x11AD], NFKC: [0xCA36], NFKD: [0x110D, 0x1164, 0x11AD] }, +{ source: [0xCA37], NFC: [0xCA37], NFD: [0x110D, 0x1164, 0x11AE], NFKC: [0xCA37], NFKD: [0x110D, 0x1164, 0x11AE] }, +{ source: [0xCA38], NFC: [0xCA38], NFD: [0x110D, 0x1164, 0x11AF], NFKC: [0xCA38], NFKD: [0x110D, 0x1164, 0x11AF] }, +{ source: [0xCA39], NFC: [0xCA39], NFD: [0x110D, 0x1164, 0x11B0], NFKC: [0xCA39], NFKD: [0x110D, 0x1164, 0x11B0] }, +{ source: [0xCA3A], NFC: [0xCA3A], NFD: [0x110D, 0x1164, 0x11B1], NFKC: [0xCA3A], NFKD: [0x110D, 0x1164, 0x11B1] }, +{ source: [0xCA3B], NFC: [0xCA3B], NFD: [0x110D, 0x1164, 0x11B2], NFKC: [0xCA3B], NFKD: [0x110D, 0x1164, 0x11B2] }, +{ source: [0xCA3C], NFC: [0xCA3C], NFD: [0x110D, 0x1164, 0x11B3], NFKC: [0xCA3C], NFKD: [0x110D, 0x1164, 0x11B3] }, +{ source: [0xCA3D], NFC: [0xCA3D], NFD: [0x110D, 0x1164, 0x11B4], NFKC: [0xCA3D], NFKD: [0x110D, 0x1164, 0x11B4] }, +{ source: [0xCA3E], NFC: [0xCA3E], NFD: [0x110D, 0x1164, 0x11B5], NFKC: [0xCA3E], NFKD: [0x110D, 0x1164, 0x11B5] }, +{ source: [0xCA3F], NFC: [0xCA3F], NFD: [0x110D, 0x1164, 0x11B6], NFKC: [0xCA3F], NFKD: [0x110D, 0x1164, 0x11B6] }, +{ source: [0xCA40], NFC: [0xCA40], NFD: [0x110D, 0x1164, 0x11B7], NFKC: [0xCA40], NFKD: [0x110D, 0x1164, 0x11B7] }, +{ source: [0xCA41], NFC: [0xCA41], NFD: [0x110D, 0x1164, 0x11B8], NFKC: [0xCA41], NFKD: [0x110D, 0x1164, 0x11B8] }, +{ source: [0xCA42], NFC: [0xCA42], NFD: [0x110D, 0x1164, 0x11B9], NFKC: [0xCA42], NFKD: [0x110D, 0x1164, 0x11B9] }, +{ source: [0xCA43], NFC: [0xCA43], NFD: [0x110D, 0x1164, 0x11BA], NFKC: [0xCA43], NFKD: [0x110D, 0x1164, 0x11BA] }, +{ source: [0xCA44], NFC: [0xCA44], NFD: [0x110D, 0x1164, 0x11BB], NFKC: [0xCA44], NFKD: [0x110D, 0x1164, 0x11BB] }, +{ source: [0xCA45], NFC: [0xCA45], NFD: [0x110D, 0x1164, 0x11BC], NFKC: [0xCA45], NFKD: [0x110D, 0x1164, 0x11BC] }, +{ source: [0xCA46], NFC: [0xCA46], NFD: [0x110D, 0x1164, 0x11BD], NFKC: [0xCA46], NFKD: [0x110D, 0x1164, 0x11BD] }, +{ source: [0xCA47], NFC: [0xCA47], NFD: [0x110D, 0x1164, 0x11BE], NFKC: [0xCA47], NFKD: [0x110D, 0x1164, 0x11BE] }, +{ source: [0xCA48], NFC: [0xCA48], NFD: [0x110D, 0x1164, 0x11BF], NFKC: [0xCA48], NFKD: [0x110D, 0x1164, 0x11BF] }, +{ source: [0xCA49], NFC: [0xCA49], NFD: [0x110D, 0x1164, 0x11C0], NFKC: [0xCA49], NFKD: [0x110D, 0x1164, 0x11C0] }, +{ source: [0xCA4A], NFC: [0xCA4A], NFD: [0x110D, 0x1164, 0x11C1], NFKC: [0xCA4A], NFKD: [0x110D, 0x1164, 0x11C1] }, +{ source: [0xCA4B], NFC: [0xCA4B], NFD: [0x110D, 0x1164, 0x11C2], NFKC: [0xCA4B], NFKD: [0x110D, 0x1164, 0x11C2] }, +{ source: [0xCA4C], NFC: [0xCA4C], NFD: [0x110D, 0x1165], NFKC: [0xCA4C], NFKD: [0x110D, 0x1165] }, +{ source: [0xCA4D], NFC: [0xCA4D], NFD: [0x110D, 0x1165, 0x11A8], NFKC: [0xCA4D], NFKD: [0x110D, 0x1165, 0x11A8] }, +{ source: [0xCA4E], NFC: [0xCA4E], NFD: [0x110D, 0x1165, 0x11A9], NFKC: [0xCA4E], NFKD: [0x110D, 0x1165, 0x11A9] }, +{ source: [0xCA4F], NFC: [0xCA4F], NFD: [0x110D, 0x1165, 0x11AA], NFKC: [0xCA4F], NFKD: [0x110D, 0x1165, 0x11AA] }, +{ source: [0xCA50], NFC: [0xCA50], NFD: [0x110D, 0x1165, 0x11AB], NFKC: [0xCA50], NFKD: [0x110D, 0x1165, 0x11AB] }, +{ source: [0xCA51], NFC: [0xCA51], NFD: [0x110D, 0x1165, 0x11AC], NFKC: [0xCA51], NFKD: [0x110D, 0x1165, 0x11AC] }, +{ source: [0xCA52], NFC: [0xCA52], NFD: [0x110D, 0x1165, 0x11AD], NFKC: [0xCA52], NFKD: [0x110D, 0x1165, 0x11AD] }, +{ source: [0xCA53], NFC: [0xCA53], NFD: [0x110D, 0x1165, 0x11AE], NFKC: [0xCA53], NFKD: [0x110D, 0x1165, 0x11AE] }, +{ source: [0xCA54], NFC: [0xCA54], NFD: [0x110D, 0x1165, 0x11AF], NFKC: [0xCA54], NFKD: [0x110D, 0x1165, 0x11AF] }, +{ source: [0xCA55], NFC: [0xCA55], NFD: [0x110D, 0x1165, 0x11B0], NFKC: [0xCA55], NFKD: [0x110D, 0x1165, 0x11B0] }, +{ source: [0xCA56], NFC: [0xCA56], NFD: [0x110D, 0x1165, 0x11B1], NFKC: [0xCA56], NFKD: [0x110D, 0x1165, 0x11B1] }, +{ source: [0xCA57], NFC: [0xCA57], NFD: [0x110D, 0x1165, 0x11B2], NFKC: [0xCA57], NFKD: [0x110D, 0x1165, 0x11B2] }, +{ source: [0xCA58], NFC: [0xCA58], NFD: [0x110D, 0x1165, 0x11B3], NFKC: [0xCA58], NFKD: [0x110D, 0x1165, 0x11B3] }, +{ source: [0xCA59], NFC: [0xCA59], NFD: [0x110D, 0x1165, 0x11B4], NFKC: [0xCA59], NFKD: [0x110D, 0x1165, 0x11B4] }, +{ source: [0xCA5A], NFC: [0xCA5A], NFD: [0x110D, 0x1165, 0x11B5], NFKC: [0xCA5A], NFKD: [0x110D, 0x1165, 0x11B5] }, +{ source: [0xCA5B], NFC: [0xCA5B], NFD: [0x110D, 0x1165, 0x11B6], NFKC: [0xCA5B], NFKD: [0x110D, 0x1165, 0x11B6] }, +{ source: [0xCA5C], NFC: [0xCA5C], NFD: [0x110D, 0x1165, 0x11B7], NFKC: [0xCA5C], NFKD: [0x110D, 0x1165, 0x11B7] }, +{ source: [0xCA5D], NFC: [0xCA5D], NFD: [0x110D, 0x1165, 0x11B8], NFKC: [0xCA5D], NFKD: [0x110D, 0x1165, 0x11B8] }, +{ source: [0xCA5E], NFC: [0xCA5E], NFD: [0x110D, 0x1165, 0x11B9], NFKC: [0xCA5E], NFKD: [0x110D, 0x1165, 0x11B9] }, +{ source: [0xCA5F], NFC: [0xCA5F], NFD: [0x110D, 0x1165, 0x11BA], NFKC: [0xCA5F], NFKD: [0x110D, 0x1165, 0x11BA] }, +{ source: [0xCA60], NFC: [0xCA60], NFD: [0x110D, 0x1165, 0x11BB], NFKC: [0xCA60], NFKD: [0x110D, 0x1165, 0x11BB] }, +{ source: [0xCA61], NFC: [0xCA61], NFD: [0x110D, 0x1165, 0x11BC], NFKC: [0xCA61], NFKD: [0x110D, 0x1165, 0x11BC] }, +{ source: [0xCA62], NFC: [0xCA62], NFD: [0x110D, 0x1165, 0x11BD], NFKC: [0xCA62], NFKD: [0x110D, 0x1165, 0x11BD] }, +{ source: [0xCA63], NFC: [0xCA63], NFD: [0x110D, 0x1165, 0x11BE], NFKC: [0xCA63], NFKD: [0x110D, 0x1165, 0x11BE] }, +{ source: [0xCA64], NFC: [0xCA64], NFD: [0x110D, 0x1165, 0x11BF], NFKC: [0xCA64], NFKD: [0x110D, 0x1165, 0x11BF] }, +{ source: [0xCA65], NFC: [0xCA65], NFD: [0x110D, 0x1165, 0x11C0], NFKC: [0xCA65], NFKD: [0x110D, 0x1165, 0x11C0] }, +{ source: [0xCA66], NFC: [0xCA66], NFD: [0x110D, 0x1165, 0x11C1], NFKC: [0xCA66], NFKD: [0x110D, 0x1165, 0x11C1] }, +{ source: [0xCA67], NFC: [0xCA67], NFD: [0x110D, 0x1165, 0x11C2], NFKC: [0xCA67], NFKD: [0x110D, 0x1165, 0x11C2] }, +{ source: [0xCA68], NFC: [0xCA68], NFD: [0x110D, 0x1166], NFKC: [0xCA68], NFKD: [0x110D, 0x1166] }, +{ source: [0xCA69], NFC: [0xCA69], NFD: [0x110D, 0x1166, 0x11A8], NFKC: [0xCA69], NFKD: [0x110D, 0x1166, 0x11A8] }, +{ source: [0xCA6A], NFC: [0xCA6A], NFD: [0x110D, 0x1166, 0x11A9], NFKC: [0xCA6A], NFKD: [0x110D, 0x1166, 0x11A9] }, +{ source: [0xCA6B], NFC: [0xCA6B], NFD: [0x110D, 0x1166, 0x11AA], NFKC: [0xCA6B], NFKD: [0x110D, 0x1166, 0x11AA] }, +{ source: [0xCA6C], NFC: [0xCA6C], NFD: [0x110D, 0x1166, 0x11AB], NFKC: [0xCA6C], NFKD: [0x110D, 0x1166, 0x11AB] }, +{ source: [0xCA6D], NFC: [0xCA6D], NFD: [0x110D, 0x1166, 0x11AC], NFKC: [0xCA6D], NFKD: [0x110D, 0x1166, 0x11AC] }, +{ source: [0xCA6E], NFC: [0xCA6E], NFD: [0x110D, 0x1166, 0x11AD], NFKC: [0xCA6E], NFKD: [0x110D, 0x1166, 0x11AD] }, +{ source: [0xCA6F], NFC: [0xCA6F], NFD: [0x110D, 0x1166, 0x11AE], NFKC: [0xCA6F], NFKD: [0x110D, 0x1166, 0x11AE] }, +{ source: [0xCA70], NFC: [0xCA70], NFD: [0x110D, 0x1166, 0x11AF], NFKC: [0xCA70], NFKD: [0x110D, 0x1166, 0x11AF] }, +{ source: [0xCA71], NFC: [0xCA71], NFD: [0x110D, 0x1166, 0x11B0], NFKC: [0xCA71], NFKD: [0x110D, 0x1166, 0x11B0] }, +{ source: [0xCA72], NFC: [0xCA72], NFD: [0x110D, 0x1166, 0x11B1], NFKC: [0xCA72], NFKD: [0x110D, 0x1166, 0x11B1] }, +{ source: [0xCA73], NFC: [0xCA73], NFD: [0x110D, 0x1166, 0x11B2], NFKC: [0xCA73], NFKD: [0x110D, 0x1166, 0x11B2] }, +{ source: [0xCA74], NFC: [0xCA74], NFD: [0x110D, 0x1166, 0x11B3], NFKC: [0xCA74], NFKD: [0x110D, 0x1166, 0x11B3] }, +{ source: [0xCA75], NFC: [0xCA75], NFD: [0x110D, 0x1166, 0x11B4], NFKC: [0xCA75], NFKD: [0x110D, 0x1166, 0x11B4] }, +{ source: [0xCA76], NFC: [0xCA76], NFD: [0x110D, 0x1166, 0x11B5], NFKC: [0xCA76], NFKD: [0x110D, 0x1166, 0x11B5] }, +{ source: [0xCA77], NFC: [0xCA77], NFD: [0x110D, 0x1166, 0x11B6], NFKC: [0xCA77], NFKD: [0x110D, 0x1166, 0x11B6] }, +{ source: [0xCA78], NFC: [0xCA78], NFD: [0x110D, 0x1166, 0x11B7], NFKC: [0xCA78], NFKD: [0x110D, 0x1166, 0x11B7] }, +{ source: [0xCA79], NFC: [0xCA79], NFD: [0x110D, 0x1166, 0x11B8], NFKC: [0xCA79], NFKD: [0x110D, 0x1166, 0x11B8] }, +{ source: [0xCA7A], NFC: [0xCA7A], NFD: [0x110D, 0x1166, 0x11B9], NFKC: [0xCA7A], NFKD: [0x110D, 0x1166, 0x11B9] }, +{ source: [0xCA7B], NFC: [0xCA7B], NFD: [0x110D, 0x1166, 0x11BA], NFKC: [0xCA7B], NFKD: [0x110D, 0x1166, 0x11BA] }, +{ source: [0xCA7C], NFC: [0xCA7C], NFD: [0x110D, 0x1166, 0x11BB], NFKC: [0xCA7C], NFKD: [0x110D, 0x1166, 0x11BB] }, +{ source: [0xCA7D], NFC: [0xCA7D], NFD: [0x110D, 0x1166, 0x11BC], NFKC: [0xCA7D], NFKD: [0x110D, 0x1166, 0x11BC] }, +{ source: [0xCA7E], NFC: [0xCA7E], NFD: [0x110D, 0x1166, 0x11BD], NFKC: [0xCA7E], NFKD: [0x110D, 0x1166, 0x11BD] }, +{ source: [0xCA7F], NFC: [0xCA7F], NFD: [0x110D, 0x1166, 0x11BE], NFKC: [0xCA7F], NFKD: [0x110D, 0x1166, 0x11BE] }, +{ source: [0xCA80], NFC: [0xCA80], NFD: [0x110D, 0x1166, 0x11BF], NFKC: [0xCA80], NFKD: [0x110D, 0x1166, 0x11BF] }, +{ source: [0xCA81], NFC: [0xCA81], NFD: [0x110D, 0x1166, 0x11C0], NFKC: [0xCA81], NFKD: [0x110D, 0x1166, 0x11C0] }, +{ source: [0xCA82], NFC: [0xCA82], NFD: [0x110D, 0x1166, 0x11C1], NFKC: [0xCA82], NFKD: [0x110D, 0x1166, 0x11C1] }, +{ source: [0xCA83], NFC: [0xCA83], NFD: [0x110D, 0x1166, 0x11C2], NFKC: [0xCA83], NFKD: [0x110D, 0x1166, 0x11C2] }, +{ source: [0xCA84], NFC: [0xCA84], NFD: [0x110D, 0x1167], NFKC: [0xCA84], NFKD: [0x110D, 0x1167] }, +{ source: [0xCA85], NFC: [0xCA85], NFD: [0x110D, 0x1167, 0x11A8], NFKC: [0xCA85], NFKD: [0x110D, 0x1167, 0x11A8] }, +{ source: [0xCA86], NFC: [0xCA86], NFD: [0x110D, 0x1167, 0x11A9], NFKC: [0xCA86], NFKD: [0x110D, 0x1167, 0x11A9] }, +{ source: [0xCA87], NFC: [0xCA87], NFD: [0x110D, 0x1167, 0x11AA], NFKC: [0xCA87], NFKD: [0x110D, 0x1167, 0x11AA] }, +{ source: [0xCA88], NFC: [0xCA88], NFD: [0x110D, 0x1167, 0x11AB], NFKC: [0xCA88], NFKD: [0x110D, 0x1167, 0x11AB] }, +{ source: [0xCA89], NFC: [0xCA89], NFD: [0x110D, 0x1167, 0x11AC], NFKC: [0xCA89], NFKD: [0x110D, 0x1167, 0x11AC] }, +{ source: [0xCA8A], NFC: [0xCA8A], NFD: [0x110D, 0x1167, 0x11AD], NFKC: [0xCA8A], NFKD: [0x110D, 0x1167, 0x11AD] }, +{ source: [0xCA8B], NFC: [0xCA8B], NFD: [0x110D, 0x1167, 0x11AE], NFKC: [0xCA8B], NFKD: [0x110D, 0x1167, 0x11AE] }, +{ source: [0xCA8C], NFC: [0xCA8C], NFD: [0x110D, 0x1167, 0x11AF], NFKC: [0xCA8C], NFKD: [0x110D, 0x1167, 0x11AF] }, +{ source: [0xCA8D], NFC: [0xCA8D], NFD: [0x110D, 0x1167, 0x11B0], NFKC: [0xCA8D], NFKD: [0x110D, 0x1167, 0x11B0] }, +{ source: [0xCA8E], NFC: [0xCA8E], NFD: [0x110D, 0x1167, 0x11B1], NFKC: [0xCA8E], NFKD: [0x110D, 0x1167, 0x11B1] }, +{ source: [0xCA8F], NFC: [0xCA8F], NFD: [0x110D, 0x1167, 0x11B2], NFKC: [0xCA8F], NFKD: [0x110D, 0x1167, 0x11B2] }, +{ source: [0xCA90], NFC: [0xCA90], NFD: [0x110D, 0x1167, 0x11B3], NFKC: [0xCA90], NFKD: [0x110D, 0x1167, 0x11B3] }, +{ source: [0xCA91], NFC: [0xCA91], NFD: [0x110D, 0x1167, 0x11B4], NFKC: [0xCA91], NFKD: [0x110D, 0x1167, 0x11B4] }, +{ source: [0xCA92], NFC: [0xCA92], NFD: [0x110D, 0x1167, 0x11B5], NFKC: [0xCA92], NFKD: [0x110D, 0x1167, 0x11B5] }, +{ source: [0xCA93], NFC: [0xCA93], NFD: [0x110D, 0x1167, 0x11B6], NFKC: [0xCA93], NFKD: [0x110D, 0x1167, 0x11B6] }, +{ source: [0xCA94], NFC: [0xCA94], NFD: [0x110D, 0x1167, 0x11B7], NFKC: [0xCA94], NFKD: [0x110D, 0x1167, 0x11B7] }, +{ source: [0xCA95], NFC: [0xCA95], NFD: [0x110D, 0x1167, 0x11B8], NFKC: [0xCA95], NFKD: [0x110D, 0x1167, 0x11B8] }, +{ source: [0xCA96], NFC: [0xCA96], NFD: [0x110D, 0x1167, 0x11B9], NFKC: [0xCA96], NFKD: [0x110D, 0x1167, 0x11B9] }, +{ source: [0xCA97], NFC: [0xCA97], NFD: [0x110D, 0x1167, 0x11BA], NFKC: [0xCA97], NFKD: [0x110D, 0x1167, 0x11BA] }, +{ source: [0xCA98], NFC: [0xCA98], NFD: [0x110D, 0x1167, 0x11BB], NFKC: [0xCA98], NFKD: [0x110D, 0x1167, 0x11BB] }, +{ source: [0xCA99], NFC: [0xCA99], NFD: [0x110D, 0x1167, 0x11BC], NFKC: [0xCA99], NFKD: [0x110D, 0x1167, 0x11BC] }, +{ source: [0xCA9A], NFC: [0xCA9A], NFD: [0x110D, 0x1167, 0x11BD], NFKC: [0xCA9A], NFKD: [0x110D, 0x1167, 0x11BD] }, +{ source: [0xCA9B], NFC: [0xCA9B], NFD: [0x110D, 0x1167, 0x11BE], NFKC: [0xCA9B], NFKD: [0x110D, 0x1167, 0x11BE] }, +{ source: [0xCA9C], NFC: [0xCA9C], NFD: [0x110D, 0x1167, 0x11BF], NFKC: [0xCA9C], NFKD: [0x110D, 0x1167, 0x11BF] }, +{ source: [0xCA9D], NFC: [0xCA9D], NFD: [0x110D, 0x1167, 0x11C0], NFKC: [0xCA9D], NFKD: [0x110D, 0x1167, 0x11C0] }, +{ source: [0xCA9E], NFC: [0xCA9E], NFD: [0x110D, 0x1167, 0x11C1], NFKC: [0xCA9E], NFKD: [0x110D, 0x1167, 0x11C1] }, +{ source: [0xCA9F], NFC: [0xCA9F], NFD: [0x110D, 0x1167, 0x11C2], NFKC: [0xCA9F], NFKD: [0x110D, 0x1167, 0x11C2] }, +{ source: [0xCAA0], NFC: [0xCAA0], NFD: [0x110D, 0x1168], NFKC: [0xCAA0], NFKD: [0x110D, 0x1168] }, +{ source: [0xCAA1], NFC: [0xCAA1], NFD: [0x110D, 0x1168, 0x11A8], NFKC: [0xCAA1], NFKD: [0x110D, 0x1168, 0x11A8] }, +{ source: [0xCAA2], NFC: [0xCAA2], NFD: [0x110D, 0x1168, 0x11A9], NFKC: [0xCAA2], NFKD: [0x110D, 0x1168, 0x11A9] }, +{ source: [0xCAA3], NFC: [0xCAA3], NFD: [0x110D, 0x1168, 0x11AA], NFKC: [0xCAA3], NFKD: [0x110D, 0x1168, 0x11AA] }, +{ source: [0xCAA4], NFC: [0xCAA4], NFD: [0x110D, 0x1168, 0x11AB], NFKC: [0xCAA4], NFKD: [0x110D, 0x1168, 0x11AB] }, +{ source: [0xCAA5], NFC: [0xCAA5], NFD: [0x110D, 0x1168, 0x11AC], NFKC: [0xCAA5], NFKD: [0x110D, 0x1168, 0x11AC] }, +{ source: [0xCAA6], NFC: [0xCAA6], NFD: [0x110D, 0x1168, 0x11AD], NFKC: [0xCAA6], NFKD: [0x110D, 0x1168, 0x11AD] }, +{ source: [0xCAA7], NFC: [0xCAA7], NFD: [0x110D, 0x1168, 0x11AE], NFKC: [0xCAA7], NFKD: [0x110D, 0x1168, 0x11AE] }, +{ source: [0xCAA8], NFC: [0xCAA8], NFD: [0x110D, 0x1168, 0x11AF], NFKC: [0xCAA8], NFKD: [0x110D, 0x1168, 0x11AF] }, +{ source: [0xCAA9], NFC: [0xCAA9], NFD: [0x110D, 0x1168, 0x11B0], NFKC: [0xCAA9], NFKD: [0x110D, 0x1168, 0x11B0] }, +{ source: [0xCAAA], NFC: [0xCAAA], NFD: [0x110D, 0x1168, 0x11B1], NFKC: [0xCAAA], NFKD: [0x110D, 0x1168, 0x11B1] }, +{ source: [0xCAAB], NFC: [0xCAAB], NFD: [0x110D, 0x1168, 0x11B2], NFKC: [0xCAAB], NFKD: [0x110D, 0x1168, 0x11B2] }, +{ source: [0xCAAC], NFC: [0xCAAC], NFD: [0x110D, 0x1168, 0x11B3], NFKC: [0xCAAC], NFKD: [0x110D, 0x1168, 0x11B3] }, +{ source: [0xCAAD], NFC: [0xCAAD], NFD: [0x110D, 0x1168, 0x11B4], NFKC: [0xCAAD], NFKD: [0x110D, 0x1168, 0x11B4] }, +{ source: [0xCAAE], NFC: [0xCAAE], NFD: [0x110D, 0x1168, 0x11B5], NFKC: [0xCAAE], NFKD: [0x110D, 0x1168, 0x11B5] }, +{ source: [0xCAAF], NFC: [0xCAAF], NFD: [0x110D, 0x1168, 0x11B6], NFKC: [0xCAAF], NFKD: [0x110D, 0x1168, 0x11B6] }, +{ source: [0xCAB0], NFC: [0xCAB0], NFD: [0x110D, 0x1168, 0x11B7], NFKC: [0xCAB0], NFKD: [0x110D, 0x1168, 0x11B7] }, +{ source: [0xCAB1], NFC: [0xCAB1], NFD: [0x110D, 0x1168, 0x11B8], NFKC: [0xCAB1], NFKD: [0x110D, 0x1168, 0x11B8] }, +{ source: [0xCAB2], NFC: [0xCAB2], NFD: [0x110D, 0x1168, 0x11B9], NFKC: [0xCAB2], NFKD: [0x110D, 0x1168, 0x11B9] }, +{ source: [0xCAB3], NFC: [0xCAB3], NFD: [0x110D, 0x1168, 0x11BA], NFKC: [0xCAB3], NFKD: [0x110D, 0x1168, 0x11BA] }, +{ source: [0xCAB4], NFC: [0xCAB4], NFD: [0x110D, 0x1168, 0x11BB], NFKC: [0xCAB4], NFKD: [0x110D, 0x1168, 0x11BB] }, +{ source: [0xCAB5], NFC: [0xCAB5], NFD: [0x110D, 0x1168, 0x11BC], NFKC: [0xCAB5], NFKD: [0x110D, 0x1168, 0x11BC] }, +{ source: [0xCAB6], NFC: [0xCAB6], NFD: [0x110D, 0x1168, 0x11BD], NFKC: [0xCAB6], NFKD: [0x110D, 0x1168, 0x11BD] }, +{ source: [0xCAB7], NFC: [0xCAB7], NFD: [0x110D, 0x1168, 0x11BE], NFKC: [0xCAB7], NFKD: [0x110D, 0x1168, 0x11BE] }, +{ source: [0xCAB8], NFC: [0xCAB8], NFD: [0x110D, 0x1168, 0x11BF], NFKC: [0xCAB8], NFKD: [0x110D, 0x1168, 0x11BF] }, +{ source: [0xCAB9], NFC: [0xCAB9], NFD: [0x110D, 0x1168, 0x11C0], NFKC: [0xCAB9], NFKD: [0x110D, 0x1168, 0x11C0] }, +{ source: [0xCABA], NFC: [0xCABA], NFD: [0x110D, 0x1168, 0x11C1], NFKC: [0xCABA], NFKD: [0x110D, 0x1168, 0x11C1] }, +{ source: [0xCABB], NFC: [0xCABB], NFD: [0x110D, 0x1168, 0x11C2], NFKC: [0xCABB], NFKD: [0x110D, 0x1168, 0x11C2] }, +{ source: [0xCABC], NFC: [0xCABC], NFD: [0x110D, 0x1169], NFKC: [0xCABC], NFKD: [0x110D, 0x1169] }, +{ source: [0xCABD], NFC: [0xCABD], NFD: [0x110D, 0x1169, 0x11A8], NFKC: [0xCABD], NFKD: [0x110D, 0x1169, 0x11A8] }, +{ source: [0xCABE], NFC: [0xCABE], NFD: [0x110D, 0x1169, 0x11A9], NFKC: [0xCABE], NFKD: [0x110D, 0x1169, 0x11A9] }, +{ source: [0xCABF], NFC: [0xCABF], NFD: [0x110D, 0x1169, 0x11AA], NFKC: [0xCABF], NFKD: [0x110D, 0x1169, 0x11AA] }, +{ source: [0xCAC0], NFC: [0xCAC0], NFD: [0x110D, 0x1169, 0x11AB], NFKC: [0xCAC0], NFKD: [0x110D, 0x1169, 0x11AB] }, +{ source: [0xCAC1], NFC: [0xCAC1], NFD: [0x110D, 0x1169, 0x11AC], NFKC: [0xCAC1], NFKD: [0x110D, 0x1169, 0x11AC] }, +{ source: [0xCAC2], NFC: [0xCAC2], NFD: [0x110D, 0x1169, 0x11AD], NFKC: [0xCAC2], NFKD: [0x110D, 0x1169, 0x11AD] }, +{ source: [0xCAC3], NFC: [0xCAC3], NFD: [0x110D, 0x1169, 0x11AE], NFKC: [0xCAC3], NFKD: [0x110D, 0x1169, 0x11AE] }, +{ source: [0xCAC4], NFC: [0xCAC4], NFD: [0x110D, 0x1169, 0x11AF], NFKC: [0xCAC4], NFKD: [0x110D, 0x1169, 0x11AF] }, +{ source: [0xCAC5], NFC: [0xCAC5], NFD: [0x110D, 0x1169, 0x11B0], NFKC: [0xCAC5], NFKD: [0x110D, 0x1169, 0x11B0] }, +{ source: [0xCAC6], NFC: [0xCAC6], NFD: [0x110D, 0x1169, 0x11B1], NFKC: [0xCAC6], NFKD: [0x110D, 0x1169, 0x11B1] }, +{ source: [0xCAC7], NFC: [0xCAC7], NFD: [0x110D, 0x1169, 0x11B2], NFKC: [0xCAC7], NFKD: [0x110D, 0x1169, 0x11B2] }, +{ source: [0xCAC8], NFC: [0xCAC8], NFD: [0x110D, 0x1169, 0x11B3], NFKC: [0xCAC8], NFKD: [0x110D, 0x1169, 0x11B3] }, +{ source: [0xCAC9], NFC: [0xCAC9], NFD: [0x110D, 0x1169, 0x11B4], NFKC: [0xCAC9], NFKD: [0x110D, 0x1169, 0x11B4] }, +{ source: [0xCACA], NFC: [0xCACA], NFD: [0x110D, 0x1169, 0x11B5], NFKC: [0xCACA], NFKD: [0x110D, 0x1169, 0x11B5] }, +{ source: [0xCACB], NFC: [0xCACB], NFD: [0x110D, 0x1169, 0x11B6], NFKC: [0xCACB], NFKD: [0x110D, 0x1169, 0x11B6] }, +{ source: [0xCACC], NFC: [0xCACC], NFD: [0x110D, 0x1169, 0x11B7], NFKC: [0xCACC], NFKD: [0x110D, 0x1169, 0x11B7] }, +{ source: [0xCACD], NFC: [0xCACD], NFD: [0x110D, 0x1169, 0x11B8], NFKC: [0xCACD], NFKD: [0x110D, 0x1169, 0x11B8] }, +{ source: [0xCACE], NFC: [0xCACE], NFD: [0x110D, 0x1169, 0x11B9], NFKC: [0xCACE], NFKD: [0x110D, 0x1169, 0x11B9] }, +{ source: [0xCACF], NFC: [0xCACF], NFD: [0x110D, 0x1169, 0x11BA], NFKC: [0xCACF], NFKD: [0x110D, 0x1169, 0x11BA] }, +{ source: [0xCAD0], NFC: [0xCAD0], NFD: [0x110D, 0x1169, 0x11BB], NFKC: [0xCAD0], NFKD: [0x110D, 0x1169, 0x11BB] }, +{ source: [0xCAD1], NFC: [0xCAD1], NFD: [0x110D, 0x1169, 0x11BC], NFKC: [0xCAD1], NFKD: [0x110D, 0x1169, 0x11BC] }, +{ source: [0xCAD2], NFC: [0xCAD2], NFD: [0x110D, 0x1169, 0x11BD], NFKC: [0xCAD2], NFKD: [0x110D, 0x1169, 0x11BD] }, +{ source: [0xCAD3], NFC: [0xCAD3], NFD: [0x110D, 0x1169, 0x11BE], NFKC: [0xCAD3], NFKD: [0x110D, 0x1169, 0x11BE] }, +{ source: [0xCAD4], NFC: [0xCAD4], NFD: [0x110D, 0x1169, 0x11BF], NFKC: [0xCAD4], NFKD: [0x110D, 0x1169, 0x11BF] }, +{ source: [0xCAD5], NFC: [0xCAD5], NFD: [0x110D, 0x1169, 0x11C0], NFKC: [0xCAD5], NFKD: [0x110D, 0x1169, 0x11C0] }, +{ source: [0xCAD6], NFC: [0xCAD6], NFD: [0x110D, 0x1169, 0x11C1], NFKC: [0xCAD6], NFKD: [0x110D, 0x1169, 0x11C1] }, +{ source: [0xCAD7], NFC: [0xCAD7], NFD: [0x110D, 0x1169, 0x11C2], NFKC: [0xCAD7], NFKD: [0x110D, 0x1169, 0x11C2] }, +{ source: [0xCAD8], NFC: [0xCAD8], NFD: [0x110D, 0x116A], NFKC: [0xCAD8], NFKD: [0x110D, 0x116A] }, +{ source: [0xCAD9], NFC: [0xCAD9], NFD: [0x110D, 0x116A, 0x11A8], NFKC: [0xCAD9], NFKD: [0x110D, 0x116A, 0x11A8] }, +{ source: [0xCADA], NFC: [0xCADA], NFD: [0x110D, 0x116A, 0x11A9], NFKC: [0xCADA], NFKD: [0x110D, 0x116A, 0x11A9] }, +{ source: [0xCADB], NFC: [0xCADB], NFD: [0x110D, 0x116A, 0x11AA], NFKC: [0xCADB], NFKD: [0x110D, 0x116A, 0x11AA] }, +{ source: [0xCADC], NFC: [0xCADC], NFD: [0x110D, 0x116A, 0x11AB], NFKC: [0xCADC], NFKD: [0x110D, 0x116A, 0x11AB] }, +{ source: [0xCADD], NFC: [0xCADD], NFD: [0x110D, 0x116A, 0x11AC], NFKC: [0xCADD], NFKD: [0x110D, 0x116A, 0x11AC] }, +{ source: [0xCADE], NFC: [0xCADE], NFD: [0x110D, 0x116A, 0x11AD], NFKC: [0xCADE], NFKD: [0x110D, 0x116A, 0x11AD] }, +{ source: [0xCADF], NFC: [0xCADF], NFD: [0x110D, 0x116A, 0x11AE], NFKC: [0xCADF], NFKD: [0x110D, 0x116A, 0x11AE] }, +{ source: [0xCAE0], NFC: [0xCAE0], NFD: [0x110D, 0x116A, 0x11AF], NFKC: [0xCAE0], NFKD: [0x110D, 0x116A, 0x11AF] }, +{ source: [0xCAE1], NFC: [0xCAE1], NFD: [0x110D, 0x116A, 0x11B0], NFKC: [0xCAE1], NFKD: [0x110D, 0x116A, 0x11B0] }, +{ source: [0xCAE2], NFC: [0xCAE2], NFD: [0x110D, 0x116A, 0x11B1], NFKC: [0xCAE2], NFKD: [0x110D, 0x116A, 0x11B1] }, +{ source: [0xCAE3], NFC: [0xCAE3], NFD: [0x110D, 0x116A, 0x11B2], NFKC: [0xCAE3], NFKD: [0x110D, 0x116A, 0x11B2] }, +{ source: [0xCAE4], NFC: [0xCAE4], NFD: [0x110D, 0x116A, 0x11B3], NFKC: [0xCAE4], NFKD: [0x110D, 0x116A, 0x11B3] }, +{ source: [0xCAE5], NFC: [0xCAE5], NFD: [0x110D, 0x116A, 0x11B4], NFKC: [0xCAE5], NFKD: [0x110D, 0x116A, 0x11B4] }, +{ source: [0xCAE6], NFC: [0xCAE6], NFD: [0x110D, 0x116A, 0x11B5], NFKC: [0xCAE6], NFKD: [0x110D, 0x116A, 0x11B5] }, +{ source: [0xCAE7], NFC: [0xCAE7], NFD: [0x110D, 0x116A, 0x11B6], NFKC: [0xCAE7], NFKD: [0x110D, 0x116A, 0x11B6] }, +{ source: [0xCAE8], NFC: [0xCAE8], NFD: [0x110D, 0x116A, 0x11B7], NFKC: [0xCAE8], NFKD: [0x110D, 0x116A, 0x11B7] }, +{ source: [0xCAE9], NFC: [0xCAE9], NFD: [0x110D, 0x116A, 0x11B8], NFKC: [0xCAE9], NFKD: [0x110D, 0x116A, 0x11B8] }, +{ source: [0xCAEA], NFC: [0xCAEA], NFD: [0x110D, 0x116A, 0x11B9], NFKC: [0xCAEA], NFKD: [0x110D, 0x116A, 0x11B9] }, +{ source: [0xCAEB], NFC: [0xCAEB], NFD: [0x110D, 0x116A, 0x11BA], NFKC: [0xCAEB], NFKD: [0x110D, 0x116A, 0x11BA] }, +{ source: [0xCAEC], NFC: [0xCAEC], NFD: [0x110D, 0x116A, 0x11BB], NFKC: [0xCAEC], NFKD: [0x110D, 0x116A, 0x11BB] }, +{ source: [0xCAED], NFC: [0xCAED], NFD: [0x110D, 0x116A, 0x11BC], NFKC: [0xCAED], NFKD: [0x110D, 0x116A, 0x11BC] }, +{ source: [0xCAEE], NFC: [0xCAEE], NFD: [0x110D, 0x116A, 0x11BD], NFKC: [0xCAEE], NFKD: [0x110D, 0x116A, 0x11BD] }, +{ source: [0xCAEF], NFC: [0xCAEF], NFD: [0x110D, 0x116A, 0x11BE], NFKC: [0xCAEF], NFKD: [0x110D, 0x116A, 0x11BE] }, +{ source: [0xCAF0], NFC: [0xCAF0], NFD: [0x110D, 0x116A, 0x11BF], NFKC: [0xCAF0], NFKD: [0x110D, 0x116A, 0x11BF] }, +{ source: [0xCAF1], NFC: [0xCAF1], NFD: [0x110D, 0x116A, 0x11C0], NFKC: [0xCAF1], NFKD: [0x110D, 0x116A, 0x11C0] }, +{ source: [0xCAF2], NFC: [0xCAF2], NFD: [0x110D, 0x116A, 0x11C1], NFKC: [0xCAF2], NFKD: [0x110D, 0x116A, 0x11C1] }, +{ source: [0xCAF3], NFC: [0xCAF3], NFD: [0x110D, 0x116A, 0x11C2], NFKC: [0xCAF3], NFKD: [0x110D, 0x116A, 0x11C2] }, +{ source: [0xCAF4], NFC: [0xCAF4], NFD: [0x110D, 0x116B], NFKC: [0xCAF4], NFKD: [0x110D, 0x116B] }, +{ source: [0xCAF5], NFC: [0xCAF5], NFD: [0x110D, 0x116B, 0x11A8], NFKC: [0xCAF5], NFKD: [0x110D, 0x116B, 0x11A8] }, +{ source: [0xCAF6], NFC: [0xCAF6], NFD: [0x110D, 0x116B, 0x11A9], NFKC: [0xCAF6], NFKD: [0x110D, 0x116B, 0x11A9] }, +{ source: [0xCAF7], NFC: [0xCAF7], NFD: [0x110D, 0x116B, 0x11AA], NFKC: [0xCAF7], NFKD: [0x110D, 0x116B, 0x11AA] }, +{ source: [0xCAF8], NFC: [0xCAF8], NFD: [0x110D, 0x116B, 0x11AB], NFKC: [0xCAF8], NFKD: [0x110D, 0x116B, 0x11AB] }, +{ source: [0xCAF9], NFC: [0xCAF9], NFD: [0x110D, 0x116B, 0x11AC], NFKC: [0xCAF9], NFKD: [0x110D, 0x116B, 0x11AC] }, +{ source: [0xCAFA], NFC: [0xCAFA], NFD: [0x110D, 0x116B, 0x11AD], NFKC: [0xCAFA], NFKD: [0x110D, 0x116B, 0x11AD] }, +{ source: [0xCAFB], NFC: [0xCAFB], NFD: [0x110D, 0x116B, 0x11AE], NFKC: [0xCAFB], NFKD: [0x110D, 0x116B, 0x11AE] }, +{ source: [0xCAFC], NFC: [0xCAFC], NFD: [0x110D, 0x116B, 0x11AF], NFKC: [0xCAFC], NFKD: [0x110D, 0x116B, 0x11AF] }, +{ source: [0xCAFD], NFC: [0xCAFD], NFD: [0x110D, 0x116B, 0x11B0], NFKC: [0xCAFD], NFKD: [0x110D, 0x116B, 0x11B0] }, +{ source: [0xCAFE], NFC: [0xCAFE], NFD: [0x110D, 0x116B, 0x11B1], NFKC: [0xCAFE], NFKD: [0x110D, 0x116B, 0x11B1] }, +{ source: [0xCAFF], NFC: [0xCAFF], NFD: [0x110D, 0x116B, 0x11B2], NFKC: [0xCAFF], NFKD: [0x110D, 0x116B, 0x11B2] }, +{ source: [0xCB00], NFC: [0xCB00], NFD: [0x110D, 0x116B, 0x11B3], NFKC: [0xCB00], NFKD: [0x110D, 0x116B, 0x11B3] }, +{ source: [0xCB01], NFC: [0xCB01], NFD: [0x110D, 0x116B, 0x11B4], NFKC: [0xCB01], NFKD: [0x110D, 0x116B, 0x11B4] }, +{ source: [0xCB02], NFC: [0xCB02], NFD: [0x110D, 0x116B, 0x11B5], NFKC: [0xCB02], NFKD: [0x110D, 0x116B, 0x11B5] }, +{ source: [0xCB03], NFC: [0xCB03], NFD: [0x110D, 0x116B, 0x11B6], NFKC: [0xCB03], NFKD: [0x110D, 0x116B, 0x11B6] }, +{ source: [0xCB04], NFC: [0xCB04], NFD: [0x110D, 0x116B, 0x11B7], NFKC: [0xCB04], NFKD: [0x110D, 0x116B, 0x11B7] }, +{ source: [0xCB05], NFC: [0xCB05], NFD: [0x110D, 0x116B, 0x11B8], NFKC: [0xCB05], NFKD: [0x110D, 0x116B, 0x11B8] }, +{ source: [0xCB06], NFC: [0xCB06], NFD: [0x110D, 0x116B, 0x11B9], NFKC: [0xCB06], NFKD: [0x110D, 0x116B, 0x11B9] }, +{ source: [0xCB07], NFC: [0xCB07], NFD: [0x110D, 0x116B, 0x11BA], NFKC: [0xCB07], NFKD: [0x110D, 0x116B, 0x11BA] }, +{ source: [0xCB08], NFC: [0xCB08], NFD: [0x110D, 0x116B, 0x11BB], NFKC: [0xCB08], NFKD: [0x110D, 0x116B, 0x11BB] }, +{ source: [0xCB09], NFC: [0xCB09], NFD: [0x110D, 0x116B, 0x11BC], NFKC: [0xCB09], NFKD: [0x110D, 0x116B, 0x11BC] }, +{ source: [0xCB0A], NFC: [0xCB0A], NFD: [0x110D, 0x116B, 0x11BD], NFKC: [0xCB0A], NFKD: [0x110D, 0x116B, 0x11BD] }, +{ source: [0xCB0B], NFC: [0xCB0B], NFD: [0x110D, 0x116B, 0x11BE], NFKC: [0xCB0B], NFKD: [0x110D, 0x116B, 0x11BE] }, +{ source: [0xCB0C], NFC: [0xCB0C], NFD: [0x110D, 0x116B, 0x11BF], NFKC: [0xCB0C], NFKD: [0x110D, 0x116B, 0x11BF] }, +{ source: [0xCB0D], NFC: [0xCB0D], NFD: [0x110D, 0x116B, 0x11C0], NFKC: [0xCB0D], NFKD: [0x110D, 0x116B, 0x11C0] }, +{ source: [0xCB0E], NFC: [0xCB0E], NFD: [0x110D, 0x116B, 0x11C1], NFKC: [0xCB0E], NFKD: [0x110D, 0x116B, 0x11C1] }, +{ source: [0xCB0F], NFC: [0xCB0F], NFD: [0x110D, 0x116B, 0x11C2], NFKC: [0xCB0F], NFKD: [0x110D, 0x116B, 0x11C2] }, +{ source: [0xCB10], NFC: [0xCB10], NFD: [0x110D, 0x116C], NFKC: [0xCB10], NFKD: [0x110D, 0x116C] }, +{ source: [0xCB11], NFC: [0xCB11], NFD: [0x110D, 0x116C, 0x11A8], NFKC: [0xCB11], NFKD: [0x110D, 0x116C, 0x11A8] }, +{ source: [0xCB12], NFC: [0xCB12], NFD: [0x110D, 0x116C, 0x11A9], NFKC: [0xCB12], NFKD: [0x110D, 0x116C, 0x11A9] }, +{ source: [0xCB13], NFC: [0xCB13], NFD: [0x110D, 0x116C, 0x11AA], NFKC: [0xCB13], NFKD: [0x110D, 0x116C, 0x11AA] }, +{ source: [0xCB14], NFC: [0xCB14], NFD: [0x110D, 0x116C, 0x11AB], NFKC: [0xCB14], NFKD: [0x110D, 0x116C, 0x11AB] }, +{ source: [0xCB15], NFC: [0xCB15], NFD: [0x110D, 0x116C, 0x11AC], NFKC: [0xCB15], NFKD: [0x110D, 0x116C, 0x11AC] }, +{ source: [0xCB16], NFC: [0xCB16], NFD: [0x110D, 0x116C, 0x11AD], NFKC: [0xCB16], NFKD: [0x110D, 0x116C, 0x11AD] }, +{ source: [0xCB17], NFC: [0xCB17], NFD: [0x110D, 0x116C, 0x11AE], NFKC: [0xCB17], NFKD: [0x110D, 0x116C, 0x11AE] }, +{ source: [0xCB18], NFC: [0xCB18], NFD: [0x110D, 0x116C, 0x11AF], NFKC: [0xCB18], NFKD: [0x110D, 0x116C, 0x11AF] }, +{ source: [0xCB19], NFC: [0xCB19], NFD: [0x110D, 0x116C, 0x11B0], NFKC: [0xCB19], NFKD: [0x110D, 0x116C, 0x11B0] }, +{ source: [0xCB1A], NFC: [0xCB1A], NFD: [0x110D, 0x116C, 0x11B1], NFKC: [0xCB1A], NFKD: [0x110D, 0x116C, 0x11B1] }, +{ source: [0xCB1B], NFC: [0xCB1B], NFD: [0x110D, 0x116C, 0x11B2], NFKC: [0xCB1B], NFKD: [0x110D, 0x116C, 0x11B2] }, +{ source: [0xCB1C], NFC: [0xCB1C], NFD: [0x110D, 0x116C, 0x11B3], NFKC: [0xCB1C], NFKD: [0x110D, 0x116C, 0x11B3] }, +{ source: [0xCB1D], NFC: [0xCB1D], NFD: [0x110D, 0x116C, 0x11B4], NFKC: [0xCB1D], NFKD: [0x110D, 0x116C, 0x11B4] }, +{ source: [0xCB1E], NFC: [0xCB1E], NFD: [0x110D, 0x116C, 0x11B5], NFKC: [0xCB1E], NFKD: [0x110D, 0x116C, 0x11B5] }, +{ source: [0xCB1F], NFC: [0xCB1F], NFD: [0x110D, 0x116C, 0x11B6], NFKC: [0xCB1F], NFKD: [0x110D, 0x116C, 0x11B6] }, +{ source: [0xCB20], NFC: [0xCB20], NFD: [0x110D, 0x116C, 0x11B7], NFKC: [0xCB20], NFKD: [0x110D, 0x116C, 0x11B7] }, +{ source: [0xCB21], NFC: [0xCB21], NFD: [0x110D, 0x116C, 0x11B8], NFKC: [0xCB21], NFKD: [0x110D, 0x116C, 0x11B8] }, +{ source: [0xCB22], NFC: [0xCB22], NFD: [0x110D, 0x116C, 0x11B9], NFKC: [0xCB22], NFKD: [0x110D, 0x116C, 0x11B9] }, +{ source: [0xCB23], NFC: [0xCB23], NFD: [0x110D, 0x116C, 0x11BA], NFKC: [0xCB23], NFKD: [0x110D, 0x116C, 0x11BA] }, +{ source: [0xCB24], NFC: [0xCB24], NFD: [0x110D, 0x116C, 0x11BB], NFKC: [0xCB24], NFKD: [0x110D, 0x116C, 0x11BB] }, +{ source: [0xCB25], NFC: [0xCB25], NFD: [0x110D, 0x116C, 0x11BC], NFKC: [0xCB25], NFKD: [0x110D, 0x116C, 0x11BC] }, +{ source: [0xCB26], NFC: [0xCB26], NFD: [0x110D, 0x116C, 0x11BD], NFKC: [0xCB26], NFKD: [0x110D, 0x116C, 0x11BD] }, +{ source: [0xCB27], NFC: [0xCB27], NFD: [0x110D, 0x116C, 0x11BE], NFKC: [0xCB27], NFKD: [0x110D, 0x116C, 0x11BE] }, +{ source: [0xCB28], NFC: [0xCB28], NFD: [0x110D, 0x116C, 0x11BF], NFKC: [0xCB28], NFKD: [0x110D, 0x116C, 0x11BF] }, +{ source: [0xCB29], NFC: [0xCB29], NFD: [0x110D, 0x116C, 0x11C0], NFKC: [0xCB29], NFKD: [0x110D, 0x116C, 0x11C0] }, +{ source: [0xCB2A], NFC: [0xCB2A], NFD: [0x110D, 0x116C, 0x11C1], NFKC: [0xCB2A], NFKD: [0x110D, 0x116C, 0x11C1] }, +{ source: [0xCB2B], NFC: [0xCB2B], NFD: [0x110D, 0x116C, 0x11C2], NFKC: [0xCB2B], NFKD: [0x110D, 0x116C, 0x11C2] }, +{ source: [0xCB2C], NFC: [0xCB2C], NFD: [0x110D, 0x116D], NFKC: [0xCB2C], NFKD: [0x110D, 0x116D] }, +{ source: [0xCB2D], NFC: [0xCB2D], NFD: [0x110D, 0x116D, 0x11A8], NFKC: [0xCB2D], NFKD: [0x110D, 0x116D, 0x11A8] }, +{ source: [0xCB2E], NFC: [0xCB2E], NFD: [0x110D, 0x116D, 0x11A9], NFKC: [0xCB2E], NFKD: [0x110D, 0x116D, 0x11A9] }, +{ source: [0xCB2F], NFC: [0xCB2F], NFD: [0x110D, 0x116D, 0x11AA], NFKC: [0xCB2F], NFKD: [0x110D, 0x116D, 0x11AA] }, +{ source: [0xCB30], NFC: [0xCB30], NFD: [0x110D, 0x116D, 0x11AB], NFKC: [0xCB30], NFKD: [0x110D, 0x116D, 0x11AB] }, +{ source: [0xCB31], NFC: [0xCB31], NFD: [0x110D, 0x116D, 0x11AC], NFKC: [0xCB31], NFKD: [0x110D, 0x116D, 0x11AC] }, +{ source: [0xCB32], NFC: [0xCB32], NFD: [0x110D, 0x116D, 0x11AD], NFKC: [0xCB32], NFKD: [0x110D, 0x116D, 0x11AD] }, +{ source: [0xCB33], NFC: [0xCB33], NFD: [0x110D, 0x116D, 0x11AE], NFKC: [0xCB33], NFKD: [0x110D, 0x116D, 0x11AE] }, +{ source: [0xCB34], NFC: [0xCB34], NFD: [0x110D, 0x116D, 0x11AF], NFKC: [0xCB34], NFKD: [0x110D, 0x116D, 0x11AF] }, +{ source: [0xCB35], NFC: [0xCB35], NFD: [0x110D, 0x116D, 0x11B0], NFKC: [0xCB35], NFKD: [0x110D, 0x116D, 0x11B0] }, +{ source: [0xCB36], NFC: [0xCB36], NFD: [0x110D, 0x116D, 0x11B1], NFKC: [0xCB36], NFKD: [0x110D, 0x116D, 0x11B1] }, +{ source: [0xCB37], NFC: [0xCB37], NFD: [0x110D, 0x116D, 0x11B2], NFKC: [0xCB37], NFKD: [0x110D, 0x116D, 0x11B2] }, +{ source: [0xCB38], NFC: [0xCB38], NFD: [0x110D, 0x116D, 0x11B3], NFKC: [0xCB38], NFKD: [0x110D, 0x116D, 0x11B3] }, +{ source: [0xCB39], NFC: [0xCB39], NFD: [0x110D, 0x116D, 0x11B4], NFKC: [0xCB39], NFKD: [0x110D, 0x116D, 0x11B4] }, +{ source: [0xCB3A], NFC: [0xCB3A], NFD: [0x110D, 0x116D, 0x11B5], NFKC: [0xCB3A], NFKD: [0x110D, 0x116D, 0x11B5] }, +{ source: [0xCB3B], NFC: [0xCB3B], NFD: [0x110D, 0x116D, 0x11B6], NFKC: [0xCB3B], NFKD: [0x110D, 0x116D, 0x11B6] }, +{ source: [0xCB3C], NFC: [0xCB3C], NFD: [0x110D, 0x116D, 0x11B7], NFKC: [0xCB3C], NFKD: [0x110D, 0x116D, 0x11B7] }, +{ source: [0xCB3D], NFC: [0xCB3D], NFD: [0x110D, 0x116D, 0x11B8], NFKC: [0xCB3D], NFKD: [0x110D, 0x116D, 0x11B8] }, +{ source: [0xCB3E], NFC: [0xCB3E], NFD: [0x110D, 0x116D, 0x11B9], NFKC: [0xCB3E], NFKD: [0x110D, 0x116D, 0x11B9] }, +{ source: [0xCB3F], NFC: [0xCB3F], NFD: [0x110D, 0x116D, 0x11BA], NFKC: [0xCB3F], NFKD: [0x110D, 0x116D, 0x11BA] }, +{ source: [0xCB40], NFC: [0xCB40], NFD: [0x110D, 0x116D, 0x11BB], NFKC: [0xCB40], NFKD: [0x110D, 0x116D, 0x11BB] }, +{ source: [0xCB41], NFC: [0xCB41], NFD: [0x110D, 0x116D, 0x11BC], NFKC: [0xCB41], NFKD: [0x110D, 0x116D, 0x11BC] }, +{ source: [0xCB42], NFC: [0xCB42], NFD: [0x110D, 0x116D, 0x11BD], NFKC: [0xCB42], NFKD: [0x110D, 0x116D, 0x11BD] }, +{ source: [0xCB43], NFC: [0xCB43], NFD: [0x110D, 0x116D, 0x11BE], NFKC: [0xCB43], NFKD: [0x110D, 0x116D, 0x11BE] }, +{ source: [0xCB44], NFC: [0xCB44], NFD: [0x110D, 0x116D, 0x11BF], NFKC: [0xCB44], NFKD: [0x110D, 0x116D, 0x11BF] }, +{ source: [0xCB45], NFC: [0xCB45], NFD: [0x110D, 0x116D, 0x11C0], NFKC: [0xCB45], NFKD: [0x110D, 0x116D, 0x11C0] }, +{ source: [0xCB46], NFC: [0xCB46], NFD: [0x110D, 0x116D, 0x11C1], NFKC: [0xCB46], NFKD: [0x110D, 0x116D, 0x11C1] }, +{ source: [0xCB47], NFC: [0xCB47], NFD: [0x110D, 0x116D, 0x11C2], NFKC: [0xCB47], NFKD: [0x110D, 0x116D, 0x11C2] }, +{ source: [0xCB48], NFC: [0xCB48], NFD: [0x110D, 0x116E], NFKC: [0xCB48], NFKD: [0x110D, 0x116E] }, +{ source: [0xCB49], NFC: [0xCB49], NFD: [0x110D, 0x116E, 0x11A8], NFKC: [0xCB49], NFKD: [0x110D, 0x116E, 0x11A8] }, +{ source: [0xCB4A], NFC: [0xCB4A], NFD: [0x110D, 0x116E, 0x11A9], NFKC: [0xCB4A], NFKD: [0x110D, 0x116E, 0x11A9] }, +{ source: [0xCB4B], NFC: [0xCB4B], NFD: [0x110D, 0x116E, 0x11AA], NFKC: [0xCB4B], NFKD: [0x110D, 0x116E, 0x11AA] }, +{ source: [0xCB4C], NFC: [0xCB4C], NFD: [0x110D, 0x116E, 0x11AB], NFKC: [0xCB4C], NFKD: [0x110D, 0x116E, 0x11AB] }, +{ source: [0xCB4D], NFC: [0xCB4D], NFD: [0x110D, 0x116E, 0x11AC], NFKC: [0xCB4D], NFKD: [0x110D, 0x116E, 0x11AC] }, +{ source: [0xCB4E], NFC: [0xCB4E], NFD: [0x110D, 0x116E, 0x11AD], NFKC: [0xCB4E], NFKD: [0x110D, 0x116E, 0x11AD] }, +{ source: [0xCB4F], NFC: [0xCB4F], NFD: [0x110D, 0x116E, 0x11AE], NFKC: [0xCB4F], NFKD: [0x110D, 0x116E, 0x11AE] }, +{ source: [0xCB50], NFC: [0xCB50], NFD: [0x110D, 0x116E, 0x11AF], NFKC: [0xCB50], NFKD: [0x110D, 0x116E, 0x11AF] }, +{ source: [0xCB51], NFC: [0xCB51], NFD: [0x110D, 0x116E, 0x11B0], NFKC: [0xCB51], NFKD: [0x110D, 0x116E, 0x11B0] }, +{ source: [0xCB52], NFC: [0xCB52], NFD: [0x110D, 0x116E, 0x11B1], NFKC: [0xCB52], NFKD: [0x110D, 0x116E, 0x11B1] }, +{ source: [0xCB53], NFC: [0xCB53], NFD: [0x110D, 0x116E, 0x11B2], NFKC: [0xCB53], NFKD: [0x110D, 0x116E, 0x11B2] }, +{ source: [0xCB54], NFC: [0xCB54], NFD: [0x110D, 0x116E, 0x11B3], NFKC: [0xCB54], NFKD: [0x110D, 0x116E, 0x11B3] }, +{ source: [0xCB55], NFC: [0xCB55], NFD: [0x110D, 0x116E, 0x11B4], NFKC: [0xCB55], NFKD: [0x110D, 0x116E, 0x11B4] }, +{ source: [0xCB56], NFC: [0xCB56], NFD: [0x110D, 0x116E, 0x11B5], NFKC: [0xCB56], NFKD: [0x110D, 0x116E, 0x11B5] }, +{ source: [0xCB57], NFC: [0xCB57], NFD: [0x110D, 0x116E, 0x11B6], NFKC: [0xCB57], NFKD: [0x110D, 0x116E, 0x11B6] }, +{ source: [0xCB58], NFC: [0xCB58], NFD: [0x110D, 0x116E, 0x11B7], NFKC: [0xCB58], NFKD: [0x110D, 0x116E, 0x11B7] }, +{ source: [0xCB59], NFC: [0xCB59], NFD: [0x110D, 0x116E, 0x11B8], NFKC: [0xCB59], NFKD: [0x110D, 0x116E, 0x11B8] }, +{ source: [0xCB5A], NFC: [0xCB5A], NFD: [0x110D, 0x116E, 0x11B9], NFKC: [0xCB5A], NFKD: [0x110D, 0x116E, 0x11B9] }, +{ source: [0xCB5B], NFC: [0xCB5B], NFD: [0x110D, 0x116E, 0x11BA], NFKC: [0xCB5B], NFKD: [0x110D, 0x116E, 0x11BA] }, +{ source: [0xCB5C], NFC: [0xCB5C], NFD: [0x110D, 0x116E, 0x11BB], NFKC: [0xCB5C], NFKD: [0x110D, 0x116E, 0x11BB] }, +{ source: [0xCB5D], NFC: [0xCB5D], NFD: [0x110D, 0x116E, 0x11BC], NFKC: [0xCB5D], NFKD: [0x110D, 0x116E, 0x11BC] }, +{ source: [0xCB5E], NFC: [0xCB5E], NFD: [0x110D, 0x116E, 0x11BD], NFKC: [0xCB5E], NFKD: [0x110D, 0x116E, 0x11BD] }, +{ source: [0xCB5F], NFC: [0xCB5F], NFD: [0x110D, 0x116E, 0x11BE], NFKC: [0xCB5F], NFKD: [0x110D, 0x116E, 0x11BE] }, +{ source: [0xCB60], NFC: [0xCB60], NFD: [0x110D, 0x116E, 0x11BF], NFKC: [0xCB60], NFKD: [0x110D, 0x116E, 0x11BF] }, +{ source: [0xCB61], NFC: [0xCB61], NFD: [0x110D, 0x116E, 0x11C0], NFKC: [0xCB61], NFKD: [0x110D, 0x116E, 0x11C0] }, +{ source: [0xCB62], NFC: [0xCB62], NFD: [0x110D, 0x116E, 0x11C1], NFKC: [0xCB62], NFKD: [0x110D, 0x116E, 0x11C1] }, +{ source: [0xCB63], NFC: [0xCB63], NFD: [0x110D, 0x116E, 0x11C2], NFKC: [0xCB63], NFKD: [0x110D, 0x116E, 0x11C2] }, +{ source: [0xCB64], NFC: [0xCB64], NFD: [0x110D, 0x116F], NFKC: [0xCB64], NFKD: [0x110D, 0x116F] }, +{ source: [0xCB65], NFC: [0xCB65], NFD: [0x110D, 0x116F, 0x11A8], NFKC: [0xCB65], NFKD: [0x110D, 0x116F, 0x11A8] }, +{ source: [0xCB66], NFC: [0xCB66], NFD: [0x110D, 0x116F, 0x11A9], NFKC: [0xCB66], NFKD: [0x110D, 0x116F, 0x11A9] }, +{ source: [0xCB67], NFC: [0xCB67], NFD: [0x110D, 0x116F, 0x11AA], NFKC: [0xCB67], NFKD: [0x110D, 0x116F, 0x11AA] }, +{ source: [0xCB68], NFC: [0xCB68], NFD: [0x110D, 0x116F, 0x11AB], NFKC: [0xCB68], NFKD: [0x110D, 0x116F, 0x11AB] }, +{ source: [0xCB69], NFC: [0xCB69], NFD: [0x110D, 0x116F, 0x11AC], NFKC: [0xCB69], NFKD: [0x110D, 0x116F, 0x11AC] }, +{ source: [0xCB6A], NFC: [0xCB6A], NFD: [0x110D, 0x116F, 0x11AD], NFKC: [0xCB6A], NFKD: [0x110D, 0x116F, 0x11AD] }, +{ source: [0xCB6B], NFC: [0xCB6B], NFD: [0x110D, 0x116F, 0x11AE], NFKC: [0xCB6B], NFKD: [0x110D, 0x116F, 0x11AE] }, +{ source: [0xCB6C], NFC: [0xCB6C], NFD: [0x110D, 0x116F, 0x11AF], NFKC: [0xCB6C], NFKD: [0x110D, 0x116F, 0x11AF] }, +{ source: [0xCB6D], NFC: [0xCB6D], NFD: [0x110D, 0x116F, 0x11B0], NFKC: [0xCB6D], NFKD: [0x110D, 0x116F, 0x11B0] }, +{ source: [0xCB6E], NFC: [0xCB6E], NFD: [0x110D, 0x116F, 0x11B1], NFKC: [0xCB6E], NFKD: [0x110D, 0x116F, 0x11B1] }, +{ source: [0xCB6F], NFC: [0xCB6F], NFD: [0x110D, 0x116F, 0x11B2], NFKC: [0xCB6F], NFKD: [0x110D, 0x116F, 0x11B2] }, +{ source: [0xCB70], NFC: [0xCB70], NFD: [0x110D, 0x116F, 0x11B3], NFKC: [0xCB70], NFKD: [0x110D, 0x116F, 0x11B3] }, +{ source: [0xCB71], NFC: [0xCB71], NFD: [0x110D, 0x116F, 0x11B4], NFKC: [0xCB71], NFKD: [0x110D, 0x116F, 0x11B4] }, +{ source: [0xCB72], NFC: [0xCB72], NFD: [0x110D, 0x116F, 0x11B5], NFKC: [0xCB72], NFKD: [0x110D, 0x116F, 0x11B5] }, +{ source: [0xCB73], NFC: [0xCB73], NFD: [0x110D, 0x116F, 0x11B6], NFKC: [0xCB73], NFKD: [0x110D, 0x116F, 0x11B6] }, +{ source: [0xCB74], NFC: [0xCB74], NFD: [0x110D, 0x116F, 0x11B7], NFKC: [0xCB74], NFKD: [0x110D, 0x116F, 0x11B7] }, +{ source: [0xCB75], NFC: [0xCB75], NFD: [0x110D, 0x116F, 0x11B8], NFKC: [0xCB75], NFKD: [0x110D, 0x116F, 0x11B8] }, +{ source: [0xCB76], NFC: [0xCB76], NFD: [0x110D, 0x116F, 0x11B9], NFKC: [0xCB76], NFKD: [0x110D, 0x116F, 0x11B9] }, +{ source: [0xCB77], NFC: [0xCB77], NFD: [0x110D, 0x116F, 0x11BA], NFKC: [0xCB77], NFKD: [0x110D, 0x116F, 0x11BA] }, +{ source: [0xCB78], NFC: [0xCB78], NFD: [0x110D, 0x116F, 0x11BB], NFKC: [0xCB78], NFKD: [0x110D, 0x116F, 0x11BB] }, +{ source: [0xCB79], NFC: [0xCB79], NFD: [0x110D, 0x116F, 0x11BC], NFKC: [0xCB79], NFKD: [0x110D, 0x116F, 0x11BC] }, +{ source: [0xCB7A], NFC: [0xCB7A], NFD: [0x110D, 0x116F, 0x11BD], NFKC: [0xCB7A], NFKD: [0x110D, 0x116F, 0x11BD] }, +{ source: [0xCB7B], NFC: [0xCB7B], NFD: [0x110D, 0x116F, 0x11BE], NFKC: [0xCB7B], NFKD: [0x110D, 0x116F, 0x11BE] }, +{ source: [0xCB7C], NFC: [0xCB7C], NFD: [0x110D, 0x116F, 0x11BF], NFKC: [0xCB7C], NFKD: [0x110D, 0x116F, 0x11BF] }, +{ source: [0xCB7D], NFC: [0xCB7D], NFD: [0x110D, 0x116F, 0x11C0], NFKC: [0xCB7D], NFKD: [0x110D, 0x116F, 0x11C0] }, +{ source: [0xCB7E], NFC: [0xCB7E], NFD: [0x110D, 0x116F, 0x11C1], NFKC: [0xCB7E], NFKD: [0x110D, 0x116F, 0x11C1] }, +{ source: [0xCB7F], NFC: [0xCB7F], NFD: [0x110D, 0x116F, 0x11C2], NFKC: [0xCB7F], NFKD: [0x110D, 0x116F, 0x11C2] }, +{ source: [0xCB80], NFC: [0xCB80], NFD: [0x110D, 0x1170], NFKC: [0xCB80], NFKD: [0x110D, 0x1170] }, +{ source: [0xCB81], NFC: [0xCB81], NFD: [0x110D, 0x1170, 0x11A8], NFKC: [0xCB81], NFKD: [0x110D, 0x1170, 0x11A8] }, +{ source: [0xCB82], NFC: [0xCB82], NFD: [0x110D, 0x1170, 0x11A9], NFKC: [0xCB82], NFKD: [0x110D, 0x1170, 0x11A9] }, +{ source: [0xCB83], NFC: [0xCB83], NFD: [0x110D, 0x1170, 0x11AA], NFKC: [0xCB83], NFKD: [0x110D, 0x1170, 0x11AA] }, +{ source: [0xCB84], NFC: [0xCB84], NFD: [0x110D, 0x1170, 0x11AB], NFKC: [0xCB84], NFKD: [0x110D, 0x1170, 0x11AB] }, +{ source: [0xCB85], NFC: [0xCB85], NFD: [0x110D, 0x1170, 0x11AC], NFKC: [0xCB85], NFKD: [0x110D, 0x1170, 0x11AC] }, +{ source: [0xCB86], NFC: [0xCB86], NFD: [0x110D, 0x1170, 0x11AD], NFKC: [0xCB86], NFKD: [0x110D, 0x1170, 0x11AD] }, +{ source: [0xCB87], NFC: [0xCB87], NFD: [0x110D, 0x1170, 0x11AE], NFKC: [0xCB87], NFKD: [0x110D, 0x1170, 0x11AE] }, +{ source: [0xCB88], NFC: [0xCB88], NFD: [0x110D, 0x1170, 0x11AF], NFKC: [0xCB88], NFKD: [0x110D, 0x1170, 0x11AF] }, +{ source: [0xCB89], NFC: [0xCB89], NFD: [0x110D, 0x1170, 0x11B0], NFKC: [0xCB89], NFKD: [0x110D, 0x1170, 0x11B0] }, +{ source: [0xCB8A], NFC: [0xCB8A], NFD: [0x110D, 0x1170, 0x11B1], NFKC: [0xCB8A], NFKD: [0x110D, 0x1170, 0x11B1] }, +{ source: [0xCB8B], NFC: [0xCB8B], NFD: [0x110D, 0x1170, 0x11B2], NFKC: [0xCB8B], NFKD: [0x110D, 0x1170, 0x11B2] }, +{ source: [0xCB8C], NFC: [0xCB8C], NFD: [0x110D, 0x1170, 0x11B3], NFKC: [0xCB8C], NFKD: [0x110D, 0x1170, 0x11B3] }, +{ source: [0xCB8D], NFC: [0xCB8D], NFD: [0x110D, 0x1170, 0x11B4], NFKC: [0xCB8D], NFKD: [0x110D, 0x1170, 0x11B4] }, +{ source: [0xCB8E], NFC: [0xCB8E], NFD: [0x110D, 0x1170, 0x11B5], NFKC: [0xCB8E], NFKD: [0x110D, 0x1170, 0x11B5] }, +{ source: [0xCB8F], NFC: [0xCB8F], NFD: [0x110D, 0x1170, 0x11B6], NFKC: [0xCB8F], NFKD: [0x110D, 0x1170, 0x11B6] }, +{ source: [0xCB90], NFC: [0xCB90], NFD: [0x110D, 0x1170, 0x11B7], NFKC: [0xCB90], NFKD: [0x110D, 0x1170, 0x11B7] }, +{ source: [0xCB91], NFC: [0xCB91], NFD: [0x110D, 0x1170, 0x11B8], NFKC: [0xCB91], NFKD: [0x110D, 0x1170, 0x11B8] }, +{ source: [0xCB92], NFC: [0xCB92], NFD: [0x110D, 0x1170, 0x11B9], NFKC: [0xCB92], NFKD: [0x110D, 0x1170, 0x11B9] }, +{ source: [0xCB93], NFC: [0xCB93], NFD: [0x110D, 0x1170, 0x11BA], NFKC: [0xCB93], NFKD: [0x110D, 0x1170, 0x11BA] }, +{ source: [0xCB94], NFC: [0xCB94], NFD: [0x110D, 0x1170, 0x11BB], NFKC: [0xCB94], NFKD: [0x110D, 0x1170, 0x11BB] }, +{ source: [0xCB95], NFC: [0xCB95], NFD: [0x110D, 0x1170, 0x11BC], NFKC: [0xCB95], NFKD: [0x110D, 0x1170, 0x11BC] }, +{ source: [0xCB96], NFC: [0xCB96], NFD: [0x110D, 0x1170, 0x11BD], NFKC: [0xCB96], NFKD: [0x110D, 0x1170, 0x11BD] }, +{ source: [0xCB97], NFC: [0xCB97], NFD: [0x110D, 0x1170, 0x11BE], NFKC: [0xCB97], NFKD: [0x110D, 0x1170, 0x11BE] }, +{ source: [0xCB98], NFC: [0xCB98], NFD: [0x110D, 0x1170, 0x11BF], NFKC: [0xCB98], NFKD: [0x110D, 0x1170, 0x11BF] }, +{ source: [0xCB99], NFC: [0xCB99], NFD: [0x110D, 0x1170, 0x11C0], NFKC: [0xCB99], NFKD: [0x110D, 0x1170, 0x11C0] }, +{ source: [0xCB9A], NFC: [0xCB9A], NFD: [0x110D, 0x1170, 0x11C1], NFKC: [0xCB9A], NFKD: [0x110D, 0x1170, 0x11C1] }, +{ source: [0xCB9B], NFC: [0xCB9B], NFD: [0x110D, 0x1170, 0x11C2], NFKC: [0xCB9B], NFKD: [0x110D, 0x1170, 0x11C2] }, +{ source: [0xCB9C], NFC: [0xCB9C], NFD: [0x110D, 0x1171], NFKC: [0xCB9C], NFKD: [0x110D, 0x1171] }, +{ source: [0xCB9D], NFC: [0xCB9D], NFD: [0x110D, 0x1171, 0x11A8], NFKC: [0xCB9D], NFKD: [0x110D, 0x1171, 0x11A8] }, +{ source: [0xCB9E], NFC: [0xCB9E], NFD: [0x110D, 0x1171, 0x11A9], NFKC: [0xCB9E], NFKD: [0x110D, 0x1171, 0x11A9] }, +{ source: [0xCB9F], NFC: [0xCB9F], NFD: [0x110D, 0x1171, 0x11AA], NFKC: [0xCB9F], NFKD: [0x110D, 0x1171, 0x11AA] }, +{ source: [0xCBA0], NFC: [0xCBA0], NFD: [0x110D, 0x1171, 0x11AB], NFKC: [0xCBA0], NFKD: [0x110D, 0x1171, 0x11AB] }, +{ source: [0xCBA1], NFC: [0xCBA1], NFD: [0x110D, 0x1171, 0x11AC], NFKC: [0xCBA1], NFKD: [0x110D, 0x1171, 0x11AC] }, +{ source: [0xCBA2], NFC: [0xCBA2], NFD: [0x110D, 0x1171, 0x11AD], NFKC: [0xCBA2], NFKD: [0x110D, 0x1171, 0x11AD] }, +{ source: [0xCBA3], NFC: [0xCBA3], NFD: [0x110D, 0x1171, 0x11AE], NFKC: [0xCBA3], NFKD: [0x110D, 0x1171, 0x11AE] }, +{ source: [0xCBA4], NFC: [0xCBA4], NFD: [0x110D, 0x1171, 0x11AF], NFKC: [0xCBA4], NFKD: [0x110D, 0x1171, 0x11AF] }, +{ source: [0xCBA5], NFC: [0xCBA5], NFD: [0x110D, 0x1171, 0x11B0], NFKC: [0xCBA5], NFKD: [0x110D, 0x1171, 0x11B0] }, +{ source: [0xCBA6], NFC: [0xCBA6], NFD: [0x110D, 0x1171, 0x11B1], NFKC: [0xCBA6], NFKD: [0x110D, 0x1171, 0x11B1] }, +{ source: [0xCBA7], NFC: [0xCBA7], NFD: [0x110D, 0x1171, 0x11B2], NFKC: [0xCBA7], NFKD: [0x110D, 0x1171, 0x11B2] }, +{ source: [0xCBA8], NFC: [0xCBA8], NFD: [0x110D, 0x1171, 0x11B3], NFKC: [0xCBA8], NFKD: [0x110D, 0x1171, 0x11B3] }, +{ source: [0xCBA9], NFC: [0xCBA9], NFD: [0x110D, 0x1171, 0x11B4], NFKC: [0xCBA9], NFKD: [0x110D, 0x1171, 0x11B4] }, +{ source: [0xCBAA], NFC: [0xCBAA], NFD: [0x110D, 0x1171, 0x11B5], NFKC: [0xCBAA], NFKD: [0x110D, 0x1171, 0x11B5] }, +{ source: [0xCBAB], NFC: [0xCBAB], NFD: [0x110D, 0x1171, 0x11B6], NFKC: [0xCBAB], NFKD: [0x110D, 0x1171, 0x11B6] }, +{ source: [0xCBAC], NFC: [0xCBAC], NFD: [0x110D, 0x1171, 0x11B7], NFKC: [0xCBAC], NFKD: [0x110D, 0x1171, 0x11B7] }, +{ source: [0xCBAD], NFC: [0xCBAD], NFD: [0x110D, 0x1171, 0x11B8], NFKC: [0xCBAD], NFKD: [0x110D, 0x1171, 0x11B8] }, +{ source: [0xCBAE], NFC: [0xCBAE], NFD: [0x110D, 0x1171, 0x11B9], NFKC: [0xCBAE], NFKD: [0x110D, 0x1171, 0x11B9] }, +{ source: [0xCBAF], NFC: [0xCBAF], NFD: [0x110D, 0x1171, 0x11BA], NFKC: [0xCBAF], NFKD: [0x110D, 0x1171, 0x11BA] }, +{ source: [0xCBB0], NFC: [0xCBB0], NFD: [0x110D, 0x1171, 0x11BB], NFKC: [0xCBB0], NFKD: [0x110D, 0x1171, 0x11BB] }, +{ source: [0xCBB1], NFC: [0xCBB1], NFD: [0x110D, 0x1171, 0x11BC], NFKC: [0xCBB1], NFKD: [0x110D, 0x1171, 0x11BC] }, +{ source: [0xCBB2], NFC: [0xCBB2], NFD: [0x110D, 0x1171, 0x11BD], NFKC: [0xCBB2], NFKD: [0x110D, 0x1171, 0x11BD] }, +{ source: [0xCBB3], NFC: [0xCBB3], NFD: [0x110D, 0x1171, 0x11BE], NFKC: [0xCBB3], NFKD: [0x110D, 0x1171, 0x11BE] }, +{ source: [0xCBB4], NFC: [0xCBB4], NFD: [0x110D, 0x1171, 0x11BF], NFKC: [0xCBB4], NFKD: [0x110D, 0x1171, 0x11BF] }, +{ source: [0xCBB5], NFC: [0xCBB5], NFD: [0x110D, 0x1171, 0x11C0], NFKC: [0xCBB5], NFKD: [0x110D, 0x1171, 0x11C0] }, +{ source: [0xCBB6], NFC: [0xCBB6], NFD: [0x110D, 0x1171, 0x11C1], NFKC: [0xCBB6], NFKD: [0x110D, 0x1171, 0x11C1] }, +{ source: [0xCBB7], NFC: [0xCBB7], NFD: [0x110D, 0x1171, 0x11C2], NFKC: [0xCBB7], NFKD: [0x110D, 0x1171, 0x11C2] }, +{ source: [0xCBB8], NFC: [0xCBB8], NFD: [0x110D, 0x1172], NFKC: [0xCBB8], NFKD: [0x110D, 0x1172] }, +{ source: [0xCBB9], NFC: [0xCBB9], NFD: [0x110D, 0x1172, 0x11A8], NFKC: [0xCBB9], NFKD: [0x110D, 0x1172, 0x11A8] }, +{ source: [0xCBBA], NFC: [0xCBBA], NFD: [0x110D, 0x1172, 0x11A9], NFKC: [0xCBBA], NFKD: [0x110D, 0x1172, 0x11A9] }, +{ source: [0xCBBB], NFC: [0xCBBB], NFD: [0x110D, 0x1172, 0x11AA], NFKC: [0xCBBB], NFKD: [0x110D, 0x1172, 0x11AA] }, +{ source: [0xCBBC], NFC: [0xCBBC], NFD: [0x110D, 0x1172, 0x11AB], NFKC: [0xCBBC], NFKD: [0x110D, 0x1172, 0x11AB] }, +{ source: [0xCBBD], NFC: [0xCBBD], NFD: [0x110D, 0x1172, 0x11AC], NFKC: [0xCBBD], NFKD: [0x110D, 0x1172, 0x11AC] }, +{ source: [0xCBBE], NFC: [0xCBBE], NFD: [0x110D, 0x1172, 0x11AD], NFKC: [0xCBBE], NFKD: [0x110D, 0x1172, 0x11AD] }, +{ source: [0xCBBF], NFC: [0xCBBF], NFD: [0x110D, 0x1172, 0x11AE], NFKC: [0xCBBF], NFKD: [0x110D, 0x1172, 0x11AE] }, +{ source: [0xCBC0], NFC: [0xCBC0], NFD: [0x110D, 0x1172, 0x11AF], NFKC: [0xCBC0], NFKD: [0x110D, 0x1172, 0x11AF] }, +{ source: [0xCBC1], NFC: [0xCBC1], NFD: [0x110D, 0x1172, 0x11B0], NFKC: [0xCBC1], NFKD: [0x110D, 0x1172, 0x11B0] }, +{ source: [0xCBC2], NFC: [0xCBC2], NFD: [0x110D, 0x1172, 0x11B1], NFKC: [0xCBC2], NFKD: [0x110D, 0x1172, 0x11B1] }, +{ source: [0xCBC3], NFC: [0xCBC3], NFD: [0x110D, 0x1172, 0x11B2], NFKC: [0xCBC3], NFKD: [0x110D, 0x1172, 0x11B2] }, +{ source: [0xCBC4], NFC: [0xCBC4], NFD: [0x110D, 0x1172, 0x11B3], NFKC: [0xCBC4], NFKD: [0x110D, 0x1172, 0x11B3] }, +{ source: [0xCBC5], NFC: [0xCBC5], NFD: [0x110D, 0x1172, 0x11B4], NFKC: [0xCBC5], NFKD: [0x110D, 0x1172, 0x11B4] }, +{ source: [0xCBC6], NFC: [0xCBC6], NFD: [0x110D, 0x1172, 0x11B5], NFKC: [0xCBC6], NFKD: [0x110D, 0x1172, 0x11B5] }, +{ source: [0xCBC7], NFC: [0xCBC7], NFD: [0x110D, 0x1172, 0x11B6], NFKC: [0xCBC7], NFKD: [0x110D, 0x1172, 0x11B6] }, +{ source: [0xCBC8], NFC: [0xCBC8], NFD: [0x110D, 0x1172, 0x11B7], NFKC: [0xCBC8], NFKD: [0x110D, 0x1172, 0x11B7] }, +{ source: [0xCBC9], NFC: [0xCBC9], NFD: [0x110D, 0x1172, 0x11B8], NFKC: [0xCBC9], NFKD: [0x110D, 0x1172, 0x11B8] }, +{ source: [0xCBCA], NFC: [0xCBCA], NFD: [0x110D, 0x1172, 0x11B9], NFKC: [0xCBCA], NFKD: [0x110D, 0x1172, 0x11B9] }, +{ source: [0xCBCB], NFC: [0xCBCB], NFD: [0x110D, 0x1172, 0x11BA], NFKC: [0xCBCB], NFKD: [0x110D, 0x1172, 0x11BA] }, +{ source: [0xCBCC], NFC: [0xCBCC], NFD: [0x110D, 0x1172, 0x11BB], NFKC: [0xCBCC], NFKD: [0x110D, 0x1172, 0x11BB] }, +{ source: [0xCBCD], NFC: [0xCBCD], NFD: [0x110D, 0x1172, 0x11BC], NFKC: [0xCBCD], NFKD: [0x110D, 0x1172, 0x11BC] }, +{ source: [0xCBCE], NFC: [0xCBCE], NFD: [0x110D, 0x1172, 0x11BD], NFKC: [0xCBCE], NFKD: [0x110D, 0x1172, 0x11BD] }, +{ source: [0xCBCF], NFC: [0xCBCF], NFD: [0x110D, 0x1172, 0x11BE], NFKC: [0xCBCF], NFKD: [0x110D, 0x1172, 0x11BE] }, +{ source: [0xCBD0], NFC: [0xCBD0], NFD: [0x110D, 0x1172, 0x11BF], NFKC: [0xCBD0], NFKD: [0x110D, 0x1172, 0x11BF] }, +{ source: [0xCBD1], NFC: [0xCBD1], NFD: [0x110D, 0x1172, 0x11C0], NFKC: [0xCBD1], NFKD: [0x110D, 0x1172, 0x11C0] }, +{ source: [0xCBD2], NFC: [0xCBD2], NFD: [0x110D, 0x1172, 0x11C1], NFKC: [0xCBD2], NFKD: [0x110D, 0x1172, 0x11C1] }, +{ source: [0xCBD3], NFC: [0xCBD3], NFD: [0x110D, 0x1172, 0x11C2], NFKC: [0xCBD3], NFKD: [0x110D, 0x1172, 0x11C2] }, +{ source: [0xCBD4], NFC: [0xCBD4], NFD: [0x110D, 0x1173], NFKC: [0xCBD4], NFKD: [0x110D, 0x1173] }, +{ source: [0xCBD5], NFC: [0xCBD5], NFD: [0x110D, 0x1173, 0x11A8], NFKC: [0xCBD5], NFKD: [0x110D, 0x1173, 0x11A8] }, +{ source: [0xCBD6], NFC: [0xCBD6], NFD: [0x110D, 0x1173, 0x11A9], NFKC: [0xCBD6], NFKD: [0x110D, 0x1173, 0x11A9] }, +{ source: [0xCBD7], NFC: [0xCBD7], NFD: [0x110D, 0x1173, 0x11AA], NFKC: [0xCBD7], NFKD: [0x110D, 0x1173, 0x11AA] }, +{ source: [0xCBD8], NFC: [0xCBD8], NFD: [0x110D, 0x1173, 0x11AB], NFKC: [0xCBD8], NFKD: [0x110D, 0x1173, 0x11AB] }, +{ source: [0xCBD9], NFC: [0xCBD9], NFD: [0x110D, 0x1173, 0x11AC], NFKC: [0xCBD9], NFKD: [0x110D, 0x1173, 0x11AC] }, +{ source: [0xCBDA], NFC: [0xCBDA], NFD: [0x110D, 0x1173, 0x11AD], NFKC: [0xCBDA], NFKD: [0x110D, 0x1173, 0x11AD] }, +{ source: [0xCBDB], NFC: [0xCBDB], NFD: [0x110D, 0x1173, 0x11AE], NFKC: [0xCBDB], NFKD: [0x110D, 0x1173, 0x11AE] }, +{ source: [0xCBDC], NFC: [0xCBDC], NFD: [0x110D, 0x1173, 0x11AF], NFKC: [0xCBDC], NFKD: [0x110D, 0x1173, 0x11AF] }, +{ source: [0xCBDD], NFC: [0xCBDD], NFD: [0x110D, 0x1173, 0x11B0], NFKC: [0xCBDD], NFKD: [0x110D, 0x1173, 0x11B0] }, +{ source: [0xCBDE], NFC: [0xCBDE], NFD: [0x110D, 0x1173, 0x11B1], NFKC: [0xCBDE], NFKD: [0x110D, 0x1173, 0x11B1] }, +{ source: [0xCBDF], NFC: [0xCBDF], NFD: [0x110D, 0x1173, 0x11B2], NFKC: [0xCBDF], NFKD: [0x110D, 0x1173, 0x11B2] }, +{ source: [0xCBE0], NFC: [0xCBE0], NFD: [0x110D, 0x1173, 0x11B3], NFKC: [0xCBE0], NFKD: [0x110D, 0x1173, 0x11B3] }, +{ source: [0xCBE1], NFC: [0xCBE1], NFD: [0x110D, 0x1173, 0x11B4], NFKC: [0xCBE1], NFKD: [0x110D, 0x1173, 0x11B4] }, +{ source: [0xCBE2], NFC: [0xCBE2], NFD: [0x110D, 0x1173, 0x11B5], NFKC: [0xCBE2], NFKD: [0x110D, 0x1173, 0x11B5] }, +{ source: [0xCBE3], NFC: [0xCBE3], NFD: [0x110D, 0x1173, 0x11B6], NFKC: [0xCBE3], NFKD: [0x110D, 0x1173, 0x11B6] }, +{ source: [0xCBE4], NFC: [0xCBE4], NFD: [0x110D, 0x1173, 0x11B7], NFKC: [0xCBE4], NFKD: [0x110D, 0x1173, 0x11B7] }, +{ source: [0xCBE5], NFC: [0xCBE5], NFD: [0x110D, 0x1173, 0x11B8], NFKC: [0xCBE5], NFKD: [0x110D, 0x1173, 0x11B8] }, +{ source: [0xCBE6], NFC: [0xCBE6], NFD: [0x110D, 0x1173, 0x11B9], NFKC: [0xCBE6], NFKD: [0x110D, 0x1173, 0x11B9] }, +{ source: [0xCBE7], NFC: [0xCBE7], NFD: [0x110D, 0x1173, 0x11BA], NFKC: [0xCBE7], NFKD: [0x110D, 0x1173, 0x11BA] }, +{ source: [0xCBE8], NFC: [0xCBE8], NFD: [0x110D, 0x1173, 0x11BB], NFKC: [0xCBE8], NFKD: [0x110D, 0x1173, 0x11BB] }, +{ source: [0xCBE9], NFC: [0xCBE9], NFD: [0x110D, 0x1173, 0x11BC], NFKC: [0xCBE9], NFKD: [0x110D, 0x1173, 0x11BC] }, +{ source: [0xCBEA], NFC: [0xCBEA], NFD: [0x110D, 0x1173, 0x11BD], NFKC: [0xCBEA], NFKD: [0x110D, 0x1173, 0x11BD] }, +{ source: [0xCBEB], NFC: [0xCBEB], NFD: [0x110D, 0x1173, 0x11BE], NFKC: [0xCBEB], NFKD: [0x110D, 0x1173, 0x11BE] }, +{ source: [0xCBEC], NFC: [0xCBEC], NFD: [0x110D, 0x1173, 0x11BF], NFKC: [0xCBEC], NFKD: [0x110D, 0x1173, 0x11BF] }, +{ source: [0xCBED], NFC: [0xCBED], NFD: [0x110D, 0x1173, 0x11C0], NFKC: [0xCBED], NFKD: [0x110D, 0x1173, 0x11C0] }, +{ source: [0xCBEE], NFC: [0xCBEE], NFD: [0x110D, 0x1173, 0x11C1], NFKC: [0xCBEE], NFKD: [0x110D, 0x1173, 0x11C1] }, +{ source: [0xCBEF], NFC: [0xCBEF], NFD: [0x110D, 0x1173, 0x11C2], NFKC: [0xCBEF], NFKD: [0x110D, 0x1173, 0x11C2] }, +{ source: [0xCBF0], NFC: [0xCBF0], NFD: [0x110D, 0x1174], NFKC: [0xCBF0], NFKD: [0x110D, 0x1174] }, +{ source: [0xCBF1], NFC: [0xCBF1], NFD: [0x110D, 0x1174, 0x11A8], NFKC: [0xCBF1], NFKD: [0x110D, 0x1174, 0x11A8] }, +{ source: [0xCBF2], NFC: [0xCBF2], NFD: [0x110D, 0x1174, 0x11A9], NFKC: [0xCBF2], NFKD: [0x110D, 0x1174, 0x11A9] }, +{ source: [0xCBF3], NFC: [0xCBF3], NFD: [0x110D, 0x1174, 0x11AA], NFKC: [0xCBF3], NFKD: [0x110D, 0x1174, 0x11AA] }, +{ source: [0xCBF4], NFC: [0xCBF4], NFD: [0x110D, 0x1174, 0x11AB], NFKC: [0xCBF4], NFKD: [0x110D, 0x1174, 0x11AB] }, +{ source: [0xCBF5], NFC: [0xCBF5], NFD: [0x110D, 0x1174, 0x11AC], NFKC: [0xCBF5], NFKD: [0x110D, 0x1174, 0x11AC] }, +{ source: [0xCBF6], NFC: [0xCBF6], NFD: [0x110D, 0x1174, 0x11AD], NFKC: [0xCBF6], NFKD: [0x110D, 0x1174, 0x11AD] }, +{ source: [0xCBF7], NFC: [0xCBF7], NFD: [0x110D, 0x1174, 0x11AE], NFKC: [0xCBF7], NFKD: [0x110D, 0x1174, 0x11AE] }, +{ source: [0xCBF8], NFC: [0xCBF8], NFD: [0x110D, 0x1174, 0x11AF], NFKC: [0xCBF8], NFKD: [0x110D, 0x1174, 0x11AF] }, +{ source: [0xCBF9], NFC: [0xCBF9], NFD: [0x110D, 0x1174, 0x11B0], NFKC: [0xCBF9], NFKD: [0x110D, 0x1174, 0x11B0] }, +{ source: [0xCBFA], NFC: [0xCBFA], NFD: [0x110D, 0x1174, 0x11B1], NFKC: [0xCBFA], NFKD: [0x110D, 0x1174, 0x11B1] }, +{ source: [0xCBFB], NFC: [0xCBFB], NFD: [0x110D, 0x1174, 0x11B2], NFKC: [0xCBFB], NFKD: [0x110D, 0x1174, 0x11B2] }, +{ source: [0xCBFC], NFC: [0xCBFC], NFD: [0x110D, 0x1174, 0x11B3], NFKC: [0xCBFC], NFKD: [0x110D, 0x1174, 0x11B3] }, +{ source: [0xCBFD], NFC: [0xCBFD], NFD: [0x110D, 0x1174, 0x11B4], NFKC: [0xCBFD], NFKD: [0x110D, 0x1174, 0x11B4] }, +{ source: [0xCBFE], NFC: [0xCBFE], NFD: [0x110D, 0x1174, 0x11B5], NFKC: [0xCBFE], NFKD: [0x110D, 0x1174, 0x11B5] }, +{ source: [0xCBFF], NFC: [0xCBFF], NFD: [0x110D, 0x1174, 0x11B6], NFKC: [0xCBFF], NFKD: [0x110D, 0x1174, 0x11B6] }, +{ source: [0xCC00], NFC: [0xCC00], NFD: [0x110D, 0x1174, 0x11B7], NFKC: [0xCC00], NFKD: [0x110D, 0x1174, 0x11B7] }, +{ source: [0xCC01], NFC: [0xCC01], NFD: [0x110D, 0x1174, 0x11B8], NFKC: [0xCC01], NFKD: [0x110D, 0x1174, 0x11B8] }, +{ source: [0xCC02], NFC: [0xCC02], NFD: [0x110D, 0x1174, 0x11B9], NFKC: [0xCC02], NFKD: [0x110D, 0x1174, 0x11B9] }, +{ source: [0xCC03], NFC: [0xCC03], NFD: [0x110D, 0x1174, 0x11BA], NFKC: [0xCC03], NFKD: [0x110D, 0x1174, 0x11BA] }, +{ source: [0xCC04], NFC: [0xCC04], NFD: [0x110D, 0x1174, 0x11BB], NFKC: [0xCC04], NFKD: [0x110D, 0x1174, 0x11BB] }, +{ source: [0xCC05], NFC: [0xCC05], NFD: [0x110D, 0x1174, 0x11BC], NFKC: [0xCC05], NFKD: [0x110D, 0x1174, 0x11BC] }, +{ source: [0xCC06], NFC: [0xCC06], NFD: [0x110D, 0x1174, 0x11BD], NFKC: [0xCC06], NFKD: [0x110D, 0x1174, 0x11BD] }, +{ source: [0xCC07], NFC: [0xCC07], NFD: [0x110D, 0x1174, 0x11BE], NFKC: [0xCC07], NFKD: [0x110D, 0x1174, 0x11BE] }, +{ source: [0xCC08], NFC: [0xCC08], NFD: [0x110D, 0x1174, 0x11BF], NFKC: [0xCC08], NFKD: [0x110D, 0x1174, 0x11BF] }, +{ source: [0xCC09], NFC: [0xCC09], NFD: [0x110D, 0x1174, 0x11C0], NFKC: [0xCC09], NFKD: [0x110D, 0x1174, 0x11C0] }, +{ source: [0xCC0A], NFC: [0xCC0A], NFD: [0x110D, 0x1174, 0x11C1], NFKC: [0xCC0A], NFKD: [0x110D, 0x1174, 0x11C1] }, +{ source: [0xCC0B], NFC: [0xCC0B], NFD: [0x110D, 0x1174, 0x11C2], NFKC: [0xCC0B], NFKD: [0x110D, 0x1174, 0x11C2] }, +{ source: [0xCC0C], NFC: [0xCC0C], NFD: [0x110D, 0x1175], NFKC: [0xCC0C], NFKD: [0x110D, 0x1175] }, +{ source: [0xCC0D], NFC: [0xCC0D], NFD: [0x110D, 0x1175, 0x11A8], NFKC: [0xCC0D], NFKD: [0x110D, 0x1175, 0x11A8] }, +{ source: [0xCC0E], NFC: [0xCC0E], NFD: [0x110D, 0x1175, 0x11A9], NFKC: [0xCC0E], NFKD: [0x110D, 0x1175, 0x11A9] }, +{ source: [0xCC0F], NFC: [0xCC0F], NFD: [0x110D, 0x1175, 0x11AA], NFKC: [0xCC0F], NFKD: [0x110D, 0x1175, 0x11AA] }, +{ source: [0xCC10], NFC: [0xCC10], NFD: [0x110D, 0x1175, 0x11AB], NFKC: [0xCC10], NFKD: [0x110D, 0x1175, 0x11AB] }, +{ source: [0xCC11], NFC: [0xCC11], NFD: [0x110D, 0x1175, 0x11AC], NFKC: [0xCC11], NFKD: [0x110D, 0x1175, 0x11AC] }, +{ source: [0xCC12], NFC: [0xCC12], NFD: [0x110D, 0x1175, 0x11AD], NFKC: [0xCC12], NFKD: [0x110D, 0x1175, 0x11AD] }, +{ source: [0xCC13], NFC: [0xCC13], NFD: [0x110D, 0x1175, 0x11AE], NFKC: [0xCC13], NFKD: [0x110D, 0x1175, 0x11AE] }, +{ source: [0xCC14], NFC: [0xCC14], NFD: [0x110D, 0x1175, 0x11AF], NFKC: [0xCC14], NFKD: [0x110D, 0x1175, 0x11AF] }, +{ source: [0xCC15], NFC: [0xCC15], NFD: [0x110D, 0x1175, 0x11B0], NFKC: [0xCC15], NFKD: [0x110D, 0x1175, 0x11B0] }, +{ source: [0xCC16], NFC: [0xCC16], NFD: [0x110D, 0x1175, 0x11B1], NFKC: [0xCC16], NFKD: [0x110D, 0x1175, 0x11B1] }, +{ source: [0xCC17], NFC: [0xCC17], NFD: [0x110D, 0x1175, 0x11B2], NFKC: [0xCC17], NFKD: [0x110D, 0x1175, 0x11B2] }, +{ source: [0xCC18], NFC: [0xCC18], NFD: [0x110D, 0x1175, 0x11B3], NFKC: [0xCC18], NFKD: [0x110D, 0x1175, 0x11B3] }, +{ source: [0xCC19], NFC: [0xCC19], NFD: [0x110D, 0x1175, 0x11B4], NFKC: [0xCC19], NFKD: [0x110D, 0x1175, 0x11B4] }, +{ source: [0xCC1A], NFC: [0xCC1A], NFD: [0x110D, 0x1175, 0x11B5], NFKC: [0xCC1A], NFKD: [0x110D, 0x1175, 0x11B5] }, +{ source: [0xCC1B], NFC: [0xCC1B], NFD: [0x110D, 0x1175, 0x11B6], NFKC: [0xCC1B], NFKD: [0x110D, 0x1175, 0x11B6] }, +{ source: [0xCC1C], NFC: [0xCC1C], NFD: [0x110D, 0x1175, 0x11B7], NFKC: [0xCC1C], NFKD: [0x110D, 0x1175, 0x11B7] }, +{ source: [0xCC1D], NFC: [0xCC1D], NFD: [0x110D, 0x1175, 0x11B8], NFKC: [0xCC1D], NFKD: [0x110D, 0x1175, 0x11B8] }, +{ source: [0xCC1E], NFC: [0xCC1E], NFD: [0x110D, 0x1175, 0x11B9], NFKC: [0xCC1E], NFKD: [0x110D, 0x1175, 0x11B9] }, +{ source: [0xCC1F], NFC: [0xCC1F], NFD: [0x110D, 0x1175, 0x11BA], NFKC: [0xCC1F], NFKD: [0x110D, 0x1175, 0x11BA] }, +{ source: [0xCC20], NFC: [0xCC20], NFD: [0x110D, 0x1175, 0x11BB], NFKC: [0xCC20], NFKD: [0x110D, 0x1175, 0x11BB] }, +{ source: [0xCC21], NFC: [0xCC21], NFD: [0x110D, 0x1175, 0x11BC], NFKC: [0xCC21], NFKD: [0x110D, 0x1175, 0x11BC] }, +{ source: [0xCC22], NFC: [0xCC22], NFD: [0x110D, 0x1175, 0x11BD], NFKC: [0xCC22], NFKD: [0x110D, 0x1175, 0x11BD] }, +{ source: [0xCC23], NFC: [0xCC23], NFD: [0x110D, 0x1175, 0x11BE], NFKC: [0xCC23], NFKD: [0x110D, 0x1175, 0x11BE] }, +{ source: [0xCC24], NFC: [0xCC24], NFD: [0x110D, 0x1175, 0x11BF], NFKC: [0xCC24], NFKD: [0x110D, 0x1175, 0x11BF] }, +{ source: [0xCC25], NFC: [0xCC25], NFD: [0x110D, 0x1175, 0x11C0], NFKC: [0xCC25], NFKD: [0x110D, 0x1175, 0x11C0] }, +{ source: [0xCC26], NFC: [0xCC26], NFD: [0x110D, 0x1175, 0x11C1], NFKC: [0xCC26], NFKD: [0x110D, 0x1175, 0x11C1] }, +{ source: [0xCC27], NFC: [0xCC27], NFD: [0x110D, 0x1175, 0x11C2], NFKC: [0xCC27], NFKD: [0x110D, 0x1175, 0x11C2] }, +{ source: [0xCC28], NFC: [0xCC28], NFD: [0x110E, 0x1161], NFKC: [0xCC28], NFKD: [0x110E, 0x1161] }, +{ source: [0xCC29], NFC: [0xCC29], NFD: [0x110E, 0x1161, 0x11A8], NFKC: [0xCC29], NFKD: [0x110E, 0x1161, 0x11A8] }, +{ source: [0xCC2A], NFC: [0xCC2A], NFD: [0x110E, 0x1161, 0x11A9], NFKC: [0xCC2A], NFKD: [0x110E, 0x1161, 0x11A9] }, +{ source: [0xCC2B], NFC: [0xCC2B], NFD: [0x110E, 0x1161, 0x11AA], NFKC: [0xCC2B], NFKD: [0x110E, 0x1161, 0x11AA] }, +{ source: [0xCC2C], NFC: [0xCC2C], NFD: [0x110E, 0x1161, 0x11AB], NFKC: [0xCC2C], NFKD: [0x110E, 0x1161, 0x11AB] }, +{ source: [0xCC2D], NFC: [0xCC2D], NFD: [0x110E, 0x1161, 0x11AC], NFKC: [0xCC2D], NFKD: [0x110E, 0x1161, 0x11AC] }, +{ source: [0xCC2E], NFC: [0xCC2E], NFD: [0x110E, 0x1161, 0x11AD], NFKC: [0xCC2E], NFKD: [0x110E, 0x1161, 0x11AD] }, +{ source: [0xCC2F], NFC: [0xCC2F], NFD: [0x110E, 0x1161, 0x11AE], NFKC: [0xCC2F], NFKD: [0x110E, 0x1161, 0x11AE] }, +{ source: [0xCC30], NFC: [0xCC30], NFD: [0x110E, 0x1161, 0x11AF], NFKC: [0xCC30], NFKD: [0x110E, 0x1161, 0x11AF] }, +{ source: [0xCC31], NFC: [0xCC31], NFD: [0x110E, 0x1161, 0x11B0], NFKC: [0xCC31], NFKD: [0x110E, 0x1161, 0x11B0] }, +{ source: [0xCC32], NFC: [0xCC32], NFD: [0x110E, 0x1161, 0x11B1], NFKC: [0xCC32], NFKD: [0x110E, 0x1161, 0x11B1] }, +{ source: [0xCC33], NFC: [0xCC33], NFD: [0x110E, 0x1161, 0x11B2], NFKC: [0xCC33], NFKD: [0x110E, 0x1161, 0x11B2] }, +{ source: [0xCC34], NFC: [0xCC34], NFD: [0x110E, 0x1161, 0x11B3], NFKC: [0xCC34], NFKD: [0x110E, 0x1161, 0x11B3] }, +{ source: [0xCC35], NFC: [0xCC35], NFD: [0x110E, 0x1161, 0x11B4], NFKC: [0xCC35], NFKD: [0x110E, 0x1161, 0x11B4] }, +{ source: [0xCC36], NFC: [0xCC36], NFD: [0x110E, 0x1161, 0x11B5], NFKC: [0xCC36], NFKD: [0x110E, 0x1161, 0x11B5] }, +{ source: [0xCC37], NFC: [0xCC37], NFD: [0x110E, 0x1161, 0x11B6], NFKC: [0xCC37], NFKD: [0x110E, 0x1161, 0x11B6] }, +{ source: [0xCC38], NFC: [0xCC38], NFD: [0x110E, 0x1161, 0x11B7], NFKC: [0xCC38], NFKD: [0x110E, 0x1161, 0x11B7] }, +{ source: [0xCC39], NFC: [0xCC39], NFD: [0x110E, 0x1161, 0x11B8], NFKC: [0xCC39], NFKD: [0x110E, 0x1161, 0x11B8] }, +{ source: [0xCC3A], NFC: [0xCC3A], NFD: [0x110E, 0x1161, 0x11B9], NFKC: [0xCC3A], NFKD: [0x110E, 0x1161, 0x11B9] }, +{ source: [0xCC3B], NFC: [0xCC3B], NFD: [0x110E, 0x1161, 0x11BA], NFKC: [0xCC3B], NFKD: [0x110E, 0x1161, 0x11BA] }, +{ source: [0xCC3C], NFC: [0xCC3C], NFD: [0x110E, 0x1161, 0x11BB], NFKC: [0xCC3C], NFKD: [0x110E, 0x1161, 0x11BB] }, +{ source: [0xCC3D], NFC: [0xCC3D], NFD: [0x110E, 0x1161, 0x11BC], NFKC: [0xCC3D], NFKD: [0x110E, 0x1161, 0x11BC] }, +{ source: [0xCC3E], NFC: [0xCC3E], NFD: [0x110E, 0x1161, 0x11BD], NFKC: [0xCC3E], NFKD: [0x110E, 0x1161, 0x11BD] }, +{ source: [0xCC3F], NFC: [0xCC3F], NFD: [0x110E, 0x1161, 0x11BE], NFKC: [0xCC3F], NFKD: [0x110E, 0x1161, 0x11BE] }, +{ source: [0xCC40], NFC: [0xCC40], NFD: [0x110E, 0x1161, 0x11BF], NFKC: [0xCC40], NFKD: [0x110E, 0x1161, 0x11BF] }, +{ source: [0xCC41], NFC: [0xCC41], NFD: [0x110E, 0x1161, 0x11C0], NFKC: [0xCC41], NFKD: [0x110E, 0x1161, 0x11C0] }, +{ source: [0xCC42], NFC: [0xCC42], NFD: [0x110E, 0x1161, 0x11C1], NFKC: [0xCC42], NFKD: [0x110E, 0x1161, 0x11C1] }, +{ source: [0xCC43], NFC: [0xCC43], NFD: [0x110E, 0x1161, 0x11C2], NFKC: [0xCC43], NFKD: [0x110E, 0x1161, 0x11C2] }, +{ source: [0xCC44], NFC: [0xCC44], NFD: [0x110E, 0x1162], NFKC: [0xCC44], NFKD: [0x110E, 0x1162] }, +{ source: [0xCC45], NFC: [0xCC45], NFD: [0x110E, 0x1162, 0x11A8], NFKC: [0xCC45], NFKD: [0x110E, 0x1162, 0x11A8] }, +{ source: [0xCC46], NFC: [0xCC46], NFD: [0x110E, 0x1162, 0x11A9], NFKC: [0xCC46], NFKD: [0x110E, 0x1162, 0x11A9] }, +{ source: [0xCC47], NFC: [0xCC47], NFD: [0x110E, 0x1162, 0x11AA], NFKC: [0xCC47], NFKD: [0x110E, 0x1162, 0x11AA] }, +{ source: [0xCC48], NFC: [0xCC48], NFD: [0x110E, 0x1162, 0x11AB], NFKC: [0xCC48], NFKD: [0x110E, 0x1162, 0x11AB] }, +{ source: [0xCC49], NFC: [0xCC49], NFD: [0x110E, 0x1162, 0x11AC], NFKC: [0xCC49], NFKD: [0x110E, 0x1162, 0x11AC] }, +{ source: [0xCC4A], NFC: [0xCC4A], NFD: [0x110E, 0x1162, 0x11AD], NFKC: [0xCC4A], NFKD: [0x110E, 0x1162, 0x11AD] }, +{ source: [0xCC4B], NFC: [0xCC4B], NFD: [0x110E, 0x1162, 0x11AE], NFKC: [0xCC4B], NFKD: [0x110E, 0x1162, 0x11AE] }, +{ source: [0xCC4C], NFC: [0xCC4C], NFD: [0x110E, 0x1162, 0x11AF], NFKC: [0xCC4C], NFKD: [0x110E, 0x1162, 0x11AF] }, +{ source: [0xCC4D], NFC: [0xCC4D], NFD: [0x110E, 0x1162, 0x11B0], NFKC: [0xCC4D], NFKD: [0x110E, 0x1162, 0x11B0] }, +{ source: [0xCC4E], NFC: [0xCC4E], NFD: [0x110E, 0x1162, 0x11B1], NFKC: [0xCC4E], NFKD: [0x110E, 0x1162, 0x11B1] }, +{ source: [0xCC4F], NFC: [0xCC4F], NFD: [0x110E, 0x1162, 0x11B2], NFKC: [0xCC4F], NFKD: [0x110E, 0x1162, 0x11B2] }, +{ source: [0xCC50], NFC: [0xCC50], NFD: [0x110E, 0x1162, 0x11B3], NFKC: [0xCC50], NFKD: [0x110E, 0x1162, 0x11B3] }, +{ source: [0xCC51], NFC: [0xCC51], NFD: [0x110E, 0x1162, 0x11B4], NFKC: [0xCC51], NFKD: [0x110E, 0x1162, 0x11B4] }, +{ source: [0xCC52], NFC: [0xCC52], NFD: [0x110E, 0x1162, 0x11B5], NFKC: [0xCC52], NFKD: [0x110E, 0x1162, 0x11B5] }, +{ source: [0xCC53], NFC: [0xCC53], NFD: [0x110E, 0x1162, 0x11B6], NFKC: [0xCC53], NFKD: [0x110E, 0x1162, 0x11B6] }, +{ source: [0xCC54], NFC: [0xCC54], NFD: [0x110E, 0x1162, 0x11B7], NFKC: [0xCC54], NFKD: [0x110E, 0x1162, 0x11B7] }, +{ source: [0xCC55], NFC: [0xCC55], NFD: [0x110E, 0x1162, 0x11B8], NFKC: [0xCC55], NFKD: [0x110E, 0x1162, 0x11B8] }, +{ source: [0xCC56], NFC: [0xCC56], NFD: [0x110E, 0x1162, 0x11B9], NFKC: [0xCC56], NFKD: [0x110E, 0x1162, 0x11B9] }, +{ source: [0xCC57], NFC: [0xCC57], NFD: [0x110E, 0x1162, 0x11BA], NFKC: [0xCC57], NFKD: [0x110E, 0x1162, 0x11BA] }, +{ source: [0xCC58], NFC: [0xCC58], NFD: [0x110E, 0x1162, 0x11BB], NFKC: [0xCC58], NFKD: [0x110E, 0x1162, 0x11BB] }, +{ source: [0xCC59], NFC: [0xCC59], NFD: [0x110E, 0x1162, 0x11BC], NFKC: [0xCC59], NFKD: [0x110E, 0x1162, 0x11BC] }, +{ source: [0xCC5A], NFC: [0xCC5A], NFD: [0x110E, 0x1162, 0x11BD], NFKC: [0xCC5A], NFKD: [0x110E, 0x1162, 0x11BD] }, +{ source: [0xCC5B], NFC: [0xCC5B], NFD: [0x110E, 0x1162, 0x11BE], NFKC: [0xCC5B], NFKD: [0x110E, 0x1162, 0x11BE] }, +{ source: [0xCC5C], NFC: [0xCC5C], NFD: [0x110E, 0x1162, 0x11BF], NFKC: [0xCC5C], NFKD: [0x110E, 0x1162, 0x11BF] }, +{ source: [0xCC5D], NFC: [0xCC5D], NFD: [0x110E, 0x1162, 0x11C0], NFKC: [0xCC5D], NFKD: [0x110E, 0x1162, 0x11C0] }, +{ source: [0xCC5E], NFC: [0xCC5E], NFD: [0x110E, 0x1162, 0x11C1], NFKC: [0xCC5E], NFKD: [0x110E, 0x1162, 0x11C1] }, +{ source: [0xCC5F], NFC: [0xCC5F], NFD: [0x110E, 0x1162, 0x11C2], NFKC: [0xCC5F], NFKD: [0x110E, 0x1162, 0x11C2] }, +{ source: [0xCC60], NFC: [0xCC60], NFD: [0x110E, 0x1163], NFKC: [0xCC60], NFKD: [0x110E, 0x1163] }, +{ source: [0xCC61], NFC: [0xCC61], NFD: [0x110E, 0x1163, 0x11A8], NFKC: [0xCC61], NFKD: [0x110E, 0x1163, 0x11A8] }, +{ source: [0xCC62], NFC: [0xCC62], NFD: [0x110E, 0x1163, 0x11A9], NFKC: [0xCC62], NFKD: [0x110E, 0x1163, 0x11A9] }, +{ source: [0xCC63], NFC: [0xCC63], NFD: [0x110E, 0x1163, 0x11AA], NFKC: [0xCC63], NFKD: [0x110E, 0x1163, 0x11AA] }, +{ source: [0xCC64], NFC: [0xCC64], NFD: [0x110E, 0x1163, 0x11AB], NFKC: [0xCC64], NFKD: [0x110E, 0x1163, 0x11AB] }, +{ source: [0xCC65], NFC: [0xCC65], NFD: [0x110E, 0x1163, 0x11AC], NFKC: [0xCC65], NFKD: [0x110E, 0x1163, 0x11AC] }, +{ source: [0xCC66], NFC: [0xCC66], NFD: [0x110E, 0x1163, 0x11AD], NFKC: [0xCC66], NFKD: [0x110E, 0x1163, 0x11AD] }, +{ source: [0xCC67], NFC: [0xCC67], NFD: [0x110E, 0x1163, 0x11AE], NFKC: [0xCC67], NFKD: [0x110E, 0x1163, 0x11AE] }, +{ source: [0xCC68], NFC: [0xCC68], NFD: [0x110E, 0x1163, 0x11AF], NFKC: [0xCC68], NFKD: [0x110E, 0x1163, 0x11AF] }, +{ source: [0xCC69], NFC: [0xCC69], NFD: [0x110E, 0x1163, 0x11B0], NFKC: [0xCC69], NFKD: [0x110E, 0x1163, 0x11B0] }, +{ source: [0xCC6A], NFC: [0xCC6A], NFD: [0x110E, 0x1163, 0x11B1], NFKC: [0xCC6A], NFKD: [0x110E, 0x1163, 0x11B1] }, +{ source: [0xCC6B], NFC: [0xCC6B], NFD: [0x110E, 0x1163, 0x11B2], NFKC: [0xCC6B], NFKD: [0x110E, 0x1163, 0x11B2] }, +{ source: [0xCC6C], NFC: [0xCC6C], NFD: [0x110E, 0x1163, 0x11B3], NFKC: [0xCC6C], NFKD: [0x110E, 0x1163, 0x11B3] }, +{ source: [0xCC6D], NFC: [0xCC6D], NFD: [0x110E, 0x1163, 0x11B4], NFKC: [0xCC6D], NFKD: [0x110E, 0x1163, 0x11B4] }, +{ source: [0xCC6E], NFC: [0xCC6E], NFD: [0x110E, 0x1163, 0x11B5], NFKC: [0xCC6E], NFKD: [0x110E, 0x1163, 0x11B5] }, +{ source: [0xCC6F], NFC: [0xCC6F], NFD: [0x110E, 0x1163, 0x11B6], NFKC: [0xCC6F], NFKD: [0x110E, 0x1163, 0x11B6] }, +{ source: [0xCC70], NFC: [0xCC70], NFD: [0x110E, 0x1163, 0x11B7], NFKC: [0xCC70], NFKD: [0x110E, 0x1163, 0x11B7] }, +{ source: [0xCC71], NFC: [0xCC71], NFD: [0x110E, 0x1163, 0x11B8], NFKC: [0xCC71], NFKD: [0x110E, 0x1163, 0x11B8] }, +{ source: [0xCC72], NFC: [0xCC72], NFD: [0x110E, 0x1163, 0x11B9], NFKC: [0xCC72], NFKD: [0x110E, 0x1163, 0x11B9] }, +{ source: [0xCC73], NFC: [0xCC73], NFD: [0x110E, 0x1163, 0x11BA], NFKC: [0xCC73], NFKD: [0x110E, 0x1163, 0x11BA] }, +{ source: [0xCC74], NFC: [0xCC74], NFD: [0x110E, 0x1163, 0x11BB], NFKC: [0xCC74], NFKD: [0x110E, 0x1163, 0x11BB] }, +{ source: [0xCC75], NFC: [0xCC75], NFD: [0x110E, 0x1163, 0x11BC], NFKC: [0xCC75], NFKD: [0x110E, 0x1163, 0x11BC] }, +{ source: [0xCC76], NFC: [0xCC76], NFD: [0x110E, 0x1163, 0x11BD], NFKC: [0xCC76], NFKD: [0x110E, 0x1163, 0x11BD] }, +{ source: [0xCC77], NFC: [0xCC77], NFD: [0x110E, 0x1163, 0x11BE], NFKC: [0xCC77], NFKD: [0x110E, 0x1163, 0x11BE] }, +{ source: [0xCC78], NFC: [0xCC78], NFD: [0x110E, 0x1163, 0x11BF], NFKC: [0xCC78], NFKD: [0x110E, 0x1163, 0x11BF] }, +{ source: [0xCC79], NFC: [0xCC79], NFD: [0x110E, 0x1163, 0x11C0], NFKC: [0xCC79], NFKD: [0x110E, 0x1163, 0x11C0] }, +{ source: [0xCC7A], NFC: [0xCC7A], NFD: [0x110E, 0x1163, 0x11C1], NFKC: [0xCC7A], NFKD: [0x110E, 0x1163, 0x11C1] }, +{ source: [0xCC7B], NFC: [0xCC7B], NFD: [0x110E, 0x1163, 0x11C2], NFKC: [0xCC7B], NFKD: [0x110E, 0x1163, 0x11C2] }, +{ source: [0xCC7C], NFC: [0xCC7C], NFD: [0x110E, 0x1164], NFKC: [0xCC7C], NFKD: [0x110E, 0x1164] }, +{ source: [0xCC7D], NFC: [0xCC7D], NFD: [0x110E, 0x1164, 0x11A8], NFKC: [0xCC7D], NFKD: [0x110E, 0x1164, 0x11A8] }, +{ source: [0xCC7E], NFC: [0xCC7E], NFD: [0x110E, 0x1164, 0x11A9], NFKC: [0xCC7E], NFKD: [0x110E, 0x1164, 0x11A9] }, +{ source: [0xCC7F], NFC: [0xCC7F], NFD: [0x110E, 0x1164, 0x11AA], NFKC: [0xCC7F], NFKD: [0x110E, 0x1164, 0x11AA] }, +{ source: [0xCC80], NFC: [0xCC80], NFD: [0x110E, 0x1164, 0x11AB], NFKC: [0xCC80], NFKD: [0x110E, 0x1164, 0x11AB] }, +{ source: [0xCC81], NFC: [0xCC81], NFD: [0x110E, 0x1164, 0x11AC], NFKC: [0xCC81], NFKD: [0x110E, 0x1164, 0x11AC] }, +{ source: [0xCC82], NFC: [0xCC82], NFD: [0x110E, 0x1164, 0x11AD], NFKC: [0xCC82], NFKD: [0x110E, 0x1164, 0x11AD] }, +{ source: [0xCC83], NFC: [0xCC83], NFD: [0x110E, 0x1164, 0x11AE], NFKC: [0xCC83], NFKD: [0x110E, 0x1164, 0x11AE] }, +{ source: [0xCC84], NFC: [0xCC84], NFD: [0x110E, 0x1164, 0x11AF], NFKC: [0xCC84], NFKD: [0x110E, 0x1164, 0x11AF] }, +{ source: [0xCC85], NFC: [0xCC85], NFD: [0x110E, 0x1164, 0x11B0], NFKC: [0xCC85], NFKD: [0x110E, 0x1164, 0x11B0] }, +{ source: [0xCC86], NFC: [0xCC86], NFD: [0x110E, 0x1164, 0x11B1], NFKC: [0xCC86], NFKD: [0x110E, 0x1164, 0x11B1] }, +{ source: [0xCC87], NFC: [0xCC87], NFD: [0x110E, 0x1164, 0x11B2], NFKC: [0xCC87], NFKD: [0x110E, 0x1164, 0x11B2] }, +{ source: [0xCC88], NFC: [0xCC88], NFD: [0x110E, 0x1164, 0x11B3], NFKC: [0xCC88], NFKD: [0x110E, 0x1164, 0x11B3] }, +{ source: [0xCC89], NFC: [0xCC89], NFD: [0x110E, 0x1164, 0x11B4], NFKC: [0xCC89], NFKD: [0x110E, 0x1164, 0x11B4] }, +{ source: [0xCC8A], NFC: [0xCC8A], NFD: [0x110E, 0x1164, 0x11B5], NFKC: [0xCC8A], NFKD: [0x110E, 0x1164, 0x11B5] }, +{ source: [0xCC8B], NFC: [0xCC8B], NFD: [0x110E, 0x1164, 0x11B6], NFKC: [0xCC8B], NFKD: [0x110E, 0x1164, 0x11B6] }, +{ source: [0xCC8C], NFC: [0xCC8C], NFD: [0x110E, 0x1164, 0x11B7], NFKC: [0xCC8C], NFKD: [0x110E, 0x1164, 0x11B7] }, +{ source: [0xCC8D], NFC: [0xCC8D], NFD: [0x110E, 0x1164, 0x11B8], NFKC: [0xCC8D], NFKD: [0x110E, 0x1164, 0x11B8] }, +{ source: [0xCC8E], NFC: [0xCC8E], NFD: [0x110E, 0x1164, 0x11B9], NFKC: [0xCC8E], NFKD: [0x110E, 0x1164, 0x11B9] }, +{ source: [0xCC8F], NFC: [0xCC8F], NFD: [0x110E, 0x1164, 0x11BA], NFKC: [0xCC8F], NFKD: [0x110E, 0x1164, 0x11BA] }, +{ source: [0xCC90], NFC: [0xCC90], NFD: [0x110E, 0x1164, 0x11BB], NFKC: [0xCC90], NFKD: [0x110E, 0x1164, 0x11BB] }, +{ source: [0xCC91], NFC: [0xCC91], NFD: [0x110E, 0x1164, 0x11BC], NFKC: [0xCC91], NFKD: [0x110E, 0x1164, 0x11BC] }, +{ source: [0xCC92], NFC: [0xCC92], NFD: [0x110E, 0x1164, 0x11BD], NFKC: [0xCC92], NFKD: [0x110E, 0x1164, 0x11BD] }, +{ source: [0xCC93], NFC: [0xCC93], NFD: [0x110E, 0x1164, 0x11BE], NFKC: [0xCC93], NFKD: [0x110E, 0x1164, 0x11BE] }, +{ source: [0xCC94], NFC: [0xCC94], NFD: [0x110E, 0x1164, 0x11BF], NFKC: [0xCC94], NFKD: [0x110E, 0x1164, 0x11BF] }, +{ source: [0xCC95], NFC: [0xCC95], NFD: [0x110E, 0x1164, 0x11C0], NFKC: [0xCC95], NFKD: [0x110E, 0x1164, 0x11C0] }, +{ source: [0xCC96], NFC: [0xCC96], NFD: [0x110E, 0x1164, 0x11C1], NFKC: [0xCC96], NFKD: [0x110E, 0x1164, 0x11C1] }, +{ source: [0xCC97], NFC: [0xCC97], NFD: [0x110E, 0x1164, 0x11C2], NFKC: [0xCC97], NFKD: [0x110E, 0x1164, 0x11C2] }, +{ source: [0xCC98], NFC: [0xCC98], NFD: [0x110E, 0x1165], NFKC: [0xCC98], NFKD: [0x110E, 0x1165] }, +{ source: [0xCC99], NFC: [0xCC99], NFD: [0x110E, 0x1165, 0x11A8], NFKC: [0xCC99], NFKD: [0x110E, 0x1165, 0x11A8] }, +{ source: [0xCC9A], NFC: [0xCC9A], NFD: [0x110E, 0x1165, 0x11A9], NFKC: [0xCC9A], NFKD: [0x110E, 0x1165, 0x11A9] }, +{ source: [0xCC9B], NFC: [0xCC9B], NFD: [0x110E, 0x1165, 0x11AA], NFKC: [0xCC9B], NFKD: [0x110E, 0x1165, 0x11AA] }, +{ source: [0xCC9C], NFC: [0xCC9C], NFD: [0x110E, 0x1165, 0x11AB], NFKC: [0xCC9C], NFKD: [0x110E, 0x1165, 0x11AB] }, +{ source: [0xCC9D], NFC: [0xCC9D], NFD: [0x110E, 0x1165, 0x11AC], NFKC: [0xCC9D], NFKD: [0x110E, 0x1165, 0x11AC] }, +{ source: [0xCC9E], NFC: [0xCC9E], NFD: [0x110E, 0x1165, 0x11AD], NFKC: [0xCC9E], NFKD: [0x110E, 0x1165, 0x11AD] }, +{ source: [0xCC9F], NFC: [0xCC9F], NFD: [0x110E, 0x1165, 0x11AE], NFKC: [0xCC9F], NFKD: [0x110E, 0x1165, 0x11AE] }, +{ source: [0xCCA0], NFC: [0xCCA0], NFD: [0x110E, 0x1165, 0x11AF], NFKC: [0xCCA0], NFKD: [0x110E, 0x1165, 0x11AF] }, +{ source: [0xCCA1], NFC: [0xCCA1], NFD: [0x110E, 0x1165, 0x11B0], NFKC: [0xCCA1], NFKD: [0x110E, 0x1165, 0x11B0] }, +{ source: [0xCCA2], NFC: [0xCCA2], NFD: [0x110E, 0x1165, 0x11B1], NFKC: [0xCCA2], NFKD: [0x110E, 0x1165, 0x11B1] }, +{ source: [0xCCA3], NFC: [0xCCA3], NFD: [0x110E, 0x1165, 0x11B2], NFKC: [0xCCA3], NFKD: [0x110E, 0x1165, 0x11B2] }, +{ source: [0xCCA4], NFC: [0xCCA4], NFD: [0x110E, 0x1165, 0x11B3], NFKC: [0xCCA4], NFKD: [0x110E, 0x1165, 0x11B3] }, +{ source: [0xCCA5], NFC: [0xCCA5], NFD: [0x110E, 0x1165, 0x11B4], NFKC: [0xCCA5], NFKD: [0x110E, 0x1165, 0x11B4] }, +{ source: [0xCCA6], NFC: [0xCCA6], NFD: [0x110E, 0x1165, 0x11B5], NFKC: [0xCCA6], NFKD: [0x110E, 0x1165, 0x11B5] }, +{ source: [0xCCA7], NFC: [0xCCA7], NFD: [0x110E, 0x1165, 0x11B6], NFKC: [0xCCA7], NFKD: [0x110E, 0x1165, 0x11B6] }, +{ source: [0xCCA8], NFC: [0xCCA8], NFD: [0x110E, 0x1165, 0x11B7], NFKC: [0xCCA8], NFKD: [0x110E, 0x1165, 0x11B7] }, +{ source: [0xCCA9], NFC: [0xCCA9], NFD: [0x110E, 0x1165, 0x11B8], NFKC: [0xCCA9], NFKD: [0x110E, 0x1165, 0x11B8] }, +{ source: [0xCCAA], NFC: [0xCCAA], NFD: [0x110E, 0x1165, 0x11B9], NFKC: [0xCCAA], NFKD: [0x110E, 0x1165, 0x11B9] }, +{ source: [0xCCAB], NFC: [0xCCAB], NFD: [0x110E, 0x1165, 0x11BA], NFKC: [0xCCAB], NFKD: [0x110E, 0x1165, 0x11BA] }, +{ source: [0xCCAC], NFC: [0xCCAC], NFD: [0x110E, 0x1165, 0x11BB], NFKC: [0xCCAC], NFKD: [0x110E, 0x1165, 0x11BB] }, +{ source: [0xCCAD], NFC: [0xCCAD], NFD: [0x110E, 0x1165, 0x11BC], NFKC: [0xCCAD], NFKD: [0x110E, 0x1165, 0x11BC] }, +{ source: [0xCCAE], NFC: [0xCCAE], NFD: [0x110E, 0x1165, 0x11BD], NFKC: [0xCCAE], NFKD: [0x110E, 0x1165, 0x11BD] }, +{ source: [0xCCAF], NFC: [0xCCAF], NFD: [0x110E, 0x1165, 0x11BE], NFKC: [0xCCAF], NFKD: [0x110E, 0x1165, 0x11BE] }, +{ source: [0xCCB0], NFC: [0xCCB0], NFD: [0x110E, 0x1165, 0x11BF], NFKC: [0xCCB0], NFKD: [0x110E, 0x1165, 0x11BF] }, +{ source: [0xCCB1], NFC: [0xCCB1], NFD: [0x110E, 0x1165, 0x11C0], NFKC: [0xCCB1], NFKD: [0x110E, 0x1165, 0x11C0] }, +{ source: [0xCCB2], NFC: [0xCCB2], NFD: [0x110E, 0x1165, 0x11C1], NFKC: [0xCCB2], NFKD: [0x110E, 0x1165, 0x11C1] }, +{ source: [0xCCB3], NFC: [0xCCB3], NFD: [0x110E, 0x1165, 0x11C2], NFKC: [0xCCB3], NFKD: [0x110E, 0x1165, 0x11C2] }, +{ source: [0xCCB4], NFC: [0xCCB4], NFD: [0x110E, 0x1166], NFKC: [0xCCB4], NFKD: [0x110E, 0x1166] }, +{ source: [0xCCB5], NFC: [0xCCB5], NFD: [0x110E, 0x1166, 0x11A8], NFKC: [0xCCB5], NFKD: [0x110E, 0x1166, 0x11A8] }, +{ source: [0xCCB6], NFC: [0xCCB6], NFD: [0x110E, 0x1166, 0x11A9], NFKC: [0xCCB6], NFKD: [0x110E, 0x1166, 0x11A9] }, +{ source: [0xCCB7], NFC: [0xCCB7], NFD: [0x110E, 0x1166, 0x11AA], NFKC: [0xCCB7], NFKD: [0x110E, 0x1166, 0x11AA] }, +{ source: [0xCCB8], NFC: [0xCCB8], NFD: [0x110E, 0x1166, 0x11AB], NFKC: [0xCCB8], NFKD: [0x110E, 0x1166, 0x11AB] }, +{ source: [0xCCB9], NFC: [0xCCB9], NFD: [0x110E, 0x1166, 0x11AC], NFKC: [0xCCB9], NFKD: [0x110E, 0x1166, 0x11AC] }, +{ source: [0xCCBA], NFC: [0xCCBA], NFD: [0x110E, 0x1166, 0x11AD], NFKC: [0xCCBA], NFKD: [0x110E, 0x1166, 0x11AD] }, +{ source: [0xCCBB], NFC: [0xCCBB], NFD: [0x110E, 0x1166, 0x11AE], NFKC: [0xCCBB], NFKD: [0x110E, 0x1166, 0x11AE] }, +{ source: [0xCCBC], NFC: [0xCCBC], NFD: [0x110E, 0x1166, 0x11AF], NFKC: [0xCCBC], NFKD: [0x110E, 0x1166, 0x11AF] }, +{ source: [0xCCBD], NFC: [0xCCBD], NFD: [0x110E, 0x1166, 0x11B0], NFKC: [0xCCBD], NFKD: [0x110E, 0x1166, 0x11B0] }, +{ source: [0xCCBE], NFC: [0xCCBE], NFD: [0x110E, 0x1166, 0x11B1], NFKC: [0xCCBE], NFKD: [0x110E, 0x1166, 0x11B1] }, +{ source: [0xCCBF], NFC: [0xCCBF], NFD: [0x110E, 0x1166, 0x11B2], NFKC: [0xCCBF], NFKD: [0x110E, 0x1166, 0x11B2] }, +{ source: [0xCCC0], NFC: [0xCCC0], NFD: [0x110E, 0x1166, 0x11B3], NFKC: [0xCCC0], NFKD: [0x110E, 0x1166, 0x11B3] }, +{ source: [0xCCC1], NFC: [0xCCC1], NFD: [0x110E, 0x1166, 0x11B4], NFKC: [0xCCC1], NFKD: [0x110E, 0x1166, 0x11B4] }, +{ source: [0xCCC2], NFC: [0xCCC2], NFD: [0x110E, 0x1166, 0x11B5], NFKC: [0xCCC2], NFKD: [0x110E, 0x1166, 0x11B5] }, +{ source: [0xCCC3], NFC: [0xCCC3], NFD: [0x110E, 0x1166, 0x11B6], NFKC: [0xCCC3], NFKD: [0x110E, 0x1166, 0x11B6] }, +{ source: [0xCCC4], NFC: [0xCCC4], NFD: [0x110E, 0x1166, 0x11B7], NFKC: [0xCCC4], NFKD: [0x110E, 0x1166, 0x11B7] }, +{ source: [0xCCC5], NFC: [0xCCC5], NFD: [0x110E, 0x1166, 0x11B8], NFKC: [0xCCC5], NFKD: [0x110E, 0x1166, 0x11B8] }, +{ source: [0xCCC6], NFC: [0xCCC6], NFD: [0x110E, 0x1166, 0x11B9], NFKC: [0xCCC6], NFKD: [0x110E, 0x1166, 0x11B9] }, +{ source: [0xCCC7], NFC: [0xCCC7], NFD: [0x110E, 0x1166, 0x11BA], NFKC: [0xCCC7], NFKD: [0x110E, 0x1166, 0x11BA] }, +{ source: [0xCCC8], NFC: [0xCCC8], NFD: [0x110E, 0x1166, 0x11BB], NFKC: [0xCCC8], NFKD: [0x110E, 0x1166, 0x11BB] }, +{ source: [0xCCC9], NFC: [0xCCC9], NFD: [0x110E, 0x1166, 0x11BC], NFKC: [0xCCC9], NFKD: [0x110E, 0x1166, 0x11BC] }, +{ source: [0xCCCA], NFC: [0xCCCA], NFD: [0x110E, 0x1166, 0x11BD], NFKC: [0xCCCA], NFKD: [0x110E, 0x1166, 0x11BD] }, +{ source: [0xCCCB], NFC: [0xCCCB], NFD: [0x110E, 0x1166, 0x11BE], NFKC: [0xCCCB], NFKD: [0x110E, 0x1166, 0x11BE] }, +{ source: [0xCCCC], NFC: [0xCCCC], NFD: [0x110E, 0x1166, 0x11BF], NFKC: [0xCCCC], NFKD: [0x110E, 0x1166, 0x11BF] }, +{ source: [0xCCCD], NFC: [0xCCCD], NFD: [0x110E, 0x1166, 0x11C0], NFKC: [0xCCCD], NFKD: [0x110E, 0x1166, 0x11C0] }, +{ source: [0xCCCE], NFC: [0xCCCE], NFD: [0x110E, 0x1166, 0x11C1], NFKC: [0xCCCE], NFKD: [0x110E, 0x1166, 0x11C1] }, +{ source: [0xCCCF], NFC: [0xCCCF], NFD: [0x110E, 0x1166, 0x11C2], NFKC: [0xCCCF], NFKD: [0x110E, 0x1166, 0x11C2] }, +{ source: [0xCCD0], NFC: [0xCCD0], NFD: [0x110E, 0x1167], NFKC: [0xCCD0], NFKD: [0x110E, 0x1167] }, +{ source: [0xCCD1], NFC: [0xCCD1], NFD: [0x110E, 0x1167, 0x11A8], NFKC: [0xCCD1], NFKD: [0x110E, 0x1167, 0x11A8] }, +{ source: [0xCCD2], NFC: [0xCCD2], NFD: [0x110E, 0x1167, 0x11A9], NFKC: [0xCCD2], NFKD: [0x110E, 0x1167, 0x11A9] }, +{ source: [0xCCD3], NFC: [0xCCD3], NFD: [0x110E, 0x1167, 0x11AA], NFKC: [0xCCD3], NFKD: [0x110E, 0x1167, 0x11AA] }, +{ source: [0xCCD4], NFC: [0xCCD4], NFD: [0x110E, 0x1167, 0x11AB], NFKC: [0xCCD4], NFKD: [0x110E, 0x1167, 0x11AB] }, +{ source: [0xCCD5], NFC: [0xCCD5], NFD: [0x110E, 0x1167, 0x11AC], NFKC: [0xCCD5], NFKD: [0x110E, 0x1167, 0x11AC] }, +{ source: [0xCCD6], NFC: [0xCCD6], NFD: [0x110E, 0x1167, 0x11AD], NFKC: [0xCCD6], NFKD: [0x110E, 0x1167, 0x11AD] }, +{ source: [0xCCD7], NFC: [0xCCD7], NFD: [0x110E, 0x1167, 0x11AE], NFKC: [0xCCD7], NFKD: [0x110E, 0x1167, 0x11AE] }, +{ source: [0xCCD8], NFC: [0xCCD8], NFD: [0x110E, 0x1167, 0x11AF], NFKC: [0xCCD8], NFKD: [0x110E, 0x1167, 0x11AF] }, +{ source: [0xCCD9], NFC: [0xCCD9], NFD: [0x110E, 0x1167, 0x11B0], NFKC: [0xCCD9], NFKD: [0x110E, 0x1167, 0x11B0] }, +{ source: [0xCCDA], NFC: [0xCCDA], NFD: [0x110E, 0x1167, 0x11B1], NFKC: [0xCCDA], NFKD: [0x110E, 0x1167, 0x11B1] }, +{ source: [0xCCDB], NFC: [0xCCDB], NFD: [0x110E, 0x1167, 0x11B2], NFKC: [0xCCDB], NFKD: [0x110E, 0x1167, 0x11B2] }, +{ source: [0xCCDC], NFC: [0xCCDC], NFD: [0x110E, 0x1167, 0x11B3], NFKC: [0xCCDC], NFKD: [0x110E, 0x1167, 0x11B3] }, +{ source: [0xCCDD], NFC: [0xCCDD], NFD: [0x110E, 0x1167, 0x11B4], NFKC: [0xCCDD], NFKD: [0x110E, 0x1167, 0x11B4] }, +{ source: [0xCCDE], NFC: [0xCCDE], NFD: [0x110E, 0x1167, 0x11B5], NFKC: [0xCCDE], NFKD: [0x110E, 0x1167, 0x11B5] }, +{ source: [0xCCDF], NFC: [0xCCDF], NFD: [0x110E, 0x1167, 0x11B6], NFKC: [0xCCDF], NFKD: [0x110E, 0x1167, 0x11B6] }, +{ source: [0xCCE0], NFC: [0xCCE0], NFD: [0x110E, 0x1167, 0x11B7], NFKC: [0xCCE0], NFKD: [0x110E, 0x1167, 0x11B7] }, +{ source: [0xCCE1], NFC: [0xCCE1], NFD: [0x110E, 0x1167, 0x11B8], NFKC: [0xCCE1], NFKD: [0x110E, 0x1167, 0x11B8] }, +{ source: [0xCCE2], NFC: [0xCCE2], NFD: [0x110E, 0x1167, 0x11B9], NFKC: [0xCCE2], NFKD: [0x110E, 0x1167, 0x11B9] }, +{ source: [0xCCE3], NFC: [0xCCE3], NFD: [0x110E, 0x1167, 0x11BA], NFKC: [0xCCE3], NFKD: [0x110E, 0x1167, 0x11BA] }, +{ source: [0xCCE4], NFC: [0xCCE4], NFD: [0x110E, 0x1167, 0x11BB], NFKC: [0xCCE4], NFKD: [0x110E, 0x1167, 0x11BB] }, +{ source: [0xCCE5], NFC: [0xCCE5], NFD: [0x110E, 0x1167, 0x11BC], NFKC: [0xCCE5], NFKD: [0x110E, 0x1167, 0x11BC] }, +{ source: [0xCCE6], NFC: [0xCCE6], NFD: [0x110E, 0x1167, 0x11BD], NFKC: [0xCCE6], NFKD: [0x110E, 0x1167, 0x11BD] }, +{ source: [0xCCE7], NFC: [0xCCE7], NFD: [0x110E, 0x1167, 0x11BE], NFKC: [0xCCE7], NFKD: [0x110E, 0x1167, 0x11BE] }, +{ source: [0xCCE8], NFC: [0xCCE8], NFD: [0x110E, 0x1167, 0x11BF], NFKC: [0xCCE8], NFKD: [0x110E, 0x1167, 0x11BF] }, +{ source: [0xCCE9], NFC: [0xCCE9], NFD: [0x110E, 0x1167, 0x11C0], NFKC: [0xCCE9], NFKD: [0x110E, 0x1167, 0x11C0] }, +{ source: [0xCCEA], NFC: [0xCCEA], NFD: [0x110E, 0x1167, 0x11C1], NFKC: [0xCCEA], NFKD: [0x110E, 0x1167, 0x11C1] }, +{ source: [0xCCEB], NFC: [0xCCEB], NFD: [0x110E, 0x1167, 0x11C2], NFKC: [0xCCEB], NFKD: [0x110E, 0x1167, 0x11C2] }, +{ source: [0xCCEC], NFC: [0xCCEC], NFD: [0x110E, 0x1168], NFKC: [0xCCEC], NFKD: [0x110E, 0x1168] }, +{ source: [0xCCED], NFC: [0xCCED], NFD: [0x110E, 0x1168, 0x11A8], NFKC: [0xCCED], NFKD: [0x110E, 0x1168, 0x11A8] }, +{ source: [0xCCEE], NFC: [0xCCEE], NFD: [0x110E, 0x1168, 0x11A9], NFKC: [0xCCEE], NFKD: [0x110E, 0x1168, 0x11A9] }, +{ source: [0xCCEF], NFC: [0xCCEF], NFD: [0x110E, 0x1168, 0x11AA], NFKC: [0xCCEF], NFKD: [0x110E, 0x1168, 0x11AA] }, +{ source: [0xCCF0], NFC: [0xCCF0], NFD: [0x110E, 0x1168, 0x11AB], NFKC: [0xCCF0], NFKD: [0x110E, 0x1168, 0x11AB] }, +{ source: [0xCCF1], NFC: [0xCCF1], NFD: [0x110E, 0x1168, 0x11AC], NFKC: [0xCCF1], NFKD: [0x110E, 0x1168, 0x11AC] }, +{ source: [0xCCF2], NFC: [0xCCF2], NFD: [0x110E, 0x1168, 0x11AD], NFKC: [0xCCF2], NFKD: [0x110E, 0x1168, 0x11AD] }, +{ source: [0xCCF3], NFC: [0xCCF3], NFD: [0x110E, 0x1168, 0x11AE], NFKC: [0xCCF3], NFKD: [0x110E, 0x1168, 0x11AE] }, +{ source: [0xCCF4], NFC: [0xCCF4], NFD: [0x110E, 0x1168, 0x11AF], NFKC: [0xCCF4], NFKD: [0x110E, 0x1168, 0x11AF] }, +{ source: [0xCCF5], NFC: [0xCCF5], NFD: [0x110E, 0x1168, 0x11B0], NFKC: [0xCCF5], NFKD: [0x110E, 0x1168, 0x11B0] }, +{ source: [0xCCF6], NFC: [0xCCF6], NFD: [0x110E, 0x1168, 0x11B1], NFKC: [0xCCF6], NFKD: [0x110E, 0x1168, 0x11B1] }, +{ source: [0xCCF7], NFC: [0xCCF7], NFD: [0x110E, 0x1168, 0x11B2], NFKC: [0xCCF7], NFKD: [0x110E, 0x1168, 0x11B2] }, +{ source: [0xCCF8], NFC: [0xCCF8], NFD: [0x110E, 0x1168, 0x11B3], NFKC: [0xCCF8], NFKD: [0x110E, 0x1168, 0x11B3] }, +{ source: [0xCCF9], NFC: [0xCCF9], NFD: [0x110E, 0x1168, 0x11B4], NFKC: [0xCCF9], NFKD: [0x110E, 0x1168, 0x11B4] }, +{ source: [0xCCFA], NFC: [0xCCFA], NFD: [0x110E, 0x1168, 0x11B5], NFKC: [0xCCFA], NFKD: [0x110E, 0x1168, 0x11B5] }, +{ source: [0xCCFB], NFC: [0xCCFB], NFD: [0x110E, 0x1168, 0x11B6], NFKC: [0xCCFB], NFKD: [0x110E, 0x1168, 0x11B6] }, +{ source: [0xCCFC], NFC: [0xCCFC], NFD: [0x110E, 0x1168, 0x11B7], NFKC: [0xCCFC], NFKD: [0x110E, 0x1168, 0x11B7] }, +{ source: [0xCCFD], NFC: [0xCCFD], NFD: [0x110E, 0x1168, 0x11B8], NFKC: [0xCCFD], NFKD: [0x110E, 0x1168, 0x11B8] }, +{ source: [0xCCFE], NFC: [0xCCFE], NFD: [0x110E, 0x1168, 0x11B9], NFKC: [0xCCFE], NFKD: [0x110E, 0x1168, 0x11B9] }, +{ source: [0xCCFF], NFC: [0xCCFF], NFD: [0x110E, 0x1168, 0x11BA], NFKC: [0xCCFF], NFKD: [0x110E, 0x1168, 0x11BA] }, +{ source: [0xCD00], NFC: [0xCD00], NFD: [0x110E, 0x1168, 0x11BB], NFKC: [0xCD00], NFKD: [0x110E, 0x1168, 0x11BB] }, +{ source: [0xCD01], NFC: [0xCD01], NFD: [0x110E, 0x1168, 0x11BC], NFKC: [0xCD01], NFKD: [0x110E, 0x1168, 0x11BC] }, +{ source: [0xCD02], NFC: [0xCD02], NFD: [0x110E, 0x1168, 0x11BD], NFKC: [0xCD02], NFKD: [0x110E, 0x1168, 0x11BD] }, +{ source: [0xCD03], NFC: [0xCD03], NFD: [0x110E, 0x1168, 0x11BE], NFKC: [0xCD03], NFKD: [0x110E, 0x1168, 0x11BE] }, +{ source: [0xCD04], NFC: [0xCD04], NFD: [0x110E, 0x1168, 0x11BF], NFKC: [0xCD04], NFKD: [0x110E, 0x1168, 0x11BF] }, +{ source: [0xCD05], NFC: [0xCD05], NFD: [0x110E, 0x1168, 0x11C0], NFKC: [0xCD05], NFKD: [0x110E, 0x1168, 0x11C0] }, +{ source: [0xCD06], NFC: [0xCD06], NFD: [0x110E, 0x1168, 0x11C1], NFKC: [0xCD06], NFKD: [0x110E, 0x1168, 0x11C1] }, +{ source: [0xCD07], NFC: [0xCD07], NFD: [0x110E, 0x1168, 0x11C2], NFKC: [0xCD07], NFKD: [0x110E, 0x1168, 0x11C2] }, +{ source: [0xCD08], NFC: [0xCD08], NFD: [0x110E, 0x1169], NFKC: [0xCD08], NFKD: [0x110E, 0x1169] }, +{ source: [0xCD09], NFC: [0xCD09], NFD: [0x110E, 0x1169, 0x11A8], NFKC: [0xCD09], NFKD: [0x110E, 0x1169, 0x11A8] }, +{ source: [0xCD0A], NFC: [0xCD0A], NFD: [0x110E, 0x1169, 0x11A9], NFKC: [0xCD0A], NFKD: [0x110E, 0x1169, 0x11A9] }, +{ source: [0xCD0B], NFC: [0xCD0B], NFD: [0x110E, 0x1169, 0x11AA], NFKC: [0xCD0B], NFKD: [0x110E, 0x1169, 0x11AA] }, +{ source: [0xCD0C], NFC: [0xCD0C], NFD: [0x110E, 0x1169, 0x11AB], NFKC: [0xCD0C], NFKD: [0x110E, 0x1169, 0x11AB] }, +{ source: [0xCD0D], NFC: [0xCD0D], NFD: [0x110E, 0x1169, 0x11AC], NFKC: [0xCD0D], NFKD: [0x110E, 0x1169, 0x11AC] }, +{ source: [0xCD0E], NFC: [0xCD0E], NFD: [0x110E, 0x1169, 0x11AD], NFKC: [0xCD0E], NFKD: [0x110E, 0x1169, 0x11AD] }, +{ source: [0xCD0F], NFC: [0xCD0F], NFD: [0x110E, 0x1169, 0x11AE], NFKC: [0xCD0F], NFKD: [0x110E, 0x1169, 0x11AE] }, +{ source: [0xCD10], NFC: [0xCD10], NFD: [0x110E, 0x1169, 0x11AF], NFKC: [0xCD10], NFKD: [0x110E, 0x1169, 0x11AF] }, +{ source: [0xCD11], NFC: [0xCD11], NFD: [0x110E, 0x1169, 0x11B0], NFKC: [0xCD11], NFKD: [0x110E, 0x1169, 0x11B0] }, +{ source: [0xCD12], NFC: [0xCD12], NFD: [0x110E, 0x1169, 0x11B1], NFKC: [0xCD12], NFKD: [0x110E, 0x1169, 0x11B1] }, +{ source: [0xCD13], NFC: [0xCD13], NFD: [0x110E, 0x1169, 0x11B2], NFKC: [0xCD13], NFKD: [0x110E, 0x1169, 0x11B2] }, +{ source: [0xCD14], NFC: [0xCD14], NFD: [0x110E, 0x1169, 0x11B3], NFKC: [0xCD14], NFKD: [0x110E, 0x1169, 0x11B3] }, +{ source: [0xCD15], NFC: [0xCD15], NFD: [0x110E, 0x1169, 0x11B4], NFKC: [0xCD15], NFKD: [0x110E, 0x1169, 0x11B4] }, +{ source: [0xCD16], NFC: [0xCD16], NFD: [0x110E, 0x1169, 0x11B5], NFKC: [0xCD16], NFKD: [0x110E, 0x1169, 0x11B5] }, +{ source: [0xCD17], NFC: [0xCD17], NFD: [0x110E, 0x1169, 0x11B6], NFKC: [0xCD17], NFKD: [0x110E, 0x1169, 0x11B6] }, +{ source: [0xCD18], NFC: [0xCD18], NFD: [0x110E, 0x1169, 0x11B7], NFKC: [0xCD18], NFKD: [0x110E, 0x1169, 0x11B7] }, +{ source: [0xCD19], NFC: [0xCD19], NFD: [0x110E, 0x1169, 0x11B8], NFKC: [0xCD19], NFKD: [0x110E, 0x1169, 0x11B8] }, +{ source: [0xCD1A], NFC: [0xCD1A], NFD: [0x110E, 0x1169, 0x11B9], NFKC: [0xCD1A], NFKD: [0x110E, 0x1169, 0x11B9] }, +{ source: [0xCD1B], NFC: [0xCD1B], NFD: [0x110E, 0x1169, 0x11BA], NFKC: [0xCD1B], NFKD: [0x110E, 0x1169, 0x11BA] }, +{ source: [0xCD1C], NFC: [0xCD1C], NFD: [0x110E, 0x1169, 0x11BB], NFKC: [0xCD1C], NFKD: [0x110E, 0x1169, 0x11BB] }, +{ source: [0xCD1D], NFC: [0xCD1D], NFD: [0x110E, 0x1169, 0x11BC], NFKC: [0xCD1D], NFKD: [0x110E, 0x1169, 0x11BC] }, +{ source: [0xCD1E], NFC: [0xCD1E], NFD: [0x110E, 0x1169, 0x11BD], NFKC: [0xCD1E], NFKD: [0x110E, 0x1169, 0x11BD] }, +{ source: [0xCD1F], NFC: [0xCD1F], NFD: [0x110E, 0x1169, 0x11BE], NFKC: [0xCD1F], NFKD: [0x110E, 0x1169, 0x11BE] }, +{ source: [0xCD20], NFC: [0xCD20], NFD: [0x110E, 0x1169, 0x11BF], NFKC: [0xCD20], NFKD: [0x110E, 0x1169, 0x11BF] }, +{ source: [0xCD21], NFC: [0xCD21], NFD: [0x110E, 0x1169, 0x11C0], NFKC: [0xCD21], NFKD: [0x110E, 0x1169, 0x11C0] }, +{ source: [0xCD22], NFC: [0xCD22], NFD: [0x110E, 0x1169, 0x11C1], NFKC: [0xCD22], NFKD: [0x110E, 0x1169, 0x11C1] }, +{ source: [0xCD23], NFC: [0xCD23], NFD: [0x110E, 0x1169, 0x11C2], NFKC: [0xCD23], NFKD: [0x110E, 0x1169, 0x11C2] }, +{ source: [0xCD24], NFC: [0xCD24], NFD: [0x110E, 0x116A], NFKC: [0xCD24], NFKD: [0x110E, 0x116A] }, +{ source: [0xCD25], NFC: [0xCD25], NFD: [0x110E, 0x116A, 0x11A8], NFKC: [0xCD25], NFKD: [0x110E, 0x116A, 0x11A8] }, +{ source: [0xCD26], NFC: [0xCD26], NFD: [0x110E, 0x116A, 0x11A9], NFKC: [0xCD26], NFKD: [0x110E, 0x116A, 0x11A9] }, +{ source: [0xCD27], NFC: [0xCD27], NFD: [0x110E, 0x116A, 0x11AA], NFKC: [0xCD27], NFKD: [0x110E, 0x116A, 0x11AA] }, +{ source: [0xCD28], NFC: [0xCD28], NFD: [0x110E, 0x116A, 0x11AB], NFKC: [0xCD28], NFKD: [0x110E, 0x116A, 0x11AB] }, +{ source: [0xCD29], NFC: [0xCD29], NFD: [0x110E, 0x116A, 0x11AC], NFKC: [0xCD29], NFKD: [0x110E, 0x116A, 0x11AC] }, +{ source: [0xCD2A], NFC: [0xCD2A], NFD: [0x110E, 0x116A, 0x11AD], NFKC: [0xCD2A], NFKD: [0x110E, 0x116A, 0x11AD] }, +{ source: [0xCD2B], NFC: [0xCD2B], NFD: [0x110E, 0x116A, 0x11AE], NFKC: [0xCD2B], NFKD: [0x110E, 0x116A, 0x11AE] }, +{ source: [0xCD2C], NFC: [0xCD2C], NFD: [0x110E, 0x116A, 0x11AF], NFKC: [0xCD2C], NFKD: [0x110E, 0x116A, 0x11AF] }, +{ source: [0xCD2D], NFC: [0xCD2D], NFD: [0x110E, 0x116A, 0x11B0], NFKC: [0xCD2D], NFKD: [0x110E, 0x116A, 0x11B0] }, +{ source: [0xCD2E], NFC: [0xCD2E], NFD: [0x110E, 0x116A, 0x11B1], NFKC: [0xCD2E], NFKD: [0x110E, 0x116A, 0x11B1] }, +{ source: [0xCD2F], NFC: [0xCD2F], NFD: [0x110E, 0x116A, 0x11B2], NFKC: [0xCD2F], NFKD: [0x110E, 0x116A, 0x11B2] }, +{ source: [0xCD30], NFC: [0xCD30], NFD: [0x110E, 0x116A, 0x11B3], NFKC: [0xCD30], NFKD: [0x110E, 0x116A, 0x11B3] }, +{ source: [0xCD31], NFC: [0xCD31], NFD: [0x110E, 0x116A, 0x11B4], NFKC: [0xCD31], NFKD: [0x110E, 0x116A, 0x11B4] }, +{ source: [0xCD32], NFC: [0xCD32], NFD: [0x110E, 0x116A, 0x11B5], NFKC: [0xCD32], NFKD: [0x110E, 0x116A, 0x11B5] }, +{ source: [0xCD33], NFC: [0xCD33], NFD: [0x110E, 0x116A, 0x11B6], NFKC: [0xCD33], NFKD: [0x110E, 0x116A, 0x11B6] }, +{ source: [0xCD34], NFC: [0xCD34], NFD: [0x110E, 0x116A, 0x11B7], NFKC: [0xCD34], NFKD: [0x110E, 0x116A, 0x11B7] }, +{ source: [0xCD35], NFC: [0xCD35], NFD: [0x110E, 0x116A, 0x11B8], NFKC: [0xCD35], NFKD: [0x110E, 0x116A, 0x11B8] }, +{ source: [0xCD36], NFC: [0xCD36], NFD: [0x110E, 0x116A, 0x11B9], NFKC: [0xCD36], NFKD: [0x110E, 0x116A, 0x11B9] }, +{ source: [0xCD37], NFC: [0xCD37], NFD: [0x110E, 0x116A, 0x11BA], NFKC: [0xCD37], NFKD: [0x110E, 0x116A, 0x11BA] }, +{ source: [0xCD38], NFC: [0xCD38], NFD: [0x110E, 0x116A, 0x11BB], NFKC: [0xCD38], NFKD: [0x110E, 0x116A, 0x11BB] }, +{ source: [0xCD39], NFC: [0xCD39], NFD: [0x110E, 0x116A, 0x11BC], NFKC: [0xCD39], NFKD: [0x110E, 0x116A, 0x11BC] }, +{ source: [0xCD3A], NFC: [0xCD3A], NFD: [0x110E, 0x116A, 0x11BD], NFKC: [0xCD3A], NFKD: [0x110E, 0x116A, 0x11BD] }, +{ source: [0xCD3B], NFC: [0xCD3B], NFD: [0x110E, 0x116A, 0x11BE], NFKC: [0xCD3B], NFKD: [0x110E, 0x116A, 0x11BE] }, +{ source: [0xCD3C], NFC: [0xCD3C], NFD: [0x110E, 0x116A, 0x11BF], NFKC: [0xCD3C], NFKD: [0x110E, 0x116A, 0x11BF] }, +{ source: [0xCD3D], NFC: [0xCD3D], NFD: [0x110E, 0x116A, 0x11C0], NFKC: [0xCD3D], NFKD: [0x110E, 0x116A, 0x11C0] }, +{ source: [0xCD3E], NFC: [0xCD3E], NFD: [0x110E, 0x116A, 0x11C1], NFKC: [0xCD3E], NFKD: [0x110E, 0x116A, 0x11C1] }, +{ source: [0xCD3F], NFC: [0xCD3F], NFD: [0x110E, 0x116A, 0x11C2], NFKC: [0xCD3F], NFKD: [0x110E, 0x116A, 0x11C2] }, +{ source: [0xCD40], NFC: [0xCD40], NFD: [0x110E, 0x116B], NFKC: [0xCD40], NFKD: [0x110E, 0x116B] }, +{ source: [0xCD41], NFC: [0xCD41], NFD: [0x110E, 0x116B, 0x11A8], NFKC: [0xCD41], NFKD: [0x110E, 0x116B, 0x11A8] }, +{ source: [0xCD42], NFC: [0xCD42], NFD: [0x110E, 0x116B, 0x11A9], NFKC: [0xCD42], NFKD: [0x110E, 0x116B, 0x11A9] }, +{ source: [0xCD43], NFC: [0xCD43], NFD: [0x110E, 0x116B, 0x11AA], NFKC: [0xCD43], NFKD: [0x110E, 0x116B, 0x11AA] }, +{ source: [0xCD44], NFC: [0xCD44], NFD: [0x110E, 0x116B, 0x11AB], NFKC: [0xCD44], NFKD: [0x110E, 0x116B, 0x11AB] }, +{ source: [0xCD45], NFC: [0xCD45], NFD: [0x110E, 0x116B, 0x11AC], NFKC: [0xCD45], NFKD: [0x110E, 0x116B, 0x11AC] }, +{ source: [0xCD46], NFC: [0xCD46], NFD: [0x110E, 0x116B, 0x11AD], NFKC: [0xCD46], NFKD: [0x110E, 0x116B, 0x11AD] }, +{ source: [0xCD47], NFC: [0xCD47], NFD: [0x110E, 0x116B, 0x11AE], NFKC: [0xCD47], NFKD: [0x110E, 0x116B, 0x11AE] }, +{ source: [0xCD48], NFC: [0xCD48], NFD: [0x110E, 0x116B, 0x11AF], NFKC: [0xCD48], NFKD: [0x110E, 0x116B, 0x11AF] }, +{ source: [0xCD49], NFC: [0xCD49], NFD: [0x110E, 0x116B, 0x11B0], NFKC: [0xCD49], NFKD: [0x110E, 0x116B, 0x11B0] }, +{ source: [0xCD4A], NFC: [0xCD4A], NFD: [0x110E, 0x116B, 0x11B1], NFKC: [0xCD4A], NFKD: [0x110E, 0x116B, 0x11B1] }, +{ source: [0xCD4B], NFC: [0xCD4B], NFD: [0x110E, 0x116B, 0x11B2], NFKC: [0xCD4B], NFKD: [0x110E, 0x116B, 0x11B2] }, +{ source: [0xCD4C], NFC: [0xCD4C], NFD: [0x110E, 0x116B, 0x11B3], NFKC: [0xCD4C], NFKD: [0x110E, 0x116B, 0x11B3] }, +{ source: [0xCD4D], NFC: [0xCD4D], NFD: [0x110E, 0x116B, 0x11B4], NFKC: [0xCD4D], NFKD: [0x110E, 0x116B, 0x11B4] }, +{ source: [0xCD4E], NFC: [0xCD4E], NFD: [0x110E, 0x116B, 0x11B5], NFKC: [0xCD4E], NFKD: [0x110E, 0x116B, 0x11B5] }, +{ source: [0xCD4F], NFC: [0xCD4F], NFD: [0x110E, 0x116B, 0x11B6], NFKC: [0xCD4F], NFKD: [0x110E, 0x116B, 0x11B6] }, +{ source: [0xCD50], NFC: [0xCD50], NFD: [0x110E, 0x116B, 0x11B7], NFKC: [0xCD50], NFKD: [0x110E, 0x116B, 0x11B7] }, +{ source: [0xCD51], NFC: [0xCD51], NFD: [0x110E, 0x116B, 0x11B8], NFKC: [0xCD51], NFKD: [0x110E, 0x116B, 0x11B8] }, +{ source: [0xCD52], NFC: [0xCD52], NFD: [0x110E, 0x116B, 0x11B9], NFKC: [0xCD52], NFKD: [0x110E, 0x116B, 0x11B9] }, +{ source: [0xCD53], NFC: [0xCD53], NFD: [0x110E, 0x116B, 0x11BA], NFKC: [0xCD53], NFKD: [0x110E, 0x116B, 0x11BA] }, +{ source: [0xCD54], NFC: [0xCD54], NFD: [0x110E, 0x116B, 0x11BB], NFKC: [0xCD54], NFKD: [0x110E, 0x116B, 0x11BB] }, +{ source: [0xCD55], NFC: [0xCD55], NFD: [0x110E, 0x116B, 0x11BC], NFKC: [0xCD55], NFKD: [0x110E, 0x116B, 0x11BC] }, +{ source: [0xCD56], NFC: [0xCD56], NFD: [0x110E, 0x116B, 0x11BD], NFKC: [0xCD56], NFKD: [0x110E, 0x116B, 0x11BD] }, +{ source: [0xCD57], NFC: [0xCD57], NFD: [0x110E, 0x116B, 0x11BE], NFKC: [0xCD57], NFKD: [0x110E, 0x116B, 0x11BE] }, +{ source: [0xCD58], NFC: [0xCD58], NFD: [0x110E, 0x116B, 0x11BF], NFKC: [0xCD58], NFKD: [0x110E, 0x116B, 0x11BF] }, +{ source: [0xCD59], NFC: [0xCD59], NFD: [0x110E, 0x116B, 0x11C0], NFKC: [0xCD59], NFKD: [0x110E, 0x116B, 0x11C0] }, +{ source: [0xCD5A], NFC: [0xCD5A], NFD: [0x110E, 0x116B, 0x11C1], NFKC: [0xCD5A], NFKD: [0x110E, 0x116B, 0x11C1] }, +{ source: [0xCD5B], NFC: [0xCD5B], NFD: [0x110E, 0x116B, 0x11C2], NFKC: [0xCD5B], NFKD: [0x110E, 0x116B, 0x11C2] }, +{ source: [0xCD5C], NFC: [0xCD5C], NFD: [0x110E, 0x116C], NFKC: [0xCD5C], NFKD: [0x110E, 0x116C] }, +{ source: [0xCD5D], NFC: [0xCD5D], NFD: [0x110E, 0x116C, 0x11A8], NFKC: [0xCD5D], NFKD: [0x110E, 0x116C, 0x11A8] }, +{ source: [0xCD5E], NFC: [0xCD5E], NFD: [0x110E, 0x116C, 0x11A9], NFKC: [0xCD5E], NFKD: [0x110E, 0x116C, 0x11A9] }, +{ source: [0xCD5F], NFC: [0xCD5F], NFD: [0x110E, 0x116C, 0x11AA], NFKC: [0xCD5F], NFKD: [0x110E, 0x116C, 0x11AA] }, +{ source: [0xCD60], NFC: [0xCD60], NFD: [0x110E, 0x116C, 0x11AB], NFKC: [0xCD60], NFKD: [0x110E, 0x116C, 0x11AB] }, +{ source: [0xCD61], NFC: [0xCD61], NFD: [0x110E, 0x116C, 0x11AC], NFKC: [0xCD61], NFKD: [0x110E, 0x116C, 0x11AC] }, +{ source: [0xCD62], NFC: [0xCD62], NFD: [0x110E, 0x116C, 0x11AD], NFKC: [0xCD62], NFKD: [0x110E, 0x116C, 0x11AD] }, +{ source: [0xCD63], NFC: [0xCD63], NFD: [0x110E, 0x116C, 0x11AE], NFKC: [0xCD63], NFKD: [0x110E, 0x116C, 0x11AE] }, +{ source: [0xCD64], NFC: [0xCD64], NFD: [0x110E, 0x116C, 0x11AF], NFKC: [0xCD64], NFKD: [0x110E, 0x116C, 0x11AF] }, +{ source: [0xCD65], NFC: [0xCD65], NFD: [0x110E, 0x116C, 0x11B0], NFKC: [0xCD65], NFKD: [0x110E, 0x116C, 0x11B0] }, +{ source: [0xCD66], NFC: [0xCD66], NFD: [0x110E, 0x116C, 0x11B1], NFKC: [0xCD66], NFKD: [0x110E, 0x116C, 0x11B1] }, +{ source: [0xCD67], NFC: [0xCD67], NFD: [0x110E, 0x116C, 0x11B2], NFKC: [0xCD67], NFKD: [0x110E, 0x116C, 0x11B2] }, +{ source: [0xCD68], NFC: [0xCD68], NFD: [0x110E, 0x116C, 0x11B3], NFKC: [0xCD68], NFKD: [0x110E, 0x116C, 0x11B3] }, +{ source: [0xCD69], NFC: [0xCD69], NFD: [0x110E, 0x116C, 0x11B4], NFKC: [0xCD69], NFKD: [0x110E, 0x116C, 0x11B4] }, +{ source: [0xCD6A], NFC: [0xCD6A], NFD: [0x110E, 0x116C, 0x11B5], NFKC: [0xCD6A], NFKD: [0x110E, 0x116C, 0x11B5] }, +{ source: [0xCD6B], NFC: [0xCD6B], NFD: [0x110E, 0x116C, 0x11B6], NFKC: [0xCD6B], NFKD: [0x110E, 0x116C, 0x11B6] }, +{ source: [0xCD6C], NFC: [0xCD6C], NFD: [0x110E, 0x116C, 0x11B7], NFKC: [0xCD6C], NFKD: [0x110E, 0x116C, 0x11B7] }, +{ source: [0xCD6D], NFC: [0xCD6D], NFD: [0x110E, 0x116C, 0x11B8], NFKC: [0xCD6D], NFKD: [0x110E, 0x116C, 0x11B8] }, +{ source: [0xCD6E], NFC: [0xCD6E], NFD: [0x110E, 0x116C, 0x11B9], NFKC: [0xCD6E], NFKD: [0x110E, 0x116C, 0x11B9] }, +{ source: [0xCD6F], NFC: [0xCD6F], NFD: [0x110E, 0x116C, 0x11BA], NFKC: [0xCD6F], NFKD: [0x110E, 0x116C, 0x11BA] }, +{ source: [0xCD70], NFC: [0xCD70], NFD: [0x110E, 0x116C, 0x11BB], NFKC: [0xCD70], NFKD: [0x110E, 0x116C, 0x11BB] }, +{ source: [0xCD71], NFC: [0xCD71], NFD: [0x110E, 0x116C, 0x11BC], NFKC: [0xCD71], NFKD: [0x110E, 0x116C, 0x11BC] }, +{ source: [0xCD72], NFC: [0xCD72], NFD: [0x110E, 0x116C, 0x11BD], NFKC: [0xCD72], NFKD: [0x110E, 0x116C, 0x11BD] }, +{ source: [0xCD73], NFC: [0xCD73], NFD: [0x110E, 0x116C, 0x11BE], NFKC: [0xCD73], NFKD: [0x110E, 0x116C, 0x11BE] }, +{ source: [0xCD74], NFC: [0xCD74], NFD: [0x110E, 0x116C, 0x11BF], NFKC: [0xCD74], NFKD: [0x110E, 0x116C, 0x11BF] }, +{ source: [0xCD75], NFC: [0xCD75], NFD: [0x110E, 0x116C, 0x11C0], NFKC: [0xCD75], NFKD: [0x110E, 0x116C, 0x11C0] }, +{ source: [0xCD76], NFC: [0xCD76], NFD: [0x110E, 0x116C, 0x11C1], NFKC: [0xCD76], NFKD: [0x110E, 0x116C, 0x11C1] }, +{ source: [0xCD77], NFC: [0xCD77], NFD: [0x110E, 0x116C, 0x11C2], NFKC: [0xCD77], NFKD: [0x110E, 0x116C, 0x11C2] }, +{ source: [0xCD78], NFC: [0xCD78], NFD: [0x110E, 0x116D], NFKC: [0xCD78], NFKD: [0x110E, 0x116D] }, +{ source: [0xCD79], NFC: [0xCD79], NFD: [0x110E, 0x116D, 0x11A8], NFKC: [0xCD79], NFKD: [0x110E, 0x116D, 0x11A8] }, +{ source: [0xCD7A], NFC: [0xCD7A], NFD: [0x110E, 0x116D, 0x11A9], NFKC: [0xCD7A], NFKD: [0x110E, 0x116D, 0x11A9] }, +{ source: [0xCD7B], NFC: [0xCD7B], NFD: [0x110E, 0x116D, 0x11AA], NFKC: [0xCD7B], NFKD: [0x110E, 0x116D, 0x11AA] }, +{ source: [0xCD7C], NFC: [0xCD7C], NFD: [0x110E, 0x116D, 0x11AB], NFKC: [0xCD7C], NFKD: [0x110E, 0x116D, 0x11AB] }, +{ source: [0xCD7D], NFC: [0xCD7D], NFD: [0x110E, 0x116D, 0x11AC], NFKC: [0xCD7D], NFKD: [0x110E, 0x116D, 0x11AC] }, +{ source: [0xCD7E], NFC: [0xCD7E], NFD: [0x110E, 0x116D, 0x11AD], NFKC: [0xCD7E], NFKD: [0x110E, 0x116D, 0x11AD] }, +{ source: [0xCD7F], NFC: [0xCD7F], NFD: [0x110E, 0x116D, 0x11AE], NFKC: [0xCD7F], NFKD: [0x110E, 0x116D, 0x11AE] }, +{ source: [0xCD80], NFC: [0xCD80], NFD: [0x110E, 0x116D, 0x11AF], NFKC: [0xCD80], NFKD: [0x110E, 0x116D, 0x11AF] }, +{ source: [0xCD81], NFC: [0xCD81], NFD: [0x110E, 0x116D, 0x11B0], NFKC: [0xCD81], NFKD: [0x110E, 0x116D, 0x11B0] }, +{ source: [0xCD82], NFC: [0xCD82], NFD: [0x110E, 0x116D, 0x11B1], NFKC: [0xCD82], NFKD: [0x110E, 0x116D, 0x11B1] }, +{ source: [0xCD83], NFC: [0xCD83], NFD: [0x110E, 0x116D, 0x11B2], NFKC: [0xCD83], NFKD: [0x110E, 0x116D, 0x11B2] }, +{ source: [0xCD84], NFC: [0xCD84], NFD: [0x110E, 0x116D, 0x11B3], NFKC: [0xCD84], NFKD: [0x110E, 0x116D, 0x11B3] }, +{ source: [0xCD85], NFC: [0xCD85], NFD: [0x110E, 0x116D, 0x11B4], NFKC: [0xCD85], NFKD: [0x110E, 0x116D, 0x11B4] }, +{ source: [0xCD86], NFC: [0xCD86], NFD: [0x110E, 0x116D, 0x11B5], NFKC: [0xCD86], NFKD: [0x110E, 0x116D, 0x11B5] }, +{ source: [0xCD87], NFC: [0xCD87], NFD: [0x110E, 0x116D, 0x11B6], NFKC: [0xCD87], NFKD: [0x110E, 0x116D, 0x11B6] }, +{ source: [0xCD88], NFC: [0xCD88], NFD: [0x110E, 0x116D, 0x11B7], NFKC: [0xCD88], NFKD: [0x110E, 0x116D, 0x11B7] }, +{ source: [0xCD89], NFC: [0xCD89], NFD: [0x110E, 0x116D, 0x11B8], NFKC: [0xCD89], NFKD: [0x110E, 0x116D, 0x11B8] }, +{ source: [0xCD8A], NFC: [0xCD8A], NFD: [0x110E, 0x116D, 0x11B9], NFKC: [0xCD8A], NFKD: [0x110E, 0x116D, 0x11B9] }, +{ source: [0xCD8B], NFC: [0xCD8B], NFD: [0x110E, 0x116D, 0x11BA], NFKC: [0xCD8B], NFKD: [0x110E, 0x116D, 0x11BA] }, +{ source: [0xCD8C], NFC: [0xCD8C], NFD: [0x110E, 0x116D, 0x11BB], NFKC: [0xCD8C], NFKD: [0x110E, 0x116D, 0x11BB] }, +{ source: [0xCD8D], NFC: [0xCD8D], NFD: [0x110E, 0x116D, 0x11BC], NFKC: [0xCD8D], NFKD: [0x110E, 0x116D, 0x11BC] }, +{ source: [0xCD8E], NFC: [0xCD8E], NFD: [0x110E, 0x116D, 0x11BD], NFKC: [0xCD8E], NFKD: [0x110E, 0x116D, 0x11BD] }, +{ source: [0xCD8F], NFC: [0xCD8F], NFD: [0x110E, 0x116D, 0x11BE], NFKC: [0xCD8F], NFKD: [0x110E, 0x116D, 0x11BE] }, +{ source: [0xCD90], NFC: [0xCD90], NFD: [0x110E, 0x116D, 0x11BF], NFKC: [0xCD90], NFKD: [0x110E, 0x116D, 0x11BF] }, +{ source: [0xCD91], NFC: [0xCD91], NFD: [0x110E, 0x116D, 0x11C0], NFKC: [0xCD91], NFKD: [0x110E, 0x116D, 0x11C0] }, +{ source: [0xCD92], NFC: [0xCD92], NFD: [0x110E, 0x116D, 0x11C1], NFKC: [0xCD92], NFKD: [0x110E, 0x116D, 0x11C1] }, +{ source: [0xCD93], NFC: [0xCD93], NFD: [0x110E, 0x116D, 0x11C2], NFKC: [0xCD93], NFKD: [0x110E, 0x116D, 0x11C2] }, +{ source: [0xCD94], NFC: [0xCD94], NFD: [0x110E, 0x116E], NFKC: [0xCD94], NFKD: [0x110E, 0x116E] }, +{ source: [0xCD95], NFC: [0xCD95], NFD: [0x110E, 0x116E, 0x11A8], NFKC: [0xCD95], NFKD: [0x110E, 0x116E, 0x11A8] }, +{ source: [0xCD96], NFC: [0xCD96], NFD: [0x110E, 0x116E, 0x11A9], NFKC: [0xCD96], NFKD: [0x110E, 0x116E, 0x11A9] }, +{ source: [0xCD97], NFC: [0xCD97], NFD: [0x110E, 0x116E, 0x11AA], NFKC: [0xCD97], NFKD: [0x110E, 0x116E, 0x11AA] }, +{ source: [0xCD98], NFC: [0xCD98], NFD: [0x110E, 0x116E, 0x11AB], NFKC: [0xCD98], NFKD: [0x110E, 0x116E, 0x11AB] }, +{ source: [0xCD99], NFC: [0xCD99], NFD: [0x110E, 0x116E, 0x11AC], NFKC: [0xCD99], NFKD: [0x110E, 0x116E, 0x11AC] }, +{ source: [0xCD9A], NFC: [0xCD9A], NFD: [0x110E, 0x116E, 0x11AD], NFKC: [0xCD9A], NFKD: [0x110E, 0x116E, 0x11AD] }, +{ source: [0xCD9B], NFC: [0xCD9B], NFD: [0x110E, 0x116E, 0x11AE], NFKC: [0xCD9B], NFKD: [0x110E, 0x116E, 0x11AE] }, +{ source: [0xCD9C], NFC: [0xCD9C], NFD: [0x110E, 0x116E, 0x11AF], NFKC: [0xCD9C], NFKD: [0x110E, 0x116E, 0x11AF] }, +{ source: [0xCD9D], NFC: [0xCD9D], NFD: [0x110E, 0x116E, 0x11B0], NFKC: [0xCD9D], NFKD: [0x110E, 0x116E, 0x11B0] }, +{ source: [0xCD9E], NFC: [0xCD9E], NFD: [0x110E, 0x116E, 0x11B1], NFKC: [0xCD9E], NFKD: [0x110E, 0x116E, 0x11B1] }, +{ source: [0xCD9F], NFC: [0xCD9F], NFD: [0x110E, 0x116E, 0x11B2], NFKC: [0xCD9F], NFKD: [0x110E, 0x116E, 0x11B2] }, +{ source: [0xCDA0], NFC: [0xCDA0], NFD: [0x110E, 0x116E, 0x11B3], NFKC: [0xCDA0], NFKD: [0x110E, 0x116E, 0x11B3] }, +{ source: [0xCDA1], NFC: [0xCDA1], NFD: [0x110E, 0x116E, 0x11B4], NFKC: [0xCDA1], NFKD: [0x110E, 0x116E, 0x11B4] }, +{ source: [0xCDA2], NFC: [0xCDA2], NFD: [0x110E, 0x116E, 0x11B5], NFKC: [0xCDA2], NFKD: [0x110E, 0x116E, 0x11B5] }, +{ source: [0xCDA3], NFC: [0xCDA3], NFD: [0x110E, 0x116E, 0x11B6], NFKC: [0xCDA3], NFKD: [0x110E, 0x116E, 0x11B6] }, +{ source: [0xCDA4], NFC: [0xCDA4], NFD: [0x110E, 0x116E, 0x11B7], NFKC: [0xCDA4], NFKD: [0x110E, 0x116E, 0x11B7] }, +{ source: [0xCDA5], NFC: [0xCDA5], NFD: [0x110E, 0x116E, 0x11B8], NFKC: [0xCDA5], NFKD: [0x110E, 0x116E, 0x11B8] }, +{ source: [0xCDA6], NFC: [0xCDA6], NFD: [0x110E, 0x116E, 0x11B9], NFKC: [0xCDA6], NFKD: [0x110E, 0x116E, 0x11B9] }, +{ source: [0xCDA7], NFC: [0xCDA7], NFD: [0x110E, 0x116E, 0x11BA], NFKC: [0xCDA7], NFKD: [0x110E, 0x116E, 0x11BA] }, +{ source: [0xCDA8], NFC: [0xCDA8], NFD: [0x110E, 0x116E, 0x11BB], NFKC: [0xCDA8], NFKD: [0x110E, 0x116E, 0x11BB] }, +{ source: [0xCDA9], NFC: [0xCDA9], NFD: [0x110E, 0x116E, 0x11BC], NFKC: [0xCDA9], NFKD: [0x110E, 0x116E, 0x11BC] }, +{ source: [0xCDAA], NFC: [0xCDAA], NFD: [0x110E, 0x116E, 0x11BD], NFKC: [0xCDAA], NFKD: [0x110E, 0x116E, 0x11BD] }, +{ source: [0xCDAB], NFC: [0xCDAB], NFD: [0x110E, 0x116E, 0x11BE], NFKC: [0xCDAB], NFKD: [0x110E, 0x116E, 0x11BE] }, +{ source: [0xCDAC], NFC: [0xCDAC], NFD: [0x110E, 0x116E, 0x11BF], NFKC: [0xCDAC], NFKD: [0x110E, 0x116E, 0x11BF] }, +{ source: [0xCDAD], NFC: [0xCDAD], NFD: [0x110E, 0x116E, 0x11C0], NFKC: [0xCDAD], NFKD: [0x110E, 0x116E, 0x11C0] }, +{ source: [0xCDAE], NFC: [0xCDAE], NFD: [0x110E, 0x116E, 0x11C1], NFKC: [0xCDAE], NFKD: [0x110E, 0x116E, 0x11C1] }, +{ source: [0xCDAF], NFC: [0xCDAF], NFD: [0x110E, 0x116E, 0x11C2], NFKC: [0xCDAF], NFKD: [0x110E, 0x116E, 0x11C2] }, +{ source: [0xCDB0], NFC: [0xCDB0], NFD: [0x110E, 0x116F], NFKC: [0xCDB0], NFKD: [0x110E, 0x116F] }, +{ source: [0xCDB1], NFC: [0xCDB1], NFD: [0x110E, 0x116F, 0x11A8], NFKC: [0xCDB1], NFKD: [0x110E, 0x116F, 0x11A8] }, +{ source: [0xCDB2], NFC: [0xCDB2], NFD: [0x110E, 0x116F, 0x11A9], NFKC: [0xCDB2], NFKD: [0x110E, 0x116F, 0x11A9] }, +{ source: [0xCDB3], NFC: [0xCDB3], NFD: [0x110E, 0x116F, 0x11AA], NFKC: [0xCDB3], NFKD: [0x110E, 0x116F, 0x11AA] }, +{ source: [0xCDB4], NFC: [0xCDB4], NFD: [0x110E, 0x116F, 0x11AB], NFKC: [0xCDB4], NFKD: [0x110E, 0x116F, 0x11AB] }, +{ source: [0xCDB5], NFC: [0xCDB5], NFD: [0x110E, 0x116F, 0x11AC], NFKC: [0xCDB5], NFKD: [0x110E, 0x116F, 0x11AC] }, +{ source: [0xCDB6], NFC: [0xCDB6], NFD: [0x110E, 0x116F, 0x11AD], NFKC: [0xCDB6], NFKD: [0x110E, 0x116F, 0x11AD] }, +{ source: [0xCDB7], NFC: [0xCDB7], NFD: [0x110E, 0x116F, 0x11AE], NFKC: [0xCDB7], NFKD: [0x110E, 0x116F, 0x11AE] }, +{ source: [0xCDB8], NFC: [0xCDB8], NFD: [0x110E, 0x116F, 0x11AF], NFKC: [0xCDB8], NFKD: [0x110E, 0x116F, 0x11AF] }, +{ source: [0xCDB9], NFC: [0xCDB9], NFD: [0x110E, 0x116F, 0x11B0], NFKC: [0xCDB9], NFKD: [0x110E, 0x116F, 0x11B0] }, +{ source: [0xCDBA], NFC: [0xCDBA], NFD: [0x110E, 0x116F, 0x11B1], NFKC: [0xCDBA], NFKD: [0x110E, 0x116F, 0x11B1] }, +{ source: [0xCDBB], NFC: [0xCDBB], NFD: [0x110E, 0x116F, 0x11B2], NFKC: [0xCDBB], NFKD: [0x110E, 0x116F, 0x11B2] }, +{ source: [0xCDBC], NFC: [0xCDBC], NFD: [0x110E, 0x116F, 0x11B3], NFKC: [0xCDBC], NFKD: [0x110E, 0x116F, 0x11B3] }, +{ source: [0xCDBD], NFC: [0xCDBD], NFD: [0x110E, 0x116F, 0x11B4], NFKC: [0xCDBD], NFKD: [0x110E, 0x116F, 0x11B4] }, +{ source: [0xCDBE], NFC: [0xCDBE], NFD: [0x110E, 0x116F, 0x11B5], NFKC: [0xCDBE], NFKD: [0x110E, 0x116F, 0x11B5] }, +{ source: [0xCDBF], NFC: [0xCDBF], NFD: [0x110E, 0x116F, 0x11B6], NFKC: [0xCDBF], NFKD: [0x110E, 0x116F, 0x11B6] }, +{ source: [0xCDC0], NFC: [0xCDC0], NFD: [0x110E, 0x116F, 0x11B7], NFKC: [0xCDC0], NFKD: [0x110E, 0x116F, 0x11B7] }, +{ source: [0xCDC1], NFC: [0xCDC1], NFD: [0x110E, 0x116F, 0x11B8], NFKC: [0xCDC1], NFKD: [0x110E, 0x116F, 0x11B8] }, +{ source: [0xCDC2], NFC: [0xCDC2], NFD: [0x110E, 0x116F, 0x11B9], NFKC: [0xCDC2], NFKD: [0x110E, 0x116F, 0x11B9] }, +{ source: [0xCDC3], NFC: [0xCDC3], NFD: [0x110E, 0x116F, 0x11BA], NFKC: [0xCDC3], NFKD: [0x110E, 0x116F, 0x11BA] }, +{ source: [0xCDC4], NFC: [0xCDC4], NFD: [0x110E, 0x116F, 0x11BB], NFKC: [0xCDC4], NFKD: [0x110E, 0x116F, 0x11BB] }, +{ source: [0xCDC5], NFC: [0xCDC5], NFD: [0x110E, 0x116F, 0x11BC], NFKC: [0xCDC5], NFKD: [0x110E, 0x116F, 0x11BC] }, +{ source: [0xCDC6], NFC: [0xCDC6], NFD: [0x110E, 0x116F, 0x11BD], NFKC: [0xCDC6], NFKD: [0x110E, 0x116F, 0x11BD] }, +{ source: [0xCDC7], NFC: [0xCDC7], NFD: [0x110E, 0x116F, 0x11BE], NFKC: [0xCDC7], NFKD: [0x110E, 0x116F, 0x11BE] }, +{ source: [0xCDC8], NFC: [0xCDC8], NFD: [0x110E, 0x116F, 0x11BF], NFKC: [0xCDC8], NFKD: [0x110E, 0x116F, 0x11BF] }, +{ source: [0xCDC9], NFC: [0xCDC9], NFD: [0x110E, 0x116F, 0x11C0], NFKC: [0xCDC9], NFKD: [0x110E, 0x116F, 0x11C0] }, +{ source: [0xCDCA], NFC: [0xCDCA], NFD: [0x110E, 0x116F, 0x11C1], NFKC: [0xCDCA], NFKD: [0x110E, 0x116F, 0x11C1] }, +{ source: [0xCDCB], NFC: [0xCDCB], NFD: [0x110E, 0x116F, 0x11C2], NFKC: [0xCDCB], NFKD: [0x110E, 0x116F, 0x11C2] }, +{ source: [0xCDCC], NFC: [0xCDCC], NFD: [0x110E, 0x1170], NFKC: [0xCDCC], NFKD: [0x110E, 0x1170] }, +{ source: [0xCDCD], NFC: [0xCDCD], NFD: [0x110E, 0x1170, 0x11A8], NFKC: [0xCDCD], NFKD: [0x110E, 0x1170, 0x11A8] }, +{ source: [0xCDCE], NFC: [0xCDCE], NFD: [0x110E, 0x1170, 0x11A9], NFKC: [0xCDCE], NFKD: [0x110E, 0x1170, 0x11A9] }, +{ source: [0xCDCF], NFC: [0xCDCF], NFD: [0x110E, 0x1170, 0x11AA], NFKC: [0xCDCF], NFKD: [0x110E, 0x1170, 0x11AA] }, +{ source: [0xCDD0], NFC: [0xCDD0], NFD: [0x110E, 0x1170, 0x11AB], NFKC: [0xCDD0], NFKD: [0x110E, 0x1170, 0x11AB] }, +{ source: [0xCDD1], NFC: [0xCDD1], NFD: [0x110E, 0x1170, 0x11AC], NFKC: [0xCDD1], NFKD: [0x110E, 0x1170, 0x11AC] }, +{ source: [0xCDD2], NFC: [0xCDD2], NFD: [0x110E, 0x1170, 0x11AD], NFKC: [0xCDD2], NFKD: [0x110E, 0x1170, 0x11AD] }, +{ source: [0xCDD3], NFC: [0xCDD3], NFD: [0x110E, 0x1170, 0x11AE], NFKC: [0xCDD3], NFKD: [0x110E, 0x1170, 0x11AE] }, +{ source: [0xCDD4], NFC: [0xCDD4], NFD: [0x110E, 0x1170, 0x11AF], NFKC: [0xCDD4], NFKD: [0x110E, 0x1170, 0x11AF] }, +{ source: [0xCDD5], NFC: [0xCDD5], NFD: [0x110E, 0x1170, 0x11B0], NFKC: [0xCDD5], NFKD: [0x110E, 0x1170, 0x11B0] }, +{ source: [0xCDD6], NFC: [0xCDD6], NFD: [0x110E, 0x1170, 0x11B1], NFKC: [0xCDD6], NFKD: [0x110E, 0x1170, 0x11B1] }, +{ source: [0xCDD7], NFC: [0xCDD7], NFD: [0x110E, 0x1170, 0x11B2], NFKC: [0xCDD7], NFKD: [0x110E, 0x1170, 0x11B2] }, +{ source: [0xCDD8], NFC: [0xCDD8], NFD: [0x110E, 0x1170, 0x11B3], NFKC: [0xCDD8], NFKD: [0x110E, 0x1170, 0x11B3] }, +{ source: [0xCDD9], NFC: [0xCDD9], NFD: [0x110E, 0x1170, 0x11B4], NFKC: [0xCDD9], NFKD: [0x110E, 0x1170, 0x11B4] }, +{ source: [0xCDDA], NFC: [0xCDDA], NFD: [0x110E, 0x1170, 0x11B5], NFKC: [0xCDDA], NFKD: [0x110E, 0x1170, 0x11B5] }, +{ source: [0xCDDB], NFC: [0xCDDB], NFD: [0x110E, 0x1170, 0x11B6], NFKC: [0xCDDB], NFKD: [0x110E, 0x1170, 0x11B6] }, +{ source: [0xCDDC], NFC: [0xCDDC], NFD: [0x110E, 0x1170, 0x11B7], NFKC: [0xCDDC], NFKD: [0x110E, 0x1170, 0x11B7] }, +{ source: [0xCDDD], NFC: [0xCDDD], NFD: [0x110E, 0x1170, 0x11B8], NFKC: [0xCDDD], NFKD: [0x110E, 0x1170, 0x11B8] }, +{ source: [0xCDDE], NFC: [0xCDDE], NFD: [0x110E, 0x1170, 0x11B9], NFKC: [0xCDDE], NFKD: [0x110E, 0x1170, 0x11B9] }, +{ source: [0xCDDF], NFC: [0xCDDF], NFD: [0x110E, 0x1170, 0x11BA], NFKC: [0xCDDF], NFKD: [0x110E, 0x1170, 0x11BA] }, +{ source: [0xCDE0], NFC: [0xCDE0], NFD: [0x110E, 0x1170, 0x11BB], NFKC: [0xCDE0], NFKD: [0x110E, 0x1170, 0x11BB] }, +{ source: [0xCDE1], NFC: [0xCDE1], NFD: [0x110E, 0x1170, 0x11BC], NFKC: [0xCDE1], NFKD: [0x110E, 0x1170, 0x11BC] }, +{ source: [0xCDE2], NFC: [0xCDE2], NFD: [0x110E, 0x1170, 0x11BD], NFKC: [0xCDE2], NFKD: [0x110E, 0x1170, 0x11BD] }, +{ source: [0xCDE3], NFC: [0xCDE3], NFD: [0x110E, 0x1170, 0x11BE], NFKC: [0xCDE3], NFKD: [0x110E, 0x1170, 0x11BE] }, +{ source: [0xCDE4], NFC: [0xCDE4], NFD: [0x110E, 0x1170, 0x11BF], NFKC: [0xCDE4], NFKD: [0x110E, 0x1170, 0x11BF] }, +{ source: [0xCDE5], NFC: [0xCDE5], NFD: [0x110E, 0x1170, 0x11C0], NFKC: [0xCDE5], NFKD: [0x110E, 0x1170, 0x11C0] }, +{ source: [0xCDE6], NFC: [0xCDE6], NFD: [0x110E, 0x1170, 0x11C1], NFKC: [0xCDE6], NFKD: [0x110E, 0x1170, 0x11C1] }, +{ source: [0xCDE7], NFC: [0xCDE7], NFD: [0x110E, 0x1170, 0x11C2], NFKC: [0xCDE7], NFKD: [0x110E, 0x1170, 0x11C2] }, +{ source: [0xCDE8], NFC: [0xCDE8], NFD: [0x110E, 0x1171], NFKC: [0xCDE8], NFKD: [0x110E, 0x1171] }, +{ source: [0xCDE9], NFC: [0xCDE9], NFD: [0x110E, 0x1171, 0x11A8], NFKC: [0xCDE9], NFKD: [0x110E, 0x1171, 0x11A8] }, +{ source: [0xCDEA], NFC: [0xCDEA], NFD: [0x110E, 0x1171, 0x11A9], NFKC: [0xCDEA], NFKD: [0x110E, 0x1171, 0x11A9] }, +{ source: [0xCDEB], NFC: [0xCDEB], NFD: [0x110E, 0x1171, 0x11AA], NFKC: [0xCDEB], NFKD: [0x110E, 0x1171, 0x11AA] }, +{ source: [0xCDEC], NFC: [0xCDEC], NFD: [0x110E, 0x1171, 0x11AB], NFKC: [0xCDEC], NFKD: [0x110E, 0x1171, 0x11AB] }, +{ source: [0xCDED], NFC: [0xCDED], NFD: [0x110E, 0x1171, 0x11AC], NFKC: [0xCDED], NFKD: [0x110E, 0x1171, 0x11AC] }, +{ source: [0xCDEE], NFC: [0xCDEE], NFD: [0x110E, 0x1171, 0x11AD], NFKC: [0xCDEE], NFKD: [0x110E, 0x1171, 0x11AD] }, +{ source: [0xCDEF], NFC: [0xCDEF], NFD: [0x110E, 0x1171, 0x11AE], NFKC: [0xCDEF], NFKD: [0x110E, 0x1171, 0x11AE] }, +{ source: [0xCDF0], NFC: [0xCDF0], NFD: [0x110E, 0x1171, 0x11AF], NFKC: [0xCDF0], NFKD: [0x110E, 0x1171, 0x11AF] }, +{ source: [0xCDF1], NFC: [0xCDF1], NFD: [0x110E, 0x1171, 0x11B0], NFKC: [0xCDF1], NFKD: [0x110E, 0x1171, 0x11B0] }, +{ source: [0xCDF2], NFC: [0xCDF2], NFD: [0x110E, 0x1171, 0x11B1], NFKC: [0xCDF2], NFKD: [0x110E, 0x1171, 0x11B1] }, +{ source: [0xCDF3], NFC: [0xCDF3], NFD: [0x110E, 0x1171, 0x11B2], NFKC: [0xCDF3], NFKD: [0x110E, 0x1171, 0x11B2] }, +{ source: [0xCDF4], NFC: [0xCDF4], NFD: [0x110E, 0x1171, 0x11B3], NFKC: [0xCDF4], NFKD: [0x110E, 0x1171, 0x11B3] }, +{ source: [0xCDF5], NFC: [0xCDF5], NFD: [0x110E, 0x1171, 0x11B4], NFKC: [0xCDF5], NFKD: [0x110E, 0x1171, 0x11B4] }, +{ source: [0xCDF6], NFC: [0xCDF6], NFD: [0x110E, 0x1171, 0x11B5], NFKC: [0xCDF6], NFKD: [0x110E, 0x1171, 0x11B5] }, +{ source: [0xCDF7], NFC: [0xCDF7], NFD: [0x110E, 0x1171, 0x11B6], NFKC: [0xCDF7], NFKD: [0x110E, 0x1171, 0x11B6] }, +{ source: [0xCDF8], NFC: [0xCDF8], NFD: [0x110E, 0x1171, 0x11B7], NFKC: [0xCDF8], NFKD: [0x110E, 0x1171, 0x11B7] }, +{ source: [0xCDF9], NFC: [0xCDF9], NFD: [0x110E, 0x1171, 0x11B8], NFKC: [0xCDF9], NFKD: [0x110E, 0x1171, 0x11B8] }, +{ source: [0xCDFA], NFC: [0xCDFA], NFD: [0x110E, 0x1171, 0x11B9], NFKC: [0xCDFA], NFKD: [0x110E, 0x1171, 0x11B9] }, +{ source: [0xCDFB], NFC: [0xCDFB], NFD: [0x110E, 0x1171, 0x11BA], NFKC: [0xCDFB], NFKD: [0x110E, 0x1171, 0x11BA] }, +{ source: [0xCDFC], NFC: [0xCDFC], NFD: [0x110E, 0x1171, 0x11BB], NFKC: [0xCDFC], NFKD: [0x110E, 0x1171, 0x11BB] }, +{ source: [0xCDFD], NFC: [0xCDFD], NFD: [0x110E, 0x1171, 0x11BC], NFKC: [0xCDFD], NFKD: [0x110E, 0x1171, 0x11BC] }, +{ source: [0xCDFE], NFC: [0xCDFE], NFD: [0x110E, 0x1171, 0x11BD], NFKC: [0xCDFE], NFKD: [0x110E, 0x1171, 0x11BD] }, +{ source: [0xCDFF], NFC: [0xCDFF], NFD: [0x110E, 0x1171, 0x11BE], NFKC: [0xCDFF], NFKD: [0x110E, 0x1171, 0x11BE] }, +{ source: [0xCE00], NFC: [0xCE00], NFD: [0x110E, 0x1171, 0x11BF], NFKC: [0xCE00], NFKD: [0x110E, 0x1171, 0x11BF] }, +{ source: [0xCE01], NFC: [0xCE01], NFD: [0x110E, 0x1171, 0x11C0], NFKC: [0xCE01], NFKD: [0x110E, 0x1171, 0x11C0] }, +{ source: [0xCE02], NFC: [0xCE02], NFD: [0x110E, 0x1171, 0x11C1], NFKC: [0xCE02], NFKD: [0x110E, 0x1171, 0x11C1] }, +{ source: [0xCE03], NFC: [0xCE03], NFD: [0x110E, 0x1171, 0x11C2], NFKC: [0xCE03], NFKD: [0x110E, 0x1171, 0x11C2] }, +{ source: [0xCE04], NFC: [0xCE04], NFD: [0x110E, 0x1172], NFKC: [0xCE04], NFKD: [0x110E, 0x1172] }, +{ source: [0xCE05], NFC: [0xCE05], NFD: [0x110E, 0x1172, 0x11A8], NFKC: [0xCE05], NFKD: [0x110E, 0x1172, 0x11A8] }, +{ source: [0xCE06], NFC: [0xCE06], NFD: [0x110E, 0x1172, 0x11A9], NFKC: [0xCE06], NFKD: [0x110E, 0x1172, 0x11A9] }, +{ source: [0xCE07], NFC: [0xCE07], NFD: [0x110E, 0x1172, 0x11AA], NFKC: [0xCE07], NFKD: [0x110E, 0x1172, 0x11AA] }, +{ source: [0xCE08], NFC: [0xCE08], NFD: [0x110E, 0x1172, 0x11AB], NFKC: [0xCE08], NFKD: [0x110E, 0x1172, 0x11AB] }, +{ source: [0xCE09], NFC: [0xCE09], NFD: [0x110E, 0x1172, 0x11AC], NFKC: [0xCE09], NFKD: [0x110E, 0x1172, 0x11AC] }, +{ source: [0xCE0A], NFC: [0xCE0A], NFD: [0x110E, 0x1172, 0x11AD], NFKC: [0xCE0A], NFKD: [0x110E, 0x1172, 0x11AD] }, +{ source: [0xCE0B], NFC: [0xCE0B], NFD: [0x110E, 0x1172, 0x11AE], NFKC: [0xCE0B], NFKD: [0x110E, 0x1172, 0x11AE] }, +{ source: [0xCE0C], NFC: [0xCE0C], NFD: [0x110E, 0x1172, 0x11AF], NFKC: [0xCE0C], NFKD: [0x110E, 0x1172, 0x11AF] }, +{ source: [0xCE0D], NFC: [0xCE0D], NFD: [0x110E, 0x1172, 0x11B0], NFKC: [0xCE0D], NFKD: [0x110E, 0x1172, 0x11B0] }, +{ source: [0xCE0E], NFC: [0xCE0E], NFD: [0x110E, 0x1172, 0x11B1], NFKC: [0xCE0E], NFKD: [0x110E, 0x1172, 0x11B1] }, +{ source: [0xCE0F], NFC: [0xCE0F], NFD: [0x110E, 0x1172, 0x11B2], NFKC: [0xCE0F], NFKD: [0x110E, 0x1172, 0x11B2] }, +{ source: [0xCE10], NFC: [0xCE10], NFD: [0x110E, 0x1172, 0x11B3], NFKC: [0xCE10], NFKD: [0x110E, 0x1172, 0x11B3] }, +{ source: [0xCE11], NFC: [0xCE11], NFD: [0x110E, 0x1172, 0x11B4], NFKC: [0xCE11], NFKD: [0x110E, 0x1172, 0x11B4] }, +{ source: [0xCE12], NFC: [0xCE12], NFD: [0x110E, 0x1172, 0x11B5], NFKC: [0xCE12], NFKD: [0x110E, 0x1172, 0x11B5] }, +{ source: [0xCE13], NFC: [0xCE13], NFD: [0x110E, 0x1172, 0x11B6], NFKC: [0xCE13], NFKD: [0x110E, 0x1172, 0x11B6] }, +{ source: [0xCE14], NFC: [0xCE14], NFD: [0x110E, 0x1172, 0x11B7], NFKC: [0xCE14], NFKD: [0x110E, 0x1172, 0x11B7] }, +{ source: [0xCE15], NFC: [0xCE15], NFD: [0x110E, 0x1172, 0x11B8], NFKC: [0xCE15], NFKD: [0x110E, 0x1172, 0x11B8] }, +{ source: [0xCE16], NFC: [0xCE16], NFD: [0x110E, 0x1172, 0x11B9], NFKC: [0xCE16], NFKD: [0x110E, 0x1172, 0x11B9] }, +{ source: [0xCE17], NFC: [0xCE17], NFD: [0x110E, 0x1172, 0x11BA], NFKC: [0xCE17], NFKD: [0x110E, 0x1172, 0x11BA] }, +{ source: [0xCE18], NFC: [0xCE18], NFD: [0x110E, 0x1172, 0x11BB], NFKC: [0xCE18], NFKD: [0x110E, 0x1172, 0x11BB] }, +{ source: [0xCE19], NFC: [0xCE19], NFD: [0x110E, 0x1172, 0x11BC], NFKC: [0xCE19], NFKD: [0x110E, 0x1172, 0x11BC] }, +{ source: [0xCE1A], NFC: [0xCE1A], NFD: [0x110E, 0x1172, 0x11BD], NFKC: [0xCE1A], NFKD: [0x110E, 0x1172, 0x11BD] }, +{ source: [0xCE1B], NFC: [0xCE1B], NFD: [0x110E, 0x1172, 0x11BE], NFKC: [0xCE1B], NFKD: [0x110E, 0x1172, 0x11BE] }, +{ source: [0xCE1C], NFC: [0xCE1C], NFD: [0x110E, 0x1172, 0x11BF], NFKC: [0xCE1C], NFKD: [0x110E, 0x1172, 0x11BF] }, +{ source: [0xCE1D], NFC: [0xCE1D], NFD: [0x110E, 0x1172, 0x11C0], NFKC: [0xCE1D], NFKD: [0x110E, 0x1172, 0x11C0] }, +{ source: [0xCE1E], NFC: [0xCE1E], NFD: [0x110E, 0x1172, 0x11C1], NFKC: [0xCE1E], NFKD: [0x110E, 0x1172, 0x11C1] }, +{ source: [0xCE1F], NFC: [0xCE1F], NFD: [0x110E, 0x1172, 0x11C2], NFKC: [0xCE1F], NFKD: [0x110E, 0x1172, 0x11C2] }, +{ source: [0xCE20], NFC: [0xCE20], NFD: [0x110E, 0x1173], NFKC: [0xCE20], NFKD: [0x110E, 0x1173] }, +{ source: [0xCE21], NFC: [0xCE21], NFD: [0x110E, 0x1173, 0x11A8], NFKC: [0xCE21], NFKD: [0x110E, 0x1173, 0x11A8] }, +{ source: [0xCE22], NFC: [0xCE22], NFD: [0x110E, 0x1173, 0x11A9], NFKC: [0xCE22], NFKD: [0x110E, 0x1173, 0x11A9] }, +{ source: [0xCE23], NFC: [0xCE23], NFD: [0x110E, 0x1173, 0x11AA], NFKC: [0xCE23], NFKD: [0x110E, 0x1173, 0x11AA] }, +{ source: [0xCE24], NFC: [0xCE24], NFD: [0x110E, 0x1173, 0x11AB], NFKC: [0xCE24], NFKD: [0x110E, 0x1173, 0x11AB] }, +{ source: [0xCE25], NFC: [0xCE25], NFD: [0x110E, 0x1173, 0x11AC], NFKC: [0xCE25], NFKD: [0x110E, 0x1173, 0x11AC] }, +{ source: [0xCE26], NFC: [0xCE26], NFD: [0x110E, 0x1173, 0x11AD], NFKC: [0xCE26], NFKD: [0x110E, 0x1173, 0x11AD] }, +{ source: [0xCE27], NFC: [0xCE27], NFD: [0x110E, 0x1173, 0x11AE], NFKC: [0xCE27], NFKD: [0x110E, 0x1173, 0x11AE] }, +{ source: [0xCE28], NFC: [0xCE28], NFD: [0x110E, 0x1173, 0x11AF], NFKC: [0xCE28], NFKD: [0x110E, 0x1173, 0x11AF] }, +{ source: [0xCE29], NFC: [0xCE29], NFD: [0x110E, 0x1173, 0x11B0], NFKC: [0xCE29], NFKD: [0x110E, 0x1173, 0x11B0] }, +{ source: [0xCE2A], NFC: [0xCE2A], NFD: [0x110E, 0x1173, 0x11B1], NFKC: [0xCE2A], NFKD: [0x110E, 0x1173, 0x11B1] }, +{ source: [0xCE2B], NFC: [0xCE2B], NFD: [0x110E, 0x1173, 0x11B2], NFKC: [0xCE2B], NFKD: [0x110E, 0x1173, 0x11B2] }, +{ source: [0xCE2C], NFC: [0xCE2C], NFD: [0x110E, 0x1173, 0x11B3], NFKC: [0xCE2C], NFKD: [0x110E, 0x1173, 0x11B3] }, +{ source: [0xCE2D], NFC: [0xCE2D], NFD: [0x110E, 0x1173, 0x11B4], NFKC: [0xCE2D], NFKD: [0x110E, 0x1173, 0x11B4] }, +{ source: [0xCE2E], NFC: [0xCE2E], NFD: [0x110E, 0x1173, 0x11B5], NFKC: [0xCE2E], NFKD: [0x110E, 0x1173, 0x11B5] }, +{ source: [0xCE2F], NFC: [0xCE2F], NFD: [0x110E, 0x1173, 0x11B6], NFKC: [0xCE2F], NFKD: [0x110E, 0x1173, 0x11B6] }, +{ source: [0xCE30], NFC: [0xCE30], NFD: [0x110E, 0x1173, 0x11B7], NFKC: [0xCE30], NFKD: [0x110E, 0x1173, 0x11B7] }, +{ source: [0xCE31], NFC: [0xCE31], NFD: [0x110E, 0x1173, 0x11B8], NFKC: [0xCE31], NFKD: [0x110E, 0x1173, 0x11B8] }, +{ source: [0xCE32], NFC: [0xCE32], NFD: [0x110E, 0x1173, 0x11B9], NFKC: [0xCE32], NFKD: [0x110E, 0x1173, 0x11B9] }, +{ source: [0xCE33], NFC: [0xCE33], NFD: [0x110E, 0x1173, 0x11BA], NFKC: [0xCE33], NFKD: [0x110E, 0x1173, 0x11BA] }, +{ source: [0xCE34], NFC: [0xCE34], NFD: [0x110E, 0x1173, 0x11BB], NFKC: [0xCE34], NFKD: [0x110E, 0x1173, 0x11BB] }, +{ source: [0xCE35], NFC: [0xCE35], NFD: [0x110E, 0x1173, 0x11BC], NFKC: [0xCE35], NFKD: [0x110E, 0x1173, 0x11BC] }, +{ source: [0xCE36], NFC: [0xCE36], NFD: [0x110E, 0x1173, 0x11BD], NFKC: [0xCE36], NFKD: [0x110E, 0x1173, 0x11BD] }, +{ source: [0xCE37], NFC: [0xCE37], NFD: [0x110E, 0x1173, 0x11BE], NFKC: [0xCE37], NFKD: [0x110E, 0x1173, 0x11BE] }, +{ source: [0xCE38], NFC: [0xCE38], NFD: [0x110E, 0x1173, 0x11BF], NFKC: [0xCE38], NFKD: [0x110E, 0x1173, 0x11BF] }, +{ source: [0xCE39], NFC: [0xCE39], NFD: [0x110E, 0x1173, 0x11C0], NFKC: [0xCE39], NFKD: [0x110E, 0x1173, 0x11C0] }, +{ source: [0xCE3A], NFC: [0xCE3A], NFD: [0x110E, 0x1173, 0x11C1], NFKC: [0xCE3A], NFKD: [0x110E, 0x1173, 0x11C1] }, +{ source: [0xCE3B], NFC: [0xCE3B], NFD: [0x110E, 0x1173, 0x11C2], NFKC: [0xCE3B], NFKD: [0x110E, 0x1173, 0x11C2] }, +{ source: [0xCE3C], NFC: [0xCE3C], NFD: [0x110E, 0x1174], NFKC: [0xCE3C], NFKD: [0x110E, 0x1174] }, +{ source: [0xCE3D], NFC: [0xCE3D], NFD: [0x110E, 0x1174, 0x11A8], NFKC: [0xCE3D], NFKD: [0x110E, 0x1174, 0x11A8] }, +{ source: [0xCE3E], NFC: [0xCE3E], NFD: [0x110E, 0x1174, 0x11A9], NFKC: [0xCE3E], NFKD: [0x110E, 0x1174, 0x11A9] }, +{ source: [0xCE3F], NFC: [0xCE3F], NFD: [0x110E, 0x1174, 0x11AA], NFKC: [0xCE3F], NFKD: [0x110E, 0x1174, 0x11AA] }, +{ source: [0xCE40], NFC: [0xCE40], NFD: [0x110E, 0x1174, 0x11AB], NFKC: [0xCE40], NFKD: [0x110E, 0x1174, 0x11AB] }, +{ source: [0xCE41], NFC: [0xCE41], NFD: [0x110E, 0x1174, 0x11AC], NFKC: [0xCE41], NFKD: [0x110E, 0x1174, 0x11AC] }, +{ source: [0xCE42], NFC: [0xCE42], NFD: [0x110E, 0x1174, 0x11AD], NFKC: [0xCE42], NFKD: [0x110E, 0x1174, 0x11AD] }, +{ source: [0xCE43], NFC: [0xCE43], NFD: [0x110E, 0x1174, 0x11AE], NFKC: [0xCE43], NFKD: [0x110E, 0x1174, 0x11AE] }, +{ source: [0xCE44], NFC: [0xCE44], NFD: [0x110E, 0x1174, 0x11AF], NFKC: [0xCE44], NFKD: [0x110E, 0x1174, 0x11AF] }, +{ source: [0xCE45], NFC: [0xCE45], NFD: [0x110E, 0x1174, 0x11B0], NFKC: [0xCE45], NFKD: [0x110E, 0x1174, 0x11B0] }, +{ source: [0xCE46], NFC: [0xCE46], NFD: [0x110E, 0x1174, 0x11B1], NFKC: [0xCE46], NFKD: [0x110E, 0x1174, 0x11B1] }, +{ source: [0xCE47], NFC: [0xCE47], NFD: [0x110E, 0x1174, 0x11B2], NFKC: [0xCE47], NFKD: [0x110E, 0x1174, 0x11B2] }, +{ source: [0xCE48], NFC: [0xCE48], NFD: [0x110E, 0x1174, 0x11B3], NFKC: [0xCE48], NFKD: [0x110E, 0x1174, 0x11B3] }, +{ source: [0xCE49], NFC: [0xCE49], NFD: [0x110E, 0x1174, 0x11B4], NFKC: [0xCE49], NFKD: [0x110E, 0x1174, 0x11B4] }, +{ source: [0xCE4A], NFC: [0xCE4A], NFD: [0x110E, 0x1174, 0x11B5], NFKC: [0xCE4A], NFKD: [0x110E, 0x1174, 0x11B5] }, +{ source: [0xCE4B], NFC: [0xCE4B], NFD: [0x110E, 0x1174, 0x11B6], NFKC: [0xCE4B], NFKD: [0x110E, 0x1174, 0x11B6] }, +{ source: [0xCE4C], NFC: [0xCE4C], NFD: [0x110E, 0x1174, 0x11B7], NFKC: [0xCE4C], NFKD: [0x110E, 0x1174, 0x11B7] }, +{ source: [0xCE4D], NFC: [0xCE4D], NFD: [0x110E, 0x1174, 0x11B8], NFKC: [0xCE4D], NFKD: [0x110E, 0x1174, 0x11B8] }, +{ source: [0xCE4E], NFC: [0xCE4E], NFD: [0x110E, 0x1174, 0x11B9], NFKC: [0xCE4E], NFKD: [0x110E, 0x1174, 0x11B9] }, +{ source: [0xCE4F], NFC: [0xCE4F], NFD: [0x110E, 0x1174, 0x11BA], NFKC: [0xCE4F], NFKD: [0x110E, 0x1174, 0x11BA] }, +{ source: [0xCE50], NFC: [0xCE50], NFD: [0x110E, 0x1174, 0x11BB], NFKC: [0xCE50], NFKD: [0x110E, 0x1174, 0x11BB] }, +{ source: [0xCE51], NFC: [0xCE51], NFD: [0x110E, 0x1174, 0x11BC], NFKC: [0xCE51], NFKD: [0x110E, 0x1174, 0x11BC] }, +{ source: [0xCE52], NFC: [0xCE52], NFD: [0x110E, 0x1174, 0x11BD], NFKC: [0xCE52], NFKD: [0x110E, 0x1174, 0x11BD] }, +{ source: [0xCE53], NFC: [0xCE53], NFD: [0x110E, 0x1174, 0x11BE], NFKC: [0xCE53], NFKD: [0x110E, 0x1174, 0x11BE] }, +{ source: [0xCE54], NFC: [0xCE54], NFD: [0x110E, 0x1174, 0x11BF], NFKC: [0xCE54], NFKD: [0x110E, 0x1174, 0x11BF] }, +{ source: [0xCE55], NFC: [0xCE55], NFD: [0x110E, 0x1174, 0x11C0], NFKC: [0xCE55], NFKD: [0x110E, 0x1174, 0x11C0] }, +{ source: [0xCE56], NFC: [0xCE56], NFD: [0x110E, 0x1174, 0x11C1], NFKC: [0xCE56], NFKD: [0x110E, 0x1174, 0x11C1] }, +{ source: [0xCE57], NFC: [0xCE57], NFD: [0x110E, 0x1174, 0x11C2], NFKC: [0xCE57], NFKD: [0x110E, 0x1174, 0x11C2] }, +{ source: [0xCE58], NFC: [0xCE58], NFD: [0x110E, 0x1175], NFKC: [0xCE58], NFKD: [0x110E, 0x1175] }, +{ source: [0xCE59], NFC: [0xCE59], NFD: [0x110E, 0x1175, 0x11A8], NFKC: [0xCE59], NFKD: [0x110E, 0x1175, 0x11A8] }, +{ source: [0xCE5A], NFC: [0xCE5A], NFD: [0x110E, 0x1175, 0x11A9], NFKC: [0xCE5A], NFKD: [0x110E, 0x1175, 0x11A9] }, +{ source: [0xCE5B], NFC: [0xCE5B], NFD: [0x110E, 0x1175, 0x11AA], NFKC: [0xCE5B], NFKD: [0x110E, 0x1175, 0x11AA] }, +{ source: [0xCE5C], NFC: [0xCE5C], NFD: [0x110E, 0x1175, 0x11AB], NFKC: [0xCE5C], NFKD: [0x110E, 0x1175, 0x11AB] }, +{ source: [0xCE5D], NFC: [0xCE5D], NFD: [0x110E, 0x1175, 0x11AC], NFKC: [0xCE5D], NFKD: [0x110E, 0x1175, 0x11AC] }, +{ source: [0xCE5E], NFC: [0xCE5E], NFD: [0x110E, 0x1175, 0x11AD], NFKC: [0xCE5E], NFKD: [0x110E, 0x1175, 0x11AD] }, +{ source: [0xCE5F], NFC: [0xCE5F], NFD: [0x110E, 0x1175, 0x11AE], NFKC: [0xCE5F], NFKD: [0x110E, 0x1175, 0x11AE] }, +{ source: [0xCE60], NFC: [0xCE60], NFD: [0x110E, 0x1175, 0x11AF], NFKC: [0xCE60], NFKD: [0x110E, 0x1175, 0x11AF] }, +{ source: [0xCE61], NFC: [0xCE61], NFD: [0x110E, 0x1175, 0x11B0], NFKC: [0xCE61], NFKD: [0x110E, 0x1175, 0x11B0] }, +{ source: [0xCE62], NFC: [0xCE62], NFD: [0x110E, 0x1175, 0x11B1], NFKC: [0xCE62], NFKD: [0x110E, 0x1175, 0x11B1] }, +{ source: [0xCE63], NFC: [0xCE63], NFD: [0x110E, 0x1175, 0x11B2], NFKC: [0xCE63], NFKD: [0x110E, 0x1175, 0x11B2] }, +{ source: [0xCE64], NFC: [0xCE64], NFD: [0x110E, 0x1175, 0x11B3], NFKC: [0xCE64], NFKD: [0x110E, 0x1175, 0x11B3] }, +{ source: [0xCE65], NFC: [0xCE65], NFD: [0x110E, 0x1175, 0x11B4], NFKC: [0xCE65], NFKD: [0x110E, 0x1175, 0x11B4] }, +{ source: [0xCE66], NFC: [0xCE66], NFD: [0x110E, 0x1175, 0x11B5], NFKC: [0xCE66], NFKD: [0x110E, 0x1175, 0x11B5] }, +{ source: [0xCE67], NFC: [0xCE67], NFD: [0x110E, 0x1175, 0x11B6], NFKC: [0xCE67], NFKD: [0x110E, 0x1175, 0x11B6] }, +{ source: [0xCE68], NFC: [0xCE68], NFD: [0x110E, 0x1175, 0x11B7], NFKC: [0xCE68], NFKD: [0x110E, 0x1175, 0x11B7] }, +{ source: [0xCE69], NFC: [0xCE69], NFD: [0x110E, 0x1175, 0x11B8], NFKC: [0xCE69], NFKD: [0x110E, 0x1175, 0x11B8] }, +{ source: [0xCE6A], NFC: [0xCE6A], NFD: [0x110E, 0x1175, 0x11B9], NFKC: [0xCE6A], NFKD: [0x110E, 0x1175, 0x11B9] }, +{ source: [0xCE6B], NFC: [0xCE6B], NFD: [0x110E, 0x1175, 0x11BA], NFKC: [0xCE6B], NFKD: [0x110E, 0x1175, 0x11BA] }, +{ source: [0xCE6C], NFC: [0xCE6C], NFD: [0x110E, 0x1175, 0x11BB], NFKC: [0xCE6C], NFKD: [0x110E, 0x1175, 0x11BB] }, +{ source: [0xCE6D], NFC: [0xCE6D], NFD: [0x110E, 0x1175, 0x11BC], NFKC: [0xCE6D], NFKD: [0x110E, 0x1175, 0x11BC] }, +{ source: [0xCE6E], NFC: [0xCE6E], NFD: [0x110E, 0x1175, 0x11BD], NFKC: [0xCE6E], NFKD: [0x110E, 0x1175, 0x11BD] }, +{ source: [0xCE6F], NFC: [0xCE6F], NFD: [0x110E, 0x1175, 0x11BE], NFKC: [0xCE6F], NFKD: [0x110E, 0x1175, 0x11BE] }, +{ source: [0xCE70], NFC: [0xCE70], NFD: [0x110E, 0x1175, 0x11BF], NFKC: [0xCE70], NFKD: [0x110E, 0x1175, 0x11BF] }, +{ source: [0xCE71], NFC: [0xCE71], NFD: [0x110E, 0x1175, 0x11C0], NFKC: [0xCE71], NFKD: [0x110E, 0x1175, 0x11C0] }, +{ source: [0xCE72], NFC: [0xCE72], NFD: [0x110E, 0x1175, 0x11C1], NFKC: [0xCE72], NFKD: [0x110E, 0x1175, 0x11C1] }, +{ source: [0xCE73], NFC: [0xCE73], NFD: [0x110E, 0x1175, 0x11C2], NFKC: [0xCE73], NFKD: [0x110E, 0x1175, 0x11C2] }, +{ source: [0xCE74], NFC: [0xCE74], NFD: [0x110F, 0x1161], NFKC: [0xCE74], NFKD: [0x110F, 0x1161] }, +{ source: [0xCE75], NFC: [0xCE75], NFD: [0x110F, 0x1161, 0x11A8], NFKC: [0xCE75], NFKD: [0x110F, 0x1161, 0x11A8] }, +{ source: [0xCE76], NFC: [0xCE76], NFD: [0x110F, 0x1161, 0x11A9], NFKC: [0xCE76], NFKD: [0x110F, 0x1161, 0x11A9] }, +{ source: [0xCE77], NFC: [0xCE77], NFD: [0x110F, 0x1161, 0x11AA], NFKC: [0xCE77], NFKD: [0x110F, 0x1161, 0x11AA] }, +{ source: [0xCE78], NFC: [0xCE78], NFD: [0x110F, 0x1161, 0x11AB], NFKC: [0xCE78], NFKD: [0x110F, 0x1161, 0x11AB] }, +{ source: [0xCE79], NFC: [0xCE79], NFD: [0x110F, 0x1161, 0x11AC], NFKC: [0xCE79], NFKD: [0x110F, 0x1161, 0x11AC] }, +{ source: [0xCE7A], NFC: [0xCE7A], NFD: [0x110F, 0x1161, 0x11AD], NFKC: [0xCE7A], NFKD: [0x110F, 0x1161, 0x11AD] }, +{ source: [0xCE7B], NFC: [0xCE7B], NFD: [0x110F, 0x1161, 0x11AE], NFKC: [0xCE7B], NFKD: [0x110F, 0x1161, 0x11AE] }, +{ source: [0xCE7C], NFC: [0xCE7C], NFD: [0x110F, 0x1161, 0x11AF], NFKC: [0xCE7C], NFKD: [0x110F, 0x1161, 0x11AF] }, +{ source: [0xCE7D], NFC: [0xCE7D], NFD: [0x110F, 0x1161, 0x11B0], NFKC: [0xCE7D], NFKD: [0x110F, 0x1161, 0x11B0] }, +{ source: [0xCE7E], NFC: [0xCE7E], NFD: [0x110F, 0x1161, 0x11B1], NFKC: [0xCE7E], NFKD: [0x110F, 0x1161, 0x11B1] }, +{ source: [0xCE7F], NFC: [0xCE7F], NFD: [0x110F, 0x1161, 0x11B2], NFKC: [0xCE7F], NFKD: [0x110F, 0x1161, 0x11B2] }, +{ source: [0xCE80], NFC: [0xCE80], NFD: [0x110F, 0x1161, 0x11B3], NFKC: [0xCE80], NFKD: [0x110F, 0x1161, 0x11B3] }, +{ source: [0xCE81], NFC: [0xCE81], NFD: [0x110F, 0x1161, 0x11B4], NFKC: [0xCE81], NFKD: [0x110F, 0x1161, 0x11B4] }, +{ source: [0xCE82], NFC: [0xCE82], NFD: [0x110F, 0x1161, 0x11B5], NFKC: [0xCE82], NFKD: [0x110F, 0x1161, 0x11B5] }, +{ source: [0xCE83], NFC: [0xCE83], NFD: [0x110F, 0x1161, 0x11B6], NFKC: [0xCE83], NFKD: [0x110F, 0x1161, 0x11B6] }, +{ source: [0xCE84], NFC: [0xCE84], NFD: [0x110F, 0x1161, 0x11B7], NFKC: [0xCE84], NFKD: [0x110F, 0x1161, 0x11B7] }, +{ source: [0xCE85], NFC: [0xCE85], NFD: [0x110F, 0x1161, 0x11B8], NFKC: [0xCE85], NFKD: [0x110F, 0x1161, 0x11B8] }, +{ source: [0xCE86], NFC: [0xCE86], NFD: [0x110F, 0x1161, 0x11B9], NFKC: [0xCE86], NFKD: [0x110F, 0x1161, 0x11B9] }, +{ source: [0xCE87], NFC: [0xCE87], NFD: [0x110F, 0x1161, 0x11BA], NFKC: [0xCE87], NFKD: [0x110F, 0x1161, 0x11BA] }, +{ source: [0xCE88], NFC: [0xCE88], NFD: [0x110F, 0x1161, 0x11BB], NFKC: [0xCE88], NFKD: [0x110F, 0x1161, 0x11BB] }, +{ source: [0xCE89], NFC: [0xCE89], NFD: [0x110F, 0x1161, 0x11BC], NFKC: [0xCE89], NFKD: [0x110F, 0x1161, 0x11BC] }, +{ source: [0xCE8A], NFC: [0xCE8A], NFD: [0x110F, 0x1161, 0x11BD], NFKC: [0xCE8A], NFKD: [0x110F, 0x1161, 0x11BD] }, +{ source: [0xCE8B], NFC: [0xCE8B], NFD: [0x110F, 0x1161, 0x11BE], NFKC: [0xCE8B], NFKD: [0x110F, 0x1161, 0x11BE] }, +{ source: [0xCE8C], NFC: [0xCE8C], NFD: [0x110F, 0x1161, 0x11BF], NFKC: [0xCE8C], NFKD: [0x110F, 0x1161, 0x11BF] }, +{ source: [0xCE8D], NFC: [0xCE8D], NFD: [0x110F, 0x1161, 0x11C0], NFKC: [0xCE8D], NFKD: [0x110F, 0x1161, 0x11C0] }, +{ source: [0xCE8E], NFC: [0xCE8E], NFD: [0x110F, 0x1161, 0x11C1], NFKC: [0xCE8E], NFKD: [0x110F, 0x1161, 0x11C1] }, +{ source: [0xCE8F], NFC: [0xCE8F], NFD: [0x110F, 0x1161, 0x11C2], NFKC: [0xCE8F], NFKD: [0x110F, 0x1161, 0x11C2] }, +{ source: [0xCE90], NFC: [0xCE90], NFD: [0x110F, 0x1162], NFKC: [0xCE90], NFKD: [0x110F, 0x1162] }, +{ source: [0xCE91], NFC: [0xCE91], NFD: [0x110F, 0x1162, 0x11A8], NFKC: [0xCE91], NFKD: [0x110F, 0x1162, 0x11A8] }, +{ source: [0xCE92], NFC: [0xCE92], NFD: [0x110F, 0x1162, 0x11A9], NFKC: [0xCE92], NFKD: [0x110F, 0x1162, 0x11A9] }, +{ source: [0xCE93], NFC: [0xCE93], NFD: [0x110F, 0x1162, 0x11AA], NFKC: [0xCE93], NFKD: [0x110F, 0x1162, 0x11AA] }, +{ source: [0xCE94], NFC: [0xCE94], NFD: [0x110F, 0x1162, 0x11AB], NFKC: [0xCE94], NFKD: [0x110F, 0x1162, 0x11AB] }, +{ source: [0xCE95], NFC: [0xCE95], NFD: [0x110F, 0x1162, 0x11AC], NFKC: [0xCE95], NFKD: [0x110F, 0x1162, 0x11AC] }, +{ source: [0xCE96], NFC: [0xCE96], NFD: [0x110F, 0x1162, 0x11AD], NFKC: [0xCE96], NFKD: [0x110F, 0x1162, 0x11AD] }, +{ source: [0xCE97], NFC: [0xCE97], NFD: [0x110F, 0x1162, 0x11AE], NFKC: [0xCE97], NFKD: [0x110F, 0x1162, 0x11AE] }, +{ source: [0xCE98], NFC: [0xCE98], NFD: [0x110F, 0x1162, 0x11AF], NFKC: [0xCE98], NFKD: [0x110F, 0x1162, 0x11AF] }, +{ source: [0xCE99], NFC: [0xCE99], NFD: [0x110F, 0x1162, 0x11B0], NFKC: [0xCE99], NFKD: [0x110F, 0x1162, 0x11B0] }, +{ source: [0xCE9A], NFC: [0xCE9A], NFD: [0x110F, 0x1162, 0x11B1], NFKC: [0xCE9A], NFKD: [0x110F, 0x1162, 0x11B1] }, +{ source: [0xCE9B], NFC: [0xCE9B], NFD: [0x110F, 0x1162, 0x11B2], NFKC: [0xCE9B], NFKD: [0x110F, 0x1162, 0x11B2] }, +{ source: [0xCE9C], NFC: [0xCE9C], NFD: [0x110F, 0x1162, 0x11B3], NFKC: [0xCE9C], NFKD: [0x110F, 0x1162, 0x11B3] }, +{ source: [0xCE9D], NFC: [0xCE9D], NFD: [0x110F, 0x1162, 0x11B4], NFKC: [0xCE9D], NFKD: [0x110F, 0x1162, 0x11B4] }, +{ source: [0xCE9E], NFC: [0xCE9E], NFD: [0x110F, 0x1162, 0x11B5], NFKC: [0xCE9E], NFKD: [0x110F, 0x1162, 0x11B5] }, +{ source: [0xCE9F], NFC: [0xCE9F], NFD: [0x110F, 0x1162, 0x11B6], NFKC: [0xCE9F], NFKD: [0x110F, 0x1162, 0x11B6] }, +{ source: [0xCEA0], NFC: [0xCEA0], NFD: [0x110F, 0x1162, 0x11B7], NFKC: [0xCEA0], NFKD: [0x110F, 0x1162, 0x11B7] }, +{ source: [0xCEA1], NFC: [0xCEA1], NFD: [0x110F, 0x1162, 0x11B8], NFKC: [0xCEA1], NFKD: [0x110F, 0x1162, 0x11B8] }, +{ source: [0xCEA2], NFC: [0xCEA2], NFD: [0x110F, 0x1162, 0x11B9], NFKC: [0xCEA2], NFKD: [0x110F, 0x1162, 0x11B9] }, +{ source: [0xCEA3], NFC: [0xCEA3], NFD: [0x110F, 0x1162, 0x11BA], NFKC: [0xCEA3], NFKD: [0x110F, 0x1162, 0x11BA] }, +{ source: [0xCEA4], NFC: [0xCEA4], NFD: [0x110F, 0x1162, 0x11BB], NFKC: [0xCEA4], NFKD: [0x110F, 0x1162, 0x11BB] }, +{ source: [0xCEA5], NFC: [0xCEA5], NFD: [0x110F, 0x1162, 0x11BC], NFKC: [0xCEA5], NFKD: [0x110F, 0x1162, 0x11BC] }, +{ source: [0xCEA6], NFC: [0xCEA6], NFD: [0x110F, 0x1162, 0x11BD], NFKC: [0xCEA6], NFKD: [0x110F, 0x1162, 0x11BD] }, +{ source: [0xCEA7], NFC: [0xCEA7], NFD: [0x110F, 0x1162, 0x11BE], NFKC: [0xCEA7], NFKD: [0x110F, 0x1162, 0x11BE] }, +{ source: [0xCEA8], NFC: [0xCEA8], NFD: [0x110F, 0x1162, 0x11BF], NFKC: [0xCEA8], NFKD: [0x110F, 0x1162, 0x11BF] }, +{ source: [0xCEA9], NFC: [0xCEA9], NFD: [0x110F, 0x1162, 0x11C0], NFKC: [0xCEA9], NFKD: [0x110F, 0x1162, 0x11C0] }, +{ source: [0xCEAA], NFC: [0xCEAA], NFD: [0x110F, 0x1162, 0x11C1], NFKC: [0xCEAA], NFKD: [0x110F, 0x1162, 0x11C1] }, +{ source: [0xCEAB], NFC: [0xCEAB], NFD: [0x110F, 0x1162, 0x11C2], NFKC: [0xCEAB], NFKD: [0x110F, 0x1162, 0x11C2] }, +{ source: [0xCEAC], NFC: [0xCEAC], NFD: [0x110F, 0x1163], NFKC: [0xCEAC], NFKD: [0x110F, 0x1163] }, +{ source: [0xCEAD], NFC: [0xCEAD], NFD: [0x110F, 0x1163, 0x11A8], NFKC: [0xCEAD], NFKD: [0x110F, 0x1163, 0x11A8] }, +{ source: [0xCEAE], NFC: [0xCEAE], NFD: [0x110F, 0x1163, 0x11A9], NFKC: [0xCEAE], NFKD: [0x110F, 0x1163, 0x11A9] }, +{ source: [0xCEAF], NFC: [0xCEAF], NFD: [0x110F, 0x1163, 0x11AA], NFKC: [0xCEAF], NFKD: [0x110F, 0x1163, 0x11AA] }, +{ source: [0xCEB0], NFC: [0xCEB0], NFD: [0x110F, 0x1163, 0x11AB], NFKC: [0xCEB0], NFKD: [0x110F, 0x1163, 0x11AB] }, +{ source: [0xCEB1], NFC: [0xCEB1], NFD: [0x110F, 0x1163, 0x11AC], NFKC: [0xCEB1], NFKD: [0x110F, 0x1163, 0x11AC] }, +{ source: [0xCEB2], NFC: [0xCEB2], NFD: [0x110F, 0x1163, 0x11AD], NFKC: [0xCEB2], NFKD: [0x110F, 0x1163, 0x11AD] }, +{ source: [0xCEB3], NFC: [0xCEB3], NFD: [0x110F, 0x1163, 0x11AE], NFKC: [0xCEB3], NFKD: [0x110F, 0x1163, 0x11AE] }, +{ source: [0xCEB4], NFC: [0xCEB4], NFD: [0x110F, 0x1163, 0x11AF], NFKC: [0xCEB4], NFKD: [0x110F, 0x1163, 0x11AF] }, +{ source: [0xCEB5], NFC: [0xCEB5], NFD: [0x110F, 0x1163, 0x11B0], NFKC: [0xCEB5], NFKD: [0x110F, 0x1163, 0x11B0] }, +{ source: [0xCEB6], NFC: [0xCEB6], NFD: [0x110F, 0x1163, 0x11B1], NFKC: [0xCEB6], NFKD: [0x110F, 0x1163, 0x11B1] }, +{ source: [0xCEB7], NFC: [0xCEB7], NFD: [0x110F, 0x1163, 0x11B2], NFKC: [0xCEB7], NFKD: [0x110F, 0x1163, 0x11B2] }, +{ source: [0xCEB8], NFC: [0xCEB8], NFD: [0x110F, 0x1163, 0x11B3], NFKC: [0xCEB8], NFKD: [0x110F, 0x1163, 0x11B3] }, +{ source: [0xCEB9], NFC: [0xCEB9], NFD: [0x110F, 0x1163, 0x11B4], NFKC: [0xCEB9], NFKD: [0x110F, 0x1163, 0x11B4] }, +{ source: [0xCEBA], NFC: [0xCEBA], NFD: [0x110F, 0x1163, 0x11B5], NFKC: [0xCEBA], NFKD: [0x110F, 0x1163, 0x11B5] }, +{ source: [0xCEBB], NFC: [0xCEBB], NFD: [0x110F, 0x1163, 0x11B6], NFKC: [0xCEBB], NFKD: [0x110F, 0x1163, 0x11B6] }, +{ source: [0xCEBC], NFC: [0xCEBC], NFD: [0x110F, 0x1163, 0x11B7], NFKC: [0xCEBC], NFKD: [0x110F, 0x1163, 0x11B7] }, +{ source: [0xCEBD], NFC: [0xCEBD], NFD: [0x110F, 0x1163, 0x11B8], NFKC: [0xCEBD], NFKD: [0x110F, 0x1163, 0x11B8] }, +{ source: [0xCEBE], NFC: [0xCEBE], NFD: [0x110F, 0x1163, 0x11B9], NFKC: [0xCEBE], NFKD: [0x110F, 0x1163, 0x11B9] }, +{ source: [0xCEBF], NFC: [0xCEBF], NFD: [0x110F, 0x1163, 0x11BA], NFKC: [0xCEBF], NFKD: [0x110F, 0x1163, 0x11BA] }, +{ source: [0xCEC0], NFC: [0xCEC0], NFD: [0x110F, 0x1163, 0x11BB], NFKC: [0xCEC0], NFKD: [0x110F, 0x1163, 0x11BB] }, +{ source: [0xCEC1], NFC: [0xCEC1], NFD: [0x110F, 0x1163, 0x11BC], NFKC: [0xCEC1], NFKD: [0x110F, 0x1163, 0x11BC] }, +{ source: [0xCEC2], NFC: [0xCEC2], NFD: [0x110F, 0x1163, 0x11BD], NFKC: [0xCEC2], NFKD: [0x110F, 0x1163, 0x11BD] }, +{ source: [0xCEC3], NFC: [0xCEC3], NFD: [0x110F, 0x1163, 0x11BE], NFKC: [0xCEC3], NFKD: [0x110F, 0x1163, 0x11BE] }, +{ source: [0xCEC4], NFC: [0xCEC4], NFD: [0x110F, 0x1163, 0x11BF], NFKC: [0xCEC4], NFKD: [0x110F, 0x1163, 0x11BF] }, +{ source: [0xCEC5], NFC: [0xCEC5], NFD: [0x110F, 0x1163, 0x11C0], NFKC: [0xCEC5], NFKD: [0x110F, 0x1163, 0x11C0] }, +{ source: [0xCEC6], NFC: [0xCEC6], NFD: [0x110F, 0x1163, 0x11C1], NFKC: [0xCEC6], NFKD: [0x110F, 0x1163, 0x11C1] }, +{ source: [0xCEC7], NFC: [0xCEC7], NFD: [0x110F, 0x1163, 0x11C2], NFKC: [0xCEC7], NFKD: [0x110F, 0x1163, 0x11C2] }, +{ source: [0xCEC8], NFC: [0xCEC8], NFD: [0x110F, 0x1164], NFKC: [0xCEC8], NFKD: [0x110F, 0x1164] }, +{ source: [0xCEC9], NFC: [0xCEC9], NFD: [0x110F, 0x1164, 0x11A8], NFKC: [0xCEC9], NFKD: [0x110F, 0x1164, 0x11A8] }, +{ source: [0xCECA], NFC: [0xCECA], NFD: [0x110F, 0x1164, 0x11A9], NFKC: [0xCECA], NFKD: [0x110F, 0x1164, 0x11A9] }, +{ source: [0xCECB], NFC: [0xCECB], NFD: [0x110F, 0x1164, 0x11AA], NFKC: [0xCECB], NFKD: [0x110F, 0x1164, 0x11AA] }, +{ source: [0xCECC], NFC: [0xCECC], NFD: [0x110F, 0x1164, 0x11AB], NFKC: [0xCECC], NFKD: [0x110F, 0x1164, 0x11AB] }, +{ source: [0xCECD], NFC: [0xCECD], NFD: [0x110F, 0x1164, 0x11AC], NFKC: [0xCECD], NFKD: [0x110F, 0x1164, 0x11AC] }, +{ source: [0xCECE], NFC: [0xCECE], NFD: [0x110F, 0x1164, 0x11AD], NFKC: [0xCECE], NFKD: [0x110F, 0x1164, 0x11AD] }, +{ source: [0xCECF], NFC: [0xCECF], NFD: [0x110F, 0x1164, 0x11AE], NFKC: [0xCECF], NFKD: [0x110F, 0x1164, 0x11AE] }, +{ source: [0xCED0], NFC: [0xCED0], NFD: [0x110F, 0x1164, 0x11AF], NFKC: [0xCED0], NFKD: [0x110F, 0x1164, 0x11AF] }, +{ source: [0xCED1], NFC: [0xCED1], NFD: [0x110F, 0x1164, 0x11B0], NFKC: [0xCED1], NFKD: [0x110F, 0x1164, 0x11B0] }, +{ source: [0xCED2], NFC: [0xCED2], NFD: [0x110F, 0x1164, 0x11B1], NFKC: [0xCED2], NFKD: [0x110F, 0x1164, 0x11B1] }, +{ source: [0xCED3], NFC: [0xCED3], NFD: [0x110F, 0x1164, 0x11B2], NFKC: [0xCED3], NFKD: [0x110F, 0x1164, 0x11B2] }, +{ source: [0xCED4], NFC: [0xCED4], NFD: [0x110F, 0x1164, 0x11B3], NFKC: [0xCED4], NFKD: [0x110F, 0x1164, 0x11B3] }, +{ source: [0xCED5], NFC: [0xCED5], NFD: [0x110F, 0x1164, 0x11B4], NFKC: [0xCED5], NFKD: [0x110F, 0x1164, 0x11B4] }, +{ source: [0xCED6], NFC: [0xCED6], NFD: [0x110F, 0x1164, 0x11B5], NFKC: [0xCED6], NFKD: [0x110F, 0x1164, 0x11B5] }, +{ source: [0xCED7], NFC: [0xCED7], NFD: [0x110F, 0x1164, 0x11B6], NFKC: [0xCED7], NFKD: [0x110F, 0x1164, 0x11B6] }, +{ source: [0xCED8], NFC: [0xCED8], NFD: [0x110F, 0x1164, 0x11B7], NFKC: [0xCED8], NFKD: [0x110F, 0x1164, 0x11B7] }, +{ source: [0xCED9], NFC: [0xCED9], NFD: [0x110F, 0x1164, 0x11B8], NFKC: [0xCED9], NFKD: [0x110F, 0x1164, 0x11B8] }, +{ source: [0xCEDA], NFC: [0xCEDA], NFD: [0x110F, 0x1164, 0x11B9], NFKC: [0xCEDA], NFKD: [0x110F, 0x1164, 0x11B9] }, +{ source: [0xCEDB], NFC: [0xCEDB], NFD: [0x110F, 0x1164, 0x11BA], NFKC: [0xCEDB], NFKD: [0x110F, 0x1164, 0x11BA] }, +{ source: [0xCEDC], NFC: [0xCEDC], NFD: [0x110F, 0x1164, 0x11BB], NFKC: [0xCEDC], NFKD: [0x110F, 0x1164, 0x11BB] }, +{ source: [0xCEDD], NFC: [0xCEDD], NFD: [0x110F, 0x1164, 0x11BC], NFKC: [0xCEDD], NFKD: [0x110F, 0x1164, 0x11BC] }, +{ source: [0xCEDE], NFC: [0xCEDE], NFD: [0x110F, 0x1164, 0x11BD], NFKC: [0xCEDE], NFKD: [0x110F, 0x1164, 0x11BD] }, +{ source: [0xCEDF], NFC: [0xCEDF], NFD: [0x110F, 0x1164, 0x11BE], NFKC: [0xCEDF], NFKD: [0x110F, 0x1164, 0x11BE] }, +{ source: [0xCEE0], NFC: [0xCEE0], NFD: [0x110F, 0x1164, 0x11BF], NFKC: [0xCEE0], NFKD: [0x110F, 0x1164, 0x11BF] }, +{ source: [0xCEE1], NFC: [0xCEE1], NFD: [0x110F, 0x1164, 0x11C0], NFKC: [0xCEE1], NFKD: [0x110F, 0x1164, 0x11C0] }, +{ source: [0xCEE2], NFC: [0xCEE2], NFD: [0x110F, 0x1164, 0x11C1], NFKC: [0xCEE2], NFKD: [0x110F, 0x1164, 0x11C1] }, +{ source: [0xCEE3], NFC: [0xCEE3], NFD: [0x110F, 0x1164, 0x11C2], NFKC: [0xCEE3], NFKD: [0x110F, 0x1164, 0x11C2] }, +{ source: [0xCEE4], NFC: [0xCEE4], NFD: [0x110F, 0x1165], NFKC: [0xCEE4], NFKD: [0x110F, 0x1165] }, +{ source: [0xCEE5], NFC: [0xCEE5], NFD: [0x110F, 0x1165, 0x11A8], NFKC: [0xCEE5], NFKD: [0x110F, 0x1165, 0x11A8] }, +{ source: [0xCEE6], NFC: [0xCEE6], NFD: [0x110F, 0x1165, 0x11A9], NFKC: [0xCEE6], NFKD: [0x110F, 0x1165, 0x11A9] }, +{ source: [0xCEE7], NFC: [0xCEE7], NFD: [0x110F, 0x1165, 0x11AA], NFKC: [0xCEE7], NFKD: [0x110F, 0x1165, 0x11AA] }, +{ source: [0xCEE8], NFC: [0xCEE8], NFD: [0x110F, 0x1165, 0x11AB], NFKC: [0xCEE8], NFKD: [0x110F, 0x1165, 0x11AB] }, +{ source: [0xCEE9], NFC: [0xCEE9], NFD: [0x110F, 0x1165, 0x11AC], NFKC: [0xCEE9], NFKD: [0x110F, 0x1165, 0x11AC] }, +{ source: [0xCEEA], NFC: [0xCEEA], NFD: [0x110F, 0x1165, 0x11AD], NFKC: [0xCEEA], NFKD: [0x110F, 0x1165, 0x11AD] }, +{ source: [0xCEEB], NFC: [0xCEEB], NFD: [0x110F, 0x1165, 0x11AE], NFKC: [0xCEEB], NFKD: [0x110F, 0x1165, 0x11AE] }, +{ source: [0xCEEC], NFC: [0xCEEC], NFD: [0x110F, 0x1165, 0x11AF], NFKC: [0xCEEC], NFKD: [0x110F, 0x1165, 0x11AF] }, +{ source: [0xCEED], NFC: [0xCEED], NFD: [0x110F, 0x1165, 0x11B0], NFKC: [0xCEED], NFKD: [0x110F, 0x1165, 0x11B0] }, +{ source: [0xCEEE], NFC: [0xCEEE], NFD: [0x110F, 0x1165, 0x11B1], NFKC: [0xCEEE], NFKD: [0x110F, 0x1165, 0x11B1] }, +{ source: [0xCEEF], NFC: [0xCEEF], NFD: [0x110F, 0x1165, 0x11B2], NFKC: [0xCEEF], NFKD: [0x110F, 0x1165, 0x11B2] }, +{ source: [0xCEF0], NFC: [0xCEF0], NFD: [0x110F, 0x1165, 0x11B3], NFKC: [0xCEF0], NFKD: [0x110F, 0x1165, 0x11B3] }, +{ source: [0xCEF1], NFC: [0xCEF1], NFD: [0x110F, 0x1165, 0x11B4], NFKC: [0xCEF1], NFKD: [0x110F, 0x1165, 0x11B4] }, +{ source: [0xCEF2], NFC: [0xCEF2], NFD: [0x110F, 0x1165, 0x11B5], NFKC: [0xCEF2], NFKD: [0x110F, 0x1165, 0x11B5] }, +{ source: [0xCEF3], NFC: [0xCEF3], NFD: [0x110F, 0x1165, 0x11B6], NFKC: [0xCEF3], NFKD: [0x110F, 0x1165, 0x11B6] }, +{ source: [0xCEF4], NFC: [0xCEF4], NFD: [0x110F, 0x1165, 0x11B7], NFKC: [0xCEF4], NFKD: [0x110F, 0x1165, 0x11B7] }, +{ source: [0xCEF5], NFC: [0xCEF5], NFD: [0x110F, 0x1165, 0x11B8], NFKC: [0xCEF5], NFKD: [0x110F, 0x1165, 0x11B8] }, +{ source: [0xCEF6], NFC: [0xCEF6], NFD: [0x110F, 0x1165, 0x11B9], NFKC: [0xCEF6], NFKD: [0x110F, 0x1165, 0x11B9] }, +{ source: [0xCEF7], NFC: [0xCEF7], NFD: [0x110F, 0x1165, 0x11BA], NFKC: [0xCEF7], NFKD: [0x110F, 0x1165, 0x11BA] }, +{ source: [0xCEF8], NFC: [0xCEF8], NFD: [0x110F, 0x1165, 0x11BB], NFKC: [0xCEF8], NFKD: [0x110F, 0x1165, 0x11BB] }, +{ source: [0xCEF9], NFC: [0xCEF9], NFD: [0x110F, 0x1165, 0x11BC], NFKC: [0xCEF9], NFKD: [0x110F, 0x1165, 0x11BC] }, +{ source: [0xCEFA], NFC: [0xCEFA], NFD: [0x110F, 0x1165, 0x11BD], NFKC: [0xCEFA], NFKD: [0x110F, 0x1165, 0x11BD] }, +{ source: [0xCEFB], NFC: [0xCEFB], NFD: [0x110F, 0x1165, 0x11BE], NFKC: [0xCEFB], NFKD: [0x110F, 0x1165, 0x11BE] }, +{ source: [0xCEFC], NFC: [0xCEFC], NFD: [0x110F, 0x1165, 0x11BF], NFKC: [0xCEFC], NFKD: [0x110F, 0x1165, 0x11BF] }, +{ source: [0xCEFD], NFC: [0xCEFD], NFD: [0x110F, 0x1165, 0x11C0], NFKC: [0xCEFD], NFKD: [0x110F, 0x1165, 0x11C0] }, +{ source: [0xCEFE], NFC: [0xCEFE], NFD: [0x110F, 0x1165, 0x11C1], NFKC: [0xCEFE], NFKD: [0x110F, 0x1165, 0x11C1] }, +{ source: [0xCEFF], NFC: [0xCEFF], NFD: [0x110F, 0x1165, 0x11C2], NFKC: [0xCEFF], NFKD: [0x110F, 0x1165, 0x11C2] }, +{ source: [0xCF00], NFC: [0xCF00], NFD: [0x110F, 0x1166], NFKC: [0xCF00], NFKD: [0x110F, 0x1166] }, +{ source: [0xCF01], NFC: [0xCF01], NFD: [0x110F, 0x1166, 0x11A8], NFKC: [0xCF01], NFKD: [0x110F, 0x1166, 0x11A8] }, +{ source: [0xCF02], NFC: [0xCF02], NFD: [0x110F, 0x1166, 0x11A9], NFKC: [0xCF02], NFKD: [0x110F, 0x1166, 0x11A9] }, +{ source: [0xCF03], NFC: [0xCF03], NFD: [0x110F, 0x1166, 0x11AA], NFKC: [0xCF03], NFKD: [0x110F, 0x1166, 0x11AA] }, +{ source: [0xCF04], NFC: [0xCF04], NFD: [0x110F, 0x1166, 0x11AB], NFKC: [0xCF04], NFKD: [0x110F, 0x1166, 0x11AB] }, +{ source: [0xCF05], NFC: [0xCF05], NFD: [0x110F, 0x1166, 0x11AC], NFKC: [0xCF05], NFKD: [0x110F, 0x1166, 0x11AC] }, +{ source: [0xCF06], NFC: [0xCF06], NFD: [0x110F, 0x1166, 0x11AD], NFKC: [0xCF06], NFKD: [0x110F, 0x1166, 0x11AD] }, +{ source: [0xCF07], NFC: [0xCF07], NFD: [0x110F, 0x1166, 0x11AE], NFKC: [0xCF07], NFKD: [0x110F, 0x1166, 0x11AE] }, +{ source: [0xCF08], NFC: [0xCF08], NFD: [0x110F, 0x1166, 0x11AF], NFKC: [0xCF08], NFKD: [0x110F, 0x1166, 0x11AF] }, +{ source: [0xCF09], NFC: [0xCF09], NFD: [0x110F, 0x1166, 0x11B0], NFKC: [0xCF09], NFKD: [0x110F, 0x1166, 0x11B0] }, +{ source: [0xCF0A], NFC: [0xCF0A], NFD: [0x110F, 0x1166, 0x11B1], NFKC: [0xCF0A], NFKD: [0x110F, 0x1166, 0x11B1] }, +{ source: [0xCF0B], NFC: [0xCF0B], NFD: [0x110F, 0x1166, 0x11B2], NFKC: [0xCF0B], NFKD: [0x110F, 0x1166, 0x11B2] }, +{ source: [0xCF0C], NFC: [0xCF0C], NFD: [0x110F, 0x1166, 0x11B3], NFKC: [0xCF0C], NFKD: [0x110F, 0x1166, 0x11B3] }, +{ source: [0xCF0D], NFC: [0xCF0D], NFD: [0x110F, 0x1166, 0x11B4], NFKC: [0xCF0D], NFKD: [0x110F, 0x1166, 0x11B4] }, +{ source: [0xCF0E], NFC: [0xCF0E], NFD: [0x110F, 0x1166, 0x11B5], NFKC: [0xCF0E], NFKD: [0x110F, 0x1166, 0x11B5] }, +{ source: [0xCF0F], NFC: [0xCF0F], NFD: [0x110F, 0x1166, 0x11B6], NFKC: [0xCF0F], NFKD: [0x110F, 0x1166, 0x11B6] }, +{ source: [0xCF10], NFC: [0xCF10], NFD: [0x110F, 0x1166, 0x11B7], NFKC: [0xCF10], NFKD: [0x110F, 0x1166, 0x11B7] }, +{ source: [0xCF11], NFC: [0xCF11], NFD: [0x110F, 0x1166, 0x11B8], NFKC: [0xCF11], NFKD: [0x110F, 0x1166, 0x11B8] }, +{ source: [0xCF12], NFC: [0xCF12], NFD: [0x110F, 0x1166, 0x11B9], NFKC: [0xCF12], NFKD: [0x110F, 0x1166, 0x11B9] }, +{ source: [0xCF13], NFC: [0xCF13], NFD: [0x110F, 0x1166, 0x11BA], NFKC: [0xCF13], NFKD: [0x110F, 0x1166, 0x11BA] }, +{ source: [0xCF14], NFC: [0xCF14], NFD: [0x110F, 0x1166, 0x11BB], NFKC: [0xCF14], NFKD: [0x110F, 0x1166, 0x11BB] }, +{ source: [0xCF15], NFC: [0xCF15], NFD: [0x110F, 0x1166, 0x11BC], NFKC: [0xCF15], NFKD: [0x110F, 0x1166, 0x11BC] }, +{ source: [0xCF16], NFC: [0xCF16], NFD: [0x110F, 0x1166, 0x11BD], NFKC: [0xCF16], NFKD: [0x110F, 0x1166, 0x11BD] }, +{ source: [0xCF17], NFC: [0xCF17], NFD: [0x110F, 0x1166, 0x11BE], NFKC: [0xCF17], NFKD: [0x110F, 0x1166, 0x11BE] }, +{ source: [0xCF18], NFC: [0xCF18], NFD: [0x110F, 0x1166, 0x11BF], NFKC: [0xCF18], NFKD: [0x110F, 0x1166, 0x11BF] }, +{ source: [0xCF19], NFC: [0xCF19], NFD: [0x110F, 0x1166, 0x11C0], NFKC: [0xCF19], NFKD: [0x110F, 0x1166, 0x11C0] }, +{ source: [0xCF1A], NFC: [0xCF1A], NFD: [0x110F, 0x1166, 0x11C1], NFKC: [0xCF1A], NFKD: [0x110F, 0x1166, 0x11C1] }, +{ source: [0xCF1B], NFC: [0xCF1B], NFD: [0x110F, 0x1166, 0x11C2], NFKC: [0xCF1B], NFKD: [0x110F, 0x1166, 0x11C2] }, +{ source: [0xCF1C], NFC: [0xCF1C], NFD: [0x110F, 0x1167], NFKC: [0xCF1C], NFKD: [0x110F, 0x1167] }, +{ source: [0xCF1D], NFC: [0xCF1D], NFD: [0x110F, 0x1167, 0x11A8], NFKC: [0xCF1D], NFKD: [0x110F, 0x1167, 0x11A8] }, +{ source: [0xCF1E], NFC: [0xCF1E], NFD: [0x110F, 0x1167, 0x11A9], NFKC: [0xCF1E], NFKD: [0x110F, 0x1167, 0x11A9] }, +{ source: [0xCF1F], NFC: [0xCF1F], NFD: [0x110F, 0x1167, 0x11AA], NFKC: [0xCF1F], NFKD: [0x110F, 0x1167, 0x11AA] }, +{ source: [0xCF20], NFC: [0xCF20], NFD: [0x110F, 0x1167, 0x11AB], NFKC: [0xCF20], NFKD: [0x110F, 0x1167, 0x11AB] }, +{ source: [0xCF21], NFC: [0xCF21], NFD: [0x110F, 0x1167, 0x11AC], NFKC: [0xCF21], NFKD: [0x110F, 0x1167, 0x11AC] }, +{ source: [0xCF22], NFC: [0xCF22], NFD: [0x110F, 0x1167, 0x11AD], NFKC: [0xCF22], NFKD: [0x110F, 0x1167, 0x11AD] }, +{ source: [0xCF23], NFC: [0xCF23], NFD: [0x110F, 0x1167, 0x11AE], NFKC: [0xCF23], NFKD: [0x110F, 0x1167, 0x11AE] }, +{ source: [0xCF24], NFC: [0xCF24], NFD: [0x110F, 0x1167, 0x11AF], NFKC: [0xCF24], NFKD: [0x110F, 0x1167, 0x11AF] }, +{ source: [0xCF25], NFC: [0xCF25], NFD: [0x110F, 0x1167, 0x11B0], NFKC: [0xCF25], NFKD: [0x110F, 0x1167, 0x11B0] }, +{ source: [0xCF26], NFC: [0xCF26], NFD: [0x110F, 0x1167, 0x11B1], NFKC: [0xCF26], NFKD: [0x110F, 0x1167, 0x11B1] }, +{ source: [0xCF27], NFC: [0xCF27], NFD: [0x110F, 0x1167, 0x11B2], NFKC: [0xCF27], NFKD: [0x110F, 0x1167, 0x11B2] }, +{ source: [0xCF28], NFC: [0xCF28], NFD: [0x110F, 0x1167, 0x11B3], NFKC: [0xCF28], NFKD: [0x110F, 0x1167, 0x11B3] }, +{ source: [0xCF29], NFC: [0xCF29], NFD: [0x110F, 0x1167, 0x11B4], NFKC: [0xCF29], NFKD: [0x110F, 0x1167, 0x11B4] }, +{ source: [0xCF2A], NFC: [0xCF2A], NFD: [0x110F, 0x1167, 0x11B5], NFKC: [0xCF2A], NFKD: [0x110F, 0x1167, 0x11B5] }, +{ source: [0xCF2B], NFC: [0xCF2B], NFD: [0x110F, 0x1167, 0x11B6], NFKC: [0xCF2B], NFKD: [0x110F, 0x1167, 0x11B6] }, +{ source: [0xCF2C], NFC: [0xCF2C], NFD: [0x110F, 0x1167, 0x11B7], NFKC: [0xCF2C], NFKD: [0x110F, 0x1167, 0x11B7] }, +{ source: [0xCF2D], NFC: [0xCF2D], NFD: [0x110F, 0x1167, 0x11B8], NFKC: [0xCF2D], NFKD: [0x110F, 0x1167, 0x11B8] }, +{ source: [0xCF2E], NFC: [0xCF2E], NFD: [0x110F, 0x1167, 0x11B9], NFKC: [0xCF2E], NFKD: [0x110F, 0x1167, 0x11B9] }, +{ source: [0xCF2F], NFC: [0xCF2F], NFD: [0x110F, 0x1167, 0x11BA], NFKC: [0xCF2F], NFKD: [0x110F, 0x1167, 0x11BA] }, +{ source: [0xCF30], NFC: [0xCF30], NFD: [0x110F, 0x1167, 0x11BB], NFKC: [0xCF30], NFKD: [0x110F, 0x1167, 0x11BB] }, +{ source: [0xCF31], NFC: [0xCF31], NFD: [0x110F, 0x1167, 0x11BC], NFKC: [0xCF31], NFKD: [0x110F, 0x1167, 0x11BC] }, +{ source: [0xCF32], NFC: [0xCF32], NFD: [0x110F, 0x1167, 0x11BD], NFKC: [0xCF32], NFKD: [0x110F, 0x1167, 0x11BD] }, +{ source: [0xCF33], NFC: [0xCF33], NFD: [0x110F, 0x1167, 0x11BE], NFKC: [0xCF33], NFKD: [0x110F, 0x1167, 0x11BE] }, +{ source: [0xCF34], NFC: [0xCF34], NFD: [0x110F, 0x1167, 0x11BF], NFKC: [0xCF34], NFKD: [0x110F, 0x1167, 0x11BF] }, +{ source: [0xCF35], NFC: [0xCF35], NFD: [0x110F, 0x1167, 0x11C0], NFKC: [0xCF35], NFKD: [0x110F, 0x1167, 0x11C0] }, +{ source: [0xCF36], NFC: [0xCF36], NFD: [0x110F, 0x1167, 0x11C1], NFKC: [0xCF36], NFKD: [0x110F, 0x1167, 0x11C1] }, +{ source: [0xCF37], NFC: [0xCF37], NFD: [0x110F, 0x1167, 0x11C2], NFKC: [0xCF37], NFKD: [0x110F, 0x1167, 0x11C2] }, +{ source: [0xCF38], NFC: [0xCF38], NFD: [0x110F, 0x1168], NFKC: [0xCF38], NFKD: [0x110F, 0x1168] }, +{ source: [0xCF39], NFC: [0xCF39], NFD: [0x110F, 0x1168, 0x11A8], NFKC: [0xCF39], NFKD: [0x110F, 0x1168, 0x11A8] }, +{ source: [0xCF3A], NFC: [0xCF3A], NFD: [0x110F, 0x1168, 0x11A9], NFKC: [0xCF3A], NFKD: [0x110F, 0x1168, 0x11A9] }, +{ source: [0xCF3B], NFC: [0xCF3B], NFD: [0x110F, 0x1168, 0x11AA], NFKC: [0xCF3B], NFKD: [0x110F, 0x1168, 0x11AA] }, +{ source: [0xCF3C], NFC: [0xCF3C], NFD: [0x110F, 0x1168, 0x11AB], NFKC: [0xCF3C], NFKD: [0x110F, 0x1168, 0x11AB] }, +{ source: [0xCF3D], NFC: [0xCF3D], NFD: [0x110F, 0x1168, 0x11AC], NFKC: [0xCF3D], NFKD: [0x110F, 0x1168, 0x11AC] }, +{ source: [0xCF3E], NFC: [0xCF3E], NFD: [0x110F, 0x1168, 0x11AD], NFKC: [0xCF3E], NFKD: [0x110F, 0x1168, 0x11AD] }, +{ source: [0xCF3F], NFC: [0xCF3F], NFD: [0x110F, 0x1168, 0x11AE], NFKC: [0xCF3F], NFKD: [0x110F, 0x1168, 0x11AE] }, +{ source: [0xCF40], NFC: [0xCF40], NFD: [0x110F, 0x1168, 0x11AF], NFKC: [0xCF40], NFKD: [0x110F, 0x1168, 0x11AF] }, +{ source: [0xCF41], NFC: [0xCF41], NFD: [0x110F, 0x1168, 0x11B0], NFKC: [0xCF41], NFKD: [0x110F, 0x1168, 0x11B0] }, +{ source: [0xCF42], NFC: [0xCF42], NFD: [0x110F, 0x1168, 0x11B1], NFKC: [0xCF42], NFKD: [0x110F, 0x1168, 0x11B1] }, +{ source: [0xCF43], NFC: [0xCF43], NFD: [0x110F, 0x1168, 0x11B2], NFKC: [0xCF43], NFKD: [0x110F, 0x1168, 0x11B2] }, +{ source: [0xCF44], NFC: [0xCF44], NFD: [0x110F, 0x1168, 0x11B3], NFKC: [0xCF44], NFKD: [0x110F, 0x1168, 0x11B3] }, +{ source: [0xCF45], NFC: [0xCF45], NFD: [0x110F, 0x1168, 0x11B4], NFKC: [0xCF45], NFKD: [0x110F, 0x1168, 0x11B4] }, +{ source: [0xCF46], NFC: [0xCF46], NFD: [0x110F, 0x1168, 0x11B5], NFKC: [0xCF46], NFKD: [0x110F, 0x1168, 0x11B5] }, +{ source: [0xCF47], NFC: [0xCF47], NFD: [0x110F, 0x1168, 0x11B6], NFKC: [0xCF47], NFKD: [0x110F, 0x1168, 0x11B6] }, +{ source: [0xCF48], NFC: [0xCF48], NFD: [0x110F, 0x1168, 0x11B7], NFKC: [0xCF48], NFKD: [0x110F, 0x1168, 0x11B7] }, +{ source: [0xCF49], NFC: [0xCF49], NFD: [0x110F, 0x1168, 0x11B8], NFKC: [0xCF49], NFKD: [0x110F, 0x1168, 0x11B8] }, +{ source: [0xCF4A], NFC: [0xCF4A], NFD: [0x110F, 0x1168, 0x11B9], NFKC: [0xCF4A], NFKD: [0x110F, 0x1168, 0x11B9] }, +{ source: [0xCF4B], NFC: [0xCF4B], NFD: [0x110F, 0x1168, 0x11BA], NFKC: [0xCF4B], NFKD: [0x110F, 0x1168, 0x11BA] }, +{ source: [0xCF4C], NFC: [0xCF4C], NFD: [0x110F, 0x1168, 0x11BB], NFKC: [0xCF4C], NFKD: [0x110F, 0x1168, 0x11BB] }, +{ source: [0xCF4D], NFC: [0xCF4D], NFD: [0x110F, 0x1168, 0x11BC], NFKC: [0xCF4D], NFKD: [0x110F, 0x1168, 0x11BC] }, +{ source: [0xCF4E], NFC: [0xCF4E], NFD: [0x110F, 0x1168, 0x11BD], NFKC: [0xCF4E], NFKD: [0x110F, 0x1168, 0x11BD] }, +{ source: [0xCF4F], NFC: [0xCF4F], NFD: [0x110F, 0x1168, 0x11BE], NFKC: [0xCF4F], NFKD: [0x110F, 0x1168, 0x11BE] }, +{ source: [0xCF50], NFC: [0xCF50], NFD: [0x110F, 0x1168, 0x11BF], NFKC: [0xCF50], NFKD: [0x110F, 0x1168, 0x11BF] }, +{ source: [0xCF51], NFC: [0xCF51], NFD: [0x110F, 0x1168, 0x11C0], NFKC: [0xCF51], NFKD: [0x110F, 0x1168, 0x11C0] }, +{ source: [0xCF52], NFC: [0xCF52], NFD: [0x110F, 0x1168, 0x11C1], NFKC: [0xCF52], NFKD: [0x110F, 0x1168, 0x11C1] }, +{ source: [0xCF53], NFC: [0xCF53], NFD: [0x110F, 0x1168, 0x11C2], NFKC: [0xCF53], NFKD: [0x110F, 0x1168, 0x11C2] }, +{ source: [0xCF54], NFC: [0xCF54], NFD: [0x110F, 0x1169], NFKC: [0xCF54], NFKD: [0x110F, 0x1169] }, +{ source: [0xCF55], NFC: [0xCF55], NFD: [0x110F, 0x1169, 0x11A8], NFKC: [0xCF55], NFKD: [0x110F, 0x1169, 0x11A8] }, +{ source: [0xCF56], NFC: [0xCF56], NFD: [0x110F, 0x1169, 0x11A9], NFKC: [0xCF56], NFKD: [0x110F, 0x1169, 0x11A9] }, +{ source: [0xCF57], NFC: [0xCF57], NFD: [0x110F, 0x1169, 0x11AA], NFKC: [0xCF57], NFKD: [0x110F, 0x1169, 0x11AA] }, +{ source: [0xCF58], NFC: [0xCF58], NFD: [0x110F, 0x1169, 0x11AB], NFKC: [0xCF58], NFKD: [0x110F, 0x1169, 0x11AB] }, +{ source: [0xCF59], NFC: [0xCF59], NFD: [0x110F, 0x1169, 0x11AC], NFKC: [0xCF59], NFKD: [0x110F, 0x1169, 0x11AC] }, +{ source: [0xCF5A], NFC: [0xCF5A], NFD: [0x110F, 0x1169, 0x11AD], NFKC: [0xCF5A], NFKD: [0x110F, 0x1169, 0x11AD] }, +{ source: [0xCF5B], NFC: [0xCF5B], NFD: [0x110F, 0x1169, 0x11AE], NFKC: [0xCF5B], NFKD: [0x110F, 0x1169, 0x11AE] }, +{ source: [0xCF5C], NFC: [0xCF5C], NFD: [0x110F, 0x1169, 0x11AF], NFKC: [0xCF5C], NFKD: [0x110F, 0x1169, 0x11AF] }, +{ source: [0xCF5D], NFC: [0xCF5D], NFD: [0x110F, 0x1169, 0x11B0], NFKC: [0xCF5D], NFKD: [0x110F, 0x1169, 0x11B0] }, +{ source: [0xCF5E], NFC: [0xCF5E], NFD: [0x110F, 0x1169, 0x11B1], NFKC: [0xCF5E], NFKD: [0x110F, 0x1169, 0x11B1] }, +{ source: [0xCF5F], NFC: [0xCF5F], NFD: [0x110F, 0x1169, 0x11B2], NFKC: [0xCF5F], NFKD: [0x110F, 0x1169, 0x11B2] }, +{ source: [0xCF60], NFC: [0xCF60], NFD: [0x110F, 0x1169, 0x11B3], NFKC: [0xCF60], NFKD: [0x110F, 0x1169, 0x11B3] }, +{ source: [0xCF61], NFC: [0xCF61], NFD: [0x110F, 0x1169, 0x11B4], NFKC: [0xCF61], NFKD: [0x110F, 0x1169, 0x11B4] }, +{ source: [0xCF62], NFC: [0xCF62], NFD: [0x110F, 0x1169, 0x11B5], NFKC: [0xCF62], NFKD: [0x110F, 0x1169, 0x11B5] }, +{ source: [0xCF63], NFC: [0xCF63], NFD: [0x110F, 0x1169, 0x11B6], NFKC: [0xCF63], NFKD: [0x110F, 0x1169, 0x11B6] }, +{ source: [0xCF64], NFC: [0xCF64], NFD: [0x110F, 0x1169, 0x11B7], NFKC: [0xCF64], NFKD: [0x110F, 0x1169, 0x11B7] }, +{ source: [0xCF65], NFC: [0xCF65], NFD: [0x110F, 0x1169, 0x11B8], NFKC: [0xCF65], NFKD: [0x110F, 0x1169, 0x11B8] }, +{ source: [0xCF66], NFC: [0xCF66], NFD: [0x110F, 0x1169, 0x11B9], NFKC: [0xCF66], NFKD: [0x110F, 0x1169, 0x11B9] }, +{ source: [0xCF67], NFC: [0xCF67], NFD: [0x110F, 0x1169, 0x11BA], NFKC: [0xCF67], NFKD: [0x110F, 0x1169, 0x11BA] }, +{ source: [0xCF68], NFC: [0xCF68], NFD: [0x110F, 0x1169, 0x11BB], NFKC: [0xCF68], NFKD: [0x110F, 0x1169, 0x11BB] }, +{ source: [0xCF69], NFC: [0xCF69], NFD: [0x110F, 0x1169, 0x11BC], NFKC: [0xCF69], NFKD: [0x110F, 0x1169, 0x11BC] }, +{ source: [0xCF6A], NFC: [0xCF6A], NFD: [0x110F, 0x1169, 0x11BD], NFKC: [0xCF6A], NFKD: [0x110F, 0x1169, 0x11BD] }, +{ source: [0xCF6B], NFC: [0xCF6B], NFD: [0x110F, 0x1169, 0x11BE], NFKC: [0xCF6B], NFKD: [0x110F, 0x1169, 0x11BE] }, +{ source: [0xCF6C], NFC: [0xCF6C], NFD: [0x110F, 0x1169, 0x11BF], NFKC: [0xCF6C], NFKD: [0x110F, 0x1169, 0x11BF] }, +{ source: [0xCF6D], NFC: [0xCF6D], NFD: [0x110F, 0x1169, 0x11C0], NFKC: [0xCF6D], NFKD: [0x110F, 0x1169, 0x11C0] }, +{ source: [0xCF6E], NFC: [0xCF6E], NFD: [0x110F, 0x1169, 0x11C1], NFKC: [0xCF6E], NFKD: [0x110F, 0x1169, 0x11C1] }, +{ source: [0xCF6F], NFC: [0xCF6F], NFD: [0x110F, 0x1169, 0x11C2], NFKC: [0xCF6F], NFKD: [0x110F, 0x1169, 0x11C2] }, +{ source: [0xCF70], NFC: [0xCF70], NFD: [0x110F, 0x116A], NFKC: [0xCF70], NFKD: [0x110F, 0x116A] }, +{ source: [0xCF71], NFC: [0xCF71], NFD: [0x110F, 0x116A, 0x11A8], NFKC: [0xCF71], NFKD: [0x110F, 0x116A, 0x11A8] }, +{ source: [0xCF72], NFC: [0xCF72], NFD: [0x110F, 0x116A, 0x11A9], NFKC: [0xCF72], NFKD: [0x110F, 0x116A, 0x11A9] }, +{ source: [0xCF73], NFC: [0xCF73], NFD: [0x110F, 0x116A, 0x11AA], NFKC: [0xCF73], NFKD: [0x110F, 0x116A, 0x11AA] }, +{ source: [0xCF74], NFC: [0xCF74], NFD: [0x110F, 0x116A, 0x11AB], NFKC: [0xCF74], NFKD: [0x110F, 0x116A, 0x11AB] }, +{ source: [0xCF75], NFC: [0xCF75], NFD: [0x110F, 0x116A, 0x11AC], NFKC: [0xCF75], NFKD: [0x110F, 0x116A, 0x11AC] }, +{ source: [0xCF76], NFC: [0xCF76], NFD: [0x110F, 0x116A, 0x11AD], NFKC: [0xCF76], NFKD: [0x110F, 0x116A, 0x11AD] }, +{ source: [0xCF77], NFC: [0xCF77], NFD: [0x110F, 0x116A, 0x11AE], NFKC: [0xCF77], NFKD: [0x110F, 0x116A, 0x11AE] }, +{ source: [0xCF78], NFC: [0xCF78], NFD: [0x110F, 0x116A, 0x11AF], NFKC: [0xCF78], NFKD: [0x110F, 0x116A, 0x11AF] }, +{ source: [0xCF79], NFC: [0xCF79], NFD: [0x110F, 0x116A, 0x11B0], NFKC: [0xCF79], NFKD: [0x110F, 0x116A, 0x11B0] }, +{ source: [0xCF7A], NFC: [0xCF7A], NFD: [0x110F, 0x116A, 0x11B1], NFKC: [0xCF7A], NFKD: [0x110F, 0x116A, 0x11B1] }, +{ source: [0xCF7B], NFC: [0xCF7B], NFD: [0x110F, 0x116A, 0x11B2], NFKC: [0xCF7B], NFKD: [0x110F, 0x116A, 0x11B2] }, +{ source: [0xCF7C], NFC: [0xCF7C], NFD: [0x110F, 0x116A, 0x11B3], NFKC: [0xCF7C], NFKD: [0x110F, 0x116A, 0x11B3] }, +{ source: [0xCF7D], NFC: [0xCF7D], NFD: [0x110F, 0x116A, 0x11B4], NFKC: [0xCF7D], NFKD: [0x110F, 0x116A, 0x11B4] }, +{ source: [0xCF7E], NFC: [0xCF7E], NFD: [0x110F, 0x116A, 0x11B5], NFKC: [0xCF7E], NFKD: [0x110F, 0x116A, 0x11B5] }, +{ source: [0xCF7F], NFC: [0xCF7F], NFD: [0x110F, 0x116A, 0x11B6], NFKC: [0xCF7F], NFKD: [0x110F, 0x116A, 0x11B6] }, +{ source: [0xCF80], NFC: [0xCF80], NFD: [0x110F, 0x116A, 0x11B7], NFKC: [0xCF80], NFKD: [0x110F, 0x116A, 0x11B7] }, +{ source: [0xCF81], NFC: [0xCF81], NFD: [0x110F, 0x116A, 0x11B8], NFKC: [0xCF81], NFKD: [0x110F, 0x116A, 0x11B8] }, +{ source: [0xCF82], NFC: [0xCF82], NFD: [0x110F, 0x116A, 0x11B9], NFKC: [0xCF82], NFKD: [0x110F, 0x116A, 0x11B9] }, +{ source: [0xCF83], NFC: [0xCF83], NFD: [0x110F, 0x116A, 0x11BA], NFKC: [0xCF83], NFKD: [0x110F, 0x116A, 0x11BA] }, +{ source: [0xCF84], NFC: [0xCF84], NFD: [0x110F, 0x116A, 0x11BB], NFKC: [0xCF84], NFKD: [0x110F, 0x116A, 0x11BB] }, +{ source: [0xCF85], NFC: [0xCF85], NFD: [0x110F, 0x116A, 0x11BC], NFKC: [0xCF85], NFKD: [0x110F, 0x116A, 0x11BC] }, +{ source: [0xCF86], NFC: [0xCF86], NFD: [0x110F, 0x116A, 0x11BD], NFKC: [0xCF86], NFKD: [0x110F, 0x116A, 0x11BD] }, +{ source: [0xCF87], NFC: [0xCF87], NFD: [0x110F, 0x116A, 0x11BE], NFKC: [0xCF87], NFKD: [0x110F, 0x116A, 0x11BE] }, +{ source: [0xCF88], NFC: [0xCF88], NFD: [0x110F, 0x116A, 0x11BF], NFKC: [0xCF88], NFKD: [0x110F, 0x116A, 0x11BF] }, +{ source: [0xCF89], NFC: [0xCF89], NFD: [0x110F, 0x116A, 0x11C0], NFKC: [0xCF89], NFKD: [0x110F, 0x116A, 0x11C0] }, +{ source: [0xCF8A], NFC: [0xCF8A], NFD: [0x110F, 0x116A, 0x11C1], NFKC: [0xCF8A], NFKD: [0x110F, 0x116A, 0x11C1] }, +{ source: [0xCF8B], NFC: [0xCF8B], NFD: [0x110F, 0x116A, 0x11C2], NFKC: [0xCF8B], NFKD: [0x110F, 0x116A, 0x11C2] }, +{ source: [0xCF8C], NFC: [0xCF8C], NFD: [0x110F, 0x116B], NFKC: [0xCF8C], NFKD: [0x110F, 0x116B] }, +{ source: [0xCF8D], NFC: [0xCF8D], NFD: [0x110F, 0x116B, 0x11A8], NFKC: [0xCF8D], NFKD: [0x110F, 0x116B, 0x11A8] }, +{ source: [0xCF8E], NFC: [0xCF8E], NFD: [0x110F, 0x116B, 0x11A9], NFKC: [0xCF8E], NFKD: [0x110F, 0x116B, 0x11A9] }, +{ source: [0xCF8F], NFC: [0xCF8F], NFD: [0x110F, 0x116B, 0x11AA], NFKC: [0xCF8F], NFKD: [0x110F, 0x116B, 0x11AA] }, +{ source: [0xCF90], NFC: [0xCF90], NFD: [0x110F, 0x116B, 0x11AB], NFKC: [0xCF90], NFKD: [0x110F, 0x116B, 0x11AB] }, +{ source: [0xCF91], NFC: [0xCF91], NFD: [0x110F, 0x116B, 0x11AC], NFKC: [0xCF91], NFKD: [0x110F, 0x116B, 0x11AC] }, +{ source: [0xCF92], NFC: [0xCF92], NFD: [0x110F, 0x116B, 0x11AD], NFKC: [0xCF92], NFKD: [0x110F, 0x116B, 0x11AD] }, +{ source: [0xCF93], NFC: [0xCF93], NFD: [0x110F, 0x116B, 0x11AE], NFKC: [0xCF93], NFKD: [0x110F, 0x116B, 0x11AE] }, +{ source: [0xCF94], NFC: [0xCF94], NFD: [0x110F, 0x116B, 0x11AF], NFKC: [0xCF94], NFKD: [0x110F, 0x116B, 0x11AF] }, +{ source: [0xCF95], NFC: [0xCF95], NFD: [0x110F, 0x116B, 0x11B0], NFKC: [0xCF95], NFKD: [0x110F, 0x116B, 0x11B0] }, +{ source: [0xCF96], NFC: [0xCF96], NFD: [0x110F, 0x116B, 0x11B1], NFKC: [0xCF96], NFKD: [0x110F, 0x116B, 0x11B1] }, +{ source: [0xCF97], NFC: [0xCF97], NFD: [0x110F, 0x116B, 0x11B2], NFKC: [0xCF97], NFKD: [0x110F, 0x116B, 0x11B2] }, +{ source: [0xCF98], NFC: [0xCF98], NFD: [0x110F, 0x116B, 0x11B3], NFKC: [0xCF98], NFKD: [0x110F, 0x116B, 0x11B3] }, +{ source: [0xCF99], NFC: [0xCF99], NFD: [0x110F, 0x116B, 0x11B4], NFKC: [0xCF99], NFKD: [0x110F, 0x116B, 0x11B4] }, +{ source: [0xCF9A], NFC: [0xCF9A], NFD: [0x110F, 0x116B, 0x11B5], NFKC: [0xCF9A], NFKD: [0x110F, 0x116B, 0x11B5] }, +{ source: [0xCF9B], NFC: [0xCF9B], NFD: [0x110F, 0x116B, 0x11B6], NFKC: [0xCF9B], NFKD: [0x110F, 0x116B, 0x11B6] }, +{ source: [0xCF9C], NFC: [0xCF9C], NFD: [0x110F, 0x116B, 0x11B7], NFKC: [0xCF9C], NFKD: [0x110F, 0x116B, 0x11B7] }, +{ source: [0xCF9D], NFC: [0xCF9D], NFD: [0x110F, 0x116B, 0x11B8], NFKC: [0xCF9D], NFKD: [0x110F, 0x116B, 0x11B8] }, +{ source: [0xCF9E], NFC: [0xCF9E], NFD: [0x110F, 0x116B, 0x11B9], NFKC: [0xCF9E], NFKD: [0x110F, 0x116B, 0x11B9] }, +{ source: [0xCF9F], NFC: [0xCF9F], NFD: [0x110F, 0x116B, 0x11BA], NFKC: [0xCF9F], NFKD: [0x110F, 0x116B, 0x11BA] }, +{ source: [0xCFA0], NFC: [0xCFA0], NFD: [0x110F, 0x116B, 0x11BB], NFKC: [0xCFA0], NFKD: [0x110F, 0x116B, 0x11BB] }, +{ source: [0xCFA1], NFC: [0xCFA1], NFD: [0x110F, 0x116B, 0x11BC], NFKC: [0xCFA1], NFKD: [0x110F, 0x116B, 0x11BC] }, +{ source: [0xCFA2], NFC: [0xCFA2], NFD: [0x110F, 0x116B, 0x11BD], NFKC: [0xCFA2], NFKD: [0x110F, 0x116B, 0x11BD] }, +{ source: [0xCFA3], NFC: [0xCFA3], NFD: [0x110F, 0x116B, 0x11BE], NFKC: [0xCFA3], NFKD: [0x110F, 0x116B, 0x11BE] }, +{ source: [0xCFA4], NFC: [0xCFA4], NFD: [0x110F, 0x116B, 0x11BF], NFKC: [0xCFA4], NFKD: [0x110F, 0x116B, 0x11BF] }, +{ source: [0xCFA5], NFC: [0xCFA5], NFD: [0x110F, 0x116B, 0x11C0], NFKC: [0xCFA5], NFKD: [0x110F, 0x116B, 0x11C0] }, +{ source: [0xCFA6], NFC: [0xCFA6], NFD: [0x110F, 0x116B, 0x11C1], NFKC: [0xCFA6], NFKD: [0x110F, 0x116B, 0x11C1] }, +{ source: [0xCFA7], NFC: [0xCFA7], NFD: [0x110F, 0x116B, 0x11C2], NFKC: [0xCFA7], NFKD: [0x110F, 0x116B, 0x11C2] }, +{ source: [0xCFA8], NFC: [0xCFA8], NFD: [0x110F, 0x116C], NFKC: [0xCFA8], NFKD: [0x110F, 0x116C] }, +{ source: [0xCFA9], NFC: [0xCFA9], NFD: [0x110F, 0x116C, 0x11A8], NFKC: [0xCFA9], NFKD: [0x110F, 0x116C, 0x11A8] }, +{ source: [0xCFAA], NFC: [0xCFAA], NFD: [0x110F, 0x116C, 0x11A9], NFKC: [0xCFAA], NFKD: [0x110F, 0x116C, 0x11A9] }, +{ source: [0xCFAB], NFC: [0xCFAB], NFD: [0x110F, 0x116C, 0x11AA], NFKC: [0xCFAB], NFKD: [0x110F, 0x116C, 0x11AA] }, +{ source: [0xCFAC], NFC: [0xCFAC], NFD: [0x110F, 0x116C, 0x11AB], NFKC: [0xCFAC], NFKD: [0x110F, 0x116C, 0x11AB] }, +{ source: [0xCFAD], NFC: [0xCFAD], NFD: [0x110F, 0x116C, 0x11AC], NFKC: [0xCFAD], NFKD: [0x110F, 0x116C, 0x11AC] }, +{ source: [0xCFAE], NFC: [0xCFAE], NFD: [0x110F, 0x116C, 0x11AD], NFKC: [0xCFAE], NFKD: [0x110F, 0x116C, 0x11AD] }, +{ source: [0xCFAF], NFC: [0xCFAF], NFD: [0x110F, 0x116C, 0x11AE], NFKC: [0xCFAF], NFKD: [0x110F, 0x116C, 0x11AE] }, +{ source: [0xCFB0], NFC: [0xCFB0], NFD: [0x110F, 0x116C, 0x11AF], NFKC: [0xCFB0], NFKD: [0x110F, 0x116C, 0x11AF] }, +{ source: [0xCFB1], NFC: [0xCFB1], NFD: [0x110F, 0x116C, 0x11B0], NFKC: [0xCFB1], NFKD: [0x110F, 0x116C, 0x11B0] }, +{ source: [0xCFB2], NFC: [0xCFB2], NFD: [0x110F, 0x116C, 0x11B1], NFKC: [0xCFB2], NFKD: [0x110F, 0x116C, 0x11B1] }, +{ source: [0xCFB3], NFC: [0xCFB3], NFD: [0x110F, 0x116C, 0x11B2], NFKC: [0xCFB3], NFKD: [0x110F, 0x116C, 0x11B2] }, +{ source: [0xCFB4], NFC: [0xCFB4], NFD: [0x110F, 0x116C, 0x11B3], NFKC: [0xCFB4], NFKD: [0x110F, 0x116C, 0x11B3] }, +{ source: [0xCFB5], NFC: [0xCFB5], NFD: [0x110F, 0x116C, 0x11B4], NFKC: [0xCFB5], NFKD: [0x110F, 0x116C, 0x11B4] }, +{ source: [0xCFB6], NFC: [0xCFB6], NFD: [0x110F, 0x116C, 0x11B5], NFKC: [0xCFB6], NFKD: [0x110F, 0x116C, 0x11B5] }, +{ source: [0xCFB7], NFC: [0xCFB7], NFD: [0x110F, 0x116C, 0x11B6], NFKC: [0xCFB7], NFKD: [0x110F, 0x116C, 0x11B6] }, +{ source: [0xCFB8], NFC: [0xCFB8], NFD: [0x110F, 0x116C, 0x11B7], NFKC: [0xCFB8], NFKD: [0x110F, 0x116C, 0x11B7] }, +{ source: [0xCFB9], NFC: [0xCFB9], NFD: [0x110F, 0x116C, 0x11B8], NFKC: [0xCFB9], NFKD: [0x110F, 0x116C, 0x11B8] }, +{ source: [0xCFBA], NFC: [0xCFBA], NFD: [0x110F, 0x116C, 0x11B9], NFKC: [0xCFBA], NFKD: [0x110F, 0x116C, 0x11B9] }, +{ source: [0xCFBB], NFC: [0xCFBB], NFD: [0x110F, 0x116C, 0x11BA], NFKC: [0xCFBB], NFKD: [0x110F, 0x116C, 0x11BA] }, +{ source: [0xCFBC], NFC: [0xCFBC], NFD: [0x110F, 0x116C, 0x11BB], NFKC: [0xCFBC], NFKD: [0x110F, 0x116C, 0x11BB] }, +{ source: [0xCFBD], NFC: [0xCFBD], NFD: [0x110F, 0x116C, 0x11BC], NFKC: [0xCFBD], NFKD: [0x110F, 0x116C, 0x11BC] }, +{ source: [0xCFBE], NFC: [0xCFBE], NFD: [0x110F, 0x116C, 0x11BD], NFKC: [0xCFBE], NFKD: [0x110F, 0x116C, 0x11BD] }, +{ source: [0xCFBF], NFC: [0xCFBF], NFD: [0x110F, 0x116C, 0x11BE], NFKC: [0xCFBF], NFKD: [0x110F, 0x116C, 0x11BE] }, +{ source: [0xCFC0], NFC: [0xCFC0], NFD: [0x110F, 0x116C, 0x11BF], NFKC: [0xCFC0], NFKD: [0x110F, 0x116C, 0x11BF] }, +{ source: [0xCFC1], NFC: [0xCFC1], NFD: [0x110F, 0x116C, 0x11C0], NFKC: [0xCFC1], NFKD: [0x110F, 0x116C, 0x11C0] }, +{ source: [0xCFC2], NFC: [0xCFC2], NFD: [0x110F, 0x116C, 0x11C1], NFKC: [0xCFC2], NFKD: [0x110F, 0x116C, 0x11C1] }, +{ source: [0xCFC3], NFC: [0xCFC3], NFD: [0x110F, 0x116C, 0x11C2], NFKC: [0xCFC3], NFKD: [0x110F, 0x116C, 0x11C2] }, +{ source: [0xCFC4], NFC: [0xCFC4], NFD: [0x110F, 0x116D], NFKC: [0xCFC4], NFKD: [0x110F, 0x116D] }, +{ source: [0xCFC5], NFC: [0xCFC5], NFD: [0x110F, 0x116D, 0x11A8], NFKC: [0xCFC5], NFKD: [0x110F, 0x116D, 0x11A8] }, +{ source: [0xCFC6], NFC: [0xCFC6], NFD: [0x110F, 0x116D, 0x11A9], NFKC: [0xCFC6], NFKD: [0x110F, 0x116D, 0x11A9] }, +{ source: [0xCFC7], NFC: [0xCFC7], NFD: [0x110F, 0x116D, 0x11AA], NFKC: [0xCFC7], NFKD: [0x110F, 0x116D, 0x11AA] }, +{ source: [0xCFC8], NFC: [0xCFC8], NFD: [0x110F, 0x116D, 0x11AB], NFKC: [0xCFC8], NFKD: [0x110F, 0x116D, 0x11AB] }, +{ source: [0xCFC9], NFC: [0xCFC9], NFD: [0x110F, 0x116D, 0x11AC], NFKC: [0xCFC9], NFKD: [0x110F, 0x116D, 0x11AC] }, +{ source: [0xCFCA], NFC: [0xCFCA], NFD: [0x110F, 0x116D, 0x11AD], NFKC: [0xCFCA], NFKD: [0x110F, 0x116D, 0x11AD] }, +{ source: [0xCFCB], NFC: [0xCFCB], NFD: [0x110F, 0x116D, 0x11AE], NFKC: [0xCFCB], NFKD: [0x110F, 0x116D, 0x11AE] }, +{ source: [0xCFCC], NFC: [0xCFCC], NFD: [0x110F, 0x116D, 0x11AF], NFKC: [0xCFCC], NFKD: [0x110F, 0x116D, 0x11AF] }, +{ source: [0xCFCD], NFC: [0xCFCD], NFD: [0x110F, 0x116D, 0x11B0], NFKC: [0xCFCD], NFKD: [0x110F, 0x116D, 0x11B0] }, +{ source: [0xCFCE], NFC: [0xCFCE], NFD: [0x110F, 0x116D, 0x11B1], NFKC: [0xCFCE], NFKD: [0x110F, 0x116D, 0x11B1] }, +{ source: [0xCFCF], NFC: [0xCFCF], NFD: [0x110F, 0x116D, 0x11B2], NFKC: [0xCFCF], NFKD: [0x110F, 0x116D, 0x11B2] }, +{ source: [0xCFD0], NFC: [0xCFD0], NFD: [0x110F, 0x116D, 0x11B3], NFKC: [0xCFD0], NFKD: [0x110F, 0x116D, 0x11B3] }, +{ source: [0xCFD1], NFC: [0xCFD1], NFD: [0x110F, 0x116D, 0x11B4], NFKC: [0xCFD1], NFKD: [0x110F, 0x116D, 0x11B4] }, +{ source: [0xCFD2], NFC: [0xCFD2], NFD: [0x110F, 0x116D, 0x11B5], NFKC: [0xCFD2], NFKD: [0x110F, 0x116D, 0x11B5] }, +{ source: [0xCFD3], NFC: [0xCFD3], NFD: [0x110F, 0x116D, 0x11B6], NFKC: [0xCFD3], NFKD: [0x110F, 0x116D, 0x11B6] }, +{ source: [0xCFD4], NFC: [0xCFD4], NFD: [0x110F, 0x116D, 0x11B7], NFKC: [0xCFD4], NFKD: [0x110F, 0x116D, 0x11B7] }, +{ source: [0xCFD5], NFC: [0xCFD5], NFD: [0x110F, 0x116D, 0x11B8], NFKC: [0xCFD5], NFKD: [0x110F, 0x116D, 0x11B8] }, +{ source: [0xCFD6], NFC: [0xCFD6], NFD: [0x110F, 0x116D, 0x11B9], NFKC: [0xCFD6], NFKD: [0x110F, 0x116D, 0x11B9] }, +{ source: [0xCFD7], NFC: [0xCFD7], NFD: [0x110F, 0x116D, 0x11BA], NFKC: [0xCFD7], NFKD: [0x110F, 0x116D, 0x11BA] }, +{ source: [0xCFD8], NFC: [0xCFD8], NFD: [0x110F, 0x116D, 0x11BB], NFKC: [0xCFD8], NFKD: [0x110F, 0x116D, 0x11BB] }, +{ source: [0xCFD9], NFC: [0xCFD9], NFD: [0x110F, 0x116D, 0x11BC], NFKC: [0xCFD9], NFKD: [0x110F, 0x116D, 0x11BC] }, +{ source: [0xCFDA], NFC: [0xCFDA], NFD: [0x110F, 0x116D, 0x11BD], NFKC: [0xCFDA], NFKD: [0x110F, 0x116D, 0x11BD] }, +{ source: [0xCFDB], NFC: [0xCFDB], NFD: [0x110F, 0x116D, 0x11BE], NFKC: [0xCFDB], NFKD: [0x110F, 0x116D, 0x11BE] }, +{ source: [0xCFDC], NFC: [0xCFDC], NFD: [0x110F, 0x116D, 0x11BF], NFKC: [0xCFDC], NFKD: [0x110F, 0x116D, 0x11BF] }, +{ source: [0xCFDD], NFC: [0xCFDD], NFD: [0x110F, 0x116D, 0x11C0], NFKC: [0xCFDD], NFKD: [0x110F, 0x116D, 0x11C0] }, +{ source: [0xCFDE], NFC: [0xCFDE], NFD: [0x110F, 0x116D, 0x11C1], NFKC: [0xCFDE], NFKD: [0x110F, 0x116D, 0x11C1] }, +{ source: [0xCFDF], NFC: [0xCFDF], NFD: [0x110F, 0x116D, 0x11C2], NFKC: [0xCFDF], NFKD: [0x110F, 0x116D, 0x11C2] }, +{ source: [0xCFE0], NFC: [0xCFE0], NFD: [0x110F, 0x116E], NFKC: [0xCFE0], NFKD: [0x110F, 0x116E] }, +{ source: [0xCFE1], NFC: [0xCFE1], NFD: [0x110F, 0x116E, 0x11A8], NFKC: [0xCFE1], NFKD: [0x110F, 0x116E, 0x11A8] }, +{ source: [0xCFE2], NFC: [0xCFE2], NFD: [0x110F, 0x116E, 0x11A9], NFKC: [0xCFE2], NFKD: [0x110F, 0x116E, 0x11A9] }, +{ source: [0xCFE3], NFC: [0xCFE3], NFD: [0x110F, 0x116E, 0x11AA], NFKC: [0xCFE3], NFKD: [0x110F, 0x116E, 0x11AA] }, +{ source: [0xCFE4], NFC: [0xCFE4], NFD: [0x110F, 0x116E, 0x11AB], NFKC: [0xCFE4], NFKD: [0x110F, 0x116E, 0x11AB] }, +{ source: [0xCFE5], NFC: [0xCFE5], NFD: [0x110F, 0x116E, 0x11AC], NFKC: [0xCFE5], NFKD: [0x110F, 0x116E, 0x11AC] }, +{ source: [0xCFE6], NFC: [0xCFE6], NFD: [0x110F, 0x116E, 0x11AD], NFKC: [0xCFE6], NFKD: [0x110F, 0x116E, 0x11AD] }, +{ source: [0xCFE7], NFC: [0xCFE7], NFD: [0x110F, 0x116E, 0x11AE], NFKC: [0xCFE7], NFKD: [0x110F, 0x116E, 0x11AE] }, +{ source: [0xCFE8], NFC: [0xCFE8], NFD: [0x110F, 0x116E, 0x11AF], NFKC: [0xCFE8], NFKD: [0x110F, 0x116E, 0x11AF] }, +{ source: [0xCFE9], NFC: [0xCFE9], NFD: [0x110F, 0x116E, 0x11B0], NFKC: [0xCFE9], NFKD: [0x110F, 0x116E, 0x11B0] }, +{ source: [0xCFEA], NFC: [0xCFEA], NFD: [0x110F, 0x116E, 0x11B1], NFKC: [0xCFEA], NFKD: [0x110F, 0x116E, 0x11B1] }, +{ source: [0xCFEB], NFC: [0xCFEB], NFD: [0x110F, 0x116E, 0x11B2], NFKC: [0xCFEB], NFKD: [0x110F, 0x116E, 0x11B2] }, +{ source: [0xCFEC], NFC: [0xCFEC], NFD: [0x110F, 0x116E, 0x11B3], NFKC: [0xCFEC], NFKD: [0x110F, 0x116E, 0x11B3] }, +{ source: [0xCFED], NFC: [0xCFED], NFD: [0x110F, 0x116E, 0x11B4], NFKC: [0xCFED], NFKD: [0x110F, 0x116E, 0x11B4] }, +{ source: [0xCFEE], NFC: [0xCFEE], NFD: [0x110F, 0x116E, 0x11B5], NFKC: [0xCFEE], NFKD: [0x110F, 0x116E, 0x11B5] }, +{ source: [0xCFEF], NFC: [0xCFEF], NFD: [0x110F, 0x116E, 0x11B6], NFKC: [0xCFEF], NFKD: [0x110F, 0x116E, 0x11B6] }, +{ source: [0xCFF0], NFC: [0xCFF0], NFD: [0x110F, 0x116E, 0x11B7], NFKC: [0xCFF0], NFKD: [0x110F, 0x116E, 0x11B7] }, +{ source: [0xCFF1], NFC: [0xCFF1], NFD: [0x110F, 0x116E, 0x11B8], NFKC: [0xCFF1], NFKD: [0x110F, 0x116E, 0x11B8] }, +{ source: [0xCFF2], NFC: [0xCFF2], NFD: [0x110F, 0x116E, 0x11B9], NFKC: [0xCFF2], NFKD: [0x110F, 0x116E, 0x11B9] }, +{ source: [0xCFF3], NFC: [0xCFF3], NFD: [0x110F, 0x116E, 0x11BA], NFKC: [0xCFF3], NFKD: [0x110F, 0x116E, 0x11BA] }, +{ source: [0xCFF4], NFC: [0xCFF4], NFD: [0x110F, 0x116E, 0x11BB], NFKC: [0xCFF4], NFKD: [0x110F, 0x116E, 0x11BB] }, +{ source: [0xCFF5], NFC: [0xCFF5], NFD: [0x110F, 0x116E, 0x11BC], NFKC: [0xCFF5], NFKD: [0x110F, 0x116E, 0x11BC] }, +{ source: [0xCFF6], NFC: [0xCFF6], NFD: [0x110F, 0x116E, 0x11BD], NFKC: [0xCFF6], NFKD: [0x110F, 0x116E, 0x11BD] }, +{ source: [0xCFF7], NFC: [0xCFF7], NFD: [0x110F, 0x116E, 0x11BE], NFKC: [0xCFF7], NFKD: [0x110F, 0x116E, 0x11BE] }, +{ source: [0xCFF8], NFC: [0xCFF8], NFD: [0x110F, 0x116E, 0x11BF], NFKC: [0xCFF8], NFKD: [0x110F, 0x116E, 0x11BF] }, +{ source: [0xCFF9], NFC: [0xCFF9], NFD: [0x110F, 0x116E, 0x11C0], NFKC: [0xCFF9], NFKD: [0x110F, 0x116E, 0x11C0] }, +{ source: [0xCFFA], NFC: [0xCFFA], NFD: [0x110F, 0x116E, 0x11C1], NFKC: [0xCFFA], NFKD: [0x110F, 0x116E, 0x11C1] }, +{ source: [0xCFFB], NFC: [0xCFFB], NFD: [0x110F, 0x116E, 0x11C2], NFKC: [0xCFFB], NFKD: [0x110F, 0x116E, 0x11C2] }, +{ source: [0xCFFC], NFC: [0xCFFC], NFD: [0x110F, 0x116F], NFKC: [0xCFFC], NFKD: [0x110F, 0x116F] }, +{ source: [0xCFFD], NFC: [0xCFFD], NFD: [0x110F, 0x116F, 0x11A8], NFKC: [0xCFFD], NFKD: [0x110F, 0x116F, 0x11A8] }, +{ source: [0xCFFE], NFC: [0xCFFE], NFD: [0x110F, 0x116F, 0x11A9], NFKC: [0xCFFE], NFKD: [0x110F, 0x116F, 0x11A9] }, +{ source: [0xCFFF], NFC: [0xCFFF], NFD: [0x110F, 0x116F, 0x11AA], NFKC: [0xCFFF], NFKD: [0x110F, 0x116F, 0x11AA] }, +{ source: [0xD000], NFC: [0xD000], NFD: [0x110F, 0x116F, 0x11AB], NFKC: [0xD000], NFKD: [0x110F, 0x116F, 0x11AB] }, +{ source: [0xD001], NFC: [0xD001], NFD: [0x110F, 0x116F, 0x11AC], NFKC: [0xD001], NFKD: [0x110F, 0x116F, 0x11AC] }, +{ source: [0xD002], NFC: [0xD002], NFD: [0x110F, 0x116F, 0x11AD], NFKC: [0xD002], NFKD: [0x110F, 0x116F, 0x11AD] }, +{ source: [0xD003], NFC: [0xD003], NFD: [0x110F, 0x116F, 0x11AE], NFKC: [0xD003], NFKD: [0x110F, 0x116F, 0x11AE] }, +{ source: [0xD004], NFC: [0xD004], NFD: [0x110F, 0x116F, 0x11AF], NFKC: [0xD004], NFKD: [0x110F, 0x116F, 0x11AF] }, +{ source: [0xD005], NFC: [0xD005], NFD: [0x110F, 0x116F, 0x11B0], NFKC: [0xD005], NFKD: [0x110F, 0x116F, 0x11B0] }, +{ source: [0xD006], NFC: [0xD006], NFD: [0x110F, 0x116F, 0x11B1], NFKC: [0xD006], NFKD: [0x110F, 0x116F, 0x11B1] }, +{ source: [0xD007], NFC: [0xD007], NFD: [0x110F, 0x116F, 0x11B2], NFKC: [0xD007], NFKD: [0x110F, 0x116F, 0x11B2] }, +{ source: [0xD008], NFC: [0xD008], NFD: [0x110F, 0x116F, 0x11B3], NFKC: [0xD008], NFKD: [0x110F, 0x116F, 0x11B3] }, +{ source: [0xD009], NFC: [0xD009], NFD: [0x110F, 0x116F, 0x11B4], NFKC: [0xD009], NFKD: [0x110F, 0x116F, 0x11B4] }, +{ source: [0xD00A], NFC: [0xD00A], NFD: [0x110F, 0x116F, 0x11B5], NFKC: [0xD00A], NFKD: [0x110F, 0x116F, 0x11B5] }, +{ source: [0xD00B], NFC: [0xD00B], NFD: [0x110F, 0x116F, 0x11B6], NFKC: [0xD00B], NFKD: [0x110F, 0x116F, 0x11B6] }, +{ source: [0xD00C], NFC: [0xD00C], NFD: [0x110F, 0x116F, 0x11B7], NFKC: [0xD00C], NFKD: [0x110F, 0x116F, 0x11B7] }, +{ source: [0xD00D], NFC: [0xD00D], NFD: [0x110F, 0x116F, 0x11B8], NFKC: [0xD00D], NFKD: [0x110F, 0x116F, 0x11B8] }, +{ source: [0xD00E], NFC: [0xD00E], NFD: [0x110F, 0x116F, 0x11B9], NFKC: [0xD00E], NFKD: [0x110F, 0x116F, 0x11B9] }, +{ source: [0xD00F], NFC: [0xD00F], NFD: [0x110F, 0x116F, 0x11BA], NFKC: [0xD00F], NFKD: [0x110F, 0x116F, 0x11BA] }, +{ source: [0xD010], NFC: [0xD010], NFD: [0x110F, 0x116F, 0x11BB], NFKC: [0xD010], NFKD: [0x110F, 0x116F, 0x11BB] }, +{ source: [0xD011], NFC: [0xD011], NFD: [0x110F, 0x116F, 0x11BC], NFKC: [0xD011], NFKD: [0x110F, 0x116F, 0x11BC] }, +{ source: [0xD012], NFC: [0xD012], NFD: [0x110F, 0x116F, 0x11BD], NFKC: [0xD012], NFKD: [0x110F, 0x116F, 0x11BD] }, +{ source: [0xD013], NFC: [0xD013], NFD: [0x110F, 0x116F, 0x11BE], NFKC: [0xD013], NFKD: [0x110F, 0x116F, 0x11BE] }, +{ source: [0xD014], NFC: [0xD014], NFD: [0x110F, 0x116F, 0x11BF], NFKC: [0xD014], NFKD: [0x110F, 0x116F, 0x11BF] }, +{ source: [0xD015], NFC: [0xD015], NFD: [0x110F, 0x116F, 0x11C0], NFKC: [0xD015], NFKD: [0x110F, 0x116F, 0x11C0] }, +{ source: [0xD016], NFC: [0xD016], NFD: [0x110F, 0x116F, 0x11C1], NFKC: [0xD016], NFKD: [0x110F, 0x116F, 0x11C1] }, +{ source: [0xD017], NFC: [0xD017], NFD: [0x110F, 0x116F, 0x11C2], NFKC: [0xD017], NFKD: [0x110F, 0x116F, 0x11C2] }, +{ source: [0xD018], NFC: [0xD018], NFD: [0x110F, 0x1170], NFKC: [0xD018], NFKD: [0x110F, 0x1170] }, +{ source: [0xD019], NFC: [0xD019], NFD: [0x110F, 0x1170, 0x11A8], NFKC: [0xD019], NFKD: [0x110F, 0x1170, 0x11A8] }, +{ source: [0xD01A], NFC: [0xD01A], NFD: [0x110F, 0x1170, 0x11A9], NFKC: [0xD01A], NFKD: [0x110F, 0x1170, 0x11A9] }, +{ source: [0xD01B], NFC: [0xD01B], NFD: [0x110F, 0x1170, 0x11AA], NFKC: [0xD01B], NFKD: [0x110F, 0x1170, 0x11AA] }, +{ source: [0xD01C], NFC: [0xD01C], NFD: [0x110F, 0x1170, 0x11AB], NFKC: [0xD01C], NFKD: [0x110F, 0x1170, 0x11AB] }, +{ source: [0xD01D], NFC: [0xD01D], NFD: [0x110F, 0x1170, 0x11AC], NFKC: [0xD01D], NFKD: [0x110F, 0x1170, 0x11AC] }, +{ source: [0xD01E], NFC: [0xD01E], NFD: [0x110F, 0x1170, 0x11AD], NFKC: [0xD01E], NFKD: [0x110F, 0x1170, 0x11AD] }, +{ source: [0xD01F], NFC: [0xD01F], NFD: [0x110F, 0x1170, 0x11AE], NFKC: [0xD01F], NFKD: [0x110F, 0x1170, 0x11AE] }, +{ source: [0xD020], NFC: [0xD020], NFD: [0x110F, 0x1170, 0x11AF], NFKC: [0xD020], NFKD: [0x110F, 0x1170, 0x11AF] }, +{ source: [0xD021], NFC: [0xD021], NFD: [0x110F, 0x1170, 0x11B0], NFKC: [0xD021], NFKD: [0x110F, 0x1170, 0x11B0] }, +{ source: [0xD022], NFC: [0xD022], NFD: [0x110F, 0x1170, 0x11B1], NFKC: [0xD022], NFKD: [0x110F, 0x1170, 0x11B1] }, +{ source: [0xD023], NFC: [0xD023], NFD: [0x110F, 0x1170, 0x11B2], NFKC: [0xD023], NFKD: [0x110F, 0x1170, 0x11B2] }, +{ source: [0xD024], NFC: [0xD024], NFD: [0x110F, 0x1170, 0x11B3], NFKC: [0xD024], NFKD: [0x110F, 0x1170, 0x11B3] }, +{ source: [0xD025], NFC: [0xD025], NFD: [0x110F, 0x1170, 0x11B4], NFKC: [0xD025], NFKD: [0x110F, 0x1170, 0x11B4] }, +{ source: [0xD026], NFC: [0xD026], NFD: [0x110F, 0x1170, 0x11B5], NFKC: [0xD026], NFKD: [0x110F, 0x1170, 0x11B5] }, +{ source: [0xD027], NFC: [0xD027], NFD: [0x110F, 0x1170, 0x11B6], NFKC: [0xD027], NFKD: [0x110F, 0x1170, 0x11B6] }, +{ source: [0xD028], NFC: [0xD028], NFD: [0x110F, 0x1170, 0x11B7], NFKC: [0xD028], NFKD: [0x110F, 0x1170, 0x11B7] }, +{ source: [0xD029], NFC: [0xD029], NFD: [0x110F, 0x1170, 0x11B8], NFKC: [0xD029], NFKD: [0x110F, 0x1170, 0x11B8] }, +{ source: [0xD02A], NFC: [0xD02A], NFD: [0x110F, 0x1170, 0x11B9], NFKC: [0xD02A], NFKD: [0x110F, 0x1170, 0x11B9] }, +{ source: [0xD02B], NFC: [0xD02B], NFD: [0x110F, 0x1170, 0x11BA], NFKC: [0xD02B], NFKD: [0x110F, 0x1170, 0x11BA] }, +{ source: [0xD02C], NFC: [0xD02C], NFD: [0x110F, 0x1170, 0x11BB], NFKC: [0xD02C], NFKD: [0x110F, 0x1170, 0x11BB] }, +{ source: [0xD02D], NFC: [0xD02D], NFD: [0x110F, 0x1170, 0x11BC], NFKC: [0xD02D], NFKD: [0x110F, 0x1170, 0x11BC] }, +{ source: [0xD02E], NFC: [0xD02E], NFD: [0x110F, 0x1170, 0x11BD], NFKC: [0xD02E], NFKD: [0x110F, 0x1170, 0x11BD] }, +{ source: [0xD02F], NFC: [0xD02F], NFD: [0x110F, 0x1170, 0x11BE], NFKC: [0xD02F], NFKD: [0x110F, 0x1170, 0x11BE] }, +{ source: [0xD030], NFC: [0xD030], NFD: [0x110F, 0x1170, 0x11BF], NFKC: [0xD030], NFKD: [0x110F, 0x1170, 0x11BF] }, +{ source: [0xD031], NFC: [0xD031], NFD: [0x110F, 0x1170, 0x11C0], NFKC: [0xD031], NFKD: [0x110F, 0x1170, 0x11C0] }, +{ source: [0xD032], NFC: [0xD032], NFD: [0x110F, 0x1170, 0x11C1], NFKC: [0xD032], NFKD: [0x110F, 0x1170, 0x11C1] }, +{ source: [0xD033], NFC: [0xD033], NFD: [0x110F, 0x1170, 0x11C2], NFKC: [0xD033], NFKD: [0x110F, 0x1170, 0x11C2] }, +{ source: [0xD034], NFC: [0xD034], NFD: [0x110F, 0x1171], NFKC: [0xD034], NFKD: [0x110F, 0x1171] }, +{ source: [0xD035], NFC: [0xD035], NFD: [0x110F, 0x1171, 0x11A8], NFKC: [0xD035], NFKD: [0x110F, 0x1171, 0x11A8] }, +{ source: [0xD036], NFC: [0xD036], NFD: [0x110F, 0x1171, 0x11A9], NFKC: [0xD036], NFKD: [0x110F, 0x1171, 0x11A9] }, +{ source: [0xD037], NFC: [0xD037], NFD: [0x110F, 0x1171, 0x11AA], NFKC: [0xD037], NFKD: [0x110F, 0x1171, 0x11AA] }, +{ source: [0xD038], NFC: [0xD038], NFD: [0x110F, 0x1171, 0x11AB], NFKC: [0xD038], NFKD: [0x110F, 0x1171, 0x11AB] }, +{ source: [0xD039], NFC: [0xD039], NFD: [0x110F, 0x1171, 0x11AC], NFKC: [0xD039], NFKD: [0x110F, 0x1171, 0x11AC] }, +{ source: [0xD03A], NFC: [0xD03A], NFD: [0x110F, 0x1171, 0x11AD], NFKC: [0xD03A], NFKD: [0x110F, 0x1171, 0x11AD] }, +{ source: [0xD03B], NFC: [0xD03B], NFD: [0x110F, 0x1171, 0x11AE], NFKC: [0xD03B], NFKD: [0x110F, 0x1171, 0x11AE] }, +{ source: [0xD03C], NFC: [0xD03C], NFD: [0x110F, 0x1171, 0x11AF], NFKC: [0xD03C], NFKD: [0x110F, 0x1171, 0x11AF] }, +{ source: [0xD03D], NFC: [0xD03D], NFD: [0x110F, 0x1171, 0x11B0], NFKC: [0xD03D], NFKD: [0x110F, 0x1171, 0x11B0] }, +{ source: [0xD03E], NFC: [0xD03E], NFD: [0x110F, 0x1171, 0x11B1], NFKC: [0xD03E], NFKD: [0x110F, 0x1171, 0x11B1] }, +{ source: [0xD03F], NFC: [0xD03F], NFD: [0x110F, 0x1171, 0x11B2], NFKC: [0xD03F], NFKD: [0x110F, 0x1171, 0x11B2] }, +{ source: [0xD040], NFC: [0xD040], NFD: [0x110F, 0x1171, 0x11B3], NFKC: [0xD040], NFKD: [0x110F, 0x1171, 0x11B3] }, +{ source: [0xD041], NFC: [0xD041], NFD: [0x110F, 0x1171, 0x11B4], NFKC: [0xD041], NFKD: [0x110F, 0x1171, 0x11B4] }, +{ source: [0xD042], NFC: [0xD042], NFD: [0x110F, 0x1171, 0x11B5], NFKC: [0xD042], NFKD: [0x110F, 0x1171, 0x11B5] }, +{ source: [0xD043], NFC: [0xD043], NFD: [0x110F, 0x1171, 0x11B6], NFKC: [0xD043], NFKD: [0x110F, 0x1171, 0x11B6] }, +{ source: [0xD044], NFC: [0xD044], NFD: [0x110F, 0x1171, 0x11B7], NFKC: [0xD044], NFKD: [0x110F, 0x1171, 0x11B7] }, +{ source: [0xD045], NFC: [0xD045], NFD: [0x110F, 0x1171, 0x11B8], NFKC: [0xD045], NFKD: [0x110F, 0x1171, 0x11B8] }, +{ source: [0xD046], NFC: [0xD046], NFD: [0x110F, 0x1171, 0x11B9], NFKC: [0xD046], NFKD: [0x110F, 0x1171, 0x11B9] }, +{ source: [0xD047], NFC: [0xD047], NFD: [0x110F, 0x1171, 0x11BA], NFKC: [0xD047], NFKD: [0x110F, 0x1171, 0x11BA] }, +{ source: [0xD048], NFC: [0xD048], NFD: [0x110F, 0x1171, 0x11BB], NFKC: [0xD048], NFKD: [0x110F, 0x1171, 0x11BB] }, +{ source: [0xD049], NFC: [0xD049], NFD: [0x110F, 0x1171, 0x11BC], NFKC: [0xD049], NFKD: [0x110F, 0x1171, 0x11BC] }, +{ source: [0xD04A], NFC: [0xD04A], NFD: [0x110F, 0x1171, 0x11BD], NFKC: [0xD04A], NFKD: [0x110F, 0x1171, 0x11BD] }, +{ source: [0xD04B], NFC: [0xD04B], NFD: [0x110F, 0x1171, 0x11BE], NFKC: [0xD04B], NFKD: [0x110F, 0x1171, 0x11BE] }, +{ source: [0xD04C], NFC: [0xD04C], NFD: [0x110F, 0x1171, 0x11BF], NFKC: [0xD04C], NFKD: [0x110F, 0x1171, 0x11BF] }, +{ source: [0xD04D], NFC: [0xD04D], NFD: [0x110F, 0x1171, 0x11C0], NFKC: [0xD04D], NFKD: [0x110F, 0x1171, 0x11C0] }, +{ source: [0xD04E], NFC: [0xD04E], NFD: [0x110F, 0x1171, 0x11C1], NFKC: [0xD04E], NFKD: [0x110F, 0x1171, 0x11C1] }, +{ source: [0xD04F], NFC: [0xD04F], NFD: [0x110F, 0x1171, 0x11C2], NFKC: [0xD04F], NFKD: [0x110F, 0x1171, 0x11C2] }, +{ source: [0xD050], NFC: [0xD050], NFD: [0x110F, 0x1172], NFKC: [0xD050], NFKD: [0x110F, 0x1172] }, +{ source: [0xD051], NFC: [0xD051], NFD: [0x110F, 0x1172, 0x11A8], NFKC: [0xD051], NFKD: [0x110F, 0x1172, 0x11A8] }, +{ source: [0xD052], NFC: [0xD052], NFD: [0x110F, 0x1172, 0x11A9], NFKC: [0xD052], NFKD: [0x110F, 0x1172, 0x11A9] }, +{ source: [0xD053], NFC: [0xD053], NFD: [0x110F, 0x1172, 0x11AA], NFKC: [0xD053], NFKD: [0x110F, 0x1172, 0x11AA] }, +{ source: [0xD054], NFC: [0xD054], NFD: [0x110F, 0x1172, 0x11AB], NFKC: [0xD054], NFKD: [0x110F, 0x1172, 0x11AB] }, +{ source: [0xD055], NFC: [0xD055], NFD: [0x110F, 0x1172, 0x11AC], NFKC: [0xD055], NFKD: [0x110F, 0x1172, 0x11AC] }, +{ source: [0xD056], NFC: [0xD056], NFD: [0x110F, 0x1172, 0x11AD], NFKC: [0xD056], NFKD: [0x110F, 0x1172, 0x11AD] }, +{ source: [0xD057], NFC: [0xD057], NFD: [0x110F, 0x1172, 0x11AE], NFKC: [0xD057], NFKD: [0x110F, 0x1172, 0x11AE] }, +{ source: [0xD058], NFC: [0xD058], NFD: [0x110F, 0x1172, 0x11AF], NFKC: [0xD058], NFKD: [0x110F, 0x1172, 0x11AF] }, +{ source: [0xD059], NFC: [0xD059], NFD: [0x110F, 0x1172, 0x11B0], NFKC: [0xD059], NFKD: [0x110F, 0x1172, 0x11B0] }, +{ source: [0xD05A], NFC: [0xD05A], NFD: [0x110F, 0x1172, 0x11B1], NFKC: [0xD05A], NFKD: [0x110F, 0x1172, 0x11B1] }, +{ source: [0xD05B], NFC: [0xD05B], NFD: [0x110F, 0x1172, 0x11B2], NFKC: [0xD05B], NFKD: [0x110F, 0x1172, 0x11B2] }, +{ source: [0xD05C], NFC: [0xD05C], NFD: [0x110F, 0x1172, 0x11B3], NFKC: [0xD05C], NFKD: [0x110F, 0x1172, 0x11B3] }, +{ source: [0xD05D], NFC: [0xD05D], NFD: [0x110F, 0x1172, 0x11B4], NFKC: [0xD05D], NFKD: [0x110F, 0x1172, 0x11B4] }, +{ source: [0xD05E], NFC: [0xD05E], NFD: [0x110F, 0x1172, 0x11B5], NFKC: [0xD05E], NFKD: [0x110F, 0x1172, 0x11B5] }, +{ source: [0xD05F], NFC: [0xD05F], NFD: [0x110F, 0x1172, 0x11B6], NFKC: [0xD05F], NFKD: [0x110F, 0x1172, 0x11B6] }, +{ source: [0xD060], NFC: [0xD060], NFD: [0x110F, 0x1172, 0x11B7], NFKC: [0xD060], NFKD: [0x110F, 0x1172, 0x11B7] }, +{ source: [0xD061], NFC: [0xD061], NFD: [0x110F, 0x1172, 0x11B8], NFKC: [0xD061], NFKD: [0x110F, 0x1172, 0x11B8] }, +{ source: [0xD062], NFC: [0xD062], NFD: [0x110F, 0x1172, 0x11B9], NFKC: [0xD062], NFKD: [0x110F, 0x1172, 0x11B9] }, +{ source: [0xD063], NFC: [0xD063], NFD: [0x110F, 0x1172, 0x11BA], NFKC: [0xD063], NFKD: [0x110F, 0x1172, 0x11BA] }, +{ source: [0xD064], NFC: [0xD064], NFD: [0x110F, 0x1172, 0x11BB], NFKC: [0xD064], NFKD: [0x110F, 0x1172, 0x11BB] }, +{ source: [0xD065], NFC: [0xD065], NFD: [0x110F, 0x1172, 0x11BC], NFKC: [0xD065], NFKD: [0x110F, 0x1172, 0x11BC] }, +{ source: [0xD066], NFC: [0xD066], NFD: [0x110F, 0x1172, 0x11BD], NFKC: [0xD066], NFKD: [0x110F, 0x1172, 0x11BD] }, +{ source: [0xD067], NFC: [0xD067], NFD: [0x110F, 0x1172, 0x11BE], NFKC: [0xD067], NFKD: [0x110F, 0x1172, 0x11BE] }, +{ source: [0xD068], NFC: [0xD068], NFD: [0x110F, 0x1172, 0x11BF], NFKC: [0xD068], NFKD: [0x110F, 0x1172, 0x11BF] }, +{ source: [0xD069], NFC: [0xD069], NFD: [0x110F, 0x1172, 0x11C0], NFKC: [0xD069], NFKD: [0x110F, 0x1172, 0x11C0] }, +{ source: [0xD06A], NFC: [0xD06A], NFD: [0x110F, 0x1172, 0x11C1], NFKC: [0xD06A], NFKD: [0x110F, 0x1172, 0x11C1] }, +{ source: [0xD06B], NFC: [0xD06B], NFD: [0x110F, 0x1172, 0x11C2], NFKC: [0xD06B], NFKD: [0x110F, 0x1172, 0x11C2] }, +{ source: [0xD06C], NFC: [0xD06C], NFD: [0x110F, 0x1173], NFKC: [0xD06C], NFKD: [0x110F, 0x1173] }, +{ source: [0xD06D], NFC: [0xD06D], NFD: [0x110F, 0x1173, 0x11A8], NFKC: [0xD06D], NFKD: [0x110F, 0x1173, 0x11A8] }, +{ source: [0xD06E], NFC: [0xD06E], NFD: [0x110F, 0x1173, 0x11A9], NFKC: [0xD06E], NFKD: [0x110F, 0x1173, 0x11A9] }, +{ source: [0xD06F], NFC: [0xD06F], NFD: [0x110F, 0x1173, 0x11AA], NFKC: [0xD06F], NFKD: [0x110F, 0x1173, 0x11AA] }, +{ source: [0xD070], NFC: [0xD070], NFD: [0x110F, 0x1173, 0x11AB], NFKC: [0xD070], NFKD: [0x110F, 0x1173, 0x11AB] }, +{ source: [0xD071], NFC: [0xD071], NFD: [0x110F, 0x1173, 0x11AC], NFKC: [0xD071], NFKD: [0x110F, 0x1173, 0x11AC] }, +{ source: [0xD072], NFC: [0xD072], NFD: [0x110F, 0x1173, 0x11AD], NFKC: [0xD072], NFKD: [0x110F, 0x1173, 0x11AD] }, +{ source: [0xD073], NFC: [0xD073], NFD: [0x110F, 0x1173, 0x11AE], NFKC: [0xD073], NFKD: [0x110F, 0x1173, 0x11AE] }, +{ source: [0xD074], NFC: [0xD074], NFD: [0x110F, 0x1173, 0x11AF], NFKC: [0xD074], NFKD: [0x110F, 0x1173, 0x11AF] }, +{ source: [0xD075], NFC: [0xD075], NFD: [0x110F, 0x1173, 0x11B0], NFKC: [0xD075], NFKD: [0x110F, 0x1173, 0x11B0] }, +{ source: [0xD076], NFC: [0xD076], NFD: [0x110F, 0x1173, 0x11B1], NFKC: [0xD076], NFKD: [0x110F, 0x1173, 0x11B1] }, +{ source: [0xD077], NFC: [0xD077], NFD: [0x110F, 0x1173, 0x11B2], NFKC: [0xD077], NFKD: [0x110F, 0x1173, 0x11B2] }, +{ source: [0xD078], NFC: [0xD078], NFD: [0x110F, 0x1173, 0x11B3], NFKC: [0xD078], NFKD: [0x110F, 0x1173, 0x11B3] }, +{ source: [0xD079], NFC: [0xD079], NFD: [0x110F, 0x1173, 0x11B4], NFKC: [0xD079], NFKD: [0x110F, 0x1173, 0x11B4] }, +{ source: [0xD07A], NFC: [0xD07A], NFD: [0x110F, 0x1173, 0x11B5], NFKC: [0xD07A], NFKD: [0x110F, 0x1173, 0x11B5] }, +{ source: [0xD07B], NFC: [0xD07B], NFD: [0x110F, 0x1173, 0x11B6], NFKC: [0xD07B], NFKD: [0x110F, 0x1173, 0x11B6] }, +{ source: [0xD07C], NFC: [0xD07C], NFD: [0x110F, 0x1173, 0x11B7], NFKC: [0xD07C], NFKD: [0x110F, 0x1173, 0x11B7] }, +{ source: [0xD07D], NFC: [0xD07D], NFD: [0x110F, 0x1173, 0x11B8], NFKC: [0xD07D], NFKD: [0x110F, 0x1173, 0x11B8] }, +{ source: [0xD07E], NFC: [0xD07E], NFD: [0x110F, 0x1173, 0x11B9], NFKC: [0xD07E], NFKD: [0x110F, 0x1173, 0x11B9] }, +{ source: [0xD07F], NFC: [0xD07F], NFD: [0x110F, 0x1173, 0x11BA], NFKC: [0xD07F], NFKD: [0x110F, 0x1173, 0x11BA] }, +{ source: [0xD080], NFC: [0xD080], NFD: [0x110F, 0x1173, 0x11BB], NFKC: [0xD080], NFKD: [0x110F, 0x1173, 0x11BB] }, +{ source: [0xD081], NFC: [0xD081], NFD: [0x110F, 0x1173, 0x11BC], NFKC: [0xD081], NFKD: [0x110F, 0x1173, 0x11BC] }, +{ source: [0xD082], NFC: [0xD082], NFD: [0x110F, 0x1173, 0x11BD], NFKC: [0xD082], NFKD: [0x110F, 0x1173, 0x11BD] }, +{ source: [0xD083], NFC: [0xD083], NFD: [0x110F, 0x1173, 0x11BE], NFKC: [0xD083], NFKD: [0x110F, 0x1173, 0x11BE] }, +{ source: [0xD084], NFC: [0xD084], NFD: [0x110F, 0x1173, 0x11BF], NFKC: [0xD084], NFKD: [0x110F, 0x1173, 0x11BF] }, +{ source: [0xD085], NFC: [0xD085], NFD: [0x110F, 0x1173, 0x11C0], NFKC: [0xD085], NFKD: [0x110F, 0x1173, 0x11C0] }, +{ source: [0xD086], NFC: [0xD086], NFD: [0x110F, 0x1173, 0x11C1], NFKC: [0xD086], NFKD: [0x110F, 0x1173, 0x11C1] }, +{ source: [0xD087], NFC: [0xD087], NFD: [0x110F, 0x1173, 0x11C2], NFKC: [0xD087], NFKD: [0x110F, 0x1173, 0x11C2] }, +{ source: [0xD088], NFC: [0xD088], NFD: [0x110F, 0x1174], NFKC: [0xD088], NFKD: [0x110F, 0x1174] }, +{ source: [0xD089], NFC: [0xD089], NFD: [0x110F, 0x1174, 0x11A8], NFKC: [0xD089], NFKD: [0x110F, 0x1174, 0x11A8] }, +{ source: [0xD08A], NFC: [0xD08A], NFD: [0x110F, 0x1174, 0x11A9], NFKC: [0xD08A], NFKD: [0x110F, 0x1174, 0x11A9] }, +{ source: [0xD08B], NFC: [0xD08B], NFD: [0x110F, 0x1174, 0x11AA], NFKC: [0xD08B], NFKD: [0x110F, 0x1174, 0x11AA] }, +{ source: [0xD08C], NFC: [0xD08C], NFD: [0x110F, 0x1174, 0x11AB], NFKC: [0xD08C], NFKD: [0x110F, 0x1174, 0x11AB] }, +{ source: [0xD08D], NFC: [0xD08D], NFD: [0x110F, 0x1174, 0x11AC], NFKC: [0xD08D], NFKD: [0x110F, 0x1174, 0x11AC] }, +{ source: [0xD08E], NFC: [0xD08E], NFD: [0x110F, 0x1174, 0x11AD], NFKC: [0xD08E], NFKD: [0x110F, 0x1174, 0x11AD] }, +{ source: [0xD08F], NFC: [0xD08F], NFD: [0x110F, 0x1174, 0x11AE], NFKC: [0xD08F], NFKD: [0x110F, 0x1174, 0x11AE] }, +{ source: [0xD090], NFC: [0xD090], NFD: [0x110F, 0x1174, 0x11AF], NFKC: [0xD090], NFKD: [0x110F, 0x1174, 0x11AF] }, +{ source: [0xD091], NFC: [0xD091], NFD: [0x110F, 0x1174, 0x11B0], NFKC: [0xD091], NFKD: [0x110F, 0x1174, 0x11B0] }, +{ source: [0xD092], NFC: [0xD092], NFD: [0x110F, 0x1174, 0x11B1], NFKC: [0xD092], NFKD: [0x110F, 0x1174, 0x11B1] }, +{ source: [0xD093], NFC: [0xD093], NFD: [0x110F, 0x1174, 0x11B2], NFKC: [0xD093], NFKD: [0x110F, 0x1174, 0x11B2] }, +{ source: [0xD094], NFC: [0xD094], NFD: [0x110F, 0x1174, 0x11B3], NFKC: [0xD094], NFKD: [0x110F, 0x1174, 0x11B3] }, +{ source: [0xD095], NFC: [0xD095], NFD: [0x110F, 0x1174, 0x11B4], NFKC: [0xD095], NFKD: [0x110F, 0x1174, 0x11B4] }, +{ source: [0xD096], NFC: [0xD096], NFD: [0x110F, 0x1174, 0x11B5], NFKC: [0xD096], NFKD: [0x110F, 0x1174, 0x11B5] }, +{ source: [0xD097], NFC: [0xD097], NFD: [0x110F, 0x1174, 0x11B6], NFKC: [0xD097], NFKD: [0x110F, 0x1174, 0x11B6] }, +{ source: [0xD098], NFC: [0xD098], NFD: [0x110F, 0x1174, 0x11B7], NFKC: [0xD098], NFKD: [0x110F, 0x1174, 0x11B7] }, +{ source: [0xD099], NFC: [0xD099], NFD: [0x110F, 0x1174, 0x11B8], NFKC: [0xD099], NFKD: [0x110F, 0x1174, 0x11B8] }, +{ source: [0xD09A], NFC: [0xD09A], NFD: [0x110F, 0x1174, 0x11B9], NFKC: [0xD09A], NFKD: [0x110F, 0x1174, 0x11B9] }, +{ source: [0xD09B], NFC: [0xD09B], NFD: [0x110F, 0x1174, 0x11BA], NFKC: [0xD09B], NFKD: [0x110F, 0x1174, 0x11BA] }, +{ source: [0xD09C], NFC: [0xD09C], NFD: [0x110F, 0x1174, 0x11BB], NFKC: [0xD09C], NFKD: [0x110F, 0x1174, 0x11BB] }, +{ source: [0xD09D], NFC: [0xD09D], NFD: [0x110F, 0x1174, 0x11BC], NFKC: [0xD09D], NFKD: [0x110F, 0x1174, 0x11BC] }, +{ source: [0xD09E], NFC: [0xD09E], NFD: [0x110F, 0x1174, 0x11BD], NFKC: [0xD09E], NFKD: [0x110F, 0x1174, 0x11BD] }, +{ source: [0xD09F], NFC: [0xD09F], NFD: [0x110F, 0x1174, 0x11BE], NFKC: [0xD09F], NFKD: [0x110F, 0x1174, 0x11BE] }, +{ source: [0xD0A0], NFC: [0xD0A0], NFD: [0x110F, 0x1174, 0x11BF], NFKC: [0xD0A0], NFKD: [0x110F, 0x1174, 0x11BF] }, +{ source: [0xD0A1], NFC: [0xD0A1], NFD: [0x110F, 0x1174, 0x11C0], NFKC: [0xD0A1], NFKD: [0x110F, 0x1174, 0x11C0] }, +{ source: [0xD0A2], NFC: [0xD0A2], NFD: [0x110F, 0x1174, 0x11C1], NFKC: [0xD0A2], NFKD: [0x110F, 0x1174, 0x11C1] }, +{ source: [0xD0A3], NFC: [0xD0A3], NFD: [0x110F, 0x1174, 0x11C2], NFKC: [0xD0A3], NFKD: [0x110F, 0x1174, 0x11C2] }, +{ source: [0xD0A4], NFC: [0xD0A4], NFD: [0x110F, 0x1175], NFKC: [0xD0A4], NFKD: [0x110F, 0x1175] }, +{ source: [0xD0A5], NFC: [0xD0A5], NFD: [0x110F, 0x1175, 0x11A8], NFKC: [0xD0A5], NFKD: [0x110F, 0x1175, 0x11A8] }, +{ source: [0xD0A6], NFC: [0xD0A6], NFD: [0x110F, 0x1175, 0x11A9], NFKC: [0xD0A6], NFKD: [0x110F, 0x1175, 0x11A9] }, +{ source: [0xD0A7], NFC: [0xD0A7], NFD: [0x110F, 0x1175, 0x11AA], NFKC: [0xD0A7], NFKD: [0x110F, 0x1175, 0x11AA] }, +{ source: [0xD0A8], NFC: [0xD0A8], NFD: [0x110F, 0x1175, 0x11AB], NFKC: [0xD0A8], NFKD: [0x110F, 0x1175, 0x11AB] }, +{ source: [0xD0A9], NFC: [0xD0A9], NFD: [0x110F, 0x1175, 0x11AC], NFKC: [0xD0A9], NFKD: [0x110F, 0x1175, 0x11AC] }, +{ source: [0xD0AA], NFC: [0xD0AA], NFD: [0x110F, 0x1175, 0x11AD], NFKC: [0xD0AA], NFKD: [0x110F, 0x1175, 0x11AD] }, +{ source: [0xD0AB], NFC: [0xD0AB], NFD: [0x110F, 0x1175, 0x11AE], NFKC: [0xD0AB], NFKD: [0x110F, 0x1175, 0x11AE] }, +{ source: [0xD0AC], NFC: [0xD0AC], NFD: [0x110F, 0x1175, 0x11AF], NFKC: [0xD0AC], NFKD: [0x110F, 0x1175, 0x11AF] }, +{ source: [0xD0AD], NFC: [0xD0AD], NFD: [0x110F, 0x1175, 0x11B0], NFKC: [0xD0AD], NFKD: [0x110F, 0x1175, 0x11B0] }, +{ source: [0xD0AE], NFC: [0xD0AE], NFD: [0x110F, 0x1175, 0x11B1], NFKC: [0xD0AE], NFKD: [0x110F, 0x1175, 0x11B1] }, +{ source: [0xD0AF], NFC: [0xD0AF], NFD: [0x110F, 0x1175, 0x11B2], NFKC: [0xD0AF], NFKD: [0x110F, 0x1175, 0x11B2] }, +{ source: [0xD0B0], NFC: [0xD0B0], NFD: [0x110F, 0x1175, 0x11B3], NFKC: [0xD0B0], NFKD: [0x110F, 0x1175, 0x11B3] }, +{ source: [0xD0B1], NFC: [0xD0B1], NFD: [0x110F, 0x1175, 0x11B4], NFKC: [0xD0B1], NFKD: [0x110F, 0x1175, 0x11B4] }, +{ source: [0xD0B2], NFC: [0xD0B2], NFD: [0x110F, 0x1175, 0x11B5], NFKC: [0xD0B2], NFKD: [0x110F, 0x1175, 0x11B5] }, +{ source: [0xD0B3], NFC: [0xD0B3], NFD: [0x110F, 0x1175, 0x11B6], NFKC: [0xD0B3], NFKD: [0x110F, 0x1175, 0x11B6] }, +{ source: [0xD0B4], NFC: [0xD0B4], NFD: [0x110F, 0x1175, 0x11B7], NFKC: [0xD0B4], NFKD: [0x110F, 0x1175, 0x11B7] }, +{ source: [0xD0B5], NFC: [0xD0B5], NFD: [0x110F, 0x1175, 0x11B8], NFKC: [0xD0B5], NFKD: [0x110F, 0x1175, 0x11B8] }, +{ source: [0xD0B6], NFC: [0xD0B6], NFD: [0x110F, 0x1175, 0x11B9], NFKC: [0xD0B6], NFKD: [0x110F, 0x1175, 0x11B9] }, +{ source: [0xD0B7], NFC: [0xD0B7], NFD: [0x110F, 0x1175, 0x11BA], NFKC: [0xD0B7], NFKD: [0x110F, 0x1175, 0x11BA] }, +{ source: [0xD0B8], NFC: [0xD0B8], NFD: [0x110F, 0x1175, 0x11BB], NFKC: [0xD0B8], NFKD: [0x110F, 0x1175, 0x11BB] }, +{ source: [0xD0B9], NFC: [0xD0B9], NFD: [0x110F, 0x1175, 0x11BC], NFKC: [0xD0B9], NFKD: [0x110F, 0x1175, 0x11BC] }, +{ source: [0xD0BA], NFC: [0xD0BA], NFD: [0x110F, 0x1175, 0x11BD], NFKC: [0xD0BA], NFKD: [0x110F, 0x1175, 0x11BD] }, +{ source: [0xD0BB], NFC: [0xD0BB], NFD: [0x110F, 0x1175, 0x11BE], NFKC: [0xD0BB], NFKD: [0x110F, 0x1175, 0x11BE] }, +{ source: [0xD0BC], NFC: [0xD0BC], NFD: [0x110F, 0x1175, 0x11BF], NFKC: [0xD0BC], NFKD: [0x110F, 0x1175, 0x11BF] }, +{ source: [0xD0BD], NFC: [0xD0BD], NFD: [0x110F, 0x1175, 0x11C0], NFKC: [0xD0BD], NFKD: [0x110F, 0x1175, 0x11C0] }, +{ source: [0xD0BE], NFC: [0xD0BE], NFD: [0x110F, 0x1175, 0x11C1], NFKC: [0xD0BE], NFKD: [0x110F, 0x1175, 0x11C1] }, +{ source: [0xD0BF], NFC: [0xD0BF], NFD: [0x110F, 0x1175, 0x11C2], NFKC: [0xD0BF], NFKD: [0x110F, 0x1175, 0x11C2] }, +{ source: [0xD0C0], NFC: [0xD0C0], NFD: [0x1110, 0x1161], NFKC: [0xD0C0], NFKD: [0x1110, 0x1161] }, +{ source: [0xD0C1], NFC: [0xD0C1], NFD: [0x1110, 0x1161, 0x11A8], NFKC: [0xD0C1], NFKD: [0x1110, 0x1161, 0x11A8] }, +{ source: [0xD0C2], NFC: [0xD0C2], NFD: [0x1110, 0x1161, 0x11A9], NFKC: [0xD0C2], NFKD: [0x1110, 0x1161, 0x11A9] }, +{ source: [0xD0C3], NFC: [0xD0C3], NFD: [0x1110, 0x1161, 0x11AA], NFKC: [0xD0C3], NFKD: [0x1110, 0x1161, 0x11AA] }, +{ source: [0xD0C4], NFC: [0xD0C4], NFD: [0x1110, 0x1161, 0x11AB], NFKC: [0xD0C4], NFKD: [0x1110, 0x1161, 0x11AB] }, +{ source: [0xD0C5], NFC: [0xD0C5], NFD: [0x1110, 0x1161, 0x11AC], NFKC: [0xD0C5], NFKD: [0x1110, 0x1161, 0x11AC] }, +{ source: [0xD0C6], NFC: [0xD0C6], NFD: [0x1110, 0x1161, 0x11AD], NFKC: [0xD0C6], NFKD: [0x1110, 0x1161, 0x11AD] }, +{ source: [0xD0C7], NFC: [0xD0C7], NFD: [0x1110, 0x1161, 0x11AE], NFKC: [0xD0C7], NFKD: [0x1110, 0x1161, 0x11AE] }, +{ source: [0xD0C8], NFC: [0xD0C8], NFD: [0x1110, 0x1161, 0x11AF], NFKC: [0xD0C8], NFKD: [0x1110, 0x1161, 0x11AF] }, +{ source: [0xD0C9], NFC: [0xD0C9], NFD: [0x1110, 0x1161, 0x11B0], NFKC: [0xD0C9], NFKD: [0x1110, 0x1161, 0x11B0] }, +{ source: [0xD0CA], NFC: [0xD0CA], NFD: [0x1110, 0x1161, 0x11B1], NFKC: [0xD0CA], NFKD: [0x1110, 0x1161, 0x11B1] }, +{ source: [0xD0CB], NFC: [0xD0CB], NFD: [0x1110, 0x1161, 0x11B2], NFKC: [0xD0CB], NFKD: [0x1110, 0x1161, 0x11B2] }, +{ source: [0xD0CC], NFC: [0xD0CC], NFD: [0x1110, 0x1161, 0x11B3], NFKC: [0xD0CC], NFKD: [0x1110, 0x1161, 0x11B3] }, +{ source: [0xD0CD], NFC: [0xD0CD], NFD: [0x1110, 0x1161, 0x11B4], NFKC: [0xD0CD], NFKD: [0x1110, 0x1161, 0x11B4] }, +{ source: [0xD0CE], NFC: [0xD0CE], NFD: [0x1110, 0x1161, 0x11B5], NFKC: [0xD0CE], NFKD: [0x1110, 0x1161, 0x11B5] }, +{ source: [0xD0CF], NFC: [0xD0CF], NFD: [0x1110, 0x1161, 0x11B6], NFKC: [0xD0CF], NFKD: [0x1110, 0x1161, 0x11B6] }, +{ source: [0xD0D0], NFC: [0xD0D0], NFD: [0x1110, 0x1161, 0x11B7], NFKC: [0xD0D0], NFKD: [0x1110, 0x1161, 0x11B7] }, +{ source: [0xD0D1], NFC: [0xD0D1], NFD: [0x1110, 0x1161, 0x11B8], NFKC: [0xD0D1], NFKD: [0x1110, 0x1161, 0x11B8] }, +{ source: [0xD0D2], NFC: [0xD0D2], NFD: [0x1110, 0x1161, 0x11B9], NFKC: [0xD0D2], NFKD: [0x1110, 0x1161, 0x11B9] }, +{ source: [0xD0D3], NFC: [0xD0D3], NFD: [0x1110, 0x1161, 0x11BA], NFKC: [0xD0D3], NFKD: [0x1110, 0x1161, 0x11BA] }, +{ source: [0xD0D4], NFC: [0xD0D4], NFD: [0x1110, 0x1161, 0x11BB], NFKC: [0xD0D4], NFKD: [0x1110, 0x1161, 0x11BB] }, +{ source: [0xD0D5], NFC: [0xD0D5], NFD: [0x1110, 0x1161, 0x11BC], NFKC: [0xD0D5], NFKD: [0x1110, 0x1161, 0x11BC] }, +{ source: [0xD0D6], NFC: [0xD0D6], NFD: [0x1110, 0x1161, 0x11BD], NFKC: [0xD0D6], NFKD: [0x1110, 0x1161, 0x11BD] }, +{ source: [0xD0D7], NFC: [0xD0D7], NFD: [0x1110, 0x1161, 0x11BE], NFKC: [0xD0D7], NFKD: [0x1110, 0x1161, 0x11BE] }, +{ source: [0xD0D8], NFC: [0xD0D8], NFD: [0x1110, 0x1161, 0x11BF], NFKC: [0xD0D8], NFKD: [0x1110, 0x1161, 0x11BF] }, +{ source: [0xD0D9], NFC: [0xD0D9], NFD: [0x1110, 0x1161, 0x11C0], NFKC: [0xD0D9], NFKD: [0x1110, 0x1161, 0x11C0] }, +{ source: [0xD0DA], NFC: [0xD0DA], NFD: [0x1110, 0x1161, 0x11C1], NFKC: [0xD0DA], NFKD: [0x1110, 0x1161, 0x11C1] }, +{ source: [0xD0DB], NFC: [0xD0DB], NFD: [0x1110, 0x1161, 0x11C2], NFKC: [0xD0DB], NFKD: [0x1110, 0x1161, 0x11C2] }, +{ source: [0xD0DC], NFC: [0xD0DC], NFD: [0x1110, 0x1162], NFKC: [0xD0DC], NFKD: [0x1110, 0x1162] }, +{ source: [0xD0DD], NFC: [0xD0DD], NFD: [0x1110, 0x1162, 0x11A8], NFKC: [0xD0DD], NFKD: [0x1110, 0x1162, 0x11A8] }, +{ source: [0xD0DE], NFC: [0xD0DE], NFD: [0x1110, 0x1162, 0x11A9], NFKC: [0xD0DE], NFKD: [0x1110, 0x1162, 0x11A9] }, +{ source: [0xD0DF], NFC: [0xD0DF], NFD: [0x1110, 0x1162, 0x11AA], NFKC: [0xD0DF], NFKD: [0x1110, 0x1162, 0x11AA] }, +{ source: [0xD0E0], NFC: [0xD0E0], NFD: [0x1110, 0x1162, 0x11AB], NFKC: [0xD0E0], NFKD: [0x1110, 0x1162, 0x11AB] }, +{ source: [0xD0E1], NFC: [0xD0E1], NFD: [0x1110, 0x1162, 0x11AC], NFKC: [0xD0E1], NFKD: [0x1110, 0x1162, 0x11AC] }, +{ source: [0xD0E2], NFC: [0xD0E2], NFD: [0x1110, 0x1162, 0x11AD], NFKC: [0xD0E2], NFKD: [0x1110, 0x1162, 0x11AD] }, +{ source: [0xD0E3], NFC: [0xD0E3], NFD: [0x1110, 0x1162, 0x11AE], NFKC: [0xD0E3], NFKD: [0x1110, 0x1162, 0x11AE] }, +{ source: [0xD0E4], NFC: [0xD0E4], NFD: [0x1110, 0x1162, 0x11AF], NFKC: [0xD0E4], NFKD: [0x1110, 0x1162, 0x11AF] }, +{ source: [0xD0E5], NFC: [0xD0E5], NFD: [0x1110, 0x1162, 0x11B0], NFKC: [0xD0E5], NFKD: [0x1110, 0x1162, 0x11B0] }, +{ source: [0xD0E6], NFC: [0xD0E6], NFD: [0x1110, 0x1162, 0x11B1], NFKC: [0xD0E6], NFKD: [0x1110, 0x1162, 0x11B1] }, +{ source: [0xD0E7], NFC: [0xD0E7], NFD: [0x1110, 0x1162, 0x11B2], NFKC: [0xD0E7], NFKD: [0x1110, 0x1162, 0x11B2] }, +{ source: [0xD0E8], NFC: [0xD0E8], NFD: [0x1110, 0x1162, 0x11B3], NFKC: [0xD0E8], NFKD: [0x1110, 0x1162, 0x11B3] }, +{ source: [0xD0E9], NFC: [0xD0E9], NFD: [0x1110, 0x1162, 0x11B4], NFKC: [0xD0E9], NFKD: [0x1110, 0x1162, 0x11B4] }, +{ source: [0xD0EA], NFC: [0xD0EA], NFD: [0x1110, 0x1162, 0x11B5], NFKC: [0xD0EA], NFKD: [0x1110, 0x1162, 0x11B5] }, +{ source: [0xD0EB], NFC: [0xD0EB], NFD: [0x1110, 0x1162, 0x11B6], NFKC: [0xD0EB], NFKD: [0x1110, 0x1162, 0x11B6] }, +{ source: [0xD0EC], NFC: [0xD0EC], NFD: [0x1110, 0x1162, 0x11B7], NFKC: [0xD0EC], NFKD: [0x1110, 0x1162, 0x11B7] }, +{ source: [0xD0ED], NFC: [0xD0ED], NFD: [0x1110, 0x1162, 0x11B8], NFKC: [0xD0ED], NFKD: [0x1110, 0x1162, 0x11B8] }, +{ source: [0xD0EE], NFC: [0xD0EE], NFD: [0x1110, 0x1162, 0x11B9], NFKC: [0xD0EE], NFKD: [0x1110, 0x1162, 0x11B9] }, +{ source: [0xD0EF], NFC: [0xD0EF], NFD: [0x1110, 0x1162, 0x11BA], NFKC: [0xD0EF], NFKD: [0x1110, 0x1162, 0x11BA] }, +{ source: [0xD0F0], NFC: [0xD0F0], NFD: [0x1110, 0x1162, 0x11BB], NFKC: [0xD0F0], NFKD: [0x1110, 0x1162, 0x11BB] }, +{ source: [0xD0F1], NFC: [0xD0F1], NFD: [0x1110, 0x1162, 0x11BC], NFKC: [0xD0F1], NFKD: [0x1110, 0x1162, 0x11BC] }, +{ source: [0xD0F2], NFC: [0xD0F2], NFD: [0x1110, 0x1162, 0x11BD], NFKC: [0xD0F2], NFKD: [0x1110, 0x1162, 0x11BD] }, +{ source: [0xD0F3], NFC: [0xD0F3], NFD: [0x1110, 0x1162, 0x11BE], NFKC: [0xD0F3], NFKD: [0x1110, 0x1162, 0x11BE] }, +{ source: [0xD0F4], NFC: [0xD0F4], NFD: [0x1110, 0x1162, 0x11BF], NFKC: [0xD0F4], NFKD: [0x1110, 0x1162, 0x11BF] }, +{ source: [0xD0F5], NFC: [0xD0F5], NFD: [0x1110, 0x1162, 0x11C0], NFKC: [0xD0F5], NFKD: [0x1110, 0x1162, 0x11C0] }, +{ source: [0xD0F6], NFC: [0xD0F6], NFD: [0x1110, 0x1162, 0x11C1], NFKC: [0xD0F6], NFKD: [0x1110, 0x1162, 0x11C1] }, +{ source: [0xD0F7], NFC: [0xD0F7], NFD: [0x1110, 0x1162, 0x11C2], NFKC: [0xD0F7], NFKD: [0x1110, 0x1162, 0x11C2] }, +{ source: [0xD0F8], NFC: [0xD0F8], NFD: [0x1110, 0x1163], NFKC: [0xD0F8], NFKD: [0x1110, 0x1163] }, +{ source: [0xD0F9], NFC: [0xD0F9], NFD: [0x1110, 0x1163, 0x11A8], NFKC: [0xD0F9], NFKD: [0x1110, 0x1163, 0x11A8] }, +{ source: [0xD0FA], NFC: [0xD0FA], NFD: [0x1110, 0x1163, 0x11A9], NFKC: [0xD0FA], NFKD: [0x1110, 0x1163, 0x11A9] }, +{ source: [0xD0FB], NFC: [0xD0FB], NFD: [0x1110, 0x1163, 0x11AA], NFKC: [0xD0FB], NFKD: [0x1110, 0x1163, 0x11AA] }, +{ source: [0xD0FC], NFC: [0xD0FC], NFD: [0x1110, 0x1163, 0x11AB], NFKC: [0xD0FC], NFKD: [0x1110, 0x1163, 0x11AB] }, +{ source: [0xD0FD], NFC: [0xD0FD], NFD: [0x1110, 0x1163, 0x11AC], NFKC: [0xD0FD], NFKD: [0x1110, 0x1163, 0x11AC] }, +{ source: [0xD0FE], NFC: [0xD0FE], NFD: [0x1110, 0x1163, 0x11AD], NFKC: [0xD0FE], NFKD: [0x1110, 0x1163, 0x11AD] }, +{ source: [0xD0FF], NFC: [0xD0FF], NFD: [0x1110, 0x1163, 0x11AE], NFKC: [0xD0FF], NFKD: [0x1110, 0x1163, 0x11AE] }, +{ source: [0xD100], NFC: [0xD100], NFD: [0x1110, 0x1163, 0x11AF], NFKC: [0xD100], NFKD: [0x1110, 0x1163, 0x11AF] }, +{ source: [0xD101], NFC: [0xD101], NFD: [0x1110, 0x1163, 0x11B0], NFKC: [0xD101], NFKD: [0x1110, 0x1163, 0x11B0] }, +{ source: [0xD102], NFC: [0xD102], NFD: [0x1110, 0x1163, 0x11B1], NFKC: [0xD102], NFKD: [0x1110, 0x1163, 0x11B1] }, +{ source: [0xD103], NFC: [0xD103], NFD: [0x1110, 0x1163, 0x11B2], NFKC: [0xD103], NFKD: [0x1110, 0x1163, 0x11B2] }, +{ source: [0xD104], NFC: [0xD104], NFD: [0x1110, 0x1163, 0x11B3], NFKC: [0xD104], NFKD: [0x1110, 0x1163, 0x11B3] }, +{ source: [0xD105], NFC: [0xD105], NFD: [0x1110, 0x1163, 0x11B4], NFKC: [0xD105], NFKD: [0x1110, 0x1163, 0x11B4] }, +{ source: [0xD106], NFC: [0xD106], NFD: [0x1110, 0x1163, 0x11B5], NFKC: [0xD106], NFKD: [0x1110, 0x1163, 0x11B5] }, +{ source: [0xD107], NFC: [0xD107], NFD: [0x1110, 0x1163, 0x11B6], NFKC: [0xD107], NFKD: [0x1110, 0x1163, 0x11B6] }, +{ source: [0xD108], NFC: [0xD108], NFD: [0x1110, 0x1163, 0x11B7], NFKC: [0xD108], NFKD: [0x1110, 0x1163, 0x11B7] }, +{ source: [0xD109], NFC: [0xD109], NFD: [0x1110, 0x1163, 0x11B8], NFKC: [0xD109], NFKD: [0x1110, 0x1163, 0x11B8] }, +{ source: [0xD10A], NFC: [0xD10A], NFD: [0x1110, 0x1163, 0x11B9], NFKC: [0xD10A], NFKD: [0x1110, 0x1163, 0x11B9] }, +{ source: [0xD10B], NFC: [0xD10B], NFD: [0x1110, 0x1163, 0x11BA], NFKC: [0xD10B], NFKD: [0x1110, 0x1163, 0x11BA] }, +{ source: [0xD10C], NFC: [0xD10C], NFD: [0x1110, 0x1163, 0x11BB], NFKC: [0xD10C], NFKD: [0x1110, 0x1163, 0x11BB] }, +{ source: [0xD10D], NFC: [0xD10D], NFD: [0x1110, 0x1163, 0x11BC], NFKC: [0xD10D], NFKD: [0x1110, 0x1163, 0x11BC] }, +{ source: [0xD10E], NFC: [0xD10E], NFD: [0x1110, 0x1163, 0x11BD], NFKC: [0xD10E], NFKD: [0x1110, 0x1163, 0x11BD] }, +{ source: [0xD10F], NFC: [0xD10F], NFD: [0x1110, 0x1163, 0x11BE], NFKC: [0xD10F], NFKD: [0x1110, 0x1163, 0x11BE] }, +{ source: [0xD110], NFC: [0xD110], NFD: [0x1110, 0x1163, 0x11BF], NFKC: [0xD110], NFKD: [0x1110, 0x1163, 0x11BF] }, +{ source: [0xD111], NFC: [0xD111], NFD: [0x1110, 0x1163, 0x11C0], NFKC: [0xD111], NFKD: [0x1110, 0x1163, 0x11C0] }, +{ source: [0xD112], NFC: [0xD112], NFD: [0x1110, 0x1163, 0x11C1], NFKC: [0xD112], NFKD: [0x1110, 0x1163, 0x11C1] }, +{ source: [0xD113], NFC: [0xD113], NFD: [0x1110, 0x1163, 0x11C2], NFKC: [0xD113], NFKD: [0x1110, 0x1163, 0x11C2] }, +{ source: [0xD114], NFC: [0xD114], NFD: [0x1110, 0x1164], NFKC: [0xD114], NFKD: [0x1110, 0x1164] }, +{ source: [0xD115], NFC: [0xD115], NFD: [0x1110, 0x1164, 0x11A8], NFKC: [0xD115], NFKD: [0x1110, 0x1164, 0x11A8] }, +{ source: [0xD116], NFC: [0xD116], NFD: [0x1110, 0x1164, 0x11A9], NFKC: [0xD116], NFKD: [0x1110, 0x1164, 0x11A9] }, +{ source: [0xD117], NFC: [0xD117], NFD: [0x1110, 0x1164, 0x11AA], NFKC: [0xD117], NFKD: [0x1110, 0x1164, 0x11AA] }, +{ source: [0xD118], NFC: [0xD118], NFD: [0x1110, 0x1164, 0x11AB], NFKC: [0xD118], NFKD: [0x1110, 0x1164, 0x11AB] }, +{ source: [0xD119], NFC: [0xD119], NFD: [0x1110, 0x1164, 0x11AC], NFKC: [0xD119], NFKD: [0x1110, 0x1164, 0x11AC] }, +{ source: [0xD11A], NFC: [0xD11A], NFD: [0x1110, 0x1164, 0x11AD], NFKC: [0xD11A], NFKD: [0x1110, 0x1164, 0x11AD] }, +{ source: [0xD11B], NFC: [0xD11B], NFD: [0x1110, 0x1164, 0x11AE], NFKC: [0xD11B], NFKD: [0x1110, 0x1164, 0x11AE] }, +{ source: [0xD11C], NFC: [0xD11C], NFD: [0x1110, 0x1164, 0x11AF], NFKC: [0xD11C], NFKD: [0x1110, 0x1164, 0x11AF] }, +{ source: [0xD11D], NFC: [0xD11D], NFD: [0x1110, 0x1164, 0x11B0], NFKC: [0xD11D], NFKD: [0x1110, 0x1164, 0x11B0] }, +{ source: [0xD11E], NFC: [0xD11E], NFD: [0x1110, 0x1164, 0x11B1], NFKC: [0xD11E], NFKD: [0x1110, 0x1164, 0x11B1] }, +{ source: [0xD11F], NFC: [0xD11F], NFD: [0x1110, 0x1164, 0x11B2], NFKC: [0xD11F], NFKD: [0x1110, 0x1164, 0x11B2] }, +{ source: [0xD120], NFC: [0xD120], NFD: [0x1110, 0x1164, 0x11B3], NFKC: [0xD120], NFKD: [0x1110, 0x1164, 0x11B3] }, +{ source: [0xD121], NFC: [0xD121], NFD: [0x1110, 0x1164, 0x11B4], NFKC: [0xD121], NFKD: [0x1110, 0x1164, 0x11B4] }, +{ source: [0xD122], NFC: [0xD122], NFD: [0x1110, 0x1164, 0x11B5], NFKC: [0xD122], NFKD: [0x1110, 0x1164, 0x11B5] }, +{ source: [0xD123], NFC: [0xD123], NFD: [0x1110, 0x1164, 0x11B6], NFKC: [0xD123], NFKD: [0x1110, 0x1164, 0x11B6] }, +{ source: [0xD124], NFC: [0xD124], NFD: [0x1110, 0x1164, 0x11B7], NFKC: [0xD124], NFKD: [0x1110, 0x1164, 0x11B7] }, +{ source: [0xD125], NFC: [0xD125], NFD: [0x1110, 0x1164, 0x11B8], NFKC: [0xD125], NFKD: [0x1110, 0x1164, 0x11B8] }, +{ source: [0xD126], NFC: [0xD126], NFD: [0x1110, 0x1164, 0x11B9], NFKC: [0xD126], NFKD: [0x1110, 0x1164, 0x11B9] }, +{ source: [0xD127], NFC: [0xD127], NFD: [0x1110, 0x1164, 0x11BA], NFKC: [0xD127], NFKD: [0x1110, 0x1164, 0x11BA] }, +{ source: [0xD128], NFC: [0xD128], NFD: [0x1110, 0x1164, 0x11BB], NFKC: [0xD128], NFKD: [0x1110, 0x1164, 0x11BB] }, +{ source: [0xD129], NFC: [0xD129], NFD: [0x1110, 0x1164, 0x11BC], NFKC: [0xD129], NFKD: [0x1110, 0x1164, 0x11BC] }, +{ source: [0xD12A], NFC: [0xD12A], NFD: [0x1110, 0x1164, 0x11BD], NFKC: [0xD12A], NFKD: [0x1110, 0x1164, 0x11BD] }, +{ source: [0xD12B], NFC: [0xD12B], NFD: [0x1110, 0x1164, 0x11BE], NFKC: [0xD12B], NFKD: [0x1110, 0x1164, 0x11BE] }, +{ source: [0xD12C], NFC: [0xD12C], NFD: [0x1110, 0x1164, 0x11BF], NFKC: [0xD12C], NFKD: [0x1110, 0x1164, 0x11BF] }, +{ source: [0xD12D], NFC: [0xD12D], NFD: [0x1110, 0x1164, 0x11C0], NFKC: [0xD12D], NFKD: [0x1110, 0x1164, 0x11C0] }, +{ source: [0xD12E], NFC: [0xD12E], NFD: [0x1110, 0x1164, 0x11C1], NFKC: [0xD12E], NFKD: [0x1110, 0x1164, 0x11C1] }, +{ source: [0xD12F], NFC: [0xD12F], NFD: [0x1110, 0x1164, 0x11C2], NFKC: [0xD12F], NFKD: [0x1110, 0x1164, 0x11C2] }, +{ source: [0xD130], NFC: [0xD130], NFD: [0x1110, 0x1165], NFKC: [0xD130], NFKD: [0x1110, 0x1165] }, +{ source: [0xD131], NFC: [0xD131], NFD: [0x1110, 0x1165, 0x11A8], NFKC: [0xD131], NFKD: [0x1110, 0x1165, 0x11A8] }, +{ source: [0xD132], NFC: [0xD132], NFD: [0x1110, 0x1165, 0x11A9], NFKC: [0xD132], NFKD: [0x1110, 0x1165, 0x11A9] }, +{ source: [0xD133], NFC: [0xD133], NFD: [0x1110, 0x1165, 0x11AA], NFKC: [0xD133], NFKD: [0x1110, 0x1165, 0x11AA] }, +{ source: [0xD134], NFC: [0xD134], NFD: [0x1110, 0x1165, 0x11AB], NFKC: [0xD134], NFKD: [0x1110, 0x1165, 0x11AB] }, +{ source: [0xD135], NFC: [0xD135], NFD: [0x1110, 0x1165, 0x11AC], NFKC: [0xD135], NFKD: [0x1110, 0x1165, 0x11AC] }, +{ source: [0xD136], NFC: [0xD136], NFD: [0x1110, 0x1165, 0x11AD], NFKC: [0xD136], NFKD: [0x1110, 0x1165, 0x11AD] }, +{ source: [0xD137], NFC: [0xD137], NFD: [0x1110, 0x1165, 0x11AE], NFKC: [0xD137], NFKD: [0x1110, 0x1165, 0x11AE] }, +{ source: [0xD138], NFC: [0xD138], NFD: [0x1110, 0x1165, 0x11AF], NFKC: [0xD138], NFKD: [0x1110, 0x1165, 0x11AF] }, +{ source: [0xD139], NFC: [0xD139], NFD: [0x1110, 0x1165, 0x11B0], NFKC: [0xD139], NFKD: [0x1110, 0x1165, 0x11B0] }, +{ source: [0xD13A], NFC: [0xD13A], NFD: [0x1110, 0x1165, 0x11B1], NFKC: [0xD13A], NFKD: [0x1110, 0x1165, 0x11B1] }, +{ source: [0xD13B], NFC: [0xD13B], NFD: [0x1110, 0x1165, 0x11B2], NFKC: [0xD13B], NFKD: [0x1110, 0x1165, 0x11B2] }, +{ source: [0xD13C], NFC: [0xD13C], NFD: [0x1110, 0x1165, 0x11B3], NFKC: [0xD13C], NFKD: [0x1110, 0x1165, 0x11B3] }, +{ source: [0xD13D], NFC: [0xD13D], NFD: [0x1110, 0x1165, 0x11B4], NFKC: [0xD13D], NFKD: [0x1110, 0x1165, 0x11B4] }, +{ source: [0xD13E], NFC: [0xD13E], NFD: [0x1110, 0x1165, 0x11B5], NFKC: [0xD13E], NFKD: [0x1110, 0x1165, 0x11B5] }, +{ source: [0xD13F], NFC: [0xD13F], NFD: [0x1110, 0x1165, 0x11B6], NFKC: [0xD13F], NFKD: [0x1110, 0x1165, 0x11B6] }, +{ source: [0xD140], NFC: [0xD140], NFD: [0x1110, 0x1165, 0x11B7], NFKC: [0xD140], NFKD: [0x1110, 0x1165, 0x11B7] }, +{ source: [0xD141], NFC: [0xD141], NFD: [0x1110, 0x1165, 0x11B8], NFKC: [0xD141], NFKD: [0x1110, 0x1165, 0x11B8] }, +{ source: [0xD142], NFC: [0xD142], NFD: [0x1110, 0x1165, 0x11B9], NFKC: [0xD142], NFKD: [0x1110, 0x1165, 0x11B9] }, +{ source: [0xD143], NFC: [0xD143], NFD: [0x1110, 0x1165, 0x11BA], NFKC: [0xD143], NFKD: [0x1110, 0x1165, 0x11BA] }, +{ source: [0xD144], NFC: [0xD144], NFD: [0x1110, 0x1165, 0x11BB], NFKC: [0xD144], NFKD: [0x1110, 0x1165, 0x11BB] }, +{ source: [0xD145], NFC: [0xD145], NFD: [0x1110, 0x1165, 0x11BC], NFKC: [0xD145], NFKD: [0x1110, 0x1165, 0x11BC] }, +{ source: [0xD146], NFC: [0xD146], NFD: [0x1110, 0x1165, 0x11BD], NFKC: [0xD146], NFKD: [0x1110, 0x1165, 0x11BD] }, +{ source: [0xD147], NFC: [0xD147], NFD: [0x1110, 0x1165, 0x11BE], NFKC: [0xD147], NFKD: [0x1110, 0x1165, 0x11BE] }, +{ source: [0xD148], NFC: [0xD148], NFD: [0x1110, 0x1165, 0x11BF], NFKC: [0xD148], NFKD: [0x1110, 0x1165, 0x11BF] }, +{ source: [0xD149], NFC: [0xD149], NFD: [0x1110, 0x1165, 0x11C0], NFKC: [0xD149], NFKD: [0x1110, 0x1165, 0x11C0] }, +{ source: [0xD14A], NFC: [0xD14A], NFD: [0x1110, 0x1165, 0x11C1], NFKC: [0xD14A], NFKD: [0x1110, 0x1165, 0x11C1] }, +{ source: [0xD14B], NFC: [0xD14B], NFD: [0x1110, 0x1165, 0x11C2], NFKC: [0xD14B], NFKD: [0x1110, 0x1165, 0x11C2] }, +{ source: [0xD14C], NFC: [0xD14C], NFD: [0x1110, 0x1166], NFKC: [0xD14C], NFKD: [0x1110, 0x1166] }, +{ source: [0xD14D], NFC: [0xD14D], NFD: [0x1110, 0x1166, 0x11A8], NFKC: [0xD14D], NFKD: [0x1110, 0x1166, 0x11A8] }, +{ source: [0xD14E], NFC: [0xD14E], NFD: [0x1110, 0x1166, 0x11A9], NFKC: [0xD14E], NFKD: [0x1110, 0x1166, 0x11A9] }, +{ source: [0xD14F], NFC: [0xD14F], NFD: [0x1110, 0x1166, 0x11AA], NFKC: [0xD14F], NFKD: [0x1110, 0x1166, 0x11AA] }, +{ source: [0xD150], NFC: [0xD150], NFD: [0x1110, 0x1166, 0x11AB], NFKC: [0xD150], NFKD: [0x1110, 0x1166, 0x11AB] }, +{ source: [0xD151], NFC: [0xD151], NFD: [0x1110, 0x1166, 0x11AC], NFKC: [0xD151], NFKD: [0x1110, 0x1166, 0x11AC] }, +{ source: [0xD152], NFC: [0xD152], NFD: [0x1110, 0x1166, 0x11AD], NFKC: [0xD152], NFKD: [0x1110, 0x1166, 0x11AD] }, +{ source: [0xD153], NFC: [0xD153], NFD: [0x1110, 0x1166, 0x11AE], NFKC: [0xD153], NFKD: [0x1110, 0x1166, 0x11AE] }, +{ source: [0xD154], NFC: [0xD154], NFD: [0x1110, 0x1166, 0x11AF], NFKC: [0xD154], NFKD: [0x1110, 0x1166, 0x11AF] }, +{ source: [0xD155], NFC: [0xD155], NFD: [0x1110, 0x1166, 0x11B0], NFKC: [0xD155], NFKD: [0x1110, 0x1166, 0x11B0] }, +{ source: [0xD156], NFC: [0xD156], NFD: [0x1110, 0x1166, 0x11B1], NFKC: [0xD156], NFKD: [0x1110, 0x1166, 0x11B1] }, +{ source: [0xD157], NFC: [0xD157], NFD: [0x1110, 0x1166, 0x11B2], NFKC: [0xD157], NFKD: [0x1110, 0x1166, 0x11B2] }, +{ source: [0xD158], NFC: [0xD158], NFD: [0x1110, 0x1166, 0x11B3], NFKC: [0xD158], NFKD: [0x1110, 0x1166, 0x11B3] }, +{ source: [0xD159], NFC: [0xD159], NFD: [0x1110, 0x1166, 0x11B4], NFKC: [0xD159], NFKD: [0x1110, 0x1166, 0x11B4] }, +{ source: [0xD15A], NFC: [0xD15A], NFD: [0x1110, 0x1166, 0x11B5], NFKC: [0xD15A], NFKD: [0x1110, 0x1166, 0x11B5] }, +{ source: [0xD15B], NFC: [0xD15B], NFD: [0x1110, 0x1166, 0x11B6], NFKC: [0xD15B], NFKD: [0x1110, 0x1166, 0x11B6] }, +{ source: [0xD15C], NFC: [0xD15C], NFD: [0x1110, 0x1166, 0x11B7], NFKC: [0xD15C], NFKD: [0x1110, 0x1166, 0x11B7] }, +{ source: [0xD15D], NFC: [0xD15D], NFD: [0x1110, 0x1166, 0x11B8], NFKC: [0xD15D], NFKD: [0x1110, 0x1166, 0x11B8] }, +{ source: [0xD15E], NFC: [0xD15E], NFD: [0x1110, 0x1166, 0x11B9], NFKC: [0xD15E], NFKD: [0x1110, 0x1166, 0x11B9] }, +{ source: [0xD15F], NFC: [0xD15F], NFD: [0x1110, 0x1166, 0x11BA], NFKC: [0xD15F], NFKD: [0x1110, 0x1166, 0x11BA] }, +{ source: [0xD160], NFC: [0xD160], NFD: [0x1110, 0x1166, 0x11BB], NFKC: [0xD160], NFKD: [0x1110, 0x1166, 0x11BB] }, +{ source: [0xD161], NFC: [0xD161], NFD: [0x1110, 0x1166, 0x11BC], NFKC: [0xD161], NFKD: [0x1110, 0x1166, 0x11BC] }, +{ source: [0xD162], NFC: [0xD162], NFD: [0x1110, 0x1166, 0x11BD], NFKC: [0xD162], NFKD: [0x1110, 0x1166, 0x11BD] }, +{ source: [0xD163], NFC: [0xD163], NFD: [0x1110, 0x1166, 0x11BE], NFKC: [0xD163], NFKD: [0x1110, 0x1166, 0x11BE] }, +{ source: [0xD164], NFC: [0xD164], NFD: [0x1110, 0x1166, 0x11BF], NFKC: [0xD164], NFKD: [0x1110, 0x1166, 0x11BF] }, +{ source: [0xD165], NFC: [0xD165], NFD: [0x1110, 0x1166, 0x11C0], NFKC: [0xD165], NFKD: [0x1110, 0x1166, 0x11C0] }, +{ source: [0xD166], NFC: [0xD166], NFD: [0x1110, 0x1166, 0x11C1], NFKC: [0xD166], NFKD: [0x1110, 0x1166, 0x11C1] }, +{ source: [0xD167], NFC: [0xD167], NFD: [0x1110, 0x1166, 0x11C2], NFKC: [0xD167], NFKD: [0x1110, 0x1166, 0x11C2] }, +{ source: [0xD168], NFC: [0xD168], NFD: [0x1110, 0x1167], NFKC: [0xD168], NFKD: [0x1110, 0x1167] }, +{ source: [0xD169], NFC: [0xD169], NFD: [0x1110, 0x1167, 0x11A8], NFKC: [0xD169], NFKD: [0x1110, 0x1167, 0x11A8] }, +{ source: [0xD16A], NFC: [0xD16A], NFD: [0x1110, 0x1167, 0x11A9], NFKC: [0xD16A], NFKD: [0x1110, 0x1167, 0x11A9] }, +{ source: [0xD16B], NFC: [0xD16B], NFD: [0x1110, 0x1167, 0x11AA], NFKC: [0xD16B], NFKD: [0x1110, 0x1167, 0x11AA] }, +{ source: [0xD16C], NFC: [0xD16C], NFD: [0x1110, 0x1167, 0x11AB], NFKC: [0xD16C], NFKD: [0x1110, 0x1167, 0x11AB] }, +{ source: [0xD16D], NFC: [0xD16D], NFD: [0x1110, 0x1167, 0x11AC], NFKC: [0xD16D], NFKD: [0x1110, 0x1167, 0x11AC] }, +{ source: [0xD16E], NFC: [0xD16E], NFD: [0x1110, 0x1167, 0x11AD], NFKC: [0xD16E], NFKD: [0x1110, 0x1167, 0x11AD] }, +{ source: [0xD16F], NFC: [0xD16F], NFD: [0x1110, 0x1167, 0x11AE], NFKC: [0xD16F], NFKD: [0x1110, 0x1167, 0x11AE] }, +{ source: [0xD170], NFC: [0xD170], NFD: [0x1110, 0x1167, 0x11AF], NFKC: [0xD170], NFKD: [0x1110, 0x1167, 0x11AF] }, +{ source: [0xD171], NFC: [0xD171], NFD: [0x1110, 0x1167, 0x11B0], NFKC: [0xD171], NFKD: [0x1110, 0x1167, 0x11B0] }, +{ source: [0xD172], NFC: [0xD172], NFD: [0x1110, 0x1167, 0x11B1], NFKC: [0xD172], NFKD: [0x1110, 0x1167, 0x11B1] }, +{ source: [0xD173], NFC: [0xD173], NFD: [0x1110, 0x1167, 0x11B2], NFKC: [0xD173], NFKD: [0x1110, 0x1167, 0x11B2] }, +{ source: [0xD174], NFC: [0xD174], NFD: [0x1110, 0x1167, 0x11B3], NFKC: [0xD174], NFKD: [0x1110, 0x1167, 0x11B3] }, +{ source: [0xD175], NFC: [0xD175], NFD: [0x1110, 0x1167, 0x11B4], NFKC: [0xD175], NFKD: [0x1110, 0x1167, 0x11B4] }, +{ source: [0xD176], NFC: [0xD176], NFD: [0x1110, 0x1167, 0x11B5], NFKC: [0xD176], NFKD: [0x1110, 0x1167, 0x11B5] }, +{ source: [0xD177], NFC: [0xD177], NFD: [0x1110, 0x1167, 0x11B6], NFKC: [0xD177], NFKD: [0x1110, 0x1167, 0x11B6] }, +{ source: [0xD178], NFC: [0xD178], NFD: [0x1110, 0x1167, 0x11B7], NFKC: [0xD178], NFKD: [0x1110, 0x1167, 0x11B7] }, +{ source: [0xD179], NFC: [0xD179], NFD: [0x1110, 0x1167, 0x11B8], NFKC: [0xD179], NFKD: [0x1110, 0x1167, 0x11B8] }, +{ source: [0xD17A], NFC: [0xD17A], NFD: [0x1110, 0x1167, 0x11B9], NFKC: [0xD17A], NFKD: [0x1110, 0x1167, 0x11B9] }, +{ source: [0xD17B], NFC: [0xD17B], NFD: [0x1110, 0x1167, 0x11BA], NFKC: [0xD17B], NFKD: [0x1110, 0x1167, 0x11BA] }, +{ source: [0xD17C], NFC: [0xD17C], NFD: [0x1110, 0x1167, 0x11BB], NFKC: [0xD17C], NFKD: [0x1110, 0x1167, 0x11BB] }, +{ source: [0xD17D], NFC: [0xD17D], NFD: [0x1110, 0x1167, 0x11BC], NFKC: [0xD17D], NFKD: [0x1110, 0x1167, 0x11BC] }, +{ source: [0xD17E], NFC: [0xD17E], NFD: [0x1110, 0x1167, 0x11BD], NFKC: [0xD17E], NFKD: [0x1110, 0x1167, 0x11BD] }, +{ source: [0xD17F], NFC: [0xD17F], NFD: [0x1110, 0x1167, 0x11BE], NFKC: [0xD17F], NFKD: [0x1110, 0x1167, 0x11BE] }, +{ source: [0xD180], NFC: [0xD180], NFD: [0x1110, 0x1167, 0x11BF], NFKC: [0xD180], NFKD: [0x1110, 0x1167, 0x11BF] }, +{ source: [0xD181], NFC: [0xD181], NFD: [0x1110, 0x1167, 0x11C0], NFKC: [0xD181], NFKD: [0x1110, 0x1167, 0x11C0] }, +{ source: [0xD182], NFC: [0xD182], NFD: [0x1110, 0x1167, 0x11C1], NFKC: [0xD182], NFKD: [0x1110, 0x1167, 0x11C1] }, +{ source: [0xD183], NFC: [0xD183], NFD: [0x1110, 0x1167, 0x11C2], NFKC: [0xD183], NFKD: [0x1110, 0x1167, 0x11C2] }, +{ source: [0xD184], NFC: [0xD184], NFD: [0x1110, 0x1168], NFKC: [0xD184], NFKD: [0x1110, 0x1168] }, +{ source: [0xD185], NFC: [0xD185], NFD: [0x1110, 0x1168, 0x11A8], NFKC: [0xD185], NFKD: [0x1110, 0x1168, 0x11A8] }, +{ source: [0xD186], NFC: [0xD186], NFD: [0x1110, 0x1168, 0x11A9], NFKC: [0xD186], NFKD: [0x1110, 0x1168, 0x11A9] }, +{ source: [0xD187], NFC: [0xD187], NFD: [0x1110, 0x1168, 0x11AA], NFKC: [0xD187], NFKD: [0x1110, 0x1168, 0x11AA] }, +{ source: [0xD188], NFC: [0xD188], NFD: [0x1110, 0x1168, 0x11AB], NFKC: [0xD188], NFKD: [0x1110, 0x1168, 0x11AB] }, +{ source: [0xD189], NFC: [0xD189], NFD: [0x1110, 0x1168, 0x11AC], NFKC: [0xD189], NFKD: [0x1110, 0x1168, 0x11AC] }, +{ source: [0xD18A], NFC: [0xD18A], NFD: [0x1110, 0x1168, 0x11AD], NFKC: [0xD18A], NFKD: [0x1110, 0x1168, 0x11AD] }, +{ source: [0xD18B], NFC: [0xD18B], NFD: [0x1110, 0x1168, 0x11AE], NFKC: [0xD18B], NFKD: [0x1110, 0x1168, 0x11AE] }, +{ source: [0xD18C], NFC: [0xD18C], NFD: [0x1110, 0x1168, 0x11AF], NFKC: [0xD18C], NFKD: [0x1110, 0x1168, 0x11AF] }, +{ source: [0xD18D], NFC: [0xD18D], NFD: [0x1110, 0x1168, 0x11B0], NFKC: [0xD18D], NFKD: [0x1110, 0x1168, 0x11B0] }, +{ source: [0xD18E], NFC: [0xD18E], NFD: [0x1110, 0x1168, 0x11B1], NFKC: [0xD18E], NFKD: [0x1110, 0x1168, 0x11B1] }, +{ source: [0xD18F], NFC: [0xD18F], NFD: [0x1110, 0x1168, 0x11B2], NFKC: [0xD18F], NFKD: [0x1110, 0x1168, 0x11B2] }, +{ source: [0xD190], NFC: [0xD190], NFD: [0x1110, 0x1168, 0x11B3], NFKC: [0xD190], NFKD: [0x1110, 0x1168, 0x11B3] }, +{ source: [0xD191], NFC: [0xD191], NFD: [0x1110, 0x1168, 0x11B4], NFKC: [0xD191], NFKD: [0x1110, 0x1168, 0x11B4] }, +{ source: [0xD192], NFC: [0xD192], NFD: [0x1110, 0x1168, 0x11B5], NFKC: [0xD192], NFKD: [0x1110, 0x1168, 0x11B5] }, +{ source: [0xD193], NFC: [0xD193], NFD: [0x1110, 0x1168, 0x11B6], NFKC: [0xD193], NFKD: [0x1110, 0x1168, 0x11B6] }, +{ source: [0xD194], NFC: [0xD194], NFD: [0x1110, 0x1168, 0x11B7], NFKC: [0xD194], NFKD: [0x1110, 0x1168, 0x11B7] }, +{ source: [0xD195], NFC: [0xD195], NFD: [0x1110, 0x1168, 0x11B8], NFKC: [0xD195], NFKD: [0x1110, 0x1168, 0x11B8] }, +{ source: [0xD196], NFC: [0xD196], NFD: [0x1110, 0x1168, 0x11B9], NFKC: [0xD196], NFKD: [0x1110, 0x1168, 0x11B9] }, +{ source: [0xD197], NFC: [0xD197], NFD: [0x1110, 0x1168, 0x11BA], NFKC: [0xD197], NFKD: [0x1110, 0x1168, 0x11BA] }, +{ source: [0xD198], NFC: [0xD198], NFD: [0x1110, 0x1168, 0x11BB], NFKC: [0xD198], NFKD: [0x1110, 0x1168, 0x11BB] }, +{ source: [0xD199], NFC: [0xD199], NFD: [0x1110, 0x1168, 0x11BC], NFKC: [0xD199], NFKD: [0x1110, 0x1168, 0x11BC] }, +{ source: [0xD19A], NFC: [0xD19A], NFD: [0x1110, 0x1168, 0x11BD], NFKC: [0xD19A], NFKD: [0x1110, 0x1168, 0x11BD] }, +{ source: [0xD19B], NFC: [0xD19B], NFD: [0x1110, 0x1168, 0x11BE], NFKC: [0xD19B], NFKD: [0x1110, 0x1168, 0x11BE] }, +{ source: [0xD19C], NFC: [0xD19C], NFD: [0x1110, 0x1168, 0x11BF], NFKC: [0xD19C], NFKD: [0x1110, 0x1168, 0x11BF] }, +{ source: [0xD19D], NFC: [0xD19D], NFD: [0x1110, 0x1168, 0x11C0], NFKC: [0xD19D], NFKD: [0x1110, 0x1168, 0x11C0] }, +{ source: [0xD19E], NFC: [0xD19E], NFD: [0x1110, 0x1168, 0x11C1], NFKC: [0xD19E], NFKD: [0x1110, 0x1168, 0x11C1] }, +{ source: [0xD19F], NFC: [0xD19F], NFD: [0x1110, 0x1168, 0x11C2], NFKC: [0xD19F], NFKD: [0x1110, 0x1168, 0x11C2] }, +{ source: [0xD1A0], NFC: [0xD1A0], NFD: [0x1110, 0x1169], NFKC: [0xD1A0], NFKD: [0x1110, 0x1169] }, +{ source: [0xD1A1], NFC: [0xD1A1], NFD: [0x1110, 0x1169, 0x11A8], NFKC: [0xD1A1], NFKD: [0x1110, 0x1169, 0x11A8] }, +{ source: [0xD1A2], NFC: [0xD1A2], NFD: [0x1110, 0x1169, 0x11A9], NFKC: [0xD1A2], NFKD: [0x1110, 0x1169, 0x11A9] }, +{ source: [0xD1A3], NFC: [0xD1A3], NFD: [0x1110, 0x1169, 0x11AA], NFKC: [0xD1A3], NFKD: [0x1110, 0x1169, 0x11AA] }, +{ source: [0xD1A4], NFC: [0xD1A4], NFD: [0x1110, 0x1169, 0x11AB], NFKC: [0xD1A4], NFKD: [0x1110, 0x1169, 0x11AB] }, +{ source: [0xD1A5], NFC: [0xD1A5], NFD: [0x1110, 0x1169, 0x11AC], NFKC: [0xD1A5], NFKD: [0x1110, 0x1169, 0x11AC] }, +{ source: [0xD1A6], NFC: [0xD1A6], NFD: [0x1110, 0x1169, 0x11AD], NFKC: [0xD1A6], NFKD: [0x1110, 0x1169, 0x11AD] }, +{ source: [0xD1A7], NFC: [0xD1A7], NFD: [0x1110, 0x1169, 0x11AE], NFKC: [0xD1A7], NFKD: [0x1110, 0x1169, 0x11AE] }, +{ source: [0xD1A8], NFC: [0xD1A8], NFD: [0x1110, 0x1169, 0x11AF], NFKC: [0xD1A8], NFKD: [0x1110, 0x1169, 0x11AF] }, +{ source: [0xD1A9], NFC: [0xD1A9], NFD: [0x1110, 0x1169, 0x11B0], NFKC: [0xD1A9], NFKD: [0x1110, 0x1169, 0x11B0] }, +{ source: [0xD1AA], NFC: [0xD1AA], NFD: [0x1110, 0x1169, 0x11B1], NFKC: [0xD1AA], NFKD: [0x1110, 0x1169, 0x11B1] }, +{ source: [0xD1AB], NFC: [0xD1AB], NFD: [0x1110, 0x1169, 0x11B2], NFKC: [0xD1AB], NFKD: [0x1110, 0x1169, 0x11B2] }, +{ source: [0xD1AC], NFC: [0xD1AC], NFD: [0x1110, 0x1169, 0x11B3], NFKC: [0xD1AC], NFKD: [0x1110, 0x1169, 0x11B3] }, +{ source: [0xD1AD], NFC: [0xD1AD], NFD: [0x1110, 0x1169, 0x11B4], NFKC: [0xD1AD], NFKD: [0x1110, 0x1169, 0x11B4] }, +{ source: [0xD1AE], NFC: [0xD1AE], NFD: [0x1110, 0x1169, 0x11B5], NFKC: [0xD1AE], NFKD: [0x1110, 0x1169, 0x11B5] }, +{ source: [0xD1AF], NFC: [0xD1AF], NFD: [0x1110, 0x1169, 0x11B6], NFKC: [0xD1AF], NFKD: [0x1110, 0x1169, 0x11B6] }, +{ source: [0xD1B0], NFC: [0xD1B0], NFD: [0x1110, 0x1169, 0x11B7], NFKC: [0xD1B0], NFKD: [0x1110, 0x1169, 0x11B7] }, +{ source: [0xD1B1], NFC: [0xD1B1], NFD: [0x1110, 0x1169, 0x11B8], NFKC: [0xD1B1], NFKD: [0x1110, 0x1169, 0x11B8] }, +{ source: [0xD1B2], NFC: [0xD1B2], NFD: [0x1110, 0x1169, 0x11B9], NFKC: [0xD1B2], NFKD: [0x1110, 0x1169, 0x11B9] }, +{ source: [0xD1B3], NFC: [0xD1B3], NFD: [0x1110, 0x1169, 0x11BA], NFKC: [0xD1B3], NFKD: [0x1110, 0x1169, 0x11BA] }, +{ source: [0xD1B4], NFC: [0xD1B4], NFD: [0x1110, 0x1169, 0x11BB], NFKC: [0xD1B4], NFKD: [0x1110, 0x1169, 0x11BB] }, +{ source: [0xD1B5], NFC: [0xD1B5], NFD: [0x1110, 0x1169, 0x11BC], NFKC: [0xD1B5], NFKD: [0x1110, 0x1169, 0x11BC] }, +{ source: [0xD1B6], NFC: [0xD1B6], NFD: [0x1110, 0x1169, 0x11BD], NFKC: [0xD1B6], NFKD: [0x1110, 0x1169, 0x11BD] }, +{ source: [0xD1B7], NFC: [0xD1B7], NFD: [0x1110, 0x1169, 0x11BE], NFKC: [0xD1B7], NFKD: [0x1110, 0x1169, 0x11BE] }, +{ source: [0xD1B8], NFC: [0xD1B8], NFD: [0x1110, 0x1169, 0x11BF], NFKC: [0xD1B8], NFKD: [0x1110, 0x1169, 0x11BF] }, +{ source: [0xD1B9], NFC: [0xD1B9], NFD: [0x1110, 0x1169, 0x11C0], NFKC: [0xD1B9], NFKD: [0x1110, 0x1169, 0x11C0] }, +{ source: [0xD1BA], NFC: [0xD1BA], NFD: [0x1110, 0x1169, 0x11C1], NFKC: [0xD1BA], NFKD: [0x1110, 0x1169, 0x11C1] }, +{ source: [0xD1BB], NFC: [0xD1BB], NFD: [0x1110, 0x1169, 0x11C2], NFKC: [0xD1BB], NFKD: [0x1110, 0x1169, 0x11C2] }, +{ source: [0xD1BC], NFC: [0xD1BC], NFD: [0x1110, 0x116A], NFKC: [0xD1BC], NFKD: [0x1110, 0x116A] }, +{ source: [0xD1BD], NFC: [0xD1BD], NFD: [0x1110, 0x116A, 0x11A8], NFKC: [0xD1BD], NFKD: [0x1110, 0x116A, 0x11A8] }, +{ source: [0xD1BE], NFC: [0xD1BE], NFD: [0x1110, 0x116A, 0x11A9], NFKC: [0xD1BE], NFKD: [0x1110, 0x116A, 0x11A9] }, +{ source: [0xD1BF], NFC: [0xD1BF], NFD: [0x1110, 0x116A, 0x11AA], NFKC: [0xD1BF], NFKD: [0x1110, 0x116A, 0x11AA] }, +{ source: [0xD1C0], NFC: [0xD1C0], NFD: [0x1110, 0x116A, 0x11AB], NFKC: [0xD1C0], NFKD: [0x1110, 0x116A, 0x11AB] }, +{ source: [0xD1C1], NFC: [0xD1C1], NFD: [0x1110, 0x116A, 0x11AC], NFKC: [0xD1C1], NFKD: [0x1110, 0x116A, 0x11AC] }, +{ source: [0xD1C2], NFC: [0xD1C2], NFD: [0x1110, 0x116A, 0x11AD], NFKC: [0xD1C2], NFKD: [0x1110, 0x116A, 0x11AD] }, +{ source: [0xD1C3], NFC: [0xD1C3], NFD: [0x1110, 0x116A, 0x11AE], NFKC: [0xD1C3], NFKD: [0x1110, 0x116A, 0x11AE] }, +{ source: [0xD1C4], NFC: [0xD1C4], NFD: [0x1110, 0x116A, 0x11AF], NFKC: [0xD1C4], NFKD: [0x1110, 0x116A, 0x11AF] }, +{ source: [0xD1C5], NFC: [0xD1C5], NFD: [0x1110, 0x116A, 0x11B0], NFKC: [0xD1C5], NFKD: [0x1110, 0x116A, 0x11B0] }, +{ source: [0xD1C6], NFC: [0xD1C6], NFD: [0x1110, 0x116A, 0x11B1], NFKC: [0xD1C6], NFKD: [0x1110, 0x116A, 0x11B1] }, +{ source: [0xD1C7], NFC: [0xD1C7], NFD: [0x1110, 0x116A, 0x11B2], NFKC: [0xD1C7], NFKD: [0x1110, 0x116A, 0x11B2] }, +{ source: [0xD1C8], NFC: [0xD1C8], NFD: [0x1110, 0x116A, 0x11B3], NFKC: [0xD1C8], NFKD: [0x1110, 0x116A, 0x11B3] }, +{ source: [0xD1C9], NFC: [0xD1C9], NFD: [0x1110, 0x116A, 0x11B4], NFKC: [0xD1C9], NFKD: [0x1110, 0x116A, 0x11B4] }, +{ source: [0xD1CA], NFC: [0xD1CA], NFD: [0x1110, 0x116A, 0x11B5], NFKC: [0xD1CA], NFKD: [0x1110, 0x116A, 0x11B5] }, +{ source: [0xD1CB], NFC: [0xD1CB], NFD: [0x1110, 0x116A, 0x11B6], NFKC: [0xD1CB], NFKD: [0x1110, 0x116A, 0x11B6] }, +{ source: [0xD1CC], NFC: [0xD1CC], NFD: [0x1110, 0x116A, 0x11B7], NFKC: [0xD1CC], NFKD: [0x1110, 0x116A, 0x11B7] }, +{ source: [0xD1CD], NFC: [0xD1CD], NFD: [0x1110, 0x116A, 0x11B8], NFKC: [0xD1CD], NFKD: [0x1110, 0x116A, 0x11B8] }, +{ source: [0xD1CE], NFC: [0xD1CE], NFD: [0x1110, 0x116A, 0x11B9], NFKC: [0xD1CE], NFKD: [0x1110, 0x116A, 0x11B9] }, +{ source: [0xD1CF], NFC: [0xD1CF], NFD: [0x1110, 0x116A, 0x11BA], NFKC: [0xD1CF], NFKD: [0x1110, 0x116A, 0x11BA] }, +{ source: [0xD1D0], NFC: [0xD1D0], NFD: [0x1110, 0x116A, 0x11BB], NFKC: [0xD1D0], NFKD: [0x1110, 0x116A, 0x11BB] }, +{ source: [0xD1D1], NFC: [0xD1D1], NFD: [0x1110, 0x116A, 0x11BC], NFKC: [0xD1D1], NFKD: [0x1110, 0x116A, 0x11BC] }, +{ source: [0xD1D2], NFC: [0xD1D2], NFD: [0x1110, 0x116A, 0x11BD], NFKC: [0xD1D2], NFKD: [0x1110, 0x116A, 0x11BD] }, +{ source: [0xD1D3], NFC: [0xD1D3], NFD: [0x1110, 0x116A, 0x11BE], NFKC: [0xD1D3], NFKD: [0x1110, 0x116A, 0x11BE] }, +{ source: [0xD1D4], NFC: [0xD1D4], NFD: [0x1110, 0x116A, 0x11BF], NFKC: [0xD1D4], NFKD: [0x1110, 0x116A, 0x11BF] }, +{ source: [0xD1D5], NFC: [0xD1D5], NFD: [0x1110, 0x116A, 0x11C0], NFKC: [0xD1D5], NFKD: [0x1110, 0x116A, 0x11C0] }, +{ source: [0xD1D6], NFC: [0xD1D6], NFD: [0x1110, 0x116A, 0x11C1], NFKC: [0xD1D6], NFKD: [0x1110, 0x116A, 0x11C1] }, +{ source: [0xD1D7], NFC: [0xD1D7], NFD: [0x1110, 0x116A, 0x11C2], NFKC: [0xD1D7], NFKD: [0x1110, 0x116A, 0x11C2] }, +{ source: [0xD1D8], NFC: [0xD1D8], NFD: [0x1110, 0x116B], NFKC: [0xD1D8], NFKD: [0x1110, 0x116B] }, +{ source: [0xD1D9], NFC: [0xD1D9], NFD: [0x1110, 0x116B, 0x11A8], NFKC: [0xD1D9], NFKD: [0x1110, 0x116B, 0x11A8] }, +{ source: [0xD1DA], NFC: [0xD1DA], NFD: [0x1110, 0x116B, 0x11A9], NFKC: [0xD1DA], NFKD: [0x1110, 0x116B, 0x11A9] }, +{ source: [0xD1DB], NFC: [0xD1DB], NFD: [0x1110, 0x116B, 0x11AA], NFKC: [0xD1DB], NFKD: [0x1110, 0x116B, 0x11AA] }, +{ source: [0xD1DC], NFC: [0xD1DC], NFD: [0x1110, 0x116B, 0x11AB], NFKC: [0xD1DC], NFKD: [0x1110, 0x116B, 0x11AB] }, +{ source: [0xD1DD], NFC: [0xD1DD], NFD: [0x1110, 0x116B, 0x11AC], NFKC: [0xD1DD], NFKD: [0x1110, 0x116B, 0x11AC] }, +{ source: [0xD1DE], NFC: [0xD1DE], NFD: [0x1110, 0x116B, 0x11AD], NFKC: [0xD1DE], NFKD: [0x1110, 0x116B, 0x11AD] }, +{ source: [0xD1DF], NFC: [0xD1DF], NFD: [0x1110, 0x116B, 0x11AE], NFKC: [0xD1DF], NFKD: [0x1110, 0x116B, 0x11AE] }, +{ source: [0xD1E0], NFC: [0xD1E0], NFD: [0x1110, 0x116B, 0x11AF], NFKC: [0xD1E0], NFKD: [0x1110, 0x116B, 0x11AF] }, +{ source: [0xD1E1], NFC: [0xD1E1], NFD: [0x1110, 0x116B, 0x11B0], NFKC: [0xD1E1], NFKD: [0x1110, 0x116B, 0x11B0] }, +{ source: [0xD1E2], NFC: [0xD1E2], NFD: [0x1110, 0x116B, 0x11B1], NFKC: [0xD1E2], NFKD: [0x1110, 0x116B, 0x11B1] }, +{ source: [0xD1E3], NFC: [0xD1E3], NFD: [0x1110, 0x116B, 0x11B2], NFKC: [0xD1E3], NFKD: [0x1110, 0x116B, 0x11B2] }, +{ source: [0xD1E4], NFC: [0xD1E4], NFD: [0x1110, 0x116B, 0x11B3], NFKC: [0xD1E4], NFKD: [0x1110, 0x116B, 0x11B3] }, +{ source: [0xD1E5], NFC: [0xD1E5], NFD: [0x1110, 0x116B, 0x11B4], NFKC: [0xD1E5], NFKD: [0x1110, 0x116B, 0x11B4] }, +{ source: [0xD1E6], NFC: [0xD1E6], NFD: [0x1110, 0x116B, 0x11B5], NFKC: [0xD1E6], NFKD: [0x1110, 0x116B, 0x11B5] }, +{ source: [0xD1E7], NFC: [0xD1E7], NFD: [0x1110, 0x116B, 0x11B6], NFKC: [0xD1E7], NFKD: [0x1110, 0x116B, 0x11B6] }, +{ source: [0xD1E8], NFC: [0xD1E8], NFD: [0x1110, 0x116B, 0x11B7], NFKC: [0xD1E8], NFKD: [0x1110, 0x116B, 0x11B7] }, +{ source: [0xD1E9], NFC: [0xD1E9], NFD: [0x1110, 0x116B, 0x11B8], NFKC: [0xD1E9], NFKD: [0x1110, 0x116B, 0x11B8] }, +{ source: [0xD1EA], NFC: [0xD1EA], NFD: [0x1110, 0x116B, 0x11B9], NFKC: [0xD1EA], NFKD: [0x1110, 0x116B, 0x11B9] }, +{ source: [0xD1EB], NFC: [0xD1EB], NFD: [0x1110, 0x116B, 0x11BA], NFKC: [0xD1EB], NFKD: [0x1110, 0x116B, 0x11BA] }, +{ source: [0xD1EC], NFC: [0xD1EC], NFD: [0x1110, 0x116B, 0x11BB], NFKC: [0xD1EC], NFKD: [0x1110, 0x116B, 0x11BB] }, +{ source: [0xD1ED], NFC: [0xD1ED], NFD: [0x1110, 0x116B, 0x11BC], NFKC: [0xD1ED], NFKD: [0x1110, 0x116B, 0x11BC] }, +{ source: [0xD1EE], NFC: [0xD1EE], NFD: [0x1110, 0x116B, 0x11BD], NFKC: [0xD1EE], NFKD: [0x1110, 0x116B, 0x11BD] }, +{ source: [0xD1EF], NFC: [0xD1EF], NFD: [0x1110, 0x116B, 0x11BE], NFKC: [0xD1EF], NFKD: [0x1110, 0x116B, 0x11BE] }, +{ source: [0xD1F0], NFC: [0xD1F0], NFD: [0x1110, 0x116B, 0x11BF], NFKC: [0xD1F0], NFKD: [0x1110, 0x116B, 0x11BF] }, +{ source: [0xD1F1], NFC: [0xD1F1], NFD: [0x1110, 0x116B, 0x11C0], NFKC: [0xD1F1], NFKD: [0x1110, 0x116B, 0x11C0] }, +{ source: [0xD1F2], NFC: [0xD1F2], NFD: [0x1110, 0x116B, 0x11C1], NFKC: [0xD1F2], NFKD: [0x1110, 0x116B, 0x11C1] }, +{ source: [0xD1F3], NFC: [0xD1F3], NFD: [0x1110, 0x116B, 0x11C2], NFKC: [0xD1F3], NFKD: [0x1110, 0x116B, 0x11C2] }, +{ source: [0xD1F4], NFC: [0xD1F4], NFD: [0x1110, 0x116C], NFKC: [0xD1F4], NFKD: [0x1110, 0x116C] }, +{ source: [0xD1F5], NFC: [0xD1F5], NFD: [0x1110, 0x116C, 0x11A8], NFKC: [0xD1F5], NFKD: [0x1110, 0x116C, 0x11A8] }, +{ source: [0xD1F6], NFC: [0xD1F6], NFD: [0x1110, 0x116C, 0x11A9], NFKC: [0xD1F6], NFKD: [0x1110, 0x116C, 0x11A9] }, +{ source: [0xD1F7], NFC: [0xD1F7], NFD: [0x1110, 0x116C, 0x11AA], NFKC: [0xD1F7], NFKD: [0x1110, 0x116C, 0x11AA] }, +{ source: [0xD1F8], NFC: [0xD1F8], NFD: [0x1110, 0x116C, 0x11AB], NFKC: [0xD1F8], NFKD: [0x1110, 0x116C, 0x11AB] }, +{ source: [0xD1F9], NFC: [0xD1F9], NFD: [0x1110, 0x116C, 0x11AC], NFKC: [0xD1F9], NFKD: [0x1110, 0x116C, 0x11AC] }, +{ source: [0xD1FA], NFC: [0xD1FA], NFD: [0x1110, 0x116C, 0x11AD], NFKC: [0xD1FA], NFKD: [0x1110, 0x116C, 0x11AD] }, +{ source: [0xD1FB], NFC: [0xD1FB], NFD: [0x1110, 0x116C, 0x11AE], NFKC: [0xD1FB], NFKD: [0x1110, 0x116C, 0x11AE] }, +{ source: [0xD1FC], NFC: [0xD1FC], NFD: [0x1110, 0x116C, 0x11AF], NFKC: [0xD1FC], NFKD: [0x1110, 0x116C, 0x11AF] }, +{ source: [0xD1FD], NFC: [0xD1FD], NFD: [0x1110, 0x116C, 0x11B0], NFKC: [0xD1FD], NFKD: [0x1110, 0x116C, 0x11B0] }, +{ source: [0xD1FE], NFC: [0xD1FE], NFD: [0x1110, 0x116C, 0x11B1], NFKC: [0xD1FE], NFKD: [0x1110, 0x116C, 0x11B1] }, +{ source: [0xD1FF], NFC: [0xD1FF], NFD: [0x1110, 0x116C, 0x11B2], NFKC: [0xD1FF], NFKD: [0x1110, 0x116C, 0x11B2] }, +{ source: [0xD200], NFC: [0xD200], NFD: [0x1110, 0x116C, 0x11B3], NFKC: [0xD200], NFKD: [0x1110, 0x116C, 0x11B3] }, +{ source: [0xD201], NFC: [0xD201], NFD: [0x1110, 0x116C, 0x11B4], NFKC: [0xD201], NFKD: [0x1110, 0x116C, 0x11B4] }, +{ source: [0xD202], NFC: [0xD202], NFD: [0x1110, 0x116C, 0x11B5], NFKC: [0xD202], NFKD: [0x1110, 0x116C, 0x11B5] }, +{ source: [0xD203], NFC: [0xD203], NFD: [0x1110, 0x116C, 0x11B6], NFKC: [0xD203], NFKD: [0x1110, 0x116C, 0x11B6] }, +{ source: [0xD204], NFC: [0xD204], NFD: [0x1110, 0x116C, 0x11B7], NFKC: [0xD204], NFKD: [0x1110, 0x116C, 0x11B7] }, +{ source: [0xD205], NFC: [0xD205], NFD: [0x1110, 0x116C, 0x11B8], NFKC: [0xD205], NFKD: [0x1110, 0x116C, 0x11B8] }, +{ source: [0xD206], NFC: [0xD206], NFD: [0x1110, 0x116C, 0x11B9], NFKC: [0xD206], NFKD: [0x1110, 0x116C, 0x11B9] }, +{ source: [0xD207], NFC: [0xD207], NFD: [0x1110, 0x116C, 0x11BA], NFKC: [0xD207], NFKD: [0x1110, 0x116C, 0x11BA] }, +{ source: [0xD208], NFC: [0xD208], NFD: [0x1110, 0x116C, 0x11BB], NFKC: [0xD208], NFKD: [0x1110, 0x116C, 0x11BB] }, +{ source: [0xD209], NFC: [0xD209], NFD: [0x1110, 0x116C, 0x11BC], NFKC: [0xD209], NFKD: [0x1110, 0x116C, 0x11BC] }, +{ source: [0xD20A], NFC: [0xD20A], NFD: [0x1110, 0x116C, 0x11BD], NFKC: [0xD20A], NFKD: [0x1110, 0x116C, 0x11BD] }, +{ source: [0xD20B], NFC: [0xD20B], NFD: [0x1110, 0x116C, 0x11BE], NFKC: [0xD20B], NFKD: [0x1110, 0x116C, 0x11BE] }, +{ source: [0xD20C], NFC: [0xD20C], NFD: [0x1110, 0x116C, 0x11BF], NFKC: [0xD20C], NFKD: [0x1110, 0x116C, 0x11BF] }, +{ source: [0xD20D], NFC: [0xD20D], NFD: [0x1110, 0x116C, 0x11C0], NFKC: [0xD20D], NFKD: [0x1110, 0x116C, 0x11C0] }, +{ source: [0xD20E], NFC: [0xD20E], NFD: [0x1110, 0x116C, 0x11C1], NFKC: [0xD20E], NFKD: [0x1110, 0x116C, 0x11C1] }, +{ source: [0xD20F], NFC: [0xD20F], NFD: [0x1110, 0x116C, 0x11C2], NFKC: [0xD20F], NFKD: [0x1110, 0x116C, 0x11C2] }, +{ source: [0xD210], NFC: [0xD210], NFD: [0x1110, 0x116D], NFKC: [0xD210], NFKD: [0x1110, 0x116D] }, +{ source: [0xD211], NFC: [0xD211], NFD: [0x1110, 0x116D, 0x11A8], NFKC: [0xD211], NFKD: [0x1110, 0x116D, 0x11A8] }, +{ source: [0xD212], NFC: [0xD212], NFD: [0x1110, 0x116D, 0x11A9], NFKC: [0xD212], NFKD: [0x1110, 0x116D, 0x11A9] }, +{ source: [0xD213], NFC: [0xD213], NFD: [0x1110, 0x116D, 0x11AA], NFKC: [0xD213], NFKD: [0x1110, 0x116D, 0x11AA] }, +{ source: [0xD214], NFC: [0xD214], NFD: [0x1110, 0x116D, 0x11AB], NFKC: [0xD214], NFKD: [0x1110, 0x116D, 0x11AB] }, +{ source: [0xD215], NFC: [0xD215], NFD: [0x1110, 0x116D, 0x11AC], NFKC: [0xD215], NFKD: [0x1110, 0x116D, 0x11AC] }, +{ source: [0xD216], NFC: [0xD216], NFD: [0x1110, 0x116D, 0x11AD], NFKC: [0xD216], NFKD: [0x1110, 0x116D, 0x11AD] }, +{ source: [0xD217], NFC: [0xD217], NFD: [0x1110, 0x116D, 0x11AE], NFKC: [0xD217], NFKD: [0x1110, 0x116D, 0x11AE] }, +{ source: [0xD218], NFC: [0xD218], NFD: [0x1110, 0x116D, 0x11AF], NFKC: [0xD218], NFKD: [0x1110, 0x116D, 0x11AF] }, +{ source: [0xD219], NFC: [0xD219], NFD: [0x1110, 0x116D, 0x11B0], NFKC: [0xD219], NFKD: [0x1110, 0x116D, 0x11B0] }, +{ source: [0xD21A], NFC: [0xD21A], NFD: [0x1110, 0x116D, 0x11B1], NFKC: [0xD21A], NFKD: [0x1110, 0x116D, 0x11B1] }, +{ source: [0xD21B], NFC: [0xD21B], NFD: [0x1110, 0x116D, 0x11B2], NFKC: [0xD21B], NFKD: [0x1110, 0x116D, 0x11B2] }, +{ source: [0xD21C], NFC: [0xD21C], NFD: [0x1110, 0x116D, 0x11B3], NFKC: [0xD21C], NFKD: [0x1110, 0x116D, 0x11B3] }, +{ source: [0xD21D], NFC: [0xD21D], NFD: [0x1110, 0x116D, 0x11B4], NFKC: [0xD21D], NFKD: [0x1110, 0x116D, 0x11B4] }, +{ source: [0xD21E], NFC: [0xD21E], NFD: [0x1110, 0x116D, 0x11B5], NFKC: [0xD21E], NFKD: [0x1110, 0x116D, 0x11B5] }, +{ source: [0xD21F], NFC: [0xD21F], NFD: [0x1110, 0x116D, 0x11B6], NFKC: [0xD21F], NFKD: [0x1110, 0x116D, 0x11B6] }, +{ source: [0xD220], NFC: [0xD220], NFD: [0x1110, 0x116D, 0x11B7], NFKC: [0xD220], NFKD: [0x1110, 0x116D, 0x11B7] }, +{ source: [0xD221], NFC: [0xD221], NFD: [0x1110, 0x116D, 0x11B8], NFKC: [0xD221], NFKD: [0x1110, 0x116D, 0x11B8] }, +{ source: [0xD222], NFC: [0xD222], NFD: [0x1110, 0x116D, 0x11B9], NFKC: [0xD222], NFKD: [0x1110, 0x116D, 0x11B9] }, +{ source: [0xD223], NFC: [0xD223], NFD: [0x1110, 0x116D, 0x11BA], NFKC: [0xD223], NFKD: [0x1110, 0x116D, 0x11BA] }, +{ source: [0xD224], NFC: [0xD224], NFD: [0x1110, 0x116D, 0x11BB], NFKC: [0xD224], NFKD: [0x1110, 0x116D, 0x11BB] }, +{ source: [0xD225], NFC: [0xD225], NFD: [0x1110, 0x116D, 0x11BC], NFKC: [0xD225], NFKD: [0x1110, 0x116D, 0x11BC] }, +{ source: [0xD226], NFC: [0xD226], NFD: [0x1110, 0x116D, 0x11BD], NFKC: [0xD226], NFKD: [0x1110, 0x116D, 0x11BD] }, +{ source: [0xD227], NFC: [0xD227], NFD: [0x1110, 0x116D, 0x11BE], NFKC: [0xD227], NFKD: [0x1110, 0x116D, 0x11BE] }, +{ source: [0xD228], NFC: [0xD228], NFD: [0x1110, 0x116D, 0x11BF], NFKC: [0xD228], NFKD: [0x1110, 0x116D, 0x11BF] }, +{ source: [0xD229], NFC: [0xD229], NFD: [0x1110, 0x116D, 0x11C0], NFKC: [0xD229], NFKD: [0x1110, 0x116D, 0x11C0] }, +{ source: [0xD22A], NFC: [0xD22A], NFD: [0x1110, 0x116D, 0x11C1], NFKC: [0xD22A], NFKD: [0x1110, 0x116D, 0x11C1] }, +{ source: [0xD22B], NFC: [0xD22B], NFD: [0x1110, 0x116D, 0x11C2], NFKC: [0xD22B], NFKD: [0x1110, 0x116D, 0x11C2] }, +{ source: [0xD22C], NFC: [0xD22C], NFD: [0x1110, 0x116E], NFKC: [0xD22C], NFKD: [0x1110, 0x116E] }, +{ source: [0xD22D], NFC: [0xD22D], NFD: [0x1110, 0x116E, 0x11A8], NFKC: [0xD22D], NFKD: [0x1110, 0x116E, 0x11A8] }, +{ source: [0xD22E], NFC: [0xD22E], NFD: [0x1110, 0x116E, 0x11A9], NFKC: [0xD22E], NFKD: [0x1110, 0x116E, 0x11A9] }, +{ source: [0xD22F], NFC: [0xD22F], NFD: [0x1110, 0x116E, 0x11AA], NFKC: [0xD22F], NFKD: [0x1110, 0x116E, 0x11AA] }, +{ source: [0xD230], NFC: [0xD230], NFD: [0x1110, 0x116E, 0x11AB], NFKC: [0xD230], NFKD: [0x1110, 0x116E, 0x11AB] }, +{ source: [0xD231], NFC: [0xD231], NFD: [0x1110, 0x116E, 0x11AC], NFKC: [0xD231], NFKD: [0x1110, 0x116E, 0x11AC] }, +{ source: [0xD232], NFC: [0xD232], NFD: [0x1110, 0x116E, 0x11AD], NFKC: [0xD232], NFKD: [0x1110, 0x116E, 0x11AD] }, +{ source: [0xD233], NFC: [0xD233], NFD: [0x1110, 0x116E, 0x11AE], NFKC: [0xD233], NFKD: [0x1110, 0x116E, 0x11AE] }, +{ source: [0xD234], NFC: [0xD234], NFD: [0x1110, 0x116E, 0x11AF], NFKC: [0xD234], NFKD: [0x1110, 0x116E, 0x11AF] }, +{ source: [0xD235], NFC: [0xD235], NFD: [0x1110, 0x116E, 0x11B0], NFKC: [0xD235], NFKD: [0x1110, 0x116E, 0x11B0] }, +{ source: [0xD236], NFC: [0xD236], NFD: [0x1110, 0x116E, 0x11B1], NFKC: [0xD236], NFKD: [0x1110, 0x116E, 0x11B1] }, +{ source: [0xD237], NFC: [0xD237], NFD: [0x1110, 0x116E, 0x11B2], NFKC: [0xD237], NFKD: [0x1110, 0x116E, 0x11B2] }, +{ source: [0xD238], NFC: [0xD238], NFD: [0x1110, 0x116E, 0x11B3], NFKC: [0xD238], NFKD: [0x1110, 0x116E, 0x11B3] }, +{ source: [0xD239], NFC: [0xD239], NFD: [0x1110, 0x116E, 0x11B4], NFKC: [0xD239], NFKD: [0x1110, 0x116E, 0x11B4] }, +{ source: [0xD23A], NFC: [0xD23A], NFD: [0x1110, 0x116E, 0x11B5], NFKC: [0xD23A], NFKD: [0x1110, 0x116E, 0x11B5] }, +{ source: [0xD23B], NFC: [0xD23B], NFD: [0x1110, 0x116E, 0x11B6], NFKC: [0xD23B], NFKD: [0x1110, 0x116E, 0x11B6] }, +{ source: [0xD23C], NFC: [0xD23C], NFD: [0x1110, 0x116E, 0x11B7], NFKC: [0xD23C], NFKD: [0x1110, 0x116E, 0x11B7] }, +{ source: [0xD23D], NFC: [0xD23D], NFD: [0x1110, 0x116E, 0x11B8], NFKC: [0xD23D], NFKD: [0x1110, 0x116E, 0x11B8] }, +{ source: [0xD23E], NFC: [0xD23E], NFD: [0x1110, 0x116E, 0x11B9], NFKC: [0xD23E], NFKD: [0x1110, 0x116E, 0x11B9] }, +{ source: [0xD23F], NFC: [0xD23F], NFD: [0x1110, 0x116E, 0x11BA], NFKC: [0xD23F], NFKD: [0x1110, 0x116E, 0x11BA] }, +{ source: [0xD240], NFC: [0xD240], NFD: [0x1110, 0x116E, 0x11BB], NFKC: [0xD240], NFKD: [0x1110, 0x116E, 0x11BB] }, +{ source: [0xD241], NFC: [0xD241], NFD: [0x1110, 0x116E, 0x11BC], NFKC: [0xD241], NFKD: [0x1110, 0x116E, 0x11BC] }, +{ source: [0xD242], NFC: [0xD242], NFD: [0x1110, 0x116E, 0x11BD], NFKC: [0xD242], NFKD: [0x1110, 0x116E, 0x11BD] }, +{ source: [0xD243], NFC: [0xD243], NFD: [0x1110, 0x116E, 0x11BE], NFKC: [0xD243], NFKD: [0x1110, 0x116E, 0x11BE] }, +{ source: [0xD244], NFC: [0xD244], NFD: [0x1110, 0x116E, 0x11BF], NFKC: [0xD244], NFKD: [0x1110, 0x116E, 0x11BF] }, +{ source: [0xD245], NFC: [0xD245], NFD: [0x1110, 0x116E, 0x11C0], NFKC: [0xD245], NFKD: [0x1110, 0x116E, 0x11C0] }, +{ source: [0xD246], NFC: [0xD246], NFD: [0x1110, 0x116E, 0x11C1], NFKC: [0xD246], NFKD: [0x1110, 0x116E, 0x11C1] }, +{ source: [0xD247], NFC: [0xD247], NFD: [0x1110, 0x116E, 0x11C2], NFKC: [0xD247], NFKD: [0x1110, 0x116E, 0x11C2] }, +{ source: [0xD248], NFC: [0xD248], NFD: [0x1110, 0x116F], NFKC: [0xD248], NFKD: [0x1110, 0x116F] }, +{ source: [0xD249], NFC: [0xD249], NFD: [0x1110, 0x116F, 0x11A8], NFKC: [0xD249], NFKD: [0x1110, 0x116F, 0x11A8] }, +{ source: [0xD24A], NFC: [0xD24A], NFD: [0x1110, 0x116F, 0x11A9], NFKC: [0xD24A], NFKD: [0x1110, 0x116F, 0x11A9] }, +{ source: [0xD24B], NFC: [0xD24B], NFD: [0x1110, 0x116F, 0x11AA], NFKC: [0xD24B], NFKD: [0x1110, 0x116F, 0x11AA] }, +{ source: [0xD24C], NFC: [0xD24C], NFD: [0x1110, 0x116F, 0x11AB], NFKC: [0xD24C], NFKD: [0x1110, 0x116F, 0x11AB] }, +{ source: [0xD24D], NFC: [0xD24D], NFD: [0x1110, 0x116F, 0x11AC], NFKC: [0xD24D], NFKD: [0x1110, 0x116F, 0x11AC] }, +{ source: [0xD24E], NFC: [0xD24E], NFD: [0x1110, 0x116F, 0x11AD], NFKC: [0xD24E], NFKD: [0x1110, 0x116F, 0x11AD] }, +{ source: [0xD24F], NFC: [0xD24F], NFD: [0x1110, 0x116F, 0x11AE], NFKC: [0xD24F], NFKD: [0x1110, 0x116F, 0x11AE] }, +{ source: [0xD250], NFC: [0xD250], NFD: [0x1110, 0x116F, 0x11AF], NFKC: [0xD250], NFKD: [0x1110, 0x116F, 0x11AF] }, +{ source: [0xD251], NFC: [0xD251], NFD: [0x1110, 0x116F, 0x11B0], NFKC: [0xD251], NFKD: [0x1110, 0x116F, 0x11B0] }, +{ source: [0xD252], NFC: [0xD252], NFD: [0x1110, 0x116F, 0x11B1], NFKC: [0xD252], NFKD: [0x1110, 0x116F, 0x11B1] }, +{ source: [0xD253], NFC: [0xD253], NFD: [0x1110, 0x116F, 0x11B2], NFKC: [0xD253], NFKD: [0x1110, 0x116F, 0x11B2] }, +{ source: [0xD254], NFC: [0xD254], NFD: [0x1110, 0x116F, 0x11B3], NFKC: [0xD254], NFKD: [0x1110, 0x116F, 0x11B3] }, +{ source: [0xD255], NFC: [0xD255], NFD: [0x1110, 0x116F, 0x11B4], NFKC: [0xD255], NFKD: [0x1110, 0x116F, 0x11B4] }, +{ source: [0xD256], NFC: [0xD256], NFD: [0x1110, 0x116F, 0x11B5], NFKC: [0xD256], NFKD: [0x1110, 0x116F, 0x11B5] }, +{ source: [0xD257], NFC: [0xD257], NFD: [0x1110, 0x116F, 0x11B6], NFKC: [0xD257], NFKD: [0x1110, 0x116F, 0x11B6] }, +{ source: [0xD258], NFC: [0xD258], NFD: [0x1110, 0x116F, 0x11B7], NFKC: [0xD258], NFKD: [0x1110, 0x116F, 0x11B7] }, +{ source: [0xD259], NFC: [0xD259], NFD: [0x1110, 0x116F, 0x11B8], NFKC: [0xD259], NFKD: [0x1110, 0x116F, 0x11B8] }, +{ source: [0xD25A], NFC: [0xD25A], NFD: [0x1110, 0x116F, 0x11B9], NFKC: [0xD25A], NFKD: [0x1110, 0x116F, 0x11B9] }, +{ source: [0xD25B], NFC: [0xD25B], NFD: [0x1110, 0x116F, 0x11BA], NFKC: [0xD25B], NFKD: [0x1110, 0x116F, 0x11BA] }, +{ source: [0xD25C], NFC: [0xD25C], NFD: [0x1110, 0x116F, 0x11BB], NFKC: [0xD25C], NFKD: [0x1110, 0x116F, 0x11BB] }, +{ source: [0xD25D], NFC: [0xD25D], NFD: [0x1110, 0x116F, 0x11BC], NFKC: [0xD25D], NFKD: [0x1110, 0x116F, 0x11BC] }, +{ source: [0xD25E], NFC: [0xD25E], NFD: [0x1110, 0x116F, 0x11BD], NFKC: [0xD25E], NFKD: [0x1110, 0x116F, 0x11BD] }, +{ source: [0xD25F], NFC: [0xD25F], NFD: [0x1110, 0x116F, 0x11BE], NFKC: [0xD25F], NFKD: [0x1110, 0x116F, 0x11BE] }, +{ source: [0xD260], NFC: [0xD260], NFD: [0x1110, 0x116F, 0x11BF], NFKC: [0xD260], NFKD: [0x1110, 0x116F, 0x11BF] }, +{ source: [0xD261], NFC: [0xD261], NFD: [0x1110, 0x116F, 0x11C0], NFKC: [0xD261], NFKD: [0x1110, 0x116F, 0x11C0] }, +{ source: [0xD262], NFC: [0xD262], NFD: [0x1110, 0x116F, 0x11C1], NFKC: [0xD262], NFKD: [0x1110, 0x116F, 0x11C1] }, +{ source: [0xD263], NFC: [0xD263], NFD: [0x1110, 0x116F, 0x11C2], NFKC: [0xD263], NFKD: [0x1110, 0x116F, 0x11C2] }, +{ source: [0xD264], NFC: [0xD264], NFD: [0x1110, 0x1170], NFKC: [0xD264], NFKD: [0x1110, 0x1170] }, +{ source: [0xD265], NFC: [0xD265], NFD: [0x1110, 0x1170, 0x11A8], NFKC: [0xD265], NFKD: [0x1110, 0x1170, 0x11A8] }, +{ source: [0xD266], NFC: [0xD266], NFD: [0x1110, 0x1170, 0x11A9], NFKC: [0xD266], NFKD: [0x1110, 0x1170, 0x11A9] }, +{ source: [0xD267], NFC: [0xD267], NFD: [0x1110, 0x1170, 0x11AA], NFKC: [0xD267], NFKD: [0x1110, 0x1170, 0x11AA] }, +{ source: [0xD268], NFC: [0xD268], NFD: [0x1110, 0x1170, 0x11AB], NFKC: [0xD268], NFKD: [0x1110, 0x1170, 0x11AB] }, +{ source: [0xD269], NFC: [0xD269], NFD: [0x1110, 0x1170, 0x11AC], NFKC: [0xD269], NFKD: [0x1110, 0x1170, 0x11AC] }, +{ source: [0xD26A], NFC: [0xD26A], NFD: [0x1110, 0x1170, 0x11AD], NFKC: [0xD26A], NFKD: [0x1110, 0x1170, 0x11AD] }, +{ source: [0xD26B], NFC: [0xD26B], NFD: [0x1110, 0x1170, 0x11AE], NFKC: [0xD26B], NFKD: [0x1110, 0x1170, 0x11AE] }, +{ source: [0xD26C], NFC: [0xD26C], NFD: [0x1110, 0x1170, 0x11AF], NFKC: [0xD26C], NFKD: [0x1110, 0x1170, 0x11AF] }, +{ source: [0xD26D], NFC: [0xD26D], NFD: [0x1110, 0x1170, 0x11B0], NFKC: [0xD26D], NFKD: [0x1110, 0x1170, 0x11B0] }, +{ source: [0xD26E], NFC: [0xD26E], NFD: [0x1110, 0x1170, 0x11B1], NFKC: [0xD26E], NFKD: [0x1110, 0x1170, 0x11B1] }, +{ source: [0xD26F], NFC: [0xD26F], NFD: [0x1110, 0x1170, 0x11B2], NFKC: [0xD26F], NFKD: [0x1110, 0x1170, 0x11B2] }, +{ source: [0xD270], NFC: [0xD270], NFD: [0x1110, 0x1170, 0x11B3], NFKC: [0xD270], NFKD: [0x1110, 0x1170, 0x11B3] }, +{ source: [0xD271], NFC: [0xD271], NFD: [0x1110, 0x1170, 0x11B4], NFKC: [0xD271], NFKD: [0x1110, 0x1170, 0x11B4] }, +{ source: [0xD272], NFC: [0xD272], NFD: [0x1110, 0x1170, 0x11B5], NFKC: [0xD272], NFKD: [0x1110, 0x1170, 0x11B5] }, +{ source: [0xD273], NFC: [0xD273], NFD: [0x1110, 0x1170, 0x11B6], NFKC: [0xD273], NFKD: [0x1110, 0x1170, 0x11B6] }, +{ source: [0xD274], NFC: [0xD274], NFD: [0x1110, 0x1170, 0x11B7], NFKC: [0xD274], NFKD: [0x1110, 0x1170, 0x11B7] }, +{ source: [0xD275], NFC: [0xD275], NFD: [0x1110, 0x1170, 0x11B8], NFKC: [0xD275], NFKD: [0x1110, 0x1170, 0x11B8] }, +{ source: [0xD276], NFC: [0xD276], NFD: [0x1110, 0x1170, 0x11B9], NFKC: [0xD276], NFKD: [0x1110, 0x1170, 0x11B9] }, +{ source: [0xD277], NFC: [0xD277], NFD: [0x1110, 0x1170, 0x11BA], NFKC: [0xD277], NFKD: [0x1110, 0x1170, 0x11BA] }, +{ source: [0xD278], NFC: [0xD278], NFD: [0x1110, 0x1170, 0x11BB], NFKC: [0xD278], NFKD: [0x1110, 0x1170, 0x11BB] }, +{ source: [0xD279], NFC: [0xD279], NFD: [0x1110, 0x1170, 0x11BC], NFKC: [0xD279], NFKD: [0x1110, 0x1170, 0x11BC] }, +{ source: [0xD27A], NFC: [0xD27A], NFD: [0x1110, 0x1170, 0x11BD], NFKC: [0xD27A], NFKD: [0x1110, 0x1170, 0x11BD] }, +{ source: [0xD27B], NFC: [0xD27B], NFD: [0x1110, 0x1170, 0x11BE], NFKC: [0xD27B], NFKD: [0x1110, 0x1170, 0x11BE] }, +{ source: [0xD27C], NFC: [0xD27C], NFD: [0x1110, 0x1170, 0x11BF], NFKC: [0xD27C], NFKD: [0x1110, 0x1170, 0x11BF] }, +{ source: [0xD27D], NFC: [0xD27D], NFD: [0x1110, 0x1170, 0x11C0], NFKC: [0xD27D], NFKD: [0x1110, 0x1170, 0x11C0] }, +{ source: [0xD27E], NFC: [0xD27E], NFD: [0x1110, 0x1170, 0x11C1], NFKC: [0xD27E], NFKD: [0x1110, 0x1170, 0x11C1] }, +{ source: [0xD27F], NFC: [0xD27F], NFD: [0x1110, 0x1170, 0x11C2], NFKC: [0xD27F], NFKD: [0x1110, 0x1170, 0x11C2] }, +{ source: [0xD280], NFC: [0xD280], NFD: [0x1110, 0x1171], NFKC: [0xD280], NFKD: [0x1110, 0x1171] }, +{ source: [0xD281], NFC: [0xD281], NFD: [0x1110, 0x1171, 0x11A8], NFKC: [0xD281], NFKD: [0x1110, 0x1171, 0x11A8] }, +{ source: [0xD282], NFC: [0xD282], NFD: [0x1110, 0x1171, 0x11A9], NFKC: [0xD282], NFKD: [0x1110, 0x1171, 0x11A9] }, +{ source: [0xD283], NFC: [0xD283], NFD: [0x1110, 0x1171, 0x11AA], NFKC: [0xD283], NFKD: [0x1110, 0x1171, 0x11AA] }, +{ source: [0xD284], NFC: [0xD284], NFD: [0x1110, 0x1171, 0x11AB], NFKC: [0xD284], NFKD: [0x1110, 0x1171, 0x11AB] }, +{ source: [0xD285], NFC: [0xD285], NFD: [0x1110, 0x1171, 0x11AC], NFKC: [0xD285], NFKD: [0x1110, 0x1171, 0x11AC] }, +{ source: [0xD286], NFC: [0xD286], NFD: [0x1110, 0x1171, 0x11AD], NFKC: [0xD286], NFKD: [0x1110, 0x1171, 0x11AD] }, +{ source: [0xD287], NFC: [0xD287], NFD: [0x1110, 0x1171, 0x11AE], NFKC: [0xD287], NFKD: [0x1110, 0x1171, 0x11AE] }, +{ source: [0xD288], NFC: [0xD288], NFD: [0x1110, 0x1171, 0x11AF], NFKC: [0xD288], NFKD: [0x1110, 0x1171, 0x11AF] }, +{ source: [0xD289], NFC: [0xD289], NFD: [0x1110, 0x1171, 0x11B0], NFKC: [0xD289], NFKD: [0x1110, 0x1171, 0x11B0] }, +{ source: [0xD28A], NFC: [0xD28A], NFD: [0x1110, 0x1171, 0x11B1], NFKC: [0xD28A], NFKD: [0x1110, 0x1171, 0x11B1] }, +{ source: [0xD28B], NFC: [0xD28B], NFD: [0x1110, 0x1171, 0x11B2], NFKC: [0xD28B], NFKD: [0x1110, 0x1171, 0x11B2] }, +{ source: [0xD28C], NFC: [0xD28C], NFD: [0x1110, 0x1171, 0x11B3], NFKC: [0xD28C], NFKD: [0x1110, 0x1171, 0x11B3] }, +{ source: [0xD28D], NFC: [0xD28D], NFD: [0x1110, 0x1171, 0x11B4], NFKC: [0xD28D], NFKD: [0x1110, 0x1171, 0x11B4] }, +{ source: [0xD28E], NFC: [0xD28E], NFD: [0x1110, 0x1171, 0x11B5], NFKC: [0xD28E], NFKD: [0x1110, 0x1171, 0x11B5] }, +{ source: [0xD28F], NFC: [0xD28F], NFD: [0x1110, 0x1171, 0x11B6], NFKC: [0xD28F], NFKD: [0x1110, 0x1171, 0x11B6] }, +{ source: [0xD290], NFC: [0xD290], NFD: [0x1110, 0x1171, 0x11B7], NFKC: [0xD290], NFKD: [0x1110, 0x1171, 0x11B7] }, +{ source: [0xD291], NFC: [0xD291], NFD: [0x1110, 0x1171, 0x11B8], NFKC: [0xD291], NFKD: [0x1110, 0x1171, 0x11B8] }, +{ source: [0xD292], NFC: [0xD292], NFD: [0x1110, 0x1171, 0x11B9], NFKC: [0xD292], NFKD: [0x1110, 0x1171, 0x11B9] }, +{ source: [0xD293], NFC: [0xD293], NFD: [0x1110, 0x1171, 0x11BA], NFKC: [0xD293], NFKD: [0x1110, 0x1171, 0x11BA] }, +{ source: [0xD294], NFC: [0xD294], NFD: [0x1110, 0x1171, 0x11BB], NFKC: [0xD294], NFKD: [0x1110, 0x1171, 0x11BB] }, +{ source: [0xD295], NFC: [0xD295], NFD: [0x1110, 0x1171, 0x11BC], NFKC: [0xD295], NFKD: [0x1110, 0x1171, 0x11BC] }, +{ source: [0xD296], NFC: [0xD296], NFD: [0x1110, 0x1171, 0x11BD], NFKC: [0xD296], NFKD: [0x1110, 0x1171, 0x11BD] }, +{ source: [0xD297], NFC: [0xD297], NFD: [0x1110, 0x1171, 0x11BE], NFKC: [0xD297], NFKD: [0x1110, 0x1171, 0x11BE] }, +{ source: [0xD298], NFC: [0xD298], NFD: [0x1110, 0x1171, 0x11BF], NFKC: [0xD298], NFKD: [0x1110, 0x1171, 0x11BF] }, +{ source: [0xD299], NFC: [0xD299], NFD: [0x1110, 0x1171, 0x11C0], NFKC: [0xD299], NFKD: [0x1110, 0x1171, 0x11C0] }, +{ source: [0xD29A], NFC: [0xD29A], NFD: [0x1110, 0x1171, 0x11C1], NFKC: [0xD29A], NFKD: [0x1110, 0x1171, 0x11C1] }, +{ source: [0xD29B], NFC: [0xD29B], NFD: [0x1110, 0x1171, 0x11C2], NFKC: [0xD29B], NFKD: [0x1110, 0x1171, 0x11C2] }, +{ source: [0xD29C], NFC: [0xD29C], NFD: [0x1110, 0x1172], NFKC: [0xD29C], NFKD: [0x1110, 0x1172] }, +{ source: [0xD29D], NFC: [0xD29D], NFD: [0x1110, 0x1172, 0x11A8], NFKC: [0xD29D], NFKD: [0x1110, 0x1172, 0x11A8] }, +{ source: [0xD29E], NFC: [0xD29E], NFD: [0x1110, 0x1172, 0x11A9], NFKC: [0xD29E], NFKD: [0x1110, 0x1172, 0x11A9] }, +{ source: [0xD29F], NFC: [0xD29F], NFD: [0x1110, 0x1172, 0x11AA], NFKC: [0xD29F], NFKD: [0x1110, 0x1172, 0x11AA] }, +{ source: [0xD2A0], NFC: [0xD2A0], NFD: [0x1110, 0x1172, 0x11AB], NFKC: [0xD2A0], NFKD: [0x1110, 0x1172, 0x11AB] }, +{ source: [0xD2A1], NFC: [0xD2A1], NFD: [0x1110, 0x1172, 0x11AC], NFKC: [0xD2A1], NFKD: [0x1110, 0x1172, 0x11AC] }, +{ source: [0xD2A2], NFC: [0xD2A2], NFD: [0x1110, 0x1172, 0x11AD], NFKC: [0xD2A2], NFKD: [0x1110, 0x1172, 0x11AD] }, +{ source: [0xD2A3], NFC: [0xD2A3], NFD: [0x1110, 0x1172, 0x11AE], NFKC: [0xD2A3], NFKD: [0x1110, 0x1172, 0x11AE] }, +{ source: [0xD2A4], NFC: [0xD2A4], NFD: [0x1110, 0x1172, 0x11AF], NFKC: [0xD2A4], NFKD: [0x1110, 0x1172, 0x11AF] }, +{ source: [0xD2A5], NFC: [0xD2A5], NFD: [0x1110, 0x1172, 0x11B0], NFKC: [0xD2A5], NFKD: [0x1110, 0x1172, 0x11B0] }, +{ source: [0xD2A6], NFC: [0xD2A6], NFD: [0x1110, 0x1172, 0x11B1], NFKC: [0xD2A6], NFKD: [0x1110, 0x1172, 0x11B1] }, +{ source: [0xD2A7], NFC: [0xD2A7], NFD: [0x1110, 0x1172, 0x11B2], NFKC: [0xD2A7], NFKD: [0x1110, 0x1172, 0x11B2] }, +{ source: [0xD2A8], NFC: [0xD2A8], NFD: [0x1110, 0x1172, 0x11B3], NFKC: [0xD2A8], NFKD: [0x1110, 0x1172, 0x11B3] }, +{ source: [0xD2A9], NFC: [0xD2A9], NFD: [0x1110, 0x1172, 0x11B4], NFKC: [0xD2A9], NFKD: [0x1110, 0x1172, 0x11B4] }, +{ source: [0xD2AA], NFC: [0xD2AA], NFD: [0x1110, 0x1172, 0x11B5], NFKC: [0xD2AA], NFKD: [0x1110, 0x1172, 0x11B5] }, +{ source: [0xD2AB], NFC: [0xD2AB], NFD: [0x1110, 0x1172, 0x11B6], NFKC: [0xD2AB], NFKD: [0x1110, 0x1172, 0x11B6] }, +{ source: [0xD2AC], NFC: [0xD2AC], NFD: [0x1110, 0x1172, 0x11B7], NFKC: [0xD2AC], NFKD: [0x1110, 0x1172, 0x11B7] }, +{ source: [0xD2AD], NFC: [0xD2AD], NFD: [0x1110, 0x1172, 0x11B8], NFKC: [0xD2AD], NFKD: [0x1110, 0x1172, 0x11B8] }, +{ source: [0xD2AE], NFC: [0xD2AE], NFD: [0x1110, 0x1172, 0x11B9], NFKC: [0xD2AE], NFKD: [0x1110, 0x1172, 0x11B9] }, +{ source: [0xD2AF], NFC: [0xD2AF], NFD: [0x1110, 0x1172, 0x11BA], NFKC: [0xD2AF], NFKD: [0x1110, 0x1172, 0x11BA] }, +{ source: [0xD2B0], NFC: [0xD2B0], NFD: [0x1110, 0x1172, 0x11BB], NFKC: [0xD2B0], NFKD: [0x1110, 0x1172, 0x11BB] }, +{ source: [0xD2B1], NFC: [0xD2B1], NFD: [0x1110, 0x1172, 0x11BC], NFKC: [0xD2B1], NFKD: [0x1110, 0x1172, 0x11BC] }, +{ source: [0xD2B2], NFC: [0xD2B2], NFD: [0x1110, 0x1172, 0x11BD], NFKC: [0xD2B2], NFKD: [0x1110, 0x1172, 0x11BD] }, +{ source: [0xD2B3], NFC: [0xD2B3], NFD: [0x1110, 0x1172, 0x11BE], NFKC: [0xD2B3], NFKD: [0x1110, 0x1172, 0x11BE] }, +{ source: [0xD2B4], NFC: [0xD2B4], NFD: [0x1110, 0x1172, 0x11BF], NFKC: [0xD2B4], NFKD: [0x1110, 0x1172, 0x11BF] }, +{ source: [0xD2B5], NFC: [0xD2B5], NFD: [0x1110, 0x1172, 0x11C0], NFKC: [0xD2B5], NFKD: [0x1110, 0x1172, 0x11C0] }, +{ source: [0xD2B6], NFC: [0xD2B6], NFD: [0x1110, 0x1172, 0x11C1], NFKC: [0xD2B6], NFKD: [0x1110, 0x1172, 0x11C1] }, +{ source: [0xD2B7], NFC: [0xD2B7], NFD: [0x1110, 0x1172, 0x11C2], NFKC: [0xD2B7], NFKD: [0x1110, 0x1172, 0x11C2] }, +{ source: [0xD2B8], NFC: [0xD2B8], NFD: [0x1110, 0x1173], NFKC: [0xD2B8], NFKD: [0x1110, 0x1173] }, +{ source: [0xD2B9], NFC: [0xD2B9], NFD: [0x1110, 0x1173, 0x11A8], NFKC: [0xD2B9], NFKD: [0x1110, 0x1173, 0x11A8] }, +{ source: [0xD2BA], NFC: [0xD2BA], NFD: [0x1110, 0x1173, 0x11A9], NFKC: [0xD2BA], NFKD: [0x1110, 0x1173, 0x11A9] }, +{ source: [0xD2BB], NFC: [0xD2BB], NFD: [0x1110, 0x1173, 0x11AA], NFKC: [0xD2BB], NFKD: [0x1110, 0x1173, 0x11AA] }, +{ source: [0xD2BC], NFC: [0xD2BC], NFD: [0x1110, 0x1173, 0x11AB], NFKC: [0xD2BC], NFKD: [0x1110, 0x1173, 0x11AB] }, +{ source: [0xD2BD], NFC: [0xD2BD], NFD: [0x1110, 0x1173, 0x11AC], NFKC: [0xD2BD], NFKD: [0x1110, 0x1173, 0x11AC] }, +{ source: [0xD2BE], NFC: [0xD2BE], NFD: [0x1110, 0x1173, 0x11AD], NFKC: [0xD2BE], NFKD: [0x1110, 0x1173, 0x11AD] }, +{ source: [0xD2BF], NFC: [0xD2BF], NFD: [0x1110, 0x1173, 0x11AE], NFKC: [0xD2BF], NFKD: [0x1110, 0x1173, 0x11AE] }, +{ source: [0xD2C0], NFC: [0xD2C0], NFD: [0x1110, 0x1173, 0x11AF], NFKC: [0xD2C0], NFKD: [0x1110, 0x1173, 0x11AF] }, +{ source: [0xD2C1], NFC: [0xD2C1], NFD: [0x1110, 0x1173, 0x11B0], NFKC: [0xD2C1], NFKD: [0x1110, 0x1173, 0x11B0] }, +{ source: [0xD2C2], NFC: [0xD2C2], NFD: [0x1110, 0x1173, 0x11B1], NFKC: [0xD2C2], NFKD: [0x1110, 0x1173, 0x11B1] }, +{ source: [0xD2C3], NFC: [0xD2C3], NFD: [0x1110, 0x1173, 0x11B2], NFKC: [0xD2C3], NFKD: [0x1110, 0x1173, 0x11B2] }, +{ source: [0xD2C4], NFC: [0xD2C4], NFD: [0x1110, 0x1173, 0x11B3], NFKC: [0xD2C4], NFKD: [0x1110, 0x1173, 0x11B3] }, +{ source: [0xD2C5], NFC: [0xD2C5], NFD: [0x1110, 0x1173, 0x11B4], NFKC: [0xD2C5], NFKD: [0x1110, 0x1173, 0x11B4] }, +{ source: [0xD2C6], NFC: [0xD2C6], NFD: [0x1110, 0x1173, 0x11B5], NFKC: [0xD2C6], NFKD: [0x1110, 0x1173, 0x11B5] }, +{ source: [0xD2C7], NFC: [0xD2C7], NFD: [0x1110, 0x1173, 0x11B6], NFKC: [0xD2C7], NFKD: [0x1110, 0x1173, 0x11B6] }, +{ source: [0xD2C8], NFC: [0xD2C8], NFD: [0x1110, 0x1173, 0x11B7], NFKC: [0xD2C8], NFKD: [0x1110, 0x1173, 0x11B7] }, +{ source: [0xD2C9], NFC: [0xD2C9], NFD: [0x1110, 0x1173, 0x11B8], NFKC: [0xD2C9], NFKD: [0x1110, 0x1173, 0x11B8] }, +{ source: [0xD2CA], NFC: [0xD2CA], NFD: [0x1110, 0x1173, 0x11B9], NFKC: [0xD2CA], NFKD: [0x1110, 0x1173, 0x11B9] }, +{ source: [0xD2CB], NFC: [0xD2CB], NFD: [0x1110, 0x1173, 0x11BA], NFKC: [0xD2CB], NFKD: [0x1110, 0x1173, 0x11BA] }, +{ source: [0xD2CC], NFC: [0xD2CC], NFD: [0x1110, 0x1173, 0x11BB], NFKC: [0xD2CC], NFKD: [0x1110, 0x1173, 0x11BB] }, +{ source: [0xD2CD], NFC: [0xD2CD], NFD: [0x1110, 0x1173, 0x11BC], NFKC: [0xD2CD], NFKD: [0x1110, 0x1173, 0x11BC] }, +{ source: [0xD2CE], NFC: [0xD2CE], NFD: [0x1110, 0x1173, 0x11BD], NFKC: [0xD2CE], NFKD: [0x1110, 0x1173, 0x11BD] }, +{ source: [0xD2CF], NFC: [0xD2CF], NFD: [0x1110, 0x1173, 0x11BE], NFKC: [0xD2CF], NFKD: [0x1110, 0x1173, 0x11BE] }, +{ source: [0xD2D0], NFC: [0xD2D0], NFD: [0x1110, 0x1173, 0x11BF], NFKC: [0xD2D0], NFKD: [0x1110, 0x1173, 0x11BF] }, +{ source: [0xD2D1], NFC: [0xD2D1], NFD: [0x1110, 0x1173, 0x11C0], NFKC: [0xD2D1], NFKD: [0x1110, 0x1173, 0x11C0] }, +{ source: [0xD2D2], NFC: [0xD2D2], NFD: [0x1110, 0x1173, 0x11C1], NFKC: [0xD2D2], NFKD: [0x1110, 0x1173, 0x11C1] }, +{ source: [0xD2D3], NFC: [0xD2D3], NFD: [0x1110, 0x1173, 0x11C2], NFKC: [0xD2D3], NFKD: [0x1110, 0x1173, 0x11C2] }, +{ source: [0xD2D4], NFC: [0xD2D4], NFD: [0x1110, 0x1174], NFKC: [0xD2D4], NFKD: [0x1110, 0x1174] }, +{ source: [0xD2D5], NFC: [0xD2D5], NFD: [0x1110, 0x1174, 0x11A8], NFKC: [0xD2D5], NFKD: [0x1110, 0x1174, 0x11A8] }, +{ source: [0xD2D6], NFC: [0xD2D6], NFD: [0x1110, 0x1174, 0x11A9], NFKC: [0xD2D6], NFKD: [0x1110, 0x1174, 0x11A9] }, +{ source: [0xD2D7], NFC: [0xD2D7], NFD: [0x1110, 0x1174, 0x11AA], NFKC: [0xD2D7], NFKD: [0x1110, 0x1174, 0x11AA] }, +{ source: [0xD2D8], NFC: [0xD2D8], NFD: [0x1110, 0x1174, 0x11AB], NFKC: [0xD2D8], NFKD: [0x1110, 0x1174, 0x11AB] }, +{ source: [0xD2D9], NFC: [0xD2D9], NFD: [0x1110, 0x1174, 0x11AC], NFKC: [0xD2D9], NFKD: [0x1110, 0x1174, 0x11AC] }, +{ source: [0xD2DA], NFC: [0xD2DA], NFD: [0x1110, 0x1174, 0x11AD], NFKC: [0xD2DA], NFKD: [0x1110, 0x1174, 0x11AD] }, +{ source: [0xD2DB], NFC: [0xD2DB], NFD: [0x1110, 0x1174, 0x11AE], NFKC: [0xD2DB], NFKD: [0x1110, 0x1174, 0x11AE] }, +{ source: [0xD2DC], NFC: [0xD2DC], NFD: [0x1110, 0x1174, 0x11AF], NFKC: [0xD2DC], NFKD: [0x1110, 0x1174, 0x11AF] }, +{ source: [0xD2DD], NFC: [0xD2DD], NFD: [0x1110, 0x1174, 0x11B0], NFKC: [0xD2DD], NFKD: [0x1110, 0x1174, 0x11B0] }, +{ source: [0xD2DE], NFC: [0xD2DE], NFD: [0x1110, 0x1174, 0x11B1], NFKC: [0xD2DE], NFKD: [0x1110, 0x1174, 0x11B1] }, +{ source: [0xD2DF], NFC: [0xD2DF], NFD: [0x1110, 0x1174, 0x11B2], NFKC: [0xD2DF], NFKD: [0x1110, 0x1174, 0x11B2] }, +{ source: [0xD2E0], NFC: [0xD2E0], NFD: [0x1110, 0x1174, 0x11B3], NFKC: [0xD2E0], NFKD: [0x1110, 0x1174, 0x11B3] }, +{ source: [0xD2E1], NFC: [0xD2E1], NFD: [0x1110, 0x1174, 0x11B4], NFKC: [0xD2E1], NFKD: [0x1110, 0x1174, 0x11B4] }, +{ source: [0xD2E2], NFC: [0xD2E2], NFD: [0x1110, 0x1174, 0x11B5], NFKC: [0xD2E2], NFKD: [0x1110, 0x1174, 0x11B5] }, +{ source: [0xD2E3], NFC: [0xD2E3], NFD: [0x1110, 0x1174, 0x11B6], NFKC: [0xD2E3], NFKD: [0x1110, 0x1174, 0x11B6] }, +{ source: [0xD2E4], NFC: [0xD2E4], NFD: [0x1110, 0x1174, 0x11B7], NFKC: [0xD2E4], NFKD: [0x1110, 0x1174, 0x11B7] }, +{ source: [0xD2E5], NFC: [0xD2E5], NFD: [0x1110, 0x1174, 0x11B8], NFKC: [0xD2E5], NFKD: [0x1110, 0x1174, 0x11B8] }, +{ source: [0xD2E6], NFC: [0xD2E6], NFD: [0x1110, 0x1174, 0x11B9], NFKC: [0xD2E6], NFKD: [0x1110, 0x1174, 0x11B9] }, +{ source: [0xD2E7], NFC: [0xD2E7], NFD: [0x1110, 0x1174, 0x11BA], NFKC: [0xD2E7], NFKD: [0x1110, 0x1174, 0x11BA] }, +{ source: [0xD2E8], NFC: [0xD2E8], NFD: [0x1110, 0x1174, 0x11BB], NFKC: [0xD2E8], NFKD: [0x1110, 0x1174, 0x11BB] }, +{ source: [0xD2E9], NFC: [0xD2E9], NFD: [0x1110, 0x1174, 0x11BC], NFKC: [0xD2E9], NFKD: [0x1110, 0x1174, 0x11BC] }, +{ source: [0xD2EA], NFC: [0xD2EA], NFD: [0x1110, 0x1174, 0x11BD], NFKC: [0xD2EA], NFKD: [0x1110, 0x1174, 0x11BD] }, +{ source: [0xD2EB], NFC: [0xD2EB], NFD: [0x1110, 0x1174, 0x11BE], NFKC: [0xD2EB], NFKD: [0x1110, 0x1174, 0x11BE] }, +{ source: [0xD2EC], NFC: [0xD2EC], NFD: [0x1110, 0x1174, 0x11BF], NFKC: [0xD2EC], NFKD: [0x1110, 0x1174, 0x11BF] }, +{ source: [0xD2ED], NFC: [0xD2ED], NFD: [0x1110, 0x1174, 0x11C0], NFKC: [0xD2ED], NFKD: [0x1110, 0x1174, 0x11C0] }, +{ source: [0xD2EE], NFC: [0xD2EE], NFD: [0x1110, 0x1174, 0x11C1], NFKC: [0xD2EE], NFKD: [0x1110, 0x1174, 0x11C1] }, +{ source: [0xD2EF], NFC: [0xD2EF], NFD: [0x1110, 0x1174, 0x11C2], NFKC: [0xD2EF], NFKD: [0x1110, 0x1174, 0x11C2] }, +{ source: [0xD2F0], NFC: [0xD2F0], NFD: [0x1110, 0x1175], NFKC: [0xD2F0], NFKD: [0x1110, 0x1175] }, +{ source: [0xD2F1], NFC: [0xD2F1], NFD: [0x1110, 0x1175, 0x11A8], NFKC: [0xD2F1], NFKD: [0x1110, 0x1175, 0x11A8] }, +{ source: [0xD2F2], NFC: [0xD2F2], NFD: [0x1110, 0x1175, 0x11A9], NFKC: [0xD2F2], NFKD: [0x1110, 0x1175, 0x11A9] }, +{ source: [0xD2F3], NFC: [0xD2F3], NFD: [0x1110, 0x1175, 0x11AA], NFKC: [0xD2F3], NFKD: [0x1110, 0x1175, 0x11AA] }, +{ source: [0xD2F4], NFC: [0xD2F4], NFD: [0x1110, 0x1175, 0x11AB], NFKC: [0xD2F4], NFKD: [0x1110, 0x1175, 0x11AB] }, +{ source: [0xD2F5], NFC: [0xD2F5], NFD: [0x1110, 0x1175, 0x11AC], NFKC: [0xD2F5], NFKD: [0x1110, 0x1175, 0x11AC] }, +{ source: [0xD2F6], NFC: [0xD2F6], NFD: [0x1110, 0x1175, 0x11AD], NFKC: [0xD2F6], NFKD: [0x1110, 0x1175, 0x11AD] }, +{ source: [0xD2F7], NFC: [0xD2F7], NFD: [0x1110, 0x1175, 0x11AE], NFKC: [0xD2F7], NFKD: [0x1110, 0x1175, 0x11AE] }, +{ source: [0xD2F8], NFC: [0xD2F8], NFD: [0x1110, 0x1175, 0x11AF], NFKC: [0xD2F8], NFKD: [0x1110, 0x1175, 0x11AF] }, +{ source: [0xD2F9], NFC: [0xD2F9], NFD: [0x1110, 0x1175, 0x11B0], NFKC: [0xD2F9], NFKD: [0x1110, 0x1175, 0x11B0] }, +{ source: [0xD2FA], NFC: [0xD2FA], NFD: [0x1110, 0x1175, 0x11B1], NFKC: [0xD2FA], NFKD: [0x1110, 0x1175, 0x11B1] }, +{ source: [0xD2FB], NFC: [0xD2FB], NFD: [0x1110, 0x1175, 0x11B2], NFKC: [0xD2FB], NFKD: [0x1110, 0x1175, 0x11B2] }, +{ source: [0xD2FC], NFC: [0xD2FC], NFD: [0x1110, 0x1175, 0x11B3], NFKC: [0xD2FC], NFKD: [0x1110, 0x1175, 0x11B3] }, +{ source: [0xD2FD], NFC: [0xD2FD], NFD: [0x1110, 0x1175, 0x11B4], NFKC: [0xD2FD], NFKD: [0x1110, 0x1175, 0x11B4] }, +{ source: [0xD2FE], NFC: [0xD2FE], NFD: [0x1110, 0x1175, 0x11B5], NFKC: [0xD2FE], NFKD: [0x1110, 0x1175, 0x11B5] }, +{ source: [0xD2FF], NFC: [0xD2FF], NFD: [0x1110, 0x1175, 0x11B6], NFKC: [0xD2FF], NFKD: [0x1110, 0x1175, 0x11B6] }, +{ source: [0xD300], NFC: [0xD300], NFD: [0x1110, 0x1175, 0x11B7], NFKC: [0xD300], NFKD: [0x1110, 0x1175, 0x11B7] }, +{ source: [0xD301], NFC: [0xD301], NFD: [0x1110, 0x1175, 0x11B8], NFKC: [0xD301], NFKD: [0x1110, 0x1175, 0x11B8] }, +{ source: [0xD302], NFC: [0xD302], NFD: [0x1110, 0x1175, 0x11B9], NFKC: [0xD302], NFKD: [0x1110, 0x1175, 0x11B9] }, +{ source: [0xD303], NFC: [0xD303], NFD: [0x1110, 0x1175, 0x11BA], NFKC: [0xD303], NFKD: [0x1110, 0x1175, 0x11BA] }, +{ source: [0xD304], NFC: [0xD304], NFD: [0x1110, 0x1175, 0x11BB], NFKC: [0xD304], NFKD: [0x1110, 0x1175, 0x11BB] }, +{ source: [0xD305], NFC: [0xD305], NFD: [0x1110, 0x1175, 0x11BC], NFKC: [0xD305], NFKD: [0x1110, 0x1175, 0x11BC] }, +{ source: [0xD306], NFC: [0xD306], NFD: [0x1110, 0x1175, 0x11BD], NFKC: [0xD306], NFKD: [0x1110, 0x1175, 0x11BD] }, +{ source: [0xD307], NFC: [0xD307], NFD: [0x1110, 0x1175, 0x11BE], NFKC: [0xD307], NFKD: [0x1110, 0x1175, 0x11BE] }, +{ source: [0xD308], NFC: [0xD308], NFD: [0x1110, 0x1175, 0x11BF], NFKC: [0xD308], NFKD: [0x1110, 0x1175, 0x11BF] }, +{ source: [0xD309], NFC: [0xD309], NFD: [0x1110, 0x1175, 0x11C0], NFKC: [0xD309], NFKD: [0x1110, 0x1175, 0x11C0] }, +{ source: [0xD30A], NFC: [0xD30A], NFD: [0x1110, 0x1175, 0x11C1], NFKC: [0xD30A], NFKD: [0x1110, 0x1175, 0x11C1] }, +{ source: [0xD30B], NFC: [0xD30B], NFD: [0x1110, 0x1175, 0x11C2], NFKC: [0xD30B], NFKD: [0x1110, 0x1175, 0x11C2] }, +{ source: [0xD30C], NFC: [0xD30C], NFD: [0x1111, 0x1161], NFKC: [0xD30C], NFKD: [0x1111, 0x1161] }, +{ source: [0xD30D], NFC: [0xD30D], NFD: [0x1111, 0x1161, 0x11A8], NFKC: [0xD30D], NFKD: [0x1111, 0x1161, 0x11A8] }, +{ source: [0xD30E], NFC: [0xD30E], NFD: [0x1111, 0x1161, 0x11A9], NFKC: [0xD30E], NFKD: [0x1111, 0x1161, 0x11A9] }, +{ source: [0xD30F], NFC: [0xD30F], NFD: [0x1111, 0x1161, 0x11AA], NFKC: [0xD30F], NFKD: [0x1111, 0x1161, 0x11AA] }, +{ source: [0xD310], NFC: [0xD310], NFD: [0x1111, 0x1161, 0x11AB], NFKC: [0xD310], NFKD: [0x1111, 0x1161, 0x11AB] }, +{ source: [0xD311], NFC: [0xD311], NFD: [0x1111, 0x1161, 0x11AC], NFKC: [0xD311], NFKD: [0x1111, 0x1161, 0x11AC] }, +{ source: [0xD312], NFC: [0xD312], NFD: [0x1111, 0x1161, 0x11AD], NFKC: [0xD312], NFKD: [0x1111, 0x1161, 0x11AD] }, +{ source: [0xD313], NFC: [0xD313], NFD: [0x1111, 0x1161, 0x11AE], NFKC: [0xD313], NFKD: [0x1111, 0x1161, 0x11AE] }, +{ source: [0xD314], NFC: [0xD314], NFD: [0x1111, 0x1161, 0x11AF], NFKC: [0xD314], NFKD: [0x1111, 0x1161, 0x11AF] }, +{ source: [0xD315], NFC: [0xD315], NFD: [0x1111, 0x1161, 0x11B0], NFKC: [0xD315], NFKD: [0x1111, 0x1161, 0x11B0] }, +{ source: [0xD316], NFC: [0xD316], NFD: [0x1111, 0x1161, 0x11B1], NFKC: [0xD316], NFKD: [0x1111, 0x1161, 0x11B1] }, +{ source: [0xD317], NFC: [0xD317], NFD: [0x1111, 0x1161, 0x11B2], NFKC: [0xD317], NFKD: [0x1111, 0x1161, 0x11B2] }, +{ source: [0xD318], NFC: [0xD318], NFD: [0x1111, 0x1161, 0x11B3], NFKC: [0xD318], NFKD: [0x1111, 0x1161, 0x11B3] }, +{ source: [0xD319], NFC: [0xD319], NFD: [0x1111, 0x1161, 0x11B4], NFKC: [0xD319], NFKD: [0x1111, 0x1161, 0x11B4] }, +{ source: [0xD31A], NFC: [0xD31A], NFD: [0x1111, 0x1161, 0x11B5], NFKC: [0xD31A], NFKD: [0x1111, 0x1161, 0x11B5] }, +{ source: [0xD31B], NFC: [0xD31B], NFD: [0x1111, 0x1161, 0x11B6], NFKC: [0xD31B], NFKD: [0x1111, 0x1161, 0x11B6] }, +{ source: [0xD31C], NFC: [0xD31C], NFD: [0x1111, 0x1161, 0x11B7], NFKC: [0xD31C], NFKD: [0x1111, 0x1161, 0x11B7] }, +{ source: [0xD31D], NFC: [0xD31D], NFD: [0x1111, 0x1161, 0x11B8], NFKC: [0xD31D], NFKD: [0x1111, 0x1161, 0x11B8] }, +{ source: [0xD31E], NFC: [0xD31E], NFD: [0x1111, 0x1161, 0x11B9], NFKC: [0xD31E], NFKD: [0x1111, 0x1161, 0x11B9] }, +{ source: [0xD31F], NFC: [0xD31F], NFD: [0x1111, 0x1161, 0x11BA], NFKC: [0xD31F], NFKD: [0x1111, 0x1161, 0x11BA] }, +{ source: [0xD320], NFC: [0xD320], NFD: [0x1111, 0x1161, 0x11BB], NFKC: [0xD320], NFKD: [0x1111, 0x1161, 0x11BB] }, +{ source: [0xD321], NFC: [0xD321], NFD: [0x1111, 0x1161, 0x11BC], NFKC: [0xD321], NFKD: [0x1111, 0x1161, 0x11BC] }, +{ source: [0xD322], NFC: [0xD322], NFD: [0x1111, 0x1161, 0x11BD], NFKC: [0xD322], NFKD: [0x1111, 0x1161, 0x11BD] }, +{ source: [0xD323], NFC: [0xD323], NFD: [0x1111, 0x1161, 0x11BE], NFKC: [0xD323], NFKD: [0x1111, 0x1161, 0x11BE] }, +{ source: [0xD324], NFC: [0xD324], NFD: [0x1111, 0x1161, 0x11BF], NFKC: [0xD324], NFKD: [0x1111, 0x1161, 0x11BF] }, +{ source: [0xD325], NFC: [0xD325], NFD: [0x1111, 0x1161, 0x11C0], NFKC: [0xD325], NFKD: [0x1111, 0x1161, 0x11C0] }, +{ source: [0xD326], NFC: [0xD326], NFD: [0x1111, 0x1161, 0x11C1], NFKC: [0xD326], NFKD: [0x1111, 0x1161, 0x11C1] }, +{ source: [0xD327], NFC: [0xD327], NFD: [0x1111, 0x1161, 0x11C2], NFKC: [0xD327], NFKD: [0x1111, 0x1161, 0x11C2] }, +{ source: [0xD328], NFC: [0xD328], NFD: [0x1111, 0x1162], NFKC: [0xD328], NFKD: [0x1111, 0x1162] }, +{ source: [0xD329], NFC: [0xD329], NFD: [0x1111, 0x1162, 0x11A8], NFKC: [0xD329], NFKD: [0x1111, 0x1162, 0x11A8] }, +{ source: [0xD32A], NFC: [0xD32A], NFD: [0x1111, 0x1162, 0x11A9], NFKC: [0xD32A], NFKD: [0x1111, 0x1162, 0x11A9] }, +{ source: [0xD32B], NFC: [0xD32B], NFD: [0x1111, 0x1162, 0x11AA], NFKC: [0xD32B], NFKD: [0x1111, 0x1162, 0x11AA] }, +{ source: [0xD32C], NFC: [0xD32C], NFD: [0x1111, 0x1162, 0x11AB], NFKC: [0xD32C], NFKD: [0x1111, 0x1162, 0x11AB] }, +{ source: [0xD32D], NFC: [0xD32D], NFD: [0x1111, 0x1162, 0x11AC], NFKC: [0xD32D], NFKD: [0x1111, 0x1162, 0x11AC] }, +{ source: [0xD32E], NFC: [0xD32E], NFD: [0x1111, 0x1162, 0x11AD], NFKC: [0xD32E], NFKD: [0x1111, 0x1162, 0x11AD] }, +{ source: [0xD32F], NFC: [0xD32F], NFD: [0x1111, 0x1162, 0x11AE], NFKC: [0xD32F], NFKD: [0x1111, 0x1162, 0x11AE] }, +{ source: [0xD330], NFC: [0xD330], NFD: [0x1111, 0x1162, 0x11AF], NFKC: [0xD330], NFKD: [0x1111, 0x1162, 0x11AF] }, +{ source: [0xD331], NFC: [0xD331], NFD: [0x1111, 0x1162, 0x11B0], NFKC: [0xD331], NFKD: [0x1111, 0x1162, 0x11B0] }, +{ source: [0xD332], NFC: [0xD332], NFD: [0x1111, 0x1162, 0x11B1], NFKC: [0xD332], NFKD: [0x1111, 0x1162, 0x11B1] }, +{ source: [0xD333], NFC: [0xD333], NFD: [0x1111, 0x1162, 0x11B2], NFKC: [0xD333], NFKD: [0x1111, 0x1162, 0x11B2] }, +{ source: [0xD334], NFC: [0xD334], NFD: [0x1111, 0x1162, 0x11B3], NFKC: [0xD334], NFKD: [0x1111, 0x1162, 0x11B3] }, +{ source: [0xD335], NFC: [0xD335], NFD: [0x1111, 0x1162, 0x11B4], NFKC: [0xD335], NFKD: [0x1111, 0x1162, 0x11B4] }, +{ source: [0xD336], NFC: [0xD336], NFD: [0x1111, 0x1162, 0x11B5], NFKC: [0xD336], NFKD: [0x1111, 0x1162, 0x11B5] }, +{ source: [0xD337], NFC: [0xD337], NFD: [0x1111, 0x1162, 0x11B6], NFKC: [0xD337], NFKD: [0x1111, 0x1162, 0x11B6] }, +{ source: [0xD338], NFC: [0xD338], NFD: [0x1111, 0x1162, 0x11B7], NFKC: [0xD338], NFKD: [0x1111, 0x1162, 0x11B7] }, +{ source: [0xD339], NFC: [0xD339], NFD: [0x1111, 0x1162, 0x11B8], NFKC: [0xD339], NFKD: [0x1111, 0x1162, 0x11B8] }, +{ source: [0xD33A], NFC: [0xD33A], NFD: [0x1111, 0x1162, 0x11B9], NFKC: [0xD33A], NFKD: [0x1111, 0x1162, 0x11B9] }, +{ source: [0xD33B], NFC: [0xD33B], NFD: [0x1111, 0x1162, 0x11BA], NFKC: [0xD33B], NFKD: [0x1111, 0x1162, 0x11BA] }, +{ source: [0xD33C], NFC: [0xD33C], NFD: [0x1111, 0x1162, 0x11BB], NFKC: [0xD33C], NFKD: [0x1111, 0x1162, 0x11BB] }, +{ source: [0xD33D], NFC: [0xD33D], NFD: [0x1111, 0x1162, 0x11BC], NFKC: [0xD33D], NFKD: [0x1111, 0x1162, 0x11BC] }, +{ source: [0xD33E], NFC: [0xD33E], NFD: [0x1111, 0x1162, 0x11BD], NFKC: [0xD33E], NFKD: [0x1111, 0x1162, 0x11BD] }, +{ source: [0xD33F], NFC: [0xD33F], NFD: [0x1111, 0x1162, 0x11BE], NFKC: [0xD33F], NFKD: [0x1111, 0x1162, 0x11BE] }, +{ source: [0xD340], NFC: [0xD340], NFD: [0x1111, 0x1162, 0x11BF], NFKC: [0xD340], NFKD: [0x1111, 0x1162, 0x11BF] }, +{ source: [0xD341], NFC: [0xD341], NFD: [0x1111, 0x1162, 0x11C0], NFKC: [0xD341], NFKD: [0x1111, 0x1162, 0x11C0] }, +{ source: [0xD342], NFC: [0xD342], NFD: [0x1111, 0x1162, 0x11C1], NFKC: [0xD342], NFKD: [0x1111, 0x1162, 0x11C1] }, +{ source: [0xD343], NFC: [0xD343], NFD: [0x1111, 0x1162, 0x11C2], NFKC: [0xD343], NFKD: [0x1111, 0x1162, 0x11C2] }, +{ source: [0xD344], NFC: [0xD344], NFD: [0x1111, 0x1163], NFKC: [0xD344], NFKD: [0x1111, 0x1163] }, +{ source: [0xD345], NFC: [0xD345], NFD: [0x1111, 0x1163, 0x11A8], NFKC: [0xD345], NFKD: [0x1111, 0x1163, 0x11A8] }, +{ source: [0xD346], NFC: [0xD346], NFD: [0x1111, 0x1163, 0x11A9], NFKC: [0xD346], NFKD: [0x1111, 0x1163, 0x11A9] }, +{ source: [0xD347], NFC: [0xD347], NFD: [0x1111, 0x1163, 0x11AA], NFKC: [0xD347], NFKD: [0x1111, 0x1163, 0x11AA] }, +{ source: [0xD348], NFC: [0xD348], NFD: [0x1111, 0x1163, 0x11AB], NFKC: [0xD348], NFKD: [0x1111, 0x1163, 0x11AB] }, +{ source: [0xD349], NFC: [0xD349], NFD: [0x1111, 0x1163, 0x11AC], NFKC: [0xD349], NFKD: [0x1111, 0x1163, 0x11AC] }, +{ source: [0xD34A], NFC: [0xD34A], NFD: [0x1111, 0x1163, 0x11AD], NFKC: [0xD34A], NFKD: [0x1111, 0x1163, 0x11AD] }, +{ source: [0xD34B], NFC: [0xD34B], NFD: [0x1111, 0x1163, 0x11AE], NFKC: [0xD34B], NFKD: [0x1111, 0x1163, 0x11AE] }, +{ source: [0xD34C], NFC: [0xD34C], NFD: [0x1111, 0x1163, 0x11AF], NFKC: [0xD34C], NFKD: [0x1111, 0x1163, 0x11AF] }, +{ source: [0xD34D], NFC: [0xD34D], NFD: [0x1111, 0x1163, 0x11B0], NFKC: [0xD34D], NFKD: [0x1111, 0x1163, 0x11B0] }, +{ source: [0xD34E], NFC: [0xD34E], NFD: [0x1111, 0x1163, 0x11B1], NFKC: [0xD34E], NFKD: [0x1111, 0x1163, 0x11B1] }, +{ source: [0xD34F], NFC: [0xD34F], NFD: [0x1111, 0x1163, 0x11B2], NFKC: [0xD34F], NFKD: [0x1111, 0x1163, 0x11B2] }, +{ source: [0xD350], NFC: [0xD350], NFD: [0x1111, 0x1163, 0x11B3], NFKC: [0xD350], NFKD: [0x1111, 0x1163, 0x11B3] }, +{ source: [0xD351], NFC: [0xD351], NFD: [0x1111, 0x1163, 0x11B4], NFKC: [0xD351], NFKD: [0x1111, 0x1163, 0x11B4] }, +{ source: [0xD352], NFC: [0xD352], NFD: [0x1111, 0x1163, 0x11B5], NFKC: [0xD352], NFKD: [0x1111, 0x1163, 0x11B5] }, +{ source: [0xD353], NFC: [0xD353], NFD: [0x1111, 0x1163, 0x11B6], NFKC: [0xD353], NFKD: [0x1111, 0x1163, 0x11B6] }, +{ source: [0xD354], NFC: [0xD354], NFD: [0x1111, 0x1163, 0x11B7], NFKC: [0xD354], NFKD: [0x1111, 0x1163, 0x11B7] }, +{ source: [0xD355], NFC: [0xD355], NFD: [0x1111, 0x1163, 0x11B8], NFKC: [0xD355], NFKD: [0x1111, 0x1163, 0x11B8] }, +{ source: [0xD356], NFC: [0xD356], NFD: [0x1111, 0x1163, 0x11B9], NFKC: [0xD356], NFKD: [0x1111, 0x1163, 0x11B9] }, +{ source: [0xD357], NFC: [0xD357], NFD: [0x1111, 0x1163, 0x11BA], NFKC: [0xD357], NFKD: [0x1111, 0x1163, 0x11BA] }, +{ source: [0xD358], NFC: [0xD358], NFD: [0x1111, 0x1163, 0x11BB], NFKC: [0xD358], NFKD: [0x1111, 0x1163, 0x11BB] }, +{ source: [0xD359], NFC: [0xD359], NFD: [0x1111, 0x1163, 0x11BC], NFKC: [0xD359], NFKD: [0x1111, 0x1163, 0x11BC] }, +{ source: [0xD35A], NFC: [0xD35A], NFD: [0x1111, 0x1163, 0x11BD], NFKC: [0xD35A], NFKD: [0x1111, 0x1163, 0x11BD] }, +{ source: [0xD35B], NFC: [0xD35B], NFD: [0x1111, 0x1163, 0x11BE], NFKC: [0xD35B], NFKD: [0x1111, 0x1163, 0x11BE] }, +{ source: [0xD35C], NFC: [0xD35C], NFD: [0x1111, 0x1163, 0x11BF], NFKC: [0xD35C], NFKD: [0x1111, 0x1163, 0x11BF] }, +{ source: [0xD35D], NFC: [0xD35D], NFD: [0x1111, 0x1163, 0x11C0], NFKC: [0xD35D], NFKD: [0x1111, 0x1163, 0x11C0] }, +{ source: [0xD35E], NFC: [0xD35E], NFD: [0x1111, 0x1163, 0x11C1], NFKC: [0xD35E], NFKD: [0x1111, 0x1163, 0x11C1] }, +{ source: [0xD35F], NFC: [0xD35F], NFD: [0x1111, 0x1163, 0x11C2], NFKC: [0xD35F], NFKD: [0x1111, 0x1163, 0x11C2] }, +{ source: [0xD360], NFC: [0xD360], NFD: [0x1111, 0x1164], NFKC: [0xD360], NFKD: [0x1111, 0x1164] }, +{ source: [0xD361], NFC: [0xD361], NFD: [0x1111, 0x1164, 0x11A8], NFKC: [0xD361], NFKD: [0x1111, 0x1164, 0x11A8] }, +{ source: [0xD362], NFC: [0xD362], NFD: [0x1111, 0x1164, 0x11A9], NFKC: [0xD362], NFKD: [0x1111, 0x1164, 0x11A9] }, +{ source: [0xD363], NFC: [0xD363], NFD: [0x1111, 0x1164, 0x11AA], NFKC: [0xD363], NFKD: [0x1111, 0x1164, 0x11AA] }, +{ source: [0xD364], NFC: [0xD364], NFD: [0x1111, 0x1164, 0x11AB], NFKC: [0xD364], NFKD: [0x1111, 0x1164, 0x11AB] }, +{ source: [0xD365], NFC: [0xD365], NFD: [0x1111, 0x1164, 0x11AC], NFKC: [0xD365], NFKD: [0x1111, 0x1164, 0x11AC] }, +{ source: [0xD366], NFC: [0xD366], NFD: [0x1111, 0x1164, 0x11AD], NFKC: [0xD366], NFKD: [0x1111, 0x1164, 0x11AD] }, +{ source: [0xD367], NFC: [0xD367], NFD: [0x1111, 0x1164, 0x11AE], NFKC: [0xD367], NFKD: [0x1111, 0x1164, 0x11AE] }, +{ source: [0xD368], NFC: [0xD368], NFD: [0x1111, 0x1164, 0x11AF], NFKC: [0xD368], NFKD: [0x1111, 0x1164, 0x11AF] }, +{ source: [0xD369], NFC: [0xD369], NFD: [0x1111, 0x1164, 0x11B0], NFKC: [0xD369], NFKD: [0x1111, 0x1164, 0x11B0] }, +{ source: [0xD36A], NFC: [0xD36A], NFD: [0x1111, 0x1164, 0x11B1], NFKC: [0xD36A], NFKD: [0x1111, 0x1164, 0x11B1] }, +{ source: [0xD36B], NFC: [0xD36B], NFD: [0x1111, 0x1164, 0x11B2], NFKC: [0xD36B], NFKD: [0x1111, 0x1164, 0x11B2] }, +{ source: [0xD36C], NFC: [0xD36C], NFD: [0x1111, 0x1164, 0x11B3], NFKC: [0xD36C], NFKD: [0x1111, 0x1164, 0x11B3] }, +{ source: [0xD36D], NFC: [0xD36D], NFD: [0x1111, 0x1164, 0x11B4], NFKC: [0xD36D], NFKD: [0x1111, 0x1164, 0x11B4] }, +{ source: [0xD36E], NFC: [0xD36E], NFD: [0x1111, 0x1164, 0x11B5], NFKC: [0xD36E], NFKD: [0x1111, 0x1164, 0x11B5] }, +{ source: [0xD36F], NFC: [0xD36F], NFD: [0x1111, 0x1164, 0x11B6], NFKC: [0xD36F], NFKD: [0x1111, 0x1164, 0x11B6] }, +{ source: [0xD370], NFC: [0xD370], NFD: [0x1111, 0x1164, 0x11B7], NFKC: [0xD370], NFKD: [0x1111, 0x1164, 0x11B7] }, +{ source: [0xD371], NFC: [0xD371], NFD: [0x1111, 0x1164, 0x11B8], NFKC: [0xD371], NFKD: [0x1111, 0x1164, 0x11B8] }, +{ source: [0xD372], NFC: [0xD372], NFD: [0x1111, 0x1164, 0x11B9], NFKC: [0xD372], NFKD: [0x1111, 0x1164, 0x11B9] }, +{ source: [0xD373], NFC: [0xD373], NFD: [0x1111, 0x1164, 0x11BA], NFKC: [0xD373], NFKD: [0x1111, 0x1164, 0x11BA] }, +{ source: [0xD374], NFC: [0xD374], NFD: [0x1111, 0x1164, 0x11BB], NFKC: [0xD374], NFKD: [0x1111, 0x1164, 0x11BB] }, +{ source: [0xD375], NFC: [0xD375], NFD: [0x1111, 0x1164, 0x11BC], NFKC: [0xD375], NFKD: [0x1111, 0x1164, 0x11BC] }, +{ source: [0xD376], NFC: [0xD376], NFD: [0x1111, 0x1164, 0x11BD], NFKC: [0xD376], NFKD: [0x1111, 0x1164, 0x11BD] }, +{ source: [0xD377], NFC: [0xD377], NFD: [0x1111, 0x1164, 0x11BE], NFKC: [0xD377], NFKD: [0x1111, 0x1164, 0x11BE] }, +{ source: [0xD378], NFC: [0xD378], NFD: [0x1111, 0x1164, 0x11BF], NFKC: [0xD378], NFKD: [0x1111, 0x1164, 0x11BF] }, +{ source: [0xD379], NFC: [0xD379], NFD: [0x1111, 0x1164, 0x11C0], NFKC: [0xD379], NFKD: [0x1111, 0x1164, 0x11C0] }, +{ source: [0xD37A], NFC: [0xD37A], NFD: [0x1111, 0x1164, 0x11C1], NFKC: [0xD37A], NFKD: [0x1111, 0x1164, 0x11C1] }, +{ source: [0xD37B], NFC: [0xD37B], NFD: [0x1111, 0x1164, 0x11C2], NFKC: [0xD37B], NFKD: [0x1111, 0x1164, 0x11C2] }, +{ source: [0xD37C], NFC: [0xD37C], NFD: [0x1111, 0x1165], NFKC: [0xD37C], NFKD: [0x1111, 0x1165] }, +{ source: [0xD37D], NFC: [0xD37D], NFD: [0x1111, 0x1165, 0x11A8], NFKC: [0xD37D], NFKD: [0x1111, 0x1165, 0x11A8] }, +{ source: [0xD37E], NFC: [0xD37E], NFD: [0x1111, 0x1165, 0x11A9], NFKC: [0xD37E], NFKD: [0x1111, 0x1165, 0x11A9] }, +{ source: [0xD37F], NFC: [0xD37F], NFD: [0x1111, 0x1165, 0x11AA], NFKC: [0xD37F], NFKD: [0x1111, 0x1165, 0x11AA] }, +{ source: [0xD380], NFC: [0xD380], NFD: [0x1111, 0x1165, 0x11AB], NFKC: [0xD380], NFKD: [0x1111, 0x1165, 0x11AB] }, +{ source: [0xD381], NFC: [0xD381], NFD: [0x1111, 0x1165, 0x11AC], NFKC: [0xD381], NFKD: [0x1111, 0x1165, 0x11AC] }, +{ source: [0xD382], NFC: [0xD382], NFD: [0x1111, 0x1165, 0x11AD], NFKC: [0xD382], NFKD: [0x1111, 0x1165, 0x11AD] }, +{ source: [0xD383], NFC: [0xD383], NFD: [0x1111, 0x1165, 0x11AE], NFKC: [0xD383], NFKD: [0x1111, 0x1165, 0x11AE] }, +{ source: [0xD384], NFC: [0xD384], NFD: [0x1111, 0x1165, 0x11AF], NFKC: [0xD384], NFKD: [0x1111, 0x1165, 0x11AF] }, +{ source: [0xD385], NFC: [0xD385], NFD: [0x1111, 0x1165, 0x11B0], NFKC: [0xD385], NFKD: [0x1111, 0x1165, 0x11B0] }, +{ source: [0xD386], NFC: [0xD386], NFD: [0x1111, 0x1165, 0x11B1], NFKC: [0xD386], NFKD: [0x1111, 0x1165, 0x11B1] }, +{ source: [0xD387], NFC: [0xD387], NFD: [0x1111, 0x1165, 0x11B2], NFKC: [0xD387], NFKD: [0x1111, 0x1165, 0x11B2] }, +{ source: [0xD388], NFC: [0xD388], NFD: [0x1111, 0x1165, 0x11B3], NFKC: [0xD388], NFKD: [0x1111, 0x1165, 0x11B3] }, +{ source: [0xD389], NFC: [0xD389], NFD: [0x1111, 0x1165, 0x11B4], NFKC: [0xD389], NFKD: [0x1111, 0x1165, 0x11B4] }, +{ source: [0xD38A], NFC: [0xD38A], NFD: [0x1111, 0x1165, 0x11B5], NFKC: [0xD38A], NFKD: [0x1111, 0x1165, 0x11B5] }, +{ source: [0xD38B], NFC: [0xD38B], NFD: [0x1111, 0x1165, 0x11B6], NFKC: [0xD38B], NFKD: [0x1111, 0x1165, 0x11B6] }, +{ source: [0xD38C], NFC: [0xD38C], NFD: [0x1111, 0x1165, 0x11B7], NFKC: [0xD38C], NFKD: [0x1111, 0x1165, 0x11B7] }, +{ source: [0xD38D], NFC: [0xD38D], NFD: [0x1111, 0x1165, 0x11B8], NFKC: [0xD38D], NFKD: [0x1111, 0x1165, 0x11B8] }, +{ source: [0xD38E], NFC: [0xD38E], NFD: [0x1111, 0x1165, 0x11B9], NFKC: [0xD38E], NFKD: [0x1111, 0x1165, 0x11B9] }, +{ source: [0xD38F], NFC: [0xD38F], NFD: [0x1111, 0x1165, 0x11BA], NFKC: [0xD38F], NFKD: [0x1111, 0x1165, 0x11BA] }, +{ source: [0xD390], NFC: [0xD390], NFD: [0x1111, 0x1165, 0x11BB], NFKC: [0xD390], NFKD: [0x1111, 0x1165, 0x11BB] }, +{ source: [0xD391], NFC: [0xD391], NFD: [0x1111, 0x1165, 0x11BC], NFKC: [0xD391], NFKD: [0x1111, 0x1165, 0x11BC] }, +{ source: [0xD392], NFC: [0xD392], NFD: [0x1111, 0x1165, 0x11BD], NFKC: [0xD392], NFKD: [0x1111, 0x1165, 0x11BD] }, +{ source: [0xD393], NFC: [0xD393], NFD: [0x1111, 0x1165, 0x11BE], NFKC: [0xD393], NFKD: [0x1111, 0x1165, 0x11BE] }, +{ source: [0xD394], NFC: [0xD394], NFD: [0x1111, 0x1165, 0x11BF], NFKC: [0xD394], NFKD: [0x1111, 0x1165, 0x11BF] }, +{ source: [0xD395], NFC: [0xD395], NFD: [0x1111, 0x1165, 0x11C0], NFKC: [0xD395], NFKD: [0x1111, 0x1165, 0x11C0] }, +{ source: [0xD396], NFC: [0xD396], NFD: [0x1111, 0x1165, 0x11C1], NFKC: [0xD396], NFKD: [0x1111, 0x1165, 0x11C1] }, +{ source: [0xD397], NFC: [0xD397], NFD: [0x1111, 0x1165, 0x11C2], NFKC: [0xD397], NFKD: [0x1111, 0x1165, 0x11C2] }, +{ source: [0xD398], NFC: [0xD398], NFD: [0x1111, 0x1166], NFKC: [0xD398], NFKD: [0x1111, 0x1166] }, +{ source: [0xD399], NFC: [0xD399], NFD: [0x1111, 0x1166, 0x11A8], NFKC: [0xD399], NFKD: [0x1111, 0x1166, 0x11A8] }, +{ source: [0xD39A], NFC: [0xD39A], NFD: [0x1111, 0x1166, 0x11A9], NFKC: [0xD39A], NFKD: [0x1111, 0x1166, 0x11A9] }, +{ source: [0xD39B], NFC: [0xD39B], NFD: [0x1111, 0x1166, 0x11AA], NFKC: [0xD39B], NFKD: [0x1111, 0x1166, 0x11AA] }, +{ source: [0xD39C], NFC: [0xD39C], NFD: [0x1111, 0x1166, 0x11AB], NFKC: [0xD39C], NFKD: [0x1111, 0x1166, 0x11AB] }, +{ source: [0xD39D], NFC: [0xD39D], NFD: [0x1111, 0x1166, 0x11AC], NFKC: [0xD39D], NFKD: [0x1111, 0x1166, 0x11AC] }, +{ source: [0xD39E], NFC: [0xD39E], NFD: [0x1111, 0x1166, 0x11AD], NFKC: [0xD39E], NFKD: [0x1111, 0x1166, 0x11AD] }, +{ source: [0xD39F], NFC: [0xD39F], NFD: [0x1111, 0x1166, 0x11AE], NFKC: [0xD39F], NFKD: [0x1111, 0x1166, 0x11AE] }, +{ source: [0xD3A0], NFC: [0xD3A0], NFD: [0x1111, 0x1166, 0x11AF], NFKC: [0xD3A0], NFKD: [0x1111, 0x1166, 0x11AF] }, +{ source: [0xD3A1], NFC: [0xD3A1], NFD: [0x1111, 0x1166, 0x11B0], NFKC: [0xD3A1], NFKD: [0x1111, 0x1166, 0x11B0] }, +{ source: [0xD3A2], NFC: [0xD3A2], NFD: [0x1111, 0x1166, 0x11B1], NFKC: [0xD3A2], NFKD: [0x1111, 0x1166, 0x11B1] }, +{ source: [0xD3A3], NFC: [0xD3A3], NFD: [0x1111, 0x1166, 0x11B2], NFKC: [0xD3A3], NFKD: [0x1111, 0x1166, 0x11B2] }, +{ source: [0xD3A4], NFC: [0xD3A4], NFD: [0x1111, 0x1166, 0x11B3], NFKC: [0xD3A4], NFKD: [0x1111, 0x1166, 0x11B3] }, +{ source: [0xD3A5], NFC: [0xD3A5], NFD: [0x1111, 0x1166, 0x11B4], NFKC: [0xD3A5], NFKD: [0x1111, 0x1166, 0x11B4] }, +{ source: [0xD3A6], NFC: [0xD3A6], NFD: [0x1111, 0x1166, 0x11B5], NFKC: [0xD3A6], NFKD: [0x1111, 0x1166, 0x11B5] }, +{ source: [0xD3A7], NFC: [0xD3A7], NFD: [0x1111, 0x1166, 0x11B6], NFKC: [0xD3A7], NFKD: [0x1111, 0x1166, 0x11B6] }, +{ source: [0xD3A8], NFC: [0xD3A8], NFD: [0x1111, 0x1166, 0x11B7], NFKC: [0xD3A8], NFKD: [0x1111, 0x1166, 0x11B7] }, +{ source: [0xD3A9], NFC: [0xD3A9], NFD: [0x1111, 0x1166, 0x11B8], NFKC: [0xD3A9], NFKD: [0x1111, 0x1166, 0x11B8] }, +{ source: [0xD3AA], NFC: [0xD3AA], NFD: [0x1111, 0x1166, 0x11B9], NFKC: [0xD3AA], NFKD: [0x1111, 0x1166, 0x11B9] }, +{ source: [0xD3AB], NFC: [0xD3AB], NFD: [0x1111, 0x1166, 0x11BA], NFKC: [0xD3AB], NFKD: [0x1111, 0x1166, 0x11BA] }, +{ source: [0xD3AC], NFC: [0xD3AC], NFD: [0x1111, 0x1166, 0x11BB], NFKC: [0xD3AC], NFKD: [0x1111, 0x1166, 0x11BB] }, +{ source: [0xD3AD], NFC: [0xD3AD], NFD: [0x1111, 0x1166, 0x11BC], NFKC: [0xD3AD], NFKD: [0x1111, 0x1166, 0x11BC] }, +{ source: [0xD3AE], NFC: [0xD3AE], NFD: [0x1111, 0x1166, 0x11BD], NFKC: [0xD3AE], NFKD: [0x1111, 0x1166, 0x11BD] }, +{ source: [0xD3AF], NFC: [0xD3AF], NFD: [0x1111, 0x1166, 0x11BE], NFKC: [0xD3AF], NFKD: [0x1111, 0x1166, 0x11BE] }, +{ source: [0xD3B0], NFC: [0xD3B0], NFD: [0x1111, 0x1166, 0x11BF], NFKC: [0xD3B0], NFKD: [0x1111, 0x1166, 0x11BF] }, +{ source: [0xD3B1], NFC: [0xD3B1], NFD: [0x1111, 0x1166, 0x11C0], NFKC: [0xD3B1], NFKD: [0x1111, 0x1166, 0x11C0] }, +{ source: [0xD3B2], NFC: [0xD3B2], NFD: [0x1111, 0x1166, 0x11C1], NFKC: [0xD3B2], NFKD: [0x1111, 0x1166, 0x11C1] }, +{ source: [0xD3B3], NFC: [0xD3B3], NFD: [0x1111, 0x1166, 0x11C2], NFKC: [0xD3B3], NFKD: [0x1111, 0x1166, 0x11C2] }, +{ source: [0xD3B4], NFC: [0xD3B4], NFD: [0x1111, 0x1167], NFKC: [0xD3B4], NFKD: [0x1111, 0x1167] }, +{ source: [0xD3B5], NFC: [0xD3B5], NFD: [0x1111, 0x1167, 0x11A8], NFKC: [0xD3B5], NFKD: [0x1111, 0x1167, 0x11A8] }, +{ source: [0xD3B6], NFC: [0xD3B6], NFD: [0x1111, 0x1167, 0x11A9], NFKC: [0xD3B6], NFKD: [0x1111, 0x1167, 0x11A9] }, +{ source: [0xD3B7], NFC: [0xD3B7], NFD: [0x1111, 0x1167, 0x11AA], NFKC: [0xD3B7], NFKD: [0x1111, 0x1167, 0x11AA] }, +{ source: [0xD3B8], NFC: [0xD3B8], NFD: [0x1111, 0x1167, 0x11AB], NFKC: [0xD3B8], NFKD: [0x1111, 0x1167, 0x11AB] }, +{ source: [0xD3B9], NFC: [0xD3B9], NFD: [0x1111, 0x1167, 0x11AC], NFKC: [0xD3B9], NFKD: [0x1111, 0x1167, 0x11AC] }, +{ source: [0xD3BA], NFC: [0xD3BA], NFD: [0x1111, 0x1167, 0x11AD], NFKC: [0xD3BA], NFKD: [0x1111, 0x1167, 0x11AD] }, +{ source: [0xD3BB], NFC: [0xD3BB], NFD: [0x1111, 0x1167, 0x11AE], NFKC: [0xD3BB], NFKD: [0x1111, 0x1167, 0x11AE] }, +{ source: [0xD3BC], NFC: [0xD3BC], NFD: [0x1111, 0x1167, 0x11AF], NFKC: [0xD3BC], NFKD: [0x1111, 0x1167, 0x11AF] }, +{ source: [0xD3BD], NFC: [0xD3BD], NFD: [0x1111, 0x1167, 0x11B0], NFKC: [0xD3BD], NFKD: [0x1111, 0x1167, 0x11B0] }, +{ source: [0xD3BE], NFC: [0xD3BE], NFD: [0x1111, 0x1167, 0x11B1], NFKC: [0xD3BE], NFKD: [0x1111, 0x1167, 0x11B1] }, +{ source: [0xD3BF], NFC: [0xD3BF], NFD: [0x1111, 0x1167, 0x11B2], NFKC: [0xD3BF], NFKD: [0x1111, 0x1167, 0x11B2] }, +{ source: [0xD3C0], NFC: [0xD3C0], NFD: [0x1111, 0x1167, 0x11B3], NFKC: [0xD3C0], NFKD: [0x1111, 0x1167, 0x11B3] }, +{ source: [0xD3C1], NFC: [0xD3C1], NFD: [0x1111, 0x1167, 0x11B4], NFKC: [0xD3C1], NFKD: [0x1111, 0x1167, 0x11B4] }, +{ source: [0xD3C2], NFC: [0xD3C2], NFD: [0x1111, 0x1167, 0x11B5], NFKC: [0xD3C2], NFKD: [0x1111, 0x1167, 0x11B5] }, +{ source: [0xD3C3], NFC: [0xD3C3], NFD: [0x1111, 0x1167, 0x11B6], NFKC: [0xD3C3], NFKD: [0x1111, 0x1167, 0x11B6] }, +{ source: [0xD3C4], NFC: [0xD3C4], NFD: [0x1111, 0x1167, 0x11B7], NFKC: [0xD3C4], NFKD: [0x1111, 0x1167, 0x11B7] }, +{ source: [0xD3C5], NFC: [0xD3C5], NFD: [0x1111, 0x1167, 0x11B8], NFKC: [0xD3C5], NFKD: [0x1111, 0x1167, 0x11B8] }, +{ source: [0xD3C6], NFC: [0xD3C6], NFD: [0x1111, 0x1167, 0x11B9], NFKC: [0xD3C6], NFKD: [0x1111, 0x1167, 0x11B9] }, +{ source: [0xD3C7], NFC: [0xD3C7], NFD: [0x1111, 0x1167, 0x11BA], NFKC: [0xD3C7], NFKD: [0x1111, 0x1167, 0x11BA] }, +{ source: [0xD3C8], NFC: [0xD3C8], NFD: [0x1111, 0x1167, 0x11BB], NFKC: [0xD3C8], NFKD: [0x1111, 0x1167, 0x11BB] }, +{ source: [0xD3C9], NFC: [0xD3C9], NFD: [0x1111, 0x1167, 0x11BC], NFKC: [0xD3C9], NFKD: [0x1111, 0x1167, 0x11BC] }, +{ source: [0xD3CA], NFC: [0xD3CA], NFD: [0x1111, 0x1167, 0x11BD], NFKC: [0xD3CA], NFKD: [0x1111, 0x1167, 0x11BD] }, +{ source: [0xD3CB], NFC: [0xD3CB], NFD: [0x1111, 0x1167, 0x11BE], NFKC: [0xD3CB], NFKD: [0x1111, 0x1167, 0x11BE] }, +{ source: [0xD3CC], NFC: [0xD3CC], NFD: [0x1111, 0x1167, 0x11BF], NFKC: [0xD3CC], NFKD: [0x1111, 0x1167, 0x11BF] }, +{ source: [0xD3CD], NFC: [0xD3CD], NFD: [0x1111, 0x1167, 0x11C0], NFKC: [0xD3CD], NFKD: [0x1111, 0x1167, 0x11C0] }, +{ source: [0xD3CE], NFC: [0xD3CE], NFD: [0x1111, 0x1167, 0x11C1], NFKC: [0xD3CE], NFKD: [0x1111, 0x1167, 0x11C1] }, +{ source: [0xD3CF], NFC: [0xD3CF], NFD: [0x1111, 0x1167, 0x11C2], NFKC: [0xD3CF], NFKD: [0x1111, 0x1167, 0x11C2] }, +{ source: [0xD3D0], NFC: [0xD3D0], NFD: [0x1111, 0x1168], NFKC: [0xD3D0], NFKD: [0x1111, 0x1168] }, +{ source: [0xD3D1], NFC: [0xD3D1], NFD: [0x1111, 0x1168, 0x11A8], NFKC: [0xD3D1], NFKD: [0x1111, 0x1168, 0x11A8] }, +{ source: [0xD3D2], NFC: [0xD3D2], NFD: [0x1111, 0x1168, 0x11A9], NFKC: [0xD3D2], NFKD: [0x1111, 0x1168, 0x11A9] }, +{ source: [0xD3D3], NFC: [0xD3D3], NFD: [0x1111, 0x1168, 0x11AA], NFKC: [0xD3D3], NFKD: [0x1111, 0x1168, 0x11AA] }, +{ source: [0xD3D4], NFC: [0xD3D4], NFD: [0x1111, 0x1168, 0x11AB], NFKC: [0xD3D4], NFKD: [0x1111, 0x1168, 0x11AB] }, +{ source: [0xD3D5], NFC: [0xD3D5], NFD: [0x1111, 0x1168, 0x11AC], NFKC: [0xD3D5], NFKD: [0x1111, 0x1168, 0x11AC] }, +{ source: [0xD3D6], NFC: [0xD3D6], NFD: [0x1111, 0x1168, 0x11AD], NFKC: [0xD3D6], NFKD: [0x1111, 0x1168, 0x11AD] }, +{ source: [0xD3D7], NFC: [0xD3D7], NFD: [0x1111, 0x1168, 0x11AE], NFKC: [0xD3D7], NFKD: [0x1111, 0x1168, 0x11AE] }, +{ source: [0xD3D8], NFC: [0xD3D8], NFD: [0x1111, 0x1168, 0x11AF], NFKC: [0xD3D8], NFKD: [0x1111, 0x1168, 0x11AF] }, +{ source: [0xD3D9], NFC: [0xD3D9], NFD: [0x1111, 0x1168, 0x11B0], NFKC: [0xD3D9], NFKD: [0x1111, 0x1168, 0x11B0] }, +{ source: [0xD3DA], NFC: [0xD3DA], NFD: [0x1111, 0x1168, 0x11B1], NFKC: [0xD3DA], NFKD: [0x1111, 0x1168, 0x11B1] }, +{ source: [0xD3DB], NFC: [0xD3DB], NFD: [0x1111, 0x1168, 0x11B2], NFKC: [0xD3DB], NFKD: [0x1111, 0x1168, 0x11B2] }, +{ source: [0xD3DC], NFC: [0xD3DC], NFD: [0x1111, 0x1168, 0x11B3], NFKC: [0xD3DC], NFKD: [0x1111, 0x1168, 0x11B3] }, +{ source: [0xD3DD], NFC: [0xD3DD], NFD: [0x1111, 0x1168, 0x11B4], NFKC: [0xD3DD], NFKD: [0x1111, 0x1168, 0x11B4] }, +{ source: [0xD3DE], NFC: [0xD3DE], NFD: [0x1111, 0x1168, 0x11B5], NFKC: [0xD3DE], NFKD: [0x1111, 0x1168, 0x11B5] }, +{ source: [0xD3DF], NFC: [0xD3DF], NFD: [0x1111, 0x1168, 0x11B6], NFKC: [0xD3DF], NFKD: [0x1111, 0x1168, 0x11B6] }, +{ source: [0xD3E0], NFC: [0xD3E0], NFD: [0x1111, 0x1168, 0x11B7], NFKC: [0xD3E0], NFKD: [0x1111, 0x1168, 0x11B7] }, +{ source: [0xD3E1], NFC: [0xD3E1], NFD: [0x1111, 0x1168, 0x11B8], NFKC: [0xD3E1], NFKD: [0x1111, 0x1168, 0x11B8] }, +{ source: [0xD3E2], NFC: [0xD3E2], NFD: [0x1111, 0x1168, 0x11B9], NFKC: [0xD3E2], NFKD: [0x1111, 0x1168, 0x11B9] }, +{ source: [0xD3E3], NFC: [0xD3E3], NFD: [0x1111, 0x1168, 0x11BA], NFKC: [0xD3E3], NFKD: [0x1111, 0x1168, 0x11BA] }, +{ source: [0xD3E4], NFC: [0xD3E4], NFD: [0x1111, 0x1168, 0x11BB], NFKC: [0xD3E4], NFKD: [0x1111, 0x1168, 0x11BB] }, +{ source: [0xD3E5], NFC: [0xD3E5], NFD: [0x1111, 0x1168, 0x11BC], NFKC: [0xD3E5], NFKD: [0x1111, 0x1168, 0x11BC] }, +{ source: [0xD3E6], NFC: [0xD3E6], NFD: [0x1111, 0x1168, 0x11BD], NFKC: [0xD3E6], NFKD: [0x1111, 0x1168, 0x11BD] }, +{ source: [0xD3E7], NFC: [0xD3E7], NFD: [0x1111, 0x1168, 0x11BE], NFKC: [0xD3E7], NFKD: [0x1111, 0x1168, 0x11BE] }, +{ source: [0xD3E8], NFC: [0xD3E8], NFD: [0x1111, 0x1168, 0x11BF], NFKC: [0xD3E8], NFKD: [0x1111, 0x1168, 0x11BF] }, +{ source: [0xD3E9], NFC: [0xD3E9], NFD: [0x1111, 0x1168, 0x11C0], NFKC: [0xD3E9], NFKD: [0x1111, 0x1168, 0x11C0] }, +{ source: [0xD3EA], NFC: [0xD3EA], NFD: [0x1111, 0x1168, 0x11C1], NFKC: [0xD3EA], NFKD: [0x1111, 0x1168, 0x11C1] }, +{ source: [0xD3EB], NFC: [0xD3EB], NFD: [0x1111, 0x1168, 0x11C2], NFKC: [0xD3EB], NFKD: [0x1111, 0x1168, 0x11C2] }, +{ source: [0xD3EC], NFC: [0xD3EC], NFD: [0x1111, 0x1169], NFKC: [0xD3EC], NFKD: [0x1111, 0x1169] }, +{ source: [0xD3ED], NFC: [0xD3ED], NFD: [0x1111, 0x1169, 0x11A8], NFKC: [0xD3ED], NFKD: [0x1111, 0x1169, 0x11A8] }, +{ source: [0xD3EE], NFC: [0xD3EE], NFD: [0x1111, 0x1169, 0x11A9], NFKC: [0xD3EE], NFKD: [0x1111, 0x1169, 0x11A9] }, +{ source: [0xD3EF], NFC: [0xD3EF], NFD: [0x1111, 0x1169, 0x11AA], NFKC: [0xD3EF], NFKD: [0x1111, 0x1169, 0x11AA] }, +{ source: [0xD3F0], NFC: [0xD3F0], NFD: [0x1111, 0x1169, 0x11AB], NFKC: [0xD3F0], NFKD: [0x1111, 0x1169, 0x11AB] }, +{ source: [0xD3F1], NFC: [0xD3F1], NFD: [0x1111, 0x1169, 0x11AC], NFKC: [0xD3F1], NFKD: [0x1111, 0x1169, 0x11AC] }, +{ source: [0xD3F2], NFC: [0xD3F2], NFD: [0x1111, 0x1169, 0x11AD], NFKC: [0xD3F2], NFKD: [0x1111, 0x1169, 0x11AD] }, +{ source: [0xD3F3], NFC: [0xD3F3], NFD: [0x1111, 0x1169, 0x11AE], NFKC: [0xD3F3], NFKD: [0x1111, 0x1169, 0x11AE] }, +{ source: [0xD3F4], NFC: [0xD3F4], NFD: [0x1111, 0x1169, 0x11AF], NFKC: [0xD3F4], NFKD: [0x1111, 0x1169, 0x11AF] }, +{ source: [0xD3F5], NFC: [0xD3F5], NFD: [0x1111, 0x1169, 0x11B0], NFKC: [0xD3F5], NFKD: [0x1111, 0x1169, 0x11B0] }, +{ source: [0xD3F6], NFC: [0xD3F6], NFD: [0x1111, 0x1169, 0x11B1], NFKC: [0xD3F6], NFKD: [0x1111, 0x1169, 0x11B1] }, +{ source: [0xD3F7], NFC: [0xD3F7], NFD: [0x1111, 0x1169, 0x11B2], NFKC: [0xD3F7], NFKD: [0x1111, 0x1169, 0x11B2] }, +{ source: [0xD3F8], NFC: [0xD3F8], NFD: [0x1111, 0x1169, 0x11B3], NFKC: [0xD3F8], NFKD: [0x1111, 0x1169, 0x11B3] }, +{ source: [0xD3F9], NFC: [0xD3F9], NFD: [0x1111, 0x1169, 0x11B4], NFKC: [0xD3F9], NFKD: [0x1111, 0x1169, 0x11B4] }, +{ source: [0xD3FA], NFC: [0xD3FA], NFD: [0x1111, 0x1169, 0x11B5], NFKC: [0xD3FA], NFKD: [0x1111, 0x1169, 0x11B5] }, +{ source: [0xD3FB], NFC: [0xD3FB], NFD: [0x1111, 0x1169, 0x11B6], NFKC: [0xD3FB], NFKD: [0x1111, 0x1169, 0x11B6] }, +{ source: [0xD3FC], NFC: [0xD3FC], NFD: [0x1111, 0x1169, 0x11B7], NFKC: [0xD3FC], NFKD: [0x1111, 0x1169, 0x11B7] }, +{ source: [0xD3FD], NFC: [0xD3FD], NFD: [0x1111, 0x1169, 0x11B8], NFKC: [0xD3FD], NFKD: [0x1111, 0x1169, 0x11B8] }, +{ source: [0xD3FE], NFC: [0xD3FE], NFD: [0x1111, 0x1169, 0x11B9], NFKC: [0xD3FE], NFKD: [0x1111, 0x1169, 0x11B9] }, +{ source: [0xD3FF], NFC: [0xD3FF], NFD: [0x1111, 0x1169, 0x11BA], NFKC: [0xD3FF], NFKD: [0x1111, 0x1169, 0x11BA] }, +{ source: [0xD400], NFC: [0xD400], NFD: [0x1111, 0x1169, 0x11BB], NFKC: [0xD400], NFKD: [0x1111, 0x1169, 0x11BB] }, +{ source: [0xD401], NFC: [0xD401], NFD: [0x1111, 0x1169, 0x11BC], NFKC: [0xD401], NFKD: [0x1111, 0x1169, 0x11BC] }, +{ source: [0xD402], NFC: [0xD402], NFD: [0x1111, 0x1169, 0x11BD], NFKC: [0xD402], NFKD: [0x1111, 0x1169, 0x11BD] }, +{ source: [0xD403], NFC: [0xD403], NFD: [0x1111, 0x1169, 0x11BE], NFKC: [0xD403], NFKD: [0x1111, 0x1169, 0x11BE] }, +{ source: [0xD404], NFC: [0xD404], NFD: [0x1111, 0x1169, 0x11BF], NFKC: [0xD404], NFKD: [0x1111, 0x1169, 0x11BF] }, +{ source: [0xD405], NFC: [0xD405], NFD: [0x1111, 0x1169, 0x11C0], NFKC: [0xD405], NFKD: [0x1111, 0x1169, 0x11C0] }, +{ source: [0xD406], NFC: [0xD406], NFD: [0x1111, 0x1169, 0x11C1], NFKC: [0xD406], NFKD: [0x1111, 0x1169, 0x11C1] }, +{ source: [0xD407], NFC: [0xD407], NFD: [0x1111, 0x1169, 0x11C2], NFKC: [0xD407], NFKD: [0x1111, 0x1169, 0x11C2] }, +{ source: [0xD408], NFC: [0xD408], NFD: [0x1111, 0x116A], NFKC: [0xD408], NFKD: [0x1111, 0x116A] }, +{ source: [0xD409], NFC: [0xD409], NFD: [0x1111, 0x116A, 0x11A8], NFKC: [0xD409], NFKD: [0x1111, 0x116A, 0x11A8] }, +{ source: [0xD40A], NFC: [0xD40A], NFD: [0x1111, 0x116A, 0x11A9], NFKC: [0xD40A], NFKD: [0x1111, 0x116A, 0x11A9] }, +{ source: [0xD40B], NFC: [0xD40B], NFD: [0x1111, 0x116A, 0x11AA], NFKC: [0xD40B], NFKD: [0x1111, 0x116A, 0x11AA] }, +{ source: [0xD40C], NFC: [0xD40C], NFD: [0x1111, 0x116A, 0x11AB], NFKC: [0xD40C], NFKD: [0x1111, 0x116A, 0x11AB] }, +{ source: [0xD40D], NFC: [0xD40D], NFD: [0x1111, 0x116A, 0x11AC], NFKC: [0xD40D], NFKD: [0x1111, 0x116A, 0x11AC] }, +{ source: [0xD40E], NFC: [0xD40E], NFD: [0x1111, 0x116A, 0x11AD], NFKC: [0xD40E], NFKD: [0x1111, 0x116A, 0x11AD] }, +{ source: [0xD40F], NFC: [0xD40F], NFD: [0x1111, 0x116A, 0x11AE], NFKC: [0xD40F], NFKD: [0x1111, 0x116A, 0x11AE] }, +{ source: [0xD410], NFC: [0xD410], NFD: [0x1111, 0x116A, 0x11AF], NFKC: [0xD410], NFKD: [0x1111, 0x116A, 0x11AF] }, +{ source: [0xD411], NFC: [0xD411], NFD: [0x1111, 0x116A, 0x11B0], NFKC: [0xD411], NFKD: [0x1111, 0x116A, 0x11B0] }, +{ source: [0xD412], NFC: [0xD412], NFD: [0x1111, 0x116A, 0x11B1], NFKC: [0xD412], NFKD: [0x1111, 0x116A, 0x11B1] }, +{ source: [0xD413], NFC: [0xD413], NFD: [0x1111, 0x116A, 0x11B2], NFKC: [0xD413], NFKD: [0x1111, 0x116A, 0x11B2] }, +{ source: [0xD414], NFC: [0xD414], NFD: [0x1111, 0x116A, 0x11B3], NFKC: [0xD414], NFKD: [0x1111, 0x116A, 0x11B3] }, +{ source: [0xD415], NFC: [0xD415], NFD: [0x1111, 0x116A, 0x11B4], NFKC: [0xD415], NFKD: [0x1111, 0x116A, 0x11B4] }, +{ source: [0xD416], NFC: [0xD416], NFD: [0x1111, 0x116A, 0x11B5], NFKC: [0xD416], NFKD: [0x1111, 0x116A, 0x11B5] }, +{ source: [0xD417], NFC: [0xD417], NFD: [0x1111, 0x116A, 0x11B6], NFKC: [0xD417], NFKD: [0x1111, 0x116A, 0x11B6] }, +{ source: [0xD418], NFC: [0xD418], NFD: [0x1111, 0x116A, 0x11B7], NFKC: [0xD418], NFKD: [0x1111, 0x116A, 0x11B7] }, +{ source: [0xD419], NFC: [0xD419], NFD: [0x1111, 0x116A, 0x11B8], NFKC: [0xD419], NFKD: [0x1111, 0x116A, 0x11B8] }, +{ source: [0xD41A], NFC: [0xD41A], NFD: [0x1111, 0x116A, 0x11B9], NFKC: [0xD41A], NFKD: [0x1111, 0x116A, 0x11B9] }, +{ source: [0xD41B], NFC: [0xD41B], NFD: [0x1111, 0x116A, 0x11BA], NFKC: [0xD41B], NFKD: [0x1111, 0x116A, 0x11BA] }, +{ source: [0xD41C], NFC: [0xD41C], NFD: [0x1111, 0x116A, 0x11BB], NFKC: [0xD41C], NFKD: [0x1111, 0x116A, 0x11BB] }, +{ source: [0xD41D], NFC: [0xD41D], NFD: [0x1111, 0x116A, 0x11BC], NFKC: [0xD41D], NFKD: [0x1111, 0x116A, 0x11BC] }, +{ source: [0xD41E], NFC: [0xD41E], NFD: [0x1111, 0x116A, 0x11BD], NFKC: [0xD41E], NFKD: [0x1111, 0x116A, 0x11BD] }, +{ source: [0xD41F], NFC: [0xD41F], NFD: [0x1111, 0x116A, 0x11BE], NFKC: [0xD41F], NFKD: [0x1111, 0x116A, 0x11BE] }, +{ source: [0xD420], NFC: [0xD420], NFD: [0x1111, 0x116A, 0x11BF], NFKC: [0xD420], NFKD: [0x1111, 0x116A, 0x11BF] }, +{ source: [0xD421], NFC: [0xD421], NFD: [0x1111, 0x116A, 0x11C0], NFKC: [0xD421], NFKD: [0x1111, 0x116A, 0x11C0] }, +{ source: [0xD422], NFC: [0xD422], NFD: [0x1111, 0x116A, 0x11C1], NFKC: [0xD422], NFKD: [0x1111, 0x116A, 0x11C1] }, +{ source: [0xD423], NFC: [0xD423], NFD: [0x1111, 0x116A, 0x11C2], NFKC: [0xD423], NFKD: [0x1111, 0x116A, 0x11C2] }, +{ source: [0xD424], NFC: [0xD424], NFD: [0x1111, 0x116B], NFKC: [0xD424], NFKD: [0x1111, 0x116B] }, +{ source: [0xD425], NFC: [0xD425], NFD: [0x1111, 0x116B, 0x11A8], NFKC: [0xD425], NFKD: [0x1111, 0x116B, 0x11A8] }, +{ source: [0xD426], NFC: [0xD426], NFD: [0x1111, 0x116B, 0x11A9], NFKC: [0xD426], NFKD: [0x1111, 0x116B, 0x11A9] }, +{ source: [0xD427], NFC: [0xD427], NFD: [0x1111, 0x116B, 0x11AA], NFKC: [0xD427], NFKD: [0x1111, 0x116B, 0x11AA] }, +{ source: [0xD428], NFC: [0xD428], NFD: [0x1111, 0x116B, 0x11AB], NFKC: [0xD428], NFKD: [0x1111, 0x116B, 0x11AB] }, +{ source: [0xD429], NFC: [0xD429], NFD: [0x1111, 0x116B, 0x11AC], NFKC: [0xD429], NFKD: [0x1111, 0x116B, 0x11AC] }, +{ source: [0xD42A], NFC: [0xD42A], NFD: [0x1111, 0x116B, 0x11AD], NFKC: [0xD42A], NFKD: [0x1111, 0x116B, 0x11AD] }, +{ source: [0xD42B], NFC: [0xD42B], NFD: [0x1111, 0x116B, 0x11AE], NFKC: [0xD42B], NFKD: [0x1111, 0x116B, 0x11AE] }, +{ source: [0xD42C], NFC: [0xD42C], NFD: [0x1111, 0x116B, 0x11AF], NFKC: [0xD42C], NFKD: [0x1111, 0x116B, 0x11AF] }, +{ source: [0xD42D], NFC: [0xD42D], NFD: [0x1111, 0x116B, 0x11B0], NFKC: [0xD42D], NFKD: [0x1111, 0x116B, 0x11B0] }, +{ source: [0xD42E], NFC: [0xD42E], NFD: [0x1111, 0x116B, 0x11B1], NFKC: [0xD42E], NFKD: [0x1111, 0x116B, 0x11B1] }, +{ source: [0xD42F], NFC: [0xD42F], NFD: [0x1111, 0x116B, 0x11B2], NFKC: [0xD42F], NFKD: [0x1111, 0x116B, 0x11B2] }, +{ source: [0xD430], NFC: [0xD430], NFD: [0x1111, 0x116B, 0x11B3], NFKC: [0xD430], NFKD: [0x1111, 0x116B, 0x11B3] }, +{ source: [0xD431], NFC: [0xD431], NFD: [0x1111, 0x116B, 0x11B4], NFKC: [0xD431], NFKD: [0x1111, 0x116B, 0x11B4] }, +{ source: [0xD432], NFC: [0xD432], NFD: [0x1111, 0x116B, 0x11B5], NFKC: [0xD432], NFKD: [0x1111, 0x116B, 0x11B5] }, +{ source: [0xD433], NFC: [0xD433], NFD: [0x1111, 0x116B, 0x11B6], NFKC: [0xD433], NFKD: [0x1111, 0x116B, 0x11B6] }, +{ source: [0xD434], NFC: [0xD434], NFD: [0x1111, 0x116B, 0x11B7], NFKC: [0xD434], NFKD: [0x1111, 0x116B, 0x11B7] }, +{ source: [0xD435], NFC: [0xD435], NFD: [0x1111, 0x116B, 0x11B8], NFKC: [0xD435], NFKD: [0x1111, 0x116B, 0x11B8] }, +{ source: [0xD436], NFC: [0xD436], NFD: [0x1111, 0x116B, 0x11B9], NFKC: [0xD436], NFKD: [0x1111, 0x116B, 0x11B9] }, +{ source: [0xD437], NFC: [0xD437], NFD: [0x1111, 0x116B, 0x11BA], NFKC: [0xD437], NFKD: [0x1111, 0x116B, 0x11BA] }, +{ source: [0xD438], NFC: [0xD438], NFD: [0x1111, 0x116B, 0x11BB], NFKC: [0xD438], NFKD: [0x1111, 0x116B, 0x11BB] }, +{ source: [0xD439], NFC: [0xD439], NFD: [0x1111, 0x116B, 0x11BC], NFKC: [0xD439], NFKD: [0x1111, 0x116B, 0x11BC] }, +{ source: [0xD43A], NFC: [0xD43A], NFD: [0x1111, 0x116B, 0x11BD], NFKC: [0xD43A], NFKD: [0x1111, 0x116B, 0x11BD] }, +{ source: [0xD43B], NFC: [0xD43B], NFD: [0x1111, 0x116B, 0x11BE], NFKC: [0xD43B], NFKD: [0x1111, 0x116B, 0x11BE] }, +{ source: [0xD43C], NFC: [0xD43C], NFD: [0x1111, 0x116B, 0x11BF], NFKC: [0xD43C], NFKD: [0x1111, 0x116B, 0x11BF] }, +{ source: [0xD43D], NFC: [0xD43D], NFD: [0x1111, 0x116B, 0x11C0], NFKC: [0xD43D], NFKD: [0x1111, 0x116B, 0x11C0] }, +{ source: [0xD43E], NFC: [0xD43E], NFD: [0x1111, 0x116B, 0x11C1], NFKC: [0xD43E], NFKD: [0x1111, 0x116B, 0x11C1] }, +{ source: [0xD43F], NFC: [0xD43F], NFD: [0x1111, 0x116B, 0x11C2], NFKC: [0xD43F], NFKD: [0x1111, 0x116B, 0x11C2] }, +{ source: [0xD440], NFC: [0xD440], NFD: [0x1111, 0x116C], NFKC: [0xD440], NFKD: [0x1111, 0x116C] }, +{ source: [0xD441], NFC: [0xD441], NFD: [0x1111, 0x116C, 0x11A8], NFKC: [0xD441], NFKD: [0x1111, 0x116C, 0x11A8] }, +{ source: [0xD442], NFC: [0xD442], NFD: [0x1111, 0x116C, 0x11A9], NFKC: [0xD442], NFKD: [0x1111, 0x116C, 0x11A9] }, +{ source: [0xD443], NFC: [0xD443], NFD: [0x1111, 0x116C, 0x11AA], NFKC: [0xD443], NFKD: [0x1111, 0x116C, 0x11AA] }, +{ source: [0xD444], NFC: [0xD444], NFD: [0x1111, 0x116C, 0x11AB], NFKC: [0xD444], NFKD: [0x1111, 0x116C, 0x11AB] }, +{ source: [0xD445], NFC: [0xD445], NFD: [0x1111, 0x116C, 0x11AC], NFKC: [0xD445], NFKD: [0x1111, 0x116C, 0x11AC] }, +{ source: [0xD446], NFC: [0xD446], NFD: [0x1111, 0x116C, 0x11AD], NFKC: [0xD446], NFKD: [0x1111, 0x116C, 0x11AD] }, +{ source: [0xD447], NFC: [0xD447], NFD: [0x1111, 0x116C, 0x11AE], NFKC: [0xD447], NFKD: [0x1111, 0x116C, 0x11AE] }, +{ source: [0xD448], NFC: [0xD448], NFD: [0x1111, 0x116C, 0x11AF], NFKC: [0xD448], NFKD: [0x1111, 0x116C, 0x11AF] }, +{ source: [0xD449], NFC: [0xD449], NFD: [0x1111, 0x116C, 0x11B0], NFKC: [0xD449], NFKD: [0x1111, 0x116C, 0x11B0] }, +{ source: [0xD44A], NFC: [0xD44A], NFD: [0x1111, 0x116C, 0x11B1], NFKC: [0xD44A], NFKD: [0x1111, 0x116C, 0x11B1] }, +{ source: [0xD44B], NFC: [0xD44B], NFD: [0x1111, 0x116C, 0x11B2], NFKC: [0xD44B], NFKD: [0x1111, 0x116C, 0x11B2] }, +{ source: [0xD44C], NFC: [0xD44C], NFD: [0x1111, 0x116C, 0x11B3], NFKC: [0xD44C], NFKD: [0x1111, 0x116C, 0x11B3] }, +{ source: [0xD44D], NFC: [0xD44D], NFD: [0x1111, 0x116C, 0x11B4], NFKC: [0xD44D], NFKD: [0x1111, 0x116C, 0x11B4] }, +{ source: [0xD44E], NFC: [0xD44E], NFD: [0x1111, 0x116C, 0x11B5], NFKC: [0xD44E], NFKD: [0x1111, 0x116C, 0x11B5] }, +{ source: [0xD44F], NFC: [0xD44F], NFD: [0x1111, 0x116C, 0x11B6], NFKC: [0xD44F], NFKD: [0x1111, 0x116C, 0x11B6] }, +{ source: [0xD450], NFC: [0xD450], NFD: [0x1111, 0x116C, 0x11B7], NFKC: [0xD450], NFKD: [0x1111, 0x116C, 0x11B7] }, +{ source: [0xD451], NFC: [0xD451], NFD: [0x1111, 0x116C, 0x11B8], NFKC: [0xD451], NFKD: [0x1111, 0x116C, 0x11B8] }, +{ source: [0xD452], NFC: [0xD452], NFD: [0x1111, 0x116C, 0x11B9], NFKC: [0xD452], NFKD: [0x1111, 0x116C, 0x11B9] }, +{ source: [0xD453], NFC: [0xD453], NFD: [0x1111, 0x116C, 0x11BA], NFKC: [0xD453], NFKD: [0x1111, 0x116C, 0x11BA] }, +{ source: [0xD454], NFC: [0xD454], NFD: [0x1111, 0x116C, 0x11BB], NFKC: [0xD454], NFKD: [0x1111, 0x116C, 0x11BB] }, +{ source: [0xD455], NFC: [0xD455], NFD: [0x1111, 0x116C, 0x11BC], NFKC: [0xD455], NFKD: [0x1111, 0x116C, 0x11BC] }, +{ source: [0xD456], NFC: [0xD456], NFD: [0x1111, 0x116C, 0x11BD], NFKC: [0xD456], NFKD: [0x1111, 0x116C, 0x11BD] }, +{ source: [0xD457], NFC: [0xD457], NFD: [0x1111, 0x116C, 0x11BE], NFKC: [0xD457], NFKD: [0x1111, 0x116C, 0x11BE] }, +{ source: [0xD458], NFC: [0xD458], NFD: [0x1111, 0x116C, 0x11BF], NFKC: [0xD458], NFKD: [0x1111, 0x116C, 0x11BF] }, +{ source: [0xD459], NFC: [0xD459], NFD: [0x1111, 0x116C, 0x11C0], NFKC: [0xD459], NFKD: [0x1111, 0x116C, 0x11C0] }, +{ source: [0xD45A], NFC: [0xD45A], NFD: [0x1111, 0x116C, 0x11C1], NFKC: [0xD45A], NFKD: [0x1111, 0x116C, 0x11C1] }, +{ source: [0xD45B], NFC: [0xD45B], NFD: [0x1111, 0x116C, 0x11C2], NFKC: [0xD45B], NFKD: [0x1111, 0x116C, 0x11C2] }, +{ source: [0xD45C], NFC: [0xD45C], NFD: [0x1111, 0x116D], NFKC: [0xD45C], NFKD: [0x1111, 0x116D] }, +{ source: [0xD45D], NFC: [0xD45D], NFD: [0x1111, 0x116D, 0x11A8], NFKC: [0xD45D], NFKD: [0x1111, 0x116D, 0x11A8] }, +{ source: [0xD45E], NFC: [0xD45E], NFD: [0x1111, 0x116D, 0x11A9], NFKC: [0xD45E], NFKD: [0x1111, 0x116D, 0x11A9] }, +{ source: [0xD45F], NFC: [0xD45F], NFD: [0x1111, 0x116D, 0x11AA], NFKC: [0xD45F], NFKD: [0x1111, 0x116D, 0x11AA] }, +{ source: [0xD460], NFC: [0xD460], NFD: [0x1111, 0x116D, 0x11AB], NFKC: [0xD460], NFKD: [0x1111, 0x116D, 0x11AB] }, +{ source: [0xD461], NFC: [0xD461], NFD: [0x1111, 0x116D, 0x11AC], NFKC: [0xD461], NFKD: [0x1111, 0x116D, 0x11AC] }, +{ source: [0xD462], NFC: [0xD462], NFD: [0x1111, 0x116D, 0x11AD], NFKC: [0xD462], NFKD: [0x1111, 0x116D, 0x11AD] }, +{ source: [0xD463], NFC: [0xD463], NFD: [0x1111, 0x116D, 0x11AE], NFKC: [0xD463], NFKD: [0x1111, 0x116D, 0x11AE] }, +{ source: [0xD464], NFC: [0xD464], NFD: [0x1111, 0x116D, 0x11AF], NFKC: [0xD464], NFKD: [0x1111, 0x116D, 0x11AF] }, +{ source: [0xD465], NFC: [0xD465], NFD: [0x1111, 0x116D, 0x11B0], NFKC: [0xD465], NFKD: [0x1111, 0x116D, 0x11B0] }, +{ source: [0xD466], NFC: [0xD466], NFD: [0x1111, 0x116D, 0x11B1], NFKC: [0xD466], NFKD: [0x1111, 0x116D, 0x11B1] }, +{ source: [0xD467], NFC: [0xD467], NFD: [0x1111, 0x116D, 0x11B2], NFKC: [0xD467], NFKD: [0x1111, 0x116D, 0x11B2] }, +{ source: [0xD468], NFC: [0xD468], NFD: [0x1111, 0x116D, 0x11B3], NFKC: [0xD468], NFKD: [0x1111, 0x116D, 0x11B3] }, +{ source: [0xD469], NFC: [0xD469], NFD: [0x1111, 0x116D, 0x11B4], NFKC: [0xD469], NFKD: [0x1111, 0x116D, 0x11B4] }, +{ source: [0xD46A], NFC: [0xD46A], NFD: [0x1111, 0x116D, 0x11B5], NFKC: [0xD46A], NFKD: [0x1111, 0x116D, 0x11B5] }, +{ source: [0xD46B], NFC: [0xD46B], NFD: [0x1111, 0x116D, 0x11B6], NFKC: [0xD46B], NFKD: [0x1111, 0x116D, 0x11B6] }, +{ source: [0xD46C], NFC: [0xD46C], NFD: [0x1111, 0x116D, 0x11B7], NFKC: [0xD46C], NFKD: [0x1111, 0x116D, 0x11B7] }, +{ source: [0xD46D], NFC: [0xD46D], NFD: [0x1111, 0x116D, 0x11B8], NFKC: [0xD46D], NFKD: [0x1111, 0x116D, 0x11B8] }, +{ source: [0xD46E], NFC: [0xD46E], NFD: [0x1111, 0x116D, 0x11B9], NFKC: [0xD46E], NFKD: [0x1111, 0x116D, 0x11B9] }, +{ source: [0xD46F], NFC: [0xD46F], NFD: [0x1111, 0x116D, 0x11BA], NFKC: [0xD46F], NFKD: [0x1111, 0x116D, 0x11BA] }, +{ source: [0xD470], NFC: [0xD470], NFD: [0x1111, 0x116D, 0x11BB], NFKC: [0xD470], NFKD: [0x1111, 0x116D, 0x11BB] }, +{ source: [0xD471], NFC: [0xD471], NFD: [0x1111, 0x116D, 0x11BC], NFKC: [0xD471], NFKD: [0x1111, 0x116D, 0x11BC] }, +{ source: [0xD472], NFC: [0xD472], NFD: [0x1111, 0x116D, 0x11BD], NFKC: [0xD472], NFKD: [0x1111, 0x116D, 0x11BD] }, +{ source: [0xD473], NFC: [0xD473], NFD: [0x1111, 0x116D, 0x11BE], NFKC: [0xD473], NFKD: [0x1111, 0x116D, 0x11BE] }, +{ source: [0xD474], NFC: [0xD474], NFD: [0x1111, 0x116D, 0x11BF], NFKC: [0xD474], NFKD: [0x1111, 0x116D, 0x11BF] }, +{ source: [0xD475], NFC: [0xD475], NFD: [0x1111, 0x116D, 0x11C0], NFKC: [0xD475], NFKD: [0x1111, 0x116D, 0x11C0] }, +{ source: [0xD476], NFC: [0xD476], NFD: [0x1111, 0x116D, 0x11C1], NFKC: [0xD476], NFKD: [0x1111, 0x116D, 0x11C1] }, +{ source: [0xD477], NFC: [0xD477], NFD: [0x1111, 0x116D, 0x11C2], NFKC: [0xD477], NFKD: [0x1111, 0x116D, 0x11C2] }, +{ source: [0xD478], NFC: [0xD478], NFD: [0x1111, 0x116E], NFKC: [0xD478], NFKD: [0x1111, 0x116E] }, +{ source: [0xD479], NFC: [0xD479], NFD: [0x1111, 0x116E, 0x11A8], NFKC: [0xD479], NFKD: [0x1111, 0x116E, 0x11A8] }, +{ source: [0xD47A], NFC: [0xD47A], NFD: [0x1111, 0x116E, 0x11A9], NFKC: [0xD47A], NFKD: [0x1111, 0x116E, 0x11A9] }, +{ source: [0xD47B], NFC: [0xD47B], NFD: [0x1111, 0x116E, 0x11AA], NFKC: [0xD47B], NFKD: [0x1111, 0x116E, 0x11AA] }, +{ source: [0xD47C], NFC: [0xD47C], NFD: [0x1111, 0x116E, 0x11AB], NFKC: [0xD47C], NFKD: [0x1111, 0x116E, 0x11AB] }, +{ source: [0xD47D], NFC: [0xD47D], NFD: [0x1111, 0x116E, 0x11AC], NFKC: [0xD47D], NFKD: [0x1111, 0x116E, 0x11AC] }, +{ source: [0xD47E], NFC: [0xD47E], NFD: [0x1111, 0x116E, 0x11AD], NFKC: [0xD47E], NFKD: [0x1111, 0x116E, 0x11AD] }, +{ source: [0xD47F], NFC: [0xD47F], NFD: [0x1111, 0x116E, 0x11AE], NFKC: [0xD47F], NFKD: [0x1111, 0x116E, 0x11AE] }, +{ source: [0xD480], NFC: [0xD480], NFD: [0x1111, 0x116E, 0x11AF], NFKC: [0xD480], NFKD: [0x1111, 0x116E, 0x11AF] }, +{ source: [0xD481], NFC: [0xD481], NFD: [0x1111, 0x116E, 0x11B0], NFKC: [0xD481], NFKD: [0x1111, 0x116E, 0x11B0] }, +{ source: [0xD482], NFC: [0xD482], NFD: [0x1111, 0x116E, 0x11B1], NFKC: [0xD482], NFKD: [0x1111, 0x116E, 0x11B1] }, +{ source: [0xD483], NFC: [0xD483], NFD: [0x1111, 0x116E, 0x11B2], NFKC: [0xD483], NFKD: [0x1111, 0x116E, 0x11B2] }, +{ source: [0xD484], NFC: [0xD484], NFD: [0x1111, 0x116E, 0x11B3], NFKC: [0xD484], NFKD: [0x1111, 0x116E, 0x11B3] }, +{ source: [0xD485], NFC: [0xD485], NFD: [0x1111, 0x116E, 0x11B4], NFKC: [0xD485], NFKD: [0x1111, 0x116E, 0x11B4] }, +{ source: [0xD486], NFC: [0xD486], NFD: [0x1111, 0x116E, 0x11B5], NFKC: [0xD486], NFKD: [0x1111, 0x116E, 0x11B5] }, +{ source: [0xD487], NFC: [0xD487], NFD: [0x1111, 0x116E, 0x11B6], NFKC: [0xD487], NFKD: [0x1111, 0x116E, 0x11B6] }, +{ source: [0xD488], NFC: [0xD488], NFD: [0x1111, 0x116E, 0x11B7], NFKC: [0xD488], NFKD: [0x1111, 0x116E, 0x11B7] }, +{ source: [0xD489], NFC: [0xD489], NFD: [0x1111, 0x116E, 0x11B8], NFKC: [0xD489], NFKD: [0x1111, 0x116E, 0x11B8] }, +{ source: [0xD48A], NFC: [0xD48A], NFD: [0x1111, 0x116E, 0x11B9], NFKC: [0xD48A], NFKD: [0x1111, 0x116E, 0x11B9] }, +{ source: [0xD48B], NFC: [0xD48B], NFD: [0x1111, 0x116E, 0x11BA], NFKC: [0xD48B], NFKD: [0x1111, 0x116E, 0x11BA] }, +{ source: [0xD48C], NFC: [0xD48C], NFD: [0x1111, 0x116E, 0x11BB], NFKC: [0xD48C], NFKD: [0x1111, 0x116E, 0x11BB] }, +{ source: [0xD48D], NFC: [0xD48D], NFD: [0x1111, 0x116E, 0x11BC], NFKC: [0xD48D], NFKD: [0x1111, 0x116E, 0x11BC] }, +{ source: [0xD48E], NFC: [0xD48E], NFD: [0x1111, 0x116E, 0x11BD], NFKC: [0xD48E], NFKD: [0x1111, 0x116E, 0x11BD] }, +{ source: [0xD48F], NFC: [0xD48F], NFD: [0x1111, 0x116E, 0x11BE], NFKC: [0xD48F], NFKD: [0x1111, 0x116E, 0x11BE] }, +{ source: [0xD490], NFC: [0xD490], NFD: [0x1111, 0x116E, 0x11BF], NFKC: [0xD490], NFKD: [0x1111, 0x116E, 0x11BF] }, +{ source: [0xD491], NFC: [0xD491], NFD: [0x1111, 0x116E, 0x11C0], NFKC: [0xD491], NFKD: [0x1111, 0x116E, 0x11C0] }, +{ source: [0xD492], NFC: [0xD492], NFD: [0x1111, 0x116E, 0x11C1], NFKC: [0xD492], NFKD: [0x1111, 0x116E, 0x11C1] }, +{ source: [0xD493], NFC: [0xD493], NFD: [0x1111, 0x116E, 0x11C2], NFKC: [0xD493], NFKD: [0x1111, 0x116E, 0x11C2] }, +{ source: [0xD494], NFC: [0xD494], NFD: [0x1111, 0x116F], NFKC: [0xD494], NFKD: [0x1111, 0x116F] }, +{ source: [0xD495], NFC: [0xD495], NFD: [0x1111, 0x116F, 0x11A8], NFKC: [0xD495], NFKD: [0x1111, 0x116F, 0x11A8] }, +{ source: [0xD496], NFC: [0xD496], NFD: [0x1111, 0x116F, 0x11A9], NFKC: [0xD496], NFKD: [0x1111, 0x116F, 0x11A9] }, +{ source: [0xD497], NFC: [0xD497], NFD: [0x1111, 0x116F, 0x11AA], NFKC: [0xD497], NFKD: [0x1111, 0x116F, 0x11AA] }, +{ source: [0xD498], NFC: [0xD498], NFD: [0x1111, 0x116F, 0x11AB], NFKC: [0xD498], NFKD: [0x1111, 0x116F, 0x11AB] }, +{ source: [0xD499], NFC: [0xD499], NFD: [0x1111, 0x116F, 0x11AC], NFKC: [0xD499], NFKD: [0x1111, 0x116F, 0x11AC] }, +{ source: [0xD49A], NFC: [0xD49A], NFD: [0x1111, 0x116F, 0x11AD], NFKC: [0xD49A], NFKD: [0x1111, 0x116F, 0x11AD] }, +{ source: [0xD49B], NFC: [0xD49B], NFD: [0x1111, 0x116F, 0x11AE], NFKC: [0xD49B], NFKD: [0x1111, 0x116F, 0x11AE] }, +{ source: [0xD49C], NFC: [0xD49C], NFD: [0x1111, 0x116F, 0x11AF], NFKC: [0xD49C], NFKD: [0x1111, 0x116F, 0x11AF] }, +{ source: [0xD49D], NFC: [0xD49D], NFD: [0x1111, 0x116F, 0x11B0], NFKC: [0xD49D], NFKD: [0x1111, 0x116F, 0x11B0] }, +{ source: [0xD49E], NFC: [0xD49E], NFD: [0x1111, 0x116F, 0x11B1], NFKC: [0xD49E], NFKD: [0x1111, 0x116F, 0x11B1] }, +{ source: [0xD49F], NFC: [0xD49F], NFD: [0x1111, 0x116F, 0x11B2], NFKC: [0xD49F], NFKD: [0x1111, 0x116F, 0x11B2] }, +{ source: [0xD4A0], NFC: [0xD4A0], NFD: [0x1111, 0x116F, 0x11B3], NFKC: [0xD4A0], NFKD: [0x1111, 0x116F, 0x11B3] }, +{ source: [0xD4A1], NFC: [0xD4A1], NFD: [0x1111, 0x116F, 0x11B4], NFKC: [0xD4A1], NFKD: [0x1111, 0x116F, 0x11B4] }, +{ source: [0xD4A2], NFC: [0xD4A2], NFD: [0x1111, 0x116F, 0x11B5], NFKC: [0xD4A2], NFKD: [0x1111, 0x116F, 0x11B5] }, +{ source: [0xD4A3], NFC: [0xD4A3], NFD: [0x1111, 0x116F, 0x11B6], NFKC: [0xD4A3], NFKD: [0x1111, 0x116F, 0x11B6] }, +{ source: [0xD4A4], NFC: [0xD4A4], NFD: [0x1111, 0x116F, 0x11B7], NFKC: [0xD4A4], NFKD: [0x1111, 0x116F, 0x11B7] }, +{ source: [0xD4A5], NFC: [0xD4A5], NFD: [0x1111, 0x116F, 0x11B8], NFKC: [0xD4A5], NFKD: [0x1111, 0x116F, 0x11B8] }, +{ source: [0xD4A6], NFC: [0xD4A6], NFD: [0x1111, 0x116F, 0x11B9], NFKC: [0xD4A6], NFKD: [0x1111, 0x116F, 0x11B9] }, +{ source: [0xD4A7], NFC: [0xD4A7], NFD: [0x1111, 0x116F, 0x11BA], NFKC: [0xD4A7], NFKD: [0x1111, 0x116F, 0x11BA] }, +{ source: [0xD4A8], NFC: [0xD4A8], NFD: [0x1111, 0x116F, 0x11BB], NFKC: [0xD4A8], NFKD: [0x1111, 0x116F, 0x11BB] }, +{ source: [0xD4A9], NFC: [0xD4A9], NFD: [0x1111, 0x116F, 0x11BC], NFKC: [0xD4A9], NFKD: [0x1111, 0x116F, 0x11BC] }, +{ source: [0xD4AA], NFC: [0xD4AA], NFD: [0x1111, 0x116F, 0x11BD], NFKC: [0xD4AA], NFKD: [0x1111, 0x116F, 0x11BD] }, +{ source: [0xD4AB], NFC: [0xD4AB], NFD: [0x1111, 0x116F, 0x11BE], NFKC: [0xD4AB], NFKD: [0x1111, 0x116F, 0x11BE] }, +{ source: [0xD4AC], NFC: [0xD4AC], NFD: [0x1111, 0x116F, 0x11BF], NFKC: [0xD4AC], NFKD: [0x1111, 0x116F, 0x11BF] }, +{ source: [0xD4AD], NFC: [0xD4AD], NFD: [0x1111, 0x116F, 0x11C0], NFKC: [0xD4AD], NFKD: [0x1111, 0x116F, 0x11C0] }, +{ source: [0xD4AE], NFC: [0xD4AE], NFD: [0x1111, 0x116F, 0x11C1], NFKC: [0xD4AE], NFKD: [0x1111, 0x116F, 0x11C1] }, +{ source: [0xD4AF], NFC: [0xD4AF], NFD: [0x1111, 0x116F, 0x11C2], NFKC: [0xD4AF], NFKD: [0x1111, 0x116F, 0x11C2] }, +{ source: [0xD4B0], NFC: [0xD4B0], NFD: [0x1111, 0x1170], NFKC: [0xD4B0], NFKD: [0x1111, 0x1170] }, +{ source: [0xD4B1], NFC: [0xD4B1], NFD: [0x1111, 0x1170, 0x11A8], NFKC: [0xD4B1], NFKD: [0x1111, 0x1170, 0x11A8] }, +{ source: [0xD4B2], NFC: [0xD4B2], NFD: [0x1111, 0x1170, 0x11A9], NFKC: [0xD4B2], NFKD: [0x1111, 0x1170, 0x11A9] }, +{ source: [0xD4B3], NFC: [0xD4B3], NFD: [0x1111, 0x1170, 0x11AA], NFKC: [0xD4B3], NFKD: [0x1111, 0x1170, 0x11AA] }, +{ source: [0xD4B4], NFC: [0xD4B4], NFD: [0x1111, 0x1170, 0x11AB], NFKC: [0xD4B4], NFKD: [0x1111, 0x1170, 0x11AB] }, +{ source: [0xD4B5], NFC: [0xD4B5], NFD: [0x1111, 0x1170, 0x11AC], NFKC: [0xD4B5], NFKD: [0x1111, 0x1170, 0x11AC] }, +{ source: [0xD4B6], NFC: [0xD4B6], NFD: [0x1111, 0x1170, 0x11AD], NFKC: [0xD4B6], NFKD: [0x1111, 0x1170, 0x11AD] }, +{ source: [0xD4B7], NFC: [0xD4B7], NFD: [0x1111, 0x1170, 0x11AE], NFKC: [0xD4B7], NFKD: [0x1111, 0x1170, 0x11AE] }, +{ source: [0xD4B8], NFC: [0xD4B8], NFD: [0x1111, 0x1170, 0x11AF], NFKC: [0xD4B8], NFKD: [0x1111, 0x1170, 0x11AF] }, +{ source: [0xD4B9], NFC: [0xD4B9], NFD: [0x1111, 0x1170, 0x11B0], NFKC: [0xD4B9], NFKD: [0x1111, 0x1170, 0x11B0] }, +{ source: [0xD4BA], NFC: [0xD4BA], NFD: [0x1111, 0x1170, 0x11B1], NFKC: [0xD4BA], NFKD: [0x1111, 0x1170, 0x11B1] }, +{ source: [0xD4BB], NFC: [0xD4BB], NFD: [0x1111, 0x1170, 0x11B2], NFKC: [0xD4BB], NFKD: [0x1111, 0x1170, 0x11B2] }, +{ source: [0xD4BC], NFC: [0xD4BC], NFD: [0x1111, 0x1170, 0x11B3], NFKC: [0xD4BC], NFKD: [0x1111, 0x1170, 0x11B3] }, +{ source: [0xD4BD], NFC: [0xD4BD], NFD: [0x1111, 0x1170, 0x11B4], NFKC: [0xD4BD], NFKD: [0x1111, 0x1170, 0x11B4] }, +{ source: [0xD4BE], NFC: [0xD4BE], NFD: [0x1111, 0x1170, 0x11B5], NFKC: [0xD4BE], NFKD: [0x1111, 0x1170, 0x11B5] }, +{ source: [0xD4BF], NFC: [0xD4BF], NFD: [0x1111, 0x1170, 0x11B6], NFKC: [0xD4BF], NFKD: [0x1111, 0x1170, 0x11B6] }, +{ source: [0xD4C0], NFC: [0xD4C0], NFD: [0x1111, 0x1170, 0x11B7], NFKC: [0xD4C0], NFKD: [0x1111, 0x1170, 0x11B7] }, +{ source: [0xD4C1], NFC: [0xD4C1], NFD: [0x1111, 0x1170, 0x11B8], NFKC: [0xD4C1], NFKD: [0x1111, 0x1170, 0x11B8] }, +{ source: [0xD4C2], NFC: [0xD4C2], NFD: [0x1111, 0x1170, 0x11B9], NFKC: [0xD4C2], NFKD: [0x1111, 0x1170, 0x11B9] }, +{ source: [0xD4C3], NFC: [0xD4C3], NFD: [0x1111, 0x1170, 0x11BA], NFKC: [0xD4C3], NFKD: [0x1111, 0x1170, 0x11BA] }, +{ source: [0xD4C4], NFC: [0xD4C4], NFD: [0x1111, 0x1170, 0x11BB], NFKC: [0xD4C4], NFKD: [0x1111, 0x1170, 0x11BB] }, +{ source: [0xD4C5], NFC: [0xD4C5], NFD: [0x1111, 0x1170, 0x11BC], NFKC: [0xD4C5], NFKD: [0x1111, 0x1170, 0x11BC] }, +{ source: [0xD4C6], NFC: [0xD4C6], NFD: [0x1111, 0x1170, 0x11BD], NFKC: [0xD4C6], NFKD: [0x1111, 0x1170, 0x11BD] }, +{ source: [0xD4C7], NFC: [0xD4C7], NFD: [0x1111, 0x1170, 0x11BE], NFKC: [0xD4C7], NFKD: [0x1111, 0x1170, 0x11BE] }, +{ source: [0xD4C8], NFC: [0xD4C8], NFD: [0x1111, 0x1170, 0x11BF], NFKC: [0xD4C8], NFKD: [0x1111, 0x1170, 0x11BF] }, +{ source: [0xD4C9], NFC: [0xD4C9], NFD: [0x1111, 0x1170, 0x11C0], NFKC: [0xD4C9], NFKD: [0x1111, 0x1170, 0x11C0] }, +{ source: [0xD4CA], NFC: [0xD4CA], NFD: [0x1111, 0x1170, 0x11C1], NFKC: [0xD4CA], NFKD: [0x1111, 0x1170, 0x11C1] }, +{ source: [0xD4CB], NFC: [0xD4CB], NFD: [0x1111, 0x1170, 0x11C2], NFKC: [0xD4CB], NFKD: [0x1111, 0x1170, 0x11C2] }, +{ source: [0xD4CC], NFC: [0xD4CC], NFD: [0x1111, 0x1171], NFKC: [0xD4CC], NFKD: [0x1111, 0x1171] }, +{ source: [0xD4CD], NFC: [0xD4CD], NFD: [0x1111, 0x1171, 0x11A8], NFKC: [0xD4CD], NFKD: [0x1111, 0x1171, 0x11A8] }, +{ source: [0xD4CE], NFC: [0xD4CE], NFD: [0x1111, 0x1171, 0x11A9], NFKC: [0xD4CE], NFKD: [0x1111, 0x1171, 0x11A9] }, +{ source: [0xD4CF], NFC: [0xD4CF], NFD: [0x1111, 0x1171, 0x11AA], NFKC: [0xD4CF], NFKD: [0x1111, 0x1171, 0x11AA] }, +{ source: [0xD4D0], NFC: [0xD4D0], NFD: [0x1111, 0x1171, 0x11AB], NFKC: [0xD4D0], NFKD: [0x1111, 0x1171, 0x11AB] }, +{ source: [0xD4D1], NFC: [0xD4D1], NFD: [0x1111, 0x1171, 0x11AC], NFKC: [0xD4D1], NFKD: [0x1111, 0x1171, 0x11AC] }, +{ source: [0xD4D2], NFC: [0xD4D2], NFD: [0x1111, 0x1171, 0x11AD], NFKC: [0xD4D2], NFKD: [0x1111, 0x1171, 0x11AD] }, +{ source: [0xD4D3], NFC: [0xD4D3], NFD: [0x1111, 0x1171, 0x11AE], NFKC: [0xD4D3], NFKD: [0x1111, 0x1171, 0x11AE] }, +{ source: [0xD4D4], NFC: [0xD4D4], NFD: [0x1111, 0x1171, 0x11AF], NFKC: [0xD4D4], NFKD: [0x1111, 0x1171, 0x11AF] }, +{ source: [0xD4D5], NFC: [0xD4D5], NFD: [0x1111, 0x1171, 0x11B0], NFKC: [0xD4D5], NFKD: [0x1111, 0x1171, 0x11B0] }, +{ source: [0xD4D6], NFC: [0xD4D6], NFD: [0x1111, 0x1171, 0x11B1], NFKC: [0xD4D6], NFKD: [0x1111, 0x1171, 0x11B1] }, +{ source: [0xD4D7], NFC: [0xD4D7], NFD: [0x1111, 0x1171, 0x11B2], NFKC: [0xD4D7], NFKD: [0x1111, 0x1171, 0x11B2] }, +{ source: [0xD4D8], NFC: [0xD4D8], NFD: [0x1111, 0x1171, 0x11B3], NFKC: [0xD4D8], NFKD: [0x1111, 0x1171, 0x11B3] }, +{ source: [0xD4D9], NFC: [0xD4D9], NFD: [0x1111, 0x1171, 0x11B4], NFKC: [0xD4D9], NFKD: [0x1111, 0x1171, 0x11B4] }, +{ source: [0xD4DA], NFC: [0xD4DA], NFD: [0x1111, 0x1171, 0x11B5], NFKC: [0xD4DA], NFKD: [0x1111, 0x1171, 0x11B5] }, +{ source: [0xD4DB], NFC: [0xD4DB], NFD: [0x1111, 0x1171, 0x11B6], NFKC: [0xD4DB], NFKD: [0x1111, 0x1171, 0x11B6] }, +{ source: [0xD4DC], NFC: [0xD4DC], NFD: [0x1111, 0x1171, 0x11B7], NFKC: [0xD4DC], NFKD: [0x1111, 0x1171, 0x11B7] }, +{ source: [0xD4DD], NFC: [0xD4DD], NFD: [0x1111, 0x1171, 0x11B8], NFKC: [0xD4DD], NFKD: [0x1111, 0x1171, 0x11B8] }, +{ source: [0xD4DE], NFC: [0xD4DE], NFD: [0x1111, 0x1171, 0x11B9], NFKC: [0xD4DE], NFKD: [0x1111, 0x1171, 0x11B9] }, +{ source: [0xD4DF], NFC: [0xD4DF], NFD: [0x1111, 0x1171, 0x11BA], NFKC: [0xD4DF], NFKD: [0x1111, 0x1171, 0x11BA] }, +{ source: [0xD4E0], NFC: [0xD4E0], NFD: [0x1111, 0x1171, 0x11BB], NFKC: [0xD4E0], NFKD: [0x1111, 0x1171, 0x11BB] }, +{ source: [0xD4E1], NFC: [0xD4E1], NFD: [0x1111, 0x1171, 0x11BC], NFKC: [0xD4E1], NFKD: [0x1111, 0x1171, 0x11BC] }, +{ source: [0xD4E2], NFC: [0xD4E2], NFD: [0x1111, 0x1171, 0x11BD], NFKC: [0xD4E2], NFKD: [0x1111, 0x1171, 0x11BD] }, +{ source: [0xD4E3], NFC: [0xD4E3], NFD: [0x1111, 0x1171, 0x11BE], NFKC: [0xD4E3], NFKD: [0x1111, 0x1171, 0x11BE] }, +{ source: [0xD4E4], NFC: [0xD4E4], NFD: [0x1111, 0x1171, 0x11BF], NFKC: [0xD4E4], NFKD: [0x1111, 0x1171, 0x11BF] }, +{ source: [0xD4E5], NFC: [0xD4E5], NFD: [0x1111, 0x1171, 0x11C0], NFKC: [0xD4E5], NFKD: [0x1111, 0x1171, 0x11C0] }, +{ source: [0xD4E6], NFC: [0xD4E6], NFD: [0x1111, 0x1171, 0x11C1], NFKC: [0xD4E6], NFKD: [0x1111, 0x1171, 0x11C1] }, +{ source: [0xD4E7], NFC: [0xD4E7], NFD: [0x1111, 0x1171, 0x11C2], NFKC: [0xD4E7], NFKD: [0x1111, 0x1171, 0x11C2] }, +{ source: [0xD4E8], NFC: [0xD4E8], NFD: [0x1111, 0x1172], NFKC: [0xD4E8], NFKD: [0x1111, 0x1172] }, +{ source: [0xD4E9], NFC: [0xD4E9], NFD: [0x1111, 0x1172, 0x11A8], NFKC: [0xD4E9], NFKD: [0x1111, 0x1172, 0x11A8] }, +{ source: [0xD4EA], NFC: [0xD4EA], NFD: [0x1111, 0x1172, 0x11A9], NFKC: [0xD4EA], NFKD: [0x1111, 0x1172, 0x11A9] }, +{ source: [0xD4EB], NFC: [0xD4EB], NFD: [0x1111, 0x1172, 0x11AA], NFKC: [0xD4EB], NFKD: [0x1111, 0x1172, 0x11AA] }, +{ source: [0xD4EC], NFC: [0xD4EC], NFD: [0x1111, 0x1172, 0x11AB], NFKC: [0xD4EC], NFKD: [0x1111, 0x1172, 0x11AB] }, +{ source: [0xD4ED], NFC: [0xD4ED], NFD: [0x1111, 0x1172, 0x11AC], NFKC: [0xD4ED], NFKD: [0x1111, 0x1172, 0x11AC] }, +{ source: [0xD4EE], NFC: [0xD4EE], NFD: [0x1111, 0x1172, 0x11AD], NFKC: [0xD4EE], NFKD: [0x1111, 0x1172, 0x11AD] }, +{ source: [0xD4EF], NFC: [0xD4EF], NFD: [0x1111, 0x1172, 0x11AE], NFKC: [0xD4EF], NFKD: [0x1111, 0x1172, 0x11AE] }, +{ source: [0xD4F0], NFC: [0xD4F0], NFD: [0x1111, 0x1172, 0x11AF], NFKC: [0xD4F0], NFKD: [0x1111, 0x1172, 0x11AF] }, +{ source: [0xD4F1], NFC: [0xD4F1], NFD: [0x1111, 0x1172, 0x11B0], NFKC: [0xD4F1], NFKD: [0x1111, 0x1172, 0x11B0] }, +{ source: [0xD4F2], NFC: [0xD4F2], NFD: [0x1111, 0x1172, 0x11B1], NFKC: [0xD4F2], NFKD: [0x1111, 0x1172, 0x11B1] }, +{ source: [0xD4F3], NFC: [0xD4F3], NFD: [0x1111, 0x1172, 0x11B2], NFKC: [0xD4F3], NFKD: [0x1111, 0x1172, 0x11B2] }, +{ source: [0xD4F4], NFC: [0xD4F4], NFD: [0x1111, 0x1172, 0x11B3], NFKC: [0xD4F4], NFKD: [0x1111, 0x1172, 0x11B3] }, +{ source: [0xD4F5], NFC: [0xD4F5], NFD: [0x1111, 0x1172, 0x11B4], NFKC: [0xD4F5], NFKD: [0x1111, 0x1172, 0x11B4] }, +{ source: [0xD4F6], NFC: [0xD4F6], NFD: [0x1111, 0x1172, 0x11B5], NFKC: [0xD4F6], NFKD: [0x1111, 0x1172, 0x11B5] }, +{ source: [0xD4F7], NFC: [0xD4F7], NFD: [0x1111, 0x1172, 0x11B6], NFKC: [0xD4F7], NFKD: [0x1111, 0x1172, 0x11B6] }, +{ source: [0xD4F8], NFC: [0xD4F8], NFD: [0x1111, 0x1172, 0x11B7], NFKC: [0xD4F8], NFKD: [0x1111, 0x1172, 0x11B7] }, +{ source: [0xD4F9], NFC: [0xD4F9], NFD: [0x1111, 0x1172, 0x11B8], NFKC: [0xD4F9], NFKD: [0x1111, 0x1172, 0x11B8] }, +{ source: [0xD4FA], NFC: [0xD4FA], NFD: [0x1111, 0x1172, 0x11B9], NFKC: [0xD4FA], NFKD: [0x1111, 0x1172, 0x11B9] }, +{ source: [0xD4FB], NFC: [0xD4FB], NFD: [0x1111, 0x1172, 0x11BA], NFKC: [0xD4FB], NFKD: [0x1111, 0x1172, 0x11BA] }, +{ source: [0xD4FC], NFC: [0xD4FC], NFD: [0x1111, 0x1172, 0x11BB], NFKC: [0xD4FC], NFKD: [0x1111, 0x1172, 0x11BB] }, +{ source: [0xD4FD], NFC: [0xD4FD], NFD: [0x1111, 0x1172, 0x11BC], NFKC: [0xD4FD], NFKD: [0x1111, 0x1172, 0x11BC] }, +{ source: [0xD4FE], NFC: [0xD4FE], NFD: [0x1111, 0x1172, 0x11BD], NFKC: [0xD4FE], NFKD: [0x1111, 0x1172, 0x11BD] }, +{ source: [0xD4FF], NFC: [0xD4FF], NFD: [0x1111, 0x1172, 0x11BE], NFKC: [0xD4FF], NFKD: [0x1111, 0x1172, 0x11BE] }, +{ source: [0xD500], NFC: [0xD500], NFD: [0x1111, 0x1172, 0x11BF], NFKC: [0xD500], NFKD: [0x1111, 0x1172, 0x11BF] }, +{ source: [0xD501], NFC: [0xD501], NFD: [0x1111, 0x1172, 0x11C0], NFKC: [0xD501], NFKD: [0x1111, 0x1172, 0x11C0] }, +{ source: [0xD502], NFC: [0xD502], NFD: [0x1111, 0x1172, 0x11C1], NFKC: [0xD502], NFKD: [0x1111, 0x1172, 0x11C1] }, +{ source: [0xD503], NFC: [0xD503], NFD: [0x1111, 0x1172, 0x11C2], NFKC: [0xD503], NFKD: [0x1111, 0x1172, 0x11C2] }, +{ source: [0xD504], NFC: [0xD504], NFD: [0x1111, 0x1173], NFKC: [0xD504], NFKD: [0x1111, 0x1173] }, +{ source: [0xD505], NFC: [0xD505], NFD: [0x1111, 0x1173, 0x11A8], NFKC: [0xD505], NFKD: [0x1111, 0x1173, 0x11A8] }, +{ source: [0xD506], NFC: [0xD506], NFD: [0x1111, 0x1173, 0x11A9], NFKC: [0xD506], NFKD: [0x1111, 0x1173, 0x11A9] }, +{ source: [0xD507], NFC: [0xD507], NFD: [0x1111, 0x1173, 0x11AA], NFKC: [0xD507], NFKD: [0x1111, 0x1173, 0x11AA] }, +{ source: [0xD508], NFC: [0xD508], NFD: [0x1111, 0x1173, 0x11AB], NFKC: [0xD508], NFKD: [0x1111, 0x1173, 0x11AB] }, +{ source: [0xD509], NFC: [0xD509], NFD: [0x1111, 0x1173, 0x11AC], NFKC: [0xD509], NFKD: [0x1111, 0x1173, 0x11AC] }, +{ source: [0xD50A], NFC: [0xD50A], NFD: [0x1111, 0x1173, 0x11AD], NFKC: [0xD50A], NFKD: [0x1111, 0x1173, 0x11AD] }, +{ source: [0xD50B], NFC: [0xD50B], NFD: [0x1111, 0x1173, 0x11AE], NFKC: [0xD50B], NFKD: [0x1111, 0x1173, 0x11AE] }, +{ source: [0xD50C], NFC: [0xD50C], NFD: [0x1111, 0x1173, 0x11AF], NFKC: [0xD50C], NFKD: [0x1111, 0x1173, 0x11AF] }, +{ source: [0xD50D], NFC: [0xD50D], NFD: [0x1111, 0x1173, 0x11B0], NFKC: [0xD50D], NFKD: [0x1111, 0x1173, 0x11B0] }, +{ source: [0xD50E], NFC: [0xD50E], NFD: [0x1111, 0x1173, 0x11B1], NFKC: [0xD50E], NFKD: [0x1111, 0x1173, 0x11B1] }, +{ source: [0xD50F], NFC: [0xD50F], NFD: [0x1111, 0x1173, 0x11B2], NFKC: [0xD50F], NFKD: [0x1111, 0x1173, 0x11B2] }, +{ source: [0xD510], NFC: [0xD510], NFD: [0x1111, 0x1173, 0x11B3], NFKC: [0xD510], NFKD: [0x1111, 0x1173, 0x11B3] }, +{ source: [0xD511], NFC: [0xD511], NFD: [0x1111, 0x1173, 0x11B4], NFKC: [0xD511], NFKD: [0x1111, 0x1173, 0x11B4] }, +{ source: [0xD512], NFC: [0xD512], NFD: [0x1111, 0x1173, 0x11B5], NFKC: [0xD512], NFKD: [0x1111, 0x1173, 0x11B5] }, +{ source: [0xD513], NFC: [0xD513], NFD: [0x1111, 0x1173, 0x11B6], NFKC: [0xD513], NFKD: [0x1111, 0x1173, 0x11B6] }, +{ source: [0xD514], NFC: [0xD514], NFD: [0x1111, 0x1173, 0x11B7], NFKC: [0xD514], NFKD: [0x1111, 0x1173, 0x11B7] }, +{ source: [0xD515], NFC: [0xD515], NFD: [0x1111, 0x1173, 0x11B8], NFKC: [0xD515], NFKD: [0x1111, 0x1173, 0x11B8] }, +{ source: [0xD516], NFC: [0xD516], NFD: [0x1111, 0x1173, 0x11B9], NFKC: [0xD516], NFKD: [0x1111, 0x1173, 0x11B9] }, +{ source: [0xD517], NFC: [0xD517], NFD: [0x1111, 0x1173, 0x11BA], NFKC: [0xD517], NFKD: [0x1111, 0x1173, 0x11BA] }, +{ source: [0xD518], NFC: [0xD518], NFD: [0x1111, 0x1173, 0x11BB], NFKC: [0xD518], NFKD: [0x1111, 0x1173, 0x11BB] }, +{ source: [0xD519], NFC: [0xD519], NFD: [0x1111, 0x1173, 0x11BC], NFKC: [0xD519], NFKD: [0x1111, 0x1173, 0x11BC] }, +{ source: [0xD51A], NFC: [0xD51A], NFD: [0x1111, 0x1173, 0x11BD], NFKC: [0xD51A], NFKD: [0x1111, 0x1173, 0x11BD] }, +{ source: [0xD51B], NFC: [0xD51B], NFD: [0x1111, 0x1173, 0x11BE], NFKC: [0xD51B], NFKD: [0x1111, 0x1173, 0x11BE] }, +{ source: [0xD51C], NFC: [0xD51C], NFD: [0x1111, 0x1173, 0x11BF], NFKC: [0xD51C], NFKD: [0x1111, 0x1173, 0x11BF] }, +{ source: [0xD51D], NFC: [0xD51D], NFD: [0x1111, 0x1173, 0x11C0], NFKC: [0xD51D], NFKD: [0x1111, 0x1173, 0x11C0] }, +{ source: [0xD51E], NFC: [0xD51E], NFD: [0x1111, 0x1173, 0x11C1], NFKC: [0xD51E], NFKD: [0x1111, 0x1173, 0x11C1] }, +{ source: [0xD51F], NFC: [0xD51F], NFD: [0x1111, 0x1173, 0x11C2], NFKC: [0xD51F], NFKD: [0x1111, 0x1173, 0x11C2] }, +{ source: [0xD520], NFC: [0xD520], NFD: [0x1111, 0x1174], NFKC: [0xD520], NFKD: [0x1111, 0x1174] }, +{ source: [0xD521], NFC: [0xD521], NFD: [0x1111, 0x1174, 0x11A8], NFKC: [0xD521], NFKD: [0x1111, 0x1174, 0x11A8] }, +{ source: [0xD522], NFC: [0xD522], NFD: [0x1111, 0x1174, 0x11A9], NFKC: [0xD522], NFKD: [0x1111, 0x1174, 0x11A9] }, +{ source: [0xD523], NFC: [0xD523], NFD: [0x1111, 0x1174, 0x11AA], NFKC: [0xD523], NFKD: [0x1111, 0x1174, 0x11AA] }, +{ source: [0xD524], NFC: [0xD524], NFD: [0x1111, 0x1174, 0x11AB], NFKC: [0xD524], NFKD: [0x1111, 0x1174, 0x11AB] }, +{ source: [0xD525], NFC: [0xD525], NFD: [0x1111, 0x1174, 0x11AC], NFKC: [0xD525], NFKD: [0x1111, 0x1174, 0x11AC] }, +{ source: [0xD526], NFC: [0xD526], NFD: [0x1111, 0x1174, 0x11AD], NFKC: [0xD526], NFKD: [0x1111, 0x1174, 0x11AD] }, +{ source: [0xD527], NFC: [0xD527], NFD: [0x1111, 0x1174, 0x11AE], NFKC: [0xD527], NFKD: [0x1111, 0x1174, 0x11AE] }, +{ source: [0xD528], NFC: [0xD528], NFD: [0x1111, 0x1174, 0x11AF], NFKC: [0xD528], NFKD: [0x1111, 0x1174, 0x11AF] }, +{ source: [0xD529], NFC: [0xD529], NFD: [0x1111, 0x1174, 0x11B0], NFKC: [0xD529], NFKD: [0x1111, 0x1174, 0x11B0] }, +{ source: [0xD52A], NFC: [0xD52A], NFD: [0x1111, 0x1174, 0x11B1], NFKC: [0xD52A], NFKD: [0x1111, 0x1174, 0x11B1] }, +{ source: [0xD52B], NFC: [0xD52B], NFD: [0x1111, 0x1174, 0x11B2], NFKC: [0xD52B], NFKD: [0x1111, 0x1174, 0x11B2] }, +{ source: [0xD52C], NFC: [0xD52C], NFD: [0x1111, 0x1174, 0x11B3], NFKC: [0xD52C], NFKD: [0x1111, 0x1174, 0x11B3] }, +{ source: [0xD52D], NFC: [0xD52D], NFD: [0x1111, 0x1174, 0x11B4], NFKC: [0xD52D], NFKD: [0x1111, 0x1174, 0x11B4] }, +{ source: [0xD52E], NFC: [0xD52E], NFD: [0x1111, 0x1174, 0x11B5], NFKC: [0xD52E], NFKD: [0x1111, 0x1174, 0x11B5] }, +{ source: [0xD52F], NFC: [0xD52F], NFD: [0x1111, 0x1174, 0x11B6], NFKC: [0xD52F], NFKD: [0x1111, 0x1174, 0x11B6] }, +{ source: [0xD530], NFC: [0xD530], NFD: [0x1111, 0x1174, 0x11B7], NFKC: [0xD530], NFKD: [0x1111, 0x1174, 0x11B7] }, +{ source: [0xD531], NFC: [0xD531], NFD: [0x1111, 0x1174, 0x11B8], NFKC: [0xD531], NFKD: [0x1111, 0x1174, 0x11B8] }, +{ source: [0xD532], NFC: [0xD532], NFD: [0x1111, 0x1174, 0x11B9], NFKC: [0xD532], NFKD: [0x1111, 0x1174, 0x11B9] }, +{ source: [0xD533], NFC: [0xD533], NFD: [0x1111, 0x1174, 0x11BA], NFKC: [0xD533], NFKD: [0x1111, 0x1174, 0x11BA] }, +{ source: [0xD534], NFC: [0xD534], NFD: [0x1111, 0x1174, 0x11BB], NFKC: [0xD534], NFKD: [0x1111, 0x1174, 0x11BB] }, +{ source: [0xD535], NFC: [0xD535], NFD: [0x1111, 0x1174, 0x11BC], NFKC: [0xD535], NFKD: [0x1111, 0x1174, 0x11BC] }, +{ source: [0xD536], NFC: [0xD536], NFD: [0x1111, 0x1174, 0x11BD], NFKC: [0xD536], NFKD: [0x1111, 0x1174, 0x11BD] }, +{ source: [0xD537], NFC: [0xD537], NFD: [0x1111, 0x1174, 0x11BE], NFKC: [0xD537], NFKD: [0x1111, 0x1174, 0x11BE] }, +{ source: [0xD538], NFC: [0xD538], NFD: [0x1111, 0x1174, 0x11BF], NFKC: [0xD538], NFKD: [0x1111, 0x1174, 0x11BF] }, +{ source: [0xD539], NFC: [0xD539], NFD: [0x1111, 0x1174, 0x11C0], NFKC: [0xD539], NFKD: [0x1111, 0x1174, 0x11C0] }, +{ source: [0xD53A], NFC: [0xD53A], NFD: [0x1111, 0x1174, 0x11C1], NFKC: [0xD53A], NFKD: [0x1111, 0x1174, 0x11C1] }, +{ source: [0xD53B], NFC: [0xD53B], NFD: [0x1111, 0x1174, 0x11C2], NFKC: [0xD53B], NFKD: [0x1111, 0x1174, 0x11C2] }, +{ source: [0xD53C], NFC: [0xD53C], NFD: [0x1111, 0x1175], NFKC: [0xD53C], NFKD: [0x1111, 0x1175] }, +{ source: [0xD53D], NFC: [0xD53D], NFD: [0x1111, 0x1175, 0x11A8], NFKC: [0xD53D], NFKD: [0x1111, 0x1175, 0x11A8] }, +{ source: [0xD53E], NFC: [0xD53E], NFD: [0x1111, 0x1175, 0x11A9], NFKC: [0xD53E], NFKD: [0x1111, 0x1175, 0x11A9] }, +{ source: [0xD53F], NFC: [0xD53F], NFD: [0x1111, 0x1175, 0x11AA], NFKC: [0xD53F], NFKD: [0x1111, 0x1175, 0x11AA] }, +{ source: [0xD540], NFC: [0xD540], NFD: [0x1111, 0x1175, 0x11AB], NFKC: [0xD540], NFKD: [0x1111, 0x1175, 0x11AB] }, +{ source: [0xD541], NFC: [0xD541], NFD: [0x1111, 0x1175, 0x11AC], NFKC: [0xD541], NFKD: [0x1111, 0x1175, 0x11AC] }, +{ source: [0xD542], NFC: [0xD542], NFD: [0x1111, 0x1175, 0x11AD], NFKC: [0xD542], NFKD: [0x1111, 0x1175, 0x11AD] }, +{ source: [0xD543], NFC: [0xD543], NFD: [0x1111, 0x1175, 0x11AE], NFKC: [0xD543], NFKD: [0x1111, 0x1175, 0x11AE] }, +{ source: [0xD544], NFC: [0xD544], NFD: [0x1111, 0x1175, 0x11AF], NFKC: [0xD544], NFKD: [0x1111, 0x1175, 0x11AF] }, +{ source: [0xD545], NFC: [0xD545], NFD: [0x1111, 0x1175, 0x11B0], NFKC: [0xD545], NFKD: [0x1111, 0x1175, 0x11B0] }, +{ source: [0xD546], NFC: [0xD546], NFD: [0x1111, 0x1175, 0x11B1], NFKC: [0xD546], NFKD: [0x1111, 0x1175, 0x11B1] }, +{ source: [0xD547], NFC: [0xD547], NFD: [0x1111, 0x1175, 0x11B2], NFKC: [0xD547], NFKD: [0x1111, 0x1175, 0x11B2] }, +{ source: [0xD548], NFC: [0xD548], NFD: [0x1111, 0x1175, 0x11B3], NFKC: [0xD548], NFKD: [0x1111, 0x1175, 0x11B3] }, +{ source: [0xD549], NFC: [0xD549], NFD: [0x1111, 0x1175, 0x11B4], NFKC: [0xD549], NFKD: [0x1111, 0x1175, 0x11B4] }, +{ source: [0xD54A], NFC: [0xD54A], NFD: [0x1111, 0x1175, 0x11B5], NFKC: [0xD54A], NFKD: [0x1111, 0x1175, 0x11B5] }, +{ source: [0xD54B], NFC: [0xD54B], NFD: [0x1111, 0x1175, 0x11B6], NFKC: [0xD54B], NFKD: [0x1111, 0x1175, 0x11B6] }, +{ source: [0xD54C], NFC: [0xD54C], NFD: [0x1111, 0x1175, 0x11B7], NFKC: [0xD54C], NFKD: [0x1111, 0x1175, 0x11B7] }, +{ source: [0xD54D], NFC: [0xD54D], NFD: [0x1111, 0x1175, 0x11B8], NFKC: [0xD54D], NFKD: [0x1111, 0x1175, 0x11B8] }, +{ source: [0xD54E], NFC: [0xD54E], NFD: [0x1111, 0x1175, 0x11B9], NFKC: [0xD54E], NFKD: [0x1111, 0x1175, 0x11B9] }, +{ source: [0xD54F], NFC: [0xD54F], NFD: [0x1111, 0x1175, 0x11BA], NFKC: [0xD54F], NFKD: [0x1111, 0x1175, 0x11BA] }, +{ source: [0xD550], NFC: [0xD550], NFD: [0x1111, 0x1175, 0x11BB], NFKC: [0xD550], NFKD: [0x1111, 0x1175, 0x11BB] }, +{ source: [0xD551], NFC: [0xD551], NFD: [0x1111, 0x1175, 0x11BC], NFKC: [0xD551], NFKD: [0x1111, 0x1175, 0x11BC] }, +{ source: [0xD552], NFC: [0xD552], NFD: [0x1111, 0x1175, 0x11BD], NFKC: [0xD552], NFKD: [0x1111, 0x1175, 0x11BD] }, +{ source: [0xD553], NFC: [0xD553], NFD: [0x1111, 0x1175, 0x11BE], NFKC: [0xD553], NFKD: [0x1111, 0x1175, 0x11BE] }, +{ source: [0xD554], NFC: [0xD554], NFD: [0x1111, 0x1175, 0x11BF], NFKC: [0xD554], NFKD: [0x1111, 0x1175, 0x11BF] }, +{ source: [0xD555], NFC: [0xD555], NFD: [0x1111, 0x1175, 0x11C0], NFKC: [0xD555], NFKD: [0x1111, 0x1175, 0x11C0] }, +{ source: [0xD556], NFC: [0xD556], NFD: [0x1111, 0x1175, 0x11C1], NFKC: [0xD556], NFKD: [0x1111, 0x1175, 0x11C1] }, +{ source: [0xD557], NFC: [0xD557], NFD: [0x1111, 0x1175, 0x11C2], NFKC: [0xD557], NFKD: [0x1111, 0x1175, 0x11C2] }, +{ source: [0xD558], NFC: [0xD558], NFD: [0x1112, 0x1161], NFKC: [0xD558], NFKD: [0x1112, 0x1161] }, +{ source: [0xD559], NFC: [0xD559], NFD: [0x1112, 0x1161, 0x11A8], NFKC: [0xD559], NFKD: [0x1112, 0x1161, 0x11A8] }, +{ source: [0xD55A], NFC: [0xD55A], NFD: [0x1112, 0x1161, 0x11A9], NFKC: [0xD55A], NFKD: [0x1112, 0x1161, 0x11A9] }, +{ source: [0xD55B], NFC: [0xD55B], NFD: [0x1112, 0x1161, 0x11AA], NFKC: [0xD55B], NFKD: [0x1112, 0x1161, 0x11AA] }, +{ source: [0xD55C], NFC: [0xD55C], NFD: [0x1112, 0x1161, 0x11AB], NFKC: [0xD55C], NFKD: [0x1112, 0x1161, 0x11AB] }, +{ source: [0xD55D], NFC: [0xD55D], NFD: [0x1112, 0x1161, 0x11AC], NFKC: [0xD55D], NFKD: [0x1112, 0x1161, 0x11AC] }, +{ source: [0xD55E], NFC: [0xD55E], NFD: [0x1112, 0x1161, 0x11AD], NFKC: [0xD55E], NFKD: [0x1112, 0x1161, 0x11AD] }, +{ source: [0xD55F], NFC: [0xD55F], NFD: [0x1112, 0x1161, 0x11AE], NFKC: [0xD55F], NFKD: [0x1112, 0x1161, 0x11AE] }, +{ source: [0xD560], NFC: [0xD560], NFD: [0x1112, 0x1161, 0x11AF], NFKC: [0xD560], NFKD: [0x1112, 0x1161, 0x11AF] }, +{ source: [0xD561], NFC: [0xD561], NFD: [0x1112, 0x1161, 0x11B0], NFKC: [0xD561], NFKD: [0x1112, 0x1161, 0x11B0] }, +{ source: [0xD562], NFC: [0xD562], NFD: [0x1112, 0x1161, 0x11B1], NFKC: [0xD562], NFKD: [0x1112, 0x1161, 0x11B1] }, +{ source: [0xD563], NFC: [0xD563], NFD: [0x1112, 0x1161, 0x11B2], NFKC: [0xD563], NFKD: [0x1112, 0x1161, 0x11B2] }, +{ source: [0xD564], NFC: [0xD564], NFD: [0x1112, 0x1161, 0x11B3], NFKC: [0xD564], NFKD: [0x1112, 0x1161, 0x11B3] }, +{ source: [0xD565], NFC: [0xD565], NFD: [0x1112, 0x1161, 0x11B4], NFKC: [0xD565], NFKD: [0x1112, 0x1161, 0x11B4] }, +{ source: [0xD566], NFC: [0xD566], NFD: [0x1112, 0x1161, 0x11B5], NFKC: [0xD566], NFKD: [0x1112, 0x1161, 0x11B5] }, +{ source: [0xD567], NFC: [0xD567], NFD: [0x1112, 0x1161, 0x11B6], NFKC: [0xD567], NFKD: [0x1112, 0x1161, 0x11B6] }, +{ source: [0xD568], NFC: [0xD568], NFD: [0x1112, 0x1161, 0x11B7], NFKC: [0xD568], NFKD: [0x1112, 0x1161, 0x11B7] }, +{ source: [0xD569], NFC: [0xD569], NFD: [0x1112, 0x1161, 0x11B8], NFKC: [0xD569], NFKD: [0x1112, 0x1161, 0x11B8] }, +{ source: [0xD56A], NFC: [0xD56A], NFD: [0x1112, 0x1161, 0x11B9], NFKC: [0xD56A], NFKD: [0x1112, 0x1161, 0x11B9] }, +{ source: [0xD56B], NFC: [0xD56B], NFD: [0x1112, 0x1161, 0x11BA], NFKC: [0xD56B], NFKD: [0x1112, 0x1161, 0x11BA] }, +{ source: [0xD56C], NFC: [0xD56C], NFD: [0x1112, 0x1161, 0x11BB], NFKC: [0xD56C], NFKD: [0x1112, 0x1161, 0x11BB] }, +{ source: [0xD56D], NFC: [0xD56D], NFD: [0x1112, 0x1161, 0x11BC], NFKC: [0xD56D], NFKD: [0x1112, 0x1161, 0x11BC] }, +{ source: [0xD56E], NFC: [0xD56E], NFD: [0x1112, 0x1161, 0x11BD], NFKC: [0xD56E], NFKD: [0x1112, 0x1161, 0x11BD] }, +{ source: [0xD56F], NFC: [0xD56F], NFD: [0x1112, 0x1161, 0x11BE], NFKC: [0xD56F], NFKD: [0x1112, 0x1161, 0x11BE] }, +{ source: [0xD570], NFC: [0xD570], NFD: [0x1112, 0x1161, 0x11BF], NFKC: [0xD570], NFKD: [0x1112, 0x1161, 0x11BF] }, +{ source: [0xD571], NFC: [0xD571], NFD: [0x1112, 0x1161, 0x11C0], NFKC: [0xD571], NFKD: [0x1112, 0x1161, 0x11C0] }, +{ source: [0xD572], NFC: [0xD572], NFD: [0x1112, 0x1161, 0x11C1], NFKC: [0xD572], NFKD: [0x1112, 0x1161, 0x11C1] }, +{ source: [0xD573], NFC: [0xD573], NFD: [0x1112, 0x1161, 0x11C2], NFKC: [0xD573], NFKD: [0x1112, 0x1161, 0x11C2] }, +{ source: [0xD574], NFC: [0xD574], NFD: [0x1112, 0x1162], NFKC: [0xD574], NFKD: [0x1112, 0x1162] }, +{ source: [0xD575], NFC: [0xD575], NFD: [0x1112, 0x1162, 0x11A8], NFKC: [0xD575], NFKD: [0x1112, 0x1162, 0x11A8] }, +{ source: [0xD576], NFC: [0xD576], NFD: [0x1112, 0x1162, 0x11A9], NFKC: [0xD576], NFKD: [0x1112, 0x1162, 0x11A9] }, +{ source: [0xD577], NFC: [0xD577], NFD: [0x1112, 0x1162, 0x11AA], NFKC: [0xD577], NFKD: [0x1112, 0x1162, 0x11AA] }, +{ source: [0xD578], NFC: [0xD578], NFD: [0x1112, 0x1162, 0x11AB], NFKC: [0xD578], NFKD: [0x1112, 0x1162, 0x11AB] }, +{ source: [0xD579], NFC: [0xD579], NFD: [0x1112, 0x1162, 0x11AC], NFKC: [0xD579], NFKD: [0x1112, 0x1162, 0x11AC] }, +{ source: [0xD57A], NFC: [0xD57A], NFD: [0x1112, 0x1162, 0x11AD], NFKC: [0xD57A], NFKD: [0x1112, 0x1162, 0x11AD] }, +{ source: [0xD57B], NFC: [0xD57B], NFD: [0x1112, 0x1162, 0x11AE], NFKC: [0xD57B], NFKD: [0x1112, 0x1162, 0x11AE] }, +{ source: [0xD57C], NFC: [0xD57C], NFD: [0x1112, 0x1162, 0x11AF], NFKC: [0xD57C], NFKD: [0x1112, 0x1162, 0x11AF] }, +{ source: [0xD57D], NFC: [0xD57D], NFD: [0x1112, 0x1162, 0x11B0], NFKC: [0xD57D], NFKD: [0x1112, 0x1162, 0x11B0] }, +{ source: [0xD57E], NFC: [0xD57E], NFD: [0x1112, 0x1162, 0x11B1], NFKC: [0xD57E], NFKD: [0x1112, 0x1162, 0x11B1] }, +{ source: [0xD57F], NFC: [0xD57F], NFD: [0x1112, 0x1162, 0x11B2], NFKC: [0xD57F], NFKD: [0x1112, 0x1162, 0x11B2] }, +{ source: [0xD580], NFC: [0xD580], NFD: [0x1112, 0x1162, 0x11B3], NFKC: [0xD580], NFKD: [0x1112, 0x1162, 0x11B3] }, +{ source: [0xD581], NFC: [0xD581], NFD: [0x1112, 0x1162, 0x11B4], NFKC: [0xD581], NFKD: [0x1112, 0x1162, 0x11B4] }, +{ source: [0xD582], NFC: [0xD582], NFD: [0x1112, 0x1162, 0x11B5], NFKC: [0xD582], NFKD: [0x1112, 0x1162, 0x11B5] }, +{ source: [0xD583], NFC: [0xD583], NFD: [0x1112, 0x1162, 0x11B6], NFKC: [0xD583], NFKD: [0x1112, 0x1162, 0x11B6] }, +{ source: [0xD584], NFC: [0xD584], NFD: [0x1112, 0x1162, 0x11B7], NFKC: [0xD584], NFKD: [0x1112, 0x1162, 0x11B7] }, +{ source: [0xD585], NFC: [0xD585], NFD: [0x1112, 0x1162, 0x11B8], NFKC: [0xD585], NFKD: [0x1112, 0x1162, 0x11B8] }, +{ source: [0xD586], NFC: [0xD586], NFD: [0x1112, 0x1162, 0x11B9], NFKC: [0xD586], NFKD: [0x1112, 0x1162, 0x11B9] }, +{ source: [0xD587], NFC: [0xD587], NFD: [0x1112, 0x1162, 0x11BA], NFKC: [0xD587], NFKD: [0x1112, 0x1162, 0x11BA] }, +{ source: [0xD588], NFC: [0xD588], NFD: [0x1112, 0x1162, 0x11BB], NFKC: [0xD588], NFKD: [0x1112, 0x1162, 0x11BB] }, +{ source: [0xD589], NFC: [0xD589], NFD: [0x1112, 0x1162, 0x11BC], NFKC: [0xD589], NFKD: [0x1112, 0x1162, 0x11BC] }, +{ source: [0xD58A], NFC: [0xD58A], NFD: [0x1112, 0x1162, 0x11BD], NFKC: [0xD58A], NFKD: [0x1112, 0x1162, 0x11BD] }, +{ source: [0xD58B], NFC: [0xD58B], NFD: [0x1112, 0x1162, 0x11BE], NFKC: [0xD58B], NFKD: [0x1112, 0x1162, 0x11BE] }, +{ source: [0xD58C], NFC: [0xD58C], NFD: [0x1112, 0x1162, 0x11BF], NFKC: [0xD58C], NFKD: [0x1112, 0x1162, 0x11BF] }, +{ source: [0xD58D], NFC: [0xD58D], NFD: [0x1112, 0x1162, 0x11C0], NFKC: [0xD58D], NFKD: [0x1112, 0x1162, 0x11C0] }, +{ source: [0xD58E], NFC: [0xD58E], NFD: [0x1112, 0x1162, 0x11C1], NFKC: [0xD58E], NFKD: [0x1112, 0x1162, 0x11C1] }, +{ source: [0xD58F], NFC: [0xD58F], NFD: [0x1112, 0x1162, 0x11C2], NFKC: [0xD58F], NFKD: [0x1112, 0x1162, 0x11C2] }, +{ source: [0xD590], NFC: [0xD590], NFD: [0x1112, 0x1163], NFKC: [0xD590], NFKD: [0x1112, 0x1163] }, +{ source: [0xD591], NFC: [0xD591], NFD: [0x1112, 0x1163, 0x11A8], NFKC: [0xD591], NFKD: [0x1112, 0x1163, 0x11A8] }, +{ source: [0xD592], NFC: [0xD592], NFD: [0x1112, 0x1163, 0x11A9], NFKC: [0xD592], NFKD: [0x1112, 0x1163, 0x11A9] }, +{ source: [0xD593], NFC: [0xD593], NFD: [0x1112, 0x1163, 0x11AA], NFKC: [0xD593], NFKD: [0x1112, 0x1163, 0x11AA] }, +{ source: [0xD594], NFC: [0xD594], NFD: [0x1112, 0x1163, 0x11AB], NFKC: [0xD594], NFKD: [0x1112, 0x1163, 0x11AB] }, +{ source: [0xD595], NFC: [0xD595], NFD: [0x1112, 0x1163, 0x11AC], NFKC: [0xD595], NFKD: [0x1112, 0x1163, 0x11AC] }, +{ source: [0xD596], NFC: [0xD596], NFD: [0x1112, 0x1163, 0x11AD], NFKC: [0xD596], NFKD: [0x1112, 0x1163, 0x11AD] }, +{ source: [0xD597], NFC: [0xD597], NFD: [0x1112, 0x1163, 0x11AE], NFKC: [0xD597], NFKD: [0x1112, 0x1163, 0x11AE] }, +{ source: [0xD598], NFC: [0xD598], NFD: [0x1112, 0x1163, 0x11AF], NFKC: [0xD598], NFKD: [0x1112, 0x1163, 0x11AF] }, +{ source: [0xD599], NFC: [0xD599], NFD: [0x1112, 0x1163, 0x11B0], NFKC: [0xD599], NFKD: [0x1112, 0x1163, 0x11B0] }, +{ source: [0xD59A], NFC: [0xD59A], NFD: [0x1112, 0x1163, 0x11B1], NFKC: [0xD59A], NFKD: [0x1112, 0x1163, 0x11B1] }, +{ source: [0xD59B], NFC: [0xD59B], NFD: [0x1112, 0x1163, 0x11B2], NFKC: [0xD59B], NFKD: [0x1112, 0x1163, 0x11B2] }, +{ source: [0xD59C], NFC: [0xD59C], NFD: [0x1112, 0x1163, 0x11B3], NFKC: [0xD59C], NFKD: [0x1112, 0x1163, 0x11B3] }, +{ source: [0xD59D], NFC: [0xD59D], NFD: [0x1112, 0x1163, 0x11B4], NFKC: [0xD59D], NFKD: [0x1112, 0x1163, 0x11B4] }, +{ source: [0xD59E], NFC: [0xD59E], NFD: [0x1112, 0x1163, 0x11B5], NFKC: [0xD59E], NFKD: [0x1112, 0x1163, 0x11B5] }, +{ source: [0xD59F], NFC: [0xD59F], NFD: [0x1112, 0x1163, 0x11B6], NFKC: [0xD59F], NFKD: [0x1112, 0x1163, 0x11B6] }, +{ source: [0xD5A0], NFC: [0xD5A0], NFD: [0x1112, 0x1163, 0x11B7], NFKC: [0xD5A0], NFKD: [0x1112, 0x1163, 0x11B7] }, +{ source: [0xD5A1], NFC: [0xD5A1], NFD: [0x1112, 0x1163, 0x11B8], NFKC: [0xD5A1], NFKD: [0x1112, 0x1163, 0x11B8] }, +{ source: [0xD5A2], NFC: [0xD5A2], NFD: [0x1112, 0x1163, 0x11B9], NFKC: [0xD5A2], NFKD: [0x1112, 0x1163, 0x11B9] }, +{ source: [0xD5A3], NFC: [0xD5A3], NFD: [0x1112, 0x1163, 0x11BA], NFKC: [0xD5A3], NFKD: [0x1112, 0x1163, 0x11BA] }, +{ source: [0xD5A4], NFC: [0xD5A4], NFD: [0x1112, 0x1163, 0x11BB], NFKC: [0xD5A4], NFKD: [0x1112, 0x1163, 0x11BB] }, +{ source: [0xD5A5], NFC: [0xD5A5], NFD: [0x1112, 0x1163, 0x11BC], NFKC: [0xD5A5], NFKD: [0x1112, 0x1163, 0x11BC] }, +{ source: [0xD5A6], NFC: [0xD5A6], NFD: [0x1112, 0x1163, 0x11BD], NFKC: [0xD5A6], NFKD: [0x1112, 0x1163, 0x11BD] }, +{ source: [0xD5A7], NFC: [0xD5A7], NFD: [0x1112, 0x1163, 0x11BE], NFKC: [0xD5A7], NFKD: [0x1112, 0x1163, 0x11BE] }, +{ source: [0xD5A8], NFC: [0xD5A8], NFD: [0x1112, 0x1163, 0x11BF], NFKC: [0xD5A8], NFKD: [0x1112, 0x1163, 0x11BF] }, +{ source: [0xD5A9], NFC: [0xD5A9], NFD: [0x1112, 0x1163, 0x11C0], NFKC: [0xD5A9], NFKD: [0x1112, 0x1163, 0x11C0] }, +{ source: [0xD5AA], NFC: [0xD5AA], NFD: [0x1112, 0x1163, 0x11C1], NFKC: [0xD5AA], NFKD: [0x1112, 0x1163, 0x11C1] }, +{ source: [0xD5AB], NFC: [0xD5AB], NFD: [0x1112, 0x1163, 0x11C2], NFKC: [0xD5AB], NFKD: [0x1112, 0x1163, 0x11C2] }, +{ source: [0xD5AC], NFC: [0xD5AC], NFD: [0x1112, 0x1164], NFKC: [0xD5AC], NFKD: [0x1112, 0x1164] }, +{ source: [0xD5AD], NFC: [0xD5AD], NFD: [0x1112, 0x1164, 0x11A8], NFKC: [0xD5AD], NFKD: [0x1112, 0x1164, 0x11A8] }, +{ source: [0xD5AE], NFC: [0xD5AE], NFD: [0x1112, 0x1164, 0x11A9], NFKC: [0xD5AE], NFKD: [0x1112, 0x1164, 0x11A9] }, +{ source: [0xD5AF], NFC: [0xD5AF], NFD: [0x1112, 0x1164, 0x11AA], NFKC: [0xD5AF], NFKD: [0x1112, 0x1164, 0x11AA] }, +{ source: [0xD5B0], NFC: [0xD5B0], NFD: [0x1112, 0x1164, 0x11AB], NFKC: [0xD5B0], NFKD: [0x1112, 0x1164, 0x11AB] }, +{ source: [0xD5B1], NFC: [0xD5B1], NFD: [0x1112, 0x1164, 0x11AC], NFKC: [0xD5B1], NFKD: [0x1112, 0x1164, 0x11AC] }, +{ source: [0xD5B2], NFC: [0xD5B2], NFD: [0x1112, 0x1164, 0x11AD], NFKC: [0xD5B2], NFKD: [0x1112, 0x1164, 0x11AD] }, +{ source: [0xD5B3], NFC: [0xD5B3], NFD: [0x1112, 0x1164, 0x11AE], NFKC: [0xD5B3], NFKD: [0x1112, 0x1164, 0x11AE] }, +{ source: [0xD5B4], NFC: [0xD5B4], NFD: [0x1112, 0x1164, 0x11AF], NFKC: [0xD5B4], NFKD: [0x1112, 0x1164, 0x11AF] }, +{ source: [0xD5B5], NFC: [0xD5B5], NFD: [0x1112, 0x1164, 0x11B0], NFKC: [0xD5B5], NFKD: [0x1112, 0x1164, 0x11B0] }, +{ source: [0xD5B6], NFC: [0xD5B6], NFD: [0x1112, 0x1164, 0x11B1], NFKC: [0xD5B6], NFKD: [0x1112, 0x1164, 0x11B1] }, +{ source: [0xD5B7], NFC: [0xD5B7], NFD: [0x1112, 0x1164, 0x11B2], NFKC: [0xD5B7], NFKD: [0x1112, 0x1164, 0x11B2] }, +{ source: [0xD5B8], NFC: [0xD5B8], NFD: [0x1112, 0x1164, 0x11B3], NFKC: [0xD5B8], NFKD: [0x1112, 0x1164, 0x11B3] }, +{ source: [0xD5B9], NFC: [0xD5B9], NFD: [0x1112, 0x1164, 0x11B4], NFKC: [0xD5B9], NFKD: [0x1112, 0x1164, 0x11B4] }, +{ source: [0xD5BA], NFC: [0xD5BA], NFD: [0x1112, 0x1164, 0x11B5], NFKC: [0xD5BA], NFKD: [0x1112, 0x1164, 0x11B5] }, +{ source: [0xD5BB], NFC: [0xD5BB], NFD: [0x1112, 0x1164, 0x11B6], NFKC: [0xD5BB], NFKD: [0x1112, 0x1164, 0x11B6] }, +{ source: [0xD5BC], NFC: [0xD5BC], NFD: [0x1112, 0x1164, 0x11B7], NFKC: [0xD5BC], NFKD: [0x1112, 0x1164, 0x11B7] }, +{ source: [0xD5BD], NFC: [0xD5BD], NFD: [0x1112, 0x1164, 0x11B8], NFKC: [0xD5BD], NFKD: [0x1112, 0x1164, 0x11B8] }, +{ source: [0xD5BE], NFC: [0xD5BE], NFD: [0x1112, 0x1164, 0x11B9], NFKC: [0xD5BE], NFKD: [0x1112, 0x1164, 0x11B9] }, +{ source: [0xD5BF], NFC: [0xD5BF], NFD: [0x1112, 0x1164, 0x11BA], NFKC: [0xD5BF], NFKD: [0x1112, 0x1164, 0x11BA] }, +{ source: [0xD5C0], NFC: [0xD5C0], NFD: [0x1112, 0x1164, 0x11BB], NFKC: [0xD5C0], NFKD: [0x1112, 0x1164, 0x11BB] }, +{ source: [0xD5C1], NFC: [0xD5C1], NFD: [0x1112, 0x1164, 0x11BC], NFKC: [0xD5C1], NFKD: [0x1112, 0x1164, 0x11BC] }, +{ source: [0xD5C2], NFC: [0xD5C2], NFD: [0x1112, 0x1164, 0x11BD], NFKC: [0xD5C2], NFKD: [0x1112, 0x1164, 0x11BD] }, +{ source: [0xD5C3], NFC: [0xD5C3], NFD: [0x1112, 0x1164, 0x11BE], NFKC: [0xD5C3], NFKD: [0x1112, 0x1164, 0x11BE] }, +{ source: [0xD5C4], NFC: [0xD5C4], NFD: [0x1112, 0x1164, 0x11BF], NFKC: [0xD5C4], NFKD: [0x1112, 0x1164, 0x11BF] }, +{ source: [0xD5C5], NFC: [0xD5C5], NFD: [0x1112, 0x1164, 0x11C0], NFKC: [0xD5C5], NFKD: [0x1112, 0x1164, 0x11C0] }, +{ source: [0xD5C6], NFC: [0xD5C6], NFD: [0x1112, 0x1164, 0x11C1], NFKC: [0xD5C6], NFKD: [0x1112, 0x1164, 0x11C1] }, +{ source: [0xD5C7], NFC: [0xD5C7], NFD: [0x1112, 0x1164, 0x11C2], NFKC: [0xD5C7], NFKD: [0x1112, 0x1164, 0x11C2] }, +{ source: [0xD5C8], NFC: [0xD5C8], NFD: [0x1112, 0x1165], NFKC: [0xD5C8], NFKD: [0x1112, 0x1165] }, +{ source: [0xD5C9], NFC: [0xD5C9], NFD: [0x1112, 0x1165, 0x11A8], NFKC: [0xD5C9], NFKD: [0x1112, 0x1165, 0x11A8] }, +{ source: [0xD5CA], NFC: [0xD5CA], NFD: [0x1112, 0x1165, 0x11A9], NFKC: [0xD5CA], NFKD: [0x1112, 0x1165, 0x11A9] }, +{ source: [0xD5CB], NFC: [0xD5CB], NFD: [0x1112, 0x1165, 0x11AA], NFKC: [0xD5CB], NFKD: [0x1112, 0x1165, 0x11AA] }, +{ source: [0xD5CC], NFC: [0xD5CC], NFD: [0x1112, 0x1165, 0x11AB], NFKC: [0xD5CC], NFKD: [0x1112, 0x1165, 0x11AB] }, +{ source: [0xD5CD], NFC: [0xD5CD], NFD: [0x1112, 0x1165, 0x11AC], NFKC: [0xD5CD], NFKD: [0x1112, 0x1165, 0x11AC] }, +{ source: [0xD5CE], NFC: [0xD5CE], NFD: [0x1112, 0x1165, 0x11AD], NFKC: [0xD5CE], NFKD: [0x1112, 0x1165, 0x11AD] }, +{ source: [0xD5CF], NFC: [0xD5CF], NFD: [0x1112, 0x1165, 0x11AE], NFKC: [0xD5CF], NFKD: [0x1112, 0x1165, 0x11AE] }, +{ source: [0xD5D0], NFC: [0xD5D0], NFD: [0x1112, 0x1165, 0x11AF], NFKC: [0xD5D0], NFKD: [0x1112, 0x1165, 0x11AF] }, +{ source: [0xD5D1], NFC: [0xD5D1], NFD: [0x1112, 0x1165, 0x11B0], NFKC: [0xD5D1], NFKD: [0x1112, 0x1165, 0x11B0] }, +{ source: [0xD5D2], NFC: [0xD5D2], NFD: [0x1112, 0x1165, 0x11B1], NFKC: [0xD5D2], NFKD: [0x1112, 0x1165, 0x11B1] }, +{ source: [0xD5D3], NFC: [0xD5D3], NFD: [0x1112, 0x1165, 0x11B2], NFKC: [0xD5D3], NFKD: [0x1112, 0x1165, 0x11B2] }, +{ source: [0xD5D4], NFC: [0xD5D4], NFD: [0x1112, 0x1165, 0x11B3], NFKC: [0xD5D4], NFKD: [0x1112, 0x1165, 0x11B3] }, +{ source: [0xD5D5], NFC: [0xD5D5], NFD: [0x1112, 0x1165, 0x11B4], NFKC: [0xD5D5], NFKD: [0x1112, 0x1165, 0x11B4] }, +{ source: [0xD5D6], NFC: [0xD5D6], NFD: [0x1112, 0x1165, 0x11B5], NFKC: [0xD5D6], NFKD: [0x1112, 0x1165, 0x11B5] }, +{ source: [0xD5D7], NFC: [0xD5D7], NFD: [0x1112, 0x1165, 0x11B6], NFKC: [0xD5D7], NFKD: [0x1112, 0x1165, 0x11B6] }, +{ source: [0xD5D8], NFC: [0xD5D8], NFD: [0x1112, 0x1165, 0x11B7], NFKC: [0xD5D8], NFKD: [0x1112, 0x1165, 0x11B7] }, +{ source: [0xD5D9], NFC: [0xD5D9], NFD: [0x1112, 0x1165, 0x11B8], NFKC: [0xD5D9], NFKD: [0x1112, 0x1165, 0x11B8] }, +{ source: [0xD5DA], NFC: [0xD5DA], NFD: [0x1112, 0x1165, 0x11B9], NFKC: [0xD5DA], NFKD: [0x1112, 0x1165, 0x11B9] }, +{ source: [0xD5DB], NFC: [0xD5DB], NFD: [0x1112, 0x1165, 0x11BA], NFKC: [0xD5DB], NFKD: [0x1112, 0x1165, 0x11BA] }, +{ source: [0xD5DC], NFC: [0xD5DC], NFD: [0x1112, 0x1165, 0x11BB], NFKC: [0xD5DC], NFKD: [0x1112, 0x1165, 0x11BB] }, +{ source: [0xD5DD], NFC: [0xD5DD], NFD: [0x1112, 0x1165, 0x11BC], NFKC: [0xD5DD], NFKD: [0x1112, 0x1165, 0x11BC] }, +{ source: [0xD5DE], NFC: [0xD5DE], NFD: [0x1112, 0x1165, 0x11BD], NFKC: [0xD5DE], NFKD: [0x1112, 0x1165, 0x11BD] }, +{ source: [0xD5DF], NFC: [0xD5DF], NFD: [0x1112, 0x1165, 0x11BE], NFKC: [0xD5DF], NFKD: [0x1112, 0x1165, 0x11BE] }, +{ source: [0xD5E0], NFC: [0xD5E0], NFD: [0x1112, 0x1165, 0x11BF], NFKC: [0xD5E0], NFKD: [0x1112, 0x1165, 0x11BF] }, +{ source: [0xD5E1], NFC: [0xD5E1], NFD: [0x1112, 0x1165, 0x11C0], NFKC: [0xD5E1], NFKD: [0x1112, 0x1165, 0x11C0] }, +{ source: [0xD5E2], NFC: [0xD5E2], NFD: [0x1112, 0x1165, 0x11C1], NFKC: [0xD5E2], NFKD: [0x1112, 0x1165, 0x11C1] }, +{ source: [0xD5E3], NFC: [0xD5E3], NFD: [0x1112, 0x1165, 0x11C2], NFKC: [0xD5E3], NFKD: [0x1112, 0x1165, 0x11C2] }, +{ source: [0xD5E4], NFC: [0xD5E4], NFD: [0x1112, 0x1166], NFKC: [0xD5E4], NFKD: [0x1112, 0x1166] }, +{ source: [0xD5E5], NFC: [0xD5E5], NFD: [0x1112, 0x1166, 0x11A8], NFKC: [0xD5E5], NFKD: [0x1112, 0x1166, 0x11A8] }, +{ source: [0xD5E6], NFC: [0xD5E6], NFD: [0x1112, 0x1166, 0x11A9], NFKC: [0xD5E6], NFKD: [0x1112, 0x1166, 0x11A9] }, +{ source: [0xD5E7], NFC: [0xD5E7], NFD: [0x1112, 0x1166, 0x11AA], NFKC: [0xD5E7], NFKD: [0x1112, 0x1166, 0x11AA] }, +{ source: [0xD5E8], NFC: [0xD5E8], NFD: [0x1112, 0x1166, 0x11AB], NFKC: [0xD5E8], NFKD: [0x1112, 0x1166, 0x11AB] }, +{ source: [0xD5E9], NFC: [0xD5E9], NFD: [0x1112, 0x1166, 0x11AC], NFKC: [0xD5E9], NFKD: [0x1112, 0x1166, 0x11AC] }, +{ source: [0xD5EA], NFC: [0xD5EA], NFD: [0x1112, 0x1166, 0x11AD], NFKC: [0xD5EA], NFKD: [0x1112, 0x1166, 0x11AD] }, +{ source: [0xD5EB], NFC: [0xD5EB], NFD: [0x1112, 0x1166, 0x11AE], NFKC: [0xD5EB], NFKD: [0x1112, 0x1166, 0x11AE] }, +{ source: [0xD5EC], NFC: [0xD5EC], NFD: [0x1112, 0x1166, 0x11AF], NFKC: [0xD5EC], NFKD: [0x1112, 0x1166, 0x11AF] }, +{ source: [0xD5ED], NFC: [0xD5ED], NFD: [0x1112, 0x1166, 0x11B0], NFKC: [0xD5ED], NFKD: [0x1112, 0x1166, 0x11B0] }, +{ source: [0xD5EE], NFC: [0xD5EE], NFD: [0x1112, 0x1166, 0x11B1], NFKC: [0xD5EE], NFKD: [0x1112, 0x1166, 0x11B1] }, +{ source: [0xD5EF], NFC: [0xD5EF], NFD: [0x1112, 0x1166, 0x11B2], NFKC: [0xD5EF], NFKD: [0x1112, 0x1166, 0x11B2] }, +{ source: [0xD5F0], NFC: [0xD5F0], NFD: [0x1112, 0x1166, 0x11B3], NFKC: [0xD5F0], NFKD: [0x1112, 0x1166, 0x11B3] }, +{ source: [0xD5F1], NFC: [0xD5F1], NFD: [0x1112, 0x1166, 0x11B4], NFKC: [0xD5F1], NFKD: [0x1112, 0x1166, 0x11B4] }, +{ source: [0xD5F2], NFC: [0xD5F2], NFD: [0x1112, 0x1166, 0x11B5], NFKC: [0xD5F2], NFKD: [0x1112, 0x1166, 0x11B5] }, +{ source: [0xD5F3], NFC: [0xD5F3], NFD: [0x1112, 0x1166, 0x11B6], NFKC: [0xD5F3], NFKD: [0x1112, 0x1166, 0x11B6] }, +{ source: [0xD5F4], NFC: [0xD5F4], NFD: [0x1112, 0x1166, 0x11B7], NFKC: [0xD5F4], NFKD: [0x1112, 0x1166, 0x11B7] }, +{ source: [0xD5F5], NFC: [0xD5F5], NFD: [0x1112, 0x1166, 0x11B8], NFKC: [0xD5F5], NFKD: [0x1112, 0x1166, 0x11B8] }, +{ source: [0xD5F6], NFC: [0xD5F6], NFD: [0x1112, 0x1166, 0x11B9], NFKC: [0xD5F6], NFKD: [0x1112, 0x1166, 0x11B9] }, +{ source: [0xD5F7], NFC: [0xD5F7], NFD: [0x1112, 0x1166, 0x11BA], NFKC: [0xD5F7], NFKD: [0x1112, 0x1166, 0x11BA] }, +{ source: [0xD5F8], NFC: [0xD5F8], NFD: [0x1112, 0x1166, 0x11BB], NFKC: [0xD5F8], NFKD: [0x1112, 0x1166, 0x11BB] }, +{ source: [0xD5F9], NFC: [0xD5F9], NFD: [0x1112, 0x1166, 0x11BC], NFKC: [0xD5F9], NFKD: [0x1112, 0x1166, 0x11BC] }, +{ source: [0xD5FA], NFC: [0xD5FA], NFD: [0x1112, 0x1166, 0x11BD], NFKC: [0xD5FA], NFKD: [0x1112, 0x1166, 0x11BD] }, +{ source: [0xD5FB], NFC: [0xD5FB], NFD: [0x1112, 0x1166, 0x11BE], NFKC: [0xD5FB], NFKD: [0x1112, 0x1166, 0x11BE] }, +{ source: [0xD5FC], NFC: [0xD5FC], NFD: [0x1112, 0x1166, 0x11BF], NFKC: [0xD5FC], NFKD: [0x1112, 0x1166, 0x11BF] }, +{ source: [0xD5FD], NFC: [0xD5FD], NFD: [0x1112, 0x1166, 0x11C0], NFKC: [0xD5FD], NFKD: [0x1112, 0x1166, 0x11C0] }, +{ source: [0xD5FE], NFC: [0xD5FE], NFD: [0x1112, 0x1166, 0x11C1], NFKC: [0xD5FE], NFKD: [0x1112, 0x1166, 0x11C1] }, +{ source: [0xD5FF], NFC: [0xD5FF], NFD: [0x1112, 0x1166, 0x11C2], NFKC: [0xD5FF], NFKD: [0x1112, 0x1166, 0x11C2] }, +{ source: [0xD600], NFC: [0xD600], NFD: [0x1112, 0x1167], NFKC: [0xD600], NFKD: [0x1112, 0x1167] }, +{ source: [0xD601], NFC: [0xD601], NFD: [0x1112, 0x1167, 0x11A8], NFKC: [0xD601], NFKD: [0x1112, 0x1167, 0x11A8] }, +{ source: [0xD602], NFC: [0xD602], NFD: [0x1112, 0x1167, 0x11A9], NFKC: [0xD602], NFKD: [0x1112, 0x1167, 0x11A9] }, +{ source: [0xD603], NFC: [0xD603], NFD: [0x1112, 0x1167, 0x11AA], NFKC: [0xD603], NFKD: [0x1112, 0x1167, 0x11AA] }, +{ source: [0xD604], NFC: [0xD604], NFD: [0x1112, 0x1167, 0x11AB], NFKC: [0xD604], NFKD: [0x1112, 0x1167, 0x11AB] }, +{ source: [0xD605], NFC: [0xD605], NFD: [0x1112, 0x1167, 0x11AC], NFKC: [0xD605], NFKD: [0x1112, 0x1167, 0x11AC] }, +{ source: [0xD606], NFC: [0xD606], NFD: [0x1112, 0x1167, 0x11AD], NFKC: [0xD606], NFKD: [0x1112, 0x1167, 0x11AD] }, +{ source: [0xD607], NFC: [0xD607], NFD: [0x1112, 0x1167, 0x11AE], NFKC: [0xD607], NFKD: [0x1112, 0x1167, 0x11AE] }, +{ source: [0xD608], NFC: [0xD608], NFD: [0x1112, 0x1167, 0x11AF], NFKC: [0xD608], NFKD: [0x1112, 0x1167, 0x11AF] }, +{ source: [0xD609], NFC: [0xD609], NFD: [0x1112, 0x1167, 0x11B0], NFKC: [0xD609], NFKD: [0x1112, 0x1167, 0x11B0] }, +{ source: [0xD60A], NFC: [0xD60A], NFD: [0x1112, 0x1167, 0x11B1], NFKC: [0xD60A], NFKD: [0x1112, 0x1167, 0x11B1] }, +{ source: [0xD60B], NFC: [0xD60B], NFD: [0x1112, 0x1167, 0x11B2], NFKC: [0xD60B], NFKD: [0x1112, 0x1167, 0x11B2] }, +{ source: [0xD60C], NFC: [0xD60C], NFD: [0x1112, 0x1167, 0x11B3], NFKC: [0xD60C], NFKD: [0x1112, 0x1167, 0x11B3] }, +{ source: [0xD60D], NFC: [0xD60D], NFD: [0x1112, 0x1167, 0x11B4], NFKC: [0xD60D], NFKD: [0x1112, 0x1167, 0x11B4] }, +{ source: [0xD60E], NFC: [0xD60E], NFD: [0x1112, 0x1167, 0x11B5], NFKC: [0xD60E], NFKD: [0x1112, 0x1167, 0x11B5] }, +{ source: [0xD60F], NFC: [0xD60F], NFD: [0x1112, 0x1167, 0x11B6], NFKC: [0xD60F], NFKD: [0x1112, 0x1167, 0x11B6] }, +{ source: [0xD610], NFC: [0xD610], NFD: [0x1112, 0x1167, 0x11B7], NFKC: [0xD610], NFKD: [0x1112, 0x1167, 0x11B7] }, +{ source: [0xD611], NFC: [0xD611], NFD: [0x1112, 0x1167, 0x11B8], NFKC: [0xD611], NFKD: [0x1112, 0x1167, 0x11B8] }, +{ source: [0xD612], NFC: [0xD612], NFD: [0x1112, 0x1167, 0x11B9], NFKC: [0xD612], NFKD: [0x1112, 0x1167, 0x11B9] }, +{ source: [0xD613], NFC: [0xD613], NFD: [0x1112, 0x1167, 0x11BA], NFKC: [0xD613], NFKD: [0x1112, 0x1167, 0x11BA] }, +{ source: [0xD614], NFC: [0xD614], NFD: [0x1112, 0x1167, 0x11BB], NFKC: [0xD614], NFKD: [0x1112, 0x1167, 0x11BB] }, +{ source: [0xD615], NFC: [0xD615], NFD: [0x1112, 0x1167, 0x11BC], NFKC: [0xD615], NFKD: [0x1112, 0x1167, 0x11BC] }, +{ source: [0xD616], NFC: [0xD616], NFD: [0x1112, 0x1167, 0x11BD], NFKC: [0xD616], NFKD: [0x1112, 0x1167, 0x11BD] }, +{ source: [0xD617], NFC: [0xD617], NFD: [0x1112, 0x1167, 0x11BE], NFKC: [0xD617], NFKD: [0x1112, 0x1167, 0x11BE] }, +{ source: [0xD618], NFC: [0xD618], NFD: [0x1112, 0x1167, 0x11BF], NFKC: [0xD618], NFKD: [0x1112, 0x1167, 0x11BF] }, +{ source: [0xD619], NFC: [0xD619], NFD: [0x1112, 0x1167, 0x11C0], NFKC: [0xD619], NFKD: [0x1112, 0x1167, 0x11C0] }, +{ source: [0xD61A], NFC: [0xD61A], NFD: [0x1112, 0x1167, 0x11C1], NFKC: [0xD61A], NFKD: [0x1112, 0x1167, 0x11C1] }, +{ source: [0xD61B], NFC: [0xD61B], NFD: [0x1112, 0x1167, 0x11C2], NFKC: [0xD61B], NFKD: [0x1112, 0x1167, 0x11C2] }, +{ source: [0xD61C], NFC: [0xD61C], NFD: [0x1112, 0x1168], NFKC: [0xD61C], NFKD: [0x1112, 0x1168] }, +{ source: [0xD61D], NFC: [0xD61D], NFD: [0x1112, 0x1168, 0x11A8], NFKC: [0xD61D], NFKD: [0x1112, 0x1168, 0x11A8] }, +{ source: [0xD61E], NFC: [0xD61E], NFD: [0x1112, 0x1168, 0x11A9], NFKC: [0xD61E], NFKD: [0x1112, 0x1168, 0x11A9] }, +{ source: [0xD61F], NFC: [0xD61F], NFD: [0x1112, 0x1168, 0x11AA], NFKC: [0xD61F], NFKD: [0x1112, 0x1168, 0x11AA] }, +{ source: [0xD620], NFC: [0xD620], NFD: [0x1112, 0x1168, 0x11AB], NFKC: [0xD620], NFKD: [0x1112, 0x1168, 0x11AB] }, +{ source: [0xD621], NFC: [0xD621], NFD: [0x1112, 0x1168, 0x11AC], NFKC: [0xD621], NFKD: [0x1112, 0x1168, 0x11AC] }, +{ source: [0xD622], NFC: [0xD622], NFD: [0x1112, 0x1168, 0x11AD], NFKC: [0xD622], NFKD: [0x1112, 0x1168, 0x11AD] }, +{ source: [0xD623], NFC: [0xD623], NFD: [0x1112, 0x1168, 0x11AE], NFKC: [0xD623], NFKD: [0x1112, 0x1168, 0x11AE] }, +{ source: [0xD624], NFC: [0xD624], NFD: [0x1112, 0x1168, 0x11AF], NFKC: [0xD624], NFKD: [0x1112, 0x1168, 0x11AF] }, +{ source: [0xD625], NFC: [0xD625], NFD: [0x1112, 0x1168, 0x11B0], NFKC: [0xD625], NFKD: [0x1112, 0x1168, 0x11B0] }, +{ source: [0xD626], NFC: [0xD626], NFD: [0x1112, 0x1168, 0x11B1], NFKC: [0xD626], NFKD: [0x1112, 0x1168, 0x11B1] }, +{ source: [0xD627], NFC: [0xD627], NFD: [0x1112, 0x1168, 0x11B2], NFKC: [0xD627], NFKD: [0x1112, 0x1168, 0x11B2] }, +{ source: [0xD628], NFC: [0xD628], NFD: [0x1112, 0x1168, 0x11B3], NFKC: [0xD628], NFKD: [0x1112, 0x1168, 0x11B3] }, +{ source: [0xD629], NFC: [0xD629], NFD: [0x1112, 0x1168, 0x11B4], NFKC: [0xD629], NFKD: [0x1112, 0x1168, 0x11B4] }, +{ source: [0xD62A], NFC: [0xD62A], NFD: [0x1112, 0x1168, 0x11B5], NFKC: [0xD62A], NFKD: [0x1112, 0x1168, 0x11B5] }, +{ source: [0xD62B], NFC: [0xD62B], NFD: [0x1112, 0x1168, 0x11B6], NFKC: [0xD62B], NFKD: [0x1112, 0x1168, 0x11B6] }, +{ source: [0xD62C], NFC: [0xD62C], NFD: [0x1112, 0x1168, 0x11B7], NFKC: [0xD62C], NFKD: [0x1112, 0x1168, 0x11B7] }, +{ source: [0xD62D], NFC: [0xD62D], NFD: [0x1112, 0x1168, 0x11B8], NFKC: [0xD62D], NFKD: [0x1112, 0x1168, 0x11B8] }, +{ source: [0xD62E], NFC: [0xD62E], NFD: [0x1112, 0x1168, 0x11B9], NFKC: [0xD62E], NFKD: [0x1112, 0x1168, 0x11B9] }, +{ source: [0xD62F], NFC: [0xD62F], NFD: [0x1112, 0x1168, 0x11BA], NFKC: [0xD62F], NFKD: [0x1112, 0x1168, 0x11BA] }, +{ source: [0xD630], NFC: [0xD630], NFD: [0x1112, 0x1168, 0x11BB], NFKC: [0xD630], NFKD: [0x1112, 0x1168, 0x11BB] }, +{ source: [0xD631], NFC: [0xD631], NFD: [0x1112, 0x1168, 0x11BC], NFKC: [0xD631], NFKD: [0x1112, 0x1168, 0x11BC] }, +{ source: [0xD632], NFC: [0xD632], NFD: [0x1112, 0x1168, 0x11BD], NFKC: [0xD632], NFKD: [0x1112, 0x1168, 0x11BD] }, +{ source: [0xD633], NFC: [0xD633], NFD: [0x1112, 0x1168, 0x11BE], NFKC: [0xD633], NFKD: [0x1112, 0x1168, 0x11BE] }, +{ source: [0xD634], NFC: [0xD634], NFD: [0x1112, 0x1168, 0x11BF], NFKC: [0xD634], NFKD: [0x1112, 0x1168, 0x11BF] }, +{ source: [0xD635], NFC: [0xD635], NFD: [0x1112, 0x1168, 0x11C0], NFKC: [0xD635], NFKD: [0x1112, 0x1168, 0x11C0] }, +{ source: [0xD636], NFC: [0xD636], NFD: [0x1112, 0x1168, 0x11C1], NFKC: [0xD636], NFKD: [0x1112, 0x1168, 0x11C1] }, +{ source: [0xD637], NFC: [0xD637], NFD: [0x1112, 0x1168, 0x11C2], NFKC: [0xD637], NFKD: [0x1112, 0x1168, 0x11C2] }, +{ source: [0xD638], NFC: [0xD638], NFD: [0x1112, 0x1169], NFKC: [0xD638], NFKD: [0x1112, 0x1169] }, +{ source: [0xD639], NFC: [0xD639], NFD: [0x1112, 0x1169, 0x11A8], NFKC: [0xD639], NFKD: [0x1112, 0x1169, 0x11A8] }, +{ source: [0xD63A], NFC: [0xD63A], NFD: [0x1112, 0x1169, 0x11A9], NFKC: [0xD63A], NFKD: [0x1112, 0x1169, 0x11A9] }, +{ source: [0xD63B], NFC: [0xD63B], NFD: [0x1112, 0x1169, 0x11AA], NFKC: [0xD63B], NFKD: [0x1112, 0x1169, 0x11AA] }, +{ source: [0xD63C], NFC: [0xD63C], NFD: [0x1112, 0x1169, 0x11AB], NFKC: [0xD63C], NFKD: [0x1112, 0x1169, 0x11AB] }, +{ source: [0xD63D], NFC: [0xD63D], NFD: [0x1112, 0x1169, 0x11AC], NFKC: [0xD63D], NFKD: [0x1112, 0x1169, 0x11AC] }, +{ source: [0xD63E], NFC: [0xD63E], NFD: [0x1112, 0x1169, 0x11AD], NFKC: [0xD63E], NFKD: [0x1112, 0x1169, 0x11AD] }, +{ source: [0xD63F], NFC: [0xD63F], NFD: [0x1112, 0x1169, 0x11AE], NFKC: [0xD63F], NFKD: [0x1112, 0x1169, 0x11AE] }, +{ source: [0xD640], NFC: [0xD640], NFD: [0x1112, 0x1169, 0x11AF], NFKC: [0xD640], NFKD: [0x1112, 0x1169, 0x11AF] }, +{ source: [0xD641], NFC: [0xD641], NFD: [0x1112, 0x1169, 0x11B0], NFKC: [0xD641], NFKD: [0x1112, 0x1169, 0x11B0] }, +{ source: [0xD642], NFC: [0xD642], NFD: [0x1112, 0x1169, 0x11B1], NFKC: [0xD642], NFKD: [0x1112, 0x1169, 0x11B1] }, +{ source: [0xD643], NFC: [0xD643], NFD: [0x1112, 0x1169, 0x11B2], NFKC: [0xD643], NFKD: [0x1112, 0x1169, 0x11B2] }, +{ source: [0xD644], NFC: [0xD644], NFD: [0x1112, 0x1169, 0x11B3], NFKC: [0xD644], NFKD: [0x1112, 0x1169, 0x11B3] }, +{ source: [0xD645], NFC: [0xD645], NFD: [0x1112, 0x1169, 0x11B4], NFKC: [0xD645], NFKD: [0x1112, 0x1169, 0x11B4] }, +{ source: [0xD646], NFC: [0xD646], NFD: [0x1112, 0x1169, 0x11B5], NFKC: [0xD646], NFKD: [0x1112, 0x1169, 0x11B5] }, +{ source: [0xD647], NFC: [0xD647], NFD: [0x1112, 0x1169, 0x11B6], NFKC: [0xD647], NFKD: [0x1112, 0x1169, 0x11B6] }, +{ source: [0xD648], NFC: [0xD648], NFD: [0x1112, 0x1169, 0x11B7], NFKC: [0xD648], NFKD: [0x1112, 0x1169, 0x11B7] }, +{ source: [0xD649], NFC: [0xD649], NFD: [0x1112, 0x1169, 0x11B8], NFKC: [0xD649], NFKD: [0x1112, 0x1169, 0x11B8] }, +{ source: [0xD64A], NFC: [0xD64A], NFD: [0x1112, 0x1169, 0x11B9], NFKC: [0xD64A], NFKD: [0x1112, 0x1169, 0x11B9] }, +{ source: [0xD64B], NFC: [0xD64B], NFD: [0x1112, 0x1169, 0x11BA], NFKC: [0xD64B], NFKD: [0x1112, 0x1169, 0x11BA] }, +{ source: [0xD64C], NFC: [0xD64C], NFD: [0x1112, 0x1169, 0x11BB], NFKC: [0xD64C], NFKD: [0x1112, 0x1169, 0x11BB] }, +{ source: [0xD64D], NFC: [0xD64D], NFD: [0x1112, 0x1169, 0x11BC], NFKC: [0xD64D], NFKD: [0x1112, 0x1169, 0x11BC] }, +{ source: [0xD64E], NFC: [0xD64E], NFD: [0x1112, 0x1169, 0x11BD], NFKC: [0xD64E], NFKD: [0x1112, 0x1169, 0x11BD] }, +{ source: [0xD64F], NFC: [0xD64F], NFD: [0x1112, 0x1169, 0x11BE], NFKC: [0xD64F], NFKD: [0x1112, 0x1169, 0x11BE] }, +{ source: [0xD650], NFC: [0xD650], NFD: [0x1112, 0x1169, 0x11BF], NFKC: [0xD650], NFKD: [0x1112, 0x1169, 0x11BF] }, +{ source: [0xD651], NFC: [0xD651], NFD: [0x1112, 0x1169, 0x11C0], NFKC: [0xD651], NFKD: [0x1112, 0x1169, 0x11C0] }, +{ source: [0xD652], NFC: [0xD652], NFD: [0x1112, 0x1169, 0x11C1], NFKC: [0xD652], NFKD: [0x1112, 0x1169, 0x11C1] }, +{ source: [0xD653], NFC: [0xD653], NFD: [0x1112, 0x1169, 0x11C2], NFKC: [0xD653], NFKD: [0x1112, 0x1169, 0x11C2] }, +{ source: [0xD654], NFC: [0xD654], NFD: [0x1112, 0x116A], NFKC: [0xD654], NFKD: [0x1112, 0x116A] }, +{ source: [0xD655], NFC: [0xD655], NFD: [0x1112, 0x116A, 0x11A8], NFKC: [0xD655], NFKD: [0x1112, 0x116A, 0x11A8] }, +{ source: [0xD656], NFC: [0xD656], NFD: [0x1112, 0x116A, 0x11A9], NFKC: [0xD656], NFKD: [0x1112, 0x116A, 0x11A9] }, +{ source: [0xD657], NFC: [0xD657], NFD: [0x1112, 0x116A, 0x11AA], NFKC: [0xD657], NFKD: [0x1112, 0x116A, 0x11AA] }, +{ source: [0xD658], NFC: [0xD658], NFD: [0x1112, 0x116A, 0x11AB], NFKC: [0xD658], NFKD: [0x1112, 0x116A, 0x11AB] }, +{ source: [0xD659], NFC: [0xD659], NFD: [0x1112, 0x116A, 0x11AC], NFKC: [0xD659], NFKD: [0x1112, 0x116A, 0x11AC] }, +{ source: [0xD65A], NFC: [0xD65A], NFD: [0x1112, 0x116A, 0x11AD], NFKC: [0xD65A], NFKD: [0x1112, 0x116A, 0x11AD] }, +{ source: [0xD65B], NFC: [0xD65B], NFD: [0x1112, 0x116A, 0x11AE], NFKC: [0xD65B], NFKD: [0x1112, 0x116A, 0x11AE] }, +{ source: [0xD65C], NFC: [0xD65C], NFD: [0x1112, 0x116A, 0x11AF], NFKC: [0xD65C], NFKD: [0x1112, 0x116A, 0x11AF] }, +{ source: [0xD65D], NFC: [0xD65D], NFD: [0x1112, 0x116A, 0x11B0], NFKC: [0xD65D], NFKD: [0x1112, 0x116A, 0x11B0] }, +{ source: [0xD65E], NFC: [0xD65E], NFD: [0x1112, 0x116A, 0x11B1], NFKC: [0xD65E], NFKD: [0x1112, 0x116A, 0x11B1] }, +{ source: [0xD65F], NFC: [0xD65F], NFD: [0x1112, 0x116A, 0x11B2], NFKC: [0xD65F], NFKD: [0x1112, 0x116A, 0x11B2] }, +{ source: [0xD660], NFC: [0xD660], NFD: [0x1112, 0x116A, 0x11B3], NFKC: [0xD660], NFKD: [0x1112, 0x116A, 0x11B3] }, +{ source: [0xD661], NFC: [0xD661], NFD: [0x1112, 0x116A, 0x11B4], NFKC: [0xD661], NFKD: [0x1112, 0x116A, 0x11B4] }, +{ source: [0xD662], NFC: [0xD662], NFD: [0x1112, 0x116A, 0x11B5], NFKC: [0xD662], NFKD: [0x1112, 0x116A, 0x11B5] }, +{ source: [0xD663], NFC: [0xD663], NFD: [0x1112, 0x116A, 0x11B6], NFKC: [0xD663], NFKD: [0x1112, 0x116A, 0x11B6] }, +{ source: [0xD664], NFC: [0xD664], NFD: [0x1112, 0x116A, 0x11B7], NFKC: [0xD664], NFKD: [0x1112, 0x116A, 0x11B7] }, +{ source: [0xD665], NFC: [0xD665], NFD: [0x1112, 0x116A, 0x11B8], NFKC: [0xD665], NFKD: [0x1112, 0x116A, 0x11B8] }, +{ source: [0xD666], NFC: [0xD666], NFD: [0x1112, 0x116A, 0x11B9], NFKC: [0xD666], NFKD: [0x1112, 0x116A, 0x11B9] }, +{ source: [0xD667], NFC: [0xD667], NFD: [0x1112, 0x116A, 0x11BA], NFKC: [0xD667], NFKD: [0x1112, 0x116A, 0x11BA] }, +{ source: [0xD668], NFC: [0xD668], NFD: [0x1112, 0x116A, 0x11BB], NFKC: [0xD668], NFKD: [0x1112, 0x116A, 0x11BB] }, +{ source: [0xD669], NFC: [0xD669], NFD: [0x1112, 0x116A, 0x11BC], NFKC: [0xD669], NFKD: [0x1112, 0x116A, 0x11BC] }, +{ source: [0xD66A], NFC: [0xD66A], NFD: [0x1112, 0x116A, 0x11BD], NFKC: [0xD66A], NFKD: [0x1112, 0x116A, 0x11BD] }, +{ source: [0xD66B], NFC: [0xD66B], NFD: [0x1112, 0x116A, 0x11BE], NFKC: [0xD66B], NFKD: [0x1112, 0x116A, 0x11BE] }, +{ source: [0xD66C], NFC: [0xD66C], NFD: [0x1112, 0x116A, 0x11BF], NFKC: [0xD66C], NFKD: [0x1112, 0x116A, 0x11BF] }, +{ source: [0xD66D], NFC: [0xD66D], NFD: [0x1112, 0x116A, 0x11C0], NFKC: [0xD66D], NFKD: [0x1112, 0x116A, 0x11C0] }, +{ source: [0xD66E], NFC: [0xD66E], NFD: [0x1112, 0x116A, 0x11C1], NFKC: [0xD66E], NFKD: [0x1112, 0x116A, 0x11C1] }, +{ source: [0xD66F], NFC: [0xD66F], NFD: [0x1112, 0x116A, 0x11C2], NFKC: [0xD66F], NFKD: [0x1112, 0x116A, 0x11C2] }, +{ source: [0xD670], NFC: [0xD670], NFD: [0x1112, 0x116B], NFKC: [0xD670], NFKD: [0x1112, 0x116B] }, +{ source: [0xD671], NFC: [0xD671], NFD: [0x1112, 0x116B, 0x11A8], NFKC: [0xD671], NFKD: [0x1112, 0x116B, 0x11A8] }, +{ source: [0xD672], NFC: [0xD672], NFD: [0x1112, 0x116B, 0x11A9], NFKC: [0xD672], NFKD: [0x1112, 0x116B, 0x11A9] }, +{ source: [0xD673], NFC: [0xD673], NFD: [0x1112, 0x116B, 0x11AA], NFKC: [0xD673], NFKD: [0x1112, 0x116B, 0x11AA] }, +{ source: [0xD674], NFC: [0xD674], NFD: [0x1112, 0x116B, 0x11AB], NFKC: [0xD674], NFKD: [0x1112, 0x116B, 0x11AB] }, +{ source: [0xD675], NFC: [0xD675], NFD: [0x1112, 0x116B, 0x11AC], NFKC: [0xD675], NFKD: [0x1112, 0x116B, 0x11AC] }, +{ source: [0xD676], NFC: [0xD676], NFD: [0x1112, 0x116B, 0x11AD], NFKC: [0xD676], NFKD: [0x1112, 0x116B, 0x11AD] }, +{ source: [0xD677], NFC: [0xD677], NFD: [0x1112, 0x116B, 0x11AE], NFKC: [0xD677], NFKD: [0x1112, 0x116B, 0x11AE] }, +{ source: [0xD678], NFC: [0xD678], NFD: [0x1112, 0x116B, 0x11AF], NFKC: [0xD678], NFKD: [0x1112, 0x116B, 0x11AF] }, +{ source: [0xD679], NFC: [0xD679], NFD: [0x1112, 0x116B, 0x11B0], NFKC: [0xD679], NFKD: [0x1112, 0x116B, 0x11B0] }, +{ source: [0xD67A], NFC: [0xD67A], NFD: [0x1112, 0x116B, 0x11B1], NFKC: [0xD67A], NFKD: [0x1112, 0x116B, 0x11B1] }, +{ source: [0xD67B], NFC: [0xD67B], NFD: [0x1112, 0x116B, 0x11B2], NFKC: [0xD67B], NFKD: [0x1112, 0x116B, 0x11B2] }, +{ source: [0xD67C], NFC: [0xD67C], NFD: [0x1112, 0x116B, 0x11B3], NFKC: [0xD67C], NFKD: [0x1112, 0x116B, 0x11B3] }, +{ source: [0xD67D], NFC: [0xD67D], NFD: [0x1112, 0x116B, 0x11B4], NFKC: [0xD67D], NFKD: [0x1112, 0x116B, 0x11B4] }, +{ source: [0xD67E], NFC: [0xD67E], NFD: [0x1112, 0x116B, 0x11B5], NFKC: [0xD67E], NFKD: [0x1112, 0x116B, 0x11B5] }, +{ source: [0xD67F], NFC: [0xD67F], NFD: [0x1112, 0x116B, 0x11B6], NFKC: [0xD67F], NFKD: [0x1112, 0x116B, 0x11B6] }, +{ source: [0xD680], NFC: [0xD680], NFD: [0x1112, 0x116B, 0x11B7], NFKC: [0xD680], NFKD: [0x1112, 0x116B, 0x11B7] }, +{ source: [0xD681], NFC: [0xD681], NFD: [0x1112, 0x116B, 0x11B8], NFKC: [0xD681], NFKD: [0x1112, 0x116B, 0x11B8] }, +{ source: [0xD682], NFC: [0xD682], NFD: [0x1112, 0x116B, 0x11B9], NFKC: [0xD682], NFKD: [0x1112, 0x116B, 0x11B9] }, +{ source: [0xD683], NFC: [0xD683], NFD: [0x1112, 0x116B, 0x11BA], NFKC: [0xD683], NFKD: [0x1112, 0x116B, 0x11BA] }, +{ source: [0xD684], NFC: [0xD684], NFD: [0x1112, 0x116B, 0x11BB], NFKC: [0xD684], NFKD: [0x1112, 0x116B, 0x11BB] }, +{ source: [0xD685], NFC: [0xD685], NFD: [0x1112, 0x116B, 0x11BC], NFKC: [0xD685], NFKD: [0x1112, 0x116B, 0x11BC] }, +{ source: [0xD686], NFC: [0xD686], NFD: [0x1112, 0x116B, 0x11BD], NFKC: [0xD686], NFKD: [0x1112, 0x116B, 0x11BD] }, +{ source: [0xD687], NFC: [0xD687], NFD: [0x1112, 0x116B, 0x11BE], NFKC: [0xD687], NFKD: [0x1112, 0x116B, 0x11BE] }, +{ source: [0xD688], NFC: [0xD688], NFD: [0x1112, 0x116B, 0x11BF], NFKC: [0xD688], NFKD: [0x1112, 0x116B, 0x11BF] }, +{ source: [0xD689], NFC: [0xD689], NFD: [0x1112, 0x116B, 0x11C0], NFKC: [0xD689], NFKD: [0x1112, 0x116B, 0x11C0] }, +{ source: [0xD68A], NFC: [0xD68A], NFD: [0x1112, 0x116B, 0x11C1], NFKC: [0xD68A], NFKD: [0x1112, 0x116B, 0x11C1] }, +{ source: [0xD68B], NFC: [0xD68B], NFD: [0x1112, 0x116B, 0x11C2], NFKC: [0xD68B], NFKD: [0x1112, 0x116B, 0x11C2] }, +{ source: [0xD68C], NFC: [0xD68C], NFD: [0x1112, 0x116C], NFKC: [0xD68C], NFKD: [0x1112, 0x116C] }, +{ source: [0xD68D], NFC: [0xD68D], NFD: [0x1112, 0x116C, 0x11A8], NFKC: [0xD68D], NFKD: [0x1112, 0x116C, 0x11A8] }, +{ source: [0xD68E], NFC: [0xD68E], NFD: [0x1112, 0x116C, 0x11A9], NFKC: [0xD68E], NFKD: [0x1112, 0x116C, 0x11A9] }, +{ source: [0xD68F], NFC: [0xD68F], NFD: [0x1112, 0x116C, 0x11AA], NFKC: [0xD68F], NFKD: [0x1112, 0x116C, 0x11AA] }, +{ source: [0xD690], NFC: [0xD690], NFD: [0x1112, 0x116C, 0x11AB], NFKC: [0xD690], NFKD: [0x1112, 0x116C, 0x11AB] }, +{ source: [0xD691], NFC: [0xD691], NFD: [0x1112, 0x116C, 0x11AC], NFKC: [0xD691], NFKD: [0x1112, 0x116C, 0x11AC] }, +{ source: [0xD692], NFC: [0xD692], NFD: [0x1112, 0x116C, 0x11AD], NFKC: [0xD692], NFKD: [0x1112, 0x116C, 0x11AD] }, +{ source: [0xD693], NFC: [0xD693], NFD: [0x1112, 0x116C, 0x11AE], NFKC: [0xD693], NFKD: [0x1112, 0x116C, 0x11AE] }, +{ source: [0xD694], NFC: [0xD694], NFD: [0x1112, 0x116C, 0x11AF], NFKC: [0xD694], NFKD: [0x1112, 0x116C, 0x11AF] }, +{ source: [0xD695], NFC: [0xD695], NFD: [0x1112, 0x116C, 0x11B0], NFKC: [0xD695], NFKD: [0x1112, 0x116C, 0x11B0] }, +{ source: [0xD696], NFC: [0xD696], NFD: [0x1112, 0x116C, 0x11B1], NFKC: [0xD696], NFKD: [0x1112, 0x116C, 0x11B1] }, +{ source: [0xD697], NFC: [0xD697], NFD: [0x1112, 0x116C, 0x11B2], NFKC: [0xD697], NFKD: [0x1112, 0x116C, 0x11B2] }, +{ source: [0xD698], NFC: [0xD698], NFD: [0x1112, 0x116C, 0x11B3], NFKC: [0xD698], NFKD: [0x1112, 0x116C, 0x11B3] }, +{ source: [0xD699], NFC: [0xD699], NFD: [0x1112, 0x116C, 0x11B4], NFKC: [0xD699], NFKD: [0x1112, 0x116C, 0x11B4] }, +{ source: [0xD69A], NFC: [0xD69A], NFD: [0x1112, 0x116C, 0x11B5], NFKC: [0xD69A], NFKD: [0x1112, 0x116C, 0x11B5] }, +{ source: [0xD69B], NFC: [0xD69B], NFD: [0x1112, 0x116C, 0x11B6], NFKC: [0xD69B], NFKD: [0x1112, 0x116C, 0x11B6] }, +{ source: [0xD69C], NFC: [0xD69C], NFD: [0x1112, 0x116C, 0x11B7], NFKC: [0xD69C], NFKD: [0x1112, 0x116C, 0x11B7] }, +{ source: [0xD69D], NFC: [0xD69D], NFD: [0x1112, 0x116C, 0x11B8], NFKC: [0xD69D], NFKD: [0x1112, 0x116C, 0x11B8] }, +{ source: [0xD69E], NFC: [0xD69E], NFD: [0x1112, 0x116C, 0x11B9], NFKC: [0xD69E], NFKD: [0x1112, 0x116C, 0x11B9] }, +{ source: [0xD69F], NFC: [0xD69F], NFD: [0x1112, 0x116C, 0x11BA], NFKC: [0xD69F], NFKD: [0x1112, 0x116C, 0x11BA] }, +{ source: [0xD6A0], NFC: [0xD6A0], NFD: [0x1112, 0x116C, 0x11BB], NFKC: [0xD6A0], NFKD: [0x1112, 0x116C, 0x11BB] }, +{ source: [0xD6A1], NFC: [0xD6A1], NFD: [0x1112, 0x116C, 0x11BC], NFKC: [0xD6A1], NFKD: [0x1112, 0x116C, 0x11BC] }, +{ source: [0xD6A2], NFC: [0xD6A2], NFD: [0x1112, 0x116C, 0x11BD], NFKC: [0xD6A2], NFKD: [0x1112, 0x116C, 0x11BD] }, +{ source: [0xD6A3], NFC: [0xD6A3], NFD: [0x1112, 0x116C, 0x11BE], NFKC: [0xD6A3], NFKD: [0x1112, 0x116C, 0x11BE] }, +{ source: [0xD6A4], NFC: [0xD6A4], NFD: [0x1112, 0x116C, 0x11BF], NFKC: [0xD6A4], NFKD: [0x1112, 0x116C, 0x11BF] }, +{ source: [0xD6A5], NFC: [0xD6A5], NFD: [0x1112, 0x116C, 0x11C0], NFKC: [0xD6A5], NFKD: [0x1112, 0x116C, 0x11C0] }, +{ source: [0xD6A6], NFC: [0xD6A6], NFD: [0x1112, 0x116C, 0x11C1], NFKC: [0xD6A6], NFKD: [0x1112, 0x116C, 0x11C1] }, +{ source: [0xD6A7], NFC: [0xD6A7], NFD: [0x1112, 0x116C, 0x11C2], NFKC: [0xD6A7], NFKD: [0x1112, 0x116C, 0x11C2] }, +{ source: [0xD6A8], NFC: [0xD6A8], NFD: [0x1112, 0x116D], NFKC: [0xD6A8], NFKD: [0x1112, 0x116D] }, +{ source: [0xD6A9], NFC: [0xD6A9], NFD: [0x1112, 0x116D, 0x11A8], NFKC: [0xD6A9], NFKD: [0x1112, 0x116D, 0x11A8] }, +{ source: [0xD6AA], NFC: [0xD6AA], NFD: [0x1112, 0x116D, 0x11A9], NFKC: [0xD6AA], NFKD: [0x1112, 0x116D, 0x11A9] }, +{ source: [0xD6AB], NFC: [0xD6AB], NFD: [0x1112, 0x116D, 0x11AA], NFKC: [0xD6AB], NFKD: [0x1112, 0x116D, 0x11AA] }, +{ source: [0xD6AC], NFC: [0xD6AC], NFD: [0x1112, 0x116D, 0x11AB], NFKC: [0xD6AC], NFKD: [0x1112, 0x116D, 0x11AB] }, +{ source: [0xD6AD], NFC: [0xD6AD], NFD: [0x1112, 0x116D, 0x11AC], NFKC: [0xD6AD], NFKD: [0x1112, 0x116D, 0x11AC] }, +{ source: [0xD6AE], NFC: [0xD6AE], NFD: [0x1112, 0x116D, 0x11AD], NFKC: [0xD6AE], NFKD: [0x1112, 0x116D, 0x11AD] }, +{ source: [0xD6AF], NFC: [0xD6AF], NFD: [0x1112, 0x116D, 0x11AE], NFKC: [0xD6AF], NFKD: [0x1112, 0x116D, 0x11AE] }, +{ source: [0xD6B0], NFC: [0xD6B0], NFD: [0x1112, 0x116D, 0x11AF], NFKC: [0xD6B0], NFKD: [0x1112, 0x116D, 0x11AF] }, +{ source: [0xD6B1], NFC: [0xD6B1], NFD: [0x1112, 0x116D, 0x11B0], NFKC: [0xD6B1], NFKD: [0x1112, 0x116D, 0x11B0] }, +{ source: [0xD6B2], NFC: [0xD6B2], NFD: [0x1112, 0x116D, 0x11B1], NFKC: [0xD6B2], NFKD: [0x1112, 0x116D, 0x11B1] }, +{ source: [0xD6B3], NFC: [0xD6B3], NFD: [0x1112, 0x116D, 0x11B2], NFKC: [0xD6B3], NFKD: [0x1112, 0x116D, 0x11B2] }, +{ source: [0xD6B4], NFC: [0xD6B4], NFD: [0x1112, 0x116D, 0x11B3], NFKC: [0xD6B4], NFKD: [0x1112, 0x116D, 0x11B3] }, +{ source: [0xD6B5], NFC: [0xD6B5], NFD: [0x1112, 0x116D, 0x11B4], NFKC: [0xD6B5], NFKD: [0x1112, 0x116D, 0x11B4] }, +{ source: [0xD6B6], NFC: [0xD6B6], NFD: [0x1112, 0x116D, 0x11B5], NFKC: [0xD6B6], NFKD: [0x1112, 0x116D, 0x11B5] }, +{ source: [0xD6B7], NFC: [0xD6B7], NFD: [0x1112, 0x116D, 0x11B6], NFKC: [0xD6B7], NFKD: [0x1112, 0x116D, 0x11B6] }, +{ source: [0xD6B8], NFC: [0xD6B8], NFD: [0x1112, 0x116D, 0x11B7], NFKC: [0xD6B8], NFKD: [0x1112, 0x116D, 0x11B7] }, +{ source: [0xD6B9], NFC: [0xD6B9], NFD: [0x1112, 0x116D, 0x11B8], NFKC: [0xD6B9], NFKD: [0x1112, 0x116D, 0x11B8] }, +{ source: [0xD6BA], NFC: [0xD6BA], NFD: [0x1112, 0x116D, 0x11B9], NFKC: [0xD6BA], NFKD: [0x1112, 0x116D, 0x11B9] }, +{ source: [0xD6BB], NFC: [0xD6BB], NFD: [0x1112, 0x116D, 0x11BA], NFKC: [0xD6BB], NFKD: [0x1112, 0x116D, 0x11BA] }, +{ source: [0xD6BC], NFC: [0xD6BC], NFD: [0x1112, 0x116D, 0x11BB], NFKC: [0xD6BC], NFKD: [0x1112, 0x116D, 0x11BB] }, +{ source: [0xD6BD], NFC: [0xD6BD], NFD: [0x1112, 0x116D, 0x11BC], NFKC: [0xD6BD], NFKD: [0x1112, 0x116D, 0x11BC] }, +{ source: [0xD6BE], NFC: [0xD6BE], NFD: [0x1112, 0x116D, 0x11BD], NFKC: [0xD6BE], NFKD: [0x1112, 0x116D, 0x11BD] }, +{ source: [0xD6BF], NFC: [0xD6BF], NFD: [0x1112, 0x116D, 0x11BE], NFKC: [0xD6BF], NFKD: [0x1112, 0x116D, 0x11BE] }, +{ source: [0xD6C0], NFC: [0xD6C0], NFD: [0x1112, 0x116D, 0x11BF], NFKC: [0xD6C0], NFKD: [0x1112, 0x116D, 0x11BF] }, +{ source: [0xD6C1], NFC: [0xD6C1], NFD: [0x1112, 0x116D, 0x11C0], NFKC: [0xD6C1], NFKD: [0x1112, 0x116D, 0x11C0] }, +{ source: [0xD6C2], NFC: [0xD6C2], NFD: [0x1112, 0x116D, 0x11C1], NFKC: [0xD6C2], NFKD: [0x1112, 0x116D, 0x11C1] }, +{ source: [0xD6C3], NFC: [0xD6C3], NFD: [0x1112, 0x116D, 0x11C2], NFKC: [0xD6C3], NFKD: [0x1112, 0x116D, 0x11C2] }, +{ source: [0xD6C4], NFC: [0xD6C4], NFD: [0x1112, 0x116E], NFKC: [0xD6C4], NFKD: [0x1112, 0x116E] }, +{ source: [0xD6C5], NFC: [0xD6C5], NFD: [0x1112, 0x116E, 0x11A8], NFKC: [0xD6C5], NFKD: [0x1112, 0x116E, 0x11A8] }, +{ source: [0xD6C6], NFC: [0xD6C6], NFD: [0x1112, 0x116E, 0x11A9], NFKC: [0xD6C6], NFKD: [0x1112, 0x116E, 0x11A9] }, +{ source: [0xD6C7], NFC: [0xD6C7], NFD: [0x1112, 0x116E, 0x11AA], NFKC: [0xD6C7], NFKD: [0x1112, 0x116E, 0x11AA] }, +{ source: [0xD6C8], NFC: [0xD6C8], NFD: [0x1112, 0x116E, 0x11AB], NFKC: [0xD6C8], NFKD: [0x1112, 0x116E, 0x11AB] }, +{ source: [0xD6C9], NFC: [0xD6C9], NFD: [0x1112, 0x116E, 0x11AC], NFKC: [0xD6C9], NFKD: [0x1112, 0x116E, 0x11AC] }, +{ source: [0xD6CA], NFC: [0xD6CA], NFD: [0x1112, 0x116E, 0x11AD], NFKC: [0xD6CA], NFKD: [0x1112, 0x116E, 0x11AD] }, +{ source: [0xD6CB], NFC: [0xD6CB], NFD: [0x1112, 0x116E, 0x11AE], NFKC: [0xD6CB], NFKD: [0x1112, 0x116E, 0x11AE] }, +{ source: [0xD6CC], NFC: [0xD6CC], NFD: [0x1112, 0x116E, 0x11AF], NFKC: [0xD6CC], NFKD: [0x1112, 0x116E, 0x11AF] }, +{ source: [0xD6CD], NFC: [0xD6CD], NFD: [0x1112, 0x116E, 0x11B0], NFKC: [0xD6CD], NFKD: [0x1112, 0x116E, 0x11B0] }, +{ source: [0xD6CE], NFC: [0xD6CE], NFD: [0x1112, 0x116E, 0x11B1], NFKC: [0xD6CE], NFKD: [0x1112, 0x116E, 0x11B1] }, +{ source: [0xD6CF], NFC: [0xD6CF], NFD: [0x1112, 0x116E, 0x11B2], NFKC: [0xD6CF], NFKD: [0x1112, 0x116E, 0x11B2] }, +{ source: [0xD6D0], NFC: [0xD6D0], NFD: [0x1112, 0x116E, 0x11B3], NFKC: [0xD6D0], NFKD: [0x1112, 0x116E, 0x11B3] }, +{ source: [0xD6D1], NFC: [0xD6D1], NFD: [0x1112, 0x116E, 0x11B4], NFKC: [0xD6D1], NFKD: [0x1112, 0x116E, 0x11B4] }, +{ source: [0xD6D2], NFC: [0xD6D2], NFD: [0x1112, 0x116E, 0x11B5], NFKC: [0xD6D2], NFKD: [0x1112, 0x116E, 0x11B5] }, +{ source: [0xD6D3], NFC: [0xD6D3], NFD: [0x1112, 0x116E, 0x11B6], NFKC: [0xD6D3], NFKD: [0x1112, 0x116E, 0x11B6] }, +{ source: [0xD6D4], NFC: [0xD6D4], NFD: [0x1112, 0x116E, 0x11B7], NFKC: [0xD6D4], NFKD: [0x1112, 0x116E, 0x11B7] }, +{ source: [0xD6D5], NFC: [0xD6D5], NFD: [0x1112, 0x116E, 0x11B8], NFKC: [0xD6D5], NFKD: [0x1112, 0x116E, 0x11B8] }, +{ source: [0xD6D6], NFC: [0xD6D6], NFD: [0x1112, 0x116E, 0x11B9], NFKC: [0xD6D6], NFKD: [0x1112, 0x116E, 0x11B9] }, +{ source: [0xD6D7], NFC: [0xD6D7], NFD: [0x1112, 0x116E, 0x11BA], NFKC: [0xD6D7], NFKD: [0x1112, 0x116E, 0x11BA] }, +{ source: [0xD6D8], NFC: [0xD6D8], NFD: [0x1112, 0x116E, 0x11BB], NFKC: [0xD6D8], NFKD: [0x1112, 0x116E, 0x11BB] }, +{ source: [0xD6D9], NFC: [0xD6D9], NFD: [0x1112, 0x116E, 0x11BC], NFKC: [0xD6D9], NFKD: [0x1112, 0x116E, 0x11BC] }, +{ source: [0xD6DA], NFC: [0xD6DA], NFD: [0x1112, 0x116E, 0x11BD], NFKC: [0xD6DA], NFKD: [0x1112, 0x116E, 0x11BD] }, +{ source: [0xD6DB], NFC: [0xD6DB], NFD: [0x1112, 0x116E, 0x11BE], NFKC: [0xD6DB], NFKD: [0x1112, 0x116E, 0x11BE] }, +{ source: [0xD6DC], NFC: [0xD6DC], NFD: [0x1112, 0x116E, 0x11BF], NFKC: [0xD6DC], NFKD: [0x1112, 0x116E, 0x11BF] }, +{ source: [0xD6DD], NFC: [0xD6DD], NFD: [0x1112, 0x116E, 0x11C0], NFKC: [0xD6DD], NFKD: [0x1112, 0x116E, 0x11C0] }, +{ source: [0xD6DE], NFC: [0xD6DE], NFD: [0x1112, 0x116E, 0x11C1], NFKC: [0xD6DE], NFKD: [0x1112, 0x116E, 0x11C1] }, +{ source: [0xD6DF], NFC: [0xD6DF], NFD: [0x1112, 0x116E, 0x11C2], NFKC: [0xD6DF], NFKD: [0x1112, 0x116E, 0x11C2] }, +{ source: [0xD6E0], NFC: [0xD6E0], NFD: [0x1112, 0x116F], NFKC: [0xD6E0], NFKD: [0x1112, 0x116F] }, +{ source: [0xD6E1], NFC: [0xD6E1], NFD: [0x1112, 0x116F, 0x11A8], NFKC: [0xD6E1], NFKD: [0x1112, 0x116F, 0x11A8] }, +{ source: [0xD6E2], NFC: [0xD6E2], NFD: [0x1112, 0x116F, 0x11A9], NFKC: [0xD6E2], NFKD: [0x1112, 0x116F, 0x11A9] }, +{ source: [0xD6E3], NFC: [0xD6E3], NFD: [0x1112, 0x116F, 0x11AA], NFKC: [0xD6E3], NFKD: [0x1112, 0x116F, 0x11AA] }, +{ source: [0xD6E4], NFC: [0xD6E4], NFD: [0x1112, 0x116F, 0x11AB], NFKC: [0xD6E4], NFKD: [0x1112, 0x116F, 0x11AB] }, +{ source: [0xD6E5], NFC: [0xD6E5], NFD: [0x1112, 0x116F, 0x11AC], NFKC: [0xD6E5], NFKD: [0x1112, 0x116F, 0x11AC] }, +{ source: [0xD6E6], NFC: [0xD6E6], NFD: [0x1112, 0x116F, 0x11AD], NFKC: [0xD6E6], NFKD: [0x1112, 0x116F, 0x11AD] }, +{ source: [0xD6E7], NFC: [0xD6E7], NFD: [0x1112, 0x116F, 0x11AE], NFKC: [0xD6E7], NFKD: [0x1112, 0x116F, 0x11AE] }, +{ source: [0xD6E8], NFC: [0xD6E8], NFD: [0x1112, 0x116F, 0x11AF], NFKC: [0xD6E8], NFKD: [0x1112, 0x116F, 0x11AF] }, +{ source: [0xD6E9], NFC: [0xD6E9], NFD: [0x1112, 0x116F, 0x11B0], NFKC: [0xD6E9], NFKD: [0x1112, 0x116F, 0x11B0] }, +{ source: [0xD6EA], NFC: [0xD6EA], NFD: [0x1112, 0x116F, 0x11B1], NFKC: [0xD6EA], NFKD: [0x1112, 0x116F, 0x11B1] }, +{ source: [0xD6EB], NFC: [0xD6EB], NFD: [0x1112, 0x116F, 0x11B2], NFKC: [0xD6EB], NFKD: [0x1112, 0x116F, 0x11B2] }, +{ source: [0xD6EC], NFC: [0xD6EC], NFD: [0x1112, 0x116F, 0x11B3], NFKC: [0xD6EC], NFKD: [0x1112, 0x116F, 0x11B3] }, +{ source: [0xD6ED], NFC: [0xD6ED], NFD: [0x1112, 0x116F, 0x11B4], NFKC: [0xD6ED], NFKD: [0x1112, 0x116F, 0x11B4] }, +{ source: [0xD6EE], NFC: [0xD6EE], NFD: [0x1112, 0x116F, 0x11B5], NFKC: [0xD6EE], NFKD: [0x1112, 0x116F, 0x11B5] }, +{ source: [0xD6EF], NFC: [0xD6EF], NFD: [0x1112, 0x116F, 0x11B6], NFKC: [0xD6EF], NFKD: [0x1112, 0x116F, 0x11B6] }, +{ source: [0xD6F0], NFC: [0xD6F0], NFD: [0x1112, 0x116F, 0x11B7], NFKC: [0xD6F0], NFKD: [0x1112, 0x116F, 0x11B7] }, +{ source: [0xD6F1], NFC: [0xD6F1], NFD: [0x1112, 0x116F, 0x11B8], NFKC: [0xD6F1], NFKD: [0x1112, 0x116F, 0x11B8] }, +{ source: [0xD6F2], NFC: [0xD6F2], NFD: [0x1112, 0x116F, 0x11B9], NFKC: [0xD6F2], NFKD: [0x1112, 0x116F, 0x11B9] }, +{ source: [0xD6F3], NFC: [0xD6F3], NFD: [0x1112, 0x116F, 0x11BA], NFKC: [0xD6F3], NFKD: [0x1112, 0x116F, 0x11BA] }, +{ source: [0xD6F4], NFC: [0xD6F4], NFD: [0x1112, 0x116F, 0x11BB], NFKC: [0xD6F4], NFKD: [0x1112, 0x116F, 0x11BB] }, +{ source: [0xD6F5], NFC: [0xD6F5], NFD: [0x1112, 0x116F, 0x11BC], NFKC: [0xD6F5], NFKD: [0x1112, 0x116F, 0x11BC] }, +{ source: [0xD6F6], NFC: [0xD6F6], NFD: [0x1112, 0x116F, 0x11BD], NFKC: [0xD6F6], NFKD: [0x1112, 0x116F, 0x11BD] }, +{ source: [0xD6F7], NFC: [0xD6F7], NFD: [0x1112, 0x116F, 0x11BE], NFKC: [0xD6F7], NFKD: [0x1112, 0x116F, 0x11BE] }, +{ source: [0xD6F8], NFC: [0xD6F8], NFD: [0x1112, 0x116F, 0x11BF], NFKC: [0xD6F8], NFKD: [0x1112, 0x116F, 0x11BF] }, +{ source: [0xD6F9], NFC: [0xD6F9], NFD: [0x1112, 0x116F, 0x11C0], NFKC: [0xD6F9], NFKD: [0x1112, 0x116F, 0x11C0] }, +{ source: [0xD6FA], NFC: [0xD6FA], NFD: [0x1112, 0x116F, 0x11C1], NFKC: [0xD6FA], NFKD: [0x1112, 0x116F, 0x11C1] }, +{ source: [0xD6FB], NFC: [0xD6FB], NFD: [0x1112, 0x116F, 0x11C2], NFKC: [0xD6FB], NFKD: [0x1112, 0x116F, 0x11C2] }, +{ source: [0xD6FC], NFC: [0xD6FC], NFD: [0x1112, 0x1170], NFKC: [0xD6FC], NFKD: [0x1112, 0x1170] }, +{ source: [0xD6FD], NFC: [0xD6FD], NFD: [0x1112, 0x1170, 0x11A8], NFKC: [0xD6FD], NFKD: [0x1112, 0x1170, 0x11A8] }, +{ source: [0xD6FE], NFC: [0xD6FE], NFD: [0x1112, 0x1170, 0x11A9], NFKC: [0xD6FE], NFKD: [0x1112, 0x1170, 0x11A9] }, +{ source: [0xD6FF], NFC: [0xD6FF], NFD: [0x1112, 0x1170, 0x11AA], NFKC: [0xD6FF], NFKD: [0x1112, 0x1170, 0x11AA] }, +{ source: [0xD700], NFC: [0xD700], NFD: [0x1112, 0x1170, 0x11AB], NFKC: [0xD700], NFKD: [0x1112, 0x1170, 0x11AB] }, +{ source: [0xD701], NFC: [0xD701], NFD: [0x1112, 0x1170, 0x11AC], NFKC: [0xD701], NFKD: [0x1112, 0x1170, 0x11AC] }, +{ source: [0xD702], NFC: [0xD702], NFD: [0x1112, 0x1170, 0x11AD], NFKC: [0xD702], NFKD: [0x1112, 0x1170, 0x11AD] }, +{ source: [0xD703], NFC: [0xD703], NFD: [0x1112, 0x1170, 0x11AE], NFKC: [0xD703], NFKD: [0x1112, 0x1170, 0x11AE] }, +{ source: [0xD704], NFC: [0xD704], NFD: [0x1112, 0x1170, 0x11AF], NFKC: [0xD704], NFKD: [0x1112, 0x1170, 0x11AF] }, +{ source: [0xD705], NFC: [0xD705], NFD: [0x1112, 0x1170, 0x11B0], NFKC: [0xD705], NFKD: [0x1112, 0x1170, 0x11B0] }, +{ source: [0xD706], NFC: [0xD706], NFD: [0x1112, 0x1170, 0x11B1], NFKC: [0xD706], NFKD: [0x1112, 0x1170, 0x11B1] }, +{ source: [0xD707], NFC: [0xD707], NFD: [0x1112, 0x1170, 0x11B2], NFKC: [0xD707], NFKD: [0x1112, 0x1170, 0x11B2] }, +{ source: [0xD708], NFC: [0xD708], NFD: [0x1112, 0x1170, 0x11B3], NFKC: [0xD708], NFKD: [0x1112, 0x1170, 0x11B3] }, +{ source: [0xD709], NFC: [0xD709], NFD: [0x1112, 0x1170, 0x11B4], NFKC: [0xD709], NFKD: [0x1112, 0x1170, 0x11B4] }, +{ source: [0xD70A], NFC: [0xD70A], NFD: [0x1112, 0x1170, 0x11B5], NFKC: [0xD70A], NFKD: [0x1112, 0x1170, 0x11B5] }, +{ source: [0xD70B], NFC: [0xD70B], NFD: [0x1112, 0x1170, 0x11B6], NFKC: [0xD70B], NFKD: [0x1112, 0x1170, 0x11B6] }, +{ source: [0xD70C], NFC: [0xD70C], NFD: [0x1112, 0x1170, 0x11B7], NFKC: [0xD70C], NFKD: [0x1112, 0x1170, 0x11B7] }, +{ source: [0xD70D], NFC: [0xD70D], NFD: [0x1112, 0x1170, 0x11B8], NFKC: [0xD70D], NFKD: [0x1112, 0x1170, 0x11B8] }, +{ source: [0xD70E], NFC: [0xD70E], NFD: [0x1112, 0x1170, 0x11B9], NFKC: [0xD70E], NFKD: [0x1112, 0x1170, 0x11B9] }, +{ source: [0xD70F], NFC: [0xD70F], NFD: [0x1112, 0x1170, 0x11BA], NFKC: [0xD70F], NFKD: [0x1112, 0x1170, 0x11BA] }, +{ source: [0xD710], NFC: [0xD710], NFD: [0x1112, 0x1170, 0x11BB], NFKC: [0xD710], NFKD: [0x1112, 0x1170, 0x11BB] }, +{ source: [0xD711], NFC: [0xD711], NFD: [0x1112, 0x1170, 0x11BC], NFKC: [0xD711], NFKD: [0x1112, 0x1170, 0x11BC] }, +{ source: [0xD712], NFC: [0xD712], NFD: [0x1112, 0x1170, 0x11BD], NFKC: [0xD712], NFKD: [0x1112, 0x1170, 0x11BD] }, +{ source: [0xD713], NFC: [0xD713], NFD: [0x1112, 0x1170, 0x11BE], NFKC: [0xD713], NFKD: [0x1112, 0x1170, 0x11BE] }, +{ source: [0xD714], NFC: [0xD714], NFD: [0x1112, 0x1170, 0x11BF], NFKC: [0xD714], NFKD: [0x1112, 0x1170, 0x11BF] }, +{ source: [0xD715], NFC: [0xD715], NFD: [0x1112, 0x1170, 0x11C0], NFKC: [0xD715], NFKD: [0x1112, 0x1170, 0x11C0] }, +{ source: [0xD716], NFC: [0xD716], NFD: [0x1112, 0x1170, 0x11C1], NFKC: [0xD716], NFKD: [0x1112, 0x1170, 0x11C1] }, +{ source: [0xD717], NFC: [0xD717], NFD: [0x1112, 0x1170, 0x11C2], NFKC: [0xD717], NFKD: [0x1112, 0x1170, 0x11C2] }, +{ source: [0xD718], NFC: [0xD718], NFD: [0x1112, 0x1171], NFKC: [0xD718], NFKD: [0x1112, 0x1171] }, +{ source: [0xD719], NFC: [0xD719], NFD: [0x1112, 0x1171, 0x11A8], NFKC: [0xD719], NFKD: [0x1112, 0x1171, 0x11A8] }, +{ source: [0xD71A], NFC: [0xD71A], NFD: [0x1112, 0x1171, 0x11A9], NFKC: [0xD71A], NFKD: [0x1112, 0x1171, 0x11A9] }, +{ source: [0xD71B], NFC: [0xD71B], NFD: [0x1112, 0x1171, 0x11AA], NFKC: [0xD71B], NFKD: [0x1112, 0x1171, 0x11AA] }, +{ source: [0xD71C], NFC: [0xD71C], NFD: [0x1112, 0x1171, 0x11AB], NFKC: [0xD71C], NFKD: [0x1112, 0x1171, 0x11AB] }, +{ source: [0xD71D], NFC: [0xD71D], NFD: [0x1112, 0x1171, 0x11AC], NFKC: [0xD71D], NFKD: [0x1112, 0x1171, 0x11AC] }, +{ source: [0xD71E], NFC: [0xD71E], NFD: [0x1112, 0x1171, 0x11AD], NFKC: [0xD71E], NFKD: [0x1112, 0x1171, 0x11AD] }, +{ source: [0xD71F], NFC: [0xD71F], NFD: [0x1112, 0x1171, 0x11AE], NFKC: [0xD71F], NFKD: [0x1112, 0x1171, 0x11AE] }, +{ source: [0xD720], NFC: [0xD720], NFD: [0x1112, 0x1171, 0x11AF], NFKC: [0xD720], NFKD: [0x1112, 0x1171, 0x11AF] }, +{ source: [0xD721], NFC: [0xD721], NFD: [0x1112, 0x1171, 0x11B0], NFKC: [0xD721], NFKD: [0x1112, 0x1171, 0x11B0] }, +{ source: [0xD722], NFC: [0xD722], NFD: [0x1112, 0x1171, 0x11B1], NFKC: [0xD722], NFKD: [0x1112, 0x1171, 0x11B1] }, +{ source: [0xD723], NFC: [0xD723], NFD: [0x1112, 0x1171, 0x11B2], NFKC: [0xD723], NFKD: [0x1112, 0x1171, 0x11B2] }, +{ source: [0xD724], NFC: [0xD724], NFD: [0x1112, 0x1171, 0x11B3], NFKC: [0xD724], NFKD: [0x1112, 0x1171, 0x11B3] }, +{ source: [0xD725], NFC: [0xD725], NFD: [0x1112, 0x1171, 0x11B4], NFKC: [0xD725], NFKD: [0x1112, 0x1171, 0x11B4] }, +{ source: [0xD726], NFC: [0xD726], NFD: [0x1112, 0x1171, 0x11B5], NFKC: [0xD726], NFKD: [0x1112, 0x1171, 0x11B5] }, +{ source: [0xD727], NFC: [0xD727], NFD: [0x1112, 0x1171, 0x11B6], NFKC: [0xD727], NFKD: [0x1112, 0x1171, 0x11B6] }, +{ source: [0xD728], NFC: [0xD728], NFD: [0x1112, 0x1171, 0x11B7], NFKC: [0xD728], NFKD: [0x1112, 0x1171, 0x11B7] }, +{ source: [0xD729], NFC: [0xD729], NFD: [0x1112, 0x1171, 0x11B8], NFKC: [0xD729], NFKD: [0x1112, 0x1171, 0x11B8] }, +{ source: [0xD72A], NFC: [0xD72A], NFD: [0x1112, 0x1171, 0x11B9], NFKC: [0xD72A], NFKD: [0x1112, 0x1171, 0x11B9] }, +{ source: [0xD72B], NFC: [0xD72B], NFD: [0x1112, 0x1171, 0x11BA], NFKC: [0xD72B], NFKD: [0x1112, 0x1171, 0x11BA] }, +{ source: [0xD72C], NFC: [0xD72C], NFD: [0x1112, 0x1171, 0x11BB], NFKC: [0xD72C], NFKD: [0x1112, 0x1171, 0x11BB] }, +{ source: [0xD72D], NFC: [0xD72D], NFD: [0x1112, 0x1171, 0x11BC], NFKC: [0xD72D], NFKD: [0x1112, 0x1171, 0x11BC] }, +{ source: [0xD72E], NFC: [0xD72E], NFD: [0x1112, 0x1171, 0x11BD], NFKC: [0xD72E], NFKD: [0x1112, 0x1171, 0x11BD] }, +{ source: [0xD72F], NFC: [0xD72F], NFD: [0x1112, 0x1171, 0x11BE], NFKC: [0xD72F], NFKD: [0x1112, 0x1171, 0x11BE] }, +{ source: [0xD730], NFC: [0xD730], NFD: [0x1112, 0x1171, 0x11BF], NFKC: [0xD730], NFKD: [0x1112, 0x1171, 0x11BF] }, +{ source: [0xD731], NFC: [0xD731], NFD: [0x1112, 0x1171, 0x11C0], NFKC: [0xD731], NFKD: [0x1112, 0x1171, 0x11C0] }, +{ source: [0xD732], NFC: [0xD732], NFD: [0x1112, 0x1171, 0x11C1], NFKC: [0xD732], NFKD: [0x1112, 0x1171, 0x11C1] }, +{ source: [0xD733], NFC: [0xD733], NFD: [0x1112, 0x1171, 0x11C2], NFKC: [0xD733], NFKD: [0x1112, 0x1171, 0x11C2] }, +{ source: [0xD734], NFC: [0xD734], NFD: [0x1112, 0x1172], NFKC: [0xD734], NFKD: [0x1112, 0x1172] }, +{ source: [0xD735], NFC: [0xD735], NFD: [0x1112, 0x1172, 0x11A8], NFKC: [0xD735], NFKD: [0x1112, 0x1172, 0x11A8] }, +{ source: [0xD736], NFC: [0xD736], NFD: [0x1112, 0x1172, 0x11A9], NFKC: [0xD736], NFKD: [0x1112, 0x1172, 0x11A9] }, +{ source: [0xD737], NFC: [0xD737], NFD: [0x1112, 0x1172, 0x11AA], NFKC: [0xD737], NFKD: [0x1112, 0x1172, 0x11AA] }, +{ source: [0xD738], NFC: [0xD738], NFD: [0x1112, 0x1172, 0x11AB], NFKC: [0xD738], NFKD: [0x1112, 0x1172, 0x11AB] }, +{ source: [0xD739], NFC: [0xD739], NFD: [0x1112, 0x1172, 0x11AC], NFKC: [0xD739], NFKD: [0x1112, 0x1172, 0x11AC] }, +{ source: [0xD73A], NFC: [0xD73A], NFD: [0x1112, 0x1172, 0x11AD], NFKC: [0xD73A], NFKD: [0x1112, 0x1172, 0x11AD] }, +{ source: [0xD73B], NFC: [0xD73B], NFD: [0x1112, 0x1172, 0x11AE], NFKC: [0xD73B], NFKD: [0x1112, 0x1172, 0x11AE] }, +{ source: [0xD73C], NFC: [0xD73C], NFD: [0x1112, 0x1172, 0x11AF], NFKC: [0xD73C], NFKD: [0x1112, 0x1172, 0x11AF] }, +{ source: [0xD73D], NFC: [0xD73D], NFD: [0x1112, 0x1172, 0x11B0], NFKC: [0xD73D], NFKD: [0x1112, 0x1172, 0x11B0] }, +{ source: [0xD73E], NFC: [0xD73E], NFD: [0x1112, 0x1172, 0x11B1], NFKC: [0xD73E], NFKD: [0x1112, 0x1172, 0x11B1] }, +{ source: [0xD73F], NFC: [0xD73F], NFD: [0x1112, 0x1172, 0x11B2], NFKC: [0xD73F], NFKD: [0x1112, 0x1172, 0x11B2] }, +{ source: [0xD740], NFC: [0xD740], NFD: [0x1112, 0x1172, 0x11B3], NFKC: [0xD740], NFKD: [0x1112, 0x1172, 0x11B3] }, +{ source: [0xD741], NFC: [0xD741], NFD: [0x1112, 0x1172, 0x11B4], NFKC: [0xD741], NFKD: [0x1112, 0x1172, 0x11B4] }, +{ source: [0xD742], NFC: [0xD742], NFD: [0x1112, 0x1172, 0x11B5], NFKC: [0xD742], NFKD: [0x1112, 0x1172, 0x11B5] }, +{ source: [0xD743], NFC: [0xD743], NFD: [0x1112, 0x1172, 0x11B6], NFKC: [0xD743], NFKD: [0x1112, 0x1172, 0x11B6] }, +{ source: [0xD744], NFC: [0xD744], NFD: [0x1112, 0x1172, 0x11B7], NFKC: [0xD744], NFKD: [0x1112, 0x1172, 0x11B7] }, +{ source: [0xD745], NFC: [0xD745], NFD: [0x1112, 0x1172, 0x11B8], NFKC: [0xD745], NFKD: [0x1112, 0x1172, 0x11B8] }, +{ source: [0xD746], NFC: [0xD746], NFD: [0x1112, 0x1172, 0x11B9], NFKC: [0xD746], NFKD: [0x1112, 0x1172, 0x11B9] }, +{ source: [0xD747], NFC: [0xD747], NFD: [0x1112, 0x1172, 0x11BA], NFKC: [0xD747], NFKD: [0x1112, 0x1172, 0x11BA] }, +{ source: [0xD748], NFC: [0xD748], NFD: [0x1112, 0x1172, 0x11BB], NFKC: [0xD748], NFKD: [0x1112, 0x1172, 0x11BB] }, +{ source: [0xD749], NFC: [0xD749], NFD: [0x1112, 0x1172, 0x11BC], NFKC: [0xD749], NFKD: [0x1112, 0x1172, 0x11BC] }, +{ source: [0xD74A], NFC: [0xD74A], NFD: [0x1112, 0x1172, 0x11BD], NFKC: [0xD74A], NFKD: [0x1112, 0x1172, 0x11BD] }, +{ source: [0xD74B], NFC: [0xD74B], NFD: [0x1112, 0x1172, 0x11BE], NFKC: [0xD74B], NFKD: [0x1112, 0x1172, 0x11BE] }, +{ source: [0xD74C], NFC: [0xD74C], NFD: [0x1112, 0x1172, 0x11BF], NFKC: [0xD74C], NFKD: [0x1112, 0x1172, 0x11BF] }, +{ source: [0xD74D], NFC: [0xD74D], NFD: [0x1112, 0x1172, 0x11C0], NFKC: [0xD74D], NFKD: [0x1112, 0x1172, 0x11C0] }, +{ source: [0xD74E], NFC: [0xD74E], NFD: [0x1112, 0x1172, 0x11C1], NFKC: [0xD74E], NFKD: [0x1112, 0x1172, 0x11C1] }, +{ source: [0xD74F], NFC: [0xD74F], NFD: [0x1112, 0x1172, 0x11C2], NFKC: [0xD74F], NFKD: [0x1112, 0x1172, 0x11C2] }, +{ source: [0xD750], NFC: [0xD750], NFD: [0x1112, 0x1173], NFKC: [0xD750], NFKD: [0x1112, 0x1173] }, +{ source: [0xD751], NFC: [0xD751], NFD: [0x1112, 0x1173, 0x11A8], NFKC: [0xD751], NFKD: [0x1112, 0x1173, 0x11A8] }, +{ source: [0xD752], NFC: [0xD752], NFD: [0x1112, 0x1173, 0x11A9], NFKC: [0xD752], NFKD: [0x1112, 0x1173, 0x11A9] }, +{ source: [0xD753], NFC: [0xD753], NFD: [0x1112, 0x1173, 0x11AA], NFKC: [0xD753], NFKD: [0x1112, 0x1173, 0x11AA] }, +{ source: [0xD754], NFC: [0xD754], NFD: [0x1112, 0x1173, 0x11AB], NFKC: [0xD754], NFKD: [0x1112, 0x1173, 0x11AB] }, +{ source: [0xD755], NFC: [0xD755], NFD: [0x1112, 0x1173, 0x11AC], NFKC: [0xD755], NFKD: [0x1112, 0x1173, 0x11AC] }, +{ source: [0xD756], NFC: [0xD756], NFD: [0x1112, 0x1173, 0x11AD], NFKC: [0xD756], NFKD: [0x1112, 0x1173, 0x11AD] }, +{ source: [0xD757], NFC: [0xD757], NFD: [0x1112, 0x1173, 0x11AE], NFKC: [0xD757], NFKD: [0x1112, 0x1173, 0x11AE] }, +{ source: [0xD758], NFC: [0xD758], NFD: [0x1112, 0x1173, 0x11AF], NFKC: [0xD758], NFKD: [0x1112, 0x1173, 0x11AF] }, +{ source: [0xD759], NFC: [0xD759], NFD: [0x1112, 0x1173, 0x11B0], NFKC: [0xD759], NFKD: [0x1112, 0x1173, 0x11B0] }, +{ source: [0xD75A], NFC: [0xD75A], NFD: [0x1112, 0x1173, 0x11B1], NFKC: [0xD75A], NFKD: [0x1112, 0x1173, 0x11B1] }, +{ source: [0xD75B], NFC: [0xD75B], NFD: [0x1112, 0x1173, 0x11B2], NFKC: [0xD75B], NFKD: [0x1112, 0x1173, 0x11B2] }, +{ source: [0xD75C], NFC: [0xD75C], NFD: [0x1112, 0x1173, 0x11B3], NFKC: [0xD75C], NFKD: [0x1112, 0x1173, 0x11B3] }, +{ source: [0xD75D], NFC: [0xD75D], NFD: [0x1112, 0x1173, 0x11B4], NFKC: [0xD75D], NFKD: [0x1112, 0x1173, 0x11B4] }, +{ source: [0xD75E], NFC: [0xD75E], NFD: [0x1112, 0x1173, 0x11B5], NFKC: [0xD75E], NFKD: [0x1112, 0x1173, 0x11B5] }, +{ source: [0xD75F], NFC: [0xD75F], NFD: [0x1112, 0x1173, 0x11B6], NFKC: [0xD75F], NFKD: [0x1112, 0x1173, 0x11B6] }, +{ source: [0xD760], NFC: [0xD760], NFD: [0x1112, 0x1173, 0x11B7], NFKC: [0xD760], NFKD: [0x1112, 0x1173, 0x11B7] }, +{ source: [0xD761], NFC: [0xD761], NFD: [0x1112, 0x1173, 0x11B8], NFKC: [0xD761], NFKD: [0x1112, 0x1173, 0x11B8] }, +{ source: [0xD762], NFC: [0xD762], NFD: [0x1112, 0x1173, 0x11B9], NFKC: [0xD762], NFKD: [0x1112, 0x1173, 0x11B9] }, +{ source: [0xD763], NFC: [0xD763], NFD: [0x1112, 0x1173, 0x11BA], NFKC: [0xD763], NFKD: [0x1112, 0x1173, 0x11BA] }, +{ source: [0xD764], NFC: [0xD764], NFD: [0x1112, 0x1173, 0x11BB], NFKC: [0xD764], NFKD: [0x1112, 0x1173, 0x11BB] }, +{ source: [0xD765], NFC: [0xD765], NFD: [0x1112, 0x1173, 0x11BC], NFKC: [0xD765], NFKD: [0x1112, 0x1173, 0x11BC] }, +{ source: [0xD766], NFC: [0xD766], NFD: [0x1112, 0x1173, 0x11BD], NFKC: [0xD766], NFKD: [0x1112, 0x1173, 0x11BD] }, +{ source: [0xD767], NFC: [0xD767], NFD: [0x1112, 0x1173, 0x11BE], NFKC: [0xD767], NFKD: [0x1112, 0x1173, 0x11BE] }, +{ source: [0xD768], NFC: [0xD768], NFD: [0x1112, 0x1173, 0x11BF], NFKC: [0xD768], NFKD: [0x1112, 0x1173, 0x11BF] }, +{ source: [0xD769], NFC: [0xD769], NFD: [0x1112, 0x1173, 0x11C0], NFKC: [0xD769], NFKD: [0x1112, 0x1173, 0x11C0] }, +{ source: [0xD76A], NFC: [0xD76A], NFD: [0x1112, 0x1173, 0x11C1], NFKC: [0xD76A], NFKD: [0x1112, 0x1173, 0x11C1] }, +{ source: [0xD76B], NFC: [0xD76B], NFD: [0x1112, 0x1173, 0x11C2], NFKC: [0xD76B], NFKD: [0x1112, 0x1173, 0x11C2] }, +{ source: [0xD76C], NFC: [0xD76C], NFD: [0x1112, 0x1174], NFKC: [0xD76C], NFKD: [0x1112, 0x1174] }, +{ source: [0xD76D], NFC: [0xD76D], NFD: [0x1112, 0x1174, 0x11A8], NFKC: [0xD76D], NFKD: [0x1112, 0x1174, 0x11A8] }, +{ source: [0xD76E], NFC: [0xD76E], NFD: [0x1112, 0x1174, 0x11A9], NFKC: [0xD76E], NFKD: [0x1112, 0x1174, 0x11A9] }, +{ source: [0xD76F], NFC: [0xD76F], NFD: [0x1112, 0x1174, 0x11AA], NFKC: [0xD76F], NFKD: [0x1112, 0x1174, 0x11AA] }, +{ source: [0xD770], NFC: [0xD770], NFD: [0x1112, 0x1174, 0x11AB], NFKC: [0xD770], NFKD: [0x1112, 0x1174, 0x11AB] }, +{ source: [0xD771], NFC: [0xD771], NFD: [0x1112, 0x1174, 0x11AC], NFKC: [0xD771], NFKD: [0x1112, 0x1174, 0x11AC] }, +{ source: [0xD772], NFC: [0xD772], NFD: [0x1112, 0x1174, 0x11AD], NFKC: [0xD772], NFKD: [0x1112, 0x1174, 0x11AD] }, +{ source: [0xD773], NFC: [0xD773], NFD: [0x1112, 0x1174, 0x11AE], NFKC: [0xD773], NFKD: [0x1112, 0x1174, 0x11AE] }, +{ source: [0xD774], NFC: [0xD774], NFD: [0x1112, 0x1174, 0x11AF], NFKC: [0xD774], NFKD: [0x1112, 0x1174, 0x11AF] }, +{ source: [0xD775], NFC: [0xD775], NFD: [0x1112, 0x1174, 0x11B0], NFKC: [0xD775], NFKD: [0x1112, 0x1174, 0x11B0] }, +{ source: [0xD776], NFC: [0xD776], NFD: [0x1112, 0x1174, 0x11B1], NFKC: [0xD776], NFKD: [0x1112, 0x1174, 0x11B1] }, +{ source: [0xD777], NFC: [0xD777], NFD: [0x1112, 0x1174, 0x11B2], NFKC: [0xD777], NFKD: [0x1112, 0x1174, 0x11B2] }, +{ source: [0xD778], NFC: [0xD778], NFD: [0x1112, 0x1174, 0x11B3], NFKC: [0xD778], NFKD: [0x1112, 0x1174, 0x11B3] }, +{ source: [0xD779], NFC: [0xD779], NFD: [0x1112, 0x1174, 0x11B4], NFKC: [0xD779], NFKD: [0x1112, 0x1174, 0x11B4] }, +{ source: [0xD77A], NFC: [0xD77A], NFD: [0x1112, 0x1174, 0x11B5], NFKC: [0xD77A], NFKD: [0x1112, 0x1174, 0x11B5] }, +{ source: [0xD77B], NFC: [0xD77B], NFD: [0x1112, 0x1174, 0x11B6], NFKC: [0xD77B], NFKD: [0x1112, 0x1174, 0x11B6] }, +{ source: [0xD77C], NFC: [0xD77C], NFD: [0x1112, 0x1174, 0x11B7], NFKC: [0xD77C], NFKD: [0x1112, 0x1174, 0x11B7] }, +{ source: [0xD77D], NFC: [0xD77D], NFD: [0x1112, 0x1174, 0x11B8], NFKC: [0xD77D], NFKD: [0x1112, 0x1174, 0x11B8] }, +{ source: [0xD77E], NFC: [0xD77E], NFD: [0x1112, 0x1174, 0x11B9], NFKC: [0xD77E], NFKD: [0x1112, 0x1174, 0x11B9] }, +{ source: [0xD77F], NFC: [0xD77F], NFD: [0x1112, 0x1174, 0x11BA], NFKC: [0xD77F], NFKD: [0x1112, 0x1174, 0x11BA] }, +{ source: [0xD780], NFC: [0xD780], NFD: [0x1112, 0x1174, 0x11BB], NFKC: [0xD780], NFKD: [0x1112, 0x1174, 0x11BB] }, +{ source: [0xD781], NFC: [0xD781], NFD: [0x1112, 0x1174, 0x11BC], NFKC: [0xD781], NFKD: [0x1112, 0x1174, 0x11BC] }, +{ source: [0xD782], NFC: [0xD782], NFD: [0x1112, 0x1174, 0x11BD], NFKC: [0xD782], NFKD: [0x1112, 0x1174, 0x11BD] }, +{ source: [0xD783], NFC: [0xD783], NFD: [0x1112, 0x1174, 0x11BE], NFKC: [0xD783], NFKD: [0x1112, 0x1174, 0x11BE] }, +{ source: [0xD784], NFC: [0xD784], NFD: [0x1112, 0x1174, 0x11BF], NFKC: [0xD784], NFKD: [0x1112, 0x1174, 0x11BF] }, +{ source: [0xD785], NFC: [0xD785], NFD: [0x1112, 0x1174, 0x11C0], NFKC: [0xD785], NFKD: [0x1112, 0x1174, 0x11C0] }, +{ source: [0xD786], NFC: [0xD786], NFD: [0x1112, 0x1174, 0x11C1], NFKC: [0xD786], NFKD: [0x1112, 0x1174, 0x11C1] }, +{ source: [0xD787], NFC: [0xD787], NFD: [0x1112, 0x1174, 0x11C2], NFKC: [0xD787], NFKD: [0x1112, 0x1174, 0x11C2] }, +{ source: [0xD788], NFC: [0xD788], NFD: [0x1112, 0x1175], NFKC: [0xD788], NFKD: [0x1112, 0x1175] }, +{ source: [0xD789], NFC: [0xD789], NFD: [0x1112, 0x1175, 0x11A8], NFKC: [0xD789], NFKD: [0x1112, 0x1175, 0x11A8] }, +{ source: [0xD78A], NFC: [0xD78A], NFD: [0x1112, 0x1175, 0x11A9], NFKC: [0xD78A], NFKD: [0x1112, 0x1175, 0x11A9] }, +{ source: [0xD78B], NFC: [0xD78B], NFD: [0x1112, 0x1175, 0x11AA], NFKC: [0xD78B], NFKD: [0x1112, 0x1175, 0x11AA] }, +{ source: [0xD78C], NFC: [0xD78C], NFD: [0x1112, 0x1175, 0x11AB], NFKC: [0xD78C], NFKD: [0x1112, 0x1175, 0x11AB] }, +{ source: [0xD78D], NFC: [0xD78D], NFD: [0x1112, 0x1175, 0x11AC], NFKC: [0xD78D], NFKD: [0x1112, 0x1175, 0x11AC] }, +{ source: [0xD78E], NFC: [0xD78E], NFD: [0x1112, 0x1175, 0x11AD], NFKC: [0xD78E], NFKD: [0x1112, 0x1175, 0x11AD] }, +{ source: [0xD78F], NFC: [0xD78F], NFD: [0x1112, 0x1175, 0x11AE], NFKC: [0xD78F], NFKD: [0x1112, 0x1175, 0x11AE] }, +{ source: [0xD790], NFC: [0xD790], NFD: [0x1112, 0x1175, 0x11AF], NFKC: [0xD790], NFKD: [0x1112, 0x1175, 0x11AF] }, +{ source: [0xD791], NFC: [0xD791], NFD: [0x1112, 0x1175, 0x11B0], NFKC: [0xD791], NFKD: [0x1112, 0x1175, 0x11B0] }, +{ source: [0xD792], NFC: [0xD792], NFD: [0x1112, 0x1175, 0x11B1], NFKC: [0xD792], NFKD: [0x1112, 0x1175, 0x11B1] }, +{ source: [0xD793], NFC: [0xD793], NFD: [0x1112, 0x1175, 0x11B2], NFKC: [0xD793], NFKD: [0x1112, 0x1175, 0x11B2] }, +{ source: [0xD794], NFC: [0xD794], NFD: [0x1112, 0x1175, 0x11B3], NFKC: [0xD794], NFKD: [0x1112, 0x1175, 0x11B3] }, +{ source: [0xD795], NFC: [0xD795], NFD: [0x1112, 0x1175, 0x11B4], NFKC: [0xD795], NFKD: [0x1112, 0x1175, 0x11B4] }, +{ source: [0xD796], NFC: [0xD796], NFD: [0x1112, 0x1175, 0x11B5], NFKC: [0xD796], NFKD: [0x1112, 0x1175, 0x11B5] }, +{ source: [0xD797], NFC: [0xD797], NFD: [0x1112, 0x1175, 0x11B6], NFKC: [0xD797], NFKD: [0x1112, 0x1175, 0x11B6] }, +{ source: [0xD798], NFC: [0xD798], NFD: [0x1112, 0x1175, 0x11B7], NFKC: [0xD798], NFKD: [0x1112, 0x1175, 0x11B7] }, +{ source: [0xD799], NFC: [0xD799], NFD: [0x1112, 0x1175, 0x11B8], NFKC: [0xD799], NFKD: [0x1112, 0x1175, 0x11B8] }, +{ source: [0xD79A], NFC: [0xD79A], NFD: [0x1112, 0x1175, 0x11B9], NFKC: [0xD79A], NFKD: [0x1112, 0x1175, 0x11B9] }, +{ source: [0xD79B], NFC: [0xD79B], NFD: [0x1112, 0x1175, 0x11BA], NFKC: [0xD79B], NFKD: [0x1112, 0x1175, 0x11BA] }, +{ source: [0xD79C], NFC: [0xD79C], NFD: [0x1112, 0x1175, 0x11BB], NFKC: [0xD79C], NFKD: [0x1112, 0x1175, 0x11BB] }, +{ source: [0xD79D], NFC: [0xD79D], NFD: [0x1112, 0x1175, 0x11BC], NFKC: [0xD79D], NFKD: [0x1112, 0x1175, 0x11BC] }, +{ source: [0xD79E], NFC: [0xD79E], NFD: [0x1112, 0x1175, 0x11BD], NFKC: [0xD79E], NFKD: [0x1112, 0x1175, 0x11BD] }, +{ source: [0xD79F], NFC: [0xD79F], NFD: [0x1112, 0x1175, 0x11BE], NFKC: [0xD79F], NFKD: [0x1112, 0x1175, 0x11BE] }, +{ source: [0xD7A0], NFC: [0xD7A0], NFD: [0x1112, 0x1175, 0x11BF], NFKC: [0xD7A0], NFKD: [0x1112, 0x1175, 0x11BF] }, +{ source: [0xD7A1], NFC: [0xD7A1], NFD: [0x1112, 0x1175, 0x11C0], NFKC: [0xD7A1], NFKD: [0x1112, 0x1175, 0x11C0] }, +{ source: [0xD7A2], NFC: [0xD7A2], NFD: [0x1112, 0x1175, 0x11C1], NFKC: [0xD7A2], NFKD: [0x1112, 0x1175, 0x11C1] }, +{ source: [0xD7A3], NFC: [0xD7A3], NFD: [0x1112, 0x1175, 0x11C2], NFKC: [0xD7A3], NFKD: [0x1112, 0x1175, 0x11C2] }, +{ source: [0xF900], NFC: [0x8C48], NFD: [0x8C48], NFKC: [0x8C48], NFKD: [0x8C48] }, +{ source: [0xF901], NFC: [0x66F4], NFD: [0x66F4], NFKC: [0x66F4], NFKD: [0x66F4] }, +{ source: [0xF902], NFC: [0x8ECA], NFD: [0x8ECA], NFKC: [0x8ECA], NFKD: [0x8ECA] }, +{ source: [0xF903], NFC: [0x8CC8], NFD: [0x8CC8], NFKC: [0x8CC8], NFKD: [0x8CC8] }, +{ source: [0xF904], NFC: [0x6ED1], NFD: [0x6ED1], NFKC: [0x6ED1], NFKD: [0x6ED1] }, +{ source: [0xF905], NFC: [0x4E32], NFD: [0x4E32], NFKC: [0x4E32], NFKD: [0x4E32] }, +{ source: [0xF906], NFC: [0x53E5], NFD: [0x53E5], NFKC: [0x53E5], NFKD: [0x53E5] }, +{ source: [0xF907], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0xF908], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0xF909], NFC: [0x5951], NFD: [0x5951], NFKC: [0x5951], NFKD: [0x5951] }, +{ source: [0xF90A], NFC: [0x91D1], NFD: [0x91D1], NFKC: [0x91D1], NFKD: [0x91D1] }, +{ source: [0xF90B], NFC: [0x5587], NFD: [0x5587], NFKC: [0x5587], NFKD: [0x5587] }, +{ source: [0xF90C], NFC: [0x5948], NFD: [0x5948], NFKC: [0x5948], NFKD: [0x5948] }, +{ source: [0xF90D], NFC: [0x61F6], NFD: [0x61F6], NFKC: [0x61F6], NFKD: [0x61F6] }, +{ source: [0xF90E], NFC: [0x7669], NFD: [0x7669], NFKC: [0x7669], NFKD: [0x7669] }, +{ source: [0xF90F], NFC: [0x7F85], NFD: [0x7F85], NFKC: [0x7F85], NFKD: [0x7F85] }, +{ source: [0xF910], NFC: [0x863F], NFD: [0x863F], NFKC: [0x863F], NFKD: [0x863F] }, +{ source: [0xF911], NFC: [0x87BA], NFD: [0x87BA], NFKC: [0x87BA], NFKD: [0x87BA] }, +{ source: [0xF912], NFC: [0x88F8], NFD: [0x88F8], NFKC: [0x88F8], NFKD: [0x88F8] }, +{ source: [0xF913], NFC: [0x908F], NFD: [0x908F], NFKC: [0x908F], NFKD: [0x908F] }, +{ source: [0xF914], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] }, +{ source: [0xF915], NFC: [0x6D1B], NFD: [0x6D1B], NFKC: [0x6D1B], NFKD: [0x6D1B] }, +{ source: [0xF916], NFC: [0x70D9], NFD: [0x70D9], NFKC: [0x70D9], NFKD: [0x70D9] }, +{ source: [0xF917], NFC: [0x73DE], NFD: [0x73DE], NFKC: [0x73DE], NFKD: [0x73DE] }, +{ source: [0xF918], NFC: [0x843D], NFD: [0x843D], NFKC: [0x843D], NFKD: [0x843D] }, +{ source: [0xF919], NFC: [0x916A], NFD: [0x916A], NFKC: [0x916A], NFKD: [0x916A] }, +{ source: [0xF91A], NFC: [0x99F1], NFD: [0x99F1], NFKC: [0x99F1], NFKD: [0x99F1] }, +{ source: [0xF91B], NFC: [0x4E82], NFD: [0x4E82], NFKC: [0x4E82], NFKD: [0x4E82] }, +{ source: [0xF91C], NFC: [0x5375], NFD: [0x5375], NFKC: [0x5375], NFKD: [0x5375] }, +{ source: [0xF91D], NFC: [0x6B04], NFD: [0x6B04], NFKC: [0x6B04], NFKD: [0x6B04] }, +{ source: [0xF91E], NFC: [0x721B], NFD: [0x721B], NFKC: [0x721B], NFKD: [0x721B] }, +{ source: [0xF91F], NFC: [0x862D], NFD: [0x862D], NFKC: [0x862D], NFKD: [0x862D] }, +{ source: [0xF920], NFC: [0x9E1E], NFD: [0x9E1E], NFKC: [0x9E1E], NFKD: [0x9E1E] }, +{ source: [0xF921], NFC: [0x5D50], NFD: [0x5D50], NFKC: [0x5D50], NFKD: [0x5D50] }, +{ source: [0xF922], NFC: [0x6FEB], NFD: [0x6FEB], NFKC: [0x6FEB], NFKD: [0x6FEB] }, +{ source: [0xF923], NFC: [0x85CD], NFD: [0x85CD], NFKC: [0x85CD], NFKD: [0x85CD] }, +{ source: [0xF924], NFC: [0x8964], NFD: [0x8964], NFKC: [0x8964], NFKD: [0x8964] }, +{ source: [0xF925], NFC: [0x62C9], NFD: [0x62C9], NFKC: [0x62C9], NFKD: [0x62C9] }, +{ source: [0xF926], NFC: [0x81D8], NFD: [0x81D8], NFKC: [0x81D8], NFKD: [0x81D8] }, +{ source: [0xF927], NFC: [0x881F], NFD: [0x881F], NFKC: [0x881F], NFKD: [0x881F] }, +{ source: [0xF928], NFC: [0x5ECA], NFD: [0x5ECA], NFKC: [0x5ECA], NFKD: [0x5ECA] }, +{ source: [0xF929], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] }, +{ source: [0xF92A], NFC: [0x6D6A], NFD: [0x6D6A], NFKC: [0x6D6A], NFKD: [0x6D6A] }, +{ source: [0xF92B], NFC: [0x72FC], NFD: [0x72FC], NFKC: [0x72FC], NFKD: [0x72FC] }, +{ source: [0xF92C], NFC: [0x90CE], NFD: [0x90CE], NFKC: [0x90CE], NFKD: [0x90CE] }, +{ source: [0xF92D], NFC: [0x4F86], NFD: [0x4F86], NFKC: [0x4F86], NFKD: [0x4F86] }, +{ source: [0xF92E], NFC: [0x51B7], NFD: [0x51B7], NFKC: [0x51B7], NFKD: [0x51B7] }, +{ source: [0xF92F], NFC: [0x52DE], NFD: [0x52DE], NFKC: [0x52DE], NFKD: [0x52DE] }, +{ source: [0xF930], NFC: [0x64C4], NFD: [0x64C4], NFKC: [0x64C4], NFKD: [0x64C4] }, +{ source: [0xF931], NFC: [0x6AD3], NFD: [0x6AD3], NFKC: [0x6AD3], NFKD: [0x6AD3] }, +{ source: [0xF932], NFC: [0x7210], NFD: [0x7210], NFKC: [0x7210], NFKD: [0x7210] }, +{ source: [0xF933], NFC: [0x76E7], NFD: [0x76E7], NFKC: [0x76E7], NFKD: [0x76E7] }, +{ source: [0xF934], NFC: [0x8001], NFD: [0x8001], NFKC: [0x8001], NFKD: [0x8001] }, +{ source: [0xF935], NFC: [0x8606], NFD: [0x8606], NFKC: [0x8606], NFKD: [0x8606] }, +{ source: [0xF936], NFC: [0x865C], NFD: [0x865C], NFKC: [0x865C], NFKD: [0x865C] }, +{ source: [0xF937], NFC: [0x8DEF], NFD: [0x8DEF], NFKC: [0x8DEF], NFKD: [0x8DEF] }, +{ source: [0xF938], NFC: [0x9732], NFD: [0x9732], NFKC: [0x9732], NFKD: [0x9732] }, +{ source: [0xF939], NFC: [0x9B6F], NFD: [0x9B6F], NFKC: [0x9B6F], NFKD: [0x9B6F] }, +{ source: [0xF93A], NFC: [0x9DFA], NFD: [0x9DFA], NFKC: [0x9DFA], NFKD: [0x9DFA] }, +{ source: [0xF93B], NFC: [0x788C], NFD: [0x788C], NFKC: [0x788C], NFKD: [0x788C] }, +{ source: [0xF93C], NFC: [0x797F], NFD: [0x797F], NFKC: [0x797F], NFKD: [0x797F] }, +{ source: [0xF93D], NFC: [0x7DA0], NFD: [0x7DA0], NFKC: [0x7DA0], NFKD: [0x7DA0] }, +{ source: [0xF93E], NFC: [0x83C9], NFD: [0x83C9], NFKC: [0x83C9], NFKD: [0x83C9] }, +{ source: [0xF93F], NFC: [0x9304], NFD: [0x9304], NFKC: [0x9304], NFKD: [0x9304] }, +{ source: [0xF940], NFC: [0x9E7F], NFD: [0x9E7F], NFKC: [0x9E7F], NFKD: [0x9E7F] }, +{ source: [0xF941], NFC: [0x8AD6], NFD: [0x8AD6], NFKC: [0x8AD6], NFKD: [0x8AD6] }, +{ source: [0xF942], NFC: [0x58DF], NFD: [0x58DF], NFKC: [0x58DF], NFKD: [0x58DF] }, +{ source: [0xF943], NFC: [0x5F04], NFD: [0x5F04], NFKC: [0x5F04], NFKD: [0x5F04] }, +{ source: [0xF944], NFC: [0x7C60], NFD: [0x7C60], NFKC: [0x7C60], NFKD: [0x7C60] }, +{ source: [0xF945], NFC: [0x807E], NFD: [0x807E], NFKC: [0x807E], NFKD: [0x807E] }, +{ source: [0xF946], NFC: [0x7262], NFD: [0x7262], NFKC: [0x7262], NFKD: [0x7262] }, +{ source: [0xF947], NFC: [0x78CA], NFD: [0x78CA], NFKC: [0x78CA], NFKD: [0x78CA] }, +{ source: [0xF948], NFC: [0x8CC2], NFD: [0x8CC2], NFKC: [0x8CC2], NFKD: [0x8CC2] }, +{ source: [0xF949], NFC: [0x96F7], NFD: [0x96F7], NFKC: [0x96F7], NFKD: [0x96F7] }, +{ source: [0xF94A], NFC: [0x58D8], NFD: [0x58D8], NFKC: [0x58D8], NFKD: [0x58D8] }, +{ source: [0xF94B], NFC: [0x5C62], NFD: [0x5C62], NFKC: [0x5C62], NFKD: [0x5C62] }, +{ source: [0xF94C], NFC: [0x6A13], NFD: [0x6A13], NFKC: [0x6A13], NFKD: [0x6A13] }, +{ source: [0xF94D], NFC: [0x6DDA], NFD: [0x6DDA], NFKC: [0x6DDA], NFKD: [0x6DDA] }, +{ source: [0xF94E], NFC: [0x6F0F], NFD: [0x6F0F], NFKC: [0x6F0F], NFKD: [0x6F0F] }, +{ source: [0xF94F], NFC: [0x7D2F], NFD: [0x7D2F], NFKC: [0x7D2F], NFKD: [0x7D2F] }, +{ source: [0xF950], NFC: [0x7E37], NFD: [0x7E37], NFKC: [0x7E37], NFKD: [0x7E37] }, +{ source: [0xF951], NFC: [0x964B], NFD: [0x964B], NFKC: [0x964B], NFKD: [0x964B] }, +{ source: [0xF952], NFC: [0x52D2], NFD: [0x52D2], NFKC: [0x52D2], NFKD: [0x52D2] }, +{ source: [0xF953], NFC: [0x808B], NFD: [0x808B], NFKC: [0x808B], NFKD: [0x808B] }, +{ source: [0xF954], NFC: [0x51DC], NFD: [0x51DC], NFKC: [0x51DC], NFKD: [0x51DC] }, +{ source: [0xF955], NFC: [0x51CC], NFD: [0x51CC], NFKC: [0x51CC], NFKD: [0x51CC] }, +{ source: [0xF956], NFC: [0x7A1C], NFD: [0x7A1C], NFKC: [0x7A1C], NFKD: [0x7A1C] }, +{ source: [0xF957], NFC: [0x7DBE], NFD: [0x7DBE], NFKC: [0x7DBE], NFKD: [0x7DBE] }, +{ source: [0xF958], NFC: [0x83F1], NFD: [0x83F1], NFKC: [0x83F1], NFKD: [0x83F1] }, +{ source: [0xF959], NFC: [0x9675], NFD: [0x9675], NFKC: [0x9675], NFKD: [0x9675] }, +{ source: [0xF95A], NFC: [0x8B80], NFD: [0x8B80], NFKC: [0x8B80], NFKD: [0x8B80] }, +{ source: [0xF95B], NFC: [0x62CF], NFD: [0x62CF], NFKC: [0x62CF], NFKD: [0x62CF] }, +{ source: [0xF95C], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] }, +{ source: [0xF95D], NFC: [0x8AFE], NFD: [0x8AFE], NFKC: [0x8AFE], NFKD: [0x8AFE] }, +{ source: [0xF95E], NFC: [0x4E39], NFD: [0x4E39], NFKC: [0x4E39], NFKD: [0x4E39] }, +{ source: [0xF95F], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] }, +{ source: [0xF960], NFC: [0x6012], NFD: [0x6012], NFKC: [0x6012], NFKD: [0x6012] }, +{ source: [0xF961], NFC: [0x7387], NFD: [0x7387], NFKC: [0x7387], NFKD: [0x7387] }, +{ source: [0xF962], NFC: [0x7570], NFD: [0x7570], NFKC: [0x7570], NFKD: [0x7570] }, +{ source: [0xF963], NFC: [0x5317], NFD: [0x5317], NFKC: [0x5317], NFKD: [0x5317] }, +{ source: [0xF964], NFC: [0x78FB], NFD: [0x78FB], NFKC: [0x78FB], NFKD: [0x78FB] }, +{ source: [0xF965], NFC: [0x4FBF], NFD: [0x4FBF], NFKC: [0x4FBF], NFKD: [0x4FBF] }, +{ source: [0xF966], NFC: [0x5FA9], NFD: [0x5FA9], NFKC: [0x5FA9], NFKD: [0x5FA9] }, +{ source: [0xF967], NFC: [0x4E0D], NFD: [0x4E0D], NFKC: [0x4E0D], NFKD: [0x4E0D] }, +{ source: [0xF968], NFC: [0x6CCC], NFD: [0x6CCC], NFKC: [0x6CCC], NFKD: [0x6CCC] }, +{ source: [0xF969], NFC: [0x6578], NFD: [0x6578], NFKC: [0x6578], NFKD: [0x6578] }, +{ source: [0xF96A], NFC: [0x7D22], NFD: [0x7D22], NFKC: [0x7D22], NFKD: [0x7D22] }, +{ source: [0xF96B], NFC: [0x53C3], NFD: [0x53C3], NFKC: [0x53C3], NFKD: [0x53C3] }, +{ source: [0xF96C], NFC: [0x585E], NFD: [0x585E], NFKC: [0x585E], NFKD: [0x585E] }, +{ source: [0xF96D], NFC: [0x7701], NFD: [0x7701], NFKC: [0x7701], NFKD: [0x7701] }, +{ source: [0xF96E], NFC: [0x8449], NFD: [0x8449], NFKC: [0x8449], NFKD: [0x8449] }, +{ source: [0xF96F], NFC: [0x8AAA], NFD: [0x8AAA], NFKC: [0x8AAA], NFKD: [0x8AAA] }, +{ source: [0xF970], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] }, +{ source: [0xF971], NFC: [0x8FB0], NFD: [0x8FB0], NFKC: [0x8FB0], NFKD: [0x8FB0] }, +{ source: [0xF972], NFC: [0x6C88], NFD: [0x6C88], NFKC: [0x6C88], NFKD: [0x6C88] }, +{ source: [0xF973], NFC: [0x62FE], NFD: [0x62FE], NFKC: [0x62FE], NFKD: [0x62FE] }, +{ source: [0xF974], NFC: [0x82E5], NFD: [0x82E5], NFKC: [0x82E5], NFKD: [0x82E5] }, +{ source: [0xF975], NFC: [0x63A0], NFD: [0x63A0], NFKC: [0x63A0], NFKD: [0x63A0] }, +{ source: [0xF976], NFC: [0x7565], NFD: [0x7565], NFKC: [0x7565], NFKD: [0x7565] }, +{ source: [0xF977], NFC: [0x4EAE], NFD: [0x4EAE], NFKC: [0x4EAE], NFKD: [0x4EAE] }, +{ source: [0xF978], NFC: [0x5169], NFD: [0x5169], NFKC: [0x5169], NFKD: [0x5169] }, +{ source: [0xF979], NFC: [0x51C9], NFD: [0x51C9], NFKC: [0x51C9], NFKD: [0x51C9] }, +{ source: [0xF97A], NFC: [0x6881], NFD: [0x6881], NFKC: [0x6881], NFKD: [0x6881] }, +{ source: [0xF97B], NFC: [0x7CE7], NFD: [0x7CE7], NFKC: [0x7CE7], NFKD: [0x7CE7] }, +{ source: [0xF97C], NFC: [0x826F], NFD: [0x826F], NFKC: [0x826F], NFKD: [0x826F] }, +{ source: [0xF97D], NFC: [0x8AD2], NFD: [0x8AD2], NFKC: [0x8AD2], NFKD: [0x8AD2] }, +{ source: [0xF97E], NFC: [0x91CF], NFD: [0x91CF], NFKC: [0x91CF], NFKD: [0x91CF] }, +{ source: [0xF97F], NFC: [0x52F5], NFD: [0x52F5], NFKC: [0x52F5], NFKD: [0x52F5] }, +{ source: [0xF980], NFC: [0x5442], NFD: [0x5442], NFKC: [0x5442], NFKD: [0x5442] }, +{ source: [0xF981], NFC: [0x5973], NFD: [0x5973], NFKC: [0x5973], NFKD: [0x5973] }, +{ source: [0xF982], NFC: [0x5EEC], NFD: [0x5EEC], NFKC: [0x5EEC], NFKD: [0x5EEC] }, +{ source: [0xF983], NFC: [0x65C5], NFD: [0x65C5], NFKC: [0x65C5], NFKD: [0x65C5] }, +{ source: [0xF984], NFC: [0x6FFE], NFD: [0x6FFE], NFKC: [0x6FFE], NFKD: [0x6FFE] }, +{ source: [0xF985], NFC: [0x792A], NFD: [0x792A], NFKC: [0x792A], NFKD: [0x792A] }, +{ source: [0xF986], NFC: [0x95AD], NFD: [0x95AD], NFKC: [0x95AD], NFKD: [0x95AD] }, +{ source: [0xF987], NFC: [0x9A6A], NFD: [0x9A6A], NFKC: [0x9A6A], NFKD: [0x9A6A] }, +{ source: [0xF988], NFC: [0x9E97], NFD: [0x9E97], NFKC: [0x9E97], NFKD: [0x9E97] }, +{ source: [0xF989], NFC: [0x9ECE], NFD: [0x9ECE], NFKC: [0x9ECE], NFKD: [0x9ECE] }, +{ source: [0xF98A], NFC: [0x529B], NFD: [0x529B], NFKC: [0x529B], NFKD: [0x529B] }, +{ source: [0xF98B], NFC: [0x66C6], NFD: [0x66C6], NFKC: [0x66C6], NFKD: [0x66C6] }, +{ source: [0xF98C], NFC: [0x6B77], NFD: [0x6B77], NFKC: [0x6B77], NFKD: [0x6B77] }, +{ source: [0xF98D], NFC: [0x8F62], NFD: [0x8F62], NFKC: [0x8F62], NFKD: [0x8F62] }, +{ source: [0xF98E], NFC: [0x5E74], NFD: [0x5E74], NFKC: [0x5E74], NFKD: [0x5E74] }, +{ source: [0xF98F], NFC: [0x6190], NFD: [0x6190], NFKC: [0x6190], NFKD: [0x6190] }, +{ source: [0xF990], NFC: [0x6200], NFD: [0x6200], NFKC: [0x6200], NFKD: [0x6200] }, +{ source: [0xF991], NFC: [0x649A], NFD: [0x649A], NFKC: [0x649A], NFKD: [0x649A] }, +{ source: [0xF992], NFC: [0x6F23], NFD: [0x6F23], NFKC: [0x6F23], NFKD: [0x6F23] }, +{ source: [0xF993], NFC: [0x7149], NFD: [0x7149], NFKC: [0x7149], NFKD: [0x7149] }, +{ source: [0xF994], NFC: [0x7489], NFD: [0x7489], NFKC: [0x7489], NFKD: [0x7489] }, +{ source: [0xF995], NFC: [0x79CA], NFD: [0x79CA], NFKC: [0x79CA], NFKD: [0x79CA] }, +{ source: [0xF996], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] }, +{ source: [0xF997], NFC: [0x806F], NFD: [0x806F], NFKC: [0x806F], NFKD: [0x806F] }, +{ source: [0xF998], NFC: [0x8F26], NFD: [0x8F26], NFKC: [0x8F26], NFKD: [0x8F26] }, +{ source: [0xF999], NFC: [0x84EE], NFD: [0x84EE], NFKC: [0x84EE], NFKD: [0x84EE] }, +{ source: [0xF99A], NFC: [0x9023], NFD: [0x9023], NFKC: [0x9023], NFKD: [0x9023] }, +{ source: [0xF99B], NFC: [0x934A], NFD: [0x934A], NFKC: [0x934A], NFKD: [0x934A] }, +{ source: [0xF99C], NFC: [0x5217], NFD: [0x5217], NFKC: [0x5217], NFKD: [0x5217] }, +{ source: [0xF99D], NFC: [0x52A3], NFD: [0x52A3], NFKC: [0x52A3], NFKD: [0x52A3] }, +{ source: [0xF99E], NFC: [0x54BD], NFD: [0x54BD], NFKC: [0x54BD], NFKD: [0x54BD] }, +{ source: [0xF99F], NFC: [0x70C8], NFD: [0x70C8], NFKC: [0x70C8], NFKD: [0x70C8] }, +{ source: [0xF9A0], NFC: [0x88C2], NFD: [0x88C2], NFKC: [0x88C2], NFKD: [0x88C2] }, +{ source: [0xF9A1], NFC: [0x8AAA], NFD: [0x8AAA], NFKC: [0x8AAA], NFKD: [0x8AAA] }, +{ source: [0xF9A2], NFC: [0x5EC9], NFD: [0x5EC9], NFKC: [0x5EC9], NFKD: [0x5EC9] }, +{ source: [0xF9A3], NFC: [0x5FF5], NFD: [0x5FF5], NFKC: [0x5FF5], NFKD: [0x5FF5] }, +{ source: [0xF9A4], NFC: [0x637B], NFD: [0x637B], NFKC: [0x637B], NFKD: [0x637B] }, +{ source: [0xF9A5], NFC: [0x6BAE], NFD: [0x6BAE], NFKC: [0x6BAE], NFKD: [0x6BAE] }, +{ source: [0xF9A6], NFC: [0x7C3E], NFD: [0x7C3E], NFKC: [0x7C3E], NFKD: [0x7C3E] }, +{ source: [0xF9A7], NFC: [0x7375], NFD: [0x7375], NFKC: [0x7375], NFKD: [0x7375] }, +{ source: [0xF9A8], NFC: [0x4EE4], NFD: [0x4EE4], NFKC: [0x4EE4], NFKD: [0x4EE4] }, +{ source: [0xF9A9], NFC: [0x56F9], NFD: [0x56F9], NFKC: [0x56F9], NFKD: [0x56F9] }, +{ source: [0xF9AA], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] }, +{ source: [0xF9AB], NFC: [0x5DBA], NFD: [0x5DBA], NFKC: [0x5DBA], NFKD: [0x5DBA] }, +{ source: [0xF9AC], NFC: [0x601C], NFD: [0x601C], NFKC: [0x601C], NFKD: [0x601C] }, +{ source: [0xF9AD], NFC: [0x73B2], NFD: [0x73B2], NFKC: [0x73B2], NFKD: [0x73B2] }, +{ source: [0xF9AE], NFC: [0x7469], NFD: [0x7469], NFKC: [0x7469], NFKD: [0x7469] }, +{ source: [0xF9AF], NFC: [0x7F9A], NFD: [0x7F9A], NFKC: [0x7F9A], NFKD: [0x7F9A] }, +{ source: [0xF9B0], NFC: [0x8046], NFD: [0x8046], NFKC: [0x8046], NFKD: [0x8046] }, +{ source: [0xF9B1], NFC: [0x9234], NFD: [0x9234], NFKC: [0x9234], NFKD: [0x9234] }, +{ source: [0xF9B2], NFC: [0x96F6], NFD: [0x96F6], NFKC: [0x96F6], NFKD: [0x96F6] }, +{ source: [0xF9B3], NFC: [0x9748], NFD: [0x9748], NFKC: [0x9748], NFKD: [0x9748] }, +{ source: [0xF9B4], NFC: [0x9818], NFD: [0x9818], NFKC: [0x9818], NFKD: [0x9818] }, +{ source: [0xF9B5], NFC: [0x4F8B], NFD: [0x4F8B], NFKC: [0x4F8B], NFKD: [0x4F8B] }, +{ source: [0xF9B6], NFC: [0x79AE], NFD: [0x79AE], NFKC: [0x79AE], NFKD: [0x79AE] }, +{ source: [0xF9B7], NFC: [0x91B4], NFD: [0x91B4], NFKC: [0x91B4], NFKD: [0x91B4] }, +{ source: [0xF9B8], NFC: [0x96B8], NFD: [0x96B8], NFKC: [0x96B8], NFKD: [0x96B8] }, +{ source: [0xF9B9], NFC: [0x60E1], NFD: [0x60E1], NFKC: [0x60E1], NFKD: [0x60E1] }, +{ source: [0xF9BA], NFC: [0x4E86], NFD: [0x4E86], NFKC: [0x4E86], NFKD: [0x4E86] }, +{ source: [0xF9BB], NFC: [0x50DA], NFD: [0x50DA], NFKC: [0x50DA], NFKD: [0x50DA] }, +{ source: [0xF9BC], NFC: [0x5BEE], NFD: [0x5BEE], NFKC: [0x5BEE], NFKD: [0x5BEE] }, +{ source: [0xF9BD], NFC: [0x5C3F], NFD: [0x5C3F], NFKC: [0x5C3F], NFKD: [0x5C3F] }, +{ source: [0xF9BE], NFC: [0x6599], NFD: [0x6599], NFKC: [0x6599], NFKD: [0x6599] }, +{ source: [0xF9BF], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] }, +{ source: [0xF9C0], NFC: [0x71CE], NFD: [0x71CE], NFKC: [0x71CE], NFKD: [0x71CE] }, +{ source: [0xF9C1], NFC: [0x7642], NFD: [0x7642], NFKC: [0x7642], NFKD: [0x7642] }, +{ source: [0xF9C2], NFC: [0x84FC], NFD: [0x84FC], NFKC: [0x84FC], NFKD: [0x84FC] }, +{ source: [0xF9C3], NFC: [0x907C], NFD: [0x907C], NFKC: [0x907C], NFKD: [0x907C] }, +{ source: [0xF9C4], NFC: [0x9F8D], NFD: [0x9F8D], NFKC: [0x9F8D], NFKD: [0x9F8D] }, +{ source: [0xF9C5], NFC: [0x6688], NFD: [0x6688], NFKC: [0x6688], NFKD: [0x6688] }, +{ source: [0xF9C6], NFC: [0x962E], NFD: [0x962E], NFKC: [0x962E], NFKD: [0x962E] }, +{ source: [0xF9C7], NFC: [0x5289], NFD: [0x5289], NFKC: [0x5289], NFKD: [0x5289] }, +{ source: [0xF9C8], NFC: [0x677B], NFD: [0x677B], NFKC: [0x677B], NFKD: [0x677B] }, +{ source: [0xF9C9], NFC: [0x67F3], NFD: [0x67F3], NFKC: [0x67F3], NFKD: [0x67F3] }, +{ source: [0xF9CA], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] }, +{ source: [0xF9CB], NFC: [0x6E9C], NFD: [0x6E9C], NFKC: [0x6E9C], NFKD: [0x6E9C] }, +{ source: [0xF9CC], NFC: [0x7409], NFD: [0x7409], NFKC: [0x7409], NFKD: [0x7409] }, +{ source: [0xF9CD], NFC: [0x7559], NFD: [0x7559], NFKC: [0x7559], NFKD: [0x7559] }, +{ source: [0xF9CE], NFC: [0x786B], NFD: [0x786B], NFKC: [0x786B], NFKD: [0x786B] }, +{ source: [0xF9CF], NFC: [0x7D10], NFD: [0x7D10], NFKC: [0x7D10], NFKD: [0x7D10] }, +{ source: [0xF9D0], NFC: [0x985E], NFD: [0x985E], NFKC: [0x985E], NFKD: [0x985E] }, +{ source: [0xF9D1], NFC: [0x516D], NFD: [0x516D], NFKC: [0x516D], NFKD: [0x516D] }, +{ source: [0xF9D2], NFC: [0x622E], NFD: [0x622E], NFKC: [0x622E], NFKD: [0x622E] }, +{ source: [0xF9D3], NFC: [0x9678], NFD: [0x9678], NFKC: [0x9678], NFKD: [0x9678] }, +{ source: [0xF9D4], NFC: [0x502B], NFD: [0x502B], NFKC: [0x502B], NFKD: [0x502B] }, +{ source: [0xF9D5], NFC: [0x5D19], NFD: [0x5D19], NFKC: [0x5D19], NFKD: [0x5D19] }, +{ source: [0xF9D6], NFC: [0x6DEA], NFD: [0x6DEA], NFKC: [0x6DEA], NFKD: [0x6DEA] }, +{ source: [0xF9D7], NFC: [0x8F2A], NFD: [0x8F2A], NFKC: [0x8F2A], NFKD: [0x8F2A] }, +{ source: [0xF9D8], NFC: [0x5F8B], NFD: [0x5F8B], NFKC: [0x5F8B], NFKD: [0x5F8B] }, +{ source: [0xF9D9], NFC: [0x6144], NFD: [0x6144], NFKC: [0x6144], NFKD: [0x6144] }, +{ source: [0xF9DA], NFC: [0x6817], NFD: [0x6817], NFKC: [0x6817], NFKD: [0x6817] }, +{ source: [0xF9DB], NFC: [0x7387], NFD: [0x7387], NFKC: [0x7387], NFKD: [0x7387] }, +{ source: [0xF9DC], NFC: [0x9686], NFD: [0x9686], NFKC: [0x9686], NFKD: [0x9686] }, +{ source: [0xF9DD], NFC: [0x5229], NFD: [0x5229], NFKC: [0x5229], NFKD: [0x5229] }, +{ source: [0xF9DE], NFC: [0x540F], NFD: [0x540F], NFKC: [0x540F], NFKD: [0x540F] }, +{ source: [0xF9DF], NFC: [0x5C65], NFD: [0x5C65], NFKC: [0x5C65], NFKD: [0x5C65] }, +{ source: [0xF9E0], NFC: [0x6613], NFD: [0x6613], NFKC: [0x6613], NFKD: [0x6613] }, +{ source: [0xF9E1], NFC: [0x674E], NFD: [0x674E], NFKC: [0x674E], NFKD: [0x674E] }, +{ source: [0xF9E2], NFC: [0x68A8], NFD: [0x68A8], NFKC: [0x68A8], NFKD: [0x68A8] }, +{ source: [0xF9E3], NFC: [0x6CE5], NFD: [0x6CE5], NFKC: [0x6CE5], NFKD: [0x6CE5] }, +{ source: [0xF9E4], NFC: [0x7406], NFD: [0x7406], NFKC: [0x7406], NFKD: [0x7406] }, +{ source: [0xF9E5], NFC: [0x75E2], NFD: [0x75E2], NFKC: [0x75E2], NFKD: [0x75E2] }, +{ source: [0xF9E6], NFC: [0x7F79], NFD: [0x7F79], NFKC: [0x7F79], NFKD: [0x7F79] }, +{ source: [0xF9E7], NFC: [0x88CF], NFD: [0x88CF], NFKC: [0x88CF], NFKD: [0x88CF] }, +{ source: [0xF9E8], NFC: [0x88E1], NFD: [0x88E1], NFKC: [0x88E1], NFKD: [0x88E1] }, +{ source: [0xF9E9], NFC: [0x91CC], NFD: [0x91CC], NFKC: [0x91CC], NFKD: [0x91CC] }, +{ source: [0xF9EA], NFC: [0x96E2], NFD: [0x96E2], NFKC: [0x96E2], NFKD: [0x96E2] }, +{ source: [0xF9EB], NFC: [0x533F], NFD: [0x533F], NFKC: [0x533F], NFKD: [0x533F] }, +{ source: [0xF9EC], NFC: [0x6EBA], NFD: [0x6EBA], NFKC: [0x6EBA], NFKD: [0x6EBA] }, +{ source: [0xF9ED], NFC: [0x541D], NFD: [0x541D], NFKC: [0x541D], NFKD: [0x541D] }, +{ source: [0xF9EE], NFC: [0x71D0], NFD: [0x71D0], NFKC: [0x71D0], NFKD: [0x71D0] }, +{ source: [0xF9EF], NFC: [0x7498], NFD: [0x7498], NFKC: [0x7498], NFKD: [0x7498] }, +{ source: [0xF9F0], NFC: [0x85FA], NFD: [0x85FA], NFKC: [0x85FA], NFKD: [0x85FA] }, +{ source: [0xF9F1], NFC: [0x96A3], NFD: [0x96A3], NFKC: [0x96A3], NFKD: [0x96A3] }, +{ source: [0xF9F2], NFC: [0x9C57], NFD: [0x9C57], NFKC: [0x9C57], NFKD: [0x9C57] }, +{ source: [0xF9F3], NFC: [0x9E9F], NFD: [0x9E9F], NFKC: [0x9E9F], NFKD: [0x9E9F] }, +{ source: [0xF9F4], NFC: [0x6797], NFD: [0x6797], NFKC: [0x6797], NFKD: [0x6797] }, +{ source: [0xF9F5], NFC: [0x6DCB], NFD: [0x6DCB], NFKC: [0x6DCB], NFKD: [0x6DCB] }, +{ source: [0xF9F6], NFC: [0x81E8], NFD: [0x81E8], NFKC: [0x81E8], NFKD: [0x81E8] }, +{ source: [0xF9F7], NFC: [0x7ACB], NFD: [0x7ACB], NFKC: [0x7ACB], NFKD: [0x7ACB] }, +{ source: [0xF9F8], NFC: [0x7B20], NFD: [0x7B20], NFKC: [0x7B20], NFKD: [0x7B20] }, +{ source: [0xF9F9], NFC: [0x7C92], NFD: [0x7C92], NFKC: [0x7C92], NFKD: [0x7C92] }, +{ source: [0xF9FA], NFC: [0x72C0], NFD: [0x72C0], NFKC: [0x72C0], NFKD: [0x72C0] }, +{ source: [0xF9FB], NFC: [0x7099], NFD: [0x7099], NFKC: [0x7099], NFKD: [0x7099] }, +{ source: [0xF9FC], NFC: [0x8B58], NFD: [0x8B58], NFKC: [0x8B58], NFKD: [0x8B58] }, +{ source: [0xF9FD], NFC: [0x4EC0], NFD: [0x4EC0], NFKC: [0x4EC0], NFKD: [0x4EC0] }, +{ source: [0xF9FE], NFC: [0x8336], NFD: [0x8336], NFKC: [0x8336], NFKD: [0x8336] }, +{ source: [0xF9FF], NFC: [0x523A], NFD: [0x523A], NFKC: [0x523A], NFKD: [0x523A] }, +{ source: [0xFA00], NFC: [0x5207], NFD: [0x5207], NFKC: [0x5207], NFKD: [0x5207] }, +{ source: [0xFA01], NFC: [0x5EA6], NFD: [0x5EA6], NFKC: [0x5EA6], NFKD: [0x5EA6] }, +{ source: [0xFA02], NFC: [0x62D3], NFD: [0x62D3], NFKC: [0x62D3], NFKD: [0x62D3] }, +{ source: [0xFA03], NFC: [0x7CD6], NFD: [0x7CD6], NFKC: [0x7CD6], NFKD: [0x7CD6] }, +{ source: [0xFA04], NFC: [0x5B85], NFD: [0x5B85], NFKC: [0x5B85], NFKD: [0x5B85] }, +{ source: [0xFA05], NFC: [0x6D1E], NFD: [0x6D1E], NFKC: [0x6D1E], NFKD: [0x6D1E] }, +{ source: [0xFA06], NFC: [0x66B4], NFD: [0x66B4], NFKC: [0x66B4], NFKD: [0x66B4] }, +{ source: [0xFA07], NFC: [0x8F3B], NFD: [0x8F3B], NFKC: [0x8F3B], NFKD: [0x8F3B] }, +{ source: [0xFA08], NFC: [0x884C], NFD: [0x884C], NFKC: [0x884C], NFKD: [0x884C] }, +{ source: [0xFA09], NFC: [0x964D], NFD: [0x964D], NFKC: [0x964D], NFKD: [0x964D] }, +{ source: [0xFA0A], NFC: [0x898B], NFD: [0x898B], NFKC: [0x898B], NFKD: [0x898B] }, +{ source: [0xFA0B], NFC: [0x5ED3], NFD: [0x5ED3], NFKC: [0x5ED3], NFKD: [0x5ED3] }, +{ source: [0xFA0C], NFC: [0x5140], NFD: [0x5140], NFKC: [0x5140], NFKD: [0x5140] }, +{ source: [0xFA0D], NFC: [0x55C0], NFD: [0x55C0], NFKC: [0x55C0], NFKD: [0x55C0] }, +{ source: [0xFA10], NFC: [0x585A], NFD: [0x585A], NFKC: [0x585A], NFKD: [0x585A] }, +{ source: [0xFA12], NFC: [0x6674], NFD: [0x6674], NFKC: [0x6674], NFKD: [0x6674] }, +{ source: [0xFA15], NFC: [0x51DE], NFD: [0x51DE], NFKC: [0x51DE], NFKD: [0x51DE] }, +{ source: [0xFA16], NFC: [0x732A], NFD: [0x732A], NFKC: [0x732A], NFKD: [0x732A] }, +{ source: [0xFA17], NFC: [0x76CA], NFD: [0x76CA], NFKC: [0x76CA], NFKD: [0x76CA] }, +{ source: [0xFA18], NFC: [0x793C], NFD: [0x793C], NFKC: [0x793C], NFKD: [0x793C] }, +{ source: [0xFA19], NFC: [0x795E], NFD: [0x795E], NFKC: [0x795E], NFKD: [0x795E] }, +{ source: [0xFA1A], NFC: [0x7965], NFD: [0x7965], NFKC: [0x7965], NFKD: [0x7965] }, +{ source: [0xFA1B], NFC: [0x798F], NFD: [0x798F], NFKC: [0x798F], NFKD: [0x798F] }, +{ source: [0xFA1C], NFC: [0x9756], NFD: [0x9756], NFKC: [0x9756], NFKD: [0x9756] }, +{ source: [0xFA1D], NFC: [0x7CBE], NFD: [0x7CBE], NFKC: [0x7CBE], NFKD: [0x7CBE] }, +{ source: [0xFA1E], NFC: [0x7FBD], NFD: [0x7FBD], NFKC: [0x7FBD], NFKD: [0x7FBD] }, +{ source: [0xFA20], NFC: [0x8612], NFD: [0x8612], NFKC: [0x8612], NFKD: [0x8612] }, +{ source: [0xFA22], NFC: [0x8AF8], NFD: [0x8AF8], NFKC: [0x8AF8], NFKD: [0x8AF8] }, +{ source: [0xFA25], NFC: [0x9038], NFD: [0x9038], NFKC: [0x9038], NFKD: [0x9038] }, +{ source: [0xFA26], NFC: [0x90FD], NFD: [0x90FD], NFKC: [0x90FD], NFKD: [0x90FD] }, +{ source: [0xFA2A], NFC: [0x98EF], NFD: [0x98EF], NFKC: [0x98EF], NFKD: [0x98EF] }, +{ source: [0xFA2B], NFC: [0x98FC], NFD: [0x98FC], NFKC: [0x98FC], NFKD: [0x98FC] }, +{ source: [0xFA2C], NFC: [0x9928], NFD: [0x9928], NFKC: [0x9928], NFKD: [0x9928] }, +{ source: [0xFA2D], NFC: [0x9DB4], NFD: [0x9DB4], NFKC: [0x9DB4], NFKD: [0x9DB4] }, +{ source: [0xFA2E], NFC: [0x90DE], NFD: [0x90DE], NFKC: [0x90DE], NFKD: [0x90DE] }, +{ source: [0xFA2F], NFC: [0x96B7], NFD: [0x96B7], NFKC: [0x96B7], NFKD: [0x96B7] }, +{ source: [0xFA30], NFC: [0x4FAE], NFD: [0x4FAE], NFKC: [0x4FAE], NFKD: [0x4FAE] }, +{ source: [0xFA31], NFC: [0x50E7], NFD: [0x50E7], NFKC: [0x50E7], NFKD: [0x50E7] }, +{ source: [0xFA32], NFC: [0x514D], NFD: [0x514D], NFKC: [0x514D], NFKD: [0x514D] }, +{ source: [0xFA33], NFC: [0x52C9], NFD: [0x52C9], NFKC: [0x52C9], NFKD: [0x52C9] }, +{ source: [0xFA34], NFC: [0x52E4], NFD: [0x52E4], NFKC: [0x52E4], NFKD: [0x52E4] }, +{ source: [0xFA35], NFC: [0x5351], NFD: [0x5351], NFKC: [0x5351], NFKD: [0x5351] }, +{ source: [0xFA36], NFC: [0x559D], NFD: [0x559D], NFKC: [0x559D], NFKD: [0x559D] }, +{ source: [0xFA37], NFC: [0x5606], NFD: [0x5606], NFKC: [0x5606], NFKD: [0x5606] }, +{ source: [0xFA38], NFC: [0x5668], NFD: [0x5668], NFKC: [0x5668], NFKD: [0x5668] }, +{ source: [0xFA39], NFC: [0x5840], NFD: [0x5840], NFKC: [0x5840], NFKD: [0x5840] }, +{ source: [0xFA3A], NFC: [0x58A8], NFD: [0x58A8], NFKC: [0x58A8], NFKD: [0x58A8] }, +{ source: [0xFA3B], NFC: [0x5C64], NFD: [0x5C64], NFKC: [0x5C64], NFKD: [0x5C64] }, +{ source: [0xFA3C], NFC: [0x5C6E], NFD: [0x5C6E], NFKC: [0x5C6E], NFKD: [0x5C6E] }, +{ source: [0xFA3D], NFC: [0x6094], NFD: [0x6094], NFKC: [0x6094], NFKD: [0x6094] }, +{ source: [0xFA3E], NFC: [0x6168], NFD: [0x6168], NFKC: [0x6168], NFKD: [0x6168] }, +{ source: [0xFA3F], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] }, +{ source: [0xFA40], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] }, +{ source: [0xFA41], NFC: [0x654F], NFD: [0x654F], NFKC: [0x654F], NFKD: [0x654F] }, +{ source: [0xFA42], NFC: [0x65E2], NFD: [0x65E2], NFKC: [0x65E2], NFKD: [0x65E2] }, +{ source: [0xFA43], NFC: [0x6691], NFD: [0x6691], NFKC: [0x6691], NFKD: [0x6691] }, +{ source: [0xFA44], NFC: [0x6885], NFD: [0x6885], NFKC: [0x6885], NFKD: [0x6885] }, +{ source: [0xFA45], NFC: [0x6D77], NFD: [0x6D77], NFKC: [0x6D77], NFKD: [0x6D77] }, +{ source: [0xFA46], NFC: [0x6E1A], NFD: [0x6E1A], NFKC: [0x6E1A], NFKD: [0x6E1A] }, +{ source: [0xFA47], NFC: [0x6F22], NFD: [0x6F22], NFKC: [0x6F22], NFKD: [0x6F22] }, +{ source: [0xFA48], NFC: [0x716E], NFD: [0x716E], NFKC: [0x716E], NFKD: [0x716E] }, +{ source: [0xFA49], NFC: [0x722B], NFD: [0x722B], NFKC: [0x722B], NFKD: [0x722B] }, +{ source: [0xFA4A], NFC: [0x7422], NFD: [0x7422], NFKC: [0x7422], NFKD: [0x7422] }, +{ source: [0xFA4B], NFC: [0x7891], NFD: [0x7891], NFKC: [0x7891], NFKD: [0x7891] }, +{ source: [0xFA4C], NFC: [0x793E], NFD: [0x793E], NFKC: [0x793E], NFKD: [0x793E] }, +{ source: [0xFA4D], NFC: [0x7949], NFD: [0x7949], NFKC: [0x7949], NFKD: [0x7949] }, +{ source: [0xFA4E], NFC: [0x7948], NFD: [0x7948], NFKC: [0x7948], NFKD: [0x7948] }, +{ source: [0xFA4F], NFC: [0x7950], NFD: [0x7950], NFKC: [0x7950], NFKD: [0x7950] }, +{ source: [0xFA50], NFC: [0x7956], NFD: [0x7956], NFKC: [0x7956], NFKD: [0x7956] }, +{ source: [0xFA51], NFC: [0x795D], NFD: [0x795D], NFKC: [0x795D], NFKD: [0x795D] }, +{ source: [0xFA52], NFC: [0x798D], NFD: [0x798D], NFKC: [0x798D], NFKD: [0x798D] }, +{ source: [0xFA53], NFC: [0x798E], NFD: [0x798E], NFKC: [0x798E], NFKD: [0x798E] }, +{ source: [0xFA54], NFC: [0x7A40], NFD: [0x7A40], NFKC: [0x7A40], NFKD: [0x7A40] }, +{ source: [0xFA55], NFC: [0x7A81], NFD: [0x7A81], NFKC: [0x7A81], NFKD: [0x7A81] }, +{ source: [0xFA56], NFC: [0x7BC0], NFD: [0x7BC0], NFKC: [0x7BC0], NFKD: [0x7BC0] }, +{ source: [0xFA57], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] }, +{ source: [0xFA58], NFC: [0x7E09], NFD: [0x7E09], NFKC: [0x7E09], NFKD: [0x7E09] }, +{ source: [0xFA59], NFC: [0x7E41], NFD: [0x7E41], NFKC: [0x7E41], NFKD: [0x7E41] }, +{ source: [0xFA5A], NFC: [0x7F72], NFD: [0x7F72], NFKC: [0x7F72], NFKD: [0x7F72] }, +{ source: [0xFA5B], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] }, +{ source: [0xFA5C], NFC: [0x81ED], NFD: [0x81ED], NFKC: [0x81ED], NFKD: [0x81ED] }, +{ source: [0xFA5D], NFC: [0x8279], NFD: [0x8279], NFKC: [0x8279], NFKD: [0x8279] }, +{ source: [0xFA5E], NFC: [0x8279], NFD: [0x8279], NFKC: [0x8279], NFKD: [0x8279] }, +{ source: [0xFA5F], NFC: [0x8457], NFD: [0x8457], NFKC: [0x8457], NFKD: [0x8457] }, +{ source: [0xFA60], NFC: [0x8910], NFD: [0x8910], NFKC: [0x8910], NFKD: [0x8910] }, +{ source: [0xFA61], NFC: [0x8996], NFD: [0x8996], NFKC: [0x8996], NFKD: [0x8996] }, +{ source: [0xFA62], NFC: [0x8B01], NFD: [0x8B01], NFKC: [0x8B01], NFKD: [0x8B01] }, +{ source: [0xFA63], NFC: [0x8B39], NFD: [0x8B39], NFKC: [0x8B39], NFKD: [0x8B39] }, +{ source: [0xFA64], NFC: [0x8CD3], NFD: [0x8CD3], NFKC: [0x8CD3], NFKD: [0x8CD3] }, +{ source: [0xFA65], NFC: [0x8D08], NFD: [0x8D08], NFKC: [0x8D08], NFKD: [0x8D08] }, +{ source: [0xFA66], NFC: [0x8FB6], NFD: [0x8FB6], NFKC: [0x8FB6], NFKD: [0x8FB6] }, +{ source: [0xFA67], NFC: [0x9038], NFD: [0x9038], NFKC: [0x9038], NFKD: [0x9038] }, +{ source: [0xFA68], NFC: [0x96E3], NFD: [0x96E3], NFKC: [0x96E3], NFKD: [0x96E3] }, +{ source: [0xFA69], NFC: [0x97FF], NFD: [0x97FF], NFKC: [0x97FF], NFKD: [0x97FF] }, +{ source: [0xFA6A], NFC: [0x983B], NFD: [0x983B], NFKC: [0x983B], NFKD: [0x983B] }, +{ source: [0xFA6B], NFC: [0x6075], NFD: [0x6075], NFKC: [0x6075], NFKD: [0x6075] }, +{ source: [0xFA6C], NFC: [0x242EE], NFD: [0x242EE], NFKC: [0x242EE], NFKD: [0x242EE] }, +{ source: [0xFA6D], NFC: [0x8218], NFD: [0x8218], NFKC: [0x8218], NFKD: [0x8218] }, +{ source: [0xFA70], NFC: [0x4E26], NFD: [0x4E26], NFKC: [0x4E26], NFKD: [0x4E26] }, +{ source: [0xFA71], NFC: [0x51B5], NFD: [0x51B5], NFKC: [0x51B5], NFKD: [0x51B5] }, +{ source: [0xFA72], NFC: [0x5168], NFD: [0x5168], NFKC: [0x5168], NFKD: [0x5168] }, +{ source: [0xFA73], NFC: [0x4F80], NFD: [0x4F80], NFKC: [0x4F80], NFKD: [0x4F80] }, +{ source: [0xFA74], NFC: [0x5145], NFD: [0x5145], NFKC: [0x5145], NFKD: [0x5145] }, +{ source: [0xFA75], NFC: [0x5180], NFD: [0x5180], NFKC: [0x5180], NFKD: [0x5180] }, +{ source: [0xFA76], NFC: [0x52C7], NFD: [0x52C7], NFKC: [0x52C7], NFKD: [0x52C7] }, +{ source: [0xFA77], NFC: [0x52FA], NFD: [0x52FA], NFKC: [0x52FA], NFKD: [0x52FA] }, +{ source: [0xFA78], NFC: [0x559D], NFD: [0x559D], NFKC: [0x559D], NFKD: [0x559D] }, +{ source: [0xFA79], NFC: [0x5555], NFD: [0x5555], NFKC: [0x5555], NFKD: [0x5555] }, +{ source: [0xFA7A], NFC: [0x5599], NFD: [0x5599], NFKC: [0x5599], NFKD: [0x5599] }, +{ source: [0xFA7B], NFC: [0x55E2], NFD: [0x55E2], NFKC: [0x55E2], NFKD: [0x55E2] }, +{ source: [0xFA7C], NFC: [0x585A], NFD: [0x585A], NFKC: [0x585A], NFKD: [0x585A] }, +{ source: [0xFA7D], NFC: [0x58B3], NFD: [0x58B3], NFKC: [0x58B3], NFKD: [0x58B3] }, +{ source: [0xFA7E], NFC: [0x5944], NFD: [0x5944], NFKC: [0x5944], NFKD: [0x5944] }, +{ source: [0xFA7F], NFC: [0x5954], NFD: [0x5954], NFKC: [0x5954], NFKD: [0x5954] }, +{ source: [0xFA80], NFC: [0x5A62], NFD: [0x5A62], NFKC: [0x5A62], NFKD: [0x5A62] }, +{ source: [0xFA81], NFC: [0x5B28], NFD: [0x5B28], NFKC: [0x5B28], NFKD: [0x5B28] }, +{ source: [0xFA82], NFC: [0x5ED2], NFD: [0x5ED2], NFKC: [0x5ED2], NFKD: [0x5ED2] }, +{ source: [0xFA83], NFC: [0x5ED9], NFD: [0x5ED9], NFKC: [0x5ED9], NFKD: [0x5ED9] }, +{ source: [0xFA84], NFC: [0x5F69], NFD: [0x5F69], NFKC: [0x5F69], NFKD: [0x5F69] }, +{ source: [0xFA85], NFC: [0x5FAD], NFD: [0x5FAD], NFKC: [0x5FAD], NFKD: [0x5FAD] }, +{ source: [0xFA86], NFC: [0x60D8], NFD: [0x60D8], NFKC: [0x60D8], NFKD: [0x60D8] }, +{ source: [0xFA87], NFC: [0x614E], NFD: [0x614E], NFKC: [0x614E], NFKD: [0x614E] }, +{ source: [0xFA88], NFC: [0x6108], NFD: [0x6108], NFKC: [0x6108], NFKD: [0x6108] }, +{ source: [0xFA89], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] }, +{ source: [0xFA8A], NFC: [0x6160], NFD: [0x6160], NFKC: [0x6160], NFKD: [0x6160] }, +{ source: [0xFA8B], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] }, +{ source: [0xFA8C], NFC: [0x6234], NFD: [0x6234], NFKC: [0x6234], NFKD: [0x6234] }, +{ source: [0xFA8D], NFC: [0x63C4], NFD: [0x63C4], NFKC: [0x63C4], NFKD: [0x63C4] }, +{ source: [0xFA8E], NFC: [0x641C], NFD: [0x641C], NFKC: [0x641C], NFKD: [0x641C] }, +{ source: [0xFA8F], NFC: [0x6452], NFD: [0x6452], NFKC: [0x6452], NFKD: [0x6452] }, +{ source: [0xFA90], NFC: [0x6556], NFD: [0x6556], NFKC: [0x6556], NFKD: [0x6556] }, +{ source: [0xFA91], NFC: [0x6674], NFD: [0x6674], NFKC: [0x6674], NFKD: [0x6674] }, +{ source: [0xFA92], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] }, +{ source: [0xFA93], NFC: [0x671B], NFD: [0x671B], NFKC: [0x671B], NFKD: [0x671B] }, +{ source: [0xFA94], NFC: [0x6756], NFD: [0x6756], NFKC: [0x6756], NFKD: [0x6756] }, +{ source: [0xFA95], NFC: [0x6B79], NFD: [0x6B79], NFKC: [0x6B79], NFKD: [0x6B79] }, +{ source: [0xFA96], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] }, +{ source: [0xFA97], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] }, +{ source: [0xFA98], NFC: [0x6EDB], NFD: [0x6EDB], NFKC: [0x6EDB], NFKD: [0x6EDB] }, +{ source: [0xFA99], NFC: [0x6ECB], NFD: [0x6ECB], NFKC: [0x6ECB], NFKD: [0x6ECB] }, +{ source: [0xFA9A], NFC: [0x6F22], NFD: [0x6F22], NFKC: [0x6F22], NFKD: [0x6F22] }, +{ source: [0xFA9B], NFC: [0x701E], NFD: [0x701E], NFKC: [0x701E], NFKD: [0x701E] }, +{ source: [0xFA9C], NFC: [0x716E], NFD: [0x716E], NFKC: [0x716E], NFKD: [0x716E] }, +{ source: [0xFA9D], NFC: [0x77A7], NFD: [0x77A7], NFKC: [0x77A7], NFKD: [0x77A7] }, +{ source: [0xFA9E], NFC: [0x7235], NFD: [0x7235], NFKC: [0x7235], NFKD: [0x7235] }, +{ source: [0xFA9F], NFC: [0x72AF], NFD: [0x72AF], NFKC: [0x72AF], NFKD: [0x72AF] }, +{ source: [0xFAA0], NFC: [0x732A], NFD: [0x732A], NFKC: [0x732A], NFKD: [0x732A] }, +{ source: [0xFAA1], NFC: [0x7471], NFD: [0x7471], NFKC: [0x7471], NFKD: [0x7471] }, +{ source: [0xFAA2], NFC: [0x7506], NFD: [0x7506], NFKC: [0x7506], NFKD: [0x7506] }, +{ source: [0xFAA3], NFC: [0x753B], NFD: [0x753B], NFKC: [0x753B], NFKD: [0x753B] }, +{ source: [0xFAA4], NFC: [0x761D], NFD: [0x761D], NFKC: [0x761D], NFKD: [0x761D] }, +{ source: [0xFAA5], NFC: [0x761F], NFD: [0x761F], NFKC: [0x761F], NFKD: [0x761F] }, +{ source: [0xFAA6], NFC: [0x76CA], NFD: [0x76CA], NFKC: [0x76CA], NFKD: [0x76CA] }, +{ source: [0xFAA7], NFC: [0x76DB], NFD: [0x76DB], NFKC: [0x76DB], NFKD: [0x76DB] }, +{ source: [0xFAA8], NFC: [0x76F4], NFD: [0x76F4], NFKC: [0x76F4], NFKD: [0x76F4] }, +{ source: [0xFAA9], NFC: [0x774A], NFD: [0x774A], NFKC: [0x774A], NFKD: [0x774A] }, +{ source: [0xFAAA], NFC: [0x7740], NFD: [0x7740], NFKC: [0x7740], NFKD: [0x7740] }, +{ source: [0xFAAB], NFC: [0x78CC], NFD: [0x78CC], NFKC: [0x78CC], NFKD: [0x78CC] }, +{ source: [0xFAAC], NFC: [0x7AB1], NFD: [0x7AB1], NFKC: [0x7AB1], NFKD: [0x7AB1] }, +{ source: [0xFAAD], NFC: [0x7BC0], NFD: [0x7BC0], NFKC: [0x7BC0], NFKD: [0x7BC0] }, +{ source: [0xFAAE], NFC: [0x7C7B], NFD: [0x7C7B], NFKC: [0x7C7B], NFKD: [0x7C7B] }, +{ source: [0xFAAF], NFC: [0x7D5B], NFD: [0x7D5B], NFKC: [0x7D5B], NFKD: [0x7D5B] }, +{ source: [0xFAB0], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] }, +{ source: [0xFAB1], NFC: [0x7F3E], NFD: [0x7F3E], NFKC: [0x7F3E], NFKD: [0x7F3E] }, +{ source: [0xFAB2], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] }, +{ source: [0xFAB3], NFC: [0x8352], NFD: [0x8352], NFKC: [0x8352], NFKD: [0x8352] }, +{ source: [0xFAB4], NFC: [0x83EF], NFD: [0x83EF], NFKC: [0x83EF], NFKD: [0x83EF] }, +{ source: [0xFAB5], NFC: [0x8779], NFD: [0x8779], NFKC: [0x8779], NFKD: [0x8779] }, +{ source: [0xFAB6], NFC: [0x8941], NFD: [0x8941], NFKC: [0x8941], NFKD: [0x8941] }, +{ source: [0xFAB7], NFC: [0x8986], NFD: [0x8986], NFKC: [0x8986], NFKD: [0x8986] }, +{ source: [0xFAB8], NFC: [0x8996], NFD: [0x8996], NFKC: [0x8996], NFKD: [0x8996] }, +{ source: [0xFAB9], NFC: [0x8ABF], NFD: [0x8ABF], NFKC: [0x8ABF], NFKD: [0x8ABF] }, +{ source: [0xFABA], NFC: [0x8AF8], NFD: [0x8AF8], NFKC: [0x8AF8], NFKD: [0x8AF8] }, +{ source: [0xFABB], NFC: [0x8ACB], NFD: [0x8ACB], NFKC: [0x8ACB], NFKD: [0x8ACB] }, +{ source: [0xFABC], NFC: [0x8B01], NFD: [0x8B01], NFKC: [0x8B01], NFKD: [0x8B01] }, +{ source: [0xFABD], NFC: [0x8AFE], NFD: [0x8AFE], NFKC: [0x8AFE], NFKD: [0x8AFE] }, +{ source: [0xFABE], NFC: [0x8AED], NFD: [0x8AED], NFKC: [0x8AED], NFKD: [0x8AED] }, +{ source: [0xFABF], NFC: [0x8B39], NFD: [0x8B39], NFKC: [0x8B39], NFKD: [0x8B39] }, +{ source: [0xFAC0], NFC: [0x8B8A], NFD: [0x8B8A], NFKC: [0x8B8A], NFKD: [0x8B8A] }, +{ source: [0xFAC1], NFC: [0x8D08], NFD: [0x8D08], NFKC: [0x8D08], NFKD: [0x8D08] }, +{ source: [0xFAC2], NFC: [0x8F38], NFD: [0x8F38], NFKC: [0x8F38], NFKD: [0x8F38] }, +{ source: [0xFAC3], NFC: [0x9072], NFD: [0x9072], NFKC: [0x9072], NFKD: [0x9072] }, +{ source: [0xFAC4], NFC: [0x9199], NFD: [0x9199], NFKC: [0x9199], NFKD: [0x9199] }, +{ source: [0xFAC5], NFC: [0x9276], NFD: [0x9276], NFKC: [0x9276], NFKD: [0x9276] }, +{ source: [0xFAC6], NFC: [0x967C], NFD: [0x967C], NFKC: [0x967C], NFKD: [0x967C] }, +{ source: [0xFAC7], NFC: [0x96E3], NFD: [0x96E3], NFKC: [0x96E3], NFKD: [0x96E3] }, +{ source: [0xFAC8], NFC: [0x9756], NFD: [0x9756], NFKC: [0x9756], NFKD: [0x9756] }, +{ source: [0xFAC9], NFC: [0x97DB], NFD: [0x97DB], NFKC: [0x97DB], NFKD: [0x97DB] }, +{ source: [0xFACA], NFC: [0x97FF], NFD: [0x97FF], NFKC: [0x97FF], NFKD: [0x97FF] }, +{ source: [0xFACB], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] }, +{ source: [0xFACC], NFC: [0x983B], NFD: [0x983B], NFKC: [0x983B], NFKD: [0x983B] }, +{ source: [0xFACD], NFC: [0x9B12], NFD: [0x9B12], NFKC: [0x9B12], NFKD: [0x9B12] }, +{ source: [0xFACE], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0xFACF], NFC: [0x2284A], NFD: [0x2284A], NFKC: [0x2284A], NFKD: [0x2284A] }, +{ source: [0xFAD0], NFC: [0x22844], NFD: [0x22844], NFKC: [0x22844], NFKD: [0x22844] }, +{ source: [0xFAD1], NFC: [0x233D5], NFD: [0x233D5], NFKC: [0x233D5], NFKD: [0x233D5] }, +{ source: [0xFAD2], NFC: [0x3B9D], NFD: [0x3B9D], NFKC: [0x3B9D], NFKD: [0x3B9D] }, +{ source: [0xFAD3], NFC: [0x4018], NFD: [0x4018], NFKC: [0x4018], NFKD: [0x4018] }, +{ source: [0xFAD4], NFC: [0x4039], NFD: [0x4039], NFKC: [0x4039], NFKD: [0x4039] }, +{ source: [0xFAD5], NFC: [0x25249], NFD: [0x25249], NFKC: [0x25249], NFKD: [0x25249] }, +{ source: [0xFAD6], NFC: [0x25CD0], NFD: [0x25CD0], NFKC: [0x25CD0], NFKD: [0x25CD0] }, +{ source: [0xFAD7], NFC: [0x27ED3], NFD: [0x27ED3], NFKC: [0x27ED3], NFKD: [0x27ED3] }, +{ source: [0xFAD8], NFC: [0x9F43], NFD: [0x9F43], NFKC: [0x9F43], NFKD: [0x9F43] }, +{ source: [0xFAD9], NFC: [0x9F8E], NFD: [0x9F8E], NFKC: [0x9F8E], NFKD: [0x9F8E] }, +{ source: [0xFB00], NFC: [0xFB00], NFD: [0xFB00], NFKC: [0x0066, 0x0066], NFKD: [0x0066, 0x0066] }, +{ source: [0xFB01], NFC: [0xFB01], NFD: [0xFB01], NFKC: [0x0066, 0x0069], NFKD: [0x0066, 0x0069] }, +{ source: [0xFB02], NFC: [0xFB02], NFD: [0xFB02], NFKC: [0x0066, 0x006C], NFKD: [0x0066, 0x006C] }, +{ source: [0xFB03], NFC: [0xFB03], NFD: [0xFB03], NFKC: [0x0066, 0x0066, 0x0069], NFKD: [0x0066, 0x0066, 0x0069] }, +{ source: [0xFB04], NFC: [0xFB04], NFD: [0xFB04], NFKC: [0x0066, 0x0066, 0x006C], NFKD: [0x0066, 0x0066, 0x006C] }, +{ source: [0xFB05], NFC: [0xFB05], NFD: [0xFB05], NFKC: [0x0073, 0x0074], NFKD: [0x0073, 0x0074] }, +{ source: [0xFB06], NFC: [0xFB06], NFD: [0xFB06], NFKC: [0x0073, 0x0074], NFKD: [0x0073, 0x0074] }, +{ source: [0xFB13], NFC: [0xFB13], NFD: [0xFB13], NFKC: [0x0574, 0x0576], NFKD: [0x0574, 0x0576] }, +{ source: [0xFB14], NFC: [0xFB14], NFD: [0xFB14], NFKC: [0x0574, 0x0565], NFKD: [0x0574, 0x0565] }, +{ source: [0xFB15], NFC: [0xFB15], NFD: [0xFB15], NFKC: [0x0574, 0x056B], NFKD: [0x0574, 0x056B] }, +{ source: [0xFB16], NFC: [0xFB16], NFD: [0xFB16], NFKC: [0x057E, 0x0576], NFKD: [0x057E, 0x0576] }, +{ source: [0xFB17], NFC: [0xFB17], NFD: [0xFB17], NFKC: [0x0574, 0x056D], NFKD: [0x0574, 0x056D] }, +{ source: [0xFB1D], NFC: [0x05D9, 0x05B4], NFD: [0x05D9, 0x05B4], NFKC: [0x05D9, 0x05B4], NFKD: [0x05D9, 0x05B4] }, +{ source: [0xFB1F], NFC: [0x05F2, 0x05B7], NFD: [0x05F2, 0x05B7], NFKC: [0x05F2, 0x05B7], NFKD: [0x05F2, 0x05B7] }, +{ source: [0xFB20], NFC: [0xFB20], NFD: [0xFB20], NFKC: [0x05E2], NFKD: [0x05E2] }, +{ source: [0xFB21], NFC: [0xFB21], NFD: [0xFB21], NFKC: [0x05D0], NFKD: [0x05D0] }, +{ source: [0xFB22], NFC: [0xFB22], NFD: [0xFB22], NFKC: [0x05D3], NFKD: [0x05D3] }, +{ source: [0xFB23], NFC: [0xFB23], NFD: [0xFB23], NFKC: [0x05D4], NFKD: [0x05D4] }, +{ source: [0xFB24], NFC: [0xFB24], NFD: [0xFB24], NFKC: [0x05DB], NFKD: [0x05DB] }, +{ source: [0xFB25], NFC: [0xFB25], NFD: [0xFB25], NFKC: [0x05DC], NFKD: [0x05DC] }, +{ source: [0xFB26], NFC: [0xFB26], NFD: [0xFB26], NFKC: [0x05DD], NFKD: [0x05DD] }, +{ source: [0xFB27], NFC: [0xFB27], NFD: [0xFB27], NFKC: [0x05E8], NFKD: [0x05E8] }, +{ source: [0xFB28], NFC: [0xFB28], NFD: [0xFB28], NFKC: [0x05EA], NFKD: [0x05EA] }, +{ source: [0xFB29], NFC: [0xFB29], NFD: [0xFB29], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0xFB2A], NFC: [0x05E9, 0x05C1], NFD: [0x05E9, 0x05C1], NFKC: [0x05E9, 0x05C1], NFKD: [0x05E9, 0x05C1] }, +{ source: [0xFB2B], NFC: [0x05E9, 0x05C2], NFD: [0x05E9, 0x05C2], NFKC: [0x05E9, 0x05C2], NFKD: [0x05E9, 0x05C2] }, +{ source: [0xFB2C], NFC: [0x05E9, 0x05BC, 0x05C1], NFD: [0x05E9, 0x05BC, 0x05C1], NFKC: [0x05E9, 0x05BC, 0x05C1], NFKD: [0x05E9, 0x05BC, 0x05C1] }, +{ source: [0xFB2D], NFC: [0x05E9, 0x05BC, 0x05C2], NFD: [0x05E9, 0x05BC, 0x05C2], NFKC: [0x05E9, 0x05BC, 0x05C2], NFKD: [0x05E9, 0x05BC, 0x05C2] }, +{ source: [0xFB2E], NFC: [0x05D0, 0x05B7], NFD: [0x05D0, 0x05B7], NFKC: [0x05D0, 0x05B7], NFKD: [0x05D0, 0x05B7] }, +{ source: [0xFB2F], NFC: [0x05D0, 0x05B8], NFD: [0x05D0, 0x05B8], NFKC: [0x05D0, 0x05B8], NFKD: [0x05D0, 0x05B8] }, +{ source: [0xFB30], NFC: [0x05D0, 0x05BC], NFD: [0x05D0, 0x05BC], NFKC: [0x05D0, 0x05BC], NFKD: [0x05D0, 0x05BC] }, +{ source: [0xFB31], NFC: [0x05D1, 0x05BC], NFD: [0x05D1, 0x05BC], NFKC: [0x05D1, 0x05BC], NFKD: [0x05D1, 0x05BC] }, +{ source: [0xFB32], NFC: [0x05D2, 0x05BC], NFD: [0x05D2, 0x05BC], NFKC: [0x05D2, 0x05BC], NFKD: [0x05D2, 0x05BC] }, +{ source: [0xFB33], NFC: [0x05D3, 0x05BC], NFD: [0x05D3, 0x05BC], NFKC: [0x05D3, 0x05BC], NFKD: [0x05D3, 0x05BC] }, +{ source: [0xFB34], NFC: [0x05D4, 0x05BC], NFD: [0x05D4, 0x05BC], NFKC: [0x05D4, 0x05BC], NFKD: [0x05D4, 0x05BC] }, +{ source: [0xFB35], NFC: [0x05D5, 0x05BC], NFD: [0x05D5, 0x05BC], NFKC: [0x05D5, 0x05BC], NFKD: [0x05D5, 0x05BC] }, +{ source: [0xFB36], NFC: [0x05D6, 0x05BC], NFD: [0x05D6, 0x05BC], NFKC: [0x05D6, 0x05BC], NFKD: [0x05D6, 0x05BC] }, +{ source: [0xFB38], NFC: [0x05D8, 0x05BC], NFD: [0x05D8, 0x05BC], NFKC: [0x05D8, 0x05BC], NFKD: [0x05D8, 0x05BC] }, +{ source: [0xFB39], NFC: [0x05D9, 0x05BC], NFD: [0x05D9, 0x05BC], NFKC: [0x05D9, 0x05BC], NFKD: [0x05D9, 0x05BC] }, +{ source: [0xFB3A], NFC: [0x05DA, 0x05BC], NFD: [0x05DA, 0x05BC], NFKC: [0x05DA, 0x05BC], NFKD: [0x05DA, 0x05BC] }, +{ source: [0xFB3B], NFC: [0x05DB, 0x05BC], NFD: [0x05DB, 0x05BC], NFKC: [0x05DB, 0x05BC], NFKD: [0x05DB, 0x05BC] }, +{ source: [0xFB3C], NFC: [0x05DC, 0x05BC], NFD: [0x05DC, 0x05BC], NFKC: [0x05DC, 0x05BC], NFKD: [0x05DC, 0x05BC] }, +{ source: [0xFB3E], NFC: [0x05DE, 0x05BC], NFD: [0x05DE, 0x05BC], NFKC: [0x05DE, 0x05BC], NFKD: [0x05DE, 0x05BC] }, +{ source: [0xFB40], NFC: [0x05E0, 0x05BC], NFD: [0x05E0, 0x05BC], NFKC: [0x05E0, 0x05BC], NFKD: [0x05E0, 0x05BC] }, +{ source: [0xFB41], NFC: [0x05E1, 0x05BC], NFD: [0x05E1, 0x05BC], NFKC: [0x05E1, 0x05BC], NFKD: [0x05E1, 0x05BC] }, +{ source: [0xFB43], NFC: [0x05E3, 0x05BC], NFD: [0x05E3, 0x05BC], NFKC: [0x05E3, 0x05BC], NFKD: [0x05E3, 0x05BC] }, +{ source: [0xFB44], NFC: [0x05E4, 0x05BC], NFD: [0x05E4, 0x05BC], NFKC: [0x05E4, 0x05BC], NFKD: [0x05E4, 0x05BC] }, +{ source: [0xFB46], NFC: [0x05E6, 0x05BC], NFD: [0x05E6, 0x05BC], NFKC: [0x05E6, 0x05BC], NFKD: [0x05E6, 0x05BC] }, +{ source: [0xFB47], NFC: [0x05E7, 0x05BC], NFD: [0x05E7, 0x05BC], NFKC: [0x05E7, 0x05BC], NFKD: [0x05E7, 0x05BC] }, +{ source: [0xFB48], NFC: [0x05E8, 0x05BC], NFD: [0x05E8, 0x05BC], NFKC: [0x05E8, 0x05BC], NFKD: [0x05E8, 0x05BC] }, +{ source: [0xFB49], NFC: [0x05E9, 0x05BC], NFD: [0x05E9, 0x05BC], NFKC: [0x05E9, 0x05BC], NFKD: [0x05E9, 0x05BC] }, +{ source: [0xFB4A], NFC: [0x05EA, 0x05BC], NFD: [0x05EA, 0x05BC], NFKC: [0x05EA, 0x05BC], NFKD: [0x05EA, 0x05BC] }, +{ source: [0xFB4B], NFC: [0x05D5, 0x05B9], NFD: [0x05D5, 0x05B9], NFKC: [0x05D5, 0x05B9], NFKD: [0x05D5, 0x05B9] }, +{ source: [0xFB4C], NFC: [0x05D1, 0x05BF], NFD: [0x05D1, 0x05BF], NFKC: [0x05D1, 0x05BF], NFKD: [0x05D1, 0x05BF] }, +{ source: [0xFB4D], NFC: [0x05DB, 0x05BF], NFD: [0x05DB, 0x05BF], NFKC: [0x05DB, 0x05BF], NFKD: [0x05DB, 0x05BF] }, +{ source: [0xFB4E], NFC: [0x05E4, 0x05BF], NFD: [0x05E4, 0x05BF], NFKC: [0x05E4, 0x05BF], NFKD: [0x05E4, 0x05BF] }, +{ source: [0xFB4F], NFC: [0xFB4F], NFD: [0xFB4F], NFKC: [0x05D0, 0x05DC], NFKD: [0x05D0, 0x05DC] }, +{ source: [0xFB50], NFC: [0xFB50], NFD: [0xFB50], NFKC: [0x0671], NFKD: [0x0671] }, +{ source: [0xFB51], NFC: [0xFB51], NFD: [0xFB51], NFKC: [0x0671], NFKD: [0x0671] }, +{ source: [0xFB52], NFC: [0xFB52], NFD: [0xFB52], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB53], NFC: [0xFB53], NFD: [0xFB53], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB54], NFC: [0xFB54], NFD: [0xFB54], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB55], NFC: [0xFB55], NFD: [0xFB55], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB56], NFC: [0xFB56], NFD: [0xFB56], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB57], NFC: [0xFB57], NFD: [0xFB57], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB58], NFC: [0xFB58], NFD: [0xFB58], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB59], NFC: [0xFB59], NFD: [0xFB59], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB5A], NFC: [0xFB5A], NFD: [0xFB5A], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5B], NFC: [0xFB5B], NFD: [0xFB5B], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5C], NFC: [0xFB5C], NFD: [0xFB5C], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5D], NFC: [0xFB5D], NFD: [0xFB5D], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5E], NFC: [0xFB5E], NFD: [0xFB5E], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB5F], NFC: [0xFB5F], NFD: [0xFB5F], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB60], NFC: [0xFB60], NFD: [0xFB60], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB61], NFC: [0xFB61], NFD: [0xFB61], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB62], NFC: [0xFB62], NFD: [0xFB62], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB63], NFC: [0xFB63], NFD: [0xFB63], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB64], NFC: [0xFB64], NFD: [0xFB64], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB65], NFC: [0xFB65], NFD: [0xFB65], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB66], NFC: [0xFB66], NFD: [0xFB66], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB67], NFC: [0xFB67], NFD: [0xFB67], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB68], NFC: [0xFB68], NFD: [0xFB68], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB69], NFC: [0xFB69], NFD: [0xFB69], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB6A], NFC: [0xFB6A], NFD: [0xFB6A], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6B], NFC: [0xFB6B], NFD: [0xFB6B], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6C], NFC: [0xFB6C], NFD: [0xFB6C], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6D], NFC: [0xFB6D], NFD: [0xFB6D], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6E], NFC: [0xFB6E], NFD: [0xFB6E], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB6F], NFC: [0xFB6F], NFD: [0xFB6F], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB70], NFC: [0xFB70], NFD: [0xFB70], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB71], NFC: [0xFB71], NFD: [0xFB71], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB72], NFC: [0xFB72], NFD: [0xFB72], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB73], NFC: [0xFB73], NFD: [0xFB73], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB74], NFC: [0xFB74], NFD: [0xFB74], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB75], NFC: [0xFB75], NFD: [0xFB75], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB76], NFC: [0xFB76], NFD: [0xFB76], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB77], NFC: [0xFB77], NFD: [0xFB77], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB78], NFC: [0xFB78], NFD: [0xFB78], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB79], NFC: [0xFB79], NFD: [0xFB79], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB7A], NFC: [0xFB7A], NFD: [0xFB7A], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7B], NFC: [0xFB7B], NFD: [0xFB7B], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7C], NFC: [0xFB7C], NFD: [0xFB7C], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7D], NFC: [0xFB7D], NFD: [0xFB7D], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7E], NFC: [0xFB7E], NFD: [0xFB7E], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB7F], NFC: [0xFB7F], NFD: [0xFB7F], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB80], NFC: [0xFB80], NFD: [0xFB80], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB81], NFC: [0xFB81], NFD: [0xFB81], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB82], NFC: [0xFB82], NFD: [0xFB82], NFKC: [0x068D], NFKD: [0x068D] }, +{ source: [0xFB83], NFC: [0xFB83], NFD: [0xFB83], NFKC: [0x068D], NFKD: [0x068D] }, +{ source: [0xFB84], NFC: [0xFB84], NFD: [0xFB84], NFKC: [0x068C], NFKD: [0x068C] }, +{ source: [0xFB85], NFC: [0xFB85], NFD: [0xFB85], NFKC: [0x068C], NFKD: [0x068C] }, +{ source: [0xFB86], NFC: [0xFB86], NFD: [0xFB86], NFKC: [0x068E], NFKD: [0x068E] }, +{ source: [0xFB87], NFC: [0xFB87], NFD: [0xFB87], NFKC: [0x068E], NFKD: [0x068E] }, +{ source: [0xFB88], NFC: [0xFB88], NFD: [0xFB88], NFKC: [0x0688], NFKD: [0x0688] }, +{ source: [0xFB89], NFC: [0xFB89], NFD: [0xFB89], NFKC: [0x0688], NFKD: [0x0688] }, +{ source: [0xFB8A], NFC: [0xFB8A], NFD: [0xFB8A], NFKC: [0x0698], NFKD: [0x0698] }, +{ source: [0xFB8B], NFC: [0xFB8B], NFD: [0xFB8B], NFKC: [0x0698], NFKD: [0x0698] }, +{ source: [0xFB8C], NFC: [0xFB8C], NFD: [0xFB8C], NFKC: [0x0691], NFKD: [0x0691] }, +{ source: [0xFB8D], NFC: [0xFB8D], NFD: [0xFB8D], NFKC: [0x0691], NFKD: [0x0691] }, +{ source: [0xFB8E], NFC: [0xFB8E], NFD: [0xFB8E], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB8F], NFC: [0xFB8F], NFD: [0xFB8F], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB90], NFC: [0xFB90], NFD: [0xFB90], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB91], NFC: [0xFB91], NFD: [0xFB91], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB92], NFC: [0xFB92], NFD: [0xFB92], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB93], NFC: [0xFB93], NFD: [0xFB93], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB94], NFC: [0xFB94], NFD: [0xFB94], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB95], NFC: [0xFB95], NFD: [0xFB95], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB96], NFC: [0xFB96], NFD: [0xFB96], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB97], NFC: [0xFB97], NFD: [0xFB97], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB98], NFC: [0xFB98], NFD: [0xFB98], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB99], NFC: [0xFB99], NFD: [0xFB99], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB9A], NFC: [0xFB9A], NFD: [0xFB9A], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9B], NFC: [0xFB9B], NFD: [0xFB9B], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9C], NFC: [0xFB9C], NFD: [0xFB9C], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9D], NFC: [0xFB9D], NFD: [0xFB9D], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9E], NFC: [0xFB9E], NFD: [0xFB9E], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0xFB9F], NFC: [0xFB9F], NFD: [0xFB9F], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0xFBA0], NFC: [0xFBA0], NFD: [0xFBA0], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA1], NFC: [0xFBA1], NFD: [0xFBA1], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA2], NFC: [0xFBA2], NFD: [0xFBA2], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA3], NFC: [0xFBA3], NFD: [0xFBA3], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA4], NFC: [0xFBA4], NFD: [0xFBA4], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] }, +{ source: [0xFBA5], NFC: [0xFBA5], NFD: [0xFBA5], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] }, +{ source: [0xFBA6], NFC: [0xFBA6], NFD: [0xFBA6], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBA7], NFC: [0xFBA7], NFD: [0xFBA7], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBA8], NFC: [0xFBA8], NFD: [0xFBA8], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBA9], NFC: [0xFBA9], NFD: [0xFBA9], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBAA], NFC: [0xFBAA], NFD: [0xFBAA], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAB], NFC: [0xFBAB], NFD: [0xFBAB], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAC], NFC: [0xFBAC], NFD: [0xFBAC], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAD], NFC: [0xFBAD], NFD: [0xFBAD], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAE], NFC: [0xFBAE], NFD: [0xFBAE], NFKC: [0x06D2], NFKD: [0x06D2] }, +{ source: [0xFBAF], NFC: [0xFBAF], NFD: [0xFBAF], NFKC: [0x06D2], NFKD: [0x06D2] }, +{ source: [0xFBB0], NFC: [0xFBB0], NFD: [0xFBB0], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] }, +{ source: [0xFBB1], NFC: [0xFBB1], NFD: [0xFBB1], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] }, +{ source: [0xFBD3], NFC: [0xFBD3], NFD: [0xFBD3], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD4], NFC: [0xFBD4], NFD: [0xFBD4], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD5], NFC: [0xFBD5], NFD: [0xFBD5], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD6], NFC: [0xFBD6], NFD: [0xFBD6], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD7], NFC: [0xFBD7], NFD: [0xFBD7], NFKC: [0x06C7], NFKD: [0x06C7] }, +{ source: [0xFBD8], NFC: [0xFBD8], NFD: [0xFBD8], NFKC: [0x06C7], NFKD: [0x06C7] }, +{ source: [0xFBD9], NFC: [0xFBD9], NFD: [0xFBD9], NFKC: [0x06C6], NFKD: [0x06C6] }, +{ source: [0xFBDA], NFC: [0xFBDA], NFD: [0xFBDA], NFKC: [0x06C6], NFKD: [0x06C6] }, +{ source: [0xFBDB], NFC: [0xFBDB], NFD: [0xFBDB], NFKC: [0x06C8], NFKD: [0x06C8] }, +{ source: [0xFBDC], NFC: [0xFBDC], NFD: [0xFBDC], NFKC: [0x06C8], NFKD: [0x06C8] }, +{ source: [0xFBDD], NFC: [0xFBDD], NFD: [0xFBDD], NFKC: [0x06C7, 0x0674], NFKD: [0x06C7, 0x0674] }, +{ source: [0xFBDE], NFC: [0xFBDE], NFD: [0xFBDE], NFKC: [0x06CB], NFKD: [0x06CB] }, +{ source: [0xFBDF], NFC: [0xFBDF], NFD: [0xFBDF], NFKC: [0x06CB], NFKD: [0x06CB] }, +{ source: [0xFBE0], NFC: [0xFBE0], NFD: [0xFBE0], NFKC: [0x06C5], NFKD: [0x06C5] }, +{ source: [0xFBE1], NFC: [0xFBE1], NFD: [0xFBE1], NFKC: [0x06C5], NFKD: [0x06C5] }, +{ source: [0xFBE2], NFC: [0xFBE2], NFD: [0xFBE2], NFKC: [0x06C9], NFKD: [0x06C9] }, +{ source: [0xFBE3], NFC: [0xFBE3], NFD: [0xFBE3], NFKC: [0x06C9], NFKD: [0x06C9] }, +{ source: [0xFBE4], NFC: [0xFBE4], NFD: [0xFBE4], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE5], NFC: [0xFBE5], NFD: [0xFBE5], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE6], NFC: [0xFBE6], NFD: [0xFBE6], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE7], NFC: [0xFBE7], NFD: [0xFBE7], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE8], NFC: [0xFBE8], NFD: [0xFBE8], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFBE9], NFC: [0xFBE9], NFD: [0xFBE9], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFBEA], NFC: [0xFBEA], NFD: [0xFBEA], NFKC: [0x0626, 0x0627], NFKD: [0x064A, 0x0654, 0x0627] }, +{ source: [0xFBEB], NFC: [0xFBEB], NFD: [0xFBEB], NFKC: [0x0626, 0x0627], NFKD: [0x064A, 0x0654, 0x0627] }, +{ source: [0xFBEC], NFC: [0xFBEC], NFD: [0xFBEC], NFKC: [0x0626, 0x06D5], NFKD: [0x064A, 0x0654, 0x06D5] }, +{ source: [0xFBED], NFC: [0xFBED], NFD: [0xFBED], NFKC: [0x0626, 0x06D5], NFKD: [0x064A, 0x0654, 0x06D5] }, +{ source: [0xFBEE], NFC: [0xFBEE], NFD: [0xFBEE], NFKC: [0x0626, 0x0648], NFKD: [0x064A, 0x0654, 0x0648] }, +{ source: [0xFBEF], NFC: [0xFBEF], NFD: [0xFBEF], NFKC: [0x0626, 0x0648], NFKD: [0x064A, 0x0654, 0x0648] }, +{ source: [0xFBF0], NFC: [0xFBF0], NFD: [0xFBF0], NFKC: [0x0626, 0x06C7], NFKD: [0x064A, 0x0654, 0x06C7] }, +{ source: [0xFBF1], NFC: [0xFBF1], NFD: [0xFBF1], NFKC: [0x0626, 0x06C7], NFKD: [0x064A, 0x0654, 0x06C7] }, +{ source: [0xFBF2], NFC: [0xFBF2], NFD: [0xFBF2], NFKC: [0x0626, 0x06C6], NFKD: [0x064A, 0x0654, 0x06C6] }, +{ source: [0xFBF3], NFC: [0xFBF3], NFD: [0xFBF3], NFKC: [0x0626, 0x06C6], NFKD: [0x064A, 0x0654, 0x06C6] }, +{ source: [0xFBF4], NFC: [0xFBF4], NFD: [0xFBF4], NFKC: [0x0626, 0x06C8], NFKD: [0x064A, 0x0654, 0x06C8] }, +{ source: [0xFBF5], NFC: [0xFBF5], NFD: [0xFBF5], NFKC: [0x0626, 0x06C8], NFKD: [0x064A, 0x0654, 0x06C8] }, +{ source: [0xFBF6], NFC: [0xFBF6], NFD: [0xFBF6], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] }, +{ source: [0xFBF7], NFC: [0xFBF7], NFD: [0xFBF7], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] }, +{ source: [0xFBF8], NFC: [0xFBF8], NFD: [0xFBF8], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] }, +{ source: [0xFBF9], NFC: [0xFBF9], NFD: [0xFBF9], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFBFA], NFC: [0xFBFA], NFD: [0xFBFA], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFBFB], NFC: [0xFBFB], NFD: [0xFBFB], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFBFC], NFC: [0xFBFC], NFD: [0xFBFC], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFBFD], NFC: [0xFBFD], NFD: [0xFBFD], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFBFE], NFC: [0xFBFE], NFD: [0xFBFE], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFBFF], NFC: [0xFBFF], NFD: [0xFBFF], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFC00], NFC: [0xFC00], NFD: [0xFC00], NFKC: [0x0626, 0x062C], NFKD: [0x064A, 0x0654, 0x062C] }, +{ source: [0xFC01], NFC: [0xFC01], NFD: [0xFC01], NFKC: [0x0626, 0x062D], NFKD: [0x064A, 0x0654, 0x062D] }, +{ source: [0xFC02], NFC: [0xFC02], NFD: [0xFC02], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFC03], NFC: [0xFC03], NFD: [0xFC03], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFC04], NFC: [0xFC04], NFD: [0xFC04], NFKC: [0x0626, 0x064A], NFKD: [0x064A, 0x0654, 0x064A] }, +{ source: [0xFC05], NFC: [0xFC05], NFD: [0xFC05], NFKC: [0x0628, 0x062C], NFKD: [0x0628, 0x062C] }, +{ source: [0xFC06], NFC: [0xFC06], NFD: [0xFC06], NFKC: [0x0628, 0x062D], NFKD: [0x0628, 0x062D] }, +{ source: [0xFC07], NFC: [0xFC07], NFD: [0xFC07], NFKC: [0x0628, 0x062E], NFKD: [0x0628, 0x062E] }, +{ source: [0xFC08], NFC: [0xFC08], NFD: [0xFC08], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFC09], NFC: [0xFC09], NFD: [0xFC09], NFKC: [0x0628, 0x0649], NFKD: [0x0628, 0x0649] }, +{ source: [0xFC0A], NFC: [0xFC0A], NFD: [0xFC0A], NFKC: [0x0628, 0x064A], NFKD: [0x0628, 0x064A] }, +{ source: [0xFC0B], NFC: [0xFC0B], NFD: [0xFC0B], NFKC: [0x062A, 0x062C], NFKD: [0x062A, 0x062C] }, +{ source: [0xFC0C], NFC: [0xFC0C], NFD: [0xFC0C], NFKC: [0x062A, 0x062D], NFKD: [0x062A, 0x062D] }, +{ source: [0xFC0D], NFC: [0xFC0D], NFD: [0xFC0D], NFKC: [0x062A, 0x062E], NFKD: [0x062A, 0x062E] }, +{ source: [0xFC0E], NFC: [0xFC0E], NFD: [0xFC0E], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFC0F], NFC: [0xFC0F], NFD: [0xFC0F], NFKC: [0x062A, 0x0649], NFKD: [0x062A, 0x0649] }, +{ source: [0xFC10], NFC: [0xFC10], NFD: [0xFC10], NFKC: [0x062A, 0x064A], NFKD: [0x062A, 0x064A] }, +{ source: [0xFC11], NFC: [0xFC11], NFD: [0xFC11], NFKC: [0x062B, 0x062C], NFKD: [0x062B, 0x062C] }, +{ source: [0xFC12], NFC: [0xFC12], NFD: [0xFC12], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFC13], NFC: [0xFC13], NFD: [0xFC13], NFKC: [0x062B, 0x0649], NFKD: [0x062B, 0x0649] }, +{ source: [0xFC14], NFC: [0xFC14], NFD: [0xFC14], NFKC: [0x062B, 0x064A], NFKD: [0x062B, 0x064A] }, +{ source: [0xFC15], NFC: [0xFC15], NFD: [0xFC15], NFKC: [0x062C, 0x062D], NFKD: [0x062C, 0x062D] }, +{ source: [0xFC16], NFC: [0xFC16], NFD: [0xFC16], NFKC: [0x062C, 0x0645], NFKD: [0x062C, 0x0645] }, +{ source: [0xFC17], NFC: [0xFC17], NFD: [0xFC17], NFKC: [0x062D, 0x062C], NFKD: [0x062D, 0x062C] }, +{ source: [0xFC18], NFC: [0xFC18], NFD: [0xFC18], NFKC: [0x062D, 0x0645], NFKD: [0x062D, 0x0645] }, +{ source: [0xFC19], NFC: [0xFC19], NFD: [0xFC19], NFKC: [0x062E, 0x062C], NFKD: [0x062E, 0x062C] }, +{ source: [0xFC1A], NFC: [0xFC1A], NFD: [0xFC1A], NFKC: [0x062E, 0x062D], NFKD: [0x062E, 0x062D] }, +{ source: [0xFC1B], NFC: [0xFC1B], NFD: [0xFC1B], NFKC: [0x062E, 0x0645], NFKD: [0x062E, 0x0645] }, +{ source: [0xFC1C], NFC: [0xFC1C], NFD: [0xFC1C], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] }, +{ source: [0xFC1D], NFC: [0xFC1D], NFD: [0xFC1D], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] }, +{ source: [0xFC1E], NFC: [0xFC1E], NFD: [0xFC1E], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] }, +{ source: [0xFC1F], NFC: [0xFC1F], NFD: [0xFC1F], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] }, +{ source: [0xFC20], NFC: [0xFC20], NFD: [0xFC20], NFKC: [0x0635, 0x062D], NFKD: [0x0635, 0x062D] }, +{ source: [0xFC21], NFC: [0xFC21], NFD: [0xFC21], NFKC: [0x0635, 0x0645], NFKD: [0x0635, 0x0645] }, +{ source: [0xFC22], NFC: [0xFC22], NFD: [0xFC22], NFKC: [0x0636, 0x062C], NFKD: [0x0636, 0x062C] }, +{ source: [0xFC23], NFC: [0xFC23], NFD: [0xFC23], NFKC: [0x0636, 0x062D], NFKD: [0x0636, 0x062D] }, +{ source: [0xFC24], NFC: [0xFC24], NFD: [0xFC24], NFKC: [0x0636, 0x062E], NFKD: [0x0636, 0x062E] }, +{ source: [0xFC25], NFC: [0xFC25], NFD: [0xFC25], NFKC: [0x0636, 0x0645], NFKD: [0x0636, 0x0645] }, +{ source: [0xFC26], NFC: [0xFC26], NFD: [0xFC26], NFKC: [0x0637, 0x062D], NFKD: [0x0637, 0x062D] }, +{ source: [0xFC27], NFC: [0xFC27], NFD: [0xFC27], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] }, +{ source: [0xFC28], NFC: [0xFC28], NFD: [0xFC28], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] }, +{ source: [0xFC29], NFC: [0xFC29], NFD: [0xFC29], NFKC: [0x0639, 0x062C], NFKD: [0x0639, 0x062C] }, +{ source: [0xFC2A], NFC: [0xFC2A], NFD: [0xFC2A], NFKC: [0x0639, 0x0645], NFKD: [0x0639, 0x0645] }, +{ source: [0xFC2B], NFC: [0xFC2B], NFD: [0xFC2B], NFKC: [0x063A, 0x062C], NFKD: [0x063A, 0x062C] }, +{ source: [0xFC2C], NFC: [0xFC2C], NFD: [0xFC2C], NFKC: [0x063A, 0x0645], NFKD: [0x063A, 0x0645] }, +{ source: [0xFC2D], NFC: [0xFC2D], NFD: [0xFC2D], NFKC: [0x0641, 0x062C], NFKD: [0x0641, 0x062C] }, +{ source: [0xFC2E], NFC: [0xFC2E], NFD: [0xFC2E], NFKC: [0x0641, 0x062D], NFKD: [0x0641, 0x062D] }, +{ source: [0xFC2F], NFC: [0xFC2F], NFD: [0xFC2F], NFKC: [0x0641, 0x062E], NFKD: [0x0641, 0x062E] }, +{ source: [0xFC30], NFC: [0xFC30], NFD: [0xFC30], NFKC: [0x0641, 0x0645], NFKD: [0x0641, 0x0645] }, +{ source: [0xFC31], NFC: [0xFC31], NFD: [0xFC31], NFKC: [0x0641, 0x0649], NFKD: [0x0641, 0x0649] }, +{ source: [0xFC32], NFC: [0xFC32], NFD: [0xFC32], NFKC: [0x0641, 0x064A], NFKD: [0x0641, 0x064A] }, +{ source: [0xFC33], NFC: [0xFC33], NFD: [0xFC33], NFKC: [0x0642, 0x062D], NFKD: [0x0642, 0x062D] }, +{ source: [0xFC34], NFC: [0xFC34], NFD: [0xFC34], NFKC: [0x0642, 0x0645], NFKD: [0x0642, 0x0645] }, +{ source: [0xFC35], NFC: [0xFC35], NFD: [0xFC35], NFKC: [0x0642, 0x0649], NFKD: [0x0642, 0x0649] }, +{ source: [0xFC36], NFC: [0xFC36], NFD: [0xFC36], NFKC: [0x0642, 0x064A], NFKD: [0x0642, 0x064A] }, +{ source: [0xFC37], NFC: [0xFC37], NFD: [0xFC37], NFKC: [0x0643, 0x0627], NFKD: [0x0643, 0x0627] }, +{ source: [0xFC38], NFC: [0xFC38], NFD: [0xFC38], NFKC: [0x0643, 0x062C], NFKD: [0x0643, 0x062C] }, +{ source: [0xFC39], NFC: [0xFC39], NFD: [0xFC39], NFKC: [0x0643, 0x062D], NFKD: [0x0643, 0x062D] }, +{ source: [0xFC3A], NFC: [0xFC3A], NFD: [0xFC3A], NFKC: [0x0643, 0x062E], NFKD: [0x0643, 0x062E] }, +{ source: [0xFC3B], NFC: [0xFC3B], NFD: [0xFC3B], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFC3C], NFC: [0xFC3C], NFD: [0xFC3C], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFC3D], NFC: [0xFC3D], NFD: [0xFC3D], NFKC: [0x0643, 0x0649], NFKD: [0x0643, 0x0649] }, +{ source: [0xFC3E], NFC: [0xFC3E], NFD: [0xFC3E], NFKC: [0x0643, 0x064A], NFKD: [0x0643, 0x064A] }, +{ source: [0xFC3F], NFC: [0xFC3F], NFD: [0xFC3F], NFKC: [0x0644, 0x062C], NFKD: [0x0644, 0x062C] }, +{ source: [0xFC40], NFC: [0xFC40], NFD: [0xFC40], NFKC: [0x0644, 0x062D], NFKD: [0x0644, 0x062D] }, +{ source: [0xFC41], NFC: [0xFC41], NFD: [0xFC41], NFKC: [0x0644, 0x062E], NFKD: [0x0644, 0x062E] }, +{ source: [0xFC42], NFC: [0xFC42], NFD: [0xFC42], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFC43], NFC: [0xFC43], NFD: [0xFC43], NFKC: [0x0644, 0x0649], NFKD: [0x0644, 0x0649] }, +{ source: [0xFC44], NFC: [0xFC44], NFD: [0xFC44], NFKC: [0x0644, 0x064A], NFKD: [0x0644, 0x064A] }, +{ source: [0xFC45], NFC: [0xFC45], NFD: [0xFC45], NFKC: [0x0645, 0x062C], NFKD: [0x0645, 0x062C] }, +{ source: [0xFC46], NFC: [0xFC46], NFD: [0xFC46], NFKC: [0x0645, 0x062D], NFKD: [0x0645, 0x062D] }, +{ source: [0xFC47], NFC: [0xFC47], NFD: [0xFC47], NFKC: [0x0645, 0x062E], NFKD: [0x0645, 0x062E] }, +{ source: [0xFC48], NFC: [0xFC48], NFD: [0xFC48], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] }, +{ source: [0xFC49], NFC: [0xFC49], NFD: [0xFC49], NFKC: [0x0645, 0x0649], NFKD: [0x0645, 0x0649] }, +{ source: [0xFC4A], NFC: [0xFC4A], NFD: [0xFC4A], NFKC: [0x0645, 0x064A], NFKD: [0x0645, 0x064A] }, +{ source: [0xFC4B], NFC: [0xFC4B], NFD: [0xFC4B], NFKC: [0x0646, 0x062C], NFKD: [0x0646, 0x062C] }, +{ source: [0xFC4C], NFC: [0xFC4C], NFD: [0xFC4C], NFKC: [0x0646, 0x062D], NFKD: [0x0646, 0x062D] }, +{ source: [0xFC4D], NFC: [0xFC4D], NFD: [0xFC4D], NFKC: [0x0646, 0x062E], NFKD: [0x0646, 0x062E] }, +{ source: [0xFC4E], NFC: [0xFC4E], NFD: [0xFC4E], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFC4F], NFC: [0xFC4F], NFD: [0xFC4F], NFKC: [0x0646, 0x0649], NFKD: [0x0646, 0x0649] }, +{ source: [0xFC50], NFC: [0xFC50], NFD: [0xFC50], NFKC: [0x0646, 0x064A], NFKD: [0x0646, 0x064A] }, +{ source: [0xFC51], NFC: [0xFC51], NFD: [0xFC51], NFKC: [0x0647, 0x062C], NFKD: [0x0647, 0x062C] }, +{ source: [0xFC52], NFC: [0xFC52], NFD: [0xFC52], NFKC: [0x0647, 0x0645], NFKD: [0x0647, 0x0645] }, +{ source: [0xFC53], NFC: [0xFC53], NFD: [0xFC53], NFKC: [0x0647, 0x0649], NFKD: [0x0647, 0x0649] }, +{ source: [0xFC54], NFC: [0xFC54], NFD: [0xFC54], NFKC: [0x0647, 0x064A], NFKD: [0x0647, 0x064A] }, +{ source: [0xFC55], NFC: [0xFC55], NFD: [0xFC55], NFKC: [0x064A, 0x062C], NFKD: [0x064A, 0x062C] }, +{ source: [0xFC56], NFC: [0xFC56], NFD: [0xFC56], NFKC: [0x064A, 0x062D], NFKD: [0x064A, 0x062D] }, +{ source: [0xFC57], NFC: [0xFC57], NFD: [0xFC57], NFKC: [0x064A, 0x062E], NFKD: [0x064A, 0x062E] }, +{ source: [0xFC58], NFC: [0xFC58], NFD: [0xFC58], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFC59], NFC: [0xFC59], NFD: [0xFC59], NFKC: [0x064A, 0x0649], NFKD: [0x064A, 0x0649] }, +{ source: [0xFC5A], NFC: [0xFC5A], NFD: [0xFC5A], NFKC: [0x064A, 0x064A], NFKD: [0x064A, 0x064A] }, +{ source: [0xFC5B], NFC: [0xFC5B], NFD: [0xFC5B], NFKC: [0x0630, 0x0670], NFKD: [0x0630, 0x0670] }, +{ source: [0xFC5C], NFC: [0xFC5C], NFD: [0xFC5C], NFKC: [0x0631, 0x0670], NFKD: [0x0631, 0x0670] }, +{ source: [0xFC5D], NFC: [0xFC5D], NFD: [0xFC5D], NFKC: [0x0649, 0x0670], NFKD: [0x0649, 0x0670] }, +{ source: [0xFC5E], NFC: [0xFC5E], NFD: [0xFC5E], NFKC: [0x0020, 0x064C, 0x0651], NFKD: [0x0020, 0x064C, 0x0651] }, +{ source: [0xFC5F], NFC: [0xFC5F], NFD: [0xFC5F], NFKC: [0x0020, 0x064D, 0x0651], NFKD: [0x0020, 0x064D, 0x0651] }, +{ source: [0xFC60], NFC: [0xFC60], NFD: [0xFC60], NFKC: [0x0020, 0x064E, 0x0651], NFKD: [0x0020, 0x064E, 0x0651] }, +{ source: [0xFC61], NFC: [0xFC61], NFD: [0xFC61], NFKC: [0x0020, 0x064F, 0x0651], NFKD: [0x0020, 0x064F, 0x0651] }, +{ source: [0xFC62], NFC: [0xFC62], NFD: [0xFC62], NFKC: [0x0020, 0x0650, 0x0651], NFKD: [0x0020, 0x0650, 0x0651] }, +{ source: [0xFC63], NFC: [0xFC63], NFD: [0xFC63], NFKC: [0x0020, 0x0651, 0x0670], NFKD: [0x0020, 0x0651, 0x0670] }, +{ source: [0xFC64], NFC: [0xFC64], NFD: [0xFC64], NFKC: [0x0626, 0x0631], NFKD: [0x064A, 0x0654, 0x0631] }, +{ source: [0xFC65], NFC: [0xFC65], NFD: [0xFC65], NFKC: [0x0626, 0x0632], NFKD: [0x064A, 0x0654, 0x0632] }, +{ source: [0xFC66], NFC: [0xFC66], NFD: [0xFC66], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFC67], NFC: [0xFC67], NFD: [0xFC67], NFKC: [0x0626, 0x0646], NFKD: [0x064A, 0x0654, 0x0646] }, +{ source: [0xFC68], NFC: [0xFC68], NFD: [0xFC68], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFC69], NFC: [0xFC69], NFD: [0xFC69], NFKC: [0x0626, 0x064A], NFKD: [0x064A, 0x0654, 0x064A] }, +{ source: [0xFC6A], NFC: [0xFC6A], NFD: [0xFC6A], NFKC: [0x0628, 0x0631], NFKD: [0x0628, 0x0631] }, +{ source: [0xFC6B], NFC: [0xFC6B], NFD: [0xFC6B], NFKC: [0x0628, 0x0632], NFKD: [0x0628, 0x0632] }, +{ source: [0xFC6C], NFC: [0xFC6C], NFD: [0xFC6C], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFC6D], NFC: [0xFC6D], NFD: [0xFC6D], NFKC: [0x0628, 0x0646], NFKD: [0x0628, 0x0646] }, +{ source: [0xFC6E], NFC: [0xFC6E], NFD: [0xFC6E], NFKC: [0x0628, 0x0649], NFKD: [0x0628, 0x0649] }, +{ source: [0xFC6F], NFC: [0xFC6F], NFD: [0xFC6F], NFKC: [0x0628, 0x064A], NFKD: [0x0628, 0x064A] }, +{ source: [0xFC70], NFC: [0xFC70], NFD: [0xFC70], NFKC: [0x062A, 0x0631], NFKD: [0x062A, 0x0631] }, +{ source: [0xFC71], NFC: [0xFC71], NFD: [0xFC71], NFKC: [0x062A, 0x0632], NFKD: [0x062A, 0x0632] }, +{ source: [0xFC72], NFC: [0xFC72], NFD: [0xFC72], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFC73], NFC: [0xFC73], NFD: [0xFC73], NFKC: [0x062A, 0x0646], NFKD: [0x062A, 0x0646] }, +{ source: [0xFC74], NFC: [0xFC74], NFD: [0xFC74], NFKC: [0x062A, 0x0649], NFKD: [0x062A, 0x0649] }, +{ source: [0xFC75], NFC: [0xFC75], NFD: [0xFC75], NFKC: [0x062A, 0x064A], NFKD: [0x062A, 0x064A] }, +{ source: [0xFC76], NFC: [0xFC76], NFD: [0xFC76], NFKC: [0x062B, 0x0631], NFKD: [0x062B, 0x0631] }, +{ source: [0xFC77], NFC: [0xFC77], NFD: [0xFC77], NFKC: [0x062B, 0x0632], NFKD: [0x062B, 0x0632] }, +{ source: [0xFC78], NFC: [0xFC78], NFD: [0xFC78], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFC79], NFC: [0xFC79], NFD: [0xFC79], NFKC: [0x062B, 0x0646], NFKD: [0x062B, 0x0646] }, +{ source: [0xFC7A], NFC: [0xFC7A], NFD: [0xFC7A], NFKC: [0x062B, 0x0649], NFKD: [0x062B, 0x0649] }, +{ source: [0xFC7B], NFC: [0xFC7B], NFD: [0xFC7B], NFKC: [0x062B, 0x064A], NFKD: [0x062B, 0x064A] }, +{ source: [0xFC7C], NFC: [0xFC7C], NFD: [0xFC7C], NFKC: [0x0641, 0x0649], NFKD: [0x0641, 0x0649] }, +{ source: [0xFC7D], NFC: [0xFC7D], NFD: [0xFC7D], NFKC: [0x0641, 0x064A], NFKD: [0x0641, 0x064A] }, +{ source: [0xFC7E], NFC: [0xFC7E], NFD: [0xFC7E], NFKC: [0x0642, 0x0649], NFKD: [0x0642, 0x0649] }, +{ source: [0xFC7F], NFC: [0xFC7F], NFD: [0xFC7F], NFKC: [0x0642, 0x064A], NFKD: [0x0642, 0x064A] }, +{ source: [0xFC80], NFC: [0xFC80], NFD: [0xFC80], NFKC: [0x0643, 0x0627], NFKD: [0x0643, 0x0627] }, +{ source: [0xFC81], NFC: [0xFC81], NFD: [0xFC81], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFC82], NFC: [0xFC82], NFD: [0xFC82], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFC83], NFC: [0xFC83], NFD: [0xFC83], NFKC: [0x0643, 0x0649], NFKD: [0x0643, 0x0649] }, +{ source: [0xFC84], NFC: [0xFC84], NFD: [0xFC84], NFKC: [0x0643, 0x064A], NFKD: [0x0643, 0x064A] }, +{ source: [0xFC85], NFC: [0xFC85], NFD: [0xFC85], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFC86], NFC: [0xFC86], NFD: [0xFC86], NFKC: [0x0644, 0x0649], NFKD: [0x0644, 0x0649] }, +{ source: [0xFC87], NFC: [0xFC87], NFD: [0xFC87], NFKC: [0x0644, 0x064A], NFKD: [0x0644, 0x064A] }, +{ source: [0xFC88], NFC: [0xFC88], NFD: [0xFC88], NFKC: [0x0645, 0x0627], NFKD: [0x0645, 0x0627] }, +{ source: [0xFC89], NFC: [0xFC89], NFD: [0xFC89], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] }, +{ source: [0xFC8A], NFC: [0xFC8A], NFD: [0xFC8A], NFKC: [0x0646, 0x0631], NFKD: [0x0646, 0x0631] }, +{ source: [0xFC8B], NFC: [0xFC8B], NFD: [0xFC8B], NFKC: [0x0646, 0x0632], NFKD: [0x0646, 0x0632] }, +{ source: [0xFC8C], NFC: [0xFC8C], NFD: [0xFC8C], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFC8D], NFC: [0xFC8D], NFD: [0xFC8D], NFKC: [0x0646, 0x0646], NFKD: [0x0646, 0x0646] }, +{ source: [0xFC8E], NFC: [0xFC8E], NFD: [0xFC8E], NFKC: [0x0646, 0x0649], NFKD: [0x0646, 0x0649] }, +{ source: [0xFC8F], NFC: [0xFC8F], NFD: [0xFC8F], NFKC: [0x0646, 0x064A], NFKD: [0x0646, 0x064A] }, +{ source: [0xFC90], NFC: [0xFC90], NFD: [0xFC90], NFKC: [0x0649, 0x0670], NFKD: [0x0649, 0x0670] }, +{ source: [0xFC91], NFC: [0xFC91], NFD: [0xFC91], NFKC: [0x064A, 0x0631], NFKD: [0x064A, 0x0631] }, +{ source: [0xFC92], NFC: [0xFC92], NFD: [0xFC92], NFKC: [0x064A, 0x0632], NFKD: [0x064A, 0x0632] }, +{ source: [0xFC93], NFC: [0xFC93], NFD: [0xFC93], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFC94], NFC: [0xFC94], NFD: [0xFC94], NFKC: [0x064A, 0x0646], NFKD: [0x064A, 0x0646] }, +{ source: [0xFC95], NFC: [0xFC95], NFD: [0xFC95], NFKC: [0x064A, 0x0649], NFKD: [0x064A, 0x0649] }, +{ source: [0xFC96], NFC: [0xFC96], NFD: [0xFC96], NFKC: [0x064A, 0x064A], NFKD: [0x064A, 0x064A] }, +{ source: [0xFC97], NFC: [0xFC97], NFD: [0xFC97], NFKC: [0x0626, 0x062C], NFKD: [0x064A, 0x0654, 0x062C] }, +{ source: [0xFC98], NFC: [0xFC98], NFD: [0xFC98], NFKC: [0x0626, 0x062D], NFKD: [0x064A, 0x0654, 0x062D] }, +{ source: [0xFC99], NFC: [0xFC99], NFD: [0xFC99], NFKC: [0x0626, 0x062E], NFKD: [0x064A, 0x0654, 0x062E] }, +{ source: [0xFC9A], NFC: [0xFC9A], NFD: [0xFC9A], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFC9B], NFC: [0xFC9B], NFD: [0xFC9B], NFKC: [0x0626, 0x0647], NFKD: [0x064A, 0x0654, 0x0647] }, +{ source: [0xFC9C], NFC: [0xFC9C], NFD: [0xFC9C], NFKC: [0x0628, 0x062C], NFKD: [0x0628, 0x062C] }, +{ source: [0xFC9D], NFC: [0xFC9D], NFD: [0xFC9D], NFKC: [0x0628, 0x062D], NFKD: [0x0628, 0x062D] }, +{ source: [0xFC9E], NFC: [0xFC9E], NFD: [0xFC9E], NFKC: [0x0628, 0x062E], NFKD: [0x0628, 0x062E] }, +{ source: [0xFC9F], NFC: [0xFC9F], NFD: [0xFC9F], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFCA0], NFC: [0xFCA0], NFD: [0xFCA0], NFKC: [0x0628, 0x0647], NFKD: [0x0628, 0x0647] }, +{ source: [0xFCA1], NFC: [0xFCA1], NFD: [0xFCA1], NFKC: [0x062A, 0x062C], NFKD: [0x062A, 0x062C] }, +{ source: [0xFCA2], NFC: [0xFCA2], NFD: [0xFCA2], NFKC: [0x062A, 0x062D], NFKD: [0x062A, 0x062D] }, +{ source: [0xFCA3], NFC: [0xFCA3], NFD: [0xFCA3], NFKC: [0x062A, 0x062E], NFKD: [0x062A, 0x062E] }, +{ source: [0xFCA4], NFC: [0xFCA4], NFD: [0xFCA4], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFCA5], NFC: [0xFCA5], NFD: [0xFCA5], NFKC: [0x062A, 0x0647], NFKD: [0x062A, 0x0647] }, +{ source: [0xFCA6], NFC: [0xFCA6], NFD: [0xFCA6], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFCA7], NFC: [0xFCA7], NFD: [0xFCA7], NFKC: [0x062C, 0x062D], NFKD: [0x062C, 0x062D] }, +{ source: [0xFCA8], NFC: [0xFCA8], NFD: [0xFCA8], NFKC: [0x062C, 0x0645], NFKD: [0x062C, 0x0645] }, +{ source: [0xFCA9], NFC: [0xFCA9], NFD: [0xFCA9], NFKC: [0x062D, 0x062C], NFKD: [0x062D, 0x062C] }, +{ source: [0xFCAA], NFC: [0xFCAA], NFD: [0xFCAA], NFKC: [0x062D, 0x0645], NFKD: [0x062D, 0x0645] }, +{ source: [0xFCAB], NFC: [0xFCAB], NFD: [0xFCAB], NFKC: [0x062E, 0x062C], NFKD: [0x062E, 0x062C] }, +{ source: [0xFCAC], NFC: [0xFCAC], NFD: [0xFCAC], NFKC: [0x062E, 0x0645], NFKD: [0x062E, 0x0645] }, +{ source: [0xFCAD], NFC: [0xFCAD], NFD: [0xFCAD], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] }, +{ source: [0xFCAE], NFC: [0xFCAE], NFD: [0xFCAE], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] }, +{ source: [0xFCAF], NFC: [0xFCAF], NFD: [0xFCAF], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] }, +{ source: [0xFCB0], NFC: [0xFCB0], NFD: [0xFCB0], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] }, +{ source: [0xFCB1], NFC: [0xFCB1], NFD: [0xFCB1], NFKC: [0x0635, 0x062D], NFKD: [0x0635, 0x062D] }, +{ source: [0xFCB2], NFC: [0xFCB2], NFD: [0xFCB2], NFKC: [0x0635, 0x062E], NFKD: [0x0635, 0x062E] }, +{ source: [0xFCB3], NFC: [0xFCB3], NFD: [0xFCB3], NFKC: [0x0635, 0x0645], NFKD: [0x0635, 0x0645] }, +{ source: [0xFCB4], NFC: [0xFCB4], NFD: [0xFCB4], NFKC: [0x0636, 0x062C], NFKD: [0x0636, 0x062C] }, +{ source: [0xFCB5], NFC: [0xFCB5], NFD: [0xFCB5], NFKC: [0x0636, 0x062D], NFKD: [0x0636, 0x062D] }, +{ source: [0xFCB6], NFC: [0xFCB6], NFD: [0xFCB6], NFKC: [0x0636, 0x062E], NFKD: [0x0636, 0x062E] }, +{ source: [0xFCB7], NFC: [0xFCB7], NFD: [0xFCB7], NFKC: [0x0636, 0x0645], NFKD: [0x0636, 0x0645] }, +{ source: [0xFCB8], NFC: [0xFCB8], NFD: [0xFCB8], NFKC: [0x0637, 0x062D], NFKD: [0x0637, 0x062D] }, +{ source: [0xFCB9], NFC: [0xFCB9], NFD: [0xFCB9], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] }, +{ source: [0xFCBA], NFC: [0xFCBA], NFD: [0xFCBA], NFKC: [0x0639, 0x062C], NFKD: [0x0639, 0x062C] }, +{ source: [0xFCBB], NFC: [0xFCBB], NFD: [0xFCBB], NFKC: [0x0639, 0x0645], NFKD: [0x0639, 0x0645] }, +{ source: [0xFCBC], NFC: [0xFCBC], NFD: [0xFCBC], NFKC: [0x063A, 0x062C], NFKD: [0x063A, 0x062C] }, +{ source: [0xFCBD], NFC: [0xFCBD], NFD: [0xFCBD], NFKC: [0x063A, 0x0645], NFKD: [0x063A, 0x0645] }, +{ source: [0xFCBE], NFC: [0xFCBE], NFD: [0xFCBE], NFKC: [0x0641, 0x062C], NFKD: [0x0641, 0x062C] }, +{ source: [0xFCBF], NFC: [0xFCBF], NFD: [0xFCBF], NFKC: [0x0641, 0x062D], NFKD: [0x0641, 0x062D] }, +{ source: [0xFCC0], NFC: [0xFCC0], NFD: [0xFCC0], NFKC: [0x0641, 0x062E], NFKD: [0x0641, 0x062E] }, +{ source: [0xFCC1], NFC: [0xFCC1], NFD: [0xFCC1], NFKC: [0x0641, 0x0645], NFKD: [0x0641, 0x0645] }, +{ source: [0xFCC2], NFC: [0xFCC2], NFD: [0xFCC2], NFKC: [0x0642, 0x062D], NFKD: [0x0642, 0x062D] }, +{ source: [0xFCC3], NFC: [0xFCC3], NFD: [0xFCC3], NFKC: [0x0642, 0x0645], NFKD: [0x0642, 0x0645] }, +{ source: [0xFCC4], NFC: [0xFCC4], NFD: [0xFCC4], NFKC: [0x0643, 0x062C], NFKD: [0x0643, 0x062C] }, +{ source: [0xFCC5], NFC: [0xFCC5], NFD: [0xFCC5], NFKC: [0x0643, 0x062D], NFKD: [0x0643, 0x062D] }, +{ source: [0xFCC6], NFC: [0xFCC6], NFD: [0xFCC6], NFKC: [0x0643, 0x062E], NFKD: [0x0643, 0x062E] }, +{ source: [0xFCC7], NFC: [0xFCC7], NFD: [0xFCC7], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFCC8], NFC: [0xFCC8], NFD: [0xFCC8], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFCC9], NFC: [0xFCC9], NFD: [0xFCC9], NFKC: [0x0644, 0x062C], NFKD: [0x0644, 0x062C] }, +{ source: [0xFCCA], NFC: [0xFCCA], NFD: [0xFCCA], NFKC: [0x0644, 0x062D], NFKD: [0x0644, 0x062D] }, +{ source: [0xFCCB], NFC: [0xFCCB], NFD: [0xFCCB], NFKC: [0x0644, 0x062E], NFKD: [0x0644, 0x062E] }, +{ source: [0xFCCC], NFC: [0xFCCC], NFD: [0xFCCC], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFCCD], NFC: [0xFCCD], NFD: [0xFCCD], NFKC: [0x0644, 0x0647], NFKD: [0x0644, 0x0647] }, +{ source: [0xFCCE], NFC: [0xFCCE], NFD: [0xFCCE], NFKC: [0x0645, 0x062C], NFKD: [0x0645, 0x062C] }, +{ source: [0xFCCF], NFC: [0xFCCF], NFD: [0xFCCF], NFKC: [0x0645, 0x062D], NFKD: [0x0645, 0x062D] }, +{ source: [0xFCD0], NFC: [0xFCD0], NFD: [0xFCD0], NFKC: [0x0645, 0x062E], NFKD: [0x0645, 0x062E] }, +{ source: [0xFCD1], NFC: [0xFCD1], NFD: [0xFCD1], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] }, +{ source: [0xFCD2], NFC: [0xFCD2], NFD: [0xFCD2], NFKC: [0x0646, 0x062C], NFKD: [0x0646, 0x062C] }, +{ source: [0xFCD3], NFC: [0xFCD3], NFD: [0xFCD3], NFKC: [0x0646, 0x062D], NFKD: [0x0646, 0x062D] }, +{ source: [0xFCD4], NFC: [0xFCD4], NFD: [0xFCD4], NFKC: [0x0646, 0x062E], NFKD: [0x0646, 0x062E] }, +{ source: [0xFCD5], NFC: [0xFCD5], NFD: [0xFCD5], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFCD6], NFC: [0xFCD6], NFD: [0xFCD6], NFKC: [0x0646, 0x0647], NFKD: [0x0646, 0x0647] }, +{ source: [0xFCD7], NFC: [0xFCD7], NFD: [0xFCD7], NFKC: [0x0647, 0x062C], NFKD: [0x0647, 0x062C] }, +{ source: [0xFCD8], NFC: [0xFCD8], NFD: [0xFCD8], NFKC: [0x0647, 0x0645], NFKD: [0x0647, 0x0645] }, +{ source: [0xFCD9], NFC: [0xFCD9], NFD: [0xFCD9], NFKC: [0x0647, 0x0670], NFKD: [0x0647, 0x0670] }, +{ source: [0xFCDA], NFC: [0xFCDA], NFD: [0xFCDA], NFKC: [0x064A, 0x062C], NFKD: [0x064A, 0x062C] }, +{ source: [0xFCDB], NFC: [0xFCDB], NFD: [0xFCDB], NFKC: [0x064A, 0x062D], NFKD: [0x064A, 0x062D] }, +{ source: [0xFCDC], NFC: [0xFCDC], NFD: [0xFCDC], NFKC: [0x064A, 0x062E], NFKD: [0x064A, 0x062E] }, +{ source: [0xFCDD], NFC: [0xFCDD], NFD: [0xFCDD], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFCDE], NFC: [0xFCDE], NFD: [0xFCDE], NFKC: [0x064A, 0x0647], NFKD: [0x064A, 0x0647] }, +{ source: [0xFCDF], NFC: [0xFCDF], NFD: [0xFCDF], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFCE0], NFC: [0xFCE0], NFD: [0xFCE0], NFKC: [0x0626, 0x0647], NFKD: [0x064A, 0x0654, 0x0647] }, +{ source: [0xFCE1], NFC: [0xFCE1], NFD: [0xFCE1], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFCE2], NFC: [0xFCE2], NFD: [0xFCE2], NFKC: [0x0628, 0x0647], NFKD: [0x0628, 0x0647] }, +{ source: [0xFCE3], NFC: [0xFCE3], NFD: [0xFCE3], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFCE4], NFC: [0xFCE4], NFD: [0xFCE4], NFKC: [0x062A, 0x0647], NFKD: [0x062A, 0x0647] }, +{ source: [0xFCE5], NFC: [0xFCE5], NFD: [0xFCE5], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFCE6], NFC: [0xFCE6], NFD: [0xFCE6], NFKC: [0x062B, 0x0647], NFKD: [0x062B, 0x0647] }, +{ source: [0xFCE7], NFC: [0xFCE7], NFD: [0xFCE7], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] }, +{ source: [0xFCE8], NFC: [0xFCE8], NFD: [0xFCE8], NFKC: [0x0633, 0x0647], NFKD: [0x0633, 0x0647] }, +{ source: [0xFCE9], NFC: [0xFCE9], NFD: [0xFCE9], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFCEA], NFC: [0xFCEA], NFD: [0xFCEA], NFKC: [0x0634, 0x0647], NFKD: [0x0634, 0x0647] }, +{ source: [0xFCEB], NFC: [0xFCEB], NFD: [0xFCEB], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFCEC], NFC: [0xFCEC], NFD: [0xFCEC], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFCED], NFC: [0xFCED], NFD: [0xFCED], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFCEE], NFC: [0xFCEE], NFD: [0xFCEE], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFCEF], NFC: [0xFCEF], NFD: [0xFCEF], NFKC: [0x0646, 0x0647], NFKD: [0x0646, 0x0647] }, +{ source: [0xFCF0], NFC: [0xFCF0], NFD: [0xFCF0], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFCF1], NFC: [0xFCF1], NFD: [0xFCF1], NFKC: [0x064A, 0x0647], NFKD: [0x064A, 0x0647] }, +{ source: [0xFCF2], NFC: [0xFCF2], NFD: [0xFCF2], NFKC: [0x0640, 0x064E, 0x0651], NFKD: [0x0640, 0x064E, 0x0651] }, +{ source: [0xFCF3], NFC: [0xFCF3], NFD: [0xFCF3], NFKC: [0x0640, 0x064F, 0x0651], NFKD: [0x0640, 0x064F, 0x0651] }, +{ source: [0xFCF4], NFC: [0xFCF4], NFD: [0xFCF4], NFKC: [0x0640, 0x0650, 0x0651], NFKD: [0x0640, 0x0650, 0x0651] }, +{ source: [0xFCF5], NFC: [0xFCF5], NFD: [0xFCF5], NFKC: [0x0637, 0x0649], NFKD: [0x0637, 0x0649] }, +{ source: [0xFCF6], NFC: [0xFCF6], NFD: [0xFCF6], NFKC: [0x0637, 0x064A], NFKD: [0x0637, 0x064A] }, +{ source: [0xFCF7], NFC: [0xFCF7], NFD: [0xFCF7], NFKC: [0x0639, 0x0649], NFKD: [0x0639, 0x0649] }, +{ source: [0xFCF8], NFC: [0xFCF8], NFD: [0xFCF8], NFKC: [0x0639, 0x064A], NFKD: [0x0639, 0x064A] }, +{ source: [0xFCF9], NFC: [0xFCF9], NFD: [0xFCF9], NFKC: [0x063A, 0x0649], NFKD: [0x063A, 0x0649] }, +{ source: [0xFCFA], NFC: [0xFCFA], NFD: [0xFCFA], NFKC: [0x063A, 0x064A], NFKD: [0x063A, 0x064A] }, +{ source: [0xFCFB], NFC: [0xFCFB], NFD: [0xFCFB], NFKC: [0x0633, 0x0649], NFKD: [0x0633, 0x0649] }, +{ source: [0xFCFC], NFC: [0xFCFC], NFD: [0xFCFC], NFKC: [0x0633, 0x064A], NFKD: [0x0633, 0x064A] }, +{ source: [0xFCFD], NFC: [0xFCFD], NFD: [0xFCFD], NFKC: [0x0634, 0x0649], NFKD: [0x0634, 0x0649] }, +{ source: [0xFCFE], NFC: [0xFCFE], NFD: [0xFCFE], NFKC: [0x0634, 0x064A], NFKD: [0x0634, 0x064A] }, +{ source: [0xFCFF], NFC: [0xFCFF], NFD: [0xFCFF], NFKC: [0x062D, 0x0649], NFKD: [0x062D, 0x0649] }, +{ source: [0xFD00], NFC: [0xFD00], NFD: [0xFD00], NFKC: [0x062D, 0x064A], NFKD: [0x062D, 0x064A] }, +{ source: [0xFD01], NFC: [0xFD01], NFD: [0xFD01], NFKC: [0x062C, 0x0649], NFKD: [0x062C, 0x0649] }, +{ source: [0xFD02], NFC: [0xFD02], NFD: [0xFD02], NFKC: [0x062C, 0x064A], NFKD: [0x062C, 0x064A] }, +{ source: [0xFD03], NFC: [0xFD03], NFD: [0xFD03], NFKC: [0x062E, 0x0649], NFKD: [0x062E, 0x0649] }, +{ source: [0xFD04], NFC: [0xFD04], NFD: [0xFD04], NFKC: [0x062E, 0x064A], NFKD: [0x062E, 0x064A] }, +{ source: [0xFD05], NFC: [0xFD05], NFD: [0xFD05], NFKC: [0x0635, 0x0649], NFKD: [0x0635, 0x0649] }, +{ source: [0xFD06], NFC: [0xFD06], NFD: [0xFD06], NFKC: [0x0635, 0x064A], NFKD: [0x0635, 0x064A] }, +{ source: [0xFD07], NFC: [0xFD07], NFD: [0xFD07], NFKC: [0x0636, 0x0649], NFKD: [0x0636, 0x0649] }, +{ source: [0xFD08], NFC: [0xFD08], NFD: [0xFD08], NFKC: [0x0636, 0x064A], NFKD: [0x0636, 0x064A] }, +{ source: [0xFD09], NFC: [0xFD09], NFD: [0xFD09], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD0A], NFC: [0xFD0A], NFD: [0xFD0A], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD0B], NFC: [0xFD0B], NFD: [0xFD0B], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD0C], NFC: [0xFD0C], NFD: [0xFD0C], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFD0D], NFC: [0xFD0D], NFD: [0xFD0D], NFKC: [0x0634, 0x0631], NFKD: [0x0634, 0x0631] }, +{ source: [0xFD0E], NFC: [0xFD0E], NFD: [0xFD0E], NFKC: [0x0633, 0x0631], NFKD: [0x0633, 0x0631] }, +{ source: [0xFD0F], NFC: [0xFD0F], NFD: [0xFD0F], NFKC: [0x0635, 0x0631], NFKD: [0x0635, 0x0631] }, +{ source: [0xFD10], NFC: [0xFD10], NFD: [0xFD10], NFKC: [0x0636, 0x0631], NFKD: [0x0636, 0x0631] }, +{ source: [0xFD11], NFC: [0xFD11], NFD: [0xFD11], NFKC: [0x0637, 0x0649], NFKD: [0x0637, 0x0649] }, +{ source: [0xFD12], NFC: [0xFD12], NFD: [0xFD12], NFKC: [0x0637, 0x064A], NFKD: [0x0637, 0x064A] }, +{ source: [0xFD13], NFC: [0xFD13], NFD: [0xFD13], NFKC: [0x0639, 0x0649], NFKD: [0x0639, 0x0649] }, +{ source: [0xFD14], NFC: [0xFD14], NFD: [0xFD14], NFKC: [0x0639, 0x064A], NFKD: [0x0639, 0x064A] }, +{ source: [0xFD15], NFC: [0xFD15], NFD: [0xFD15], NFKC: [0x063A, 0x0649], NFKD: [0x063A, 0x0649] }, +{ source: [0xFD16], NFC: [0xFD16], NFD: [0xFD16], NFKC: [0x063A, 0x064A], NFKD: [0x063A, 0x064A] }, +{ source: [0xFD17], NFC: [0xFD17], NFD: [0xFD17], NFKC: [0x0633, 0x0649], NFKD: [0x0633, 0x0649] }, +{ source: [0xFD18], NFC: [0xFD18], NFD: [0xFD18], NFKC: [0x0633, 0x064A], NFKD: [0x0633, 0x064A] }, +{ source: [0xFD19], NFC: [0xFD19], NFD: [0xFD19], NFKC: [0x0634, 0x0649], NFKD: [0x0634, 0x0649] }, +{ source: [0xFD1A], NFC: [0xFD1A], NFD: [0xFD1A], NFKC: [0x0634, 0x064A], NFKD: [0x0634, 0x064A] }, +{ source: [0xFD1B], NFC: [0xFD1B], NFD: [0xFD1B], NFKC: [0x062D, 0x0649], NFKD: [0x062D, 0x0649] }, +{ source: [0xFD1C], NFC: [0xFD1C], NFD: [0xFD1C], NFKC: [0x062D, 0x064A], NFKD: [0x062D, 0x064A] }, +{ source: [0xFD1D], NFC: [0xFD1D], NFD: [0xFD1D], NFKC: [0x062C, 0x0649], NFKD: [0x062C, 0x0649] }, +{ source: [0xFD1E], NFC: [0xFD1E], NFD: [0xFD1E], NFKC: [0x062C, 0x064A], NFKD: [0x062C, 0x064A] }, +{ source: [0xFD1F], NFC: [0xFD1F], NFD: [0xFD1F], NFKC: [0x062E, 0x0649], NFKD: [0x062E, 0x0649] }, +{ source: [0xFD20], NFC: [0xFD20], NFD: [0xFD20], NFKC: [0x062E, 0x064A], NFKD: [0x062E, 0x064A] }, +{ source: [0xFD21], NFC: [0xFD21], NFD: [0xFD21], NFKC: [0x0635, 0x0649], NFKD: [0x0635, 0x0649] }, +{ source: [0xFD22], NFC: [0xFD22], NFD: [0xFD22], NFKC: [0x0635, 0x064A], NFKD: [0x0635, 0x064A] }, +{ source: [0xFD23], NFC: [0xFD23], NFD: [0xFD23], NFKC: [0x0636, 0x0649], NFKD: [0x0636, 0x0649] }, +{ source: [0xFD24], NFC: [0xFD24], NFD: [0xFD24], NFKC: [0x0636, 0x064A], NFKD: [0x0636, 0x064A] }, +{ source: [0xFD25], NFC: [0xFD25], NFD: [0xFD25], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD26], NFC: [0xFD26], NFD: [0xFD26], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD27], NFC: [0xFD27], NFD: [0xFD27], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD28], NFC: [0xFD28], NFD: [0xFD28], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFD29], NFC: [0xFD29], NFD: [0xFD29], NFKC: [0x0634, 0x0631], NFKD: [0x0634, 0x0631] }, +{ source: [0xFD2A], NFC: [0xFD2A], NFD: [0xFD2A], NFKC: [0x0633, 0x0631], NFKD: [0x0633, 0x0631] }, +{ source: [0xFD2B], NFC: [0xFD2B], NFD: [0xFD2B], NFKC: [0x0635, 0x0631], NFKD: [0x0635, 0x0631] }, +{ source: [0xFD2C], NFC: [0xFD2C], NFD: [0xFD2C], NFKC: [0x0636, 0x0631], NFKD: [0x0636, 0x0631] }, +{ source: [0xFD2D], NFC: [0xFD2D], NFD: [0xFD2D], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD2E], NFC: [0xFD2E], NFD: [0xFD2E], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD2F], NFC: [0xFD2F], NFD: [0xFD2F], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD30], NFC: [0xFD30], NFD: [0xFD30], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFD31], NFC: [0xFD31], NFD: [0xFD31], NFKC: [0x0633, 0x0647], NFKD: [0x0633, 0x0647] }, +{ source: [0xFD32], NFC: [0xFD32], NFD: [0xFD32], NFKC: [0x0634, 0x0647], NFKD: [0x0634, 0x0647] }, +{ source: [0xFD33], NFC: [0xFD33], NFD: [0xFD33], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] }, +{ source: [0xFD34], NFC: [0xFD34], NFD: [0xFD34], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] }, +{ source: [0xFD35], NFC: [0xFD35], NFD: [0xFD35], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] }, +{ source: [0xFD36], NFC: [0xFD36], NFD: [0xFD36], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] }, +{ source: [0xFD37], NFC: [0xFD37], NFD: [0xFD37], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD38], NFC: [0xFD38], NFD: [0xFD38], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD39], NFC: [0xFD39], NFD: [0xFD39], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD3A], NFC: [0xFD3A], NFD: [0xFD3A], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] }, +{ source: [0xFD3B], NFC: [0xFD3B], NFD: [0xFD3B], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] }, +{ source: [0xFD3C], NFC: [0xFD3C], NFD: [0xFD3C], NFKC: [0x0627, 0x064B], NFKD: [0x0627, 0x064B] }, +{ source: [0xFD3D], NFC: [0xFD3D], NFD: [0xFD3D], NFKC: [0x0627, 0x064B], NFKD: [0x0627, 0x064B] }, +{ source: [0xFD50], NFC: [0xFD50], NFD: [0xFD50], NFKC: [0x062A, 0x062C, 0x0645], NFKD: [0x062A, 0x062C, 0x0645] }, +{ source: [0xFD51], NFC: [0xFD51], NFD: [0xFD51], NFKC: [0x062A, 0x062D, 0x062C], NFKD: [0x062A, 0x062D, 0x062C] }, +{ source: [0xFD52], NFC: [0xFD52], NFD: [0xFD52], NFKC: [0x062A, 0x062D, 0x062C], NFKD: [0x062A, 0x062D, 0x062C] }, +{ source: [0xFD53], NFC: [0xFD53], NFD: [0xFD53], NFKC: [0x062A, 0x062D, 0x0645], NFKD: [0x062A, 0x062D, 0x0645] }, +{ source: [0xFD54], NFC: [0xFD54], NFD: [0xFD54], NFKC: [0x062A, 0x062E, 0x0645], NFKD: [0x062A, 0x062E, 0x0645] }, +{ source: [0xFD55], NFC: [0xFD55], NFD: [0xFD55], NFKC: [0x062A, 0x0645, 0x062C], NFKD: [0x062A, 0x0645, 0x062C] }, +{ source: [0xFD56], NFC: [0xFD56], NFD: [0xFD56], NFKC: [0x062A, 0x0645, 0x062D], NFKD: [0x062A, 0x0645, 0x062D] }, +{ source: [0xFD57], NFC: [0xFD57], NFD: [0xFD57], NFKC: [0x062A, 0x0645, 0x062E], NFKD: [0x062A, 0x0645, 0x062E] }, +{ source: [0xFD58], NFC: [0xFD58], NFD: [0xFD58], NFKC: [0x062C, 0x0645, 0x062D], NFKD: [0x062C, 0x0645, 0x062D] }, +{ source: [0xFD59], NFC: [0xFD59], NFD: [0xFD59], NFKC: [0x062C, 0x0645, 0x062D], NFKD: [0x062C, 0x0645, 0x062D] }, +{ source: [0xFD5A], NFC: [0xFD5A], NFD: [0xFD5A], NFKC: [0x062D, 0x0645, 0x064A], NFKD: [0x062D, 0x0645, 0x064A] }, +{ source: [0xFD5B], NFC: [0xFD5B], NFD: [0xFD5B], NFKC: [0x062D, 0x0645, 0x0649], NFKD: [0x062D, 0x0645, 0x0649] }, +{ source: [0xFD5C], NFC: [0xFD5C], NFD: [0xFD5C], NFKC: [0x0633, 0x062D, 0x062C], NFKD: [0x0633, 0x062D, 0x062C] }, +{ source: [0xFD5D], NFC: [0xFD5D], NFD: [0xFD5D], NFKC: [0x0633, 0x062C, 0x062D], NFKD: [0x0633, 0x062C, 0x062D] }, +{ source: [0xFD5E], NFC: [0xFD5E], NFD: [0xFD5E], NFKC: [0x0633, 0x062C, 0x0649], NFKD: [0x0633, 0x062C, 0x0649] }, +{ source: [0xFD5F], NFC: [0xFD5F], NFD: [0xFD5F], NFKC: [0x0633, 0x0645, 0x062D], NFKD: [0x0633, 0x0645, 0x062D] }, +{ source: [0xFD60], NFC: [0xFD60], NFD: [0xFD60], NFKC: [0x0633, 0x0645, 0x062D], NFKD: [0x0633, 0x0645, 0x062D] }, +{ source: [0xFD61], NFC: [0xFD61], NFD: [0xFD61], NFKC: [0x0633, 0x0645, 0x062C], NFKD: [0x0633, 0x0645, 0x062C] }, +{ source: [0xFD62], NFC: [0xFD62], NFD: [0xFD62], NFKC: [0x0633, 0x0645, 0x0645], NFKD: [0x0633, 0x0645, 0x0645] }, +{ source: [0xFD63], NFC: [0xFD63], NFD: [0xFD63], NFKC: [0x0633, 0x0645, 0x0645], NFKD: [0x0633, 0x0645, 0x0645] }, +{ source: [0xFD64], NFC: [0xFD64], NFD: [0xFD64], NFKC: [0x0635, 0x062D, 0x062D], NFKD: [0x0635, 0x062D, 0x062D] }, +{ source: [0xFD65], NFC: [0xFD65], NFD: [0xFD65], NFKC: [0x0635, 0x062D, 0x062D], NFKD: [0x0635, 0x062D, 0x062D] }, +{ source: [0xFD66], NFC: [0xFD66], NFD: [0xFD66], NFKC: [0x0635, 0x0645, 0x0645], NFKD: [0x0635, 0x0645, 0x0645] }, +{ source: [0xFD67], NFC: [0xFD67], NFD: [0xFD67], NFKC: [0x0634, 0x062D, 0x0645], NFKD: [0x0634, 0x062D, 0x0645] }, +{ source: [0xFD68], NFC: [0xFD68], NFD: [0xFD68], NFKC: [0x0634, 0x062D, 0x0645], NFKD: [0x0634, 0x062D, 0x0645] }, +{ source: [0xFD69], NFC: [0xFD69], NFD: [0xFD69], NFKC: [0x0634, 0x062C, 0x064A], NFKD: [0x0634, 0x062C, 0x064A] }, +{ source: [0xFD6A], NFC: [0xFD6A], NFD: [0xFD6A], NFKC: [0x0634, 0x0645, 0x062E], NFKD: [0x0634, 0x0645, 0x062E] }, +{ source: [0xFD6B], NFC: [0xFD6B], NFD: [0xFD6B], NFKC: [0x0634, 0x0645, 0x062E], NFKD: [0x0634, 0x0645, 0x062E] }, +{ source: [0xFD6C], NFC: [0xFD6C], NFD: [0xFD6C], NFKC: [0x0634, 0x0645, 0x0645], NFKD: [0x0634, 0x0645, 0x0645] }, +{ source: [0xFD6D], NFC: [0xFD6D], NFD: [0xFD6D], NFKC: [0x0634, 0x0645, 0x0645], NFKD: [0x0634, 0x0645, 0x0645] }, +{ source: [0xFD6E], NFC: [0xFD6E], NFD: [0xFD6E], NFKC: [0x0636, 0x062D, 0x0649], NFKD: [0x0636, 0x062D, 0x0649] }, +{ source: [0xFD6F], NFC: [0xFD6F], NFD: [0xFD6F], NFKC: [0x0636, 0x062E, 0x0645], NFKD: [0x0636, 0x062E, 0x0645] }, +{ source: [0xFD70], NFC: [0xFD70], NFD: [0xFD70], NFKC: [0x0636, 0x062E, 0x0645], NFKD: [0x0636, 0x062E, 0x0645] }, +{ source: [0xFD71], NFC: [0xFD71], NFD: [0xFD71], NFKC: [0x0637, 0x0645, 0x062D], NFKD: [0x0637, 0x0645, 0x062D] }, +{ source: [0xFD72], NFC: [0xFD72], NFD: [0xFD72], NFKC: [0x0637, 0x0645, 0x062D], NFKD: [0x0637, 0x0645, 0x062D] }, +{ source: [0xFD73], NFC: [0xFD73], NFD: [0xFD73], NFKC: [0x0637, 0x0645, 0x0645], NFKD: [0x0637, 0x0645, 0x0645] }, +{ source: [0xFD74], NFC: [0xFD74], NFD: [0xFD74], NFKC: [0x0637, 0x0645, 0x064A], NFKD: [0x0637, 0x0645, 0x064A] }, +{ source: [0xFD75], NFC: [0xFD75], NFD: [0xFD75], NFKC: [0x0639, 0x062C, 0x0645], NFKD: [0x0639, 0x062C, 0x0645] }, +{ source: [0xFD76], NFC: [0xFD76], NFD: [0xFD76], NFKC: [0x0639, 0x0645, 0x0645], NFKD: [0x0639, 0x0645, 0x0645] }, +{ source: [0xFD77], NFC: [0xFD77], NFD: [0xFD77], NFKC: [0x0639, 0x0645, 0x0645], NFKD: [0x0639, 0x0645, 0x0645] }, +{ source: [0xFD78], NFC: [0xFD78], NFD: [0xFD78], NFKC: [0x0639, 0x0645, 0x0649], NFKD: [0x0639, 0x0645, 0x0649] }, +{ source: [0xFD79], NFC: [0xFD79], NFD: [0xFD79], NFKC: [0x063A, 0x0645, 0x0645], NFKD: [0x063A, 0x0645, 0x0645] }, +{ source: [0xFD7A], NFC: [0xFD7A], NFD: [0xFD7A], NFKC: [0x063A, 0x0645, 0x064A], NFKD: [0x063A, 0x0645, 0x064A] }, +{ source: [0xFD7B], NFC: [0xFD7B], NFD: [0xFD7B], NFKC: [0x063A, 0x0645, 0x0649], NFKD: [0x063A, 0x0645, 0x0649] }, +{ source: [0xFD7C], NFC: [0xFD7C], NFD: [0xFD7C], NFKC: [0x0641, 0x062E, 0x0645], NFKD: [0x0641, 0x062E, 0x0645] }, +{ source: [0xFD7D], NFC: [0xFD7D], NFD: [0xFD7D], NFKC: [0x0641, 0x062E, 0x0645], NFKD: [0x0641, 0x062E, 0x0645] }, +{ source: [0xFD7E], NFC: [0xFD7E], NFD: [0xFD7E], NFKC: [0x0642, 0x0645, 0x062D], NFKD: [0x0642, 0x0645, 0x062D] }, +{ source: [0xFD7F], NFC: [0xFD7F], NFD: [0xFD7F], NFKC: [0x0642, 0x0645, 0x0645], NFKD: [0x0642, 0x0645, 0x0645] }, +{ source: [0xFD80], NFC: [0xFD80], NFD: [0xFD80], NFKC: [0x0644, 0x062D, 0x0645], NFKD: [0x0644, 0x062D, 0x0645] }, +{ source: [0xFD81], NFC: [0xFD81], NFD: [0xFD81], NFKC: [0x0644, 0x062D, 0x064A], NFKD: [0x0644, 0x062D, 0x064A] }, +{ source: [0xFD82], NFC: [0xFD82], NFD: [0xFD82], NFKC: [0x0644, 0x062D, 0x0649], NFKD: [0x0644, 0x062D, 0x0649] }, +{ source: [0xFD83], NFC: [0xFD83], NFD: [0xFD83], NFKC: [0x0644, 0x062C, 0x062C], NFKD: [0x0644, 0x062C, 0x062C] }, +{ source: [0xFD84], NFC: [0xFD84], NFD: [0xFD84], NFKC: [0x0644, 0x062C, 0x062C], NFKD: [0x0644, 0x062C, 0x062C] }, +{ source: [0xFD85], NFC: [0xFD85], NFD: [0xFD85], NFKC: [0x0644, 0x062E, 0x0645], NFKD: [0x0644, 0x062E, 0x0645] }, +{ source: [0xFD86], NFC: [0xFD86], NFD: [0xFD86], NFKC: [0x0644, 0x062E, 0x0645], NFKD: [0x0644, 0x062E, 0x0645] }, +{ source: [0xFD87], NFC: [0xFD87], NFD: [0xFD87], NFKC: [0x0644, 0x0645, 0x062D], NFKD: [0x0644, 0x0645, 0x062D] }, +{ source: [0xFD88], NFC: [0xFD88], NFD: [0xFD88], NFKC: [0x0644, 0x0645, 0x062D], NFKD: [0x0644, 0x0645, 0x062D] }, +{ source: [0xFD89], NFC: [0xFD89], NFD: [0xFD89], NFKC: [0x0645, 0x062D, 0x062C], NFKD: [0x0645, 0x062D, 0x062C] }, +{ source: [0xFD8A], NFC: [0xFD8A], NFD: [0xFD8A], NFKC: [0x0645, 0x062D, 0x0645], NFKD: [0x0645, 0x062D, 0x0645] }, +{ source: [0xFD8B], NFC: [0xFD8B], NFD: [0xFD8B], NFKC: [0x0645, 0x062D, 0x064A], NFKD: [0x0645, 0x062D, 0x064A] }, +{ source: [0xFD8C], NFC: [0xFD8C], NFD: [0xFD8C], NFKC: [0x0645, 0x062C, 0x062D], NFKD: [0x0645, 0x062C, 0x062D] }, +{ source: [0xFD8D], NFC: [0xFD8D], NFD: [0xFD8D], NFKC: [0x0645, 0x062C, 0x0645], NFKD: [0x0645, 0x062C, 0x0645] }, +{ source: [0xFD8E], NFC: [0xFD8E], NFD: [0xFD8E], NFKC: [0x0645, 0x062E, 0x062C], NFKD: [0x0645, 0x062E, 0x062C] }, +{ source: [0xFD8F], NFC: [0xFD8F], NFD: [0xFD8F], NFKC: [0x0645, 0x062E, 0x0645], NFKD: [0x0645, 0x062E, 0x0645] }, +{ source: [0xFD92], NFC: [0xFD92], NFD: [0xFD92], NFKC: [0x0645, 0x062C, 0x062E], NFKD: [0x0645, 0x062C, 0x062E] }, +{ source: [0xFD93], NFC: [0xFD93], NFD: [0xFD93], NFKC: [0x0647, 0x0645, 0x062C], NFKD: [0x0647, 0x0645, 0x062C] }, +{ source: [0xFD94], NFC: [0xFD94], NFD: [0xFD94], NFKC: [0x0647, 0x0645, 0x0645], NFKD: [0x0647, 0x0645, 0x0645] }, +{ source: [0xFD95], NFC: [0xFD95], NFD: [0xFD95], NFKC: [0x0646, 0x062D, 0x0645], NFKD: [0x0646, 0x062D, 0x0645] }, +{ source: [0xFD96], NFC: [0xFD96], NFD: [0xFD96], NFKC: [0x0646, 0x062D, 0x0649], NFKD: [0x0646, 0x062D, 0x0649] }, +{ source: [0xFD97], NFC: [0xFD97], NFD: [0xFD97], NFKC: [0x0646, 0x062C, 0x0645], NFKD: [0x0646, 0x062C, 0x0645] }, +{ source: [0xFD98], NFC: [0xFD98], NFD: [0xFD98], NFKC: [0x0646, 0x062C, 0x0645], NFKD: [0x0646, 0x062C, 0x0645] }, +{ source: [0xFD99], NFC: [0xFD99], NFD: [0xFD99], NFKC: [0x0646, 0x062C, 0x0649], NFKD: [0x0646, 0x062C, 0x0649] }, +{ source: [0xFD9A], NFC: [0xFD9A], NFD: [0xFD9A], NFKC: [0x0646, 0x0645, 0x064A], NFKD: [0x0646, 0x0645, 0x064A] }, +{ source: [0xFD9B], NFC: [0xFD9B], NFD: [0xFD9B], NFKC: [0x0646, 0x0645, 0x0649], NFKD: [0x0646, 0x0645, 0x0649] }, +{ source: [0xFD9C], NFC: [0xFD9C], NFD: [0xFD9C], NFKC: [0x064A, 0x0645, 0x0645], NFKD: [0x064A, 0x0645, 0x0645] }, +{ source: [0xFD9D], NFC: [0xFD9D], NFD: [0xFD9D], NFKC: [0x064A, 0x0645, 0x0645], NFKD: [0x064A, 0x0645, 0x0645] }, +{ source: [0xFD9E], NFC: [0xFD9E], NFD: [0xFD9E], NFKC: [0x0628, 0x062E, 0x064A], NFKD: [0x0628, 0x062E, 0x064A] }, +{ source: [0xFD9F], NFC: [0xFD9F], NFD: [0xFD9F], NFKC: [0x062A, 0x062C, 0x064A], NFKD: [0x062A, 0x062C, 0x064A] }, +{ source: [0xFDA0], NFC: [0xFDA0], NFD: [0xFDA0], NFKC: [0x062A, 0x062C, 0x0649], NFKD: [0x062A, 0x062C, 0x0649] }, +{ source: [0xFDA1], NFC: [0xFDA1], NFD: [0xFDA1], NFKC: [0x062A, 0x062E, 0x064A], NFKD: [0x062A, 0x062E, 0x064A] }, +{ source: [0xFDA2], NFC: [0xFDA2], NFD: [0xFDA2], NFKC: [0x062A, 0x062E, 0x0649], NFKD: [0x062A, 0x062E, 0x0649] }, +{ source: [0xFDA3], NFC: [0xFDA3], NFD: [0xFDA3], NFKC: [0x062A, 0x0645, 0x064A], NFKD: [0x062A, 0x0645, 0x064A] }, +{ source: [0xFDA4], NFC: [0xFDA4], NFD: [0xFDA4], NFKC: [0x062A, 0x0645, 0x0649], NFKD: [0x062A, 0x0645, 0x0649] }, +{ source: [0xFDA5], NFC: [0xFDA5], NFD: [0xFDA5], NFKC: [0x062C, 0x0645, 0x064A], NFKD: [0x062C, 0x0645, 0x064A] }, +{ source: [0xFDA6], NFC: [0xFDA6], NFD: [0xFDA6], NFKC: [0x062C, 0x062D, 0x0649], NFKD: [0x062C, 0x062D, 0x0649] }, +{ source: [0xFDA7], NFC: [0xFDA7], NFD: [0xFDA7], NFKC: [0x062C, 0x0645, 0x0649], NFKD: [0x062C, 0x0645, 0x0649] }, +{ source: [0xFDA8], NFC: [0xFDA8], NFD: [0xFDA8], NFKC: [0x0633, 0x062E, 0x0649], NFKD: [0x0633, 0x062E, 0x0649] }, +{ source: [0xFDA9], NFC: [0xFDA9], NFD: [0xFDA9], NFKC: [0x0635, 0x062D, 0x064A], NFKD: [0x0635, 0x062D, 0x064A] }, +{ source: [0xFDAA], NFC: [0xFDAA], NFD: [0xFDAA], NFKC: [0x0634, 0x062D, 0x064A], NFKD: [0x0634, 0x062D, 0x064A] }, +{ source: [0xFDAB], NFC: [0xFDAB], NFD: [0xFDAB], NFKC: [0x0636, 0x062D, 0x064A], NFKD: [0x0636, 0x062D, 0x064A] }, +{ source: [0xFDAC], NFC: [0xFDAC], NFD: [0xFDAC], NFKC: [0x0644, 0x062C, 0x064A], NFKD: [0x0644, 0x062C, 0x064A] }, +{ source: [0xFDAD], NFC: [0xFDAD], NFD: [0xFDAD], NFKC: [0x0644, 0x0645, 0x064A], NFKD: [0x0644, 0x0645, 0x064A] }, +{ source: [0xFDAE], NFC: [0xFDAE], NFD: [0xFDAE], NFKC: [0x064A, 0x062D, 0x064A], NFKD: [0x064A, 0x062D, 0x064A] }, +{ source: [0xFDAF], NFC: [0xFDAF], NFD: [0xFDAF], NFKC: [0x064A, 0x062C, 0x064A], NFKD: [0x064A, 0x062C, 0x064A] }, +{ source: [0xFDB0], NFC: [0xFDB0], NFD: [0xFDB0], NFKC: [0x064A, 0x0645, 0x064A], NFKD: [0x064A, 0x0645, 0x064A] }, +{ source: [0xFDB1], NFC: [0xFDB1], NFD: [0xFDB1], NFKC: [0x0645, 0x0645, 0x064A], NFKD: [0x0645, 0x0645, 0x064A] }, +{ source: [0xFDB2], NFC: [0xFDB2], NFD: [0xFDB2], NFKC: [0x0642, 0x0645, 0x064A], NFKD: [0x0642, 0x0645, 0x064A] }, +{ source: [0xFDB3], NFC: [0xFDB3], NFD: [0xFDB3], NFKC: [0x0646, 0x062D, 0x064A], NFKD: [0x0646, 0x062D, 0x064A] }, +{ source: [0xFDB4], NFC: [0xFDB4], NFD: [0xFDB4], NFKC: [0x0642, 0x0645, 0x062D], NFKD: [0x0642, 0x0645, 0x062D] }, +{ source: [0xFDB5], NFC: [0xFDB5], NFD: [0xFDB5], NFKC: [0x0644, 0x062D, 0x0645], NFKD: [0x0644, 0x062D, 0x0645] }, +{ source: [0xFDB6], NFC: [0xFDB6], NFD: [0xFDB6], NFKC: [0x0639, 0x0645, 0x064A], NFKD: [0x0639, 0x0645, 0x064A] }, +{ source: [0xFDB7], NFC: [0xFDB7], NFD: [0xFDB7], NFKC: [0x0643, 0x0645, 0x064A], NFKD: [0x0643, 0x0645, 0x064A] }, +{ source: [0xFDB8], NFC: [0xFDB8], NFD: [0xFDB8], NFKC: [0x0646, 0x062C, 0x062D], NFKD: [0x0646, 0x062C, 0x062D] }, +{ source: [0xFDB9], NFC: [0xFDB9], NFD: [0xFDB9], NFKC: [0x0645, 0x062E, 0x064A], NFKD: [0x0645, 0x062E, 0x064A] }, +{ source: [0xFDBA], NFC: [0xFDBA], NFD: [0xFDBA], NFKC: [0x0644, 0x062C, 0x0645], NFKD: [0x0644, 0x062C, 0x0645] }, +{ source: [0xFDBB], NFC: [0xFDBB], NFD: [0xFDBB], NFKC: [0x0643, 0x0645, 0x0645], NFKD: [0x0643, 0x0645, 0x0645] }, +{ source: [0xFDBC], NFC: [0xFDBC], NFD: [0xFDBC], NFKC: [0x0644, 0x062C, 0x0645], NFKD: [0x0644, 0x062C, 0x0645] }, +{ source: [0xFDBD], NFC: [0xFDBD], NFD: [0xFDBD], NFKC: [0x0646, 0x062C, 0x062D], NFKD: [0x0646, 0x062C, 0x062D] }, +{ source: [0xFDBE], NFC: [0xFDBE], NFD: [0xFDBE], NFKC: [0x062C, 0x062D, 0x064A], NFKD: [0x062C, 0x062D, 0x064A] }, +{ source: [0xFDBF], NFC: [0xFDBF], NFD: [0xFDBF], NFKC: [0x062D, 0x062C, 0x064A], NFKD: [0x062D, 0x062C, 0x064A] }, +{ source: [0xFDC0], NFC: [0xFDC0], NFD: [0xFDC0], NFKC: [0x0645, 0x062C, 0x064A], NFKD: [0x0645, 0x062C, 0x064A] }, +{ source: [0xFDC1], NFC: [0xFDC1], NFD: [0xFDC1], NFKC: [0x0641, 0x0645, 0x064A], NFKD: [0x0641, 0x0645, 0x064A] }, +{ source: [0xFDC2], NFC: [0xFDC2], NFD: [0xFDC2], NFKC: [0x0628, 0x062D, 0x064A], NFKD: [0x0628, 0x062D, 0x064A] }, +{ source: [0xFDC3], NFC: [0xFDC3], NFD: [0xFDC3], NFKC: [0x0643, 0x0645, 0x0645], NFKD: [0x0643, 0x0645, 0x0645] }, +{ source: [0xFDC4], NFC: [0xFDC4], NFD: [0xFDC4], NFKC: [0x0639, 0x062C, 0x0645], NFKD: [0x0639, 0x062C, 0x0645] }, +{ source: [0xFDC5], NFC: [0xFDC5], NFD: [0xFDC5], NFKC: [0x0635, 0x0645, 0x0645], NFKD: [0x0635, 0x0645, 0x0645] }, +{ source: [0xFDC6], NFC: [0xFDC6], NFD: [0xFDC6], NFKC: [0x0633, 0x062E, 0x064A], NFKD: [0x0633, 0x062E, 0x064A] }, +{ source: [0xFDC7], NFC: [0xFDC7], NFD: [0xFDC7], NFKC: [0x0646, 0x062C, 0x064A], NFKD: [0x0646, 0x062C, 0x064A] }, +{ source: [0xFDF0], NFC: [0xFDF0], NFD: [0xFDF0], NFKC: [0x0635, 0x0644, 0x06D2], NFKD: [0x0635, 0x0644, 0x06D2] }, +{ source: [0xFDF1], NFC: [0xFDF1], NFD: [0xFDF1], NFKC: [0x0642, 0x0644, 0x06D2], NFKD: [0x0642, 0x0644, 0x06D2] }, +{ source: [0xFDF2], NFC: [0xFDF2], NFD: [0xFDF2], NFKC: [0x0627, 0x0644, 0x0644, 0x0647], NFKD: [0x0627, 0x0644, 0x0644, 0x0647] }, +{ source: [0xFDF3], NFC: [0xFDF3], NFD: [0xFDF3], NFKC: [0x0627, 0x0643, 0x0628, 0x0631], NFKD: [0x0627, 0x0643, 0x0628, 0x0631] }, +{ source: [0xFDF4], NFC: [0xFDF4], NFD: [0xFDF4], NFKC: [0x0645, 0x062D, 0x0645, 0x062F], NFKD: [0x0645, 0x062D, 0x0645, 0x062F] }, +{ source: [0xFDF5], NFC: [0xFDF5], NFD: [0xFDF5], NFKC: [0x0635, 0x0644, 0x0639, 0x0645], NFKD: [0x0635, 0x0644, 0x0639, 0x0645] }, +{ source: [0xFDF6], NFC: [0xFDF6], NFD: [0xFDF6], NFKC: [0x0631, 0x0633, 0x0648, 0x0644], NFKD: [0x0631, 0x0633, 0x0648, 0x0644] }, +{ source: [0xFDF7], NFC: [0xFDF7], NFD: [0xFDF7], NFKC: [0x0639, 0x0644, 0x064A, 0x0647], NFKD: [0x0639, 0x0644, 0x064A, 0x0647] }, +{ source: [0xFDF8], NFC: [0xFDF8], NFD: [0xFDF8], NFKC: [0x0648, 0x0633, 0x0644, 0x0645], NFKD: [0x0648, 0x0633, 0x0644, 0x0645] }, +{ source: [0xFDF9], NFC: [0xFDF9], NFD: [0xFDF9], NFKC: [0x0635, 0x0644, 0x0649], NFKD: [0x0635, 0x0644, 0x0649] }, +{ source: [0xFDFA], NFC: [0xFDFA], NFD: [0xFDFA], NFKC: [0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645], NFKD: [0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645] }, +{ source: [0xFDFB], NFC: [0xFDFB], NFD: [0xFDFB], NFKC: [0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647], NFKD: [0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647] }, +{ source: [0xFDFC], NFC: [0xFDFC], NFD: [0xFDFC], NFKC: [0x0631, 0x06CC, 0x0627, 0x0644], NFKD: [0x0631, 0x06CC, 0x0627, 0x0644] }, +{ source: [0xFE10], NFC: [0xFE10], NFD: [0xFE10], NFKC: [0x002C], NFKD: [0x002C] }, +{ source: [0xFE11], NFC: [0xFE11], NFD: [0xFE11], NFKC: [0x3001], NFKD: [0x3001] }, +{ source: [0xFE12], NFC: [0xFE12], NFD: [0xFE12], NFKC: [0x3002], NFKD: [0x3002] }, +{ source: [0xFE13], NFC: [0xFE13], NFD: [0xFE13], NFKC: [0x003A], NFKD: [0x003A] }, +{ source: [0xFE14], NFC: [0xFE14], NFD: [0xFE14], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0xFE15], NFC: [0xFE15], NFD: [0xFE15], NFKC: [0x0021], NFKD: [0x0021] }, +{ source: [0xFE16], NFC: [0xFE16], NFD: [0xFE16], NFKC: [0x003F], NFKD: [0x003F] }, +{ source: [0xFE17], NFC: [0xFE17], NFD: [0xFE17], NFKC: [0x3016], NFKD: [0x3016] }, +{ source: [0xFE18], NFC: [0xFE18], NFD: [0xFE18], NFKC: [0x3017], NFKD: [0x3017] }, +{ source: [0xFE19], NFC: [0xFE19], NFD: [0xFE19], NFKC: [0x002E, 0x002E, 0x002E], NFKD: [0x002E, 0x002E, 0x002E] }, +{ source: [0xFE30], NFC: [0xFE30], NFD: [0xFE30], NFKC: [0x002E, 0x002E], NFKD: [0x002E, 0x002E] }, +{ source: [0xFE31], NFC: [0xFE31], NFD: [0xFE31], NFKC: [0x2014], NFKD: [0x2014] }, +{ source: [0xFE32], NFC: [0xFE32], NFD: [0xFE32], NFKC: [0x2013], NFKD: [0x2013] }, +{ source: [0xFE33], NFC: [0xFE33], NFD: [0xFE33], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE34], NFC: [0xFE34], NFD: [0xFE34], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE35], NFC: [0xFE35], NFD: [0xFE35], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0xFE36], NFC: [0xFE36], NFD: [0xFE36], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0xFE37], NFC: [0xFE37], NFD: [0xFE37], NFKC: [0x007B], NFKD: [0x007B] }, +{ source: [0xFE38], NFC: [0xFE38], NFD: [0xFE38], NFKC: [0x007D], NFKD: [0x007D] }, +{ source: [0xFE39], NFC: [0xFE39], NFD: [0xFE39], NFKC: [0x3014], NFKD: [0x3014] }, +{ source: [0xFE3A], NFC: [0xFE3A], NFD: [0xFE3A], NFKC: [0x3015], NFKD: [0x3015] }, +{ source: [0xFE3B], NFC: [0xFE3B], NFD: [0xFE3B], NFKC: [0x3010], NFKD: [0x3010] }, +{ source: [0xFE3C], NFC: [0xFE3C], NFD: [0xFE3C], NFKC: [0x3011], NFKD: [0x3011] }, +{ source: [0xFE3D], NFC: [0xFE3D], NFD: [0xFE3D], NFKC: [0x300A], NFKD: [0x300A] }, +{ source: [0xFE3E], NFC: [0xFE3E], NFD: [0xFE3E], NFKC: [0x300B], NFKD: [0x300B] }, +{ source: [0xFE3F], NFC: [0xFE3F], NFD: [0xFE3F], NFKC: [0x3008], NFKD: [0x3008] }, +{ source: [0xFE40], NFC: [0xFE40], NFD: [0xFE40], NFKC: [0x3009], NFKD: [0x3009] }, +{ source: [0xFE41], NFC: [0xFE41], NFD: [0xFE41], NFKC: [0x300C], NFKD: [0x300C] }, +{ source: [0xFE42], NFC: [0xFE42], NFD: [0xFE42], NFKC: [0x300D], NFKD: [0x300D] }, +{ source: [0xFE43], NFC: [0xFE43], NFD: [0xFE43], NFKC: [0x300E], NFKD: [0x300E] }, +{ source: [0xFE44], NFC: [0xFE44], NFD: [0xFE44], NFKC: [0x300F], NFKD: [0x300F] }, +{ source: [0xFE47], NFC: [0xFE47], NFD: [0xFE47], NFKC: [0x005B], NFKD: [0x005B] }, +{ source: [0xFE48], NFC: [0xFE48], NFD: [0xFE48], NFKC: [0x005D], NFKD: [0x005D] }, +{ source: [0xFE49], NFC: [0xFE49], NFD: [0xFE49], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4A], NFC: [0xFE4A], NFD: [0xFE4A], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4B], NFC: [0xFE4B], NFD: [0xFE4B], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4C], NFC: [0xFE4C], NFD: [0xFE4C], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4D], NFC: [0xFE4D], NFD: [0xFE4D], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE4E], NFC: [0xFE4E], NFD: [0xFE4E], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE4F], NFC: [0xFE4F], NFD: [0xFE4F], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE50], NFC: [0xFE50], NFD: [0xFE50], NFKC: [0x002C], NFKD: [0x002C] }, +{ source: [0xFE51], NFC: [0xFE51], NFD: [0xFE51], NFKC: [0x3001], NFKD: [0x3001] }, +{ source: [0xFE52], NFC: [0xFE52], NFD: [0xFE52], NFKC: [0x002E], NFKD: [0x002E] }, +{ source: [0xFE54], NFC: [0xFE54], NFD: [0xFE54], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0xFE55], NFC: [0xFE55], NFD: [0xFE55], NFKC: [0x003A], NFKD: [0x003A] }, +{ source: [0xFE56], NFC: [0xFE56], NFD: [0xFE56], NFKC: [0x003F], NFKD: [0x003F] }, +{ source: [0xFE57], NFC: [0xFE57], NFD: [0xFE57], NFKC: [0x0021], NFKD: [0x0021] }, +{ source: [0xFE58], NFC: [0xFE58], NFD: [0xFE58], NFKC: [0x2014], NFKD: [0x2014] }, +{ source: [0xFE59], NFC: [0xFE59], NFD: [0xFE59], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0xFE5A], NFC: [0xFE5A], NFD: [0xFE5A], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0xFE5B], NFC: [0xFE5B], NFD: [0xFE5B], NFKC: [0x007B], NFKD: [0x007B] }, +{ source: [0xFE5C], NFC: [0xFE5C], NFD: [0xFE5C], NFKC: [0x007D], NFKD: [0x007D] }, +{ source: [0xFE5D], NFC: [0xFE5D], NFD: [0xFE5D], NFKC: [0x3014], NFKD: [0x3014] }, +{ source: [0xFE5E], NFC: [0xFE5E], NFD: [0xFE5E], NFKC: [0x3015], NFKD: [0x3015] }, +{ source: [0xFE5F], NFC: [0xFE5F], NFD: [0xFE5F], NFKC: [0x0023], NFKD: [0x0023] }, +{ source: [0xFE60], NFC: [0xFE60], NFD: [0xFE60], NFKC: [0x0026], NFKD: [0x0026] }, +{ source: [0xFE61], NFC: [0xFE61], NFD: [0xFE61], NFKC: [0x002A], NFKD: [0x002A] }, +{ source: [0xFE62], NFC: [0xFE62], NFD: [0xFE62], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0xFE63], NFC: [0xFE63], NFD: [0xFE63], NFKC: [0x002D], NFKD: [0x002D] }, +{ source: [0xFE64], NFC: [0xFE64], NFD: [0xFE64], NFKC: [0x003C], NFKD: [0x003C] }, +{ source: [0xFE65], NFC: [0xFE65], NFD: [0xFE65], NFKC: [0x003E], NFKD: [0x003E] }, +{ source: [0xFE66], NFC: [0xFE66], NFD: [0xFE66], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0xFE68], NFC: [0xFE68], NFD: [0xFE68], NFKC: [0x005C], NFKD: [0x005C] }, +{ source: [0xFE69], NFC: [0xFE69], NFD: [0xFE69], NFKC: [0x0024], NFKD: [0x0024] }, +{ source: [0xFE6A], NFC: [0xFE6A], NFD: [0xFE6A], NFKC: [0x0025], NFKD: [0x0025] }, +{ source: [0xFE6B], NFC: [0xFE6B], NFD: [0xFE6B], NFKC: [0x0040], NFKD: [0x0040] }, +{ source: [0xFE70], NFC: [0xFE70], NFD: [0xFE70], NFKC: [0x0020, 0x064B], NFKD: [0x0020, 0x064B] }, +{ source: [0xFE71], NFC: [0xFE71], NFD: [0xFE71], NFKC: [0x0640, 0x064B], NFKD: [0x0640, 0x064B] }, +{ source: [0xFE72], NFC: [0xFE72], NFD: [0xFE72], NFKC: [0x0020, 0x064C], NFKD: [0x0020, 0x064C] }, +{ source: [0xFE74], NFC: [0xFE74], NFD: [0xFE74], NFKC: [0x0020, 0x064D], NFKD: [0x0020, 0x064D] }, +{ source: [0xFE76], NFC: [0xFE76], NFD: [0xFE76], NFKC: [0x0020, 0x064E], NFKD: [0x0020, 0x064E] }, +{ source: [0xFE77], NFC: [0xFE77], NFD: [0xFE77], NFKC: [0x0640, 0x064E], NFKD: [0x0640, 0x064E] }, +{ source: [0xFE78], NFC: [0xFE78], NFD: [0xFE78], NFKC: [0x0020, 0x064F], NFKD: [0x0020, 0x064F] }, +{ source: [0xFE79], NFC: [0xFE79], NFD: [0xFE79], NFKC: [0x0640, 0x064F], NFKD: [0x0640, 0x064F] }, +{ source: [0xFE7A], NFC: [0xFE7A], NFD: [0xFE7A], NFKC: [0x0020, 0x0650], NFKD: [0x0020, 0x0650] }, +{ source: [0xFE7B], NFC: [0xFE7B], NFD: [0xFE7B], NFKC: [0x0640, 0x0650], NFKD: [0x0640, 0x0650] }, +{ source: [0xFE7C], NFC: [0xFE7C], NFD: [0xFE7C], NFKC: [0x0020, 0x0651], NFKD: [0x0020, 0x0651] }, +{ source: [0xFE7D], NFC: [0xFE7D], NFD: [0xFE7D], NFKC: [0x0640, 0x0651], NFKD: [0x0640, 0x0651] }, +{ source: [0xFE7E], NFC: [0xFE7E], NFD: [0xFE7E], NFKC: [0x0020, 0x0652], NFKD: [0x0020, 0x0652] }, +{ source: [0xFE7F], NFC: [0xFE7F], NFD: [0xFE7F], NFKC: [0x0640, 0x0652], NFKD: [0x0640, 0x0652] }, +{ source: [0xFE80], NFC: [0xFE80], NFD: [0xFE80], NFKC: [0x0621], NFKD: [0x0621] }, +{ source: [0xFE81], NFC: [0xFE81], NFD: [0xFE81], NFKC: [0x0622], NFKD: [0x0627, 0x0653] }, +{ source: [0xFE82], NFC: [0xFE82], NFD: [0xFE82], NFKC: [0x0622], NFKD: [0x0627, 0x0653] }, +{ source: [0xFE83], NFC: [0xFE83], NFD: [0xFE83], NFKC: [0x0623], NFKD: [0x0627, 0x0654] }, +{ source: [0xFE84], NFC: [0xFE84], NFD: [0xFE84], NFKC: [0x0623], NFKD: [0x0627, 0x0654] }, +{ source: [0xFE85], NFC: [0xFE85], NFD: [0xFE85], NFKC: [0x0624], NFKD: [0x0648, 0x0654] }, +{ source: [0xFE86], NFC: [0xFE86], NFD: [0xFE86], NFKC: [0x0624], NFKD: [0x0648, 0x0654] }, +{ source: [0xFE87], NFC: [0xFE87], NFD: [0xFE87], NFKC: [0x0625], NFKD: [0x0627, 0x0655] }, +{ source: [0xFE88], NFC: [0xFE88], NFD: [0xFE88], NFKC: [0x0625], NFKD: [0x0627, 0x0655] }, +{ source: [0xFE89], NFC: [0xFE89], NFD: [0xFE89], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8A], NFC: [0xFE8A], NFD: [0xFE8A], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8B], NFC: [0xFE8B], NFD: [0xFE8B], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8C], NFC: [0xFE8C], NFD: [0xFE8C], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8D], NFC: [0xFE8D], NFD: [0xFE8D], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0xFE8E], NFC: [0xFE8E], NFD: [0xFE8E], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0xFE8F], NFC: [0xFE8F], NFD: [0xFE8F], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE90], NFC: [0xFE90], NFD: [0xFE90], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE91], NFC: [0xFE91], NFD: [0xFE91], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE92], NFC: [0xFE92], NFD: [0xFE92], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE93], NFC: [0xFE93], NFD: [0xFE93], NFKC: [0x0629], NFKD: [0x0629] }, +{ source: [0xFE94], NFC: [0xFE94], NFD: [0xFE94], NFKC: [0x0629], NFKD: [0x0629] }, +{ source: [0xFE95], NFC: [0xFE95], NFD: [0xFE95], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE96], NFC: [0xFE96], NFD: [0xFE96], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE97], NFC: [0xFE97], NFD: [0xFE97], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE98], NFC: [0xFE98], NFD: [0xFE98], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE99], NFC: [0xFE99], NFD: [0xFE99], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9A], NFC: [0xFE9A], NFD: [0xFE9A], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9B], NFC: [0xFE9B], NFD: [0xFE9B], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9C], NFC: [0xFE9C], NFD: [0xFE9C], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9D], NFC: [0xFE9D], NFD: [0xFE9D], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFE9E], NFC: [0xFE9E], NFD: [0xFE9E], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFE9F], NFC: [0xFE9F], NFD: [0xFE9F], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFEA0], NFC: [0xFEA0], NFD: [0xFEA0], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFEA1], NFC: [0xFEA1], NFD: [0xFEA1], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA2], NFC: [0xFEA2], NFD: [0xFEA2], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA3], NFC: [0xFEA3], NFD: [0xFEA3], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA4], NFC: [0xFEA4], NFD: [0xFEA4], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA5], NFC: [0xFEA5], NFD: [0xFEA5], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA6], NFC: [0xFEA6], NFD: [0xFEA6], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA7], NFC: [0xFEA7], NFD: [0xFEA7], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA8], NFC: [0xFEA8], NFD: [0xFEA8], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA9], NFC: [0xFEA9], NFD: [0xFEA9], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0xFEAA], NFC: [0xFEAA], NFD: [0xFEAA], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0xFEAB], NFC: [0xFEAB], NFD: [0xFEAB], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0xFEAC], NFC: [0xFEAC], NFD: [0xFEAC], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0xFEAD], NFC: [0xFEAD], NFD: [0xFEAD], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0xFEAE], NFC: [0xFEAE], NFD: [0xFEAE], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0xFEAF], NFC: [0xFEAF], NFD: [0xFEAF], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0xFEB0], NFC: [0xFEB0], NFD: [0xFEB0], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0xFEB1], NFC: [0xFEB1], NFD: [0xFEB1], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB2], NFC: [0xFEB2], NFD: [0xFEB2], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB3], NFC: [0xFEB3], NFD: [0xFEB3], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB4], NFC: [0xFEB4], NFD: [0xFEB4], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB5], NFC: [0xFEB5], NFD: [0xFEB5], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB6], NFC: [0xFEB6], NFD: [0xFEB6], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB7], NFC: [0xFEB7], NFD: [0xFEB7], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB8], NFC: [0xFEB8], NFD: [0xFEB8], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB9], NFC: [0xFEB9], NFD: [0xFEB9], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBA], NFC: [0xFEBA], NFD: [0xFEBA], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBB], NFC: [0xFEBB], NFD: [0xFEBB], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBC], NFC: [0xFEBC], NFD: [0xFEBC], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBD], NFC: [0xFEBD], NFD: [0xFEBD], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEBE], NFC: [0xFEBE], NFD: [0xFEBE], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEBF], NFC: [0xFEBF], NFD: [0xFEBF], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEC0], NFC: [0xFEC0], NFD: [0xFEC0], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEC1], NFC: [0xFEC1], NFD: [0xFEC1], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC2], NFC: [0xFEC2], NFD: [0xFEC2], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC3], NFC: [0xFEC3], NFD: [0xFEC3], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC4], NFC: [0xFEC4], NFD: [0xFEC4], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC5], NFC: [0xFEC5], NFD: [0xFEC5], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC6], NFC: [0xFEC6], NFD: [0xFEC6], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC7], NFC: [0xFEC7], NFD: [0xFEC7], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC8], NFC: [0xFEC8], NFD: [0xFEC8], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC9], NFC: [0xFEC9], NFD: [0xFEC9], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECA], NFC: [0xFECA], NFD: [0xFECA], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECB], NFC: [0xFECB], NFD: [0xFECB], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECC], NFC: [0xFECC], NFD: [0xFECC], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECD], NFC: [0xFECD], NFD: [0xFECD], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFECE], NFC: [0xFECE], NFD: [0xFECE], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFECF], NFC: [0xFECF], NFD: [0xFECF], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFED0], NFC: [0xFED0], NFD: [0xFED0], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFED1], NFC: [0xFED1], NFD: [0xFED1], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED2], NFC: [0xFED2], NFD: [0xFED2], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED3], NFC: [0xFED3], NFD: [0xFED3], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED4], NFC: [0xFED4], NFD: [0xFED4], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED5], NFC: [0xFED5], NFD: [0xFED5], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED6], NFC: [0xFED6], NFD: [0xFED6], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED7], NFC: [0xFED7], NFD: [0xFED7], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED8], NFC: [0xFED8], NFD: [0xFED8], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED9], NFC: [0xFED9], NFD: [0xFED9], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDA], NFC: [0xFEDA], NFD: [0xFEDA], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDB], NFC: [0xFEDB], NFD: [0xFEDB], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDC], NFC: [0xFEDC], NFD: [0xFEDC], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDD], NFC: [0xFEDD], NFD: [0xFEDD], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEDE], NFC: [0xFEDE], NFD: [0xFEDE], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEDF], NFC: [0xFEDF], NFD: [0xFEDF], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEE0], NFC: [0xFEE0], NFD: [0xFEE0], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEE1], NFC: [0xFEE1], NFD: [0xFEE1], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE2], NFC: [0xFEE2], NFD: [0xFEE2], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE3], NFC: [0xFEE3], NFD: [0xFEE3], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE4], NFC: [0xFEE4], NFD: [0xFEE4], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE5], NFC: [0xFEE5], NFD: [0xFEE5], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE6], NFC: [0xFEE6], NFD: [0xFEE6], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE7], NFC: [0xFEE7], NFD: [0xFEE7], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE8], NFC: [0xFEE8], NFD: [0xFEE8], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE9], NFC: [0xFEE9], NFD: [0xFEE9], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEEA], NFC: [0xFEEA], NFD: [0xFEEA], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEEB], NFC: [0xFEEB], NFD: [0xFEEB], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEEC], NFC: [0xFEEC], NFD: [0xFEEC], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEED], NFC: [0xFEED], NFD: [0xFEED], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0xFEEE], NFC: [0xFEEE], NFD: [0xFEEE], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0xFEEF], NFC: [0xFEEF], NFD: [0xFEEF], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFEF0], NFC: [0xFEF0], NFD: [0xFEF0], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFEF1], NFC: [0xFEF1], NFD: [0xFEF1], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF2], NFC: [0xFEF2], NFD: [0xFEF2], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF3], NFC: [0xFEF3], NFD: [0xFEF3], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF4], NFC: [0xFEF4], NFD: [0xFEF4], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF5], NFC: [0xFEF5], NFD: [0xFEF5], NFKC: [0x0644, 0x0622], NFKD: [0x0644, 0x0627, 0x0653] }, +{ source: [0xFEF6], NFC: [0xFEF6], NFD: [0xFEF6], NFKC: [0x0644, 0x0622], NFKD: [0x0644, 0x0627, 0x0653] }, +{ source: [0xFEF7], NFC: [0xFEF7], NFD: [0xFEF7], NFKC: [0x0644, 0x0623], NFKD: [0x0644, 0x0627, 0x0654] }, +{ source: [0xFEF8], NFC: [0xFEF8], NFD: [0xFEF8], NFKC: [0x0644, 0x0623], NFKD: [0x0644, 0x0627, 0x0654] }, +{ source: [0xFEF9], NFC: [0xFEF9], NFD: [0xFEF9], NFKC: [0x0644, 0x0625], NFKD: [0x0644, 0x0627, 0x0655] }, +{ source: [0xFEFA], NFC: [0xFEFA], NFD: [0xFEFA], NFKC: [0x0644, 0x0625], NFKD: [0x0644, 0x0627, 0x0655] }, +{ source: [0xFEFB], NFC: [0xFEFB], NFD: [0xFEFB], NFKC: [0x0644, 0x0627], NFKD: [0x0644, 0x0627] }, +{ source: [0xFEFC], NFC: [0xFEFC], NFD: [0xFEFC], NFKC: [0x0644, 0x0627], NFKD: [0x0644, 0x0627] }, +{ source: [0xFF01], NFC: [0xFF01], NFD: [0xFF01], NFKC: [0x0021], NFKD: [0x0021] }, +{ source: [0xFF02], NFC: [0xFF02], NFD: [0xFF02], NFKC: [0x0022], NFKD: [0x0022] }, +{ source: [0xFF03], NFC: [0xFF03], NFD: [0xFF03], NFKC: [0x0023], NFKD: [0x0023] }, +{ source: [0xFF04], NFC: [0xFF04], NFD: [0xFF04], NFKC: [0x0024], NFKD: [0x0024] }, +{ source: [0xFF05], NFC: [0xFF05], NFD: [0xFF05], NFKC: [0x0025], NFKD: [0x0025] }, +{ source: [0xFF06], NFC: [0xFF06], NFD: [0xFF06], NFKC: [0x0026], NFKD: [0x0026] }, +{ source: [0xFF07], NFC: [0xFF07], NFD: [0xFF07], NFKC: [0x0027], NFKD: [0x0027] }, +{ source: [0xFF08], NFC: [0xFF08], NFD: [0xFF08], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0xFF09], NFC: [0xFF09], NFD: [0xFF09], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0xFF0A], NFC: [0xFF0A], NFD: [0xFF0A], NFKC: [0x002A], NFKD: [0x002A] }, +{ source: [0xFF0B], NFC: [0xFF0B], NFD: [0xFF0B], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0xFF0C], NFC: [0xFF0C], NFD: [0xFF0C], NFKC: [0x002C], NFKD: [0x002C] }, +{ source: [0xFF0D], NFC: [0xFF0D], NFD: [0xFF0D], NFKC: [0x002D], NFKD: [0x002D] }, +{ source: [0xFF0E], NFC: [0xFF0E], NFD: [0xFF0E], NFKC: [0x002E], NFKD: [0x002E] }, +{ source: [0xFF0F], NFC: [0xFF0F], NFD: [0xFF0F], NFKC: [0x002F], NFKD: [0x002F] }, +{ source: [0xFF10], NFC: [0xFF10], NFD: [0xFF10], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0xFF11], NFC: [0xFF11], NFD: [0xFF11], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0xFF12], NFC: [0xFF12], NFD: [0xFF12], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0xFF13], NFC: [0xFF13], NFD: [0xFF13], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0xFF14], NFC: [0xFF14], NFD: [0xFF14], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0xFF15], NFC: [0xFF15], NFD: [0xFF15], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0xFF16], NFC: [0xFF16], NFD: [0xFF16], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0xFF17], NFC: [0xFF17], NFD: [0xFF17], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0xFF18], NFC: [0xFF18], NFD: [0xFF18], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0xFF19], NFC: [0xFF19], NFD: [0xFF19], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0xFF1A], NFC: [0xFF1A], NFD: [0xFF1A], NFKC: [0x003A], NFKD: [0x003A] }, +{ source: [0xFF1B], NFC: [0xFF1B], NFD: [0xFF1B], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0xFF1C], NFC: [0xFF1C], NFD: [0xFF1C], NFKC: [0x003C], NFKD: [0x003C] }, +{ source: [0xFF1D], NFC: [0xFF1D], NFD: [0xFF1D], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0xFF1E], NFC: [0xFF1E], NFD: [0xFF1E], NFKC: [0x003E], NFKD: [0x003E] }, +{ source: [0xFF1F], NFC: [0xFF1F], NFD: [0xFF1F], NFKC: [0x003F], NFKD: [0x003F] }, +{ source: [0xFF20], NFC: [0xFF20], NFD: [0xFF20], NFKC: [0x0040], NFKD: [0x0040] }, +{ source: [0xFF21], NFC: [0xFF21], NFD: [0xFF21], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0xFF22], NFC: [0xFF22], NFD: [0xFF22], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0xFF23], NFC: [0xFF23], NFD: [0xFF23], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0xFF24], NFC: [0xFF24], NFD: [0xFF24], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0xFF25], NFC: [0xFF25], NFD: [0xFF25], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0xFF26], NFC: [0xFF26], NFD: [0xFF26], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0xFF27], NFC: [0xFF27], NFD: [0xFF27], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0xFF28], NFC: [0xFF28], NFD: [0xFF28], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0xFF29], NFC: [0xFF29], NFD: [0xFF29], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0xFF2A], NFC: [0xFF2A], NFD: [0xFF2A], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0xFF2B], NFC: [0xFF2B], NFD: [0xFF2B], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0xFF2C], NFC: [0xFF2C], NFD: [0xFF2C], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0xFF2D], NFC: [0xFF2D], NFD: [0xFF2D], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0xFF2E], NFC: [0xFF2E], NFD: [0xFF2E], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0xFF2F], NFC: [0xFF2F], NFD: [0xFF2F], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0xFF30], NFC: [0xFF30], NFD: [0xFF30], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0xFF31], NFC: [0xFF31], NFD: [0xFF31], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0xFF32], NFC: [0xFF32], NFD: [0xFF32], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0xFF33], NFC: [0xFF33], NFD: [0xFF33], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0xFF34], NFC: [0xFF34], NFD: [0xFF34], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0xFF35], NFC: [0xFF35], NFD: [0xFF35], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0xFF36], NFC: [0xFF36], NFD: [0xFF36], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0xFF37], NFC: [0xFF37], NFD: [0xFF37], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0xFF38], NFC: [0xFF38], NFD: [0xFF38], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0xFF39], NFC: [0xFF39], NFD: [0xFF39], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0xFF3A], NFC: [0xFF3A], NFD: [0xFF3A], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0xFF3B], NFC: [0xFF3B], NFD: [0xFF3B], NFKC: [0x005B], NFKD: [0x005B] }, +{ source: [0xFF3C], NFC: [0xFF3C], NFD: [0xFF3C], NFKC: [0x005C], NFKD: [0x005C] }, +{ source: [0xFF3D], NFC: [0xFF3D], NFD: [0xFF3D], NFKC: [0x005D], NFKD: [0x005D] }, +{ source: [0xFF3E], NFC: [0xFF3E], NFD: [0xFF3E], NFKC: [0x005E], NFKD: [0x005E] }, +{ source: [0xFF3F], NFC: [0xFF3F], NFD: [0xFF3F], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFF40], NFC: [0xFF40], NFD: [0xFF40], NFKC: [0x0060], NFKD: [0x0060] }, +{ source: [0xFF41], NFC: [0xFF41], NFD: [0xFF41], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0xFF42], NFC: [0xFF42], NFD: [0xFF42], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0xFF43], NFC: [0xFF43], NFD: [0xFF43], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0xFF44], NFC: [0xFF44], NFD: [0xFF44], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0xFF45], NFC: [0xFF45], NFD: [0xFF45], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0xFF46], NFC: [0xFF46], NFD: [0xFF46], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0xFF47], NFC: [0xFF47], NFD: [0xFF47], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0xFF48], NFC: [0xFF48], NFD: [0xFF48], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0xFF49], NFC: [0xFF49], NFD: [0xFF49], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0xFF4A], NFC: [0xFF4A], NFD: [0xFF4A], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0xFF4B], NFC: [0xFF4B], NFD: [0xFF4B], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0xFF4C], NFC: [0xFF4C], NFD: [0xFF4C], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0xFF4D], NFC: [0xFF4D], NFD: [0xFF4D], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0xFF4E], NFC: [0xFF4E], NFD: [0xFF4E], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0xFF4F], NFC: [0xFF4F], NFD: [0xFF4F], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0xFF50], NFC: [0xFF50], NFD: [0xFF50], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0xFF51], NFC: [0xFF51], NFD: [0xFF51], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0xFF52], NFC: [0xFF52], NFD: [0xFF52], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0xFF53], NFC: [0xFF53], NFD: [0xFF53], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0xFF54], NFC: [0xFF54], NFD: [0xFF54], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0xFF55], NFC: [0xFF55], NFD: [0xFF55], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0xFF56], NFC: [0xFF56], NFD: [0xFF56], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0xFF57], NFC: [0xFF57], NFD: [0xFF57], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0xFF58], NFC: [0xFF58], NFD: [0xFF58], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0xFF59], NFC: [0xFF59], NFD: [0xFF59], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0xFF5A], NFC: [0xFF5A], NFD: [0xFF5A], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0xFF5B], NFC: [0xFF5B], NFD: [0xFF5B], NFKC: [0x007B], NFKD: [0x007B] }, +{ source: [0xFF5C], NFC: [0xFF5C], NFD: [0xFF5C], NFKC: [0x007C], NFKD: [0x007C] }, +{ source: [0xFF5D], NFC: [0xFF5D], NFD: [0xFF5D], NFKC: [0x007D], NFKD: [0x007D] }, +{ source: [0xFF5E], NFC: [0xFF5E], NFD: [0xFF5E], NFKC: [0x007E], NFKD: [0x007E] }, +{ source: [0xFF5F], NFC: [0xFF5F], NFD: [0xFF5F], NFKC: [0x2985], NFKD: [0x2985] }, +{ source: [0xFF60], NFC: [0xFF60], NFD: [0xFF60], NFKC: [0x2986], NFKD: [0x2986] }, +{ source: [0xFF61], NFC: [0xFF61], NFD: [0xFF61], NFKC: [0x3002], NFKD: [0x3002] }, +{ source: [0xFF62], NFC: [0xFF62], NFD: [0xFF62], NFKC: [0x300C], NFKD: [0x300C] }, +{ source: [0xFF63], NFC: [0xFF63], NFD: [0xFF63], NFKC: [0x300D], NFKD: [0x300D] }, +{ source: [0xFF64], NFC: [0xFF64], NFD: [0xFF64], NFKC: [0x3001], NFKD: [0x3001] }, +{ source: [0xFF65], NFC: [0xFF65], NFD: [0xFF65], NFKC: [0x30FB], NFKD: [0x30FB] }, +{ source: [0xFF66], NFC: [0xFF66], NFD: [0xFF66], NFKC: [0x30F2], NFKD: [0x30F2] }, +{ source: [0xFF67], NFC: [0xFF67], NFD: [0xFF67], NFKC: [0x30A1], NFKD: [0x30A1] }, +{ source: [0xFF68], NFC: [0xFF68], NFD: [0xFF68], NFKC: [0x30A3], NFKD: [0x30A3] }, +{ source: [0xFF69], NFC: [0xFF69], NFD: [0xFF69], NFKC: [0x30A5], NFKD: [0x30A5] }, +{ source: [0xFF6A], NFC: [0xFF6A], NFD: [0xFF6A], NFKC: [0x30A7], NFKD: [0x30A7] }, +{ source: [0xFF6B], NFC: [0xFF6B], NFD: [0xFF6B], NFKC: [0x30A9], NFKD: [0x30A9] }, +{ source: [0xFF6C], NFC: [0xFF6C], NFD: [0xFF6C], NFKC: [0x30E3], NFKD: [0x30E3] }, +{ source: [0xFF6D], NFC: [0xFF6D], NFD: [0xFF6D], NFKC: [0x30E5], NFKD: [0x30E5] }, +{ source: [0xFF6E], NFC: [0xFF6E], NFD: [0xFF6E], NFKC: [0x30E7], NFKD: [0x30E7] }, +{ source: [0xFF6F], NFC: [0xFF6F], NFD: [0xFF6F], NFKC: [0x30C3], NFKD: [0x30C3] }, +{ source: [0xFF70], NFC: [0xFF70], NFD: [0xFF70], NFKC: [0x30FC], NFKD: [0x30FC] }, +{ source: [0xFF71], NFC: [0xFF71], NFD: [0xFF71], NFKC: [0x30A2], NFKD: [0x30A2] }, +{ source: [0xFF72], NFC: [0xFF72], NFD: [0xFF72], NFKC: [0x30A4], NFKD: [0x30A4] }, +{ source: [0xFF73], NFC: [0xFF73], NFD: [0xFF73], NFKC: [0x30A6], NFKD: [0x30A6] }, +{ source: [0xFF74], NFC: [0xFF74], NFD: [0xFF74], NFKC: [0x30A8], NFKD: [0x30A8] }, +{ source: [0xFF75], NFC: [0xFF75], NFD: [0xFF75], NFKC: [0x30AA], NFKD: [0x30AA] }, +{ source: [0xFF76], NFC: [0xFF76], NFD: [0xFF76], NFKC: [0x30AB], NFKD: [0x30AB] }, +{ source: [0xFF77], NFC: [0xFF77], NFD: [0xFF77], NFKC: [0x30AD], NFKD: [0x30AD] }, +{ source: [0xFF78], NFC: [0xFF78], NFD: [0xFF78], NFKC: [0x30AF], NFKD: [0x30AF] }, +{ source: [0xFF79], NFC: [0xFF79], NFD: [0xFF79], NFKC: [0x30B1], NFKD: [0x30B1] }, +{ source: [0xFF7A], NFC: [0xFF7A], NFD: [0xFF7A], NFKC: [0x30B3], NFKD: [0x30B3] }, +{ source: [0xFF7B], NFC: [0xFF7B], NFD: [0xFF7B], NFKC: [0x30B5], NFKD: [0x30B5] }, +{ source: [0xFF7C], NFC: [0xFF7C], NFD: [0xFF7C], NFKC: [0x30B7], NFKD: [0x30B7] }, +{ source: [0xFF7D], NFC: [0xFF7D], NFD: [0xFF7D], NFKC: [0x30B9], NFKD: [0x30B9] }, +{ source: [0xFF7E], NFC: [0xFF7E], NFD: [0xFF7E], NFKC: [0x30BB], NFKD: [0x30BB] }, +{ source: [0xFF7F], NFC: [0xFF7F], NFD: [0xFF7F], NFKC: [0x30BD], NFKD: [0x30BD] }, +{ source: [0xFF80], NFC: [0xFF80], NFD: [0xFF80], NFKC: [0x30BF], NFKD: [0x30BF] }, +{ source: [0xFF81], NFC: [0xFF81], NFD: [0xFF81], NFKC: [0x30C1], NFKD: [0x30C1] }, +{ source: [0xFF82], NFC: [0xFF82], NFD: [0xFF82], NFKC: [0x30C4], NFKD: [0x30C4] }, +{ source: [0xFF83], NFC: [0xFF83], NFD: [0xFF83], NFKC: [0x30C6], NFKD: [0x30C6] }, +{ source: [0xFF84], NFC: [0xFF84], NFD: [0xFF84], NFKC: [0x30C8], NFKD: [0x30C8] }, +{ source: [0xFF85], NFC: [0xFF85], NFD: [0xFF85], NFKC: [0x30CA], NFKD: [0x30CA] }, +{ source: [0xFF86], NFC: [0xFF86], NFD: [0xFF86], NFKC: [0x30CB], NFKD: [0x30CB] }, +{ source: [0xFF87], NFC: [0xFF87], NFD: [0xFF87], NFKC: [0x30CC], NFKD: [0x30CC] }, +{ source: [0xFF88], NFC: [0xFF88], NFD: [0xFF88], NFKC: [0x30CD], NFKD: [0x30CD] }, +{ source: [0xFF89], NFC: [0xFF89], NFD: [0xFF89], NFKC: [0x30CE], NFKD: [0x30CE] }, +{ source: [0xFF8A], NFC: [0xFF8A], NFD: [0xFF8A], NFKC: [0x30CF], NFKD: [0x30CF] }, +{ source: [0xFF8B], NFC: [0xFF8B], NFD: [0xFF8B], NFKC: [0x30D2], NFKD: [0x30D2] }, +{ source: [0xFF8C], NFC: [0xFF8C], NFD: [0xFF8C], NFKC: [0x30D5], NFKD: [0x30D5] }, +{ source: [0xFF8D], NFC: [0xFF8D], NFD: [0xFF8D], NFKC: [0x30D8], NFKD: [0x30D8] }, +{ source: [0xFF8E], NFC: [0xFF8E], NFD: [0xFF8E], NFKC: [0x30DB], NFKD: [0x30DB] }, +{ source: [0xFF8F], NFC: [0xFF8F], NFD: [0xFF8F], NFKC: [0x30DE], NFKD: [0x30DE] }, +{ source: [0xFF90], NFC: [0xFF90], NFD: [0xFF90], NFKC: [0x30DF], NFKD: [0x30DF] }, +{ source: [0xFF91], NFC: [0xFF91], NFD: [0xFF91], NFKC: [0x30E0], NFKD: [0x30E0] }, +{ source: [0xFF92], NFC: [0xFF92], NFD: [0xFF92], NFKC: [0x30E1], NFKD: [0x30E1] }, +{ source: [0xFF93], NFC: [0xFF93], NFD: [0xFF93], NFKC: [0x30E2], NFKD: [0x30E2] }, +{ source: [0xFF94], NFC: [0xFF94], NFD: [0xFF94], NFKC: [0x30E4], NFKD: [0x30E4] }, +{ source: [0xFF95], NFC: [0xFF95], NFD: [0xFF95], NFKC: [0x30E6], NFKD: [0x30E6] }, +{ source: [0xFF96], NFC: [0xFF96], NFD: [0xFF96], NFKC: [0x30E8], NFKD: [0x30E8] }, +{ source: [0xFF97], NFC: [0xFF97], NFD: [0xFF97], NFKC: [0x30E9], NFKD: [0x30E9] }, +{ source: [0xFF98], NFC: [0xFF98], NFD: [0xFF98], NFKC: [0x30EA], NFKD: [0x30EA] }, +{ source: [0xFF99], NFC: [0xFF99], NFD: [0xFF99], NFKC: [0x30EB], NFKD: [0x30EB] }, +{ source: [0xFF9A], NFC: [0xFF9A], NFD: [0xFF9A], NFKC: [0x30EC], NFKD: [0x30EC] }, +{ source: [0xFF9B], NFC: [0xFF9B], NFD: [0xFF9B], NFKC: [0x30ED], NFKD: [0x30ED] }, +{ source: [0xFF9C], NFC: [0xFF9C], NFD: [0xFF9C], NFKC: [0x30EF], NFKD: [0x30EF] }, +{ source: [0xFF9D], NFC: [0xFF9D], NFD: [0xFF9D], NFKC: [0x30F3], NFKD: [0x30F3] }, +{ source: [0xFF9E], NFC: [0xFF9E], NFD: [0xFF9E], NFKC: [0x3099], NFKD: [0x3099] }, +{ source: [0xFF9F], NFC: [0xFF9F], NFD: [0xFF9F], NFKC: [0x309A], NFKD: [0x309A] }, +{ source: [0xFFA0], NFC: [0xFFA0], NFD: [0xFFA0], NFKC: [0x1160], NFKD: [0x1160] }, +{ source: [0xFFA1], NFC: [0xFFA1], NFD: [0xFFA1], NFKC: [0x1100], NFKD: [0x1100] }, +{ source: [0xFFA2], NFC: [0xFFA2], NFD: [0xFFA2], NFKC: [0x1101], NFKD: [0x1101] }, +{ source: [0xFFA3], NFC: [0xFFA3], NFD: [0xFFA3], NFKC: [0x11AA], NFKD: [0x11AA] }, +{ source: [0xFFA4], NFC: [0xFFA4], NFD: [0xFFA4], NFKC: [0x1102], NFKD: [0x1102] }, +{ source: [0xFFA5], NFC: [0xFFA5], NFD: [0xFFA5], NFKC: [0x11AC], NFKD: [0x11AC] }, +{ source: [0xFFA6], NFC: [0xFFA6], NFD: [0xFFA6], NFKC: [0x11AD], NFKD: [0x11AD] }, +{ source: [0xFFA7], NFC: [0xFFA7], NFD: [0xFFA7], NFKC: [0x1103], NFKD: [0x1103] }, +{ source: [0xFFA8], NFC: [0xFFA8], NFD: [0xFFA8], NFKC: [0x1104], NFKD: [0x1104] }, +{ source: [0xFFA9], NFC: [0xFFA9], NFD: [0xFFA9], NFKC: [0x1105], NFKD: [0x1105] }, +{ source: [0xFFAA], NFC: [0xFFAA], NFD: [0xFFAA], NFKC: [0x11B0], NFKD: [0x11B0] }, +{ source: [0xFFAB], NFC: [0xFFAB], NFD: [0xFFAB], NFKC: [0x11B1], NFKD: [0x11B1] }, +{ source: [0xFFAC], NFC: [0xFFAC], NFD: [0xFFAC], NFKC: [0x11B2], NFKD: [0x11B2] }, +{ source: [0xFFAD], NFC: [0xFFAD], NFD: [0xFFAD], NFKC: [0x11B3], NFKD: [0x11B3] }, +{ source: [0xFFAE], NFC: [0xFFAE], NFD: [0xFFAE], NFKC: [0x11B4], NFKD: [0x11B4] }, +{ source: [0xFFAF], NFC: [0xFFAF], NFD: [0xFFAF], NFKC: [0x11B5], NFKD: [0x11B5] }, +{ source: [0xFFB0], NFC: [0xFFB0], NFD: [0xFFB0], NFKC: [0x111A], NFKD: [0x111A] }, +{ source: [0xFFB1], NFC: [0xFFB1], NFD: [0xFFB1], NFKC: [0x1106], NFKD: [0x1106] }, +{ source: [0xFFB2], NFC: [0xFFB2], NFD: [0xFFB2], NFKC: [0x1107], NFKD: [0x1107] }, +{ source: [0xFFB3], NFC: [0xFFB3], NFD: [0xFFB3], NFKC: [0x1108], NFKD: [0x1108] }, +{ source: [0xFFB4], NFC: [0xFFB4], NFD: [0xFFB4], NFKC: [0x1121], NFKD: [0x1121] }, +{ source: [0xFFB5], NFC: [0xFFB5], NFD: [0xFFB5], NFKC: [0x1109], NFKD: [0x1109] }, +{ source: [0xFFB6], NFC: [0xFFB6], NFD: [0xFFB6], NFKC: [0x110A], NFKD: [0x110A] }, +{ source: [0xFFB7], NFC: [0xFFB7], NFD: [0xFFB7], NFKC: [0x110B], NFKD: [0x110B] }, +{ source: [0xFFB8], NFC: [0xFFB8], NFD: [0xFFB8], NFKC: [0x110C], NFKD: [0x110C] }, +{ source: [0xFFB9], NFC: [0xFFB9], NFD: [0xFFB9], NFKC: [0x110D], NFKD: [0x110D] }, +{ source: [0xFFBA], NFC: [0xFFBA], NFD: [0xFFBA], NFKC: [0x110E], NFKD: [0x110E] }, +{ source: [0xFFBB], NFC: [0xFFBB], NFD: [0xFFBB], NFKC: [0x110F], NFKD: [0x110F] }, +{ source: [0xFFBC], NFC: [0xFFBC], NFD: [0xFFBC], NFKC: [0x1110], NFKD: [0x1110] }, +{ source: [0xFFBD], NFC: [0xFFBD], NFD: [0xFFBD], NFKC: [0x1111], NFKD: [0x1111] }, +{ source: [0xFFBE], NFC: [0xFFBE], NFD: [0xFFBE], NFKC: [0x1112], NFKD: [0x1112] }, +{ source: [0xFFC2], NFC: [0xFFC2], NFD: [0xFFC2], NFKC: [0x1161], NFKD: [0x1161] }, +{ source: [0xFFC3], NFC: [0xFFC3], NFD: [0xFFC3], NFKC: [0x1162], NFKD: [0x1162] }, +{ source: [0xFFC4], NFC: [0xFFC4], NFD: [0xFFC4], NFKC: [0x1163], NFKD: [0x1163] }, +{ source: [0xFFC5], NFC: [0xFFC5], NFD: [0xFFC5], NFKC: [0x1164], NFKD: [0x1164] }, +{ source: [0xFFC6], NFC: [0xFFC6], NFD: [0xFFC6], NFKC: [0x1165], NFKD: [0x1165] }, +{ source: [0xFFC7], NFC: [0xFFC7], NFD: [0xFFC7], NFKC: [0x1166], NFKD: [0x1166] }, +{ source: [0xFFCA], NFC: [0xFFCA], NFD: [0xFFCA], NFKC: [0x1167], NFKD: [0x1167] }, +{ source: [0xFFCB], NFC: [0xFFCB], NFD: [0xFFCB], NFKC: [0x1168], NFKD: [0x1168] }, +{ source: [0xFFCC], NFC: [0xFFCC], NFD: [0xFFCC], NFKC: [0x1169], NFKD: [0x1169] }, +{ source: [0xFFCD], NFC: [0xFFCD], NFD: [0xFFCD], NFKC: [0x116A], NFKD: [0x116A] }, +{ source: [0xFFCE], NFC: [0xFFCE], NFD: [0xFFCE], NFKC: [0x116B], NFKD: [0x116B] }, +{ source: [0xFFCF], NFC: [0xFFCF], NFD: [0xFFCF], NFKC: [0x116C], NFKD: [0x116C] }, +{ source: [0xFFD2], NFC: [0xFFD2], NFD: [0xFFD2], NFKC: [0x116D], NFKD: [0x116D] }, +{ source: [0xFFD3], NFC: [0xFFD3], NFD: [0xFFD3], NFKC: [0x116E], NFKD: [0x116E] }, +{ source: [0xFFD4], NFC: [0xFFD4], NFD: [0xFFD4], NFKC: [0x116F], NFKD: [0x116F] }, +{ source: [0xFFD5], NFC: [0xFFD5], NFD: [0xFFD5], NFKC: [0x1170], NFKD: [0x1170] }, +{ source: [0xFFD6], NFC: [0xFFD6], NFD: [0xFFD6], NFKC: [0x1171], NFKD: [0x1171] }, +{ source: [0xFFD7], NFC: [0xFFD7], NFD: [0xFFD7], NFKC: [0x1172], NFKD: [0x1172] }, +{ source: [0xFFDA], NFC: [0xFFDA], NFD: [0xFFDA], NFKC: [0x1173], NFKD: [0x1173] }, +{ source: [0xFFDB], NFC: [0xFFDB], NFD: [0xFFDB], NFKC: [0x1174], NFKD: [0x1174] }, +{ source: [0xFFDC], NFC: [0xFFDC], NFD: [0xFFDC], NFKC: [0x1175], NFKD: [0x1175] }, +{ source: [0xFFE0], NFC: [0xFFE0], NFD: [0xFFE0], NFKC: [0x00A2], NFKD: [0x00A2] }, +{ source: [0xFFE1], NFC: [0xFFE1], NFD: [0xFFE1], NFKC: [0x00A3], NFKD: [0x00A3] }, +{ source: [0xFFE2], NFC: [0xFFE2], NFD: [0xFFE2], NFKC: [0x00AC], NFKD: [0x00AC] }, +{ source: [0xFFE3], NFC: [0xFFE3], NFD: [0xFFE3], NFKC: [0x0020, 0x0304], NFKD: [0x0020, 0x0304] }, +{ source: [0xFFE4], NFC: [0xFFE4], NFD: [0xFFE4], NFKC: [0x00A6], NFKD: [0x00A6] }, +{ source: [0xFFE5], NFC: [0xFFE5], NFD: [0xFFE5], NFKC: [0x00A5], NFKD: [0x00A5] }, +{ source: [0xFFE6], NFC: [0xFFE6], NFD: [0xFFE6], NFKC: [0x20A9], NFKD: [0x20A9] }, +{ source: [0xFFE8], NFC: [0xFFE8], NFD: [0xFFE8], NFKC: [0x2502], NFKD: [0x2502] }, +{ source: [0xFFE9], NFC: [0xFFE9], NFD: [0xFFE9], NFKC: [0x2190], NFKD: [0x2190] }, +{ source: [0xFFEA], NFC: [0xFFEA], NFD: [0xFFEA], NFKC: [0x2191], NFKD: [0x2191] }, +{ source: [0xFFEB], NFC: [0xFFEB], NFD: [0xFFEB], NFKC: [0x2192], NFKD: [0x2192] }, +{ source: [0xFFEC], NFC: [0xFFEC], NFD: [0xFFEC], NFKC: [0x2193], NFKD: [0x2193] }, +{ source: [0xFFED], NFC: [0xFFED], NFD: [0xFFED], NFKC: [0x25A0], NFKD: [0x25A0] }, +{ source: [0xFFEE], NFC: [0xFFEE], NFD: [0xFFEE], NFKC: [0x25CB], NFKD: [0x25CB] }, +{ source: [0x10781], NFC: [0x10781], NFD: [0x10781], NFKC: [0x02D0], NFKD: [0x02D0] }, +{ source: [0x10782], NFC: [0x10782], NFD: [0x10782], NFKC: [0x02D1], NFKD: [0x02D1] }, +{ source: [0x10783], NFC: [0x10783], NFD: [0x10783], NFKC: [0x00E6], NFKD: [0x00E6] }, +{ source: [0x10784], NFC: [0x10784], NFD: [0x10784], NFKC: [0x0299], NFKD: [0x0299] }, +{ source: [0x10785], NFC: [0x10785], NFD: [0x10785], NFKC: [0x0253], NFKD: [0x0253] }, +{ source: [0x10787], NFC: [0x10787], NFD: [0x10787], NFKC: [0x02A3], NFKD: [0x02A3] }, +{ source: [0x10788], NFC: [0x10788], NFD: [0x10788], NFKC: [0xAB66], NFKD: [0xAB66] }, +{ source: [0x10789], NFC: [0x10789], NFD: [0x10789], NFKC: [0x02A5], NFKD: [0x02A5] }, +{ source: [0x1078A], NFC: [0x1078A], NFD: [0x1078A], NFKC: [0x02A4], NFKD: [0x02A4] }, +{ source: [0x1078B], NFC: [0x1078B], NFD: [0x1078B], NFKC: [0x0256], NFKD: [0x0256] }, +{ source: [0x1078C], NFC: [0x1078C], NFD: [0x1078C], NFKC: [0x0257], NFKD: [0x0257] }, +{ source: [0x1078D], NFC: [0x1078D], NFD: [0x1078D], NFKC: [0x1D91], NFKD: [0x1D91] }, +{ source: [0x1078E], NFC: [0x1078E], NFD: [0x1078E], NFKC: [0x0258], NFKD: [0x0258] }, +{ source: [0x1078F], NFC: [0x1078F], NFD: [0x1078F], NFKC: [0x025E], NFKD: [0x025E] }, +{ source: [0x10790], NFC: [0x10790], NFD: [0x10790], NFKC: [0x02A9], NFKD: [0x02A9] }, +{ source: [0x10791], NFC: [0x10791], NFD: [0x10791], NFKC: [0x0264], NFKD: [0x0264] }, +{ source: [0x10792], NFC: [0x10792], NFD: [0x10792], NFKC: [0x0262], NFKD: [0x0262] }, +{ source: [0x10793], NFC: [0x10793], NFD: [0x10793], NFKC: [0x0260], NFKD: [0x0260] }, +{ source: [0x10794], NFC: [0x10794], NFD: [0x10794], NFKC: [0x029B], NFKD: [0x029B] }, +{ source: [0x10795], NFC: [0x10795], NFD: [0x10795], NFKC: [0x0127], NFKD: [0x0127] }, +{ source: [0x10796], NFC: [0x10796], NFD: [0x10796], NFKC: [0x029C], NFKD: [0x029C] }, +{ source: [0x10797], NFC: [0x10797], NFD: [0x10797], NFKC: [0x0267], NFKD: [0x0267] }, +{ source: [0x10798], NFC: [0x10798], NFD: [0x10798], NFKC: [0x0284], NFKD: [0x0284] }, +{ source: [0x10799], NFC: [0x10799], NFD: [0x10799], NFKC: [0x02AA], NFKD: [0x02AA] }, +{ source: [0x1079A], NFC: [0x1079A], NFD: [0x1079A], NFKC: [0x02AB], NFKD: [0x02AB] }, +{ source: [0x1079B], NFC: [0x1079B], NFD: [0x1079B], NFKC: [0x026C], NFKD: [0x026C] }, +{ source: [0x1079C], NFC: [0x1079C], NFD: [0x1079C], NFKC: [0x1DF04], NFKD: [0x1DF04] }, +{ source: [0x1079D], NFC: [0x1079D], NFD: [0x1079D], NFKC: [0xA78E], NFKD: [0xA78E] }, +{ source: [0x1079E], NFC: [0x1079E], NFD: [0x1079E], NFKC: [0x026E], NFKD: [0x026E] }, +{ source: [0x1079F], NFC: [0x1079F], NFD: [0x1079F], NFKC: [0x1DF05], NFKD: [0x1DF05] }, +{ source: [0x107A0], NFC: [0x107A0], NFD: [0x107A0], NFKC: [0x028E], NFKD: [0x028E] }, +{ source: [0x107A1], NFC: [0x107A1], NFD: [0x107A1], NFKC: [0x1DF06], NFKD: [0x1DF06] }, +{ source: [0x107A2], NFC: [0x107A2], NFD: [0x107A2], NFKC: [0x00F8], NFKD: [0x00F8] }, +{ source: [0x107A3], NFC: [0x107A3], NFD: [0x107A3], NFKC: [0x0276], NFKD: [0x0276] }, +{ source: [0x107A4], NFC: [0x107A4], NFD: [0x107A4], NFKC: [0x0277], NFKD: [0x0277] }, +{ source: [0x107A5], NFC: [0x107A5], NFD: [0x107A5], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x107A6], NFC: [0x107A6], NFD: [0x107A6], NFKC: [0x027A], NFKD: [0x027A] }, +{ source: [0x107A7], NFC: [0x107A7], NFD: [0x107A7], NFKC: [0x1DF08], NFKD: [0x1DF08] }, +{ source: [0x107A8], NFC: [0x107A8], NFD: [0x107A8], NFKC: [0x027D], NFKD: [0x027D] }, +{ source: [0x107A9], NFC: [0x107A9], NFD: [0x107A9], NFKC: [0x027E], NFKD: [0x027E] }, +{ source: [0x107AA], NFC: [0x107AA], NFD: [0x107AA], NFKC: [0x0280], NFKD: [0x0280] }, +{ source: [0x107AB], NFC: [0x107AB], NFD: [0x107AB], NFKC: [0x02A8], NFKD: [0x02A8] }, +{ source: [0x107AC], NFC: [0x107AC], NFD: [0x107AC], NFKC: [0x02A6], NFKD: [0x02A6] }, +{ source: [0x107AD], NFC: [0x107AD], NFD: [0x107AD], NFKC: [0xAB67], NFKD: [0xAB67] }, +{ source: [0x107AE], NFC: [0x107AE], NFD: [0x107AE], NFKC: [0x02A7], NFKD: [0x02A7] }, +{ source: [0x107AF], NFC: [0x107AF], NFD: [0x107AF], NFKC: [0x0288], NFKD: [0x0288] }, +{ source: [0x107B0], NFC: [0x107B0], NFD: [0x107B0], NFKC: [0x2C71], NFKD: [0x2C71] }, +{ source: [0x107B2], NFC: [0x107B2], NFD: [0x107B2], NFKC: [0x028F], NFKD: [0x028F] }, +{ source: [0x107B3], NFC: [0x107B3], NFD: [0x107B3], NFKC: [0x02A1], NFKD: [0x02A1] }, +{ source: [0x107B4], NFC: [0x107B4], NFD: [0x107B4], NFKC: [0x02A2], NFKD: [0x02A2] }, +{ source: [0x107B5], NFC: [0x107B5], NFD: [0x107B5], NFKC: [0x0298], NFKD: [0x0298] }, +{ source: [0x107B6], NFC: [0x107B6], NFD: [0x107B6], NFKC: [0x01C0], NFKD: [0x01C0] }, +{ source: [0x107B7], NFC: [0x107B7], NFD: [0x107B7], NFKC: [0x01C1], NFKD: [0x01C1] }, +{ source: [0x107B8], NFC: [0x107B8], NFD: [0x107B8], NFKC: [0x01C2], NFKD: [0x01C2] }, +{ source: [0x107B9], NFC: [0x107B9], NFD: [0x107B9], NFKC: [0x1DF0A], NFKD: [0x1DF0A] }, +{ source: [0x107BA], NFC: [0x107BA], NFD: [0x107BA], NFKC: [0x1DF1E], NFKD: [0x1DF1E] }, +{ source: [0x1109A], NFC: [0x1109A], NFD: [0x11099, 0x110BA], NFKC: [0x1109A], NFKD: [0x11099, 0x110BA] }, +{ source: [0x1109C], NFC: [0x1109C], NFD: [0x1109B, 0x110BA], NFKC: [0x1109C], NFKD: [0x1109B, 0x110BA] }, +{ source: [0x110AB], NFC: [0x110AB], NFD: [0x110A5, 0x110BA], NFKC: [0x110AB], NFKD: [0x110A5, 0x110BA] }, +{ source: [0x1112E], NFC: [0x1112E], NFD: [0x11131, 0x11127], NFKC: [0x1112E], NFKD: [0x11131, 0x11127] }, +{ source: [0x1112F], NFC: [0x1112F], NFD: [0x11132, 0x11127], NFKC: [0x1112F], NFKD: [0x11132, 0x11127] }, +{ source: [0x1134B], NFC: [0x1134B], NFD: [0x11347, 0x1133E], NFKC: [0x1134B], NFKD: [0x11347, 0x1133E] }, +{ source: [0x1134C], NFC: [0x1134C], NFD: [0x11347, 0x11357], NFKC: [0x1134C], NFKD: [0x11347, 0x11357] }, +{ source: [0x114BB], NFC: [0x114BB], NFD: [0x114B9, 0x114BA], NFKC: [0x114BB], NFKD: [0x114B9, 0x114BA] }, +{ source: [0x114BC], NFC: [0x114BC], NFD: [0x114B9, 0x114B0], NFKC: [0x114BC], NFKD: [0x114B9, 0x114B0] }, +{ source: [0x114BE], NFC: [0x114BE], NFD: [0x114B9, 0x114BD], NFKC: [0x114BE], NFKD: [0x114B9, 0x114BD] }, +{ source: [0x115BA], NFC: [0x115BA], NFD: [0x115B8, 0x115AF], NFKC: [0x115BA], NFKD: [0x115B8, 0x115AF] }, +{ source: [0x115BB], NFC: [0x115BB], NFD: [0x115B9, 0x115AF], NFKC: [0x115BB], NFKD: [0x115B9, 0x115AF] }, +{ source: [0x11938], NFC: [0x11938], NFD: [0x11935, 0x11930], NFKC: [0x11938], NFKD: [0x11935, 0x11930] }, +{ source: [0x1D15E], NFC: [0x1D157, 0x1D165], NFD: [0x1D157, 0x1D165], NFKC: [0x1D157, 0x1D165], NFKD: [0x1D157, 0x1D165] }, +{ source: [0x1D15F], NFC: [0x1D158, 0x1D165], NFD: [0x1D158, 0x1D165], NFKC: [0x1D158, 0x1D165], NFKD: [0x1D158, 0x1D165] }, +{ source: [0x1D160], NFC: [0x1D158, 0x1D165, 0x1D16E], NFD: [0x1D158, 0x1D165, 0x1D16E], NFKC: [0x1D158, 0x1D165, 0x1D16E], NFKD: [0x1D158, 0x1D165, 0x1D16E] }, +{ source: [0x1D161], NFC: [0x1D158, 0x1D165, 0x1D16F], NFD: [0x1D158, 0x1D165, 0x1D16F], NFKC: [0x1D158, 0x1D165, 0x1D16F], NFKD: [0x1D158, 0x1D165, 0x1D16F] }, +{ source: [0x1D162], NFC: [0x1D158, 0x1D165, 0x1D170], NFD: [0x1D158, 0x1D165, 0x1D170], NFKC: [0x1D158, 0x1D165, 0x1D170], NFKD: [0x1D158, 0x1D165, 0x1D170] }, +{ source: [0x1D163], NFC: [0x1D158, 0x1D165, 0x1D171], NFD: [0x1D158, 0x1D165, 0x1D171], NFKC: [0x1D158, 0x1D165, 0x1D171], NFKD: [0x1D158, 0x1D165, 0x1D171] }, +{ source: [0x1D164], NFC: [0x1D158, 0x1D165, 0x1D172], NFD: [0x1D158, 0x1D165, 0x1D172], NFKC: [0x1D158, 0x1D165, 0x1D172], NFKD: [0x1D158, 0x1D165, 0x1D172] }, +{ source: [0x1D1BB], NFC: [0x1D1B9, 0x1D165], NFD: [0x1D1B9, 0x1D165], NFKC: [0x1D1B9, 0x1D165], NFKD: [0x1D1B9, 0x1D165] }, +{ source: [0x1D1BC], NFC: [0x1D1BA, 0x1D165], NFD: [0x1D1BA, 0x1D165], NFKC: [0x1D1BA, 0x1D165], NFKD: [0x1D1BA, 0x1D165] }, +{ source: [0x1D1BD], NFC: [0x1D1B9, 0x1D165, 0x1D16E], NFD: [0x1D1B9, 0x1D165, 0x1D16E], NFKC: [0x1D1B9, 0x1D165, 0x1D16E], NFKD: [0x1D1B9, 0x1D165, 0x1D16E] }, +{ source: [0x1D1BE], NFC: [0x1D1BA, 0x1D165, 0x1D16E], NFD: [0x1D1BA, 0x1D165, 0x1D16E], NFKC: [0x1D1BA, 0x1D165, 0x1D16E], NFKD: [0x1D1BA, 0x1D165, 0x1D16E] }, +{ source: [0x1D1BF], NFC: [0x1D1B9, 0x1D165, 0x1D16F], NFD: [0x1D1B9, 0x1D165, 0x1D16F], NFKC: [0x1D1B9, 0x1D165, 0x1D16F], NFKD: [0x1D1B9, 0x1D165, 0x1D16F] }, +{ source: [0x1D1C0], NFC: [0x1D1BA, 0x1D165, 0x1D16F], NFD: [0x1D1BA, 0x1D165, 0x1D16F], NFKC: [0x1D1BA, 0x1D165, 0x1D16F], NFKD: [0x1D1BA, 0x1D165, 0x1D16F] }, +{ source: [0x1D400], NFC: [0x1D400], NFD: [0x1D400], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D401], NFC: [0x1D401], NFD: [0x1D401], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D402], NFC: [0x1D402], NFD: [0x1D402], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D403], NFC: [0x1D403], NFD: [0x1D403], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D404], NFC: [0x1D404], NFD: [0x1D404], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D405], NFC: [0x1D405], NFD: [0x1D405], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D406], NFC: [0x1D406], NFD: [0x1D406], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D407], NFC: [0x1D407], NFD: [0x1D407], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D408], NFC: [0x1D408], NFD: [0x1D408], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D409], NFC: [0x1D409], NFD: [0x1D409], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D40A], NFC: [0x1D40A], NFD: [0x1D40A], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D40B], NFC: [0x1D40B], NFD: [0x1D40B], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D40C], NFC: [0x1D40C], NFD: [0x1D40C], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D40D], NFC: [0x1D40D], NFD: [0x1D40D], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D40E], NFC: [0x1D40E], NFD: [0x1D40E], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D40F], NFC: [0x1D40F], NFD: [0x1D40F], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D410], NFC: [0x1D410], NFD: [0x1D410], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D411], NFC: [0x1D411], NFD: [0x1D411], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D412], NFC: [0x1D412], NFD: [0x1D412], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D413], NFC: [0x1D413], NFD: [0x1D413], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D414], NFC: [0x1D414], NFD: [0x1D414], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D415], NFC: [0x1D415], NFD: [0x1D415], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D416], NFC: [0x1D416], NFD: [0x1D416], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D417], NFC: [0x1D417], NFD: [0x1D417], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D418], NFC: [0x1D418], NFD: [0x1D418], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D419], NFC: [0x1D419], NFD: [0x1D419], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D41A], NFC: [0x1D41A], NFD: [0x1D41A], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D41B], NFC: [0x1D41B], NFD: [0x1D41B], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D41C], NFC: [0x1D41C], NFD: [0x1D41C], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D41D], NFC: [0x1D41D], NFD: [0x1D41D], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D41E], NFC: [0x1D41E], NFD: [0x1D41E], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D41F], NFC: [0x1D41F], NFD: [0x1D41F], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D420], NFC: [0x1D420], NFD: [0x1D420], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D421], NFC: [0x1D421], NFD: [0x1D421], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D422], NFC: [0x1D422], NFD: [0x1D422], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D423], NFC: [0x1D423], NFD: [0x1D423], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D424], NFC: [0x1D424], NFD: [0x1D424], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D425], NFC: [0x1D425], NFD: [0x1D425], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D426], NFC: [0x1D426], NFD: [0x1D426], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D427], NFC: [0x1D427], NFD: [0x1D427], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D428], NFC: [0x1D428], NFD: [0x1D428], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D429], NFC: [0x1D429], NFD: [0x1D429], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D42A], NFC: [0x1D42A], NFD: [0x1D42A], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D42B], NFC: [0x1D42B], NFD: [0x1D42B], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D42C], NFC: [0x1D42C], NFD: [0x1D42C], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D42D], NFC: [0x1D42D], NFD: [0x1D42D], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D42E], NFC: [0x1D42E], NFD: [0x1D42E], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D42F], NFC: [0x1D42F], NFD: [0x1D42F], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D430], NFC: [0x1D430], NFD: [0x1D430], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D431], NFC: [0x1D431], NFD: [0x1D431], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D432], NFC: [0x1D432], NFD: [0x1D432], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D433], NFC: [0x1D433], NFD: [0x1D433], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D434], NFC: [0x1D434], NFD: [0x1D434], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D435], NFC: [0x1D435], NFD: [0x1D435], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D436], NFC: [0x1D436], NFD: [0x1D436], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D437], NFC: [0x1D437], NFD: [0x1D437], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D438], NFC: [0x1D438], NFD: [0x1D438], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D439], NFC: [0x1D439], NFD: [0x1D439], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D43A], NFC: [0x1D43A], NFD: [0x1D43A], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D43B], NFC: [0x1D43B], NFD: [0x1D43B], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D43C], NFC: [0x1D43C], NFD: [0x1D43C], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D43D], NFC: [0x1D43D], NFD: [0x1D43D], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D43E], NFC: [0x1D43E], NFD: [0x1D43E], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D43F], NFC: [0x1D43F], NFD: [0x1D43F], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D440], NFC: [0x1D440], NFD: [0x1D440], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D441], NFC: [0x1D441], NFD: [0x1D441], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D442], NFC: [0x1D442], NFD: [0x1D442], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D443], NFC: [0x1D443], NFD: [0x1D443], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D444], NFC: [0x1D444], NFD: [0x1D444], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D445], NFC: [0x1D445], NFD: [0x1D445], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D446], NFC: [0x1D446], NFD: [0x1D446], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D447], NFC: [0x1D447], NFD: [0x1D447], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D448], NFC: [0x1D448], NFD: [0x1D448], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D449], NFC: [0x1D449], NFD: [0x1D449], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D44A], NFC: [0x1D44A], NFD: [0x1D44A], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D44B], NFC: [0x1D44B], NFD: [0x1D44B], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D44C], NFC: [0x1D44C], NFD: [0x1D44C], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D44D], NFC: [0x1D44D], NFD: [0x1D44D], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D44E], NFC: [0x1D44E], NFD: [0x1D44E], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D44F], NFC: [0x1D44F], NFD: [0x1D44F], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D450], NFC: [0x1D450], NFD: [0x1D450], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D451], NFC: [0x1D451], NFD: [0x1D451], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D452], NFC: [0x1D452], NFD: [0x1D452], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D453], NFC: [0x1D453], NFD: [0x1D453], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D454], NFC: [0x1D454], NFD: [0x1D454], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D456], NFC: [0x1D456], NFD: [0x1D456], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D457], NFC: [0x1D457], NFD: [0x1D457], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D458], NFC: [0x1D458], NFD: [0x1D458], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D459], NFC: [0x1D459], NFD: [0x1D459], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D45A], NFC: [0x1D45A], NFD: [0x1D45A], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D45B], NFC: [0x1D45B], NFD: [0x1D45B], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D45C], NFC: [0x1D45C], NFD: [0x1D45C], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D45D], NFC: [0x1D45D], NFD: [0x1D45D], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D45E], NFC: [0x1D45E], NFD: [0x1D45E], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D45F], NFC: [0x1D45F], NFD: [0x1D45F], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D460], NFC: [0x1D460], NFD: [0x1D460], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D461], NFC: [0x1D461], NFD: [0x1D461], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D462], NFC: [0x1D462], NFD: [0x1D462], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D463], NFC: [0x1D463], NFD: [0x1D463], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D464], NFC: [0x1D464], NFD: [0x1D464], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D465], NFC: [0x1D465], NFD: [0x1D465], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D466], NFC: [0x1D466], NFD: [0x1D466], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D467], NFC: [0x1D467], NFD: [0x1D467], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D468], NFC: [0x1D468], NFD: [0x1D468], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D469], NFC: [0x1D469], NFD: [0x1D469], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D46A], NFC: [0x1D46A], NFD: [0x1D46A], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D46B], NFC: [0x1D46B], NFD: [0x1D46B], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D46C], NFC: [0x1D46C], NFD: [0x1D46C], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D46D], NFC: [0x1D46D], NFD: [0x1D46D], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D46E], NFC: [0x1D46E], NFD: [0x1D46E], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D46F], NFC: [0x1D46F], NFD: [0x1D46F], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D470], NFC: [0x1D470], NFD: [0x1D470], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D471], NFC: [0x1D471], NFD: [0x1D471], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D472], NFC: [0x1D472], NFD: [0x1D472], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D473], NFC: [0x1D473], NFD: [0x1D473], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D474], NFC: [0x1D474], NFD: [0x1D474], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D475], NFC: [0x1D475], NFD: [0x1D475], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D476], NFC: [0x1D476], NFD: [0x1D476], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D477], NFC: [0x1D477], NFD: [0x1D477], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D478], NFC: [0x1D478], NFD: [0x1D478], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D479], NFC: [0x1D479], NFD: [0x1D479], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D47A], NFC: [0x1D47A], NFD: [0x1D47A], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D47B], NFC: [0x1D47B], NFD: [0x1D47B], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D47C], NFC: [0x1D47C], NFD: [0x1D47C], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D47D], NFC: [0x1D47D], NFD: [0x1D47D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D47E], NFC: [0x1D47E], NFD: [0x1D47E], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D47F], NFC: [0x1D47F], NFD: [0x1D47F], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D480], NFC: [0x1D480], NFD: [0x1D480], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D481], NFC: [0x1D481], NFD: [0x1D481], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D482], NFC: [0x1D482], NFD: [0x1D482], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D483], NFC: [0x1D483], NFD: [0x1D483], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D484], NFC: [0x1D484], NFD: [0x1D484], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D485], NFC: [0x1D485], NFD: [0x1D485], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D486], NFC: [0x1D486], NFD: [0x1D486], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D487], NFC: [0x1D487], NFD: [0x1D487], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D488], NFC: [0x1D488], NFD: [0x1D488], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D489], NFC: [0x1D489], NFD: [0x1D489], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D48A], NFC: [0x1D48A], NFD: [0x1D48A], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D48B], NFC: [0x1D48B], NFD: [0x1D48B], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D48C], NFC: [0x1D48C], NFD: [0x1D48C], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D48D], NFC: [0x1D48D], NFD: [0x1D48D], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D48E], NFC: [0x1D48E], NFD: [0x1D48E], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D48F], NFC: [0x1D48F], NFD: [0x1D48F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D490], NFC: [0x1D490], NFD: [0x1D490], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D491], NFC: [0x1D491], NFD: [0x1D491], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D492], NFC: [0x1D492], NFD: [0x1D492], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D493], NFC: [0x1D493], NFD: [0x1D493], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D494], NFC: [0x1D494], NFD: [0x1D494], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D495], NFC: [0x1D495], NFD: [0x1D495], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D496], NFC: [0x1D496], NFD: [0x1D496], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D497], NFC: [0x1D497], NFD: [0x1D497], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D498], NFC: [0x1D498], NFD: [0x1D498], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D499], NFC: [0x1D499], NFD: [0x1D499], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D49A], NFC: [0x1D49A], NFD: [0x1D49A], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D49B], NFC: [0x1D49B], NFD: [0x1D49B], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D49C], NFC: [0x1D49C], NFD: [0x1D49C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D49E], NFC: [0x1D49E], NFD: [0x1D49E], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D49F], NFC: [0x1D49F], NFD: [0x1D49F], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D4A2], NFC: [0x1D4A2], NFD: [0x1D4A2], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D4A5], NFC: [0x1D4A5], NFD: [0x1D4A5], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D4A6], NFC: [0x1D4A6], NFD: [0x1D4A6], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D4A9], NFC: [0x1D4A9], NFD: [0x1D4A9], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D4AA], NFC: [0x1D4AA], NFD: [0x1D4AA], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D4AB], NFC: [0x1D4AB], NFD: [0x1D4AB], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D4AC], NFC: [0x1D4AC], NFD: [0x1D4AC], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D4AE], NFC: [0x1D4AE], NFD: [0x1D4AE], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D4AF], NFC: [0x1D4AF], NFD: [0x1D4AF], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D4B0], NFC: [0x1D4B0], NFD: [0x1D4B0], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D4B1], NFC: [0x1D4B1], NFD: [0x1D4B1], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D4B2], NFC: [0x1D4B2], NFD: [0x1D4B2], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D4B3], NFC: [0x1D4B3], NFD: [0x1D4B3], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D4B4], NFC: [0x1D4B4], NFD: [0x1D4B4], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D4B5], NFC: [0x1D4B5], NFD: [0x1D4B5], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D4B6], NFC: [0x1D4B6], NFD: [0x1D4B6], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D4B7], NFC: [0x1D4B7], NFD: [0x1D4B7], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D4B8], NFC: [0x1D4B8], NFD: [0x1D4B8], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D4B9], NFC: [0x1D4B9], NFD: [0x1D4B9], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D4BB], NFC: [0x1D4BB], NFD: [0x1D4BB], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D4BD], NFC: [0x1D4BD], NFD: [0x1D4BD], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D4BE], NFC: [0x1D4BE], NFD: [0x1D4BE], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D4BF], NFC: [0x1D4BF], NFD: [0x1D4BF], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D4C0], NFC: [0x1D4C0], NFD: [0x1D4C0], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D4C1], NFC: [0x1D4C1], NFD: [0x1D4C1], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D4C2], NFC: [0x1D4C2], NFD: [0x1D4C2], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D4C3], NFC: [0x1D4C3], NFD: [0x1D4C3], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D4C5], NFC: [0x1D4C5], NFD: [0x1D4C5], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D4C6], NFC: [0x1D4C6], NFD: [0x1D4C6], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D4C7], NFC: [0x1D4C7], NFD: [0x1D4C7], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D4C8], NFC: [0x1D4C8], NFD: [0x1D4C8], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D4C9], NFC: [0x1D4C9], NFD: [0x1D4C9], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D4CA], NFC: [0x1D4CA], NFD: [0x1D4CA], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D4CB], NFC: [0x1D4CB], NFD: [0x1D4CB], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D4CC], NFC: [0x1D4CC], NFD: [0x1D4CC], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D4CD], NFC: [0x1D4CD], NFD: [0x1D4CD], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D4CE], NFC: [0x1D4CE], NFD: [0x1D4CE], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D4CF], NFC: [0x1D4CF], NFD: [0x1D4CF], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D4D0], NFC: [0x1D4D0], NFD: [0x1D4D0], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D4D1], NFC: [0x1D4D1], NFD: [0x1D4D1], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D4D2], NFC: [0x1D4D2], NFD: [0x1D4D2], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D4D3], NFC: [0x1D4D3], NFD: [0x1D4D3], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D4D4], NFC: [0x1D4D4], NFD: [0x1D4D4], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D4D5], NFC: [0x1D4D5], NFD: [0x1D4D5], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D4D6], NFC: [0x1D4D6], NFD: [0x1D4D6], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D4D7], NFC: [0x1D4D7], NFD: [0x1D4D7], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D4D8], NFC: [0x1D4D8], NFD: [0x1D4D8], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D4D9], NFC: [0x1D4D9], NFD: [0x1D4D9], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D4DA], NFC: [0x1D4DA], NFD: [0x1D4DA], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D4DB], NFC: [0x1D4DB], NFD: [0x1D4DB], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D4DC], NFC: [0x1D4DC], NFD: [0x1D4DC], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D4DD], NFC: [0x1D4DD], NFD: [0x1D4DD], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D4DE], NFC: [0x1D4DE], NFD: [0x1D4DE], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D4DF], NFC: [0x1D4DF], NFD: [0x1D4DF], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D4E0], NFC: [0x1D4E0], NFD: [0x1D4E0], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D4E1], NFC: [0x1D4E1], NFD: [0x1D4E1], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D4E2], NFC: [0x1D4E2], NFD: [0x1D4E2], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D4E3], NFC: [0x1D4E3], NFD: [0x1D4E3], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D4E4], NFC: [0x1D4E4], NFD: [0x1D4E4], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D4E5], NFC: [0x1D4E5], NFD: [0x1D4E5], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D4E6], NFC: [0x1D4E6], NFD: [0x1D4E6], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D4E7], NFC: [0x1D4E7], NFD: [0x1D4E7], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D4E8], NFC: [0x1D4E8], NFD: [0x1D4E8], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D4E9], NFC: [0x1D4E9], NFD: [0x1D4E9], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D4EA], NFC: [0x1D4EA], NFD: [0x1D4EA], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D4EB], NFC: [0x1D4EB], NFD: [0x1D4EB], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D4EC], NFC: [0x1D4EC], NFD: [0x1D4EC], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D4ED], NFC: [0x1D4ED], NFD: [0x1D4ED], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D4EE], NFC: [0x1D4EE], NFD: [0x1D4EE], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D4EF], NFC: [0x1D4EF], NFD: [0x1D4EF], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D4F0], NFC: [0x1D4F0], NFD: [0x1D4F0], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D4F1], NFC: [0x1D4F1], NFD: [0x1D4F1], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D4F2], NFC: [0x1D4F2], NFD: [0x1D4F2], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D4F3], NFC: [0x1D4F3], NFD: [0x1D4F3], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D4F4], NFC: [0x1D4F4], NFD: [0x1D4F4], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D4F5], NFC: [0x1D4F5], NFD: [0x1D4F5], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D4F6], NFC: [0x1D4F6], NFD: [0x1D4F6], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D4F7], NFC: [0x1D4F7], NFD: [0x1D4F7], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D4F8], NFC: [0x1D4F8], NFD: [0x1D4F8], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D4F9], NFC: [0x1D4F9], NFD: [0x1D4F9], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D4FA], NFC: [0x1D4FA], NFD: [0x1D4FA], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D4FB], NFC: [0x1D4FB], NFD: [0x1D4FB], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D4FC], NFC: [0x1D4FC], NFD: [0x1D4FC], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D4FD], NFC: [0x1D4FD], NFD: [0x1D4FD], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D4FE], NFC: [0x1D4FE], NFD: [0x1D4FE], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D4FF], NFC: [0x1D4FF], NFD: [0x1D4FF], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D500], NFC: [0x1D500], NFD: [0x1D500], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D501], NFC: [0x1D501], NFD: [0x1D501], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D502], NFC: [0x1D502], NFD: [0x1D502], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D503], NFC: [0x1D503], NFD: [0x1D503], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D504], NFC: [0x1D504], NFD: [0x1D504], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D505], NFC: [0x1D505], NFD: [0x1D505], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D507], NFC: [0x1D507], NFD: [0x1D507], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D508], NFC: [0x1D508], NFD: [0x1D508], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D509], NFC: [0x1D509], NFD: [0x1D509], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D50A], NFC: [0x1D50A], NFD: [0x1D50A], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D50D], NFC: [0x1D50D], NFD: [0x1D50D], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D50E], NFC: [0x1D50E], NFD: [0x1D50E], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D50F], NFC: [0x1D50F], NFD: [0x1D50F], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D510], NFC: [0x1D510], NFD: [0x1D510], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D511], NFC: [0x1D511], NFD: [0x1D511], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D512], NFC: [0x1D512], NFD: [0x1D512], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D513], NFC: [0x1D513], NFD: [0x1D513], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D514], NFC: [0x1D514], NFD: [0x1D514], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D516], NFC: [0x1D516], NFD: [0x1D516], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D517], NFC: [0x1D517], NFD: [0x1D517], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D518], NFC: [0x1D518], NFD: [0x1D518], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D519], NFC: [0x1D519], NFD: [0x1D519], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D51A], NFC: [0x1D51A], NFD: [0x1D51A], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D51B], NFC: [0x1D51B], NFD: [0x1D51B], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D51C], NFC: [0x1D51C], NFD: [0x1D51C], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D51E], NFC: [0x1D51E], NFD: [0x1D51E], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D51F], NFC: [0x1D51F], NFD: [0x1D51F], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D520], NFC: [0x1D520], NFD: [0x1D520], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D521], NFC: [0x1D521], NFD: [0x1D521], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D522], NFC: [0x1D522], NFD: [0x1D522], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D523], NFC: [0x1D523], NFD: [0x1D523], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D524], NFC: [0x1D524], NFD: [0x1D524], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D525], NFC: [0x1D525], NFD: [0x1D525], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D526], NFC: [0x1D526], NFD: [0x1D526], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D527], NFC: [0x1D527], NFD: [0x1D527], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D528], NFC: [0x1D528], NFD: [0x1D528], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D529], NFC: [0x1D529], NFD: [0x1D529], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D52A], NFC: [0x1D52A], NFD: [0x1D52A], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D52B], NFC: [0x1D52B], NFD: [0x1D52B], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D52C], NFC: [0x1D52C], NFD: [0x1D52C], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D52D], NFC: [0x1D52D], NFD: [0x1D52D], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D52E], NFC: [0x1D52E], NFD: [0x1D52E], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D52F], NFC: [0x1D52F], NFD: [0x1D52F], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D530], NFC: [0x1D530], NFD: [0x1D530], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D531], NFC: [0x1D531], NFD: [0x1D531], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D532], NFC: [0x1D532], NFD: [0x1D532], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D533], NFC: [0x1D533], NFD: [0x1D533], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D534], NFC: [0x1D534], NFD: [0x1D534], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D535], NFC: [0x1D535], NFD: [0x1D535], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D536], NFC: [0x1D536], NFD: [0x1D536], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D537], NFC: [0x1D537], NFD: [0x1D537], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D538], NFC: [0x1D538], NFD: [0x1D538], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D539], NFC: [0x1D539], NFD: [0x1D539], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D53B], NFC: [0x1D53B], NFD: [0x1D53B], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D53C], NFC: [0x1D53C], NFD: [0x1D53C], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D53D], NFC: [0x1D53D], NFD: [0x1D53D], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D53E], NFC: [0x1D53E], NFD: [0x1D53E], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D540], NFC: [0x1D540], NFD: [0x1D540], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D541], NFC: [0x1D541], NFD: [0x1D541], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D542], NFC: [0x1D542], NFD: [0x1D542], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D543], NFC: [0x1D543], NFD: [0x1D543], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D544], NFC: [0x1D544], NFD: [0x1D544], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D546], NFC: [0x1D546], NFD: [0x1D546], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D54A], NFC: [0x1D54A], NFD: [0x1D54A], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D54B], NFC: [0x1D54B], NFD: [0x1D54B], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D54C], NFC: [0x1D54C], NFD: [0x1D54C], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D54D], NFC: [0x1D54D], NFD: [0x1D54D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D54E], NFC: [0x1D54E], NFD: [0x1D54E], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D54F], NFC: [0x1D54F], NFD: [0x1D54F], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D550], NFC: [0x1D550], NFD: [0x1D550], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D552], NFC: [0x1D552], NFD: [0x1D552], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D553], NFC: [0x1D553], NFD: [0x1D553], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D554], NFC: [0x1D554], NFD: [0x1D554], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D555], NFC: [0x1D555], NFD: [0x1D555], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D556], NFC: [0x1D556], NFD: [0x1D556], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D557], NFC: [0x1D557], NFD: [0x1D557], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D558], NFC: [0x1D558], NFD: [0x1D558], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D559], NFC: [0x1D559], NFD: [0x1D559], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D55A], NFC: [0x1D55A], NFD: [0x1D55A], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D55B], NFC: [0x1D55B], NFD: [0x1D55B], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D55C], NFC: [0x1D55C], NFD: [0x1D55C], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D55D], NFC: [0x1D55D], NFD: [0x1D55D], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D55E], NFC: [0x1D55E], NFD: [0x1D55E], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D55F], NFC: [0x1D55F], NFD: [0x1D55F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D560], NFC: [0x1D560], NFD: [0x1D560], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D561], NFC: [0x1D561], NFD: [0x1D561], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D562], NFC: [0x1D562], NFD: [0x1D562], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D563], NFC: [0x1D563], NFD: [0x1D563], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D564], NFC: [0x1D564], NFD: [0x1D564], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D565], NFC: [0x1D565], NFD: [0x1D565], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D566], NFC: [0x1D566], NFD: [0x1D566], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D567], NFC: [0x1D567], NFD: [0x1D567], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D568], NFC: [0x1D568], NFD: [0x1D568], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D569], NFC: [0x1D569], NFD: [0x1D569], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D56A], NFC: [0x1D56A], NFD: [0x1D56A], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D56B], NFC: [0x1D56B], NFD: [0x1D56B], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D56C], NFC: [0x1D56C], NFD: [0x1D56C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D56D], NFC: [0x1D56D], NFD: [0x1D56D], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D56E], NFC: [0x1D56E], NFD: [0x1D56E], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D56F], NFC: [0x1D56F], NFD: [0x1D56F], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D570], NFC: [0x1D570], NFD: [0x1D570], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D571], NFC: [0x1D571], NFD: [0x1D571], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D572], NFC: [0x1D572], NFD: [0x1D572], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D573], NFC: [0x1D573], NFD: [0x1D573], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D574], NFC: [0x1D574], NFD: [0x1D574], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D575], NFC: [0x1D575], NFD: [0x1D575], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D576], NFC: [0x1D576], NFD: [0x1D576], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D577], NFC: [0x1D577], NFD: [0x1D577], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D578], NFC: [0x1D578], NFD: [0x1D578], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D579], NFC: [0x1D579], NFD: [0x1D579], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D57A], NFC: [0x1D57A], NFD: [0x1D57A], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D57B], NFC: [0x1D57B], NFD: [0x1D57B], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D57C], NFC: [0x1D57C], NFD: [0x1D57C], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D57D], NFC: [0x1D57D], NFD: [0x1D57D], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D57E], NFC: [0x1D57E], NFD: [0x1D57E], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D57F], NFC: [0x1D57F], NFD: [0x1D57F], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D580], NFC: [0x1D580], NFD: [0x1D580], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D581], NFC: [0x1D581], NFD: [0x1D581], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D582], NFC: [0x1D582], NFD: [0x1D582], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D583], NFC: [0x1D583], NFD: [0x1D583], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D584], NFC: [0x1D584], NFD: [0x1D584], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D585], NFC: [0x1D585], NFD: [0x1D585], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D586], NFC: [0x1D586], NFD: [0x1D586], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D587], NFC: [0x1D587], NFD: [0x1D587], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D588], NFC: [0x1D588], NFD: [0x1D588], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D589], NFC: [0x1D589], NFD: [0x1D589], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D58A], NFC: [0x1D58A], NFD: [0x1D58A], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D58B], NFC: [0x1D58B], NFD: [0x1D58B], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D58C], NFC: [0x1D58C], NFD: [0x1D58C], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D58D], NFC: [0x1D58D], NFD: [0x1D58D], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D58E], NFC: [0x1D58E], NFD: [0x1D58E], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D58F], NFC: [0x1D58F], NFD: [0x1D58F], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D590], NFC: [0x1D590], NFD: [0x1D590], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D591], NFC: [0x1D591], NFD: [0x1D591], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D592], NFC: [0x1D592], NFD: [0x1D592], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D593], NFC: [0x1D593], NFD: [0x1D593], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D594], NFC: [0x1D594], NFD: [0x1D594], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D595], NFC: [0x1D595], NFD: [0x1D595], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D596], NFC: [0x1D596], NFD: [0x1D596], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D597], NFC: [0x1D597], NFD: [0x1D597], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D598], NFC: [0x1D598], NFD: [0x1D598], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D599], NFC: [0x1D599], NFD: [0x1D599], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D59A], NFC: [0x1D59A], NFD: [0x1D59A], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D59B], NFC: [0x1D59B], NFD: [0x1D59B], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D59C], NFC: [0x1D59C], NFD: [0x1D59C], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D59D], NFC: [0x1D59D], NFD: [0x1D59D], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D59E], NFC: [0x1D59E], NFD: [0x1D59E], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D59F], NFC: [0x1D59F], NFD: [0x1D59F], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D5A0], NFC: [0x1D5A0], NFD: [0x1D5A0], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D5A1], NFC: [0x1D5A1], NFD: [0x1D5A1], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D5A2], NFC: [0x1D5A2], NFD: [0x1D5A2], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D5A3], NFC: [0x1D5A3], NFD: [0x1D5A3], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D5A4], NFC: [0x1D5A4], NFD: [0x1D5A4], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D5A5], NFC: [0x1D5A5], NFD: [0x1D5A5], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D5A6], NFC: [0x1D5A6], NFD: [0x1D5A6], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D5A7], NFC: [0x1D5A7], NFD: [0x1D5A7], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D5A8], NFC: [0x1D5A8], NFD: [0x1D5A8], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D5A9], NFC: [0x1D5A9], NFD: [0x1D5A9], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D5AA], NFC: [0x1D5AA], NFD: [0x1D5AA], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D5AB], NFC: [0x1D5AB], NFD: [0x1D5AB], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D5AC], NFC: [0x1D5AC], NFD: [0x1D5AC], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D5AD], NFC: [0x1D5AD], NFD: [0x1D5AD], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D5AE], NFC: [0x1D5AE], NFD: [0x1D5AE], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D5AF], NFC: [0x1D5AF], NFD: [0x1D5AF], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D5B0], NFC: [0x1D5B0], NFD: [0x1D5B0], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D5B1], NFC: [0x1D5B1], NFD: [0x1D5B1], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D5B2], NFC: [0x1D5B2], NFD: [0x1D5B2], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D5B3], NFC: [0x1D5B3], NFD: [0x1D5B3], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D5B4], NFC: [0x1D5B4], NFD: [0x1D5B4], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D5B5], NFC: [0x1D5B5], NFD: [0x1D5B5], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D5B6], NFC: [0x1D5B6], NFD: [0x1D5B6], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D5B7], NFC: [0x1D5B7], NFD: [0x1D5B7], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D5B8], NFC: [0x1D5B8], NFD: [0x1D5B8], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D5B9], NFC: [0x1D5B9], NFD: [0x1D5B9], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D5BA], NFC: [0x1D5BA], NFD: [0x1D5BA], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D5BB], NFC: [0x1D5BB], NFD: [0x1D5BB], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D5BC], NFC: [0x1D5BC], NFD: [0x1D5BC], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D5BD], NFC: [0x1D5BD], NFD: [0x1D5BD], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D5BE], NFC: [0x1D5BE], NFD: [0x1D5BE], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D5BF], NFC: [0x1D5BF], NFD: [0x1D5BF], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D5C0], NFC: [0x1D5C0], NFD: [0x1D5C0], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D5C1], NFC: [0x1D5C1], NFD: [0x1D5C1], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D5C2], NFC: [0x1D5C2], NFD: [0x1D5C2], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D5C3], NFC: [0x1D5C3], NFD: [0x1D5C3], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D5C4], NFC: [0x1D5C4], NFD: [0x1D5C4], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D5C5], NFC: [0x1D5C5], NFD: [0x1D5C5], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D5C6], NFC: [0x1D5C6], NFD: [0x1D5C6], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D5C7], NFC: [0x1D5C7], NFD: [0x1D5C7], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D5C8], NFC: [0x1D5C8], NFD: [0x1D5C8], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D5C9], NFC: [0x1D5C9], NFD: [0x1D5C9], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D5CA], NFC: [0x1D5CA], NFD: [0x1D5CA], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D5CB], NFC: [0x1D5CB], NFD: [0x1D5CB], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D5CC], NFC: [0x1D5CC], NFD: [0x1D5CC], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D5CD], NFC: [0x1D5CD], NFD: [0x1D5CD], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D5CE], NFC: [0x1D5CE], NFD: [0x1D5CE], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D5CF], NFC: [0x1D5CF], NFD: [0x1D5CF], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D5D0], NFC: [0x1D5D0], NFD: [0x1D5D0], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D5D1], NFC: [0x1D5D1], NFD: [0x1D5D1], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D5D2], NFC: [0x1D5D2], NFD: [0x1D5D2], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D5D3], NFC: [0x1D5D3], NFD: [0x1D5D3], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D5D4], NFC: [0x1D5D4], NFD: [0x1D5D4], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D5D5], NFC: [0x1D5D5], NFD: [0x1D5D5], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D5D6], NFC: [0x1D5D6], NFD: [0x1D5D6], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D5D7], NFC: [0x1D5D7], NFD: [0x1D5D7], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D5D8], NFC: [0x1D5D8], NFD: [0x1D5D8], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D5D9], NFC: [0x1D5D9], NFD: [0x1D5D9], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D5DA], NFC: [0x1D5DA], NFD: [0x1D5DA], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D5DB], NFC: [0x1D5DB], NFD: [0x1D5DB], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D5DC], NFC: [0x1D5DC], NFD: [0x1D5DC], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D5DD], NFC: [0x1D5DD], NFD: [0x1D5DD], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D5DE], NFC: [0x1D5DE], NFD: [0x1D5DE], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D5DF], NFC: [0x1D5DF], NFD: [0x1D5DF], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D5E0], NFC: [0x1D5E0], NFD: [0x1D5E0], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D5E1], NFC: [0x1D5E1], NFD: [0x1D5E1], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D5E2], NFC: [0x1D5E2], NFD: [0x1D5E2], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D5E3], NFC: [0x1D5E3], NFD: [0x1D5E3], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D5E4], NFC: [0x1D5E4], NFD: [0x1D5E4], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D5E5], NFC: [0x1D5E5], NFD: [0x1D5E5], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D5E6], NFC: [0x1D5E6], NFD: [0x1D5E6], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D5E7], NFC: [0x1D5E7], NFD: [0x1D5E7], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D5E8], NFC: [0x1D5E8], NFD: [0x1D5E8], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D5E9], NFC: [0x1D5E9], NFD: [0x1D5E9], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D5EA], NFC: [0x1D5EA], NFD: [0x1D5EA], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D5EB], NFC: [0x1D5EB], NFD: [0x1D5EB], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D5EC], NFC: [0x1D5EC], NFD: [0x1D5EC], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D5ED], NFC: [0x1D5ED], NFD: [0x1D5ED], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D5EE], NFC: [0x1D5EE], NFD: [0x1D5EE], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D5EF], NFC: [0x1D5EF], NFD: [0x1D5EF], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D5F0], NFC: [0x1D5F0], NFD: [0x1D5F0], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D5F1], NFC: [0x1D5F1], NFD: [0x1D5F1], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D5F2], NFC: [0x1D5F2], NFD: [0x1D5F2], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D5F3], NFC: [0x1D5F3], NFD: [0x1D5F3], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D5F4], NFC: [0x1D5F4], NFD: [0x1D5F4], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D5F5], NFC: [0x1D5F5], NFD: [0x1D5F5], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D5F6], NFC: [0x1D5F6], NFD: [0x1D5F6], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D5F7], NFC: [0x1D5F7], NFD: [0x1D5F7], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D5F8], NFC: [0x1D5F8], NFD: [0x1D5F8], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D5F9], NFC: [0x1D5F9], NFD: [0x1D5F9], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D5FA], NFC: [0x1D5FA], NFD: [0x1D5FA], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D5FB], NFC: [0x1D5FB], NFD: [0x1D5FB], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D5FC], NFC: [0x1D5FC], NFD: [0x1D5FC], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D5FD], NFC: [0x1D5FD], NFD: [0x1D5FD], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D5FE], NFC: [0x1D5FE], NFD: [0x1D5FE], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D5FF], NFC: [0x1D5FF], NFD: [0x1D5FF], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D600], NFC: [0x1D600], NFD: [0x1D600], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D601], NFC: [0x1D601], NFD: [0x1D601], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D602], NFC: [0x1D602], NFD: [0x1D602], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D603], NFC: [0x1D603], NFD: [0x1D603], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D604], NFC: [0x1D604], NFD: [0x1D604], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D605], NFC: [0x1D605], NFD: [0x1D605], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D606], NFC: [0x1D606], NFD: [0x1D606], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D607], NFC: [0x1D607], NFD: [0x1D607], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D608], NFC: [0x1D608], NFD: [0x1D608], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D609], NFC: [0x1D609], NFD: [0x1D609], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D60A], NFC: [0x1D60A], NFD: [0x1D60A], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D60B], NFC: [0x1D60B], NFD: [0x1D60B], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D60C], NFC: [0x1D60C], NFD: [0x1D60C], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D60D], NFC: [0x1D60D], NFD: [0x1D60D], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D60E], NFC: [0x1D60E], NFD: [0x1D60E], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D60F], NFC: [0x1D60F], NFD: [0x1D60F], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D610], NFC: [0x1D610], NFD: [0x1D610], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D611], NFC: [0x1D611], NFD: [0x1D611], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D612], NFC: [0x1D612], NFD: [0x1D612], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D613], NFC: [0x1D613], NFD: [0x1D613], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D614], NFC: [0x1D614], NFD: [0x1D614], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D615], NFC: [0x1D615], NFD: [0x1D615], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D616], NFC: [0x1D616], NFD: [0x1D616], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D617], NFC: [0x1D617], NFD: [0x1D617], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D618], NFC: [0x1D618], NFD: [0x1D618], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D619], NFC: [0x1D619], NFD: [0x1D619], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D61A], NFC: [0x1D61A], NFD: [0x1D61A], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D61B], NFC: [0x1D61B], NFD: [0x1D61B], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D61C], NFC: [0x1D61C], NFD: [0x1D61C], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D61D], NFC: [0x1D61D], NFD: [0x1D61D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D61E], NFC: [0x1D61E], NFD: [0x1D61E], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D61F], NFC: [0x1D61F], NFD: [0x1D61F], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D620], NFC: [0x1D620], NFD: [0x1D620], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D621], NFC: [0x1D621], NFD: [0x1D621], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D622], NFC: [0x1D622], NFD: [0x1D622], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D623], NFC: [0x1D623], NFD: [0x1D623], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D624], NFC: [0x1D624], NFD: [0x1D624], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D625], NFC: [0x1D625], NFD: [0x1D625], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D626], NFC: [0x1D626], NFD: [0x1D626], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D627], NFC: [0x1D627], NFD: [0x1D627], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D628], NFC: [0x1D628], NFD: [0x1D628], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D629], NFC: [0x1D629], NFD: [0x1D629], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D62A], NFC: [0x1D62A], NFD: [0x1D62A], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D62B], NFC: [0x1D62B], NFD: [0x1D62B], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D62C], NFC: [0x1D62C], NFD: [0x1D62C], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D62D], NFC: [0x1D62D], NFD: [0x1D62D], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D62E], NFC: [0x1D62E], NFD: [0x1D62E], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D62F], NFC: [0x1D62F], NFD: [0x1D62F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D630], NFC: [0x1D630], NFD: [0x1D630], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D631], NFC: [0x1D631], NFD: [0x1D631], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D632], NFC: [0x1D632], NFD: [0x1D632], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D633], NFC: [0x1D633], NFD: [0x1D633], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D634], NFC: [0x1D634], NFD: [0x1D634], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D635], NFC: [0x1D635], NFD: [0x1D635], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D636], NFC: [0x1D636], NFD: [0x1D636], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D637], NFC: [0x1D637], NFD: [0x1D637], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D638], NFC: [0x1D638], NFD: [0x1D638], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D639], NFC: [0x1D639], NFD: [0x1D639], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D63A], NFC: [0x1D63A], NFD: [0x1D63A], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D63B], NFC: [0x1D63B], NFD: [0x1D63B], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D63C], NFC: [0x1D63C], NFD: [0x1D63C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D63D], NFC: [0x1D63D], NFD: [0x1D63D], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D63E], NFC: [0x1D63E], NFD: [0x1D63E], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D63F], NFC: [0x1D63F], NFD: [0x1D63F], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D640], NFC: [0x1D640], NFD: [0x1D640], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D641], NFC: [0x1D641], NFD: [0x1D641], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D642], NFC: [0x1D642], NFD: [0x1D642], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D643], NFC: [0x1D643], NFD: [0x1D643], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D644], NFC: [0x1D644], NFD: [0x1D644], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D645], NFC: [0x1D645], NFD: [0x1D645], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D646], NFC: [0x1D646], NFD: [0x1D646], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D647], NFC: [0x1D647], NFD: [0x1D647], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D648], NFC: [0x1D648], NFD: [0x1D648], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D649], NFC: [0x1D649], NFD: [0x1D649], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D64A], NFC: [0x1D64A], NFD: [0x1D64A], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D64B], NFC: [0x1D64B], NFD: [0x1D64B], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D64C], NFC: [0x1D64C], NFD: [0x1D64C], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D64D], NFC: [0x1D64D], NFD: [0x1D64D], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D64E], NFC: [0x1D64E], NFD: [0x1D64E], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D64F], NFC: [0x1D64F], NFD: [0x1D64F], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D650], NFC: [0x1D650], NFD: [0x1D650], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D651], NFC: [0x1D651], NFD: [0x1D651], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D652], NFC: [0x1D652], NFD: [0x1D652], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D653], NFC: [0x1D653], NFD: [0x1D653], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D654], NFC: [0x1D654], NFD: [0x1D654], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D655], NFC: [0x1D655], NFD: [0x1D655], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D656], NFC: [0x1D656], NFD: [0x1D656], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D657], NFC: [0x1D657], NFD: [0x1D657], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D658], NFC: [0x1D658], NFD: [0x1D658], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D659], NFC: [0x1D659], NFD: [0x1D659], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D65A], NFC: [0x1D65A], NFD: [0x1D65A], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D65B], NFC: [0x1D65B], NFD: [0x1D65B], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D65C], NFC: [0x1D65C], NFD: [0x1D65C], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D65D], NFC: [0x1D65D], NFD: [0x1D65D], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D65E], NFC: [0x1D65E], NFD: [0x1D65E], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D65F], NFC: [0x1D65F], NFD: [0x1D65F], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D660], NFC: [0x1D660], NFD: [0x1D660], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D661], NFC: [0x1D661], NFD: [0x1D661], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D662], NFC: [0x1D662], NFD: [0x1D662], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D663], NFC: [0x1D663], NFD: [0x1D663], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D664], NFC: [0x1D664], NFD: [0x1D664], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D665], NFC: [0x1D665], NFD: [0x1D665], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D666], NFC: [0x1D666], NFD: [0x1D666], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D667], NFC: [0x1D667], NFD: [0x1D667], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D668], NFC: [0x1D668], NFD: [0x1D668], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D669], NFC: [0x1D669], NFD: [0x1D669], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D66A], NFC: [0x1D66A], NFD: [0x1D66A], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D66B], NFC: [0x1D66B], NFD: [0x1D66B], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D66C], NFC: [0x1D66C], NFD: [0x1D66C], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D66D], NFC: [0x1D66D], NFD: [0x1D66D], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D66E], NFC: [0x1D66E], NFD: [0x1D66E], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D66F], NFC: [0x1D66F], NFD: [0x1D66F], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D670], NFC: [0x1D670], NFD: [0x1D670], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D671], NFC: [0x1D671], NFD: [0x1D671], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D672], NFC: [0x1D672], NFD: [0x1D672], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D673], NFC: [0x1D673], NFD: [0x1D673], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D674], NFC: [0x1D674], NFD: [0x1D674], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D675], NFC: [0x1D675], NFD: [0x1D675], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D676], NFC: [0x1D676], NFD: [0x1D676], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D677], NFC: [0x1D677], NFD: [0x1D677], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D678], NFC: [0x1D678], NFD: [0x1D678], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D679], NFC: [0x1D679], NFD: [0x1D679], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D67A], NFC: [0x1D67A], NFD: [0x1D67A], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D67B], NFC: [0x1D67B], NFD: [0x1D67B], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D67C], NFC: [0x1D67C], NFD: [0x1D67C], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D67D], NFC: [0x1D67D], NFD: [0x1D67D], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D67E], NFC: [0x1D67E], NFD: [0x1D67E], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D67F], NFC: [0x1D67F], NFD: [0x1D67F], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D680], NFC: [0x1D680], NFD: [0x1D680], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D681], NFC: [0x1D681], NFD: [0x1D681], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D682], NFC: [0x1D682], NFD: [0x1D682], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D683], NFC: [0x1D683], NFD: [0x1D683], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D684], NFC: [0x1D684], NFD: [0x1D684], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D685], NFC: [0x1D685], NFD: [0x1D685], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D686], NFC: [0x1D686], NFD: [0x1D686], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D687], NFC: [0x1D687], NFD: [0x1D687], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D688], NFC: [0x1D688], NFD: [0x1D688], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D689], NFC: [0x1D689], NFD: [0x1D689], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D68A], NFC: [0x1D68A], NFD: [0x1D68A], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D68B], NFC: [0x1D68B], NFD: [0x1D68B], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D68C], NFC: [0x1D68C], NFD: [0x1D68C], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D68D], NFC: [0x1D68D], NFD: [0x1D68D], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D68E], NFC: [0x1D68E], NFD: [0x1D68E], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D68F], NFC: [0x1D68F], NFD: [0x1D68F], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D690], NFC: [0x1D690], NFD: [0x1D690], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D691], NFC: [0x1D691], NFD: [0x1D691], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D692], NFC: [0x1D692], NFD: [0x1D692], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D693], NFC: [0x1D693], NFD: [0x1D693], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D694], NFC: [0x1D694], NFD: [0x1D694], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D695], NFC: [0x1D695], NFD: [0x1D695], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D696], NFC: [0x1D696], NFD: [0x1D696], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D697], NFC: [0x1D697], NFD: [0x1D697], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D698], NFC: [0x1D698], NFD: [0x1D698], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D699], NFC: [0x1D699], NFD: [0x1D699], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D69A], NFC: [0x1D69A], NFD: [0x1D69A], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D69B], NFC: [0x1D69B], NFD: [0x1D69B], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D69C], NFC: [0x1D69C], NFD: [0x1D69C], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D69D], NFC: [0x1D69D], NFD: [0x1D69D], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D69E], NFC: [0x1D69E], NFD: [0x1D69E], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D69F], NFC: [0x1D69F], NFD: [0x1D69F], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D6A0], NFC: [0x1D6A0], NFD: [0x1D6A0], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D6A1], NFC: [0x1D6A1], NFD: [0x1D6A1], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D6A2], NFC: [0x1D6A2], NFD: [0x1D6A2], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D6A3], NFC: [0x1D6A3], NFD: [0x1D6A3], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D6A4], NFC: [0x1D6A4], NFD: [0x1D6A4], NFKC: [0x0131], NFKD: [0x0131] }, +{ source: [0x1D6A5], NFC: [0x1D6A5], NFD: [0x1D6A5], NFKC: [0x0237], NFKD: [0x0237] }, +{ source: [0x1D6A8], NFC: [0x1D6A8], NFD: [0x1D6A8], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D6A9], NFC: [0x1D6A9], NFD: [0x1D6A9], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D6AA], NFC: [0x1D6AA], NFD: [0x1D6AA], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D6AB], NFC: [0x1D6AB], NFD: [0x1D6AB], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D6AC], NFC: [0x1D6AC], NFD: [0x1D6AC], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D6AD], NFC: [0x1D6AD], NFD: [0x1D6AD], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D6AE], NFC: [0x1D6AE], NFD: [0x1D6AE], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D6AF], NFC: [0x1D6AF], NFD: [0x1D6AF], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6B0], NFC: [0x1D6B0], NFD: [0x1D6B0], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D6B1], NFC: [0x1D6B1], NFD: [0x1D6B1], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D6B2], NFC: [0x1D6B2], NFD: [0x1D6B2], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D6B3], NFC: [0x1D6B3], NFD: [0x1D6B3], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D6B4], NFC: [0x1D6B4], NFD: [0x1D6B4], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D6B5], NFC: [0x1D6B5], NFD: [0x1D6B5], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D6B6], NFC: [0x1D6B6], NFD: [0x1D6B6], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D6B7], NFC: [0x1D6B7], NFD: [0x1D6B7], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D6B8], NFC: [0x1D6B8], NFD: [0x1D6B8], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D6B9], NFC: [0x1D6B9], NFD: [0x1D6B9], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6BA], NFC: [0x1D6BA], NFD: [0x1D6BA], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D6BB], NFC: [0x1D6BB], NFD: [0x1D6BB], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D6BC], NFC: [0x1D6BC], NFD: [0x1D6BC], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D6BD], NFC: [0x1D6BD], NFD: [0x1D6BD], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D6BE], NFC: [0x1D6BE], NFD: [0x1D6BE], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D6BF], NFC: [0x1D6BF], NFD: [0x1D6BF], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D6C0], NFC: [0x1D6C0], NFD: [0x1D6C0], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D6C1], NFC: [0x1D6C1], NFD: [0x1D6C1], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D6C2], NFC: [0x1D6C2], NFD: [0x1D6C2], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D6C3], NFC: [0x1D6C3], NFD: [0x1D6C3], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D6C4], NFC: [0x1D6C4], NFD: [0x1D6C4], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D6C5], NFC: [0x1D6C5], NFD: [0x1D6C5], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D6C6], NFC: [0x1D6C6], NFD: [0x1D6C6], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D6C7], NFC: [0x1D6C7], NFD: [0x1D6C7], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D6C8], NFC: [0x1D6C8], NFD: [0x1D6C8], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D6C9], NFC: [0x1D6C9], NFD: [0x1D6C9], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D6CA], NFC: [0x1D6CA], NFD: [0x1D6CA], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D6CB], NFC: [0x1D6CB], NFD: [0x1D6CB], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D6CC], NFC: [0x1D6CC], NFD: [0x1D6CC], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D6CD], NFC: [0x1D6CD], NFD: [0x1D6CD], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D6CE], NFC: [0x1D6CE], NFD: [0x1D6CE], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D6CF], NFC: [0x1D6CF], NFD: [0x1D6CF], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D6D0], NFC: [0x1D6D0], NFD: [0x1D6D0], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D6D1], NFC: [0x1D6D1], NFD: [0x1D6D1], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D6D2], NFC: [0x1D6D2], NFD: [0x1D6D2], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D6D3], NFC: [0x1D6D3], NFD: [0x1D6D3], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D6D4], NFC: [0x1D6D4], NFD: [0x1D6D4], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D6D5], NFC: [0x1D6D5], NFD: [0x1D6D5], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D6D6], NFC: [0x1D6D6], NFD: [0x1D6D6], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D6D7], NFC: [0x1D6D7], NFD: [0x1D6D7], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D6D8], NFC: [0x1D6D8], NFD: [0x1D6D8], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D6D9], NFC: [0x1D6D9], NFD: [0x1D6D9], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D6DA], NFC: [0x1D6DA], NFD: [0x1D6DA], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D6DB], NFC: [0x1D6DB], NFD: [0x1D6DB], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D6DC], NFC: [0x1D6DC], NFD: [0x1D6DC], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D6DD], NFC: [0x1D6DD], NFD: [0x1D6DD], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D6DE], NFC: [0x1D6DE], NFD: [0x1D6DE], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D6DF], NFC: [0x1D6DF], NFD: [0x1D6DF], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D6E0], NFC: [0x1D6E0], NFD: [0x1D6E0], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D6E1], NFC: [0x1D6E1], NFD: [0x1D6E1], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D6E2], NFC: [0x1D6E2], NFD: [0x1D6E2], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D6E3], NFC: [0x1D6E3], NFD: [0x1D6E3], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D6E4], NFC: [0x1D6E4], NFD: [0x1D6E4], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D6E5], NFC: [0x1D6E5], NFD: [0x1D6E5], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D6E6], NFC: [0x1D6E6], NFD: [0x1D6E6], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D6E7], NFC: [0x1D6E7], NFD: [0x1D6E7], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D6E8], NFC: [0x1D6E8], NFD: [0x1D6E8], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D6E9], NFC: [0x1D6E9], NFD: [0x1D6E9], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6EA], NFC: [0x1D6EA], NFD: [0x1D6EA], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D6EB], NFC: [0x1D6EB], NFD: [0x1D6EB], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D6EC], NFC: [0x1D6EC], NFD: [0x1D6EC], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D6ED], NFC: [0x1D6ED], NFD: [0x1D6ED], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D6EE], NFC: [0x1D6EE], NFD: [0x1D6EE], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D6EF], NFC: [0x1D6EF], NFD: [0x1D6EF], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D6F0], NFC: [0x1D6F0], NFD: [0x1D6F0], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D6F1], NFC: [0x1D6F1], NFD: [0x1D6F1], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D6F2], NFC: [0x1D6F2], NFD: [0x1D6F2], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D6F3], NFC: [0x1D6F3], NFD: [0x1D6F3], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6F4], NFC: [0x1D6F4], NFD: [0x1D6F4], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D6F5], NFC: [0x1D6F5], NFD: [0x1D6F5], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D6F6], NFC: [0x1D6F6], NFD: [0x1D6F6], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D6F7], NFC: [0x1D6F7], NFD: [0x1D6F7], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D6F8], NFC: [0x1D6F8], NFD: [0x1D6F8], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D6F9], NFC: [0x1D6F9], NFD: [0x1D6F9], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D6FA], NFC: [0x1D6FA], NFD: [0x1D6FA], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D6FB], NFC: [0x1D6FB], NFD: [0x1D6FB], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D6FC], NFC: [0x1D6FC], NFD: [0x1D6FC], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D6FD], NFC: [0x1D6FD], NFD: [0x1D6FD], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D6FE], NFC: [0x1D6FE], NFD: [0x1D6FE], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D6FF], NFC: [0x1D6FF], NFD: [0x1D6FF], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D700], NFC: [0x1D700], NFD: [0x1D700], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D701], NFC: [0x1D701], NFD: [0x1D701], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D702], NFC: [0x1D702], NFD: [0x1D702], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D703], NFC: [0x1D703], NFD: [0x1D703], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D704], NFC: [0x1D704], NFD: [0x1D704], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D705], NFC: [0x1D705], NFD: [0x1D705], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D706], NFC: [0x1D706], NFD: [0x1D706], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D707], NFC: [0x1D707], NFD: [0x1D707], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D708], NFC: [0x1D708], NFD: [0x1D708], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D709], NFC: [0x1D709], NFD: [0x1D709], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D70A], NFC: [0x1D70A], NFD: [0x1D70A], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D70B], NFC: [0x1D70B], NFD: [0x1D70B], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D70C], NFC: [0x1D70C], NFD: [0x1D70C], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D70D], NFC: [0x1D70D], NFD: [0x1D70D], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D70E], NFC: [0x1D70E], NFD: [0x1D70E], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D70F], NFC: [0x1D70F], NFD: [0x1D70F], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D710], NFC: [0x1D710], NFD: [0x1D710], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D711], NFC: [0x1D711], NFD: [0x1D711], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D712], NFC: [0x1D712], NFD: [0x1D712], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D713], NFC: [0x1D713], NFD: [0x1D713], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D714], NFC: [0x1D714], NFD: [0x1D714], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D715], NFC: [0x1D715], NFD: [0x1D715], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D716], NFC: [0x1D716], NFD: [0x1D716], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D717], NFC: [0x1D717], NFD: [0x1D717], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D718], NFC: [0x1D718], NFD: [0x1D718], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D719], NFC: [0x1D719], NFD: [0x1D719], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D71A], NFC: [0x1D71A], NFD: [0x1D71A], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D71B], NFC: [0x1D71B], NFD: [0x1D71B], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D71C], NFC: [0x1D71C], NFD: [0x1D71C], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D71D], NFC: [0x1D71D], NFD: [0x1D71D], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D71E], NFC: [0x1D71E], NFD: [0x1D71E], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D71F], NFC: [0x1D71F], NFD: [0x1D71F], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D720], NFC: [0x1D720], NFD: [0x1D720], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D721], NFC: [0x1D721], NFD: [0x1D721], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D722], NFC: [0x1D722], NFD: [0x1D722], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D723], NFC: [0x1D723], NFD: [0x1D723], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D724], NFC: [0x1D724], NFD: [0x1D724], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D725], NFC: [0x1D725], NFD: [0x1D725], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D726], NFC: [0x1D726], NFD: [0x1D726], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D727], NFC: [0x1D727], NFD: [0x1D727], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D728], NFC: [0x1D728], NFD: [0x1D728], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D729], NFC: [0x1D729], NFD: [0x1D729], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D72A], NFC: [0x1D72A], NFD: [0x1D72A], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D72B], NFC: [0x1D72B], NFD: [0x1D72B], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D72C], NFC: [0x1D72C], NFD: [0x1D72C], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D72D], NFC: [0x1D72D], NFD: [0x1D72D], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D72E], NFC: [0x1D72E], NFD: [0x1D72E], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D72F], NFC: [0x1D72F], NFD: [0x1D72F], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D730], NFC: [0x1D730], NFD: [0x1D730], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D731], NFC: [0x1D731], NFD: [0x1D731], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D732], NFC: [0x1D732], NFD: [0x1D732], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D733], NFC: [0x1D733], NFD: [0x1D733], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D734], NFC: [0x1D734], NFD: [0x1D734], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D735], NFC: [0x1D735], NFD: [0x1D735], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D736], NFC: [0x1D736], NFD: [0x1D736], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D737], NFC: [0x1D737], NFD: [0x1D737], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D738], NFC: [0x1D738], NFD: [0x1D738], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D739], NFC: [0x1D739], NFD: [0x1D739], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D73A], NFC: [0x1D73A], NFD: [0x1D73A], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D73B], NFC: [0x1D73B], NFD: [0x1D73B], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D73C], NFC: [0x1D73C], NFD: [0x1D73C], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D73D], NFC: [0x1D73D], NFD: [0x1D73D], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D73E], NFC: [0x1D73E], NFD: [0x1D73E], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D73F], NFC: [0x1D73F], NFD: [0x1D73F], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D740], NFC: [0x1D740], NFD: [0x1D740], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D741], NFC: [0x1D741], NFD: [0x1D741], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D742], NFC: [0x1D742], NFD: [0x1D742], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D743], NFC: [0x1D743], NFD: [0x1D743], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D744], NFC: [0x1D744], NFD: [0x1D744], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D745], NFC: [0x1D745], NFD: [0x1D745], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D746], NFC: [0x1D746], NFD: [0x1D746], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D747], NFC: [0x1D747], NFD: [0x1D747], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D748], NFC: [0x1D748], NFD: [0x1D748], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D749], NFC: [0x1D749], NFD: [0x1D749], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D74A], NFC: [0x1D74A], NFD: [0x1D74A], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D74B], NFC: [0x1D74B], NFD: [0x1D74B], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D74C], NFC: [0x1D74C], NFD: [0x1D74C], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D74D], NFC: [0x1D74D], NFD: [0x1D74D], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D74E], NFC: [0x1D74E], NFD: [0x1D74E], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D74F], NFC: [0x1D74F], NFD: [0x1D74F], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D750], NFC: [0x1D750], NFD: [0x1D750], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D751], NFC: [0x1D751], NFD: [0x1D751], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D752], NFC: [0x1D752], NFD: [0x1D752], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D753], NFC: [0x1D753], NFD: [0x1D753], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D754], NFC: [0x1D754], NFD: [0x1D754], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D755], NFC: [0x1D755], NFD: [0x1D755], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D756], NFC: [0x1D756], NFD: [0x1D756], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D757], NFC: [0x1D757], NFD: [0x1D757], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D758], NFC: [0x1D758], NFD: [0x1D758], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D759], NFC: [0x1D759], NFD: [0x1D759], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D75A], NFC: [0x1D75A], NFD: [0x1D75A], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D75B], NFC: [0x1D75B], NFD: [0x1D75B], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D75C], NFC: [0x1D75C], NFD: [0x1D75C], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D75D], NFC: [0x1D75D], NFD: [0x1D75D], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D75E], NFC: [0x1D75E], NFD: [0x1D75E], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D75F], NFC: [0x1D75F], NFD: [0x1D75F], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D760], NFC: [0x1D760], NFD: [0x1D760], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D761], NFC: [0x1D761], NFD: [0x1D761], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D762], NFC: [0x1D762], NFD: [0x1D762], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D763], NFC: [0x1D763], NFD: [0x1D763], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D764], NFC: [0x1D764], NFD: [0x1D764], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D765], NFC: [0x1D765], NFD: [0x1D765], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D766], NFC: [0x1D766], NFD: [0x1D766], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D767], NFC: [0x1D767], NFD: [0x1D767], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D768], NFC: [0x1D768], NFD: [0x1D768], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D769], NFC: [0x1D769], NFD: [0x1D769], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D76A], NFC: [0x1D76A], NFD: [0x1D76A], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D76B], NFC: [0x1D76B], NFD: [0x1D76B], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D76C], NFC: [0x1D76C], NFD: [0x1D76C], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D76D], NFC: [0x1D76D], NFD: [0x1D76D], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D76E], NFC: [0x1D76E], NFD: [0x1D76E], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D76F], NFC: [0x1D76F], NFD: [0x1D76F], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D770], NFC: [0x1D770], NFD: [0x1D770], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D771], NFC: [0x1D771], NFD: [0x1D771], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D772], NFC: [0x1D772], NFD: [0x1D772], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D773], NFC: [0x1D773], NFD: [0x1D773], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D774], NFC: [0x1D774], NFD: [0x1D774], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D775], NFC: [0x1D775], NFD: [0x1D775], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D776], NFC: [0x1D776], NFD: [0x1D776], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D777], NFC: [0x1D777], NFD: [0x1D777], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D778], NFC: [0x1D778], NFD: [0x1D778], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D779], NFC: [0x1D779], NFD: [0x1D779], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D77A], NFC: [0x1D77A], NFD: [0x1D77A], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D77B], NFC: [0x1D77B], NFD: [0x1D77B], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D77C], NFC: [0x1D77C], NFD: [0x1D77C], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D77D], NFC: [0x1D77D], NFD: [0x1D77D], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D77E], NFC: [0x1D77E], NFD: [0x1D77E], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D77F], NFC: [0x1D77F], NFD: [0x1D77F], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D780], NFC: [0x1D780], NFD: [0x1D780], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D781], NFC: [0x1D781], NFD: [0x1D781], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D782], NFC: [0x1D782], NFD: [0x1D782], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D783], NFC: [0x1D783], NFD: [0x1D783], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D784], NFC: [0x1D784], NFD: [0x1D784], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D785], NFC: [0x1D785], NFD: [0x1D785], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D786], NFC: [0x1D786], NFD: [0x1D786], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D787], NFC: [0x1D787], NFD: [0x1D787], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D788], NFC: [0x1D788], NFD: [0x1D788], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D789], NFC: [0x1D789], NFD: [0x1D789], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D78A], NFC: [0x1D78A], NFD: [0x1D78A], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D78B], NFC: [0x1D78B], NFD: [0x1D78B], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D78C], NFC: [0x1D78C], NFD: [0x1D78C], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D78D], NFC: [0x1D78D], NFD: [0x1D78D], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D78E], NFC: [0x1D78E], NFD: [0x1D78E], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D78F], NFC: [0x1D78F], NFD: [0x1D78F], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D790], NFC: [0x1D790], NFD: [0x1D790], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D791], NFC: [0x1D791], NFD: [0x1D791], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D792], NFC: [0x1D792], NFD: [0x1D792], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D793], NFC: [0x1D793], NFD: [0x1D793], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D794], NFC: [0x1D794], NFD: [0x1D794], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D795], NFC: [0x1D795], NFD: [0x1D795], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D796], NFC: [0x1D796], NFD: [0x1D796], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D797], NFC: [0x1D797], NFD: [0x1D797], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D798], NFC: [0x1D798], NFD: [0x1D798], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D799], NFC: [0x1D799], NFD: [0x1D799], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D79A], NFC: [0x1D79A], NFD: [0x1D79A], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D79B], NFC: [0x1D79B], NFD: [0x1D79B], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D79C], NFC: [0x1D79C], NFD: [0x1D79C], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D79D], NFC: [0x1D79D], NFD: [0x1D79D], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D79E], NFC: [0x1D79E], NFD: [0x1D79E], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D79F], NFC: [0x1D79F], NFD: [0x1D79F], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D7A0], NFC: [0x1D7A0], NFD: [0x1D7A0], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D7A1], NFC: [0x1D7A1], NFD: [0x1D7A1], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D7A2], NFC: [0x1D7A2], NFD: [0x1D7A2], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D7A3], NFC: [0x1D7A3], NFD: [0x1D7A3], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D7A4], NFC: [0x1D7A4], NFD: [0x1D7A4], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D7A5], NFC: [0x1D7A5], NFD: [0x1D7A5], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D7A6], NFC: [0x1D7A6], NFD: [0x1D7A6], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D7A7], NFC: [0x1D7A7], NFD: [0x1D7A7], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D7A8], NFC: [0x1D7A8], NFD: [0x1D7A8], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D7A9], NFC: [0x1D7A9], NFD: [0x1D7A9], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D7AA], NFC: [0x1D7AA], NFD: [0x1D7AA], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D7AB], NFC: [0x1D7AB], NFD: [0x1D7AB], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D7AC], NFC: [0x1D7AC], NFD: [0x1D7AC], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D7AD], NFC: [0x1D7AD], NFD: [0x1D7AD], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D7AE], NFC: [0x1D7AE], NFD: [0x1D7AE], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D7AF], NFC: [0x1D7AF], NFD: [0x1D7AF], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D7B0], NFC: [0x1D7B0], NFD: [0x1D7B0], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D7B1], NFC: [0x1D7B1], NFD: [0x1D7B1], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D7B2], NFC: [0x1D7B2], NFD: [0x1D7B2], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D7B3], NFC: [0x1D7B3], NFD: [0x1D7B3], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D7B4], NFC: [0x1D7B4], NFD: [0x1D7B4], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D7B5], NFC: [0x1D7B5], NFD: [0x1D7B5], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D7B6], NFC: [0x1D7B6], NFD: [0x1D7B6], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D7B7], NFC: [0x1D7B7], NFD: [0x1D7B7], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D7B8], NFC: [0x1D7B8], NFD: [0x1D7B8], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D7B9], NFC: [0x1D7B9], NFD: [0x1D7B9], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D7BA], NFC: [0x1D7BA], NFD: [0x1D7BA], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D7BB], NFC: [0x1D7BB], NFD: [0x1D7BB], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D7BC], NFC: [0x1D7BC], NFD: [0x1D7BC], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D7BD], NFC: [0x1D7BD], NFD: [0x1D7BD], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D7BE], NFC: [0x1D7BE], NFD: [0x1D7BE], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D7BF], NFC: [0x1D7BF], NFD: [0x1D7BF], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D7C0], NFC: [0x1D7C0], NFD: [0x1D7C0], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D7C1], NFC: [0x1D7C1], NFD: [0x1D7C1], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D7C2], NFC: [0x1D7C2], NFD: [0x1D7C2], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D7C3], NFC: [0x1D7C3], NFD: [0x1D7C3], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D7C4], NFC: [0x1D7C4], NFD: [0x1D7C4], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D7C5], NFC: [0x1D7C5], NFD: [0x1D7C5], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D7C6], NFC: [0x1D7C6], NFD: [0x1D7C6], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D7C7], NFC: [0x1D7C7], NFD: [0x1D7C7], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D7C8], NFC: [0x1D7C8], NFD: [0x1D7C8], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D7C9], NFC: [0x1D7C9], NFD: [0x1D7C9], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D7CA], NFC: [0x1D7CA], NFD: [0x1D7CA], NFKC: [0x03DC], NFKD: [0x03DC] }, +{ source: [0x1D7CB], NFC: [0x1D7CB], NFD: [0x1D7CB], NFKC: [0x03DD], NFKD: [0x03DD] }, +{ source: [0x1D7CE], NFC: [0x1D7CE], NFD: [0x1D7CE], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7CF], NFC: [0x1D7CF], NFD: [0x1D7CF], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7D0], NFC: [0x1D7D0], NFD: [0x1D7D0], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7D1], NFC: [0x1D7D1], NFD: [0x1D7D1], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7D2], NFC: [0x1D7D2], NFD: [0x1D7D2], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7D3], NFC: [0x1D7D3], NFD: [0x1D7D3], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7D4], NFC: [0x1D7D4], NFD: [0x1D7D4], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7D5], NFC: [0x1D7D5], NFD: [0x1D7D5], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7D6], NFC: [0x1D7D6], NFD: [0x1D7D6], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7D7], NFC: [0x1D7D7], NFD: [0x1D7D7], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7D8], NFC: [0x1D7D8], NFD: [0x1D7D8], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7D9], NFC: [0x1D7D9], NFD: [0x1D7D9], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7DA], NFC: [0x1D7DA], NFD: [0x1D7DA], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7DB], NFC: [0x1D7DB], NFD: [0x1D7DB], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7DC], NFC: [0x1D7DC], NFD: [0x1D7DC], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7DD], NFC: [0x1D7DD], NFD: [0x1D7DD], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7DE], NFC: [0x1D7DE], NFD: [0x1D7DE], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7DF], NFC: [0x1D7DF], NFD: [0x1D7DF], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7E0], NFC: [0x1D7E0], NFD: [0x1D7E0], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7E1], NFC: [0x1D7E1], NFD: [0x1D7E1], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7E2], NFC: [0x1D7E2], NFD: [0x1D7E2], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7E3], NFC: [0x1D7E3], NFD: [0x1D7E3], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7E4], NFC: [0x1D7E4], NFD: [0x1D7E4], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7E5], NFC: [0x1D7E5], NFD: [0x1D7E5], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7E6], NFC: [0x1D7E6], NFD: [0x1D7E6], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7E7], NFC: [0x1D7E7], NFD: [0x1D7E7], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7E8], NFC: [0x1D7E8], NFD: [0x1D7E8], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7E9], NFC: [0x1D7E9], NFD: [0x1D7E9], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7EA], NFC: [0x1D7EA], NFD: [0x1D7EA], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7EB], NFC: [0x1D7EB], NFD: [0x1D7EB], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7EC], NFC: [0x1D7EC], NFD: [0x1D7EC], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7ED], NFC: [0x1D7ED], NFD: [0x1D7ED], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7EE], NFC: [0x1D7EE], NFD: [0x1D7EE], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7EF], NFC: [0x1D7EF], NFD: [0x1D7EF], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7F0], NFC: [0x1D7F0], NFD: [0x1D7F0], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7F1], NFC: [0x1D7F1], NFD: [0x1D7F1], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7F2], NFC: [0x1D7F2], NFD: [0x1D7F2], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7F3], NFC: [0x1D7F3], NFD: [0x1D7F3], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7F4], NFC: [0x1D7F4], NFD: [0x1D7F4], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7F5], NFC: [0x1D7F5], NFD: [0x1D7F5], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7F6], NFC: [0x1D7F6], NFD: [0x1D7F6], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7F7], NFC: [0x1D7F7], NFD: [0x1D7F7], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7F8], NFC: [0x1D7F8], NFD: [0x1D7F8], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7F9], NFC: [0x1D7F9], NFD: [0x1D7F9], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7FA], NFC: [0x1D7FA], NFD: [0x1D7FA], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7FB], NFC: [0x1D7FB], NFD: [0x1D7FB], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7FC], NFC: [0x1D7FC], NFD: [0x1D7FC], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7FD], NFC: [0x1D7FD], NFD: [0x1D7FD], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7FE], NFC: [0x1D7FE], NFD: [0x1D7FE], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7FF], NFC: [0x1D7FF], NFD: [0x1D7FF], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1E030], NFC: [0x1E030], NFD: [0x1E030], NFKC: [0x0430], NFKD: [0x0430] }, +{ source: [0x1E031], NFC: [0x1E031], NFD: [0x1E031], NFKC: [0x0431], NFKD: [0x0431] }, +{ source: [0x1E032], NFC: [0x1E032], NFD: [0x1E032], NFKC: [0x0432], NFKD: [0x0432] }, +{ source: [0x1E033], NFC: [0x1E033], NFD: [0x1E033], NFKC: [0x0433], NFKD: [0x0433] }, +{ source: [0x1E034], NFC: [0x1E034], NFD: [0x1E034], NFKC: [0x0434], NFKD: [0x0434] }, +{ source: [0x1E035], NFC: [0x1E035], NFD: [0x1E035], NFKC: [0x0435], NFKD: [0x0435] }, +{ source: [0x1E036], NFC: [0x1E036], NFD: [0x1E036], NFKC: [0x0436], NFKD: [0x0436] }, +{ source: [0x1E037], NFC: [0x1E037], NFD: [0x1E037], NFKC: [0x0437], NFKD: [0x0437] }, +{ source: [0x1E038], NFC: [0x1E038], NFD: [0x1E038], NFKC: [0x0438], NFKD: [0x0438] }, +{ source: [0x1E039], NFC: [0x1E039], NFD: [0x1E039], NFKC: [0x043A], NFKD: [0x043A] }, +{ source: [0x1E03A], NFC: [0x1E03A], NFD: [0x1E03A], NFKC: [0x043B], NFKD: [0x043B] }, +{ source: [0x1E03B], NFC: [0x1E03B], NFD: [0x1E03B], NFKC: [0x043C], NFKD: [0x043C] }, +{ source: [0x1E03C], NFC: [0x1E03C], NFD: [0x1E03C], NFKC: [0x043E], NFKD: [0x043E] }, +{ source: [0x1E03D], NFC: [0x1E03D], NFD: [0x1E03D], NFKC: [0x043F], NFKD: [0x043F] }, +{ source: [0x1E03E], NFC: [0x1E03E], NFD: [0x1E03E], NFKC: [0x0440], NFKD: [0x0440] }, +{ source: [0x1E03F], NFC: [0x1E03F], NFD: [0x1E03F], NFKC: [0x0441], NFKD: [0x0441] }, +{ source: [0x1E040], NFC: [0x1E040], NFD: [0x1E040], NFKC: [0x0442], NFKD: [0x0442] }, +{ source: [0x1E041], NFC: [0x1E041], NFD: [0x1E041], NFKC: [0x0443], NFKD: [0x0443] }, +{ source: [0x1E042], NFC: [0x1E042], NFD: [0x1E042], NFKC: [0x0444], NFKD: [0x0444] }, +{ source: [0x1E043], NFC: [0x1E043], NFD: [0x1E043], NFKC: [0x0445], NFKD: [0x0445] }, +{ source: [0x1E044], NFC: [0x1E044], NFD: [0x1E044], NFKC: [0x0446], NFKD: [0x0446] }, +{ source: [0x1E045], NFC: [0x1E045], NFD: [0x1E045], NFKC: [0x0447], NFKD: [0x0447] }, +{ source: [0x1E046], NFC: [0x1E046], NFD: [0x1E046], NFKC: [0x0448], NFKD: [0x0448] }, +{ source: [0x1E047], NFC: [0x1E047], NFD: [0x1E047], NFKC: [0x044B], NFKD: [0x044B] }, +{ source: [0x1E048], NFC: [0x1E048], NFD: [0x1E048], NFKC: [0x044D], NFKD: [0x044D] }, +{ source: [0x1E049], NFC: [0x1E049], NFD: [0x1E049], NFKC: [0x044E], NFKD: [0x044E] }, +{ source: [0x1E04A], NFC: [0x1E04A], NFD: [0x1E04A], NFKC: [0xA689], NFKD: [0xA689] }, +{ source: [0x1E04B], NFC: [0x1E04B], NFD: [0x1E04B], NFKC: [0x04D9], NFKD: [0x04D9] }, +{ source: [0x1E04C], NFC: [0x1E04C], NFD: [0x1E04C], NFKC: [0x0456], NFKD: [0x0456] }, +{ source: [0x1E04D], NFC: [0x1E04D], NFD: [0x1E04D], NFKC: [0x0458], NFKD: [0x0458] }, +{ source: [0x1E04E], NFC: [0x1E04E], NFD: [0x1E04E], NFKC: [0x04E9], NFKD: [0x04E9] }, +{ source: [0x1E04F], NFC: [0x1E04F], NFD: [0x1E04F], NFKC: [0x04AF], NFKD: [0x04AF] }, +{ source: [0x1E050], NFC: [0x1E050], NFD: [0x1E050], NFKC: [0x04CF], NFKD: [0x04CF] }, +{ source: [0x1E051], NFC: [0x1E051], NFD: [0x1E051], NFKC: [0x0430], NFKD: [0x0430] }, +{ source: [0x1E052], NFC: [0x1E052], NFD: [0x1E052], NFKC: [0x0431], NFKD: [0x0431] }, +{ source: [0x1E053], NFC: [0x1E053], NFD: [0x1E053], NFKC: [0x0432], NFKD: [0x0432] }, +{ source: [0x1E054], NFC: [0x1E054], NFD: [0x1E054], NFKC: [0x0433], NFKD: [0x0433] }, +{ source: [0x1E055], NFC: [0x1E055], NFD: [0x1E055], NFKC: [0x0434], NFKD: [0x0434] }, +{ source: [0x1E056], NFC: [0x1E056], NFD: [0x1E056], NFKC: [0x0435], NFKD: [0x0435] }, +{ source: [0x1E057], NFC: [0x1E057], NFD: [0x1E057], NFKC: [0x0436], NFKD: [0x0436] }, +{ source: [0x1E058], NFC: [0x1E058], NFD: [0x1E058], NFKC: [0x0437], NFKD: [0x0437] }, +{ source: [0x1E059], NFC: [0x1E059], NFD: [0x1E059], NFKC: [0x0438], NFKD: [0x0438] }, +{ source: [0x1E05A], NFC: [0x1E05A], NFD: [0x1E05A], NFKC: [0x043A], NFKD: [0x043A] }, +{ source: [0x1E05B], NFC: [0x1E05B], NFD: [0x1E05B], NFKC: [0x043B], NFKD: [0x043B] }, +{ source: [0x1E05C], NFC: [0x1E05C], NFD: [0x1E05C], NFKC: [0x043E], NFKD: [0x043E] }, +{ source: [0x1E05D], NFC: [0x1E05D], NFD: [0x1E05D], NFKC: [0x043F], NFKD: [0x043F] }, +{ source: [0x1E05E], NFC: [0x1E05E], NFD: [0x1E05E], NFKC: [0x0441], NFKD: [0x0441] }, +{ source: [0x1E05F], NFC: [0x1E05F], NFD: [0x1E05F], NFKC: [0x0443], NFKD: [0x0443] }, +{ source: [0x1E060], NFC: [0x1E060], NFD: [0x1E060], NFKC: [0x0444], NFKD: [0x0444] }, +{ source: [0x1E061], NFC: [0x1E061], NFD: [0x1E061], NFKC: [0x0445], NFKD: [0x0445] }, +{ source: [0x1E062], NFC: [0x1E062], NFD: [0x1E062], NFKC: [0x0446], NFKD: [0x0446] }, +{ source: [0x1E063], NFC: [0x1E063], NFD: [0x1E063], NFKC: [0x0447], NFKD: [0x0447] }, +{ source: [0x1E064], NFC: [0x1E064], NFD: [0x1E064], NFKC: [0x0448], NFKD: [0x0448] }, +{ source: [0x1E065], NFC: [0x1E065], NFD: [0x1E065], NFKC: [0x044A], NFKD: [0x044A] }, +{ source: [0x1E066], NFC: [0x1E066], NFD: [0x1E066], NFKC: [0x044B], NFKD: [0x044B] }, +{ source: [0x1E067], NFC: [0x1E067], NFD: [0x1E067], NFKC: [0x0491], NFKD: [0x0491] }, +{ source: [0x1E068], NFC: [0x1E068], NFD: [0x1E068], NFKC: [0x0456], NFKD: [0x0456] }, +{ source: [0x1E069], NFC: [0x1E069], NFD: [0x1E069], NFKC: [0x0455], NFKD: [0x0455] }, +{ source: [0x1E06A], NFC: [0x1E06A], NFD: [0x1E06A], NFKC: [0x045F], NFKD: [0x045F] }, +{ source: [0x1E06B], NFC: [0x1E06B], NFD: [0x1E06B], NFKC: [0x04AB], NFKD: [0x04AB] }, +{ source: [0x1E06C], NFC: [0x1E06C], NFD: [0x1E06C], NFKC: [0xA651], NFKD: [0xA651] }, +{ source: [0x1E06D], NFC: [0x1E06D], NFD: [0x1E06D], NFKC: [0x04B1], NFKD: [0x04B1] }, +{ source: [0x1EE00], NFC: [0x1EE00], NFD: [0x1EE00], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0x1EE01], NFC: [0x1EE01], NFD: [0x1EE01], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE02], NFC: [0x1EE02], NFD: [0x1EE02], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE03], NFC: [0x1EE03], NFD: [0x1EE03], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0x1EE05], NFC: [0x1EE05], NFD: [0x1EE05], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0x1EE06], NFC: [0x1EE06], NFD: [0x1EE06], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0x1EE07], NFC: [0x1EE07], NFD: [0x1EE07], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE08], NFC: [0x1EE08], NFD: [0x1EE08], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EE09], NFC: [0x1EE09], NFD: [0x1EE09], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE0A], NFC: [0x1EE0A], NFD: [0x1EE0A], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0x1EE0B], NFC: [0x1EE0B], NFD: [0x1EE0B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE0C], NFC: [0x1EE0C], NFD: [0x1EE0C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE0D], NFC: [0x1EE0D], NFD: [0x1EE0D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE0E], NFC: [0x1EE0E], NFD: [0x1EE0E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE0F], NFC: [0x1EE0F], NFD: [0x1EE0F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE10], NFC: [0x1EE10], NFD: [0x1EE10], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE11], NFC: [0x1EE11], NFD: [0x1EE11], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE12], NFC: [0x1EE12], NFD: [0x1EE12], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE13], NFC: [0x1EE13], NFD: [0x1EE13], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0x1EE14], NFC: [0x1EE14], NFD: [0x1EE14], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE15], NFC: [0x1EE15], NFD: [0x1EE15], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE16], NFC: [0x1EE16], NFD: [0x1EE16], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE17], NFC: [0x1EE17], NFD: [0x1EE17], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE18], NFC: [0x1EE18], NFD: [0x1EE18], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0x1EE19], NFC: [0x1EE19], NFD: [0x1EE19], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE1A], NFC: [0x1EE1A], NFD: [0x1EE1A], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EE1B], NFC: [0x1EE1B], NFD: [0x1EE1B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE1C], NFC: [0x1EE1C], NFD: [0x1EE1C], NFKC: [0x066E], NFKD: [0x066E] }, +{ source: [0x1EE1D], NFC: [0x1EE1D], NFD: [0x1EE1D], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0x1EE1E], NFC: [0x1EE1E], NFD: [0x1EE1E], NFKC: [0x06A1], NFKD: [0x06A1] }, +{ source: [0x1EE1F], NFC: [0x1EE1F], NFD: [0x1EE1F], NFKC: [0x066F], NFKD: [0x066F] }, +{ source: [0x1EE21], NFC: [0x1EE21], NFD: [0x1EE21], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE22], NFC: [0x1EE22], NFD: [0x1EE22], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE24], NFC: [0x1EE24], NFD: [0x1EE24], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0x1EE27], NFC: [0x1EE27], NFD: [0x1EE27], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE29], NFC: [0x1EE29], NFD: [0x1EE29], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE2A], NFC: [0x1EE2A], NFD: [0x1EE2A], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0x1EE2B], NFC: [0x1EE2B], NFD: [0x1EE2B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE2C], NFC: [0x1EE2C], NFD: [0x1EE2C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE2D], NFC: [0x1EE2D], NFD: [0x1EE2D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE2E], NFC: [0x1EE2E], NFD: [0x1EE2E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE2F], NFC: [0x1EE2F], NFD: [0x1EE2F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE30], NFC: [0x1EE30], NFD: [0x1EE30], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE31], NFC: [0x1EE31], NFD: [0x1EE31], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE32], NFC: [0x1EE32], NFD: [0x1EE32], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE34], NFC: [0x1EE34], NFD: [0x1EE34], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE35], NFC: [0x1EE35], NFD: [0x1EE35], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE36], NFC: [0x1EE36], NFD: [0x1EE36], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE37], NFC: [0x1EE37], NFD: [0x1EE37], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE39], NFC: [0x1EE39], NFD: [0x1EE39], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE3B], NFC: [0x1EE3B], NFD: [0x1EE3B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE42], NFC: [0x1EE42], NFD: [0x1EE42], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE47], NFC: [0x1EE47], NFD: [0x1EE47], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE49], NFC: [0x1EE49], NFD: [0x1EE49], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE4B], NFC: [0x1EE4B], NFD: [0x1EE4B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE4D], NFC: [0x1EE4D], NFD: [0x1EE4D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE4E], NFC: [0x1EE4E], NFD: [0x1EE4E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE4F], NFC: [0x1EE4F], NFD: [0x1EE4F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE51], NFC: [0x1EE51], NFD: [0x1EE51], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE52], NFC: [0x1EE52], NFD: [0x1EE52], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE54], NFC: [0x1EE54], NFD: [0x1EE54], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE57], NFC: [0x1EE57], NFD: [0x1EE57], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE59], NFC: [0x1EE59], NFD: [0x1EE59], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE5B], NFC: [0x1EE5B], NFD: [0x1EE5B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE5D], NFC: [0x1EE5D], NFD: [0x1EE5D], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0x1EE5F], NFC: [0x1EE5F], NFD: [0x1EE5F], NFKC: [0x066F], NFKD: [0x066F] }, +{ source: [0x1EE61], NFC: [0x1EE61], NFD: [0x1EE61], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE62], NFC: [0x1EE62], NFD: [0x1EE62], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE64], NFC: [0x1EE64], NFD: [0x1EE64], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0x1EE67], NFC: [0x1EE67], NFD: [0x1EE67], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE68], NFC: [0x1EE68], NFD: [0x1EE68], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EE69], NFC: [0x1EE69], NFD: [0x1EE69], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE6A], NFC: [0x1EE6A], NFD: [0x1EE6A], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0x1EE6C], NFC: [0x1EE6C], NFD: [0x1EE6C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE6D], NFC: [0x1EE6D], NFD: [0x1EE6D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE6E], NFC: [0x1EE6E], NFD: [0x1EE6E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE6F], NFC: [0x1EE6F], NFD: [0x1EE6F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE70], NFC: [0x1EE70], NFD: [0x1EE70], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE71], NFC: [0x1EE71], NFD: [0x1EE71], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE72], NFC: [0x1EE72], NFD: [0x1EE72], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE74], NFC: [0x1EE74], NFD: [0x1EE74], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE75], NFC: [0x1EE75], NFD: [0x1EE75], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE76], NFC: [0x1EE76], NFD: [0x1EE76], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE77], NFC: [0x1EE77], NFD: [0x1EE77], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE79], NFC: [0x1EE79], NFD: [0x1EE79], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE7A], NFC: [0x1EE7A], NFD: [0x1EE7A], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EE7B], NFC: [0x1EE7B], NFD: [0x1EE7B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE7C], NFC: [0x1EE7C], NFD: [0x1EE7C], NFKC: [0x066E], NFKD: [0x066E] }, +{ source: [0x1EE7E], NFC: [0x1EE7E], NFD: [0x1EE7E], NFKC: [0x06A1], NFKD: [0x06A1] }, +{ source: [0x1EE80], NFC: [0x1EE80], NFD: [0x1EE80], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0x1EE81], NFC: [0x1EE81], NFD: [0x1EE81], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE82], NFC: [0x1EE82], NFD: [0x1EE82], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE83], NFC: [0x1EE83], NFD: [0x1EE83], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0x1EE84], NFC: [0x1EE84], NFD: [0x1EE84], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0x1EE85], NFC: [0x1EE85], NFD: [0x1EE85], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0x1EE86], NFC: [0x1EE86], NFD: [0x1EE86], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0x1EE87], NFC: [0x1EE87], NFD: [0x1EE87], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE88], NFC: [0x1EE88], NFD: [0x1EE88], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EE89], NFC: [0x1EE89], NFD: [0x1EE89], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE8B], NFC: [0x1EE8B], NFD: [0x1EE8B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE8C], NFC: [0x1EE8C], NFD: [0x1EE8C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE8D], NFC: [0x1EE8D], NFD: [0x1EE8D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE8E], NFC: [0x1EE8E], NFD: [0x1EE8E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE8F], NFC: [0x1EE8F], NFD: [0x1EE8F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE90], NFC: [0x1EE90], NFD: [0x1EE90], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE91], NFC: [0x1EE91], NFD: [0x1EE91], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE92], NFC: [0x1EE92], NFD: [0x1EE92], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE93], NFC: [0x1EE93], NFD: [0x1EE93], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0x1EE94], NFC: [0x1EE94], NFD: [0x1EE94], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE95], NFC: [0x1EE95], NFD: [0x1EE95], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE96], NFC: [0x1EE96], NFD: [0x1EE96], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE97], NFC: [0x1EE97], NFD: [0x1EE97], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE98], NFC: [0x1EE98], NFD: [0x1EE98], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0x1EE99], NFC: [0x1EE99], NFD: [0x1EE99], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE9A], NFC: [0x1EE9A], NFD: [0x1EE9A], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EE9B], NFC: [0x1EE9B], NFD: [0x1EE9B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EEA1], NFC: [0x1EEA1], NFD: [0x1EEA1], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EEA2], NFC: [0x1EEA2], NFD: [0x1EEA2], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EEA3], NFC: [0x1EEA3], NFD: [0x1EEA3], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0x1EEA5], NFC: [0x1EEA5], NFD: [0x1EEA5], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0x1EEA6], NFC: [0x1EEA6], NFD: [0x1EEA6], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0x1EEA7], NFC: [0x1EEA7], NFD: [0x1EEA7], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EEA8], NFC: [0x1EEA8], NFD: [0x1EEA8], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EEA9], NFC: [0x1EEA9], NFD: [0x1EEA9], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EEAB], NFC: [0x1EEAB], NFD: [0x1EEAB], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EEAC], NFC: [0x1EEAC], NFD: [0x1EEAC], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EEAD], NFC: [0x1EEAD], NFD: [0x1EEAD], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EEAE], NFC: [0x1EEAE], NFD: [0x1EEAE], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EEAF], NFC: [0x1EEAF], NFD: [0x1EEAF], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EEB0], NFC: [0x1EEB0], NFD: [0x1EEB0], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EEB1], NFC: [0x1EEB1], NFD: [0x1EEB1], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EEB2], NFC: [0x1EEB2], NFD: [0x1EEB2], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EEB3], NFC: [0x1EEB3], NFD: [0x1EEB3], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0x1EEB4], NFC: [0x1EEB4], NFD: [0x1EEB4], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EEB5], NFC: [0x1EEB5], NFD: [0x1EEB5], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EEB6], NFC: [0x1EEB6], NFD: [0x1EEB6], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EEB7], NFC: [0x1EEB7], NFD: [0x1EEB7], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EEB8], NFC: [0x1EEB8], NFD: [0x1EEB8], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0x1EEB9], NFC: [0x1EEB9], NFD: [0x1EEB9], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EEBA], NFC: [0x1EEBA], NFD: [0x1EEBA], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EEBB], NFC: [0x1EEBB], NFD: [0x1EEBB], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1F100], NFC: [0x1F100], NFD: [0x1F100], NFKC: [0x0030, 0x002E], NFKD: [0x0030, 0x002E] }, +{ source: [0x1F101], NFC: [0x1F101], NFD: [0x1F101], NFKC: [0x0030, 0x002C], NFKD: [0x0030, 0x002C] }, +{ source: [0x1F102], NFC: [0x1F102], NFD: [0x1F102], NFKC: [0x0031, 0x002C], NFKD: [0x0031, 0x002C] }, +{ source: [0x1F103], NFC: [0x1F103], NFD: [0x1F103], NFKC: [0x0032, 0x002C], NFKD: [0x0032, 0x002C] }, +{ source: [0x1F104], NFC: [0x1F104], NFD: [0x1F104], NFKC: [0x0033, 0x002C], NFKD: [0x0033, 0x002C] }, +{ source: [0x1F105], NFC: [0x1F105], NFD: [0x1F105], NFKC: [0x0034, 0x002C], NFKD: [0x0034, 0x002C] }, +{ source: [0x1F106], NFC: [0x1F106], NFD: [0x1F106], NFKC: [0x0035, 0x002C], NFKD: [0x0035, 0x002C] }, +{ source: [0x1F107], NFC: [0x1F107], NFD: [0x1F107], NFKC: [0x0036, 0x002C], NFKD: [0x0036, 0x002C] }, +{ source: [0x1F108], NFC: [0x1F108], NFD: [0x1F108], NFKC: [0x0037, 0x002C], NFKD: [0x0037, 0x002C] }, +{ source: [0x1F109], NFC: [0x1F109], NFD: [0x1F109], NFKC: [0x0038, 0x002C], NFKD: [0x0038, 0x002C] }, +{ source: [0x1F10A], NFC: [0x1F10A], NFD: [0x1F10A], NFKC: [0x0039, 0x002C], NFKD: [0x0039, 0x002C] }, +{ source: [0x1F110], NFC: [0x1F110], NFD: [0x1F110], NFKC: [0x0028, 0x0041, 0x0029], NFKD: [0x0028, 0x0041, 0x0029] }, +{ source: [0x1F111], NFC: [0x1F111], NFD: [0x1F111], NFKC: [0x0028, 0x0042, 0x0029], NFKD: [0x0028, 0x0042, 0x0029] }, +{ source: [0x1F112], NFC: [0x1F112], NFD: [0x1F112], NFKC: [0x0028, 0x0043, 0x0029], NFKD: [0x0028, 0x0043, 0x0029] }, +{ source: [0x1F113], NFC: [0x1F113], NFD: [0x1F113], NFKC: [0x0028, 0x0044, 0x0029], NFKD: [0x0028, 0x0044, 0x0029] }, +{ source: [0x1F114], NFC: [0x1F114], NFD: [0x1F114], NFKC: [0x0028, 0x0045, 0x0029], NFKD: [0x0028, 0x0045, 0x0029] }, +{ source: [0x1F115], NFC: [0x1F115], NFD: [0x1F115], NFKC: [0x0028, 0x0046, 0x0029], NFKD: [0x0028, 0x0046, 0x0029] }, +{ source: [0x1F116], NFC: [0x1F116], NFD: [0x1F116], NFKC: [0x0028, 0x0047, 0x0029], NFKD: [0x0028, 0x0047, 0x0029] }, +{ source: [0x1F117], NFC: [0x1F117], NFD: [0x1F117], NFKC: [0x0028, 0x0048, 0x0029], NFKD: [0x0028, 0x0048, 0x0029] }, +{ source: [0x1F118], NFC: [0x1F118], NFD: [0x1F118], NFKC: [0x0028, 0x0049, 0x0029], NFKD: [0x0028, 0x0049, 0x0029] }, +{ source: [0x1F119], NFC: [0x1F119], NFD: [0x1F119], NFKC: [0x0028, 0x004A, 0x0029], NFKD: [0x0028, 0x004A, 0x0029] }, +{ source: [0x1F11A], NFC: [0x1F11A], NFD: [0x1F11A], NFKC: [0x0028, 0x004B, 0x0029], NFKD: [0x0028, 0x004B, 0x0029] }, +{ source: [0x1F11B], NFC: [0x1F11B], NFD: [0x1F11B], NFKC: [0x0028, 0x004C, 0x0029], NFKD: [0x0028, 0x004C, 0x0029] }, +{ source: [0x1F11C], NFC: [0x1F11C], NFD: [0x1F11C], NFKC: [0x0028, 0x004D, 0x0029], NFKD: [0x0028, 0x004D, 0x0029] }, +{ source: [0x1F11D], NFC: [0x1F11D], NFD: [0x1F11D], NFKC: [0x0028, 0x004E, 0x0029], NFKD: [0x0028, 0x004E, 0x0029] }, +{ source: [0x1F11E], NFC: [0x1F11E], NFD: [0x1F11E], NFKC: [0x0028, 0x004F, 0x0029], NFKD: [0x0028, 0x004F, 0x0029] }, +{ source: [0x1F11F], NFC: [0x1F11F], NFD: [0x1F11F], NFKC: [0x0028, 0x0050, 0x0029], NFKD: [0x0028, 0x0050, 0x0029] }, +{ source: [0x1F120], NFC: [0x1F120], NFD: [0x1F120], NFKC: [0x0028, 0x0051, 0x0029], NFKD: [0x0028, 0x0051, 0x0029] }, +{ source: [0x1F121], NFC: [0x1F121], NFD: [0x1F121], NFKC: [0x0028, 0x0052, 0x0029], NFKD: [0x0028, 0x0052, 0x0029] }, +{ source: [0x1F122], NFC: [0x1F122], NFD: [0x1F122], NFKC: [0x0028, 0x0053, 0x0029], NFKD: [0x0028, 0x0053, 0x0029] }, +{ source: [0x1F123], NFC: [0x1F123], NFD: [0x1F123], NFKC: [0x0028, 0x0054, 0x0029], NFKD: [0x0028, 0x0054, 0x0029] }, +{ source: [0x1F124], NFC: [0x1F124], NFD: [0x1F124], NFKC: [0x0028, 0x0055, 0x0029], NFKD: [0x0028, 0x0055, 0x0029] }, +{ source: [0x1F125], NFC: [0x1F125], NFD: [0x1F125], NFKC: [0x0028, 0x0056, 0x0029], NFKD: [0x0028, 0x0056, 0x0029] }, +{ source: [0x1F126], NFC: [0x1F126], NFD: [0x1F126], NFKC: [0x0028, 0x0057, 0x0029], NFKD: [0x0028, 0x0057, 0x0029] }, +{ source: [0x1F127], NFC: [0x1F127], NFD: [0x1F127], NFKC: [0x0028, 0x0058, 0x0029], NFKD: [0x0028, 0x0058, 0x0029] }, +{ source: [0x1F128], NFC: [0x1F128], NFD: [0x1F128], NFKC: [0x0028, 0x0059, 0x0029], NFKD: [0x0028, 0x0059, 0x0029] }, +{ source: [0x1F129], NFC: [0x1F129], NFD: [0x1F129], NFKC: [0x0028, 0x005A, 0x0029], NFKD: [0x0028, 0x005A, 0x0029] }, +{ source: [0x1F12A], NFC: [0x1F12A], NFD: [0x1F12A], NFKC: [0x3014, 0x0053, 0x3015], NFKD: [0x3014, 0x0053, 0x3015] }, +{ source: [0x1F12B], NFC: [0x1F12B], NFD: [0x1F12B], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1F12C], NFC: [0x1F12C], NFD: [0x1F12C], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1F12D], NFC: [0x1F12D], NFD: [0x1F12D], NFKC: [0x0043, 0x0044], NFKD: [0x0043, 0x0044] }, +{ source: [0x1F12E], NFC: [0x1F12E], NFD: [0x1F12E], NFKC: [0x0057, 0x005A], NFKD: [0x0057, 0x005A] }, +{ source: [0x1F130], NFC: [0x1F130], NFD: [0x1F130], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1F131], NFC: [0x1F131], NFD: [0x1F131], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1F132], NFC: [0x1F132], NFD: [0x1F132], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1F133], NFC: [0x1F133], NFD: [0x1F133], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1F134], NFC: [0x1F134], NFD: [0x1F134], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1F135], NFC: [0x1F135], NFD: [0x1F135], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1F136], NFC: [0x1F136], NFD: [0x1F136], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1F137], NFC: [0x1F137], NFD: [0x1F137], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1F138], NFC: [0x1F138], NFD: [0x1F138], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1F139], NFC: [0x1F139], NFD: [0x1F139], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1F13A], NFC: [0x1F13A], NFD: [0x1F13A], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1F13B], NFC: [0x1F13B], NFD: [0x1F13B], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1F13C], NFC: [0x1F13C], NFD: [0x1F13C], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1F13D], NFC: [0x1F13D], NFD: [0x1F13D], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1F13E], NFC: [0x1F13E], NFD: [0x1F13E], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1F13F], NFC: [0x1F13F], NFD: [0x1F13F], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1F140], NFC: [0x1F140], NFD: [0x1F140], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1F141], NFC: [0x1F141], NFD: [0x1F141], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1F142], NFC: [0x1F142], NFD: [0x1F142], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1F143], NFC: [0x1F143], NFD: [0x1F143], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1F144], NFC: [0x1F144], NFD: [0x1F144], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1F145], NFC: [0x1F145], NFD: [0x1F145], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1F146], NFC: [0x1F146], NFD: [0x1F146], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1F147], NFC: [0x1F147], NFD: [0x1F147], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1F148], NFC: [0x1F148], NFD: [0x1F148], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1F149], NFC: [0x1F149], NFD: [0x1F149], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1F14A], NFC: [0x1F14A], NFD: [0x1F14A], NFKC: [0x0048, 0x0056], NFKD: [0x0048, 0x0056] }, +{ source: [0x1F14B], NFC: [0x1F14B], NFD: [0x1F14B], NFKC: [0x004D, 0x0056], NFKD: [0x004D, 0x0056] }, +{ source: [0x1F14C], NFC: [0x1F14C], NFD: [0x1F14C], NFKC: [0x0053, 0x0044], NFKD: [0x0053, 0x0044] }, +{ source: [0x1F14D], NFC: [0x1F14D], NFD: [0x1F14D], NFKC: [0x0053, 0x0053], NFKD: [0x0053, 0x0053] }, +{ source: [0x1F14E], NFC: [0x1F14E], NFD: [0x1F14E], NFKC: [0x0050, 0x0050, 0x0056], NFKD: [0x0050, 0x0050, 0x0056] }, +{ source: [0x1F14F], NFC: [0x1F14F], NFD: [0x1F14F], NFKC: [0x0057, 0x0043], NFKD: [0x0057, 0x0043] }, +{ source: [0x1F16A], NFC: [0x1F16A], NFD: [0x1F16A], NFKC: [0x004D, 0x0043], NFKD: [0x004D, 0x0043] }, +{ source: [0x1F16B], NFC: [0x1F16B], NFD: [0x1F16B], NFKC: [0x004D, 0x0044], NFKD: [0x004D, 0x0044] }, +{ source: [0x1F16C], NFC: [0x1F16C], NFD: [0x1F16C], NFKC: [0x004D, 0x0052], NFKD: [0x004D, 0x0052] }, +{ source: [0x1F190], NFC: [0x1F190], NFD: [0x1F190], NFKC: [0x0044, 0x004A], NFKD: [0x0044, 0x004A] }, +{ source: [0x1F200], NFC: [0x1F200], NFD: [0x1F200], NFKC: [0x307B, 0x304B], NFKD: [0x307B, 0x304B] }, +{ source: [0x1F201], NFC: [0x1F201], NFD: [0x1F201], NFKC: [0x30B3, 0x30B3], NFKD: [0x30B3, 0x30B3] }, +{ source: [0x1F202], NFC: [0x1F202], NFD: [0x1F202], NFKC: [0x30B5], NFKD: [0x30B5] }, +{ source: [0x1F210], NFC: [0x1F210], NFD: [0x1F210], NFKC: [0x624B], NFKD: [0x624B] }, +{ source: [0x1F211], NFC: [0x1F211], NFD: [0x1F211], NFKC: [0x5B57], NFKD: [0x5B57] }, +{ source: [0x1F212], NFC: [0x1F212], NFD: [0x1F212], NFKC: [0x53CC], NFKD: [0x53CC] }, +{ source: [0x1F213], NFC: [0x1F213], NFD: [0x1F213], NFKC: [0x30C7], NFKD: [0x30C6, 0x3099] }, +{ source: [0x1F214], NFC: [0x1F214], NFD: [0x1F214], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x1F215], NFC: [0x1F215], NFD: [0x1F215], NFKC: [0x591A], NFKD: [0x591A] }, +{ source: [0x1F216], NFC: [0x1F216], NFD: [0x1F216], NFKC: [0x89E3], NFKD: [0x89E3] }, +{ source: [0x1F217], NFC: [0x1F217], NFD: [0x1F217], NFKC: [0x5929], NFKD: [0x5929] }, +{ source: [0x1F218], NFC: [0x1F218], NFD: [0x1F218], NFKC: [0x4EA4], NFKD: [0x4EA4] }, +{ source: [0x1F219], NFC: [0x1F219], NFD: [0x1F219], NFKC: [0x6620], NFKD: [0x6620] }, +{ source: [0x1F21A], NFC: [0x1F21A], NFD: [0x1F21A], NFKC: [0x7121], NFKD: [0x7121] }, +{ source: [0x1F21B], NFC: [0x1F21B], NFD: [0x1F21B], NFKC: [0x6599], NFKD: [0x6599] }, +{ source: [0x1F21C], NFC: [0x1F21C], NFD: [0x1F21C], NFKC: [0x524D], NFKD: [0x524D] }, +{ source: [0x1F21D], NFC: [0x1F21D], NFD: [0x1F21D], NFKC: [0x5F8C], NFKD: [0x5F8C] }, +{ source: [0x1F21E], NFC: [0x1F21E], NFD: [0x1F21E], NFKC: [0x518D], NFKD: [0x518D] }, +{ source: [0x1F21F], NFC: [0x1F21F], NFD: [0x1F21F], NFKC: [0x65B0], NFKD: [0x65B0] }, +{ source: [0x1F220], NFC: [0x1F220], NFD: [0x1F220], NFKC: [0x521D], NFKD: [0x521D] }, +{ source: [0x1F221], NFC: [0x1F221], NFD: [0x1F221], NFKC: [0x7D42], NFKD: [0x7D42] }, +{ source: [0x1F222], NFC: [0x1F222], NFD: [0x1F222], NFKC: [0x751F], NFKD: [0x751F] }, +{ source: [0x1F223], NFC: [0x1F223], NFD: [0x1F223], NFKC: [0x8CA9], NFKD: [0x8CA9] }, +{ source: [0x1F224], NFC: [0x1F224], NFD: [0x1F224], NFKC: [0x58F0], NFKD: [0x58F0] }, +{ source: [0x1F225], NFC: [0x1F225], NFD: [0x1F225], NFKC: [0x5439], NFKD: [0x5439] }, +{ source: [0x1F226], NFC: [0x1F226], NFD: [0x1F226], NFKC: [0x6F14], NFKD: [0x6F14] }, +{ source: [0x1F227], NFC: [0x1F227], NFD: [0x1F227], NFKC: [0x6295], NFKD: [0x6295] }, +{ source: [0x1F228], NFC: [0x1F228], NFD: [0x1F228], NFKC: [0x6355], NFKD: [0x6355] }, +{ source: [0x1F229], NFC: [0x1F229], NFD: [0x1F229], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x1F22A], NFC: [0x1F22A], NFD: [0x1F22A], NFKC: [0x4E09], NFKD: [0x4E09] }, +{ source: [0x1F22B], NFC: [0x1F22B], NFD: [0x1F22B], NFKC: [0x904A], NFKD: [0x904A] }, +{ source: [0x1F22C], NFC: [0x1F22C], NFD: [0x1F22C], NFKC: [0x5DE6], NFKD: [0x5DE6] }, +{ source: [0x1F22D], NFC: [0x1F22D], NFD: [0x1F22D], NFKC: [0x4E2D], NFKD: [0x4E2D] }, +{ source: [0x1F22E], NFC: [0x1F22E], NFD: [0x1F22E], NFKC: [0x53F3], NFKD: [0x53F3] }, +{ source: [0x1F22F], NFC: [0x1F22F], NFD: [0x1F22F], NFKC: [0x6307], NFKD: [0x6307] }, +{ source: [0x1F230], NFC: [0x1F230], NFD: [0x1F230], NFKC: [0x8D70], NFKD: [0x8D70] }, +{ source: [0x1F231], NFC: [0x1F231], NFD: [0x1F231], NFKC: [0x6253], NFKD: [0x6253] }, +{ source: [0x1F232], NFC: [0x1F232], NFD: [0x1F232], NFKC: [0x7981], NFKD: [0x7981] }, +{ source: [0x1F233], NFC: [0x1F233], NFD: [0x1F233], NFKC: [0x7A7A], NFKD: [0x7A7A] }, +{ source: [0x1F234], NFC: [0x1F234], NFD: [0x1F234], NFKC: [0x5408], NFKD: [0x5408] }, +{ source: [0x1F235], NFC: [0x1F235], NFD: [0x1F235], NFKC: [0x6E80], NFKD: [0x6E80] }, +{ source: [0x1F236], NFC: [0x1F236], NFD: [0x1F236], NFKC: [0x6709], NFKD: [0x6709] }, +{ source: [0x1F237], NFC: [0x1F237], NFD: [0x1F237], NFKC: [0x6708], NFKD: [0x6708] }, +{ source: [0x1F238], NFC: [0x1F238], NFD: [0x1F238], NFKC: [0x7533], NFKD: [0x7533] }, +{ source: [0x1F239], NFC: [0x1F239], NFD: [0x1F239], NFKC: [0x5272], NFKD: [0x5272] }, +{ source: [0x1F23A], NFC: [0x1F23A], NFD: [0x1F23A], NFKC: [0x55B6], NFKD: [0x55B6] }, +{ source: [0x1F23B], NFC: [0x1F23B], NFD: [0x1F23B], NFKC: [0x914D], NFKD: [0x914D] }, +{ source: [0x1F240], NFC: [0x1F240], NFD: [0x1F240], NFKC: [0x3014, 0x672C, 0x3015], NFKD: [0x3014, 0x672C, 0x3015] }, +{ source: [0x1F241], NFC: [0x1F241], NFD: [0x1F241], NFKC: [0x3014, 0x4E09, 0x3015], NFKD: [0x3014, 0x4E09, 0x3015] }, +{ source: [0x1F242], NFC: [0x1F242], NFD: [0x1F242], NFKC: [0x3014, 0x4E8C, 0x3015], NFKD: [0x3014, 0x4E8C, 0x3015] }, +{ source: [0x1F243], NFC: [0x1F243], NFD: [0x1F243], NFKC: [0x3014, 0x5B89, 0x3015], NFKD: [0x3014, 0x5B89, 0x3015] }, +{ source: [0x1F244], NFC: [0x1F244], NFD: [0x1F244], NFKC: [0x3014, 0x70B9, 0x3015], NFKD: [0x3014, 0x70B9, 0x3015] }, +{ source: [0x1F245], NFC: [0x1F245], NFD: [0x1F245], NFKC: [0x3014, 0x6253, 0x3015], NFKD: [0x3014, 0x6253, 0x3015] }, +{ source: [0x1F246], NFC: [0x1F246], NFD: [0x1F246], NFKC: [0x3014, 0x76D7, 0x3015], NFKD: [0x3014, 0x76D7, 0x3015] }, +{ source: [0x1F247], NFC: [0x1F247], NFD: [0x1F247], NFKC: [0x3014, 0x52DD, 0x3015], NFKD: [0x3014, 0x52DD, 0x3015] }, +{ source: [0x1F248], NFC: [0x1F248], NFD: [0x1F248], NFKC: [0x3014, 0x6557, 0x3015], NFKD: [0x3014, 0x6557, 0x3015] }, +{ source: [0x1F250], NFC: [0x1F250], NFD: [0x1F250], NFKC: [0x5F97], NFKD: [0x5F97] }, +{ source: [0x1F251], NFC: [0x1F251], NFD: [0x1F251], NFKC: [0x53EF], NFKD: [0x53EF] }, +{ source: [0x1FBF0], NFC: [0x1FBF0], NFD: [0x1FBF0], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1FBF1], NFC: [0x1FBF1], NFD: [0x1FBF1], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1FBF2], NFC: [0x1FBF2], NFD: [0x1FBF2], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1FBF3], NFC: [0x1FBF3], NFD: [0x1FBF3], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1FBF4], NFC: [0x1FBF4], NFD: [0x1FBF4], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1FBF5], NFC: [0x1FBF5], NFD: [0x1FBF5], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1FBF6], NFC: [0x1FBF6], NFD: [0x1FBF6], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1FBF7], NFC: [0x1FBF7], NFD: [0x1FBF7], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1FBF8], NFC: [0x1FBF8], NFD: [0x1FBF8], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1FBF9], NFC: [0x1FBF9], NFD: [0x1FBF9], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x2F800], NFC: [0x4E3D], NFD: [0x4E3D], NFKC: [0x4E3D], NFKD: [0x4E3D] }, +{ source: [0x2F801], NFC: [0x4E38], NFD: [0x4E38], NFKC: [0x4E38], NFKD: [0x4E38] }, +{ source: [0x2F802], NFC: [0x4E41], NFD: [0x4E41], NFKC: [0x4E41], NFKD: [0x4E41] }, +{ source: [0x2F803], NFC: [0x20122], NFD: [0x20122], NFKC: [0x20122], NFKD: [0x20122] }, +{ source: [0x2F804], NFC: [0x4F60], NFD: [0x4F60], NFKC: [0x4F60], NFKD: [0x4F60] }, +{ source: [0x2F805], NFC: [0x4FAE], NFD: [0x4FAE], NFKC: [0x4FAE], NFKD: [0x4FAE] }, +{ source: [0x2F806], NFC: [0x4FBB], NFD: [0x4FBB], NFKC: [0x4FBB], NFKD: [0x4FBB] }, +{ source: [0x2F807], NFC: [0x5002], NFD: [0x5002], NFKC: [0x5002], NFKD: [0x5002] }, +{ source: [0x2F808], NFC: [0x507A], NFD: [0x507A], NFKC: [0x507A], NFKD: [0x507A] }, +{ source: [0x2F809], NFC: [0x5099], NFD: [0x5099], NFKC: [0x5099], NFKD: [0x5099] }, +{ source: [0x2F80A], NFC: [0x50E7], NFD: [0x50E7], NFKC: [0x50E7], NFKD: [0x50E7] }, +{ source: [0x2F80B], NFC: [0x50CF], NFD: [0x50CF], NFKC: [0x50CF], NFKD: [0x50CF] }, +{ source: [0x2F80C], NFC: [0x349E], NFD: [0x349E], NFKC: [0x349E], NFKD: [0x349E] }, +{ source: [0x2F80D], NFC: [0x2063A], NFD: [0x2063A], NFKC: [0x2063A], NFKD: [0x2063A] }, +{ source: [0x2F80E], NFC: [0x514D], NFD: [0x514D], NFKC: [0x514D], NFKD: [0x514D] }, +{ source: [0x2F80F], NFC: [0x5154], NFD: [0x5154], NFKC: [0x5154], NFKD: [0x5154] }, +{ source: [0x2F810], NFC: [0x5164], NFD: [0x5164], NFKC: [0x5164], NFKD: [0x5164] }, +{ source: [0x2F811], NFC: [0x5177], NFD: [0x5177], NFKC: [0x5177], NFKD: [0x5177] }, +{ source: [0x2F812], NFC: [0x2051C], NFD: [0x2051C], NFKC: [0x2051C], NFKD: [0x2051C] }, +{ source: [0x2F813], NFC: [0x34B9], NFD: [0x34B9], NFKC: [0x34B9], NFKD: [0x34B9] }, +{ source: [0x2F814], NFC: [0x5167], NFD: [0x5167], NFKC: [0x5167], NFKD: [0x5167] }, +{ source: [0x2F815], NFC: [0x518D], NFD: [0x518D], NFKC: [0x518D], NFKD: [0x518D] }, +{ source: [0x2F816], NFC: [0x2054B], NFD: [0x2054B], NFKC: [0x2054B], NFKD: [0x2054B] }, +{ source: [0x2F817], NFC: [0x5197], NFD: [0x5197], NFKC: [0x5197], NFKD: [0x5197] }, +{ source: [0x2F818], NFC: [0x51A4], NFD: [0x51A4], NFKC: [0x51A4], NFKD: [0x51A4] }, +{ source: [0x2F819], NFC: [0x4ECC], NFD: [0x4ECC], NFKC: [0x4ECC], NFKD: [0x4ECC] }, +{ source: [0x2F81A], NFC: [0x51AC], NFD: [0x51AC], NFKC: [0x51AC], NFKD: [0x51AC] }, +{ source: [0x2F81B], NFC: [0x51B5], NFD: [0x51B5], NFKC: [0x51B5], NFKD: [0x51B5] }, +{ source: [0x2F81C], NFC: [0x291DF], NFD: [0x291DF], NFKC: [0x291DF], NFKD: [0x291DF] }, +{ source: [0x2F81D], NFC: [0x51F5], NFD: [0x51F5], NFKC: [0x51F5], NFKD: [0x51F5] }, +{ source: [0x2F81E], NFC: [0x5203], NFD: [0x5203], NFKC: [0x5203], NFKD: [0x5203] }, +{ source: [0x2F81F], NFC: [0x34DF], NFD: [0x34DF], NFKC: [0x34DF], NFKD: [0x34DF] }, +{ source: [0x2F820], NFC: [0x523B], NFD: [0x523B], NFKC: [0x523B], NFKD: [0x523B] }, +{ source: [0x2F821], NFC: [0x5246], NFD: [0x5246], NFKC: [0x5246], NFKD: [0x5246] }, +{ source: [0x2F822], NFC: [0x5272], NFD: [0x5272], NFKC: [0x5272], NFKD: [0x5272] }, +{ source: [0x2F823], NFC: [0x5277], NFD: [0x5277], NFKC: [0x5277], NFKD: [0x5277] }, +{ source: [0x2F824], NFC: [0x3515], NFD: [0x3515], NFKC: [0x3515], NFKD: [0x3515] }, +{ source: [0x2F825], NFC: [0x52C7], NFD: [0x52C7], NFKC: [0x52C7], NFKD: [0x52C7] }, +{ source: [0x2F826], NFC: [0x52C9], NFD: [0x52C9], NFKC: [0x52C9], NFKD: [0x52C9] }, +{ source: [0x2F827], NFC: [0x52E4], NFD: [0x52E4], NFKC: [0x52E4], NFKD: [0x52E4] }, +{ source: [0x2F828], NFC: [0x52FA], NFD: [0x52FA], NFKC: [0x52FA], NFKD: [0x52FA] }, +{ source: [0x2F829], NFC: [0x5305], NFD: [0x5305], NFKC: [0x5305], NFKD: [0x5305] }, +{ source: [0x2F82A], NFC: [0x5306], NFD: [0x5306], NFKC: [0x5306], NFKD: [0x5306] }, +{ source: [0x2F82B], NFC: [0x5317], NFD: [0x5317], NFKC: [0x5317], NFKD: [0x5317] }, +{ source: [0x2F82C], NFC: [0x5349], NFD: [0x5349], NFKC: [0x5349], NFKD: [0x5349] }, +{ source: [0x2F82D], NFC: [0x5351], NFD: [0x5351], NFKC: [0x5351], NFKD: [0x5351] }, +{ source: [0x2F82E], NFC: [0x535A], NFD: [0x535A], NFKC: [0x535A], NFKD: [0x535A] }, +{ source: [0x2F82F], NFC: [0x5373], NFD: [0x5373], NFKC: [0x5373], NFKD: [0x5373] }, +{ source: [0x2F830], NFC: [0x537D], NFD: [0x537D], NFKC: [0x537D], NFKD: [0x537D] }, +{ source: [0x2F831], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] }, +{ source: [0x2F832], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] }, +{ source: [0x2F833], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] }, +{ source: [0x2F834], NFC: [0x20A2C], NFD: [0x20A2C], NFKC: [0x20A2C], NFKD: [0x20A2C] }, +{ source: [0x2F835], NFC: [0x7070], NFD: [0x7070], NFKC: [0x7070], NFKD: [0x7070] }, +{ source: [0x2F836], NFC: [0x53CA], NFD: [0x53CA], NFKC: [0x53CA], NFKD: [0x53CA] }, +{ source: [0x2F837], NFC: [0x53DF], NFD: [0x53DF], NFKC: [0x53DF], NFKD: [0x53DF] }, +{ source: [0x2F838], NFC: [0x20B63], NFD: [0x20B63], NFKC: [0x20B63], NFKD: [0x20B63] }, +{ source: [0x2F839], NFC: [0x53EB], NFD: [0x53EB], NFKC: [0x53EB], NFKD: [0x53EB] }, +{ source: [0x2F83A], NFC: [0x53F1], NFD: [0x53F1], NFKC: [0x53F1], NFKD: [0x53F1] }, +{ source: [0x2F83B], NFC: [0x5406], NFD: [0x5406], NFKC: [0x5406], NFKD: [0x5406] }, +{ source: [0x2F83C], NFC: [0x549E], NFD: [0x549E], NFKC: [0x549E], NFKD: [0x549E] }, +{ source: [0x2F83D], NFC: [0x5438], NFD: [0x5438], NFKC: [0x5438], NFKD: [0x5438] }, +{ source: [0x2F83E], NFC: [0x5448], NFD: [0x5448], NFKC: [0x5448], NFKD: [0x5448] }, +{ source: [0x2F83F], NFC: [0x5468], NFD: [0x5468], NFKC: [0x5468], NFKD: [0x5468] }, +{ source: [0x2F840], NFC: [0x54A2], NFD: [0x54A2], NFKC: [0x54A2], NFKD: [0x54A2] }, +{ source: [0x2F841], NFC: [0x54F6], NFD: [0x54F6], NFKC: [0x54F6], NFKD: [0x54F6] }, +{ source: [0x2F842], NFC: [0x5510], NFD: [0x5510], NFKC: [0x5510], NFKD: [0x5510] }, +{ source: [0x2F843], NFC: [0x5553], NFD: [0x5553], NFKC: [0x5553], NFKD: [0x5553] }, +{ source: [0x2F844], NFC: [0x5563], NFD: [0x5563], NFKC: [0x5563], NFKD: [0x5563] }, +{ source: [0x2F845], NFC: [0x5584], NFD: [0x5584], NFKC: [0x5584], NFKD: [0x5584] }, +{ source: [0x2F846], NFC: [0x5584], NFD: [0x5584], NFKC: [0x5584], NFKD: [0x5584] }, +{ source: [0x2F847], NFC: [0x5599], NFD: [0x5599], NFKC: [0x5599], NFKD: [0x5599] }, +{ source: [0x2F848], NFC: [0x55AB], NFD: [0x55AB], NFKC: [0x55AB], NFKD: [0x55AB] }, +{ source: [0x2F849], NFC: [0x55B3], NFD: [0x55B3], NFKC: [0x55B3], NFKD: [0x55B3] }, +{ source: [0x2F84A], NFC: [0x55C2], NFD: [0x55C2], NFKC: [0x55C2], NFKD: [0x55C2] }, +{ source: [0x2F84B], NFC: [0x5716], NFD: [0x5716], NFKC: [0x5716], NFKD: [0x5716] }, +{ source: [0x2F84C], NFC: [0x5606], NFD: [0x5606], NFKC: [0x5606], NFKD: [0x5606] }, +{ source: [0x2F84D], NFC: [0x5717], NFD: [0x5717], NFKC: [0x5717], NFKD: [0x5717] }, +{ source: [0x2F84E], NFC: [0x5651], NFD: [0x5651], NFKC: [0x5651], NFKD: [0x5651] }, +{ source: [0x2F84F], NFC: [0x5674], NFD: [0x5674], NFKC: [0x5674], NFKD: [0x5674] }, +{ source: [0x2F850], NFC: [0x5207], NFD: [0x5207], NFKC: [0x5207], NFKD: [0x5207] }, +{ source: [0x2F851], NFC: [0x58EE], NFD: [0x58EE], NFKC: [0x58EE], NFKD: [0x58EE] }, +{ source: [0x2F852], NFC: [0x57CE], NFD: [0x57CE], NFKC: [0x57CE], NFKD: [0x57CE] }, +{ source: [0x2F853], NFC: [0x57F4], NFD: [0x57F4], NFKC: [0x57F4], NFKD: [0x57F4] }, +{ source: [0x2F854], NFC: [0x580D], NFD: [0x580D], NFKC: [0x580D], NFKD: [0x580D] }, +{ source: [0x2F855], NFC: [0x578B], NFD: [0x578B], NFKC: [0x578B], NFKD: [0x578B] }, +{ source: [0x2F856], NFC: [0x5832], NFD: [0x5832], NFKC: [0x5832], NFKD: [0x5832] }, +{ source: [0x2F857], NFC: [0x5831], NFD: [0x5831], NFKC: [0x5831], NFKD: [0x5831] }, +{ source: [0x2F858], NFC: [0x58AC], NFD: [0x58AC], NFKC: [0x58AC], NFKD: [0x58AC] }, +{ source: [0x2F859], NFC: [0x214E4], NFD: [0x214E4], NFKC: [0x214E4], NFKD: [0x214E4] }, +{ source: [0x2F85A], NFC: [0x58F2], NFD: [0x58F2], NFKC: [0x58F2], NFKD: [0x58F2] }, +{ source: [0x2F85B], NFC: [0x58F7], NFD: [0x58F7], NFKC: [0x58F7], NFKD: [0x58F7] }, +{ source: [0x2F85C], NFC: [0x5906], NFD: [0x5906], NFKC: [0x5906], NFKD: [0x5906] }, +{ source: [0x2F85D], NFC: [0x591A], NFD: [0x591A], NFKC: [0x591A], NFKD: [0x591A] }, +{ source: [0x2F85E], NFC: [0x5922], NFD: [0x5922], NFKC: [0x5922], NFKD: [0x5922] }, +{ source: [0x2F85F], NFC: [0x5962], NFD: [0x5962], NFKC: [0x5962], NFKD: [0x5962] }, +{ source: [0x2F860], NFC: [0x216A8], NFD: [0x216A8], NFKC: [0x216A8], NFKD: [0x216A8] }, +{ source: [0x2F861], NFC: [0x216EA], NFD: [0x216EA], NFKC: [0x216EA], NFKD: [0x216EA] }, +{ source: [0x2F862], NFC: [0x59EC], NFD: [0x59EC], NFKC: [0x59EC], NFKD: [0x59EC] }, +{ source: [0x2F863], NFC: [0x5A1B], NFD: [0x5A1B], NFKC: [0x5A1B], NFKD: [0x5A1B] }, +{ source: [0x2F864], NFC: [0x5A27], NFD: [0x5A27], NFKC: [0x5A27], NFKD: [0x5A27] }, +{ source: [0x2F865], NFC: [0x59D8], NFD: [0x59D8], NFKC: [0x59D8], NFKD: [0x59D8] }, +{ source: [0x2F866], NFC: [0x5A66], NFD: [0x5A66], NFKC: [0x5A66], NFKD: [0x5A66] }, +{ source: [0x2F867], NFC: [0x36EE], NFD: [0x36EE], NFKC: [0x36EE], NFKD: [0x36EE] }, +{ source: [0x2F868], NFC: [0x36FC], NFD: [0x36FC], NFKC: [0x36FC], NFKD: [0x36FC] }, +{ source: [0x2F869], NFC: [0x5B08], NFD: [0x5B08], NFKC: [0x5B08], NFKD: [0x5B08] }, +{ source: [0x2F86A], NFC: [0x5B3E], NFD: [0x5B3E], NFKC: [0x5B3E], NFKD: [0x5B3E] }, +{ source: [0x2F86B], NFC: [0x5B3E], NFD: [0x5B3E], NFKC: [0x5B3E], NFKD: [0x5B3E] }, +{ source: [0x2F86C], NFC: [0x219C8], NFD: [0x219C8], NFKC: [0x219C8], NFKD: [0x219C8] }, +{ source: [0x2F86D], NFC: [0x5BC3], NFD: [0x5BC3], NFKC: [0x5BC3], NFKD: [0x5BC3] }, +{ source: [0x2F86E], NFC: [0x5BD8], NFD: [0x5BD8], NFKC: [0x5BD8], NFKD: [0x5BD8] }, +{ source: [0x2F86F], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] }, +{ source: [0x2F870], NFC: [0x5BF3], NFD: [0x5BF3], NFKC: [0x5BF3], NFKD: [0x5BF3] }, +{ source: [0x2F871], NFC: [0x21B18], NFD: [0x21B18], NFKC: [0x21B18], NFKD: [0x21B18] }, +{ source: [0x2F872], NFC: [0x5BFF], NFD: [0x5BFF], NFKC: [0x5BFF], NFKD: [0x5BFF] }, +{ source: [0x2F873], NFC: [0x5C06], NFD: [0x5C06], NFKC: [0x5C06], NFKD: [0x5C06] }, +{ source: [0x2F874], NFC: [0x5F53], NFD: [0x5F53], NFKC: [0x5F53], NFKD: [0x5F53] }, +{ source: [0x2F875], NFC: [0x5C22], NFD: [0x5C22], NFKC: [0x5C22], NFKD: [0x5C22] }, +{ source: [0x2F876], NFC: [0x3781], NFD: [0x3781], NFKC: [0x3781], NFKD: [0x3781] }, +{ source: [0x2F877], NFC: [0x5C60], NFD: [0x5C60], NFKC: [0x5C60], NFKD: [0x5C60] }, +{ source: [0x2F878], NFC: [0x5C6E], NFD: [0x5C6E], NFKC: [0x5C6E], NFKD: [0x5C6E] }, +{ source: [0x2F879], NFC: [0x5CC0], NFD: [0x5CC0], NFKC: [0x5CC0], NFKD: [0x5CC0] }, +{ source: [0x2F87A], NFC: [0x5C8D], NFD: [0x5C8D], NFKC: [0x5C8D], NFKD: [0x5C8D] }, +{ source: [0x2F87B], NFC: [0x21DE4], NFD: [0x21DE4], NFKC: [0x21DE4], NFKD: [0x21DE4] }, +{ source: [0x2F87C], NFC: [0x5D43], NFD: [0x5D43], NFKC: [0x5D43], NFKD: [0x5D43] }, +{ source: [0x2F87D], NFC: [0x21DE6], NFD: [0x21DE6], NFKC: [0x21DE6], NFKD: [0x21DE6] }, +{ source: [0x2F87E], NFC: [0x5D6E], NFD: [0x5D6E], NFKC: [0x5D6E], NFKD: [0x5D6E] }, +{ source: [0x2F87F], NFC: [0x5D6B], NFD: [0x5D6B], NFKC: [0x5D6B], NFKD: [0x5D6B] }, +{ source: [0x2F880], NFC: [0x5D7C], NFD: [0x5D7C], NFKC: [0x5D7C], NFKD: [0x5D7C] }, +{ source: [0x2F881], NFC: [0x5DE1], NFD: [0x5DE1], NFKC: [0x5DE1], NFKD: [0x5DE1] }, +{ source: [0x2F882], NFC: [0x5DE2], NFD: [0x5DE2], NFKC: [0x5DE2], NFKD: [0x5DE2] }, +{ source: [0x2F883], NFC: [0x382F], NFD: [0x382F], NFKC: [0x382F], NFKD: [0x382F] }, +{ source: [0x2F884], NFC: [0x5DFD], NFD: [0x5DFD], NFKC: [0x5DFD], NFKD: [0x5DFD] }, +{ source: [0x2F885], NFC: [0x5E28], NFD: [0x5E28], NFKC: [0x5E28], NFKD: [0x5E28] }, +{ source: [0x2F886], NFC: [0x5E3D], NFD: [0x5E3D], NFKC: [0x5E3D], NFKD: [0x5E3D] }, +{ source: [0x2F887], NFC: [0x5E69], NFD: [0x5E69], NFKC: [0x5E69], NFKD: [0x5E69] }, +{ source: [0x2F888], NFC: [0x3862], NFD: [0x3862], NFKC: [0x3862], NFKD: [0x3862] }, +{ source: [0x2F889], NFC: [0x22183], NFD: [0x22183], NFKC: [0x22183], NFKD: [0x22183] }, +{ source: [0x2F88A], NFC: [0x387C], NFD: [0x387C], NFKC: [0x387C], NFKD: [0x387C] }, +{ source: [0x2F88B], NFC: [0x5EB0], NFD: [0x5EB0], NFKC: [0x5EB0], NFKD: [0x5EB0] }, +{ source: [0x2F88C], NFC: [0x5EB3], NFD: [0x5EB3], NFKC: [0x5EB3], NFKD: [0x5EB3] }, +{ source: [0x2F88D], NFC: [0x5EB6], NFD: [0x5EB6], NFKC: [0x5EB6], NFKD: [0x5EB6] }, +{ source: [0x2F88E], NFC: [0x5ECA], NFD: [0x5ECA], NFKC: [0x5ECA], NFKD: [0x5ECA] }, +{ source: [0x2F88F], NFC: [0x2A392], NFD: [0x2A392], NFKC: [0x2A392], NFKD: [0x2A392] }, +{ source: [0x2F890], NFC: [0x5EFE], NFD: [0x5EFE], NFKC: [0x5EFE], NFKD: [0x5EFE] }, +{ source: [0x2F891], NFC: [0x22331], NFD: [0x22331], NFKC: [0x22331], NFKD: [0x22331] }, +{ source: [0x2F892], NFC: [0x22331], NFD: [0x22331], NFKC: [0x22331], NFKD: [0x22331] }, +{ source: [0x2F893], NFC: [0x8201], NFD: [0x8201], NFKC: [0x8201], NFKD: [0x8201] }, +{ source: [0x2F894], NFC: [0x5F22], NFD: [0x5F22], NFKC: [0x5F22], NFKD: [0x5F22] }, +{ source: [0x2F895], NFC: [0x5F22], NFD: [0x5F22], NFKC: [0x5F22], NFKD: [0x5F22] }, +{ source: [0x2F896], NFC: [0x38C7], NFD: [0x38C7], NFKC: [0x38C7], NFKD: [0x38C7] }, +{ source: [0x2F897], NFC: [0x232B8], NFD: [0x232B8], NFKC: [0x232B8], NFKD: [0x232B8] }, +{ source: [0x2F898], NFC: [0x261DA], NFD: [0x261DA], NFKC: [0x261DA], NFKD: [0x261DA] }, +{ source: [0x2F899], NFC: [0x5F62], NFD: [0x5F62], NFKC: [0x5F62], NFKD: [0x5F62] }, +{ source: [0x2F89A], NFC: [0x5F6B], NFD: [0x5F6B], NFKC: [0x5F6B], NFKD: [0x5F6B] }, +{ source: [0x2F89B], NFC: [0x38E3], NFD: [0x38E3], NFKC: [0x38E3], NFKD: [0x38E3] }, +{ source: [0x2F89C], NFC: [0x5F9A], NFD: [0x5F9A], NFKC: [0x5F9A], NFKD: [0x5F9A] }, +{ source: [0x2F89D], NFC: [0x5FCD], NFD: [0x5FCD], NFKC: [0x5FCD], NFKD: [0x5FCD] }, +{ source: [0x2F89E], NFC: [0x5FD7], NFD: [0x5FD7], NFKC: [0x5FD7], NFKD: [0x5FD7] }, +{ source: [0x2F89F], NFC: [0x5FF9], NFD: [0x5FF9], NFKC: [0x5FF9], NFKD: [0x5FF9] }, +{ source: [0x2F8A0], NFC: [0x6081], NFD: [0x6081], NFKC: [0x6081], NFKD: [0x6081] }, +{ source: [0x2F8A1], NFC: [0x393A], NFD: [0x393A], NFKC: [0x393A], NFKD: [0x393A] }, +{ source: [0x2F8A2], NFC: [0x391C], NFD: [0x391C], NFKC: [0x391C], NFKD: [0x391C] }, +{ source: [0x2F8A3], NFC: [0x6094], NFD: [0x6094], NFKC: [0x6094], NFKD: [0x6094] }, +{ source: [0x2F8A4], NFC: [0x226D4], NFD: [0x226D4], NFKC: [0x226D4], NFKD: [0x226D4] }, +{ source: [0x2F8A5], NFC: [0x60C7], NFD: [0x60C7], NFKC: [0x60C7], NFKD: [0x60C7] }, +{ source: [0x2F8A6], NFC: [0x6148], NFD: [0x6148], NFKC: [0x6148], NFKD: [0x6148] }, +{ source: [0x2F8A7], NFC: [0x614C], NFD: [0x614C], NFKC: [0x614C], NFKD: [0x614C] }, +{ source: [0x2F8A8], NFC: [0x614E], NFD: [0x614E], NFKC: [0x614E], NFKD: [0x614E] }, +{ source: [0x2F8A9], NFC: [0x614C], NFD: [0x614C], NFKC: [0x614C], NFKD: [0x614C] }, +{ source: [0x2F8AA], NFC: [0x617A], NFD: [0x617A], NFKC: [0x617A], NFKD: [0x617A] }, +{ source: [0x2F8AB], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] }, +{ source: [0x2F8AC], NFC: [0x61B2], NFD: [0x61B2], NFKC: [0x61B2], NFKD: [0x61B2] }, +{ source: [0x2F8AD], NFC: [0x61A4], NFD: [0x61A4], NFKC: [0x61A4], NFKD: [0x61A4] }, +{ source: [0x2F8AE], NFC: [0x61AF], NFD: [0x61AF], NFKC: [0x61AF], NFKD: [0x61AF] }, +{ source: [0x2F8AF], NFC: [0x61DE], NFD: [0x61DE], NFKC: [0x61DE], NFKD: [0x61DE] }, +{ source: [0x2F8B0], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] }, +{ source: [0x2F8B1], NFC: [0x61F6], NFD: [0x61F6], NFKC: [0x61F6], NFKD: [0x61F6] }, +{ source: [0x2F8B2], NFC: [0x6210], NFD: [0x6210], NFKC: [0x6210], NFKD: [0x6210] }, +{ source: [0x2F8B3], NFC: [0x621B], NFD: [0x621B], NFKC: [0x621B], NFKD: [0x621B] }, +{ source: [0x2F8B4], NFC: [0x625D], NFD: [0x625D], NFKC: [0x625D], NFKD: [0x625D] }, +{ source: [0x2F8B5], NFC: [0x62B1], NFD: [0x62B1], NFKC: [0x62B1], NFKD: [0x62B1] }, +{ source: [0x2F8B6], NFC: [0x62D4], NFD: [0x62D4], NFKC: [0x62D4], NFKD: [0x62D4] }, +{ source: [0x2F8B7], NFC: [0x6350], NFD: [0x6350], NFKC: [0x6350], NFKD: [0x6350] }, +{ source: [0x2F8B8], NFC: [0x22B0C], NFD: [0x22B0C], NFKC: [0x22B0C], NFKD: [0x22B0C] }, +{ source: [0x2F8B9], NFC: [0x633D], NFD: [0x633D], NFKC: [0x633D], NFKD: [0x633D] }, +{ source: [0x2F8BA], NFC: [0x62FC], NFD: [0x62FC], NFKC: [0x62FC], NFKD: [0x62FC] }, +{ source: [0x2F8BB], NFC: [0x6368], NFD: [0x6368], NFKC: [0x6368], NFKD: [0x6368] }, +{ source: [0x2F8BC], NFC: [0x6383], NFD: [0x6383], NFKC: [0x6383], NFKD: [0x6383] }, +{ source: [0x2F8BD], NFC: [0x63E4], NFD: [0x63E4], NFKC: [0x63E4], NFKD: [0x63E4] }, +{ source: [0x2F8BE], NFC: [0x22BF1], NFD: [0x22BF1], NFKC: [0x22BF1], NFKD: [0x22BF1] }, +{ source: [0x2F8BF], NFC: [0x6422], NFD: [0x6422], NFKC: [0x6422], NFKD: [0x6422] }, +{ source: [0x2F8C0], NFC: [0x63C5], NFD: [0x63C5], NFKC: [0x63C5], NFKD: [0x63C5] }, +{ source: [0x2F8C1], NFC: [0x63A9], NFD: [0x63A9], NFKC: [0x63A9], NFKD: [0x63A9] }, +{ source: [0x2F8C2], NFC: [0x3A2E], NFD: [0x3A2E], NFKC: [0x3A2E], NFKD: [0x3A2E] }, +{ source: [0x2F8C3], NFC: [0x6469], NFD: [0x6469], NFKC: [0x6469], NFKD: [0x6469] }, +{ source: [0x2F8C4], NFC: [0x647E], NFD: [0x647E], NFKC: [0x647E], NFKD: [0x647E] }, +{ source: [0x2F8C5], NFC: [0x649D], NFD: [0x649D], NFKC: [0x649D], NFKD: [0x649D] }, +{ source: [0x2F8C6], NFC: [0x6477], NFD: [0x6477], NFKC: [0x6477], NFKD: [0x6477] }, +{ source: [0x2F8C7], NFC: [0x3A6C], NFD: [0x3A6C], NFKC: [0x3A6C], NFKD: [0x3A6C] }, +{ source: [0x2F8C8], NFC: [0x654F], NFD: [0x654F], NFKC: [0x654F], NFKD: [0x654F] }, +{ source: [0x2F8C9], NFC: [0x656C], NFD: [0x656C], NFKC: [0x656C], NFKD: [0x656C] }, +{ source: [0x2F8CA], NFC: [0x2300A], NFD: [0x2300A], NFKC: [0x2300A], NFKD: [0x2300A] }, +{ source: [0x2F8CB], NFC: [0x65E3], NFD: [0x65E3], NFKC: [0x65E3], NFKD: [0x65E3] }, +{ source: [0x2F8CC], NFC: [0x66F8], NFD: [0x66F8], NFKC: [0x66F8], NFKD: [0x66F8] }, +{ source: [0x2F8CD], NFC: [0x6649], NFD: [0x6649], NFKC: [0x6649], NFKD: [0x6649] }, +{ source: [0x2F8CE], NFC: [0x3B19], NFD: [0x3B19], NFKC: [0x3B19], NFKD: [0x3B19] }, +{ source: [0x2F8CF], NFC: [0x6691], NFD: [0x6691], NFKC: [0x6691], NFKD: [0x6691] }, +{ source: [0x2F8D0], NFC: [0x3B08], NFD: [0x3B08], NFKC: [0x3B08], NFKD: [0x3B08] }, +{ source: [0x2F8D1], NFC: [0x3AE4], NFD: [0x3AE4], NFKC: [0x3AE4], NFKD: [0x3AE4] }, +{ source: [0x2F8D2], NFC: [0x5192], NFD: [0x5192], NFKC: [0x5192], NFKD: [0x5192] }, +{ source: [0x2F8D3], NFC: [0x5195], NFD: [0x5195], NFKC: [0x5195], NFKD: [0x5195] }, +{ source: [0x2F8D4], NFC: [0x6700], NFD: [0x6700], NFKC: [0x6700], NFKD: [0x6700] }, +{ source: [0x2F8D5], NFC: [0x669C], NFD: [0x669C], NFKC: [0x669C], NFKD: [0x669C] }, +{ source: [0x2F8D6], NFC: [0x80AD], NFD: [0x80AD], NFKC: [0x80AD], NFKD: [0x80AD] }, +{ source: [0x2F8D7], NFC: [0x43D9], NFD: [0x43D9], NFKC: [0x43D9], NFKD: [0x43D9] }, +{ source: [0x2F8D8], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] }, +{ source: [0x2F8D9], NFC: [0x671B], NFD: [0x671B], NFKC: [0x671B], NFKD: [0x671B] }, +{ source: [0x2F8DA], NFC: [0x6721], NFD: [0x6721], NFKC: [0x6721], NFKD: [0x6721] }, +{ source: [0x2F8DB], NFC: [0x675E], NFD: [0x675E], NFKC: [0x675E], NFKD: [0x675E] }, +{ source: [0x2F8DC], NFC: [0x6753], NFD: [0x6753], NFKC: [0x6753], NFKD: [0x6753] }, +{ source: [0x2F8DD], NFC: [0x233C3], NFD: [0x233C3], NFKC: [0x233C3], NFKD: [0x233C3] }, +{ source: [0x2F8DE], NFC: [0x3B49], NFD: [0x3B49], NFKC: [0x3B49], NFKD: [0x3B49] }, +{ source: [0x2F8DF], NFC: [0x67FA], NFD: [0x67FA], NFKC: [0x67FA], NFKD: [0x67FA] }, +{ source: [0x2F8E0], NFC: [0x6785], NFD: [0x6785], NFKC: [0x6785], NFKD: [0x6785] }, +{ source: [0x2F8E1], NFC: [0x6852], NFD: [0x6852], NFKC: [0x6852], NFKD: [0x6852] }, +{ source: [0x2F8E2], NFC: [0x6885], NFD: [0x6885], NFKC: [0x6885], NFKD: [0x6885] }, +{ source: [0x2F8E3], NFC: [0x2346D], NFD: [0x2346D], NFKC: [0x2346D], NFKD: [0x2346D] }, +{ source: [0x2F8E4], NFC: [0x688E], NFD: [0x688E], NFKC: [0x688E], NFKD: [0x688E] }, +{ source: [0x2F8E5], NFC: [0x681F], NFD: [0x681F], NFKC: [0x681F], NFKD: [0x681F] }, +{ source: [0x2F8E6], NFC: [0x6914], NFD: [0x6914], NFKC: [0x6914], NFKD: [0x6914] }, +{ source: [0x2F8E7], NFC: [0x3B9D], NFD: [0x3B9D], NFKC: [0x3B9D], NFKD: [0x3B9D] }, +{ source: [0x2F8E8], NFC: [0x6942], NFD: [0x6942], NFKC: [0x6942], NFKD: [0x6942] }, +{ source: [0x2F8E9], NFC: [0x69A3], NFD: [0x69A3], NFKC: [0x69A3], NFKD: [0x69A3] }, +{ source: [0x2F8EA], NFC: [0x69EA], NFD: [0x69EA], NFKC: [0x69EA], NFKD: [0x69EA] }, +{ source: [0x2F8EB], NFC: [0x6AA8], NFD: [0x6AA8], NFKC: [0x6AA8], NFKD: [0x6AA8] }, +{ source: [0x2F8EC], NFC: [0x236A3], NFD: [0x236A3], NFKC: [0x236A3], NFKD: [0x236A3] }, +{ source: [0x2F8ED], NFC: [0x6ADB], NFD: [0x6ADB], NFKC: [0x6ADB], NFKD: [0x6ADB] }, +{ source: [0x2F8EE], NFC: [0x3C18], NFD: [0x3C18], NFKC: [0x3C18], NFKD: [0x3C18] }, +{ source: [0x2F8EF], NFC: [0x6B21], NFD: [0x6B21], NFKC: [0x6B21], NFKD: [0x6B21] }, +{ source: [0x2F8F0], NFC: [0x238A7], NFD: [0x238A7], NFKC: [0x238A7], NFKD: [0x238A7] }, +{ source: [0x2F8F1], NFC: [0x6B54], NFD: [0x6B54], NFKC: [0x6B54], NFKD: [0x6B54] }, +{ source: [0x2F8F2], NFC: [0x3C4E], NFD: [0x3C4E], NFKC: [0x3C4E], NFKD: [0x3C4E] }, +{ source: [0x2F8F3], NFC: [0x6B72], NFD: [0x6B72], NFKC: [0x6B72], NFKD: [0x6B72] }, +{ source: [0x2F8F4], NFC: [0x6B9F], NFD: [0x6B9F], NFKC: [0x6B9F], NFKD: [0x6B9F] }, +{ source: [0x2F8F5], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] }, +{ source: [0x2F8F6], NFC: [0x6BBB], NFD: [0x6BBB], NFKC: [0x6BBB], NFKD: [0x6BBB] }, +{ source: [0x2F8F7], NFC: [0x23A8D], NFD: [0x23A8D], NFKC: [0x23A8D], NFKD: [0x23A8D] }, +{ source: [0x2F8F8], NFC: [0x21D0B], NFD: [0x21D0B], NFKC: [0x21D0B], NFKD: [0x21D0B] }, +{ source: [0x2F8F9], NFC: [0x23AFA], NFD: [0x23AFA], NFKC: [0x23AFA], NFKD: [0x23AFA] }, +{ source: [0x2F8FA], NFC: [0x6C4E], NFD: [0x6C4E], NFKC: [0x6C4E], NFKD: [0x6C4E] }, +{ source: [0x2F8FB], NFC: [0x23CBC], NFD: [0x23CBC], NFKC: [0x23CBC], NFKD: [0x23CBC] }, +{ source: [0x2F8FC], NFC: [0x6CBF], NFD: [0x6CBF], NFKC: [0x6CBF], NFKD: [0x6CBF] }, +{ source: [0x2F8FD], NFC: [0x6CCD], NFD: [0x6CCD], NFKC: [0x6CCD], NFKD: [0x6CCD] }, +{ source: [0x2F8FE], NFC: [0x6C67], NFD: [0x6C67], NFKC: [0x6C67], NFKD: [0x6C67] }, +{ source: [0x2F8FF], NFC: [0x6D16], NFD: [0x6D16], NFKC: [0x6D16], NFKD: [0x6D16] }, +{ source: [0x2F900], NFC: [0x6D3E], NFD: [0x6D3E], NFKC: [0x6D3E], NFKD: [0x6D3E] }, +{ source: [0x2F901], NFC: [0x6D77], NFD: [0x6D77], NFKC: [0x6D77], NFKD: [0x6D77] }, +{ source: [0x2F902], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] }, +{ source: [0x2F903], NFC: [0x6D69], NFD: [0x6D69], NFKC: [0x6D69], NFKD: [0x6D69] }, +{ source: [0x2F904], NFC: [0x6D78], NFD: [0x6D78], NFKC: [0x6D78], NFKD: [0x6D78] }, +{ source: [0x2F905], NFC: [0x6D85], NFD: [0x6D85], NFKC: [0x6D85], NFKD: [0x6D85] }, +{ source: [0x2F906], NFC: [0x23D1E], NFD: [0x23D1E], NFKC: [0x23D1E], NFKD: [0x23D1E] }, +{ source: [0x2F907], NFC: [0x6D34], NFD: [0x6D34], NFKC: [0x6D34], NFKD: [0x6D34] }, +{ source: [0x2F908], NFC: [0x6E2F], NFD: [0x6E2F], NFKC: [0x6E2F], NFKD: [0x6E2F] }, +{ source: [0x2F909], NFC: [0x6E6E], NFD: [0x6E6E], NFKC: [0x6E6E], NFKD: [0x6E6E] }, +{ source: [0x2F90A], NFC: [0x3D33], NFD: [0x3D33], NFKC: [0x3D33], NFKD: [0x3D33] }, +{ source: [0x2F90B], NFC: [0x6ECB], NFD: [0x6ECB], NFKC: [0x6ECB], NFKD: [0x6ECB] }, +{ source: [0x2F90C], NFC: [0x6EC7], NFD: [0x6EC7], NFKC: [0x6EC7], NFKD: [0x6EC7] }, +{ source: [0x2F90D], NFC: [0x23ED1], NFD: [0x23ED1], NFKC: [0x23ED1], NFKD: [0x23ED1] }, +{ source: [0x2F90E], NFC: [0x6DF9], NFD: [0x6DF9], NFKC: [0x6DF9], NFKD: [0x6DF9] }, +{ source: [0x2F90F], NFC: [0x6F6E], NFD: [0x6F6E], NFKC: [0x6F6E], NFKD: [0x6F6E] }, +{ source: [0x2F910], NFC: [0x23F5E], NFD: [0x23F5E], NFKC: [0x23F5E], NFKD: [0x23F5E] }, +{ source: [0x2F911], NFC: [0x23F8E], NFD: [0x23F8E], NFKC: [0x23F8E], NFKD: [0x23F8E] }, +{ source: [0x2F912], NFC: [0x6FC6], NFD: [0x6FC6], NFKC: [0x6FC6], NFKD: [0x6FC6] }, +{ source: [0x2F913], NFC: [0x7039], NFD: [0x7039], NFKC: [0x7039], NFKD: [0x7039] }, +{ source: [0x2F914], NFC: [0x701E], NFD: [0x701E], NFKC: [0x701E], NFKD: [0x701E] }, +{ source: [0x2F915], NFC: [0x701B], NFD: [0x701B], NFKC: [0x701B], NFKD: [0x701B] }, +{ source: [0x2F916], NFC: [0x3D96], NFD: [0x3D96], NFKC: [0x3D96], NFKD: [0x3D96] }, +{ source: [0x2F917], NFC: [0x704A], NFD: [0x704A], NFKC: [0x704A], NFKD: [0x704A] }, +{ source: [0x2F918], NFC: [0x707D], NFD: [0x707D], NFKC: [0x707D], NFKD: [0x707D] }, +{ source: [0x2F919], NFC: [0x7077], NFD: [0x7077], NFKC: [0x7077], NFKD: [0x7077] }, +{ source: [0x2F91A], NFC: [0x70AD], NFD: [0x70AD], NFKC: [0x70AD], NFKD: [0x70AD] }, +{ source: [0x2F91B], NFC: [0x20525], NFD: [0x20525], NFKC: [0x20525], NFKD: [0x20525] }, +{ source: [0x2F91C], NFC: [0x7145], NFD: [0x7145], NFKC: [0x7145], NFKD: [0x7145] }, +{ source: [0x2F91D], NFC: [0x24263], NFD: [0x24263], NFKC: [0x24263], NFKD: [0x24263] }, +{ source: [0x2F91E], NFC: [0x719C], NFD: [0x719C], NFKC: [0x719C], NFKD: [0x719C] }, +{ source: [0x2F91F], NFC: [0x243AB], NFD: [0x243AB], NFKC: [0x243AB], NFKD: [0x243AB] }, +{ source: [0x2F920], NFC: [0x7228], NFD: [0x7228], NFKC: [0x7228], NFKD: [0x7228] }, +{ source: [0x2F921], NFC: [0x7235], NFD: [0x7235], NFKC: [0x7235], NFKD: [0x7235] }, +{ source: [0x2F922], NFC: [0x7250], NFD: [0x7250], NFKC: [0x7250], NFKD: [0x7250] }, +{ source: [0x2F923], NFC: [0x24608], NFD: [0x24608], NFKC: [0x24608], NFKD: [0x24608] }, +{ source: [0x2F924], NFC: [0x7280], NFD: [0x7280], NFKC: [0x7280], NFKD: [0x7280] }, +{ source: [0x2F925], NFC: [0x7295], NFD: [0x7295], NFKC: [0x7295], NFKD: [0x7295] }, +{ source: [0x2F926], NFC: [0x24735], NFD: [0x24735], NFKC: [0x24735], NFKD: [0x24735] }, +{ source: [0x2F927], NFC: [0x24814], NFD: [0x24814], NFKC: [0x24814], NFKD: [0x24814] }, +{ source: [0x2F928], NFC: [0x737A], NFD: [0x737A], NFKC: [0x737A], NFKD: [0x737A] }, +{ source: [0x2F929], NFC: [0x738B], NFD: [0x738B], NFKC: [0x738B], NFKD: [0x738B] }, +{ source: [0x2F92A], NFC: [0x3EAC], NFD: [0x3EAC], NFKC: [0x3EAC], NFKD: [0x3EAC] }, +{ source: [0x2F92B], NFC: [0x73A5], NFD: [0x73A5], NFKC: [0x73A5], NFKD: [0x73A5] }, +{ source: [0x2F92C], NFC: [0x3EB8], NFD: [0x3EB8], NFKC: [0x3EB8], NFKD: [0x3EB8] }, +{ source: [0x2F92D], NFC: [0x3EB8], NFD: [0x3EB8], NFKC: [0x3EB8], NFKD: [0x3EB8] }, +{ source: [0x2F92E], NFC: [0x7447], NFD: [0x7447], NFKC: [0x7447], NFKD: [0x7447] }, +{ source: [0x2F92F], NFC: [0x745C], NFD: [0x745C], NFKC: [0x745C], NFKD: [0x745C] }, +{ source: [0x2F930], NFC: [0x7471], NFD: [0x7471], NFKC: [0x7471], NFKD: [0x7471] }, +{ source: [0x2F931], NFC: [0x7485], NFD: [0x7485], NFKC: [0x7485], NFKD: [0x7485] }, +{ source: [0x2F932], NFC: [0x74CA], NFD: [0x74CA], NFKC: [0x74CA], NFKD: [0x74CA] }, +{ source: [0x2F933], NFC: [0x3F1B], NFD: [0x3F1B], NFKC: [0x3F1B], NFKD: [0x3F1B] }, +{ source: [0x2F934], NFC: [0x7524], NFD: [0x7524], NFKC: [0x7524], NFKD: [0x7524] }, +{ source: [0x2F935], NFC: [0x24C36], NFD: [0x24C36], NFKC: [0x24C36], NFKD: [0x24C36] }, +{ source: [0x2F936], NFC: [0x753E], NFD: [0x753E], NFKC: [0x753E], NFKD: [0x753E] }, +{ source: [0x2F937], NFC: [0x24C92], NFD: [0x24C92], NFKC: [0x24C92], NFKD: [0x24C92] }, +{ source: [0x2F938], NFC: [0x7570], NFD: [0x7570], NFKC: [0x7570], NFKD: [0x7570] }, +{ source: [0x2F939], NFC: [0x2219F], NFD: [0x2219F], NFKC: [0x2219F], NFKD: [0x2219F] }, +{ source: [0x2F93A], NFC: [0x7610], NFD: [0x7610], NFKC: [0x7610], NFKD: [0x7610] }, +{ source: [0x2F93B], NFC: [0x24FA1], NFD: [0x24FA1], NFKC: [0x24FA1], NFKD: [0x24FA1] }, +{ source: [0x2F93C], NFC: [0x24FB8], NFD: [0x24FB8], NFKC: [0x24FB8], NFKD: [0x24FB8] }, +{ source: [0x2F93D], NFC: [0x25044], NFD: [0x25044], NFKC: [0x25044], NFKD: [0x25044] }, +{ source: [0x2F93E], NFC: [0x3FFC], NFD: [0x3FFC], NFKC: [0x3FFC], NFKD: [0x3FFC] }, +{ source: [0x2F93F], NFC: [0x4008], NFD: [0x4008], NFKC: [0x4008], NFKD: [0x4008] }, +{ source: [0x2F940], NFC: [0x76F4], NFD: [0x76F4], NFKC: [0x76F4], NFKD: [0x76F4] }, +{ source: [0x2F941], NFC: [0x250F3], NFD: [0x250F3], NFKC: [0x250F3], NFKD: [0x250F3] }, +{ source: [0x2F942], NFC: [0x250F2], NFD: [0x250F2], NFKC: [0x250F2], NFKD: [0x250F2] }, +{ source: [0x2F943], NFC: [0x25119], NFD: [0x25119], NFKC: [0x25119], NFKD: [0x25119] }, +{ source: [0x2F944], NFC: [0x25133], NFD: [0x25133], NFKC: [0x25133], NFKD: [0x25133] }, +{ source: [0x2F945], NFC: [0x771E], NFD: [0x771E], NFKC: [0x771E], NFKD: [0x771E] }, +{ source: [0x2F946], NFC: [0x771F], NFD: [0x771F], NFKC: [0x771F], NFKD: [0x771F] }, +{ source: [0x2F947], NFC: [0x771F], NFD: [0x771F], NFKC: [0x771F], NFKD: [0x771F] }, +{ source: [0x2F948], NFC: [0x774A], NFD: [0x774A], NFKC: [0x774A], NFKD: [0x774A] }, +{ source: [0x2F949], NFC: [0x4039], NFD: [0x4039], NFKC: [0x4039], NFKD: [0x4039] }, +{ source: [0x2F94A], NFC: [0x778B], NFD: [0x778B], NFKC: [0x778B], NFKD: [0x778B] }, +{ source: [0x2F94B], NFC: [0x4046], NFD: [0x4046], NFKC: [0x4046], NFKD: [0x4046] }, +{ source: [0x2F94C], NFC: [0x4096], NFD: [0x4096], NFKC: [0x4096], NFKD: [0x4096] }, +{ source: [0x2F94D], NFC: [0x2541D], NFD: [0x2541D], NFKC: [0x2541D], NFKD: [0x2541D] }, +{ source: [0x2F94E], NFC: [0x784E], NFD: [0x784E], NFKC: [0x784E], NFKD: [0x784E] }, +{ source: [0x2F94F], NFC: [0x788C], NFD: [0x788C], NFKC: [0x788C], NFKD: [0x788C] }, +{ source: [0x2F950], NFC: [0x78CC], NFD: [0x78CC], NFKC: [0x78CC], NFKD: [0x78CC] }, +{ source: [0x2F951], NFC: [0x40E3], NFD: [0x40E3], NFKC: [0x40E3], NFKD: [0x40E3] }, +{ source: [0x2F952], NFC: [0x25626], NFD: [0x25626], NFKC: [0x25626], NFKD: [0x25626] }, +{ source: [0x2F953], NFC: [0x7956], NFD: [0x7956], NFKC: [0x7956], NFKD: [0x7956] }, +{ source: [0x2F954], NFC: [0x2569A], NFD: [0x2569A], NFKC: [0x2569A], NFKD: [0x2569A] }, +{ source: [0x2F955], NFC: [0x256C5], NFD: [0x256C5], NFKC: [0x256C5], NFKD: [0x256C5] }, +{ source: [0x2F956], NFC: [0x798F], NFD: [0x798F], NFKC: [0x798F], NFKD: [0x798F] }, +{ source: [0x2F957], NFC: [0x79EB], NFD: [0x79EB], NFKC: [0x79EB], NFKD: [0x79EB] }, +{ source: [0x2F958], NFC: [0x412F], NFD: [0x412F], NFKC: [0x412F], NFKD: [0x412F] }, +{ source: [0x2F959], NFC: [0x7A40], NFD: [0x7A40], NFKC: [0x7A40], NFKD: [0x7A40] }, +{ source: [0x2F95A], NFC: [0x7A4A], NFD: [0x7A4A], NFKC: [0x7A4A], NFKD: [0x7A4A] }, +{ source: [0x2F95B], NFC: [0x7A4F], NFD: [0x7A4F], NFKC: [0x7A4F], NFKD: [0x7A4F] }, +{ source: [0x2F95C], NFC: [0x2597C], NFD: [0x2597C], NFKC: [0x2597C], NFKD: [0x2597C] }, +{ source: [0x2F95D], NFC: [0x25AA7], NFD: [0x25AA7], NFKC: [0x25AA7], NFKD: [0x25AA7] }, +{ source: [0x2F95E], NFC: [0x25AA7], NFD: [0x25AA7], NFKC: [0x25AA7], NFKD: [0x25AA7] }, +{ source: [0x2F95F], NFC: [0x7AEE], NFD: [0x7AEE], NFKC: [0x7AEE], NFKD: [0x7AEE] }, +{ source: [0x2F960], NFC: [0x4202], NFD: [0x4202], NFKC: [0x4202], NFKD: [0x4202] }, +{ source: [0x2F961], NFC: [0x25BAB], NFD: [0x25BAB], NFKC: [0x25BAB], NFKD: [0x25BAB] }, +{ source: [0x2F962], NFC: [0x7BC6], NFD: [0x7BC6], NFKC: [0x7BC6], NFKD: [0x7BC6] }, +{ source: [0x2F963], NFC: [0x7BC9], NFD: [0x7BC9], NFKC: [0x7BC9], NFKD: [0x7BC9] }, +{ source: [0x2F964], NFC: [0x4227], NFD: [0x4227], NFKC: [0x4227], NFKD: [0x4227] }, +{ source: [0x2F965], NFC: [0x25C80], NFD: [0x25C80], NFKC: [0x25C80], NFKD: [0x25C80] }, +{ source: [0x2F966], NFC: [0x7CD2], NFD: [0x7CD2], NFKC: [0x7CD2], NFKD: [0x7CD2] }, +{ source: [0x2F967], NFC: [0x42A0], NFD: [0x42A0], NFKC: [0x42A0], NFKD: [0x42A0] }, +{ source: [0x2F968], NFC: [0x7CE8], NFD: [0x7CE8], NFKC: [0x7CE8], NFKD: [0x7CE8] }, +{ source: [0x2F969], NFC: [0x7CE3], NFD: [0x7CE3], NFKC: [0x7CE3], NFKD: [0x7CE3] }, +{ source: [0x2F96A], NFC: [0x7D00], NFD: [0x7D00], NFKC: [0x7D00], NFKD: [0x7D00] }, +{ source: [0x2F96B], NFC: [0x25F86], NFD: [0x25F86], NFKC: [0x25F86], NFKD: [0x25F86] }, +{ source: [0x2F96C], NFC: [0x7D63], NFD: [0x7D63], NFKC: [0x7D63], NFKD: [0x7D63] }, +{ source: [0x2F96D], NFC: [0x4301], NFD: [0x4301], NFKC: [0x4301], NFKD: [0x4301] }, +{ source: [0x2F96E], NFC: [0x7DC7], NFD: [0x7DC7], NFKC: [0x7DC7], NFKD: [0x7DC7] }, +{ source: [0x2F96F], NFC: [0x7E02], NFD: [0x7E02], NFKC: [0x7E02], NFKD: [0x7E02] }, +{ source: [0x2F970], NFC: [0x7E45], NFD: [0x7E45], NFKC: [0x7E45], NFKD: [0x7E45] }, +{ source: [0x2F971], NFC: [0x4334], NFD: [0x4334], NFKC: [0x4334], NFKD: [0x4334] }, +{ source: [0x2F972], NFC: [0x26228], NFD: [0x26228], NFKC: [0x26228], NFKD: [0x26228] }, +{ source: [0x2F973], NFC: [0x26247], NFD: [0x26247], NFKC: [0x26247], NFKD: [0x26247] }, +{ source: [0x2F974], NFC: [0x4359], NFD: [0x4359], NFKC: [0x4359], NFKD: [0x4359] }, +{ source: [0x2F975], NFC: [0x262D9], NFD: [0x262D9], NFKC: [0x262D9], NFKD: [0x262D9] }, +{ source: [0x2F976], NFC: [0x7F7A], NFD: [0x7F7A], NFKC: [0x7F7A], NFKD: [0x7F7A] }, +{ source: [0x2F977], NFC: [0x2633E], NFD: [0x2633E], NFKC: [0x2633E], NFKD: [0x2633E] }, +{ source: [0x2F978], NFC: [0x7F95], NFD: [0x7F95], NFKC: [0x7F95], NFKD: [0x7F95] }, +{ source: [0x2F979], NFC: [0x7FFA], NFD: [0x7FFA], NFKC: [0x7FFA], NFKD: [0x7FFA] }, +{ source: [0x2F97A], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] }, +{ source: [0x2F97B], NFC: [0x264DA], NFD: [0x264DA], NFKC: [0x264DA], NFKD: [0x264DA] }, +{ source: [0x2F97C], NFC: [0x26523], NFD: [0x26523], NFKC: [0x26523], NFKD: [0x26523] }, +{ source: [0x2F97D], NFC: [0x8060], NFD: [0x8060], NFKC: [0x8060], NFKD: [0x8060] }, +{ source: [0x2F97E], NFC: [0x265A8], NFD: [0x265A8], NFKC: [0x265A8], NFKD: [0x265A8] }, +{ source: [0x2F97F], NFC: [0x8070], NFD: [0x8070], NFKC: [0x8070], NFKD: [0x8070] }, +{ source: [0x2F980], NFC: [0x2335F], NFD: [0x2335F], NFKC: [0x2335F], NFKD: [0x2335F] }, +{ source: [0x2F981], NFC: [0x43D5], NFD: [0x43D5], NFKC: [0x43D5], NFKD: [0x43D5] }, +{ source: [0x2F982], NFC: [0x80B2], NFD: [0x80B2], NFKC: [0x80B2], NFKD: [0x80B2] }, +{ source: [0x2F983], NFC: [0x8103], NFD: [0x8103], NFKC: [0x8103], NFKD: [0x8103] }, +{ source: [0x2F984], NFC: [0x440B], NFD: [0x440B], NFKC: [0x440B], NFKD: [0x440B] }, +{ source: [0x2F985], NFC: [0x813E], NFD: [0x813E], NFKC: [0x813E], NFKD: [0x813E] }, +{ source: [0x2F986], NFC: [0x5AB5], NFD: [0x5AB5], NFKC: [0x5AB5], NFKD: [0x5AB5] }, +{ source: [0x2F987], NFC: [0x267A7], NFD: [0x267A7], NFKC: [0x267A7], NFKD: [0x267A7] }, +{ source: [0x2F988], NFC: [0x267B5], NFD: [0x267B5], NFKC: [0x267B5], NFKD: [0x267B5] }, +{ source: [0x2F989], NFC: [0x23393], NFD: [0x23393], NFKC: [0x23393], NFKD: [0x23393] }, +{ source: [0x2F98A], NFC: [0x2339C], NFD: [0x2339C], NFKC: [0x2339C], NFKD: [0x2339C] }, +{ source: [0x2F98B], NFC: [0x8201], NFD: [0x8201], NFKC: [0x8201], NFKD: [0x8201] }, +{ source: [0x2F98C], NFC: [0x8204], NFD: [0x8204], NFKC: [0x8204], NFKD: [0x8204] }, +{ source: [0x2F98D], NFC: [0x8F9E], NFD: [0x8F9E], NFKC: [0x8F9E], NFKD: [0x8F9E] }, +{ source: [0x2F98E], NFC: [0x446B], NFD: [0x446B], NFKC: [0x446B], NFKD: [0x446B] }, +{ source: [0x2F98F], NFC: [0x8291], NFD: [0x8291], NFKC: [0x8291], NFKD: [0x8291] }, +{ source: [0x2F990], NFC: [0x828B], NFD: [0x828B], NFKC: [0x828B], NFKD: [0x828B] }, +{ source: [0x2F991], NFC: [0x829D], NFD: [0x829D], NFKC: [0x829D], NFKD: [0x829D] }, +{ source: [0x2F992], NFC: [0x52B3], NFD: [0x52B3], NFKC: [0x52B3], NFKD: [0x52B3] }, +{ source: [0x2F993], NFC: [0x82B1], NFD: [0x82B1], NFKC: [0x82B1], NFKD: [0x82B1] }, +{ source: [0x2F994], NFC: [0x82B3], NFD: [0x82B3], NFKC: [0x82B3], NFKD: [0x82B3] }, +{ source: [0x2F995], NFC: [0x82BD], NFD: [0x82BD], NFKC: [0x82BD], NFKD: [0x82BD] }, +{ source: [0x2F996], NFC: [0x82E6], NFD: [0x82E6], NFKC: [0x82E6], NFKD: [0x82E6] }, +{ source: [0x2F997], NFC: [0x26B3C], NFD: [0x26B3C], NFKC: [0x26B3C], NFKD: [0x26B3C] }, +{ source: [0x2F998], NFC: [0x82E5], NFD: [0x82E5], NFKC: [0x82E5], NFKD: [0x82E5] }, +{ source: [0x2F999], NFC: [0x831D], NFD: [0x831D], NFKC: [0x831D], NFKD: [0x831D] }, +{ source: [0x2F99A], NFC: [0x8363], NFD: [0x8363], NFKC: [0x8363], NFKD: [0x8363] }, +{ source: [0x2F99B], NFC: [0x83AD], NFD: [0x83AD], NFKC: [0x83AD], NFKD: [0x83AD] }, +{ source: [0x2F99C], NFC: [0x8323], NFD: [0x8323], NFKC: [0x8323], NFKD: [0x8323] }, +{ source: [0x2F99D], NFC: [0x83BD], NFD: [0x83BD], NFKC: [0x83BD], NFKD: [0x83BD] }, +{ source: [0x2F99E], NFC: [0x83E7], NFD: [0x83E7], NFKC: [0x83E7], NFKD: [0x83E7] }, +{ source: [0x2F99F], NFC: [0x8457], NFD: [0x8457], NFKC: [0x8457], NFKD: [0x8457] }, +{ source: [0x2F9A0], NFC: [0x8353], NFD: [0x8353], NFKC: [0x8353], NFKD: [0x8353] }, +{ source: [0x2F9A1], NFC: [0x83CA], NFD: [0x83CA], NFKC: [0x83CA], NFKD: [0x83CA] }, +{ source: [0x2F9A2], NFC: [0x83CC], NFD: [0x83CC], NFKC: [0x83CC], NFKD: [0x83CC] }, +{ source: [0x2F9A3], NFC: [0x83DC], NFD: [0x83DC], NFKC: [0x83DC], NFKD: [0x83DC] }, +{ source: [0x2F9A4], NFC: [0x26C36], NFD: [0x26C36], NFKC: [0x26C36], NFKD: [0x26C36] }, +{ source: [0x2F9A5], NFC: [0x26D6B], NFD: [0x26D6B], NFKC: [0x26D6B], NFKD: [0x26D6B] }, +{ source: [0x2F9A6], NFC: [0x26CD5], NFD: [0x26CD5], NFKC: [0x26CD5], NFKD: [0x26CD5] }, +{ source: [0x2F9A7], NFC: [0x452B], NFD: [0x452B], NFKC: [0x452B], NFKD: [0x452B] }, +{ source: [0x2F9A8], NFC: [0x84F1], NFD: [0x84F1], NFKC: [0x84F1], NFKD: [0x84F1] }, +{ source: [0x2F9A9], NFC: [0x84F3], NFD: [0x84F3], NFKC: [0x84F3], NFKD: [0x84F3] }, +{ source: [0x2F9AA], NFC: [0x8516], NFD: [0x8516], NFKC: [0x8516], NFKD: [0x8516] }, +{ source: [0x2F9AB], NFC: [0x273CA], NFD: [0x273CA], NFKC: [0x273CA], NFKD: [0x273CA] }, +{ source: [0x2F9AC], NFC: [0x8564], NFD: [0x8564], NFKC: [0x8564], NFKD: [0x8564] }, +{ source: [0x2F9AD], NFC: [0x26F2C], NFD: [0x26F2C], NFKC: [0x26F2C], NFKD: [0x26F2C] }, +{ source: [0x2F9AE], NFC: [0x455D], NFD: [0x455D], NFKC: [0x455D], NFKD: [0x455D] }, +{ source: [0x2F9AF], NFC: [0x4561], NFD: [0x4561], NFKC: [0x4561], NFKD: [0x4561] }, +{ source: [0x2F9B0], NFC: [0x26FB1], NFD: [0x26FB1], NFKC: [0x26FB1], NFKD: [0x26FB1] }, +{ source: [0x2F9B1], NFC: [0x270D2], NFD: [0x270D2], NFKC: [0x270D2], NFKD: [0x270D2] }, +{ source: [0x2F9B2], NFC: [0x456B], NFD: [0x456B], NFKC: [0x456B], NFKD: [0x456B] }, +{ source: [0x2F9B3], NFC: [0x8650], NFD: [0x8650], NFKC: [0x8650], NFKD: [0x8650] }, +{ source: [0x2F9B4], NFC: [0x865C], NFD: [0x865C], NFKC: [0x865C], NFKD: [0x865C] }, +{ source: [0x2F9B5], NFC: [0x8667], NFD: [0x8667], NFKC: [0x8667], NFKD: [0x8667] }, +{ source: [0x2F9B6], NFC: [0x8669], NFD: [0x8669], NFKC: [0x8669], NFKD: [0x8669] }, +{ source: [0x2F9B7], NFC: [0x86A9], NFD: [0x86A9], NFKC: [0x86A9], NFKD: [0x86A9] }, +{ source: [0x2F9B8], NFC: [0x8688], NFD: [0x8688], NFKC: [0x8688], NFKD: [0x8688] }, +{ source: [0x2F9B9], NFC: [0x870E], NFD: [0x870E], NFKC: [0x870E], NFKD: [0x870E] }, +{ source: [0x2F9BA], NFC: [0x86E2], NFD: [0x86E2], NFKC: [0x86E2], NFKD: [0x86E2] }, +{ source: [0x2F9BB], NFC: [0x8779], NFD: [0x8779], NFKC: [0x8779], NFKD: [0x8779] }, +{ source: [0x2F9BC], NFC: [0x8728], NFD: [0x8728], NFKC: [0x8728], NFKD: [0x8728] }, +{ source: [0x2F9BD], NFC: [0x876B], NFD: [0x876B], NFKC: [0x876B], NFKD: [0x876B] }, +{ source: [0x2F9BE], NFC: [0x8786], NFD: [0x8786], NFKC: [0x8786], NFKD: [0x8786] }, +{ source: [0x2F9BF], NFC: [0x45D7], NFD: [0x45D7], NFKC: [0x45D7], NFKD: [0x45D7] }, +{ source: [0x2F9C0], NFC: [0x87E1], NFD: [0x87E1], NFKC: [0x87E1], NFKD: [0x87E1] }, +{ source: [0x2F9C1], NFC: [0x8801], NFD: [0x8801], NFKC: [0x8801], NFKD: [0x8801] }, +{ source: [0x2F9C2], NFC: [0x45F9], NFD: [0x45F9], NFKC: [0x45F9], NFKD: [0x45F9] }, +{ source: [0x2F9C3], NFC: [0x8860], NFD: [0x8860], NFKC: [0x8860], NFKD: [0x8860] }, +{ source: [0x2F9C4], NFC: [0x8863], NFD: [0x8863], NFKC: [0x8863], NFKD: [0x8863] }, +{ source: [0x2F9C5], NFC: [0x27667], NFD: [0x27667], NFKC: [0x27667], NFKD: [0x27667] }, +{ source: [0x2F9C6], NFC: [0x88D7], NFD: [0x88D7], NFKC: [0x88D7], NFKD: [0x88D7] }, +{ source: [0x2F9C7], NFC: [0x88DE], NFD: [0x88DE], NFKC: [0x88DE], NFKD: [0x88DE] }, +{ source: [0x2F9C8], NFC: [0x4635], NFD: [0x4635], NFKC: [0x4635], NFKD: [0x4635] }, +{ source: [0x2F9C9], NFC: [0x88FA], NFD: [0x88FA], NFKC: [0x88FA], NFKD: [0x88FA] }, +{ source: [0x2F9CA], NFC: [0x34BB], NFD: [0x34BB], NFKC: [0x34BB], NFKD: [0x34BB] }, +{ source: [0x2F9CB], NFC: [0x278AE], NFD: [0x278AE], NFKC: [0x278AE], NFKD: [0x278AE] }, +{ source: [0x2F9CC], NFC: [0x27966], NFD: [0x27966], NFKC: [0x27966], NFKD: [0x27966] }, +{ source: [0x2F9CD], NFC: [0x46BE], NFD: [0x46BE], NFKC: [0x46BE], NFKD: [0x46BE] }, +{ source: [0x2F9CE], NFC: [0x46C7], NFD: [0x46C7], NFKC: [0x46C7], NFKD: [0x46C7] }, +{ source: [0x2F9CF], NFC: [0x8AA0], NFD: [0x8AA0], NFKC: [0x8AA0], NFKD: [0x8AA0] }, +{ source: [0x2F9D0], NFC: [0x8AED], NFD: [0x8AED], NFKC: [0x8AED], NFKD: [0x8AED] }, +{ source: [0x2F9D1], NFC: [0x8B8A], NFD: [0x8B8A], NFKC: [0x8B8A], NFKD: [0x8B8A] }, +{ source: [0x2F9D2], NFC: [0x8C55], NFD: [0x8C55], NFKC: [0x8C55], NFKD: [0x8C55] }, +{ source: [0x2F9D3], NFC: [0x27CA8], NFD: [0x27CA8], NFKC: [0x27CA8], NFKD: [0x27CA8] }, +{ source: [0x2F9D4], NFC: [0x8CAB], NFD: [0x8CAB], NFKC: [0x8CAB], NFKD: [0x8CAB] }, +{ source: [0x2F9D5], NFC: [0x8CC1], NFD: [0x8CC1], NFKC: [0x8CC1], NFKD: [0x8CC1] }, +{ source: [0x2F9D6], NFC: [0x8D1B], NFD: [0x8D1B], NFKC: [0x8D1B], NFKD: [0x8D1B] }, +{ source: [0x2F9D7], NFC: [0x8D77], NFD: [0x8D77], NFKC: [0x8D77], NFKD: [0x8D77] }, +{ source: [0x2F9D8], NFC: [0x27F2F], NFD: [0x27F2F], NFKC: [0x27F2F], NFKD: [0x27F2F] }, +{ source: [0x2F9D9], NFC: [0x20804], NFD: [0x20804], NFKC: [0x20804], NFKD: [0x20804] }, +{ source: [0x2F9DA], NFC: [0x8DCB], NFD: [0x8DCB], NFKC: [0x8DCB], NFKD: [0x8DCB] }, +{ source: [0x2F9DB], NFC: [0x8DBC], NFD: [0x8DBC], NFKC: [0x8DBC], NFKD: [0x8DBC] }, +{ source: [0x2F9DC], NFC: [0x8DF0], NFD: [0x8DF0], NFKC: [0x8DF0], NFKD: [0x8DF0] }, +{ source: [0x2F9DD], NFC: [0x208DE], NFD: [0x208DE], NFKC: [0x208DE], NFKD: [0x208DE] }, +{ source: [0x2F9DE], NFC: [0x8ED4], NFD: [0x8ED4], NFKC: [0x8ED4], NFKD: [0x8ED4] }, +{ source: [0x2F9DF], NFC: [0x8F38], NFD: [0x8F38], NFKC: [0x8F38], NFKD: [0x8F38] }, +{ source: [0x2F9E0], NFC: [0x285D2], NFD: [0x285D2], NFKC: [0x285D2], NFKD: [0x285D2] }, +{ source: [0x2F9E1], NFC: [0x285ED], NFD: [0x285ED], NFKC: [0x285ED], NFKD: [0x285ED] }, +{ source: [0x2F9E2], NFC: [0x9094], NFD: [0x9094], NFKC: [0x9094], NFKD: [0x9094] }, +{ source: [0x2F9E3], NFC: [0x90F1], NFD: [0x90F1], NFKC: [0x90F1], NFKD: [0x90F1] }, +{ source: [0x2F9E4], NFC: [0x9111], NFD: [0x9111], NFKC: [0x9111], NFKD: [0x9111] }, +{ source: [0x2F9E5], NFC: [0x2872E], NFD: [0x2872E], NFKC: [0x2872E], NFKD: [0x2872E] }, +{ source: [0x2F9E6], NFC: [0x911B], NFD: [0x911B], NFKC: [0x911B], NFKD: [0x911B] }, +{ source: [0x2F9E7], NFC: [0x9238], NFD: [0x9238], NFKC: [0x9238], NFKD: [0x9238] }, +{ source: [0x2F9E8], NFC: [0x92D7], NFD: [0x92D7], NFKC: [0x92D7], NFKD: [0x92D7] }, +{ source: [0x2F9E9], NFC: [0x92D8], NFD: [0x92D8], NFKC: [0x92D8], NFKD: [0x92D8] }, +{ source: [0x2F9EA], NFC: [0x927C], NFD: [0x927C], NFKC: [0x927C], NFKD: [0x927C] }, +{ source: [0x2F9EB], NFC: [0x93F9], NFD: [0x93F9], NFKC: [0x93F9], NFKD: [0x93F9] }, +{ source: [0x2F9EC], NFC: [0x9415], NFD: [0x9415], NFKC: [0x9415], NFKD: [0x9415] }, +{ source: [0x2F9ED], NFC: [0x28BFA], NFD: [0x28BFA], NFKC: [0x28BFA], NFKD: [0x28BFA] }, +{ source: [0x2F9EE], NFC: [0x958B], NFD: [0x958B], NFKC: [0x958B], NFKD: [0x958B] }, +{ source: [0x2F9EF], NFC: [0x4995], NFD: [0x4995], NFKC: [0x4995], NFKD: [0x4995] }, +{ source: [0x2F9F0], NFC: [0x95B7], NFD: [0x95B7], NFKC: [0x95B7], NFKD: [0x95B7] }, +{ source: [0x2F9F1], NFC: [0x28D77], NFD: [0x28D77], NFKC: [0x28D77], NFKD: [0x28D77] }, +{ source: [0x2F9F2], NFC: [0x49E6], NFD: [0x49E6], NFKC: [0x49E6], NFKD: [0x49E6] }, +{ source: [0x2F9F3], NFC: [0x96C3], NFD: [0x96C3], NFKC: [0x96C3], NFKD: [0x96C3] }, +{ source: [0x2F9F4], NFC: [0x5DB2], NFD: [0x5DB2], NFKC: [0x5DB2], NFKD: [0x5DB2] }, +{ source: [0x2F9F5], NFC: [0x9723], NFD: [0x9723], NFKC: [0x9723], NFKD: [0x9723] }, +{ source: [0x2F9F6], NFC: [0x29145], NFD: [0x29145], NFKC: [0x29145], NFKD: [0x29145] }, +{ source: [0x2F9F7], NFC: [0x2921A], NFD: [0x2921A], NFKC: [0x2921A], NFKD: [0x2921A] }, +{ source: [0x2F9F8], NFC: [0x4A6E], NFD: [0x4A6E], NFKC: [0x4A6E], NFKD: [0x4A6E] }, +{ source: [0x2F9F9], NFC: [0x4A76], NFD: [0x4A76], NFKC: [0x4A76], NFKD: [0x4A76] }, +{ source: [0x2F9FA], NFC: [0x97E0], NFD: [0x97E0], NFKC: [0x97E0], NFKD: [0x97E0] }, +{ source: [0x2F9FB], NFC: [0x2940A], NFD: [0x2940A], NFKC: [0x2940A], NFKD: [0x2940A] }, +{ source: [0x2F9FC], NFC: [0x4AB2], NFD: [0x4AB2], NFKC: [0x4AB2], NFKD: [0x4AB2] }, +{ source: [0x2F9FD], NFC: [0x29496], NFD: [0x29496], NFKC: [0x29496], NFKD: [0x29496] }, +{ source: [0x2F9FE], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] }, +{ source: [0x2F9FF], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] }, +{ source: [0x2FA00], NFC: [0x9829], NFD: [0x9829], NFKC: [0x9829], NFKD: [0x9829] }, +{ source: [0x2FA01], NFC: [0x295B6], NFD: [0x295B6], NFKC: [0x295B6], NFKD: [0x295B6] }, +{ source: [0x2FA02], NFC: [0x98E2], NFD: [0x98E2], NFKC: [0x98E2], NFKD: [0x98E2] }, +{ source: [0x2FA03], NFC: [0x4B33], NFD: [0x4B33], NFKC: [0x4B33], NFKD: [0x4B33] }, +{ source: [0x2FA04], NFC: [0x9929], NFD: [0x9929], NFKC: [0x9929], NFKD: [0x9929] }, +{ source: [0x2FA05], NFC: [0x99A7], NFD: [0x99A7], NFKC: [0x99A7], NFKD: [0x99A7] }, +{ source: [0x2FA06], NFC: [0x99C2], NFD: [0x99C2], NFKC: [0x99C2], NFKD: [0x99C2] }, +{ source: [0x2FA07], NFC: [0x99FE], NFD: [0x99FE], NFKC: [0x99FE], NFKD: [0x99FE] }, +{ source: [0x2FA08], NFC: [0x4BCE], NFD: [0x4BCE], NFKC: [0x4BCE], NFKD: [0x4BCE] }, +{ source: [0x2FA09], NFC: [0x29B30], NFD: [0x29B30], NFKC: [0x29B30], NFKD: [0x29B30] }, +{ source: [0x2FA0A], NFC: [0x9B12], NFD: [0x9B12], NFKC: [0x9B12], NFKD: [0x9B12] }, +{ source: [0x2FA0B], NFC: [0x9C40], NFD: [0x9C40], NFKC: [0x9C40], NFKD: [0x9C40] }, +{ source: [0x2FA0C], NFC: [0x9CFD], NFD: [0x9CFD], NFKC: [0x9CFD], NFKD: [0x9CFD] }, +{ source: [0x2FA0D], NFC: [0x4CCE], NFD: [0x4CCE], NFKC: [0x4CCE], NFKD: [0x4CCE] }, +{ source: [0x2FA0E], NFC: [0x4CED], NFD: [0x4CED], NFKC: [0x4CED], NFKD: [0x4CED] }, +{ source: [0x2FA0F], NFC: [0x9D67], NFD: [0x9D67], NFKC: [0x9D67], NFKD: [0x9D67] }, +{ source: [0x2FA10], NFC: [0x2A0CE], NFD: [0x2A0CE], NFKC: [0x2A0CE], NFKD: [0x2A0CE] }, +{ source: [0x2FA11], NFC: [0x4CF8], NFD: [0x4CF8], NFKC: [0x4CF8], NFKD: [0x4CF8] }, +{ source: [0x2FA12], NFC: [0x2A105], NFD: [0x2A105], NFKC: [0x2A105], NFKD: [0x2A105] }, +{ source: [0x2FA13], NFC: [0x2A20E], NFD: [0x2A20E], NFKC: [0x2A20E], NFKD: [0x2A20E] }, +{ source: [0x2FA14], NFC: [0x2A291], NFD: [0x2A291], NFKC: [0x2A291], NFKD: [0x2A291] }, +{ source: [0x2FA15], NFC: [0x9EBB], NFD: [0x9EBB], NFKC: [0x9EBB], NFKD: [0x9EBB] }, +{ source: [0x2FA16], NFC: [0x4D56], NFD: [0x4D56], NFKC: [0x4D56], NFKD: [0x4D56] }, +{ source: [0x2FA17], NFC: [0x9EF9], NFD: [0x9EF9], NFKC: [0x9EF9], NFKD: [0x9EF9] }, +{ source: [0x2FA18], NFC: [0x9EFE], NFD: [0x9EFE], NFKC: [0x9EFE], NFKD: [0x9EFE] }, +{ source: [0x2FA19], NFC: [0x9F05], NFD: [0x9F05], NFKC: [0x9F05], NFKD: [0x9F05] }, +{ source: [0x2FA1A], NFC: [0x9F0F], NFD: [0x9F0F], NFKC: [0x9F0F], NFKD: [0x9F0F] }, +{ source: [0x2FA1B], NFC: [0x9F16], NFD: [0x9F16], NFKC: [0x9F16], NFKD: [0x9F16] }, +{ source: [0x2FA1C], NFC: [0x9F3B], NFD: [0x9F3B], NFKC: [0x9F3B], NFKD: [0x9F3B] }, +{ source: [0x2FA1D], NFC: [0x2A600], NFD: [0x2A600], NFKC: [0x2A600], NFKD: [0x2A600] } +]; +/* Part2 # Canonical Order Test */ +var tests_part2 = [ +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0300, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0300, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0301, 0x0062], NFC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0301, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0302, 0x0062], NFC: [0x00E0, 0x05AE, 0x0302, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0302, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0302, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0302, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0302, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EA7, 0x05AE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0302, 0x0300, 0x0315, 0x0062], NFKC: [0x1EA7, 0x05AE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0302, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0303, 0x0062], NFC: [0x00E0, 0x05AE, 0x0303, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0303, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0303, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0303, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0303, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E3, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0303, 0x0300, 0x0315, 0x0062], NFKC: [0x00E3, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0303, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0304, 0x0062], NFC: [0x00E0, 0x05AE, 0x0304, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0304, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0304, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0304, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0304, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0101, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0304, 0x0300, 0x0315, 0x0062], NFKC: [0x0101, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0304, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0305, 0x0062], NFC: [0x00E0, 0x05AE, 0x0305, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0305, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0305, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0305, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0305, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0306, 0x0062], NFC: [0x00E0, 0x05AE, 0x0306, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0306, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0306, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0306, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0306, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EB1, 0x05AE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0306, 0x0300, 0x0315, 0x0062], NFKC: [0x1EB1, 0x05AE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0306, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0307, 0x0062], NFC: [0x00E0, 0x05AE, 0x0307, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0307, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0307, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0307, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0307, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0227, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0307, 0x0300, 0x0315, 0x0062], NFKC: [0x0227, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0307, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0308, 0x0062], NFC: [0x00E0, 0x05AE, 0x0308, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0308, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0308, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E4, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0308, 0x0300, 0x0315, 0x0062], NFKC: [0x00E4, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0308, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0309, 0x0062], NFC: [0x00E0, 0x05AE, 0x0309, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0309, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0309, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0309, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0309, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EA3, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0309, 0x0300, 0x0315, 0x0062], NFKC: [0x1EA3, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0309, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030A, 0x0062], NFC: [0x00E0, 0x05AE, 0x030A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E5, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030A, 0x0300, 0x0315, 0x0062], NFKC: [0x00E5, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030B, 0x0062], NFC: [0x00E0, 0x05AE, 0x030B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030C, 0x0062], NFC: [0x00E0, 0x05AE, 0x030C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x01CE, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030C, 0x0300, 0x0315, 0x0062], NFKC: [0x01CE, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030D, 0x0062], NFC: [0x00E0, 0x05AE, 0x030D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030E, 0x0062], NFC: [0x00E0, 0x05AE, 0x030E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030F, 0x0062], NFC: [0x00E0, 0x05AE, 0x030F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0201, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030F, 0x0300, 0x0315, 0x0062], NFKC: [0x0201, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0310, 0x0062], NFC: [0x00E0, 0x05AE, 0x0310, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0310, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0310, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0310, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0310, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0311, 0x0062], NFC: [0x00E0, 0x05AE, 0x0311, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0311, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0311, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0311, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0311, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0203, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0311, 0x0300, 0x0315, 0x0062], NFKC: [0x0203, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0311, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0312, 0x0062], NFC: [0x00E0, 0x05AE, 0x0312, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0312, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0312, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0312, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0312, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0313, 0x0062], NFC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0313, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0314, 0x0062], NFC: [0x00E0, 0x05AE, 0x0314, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0314, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0314, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0314, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0314, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x0315, 0x0062], NFC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x0315, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0316, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0316, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0317, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0317, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0317, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0317, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0317, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0317, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0317, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0317, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0317, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0317, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0318, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0318, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0318, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0318, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0318, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0318, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0318, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0318, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0318, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0318, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0319, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0319, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0319, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0319, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0319, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0319, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0319, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0319, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0319, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0319, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x031A, 0x0062], NFC: [0x00E0, 0x0315, 0x031A, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x031A, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x031A, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x031A, 0x035C, 0x0062] }, +{ source: [0x0061, 0x031A, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x031A, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x031A, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x031A, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x031A, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x031B, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x031B, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x031C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x031C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x031C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x031C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x031C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x031C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x031C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x031C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x031C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x031D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x031D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x031D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x031D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x031D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x031D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x031D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x031D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x031D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x031E, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x031E, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x031E, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x031E, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x031E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031E, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x031E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x031E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x031E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x031E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x031F, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x031F, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x031F, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x031F, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x031F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031F, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x031F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x031F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x031F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x031F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0320, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0320, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0320, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0320, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0320, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0320, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0320, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0320, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0320, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0320, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0321, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0321, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0322, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0322, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0323, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0323, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0323, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0323, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0323, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0323, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x1EA1, 0x1DFA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0323, 0x0316, 0x059A, 0x0062], NFKC: [0x1EA1, 0x1DFA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0323, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0324, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0324, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0324, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0324, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0324, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0324, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0324, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0324, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0324, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0324, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0325, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0325, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0325, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0325, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0325, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0325, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x1E01, 0x1DFA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0325, 0x0316, 0x059A, 0x0062], NFKC: [0x1E01, 0x1DFA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0325, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0326, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0326, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0326, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0326, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0326, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0326, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0326, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0326, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0326, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0326, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0327, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0327, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0328, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0328, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0105, 0x0F74, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0328, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0105, 0x0F74, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0328, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0329, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0329, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0329, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0329, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0329, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0329, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0329, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0329, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0329, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0329, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x032A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x032A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x032A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x032A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x032A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x032A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x032A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x032A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x032A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x032B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x032B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x032B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x032B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x032B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x032B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x032B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x032B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x032B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x032C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x032C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x032C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x032C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x032C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x032C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x032C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x032C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x032C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x032D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x032D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x032D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x032D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x032D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x032D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x032D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x032D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x032D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x032E, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x032E, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x032E, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x032E, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x032E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032E, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x032E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x032E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x032E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x032E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x032F, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x032F, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x032F, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x032F, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x032F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032F, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x032F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x032F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x032F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x032F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0330, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0330, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0330, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0330, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0330, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0330, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0330, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0330, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0330, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0330, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0331, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0331, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0331, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0331, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0331, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0331, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0331, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0331, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0331, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0331, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0332, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0332, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0332, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0332, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0332, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0332, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0332, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0332, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0332, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0332, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0333, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0333, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0333, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0333, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0333, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0333, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0333, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0333, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0333, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0333, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0334, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x0335, 0x0062], NFC: [0x0061, 0x0334, 0x0335, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x0335, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x0335, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x0335, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0335, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x0335, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x0335, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0335, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0335, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x0336, 0x0062], NFC: [0x0061, 0x0334, 0x0336, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x0336, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x0336, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x0336, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0336, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x0336, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x0336, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0336, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0336, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x0337, 0x0062], NFC: [0x0061, 0x0334, 0x0337, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x0337, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x0337, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x0337, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0337, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x0337, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x0337, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0337, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0337, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x0338, 0x0062], NFC: [0x0061, 0x0334, 0x0338, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x0338, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x0338, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x0338, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0338, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x0338, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x0338, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0338, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0338, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0339, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0339, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0339, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0339, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0339, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0339, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0339, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0339, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0339, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0339, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x033A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x033A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x033A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x033A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x033A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x033A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x033A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x033A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x033A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x033A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x033B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x033B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x033B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x033B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x033B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x033B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x033B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x033B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x033B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x033B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x033C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x033C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x033C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x033C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x033C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x033C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x033C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x033C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x033C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x033C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033D, 0x0062], NFC: [0x00E0, 0x05AE, 0x033D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x033D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033E, 0x0062], NFC: [0x00E0, 0x05AE, 0x033E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x033E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033F, 0x0062], NFC: [0x00E0, 0x05AE, 0x033F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x033F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0340, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0340, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0341, 0x0062], NFC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0341, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0342, 0x0062], NFC: [0x00E0, 0x05AE, 0x0342, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0342, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0342, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0342, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0342, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0343, 0x0062], NFC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0343, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0344, 0x0062], NFC: [0x00E0, 0x05AE, 0x0308, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0308, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0301, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0344, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E4, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0308, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E4, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0308, 0x0301, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x0345, 0x0062], NFC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0345, 0x0345, 0x035D, 0x0062], NFC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0346, 0x0062], NFC: [0x00E0, 0x05AE, 0x0346, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0346, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0346, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0346, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0346, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0347, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0347, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0347, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0347, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0347, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0347, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0347, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0347, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0347, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0347, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0348, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0348, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0348, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0348, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0348, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0348, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0348, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0348, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0348, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0348, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0349, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0349, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0349, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0349, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0349, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0349, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0349, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0349, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0349, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0349, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034A, 0x0062], NFC: [0x00E0, 0x05AE, 0x034A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x034A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034B, 0x0062], NFC: [0x00E0, 0x05AE, 0x034B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x034B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034C, 0x0062], NFC: [0x00E0, 0x05AE, 0x034C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x034C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x034D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x034D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x034D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x034D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x034D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x034D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x034D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x034D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x034D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x034D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x034E, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x034E, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x034E, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x034E, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x034E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x034E, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x034E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x034E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x034E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x034E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0350, 0x0062], NFC: [0x00E0, 0x05AE, 0x0350, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0350, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0350, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0350, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0350, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0351, 0x0062], NFC: [0x00E0, 0x05AE, 0x0351, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0351, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0351, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0351, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0351, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0352, 0x0062], NFC: [0x00E0, 0x05AE, 0x0352, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0352, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0352, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0352, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0352, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0353, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0353, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0353, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0353, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0353, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0353, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0353, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0353, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0353, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0353, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0354, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0354, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0354, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0354, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0354, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0354, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0354, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0354, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0354, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0354, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0355, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0355, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0355, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0355, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0355, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0355, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0355, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0355, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0355, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0355, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0356, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0356, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0356, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0356, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0356, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0356, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0356, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0356, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0356, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0356, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0357, 0x0062], NFC: [0x00E0, 0x05AE, 0x0357, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0357, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0357, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0357, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0357, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x0358, 0x0062], NFC: [0x00E0, 0x0315, 0x0358, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0358, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0358, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0358, 0x035C, 0x0062] }, +{ source: [0x0061, 0x0358, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x0358, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0358, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0358, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0358, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0359, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0359, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0359, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0359, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0359, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0359, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0359, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0359, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0359, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0359, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x035A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x035A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x035A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x035A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x035A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x035A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x035A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x035A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x035A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x035A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x035B, 0x0062], NFC: [0x00E0, 0x05AE, 0x035B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x035B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x035B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x035B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x035C, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x035C, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x035D, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035D, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x035E, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035E, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x035F, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062] }, +{ source: [0x0061, 0x035F, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x0360, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0360, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x0361, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0361, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x0362, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0362, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0363, 0x0062], NFC: [0x00E0, 0x05AE, 0x0363, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0363, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0363, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0363, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0363, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0364, 0x0062], NFC: [0x00E0, 0x05AE, 0x0364, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0364, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0364, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0364, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0364, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0365, 0x0062], NFC: [0x00E0, 0x05AE, 0x0365, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0365, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0365, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0365, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0365, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0366, 0x0062], NFC: [0x00E0, 0x05AE, 0x0366, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0366, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0366, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0366, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0366, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0367, 0x0062], NFC: [0x00E0, 0x05AE, 0x0367, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0367, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0367, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0367, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0367, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0368, 0x0062], NFC: [0x00E0, 0x05AE, 0x0368, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0368, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0368, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0368, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0368, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0369, 0x0062], NFC: [0x00E0, 0x05AE, 0x0369, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0369, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0369, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0369, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0369, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036A, 0x0062], NFC: [0x00E0, 0x05AE, 0x036A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036B, 0x0062], NFC: [0x00E0, 0x05AE, 0x036B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036C, 0x0062], NFC: [0x00E0, 0x05AE, 0x036C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036D, 0x0062], NFC: [0x00E0, 0x05AE, 0x036D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036E, 0x0062], NFC: [0x00E0, 0x05AE, 0x036E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036F, 0x0062], NFC: [0x00E0, 0x05AE, 0x036F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0483, 0x0062], NFC: [0x00E0, 0x05AE, 0x0483, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0483, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0483, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0483, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0483, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0484, 0x0062], NFC: [0x00E0, 0x05AE, 0x0484, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0484, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0484, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0484, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0484, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0485, 0x0062], NFC: [0x00E0, 0x05AE, 0x0485, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0485, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0485, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0485, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0485, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0486, 0x0062], NFC: [0x00E0, 0x05AE, 0x0486, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0486, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0486, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0486, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0486, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0487, 0x0062], NFC: [0x00E0, 0x05AE, 0x0487, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0487, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0487, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0487, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0487, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0591, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0591, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0591, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0591, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0591, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0591, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0591, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0591, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0591, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0591, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0592, 0x0062], NFC: [0x00E0, 0x05AE, 0x0592, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0592, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0592, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0592, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0592, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0593, 0x0062], NFC: [0x00E0, 0x05AE, 0x0593, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0593, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0593, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0593, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0593, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0594, 0x0062], NFC: [0x00E0, 0x05AE, 0x0594, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0594, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0594, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0594, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0594, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0595, 0x0062], NFC: [0x00E0, 0x05AE, 0x0595, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0595, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0595, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0595, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0595, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0596, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0596, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0596, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0596, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0596, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0596, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0596, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0596, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0596, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0596, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0597, 0x0062], NFC: [0x00E0, 0x05AE, 0x0597, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0597, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0597, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0597, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0597, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0598, 0x0062], NFC: [0x00E0, 0x05AE, 0x0598, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0598, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0598, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0598, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0598, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0599, 0x0062], NFC: [0x00E0, 0x05AE, 0x0599, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0599, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0599, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0599, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0599, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x059A, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x059A, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x059B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x059B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x059B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x059B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x059B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x059B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x059B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x059B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x059B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059C, 0x0062], NFC: [0x00E0, 0x05AE, 0x059C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059D, 0x0062], NFC: [0x00E0, 0x05AE, 0x059D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059E, 0x0062], NFC: [0x00E0, 0x05AE, 0x059E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059F, 0x0062], NFC: [0x00E0, 0x05AE, 0x059F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A0, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A1, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05A2, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05A2, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05A2, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05A2, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05A2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A2, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05A2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05A2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05A2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05A2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05A3, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05A3, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05A3, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05A3, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05A3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A3, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05A3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05A3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05A3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05A3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05A4, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05A4, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05A4, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05A4, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05A4, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A4, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05A4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05A4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05A4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05A4, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05A5, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05A5, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05A5, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05A5, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05A5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A5, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05A5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05A5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05A5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05A5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05A6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05A6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05A6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05A6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05A6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05A6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05A6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05A6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05A6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05A7, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05A7, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05A7, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05A7, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05A7, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A7, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05A7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05A7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05A7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05A7, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A8, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A9, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05AA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05AA, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05AA, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05AA, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05AA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05AA, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05AA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05AA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05AA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05AA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AB, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05AB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AC, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05AC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x05AD, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062] }, +{ source: [0x0061, 0x05AD, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x05AE, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x05AE, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AF, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05AF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B1, 0x05B0, 0x094D, 0x05B0, 0x0062], NFC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x05B1, 0x05B0, 0x094D, 0x0062], NFC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062] }, +{ source: [0x0061, 0x05B2, 0x05B1, 0x05B0, 0x05B1, 0x0062], NFC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062] }, +{ source: [0x0061, 0x05B1, 0x05B2, 0x05B1, 0x05B0, 0x0062], NFC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062] }, +{ source: [0x0061, 0x05B3, 0x05B2, 0x05B1, 0x05B2, 0x0062], NFC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062] }, +{ source: [0x0061, 0x05B2, 0x05B3, 0x05B2, 0x05B1, 0x0062], NFC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062] }, +{ source: [0x0061, 0x05B4, 0x05B3, 0x05B2, 0x05B3, 0x0062], NFC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062] }, +{ source: [0x0061, 0x05B3, 0x05B4, 0x05B3, 0x05B2, 0x0062], NFC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062] }, +{ source: [0x0061, 0x05B5, 0x05B4, 0x05B3, 0x05B4, 0x0062], NFC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062] }, +{ source: [0x0061, 0x05B4, 0x05B5, 0x05B4, 0x05B3, 0x0062], NFC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062] }, +{ source: [0x0061, 0x05B6, 0x05B5, 0x05B4, 0x05B5, 0x0062], NFC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062] }, +{ source: [0x0061, 0x05B5, 0x05B6, 0x05B5, 0x05B4, 0x0062], NFC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062] }, +{ source: [0x0061, 0x05B7, 0x05B6, 0x05B5, 0x05B6, 0x0062], NFC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062] }, +{ source: [0x0061, 0x05B6, 0x05B7, 0x05B6, 0x05B5, 0x0062], NFC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062] }, +{ source: [0x0061, 0x05B8, 0x05B7, 0x05B6, 0x05B7, 0x0062], NFC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062] }, +{ source: [0x0061, 0x05B7, 0x05B8, 0x05B7, 0x05B6, 0x0062], NFC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062] }, +{ source: [0x0061, 0x05B9, 0x05B8, 0x05B7, 0x05B8, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x05B8, 0x05B9, 0x05B8, 0x05B7, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x05BB, 0x05B9, 0x05B8, 0x05B9, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05B9, 0x05BB, 0x05B9, 0x05B8, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05BB, 0x05B9, 0x05B8, 0x05BA, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05BA, 0x05BB, 0x05B9, 0x05B8, 0x0062], NFC: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05BC, 0x05BB, 0x05B9, 0x05BB, 0x0062], NFC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062] }, +{ source: [0x0061, 0x05BB, 0x05BC, 0x05BB, 0x05B9, 0x0062], NFC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062] }, +{ source: [0x0061, 0x05BD, 0x05BC, 0x05BB, 0x05BC, 0x0062], NFC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062] }, +{ source: [0x0061, 0x05BC, 0x05BD, 0x05BC, 0x05BB, 0x0062], NFC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062] }, +{ source: [0x0061, 0x05BF, 0x05BD, 0x05BC, 0x05BD, 0x0062], NFC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062] }, +{ source: [0x0061, 0x05BD, 0x05BF, 0x05BD, 0x05BC, 0x0062], NFC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062] }, +{ source: [0x0061, 0x05C1, 0x05BF, 0x05BD, 0x05BF, 0x0062], NFC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062] }, +{ source: [0x0061, 0x05BF, 0x05C1, 0x05BF, 0x05BD, 0x0062], NFC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062] }, +{ source: [0x0061, 0x05C2, 0x05C1, 0x05BF, 0x05C1, 0x0062], NFC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062] }, +{ source: [0x0061, 0x05C1, 0x05C2, 0x05C1, 0x05BF, 0x0062], NFC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062] }, +{ source: [0x0061, 0xFB1E, 0x05C2, 0x05C1, 0x05C2, 0x0062], NFC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062] }, +{ source: [0x0061, 0x05C2, 0xFB1E, 0x05C2, 0x05C1, 0x0062], NFC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05C4, 0x0062], NFC: [0x00E0, 0x05AE, 0x05C4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05C4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05C4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05C4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05C4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x05C5, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x05C5, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x05C5, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x05C5, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x05C5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05C5, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x05C5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x05C5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x05C5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x05C5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B9, 0x05B8, 0x05B7, 0x05C7, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x05C7, 0x05B9, 0x05B8, 0x05B7, 0x0062], NFC: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0610, 0x0062], NFC: [0x00E0, 0x05AE, 0x0610, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0610, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0610, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0610, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0610, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0611, 0x0062], NFC: [0x00E0, 0x05AE, 0x0611, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0611, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0611, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0611, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0611, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0612, 0x0062], NFC: [0x00E0, 0x05AE, 0x0612, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0612, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0612, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0612, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0612, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0613, 0x0062], NFC: [0x00E0, 0x05AE, 0x0613, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0613, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0613, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0613, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0613, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0614, 0x0062], NFC: [0x00E0, 0x05AE, 0x0614, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0614, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0614, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0614, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0614, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0615, 0x0062], NFC: [0x00E0, 0x05AE, 0x0615, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0615, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0615, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0615, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0615, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0616, 0x0062], NFC: [0x00E0, 0x05AE, 0x0616, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0616, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0616, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0616, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0616, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0617, 0x0062], NFC: [0x00E0, 0x05AE, 0x0617, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0617, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0617, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0617, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0617, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0619, 0x0618, 0x064D, 0x0618, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062] }, +{ source: [0x0061, 0x0618, 0x0619, 0x0618, 0x064D, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062] }, +{ source: [0x0061, 0x061A, 0x0619, 0x0618, 0x0619, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062] }, +{ source: [0x0061, 0x0619, 0x061A, 0x0619, 0x0618, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062] }, +{ source: [0x0061, 0x0651, 0x061A, 0x0619, 0x061A, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062] }, +{ source: [0x0061, 0x061A, 0x0651, 0x061A, 0x0619, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062] }, +{ source: [0x0061, 0x064C, 0x064B, 0xFB1E, 0x064B, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062] }, +{ source: [0x0061, 0x064B, 0x064C, 0x064B, 0xFB1E, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062] }, +{ source: [0x0061, 0x064D, 0x064C, 0x064B, 0x064C, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062] }, +{ source: [0x0061, 0x064C, 0x064D, 0x064C, 0x064B, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062] }, +{ source: [0x0061, 0x0618, 0x064D, 0x064C, 0x064D, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062] }, +{ source: [0x0061, 0x064D, 0x0618, 0x064D, 0x064C, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062] }, +{ source: [0x0061, 0x0619, 0x0618, 0x064D, 0x064E, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062] }, +{ source: [0x0061, 0x064E, 0x0619, 0x0618, 0x064D, 0x0062], NFC: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062] }, +{ source: [0x0061, 0x061A, 0x0619, 0x0618, 0x064F, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062] }, +{ source: [0x0061, 0x064F, 0x061A, 0x0619, 0x0618, 0x0062], NFC: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062] }, +{ source: [0x0061, 0x0651, 0x061A, 0x0619, 0x0650, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062] }, +{ source: [0x0061, 0x0650, 0x0651, 0x061A, 0x0619, 0x0062], NFC: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062] }, +{ source: [0x0061, 0x0652, 0x0651, 0x061A, 0x0651, 0x0062], NFC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062] }, +{ source: [0x0061, 0x0651, 0x0652, 0x0651, 0x061A, 0x0062], NFC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062] }, +{ source: [0x0061, 0x0670, 0x0652, 0x0651, 0x0652, 0x0062], NFC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062] }, +{ source: [0x0061, 0x0652, 0x0670, 0x0652, 0x0651, 0x0062], NFC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0653, 0x0062], NFC: [0x00E0, 0x05AE, 0x0653, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0653, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0653, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0653, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0653, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0654, 0x0062], NFC: [0x00E0, 0x05AE, 0x0654, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0654, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0654, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0654, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0654, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0655, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0655, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0655, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0655, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0655, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0655, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0655, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0655, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0655, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0655, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0656, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0656, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0656, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0656, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0656, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0656, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0656, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0656, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0656, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0656, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0657, 0x0062], NFC: [0x00E0, 0x05AE, 0x0657, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0657, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0657, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0657, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0657, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0658, 0x0062], NFC: [0x00E0, 0x05AE, 0x0658, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0658, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0658, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0658, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0658, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0659, 0x0062], NFC: [0x00E0, 0x05AE, 0x0659, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0659, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0659, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0659, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0659, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065A, 0x0062], NFC: [0x00E0, 0x05AE, 0x065A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065B, 0x0062], NFC: [0x00E0, 0x05AE, 0x065B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x065C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x065C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x065C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x065C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x065C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x065C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x065C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x065C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x065C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x065C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065D, 0x0062], NFC: [0x00E0, 0x05AE, 0x065D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065E, 0x0062], NFC: [0x00E0, 0x05AE, 0x065E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x065F, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x065F, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x065F, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x065F, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x065F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x065F, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x065F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x065F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x065F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x065F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0711, 0x0670, 0x0652, 0x0670, 0x0062], NFC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062] }, +{ source: [0x0061, 0x0670, 0x0711, 0x0670, 0x0652, 0x0062], NFC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D8, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D9, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DA, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DF, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E0, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E2, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x06E3, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x06E3, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x06E3, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x06E3, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x06E3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x06E3, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x06E3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x06E3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x06E3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x06E3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E4, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E8, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x06EA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x06EA, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x06EA, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x06EA, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x06EA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x06EA, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x06EA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x06EA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x06EA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x06EA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x06EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x06EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x06ED, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x06ED, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x06ED, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x06ED, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x06ED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x06ED, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x06ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x06ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x06ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x06ED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0C55, 0x0711, 0x0670, 0x0711, 0x0062], NFC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062] }, +{ source: [0x0061, 0x0711, 0x0C55, 0x0711, 0x0670, 0x0062], NFC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0730, 0x0062], NFC: [0x00E0, 0x05AE, 0x0730, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0730, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0730, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0730, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0730, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0731, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0731, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0731, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0731, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0731, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0731, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0731, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0731, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0731, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0731, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0732, 0x0062], NFC: [0x00E0, 0x05AE, 0x0732, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0732, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0732, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0732, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0732, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0733, 0x0062], NFC: [0x00E0, 0x05AE, 0x0733, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0733, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0733, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0733, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0733, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0734, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0734, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0734, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0734, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0734, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0734, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0734, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0734, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0734, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0734, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0735, 0x0062], NFC: [0x00E0, 0x05AE, 0x0735, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0735, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0735, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0735, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0735, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0736, 0x0062], NFC: [0x00E0, 0x05AE, 0x0736, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0736, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0736, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0736, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0736, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0737, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0737, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0737, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0737, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0737, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0737, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0737, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0737, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0737, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0737, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0738, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0738, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0738, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0738, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0738, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0738, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0738, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0738, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0738, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0738, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0739, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0739, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0739, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0739, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0739, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0739, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0739, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0739, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0739, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0739, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073A, 0x0062], NFC: [0x00E0, 0x05AE, 0x073A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x073A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x073B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x073B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x073B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x073B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x073B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x073B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x073B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x073B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x073B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x073B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x073C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x073C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x073C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x073C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x073C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x073C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x073C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x073C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x073C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x073C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073D, 0x0062], NFC: [0x00E0, 0x05AE, 0x073D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x073D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x073E, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x073E, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x073E, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x073E, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x073E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x073E, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x073E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x073E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x073E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x073E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073F, 0x0062], NFC: [0x00E0, 0x05AE, 0x073F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x073F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0740, 0x0062], NFC: [0x00E0, 0x05AE, 0x0740, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0740, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0740, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0740, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0740, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0741, 0x0062], NFC: [0x00E0, 0x05AE, 0x0741, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0741, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0741, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0741, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0741, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0742, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0742, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0742, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0742, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0742, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0742, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0742, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0742, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0742, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0742, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0743, 0x0062], NFC: [0x00E0, 0x05AE, 0x0743, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0743, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0743, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0743, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0743, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0744, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0744, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0744, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0744, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0744, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0744, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0744, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0744, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0744, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0744, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0745, 0x0062], NFC: [0x00E0, 0x05AE, 0x0745, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0745, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0745, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0745, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0745, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0746, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0746, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0746, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0746, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0746, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0746, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0746, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0746, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0746, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0746, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0747, 0x0062], NFC: [0x00E0, 0x05AE, 0x0747, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0747, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0747, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0747, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0747, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0748, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0748, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0748, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0748, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0748, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0748, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0748, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0748, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0748, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0748, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0749, 0x0062], NFC: [0x00E0, 0x05AE, 0x0749, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0749, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0749, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0749, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0749, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x074A, 0x0062], NFC: [0x00E0, 0x05AE, 0x074A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x074A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x074A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x074A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x074A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07ED, 0x0062], NFC: [0x00E0, 0x05AE, 0x07ED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07ED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07ED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07ED, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07ED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EE, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EF, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F0, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F1, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x07F2, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x07F2, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x07F2, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x07F2, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x07F2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x07F2, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x07F2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x07F2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x07F2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x07F2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F3, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07F3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x07FD, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x07FD, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x07FD, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x07FD, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x07FD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x07FD, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x07FD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x07FD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x07FD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x07FD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0816, 0x0062], NFC: [0x00E0, 0x05AE, 0x0816, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0816, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0816, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0816, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0816, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0817, 0x0062], NFC: [0x00E0, 0x05AE, 0x0817, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0817, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0817, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0817, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0817, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0818, 0x0062], NFC: [0x00E0, 0x05AE, 0x0818, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0818, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0818, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0818, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0818, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0819, 0x0062], NFC: [0x00E0, 0x05AE, 0x0819, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0819, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0819, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0819, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0819, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081B, 0x0062], NFC: [0x00E0, 0x05AE, 0x081B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081C, 0x0062], NFC: [0x00E0, 0x05AE, 0x081C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081D, 0x0062], NFC: [0x00E0, 0x05AE, 0x081D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081E, 0x0062], NFC: [0x00E0, 0x05AE, 0x081E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081F, 0x0062], NFC: [0x00E0, 0x05AE, 0x081F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0820, 0x0062], NFC: [0x00E0, 0x05AE, 0x0820, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0820, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0820, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0820, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0820, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0821, 0x0062], NFC: [0x00E0, 0x05AE, 0x0821, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0821, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0821, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0821, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0821, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0822, 0x0062], NFC: [0x00E0, 0x05AE, 0x0822, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0822, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0822, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0822, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0822, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0823, 0x0062], NFC: [0x00E0, 0x05AE, 0x0823, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0823, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0823, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0823, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0823, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0825, 0x0062], NFC: [0x00E0, 0x05AE, 0x0825, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0825, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0825, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0825, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0825, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0826, 0x0062], NFC: [0x00E0, 0x05AE, 0x0826, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0826, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0826, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0826, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0826, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0827, 0x0062], NFC: [0x00E0, 0x05AE, 0x0827, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0827, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0827, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0827, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0827, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0829, 0x0062], NFC: [0x00E0, 0x05AE, 0x0829, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0829, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0829, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0829, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0829, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082A, 0x0062], NFC: [0x00E0, 0x05AE, 0x082A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082B, 0x0062], NFC: [0x00E0, 0x05AE, 0x082B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082C, 0x0062], NFC: [0x00E0, 0x05AE, 0x082C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082D, 0x0062], NFC: [0x00E0, 0x05AE, 0x082D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0859, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0859, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0859, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0859, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0859, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0859, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0859, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0859, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0859, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0859, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x085A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x085A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x085A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x085A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x085A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x085A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x085A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x085B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x085B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x085B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x085B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0898, 0x0062], NFC: [0x00E0, 0x05AE, 0x0898, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0898, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0898, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0898, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0898, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0898, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0899, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0899, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0899, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0899, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0899, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0899, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0899, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x089A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x089A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x089A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x089A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x089A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x089A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x089A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x089A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x089A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x089A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x089B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x089B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x089B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x089B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x089B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x089B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x089B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x089B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x089B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x089B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x089C, 0x0062], NFC: [0x00E0, 0x05AE, 0x089C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x089C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x089C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x089C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x089C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x089C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x089C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x089C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x089C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x089D, 0x0062], NFC: [0x00E0, 0x05AE, 0x089D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x089D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x089D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x089D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x089D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x089D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x089D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x089D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x089D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x089E, 0x0062], NFC: [0x00E0, 0x05AE, 0x089E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x089E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x089E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x089E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x089E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x089E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x089E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x089E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x089E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x089F, 0x0062], NFC: [0x00E0, 0x05AE, 0x089F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x089F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x089F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x089F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x089F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x089F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x089F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x089F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x089F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08CA, 0x0062], NFC: [0x00E0, 0x05AE, 0x08CA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08CA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08CA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08CA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08CA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08CA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08CA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08CA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08CA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08CB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08CB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08CB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08CB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08CB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08CB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08CB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08CB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08CB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08CB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08CC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08CC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08CC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08CC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08CC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08CC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08CC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08CC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08CC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08CC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08CD, 0x0062], NFC: [0x00E0, 0x05AE, 0x08CD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08CD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08CD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08CD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08CD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08CD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08CD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08CD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08CD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08CE, 0x0062], NFC: [0x00E0, 0x05AE, 0x08CE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08CE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08CE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08CE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08CE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08CE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08CE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08CE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08CE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08CF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08CF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08CF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08CF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08CF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08CF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08CF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08CF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08CF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08CF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08D0, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08D0, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08D0, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08D0, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08D0, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08D0, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08D0, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08D0, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08D0, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08D0, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08D1, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08D1, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08D1, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08D1, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08D1, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08D1, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08D1, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08D1, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08D1, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08D1, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08D2, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08D2, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08D2, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08D2, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08D2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08D2, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08D2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08D2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08D2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08D2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08D3, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08D3, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08D3, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08D3, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08D3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08D3, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08D3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08D3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08D3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08D3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08D4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08D5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08D8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08D9, 0x0062], NFC: [0x00E0, 0x05AE, 0x08D9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08D9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08D9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08D9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08D9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08D9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DA, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08DA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DD, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08DD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DE, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08DE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08DF, 0x0062], NFC: [0x00E0, 0x05AE, 0x08DF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08DF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08DF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08DF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08DF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08DF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E0, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08E3, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08E3, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08E3, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08E3, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08E3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08E3, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08E3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08E3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08E3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08E3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08E6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08E6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08E6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08E6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08E6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08E6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08E6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08E6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08E6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08E6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08E9, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08E9, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08E9, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08E9, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08E9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08E9, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08E9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08E9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08E9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08E9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EA, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08EA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08ED, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08ED, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08ED, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08ED, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08ED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08ED, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08ED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08EE, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08EE, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08EE, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08EE, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08EE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08EE, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08EE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08EF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08EF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08EF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08EF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08EF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08EF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08EF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08EF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08EF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08EF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x064C, 0x064B, 0xFB1E, 0x08F0, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062] }, +{ source: [0x0061, 0x08F0, 0x064C, 0x064B, 0xFB1E, 0x0062], NFC: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062] }, +{ source: [0x0061, 0x064D, 0x064C, 0x064B, 0x08F1, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062] }, +{ source: [0x0061, 0x08F1, 0x064D, 0x064C, 0x064B, 0x0062], NFC: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062] }, +{ source: [0x0061, 0x0618, 0x064D, 0x064C, 0x08F2, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062] }, +{ source: [0x0061, 0x08F2, 0x0618, 0x064D, 0x064C, 0x0062], NFC: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F3, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08F6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08F6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08F6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08F6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08F6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08F6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08F6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08F6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08F6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08F6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08F9, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08F9, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08F9, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08F9, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08F9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08F9, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08F9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08F9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08F9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08F9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x08FA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x08FA, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x08FA, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x08FA, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x08FA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08FA, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x08FA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x08FA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x08FA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x08FA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FD, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FE, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FF, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x093C, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x093C, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x094D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x094D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0951, 0x0062], NFC: [0x00E0, 0x05AE, 0x0951, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0951, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0951, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0951, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0951, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0952, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0952, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0952, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0952, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0952, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0952, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0952, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0952, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0952, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0952, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0953, 0x0062], NFC: [0x00E0, 0x05AE, 0x0953, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0953, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0953, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0953, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0953, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0954, 0x0062], NFC: [0x00E0, 0x05AE, 0x0954, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0954, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0954, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0954, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0954, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x09BC, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x09BC, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x09BC, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x09BC, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x09BC, 0x3099, 0x0062] }, +{ source: [0x0061, 0x09BC, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x09BC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x09BC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x09BC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x09BC, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x09CD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x09CD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x09FE, 0x0062], NFC: [0x00E0, 0x05AE, 0x09FE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x09FE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x09FE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x09FE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x09FE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x09FE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x09FE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x09FE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x09FE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x0A3C, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x0A3C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x0A3C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x0A3C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x0A3C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0A3C, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x0A3C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x0A3C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x0A3C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x0A3C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0A4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0A4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x0ABC, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x0ABC, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x0ABC, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x0ABC, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x0ABC, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0ABC, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x0ABC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x0ABC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x0ABC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x0ABC, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0ACD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0ACD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x0B3C, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x0B3C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x0B3C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x0B3C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x0B3C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0B3C, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x0B3C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x0B3C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x0B3C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x0B3C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0B4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0B4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0BCD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0BCD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x0C3C, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x0C3C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x0C3C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x0C3C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x0C3C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0C3C, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x0C3C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x0C3C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x0C3C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x0C3C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0C4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0C4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0C56, 0x0C55, 0x0711, 0x0C55, 0x0062], NFC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062] }, +{ source: [0x0061, 0x0C55, 0x0C56, 0x0C55, 0x0711, 0x0062], NFC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062] }, +{ source: [0x0061, 0x0E38, 0x0C56, 0x0C55, 0x0C56, 0x0062], NFC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062] }, +{ source: [0x0061, 0x0C56, 0x0E38, 0x0C56, 0x0C55, 0x0062], NFC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x0CBC, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x0CBC, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x0CBC, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x0CBC, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x0CBC, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0CBC, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x0CBC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x0CBC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x0CBC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x0CBC, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0CCD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0CCD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0D3B, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0D3B, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0D3B, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0D3B, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0D3B, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0D3B, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0D3B, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0D3B, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0D3B, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0D3B, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0D3C, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0D3C, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0D3C, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0D3C, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0D3C, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0D3C, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0D3C, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0D3C, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0D3C, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0D3C, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0D4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0D4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0DCA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0DCA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0E48, 0x0E38, 0x0C56, 0x0E38, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x0E38, 0x0E48, 0x0E38, 0x0C56, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x0E48, 0x0E38, 0x0C56, 0x0E39, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x0E39, 0x0E48, 0x0E38, 0x0C56, 0x0062], NFC: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0E3A, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0E3A, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E48, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E48, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E49, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E49, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E4A, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E4A, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E4B, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E4B, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EC8, 0x0EB8, 0x0E48, 0x0EB8, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0EC8, 0x0EB8, 0x0E48, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x0EC8, 0x0EB8, 0x0E48, 0x0EB9, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x0EB9, 0x0EC8, 0x0EB8, 0x0E48, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0EBA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0EBA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0EBA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0EBA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0EBA, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0EBA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0EBA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0EBA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0EBA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0EBA, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0EC8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0EC8, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0EC9, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0EC9, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0ECA, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0ECA, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0ECB, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0ECB, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0F18, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0F18, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0F18, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0F18, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0F18, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F18, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0F18, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0F18, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0F18, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0F18, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0F19, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0F19, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0F19, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0F19, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0F19, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F19, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0F19, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0F19, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0F19, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0F19, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0F35, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0F35, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0F35, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0F35, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0F35, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F35, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0F35, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0F35, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0F35, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0F35, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0F37, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0F37, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0F37, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0F37, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0F37, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F37, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0F37, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0F37, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0F37, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0F37, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x0F39, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x0F39, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x0F72, 0x0F71, 0x0EC8, 0x0F71, 0x0062], NFC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0F72, 0x0F71, 0x0EC8, 0x0062], NFC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F72, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F72, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0321, 0x0F74, 0x0F72, 0x0F74, 0x0062], NFC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0321, 0x0F74, 0x0F72, 0x0062], NFC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7A, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7A, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7B, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7B, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7C, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7C, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7D, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7D, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F80, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F80, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F82, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F82, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F82, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F82, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F82, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F82, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F83, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F83, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F83, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F83, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F83, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F83, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0F84, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0F84, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F86, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F86, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F86, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F86, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F86, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F86, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F87, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F87, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F87, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F87, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F87, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F87, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x0FC6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x0FC6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x0FC6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x0FC6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x0FC6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0FC6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0FC6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0FC6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0FC6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0FC6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1037, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1037, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1037, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1037, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1037, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1037, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1037, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1037, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1037, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1037, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1039, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1039, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x103A, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x103A, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x108D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x108D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x108D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x108D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x108D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x108D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x108D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x108D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x108D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x108D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135D, 0x0062], NFC: [0x00E0, 0x05AE, 0x135D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x135D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135E, 0x0062], NFC: [0x00E0, 0x05AE, 0x135E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x135E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135F, 0x0062], NFC: [0x00E0, 0x05AE, 0x135F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x135F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1714, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1714, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1715, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1715, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1715, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1715, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1715, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1715, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1715, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1715, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1715, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1715, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1734, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1734, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x17D2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x17D2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x17DD, 0x0062], NFC: [0x00E0, 0x05AE, 0x17DD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x17DD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x17DD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x17DD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x17DD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x18A9, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x18A9, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x18A9, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x18A9, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x18A9, 0x0300, 0x0062] }, +{ source: [0x0061, 0x18A9, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x18A9, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x18A9, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x18A9, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x18A9, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x1939, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062] }, +{ source: [0x0061, 0x1939, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x193A, 0x0062], NFC: [0x00E0, 0x05AE, 0x193A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x193A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x193A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x193A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x193A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x193B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x193B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x193B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x193B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x193B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x193B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x193B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x193B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x193B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x193B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A17, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A17, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A17, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A17, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A17, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A17, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1A18, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1A18, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1A18, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1A18, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1A18, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1A18, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1A18, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1A18, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1A18, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1A18, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1A60, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1A60, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A75, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A75, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A75, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A75, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A75, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A75, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A76, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A76, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A76, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A76, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A76, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A76, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A77, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A77, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A77, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A77, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A77, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A77, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A78, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A78, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A78, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A78, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A78, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A78, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A79, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A79, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A79, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A79, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A79, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A79, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A7A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A7B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A7C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1A7F, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1A7F, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1A7F, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1A7F, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1A7F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1A7F, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1A7F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1A7F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1A7F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1A7F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AB0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AB1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AB2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AB3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AB4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AB4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AB4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AB4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AB4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AB4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AB4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AB5, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AB5, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AB5, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AB5, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AB5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AB5, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AB5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AB5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AB5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AB5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AB6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AB6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AB6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AB6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AB6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AB6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AB6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AB6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AB6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AB6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AB7, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AB7, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AB7, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AB7, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AB7, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AB7, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AB7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AB7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AB7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AB7, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AB8, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AB8, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AB8, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AB8, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AB8, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AB8, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AB8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AB8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AB8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AB8, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AB9, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AB9, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AB9, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AB9, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AB9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AB9, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AB9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AB9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AB9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AB9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1ABA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1ABA, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1ABA, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1ABA, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1ABA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1ABA, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1ABA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1ABA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1ABA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1ABA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ABB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ABB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ABB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ABB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ABB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1ABB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ABB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ABC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ABC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ABC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ABC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ABC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1ABC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ABC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1ABD, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1ABD, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1ABD, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1ABD, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1ABD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1ABD, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1ABD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1ABD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1ABD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1ABD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1ABF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1ABF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1ABF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1ABF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1ABF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1ABF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1ABF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1ABF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1ABF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1ABF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AC0, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AC0, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AC0, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AC0, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AC0, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AC0, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AC0, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AC0, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AC0, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AC0, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AC1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AC1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AC1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AC1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AC1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AC1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AC1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AC1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AC1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AC1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AC2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AC2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AC2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AC2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AC2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AC2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AC2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AC2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AC2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AC2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AC3, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AC3, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AC3, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AC3, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AC3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AC3, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AC3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AC3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AC3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AC3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1AC4, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1AC4, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1AC4, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1AC4, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1AC4, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1AC4, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1AC4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1AC4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1AC4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1AC4, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AC5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AC5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AC5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AC5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AC5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AC5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AC5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AC5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AC5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AC5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AC6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AC6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AC6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AC6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AC6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AC6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AC6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AC6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AC6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AC6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AC7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AC7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AC7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AC7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AC7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AC7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AC7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AC7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AC7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AC7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AC8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AC8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AC8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AC8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AC8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AC8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AC8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AC8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AC8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AC8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1AC9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1AC9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1AC9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1AC9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1AC9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1AC9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1AC9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1AC9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1AC9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1AC9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1ACA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1ACA, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1ACA, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1ACA, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1ACA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1ACA, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1ACA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1ACA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1ACA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1ACA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ACB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ACB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ACB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ACB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ACB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1ACB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ACB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ACB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ACB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ACB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ACC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ACC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ACC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ACC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ACC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1ACC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ACC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ACC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ACC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ACC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ACD, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ACD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ACD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ACD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ACD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1ACD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ACD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ACD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ACD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ACD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1ACE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1ACE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1ACE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1ACE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1ACE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1ACE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1ACE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1ACE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1ACE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1ACE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1B34, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1B34, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1B34, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1B34, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1B34, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1B34, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1B34, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1B34, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1B34, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1B34, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1B44, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1B44, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1B6C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1B6C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1B6C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1B6C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1B6C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1B6C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1B6C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1B6C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1B6C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1B6C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6D, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B70, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B70, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B70, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B70, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B70, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B70, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B71, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B71, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B71, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B71, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B71, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B71, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B72, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B72, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B72, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B72, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B72, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B72, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B73, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B73, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B73, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B73, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B73, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B73, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BAA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BAA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BAB, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BAB, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1BE6, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1BE6, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1BE6, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1BE6, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1BE6, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1BE6, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1BE6, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1BE6, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1BE6, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1BE6, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BF2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BF2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BF3, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BF3, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1C37, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1C37, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1C37, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1C37, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1C37, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1C37, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1C37, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1C37, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1C37, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1C37, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CD0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CD1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CD2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CD4, 0x0062], NFC: [0x0061, 0x0334, 0x1CD4, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CD4, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CD4, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CD4, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CD4, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CD4, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CD4, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CD4, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CD4, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CD5, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CD5, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CD5, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CD5, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CD5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD5, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CD5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CD5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CD5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CD5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CD6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CD6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CD6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CD6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CD6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CD6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CD6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CD6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CD6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CD7, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CD7, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CD7, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CD7, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CD7, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD7, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CD7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CD7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CD7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CD7, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CD8, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CD8, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CD8, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CD8, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CD8, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD8, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CD8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CD8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CD8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CD8, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CD9, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CD9, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CD9, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CD9, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CD9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD9, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CD9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CD9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CD9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CD9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CDA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CDA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CDA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CDA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CDA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CDA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CDB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CDB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CDB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CDB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CDB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CDB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CDC, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CDC, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CDC, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CDC, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CDC, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDC, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CDC, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CDC, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CDC, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CDC, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CDD, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CDD, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CDD, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CDD, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CDD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDD, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CDD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CDD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CDD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CDD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CDE, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CDE, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CDE, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CDE, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CDE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDE, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CDE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CDE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CDE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CDE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CDF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CDF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CDF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CDF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CDF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CDF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CDF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CDF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CDF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CE0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CE2, 0x0062], NFC: [0x0061, 0x0334, 0x1CE2, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CE2, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE2, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE2, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CE2, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CE2, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CE2, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CE2, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CE2, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CE3, 0x0062], NFC: [0x0061, 0x0334, 0x1CE3, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CE3, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE3, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE3, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CE3, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CE3, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CE3, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CE3, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CE3, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CE4, 0x0062], NFC: [0x0061, 0x0334, 0x1CE4, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CE4, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE4, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE4, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CE4, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CE4, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CE4, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CE4, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CE4, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CE5, 0x0062], NFC: [0x0061, 0x0334, 0x1CE5, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CE5, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE5, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE5, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CE5, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CE5, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CE5, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CE5, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CE5, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CE6, 0x0062], NFC: [0x0061, 0x0334, 0x1CE6, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CE6, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE6, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE6, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CE6, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CE6, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CE6, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CE6, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CE6, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CE7, 0x0062], NFC: [0x0061, 0x0334, 0x1CE7, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CE7, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE7, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE7, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CE7, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CE7, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CE7, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CE7, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CE7, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1CE8, 0x0062], NFC: [0x0061, 0x0334, 0x1CE8, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1CE8, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE8, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE8, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1CE8, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1CE8, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1CE8, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1CE8, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1CE8, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1CED, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1CED, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1CED, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1CED, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1CED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CED, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1CED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1CED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1CED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1CED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CF4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CF8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CF8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CF8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CF8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CF8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CF8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CF8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CF9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CF9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CF9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CF9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CF9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CF9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CF9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1DC2, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1DC2, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1DC2, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1DC2, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1DC2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DC2, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1DC2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1DC2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1DC2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1DC2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1DCA, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1DCA, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1DCA, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1DCA, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1DCA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCA, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1DCA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1DCA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1DCA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1DCA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DCB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DCB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DCB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DCB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DCB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DCB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DCC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DCC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DCC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DCC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DCC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DCC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x1DCD, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062] }, +{ source: [0x0061, 0x1DCD, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x031B, 0x1DCE, 0x0321, 0x1DCE, 0x0062], NFC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x031B, 0x1DCE, 0x0321, 0x0062], NFC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1DCF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1DCF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1DCF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1DCF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1DCF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1DCF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1DCF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1DCF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1DCF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x1DD0, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x1DD0, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDD, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DEA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DEB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DEC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DED, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DED, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DEE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DEF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DEF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DF2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DF3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DF5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DF5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DF5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DF5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DF5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DF5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DF5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x1DF6, 0x0062], NFC: [0x00E0, 0x0315, 0x1DF6, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x1DF6, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x1DF6, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x1DF6, 0x035C, 0x0062] }, +{ source: [0x0061, 0x1DF6, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x1DF6, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x1DF6, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x1DF6, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x1DF6, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x1DF7, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x1DF7, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x1DF7, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x1DF7, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x1DF7, 0x0300, 0x0062] }, +{ source: [0x0061, 0x1DF7, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x1DF7, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x1DF7, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x1DF7, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x1DF7, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x1DF8, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x1DF8, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x1DF8, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x1DF8, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x1DF8, 0x0300, 0x0062] }, +{ source: [0x0061, 0x1DF8, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x1DF8, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x1DF8, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x1DF8, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x1DF8, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1DF9, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1DF9, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1DF9, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1DF9, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1DF9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DF9, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1DF9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1DF9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1DF9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1DF9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0316, 0x1DFA, 0x031B, 0x1DFA, 0x0062], NFC: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x0316, 0x1DFA, 0x031B, 0x0062], NFC: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x1DFA, 0x1DFA, 0x0316, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DFB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DFB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DFB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DFB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DFB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DFB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DFB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x1DFC, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062] }, +{ source: [0x0061, 0x1DFC, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1DFD, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1DFD, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1DFD, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1DFD, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1DFD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DFD, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1DFD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1DFD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1DFD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1DFD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DFE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DFE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DFE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DFE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DFE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DFE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1DFF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1DFF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1DFF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1DFF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1DFF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DFF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1DFF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1DFF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1DFF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1DFF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D0, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D1, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20D2, 0x0062], NFC: [0x0061, 0x0334, 0x20D2, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20D2, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20D2, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20D2, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20D2, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20D2, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20D2, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20D2, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20D2, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20D3, 0x0062], NFC: [0x0061, 0x0334, 0x20D3, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20D3, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20D3, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20D3, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20D3, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20D3, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20D3, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20D3, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20D3, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D4, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D5, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20D8, 0x0062], NFC: [0x0061, 0x0334, 0x20D8, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20D8, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20D8, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20D8, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20D8, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20D8, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20D8, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20D8, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20D8, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20D9, 0x0062], NFC: [0x0061, 0x0334, 0x20D9, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20D9, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20D9, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20D9, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20D9, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20D9, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20D9, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20D9, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20D9, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20DA, 0x0062], NFC: [0x0061, 0x0334, 0x20DA, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20DA, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20DA, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20DA, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20DA, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20DA, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20DA, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20DA, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20DA, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x20DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20DB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x20DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20DC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20E5, 0x0062], NFC: [0x0061, 0x0334, 0x20E5, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20E5, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20E5, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20E5, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20E5, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20E5, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20E5, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20E5, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20E5, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20E6, 0x0062], NFC: [0x0061, 0x0334, 0x20E6, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20E6, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20E6, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20E6, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20E6, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20E6, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20E6, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20E6, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20E6, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x20E8, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x20E8, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x20E8, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x20E8, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x20E8, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20E8, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x20E8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x20E8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x20E8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x20E8, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E9, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20E9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20EA, 0x0062], NFC: [0x0061, 0x0334, 0x20EA, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20EA, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20EA, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20EA, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20EA, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20EA, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20EA, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20EA, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20EA, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x20EB, 0x0062], NFC: [0x0061, 0x0334, 0x20EB, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x20EB, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x20EB, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x20EB, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x20EB, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x20EB, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x20EB, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x20EB, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x20EB, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x20EC, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x20EC, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x20EC, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x20EC, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x20EC, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20EC, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x20EC, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x20EC, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x20EC, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x20EC, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x20ED, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x20ED, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x20ED, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x20ED, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x20ED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20ED, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x20ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x20ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x20ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x20ED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x20EE, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x20EE, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x20EE, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x20EE, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x20EE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20EE, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x20EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x20EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x20EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x20EE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x20EF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x20EF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x20EF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x20EF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x20EF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20EF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x20EF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x20EF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x20EF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x20EF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20F0, 0x0062], NFC: [0x00E0, 0x05AE, 0x20F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CEF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2CEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CF0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2CF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CF1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2CF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x2D7F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x2D7F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE2, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE3, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE4, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE6, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE7, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE8, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE9, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEA, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEB, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEC, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DED, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DED, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEE, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF2, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF3, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF5, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF6, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF7, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF8, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF9, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFA, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFB, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFC, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFD, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFE, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0316, 0x1DFA, 0x031B, 0x302A, 0x0062], NFC: [0x0061, 0x031B, 0x1DFA, 0x302A, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x1DFA, 0x302A, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x1DFA, 0x302A, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x1DFA, 0x302A, 0x0316, 0x0062] }, +{ source: [0x0061, 0x302A, 0x0316, 0x1DFA, 0x031B, 0x0062], NFC: [0x0061, 0x031B, 0x302A, 0x1DFA, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x302A, 0x1DFA, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x302A, 0x1DFA, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x302A, 0x1DFA, 0x0316, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x302B, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x302B, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x302B, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x302B, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x302B, 0x0300, 0x0062] }, +{ source: [0x0061, 0x302B, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x302B, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x302B, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x302B, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x302B, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x302C, 0x0062], NFC: [0x00E0, 0x0315, 0x302C, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x302C, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x302C, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x302C, 0x035C, 0x0062] }, +{ source: [0x0061, 0x302C, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x302C, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x302C, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x302C, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x302C, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x302D, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062] }, +{ source: [0x0061, 0x302D, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x1D16D, 0x302E, 0x059A, 0x302E, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x302E, 0x1D16D, 0x302E, 0x059A, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x1D16D, 0x302E, 0x059A, 0x302F, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x302F, 0x1D16D, 0x302E, 0x059A, 0x0062], NFC: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x094D, 0x3099, 0x093C, 0x3099, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062] }, +{ source: [0x0061, 0x3099, 0x094D, 0x3099, 0x093C, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062] }, +{ source: [0x0061, 0x094D, 0x3099, 0x093C, 0x309A, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062] }, +{ source: [0x0061, 0x309A, 0x094D, 0x3099, 0x093C, 0x0062], NFC: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA66F, 0x0062], NFC: [0x00E0, 0x05AE, 0xA66F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA66F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA66F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA66F, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA66F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA674, 0x0062], NFC: [0x00E0, 0x05AE, 0xA674, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA674, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA674, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA674, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA674, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA675, 0x0062], NFC: [0x00E0, 0x05AE, 0xA675, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA675, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA675, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA675, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA675, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA676, 0x0062], NFC: [0x00E0, 0x05AE, 0xA676, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA676, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA676, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA676, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA676, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA677, 0x0062], NFC: [0x00E0, 0x05AE, 0xA677, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA677, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA677, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA677, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA677, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA678, 0x0062], NFC: [0x00E0, 0x05AE, 0xA678, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA678, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA678, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA678, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA678, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA679, 0x0062], NFC: [0x00E0, 0x05AE, 0xA679, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA679, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA679, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA679, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA679, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67A, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67A, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67B, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67B, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67C, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67C, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67D, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67D, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA69E, 0x0062], NFC: [0x00E0, 0x05AE, 0xA69E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA69E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA69E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA69E, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA69E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA69E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA69F, 0x0062], NFC: [0x00E0, 0x05AE, 0xA69F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA69F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA69F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA69F, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA69F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA6F0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA6F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA6F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA6F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA6F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA6F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA6F1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA6F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA6F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA6F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA6F1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA6F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA806, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA806, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA82C, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA82C, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA82C, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA82C, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA82C, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA82C, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA82C, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA82C, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA82C, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA82C, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA8C4, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA8C4, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E2, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E2, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E3, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E3, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E4, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E4, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E5, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E5, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E6, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E6, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E7, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E8, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E8, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E9, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E9, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EA, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EA, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EB, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EC, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8ED, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8ED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8ED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8ED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8ED, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8ED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EE, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EE, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EF, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EF, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8F0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8F1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8F1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xA92B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xA92B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xA92B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xA92B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xA92B, 0x059A, 0x0062] }, +{ source: [0x0061, 0xA92B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xA92B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xA92B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xA92B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xA92B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xA92C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xA92C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xA92C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xA92C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xA92C, 0x059A, 0x0062] }, +{ source: [0x0061, 0xA92C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xA92C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xA92C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xA92C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xA92C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xA92D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xA92D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xA92D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xA92D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xA92D, 0x059A, 0x0062] }, +{ source: [0x0061, 0xA92D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xA92D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xA92D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xA92D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xA92D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA953, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA953, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0xA9B3, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0xA9B3, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0xA9B3, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0xA9B3, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0xA9B3, 0x3099, 0x0062] }, +{ source: [0x0061, 0xA9B3, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0xA9B3, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0xA9B3, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0xA9B3, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0xA9B3, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA9C0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA9C0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB0, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB2, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB2, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB3, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB3, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xAAB4, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xAAB4, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xAAB4, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xAAB4, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xAAB4, 0x059A, 0x0062] }, +{ source: [0x0061, 0xAAB4, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xAAB4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xAAB4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xAAB4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xAAB4, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB7, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB7, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB8, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB8, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAABE, 0x0062], NFC: [0x00E0, 0x05AE, 0xAABE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAABE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAABE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAABE, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAABE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAABF, 0x0062], NFC: [0x00E0, 0x05AE, 0xAABF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAABF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAABF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAABF, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAABF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAC1, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAC1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAC1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAC1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAC1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAC1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xAAF6, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xAAF6, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xABED, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xABED, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x064B, 0xFB1E, 0x05C2, 0xFB1E, 0x0062], NFC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062] }, +{ source: [0x0061, 0xFB1E, 0x064B, 0xFB1E, 0x05C2, 0x0062], NFC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE20, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE20, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE20, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE20, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE20, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE20, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE21, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE21, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE21, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE21, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE21, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE21, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE22, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE22, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE22, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE22, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE22, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE22, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE23, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE23, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE23, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE23, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE23, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE23, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE24, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE24, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE24, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE24, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE24, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE24, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE25, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE25, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE25, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE25, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE25, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE25, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE26, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE26, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE26, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE26, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE26, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE26, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xFE27, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xFE27, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xFE27, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xFE27, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xFE27, 0x059A, 0x0062] }, +{ source: [0x0061, 0xFE27, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xFE27, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xFE27, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xFE27, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xFE27, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xFE28, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xFE28, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xFE28, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xFE28, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xFE28, 0x059A, 0x0062] }, +{ source: [0x0061, 0xFE28, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xFE28, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xFE28, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xFE28, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xFE28, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xFE29, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xFE29, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xFE29, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xFE29, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xFE29, 0x059A, 0x0062] }, +{ source: [0x0061, 0xFE29, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xFE29, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xFE29, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xFE29, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xFE29, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xFE2A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xFE2A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xFE2A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xFE2A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xFE2A, 0x059A, 0x0062] }, +{ source: [0x0061, 0xFE2A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xFE2A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xFE2A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xFE2A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xFE2A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xFE2B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xFE2B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xFE2B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xFE2B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xFE2B, 0x059A, 0x0062] }, +{ source: [0x0061, 0xFE2B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xFE2B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xFE2B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xFE2B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xFE2B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xFE2C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xFE2C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xFE2C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xFE2C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xFE2C, 0x059A, 0x0062] }, +{ source: [0x0061, 0xFE2C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xFE2C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xFE2C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xFE2C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xFE2C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0xFE2D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0xFE2D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0xFE2D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0xFE2D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0xFE2D, 0x059A, 0x0062] }, +{ source: [0x0061, 0xFE2D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0xFE2D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0xFE2D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0xFE2D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0xFE2D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE2E, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE2E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE2E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE2E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE2E, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE2E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE2E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE2F, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE2F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE2F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE2F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE2F, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE2F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE2F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x101FD, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x101FD, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x101FD, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x101FD, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x101FD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x101FD, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x101FD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x101FD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x101FD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x101FD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x102E0, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x102E0, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x102E0, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x102E0, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x102E0, 0x059A, 0x0062] }, +{ source: [0x0061, 0x102E0, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x102E0, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x102E0, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x102E0, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x102E0, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10376, 0x0062], NFC: [0x00E0, 0x05AE, 0x10376, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10376, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10376, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10376, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10376, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10376, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10377, 0x0062], NFC: [0x00E0, 0x05AE, 0x10377, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10377, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10377, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10377, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10377, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10377, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10378, 0x0062], NFC: [0x00E0, 0x05AE, 0x10378, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10378, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10378, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10378, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10378, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10378, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10379, 0x0062], NFC: [0x00E0, 0x05AE, 0x10379, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10379, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10379, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10379, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10379, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10379, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1037A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1037A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1037A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1037A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1037A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1037A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1037A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10A0D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10A0D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10A0D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10A0D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10A0D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10A0D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10A0D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10A0D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10A0D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10A0D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10A0F, 0x0062], NFC: [0x00E0, 0x05AE, 0x10A0F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10A0F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10A0F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10A0F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10A0F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10A38, 0x0062], NFC: [0x00E0, 0x05AE, 0x10A38, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10A38, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10A38, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10A38, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10A38, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x10A39, 0x0062], NFC: [0x0061, 0x0334, 0x10A39, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x10A39, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x10A39, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x10A39, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x10A39, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x10A39, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x10A39, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x10A39, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x10A39, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10A3A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10A3A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10A3A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10A3A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10A3A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10A3A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10A3A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10A3A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10A3A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10A3A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x10A3F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x10A3F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10AE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x10AE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10AE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10AE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10AE5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10AE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10AE5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10AE6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10AE6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10AE6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10AE6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10AE6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10AE6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10AE6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10AE6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10AE6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10AE6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D24, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D24, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D24, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D24, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D24, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D24, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D24, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D24, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D24, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D24, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D25, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D25, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D25, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D25, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D25, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D25, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D25, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D25, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D25, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D25, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D26, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D26, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D26, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D26, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D26, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D26, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D26, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10D27, 0x0062], NFC: [0x00E0, 0x05AE, 0x10D27, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10D27, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10D27, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10D27, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10D27, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10D27, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10EAB, 0x0062], NFC: [0x00E0, 0x05AE, 0x10EAB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10EAB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10EAB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10EAB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10EAB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10EAB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10EAC, 0x0062], NFC: [0x00E0, 0x05AE, 0x10EAC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10EAC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10EAC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10EAC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10EAC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10EAC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10EAC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10EAC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10EAC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10EFD, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10EFD, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10EFD, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10EFD, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10EFD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10EFD, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10EFD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10EFD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10EFD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10EFD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10EFE, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10EFE, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10EFE, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10EFE, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10EFE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10EFE, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10EFE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10EFE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10EFE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10EFE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10EFF, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10EFF, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10EFF, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10EFF, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10EFF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10EFF, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10EFF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10EFF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10EFF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10EFF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F46, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F46, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F46, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F46, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F46, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F46, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F46, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F46, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F46, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F46, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F47, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F47, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F47, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F47, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F47, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F47, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F47, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F47, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F47, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F47, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10F48, 0x0062], NFC: [0x00E0, 0x05AE, 0x10F48, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10F48, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10F48, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10F48, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10F48, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10F48, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10F48, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10F48, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10F48, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10F49, 0x0062], NFC: [0x00E0, 0x05AE, 0x10F49, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10F49, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10F49, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10F49, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10F49, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10F49, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10F49, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10F49, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10F49, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10F4A, 0x0062], NFC: [0x00E0, 0x05AE, 0x10F4A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10F4A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10F4A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10F4A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10F4A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10F4A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10F4A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10F4A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10F4A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F4B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F4B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F4B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F4B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F4B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F4B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F4B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F4B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F4B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F4B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10F4C, 0x0062], NFC: [0x00E0, 0x05AE, 0x10F4C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10F4C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10F4C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10F4C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10F4C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10F4C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10F4C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10F4C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10F4C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F4D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F4D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F4D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F4D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F4D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F4D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F4D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F4D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F4D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F4D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F4E, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F4E, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F4E, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F4E, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F4E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F4E, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F4E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F4E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F4E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F4E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F4F, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F4F, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F4F, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F4F, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F4F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F4F, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F4F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F4F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F4F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F4F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F50, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F50, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F50, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F50, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F50, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F50, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F50, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F50, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F50, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F50, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10F82, 0x0062], NFC: [0x00E0, 0x05AE, 0x10F82, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10F82, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10F82, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10F82, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10F82, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10F82, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10F82, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10F82, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10F82, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F83, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F83, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F83, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F83, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F83, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F83, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F83, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F83, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F83, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F83, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10F84, 0x0062], NFC: [0x00E0, 0x05AE, 0x10F84, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10F84, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10F84, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10F84, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10F84, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10F84, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10F84, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10F84, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10F84, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x10F85, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x10F85, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x10F85, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x10F85, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x10F85, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10F85, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x10F85, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x10F85, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x10F85, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x10F85, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11046, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11046, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11070, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11070, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11070, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11070, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11070, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11070, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11070, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11070, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11070, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11070, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1107F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1107F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1107F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1107F, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x110B9, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x110B9, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x110BA, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x110BA, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x110BA, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x110BA, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x110BA, 0x3099, 0x0062] }, +{ source: [0x0061, 0x110BA, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x110BA, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x110BA, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x110BA, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x110BA, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11100, 0x0062], NFC: [0x00E0, 0x05AE, 0x11100, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11100, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11100, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11100, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11100, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11101, 0x0062], NFC: [0x00E0, 0x05AE, 0x11101, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11101, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11101, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11101, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11101, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11102, 0x0062], NFC: [0x00E0, 0x05AE, 0x11102, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11102, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11102, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11102, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11102, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11133, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11133, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11134, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11134, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x11173, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x11173, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x11173, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x11173, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x11173, 0x3099, 0x0062] }, +{ source: [0x0061, 0x11173, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x11173, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x11173, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x11173, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x11173, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x111C0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x111C0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x111CA, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x111CA, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x111CA, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x111CA, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x111CA, 0x3099, 0x0062] }, +{ source: [0x0061, 0x111CA, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x111CA, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x111CA, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x111CA, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x111CA, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11235, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11235, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11235, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11235, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x11236, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x11236, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x11236, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x11236, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x11236, 0x3099, 0x0062] }, +{ source: [0x0061, 0x11236, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x11236, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x11236, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x11236, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x11236, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x112E9, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x112E9, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x112E9, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x112E9, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x112E9, 0x3099, 0x0062] }, +{ source: [0x0061, 0x112E9, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x112E9, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x112E9, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x112E9, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x112E9, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x112EA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x112EA, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x112EA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x112EA, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1133B, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1133B, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1133B, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1133B, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1133B, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1133B, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1133B, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1133B, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1133B, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1133B, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1133C, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1133C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1133C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1133C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1133C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1133C, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1133C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1133C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1133C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1133C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1134D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1134D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1134D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1134D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11366, 0x0062], NFC: [0x00E0, 0x05AE, 0x11366, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11366, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11366, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11366, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11366, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11366, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11367, 0x0062], NFC: [0x00E0, 0x05AE, 0x11367, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11367, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11367, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11367, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11367, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11367, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11368, 0x0062], NFC: [0x00E0, 0x05AE, 0x11368, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11368, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11368, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11368, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11368, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11368, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11369, 0x0062], NFC: [0x00E0, 0x05AE, 0x11369, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11369, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11369, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11369, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11369, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11369, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1136A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1136A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1136A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1136A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1136A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1136A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1136A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1136B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1136B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1136B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1136B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1136B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1136B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1136B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1136C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1136C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1136C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1136C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1136C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1136C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1136C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11370, 0x0062], NFC: [0x00E0, 0x05AE, 0x11370, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11370, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11370, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11370, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11370, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11370, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11371, 0x0062], NFC: [0x00E0, 0x05AE, 0x11371, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11371, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11371, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11371, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11371, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11371, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11372, 0x0062], NFC: [0x00E0, 0x05AE, 0x11372, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11372, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11372, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11372, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11372, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11372, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11373, 0x0062], NFC: [0x00E0, 0x05AE, 0x11373, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11373, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11373, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11373, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11373, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11373, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11374, 0x0062], NFC: [0x00E0, 0x05AE, 0x11374, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11374, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11374, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11374, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11374, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11374, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11442, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11442, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11442, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11442, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x11446, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x11446, 0x3099, 0x0062] }, +{ source: [0x0061, 0x11446, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x11446, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x11446, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x11446, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x11446, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1145E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1145E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1145E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1145E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1145E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1145E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1145E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1145E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1145E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1145E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x114C2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x114C2, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x114C2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x114C2, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x114C3, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x114C3, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x114C3, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x114C3, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x114C3, 0x3099, 0x0062] }, +{ source: [0x0061, 0x114C3, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x114C3, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x114C3, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x114C3, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x114C3, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x115BF, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x115BF, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x115BF, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x115BF, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x115C0, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x115C0, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x115C0, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x115C0, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x115C0, 0x3099, 0x0062] }, +{ source: [0x0061, 0x115C0, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x115C0, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x115C0, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x115C0, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x115C0, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1163F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1163F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1163F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1163F, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x116B6, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x116B6, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x116B7, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x116B7, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x116B7, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x116B7, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x116B7, 0x3099, 0x0062] }, +{ source: [0x0061, 0x116B7, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x116B7, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x116B7, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x116B7, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x116B7, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1172B, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1172B, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1172B, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1172B, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11839, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11839, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11839, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11839, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11839, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11839, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11839, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11839, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11839, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11839, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1183A, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1183A, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1183A, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1183A, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1183A, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1183A, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1183A, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1183A, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1183A, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1183A, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1193D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1193D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1193D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1193D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1193D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1193D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1193D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1193D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1193D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1193D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1193E, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1193E, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1193E, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1193E, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1193E, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1193E, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1193E, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1193E, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1193E, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1193E, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x11943, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x11943, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x11943, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x11943, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x11943, 0x3099, 0x0062] }, +{ source: [0x0061, 0x11943, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x11943, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x11943, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x11943, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x11943, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x119E0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x119E0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x119E0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x119E0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x119E0, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x119E0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x119E0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x119E0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x119E0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x119E0, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11A34, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11A34, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11A34, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11A34, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11A34, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11A34, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11A34, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11A34, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11A34, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11A34, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11A47, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11A47, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11A47, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11A47, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11A47, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11A47, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11A47, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11A47, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11A47, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11A47, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11A99, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11A99, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11A99, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11A99, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11A99, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11A99, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11A99, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11A99, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11A99, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11A99, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11C3F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11C3F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11C3F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11C3F, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x11D42, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x11D42, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x11D42, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x11D42, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x11D42, 0x3099, 0x0062] }, +{ source: [0x0061, 0x11D42, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x11D42, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x11D42, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x11D42, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x11D42, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11D44, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11D44, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11D44, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11D44, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11D44, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11D44, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11D44, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11D44, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11D44, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11D44, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11D45, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11D45, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11D45, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11D45, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11D45, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11D45, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11D45, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11D45, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11D45, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11D45, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11D97, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11D97, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11D97, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11D97, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11D97, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11D97, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11D97, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11D97, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11D97, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11D97, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11F41, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11F41, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11F41, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11F41, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11F41, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11F41, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11F41, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11F42, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11F42, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11F42, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11F42, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x16AF0, 0x0062], NFC: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF0, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16AF0, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x16AF0, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x16AF1, 0x0062], NFC: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF1, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16AF1, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x16AF1, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x16AF1, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x16AF1, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x16AF1, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x16AF2, 0x0062], NFC: [0x0061, 0x0334, 0x16AF2, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x16AF2, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF2, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF2, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16AF2, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x16AF2, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x16AF2, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x16AF2, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x16AF2, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x16AF3, 0x0062], NFC: [0x0061, 0x0334, 0x16AF3, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x16AF3, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF3, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF3, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16AF3, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x16AF3, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x16AF3, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x16AF3, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x16AF3, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x16AF4, 0x0062], NFC: [0x0061, 0x0334, 0x16AF4, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x16AF4, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x16AF4, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x16AF4, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16AF4, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x16AF4, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x16AF4, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x16AF4, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x16AF4, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B30, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B30, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B30, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B30, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B30, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16B30, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B30, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B31, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B31, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B31, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B31, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B31, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16B31, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B31, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B32, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B32, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B32, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B32, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B32, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16B32, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B32, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B33, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B33, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B33, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B33, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B33, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16B33, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B33, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B34, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B34, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B34, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B34, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B34, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16B34, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B34, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B35, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B35, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B35, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B35, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B35, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16B35, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B35, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x16B36, 0x0062], NFC: [0x00E0, 0x05AE, 0x16B36, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x16B36, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x16B36, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x16B36, 0x0315, 0x0062] }, +{ source: [0x0061, 0x16B36, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x16B36, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x16FF0, 0x0334, 0x16FF0, 0x0062], NFC: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x093C, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16FF0, 0x16FF0, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x16FF0, 0x0334, 0x16FF1, 0x0062], NFC: [0x0061, 0x0334, 0x16FF0, 0x16FF1, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16FF0, 0x16FF1, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16FF0, 0x16FF1, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16FF0, 0x16FF1, 0x093C, 0x0062] }, +{ source: [0x0061, 0x16FF1, 0x093C, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x16FF1, 0x16FF0, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x16FF1, 0x16FF0, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x16FF1, 0x16FF0, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x16FF1, 0x16FF0, 0x093C, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1BC9E, 0x0062], NFC: [0x0061, 0x0334, 0x1BC9E, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1BC9E, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1BC9E, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1BC9E, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1BC9E, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1BC9E, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1BC9E, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1BC9E, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1BC9E, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x1D165, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1D165, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x1D166, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1D166, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1D167, 0x0062], NFC: [0x0061, 0x0334, 0x1D167, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1D167, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1D167, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1D167, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1D167, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1D167, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1D167, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1D167, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1D167, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1D168, 0x0062], NFC: [0x0061, 0x0334, 0x1D168, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1D168, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1D168, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1D168, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1D168, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1D168, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1D168, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1D168, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1D168, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x16FF0, 0x0334, 0x1D169, 0x0062], NFC: [0x0061, 0x0334, 0x1D169, 0x16FF0, 0x0062], NFD: [0x0061, 0x0334, 0x1D169, 0x16FF0, 0x0062], NFKC: [0x0061, 0x0334, 0x1D169, 0x16FF0, 0x0062], NFKD: [0x0061, 0x0334, 0x1D169, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x1D169, 0x16FF0, 0x0334, 0x0062], NFC: [0x0061, 0x1D169, 0x0334, 0x16FF0, 0x0062], NFD: [0x0061, 0x1D169, 0x0334, 0x16FF0, 0x0062], NFKC: [0x0061, 0x1D169, 0x0334, 0x16FF0, 0x0062], NFKD: [0x0061, 0x1D169, 0x0334, 0x16FF0, 0x0062] }, +{ source: [0x0061, 0x05AE, 0x1D16D, 0x302E, 0x1D16D, 0x0062], NFC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062] }, +{ source: [0x0061, 0x1D16D, 0x05AE, 0x1D16D, 0x302E, 0x0062], NFC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x1D16E, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1D16E, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x1D16F, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1D16F, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x1D170, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1D170, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x1D171, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1D171, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1DFA, 0x031B, 0x1DCE, 0x1D172, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x1D172, 0x1DFA, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x1DFA, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x1DFA, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x1DFA, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x1DFA, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D17B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D17B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D17B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D17B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D17B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D17B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D17B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D17B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D17B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D17C, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D17C, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D17C, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D17C, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D17C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17C, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D17C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D17C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D17C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D17C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D17D, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D17D, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D17D, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D17D, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D17D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17D, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D17D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D17D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D17D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D17D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D17E, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D17E, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D17E, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D17E, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D17E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17E, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D17E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D17E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D17E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D17E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D17F, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D17F, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D17F, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D17F, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D17F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17F, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D17F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D17F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D17F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D17F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D180, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D180, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D180, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D180, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D180, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D180, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D180, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D180, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D180, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D180, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D181, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D181, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D181, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D181, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D181, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D181, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D181, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D181, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D181, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D181, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D182, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D182, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D182, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D182, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D182, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D182, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D182, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D182, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D182, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D182, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D185, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D185, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D185, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D185, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D185, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D185, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D186, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D186, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D186, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D186, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D186, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D186, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D187, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D187, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D187, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D187, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D187, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D187, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D188, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D188, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D188, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D188, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D188, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D188, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D189, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D189, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D189, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D189, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D189, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D189, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D18A, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D18A, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D18A, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D18A, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D18A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D18A, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D18A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D18A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D18A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D18A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1D18B, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1D18B, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1D18B, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1D18B, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1D18B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D18B, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1D18B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1D18B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1D18B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1D18B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AD, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D242, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D242, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D242, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D242, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D242, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D242, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D243, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D243, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D243, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D243, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D243, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D243, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D244, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D244, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D244, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D244, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D244, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D244, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E000, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E000, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E000, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E000, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E000, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E000, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E000, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E001, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E001, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E001, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E001, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E001, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E001, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E001, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E002, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E002, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E002, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E002, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E002, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E002, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E002, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E003, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E003, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E003, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E003, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E003, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E003, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E003, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E004, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E004, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E004, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E004, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E004, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E004, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E004, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E005, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E005, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E005, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E005, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E005, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E005, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E005, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E006, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E006, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E006, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E006, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E006, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E006, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E006, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E008, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E008, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E008, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E008, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E008, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E008, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E008, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E009, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E009, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E009, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E009, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E009, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E009, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E009, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E00A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E00B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E00C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00D, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E00D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E00E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E00F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E00F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E00F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E00F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E00F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E00F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E00F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E010, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E010, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E010, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E010, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E010, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E010, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E010, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E011, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E011, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E011, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E011, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E011, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E011, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E011, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E012, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E012, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E012, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E012, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E012, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E012, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E012, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E013, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E013, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E013, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E013, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E013, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E013, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E013, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E014, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E014, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E014, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E014, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E014, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E014, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E014, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E015, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E015, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E015, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E015, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E015, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E015, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E015, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E016, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E016, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E016, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E016, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E016, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E016, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E016, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E017, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E017, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E017, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E017, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E017, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E017, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E017, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E018, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E018, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E018, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E018, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E018, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E018, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E018, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E01B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E01C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01D, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E01D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E01E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E01F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E01F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E01F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E01F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E01F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E01F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E01F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E020, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E020, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E020, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E020, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E020, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E020, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E020, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E021, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E021, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E021, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E021, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E021, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E021, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E021, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E023, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E023, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E023, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E023, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E023, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E023, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E023, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E024, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E024, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E024, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E024, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E024, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E024, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E024, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E026, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E026, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E026, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E026, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E026, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E026, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E026, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E027, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E027, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E027, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E027, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E027, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E027, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E027, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E028, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E028, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E028, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E028, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E028, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E028, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E028, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E029, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E029, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E029, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E029, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E029, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E029, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E029, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E02A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E02A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E02A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E02A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E02A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E02A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E02A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E08F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E08F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E08F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E08F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E08F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E08F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E08F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E08F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E08F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E08F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E130, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E130, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E130, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E130, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E130, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E130, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E130, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E130, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E130, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E130, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E131, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E131, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E131, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E131, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E131, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E131, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E131, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E131, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E131, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E131, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E132, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E132, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E132, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E132, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E132, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E132, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E132, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E132, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E132, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E132, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E133, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E133, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E133, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E133, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E133, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E133, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E133, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E133, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E133, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E133, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E134, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E134, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E134, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E134, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E134, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E134, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E134, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E134, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E134, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E134, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E135, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E135, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E135, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E135, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E135, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E135, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E135, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E135, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E135, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E135, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E136, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E136, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E136, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E136, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E136, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E136, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E136, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E136, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E136, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E136, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E2AE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E2AE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E2AE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E2AE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E2AE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E2AE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E2AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E2AE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E2AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E2AE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E2EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E2EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E2EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E2EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E2EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E2EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E2EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E2EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E2EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E2EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E2ED, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E2ED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E2ED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E2ED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E2ED, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E2ED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E2ED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E2ED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E2ED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E2ED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E2EE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E2EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E2EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E2EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E2EE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E2EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E2EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E2EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E2EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E2EE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E2EF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E2EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E2EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E2EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E2EF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E2EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E2EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E2EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E2EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E2EF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x1E4EC, 0x0062], NFC: [0x00E0, 0x0315, 0x1E4EC, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x1E4EC, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x1E4EC, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x1E4EC, 0x035C, 0x0062] }, +{ source: [0x0061, 0x1E4EC, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x1E4EC, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x1E4EC, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x1E4EC, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x1E4EC, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x1E4ED, 0x0062], NFC: [0x00E0, 0x0315, 0x1E4ED, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x1E4ED, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x1E4ED, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x1E4ED, 0x035C, 0x0062] }, +{ source: [0x0061, 0x1E4ED, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x1E4ED, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x1E4ED, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x1E4ED, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x1E4ED, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E4EE, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E4EE, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E4EE, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E4EE, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E4EE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E4EE, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E4EE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E4EF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E4EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E4EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E4EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E4EF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E4EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E4EF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D0, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D0, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E8D0, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D0, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D1, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D1, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E8D1, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D1, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D1, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D1, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D1, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D2, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D2, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D2, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D2, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E8D2, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D3, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D3, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D3, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D3, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E8D3, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D4, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D4, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D4, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D4, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D4, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E8D4, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D4, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D5, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D5, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D5, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D5, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E8D5, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x1DFA, 0x1E8D6, 0x0062], NFC: [0x0061, 0x1DFA, 0x0316, 0x1E8D6, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x0316, 0x1E8D6, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x0316, 0x1E8D6, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x0316, 0x1E8D6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1E8D6, 0x059A, 0x0316, 0x1DFA, 0x0062], NFC: [0x0061, 0x1DFA, 0x1E8D6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x1DFA, 0x1E8D6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x1DFA, 0x1E8D6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x1DFA, 0x1E8D6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E944, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E944, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E944, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E944, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E944, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E944, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E944, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E945, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E945, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E945, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E945, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E945, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E945, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E945, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E946, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E946, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E946, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E946, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E946, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E946, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E946, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E947, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E947, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E947, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E947, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E947, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E947, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E947, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E948, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E948, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E948, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E948, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E948, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E948, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E948, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1E949, 0x0062], NFC: [0x00E0, 0x05AE, 0x1E949, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1E949, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1E949, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1E949, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1E949, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1E949, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x16FF0, 0x1E94A, 0x0062], NFC: [0x0061, 0x16FF0, 0x093C, 0x1E94A, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x093C, 0x1E94A, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x093C, 0x1E94A, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x093C, 0x1E94A, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1E94A, 0x3099, 0x093C, 0x16FF0, 0x0062], NFC: [0x0061, 0x16FF0, 0x1E94A, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x16FF0, 0x1E94A, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x16FF0, 0x1E94A, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x16FF0, 0x1E94A, 0x093C, 0x3099, 0x0062] } +]; +/* Part3 # PRI #29 Test */ +var tests_part3 = [ +{ source: [0x09C7, 0x0334, 0x09BE], NFC: [0x09C7, 0x0334, 0x09BE], NFD: [0x09C7, 0x0334, 0x09BE], NFKC: [0x09C7, 0x0334, 0x09BE], NFKD: [0x09C7, 0x0334, 0x09BE] }, +{ source: [0x09C7, 0x0334, 0x09D7], NFC: [0x09C7, 0x0334, 0x09D7], NFD: [0x09C7, 0x0334, 0x09D7], NFKC: [0x09C7, 0x0334, 0x09D7], NFKD: [0x09C7, 0x0334, 0x09D7] }, +{ source: [0x0B47, 0x0334, 0x0B3E], NFC: [0x0B47, 0x0334, 0x0B3E], NFD: [0x0B47, 0x0334, 0x0B3E], NFKC: [0x0B47, 0x0334, 0x0B3E], NFKD: [0x0B47, 0x0334, 0x0B3E] }, +{ source: [0x0B47, 0x0334, 0x0B56], NFC: [0x0B47, 0x0334, 0x0B56], NFD: [0x0B47, 0x0334, 0x0B56], NFKC: [0x0B47, 0x0334, 0x0B56], NFKD: [0x0B47, 0x0334, 0x0B56] }, +{ source: [0x0B47, 0x0334, 0x0B57], NFC: [0x0B47, 0x0334, 0x0B57], NFD: [0x0B47, 0x0334, 0x0B57], NFKC: [0x0B47, 0x0334, 0x0B57], NFKD: [0x0B47, 0x0334, 0x0B57] }, +{ source: [0x0B92, 0x0334, 0x0BD7], NFC: [0x0B92, 0x0334, 0x0BD7], NFD: [0x0B92, 0x0334, 0x0BD7], NFKC: [0x0B92, 0x0334, 0x0BD7], NFKD: [0x0B92, 0x0334, 0x0BD7] }, +{ source: [0x0BC6, 0x0334, 0x0BBE], NFC: [0x0BC6, 0x0334, 0x0BBE], NFD: [0x0BC6, 0x0334, 0x0BBE], NFKC: [0x0BC6, 0x0334, 0x0BBE], NFKD: [0x0BC6, 0x0334, 0x0BBE] }, +{ source: [0x0BC6, 0x0334, 0x0BD7], NFC: [0x0BC6, 0x0334, 0x0BD7], NFD: [0x0BC6, 0x0334, 0x0BD7], NFKC: [0x0BC6, 0x0334, 0x0BD7], NFKD: [0x0BC6, 0x0334, 0x0BD7] }, +{ source: [0x0BC7, 0x0334, 0x0BBE], NFC: [0x0BC7, 0x0334, 0x0BBE], NFD: [0x0BC7, 0x0334, 0x0BBE], NFKC: [0x0BC7, 0x0334, 0x0BBE], NFKD: [0x0BC7, 0x0334, 0x0BBE] }, +{ source: [0x0CBF, 0x0334, 0x0CD5], NFC: [0x0CBF, 0x0334, 0x0CD5], NFD: [0x0CBF, 0x0334, 0x0CD5], NFKC: [0x0CBF, 0x0334, 0x0CD5], NFKD: [0x0CBF, 0x0334, 0x0CD5] }, +{ source: [0x0CC6, 0x0334, 0x0CC2], NFC: [0x0CC6, 0x0334, 0x0CC2], NFD: [0x0CC6, 0x0334, 0x0CC2], NFKC: [0x0CC6, 0x0334, 0x0CC2], NFKD: [0x0CC6, 0x0334, 0x0CC2] }, +{ source: [0x0CC6, 0x0334, 0x0CD5], NFC: [0x0CC6, 0x0334, 0x0CD5], NFD: [0x0CC6, 0x0334, 0x0CD5], NFKC: [0x0CC6, 0x0334, 0x0CD5], NFKD: [0x0CC6, 0x0334, 0x0CD5] }, +{ source: [0x0CC6, 0x0334, 0x0CD6], NFC: [0x0CC6, 0x0334, 0x0CD6], NFD: [0x0CC6, 0x0334, 0x0CD6], NFKC: [0x0CC6, 0x0334, 0x0CD6], NFKD: [0x0CC6, 0x0334, 0x0CD6] }, +{ source: [0x0CCA, 0x0334, 0x0CD5], NFC: [0x0CCA, 0x0334, 0x0CD5], NFD: [0x0CC6, 0x0CC2, 0x0334, 0x0CD5], NFKC: [0x0CCA, 0x0334, 0x0CD5], NFKD: [0x0CC6, 0x0CC2, 0x0334, 0x0CD5] }, +{ source: [0x0D46, 0x0334, 0x0D3E], NFC: [0x0D46, 0x0334, 0x0D3E], NFD: [0x0D46, 0x0334, 0x0D3E], NFKC: [0x0D46, 0x0334, 0x0D3E], NFKD: [0x0D46, 0x0334, 0x0D3E] }, +{ source: [0x0D46, 0x0334, 0x0D57], NFC: [0x0D46, 0x0334, 0x0D57], NFD: [0x0D46, 0x0334, 0x0D57], NFKC: [0x0D46, 0x0334, 0x0D57], NFKD: [0x0D46, 0x0334, 0x0D57] }, +{ source: [0x0D47, 0x0334, 0x0D3E], NFC: [0x0D47, 0x0334, 0x0D3E], NFD: [0x0D47, 0x0334, 0x0D3E], NFKC: [0x0D47, 0x0334, 0x0D3E], NFKD: [0x0D47, 0x0334, 0x0D3E] }, +{ source: [0x0DD9, 0x0334, 0x0DCF], NFC: [0x0DD9, 0x0334, 0x0DCF], NFD: [0x0DD9, 0x0334, 0x0DCF], NFKC: [0x0DD9, 0x0334, 0x0DCF], NFKD: [0x0DD9, 0x0334, 0x0DCF] }, +{ source: [0x0DD9, 0x0334, 0x0DDF], NFC: [0x0DD9, 0x0334, 0x0DDF], NFD: [0x0DD9, 0x0334, 0x0DDF], NFKC: [0x0DD9, 0x0334, 0x0DDF], NFKD: [0x0DD9, 0x0334, 0x0DDF] }, +{ source: [0x0F40, 0x0334, 0x0FB5], NFC: [0x0F40, 0x0334, 0x0FB5], NFD: [0x0F40, 0x0334, 0x0FB5], NFKC: [0x0F40, 0x0334, 0x0FB5], NFKD: [0x0F40, 0x0334, 0x0FB5] }, +{ source: [0x0F42, 0x0334, 0x0FB7], NFC: [0x0F42, 0x0334, 0x0FB7], NFD: [0x0F42, 0x0334, 0x0FB7], NFKC: [0x0F42, 0x0334, 0x0FB7], NFKD: [0x0F42, 0x0334, 0x0FB7] }, +{ source: [0x0F4C, 0x0334, 0x0FB7], NFC: [0x0F4C, 0x0334, 0x0FB7], NFD: [0x0F4C, 0x0334, 0x0FB7], NFKC: [0x0F4C, 0x0334, 0x0FB7], NFKD: [0x0F4C, 0x0334, 0x0FB7] }, +{ source: [0x0F51, 0x0334, 0x0FB7], NFC: [0x0F51, 0x0334, 0x0FB7], NFD: [0x0F51, 0x0334, 0x0FB7], NFKC: [0x0F51, 0x0334, 0x0FB7], NFKD: [0x0F51, 0x0334, 0x0FB7] }, +{ source: [0x0F56, 0x0334, 0x0FB7], NFC: [0x0F56, 0x0334, 0x0FB7], NFD: [0x0F56, 0x0334, 0x0FB7], NFKC: [0x0F56, 0x0334, 0x0FB7], NFKD: [0x0F56, 0x0334, 0x0FB7] }, +{ source: [0x0F5B, 0x0334, 0x0FB7], NFC: [0x0F5B, 0x0334, 0x0FB7], NFD: [0x0F5B, 0x0334, 0x0FB7], NFKC: [0x0F5B, 0x0334, 0x0FB7], NFKD: [0x0F5B, 0x0334, 0x0FB7] }, +{ source: [0x0F90, 0x0334, 0x0FB5], NFC: [0x0F90, 0x0334, 0x0FB5], NFD: [0x0F90, 0x0334, 0x0FB5], NFKC: [0x0F90, 0x0334, 0x0FB5], NFKD: [0x0F90, 0x0334, 0x0FB5] }, +{ source: [0x0F92, 0x0334, 0x0FB7], NFC: [0x0F92, 0x0334, 0x0FB7], NFD: [0x0F92, 0x0334, 0x0FB7], NFKC: [0x0F92, 0x0334, 0x0FB7], NFKD: [0x0F92, 0x0334, 0x0FB7] }, +{ source: [0x0F9C, 0x0334, 0x0FB7], NFC: [0x0F9C, 0x0334, 0x0FB7], NFD: [0x0F9C, 0x0334, 0x0FB7], NFKC: [0x0F9C, 0x0334, 0x0FB7], NFKD: [0x0F9C, 0x0334, 0x0FB7] }, +{ source: [0x0FA1, 0x0334, 0x0FB7], NFC: [0x0FA1, 0x0334, 0x0FB7], NFD: [0x0FA1, 0x0334, 0x0FB7], NFKC: [0x0FA1, 0x0334, 0x0FB7], NFKD: [0x0FA1, 0x0334, 0x0FB7] }, +{ source: [0x0FA6, 0x0334, 0x0FB7], NFC: [0x0FA6, 0x0334, 0x0FB7], NFD: [0x0FA6, 0x0334, 0x0FB7], NFKC: [0x0FA6, 0x0334, 0x0FB7], NFKD: [0x0FA6, 0x0334, 0x0FB7] }, +{ source: [0x0FAB, 0x0334, 0x0FB7], NFC: [0x0FAB, 0x0334, 0x0FB7], NFD: [0x0FAB, 0x0334, 0x0FB7], NFKC: [0x0FAB, 0x0334, 0x0FB7], NFKD: [0x0FAB, 0x0334, 0x0FB7] }, +{ source: [0x1025, 0x0334, 0x102E], NFC: [0x1025, 0x0334, 0x102E], NFD: [0x1025, 0x0334, 0x102E], NFKC: [0x1025, 0x0334, 0x102E], NFKD: [0x1025, 0x0334, 0x102E] }, +{ source: [0x1100, 0x0334, 0x1161], NFC: [0x1100, 0x0334, 0x1161], NFD: [0x1100, 0x0334, 0x1161], NFKC: [0x1100, 0x0334, 0x1161], NFKD: [0x1100, 0x0334, 0x1161] }, +{ source: [0x1100, 0x0334, 0x116E], NFC: [0x1100, 0x0334, 0x116E], NFD: [0x1100, 0x0334, 0x116E], NFKC: [0x1100, 0x0334, 0x116E], NFKD: [0x1100, 0x0334, 0x116E] }, +{ source: [0x1101, 0x0334, 0x1166], NFC: [0x1101, 0x0334, 0x1166], NFD: [0x1101, 0x0334, 0x1166], NFKC: [0x1101, 0x0334, 0x1166], NFKD: [0x1101, 0x0334, 0x1166] }, +{ source: [0x1101, 0x0334, 0x1173], NFC: [0x1101, 0x0334, 0x1173], NFD: [0x1101, 0x0334, 0x1173], NFKC: [0x1101, 0x0334, 0x1173], NFKD: [0x1101, 0x0334, 0x1173] }, +{ source: [0x1102, 0x0334, 0x116B], NFC: [0x1102, 0x0334, 0x116B], NFD: [0x1102, 0x0334, 0x116B], NFKC: [0x1102, 0x0334, 0x116B], NFKD: [0x1102, 0x0334, 0x116B] }, +{ source: [0x1103, 0x0334, 0x1163], NFC: [0x1103, 0x0334, 0x1163], NFD: [0x1103, 0x0334, 0x1163], NFKC: [0x1103, 0x0334, 0x1163], NFKD: [0x1103, 0x0334, 0x1163] }, +{ source: [0x1103, 0x0334, 0x1170], NFC: [0x1103, 0x0334, 0x1170], NFD: [0x1103, 0x0334, 0x1170], NFKC: [0x1103, 0x0334, 0x1170], NFKD: [0x1103, 0x0334, 0x1170] }, +{ source: [0x1104, 0x0334, 0x1168], NFC: [0x1104, 0x0334, 0x1168], NFD: [0x1104, 0x0334, 0x1168], NFKC: [0x1104, 0x0334, 0x1168], NFKD: [0x1104, 0x0334, 0x1168] }, +{ source: [0x1104, 0x0334, 0x1175], NFC: [0x1104, 0x0334, 0x1175], NFD: [0x1104, 0x0334, 0x1175], NFKC: [0x1104, 0x0334, 0x1175], NFKD: [0x1104, 0x0334, 0x1175] }, +{ source: [0x1105, 0x0334, 0x116D], NFC: [0x1105, 0x0334, 0x116D], NFD: [0x1105, 0x0334, 0x116D], NFKC: [0x1105, 0x0334, 0x116D], NFKD: [0x1105, 0x0334, 0x116D] }, +{ source: [0x1106, 0x0334, 0x1165], NFC: [0x1106, 0x0334, 0x1165], NFD: [0x1106, 0x0334, 0x1165], NFKC: [0x1106, 0x0334, 0x1165], NFKD: [0x1106, 0x0334, 0x1165] }, +{ source: [0x1106, 0x0334, 0x1172], NFC: [0x1106, 0x0334, 0x1172], NFD: [0x1106, 0x0334, 0x1172], NFKC: [0x1106, 0x0334, 0x1172], NFKD: [0x1106, 0x0334, 0x1172] }, +{ source: [0x1107, 0x0334, 0x116A], NFC: [0x1107, 0x0334, 0x116A], NFD: [0x1107, 0x0334, 0x116A], NFKC: [0x1107, 0x0334, 0x116A], NFKD: [0x1107, 0x0334, 0x116A] }, +{ source: [0x1108, 0x0334, 0x1162], NFC: [0x1108, 0x0334, 0x1162], NFD: [0x1108, 0x0334, 0x1162], NFKC: [0x1108, 0x0334, 0x1162], NFKD: [0x1108, 0x0334, 0x1162] }, +{ source: [0x1108, 0x0334, 0x116F], NFC: [0x1108, 0x0334, 0x116F], NFD: [0x1108, 0x0334, 0x116F], NFKC: [0x1108, 0x0334, 0x116F], NFKD: [0x1108, 0x0334, 0x116F] }, +{ source: [0x1109, 0x0334, 0x1167], NFC: [0x1109, 0x0334, 0x1167], NFD: [0x1109, 0x0334, 0x1167], NFKC: [0x1109, 0x0334, 0x1167], NFKD: [0x1109, 0x0334, 0x1167] }, +{ source: [0x1109, 0x0334, 0x1174], NFC: [0x1109, 0x0334, 0x1174], NFD: [0x1109, 0x0334, 0x1174], NFKC: [0x1109, 0x0334, 0x1174], NFKD: [0x1109, 0x0334, 0x1174] }, +{ source: [0x110A, 0x0334, 0x116C], NFC: [0x110A, 0x0334, 0x116C], NFD: [0x110A, 0x0334, 0x116C], NFKC: [0x110A, 0x0334, 0x116C], NFKD: [0x110A, 0x0334, 0x116C] }, +{ source: [0x110B, 0x0334, 0x1164], NFC: [0x110B, 0x0334, 0x1164], NFD: [0x110B, 0x0334, 0x1164], NFKC: [0x110B, 0x0334, 0x1164], NFKD: [0x110B, 0x0334, 0x1164] }, +{ source: [0x110B, 0x0334, 0x1171], NFC: [0x110B, 0x0334, 0x1171], NFD: [0x110B, 0x0334, 0x1171], NFKC: [0x110B, 0x0334, 0x1171], NFKD: [0x110B, 0x0334, 0x1171] }, +{ source: [0x110C, 0x0334, 0x1169], NFC: [0x110C, 0x0334, 0x1169], NFD: [0x110C, 0x0334, 0x1169], NFKC: [0x110C, 0x0334, 0x1169], NFKD: [0x110C, 0x0334, 0x1169] }, +{ source: [0x110D, 0x0334, 0x1161], NFC: [0x110D, 0x0334, 0x1161], NFD: [0x110D, 0x0334, 0x1161], NFKC: [0x110D, 0x0334, 0x1161], NFKD: [0x110D, 0x0334, 0x1161] }, +{ source: [0x110D, 0x0334, 0x116E], NFC: [0x110D, 0x0334, 0x116E], NFD: [0x110D, 0x0334, 0x116E], NFKC: [0x110D, 0x0334, 0x116E], NFKD: [0x110D, 0x0334, 0x116E] }, +{ source: [0x110E, 0x0334, 0x1166], NFC: [0x110E, 0x0334, 0x1166], NFD: [0x110E, 0x0334, 0x1166], NFKC: [0x110E, 0x0334, 0x1166], NFKD: [0x110E, 0x0334, 0x1166] }, +{ source: [0x110E, 0x0334, 0x1173], NFC: [0x110E, 0x0334, 0x1173], NFD: [0x110E, 0x0334, 0x1173], NFKC: [0x110E, 0x0334, 0x1173], NFKD: [0x110E, 0x0334, 0x1173] }, +{ source: [0x110F, 0x0334, 0x116B], NFC: [0x110F, 0x0334, 0x116B], NFD: [0x110F, 0x0334, 0x116B], NFKC: [0x110F, 0x0334, 0x116B], NFKD: [0x110F, 0x0334, 0x116B] }, +{ source: [0x1110, 0x0334, 0x1163], NFC: [0x1110, 0x0334, 0x1163], NFD: [0x1110, 0x0334, 0x1163], NFKC: [0x1110, 0x0334, 0x1163], NFKD: [0x1110, 0x0334, 0x1163] }, +{ source: [0x1110, 0x0334, 0x1170], NFC: [0x1110, 0x0334, 0x1170], NFD: [0x1110, 0x0334, 0x1170], NFKC: [0x1110, 0x0334, 0x1170], NFKD: [0x1110, 0x0334, 0x1170] }, +{ source: [0x1111, 0x0334, 0x1168], NFC: [0x1111, 0x0334, 0x1168], NFD: [0x1111, 0x0334, 0x1168], NFKC: [0x1111, 0x0334, 0x1168], NFKD: [0x1111, 0x0334, 0x1168] }, +{ source: [0x1111, 0x0334, 0x1175], NFC: [0x1111, 0x0334, 0x1175], NFD: [0x1111, 0x0334, 0x1175], NFKC: [0x1111, 0x0334, 0x1175], NFKD: [0x1111, 0x0334, 0x1175] }, +{ source: [0x1112, 0x0334, 0x116D], NFC: [0x1112, 0x0334, 0x116D], NFD: [0x1112, 0x0334, 0x116D], NFKC: [0x1112, 0x0334, 0x116D], NFKD: [0x1112, 0x0334, 0x116D] }, +{ source: [0x1B05, 0x0334, 0x1B35], NFC: [0x1B05, 0x0334, 0x1B35], NFD: [0x1B05, 0x0334, 0x1B35], NFKC: [0x1B05, 0x0334, 0x1B35], NFKD: [0x1B05, 0x0334, 0x1B35] }, +{ source: [0x1B07, 0x0334, 0x1B35], NFC: [0x1B07, 0x0334, 0x1B35], NFD: [0x1B07, 0x0334, 0x1B35], NFKC: [0x1B07, 0x0334, 0x1B35], NFKD: [0x1B07, 0x0334, 0x1B35] }, +{ source: [0x1B09, 0x0334, 0x1B35], NFC: [0x1B09, 0x0334, 0x1B35], NFD: [0x1B09, 0x0334, 0x1B35], NFKC: [0x1B09, 0x0334, 0x1B35], NFKD: [0x1B09, 0x0334, 0x1B35] }, +{ source: [0x1B0B, 0x0334, 0x1B35], NFC: [0x1B0B, 0x0334, 0x1B35], NFD: [0x1B0B, 0x0334, 0x1B35], NFKC: [0x1B0B, 0x0334, 0x1B35], NFKD: [0x1B0B, 0x0334, 0x1B35] }, +{ source: [0x1B0D, 0x0334, 0x1B35], NFC: [0x1B0D, 0x0334, 0x1B35], NFD: [0x1B0D, 0x0334, 0x1B35], NFKC: [0x1B0D, 0x0334, 0x1B35], NFKD: [0x1B0D, 0x0334, 0x1B35] }, +{ source: [0x1B11, 0x0334, 0x1B35], NFC: [0x1B11, 0x0334, 0x1B35], NFD: [0x1B11, 0x0334, 0x1B35], NFKC: [0x1B11, 0x0334, 0x1B35], NFKD: [0x1B11, 0x0334, 0x1B35] }, +{ source: [0x1B3A, 0x0334, 0x1B35], NFC: [0x1B3A, 0x0334, 0x1B35], NFD: [0x1B3A, 0x0334, 0x1B35], NFKC: [0x1B3A, 0x0334, 0x1B35], NFKD: [0x1B3A, 0x0334, 0x1B35] }, +{ source: [0x1B3C, 0x0334, 0x1B35], NFC: [0x1B3C, 0x0334, 0x1B35], NFD: [0x1B3C, 0x0334, 0x1B35], NFKC: [0x1B3C, 0x0334, 0x1B35], NFKD: [0x1B3C, 0x0334, 0x1B35] }, +{ source: [0x1B3E, 0x0334, 0x1B35], NFC: [0x1B3E, 0x0334, 0x1B35], NFD: [0x1B3E, 0x0334, 0x1B35], NFKC: [0x1B3E, 0x0334, 0x1B35], NFKD: [0x1B3E, 0x0334, 0x1B35] }, +{ source: [0x1B3F, 0x0334, 0x1B35], NFC: [0x1B3F, 0x0334, 0x1B35], NFD: [0x1B3F, 0x0334, 0x1B35], NFKC: [0x1B3F, 0x0334, 0x1B35], NFKD: [0x1B3F, 0x0334, 0x1B35] }, +{ source: [0x1B42, 0x0334, 0x1B35], NFC: [0x1B42, 0x0334, 0x1B35], NFD: [0x1B42, 0x0334, 0x1B35], NFKC: [0x1B42, 0x0334, 0x1B35], NFKD: [0x1B42, 0x0334, 0x1B35] }, +{ source: [0xAC54, 0x0334, 0x11AE], NFC: [0xAC54, 0x0334, 0x11AE], NFD: [0x1100, 0x1164, 0x0334, 0x11AE], NFKC: [0xAC54, 0x0334, 0x11AE], NFKD: [0x1100, 0x1164, 0x0334, 0x11AE] }, +{ source: [0xACA8, 0x0334, 0x11B5], NFC: [0xACA8, 0x0334, 0x11B5], NFD: [0x1100, 0x1167, 0x0334, 0x11B5], NFKC: [0xACA8, 0x0334, 0x11B5], NFKD: [0x1100, 0x1167, 0x0334, 0x11B5] }, +{ source: [0xACFC, 0x0334, 0x11BC], NFC: [0xACFC, 0x0334, 0x11BC], NFD: [0x1100, 0x116A, 0x0334, 0x11BC], NFKC: [0xACFC, 0x0334, 0x11BC], NFKD: [0x1100, 0x116A, 0x0334, 0x11BC] }, +{ source: [0xADC0, 0x0334, 0x11AE], NFC: [0xADC0, 0x0334, 0x11AE], NFD: [0x1100, 0x1171, 0x0334, 0x11AE], NFKC: [0xADC0, 0x0334, 0x11AE], NFKD: [0x1100, 0x1171, 0x0334, 0x11AE] }, +{ source: [0xAE14, 0x0334, 0x11B5], NFC: [0xAE14, 0x0334, 0x11B5], NFD: [0x1100, 0x1174, 0x0334, 0x11B5], NFKC: [0xAE14, 0x0334, 0x11B5], NFKD: [0x1100, 0x1174, 0x0334, 0x11B5] }, +{ source: [0xAE68, 0x0334, 0x11BC], NFC: [0xAE68, 0x0334, 0x11BC], NFD: [0x1101, 0x1162, 0x0334, 0x11BC], NFKC: [0xAE68, 0x0334, 0x11BC], NFKD: [0x1101, 0x1162, 0x0334, 0x11BC] }, +{ source: [0xAF2C, 0x0334, 0x11AE], NFC: [0xAF2C, 0x0334, 0x11AE], NFD: [0x1101, 0x1169, 0x0334, 0x11AE], NFKC: [0xAF2C, 0x0334, 0x11AE], NFKD: [0x1101, 0x1169, 0x0334, 0x11AE] }, +{ source: [0xAF80, 0x0334, 0x11B5], NFC: [0xAF80, 0x0334, 0x11B5], NFD: [0x1101, 0x116C, 0x0334, 0x11B5], NFKC: [0xAF80, 0x0334, 0x11B5], NFKD: [0x1101, 0x116C, 0x0334, 0x11B5] }, +{ source: [0xAFD4, 0x0334, 0x11BC], NFC: [0xAFD4, 0x0334, 0x11BC], NFD: [0x1101, 0x116F, 0x0334, 0x11BC], NFKC: [0xAFD4, 0x0334, 0x11BC], NFKD: [0x1101, 0x116F, 0x0334, 0x11BC] }, +{ source: [0xB098, 0x0334, 0x11AE], NFC: [0xB098, 0x0334, 0x11AE], NFD: [0x1102, 0x1161, 0x0334, 0x11AE], NFKC: [0xB098, 0x0334, 0x11AE], NFKD: [0x1102, 0x1161, 0x0334, 0x11AE] }, +{ source: [0xB0EC, 0x0334, 0x11B5], NFC: [0xB0EC, 0x0334, 0x11B5], NFD: [0x1102, 0x1164, 0x0334, 0x11B5], NFKC: [0xB0EC, 0x0334, 0x11B5], NFKD: [0x1102, 0x1164, 0x0334, 0x11B5] }, +{ source: [0xB140, 0x0334, 0x11BC], NFC: [0xB140, 0x0334, 0x11BC], NFD: [0x1102, 0x1167, 0x0334, 0x11BC], NFKC: [0xB140, 0x0334, 0x11BC], NFKD: [0x1102, 0x1167, 0x0334, 0x11BC] }, +{ source: [0xB204, 0x0334, 0x11AE], NFC: [0xB204, 0x0334, 0x11AE], NFD: [0x1102, 0x116E, 0x0334, 0x11AE], NFKC: [0xB204, 0x0334, 0x11AE], NFKD: [0x1102, 0x116E, 0x0334, 0x11AE] }, +{ source: [0xB258, 0x0334, 0x11B5], NFC: [0xB258, 0x0334, 0x11B5], NFD: [0x1102, 0x1171, 0x0334, 0x11B5], NFKC: [0xB258, 0x0334, 0x11B5], NFKD: [0x1102, 0x1171, 0x0334, 0x11B5] }, +{ source: [0xB2AC, 0x0334, 0x11BC], NFC: [0xB2AC, 0x0334, 0x11BC], NFD: [0x1102, 0x1174, 0x0334, 0x11BC], NFKC: [0xB2AC, 0x0334, 0x11BC], NFKD: [0x1102, 0x1174, 0x0334, 0x11BC] }, +{ source: [0xB370, 0x0334, 0x11AE], NFC: [0xB370, 0x0334, 0x11AE], NFD: [0x1103, 0x1166, 0x0334, 0x11AE], NFKC: [0xB370, 0x0334, 0x11AE], NFKD: [0x1103, 0x1166, 0x0334, 0x11AE] }, +{ source: [0xB3C4, 0x0334, 0x11B5], NFC: [0xB3C4, 0x0334, 0x11B5], NFD: [0x1103, 0x1169, 0x0334, 0x11B5], NFKC: [0xB3C4, 0x0334, 0x11B5], NFKD: [0x1103, 0x1169, 0x0334, 0x11B5] }, +{ source: [0xB418, 0x0334, 0x11BC], NFC: [0xB418, 0x0334, 0x11BC], NFD: [0x1103, 0x116C, 0x0334, 0x11BC], NFKC: [0xB418, 0x0334, 0x11BC], NFKD: [0x1103, 0x116C, 0x0334, 0x11BC] }, +{ source: [0xB4DC, 0x0334, 0x11AE], NFC: [0xB4DC, 0x0334, 0x11AE], NFD: [0x1103, 0x1173, 0x0334, 0x11AE], NFKC: [0xB4DC, 0x0334, 0x11AE], NFKD: [0x1103, 0x1173, 0x0334, 0x11AE] }, +{ source: [0xB530, 0x0334, 0x11B5], NFC: [0xB530, 0x0334, 0x11B5], NFD: [0x1104, 0x1161, 0x0334, 0x11B5], NFKC: [0xB530, 0x0334, 0x11B5], NFKD: [0x1104, 0x1161, 0x0334, 0x11B5] }, +{ source: [0xB584, 0x0334, 0x11BC], NFC: [0xB584, 0x0334, 0x11BC], NFD: [0x1104, 0x1164, 0x0334, 0x11BC], NFKC: [0xB584, 0x0334, 0x11BC], NFKD: [0x1104, 0x1164, 0x0334, 0x11BC] }, +{ source: [0xB648, 0x0334, 0x11AE], NFC: [0xB648, 0x0334, 0x11AE], NFD: [0x1104, 0x116B, 0x0334, 0x11AE], NFKC: [0xB648, 0x0334, 0x11AE], NFKD: [0x1104, 0x116B, 0x0334, 0x11AE] }, +{ source: [0xB69C, 0x0334, 0x11B5], NFC: [0xB69C, 0x0334, 0x11B5], NFD: [0x1104, 0x116E, 0x0334, 0x11B5], NFKC: [0xB69C, 0x0334, 0x11B5], NFKD: [0x1104, 0x116E, 0x0334, 0x11B5] }, +{ source: [0xB6F0, 0x0334, 0x11BC], NFC: [0xB6F0, 0x0334, 0x11BC], NFD: [0x1104, 0x1171, 0x0334, 0x11BC], NFKC: [0xB6F0, 0x0334, 0x11BC], NFKD: [0x1104, 0x1171, 0x0334, 0x11BC] }, +{ source: [0xB7B4, 0x0334, 0x11AE], NFC: [0xB7B4, 0x0334, 0x11AE], NFD: [0x1105, 0x1163, 0x0334, 0x11AE], NFKC: [0xB7B4, 0x0334, 0x11AE], NFKD: [0x1105, 0x1163, 0x0334, 0x11AE] }, +{ source: [0xB808, 0x0334, 0x11B5], NFC: [0xB808, 0x0334, 0x11B5], NFD: [0x1105, 0x1166, 0x0334, 0x11B5], NFKC: [0xB808, 0x0334, 0x11B5], NFKD: [0x1105, 0x1166, 0x0334, 0x11B5] }, +{ source: [0xB85C, 0x0334, 0x11BC], NFC: [0xB85C, 0x0334, 0x11BC], NFD: [0x1105, 0x1169, 0x0334, 0x11BC], NFKC: [0xB85C, 0x0334, 0x11BC], NFKD: [0x1105, 0x1169, 0x0334, 0x11BC] }, +{ source: [0xB920, 0x0334, 0x11AE], NFC: [0xB920, 0x0334, 0x11AE], NFD: [0x1105, 0x1170, 0x0334, 0x11AE], NFKC: [0xB920, 0x0334, 0x11AE], NFKD: [0x1105, 0x1170, 0x0334, 0x11AE] }, +{ source: [0xB974, 0x0334, 0x11B5], NFC: [0xB974, 0x0334, 0x11B5], NFD: [0x1105, 0x1173, 0x0334, 0x11B5], NFKC: [0xB974, 0x0334, 0x11B5], NFKD: [0x1105, 0x1173, 0x0334, 0x11B5] }, +{ source: [0xB9C8, 0x0334, 0x11BC], NFC: [0xB9C8, 0x0334, 0x11BC], NFD: [0x1106, 0x1161, 0x0334, 0x11BC], NFKC: [0xB9C8, 0x0334, 0x11BC], NFKD: [0x1106, 0x1161, 0x0334, 0x11BC] }, +{ source: [0xBA8C, 0x0334, 0x11AE], NFC: [0xBA8C, 0x0334, 0x11AE], NFD: [0x1106, 0x1168, 0x0334, 0x11AE], NFKC: [0xBA8C, 0x0334, 0x11AE], NFKD: [0x1106, 0x1168, 0x0334, 0x11AE] }, +{ source: [0xBAE0, 0x0334, 0x11B5], NFC: [0xBAE0, 0x0334, 0x11B5], NFD: [0x1106, 0x116B, 0x0334, 0x11B5], NFKC: [0xBAE0, 0x0334, 0x11B5], NFKD: [0x1106, 0x116B, 0x0334, 0x11B5] }, +{ source: [0xBB34, 0x0334, 0x11BC], NFC: [0xBB34, 0x0334, 0x11BC], NFD: [0x1106, 0x116E, 0x0334, 0x11BC], NFKC: [0xBB34, 0x0334, 0x11BC], NFKD: [0x1106, 0x116E, 0x0334, 0x11BC] }, +{ source: [0xBBF8, 0x0334, 0x11AE], NFC: [0xBBF8, 0x0334, 0x11AE], NFD: [0x1106, 0x1175, 0x0334, 0x11AE], NFKC: [0xBBF8, 0x0334, 0x11AE], NFKD: [0x1106, 0x1175, 0x0334, 0x11AE] }, +{ source: [0xBC4C, 0x0334, 0x11B5], NFC: [0xBC4C, 0x0334, 0x11B5], NFD: [0x1107, 0x1163, 0x0334, 0x11B5], NFKC: [0xBC4C, 0x0334, 0x11B5], NFKD: [0x1107, 0x1163, 0x0334, 0x11B5] }, +{ source: [0xBCA0, 0x0334, 0x11BC], NFC: [0xBCA0, 0x0334, 0x11BC], NFD: [0x1107, 0x1166, 0x0334, 0x11BC], NFKC: [0xBCA0, 0x0334, 0x11BC], NFKD: [0x1107, 0x1166, 0x0334, 0x11BC] }, +{ source: [0xBD64, 0x0334, 0x11AE], NFC: [0xBD64, 0x0334, 0x11AE], NFD: [0x1107, 0x116D, 0x0334, 0x11AE], NFKC: [0xBD64, 0x0334, 0x11AE], NFKD: [0x1107, 0x116D, 0x0334, 0x11AE] }, +{ source: [0xBDB8, 0x0334, 0x11B5], NFC: [0xBDB8, 0x0334, 0x11B5], NFD: [0x1107, 0x1170, 0x0334, 0x11B5], NFKC: [0xBDB8, 0x0334, 0x11B5], NFKD: [0x1107, 0x1170, 0x0334, 0x11B5] }, +{ source: [0xBE0C, 0x0334, 0x11BC], NFC: [0xBE0C, 0x0334, 0x11BC], NFD: [0x1107, 0x1173, 0x0334, 0x11BC], NFKC: [0xBE0C, 0x0334, 0x11BC], NFKD: [0x1107, 0x1173, 0x0334, 0x11BC] }, +{ source: [0xBED0, 0x0334, 0x11AE], NFC: [0xBED0, 0x0334, 0x11AE], NFD: [0x1108, 0x1165, 0x0334, 0x11AE], NFKC: [0xBED0, 0x0334, 0x11AE], NFKD: [0x1108, 0x1165, 0x0334, 0x11AE] }, +{ source: [0xBF24, 0x0334, 0x11B5], NFC: [0xBF24, 0x0334, 0x11B5], NFD: [0x1108, 0x1168, 0x0334, 0x11B5], NFKC: [0xBF24, 0x0334, 0x11B5], NFKD: [0x1108, 0x1168, 0x0334, 0x11B5] }, +{ source: [0xBF78, 0x0334, 0x11BC], NFC: [0xBF78, 0x0334, 0x11BC], NFD: [0x1108, 0x116B, 0x0334, 0x11BC], NFKC: [0xBF78, 0x0334, 0x11BC], NFKD: [0x1108, 0x116B, 0x0334, 0x11BC] }, +{ source: [0xC03C, 0x0334, 0x11AE], NFC: [0xC03C, 0x0334, 0x11AE], NFD: [0x1108, 0x1172, 0x0334, 0x11AE], NFKC: [0xC03C, 0x0334, 0x11AE], NFKD: [0x1108, 0x1172, 0x0334, 0x11AE] }, +{ source: [0xC090, 0x0334, 0x11B5], NFC: [0xC090, 0x0334, 0x11B5], NFD: [0x1108, 0x1175, 0x0334, 0x11B5], NFKC: [0xC090, 0x0334, 0x11B5], NFKD: [0x1108, 0x1175, 0x0334, 0x11B5] }, +{ source: [0xC0E4, 0x0334, 0x11BC], NFC: [0xC0E4, 0x0334, 0x11BC], NFD: [0x1109, 0x1163, 0x0334, 0x11BC], NFKC: [0xC0E4, 0x0334, 0x11BC], NFKD: [0x1109, 0x1163, 0x0334, 0x11BC] }, +{ source: [0xC1A8, 0x0334, 0x11AE], NFC: [0xC1A8, 0x0334, 0x11AE], NFD: [0x1109, 0x116A, 0x0334, 0x11AE], NFKC: [0xC1A8, 0x0334, 0x11AE], NFKD: [0x1109, 0x116A, 0x0334, 0x11AE] }, +{ source: [0xC1FC, 0x0334, 0x11B5], NFC: [0xC1FC, 0x0334, 0x11B5], NFD: [0x1109, 0x116D, 0x0334, 0x11B5], NFKC: [0xC1FC, 0x0334, 0x11B5], NFKD: [0x1109, 0x116D, 0x0334, 0x11B5] }, +{ source: [0xC250, 0x0334, 0x11BC], NFC: [0xC250, 0x0334, 0x11BC], NFD: [0x1109, 0x1170, 0x0334, 0x11BC], NFKC: [0xC250, 0x0334, 0x11BC], NFKD: [0x1109, 0x1170, 0x0334, 0x11BC] }, +{ source: [0xC314, 0x0334, 0x11AE], NFC: [0xC314, 0x0334, 0x11AE], NFD: [0x110A, 0x1162, 0x0334, 0x11AE], NFKC: [0xC314, 0x0334, 0x11AE], NFKD: [0x110A, 0x1162, 0x0334, 0x11AE] }, +{ source: [0xC368, 0x0334, 0x11B5], NFC: [0xC368, 0x0334, 0x11B5], NFD: [0x110A, 0x1165, 0x0334, 0x11B5], NFKC: [0xC368, 0x0334, 0x11B5], NFKD: [0x110A, 0x1165, 0x0334, 0x11B5] }, +{ source: [0xC3BC, 0x0334, 0x11BC], NFC: [0xC3BC, 0x0334, 0x11BC], NFD: [0x110A, 0x1168, 0x0334, 0x11BC], NFKC: [0xC3BC, 0x0334, 0x11BC], NFKD: [0x110A, 0x1168, 0x0334, 0x11BC] }, +{ source: [0xC480, 0x0334, 0x11AE], NFC: [0xC480, 0x0334, 0x11AE], NFD: [0x110A, 0x116F, 0x0334, 0x11AE], NFKC: [0xC480, 0x0334, 0x11AE], NFKD: [0x110A, 0x116F, 0x0334, 0x11AE] }, +{ source: [0xC4D4, 0x0334, 0x11B5], NFC: [0xC4D4, 0x0334, 0x11B5], NFD: [0x110A, 0x1172, 0x0334, 0x11B5], NFKC: [0xC4D4, 0x0334, 0x11B5], NFKD: [0x110A, 0x1172, 0x0334, 0x11B5] }, +{ source: [0xC528, 0x0334, 0x11BC], NFC: [0xC528, 0x0334, 0x11BC], NFD: [0x110A, 0x1175, 0x0334, 0x11BC], NFKC: [0xC528, 0x0334, 0x11BC], NFKD: [0x110A, 0x1175, 0x0334, 0x11BC] }, +{ source: [0xC5EC, 0x0334, 0x11AE], NFC: [0xC5EC, 0x0334, 0x11AE], NFD: [0x110B, 0x1167, 0x0334, 0x11AE], NFKC: [0xC5EC, 0x0334, 0x11AE], NFKD: [0x110B, 0x1167, 0x0334, 0x11AE] }, +{ source: [0xC640, 0x0334, 0x11B5], NFC: [0xC640, 0x0334, 0x11B5], NFD: [0x110B, 0x116A, 0x0334, 0x11B5], NFKC: [0xC640, 0x0334, 0x11B5], NFKD: [0x110B, 0x116A, 0x0334, 0x11B5] }, +{ source: [0xC694, 0x0334, 0x11BC], NFC: [0xC694, 0x0334, 0x11BC], NFD: [0x110B, 0x116D, 0x0334, 0x11BC], NFKC: [0xC694, 0x0334, 0x11BC], NFKD: [0x110B, 0x116D, 0x0334, 0x11BC] }, +{ source: [0xC758, 0x0334, 0x11AE], NFC: [0xC758, 0x0334, 0x11AE], NFD: [0x110B, 0x1174, 0x0334, 0x11AE], NFKC: [0xC758, 0x0334, 0x11AE], NFKD: [0x110B, 0x1174, 0x0334, 0x11AE] }, +{ source: [0xC7AC, 0x0334, 0x11B5], NFC: [0xC7AC, 0x0334, 0x11B5], NFD: [0x110C, 0x1162, 0x0334, 0x11B5], NFKC: [0xC7AC, 0x0334, 0x11B5], NFKD: [0x110C, 0x1162, 0x0334, 0x11B5] }, +{ source: [0xC800, 0x0334, 0x11BC], NFC: [0xC800, 0x0334, 0x11BC], NFD: [0x110C, 0x1165, 0x0334, 0x11BC], NFKC: [0xC800, 0x0334, 0x11BC], NFKD: [0x110C, 0x1165, 0x0334, 0x11BC] }, +{ source: [0xC8C4, 0x0334, 0x11AE], NFC: [0xC8C4, 0x0334, 0x11AE], NFD: [0x110C, 0x116C, 0x0334, 0x11AE], NFKC: [0xC8C4, 0x0334, 0x11AE], NFKD: [0x110C, 0x116C, 0x0334, 0x11AE] }, +{ source: [0xC918, 0x0334, 0x11B5], NFC: [0xC918, 0x0334, 0x11B5], NFD: [0x110C, 0x116F, 0x0334, 0x11B5], NFKC: [0xC918, 0x0334, 0x11B5], NFKD: [0x110C, 0x116F, 0x0334, 0x11B5] }, +{ source: [0xC96C, 0x0334, 0x11BC], NFC: [0xC96C, 0x0334, 0x11BC], NFD: [0x110C, 0x1172, 0x0334, 0x11BC], NFKC: [0xC96C, 0x0334, 0x11BC], NFKD: [0x110C, 0x1172, 0x0334, 0x11BC] }, +{ source: [0xCA30, 0x0334, 0x11AE], NFC: [0xCA30, 0x0334, 0x11AE], NFD: [0x110D, 0x1164, 0x0334, 0x11AE], NFKC: [0xCA30, 0x0334, 0x11AE], NFKD: [0x110D, 0x1164, 0x0334, 0x11AE] }, +{ source: [0xCA84, 0x0334, 0x11B5], NFC: [0xCA84, 0x0334, 0x11B5], NFD: [0x110D, 0x1167, 0x0334, 0x11B5], NFKC: [0xCA84, 0x0334, 0x11B5], NFKD: [0x110D, 0x1167, 0x0334, 0x11B5] }, +{ source: [0xCAD8, 0x0334, 0x11BC], NFC: [0xCAD8, 0x0334, 0x11BC], NFD: [0x110D, 0x116A, 0x0334, 0x11BC], NFKC: [0xCAD8, 0x0334, 0x11BC], NFKD: [0x110D, 0x116A, 0x0334, 0x11BC] }, +{ source: [0xCB9C, 0x0334, 0x11AE], NFC: [0xCB9C, 0x0334, 0x11AE], NFD: [0x110D, 0x1171, 0x0334, 0x11AE], NFKC: [0xCB9C, 0x0334, 0x11AE], NFKD: [0x110D, 0x1171, 0x0334, 0x11AE] }, +{ source: [0xCBF0, 0x0334, 0x11B5], NFC: [0xCBF0, 0x0334, 0x11B5], NFD: [0x110D, 0x1174, 0x0334, 0x11B5], NFKC: [0xCBF0, 0x0334, 0x11B5], NFKD: [0x110D, 0x1174, 0x0334, 0x11B5] }, +{ source: [0xCC44, 0x0334, 0x11BC], NFC: [0xCC44, 0x0334, 0x11BC], NFD: [0x110E, 0x1162, 0x0334, 0x11BC], NFKC: [0xCC44, 0x0334, 0x11BC], NFKD: [0x110E, 0x1162, 0x0334, 0x11BC] }, +{ source: [0xCD08, 0x0334, 0x11AE], NFC: [0xCD08, 0x0334, 0x11AE], NFD: [0x110E, 0x1169, 0x0334, 0x11AE], NFKC: [0xCD08, 0x0334, 0x11AE], NFKD: [0x110E, 0x1169, 0x0334, 0x11AE] }, +{ source: [0xCD5C, 0x0334, 0x11B5], NFC: [0xCD5C, 0x0334, 0x11B5], NFD: [0x110E, 0x116C, 0x0334, 0x11B5], NFKC: [0xCD5C, 0x0334, 0x11B5], NFKD: [0x110E, 0x116C, 0x0334, 0x11B5] }, +{ source: [0xCDB0, 0x0334, 0x11BC], NFC: [0xCDB0, 0x0334, 0x11BC], NFD: [0x110E, 0x116F, 0x0334, 0x11BC], NFKC: [0xCDB0, 0x0334, 0x11BC], NFKD: [0x110E, 0x116F, 0x0334, 0x11BC] }, +{ source: [0xCE74, 0x0334, 0x11AE], NFC: [0xCE74, 0x0334, 0x11AE], NFD: [0x110F, 0x1161, 0x0334, 0x11AE], NFKC: [0xCE74, 0x0334, 0x11AE], NFKD: [0x110F, 0x1161, 0x0334, 0x11AE] }, +{ source: [0xCEC8, 0x0334, 0x11B5], NFC: [0xCEC8, 0x0334, 0x11B5], NFD: [0x110F, 0x1164, 0x0334, 0x11B5], NFKC: [0xCEC8, 0x0334, 0x11B5], NFKD: [0x110F, 0x1164, 0x0334, 0x11B5] }, +{ source: [0xCF1C, 0x0334, 0x11BC], NFC: [0xCF1C, 0x0334, 0x11BC], NFD: [0x110F, 0x1167, 0x0334, 0x11BC], NFKC: [0xCF1C, 0x0334, 0x11BC], NFKD: [0x110F, 0x1167, 0x0334, 0x11BC] }, +{ source: [0xCFE0, 0x0334, 0x11AE], NFC: [0xCFE0, 0x0334, 0x11AE], NFD: [0x110F, 0x116E, 0x0334, 0x11AE], NFKC: [0xCFE0, 0x0334, 0x11AE], NFKD: [0x110F, 0x116E, 0x0334, 0x11AE] }, +{ source: [0xD034, 0x0334, 0x11B5], NFC: [0xD034, 0x0334, 0x11B5], NFD: [0x110F, 0x1171, 0x0334, 0x11B5], NFKC: [0xD034, 0x0334, 0x11B5], NFKD: [0x110F, 0x1171, 0x0334, 0x11B5] }, +{ source: [0xD088, 0x0334, 0x11BC], NFC: [0xD088, 0x0334, 0x11BC], NFD: [0x110F, 0x1174, 0x0334, 0x11BC], NFKC: [0xD088, 0x0334, 0x11BC], NFKD: [0x110F, 0x1174, 0x0334, 0x11BC] }, +{ source: [0xD14C, 0x0334, 0x11AE], NFC: [0xD14C, 0x0334, 0x11AE], NFD: [0x1110, 0x1166, 0x0334, 0x11AE], NFKC: [0xD14C, 0x0334, 0x11AE], NFKD: [0x1110, 0x1166, 0x0334, 0x11AE] }, +{ source: [0xD1A0, 0x0334, 0x11B5], NFC: [0xD1A0, 0x0334, 0x11B5], NFD: [0x1110, 0x1169, 0x0334, 0x11B5], NFKC: [0xD1A0, 0x0334, 0x11B5], NFKD: [0x1110, 0x1169, 0x0334, 0x11B5] }, +{ source: [0xD1F4, 0x0334, 0x11BC], NFC: [0xD1F4, 0x0334, 0x11BC], NFD: [0x1110, 0x116C, 0x0334, 0x11BC], NFKC: [0xD1F4, 0x0334, 0x11BC], NFKD: [0x1110, 0x116C, 0x0334, 0x11BC] }, +{ source: [0xD2B8, 0x0334, 0x11AE], NFC: [0xD2B8, 0x0334, 0x11AE], NFD: [0x1110, 0x1173, 0x0334, 0x11AE], NFKC: [0xD2B8, 0x0334, 0x11AE], NFKD: [0x1110, 0x1173, 0x0334, 0x11AE] }, +{ source: [0xD30C, 0x0334, 0x11B5], NFC: [0xD30C, 0x0334, 0x11B5], NFD: [0x1111, 0x1161, 0x0334, 0x11B5], NFKC: [0xD30C, 0x0334, 0x11B5], NFKD: [0x1111, 0x1161, 0x0334, 0x11B5] }, +{ source: [0xD360, 0x0334, 0x11BC], NFC: [0xD360, 0x0334, 0x11BC], NFD: [0x1111, 0x1164, 0x0334, 0x11BC], NFKC: [0xD360, 0x0334, 0x11BC], NFKD: [0x1111, 0x1164, 0x0334, 0x11BC] }, +{ source: [0xD424, 0x0334, 0x11AE], NFC: [0xD424, 0x0334, 0x11AE], NFD: [0x1111, 0x116B, 0x0334, 0x11AE], NFKC: [0xD424, 0x0334, 0x11AE], NFKD: [0x1111, 0x116B, 0x0334, 0x11AE] }, +{ source: [0xD478, 0x0334, 0x11B5], NFC: [0xD478, 0x0334, 0x11B5], NFD: [0x1111, 0x116E, 0x0334, 0x11B5], NFKC: [0xD478, 0x0334, 0x11B5], NFKD: [0x1111, 0x116E, 0x0334, 0x11B5] }, +{ source: [0xD4CC, 0x0334, 0x11BC], NFC: [0xD4CC, 0x0334, 0x11BC], NFD: [0x1111, 0x1171, 0x0334, 0x11BC], NFKC: [0xD4CC, 0x0334, 0x11BC], NFKD: [0x1111, 0x1171, 0x0334, 0x11BC] }, +{ source: [0xD590, 0x0334, 0x11AE], NFC: [0xD590, 0x0334, 0x11AE], NFD: [0x1112, 0x1163, 0x0334, 0x11AE], NFKC: [0xD590, 0x0334, 0x11AE], NFKD: [0x1112, 0x1163, 0x0334, 0x11AE] }, +{ source: [0xD5E4, 0x0334, 0x11B5], NFC: [0xD5E4, 0x0334, 0x11B5], NFD: [0x1112, 0x1166, 0x0334, 0x11B5], NFKC: [0xD5E4, 0x0334, 0x11B5], NFKD: [0x1112, 0x1166, 0x0334, 0x11B5] }, +{ source: [0xD638, 0x0334, 0x11BC], NFC: [0xD638, 0x0334, 0x11BC], NFD: [0x1112, 0x1169, 0x0334, 0x11BC], NFKC: [0xD638, 0x0334, 0x11BC], NFKD: [0x1112, 0x1169, 0x0334, 0x11BC] }, +{ source: [0xD6FC, 0x0334, 0x11AE], NFC: [0xD6FC, 0x0334, 0x11AE], NFD: [0x1112, 0x1170, 0x0334, 0x11AE], NFKC: [0xD6FC, 0x0334, 0x11AE], NFKD: [0x1112, 0x1170, 0x0334, 0x11AE] }, +{ source: [0xD750, 0x0334, 0x11B5], NFC: [0xD750, 0x0334, 0x11B5], NFD: [0x1112, 0x1173, 0x0334, 0x11B5], NFKC: [0xD750, 0x0334, 0x11B5], NFKD: [0x1112, 0x1173, 0x0334, 0x11B5] }, +{ source: [0x11131, 0x0334, 0x11127], NFC: [0x11131, 0x0334, 0x11127], NFD: [0x11131, 0x0334, 0x11127], NFKC: [0x11131, 0x0334, 0x11127], NFKD: [0x11131, 0x0334, 0x11127] }, +{ source: [0x11132, 0x0334, 0x11127], NFC: [0x11132, 0x0334, 0x11127], NFD: [0x11132, 0x0334, 0x11127], NFKC: [0x11132, 0x0334, 0x11127], NFKD: [0x11132, 0x0334, 0x11127] }, +{ source: [0x11347, 0x0334, 0x1133E], NFC: [0x11347, 0x0334, 0x1133E], NFD: [0x11347, 0x0334, 0x1133E], NFKC: [0x11347, 0x0334, 0x1133E], NFKD: [0x11347, 0x0334, 0x1133E] }, +{ source: [0x11347, 0x0334, 0x11357], NFC: [0x11347, 0x0334, 0x11357], NFD: [0x11347, 0x0334, 0x11357], NFKC: [0x11347, 0x0334, 0x11357], NFKD: [0x11347, 0x0334, 0x11357] }, +{ source: [0x114B9, 0x0334, 0x114B0], NFC: [0x114B9, 0x0334, 0x114B0], NFD: [0x114B9, 0x0334, 0x114B0], NFKC: [0x114B9, 0x0334, 0x114B0], NFKD: [0x114B9, 0x0334, 0x114B0] }, +{ source: [0x114B9, 0x0334, 0x114BA], NFC: [0x114B9, 0x0334, 0x114BA], NFD: [0x114B9, 0x0334, 0x114BA], NFKC: [0x114B9, 0x0334, 0x114BA], NFKD: [0x114B9, 0x0334, 0x114BA] }, +{ source: [0x114B9, 0x0334, 0x114BD], NFC: [0x114B9, 0x0334, 0x114BD], NFD: [0x114B9, 0x0334, 0x114BD], NFKC: [0x114B9, 0x0334, 0x114BD], NFKD: [0x114B9, 0x0334, 0x114BD] }, +{ source: [0x115B8, 0x0334, 0x115AF], NFC: [0x115B8, 0x0334, 0x115AF], NFD: [0x115B8, 0x0334, 0x115AF], NFKC: [0x115B8, 0x0334, 0x115AF], NFKD: [0x115B8, 0x0334, 0x115AF] }, +{ source: [0x115B9, 0x0334, 0x115AF], NFC: [0x115B9, 0x0334, 0x115AF], NFD: [0x115B9, 0x0334, 0x115AF], NFKC: [0x115B9, 0x0334, 0x115AF], NFKD: [0x115B9, 0x0334, 0x115AF] }, +{ source: [0x11935, 0x0334, 0x11930], NFC: [0x11935, 0x0334, 0x11930], NFD: [0x11935, 0x0334, 0x11930], NFKC: [0x11935, 0x0334, 0x11930], NFKD: [0x11935, 0x0334, 0x11930] } +]; diff --git a/test/staging/sm/String/normalize-generic.js b/test/staging/sm/String/normalize-generic.js new file mode 100644 index 0000000000..fe3d458cc8 --- /dev/null +++ b/test/staging/sm/String/normalize-generic.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 918987; +var summary = 'String.prototype.normalize - normalize no String object'; + +print(BUGNUMBER + ": " + summary); + +function test() { + var myobj = { + toString: () => "a\u0301", + normalize: String.prototype.normalize + }; + assert.sameValue(myobj.normalize(), "\u00E1"); +} + +if ("normalize" in String.prototype) { + // String.prototype.normalize is not enabled in all builds. + test(); +} + diff --git a/test/staging/sm/String/normalize-parameter.js b/test/staging/sm/String/normalize-parameter.js new file mode 100644 index 0000000000..141d2f4e2a --- /dev/null +++ b/test/staging/sm/String/normalize-parameter.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 918987; +var summary = 'String.prototype.normalize - passing wrong parameter'; + +print(BUGNUMBER + ": " + summary); + +function test() { + assertThrowsInstanceOf(() => "abc".normalize("NFE"), RangeError, + "String.prototype.normalize should raise RangeError on invalid form"); + + assert.sameValue("".normalize(), ""); +} + +if ("normalize" in String.prototype) { + // String.prototype.normalize is not enabled in all builds. + test(); +} + diff --git a/test/staging/sm/String/normalize-rope.js b/test/staging/sm/String/normalize-rope.js new file mode 100644 index 0000000000..31529d423f --- /dev/null +++ b/test/staging/sm/String/normalize-rope.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 918987; +var summary = 'String.prototype.normalize - normalize rope string'; + +print(BUGNUMBER + ": " + summary); + +function test() { + /* JSRope test */ + var a = ""; + var b = ""; + for (var i = 0; i < 100; i++) { + a += "\u0100"; + b += "\u0041\u0304"; + } + assert.sameValue(a.normalize("NFD"), b); +} + +if ("normalize" in String.prototype) { + // String.prototype.normalize is not enabled in all builds. + test(); +} + diff --git a/test/staging/sm/String/raw.js b/test/staging/sm/String/raw.js new file mode 100644 index 0000000000..e1df924a39 --- /dev/null +++ b/test/staging/sm/String/raw.js @@ -0,0 +1,65 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1039774; +var summary = 'String.raw'; + +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(function() { String.raw(); }, TypeError); + +assert.sameValue(String.raw.length, 1); + +var cooked = []; +assertThrowsInstanceOf(function() { String.raw(cooked); }, TypeError); + +cooked.raw = {}; +assert.sameValue(String.raw(cooked), ""); + +cooked.raw = {lengt: 0}; +assert.sameValue(String.raw(cooked), ""); + +cooked.raw = {length: 0}; +assert.sameValue(String.raw(cooked), ""); + +cooked.raw = {length: -1}; +assert.sameValue(String.raw(cooked), ""); + +cooked.raw = []; +assert.sameValue(String.raw(cooked), ""); + +cooked.raw = ["a"]; +assert.sameValue(String.raw(cooked), "a"); + +cooked.raw = ["a", "b"]; +assert.sameValue(String.raw(cooked, "x"), "axb"); + +cooked.raw = ["a", "b"]; +assert.sameValue(String.raw(cooked, "x", "y"), "axb"); + +cooked.raw = ["a", "b", "c"]; +assert.sameValue(String.raw(cooked, "x"), "axbc"); + +cooked.raw = ["a", "b", "c"]; +assert.sameValue(String.raw(cooked, "x", "y"), "axbyc"); + +cooked.raw = ["\n", "\r\n", "\r"]; +assert.sameValue(String.raw(cooked, "x", "y"), "\nx\r\ny\r"); + +cooked.raw = ["\n", "\r\n", "\r"]; +assert.sameValue(String.raw(cooked, "\r\r", "\n"), "\n\r\r\r\n\n\r"); + +cooked.raw = {length: 2, '0':"a", '1':"b", '2':"c"}; +assert.sameValue(String.raw(cooked, "x", "y"), "axb"); + +cooked.raw = {length: 4, '0':"a", '1':"b", '2':"c"}; +assert.sameValue(String.raw(cooked, "x", "y"), "axbycundefined"); + diff --git a/test/staging/sm/String/regress-369778.js b/test/staging/sm/String/regress-369778.js new file mode 100644 index 0000000000..92400e31df --- /dev/null +++ b/test/staging/sm/String/regress-369778.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +var BUGNUMBER = 369778; +var summary = + "RegExpStatics::makeMatch should make an undefined value when the last " + + "match had an undefined capture."; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var expected = undefined; +var actual; + +'x'.replace(/x(.)?/g, function(m, group) { actual = group; }) + +print("expected: " + expected) +print("actual: " + actual) + +assert.sameValue(expected, actual) + +/******************************************************************************/ + diff --git a/test/staging/sm/String/replace-GetMethod.js b/test/staging/sm/String/replace-GetMethod.js new file mode 100644 index 0000000000..09b1195792 --- /dev/null +++ b/test/staging/sm/String/replace-GetMethod.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1290655; +var summary = "String.prototype.replace should call GetMethod."; + +print(BUGNUMBER + ": " + summary); + +function create(value) { + return { + [Symbol.replace]: value, + toString() { + return "-"; + } + }; +} + +for (let v of [null, undefined]) { + assert.sameValue("a-a".replace(create(v), "+"), "a+a"); +} + +for (let v of [1, true, Symbol.iterator, "", {}, []]) { + assertThrowsInstanceOf(() => "a-a".replace(create(v)), TypeError); +} + diff --git a/test/staging/sm/String/replace-bad-dollar-single-quote.js b/test/staging/sm/String/replace-bad-dollar-single-quote.js new file mode 100644 index 0000000000..2b76da1c31 --- /dev/null +++ b/test/staging/sm/String/replace-bad-dollar-single-quote.js @@ -0,0 +1,70 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let evil = new RegExp(); + +// https://tc39.es/ecma262/#sec-getsubstitution + +// Input: position = 0 +// Step 2: matchLength = 7 +// Step 4: stringLength = 3 +// Step 8: tailPos = position + matchLength = 7 +// +// tailPos ≥ stringLength, so $' is replaced with the empty string. + +evil.exec = () => ({ 0: "1234567", length: 1, index: 0 }); +assert.sameValue("abc".replace(evil, "$'"), ""); + + +// Input: position = 3 +// Step 2: matchLength = 1 +// Step 4: stringLength = 3 +// Step 8: tailPos = position + matchLength = 4 +// +// tailPos ≥ stringLength, so $' is replaced with the empty string. + +evil.exec = () => ({ 0: "x", length: 1, index: 3 }); +assert.sameValue("abc".replace(evil, "$'"), "abc"); + + +// Input: position = 2 +// Step 2: matchLength = 1 +// Step 4: stringLength = 3 +// Step 8: tailPos = position + matchLength = 3 +// +// tailPos ≥ stringLength, so $' is replaced with the empty string. + +evil.exec = () => ({ 0: "x", length: 1, index: 2 }); +assert.sameValue("abc".replace(evil, "$'"), "ab"); + + +// Input: position = 2 +// Step 2: matchLength = 1 +// Step 4: stringLength = 4 +// Step 8: tailPos = position + matchLength = 3 +// +// tailPos < stringLength, so $' is replaced with |"abcd".sustring(tailPos)| = "d". + +evil.exec = () => ({ 0: "x", length: 1, index: 2 }); +assert.sameValue("abcd".replace(evil, "$'"), "abdd"); + + +// Input: position = 2 +// Step 2: matchLength = 1 +// Step 4: stringLength = 5 +// Step 8: tailPos = position + matchLength = 3 +// +// tailPos < stringLength, so $' is replaced with |"abcd".sustring(tailPos)| = "de". + +evil.exec = () => ({ 0: "x", length: 1, index: 2 }); +assert.sameValue("abcde".replace(evil, "$'"), "abdede"); + + diff --git a/test/staging/sm/String/replace-flags.js b/test/staging/sm/String/replace-flags.js new file mode 100644 index 0000000000..a2743672dc --- /dev/null +++ b/test/staging/sm/String/replace-flags.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1108382; +var summary = 'Remove non-standard flag argument from String.prototype.{search,match,replace}.'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var result = "bbbAa".match("a", "i"); +assert.sameValue(result.index, 4); +assert.sameValue(result.length, 1); +assert.sameValue(result[0], "a"); + +result = "bbbA".match("a", "i"); +assert.sameValue(result, null); + +result = "bbbAa".search("a", "i"); +assert.sameValue(result, 4); + +result = "bbbA".search("a", "i"); +assert.sameValue(result, -1); + +result = "bbbAaa".replace("a", "b", "g"); +assert.sameValue(result, "bbbAba"); + diff --git a/test/staging/sm/String/replace-math.js b/test/staging/sm/String/replace-math.js new file mode 100644 index 0000000000..6b1ef0c9c6 --- /dev/null +++ b/test/staging/sm/String/replace-math.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 805121; +var summary = "Be more careful with string math to avoid wrong results"; + +print(BUGNUMBER + ": " + summary); + +/******************************************************************************/ + +function puff(x, n) +{ + while(x.length < n) + x += x; + return x.substring(0, n); +} + +var x = puff("1", 1 << 20); +var rep = puff("$1", 1 << 16); + +try +{ + var y = x.replace(/(.+)/g, rep); + assert.sameValue(y.length, Math.pow(2, 36)); +} +catch (e) +{ + // OOM also acceptable +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/String/replace-throws-nonwritable-lastIndex-global.js b/test/staging/sm/String/replace-throws-nonwritable-lastIndex-global.js new file mode 100644 index 0000000000..073a0011b4 --- /dev/null +++ b/test/staging/sm/String/replace-throws-nonwritable-lastIndex-global.js @@ -0,0 +1,131 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 501739; +var summary = + "String.prototype.replace should throw when called with a global RegExp " + + "whose .lastIndex is non-writable"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; + +// First time with .lastIndex === 0, replacing to '' + +var p1 = /x/g; +Object.defineProperty(p1, "lastIndex", { writable: false }); + +try +{ + s.replace(p1, ''); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assert.sameValue(p1.lastIndex, 0); +} + +// Second time with .lastIndex !== 0, replacing to '' + +var p2 = /x/g; +Object.defineProperty(p2, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.replace(p2, ''); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assert.sameValue(p2.lastIndex, 3); +} + +// Third time with .lastIndex === 0, replacing to 'y' + +var p3 = /x/g; +Object.defineProperty(p3, "lastIndex", { writable: false }); + +try +{ + s.replace(p3, 'y'); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assert.sameValue(p3.lastIndex, 0); +} + +// Fourth time with .lastIndex !== 0, replacing to 'y' + +var p4 = /x/g; +Object.defineProperty(p4, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.replace(p4, ''); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assert.sameValue(p4.lastIndex, 3); +} + +// Fifth time with .lastIndex === 0, replacing to 'y', but no match + +var p5 = /q/g; +Object.defineProperty(p5, "lastIndex", { writable: false }); + +try +{ + s.replace(p5, 'y'); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assert.sameValue(p5.lastIndex, 0); +} + +// Sixth time with .lastIndex !== 0, replacing to 'y', but no match + +var p6 = /q/g; +Object.defineProperty(p6, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.replace(p6, ''); + throw "didn't throw"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assert.sameValue(p6.lastIndex, 3); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/String/replace-updates-global-lastIndex.js b/test/staging/sm/String/replace-updates-global-lastIndex.js new file mode 100644 index 0000000000..290b78c3fe --- /dev/null +++ b/test/staging/sm/String/replace-updates-global-lastIndex.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 501739; +var summary = + "String.prototype.relace should zero the .lastIndex when called with a " + + "global RegExp"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; + +var p1 = /x/g; +p1.lastIndex = 3; +s.replace(p1, ''); +assert.sameValue(p1.lastIndex, 0); + +var p2 = /x/g; +p2.lastIndex = 3; +var c = 0; +s.replace(p2, function(s) { + assert.sameValue(p2.lastIndex++, c++); + return 'y'; +}); +assert.sameValue(p2.lastIndex, 4); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/String/replace.js b/test/staging/sm/String/replace.js new file mode 100644 index 0000000000..a5510159b6 --- /dev/null +++ b/test/staging/sm/String/replace.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Call RegExp.prototype[@@replace] from String.prototype.replace."; + +print(BUGNUMBER + ": " + summary); + +var called = 0; +var myRegExp = { + [Symbol.replace](S, R) { + assert.sameValue(S, "abcAbcABC"); + assert.sameValue(R, "foo"); + called++; + return 42; + } +}; +assert.sameValue("abcAbcABC".replace(myRegExp, "foo"), 42); +assert.sameValue(called, 1); + diff --git a/test/staging/sm/String/replaceAll.js b/test/staging/sm/String/replaceAll.js new file mode 100644 index 0000000000..df91f2ac37 --- /dev/null +++ b/test/staging/sm/String/replaceAll.js @@ -0,0 +1,224 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function neverCalled() { + assert.sameValue(true, false, "unexpected call"); +} + +const g = createNewGlobal(); + +assert.sameValue(typeof String.prototype.replaceAll, "function"); +assert.sameValue(String.prototype.replaceAll.length, 2); +assert.sameValue(String.prototype.replaceAll.name, "replaceAll"); + +// Throws if called with undefined or null. +assertThrowsInstanceOf(() => String.prototype.replaceAll.call(undefined), TypeError); +assertThrowsInstanceOf(() => String.prototype.replaceAll.call(null), TypeError); + +// Throws if called with a non-global RegExp. +assertThrowsInstanceOf(() => "".replaceAll(/a/, ""), TypeError); +assertThrowsInstanceOf(() => "".replaceAll(g.RegExp(""), ""), TypeError); + +// Also throws with RegExp-like objects. +assertThrowsInstanceOf(() => { + "".replaceAll({[Symbol.match]: neverCalled, flags: ""}, ""); +}, TypeError); + +// |flags| property mustn't be undefined or null. +assertThrowsInstanceOf(() => { + "".replaceAll({[Symbol.match]: neverCalled, flags: undefined}, ""); +}, TypeError); +assertThrowsInstanceOf(() => { + "".replaceAll({[Symbol.match]: neverCalled, flags: null}, ""); +}, TypeError); + +// Global RegExp (or RegExp-like) simply redirect to @@replace. +assert.sameValue("aba".replace(/a/g, "c"), "cbc"); +assert.sameValue("aba".replace(g.RegExp("a", "g"), "c"), "cbc"); +assert.sameValue("aba".replace({ + [Symbol.match]: true, + [Symbol.replace]: () => "ok", + flags: "flags has 'g' character", +}, ""), "ok"); + +// Applies ToString on the replace-function return value. +assert.sameValue("aa".replaceAll("a", () => ({toString(){ return 1; }})), "11"); +assert.sameValue("aa".replaceAll("a", () => ({valueOf(){ return 1; }})), "[object Object][object Object]"); + +const replacer = { + "$$": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return "$"; + }, + "$$-$$": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return "$-$"; + }, + "$&": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return string.substring(position, position + searchString.length); + }, + "$&-$&": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + var s = string.substring(position, position + searchString.length); + return `${s}-${s}`; + }, + "$`": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return string.substring(0, position); + }, + "$`-$`": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + var s = string.substring(0, position); + return `${s}-${s}`; + }, + "$'": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return string.substring(position + searchString.length); + }, + "$'-$'": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + var s = string.substring(position + searchString.length); + return `${s}-${s}`; + }, + "A": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return "A"; + }, + "A-B": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return "A-B"; + }, + "": function(searchString, position, string) { + "use strict"; + assert.sameValue(this, undefined); + + return ""; + }, +}; + +// Tests when |pattern| is longer than |string|. +{ + const tests = [ + { string: "", pattern: "a" }, + { string: "a", pattern: "ab" }, + { string: "", pattern: "α" }, + { string: "α", pattern: "αβ" }, + ]; + + for (let [replacementString, replacementFunction] of Object.entries(replacer)) { + for (let {string, pattern} of tests) { + let a = string.replaceAll(pattern, replacementString); + let b = string.replaceAll(pattern, replacementFunction); + let expected = string.replace(RegExp(pattern, "g"), replacementString); + assert.sameValue(a, expected); + assert.sameValue(b, expected); + assert.sameValue(expected, string); + } + } +} + +// Tests when |pattern| doesn't match once. + { + const tests = [ + { string: "a", pattern: "A" }, + { string: "ab", pattern: "A" }, + { string: "ab", pattern: "AB" }, + + { string: "α", pattern: "Γ" }, + { string: "αβ", pattern: "Γ" }, + { string: "αβ", pattern: "ΓΔ" }, + ]; + + for (let [replacementString, replacementFunction] of Object.entries(replacer)) { + for (let {string, pattern} of tests) { + let a = string.replaceAll(pattern, replacementString); + let b = string.replaceAll(pattern, replacementFunction); + let expected = string.replace(RegExp(pattern, "g"), replacementString); + assert.sameValue(a, expected); + assert.sameValue(b, expected); + assert.sameValue(expected, string); + } + } +} + +// Tests when |pattern| is the empty string. +{ + const strings = ["", "a", "ab", "α", "αβ"]; + const pattern = ""; + const re = /(?:)/g; + + for (let [replacementString, replacementFunction] of Object.entries(replacer)) { + for (let string of strings) { + let a = string.replaceAll(pattern, replacementString); + let b = string.replaceAll(pattern, replacementFunction); + let expected = string.replace(re, replacementString); + assert.sameValue(a, expected); + assert.sameValue(b, expected); + } + } +} + +// Tests when |pattern| isn't the empty string. +{ + const tests = [ + { + strings: [ + "a", "b", + "aa", "ab", "ba", "bb", + "aaa", "aab", "aba", "abb", "baa", "bab", "bba", "bbb", + ], + pattern: "a", + }, + { + strings: [ + "α", "β", + "αα", "αβ", "βα", "ββ", + "ααα", "ααβ", "αβα", "αββ", "βαα", "βαβ", "ββα", "βββ", + ], + pattern: "α", + }, + ]; + + for (let {strings, pattern} of tests) { + let re = RegExp(pattern, "g"); + for (let [replacementString, replacementFunction] of Object.entries(replacer)) { + for (let string of strings) { + let a = string.replaceAll(pattern, replacementString); + let b = string.replaceAll(pattern, replacementFunction); + let expected = string.replace(re, replacementString); + assert.sameValue(a, expected); + assert.sameValue(b, expected); + } + } + } +} + diff --git a/test/staging/sm/String/search-GetMethod.js b/test/staging/sm/String/search-GetMethod.js new file mode 100644 index 0000000000..e393ce2c98 --- /dev/null +++ b/test/staging/sm/String/search-GetMethod.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1290655; +var summary = "String.prototype.search should call GetMethod."; + +print(BUGNUMBER + ": " + summary); + +function create(value) { + return { + [Symbol.search]: value, + toString() { + return "-"; + } + }; +} + +for (let v of [null, undefined]) { + assert.sameValue("a-a".search(create(v)), 1); +} + +for (let v of [1, true, Symbol.iterator, "", {}, []]) { + assertThrowsInstanceOf(() => "a-a".search(create(v)), TypeError); +} + diff --git a/test/staging/sm/String/search.js b/test/staging/sm/String/search.js new file mode 100644 index 0000000000..e13d1f0da1 --- /dev/null +++ b/test/staging/sm/String/search.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 887016; +var summary = "Call RegExp.prototype[@@search] from String.prototype.search."; + +print(BUGNUMBER + ": " + summary); + +var called = 0; +var myRegExp = { + [Symbol.search](S) { + assert.sameValue(S, "abcAbcABC"); + called++; + return 42; + } +}; +assert.sameValue("abcAbcABC".search(myRegExp), 42); +assert.sameValue(called, 1); + +called = 0; +RegExp.prototype[Symbol.search] = function(S) { + assert.sameValue(S, "abcAbcABC"); + called++; + return 43; +}; +assert.sameValue("abcAbcABC".search("abc"), 43); +assert.sameValue(called, 1); + diff --git a/test/staging/sm/String/split-01.js b/test/staging/sm/String/split-01.js new file mode 100644 index 0000000000..f413f84db4 --- /dev/null +++ b/test/staging/sm/String/split-01.js @@ -0,0 +1,52 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 614608; +var summary = "String.prototype.split tests"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function assertEqArr(a1, a2) { + assert.sameValue(a1.length, a2.length); + + for(var i=0; iboldandcoded".split(/<(\/)?([^<>]+)>/), + ["A", undefined, "B", "bold", "/", "B", "and", undefined, + "CODE", "coded", "/", "CODE", ""]); + +print("All tests passed!"); diff --git a/test/staging/sm/String/split-GetMethod.js b/test/staging/sm/String/split-GetMethod.js new file mode 100644 index 0000000000..6a5abd7e48 --- /dev/null +++ b/test/staging/sm/String/split-GetMethod.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1290655; +var summary = "String.prototype.split should call GetMethod."; + +print(BUGNUMBER + ": " + summary); + +function create(value) { + return { + [Symbol.split]: value, + toString() { + return "-"; + } + }; +} + +for (let v of [null, undefined]) { + assert.deepEqual("a-a".split(create(v)), ["a", "a"]); +} + +for (let v of [1, true, Symbol.iterator, "", {}, []]) { + assertThrowsInstanceOf(() => "a-a".split(create(v)), TypeError); +} + diff --git a/test/staging/sm/String/split-order.js b/test/staging/sm/String/split-order.js new file mode 100644 index 0000000000..eca5b59402 --- /dev/null +++ b/test/staging/sm/String/split-order.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1287521; +var summary = 'String.prototype.split should call ToUint32(limit) before ToString(separator).'; + +print(BUGNUMBER + ": " + summary); + +var log = []; +"abba".split({ + toString() { + log.push("separator-tostring"); + return "b"; + } +}, { + valueOf() { + log.push("limit-valueOf"); + return 0; + } +}); + +assert.sameValue(log.join(","), "limit-valueOf,separator-tostring"); + diff --git a/test/staging/sm/String/split-undefined-separator.js b/test/staging/sm/String/split-undefined-separator.js new file mode 100644 index 0000000000..d77d093cc5 --- /dev/null +++ b/test/staging/sm/String/split-undefined-separator.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 614608; +var summary = "String.prototype.split with undefined separator"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function assertEqArr(a1, a2) { + assert.sameValue(a1.length, a2.length); + + for(var i=0; i + * + * Distributed under the terms of the MIT license. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var BUGNUMBER = 614608; +var summary = "String.prototype.split with regexp separator"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var ecmaSampleRe = /<(\/)?([^<>]+)>/; + +var testCode = [ + ["''.split()", [""]], + ["''.split(/./)", [""]], + ["''.split(/.?/)", []], + ["''.split(/.??/)", []], + ["'ab'.split(/a*/)", ["", "b"]], + ["'ab'.split(/a*?/)", ["a", "b"]], + ["'ab'.split(/(?:ab)/)", ["", ""]], + ["'ab'.split(/(?:ab)*/)", ["", ""]], + ["'ab'.split(/(?:ab)*?/)", ["a", "b"]], + ["'test'.split('')", ["t", "e", "s", "t"]], + ["'test'.split()", ["test"]], + ["'111'.split(1)", ["", "", "", ""]], + ["'test'.split(/(?:)/, 2)", ["t", "e"]], + ["'test'.split(/(?:)/, -1)", ["t", "e", "s", "t"]], + ["'test'.split(/(?:)/, undefined)", ["t", "e", "s", "t"]], + ["'test'.split(/(?:)/, null)", []], + ["'test'.split(/(?:)/, NaN)", []], + ["'test'.split(/(?:)/, true)", ["t"]], + ["'test'.split(/(?:)/, '2')", ["t", "e"]], + ["'test'.split(/(?:)/, 'two')", []], + ["'a'.split(/-/)", ["a"]], + ["'a'.split(/-?/)", ["a"]], + ["'a'.split(/-??/)", ["a"]], + ["'a'.split(/a/)", ["", ""]], + ["'a'.split(/a?/)", ["", ""]], + ["'a'.split(/a??/)", ["a"]], + ["'ab'.split(/-/)", ["ab"]], + ["'ab'.split(/-?/)", ["a", "b"]], + ["'ab'.split(/-??/)", ["a", "b"]], + ["'a-b'.split(/-/)", ["a", "b"]], + ["'a-b'.split(/-?/)", ["a", "b"]], + ["'a-b'.split(/-??/)", ["a", "-", "b"]], + ["'a--b'.split(/-/)", ["a", "", "b"]], + ["'a--b'.split(/-?/)", ["a", "", "b"]], + ["'a--b'.split(/-??/)", ["a", "-", "-", "b"]], + ["''.split(/()()/)", []], + ["'.'.split(/()()/)", ["."]], + ["'.'.split(/(.?)(.?)/)", ["", ".", "", ""]], + ["'.'.split(/(.??)(.??)/)", ["."]], + ["'.'.split(/(.)?(.)?/)", ["", ".", undefined, ""]], + ["'Aboldandcoded'.split(ecmaSampleRe)", + ["A", undefined, "B", "bold", "/", "B", + "and", undefined, "CODE", "coded", "/", + "CODE", ""]], + ["'tesst'.split(/(s)*/)", ["t", undefined, "e", "s", "t"]], + ["'tesst'.split(/(s)*?/)", ["t", undefined, "e", undefined, "s", + undefined, "s", undefined, "t"]], + ["'tesst'.split(/(s*)/)", ["t", "", "e", "ss", "t"]], + ["'tesst'.split(/(s*?)/)", ["t", "", "e", "", "s", "", "s", "", "t"]], + ["'tesst'.split(/(?:s)*/)", ["t", "e", "t"]], + ["'tesst'.split(/(?=s+)/)", ["te", "s", "st"]], + ["'test'.split('t')", ["", "es", ""]], + ["'test'.split('es')", ["t", "t"]], + ["'test'.split(/t/)", ["", "es", ""]], + ["'test'.split(/es/)", ["t", "t"]], + ["'test'.split(/(t)/)", ["", "t", "es", "t", ""]], + ["'test'.split(/(es)/)", ["t", "es", "t"]], + ["'test'.split(/(t)(e)(s)(t)/)", ["", "t", "e", "s", "t", ""]], + ["'.'.split(/(((.((.??)))))/)", ["", ".", ".", ".", "", "", ""]], + ["'.'.split(/(((((.??)))))/)", ["."]] +]; + +function testSplit() { + for (var i = 0; i < testCode.length; i++) { + var actual = eval(testCode[i][0]); + var expected = testCode[i][1]; + + assert.sameValue(actual.length, expected.length); + + for(var j=0; j { + String.prototype.padStart.call(badThis, 42, "oups"); + }, TypeError); + + assertThrowsInstanceOf(() => { + String.prototype.padEnd.call(badThis, 42, "oups"); + }, TypeError); +} + +let proxy = new Proxy({}, { +get(t, name) { + if (name === Symbol.toPrimitive || name === "toString") return; + if (name === "valueOf") return () => 42; + throw "This should not be reachable"; +} +}); + +assert.sameValue("42bloop", String.prototype.padEnd.call(proxy, 7, "bloopie")); + +// maxLength must convert to an integer + +assert.sameValue("lame", "lame".padStart(0, "foo")); +assert.sameValue("lame", "lame".padStart(0.1119, "foo")); +assert.sameValue("lame", "lame".padStart(-0, "foo")); +assert.sameValue("lame", "lame".padStart(NaN, "foo")); +assert.sameValue("lame", "lame".padStart(-1, "foo")); +assert.sameValue("lame", "lame".padStart({toString: () => 0}, "foo")); + +assert.sameValue("lame", "lame".padEnd(0, "foo")); +assert.sameValue("lame", "lame".padEnd(0.1119, "foo")); +assert.sameValue("lame", "lame".padEnd(-0, "foo")); +assert.sameValue("lame", "lame".padEnd(NaN, "foo")); +assert.sameValue("lame", "lame".padEnd(-1, "foo")); +assert.sameValue("lame", "lame".padEnd({toString: () => 0}, "foo")); + +assertThrowsInstanceOf(() => { + "lame".padStart(Symbol("9900"), 0); +}, TypeError); + +assertThrowsInstanceOf(() => { + "lame".padEnd(Symbol("9900"), 0); +}, TypeError); + +// The fill argument must be string coercable. + +assert.sameValue("nulln.", ".".padStart(6, null)); +assert.sameValue(".nulln", ".".padEnd(6, null)); + +assert.sameValue("[obje.", ".".padStart(6, {})); +assert.sameValue(".[obje", ".".padEnd(6, {})); + +assert.sameValue("1,2,3.", ".".padStart(6, [1, 2, 3])); +assert.sameValue(".1,2,3", ".".padEnd(6, [1, 2, 3])); + +assert.sameValue("aaaaa.", ".".padStart(6, {toString: () => "a"})); +assert.sameValue(".aaaaa", ".".padEnd(6, {toString: () => "a"})); + +// undefined is converted to " " + +assert.sameValue(" .", ".".padStart(6, undefined)); +assert.sameValue(". ", ".".padEnd(6, undefined)); + +assert.sameValue(" .", ".".padStart(6)); +assert.sameValue(". ", ".".padEnd(6)); + +// The empty string has no effect + +assert.sameValue("Tilda", "Tilda".padStart(100000, "")); +assert.sameValue("Tilda", "Tilda".padEnd(100000, "")); + +assert.sameValue("Tilda", "Tilda".padStart(100000, {toString: () => ""})); +assert.sameValue("Tilda", "Tilda".padEnd(100000, {toString: () => ""})); + +// Test repetition against a bruteforce implementation + +let filler = "space"; +let truncatedFiller = ""; +for (let i = 0; i < 2500; i++) { + truncatedFiller += filler[i % filler.length]; + assert.sameValue(truncatedFiller + "goto", "goto".padStart(5 + i, filler)); + assert.sameValue("goto" + truncatedFiller, "goto".padEnd(5 + i, filler)); +} + +// [Argument] Length + +assert.sameValue(1, String.prototype.padStart.length) +assert.sameValue(1, String.prototype.padEnd.length) + diff --git a/test/staging/sm/String/string-space-trim.js b/test/staging/sm/String/string-space-trim.js new file mode 100644 index 0000000000..78086fd937 --- /dev/null +++ b/test/staging/sm/String/string-space-trim.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Generated by make_unicode.py DO NOT MODIFY */ +/* Unicode version: 15.0.0 */ + +var onlySpace = String.fromCharCode( + 0x0009 /* (CHARACTER TABULATION) */, + 0x000A /* (LINE FEED (LF)) */, + 0x000B /* (LINE TABULATION) */, + 0x000C /* (FORM FEED (FF)) */, + 0x000D /* (CARRIAGE RETURN (CR)) */, + 0x0020 /* SPACE */, + 0x00A0 /* NO-BREAK SPACE (NON-BREAKING SPACE) */, + 0x1680 /* OGHAM SPACE MARK */, + 0x2000 /* EN QUAD */, + 0x2001 /* EM QUAD */, + 0x2002 /* EN SPACE */, + 0x2003 /* EM SPACE */, + 0x2004 /* THREE-PER-EM SPACE */, + 0x2005 /* FOUR-PER-EM SPACE */, + 0x2006 /* SIX-PER-EM SPACE */, + 0x2007 /* FIGURE SPACE */, + 0x2008 /* PUNCTUATION SPACE */, + 0x2009 /* THIN SPACE */, + 0x200A /* HAIR SPACE */, + 0x2028 /* LINE SEPARATOR */, + 0x2029 /* PARAGRAPH SEPARATOR */, + 0x202F /* NARROW NO-BREAK SPACE */, + 0x205F /* MEDIUM MATHEMATICAL SPACE */, + 0x3000 /* IDEOGRAPHIC SPACE */, + 0xFEFF /* ZERO WIDTH NO-BREAK SPACE (BYTE ORDER MARK) */ +); + +assert.sameValue(onlySpace.trim(), ""); +assert.sameValue((onlySpace + 'aaaa').trim(), 'aaaa'); +assert.sameValue(('aaaa' + onlySpace).trim(), 'aaaa'); +assert.sameValue((onlySpace + 'aaaa' + onlySpace).trim(), 'aaaa'); + diff --git a/test/staging/sm/String/string-upper-lower-mapping.js b/test/staging/sm/String/string-upper-lower-mapping.js new file mode 100644 index 0000000000..2eb443407a --- /dev/null +++ b/test/staging/sm/String/string-upper-lower-mapping.js @@ -0,0 +1,65564 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Generated by make_unicode.py DO NOT MODIFY */ +/* Unicode version: 15.0.0 */ + +var mapping = [ + ["\u0000", "\u0000"], /* (NULL) */ + ["\u0001", "\u0001"], /* (START OF HEADING) */ + ["\u0002", "\u0002"], /* (START OF TEXT) */ + ["\u0003", "\u0003"], /* (END OF TEXT) */ + ["\u0004", "\u0004"], /* (END OF TRANSMISSION) */ + ["\u0005", "\u0005"], /* (ENQUIRY) */ + ["\u0006", "\u0006"], /* (ACKNOWLEDGE) */ + ["\u0007", "\u0007"], /* (BELL) */ + ["\u0008", "\u0008"], /* (BACKSPACE) */ + ["\u0009", "\u0009"], /* (CHARACTER TABULATION) */ + ["\u000A", "\u000A"], /* (LINE FEED (LF)) */ + ["\u000B", "\u000B"], /* (LINE TABULATION) */ + ["\u000C", "\u000C"], /* (FORM FEED (FF)) */ + ["\u000D", "\u000D"], /* (CARRIAGE RETURN (CR)) */ + ["\u000E", "\u000E"], /* (SHIFT OUT) */ + ["\u000F", "\u000F"], /* (SHIFT IN) */ + ["\u0010", "\u0010"], /* (DATA LINK ESCAPE) */ + ["\u0011", "\u0011"], /* (DEVICE CONTROL ONE) */ + ["\u0012", "\u0012"], /* (DEVICE CONTROL TWO) */ + ["\u0013", "\u0013"], /* (DEVICE CONTROL THREE) */ + ["\u0014", "\u0014"], /* (DEVICE CONTROL FOUR) */ + ["\u0015", "\u0015"], /* (NEGATIVE ACKNOWLEDGE) */ + ["\u0016", "\u0016"], /* (SYNCHRONOUS IDLE) */ + ["\u0017", "\u0017"], /* (END OF TRANSMISSION BLOCK) */ + ["\u0018", "\u0018"], /* (CANCEL) */ + ["\u0019", "\u0019"], /* (END OF MEDIUM) */ + ["\u001A", "\u001A"], /* (SUBSTITUTE) */ + ["\u001B", "\u001B"], /* (ESCAPE) */ + ["\u001C", "\u001C"], /* (INFORMATION SEPARATOR FOUR) */ + ["\u001D", "\u001D"], /* (INFORMATION SEPARATOR THREE) */ + ["\u001E", "\u001E"], /* (INFORMATION SEPARATOR TWO) */ + ["\u001F", "\u001F"], /* (INFORMATION SEPARATOR ONE) */ + ["\u0020", "\u0020"], /* SPACE */ + ["\u0021", "\u0021"], /* EXCLAMATION MARK */ + ["\u0022", "\u0022"], /* QUOTATION MARK */ + ["\u0023", "\u0023"], /* NUMBER SIGN */ + ["\u0024", "\u0024"], /* DOLLAR SIGN */ + ["\u0025", "\u0025"], /* PERCENT SIGN */ + ["\u0026", "\u0026"], /* AMPERSAND */ + ["\u0027", "\u0027"], /* APOSTROPHE (APOSTROPHE-QUOTE) */ + ["\u0028", "\u0028"], /* LEFT PARENTHESIS (OPENING PARENTHESIS) */ + ["\u0029", "\u0029"], /* RIGHT PARENTHESIS (CLOSING PARENTHESIS) */ + ["\u002A", "\u002A"], /* ASTERISK */ + ["\u002B", "\u002B"], /* PLUS SIGN */ + ["\u002C", "\u002C"], /* COMMA */ + ["\u002D", "\u002D"], /* HYPHEN-MINUS */ + ["\u002E", "\u002E"], /* FULL STOP (PERIOD) */ + ["\u002F", "\u002F"], /* SOLIDUS (SLASH) */ + ["\u0030", "\u0030"], /* DIGIT ZERO */ + ["\u0031", "\u0031"], /* DIGIT ONE */ + ["\u0032", "\u0032"], /* DIGIT TWO */ + ["\u0033", "\u0033"], /* DIGIT THREE */ + ["\u0034", "\u0034"], /* DIGIT FOUR */ + ["\u0035", "\u0035"], /* DIGIT FIVE */ + ["\u0036", "\u0036"], /* DIGIT SIX */ + ["\u0037", "\u0037"], /* DIGIT SEVEN */ + ["\u0038", "\u0038"], /* DIGIT EIGHT */ + ["\u0039", "\u0039"], /* DIGIT NINE */ + ["\u003A", "\u003A"], /* COLON */ + ["\u003B", "\u003B"], /* SEMICOLON */ + ["\u003C", "\u003C"], /* LESS-THAN SIGN */ + ["\u003D", "\u003D"], /* EQUALS SIGN */ + ["\u003E", "\u003E"], /* GREATER-THAN SIGN */ + ["\u003F", "\u003F"], /* QUESTION MARK */ + ["\u0040", "\u0040"], /* COMMERCIAL AT */ + ["\u0041", "\u0061"], /* LATIN CAPITAL LETTER A */ + ["\u0042", "\u0062"], /* LATIN CAPITAL LETTER B */ + ["\u0043", "\u0063"], /* LATIN CAPITAL LETTER C */ + ["\u0044", "\u0064"], /* LATIN CAPITAL LETTER D */ + ["\u0045", "\u0065"], /* LATIN CAPITAL LETTER E */ + ["\u0046", "\u0066"], /* LATIN CAPITAL LETTER F */ + ["\u0047", "\u0067"], /* LATIN CAPITAL LETTER G */ + ["\u0048", "\u0068"], /* LATIN CAPITAL LETTER H */ + ["\u0049", "\u0069"], /* LATIN CAPITAL LETTER I */ + ["\u004A", "\u006A"], /* LATIN CAPITAL LETTER J */ + ["\u004B", "\u006B"], /* LATIN CAPITAL LETTER K */ + ["\u004C", "\u006C"], /* LATIN CAPITAL LETTER L */ + ["\u004D", "\u006D"], /* LATIN CAPITAL LETTER M */ + ["\u004E", "\u006E"], /* LATIN CAPITAL LETTER N */ + ["\u004F", "\u006F"], /* LATIN CAPITAL LETTER O */ + ["\u0050", "\u0070"], /* LATIN CAPITAL LETTER P */ + ["\u0051", "\u0071"], /* LATIN CAPITAL LETTER Q */ + ["\u0052", "\u0072"], /* LATIN CAPITAL LETTER R */ + ["\u0053", "\u0073"], /* LATIN CAPITAL LETTER S */ + ["\u0054", "\u0074"], /* LATIN CAPITAL LETTER T */ + ["\u0055", "\u0075"], /* LATIN CAPITAL LETTER U */ + ["\u0056", "\u0076"], /* LATIN CAPITAL LETTER V */ + ["\u0057", "\u0077"], /* LATIN CAPITAL LETTER W */ + ["\u0058", "\u0078"], /* LATIN CAPITAL LETTER X */ + ["\u0059", "\u0079"], /* LATIN CAPITAL LETTER Y */ + ["\u005A", "\u007A"], /* LATIN CAPITAL LETTER Z */ + ["\u005B", "\u005B"], /* LEFT SQUARE BRACKET (OPENING SQUARE BRACKET) */ + ["\u005C", "\u005C"], /* REVERSE SOLIDUS (BACKSLASH) */ + ["\u005D", "\u005D"], /* RIGHT SQUARE BRACKET (CLOSING SQUARE BRACKET) */ + ["\u005E", "\u005E"], /* CIRCUMFLEX ACCENT (SPACING CIRCUMFLEX) */ + ["\u005F", "\u005F"], /* LOW LINE (SPACING UNDERSCORE) */ + ["\u0060", "\u0060"], /* GRAVE ACCENT (SPACING GRAVE) */ + ["\u0041", "\u0061"], /* LATIN SMALL LETTER A */ + ["\u0042", "\u0062"], /* LATIN SMALL LETTER B */ + ["\u0043", "\u0063"], /* LATIN SMALL LETTER C */ + ["\u0044", "\u0064"], /* LATIN SMALL LETTER D */ + ["\u0045", "\u0065"], /* LATIN SMALL LETTER E */ + ["\u0046", "\u0066"], /* LATIN SMALL LETTER F */ + ["\u0047", "\u0067"], /* LATIN SMALL LETTER G */ + ["\u0048", "\u0068"], /* LATIN SMALL LETTER H */ + ["\u0049", "\u0069"], /* LATIN SMALL LETTER I */ + ["\u004A", "\u006A"], /* LATIN SMALL LETTER J */ + ["\u004B", "\u006B"], /* LATIN SMALL LETTER K */ + ["\u004C", "\u006C"], /* LATIN SMALL LETTER L */ + ["\u004D", "\u006D"], /* LATIN SMALL LETTER M */ + ["\u004E", "\u006E"], /* LATIN SMALL LETTER N */ + ["\u004F", "\u006F"], /* LATIN SMALL LETTER O */ + ["\u0050", "\u0070"], /* LATIN SMALL LETTER P */ + ["\u0051", "\u0071"], /* LATIN SMALL LETTER Q */ + ["\u0052", "\u0072"], /* LATIN SMALL LETTER R */ + ["\u0053", "\u0073"], /* LATIN SMALL LETTER S */ + ["\u0054", "\u0074"], /* LATIN SMALL LETTER T */ + ["\u0055", "\u0075"], /* LATIN SMALL LETTER U */ + ["\u0056", "\u0076"], /* LATIN SMALL LETTER V */ + ["\u0057", "\u0077"], /* LATIN SMALL LETTER W */ + ["\u0058", "\u0078"], /* LATIN SMALL LETTER X */ + ["\u0059", "\u0079"], /* LATIN SMALL LETTER Y */ + ["\u005A", "\u007A"], /* LATIN SMALL LETTER Z */ + ["\u007B", "\u007B"], /* LEFT CURLY BRACKET (OPENING CURLY BRACKET) */ + ["\u007C", "\u007C"], /* VERTICAL LINE (VERTICAL BAR) */ + ["\u007D", "\u007D"], /* RIGHT CURLY BRACKET (CLOSING CURLY BRACKET) */ + ["\u007E", "\u007E"], /* TILDE */ + ["\u007F", "\u007F"], /* (DELETE) */ + ["\u0080", "\u0080"], /* */ + ["\u0081", "\u0081"], /* */ + ["\u0082", "\u0082"], /* (BREAK PERMITTED HERE) */ + ["\u0083", "\u0083"], /* (NO BREAK HERE) */ + ["\u0084", "\u0084"], /* */ + ["\u0085", "\u0085"], /* (NEXT LINE (NEL)) */ + ["\u0086", "\u0086"], /* (START OF SELECTED AREA) */ + ["\u0087", "\u0087"], /* (END OF SELECTED AREA) */ + ["\u0088", "\u0088"], /* (CHARACTER TABULATION SET) */ + ["\u0089", "\u0089"], /* (CHARACTER TABULATION WITH JUSTIFICATION) */ + ["\u008A", "\u008A"], /* (LINE TABULATION SET) */ + ["\u008B", "\u008B"], /* (PARTIAL LINE FORWARD) */ + ["\u008C", "\u008C"], /* (PARTIAL LINE BACKWARD) */ + ["\u008D", "\u008D"], /* (REVERSE LINE FEED) */ + ["\u008E", "\u008E"], /* (SINGLE SHIFT TWO) */ + ["\u008F", "\u008F"], /* (SINGLE SHIFT THREE) */ + ["\u0090", "\u0090"], /* (DEVICE CONTROL STRING) */ + ["\u0091", "\u0091"], /* (PRIVATE USE ONE) */ + ["\u0092", "\u0092"], /* (PRIVATE USE TWO) */ + ["\u0093", "\u0093"], /* (SET TRANSMIT STATE) */ + ["\u0094", "\u0094"], /* (CANCEL CHARACTER) */ + ["\u0095", "\u0095"], /* (MESSAGE WAITING) */ + ["\u0096", "\u0096"], /* (START OF GUARDED AREA) */ + ["\u0097", "\u0097"], /* (END OF GUARDED AREA) */ + ["\u0098", "\u0098"], /* (START OF STRING) */ + ["\u0099", "\u0099"], /* */ + ["\u009A", "\u009A"], /* (SINGLE CHARACTER INTRODUCER) */ + ["\u009B", "\u009B"], /* (CONTROL SEQUENCE INTRODUCER) */ + ["\u009C", "\u009C"], /* (STRING TERMINATOR) */ + ["\u009D", "\u009D"], /* (OPERATING SYSTEM COMMAND) */ + ["\u009E", "\u009E"], /* (PRIVACY MESSAGE) */ + ["\u009F", "\u009F"], /* (APPLICATION PROGRAM COMMAND) */ + ["\u00A0", "\u00A0"], /* NO-BREAK SPACE (NON-BREAKING SPACE) */ + ["\u00A1", "\u00A1"], /* INVERTED EXCLAMATION MARK */ + ["\u00A2", "\u00A2"], /* CENT SIGN */ + ["\u00A3", "\u00A3"], /* POUND SIGN */ + ["\u00A4", "\u00A4"], /* CURRENCY SIGN */ + ["\u00A5", "\u00A5"], /* YEN SIGN */ + ["\u00A6", "\u00A6"], /* BROKEN BAR (BROKEN VERTICAL BAR) */ + ["\u00A7", "\u00A7"], /* SECTION SIGN */ + ["\u00A8", "\u00A8"], /* DIAERESIS (SPACING DIAERESIS) */ + ["\u00A9", "\u00A9"], /* COPYRIGHT SIGN */ + ["\u00AA", "\u00AA"], /* FEMININE ORDINAL INDICATOR */ + ["\u00AB", "\u00AB"], /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (LEFT POINTING GUILLEMET) */ + ["\u00AC", "\u00AC"], /* NOT SIGN */ + ["\u00AD", "\u00AD"], /* SOFT HYPHEN */ + ["\u00AE", "\u00AE"], /* REGISTERED SIGN (REGISTERED TRADE MARK SIGN) */ + ["\u00AF", "\u00AF"], /* MACRON (SPACING MACRON) */ + ["\u00B0", "\u00B0"], /* DEGREE SIGN */ + ["\u00B1", "\u00B1"], /* PLUS-MINUS SIGN (PLUS-OR-MINUS SIGN) */ + ["\u00B2", "\u00B2"], /* SUPERSCRIPT TWO (SUPERSCRIPT DIGIT TWO) */ + ["\u00B3", "\u00B3"], /* SUPERSCRIPT THREE (SUPERSCRIPT DIGIT THREE) */ + ["\u00B4", "\u00B4"], /* ACUTE ACCENT (SPACING ACUTE) */ + ["\u039C", "\u00B5"], /* MICRO SIGN */ + ["\u00B6", "\u00B6"], /* PILCROW SIGN (PARAGRAPH SIGN) */ + ["\u00B7", "\u00B7"], /* MIDDLE DOT */ + ["\u00B8", "\u00B8"], /* CEDILLA (SPACING CEDILLA) */ + ["\u00B9", "\u00B9"], /* SUPERSCRIPT ONE (SUPERSCRIPT DIGIT ONE) */ + ["\u00BA", "\u00BA"], /* MASCULINE ORDINAL INDICATOR */ + ["\u00BB", "\u00BB"], /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (RIGHT POINTING GUILLEMET) */ + ["\u00BC", "\u00BC"], /* VULGAR FRACTION ONE QUARTER (FRACTION ONE QUARTER) */ + ["\u00BD", "\u00BD"], /* VULGAR FRACTION ONE HALF (FRACTION ONE HALF) */ + ["\u00BE", "\u00BE"], /* VULGAR FRACTION THREE QUARTERS (FRACTION THREE QUARTERS) */ + ["\u00BF", "\u00BF"], /* INVERTED QUESTION MARK */ + ["\u00C0", "\u00E0"], /* LATIN CAPITAL LETTER A WITH GRAVE (LATIN CAPITAL LETTER A GRAVE) */ + ["\u00C1", "\u00E1"], /* LATIN CAPITAL LETTER A WITH ACUTE (LATIN CAPITAL LETTER A ACUTE) */ + ["\u00C2", "\u00E2"], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX (LATIN CAPITAL LETTER A CIRCUMFLEX) */ + ["\u00C3", "\u00E3"], /* LATIN CAPITAL LETTER A WITH TILDE (LATIN CAPITAL LETTER A TILDE) */ + ["\u00C4", "\u00E4"], /* LATIN CAPITAL LETTER A WITH DIAERESIS (LATIN CAPITAL LETTER A DIAERESIS) */ + ["\u00C5", "\u00E5"], /* LATIN CAPITAL LETTER A WITH RING ABOVE (LATIN CAPITAL LETTER A RING) */ + ["\u00C6", "\u00E6"], /* LATIN CAPITAL LETTER AE (LATIN CAPITAL LETTER A E) */ + ["\u00C7", "\u00E7"], /* LATIN CAPITAL LETTER C WITH CEDILLA (LATIN CAPITAL LETTER C CEDILLA) */ + ["\u00C8", "\u00E8"], /* LATIN CAPITAL LETTER E WITH GRAVE (LATIN CAPITAL LETTER E GRAVE) */ + ["\u00C9", "\u00E9"], /* LATIN CAPITAL LETTER E WITH ACUTE (LATIN CAPITAL LETTER E ACUTE) */ + ["\u00CA", "\u00EA"], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX (LATIN CAPITAL LETTER E CIRCUMFLEX) */ + ["\u00CB", "\u00EB"], /* LATIN CAPITAL LETTER E WITH DIAERESIS (LATIN CAPITAL LETTER E DIAERESIS) */ + ["\u00CC", "\u00EC"], /* LATIN CAPITAL LETTER I WITH GRAVE (LATIN CAPITAL LETTER I GRAVE) */ + ["\u00CD", "\u00ED"], /* LATIN CAPITAL LETTER I WITH ACUTE (LATIN CAPITAL LETTER I ACUTE) */ + ["\u00CE", "\u00EE"], /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX (LATIN CAPITAL LETTER I CIRCUMFLEX) */ + ["\u00CF", "\u00EF"], /* LATIN CAPITAL LETTER I WITH DIAERESIS (LATIN CAPITAL LETTER I DIAERESIS) */ + ["\u00D0", "\u00F0"], /* LATIN CAPITAL LETTER ETH */ + ["\u00D1", "\u00F1"], /* LATIN CAPITAL LETTER N WITH TILDE (LATIN CAPITAL LETTER N TILDE) */ + ["\u00D2", "\u00F2"], /* LATIN CAPITAL LETTER O WITH GRAVE (LATIN CAPITAL LETTER O GRAVE) */ + ["\u00D3", "\u00F3"], /* LATIN CAPITAL LETTER O WITH ACUTE (LATIN CAPITAL LETTER O ACUTE) */ + ["\u00D4", "\u00F4"], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX (LATIN CAPITAL LETTER O CIRCUMFLEX) */ + ["\u00D5", "\u00F5"], /* LATIN CAPITAL LETTER O WITH TILDE (LATIN CAPITAL LETTER O TILDE) */ + ["\u00D6", "\u00F6"], /* LATIN CAPITAL LETTER O WITH DIAERESIS (LATIN CAPITAL LETTER O DIAERESIS) */ + ["\u00D7", "\u00D7"], /* MULTIPLICATION SIGN */ + ["\u00D8", "\u00F8"], /* LATIN CAPITAL LETTER O WITH STROKE (LATIN CAPITAL LETTER O SLASH) */ + ["\u00D9", "\u00F9"], /* LATIN CAPITAL LETTER U WITH GRAVE (LATIN CAPITAL LETTER U GRAVE) */ + ["\u00DA", "\u00FA"], /* LATIN CAPITAL LETTER U WITH ACUTE (LATIN CAPITAL LETTER U ACUTE) */ + ["\u00DB", "\u00FB"], /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX (LATIN CAPITAL LETTER U CIRCUMFLEX) */ + ["\u00DC", "\u00FC"], /* LATIN CAPITAL LETTER U WITH DIAERESIS (LATIN CAPITAL LETTER U DIAERESIS) */ + ["\u00DD", "\u00FD"], /* LATIN CAPITAL LETTER Y WITH ACUTE (LATIN CAPITAL LETTER Y ACUTE) */ + ["\u00DE", "\u00FE"], /* LATIN CAPITAL LETTER THORN */ + ["\u0053\u0053", "\u00DF"], /* LATIN SMALL LETTER SHARP S */ + ["\u00C0", "\u00E0"], /* LATIN SMALL LETTER A WITH GRAVE (LATIN SMALL LETTER A GRAVE) */ + ["\u00C1", "\u00E1"], /* LATIN SMALL LETTER A WITH ACUTE (LATIN SMALL LETTER A ACUTE) */ + ["\u00C2", "\u00E2"], /* LATIN SMALL LETTER A WITH CIRCUMFLEX (LATIN SMALL LETTER A CIRCUMFLEX) */ + ["\u00C3", "\u00E3"], /* LATIN SMALL LETTER A WITH TILDE (LATIN SMALL LETTER A TILDE) */ + ["\u00C4", "\u00E4"], /* LATIN SMALL LETTER A WITH DIAERESIS (LATIN SMALL LETTER A DIAERESIS) */ + ["\u00C5", "\u00E5"], /* LATIN SMALL LETTER A WITH RING ABOVE (LATIN SMALL LETTER A RING) */ + ["\u00C6", "\u00E6"], /* LATIN SMALL LETTER AE (LATIN SMALL LETTER A E) */ + ["\u00C7", "\u00E7"], /* LATIN SMALL LETTER C WITH CEDILLA (LATIN SMALL LETTER C CEDILLA) */ + ["\u00C8", "\u00E8"], /* LATIN SMALL LETTER E WITH GRAVE (LATIN SMALL LETTER E GRAVE) */ + ["\u00C9", "\u00E9"], /* LATIN SMALL LETTER E WITH ACUTE (LATIN SMALL LETTER E ACUTE) */ + ["\u00CA", "\u00EA"], /* LATIN SMALL LETTER E WITH CIRCUMFLEX (LATIN SMALL LETTER E CIRCUMFLEX) */ + ["\u00CB", "\u00EB"], /* LATIN SMALL LETTER E WITH DIAERESIS (LATIN SMALL LETTER E DIAERESIS) */ + ["\u00CC", "\u00EC"], /* LATIN SMALL LETTER I WITH GRAVE (LATIN SMALL LETTER I GRAVE) */ + ["\u00CD", "\u00ED"], /* LATIN SMALL LETTER I WITH ACUTE (LATIN SMALL LETTER I ACUTE) */ + ["\u00CE", "\u00EE"], /* LATIN SMALL LETTER I WITH CIRCUMFLEX (LATIN SMALL LETTER I CIRCUMFLEX) */ + ["\u00CF", "\u00EF"], /* LATIN SMALL LETTER I WITH DIAERESIS (LATIN SMALL LETTER I DIAERESIS) */ + ["\u00D0", "\u00F0"], /* LATIN SMALL LETTER ETH */ + ["\u00D1", "\u00F1"], /* LATIN SMALL LETTER N WITH TILDE (LATIN SMALL LETTER N TILDE) */ + ["\u00D2", "\u00F2"], /* LATIN SMALL LETTER O WITH GRAVE (LATIN SMALL LETTER O GRAVE) */ + ["\u00D3", "\u00F3"], /* LATIN SMALL LETTER O WITH ACUTE (LATIN SMALL LETTER O ACUTE) */ + ["\u00D4", "\u00F4"], /* LATIN SMALL LETTER O WITH CIRCUMFLEX (LATIN SMALL LETTER O CIRCUMFLEX) */ + ["\u00D5", "\u00F5"], /* LATIN SMALL LETTER O WITH TILDE (LATIN SMALL LETTER O TILDE) */ + ["\u00D6", "\u00F6"], /* LATIN SMALL LETTER O WITH DIAERESIS (LATIN SMALL LETTER O DIAERESIS) */ + ["\u00F7", "\u00F7"], /* DIVISION SIGN */ + ["\u00D8", "\u00F8"], /* LATIN SMALL LETTER O WITH STROKE (LATIN SMALL LETTER O SLASH) */ + ["\u00D9", "\u00F9"], /* LATIN SMALL LETTER U WITH GRAVE (LATIN SMALL LETTER U GRAVE) */ + ["\u00DA", "\u00FA"], /* LATIN SMALL LETTER U WITH ACUTE (LATIN SMALL LETTER U ACUTE) */ + ["\u00DB", "\u00FB"], /* LATIN SMALL LETTER U WITH CIRCUMFLEX (LATIN SMALL LETTER U CIRCUMFLEX) */ + ["\u00DC", "\u00FC"], /* LATIN SMALL LETTER U WITH DIAERESIS (LATIN SMALL LETTER U DIAERESIS) */ + ["\u00DD", "\u00FD"], /* LATIN SMALL LETTER Y WITH ACUTE (LATIN SMALL LETTER Y ACUTE) */ + ["\u00DE", "\u00FE"], /* LATIN SMALL LETTER THORN */ + ["\u0178", "\u00FF"], /* LATIN SMALL LETTER Y WITH DIAERESIS (LATIN SMALL LETTER Y DIAERESIS) */ + ["\u0100", "\u0101"], /* LATIN CAPITAL LETTER A WITH MACRON (LATIN CAPITAL LETTER A MACRON) */ + ["\u0100", "\u0101"], /* LATIN SMALL LETTER A WITH MACRON (LATIN SMALL LETTER A MACRON) */ + ["\u0102", "\u0103"], /* LATIN CAPITAL LETTER A WITH BREVE (LATIN CAPITAL LETTER A BREVE) */ + ["\u0102", "\u0103"], /* LATIN SMALL LETTER A WITH BREVE (LATIN SMALL LETTER A BREVE) */ + ["\u0104", "\u0105"], /* LATIN CAPITAL LETTER A WITH OGONEK (LATIN CAPITAL LETTER A OGONEK) */ + ["\u0104", "\u0105"], /* LATIN SMALL LETTER A WITH OGONEK (LATIN SMALL LETTER A OGONEK) */ + ["\u0106", "\u0107"], /* LATIN CAPITAL LETTER C WITH ACUTE (LATIN CAPITAL LETTER C ACUTE) */ + ["\u0106", "\u0107"], /* LATIN SMALL LETTER C WITH ACUTE (LATIN SMALL LETTER C ACUTE) */ + ["\u0108", "\u0109"], /* LATIN CAPITAL LETTER C WITH CIRCUMFLEX (LATIN CAPITAL LETTER C CIRCUMFLEX) */ + ["\u0108", "\u0109"], /* LATIN SMALL LETTER C WITH CIRCUMFLEX (LATIN SMALL LETTER C CIRCUMFLEX) */ + ["\u010A", "\u010B"], /* LATIN CAPITAL LETTER C WITH DOT ABOVE (LATIN CAPITAL LETTER C DOT) */ + ["\u010A", "\u010B"], /* LATIN SMALL LETTER C WITH DOT ABOVE (LATIN SMALL LETTER C DOT) */ + ["\u010C", "\u010D"], /* LATIN CAPITAL LETTER C WITH CARON (LATIN CAPITAL LETTER C HACEK) */ + ["\u010C", "\u010D"], /* LATIN SMALL LETTER C WITH CARON (LATIN SMALL LETTER C HACEK) */ + ["\u010E", "\u010F"], /* LATIN CAPITAL LETTER D WITH CARON (LATIN CAPITAL LETTER D HACEK) */ + ["\u010E", "\u010F"], /* LATIN SMALL LETTER D WITH CARON (LATIN SMALL LETTER D HACEK) */ + ["\u0110", "\u0111"], /* LATIN CAPITAL LETTER D WITH STROKE (LATIN CAPITAL LETTER D BAR) */ + ["\u0110", "\u0111"], /* LATIN SMALL LETTER D WITH STROKE (LATIN SMALL LETTER D BAR) */ + ["\u0112", "\u0113"], /* LATIN CAPITAL LETTER E WITH MACRON (LATIN CAPITAL LETTER E MACRON) */ + ["\u0112", "\u0113"], /* LATIN SMALL LETTER E WITH MACRON (LATIN SMALL LETTER E MACRON) */ + ["\u0114", "\u0115"], /* LATIN CAPITAL LETTER E WITH BREVE (LATIN CAPITAL LETTER E BREVE) */ + ["\u0114", "\u0115"], /* LATIN SMALL LETTER E WITH BREVE (LATIN SMALL LETTER E BREVE) */ + ["\u0116", "\u0117"], /* LATIN CAPITAL LETTER E WITH DOT ABOVE (LATIN CAPITAL LETTER E DOT) */ + ["\u0116", "\u0117"], /* LATIN SMALL LETTER E WITH DOT ABOVE (LATIN SMALL LETTER E DOT) */ + ["\u0118", "\u0119"], /* LATIN CAPITAL LETTER E WITH OGONEK (LATIN CAPITAL LETTER E OGONEK) */ + ["\u0118", "\u0119"], /* LATIN SMALL LETTER E WITH OGONEK (LATIN SMALL LETTER E OGONEK) */ + ["\u011A", "\u011B"], /* LATIN CAPITAL LETTER E WITH CARON (LATIN CAPITAL LETTER E HACEK) */ + ["\u011A", "\u011B"], /* LATIN SMALL LETTER E WITH CARON (LATIN SMALL LETTER E HACEK) */ + ["\u011C", "\u011D"], /* LATIN CAPITAL LETTER G WITH CIRCUMFLEX (LATIN CAPITAL LETTER G CIRCUMFLEX) */ + ["\u011C", "\u011D"], /* LATIN SMALL LETTER G WITH CIRCUMFLEX (LATIN SMALL LETTER G CIRCUMFLEX) */ + ["\u011E", "\u011F"], /* LATIN CAPITAL LETTER G WITH BREVE (LATIN CAPITAL LETTER G BREVE) */ + ["\u011E", "\u011F"], /* LATIN SMALL LETTER G WITH BREVE (LATIN SMALL LETTER G BREVE) */ + ["\u0120", "\u0121"], /* LATIN CAPITAL LETTER G WITH DOT ABOVE (LATIN CAPITAL LETTER G DOT) */ + ["\u0120", "\u0121"], /* LATIN SMALL LETTER G WITH DOT ABOVE (LATIN SMALL LETTER G DOT) */ + ["\u0122", "\u0123"], /* LATIN CAPITAL LETTER G WITH CEDILLA (LATIN CAPITAL LETTER G CEDILLA) */ + ["\u0122", "\u0123"], /* LATIN SMALL LETTER G WITH CEDILLA (LATIN SMALL LETTER G CEDILLA) */ + ["\u0124", "\u0125"], /* LATIN CAPITAL LETTER H WITH CIRCUMFLEX (LATIN CAPITAL LETTER H CIRCUMFLEX) */ + ["\u0124", "\u0125"], /* LATIN SMALL LETTER H WITH CIRCUMFLEX (LATIN SMALL LETTER H CIRCUMFLEX) */ + ["\u0126", "\u0127"], /* LATIN CAPITAL LETTER H WITH STROKE (LATIN CAPITAL LETTER H BAR) */ + ["\u0126", "\u0127"], /* LATIN SMALL LETTER H WITH STROKE (LATIN SMALL LETTER H BAR) */ + ["\u0128", "\u0129"], /* LATIN CAPITAL LETTER I WITH TILDE (LATIN CAPITAL LETTER I TILDE) */ + ["\u0128", "\u0129"], /* LATIN SMALL LETTER I WITH TILDE (LATIN SMALL LETTER I TILDE) */ + ["\u012A", "\u012B"], /* LATIN CAPITAL LETTER I WITH MACRON (LATIN CAPITAL LETTER I MACRON) */ + ["\u012A", "\u012B"], /* LATIN SMALL LETTER I WITH MACRON (LATIN SMALL LETTER I MACRON) */ + ["\u012C", "\u012D"], /* LATIN CAPITAL LETTER I WITH BREVE (LATIN CAPITAL LETTER I BREVE) */ + ["\u012C", "\u012D"], /* LATIN SMALL LETTER I WITH BREVE (LATIN SMALL LETTER I BREVE) */ + ["\u012E", "\u012F"], /* LATIN CAPITAL LETTER I WITH OGONEK (LATIN CAPITAL LETTER I OGONEK) */ + ["\u012E", "\u012F"], /* LATIN SMALL LETTER I WITH OGONEK (LATIN SMALL LETTER I OGONEK) */ + ["\u0130", "\u0069\u0307"], /* LATIN CAPITAL LETTER I WITH DOT ABOVE (LATIN CAPITAL LETTER I DOT) */ + ["\u0049", "\u0131"], /* LATIN SMALL LETTER DOTLESS I */ + ["\u0132", "\u0133"], /* LATIN CAPITAL LIGATURE IJ (LATIN CAPITAL LETTER I J) */ + ["\u0132", "\u0133"], /* LATIN SMALL LIGATURE IJ (LATIN SMALL LETTER I J) */ + ["\u0134", "\u0135"], /* LATIN CAPITAL LETTER J WITH CIRCUMFLEX (LATIN CAPITAL LETTER J CIRCUMFLEX) */ + ["\u0134", "\u0135"], /* LATIN SMALL LETTER J WITH CIRCUMFLEX (LATIN SMALL LETTER J CIRCUMFLEX) */ + ["\u0136", "\u0137"], /* LATIN CAPITAL LETTER K WITH CEDILLA (LATIN CAPITAL LETTER K CEDILLA) */ + ["\u0136", "\u0137"], /* LATIN SMALL LETTER K WITH CEDILLA (LATIN SMALL LETTER K CEDILLA) */ + ["\u0138", "\u0138"], /* LATIN SMALL LETTER KRA */ + ["\u0139", "\u013A"], /* LATIN CAPITAL LETTER L WITH ACUTE (LATIN CAPITAL LETTER L ACUTE) */ + ["\u0139", "\u013A"], /* LATIN SMALL LETTER L WITH ACUTE (LATIN SMALL LETTER L ACUTE) */ + ["\u013B", "\u013C"], /* LATIN CAPITAL LETTER L WITH CEDILLA (LATIN CAPITAL LETTER L CEDILLA) */ + ["\u013B", "\u013C"], /* LATIN SMALL LETTER L WITH CEDILLA (LATIN SMALL LETTER L CEDILLA) */ + ["\u013D", "\u013E"], /* LATIN CAPITAL LETTER L WITH CARON (LATIN CAPITAL LETTER L HACEK) */ + ["\u013D", "\u013E"], /* LATIN SMALL LETTER L WITH CARON (LATIN SMALL LETTER L HACEK) */ + ["\u013F", "\u0140"], /* LATIN CAPITAL LETTER L WITH MIDDLE DOT */ + ["\u013F", "\u0140"], /* LATIN SMALL LETTER L WITH MIDDLE DOT */ + ["\u0141", "\u0142"], /* LATIN CAPITAL LETTER L WITH STROKE (LATIN CAPITAL LETTER L SLASH) */ + ["\u0141", "\u0142"], /* LATIN SMALL LETTER L WITH STROKE (LATIN SMALL LETTER L SLASH) */ + ["\u0143", "\u0144"], /* LATIN CAPITAL LETTER N WITH ACUTE (LATIN CAPITAL LETTER N ACUTE) */ + ["\u0143", "\u0144"], /* LATIN SMALL LETTER N WITH ACUTE (LATIN SMALL LETTER N ACUTE) */ + ["\u0145", "\u0146"], /* LATIN CAPITAL LETTER N WITH CEDILLA (LATIN CAPITAL LETTER N CEDILLA) */ + ["\u0145", "\u0146"], /* LATIN SMALL LETTER N WITH CEDILLA (LATIN SMALL LETTER N CEDILLA) */ + ["\u0147", "\u0148"], /* LATIN CAPITAL LETTER N WITH CARON (LATIN CAPITAL LETTER N HACEK) */ + ["\u0147", "\u0148"], /* LATIN SMALL LETTER N WITH CARON (LATIN SMALL LETTER N HACEK) */ + ["\u02BC\u004E", "\u0149"], /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N) */ + ["\u014A", "\u014B"], /* LATIN CAPITAL LETTER ENG */ + ["\u014A", "\u014B"], /* LATIN SMALL LETTER ENG */ + ["\u014C", "\u014D"], /* LATIN CAPITAL LETTER O WITH MACRON (LATIN CAPITAL LETTER O MACRON) */ + ["\u014C", "\u014D"], /* LATIN SMALL LETTER O WITH MACRON (LATIN SMALL LETTER O MACRON) */ + ["\u014E", "\u014F"], /* LATIN CAPITAL LETTER O WITH BREVE (LATIN CAPITAL LETTER O BREVE) */ + ["\u014E", "\u014F"], /* LATIN SMALL LETTER O WITH BREVE (LATIN SMALL LETTER O BREVE) */ + ["\u0150", "\u0151"], /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE (LATIN CAPITAL LETTER O DOUBLE ACUTE) */ + ["\u0150", "\u0151"], /* LATIN SMALL LETTER O WITH DOUBLE ACUTE (LATIN SMALL LETTER O DOUBLE ACUTE) */ + ["\u0152", "\u0153"], /* LATIN CAPITAL LIGATURE OE (LATIN CAPITAL LETTER O E) */ + ["\u0152", "\u0153"], /* LATIN SMALL LIGATURE OE (LATIN SMALL LETTER O E) */ + ["\u0154", "\u0155"], /* LATIN CAPITAL LETTER R WITH ACUTE (LATIN CAPITAL LETTER R ACUTE) */ + ["\u0154", "\u0155"], /* LATIN SMALL LETTER R WITH ACUTE (LATIN SMALL LETTER R ACUTE) */ + ["\u0156", "\u0157"], /* LATIN CAPITAL LETTER R WITH CEDILLA (LATIN CAPITAL LETTER R CEDILLA) */ + ["\u0156", "\u0157"], /* LATIN SMALL LETTER R WITH CEDILLA (LATIN SMALL LETTER R CEDILLA) */ + ["\u0158", "\u0159"], /* LATIN CAPITAL LETTER R WITH CARON (LATIN CAPITAL LETTER R HACEK) */ + ["\u0158", "\u0159"], /* LATIN SMALL LETTER R WITH CARON (LATIN SMALL LETTER R HACEK) */ + ["\u015A", "\u015B"], /* LATIN CAPITAL LETTER S WITH ACUTE (LATIN CAPITAL LETTER S ACUTE) */ + ["\u015A", "\u015B"], /* LATIN SMALL LETTER S WITH ACUTE (LATIN SMALL LETTER S ACUTE) */ + ["\u015C", "\u015D"], /* LATIN CAPITAL LETTER S WITH CIRCUMFLEX (LATIN CAPITAL LETTER S CIRCUMFLEX) */ + ["\u015C", "\u015D"], /* LATIN SMALL LETTER S WITH CIRCUMFLEX (LATIN SMALL LETTER S CIRCUMFLEX) */ + ["\u015E", "\u015F"], /* LATIN CAPITAL LETTER S WITH CEDILLA (LATIN CAPITAL LETTER S CEDILLA) */ + ["\u015E", "\u015F"], /* LATIN SMALL LETTER S WITH CEDILLA (LATIN SMALL LETTER S CEDILLA) */ + ["\u0160", "\u0161"], /* LATIN CAPITAL LETTER S WITH CARON (LATIN CAPITAL LETTER S HACEK) */ + ["\u0160", "\u0161"], /* LATIN SMALL LETTER S WITH CARON (LATIN SMALL LETTER S HACEK) */ + ["\u0162", "\u0163"], /* LATIN CAPITAL LETTER T WITH CEDILLA (LATIN CAPITAL LETTER T CEDILLA) */ + ["\u0162", "\u0163"], /* LATIN SMALL LETTER T WITH CEDILLA (LATIN SMALL LETTER T CEDILLA) */ + ["\u0164", "\u0165"], /* LATIN CAPITAL LETTER T WITH CARON (LATIN CAPITAL LETTER T HACEK) */ + ["\u0164", "\u0165"], /* LATIN SMALL LETTER T WITH CARON (LATIN SMALL LETTER T HACEK) */ + ["\u0166", "\u0167"], /* LATIN CAPITAL LETTER T WITH STROKE (LATIN CAPITAL LETTER T BAR) */ + ["\u0166", "\u0167"], /* LATIN SMALL LETTER T WITH STROKE (LATIN SMALL LETTER T BAR) */ + ["\u0168", "\u0169"], /* LATIN CAPITAL LETTER U WITH TILDE (LATIN CAPITAL LETTER U TILDE) */ + ["\u0168", "\u0169"], /* LATIN SMALL LETTER U WITH TILDE (LATIN SMALL LETTER U TILDE) */ + ["\u016A", "\u016B"], /* LATIN CAPITAL LETTER U WITH MACRON (LATIN CAPITAL LETTER U MACRON) */ + ["\u016A", "\u016B"], /* LATIN SMALL LETTER U WITH MACRON (LATIN SMALL LETTER U MACRON) */ + ["\u016C", "\u016D"], /* LATIN CAPITAL LETTER U WITH BREVE (LATIN CAPITAL LETTER U BREVE) */ + ["\u016C", "\u016D"], /* LATIN SMALL LETTER U WITH BREVE (LATIN SMALL LETTER U BREVE) */ + ["\u016E", "\u016F"], /* LATIN CAPITAL LETTER U WITH RING ABOVE (LATIN CAPITAL LETTER U RING) */ + ["\u016E", "\u016F"], /* LATIN SMALL LETTER U WITH RING ABOVE (LATIN SMALL LETTER U RING) */ + ["\u0170", "\u0171"], /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE (LATIN CAPITAL LETTER U DOUBLE ACUTE) */ + ["\u0170", "\u0171"], /* LATIN SMALL LETTER U WITH DOUBLE ACUTE (LATIN SMALL LETTER U DOUBLE ACUTE) */ + ["\u0172", "\u0173"], /* LATIN CAPITAL LETTER U WITH OGONEK (LATIN CAPITAL LETTER U OGONEK) */ + ["\u0172", "\u0173"], /* LATIN SMALL LETTER U WITH OGONEK (LATIN SMALL LETTER U OGONEK) */ + ["\u0174", "\u0175"], /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX (LATIN CAPITAL LETTER W CIRCUMFLEX) */ + ["\u0174", "\u0175"], /* LATIN SMALL LETTER W WITH CIRCUMFLEX (LATIN SMALL LETTER W CIRCUMFLEX) */ + ["\u0176", "\u0177"], /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX (LATIN CAPITAL LETTER Y CIRCUMFLEX) */ + ["\u0176", "\u0177"], /* LATIN SMALL LETTER Y WITH CIRCUMFLEX (LATIN SMALL LETTER Y CIRCUMFLEX) */ + ["\u0178", "\u00FF"], /* LATIN CAPITAL LETTER Y WITH DIAERESIS (LATIN CAPITAL LETTER Y DIAERESIS) */ + ["\u0179", "\u017A"], /* LATIN CAPITAL LETTER Z WITH ACUTE (LATIN CAPITAL LETTER Z ACUTE) */ + ["\u0179", "\u017A"], /* LATIN SMALL LETTER Z WITH ACUTE (LATIN SMALL LETTER Z ACUTE) */ + ["\u017B", "\u017C"], /* LATIN CAPITAL LETTER Z WITH DOT ABOVE (LATIN CAPITAL LETTER Z DOT) */ + ["\u017B", "\u017C"], /* LATIN SMALL LETTER Z WITH DOT ABOVE (LATIN SMALL LETTER Z DOT) */ + ["\u017D", "\u017E"], /* LATIN CAPITAL LETTER Z WITH CARON (LATIN CAPITAL LETTER Z HACEK) */ + ["\u017D", "\u017E"], /* LATIN SMALL LETTER Z WITH CARON (LATIN SMALL LETTER Z HACEK) */ + ["\u0053", "\u017F"], /* LATIN SMALL LETTER LONG S */ + ["\u0243", "\u0180"], /* LATIN SMALL LETTER B WITH STROKE (LATIN SMALL LETTER B BAR) */ + ["\u0181", "\u0253"], /* LATIN CAPITAL LETTER B WITH HOOK (LATIN CAPITAL LETTER B HOOK) */ + ["\u0182", "\u0183"], /* LATIN CAPITAL LETTER B WITH TOPBAR (LATIN CAPITAL LETTER B TOPBAR) */ + ["\u0182", "\u0183"], /* LATIN SMALL LETTER B WITH TOPBAR (LATIN SMALL LETTER B TOPBAR) */ + ["\u0184", "\u0185"], /* LATIN CAPITAL LETTER TONE SIX */ + ["\u0184", "\u0185"], /* LATIN SMALL LETTER TONE SIX */ + ["\u0186", "\u0254"], /* LATIN CAPITAL LETTER OPEN O */ + ["\u0187", "\u0188"], /* LATIN CAPITAL LETTER C WITH HOOK (LATIN CAPITAL LETTER C HOOK) */ + ["\u0187", "\u0188"], /* LATIN SMALL LETTER C WITH HOOK (LATIN SMALL LETTER C HOOK) */ + ["\u0189", "\u0256"], /* LATIN CAPITAL LETTER AFRICAN D */ + ["\u018A", "\u0257"], /* LATIN CAPITAL LETTER D WITH HOOK (LATIN CAPITAL LETTER D HOOK) */ + ["\u018B", "\u018C"], /* LATIN CAPITAL LETTER D WITH TOPBAR (LATIN CAPITAL LETTER D TOPBAR) */ + ["\u018B", "\u018C"], /* LATIN SMALL LETTER D WITH TOPBAR (LATIN SMALL LETTER D TOPBAR) */ + ["\u018D", "\u018D"], /* LATIN SMALL LETTER TURNED DELTA */ + ["\u018E", "\u01DD"], /* LATIN CAPITAL LETTER REVERSED E (LATIN CAPITAL LETTER TURNED E) */ + ["\u018F", "\u0259"], /* LATIN CAPITAL LETTER SCHWA */ + ["\u0190", "\u025B"], /* LATIN CAPITAL LETTER OPEN E (LATIN CAPITAL LETTER EPSILON) */ + ["\u0191", "\u0192"], /* LATIN CAPITAL LETTER F WITH HOOK (LATIN CAPITAL LETTER F HOOK) */ + ["\u0191", "\u0192"], /* LATIN SMALL LETTER F WITH HOOK (LATIN SMALL LETTER SCRIPT F) */ + ["\u0193", "\u0260"], /* LATIN CAPITAL LETTER G WITH HOOK (LATIN CAPITAL LETTER G HOOK) */ + ["\u0194", "\u0263"], /* LATIN CAPITAL LETTER GAMMA */ + ["\u01F6", "\u0195"], /* LATIN SMALL LETTER HV (LATIN SMALL LETTER H V) */ + ["\u0196", "\u0269"], /* LATIN CAPITAL LETTER IOTA */ + ["\u0197", "\u0268"], /* LATIN CAPITAL LETTER I WITH STROKE (LATIN CAPITAL LETTER BARRED I) */ + ["\u0198", "\u0199"], /* LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK) */ + ["\u0198", "\u0199"], /* LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK) */ + ["\u023D", "\u019A"], /* LATIN SMALL LETTER L WITH BAR (LATIN SMALL LETTER BARRED L) */ + ["\u019B", "\u019B"], /* LATIN SMALL LETTER LAMBDA WITH STROKE (LATIN SMALL LETTER BARRED LAMBDA) */ + ["\u019C", "\u026F"], /* LATIN CAPITAL LETTER TURNED M */ + ["\u019D", "\u0272"], /* LATIN CAPITAL LETTER N WITH LEFT HOOK (LATIN CAPITAL LETTER N HOOK) */ + ["\u0220", "\u019E"], /* LATIN SMALL LETTER N WITH LONG RIGHT LEG */ + ["\u019F", "\u0275"], /* LATIN CAPITAL LETTER O WITH MIDDLE TILDE (LATIN CAPITAL LETTER BARRED O) */ + ["\u01A0", "\u01A1"], /* LATIN CAPITAL LETTER O WITH HORN (LATIN CAPITAL LETTER O HORN) */ + ["\u01A0", "\u01A1"], /* LATIN SMALL LETTER O WITH HORN (LATIN SMALL LETTER O HORN) */ + ["\u01A2", "\u01A3"], /* LATIN CAPITAL LETTER OI (LATIN CAPITAL LETTER O I) */ + ["\u01A2", "\u01A3"], /* LATIN SMALL LETTER OI (LATIN SMALL LETTER O I) */ + ["\u01A4", "\u01A5"], /* LATIN CAPITAL LETTER P WITH HOOK (LATIN CAPITAL LETTER P HOOK) */ + ["\u01A4", "\u01A5"], /* LATIN SMALL LETTER P WITH HOOK (LATIN SMALL LETTER P HOOK) */ + ["\u01A6", "\u0280"], /* LATIN LETTER YR (LATIN LETTER Y R) */ + ["\u01A7", "\u01A8"], /* LATIN CAPITAL LETTER TONE TWO */ + ["\u01A7", "\u01A8"], /* LATIN SMALL LETTER TONE TWO */ + ["\u01A9", "\u0283"], /* LATIN CAPITAL LETTER ESH */ + ["\u01AA", "\u01AA"], /* LATIN LETTER REVERSED ESH LOOP */ + ["\u01AB", "\u01AB"], /* LATIN SMALL LETTER T WITH PALATAL HOOK (LATIN SMALL LETTER T PALATAL HOOK) */ + ["\u01AC", "\u01AD"], /* LATIN CAPITAL LETTER T WITH HOOK (LATIN CAPITAL LETTER T HOOK) */ + ["\u01AC", "\u01AD"], /* LATIN SMALL LETTER T WITH HOOK (LATIN SMALL LETTER T HOOK) */ + ["\u01AE", "\u0288"], /* LATIN CAPITAL LETTER T WITH RETROFLEX HOOK (LATIN CAPITAL LETTER T RETROFLEX HOOK) */ + ["\u01AF", "\u01B0"], /* LATIN CAPITAL LETTER U WITH HORN (LATIN CAPITAL LETTER U HORN) */ + ["\u01AF", "\u01B0"], /* LATIN SMALL LETTER U WITH HORN (LATIN SMALL LETTER U HORN) */ + ["\u01B1", "\u028A"], /* LATIN CAPITAL LETTER UPSILON */ + ["\u01B2", "\u028B"], /* LATIN CAPITAL LETTER V WITH HOOK (LATIN CAPITAL LETTER SCRIPT V) */ + ["\u01B3", "\u01B4"], /* LATIN CAPITAL LETTER Y WITH HOOK (LATIN CAPITAL LETTER Y HOOK) */ + ["\u01B3", "\u01B4"], /* LATIN SMALL LETTER Y WITH HOOK (LATIN SMALL LETTER Y HOOK) */ + ["\u01B5", "\u01B6"], /* LATIN CAPITAL LETTER Z WITH STROKE (LATIN CAPITAL LETTER Z BAR) */ + ["\u01B5", "\u01B6"], /* LATIN SMALL LETTER Z WITH STROKE (LATIN SMALL LETTER Z BAR) */ + ["\u01B7", "\u0292"], /* LATIN CAPITAL LETTER EZH (LATIN CAPITAL LETTER YOGH) */ + ["\u01B8", "\u01B9"], /* LATIN CAPITAL LETTER EZH REVERSED (LATIN CAPITAL LETTER REVERSED YOGH) */ + ["\u01B8", "\u01B9"], /* LATIN SMALL LETTER EZH REVERSED (LATIN SMALL LETTER REVERSED YOGH) */ + ["\u01BA", "\u01BA"], /* LATIN SMALL LETTER EZH WITH TAIL (LATIN SMALL LETTER YOGH WITH TAIL) */ + ["\u01BB", "\u01BB"], /* LATIN LETTER TWO WITH STROKE (LATIN LETTER TWO BAR) */ + ["\u01BC", "\u01BD"], /* LATIN CAPITAL LETTER TONE FIVE */ + ["\u01BC", "\u01BD"], /* LATIN SMALL LETTER TONE FIVE */ + ["\u01BE", "\u01BE"], /* LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE (LATIN LETTER INVERTED GLOTTAL STOP BAR) */ + ["\u01F7", "\u01BF"], /* LATIN LETTER WYNN */ + ["\u01C0", "\u01C0"], /* LATIN LETTER DENTAL CLICK (LATIN LETTER PIPE) */ + ["\u01C1", "\u01C1"], /* LATIN LETTER LATERAL CLICK (LATIN LETTER DOUBLE PIPE) */ + ["\u01C2", "\u01C2"], /* LATIN LETTER ALVEOLAR CLICK (LATIN LETTER PIPE DOUBLE BAR) */ + ["\u01C3", "\u01C3"], /* LATIN LETTER RETROFLEX CLICK (LATIN LETTER EXCLAMATION MARK) */ + ["\u01C4", "\u01C6"], /* LATIN CAPITAL LETTER DZ WITH CARON (LATIN CAPITAL LETTER D Z HACEK) */ + ["\u01C4", "\u01C6"], /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (LATIN LETTER CAPITAL D SMALL Z HACEK) */ + ["\u01C4", "\u01C6"], /* LATIN SMALL LETTER DZ WITH CARON (LATIN SMALL LETTER D Z HACEK) */ + ["\u01C7", "\u01C9"], /* LATIN CAPITAL LETTER LJ (LATIN CAPITAL LETTER L J) */ + ["\u01C7", "\u01C9"], /* LATIN CAPITAL LETTER L WITH SMALL LETTER J (LATIN LETTER CAPITAL L SMALL J) */ + ["\u01C7", "\u01C9"], /* LATIN SMALL LETTER LJ (LATIN SMALL LETTER L J) */ + ["\u01CA", "\u01CC"], /* LATIN CAPITAL LETTER NJ (LATIN CAPITAL LETTER N J) */ + ["\u01CA", "\u01CC"], /* LATIN CAPITAL LETTER N WITH SMALL LETTER J (LATIN LETTER CAPITAL N SMALL J) */ + ["\u01CA", "\u01CC"], /* LATIN SMALL LETTER NJ (LATIN SMALL LETTER N J) */ + ["\u01CD", "\u01CE"], /* LATIN CAPITAL LETTER A WITH CARON (LATIN CAPITAL LETTER A HACEK) */ + ["\u01CD", "\u01CE"], /* LATIN SMALL LETTER A WITH CARON (LATIN SMALL LETTER A HACEK) */ + ["\u01CF", "\u01D0"], /* LATIN CAPITAL LETTER I WITH CARON (LATIN CAPITAL LETTER I HACEK) */ + ["\u01CF", "\u01D0"], /* LATIN SMALL LETTER I WITH CARON (LATIN SMALL LETTER I HACEK) */ + ["\u01D1", "\u01D2"], /* LATIN CAPITAL LETTER O WITH CARON (LATIN CAPITAL LETTER O HACEK) */ + ["\u01D1", "\u01D2"], /* LATIN SMALL LETTER O WITH CARON (LATIN SMALL LETTER O HACEK) */ + ["\u01D3", "\u01D4"], /* LATIN CAPITAL LETTER U WITH CARON (LATIN CAPITAL LETTER U HACEK) */ + ["\u01D3", "\u01D4"], /* LATIN SMALL LETTER U WITH CARON (LATIN SMALL LETTER U HACEK) */ + ["\u01D5", "\u01D6"], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER U DIAERESIS MACRON) */ + ["\u01D5", "\u01D6"], /* LATIN SMALL LETTER U WITH DIAERESIS AND MACRON (LATIN SMALL LETTER U DIAERESIS MACRON) */ + ["\u01D7", "\u01D8"], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE (LATIN CAPITAL LETTER U DIAERESIS ACUTE) */ + ["\u01D7", "\u01D8"], /* LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE (LATIN SMALL LETTER U DIAERESIS ACUTE) */ + ["\u01D9", "\u01DA"], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON (LATIN CAPITAL LETTER U DIAERESIS HACEK) */ + ["\u01D9", "\u01DA"], /* LATIN SMALL LETTER U WITH DIAERESIS AND CARON (LATIN SMALL LETTER U DIAERESIS HACEK) */ + ["\u01DB", "\u01DC"], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE (LATIN CAPITAL LETTER U DIAERESIS GRAVE) */ + ["\u01DB", "\u01DC"], /* LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE (LATIN SMALL LETTER U DIAERESIS GRAVE) */ + ["\u018E", "\u01DD"], /* LATIN SMALL LETTER TURNED E */ + ["\u01DE", "\u01DF"], /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER A DIAERESIS MACRON) */ + ["\u01DE", "\u01DF"], /* LATIN SMALL LETTER A WITH DIAERESIS AND MACRON (LATIN SMALL LETTER A DIAERESIS MACRON) */ + ["\u01E0", "\u01E1"], /* LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON (LATIN CAPITAL LETTER A DOT MACRON) */ + ["\u01E0", "\u01E1"], /* LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON (LATIN SMALL LETTER A DOT MACRON) */ + ["\u01E2", "\u01E3"], /* LATIN CAPITAL LETTER AE WITH MACRON (LATIN CAPITAL LETTER A E MACRON) */ + ["\u01E2", "\u01E3"], /* LATIN SMALL LETTER AE WITH MACRON (LATIN SMALL LETTER A E MACRON) */ + ["\u01E4", "\u01E5"], /* LATIN CAPITAL LETTER G WITH STROKE (LATIN CAPITAL LETTER G BAR) */ + ["\u01E4", "\u01E5"], /* LATIN SMALL LETTER G WITH STROKE (LATIN SMALL LETTER G BAR) */ + ["\u01E6", "\u01E7"], /* LATIN CAPITAL LETTER G WITH CARON (LATIN CAPITAL LETTER G HACEK) */ + ["\u01E6", "\u01E7"], /* LATIN SMALL LETTER G WITH CARON (LATIN SMALL LETTER G HACEK) */ + ["\u01E8", "\u01E9"], /* LATIN CAPITAL LETTER K WITH CARON (LATIN CAPITAL LETTER K HACEK) */ + ["\u01E8", "\u01E9"], /* LATIN SMALL LETTER K WITH CARON (LATIN SMALL LETTER K HACEK) */ + ["\u01EA", "\u01EB"], /* LATIN CAPITAL LETTER O WITH OGONEK (LATIN CAPITAL LETTER O OGONEK) */ + ["\u01EA", "\u01EB"], /* LATIN SMALL LETTER O WITH OGONEK (LATIN SMALL LETTER O OGONEK) */ + ["\u01EC", "\u01ED"], /* LATIN CAPITAL LETTER O WITH OGONEK AND MACRON (LATIN CAPITAL LETTER O OGONEK MACRON) */ + ["\u01EC", "\u01ED"], /* LATIN SMALL LETTER O WITH OGONEK AND MACRON (LATIN SMALL LETTER O OGONEK MACRON) */ + ["\u01EE", "\u01EF"], /* LATIN CAPITAL LETTER EZH WITH CARON (LATIN CAPITAL LETTER YOGH HACEK) */ + ["\u01EE", "\u01EF"], /* LATIN SMALL LETTER EZH WITH CARON (LATIN SMALL LETTER YOGH HACEK) */ + ["\u004A\u030C", "\u01F0"], /* LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK) */ + ["\u01F1", "\u01F3"], /* LATIN CAPITAL LETTER DZ */ + ["\u01F1", "\u01F3"], /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z */ + ["\u01F1", "\u01F3"], /* LATIN SMALL LETTER DZ */ + ["\u01F4", "\u01F5"], /* LATIN CAPITAL LETTER G WITH ACUTE */ + ["\u01F4", "\u01F5"], /* LATIN SMALL LETTER G WITH ACUTE */ + ["\u01F6", "\u0195"], /* LATIN CAPITAL LETTER HWAIR */ + ["\u01F7", "\u01BF"], /* LATIN CAPITAL LETTER WYNN */ + ["\u01F8", "\u01F9"], /* LATIN CAPITAL LETTER N WITH GRAVE */ + ["\u01F8", "\u01F9"], /* LATIN SMALL LETTER N WITH GRAVE */ + ["\u01FA", "\u01FB"], /* LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */ + ["\u01FA", "\u01FB"], /* LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE */ + ["\u01FC", "\u01FD"], /* LATIN CAPITAL LETTER AE WITH ACUTE */ + ["\u01FC", "\u01FD"], /* LATIN SMALL LETTER AE WITH ACUTE */ + ["\u01FE", "\u01FF"], /* LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */ + ["\u01FE", "\u01FF"], /* LATIN SMALL LETTER O WITH STROKE AND ACUTE */ + ["\u0200", "\u0201"], /* LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */ + ["\u0200", "\u0201"], /* LATIN SMALL LETTER A WITH DOUBLE GRAVE */ + ["\u0202", "\u0203"], /* LATIN CAPITAL LETTER A WITH INVERTED BREVE */ + ["\u0202", "\u0203"], /* LATIN SMALL LETTER A WITH INVERTED BREVE */ + ["\u0204", "\u0205"], /* LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */ + ["\u0204", "\u0205"], /* LATIN SMALL LETTER E WITH DOUBLE GRAVE */ + ["\u0206", "\u0207"], /* LATIN CAPITAL LETTER E WITH INVERTED BREVE */ + ["\u0206", "\u0207"], /* LATIN SMALL LETTER E WITH INVERTED BREVE */ + ["\u0208", "\u0209"], /* LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */ + ["\u0208", "\u0209"], /* LATIN SMALL LETTER I WITH DOUBLE GRAVE */ + ["\u020A", "\u020B"], /* LATIN CAPITAL LETTER I WITH INVERTED BREVE */ + ["\u020A", "\u020B"], /* LATIN SMALL LETTER I WITH INVERTED BREVE */ + ["\u020C", "\u020D"], /* LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */ + ["\u020C", "\u020D"], /* LATIN SMALL LETTER O WITH DOUBLE GRAVE */ + ["\u020E", "\u020F"], /* LATIN CAPITAL LETTER O WITH INVERTED BREVE */ + ["\u020E", "\u020F"], /* LATIN SMALL LETTER O WITH INVERTED BREVE */ + ["\u0210", "\u0211"], /* LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */ + ["\u0210", "\u0211"], /* LATIN SMALL LETTER R WITH DOUBLE GRAVE */ + ["\u0212", "\u0213"], /* LATIN CAPITAL LETTER R WITH INVERTED BREVE */ + ["\u0212", "\u0213"], /* LATIN SMALL LETTER R WITH INVERTED BREVE */ + ["\u0214", "\u0215"], /* LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */ + ["\u0214", "\u0215"], /* LATIN SMALL LETTER U WITH DOUBLE GRAVE */ + ["\u0216", "\u0217"], /* LATIN CAPITAL LETTER U WITH INVERTED BREVE */ + ["\u0216", "\u0217"], /* LATIN SMALL LETTER U WITH INVERTED BREVE */ + ["\u0218", "\u0219"], /* LATIN CAPITAL LETTER S WITH COMMA BELOW */ + ["\u0218", "\u0219"], /* LATIN SMALL LETTER S WITH COMMA BELOW */ + ["\u021A", "\u021B"], /* LATIN CAPITAL LETTER T WITH COMMA BELOW */ + ["\u021A", "\u021B"], /* LATIN SMALL LETTER T WITH COMMA BELOW */ + ["\u021C", "\u021D"], /* LATIN CAPITAL LETTER YOGH */ + ["\u021C", "\u021D"], /* LATIN SMALL LETTER YOGH */ + ["\u021E", "\u021F"], /* LATIN CAPITAL LETTER H WITH CARON */ + ["\u021E", "\u021F"], /* LATIN SMALL LETTER H WITH CARON */ + ["\u0220", "\u019E"], /* LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */ + ["\u0221", "\u0221"], /* LATIN SMALL LETTER D WITH CURL */ + ["\u0222", "\u0223"], /* LATIN CAPITAL LETTER OU */ + ["\u0222", "\u0223"], /* LATIN SMALL LETTER OU */ + ["\u0224", "\u0225"], /* LATIN CAPITAL LETTER Z WITH HOOK */ + ["\u0224", "\u0225"], /* LATIN SMALL LETTER Z WITH HOOK */ + ["\u0226", "\u0227"], /* LATIN CAPITAL LETTER A WITH DOT ABOVE */ + ["\u0226", "\u0227"], /* LATIN SMALL LETTER A WITH DOT ABOVE */ + ["\u0228", "\u0229"], /* LATIN CAPITAL LETTER E WITH CEDILLA */ + ["\u0228", "\u0229"], /* LATIN SMALL LETTER E WITH CEDILLA */ + ["\u022A", "\u022B"], /* LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */ + ["\u022A", "\u022B"], /* LATIN SMALL LETTER O WITH DIAERESIS AND MACRON */ + ["\u022C", "\u022D"], /* LATIN CAPITAL LETTER O WITH TILDE AND MACRON */ + ["\u022C", "\u022D"], /* LATIN SMALL LETTER O WITH TILDE AND MACRON */ + ["\u022E", "\u022F"], /* LATIN CAPITAL LETTER O WITH DOT ABOVE */ + ["\u022E", "\u022F"], /* LATIN SMALL LETTER O WITH DOT ABOVE */ + ["\u0230", "\u0231"], /* LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */ + ["\u0230", "\u0231"], /* LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */ + ["\u0232", "\u0233"], /* LATIN CAPITAL LETTER Y WITH MACRON */ + ["\u0232", "\u0233"], /* LATIN SMALL LETTER Y WITH MACRON */ + ["\u0234", "\u0234"], /* LATIN SMALL LETTER L WITH CURL */ + ["\u0235", "\u0235"], /* LATIN SMALL LETTER N WITH CURL */ + ["\u0236", "\u0236"], /* LATIN SMALL LETTER T WITH CURL */ + ["\u0237", "\u0237"], /* LATIN SMALL LETTER DOTLESS J */ + ["\u0238", "\u0238"], /* LATIN SMALL LETTER DB DIGRAPH */ + ["\u0239", "\u0239"], /* LATIN SMALL LETTER QP DIGRAPH */ + ["\u023A", "\u2C65"], /* LATIN CAPITAL LETTER A WITH STROKE */ + ["\u023B", "\u023C"], /* LATIN CAPITAL LETTER C WITH STROKE */ + ["\u023B", "\u023C"], /* LATIN SMALL LETTER C WITH STROKE */ + ["\u023D", "\u019A"], /* LATIN CAPITAL LETTER L WITH BAR */ + ["\u023E", "\u2C66"], /* LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */ + ["\u2C7E", "\u023F"], /* LATIN SMALL LETTER S WITH SWASH TAIL */ + ["\u2C7F", "\u0240"], /* LATIN SMALL LETTER Z WITH SWASH TAIL */ + ["\u0241", "\u0242"], /* LATIN CAPITAL LETTER GLOTTAL STOP */ + ["\u0241", "\u0242"], /* LATIN SMALL LETTER GLOTTAL STOP */ + ["\u0243", "\u0180"], /* LATIN CAPITAL LETTER B WITH STROKE */ + ["\u0244", "\u0289"], /* LATIN CAPITAL LETTER U BAR */ + ["\u0245", "\u028C"], /* LATIN CAPITAL LETTER TURNED V */ + ["\u0246", "\u0247"], /* LATIN CAPITAL LETTER E WITH STROKE */ + ["\u0246", "\u0247"], /* LATIN SMALL LETTER E WITH STROKE */ + ["\u0248", "\u0249"], /* LATIN CAPITAL LETTER J WITH STROKE */ + ["\u0248", "\u0249"], /* LATIN SMALL LETTER J WITH STROKE */ + ["\u024A", "\u024B"], /* LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */ + ["\u024A", "\u024B"], /* LATIN SMALL LETTER Q WITH HOOK TAIL */ + ["\u024C", "\u024D"], /* LATIN CAPITAL LETTER R WITH STROKE */ + ["\u024C", "\u024D"], /* LATIN SMALL LETTER R WITH STROKE */ + ["\u024E", "\u024F"], /* LATIN CAPITAL LETTER Y WITH STROKE */ + ["\u024E", "\u024F"], /* LATIN SMALL LETTER Y WITH STROKE */ + ["\u2C6F", "\u0250"], /* LATIN SMALL LETTER TURNED A */ + ["\u2C6D", "\u0251"], /* LATIN SMALL LETTER ALPHA (LATIN SMALL LETTER SCRIPT A) */ + ["\u2C70", "\u0252"], /* LATIN SMALL LETTER TURNED ALPHA (LATIN SMALL LETTER TURNED SCRIPT A) */ + ["\u0181", "\u0253"], /* LATIN SMALL LETTER B WITH HOOK (LATIN SMALL LETTER B HOOK) */ + ["\u0186", "\u0254"], /* LATIN SMALL LETTER OPEN O */ + ["\u0255", "\u0255"], /* LATIN SMALL LETTER C WITH CURL (LATIN SMALL LETTER C CURL) */ + ["\u0189", "\u0256"], /* LATIN SMALL LETTER D WITH TAIL (LATIN SMALL LETTER D RETROFLEX HOOK) */ + ["\u018A", "\u0257"], /* LATIN SMALL LETTER D WITH HOOK (LATIN SMALL LETTER D HOOK) */ + ["\u0258", "\u0258"], /* LATIN SMALL LETTER REVERSED E */ + ["\u018F", "\u0259"], /* LATIN SMALL LETTER SCHWA */ + ["\u025A", "\u025A"], /* LATIN SMALL LETTER SCHWA WITH HOOK (LATIN SMALL LETTER SCHWA HOOK) */ + ["\u0190", "\u025B"], /* LATIN SMALL LETTER OPEN E (LATIN SMALL LETTER EPSILON) */ + ["\uA7AB", "\u025C"], /* LATIN SMALL LETTER REVERSED OPEN E (LATIN SMALL LETTER REVERSED EPSILON) */ + ["\u025D", "\u025D"], /* LATIN SMALL LETTER REVERSED OPEN E WITH HOOK (LATIN SMALL LETTER REVERSED EPSILON HOOK) */ + ["\u025E", "\u025E"], /* LATIN SMALL LETTER CLOSED REVERSED OPEN E (LATIN SMALL LETTER CLOSED REVERSED EPSILON) */ + ["\u025F", "\u025F"], /* LATIN SMALL LETTER DOTLESS J WITH STROKE (LATIN SMALL LETTER DOTLESS J BAR) */ + ["\u0193", "\u0260"], /* LATIN SMALL LETTER G WITH HOOK (LATIN SMALL LETTER G HOOK) */ + ["\uA7AC", "\u0261"], /* LATIN SMALL LETTER SCRIPT G */ + ["\u0262", "\u0262"], /* LATIN LETTER SMALL CAPITAL G */ + ["\u0194", "\u0263"], /* LATIN SMALL LETTER GAMMA */ + ["\u0264", "\u0264"], /* LATIN SMALL LETTER RAMS HORN (LATIN SMALL LETTER BABY GAMMA) */ + ["\uA78D", "\u0265"], /* LATIN SMALL LETTER TURNED H */ + ["\uA7AA", "\u0266"], /* LATIN SMALL LETTER H WITH HOOK (LATIN SMALL LETTER H HOOK) */ + ["\u0267", "\u0267"], /* LATIN SMALL LETTER HENG WITH HOOK (LATIN SMALL LETTER HENG HOOK) */ + ["\u0197", "\u0268"], /* LATIN SMALL LETTER I WITH STROKE (LATIN SMALL LETTER BARRED I) */ + ["\u0196", "\u0269"], /* LATIN SMALL LETTER IOTA */ + ["\uA7AE", "\u026A"], /* LATIN LETTER SMALL CAPITAL I */ + ["\u2C62", "\u026B"], /* LATIN SMALL LETTER L WITH MIDDLE TILDE */ + ["\uA7AD", "\u026C"], /* LATIN SMALL LETTER L WITH BELT (LATIN SMALL LETTER L BELT) */ + ["\u026D", "\u026D"], /* LATIN SMALL LETTER L WITH RETROFLEX HOOK (LATIN SMALL LETTER L RETROFLEX HOOK) */ + ["\u026E", "\u026E"], /* LATIN SMALL LETTER LEZH (LATIN SMALL LETTER L YOGH) */ + ["\u019C", "\u026F"], /* LATIN SMALL LETTER TURNED M */ + ["\u0270", "\u0270"], /* LATIN SMALL LETTER TURNED M WITH LONG LEG */ + ["\u2C6E", "\u0271"], /* LATIN SMALL LETTER M WITH HOOK (LATIN SMALL LETTER M HOOK) */ + ["\u019D", "\u0272"], /* LATIN SMALL LETTER N WITH LEFT HOOK (LATIN SMALL LETTER N HOOK) */ + ["\u0273", "\u0273"], /* LATIN SMALL LETTER N WITH RETROFLEX HOOK (LATIN SMALL LETTER N RETROFLEX HOOK) */ + ["\u0274", "\u0274"], /* LATIN LETTER SMALL CAPITAL N */ + ["\u019F", "\u0275"], /* LATIN SMALL LETTER BARRED O */ + ["\u0276", "\u0276"], /* LATIN LETTER SMALL CAPITAL OE (LATIN LETTER SMALL CAPITAL O E) */ + ["\u0277", "\u0277"], /* LATIN SMALL LETTER CLOSED OMEGA */ + ["\u0278", "\u0278"], /* LATIN SMALL LETTER PHI */ + ["\u0279", "\u0279"], /* LATIN SMALL LETTER TURNED R */ + ["\u027A", "\u027A"], /* LATIN SMALL LETTER TURNED R WITH LONG LEG */ + ["\u027B", "\u027B"], /* LATIN SMALL LETTER TURNED R WITH HOOK (LATIN SMALL LETTER TURNED R HOOK) */ + ["\u027C", "\u027C"], /* LATIN SMALL LETTER R WITH LONG LEG */ + ["\u2C64", "\u027D"], /* LATIN SMALL LETTER R WITH TAIL (LATIN SMALL LETTER R HOOK) */ + ["\u027E", "\u027E"], /* LATIN SMALL LETTER R WITH FISHHOOK (LATIN SMALL LETTER FISHHOOK R) */ + ["\u027F", "\u027F"], /* LATIN SMALL LETTER REVERSED R WITH FISHHOOK (LATIN SMALL LETTER REVERSED FISHHOOK R) */ + ["\u01A6", "\u0280"], /* LATIN LETTER SMALL CAPITAL R */ + ["\u0281", "\u0281"], /* LATIN LETTER SMALL CAPITAL INVERTED R */ + ["\uA7C5", "\u0282"], /* LATIN SMALL LETTER S WITH HOOK (LATIN SMALL LETTER S HOOK) */ + ["\u01A9", "\u0283"], /* LATIN SMALL LETTER ESH */ + ["\u0284", "\u0284"], /* LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK (LATIN SMALL LETTER DOTLESS J BAR HOOK) */ + ["\u0285", "\u0285"], /* LATIN SMALL LETTER SQUAT REVERSED ESH */ + ["\u0286", "\u0286"], /* LATIN SMALL LETTER ESH WITH CURL (LATIN SMALL LETTER ESH CURL) */ + ["\uA7B1", "\u0287"], /* LATIN SMALL LETTER TURNED T */ + ["\u01AE", "\u0288"], /* LATIN SMALL LETTER T WITH RETROFLEX HOOK (LATIN SMALL LETTER T RETROFLEX HOOK) */ + ["\u0244", "\u0289"], /* LATIN SMALL LETTER U BAR */ + ["\u01B1", "\u028A"], /* LATIN SMALL LETTER UPSILON */ + ["\u01B2", "\u028B"], /* LATIN SMALL LETTER V WITH HOOK (LATIN SMALL LETTER SCRIPT V) */ + ["\u0245", "\u028C"], /* LATIN SMALL LETTER TURNED V */ + ["\u028D", "\u028D"], /* LATIN SMALL LETTER TURNED W */ + ["\u028E", "\u028E"], /* LATIN SMALL LETTER TURNED Y */ + ["\u028F", "\u028F"], /* LATIN LETTER SMALL CAPITAL Y */ + ["\u0290", "\u0290"], /* LATIN SMALL LETTER Z WITH RETROFLEX HOOK (LATIN SMALL LETTER Z RETROFLEX HOOK) */ + ["\u0291", "\u0291"], /* LATIN SMALL LETTER Z WITH CURL (LATIN SMALL LETTER Z CURL) */ + ["\u01B7", "\u0292"], /* LATIN SMALL LETTER EZH (LATIN SMALL LETTER YOGH) */ + ["\u0293", "\u0293"], /* LATIN SMALL LETTER EZH WITH CURL (LATIN SMALL LETTER YOGH CURL) */ + ["\u0294", "\u0294"], /* LATIN LETTER GLOTTAL STOP */ + ["\u0295", "\u0295"], /* LATIN LETTER PHARYNGEAL VOICED FRICATIVE (LATIN LETTER REVERSED GLOTTAL STOP) */ + ["\u0296", "\u0296"], /* LATIN LETTER INVERTED GLOTTAL STOP */ + ["\u0297", "\u0297"], /* LATIN LETTER STRETCHED C */ + ["\u0298", "\u0298"], /* LATIN LETTER BILABIAL CLICK (LATIN LETTER BULLSEYE) */ + ["\u0299", "\u0299"], /* LATIN LETTER SMALL CAPITAL B */ + ["\u029A", "\u029A"], /* LATIN SMALL LETTER CLOSED OPEN E (LATIN SMALL LETTER CLOSED EPSILON) */ + ["\u029B", "\u029B"], /* LATIN LETTER SMALL CAPITAL G WITH HOOK (LATIN LETTER SMALL CAPITAL G HOOK) */ + ["\u029C", "\u029C"], /* LATIN LETTER SMALL CAPITAL H */ + ["\uA7B2", "\u029D"], /* LATIN SMALL LETTER J WITH CROSSED-TAIL (LATIN SMALL LETTER CROSSED-TAIL J) */ + ["\uA7B0", "\u029E"], /* LATIN SMALL LETTER TURNED K */ + ["\u029F", "\u029F"], /* LATIN LETTER SMALL CAPITAL L */ + ["\u02A0", "\u02A0"], /* LATIN SMALL LETTER Q WITH HOOK (LATIN SMALL LETTER Q HOOK) */ + ["\u02A1", "\u02A1"], /* LATIN LETTER GLOTTAL STOP WITH STROKE (LATIN LETTER GLOTTAL STOP BAR) */ + ["\u02A2", "\u02A2"], /* LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE (LATIN LETTER REVERSED GLOTTAL STOP BAR) */ + ["\u02A3", "\u02A3"], /* LATIN SMALL LETTER DZ DIGRAPH (LATIN SMALL LETTER D Z) */ + ["\u02A4", "\u02A4"], /* LATIN SMALL LETTER DEZH DIGRAPH (LATIN SMALL LETTER D YOGH) */ + ["\u02A5", "\u02A5"], /* LATIN SMALL LETTER DZ DIGRAPH WITH CURL (LATIN SMALL LETTER D Z CURL) */ + ["\u02A6", "\u02A6"], /* LATIN SMALL LETTER TS DIGRAPH (LATIN SMALL LETTER T S) */ + ["\u02A7", "\u02A7"], /* LATIN SMALL LETTER TESH DIGRAPH (LATIN SMALL LETTER T ESH) */ + ["\u02A8", "\u02A8"], /* LATIN SMALL LETTER TC DIGRAPH WITH CURL (LATIN SMALL LETTER T C CURL) */ + ["\u02A9", "\u02A9"], /* LATIN SMALL LETTER FENG DIGRAPH */ + ["\u02AA", "\u02AA"], /* LATIN SMALL LETTER LS DIGRAPH */ + ["\u02AB", "\u02AB"], /* LATIN SMALL LETTER LZ DIGRAPH */ + ["\u02AC", "\u02AC"], /* LATIN LETTER BILABIAL PERCUSSIVE */ + ["\u02AD", "\u02AD"], /* LATIN LETTER BIDENTAL PERCUSSIVE */ + ["\u02AE", "\u02AE"], /* LATIN SMALL LETTER TURNED H WITH FISHHOOK */ + ["\u02AF", "\u02AF"], /* LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL */ + ["\u02B0", "\u02B0"], /* MODIFIER LETTER SMALL H */ + ["\u02B1", "\u02B1"], /* MODIFIER LETTER SMALL H WITH HOOK (MODIFIER LETTER SMALL H HOOK) */ + ["\u02B2", "\u02B2"], /* MODIFIER LETTER SMALL J */ + ["\u02B3", "\u02B3"], /* MODIFIER LETTER SMALL R */ + ["\u02B4", "\u02B4"], /* MODIFIER LETTER SMALL TURNED R */ + ["\u02B5", "\u02B5"], /* MODIFIER LETTER SMALL TURNED R WITH HOOK (MODIFIER LETTER SMALL TURNED R HOOK) */ + ["\u02B6", "\u02B6"], /* MODIFIER LETTER SMALL CAPITAL INVERTED R */ + ["\u02B7", "\u02B7"], /* MODIFIER LETTER SMALL W */ + ["\u02B8", "\u02B8"], /* MODIFIER LETTER SMALL Y */ + ["\u02B9", "\u02B9"], /* MODIFIER LETTER PRIME */ + ["\u02BA", "\u02BA"], /* MODIFIER LETTER DOUBLE PRIME */ + ["\u02BB", "\u02BB"], /* MODIFIER LETTER TURNED COMMA */ + ["\u02BC", "\u02BC"], /* MODIFIER LETTER APOSTROPHE */ + ["\u02BD", "\u02BD"], /* MODIFIER LETTER REVERSED COMMA */ + ["\u02BE", "\u02BE"], /* MODIFIER LETTER RIGHT HALF RING */ + ["\u02BF", "\u02BF"], /* MODIFIER LETTER LEFT HALF RING */ + ["\u02C0", "\u02C0"], /* MODIFIER LETTER GLOTTAL STOP */ + ["\u02C1", "\u02C1"], /* MODIFIER LETTER REVERSED GLOTTAL STOP */ + ["\u02C2", "\u02C2"], /* MODIFIER LETTER LEFT ARROWHEAD */ + ["\u02C3", "\u02C3"], /* MODIFIER LETTER RIGHT ARROWHEAD */ + ["\u02C4", "\u02C4"], /* MODIFIER LETTER UP ARROWHEAD */ + ["\u02C5", "\u02C5"], /* MODIFIER LETTER DOWN ARROWHEAD */ + ["\u02C6", "\u02C6"], /* MODIFIER LETTER CIRCUMFLEX ACCENT (MODIFIER LETTER CIRCUMFLEX) */ + ["\u02C7", "\u02C7"], /* CARON (MODIFIER LETTER HACEK) */ + ["\u02C8", "\u02C8"], /* MODIFIER LETTER VERTICAL LINE */ + ["\u02C9", "\u02C9"], /* MODIFIER LETTER MACRON */ + ["\u02CA", "\u02CA"], /* MODIFIER LETTER ACUTE ACCENT (MODIFIER LETTER ACUTE) */ + ["\u02CB", "\u02CB"], /* MODIFIER LETTER GRAVE ACCENT (MODIFIER LETTER GRAVE) */ + ["\u02CC", "\u02CC"], /* MODIFIER LETTER LOW VERTICAL LINE */ + ["\u02CD", "\u02CD"], /* MODIFIER LETTER LOW MACRON */ + ["\u02CE", "\u02CE"], /* MODIFIER LETTER LOW GRAVE ACCENT (MODIFIER LETTER LOW GRAVE) */ + ["\u02CF", "\u02CF"], /* MODIFIER LETTER LOW ACUTE ACCENT (MODIFIER LETTER LOW ACUTE) */ + ["\u02D0", "\u02D0"], /* MODIFIER LETTER TRIANGULAR COLON */ + ["\u02D1", "\u02D1"], /* MODIFIER LETTER HALF TRIANGULAR COLON */ + ["\u02D2", "\u02D2"], /* MODIFIER LETTER CENTRED RIGHT HALF RING (MODIFIER LETTER CENTERED RIGHT HALF RING) */ + ["\u02D3", "\u02D3"], /* MODIFIER LETTER CENTRED LEFT HALF RING (MODIFIER LETTER CENTERED LEFT HALF RING) */ + ["\u02D4", "\u02D4"], /* MODIFIER LETTER UP TACK */ + ["\u02D5", "\u02D5"], /* MODIFIER LETTER DOWN TACK */ + ["\u02D6", "\u02D6"], /* MODIFIER LETTER PLUS SIGN */ + ["\u02D7", "\u02D7"], /* MODIFIER LETTER MINUS SIGN */ + ["\u02D8", "\u02D8"], /* BREVE (SPACING BREVE) */ + ["\u02D9", "\u02D9"], /* DOT ABOVE (SPACING DOT ABOVE) */ + ["\u02DA", "\u02DA"], /* RING ABOVE (SPACING RING ABOVE) */ + ["\u02DB", "\u02DB"], /* OGONEK (SPACING OGONEK) */ + ["\u02DC", "\u02DC"], /* SMALL TILDE (SPACING TILDE) */ + ["\u02DD", "\u02DD"], /* DOUBLE ACUTE ACCENT (SPACING DOUBLE ACUTE) */ + ["\u02DE", "\u02DE"], /* MODIFIER LETTER RHOTIC HOOK */ + ["\u02DF", "\u02DF"], /* MODIFIER LETTER CROSS ACCENT */ + ["\u02E0", "\u02E0"], /* MODIFIER LETTER SMALL GAMMA */ + ["\u02E1", "\u02E1"], /* MODIFIER LETTER SMALL L */ + ["\u02E2", "\u02E2"], /* MODIFIER LETTER SMALL S */ + ["\u02E3", "\u02E3"], /* MODIFIER LETTER SMALL X */ + ["\u02E4", "\u02E4"], /* MODIFIER LETTER SMALL REVERSED GLOTTAL STOP */ + ["\u02E5", "\u02E5"], /* MODIFIER LETTER EXTRA-HIGH TONE BAR */ + ["\u02E6", "\u02E6"], /* MODIFIER LETTER HIGH TONE BAR */ + ["\u02E7", "\u02E7"], /* MODIFIER LETTER MID TONE BAR */ + ["\u02E8", "\u02E8"], /* MODIFIER LETTER LOW TONE BAR */ + ["\u02E9", "\u02E9"], /* MODIFIER LETTER EXTRA-LOW TONE BAR */ + ["\u02EA", "\u02EA"], /* MODIFIER LETTER YIN DEPARTING TONE MARK */ + ["\u02EB", "\u02EB"], /* MODIFIER LETTER YANG DEPARTING TONE MARK */ + ["\u02EC", "\u02EC"], /* MODIFIER LETTER VOICING */ + ["\u02ED", "\u02ED"], /* MODIFIER LETTER UNASPIRATED */ + ["\u02EE", "\u02EE"], /* MODIFIER LETTER DOUBLE APOSTROPHE */ + ["\u02EF", "\u02EF"], /* MODIFIER LETTER LOW DOWN ARROWHEAD */ + ["\u02F0", "\u02F0"], /* MODIFIER LETTER LOW UP ARROWHEAD */ + ["\u02F1", "\u02F1"], /* MODIFIER LETTER LOW LEFT ARROWHEAD */ + ["\u02F2", "\u02F2"], /* MODIFIER LETTER LOW RIGHT ARROWHEAD */ + ["\u02F3", "\u02F3"], /* MODIFIER LETTER LOW RING */ + ["\u02F4", "\u02F4"], /* MODIFIER LETTER MIDDLE GRAVE ACCENT */ + ["\u02F5", "\u02F5"], /* MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT */ + ["\u02F6", "\u02F6"], /* MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT */ + ["\u02F7", "\u02F7"], /* MODIFIER LETTER LOW TILDE */ + ["\u02F8", "\u02F8"], /* MODIFIER LETTER RAISED COLON */ + ["\u02F9", "\u02F9"], /* MODIFIER LETTER BEGIN HIGH TONE */ + ["\u02FA", "\u02FA"], /* MODIFIER LETTER END HIGH TONE */ + ["\u02FB", "\u02FB"], /* MODIFIER LETTER BEGIN LOW TONE */ + ["\u02FC", "\u02FC"], /* MODIFIER LETTER END LOW TONE */ + ["\u02FD", "\u02FD"], /* MODIFIER LETTER SHELF */ + ["\u02FE", "\u02FE"], /* MODIFIER LETTER OPEN SHELF */ + ["\u02FF", "\u02FF"], /* MODIFIER LETTER LOW LEFT ARROW */ + ["\u0300", "\u0300"], /* COMBINING GRAVE ACCENT (NON-SPACING GRAVE) */ + ["\u0301", "\u0301"], /* COMBINING ACUTE ACCENT (NON-SPACING ACUTE) */ + ["\u0302", "\u0302"], /* COMBINING CIRCUMFLEX ACCENT (NON-SPACING CIRCUMFLEX) */ + ["\u0303", "\u0303"], /* COMBINING TILDE (NON-SPACING TILDE) */ + ["\u0304", "\u0304"], /* COMBINING MACRON (NON-SPACING MACRON) */ + ["\u0305", "\u0305"], /* COMBINING OVERLINE (NON-SPACING OVERSCORE) */ + ["\u0306", "\u0306"], /* COMBINING BREVE (NON-SPACING BREVE) */ + ["\u0307", "\u0307"], /* COMBINING DOT ABOVE (NON-SPACING DOT ABOVE) */ + ["\u0308", "\u0308"], /* COMBINING DIAERESIS (NON-SPACING DIAERESIS) */ + ["\u0309", "\u0309"], /* COMBINING HOOK ABOVE (NON-SPACING HOOK ABOVE) */ + ["\u030A", "\u030A"], /* COMBINING RING ABOVE (NON-SPACING RING ABOVE) */ + ["\u030B", "\u030B"], /* COMBINING DOUBLE ACUTE ACCENT (NON-SPACING DOUBLE ACUTE) */ + ["\u030C", "\u030C"], /* COMBINING CARON (NON-SPACING HACEK) */ + ["\u030D", "\u030D"], /* COMBINING VERTICAL LINE ABOVE (NON-SPACING VERTICAL LINE ABOVE) */ + ["\u030E", "\u030E"], /* COMBINING DOUBLE VERTICAL LINE ABOVE (NON-SPACING DOUBLE VERTICAL LINE ABOVE) */ + ["\u030F", "\u030F"], /* COMBINING DOUBLE GRAVE ACCENT (NON-SPACING DOUBLE GRAVE) */ + ["\u0310", "\u0310"], /* COMBINING CANDRABINDU (NON-SPACING CANDRABINDU) */ + ["\u0311", "\u0311"], /* COMBINING INVERTED BREVE (NON-SPACING INVERTED BREVE) */ + ["\u0312", "\u0312"], /* COMBINING TURNED COMMA ABOVE (NON-SPACING TURNED COMMA ABOVE) */ + ["\u0313", "\u0313"], /* COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) */ + ["\u0314", "\u0314"], /* COMBINING REVERSED COMMA ABOVE (NON-SPACING REVERSED COMMA ABOVE) */ + ["\u0315", "\u0315"], /* COMBINING COMMA ABOVE RIGHT (NON-SPACING COMMA ABOVE RIGHT) */ + ["\u0316", "\u0316"], /* COMBINING GRAVE ACCENT BELOW (NON-SPACING GRAVE BELOW) */ + ["\u0317", "\u0317"], /* COMBINING ACUTE ACCENT BELOW (NON-SPACING ACUTE BELOW) */ + ["\u0318", "\u0318"], /* COMBINING LEFT TACK BELOW (NON-SPACING LEFT TACK BELOW) */ + ["\u0319", "\u0319"], /* COMBINING RIGHT TACK BELOW (NON-SPACING RIGHT TACK BELOW) */ + ["\u031A", "\u031A"], /* COMBINING LEFT ANGLE ABOVE (NON-SPACING LEFT ANGLE ABOVE) */ + ["\u031B", "\u031B"], /* COMBINING HORN (NON-SPACING HORN) */ + ["\u031C", "\u031C"], /* COMBINING LEFT HALF RING BELOW (NON-SPACING LEFT HALF RING BELOW) */ + ["\u031D", "\u031D"], /* COMBINING UP TACK BELOW (NON-SPACING UP TACK BELOW) */ + ["\u031E", "\u031E"], /* COMBINING DOWN TACK BELOW (NON-SPACING DOWN TACK BELOW) */ + ["\u031F", "\u031F"], /* COMBINING PLUS SIGN BELOW (NON-SPACING PLUS SIGN BELOW) */ + ["\u0320", "\u0320"], /* COMBINING MINUS SIGN BELOW (NON-SPACING MINUS SIGN BELOW) */ + ["\u0321", "\u0321"], /* COMBINING PALATALIZED HOOK BELOW (NON-SPACING PALATALIZED HOOK BELOW) */ + ["\u0322", "\u0322"], /* COMBINING RETROFLEX HOOK BELOW (NON-SPACING RETROFLEX HOOK BELOW) */ + ["\u0323", "\u0323"], /* COMBINING DOT BELOW (NON-SPACING DOT BELOW) */ + ["\u0324", "\u0324"], /* COMBINING DIAERESIS BELOW (NON-SPACING DOUBLE DOT BELOW) */ + ["\u0325", "\u0325"], /* COMBINING RING BELOW (NON-SPACING RING BELOW) */ + ["\u0326", "\u0326"], /* COMBINING COMMA BELOW (NON-SPACING COMMA BELOW) */ + ["\u0327", "\u0327"], /* COMBINING CEDILLA (NON-SPACING CEDILLA) */ + ["\u0328", "\u0328"], /* COMBINING OGONEK (NON-SPACING OGONEK) */ + ["\u0329", "\u0329"], /* COMBINING VERTICAL LINE BELOW (NON-SPACING VERTICAL LINE BELOW) */ + ["\u032A", "\u032A"], /* COMBINING BRIDGE BELOW (NON-SPACING BRIDGE BELOW) */ + ["\u032B", "\u032B"], /* COMBINING INVERTED DOUBLE ARCH BELOW (NON-SPACING INVERTED DOUBLE ARCH BELOW) */ + ["\u032C", "\u032C"], /* COMBINING CARON BELOW (NON-SPACING HACEK BELOW) */ + ["\u032D", "\u032D"], /* COMBINING CIRCUMFLEX ACCENT BELOW (NON-SPACING CIRCUMFLEX BELOW) */ + ["\u032E", "\u032E"], /* COMBINING BREVE BELOW (NON-SPACING BREVE BELOW) */ + ["\u032F", "\u032F"], /* COMBINING INVERTED BREVE BELOW (NON-SPACING INVERTED BREVE BELOW) */ + ["\u0330", "\u0330"], /* COMBINING TILDE BELOW (NON-SPACING TILDE BELOW) */ + ["\u0331", "\u0331"], /* COMBINING MACRON BELOW (NON-SPACING MACRON BELOW) */ + ["\u0332", "\u0332"], /* COMBINING LOW LINE (NON-SPACING UNDERSCORE) */ + ["\u0333", "\u0333"], /* COMBINING DOUBLE LOW LINE (NON-SPACING DOUBLE UNDERSCORE) */ + ["\u0334", "\u0334"], /* COMBINING TILDE OVERLAY (NON-SPACING TILDE OVERLAY) */ + ["\u0335", "\u0335"], /* COMBINING SHORT STROKE OVERLAY (NON-SPACING SHORT BAR OVERLAY) */ + ["\u0336", "\u0336"], /* COMBINING LONG STROKE OVERLAY (NON-SPACING LONG BAR OVERLAY) */ + ["\u0337", "\u0337"], /* COMBINING SHORT SOLIDUS OVERLAY (NON-SPACING SHORT SLASH OVERLAY) */ + ["\u0338", "\u0338"], /* COMBINING LONG SOLIDUS OVERLAY (NON-SPACING LONG SLASH OVERLAY) */ + ["\u0339", "\u0339"], /* COMBINING RIGHT HALF RING BELOW (NON-SPACING RIGHT HALF RING BELOW) */ + ["\u033A", "\u033A"], /* COMBINING INVERTED BRIDGE BELOW (NON-SPACING INVERTED BRIDGE BELOW) */ + ["\u033B", "\u033B"], /* COMBINING SQUARE BELOW (NON-SPACING SQUARE BELOW) */ + ["\u033C", "\u033C"], /* COMBINING SEAGULL BELOW (NON-SPACING SEAGULL BELOW) */ + ["\u033D", "\u033D"], /* COMBINING X ABOVE (NON-SPACING X ABOVE) */ + ["\u033E", "\u033E"], /* COMBINING VERTICAL TILDE (NON-SPACING VERTICAL TILDE) */ + ["\u033F", "\u033F"], /* COMBINING DOUBLE OVERLINE (NON-SPACING DOUBLE OVERSCORE) */ + ["\u0340", "\u0340"], /* COMBINING GRAVE TONE MARK (NON-SPACING GRAVE TONE MARK) */ + ["\u0341", "\u0341"], /* COMBINING ACUTE TONE MARK (NON-SPACING ACUTE TONE MARK) */ + ["\u0342", "\u0342"], /* COMBINING GREEK PERISPOMENI */ + ["\u0343", "\u0343"], /* COMBINING GREEK KORONIS */ + ["\u0344", "\u0344"], /* COMBINING GREEK DIALYTIKA TONOS (GREEK NON-SPACING DIAERESIS TONOS) */ + ["\u0399", "\u0345"], /* COMBINING GREEK YPOGEGRAMMENI (GREEK NON-SPACING IOTA BELOW) */ + ["\u0346", "\u0346"], /* COMBINING BRIDGE ABOVE */ + ["\u0347", "\u0347"], /* COMBINING EQUALS SIGN BELOW */ + ["\u0348", "\u0348"], /* COMBINING DOUBLE VERTICAL LINE BELOW */ + ["\u0349", "\u0349"], /* COMBINING LEFT ANGLE BELOW */ + ["\u034A", "\u034A"], /* COMBINING NOT TILDE ABOVE */ + ["\u034B", "\u034B"], /* COMBINING HOMOTHETIC ABOVE */ + ["\u034C", "\u034C"], /* COMBINING ALMOST EQUAL TO ABOVE */ + ["\u034D", "\u034D"], /* COMBINING LEFT RIGHT ARROW BELOW */ + ["\u034E", "\u034E"], /* COMBINING UPWARDS ARROW BELOW */ + ["\u034F", "\u034F"], /* COMBINING GRAPHEME JOINER */ + ["\u0350", "\u0350"], /* COMBINING RIGHT ARROWHEAD ABOVE */ + ["\u0351", "\u0351"], /* COMBINING LEFT HALF RING ABOVE */ + ["\u0352", "\u0352"], /* COMBINING FERMATA */ + ["\u0353", "\u0353"], /* COMBINING X BELOW */ + ["\u0354", "\u0354"], /* COMBINING LEFT ARROWHEAD BELOW */ + ["\u0355", "\u0355"], /* COMBINING RIGHT ARROWHEAD BELOW */ + ["\u0356", "\u0356"], /* COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW */ + ["\u0357", "\u0357"], /* COMBINING RIGHT HALF RING ABOVE */ + ["\u0358", "\u0358"], /* COMBINING DOT ABOVE RIGHT */ + ["\u0359", "\u0359"], /* COMBINING ASTERISK BELOW */ + ["\u035A", "\u035A"], /* COMBINING DOUBLE RING BELOW */ + ["\u035B", "\u035B"], /* COMBINING ZIGZAG ABOVE */ + ["\u035C", "\u035C"], /* COMBINING DOUBLE BREVE BELOW */ + ["\u035D", "\u035D"], /* COMBINING DOUBLE BREVE */ + ["\u035E", "\u035E"], /* COMBINING DOUBLE MACRON */ + ["\u035F", "\u035F"], /* COMBINING DOUBLE MACRON BELOW */ + ["\u0360", "\u0360"], /* COMBINING DOUBLE TILDE */ + ["\u0361", "\u0361"], /* COMBINING DOUBLE INVERTED BREVE */ + ["\u0362", "\u0362"], /* COMBINING DOUBLE RIGHTWARDS ARROW BELOW */ + ["\u0363", "\u0363"], /* COMBINING LATIN SMALL LETTER A */ + ["\u0364", "\u0364"], /* COMBINING LATIN SMALL LETTER E */ + ["\u0365", "\u0365"], /* COMBINING LATIN SMALL LETTER I */ + ["\u0366", "\u0366"], /* COMBINING LATIN SMALL LETTER O */ + ["\u0367", "\u0367"], /* COMBINING LATIN SMALL LETTER U */ + ["\u0368", "\u0368"], /* COMBINING LATIN SMALL LETTER C */ + ["\u0369", "\u0369"], /* COMBINING LATIN SMALL LETTER D */ + ["\u036A", "\u036A"], /* COMBINING LATIN SMALL LETTER H */ + ["\u036B", "\u036B"], /* COMBINING LATIN SMALL LETTER M */ + ["\u036C", "\u036C"], /* COMBINING LATIN SMALL LETTER R */ + ["\u036D", "\u036D"], /* COMBINING LATIN SMALL LETTER T */ + ["\u036E", "\u036E"], /* COMBINING LATIN SMALL LETTER V */ + ["\u036F", "\u036F"], /* COMBINING LATIN SMALL LETTER X */ + ["\u0370", "\u0371"], /* GREEK CAPITAL LETTER HETA */ + ["\u0370", "\u0371"], /* GREEK SMALL LETTER HETA */ + ["\u0372", "\u0373"], /* GREEK CAPITAL LETTER ARCHAIC SAMPI */ + ["\u0372", "\u0373"], /* GREEK SMALL LETTER ARCHAIC SAMPI */ + ["\u0374", "\u0374"], /* GREEK NUMERAL SIGN (GREEK UPPER NUMERAL SIGN) */ + ["\u0375", "\u0375"], /* GREEK LOWER NUMERAL SIGN */ + ["\u0376", "\u0377"], /* GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */ + ["\u0376", "\u0377"], /* GREEK SMALL LETTER PAMPHYLIAN DIGAMMA */ + ["\u0378", "\u0378"], + ["\u0379", "\u0379"], + ["\u037A", "\u037A"], /* GREEK YPOGEGRAMMENI (GREEK SPACING IOTA BELOW) */ + ["\u03FD", "\u037B"], /* GREEK SMALL REVERSED LUNATE SIGMA SYMBOL */ + ["\u03FE", "\u037C"], /* GREEK SMALL DOTTED LUNATE SIGMA SYMBOL */ + ["\u03FF", "\u037D"], /* GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL */ + ["\u037E", "\u037E"], /* GREEK QUESTION MARK */ + ["\u037F", "\u03F3"], /* GREEK CAPITAL LETTER YOT */ + ["\u0380", "\u0380"], + ["\u0381", "\u0381"], + ["\u0382", "\u0382"], + ["\u0383", "\u0383"], + ["\u0384", "\u0384"], /* GREEK TONOS (GREEK SPACING TONOS) */ + ["\u0385", "\u0385"], /* GREEK DIALYTIKA TONOS (GREEK SPACING DIAERESIS TONOS) */ + ["\u0386", "\u03AC"], /* GREEK CAPITAL LETTER ALPHA WITH TONOS (GREEK CAPITAL LETTER ALPHA TONOS) */ + ["\u0387", "\u0387"], /* GREEK ANO TELEIA */ + ["\u0388", "\u03AD"], /* GREEK CAPITAL LETTER EPSILON WITH TONOS (GREEK CAPITAL LETTER EPSILON TONOS) */ + ["\u0389", "\u03AE"], /* GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS) */ + ["\u038A", "\u03AF"], /* GREEK CAPITAL LETTER IOTA WITH TONOS (GREEK CAPITAL LETTER IOTA TONOS) */ + ["\u038B", "\u038B"], + ["\u038C", "\u03CC"], /* GREEK CAPITAL LETTER OMICRON WITH TONOS (GREEK CAPITAL LETTER OMICRON TONOS) */ + ["\u038D", "\u038D"], + ["\u038E", "\u03CD"], /* GREEK CAPITAL LETTER UPSILON WITH TONOS (GREEK CAPITAL LETTER UPSILON TONOS) */ + ["\u038F", "\u03CE"], /* GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS) */ + ["\u0399\u0308\u0301", "\u0390"], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS) */ + ["\u0391", "\u03B1"], /* GREEK CAPITAL LETTER ALPHA */ + ["\u0392", "\u03B2"], /* GREEK CAPITAL LETTER BETA */ + ["\u0393", "\u03B3"], /* GREEK CAPITAL LETTER GAMMA */ + ["\u0394", "\u03B4"], /* GREEK CAPITAL LETTER DELTA */ + ["\u0395", "\u03B5"], /* GREEK CAPITAL LETTER EPSILON */ + ["\u0396", "\u03B6"], /* GREEK CAPITAL LETTER ZETA */ + ["\u0397", "\u03B7"], /* GREEK CAPITAL LETTER ETA */ + ["\u0398", "\u03B8"], /* GREEK CAPITAL LETTER THETA */ + ["\u0399", "\u03B9"], /* GREEK CAPITAL LETTER IOTA */ + ["\u039A", "\u03BA"], /* GREEK CAPITAL LETTER KAPPA */ + ["\u039B", "\u03BB"], /* GREEK CAPITAL LETTER LAMDA (GREEK CAPITAL LETTER LAMBDA) */ + ["\u039C", "\u03BC"], /* GREEK CAPITAL LETTER MU */ + ["\u039D", "\u03BD"], /* GREEK CAPITAL LETTER NU */ + ["\u039E", "\u03BE"], /* GREEK CAPITAL LETTER XI */ + ["\u039F", "\u03BF"], /* GREEK CAPITAL LETTER OMICRON */ + ["\u03A0", "\u03C0"], /* GREEK CAPITAL LETTER PI */ + ["\u03A1", "\u03C1"], /* GREEK CAPITAL LETTER RHO */ + ["\u03A2", "\u03A2"], + ["\u03A3", "\u03C3"], /* GREEK CAPITAL LETTER SIGMA */ + ["\u03A4", "\u03C4"], /* GREEK CAPITAL LETTER TAU */ + ["\u03A5", "\u03C5"], /* GREEK CAPITAL LETTER UPSILON */ + ["\u03A6", "\u03C6"], /* GREEK CAPITAL LETTER PHI */ + ["\u03A7", "\u03C7"], /* GREEK CAPITAL LETTER CHI */ + ["\u03A8", "\u03C8"], /* GREEK CAPITAL LETTER PSI */ + ["\u03A9", "\u03C9"], /* GREEK CAPITAL LETTER OMEGA */ + ["\u03AA", "\u03CA"], /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA (GREEK CAPITAL LETTER IOTA DIAERESIS) */ + ["\u03AB", "\u03CB"], /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA (GREEK CAPITAL LETTER UPSILON DIAERESIS) */ + ["\u0386", "\u03AC"], /* GREEK SMALL LETTER ALPHA WITH TONOS (GREEK SMALL LETTER ALPHA TONOS) */ + ["\u0388", "\u03AD"], /* GREEK SMALL LETTER EPSILON WITH TONOS (GREEK SMALL LETTER EPSILON TONOS) */ + ["\u0389", "\u03AE"], /* GREEK SMALL LETTER ETA WITH TONOS (GREEK SMALL LETTER ETA TONOS) */ + ["\u038A", "\u03AF"], /* GREEK SMALL LETTER IOTA WITH TONOS (GREEK SMALL LETTER IOTA TONOS) */ + ["\u03A5\u0308\u0301", "\u03B0"], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS) */ + ["\u0391", "\u03B1"], /* GREEK SMALL LETTER ALPHA */ + ["\u0392", "\u03B2"], /* GREEK SMALL LETTER BETA */ + ["\u0393", "\u03B3"], /* GREEK SMALL LETTER GAMMA */ + ["\u0394", "\u03B4"], /* GREEK SMALL LETTER DELTA */ + ["\u0395", "\u03B5"], /* GREEK SMALL LETTER EPSILON */ + ["\u0396", "\u03B6"], /* GREEK SMALL LETTER ZETA */ + ["\u0397", "\u03B7"], /* GREEK SMALL LETTER ETA */ + ["\u0398", "\u03B8"], /* GREEK SMALL LETTER THETA */ + ["\u0399", "\u03B9"], /* GREEK SMALL LETTER IOTA */ + ["\u039A", "\u03BA"], /* GREEK SMALL LETTER KAPPA */ + ["\u039B", "\u03BB"], /* GREEK SMALL LETTER LAMDA (GREEK SMALL LETTER LAMBDA) */ + ["\u039C", "\u03BC"], /* GREEK SMALL LETTER MU */ + ["\u039D", "\u03BD"], /* GREEK SMALL LETTER NU */ + ["\u039E", "\u03BE"], /* GREEK SMALL LETTER XI */ + ["\u039F", "\u03BF"], /* GREEK SMALL LETTER OMICRON */ + ["\u03A0", "\u03C0"], /* GREEK SMALL LETTER PI */ + ["\u03A1", "\u03C1"], /* GREEK SMALL LETTER RHO */ + ["\u03A3", "\u03C2"], /* GREEK SMALL LETTER FINAL SIGMA */ + ["\u03A3", "\u03C3"], /* GREEK SMALL LETTER SIGMA */ + ["\u03A4", "\u03C4"], /* GREEK SMALL LETTER TAU */ + ["\u03A5", "\u03C5"], /* GREEK SMALL LETTER UPSILON */ + ["\u03A6", "\u03C6"], /* GREEK SMALL LETTER PHI */ + ["\u03A7", "\u03C7"], /* GREEK SMALL LETTER CHI */ + ["\u03A8", "\u03C8"], /* GREEK SMALL LETTER PSI */ + ["\u03A9", "\u03C9"], /* GREEK SMALL LETTER OMEGA */ + ["\u03AA", "\u03CA"], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA (GREEK SMALL LETTER IOTA DIAERESIS) */ + ["\u03AB", "\u03CB"], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA (GREEK SMALL LETTER UPSILON DIAERESIS) */ + ["\u038C", "\u03CC"], /* GREEK SMALL LETTER OMICRON WITH TONOS (GREEK SMALL LETTER OMICRON TONOS) */ + ["\u038E", "\u03CD"], /* GREEK SMALL LETTER UPSILON WITH TONOS (GREEK SMALL LETTER UPSILON TONOS) */ + ["\u038F", "\u03CE"], /* GREEK SMALL LETTER OMEGA WITH TONOS (GREEK SMALL LETTER OMEGA TONOS) */ + ["\u03CF", "\u03D7"], /* GREEK CAPITAL KAI SYMBOL */ + ["\u0392", "\u03D0"], /* GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA) */ + ["\u0398", "\u03D1"], /* GREEK THETA SYMBOL (GREEK SMALL LETTER SCRIPT THETA) */ + ["\u03D2", "\u03D2"], /* GREEK UPSILON WITH HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK) */ + ["\u03D3", "\u03D3"], /* GREEK UPSILON WITH ACUTE AND HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK TONOS) */ + ["\u03D4", "\u03D4"], /* GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS) */ + ["\u03A6", "\u03D5"], /* GREEK PHI SYMBOL (GREEK SMALL LETTER SCRIPT PHI) */ + ["\u03A0", "\u03D6"], /* GREEK PI SYMBOL (GREEK SMALL LETTER OMEGA PI) */ + ["\u03CF", "\u03D7"], /* GREEK KAI SYMBOL */ + ["\u03D8", "\u03D9"], /* GREEK LETTER ARCHAIC KOPPA */ + ["\u03D8", "\u03D9"], /* GREEK SMALL LETTER ARCHAIC KOPPA */ + ["\u03DA", "\u03DB"], /* GREEK LETTER STIGMA (GREEK CAPITAL LETTER STIGMA) */ + ["\u03DA", "\u03DB"], /* GREEK SMALL LETTER STIGMA */ + ["\u03DC", "\u03DD"], /* GREEK LETTER DIGAMMA (GREEK CAPITAL LETTER DIGAMMA) */ + ["\u03DC", "\u03DD"], /* GREEK SMALL LETTER DIGAMMA */ + ["\u03DE", "\u03DF"], /* GREEK LETTER KOPPA (GREEK CAPITAL LETTER KOPPA) */ + ["\u03DE", "\u03DF"], /* GREEK SMALL LETTER KOPPA */ + ["\u03E0", "\u03E1"], /* GREEK LETTER SAMPI (GREEK CAPITAL LETTER SAMPI) */ + ["\u03E0", "\u03E1"], /* GREEK SMALL LETTER SAMPI */ + ["\u03E2", "\u03E3"], /* COPTIC CAPITAL LETTER SHEI (GREEK CAPITAL LETTER SHEI) */ + ["\u03E2", "\u03E3"], /* COPTIC SMALL LETTER SHEI (GREEK SMALL LETTER SHEI) */ + ["\u03E4", "\u03E5"], /* COPTIC CAPITAL LETTER FEI (GREEK CAPITAL LETTER FEI) */ + ["\u03E4", "\u03E5"], /* COPTIC SMALL LETTER FEI (GREEK SMALL LETTER FEI) */ + ["\u03E6", "\u03E7"], /* COPTIC CAPITAL LETTER KHEI (GREEK CAPITAL LETTER KHEI) */ + ["\u03E6", "\u03E7"], /* COPTIC SMALL LETTER KHEI (GREEK SMALL LETTER KHEI) */ + ["\u03E8", "\u03E9"], /* COPTIC CAPITAL LETTER HORI (GREEK CAPITAL LETTER HORI) */ + ["\u03E8", "\u03E9"], /* COPTIC SMALL LETTER HORI (GREEK SMALL LETTER HORI) */ + ["\u03EA", "\u03EB"], /* COPTIC CAPITAL LETTER GANGIA (GREEK CAPITAL LETTER GANGIA) */ + ["\u03EA", "\u03EB"], /* COPTIC SMALL LETTER GANGIA (GREEK SMALL LETTER GANGIA) */ + ["\u03EC", "\u03ED"], /* COPTIC CAPITAL LETTER SHIMA (GREEK CAPITAL LETTER SHIMA) */ + ["\u03EC", "\u03ED"], /* COPTIC SMALL LETTER SHIMA (GREEK SMALL LETTER SHIMA) */ + ["\u03EE", "\u03EF"], /* COPTIC CAPITAL LETTER DEI (GREEK CAPITAL LETTER DEI) */ + ["\u03EE", "\u03EF"], /* COPTIC SMALL LETTER DEI (GREEK SMALL LETTER DEI) */ + ["\u039A", "\u03F0"], /* GREEK KAPPA SYMBOL (GREEK SMALL LETTER SCRIPT KAPPA) */ + ["\u03A1", "\u03F1"], /* GREEK RHO SYMBOL (GREEK SMALL LETTER TAILED RHO) */ + ["\u03F9", "\u03F2"], /* GREEK LUNATE SIGMA SYMBOL (GREEK SMALL LETTER LUNATE SIGMA) */ + ["\u037F", "\u03F3"], /* GREEK LETTER YOT */ + ["\u03F4", "\u03B8"], /* GREEK CAPITAL THETA SYMBOL */ + ["\u0395", "\u03F5"], /* GREEK LUNATE EPSILON SYMBOL */ + ["\u03F6", "\u03F6"], /* GREEK REVERSED LUNATE EPSILON SYMBOL */ + ["\u03F7", "\u03F8"], /* GREEK CAPITAL LETTER SHO */ + ["\u03F7", "\u03F8"], /* GREEK SMALL LETTER SHO */ + ["\u03F9", "\u03F2"], /* GREEK CAPITAL LUNATE SIGMA SYMBOL */ + ["\u03FA", "\u03FB"], /* GREEK CAPITAL LETTER SAN */ + ["\u03FA", "\u03FB"], /* GREEK SMALL LETTER SAN */ + ["\u03FC", "\u03FC"], /* GREEK RHO WITH STROKE SYMBOL */ + ["\u03FD", "\u037B"], /* GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL */ + ["\u03FE", "\u037C"], /* GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL */ + ["\u03FF", "\u037D"], /* GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */ + ["\u0400", "\u0450"], /* CYRILLIC CAPITAL LETTER IE WITH GRAVE */ + ["\u0401", "\u0451"], /* CYRILLIC CAPITAL LETTER IO */ + ["\u0402", "\u0452"], /* CYRILLIC CAPITAL LETTER DJE */ + ["\u0403", "\u0453"], /* CYRILLIC CAPITAL LETTER GJE */ + ["\u0404", "\u0454"], /* CYRILLIC CAPITAL LETTER UKRAINIAN IE (CYRILLIC CAPITAL LETTER E) */ + ["\u0405", "\u0455"], /* CYRILLIC CAPITAL LETTER DZE */ + ["\u0406", "\u0456"], /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC CAPITAL LETTER I) */ + ["\u0407", "\u0457"], /* CYRILLIC CAPITAL LETTER YI */ + ["\u0408", "\u0458"], /* CYRILLIC CAPITAL LETTER JE */ + ["\u0409", "\u0459"], /* CYRILLIC CAPITAL LETTER LJE */ + ["\u040A", "\u045A"], /* CYRILLIC CAPITAL LETTER NJE */ + ["\u040B", "\u045B"], /* CYRILLIC CAPITAL LETTER TSHE */ + ["\u040C", "\u045C"], /* CYRILLIC CAPITAL LETTER KJE */ + ["\u040D", "\u045D"], /* CYRILLIC CAPITAL LETTER I WITH GRAVE */ + ["\u040E", "\u045E"], /* CYRILLIC CAPITAL LETTER SHORT U */ + ["\u040F", "\u045F"], /* CYRILLIC CAPITAL LETTER DZHE */ + ["\u0410", "\u0430"], /* CYRILLIC CAPITAL LETTER A */ + ["\u0411", "\u0431"], /* CYRILLIC CAPITAL LETTER BE */ + ["\u0412", "\u0432"], /* CYRILLIC CAPITAL LETTER VE */ + ["\u0413", "\u0433"], /* CYRILLIC CAPITAL LETTER GHE (CYRILLIC CAPITAL LETTER GE) */ + ["\u0414", "\u0434"], /* CYRILLIC CAPITAL LETTER DE */ + ["\u0415", "\u0435"], /* CYRILLIC CAPITAL LETTER IE */ + ["\u0416", "\u0436"], /* CYRILLIC CAPITAL LETTER ZHE */ + ["\u0417", "\u0437"], /* CYRILLIC CAPITAL LETTER ZE */ + ["\u0418", "\u0438"], /* CYRILLIC CAPITAL LETTER I (CYRILLIC CAPITAL LETTER II) */ + ["\u0419", "\u0439"], /* CYRILLIC CAPITAL LETTER SHORT I (CYRILLIC CAPITAL LETTER SHORT II) */ + ["\u041A", "\u043A"], /* CYRILLIC CAPITAL LETTER KA */ + ["\u041B", "\u043B"], /* CYRILLIC CAPITAL LETTER EL */ + ["\u041C", "\u043C"], /* CYRILLIC CAPITAL LETTER EM */ + ["\u041D", "\u043D"], /* CYRILLIC CAPITAL LETTER EN */ + ["\u041E", "\u043E"], /* CYRILLIC CAPITAL LETTER O */ + ["\u041F", "\u043F"], /* CYRILLIC CAPITAL LETTER PE */ + ["\u0420", "\u0440"], /* CYRILLIC CAPITAL LETTER ER */ + ["\u0421", "\u0441"], /* CYRILLIC CAPITAL LETTER ES */ + ["\u0422", "\u0442"], /* CYRILLIC CAPITAL LETTER TE */ + ["\u0423", "\u0443"], /* CYRILLIC CAPITAL LETTER U */ + ["\u0424", "\u0444"], /* CYRILLIC CAPITAL LETTER EF */ + ["\u0425", "\u0445"], /* CYRILLIC CAPITAL LETTER HA (CYRILLIC CAPITAL LETTER KHA) */ + ["\u0426", "\u0446"], /* CYRILLIC CAPITAL LETTER TSE */ + ["\u0427", "\u0447"], /* CYRILLIC CAPITAL LETTER CHE */ + ["\u0428", "\u0448"], /* CYRILLIC CAPITAL LETTER SHA */ + ["\u0429", "\u0449"], /* CYRILLIC CAPITAL LETTER SHCHA */ + ["\u042A", "\u044A"], /* CYRILLIC CAPITAL LETTER HARD SIGN */ + ["\u042B", "\u044B"], /* CYRILLIC CAPITAL LETTER YERU (CYRILLIC CAPITAL LETTER YERI) */ + ["\u042C", "\u044C"], /* CYRILLIC CAPITAL LETTER SOFT SIGN */ + ["\u042D", "\u044D"], /* CYRILLIC CAPITAL LETTER E (CYRILLIC CAPITAL LETTER REVERSED E) */ + ["\u042E", "\u044E"], /* CYRILLIC CAPITAL LETTER YU (CYRILLIC CAPITAL LETTER IU) */ + ["\u042F", "\u044F"], /* CYRILLIC CAPITAL LETTER YA (CYRILLIC CAPITAL LETTER IA) */ + ["\u0410", "\u0430"], /* CYRILLIC SMALL LETTER A */ + ["\u0411", "\u0431"], /* CYRILLIC SMALL LETTER BE */ + ["\u0412", "\u0432"], /* CYRILLIC SMALL LETTER VE */ + ["\u0413", "\u0433"], /* CYRILLIC SMALL LETTER GHE (CYRILLIC SMALL LETTER GE) */ + ["\u0414", "\u0434"], /* CYRILLIC SMALL LETTER DE */ + ["\u0415", "\u0435"], /* CYRILLIC SMALL LETTER IE */ + ["\u0416", "\u0436"], /* CYRILLIC SMALL LETTER ZHE */ + ["\u0417", "\u0437"], /* CYRILLIC SMALL LETTER ZE */ + ["\u0418", "\u0438"], /* CYRILLIC SMALL LETTER I (CYRILLIC SMALL LETTER II) */ + ["\u0419", "\u0439"], /* CYRILLIC SMALL LETTER SHORT I (CYRILLIC SMALL LETTER SHORT II) */ + ["\u041A", "\u043A"], /* CYRILLIC SMALL LETTER KA */ + ["\u041B", "\u043B"], /* CYRILLIC SMALL LETTER EL */ + ["\u041C", "\u043C"], /* CYRILLIC SMALL LETTER EM */ + ["\u041D", "\u043D"], /* CYRILLIC SMALL LETTER EN */ + ["\u041E", "\u043E"], /* CYRILLIC SMALL LETTER O */ + ["\u041F", "\u043F"], /* CYRILLIC SMALL LETTER PE */ + ["\u0420", "\u0440"], /* CYRILLIC SMALL LETTER ER */ + ["\u0421", "\u0441"], /* CYRILLIC SMALL LETTER ES */ + ["\u0422", "\u0442"], /* CYRILLIC SMALL LETTER TE */ + ["\u0423", "\u0443"], /* CYRILLIC SMALL LETTER U */ + ["\u0424", "\u0444"], /* CYRILLIC SMALL LETTER EF */ + ["\u0425", "\u0445"], /* CYRILLIC SMALL LETTER HA (CYRILLIC SMALL LETTER KHA) */ + ["\u0426", "\u0446"], /* CYRILLIC SMALL LETTER TSE */ + ["\u0427", "\u0447"], /* CYRILLIC SMALL LETTER CHE */ + ["\u0428", "\u0448"], /* CYRILLIC SMALL LETTER SHA */ + ["\u0429", "\u0449"], /* CYRILLIC SMALL LETTER SHCHA */ + ["\u042A", "\u044A"], /* CYRILLIC SMALL LETTER HARD SIGN */ + ["\u042B", "\u044B"], /* CYRILLIC SMALL LETTER YERU (CYRILLIC SMALL LETTER YERI) */ + ["\u042C", "\u044C"], /* CYRILLIC SMALL LETTER SOFT SIGN */ + ["\u042D", "\u044D"], /* CYRILLIC SMALL LETTER E (CYRILLIC SMALL LETTER REVERSED E) */ + ["\u042E", "\u044E"], /* CYRILLIC SMALL LETTER YU (CYRILLIC SMALL LETTER IU) */ + ["\u042F", "\u044F"], /* CYRILLIC SMALL LETTER YA (CYRILLIC SMALL LETTER IA) */ + ["\u0400", "\u0450"], /* CYRILLIC SMALL LETTER IE WITH GRAVE */ + ["\u0401", "\u0451"], /* CYRILLIC SMALL LETTER IO */ + ["\u0402", "\u0452"], /* CYRILLIC SMALL LETTER DJE */ + ["\u0403", "\u0453"], /* CYRILLIC SMALL LETTER GJE */ + ["\u0404", "\u0454"], /* CYRILLIC SMALL LETTER UKRAINIAN IE (CYRILLIC SMALL LETTER E) */ + ["\u0405", "\u0455"], /* CYRILLIC SMALL LETTER DZE */ + ["\u0406", "\u0456"], /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC SMALL LETTER I) */ + ["\u0407", "\u0457"], /* CYRILLIC SMALL LETTER YI */ + ["\u0408", "\u0458"], /* CYRILLIC SMALL LETTER JE */ + ["\u0409", "\u0459"], /* CYRILLIC SMALL LETTER LJE */ + ["\u040A", "\u045A"], /* CYRILLIC SMALL LETTER NJE */ + ["\u040B", "\u045B"], /* CYRILLIC SMALL LETTER TSHE */ + ["\u040C", "\u045C"], /* CYRILLIC SMALL LETTER KJE */ + ["\u040D", "\u045D"], /* CYRILLIC SMALL LETTER I WITH GRAVE */ + ["\u040E", "\u045E"], /* CYRILLIC SMALL LETTER SHORT U */ + ["\u040F", "\u045F"], /* CYRILLIC SMALL LETTER DZHE */ + ["\u0460", "\u0461"], /* CYRILLIC CAPITAL LETTER OMEGA */ + ["\u0460", "\u0461"], /* CYRILLIC SMALL LETTER OMEGA */ + ["\u0462", "\u0463"], /* CYRILLIC CAPITAL LETTER YAT */ + ["\u0462", "\u0463"], /* CYRILLIC SMALL LETTER YAT */ + ["\u0464", "\u0465"], /* CYRILLIC CAPITAL LETTER IOTIFIED E */ + ["\u0464", "\u0465"], /* CYRILLIC SMALL LETTER IOTIFIED E */ + ["\u0466", "\u0467"], /* CYRILLIC CAPITAL LETTER LITTLE YUS */ + ["\u0466", "\u0467"], /* CYRILLIC SMALL LETTER LITTLE YUS */ + ["\u0468", "\u0469"], /* CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */ + ["\u0468", "\u0469"], /* CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS */ + ["\u046A", "\u046B"], /* CYRILLIC CAPITAL LETTER BIG YUS */ + ["\u046A", "\u046B"], /* CYRILLIC SMALL LETTER BIG YUS */ + ["\u046C", "\u046D"], /* CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */ + ["\u046C", "\u046D"], /* CYRILLIC SMALL LETTER IOTIFIED BIG YUS */ + ["\u046E", "\u046F"], /* CYRILLIC CAPITAL LETTER KSI */ + ["\u046E", "\u046F"], /* CYRILLIC SMALL LETTER KSI */ + ["\u0470", "\u0471"], /* CYRILLIC CAPITAL LETTER PSI */ + ["\u0470", "\u0471"], /* CYRILLIC SMALL LETTER PSI */ + ["\u0472", "\u0473"], /* CYRILLIC CAPITAL LETTER FITA */ + ["\u0472", "\u0473"], /* CYRILLIC SMALL LETTER FITA */ + ["\u0474", "\u0475"], /* CYRILLIC CAPITAL LETTER IZHITSA */ + ["\u0474", "\u0475"], /* CYRILLIC SMALL LETTER IZHITSA */ + ["\u0476", "\u0477"], /* CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE) */ + ["\u0476", "\u0477"], /* CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE) */ + ["\u0478", "\u0479"], /* CYRILLIC CAPITAL LETTER UK (CYRILLIC CAPITAL LETTER UK DIGRAPH) */ + ["\u0478", "\u0479"], /* CYRILLIC SMALL LETTER UK (CYRILLIC SMALL LETTER UK DIGRAPH) */ + ["\u047A", "\u047B"], /* CYRILLIC CAPITAL LETTER ROUND OMEGA */ + ["\u047A", "\u047B"], /* CYRILLIC SMALL LETTER ROUND OMEGA */ + ["\u047C", "\u047D"], /* CYRILLIC CAPITAL LETTER OMEGA WITH TITLO (CYRILLIC CAPITAL LETTER OMEGA TITLO) */ + ["\u047C", "\u047D"], /* CYRILLIC SMALL LETTER OMEGA WITH TITLO (CYRILLIC SMALL LETTER OMEGA TITLO) */ + ["\u047E", "\u047F"], /* CYRILLIC CAPITAL LETTER OT */ + ["\u047E", "\u047F"], /* CYRILLIC SMALL LETTER OT */ + ["\u0480", "\u0481"], /* CYRILLIC CAPITAL LETTER KOPPA */ + ["\u0480", "\u0481"], /* CYRILLIC SMALL LETTER KOPPA */ + ["\u0482", "\u0482"], /* CYRILLIC THOUSANDS SIGN */ + ["\u0483", "\u0483"], /* COMBINING CYRILLIC TITLO (CYRILLIC NON-SPACING TITLO) */ + ["\u0484", "\u0484"], /* COMBINING CYRILLIC PALATALIZATION (CYRILLIC NON-SPACING PALATALIZATION) */ + ["\u0485", "\u0485"], /* COMBINING CYRILLIC DASIA PNEUMATA (CYRILLIC NON-SPACING DASIA PNEUMATA) */ + ["\u0486", "\u0486"], /* COMBINING CYRILLIC PSILI PNEUMATA (CYRILLIC NON-SPACING PSILI PNEUMATA) */ + ["\u0487", "\u0487"], /* COMBINING CYRILLIC POKRYTIE */ + ["\u0488", "\u0488"], /* COMBINING CYRILLIC HUNDRED THOUSANDS SIGN */ + ["\u0489", "\u0489"], /* COMBINING CYRILLIC MILLIONS SIGN */ + ["\u048A", "\u048B"], /* CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */ + ["\u048A", "\u048B"], /* CYRILLIC SMALL LETTER SHORT I WITH TAIL */ + ["\u048C", "\u048D"], /* CYRILLIC CAPITAL LETTER SEMISOFT SIGN */ + ["\u048C", "\u048D"], /* CYRILLIC SMALL LETTER SEMISOFT SIGN */ + ["\u048E", "\u048F"], /* CYRILLIC CAPITAL LETTER ER WITH TICK */ + ["\u048E", "\u048F"], /* CYRILLIC SMALL LETTER ER WITH TICK */ + ["\u0490", "\u0491"], /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN (CYRILLIC CAPITAL LETTER GE WITH UPTURN) */ + ["\u0490", "\u0491"], /* CYRILLIC SMALL LETTER GHE WITH UPTURN (CYRILLIC SMALL LETTER GE WITH UPTURN) */ + ["\u0492", "\u0493"], /* CYRILLIC CAPITAL LETTER GHE WITH STROKE (CYRILLIC CAPITAL LETTER GE BAR) */ + ["\u0492", "\u0493"], /* CYRILLIC SMALL LETTER GHE WITH STROKE (CYRILLIC SMALL LETTER GE BAR) */ + ["\u0494", "\u0495"], /* CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER GE HOOK) */ + ["\u0494", "\u0495"], /* CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER GE HOOK) */ + ["\u0496", "\u0497"], /* CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER) */ + ["\u0496", "\u0497"], /* CYRILLIC SMALL LETTER ZHE WITH DESCENDER (CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER) */ + ["\u0498", "\u0499"], /* CYRILLIC CAPITAL LETTER ZE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZE CEDILLA) */ + ["\u0498", "\u0499"], /* CYRILLIC SMALL LETTER ZE WITH DESCENDER (CYRILLIC SMALL LETTER ZE CEDILLA) */ + ["\u049A", "\u049B"], /* CYRILLIC CAPITAL LETTER KA WITH DESCENDER (CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER) */ + ["\u049A", "\u049B"], /* CYRILLIC SMALL LETTER KA WITH DESCENDER (CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER) */ + ["\u049C", "\u049D"], /* CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER KA VERTICAL BAR) */ + ["\u049C", "\u049D"], /* CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE (CYRILLIC SMALL LETTER KA VERTICAL BAR) */ + ["\u049E", "\u049F"], /* CYRILLIC CAPITAL LETTER KA WITH STROKE (CYRILLIC CAPITAL LETTER KA BAR) */ + ["\u049E", "\u049F"], /* CYRILLIC SMALL LETTER KA WITH STROKE (CYRILLIC SMALL LETTER KA BAR) */ + ["\u04A0", "\u04A1"], /* CYRILLIC CAPITAL LETTER BASHKIR KA (CYRILLIC CAPITAL LETTER REVERSED GE KA) */ + ["\u04A0", "\u04A1"], /* CYRILLIC SMALL LETTER BASHKIR KA (CYRILLIC SMALL LETTER REVERSED GE KA) */ + ["\u04A2", "\u04A3"], /* CYRILLIC CAPITAL LETTER EN WITH DESCENDER (CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER) */ + ["\u04A2", "\u04A3"], /* CYRILLIC SMALL LETTER EN WITH DESCENDER (CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER) */ + ["\u04A4", "\u04A5"], /* CYRILLIC CAPITAL LIGATURE EN GHE (CYRILLIC CAPITAL LETTER EN GE) */ + ["\u04A4", "\u04A5"], /* CYRILLIC SMALL LIGATURE EN GHE (CYRILLIC SMALL LETTER EN GE) */ + ["\u04A6", "\u04A7"], /* CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER PE HOOK) */ + ["\u04A6", "\u04A7"], /* CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER PE HOOK) */ + ["\u04A8", "\u04A9"], /* CYRILLIC CAPITAL LETTER ABKHASIAN HA (CYRILLIC CAPITAL LETTER O HOOK) */ + ["\u04A8", "\u04A9"], /* CYRILLIC SMALL LETTER ABKHASIAN HA (CYRILLIC SMALL LETTER O HOOK) */ + ["\u04AA", "\u04AB"], /* CYRILLIC CAPITAL LETTER ES WITH DESCENDER (CYRILLIC CAPITAL LETTER ES CEDILLA) */ + ["\u04AA", "\u04AB"], /* CYRILLIC SMALL LETTER ES WITH DESCENDER (CYRILLIC SMALL LETTER ES CEDILLA) */ + ["\u04AC", "\u04AD"], /* CYRILLIC CAPITAL LETTER TE WITH DESCENDER (CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER) */ + ["\u04AC", "\u04AD"], /* CYRILLIC SMALL LETTER TE WITH DESCENDER (CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER) */ + ["\u04AE", "\u04AF"], /* CYRILLIC CAPITAL LETTER STRAIGHT U */ + ["\u04AE", "\u04AF"], /* CYRILLIC SMALL LETTER STRAIGHT U */ + ["\u04B0", "\u04B1"], /* CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE (CYRILLIC CAPITAL LETTER STRAIGHT U BAR) */ + ["\u04B0", "\u04B1"], /* CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE (CYRILLIC SMALL LETTER STRAIGHT U BAR) */ + ["\u04B2", "\u04B3"], /* CYRILLIC CAPITAL LETTER HA WITH DESCENDER (CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER) */ + ["\u04B2", "\u04B3"], /* CYRILLIC SMALL LETTER HA WITH DESCENDER (CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER) */ + ["\u04B4", "\u04B5"], /* CYRILLIC CAPITAL LIGATURE TE TSE (CYRILLIC CAPITAL LETTER TE TSE) */ + ["\u04B4", "\u04B5"], /* CYRILLIC SMALL LIGATURE TE TSE (CYRILLIC SMALL LETTER TE TSE) */ + ["\u04B6", "\u04B7"], /* CYRILLIC CAPITAL LETTER CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER) */ + ["\u04B6", "\u04B7"], /* CYRILLIC SMALL LETTER CHE WITH DESCENDER (CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER) */ + ["\u04B8", "\u04B9"], /* CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER CHE VERTICAL BAR) */ + ["\u04B8", "\u04B9"], /* CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE (CYRILLIC SMALL LETTER CHE VERTICAL BAR) */ + ["\u04BA", "\u04BB"], /* CYRILLIC CAPITAL LETTER SHHA (CYRILLIC CAPITAL LETTER H) */ + ["\u04BA", "\u04BB"], /* CYRILLIC SMALL LETTER SHHA (CYRILLIC SMALL LETTER H) */ + ["\u04BC", "\u04BD"], /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE (CYRILLIC CAPITAL LETTER IE HOOK) */ + ["\u04BC", "\u04BD"], /* CYRILLIC SMALL LETTER ABKHASIAN CHE (CYRILLIC SMALL LETTER IE HOOK) */ + ["\u04BE", "\u04BF"], /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER IE HOOK OGONEK) */ + ["\u04BE", "\u04BF"], /* CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC SMALL LETTER IE HOOK OGONEK) */ + ["\u04C0", "\u04CF"], /* CYRILLIC LETTER PALOCHKA (CYRILLIC LETTER I) */ + ["\u04C1", "\u04C2"], /* CYRILLIC CAPITAL LETTER ZHE WITH BREVE (CYRILLIC CAPITAL LETTER SHORT ZHE) */ + ["\u04C1", "\u04C2"], /* CYRILLIC SMALL LETTER ZHE WITH BREVE (CYRILLIC SMALL LETTER SHORT ZHE) */ + ["\u04C3", "\u04C4"], /* CYRILLIC CAPITAL LETTER KA WITH HOOK (CYRILLIC CAPITAL LETTER KA HOOK) */ + ["\u04C3", "\u04C4"], /* CYRILLIC SMALL LETTER KA WITH HOOK (CYRILLIC SMALL LETTER KA HOOK) */ + ["\u04C5", "\u04C6"], /* CYRILLIC CAPITAL LETTER EL WITH TAIL */ + ["\u04C5", "\u04C6"], /* CYRILLIC SMALL LETTER EL WITH TAIL */ + ["\u04C7", "\u04C8"], /* CYRILLIC CAPITAL LETTER EN WITH HOOK (CYRILLIC CAPITAL LETTER EN HOOK) */ + ["\u04C7", "\u04C8"], /* CYRILLIC SMALL LETTER EN WITH HOOK (CYRILLIC SMALL LETTER EN HOOK) */ + ["\u04C9", "\u04CA"], /* CYRILLIC CAPITAL LETTER EN WITH TAIL */ + ["\u04C9", "\u04CA"], /* CYRILLIC SMALL LETTER EN WITH TAIL */ + ["\u04CB", "\u04CC"], /* CYRILLIC CAPITAL LETTER KHAKASSIAN CHE (CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER) */ + ["\u04CB", "\u04CC"], /* CYRILLIC SMALL LETTER KHAKASSIAN CHE (CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER) */ + ["\u04CD", "\u04CE"], /* CYRILLIC CAPITAL LETTER EM WITH TAIL */ + ["\u04CD", "\u04CE"], /* CYRILLIC SMALL LETTER EM WITH TAIL */ + ["\u04C0", "\u04CF"], /* CYRILLIC SMALL LETTER PALOCHKA */ + ["\u04D0", "\u04D1"], /* CYRILLIC CAPITAL LETTER A WITH BREVE */ + ["\u04D0", "\u04D1"], /* CYRILLIC SMALL LETTER A WITH BREVE */ + ["\u04D2", "\u04D3"], /* CYRILLIC CAPITAL LETTER A WITH DIAERESIS */ + ["\u04D2", "\u04D3"], /* CYRILLIC SMALL LETTER A WITH DIAERESIS */ + ["\u04D4", "\u04D5"], /* CYRILLIC CAPITAL LIGATURE A IE */ + ["\u04D4", "\u04D5"], /* CYRILLIC SMALL LIGATURE A IE */ + ["\u04D6", "\u04D7"], /* CYRILLIC CAPITAL LETTER IE WITH BREVE */ + ["\u04D6", "\u04D7"], /* CYRILLIC SMALL LETTER IE WITH BREVE */ + ["\u04D8", "\u04D9"], /* CYRILLIC CAPITAL LETTER SCHWA */ + ["\u04D8", "\u04D9"], /* CYRILLIC SMALL LETTER SCHWA */ + ["\u04DA", "\u04DB"], /* CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */ + ["\u04DA", "\u04DB"], /* CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS */ + ["\u04DC", "\u04DD"], /* CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */ + ["\u04DC", "\u04DD"], /* CYRILLIC SMALL LETTER ZHE WITH DIAERESIS */ + ["\u04DE", "\u04DF"], /* CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */ + ["\u04DE", "\u04DF"], /* CYRILLIC SMALL LETTER ZE WITH DIAERESIS */ + ["\u04E0", "\u04E1"], /* CYRILLIC CAPITAL LETTER ABKHASIAN DZE */ + ["\u04E0", "\u04E1"], /* CYRILLIC SMALL LETTER ABKHASIAN DZE */ + ["\u04E2", "\u04E3"], /* CYRILLIC CAPITAL LETTER I WITH MACRON */ + ["\u04E2", "\u04E3"], /* CYRILLIC SMALL LETTER I WITH MACRON */ + ["\u04E4", "\u04E5"], /* CYRILLIC CAPITAL LETTER I WITH DIAERESIS */ + ["\u04E4", "\u04E5"], /* CYRILLIC SMALL LETTER I WITH DIAERESIS */ + ["\u04E6", "\u04E7"], /* CYRILLIC CAPITAL LETTER O WITH DIAERESIS */ + ["\u04E6", "\u04E7"], /* CYRILLIC SMALL LETTER O WITH DIAERESIS */ + ["\u04E8", "\u04E9"], /* CYRILLIC CAPITAL LETTER BARRED O */ + ["\u04E8", "\u04E9"], /* CYRILLIC SMALL LETTER BARRED O */ + ["\u04EA", "\u04EB"], /* CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */ + ["\u04EA", "\u04EB"], /* CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS */ + ["\u04EC", "\u04ED"], /* CYRILLIC CAPITAL LETTER E WITH DIAERESIS */ + ["\u04EC", "\u04ED"], /* CYRILLIC SMALL LETTER E WITH DIAERESIS */ + ["\u04EE", "\u04EF"], /* CYRILLIC CAPITAL LETTER U WITH MACRON */ + ["\u04EE", "\u04EF"], /* CYRILLIC SMALL LETTER U WITH MACRON */ + ["\u04F0", "\u04F1"], /* CYRILLIC CAPITAL LETTER U WITH DIAERESIS */ + ["\u04F0", "\u04F1"], /* CYRILLIC SMALL LETTER U WITH DIAERESIS */ + ["\u04F2", "\u04F3"], /* CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */ + ["\u04F2", "\u04F3"], /* CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE */ + ["\u04F4", "\u04F5"], /* CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */ + ["\u04F4", "\u04F5"], /* CYRILLIC SMALL LETTER CHE WITH DIAERESIS */ + ["\u04F6", "\u04F7"], /* CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */ + ["\u04F6", "\u04F7"], /* CYRILLIC SMALL LETTER GHE WITH DESCENDER */ + ["\u04F8", "\u04F9"], /* CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */ + ["\u04F8", "\u04F9"], /* CYRILLIC SMALL LETTER YERU WITH DIAERESIS */ + ["\u04FA", "\u04FB"], /* CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */ + ["\u04FA", "\u04FB"], /* CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK */ + ["\u04FC", "\u04FD"], /* CYRILLIC CAPITAL LETTER HA WITH HOOK */ + ["\u04FC", "\u04FD"], /* CYRILLIC SMALL LETTER HA WITH HOOK */ + ["\u04FE", "\u04FF"], /* CYRILLIC CAPITAL LETTER HA WITH STROKE */ + ["\u04FE", "\u04FF"], /* CYRILLIC SMALL LETTER HA WITH STROKE */ + ["\u0500", "\u0501"], /* CYRILLIC CAPITAL LETTER KOMI DE */ + ["\u0500", "\u0501"], /* CYRILLIC SMALL LETTER KOMI DE */ + ["\u0502", "\u0503"], /* CYRILLIC CAPITAL LETTER KOMI DJE */ + ["\u0502", "\u0503"], /* CYRILLIC SMALL LETTER KOMI DJE */ + ["\u0504", "\u0505"], /* CYRILLIC CAPITAL LETTER KOMI ZJE */ + ["\u0504", "\u0505"], /* CYRILLIC SMALL LETTER KOMI ZJE */ + ["\u0506", "\u0507"], /* CYRILLIC CAPITAL LETTER KOMI DZJE */ + ["\u0506", "\u0507"], /* CYRILLIC SMALL LETTER KOMI DZJE */ + ["\u0508", "\u0509"], /* CYRILLIC CAPITAL LETTER KOMI LJE */ + ["\u0508", "\u0509"], /* CYRILLIC SMALL LETTER KOMI LJE */ + ["\u050A", "\u050B"], /* CYRILLIC CAPITAL LETTER KOMI NJE */ + ["\u050A", "\u050B"], /* CYRILLIC SMALL LETTER KOMI NJE */ + ["\u050C", "\u050D"], /* CYRILLIC CAPITAL LETTER KOMI SJE */ + ["\u050C", "\u050D"], /* CYRILLIC SMALL LETTER KOMI SJE */ + ["\u050E", "\u050F"], /* CYRILLIC CAPITAL LETTER KOMI TJE */ + ["\u050E", "\u050F"], /* CYRILLIC SMALL LETTER KOMI TJE */ + ["\u0510", "\u0511"], /* CYRILLIC CAPITAL LETTER REVERSED ZE */ + ["\u0510", "\u0511"], /* CYRILLIC SMALL LETTER REVERSED ZE */ + ["\u0512", "\u0513"], /* CYRILLIC CAPITAL LETTER EL WITH HOOK */ + ["\u0512", "\u0513"], /* CYRILLIC SMALL LETTER EL WITH HOOK */ + ["\u0514", "\u0515"], /* CYRILLIC CAPITAL LETTER LHA */ + ["\u0514", "\u0515"], /* CYRILLIC SMALL LETTER LHA */ + ["\u0516", "\u0517"], /* CYRILLIC CAPITAL LETTER RHA */ + ["\u0516", "\u0517"], /* CYRILLIC SMALL LETTER RHA */ + ["\u0518", "\u0519"], /* CYRILLIC CAPITAL LETTER YAE */ + ["\u0518", "\u0519"], /* CYRILLIC SMALL LETTER YAE */ + ["\u051A", "\u051B"], /* CYRILLIC CAPITAL LETTER QA */ + ["\u051A", "\u051B"], /* CYRILLIC SMALL LETTER QA */ + ["\u051C", "\u051D"], /* CYRILLIC CAPITAL LETTER WE */ + ["\u051C", "\u051D"], /* CYRILLIC SMALL LETTER WE */ + ["\u051E", "\u051F"], /* CYRILLIC CAPITAL LETTER ALEUT KA */ + ["\u051E", "\u051F"], /* CYRILLIC SMALL LETTER ALEUT KA */ + ["\u0520", "\u0521"], /* CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */ + ["\u0520", "\u0521"], /* CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK */ + ["\u0522", "\u0523"], /* CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */ + ["\u0522", "\u0523"], /* CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK */ + ["\u0524", "\u0525"], /* CYRILLIC CAPITAL LETTER PE WITH DESCENDER */ + ["\u0524", "\u0525"], /* CYRILLIC SMALL LETTER PE WITH DESCENDER */ + ["\u0526", "\u0527"], /* CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */ + ["\u0526", "\u0527"], /* CYRILLIC SMALL LETTER SHHA WITH DESCENDER */ + ["\u0528", "\u0529"], /* CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK */ + ["\u0528", "\u0529"], /* CYRILLIC SMALL LETTER EN WITH LEFT HOOK */ + ["\u052A", "\u052B"], /* CYRILLIC CAPITAL LETTER DZZHE */ + ["\u052A", "\u052B"], /* CYRILLIC SMALL LETTER DZZHE */ + ["\u052C", "\u052D"], /* CYRILLIC CAPITAL LETTER DCHE */ + ["\u052C", "\u052D"], /* CYRILLIC SMALL LETTER DCHE */ + ["\u052E", "\u052F"], /* CYRILLIC CAPITAL LETTER EL WITH DESCENDER */ + ["\u052E", "\u052F"], /* CYRILLIC SMALL LETTER EL WITH DESCENDER */ + ["\u0530", "\u0530"], + ["\u0531", "\u0561"], /* ARMENIAN CAPITAL LETTER AYB */ + ["\u0532", "\u0562"], /* ARMENIAN CAPITAL LETTER BEN */ + ["\u0533", "\u0563"], /* ARMENIAN CAPITAL LETTER GIM */ + ["\u0534", "\u0564"], /* ARMENIAN CAPITAL LETTER DA */ + ["\u0535", "\u0565"], /* ARMENIAN CAPITAL LETTER ECH */ + ["\u0536", "\u0566"], /* ARMENIAN CAPITAL LETTER ZA */ + ["\u0537", "\u0567"], /* ARMENIAN CAPITAL LETTER EH */ + ["\u0538", "\u0568"], /* ARMENIAN CAPITAL LETTER ET */ + ["\u0539", "\u0569"], /* ARMENIAN CAPITAL LETTER TO */ + ["\u053A", "\u056A"], /* ARMENIAN CAPITAL LETTER ZHE */ + ["\u053B", "\u056B"], /* ARMENIAN CAPITAL LETTER INI */ + ["\u053C", "\u056C"], /* ARMENIAN CAPITAL LETTER LIWN */ + ["\u053D", "\u056D"], /* ARMENIAN CAPITAL LETTER XEH */ + ["\u053E", "\u056E"], /* ARMENIAN CAPITAL LETTER CA */ + ["\u053F", "\u056F"], /* ARMENIAN CAPITAL LETTER KEN */ + ["\u0540", "\u0570"], /* ARMENIAN CAPITAL LETTER HO */ + ["\u0541", "\u0571"], /* ARMENIAN CAPITAL LETTER JA */ + ["\u0542", "\u0572"], /* ARMENIAN CAPITAL LETTER GHAD (ARMENIAN CAPITAL LETTER LAD) */ + ["\u0543", "\u0573"], /* ARMENIAN CAPITAL LETTER CHEH */ + ["\u0544", "\u0574"], /* ARMENIAN CAPITAL LETTER MEN */ + ["\u0545", "\u0575"], /* ARMENIAN CAPITAL LETTER YI */ + ["\u0546", "\u0576"], /* ARMENIAN CAPITAL LETTER NOW */ + ["\u0547", "\u0577"], /* ARMENIAN CAPITAL LETTER SHA */ + ["\u0548", "\u0578"], /* ARMENIAN CAPITAL LETTER VO */ + ["\u0549", "\u0579"], /* ARMENIAN CAPITAL LETTER CHA */ + ["\u054A", "\u057A"], /* ARMENIAN CAPITAL LETTER PEH */ + ["\u054B", "\u057B"], /* ARMENIAN CAPITAL LETTER JHEH */ + ["\u054C", "\u057C"], /* ARMENIAN CAPITAL LETTER RA */ + ["\u054D", "\u057D"], /* ARMENIAN CAPITAL LETTER SEH */ + ["\u054E", "\u057E"], /* ARMENIAN CAPITAL LETTER VEW */ + ["\u054F", "\u057F"], /* ARMENIAN CAPITAL LETTER TIWN */ + ["\u0550", "\u0580"], /* ARMENIAN CAPITAL LETTER REH */ + ["\u0551", "\u0581"], /* ARMENIAN CAPITAL LETTER CO */ + ["\u0552", "\u0582"], /* ARMENIAN CAPITAL LETTER YIWN */ + ["\u0553", "\u0583"], /* ARMENIAN CAPITAL LETTER PIWR */ + ["\u0554", "\u0584"], /* ARMENIAN CAPITAL LETTER KEH */ + ["\u0555", "\u0585"], /* ARMENIAN CAPITAL LETTER OH */ + ["\u0556", "\u0586"], /* ARMENIAN CAPITAL LETTER FEH */ + ["\u0557", "\u0557"], + ["\u0558", "\u0558"], + ["\u0559", "\u0559"], /* ARMENIAN MODIFIER LETTER LEFT HALF RING */ + ["\u055A", "\u055A"], /* ARMENIAN APOSTROPHE (ARMENIAN MODIFIER LETTER RIGHT HALF RING) */ + ["\u055B", "\u055B"], /* ARMENIAN EMPHASIS MARK */ + ["\u055C", "\u055C"], /* ARMENIAN EXCLAMATION MARK */ + ["\u055D", "\u055D"], /* ARMENIAN COMMA */ + ["\u055E", "\u055E"], /* ARMENIAN QUESTION MARK */ + ["\u055F", "\u055F"], /* ARMENIAN ABBREVIATION MARK */ + ["\u0560", "\u0560"], /* ARMENIAN SMALL LETTER TURNED AYB */ + ["\u0531", "\u0561"], /* ARMENIAN SMALL LETTER AYB */ + ["\u0532", "\u0562"], /* ARMENIAN SMALL LETTER BEN */ + ["\u0533", "\u0563"], /* ARMENIAN SMALL LETTER GIM */ + ["\u0534", "\u0564"], /* ARMENIAN SMALL LETTER DA */ + ["\u0535", "\u0565"], /* ARMENIAN SMALL LETTER ECH */ + ["\u0536", "\u0566"], /* ARMENIAN SMALL LETTER ZA */ + ["\u0537", "\u0567"], /* ARMENIAN SMALL LETTER EH */ + ["\u0538", "\u0568"], /* ARMENIAN SMALL LETTER ET */ + ["\u0539", "\u0569"], /* ARMENIAN SMALL LETTER TO */ + ["\u053A", "\u056A"], /* ARMENIAN SMALL LETTER ZHE */ + ["\u053B", "\u056B"], /* ARMENIAN SMALL LETTER INI */ + ["\u053C", "\u056C"], /* ARMENIAN SMALL LETTER LIWN */ + ["\u053D", "\u056D"], /* ARMENIAN SMALL LETTER XEH */ + ["\u053E", "\u056E"], /* ARMENIAN SMALL LETTER CA */ + ["\u053F", "\u056F"], /* ARMENIAN SMALL LETTER KEN */ + ["\u0540", "\u0570"], /* ARMENIAN SMALL LETTER HO */ + ["\u0541", "\u0571"], /* ARMENIAN SMALL LETTER JA */ + ["\u0542", "\u0572"], /* ARMENIAN SMALL LETTER GHAD (ARMENIAN SMALL LETTER LAD) */ + ["\u0543", "\u0573"], /* ARMENIAN SMALL LETTER CHEH */ + ["\u0544", "\u0574"], /* ARMENIAN SMALL LETTER MEN */ + ["\u0545", "\u0575"], /* ARMENIAN SMALL LETTER YI */ + ["\u0546", "\u0576"], /* ARMENIAN SMALL LETTER NOW */ + ["\u0547", "\u0577"], /* ARMENIAN SMALL LETTER SHA */ + ["\u0548", "\u0578"], /* ARMENIAN SMALL LETTER VO */ + ["\u0549", "\u0579"], /* ARMENIAN SMALL LETTER CHA */ + ["\u054A", "\u057A"], /* ARMENIAN SMALL LETTER PEH */ + ["\u054B", "\u057B"], /* ARMENIAN SMALL LETTER JHEH */ + ["\u054C", "\u057C"], /* ARMENIAN SMALL LETTER RA */ + ["\u054D", "\u057D"], /* ARMENIAN SMALL LETTER SEH */ + ["\u054E", "\u057E"], /* ARMENIAN SMALL LETTER VEW */ + ["\u054F", "\u057F"], /* ARMENIAN SMALL LETTER TIWN */ + ["\u0550", "\u0580"], /* ARMENIAN SMALL LETTER REH */ + ["\u0551", "\u0581"], /* ARMENIAN SMALL LETTER CO */ + ["\u0552", "\u0582"], /* ARMENIAN SMALL LETTER YIWN */ + ["\u0553", "\u0583"], /* ARMENIAN SMALL LETTER PIWR */ + ["\u0554", "\u0584"], /* ARMENIAN SMALL LETTER KEH */ + ["\u0555", "\u0585"], /* ARMENIAN SMALL LETTER OH */ + ["\u0556", "\u0586"], /* ARMENIAN SMALL LETTER FEH */ + ["\u0535\u0552", "\u0587"], /* ARMENIAN SMALL LIGATURE ECH YIWN */ + ["\u0588", "\u0588"], /* ARMENIAN SMALL LETTER YI WITH STROKE */ + ["\u0589", "\u0589"], /* ARMENIAN FULL STOP (ARMENIAN PERIOD) */ + ["\u058A", "\u058A"], /* ARMENIAN HYPHEN */ + ["\u058B", "\u058B"], + ["\u058C", "\u058C"], + ["\u058D", "\u058D"], /* RIGHT-FACING ARMENIAN ETERNITY SIGN */ + ["\u058E", "\u058E"], /* LEFT-FACING ARMENIAN ETERNITY SIGN */ + ["\u058F", "\u058F"], /* ARMENIAN DRAM SIGN */ + ["\u0590", "\u0590"], + ["\u0591", "\u0591"], /* HEBREW ACCENT ETNAHTA */ + ["\u0592", "\u0592"], /* HEBREW ACCENT SEGOL */ + ["\u0593", "\u0593"], /* HEBREW ACCENT SHALSHELET */ + ["\u0594", "\u0594"], /* HEBREW ACCENT ZAQEF QATAN */ + ["\u0595", "\u0595"], /* HEBREW ACCENT ZAQEF GADOL */ + ["\u0596", "\u0596"], /* HEBREW ACCENT TIPEHA */ + ["\u0597", "\u0597"], /* HEBREW ACCENT REVIA */ + ["\u0598", "\u0598"], /* HEBREW ACCENT ZARQA */ + ["\u0599", "\u0599"], /* HEBREW ACCENT PASHTA */ + ["\u059A", "\u059A"], /* HEBREW ACCENT YETIV */ + ["\u059B", "\u059B"], /* HEBREW ACCENT TEVIR */ + ["\u059C", "\u059C"], /* HEBREW ACCENT GERESH */ + ["\u059D", "\u059D"], /* HEBREW ACCENT GERESH MUQDAM */ + ["\u059E", "\u059E"], /* HEBREW ACCENT GERSHAYIM */ + ["\u059F", "\u059F"], /* HEBREW ACCENT QARNEY PARA */ + ["\u05A0", "\u05A0"], /* HEBREW ACCENT TELISHA GEDOLA */ + ["\u05A1", "\u05A1"], /* HEBREW ACCENT PAZER */ + ["\u05A2", "\u05A2"], /* HEBREW ACCENT ATNAH HAFUKH */ + ["\u05A3", "\u05A3"], /* HEBREW ACCENT MUNAH */ + ["\u05A4", "\u05A4"], /* HEBREW ACCENT MAHAPAKH */ + ["\u05A5", "\u05A5"], /* HEBREW ACCENT MERKHA */ + ["\u05A6", "\u05A6"], /* HEBREW ACCENT MERKHA KEFULA */ + ["\u05A7", "\u05A7"], /* HEBREW ACCENT DARGA */ + ["\u05A8", "\u05A8"], /* HEBREW ACCENT QADMA */ + ["\u05A9", "\u05A9"], /* HEBREW ACCENT TELISHA QETANA */ + ["\u05AA", "\u05AA"], /* HEBREW ACCENT YERAH BEN YOMO */ + ["\u05AB", "\u05AB"], /* HEBREW ACCENT OLE */ + ["\u05AC", "\u05AC"], /* HEBREW ACCENT ILUY */ + ["\u05AD", "\u05AD"], /* HEBREW ACCENT DEHI */ + ["\u05AE", "\u05AE"], /* HEBREW ACCENT ZINOR */ + ["\u05AF", "\u05AF"], /* HEBREW MARK MASORA CIRCLE */ + ["\u05B0", "\u05B0"], /* HEBREW POINT SHEVA */ + ["\u05B1", "\u05B1"], /* HEBREW POINT HATAF SEGOL */ + ["\u05B2", "\u05B2"], /* HEBREW POINT HATAF PATAH */ + ["\u05B3", "\u05B3"], /* HEBREW POINT HATAF QAMATS */ + ["\u05B4", "\u05B4"], /* HEBREW POINT HIRIQ */ + ["\u05B5", "\u05B5"], /* HEBREW POINT TSERE */ + ["\u05B6", "\u05B6"], /* HEBREW POINT SEGOL */ + ["\u05B7", "\u05B7"], /* HEBREW POINT PATAH */ + ["\u05B8", "\u05B8"], /* HEBREW POINT QAMATS */ + ["\u05B9", "\u05B9"], /* HEBREW POINT HOLAM */ + ["\u05BA", "\u05BA"], /* HEBREW POINT HOLAM HASER FOR VAV */ + ["\u05BB", "\u05BB"], /* HEBREW POINT QUBUTS */ + ["\u05BC", "\u05BC"], /* HEBREW POINT DAGESH OR MAPIQ (HEBREW POINT DAGESH) */ + ["\u05BD", "\u05BD"], /* HEBREW POINT METEG */ + ["\u05BE", "\u05BE"], /* HEBREW PUNCTUATION MAQAF */ + ["\u05BF", "\u05BF"], /* HEBREW POINT RAFE */ + ["\u05C0", "\u05C0"], /* HEBREW PUNCTUATION PASEQ (HEBREW POINT PASEQ) */ + ["\u05C1", "\u05C1"], /* HEBREW POINT SHIN DOT */ + ["\u05C2", "\u05C2"], /* HEBREW POINT SIN DOT */ + ["\u05C3", "\u05C3"], /* HEBREW PUNCTUATION SOF PASUQ */ + ["\u05C4", "\u05C4"], /* HEBREW MARK UPPER DOT */ + ["\u05C5", "\u05C5"], /* HEBREW MARK LOWER DOT */ + ["\u05C6", "\u05C6"], /* HEBREW PUNCTUATION NUN HAFUKHA */ + ["\u05C7", "\u05C7"], /* HEBREW POINT QAMATS QATAN */ + ["\u05C8", "\u05C8"], + ["\u05C9", "\u05C9"], + ["\u05CA", "\u05CA"], + ["\u05CB", "\u05CB"], + ["\u05CC", "\u05CC"], + ["\u05CD", "\u05CD"], + ["\u05CE", "\u05CE"], + ["\u05CF", "\u05CF"], + ["\u05D0", "\u05D0"], /* HEBREW LETTER ALEF */ + ["\u05D1", "\u05D1"], /* HEBREW LETTER BET */ + ["\u05D2", "\u05D2"], /* HEBREW LETTER GIMEL */ + ["\u05D3", "\u05D3"], /* HEBREW LETTER DALET */ + ["\u05D4", "\u05D4"], /* HEBREW LETTER HE */ + ["\u05D5", "\u05D5"], /* HEBREW LETTER VAV */ + ["\u05D6", "\u05D6"], /* HEBREW LETTER ZAYIN */ + ["\u05D7", "\u05D7"], /* HEBREW LETTER HET */ + ["\u05D8", "\u05D8"], /* HEBREW LETTER TET */ + ["\u05D9", "\u05D9"], /* HEBREW LETTER YOD */ + ["\u05DA", "\u05DA"], /* HEBREW LETTER FINAL KAF */ + ["\u05DB", "\u05DB"], /* HEBREW LETTER KAF */ + ["\u05DC", "\u05DC"], /* HEBREW LETTER LAMED */ + ["\u05DD", "\u05DD"], /* HEBREW LETTER FINAL MEM */ + ["\u05DE", "\u05DE"], /* HEBREW LETTER MEM */ + ["\u05DF", "\u05DF"], /* HEBREW LETTER FINAL NUN */ + ["\u05E0", "\u05E0"], /* HEBREW LETTER NUN */ + ["\u05E1", "\u05E1"], /* HEBREW LETTER SAMEKH */ + ["\u05E2", "\u05E2"], /* HEBREW LETTER AYIN */ + ["\u05E3", "\u05E3"], /* HEBREW LETTER FINAL PE */ + ["\u05E4", "\u05E4"], /* HEBREW LETTER PE */ + ["\u05E5", "\u05E5"], /* HEBREW LETTER FINAL TSADI */ + ["\u05E6", "\u05E6"], /* HEBREW LETTER TSADI */ + ["\u05E7", "\u05E7"], /* HEBREW LETTER QOF */ + ["\u05E8", "\u05E8"], /* HEBREW LETTER RESH */ + ["\u05E9", "\u05E9"], /* HEBREW LETTER SHIN */ + ["\u05EA", "\u05EA"], /* HEBREW LETTER TAV */ + ["\u05EB", "\u05EB"], + ["\u05EC", "\u05EC"], + ["\u05ED", "\u05ED"], + ["\u05EE", "\u05EE"], + ["\u05EF", "\u05EF"], /* HEBREW YOD TRIANGLE */ + ["\u05F0", "\u05F0"], /* HEBREW LIGATURE YIDDISH DOUBLE VAV (HEBREW LETTER DOUBLE VAV) */ + ["\u05F1", "\u05F1"], /* HEBREW LIGATURE YIDDISH VAV YOD (HEBREW LETTER VAV YOD) */ + ["\u05F2", "\u05F2"], /* HEBREW LIGATURE YIDDISH DOUBLE YOD (HEBREW LETTER DOUBLE YOD) */ + ["\u05F3", "\u05F3"], /* HEBREW PUNCTUATION GERESH */ + ["\u05F4", "\u05F4"], /* HEBREW PUNCTUATION GERSHAYIM */ + ["\u05F5", "\u05F5"], + ["\u05F6", "\u05F6"], + ["\u05F7", "\u05F7"], + ["\u05F8", "\u05F8"], + ["\u05F9", "\u05F9"], + ["\u05FA", "\u05FA"], + ["\u05FB", "\u05FB"], + ["\u05FC", "\u05FC"], + ["\u05FD", "\u05FD"], + ["\u05FE", "\u05FE"], + ["\u05FF", "\u05FF"], + ["\u0600", "\u0600"], /* ARABIC NUMBER SIGN */ + ["\u0601", "\u0601"], /* ARABIC SIGN SANAH */ + ["\u0602", "\u0602"], /* ARABIC FOOTNOTE MARKER */ + ["\u0603", "\u0603"], /* ARABIC SIGN SAFHA */ + ["\u0604", "\u0604"], /* ARABIC SIGN SAMVAT */ + ["\u0605", "\u0605"], /* ARABIC NUMBER MARK ABOVE */ + ["\u0606", "\u0606"], /* ARABIC-INDIC CUBE ROOT */ + ["\u0607", "\u0607"], /* ARABIC-INDIC FOURTH ROOT */ + ["\u0608", "\u0608"], /* ARABIC RAY */ + ["\u0609", "\u0609"], /* ARABIC-INDIC PER MILLE SIGN */ + ["\u060A", "\u060A"], /* ARABIC-INDIC PER TEN THOUSAND SIGN */ + ["\u060B", "\u060B"], /* AFGHANI SIGN */ + ["\u060C", "\u060C"], /* ARABIC COMMA */ + ["\u060D", "\u060D"], /* ARABIC DATE SEPARATOR */ + ["\u060E", "\u060E"], /* ARABIC POETIC VERSE SIGN */ + ["\u060F", "\u060F"], /* ARABIC SIGN MISRA */ + ["\u0610", "\u0610"], /* ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM */ + ["\u0611", "\u0611"], /* ARABIC SIGN ALAYHE ASSALLAM */ + ["\u0612", "\u0612"], /* ARABIC SIGN RAHMATULLAH ALAYHE */ + ["\u0613", "\u0613"], /* ARABIC SIGN RADI ALLAHOU ANHU */ + ["\u0614", "\u0614"], /* ARABIC SIGN TAKHALLUS */ + ["\u0615", "\u0615"], /* ARABIC SMALL HIGH TAH */ + ["\u0616", "\u0616"], /* ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH */ + ["\u0617", "\u0617"], /* ARABIC SMALL HIGH ZAIN */ + ["\u0618", "\u0618"], /* ARABIC SMALL FATHA */ + ["\u0619", "\u0619"], /* ARABIC SMALL DAMMA */ + ["\u061A", "\u061A"], /* ARABIC SMALL KASRA */ + ["\u061B", "\u061B"], /* ARABIC SEMICOLON */ + ["\u061C", "\u061C"], /* ARABIC LETTER MARK */ + ["\u061D", "\u061D"], /* ARABIC END OF TEXT MARK */ + ["\u061E", "\u061E"], /* ARABIC TRIPLE DOT PUNCTUATION MARK */ + ["\u061F", "\u061F"], /* ARABIC QUESTION MARK */ + ["\u0620", "\u0620"], /* ARABIC LETTER KASHMIRI YEH */ + ["\u0621", "\u0621"], /* ARABIC LETTER HAMZA (ARABIC LETTER HAMZAH) */ + ["\u0622", "\u0622"], /* ARABIC LETTER ALEF WITH MADDA ABOVE (ARABIC LETTER MADDAH ON ALEF) */ + ["\u0623", "\u0623"], /* ARABIC LETTER ALEF WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON ALEF) */ + ["\u0624", "\u0624"], /* ARABIC LETTER WAW WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON WAW) */ + ["\u0625", "\u0625"], /* ARABIC LETTER ALEF WITH HAMZA BELOW (ARABIC LETTER HAMZAH UNDER ALEF) */ + ["\u0626", "\u0626"], /* ARABIC LETTER YEH WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON YA) */ + ["\u0627", "\u0627"], /* ARABIC LETTER ALEF */ + ["\u0628", "\u0628"], /* ARABIC LETTER BEH (ARABIC LETTER BAA) */ + ["\u0629", "\u0629"], /* ARABIC LETTER TEH MARBUTA (ARABIC LETTER TAA MARBUTAH) */ + ["\u062A", "\u062A"], /* ARABIC LETTER TEH (ARABIC LETTER TAA) */ + ["\u062B", "\u062B"], /* ARABIC LETTER THEH (ARABIC LETTER THAA) */ + ["\u062C", "\u062C"], /* ARABIC LETTER JEEM */ + ["\u062D", "\u062D"], /* ARABIC LETTER HAH (ARABIC LETTER HAA) */ + ["\u062E", "\u062E"], /* ARABIC LETTER KHAH (ARABIC LETTER KHAA) */ + ["\u062F", "\u062F"], /* ARABIC LETTER DAL */ + ["\u0630", "\u0630"], /* ARABIC LETTER THAL */ + ["\u0631", "\u0631"], /* ARABIC LETTER REH (ARABIC LETTER RA) */ + ["\u0632", "\u0632"], /* ARABIC LETTER ZAIN */ + ["\u0633", "\u0633"], /* ARABIC LETTER SEEN */ + ["\u0634", "\u0634"], /* ARABIC LETTER SHEEN */ + ["\u0635", "\u0635"], /* ARABIC LETTER SAD */ + ["\u0636", "\u0636"], /* ARABIC LETTER DAD */ + ["\u0637", "\u0637"], /* ARABIC LETTER TAH */ + ["\u0638", "\u0638"], /* ARABIC LETTER ZAH (ARABIC LETTER DHAH) */ + ["\u0639", "\u0639"], /* ARABIC LETTER AIN */ + ["\u063A", "\u063A"], /* ARABIC LETTER GHAIN */ + ["\u063B", "\u063B"], /* ARABIC LETTER KEHEH WITH TWO DOTS ABOVE */ + ["\u063C", "\u063C"], /* ARABIC LETTER KEHEH WITH THREE DOTS BELOW */ + ["\u063D", "\u063D"], /* ARABIC LETTER FARSI YEH WITH INVERTED V */ + ["\u063E", "\u063E"], /* ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE */ + ["\u063F", "\u063F"], /* ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE */ + ["\u0640", "\u0640"], /* ARABIC TATWEEL */ + ["\u0641", "\u0641"], /* ARABIC LETTER FEH (ARABIC LETTER FA) */ + ["\u0642", "\u0642"], /* ARABIC LETTER QAF */ + ["\u0643", "\u0643"], /* ARABIC LETTER KAF (ARABIC LETTER CAF) */ + ["\u0644", "\u0644"], /* ARABIC LETTER LAM */ + ["\u0645", "\u0645"], /* ARABIC LETTER MEEM */ + ["\u0646", "\u0646"], /* ARABIC LETTER NOON */ + ["\u0647", "\u0647"], /* ARABIC LETTER HEH (ARABIC LETTER HA) */ + ["\u0648", "\u0648"], /* ARABIC LETTER WAW */ + ["\u0649", "\u0649"], /* ARABIC LETTER ALEF MAKSURA (ARABIC LETTER ALEF MAQSURAH) */ + ["\u064A", "\u064A"], /* ARABIC LETTER YEH (ARABIC LETTER YA) */ + ["\u064B", "\u064B"], /* ARABIC FATHATAN */ + ["\u064C", "\u064C"], /* ARABIC DAMMATAN */ + ["\u064D", "\u064D"], /* ARABIC KASRATAN */ + ["\u064E", "\u064E"], /* ARABIC FATHA (ARABIC FATHAH) */ + ["\u064F", "\u064F"], /* ARABIC DAMMA (ARABIC DAMMAH) */ + ["\u0650", "\u0650"], /* ARABIC KASRA (ARABIC KASRAH) */ + ["\u0651", "\u0651"], /* ARABIC SHADDA (ARABIC SHADDAH) */ + ["\u0652", "\u0652"], /* ARABIC SUKUN */ + ["\u0653", "\u0653"], /* ARABIC MADDAH ABOVE */ + ["\u0654", "\u0654"], /* ARABIC HAMZA ABOVE */ + ["\u0655", "\u0655"], /* ARABIC HAMZA BELOW */ + ["\u0656", "\u0656"], /* ARABIC SUBSCRIPT ALEF */ + ["\u0657", "\u0657"], /* ARABIC INVERTED DAMMA */ + ["\u0658", "\u0658"], /* ARABIC MARK NOON GHUNNA */ + ["\u0659", "\u0659"], /* ARABIC ZWARAKAY */ + ["\u065A", "\u065A"], /* ARABIC VOWEL SIGN SMALL V ABOVE */ + ["\u065B", "\u065B"], /* ARABIC VOWEL SIGN INVERTED SMALL V ABOVE */ + ["\u065C", "\u065C"], /* ARABIC VOWEL SIGN DOT BELOW */ + ["\u065D", "\u065D"], /* ARABIC REVERSED DAMMA */ + ["\u065E", "\u065E"], /* ARABIC FATHA WITH TWO DOTS */ + ["\u065F", "\u065F"], /* ARABIC WAVY HAMZA BELOW */ + ["\u0660", "\u0660"], /* ARABIC-INDIC DIGIT ZERO */ + ["\u0661", "\u0661"], /* ARABIC-INDIC DIGIT ONE */ + ["\u0662", "\u0662"], /* ARABIC-INDIC DIGIT TWO */ + ["\u0663", "\u0663"], /* ARABIC-INDIC DIGIT THREE */ + ["\u0664", "\u0664"], /* ARABIC-INDIC DIGIT FOUR */ + ["\u0665", "\u0665"], /* ARABIC-INDIC DIGIT FIVE */ + ["\u0666", "\u0666"], /* ARABIC-INDIC DIGIT SIX */ + ["\u0667", "\u0667"], /* ARABIC-INDIC DIGIT SEVEN */ + ["\u0668", "\u0668"], /* ARABIC-INDIC DIGIT EIGHT */ + ["\u0669", "\u0669"], /* ARABIC-INDIC DIGIT NINE */ + ["\u066A", "\u066A"], /* ARABIC PERCENT SIGN */ + ["\u066B", "\u066B"], /* ARABIC DECIMAL SEPARATOR */ + ["\u066C", "\u066C"], /* ARABIC THOUSANDS SEPARATOR */ + ["\u066D", "\u066D"], /* ARABIC FIVE POINTED STAR */ + ["\u066E", "\u066E"], /* ARABIC LETTER DOTLESS BEH */ + ["\u066F", "\u066F"], /* ARABIC LETTER DOTLESS QAF */ + ["\u0670", "\u0670"], /* ARABIC LETTER SUPERSCRIPT ALEF (ARABIC ALEF ABOVE) */ + ["\u0671", "\u0671"], /* ARABIC LETTER ALEF WASLA (ARABIC LETTER HAMZAT WASL ON ALEF) */ + ["\u0672", "\u0672"], /* ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE (ARABIC LETTER WAVY HAMZAH ON ALEF) */ + ["\u0673", "\u0673"], /* ARABIC LETTER ALEF WITH WAVY HAMZA BELOW (ARABIC LETTER WAVY HAMZAH UNDER ALEF) */ + ["\u0674", "\u0674"], /* ARABIC LETTER HIGH HAMZA (ARABIC LETTER HIGH HAMZAH) */ + ["\u0675", "\u0675"], /* ARABIC LETTER HIGH HAMZA ALEF (ARABIC LETTER HIGH HAMZAH ALEF) */ + ["\u0676", "\u0676"], /* ARABIC LETTER HIGH HAMZA WAW (ARABIC LETTER HIGH HAMZAH WAW) */ + ["\u0677", "\u0677"], /* ARABIC LETTER U WITH HAMZA ABOVE (ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH) */ + ["\u0678", "\u0678"], /* ARABIC LETTER HIGH HAMZA YEH (ARABIC LETTER HIGH HAMZAH YA) */ + ["\u0679", "\u0679"], /* ARABIC LETTER TTEH (ARABIC LETTER TAA WITH SMALL TAH) */ + ["\u067A", "\u067A"], /* ARABIC LETTER TTEHEH (ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE) */ + ["\u067B", "\u067B"], /* ARABIC LETTER BEEH (ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW) */ + ["\u067C", "\u067C"], /* ARABIC LETTER TEH WITH RING (ARABIC LETTER TAA WITH RING) */ + ["\u067D", "\u067D"], /* ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS (ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD) */ + ["\u067E", "\u067E"], /* ARABIC LETTER PEH (ARABIC LETTER TAA WITH THREE DOTS BELOW) */ + ["\u067F", "\u067F"], /* ARABIC LETTER TEHEH (ARABIC LETTER TAA WITH FOUR DOTS ABOVE) */ + ["\u0680", "\u0680"], /* ARABIC LETTER BEHEH (ARABIC LETTER BAA WITH FOUR DOTS BELOW) */ + ["\u0681", "\u0681"], /* ARABIC LETTER HAH WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON HAA) */ + ["\u0682", "\u0682"], /* ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE (ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE) */ + ["\u0683", "\u0683"], /* ARABIC LETTER NYEH (ARABIC LETTER HAA WITH MIDDLE TWO DOTS) */ + ["\u0684", "\u0684"], /* ARABIC LETTER DYEH (ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL) */ + ["\u0685", "\u0685"], /* ARABIC LETTER HAH WITH THREE DOTS ABOVE (ARABIC LETTER HAA WITH THREE DOTS ABOVE) */ + ["\u0686", "\u0686"], /* ARABIC LETTER TCHEH (ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD) */ + ["\u0687", "\u0687"], /* ARABIC LETTER TCHEHEH (ARABIC LETTER HAA WITH MIDDLE FOUR DOTS) */ + ["\u0688", "\u0688"], /* ARABIC LETTER DDAL (ARABIC LETTER DAL WITH SMALL TAH) */ + ["\u0689", "\u0689"], /* ARABIC LETTER DAL WITH RING */ + ["\u068A", "\u068A"], /* ARABIC LETTER DAL WITH DOT BELOW */ + ["\u068B", "\u068B"], /* ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH */ + ["\u068C", "\u068C"], /* ARABIC LETTER DAHAL (ARABIC LETTER DAL WITH TWO DOTS ABOVE) */ + ["\u068D", "\u068D"], /* ARABIC LETTER DDAHAL (ARABIC LETTER DAL WITH TWO DOTS BELOW) */ + ["\u068E", "\u068E"], /* ARABIC LETTER DUL (ARABIC LETTER DAL WITH THREE DOTS ABOVE) */ + ["\u068F", "\u068F"], /* ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS (ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD) */ + ["\u0690", "\u0690"], /* ARABIC LETTER DAL WITH FOUR DOTS ABOVE */ + ["\u0691", "\u0691"], /* ARABIC LETTER RREH (ARABIC LETTER RA WITH SMALL TAH) */ + ["\u0692", "\u0692"], /* ARABIC LETTER REH WITH SMALL V (ARABIC LETTER RA WITH SMALL V) */ + ["\u0693", "\u0693"], /* ARABIC LETTER REH WITH RING (ARABIC LETTER RA WITH RING) */ + ["\u0694", "\u0694"], /* ARABIC LETTER REH WITH DOT BELOW (ARABIC LETTER RA WITH DOT BELOW) */ + ["\u0695", "\u0695"], /* ARABIC LETTER REH WITH SMALL V BELOW (ARABIC LETTER RA WITH SMALL V BELOW) */ + ["\u0696", "\u0696"], /* ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE (ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE) */ + ["\u0697", "\u0697"], /* ARABIC LETTER REH WITH TWO DOTS ABOVE (ARABIC LETTER RA WITH TWO DOTS ABOVE) */ + ["\u0698", "\u0698"], /* ARABIC LETTER JEH (ARABIC LETTER RA WITH THREE DOTS ABOVE) */ + ["\u0699", "\u0699"], /* ARABIC LETTER REH WITH FOUR DOTS ABOVE (ARABIC LETTER RA WITH FOUR DOTS ABOVE) */ + ["\u069A", "\u069A"], /* ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE */ + ["\u069B", "\u069B"], /* ARABIC LETTER SEEN WITH THREE DOTS BELOW */ + ["\u069C", "\u069C"], /* ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE */ + ["\u069D", "\u069D"], /* ARABIC LETTER SAD WITH TWO DOTS BELOW */ + ["\u069E", "\u069E"], /* ARABIC LETTER SAD WITH THREE DOTS ABOVE */ + ["\u069F", "\u069F"], /* ARABIC LETTER TAH WITH THREE DOTS ABOVE */ + ["\u06A0", "\u06A0"], /* ARABIC LETTER AIN WITH THREE DOTS ABOVE */ + ["\u06A1", "\u06A1"], /* ARABIC LETTER DOTLESS FEH (ARABIC LETTER DOTLESS FA) */ + ["\u06A2", "\u06A2"], /* ARABIC LETTER FEH WITH DOT MOVED BELOW (ARABIC LETTER FA WITH DOT MOVED BELOW) */ + ["\u06A3", "\u06A3"], /* ARABIC LETTER FEH WITH DOT BELOW (ARABIC LETTER FA WITH DOT BELOW) */ + ["\u06A4", "\u06A4"], /* ARABIC LETTER VEH (ARABIC LETTER FA WITH THREE DOTS ABOVE) */ + ["\u06A5", "\u06A5"], /* ARABIC LETTER FEH WITH THREE DOTS BELOW (ARABIC LETTER FA WITH THREE DOTS BELOW) */ + ["\u06A6", "\u06A6"], /* ARABIC LETTER PEHEH (ARABIC LETTER FA WITH FOUR DOTS ABOVE) */ + ["\u06A7", "\u06A7"], /* ARABIC LETTER QAF WITH DOT ABOVE */ + ["\u06A8", "\u06A8"], /* ARABIC LETTER QAF WITH THREE DOTS ABOVE */ + ["\u06A9", "\u06A9"], /* ARABIC LETTER KEHEH (ARABIC LETTER OPEN CAF) */ + ["\u06AA", "\u06AA"], /* ARABIC LETTER SWASH KAF (ARABIC LETTER SWASH CAF) */ + ["\u06AB", "\u06AB"], /* ARABIC LETTER KAF WITH RING (ARABIC LETTER CAF WITH RING) */ + ["\u06AC", "\u06AC"], /* ARABIC LETTER KAF WITH DOT ABOVE (ARABIC LETTER CAF WITH DOT ABOVE) */ + ["\u06AD", "\u06AD"], /* ARABIC LETTER NG (ARABIC LETTER CAF WITH THREE DOTS ABOVE) */ + ["\u06AE", "\u06AE"], /* ARABIC LETTER KAF WITH THREE DOTS BELOW (ARABIC LETTER CAF WITH THREE DOTS BELOW) */ + ["\u06AF", "\u06AF"], /* ARABIC LETTER GAF */ + ["\u06B0", "\u06B0"], /* ARABIC LETTER GAF WITH RING */ + ["\u06B1", "\u06B1"], /* ARABIC LETTER NGOEH (ARABIC LETTER GAF WITH TWO DOTS ABOVE) */ + ["\u06B2", "\u06B2"], /* ARABIC LETTER GAF WITH TWO DOTS BELOW */ + ["\u06B3", "\u06B3"], /* ARABIC LETTER GUEH (ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW) */ + ["\u06B4", "\u06B4"], /* ARABIC LETTER GAF WITH THREE DOTS ABOVE */ + ["\u06B5", "\u06B5"], /* ARABIC LETTER LAM WITH SMALL V */ + ["\u06B6", "\u06B6"], /* ARABIC LETTER LAM WITH DOT ABOVE */ + ["\u06B7", "\u06B7"], /* ARABIC LETTER LAM WITH THREE DOTS ABOVE */ + ["\u06B8", "\u06B8"], /* ARABIC LETTER LAM WITH THREE DOTS BELOW */ + ["\u06B9", "\u06B9"], /* ARABIC LETTER NOON WITH DOT BELOW */ + ["\u06BA", "\u06BA"], /* ARABIC LETTER NOON GHUNNA (ARABIC LETTER DOTLESS NOON) */ + ["\u06BB", "\u06BB"], /* ARABIC LETTER RNOON (ARABIC LETTER DOTLESS NOON WITH SMALL TAH) */ + ["\u06BC", "\u06BC"], /* ARABIC LETTER NOON WITH RING */ + ["\u06BD", "\u06BD"], /* ARABIC LETTER NOON WITH THREE DOTS ABOVE */ + ["\u06BE", "\u06BE"], /* ARABIC LETTER HEH DOACHASHMEE (ARABIC LETTER KNOTTED HA) */ + ["\u06BF", "\u06BF"], /* ARABIC LETTER TCHEH WITH DOT ABOVE */ + ["\u06C0", "\u06C0"], /* ARABIC LETTER HEH WITH YEH ABOVE (ARABIC LETTER HAMZAH ON HA) */ + ["\u06C1", "\u06C1"], /* ARABIC LETTER HEH GOAL (ARABIC LETTER HA GOAL) */ + ["\u06C2", "\u06C2"], /* ARABIC LETTER HEH GOAL WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON HA GOAL) */ + ["\u06C3", "\u06C3"], /* ARABIC LETTER TEH MARBUTA GOAL (ARABIC LETTER TAA MARBUTAH GOAL) */ + ["\u06C4", "\u06C4"], /* ARABIC LETTER WAW WITH RING */ + ["\u06C5", "\u06C5"], /* ARABIC LETTER KIRGHIZ OE (ARABIC LETTER WAW WITH BAR) */ + ["\u06C6", "\u06C6"], /* ARABIC LETTER OE (ARABIC LETTER WAW WITH SMALL V) */ + ["\u06C7", "\u06C7"], /* ARABIC LETTER U (ARABIC LETTER WAW WITH DAMMAH) */ + ["\u06C8", "\u06C8"], /* ARABIC LETTER YU (ARABIC LETTER WAW WITH ALEF ABOVE) */ + ["\u06C9", "\u06C9"], /* ARABIC LETTER KIRGHIZ YU (ARABIC LETTER WAW WITH INVERTED SMALL V) */ + ["\u06CA", "\u06CA"], /* ARABIC LETTER WAW WITH TWO DOTS ABOVE */ + ["\u06CB", "\u06CB"], /* ARABIC LETTER VE (ARABIC LETTER WAW WITH THREE DOTS ABOVE) */ + ["\u06CC", "\u06CC"], /* ARABIC LETTER FARSI YEH (ARABIC LETTER DOTLESS YA) */ + ["\u06CD", "\u06CD"], /* ARABIC LETTER YEH WITH TAIL (ARABIC LETTER YA WITH TAIL) */ + ["\u06CE", "\u06CE"], /* ARABIC LETTER YEH WITH SMALL V (ARABIC LETTER YA WITH SMALL V) */ + ["\u06CF", "\u06CF"], /* ARABIC LETTER WAW WITH DOT ABOVE */ + ["\u06D0", "\u06D0"], /* ARABIC LETTER E (ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW) */ + ["\u06D1", "\u06D1"], /* ARABIC LETTER YEH WITH THREE DOTS BELOW (ARABIC LETTER YA WITH THREE DOTS BELOW) */ + ["\u06D2", "\u06D2"], /* ARABIC LETTER YEH BARREE (ARABIC LETTER YA BARREE) */ + ["\u06D3", "\u06D3"], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON YA BARREE) */ + ["\u06D4", "\u06D4"], /* ARABIC FULL STOP (ARABIC PERIOD) */ + ["\u06D5", "\u06D5"], /* ARABIC LETTER AE */ + ["\u06D6", "\u06D6"], /* ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA */ + ["\u06D7", "\u06D7"], /* ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA */ + ["\u06D8", "\u06D8"], /* ARABIC SMALL HIGH MEEM INITIAL FORM */ + ["\u06D9", "\u06D9"], /* ARABIC SMALL HIGH LAM ALEF */ + ["\u06DA", "\u06DA"], /* ARABIC SMALL HIGH JEEM */ + ["\u06DB", "\u06DB"], /* ARABIC SMALL HIGH THREE DOTS */ + ["\u06DC", "\u06DC"], /* ARABIC SMALL HIGH SEEN */ + ["\u06DD", "\u06DD"], /* ARABIC END OF AYAH */ + ["\u06DE", "\u06DE"], /* ARABIC START OF RUB EL HIZB */ + ["\u06DF", "\u06DF"], /* ARABIC SMALL HIGH ROUNDED ZERO */ + ["\u06E0", "\u06E0"], /* ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO */ + ["\u06E1", "\u06E1"], /* ARABIC SMALL HIGH DOTLESS HEAD OF KHAH */ + ["\u06E2", "\u06E2"], /* ARABIC SMALL HIGH MEEM ISOLATED FORM */ + ["\u06E3", "\u06E3"], /* ARABIC SMALL LOW SEEN */ + ["\u06E4", "\u06E4"], /* ARABIC SMALL HIGH MADDA */ + ["\u06E5", "\u06E5"], /* ARABIC SMALL WAW */ + ["\u06E6", "\u06E6"], /* ARABIC SMALL YEH */ + ["\u06E7", "\u06E7"], /* ARABIC SMALL HIGH YEH */ + ["\u06E8", "\u06E8"], /* ARABIC SMALL HIGH NOON */ + ["\u06E9", "\u06E9"], /* ARABIC PLACE OF SAJDAH */ + ["\u06EA", "\u06EA"], /* ARABIC EMPTY CENTRE LOW STOP */ + ["\u06EB", "\u06EB"], /* ARABIC EMPTY CENTRE HIGH STOP */ + ["\u06EC", "\u06EC"], /* ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE */ + ["\u06ED", "\u06ED"], /* ARABIC SMALL LOW MEEM */ + ["\u06EE", "\u06EE"], /* ARABIC LETTER DAL WITH INVERTED V */ + ["\u06EF", "\u06EF"], /* ARABIC LETTER REH WITH INVERTED V */ + ["\u06F0", "\u06F0"], /* EXTENDED ARABIC-INDIC DIGIT ZERO (EASTERN ARABIC-INDIC DIGIT ZERO) */ + ["\u06F1", "\u06F1"], /* EXTENDED ARABIC-INDIC DIGIT ONE (EASTERN ARABIC-INDIC DIGIT ONE) */ + ["\u06F2", "\u06F2"], /* EXTENDED ARABIC-INDIC DIGIT TWO (EASTERN ARABIC-INDIC DIGIT TWO) */ + ["\u06F3", "\u06F3"], /* EXTENDED ARABIC-INDIC DIGIT THREE (EASTERN ARABIC-INDIC DIGIT THREE) */ + ["\u06F4", "\u06F4"], /* EXTENDED ARABIC-INDIC DIGIT FOUR (EASTERN ARABIC-INDIC DIGIT FOUR) */ + ["\u06F5", "\u06F5"], /* EXTENDED ARABIC-INDIC DIGIT FIVE (EASTERN ARABIC-INDIC DIGIT FIVE) */ + ["\u06F6", "\u06F6"], /* EXTENDED ARABIC-INDIC DIGIT SIX (EASTERN ARABIC-INDIC DIGIT SIX) */ + ["\u06F7", "\u06F7"], /* EXTENDED ARABIC-INDIC DIGIT SEVEN (EASTERN ARABIC-INDIC DIGIT SEVEN) */ + ["\u06F8", "\u06F8"], /* EXTENDED ARABIC-INDIC DIGIT EIGHT (EASTERN ARABIC-INDIC DIGIT EIGHT) */ + ["\u06F9", "\u06F9"], /* EXTENDED ARABIC-INDIC DIGIT NINE (EASTERN ARABIC-INDIC DIGIT NINE) */ + ["\u06FA", "\u06FA"], /* ARABIC LETTER SHEEN WITH DOT BELOW */ + ["\u06FB", "\u06FB"], /* ARABIC LETTER DAD WITH DOT BELOW */ + ["\u06FC", "\u06FC"], /* ARABIC LETTER GHAIN WITH DOT BELOW */ + ["\u06FD", "\u06FD"], /* ARABIC SIGN SINDHI AMPERSAND */ + ["\u06FE", "\u06FE"], /* ARABIC SIGN SINDHI POSTPOSITION MEN */ + ["\u06FF", "\u06FF"], /* ARABIC LETTER HEH WITH INVERTED V */ + ["\u0700", "\u0700"], /* SYRIAC END OF PARAGRAPH */ + ["\u0701", "\u0701"], /* SYRIAC SUPRALINEAR FULL STOP */ + ["\u0702", "\u0702"], /* SYRIAC SUBLINEAR FULL STOP */ + ["\u0703", "\u0703"], /* SYRIAC SUPRALINEAR COLON */ + ["\u0704", "\u0704"], /* SYRIAC SUBLINEAR COLON */ + ["\u0705", "\u0705"], /* SYRIAC HORIZONTAL COLON */ + ["\u0706", "\u0706"], /* SYRIAC COLON SKEWED LEFT */ + ["\u0707", "\u0707"], /* SYRIAC COLON SKEWED RIGHT */ + ["\u0708", "\u0708"], /* SYRIAC SUPRALINEAR COLON SKEWED LEFT */ + ["\u0709", "\u0709"], /* SYRIAC SUBLINEAR COLON SKEWED RIGHT */ + ["\u070A", "\u070A"], /* SYRIAC CONTRACTION */ + ["\u070B", "\u070B"], /* SYRIAC HARKLEAN OBELUS */ + ["\u070C", "\u070C"], /* SYRIAC HARKLEAN METOBELUS */ + ["\u070D", "\u070D"], /* SYRIAC HARKLEAN ASTERISCUS */ + ["\u070E", "\u070E"], + ["\u070F", "\u070F"], /* SYRIAC ABBREVIATION MARK */ + ["\u0710", "\u0710"], /* SYRIAC LETTER ALAPH */ + ["\u0711", "\u0711"], /* SYRIAC LETTER SUPERSCRIPT ALAPH */ + ["\u0712", "\u0712"], /* SYRIAC LETTER BETH */ + ["\u0713", "\u0713"], /* SYRIAC LETTER GAMAL */ + ["\u0714", "\u0714"], /* SYRIAC LETTER GAMAL GARSHUNI */ + ["\u0715", "\u0715"], /* SYRIAC LETTER DALATH */ + ["\u0716", "\u0716"], /* SYRIAC LETTER DOTLESS DALATH RISH */ + ["\u0717", "\u0717"], /* SYRIAC LETTER HE */ + ["\u0718", "\u0718"], /* SYRIAC LETTER WAW */ + ["\u0719", "\u0719"], /* SYRIAC LETTER ZAIN */ + ["\u071A", "\u071A"], /* SYRIAC LETTER HETH */ + ["\u071B", "\u071B"], /* SYRIAC LETTER TETH */ + ["\u071C", "\u071C"], /* SYRIAC LETTER TETH GARSHUNI */ + ["\u071D", "\u071D"], /* SYRIAC LETTER YUDH */ + ["\u071E", "\u071E"], /* SYRIAC LETTER YUDH HE */ + ["\u071F", "\u071F"], /* SYRIAC LETTER KAPH */ + ["\u0720", "\u0720"], /* SYRIAC LETTER LAMADH */ + ["\u0721", "\u0721"], /* SYRIAC LETTER MIM */ + ["\u0722", "\u0722"], /* SYRIAC LETTER NUN */ + ["\u0723", "\u0723"], /* SYRIAC LETTER SEMKATH */ + ["\u0724", "\u0724"], /* SYRIAC LETTER FINAL SEMKATH */ + ["\u0725", "\u0725"], /* SYRIAC LETTER E */ + ["\u0726", "\u0726"], /* SYRIAC LETTER PE */ + ["\u0727", "\u0727"], /* SYRIAC LETTER REVERSED PE */ + ["\u0728", "\u0728"], /* SYRIAC LETTER SADHE */ + ["\u0729", "\u0729"], /* SYRIAC LETTER QAPH */ + ["\u072A", "\u072A"], /* SYRIAC LETTER RISH */ + ["\u072B", "\u072B"], /* SYRIAC LETTER SHIN */ + ["\u072C", "\u072C"], /* SYRIAC LETTER TAW */ + ["\u072D", "\u072D"], /* SYRIAC LETTER PERSIAN BHETH */ + ["\u072E", "\u072E"], /* SYRIAC LETTER PERSIAN GHAMAL */ + ["\u072F", "\u072F"], /* SYRIAC LETTER PERSIAN DHALATH */ + ["\u0730", "\u0730"], /* SYRIAC PTHAHA ABOVE */ + ["\u0731", "\u0731"], /* SYRIAC PTHAHA BELOW */ + ["\u0732", "\u0732"], /* SYRIAC PTHAHA DOTTED */ + ["\u0733", "\u0733"], /* SYRIAC ZQAPHA ABOVE */ + ["\u0734", "\u0734"], /* SYRIAC ZQAPHA BELOW */ + ["\u0735", "\u0735"], /* SYRIAC ZQAPHA DOTTED */ + ["\u0736", "\u0736"], /* SYRIAC RBASA ABOVE */ + ["\u0737", "\u0737"], /* SYRIAC RBASA BELOW */ + ["\u0738", "\u0738"], /* SYRIAC DOTTED ZLAMA HORIZONTAL */ + ["\u0739", "\u0739"], /* SYRIAC DOTTED ZLAMA ANGULAR */ + ["\u073A", "\u073A"], /* SYRIAC HBASA ABOVE */ + ["\u073B", "\u073B"], /* SYRIAC HBASA BELOW */ + ["\u073C", "\u073C"], /* SYRIAC HBASA-ESASA DOTTED */ + ["\u073D", "\u073D"], /* SYRIAC ESASA ABOVE */ + ["\u073E", "\u073E"], /* SYRIAC ESASA BELOW */ + ["\u073F", "\u073F"], /* SYRIAC RWAHA */ + ["\u0740", "\u0740"], /* SYRIAC FEMININE DOT */ + ["\u0741", "\u0741"], /* SYRIAC QUSHSHAYA */ + ["\u0742", "\u0742"], /* SYRIAC RUKKAKHA */ + ["\u0743", "\u0743"], /* SYRIAC TWO VERTICAL DOTS ABOVE */ + ["\u0744", "\u0744"], /* SYRIAC TWO VERTICAL DOTS BELOW */ + ["\u0745", "\u0745"], /* SYRIAC THREE DOTS ABOVE */ + ["\u0746", "\u0746"], /* SYRIAC THREE DOTS BELOW */ + ["\u0747", "\u0747"], /* SYRIAC OBLIQUE LINE ABOVE */ + ["\u0748", "\u0748"], /* SYRIAC OBLIQUE LINE BELOW */ + ["\u0749", "\u0749"], /* SYRIAC MUSIC */ + ["\u074A", "\u074A"], /* SYRIAC BARREKH */ + ["\u074B", "\u074B"], + ["\u074C", "\u074C"], + ["\u074D", "\u074D"], /* SYRIAC LETTER SOGDIAN ZHAIN */ + ["\u074E", "\u074E"], /* SYRIAC LETTER SOGDIAN KHAPH */ + ["\u074F", "\u074F"], /* SYRIAC LETTER SOGDIAN FE */ + ["\u0750", "\u0750"], /* ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW */ + ["\u0751", "\u0751"], /* ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE */ + ["\u0752", "\u0752"], /* ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW */ + ["\u0753", "\u0753"], /* ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE */ + ["\u0754", "\u0754"], /* ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE */ + ["\u0755", "\u0755"], /* ARABIC LETTER BEH WITH INVERTED SMALL V BELOW */ + ["\u0756", "\u0756"], /* ARABIC LETTER BEH WITH SMALL V */ + ["\u0757", "\u0757"], /* ARABIC LETTER HAH WITH TWO DOTS ABOVE */ + ["\u0758", "\u0758"], /* ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW */ + ["\u0759", "\u0759"], /* ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH */ + ["\u075A", "\u075A"], /* ARABIC LETTER DAL WITH INVERTED SMALL V BELOW */ + ["\u075B", "\u075B"], /* ARABIC LETTER REH WITH STROKE */ + ["\u075C", "\u075C"], /* ARABIC LETTER SEEN WITH FOUR DOTS ABOVE */ + ["\u075D", "\u075D"], /* ARABIC LETTER AIN WITH TWO DOTS ABOVE */ + ["\u075E", "\u075E"], /* ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE */ + ["\u075F", "\u075F"], /* ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE */ + ["\u0760", "\u0760"], /* ARABIC LETTER FEH WITH TWO DOTS BELOW */ + ["\u0761", "\u0761"], /* ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW */ + ["\u0762", "\u0762"], /* ARABIC LETTER KEHEH WITH DOT ABOVE */ + ["\u0763", "\u0763"], /* ARABIC LETTER KEHEH WITH THREE DOTS ABOVE */ + ["\u0764", "\u0764"], /* ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW */ + ["\u0765", "\u0765"], /* ARABIC LETTER MEEM WITH DOT ABOVE */ + ["\u0766", "\u0766"], /* ARABIC LETTER MEEM WITH DOT BELOW */ + ["\u0767", "\u0767"], /* ARABIC LETTER NOON WITH TWO DOTS BELOW */ + ["\u0768", "\u0768"], /* ARABIC LETTER NOON WITH SMALL TAH */ + ["\u0769", "\u0769"], /* ARABIC LETTER NOON WITH SMALL V */ + ["\u076A", "\u076A"], /* ARABIC LETTER LAM WITH BAR */ + ["\u076B", "\u076B"], /* ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE */ + ["\u076C", "\u076C"], /* ARABIC LETTER REH WITH HAMZA ABOVE */ + ["\u076D", "\u076D"], /* ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE */ + ["\u076E", "\u076E"], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW */ + ["\u076F", "\u076F"], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS */ + ["\u0770", "\u0770"], /* ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS */ + ["\u0771", "\u0771"], /* ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS */ + ["\u0772", "\u0772"], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE */ + ["\u0773", "\u0773"], /* ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + ["\u0774", "\u0774"], /* ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + ["\u0775", "\u0775"], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + ["\u0776", "\u0776"], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + ["\u0777", "\u0777"], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW */ + ["\u0778", "\u0778"], /* ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + ["\u0779", "\u0779"], /* ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + ["\u077A", "\u077A"], /* ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + ["\u077B", "\u077B"], /* ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + ["\u077C", "\u077C"], /* ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW */ + ["\u077D", "\u077D"], /* ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE */ + ["\u077E", "\u077E"], /* ARABIC LETTER SEEN WITH INVERTED V */ + ["\u077F", "\u077F"], /* ARABIC LETTER KAF WITH TWO DOTS ABOVE */ + ["\u0780", "\u0780"], /* THAANA LETTER HAA */ + ["\u0781", "\u0781"], /* THAANA LETTER SHAVIYANI */ + ["\u0782", "\u0782"], /* THAANA LETTER NOONU */ + ["\u0783", "\u0783"], /* THAANA LETTER RAA */ + ["\u0784", "\u0784"], /* THAANA LETTER BAA */ + ["\u0785", "\u0785"], /* THAANA LETTER LHAVIYANI */ + ["\u0786", "\u0786"], /* THAANA LETTER KAAFU */ + ["\u0787", "\u0787"], /* THAANA LETTER ALIFU */ + ["\u0788", "\u0788"], /* THAANA LETTER VAAVU */ + ["\u0789", "\u0789"], /* THAANA LETTER MEEMU */ + ["\u078A", "\u078A"], /* THAANA LETTER FAAFU */ + ["\u078B", "\u078B"], /* THAANA LETTER DHAALU */ + ["\u078C", "\u078C"], /* THAANA LETTER THAA */ + ["\u078D", "\u078D"], /* THAANA LETTER LAAMU */ + ["\u078E", "\u078E"], /* THAANA LETTER GAAFU */ + ["\u078F", "\u078F"], /* THAANA LETTER GNAVIYANI */ + ["\u0790", "\u0790"], /* THAANA LETTER SEENU */ + ["\u0791", "\u0791"], /* THAANA LETTER DAVIYANI */ + ["\u0792", "\u0792"], /* THAANA LETTER ZAVIYANI */ + ["\u0793", "\u0793"], /* THAANA LETTER TAVIYANI */ + ["\u0794", "\u0794"], /* THAANA LETTER YAA */ + ["\u0795", "\u0795"], /* THAANA LETTER PAVIYANI */ + ["\u0796", "\u0796"], /* THAANA LETTER JAVIYANI */ + ["\u0797", "\u0797"], /* THAANA LETTER CHAVIYANI */ + ["\u0798", "\u0798"], /* THAANA LETTER TTAA */ + ["\u0799", "\u0799"], /* THAANA LETTER HHAA */ + ["\u079A", "\u079A"], /* THAANA LETTER KHAA */ + ["\u079B", "\u079B"], /* THAANA LETTER THAALU */ + ["\u079C", "\u079C"], /* THAANA LETTER ZAA */ + ["\u079D", "\u079D"], /* THAANA LETTER SHEENU */ + ["\u079E", "\u079E"], /* THAANA LETTER SAADHU */ + ["\u079F", "\u079F"], /* THAANA LETTER DAADHU */ + ["\u07A0", "\u07A0"], /* THAANA LETTER TO */ + ["\u07A1", "\u07A1"], /* THAANA LETTER ZO */ + ["\u07A2", "\u07A2"], /* THAANA LETTER AINU */ + ["\u07A3", "\u07A3"], /* THAANA LETTER GHAINU */ + ["\u07A4", "\u07A4"], /* THAANA LETTER QAAFU */ + ["\u07A5", "\u07A5"], /* THAANA LETTER WAAVU */ + ["\u07A6", "\u07A6"], /* THAANA ABAFILI */ + ["\u07A7", "\u07A7"], /* THAANA AABAAFILI */ + ["\u07A8", "\u07A8"], /* THAANA IBIFILI */ + ["\u07A9", "\u07A9"], /* THAANA EEBEEFILI */ + ["\u07AA", "\u07AA"], /* THAANA UBUFILI */ + ["\u07AB", "\u07AB"], /* THAANA OOBOOFILI */ + ["\u07AC", "\u07AC"], /* THAANA EBEFILI */ + ["\u07AD", "\u07AD"], /* THAANA EYBEYFILI */ + ["\u07AE", "\u07AE"], /* THAANA OBOFILI */ + ["\u07AF", "\u07AF"], /* THAANA OABOAFILI */ + ["\u07B0", "\u07B0"], /* THAANA SUKUN */ + ["\u07B1", "\u07B1"], /* THAANA LETTER NAA */ + ["\u07B2", "\u07B2"], + ["\u07B3", "\u07B3"], + ["\u07B4", "\u07B4"], + ["\u07B5", "\u07B5"], + ["\u07B6", "\u07B6"], + ["\u07B7", "\u07B7"], + ["\u07B8", "\u07B8"], + ["\u07B9", "\u07B9"], + ["\u07BA", "\u07BA"], + ["\u07BB", "\u07BB"], + ["\u07BC", "\u07BC"], + ["\u07BD", "\u07BD"], + ["\u07BE", "\u07BE"], + ["\u07BF", "\u07BF"], + ["\u07C0", "\u07C0"], /* NKO DIGIT ZERO */ + ["\u07C1", "\u07C1"], /* NKO DIGIT ONE */ + ["\u07C2", "\u07C2"], /* NKO DIGIT TWO */ + ["\u07C3", "\u07C3"], /* NKO DIGIT THREE */ + ["\u07C4", "\u07C4"], /* NKO DIGIT FOUR */ + ["\u07C5", "\u07C5"], /* NKO DIGIT FIVE */ + ["\u07C6", "\u07C6"], /* NKO DIGIT SIX */ + ["\u07C7", "\u07C7"], /* NKO DIGIT SEVEN */ + ["\u07C8", "\u07C8"], /* NKO DIGIT EIGHT */ + ["\u07C9", "\u07C9"], /* NKO DIGIT NINE */ + ["\u07CA", "\u07CA"], /* NKO LETTER A */ + ["\u07CB", "\u07CB"], /* NKO LETTER EE */ + ["\u07CC", "\u07CC"], /* NKO LETTER I */ + ["\u07CD", "\u07CD"], /* NKO LETTER E */ + ["\u07CE", "\u07CE"], /* NKO LETTER U */ + ["\u07CF", "\u07CF"], /* NKO LETTER OO */ + ["\u07D0", "\u07D0"], /* NKO LETTER O */ + ["\u07D1", "\u07D1"], /* NKO LETTER DAGBASINNA */ + ["\u07D2", "\u07D2"], /* NKO LETTER N */ + ["\u07D3", "\u07D3"], /* NKO LETTER BA */ + ["\u07D4", "\u07D4"], /* NKO LETTER PA */ + ["\u07D5", "\u07D5"], /* NKO LETTER TA */ + ["\u07D6", "\u07D6"], /* NKO LETTER JA */ + ["\u07D7", "\u07D7"], /* NKO LETTER CHA */ + ["\u07D8", "\u07D8"], /* NKO LETTER DA */ + ["\u07D9", "\u07D9"], /* NKO LETTER RA */ + ["\u07DA", "\u07DA"], /* NKO LETTER RRA */ + ["\u07DB", "\u07DB"], /* NKO LETTER SA */ + ["\u07DC", "\u07DC"], /* NKO LETTER GBA */ + ["\u07DD", "\u07DD"], /* NKO LETTER FA */ + ["\u07DE", "\u07DE"], /* NKO LETTER KA */ + ["\u07DF", "\u07DF"], /* NKO LETTER LA */ + ["\u07E0", "\u07E0"], /* NKO LETTER NA WOLOSO */ + ["\u07E1", "\u07E1"], /* NKO LETTER MA */ + ["\u07E2", "\u07E2"], /* NKO LETTER NYA */ + ["\u07E3", "\u07E3"], /* NKO LETTER NA */ + ["\u07E4", "\u07E4"], /* NKO LETTER HA */ + ["\u07E5", "\u07E5"], /* NKO LETTER WA */ + ["\u07E6", "\u07E6"], /* NKO LETTER YA */ + ["\u07E7", "\u07E7"], /* NKO LETTER NYA WOLOSO */ + ["\u07E8", "\u07E8"], /* NKO LETTER JONA JA */ + ["\u07E9", "\u07E9"], /* NKO LETTER JONA CHA */ + ["\u07EA", "\u07EA"], /* NKO LETTER JONA RA */ + ["\u07EB", "\u07EB"], /* NKO COMBINING SHORT HIGH TONE */ + ["\u07EC", "\u07EC"], /* NKO COMBINING SHORT LOW TONE */ + ["\u07ED", "\u07ED"], /* NKO COMBINING SHORT RISING TONE */ + ["\u07EE", "\u07EE"], /* NKO COMBINING LONG DESCENDING TONE */ + ["\u07EF", "\u07EF"], /* NKO COMBINING LONG HIGH TONE */ + ["\u07F0", "\u07F0"], /* NKO COMBINING LONG LOW TONE */ + ["\u07F1", "\u07F1"], /* NKO COMBINING LONG RISING TONE */ + ["\u07F2", "\u07F2"], /* NKO COMBINING NASALIZATION MARK */ + ["\u07F3", "\u07F3"], /* NKO COMBINING DOUBLE DOT ABOVE */ + ["\u07F4", "\u07F4"], /* NKO HIGH TONE APOSTROPHE */ + ["\u07F5", "\u07F5"], /* NKO LOW TONE APOSTROPHE */ + ["\u07F6", "\u07F6"], /* NKO SYMBOL OO DENNEN */ + ["\u07F7", "\u07F7"], /* NKO SYMBOL GBAKURUNEN */ + ["\u07F8", "\u07F8"], /* NKO COMMA */ + ["\u07F9", "\u07F9"], /* NKO EXCLAMATION MARK */ + ["\u07FA", "\u07FA"], /* NKO LAJANYALAN */ + ["\u07FB", "\u07FB"], + ["\u07FC", "\u07FC"], + ["\u07FD", "\u07FD"], /* NKO DANTAYALAN */ + ["\u07FE", "\u07FE"], /* NKO DOROME SIGN */ + ["\u07FF", "\u07FF"], /* NKO TAMAN SIGN */ + ["\u0800", "\u0800"], /* SAMARITAN LETTER ALAF */ + ["\u0801", "\u0801"], /* SAMARITAN LETTER BIT */ + ["\u0802", "\u0802"], /* SAMARITAN LETTER GAMAN */ + ["\u0803", "\u0803"], /* SAMARITAN LETTER DALAT */ + ["\u0804", "\u0804"], /* SAMARITAN LETTER IY */ + ["\u0805", "\u0805"], /* SAMARITAN LETTER BAA */ + ["\u0806", "\u0806"], /* SAMARITAN LETTER ZEN */ + ["\u0807", "\u0807"], /* SAMARITAN LETTER IT */ + ["\u0808", "\u0808"], /* SAMARITAN LETTER TIT */ + ["\u0809", "\u0809"], /* SAMARITAN LETTER YUT */ + ["\u080A", "\u080A"], /* SAMARITAN LETTER KAAF */ + ["\u080B", "\u080B"], /* SAMARITAN LETTER LABAT */ + ["\u080C", "\u080C"], /* SAMARITAN LETTER MIM */ + ["\u080D", "\u080D"], /* SAMARITAN LETTER NUN */ + ["\u080E", "\u080E"], /* SAMARITAN LETTER SINGAAT */ + ["\u080F", "\u080F"], /* SAMARITAN LETTER IN */ + ["\u0810", "\u0810"], /* SAMARITAN LETTER FI */ + ["\u0811", "\u0811"], /* SAMARITAN LETTER TSAADIY */ + ["\u0812", "\u0812"], /* SAMARITAN LETTER QUF */ + ["\u0813", "\u0813"], /* SAMARITAN LETTER RISH */ + ["\u0814", "\u0814"], /* SAMARITAN LETTER SHAN */ + ["\u0815", "\u0815"], /* SAMARITAN LETTER TAAF */ + ["\u0816", "\u0816"], /* SAMARITAN MARK IN */ + ["\u0817", "\u0817"], /* SAMARITAN MARK IN-ALAF */ + ["\u0818", "\u0818"], /* SAMARITAN MARK OCCLUSION */ + ["\u0819", "\u0819"], /* SAMARITAN MARK DAGESH */ + ["\u081A", "\u081A"], /* SAMARITAN MODIFIER LETTER EPENTHETIC YUT */ + ["\u081B", "\u081B"], /* SAMARITAN MARK EPENTHETIC YUT */ + ["\u081C", "\u081C"], /* SAMARITAN VOWEL SIGN LONG E */ + ["\u081D", "\u081D"], /* SAMARITAN VOWEL SIGN E */ + ["\u081E", "\u081E"], /* SAMARITAN VOWEL SIGN OVERLONG AA */ + ["\u081F", "\u081F"], /* SAMARITAN VOWEL SIGN LONG AA */ + ["\u0820", "\u0820"], /* SAMARITAN VOWEL SIGN AA */ + ["\u0821", "\u0821"], /* SAMARITAN VOWEL SIGN OVERLONG A */ + ["\u0822", "\u0822"], /* SAMARITAN VOWEL SIGN LONG A */ + ["\u0823", "\u0823"], /* SAMARITAN VOWEL SIGN A */ + ["\u0824", "\u0824"], /* SAMARITAN MODIFIER LETTER SHORT A */ + ["\u0825", "\u0825"], /* SAMARITAN VOWEL SIGN SHORT A */ + ["\u0826", "\u0826"], /* SAMARITAN VOWEL SIGN LONG U */ + ["\u0827", "\u0827"], /* SAMARITAN VOWEL SIGN U */ + ["\u0828", "\u0828"], /* SAMARITAN MODIFIER LETTER I */ + ["\u0829", "\u0829"], /* SAMARITAN VOWEL SIGN LONG I */ + ["\u082A", "\u082A"], /* SAMARITAN VOWEL SIGN I */ + ["\u082B", "\u082B"], /* SAMARITAN VOWEL SIGN O */ + ["\u082C", "\u082C"], /* SAMARITAN VOWEL SIGN SUKUN */ + ["\u082D", "\u082D"], /* SAMARITAN MARK NEQUDAA */ + ["\u082E", "\u082E"], + ["\u082F", "\u082F"], + ["\u0830", "\u0830"], /* SAMARITAN PUNCTUATION NEQUDAA */ + ["\u0831", "\u0831"], /* SAMARITAN PUNCTUATION AFSAAQ */ + ["\u0832", "\u0832"], /* SAMARITAN PUNCTUATION ANGED */ + ["\u0833", "\u0833"], /* SAMARITAN PUNCTUATION BAU */ + ["\u0834", "\u0834"], /* SAMARITAN PUNCTUATION ATMAAU */ + ["\u0835", "\u0835"], /* SAMARITAN PUNCTUATION SHIYYAALAA */ + ["\u0836", "\u0836"], /* SAMARITAN ABBREVIATION MARK */ + ["\u0837", "\u0837"], /* SAMARITAN PUNCTUATION MELODIC QITSA */ + ["\u0838", "\u0838"], /* SAMARITAN PUNCTUATION ZIQAA */ + ["\u0839", "\u0839"], /* SAMARITAN PUNCTUATION QITSA */ + ["\u083A", "\u083A"], /* SAMARITAN PUNCTUATION ZAEF */ + ["\u083B", "\u083B"], /* SAMARITAN PUNCTUATION TURU */ + ["\u083C", "\u083C"], /* SAMARITAN PUNCTUATION ARKAANU */ + ["\u083D", "\u083D"], /* SAMARITAN PUNCTUATION SOF MASHFAAT */ + ["\u083E", "\u083E"], /* SAMARITAN PUNCTUATION ANNAAU */ + ["\u083F", "\u083F"], + ["\u0840", "\u0840"], /* MANDAIC LETTER HALQA */ + ["\u0841", "\u0841"], /* MANDAIC LETTER AB */ + ["\u0842", "\u0842"], /* MANDAIC LETTER AG */ + ["\u0843", "\u0843"], /* MANDAIC LETTER AD */ + ["\u0844", "\u0844"], /* MANDAIC LETTER AH */ + ["\u0845", "\u0845"], /* MANDAIC LETTER USHENNA */ + ["\u0846", "\u0846"], /* MANDAIC LETTER AZ */ + ["\u0847", "\u0847"], /* MANDAIC LETTER IT */ + ["\u0848", "\u0848"], /* MANDAIC LETTER ATT */ + ["\u0849", "\u0849"], /* MANDAIC LETTER AKSA */ + ["\u084A", "\u084A"], /* MANDAIC LETTER AK */ + ["\u084B", "\u084B"], /* MANDAIC LETTER AL */ + ["\u084C", "\u084C"], /* MANDAIC LETTER AM */ + ["\u084D", "\u084D"], /* MANDAIC LETTER AN */ + ["\u084E", "\u084E"], /* MANDAIC LETTER AS */ + ["\u084F", "\u084F"], /* MANDAIC LETTER IN */ + ["\u0850", "\u0850"], /* MANDAIC LETTER AP */ + ["\u0851", "\u0851"], /* MANDAIC LETTER ASZ */ + ["\u0852", "\u0852"], /* MANDAIC LETTER AQ */ + ["\u0853", "\u0853"], /* MANDAIC LETTER AR */ + ["\u0854", "\u0854"], /* MANDAIC LETTER ASH */ + ["\u0855", "\u0855"], /* MANDAIC LETTER AT */ + ["\u0856", "\u0856"], /* MANDAIC LETTER DUSHENNA */ + ["\u0857", "\u0857"], /* MANDAIC LETTER KAD */ + ["\u0858", "\u0858"], /* MANDAIC LETTER AIN */ + ["\u0859", "\u0859"], /* MANDAIC AFFRICATION MARK */ + ["\u085A", "\u085A"], /* MANDAIC VOCALIZATION MARK */ + ["\u085B", "\u085B"], /* MANDAIC GEMINATION MARK */ + ["\u085C", "\u085C"], + ["\u085D", "\u085D"], + ["\u085E", "\u085E"], /* MANDAIC PUNCTUATION */ + ["\u085F", "\u085F"], + ["\u0860", "\u0860"], /* SYRIAC LETTER MALAYALAM NGA */ + ["\u0861", "\u0861"], /* SYRIAC LETTER MALAYALAM JA */ + ["\u0862", "\u0862"], /* SYRIAC LETTER MALAYALAM NYA */ + ["\u0863", "\u0863"], /* SYRIAC LETTER MALAYALAM TTA */ + ["\u0864", "\u0864"], /* SYRIAC LETTER MALAYALAM NNA */ + ["\u0865", "\u0865"], /* SYRIAC LETTER MALAYALAM NNNA */ + ["\u0866", "\u0866"], /* SYRIAC LETTER MALAYALAM BHA */ + ["\u0867", "\u0867"], /* SYRIAC LETTER MALAYALAM RA */ + ["\u0868", "\u0868"], /* SYRIAC LETTER MALAYALAM LLA */ + ["\u0869", "\u0869"], /* SYRIAC LETTER MALAYALAM LLLA */ + ["\u086A", "\u086A"], /* SYRIAC LETTER MALAYALAM SSA */ + ["\u086B", "\u086B"], + ["\u086C", "\u086C"], + ["\u086D", "\u086D"], + ["\u086E", "\u086E"], + ["\u086F", "\u086F"], + ["\u0870", "\u0870"], /* ARABIC LETTER ALEF WITH ATTACHED FATHA */ + ["\u0871", "\u0871"], /* ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA */ + ["\u0872", "\u0872"], /* ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE */ + ["\u0873", "\u0873"], /* ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE */ + ["\u0874", "\u0874"], /* ARABIC LETTER ALEF WITH ATTACHED KASRA */ + ["\u0875", "\u0875"], /* ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA */ + ["\u0876", "\u0876"], /* ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE */ + ["\u0877", "\u0877"], /* ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT */ + ["\u0878", "\u0878"], /* ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT */ + ["\u0879", "\u0879"], /* ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW */ + ["\u087A", "\u087A"], /* ARABIC LETTER ALEF WITH DOT ABOVE */ + ["\u087B", "\u087B"], /* ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE */ + ["\u087C", "\u087C"], /* ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE */ + ["\u087D", "\u087D"], /* ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE */ + ["\u087E", "\u087E"], /* ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING */ + ["\u087F", "\u087F"], /* ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING */ + ["\u0880", "\u0880"], /* ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING */ + ["\u0881", "\u0881"], /* ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA */ + ["\u0882", "\u0882"], /* ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA */ + ["\u0883", "\u0883"], /* ARABIC TATWEEL WITH OVERSTRUCK HAMZA */ + ["\u0884", "\u0884"], /* ARABIC TATWEEL WITH OVERSTRUCK WAW */ + ["\u0885", "\u0885"], /* ARABIC TATWEEL WITH TWO DOTS BELOW */ + ["\u0886", "\u0886"], /* ARABIC LETTER THIN YEH */ + ["\u0887", "\u0887"], /* ARABIC BASELINE ROUND DOT */ + ["\u0888", "\u0888"], /* ARABIC RAISED ROUND DOT */ + ["\u0889", "\u0889"], /* ARABIC LETTER NOON WITH INVERTED SMALL V */ + ["\u088A", "\u088A"], /* ARABIC LETTER HAH WITH INVERTED SMALL V BELOW */ + ["\u088B", "\u088B"], /* ARABIC LETTER TAH WITH DOT BELOW */ + ["\u088C", "\u088C"], /* ARABIC LETTER TAH WITH THREE DOTS BELOW */ + ["\u088D", "\u088D"], /* ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW */ + ["\u088E", "\u088E"], /* ARABIC VERTICAL TAIL */ + ["\u088F", "\u088F"], + ["\u0890", "\u0890"], /* ARABIC POUND MARK ABOVE */ + ["\u0891", "\u0891"], /* ARABIC PIASTRE MARK ABOVE */ + ["\u0892", "\u0892"], + ["\u0893", "\u0893"], + ["\u0894", "\u0894"], + ["\u0895", "\u0895"], + ["\u0896", "\u0896"], + ["\u0897", "\u0897"], + ["\u0898", "\u0898"], /* ARABIC SMALL HIGH WORD AL-JUZ */ + ["\u0899", "\u0899"], /* ARABIC SMALL LOW WORD ISHMAAM */ + ["\u089A", "\u089A"], /* ARABIC SMALL LOW WORD IMAALA */ + ["\u089B", "\u089B"], /* ARABIC SMALL LOW WORD TASHEEL */ + ["\u089C", "\u089C"], /* ARABIC MADDA WAAJIB */ + ["\u089D", "\u089D"], /* ARABIC SUPERSCRIPT ALEF MOKHASSAS */ + ["\u089E", "\u089E"], /* ARABIC DOUBLED MADDA */ + ["\u089F", "\u089F"], /* ARABIC HALF MADDA OVER MADDA */ + ["\u08A0", "\u08A0"], /* ARABIC LETTER BEH WITH SMALL V BELOW */ + ["\u08A1", "\u08A1"], /* ARABIC LETTER BEH WITH HAMZA ABOVE */ + ["\u08A2", "\u08A2"], /* ARABIC LETTER JEEM WITH TWO DOTS ABOVE */ + ["\u08A3", "\u08A3"], /* ARABIC LETTER TAH WITH TWO DOTS ABOVE */ + ["\u08A4", "\u08A4"], /* ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE */ + ["\u08A5", "\u08A5"], /* ARABIC LETTER QAF WITH DOT BELOW */ + ["\u08A6", "\u08A6"], /* ARABIC LETTER LAM WITH DOUBLE BAR */ + ["\u08A7", "\u08A7"], /* ARABIC LETTER MEEM WITH THREE DOTS ABOVE */ + ["\u08A8", "\u08A8"], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE */ + ["\u08A9", "\u08A9"], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE */ + ["\u08AA", "\u08AA"], /* ARABIC LETTER REH WITH LOOP */ + ["\u08AB", "\u08AB"], /* ARABIC LETTER WAW WITH DOT WITHIN */ + ["\u08AC", "\u08AC"], /* ARABIC LETTER ROHINGYA YEH */ + ["\u08AD", "\u08AD"], /* ARABIC LETTER LOW ALEF */ + ["\u08AE", "\u08AE"], /* ARABIC LETTER DAL WITH THREE DOTS BELOW */ + ["\u08AF", "\u08AF"], /* ARABIC LETTER SAD WITH THREE DOTS BELOW */ + ["\u08B0", "\u08B0"], /* ARABIC LETTER GAF WITH INVERTED STROKE */ + ["\u08B1", "\u08B1"], /* ARABIC LETTER STRAIGHT WAW */ + ["\u08B2", "\u08B2"], /* ARABIC LETTER ZAIN WITH INVERTED V ABOVE */ + ["\u08B3", "\u08B3"], /* ARABIC LETTER AIN WITH THREE DOTS BELOW */ + ["\u08B4", "\u08B4"], /* ARABIC LETTER KAF WITH DOT BELOW */ + ["\u08B5", "\u08B5"], /* ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE */ + ["\u08B6", "\u08B6"], /* ARABIC LETTER BEH WITH SMALL MEEM ABOVE */ + ["\u08B7", "\u08B7"], /* ARABIC LETTER PEH WITH SMALL MEEM ABOVE */ + ["\u08B8", "\u08B8"], /* ARABIC LETTER TEH WITH SMALL TEH ABOVE */ + ["\u08B9", "\u08B9"], /* ARABIC LETTER REH WITH SMALL NOON ABOVE */ + ["\u08BA", "\u08BA"], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE */ + ["\u08BB", "\u08BB"], /* ARABIC LETTER AFRICAN FEH */ + ["\u08BC", "\u08BC"], /* ARABIC LETTER AFRICAN QAF */ + ["\u08BD", "\u08BD"], /* ARABIC LETTER AFRICAN NOON */ + ["\u08BE", "\u08BE"], /* ARABIC LETTER PEH WITH SMALL V */ + ["\u08BF", "\u08BF"], /* ARABIC LETTER TEH WITH SMALL V */ + ["\u08C0", "\u08C0"], /* ARABIC LETTER TTEH WITH SMALL V */ + ["\u08C1", "\u08C1"], /* ARABIC LETTER TCHEH WITH SMALL V */ + ["\u08C2", "\u08C2"], /* ARABIC LETTER KEHEH WITH SMALL V */ + ["\u08C3", "\u08C3"], /* ARABIC LETTER GHAIN WITH THREE DOTS ABOVE */ + ["\u08C4", "\u08C4"], /* ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE */ + ["\u08C5", "\u08C5"], /* ARABIC LETTER JEEM WITH THREE DOTS ABOVE */ + ["\u08C6", "\u08C6"], /* ARABIC LETTER JEEM WITH THREE DOTS BELOW */ + ["\u08C7", "\u08C7"], /* ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE */ + ["\u08C8", "\u08C8"], /* ARABIC LETTER GRAF */ + ["\u08C9", "\u08C9"], /* ARABIC SMALL FARSI YEH */ + ["\u08CA", "\u08CA"], /* ARABIC SMALL HIGH FARSI YEH */ + ["\u08CB", "\u08CB"], /* ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW */ + ["\u08CC", "\u08CC"], /* ARABIC SMALL HIGH WORD SAH */ + ["\u08CD", "\u08CD"], /* ARABIC SMALL HIGH ZAH */ + ["\u08CE", "\u08CE"], /* ARABIC LARGE ROUND DOT ABOVE */ + ["\u08CF", "\u08CF"], /* ARABIC LARGE ROUND DOT BELOW */ + ["\u08D0", "\u08D0"], /* ARABIC SUKUN BELOW */ + ["\u08D1", "\u08D1"], /* ARABIC LARGE CIRCLE BELOW */ + ["\u08D2", "\u08D2"], /* ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW */ + ["\u08D3", "\u08D3"], /* ARABIC SMALL LOW WAW */ + ["\u08D4", "\u08D4"], /* ARABIC SMALL HIGH WORD AR-RUB */ + ["\u08D5", "\u08D5"], /* ARABIC SMALL HIGH SAD */ + ["\u08D6", "\u08D6"], /* ARABIC SMALL HIGH AIN */ + ["\u08D7", "\u08D7"], /* ARABIC SMALL HIGH QAF */ + ["\u08D8", "\u08D8"], /* ARABIC SMALL HIGH NOON WITH KASRA */ + ["\u08D9", "\u08D9"], /* ARABIC SMALL LOW NOON WITH KASRA */ + ["\u08DA", "\u08DA"], /* ARABIC SMALL HIGH WORD ATH-THALATHA */ + ["\u08DB", "\u08DB"], /* ARABIC SMALL HIGH WORD AS-SAJDA */ + ["\u08DC", "\u08DC"], /* ARABIC SMALL HIGH WORD AN-NISF */ + ["\u08DD", "\u08DD"], /* ARABIC SMALL HIGH WORD SAKTA */ + ["\u08DE", "\u08DE"], /* ARABIC SMALL HIGH WORD QIF */ + ["\u08DF", "\u08DF"], /* ARABIC SMALL HIGH WORD WAQFA */ + ["\u08E0", "\u08E0"], /* ARABIC SMALL HIGH FOOTNOTE MARKER */ + ["\u08E1", "\u08E1"], /* ARABIC SMALL HIGH SIGN SAFHA */ + ["\u08E2", "\u08E2"], /* ARABIC DISPUTED END OF AYAH */ + ["\u08E3", "\u08E3"], /* ARABIC TURNED DAMMA BELOW */ + ["\u08E4", "\u08E4"], /* ARABIC CURLY FATHA */ + ["\u08E5", "\u08E5"], /* ARABIC CURLY DAMMA */ + ["\u08E6", "\u08E6"], /* ARABIC CURLY KASRA */ + ["\u08E7", "\u08E7"], /* ARABIC CURLY FATHATAN */ + ["\u08E8", "\u08E8"], /* ARABIC CURLY DAMMATAN */ + ["\u08E9", "\u08E9"], /* ARABIC CURLY KASRATAN */ + ["\u08EA", "\u08EA"], /* ARABIC TONE ONE DOT ABOVE */ + ["\u08EB", "\u08EB"], /* ARABIC TONE TWO DOTS ABOVE */ + ["\u08EC", "\u08EC"], /* ARABIC TONE LOOP ABOVE */ + ["\u08ED", "\u08ED"], /* ARABIC TONE ONE DOT BELOW */ + ["\u08EE", "\u08EE"], /* ARABIC TONE TWO DOTS BELOW */ + ["\u08EF", "\u08EF"], /* ARABIC TONE LOOP BELOW */ + ["\u08F0", "\u08F0"], /* ARABIC OPEN FATHATAN */ + ["\u08F1", "\u08F1"], /* ARABIC OPEN DAMMATAN */ + ["\u08F2", "\u08F2"], /* ARABIC OPEN KASRATAN */ + ["\u08F3", "\u08F3"], /* ARABIC SMALL HIGH WAW */ + ["\u08F4", "\u08F4"], /* ARABIC FATHA WITH RING */ + ["\u08F5", "\u08F5"], /* ARABIC FATHA WITH DOT ABOVE */ + ["\u08F6", "\u08F6"], /* ARABIC KASRA WITH DOT BELOW */ + ["\u08F7", "\u08F7"], /* ARABIC LEFT ARROWHEAD ABOVE */ + ["\u08F8", "\u08F8"], /* ARABIC RIGHT ARROWHEAD ABOVE */ + ["\u08F9", "\u08F9"], /* ARABIC LEFT ARROWHEAD BELOW */ + ["\u08FA", "\u08FA"], /* ARABIC RIGHT ARROWHEAD BELOW */ + ["\u08FB", "\u08FB"], /* ARABIC DOUBLE RIGHT ARROWHEAD ABOVE */ + ["\u08FC", "\u08FC"], /* ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT */ + ["\u08FD", "\u08FD"], /* ARABIC RIGHT ARROWHEAD ABOVE WITH DOT */ + ["\u08FE", "\u08FE"], /* ARABIC DAMMA WITH DOT */ + ["\u08FF", "\u08FF"], /* ARABIC MARK SIDEWAYS NOON GHUNNA */ + ["\u0900", "\u0900"], /* DEVANAGARI SIGN INVERTED CANDRABINDU */ + ["\u0901", "\u0901"], /* DEVANAGARI SIGN CANDRABINDU */ + ["\u0902", "\u0902"], /* DEVANAGARI SIGN ANUSVARA */ + ["\u0903", "\u0903"], /* DEVANAGARI SIGN VISARGA */ + ["\u0904", "\u0904"], /* DEVANAGARI LETTER SHORT A */ + ["\u0905", "\u0905"], /* DEVANAGARI LETTER A */ + ["\u0906", "\u0906"], /* DEVANAGARI LETTER AA */ + ["\u0907", "\u0907"], /* DEVANAGARI LETTER I */ + ["\u0908", "\u0908"], /* DEVANAGARI LETTER II */ + ["\u0909", "\u0909"], /* DEVANAGARI LETTER U */ + ["\u090A", "\u090A"], /* DEVANAGARI LETTER UU */ + ["\u090B", "\u090B"], /* DEVANAGARI LETTER VOCALIC R */ + ["\u090C", "\u090C"], /* DEVANAGARI LETTER VOCALIC L */ + ["\u090D", "\u090D"], /* DEVANAGARI LETTER CANDRA E */ + ["\u090E", "\u090E"], /* DEVANAGARI LETTER SHORT E */ + ["\u090F", "\u090F"], /* DEVANAGARI LETTER E */ + ["\u0910", "\u0910"], /* DEVANAGARI LETTER AI */ + ["\u0911", "\u0911"], /* DEVANAGARI LETTER CANDRA O */ + ["\u0912", "\u0912"], /* DEVANAGARI LETTER SHORT O */ + ["\u0913", "\u0913"], /* DEVANAGARI LETTER O */ + ["\u0914", "\u0914"], /* DEVANAGARI LETTER AU */ + ["\u0915", "\u0915"], /* DEVANAGARI LETTER KA */ + ["\u0916", "\u0916"], /* DEVANAGARI LETTER KHA */ + ["\u0917", "\u0917"], /* DEVANAGARI LETTER GA */ + ["\u0918", "\u0918"], /* DEVANAGARI LETTER GHA */ + ["\u0919", "\u0919"], /* DEVANAGARI LETTER NGA */ + ["\u091A", "\u091A"], /* DEVANAGARI LETTER CA */ + ["\u091B", "\u091B"], /* DEVANAGARI LETTER CHA */ + ["\u091C", "\u091C"], /* DEVANAGARI LETTER JA */ + ["\u091D", "\u091D"], /* DEVANAGARI LETTER JHA */ + ["\u091E", "\u091E"], /* DEVANAGARI LETTER NYA */ + ["\u091F", "\u091F"], /* DEVANAGARI LETTER TTA */ + ["\u0920", "\u0920"], /* DEVANAGARI LETTER TTHA */ + ["\u0921", "\u0921"], /* DEVANAGARI LETTER DDA */ + ["\u0922", "\u0922"], /* DEVANAGARI LETTER DDHA */ + ["\u0923", "\u0923"], /* DEVANAGARI LETTER NNA */ + ["\u0924", "\u0924"], /* DEVANAGARI LETTER TA */ + ["\u0925", "\u0925"], /* DEVANAGARI LETTER THA */ + ["\u0926", "\u0926"], /* DEVANAGARI LETTER DA */ + ["\u0927", "\u0927"], /* DEVANAGARI LETTER DHA */ + ["\u0928", "\u0928"], /* DEVANAGARI LETTER NA */ + ["\u0929", "\u0929"], /* DEVANAGARI LETTER NNNA */ + ["\u092A", "\u092A"], /* DEVANAGARI LETTER PA */ + ["\u092B", "\u092B"], /* DEVANAGARI LETTER PHA */ + ["\u092C", "\u092C"], /* DEVANAGARI LETTER BA */ + ["\u092D", "\u092D"], /* DEVANAGARI LETTER BHA */ + ["\u092E", "\u092E"], /* DEVANAGARI LETTER MA */ + ["\u092F", "\u092F"], /* DEVANAGARI LETTER YA */ + ["\u0930", "\u0930"], /* DEVANAGARI LETTER RA */ + ["\u0931", "\u0931"], /* DEVANAGARI LETTER RRA */ + ["\u0932", "\u0932"], /* DEVANAGARI LETTER LA */ + ["\u0933", "\u0933"], /* DEVANAGARI LETTER LLA */ + ["\u0934", "\u0934"], /* DEVANAGARI LETTER LLLA */ + ["\u0935", "\u0935"], /* DEVANAGARI LETTER VA */ + ["\u0936", "\u0936"], /* DEVANAGARI LETTER SHA */ + ["\u0937", "\u0937"], /* DEVANAGARI LETTER SSA */ + ["\u0938", "\u0938"], /* DEVANAGARI LETTER SA */ + ["\u0939", "\u0939"], /* DEVANAGARI LETTER HA */ + ["\u093A", "\u093A"], /* DEVANAGARI VOWEL SIGN OE */ + ["\u093B", "\u093B"], /* DEVANAGARI VOWEL SIGN OOE */ + ["\u093C", "\u093C"], /* DEVANAGARI SIGN NUKTA */ + ["\u093D", "\u093D"], /* DEVANAGARI SIGN AVAGRAHA */ + ["\u093E", "\u093E"], /* DEVANAGARI VOWEL SIGN AA */ + ["\u093F", "\u093F"], /* DEVANAGARI VOWEL SIGN I */ + ["\u0940", "\u0940"], /* DEVANAGARI VOWEL SIGN II */ + ["\u0941", "\u0941"], /* DEVANAGARI VOWEL SIGN U */ + ["\u0942", "\u0942"], /* DEVANAGARI VOWEL SIGN UU */ + ["\u0943", "\u0943"], /* DEVANAGARI VOWEL SIGN VOCALIC R */ + ["\u0944", "\u0944"], /* DEVANAGARI VOWEL SIGN VOCALIC RR */ + ["\u0945", "\u0945"], /* DEVANAGARI VOWEL SIGN CANDRA E */ + ["\u0946", "\u0946"], /* DEVANAGARI VOWEL SIGN SHORT E */ + ["\u0947", "\u0947"], /* DEVANAGARI VOWEL SIGN E */ + ["\u0948", "\u0948"], /* DEVANAGARI VOWEL SIGN AI */ + ["\u0949", "\u0949"], /* DEVANAGARI VOWEL SIGN CANDRA O */ + ["\u094A", "\u094A"], /* DEVANAGARI VOWEL SIGN SHORT O */ + ["\u094B", "\u094B"], /* DEVANAGARI VOWEL SIGN O */ + ["\u094C", "\u094C"], /* DEVANAGARI VOWEL SIGN AU */ + ["\u094D", "\u094D"], /* DEVANAGARI SIGN VIRAMA */ + ["\u094E", "\u094E"], /* DEVANAGARI VOWEL SIGN PRISHTHAMATRA E */ + ["\u094F", "\u094F"], /* DEVANAGARI VOWEL SIGN AW */ + ["\u0950", "\u0950"], /* DEVANAGARI OM */ + ["\u0951", "\u0951"], /* DEVANAGARI STRESS SIGN UDATTA */ + ["\u0952", "\u0952"], /* DEVANAGARI STRESS SIGN ANUDATTA */ + ["\u0953", "\u0953"], /* DEVANAGARI GRAVE ACCENT */ + ["\u0954", "\u0954"], /* DEVANAGARI ACUTE ACCENT */ + ["\u0955", "\u0955"], /* DEVANAGARI VOWEL SIGN CANDRA LONG E */ + ["\u0956", "\u0956"], /* DEVANAGARI VOWEL SIGN UE */ + ["\u0957", "\u0957"], /* DEVANAGARI VOWEL SIGN UUE */ + ["\u0958", "\u0958"], /* DEVANAGARI LETTER QA */ + ["\u0959", "\u0959"], /* DEVANAGARI LETTER KHHA */ + ["\u095A", "\u095A"], /* DEVANAGARI LETTER GHHA */ + ["\u095B", "\u095B"], /* DEVANAGARI LETTER ZA */ + ["\u095C", "\u095C"], /* DEVANAGARI LETTER DDDHA */ + ["\u095D", "\u095D"], /* DEVANAGARI LETTER RHA */ + ["\u095E", "\u095E"], /* DEVANAGARI LETTER FA */ + ["\u095F", "\u095F"], /* DEVANAGARI LETTER YYA */ + ["\u0960", "\u0960"], /* DEVANAGARI LETTER VOCALIC RR */ + ["\u0961", "\u0961"], /* DEVANAGARI LETTER VOCALIC LL */ + ["\u0962", "\u0962"], /* DEVANAGARI VOWEL SIGN VOCALIC L */ + ["\u0963", "\u0963"], /* DEVANAGARI VOWEL SIGN VOCALIC LL */ + ["\u0964", "\u0964"], /* DEVANAGARI DANDA */ + ["\u0965", "\u0965"], /* DEVANAGARI DOUBLE DANDA */ + ["\u0966", "\u0966"], /* DEVANAGARI DIGIT ZERO */ + ["\u0967", "\u0967"], /* DEVANAGARI DIGIT ONE */ + ["\u0968", "\u0968"], /* DEVANAGARI DIGIT TWO */ + ["\u0969", "\u0969"], /* DEVANAGARI DIGIT THREE */ + ["\u096A", "\u096A"], /* DEVANAGARI DIGIT FOUR */ + ["\u096B", "\u096B"], /* DEVANAGARI DIGIT FIVE */ + ["\u096C", "\u096C"], /* DEVANAGARI DIGIT SIX */ + ["\u096D", "\u096D"], /* DEVANAGARI DIGIT SEVEN */ + ["\u096E", "\u096E"], /* DEVANAGARI DIGIT EIGHT */ + ["\u096F", "\u096F"], /* DEVANAGARI DIGIT NINE */ + ["\u0970", "\u0970"], /* DEVANAGARI ABBREVIATION SIGN */ + ["\u0971", "\u0971"], /* DEVANAGARI SIGN HIGH SPACING DOT */ + ["\u0972", "\u0972"], /* DEVANAGARI LETTER CANDRA A */ + ["\u0973", "\u0973"], /* DEVANAGARI LETTER OE */ + ["\u0974", "\u0974"], /* DEVANAGARI LETTER OOE */ + ["\u0975", "\u0975"], /* DEVANAGARI LETTER AW */ + ["\u0976", "\u0976"], /* DEVANAGARI LETTER UE */ + ["\u0977", "\u0977"], /* DEVANAGARI LETTER UUE */ + ["\u0978", "\u0978"], /* DEVANAGARI LETTER MARWARI DDA */ + ["\u0979", "\u0979"], /* DEVANAGARI LETTER ZHA */ + ["\u097A", "\u097A"], /* DEVANAGARI LETTER HEAVY YA */ + ["\u097B", "\u097B"], /* DEVANAGARI LETTER GGA */ + ["\u097C", "\u097C"], /* DEVANAGARI LETTER JJA */ + ["\u097D", "\u097D"], /* DEVANAGARI LETTER GLOTTAL STOP */ + ["\u097E", "\u097E"], /* DEVANAGARI LETTER DDDA */ + ["\u097F", "\u097F"], /* DEVANAGARI LETTER BBA */ + ["\u0980", "\u0980"], /* BENGALI ANJI */ + ["\u0981", "\u0981"], /* BENGALI SIGN CANDRABINDU */ + ["\u0982", "\u0982"], /* BENGALI SIGN ANUSVARA */ + ["\u0983", "\u0983"], /* BENGALI SIGN VISARGA */ + ["\u0984", "\u0984"], + ["\u0985", "\u0985"], /* BENGALI LETTER A */ + ["\u0986", "\u0986"], /* BENGALI LETTER AA */ + ["\u0987", "\u0987"], /* BENGALI LETTER I */ + ["\u0988", "\u0988"], /* BENGALI LETTER II */ + ["\u0989", "\u0989"], /* BENGALI LETTER U */ + ["\u098A", "\u098A"], /* BENGALI LETTER UU */ + ["\u098B", "\u098B"], /* BENGALI LETTER VOCALIC R */ + ["\u098C", "\u098C"], /* BENGALI LETTER VOCALIC L */ + ["\u098D", "\u098D"], + ["\u098E", "\u098E"], + ["\u098F", "\u098F"], /* BENGALI LETTER E */ + ["\u0990", "\u0990"], /* BENGALI LETTER AI */ + ["\u0991", "\u0991"], + ["\u0992", "\u0992"], + ["\u0993", "\u0993"], /* BENGALI LETTER O */ + ["\u0994", "\u0994"], /* BENGALI LETTER AU */ + ["\u0995", "\u0995"], /* BENGALI LETTER KA */ + ["\u0996", "\u0996"], /* BENGALI LETTER KHA */ + ["\u0997", "\u0997"], /* BENGALI LETTER GA */ + ["\u0998", "\u0998"], /* BENGALI LETTER GHA */ + ["\u0999", "\u0999"], /* BENGALI LETTER NGA */ + ["\u099A", "\u099A"], /* BENGALI LETTER CA */ + ["\u099B", "\u099B"], /* BENGALI LETTER CHA */ + ["\u099C", "\u099C"], /* BENGALI LETTER JA */ + ["\u099D", "\u099D"], /* BENGALI LETTER JHA */ + ["\u099E", "\u099E"], /* BENGALI LETTER NYA */ + ["\u099F", "\u099F"], /* BENGALI LETTER TTA */ + ["\u09A0", "\u09A0"], /* BENGALI LETTER TTHA */ + ["\u09A1", "\u09A1"], /* BENGALI LETTER DDA */ + ["\u09A2", "\u09A2"], /* BENGALI LETTER DDHA */ + ["\u09A3", "\u09A3"], /* BENGALI LETTER NNA */ + ["\u09A4", "\u09A4"], /* BENGALI LETTER TA */ + ["\u09A5", "\u09A5"], /* BENGALI LETTER THA */ + ["\u09A6", "\u09A6"], /* BENGALI LETTER DA */ + ["\u09A7", "\u09A7"], /* BENGALI LETTER DHA */ + ["\u09A8", "\u09A8"], /* BENGALI LETTER NA */ + ["\u09A9", "\u09A9"], + ["\u09AA", "\u09AA"], /* BENGALI LETTER PA */ + ["\u09AB", "\u09AB"], /* BENGALI LETTER PHA */ + ["\u09AC", "\u09AC"], /* BENGALI LETTER BA */ + ["\u09AD", "\u09AD"], /* BENGALI LETTER BHA */ + ["\u09AE", "\u09AE"], /* BENGALI LETTER MA */ + ["\u09AF", "\u09AF"], /* BENGALI LETTER YA */ + ["\u09B0", "\u09B0"], /* BENGALI LETTER RA */ + ["\u09B1", "\u09B1"], + ["\u09B2", "\u09B2"], /* BENGALI LETTER LA */ + ["\u09B3", "\u09B3"], + ["\u09B4", "\u09B4"], + ["\u09B5", "\u09B5"], + ["\u09B6", "\u09B6"], /* BENGALI LETTER SHA */ + ["\u09B7", "\u09B7"], /* BENGALI LETTER SSA */ + ["\u09B8", "\u09B8"], /* BENGALI LETTER SA */ + ["\u09B9", "\u09B9"], /* BENGALI LETTER HA */ + ["\u09BA", "\u09BA"], + ["\u09BB", "\u09BB"], + ["\u09BC", "\u09BC"], /* BENGALI SIGN NUKTA */ + ["\u09BD", "\u09BD"], /* BENGALI SIGN AVAGRAHA */ + ["\u09BE", "\u09BE"], /* BENGALI VOWEL SIGN AA */ + ["\u09BF", "\u09BF"], /* BENGALI VOWEL SIGN I */ + ["\u09C0", "\u09C0"], /* BENGALI VOWEL SIGN II */ + ["\u09C1", "\u09C1"], /* BENGALI VOWEL SIGN U */ + ["\u09C2", "\u09C2"], /* BENGALI VOWEL SIGN UU */ + ["\u09C3", "\u09C3"], /* BENGALI VOWEL SIGN VOCALIC R */ + ["\u09C4", "\u09C4"], /* BENGALI VOWEL SIGN VOCALIC RR */ + ["\u09C5", "\u09C5"], + ["\u09C6", "\u09C6"], + ["\u09C7", "\u09C7"], /* BENGALI VOWEL SIGN E */ + ["\u09C8", "\u09C8"], /* BENGALI VOWEL SIGN AI */ + ["\u09C9", "\u09C9"], + ["\u09CA", "\u09CA"], + ["\u09CB", "\u09CB"], /* BENGALI VOWEL SIGN O */ + ["\u09CC", "\u09CC"], /* BENGALI VOWEL SIGN AU */ + ["\u09CD", "\u09CD"], /* BENGALI SIGN VIRAMA */ + ["\u09CE", "\u09CE"], /* BENGALI LETTER KHANDA TA */ + ["\u09CF", "\u09CF"], + ["\u09D0", "\u09D0"], + ["\u09D1", "\u09D1"], + ["\u09D2", "\u09D2"], + ["\u09D3", "\u09D3"], + ["\u09D4", "\u09D4"], + ["\u09D5", "\u09D5"], + ["\u09D6", "\u09D6"], + ["\u09D7", "\u09D7"], /* BENGALI AU LENGTH MARK */ + ["\u09D8", "\u09D8"], + ["\u09D9", "\u09D9"], + ["\u09DA", "\u09DA"], + ["\u09DB", "\u09DB"], + ["\u09DC", "\u09DC"], /* BENGALI LETTER RRA */ + ["\u09DD", "\u09DD"], /* BENGALI LETTER RHA */ + ["\u09DE", "\u09DE"], + ["\u09DF", "\u09DF"], /* BENGALI LETTER YYA */ + ["\u09E0", "\u09E0"], /* BENGALI LETTER VOCALIC RR */ + ["\u09E1", "\u09E1"], /* BENGALI LETTER VOCALIC LL */ + ["\u09E2", "\u09E2"], /* BENGALI VOWEL SIGN VOCALIC L */ + ["\u09E3", "\u09E3"], /* BENGALI VOWEL SIGN VOCALIC LL */ + ["\u09E4", "\u09E4"], + ["\u09E5", "\u09E5"], + ["\u09E6", "\u09E6"], /* BENGALI DIGIT ZERO */ + ["\u09E7", "\u09E7"], /* BENGALI DIGIT ONE */ + ["\u09E8", "\u09E8"], /* BENGALI DIGIT TWO */ + ["\u09E9", "\u09E9"], /* BENGALI DIGIT THREE */ + ["\u09EA", "\u09EA"], /* BENGALI DIGIT FOUR */ + ["\u09EB", "\u09EB"], /* BENGALI DIGIT FIVE */ + ["\u09EC", "\u09EC"], /* BENGALI DIGIT SIX */ + ["\u09ED", "\u09ED"], /* BENGALI DIGIT SEVEN */ + ["\u09EE", "\u09EE"], /* BENGALI DIGIT EIGHT */ + ["\u09EF", "\u09EF"], /* BENGALI DIGIT NINE */ + ["\u09F0", "\u09F0"], /* BENGALI LETTER RA WITH MIDDLE DIAGONAL */ + ["\u09F1", "\u09F1"], /* BENGALI LETTER RA WITH LOWER DIAGONAL (BENGALI LETTER VA WITH LOWER DIAGONAL) */ + ["\u09F2", "\u09F2"], /* BENGALI RUPEE MARK */ + ["\u09F3", "\u09F3"], /* BENGALI RUPEE SIGN */ + ["\u09F4", "\u09F4"], /* BENGALI CURRENCY NUMERATOR ONE */ + ["\u09F5", "\u09F5"], /* BENGALI CURRENCY NUMERATOR TWO */ + ["\u09F6", "\u09F6"], /* BENGALI CURRENCY NUMERATOR THREE */ + ["\u09F7", "\u09F7"], /* BENGALI CURRENCY NUMERATOR FOUR */ + ["\u09F8", "\u09F8"], /* BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR */ + ["\u09F9", "\u09F9"], /* BENGALI CURRENCY DENOMINATOR SIXTEEN */ + ["\u09FA", "\u09FA"], /* BENGALI ISSHAR */ + ["\u09FB", "\u09FB"], /* BENGALI GANDA MARK */ + ["\u09FC", "\u09FC"], /* BENGALI LETTER VEDIC ANUSVARA */ + ["\u09FD", "\u09FD"], /* BENGALI ABBREVIATION SIGN */ + ["\u09FE", "\u09FE"], /* BENGALI SANDHI MARK */ + ["\u09FF", "\u09FF"], + ["\u0A00", "\u0A00"], + ["\u0A01", "\u0A01"], /* GURMUKHI SIGN ADAK BINDI */ + ["\u0A02", "\u0A02"], /* GURMUKHI SIGN BINDI */ + ["\u0A03", "\u0A03"], /* GURMUKHI SIGN VISARGA */ + ["\u0A04", "\u0A04"], + ["\u0A05", "\u0A05"], /* GURMUKHI LETTER A */ + ["\u0A06", "\u0A06"], /* GURMUKHI LETTER AA */ + ["\u0A07", "\u0A07"], /* GURMUKHI LETTER I */ + ["\u0A08", "\u0A08"], /* GURMUKHI LETTER II */ + ["\u0A09", "\u0A09"], /* GURMUKHI LETTER U */ + ["\u0A0A", "\u0A0A"], /* GURMUKHI LETTER UU */ + ["\u0A0B", "\u0A0B"], + ["\u0A0C", "\u0A0C"], + ["\u0A0D", "\u0A0D"], + ["\u0A0E", "\u0A0E"], + ["\u0A0F", "\u0A0F"], /* GURMUKHI LETTER EE */ + ["\u0A10", "\u0A10"], /* GURMUKHI LETTER AI */ + ["\u0A11", "\u0A11"], + ["\u0A12", "\u0A12"], + ["\u0A13", "\u0A13"], /* GURMUKHI LETTER OO */ + ["\u0A14", "\u0A14"], /* GURMUKHI LETTER AU */ + ["\u0A15", "\u0A15"], /* GURMUKHI LETTER KA */ + ["\u0A16", "\u0A16"], /* GURMUKHI LETTER KHA */ + ["\u0A17", "\u0A17"], /* GURMUKHI LETTER GA */ + ["\u0A18", "\u0A18"], /* GURMUKHI LETTER GHA */ + ["\u0A19", "\u0A19"], /* GURMUKHI LETTER NGA */ + ["\u0A1A", "\u0A1A"], /* GURMUKHI LETTER CA */ + ["\u0A1B", "\u0A1B"], /* GURMUKHI LETTER CHA */ + ["\u0A1C", "\u0A1C"], /* GURMUKHI LETTER JA */ + ["\u0A1D", "\u0A1D"], /* GURMUKHI LETTER JHA */ + ["\u0A1E", "\u0A1E"], /* GURMUKHI LETTER NYA */ + ["\u0A1F", "\u0A1F"], /* GURMUKHI LETTER TTA */ + ["\u0A20", "\u0A20"], /* GURMUKHI LETTER TTHA */ + ["\u0A21", "\u0A21"], /* GURMUKHI LETTER DDA */ + ["\u0A22", "\u0A22"], /* GURMUKHI LETTER DDHA */ + ["\u0A23", "\u0A23"], /* GURMUKHI LETTER NNA */ + ["\u0A24", "\u0A24"], /* GURMUKHI LETTER TA */ + ["\u0A25", "\u0A25"], /* GURMUKHI LETTER THA */ + ["\u0A26", "\u0A26"], /* GURMUKHI LETTER DA */ + ["\u0A27", "\u0A27"], /* GURMUKHI LETTER DHA */ + ["\u0A28", "\u0A28"], /* GURMUKHI LETTER NA */ + ["\u0A29", "\u0A29"], + ["\u0A2A", "\u0A2A"], /* GURMUKHI LETTER PA */ + ["\u0A2B", "\u0A2B"], /* GURMUKHI LETTER PHA */ + ["\u0A2C", "\u0A2C"], /* GURMUKHI LETTER BA */ + ["\u0A2D", "\u0A2D"], /* GURMUKHI LETTER BHA */ + ["\u0A2E", "\u0A2E"], /* GURMUKHI LETTER MA */ + ["\u0A2F", "\u0A2F"], /* GURMUKHI LETTER YA */ + ["\u0A30", "\u0A30"], /* GURMUKHI LETTER RA */ + ["\u0A31", "\u0A31"], + ["\u0A32", "\u0A32"], /* GURMUKHI LETTER LA */ + ["\u0A33", "\u0A33"], /* GURMUKHI LETTER LLA */ + ["\u0A34", "\u0A34"], + ["\u0A35", "\u0A35"], /* GURMUKHI LETTER VA */ + ["\u0A36", "\u0A36"], /* GURMUKHI LETTER SHA */ + ["\u0A37", "\u0A37"], + ["\u0A38", "\u0A38"], /* GURMUKHI LETTER SA */ + ["\u0A39", "\u0A39"], /* GURMUKHI LETTER HA */ + ["\u0A3A", "\u0A3A"], + ["\u0A3B", "\u0A3B"], + ["\u0A3C", "\u0A3C"], /* GURMUKHI SIGN NUKTA */ + ["\u0A3D", "\u0A3D"], + ["\u0A3E", "\u0A3E"], /* GURMUKHI VOWEL SIGN AA */ + ["\u0A3F", "\u0A3F"], /* GURMUKHI VOWEL SIGN I */ + ["\u0A40", "\u0A40"], /* GURMUKHI VOWEL SIGN II */ + ["\u0A41", "\u0A41"], /* GURMUKHI VOWEL SIGN U */ + ["\u0A42", "\u0A42"], /* GURMUKHI VOWEL SIGN UU */ + ["\u0A43", "\u0A43"], + ["\u0A44", "\u0A44"], + ["\u0A45", "\u0A45"], + ["\u0A46", "\u0A46"], + ["\u0A47", "\u0A47"], /* GURMUKHI VOWEL SIGN EE */ + ["\u0A48", "\u0A48"], /* GURMUKHI VOWEL SIGN AI */ + ["\u0A49", "\u0A49"], + ["\u0A4A", "\u0A4A"], + ["\u0A4B", "\u0A4B"], /* GURMUKHI VOWEL SIGN OO */ + ["\u0A4C", "\u0A4C"], /* GURMUKHI VOWEL SIGN AU */ + ["\u0A4D", "\u0A4D"], /* GURMUKHI SIGN VIRAMA */ + ["\u0A4E", "\u0A4E"], + ["\u0A4F", "\u0A4F"], + ["\u0A50", "\u0A50"], + ["\u0A51", "\u0A51"], /* GURMUKHI SIGN UDAAT */ + ["\u0A52", "\u0A52"], + ["\u0A53", "\u0A53"], + ["\u0A54", "\u0A54"], + ["\u0A55", "\u0A55"], + ["\u0A56", "\u0A56"], + ["\u0A57", "\u0A57"], + ["\u0A58", "\u0A58"], + ["\u0A59", "\u0A59"], /* GURMUKHI LETTER KHHA */ + ["\u0A5A", "\u0A5A"], /* GURMUKHI LETTER GHHA */ + ["\u0A5B", "\u0A5B"], /* GURMUKHI LETTER ZA */ + ["\u0A5C", "\u0A5C"], /* GURMUKHI LETTER RRA */ + ["\u0A5D", "\u0A5D"], + ["\u0A5E", "\u0A5E"], /* GURMUKHI LETTER FA */ + ["\u0A5F", "\u0A5F"], + ["\u0A60", "\u0A60"], + ["\u0A61", "\u0A61"], + ["\u0A62", "\u0A62"], + ["\u0A63", "\u0A63"], + ["\u0A64", "\u0A64"], + ["\u0A65", "\u0A65"], + ["\u0A66", "\u0A66"], /* GURMUKHI DIGIT ZERO */ + ["\u0A67", "\u0A67"], /* GURMUKHI DIGIT ONE */ + ["\u0A68", "\u0A68"], /* GURMUKHI DIGIT TWO */ + ["\u0A69", "\u0A69"], /* GURMUKHI DIGIT THREE */ + ["\u0A6A", "\u0A6A"], /* GURMUKHI DIGIT FOUR */ + ["\u0A6B", "\u0A6B"], /* GURMUKHI DIGIT FIVE */ + ["\u0A6C", "\u0A6C"], /* GURMUKHI DIGIT SIX */ + ["\u0A6D", "\u0A6D"], /* GURMUKHI DIGIT SEVEN */ + ["\u0A6E", "\u0A6E"], /* GURMUKHI DIGIT EIGHT */ + ["\u0A6F", "\u0A6F"], /* GURMUKHI DIGIT NINE */ + ["\u0A70", "\u0A70"], /* GURMUKHI TIPPI */ + ["\u0A71", "\u0A71"], /* GURMUKHI ADDAK */ + ["\u0A72", "\u0A72"], /* GURMUKHI IRI */ + ["\u0A73", "\u0A73"], /* GURMUKHI URA */ + ["\u0A74", "\u0A74"], /* GURMUKHI EK ONKAR */ + ["\u0A75", "\u0A75"], /* GURMUKHI SIGN YAKASH */ + ["\u0A76", "\u0A76"], /* GURMUKHI ABBREVIATION SIGN */ + ["\u0A77", "\u0A77"], + ["\u0A78", "\u0A78"], + ["\u0A79", "\u0A79"], + ["\u0A7A", "\u0A7A"], + ["\u0A7B", "\u0A7B"], + ["\u0A7C", "\u0A7C"], + ["\u0A7D", "\u0A7D"], + ["\u0A7E", "\u0A7E"], + ["\u0A7F", "\u0A7F"], + ["\u0A80", "\u0A80"], + ["\u0A81", "\u0A81"], /* GUJARATI SIGN CANDRABINDU */ + ["\u0A82", "\u0A82"], /* GUJARATI SIGN ANUSVARA */ + ["\u0A83", "\u0A83"], /* GUJARATI SIGN VISARGA */ + ["\u0A84", "\u0A84"], + ["\u0A85", "\u0A85"], /* GUJARATI LETTER A */ + ["\u0A86", "\u0A86"], /* GUJARATI LETTER AA */ + ["\u0A87", "\u0A87"], /* GUJARATI LETTER I */ + ["\u0A88", "\u0A88"], /* GUJARATI LETTER II */ + ["\u0A89", "\u0A89"], /* GUJARATI LETTER U */ + ["\u0A8A", "\u0A8A"], /* GUJARATI LETTER UU */ + ["\u0A8B", "\u0A8B"], /* GUJARATI LETTER VOCALIC R */ + ["\u0A8C", "\u0A8C"], /* GUJARATI LETTER VOCALIC L */ + ["\u0A8D", "\u0A8D"], /* GUJARATI VOWEL CANDRA E */ + ["\u0A8E", "\u0A8E"], + ["\u0A8F", "\u0A8F"], /* GUJARATI LETTER E */ + ["\u0A90", "\u0A90"], /* GUJARATI LETTER AI */ + ["\u0A91", "\u0A91"], /* GUJARATI VOWEL CANDRA O */ + ["\u0A92", "\u0A92"], + ["\u0A93", "\u0A93"], /* GUJARATI LETTER O */ + ["\u0A94", "\u0A94"], /* GUJARATI LETTER AU */ + ["\u0A95", "\u0A95"], /* GUJARATI LETTER KA */ + ["\u0A96", "\u0A96"], /* GUJARATI LETTER KHA */ + ["\u0A97", "\u0A97"], /* GUJARATI LETTER GA */ + ["\u0A98", "\u0A98"], /* GUJARATI LETTER GHA */ + ["\u0A99", "\u0A99"], /* GUJARATI LETTER NGA */ + ["\u0A9A", "\u0A9A"], /* GUJARATI LETTER CA */ + ["\u0A9B", "\u0A9B"], /* GUJARATI LETTER CHA */ + ["\u0A9C", "\u0A9C"], /* GUJARATI LETTER JA */ + ["\u0A9D", "\u0A9D"], /* GUJARATI LETTER JHA */ + ["\u0A9E", "\u0A9E"], /* GUJARATI LETTER NYA */ + ["\u0A9F", "\u0A9F"], /* GUJARATI LETTER TTA */ + ["\u0AA0", "\u0AA0"], /* GUJARATI LETTER TTHA */ + ["\u0AA1", "\u0AA1"], /* GUJARATI LETTER DDA */ + ["\u0AA2", "\u0AA2"], /* GUJARATI LETTER DDHA */ + ["\u0AA3", "\u0AA3"], /* GUJARATI LETTER NNA */ + ["\u0AA4", "\u0AA4"], /* GUJARATI LETTER TA */ + ["\u0AA5", "\u0AA5"], /* GUJARATI LETTER THA */ + ["\u0AA6", "\u0AA6"], /* GUJARATI LETTER DA */ + ["\u0AA7", "\u0AA7"], /* GUJARATI LETTER DHA */ + ["\u0AA8", "\u0AA8"], /* GUJARATI LETTER NA */ + ["\u0AA9", "\u0AA9"], + ["\u0AAA", "\u0AAA"], /* GUJARATI LETTER PA */ + ["\u0AAB", "\u0AAB"], /* GUJARATI LETTER PHA */ + ["\u0AAC", "\u0AAC"], /* GUJARATI LETTER BA */ + ["\u0AAD", "\u0AAD"], /* GUJARATI LETTER BHA */ + ["\u0AAE", "\u0AAE"], /* GUJARATI LETTER MA */ + ["\u0AAF", "\u0AAF"], /* GUJARATI LETTER YA */ + ["\u0AB0", "\u0AB0"], /* GUJARATI LETTER RA */ + ["\u0AB1", "\u0AB1"], + ["\u0AB2", "\u0AB2"], /* GUJARATI LETTER LA */ + ["\u0AB3", "\u0AB3"], /* GUJARATI LETTER LLA */ + ["\u0AB4", "\u0AB4"], + ["\u0AB5", "\u0AB5"], /* GUJARATI LETTER VA */ + ["\u0AB6", "\u0AB6"], /* GUJARATI LETTER SHA */ + ["\u0AB7", "\u0AB7"], /* GUJARATI LETTER SSA */ + ["\u0AB8", "\u0AB8"], /* GUJARATI LETTER SA */ + ["\u0AB9", "\u0AB9"], /* GUJARATI LETTER HA */ + ["\u0ABA", "\u0ABA"], + ["\u0ABB", "\u0ABB"], + ["\u0ABC", "\u0ABC"], /* GUJARATI SIGN NUKTA */ + ["\u0ABD", "\u0ABD"], /* GUJARATI SIGN AVAGRAHA */ + ["\u0ABE", "\u0ABE"], /* GUJARATI VOWEL SIGN AA */ + ["\u0ABF", "\u0ABF"], /* GUJARATI VOWEL SIGN I */ + ["\u0AC0", "\u0AC0"], /* GUJARATI VOWEL SIGN II */ + ["\u0AC1", "\u0AC1"], /* GUJARATI VOWEL SIGN U */ + ["\u0AC2", "\u0AC2"], /* GUJARATI VOWEL SIGN UU */ + ["\u0AC3", "\u0AC3"], /* GUJARATI VOWEL SIGN VOCALIC R */ + ["\u0AC4", "\u0AC4"], /* GUJARATI VOWEL SIGN VOCALIC RR */ + ["\u0AC5", "\u0AC5"], /* GUJARATI VOWEL SIGN CANDRA E */ + ["\u0AC6", "\u0AC6"], + ["\u0AC7", "\u0AC7"], /* GUJARATI VOWEL SIGN E */ + ["\u0AC8", "\u0AC8"], /* GUJARATI VOWEL SIGN AI */ + ["\u0AC9", "\u0AC9"], /* GUJARATI VOWEL SIGN CANDRA O */ + ["\u0ACA", "\u0ACA"], + ["\u0ACB", "\u0ACB"], /* GUJARATI VOWEL SIGN O */ + ["\u0ACC", "\u0ACC"], /* GUJARATI VOWEL SIGN AU */ + ["\u0ACD", "\u0ACD"], /* GUJARATI SIGN VIRAMA */ + ["\u0ACE", "\u0ACE"], + ["\u0ACF", "\u0ACF"], + ["\u0AD0", "\u0AD0"], /* GUJARATI OM */ + ["\u0AD1", "\u0AD1"], + ["\u0AD2", "\u0AD2"], + ["\u0AD3", "\u0AD3"], + ["\u0AD4", "\u0AD4"], + ["\u0AD5", "\u0AD5"], + ["\u0AD6", "\u0AD6"], + ["\u0AD7", "\u0AD7"], + ["\u0AD8", "\u0AD8"], + ["\u0AD9", "\u0AD9"], + ["\u0ADA", "\u0ADA"], + ["\u0ADB", "\u0ADB"], + ["\u0ADC", "\u0ADC"], + ["\u0ADD", "\u0ADD"], + ["\u0ADE", "\u0ADE"], + ["\u0ADF", "\u0ADF"], + ["\u0AE0", "\u0AE0"], /* GUJARATI LETTER VOCALIC RR */ + ["\u0AE1", "\u0AE1"], /* GUJARATI LETTER VOCALIC LL */ + ["\u0AE2", "\u0AE2"], /* GUJARATI VOWEL SIGN VOCALIC L */ + ["\u0AE3", "\u0AE3"], /* GUJARATI VOWEL SIGN VOCALIC LL */ + ["\u0AE4", "\u0AE4"], + ["\u0AE5", "\u0AE5"], + ["\u0AE6", "\u0AE6"], /* GUJARATI DIGIT ZERO */ + ["\u0AE7", "\u0AE7"], /* GUJARATI DIGIT ONE */ + ["\u0AE8", "\u0AE8"], /* GUJARATI DIGIT TWO */ + ["\u0AE9", "\u0AE9"], /* GUJARATI DIGIT THREE */ + ["\u0AEA", "\u0AEA"], /* GUJARATI DIGIT FOUR */ + ["\u0AEB", "\u0AEB"], /* GUJARATI DIGIT FIVE */ + ["\u0AEC", "\u0AEC"], /* GUJARATI DIGIT SIX */ + ["\u0AED", "\u0AED"], /* GUJARATI DIGIT SEVEN */ + ["\u0AEE", "\u0AEE"], /* GUJARATI DIGIT EIGHT */ + ["\u0AEF", "\u0AEF"], /* GUJARATI DIGIT NINE */ + ["\u0AF0", "\u0AF0"], /* GUJARATI ABBREVIATION SIGN */ + ["\u0AF1", "\u0AF1"], /* GUJARATI RUPEE SIGN */ + ["\u0AF2", "\u0AF2"], + ["\u0AF3", "\u0AF3"], + ["\u0AF4", "\u0AF4"], + ["\u0AF5", "\u0AF5"], + ["\u0AF6", "\u0AF6"], + ["\u0AF7", "\u0AF7"], + ["\u0AF8", "\u0AF8"], + ["\u0AF9", "\u0AF9"], /* GUJARATI LETTER ZHA */ + ["\u0AFA", "\u0AFA"], /* GUJARATI SIGN SUKUN */ + ["\u0AFB", "\u0AFB"], /* GUJARATI SIGN SHADDA */ + ["\u0AFC", "\u0AFC"], /* GUJARATI SIGN MADDAH */ + ["\u0AFD", "\u0AFD"], /* GUJARATI SIGN THREE-DOT NUKTA ABOVE */ + ["\u0AFE", "\u0AFE"], /* GUJARATI SIGN CIRCLE NUKTA ABOVE */ + ["\u0AFF", "\u0AFF"], /* GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE */ + ["\u0B00", "\u0B00"], + ["\u0B01", "\u0B01"], /* ORIYA SIGN CANDRABINDU */ + ["\u0B02", "\u0B02"], /* ORIYA SIGN ANUSVARA */ + ["\u0B03", "\u0B03"], /* ORIYA SIGN VISARGA */ + ["\u0B04", "\u0B04"], + ["\u0B05", "\u0B05"], /* ORIYA LETTER A */ + ["\u0B06", "\u0B06"], /* ORIYA LETTER AA */ + ["\u0B07", "\u0B07"], /* ORIYA LETTER I */ + ["\u0B08", "\u0B08"], /* ORIYA LETTER II */ + ["\u0B09", "\u0B09"], /* ORIYA LETTER U */ + ["\u0B0A", "\u0B0A"], /* ORIYA LETTER UU */ + ["\u0B0B", "\u0B0B"], /* ORIYA LETTER VOCALIC R */ + ["\u0B0C", "\u0B0C"], /* ORIYA LETTER VOCALIC L */ + ["\u0B0D", "\u0B0D"], + ["\u0B0E", "\u0B0E"], + ["\u0B0F", "\u0B0F"], /* ORIYA LETTER E */ + ["\u0B10", "\u0B10"], /* ORIYA LETTER AI */ + ["\u0B11", "\u0B11"], + ["\u0B12", "\u0B12"], + ["\u0B13", "\u0B13"], /* ORIYA LETTER O */ + ["\u0B14", "\u0B14"], /* ORIYA LETTER AU */ + ["\u0B15", "\u0B15"], /* ORIYA LETTER KA */ + ["\u0B16", "\u0B16"], /* ORIYA LETTER KHA */ + ["\u0B17", "\u0B17"], /* ORIYA LETTER GA */ + ["\u0B18", "\u0B18"], /* ORIYA LETTER GHA */ + ["\u0B19", "\u0B19"], /* ORIYA LETTER NGA */ + ["\u0B1A", "\u0B1A"], /* ORIYA LETTER CA */ + ["\u0B1B", "\u0B1B"], /* ORIYA LETTER CHA */ + ["\u0B1C", "\u0B1C"], /* ORIYA LETTER JA */ + ["\u0B1D", "\u0B1D"], /* ORIYA LETTER JHA */ + ["\u0B1E", "\u0B1E"], /* ORIYA LETTER NYA */ + ["\u0B1F", "\u0B1F"], /* ORIYA LETTER TTA */ + ["\u0B20", "\u0B20"], /* ORIYA LETTER TTHA */ + ["\u0B21", "\u0B21"], /* ORIYA LETTER DDA */ + ["\u0B22", "\u0B22"], /* ORIYA LETTER DDHA */ + ["\u0B23", "\u0B23"], /* ORIYA LETTER NNA */ + ["\u0B24", "\u0B24"], /* ORIYA LETTER TA */ + ["\u0B25", "\u0B25"], /* ORIYA LETTER THA */ + ["\u0B26", "\u0B26"], /* ORIYA LETTER DA */ + ["\u0B27", "\u0B27"], /* ORIYA LETTER DHA */ + ["\u0B28", "\u0B28"], /* ORIYA LETTER NA */ + ["\u0B29", "\u0B29"], + ["\u0B2A", "\u0B2A"], /* ORIYA LETTER PA */ + ["\u0B2B", "\u0B2B"], /* ORIYA LETTER PHA */ + ["\u0B2C", "\u0B2C"], /* ORIYA LETTER BA */ + ["\u0B2D", "\u0B2D"], /* ORIYA LETTER BHA */ + ["\u0B2E", "\u0B2E"], /* ORIYA LETTER MA */ + ["\u0B2F", "\u0B2F"], /* ORIYA LETTER YA */ + ["\u0B30", "\u0B30"], /* ORIYA LETTER RA */ + ["\u0B31", "\u0B31"], + ["\u0B32", "\u0B32"], /* ORIYA LETTER LA */ + ["\u0B33", "\u0B33"], /* ORIYA LETTER LLA */ + ["\u0B34", "\u0B34"], + ["\u0B35", "\u0B35"], /* ORIYA LETTER VA */ + ["\u0B36", "\u0B36"], /* ORIYA LETTER SHA */ + ["\u0B37", "\u0B37"], /* ORIYA LETTER SSA */ + ["\u0B38", "\u0B38"], /* ORIYA LETTER SA */ + ["\u0B39", "\u0B39"], /* ORIYA LETTER HA */ + ["\u0B3A", "\u0B3A"], + ["\u0B3B", "\u0B3B"], + ["\u0B3C", "\u0B3C"], /* ORIYA SIGN NUKTA */ + ["\u0B3D", "\u0B3D"], /* ORIYA SIGN AVAGRAHA */ + ["\u0B3E", "\u0B3E"], /* ORIYA VOWEL SIGN AA */ + ["\u0B3F", "\u0B3F"], /* ORIYA VOWEL SIGN I */ + ["\u0B40", "\u0B40"], /* ORIYA VOWEL SIGN II */ + ["\u0B41", "\u0B41"], /* ORIYA VOWEL SIGN U */ + ["\u0B42", "\u0B42"], /* ORIYA VOWEL SIGN UU */ + ["\u0B43", "\u0B43"], /* ORIYA VOWEL SIGN VOCALIC R */ + ["\u0B44", "\u0B44"], /* ORIYA VOWEL SIGN VOCALIC RR */ + ["\u0B45", "\u0B45"], + ["\u0B46", "\u0B46"], + ["\u0B47", "\u0B47"], /* ORIYA VOWEL SIGN E */ + ["\u0B48", "\u0B48"], /* ORIYA VOWEL SIGN AI */ + ["\u0B49", "\u0B49"], + ["\u0B4A", "\u0B4A"], + ["\u0B4B", "\u0B4B"], /* ORIYA VOWEL SIGN O */ + ["\u0B4C", "\u0B4C"], /* ORIYA VOWEL SIGN AU */ + ["\u0B4D", "\u0B4D"], /* ORIYA SIGN VIRAMA */ + ["\u0B4E", "\u0B4E"], + ["\u0B4F", "\u0B4F"], + ["\u0B50", "\u0B50"], + ["\u0B51", "\u0B51"], + ["\u0B52", "\u0B52"], + ["\u0B53", "\u0B53"], + ["\u0B54", "\u0B54"], + ["\u0B55", "\u0B55"], /* ORIYA SIGN OVERLINE */ + ["\u0B56", "\u0B56"], /* ORIYA AI LENGTH MARK */ + ["\u0B57", "\u0B57"], /* ORIYA AU LENGTH MARK */ + ["\u0B58", "\u0B58"], + ["\u0B59", "\u0B59"], + ["\u0B5A", "\u0B5A"], + ["\u0B5B", "\u0B5B"], + ["\u0B5C", "\u0B5C"], /* ORIYA LETTER RRA */ + ["\u0B5D", "\u0B5D"], /* ORIYA LETTER RHA */ + ["\u0B5E", "\u0B5E"], + ["\u0B5F", "\u0B5F"], /* ORIYA LETTER YYA */ + ["\u0B60", "\u0B60"], /* ORIYA LETTER VOCALIC RR */ + ["\u0B61", "\u0B61"], /* ORIYA LETTER VOCALIC LL */ + ["\u0B62", "\u0B62"], /* ORIYA VOWEL SIGN VOCALIC L */ + ["\u0B63", "\u0B63"], /* ORIYA VOWEL SIGN VOCALIC LL */ + ["\u0B64", "\u0B64"], + ["\u0B65", "\u0B65"], + ["\u0B66", "\u0B66"], /* ORIYA DIGIT ZERO */ + ["\u0B67", "\u0B67"], /* ORIYA DIGIT ONE */ + ["\u0B68", "\u0B68"], /* ORIYA DIGIT TWO */ + ["\u0B69", "\u0B69"], /* ORIYA DIGIT THREE */ + ["\u0B6A", "\u0B6A"], /* ORIYA DIGIT FOUR */ + ["\u0B6B", "\u0B6B"], /* ORIYA DIGIT FIVE */ + ["\u0B6C", "\u0B6C"], /* ORIYA DIGIT SIX */ + ["\u0B6D", "\u0B6D"], /* ORIYA DIGIT SEVEN */ + ["\u0B6E", "\u0B6E"], /* ORIYA DIGIT EIGHT */ + ["\u0B6F", "\u0B6F"], /* ORIYA DIGIT NINE */ + ["\u0B70", "\u0B70"], /* ORIYA ISSHAR */ + ["\u0B71", "\u0B71"], /* ORIYA LETTER WA */ + ["\u0B72", "\u0B72"], /* ORIYA FRACTION ONE QUARTER */ + ["\u0B73", "\u0B73"], /* ORIYA FRACTION ONE HALF */ + ["\u0B74", "\u0B74"], /* ORIYA FRACTION THREE QUARTERS */ + ["\u0B75", "\u0B75"], /* ORIYA FRACTION ONE SIXTEENTH */ + ["\u0B76", "\u0B76"], /* ORIYA FRACTION ONE EIGHTH */ + ["\u0B77", "\u0B77"], /* ORIYA FRACTION THREE SIXTEENTHS */ + ["\u0B78", "\u0B78"], + ["\u0B79", "\u0B79"], + ["\u0B7A", "\u0B7A"], + ["\u0B7B", "\u0B7B"], + ["\u0B7C", "\u0B7C"], + ["\u0B7D", "\u0B7D"], + ["\u0B7E", "\u0B7E"], + ["\u0B7F", "\u0B7F"], + ["\u0B80", "\u0B80"], + ["\u0B81", "\u0B81"], + ["\u0B82", "\u0B82"], /* TAMIL SIGN ANUSVARA */ + ["\u0B83", "\u0B83"], /* TAMIL SIGN VISARGA */ + ["\u0B84", "\u0B84"], + ["\u0B85", "\u0B85"], /* TAMIL LETTER A */ + ["\u0B86", "\u0B86"], /* TAMIL LETTER AA */ + ["\u0B87", "\u0B87"], /* TAMIL LETTER I */ + ["\u0B88", "\u0B88"], /* TAMIL LETTER II */ + ["\u0B89", "\u0B89"], /* TAMIL LETTER U */ + ["\u0B8A", "\u0B8A"], /* TAMIL LETTER UU */ + ["\u0B8B", "\u0B8B"], + ["\u0B8C", "\u0B8C"], + ["\u0B8D", "\u0B8D"], + ["\u0B8E", "\u0B8E"], /* TAMIL LETTER E */ + ["\u0B8F", "\u0B8F"], /* TAMIL LETTER EE */ + ["\u0B90", "\u0B90"], /* TAMIL LETTER AI */ + ["\u0B91", "\u0B91"], + ["\u0B92", "\u0B92"], /* TAMIL LETTER O */ + ["\u0B93", "\u0B93"], /* TAMIL LETTER OO */ + ["\u0B94", "\u0B94"], /* TAMIL LETTER AU */ + ["\u0B95", "\u0B95"], /* TAMIL LETTER KA */ + ["\u0B96", "\u0B96"], + ["\u0B97", "\u0B97"], + ["\u0B98", "\u0B98"], + ["\u0B99", "\u0B99"], /* TAMIL LETTER NGA */ + ["\u0B9A", "\u0B9A"], /* TAMIL LETTER CA */ + ["\u0B9B", "\u0B9B"], + ["\u0B9C", "\u0B9C"], /* TAMIL LETTER JA */ + ["\u0B9D", "\u0B9D"], + ["\u0B9E", "\u0B9E"], /* TAMIL LETTER NYA */ + ["\u0B9F", "\u0B9F"], /* TAMIL LETTER TTA */ + ["\u0BA0", "\u0BA0"], + ["\u0BA1", "\u0BA1"], + ["\u0BA2", "\u0BA2"], + ["\u0BA3", "\u0BA3"], /* TAMIL LETTER NNA */ + ["\u0BA4", "\u0BA4"], /* TAMIL LETTER TA */ + ["\u0BA5", "\u0BA5"], + ["\u0BA6", "\u0BA6"], + ["\u0BA7", "\u0BA7"], + ["\u0BA8", "\u0BA8"], /* TAMIL LETTER NA */ + ["\u0BA9", "\u0BA9"], /* TAMIL LETTER NNNA */ + ["\u0BAA", "\u0BAA"], /* TAMIL LETTER PA */ + ["\u0BAB", "\u0BAB"], + ["\u0BAC", "\u0BAC"], + ["\u0BAD", "\u0BAD"], + ["\u0BAE", "\u0BAE"], /* TAMIL LETTER MA */ + ["\u0BAF", "\u0BAF"], /* TAMIL LETTER YA */ + ["\u0BB0", "\u0BB0"], /* TAMIL LETTER RA */ + ["\u0BB1", "\u0BB1"], /* TAMIL LETTER RRA */ + ["\u0BB2", "\u0BB2"], /* TAMIL LETTER LA */ + ["\u0BB3", "\u0BB3"], /* TAMIL LETTER LLA */ + ["\u0BB4", "\u0BB4"], /* TAMIL LETTER LLLA */ + ["\u0BB5", "\u0BB5"], /* TAMIL LETTER VA */ + ["\u0BB6", "\u0BB6"], /* TAMIL LETTER SHA */ + ["\u0BB7", "\u0BB7"], /* TAMIL LETTER SSA */ + ["\u0BB8", "\u0BB8"], /* TAMIL LETTER SA */ + ["\u0BB9", "\u0BB9"], /* TAMIL LETTER HA */ + ["\u0BBA", "\u0BBA"], + ["\u0BBB", "\u0BBB"], + ["\u0BBC", "\u0BBC"], + ["\u0BBD", "\u0BBD"], + ["\u0BBE", "\u0BBE"], /* TAMIL VOWEL SIGN AA */ + ["\u0BBF", "\u0BBF"], /* TAMIL VOWEL SIGN I */ + ["\u0BC0", "\u0BC0"], /* TAMIL VOWEL SIGN II */ + ["\u0BC1", "\u0BC1"], /* TAMIL VOWEL SIGN U */ + ["\u0BC2", "\u0BC2"], /* TAMIL VOWEL SIGN UU */ + ["\u0BC3", "\u0BC3"], + ["\u0BC4", "\u0BC4"], + ["\u0BC5", "\u0BC5"], + ["\u0BC6", "\u0BC6"], /* TAMIL VOWEL SIGN E */ + ["\u0BC7", "\u0BC7"], /* TAMIL VOWEL SIGN EE */ + ["\u0BC8", "\u0BC8"], /* TAMIL VOWEL SIGN AI */ + ["\u0BC9", "\u0BC9"], + ["\u0BCA", "\u0BCA"], /* TAMIL VOWEL SIGN O */ + ["\u0BCB", "\u0BCB"], /* TAMIL VOWEL SIGN OO */ + ["\u0BCC", "\u0BCC"], /* TAMIL VOWEL SIGN AU */ + ["\u0BCD", "\u0BCD"], /* TAMIL SIGN VIRAMA */ + ["\u0BCE", "\u0BCE"], + ["\u0BCF", "\u0BCF"], + ["\u0BD0", "\u0BD0"], /* TAMIL OM */ + ["\u0BD1", "\u0BD1"], + ["\u0BD2", "\u0BD2"], + ["\u0BD3", "\u0BD3"], + ["\u0BD4", "\u0BD4"], + ["\u0BD5", "\u0BD5"], + ["\u0BD6", "\u0BD6"], + ["\u0BD7", "\u0BD7"], /* TAMIL AU LENGTH MARK */ + ["\u0BD8", "\u0BD8"], + ["\u0BD9", "\u0BD9"], + ["\u0BDA", "\u0BDA"], + ["\u0BDB", "\u0BDB"], + ["\u0BDC", "\u0BDC"], + ["\u0BDD", "\u0BDD"], + ["\u0BDE", "\u0BDE"], + ["\u0BDF", "\u0BDF"], + ["\u0BE0", "\u0BE0"], + ["\u0BE1", "\u0BE1"], + ["\u0BE2", "\u0BE2"], + ["\u0BE3", "\u0BE3"], + ["\u0BE4", "\u0BE4"], + ["\u0BE5", "\u0BE5"], + ["\u0BE6", "\u0BE6"], /* TAMIL DIGIT ZERO */ + ["\u0BE7", "\u0BE7"], /* TAMIL DIGIT ONE */ + ["\u0BE8", "\u0BE8"], /* TAMIL DIGIT TWO */ + ["\u0BE9", "\u0BE9"], /* TAMIL DIGIT THREE */ + ["\u0BEA", "\u0BEA"], /* TAMIL DIGIT FOUR */ + ["\u0BEB", "\u0BEB"], /* TAMIL DIGIT FIVE */ + ["\u0BEC", "\u0BEC"], /* TAMIL DIGIT SIX */ + ["\u0BED", "\u0BED"], /* TAMIL DIGIT SEVEN */ + ["\u0BEE", "\u0BEE"], /* TAMIL DIGIT EIGHT */ + ["\u0BEF", "\u0BEF"], /* TAMIL DIGIT NINE */ + ["\u0BF0", "\u0BF0"], /* TAMIL NUMBER TEN */ + ["\u0BF1", "\u0BF1"], /* TAMIL NUMBER ONE HUNDRED */ + ["\u0BF2", "\u0BF2"], /* TAMIL NUMBER ONE THOUSAND */ + ["\u0BF3", "\u0BF3"], /* TAMIL DAY SIGN */ + ["\u0BF4", "\u0BF4"], /* TAMIL MONTH SIGN */ + ["\u0BF5", "\u0BF5"], /* TAMIL YEAR SIGN */ + ["\u0BF6", "\u0BF6"], /* TAMIL DEBIT SIGN */ + ["\u0BF7", "\u0BF7"], /* TAMIL CREDIT SIGN */ + ["\u0BF8", "\u0BF8"], /* TAMIL AS ABOVE SIGN */ + ["\u0BF9", "\u0BF9"], /* TAMIL RUPEE SIGN */ + ["\u0BFA", "\u0BFA"], /* TAMIL NUMBER SIGN */ + ["\u0BFB", "\u0BFB"], + ["\u0BFC", "\u0BFC"], + ["\u0BFD", "\u0BFD"], + ["\u0BFE", "\u0BFE"], + ["\u0BFF", "\u0BFF"], + ["\u0C00", "\u0C00"], /* TELUGU SIGN COMBINING CANDRABINDU ABOVE */ + ["\u0C01", "\u0C01"], /* TELUGU SIGN CANDRABINDU */ + ["\u0C02", "\u0C02"], /* TELUGU SIGN ANUSVARA */ + ["\u0C03", "\u0C03"], /* TELUGU SIGN VISARGA */ + ["\u0C04", "\u0C04"], /* TELUGU SIGN COMBINING ANUSVARA ABOVE */ + ["\u0C05", "\u0C05"], /* TELUGU LETTER A */ + ["\u0C06", "\u0C06"], /* TELUGU LETTER AA */ + ["\u0C07", "\u0C07"], /* TELUGU LETTER I */ + ["\u0C08", "\u0C08"], /* TELUGU LETTER II */ + ["\u0C09", "\u0C09"], /* TELUGU LETTER U */ + ["\u0C0A", "\u0C0A"], /* TELUGU LETTER UU */ + ["\u0C0B", "\u0C0B"], /* TELUGU LETTER VOCALIC R */ + ["\u0C0C", "\u0C0C"], /* TELUGU LETTER VOCALIC L */ + ["\u0C0D", "\u0C0D"], + ["\u0C0E", "\u0C0E"], /* TELUGU LETTER E */ + ["\u0C0F", "\u0C0F"], /* TELUGU LETTER EE */ + ["\u0C10", "\u0C10"], /* TELUGU LETTER AI */ + ["\u0C11", "\u0C11"], + ["\u0C12", "\u0C12"], /* TELUGU LETTER O */ + ["\u0C13", "\u0C13"], /* TELUGU LETTER OO */ + ["\u0C14", "\u0C14"], /* TELUGU LETTER AU */ + ["\u0C15", "\u0C15"], /* TELUGU LETTER KA */ + ["\u0C16", "\u0C16"], /* TELUGU LETTER KHA */ + ["\u0C17", "\u0C17"], /* TELUGU LETTER GA */ + ["\u0C18", "\u0C18"], /* TELUGU LETTER GHA */ + ["\u0C19", "\u0C19"], /* TELUGU LETTER NGA */ + ["\u0C1A", "\u0C1A"], /* TELUGU LETTER CA */ + ["\u0C1B", "\u0C1B"], /* TELUGU LETTER CHA */ + ["\u0C1C", "\u0C1C"], /* TELUGU LETTER JA */ + ["\u0C1D", "\u0C1D"], /* TELUGU LETTER JHA */ + ["\u0C1E", "\u0C1E"], /* TELUGU LETTER NYA */ + ["\u0C1F", "\u0C1F"], /* TELUGU LETTER TTA */ + ["\u0C20", "\u0C20"], /* TELUGU LETTER TTHA */ + ["\u0C21", "\u0C21"], /* TELUGU LETTER DDA */ + ["\u0C22", "\u0C22"], /* TELUGU LETTER DDHA */ + ["\u0C23", "\u0C23"], /* TELUGU LETTER NNA */ + ["\u0C24", "\u0C24"], /* TELUGU LETTER TA */ + ["\u0C25", "\u0C25"], /* TELUGU LETTER THA */ + ["\u0C26", "\u0C26"], /* TELUGU LETTER DA */ + ["\u0C27", "\u0C27"], /* TELUGU LETTER DHA */ + ["\u0C28", "\u0C28"], /* TELUGU LETTER NA */ + ["\u0C29", "\u0C29"], + ["\u0C2A", "\u0C2A"], /* TELUGU LETTER PA */ + ["\u0C2B", "\u0C2B"], /* TELUGU LETTER PHA */ + ["\u0C2C", "\u0C2C"], /* TELUGU LETTER BA */ + ["\u0C2D", "\u0C2D"], /* TELUGU LETTER BHA */ + ["\u0C2E", "\u0C2E"], /* TELUGU LETTER MA */ + ["\u0C2F", "\u0C2F"], /* TELUGU LETTER YA */ + ["\u0C30", "\u0C30"], /* TELUGU LETTER RA */ + ["\u0C31", "\u0C31"], /* TELUGU LETTER RRA */ + ["\u0C32", "\u0C32"], /* TELUGU LETTER LA */ + ["\u0C33", "\u0C33"], /* TELUGU LETTER LLA */ + ["\u0C34", "\u0C34"], /* TELUGU LETTER LLLA */ + ["\u0C35", "\u0C35"], /* TELUGU LETTER VA */ + ["\u0C36", "\u0C36"], /* TELUGU LETTER SHA */ + ["\u0C37", "\u0C37"], /* TELUGU LETTER SSA */ + ["\u0C38", "\u0C38"], /* TELUGU LETTER SA */ + ["\u0C39", "\u0C39"], /* TELUGU LETTER HA */ + ["\u0C3A", "\u0C3A"], + ["\u0C3B", "\u0C3B"], + ["\u0C3C", "\u0C3C"], /* TELUGU SIGN NUKTA */ + ["\u0C3D", "\u0C3D"], /* TELUGU SIGN AVAGRAHA */ + ["\u0C3E", "\u0C3E"], /* TELUGU VOWEL SIGN AA */ + ["\u0C3F", "\u0C3F"], /* TELUGU VOWEL SIGN I */ + ["\u0C40", "\u0C40"], /* TELUGU VOWEL SIGN II */ + ["\u0C41", "\u0C41"], /* TELUGU VOWEL SIGN U */ + ["\u0C42", "\u0C42"], /* TELUGU VOWEL SIGN UU */ + ["\u0C43", "\u0C43"], /* TELUGU VOWEL SIGN VOCALIC R */ + ["\u0C44", "\u0C44"], /* TELUGU VOWEL SIGN VOCALIC RR */ + ["\u0C45", "\u0C45"], + ["\u0C46", "\u0C46"], /* TELUGU VOWEL SIGN E */ + ["\u0C47", "\u0C47"], /* TELUGU VOWEL SIGN EE */ + ["\u0C48", "\u0C48"], /* TELUGU VOWEL SIGN AI */ + ["\u0C49", "\u0C49"], + ["\u0C4A", "\u0C4A"], /* TELUGU VOWEL SIGN O */ + ["\u0C4B", "\u0C4B"], /* TELUGU VOWEL SIGN OO */ + ["\u0C4C", "\u0C4C"], /* TELUGU VOWEL SIGN AU */ + ["\u0C4D", "\u0C4D"], /* TELUGU SIGN VIRAMA */ + ["\u0C4E", "\u0C4E"], + ["\u0C4F", "\u0C4F"], + ["\u0C50", "\u0C50"], + ["\u0C51", "\u0C51"], + ["\u0C52", "\u0C52"], + ["\u0C53", "\u0C53"], + ["\u0C54", "\u0C54"], + ["\u0C55", "\u0C55"], /* TELUGU LENGTH MARK */ + ["\u0C56", "\u0C56"], /* TELUGU AI LENGTH MARK */ + ["\u0C57", "\u0C57"], + ["\u0C58", "\u0C58"], /* TELUGU LETTER TSA */ + ["\u0C59", "\u0C59"], /* TELUGU LETTER DZA */ + ["\u0C5A", "\u0C5A"], /* TELUGU LETTER RRRA */ + ["\u0C5B", "\u0C5B"], + ["\u0C5C", "\u0C5C"], + ["\u0C5D", "\u0C5D"], /* TELUGU LETTER NAKAARA POLLU */ + ["\u0C5E", "\u0C5E"], + ["\u0C5F", "\u0C5F"], + ["\u0C60", "\u0C60"], /* TELUGU LETTER VOCALIC RR */ + ["\u0C61", "\u0C61"], /* TELUGU LETTER VOCALIC LL */ + ["\u0C62", "\u0C62"], /* TELUGU VOWEL SIGN VOCALIC L */ + ["\u0C63", "\u0C63"], /* TELUGU VOWEL SIGN VOCALIC LL */ + ["\u0C64", "\u0C64"], + ["\u0C65", "\u0C65"], + ["\u0C66", "\u0C66"], /* TELUGU DIGIT ZERO */ + ["\u0C67", "\u0C67"], /* TELUGU DIGIT ONE */ + ["\u0C68", "\u0C68"], /* TELUGU DIGIT TWO */ + ["\u0C69", "\u0C69"], /* TELUGU DIGIT THREE */ + ["\u0C6A", "\u0C6A"], /* TELUGU DIGIT FOUR */ + ["\u0C6B", "\u0C6B"], /* TELUGU DIGIT FIVE */ + ["\u0C6C", "\u0C6C"], /* TELUGU DIGIT SIX */ + ["\u0C6D", "\u0C6D"], /* TELUGU DIGIT SEVEN */ + ["\u0C6E", "\u0C6E"], /* TELUGU DIGIT EIGHT */ + ["\u0C6F", "\u0C6F"], /* TELUGU DIGIT NINE */ + ["\u0C70", "\u0C70"], + ["\u0C71", "\u0C71"], + ["\u0C72", "\u0C72"], + ["\u0C73", "\u0C73"], + ["\u0C74", "\u0C74"], + ["\u0C75", "\u0C75"], + ["\u0C76", "\u0C76"], + ["\u0C77", "\u0C77"], /* TELUGU SIGN SIDDHAM */ + ["\u0C78", "\u0C78"], /* TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR */ + ["\u0C79", "\u0C79"], /* TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR */ + ["\u0C7A", "\u0C7A"], /* TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR */ + ["\u0C7B", "\u0C7B"], /* TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR */ + ["\u0C7C", "\u0C7C"], /* TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR */ + ["\u0C7D", "\u0C7D"], /* TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR */ + ["\u0C7E", "\u0C7E"], /* TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR */ + ["\u0C7F", "\u0C7F"], /* TELUGU SIGN TUUMU */ + ["\u0C80", "\u0C80"], /* KANNADA SIGN SPACING CANDRABINDU */ + ["\u0C81", "\u0C81"], /* KANNADA SIGN CANDRABINDU */ + ["\u0C82", "\u0C82"], /* KANNADA SIGN ANUSVARA */ + ["\u0C83", "\u0C83"], /* KANNADA SIGN VISARGA */ + ["\u0C84", "\u0C84"], /* KANNADA SIGN SIDDHAM */ + ["\u0C85", "\u0C85"], /* KANNADA LETTER A */ + ["\u0C86", "\u0C86"], /* KANNADA LETTER AA */ + ["\u0C87", "\u0C87"], /* KANNADA LETTER I */ + ["\u0C88", "\u0C88"], /* KANNADA LETTER II */ + ["\u0C89", "\u0C89"], /* KANNADA LETTER U */ + ["\u0C8A", "\u0C8A"], /* KANNADA LETTER UU */ + ["\u0C8B", "\u0C8B"], /* KANNADA LETTER VOCALIC R */ + ["\u0C8C", "\u0C8C"], /* KANNADA LETTER VOCALIC L */ + ["\u0C8D", "\u0C8D"], + ["\u0C8E", "\u0C8E"], /* KANNADA LETTER E */ + ["\u0C8F", "\u0C8F"], /* KANNADA LETTER EE */ + ["\u0C90", "\u0C90"], /* KANNADA LETTER AI */ + ["\u0C91", "\u0C91"], + ["\u0C92", "\u0C92"], /* KANNADA LETTER O */ + ["\u0C93", "\u0C93"], /* KANNADA LETTER OO */ + ["\u0C94", "\u0C94"], /* KANNADA LETTER AU */ + ["\u0C95", "\u0C95"], /* KANNADA LETTER KA */ + ["\u0C96", "\u0C96"], /* KANNADA LETTER KHA */ + ["\u0C97", "\u0C97"], /* KANNADA LETTER GA */ + ["\u0C98", "\u0C98"], /* KANNADA LETTER GHA */ + ["\u0C99", "\u0C99"], /* KANNADA LETTER NGA */ + ["\u0C9A", "\u0C9A"], /* KANNADA LETTER CA */ + ["\u0C9B", "\u0C9B"], /* KANNADA LETTER CHA */ + ["\u0C9C", "\u0C9C"], /* KANNADA LETTER JA */ + ["\u0C9D", "\u0C9D"], /* KANNADA LETTER JHA */ + ["\u0C9E", "\u0C9E"], /* KANNADA LETTER NYA */ + ["\u0C9F", "\u0C9F"], /* KANNADA LETTER TTA */ + ["\u0CA0", "\u0CA0"], /* KANNADA LETTER TTHA */ + ["\u0CA1", "\u0CA1"], /* KANNADA LETTER DDA */ + ["\u0CA2", "\u0CA2"], /* KANNADA LETTER DDHA */ + ["\u0CA3", "\u0CA3"], /* KANNADA LETTER NNA */ + ["\u0CA4", "\u0CA4"], /* KANNADA LETTER TA */ + ["\u0CA5", "\u0CA5"], /* KANNADA LETTER THA */ + ["\u0CA6", "\u0CA6"], /* KANNADA LETTER DA */ + ["\u0CA7", "\u0CA7"], /* KANNADA LETTER DHA */ + ["\u0CA8", "\u0CA8"], /* KANNADA LETTER NA */ + ["\u0CA9", "\u0CA9"], + ["\u0CAA", "\u0CAA"], /* KANNADA LETTER PA */ + ["\u0CAB", "\u0CAB"], /* KANNADA LETTER PHA */ + ["\u0CAC", "\u0CAC"], /* KANNADA LETTER BA */ + ["\u0CAD", "\u0CAD"], /* KANNADA LETTER BHA */ + ["\u0CAE", "\u0CAE"], /* KANNADA LETTER MA */ + ["\u0CAF", "\u0CAF"], /* KANNADA LETTER YA */ + ["\u0CB0", "\u0CB0"], /* KANNADA LETTER RA */ + ["\u0CB1", "\u0CB1"], /* KANNADA LETTER RRA */ + ["\u0CB2", "\u0CB2"], /* KANNADA LETTER LA */ + ["\u0CB3", "\u0CB3"], /* KANNADA LETTER LLA */ + ["\u0CB4", "\u0CB4"], + ["\u0CB5", "\u0CB5"], /* KANNADA LETTER VA */ + ["\u0CB6", "\u0CB6"], /* KANNADA LETTER SHA */ + ["\u0CB7", "\u0CB7"], /* KANNADA LETTER SSA */ + ["\u0CB8", "\u0CB8"], /* KANNADA LETTER SA */ + ["\u0CB9", "\u0CB9"], /* KANNADA LETTER HA */ + ["\u0CBA", "\u0CBA"], + ["\u0CBB", "\u0CBB"], + ["\u0CBC", "\u0CBC"], /* KANNADA SIGN NUKTA */ + ["\u0CBD", "\u0CBD"], /* KANNADA SIGN AVAGRAHA */ + ["\u0CBE", "\u0CBE"], /* KANNADA VOWEL SIGN AA */ + ["\u0CBF", "\u0CBF"], /* KANNADA VOWEL SIGN I */ + ["\u0CC0", "\u0CC0"], /* KANNADA VOWEL SIGN II */ + ["\u0CC1", "\u0CC1"], /* KANNADA VOWEL SIGN U */ + ["\u0CC2", "\u0CC2"], /* KANNADA VOWEL SIGN UU */ + ["\u0CC3", "\u0CC3"], /* KANNADA VOWEL SIGN VOCALIC R */ + ["\u0CC4", "\u0CC4"], /* KANNADA VOWEL SIGN VOCALIC RR */ + ["\u0CC5", "\u0CC5"], + ["\u0CC6", "\u0CC6"], /* KANNADA VOWEL SIGN E */ + ["\u0CC7", "\u0CC7"], /* KANNADA VOWEL SIGN EE */ + ["\u0CC8", "\u0CC8"], /* KANNADA VOWEL SIGN AI */ + ["\u0CC9", "\u0CC9"], + ["\u0CCA", "\u0CCA"], /* KANNADA VOWEL SIGN O */ + ["\u0CCB", "\u0CCB"], /* KANNADA VOWEL SIGN OO */ + ["\u0CCC", "\u0CCC"], /* KANNADA VOWEL SIGN AU */ + ["\u0CCD", "\u0CCD"], /* KANNADA SIGN VIRAMA */ + ["\u0CCE", "\u0CCE"], + ["\u0CCF", "\u0CCF"], + ["\u0CD0", "\u0CD0"], + ["\u0CD1", "\u0CD1"], + ["\u0CD2", "\u0CD2"], + ["\u0CD3", "\u0CD3"], + ["\u0CD4", "\u0CD4"], + ["\u0CD5", "\u0CD5"], /* KANNADA LENGTH MARK */ + ["\u0CD6", "\u0CD6"], /* KANNADA AI LENGTH MARK */ + ["\u0CD7", "\u0CD7"], + ["\u0CD8", "\u0CD8"], + ["\u0CD9", "\u0CD9"], + ["\u0CDA", "\u0CDA"], + ["\u0CDB", "\u0CDB"], + ["\u0CDC", "\u0CDC"], + ["\u0CDD", "\u0CDD"], /* KANNADA LETTER NAKAARA POLLU */ + ["\u0CDE", "\u0CDE"], /* KANNADA LETTER FA */ + ["\u0CDF", "\u0CDF"], + ["\u0CE0", "\u0CE0"], /* KANNADA LETTER VOCALIC RR */ + ["\u0CE1", "\u0CE1"], /* KANNADA LETTER VOCALIC LL */ + ["\u0CE2", "\u0CE2"], /* KANNADA VOWEL SIGN VOCALIC L */ + ["\u0CE3", "\u0CE3"], /* KANNADA VOWEL SIGN VOCALIC LL */ + ["\u0CE4", "\u0CE4"], + ["\u0CE5", "\u0CE5"], + ["\u0CE6", "\u0CE6"], /* KANNADA DIGIT ZERO */ + ["\u0CE7", "\u0CE7"], /* KANNADA DIGIT ONE */ + ["\u0CE8", "\u0CE8"], /* KANNADA DIGIT TWO */ + ["\u0CE9", "\u0CE9"], /* KANNADA DIGIT THREE */ + ["\u0CEA", "\u0CEA"], /* KANNADA DIGIT FOUR */ + ["\u0CEB", "\u0CEB"], /* KANNADA DIGIT FIVE */ + ["\u0CEC", "\u0CEC"], /* KANNADA DIGIT SIX */ + ["\u0CED", "\u0CED"], /* KANNADA DIGIT SEVEN */ + ["\u0CEE", "\u0CEE"], /* KANNADA DIGIT EIGHT */ + ["\u0CEF", "\u0CEF"], /* KANNADA DIGIT NINE */ + ["\u0CF0", "\u0CF0"], + ["\u0CF1", "\u0CF1"], /* KANNADA SIGN JIHVAMULIYA */ + ["\u0CF2", "\u0CF2"], /* KANNADA SIGN UPADHMANIYA */ + ["\u0CF3", "\u0CF3"], /* KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT */ + ["\u0CF4", "\u0CF4"], + ["\u0CF5", "\u0CF5"], + ["\u0CF6", "\u0CF6"], + ["\u0CF7", "\u0CF7"], + ["\u0CF8", "\u0CF8"], + ["\u0CF9", "\u0CF9"], + ["\u0CFA", "\u0CFA"], + ["\u0CFB", "\u0CFB"], + ["\u0CFC", "\u0CFC"], + ["\u0CFD", "\u0CFD"], + ["\u0CFE", "\u0CFE"], + ["\u0CFF", "\u0CFF"], + ["\u0D00", "\u0D00"], /* MALAYALAM SIGN COMBINING ANUSVARA ABOVE */ + ["\u0D01", "\u0D01"], /* MALAYALAM SIGN CANDRABINDU */ + ["\u0D02", "\u0D02"], /* MALAYALAM SIGN ANUSVARA */ + ["\u0D03", "\u0D03"], /* MALAYALAM SIGN VISARGA */ + ["\u0D04", "\u0D04"], /* MALAYALAM LETTER VEDIC ANUSVARA */ + ["\u0D05", "\u0D05"], /* MALAYALAM LETTER A */ + ["\u0D06", "\u0D06"], /* MALAYALAM LETTER AA */ + ["\u0D07", "\u0D07"], /* MALAYALAM LETTER I */ + ["\u0D08", "\u0D08"], /* MALAYALAM LETTER II */ + ["\u0D09", "\u0D09"], /* MALAYALAM LETTER U */ + ["\u0D0A", "\u0D0A"], /* MALAYALAM LETTER UU */ + ["\u0D0B", "\u0D0B"], /* MALAYALAM LETTER VOCALIC R */ + ["\u0D0C", "\u0D0C"], /* MALAYALAM LETTER VOCALIC L */ + ["\u0D0D", "\u0D0D"], + ["\u0D0E", "\u0D0E"], /* MALAYALAM LETTER E */ + ["\u0D0F", "\u0D0F"], /* MALAYALAM LETTER EE */ + ["\u0D10", "\u0D10"], /* MALAYALAM LETTER AI */ + ["\u0D11", "\u0D11"], + ["\u0D12", "\u0D12"], /* MALAYALAM LETTER O */ + ["\u0D13", "\u0D13"], /* MALAYALAM LETTER OO */ + ["\u0D14", "\u0D14"], /* MALAYALAM LETTER AU */ + ["\u0D15", "\u0D15"], /* MALAYALAM LETTER KA */ + ["\u0D16", "\u0D16"], /* MALAYALAM LETTER KHA */ + ["\u0D17", "\u0D17"], /* MALAYALAM LETTER GA */ + ["\u0D18", "\u0D18"], /* MALAYALAM LETTER GHA */ + ["\u0D19", "\u0D19"], /* MALAYALAM LETTER NGA */ + ["\u0D1A", "\u0D1A"], /* MALAYALAM LETTER CA */ + ["\u0D1B", "\u0D1B"], /* MALAYALAM LETTER CHA */ + ["\u0D1C", "\u0D1C"], /* MALAYALAM LETTER JA */ + ["\u0D1D", "\u0D1D"], /* MALAYALAM LETTER JHA */ + ["\u0D1E", "\u0D1E"], /* MALAYALAM LETTER NYA */ + ["\u0D1F", "\u0D1F"], /* MALAYALAM LETTER TTA */ + ["\u0D20", "\u0D20"], /* MALAYALAM LETTER TTHA */ + ["\u0D21", "\u0D21"], /* MALAYALAM LETTER DDA */ + ["\u0D22", "\u0D22"], /* MALAYALAM LETTER DDHA */ + ["\u0D23", "\u0D23"], /* MALAYALAM LETTER NNA */ + ["\u0D24", "\u0D24"], /* MALAYALAM LETTER TA */ + ["\u0D25", "\u0D25"], /* MALAYALAM LETTER THA */ + ["\u0D26", "\u0D26"], /* MALAYALAM LETTER DA */ + ["\u0D27", "\u0D27"], /* MALAYALAM LETTER DHA */ + ["\u0D28", "\u0D28"], /* MALAYALAM LETTER NA */ + ["\u0D29", "\u0D29"], /* MALAYALAM LETTER NNNA */ + ["\u0D2A", "\u0D2A"], /* MALAYALAM LETTER PA */ + ["\u0D2B", "\u0D2B"], /* MALAYALAM LETTER PHA */ + ["\u0D2C", "\u0D2C"], /* MALAYALAM LETTER BA */ + ["\u0D2D", "\u0D2D"], /* MALAYALAM LETTER BHA */ + ["\u0D2E", "\u0D2E"], /* MALAYALAM LETTER MA */ + ["\u0D2F", "\u0D2F"], /* MALAYALAM LETTER YA */ + ["\u0D30", "\u0D30"], /* MALAYALAM LETTER RA */ + ["\u0D31", "\u0D31"], /* MALAYALAM LETTER RRA */ + ["\u0D32", "\u0D32"], /* MALAYALAM LETTER LA */ + ["\u0D33", "\u0D33"], /* MALAYALAM LETTER LLA */ + ["\u0D34", "\u0D34"], /* MALAYALAM LETTER LLLA */ + ["\u0D35", "\u0D35"], /* MALAYALAM LETTER VA */ + ["\u0D36", "\u0D36"], /* MALAYALAM LETTER SHA */ + ["\u0D37", "\u0D37"], /* MALAYALAM LETTER SSA */ + ["\u0D38", "\u0D38"], /* MALAYALAM LETTER SA */ + ["\u0D39", "\u0D39"], /* MALAYALAM LETTER HA */ + ["\u0D3A", "\u0D3A"], /* MALAYALAM LETTER TTTA */ + ["\u0D3B", "\u0D3B"], /* MALAYALAM SIGN VERTICAL BAR VIRAMA */ + ["\u0D3C", "\u0D3C"], /* MALAYALAM SIGN CIRCULAR VIRAMA */ + ["\u0D3D", "\u0D3D"], /* MALAYALAM SIGN AVAGRAHA */ + ["\u0D3E", "\u0D3E"], /* MALAYALAM VOWEL SIGN AA */ + ["\u0D3F", "\u0D3F"], /* MALAYALAM VOWEL SIGN I */ + ["\u0D40", "\u0D40"], /* MALAYALAM VOWEL SIGN II */ + ["\u0D41", "\u0D41"], /* MALAYALAM VOWEL SIGN U */ + ["\u0D42", "\u0D42"], /* MALAYALAM VOWEL SIGN UU */ + ["\u0D43", "\u0D43"], /* MALAYALAM VOWEL SIGN VOCALIC R */ + ["\u0D44", "\u0D44"], /* MALAYALAM VOWEL SIGN VOCALIC RR */ + ["\u0D45", "\u0D45"], + ["\u0D46", "\u0D46"], /* MALAYALAM VOWEL SIGN E */ + ["\u0D47", "\u0D47"], /* MALAYALAM VOWEL SIGN EE */ + ["\u0D48", "\u0D48"], /* MALAYALAM VOWEL SIGN AI */ + ["\u0D49", "\u0D49"], + ["\u0D4A", "\u0D4A"], /* MALAYALAM VOWEL SIGN O */ + ["\u0D4B", "\u0D4B"], /* MALAYALAM VOWEL SIGN OO */ + ["\u0D4C", "\u0D4C"], /* MALAYALAM VOWEL SIGN AU */ + ["\u0D4D", "\u0D4D"], /* MALAYALAM SIGN VIRAMA */ + ["\u0D4E", "\u0D4E"], /* MALAYALAM LETTER DOT REPH */ + ["\u0D4F", "\u0D4F"], /* MALAYALAM SIGN PARA */ + ["\u0D50", "\u0D50"], + ["\u0D51", "\u0D51"], + ["\u0D52", "\u0D52"], + ["\u0D53", "\u0D53"], + ["\u0D54", "\u0D54"], /* MALAYALAM LETTER CHILLU M */ + ["\u0D55", "\u0D55"], /* MALAYALAM LETTER CHILLU Y */ + ["\u0D56", "\u0D56"], /* MALAYALAM LETTER CHILLU LLL */ + ["\u0D57", "\u0D57"], /* MALAYALAM AU LENGTH MARK */ + ["\u0D58", "\u0D58"], /* MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH */ + ["\u0D59", "\u0D59"], /* MALAYALAM FRACTION ONE FORTIETH */ + ["\u0D5A", "\u0D5A"], /* MALAYALAM FRACTION THREE EIGHTIETHS */ + ["\u0D5B", "\u0D5B"], /* MALAYALAM FRACTION ONE TWENTIETH */ + ["\u0D5C", "\u0D5C"], /* MALAYALAM FRACTION ONE TENTH */ + ["\u0D5D", "\u0D5D"], /* MALAYALAM FRACTION THREE TWENTIETHS */ + ["\u0D5E", "\u0D5E"], /* MALAYALAM FRACTION ONE FIFTH */ + ["\u0D5F", "\u0D5F"], /* MALAYALAM LETTER ARCHAIC II */ + ["\u0D60", "\u0D60"], /* MALAYALAM LETTER VOCALIC RR */ + ["\u0D61", "\u0D61"], /* MALAYALAM LETTER VOCALIC LL */ + ["\u0D62", "\u0D62"], /* MALAYALAM VOWEL SIGN VOCALIC L */ + ["\u0D63", "\u0D63"], /* MALAYALAM VOWEL SIGN VOCALIC LL */ + ["\u0D64", "\u0D64"], + ["\u0D65", "\u0D65"], + ["\u0D66", "\u0D66"], /* MALAYALAM DIGIT ZERO */ + ["\u0D67", "\u0D67"], /* MALAYALAM DIGIT ONE */ + ["\u0D68", "\u0D68"], /* MALAYALAM DIGIT TWO */ + ["\u0D69", "\u0D69"], /* MALAYALAM DIGIT THREE */ + ["\u0D6A", "\u0D6A"], /* MALAYALAM DIGIT FOUR */ + ["\u0D6B", "\u0D6B"], /* MALAYALAM DIGIT FIVE */ + ["\u0D6C", "\u0D6C"], /* MALAYALAM DIGIT SIX */ + ["\u0D6D", "\u0D6D"], /* MALAYALAM DIGIT SEVEN */ + ["\u0D6E", "\u0D6E"], /* MALAYALAM DIGIT EIGHT */ + ["\u0D6F", "\u0D6F"], /* MALAYALAM DIGIT NINE */ + ["\u0D70", "\u0D70"], /* MALAYALAM NUMBER TEN */ + ["\u0D71", "\u0D71"], /* MALAYALAM NUMBER ONE HUNDRED */ + ["\u0D72", "\u0D72"], /* MALAYALAM NUMBER ONE THOUSAND */ + ["\u0D73", "\u0D73"], /* MALAYALAM FRACTION ONE QUARTER */ + ["\u0D74", "\u0D74"], /* MALAYALAM FRACTION ONE HALF */ + ["\u0D75", "\u0D75"], /* MALAYALAM FRACTION THREE QUARTERS */ + ["\u0D76", "\u0D76"], /* MALAYALAM FRACTION ONE SIXTEENTH */ + ["\u0D77", "\u0D77"], /* MALAYALAM FRACTION ONE EIGHTH */ + ["\u0D78", "\u0D78"], /* MALAYALAM FRACTION THREE SIXTEENTHS */ + ["\u0D79", "\u0D79"], /* MALAYALAM DATE MARK */ + ["\u0D7A", "\u0D7A"], /* MALAYALAM LETTER CHILLU NN */ + ["\u0D7B", "\u0D7B"], /* MALAYALAM LETTER CHILLU N */ + ["\u0D7C", "\u0D7C"], /* MALAYALAM LETTER CHILLU RR */ + ["\u0D7D", "\u0D7D"], /* MALAYALAM LETTER CHILLU L */ + ["\u0D7E", "\u0D7E"], /* MALAYALAM LETTER CHILLU LL */ + ["\u0D7F", "\u0D7F"], /* MALAYALAM LETTER CHILLU K */ + ["\u0D80", "\u0D80"], + ["\u0D81", "\u0D81"], /* SINHALA SIGN CANDRABINDU */ + ["\u0D82", "\u0D82"], /* SINHALA SIGN ANUSVARAYA */ + ["\u0D83", "\u0D83"], /* SINHALA SIGN VISARGAYA */ + ["\u0D84", "\u0D84"], + ["\u0D85", "\u0D85"], /* SINHALA LETTER AYANNA */ + ["\u0D86", "\u0D86"], /* SINHALA LETTER AAYANNA */ + ["\u0D87", "\u0D87"], /* SINHALA LETTER AEYANNA */ + ["\u0D88", "\u0D88"], /* SINHALA LETTER AEEYANNA */ + ["\u0D89", "\u0D89"], /* SINHALA LETTER IYANNA */ + ["\u0D8A", "\u0D8A"], /* SINHALA LETTER IIYANNA */ + ["\u0D8B", "\u0D8B"], /* SINHALA LETTER UYANNA */ + ["\u0D8C", "\u0D8C"], /* SINHALA LETTER UUYANNA */ + ["\u0D8D", "\u0D8D"], /* SINHALA LETTER IRUYANNA */ + ["\u0D8E", "\u0D8E"], /* SINHALA LETTER IRUUYANNA */ + ["\u0D8F", "\u0D8F"], /* SINHALA LETTER ILUYANNA */ + ["\u0D90", "\u0D90"], /* SINHALA LETTER ILUUYANNA */ + ["\u0D91", "\u0D91"], /* SINHALA LETTER EYANNA */ + ["\u0D92", "\u0D92"], /* SINHALA LETTER EEYANNA */ + ["\u0D93", "\u0D93"], /* SINHALA LETTER AIYANNA */ + ["\u0D94", "\u0D94"], /* SINHALA LETTER OYANNA */ + ["\u0D95", "\u0D95"], /* SINHALA LETTER OOYANNA */ + ["\u0D96", "\u0D96"], /* SINHALA LETTER AUYANNA */ + ["\u0D97", "\u0D97"], + ["\u0D98", "\u0D98"], + ["\u0D99", "\u0D99"], + ["\u0D9A", "\u0D9A"], /* SINHALA LETTER ALPAPRAANA KAYANNA */ + ["\u0D9B", "\u0D9B"], /* SINHALA LETTER MAHAAPRAANA KAYANNA */ + ["\u0D9C", "\u0D9C"], /* SINHALA LETTER ALPAPRAANA GAYANNA */ + ["\u0D9D", "\u0D9D"], /* SINHALA LETTER MAHAAPRAANA GAYANNA */ + ["\u0D9E", "\u0D9E"], /* SINHALA LETTER KANTAJA NAASIKYAYA */ + ["\u0D9F", "\u0D9F"], /* SINHALA LETTER SANYAKA GAYANNA */ + ["\u0DA0", "\u0DA0"], /* SINHALA LETTER ALPAPRAANA CAYANNA */ + ["\u0DA1", "\u0DA1"], /* SINHALA LETTER MAHAAPRAANA CAYANNA */ + ["\u0DA2", "\u0DA2"], /* SINHALA LETTER ALPAPRAANA JAYANNA */ + ["\u0DA3", "\u0DA3"], /* SINHALA LETTER MAHAAPRAANA JAYANNA */ + ["\u0DA4", "\u0DA4"], /* SINHALA LETTER TAALUJA NAASIKYAYA */ + ["\u0DA5", "\u0DA5"], /* SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA */ + ["\u0DA6", "\u0DA6"], /* SINHALA LETTER SANYAKA JAYANNA */ + ["\u0DA7", "\u0DA7"], /* SINHALA LETTER ALPAPRAANA TTAYANNA */ + ["\u0DA8", "\u0DA8"], /* SINHALA LETTER MAHAAPRAANA TTAYANNA */ + ["\u0DA9", "\u0DA9"], /* SINHALA LETTER ALPAPRAANA DDAYANNA */ + ["\u0DAA", "\u0DAA"], /* SINHALA LETTER MAHAAPRAANA DDAYANNA */ + ["\u0DAB", "\u0DAB"], /* SINHALA LETTER MUURDHAJA NAYANNA */ + ["\u0DAC", "\u0DAC"], /* SINHALA LETTER SANYAKA DDAYANNA */ + ["\u0DAD", "\u0DAD"], /* SINHALA LETTER ALPAPRAANA TAYANNA */ + ["\u0DAE", "\u0DAE"], /* SINHALA LETTER MAHAAPRAANA TAYANNA */ + ["\u0DAF", "\u0DAF"], /* SINHALA LETTER ALPAPRAANA DAYANNA */ + ["\u0DB0", "\u0DB0"], /* SINHALA LETTER MAHAAPRAANA DAYANNA */ + ["\u0DB1", "\u0DB1"], /* SINHALA LETTER DANTAJA NAYANNA */ + ["\u0DB2", "\u0DB2"], + ["\u0DB3", "\u0DB3"], /* SINHALA LETTER SANYAKA DAYANNA */ + ["\u0DB4", "\u0DB4"], /* SINHALA LETTER ALPAPRAANA PAYANNA */ + ["\u0DB5", "\u0DB5"], /* SINHALA LETTER MAHAAPRAANA PAYANNA */ + ["\u0DB6", "\u0DB6"], /* SINHALA LETTER ALPAPRAANA BAYANNA */ + ["\u0DB7", "\u0DB7"], /* SINHALA LETTER MAHAAPRAANA BAYANNA */ + ["\u0DB8", "\u0DB8"], /* SINHALA LETTER MAYANNA */ + ["\u0DB9", "\u0DB9"], /* SINHALA LETTER AMBA BAYANNA */ + ["\u0DBA", "\u0DBA"], /* SINHALA LETTER YAYANNA */ + ["\u0DBB", "\u0DBB"], /* SINHALA LETTER RAYANNA */ + ["\u0DBC", "\u0DBC"], + ["\u0DBD", "\u0DBD"], /* SINHALA LETTER DANTAJA LAYANNA */ + ["\u0DBE", "\u0DBE"], + ["\u0DBF", "\u0DBF"], + ["\u0DC0", "\u0DC0"], /* SINHALA LETTER VAYANNA */ + ["\u0DC1", "\u0DC1"], /* SINHALA LETTER TAALUJA SAYANNA */ + ["\u0DC2", "\u0DC2"], /* SINHALA LETTER MUURDHAJA SAYANNA */ + ["\u0DC3", "\u0DC3"], /* SINHALA LETTER DANTAJA SAYANNA */ + ["\u0DC4", "\u0DC4"], /* SINHALA LETTER HAYANNA */ + ["\u0DC5", "\u0DC5"], /* SINHALA LETTER MUURDHAJA LAYANNA */ + ["\u0DC6", "\u0DC6"], /* SINHALA LETTER FAYANNA */ + ["\u0DC7", "\u0DC7"], + ["\u0DC8", "\u0DC8"], + ["\u0DC9", "\u0DC9"], + ["\u0DCA", "\u0DCA"], /* SINHALA SIGN AL-LAKUNA */ + ["\u0DCB", "\u0DCB"], + ["\u0DCC", "\u0DCC"], + ["\u0DCD", "\u0DCD"], + ["\u0DCE", "\u0DCE"], + ["\u0DCF", "\u0DCF"], /* SINHALA VOWEL SIGN AELA-PILLA */ + ["\u0DD0", "\u0DD0"], /* SINHALA VOWEL SIGN KETTI AEDA-PILLA */ + ["\u0DD1", "\u0DD1"], /* SINHALA VOWEL SIGN DIGA AEDA-PILLA */ + ["\u0DD2", "\u0DD2"], /* SINHALA VOWEL SIGN KETTI IS-PILLA */ + ["\u0DD3", "\u0DD3"], /* SINHALA VOWEL SIGN DIGA IS-PILLA */ + ["\u0DD4", "\u0DD4"], /* SINHALA VOWEL SIGN KETTI PAA-PILLA */ + ["\u0DD5", "\u0DD5"], + ["\u0DD6", "\u0DD6"], /* SINHALA VOWEL SIGN DIGA PAA-PILLA */ + ["\u0DD7", "\u0DD7"], + ["\u0DD8", "\u0DD8"], /* SINHALA VOWEL SIGN GAETTA-PILLA */ + ["\u0DD9", "\u0DD9"], /* SINHALA VOWEL SIGN KOMBUVA */ + ["\u0DDA", "\u0DDA"], /* SINHALA VOWEL SIGN DIGA KOMBUVA */ + ["\u0DDB", "\u0DDB"], /* SINHALA VOWEL SIGN KOMBU DEKA */ + ["\u0DDC", "\u0DDC"], /* SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA */ + ["\u0DDD", "\u0DDD"], /* SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA */ + ["\u0DDE", "\u0DDE"], /* SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA */ + ["\u0DDF", "\u0DDF"], /* SINHALA VOWEL SIGN GAYANUKITTA */ + ["\u0DE0", "\u0DE0"], + ["\u0DE1", "\u0DE1"], + ["\u0DE2", "\u0DE2"], + ["\u0DE3", "\u0DE3"], + ["\u0DE4", "\u0DE4"], + ["\u0DE5", "\u0DE5"], + ["\u0DE6", "\u0DE6"], /* SINHALA LITH DIGIT ZERO */ + ["\u0DE7", "\u0DE7"], /* SINHALA LITH DIGIT ONE */ + ["\u0DE8", "\u0DE8"], /* SINHALA LITH DIGIT TWO */ + ["\u0DE9", "\u0DE9"], /* SINHALA LITH DIGIT THREE */ + ["\u0DEA", "\u0DEA"], /* SINHALA LITH DIGIT FOUR */ + ["\u0DEB", "\u0DEB"], /* SINHALA LITH DIGIT FIVE */ + ["\u0DEC", "\u0DEC"], /* SINHALA LITH DIGIT SIX */ + ["\u0DED", "\u0DED"], /* SINHALA LITH DIGIT SEVEN */ + ["\u0DEE", "\u0DEE"], /* SINHALA LITH DIGIT EIGHT */ + ["\u0DEF", "\u0DEF"], /* SINHALA LITH DIGIT NINE */ + ["\u0DF0", "\u0DF0"], + ["\u0DF1", "\u0DF1"], + ["\u0DF2", "\u0DF2"], /* SINHALA VOWEL SIGN DIGA GAETTA-PILLA */ + ["\u0DF3", "\u0DF3"], /* SINHALA VOWEL SIGN DIGA GAYANUKITTA */ + ["\u0DF4", "\u0DF4"], /* SINHALA PUNCTUATION KUNDDALIYA */ + ["\u0DF5", "\u0DF5"], + ["\u0DF6", "\u0DF6"], + ["\u0DF7", "\u0DF7"], + ["\u0DF8", "\u0DF8"], + ["\u0DF9", "\u0DF9"], + ["\u0DFA", "\u0DFA"], + ["\u0DFB", "\u0DFB"], + ["\u0DFC", "\u0DFC"], + ["\u0DFD", "\u0DFD"], + ["\u0DFE", "\u0DFE"], + ["\u0DFF", "\u0DFF"], + ["\u0E00", "\u0E00"], + ["\u0E01", "\u0E01"], /* THAI CHARACTER KO KAI (THAI LETTER KO KAI) */ + ["\u0E02", "\u0E02"], /* THAI CHARACTER KHO KHAI (THAI LETTER KHO KHAI) */ + ["\u0E03", "\u0E03"], /* THAI CHARACTER KHO KHUAT (THAI LETTER KHO KHUAT) */ + ["\u0E04", "\u0E04"], /* THAI CHARACTER KHO KHWAI (THAI LETTER KHO KHWAI) */ + ["\u0E05", "\u0E05"], /* THAI CHARACTER KHO KHON (THAI LETTER KHO KHON) */ + ["\u0E06", "\u0E06"], /* THAI CHARACTER KHO RAKHANG (THAI LETTER KHO RAKHANG) */ + ["\u0E07", "\u0E07"], /* THAI CHARACTER NGO NGU (THAI LETTER NGO NGU) */ + ["\u0E08", "\u0E08"], /* THAI CHARACTER CHO CHAN (THAI LETTER CHO CHAN) */ + ["\u0E09", "\u0E09"], /* THAI CHARACTER CHO CHING (THAI LETTER CHO CHING) */ + ["\u0E0A", "\u0E0A"], /* THAI CHARACTER CHO CHANG (THAI LETTER CHO CHANG) */ + ["\u0E0B", "\u0E0B"], /* THAI CHARACTER SO SO (THAI LETTER SO SO) */ + ["\u0E0C", "\u0E0C"], /* THAI CHARACTER CHO CHOE (THAI LETTER CHO CHOE) */ + ["\u0E0D", "\u0E0D"], /* THAI CHARACTER YO YING (THAI LETTER YO YING) */ + ["\u0E0E", "\u0E0E"], /* THAI CHARACTER DO CHADA (THAI LETTER DO CHADA) */ + ["\u0E0F", "\u0E0F"], /* THAI CHARACTER TO PATAK (THAI LETTER TO PATAK) */ + ["\u0E10", "\u0E10"], /* THAI CHARACTER THO THAN (THAI LETTER THO THAN) */ + ["\u0E11", "\u0E11"], /* THAI CHARACTER THO NANGMONTHO (THAI LETTER THO NANGMONTHO) */ + ["\u0E12", "\u0E12"], /* THAI CHARACTER THO PHUTHAO (THAI LETTER THO PHUTHAO) */ + ["\u0E13", "\u0E13"], /* THAI CHARACTER NO NEN (THAI LETTER NO NEN) */ + ["\u0E14", "\u0E14"], /* THAI CHARACTER DO DEK (THAI LETTER DO DEK) */ + ["\u0E15", "\u0E15"], /* THAI CHARACTER TO TAO (THAI LETTER TO TAO) */ + ["\u0E16", "\u0E16"], /* THAI CHARACTER THO THUNG (THAI LETTER THO THUNG) */ + ["\u0E17", "\u0E17"], /* THAI CHARACTER THO THAHAN (THAI LETTER THO THAHAN) */ + ["\u0E18", "\u0E18"], /* THAI CHARACTER THO THONG (THAI LETTER THO THONG) */ + ["\u0E19", "\u0E19"], /* THAI CHARACTER NO NU (THAI LETTER NO NU) */ + ["\u0E1A", "\u0E1A"], /* THAI CHARACTER BO BAIMAI (THAI LETTER BO BAIMAI) */ + ["\u0E1B", "\u0E1B"], /* THAI CHARACTER PO PLA (THAI LETTER PO PLA) */ + ["\u0E1C", "\u0E1C"], /* THAI CHARACTER PHO PHUNG (THAI LETTER PHO PHUNG) */ + ["\u0E1D", "\u0E1D"], /* THAI CHARACTER FO FA (THAI LETTER FO FA) */ + ["\u0E1E", "\u0E1E"], /* THAI CHARACTER PHO PHAN (THAI LETTER PHO PHAN) */ + ["\u0E1F", "\u0E1F"], /* THAI CHARACTER FO FAN (THAI LETTER FO FAN) */ + ["\u0E20", "\u0E20"], /* THAI CHARACTER PHO SAMPHAO (THAI LETTER PHO SAMPHAO) */ + ["\u0E21", "\u0E21"], /* THAI CHARACTER MO MA (THAI LETTER MO MA) */ + ["\u0E22", "\u0E22"], /* THAI CHARACTER YO YAK (THAI LETTER YO YAK) */ + ["\u0E23", "\u0E23"], /* THAI CHARACTER RO RUA (THAI LETTER RO RUA) */ + ["\u0E24", "\u0E24"], /* THAI CHARACTER RU (THAI LETTER RU) */ + ["\u0E25", "\u0E25"], /* THAI CHARACTER LO LING (THAI LETTER LO LING) */ + ["\u0E26", "\u0E26"], /* THAI CHARACTER LU (THAI LETTER LU) */ + ["\u0E27", "\u0E27"], /* THAI CHARACTER WO WAEN (THAI LETTER WO WAEN) */ + ["\u0E28", "\u0E28"], /* THAI CHARACTER SO SALA (THAI LETTER SO SALA) */ + ["\u0E29", "\u0E29"], /* THAI CHARACTER SO RUSI (THAI LETTER SO RUSI) */ + ["\u0E2A", "\u0E2A"], /* THAI CHARACTER SO SUA (THAI LETTER SO SUA) */ + ["\u0E2B", "\u0E2B"], /* THAI CHARACTER HO HIP (THAI LETTER HO HIP) */ + ["\u0E2C", "\u0E2C"], /* THAI CHARACTER LO CHULA (THAI LETTER LO CHULA) */ + ["\u0E2D", "\u0E2D"], /* THAI CHARACTER O ANG (THAI LETTER O ANG) */ + ["\u0E2E", "\u0E2E"], /* THAI CHARACTER HO NOKHUK (THAI LETTER HO NOK HUK) */ + ["\u0E2F", "\u0E2F"], /* THAI CHARACTER PAIYANNOI (THAI PAI YAN NOI) */ + ["\u0E30", "\u0E30"], /* THAI CHARACTER SARA A (THAI VOWEL SIGN SARA A) */ + ["\u0E31", "\u0E31"], /* THAI CHARACTER MAI HAN-AKAT (THAI VOWEL SIGN MAI HAN-AKAT) */ + ["\u0E32", "\u0E32"], /* THAI CHARACTER SARA AA (THAI VOWEL SIGN SARA AA) */ + ["\u0E33", "\u0E33"], /* THAI CHARACTER SARA AM (THAI VOWEL SIGN SARA AM) */ + ["\u0E34", "\u0E34"], /* THAI CHARACTER SARA I (THAI VOWEL SIGN SARA I) */ + ["\u0E35", "\u0E35"], /* THAI CHARACTER SARA II (THAI VOWEL SIGN SARA II) */ + ["\u0E36", "\u0E36"], /* THAI CHARACTER SARA UE (THAI VOWEL SIGN SARA UE) */ + ["\u0E37", "\u0E37"], /* THAI CHARACTER SARA UEE (THAI VOWEL SIGN SARA UEE) */ + ["\u0E38", "\u0E38"], /* THAI CHARACTER SARA U (THAI VOWEL SIGN SARA U) */ + ["\u0E39", "\u0E39"], /* THAI CHARACTER SARA UU (THAI VOWEL SIGN SARA UU) */ + ["\u0E3A", "\u0E3A"], /* THAI CHARACTER PHINTHU (THAI VOWEL SIGN PHINTHU) */ + ["\u0E3B", "\u0E3B"], + ["\u0E3C", "\u0E3C"], + ["\u0E3D", "\u0E3D"], + ["\u0E3E", "\u0E3E"], + ["\u0E3F", "\u0E3F"], /* THAI CURRENCY SYMBOL BAHT (THAI BAHT SIGN) */ + ["\u0E40", "\u0E40"], /* THAI CHARACTER SARA E (THAI VOWEL SIGN SARA E) */ + ["\u0E41", "\u0E41"], /* THAI CHARACTER SARA AE (THAI VOWEL SIGN SARA AE) */ + ["\u0E42", "\u0E42"], /* THAI CHARACTER SARA O (THAI VOWEL SIGN SARA O) */ + ["\u0E43", "\u0E43"], /* THAI CHARACTER SARA AI MAIMUAN (THAI VOWEL SIGN SARA MAI MUAN) */ + ["\u0E44", "\u0E44"], /* THAI CHARACTER SARA AI MAIMALAI (THAI VOWEL SIGN SARA MAI MALAI) */ + ["\u0E45", "\u0E45"], /* THAI CHARACTER LAKKHANGYAO (THAI LAK KHANG YAO) */ + ["\u0E46", "\u0E46"], /* THAI CHARACTER MAIYAMOK (THAI MAI YAMOK) */ + ["\u0E47", "\u0E47"], /* THAI CHARACTER MAITAIKHU (THAI VOWEL SIGN MAI TAI KHU) */ + ["\u0E48", "\u0E48"], /* THAI CHARACTER MAI EK (THAI TONE MAI EK) */ + ["\u0E49", "\u0E49"], /* THAI CHARACTER MAI THO (THAI TONE MAI THO) */ + ["\u0E4A", "\u0E4A"], /* THAI CHARACTER MAI TRI (THAI TONE MAI TRI) */ + ["\u0E4B", "\u0E4B"], /* THAI CHARACTER MAI CHATTAWA (THAI TONE MAI CHATTAWA) */ + ["\u0E4C", "\u0E4C"], /* THAI CHARACTER THANTHAKHAT (THAI THANTHAKHAT) */ + ["\u0E4D", "\u0E4D"], /* THAI CHARACTER NIKHAHIT (THAI NIKKHAHIT) */ + ["\u0E4E", "\u0E4E"], /* THAI CHARACTER YAMAKKAN (THAI YAMAKKAN) */ + ["\u0E4F", "\u0E4F"], /* THAI CHARACTER FONGMAN (THAI FONGMAN) */ + ["\u0E50", "\u0E50"], /* THAI DIGIT ZERO */ + ["\u0E51", "\u0E51"], /* THAI DIGIT ONE */ + ["\u0E52", "\u0E52"], /* THAI DIGIT TWO */ + ["\u0E53", "\u0E53"], /* THAI DIGIT THREE */ + ["\u0E54", "\u0E54"], /* THAI DIGIT FOUR */ + ["\u0E55", "\u0E55"], /* THAI DIGIT FIVE */ + ["\u0E56", "\u0E56"], /* THAI DIGIT SIX */ + ["\u0E57", "\u0E57"], /* THAI DIGIT SEVEN */ + ["\u0E58", "\u0E58"], /* THAI DIGIT EIGHT */ + ["\u0E59", "\u0E59"], /* THAI DIGIT NINE */ + ["\u0E5A", "\u0E5A"], /* THAI CHARACTER ANGKHANKHU (THAI ANGKHANKHU) */ + ["\u0E5B", "\u0E5B"], /* THAI CHARACTER KHOMUT (THAI KHOMUT) */ + ["\u0E5C", "\u0E5C"], + ["\u0E5D", "\u0E5D"], + ["\u0E5E", "\u0E5E"], + ["\u0E5F", "\u0E5F"], + ["\u0E60", "\u0E60"], + ["\u0E61", "\u0E61"], + ["\u0E62", "\u0E62"], + ["\u0E63", "\u0E63"], + ["\u0E64", "\u0E64"], + ["\u0E65", "\u0E65"], + ["\u0E66", "\u0E66"], + ["\u0E67", "\u0E67"], + ["\u0E68", "\u0E68"], + ["\u0E69", "\u0E69"], + ["\u0E6A", "\u0E6A"], + ["\u0E6B", "\u0E6B"], + ["\u0E6C", "\u0E6C"], + ["\u0E6D", "\u0E6D"], + ["\u0E6E", "\u0E6E"], + ["\u0E6F", "\u0E6F"], + ["\u0E70", "\u0E70"], + ["\u0E71", "\u0E71"], + ["\u0E72", "\u0E72"], + ["\u0E73", "\u0E73"], + ["\u0E74", "\u0E74"], + ["\u0E75", "\u0E75"], + ["\u0E76", "\u0E76"], + ["\u0E77", "\u0E77"], + ["\u0E78", "\u0E78"], + ["\u0E79", "\u0E79"], + ["\u0E7A", "\u0E7A"], + ["\u0E7B", "\u0E7B"], + ["\u0E7C", "\u0E7C"], + ["\u0E7D", "\u0E7D"], + ["\u0E7E", "\u0E7E"], + ["\u0E7F", "\u0E7F"], + ["\u0E80", "\u0E80"], + ["\u0E81", "\u0E81"], /* LAO LETTER KO */ + ["\u0E82", "\u0E82"], /* LAO LETTER KHO SUNG */ + ["\u0E83", "\u0E83"], + ["\u0E84", "\u0E84"], /* LAO LETTER KHO TAM */ + ["\u0E85", "\u0E85"], + ["\u0E86", "\u0E86"], /* LAO LETTER PALI GHA */ + ["\u0E87", "\u0E87"], /* LAO LETTER NGO */ + ["\u0E88", "\u0E88"], /* LAO LETTER CO */ + ["\u0E89", "\u0E89"], /* LAO LETTER PALI CHA */ + ["\u0E8A", "\u0E8A"], /* LAO LETTER SO TAM */ + ["\u0E8B", "\u0E8B"], + ["\u0E8C", "\u0E8C"], /* LAO LETTER PALI JHA */ + ["\u0E8D", "\u0E8D"], /* LAO LETTER NYO */ + ["\u0E8E", "\u0E8E"], /* LAO LETTER PALI NYA */ + ["\u0E8F", "\u0E8F"], /* LAO LETTER PALI TTA */ + ["\u0E90", "\u0E90"], /* LAO LETTER PALI TTHA */ + ["\u0E91", "\u0E91"], /* LAO LETTER PALI DDA */ + ["\u0E92", "\u0E92"], /* LAO LETTER PALI DDHA */ + ["\u0E93", "\u0E93"], /* LAO LETTER PALI NNA */ + ["\u0E94", "\u0E94"], /* LAO LETTER DO */ + ["\u0E95", "\u0E95"], /* LAO LETTER TO */ + ["\u0E96", "\u0E96"], /* LAO LETTER THO SUNG */ + ["\u0E97", "\u0E97"], /* LAO LETTER THO TAM */ + ["\u0E98", "\u0E98"], /* LAO LETTER PALI DHA */ + ["\u0E99", "\u0E99"], /* LAO LETTER NO */ + ["\u0E9A", "\u0E9A"], /* LAO LETTER BO */ + ["\u0E9B", "\u0E9B"], /* LAO LETTER PO */ + ["\u0E9C", "\u0E9C"], /* LAO LETTER PHO SUNG */ + ["\u0E9D", "\u0E9D"], /* LAO LETTER FO TAM */ + ["\u0E9E", "\u0E9E"], /* LAO LETTER PHO TAM */ + ["\u0E9F", "\u0E9F"], /* LAO LETTER FO SUNG */ + ["\u0EA0", "\u0EA0"], /* LAO LETTER PALI BHA */ + ["\u0EA1", "\u0EA1"], /* LAO LETTER MO */ + ["\u0EA2", "\u0EA2"], /* LAO LETTER YO */ + ["\u0EA3", "\u0EA3"], /* LAO LETTER LO LING */ + ["\u0EA4", "\u0EA4"], + ["\u0EA5", "\u0EA5"], /* LAO LETTER LO LOOT */ + ["\u0EA6", "\u0EA6"], + ["\u0EA7", "\u0EA7"], /* LAO LETTER WO */ + ["\u0EA8", "\u0EA8"], /* LAO LETTER SANSKRIT SHA */ + ["\u0EA9", "\u0EA9"], /* LAO LETTER SANSKRIT SSA */ + ["\u0EAA", "\u0EAA"], /* LAO LETTER SO SUNG */ + ["\u0EAB", "\u0EAB"], /* LAO LETTER HO SUNG */ + ["\u0EAC", "\u0EAC"], /* LAO LETTER PALI LLA */ + ["\u0EAD", "\u0EAD"], /* LAO LETTER O */ + ["\u0EAE", "\u0EAE"], /* LAO LETTER HO TAM */ + ["\u0EAF", "\u0EAF"], /* LAO ELLIPSIS */ + ["\u0EB0", "\u0EB0"], /* LAO VOWEL SIGN A */ + ["\u0EB1", "\u0EB1"], /* LAO VOWEL SIGN MAI KAN */ + ["\u0EB2", "\u0EB2"], /* LAO VOWEL SIGN AA */ + ["\u0EB3", "\u0EB3"], /* LAO VOWEL SIGN AM */ + ["\u0EB4", "\u0EB4"], /* LAO VOWEL SIGN I */ + ["\u0EB5", "\u0EB5"], /* LAO VOWEL SIGN II */ + ["\u0EB6", "\u0EB6"], /* LAO VOWEL SIGN Y */ + ["\u0EB7", "\u0EB7"], /* LAO VOWEL SIGN YY */ + ["\u0EB8", "\u0EB8"], /* LAO VOWEL SIGN U */ + ["\u0EB9", "\u0EB9"], /* LAO VOWEL SIGN UU */ + ["\u0EBA", "\u0EBA"], /* LAO SIGN PALI VIRAMA */ + ["\u0EBB", "\u0EBB"], /* LAO VOWEL SIGN MAI KON */ + ["\u0EBC", "\u0EBC"], /* LAO SEMIVOWEL SIGN LO */ + ["\u0EBD", "\u0EBD"], /* LAO SEMIVOWEL SIGN NYO */ + ["\u0EBE", "\u0EBE"], + ["\u0EBF", "\u0EBF"], + ["\u0EC0", "\u0EC0"], /* LAO VOWEL SIGN E */ + ["\u0EC1", "\u0EC1"], /* LAO VOWEL SIGN EI */ + ["\u0EC2", "\u0EC2"], /* LAO VOWEL SIGN O */ + ["\u0EC3", "\u0EC3"], /* LAO VOWEL SIGN AY */ + ["\u0EC4", "\u0EC4"], /* LAO VOWEL SIGN AI */ + ["\u0EC5", "\u0EC5"], + ["\u0EC6", "\u0EC6"], /* LAO KO LA */ + ["\u0EC7", "\u0EC7"], + ["\u0EC8", "\u0EC8"], /* LAO TONE MAI EK */ + ["\u0EC9", "\u0EC9"], /* LAO TONE MAI THO */ + ["\u0ECA", "\u0ECA"], /* LAO TONE MAI TI */ + ["\u0ECB", "\u0ECB"], /* LAO TONE MAI CATAWA */ + ["\u0ECC", "\u0ECC"], /* LAO CANCELLATION MARK */ + ["\u0ECD", "\u0ECD"], /* LAO NIGGAHITA */ + ["\u0ECE", "\u0ECE"], /* LAO YAMAKKAN */ + ["\u0ECF", "\u0ECF"], + ["\u0ED0", "\u0ED0"], /* LAO DIGIT ZERO */ + ["\u0ED1", "\u0ED1"], /* LAO DIGIT ONE */ + ["\u0ED2", "\u0ED2"], /* LAO DIGIT TWO */ + ["\u0ED3", "\u0ED3"], /* LAO DIGIT THREE */ + ["\u0ED4", "\u0ED4"], /* LAO DIGIT FOUR */ + ["\u0ED5", "\u0ED5"], /* LAO DIGIT FIVE */ + ["\u0ED6", "\u0ED6"], /* LAO DIGIT SIX */ + ["\u0ED7", "\u0ED7"], /* LAO DIGIT SEVEN */ + ["\u0ED8", "\u0ED8"], /* LAO DIGIT EIGHT */ + ["\u0ED9", "\u0ED9"], /* LAO DIGIT NINE */ + ["\u0EDA", "\u0EDA"], + ["\u0EDB", "\u0EDB"], + ["\u0EDC", "\u0EDC"], /* LAO HO NO */ + ["\u0EDD", "\u0EDD"], /* LAO HO MO */ + ["\u0EDE", "\u0EDE"], /* LAO LETTER KHMU GO */ + ["\u0EDF", "\u0EDF"], /* LAO LETTER KHMU NYO */ + ["\u0EE0", "\u0EE0"], + ["\u0EE1", "\u0EE1"], + ["\u0EE2", "\u0EE2"], + ["\u0EE3", "\u0EE3"], + ["\u0EE4", "\u0EE4"], + ["\u0EE5", "\u0EE5"], + ["\u0EE6", "\u0EE6"], + ["\u0EE7", "\u0EE7"], + ["\u0EE8", "\u0EE8"], + ["\u0EE9", "\u0EE9"], + ["\u0EEA", "\u0EEA"], + ["\u0EEB", "\u0EEB"], + ["\u0EEC", "\u0EEC"], + ["\u0EED", "\u0EED"], + ["\u0EEE", "\u0EEE"], + ["\u0EEF", "\u0EEF"], + ["\u0EF0", "\u0EF0"], + ["\u0EF1", "\u0EF1"], + ["\u0EF2", "\u0EF2"], + ["\u0EF3", "\u0EF3"], + ["\u0EF4", "\u0EF4"], + ["\u0EF5", "\u0EF5"], + ["\u0EF6", "\u0EF6"], + ["\u0EF7", "\u0EF7"], + ["\u0EF8", "\u0EF8"], + ["\u0EF9", "\u0EF9"], + ["\u0EFA", "\u0EFA"], + ["\u0EFB", "\u0EFB"], + ["\u0EFC", "\u0EFC"], + ["\u0EFD", "\u0EFD"], + ["\u0EFE", "\u0EFE"], + ["\u0EFF", "\u0EFF"], + ["\u0F00", "\u0F00"], /* TIBETAN SYLLABLE OM */ + ["\u0F01", "\u0F01"], /* TIBETAN MARK GTER YIG MGO TRUNCATED A */ + ["\u0F02", "\u0F02"], /* TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA */ + ["\u0F03", "\u0F03"], /* TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA */ + ["\u0F04", "\u0F04"], /* TIBETAN MARK INITIAL YIG MGO MDUN MA (TIBETAN SINGLE ORNAMENT) */ + ["\u0F05", "\u0F05"], /* TIBETAN MARK CLOSING YIG MGO SGAB MA */ + ["\u0F06", "\u0F06"], /* TIBETAN MARK CARET YIG MGO PHUR SHAD MA */ + ["\u0F07", "\u0F07"], /* TIBETAN MARK YIG MGO TSHEG SHAD MA */ + ["\u0F08", "\u0F08"], /* TIBETAN MARK SBRUL SHAD (TIBETAN RGYANSHAD) */ + ["\u0F09", "\u0F09"], /* TIBETAN MARK BSKUR YIG MGO */ + ["\u0F0A", "\u0F0A"], /* TIBETAN MARK BKA- SHOG YIG MGO */ + ["\u0F0B", "\u0F0B"], /* TIBETAN MARK INTERSYLLABIC TSHEG (TIBETAN TSEG) */ + ["\u0F0C", "\u0F0C"], /* TIBETAN MARK DELIMITER TSHEG BSTAR */ + ["\u0F0D", "\u0F0D"], /* TIBETAN MARK SHAD (TIBETAN SHAD) */ + ["\u0F0E", "\u0F0E"], /* TIBETAN MARK NYIS SHAD (TIBETAN DOUBLE SHAD) */ + ["\u0F0F", "\u0F0F"], /* TIBETAN MARK TSHEG SHAD */ + ["\u0F10", "\u0F10"], /* TIBETAN MARK NYIS TSHEG SHAD */ + ["\u0F11", "\u0F11"], /* TIBETAN MARK RIN CHEN SPUNGS SHAD (TIBETAN RINCHANPHUNGSHAD) */ + ["\u0F12", "\u0F12"], /* TIBETAN MARK RGYA GRAM SHAD */ + ["\u0F13", "\u0F13"], /* TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN */ + ["\u0F14", "\u0F14"], /* TIBETAN MARK GTER TSHEG (TIBETAN COMMA) */ + ["\u0F15", "\u0F15"], /* TIBETAN LOGOTYPE SIGN CHAD RTAGS */ + ["\u0F16", "\u0F16"], /* TIBETAN LOGOTYPE SIGN LHAG RTAGS */ + ["\u0F17", "\u0F17"], /* TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS */ + ["\u0F18", "\u0F18"], /* TIBETAN ASTROLOGICAL SIGN -KHYUD PA */ + ["\u0F19", "\u0F19"], /* TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS */ + ["\u0F1A", "\u0F1A"], /* TIBETAN SIGN RDEL DKAR GCIG */ + ["\u0F1B", "\u0F1B"], /* TIBETAN SIGN RDEL DKAR GNYIS */ + ["\u0F1C", "\u0F1C"], /* TIBETAN SIGN RDEL DKAR GSUM */ + ["\u0F1D", "\u0F1D"], /* TIBETAN SIGN RDEL NAG GCIG */ + ["\u0F1E", "\u0F1E"], /* TIBETAN SIGN RDEL NAG GNYIS */ + ["\u0F1F", "\u0F1F"], /* TIBETAN SIGN RDEL DKAR RDEL NAG */ + ["\u0F20", "\u0F20"], /* TIBETAN DIGIT ZERO */ + ["\u0F21", "\u0F21"], /* TIBETAN DIGIT ONE */ + ["\u0F22", "\u0F22"], /* TIBETAN DIGIT TWO */ + ["\u0F23", "\u0F23"], /* TIBETAN DIGIT THREE */ + ["\u0F24", "\u0F24"], /* TIBETAN DIGIT FOUR */ + ["\u0F25", "\u0F25"], /* TIBETAN DIGIT FIVE */ + ["\u0F26", "\u0F26"], /* TIBETAN DIGIT SIX */ + ["\u0F27", "\u0F27"], /* TIBETAN DIGIT SEVEN */ + ["\u0F28", "\u0F28"], /* TIBETAN DIGIT EIGHT */ + ["\u0F29", "\u0F29"], /* TIBETAN DIGIT NINE */ + ["\u0F2A", "\u0F2A"], /* TIBETAN DIGIT HALF ONE */ + ["\u0F2B", "\u0F2B"], /* TIBETAN DIGIT HALF TWO */ + ["\u0F2C", "\u0F2C"], /* TIBETAN DIGIT HALF THREE */ + ["\u0F2D", "\u0F2D"], /* TIBETAN DIGIT HALF FOUR */ + ["\u0F2E", "\u0F2E"], /* TIBETAN DIGIT HALF FIVE */ + ["\u0F2F", "\u0F2F"], /* TIBETAN DIGIT HALF SIX */ + ["\u0F30", "\u0F30"], /* TIBETAN DIGIT HALF SEVEN */ + ["\u0F31", "\u0F31"], /* TIBETAN DIGIT HALF EIGHT */ + ["\u0F32", "\u0F32"], /* TIBETAN DIGIT HALF NINE */ + ["\u0F33", "\u0F33"], /* TIBETAN DIGIT HALF ZERO */ + ["\u0F34", "\u0F34"], /* TIBETAN MARK BSDUS RTAGS */ + ["\u0F35", "\u0F35"], /* TIBETAN MARK NGAS BZUNG NYI ZLA (TIBETAN HONORIFIC UNDER RING) */ + ["\u0F36", "\u0F36"], /* TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN */ + ["\u0F37", "\u0F37"], /* TIBETAN MARK NGAS BZUNG SGOR RTAGS (TIBETAN UNDER RING) */ + ["\u0F38", "\u0F38"], /* TIBETAN MARK CHE MGO */ + ["\u0F39", "\u0F39"], /* TIBETAN MARK TSA -PHRU (TIBETAN LENITION MARK) */ + ["\u0F3A", "\u0F3A"], /* TIBETAN MARK GUG RTAGS GYON */ + ["\u0F3B", "\u0F3B"], /* TIBETAN MARK GUG RTAGS GYAS */ + ["\u0F3C", "\u0F3C"], /* TIBETAN MARK ANG KHANG GYON (TIBETAN LEFT BRACE) */ + ["\u0F3D", "\u0F3D"], /* TIBETAN MARK ANG KHANG GYAS (TIBETAN RIGHT BRACE) */ + ["\u0F3E", "\u0F3E"], /* TIBETAN SIGN YAR TSHES */ + ["\u0F3F", "\u0F3F"], /* TIBETAN SIGN MAR TSHES */ + ["\u0F40", "\u0F40"], /* TIBETAN LETTER KA */ + ["\u0F41", "\u0F41"], /* TIBETAN LETTER KHA */ + ["\u0F42", "\u0F42"], /* TIBETAN LETTER GA */ + ["\u0F43", "\u0F43"], /* TIBETAN LETTER GHA */ + ["\u0F44", "\u0F44"], /* TIBETAN LETTER NGA */ + ["\u0F45", "\u0F45"], /* TIBETAN LETTER CA */ + ["\u0F46", "\u0F46"], /* TIBETAN LETTER CHA */ + ["\u0F47", "\u0F47"], /* TIBETAN LETTER JA */ + ["\u0F48", "\u0F48"], + ["\u0F49", "\u0F49"], /* TIBETAN LETTER NYA */ + ["\u0F4A", "\u0F4A"], /* TIBETAN LETTER TTA (TIBETAN LETTER REVERSED TA) */ + ["\u0F4B", "\u0F4B"], /* TIBETAN LETTER TTHA (TIBETAN LETTER REVERSED THA) */ + ["\u0F4C", "\u0F4C"], /* TIBETAN LETTER DDA (TIBETAN LETTER REVERSED DA) */ + ["\u0F4D", "\u0F4D"], /* TIBETAN LETTER DDHA */ + ["\u0F4E", "\u0F4E"], /* TIBETAN LETTER NNA (TIBETAN LETTER REVERSED NA) */ + ["\u0F4F", "\u0F4F"], /* TIBETAN LETTER TA */ + ["\u0F50", "\u0F50"], /* TIBETAN LETTER THA */ + ["\u0F51", "\u0F51"], /* TIBETAN LETTER DA */ + ["\u0F52", "\u0F52"], /* TIBETAN LETTER DHA */ + ["\u0F53", "\u0F53"], /* TIBETAN LETTER NA */ + ["\u0F54", "\u0F54"], /* TIBETAN LETTER PA */ + ["\u0F55", "\u0F55"], /* TIBETAN LETTER PHA */ + ["\u0F56", "\u0F56"], /* TIBETAN LETTER BA */ + ["\u0F57", "\u0F57"], /* TIBETAN LETTER BHA */ + ["\u0F58", "\u0F58"], /* TIBETAN LETTER MA */ + ["\u0F59", "\u0F59"], /* TIBETAN LETTER TSA */ + ["\u0F5A", "\u0F5A"], /* TIBETAN LETTER TSHA */ + ["\u0F5B", "\u0F5B"], /* TIBETAN LETTER DZA */ + ["\u0F5C", "\u0F5C"], /* TIBETAN LETTER DZHA */ + ["\u0F5D", "\u0F5D"], /* TIBETAN LETTER WA */ + ["\u0F5E", "\u0F5E"], /* TIBETAN LETTER ZHA */ + ["\u0F5F", "\u0F5F"], /* TIBETAN LETTER ZA */ + ["\u0F60", "\u0F60"], /* TIBETAN LETTER -A (TIBETAN LETTER AA) */ + ["\u0F61", "\u0F61"], /* TIBETAN LETTER YA */ + ["\u0F62", "\u0F62"], /* TIBETAN LETTER RA */ + ["\u0F63", "\u0F63"], /* TIBETAN LETTER LA */ + ["\u0F64", "\u0F64"], /* TIBETAN LETTER SHA */ + ["\u0F65", "\u0F65"], /* TIBETAN LETTER SSA (TIBETAN LETTER REVERSED SHA) */ + ["\u0F66", "\u0F66"], /* TIBETAN LETTER SA */ + ["\u0F67", "\u0F67"], /* TIBETAN LETTER HA */ + ["\u0F68", "\u0F68"], /* TIBETAN LETTER A */ + ["\u0F69", "\u0F69"], /* TIBETAN LETTER KSSA */ + ["\u0F6A", "\u0F6A"], /* TIBETAN LETTER FIXED-FORM RA */ + ["\u0F6B", "\u0F6B"], /* TIBETAN LETTER KKA */ + ["\u0F6C", "\u0F6C"], /* TIBETAN LETTER RRA */ + ["\u0F6D", "\u0F6D"], + ["\u0F6E", "\u0F6E"], + ["\u0F6F", "\u0F6F"], + ["\u0F70", "\u0F70"], + ["\u0F71", "\u0F71"], /* TIBETAN VOWEL SIGN AA */ + ["\u0F72", "\u0F72"], /* TIBETAN VOWEL SIGN I */ + ["\u0F73", "\u0F73"], /* TIBETAN VOWEL SIGN II */ + ["\u0F74", "\u0F74"], /* TIBETAN VOWEL SIGN U */ + ["\u0F75", "\u0F75"], /* TIBETAN VOWEL SIGN UU */ + ["\u0F76", "\u0F76"], /* TIBETAN VOWEL SIGN VOCALIC R */ + ["\u0F77", "\u0F77"], /* TIBETAN VOWEL SIGN VOCALIC RR */ + ["\u0F78", "\u0F78"], /* TIBETAN VOWEL SIGN VOCALIC L */ + ["\u0F79", "\u0F79"], /* TIBETAN VOWEL SIGN VOCALIC LL */ + ["\u0F7A", "\u0F7A"], /* TIBETAN VOWEL SIGN E */ + ["\u0F7B", "\u0F7B"], /* TIBETAN VOWEL SIGN EE (TIBETAN VOWEL SIGN AI) */ + ["\u0F7C", "\u0F7C"], /* TIBETAN VOWEL SIGN O */ + ["\u0F7D", "\u0F7D"], /* TIBETAN VOWEL SIGN OO (TIBETAN VOWEL SIGN AU) */ + ["\u0F7E", "\u0F7E"], /* TIBETAN SIGN RJES SU NGA RO (TIBETAN ANUSVARA) */ + ["\u0F7F", "\u0F7F"], /* TIBETAN SIGN RNAM BCAD (TIBETAN VISARGA) */ + ["\u0F80", "\u0F80"], /* TIBETAN VOWEL SIGN REVERSED I (TIBETAN VOWEL SIGN SHORT I) */ + ["\u0F81", "\u0F81"], /* TIBETAN VOWEL SIGN REVERSED II */ + ["\u0F82", "\u0F82"], /* TIBETAN SIGN NYI ZLA NAA DA (TIBETAN CANDRABINDU WITH ORNAMENT) */ + ["\u0F83", "\u0F83"], /* TIBETAN SIGN SNA LDAN (TIBETAN CANDRABINDU) */ + ["\u0F84", "\u0F84"], /* TIBETAN MARK HALANTA (TIBETAN VIRAMA) */ + ["\u0F85", "\u0F85"], /* TIBETAN MARK PALUTA (TIBETAN CHUCHENYIGE) */ + ["\u0F86", "\u0F86"], /* TIBETAN SIGN LCI RTAGS */ + ["\u0F87", "\u0F87"], /* TIBETAN SIGN YANG RTAGS */ + ["\u0F88", "\u0F88"], /* TIBETAN SIGN LCE TSA CAN */ + ["\u0F89", "\u0F89"], /* TIBETAN SIGN MCHU CAN */ + ["\u0F8A", "\u0F8A"], /* TIBETAN SIGN GRU CAN RGYINGS */ + ["\u0F8B", "\u0F8B"], /* TIBETAN SIGN GRU MED RGYINGS */ + ["\u0F8C", "\u0F8C"], /* TIBETAN SIGN INVERTED MCHU CAN */ + ["\u0F8D", "\u0F8D"], /* TIBETAN SUBJOINED SIGN LCE TSA CAN */ + ["\u0F8E", "\u0F8E"], /* TIBETAN SUBJOINED SIGN MCHU CAN */ + ["\u0F8F", "\u0F8F"], /* TIBETAN SUBJOINED SIGN INVERTED MCHU CAN */ + ["\u0F90", "\u0F90"], /* TIBETAN SUBJOINED LETTER KA */ + ["\u0F91", "\u0F91"], /* TIBETAN SUBJOINED LETTER KHA */ + ["\u0F92", "\u0F92"], /* TIBETAN SUBJOINED LETTER GA */ + ["\u0F93", "\u0F93"], /* TIBETAN SUBJOINED LETTER GHA */ + ["\u0F94", "\u0F94"], /* TIBETAN SUBJOINED LETTER NGA */ + ["\u0F95", "\u0F95"], /* TIBETAN SUBJOINED LETTER CA */ + ["\u0F96", "\u0F96"], /* TIBETAN SUBJOINED LETTER CHA */ + ["\u0F97", "\u0F97"], /* TIBETAN SUBJOINED LETTER JA */ + ["\u0F98", "\u0F98"], + ["\u0F99", "\u0F99"], /* TIBETAN SUBJOINED LETTER NYA */ + ["\u0F9A", "\u0F9A"], /* TIBETAN SUBJOINED LETTER TTA */ + ["\u0F9B", "\u0F9B"], /* TIBETAN SUBJOINED LETTER TTHA */ + ["\u0F9C", "\u0F9C"], /* TIBETAN SUBJOINED LETTER DDA */ + ["\u0F9D", "\u0F9D"], /* TIBETAN SUBJOINED LETTER DDHA */ + ["\u0F9E", "\u0F9E"], /* TIBETAN SUBJOINED LETTER NNA */ + ["\u0F9F", "\u0F9F"], /* TIBETAN SUBJOINED LETTER TA */ + ["\u0FA0", "\u0FA0"], /* TIBETAN SUBJOINED LETTER THA */ + ["\u0FA1", "\u0FA1"], /* TIBETAN SUBJOINED LETTER DA */ + ["\u0FA2", "\u0FA2"], /* TIBETAN SUBJOINED LETTER DHA */ + ["\u0FA3", "\u0FA3"], /* TIBETAN SUBJOINED LETTER NA */ + ["\u0FA4", "\u0FA4"], /* TIBETAN SUBJOINED LETTER PA */ + ["\u0FA5", "\u0FA5"], /* TIBETAN SUBJOINED LETTER PHA */ + ["\u0FA6", "\u0FA6"], /* TIBETAN SUBJOINED LETTER BA */ + ["\u0FA7", "\u0FA7"], /* TIBETAN SUBJOINED LETTER BHA */ + ["\u0FA8", "\u0FA8"], /* TIBETAN SUBJOINED LETTER MA */ + ["\u0FA9", "\u0FA9"], /* TIBETAN SUBJOINED LETTER TSA */ + ["\u0FAA", "\u0FAA"], /* TIBETAN SUBJOINED LETTER TSHA */ + ["\u0FAB", "\u0FAB"], /* TIBETAN SUBJOINED LETTER DZA */ + ["\u0FAC", "\u0FAC"], /* TIBETAN SUBJOINED LETTER DZHA */ + ["\u0FAD", "\u0FAD"], /* TIBETAN SUBJOINED LETTER WA */ + ["\u0FAE", "\u0FAE"], /* TIBETAN SUBJOINED LETTER ZHA */ + ["\u0FAF", "\u0FAF"], /* TIBETAN SUBJOINED LETTER ZA */ + ["\u0FB0", "\u0FB0"], /* TIBETAN SUBJOINED LETTER -A */ + ["\u0FB1", "\u0FB1"], /* TIBETAN SUBJOINED LETTER YA */ + ["\u0FB2", "\u0FB2"], /* TIBETAN SUBJOINED LETTER RA */ + ["\u0FB3", "\u0FB3"], /* TIBETAN SUBJOINED LETTER LA */ + ["\u0FB4", "\u0FB4"], /* TIBETAN SUBJOINED LETTER SHA */ + ["\u0FB5", "\u0FB5"], /* TIBETAN SUBJOINED LETTER SSA */ + ["\u0FB6", "\u0FB6"], /* TIBETAN SUBJOINED LETTER SA */ + ["\u0FB7", "\u0FB7"], /* TIBETAN SUBJOINED LETTER HA */ + ["\u0FB8", "\u0FB8"], /* TIBETAN SUBJOINED LETTER A */ + ["\u0FB9", "\u0FB9"], /* TIBETAN SUBJOINED LETTER KSSA */ + ["\u0FBA", "\u0FBA"], /* TIBETAN SUBJOINED LETTER FIXED-FORM WA */ + ["\u0FBB", "\u0FBB"], /* TIBETAN SUBJOINED LETTER FIXED-FORM YA */ + ["\u0FBC", "\u0FBC"], /* TIBETAN SUBJOINED LETTER FIXED-FORM RA */ + ["\u0FBD", "\u0FBD"], + ["\u0FBE", "\u0FBE"], /* TIBETAN KU RU KHA */ + ["\u0FBF", "\u0FBF"], /* TIBETAN KU RU KHA BZHI MIG CAN */ + ["\u0FC0", "\u0FC0"], /* TIBETAN CANTILLATION SIGN HEAVY BEAT */ + ["\u0FC1", "\u0FC1"], /* TIBETAN CANTILLATION SIGN LIGHT BEAT */ + ["\u0FC2", "\u0FC2"], /* TIBETAN CANTILLATION SIGN CANG TE-U */ + ["\u0FC3", "\u0FC3"], /* TIBETAN CANTILLATION SIGN SBUB -CHAL */ + ["\u0FC4", "\u0FC4"], /* TIBETAN SYMBOL DRIL BU */ + ["\u0FC5", "\u0FC5"], /* TIBETAN SYMBOL RDO RJE */ + ["\u0FC6", "\u0FC6"], /* TIBETAN SYMBOL PADMA GDAN */ + ["\u0FC7", "\u0FC7"], /* TIBETAN SYMBOL RDO RJE RGYA GRAM */ + ["\u0FC8", "\u0FC8"], /* TIBETAN SYMBOL PHUR PA */ + ["\u0FC9", "\u0FC9"], /* TIBETAN SYMBOL NOR BU */ + ["\u0FCA", "\u0FCA"], /* TIBETAN SYMBOL NOR BU NYIS -KHYIL */ + ["\u0FCB", "\u0FCB"], /* TIBETAN SYMBOL NOR BU GSUM -KHYIL */ + ["\u0FCC", "\u0FCC"], /* TIBETAN SYMBOL NOR BU BZHI -KHYIL */ + ["\u0FCD", "\u0FCD"], + ["\u0FCE", "\u0FCE"], /* TIBETAN SIGN RDEL NAG RDEL DKAR */ + ["\u0FCF", "\u0FCF"], /* TIBETAN SIGN RDEL NAG GSUM */ + ["\u0FD0", "\u0FD0"], /* TIBETAN MARK BSKA- SHOG GI MGO RGYAN */ + ["\u0FD1", "\u0FD1"], /* TIBETAN MARK MNYAM YIG GI MGO RGYAN */ + ["\u0FD2", "\u0FD2"], /* TIBETAN MARK NYIS TSHEG */ + ["\u0FD3", "\u0FD3"], /* TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA */ + ["\u0FD4", "\u0FD4"], /* TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA */ + ["\u0FD5", "\u0FD5"], /* RIGHT-FACING SVASTI SIGN */ + ["\u0FD6", "\u0FD6"], /* LEFT-FACING SVASTI SIGN */ + ["\u0FD7", "\u0FD7"], /* RIGHT-FACING SVASTI SIGN WITH DOTS */ + ["\u0FD8", "\u0FD8"], /* LEFT-FACING SVASTI SIGN WITH DOTS */ + ["\u0FD9", "\u0FD9"], /* TIBETAN MARK LEADING MCHAN RTAGS */ + ["\u0FDA", "\u0FDA"], /* TIBETAN MARK TRAILING MCHAN RTAGS */ + ["\u0FDB", "\u0FDB"], + ["\u0FDC", "\u0FDC"], + ["\u0FDD", "\u0FDD"], + ["\u0FDE", "\u0FDE"], + ["\u0FDF", "\u0FDF"], + ["\u0FE0", "\u0FE0"], + ["\u0FE1", "\u0FE1"], + ["\u0FE2", "\u0FE2"], + ["\u0FE3", "\u0FE3"], + ["\u0FE4", "\u0FE4"], + ["\u0FE5", "\u0FE5"], + ["\u0FE6", "\u0FE6"], + ["\u0FE7", "\u0FE7"], + ["\u0FE8", "\u0FE8"], + ["\u0FE9", "\u0FE9"], + ["\u0FEA", "\u0FEA"], + ["\u0FEB", "\u0FEB"], + ["\u0FEC", "\u0FEC"], + ["\u0FED", "\u0FED"], + ["\u0FEE", "\u0FEE"], + ["\u0FEF", "\u0FEF"], + ["\u0FF0", "\u0FF0"], + ["\u0FF1", "\u0FF1"], + ["\u0FF2", "\u0FF2"], + ["\u0FF3", "\u0FF3"], + ["\u0FF4", "\u0FF4"], + ["\u0FF5", "\u0FF5"], + ["\u0FF6", "\u0FF6"], + ["\u0FF7", "\u0FF7"], + ["\u0FF8", "\u0FF8"], + ["\u0FF9", "\u0FF9"], + ["\u0FFA", "\u0FFA"], + ["\u0FFB", "\u0FFB"], + ["\u0FFC", "\u0FFC"], + ["\u0FFD", "\u0FFD"], + ["\u0FFE", "\u0FFE"], + ["\u0FFF", "\u0FFF"], + ["\u1000", "\u1000"], /* MYANMAR LETTER KA */ + ["\u1001", "\u1001"], /* MYANMAR LETTER KHA */ + ["\u1002", "\u1002"], /* MYANMAR LETTER GA */ + ["\u1003", "\u1003"], /* MYANMAR LETTER GHA */ + ["\u1004", "\u1004"], /* MYANMAR LETTER NGA */ + ["\u1005", "\u1005"], /* MYANMAR LETTER CA */ + ["\u1006", "\u1006"], /* MYANMAR LETTER CHA */ + ["\u1007", "\u1007"], /* MYANMAR LETTER JA */ + ["\u1008", "\u1008"], /* MYANMAR LETTER JHA */ + ["\u1009", "\u1009"], /* MYANMAR LETTER NYA */ + ["\u100A", "\u100A"], /* MYANMAR LETTER NNYA */ + ["\u100B", "\u100B"], /* MYANMAR LETTER TTA */ + ["\u100C", "\u100C"], /* MYANMAR LETTER TTHA */ + ["\u100D", "\u100D"], /* MYANMAR LETTER DDA */ + ["\u100E", "\u100E"], /* MYANMAR LETTER DDHA */ + ["\u100F", "\u100F"], /* MYANMAR LETTER NNA */ + ["\u1010", "\u1010"], /* MYANMAR LETTER TA */ + ["\u1011", "\u1011"], /* MYANMAR LETTER THA */ + ["\u1012", "\u1012"], /* MYANMAR LETTER DA */ + ["\u1013", "\u1013"], /* MYANMAR LETTER DHA */ + ["\u1014", "\u1014"], /* MYANMAR LETTER NA */ + ["\u1015", "\u1015"], /* MYANMAR LETTER PA */ + ["\u1016", "\u1016"], /* MYANMAR LETTER PHA */ + ["\u1017", "\u1017"], /* MYANMAR LETTER BA */ + ["\u1018", "\u1018"], /* MYANMAR LETTER BHA */ + ["\u1019", "\u1019"], /* MYANMAR LETTER MA */ + ["\u101A", "\u101A"], /* MYANMAR LETTER YA */ + ["\u101B", "\u101B"], /* MYANMAR LETTER RA */ + ["\u101C", "\u101C"], /* MYANMAR LETTER LA */ + ["\u101D", "\u101D"], /* MYANMAR LETTER WA */ + ["\u101E", "\u101E"], /* MYANMAR LETTER SA */ + ["\u101F", "\u101F"], /* MYANMAR LETTER HA */ + ["\u1020", "\u1020"], /* MYANMAR LETTER LLA */ + ["\u1021", "\u1021"], /* MYANMAR LETTER A */ + ["\u1022", "\u1022"], /* MYANMAR LETTER SHAN A */ + ["\u1023", "\u1023"], /* MYANMAR LETTER I */ + ["\u1024", "\u1024"], /* MYANMAR LETTER II */ + ["\u1025", "\u1025"], /* MYANMAR LETTER U */ + ["\u1026", "\u1026"], /* MYANMAR LETTER UU */ + ["\u1027", "\u1027"], /* MYANMAR LETTER E */ + ["\u1028", "\u1028"], /* MYANMAR LETTER MON E */ + ["\u1029", "\u1029"], /* MYANMAR LETTER O */ + ["\u102A", "\u102A"], /* MYANMAR LETTER AU */ + ["\u102B", "\u102B"], /* MYANMAR VOWEL SIGN TALL AA */ + ["\u102C", "\u102C"], /* MYANMAR VOWEL SIGN AA */ + ["\u102D", "\u102D"], /* MYANMAR VOWEL SIGN I */ + ["\u102E", "\u102E"], /* MYANMAR VOWEL SIGN II */ + ["\u102F", "\u102F"], /* MYANMAR VOWEL SIGN U */ + ["\u1030", "\u1030"], /* MYANMAR VOWEL SIGN UU */ + ["\u1031", "\u1031"], /* MYANMAR VOWEL SIGN E */ + ["\u1032", "\u1032"], /* MYANMAR VOWEL SIGN AI */ + ["\u1033", "\u1033"], /* MYANMAR VOWEL SIGN MON II */ + ["\u1034", "\u1034"], /* MYANMAR VOWEL SIGN MON O */ + ["\u1035", "\u1035"], /* MYANMAR VOWEL SIGN E ABOVE */ + ["\u1036", "\u1036"], /* MYANMAR SIGN ANUSVARA */ + ["\u1037", "\u1037"], /* MYANMAR SIGN DOT BELOW */ + ["\u1038", "\u1038"], /* MYANMAR SIGN VISARGA */ + ["\u1039", "\u1039"], /* MYANMAR SIGN VIRAMA */ + ["\u103A", "\u103A"], /* MYANMAR SIGN ASAT */ + ["\u103B", "\u103B"], /* MYANMAR CONSONANT SIGN MEDIAL YA */ + ["\u103C", "\u103C"], /* MYANMAR CONSONANT SIGN MEDIAL RA */ + ["\u103D", "\u103D"], /* MYANMAR CONSONANT SIGN MEDIAL WA */ + ["\u103E", "\u103E"], /* MYANMAR CONSONANT SIGN MEDIAL HA */ + ["\u103F", "\u103F"], /* MYANMAR LETTER GREAT SA */ + ["\u1040", "\u1040"], /* MYANMAR DIGIT ZERO */ + ["\u1041", "\u1041"], /* MYANMAR DIGIT ONE */ + ["\u1042", "\u1042"], /* MYANMAR DIGIT TWO */ + ["\u1043", "\u1043"], /* MYANMAR DIGIT THREE */ + ["\u1044", "\u1044"], /* MYANMAR DIGIT FOUR */ + ["\u1045", "\u1045"], /* MYANMAR DIGIT FIVE */ + ["\u1046", "\u1046"], /* MYANMAR DIGIT SIX */ + ["\u1047", "\u1047"], /* MYANMAR DIGIT SEVEN */ + ["\u1048", "\u1048"], /* MYANMAR DIGIT EIGHT */ + ["\u1049", "\u1049"], /* MYANMAR DIGIT NINE */ + ["\u104A", "\u104A"], /* MYANMAR SIGN LITTLE SECTION */ + ["\u104B", "\u104B"], /* MYANMAR SIGN SECTION */ + ["\u104C", "\u104C"], /* MYANMAR SYMBOL LOCATIVE */ + ["\u104D", "\u104D"], /* MYANMAR SYMBOL COMPLETED */ + ["\u104E", "\u104E"], /* MYANMAR SYMBOL AFOREMENTIONED */ + ["\u104F", "\u104F"], /* MYANMAR SYMBOL GENITIVE */ + ["\u1050", "\u1050"], /* MYANMAR LETTER SHA */ + ["\u1051", "\u1051"], /* MYANMAR LETTER SSA */ + ["\u1052", "\u1052"], /* MYANMAR LETTER VOCALIC R */ + ["\u1053", "\u1053"], /* MYANMAR LETTER VOCALIC RR */ + ["\u1054", "\u1054"], /* MYANMAR LETTER VOCALIC L */ + ["\u1055", "\u1055"], /* MYANMAR LETTER VOCALIC LL */ + ["\u1056", "\u1056"], /* MYANMAR VOWEL SIGN VOCALIC R */ + ["\u1057", "\u1057"], /* MYANMAR VOWEL SIGN VOCALIC RR */ + ["\u1058", "\u1058"], /* MYANMAR VOWEL SIGN VOCALIC L */ + ["\u1059", "\u1059"], /* MYANMAR VOWEL SIGN VOCALIC LL */ + ["\u105A", "\u105A"], /* MYANMAR LETTER MON NGA */ + ["\u105B", "\u105B"], /* MYANMAR LETTER MON JHA */ + ["\u105C", "\u105C"], /* MYANMAR LETTER MON BBA */ + ["\u105D", "\u105D"], /* MYANMAR LETTER MON BBE */ + ["\u105E", "\u105E"], /* MYANMAR CONSONANT SIGN MON MEDIAL NA */ + ["\u105F", "\u105F"], /* MYANMAR CONSONANT SIGN MON MEDIAL MA */ + ["\u1060", "\u1060"], /* MYANMAR CONSONANT SIGN MON MEDIAL LA */ + ["\u1061", "\u1061"], /* MYANMAR LETTER SGAW KAREN SHA */ + ["\u1062", "\u1062"], /* MYANMAR VOWEL SIGN SGAW KAREN EU */ + ["\u1063", "\u1063"], /* MYANMAR TONE MARK SGAW KAREN HATHI */ + ["\u1064", "\u1064"], /* MYANMAR TONE MARK SGAW KAREN KE PHO */ + ["\u1065", "\u1065"], /* MYANMAR LETTER WESTERN PWO KAREN THA */ + ["\u1066", "\u1066"], /* MYANMAR LETTER WESTERN PWO KAREN PWA */ + ["\u1067", "\u1067"], /* MYANMAR VOWEL SIGN WESTERN PWO KAREN EU */ + ["\u1068", "\u1068"], /* MYANMAR VOWEL SIGN WESTERN PWO KAREN UE */ + ["\u1069", "\u1069"], /* MYANMAR SIGN WESTERN PWO KAREN TONE-1 */ + ["\u106A", "\u106A"], /* MYANMAR SIGN WESTERN PWO KAREN TONE-2 */ + ["\u106B", "\u106B"], /* MYANMAR SIGN WESTERN PWO KAREN TONE-3 */ + ["\u106C", "\u106C"], /* MYANMAR SIGN WESTERN PWO KAREN TONE-4 */ + ["\u106D", "\u106D"], /* MYANMAR SIGN WESTERN PWO KAREN TONE-5 */ + ["\u106E", "\u106E"], /* MYANMAR LETTER EASTERN PWO KAREN NNA */ + ["\u106F", "\u106F"], /* MYANMAR LETTER EASTERN PWO KAREN YWA */ + ["\u1070", "\u1070"], /* MYANMAR LETTER EASTERN PWO KAREN GHWA */ + ["\u1071", "\u1071"], /* MYANMAR VOWEL SIGN GEBA KAREN I */ + ["\u1072", "\u1072"], /* MYANMAR VOWEL SIGN KAYAH OE */ + ["\u1073", "\u1073"], /* MYANMAR VOWEL SIGN KAYAH U */ + ["\u1074", "\u1074"], /* MYANMAR VOWEL SIGN KAYAH EE */ + ["\u1075", "\u1075"], /* MYANMAR LETTER SHAN KA */ + ["\u1076", "\u1076"], /* MYANMAR LETTER SHAN KHA */ + ["\u1077", "\u1077"], /* MYANMAR LETTER SHAN GA */ + ["\u1078", "\u1078"], /* MYANMAR LETTER SHAN CA */ + ["\u1079", "\u1079"], /* MYANMAR LETTER SHAN ZA */ + ["\u107A", "\u107A"], /* MYANMAR LETTER SHAN NYA */ + ["\u107B", "\u107B"], /* MYANMAR LETTER SHAN DA */ + ["\u107C", "\u107C"], /* MYANMAR LETTER SHAN NA */ + ["\u107D", "\u107D"], /* MYANMAR LETTER SHAN PHA */ + ["\u107E", "\u107E"], /* MYANMAR LETTER SHAN FA */ + ["\u107F", "\u107F"], /* MYANMAR LETTER SHAN BA */ + ["\u1080", "\u1080"], /* MYANMAR LETTER SHAN THA */ + ["\u1081", "\u1081"], /* MYANMAR LETTER SHAN HA */ + ["\u1082", "\u1082"], /* MYANMAR CONSONANT SIGN SHAN MEDIAL WA */ + ["\u1083", "\u1083"], /* MYANMAR VOWEL SIGN SHAN AA */ + ["\u1084", "\u1084"], /* MYANMAR VOWEL SIGN SHAN E */ + ["\u1085", "\u1085"], /* MYANMAR VOWEL SIGN SHAN E ABOVE */ + ["\u1086", "\u1086"], /* MYANMAR VOWEL SIGN SHAN FINAL Y */ + ["\u1087", "\u1087"], /* MYANMAR SIGN SHAN TONE-2 */ + ["\u1088", "\u1088"], /* MYANMAR SIGN SHAN TONE-3 */ + ["\u1089", "\u1089"], /* MYANMAR SIGN SHAN TONE-5 */ + ["\u108A", "\u108A"], /* MYANMAR SIGN SHAN TONE-6 */ + ["\u108B", "\u108B"], /* MYANMAR SIGN SHAN COUNCIL TONE-2 */ + ["\u108C", "\u108C"], /* MYANMAR SIGN SHAN COUNCIL TONE-3 */ + ["\u108D", "\u108D"], /* MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE */ + ["\u108E", "\u108E"], /* MYANMAR LETTER RUMAI PALAUNG FA */ + ["\u108F", "\u108F"], /* MYANMAR SIGN RUMAI PALAUNG TONE-5 */ + ["\u1090", "\u1090"], /* MYANMAR SHAN DIGIT ZERO */ + ["\u1091", "\u1091"], /* MYANMAR SHAN DIGIT ONE */ + ["\u1092", "\u1092"], /* MYANMAR SHAN DIGIT TWO */ + ["\u1093", "\u1093"], /* MYANMAR SHAN DIGIT THREE */ + ["\u1094", "\u1094"], /* MYANMAR SHAN DIGIT FOUR */ + ["\u1095", "\u1095"], /* MYANMAR SHAN DIGIT FIVE */ + ["\u1096", "\u1096"], /* MYANMAR SHAN DIGIT SIX */ + ["\u1097", "\u1097"], /* MYANMAR SHAN DIGIT SEVEN */ + ["\u1098", "\u1098"], /* MYANMAR SHAN DIGIT EIGHT */ + ["\u1099", "\u1099"], /* MYANMAR SHAN DIGIT NINE */ + ["\u109A", "\u109A"], /* MYANMAR SIGN KHAMTI TONE-1 */ + ["\u109B", "\u109B"], /* MYANMAR SIGN KHAMTI TONE-3 */ + ["\u109C", "\u109C"], /* MYANMAR VOWEL SIGN AITON A */ + ["\u109D", "\u109D"], /* MYANMAR VOWEL SIGN AITON AI */ + ["\u109E", "\u109E"], /* MYANMAR SYMBOL SHAN ONE */ + ["\u109F", "\u109F"], /* MYANMAR SYMBOL SHAN EXCLAMATION */ + ["\u10A0", "\u2D00"], /* GEORGIAN CAPITAL LETTER AN */ + ["\u10A1", "\u2D01"], /* GEORGIAN CAPITAL LETTER BAN */ + ["\u10A2", "\u2D02"], /* GEORGIAN CAPITAL LETTER GAN */ + ["\u10A3", "\u2D03"], /* GEORGIAN CAPITAL LETTER DON */ + ["\u10A4", "\u2D04"], /* GEORGIAN CAPITAL LETTER EN */ + ["\u10A5", "\u2D05"], /* GEORGIAN CAPITAL LETTER VIN */ + ["\u10A6", "\u2D06"], /* GEORGIAN CAPITAL LETTER ZEN */ + ["\u10A7", "\u2D07"], /* GEORGIAN CAPITAL LETTER TAN */ + ["\u10A8", "\u2D08"], /* GEORGIAN CAPITAL LETTER IN */ + ["\u10A9", "\u2D09"], /* GEORGIAN CAPITAL LETTER KAN */ + ["\u10AA", "\u2D0A"], /* GEORGIAN CAPITAL LETTER LAS */ + ["\u10AB", "\u2D0B"], /* GEORGIAN CAPITAL LETTER MAN */ + ["\u10AC", "\u2D0C"], /* GEORGIAN CAPITAL LETTER NAR */ + ["\u10AD", "\u2D0D"], /* GEORGIAN CAPITAL LETTER ON */ + ["\u10AE", "\u2D0E"], /* GEORGIAN CAPITAL LETTER PAR */ + ["\u10AF", "\u2D0F"], /* GEORGIAN CAPITAL LETTER ZHAR */ + ["\u10B0", "\u2D10"], /* GEORGIAN CAPITAL LETTER RAE */ + ["\u10B1", "\u2D11"], /* GEORGIAN CAPITAL LETTER SAN */ + ["\u10B2", "\u2D12"], /* GEORGIAN CAPITAL LETTER TAR */ + ["\u10B3", "\u2D13"], /* GEORGIAN CAPITAL LETTER UN */ + ["\u10B4", "\u2D14"], /* GEORGIAN CAPITAL LETTER PHAR */ + ["\u10B5", "\u2D15"], /* GEORGIAN CAPITAL LETTER KHAR */ + ["\u10B6", "\u2D16"], /* GEORGIAN CAPITAL LETTER GHAN */ + ["\u10B7", "\u2D17"], /* GEORGIAN CAPITAL LETTER QAR */ + ["\u10B8", "\u2D18"], /* GEORGIAN CAPITAL LETTER SHIN */ + ["\u10B9", "\u2D19"], /* GEORGIAN CAPITAL LETTER CHIN */ + ["\u10BA", "\u2D1A"], /* GEORGIAN CAPITAL LETTER CAN */ + ["\u10BB", "\u2D1B"], /* GEORGIAN CAPITAL LETTER JIL */ + ["\u10BC", "\u2D1C"], /* GEORGIAN CAPITAL LETTER CIL */ + ["\u10BD", "\u2D1D"], /* GEORGIAN CAPITAL LETTER CHAR */ + ["\u10BE", "\u2D1E"], /* GEORGIAN CAPITAL LETTER XAN */ + ["\u10BF", "\u2D1F"], /* GEORGIAN CAPITAL LETTER JHAN */ + ["\u10C0", "\u2D20"], /* GEORGIAN CAPITAL LETTER HAE */ + ["\u10C1", "\u2D21"], /* GEORGIAN CAPITAL LETTER HE */ + ["\u10C2", "\u2D22"], /* GEORGIAN CAPITAL LETTER HIE */ + ["\u10C3", "\u2D23"], /* GEORGIAN CAPITAL LETTER WE */ + ["\u10C4", "\u2D24"], /* GEORGIAN CAPITAL LETTER HAR */ + ["\u10C5", "\u2D25"], /* GEORGIAN CAPITAL LETTER HOE */ + ["\u10C6", "\u10C6"], + ["\u10C7", "\u2D27"], /* GEORGIAN CAPITAL LETTER YN */ + ["\u10C8", "\u10C8"], + ["\u10C9", "\u10C9"], + ["\u10CA", "\u10CA"], + ["\u10CB", "\u10CB"], + ["\u10CC", "\u10CC"], + ["\u10CD", "\u2D2D"], /* GEORGIAN CAPITAL LETTER AEN */ + ["\u10CE", "\u10CE"], + ["\u10CF", "\u10CF"], + ["\u1C90", "\u10D0"], /* GEORGIAN LETTER AN (GEORGIAN SMALL LETTER AN) */ + ["\u1C91", "\u10D1"], /* GEORGIAN LETTER BAN (GEORGIAN SMALL LETTER BAN) */ + ["\u1C92", "\u10D2"], /* GEORGIAN LETTER GAN (GEORGIAN SMALL LETTER GAN) */ + ["\u1C93", "\u10D3"], /* GEORGIAN LETTER DON (GEORGIAN SMALL LETTER DON) */ + ["\u1C94", "\u10D4"], /* GEORGIAN LETTER EN (GEORGIAN SMALL LETTER EN) */ + ["\u1C95", "\u10D5"], /* GEORGIAN LETTER VIN (GEORGIAN SMALL LETTER VIN) */ + ["\u1C96", "\u10D6"], /* GEORGIAN LETTER ZEN (GEORGIAN SMALL LETTER ZEN) */ + ["\u1C97", "\u10D7"], /* GEORGIAN LETTER TAN (GEORGIAN SMALL LETTER TAN) */ + ["\u1C98", "\u10D8"], /* GEORGIAN LETTER IN (GEORGIAN SMALL LETTER IN) */ + ["\u1C99", "\u10D9"], /* GEORGIAN LETTER KAN (GEORGIAN SMALL LETTER KAN) */ + ["\u1C9A", "\u10DA"], /* GEORGIAN LETTER LAS (GEORGIAN SMALL LETTER LAS) */ + ["\u1C9B", "\u10DB"], /* GEORGIAN LETTER MAN (GEORGIAN SMALL LETTER MAN) */ + ["\u1C9C", "\u10DC"], /* GEORGIAN LETTER NAR (GEORGIAN SMALL LETTER NAR) */ + ["\u1C9D", "\u10DD"], /* GEORGIAN LETTER ON (GEORGIAN SMALL LETTER ON) */ + ["\u1C9E", "\u10DE"], /* GEORGIAN LETTER PAR (GEORGIAN SMALL LETTER PAR) */ + ["\u1C9F", "\u10DF"], /* GEORGIAN LETTER ZHAR (GEORGIAN SMALL LETTER ZHAR) */ + ["\u1CA0", "\u10E0"], /* GEORGIAN LETTER RAE (GEORGIAN SMALL LETTER RAE) */ + ["\u1CA1", "\u10E1"], /* GEORGIAN LETTER SAN (GEORGIAN SMALL LETTER SAN) */ + ["\u1CA2", "\u10E2"], /* GEORGIAN LETTER TAR (GEORGIAN SMALL LETTER TAR) */ + ["\u1CA3", "\u10E3"], /* GEORGIAN LETTER UN (GEORGIAN SMALL LETTER UN) */ + ["\u1CA4", "\u10E4"], /* GEORGIAN LETTER PHAR (GEORGIAN SMALL LETTER PHAR) */ + ["\u1CA5", "\u10E5"], /* GEORGIAN LETTER KHAR (GEORGIAN SMALL LETTER KHAR) */ + ["\u1CA6", "\u10E6"], /* GEORGIAN LETTER GHAN (GEORGIAN SMALL LETTER GHAN) */ + ["\u1CA7", "\u10E7"], /* GEORGIAN LETTER QAR (GEORGIAN SMALL LETTER QAR) */ + ["\u1CA8", "\u10E8"], /* GEORGIAN LETTER SHIN (GEORGIAN SMALL LETTER SHIN) */ + ["\u1CA9", "\u10E9"], /* GEORGIAN LETTER CHIN (GEORGIAN SMALL LETTER CHIN) */ + ["\u1CAA", "\u10EA"], /* GEORGIAN LETTER CAN (GEORGIAN SMALL LETTER CAN) */ + ["\u1CAB", "\u10EB"], /* GEORGIAN LETTER JIL (GEORGIAN SMALL LETTER JIL) */ + ["\u1CAC", "\u10EC"], /* GEORGIAN LETTER CIL (GEORGIAN SMALL LETTER CIL) */ + ["\u1CAD", "\u10ED"], /* GEORGIAN LETTER CHAR (GEORGIAN SMALL LETTER CHAR) */ + ["\u1CAE", "\u10EE"], /* GEORGIAN LETTER XAN (GEORGIAN SMALL LETTER XAN) */ + ["\u1CAF", "\u10EF"], /* GEORGIAN LETTER JHAN (GEORGIAN SMALL LETTER JHAN) */ + ["\u1CB0", "\u10F0"], /* GEORGIAN LETTER HAE (GEORGIAN SMALL LETTER HAE) */ + ["\u1CB1", "\u10F1"], /* GEORGIAN LETTER HE (GEORGIAN SMALL LETTER HE) */ + ["\u1CB2", "\u10F2"], /* GEORGIAN LETTER HIE (GEORGIAN SMALL LETTER HIE) */ + ["\u1CB3", "\u10F3"], /* GEORGIAN LETTER WE (GEORGIAN SMALL LETTER WE) */ + ["\u1CB4", "\u10F4"], /* GEORGIAN LETTER HAR (GEORGIAN SMALL LETTER HAR) */ + ["\u1CB5", "\u10F5"], /* GEORGIAN LETTER HOE (GEORGIAN SMALL LETTER HOE) */ + ["\u1CB6", "\u10F6"], /* GEORGIAN LETTER FI (GEORGIAN SMALL LETTER FI) */ + ["\u1CB7", "\u10F7"], /* GEORGIAN LETTER YN */ + ["\u1CB8", "\u10F8"], /* GEORGIAN LETTER ELIFI */ + ["\u1CB9", "\u10F9"], /* GEORGIAN LETTER TURNED GAN */ + ["\u1CBA", "\u10FA"], /* GEORGIAN LETTER AIN */ + ["\u10FB", "\u10FB"], /* GEORGIAN PARAGRAPH SEPARATOR */ + ["\u10FC", "\u10FC"], /* MODIFIER LETTER GEORGIAN NAR */ + ["\u1CBD", "\u10FD"], /* GEORGIAN LETTER AEN */ + ["\u1CBE", "\u10FE"], /* GEORGIAN LETTER HARD SIGN */ + ["\u1CBF", "\u10FF"], /* GEORGIAN LETTER LABIAL SIGN */ + ["\u1100", "\u1100"], /* HANGUL CHOSEONG KIYEOK */ + ["\u1101", "\u1101"], /* HANGUL CHOSEONG SSANGKIYEOK */ + ["\u1102", "\u1102"], /* HANGUL CHOSEONG NIEUN */ + ["\u1103", "\u1103"], /* HANGUL CHOSEONG TIKEUT */ + ["\u1104", "\u1104"], /* HANGUL CHOSEONG SSANGTIKEUT */ + ["\u1105", "\u1105"], /* HANGUL CHOSEONG RIEUL */ + ["\u1106", "\u1106"], /* HANGUL CHOSEONG MIEUM */ + ["\u1107", "\u1107"], /* HANGUL CHOSEONG PIEUP */ + ["\u1108", "\u1108"], /* HANGUL CHOSEONG SSANGPIEUP */ + ["\u1109", "\u1109"], /* HANGUL CHOSEONG SIOS */ + ["\u110A", "\u110A"], /* HANGUL CHOSEONG SSANGSIOS */ + ["\u110B", "\u110B"], /* HANGUL CHOSEONG IEUNG */ + ["\u110C", "\u110C"], /* HANGUL CHOSEONG CIEUC */ + ["\u110D", "\u110D"], /* HANGUL CHOSEONG SSANGCIEUC */ + ["\u110E", "\u110E"], /* HANGUL CHOSEONG CHIEUCH */ + ["\u110F", "\u110F"], /* HANGUL CHOSEONG KHIEUKH */ + ["\u1110", "\u1110"], /* HANGUL CHOSEONG THIEUTH */ + ["\u1111", "\u1111"], /* HANGUL CHOSEONG PHIEUPH */ + ["\u1112", "\u1112"], /* HANGUL CHOSEONG HIEUH */ + ["\u1113", "\u1113"], /* HANGUL CHOSEONG NIEUN-KIYEOK */ + ["\u1114", "\u1114"], /* HANGUL CHOSEONG SSANGNIEUN */ + ["\u1115", "\u1115"], /* HANGUL CHOSEONG NIEUN-TIKEUT */ + ["\u1116", "\u1116"], /* HANGUL CHOSEONG NIEUN-PIEUP */ + ["\u1117", "\u1117"], /* HANGUL CHOSEONG TIKEUT-KIYEOK */ + ["\u1118", "\u1118"], /* HANGUL CHOSEONG RIEUL-NIEUN */ + ["\u1119", "\u1119"], /* HANGUL CHOSEONG SSANGRIEUL */ + ["\u111A", "\u111A"], /* HANGUL CHOSEONG RIEUL-HIEUH */ + ["\u111B", "\u111B"], /* HANGUL CHOSEONG KAPYEOUNRIEUL */ + ["\u111C", "\u111C"], /* HANGUL CHOSEONG MIEUM-PIEUP */ + ["\u111D", "\u111D"], /* HANGUL CHOSEONG KAPYEOUNMIEUM */ + ["\u111E", "\u111E"], /* HANGUL CHOSEONG PIEUP-KIYEOK */ + ["\u111F", "\u111F"], /* HANGUL CHOSEONG PIEUP-NIEUN */ + ["\u1120", "\u1120"], /* HANGUL CHOSEONG PIEUP-TIKEUT */ + ["\u1121", "\u1121"], /* HANGUL CHOSEONG PIEUP-SIOS */ + ["\u1122", "\u1122"], /* HANGUL CHOSEONG PIEUP-SIOS-KIYEOK */ + ["\u1123", "\u1123"], /* HANGUL CHOSEONG PIEUP-SIOS-TIKEUT */ + ["\u1124", "\u1124"], /* HANGUL CHOSEONG PIEUP-SIOS-PIEUP */ + ["\u1125", "\u1125"], /* HANGUL CHOSEONG PIEUP-SSANGSIOS */ + ["\u1126", "\u1126"], /* HANGUL CHOSEONG PIEUP-SIOS-CIEUC */ + ["\u1127", "\u1127"], /* HANGUL CHOSEONG PIEUP-CIEUC */ + ["\u1128", "\u1128"], /* HANGUL CHOSEONG PIEUP-CHIEUCH */ + ["\u1129", "\u1129"], /* HANGUL CHOSEONG PIEUP-THIEUTH */ + ["\u112A", "\u112A"], /* HANGUL CHOSEONG PIEUP-PHIEUPH */ + ["\u112B", "\u112B"], /* HANGUL CHOSEONG KAPYEOUNPIEUP */ + ["\u112C", "\u112C"], /* HANGUL CHOSEONG KAPYEOUNSSANGPIEUP */ + ["\u112D", "\u112D"], /* HANGUL CHOSEONG SIOS-KIYEOK */ + ["\u112E", "\u112E"], /* HANGUL CHOSEONG SIOS-NIEUN */ + ["\u112F", "\u112F"], /* HANGUL CHOSEONG SIOS-TIKEUT */ + ["\u1130", "\u1130"], /* HANGUL CHOSEONG SIOS-RIEUL */ + ["\u1131", "\u1131"], /* HANGUL CHOSEONG SIOS-MIEUM */ + ["\u1132", "\u1132"], /* HANGUL CHOSEONG SIOS-PIEUP */ + ["\u1133", "\u1133"], /* HANGUL CHOSEONG SIOS-PIEUP-KIYEOK */ + ["\u1134", "\u1134"], /* HANGUL CHOSEONG SIOS-SSANGSIOS */ + ["\u1135", "\u1135"], /* HANGUL CHOSEONG SIOS-IEUNG */ + ["\u1136", "\u1136"], /* HANGUL CHOSEONG SIOS-CIEUC */ + ["\u1137", "\u1137"], /* HANGUL CHOSEONG SIOS-CHIEUCH */ + ["\u1138", "\u1138"], /* HANGUL CHOSEONG SIOS-KHIEUKH */ + ["\u1139", "\u1139"], /* HANGUL CHOSEONG SIOS-THIEUTH */ + ["\u113A", "\u113A"], /* HANGUL CHOSEONG SIOS-PHIEUPH */ + ["\u113B", "\u113B"], /* HANGUL CHOSEONG SIOS-HIEUH */ + ["\u113C", "\u113C"], /* HANGUL CHOSEONG CHITUEUMSIOS */ + ["\u113D", "\u113D"], /* HANGUL CHOSEONG CHITUEUMSSANGSIOS */ + ["\u113E", "\u113E"], /* HANGUL CHOSEONG CEONGCHIEUMSIOS */ + ["\u113F", "\u113F"], /* HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS */ + ["\u1140", "\u1140"], /* HANGUL CHOSEONG PANSIOS */ + ["\u1141", "\u1141"], /* HANGUL CHOSEONG IEUNG-KIYEOK */ + ["\u1142", "\u1142"], /* HANGUL CHOSEONG IEUNG-TIKEUT */ + ["\u1143", "\u1143"], /* HANGUL CHOSEONG IEUNG-MIEUM */ + ["\u1144", "\u1144"], /* HANGUL CHOSEONG IEUNG-PIEUP */ + ["\u1145", "\u1145"], /* HANGUL CHOSEONG IEUNG-SIOS */ + ["\u1146", "\u1146"], /* HANGUL CHOSEONG IEUNG-PANSIOS */ + ["\u1147", "\u1147"], /* HANGUL CHOSEONG SSANGIEUNG */ + ["\u1148", "\u1148"], /* HANGUL CHOSEONG IEUNG-CIEUC */ + ["\u1149", "\u1149"], /* HANGUL CHOSEONG IEUNG-CHIEUCH */ + ["\u114A", "\u114A"], /* HANGUL CHOSEONG IEUNG-THIEUTH */ + ["\u114B", "\u114B"], /* HANGUL CHOSEONG IEUNG-PHIEUPH */ + ["\u114C", "\u114C"], /* HANGUL CHOSEONG YESIEUNG */ + ["\u114D", "\u114D"], /* HANGUL CHOSEONG CIEUC-IEUNG */ + ["\u114E", "\u114E"], /* HANGUL CHOSEONG CHITUEUMCIEUC */ + ["\u114F", "\u114F"], /* HANGUL CHOSEONG CHITUEUMSSANGCIEUC */ + ["\u1150", "\u1150"], /* HANGUL CHOSEONG CEONGCHIEUMCIEUC */ + ["\u1151", "\u1151"], /* HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC */ + ["\u1152", "\u1152"], /* HANGUL CHOSEONG CHIEUCH-KHIEUKH */ + ["\u1153", "\u1153"], /* HANGUL CHOSEONG CHIEUCH-HIEUH */ + ["\u1154", "\u1154"], /* HANGUL CHOSEONG CHITUEUMCHIEUCH */ + ["\u1155", "\u1155"], /* HANGUL CHOSEONG CEONGCHIEUMCHIEUCH */ + ["\u1156", "\u1156"], /* HANGUL CHOSEONG PHIEUPH-PIEUP */ + ["\u1157", "\u1157"], /* HANGUL CHOSEONG KAPYEOUNPHIEUPH */ + ["\u1158", "\u1158"], /* HANGUL CHOSEONG SSANGHIEUH */ + ["\u1159", "\u1159"], /* HANGUL CHOSEONG YEORINHIEUH */ + ["\u115A", "\u115A"], /* HANGUL CHOSEONG KIYEOK-TIKEUT */ + ["\u115B", "\u115B"], /* HANGUL CHOSEONG NIEUN-SIOS */ + ["\u115C", "\u115C"], /* HANGUL CHOSEONG NIEUN-CIEUC */ + ["\u115D", "\u115D"], /* HANGUL CHOSEONG NIEUN-HIEUH */ + ["\u115E", "\u115E"], /* HANGUL CHOSEONG TIKEUT-RIEUL */ + ["\u115F", "\u115F"], /* HANGUL CHOSEONG FILLER */ + ["\u1160", "\u1160"], /* HANGUL JUNGSEONG FILLER */ + ["\u1161", "\u1161"], /* HANGUL JUNGSEONG A */ + ["\u1162", "\u1162"], /* HANGUL JUNGSEONG AE */ + ["\u1163", "\u1163"], /* HANGUL JUNGSEONG YA */ + ["\u1164", "\u1164"], /* HANGUL JUNGSEONG YAE */ + ["\u1165", "\u1165"], /* HANGUL JUNGSEONG EO */ + ["\u1166", "\u1166"], /* HANGUL JUNGSEONG E */ + ["\u1167", "\u1167"], /* HANGUL JUNGSEONG YEO */ + ["\u1168", "\u1168"], /* HANGUL JUNGSEONG YE */ + ["\u1169", "\u1169"], /* HANGUL JUNGSEONG O */ + ["\u116A", "\u116A"], /* HANGUL JUNGSEONG WA */ + ["\u116B", "\u116B"], /* HANGUL JUNGSEONG WAE */ + ["\u116C", "\u116C"], /* HANGUL JUNGSEONG OE */ + ["\u116D", "\u116D"], /* HANGUL JUNGSEONG YO */ + ["\u116E", "\u116E"], /* HANGUL JUNGSEONG U */ + ["\u116F", "\u116F"], /* HANGUL JUNGSEONG WEO */ + ["\u1170", "\u1170"], /* HANGUL JUNGSEONG WE */ + ["\u1171", "\u1171"], /* HANGUL JUNGSEONG WI */ + ["\u1172", "\u1172"], /* HANGUL JUNGSEONG YU */ + ["\u1173", "\u1173"], /* HANGUL JUNGSEONG EU */ + ["\u1174", "\u1174"], /* HANGUL JUNGSEONG YI */ + ["\u1175", "\u1175"], /* HANGUL JUNGSEONG I */ + ["\u1176", "\u1176"], /* HANGUL JUNGSEONG A-O */ + ["\u1177", "\u1177"], /* HANGUL JUNGSEONG A-U */ + ["\u1178", "\u1178"], /* HANGUL JUNGSEONG YA-O */ + ["\u1179", "\u1179"], /* HANGUL JUNGSEONG YA-YO */ + ["\u117A", "\u117A"], /* HANGUL JUNGSEONG EO-O */ + ["\u117B", "\u117B"], /* HANGUL JUNGSEONG EO-U */ + ["\u117C", "\u117C"], /* HANGUL JUNGSEONG EO-EU */ + ["\u117D", "\u117D"], /* HANGUL JUNGSEONG YEO-O */ + ["\u117E", "\u117E"], /* HANGUL JUNGSEONG YEO-U */ + ["\u117F", "\u117F"], /* HANGUL JUNGSEONG O-EO */ + ["\u1180", "\u1180"], /* HANGUL JUNGSEONG O-E */ + ["\u1181", "\u1181"], /* HANGUL JUNGSEONG O-YE */ + ["\u1182", "\u1182"], /* HANGUL JUNGSEONG O-O */ + ["\u1183", "\u1183"], /* HANGUL JUNGSEONG O-U */ + ["\u1184", "\u1184"], /* HANGUL JUNGSEONG YO-YA */ + ["\u1185", "\u1185"], /* HANGUL JUNGSEONG YO-YAE */ + ["\u1186", "\u1186"], /* HANGUL JUNGSEONG YO-YEO */ + ["\u1187", "\u1187"], /* HANGUL JUNGSEONG YO-O */ + ["\u1188", "\u1188"], /* HANGUL JUNGSEONG YO-I */ + ["\u1189", "\u1189"], /* HANGUL JUNGSEONG U-A */ + ["\u118A", "\u118A"], /* HANGUL JUNGSEONG U-AE */ + ["\u118B", "\u118B"], /* HANGUL JUNGSEONG U-EO-EU */ + ["\u118C", "\u118C"], /* HANGUL JUNGSEONG U-YE */ + ["\u118D", "\u118D"], /* HANGUL JUNGSEONG U-U */ + ["\u118E", "\u118E"], /* HANGUL JUNGSEONG YU-A */ + ["\u118F", "\u118F"], /* HANGUL JUNGSEONG YU-EO */ + ["\u1190", "\u1190"], /* HANGUL JUNGSEONG YU-E */ + ["\u1191", "\u1191"], /* HANGUL JUNGSEONG YU-YEO */ + ["\u1192", "\u1192"], /* HANGUL JUNGSEONG YU-YE */ + ["\u1193", "\u1193"], /* HANGUL JUNGSEONG YU-U */ + ["\u1194", "\u1194"], /* HANGUL JUNGSEONG YU-I */ + ["\u1195", "\u1195"], /* HANGUL JUNGSEONG EU-U */ + ["\u1196", "\u1196"], /* HANGUL JUNGSEONG EU-EU */ + ["\u1197", "\u1197"], /* HANGUL JUNGSEONG YI-U */ + ["\u1198", "\u1198"], /* HANGUL JUNGSEONG I-A */ + ["\u1199", "\u1199"], /* HANGUL JUNGSEONG I-YA */ + ["\u119A", "\u119A"], /* HANGUL JUNGSEONG I-O */ + ["\u119B", "\u119B"], /* HANGUL JUNGSEONG I-U */ + ["\u119C", "\u119C"], /* HANGUL JUNGSEONG I-EU */ + ["\u119D", "\u119D"], /* HANGUL JUNGSEONG I-ARAEA */ + ["\u119E", "\u119E"], /* HANGUL JUNGSEONG ARAEA */ + ["\u119F", "\u119F"], /* HANGUL JUNGSEONG ARAEA-EO */ + ["\u11A0", "\u11A0"], /* HANGUL JUNGSEONG ARAEA-U */ + ["\u11A1", "\u11A1"], /* HANGUL JUNGSEONG ARAEA-I */ + ["\u11A2", "\u11A2"], /* HANGUL JUNGSEONG SSANGARAEA */ + ["\u11A3", "\u11A3"], /* HANGUL JUNGSEONG A-EU */ + ["\u11A4", "\u11A4"], /* HANGUL JUNGSEONG YA-U */ + ["\u11A5", "\u11A5"], /* HANGUL JUNGSEONG YEO-YA */ + ["\u11A6", "\u11A6"], /* HANGUL JUNGSEONG O-YA */ + ["\u11A7", "\u11A7"], /* HANGUL JUNGSEONG O-YAE */ + ["\u11A8", "\u11A8"], /* HANGUL JONGSEONG KIYEOK */ + ["\u11A9", "\u11A9"], /* HANGUL JONGSEONG SSANGKIYEOK */ + ["\u11AA", "\u11AA"], /* HANGUL JONGSEONG KIYEOK-SIOS */ + ["\u11AB", "\u11AB"], /* HANGUL JONGSEONG NIEUN */ + ["\u11AC", "\u11AC"], /* HANGUL JONGSEONG NIEUN-CIEUC */ + ["\u11AD", "\u11AD"], /* HANGUL JONGSEONG NIEUN-HIEUH */ + ["\u11AE", "\u11AE"], /* HANGUL JONGSEONG TIKEUT */ + ["\u11AF", "\u11AF"], /* HANGUL JONGSEONG RIEUL */ + ["\u11B0", "\u11B0"], /* HANGUL JONGSEONG RIEUL-KIYEOK */ + ["\u11B1", "\u11B1"], /* HANGUL JONGSEONG RIEUL-MIEUM */ + ["\u11B2", "\u11B2"], /* HANGUL JONGSEONG RIEUL-PIEUP */ + ["\u11B3", "\u11B3"], /* HANGUL JONGSEONG RIEUL-SIOS */ + ["\u11B4", "\u11B4"], /* HANGUL JONGSEONG RIEUL-THIEUTH */ + ["\u11B5", "\u11B5"], /* HANGUL JONGSEONG RIEUL-PHIEUPH */ + ["\u11B6", "\u11B6"], /* HANGUL JONGSEONG RIEUL-HIEUH */ + ["\u11B7", "\u11B7"], /* HANGUL JONGSEONG MIEUM */ + ["\u11B8", "\u11B8"], /* HANGUL JONGSEONG PIEUP */ + ["\u11B9", "\u11B9"], /* HANGUL JONGSEONG PIEUP-SIOS */ + ["\u11BA", "\u11BA"], /* HANGUL JONGSEONG SIOS */ + ["\u11BB", "\u11BB"], /* HANGUL JONGSEONG SSANGSIOS */ + ["\u11BC", "\u11BC"], /* HANGUL JONGSEONG IEUNG */ + ["\u11BD", "\u11BD"], /* HANGUL JONGSEONG CIEUC */ + ["\u11BE", "\u11BE"], /* HANGUL JONGSEONG CHIEUCH */ + ["\u11BF", "\u11BF"], /* HANGUL JONGSEONG KHIEUKH */ + ["\u11C0", "\u11C0"], /* HANGUL JONGSEONG THIEUTH */ + ["\u11C1", "\u11C1"], /* HANGUL JONGSEONG PHIEUPH */ + ["\u11C2", "\u11C2"], /* HANGUL JONGSEONG HIEUH */ + ["\u11C3", "\u11C3"], /* HANGUL JONGSEONG KIYEOK-RIEUL */ + ["\u11C4", "\u11C4"], /* HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK */ + ["\u11C5", "\u11C5"], /* HANGUL JONGSEONG NIEUN-KIYEOK */ + ["\u11C6", "\u11C6"], /* HANGUL JONGSEONG NIEUN-TIKEUT */ + ["\u11C7", "\u11C7"], /* HANGUL JONGSEONG NIEUN-SIOS */ + ["\u11C8", "\u11C8"], /* HANGUL JONGSEONG NIEUN-PANSIOS */ + ["\u11C9", "\u11C9"], /* HANGUL JONGSEONG NIEUN-THIEUTH */ + ["\u11CA", "\u11CA"], /* HANGUL JONGSEONG TIKEUT-KIYEOK */ + ["\u11CB", "\u11CB"], /* HANGUL JONGSEONG TIKEUT-RIEUL */ + ["\u11CC", "\u11CC"], /* HANGUL JONGSEONG RIEUL-KIYEOK-SIOS */ + ["\u11CD", "\u11CD"], /* HANGUL JONGSEONG RIEUL-NIEUN */ + ["\u11CE", "\u11CE"], /* HANGUL JONGSEONG RIEUL-TIKEUT */ + ["\u11CF", "\u11CF"], /* HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH */ + ["\u11D0", "\u11D0"], /* HANGUL JONGSEONG SSANGRIEUL */ + ["\u11D1", "\u11D1"], /* HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK */ + ["\u11D2", "\u11D2"], /* HANGUL JONGSEONG RIEUL-MIEUM-SIOS */ + ["\u11D3", "\u11D3"], /* HANGUL JONGSEONG RIEUL-PIEUP-SIOS */ + ["\u11D4", "\u11D4"], /* HANGUL JONGSEONG RIEUL-PIEUP-HIEUH */ + ["\u11D5", "\u11D5"], /* HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP */ + ["\u11D6", "\u11D6"], /* HANGUL JONGSEONG RIEUL-SSANGSIOS */ + ["\u11D7", "\u11D7"], /* HANGUL JONGSEONG RIEUL-PANSIOS */ + ["\u11D8", "\u11D8"], /* HANGUL JONGSEONG RIEUL-KHIEUKH */ + ["\u11D9", "\u11D9"], /* HANGUL JONGSEONG RIEUL-YEORINHIEUH */ + ["\u11DA", "\u11DA"], /* HANGUL JONGSEONG MIEUM-KIYEOK */ + ["\u11DB", "\u11DB"], /* HANGUL JONGSEONG MIEUM-RIEUL */ + ["\u11DC", "\u11DC"], /* HANGUL JONGSEONG MIEUM-PIEUP */ + ["\u11DD", "\u11DD"], /* HANGUL JONGSEONG MIEUM-SIOS */ + ["\u11DE", "\u11DE"], /* HANGUL JONGSEONG MIEUM-SSANGSIOS */ + ["\u11DF", "\u11DF"], /* HANGUL JONGSEONG MIEUM-PANSIOS */ + ["\u11E0", "\u11E0"], /* HANGUL JONGSEONG MIEUM-CHIEUCH */ + ["\u11E1", "\u11E1"], /* HANGUL JONGSEONG MIEUM-HIEUH */ + ["\u11E2", "\u11E2"], /* HANGUL JONGSEONG KAPYEOUNMIEUM */ + ["\u11E3", "\u11E3"], /* HANGUL JONGSEONG PIEUP-RIEUL */ + ["\u11E4", "\u11E4"], /* HANGUL JONGSEONG PIEUP-PHIEUPH */ + ["\u11E5", "\u11E5"], /* HANGUL JONGSEONG PIEUP-HIEUH */ + ["\u11E6", "\u11E6"], /* HANGUL JONGSEONG KAPYEOUNPIEUP */ + ["\u11E7", "\u11E7"], /* HANGUL JONGSEONG SIOS-KIYEOK */ + ["\u11E8", "\u11E8"], /* HANGUL JONGSEONG SIOS-TIKEUT */ + ["\u11E9", "\u11E9"], /* HANGUL JONGSEONG SIOS-RIEUL */ + ["\u11EA", "\u11EA"], /* HANGUL JONGSEONG SIOS-PIEUP */ + ["\u11EB", "\u11EB"], /* HANGUL JONGSEONG PANSIOS */ + ["\u11EC", "\u11EC"], /* HANGUL JONGSEONG IEUNG-KIYEOK */ + ["\u11ED", "\u11ED"], /* HANGUL JONGSEONG IEUNG-SSANGKIYEOK */ + ["\u11EE", "\u11EE"], /* HANGUL JONGSEONG SSANGIEUNG */ + ["\u11EF", "\u11EF"], /* HANGUL JONGSEONG IEUNG-KHIEUKH */ + ["\u11F0", "\u11F0"], /* HANGUL JONGSEONG YESIEUNG */ + ["\u11F1", "\u11F1"], /* HANGUL JONGSEONG YESIEUNG-SIOS */ + ["\u11F2", "\u11F2"], /* HANGUL JONGSEONG YESIEUNG-PANSIOS */ + ["\u11F3", "\u11F3"], /* HANGUL JONGSEONG PHIEUPH-PIEUP */ + ["\u11F4", "\u11F4"], /* HANGUL JONGSEONG KAPYEOUNPHIEUPH */ + ["\u11F5", "\u11F5"], /* HANGUL JONGSEONG HIEUH-NIEUN */ + ["\u11F6", "\u11F6"], /* HANGUL JONGSEONG HIEUH-RIEUL */ + ["\u11F7", "\u11F7"], /* HANGUL JONGSEONG HIEUH-MIEUM */ + ["\u11F8", "\u11F8"], /* HANGUL JONGSEONG HIEUH-PIEUP */ + ["\u11F9", "\u11F9"], /* HANGUL JONGSEONG YEORINHIEUH */ + ["\u11FA", "\u11FA"], /* HANGUL JONGSEONG KIYEOK-NIEUN */ + ["\u11FB", "\u11FB"], /* HANGUL JONGSEONG KIYEOK-PIEUP */ + ["\u11FC", "\u11FC"], /* HANGUL JONGSEONG KIYEOK-CHIEUCH */ + ["\u11FD", "\u11FD"], /* HANGUL JONGSEONG KIYEOK-KHIEUKH */ + ["\u11FE", "\u11FE"], /* HANGUL JONGSEONG KIYEOK-HIEUH */ + ["\u11FF", "\u11FF"], /* HANGUL JONGSEONG SSANGNIEUN */ + ["\u1200", "\u1200"], /* ETHIOPIC SYLLABLE HA */ + ["\u1201", "\u1201"], /* ETHIOPIC SYLLABLE HU */ + ["\u1202", "\u1202"], /* ETHIOPIC SYLLABLE HI */ + ["\u1203", "\u1203"], /* ETHIOPIC SYLLABLE HAA */ + ["\u1204", "\u1204"], /* ETHIOPIC SYLLABLE HEE */ + ["\u1205", "\u1205"], /* ETHIOPIC SYLLABLE HE */ + ["\u1206", "\u1206"], /* ETHIOPIC SYLLABLE HO */ + ["\u1207", "\u1207"], /* ETHIOPIC SYLLABLE HOA */ + ["\u1208", "\u1208"], /* ETHIOPIC SYLLABLE LA */ + ["\u1209", "\u1209"], /* ETHIOPIC SYLLABLE LU */ + ["\u120A", "\u120A"], /* ETHIOPIC SYLLABLE LI */ + ["\u120B", "\u120B"], /* ETHIOPIC SYLLABLE LAA */ + ["\u120C", "\u120C"], /* ETHIOPIC SYLLABLE LEE */ + ["\u120D", "\u120D"], /* ETHIOPIC SYLLABLE LE */ + ["\u120E", "\u120E"], /* ETHIOPIC SYLLABLE LO */ + ["\u120F", "\u120F"], /* ETHIOPIC SYLLABLE LWA */ + ["\u1210", "\u1210"], /* ETHIOPIC SYLLABLE HHA */ + ["\u1211", "\u1211"], /* ETHIOPIC SYLLABLE HHU */ + ["\u1212", "\u1212"], /* ETHIOPIC SYLLABLE HHI */ + ["\u1213", "\u1213"], /* ETHIOPIC SYLLABLE HHAA */ + ["\u1214", "\u1214"], /* ETHIOPIC SYLLABLE HHEE */ + ["\u1215", "\u1215"], /* ETHIOPIC SYLLABLE HHE */ + ["\u1216", "\u1216"], /* ETHIOPIC SYLLABLE HHO */ + ["\u1217", "\u1217"], /* ETHIOPIC SYLLABLE HHWA */ + ["\u1218", "\u1218"], /* ETHIOPIC SYLLABLE MA */ + ["\u1219", "\u1219"], /* ETHIOPIC SYLLABLE MU */ + ["\u121A", "\u121A"], /* ETHIOPIC SYLLABLE MI */ + ["\u121B", "\u121B"], /* ETHIOPIC SYLLABLE MAA */ + ["\u121C", "\u121C"], /* ETHIOPIC SYLLABLE MEE */ + ["\u121D", "\u121D"], /* ETHIOPIC SYLLABLE ME */ + ["\u121E", "\u121E"], /* ETHIOPIC SYLLABLE MO */ + ["\u121F", "\u121F"], /* ETHIOPIC SYLLABLE MWA */ + ["\u1220", "\u1220"], /* ETHIOPIC SYLLABLE SZA */ + ["\u1221", "\u1221"], /* ETHIOPIC SYLLABLE SZU */ + ["\u1222", "\u1222"], /* ETHIOPIC SYLLABLE SZI */ + ["\u1223", "\u1223"], /* ETHIOPIC SYLLABLE SZAA */ + ["\u1224", "\u1224"], /* ETHIOPIC SYLLABLE SZEE */ + ["\u1225", "\u1225"], /* ETHIOPIC SYLLABLE SZE */ + ["\u1226", "\u1226"], /* ETHIOPIC SYLLABLE SZO */ + ["\u1227", "\u1227"], /* ETHIOPIC SYLLABLE SZWA */ + ["\u1228", "\u1228"], /* ETHIOPIC SYLLABLE RA */ + ["\u1229", "\u1229"], /* ETHIOPIC SYLLABLE RU */ + ["\u122A", "\u122A"], /* ETHIOPIC SYLLABLE RI */ + ["\u122B", "\u122B"], /* ETHIOPIC SYLLABLE RAA */ + ["\u122C", "\u122C"], /* ETHIOPIC SYLLABLE REE */ + ["\u122D", "\u122D"], /* ETHIOPIC SYLLABLE RE */ + ["\u122E", "\u122E"], /* ETHIOPIC SYLLABLE RO */ + ["\u122F", "\u122F"], /* ETHIOPIC SYLLABLE RWA */ + ["\u1230", "\u1230"], /* ETHIOPIC SYLLABLE SA */ + ["\u1231", "\u1231"], /* ETHIOPIC SYLLABLE SU */ + ["\u1232", "\u1232"], /* ETHIOPIC SYLLABLE SI */ + ["\u1233", "\u1233"], /* ETHIOPIC SYLLABLE SAA */ + ["\u1234", "\u1234"], /* ETHIOPIC SYLLABLE SEE */ + ["\u1235", "\u1235"], /* ETHIOPIC SYLLABLE SE */ + ["\u1236", "\u1236"], /* ETHIOPIC SYLLABLE SO */ + ["\u1237", "\u1237"], /* ETHIOPIC SYLLABLE SWA */ + ["\u1238", "\u1238"], /* ETHIOPIC SYLLABLE SHA */ + ["\u1239", "\u1239"], /* ETHIOPIC SYLLABLE SHU */ + ["\u123A", "\u123A"], /* ETHIOPIC SYLLABLE SHI */ + ["\u123B", "\u123B"], /* ETHIOPIC SYLLABLE SHAA */ + ["\u123C", "\u123C"], /* ETHIOPIC SYLLABLE SHEE */ + ["\u123D", "\u123D"], /* ETHIOPIC SYLLABLE SHE */ + ["\u123E", "\u123E"], /* ETHIOPIC SYLLABLE SHO */ + ["\u123F", "\u123F"], /* ETHIOPIC SYLLABLE SHWA */ + ["\u1240", "\u1240"], /* ETHIOPIC SYLLABLE QA */ + ["\u1241", "\u1241"], /* ETHIOPIC SYLLABLE QU */ + ["\u1242", "\u1242"], /* ETHIOPIC SYLLABLE QI */ + ["\u1243", "\u1243"], /* ETHIOPIC SYLLABLE QAA */ + ["\u1244", "\u1244"], /* ETHIOPIC SYLLABLE QEE */ + ["\u1245", "\u1245"], /* ETHIOPIC SYLLABLE QE */ + ["\u1246", "\u1246"], /* ETHIOPIC SYLLABLE QO */ + ["\u1247", "\u1247"], /* ETHIOPIC SYLLABLE QOA */ + ["\u1248", "\u1248"], /* ETHIOPIC SYLLABLE QWA */ + ["\u1249", "\u1249"], + ["\u124A", "\u124A"], /* ETHIOPIC SYLLABLE QWI */ + ["\u124B", "\u124B"], /* ETHIOPIC SYLLABLE QWAA */ + ["\u124C", "\u124C"], /* ETHIOPIC SYLLABLE QWEE */ + ["\u124D", "\u124D"], /* ETHIOPIC SYLLABLE QWE */ + ["\u124E", "\u124E"], + ["\u124F", "\u124F"], + ["\u1250", "\u1250"], /* ETHIOPIC SYLLABLE QHA */ + ["\u1251", "\u1251"], /* ETHIOPIC SYLLABLE QHU */ + ["\u1252", "\u1252"], /* ETHIOPIC SYLLABLE QHI */ + ["\u1253", "\u1253"], /* ETHIOPIC SYLLABLE QHAA */ + ["\u1254", "\u1254"], /* ETHIOPIC SYLLABLE QHEE */ + ["\u1255", "\u1255"], /* ETHIOPIC SYLLABLE QHE */ + ["\u1256", "\u1256"], /* ETHIOPIC SYLLABLE QHO */ + ["\u1257", "\u1257"], + ["\u1258", "\u1258"], /* ETHIOPIC SYLLABLE QHWA */ + ["\u1259", "\u1259"], + ["\u125A", "\u125A"], /* ETHIOPIC SYLLABLE QHWI */ + ["\u125B", "\u125B"], /* ETHIOPIC SYLLABLE QHWAA */ + ["\u125C", "\u125C"], /* ETHIOPIC SYLLABLE QHWEE */ + ["\u125D", "\u125D"], /* ETHIOPIC SYLLABLE QHWE */ + ["\u125E", "\u125E"], + ["\u125F", "\u125F"], + ["\u1260", "\u1260"], /* ETHIOPIC SYLLABLE BA */ + ["\u1261", "\u1261"], /* ETHIOPIC SYLLABLE BU */ + ["\u1262", "\u1262"], /* ETHIOPIC SYLLABLE BI */ + ["\u1263", "\u1263"], /* ETHIOPIC SYLLABLE BAA */ + ["\u1264", "\u1264"], /* ETHIOPIC SYLLABLE BEE */ + ["\u1265", "\u1265"], /* ETHIOPIC SYLLABLE BE */ + ["\u1266", "\u1266"], /* ETHIOPIC SYLLABLE BO */ + ["\u1267", "\u1267"], /* ETHIOPIC SYLLABLE BWA */ + ["\u1268", "\u1268"], /* ETHIOPIC SYLLABLE VA */ + ["\u1269", "\u1269"], /* ETHIOPIC SYLLABLE VU */ + ["\u126A", "\u126A"], /* ETHIOPIC SYLLABLE VI */ + ["\u126B", "\u126B"], /* ETHIOPIC SYLLABLE VAA */ + ["\u126C", "\u126C"], /* ETHIOPIC SYLLABLE VEE */ + ["\u126D", "\u126D"], /* ETHIOPIC SYLLABLE VE */ + ["\u126E", "\u126E"], /* ETHIOPIC SYLLABLE VO */ + ["\u126F", "\u126F"], /* ETHIOPIC SYLLABLE VWA */ + ["\u1270", "\u1270"], /* ETHIOPIC SYLLABLE TA */ + ["\u1271", "\u1271"], /* ETHIOPIC SYLLABLE TU */ + ["\u1272", "\u1272"], /* ETHIOPIC SYLLABLE TI */ + ["\u1273", "\u1273"], /* ETHIOPIC SYLLABLE TAA */ + ["\u1274", "\u1274"], /* ETHIOPIC SYLLABLE TEE */ + ["\u1275", "\u1275"], /* ETHIOPIC SYLLABLE TE */ + ["\u1276", "\u1276"], /* ETHIOPIC SYLLABLE TO */ + ["\u1277", "\u1277"], /* ETHIOPIC SYLLABLE TWA */ + ["\u1278", "\u1278"], /* ETHIOPIC SYLLABLE CA */ + ["\u1279", "\u1279"], /* ETHIOPIC SYLLABLE CU */ + ["\u127A", "\u127A"], /* ETHIOPIC SYLLABLE CI */ + ["\u127B", "\u127B"], /* ETHIOPIC SYLLABLE CAA */ + ["\u127C", "\u127C"], /* ETHIOPIC SYLLABLE CEE */ + ["\u127D", "\u127D"], /* ETHIOPIC SYLLABLE CE */ + ["\u127E", "\u127E"], /* ETHIOPIC SYLLABLE CO */ + ["\u127F", "\u127F"], /* ETHIOPIC SYLLABLE CWA */ + ["\u1280", "\u1280"], /* ETHIOPIC SYLLABLE XA */ + ["\u1281", "\u1281"], /* ETHIOPIC SYLLABLE XU */ + ["\u1282", "\u1282"], /* ETHIOPIC SYLLABLE XI */ + ["\u1283", "\u1283"], /* ETHIOPIC SYLLABLE XAA */ + ["\u1284", "\u1284"], /* ETHIOPIC SYLLABLE XEE */ + ["\u1285", "\u1285"], /* ETHIOPIC SYLLABLE XE */ + ["\u1286", "\u1286"], /* ETHIOPIC SYLLABLE XO */ + ["\u1287", "\u1287"], /* ETHIOPIC SYLLABLE XOA */ + ["\u1288", "\u1288"], /* ETHIOPIC SYLLABLE XWA */ + ["\u1289", "\u1289"], + ["\u128A", "\u128A"], /* ETHIOPIC SYLLABLE XWI */ + ["\u128B", "\u128B"], /* ETHIOPIC SYLLABLE XWAA */ + ["\u128C", "\u128C"], /* ETHIOPIC SYLLABLE XWEE */ + ["\u128D", "\u128D"], /* ETHIOPIC SYLLABLE XWE */ + ["\u128E", "\u128E"], + ["\u128F", "\u128F"], + ["\u1290", "\u1290"], /* ETHIOPIC SYLLABLE NA */ + ["\u1291", "\u1291"], /* ETHIOPIC SYLLABLE NU */ + ["\u1292", "\u1292"], /* ETHIOPIC SYLLABLE NI */ + ["\u1293", "\u1293"], /* ETHIOPIC SYLLABLE NAA */ + ["\u1294", "\u1294"], /* ETHIOPIC SYLLABLE NEE */ + ["\u1295", "\u1295"], /* ETHIOPIC SYLLABLE NE */ + ["\u1296", "\u1296"], /* ETHIOPIC SYLLABLE NO */ + ["\u1297", "\u1297"], /* ETHIOPIC SYLLABLE NWA */ + ["\u1298", "\u1298"], /* ETHIOPIC SYLLABLE NYA */ + ["\u1299", "\u1299"], /* ETHIOPIC SYLLABLE NYU */ + ["\u129A", "\u129A"], /* ETHIOPIC SYLLABLE NYI */ + ["\u129B", "\u129B"], /* ETHIOPIC SYLLABLE NYAA */ + ["\u129C", "\u129C"], /* ETHIOPIC SYLLABLE NYEE */ + ["\u129D", "\u129D"], /* ETHIOPIC SYLLABLE NYE */ + ["\u129E", "\u129E"], /* ETHIOPIC SYLLABLE NYO */ + ["\u129F", "\u129F"], /* ETHIOPIC SYLLABLE NYWA */ + ["\u12A0", "\u12A0"], /* ETHIOPIC SYLLABLE GLOTTAL A */ + ["\u12A1", "\u12A1"], /* ETHIOPIC SYLLABLE GLOTTAL U */ + ["\u12A2", "\u12A2"], /* ETHIOPIC SYLLABLE GLOTTAL I */ + ["\u12A3", "\u12A3"], /* ETHIOPIC SYLLABLE GLOTTAL AA */ + ["\u12A4", "\u12A4"], /* ETHIOPIC SYLLABLE GLOTTAL EE */ + ["\u12A5", "\u12A5"], /* ETHIOPIC SYLLABLE GLOTTAL E */ + ["\u12A6", "\u12A6"], /* ETHIOPIC SYLLABLE GLOTTAL O */ + ["\u12A7", "\u12A7"], /* ETHIOPIC SYLLABLE GLOTTAL WA */ + ["\u12A8", "\u12A8"], /* ETHIOPIC SYLLABLE KA */ + ["\u12A9", "\u12A9"], /* ETHIOPIC SYLLABLE KU */ + ["\u12AA", "\u12AA"], /* ETHIOPIC SYLLABLE KI */ + ["\u12AB", "\u12AB"], /* ETHIOPIC SYLLABLE KAA */ + ["\u12AC", "\u12AC"], /* ETHIOPIC SYLLABLE KEE */ + ["\u12AD", "\u12AD"], /* ETHIOPIC SYLLABLE KE */ + ["\u12AE", "\u12AE"], /* ETHIOPIC SYLLABLE KO */ + ["\u12AF", "\u12AF"], /* ETHIOPIC SYLLABLE KOA */ + ["\u12B0", "\u12B0"], /* ETHIOPIC SYLLABLE KWA */ + ["\u12B1", "\u12B1"], + ["\u12B2", "\u12B2"], /* ETHIOPIC SYLLABLE KWI */ + ["\u12B3", "\u12B3"], /* ETHIOPIC SYLLABLE KWAA */ + ["\u12B4", "\u12B4"], /* ETHIOPIC SYLLABLE KWEE */ + ["\u12B5", "\u12B5"], /* ETHIOPIC SYLLABLE KWE */ + ["\u12B6", "\u12B6"], + ["\u12B7", "\u12B7"], + ["\u12B8", "\u12B8"], /* ETHIOPIC SYLLABLE KXA */ + ["\u12B9", "\u12B9"], /* ETHIOPIC SYLLABLE KXU */ + ["\u12BA", "\u12BA"], /* ETHIOPIC SYLLABLE KXI */ + ["\u12BB", "\u12BB"], /* ETHIOPIC SYLLABLE KXAA */ + ["\u12BC", "\u12BC"], /* ETHIOPIC SYLLABLE KXEE */ + ["\u12BD", "\u12BD"], /* ETHIOPIC SYLLABLE KXE */ + ["\u12BE", "\u12BE"], /* ETHIOPIC SYLLABLE KXO */ + ["\u12BF", "\u12BF"], + ["\u12C0", "\u12C0"], /* ETHIOPIC SYLLABLE KXWA */ + ["\u12C1", "\u12C1"], + ["\u12C2", "\u12C2"], /* ETHIOPIC SYLLABLE KXWI */ + ["\u12C3", "\u12C3"], /* ETHIOPIC SYLLABLE KXWAA */ + ["\u12C4", "\u12C4"], /* ETHIOPIC SYLLABLE KXWEE */ + ["\u12C5", "\u12C5"], /* ETHIOPIC SYLLABLE KXWE */ + ["\u12C6", "\u12C6"], + ["\u12C7", "\u12C7"], + ["\u12C8", "\u12C8"], /* ETHIOPIC SYLLABLE WA */ + ["\u12C9", "\u12C9"], /* ETHIOPIC SYLLABLE WU */ + ["\u12CA", "\u12CA"], /* ETHIOPIC SYLLABLE WI */ + ["\u12CB", "\u12CB"], /* ETHIOPIC SYLLABLE WAA */ + ["\u12CC", "\u12CC"], /* ETHIOPIC SYLLABLE WEE */ + ["\u12CD", "\u12CD"], /* ETHIOPIC SYLLABLE WE */ + ["\u12CE", "\u12CE"], /* ETHIOPIC SYLLABLE WO */ + ["\u12CF", "\u12CF"], /* ETHIOPIC SYLLABLE WOA */ + ["\u12D0", "\u12D0"], /* ETHIOPIC SYLLABLE PHARYNGEAL A */ + ["\u12D1", "\u12D1"], /* ETHIOPIC SYLLABLE PHARYNGEAL U */ + ["\u12D2", "\u12D2"], /* ETHIOPIC SYLLABLE PHARYNGEAL I */ + ["\u12D3", "\u12D3"], /* ETHIOPIC SYLLABLE PHARYNGEAL AA */ + ["\u12D4", "\u12D4"], /* ETHIOPIC SYLLABLE PHARYNGEAL EE */ + ["\u12D5", "\u12D5"], /* ETHIOPIC SYLLABLE PHARYNGEAL E */ + ["\u12D6", "\u12D6"], /* ETHIOPIC SYLLABLE PHARYNGEAL O */ + ["\u12D7", "\u12D7"], + ["\u12D8", "\u12D8"], /* ETHIOPIC SYLLABLE ZA */ + ["\u12D9", "\u12D9"], /* ETHIOPIC SYLLABLE ZU */ + ["\u12DA", "\u12DA"], /* ETHIOPIC SYLLABLE ZI */ + ["\u12DB", "\u12DB"], /* ETHIOPIC SYLLABLE ZAA */ + ["\u12DC", "\u12DC"], /* ETHIOPIC SYLLABLE ZEE */ + ["\u12DD", "\u12DD"], /* ETHIOPIC SYLLABLE ZE */ + ["\u12DE", "\u12DE"], /* ETHIOPIC SYLLABLE ZO */ + ["\u12DF", "\u12DF"], /* ETHIOPIC SYLLABLE ZWA */ + ["\u12E0", "\u12E0"], /* ETHIOPIC SYLLABLE ZHA */ + ["\u12E1", "\u12E1"], /* ETHIOPIC SYLLABLE ZHU */ + ["\u12E2", "\u12E2"], /* ETHIOPIC SYLLABLE ZHI */ + ["\u12E3", "\u12E3"], /* ETHIOPIC SYLLABLE ZHAA */ + ["\u12E4", "\u12E4"], /* ETHIOPIC SYLLABLE ZHEE */ + ["\u12E5", "\u12E5"], /* ETHIOPIC SYLLABLE ZHE */ + ["\u12E6", "\u12E6"], /* ETHIOPIC SYLLABLE ZHO */ + ["\u12E7", "\u12E7"], /* ETHIOPIC SYLLABLE ZHWA */ + ["\u12E8", "\u12E8"], /* ETHIOPIC SYLLABLE YA */ + ["\u12E9", "\u12E9"], /* ETHIOPIC SYLLABLE YU */ + ["\u12EA", "\u12EA"], /* ETHIOPIC SYLLABLE YI */ + ["\u12EB", "\u12EB"], /* ETHIOPIC SYLLABLE YAA */ + ["\u12EC", "\u12EC"], /* ETHIOPIC SYLLABLE YEE */ + ["\u12ED", "\u12ED"], /* ETHIOPIC SYLLABLE YE */ + ["\u12EE", "\u12EE"], /* ETHIOPIC SYLLABLE YO */ + ["\u12EF", "\u12EF"], /* ETHIOPIC SYLLABLE YOA */ + ["\u12F0", "\u12F0"], /* ETHIOPIC SYLLABLE DA */ + ["\u12F1", "\u12F1"], /* ETHIOPIC SYLLABLE DU */ + ["\u12F2", "\u12F2"], /* ETHIOPIC SYLLABLE DI */ + ["\u12F3", "\u12F3"], /* ETHIOPIC SYLLABLE DAA */ + ["\u12F4", "\u12F4"], /* ETHIOPIC SYLLABLE DEE */ + ["\u12F5", "\u12F5"], /* ETHIOPIC SYLLABLE DE */ + ["\u12F6", "\u12F6"], /* ETHIOPIC SYLLABLE DO */ + ["\u12F7", "\u12F7"], /* ETHIOPIC SYLLABLE DWA */ + ["\u12F8", "\u12F8"], /* ETHIOPIC SYLLABLE DDA */ + ["\u12F9", "\u12F9"], /* ETHIOPIC SYLLABLE DDU */ + ["\u12FA", "\u12FA"], /* ETHIOPIC SYLLABLE DDI */ + ["\u12FB", "\u12FB"], /* ETHIOPIC SYLLABLE DDAA */ + ["\u12FC", "\u12FC"], /* ETHIOPIC SYLLABLE DDEE */ + ["\u12FD", "\u12FD"], /* ETHIOPIC SYLLABLE DDE */ + ["\u12FE", "\u12FE"], /* ETHIOPIC SYLLABLE DDO */ + ["\u12FF", "\u12FF"], /* ETHIOPIC SYLLABLE DDWA */ + ["\u1300", "\u1300"], /* ETHIOPIC SYLLABLE JA */ + ["\u1301", "\u1301"], /* ETHIOPIC SYLLABLE JU */ + ["\u1302", "\u1302"], /* ETHIOPIC SYLLABLE JI */ + ["\u1303", "\u1303"], /* ETHIOPIC SYLLABLE JAA */ + ["\u1304", "\u1304"], /* ETHIOPIC SYLLABLE JEE */ + ["\u1305", "\u1305"], /* ETHIOPIC SYLLABLE JE */ + ["\u1306", "\u1306"], /* ETHIOPIC SYLLABLE JO */ + ["\u1307", "\u1307"], /* ETHIOPIC SYLLABLE JWA */ + ["\u1308", "\u1308"], /* ETHIOPIC SYLLABLE GA */ + ["\u1309", "\u1309"], /* ETHIOPIC SYLLABLE GU */ + ["\u130A", "\u130A"], /* ETHIOPIC SYLLABLE GI */ + ["\u130B", "\u130B"], /* ETHIOPIC SYLLABLE GAA */ + ["\u130C", "\u130C"], /* ETHIOPIC SYLLABLE GEE */ + ["\u130D", "\u130D"], /* ETHIOPIC SYLLABLE GE */ + ["\u130E", "\u130E"], /* ETHIOPIC SYLLABLE GO */ + ["\u130F", "\u130F"], /* ETHIOPIC SYLLABLE GOA */ + ["\u1310", "\u1310"], /* ETHIOPIC SYLLABLE GWA */ + ["\u1311", "\u1311"], + ["\u1312", "\u1312"], /* ETHIOPIC SYLLABLE GWI */ + ["\u1313", "\u1313"], /* ETHIOPIC SYLLABLE GWAA */ + ["\u1314", "\u1314"], /* ETHIOPIC SYLLABLE GWEE */ + ["\u1315", "\u1315"], /* ETHIOPIC SYLLABLE GWE */ + ["\u1316", "\u1316"], + ["\u1317", "\u1317"], + ["\u1318", "\u1318"], /* ETHIOPIC SYLLABLE GGA */ + ["\u1319", "\u1319"], /* ETHIOPIC SYLLABLE GGU */ + ["\u131A", "\u131A"], /* ETHIOPIC SYLLABLE GGI */ + ["\u131B", "\u131B"], /* ETHIOPIC SYLLABLE GGAA */ + ["\u131C", "\u131C"], /* ETHIOPIC SYLLABLE GGEE */ + ["\u131D", "\u131D"], /* ETHIOPIC SYLLABLE GGE */ + ["\u131E", "\u131E"], /* ETHIOPIC SYLLABLE GGO */ + ["\u131F", "\u131F"], /* ETHIOPIC SYLLABLE GGWAA */ + ["\u1320", "\u1320"], /* ETHIOPIC SYLLABLE THA */ + ["\u1321", "\u1321"], /* ETHIOPIC SYLLABLE THU */ + ["\u1322", "\u1322"], /* ETHIOPIC SYLLABLE THI */ + ["\u1323", "\u1323"], /* ETHIOPIC SYLLABLE THAA */ + ["\u1324", "\u1324"], /* ETHIOPIC SYLLABLE THEE */ + ["\u1325", "\u1325"], /* ETHIOPIC SYLLABLE THE */ + ["\u1326", "\u1326"], /* ETHIOPIC SYLLABLE THO */ + ["\u1327", "\u1327"], /* ETHIOPIC SYLLABLE THWA */ + ["\u1328", "\u1328"], /* ETHIOPIC SYLLABLE CHA */ + ["\u1329", "\u1329"], /* ETHIOPIC SYLLABLE CHU */ + ["\u132A", "\u132A"], /* ETHIOPIC SYLLABLE CHI */ + ["\u132B", "\u132B"], /* ETHIOPIC SYLLABLE CHAA */ + ["\u132C", "\u132C"], /* ETHIOPIC SYLLABLE CHEE */ + ["\u132D", "\u132D"], /* ETHIOPIC SYLLABLE CHE */ + ["\u132E", "\u132E"], /* ETHIOPIC SYLLABLE CHO */ + ["\u132F", "\u132F"], /* ETHIOPIC SYLLABLE CHWA */ + ["\u1330", "\u1330"], /* ETHIOPIC SYLLABLE PHA */ + ["\u1331", "\u1331"], /* ETHIOPIC SYLLABLE PHU */ + ["\u1332", "\u1332"], /* ETHIOPIC SYLLABLE PHI */ + ["\u1333", "\u1333"], /* ETHIOPIC SYLLABLE PHAA */ + ["\u1334", "\u1334"], /* ETHIOPIC SYLLABLE PHEE */ + ["\u1335", "\u1335"], /* ETHIOPIC SYLLABLE PHE */ + ["\u1336", "\u1336"], /* ETHIOPIC SYLLABLE PHO */ + ["\u1337", "\u1337"], /* ETHIOPIC SYLLABLE PHWA */ + ["\u1338", "\u1338"], /* ETHIOPIC SYLLABLE TSA */ + ["\u1339", "\u1339"], /* ETHIOPIC SYLLABLE TSU */ + ["\u133A", "\u133A"], /* ETHIOPIC SYLLABLE TSI */ + ["\u133B", "\u133B"], /* ETHIOPIC SYLLABLE TSAA */ + ["\u133C", "\u133C"], /* ETHIOPIC SYLLABLE TSEE */ + ["\u133D", "\u133D"], /* ETHIOPIC SYLLABLE TSE */ + ["\u133E", "\u133E"], /* ETHIOPIC SYLLABLE TSO */ + ["\u133F", "\u133F"], /* ETHIOPIC SYLLABLE TSWA */ + ["\u1340", "\u1340"], /* ETHIOPIC SYLLABLE TZA */ + ["\u1341", "\u1341"], /* ETHIOPIC SYLLABLE TZU */ + ["\u1342", "\u1342"], /* ETHIOPIC SYLLABLE TZI */ + ["\u1343", "\u1343"], /* ETHIOPIC SYLLABLE TZAA */ + ["\u1344", "\u1344"], /* ETHIOPIC SYLLABLE TZEE */ + ["\u1345", "\u1345"], /* ETHIOPIC SYLLABLE TZE */ + ["\u1346", "\u1346"], /* ETHIOPIC SYLLABLE TZO */ + ["\u1347", "\u1347"], /* ETHIOPIC SYLLABLE TZOA */ + ["\u1348", "\u1348"], /* ETHIOPIC SYLLABLE FA */ + ["\u1349", "\u1349"], /* ETHIOPIC SYLLABLE FU */ + ["\u134A", "\u134A"], /* ETHIOPIC SYLLABLE FI */ + ["\u134B", "\u134B"], /* ETHIOPIC SYLLABLE FAA */ + ["\u134C", "\u134C"], /* ETHIOPIC SYLLABLE FEE */ + ["\u134D", "\u134D"], /* ETHIOPIC SYLLABLE FE */ + ["\u134E", "\u134E"], /* ETHIOPIC SYLLABLE FO */ + ["\u134F", "\u134F"], /* ETHIOPIC SYLLABLE FWA */ + ["\u1350", "\u1350"], /* ETHIOPIC SYLLABLE PA */ + ["\u1351", "\u1351"], /* ETHIOPIC SYLLABLE PU */ + ["\u1352", "\u1352"], /* ETHIOPIC SYLLABLE PI */ + ["\u1353", "\u1353"], /* ETHIOPIC SYLLABLE PAA */ + ["\u1354", "\u1354"], /* ETHIOPIC SYLLABLE PEE */ + ["\u1355", "\u1355"], /* ETHIOPIC SYLLABLE PE */ + ["\u1356", "\u1356"], /* ETHIOPIC SYLLABLE PO */ + ["\u1357", "\u1357"], /* ETHIOPIC SYLLABLE PWA */ + ["\u1358", "\u1358"], /* ETHIOPIC SYLLABLE RYA */ + ["\u1359", "\u1359"], /* ETHIOPIC SYLLABLE MYA */ + ["\u135A", "\u135A"], /* ETHIOPIC SYLLABLE FYA */ + ["\u135B", "\u135B"], + ["\u135C", "\u135C"], + ["\u135D", "\u135D"], /* ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK */ + ["\u135E", "\u135E"], /* ETHIOPIC COMBINING VOWEL LENGTH MARK */ + ["\u135F", "\u135F"], /* ETHIOPIC COMBINING GEMINATION MARK */ + ["\u1360", "\u1360"], /* ETHIOPIC SECTION MARK */ + ["\u1361", "\u1361"], /* ETHIOPIC WORDSPACE */ + ["\u1362", "\u1362"], /* ETHIOPIC FULL STOP */ + ["\u1363", "\u1363"], /* ETHIOPIC COMMA */ + ["\u1364", "\u1364"], /* ETHIOPIC SEMICOLON */ + ["\u1365", "\u1365"], /* ETHIOPIC COLON */ + ["\u1366", "\u1366"], /* ETHIOPIC PREFACE COLON */ + ["\u1367", "\u1367"], /* ETHIOPIC QUESTION MARK */ + ["\u1368", "\u1368"], /* ETHIOPIC PARAGRAPH SEPARATOR */ + ["\u1369", "\u1369"], /* ETHIOPIC DIGIT ONE */ + ["\u136A", "\u136A"], /* ETHIOPIC DIGIT TWO */ + ["\u136B", "\u136B"], /* ETHIOPIC DIGIT THREE */ + ["\u136C", "\u136C"], /* ETHIOPIC DIGIT FOUR */ + ["\u136D", "\u136D"], /* ETHIOPIC DIGIT FIVE */ + ["\u136E", "\u136E"], /* ETHIOPIC DIGIT SIX */ + ["\u136F", "\u136F"], /* ETHIOPIC DIGIT SEVEN */ + ["\u1370", "\u1370"], /* ETHIOPIC DIGIT EIGHT */ + ["\u1371", "\u1371"], /* ETHIOPIC DIGIT NINE */ + ["\u1372", "\u1372"], /* ETHIOPIC NUMBER TEN */ + ["\u1373", "\u1373"], /* ETHIOPIC NUMBER TWENTY */ + ["\u1374", "\u1374"], /* ETHIOPIC NUMBER THIRTY */ + ["\u1375", "\u1375"], /* ETHIOPIC NUMBER FORTY */ + ["\u1376", "\u1376"], /* ETHIOPIC NUMBER FIFTY */ + ["\u1377", "\u1377"], /* ETHIOPIC NUMBER SIXTY */ + ["\u1378", "\u1378"], /* ETHIOPIC NUMBER SEVENTY */ + ["\u1379", "\u1379"], /* ETHIOPIC NUMBER EIGHTY */ + ["\u137A", "\u137A"], /* ETHIOPIC NUMBER NINETY */ + ["\u137B", "\u137B"], /* ETHIOPIC NUMBER HUNDRED */ + ["\u137C", "\u137C"], /* ETHIOPIC NUMBER TEN THOUSAND */ + ["\u137D", "\u137D"], + ["\u137E", "\u137E"], + ["\u137F", "\u137F"], + ["\u1380", "\u1380"], /* ETHIOPIC SYLLABLE SEBATBEIT MWA */ + ["\u1381", "\u1381"], /* ETHIOPIC SYLLABLE MWI */ + ["\u1382", "\u1382"], /* ETHIOPIC SYLLABLE MWEE */ + ["\u1383", "\u1383"], /* ETHIOPIC SYLLABLE MWE */ + ["\u1384", "\u1384"], /* ETHIOPIC SYLLABLE SEBATBEIT BWA */ + ["\u1385", "\u1385"], /* ETHIOPIC SYLLABLE BWI */ + ["\u1386", "\u1386"], /* ETHIOPIC SYLLABLE BWEE */ + ["\u1387", "\u1387"], /* ETHIOPIC SYLLABLE BWE */ + ["\u1388", "\u1388"], /* ETHIOPIC SYLLABLE SEBATBEIT FWA */ + ["\u1389", "\u1389"], /* ETHIOPIC SYLLABLE FWI */ + ["\u138A", "\u138A"], /* ETHIOPIC SYLLABLE FWEE */ + ["\u138B", "\u138B"], /* ETHIOPIC SYLLABLE FWE */ + ["\u138C", "\u138C"], /* ETHIOPIC SYLLABLE SEBATBEIT PWA */ + ["\u138D", "\u138D"], /* ETHIOPIC SYLLABLE PWI */ + ["\u138E", "\u138E"], /* ETHIOPIC SYLLABLE PWEE */ + ["\u138F", "\u138F"], /* ETHIOPIC SYLLABLE PWE */ + ["\u1390", "\u1390"], /* ETHIOPIC TONAL MARK YIZET */ + ["\u1391", "\u1391"], /* ETHIOPIC TONAL MARK DERET */ + ["\u1392", "\u1392"], /* ETHIOPIC TONAL MARK RIKRIK */ + ["\u1393", "\u1393"], /* ETHIOPIC TONAL MARK SHORT RIKRIK */ + ["\u1394", "\u1394"], /* ETHIOPIC TONAL MARK DIFAT */ + ["\u1395", "\u1395"], /* ETHIOPIC TONAL MARK KENAT */ + ["\u1396", "\u1396"], /* ETHIOPIC TONAL MARK CHIRET */ + ["\u1397", "\u1397"], /* ETHIOPIC TONAL MARK HIDET */ + ["\u1398", "\u1398"], /* ETHIOPIC TONAL MARK DERET-HIDET */ + ["\u1399", "\u1399"], /* ETHIOPIC TONAL MARK KURT */ + ["\u139A", "\u139A"], + ["\u139B", "\u139B"], + ["\u139C", "\u139C"], + ["\u139D", "\u139D"], + ["\u139E", "\u139E"], + ["\u139F", "\u139F"], + ["\u13A0", "\uAB70"], /* CHEROKEE LETTER A */ + ["\u13A1", "\uAB71"], /* CHEROKEE LETTER E */ + ["\u13A2", "\uAB72"], /* CHEROKEE LETTER I */ + ["\u13A3", "\uAB73"], /* CHEROKEE LETTER O */ + ["\u13A4", "\uAB74"], /* CHEROKEE LETTER U */ + ["\u13A5", "\uAB75"], /* CHEROKEE LETTER V */ + ["\u13A6", "\uAB76"], /* CHEROKEE LETTER GA */ + ["\u13A7", "\uAB77"], /* CHEROKEE LETTER KA */ + ["\u13A8", "\uAB78"], /* CHEROKEE LETTER GE */ + ["\u13A9", "\uAB79"], /* CHEROKEE LETTER GI */ + ["\u13AA", "\uAB7A"], /* CHEROKEE LETTER GO */ + ["\u13AB", "\uAB7B"], /* CHEROKEE LETTER GU */ + ["\u13AC", "\uAB7C"], /* CHEROKEE LETTER GV */ + ["\u13AD", "\uAB7D"], /* CHEROKEE LETTER HA */ + ["\u13AE", "\uAB7E"], /* CHEROKEE LETTER HE */ + ["\u13AF", "\uAB7F"], /* CHEROKEE LETTER HI */ + ["\u13B0", "\uAB80"], /* CHEROKEE LETTER HO */ + ["\u13B1", "\uAB81"], /* CHEROKEE LETTER HU */ + ["\u13B2", "\uAB82"], /* CHEROKEE LETTER HV */ + ["\u13B3", "\uAB83"], /* CHEROKEE LETTER LA */ + ["\u13B4", "\uAB84"], /* CHEROKEE LETTER LE */ + ["\u13B5", "\uAB85"], /* CHEROKEE LETTER LI */ + ["\u13B6", "\uAB86"], /* CHEROKEE LETTER LO */ + ["\u13B7", "\uAB87"], /* CHEROKEE LETTER LU */ + ["\u13B8", "\uAB88"], /* CHEROKEE LETTER LV */ + ["\u13B9", "\uAB89"], /* CHEROKEE LETTER MA */ + ["\u13BA", "\uAB8A"], /* CHEROKEE LETTER ME */ + ["\u13BB", "\uAB8B"], /* CHEROKEE LETTER MI */ + ["\u13BC", "\uAB8C"], /* CHEROKEE LETTER MO */ + ["\u13BD", "\uAB8D"], /* CHEROKEE LETTER MU */ + ["\u13BE", "\uAB8E"], /* CHEROKEE LETTER NA */ + ["\u13BF", "\uAB8F"], /* CHEROKEE LETTER HNA */ + ["\u13C0", "\uAB90"], /* CHEROKEE LETTER NAH */ + ["\u13C1", "\uAB91"], /* CHEROKEE LETTER NE */ + ["\u13C2", "\uAB92"], /* CHEROKEE LETTER NI */ + ["\u13C3", "\uAB93"], /* CHEROKEE LETTER NO */ + ["\u13C4", "\uAB94"], /* CHEROKEE LETTER NU */ + ["\u13C5", "\uAB95"], /* CHEROKEE LETTER NV */ + ["\u13C6", "\uAB96"], /* CHEROKEE LETTER QUA */ + ["\u13C7", "\uAB97"], /* CHEROKEE LETTER QUE */ + ["\u13C8", "\uAB98"], /* CHEROKEE LETTER QUI */ + ["\u13C9", "\uAB99"], /* CHEROKEE LETTER QUO */ + ["\u13CA", "\uAB9A"], /* CHEROKEE LETTER QUU */ + ["\u13CB", "\uAB9B"], /* CHEROKEE LETTER QUV */ + ["\u13CC", "\uAB9C"], /* CHEROKEE LETTER SA */ + ["\u13CD", "\uAB9D"], /* CHEROKEE LETTER S */ + ["\u13CE", "\uAB9E"], /* CHEROKEE LETTER SE */ + ["\u13CF", "\uAB9F"], /* CHEROKEE LETTER SI */ + ["\u13D0", "\uABA0"], /* CHEROKEE LETTER SO */ + ["\u13D1", "\uABA1"], /* CHEROKEE LETTER SU */ + ["\u13D2", "\uABA2"], /* CHEROKEE LETTER SV */ + ["\u13D3", "\uABA3"], /* CHEROKEE LETTER DA */ + ["\u13D4", "\uABA4"], /* CHEROKEE LETTER TA */ + ["\u13D5", "\uABA5"], /* CHEROKEE LETTER DE */ + ["\u13D6", "\uABA6"], /* CHEROKEE LETTER TE */ + ["\u13D7", "\uABA7"], /* CHEROKEE LETTER DI */ + ["\u13D8", "\uABA8"], /* CHEROKEE LETTER TI */ + ["\u13D9", "\uABA9"], /* CHEROKEE LETTER DO */ + ["\u13DA", "\uABAA"], /* CHEROKEE LETTER DU */ + ["\u13DB", "\uABAB"], /* CHEROKEE LETTER DV */ + ["\u13DC", "\uABAC"], /* CHEROKEE LETTER DLA */ + ["\u13DD", "\uABAD"], /* CHEROKEE LETTER TLA */ + ["\u13DE", "\uABAE"], /* CHEROKEE LETTER TLE */ + ["\u13DF", "\uABAF"], /* CHEROKEE LETTER TLI */ + ["\u13E0", "\uABB0"], /* CHEROKEE LETTER TLO */ + ["\u13E1", "\uABB1"], /* CHEROKEE LETTER TLU */ + ["\u13E2", "\uABB2"], /* CHEROKEE LETTER TLV */ + ["\u13E3", "\uABB3"], /* CHEROKEE LETTER TSA */ + ["\u13E4", "\uABB4"], /* CHEROKEE LETTER TSE */ + ["\u13E5", "\uABB5"], /* CHEROKEE LETTER TSI */ + ["\u13E6", "\uABB6"], /* CHEROKEE LETTER TSO */ + ["\u13E7", "\uABB7"], /* CHEROKEE LETTER TSU */ + ["\u13E8", "\uABB8"], /* CHEROKEE LETTER TSV */ + ["\u13E9", "\uABB9"], /* CHEROKEE LETTER WA */ + ["\u13EA", "\uABBA"], /* CHEROKEE LETTER WE */ + ["\u13EB", "\uABBB"], /* CHEROKEE LETTER WI */ + ["\u13EC", "\uABBC"], /* CHEROKEE LETTER WO */ + ["\u13ED", "\uABBD"], /* CHEROKEE LETTER WU */ + ["\u13EE", "\uABBE"], /* CHEROKEE LETTER WV */ + ["\u13EF", "\uABBF"], /* CHEROKEE LETTER YA */ + ["\u13F0", "\u13F8"], /* CHEROKEE LETTER YE */ + ["\u13F1", "\u13F9"], /* CHEROKEE LETTER YI */ + ["\u13F2", "\u13FA"], /* CHEROKEE LETTER YO */ + ["\u13F3", "\u13FB"], /* CHEROKEE LETTER YU */ + ["\u13F4", "\u13FC"], /* CHEROKEE LETTER YV */ + ["\u13F5", "\u13FD"], /* CHEROKEE LETTER MV */ + ["\u13F6", "\u13F6"], + ["\u13F7", "\u13F7"], + ["\u13F0", "\u13F8"], /* CHEROKEE SMALL LETTER YE */ + ["\u13F1", "\u13F9"], /* CHEROKEE SMALL LETTER YI */ + ["\u13F2", "\u13FA"], /* CHEROKEE SMALL LETTER YO */ + ["\u13F3", "\u13FB"], /* CHEROKEE SMALL LETTER YU */ + ["\u13F4", "\u13FC"], /* CHEROKEE SMALL LETTER YV */ + ["\u13F5", "\u13FD"], /* CHEROKEE SMALL LETTER MV */ + ["\u13FE", "\u13FE"], + ["\u13FF", "\u13FF"], + ["\u1400", "\u1400"], /* CANADIAN SYLLABICS HYPHEN */ + ["\u1401", "\u1401"], /* CANADIAN SYLLABICS E */ + ["\u1402", "\u1402"], /* CANADIAN SYLLABICS AAI */ + ["\u1403", "\u1403"], /* CANADIAN SYLLABICS I */ + ["\u1404", "\u1404"], /* CANADIAN SYLLABICS II */ + ["\u1405", "\u1405"], /* CANADIAN SYLLABICS O */ + ["\u1406", "\u1406"], /* CANADIAN SYLLABICS OO */ + ["\u1407", "\u1407"], /* CANADIAN SYLLABICS Y-CREE OO */ + ["\u1408", "\u1408"], /* CANADIAN SYLLABICS CARRIER EE */ + ["\u1409", "\u1409"], /* CANADIAN SYLLABICS CARRIER I */ + ["\u140A", "\u140A"], /* CANADIAN SYLLABICS A */ + ["\u140B", "\u140B"], /* CANADIAN SYLLABICS AA */ + ["\u140C", "\u140C"], /* CANADIAN SYLLABICS WE */ + ["\u140D", "\u140D"], /* CANADIAN SYLLABICS WEST-CREE WE */ + ["\u140E", "\u140E"], /* CANADIAN SYLLABICS WI */ + ["\u140F", "\u140F"], /* CANADIAN SYLLABICS WEST-CREE WI */ + ["\u1410", "\u1410"], /* CANADIAN SYLLABICS WII */ + ["\u1411", "\u1411"], /* CANADIAN SYLLABICS WEST-CREE WII */ + ["\u1412", "\u1412"], /* CANADIAN SYLLABICS WO */ + ["\u1413", "\u1413"], /* CANADIAN SYLLABICS WEST-CREE WO */ + ["\u1414", "\u1414"], /* CANADIAN SYLLABICS WOO */ + ["\u1415", "\u1415"], /* CANADIAN SYLLABICS WEST-CREE WOO */ + ["\u1416", "\u1416"], /* CANADIAN SYLLABICS NASKAPI WOO */ + ["\u1417", "\u1417"], /* CANADIAN SYLLABICS WA */ + ["\u1418", "\u1418"], /* CANADIAN SYLLABICS WEST-CREE WA */ + ["\u1419", "\u1419"], /* CANADIAN SYLLABICS WAA */ + ["\u141A", "\u141A"], /* CANADIAN SYLLABICS WEST-CREE WAA */ + ["\u141B", "\u141B"], /* CANADIAN SYLLABICS NASKAPI WAA */ + ["\u141C", "\u141C"], /* CANADIAN SYLLABICS AI */ + ["\u141D", "\u141D"], /* CANADIAN SYLLABICS Y-CREE W */ + ["\u141E", "\u141E"], /* CANADIAN SYLLABICS GLOTTAL STOP */ + ["\u141F", "\u141F"], /* CANADIAN SYLLABICS FINAL ACUTE */ + ["\u1420", "\u1420"], /* CANADIAN SYLLABICS FINAL GRAVE */ + ["\u1421", "\u1421"], /* CANADIAN SYLLABICS FINAL BOTTOM HALF RING */ + ["\u1422", "\u1422"], /* CANADIAN SYLLABICS FINAL TOP HALF RING */ + ["\u1423", "\u1423"], /* CANADIAN SYLLABICS FINAL RIGHT HALF RING */ + ["\u1424", "\u1424"], /* CANADIAN SYLLABICS FINAL RING */ + ["\u1425", "\u1425"], /* CANADIAN SYLLABICS FINAL DOUBLE ACUTE */ + ["\u1426", "\u1426"], /* CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES */ + ["\u1427", "\u1427"], /* CANADIAN SYLLABICS FINAL MIDDLE DOT */ + ["\u1428", "\u1428"], /* CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE */ + ["\u1429", "\u1429"], /* CANADIAN SYLLABICS FINAL PLUS */ + ["\u142A", "\u142A"], /* CANADIAN SYLLABICS FINAL DOWN TACK */ + ["\u142B", "\u142B"], /* CANADIAN SYLLABICS EN */ + ["\u142C", "\u142C"], /* CANADIAN SYLLABICS IN */ + ["\u142D", "\u142D"], /* CANADIAN SYLLABICS ON */ + ["\u142E", "\u142E"], /* CANADIAN SYLLABICS AN */ + ["\u142F", "\u142F"], /* CANADIAN SYLLABICS PE */ + ["\u1430", "\u1430"], /* CANADIAN SYLLABICS PAAI */ + ["\u1431", "\u1431"], /* CANADIAN SYLLABICS PI */ + ["\u1432", "\u1432"], /* CANADIAN SYLLABICS PII */ + ["\u1433", "\u1433"], /* CANADIAN SYLLABICS PO */ + ["\u1434", "\u1434"], /* CANADIAN SYLLABICS POO */ + ["\u1435", "\u1435"], /* CANADIAN SYLLABICS Y-CREE POO */ + ["\u1436", "\u1436"], /* CANADIAN SYLLABICS CARRIER HEE */ + ["\u1437", "\u1437"], /* CANADIAN SYLLABICS CARRIER HI */ + ["\u1438", "\u1438"], /* CANADIAN SYLLABICS PA */ + ["\u1439", "\u1439"], /* CANADIAN SYLLABICS PAA */ + ["\u143A", "\u143A"], /* CANADIAN SYLLABICS PWE */ + ["\u143B", "\u143B"], /* CANADIAN SYLLABICS WEST-CREE PWE */ + ["\u143C", "\u143C"], /* CANADIAN SYLLABICS PWI */ + ["\u143D", "\u143D"], /* CANADIAN SYLLABICS WEST-CREE PWI */ + ["\u143E", "\u143E"], /* CANADIAN SYLLABICS PWII */ + ["\u143F", "\u143F"], /* CANADIAN SYLLABICS WEST-CREE PWII */ + ["\u1440", "\u1440"], /* CANADIAN SYLLABICS PWO */ + ["\u1441", "\u1441"], /* CANADIAN SYLLABICS WEST-CREE PWO */ + ["\u1442", "\u1442"], /* CANADIAN SYLLABICS PWOO */ + ["\u1443", "\u1443"], /* CANADIAN SYLLABICS WEST-CREE PWOO */ + ["\u1444", "\u1444"], /* CANADIAN SYLLABICS PWA */ + ["\u1445", "\u1445"], /* CANADIAN SYLLABICS WEST-CREE PWA */ + ["\u1446", "\u1446"], /* CANADIAN SYLLABICS PWAA */ + ["\u1447", "\u1447"], /* CANADIAN SYLLABICS WEST-CREE PWAA */ + ["\u1448", "\u1448"], /* CANADIAN SYLLABICS Y-CREE PWAA */ + ["\u1449", "\u1449"], /* CANADIAN SYLLABICS P */ + ["\u144A", "\u144A"], /* CANADIAN SYLLABICS WEST-CREE P */ + ["\u144B", "\u144B"], /* CANADIAN SYLLABICS CARRIER H */ + ["\u144C", "\u144C"], /* CANADIAN SYLLABICS TE */ + ["\u144D", "\u144D"], /* CANADIAN SYLLABICS TAAI */ + ["\u144E", "\u144E"], /* CANADIAN SYLLABICS TI */ + ["\u144F", "\u144F"], /* CANADIAN SYLLABICS TII */ + ["\u1450", "\u1450"], /* CANADIAN SYLLABICS TO */ + ["\u1451", "\u1451"], /* CANADIAN SYLLABICS TOO */ + ["\u1452", "\u1452"], /* CANADIAN SYLLABICS Y-CREE TOO */ + ["\u1453", "\u1453"], /* CANADIAN SYLLABICS CARRIER DEE */ + ["\u1454", "\u1454"], /* CANADIAN SYLLABICS CARRIER DI */ + ["\u1455", "\u1455"], /* CANADIAN SYLLABICS TA */ + ["\u1456", "\u1456"], /* CANADIAN SYLLABICS TAA */ + ["\u1457", "\u1457"], /* CANADIAN SYLLABICS TWE */ + ["\u1458", "\u1458"], /* CANADIAN SYLLABICS WEST-CREE TWE */ + ["\u1459", "\u1459"], /* CANADIAN SYLLABICS TWI */ + ["\u145A", "\u145A"], /* CANADIAN SYLLABICS WEST-CREE TWI */ + ["\u145B", "\u145B"], /* CANADIAN SYLLABICS TWII */ + ["\u145C", "\u145C"], /* CANADIAN SYLLABICS WEST-CREE TWII */ + ["\u145D", "\u145D"], /* CANADIAN SYLLABICS TWO */ + ["\u145E", "\u145E"], /* CANADIAN SYLLABICS WEST-CREE TWO */ + ["\u145F", "\u145F"], /* CANADIAN SYLLABICS TWOO */ + ["\u1460", "\u1460"], /* CANADIAN SYLLABICS WEST-CREE TWOO */ + ["\u1461", "\u1461"], /* CANADIAN SYLLABICS TWA */ + ["\u1462", "\u1462"], /* CANADIAN SYLLABICS WEST-CREE TWA */ + ["\u1463", "\u1463"], /* CANADIAN SYLLABICS TWAA */ + ["\u1464", "\u1464"], /* CANADIAN SYLLABICS WEST-CREE TWAA */ + ["\u1465", "\u1465"], /* CANADIAN SYLLABICS NASKAPI TWAA */ + ["\u1466", "\u1466"], /* CANADIAN SYLLABICS T */ + ["\u1467", "\u1467"], /* CANADIAN SYLLABICS TTE */ + ["\u1468", "\u1468"], /* CANADIAN SYLLABICS TTI */ + ["\u1469", "\u1469"], /* CANADIAN SYLLABICS TTO */ + ["\u146A", "\u146A"], /* CANADIAN SYLLABICS TTA */ + ["\u146B", "\u146B"], /* CANADIAN SYLLABICS KE */ + ["\u146C", "\u146C"], /* CANADIAN SYLLABICS KAAI */ + ["\u146D", "\u146D"], /* CANADIAN SYLLABICS KI */ + ["\u146E", "\u146E"], /* CANADIAN SYLLABICS KII */ + ["\u146F", "\u146F"], /* CANADIAN SYLLABICS KO */ + ["\u1470", "\u1470"], /* CANADIAN SYLLABICS KOO */ + ["\u1471", "\u1471"], /* CANADIAN SYLLABICS Y-CREE KOO */ + ["\u1472", "\u1472"], /* CANADIAN SYLLABICS KA */ + ["\u1473", "\u1473"], /* CANADIAN SYLLABICS KAA */ + ["\u1474", "\u1474"], /* CANADIAN SYLLABICS KWE */ + ["\u1475", "\u1475"], /* CANADIAN SYLLABICS WEST-CREE KWE */ + ["\u1476", "\u1476"], /* CANADIAN SYLLABICS KWI */ + ["\u1477", "\u1477"], /* CANADIAN SYLLABICS WEST-CREE KWI */ + ["\u1478", "\u1478"], /* CANADIAN SYLLABICS KWII */ + ["\u1479", "\u1479"], /* CANADIAN SYLLABICS WEST-CREE KWII */ + ["\u147A", "\u147A"], /* CANADIAN SYLLABICS KWO */ + ["\u147B", "\u147B"], /* CANADIAN SYLLABICS WEST-CREE KWO */ + ["\u147C", "\u147C"], /* CANADIAN SYLLABICS KWOO */ + ["\u147D", "\u147D"], /* CANADIAN SYLLABICS WEST-CREE KWOO */ + ["\u147E", "\u147E"], /* CANADIAN SYLLABICS KWA */ + ["\u147F", "\u147F"], /* CANADIAN SYLLABICS WEST-CREE KWA */ + ["\u1480", "\u1480"], /* CANADIAN SYLLABICS KWAA */ + ["\u1481", "\u1481"], /* CANADIAN SYLLABICS WEST-CREE KWAA */ + ["\u1482", "\u1482"], /* CANADIAN SYLLABICS NASKAPI KWAA */ + ["\u1483", "\u1483"], /* CANADIAN SYLLABICS K */ + ["\u1484", "\u1484"], /* CANADIAN SYLLABICS KW */ + ["\u1485", "\u1485"], /* CANADIAN SYLLABICS SOUTH-SLAVEY KEH */ + ["\u1486", "\u1486"], /* CANADIAN SYLLABICS SOUTH-SLAVEY KIH */ + ["\u1487", "\u1487"], /* CANADIAN SYLLABICS SOUTH-SLAVEY KOH */ + ["\u1488", "\u1488"], /* CANADIAN SYLLABICS SOUTH-SLAVEY KAH */ + ["\u1489", "\u1489"], /* CANADIAN SYLLABICS CE */ + ["\u148A", "\u148A"], /* CANADIAN SYLLABICS CAAI */ + ["\u148B", "\u148B"], /* CANADIAN SYLLABICS CI */ + ["\u148C", "\u148C"], /* CANADIAN SYLLABICS CII */ + ["\u148D", "\u148D"], /* CANADIAN SYLLABICS CO */ + ["\u148E", "\u148E"], /* CANADIAN SYLLABICS COO */ + ["\u148F", "\u148F"], /* CANADIAN SYLLABICS Y-CREE COO */ + ["\u1490", "\u1490"], /* CANADIAN SYLLABICS CA */ + ["\u1491", "\u1491"], /* CANADIAN SYLLABICS CAA */ + ["\u1492", "\u1492"], /* CANADIAN SYLLABICS CWE */ + ["\u1493", "\u1493"], /* CANADIAN SYLLABICS WEST-CREE CWE */ + ["\u1494", "\u1494"], /* CANADIAN SYLLABICS CWI */ + ["\u1495", "\u1495"], /* CANADIAN SYLLABICS WEST-CREE CWI */ + ["\u1496", "\u1496"], /* CANADIAN SYLLABICS CWII */ + ["\u1497", "\u1497"], /* CANADIAN SYLLABICS WEST-CREE CWII */ + ["\u1498", "\u1498"], /* CANADIAN SYLLABICS CWO */ + ["\u1499", "\u1499"], /* CANADIAN SYLLABICS WEST-CREE CWO */ + ["\u149A", "\u149A"], /* CANADIAN SYLLABICS CWOO */ + ["\u149B", "\u149B"], /* CANADIAN SYLLABICS WEST-CREE CWOO */ + ["\u149C", "\u149C"], /* CANADIAN SYLLABICS CWA */ + ["\u149D", "\u149D"], /* CANADIAN SYLLABICS WEST-CREE CWA */ + ["\u149E", "\u149E"], /* CANADIAN SYLLABICS CWAA */ + ["\u149F", "\u149F"], /* CANADIAN SYLLABICS WEST-CREE CWAA */ + ["\u14A0", "\u14A0"], /* CANADIAN SYLLABICS NASKAPI CWAA */ + ["\u14A1", "\u14A1"], /* CANADIAN SYLLABICS C */ + ["\u14A2", "\u14A2"], /* CANADIAN SYLLABICS SAYISI TH */ + ["\u14A3", "\u14A3"], /* CANADIAN SYLLABICS ME */ + ["\u14A4", "\u14A4"], /* CANADIAN SYLLABICS MAAI */ + ["\u14A5", "\u14A5"], /* CANADIAN SYLLABICS MI */ + ["\u14A6", "\u14A6"], /* CANADIAN SYLLABICS MII */ + ["\u14A7", "\u14A7"], /* CANADIAN SYLLABICS MO */ + ["\u14A8", "\u14A8"], /* CANADIAN SYLLABICS MOO */ + ["\u14A9", "\u14A9"], /* CANADIAN SYLLABICS Y-CREE MOO */ + ["\u14AA", "\u14AA"], /* CANADIAN SYLLABICS MA */ + ["\u14AB", "\u14AB"], /* CANADIAN SYLLABICS MAA */ + ["\u14AC", "\u14AC"], /* CANADIAN SYLLABICS MWE */ + ["\u14AD", "\u14AD"], /* CANADIAN SYLLABICS WEST-CREE MWE */ + ["\u14AE", "\u14AE"], /* CANADIAN SYLLABICS MWI */ + ["\u14AF", "\u14AF"], /* CANADIAN SYLLABICS WEST-CREE MWI */ + ["\u14B0", "\u14B0"], /* CANADIAN SYLLABICS MWII */ + ["\u14B1", "\u14B1"], /* CANADIAN SYLLABICS WEST-CREE MWII */ + ["\u14B2", "\u14B2"], /* CANADIAN SYLLABICS MWO */ + ["\u14B3", "\u14B3"], /* CANADIAN SYLLABICS WEST-CREE MWO */ + ["\u14B4", "\u14B4"], /* CANADIAN SYLLABICS MWOO */ + ["\u14B5", "\u14B5"], /* CANADIAN SYLLABICS WEST-CREE MWOO */ + ["\u14B6", "\u14B6"], /* CANADIAN SYLLABICS MWA */ + ["\u14B7", "\u14B7"], /* CANADIAN SYLLABICS WEST-CREE MWA */ + ["\u14B8", "\u14B8"], /* CANADIAN SYLLABICS MWAA */ + ["\u14B9", "\u14B9"], /* CANADIAN SYLLABICS WEST-CREE MWAA */ + ["\u14BA", "\u14BA"], /* CANADIAN SYLLABICS NASKAPI MWAA */ + ["\u14BB", "\u14BB"], /* CANADIAN SYLLABICS M */ + ["\u14BC", "\u14BC"], /* CANADIAN SYLLABICS WEST-CREE M */ + ["\u14BD", "\u14BD"], /* CANADIAN SYLLABICS MH */ + ["\u14BE", "\u14BE"], /* CANADIAN SYLLABICS ATHAPASCAN M */ + ["\u14BF", "\u14BF"], /* CANADIAN SYLLABICS SAYISI M */ + ["\u14C0", "\u14C0"], /* CANADIAN SYLLABICS NE */ + ["\u14C1", "\u14C1"], /* CANADIAN SYLLABICS NAAI */ + ["\u14C2", "\u14C2"], /* CANADIAN SYLLABICS NI */ + ["\u14C3", "\u14C3"], /* CANADIAN SYLLABICS NII */ + ["\u14C4", "\u14C4"], /* CANADIAN SYLLABICS NO */ + ["\u14C5", "\u14C5"], /* CANADIAN SYLLABICS NOO */ + ["\u14C6", "\u14C6"], /* CANADIAN SYLLABICS Y-CREE NOO */ + ["\u14C7", "\u14C7"], /* CANADIAN SYLLABICS NA */ + ["\u14C8", "\u14C8"], /* CANADIAN SYLLABICS NAA */ + ["\u14C9", "\u14C9"], /* CANADIAN SYLLABICS NWE */ + ["\u14CA", "\u14CA"], /* CANADIAN SYLLABICS WEST-CREE NWE */ + ["\u14CB", "\u14CB"], /* CANADIAN SYLLABICS NWA */ + ["\u14CC", "\u14CC"], /* CANADIAN SYLLABICS WEST-CREE NWA */ + ["\u14CD", "\u14CD"], /* CANADIAN SYLLABICS NWAA */ + ["\u14CE", "\u14CE"], /* CANADIAN SYLLABICS WEST-CREE NWAA */ + ["\u14CF", "\u14CF"], /* CANADIAN SYLLABICS NASKAPI NWAA */ + ["\u14D0", "\u14D0"], /* CANADIAN SYLLABICS N */ + ["\u14D1", "\u14D1"], /* CANADIAN SYLLABICS CARRIER NG */ + ["\u14D2", "\u14D2"], /* CANADIAN SYLLABICS NH */ + ["\u14D3", "\u14D3"], /* CANADIAN SYLLABICS LE */ + ["\u14D4", "\u14D4"], /* CANADIAN SYLLABICS LAAI */ + ["\u14D5", "\u14D5"], /* CANADIAN SYLLABICS LI */ + ["\u14D6", "\u14D6"], /* CANADIAN SYLLABICS LII */ + ["\u14D7", "\u14D7"], /* CANADIAN SYLLABICS LO */ + ["\u14D8", "\u14D8"], /* CANADIAN SYLLABICS LOO */ + ["\u14D9", "\u14D9"], /* CANADIAN SYLLABICS Y-CREE LOO */ + ["\u14DA", "\u14DA"], /* CANADIAN SYLLABICS LA */ + ["\u14DB", "\u14DB"], /* CANADIAN SYLLABICS LAA */ + ["\u14DC", "\u14DC"], /* CANADIAN SYLLABICS LWE */ + ["\u14DD", "\u14DD"], /* CANADIAN SYLLABICS WEST-CREE LWE */ + ["\u14DE", "\u14DE"], /* CANADIAN SYLLABICS LWI */ + ["\u14DF", "\u14DF"], /* CANADIAN SYLLABICS WEST-CREE LWI */ + ["\u14E0", "\u14E0"], /* CANADIAN SYLLABICS LWII */ + ["\u14E1", "\u14E1"], /* CANADIAN SYLLABICS WEST-CREE LWII */ + ["\u14E2", "\u14E2"], /* CANADIAN SYLLABICS LWO */ + ["\u14E3", "\u14E3"], /* CANADIAN SYLLABICS WEST-CREE LWO */ + ["\u14E4", "\u14E4"], /* CANADIAN SYLLABICS LWOO */ + ["\u14E5", "\u14E5"], /* CANADIAN SYLLABICS WEST-CREE LWOO */ + ["\u14E6", "\u14E6"], /* CANADIAN SYLLABICS LWA */ + ["\u14E7", "\u14E7"], /* CANADIAN SYLLABICS WEST-CREE LWA */ + ["\u14E8", "\u14E8"], /* CANADIAN SYLLABICS LWAA */ + ["\u14E9", "\u14E9"], /* CANADIAN SYLLABICS WEST-CREE LWAA */ + ["\u14EA", "\u14EA"], /* CANADIAN SYLLABICS L */ + ["\u14EB", "\u14EB"], /* CANADIAN SYLLABICS WEST-CREE L */ + ["\u14EC", "\u14EC"], /* CANADIAN SYLLABICS MEDIAL L */ + ["\u14ED", "\u14ED"], /* CANADIAN SYLLABICS SE */ + ["\u14EE", "\u14EE"], /* CANADIAN SYLLABICS SAAI */ + ["\u14EF", "\u14EF"], /* CANADIAN SYLLABICS SI */ + ["\u14F0", "\u14F0"], /* CANADIAN SYLLABICS SII */ + ["\u14F1", "\u14F1"], /* CANADIAN SYLLABICS SO */ + ["\u14F2", "\u14F2"], /* CANADIAN SYLLABICS SOO */ + ["\u14F3", "\u14F3"], /* CANADIAN SYLLABICS Y-CREE SOO */ + ["\u14F4", "\u14F4"], /* CANADIAN SYLLABICS SA */ + ["\u14F5", "\u14F5"], /* CANADIAN SYLLABICS SAA */ + ["\u14F6", "\u14F6"], /* CANADIAN SYLLABICS SWE */ + ["\u14F7", "\u14F7"], /* CANADIAN SYLLABICS WEST-CREE SWE */ + ["\u14F8", "\u14F8"], /* CANADIAN SYLLABICS SWI */ + ["\u14F9", "\u14F9"], /* CANADIAN SYLLABICS WEST-CREE SWI */ + ["\u14FA", "\u14FA"], /* CANADIAN SYLLABICS SWII */ + ["\u14FB", "\u14FB"], /* CANADIAN SYLLABICS WEST-CREE SWII */ + ["\u14FC", "\u14FC"], /* CANADIAN SYLLABICS SWO */ + ["\u14FD", "\u14FD"], /* CANADIAN SYLLABICS WEST-CREE SWO */ + ["\u14FE", "\u14FE"], /* CANADIAN SYLLABICS SWOO */ + ["\u14FF", "\u14FF"], /* CANADIAN SYLLABICS WEST-CREE SWOO */ + ["\u1500", "\u1500"], /* CANADIAN SYLLABICS SWA */ + ["\u1501", "\u1501"], /* CANADIAN SYLLABICS WEST-CREE SWA */ + ["\u1502", "\u1502"], /* CANADIAN SYLLABICS SWAA */ + ["\u1503", "\u1503"], /* CANADIAN SYLLABICS WEST-CREE SWAA */ + ["\u1504", "\u1504"], /* CANADIAN SYLLABICS NASKAPI SWAA */ + ["\u1505", "\u1505"], /* CANADIAN SYLLABICS S */ + ["\u1506", "\u1506"], /* CANADIAN SYLLABICS ATHAPASCAN S */ + ["\u1507", "\u1507"], /* CANADIAN SYLLABICS SW */ + ["\u1508", "\u1508"], /* CANADIAN SYLLABICS BLACKFOOT S */ + ["\u1509", "\u1509"], /* CANADIAN SYLLABICS MOOSE-CREE SK */ + ["\u150A", "\u150A"], /* CANADIAN SYLLABICS NASKAPI SKW */ + ["\u150B", "\u150B"], /* CANADIAN SYLLABICS NASKAPI S-W */ + ["\u150C", "\u150C"], /* CANADIAN SYLLABICS NASKAPI SPWA */ + ["\u150D", "\u150D"], /* CANADIAN SYLLABICS NASKAPI STWA */ + ["\u150E", "\u150E"], /* CANADIAN SYLLABICS NASKAPI SKWA */ + ["\u150F", "\u150F"], /* CANADIAN SYLLABICS NASKAPI SCWA */ + ["\u1510", "\u1510"], /* CANADIAN SYLLABICS SHE */ + ["\u1511", "\u1511"], /* CANADIAN SYLLABICS SHI */ + ["\u1512", "\u1512"], /* CANADIAN SYLLABICS SHII */ + ["\u1513", "\u1513"], /* CANADIAN SYLLABICS SHO */ + ["\u1514", "\u1514"], /* CANADIAN SYLLABICS SHOO */ + ["\u1515", "\u1515"], /* CANADIAN SYLLABICS SHA */ + ["\u1516", "\u1516"], /* CANADIAN SYLLABICS SHAA */ + ["\u1517", "\u1517"], /* CANADIAN SYLLABICS SHWE */ + ["\u1518", "\u1518"], /* CANADIAN SYLLABICS WEST-CREE SHWE */ + ["\u1519", "\u1519"], /* CANADIAN SYLLABICS SHWI */ + ["\u151A", "\u151A"], /* CANADIAN SYLLABICS WEST-CREE SHWI */ + ["\u151B", "\u151B"], /* CANADIAN SYLLABICS SHWII */ + ["\u151C", "\u151C"], /* CANADIAN SYLLABICS WEST-CREE SHWII */ + ["\u151D", "\u151D"], /* CANADIAN SYLLABICS SHWO */ + ["\u151E", "\u151E"], /* CANADIAN SYLLABICS WEST-CREE SHWO */ + ["\u151F", "\u151F"], /* CANADIAN SYLLABICS SHWOO */ + ["\u1520", "\u1520"], /* CANADIAN SYLLABICS WEST-CREE SHWOO */ + ["\u1521", "\u1521"], /* CANADIAN SYLLABICS SHWA */ + ["\u1522", "\u1522"], /* CANADIAN SYLLABICS WEST-CREE SHWA */ + ["\u1523", "\u1523"], /* CANADIAN SYLLABICS SHWAA */ + ["\u1524", "\u1524"], /* CANADIAN SYLLABICS WEST-CREE SHWAA */ + ["\u1525", "\u1525"], /* CANADIAN SYLLABICS SH */ + ["\u1526", "\u1526"], /* CANADIAN SYLLABICS YE */ + ["\u1527", "\u1527"], /* CANADIAN SYLLABICS YAAI */ + ["\u1528", "\u1528"], /* CANADIAN SYLLABICS YI */ + ["\u1529", "\u1529"], /* CANADIAN SYLLABICS YII */ + ["\u152A", "\u152A"], /* CANADIAN SYLLABICS YO */ + ["\u152B", "\u152B"], /* CANADIAN SYLLABICS YOO */ + ["\u152C", "\u152C"], /* CANADIAN SYLLABICS Y-CREE YOO */ + ["\u152D", "\u152D"], /* CANADIAN SYLLABICS YA */ + ["\u152E", "\u152E"], /* CANADIAN SYLLABICS YAA */ + ["\u152F", "\u152F"], /* CANADIAN SYLLABICS YWE */ + ["\u1530", "\u1530"], /* CANADIAN SYLLABICS WEST-CREE YWE */ + ["\u1531", "\u1531"], /* CANADIAN SYLLABICS YWI */ + ["\u1532", "\u1532"], /* CANADIAN SYLLABICS WEST-CREE YWI */ + ["\u1533", "\u1533"], /* CANADIAN SYLLABICS YWII */ + ["\u1534", "\u1534"], /* CANADIAN SYLLABICS WEST-CREE YWII */ + ["\u1535", "\u1535"], /* CANADIAN SYLLABICS YWO */ + ["\u1536", "\u1536"], /* CANADIAN SYLLABICS WEST-CREE YWO */ + ["\u1537", "\u1537"], /* CANADIAN SYLLABICS YWOO */ + ["\u1538", "\u1538"], /* CANADIAN SYLLABICS WEST-CREE YWOO */ + ["\u1539", "\u1539"], /* CANADIAN SYLLABICS YWA */ + ["\u153A", "\u153A"], /* CANADIAN SYLLABICS WEST-CREE YWA */ + ["\u153B", "\u153B"], /* CANADIAN SYLLABICS YWAA */ + ["\u153C", "\u153C"], /* CANADIAN SYLLABICS WEST-CREE YWAA */ + ["\u153D", "\u153D"], /* CANADIAN SYLLABICS NASKAPI YWAA */ + ["\u153E", "\u153E"], /* CANADIAN SYLLABICS Y */ + ["\u153F", "\u153F"], /* CANADIAN SYLLABICS BIBLE-CREE Y */ + ["\u1540", "\u1540"], /* CANADIAN SYLLABICS WEST-CREE Y */ + ["\u1541", "\u1541"], /* CANADIAN SYLLABICS SAYISI YI */ + ["\u1542", "\u1542"], /* CANADIAN SYLLABICS RE */ + ["\u1543", "\u1543"], /* CANADIAN SYLLABICS R-CREE RE */ + ["\u1544", "\u1544"], /* CANADIAN SYLLABICS WEST-CREE LE */ + ["\u1545", "\u1545"], /* CANADIAN SYLLABICS RAAI */ + ["\u1546", "\u1546"], /* CANADIAN SYLLABICS RI */ + ["\u1547", "\u1547"], /* CANADIAN SYLLABICS RII */ + ["\u1548", "\u1548"], /* CANADIAN SYLLABICS RO */ + ["\u1549", "\u1549"], /* CANADIAN SYLLABICS ROO */ + ["\u154A", "\u154A"], /* CANADIAN SYLLABICS WEST-CREE LO */ + ["\u154B", "\u154B"], /* CANADIAN SYLLABICS RA */ + ["\u154C", "\u154C"], /* CANADIAN SYLLABICS RAA */ + ["\u154D", "\u154D"], /* CANADIAN SYLLABICS WEST-CREE LA */ + ["\u154E", "\u154E"], /* CANADIAN SYLLABICS RWAA */ + ["\u154F", "\u154F"], /* CANADIAN SYLLABICS WEST-CREE RWAA */ + ["\u1550", "\u1550"], /* CANADIAN SYLLABICS R */ + ["\u1551", "\u1551"], /* CANADIAN SYLLABICS WEST-CREE R */ + ["\u1552", "\u1552"], /* CANADIAN SYLLABICS MEDIAL R */ + ["\u1553", "\u1553"], /* CANADIAN SYLLABICS FE */ + ["\u1554", "\u1554"], /* CANADIAN SYLLABICS FAAI */ + ["\u1555", "\u1555"], /* CANADIAN SYLLABICS FI */ + ["\u1556", "\u1556"], /* CANADIAN SYLLABICS FII */ + ["\u1557", "\u1557"], /* CANADIAN SYLLABICS FO */ + ["\u1558", "\u1558"], /* CANADIAN SYLLABICS FOO */ + ["\u1559", "\u1559"], /* CANADIAN SYLLABICS FA */ + ["\u155A", "\u155A"], /* CANADIAN SYLLABICS FAA */ + ["\u155B", "\u155B"], /* CANADIAN SYLLABICS FWAA */ + ["\u155C", "\u155C"], /* CANADIAN SYLLABICS WEST-CREE FWAA */ + ["\u155D", "\u155D"], /* CANADIAN SYLLABICS F */ + ["\u155E", "\u155E"], /* CANADIAN SYLLABICS THE */ + ["\u155F", "\u155F"], /* CANADIAN SYLLABICS N-CREE THE */ + ["\u1560", "\u1560"], /* CANADIAN SYLLABICS THI */ + ["\u1561", "\u1561"], /* CANADIAN SYLLABICS N-CREE THI */ + ["\u1562", "\u1562"], /* CANADIAN SYLLABICS THII */ + ["\u1563", "\u1563"], /* CANADIAN SYLLABICS N-CREE THII */ + ["\u1564", "\u1564"], /* CANADIAN SYLLABICS THO */ + ["\u1565", "\u1565"], /* CANADIAN SYLLABICS THOO */ + ["\u1566", "\u1566"], /* CANADIAN SYLLABICS THA */ + ["\u1567", "\u1567"], /* CANADIAN SYLLABICS THAA */ + ["\u1568", "\u1568"], /* CANADIAN SYLLABICS THWAA */ + ["\u1569", "\u1569"], /* CANADIAN SYLLABICS WEST-CREE THWAA */ + ["\u156A", "\u156A"], /* CANADIAN SYLLABICS TH */ + ["\u156B", "\u156B"], /* CANADIAN SYLLABICS TTHE */ + ["\u156C", "\u156C"], /* CANADIAN SYLLABICS TTHI */ + ["\u156D", "\u156D"], /* CANADIAN SYLLABICS TTHO */ + ["\u156E", "\u156E"], /* CANADIAN SYLLABICS TTHA */ + ["\u156F", "\u156F"], /* CANADIAN SYLLABICS TTH */ + ["\u1570", "\u1570"], /* CANADIAN SYLLABICS TYE */ + ["\u1571", "\u1571"], /* CANADIAN SYLLABICS TYI */ + ["\u1572", "\u1572"], /* CANADIAN SYLLABICS TYO */ + ["\u1573", "\u1573"], /* CANADIAN SYLLABICS TYA */ + ["\u1574", "\u1574"], /* CANADIAN SYLLABICS NUNAVIK HE */ + ["\u1575", "\u1575"], /* CANADIAN SYLLABICS NUNAVIK HI */ + ["\u1576", "\u1576"], /* CANADIAN SYLLABICS NUNAVIK HII */ + ["\u1577", "\u1577"], /* CANADIAN SYLLABICS NUNAVIK HO */ + ["\u1578", "\u1578"], /* CANADIAN SYLLABICS NUNAVIK HOO */ + ["\u1579", "\u1579"], /* CANADIAN SYLLABICS NUNAVIK HA */ + ["\u157A", "\u157A"], /* CANADIAN SYLLABICS NUNAVIK HAA */ + ["\u157B", "\u157B"], /* CANADIAN SYLLABICS NUNAVIK H */ + ["\u157C", "\u157C"], /* CANADIAN SYLLABICS NUNAVUT H */ + ["\u157D", "\u157D"], /* CANADIAN SYLLABICS HK */ + ["\u157E", "\u157E"], /* CANADIAN SYLLABICS QAAI */ + ["\u157F", "\u157F"], /* CANADIAN SYLLABICS QI */ + ["\u1580", "\u1580"], /* CANADIAN SYLLABICS QII */ + ["\u1581", "\u1581"], /* CANADIAN SYLLABICS QO */ + ["\u1582", "\u1582"], /* CANADIAN SYLLABICS QOO */ + ["\u1583", "\u1583"], /* CANADIAN SYLLABICS QA */ + ["\u1584", "\u1584"], /* CANADIAN SYLLABICS QAA */ + ["\u1585", "\u1585"], /* CANADIAN SYLLABICS Q */ + ["\u1586", "\u1586"], /* CANADIAN SYLLABICS TLHE */ + ["\u1587", "\u1587"], /* CANADIAN SYLLABICS TLHI */ + ["\u1588", "\u1588"], /* CANADIAN SYLLABICS TLHO */ + ["\u1589", "\u1589"], /* CANADIAN SYLLABICS TLHA */ + ["\u158A", "\u158A"], /* CANADIAN SYLLABICS WEST-CREE RE */ + ["\u158B", "\u158B"], /* CANADIAN SYLLABICS WEST-CREE RI */ + ["\u158C", "\u158C"], /* CANADIAN SYLLABICS WEST-CREE RO */ + ["\u158D", "\u158D"], /* CANADIAN SYLLABICS WEST-CREE RA */ + ["\u158E", "\u158E"], /* CANADIAN SYLLABICS NGAAI */ + ["\u158F", "\u158F"], /* CANADIAN SYLLABICS NGI */ + ["\u1590", "\u1590"], /* CANADIAN SYLLABICS NGII */ + ["\u1591", "\u1591"], /* CANADIAN SYLLABICS NGO */ + ["\u1592", "\u1592"], /* CANADIAN SYLLABICS NGOO */ + ["\u1593", "\u1593"], /* CANADIAN SYLLABICS NGA */ + ["\u1594", "\u1594"], /* CANADIAN SYLLABICS NGAA */ + ["\u1595", "\u1595"], /* CANADIAN SYLLABICS NG */ + ["\u1596", "\u1596"], /* CANADIAN SYLLABICS NNG */ + ["\u1597", "\u1597"], /* CANADIAN SYLLABICS SAYISI SHE */ + ["\u1598", "\u1598"], /* CANADIAN SYLLABICS SAYISI SHI */ + ["\u1599", "\u1599"], /* CANADIAN SYLLABICS SAYISI SHO */ + ["\u159A", "\u159A"], /* CANADIAN SYLLABICS SAYISI SHA */ + ["\u159B", "\u159B"], /* CANADIAN SYLLABICS WOODS-CREE THE */ + ["\u159C", "\u159C"], /* CANADIAN SYLLABICS WOODS-CREE THI */ + ["\u159D", "\u159D"], /* CANADIAN SYLLABICS WOODS-CREE THO */ + ["\u159E", "\u159E"], /* CANADIAN SYLLABICS WOODS-CREE THA */ + ["\u159F", "\u159F"], /* CANADIAN SYLLABICS WOODS-CREE TH */ + ["\u15A0", "\u15A0"], /* CANADIAN SYLLABICS LHI */ + ["\u15A1", "\u15A1"], /* CANADIAN SYLLABICS LHII */ + ["\u15A2", "\u15A2"], /* CANADIAN SYLLABICS LHO */ + ["\u15A3", "\u15A3"], /* CANADIAN SYLLABICS LHOO */ + ["\u15A4", "\u15A4"], /* CANADIAN SYLLABICS LHA */ + ["\u15A5", "\u15A5"], /* CANADIAN SYLLABICS LHAA */ + ["\u15A6", "\u15A6"], /* CANADIAN SYLLABICS LH */ + ["\u15A7", "\u15A7"], /* CANADIAN SYLLABICS TH-CREE THE */ + ["\u15A8", "\u15A8"], /* CANADIAN SYLLABICS TH-CREE THI */ + ["\u15A9", "\u15A9"], /* CANADIAN SYLLABICS TH-CREE THII */ + ["\u15AA", "\u15AA"], /* CANADIAN SYLLABICS TH-CREE THO */ + ["\u15AB", "\u15AB"], /* CANADIAN SYLLABICS TH-CREE THOO */ + ["\u15AC", "\u15AC"], /* CANADIAN SYLLABICS TH-CREE THA */ + ["\u15AD", "\u15AD"], /* CANADIAN SYLLABICS TH-CREE THAA */ + ["\u15AE", "\u15AE"], /* CANADIAN SYLLABICS TH-CREE TH */ + ["\u15AF", "\u15AF"], /* CANADIAN SYLLABICS AIVILIK B */ + ["\u15B0", "\u15B0"], /* CANADIAN SYLLABICS BLACKFOOT E */ + ["\u15B1", "\u15B1"], /* CANADIAN SYLLABICS BLACKFOOT I */ + ["\u15B2", "\u15B2"], /* CANADIAN SYLLABICS BLACKFOOT O */ + ["\u15B3", "\u15B3"], /* CANADIAN SYLLABICS BLACKFOOT A */ + ["\u15B4", "\u15B4"], /* CANADIAN SYLLABICS BLACKFOOT WE */ + ["\u15B5", "\u15B5"], /* CANADIAN SYLLABICS BLACKFOOT WI */ + ["\u15B6", "\u15B6"], /* CANADIAN SYLLABICS BLACKFOOT WO */ + ["\u15B7", "\u15B7"], /* CANADIAN SYLLABICS BLACKFOOT WA */ + ["\u15B8", "\u15B8"], /* CANADIAN SYLLABICS BLACKFOOT NE */ + ["\u15B9", "\u15B9"], /* CANADIAN SYLLABICS BLACKFOOT NI */ + ["\u15BA", "\u15BA"], /* CANADIAN SYLLABICS BLACKFOOT NO */ + ["\u15BB", "\u15BB"], /* CANADIAN SYLLABICS BLACKFOOT NA */ + ["\u15BC", "\u15BC"], /* CANADIAN SYLLABICS BLACKFOOT KE */ + ["\u15BD", "\u15BD"], /* CANADIAN SYLLABICS BLACKFOOT KI */ + ["\u15BE", "\u15BE"], /* CANADIAN SYLLABICS BLACKFOOT KO */ + ["\u15BF", "\u15BF"], /* CANADIAN SYLLABICS BLACKFOOT KA */ + ["\u15C0", "\u15C0"], /* CANADIAN SYLLABICS SAYISI HE */ + ["\u15C1", "\u15C1"], /* CANADIAN SYLLABICS SAYISI HI */ + ["\u15C2", "\u15C2"], /* CANADIAN SYLLABICS SAYISI HO */ + ["\u15C3", "\u15C3"], /* CANADIAN SYLLABICS SAYISI HA */ + ["\u15C4", "\u15C4"], /* CANADIAN SYLLABICS CARRIER GHU */ + ["\u15C5", "\u15C5"], /* CANADIAN SYLLABICS CARRIER GHO */ + ["\u15C6", "\u15C6"], /* CANADIAN SYLLABICS CARRIER GHE */ + ["\u15C7", "\u15C7"], /* CANADIAN SYLLABICS CARRIER GHEE */ + ["\u15C8", "\u15C8"], /* CANADIAN SYLLABICS CARRIER GHI */ + ["\u15C9", "\u15C9"], /* CANADIAN SYLLABICS CARRIER GHA */ + ["\u15CA", "\u15CA"], /* CANADIAN SYLLABICS CARRIER RU */ + ["\u15CB", "\u15CB"], /* CANADIAN SYLLABICS CARRIER RO */ + ["\u15CC", "\u15CC"], /* CANADIAN SYLLABICS CARRIER RE */ + ["\u15CD", "\u15CD"], /* CANADIAN SYLLABICS CARRIER REE */ + ["\u15CE", "\u15CE"], /* CANADIAN SYLLABICS CARRIER RI */ + ["\u15CF", "\u15CF"], /* CANADIAN SYLLABICS CARRIER RA */ + ["\u15D0", "\u15D0"], /* CANADIAN SYLLABICS CARRIER WU */ + ["\u15D1", "\u15D1"], /* CANADIAN SYLLABICS CARRIER WO */ + ["\u15D2", "\u15D2"], /* CANADIAN SYLLABICS CARRIER WE */ + ["\u15D3", "\u15D3"], /* CANADIAN SYLLABICS CARRIER WEE */ + ["\u15D4", "\u15D4"], /* CANADIAN SYLLABICS CARRIER WI */ + ["\u15D5", "\u15D5"], /* CANADIAN SYLLABICS CARRIER WA */ + ["\u15D6", "\u15D6"], /* CANADIAN SYLLABICS CARRIER HWU */ + ["\u15D7", "\u15D7"], /* CANADIAN SYLLABICS CARRIER HWO */ + ["\u15D8", "\u15D8"], /* CANADIAN SYLLABICS CARRIER HWE */ + ["\u15D9", "\u15D9"], /* CANADIAN SYLLABICS CARRIER HWEE */ + ["\u15DA", "\u15DA"], /* CANADIAN SYLLABICS CARRIER HWI */ + ["\u15DB", "\u15DB"], /* CANADIAN SYLLABICS CARRIER HWA */ + ["\u15DC", "\u15DC"], /* CANADIAN SYLLABICS CARRIER THU */ + ["\u15DD", "\u15DD"], /* CANADIAN SYLLABICS CARRIER THO */ + ["\u15DE", "\u15DE"], /* CANADIAN SYLLABICS CARRIER THE */ + ["\u15DF", "\u15DF"], /* CANADIAN SYLLABICS CARRIER THEE */ + ["\u15E0", "\u15E0"], /* CANADIAN SYLLABICS CARRIER THI */ + ["\u15E1", "\u15E1"], /* CANADIAN SYLLABICS CARRIER THA */ + ["\u15E2", "\u15E2"], /* CANADIAN SYLLABICS CARRIER TTU */ + ["\u15E3", "\u15E3"], /* CANADIAN SYLLABICS CARRIER TTO */ + ["\u15E4", "\u15E4"], /* CANADIAN SYLLABICS CARRIER TTE */ + ["\u15E5", "\u15E5"], /* CANADIAN SYLLABICS CARRIER TTEE */ + ["\u15E6", "\u15E6"], /* CANADIAN SYLLABICS CARRIER TTI */ + ["\u15E7", "\u15E7"], /* CANADIAN SYLLABICS CARRIER TTA */ + ["\u15E8", "\u15E8"], /* CANADIAN SYLLABICS CARRIER PU */ + ["\u15E9", "\u15E9"], /* CANADIAN SYLLABICS CARRIER PO */ + ["\u15EA", "\u15EA"], /* CANADIAN SYLLABICS CARRIER PE */ + ["\u15EB", "\u15EB"], /* CANADIAN SYLLABICS CARRIER PEE */ + ["\u15EC", "\u15EC"], /* CANADIAN SYLLABICS CARRIER PI */ + ["\u15ED", "\u15ED"], /* CANADIAN SYLLABICS CARRIER PA */ + ["\u15EE", "\u15EE"], /* CANADIAN SYLLABICS CARRIER P */ + ["\u15EF", "\u15EF"], /* CANADIAN SYLLABICS CARRIER GU */ + ["\u15F0", "\u15F0"], /* CANADIAN SYLLABICS CARRIER GO */ + ["\u15F1", "\u15F1"], /* CANADIAN SYLLABICS CARRIER GE */ + ["\u15F2", "\u15F2"], /* CANADIAN SYLLABICS CARRIER GEE */ + ["\u15F3", "\u15F3"], /* CANADIAN SYLLABICS CARRIER GI */ + ["\u15F4", "\u15F4"], /* CANADIAN SYLLABICS CARRIER GA */ + ["\u15F5", "\u15F5"], /* CANADIAN SYLLABICS CARRIER KHU */ + ["\u15F6", "\u15F6"], /* CANADIAN SYLLABICS CARRIER KHO */ + ["\u15F7", "\u15F7"], /* CANADIAN SYLLABICS CARRIER KHE */ + ["\u15F8", "\u15F8"], /* CANADIAN SYLLABICS CARRIER KHEE */ + ["\u15F9", "\u15F9"], /* CANADIAN SYLLABICS CARRIER KHI */ + ["\u15FA", "\u15FA"], /* CANADIAN SYLLABICS CARRIER KHA */ + ["\u15FB", "\u15FB"], /* CANADIAN SYLLABICS CARRIER KKU */ + ["\u15FC", "\u15FC"], /* CANADIAN SYLLABICS CARRIER KKO */ + ["\u15FD", "\u15FD"], /* CANADIAN SYLLABICS CARRIER KKE */ + ["\u15FE", "\u15FE"], /* CANADIAN SYLLABICS CARRIER KKEE */ + ["\u15FF", "\u15FF"], /* CANADIAN SYLLABICS CARRIER KKI */ + ["\u1600", "\u1600"], /* CANADIAN SYLLABICS CARRIER KKA */ + ["\u1601", "\u1601"], /* CANADIAN SYLLABICS CARRIER KK */ + ["\u1602", "\u1602"], /* CANADIAN SYLLABICS CARRIER NU */ + ["\u1603", "\u1603"], /* CANADIAN SYLLABICS CARRIER NO */ + ["\u1604", "\u1604"], /* CANADIAN SYLLABICS CARRIER NE */ + ["\u1605", "\u1605"], /* CANADIAN SYLLABICS CARRIER NEE */ + ["\u1606", "\u1606"], /* CANADIAN SYLLABICS CARRIER NI */ + ["\u1607", "\u1607"], /* CANADIAN SYLLABICS CARRIER NA */ + ["\u1608", "\u1608"], /* CANADIAN SYLLABICS CARRIER MU */ + ["\u1609", "\u1609"], /* CANADIAN SYLLABICS CARRIER MO */ + ["\u160A", "\u160A"], /* CANADIAN SYLLABICS CARRIER ME */ + ["\u160B", "\u160B"], /* CANADIAN SYLLABICS CARRIER MEE */ + ["\u160C", "\u160C"], /* CANADIAN SYLLABICS CARRIER MI */ + ["\u160D", "\u160D"], /* CANADIAN SYLLABICS CARRIER MA */ + ["\u160E", "\u160E"], /* CANADIAN SYLLABICS CARRIER YU */ + ["\u160F", "\u160F"], /* CANADIAN SYLLABICS CARRIER YO */ + ["\u1610", "\u1610"], /* CANADIAN SYLLABICS CARRIER YE */ + ["\u1611", "\u1611"], /* CANADIAN SYLLABICS CARRIER YEE */ + ["\u1612", "\u1612"], /* CANADIAN SYLLABICS CARRIER YI */ + ["\u1613", "\u1613"], /* CANADIAN SYLLABICS CARRIER YA */ + ["\u1614", "\u1614"], /* CANADIAN SYLLABICS CARRIER JU */ + ["\u1615", "\u1615"], /* CANADIAN SYLLABICS SAYISI JU */ + ["\u1616", "\u1616"], /* CANADIAN SYLLABICS CARRIER JO */ + ["\u1617", "\u1617"], /* CANADIAN SYLLABICS CARRIER JE */ + ["\u1618", "\u1618"], /* CANADIAN SYLLABICS CARRIER JEE */ + ["\u1619", "\u1619"], /* CANADIAN SYLLABICS CARRIER JI */ + ["\u161A", "\u161A"], /* CANADIAN SYLLABICS SAYISI JI */ + ["\u161B", "\u161B"], /* CANADIAN SYLLABICS CARRIER JA */ + ["\u161C", "\u161C"], /* CANADIAN SYLLABICS CARRIER JJU */ + ["\u161D", "\u161D"], /* CANADIAN SYLLABICS CARRIER JJO */ + ["\u161E", "\u161E"], /* CANADIAN SYLLABICS CARRIER JJE */ + ["\u161F", "\u161F"], /* CANADIAN SYLLABICS CARRIER JJEE */ + ["\u1620", "\u1620"], /* CANADIAN SYLLABICS CARRIER JJI */ + ["\u1621", "\u1621"], /* CANADIAN SYLLABICS CARRIER JJA */ + ["\u1622", "\u1622"], /* CANADIAN SYLLABICS CARRIER LU */ + ["\u1623", "\u1623"], /* CANADIAN SYLLABICS CARRIER LO */ + ["\u1624", "\u1624"], /* CANADIAN SYLLABICS CARRIER LE */ + ["\u1625", "\u1625"], /* CANADIAN SYLLABICS CARRIER LEE */ + ["\u1626", "\u1626"], /* CANADIAN SYLLABICS CARRIER LI */ + ["\u1627", "\u1627"], /* CANADIAN SYLLABICS CARRIER LA */ + ["\u1628", "\u1628"], /* CANADIAN SYLLABICS CARRIER DLU */ + ["\u1629", "\u1629"], /* CANADIAN SYLLABICS CARRIER DLO */ + ["\u162A", "\u162A"], /* CANADIAN SYLLABICS CARRIER DLE */ + ["\u162B", "\u162B"], /* CANADIAN SYLLABICS CARRIER DLEE */ + ["\u162C", "\u162C"], /* CANADIAN SYLLABICS CARRIER DLI */ + ["\u162D", "\u162D"], /* CANADIAN SYLLABICS CARRIER DLA */ + ["\u162E", "\u162E"], /* CANADIAN SYLLABICS CARRIER LHU */ + ["\u162F", "\u162F"], /* CANADIAN SYLLABICS CARRIER LHO */ + ["\u1630", "\u1630"], /* CANADIAN SYLLABICS CARRIER LHE */ + ["\u1631", "\u1631"], /* CANADIAN SYLLABICS CARRIER LHEE */ + ["\u1632", "\u1632"], /* CANADIAN SYLLABICS CARRIER LHI */ + ["\u1633", "\u1633"], /* CANADIAN SYLLABICS CARRIER LHA */ + ["\u1634", "\u1634"], /* CANADIAN SYLLABICS CARRIER TLHU */ + ["\u1635", "\u1635"], /* CANADIAN SYLLABICS CARRIER TLHO */ + ["\u1636", "\u1636"], /* CANADIAN SYLLABICS CARRIER TLHE */ + ["\u1637", "\u1637"], /* CANADIAN SYLLABICS CARRIER TLHEE */ + ["\u1638", "\u1638"], /* CANADIAN SYLLABICS CARRIER TLHI */ + ["\u1639", "\u1639"], /* CANADIAN SYLLABICS CARRIER TLHA */ + ["\u163A", "\u163A"], /* CANADIAN SYLLABICS CARRIER TLU */ + ["\u163B", "\u163B"], /* CANADIAN SYLLABICS CARRIER TLO */ + ["\u163C", "\u163C"], /* CANADIAN SYLLABICS CARRIER TLE */ + ["\u163D", "\u163D"], /* CANADIAN SYLLABICS CARRIER TLEE */ + ["\u163E", "\u163E"], /* CANADIAN SYLLABICS CARRIER TLI */ + ["\u163F", "\u163F"], /* CANADIAN SYLLABICS CARRIER TLA */ + ["\u1640", "\u1640"], /* CANADIAN SYLLABICS CARRIER ZU */ + ["\u1641", "\u1641"], /* CANADIAN SYLLABICS CARRIER ZO */ + ["\u1642", "\u1642"], /* CANADIAN SYLLABICS CARRIER ZE */ + ["\u1643", "\u1643"], /* CANADIAN SYLLABICS CARRIER ZEE */ + ["\u1644", "\u1644"], /* CANADIAN SYLLABICS CARRIER ZI */ + ["\u1645", "\u1645"], /* CANADIAN SYLLABICS CARRIER ZA */ + ["\u1646", "\u1646"], /* CANADIAN SYLLABICS CARRIER Z */ + ["\u1647", "\u1647"], /* CANADIAN SYLLABICS CARRIER INITIAL Z */ + ["\u1648", "\u1648"], /* CANADIAN SYLLABICS CARRIER DZU */ + ["\u1649", "\u1649"], /* CANADIAN SYLLABICS CARRIER DZO */ + ["\u164A", "\u164A"], /* CANADIAN SYLLABICS CARRIER DZE */ + ["\u164B", "\u164B"], /* CANADIAN SYLLABICS CARRIER DZEE */ + ["\u164C", "\u164C"], /* CANADIAN SYLLABICS CARRIER DZI */ + ["\u164D", "\u164D"], /* CANADIAN SYLLABICS CARRIER DZA */ + ["\u164E", "\u164E"], /* CANADIAN SYLLABICS CARRIER SU */ + ["\u164F", "\u164F"], /* CANADIAN SYLLABICS CARRIER SO */ + ["\u1650", "\u1650"], /* CANADIAN SYLLABICS CARRIER SE */ + ["\u1651", "\u1651"], /* CANADIAN SYLLABICS CARRIER SEE */ + ["\u1652", "\u1652"], /* CANADIAN SYLLABICS CARRIER SI */ + ["\u1653", "\u1653"], /* CANADIAN SYLLABICS CARRIER SA */ + ["\u1654", "\u1654"], /* CANADIAN SYLLABICS CARRIER SHU */ + ["\u1655", "\u1655"], /* CANADIAN SYLLABICS CARRIER SHO */ + ["\u1656", "\u1656"], /* CANADIAN SYLLABICS CARRIER SHE */ + ["\u1657", "\u1657"], /* CANADIAN SYLLABICS CARRIER SHEE */ + ["\u1658", "\u1658"], /* CANADIAN SYLLABICS CARRIER SHI */ + ["\u1659", "\u1659"], /* CANADIAN SYLLABICS CARRIER SHA */ + ["\u165A", "\u165A"], /* CANADIAN SYLLABICS CARRIER SH */ + ["\u165B", "\u165B"], /* CANADIAN SYLLABICS CARRIER TSU */ + ["\u165C", "\u165C"], /* CANADIAN SYLLABICS CARRIER TSO */ + ["\u165D", "\u165D"], /* CANADIAN SYLLABICS CARRIER TSE */ + ["\u165E", "\u165E"], /* CANADIAN SYLLABICS CARRIER TSEE */ + ["\u165F", "\u165F"], /* CANADIAN SYLLABICS CARRIER TSI */ + ["\u1660", "\u1660"], /* CANADIAN SYLLABICS CARRIER TSA */ + ["\u1661", "\u1661"], /* CANADIAN SYLLABICS CARRIER CHU */ + ["\u1662", "\u1662"], /* CANADIAN SYLLABICS CARRIER CHO */ + ["\u1663", "\u1663"], /* CANADIAN SYLLABICS CARRIER CHE */ + ["\u1664", "\u1664"], /* CANADIAN SYLLABICS CARRIER CHEE */ + ["\u1665", "\u1665"], /* CANADIAN SYLLABICS CARRIER CHI */ + ["\u1666", "\u1666"], /* CANADIAN SYLLABICS CARRIER CHA */ + ["\u1667", "\u1667"], /* CANADIAN SYLLABICS CARRIER TTSU */ + ["\u1668", "\u1668"], /* CANADIAN SYLLABICS CARRIER TTSO */ + ["\u1669", "\u1669"], /* CANADIAN SYLLABICS CARRIER TTSE */ + ["\u166A", "\u166A"], /* CANADIAN SYLLABICS CARRIER TTSEE */ + ["\u166B", "\u166B"], /* CANADIAN SYLLABICS CARRIER TTSI */ + ["\u166C", "\u166C"], /* CANADIAN SYLLABICS CARRIER TTSA */ + ["\u166D", "\u166D"], /* CANADIAN SYLLABICS CHI SIGN */ + ["\u166E", "\u166E"], /* CANADIAN SYLLABICS FULL STOP */ + ["\u166F", "\u166F"], /* CANADIAN SYLLABICS QAI */ + ["\u1670", "\u1670"], /* CANADIAN SYLLABICS NGAI */ + ["\u1671", "\u1671"], /* CANADIAN SYLLABICS NNGI */ + ["\u1672", "\u1672"], /* CANADIAN SYLLABICS NNGII */ + ["\u1673", "\u1673"], /* CANADIAN SYLLABICS NNGO */ + ["\u1674", "\u1674"], /* CANADIAN SYLLABICS NNGOO */ + ["\u1675", "\u1675"], /* CANADIAN SYLLABICS NNGA */ + ["\u1676", "\u1676"], /* CANADIAN SYLLABICS NNGAA */ + ["\u1677", "\u1677"], /* CANADIAN SYLLABICS WOODS-CREE THWEE */ + ["\u1678", "\u1678"], /* CANADIAN SYLLABICS WOODS-CREE THWI */ + ["\u1679", "\u1679"], /* CANADIAN SYLLABICS WOODS-CREE THWII */ + ["\u167A", "\u167A"], /* CANADIAN SYLLABICS WOODS-CREE THWO */ + ["\u167B", "\u167B"], /* CANADIAN SYLLABICS WOODS-CREE THWOO */ + ["\u167C", "\u167C"], /* CANADIAN SYLLABICS WOODS-CREE THWA */ + ["\u167D", "\u167D"], /* CANADIAN SYLLABICS WOODS-CREE THWAA */ + ["\u167E", "\u167E"], /* CANADIAN SYLLABICS WOODS-CREE FINAL TH */ + ["\u167F", "\u167F"], /* CANADIAN SYLLABICS BLACKFOOT W */ + ["\u1680", "\u1680"], /* OGHAM SPACE MARK */ + ["\u1681", "\u1681"], /* OGHAM LETTER BEITH */ + ["\u1682", "\u1682"], /* OGHAM LETTER LUIS */ + ["\u1683", "\u1683"], /* OGHAM LETTER FEARN */ + ["\u1684", "\u1684"], /* OGHAM LETTER SAIL */ + ["\u1685", "\u1685"], /* OGHAM LETTER NION */ + ["\u1686", "\u1686"], /* OGHAM LETTER UATH */ + ["\u1687", "\u1687"], /* OGHAM LETTER DAIR */ + ["\u1688", "\u1688"], /* OGHAM LETTER TINNE */ + ["\u1689", "\u1689"], /* OGHAM LETTER COLL */ + ["\u168A", "\u168A"], /* OGHAM LETTER CEIRT */ + ["\u168B", "\u168B"], /* OGHAM LETTER MUIN */ + ["\u168C", "\u168C"], /* OGHAM LETTER GORT */ + ["\u168D", "\u168D"], /* OGHAM LETTER NGEADAL */ + ["\u168E", "\u168E"], /* OGHAM LETTER STRAIF */ + ["\u168F", "\u168F"], /* OGHAM LETTER RUIS */ + ["\u1690", "\u1690"], /* OGHAM LETTER AILM */ + ["\u1691", "\u1691"], /* OGHAM LETTER ONN */ + ["\u1692", "\u1692"], /* OGHAM LETTER UR */ + ["\u1693", "\u1693"], /* OGHAM LETTER EADHADH */ + ["\u1694", "\u1694"], /* OGHAM LETTER IODHADH */ + ["\u1695", "\u1695"], /* OGHAM LETTER EABHADH */ + ["\u1696", "\u1696"], /* OGHAM LETTER OR */ + ["\u1697", "\u1697"], /* OGHAM LETTER UILLEANN */ + ["\u1698", "\u1698"], /* OGHAM LETTER IFIN */ + ["\u1699", "\u1699"], /* OGHAM LETTER EAMHANCHOLL */ + ["\u169A", "\u169A"], /* OGHAM LETTER PEITH */ + ["\u169B", "\u169B"], /* OGHAM FEATHER MARK */ + ["\u169C", "\u169C"], /* OGHAM REVERSED FEATHER MARK */ + ["\u169D", "\u169D"], + ["\u169E", "\u169E"], + ["\u169F", "\u169F"], + ["\u16A0", "\u16A0"], /* RUNIC LETTER FEHU FEOH FE F */ + ["\u16A1", "\u16A1"], /* RUNIC LETTER V */ + ["\u16A2", "\u16A2"], /* RUNIC LETTER URUZ UR U */ + ["\u16A3", "\u16A3"], /* RUNIC LETTER YR */ + ["\u16A4", "\u16A4"], /* RUNIC LETTER Y */ + ["\u16A5", "\u16A5"], /* RUNIC LETTER W */ + ["\u16A6", "\u16A6"], /* RUNIC LETTER THURISAZ THURS THORN */ + ["\u16A7", "\u16A7"], /* RUNIC LETTER ETH */ + ["\u16A8", "\u16A8"], /* RUNIC LETTER ANSUZ A */ + ["\u16A9", "\u16A9"], /* RUNIC LETTER OS O */ + ["\u16AA", "\u16AA"], /* RUNIC LETTER AC A */ + ["\u16AB", "\u16AB"], /* RUNIC LETTER AESC */ + ["\u16AC", "\u16AC"], /* RUNIC LETTER LONG-BRANCH-OSS O */ + ["\u16AD", "\u16AD"], /* RUNIC LETTER SHORT-TWIG-OSS O */ + ["\u16AE", "\u16AE"], /* RUNIC LETTER O */ + ["\u16AF", "\u16AF"], /* RUNIC LETTER OE */ + ["\u16B0", "\u16B0"], /* RUNIC LETTER ON */ + ["\u16B1", "\u16B1"], /* RUNIC LETTER RAIDO RAD REID R */ + ["\u16B2", "\u16B2"], /* RUNIC LETTER KAUNA */ + ["\u16B3", "\u16B3"], /* RUNIC LETTER CEN */ + ["\u16B4", "\u16B4"], /* RUNIC LETTER KAUN K */ + ["\u16B5", "\u16B5"], /* RUNIC LETTER G */ + ["\u16B6", "\u16B6"], /* RUNIC LETTER ENG */ + ["\u16B7", "\u16B7"], /* RUNIC LETTER GEBO GYFU G */ + ["\u16B8", "\u16B8"], /* RUNIC LETTER GAR */ + ["\u16B9", "\u16B9"], /* RUNIC LETTER WUNJO WYNN W */ + ["\u16BA", "\u16BA"], /* RUNIC LETTER HAGLAZ H */ + ["\u16BB", "\u16BB"], /* RUNIC LETTER HAEGL H */ + ["\u16BC", "\u16BC"], /* RUNIC LETTER LONG-BRANCH-HAGALL H */ + ["\u16BD", "\u16BD"], /* RUNIC LETTER SHORT-TWIG-HAGALL H */ + ["\u16BE", "\u16BE"], /* RUNIC LETTER NAUDIZ NYD NAUD N */ + ["\u16BF", "\u16BF"], /* RUNIC LETTER SHORT-TWIG-NAUD N */ + ["\u16C0", "\u16C0"], /* RUNIC LETTER DOTTED-N */ + ["\u16C1", "\u16C1"], /* RUNIC LETTER ISAZ IS ISS I */ + ["\u16C2", "\u16C2"], /* RUNIC LETTER E */ + ["\u16C3", "\u16C3"], /* RUNIC LETTER JERAN J */ + ["\u16C4", "\u16C4"], /* RUNIC LETTER GER */ + ["\u16C5", "\u16C5"], /* RUNIC LETTER LONG-BRANCH-AR AE */ + ["\u16C6", "\u16C6"], /* RUNIC LETTER SHORT-TWIG-AR A */ + ["\u16C7", "\u16C7"], /* RUNIC LETTER IWAZ EOH */ + ["\u16C8", "\u16C8"], /* RUNIC LETTER PERTHO PEORTH P */ + ["\u16C9", "\u16C9"], /* RUNIC LETTER ALGIZ EOLHX */ + ["\u16CA", "\u16CA"], /* RUNIC LETTER SOWILO S */ + ["\u16CB", "\u16CB"], /* RUNIC LETTER SIGEL LONG-BRANCH-SOL S */ + ["\u16CC", "\u16CC"], /* RUNIC LETTER SHORT-TWIG-SOL S */ + ["\u16CD", "\u16CD"], /* RUNIC LETTER C */ + ["\u16CE", "\u16CE"], /* RUNIC LETTER Z */ + ["\u16CF", "\u16CF"], /* RUNIC LETTER TIWAZ TIR TYR T */ + ["\u16D0", "\u16D0"], /* RUNIC LETTER SHORT-TWIG-TYR T */ + ["\u16D1", "\u16D1"], /* RUNIC LETTER D */ + ["\u16D2", "\u16D2"], /* RUNIC LETTER BERKANAN BEORC BJARKAN B */ + ["\u16D3", "\u16D3"], /* RUNIC LETTER SHORT-TWIG-BJARKAN B */ + ["\u16D4", "\u16D4"], /* RUNIC LETTER DOTTED-P */ + ["\u16D5", "\u16D5"], /* RUNIC LETTER OPEN-P */ + ["\u16D6", "\u16D6"], /* RUNIC LETTER EHWAZ EH E */ + ["\u16D7", "\u16D7"], /* RUNIC LETTER MANNAZ MAN M */ + ["\u16D8", "\u16D8"], /* RUNIC LETTER LONG-BRANCH-MADR M */ + ["\u16D9", "\u16D9"], /* RUNIC LETTER SHORT-TWIG-MADR M */ + ["\u16DA", "\u16DA"], /* RUNIC LETTER LAUKAZ LAGU LOGR L */ + ["\u16DB", "\u16DB"], /* RUNIC LETTER DOTTED-L */ + ["\u16DC", "\u16DC"], /* RUNIC LETTER INGWAZ */ + ["\u16DD", "\u16DD"], /* RUNIC LETTER ING */ + ["\u16DE", "\u16DE"], /* RUNIC LETTER DAGAZ DAEG D */ + ["\u16DF", "\u16DF"], /* RUNIC LETTER OTHALAN ETHEL O */ + ["\u16E0", "\u16E0"], /* RUNIC LETTER EAR */ + ["\u16E1", "\u16E1"], /* RUNIC LETTER IOR */ + ["\u16E2", "\u16E2"], /* RUNIC LETTER CWEORTH */ + ["\u16E3", "\u16E3"], /* RUNIC LETTER CALC */ + ["\u16E4", "\u16E4"], /* RUNIC LETTER CEALC */ + ["\u16E5", "\u16E5"], /* RUNIC LETTER STAN */ + ["\u16E6", "\u16E6"], /* RUNIC LETTER LONG-BRANCH-YR */ + ["\u16E7", "\u16E7"], /* RUNIC LETTER SHORT-TWIG-YR */ + ["\u16E8", "\u16E8"], /* RUNIC LETTER ICELANDIC-YR */ + ["\u16E9", "\u16E9"], /* RUNIC LETTER Q */ + ["\u16EA", "\u16EA"], /* RUNIC LETTER X */ + ["\u16EB", "\u16EB"], /* RUNIC SINGLE PUNCTUATION */ + ["\u16EC", "\u16EC"], /* RUNIC MULTIPLE PUNCTUATION */ + ["\u16ED", "\u16ED"], /* RUNIC CROSS PUNCTUATION */ + ["\u16EE", "\u16EE"], /* RUNIC ARLAUG SYMBOL */ + ["\u16EF", "\u16EF"], /* RUNIC TVIMADUR SYMBOL */ + ["\u16F0", "\u16F0"], /* RUNIC BELGTHOR SYMBOL */ + ["\u16F1", "\u16F1"], /* RUNIC LETTER K */ + ["\u16F2", "\u16F2"], /* RUNIC LETTER SH */ + ["\u16F3", "\u16F3"], /* RUNIC LETTER OO */ + ["\u16F4", "\u16F4"], /* RUNIC LETTER FRANKS CASKET OS */ + ["\u16F5", "\u16F5"], /* RUNIC LETTER FRANKS CASKET IS */ + ["\u16F6", "\u16F6"], /* RUNIC LETTER FRANKS CASKET EH */ + ["\u16F7", "\u16F7"], /* RUNIC LETTER FRANKS CASKET AC */ + ["\u16F8", "\u16F8"], /* RUNIC LETTER FRANKS CASKET AESC */ + ["\u16F9", "\u16F9"], + ["\u16FA", "\u16FA"], + ["\u16FB", "\u16FB"], + ["\u16FC", "\u16FC"], + ["\u16FD", "\u16FD"], + ["\u16FE", "\u16FE"], + ["\u16FF", "\u16FF"], + ["\u1700", "\u1700"], /* TAGALOG LETTER A */ + ["\u1701", "\u1701"], /* TAGALOG LETTER I */ + ["\u1702", "\u1702"], /* TAGALOG LETTER U */ + ["\u1703", "\u1703"], /* TAGALOG LETTER KA */ + ["\u1704", "\u1704"], /* TAGALOG LETTER GA */ + ["\u1705", "\u1705"], /* TAGALOG LETTER NGA */ + ["\u1706", "\u1706"], /* TAGALOG LETTER TA */ + ["\u1707", "\u1707"], /* TAGALOG LETTER DA */ + ["\u1708", "\u1708"], /* TAGALOG LETTER NA */ + ["\u1709", "\u1709"], /* TAGALOG LETTER PA */ + ["\u170A", "\u170A"], /* TAGALOG LETTER BA */ + ["\u170B", "\u170B"], /* TAGALOG LETTER MA */ + ["\u170C", "\u170C"], /* TAGALOG LETTER YA */ + ["\u170D", "\u170D"], /* TAGALOG LETTER RA */ + ["\u170E", "\u170E"], /* TAGALOG LETTER LA */ + ["\u170F", "\u170F"], /* TAGALOG LETTER WA */ + ["\u1710", "\u1710"], /* TAGALOG LETTER SA */ + ["\u1711", "\u1711"], /* TAGALOG LETTER HA */ + ["\u1712", "\u1712"], /* TAGALOG VOWEL SIGN I */ + ["\u1713", "\u1713"], /* TAGALOG VOWEL SIGN U */ + ["\u1714", "\u1714"], /* TAGALOG SIGN VIRAMA */ + ["\u1715", "\u1715"], /* TAGALOG SIGN PAMUDPOD */ + ["\u1716", "\u1716"], + ["\u1717", "\u1717"], + ["\u1718", "\u1718"], + ["\u1719", "\u1719"], + ["\u171A", "\u171A"], + ["\u171B", "\u171B"], + ["\u171C", "\u171C"], + ["\u171D", "\u171D"], + ["\u171E", "\u171E"], + ["\u171F", "\u171F"], /* TAGALOG LETTER ARCHAIC RA */ + ["\u1720", "\u1720"], /* HANUNOO LETTER A */ + ["\u1721", "\u1721"], /* HANUNOO LETTER I */ + ["\u1722", "\u1722"], /* HANUNOO LETTER U */ + ["\u1723", "\u1723"], /* HANUNOO LETTER KA */ + ["\u1724", "\u1724"], /* HANUNOO LETTER GA */ + ["\u1725", "\u1725"], /* HANUNOO LETTER NGA */ + ["\u1726", "\u1726"], /* HANUNOO LETTER TA */ + ["\u1727", "\u1727"], /* HANUNOO LETTER DA */ + ["\u1728", "\u1728"], /* HANUNOO LETTER NA */ + ["\u1729", "\u1729"], /* HANUNOO LETTER PA */ + ["\u172A", "\u172A"], /* HANUNOO LETTER BA */ + ["\u172B", "\u172B"], /* HANUNOO LETTER MA */ + ["\u172C", "\u172C"], /* HANUNOO LETTER YA */ + ["\u172D", "\u172D"], /* HANUNOO LETTER RA */ + ["\u172E", "\u172E"], /* HANUNOO LETTER LA */ + ["\u172F", "\u172F"], /* HANUNOO LETTER WA */ + ["\u1730", "\u1730"], /* HANUNOO LETTER SA */ + ["\u1731", "\u1731"], /* HANUNOO LETTER HA */ + ["\u1732", "\u1732"], /* HANUNOO VOWEL SIGN I */ + ["\u1733", "\u1733"], /* HANUNOO VOWEL SIGN U */ + ["\u1734", "\u1734"], /* HANUNOO SIGN PAMUDPOD */ + ["\u1735", "\u1735"], /* PHILIPPINE SINGLE PUNCTUATION */ + ["\u1736", "\u1736"], /* PHILIPPINE DOUBLE PUNCTUATION */ + ["\u1737", "\u1737"], + ["\u1738", "\u1738"], + ["\u1739", "\u1739"], + ["\u173A", "\u173A"], + ["\u173B", "\u173B"], + ["\u173C", "\u173C"], + ["\u173D", "\u173D"], + ["\u173E", "\u173E"], + ["\u173F", "\u173F"], + ["\u1740", "\u1740"], /* BUHID LETTER A */ + ["\u1741", "\u1741"], /* BUHID LETTER I */ + ["\u1742", "\u1742"], /* BUHID LETTER U */ + ["\u1743", "\u1743"], /* BUHID LETTER KA */ + ["\u1744", "\u1744"], /* BUHID LETTER GA */ + ["\u1745", "\u1745"], /* BUHID LETTER NGA */ + ["\u1746", "\u1746"], /* BUHID LETTER TA */ + ["\u1747", "\u1747"], /* BUHID LETTER DA */ + ["\u1748", "\u1748"], /* BUHID LETTER NA */ + ["\u1749", "\u1749"], /* BUHID LETTER PA */ + ["\u174A", "\u174A"], /* BUHID LETTER BA */ + ["\u174B", "\u174B"], /* BUHID LETTER MA */ + ["\u174C", "\u174C"], /* BUHID LETTER YA */ + ["\u174D", "\u174D"], /* BUHID LETTER RA */ + ["\u174E", "\u174E"], /* BUHID LETTER LA */ + ["\u174F", "\u174F"], /* BUHID LETTER WA */ + ["\u1750", "\u1750"], /* BUHID LETTER SA */ + ["\u1751", "\u1751"], /* BUHID LETTER HA */ + ["\u1752", "\u1752"], /* BUHID VOWEL SIGN I */ + ["\u1753", "\u1753"], /* BUHID VOWEL SIGN U */ + ["\u1754", "\u1754"], + ["\u1755", "\u1755"], + ["\u1756", "\u1756"], + ["\u1757", "\u1757"], + ["\u1758", "\u1758"], + ["\u1759", "\u1759"], + ["\u175A", "\u175A"], + ["\u175B", "\u175B"], + ["\u175C", "\u175C"], + ["\u175D", "\u175D"], + ["\u175E", "\u175E"], + ["\u175F", "\u175F"], + ["\u1760", "\u1760"], /* TAGBANWA LETTER A */ + ["\u1761", "\u1761"], /* TAGBANWA LETTER I */ + ["\u1762", "\u1762"], /* TAGBANWA LETTER U */ + ["\u1763", "\u1763"], /* TAGBANWA LETTER KA */ + ["\u1764", "\u1764"], /* TAGBANWA LETTER GA */ + ["\u1765", "\u1765"], /* TAGBANWA LETTER NGA */ + ["\u1766", "\u1766"], /* TAGBANWA LETTER TA */ + ["\u1767", "\u1767"], /* TAGBANWA LETTER DA */ + ["\u1768", "\u1768"], /* TAGBANWA LETTER NA */ + ["\u1769", "\u1769"], /* TAGBANWA LETTER PA */ + ["\u176A", "\u176A"], /* TAGBANWA LETTER BA */ + ["\u176B", "\u176B"], /* TAGBANWA LETTER MA */ + ["\u176C", "\u176C"], /* TAGBANWA LETTER YA */ + ["\u176D", "\u176D"], + ["\u176E", "\u176E"], /* TAGBANWA LETTER LA */ + ["\u176F", "\u176F"], /* TAGBANWA LETTER WA */ + ["\u1770", "\u1770"], /* TAGBANWA LETTER SA */ + ["\u1771", "\u1771"], + ["\u1772", "\u1772"], /* TAGBANWA VOWEL SIGN I */ + ["\u1773", "\u1773"], /* TAGBANWA VOWEL SIGN U */ + ["\u1774", "\u1774"], + ["\u1775", "\u1775"], + ["\u1776", "\u1776"], + ["\u1777", "\u1777"], + ["\u1778", "\u1778"], + ["\u1779", "\u1779"], + ["\u177A", "\u177A"], + ["\u177B", "\u177B"], + ["\u177C", "\u177C"], + ["\u177D", "\u177D"], + ["\u177E", "\u177E"], + ["\u177F", "\u177F"], + ["\u1780", "\u1780"], /* KHMER LETTER KA */ + ["\u1781", "\u1781"], /* KHMER LETTER KHA */ + ["\u1782", "\u1782"], /* KHMER LETTER KO */ + ["\u1783", "\u1783"], /* KHMER LETTER KHO */ + ["\u1784", "\u1784"], /* KHMER LETTER NGO */ + ["\u1785", "\u1785"], /* KHMER LETTER CA */ + ["\u1786", "\u1786"], /* KHMER LETTER CHA */ + ["\u1787", "\u1787"], /* KHMER LETTER CO */ + ["\u1788", "\u1788"], /* KHMER LETTER CHO */ + ["\u1789", "\u1789"], /* KHMER LETTER NYO */ + ["\u178A", "\u178A"], /* KHMER LETTER DA */ + ["\u178B", "\u178B"], /* KHMER LETTER TTHA */ + ["\u178C", "\u178C"], /* KHMER LETTER DO */ + ["\u178D", "\u178D"], /* KHMER LETTER TTHO */ + ["\u178E", "\u178E"], /* KHMER LETTER NNO */ + ["\u178F", "\u178F"], /* KHMER LETTER TA */ + ["\u1790", "\u1790"], /* KHMER LETTER THA */ + ["\u1791", "\u1791"], /* KHMER LETTER TO */ + ["\u1792", "\u1792"], /* KHMER LETTER THO */ + ["\u1793", "\u1793"], /* KHMER LETTER NO */ + ["\u1794", "\u1794"], /* KHMER LETTER BA */ + ["\u1795", "\u1795"], /* KHMER LETTER PHA */ + ["\u1796", "\u1796"], /* KHMER LETTER PO */ + ["\u1797", "\u1797"], /* KHMER LETTER PHO */ + ["\u1798", "\u1798"], /* KHMER LETTER MO */ + ["\u1799", "\u1799"], /* KHMER LETTER YO */ + ["\u179A", "\u179A"], /* KHMER LETTER RO */ + ["\u179B", "\u179B"], /* KHMER LETTER LO */ + ["\u179C", "\u179C"], /* KHMER LETTER VO */ + ["\u179D", "\u179D"], /* KHMER LETTER SHA */ + ["\u179E", "\u179E"], /* KHMER LETTER SSO */ + ["\u179F", "\u179F"], /* KHMER LETTER SA */ + ["\u17A0", "\u17A0"], /* KHMER LETTER HA */ + ["\u17A1", "\u17A1"], /* KHMER LETTER LA */ + ["\u17A2", "\u17A2"], /* KHMER LETTER QA */ + ["\u17A3", "\u17A3"], /* KHMER INDEPENDENT VOWEL QAQ */ + ["\u17A4", "\u17A4"], /* KHMER INDEPENDENT VOWEL QAA */ + ["\u17A5", "\u17A5"], /* KHMER INDEPENDENT VOWEL QI */ + ["\u17A6", "\u17A6"], /* KHMER INDEPENDENT VOWEL QII */ + ["\u17A7", "\u17A7"], /* KHMER INDEPENDENT VOWEL QU */ + ["\u17A8", "\u17A8"], /* KHMER INDEPENDENT VOWEL QUK */ + ["\u17A9", "\u17A9"], /* KHMER INDEPENDENT VOWEL QUU */ + ["\u17AA", "\u17AA"], /* KHMER INDEPENDENT VOWEL QUUV */ + ["\u17AB", "\u17AB"], /* KHMER INDEPENDENT VOWEL RY */ + ["\u17AC", "\u17AC"], /* KHMER INDEPENDENT VOWEL RYY */ + ["\u17AD", "\u17AD"], /* KHMER INDEPENDENT VOWEL LY */ + ["\u17AE", "\u17AE"], /* KHMER INDEPENDENT VOWEL LYY */ + ["\u17AF", "\u17AF"], /* KHMER INDEPENDENT VOWEL QE */ + ["\u17B0", "\u17B0"], /* KHMER INDEPENDENT VOWEL QAI */ + ["\u17B1", "\u17B1"], /* KHMER INDEPENDENT VOWEL QOO TYPE ONE */ + ["\u17B2", "\u17B2"], /* KHMER INDEPENDENT VOWEL QOO TYPE TWO */ + ["\u17B3", "\u17B3"], /* KHMER INDEPENDENT VOWEL QAU */ + ["\u17B4", "\u17B4"], /* KHMER VOWEL INHERENT AQ */ + ["\u17B5", "\u17B5"], /* KHMER VOWEL INHERENT AA */ + ["\u17B6", "\u17B6"], /* KHMER VOWEL SIGN AA */ + ["\u17B7", "\u17B7"], /* KHMER VOWEL SIGN I */ + ["\u17B8", "\u17B8"], /* KHMER VOWEL SIGN II */ + ["\u17B9", "\u17B9"], /* KHMER VOWEL SIGN Y */ + ["\u17BA", "\u17BA"], /* KHMER VOWEL SIGN YY */ + ["\u17BB", "\u17BB"], /* KHMER VOWEL SIGN U */ + ["\u17BC", "\u17BC"], /* KHMER VOWEL SIGN UU */ + ["\u17BD", "\u17BD"], /* KHMER VOWEL SIGN UA */ + ["\u17BE", "\u17BE"], /* KHMER VOWEL SIGN OE */ + ["\u17BF", "\u17BF"], /* KHMER VOWEL SIGN YA */ + ["\u17C0", "\u17C0"], /* KHMER VOWEL SIGN IE */ + ["\u17C1", "\u17C1"], /* KHMER VOWEL SIGN E */ + ["\u17C2", "\u17C2"], /* KHMER VOWEL SIGN AE */ + ["\u17C3", "\u17C3"], /* KHMER VOWEL SIGN AI */ + ["\u17C4", "\u17C4"], /* KHMER VOWEL SIGN OO */ + ["\u17C5", "\u17C5"], /* KHMER VOWEL SIGN AU */ + ["\u17C6", "\u17C6"], /* KHMER SIGN NIKAHIT */ + ["\u17C7", "\u17C7"], /* KHMER SIGN REAHMUK */ + ["\u17C8", "\u17C8"], /* KHMER SIGN YUUKALEAPINTU */ + ["\u17C9", "\u17C9"], /* KHMER SIGN MUUSIKATOAN */ + ["\u17CA", "\u17CA"], /* KHMER SIGN TRIISAP */ + ["\u17CB", "\u17CB"], /* KHMER SIGN BANTOC */ + ["\u17CC", "\u17CC"], /* KHMER SIGN ROBAT */ + ["\u17CD", "\u17CD"], /* KHMER SIGN TOANDAKHIAT */ + ["\u17CE", "\u17CE"], /* KHMER SIGN KAKABAT */ + ["\u17CF", "\u17CF"], /* KHMER SIGN AHSDA */ + ["\u17D0", "\u17D0"], /* KHMER SIGN SAMYOK SANNYA */ + ["\u17D1", "\u17D1"], /* KHMER SIGN VIRIAM */ + ["\u17D2", "\u17D2"], /* KHMER SIGN COENG */ + ["\u17D3", "\u17D3"], /* KHMER SIGN BATHAMASAT */ + ["\u17D4", "\u17D4"], /* KHMER SIGN KHAN */ + ["\u17D5", "\u17D5"], /* KHMER SIGN BARIYOOSAN */ + ["\u17D6", "\u17D6"], /* KHMER SIGN CAMNUC PII KUUH */ + ["\u17D7", "\u17D7"], /* KHMER SIGN LEK TOO */ + ["\u17D8", "\u17D8"], /* KHMER SIGN BEYYAL */ + ["\u17D9", "\u17D9"], /* KHMER SIGN PHNAEK MUAN */ + ["\u17DA", "\u17DA"], /* KHMER SIGN KOOMUUT */ + ["\u17DB", "\u17DB"], /* KHMER CURRENCY SYMBOL RIEL */ + ["\u17DC", "\u17DC"], /* KHMER SIGN AVAKRAHASANYA */ + ["\u17DD", "\u17DD"], /* KHMER SIGN ATTHACAN */ + ["\u17DE", "\u17DE"], + ["\u17DF", "\u17DF"], + ["\u17E0", "\u17E0"], /* KHMER DIGIT ZERO */ + ["\u17E1", "\u17E1"], /* KHMER DIGIT ONE */ + ["\u17E2", "\u17E2"], /* KHMER DIGIT TWO */ + ["\u17E3", "\u17E3"], /* KHMER DIGIT THREE */ + ["\u17E4", "\u17E4"], /* KHMER DIGIT FOUR */ + ["\u17E5", "\u17E5"], /* KHMER DIGIT FIVE */ + ["\u17E6", "\u17E6"], /* KHMER DIGIT SIX */ + ["\u17E7", "\u17E7"], /* KHMER DIGIT SEVEN */ + ["\u17E8", "\u17E8"], /* KHMER DIGIT EIGHT */ + ["\u17E9", "\u17E9"], /* KHMER DIGIT NINE */ + ["\u17EA", "\u17EA"], + ["\u17EB", "\u17EB"], + ["\u17EC", "\u17EC"], + ["\u17ED", "\u17ED"], + ["\u17EE", "\u17EE"], + ["\u17EF", "\u17EF"], + ["\u17F0", "\u17F0"], /* KHMER SYMBOL LEK ATTAK SON */ + ["\u17F1", "\u17F1"], /* KHMER SYMBOL LEK ATTAK MUOY */ + ["\u17F2", "\u17F2"], /* KHMER SYMBOL LEK ATTAK PII */ + ["\u17F3", "\u17F3"], /* KHMER SYMBOL LEK ATTAK BEI */ + ["\u17F4", "\u17F4"], /* KHMER SYMBOL LEK ATTAK BUON */ + ["\u17F5", "\u17F5"], /* KHMER SYMBOL LEK ATTAK PRAM */ + ["\u17F6", "\u17F6"], /* KHMER SYMBOL LEK ATTAK PRAM-MUOY */ + ["\u17F7", "\u17F7"], /* KHMER SYMBOL LEK ATTAK PRAM-PII */ + ["\u17F8", "\u17F8"], /* KHMER SYMBOL LEK ATTAK PRAM-BEI */ + ["\u17F9", "\u17F9"], /* KHMER SYMBOL LEK ATTAK PRAM-BUON */ + ["\u17FA", "\u17FA"], + ["\u17FB", "\u17FB"], + ["\u17FC", "\u17FC"], + ["\u17FD", "\u17FD"], + ["\u17FE", "\u17FE"], + ["\u17FF", "\u17FF"], + ["\u1800", "\u1800"], /* MONGOLIAN BIRGA */ + ["\u1801", "\u1801"], /* MONGOLIAN ELLIPSIS */ + ["\u1802", "\u1802"], /* MONGOLIAN COMMA */ + ["\u1803", "\u1803"], /* MONGOLIAN FULL STOP */ + ["\u1804", "\u1804"], /* MONGOLIAN COLON */ + ["\u1805", "\u1805"], /* MONGOLIAN FOUR DOTS */ + ["\u1806", "\u1806"], /* MONGOLIAN TODO SOFT HYPHEN */ + ["\u1807", "\u1807"], /* MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER */ + ["\u1808", "\u1808"], /* MONGOLIAN MANCHU COMMA */ + ["\u1809", "\u1809"], /* MONGOLIAN MANCHU FULL STOP */ + ["\u180A", "\u180A"], /* MONGOLIAN NIRUGU */ + ["\u180B", "\u180B"], /* MONGOLIAN FREE VARIATION SELECTOR ONE */ + ["\u180C", "\u180C"], /* MONGOLIAN FREE VARIATION SELECTOR TWO */ + ["\u180D", "\u180D"], /* MONGOLIAN FREE VARIATION SELECTOR THREE */ + ["\u180E", "\u180E"], /* MONGOLIAN VOWEL SEPARATOR */ + ["\u180F", "\u180F"], /* MONGOLIAN FREE VARIATION SELECTOR FOUR */ + ["\u1810", "\u1810"], /* MONGOLIAN DIGIT ZERO */ + ["\u1811", "\u1811"], /* MONGOLIAN DIGIT ONE */ + ["\u1812", "\u1812"], /* MONGOLIAN DIGIT TWO */ + ["\u1813", "\u1813"], /* MONGOLIAN DIGIT THREE */ + ["\u1814", "\u1814"], /* MONGOLIAN DIGIT FOUR */ + ["\u1815", "\u1815"], /* MONGOLIAN DIGIT FIVE */ + ["\u1816", "\u1816"], /* MONGOLIAN DIGIT SIX */ + ["\u1817", "\u1817"], /* MONGOLIAN DIGIT SEVEN */ + ["\u1818", "\u1818"], /* MONGOLIAN DIGIT EIGHT */ + ["\u1819", "\u1819"], /* MONGOLIAN DIGIT NINE */ + ["\u181A", "\u181A"], + ["\u181B", "\u181B"], + ["\u181C", "\u181C"], + ["\u181D", "\u181D"], + ["\u181E", "\u181E"], + ["\u181F", "\u181F"], + ["\u1820", "\u1820"], /* MONGOLIAN LETTER A */ + ["\u1821", "\u1821"], /* MONGOLIAN LETTER E */ + ["\u1822", "\u1822"], /* MONGOLIAN LETTER I */ + ["\u1823", "\u1823"], /* MONGOLIAN LETTER O */ + ["\u1824", "\u1824"], /* MONGOLIAN LETTER U */ + ["\u1825", "\u1825"], /* MONGOLIAN LETTER OE */ + ["\u1826", "\u1826"], /* MONGOLIAN LETTER UE */ + ["\u1827", "\u1827"], /* MONGOLIAN LETTER EE */ + ["\u1828", "\u1828"], /* MONGOLIAN LETTER NA */ + ["\u1829", "\u1829"], /* MONGOLIAN LETTER ANG */ + ["\u182A", "\u182A"], /* MONGOLIAN LETTER BA */ + ["\u182B", "\u182B"], /* MONGOLIAN LETTER PA */ + ["\u182C", "\u182C"], /* MONGOLIAN LETTER QA */ + ["\u182D", "\u182D"], /* MONGOLIAN LETTER GA */ + ["\u182E", "\u182E"], /* MONGOLIAN LETTER MA */ + ["\u182F", "\u182F"], /* MONGOLIAN LETTER LA */ + ["\u1830", "\u1830"], /* MONGOLIAN LETTER SA */ + ["\u1831", "\u1831"], /* MONGOLIAN LETTER SHA */ + ["\u1832", "\u1832"], /* MONGOLIAN LETTER TA */ + ["\u1833", "\u1833"], /* MONGOLIAN LETTER DA */ + ["\u1834", "\u1834"], /* MONGOLIAN LETTER CHA */ + ["\u1835", "\u1835"], /* MONGOLIAN LETTER JA */ + ["\u1836", "\u1836"], /* MONGOLIAN LETTER YA */ + ["\u1837", "\u1837"], /* MONGOLIAN LETTER RA */ + ["\u1838", "\u1838"], /* MONGOLIAN LETTER WA */ + ["\u1839", "\u1839"], /* MONGOLIAN LETTER FA */ + ["\u183A", "\u183A"], /* MONGOLIAN LETTER KA */ + ["\u183B", "\u183B"], /* MONGOLIAN LETTER KHA */ + ["\u183C", "\u183C"], /* MONGOLIAN LETTER TSA */ + ["\u183D", "\u183D"], /* MONGOLIAN LETTER ZA */ + ["\u183E", "\u183E"], /* MONGOLIAN LETTER HAA */ + ["\u183F", "\u183F"], /* MONGOLIAN LETTER ZRA */ + ["\u1840", "\u1840"], /* MONGOLIAN LETTER LHA */ + ["\u1841", "\u1841"], /* MONGOLIAN LETTER ZHI */ + ["\u1842", "\u1842"], /* MONGOLIAN LETTER CHI */ + ["\u1843", "\u1843"], /* MONGOLIAN LETTER TODO LONG VOWEL SIGN */ + ["\u1844", "\u1844"], /* MONGOLIAN LETTER TODO E */ + ["\u1845", "\u1845"], /* MONGOLIAN LETTER TODO I */ + ["\u1846", "\u1846"], /* MONGOLIAN LETTER TODO O */ + ["\u1847", "\u1847"], /* MONGOLIAN LETTER TODO U */ + ["\u1848", "\u1848"], /* MONGOLIAN LETTER TODO OE */ + ["\u1849", "\u1849"], /* MONGOLIAN LETTER TODO UE */ + ["\u184A", "\u184A"], /* MONGOLIAN LETTER TODO ANG */ + ["\u184B", "\u184B"], /* MONGOLIAN LETTER TODO BA */ + ["\u184C", "\u184C"], /* MONGOLIAN LETTER TODO PA */ + ["\u184D", "\u184D"], /* MONGOLIAN LETTER TODO QA */ + ["\u184E", "\u184E"], /* MONGOLIAN LETTER TODO GA */ + ["\u184F", "\u184F"], /* MONGOLIAN LETTER TODO MA */ + ["\u1850", "\u1850"], /* MONGOLIAN LETTER TODO TA */ + ["\u1851", "\u1851"], /* MONGOLIAN LETTER TODO DA */ + ["\u1852", "\u1852"], /* MONGOLIAN LETTER TODO CHA */ + ["\u1853", "\u1853"], /* MONGOLIAN LETTER TODO JA */ + ["\u1854", "\u1854"], /* MONGOLIAN LETTER TODO TSA */ + ["\u1855", "\u1855"], /* MONGOLIAN LETTER TODO YA */ + ["\u1856", "\u1856"], /* MONGOLIAN LETTER TODO WA */ + ["\u1857", "\u1857"], /* MONGOLIAN LETTER TODO KA */ + ["\u1858", "\u1858"], /* MONGOLIAN LETTER TODO GAA */ + ["\u1859", "\u1859"], /* MONGOLIAN LETTER TODO HAA */ + ["\u185A", "\u185A"], /* MONGOLIAN LETTER TODO JIA */ + ["\u185B", "\u185B"], /* MONGOLIAN LETTER TODO NIA */ + ["\u185C", "\u185C"], /* MONGOLIAN LETTER TODO DZA */ + ["\u185D", "\u185D"], /* MONGOLIAN LETTER SIBE E */ + ["\u185E", "\u185E"], /* MONGOLIAN LETTER SIBE I */ + ["\u185F", "\u185F"], /* MONGOLIAN LETTER SIBE IY */ + ["\u1860", "\u1860"], /* MONGOLIAN LETTER SIBE UE */ + ["\u1861", "\u1861"], /* MONGOLIAN LETTER SIBE U */ + ["\u1862", "\u1862"], /* MONGOLIAN LETTER SIBE ANG */ + ["\u1863", "\u1863"], /* MONGOLIAN LETTER SIBE KA */ + ["\u1864", "\u1864"], /* MONGOLIAN LETTER SIBE GA */ + ["\u1865", "\u1865"], /* MONGOLIAN LETTER SIBE HA */ + ["\u1866", "\u1866"], /* MONGOLIAN LETTER SIBE PA */ + ["\u1867", "\u1867"], /* MONGOLIAN LETTER SIBE SHA */ + ["\u1868", "\u1868"], /* MONGOLIAN LETTER SIBE TA */ + ["\u1869", "\u1869"], /* MONGOLIAN LETTER SIBE DA */ + ["\u186A", "\u186A"], /* MONGOLIAN LETTER SIBE JA */ + ["\u186B", "\u186B"], /* MONGOLIAN LETTER SIBE FA */ + ["\u186C", "\u186C"], /* MONGOLIAN LETTER SIBE GAA */ + ["\u186D", "\u186D"], /* MONGOLIAN LETTER SIBE HAA */ + ["\u186E", "\u186E"], /* MONGOLIAN LETTER SIBE TSA */ + ["\u186F", "\u186F"], /* MONGOLIAN LETTER SIBE ZA */ + ["\u1870", "\u1870"], /* MONGOLIAN LETTER SIBE RAA */ + ["\u1871", "\u1871"], /* MONGOLIAN LETTER SIBE CHA */ + ["\u1872", "\u1872"], /* MONGOLIAN LETTER SIBE ZHA */ + ["\u1873", "\u1873"], /* MONGOLIAN LETTER MANCHU I */ + ["\u1874", "\u1874"], /* MONGOLIAN LETTER MANCHU KA */ + ["\u1875", "\u1875"], /* MONGOLIAN LETTER MANCHU RA */ + ["\u1876", "\u1876"], /* MONGOLIAN LETTER MANCHU FA */ + ["\u1877", "\u1877"], /* MONGOLIAN LETTER MANCHU ZHA */ + ["\u1878", "\u1878"], /* MONGOLIAN LETTER CHA WITH TWO DOTS */ + ["\u1879", "\u1879"], + ["\u187A", "\u187A"], + ["\u187B", "\u187B"], + ["\u187C", "\u187C"], + ["\u187D", "\u187D"], + ["\u187E", "\u187E"], + ["\u187F", "\u187F"], + ["\u1880", "\u1880"], /* MONGOLIAN LETTER ALI GALI ANUSVARA ONE */ + ["\u1881", "\u1881"], /* MONGOLIAN LETTER ALI GALI VISARGA ONE */ + ["\u1882", "\u1882"], /* MONGOLIAN LETTER ALI GALI DAMARU */ + ["\u1883", "\u1883"], /* MONGOLIAN LETTER ALI GALI UBADAMA */ + ["\u1884", "\u1884"], /* MONGOLIAN LETTER ALI GALI INVERTED UBADAMA */ + ["\u1885", "\u1885"], /* MONGOLIAN LETTER ALI GALI BALUDA */ + ["\u1886", "\u1886"], /* MONGOLIAN LETTER ALI GALI THREE BALUDA */ + ["\u1887", "\u1887"], /* MONGOLIAN LETTER ALI GALI A */ + ["\u1888", "\u1888"], /* MONGOLIAN LETTER ALI GALI I */ + ["\u1889", "\u1889"], /* MONGOLIAN LETTER ALI GALI KA */ + ["\u188A", "\u188A"], /* MONGOLIAN LETTER ALI GALI NGA */ + ["\u188B", "\u188B"], /* MONGOLIAN LETTER ALI GALI CA */ + ["\u188C", "\u188C"], /* MONGOLIAN LETTER ALI GALI TTA */ + ["\u188D", "\u188D"], /* MONGOLIAN LETTER ALI GALI TTHA */ + ["\u188E", "\u188E"], /* MONGOLIAN LETTER ALI GALI DDA */ + ["\u188F", "\u188F"], /* MONGOLIAN LETTER ALI GALI NNA */ + ["\u1890", "\u1890"], /* MONGOLIAN LETTER ALI GALI TA */ + ["\u1891", "\u1891"], /* MONGOLIAN LETTER ALI GALI DA */ + ["\u1892", "\u1892"], /* MONGOLIAN LETTER ALI GALI PA */ + ["\u1893", "\u1893"], /* MONGOLIAN LETTER ALI GALI PHA */ + ["\u1894", "\u1894"], /* MONGOLIAN LETTER ALI GALI SSA */ + ["\u1895", "\u1895"], /* MONGOLIAN LETTER ALI GALI ZHA */ + ["\u1896", "\u1896"], /* MONGOLIAN LETTER ALI GALI ZA */ + ["\u1897", "\u1897"], /* MONGOLIAN LETTER ALI GALI AH */ + ["\u1898", "\u1898"], /* MONGOLIAN LETTER TODO ALI GALI TA */ + ["\u1899", "\u1899"], /* MONGOLIAN LETTER TODO ALI GALI ZHA */ + ["\u189A", "\u189A"], /* MONGOLIAN LETTER MANCHU ALI GALI GHA */ + ["\u189B", "\u189B"], /* MONGOLIAN LETTER MANCHU ALI GALI NGA */ + ["\u189C", "\u189C"], /* MONGOLIAN LETTER MANCHU ALI GALI CA */ + ["\u189D", "\u189D"], /* MONGOLIAN LETTER MANCHU ALI GALI JHA */ + ["\u189E", "\u189E"], /* MONGOLIAN LETTER MANCHU ALI GALI TTA */ + ["\u189F", "\u189F"], /* MONGOLIAN LETTER MANCHU ALI GALI DDHA */ + ["\u18A0", "\u18A0"], /* MONGOLIAN LETTER MANCHU ALI GALI TA */ + ["\u18A1", "\u18A1"], /* MONGOLIAN LETTER MANCHU ALI GALI DHA */ + ["\u18A2", "\u18A2"], /* MONGOLIAN LETTER MANCHU ALI GALI SSA */ + ["\u18A3", "\u18A3"], /* MONGOLIAN LETTER MANCHU ALI GALI CYA */ + ["\u18A4", "\u18A4"], /* MONGOLIAN LETTER MANCHU ALI GALI ZHA */ + ["\u18A5", "\u18A5"], /* MONGOLIAN LETTER MANCHU ALI GALI ZA */ + ["\u18A6", "\u18A6"], /* MONGOLIAN LETTER ALI GALI HALF U */ + ["\u18A7", "\u18A7"], /* MONGOLIAN LETTER ALI GALI HALF YA */ + ["\u18A8", "\u18A8"], /* MONGOLIAN LETTER MANCHU ALI GALI BHA */ + ["\u18A9", "\u18A9"], /* MONGOLIAN LETTER ALI GALI DAGALGA */ + ["\u18AA", "\u18AA"], /* MONGOLIAN LETTER MANCHU ALI GALI LHA */ + ["\u18AB", "\u18AB"], + ["\u18AC", "\u18AC"], + ["\u18AD", "\u18AD"], + ["\u18AE", "\u18AE"], + ["\u18AF", "\u18AF"], + ["\u18B0", "\u18B0"], /* CANADIAN SYLLABICS OY */ + ["\u18B1", "\u18B1"], /* CANADIAN SYLLABICS AY */ + ["\u18B2", "\u18B2"], /* CANADIAN SYLLABICS AAY */ + ["\u18B3", "\u18B3"], /* CANADIAN SYLLABICS WAY */ + ["\u18B4", "\u18B4"], /* CANADIAN SYLLABICS POY */ + ["\u18B5", "\u18B5"], /* CANADIAN SYLLABICS PAY */ + ["\u18B6", "\u18B6"], /* CANADIAN SYLLABICS PWOY */ + ["\u18B7", "\u18B7"], /* CANADIAN SYLLABICS TAY */ + ["\u18B8", "\u18B8"], /* CANADIAN SYLLABICS KAY */ + ["\u18B9", "\u18B9"], /* CANADIAN SYLLABICS KWAY */ + ["\u18BA", "\u18BA"], /* CANADIAN SYLLABICS MAY */ + ["\u18BB", "\u18BB"], /* CANADIAN SYLLABICS NOY */ + ["\u18BC", "\u18BC"], /* CANADIAN SYLLABICS NAY */ + ["\u18BD", "\u18BD"], /* CANADIAN SYLLABICS LAY */ + ["\u18BE", "\u18BE"], /* CANADIAN SYLLABICS SOY */ + ["\u18BF", "\u18BF"], /* CANADIAN SYLLABICS SAY */ + ["\u18C0", "\u18C0"], /* CANADIAN SYLLABICS SHOY */ + ["\u18C1", "\u18C1"], /* CANADIAN SYLLABICS SHAY */ + ["\u18C2", "\u18C2"], /* CANADIAN SYLLABICS SHWOY */ + ["\u18C3", "\u18C3"], /* CANADIAN SYLLABICS YOY */ + ["\u18C4", "\u18C4"], /* CANADIAN SYLLABICS YAY */ + ["\u18C5", "\u18C5"], /* CANADIAN SYLLABICS RAY */ + ["\u18C6", "\u18C6"], /* CANADIAN SYLLABICS NWI */ + ["\u18C7", "\u18C7"], /* CANADIAN SYLLABICS OJIBWAY NWI */ + ["\u18C8", "\u18C8"], /* CANADIAN SYLLABICS NWII */ + ["\u18C9", "\u18C9"], /* CANADIAN SYLLABICS OJIBWAY NWII */ + ["\u18CA", "\u18CA"], /* CANADIAN SYLLABICS NWO */ + ["\u18CB", "\u18CB"], /* CANADIAN SYLLABICS OJIBWAY NWO */ + ["\u18CC", "\u18CC"], /* CANADIAN SYLLABICS NWOO */ + ["\u18CD", "\u18CD"], /* CANADIAN SYLLABICS OJIBWAY NWOO */ + ["\u18CE", "\u18CE"], /* CANADIAN SYLLABICS RWEE */ + ["\u18CF", "\u18CF"], /* CANADIAN SYLLABICS RWI */ + ["\u18D0", "\u18D0"], /* CANADIAN SYLLABICS RWII */ + ["\u18D1", "\u18D1"], /* CANADIAN SYLLABICS RWO */ + ["\u18D2", "\u18D2"], /* CANADIAN SYLLABICS RWOO */ + ["\u18D3", "\u18D3"], /* CANADIAN SYLLABICS RWA */ + ["\u18D4", "\u18D4"], /* CANADIAN SYLLABICS OJIBWAY P */ + ["\u18D5", "\u18D5"], /* CANADIAN SYLLABICS OJIBWAY T */ + ["\u18D6", "\u18D6"], /* CANADIAN SYLLABICS OJIBWAY K */ + ["\u18D7", "\u18D7"], /* CANADIAN SYLLABICS OJIBWAY C */ + ["\u18D8", "\u18D8"], /* CANADIAN SYLLABICS OJIBWAY M */ + ["\u18D9", "\u18D9"], /* CANADIAN SYLLABICS OJIBWAY N */ + ["\u18DA", "\u18DA"], /* CANADIAN SYLLABICS OJIBWAY S */ + ["\u18DB", "\u18DB"], /* CANADIAN SYLLABICS OJIBWAY SH */ + ["\u18DC", "\u18DC"], /* CANADIAN SYLLABICS EASTERN W */ + ["\u18DD", "\u18DD"], /* CANADIAN SYLLABICS WESTERN W */ + ["\u18DE", "\u18DE"], /* CANADIAN SYLLABICS FINAL SMALL RING */ + ["\u18DF", "\u18DF"], /* CANADIAN SYLLABICS FINAL RAISED DOT */ + ["\u18E0", "\u18E0"], /* CANADIAN SYLLABICS R-CREE RWE */ + ["\u18E1", "\u18E1"], /* CANADIAN SYLLABICS WEST-CREE LOO */ + ["\u18E2", "\u18E2"], /* CANADIAN SYLLABICS WEST-CREE LAA */ + ["\u18E3", "\u18E3"], /* CANADIAN SYLLABICS THWE */ + ["\u18E4", "\u18E4"], /* CANADIAN SYLLABICS THWA */ + ["\u18E5", "\u18E5"], /* CANADIAN SYLLABICS TTHWE */ + ["\u18E6", "\u18E6"], /* CANADIAN SYLLABICS TTHOO */ + ["\u18E7", "\u18E7"], /* CANADIAN SYLLABICS TTHAA */ + ["\u18E8", "\u18E8"], /* CANADIAN SYLLABICS TLHWE */ + ["\u18E9", "\u18E9"], /* CANADIAN SYLLABICS TLHOO */ + ["\u18EA", "\u18EA"], /* CANADIAN SYLLABICS SAYISI SHWE */ + ["\u18EB", "\u18EB"], /* CANADIAN SYLLABICS SAYISI SHOO */ + ["\u18EC", "\u18EC"], /* CANADIAN SYLLABICS SAYISI HOO */ + ["\u18ED", "\u18ED"], /* CANADIAN SYLLABICS CARRIER GWU */ + ["\u18EE", "\u18EE"], /* CANADIAN SYLLABICS CARRIER DENE GEE */ + ["\u18EF", "\u18EF"], /* CANADIAN SYLLABICS CARRIER GAA */ + ["\u18F0", "\u18F0"], /* CANADIAN SYLLABICS CARRIER GWA */ + ["\u18F1", "\u18F1"], /* CANADIAN SYLLABICS SAYISI JUU */ + ["\u18F2", "\u18F2"], /* CANADIAN SYLLABICS CARRIER JWA */ + ["\u18F3", "\u18F3"], /* CANADIAN SYLLABICS BEAVER DENE L */ + ["\u18F4", "\u18F4"], /* CANADIAN SYLLABICS BEAVER DENE R */ + ["\u18F5", "\u18F5"], /* CANADIAN SYLLABICS CARRIER DENTAL S */ + ["\u18F6", "\u18F6"], + ["\u18F7", "\u18F7"], + ["\u18F8", "\u18F8"], + ["\u18F9", "\u18F9"], + ["\u18FA", "\u18FA"], + ["\u18FB", "\u18FB"], + ["\u18FC", "\u18FC"], + ["\u18FD", "\u18FD"], + ["\u18FE", "\u18FE"], + ["\u18FF", "\u18FF"], + ["\u1900", "\u1900"], /* LIMBU VOWEL-CARRIER LETTER */ + ["\u1901", "\u1901"], /* LIMBU LETTER KA */ + ["\u1902", "\u1902"], /* LIMBU LETTER KHA */ + ["\u1903", "\u1903"], /* LIMBU LETTER GA */ + ["\u1904", "\u1904"], /* LIMBU LETTER GHA */ + ["\u1905", "\u1905"], /* LIMBU LETTER NGA */ + ["\u1906", "\u1906"], /* LIMBU LETTER CA */ + ["\u1907", "\u1907"], /* LIMBU LETTER CHA */ + ["\u1908", "\u1908"], /* LIMBU LETTER JA */ + ["\u1909", "\u1909"], /* LIMBU LETTER JHA */ + ["\u190A", "\u190A"], /* LIMBU LETTER YAN */ + ["\u190B", "\u190B"], /* LIMBU LETTER TA */ + ["\u190C", "\u190C"], /* LIMBU LETTER THA */ + ["\u190D", "\u190D"], /* LIMBU LETTER DA */ + ["\u190E", "\u190E"], /* LIMBU LETTER DHA */ + ["\u190F", "\u190F"], /* LIMBU LETTER NA */ + ["\u1910", "\u1910"], /* LIMBU LETTER PA */ + ["\u1911", "\u1911"], /* LIMBU LETTER PHA */ + ["\u1912", "\u1912"], /* LIMBU LETTER BA */ + ["\u1913", "\u1913"], /* LIMBU LETTER BHA */ + ["\u1914", "\u1914"], /* LIMBU LETTER MA */ + ["\u1915", "\u1915"], /* LIMBU LETTER YA */ + ["\u1916", "\u1916"], /* LIMBU LETTER RA */ + ["\u1917", "\u1917"], /* LIMBU LETTER LA */ + ["\u1918", "\u1918"], /* LIMBU LETTER WA */ + ["\u1919", "\u1919"], /* LIMBU LETTER SHA */ + ["\u191A", "\u191A"], /* LIMBU LETTER SSA */ + ["\u191B", "\u191B"], /* LIMBU LETTER SA */ + ["\u191C", "\u191C"], /* LIMBU LETTER HA */ + ["\u191D", "\u191D"], /* LIMBU LETTER GYAN */ + ["\u191E", "\u191E"], /* LIMBU LETTER TRA */ + ["\u191F", "\u191F"], + ["\u1920", "\u1920"], /* LIMBU VOWEL SIGN A */ + ["\u1921", "\u1921"], /* LIMBU VOWEL SIGN I */ + ["\u1922", "\u1922"], /* LIMBU VOWEL SIGN U */ + ["\u1923", "\u1923"], /* LIMBU VOWEL SIGN EE */ + ["\u1924", "\u1924"], /* LIMBU VOWEL SIGN AI */ + ["\u1925", "\u1925"], /* LIMBU VOWEL SIGN OO */ + ["\u1926", "\u1926"], /* LIMBU VOWEL SIGN AU */ + ["\u1927", "\u1927"], /* LIMBU VOWEL SIGN E */ + ["\u1928", "\u1928"], /* LIMBU VOWEL SIGN O */ + ["\u1929", "\u1929"], /* LIMBU SUBJOINED LETTER YA */ + ["\u192A", "\u192A"], /* LIMBU SUBJOINED LETTER RA */ + ["\u192B", "\u192B"], /* LIMBU SUBJOINED LETTER WA */ + ["\u192C", "\u192C"], + ["\u192D", "\u192D"], + ["\u192E", "\u192E"], + ["\u192F", "\u192F"], + ["\u1930", "\u1930"], /* LIMBU SMALL LETTER KA */ + ["\u1931", "\u1931"], /* LIMBU SMALL LETTER NGA */ + ["\u1932", "\u1932"], /* LIMBU SMALL LETTER ANUSVARA */ + ["\u1933", "\u1933"], /* LIMBU SMALL LETTER TA */ + ["\u1934", "\u1934"], /* LIMBU SMALL LETTER NA */ + ["\u1935", "\u1935"], /* LIMBU SMALL LETTER PA */ + ["\u1936", "\u1936"], /* LIMBU SMALL LETTER MA */ + ["\u1937", "\u1937"], /* LIMBU SMALL LETTER RA */ + ["\u1938", "\u1938"], /* LIMBU SMALL LETTER LA */ + ["\u1939", "\u1939"], /* LIMBU SIGN MUKPHRENG */ + ["\u193A", "\u193A"], /* LIMBU SIGN KEMPHRENG */ + ["\u193B", "\u193B"], /* LIMBU SIGN SA-I */ + ["\u193C", "\u193C"], + ["\u193D", "\u193D"], + ["\u193E", "\u193E"], + ["\u193F", "\u193F"], + ["\u1940", "\u1940"], /* LIMBU SIGN LOO */ + ["\u1941", "\u1941"], + ["\u1942", "\u1942"], + ["\u1943", "\u1943"], + ["\u1944", "\u1944"], /* LIMBU EXCLAMATION MARK */ + ["\u1945", "\u1945"], /* LIMBU QUESTION MARK */ + ["\u1946", "\u1946"], /* LIMBU DIGIT ZERO */ + ["\u1947", "\u1947"], /* LIMBU DIGIT ONE */ + ["\u1948", "\u1948"], /* LIMBU DIGIT TWO */ + ["\u1949", "\u1949"], /* LIMBU DIGIT THREE */ + ["\u194A", "\u194A"], /* LIMBU DIGIT FOUR */ + ["\u194B", "\u194B"], /* LIMBU DIGIT FIVE */ + ["\u194C", "\u194C"], /* LIMBU DIGIT SIX */ + ["\u194D", "\u194D"], /* LIMBU DIGIT SEVEN */ + ["\u194E", "\u194E"], /* LIMBU DIGIT EIGHT */ + ["\u194F", "\u194F"], /* LIMBU DIGIT NINE */ + ["\u1950", "\u1950"], /* TAI LE LETTER KA */ + ["\u1951", "\u1951"], /* TAI LE LETTER XA */ + ["\u1952", "\u1952"], /* TAI LE LETTER NGA */ + ["\u1953", "\u1953"], /* TAI LE LETTER TSA */ + ["\u1954", "\u1954"], /* TAI LE LETTER SA */ + ["\u1955", "\u1955"], /* TAI LE LETTER YA */ + ["\u1956", "\u1956"], /* TAI LE LETTER TA */ + ["\u1957", "\u1957"], /* TAI LE LETTER THA */ + ["\u1958", "\u1958"], /* TAI LE LETTER LA */ + ["\u1959", "\u1959"], /* TAI LE LETTER PA */ + ["\u195A", "\u195A"], /* TAI LE LETTER PHA */ + ["\u195B", "\u195B"], /* TAI LE LETTER MA */ + ["\u195C", "\u195C"], /* TAI LE LETTER FA */ + ["\u195D", "\u195D"], /* TAI LE LETTER VA */ + ["\u195E", "\u195E"], /* TAI LE LETTER HA */ + ["\u195F", "\u195F"], /* TAI LE LETTER QA */ + ["\u1960", "\u1960"], /* TAI LE LETTER KHA */ + ["\u1961", "\u1961"], /* TAI LE LETTER TSHA */ + ["\u1962", "\u1962"], /* TAI LE LETTER NA */ + ["\u1963", "\u1963"], /* TAI LE LETTER A */ + ["\u1964", "\u1964"], /* TAI LE LETTER I */ + ["\u1965", "\u1965"], /* TAI LE LETTER EE */ + ["\u1966", "\u1966"], /* TAI LE LETTER EH */ + ["\u1967", "\u1967"], /* TAI LE LETTER U */ + ["\u1968", "\u1968"], /* TAI LE LETTER OO */ + ["\u1969", "\u1969"], /* TAI LE LETTER O */ + ["\u196A", "\u196A"], /* TAI LE LETTER UE */ + ["\u196B", "\u196B"], /* TAI LE LETTER E */ + ["\u196C", "\u196C"], /* TAI LE LETTER AUE */ + ["\u196D", "\u196D"], /* TAI LE LETTER AI */ + ["\u196E", "\u196E"], + ["\u196F", "\u196F"], + ["\u1970", "\u1970"], /* TAI LE LETTER TONE-2 */ + ["\u1971", "\u1971"], /* TAI LE LETTER TONE-3 */ + ["\u1972", "\u1972"], /* TAI LE LETTER TONE-4 */ + ["\u1973", "\u1973"], /* TAI LE LETTER TONE-5 */ + ["\u1974", "\u1974"], /* TAI LE LETTER TONE-6 */ + ["\u1975", "\u1975"], + ["\u1976", "\u1976"], + ["\u1977", "\u1977"], + ["\u1978", "\u1978"], + ["\u1979", "\u1979"], + ["\u197A", "\u197A"], + ["\u197B", "\u197B"], + ["\u197C", "\u197C"], + ["\u197D", "\u197D"], + ["\u197E", "\u197E"], + ["\u197F", "\u197F"], + ["\u1980", "\u1980"], /* NEW TAI LUE LETTER HIGH QA */ + ["\u1981", "\u1981"], /* NEW TAI LUE LETTER LOW QA */ + ["\u1982", "\u1982"], /* NEW TAI LUE LETTER HIGH KA */ + ["\u1983", "\u1983"], /* NEW TAI LUE LETTER HIGH XA */ + ["\u1984", "\u1984"], /* NEW TAI LUE LETTER HIGH NGA */ + ["\u1985", "\u1985"], /* NEW TAI LUE LETTER LOW KA */ + ["\u1986", "\u1986"], /* NEW TAI LUE LETTER LOW XA */ + ["\u1987", "\u1987"], /* NEW TAI LUE LETTER LOW NGA */ + ["\u1988", "\u1988"], /* NEW TAI LUE LETTER HIGH TSA */ + ["\u1989", "\u1989"], /* NEW TAI LUE LETTER HIGH SA */ + ["\u198A", "\u198A"], /* NEW TAI LUE LETTER HIGH YA */ + ["\u198B", "\u198B"], /* NEW TAI LUE LETTER LOW TSA */ + ["\u198C", "\u198C"], /* NEW TAI LUE LETTER LOW SA */ + ["\u198D", "\u198D"], /* NEW TAI LUE LETTER LOW YA */ + ["\u198E", "\u198E"], /* NEW TAI LUE LETTER HIGH TA */ + ["\u198F", "\u198F"], /* NEW TAI LUE LETTER HIGH THA */ + ["\u1990", "\u1990"], /* NEW TAI LUE LETTER HIGH NA */ + ["\u1991", "\u1991"], /* NEW TAI LUE LETTER LOW TA */ + ["\u1992", "\u1992"], /* NEW TAI LUE LETTER LOW THA */ + ["\u1993", "\u1993"], /* NEW TAI LUE LETTER LOW NA */ + ["\u1994", "\u1994"], /* NEW TAI LUE LETTER HIGH PA */ + ["\u1995", "\u1995"], /* NEW TAI LUE LETTER HIGH PHA */ + ["\u1996", "\u1996"], /* NEW TAI LUE LETTER HIGH MA */ + ["\u1997", "\u1997"], /* NEW TAI LUE LETTER LOW PA */ + ["\u1998", "\u1998"], /* NEW TAI LUE LETTER LOW PHA */ + ["\u1999", "\u1999"], /* NEW TAI LUE LETTER LOW MA */ + ["\u199A", "\u199A"], /* NEW TAI LUE LETTER HIGH FA */ + ["\u199B", "\u199B"], /* NEW TAI LUE LETTER HIGH VA */ + ["\u199C", "\u199C"], /* NEW TAI LUE LETTER HIGH LA */ + ["\u199D", "\u199D"], /* NEW TAI LUE LETTER LOW FA */ + ["\u199E", "\u199E"], /* NEW TAI LUE LETTER LOW VA */ + ["\u199F", "\u199F"], /* NEW TAI LUE LETTER LOW LA */ + ["\u19A0", "\u19A0"], /* NEW TAI LUE LETTER HIGH HA */ + ["\u19A1", "\u19A1"], /* NEW TAI LUE LETTER HIGH DA */ + ["\u19A2", "\u19A2"], /* NEW TAI LUE LETTER HIGH BA */ + ["\u19A3", "\u19A3"], /* NEW TAI LUE LETTER LOW HA */ + ["\u19A4", "\u19A4"], /* NEW TAI LUE LETTER LOW DA */ + ["\u19A5", "\u19A5"], /* NEW TAI LUE LETTER LOW BA */ + ["\u19A6", "\u19A6"], /* NEW TAI LUE LETTER HIGH KVA */ + ["\u19A7", "\u19A7"], /* NEW TAI LUE LETTER HIGH XVA */ + ["\u19A8", "\u19A8"], /* NEW TAI LUE LETTER LOW KVA */ + ["\u19A9", "\u19A9"], /* NEW TAI LUE LETTER LOW XVA */ + ["\u19AA", "\u19AA"], /* NEW TAI LUE LETTER HIGH SUA */ + ["\u19AB", "\u19AB"], /* NEW TAI LUE LETTER LOW SUA */ + ["\u19AC", "\u19AC"], + ["\u19AD", "\u19AD"], + ["\u19AE", "\u19AE"], + ["\u19AF", "\u19AF"], + ["\u19B0", "\u19B0"], /* NEW TAI LUE VOWEL SIGN VOWEL SHORTENER */ + ["\u19B1", "\u19B1"], /* NEW TAI LUE VOWEL SIGN AA */ + ["\u19B2", "\u19B2"], /* NEW TAI LUE VOWEL SIGN II */ + ["\u19B3", "\u19B3"], /* NEW TAI LUE VOWEL SIGN U */ + ["\u19B4", "\u19B4"], /* NEW TAI LUE VOWEL SIGN UU */ + ["\u19B5", "\u19B5"], /* NEW TAI LUE VOWEL SIGN E */ + ["\u19B6", "\u19B6"], /* NEW TAI LUE VOWEL SIGN AE */ + ["\u19B7", "\u19B7"], /* NEW TAI LUE VOWEL SIGN O */ + ["\u19B8", "\u19B8"], /* NEW TAI LUE VOWEL SIGN OA */ + ["\u19B9", "\u19B9"], /* NEW TAI LUE VOWEL SIGN UE */ + ["\u19BA", "\u19BA"], /* NEW TAI LUE VOWEL SIGN AY */ + ["\u19BB", "\u19BB"], /* NEW TAI LUE VOWEL SIGN AAY */ + ["\u19BC", "\u19BC"], /* NEW TAI LUE VOWEL SIGN UY */ + ["\u19BD", "\u19BD"], /* NEW TAI LUE VOWEL SIGN OY */ + ["\u19BE", "\u19BE"], /* NEW TAI LUE VOWEL SIGN OAY */ + ["\u19BF", "\u19BF"], /* NEW TAI LUE VOWEL SIGN UEY */ + ["\u19C0", "\u19C0"], /* NEW TAI LUE VOWEL SIGN IY */ + ["\u19C1", "\u19C1"], /* NEW TAI LUE LETTER FINAL V */ + ["\u19C2", "\u19C2"], /* NEW TAI LUE LETTER FINAL NG */ + ["\u19C3", "\u19C3"], /* NEW TAI LUE LETTER FINAL N */ + ["\u19C4", "\u19C4"], /* NEW TAI LUE LETTER FINAL M */ + ["\u19C5", "\u19C5"], /* NEW TAI LUE LETTER FINAL K */ + ["\u19C6", "\u19C6"], /* NEW TAI LUE LETTER FINAL D */ + ["\u19C7", "\u19C7"], /* NEW TAI LUE LETTER FINAL B */ + ["\u19C8", "\u19C8"], /* NEW TAI LUE TONE MARK-1 */ + ["\u19C9", "\u19C9"], /* NEW TAI LUE TONE MARK-2 */ + ["\u19CA", "\u19CA"], + ["\u19CB", "\u19CB"], + ["\u19CC", "\u19CC"], + ["\u19CD", "\u19CD"], + ["\u19CE", "\u19CE"], + ["\u19CF", "\u19CF"], + ["\u19D0", "\u19D0"], /* NEW TAI LUE DIGIT ZERO */ + ["\u19D1", "\u19D1"], /* NEW TAI LUE DIGIT ONE */ + ["\u19D2", "\u19D2"], /* NEW TAI LUE DIGIT TWO */ + ["\u19D3", "\u19D3"], /* NEW TAI LUE DIGIT THREE */ + ["\u19D4", "\u19D4"], /* NEW TAI LUE DIGIT FOUR */ + ["\u19D5", "\u19D5"], /* NEW TAI LUE DIGIT FIVE */ + ["\u19D6", "\u19D6"], /* NEW TAI LUE DIGIT SIX */ + ["\u19D7", "\u19D7"], /* NEW TAI LUE DIGIT SEVEN */ + ["\u19D8", "\u19D8"], /* NEW TAI LUE DIGIT EIGHT */ + ["\u19D9", "\u19D9"], /* NEW TAI LUE DIGIT NINE */ + ["\u19DA", "\u19DA"], /* NEW TAI LUE THAM DIGIT ONE */ + ["\u19DB", "\u19DB"], + ["\u19DC", "\u19DC"], + ["\u19DD", "\u19DD"], + ["\u19DE", "\u19DE"], /* NEW TAI LUE SIGN LAE */ + ["\u19DF", "\u19DF"], /* NEW TAI LUE SIGN LAEV */ + ["\u19E0", "\u19E0"], /* KHMER SYMBOL PATHAMASAT */ + ["\u19E1", "\u19E1"], /* KHMER SYMBOL MUOY KOET */ + ["\u19E2", "\u19E2"], /* KHMER SYMBOL PII KOET */ + ["\u19E3", "\u19E3"], /* KHMER SYMBOL BEI KOET */ + ["\u19E4", "\u19E4"], /* KHMER SYMBOL BUON KOET */ + ["\u19E5", "\u19E5"], /* KHMER SYMBOL PRAM KOET */ + ["\u19E6", "\u19E6"], /* KHMER SYMBOL PRAM-MUOY KOET */ + ["\u19E7", "\u19E7"], /* KHMER SYMBOL PRAM-PII KOET */ + ["\u19E8", "\u19E8"], /* KHMER SYMBOL PRAM-BEI KOET */ + ["\u19E9", "\u19E9"], /* KHMER SYMBOL PRAM-BUON KOET */ + ["\u19EA", "\u19EA"], /* KHMER SYMBOL DAP KOET */ + ["\u19EB", "\u19EB"], /* KHMER SYMBOL DAP-MUOY KOET */ + ["\u19EC", "\u19EC"], /* KHMER SYMBOL DAP-PII KOET */ + ["\u19ED", "\u19ED"], /* KHMER SYMBOL DAP-BEI KOET */ + ["\u19EE", "\u19EE"], /* KHMER SYMBOL DAP-BUON KOET */ + ["\u19EF", "\u19EF"], /* KHMER SYMBOL DAP-PRAM KOET */ + ["\u19F0", "\u19F0"], /* KHMER SYMBOL TUTEYASAT */ + ["\u19F1", "\u19F1"], /* KHMER SYMBOL MUOY ROC */ + ["\u19F2", "\u19F2"], /* KHMER SYMBOL PII ROC */ + ["\u19F3", "\u19F3"], /* KHMER SYMBOL BEI ROC */ + ["\u19F4", "\u19F4"], /* KHMER SYMBOL BUON ROC */ + ["\u19F5", "\u19F5"], /* KHMER SYMBOL PRAM ROC */ + ["\u19F6", "\u19F6"], /* KHMER SYMBOL PRAM-MUOY ROC */ + ["\u19F7", "\u19F7"], /* KHMER SYMBOL PRAM-PII ROC */ + ["\u19F8", "\u19F8"], /* KHMER SYMBOL PRAM-BEI ROC */ + ["\u19F9", "\u19F9"], /* KHMER SYMBOL PRAM-BUON ROC */ + ["\u19FA", "\u19FA"], /* KHMER SYMBOL DAP ROC */ + ["\u19FB", "\u19FB"], /* KHMER SYMBOL DAP-MUOY ROC */ + ["\u19FC", "\u19FC"], /* KHMER SYMBOL DAP-PII ROC */ + ["\u19FD", "\u19FD"], /* KHMER SYMBOL DAP-BEI ROC */ + ["\u19FE", "\u19FE"], /* KHMER SYMBOL DAP-BUON ROC */ + ["\u19FF", "\u19FF"], /* KHMER SYMBOL DAP-PRAM ROC */ + ["\u1A00", "\u1A00"], /* BUGINESE LETTER KA */ + ["\u1A01", "\u1A01"], /* BUGINESE LETTER GA */ + ["\u1A02", "\u1A02"], /* BUGINESE LETTER NGA */ + ["\u1A03", "\u1A03"], /* BUGINESE LETTER NGKA */ + ["\u1A04", "\u1A04"], /* BUGINESE LETTER PA */ + ["\u1A05", "\u1A05"], /* BUGINESE LETTER BA */ + ["\u1A06", "\u1A06"], /* BUGINESE LETTER MA */ + ["\u1A07", "\u1A07"], /* BUGINESE LETTER MPA */ + ["\u1A08", "\u1A08"], /* BUGINESE LETTER TA */ + ["\u1A09", "\u1A09"], /* BUGINESE LETTER DA */ + ["\u1A0A", "\u1A0A"], /* BUGINESE LETTER NA */ + ["\u1A0B", "\u1A0B"], /* BUGINESE LETTER NRA */ + ["\u1A0C", "\u1A0C"], /* BUGINESE LETTER CA */ + ["\u1A0D", "\u1A0D"], /* BUGINESE LETTER JA */ + ["\u1A0E", "\u1A0E"], /* BUGINESE LETTER NYA */ + ["\u1A0F", "\u1A0F"], /* BUGINESE LETTER NYCA */ + ["\u1A10", "\u1A10"], /* BUGINESE LETTER YA */ + ["\u1A11", "\u1A11"], /* BUGINESE LETTER RA */ + ["\u1A12", "\u1A12"], /* BUGINESE LETTER LA */ + ["\u1A13", "\u1A13"], /* BUGINESE LETTER VA */ + ["\u1A14", "\u1A14"], /* BUGINESE LETTER SA */ + ["\u1A15", "\u1A15"], /* BUGINESE LETTER A */ + ["\u1A16", "\u1A16"], /* BUGINESE LETTER HA */ + ["\u1A17", "\u1A17"], /* BUGINESE VOWEL SIGN I */ + ["\u1A18", "\u1A18"], /* BUGINESE VOWEL SIGN U */ + ["\u1A19", "\u1A19"], /* BUGINESE VOWEL SIGN E */ + ["\u1A1A", "\u1A1A"], /* BUGINESE VOWEL SIGN O */ + ["\u1A1B", "\u1A1B"], /* BUGINESE VOWEL SIGN AE */ + ["\u1A1C", "\u1A1C"], + ["\u1A1D", "\u1A1D"], + ["\u1A1E", "\u1A1E"], /* BUGINESE PALLAWA */ + ["\u1A1F", "\u1A1F"], /* BUGINESE END OF SECTION */ + ["\u1A20", "\u1A20"], /* TAI THAM LETTER HIGH KA */ + ["\u1A21", "\u1A21"], /* TAI THAM LETTER HIGH KHA */ + ["\u1A22", "\u1A22"], /* TAI THAM LETTER HIGH KXA */ + ["\u1A23", "\u1A23"], /* TAI THAM LETTER LOW KA */ + ["\u1A24", "\u1A24"], /* TAI THAM LETTER LOW KXA */ + ["\u1A25", "\u1A25"], /* TAI THAM LETTER LOW KHA */ + ["\u1A26", "\u1A26"], /* TAI THAM LETTER NGA */ + ["\u1A27", "\u1A27"], /* TAI THAM LETTER HIGH CA */ + ["\u1A28", "\u1A28"], /* TAI THAM LETTER HIGH CHA */ + ["\u1A29", "\u1A29"], /* TAI THAM LETTER LOW CA */ + ["\u1A2A", "\u1A2A"], /* TAI THAM LETTER LOW SA */ + ["\u1A2B", "\u1A2B"], /* TAI THAM LETTER LOW CHA */ + ["\u1A2C", "\u1A2C"], /* TAI THAM LETTER NYA */ + ["\u1A2D", "\u1A2D"], /* TAI THAM LETTER RATA */ + ["\u1A2E", "\u1A2E"], /* TAI THAM LETTER HIGH RATHA */ + ["\u1A2F", "\u1A2F"], /* TAI THAM LETTER DA */ + ["\u1A30", "\u1A30"], /* TAI THAM LETTER LOW RATHA */ + ["\u1A31", "\u1A31"], /* TAI THAM LETTER RANA */ + ["\u1A32", "\u1A32"], /* TAI THAM LETTER HIGH TA */ + ["\u1A33", "\u1A33"], /* TAI THAM LETTER HIGH THA */ + ["\u1A34", "\u1A34"], /* TAI THAM LETTER LOW TA */ + ["\u1A35", "\u1A35"], /* TAI THAM LETTER LOW THA */ + ["\u1A36", "\u1A36"], /* TAI THAM LETTER NA */ + ["\u1A37", "\u1A37"], /* TAI THAM LETTER BA */ + ["\u1A38", "\u1A38"], /* TAI THAM LETTER HIGH PA */ + ["\u1A39", "\u1A39"], /* TAI THAM LETTER HIGH PHA */ + ["\u1A3A", "\u1A3A"], /* TAI THAM LETTER HIGH FA */ + ["\u1A3B", "\u1A3B"], /* TAI THAM LETTER LOW PA */ + ["\u1A3C", "\u1A3C"], /* TAI THAM LETTER LOW FA */ + ["\u1A3D", "\u1A3D"], /* TAI THAM LETTER LOW PHA */ + ["\u1A3E", "\u1A3E"], /* TAI THAM LETTER MA */ + ["\u1A3F", "\u1A3F"], /* TAI THAM LETTER LOW YA */ + ["\u1A40", "\u1A40"], /* TAI THAM LETTER HIGH YA */ + ["\u1A41", "\u1A41"], /* TAI THAM LETTER RA */ + ["\u1A42", "\u1A42"], /* TAI THAM LETTER RUE */ + ["\u1A43", "\u1A43"], /* TAI THAM LETTER LA */ + ["\u1A44", "\u1A44"], /* TAI THAM LETTER LUE */ + ["\u1A45", "\u1A45"], /* TAI THAM LETTER WA */ + ["\u1A46", "\u1A46"], /* TAI THAM LETTER HIGH SHA */ + ["\u1A47", "\u1A47"], /* TAI THAM LETTER HIGH SSA */ + ["\u1A48", "\u1A48"], /* TAI THAM LETTER HIGH SA */ + ["\u1A49", "\u1A49"], /* TAI THAM LETTER HIGH HA */ + ["\u1A4A", "\u1A4A"], /* TAI THAM LETTER LLA */ + ["\u1A4B", "\u1A4B"], /* TAI THAM LETTER A */ + ["\u1A4C", "\u1A4C"], /* TAI THAM LETTER LOW HA */ + ["\u1A4D", "\u1A4D"], /* TAI THAM LETTER I */ + ["\u1A4E", "\u1A4E"], /* TAI THAM LETTER II */ + ["\u1A4F", "\u1A4F"], /* TAI THAM LETTER U */ + ["\u1A50", "\u1A50"], /* TAI THAM LETTER UU */ + ["\u1A51", "\u1A51"], /* TAI THAM LETTER EE */ + ["\u1A52", "\u1A52"], /* TAI THAM LETTER OO */ + ["\u1A53", "\u1A53"], /* TAI THAM LETTER LAE */ + ["\u1A54", "\u1A54"], /* TAI THAM LETTER GREAT SA */ + ["\u1A55", "\u1A55"], /* TAI THAM CONSONANT SIGN MEDIAL RA */ + ["\u1A56", "\u1A56"], /* TAI THAM CONSONANT SIGN MEDIAL LA */ + ["\u1A57", "\u1A57"], /* TAI THAM CONSONANT SIGN LA TANG LAI */ + ["\u1A58", "\u1A58"], /* TAI THAM SIGN MAI KANG LAI */ + ["\u1A59", "\u1A59"], /* TAI THAM CONSONANT SIGN FINAL NGA */ + ["\u1A5A", "\u1A5A"], /* TAI THAM CONSONANT SIGN LOW PA */ + ["\u1A5B", "\u1A5B"], /* TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA */ + ["\u1A5C", "\u1A5C"], /* TAI THAM CONSONANT SIGN MA */ + ["\u1A5D", "\u1A5D"], /* TAI THAM CONSONANT SIGN BA */ + ["\u1A5E", "\u1A5E"], /* TAI THAM CONSONANT SIGN SA */ + ["\u1A5F", "\u1A5F"], + ["\u1A60", "\u1A60"], /* TAI THAM SIGN SAKOT */ + ["\u1A61", "\u1A61"], /* TAI THAM VOWEL SIGN A */ + ["\u1A62", "\u1A62"], /* TAI THAM VOWEL SIGN MAI SAT */ + ["\u1A63", "\u1A63"], /* TAI THAM VOWEL SIGN AA */ + ["\u1A64", "\u1A64"], /* TAI THAM VOWEL SIGN TALL AA */ + ["\u1A65", "\u1A65"], /* TAI THAM VOWEL SIGN I */ + ["\u1A66", "\u1A66"], /* TAI THAM VOWEL SIGN II */ + ["\u1A67", "\u1A67"], /* TAI THAM VOWEL SIGN UE */ + ["\u1A68", "\u1A68"], /* TAI THAM VOWEL SIGN UUE */ + ["\u1A69", "\u1A69"], /* TAI THAM VOWEL SIGN U */ + ["\u1A6A", "\u1A6A"], /* TAI THAM VOWEL SIGN UU */ + ["\u1A6B", "\u1A6B"], /* TAI THAM VOWEL SIGN O */ + ["\u1A6C", "\u1A6C"], /* TAI THAM VOWEL SIGN OA BELOW */ + ["\u1A6D", "\u1A6D"], /* TAI THAM VOWEL SIGN OY */ + ["\u1A6E", "\u1A6E"], /* TAI THAM VOWEL SIGN E */ + ["\u1A6F", "\u1A6F"], /* TAI THAM VOWEL SIGN AE */ + ["\u1A70", "\u1A70"], /* TAI THAM VOWEL SIGN OO */ + ["\u1A71", "\u1A71"], /* TAI THAM VOWEL SIGN AI */ + ["\u1A72", "\u1A72"], /* TAI THAM VOWEL SIGN THAM AI */ + ["\u1A73", "\u1A73"], /* TAI THAM VOWEL SIGN OA ABOVE */ + ["\u1A74", "\u1A74"], /* TAI THAM SIGN MAI KANG */ + ["\u1A75", "\u1A75"], /* TAI THAM SIGN TONE-1 */ + ["\u1A76", "\u1A76"], /* TAI THAM SIGN TONE-2 */ + ["\u1A77", "\u1A77"], /* TAI THAM SIGN KHUEN TONE-3 */ + ["\u1A78", "\u1A78"], /* TAI THAM SIGN KHUEN TONE-4 */ + ["\u1A79", "\u1A79"], /* TAI THAM SIGN KHUEN TONE-5 */ + ["\u1A7A", "\u1A7A"], /* TAI THAM SIGN RA HAAM */ + ["\u1A7B", "\u1A7B"], /* TAI THAM SIGN MAI SAM */ + ["\u1A7C", "\u1A7C"], /* TAI THAM SIGN KHUEN-LUE KARAN */ + ["\u1A7D", "\u1A7D"], + ["\u1A7E", "\u1A7E"], + ["\u1A7F", "\u1A7F"], /* TAI THAM COMBINING CRYPTOGRAMMIC DOT */ + ["\u1A80", "\u1A80"], /* TAI THAM HORA DIGIT ZERO */ + ["\u1A81", "\u1A81"], /* TAI THAM HORA DIGIT ONE */ + ["\u1A82", "\u1A82"], /* TAI THAM HORA DIGIT TWO */ + ["\u1A83", "\u1A83"], /* TAI THAM HORA DIGIT THREE */ + ["\u1A84", "\u1A84"], /* TAI THAM HORA DIGIT FOUR */ + ["\u1A85", "\u1A85"], /* TAI THAM HORA DIGIT FIVE */ + ["\u1A86", "\u1A86"], /* TAI THAM HORA DIGIT SIX */ + ["\u1A87", "\u1A87"], /* TAI THAM HORA DIGIT SEVEN */ + ["\u1A88", "\u1A88"], /* TAI THAM HORA DIGIT EIGHT */ + ["\u1A89", "\u1A89"], /* TAI THAM HORA DIGIT NINE */ + ["\u1A8A", "\u1A8A"], + ["\u1A8B", "\u1A8B"], + ["\u1A8C", "\u1A8C"], + ["\u1A8D", "\u1A8D"], + ["\u1A8E", "\u1A8E"], + ["\u1A8F", "\u1A8F"], + ["\u1A90", "\u1A90"], /* TAI THAM THAM DIGIT ZERO */ + ["\u1A91", "\u1A91"], /* TAI THAM THAM DIGIT ONE */ + ["\u1A92", "\u1A92"], /* TAI THAM THAM DIGIT TWO */ + ["\u1A93", "\u1A93"], /* TAI THAM THAM DIGIT THREE */ + ["\u1A94", "\u1A94"], /* TAI THAM THAM DIGIT FOUR */ + ["\u1A95", "\u1A95"], /* TAI THAM THAM DIGIT FIVE */ + ["\u1A96", "\u1A96"], /* TAI THAM THAM DIGIT SIX */ + ["\u1A97", "\u1A97"], /* TAI THAM THAM DIGIT SEVEN */ + ["\u1A98", "\u1A98"], /* TAI THAM THAM DIGIT EIGHT */ + ["\u1A99", "\u1A99"], /* TAI THAM THAM DIGIT NINE */ + ["\u1A9A", "\u1A9A"], + ["\u1A9B", "\u1A9B"], + ["\u1A9C", "\u1A9C"], + ["\u1A9D", "\u1A9D"], + ["\u1A9E", "\u1A9E"], + ["\u1A9F", "\u1A9F"], + ["\u1AA0", "\u1AA0"], /* TAI THAM SIGN WIANG */ + ["\u1AA1", "\u1AA1"], /* TAI THAM SIGN WIANGWAAK */ + ["\u1AA2", "\u1AA2"], /* TAI THAM SIGN SAWAN */ + ["\u1AA3", "\u1AA3"], /* TAI THAM SIGN KEOW */ + ["\u1AA4", "\u1AA4"], /* TAI THAM SIGN HOY */ + ["\u1AA5", "\u1AA5"], /* TAI THAM SIGN DOKMAI */ + ["\u1AA6", "\u1AA6"], /* TAI THAM SIGN REVERSED ROTATED RANA */ + ["\u1AA7", "\u1AA7"], /* TAI THAM SIGN MAI YAMOK */ + ["\u1AA8", "\u1AA8"], /* TAI THAM SIGN KAAN */ + ["\u1AA9", "\u1AA9"], /* TAI THAM SIGN KAANKUU */ + ["\u1AAA", "\u1AAA"], /* TAI THAM SIGN SATKAAN */ + ["\u1AAB", "\u1AAB"], /* TAI THAM SIGN SATKAANKUU */ + ["\u1AAC", "\u1AAC"], /* TAI THAM SIGN HANG */ + ["\u1AAD", "\u1AAD"], /* TAI THAM SIGN CAANG */ + ["\u1AAE", "\u1AAE"], + ["\u1AAF", "\u1AAF"], + ["\u1AB0", "\u1AB0"], /* COMBINING DOUBLED CIRCUMFLEX ACCENT */ + ["\u1AB1", "\u1AB1"], /* COMBINING DIAERESIS-RING */ + ["\u1AB2", "\u1AB2"], /* COMBINING INFINITY */ + ["\u1AB3", "\u1AB3"], /* COMBINING DOWNWARDS ARROW */ + ["\u1AB4", "\u1AB4"], /* COMBINING TRIPLE DOT */ + ["\u1AB5", "\u1AB5"], /* COMBINING X-X BELOW */ + ["\u1AB6", "\u1AB6"], /* COMBINING WIGGLY LINE BELOW */ + ["\u1AB7", "\u1AB7"], /* COMBINING OPEN MARK BELOW */ + ["\u1AB8", "\u1AB8"], /* COMBINING DOUBLE OPEN MARK BELOW */ + ["\u1AB9", "\u1AB9"], /* COMBINING LIGHT CENTRALIZATION STROKE BELOW */ + ["\u1ABA", "\u1ABA"], /* COMBINING STRONG CENTRALIZATION STROKE BELOW */ + ["\u1ABB", "\u1ABB"], /* COMBINING PARENTHESES ABOVE */ + ["\u1ABC", "\u1ABC"], /* COMBINING DOUBLE PARENTHESES ABOVE */ + ["\u1ABD", "\u1ABD"], /* COMBINING PARENTHESES BELOW */ + ["\u1ABE", "\u1ABE"], /* COMBINING PARENTHESES OVERLAY */ + ["\u1ABF", "\u1ABF"], /* COMBINING LATIN SMALL LETTER W BELOW */ + ["\u1AC0", "\u1AC0"], /* COMBINING LATIN SMALL LETTER TURNED W BELOW */ + ["\u1AC1", "\u1AC1"], /* COMBINING LEFT PARENTHESIS ABOVE LEFT */ + ["\u1AC2", "\u1AC2"], /* COMBINING RIGHT PARENTHESIS ABOVE RIGHT */ + ["\u1AC3", "\u1AC3"], /* COMBINING LEFT PARENTHESIS BELOW LEFT */ + ["\u1AC4", "\u1AC4"], /* COMBINING RIGHT PARENTHESIS BELOW RIGHT */ + ["\u1AC5", "\u1AC5"], /* COMBINING SQUARE BRACKETS ABOVE */ + ["\u1AC6", "\u1AC6"], /* COMBINING NUMBER SIGN ABOVE */ + ["\u1AC7", "\u1AC7"], /* COMBINING INVERTED DOUBLE ARCH ABOVE */ + ["\u1AC8", "\u1AC8"], /* COMBINING PLUS SIGN ABOVE */ + ["\u1AC9", "\u1AC9"], /* COMBINING DOUBLE PLUS SIGN ABOVE */ + ["\u1ACA", "\u1ACA"], /* COMBINING DOUBLE PLUS SIGN BELOW */ + ["\u1ACB", "\u1ACB"], /* COMBINING TRIPLE ACUTE ACCENT */ + ["\u1ACC", "\u1ACC"], /* COMBINING LATIN SMALL LETTER INSULAR G */ + ["\u1ACD", "\u1ACD"], /* COMBINING LATIN SMALL LETTER INSULAR R */ + ["\u1ACE", "\u1ACE"], /* COMBINING LATIN SMALL LETTER INSULAR T */ + ["\u1ACF", "\u1ACF"], + ["\u1AD0", "\u1AD0"], + ["\u1AD1", "\u1AD1"], + ["\u1AD2", "\u1AD2"], + ["\u1AD3", "\u1AD3"], + ["\u1AD4", "\u1AD4"], + ["\u1AD5", "\u1AD5"], + ["\u1AD6", "\u1AD6"], + ["\u1AD7", "\u1AD7"], + ["\u1AD8", "\u1AD8"], + ["\u1AD9", "\u1AD9"], + ["\u1ADA", "\u1ADA"], + ["\u1ADB", "\u1ADB"], + ["\u1ADC", "\u1ADC"], + ["\u1ADD", "\u1ADD"], + ["\u1ADE", "\u1ADE"], + ["\u1ADF", "\u1ADF"], + ["\u1AE0", "\u1AE0"], + ["\u1AE1", "\u1AE1"], + ["\u1AE2", "\u1AE2"], + ["\u1AE3", "\u1AE3"], + ["\u1AE4", "\u1AE4"], + ["\u1AE5", "\u1AE5"], + ["\u1AE6", "\u1AE6"], + ["\u1AE7", "\u1AE7"], + ["\u1AE8", "\u1AE8"], + ["\u1AE9", "\u1AE9"], + ["\u1AEA", "\u1AEA"], + ["\u1AEB", "\u1AEB"], + ["\u1AEC", "\u1AEC"], + ["\u1AED", "\u1AED"], + ["\u1AEE", "\u1AEE"], + ["\u1AEF", "\u1AEF"], + ["\u1AF0", "\u1AF0"], + ["\u1AF1", "\u1AF1"], + ["\u1AF2", "\u1AF2"], + ["\u1AF3", "\u1AF3"], + ["\u1AF4", "\u1AF4"], + ["\u1AF5", "\u1AF5"], + ["\u1AF6", "\u1AF6"], + ["\u1AF7", "\u1AF7"], + ["\u1AF8", "\u1AF8"], + ["\u1AF9", "\u1AF9"], + ["\u1AFA", "\u1AFA"], + ["\u1AFB", "\u1AFB"], + ["\u1AFC", "\u1AFC"], + ["\u1AFD", "\u1AFD"], + ["\u1AFE", "\u1AFE"], + ["\u1AFF", "\u1AFF"], + ["\u1B00", "\u1B00"], /* BALINESE SIGN ULU RICEM */ + ["\u1B01", "\u1B01"], /* BALINESE SIGN ULU CANDRA */ + ["\u1B02", "\u1B02"], /* BALINESE SIGN CECEK */ + ["\u1B03", "\u1B03"], /* BALINESE SIGN SURANG */ + ["\u1B04", "\u1B04"], /* BALINESE SIGN BISAH */ + ["\u1B05", "\u1B05"], /* BALINESE LETTER AKARA */ + ["\u1B06", "\u1B06"], /* BALINESE LETTER AKARA TEDUNG */ + ["\u1B07", "\u1B07"], /* BALINESE LETTER IKARA */ + ["\u1B08", "\u1B08"], /* BALINESE LETTER IKARA TEDUNG */ + ["\u1B09", "\u1B09"], /* BALINESE LETTER UKARA */ + ["\u1B0A", "\u1B0A"], /* BALINESE LETTER UKARA TEDUNG */ + ["\u1B0B", "\u1B0B"], /* BALINESE LETTER RA REPA */ + ["\u1B0C", "\u1B0C"], /* BALINESE LETTER RA REPA TEDUNG */ + ["\u1B0D", "\u1B0D"], /* BALINESE LETTER LA LENGA */ + ["\u1B0E", "\u1B0E"], /* BALINESE LETTER LA LENGA TEDUNG */ + ["\u1B0F", "\u1B0F"], /* BALINESE LETTER EKARA */ + ["\u1B10", "\u1B10"], /* BALINESE LETTER AIKARA */ + ["\u1B11", "\u1B11"], /* BALINESE LETTER OKARA */ + ["\u1B12", "\u1B12"], /* BALINESE LETTER OKARA TEDUNG */ + ["\u1B13", "\u1B13"], /* BALINESE LETTER KA */ + ["\u1B14", "\u1B14"], /* BALINESE LETTER KA MAHAPRANA */ + ["\u1B15", "\u1B15"], /* BALINESE LETTER GA */ + ["\u1B16", "\u1B16"], /* BALINESE LETTER GA GORA */ + ["\u1B17", "\u1B17"], /* BALINESE LETTER NGA */ + ["\u1B18", "\u1B18"], /* BALINESE LETTER CA */ + ["\u1B19", "\u1B19"], /* BALINESE LETTER CA LACA */ + ["\u1B1A", "\u1B1A"], /* BALINESE LETTER JA */ + ["\u1B1B", "\u1B1B"], /* BALINESE LETTER JA JERA */ + ["\u1B1C", "\u1B1C"], /* BALINESE LETTER NYA */ + ["\u1B1D", "\u1B1D"], /* BALINESE LETTER TA LATIK */ + ["\u1B1E", "\u1B1E"], /* BALINESE LETTER TA MURDA MAHAPRANA */ + ["\u1B1F", "\u1B1F"], /* BALINESE LETTER DA MURDA ALPAPRANA */ + ["\u1B20", "\u1B20"], /* BALINESE LETTER DA MURDA MAHAPRANA */ + ["\u1B21", "\u1B21"], /* BALINESE LETTER NA RAMBAT */ + ["\u1B22", "\u1B22"], /* BALINESE LETTER TA */ + ["\u1B23", "\u1B23"], /* BALINESE LETTER TA TAWA */ + ["\u1B24", "\u1B24"], /* BALINESE LETTER DA */ + ["\u1B25", "\u1B25"], /* BALINESE LETTER DA MADU */ + ["\u1B26", "\u1B26"], /* BALINESE LETTER NA */ + ["\u1B27", "\u1B27"], /* BALINESE LETTER PA */ + ["\u1B28", "\u1B28"], /* BALINESE LETTER PA KAPAL */ + ["\u1B29", "\u1B29"], /* BALINESE LETTER BA */ + ["\u1B2A", "\u1B2A"], /* BALINESE LETTER BA KEMBANG */ + ["\u1B2B", "\u1B2B"], /* BALINESE LETTER MA */ + ["\u1B2C", "\u1B2C"], /* BALINESE LETTER YA */ + ["\u1B2D", "\u1B2D"], /* BALINESE LETTER RA */ + ["\u1B2E", "\u1B2E"], /* BALINESE LETTER LA */ + ["\u1B2F", "\u1B2F"], /* BALINESE LETTER WA */ + ["\u1B30", "\u1B30"], /* BALINESE LETTER SA SAGA */ + ["\u1B31", "\u1B31"], /* BALINESE LETTER SA SAPA */ + ["\u1B32", "\u1B32"], /* BALINESE LETTER SA */ + ["\u1B33", "\u1B33"], /* BALINESE LETTER HA */ + ["\u1B34", "\u1B34"], /* BALINESE SIGN REREKAN */ + ["\u1B35", "\u1B35"], /* BALINESE VOWEL SIGN TEDUNG */ + ["\u1B36", "\u1B36"], /* BALINESE VOWEL SIGN ULU */ + ["\u1B37", "\u1B37"], /* BALINESE VOWEL SIGN ULU SARI */ + ["\u1B38", "\u1B38"], /* BALINESE VOWEL SIGN SUKU */ + ["\u1B39", "\u1B39"], /* BALINESE VOWEL SIGN SUKU ILUT */ + ["\u1B3A", "\u1B3A"], /* BALINESE VOWEL SIGN RA REPA */ + ["\u1B3B", "\u1B3B"], /* BALINESE VOWEL SIGN RA REPA TEDUNG */ + ["\u1B3C", "\u1B3C"], /* BALINESE VOWEL SIGN LA LENGA */ + ["\u1B3D", "\u1B3D"], /* BALINESE VOWEL SIGN LA LENGA TEDUNG */ + ["\u1B3E", "\u1B3E"], /* BALINESE VOWEL SIGN TALING */ + ["\u1B3F", "\u1B3F"], /* BALINESE VOWEL SIGN TALING REPA */ + ["\u1B40", "\u1B40"], /* BALINESE VOWEL SIGN TALING TEDUNG */ + ["\u1B41", "\u1B41"], /* BALINESE VOWEL SIGN TALING REPA TEDUNG */ + ["\u1B42", "\u1B42"], /* BALINESE VOWEL SIGN PEPET */ + ["\u1B43", "\u1B43"], /* BALINESE VOWEL SIGN PEPET TEDUNG */ + ["\u1B44", "\u1B44"], /* BALINESE ADEG ADEG */ + ["\u1B45", "\u1B45"], /* BALINESE LETTER KAF SASAK */ + ["\u1B46", "\u1B46"], /* BALINESE LETTER KHOT SASAK */ + ["\u1B47", "\u1B47"], /* BALINESE LETTER TZIR SASAK */ + ["\u1B48", "\u1B48"], /* BALINESE LETTER EF SASAK */ + ["\u1B49", "\u1B49"], /* BALINESE LETTER VE SASAK */ + ["\u1B4A", "\u1B4A"], /* BALINESE LETTER ZAL SASAK */ + ["\u1B4B", "\u1B4B"], /* BALINESE LETTER ASYURA SASAK */ + ["\u1B4C", "\u1B4C"], /* BALINESE LETTER ARCHAIC JNYA */ + ["\u1B4D", "\u1B4D"], + ["\u1B4E", "\u1B4E"], + ["\u1B4F", "\u1B4F"], + ["\u1B50", "\u1B50"], /* BALINESE DIGIT ZERO */ + ["\u1B51", "\u1B51"], /* BALINESE DIGIT ONE */ + ["\u1B52", "\u1B52"], /* BALINESE DIGIT TWO */ + ["\u1B53", "\u1B53"], /* BALINESE DIGIT THREE */ + ["\u1B54", "\u1B54"], /* BALINESE DIGIT FOUR */ + ["\u1B55", "\u1B55"], /* BALINESE DIGIT FIVE */ + ["\u1B56", "\u1B56"], /* BALINESE DIGIT SIX */ + ["\u1B57", "\u1B57"], /* BALINESE DIGIT SEVEN */ + ["\u1B58", "\u1B58"], /* BALINESE DIGIT EIGHT */ + ["\u1B59", "\u1B59"], /* BALINESE DIGIT NINE */ + ["\u1B5A", "\u1B5A"], /* BALINESE PANTI */ + ["\u1B5B", "\u1B5B"], /* BALINESE PAMADA */ + ["\u1B5C", "\u1B5C"], /* BALINESE WINDU */ + ["\u1B5D", "\u1B5D"], /* BALINESE CARIK PAMUNGKAH */ + ["\u1B5E", "\u1B5E"], /* BALINESE CARIK SIKI */ + ["\u1B5F", "\u1B5F"], /* BALINESE CARIK PAREREN */ + ["\u1B60", "\u1B60"], /* BALINESE PAMENENG */ + ["\u1B61", "\u1B61"], /* BALINESE MUSICAL SYMBOL DONG */ + ["\u1B62", "\u1B62"], /* BALINESE MUSICAL SYMBOL DENG */ + ["\u1B63", "\u1B63"], /* BALINESE MUSICAL SYMBOL DUNG */ + ["\u1B64", "\u1B64"], /* BALINESE MUSICAL SYMBOL DANG */ + ["\u1B65", "\u1B65"], /* BALINESE MUSICAL SYMBOL DANG SURANG */ + ["\u1B66", "\u1B66"], /* BALINESE MUSICAL SYMBOL DING */ + ["\u1B67", "\u1B67"], /* BALINESE MUSICAL SYMBOL DAENG */ + ["\u1B68", "\u1B68"], /* BALINESE MUSICAL SYMBOL DEUNG */ + ["\u1B69", "\u1B69"], /* BALINESE MUSICAL SYMBOL DAING */ + ["\u1B6A", "\u1B6A"], /* BALINESE MUSICAL SYMBOL DANG GEDE */ + ["\u1B6B", "\u1B6B"], /* BALINESE MUSICAL SYMBOL COMBINING TEGEH */ + ["\u1B6C", "\u1B6C"], /* BALINESE MUSICAL SYMBOL COMBINING ENDEP */ + ["\u1B6D", "\u1B6D"], /* BALINESE MUSICAL SYMBOL COMBINING KEMPUL */ + ["\u1B6E", "\u1B6E"], /* BALINESE MUSICAL SYMBOL COMBINING KEMPLI */ + ["\u1B6F", "\u1B6F"], /* BALINESE MUSICAL SYMBOL COMBINING JEGOGAN */ + ["\u1B70", "\u1B70"], /* BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN */ + ["\u1B71", "\u1B71"], /* BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN */ + ["\u1B72", "\u1B72"], /* BALINESE MUSICAL SYMBOL COMBINING BENDE */ + ["\u1B73", "\u1B73"], /* BALINESE MUSICAL SYMBOL COMBINING GONG */ + ["\u1B74", "\u1B74"], /* BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG */ + ["\u1B75", "\u1B75"], /* BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG */ + ["\u1B76", "\u1B76"], /* BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK */ + ["\u1B77", "\u1B77"], /* BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK */ + ["\u1B78", "\u1B78"], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG */ + ["\u1B79", "\u1B79"], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG */ + ["\u1B7A", "\u1B7A"], /* BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK */ + ["\u1B7B", "\u1B7B"], /* BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK */ + ["\u1B7C", "\u1B7C"], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING */ + ["\u1B7D", "\u1B7D"], /* BALINESE PANTI LANTANG */ + ["\u1B7E", "\u1B7E"], /* BALINESE PAMADA LANTANG */ + ["\u1B7F", "\u1B7F"], + ["\u1B80", "\u1B80"], /* SUNDANESE SIGN PANYECEK */ + ["\u1B81", "\u1B81"], /* SUNDANESE SIGN PANGLAYAR */ + ["\u1B82", "\u1B82"], /* SUNDANESE SIGN PANGWISAD */ + ["\u1B83", "\u1B83"], /* SUNDANESE LETTER A */ + ["\u1B84", "\u1B84"], /* SUNDANESE LETTER I */ + ["\u1B85", "\u1B85"], /* SUNDANESE LETTER U */ + ["\u1B86", "\u1B86"], /* SUNDANESE LETTER AE */ + ["\u1B87", "\u1B87"], /* SUNDANESE LETTER O */ + ["\u1B88", "\u1B88"], /* SUNDANESE LETTER E */ + ["\u1B89", "\u1B89"], /* SUNDANESE LETTER EU */ + ["\u1B8A", "\u1B8A"], /* SUNDANESE LETTER KA */ + ["\u1B8B", "\u1B8B"], /* SUNDANESE LETTER QA */ + ["\u1B8C", "\u1B8C"], /* SUNDANESE LETTER GA */ + ["\u1B8D", "\u1B8D"], /* SUNDANESE LETTER NGA */ + ["\u1B8E", "\u1B8E"], /* SUNDANESE LETTER CA */ + ["\u1B8F", "\u1B8F"], /* SUNDANESE LETTER JA */ + ["\u1B90", "\u1B90"], /* SUNDANESE LETTER ZA */ + ["\u1B91", "\u1B91"], /* SUNDANESE LETTER NYA */ + ["\u1B92", "\u1B92"], /* SUNDANESE LETTER TA */ + ["\u1B93", "\u1B93"], /* SUNDANESE LETTER DA */ + ["\u1B94", "\u1B94"], /* SUNDANESE LETTER NA */ + ["\u1B95", "\u1B95"], /* SUNDANESE LETTER PA */ + ["\u1B96", "\u1B96"], /* SUNDANESE LETTER FA */ + ["\u1B97", "\u1B97"], /* SUNDANESE LETTER VA */ + ["\u1B98", "\u1B98"], /* SUNDANESE LETTER BA */ + ["\u1B99", "\u1B99"], /* SUNDANESE LETTER MA */ + ["\u1B9A", "\u1B9A"], /* SUNDANESE LETTER YA */ + ["\u1B9B", "\u1B9B"], /* SUNDANESE LETTER RA */ + ["\u1B9C", "\u1B9C"], /* SUNDANESE LETTER LA */ + ["\u1B9D", "\u1B9D"], /* SUNDANESE LETTER WA */ + ["\u1B9E", "\u1B9E"], /* SUNDANESE LETTER SA */ + ["\u1B9F", "\u1B9F"], /* SUNDANESE LETTER XA */ + ["\u1BA0", "\u1BA0"], /* SUNDANESE LETTER HA */ + ["\u1BA1", "\u1BA1"], /* SUNDANESE CONSONANT SIGN PAMINGKAL */ + ["\u1BA2", "\u1BA2"], /* SUNDANESE CONSONANT SIGN PANYAKRA */ + ["\u1BA3", "\u1BA3"], /* SUNDANESE CONSONANT SIGN PANYIKU */ + ["\u1BA4", "\u1BA4"], /* SUNDANESE VOWEL SIGN PANGHULU */ + ["\u1BA5", "\u1BA5"], /* SUNDANESE VOWEL SIGN PANYUKU */ + ["\u1BA6", "\u1BA6"], /* SUNDANESE VOWEL SIGN PANAELAENG */ + ["\u1BA7", "\u1BA7"], /* SUNDANESE VOWEL SIGN PANOLONG */ + ["\u1BA8", "\u1BA8"], /* SUNDANESE VOWEL SIGN PAMEPET */ + ["\u1BA9", "\u1BA9"], /* SUNDANESE VOWEL SIGN PANEULEUNG */ + ["\u1BAA", "\u1BAA"], /* SUNDANESE SIGN PAMAAEH */ + ["\u1BAB", "\u1BAB"], /* SUNDANESE SIGN VIRAMA */ + ["\u1BAC", "\u1BAC"], /* SUNDANESE CONSONANT SIGN PASANGAN MA */ + ["\u1BAD", "\u1BAD"], /* SUNDANESE CONSONANT SIGN PASANGAN WA */ + ["\u1BAE", "\u1BAE"], /* SUNDANESE LETTER KHA */ + ["\u1BAF", "\u1BAF"], /* SUNDANESE LETTER SYA */ + ["\u1BB0", "\u1BB0"], /* SUNDANESE DIGIT ZERO */ + ["\u1BB1", "\u1BB1"], /* SUNDANESE DIGIT ONE */ + ["\u1BB2", "\u1BB2"], /* SUNDANESE DIGIT TWO */ + ["\u1BB3", "\u1BB3"], /* SUNDANESE DIGIT THREE */ + ["\u1BB4", "\u1BB4"], /* SUNDANESE DIGIT FOUR */ + ["\u1BB5", "\u1BB5"], /* SUNDANESE DIGIT FIVE */ + ["\u1BB6", "\u1BB6"], /* SUNDANESE DIGIT SIX */ + ["\u1BB7", "\u1BB7"], /* SUNDANESE DIGIT SEVEN */ + ["\u1BB8", "\u1BB8"], /* SUNDANESE DIGIT EIGHT */ + ["\u1BB9", "\u1BB9"], /* SUNDANESE DIGIT NINE */ + ["\u1BBA", "\u1BBA"], /* SUNDANESE AVAGRAHA */ + ["\u1BBB", "\u1BBB"], /* SUNDANESE LETTER REU */ + ["\u1BBC", "\u1BBC"], /* SUNDANESE LETTER LEU */ + ["\u1BBD", "\u1BBD"], /* SUNDANESE LETTER BHA */ + ["\u1BBE", "\u1BBE"], /* SUNDANESE LETTER FINAL K */ + ["\u1BBF", "\u1BBF"], /* SUNDANESE LETTER FINAL M */ + ["\u1BC0", "\u1BC0"], /* BATAK LETTER A */ + ["\u1BC1", "\u1BC1"], /* BATAK LETTER SIMALUNGUN A */ + ["\u1BC2", "\u1BC2"], /* BATAK LETTER HA */ + ["\u1BC3", "\u1BC3"], /* BATAK LETTER SIMALUNGUN HA */ + ["\u1BC4", "\u1BC4"], /* BATAK LETTER MANDAILING HA */ + ["\u1BC5", "\u1BC5"], /* BATAK LETTER BA */ + ["\u1BC6", "\u1BC6"], /* BATAK LETTER KARO BA */ + ["\u1BC7", "\u1BC7"], /* BATAK LETTER PA */ + ["\u1BC8", "\u1BC8"], /* BATAK LETTER SIMALUNGUN PA */ + ["\u1BC9", "\u1BC9"], /* BATAK LETTER NA */ + ["\u1BCA", "\u1BCA"], /* BATAK LETTER MANDAILING NA */ + ["\u1BCB", "\u1BCB"], /* BATAK LETTER WA */ + ["\u1BCC", "\u1BCC"], /* BATAK LETTER SIMALUNGUN WA */ + ["\u1BCD", "\u1BCD"], /* BATAK LETTER PAKPAK WA */ + ["\u1BCE", "\u1BCE"], /* BATAK LETTER GA */ + ["\u1BCF", "\u1BCF"], /* BATAK LETTER SIMALUNGUN GA */ + ["\u1BD0", "\u1BD0"], /* BATAK LETTER JA */ + ["\u1BD1", "\u1BD1"], /* BATAK LETTER DA */ + ["\u1BD2", "\u1BD2"], /* BATAK LETTER RA */ + ["\u1BD3", "\u1BD3"], /* BATAK LETTER SIMALUNGUN RA */ + ["\u1BD4", "\u1BD4"], /* BATAK LETTER MA */ + ["\u1BD5", "\u1BD5"], /* BATAK LETTER SIMALUNGUN MA */ + ["\u1BD6", "\u1BD6"], /* BATAK LETTER SOUTHERN TA */ + ["\u1BD7", "\u1BD7"], /* BATAK LETTER NORTHERN TA */ + ["\u1BD8", "\u1BD8"], /* BATAK LETTER SA */ + ["\u1BD9", "\u1BD9"], /* BATAK LETTER SIMALUNGUN SA */ + ["\u1BDA", "\u1BDA"], /* BATAK LETTER MANDAILING SA */ + ["\u1BDB", "\u1BDB"], /* BATAK LETTER YA */ + ["\u1BDC", "\u1BDC"], /* BATAK LETTER SIMALUNGUN YA */ + ["\u1BDD", "\u1BDD"], /* BATAK LETTER NGA */ + ["\u1BDE", "\u1BDE"], /* BATAK LETTER LA */ + ["\u1BDF", "\u1BDF"], /* BATAK LETTER SIMALUNGUN LA */ + ["\u1BE0", "\u1BE0"], /* BATAK LETTER NYA */ + ["\u1BE1", "\u1BE1"], /* BATAK LETTER CA */ + ["\u1BE2", "\u1BE2"], /* BATAK LETTER NDA */ + ["\u1BE3", "\u1BE3"], /* BATAK LETTER MBA */ + ["\u1BE4", "\u1BE4"], /* BATAK LETTER I */ + ["\u1BE5", "\u1BE5"], /* BATAK LETTER U */ + ["\u1BE6", "\u1BE6"], /* BATAK SIGN TOMPI */ + ["\u1BE7", "\u1BE7"], /* BATAK VOWEL SIGN E */ + ["\u1BE8", "\u1BE8"], /* BATAK VOWEL SIGN PAKPAK E */ + ["\u1BE9", "\u1BE9"], /* BATAK VOWEL SIGN EE */ + ["\u1BEA", "\u1BEA"], /* BATAK VOWEL SIGN I */ + ["\u1BEB", "\u1BEB"], /* BATAK VOWEL SIGN KARO I */ + ["\u1BEC", "\u1BEC"], /* BATAK VOWEL SIGN O */ + ["\u1BED", "\u1BED"], /* BATAK VOWEL SIGN KARO O */ + ["\u1BEE", "\u1BEE"], /* BATAK VOWEL SIGN U */ + ["\u1BEF", "\u1BEF"], /* BATAK VOWEL SIGN U FOR SIMALUNGUN SA */ + ["\u1BF0", "\u1BF0"], /* BATAK CONSONANT SIGN NG */ + ["\u1BF1", "\u1BF1"], /* BATAK CONSONANT SIGN H */ + ["\u1BF2", "\u1BF2"], /* BATAK PANGOLAT */ + ["\u1BF3", "\u1BF3"], /* BATAK PANONGONAN */ + ["\u1BF4", "\u1BF4"], + ["\u1BF5", "\u1BF5"], + ["\u1BF6", "\u1BF6"], + ["\u1BF7", "\u1BF7"], + ["\u1BF8", "\u1BF8"], + ["\u1BF9", "\u1BF9"], + ["\u1BFA", "\u1BFA"], + ["\u1BFB", "\u1BFB"], + ["\u1BFC", "\u1BFC"], /* BATAK SYMBOL BINDU NA METEK */ + ["\u1BFD", "\u1BFD"], /* BATAK SYMBOL BINDU PINARBORAS */ + ["\u1BFE", "\u1BFE"], /* BATAK SYMBOL BINDU JUDUL */ + ["\u1BFF", "\u1BFF"], /* BATAK SYMBOL BINDU PANGOLAT */ + ["\u1C00", "\u1C00"], /* LEPCHA LETTER KA */ + ["\u1C01", "\u1C01"], /* LEPCHA LETTER KLA */ + ["\u1C02", "\u1C02"], /* LEPCHA LETTER KHA */ + ["\u1C03", "\u1C03"], /* LEPCHA LETTER GA */ + ["\u1C04", "\u1C04"], /* LEPCHA LETTER GLA */ + ["\u1C05", "\u1C05"], /* LEPCHA LETTER NGA */ + ["\u1C06", "\u1C06"], /* LEPCHA LETTER CA */ + ["\u1C07", "\u1C07"], /* LEPCHA LETTER CHA */ + ["\u1C08", "\u1C08"], /* LEPCHA LETTER JA */ + ["\u1C09", "\u1C09"], /* LEPCHA LETTER NYA */ + ["\u1C0A", "\u1C0A"], /* LEPCHA LETTER TA */ + ["\u1C0B", "\u1C0B"], /* LEPCHA LETTER THA */ + ["\u1C0C", "\u1C0C"], /* LEPCHA LETTER DA */ + ["\u1C0D", "\u1C0D"], /* LEPCHA LETTER NA */ + ["\u1C0E", "\u1C0E"], /* LEPCHA LETTER PA */ + ["\u1C0F", "\u1C0F"], /* LEPCHA LETTER PLA */ + ["\u1C10", "\u1C10"], /* LEPCHA LETTER PHA */ + ["\u1C11", "\u1C11"], /* LEPCHA LETTER FA */ + ["\u1C12", "\u1C12"], /* LEPCHA LETTER FLA */ + ["\u1C13", "\u1C13"], /* LEPCHA LETTER BA */ + ["\u1C14", "\u1C14"], /* LEPCHA LETTER BLA */ + ["\u1C15", "\u1C15"], /* LEPCHA LETTER MA */ + ["\u1C16", "\u1C16"], /* LEPCHA LETTER MLA */ + ["\u1C17", "\u1C17"], /* LEPCHA LETTER TSA */ + ["\u1C18", "\u1C18"], /* LEPCHA LETTER TSHA */ + ["\u1C19", "\u1C19"], /* LEPCHA LETTER DZA */ + ["\u1C1A", "\u1C1A"], /* LEPCHA LETTER YA */ + ["\u1C1B", "\u1C1B"], /* LEPCHA LETTER RA */ + ["\u1C1C", "\u1C1C"], /* LEPCHA LETTER LA */ + ["\u1C1D", "\u1C1D"], /* LEPCHA LETTER HA */ + ["\u1C1E", "\u1C1E"], /* LEPCHA LETTER HLA */ + ["\u1C1F", "\u1C1F"], /* LEPCHA LETTER VA */ + ["\u1C20", "\u1C20"], /* LEPCHA LETTER SA */ + ["\u1C21", "\u1C21"], /* LEPCHA LETTER SHA */ + ["\u1C22", "\u1C22"], /* LEPCHA LETTER WA */ + ["\u1C23", "\u1C23"], /* LEPCHA LETTER A */ + ["\u1C24", "\u1C24"], /* LEPCHA SUBJOINED LETTER YA */ + ["\u1C25", "\u1C25"], /* LEPCHA SUBJOINED LETTER RA */ + ["\u1C26", "\u1C26"], /* LEPCHA VOWEL SIGN AA */ + ["\u1C27", "\u1C27"], /* LEPCHA VOWEL SIGN I */ + ["\u1C28", "\u1C28"], /* LEPCHA VOWEL SIGN O */ + ["\u1C29", "\u1C29"], /* LEPCHA VOWEL SIGN OO */ + ["\u1C2A", "\u1C2A"], /* LEPCHA VOWEL SIGN U */ + ["\u1C2B", "\u1C2B"], /* LEPCHA VOWEL SIGN UU */ + ["\u1C2C", "\u1C2C"], /* LEPCHA VOWEL SIGN E */ + ["\u1C2D", "\u1C2D"], /* LEPCHA CONSONANT SIGN K */ + ["\u1C2E", "\u1C2E"], /* LEPCHA CONSONANT SIGN M */ + ["\u1C2F", "\u1C2F"], /* LEPCHA CONSONANT SIGN L */ + ["\u1C30", "\u1C30"], /* LEPCHA CONSONANT SIGN N */ + ["\u1C31", "\u1C31"], /* LEPCHA CONSONANT SIGN P */ + ["\u1C32", "\u1C32"], /* LEPCHA CONSONANT SIGN R */ + ["\u1C33", "\u1C33"], /* LEPCHA CONSONANT SIGN T */ + ["\u1C34", "\u1C34"], /* LEPCHA CONSONANT SIGN NYIN-DO */ + ["\u1C35", "\u1C35"], /* LEPCHA CONSONANT SIGN KANG */ + ["\u1C36", "\u1C36"], /* LEPCHA SIGN RAN */ + ["\u1C37", "\u1C37"], /* LEPCHA SIGN NUKTA */ + ["\u1C38", "\u1C38"], + ["\u1C39", "\u1C39"], + ["\u1C3A", "\u1C3A"], + ["\u1C3B", "\u1C3B"], /* LEPCHA PUNCTUATION TA-ROL */ + ["\u1C3C", "\u1C3C"], /* LEPCHA PUNCTUATION NYET THYOOM TA-ROL */ + ["\u1C3D", "\u1C3D"], /* LEPCHA PUNCTUATION CER-WA */ + ["\u1C3E", "\u1C3E"], /* LEPCHA PUNCTUATION TSHOOK CER-WA */ + ["\u1C3F", "\u1C3F"], /* LEPCHA PUNCTUATION TSHOOK */ + ["\u1C40", "\u1C40"], /* LEPCHA DIGIT ZERO */ + ["\u1C41", "\u1C41"], /* LEPCHA DIGIT ONE */ + ["\u1C42", "\u1C42"], /* LEPCHA DIGIT TWO */ + ["\u1C43", "\u1C43"], /* LEPCHA DIGIT THREE */ + ["\u1C44", "\u1C44"], /* LEPCHA DIGIT FOUR */ + ["\u1C45", "\u1C45"], /* LEPCHA DIGIT FIVE */ + ["\u1C46", "\u1C46"], /* LEPCHA DIGIT SIX */ + ["\u1C47", "\u1C47"], /* LEPCHA DIGIT SEVEN */ + ["\u1C48", "\u1C48"], /* LEPCHA DIGIT EIGHT */ + ["\u1C49", "\u1C49"], /* LEPCHA DIGIT NINE */ + ["\u1C4A", "\u1C4A"], + ["\u1C4B", "\u1C4B"], + ["\u1C4C", "\u1C4C"], + ["\u1C4D", "\u1C4D"], /* LEPCHA LETTER TTA */ + ["\u1C4E", "\u1C4E"], /* LEPCHA LETTER TTHA */ + ["\u1C4F", "\u1C4F"], /* LEPCHA LETTER DDA */ + ["\u1C50", "\u1C50"], /* OL CHIKI DIGIT ZERO */ + ["\u1C51", "\u1C51"], /* OL CHIKI DIGIT ONE */ + ["\u1C52", "\u1C52"], /* OL CHIKI DIGIT TWO */ + ["\u1C53", "\u1C53"], /* OL CHIKI DIGIT THREE */ + ["\u1C54", "\u1C54"], /* OL CHIKI DIGIT FOUR */ + ["\u1C55", "\u1C55"], /* OL CHIKI DIGIT FIVE */ + ["\u1C56", "\u1C56"], /* OL CHIKI DIGIT SIX */ + ["\u1C57", "\u1C57"], /* OL CHIKI DIGIT SEVEN */ + ["\u1C58", "\u1C58"], /* OL CHIKI DIGIT EIGHT */ + ["\u1C59", "\u1C59"], /* OL CHIKI DIGIT NINE */ + ["\u1C5A", "\u1C5A"], /* OL CHIKI LETTER LA */ + ["\u1C5B", "\u1C5B"], /* OL CHIKI LETTER AT */ + ["\u1C5C", "\u1C5C"], /* OL CHIKI LETTER AG */ + ["\u1C5D", "\u1C5D"], /* OL CHIKI LETTER ANG */ + ["\u1C5E", "\u1C5E"], /* OL CHIKI LETTER AL */ + ["\u1C5F", "\u1C5F"], /* OL CHIKI LETTER LAA */ + ["\u1C60", "\u1C60"], /* OL CHIKI LETTER AAK */ + ["\u1C61", "\u1C61"], /* OL CHIKI LETTER AAJ */ + ["\u1C62", "\u1C62"], /* OL CHIKI LETTER AAM */ + ["\u1C63", "\u1C63"], /* OL CHIKI LETTER AAW */ + ["\u1C64", "\u1C64"], /* OL CHIKI LETTER LI */ + ["\u1C65", "\u1C65"], /* OL CHIKI LETTER IS */ + ["\u1C66", "\u1C66"], /* OL CHIKI LETTER IH */ + ["\u1C67", "\u1C67"], /* OL CHIKI LETTER INY */ + ["\u1C68", "\u1C68"], /* OL CHIKI LETTER IR */ + ["\u1C69", "\u1C69"], /* OL CHIKI LETTER LU */ + ["\u1C6A", "\u1C6A"], /* OL CHIKI LETTER UC */ + ["\u1C6B", "\u1C6B"], /* OL CHIKI LETTER UD */ + ["\u1C6C", "\u1C6C"], /* OL CHIKI LETTER UNN */ + ["\u1C6D", "\u1C6D"], /* OL CHIKI LETTER UY */ + ["\u1C6E", "\u1C6E"], /* OL CHIKI LETTER LE */ + ["\u1C6F", "\u1C6F"], /* OL CHIKI LETTER EP */ + ["\u1C70", "\u1C70"], /* OL CHIKI LETTER EDD */ + ["\u1C71", "\u1C71"], /* OL CHIKI LETTER EN */ + ["\u1C72", "\u1C72"], /* OL CHIKI LETTER ERR */ + ["\u1C73", "\u1C73"], /* OL CHIKI LETTER LO */ + ["\u1C74", "\u1C74"], /* OL CHIKI LETTER OTT */ + ["\u1C75", "\u1C75"], /* OL CHIKI LETTER OB */ + ["\u1C76", "\u1C76"], /* OL CHIKI LETTER OV */ + ["\u1C77", "\u1C77"], /* OL CHIKI LETTER OH */ + ["\u1C78", "\u1C78"], /* OL CHIKI MU TTUDDAG */ + ["\u1C79", "\u1C79"], /* OL CHIKI GAAHLAA TTUDDAAG */ + ["\u1C7A", "\u1C7A"], /* OL CHIKI MU-GAAHLAA TTUDDAAG */ + ["\u1C7B", "\u1C7B"], /* OL CHIKI RELAA */ + ["\u1C7C", "\u1C7C"], /* OL CHIKI PHAARKAA */ + ["\u1C7D", "\u1C7D"], /* OL CHIKI AHAD */ + ["\u1C7E", "\u1C7E"], /* OL CHIKI PUNCTUATION MUCAAD */ + ["\u1C7F", "\u1C7F"], /* OL CHIKI PUNCTUATION DOUBLE MUCAAD */ + ["\u0412", "\u1C80"], /* CYRILLIC SMALL LETTER ROUNDED VE */ + ["\u0414", "\u1C81"], /* CYRILLIC SMALL LETTER LONG-LEGGED DE */ + ["\u041E", "\u1C82"], /* CYRILLIC SMALL LETTER NARROW O */ + ["\u0421", "\u1C83"], /* CYRILLIC SMALL LETTER WIDE ES */ + ["\u0422", "\u1C84"], /* CYRILLIC SMALL LETTER TALL TE */ + ["\u0422", "\u1C85"], /* CYRILLIC SMALL LETTER THREE-LEGGED TE */ + ["\u042A", "\u1C86"], /* CYRILLIC SMALL LETTER TALL HARD SIGN */ + ["\u0462", "\u1C87"], /* CYRILLIC SMALL LETTER TALL YAT */ + ["\uA64A", "\u1C88"], /* CYRILLIC SMALL LETTER UNBLENDED UK */ + ["\u1C89", "\u1C89"], + ["\u1C8A", "\u1C8A"], + ["\u1C8B", "\u1C8B"], + ["\u1C8C", "\u1C8C"], + ["\u1C8D", "\u1C8D"], + ["\u1C8E", "\u1C8E"], + ["\u1C8F", "\u1C8F"], + ["\u1C90", "\u10D0"], /* GEORGIAN MTAVRULI CAPITAL LETTER AN */ + ["\u1C91", "\u10D1"], /* GEORGIAN MTAVRULI CAPITAL LETTER BAN */ + ["\u1C92", "\u10D2"], /* GEORGIAN MTAVRULI CAPITAL LETTER GAN */ + ["\u1C93", "\u10D3"], /* GEORGIAN MTAVRULI CAPITAL LETTER DON */ + ["\u1C94", "\u10D4"], /* GEORGIAN MTAVRULI CAPITAL LETTER EN */ + ["\u1C95", "\u10D5"], /* GEORGIAN MTAVRULI CAPITAL LETTER VIN */ + ["\u1C96", "\u10D6"], /* GEORGIAN MTAVRULI CAPITAL LETTER ZEN */ + ["\u1C97", "\u10D7"], /* GEORGIAN MTAVRULI CAPITAL LETTER TAN */ + ["\u1C98", "\u10D8"], /* GEORGIAN MTAVRULI CAPITAL LETTER IN */ + ["\u1C99", "\u10D9"], /* GEORGIAN MTAVRULI CAPITAL LETTER KAN */ + ["\u1C9A", "\u10DA"], /* GEORGIAN MTAVRULI CAPITAL LETTER LAS */ + ["\u1C9B", "\u10DB"], /* GEORGIAN MTAVRULI CAPITAL LETTER MAN */ + ["\u1C9C", "\u10DC"], /* GEORGIAN MTAVRULI CAPITAL LETTER NAR */ + ["\u1C9D", "\u10DD"], /* GEORGIAN MTAVRULI CAPITAL LETTER ON */ + ["\u1C9E", "\u10DE"], /* GEORGIAN MTAVRULI CAPITAL LETTER PAR */ + ["\u1C9F", "\u10DF"], /* GEORGIAN MTAVRULI CAPITAL LETTER ZHAR */ + ["\u1CA0", "\u10E0"], /* GEORGIAN MTAVRULI CAPITAL LETTER RAE */ + ["\u1CA1", "\u10E1"], /* GEORGIAN MTAVRULI CAPITAL LETTER SAN */ + ["\u1CA2", "\u10E2"], /* GEORGIAN MTAVRULI CAPITAL LETTER TAR */ + ["\u1CA3", "\u10E3"], /* GEORGIAN MTAVRULI CAPITAL LETTER UN */ + ["\u1CA4", "\u10E4"], /* GEORGIAN MTAVRULI CAPITAL LETTER PHAR */ + ["\u1CA5", "\u10E5"], /* GEORGIAN MTAVRULI CAPITAL LETTER KHAR */ + ["\u1CA6", "\u10E6"], /* GEORGIAN MTAVRULI CAPITAL LETTER GHAN */ + ["\u1CA7", "\u10E7"], /* GEORGIAN MTAVRULI CAPITAL LETTER QAR */ + ["\u1CA8", "\u10E8"], /* GEORGIAN MTAVRULI CAPITAL LETTER SHIN */ + ["\u1CA9", "\u10E9"], /* GEORGIAN MTAVRULI CAPITAL LETTER CHIN */ + ["\u1CAA", "\u10EA"], /* GEORGIAN MTAVRULI CAPITAL LETTER CAN */ + ["\u1CAB", "\u10EB"], /* GEORGIAN MTAVRULI CAPITAL LETTER JIL */ + ["\u1CAC", "\u10EC"], /* GEORGIAN MTAVRULI CAPITAL LETTER CIL */ + ["\u1CAD", "\u10ED"], /* GEORGIAN MTAVRULI CAPITAL LETTER CHAR */ + ["\u1CAE", "\u10EE"], /* GEORGIAN MTAVRULI CAPITAL LETTER XAN */ + ["\u1CAF", "\u10EF"], /* GEORGIAN MTAVRULI CAPITAL LETTER JHAN */ + ["\u1CB0", "\u10F0"], /* GEORGIAN MTAVRULI CAPITAL LETTER HAE */ + ["\u1CB1", "\u10F1"], /* GEORGIAN MTAVRULI CAPITAL LETTER HE */ + ["\u1CB2", "\u10F2"], /* GEORGIAN MTAVRULI CAPITAL LETTER HIE */ + ["\u1CB3", "\u10F3"], /* GEORGIAN MTAVRULI CAPITAL LETTER WE */ + ["\u1CB4", "\u10F4"], /* GEORGIAN MTAVRULI CAPITAL LETTER HAR */ + ["\u1CB5", "\u10F5"], /* GEORGIAN MTAVRULI CAPITAL LETTER HOE */ + ["\u1CB6", "\u10F6"], /* GEORGIAN MTAVRULI CAPITAL LETTER FI */ + ["\u1CB7", "\u10F7"], /* GEORGIAN MTAVRULI CAPITAL LETTER YN */ + ["\u1CB8", "\u10F8"], /* GEORGIAN MTAVRULI CAPITAL LETTER ELIFI */ + ["\u1CB9", "\u10F9"], /* GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN */ + ["\u1CBA", "\u10FA"], /* GEORGIAN MTAVRULI CAPITAL LETTER AIN */ + ["\u1CBB", "\u1CBB"], + ["\u1CBC", "\u1CBC"], + ["\u1CBD", "\u10FD"], /* GEORGIAN MTAVRULI CAPITAL LETTER AEN */ + ["\u1CBE", "\u10FE"], /* GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN */ + ["\u1CBF", "\u10FF"], /* GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN */ + ["\u1CC0", "\u1CC0"], /* SUNDANESE PUNCTUATION BINDU SURYA */ + ["\u1CC1", "\u1CC1"], /* SUNDANESE PUNCTUATION BINDU PANGLONG */ + ["\u1CC2", "\u1CC2"], /* SUNDANESE PUNCTUATION BINDU PURNAMA */ + ["\u1CC3", "\u1CC3"], /* SUNDANESE PUNCTUATION BINDU CAKRA */ + ["\u1CC4", "\u1CC4"], /* SUNDANESE PUNCTUATION BINDU LEU SATANGA */ + ["\u1CC5", "\u1CC5"], /* SUNDANESE PUNCTUATION BINDU KA SATANGA */ + ["\u1CC6", "\u1CC6"], /* SUNDANESE PUNCTUATION BINDU DA SATANGA */ + ["\u1CC7", "\u1CC7"], /* SUNDANESE PUNCTUATION BINDU BA SATANGA */ + ["\u1CC8", "\u1CC8"], + ["\u1CC9", "\u1CC9"], + ["\u1CCA", "\u1CCA"], + ["\u1CCB", "\u1CCB"], + ["\u1CCC", "\u1CCC"], + ["\u1CCD", "\u1CCD"], + ["\u1CCE", "\u1CCE"], + ["\u1CCF", "\u1CCF"], + ["\u1CD0", "\u1CD0"], /* VEDIC TONE KARSHANA */ + ["\u1CD1", "\u1CD1"], /* VEDIC TONE SHARA */ + ["\u1CD2", "\u1CD2"], /* VEDIC TONE PRENKHA */ + ["\u1CD3", "\u1CD3"], /* VEDIC SIGN NIHSHVASA */ + ["\u1CD4", "\u1CD4"], /* VEDIC SIGN YAJURVEDIC MIDLINE SVARITA */ + ["\u1CD5", "\u1CD5"], /* VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA */ + ["\u1CD6", "\u1CD6"], /* VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA */ + ["\u1CD7", "\u1CD7"], /* VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA */ + ["\u1CD8", "\u1CD8"], /* VEDIC TONE CANDRA BELOW */ + ["\u1CD9", "\u1CD9"], /* VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER */ + ["\u1CDA", "\u1CDA"], /* VEDIC TONE DOUBLE SVARITA */ + ["\u1CDB", "\u1CDB"], /* VEDIC TONE TRIPLE SVARITA */ + ["\u1CDC", "\u1CDC"], /* VEDIC TONE KATHAKA ANUDATTA */ + ["\u1CDD", "\u1CDD"], /* VEDIC TONE DOT BELOW */ + ["\u1CDE", "\u1CDE"], /* VEDIC TONE TWO DOTS BELOW */ + ["\u1CDF", "\u1CDF"], /* VEDIC TONE THREE DOTS BELOW */ + ["\u1CE0", "\u1CE0"], /* VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA */ + ["\u1CE1", "\u1CE1"], /* VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA */ + ["\u1CE2", "\u1CE2"], /* VEDIC SIGN VISARGA SVARITA */ + ["\u1CE3", "\u1CE3"], /* VEDIC SIGN VISARGA UDATTA */ + ["\u1CE4", "\u1CE4"], /* VEDIC SIGN REVERSED VISARGA UDATTA */ + ["\u1CE5", "\u1CE5"], /* VEDIC SIGN VISARGA ANUDATTA */ + ["\u1CE6", "\u1CE6"], /* VEDIC SIGN REVERSED VISARGA ANUDATTA */ + ["\u1CE7", "\u1CE7"], /* VEDIC SIGN VISARGA UDATTA WITH TAIL */ + ["\u1CE8", "\u1CE8"], /* VEDIC SIGN VISARGA ANUDATTA WITH TAIL */ + ["\u1CE9", "\u1CE9"], /* VEDIC SIGN ANUSVARA ANTARGOMUKHA */ + ["\u1CEA", "\u1CEA"], /* VEDIC SIGN ANUSVARA BAHIRGOMUKHA */ + ["\u1CEB", "\u1CEB"], /* VEDIC SIGN ANUSVARA VAMAGOMUKHA */ + ["\u1CEC", "\u1CEC"], /* VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL */ + ["\u1CED", "\u1CED"], /* VEDIC SIGN TIRYAK */ + ["\u1CEE", "\u1CEE"], /* VEDIC SIGN HEXIFORM LONG ANUSVARA */ + ["\u1CEF", "\u1CEF"], /* VEDIC SIGN LONG ANUSVARA */ + ["\u1CF0", "\u1CF0"], /* VEDIC SIGN RTHANG LONG ANUSVARA */ + ["\u1CF1", "\u1CF1"], /* VEDIC SIGN ANUSVARA UBHAYATO MUKHA */ + ["\u1CF2", "\u1CF2"], /* VEDIC SIGN ARDHAVISARGA */ + ["\u1CF3", "\u1CF3"], /* VEDIC SIGN ROTATED ARDHAVISARGA */ + ["\u1CF4", "\u1CF4"], /* VEDIC TONE CANDRA ABOVE */ + ["\u1CF5", "\u1CF5"], /* VEDIC SIGN JIHVAMULIYA */ + ["\u1CF6", "\u1CF6"], /* VEDIC SIGN UPADHMANIYA */ + ["\u1CF7", "\u1CF7"], /* VEDIC SIGN ATIKRAMA */ + ["\u1CF8", "\u1CF8"], /* VEDIC TONE RING ABOVE */ + ["\u1CF9", "\u1CF9"], /* VEDIC TONE DOUBLE RING ABOVE */ + ["\u1CFA", "\u1CFA"], /* VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA */ + ["\u1CFB", "\u1CFB"], + ["\u1CFC", "\u1CFC"], + ["\u1CFD", "\u1CFD"], + ["\u1CFE", "\u1CFE"], + ["\u1CFF", "\u1CFF"], + ["\u1D00", "\u1D00"], /* LATIN LETTER SMALL CAPITAL A */ + ["\u1D01", "\u1D01"], /* LATIN LETTER SMALL CAPITAL AE */ + ["\u1D02", "\u1D02"], /* LATIN SMALL LETTER TURNED AE */ + ["\u1D03", "\u1D03"], /* LATIN LETTER SMALL CAPITAL BARRED B */ + ["\u1D04", "\u1D04"], /* LATIN LETTER SMALL CAPITAL C */ + ["\u1D05", "\u1D05"], /* LATIN LETTER SMALL CAPITAL D */ + ["\u1D06", "\u1D06"], /* LATIN LETTER SMALL CAPITAL ETH */ + ["\u1D07", "\u1D07"], /* LATIN LETTER SMALL CAPITAL E */ + ["\u1D08", "\u1D08"], /* LATIN SMALL LETTER TURNED OPEN E */ + ["\u1D09", "\u1D09"], /* LATIN SMALL LETTER TURNED I */ + ["\u1D0A", "\u1D0A"], /* LATIN LETTER SMALL CAPITAL J */ + ["\u1D0B", "\u1D0B"], /* LATIN LETTER SMALL CAPITAL K */ + ["\u1D0C", "\u1D0C"], /* LATIN LETTER SMALL CAPITAL L WITH STROKE */ + ["\u1D0D", "\u1D0D"], /* LATIN LETTER SMALL CAPITAL M */ + ["\u1D0E", "\u1D0E"], /* LATIN LETTER SMALL CAPITAL REVERSED N */ + ["\u1D0F", "\u1D0F"], /* LATIN LETTER SMALL CAPITAL O */ + ["\u1D10", "\u1D10"], /* LATIN LETTER SMALL CAPITAL OPEN O */ + ["\u1D11", "\u1D11"], /* LATIN SMALL LETTER SIDEWAYS O */ + ["\u1D12", "\u1D12"], /* LATIN SMALL LETTER SIDEWAYS OPEN O */ + ["\u1D13", "\u1D13"], /* LATIN SMALL LETTER SIDEWAYS O WITH STROKE */ + ["\u1D14", "\u1D14"], /* LATIN SMALL LETTER TURNED OE */ + ["\u1D15", "\u1D15"], /* LATIN LETTER SMALL CAPITAL OU */ + ["\u1D16", "\u1D16"], /* LATIN SMALL LETTER TOP HALF O */ + ["\u1D17", "\u1D17"], /* LATIN SMALL LETTER BOTTOM HALF O */ + ["\u1D18", "\u1D18"], /* LATIN LETTER SMALL CAPITAL P */ + ["\u1D19", "\u1D19"], /* LATIN LETTER SMALL CAPITAL REVERSED R */ + ["\u1D1A", "\u1D1A"], /* LATIN LETTER SMALL CAPITAL TURNED R */ + ["\u1D1B", "\u1D1B"], /* LATIN LETTER SMALL CAPITAL T */ + ["\u1D1C", "\u1D1C"], /* LATIN LETTER SMALL CAPITAL U */ + ["\u1D1D", "\u1D1D"], /* LATIN SMALL LETTER SIDEWAYS U */ + ["\u1D1E", "\u1D1E"], /* LATIN SMALL LETTER SIDEWAYS DIAERESIZED U */ + ["\u1D1F", "\u1D1F"], /* LATIN SMALL LETTER SIDEWAYS TURNED M */ + ["\u1D20", "\u1D20"], /* LATIN LETTER SMALL CAPITAL V */ + ["\u1D21", "\u1D21"], /* LATIN LETTER SMALL CAPITAL W */ + ["\u1D22", "\u1D22"], /* LATIN LETTER SMALL CAPITAL Z */ + ["\u1D23", "\u1D23"], /* LATIN LETTER SMALL CAPITAL EZH */ + ["\u1D24", "\u1D24"], /* LATIN LETTER VOICED LARYNGEAL SPIRANT */ + ["\u1D25", "\u1D25"], /* LATIN LETTER AIN */ + ["\u1D26", "\u1D26"], /* GREEK LETTER SMALL CAPITAL GAMMA */ + ["\u1D27", "\u1D27"], /* GREEK LETTER SMALL CAPITAL LAMDA */ + ["\u1D28", "\u1D28"], /* GREEK LETTER SMALL CAPITAL PI */ + ["\u1D29", "\u1D29"], /* GREEK LETTER SMALL CAPITAL RHO */ + ["\u1D2A", "\u1D2A"], /* GREEK LETTER SMALL CAPITAL PSI */ + ["\u1D2B", "\u1D2B"], /* CYRILLIC LETTER SMALL CAPITAL EL */ + ["\u1D2C", "\u1D2C"], /* MODIFIER LETTER CAPITAL A */ + ["\u1D2D", "\u1D2D"], /* MODIFIER LETTER CAPITAL AE */ + ["\u1D2E", "\u1D2E"], /* MODIFIER LETTER CAPITAL B */ + ["\u1D2F", "\u1D2F"], /* MODIFIER LETTER CAPITAL BARRED B */ + ["\u1D30", "\u1D30"], /* MODIFIER LETTER CAPITAL D */ + ["\u1D31", "\u1D31"], /* MODIFIER LETTER CAPITAL E */ + ["\u1D32", "\u1D32"], /* MODIFIER LETTER CAPITAL REVERSED E */ + ["\u1D33", "\u1D33"], /* MODIFIER LETTER CAPITAL G */ + ["\u1D34", "\u1D34"], /* MODIFIER LETTER CAPITAL H */ + ["\u1D35", "\u1D35"], /* MODIFIER LETTER CAPITAL I */ + ["\u1D36", "\u1D36"], /* MODIFIER LETTER CAPITAL J */ + ["\u1D37", "\u1D37"], /* MODIFIER LETTER CAPITAL K */ + ["\u1D38", "\u1D38"], /* MODIFIER LETTER CAPITAL L */ + ["\u1D39", "\u1D39"], /* MODIFIER LETTER CAPITAL M */ + ["\u1D3A", "\u1D3A"], /* MODIFIER LETTER CAPITAL N */ + ["\u1D3B", "\u1D3B"], /* MODIFIER LETTER CAPITAL REVERSED N */ + ["\u1D3C", "\u1D3C"], /* MODIFIER LETTER CAPITAL O */ + ["\u1D3D", "\u1D3D"], /* MODIFIER LETTER CAPITAL OU */ + ["\u1D3E", "\u1D3E"], /* MODIFIER LETTER CAPITAL P */ + ["\u1D3F", "\u1D3F"], /* MODIFIER LETTER CAPITAL R */ + ["\u1D40", "\u1D40"], /* MODIFIER LETTER CAPITAL T */ + ["\u1D41", "\u1D41"], /* MODIFIER LETTER CAPITAL U */ + ["\u1D42", "\u1D42"], /* MODIFIER LETTER CAPITAL W */ + ["\u1D43", "\u1D43"], /* MODIFIER LETTER SMALL A */ + ["\u1D44", "\u1D44"], /* MODIFIER LETTER SMALL TURNED A */ + ["\u1D45", "\u1D45"], /* MODIFIER LETTER SMALL ALPHA */ + ["\u1D46", "\u1D46"], /* MODIFIER LETTER SMALL TURNED AE */ + ["\u1D47", "\u1D47"], /* MODIFIER LETTER SMALL B */ + ["\u1D48", "\u1D48"], /* MODIFIER LETTER SMALL D */ + ["\u1D49", "\u1D49"], /* MODIFIER LETTER SMALL E */ + ["\u1D4A", "\u1D4A"], /* MODIFIER LETTER SMALL SCHWA */ + ["\u1D4B", "\u1D4B"], /* MODIFIER LETTER SMALL OPEN E */ + ["\u1D4C", "\u1D4C"], /* MODIFIER LETTER SMALL TURNED OPEN E */ + ["\u1D4D", "\u1D4D"], /* MODIFIER LETTER SMALL G */ + ["\u1D4E", "\u1D4E"], /* MODIFIER LETTER SMALL TURNED I */ + ["\u1D4F", "\u1D4F"], /* MODIFIER LETTER SMALL K */ + ["\u1D50", "\u1D50"], /* MODIFIER LETTER SMALL M */ + ["\u1D51", "\u1D51"], /* MODIFIER LETTER SMALL ENG */ + ["\u1D52", "\u1D52"], /* MODIFIER LETTER SMALL O */ + ["\u1D53", "\u1D53"], /* MODIFIER LETTER SMALL OPEN O */ + ["\u1D54", "\u1D54"], /* MODIFIER LETTER SMALL TOP HALF O */ + ["\u1D55", "\u1D55"], /* MODIFIER LETTER SMALL BOTTOM HALF O */ + ["\u1D56", "\u1D56"], /* MODIFIER LETTER SMALL P */ + ["\u1D57", "\u1D57"], /* MODIFIER LETTER SMALL T */ + ["\u1D58", "\u1D58"], /* MODIFIER LETTER SMALL U */ + ["\u1D59", "\u1D59"], /* MODIFIER LETTER SMALL SIDEWAYS U */ + ["\u1D5A", "\u1D5A"], /* MODIFIER LETTER SMALL TURNED M */ + ["\u1D5B", "\u1D5B"], /* MODIFIER LETTER SMALL V */ + ["\u1D5C", "\u1D5C"], /* MODIFIER LETTER SMALL AIN */ + ["\u1D5D", "\u1D5D"], /* MODIFIER LETTER SMALL BETA */ + ["\u1D5E", "\u1D5E"], /* MODIFIER LETTER SMALL GREEK GAMMA */ + ["\u1D5F", "\u1D5F"], /* MODIFIER LETTER SMALL DELTA */ + ["\u1D60", "\u1D60"], /* MODIFIER LETTER SMALL GREEK PHI */ + ["\u1D61", "\u1D61"], /* MODIFIER LETTER SMALL CHI */ + ["\u1D62", "\u1D62"], /* LATIN SUBSCRIPT SMALL LETTER I */ + ["\u1D63", "\u1D63"], /* LATIN SUBSCRIPT SMALL LETTER R */ + ["\u1D64", "\u1D64"], /* LATIN SUBSCRIPT SMALL LETTER U */ + ["\u1D65", "\u1D65"], /* LATIN SUBSCRIPT SMALL LETTER V */ + ["\u1D66", "\u1D66"], /* GREEK SUBSCRIPT SMALL LETTER BETA */ + ["\u1D67", "\u1D67"], /* GREEK SUBSCRIPT SMALL LETTER GAMMA */ + ["\u1D68", "\u1D68"], /* GREEK SUBSCRIPT SMALL LETTER RHO */ + ["\u1D69", "\u1D69"], /* GREEK SUBSCRIPT SMALL LETTER PHI */ + ["\u1D6A", "\u1D6A"], /* GREEK SUBSCRIPT SMALL LETTER CHI */ + ["\u1D6B", "\u1D6B"], /* LATIN SMALL LETTER UE */ + ["\u1D6C", "\u1D6C"], /* LATIN SMALL LETTER B WITH MIDDLE TILDE */ + ["\u1D6D", "\u1D6D"], /* LATIN SMALL LETTER D WITH MIDDLE TILDE */ + ["\u1D6E", "\u1D6E"], /* LATIN SMALL LETTER F WITH MIDDLE TILDE */ + ["\u1D6F", "\u1D6F"], /* LATIN SMALL LETTER M WITH MIDDLE TILDE */ + ["\u1D70", "\u1D70"], /* LATIN SMALL LETTER N WITH MIDDLE TILDE */ + ["\u1D71", "\u1D71"], /* LATIN SMALL LETTER P WITH MIDDLE TILDE */ + ["\u1D72", "\u1D72"], /* LATIN SMALL LETTER R WITH MIDDLE TILDE */ + ["\u1D73", "\u1D73"], /* LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE */ + ["\u1D74", "\u1D74"], /* LATIN SMALL LETTER S WITH MIDDLE TILDE */ + ["\u1D75", "\u1D75"], /* LATIN SMALL LETTER T WITH MIDDLE TILDE */ + ["\u1D76", "\u1D76"], /* LATIN SMALL LETTER Z WITH MIDDLE TILDE */ + ["\u1D77", "\u1D77"], /* LATIN SMALL LETTER TURNED G */ + ["\u1D78", "\u1D78"], /* MODIFIER LETTER CYRILLIC EN */ + ["\uA77D", "\u1D79"], /* LATIN SMALL LETTER INSULAR G */ + ["\u1D7A", "\u1D7A"], /* LATIN SMALL LETTER TH WITH STRIKETHROUGH */ + ["\u1D7B", "\u1D7B"], /* LATIN SMALL CAPITAL LETTER I WITH STROKE */ + ["\u1D7C", "\u1D7C"], /* LATIN SMALL LETTER IOTA WITH STROKE */ + ["\u2C63", "\u1D7D"], /* LATIN SMALL LETTER P WITH STROKE */ + ["\u1D7E", "\u1D7E"], /* LATIN SMALL CAPITAL LETTER U WITH STROKE */ + ["\u1D7F", "\u1D7F"], /* LATIN SMALL LETTER UPSILON WITH STROKE */ + ["\u1D80", "\u1D80"], /* LATIN SMALL LETTER B WITH PALATAL HOOK */ + ["\u1D81", "\u1D81"], /* LATIN SMALL LETTER D WITH PALATAL HOOK */ + ["\u1D82", "\u1D82"], /* LATIN SMALL LETTER F WITH PALATAL HOOK */ + ["\u1D83", "\u1D83"], /* LATIN SMALL LETTER G WITH PALATAL HOOK */ + ["\u1D84", "\u1D84"], /* LATIN SMALL LETTER K WITH PALATAL HOOK */ + ["\u1D85", "\u1D85"], /* LATIN SMALL LETTER L WITH PALATAL HOOK */ + ["\u1D86", "\u1D86"], /* LATIN SMALL LETTER M WITH PALATAL HOOK */ + ["\u1D87", "\u1D87"], /* LATIN SMALL LETTER N WITH PALATAL HOOK */ + ["\u1D88", "\u1D88"], /* LATIN SMALL LETTER P WITH PALATAL HOOK */ + ["\u1D89", "\u1D89"], /* LATIN SMALL LETTER R WITH PALATAL HOOK */ + ["\u1D8A", "\u1D8A"], /* LATIN SMALL LETTER S WITH PALATAL HOOK */ + ["\u1D8B", "\u1D8B"], /* LATIN SMALL LETTER ESH WITH PALATAL HOOK */ + ["\u1D8C", "\u1D8C"], /* LATIN SMALL LETTER V WITH PALATAL HOOK */ + ["\u1D8D", "\u1D8D"], /* LATIN SMALL LETTER X WITH PALATAL HOOK */ + ["\uA7C6", "\u1D8E"], /* LATIN SMALL LETTER Z WITH PALATAL HOOK */ + ["\u1D8F", "\u1D8F"], /* LATIN SMALL LETTER A WITH RETROFLEX HOOK */ + ["\u1D90", "\u1D90"], /* LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK */ + ["\u1D91", "\u1D91"], /* LATIN SMALL LETTER D WITH HOOK AND TAIL */ + ["\u1D92", "\u1D92"], /* LATIN SMALL LETTER E WITH RETROFLEX HOOK */ + ["\u1D93", "\u1D93"], /* LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK */ + ["\u1D94", "\u1D94"], /* LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK */ + ["\u1D95", "\u1D95"], /* LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK */ + ["\u1D96", "\u1D96"], /* LATIN SMALL LETTER I WITH RETROFLEX HOOK */ + ["\u1D97", "\u1D97"], /* LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK */ + ["\u1D98", "\u1D98"], /* LATIN SMALL LETTER ESH WITH RETROFLEX HOOK */ + ["\u1D99", "\u1D99"], /* LATIN SMALL LETTER U WITH RETROFLEX HOOK */ + ["\u1D9A", "\u1D9A"], /* LATIN SMALL LETTER EZH WITH RETROFLEX HOOK */ + ["\u1D9B", "\u1D9B"], /* MODIFIER LETTER SMALL TURNED ALPHA */ + ["\u1D9C", "\u1D9C"], /* MODIFIER LETTER SMALL C */ + ["\u1D9D", "\u1D9D"], /* MODIFIER LETTER SMALL C WITH CURL */ + ["\u1D9E", "\u1D9E"], /* MODIFIER LETTER SMALL ETH */ + ["\u1D9F", "\u1D9F"], /* MODIFIER LETTER SMALL REVERSED OPEN E */ + ["\u1DA0", "\u1DA0"], /* MODIFIER LETTER SMALL F */ + ["\u1DA1", "\u1DA1"], /* MODIFIER LETTER SMALL DOTLESS J WITH STROKE */ + ["\u1DA2", "\u1DA2"], /* MODIFIER LETTER SMALL SCRIPT G */ + ["\u1DA3", "\u1DA3"], /* MODIFIER LETTER SMALL TURNED H */ + ["\u1DA4", "\u1DA4"], /* MODIFIER LETTER SMALL I WITH STROKE */ + ["\u1DA5", "\u1DA5"], /* MODIFIER LETTER SMALL IOTA */ + ["\u1DA6", "\u1DA6"], /* MODIFIER LETTER SMALL CAPITAL I */ + ["\u1DA7", "\u1DA7"], /* MODIFIER LETTER SMALL CAPITAL I WITH STROKE */ + ["\u1DA8", "\u1DA8"], /* MODIFIER LETTER SMALL J WITH CROSSED-TAIL */ + ["\u1DA9", "\u1DA9"], /* MODIFIER LETTER SMALL L WITH RETROFLEX HOOK */ + ["\u1DAA", "\u1DAA"], /* MODIFIER LETTER SMALL L WITH PALATAL HOOK */ + ["\u1DAB", "\u1DAB"], /* MODIFIER LETTER SMALL CAPITAL L */ + ["\u1DAC", "\u1DAC"], /* MODIFIER LETTER SMALL M WITH HOOK */ + ["\u1DAD", "\u1DAD"], /* MODIFIER LETTER SMALL TURNED M WITH LONG LEG */ + ["\u1DAE", "\u1DAE"], /* MODIFIER LETTER SMALL N WITH LEFT HOOK */ + ["\u1DAF", "\u1DAF"], /* MODIFIER LETTER SMALL N WITH RETROFLEX HOOK */ + ["\u1DB0", "\u1DB0"], /* MODIFIER LETTER SMALL CAPITAL N */ + ["\u1DB1", "\u1DB1"], /* MODIFIER LETTER SMALL BARRED O */ + ["\u1DB2", "\u1DB2"], /* MODIFIER LETTER SMALL PHI */ + ["\u1DB3", "\u1DB3"], /* MODIFIER LETTER SMALL S WITH HOOK */ + ["\u1DB4", "\u1DB4"], /* MODIFIER LETTER SMALL ESH */ + ["\u1DB5", "\u1DB5"], /* MODIFIER LETTER SMALL T WITH PALATAL HOOK */ + ["\u1DB6", "\u1DB6"], /* MODIFIER LETTER SMALL U BAR */ + ["\u1DB7", "\u1DB7"], /* MODIFIER LETTER SMALL UPSILON */ + ["\u1DB8", "\u1DB8"], /* MODIFIER LETTER SMALL CAPITAL U */ + ["\u1DB9", "\u1DB9"], /* MODIFIER LETTER SMALL V WITH HOOK */ + ["\u1DBA", "\u1DBA"], /* MODIFIER LETTER SMALL TURNED V */ + ["\u1DBB", "\u1DBB"], /* MODIFIER LETTER SMALL Z */ + ["\u1DBC", "\u1DBC"], /* MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK */ + ["\u1DBD", "\u1DBD"], /* MODIFIER LETTER SMALL Z WITH CURL */ + ["\u1DBE", "\u1DBE"], /* MODIFIER LETTER SMALL EZH */ + ["\u1DBF", "\u1DBF"], /* MODIFIER LETTER SMALL THETA */ + ["\u1DC0", "\u1DC0"], /* COMBINING DOTTED GRAVE ACCENT */ + ["\u1DC1", "\u1DC1"], /* COMBINING DOTTED ACUTE ACCENT */ + ["\u1DC2", "\u1DC2"], /* COMBINING SNAKE BELOW */ + ["\u1DC3", "\u1DC3"], /* COMBINING SUSPENSION MARK */ + ["\u1DC4", "\u1DC4"], /* COMBINING MACRON-ACUTE */ + ["\u1DC5", "\u1DC5"], /* COMBINING GRAVE-MACRON */ + ["\u1DC6", "\u1DC6"], /* COMBINING MACRON-GRAVE */ + ["\u1DC7", "\u1DC7"], /* COMBINING ACUTE-MACRON */ + ["\u1DC8", "\u1DC8"], /* COMBINING GRAVE-ACUTE-GRAVE */ + ["\u1DC9", "\u1DC9"], /* COMBINING ACUTE-GRAVE-ACUTE */ + ["\u1DCA", "\u1DCA"], /* COMBINING LATIN SMALL LETTER R BELOW */ + ["\u1DCB", "\u1DCB"], /* COMBINING BREVE-MACRON */ + ["\u1DCC", "\u1DCC"], /* COMBINING MACRON-BREVE */ + ["\u1DCD", "\u1DCD"], /* COMBINING DOUBLE CIRCUMFLEX ABOVE */ + ["\u1DCE", "\u1DCE"], /* COMBINING OGONEK ABOVE */ + ["\u1DCF", "\u1DCF"], /* COMBINING ZIGZAG BELOW */ + ["\u1DD0", "\u1DD0"], /* COMBINING IS BELOW */ + ["\u1DD1", "\u1DD1"], /* COMBINING UR ABOVE */ + ["\u1DD2", "\u1DD2"], /* COMBINING US ABOVE */ + ["\u1DD3", "\u1DD3"], /* COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE */ + ["\u1DD4", "\u1DD4"], /* COMBINING LATIN SMALL LETTER AE */ + ["\u1DD5", "\u1DD5"], /* COMBINING LATIN SMALL LETTER AO */ + ["\u1DD6", "\u1DD6"], /* COMBINING LATIN SMALL LETTER AV */ + ["\u1DD7", "\u1DD7"], /* COMBINING LATIN SMALL LETTER C CEDILLA */ + ["\u1DD8", "\u1DD8"], /* COMBINING LATIN SMALL LETTER INSULAR D */ + ["\u1DD9", "\u1DD9"], /* COMBINING LATIN SMALL LETTER ETH */ + ["\u1DDA", "\u1DDA"], /* COMBINING LATIN SMALL LETTER G */ + ["\u1DDB", "\u1DDB"], /* COMBINING LATIN LETTER SMALL CAPITAL G */ + ["\u1DDC", "\u1DDC"], /* COMBINING LATIN SMALL LETTER K */ + ["\u1DDD", "\u1DDD"], /* COMBINING LATIN SMALL LETTER L */ + ["\u1DDE", "\u1DDE"], /* COMBINING LATIN LETTER SMALL CAPITAL L */ + ["\u1DDF", "\u1DDF"], /* COMBINING LATIN LETTER SMALL CAPITAL M */ + ["\u1DE0", "\u1DE0"], /* COMBINING LATIN SMALL LETTER N */ + ["\u1DE1", "\u1DE1"], /* COMBINING LATIN LETTER SMALL CAPITAL N */ + ["\u1DE2", "\u1DE2"], /* COMBINING LATIN LETTER SMALL CAPITAL R */ + ["\u1DE3", "\u1DE3"], /* COMBINING LATIN SMALL LETTER R ROTUNDA */ + ["\u1DE4", "\u1DE4"], /* COMBINING LATIN SMALL LETTER S */ + ["\u1DE5", "\u1DE5"], /* COMBINING LATIN SMALL LETTER LONG S */ + ["\u1DE6", "\u1DE6"], /* COMBINING LATIN SMALL LETTER Z */ + ["\u1DE7", "\u1DE7"], /* COMBINING LATIN SMALL LETTER ALPHA */ + ["\u1DE8", "\u1DE8"], /* COMBINING LATIN SMALL LETTER B */ + ["\u1DE9", "\u1DE9"], /* COMBINING LATIN SMALL LETTER BETA */ + ["\u1DEA", "\u1DEA"], /* COMBINING LATIN SMALL LETTER SCHWA */ + ["\u1DEB", "\u1DEB"], /* COMBINING LATIN SMALL LETTER F */ + ["\u1DEC", "\u1DEC"], /* COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE */ + ["\u1DED", "\u1DED"], /* COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE */ + ["\u1DEE", "\u1DEE"], /* COMBINING LATIN SMALL LETTER P */ + ["\u1DEF", "\u1DEF"], /* COMBINING LATIN SMALL LETTER ESH */ + ["\u1DF0", "\u1DF0"], /* COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE */ + ["\u1DF1", "\u1DF1"], /* COMBINING LATIN SMALL LETTER W */ + ["\u1DF2", "\u1DF2"], /* COMBINING LATIN SMALL LETTER A WITH DIAERESIS */ + ["\u1DF3", "\u1DF3"], /* COMBINING LATIN SMALL LETTER O WITH DIAERESIS */ + ["\u1DF4", "\u1DF4"], /* COMBINING LATIN SMALL LETTER U WITH DIAERESIS */ + ["\u1DF5", "\u1DF5"], /* COMBINING UP TACK ABOVE */ + ["\u1DF6", "\u1DF6"], /* COMBINING KAVYKA ABOVE RIGHT */ + ["\u1DF7", "\u1DF7"], /* COMBINING KAVYKA ABOVE LEFT */ + ["\u1DF8", "\u1DF8"], /* COMBINING DOT ABOVE LEFT */ + ["\u1DF9", "\u1DF9"], /* COMBINING WIDE INVERTED BRIDGE BELOW */ + ["\u1DFA", "\u1DFA"], /* COMBINING DOT BELOW LEFT */ + ["\u1DFB", "\u1DFB"], /* COMBINING DELETION MARK */ + ["\u1DFC", "\u1DFC"], /* COMBINING DOUBLE INVERTED BREVE BELOW */ + ["\u1DFD", "\u1DFD"], /* COMBINING ALMOST EQUAL TO BELOW */ + ["\u1DFE", "\u1DFE"], /* COMBINING LEFT ARROWHEAD ABOVE */ + ["\u1DFF", "\u1DFF"], /* COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW */ + ["\u1E00", "\u1E01"], /* LATIN CAPITAL LETTER A WITH RING BELOW */ + ["\u1E00", "\u1E01"], /* LATIN SMALL LETTER A WITH RING BELOW */ + ["\u1E02", "\u1E03"], /* LATIN CAPITAL LETTER B WITH DOT ABOVE */ + ["\u1E02", "\u1E03"], /* LATIN SMALL LETTER B WITH DOT ABOVE */ + ["\u1E04", "\u1E05"], /* LATIN CAPITAL LETTER B WITH DOT BELOW */ + ["\u1E04", "\u1E05"], /* LATIN SMALL LETTER B WITH DOT BELOW */ + ["\u1E06", "\u1E07"], /* LATIN CAPITAL LETTER B WITH LINE BELOW */ + ["\u1E06", "\u1E07"], /* LATIN SMALL LETTER B WITH LINE BELOW */ + ["\u1E08", "\u1E09"], /* LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */ + ["\u1E08", "\u1E09"], /* LATIN SMALL LETTER C WITH CEDILLA AND ACUTE */ + ["\u1E0A", "\u1E0B"], /* LATIN CAPITAL LETTER D WITH DOT ABOVE */ + ["\u1E0A", "\u1E0B"], /* LATIN SMALL LETTER D WITH DOT ABOVE */ + ["\u1E0C", "\u1E0D"], /* LATIN CAPITAL LETTER D WITH DOT BELOW */ + ["\u1E0C", "\u1E0D"], /* LATIN SMALL LETTER D WITH DOT BELOW */ + ["\u1E0E", "\u1E0F"], /* LATIN CAPITAL LETTER D WITH LINE BELOW */ + ["\u1E0E", "\u1E0F"], /* LATIN SMALL LETTER D WITH LINE BELOW */ + ["\u1E10", "\u1E11"], /* LATIN CAPITAL LETTER D WITH CEDILLA */ + ["\u1E10", "\u1E11"], /* LATIN SMALL LETTER D WITH CEDILLA */ + ["\u1E12", "\u1E13"], /* LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */ + ["\u1E12", "\u1E13"], /* LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */ + ["\u1E14", "\u1E15"], /* LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */ + ["\u1E14", "\u1E15"], /* LATIN SMALL LETTER E WITH MACRON AND GRAVE */ + ["\u1E16", "\u1E17"], /* LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */ + ["\u1E16", "\u1E17"], /* LATIN SMALL LETTER E WITH MACRON AND ACUTE */ + ["\u1E18", "\u1E19"], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */ + ["\u1E18", "\u1E19"], /* LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */ + ["\u1E1A", "\u1E1B"], /* LATIN CAPITAL LETTER E WITH TILDE BELOW */ + ["\u1E1A", "\u1E1B"], /* LATIN SMALL LETTER E WITH TILDE BELOW */ + ["\u1E1C", "\u1E1D"], /* LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */ + ["\u1E1C", "\u1E1D"], /* LATIN SMALL LETTER E WITH CEDILLA AND BREVE */ + ["\u1E1E", "\u1E1F"], /* LATIN CAPITAL LETTER F WITH DOT ABOVE */ + ["\u1E1E", "\u1E1F"], /* LATIN SMALL LETTER F WITH DOT ABOVE */ + ["\u1E20", "\u1E21"], /* LATIN CAPITAL LETTER G WITH MACRON */ + ["\u1E20", "\u1E21"], /* LATIN SMALL LETTER G WITH MACRON */ + ["\u1E22", "\u1E23"], /* LATIN CAPITAL LETTER H WITH DOT ABOVE */ + ["\u1E22", "\u1E23"], /* LATIN SMALL LETTER H WITH DOT ABOVE */ + ["\u1E24", "\u1E25"], /* LATIN CAPITAL LETTER H WITH DOT BELOW */ + ["\u1E24", "\u1E25"], /* LATIN SMALL LETTER H WITH DOT BELOW */ + ["\u1E26", "\u1E27"], /* LATIN CAPITAL LETTER H WITH DIAERESIS */ + ["\u1E26", "\u1E27"], /* LATIN SMALL LETTER H WITH DIAERESIS */ + ["\u1E28", "\u1E29"], /* LATIN CAPITAL LETTER H WITH CEDILLA */ + ["\u1E28", "\u1E29"], /* LATIN SMALL LETTER H WITH CEDILLA */ + ["\u1E2A", "\u1E2B"], /* LATIN CAPITAL LETTER H WITH BREVE BELOW */ + ["\u1E2A", "\u1E2B"], /* LATIN SMALL LETTER H WITH BREVE BELOW */ + ["\u1E2C", "\u1E2D"], /* LATIN CAPITAL LETTER I WITH TILDE BELOW */ + ["\u1E2C", "\u1E2D"], /* LATIN SMALL LETTER I WITH TILDE BELOW */ + ["\u1E2E", "\u1E2F"], /* LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */ + ["\u1E2E", "\u1E2F"], /* LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE */ + ["\u1E30", "\u1E31"], /* LATIN CAPITAL LETTER K WITH ACUTE */ + ["\u1E30", "\u1E31"], /* LATIN SMALL LETTER K WITH ACUTE */ + ["\u1E32", "\u1E33"], /* LATIN CAPITAL LETTER K WITH DOT BELOW */ + ["\u1E32", "\u1E33"], /* LATIN SMALL LETTER K WITH DOT BELOW */ + ["\u1E34", "\u1E35"], /* LATIN CAPITAL LETTER K WITH LINE BELOW */ + ["\u1E34", "\u1E35"], /* LATIN SMALL LETTER K WITH LINE BELOW */ + ["\u1E36", "\u1E37"], /* LATIN CAPITAL LETTER L WITH DOT BELOW */ + ["\u1E36", "\u1E37"], /* LATIN SMALL LETTER L WITH DOT BELOW */ + ["\u1E38", "\u1E39"], /* LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */ + ["\u1E38", "\u1E39"], /* LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */ + ["\u1E3A", "\u1E3B"], /* LATIN CAPITAL LETTER L WITH LINE BELOW */ + ["\u1E3A", "\u1E3B"], /* LATIN SMALL LETTER L WITH LINE BELOW */ + ["\u1E3C", "\u1E3D"], /* LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */ + ["\u1E3C", "\u1E3D"], /* LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */ + ["\u1E3E", "\u1E3F"], /* LATIN CAPITAL LETTER M WITH ACUTE */ + ["\u1E3E", "\u1E3F"], /* LATIN SMALL LETTER M WITH ACUTE */ + ["\u1E40", "\u1E41"], /* LATIN CAPITAL LETTER M WITH DOT ABOVE */ + ["\u1E40", "\u1E41"], /* LATIN SMALL LETTER M WITH DOT ABOVE */ + ["\u1E42", "\u1E43"], /* LATIN CAPITAL LETTER M WITH DOT BELOW */ + ["\u1E42", "\u1E43"], /* LATIN SMALL LETTER M WITH DOT BELOW */ + ["\u1E44", "\u1E45"], /* LATIN CAPITAL LETTER N WITH DOT ABOVE */ + ["\u1E44", "\u1E45"], /* LATIN SMALL LETTER N WITH DOT ABOVE */ + ["\u1E46", "\u1E47"], /* LATIN CAPITAL LETTER N WITH DOT BELOW */ + ["\u1E46", "\u1E47"], /* LATIN SMALL LETTER N WITH DOT BELOW */ + ["\u1E48", "\u1E49"], /* LATIN CAPITAL LETTER N WITH LINE BELOW */ + ["\u1E48", "\u1E49"], /* LATIN SMALL LETTER N WITH LINE BELOW */ + ["\u1E4A", "\u1E4B"], /* LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */ + ["\u1E4A", "\u1E4B"], /* LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */ + ["\u1E4C", "\u1E4D"], /* LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */ + ["\u1E4C", "\u1E4D"], /* LATIN SMALL LETTER O WITH TILDE AND ACUTE */ + ["\u1E4E", "\u1E4F"], /* LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */ + ["\u1E4E", "\u1E4F"], /* LATIN SMALL LETTER O WITH TILDE AND DIAERESIS */ + ["\u1E50", "\u1E51"], /* LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */ + ["\u1E50", "\u1E51"], /* LATIN SMALL LETTER O WITH MACRON AND GRAVE */ + ["\u1E52", "\u1E53"], /* LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */ + ["\u1E52", "\u1E53"], /* LATIN SMALL LETTER O WITH MACRON AND ACUTE */ + ["\u1E54", "\u1E55"], /* LATIN CAPITAL LETTER P WITH ACUTE */ + ["\u1E54", "\u1E55"], /* LATIN SMALL LETTER P WITH ACUTE */ + ["\u1E56", "\u1E57"], /* LATIN CAPITAL LETTER P WITH DOT ABOVE */ + ["\u1E56", "\u1E57"], /* LATIN SMALL LETTER P WITH DOT ABOVE */ + ["\u1E58", "\u1E59"], /* LATIN CAPITAL LETTER R WITH DOT ABOVE */ + ["\u1E58", "\u1E59"], /* LATIN SMALL LETTER R WITH DOT ABOVE */ + ["\u1E5A", "\u1E5B"], /* LATIN CAPITAL LETTER R WITH DOT BELOW */ + ["\u1E5A", "\u1E5B"], /* LATIN SMALL LETTER R WITH DOT BELOW */ + ["\u1E5C", "\u1E5D"], /* LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */ + ["\u1E5C", "\u1E5D"], /* LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */ + ["\u1E5E", "\u1E5F"], /* LATIN CAPITAL LETTER R WITH LINE BELOW */ + ["\u1E5E", "\u1E5F"], /* LATIN SMALL LETTER R WITH LINE BELOW */ + ["\u1E60", "\u1E61"], /* LATIN CAPITAL LETTER S WITH DOT ABOVE */ + ["\u1E60", "\u1E61"], /* LATIN SMALL LETTER S WITH DOT ABOVE */ + ["\u1E62", "\u1E63"], /* LATIN CAPITAL LETTER S WITH DOT BELOW */ + ["\u1E62", "\u1E63"], /* LATIN SMALL LETTER S WITH DOT BELOW */ + ["\u1E64", "\u1E65"], /* LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */ + ["\u1E64", "\u1E65"], /* LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE */ + ["\u1E66", "\u1E67"], /* LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */ + ["\u1E66", "\u1E67"], /* LATIN SMALL LETTER S WITH CARON AND DOT ABOVE */ + ["\u1E68", "\u1E69"], /* LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */ + ["\u1E68", "\u1E69"], /* LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */ + ["\u1E6A", "\u1E6B"], /* LATIN CAPITAL LETTER T WITH DOT ABOVE */ + ["\u1E6A", "\u1E6B"], /* LATIN SMALL LETTER T WITH DOT ABOVE */ + ["\u1E6C", "\u1E6D"], /* LATIN CAPITAL LETTER T WITH DOT BELOW */ + ["\u1E6C", "\u1E6D"], /* LATIN SMALL LETTER T WITH DOT BELOW */ + ["\u1E6E", "\u1E6F"], /* LATIN CAPITAL LETTER T WITH LINE BELOW */ + ["\u1E6E", "\u1E6F"], /* LATIN SMALL LETTER T WITH LINE BELOW */ + ["\u1E70", "\u1E71"], /* LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */ + ["\u1E70", "\u1E71"], /* LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */ + ["\u1E72", "\u1E73"], /* LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */ + ["\u1E72", "\u1E73"], /* LATIN SMALL LETTER U WITH DIAERESIS BELOW */ + ["\u1E74", "\u1E75"], /* LATIN CAPITAL LETTER U WITH TILDE BELOW */ + ["\u1E74", "\u1E75"], /* LATIN SMALL LETTER U WITH TILDE BELOW */ + ["\u1E76", "\u1E77"], /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */ + ["\u1E76", "\u1E77"], /* LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */ + ["\u1E78", "\u1E79"], /* LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */ + ["\u1E78", "\u1E79"], /* LATIN SMALL LETTER U WITH TILDE AND ACUTE */ + ["\u1E7A", "\u1E7B"], /* LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */ + ["\u1E7A", "\u1E7B"], /* LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */ + ["\u1E7C", "\u1E7D"], /* LATIN CAPITAL LETTER V WITH TILDE */ + ["\u1E7C", "\u1E7D"], /* LATIN SMALL LETTER V WITH TILDE */ + ["\u1E7E", "\u1E7F"], /* LATIN CAPITAL LETTER V WITH DOT BELOW */ + ["\u1E7E", "\u1E7F"], /* LATIN SMALL LETTER V WITH DOT BELOW */ + ["\u1E80", "\u1E81"], /* LATIN CAPITAL LETTER W WITH GRAVE */ + ["\u1E80", "\u1E81"], /* LATIN SMALL LETTER W WITH GRAVE */ + ["\u1E82", "\u1E83"], /* LATIN CAPITAL LETTER W WITH ACUTE */ + ["\u1E82", "\u1E83"], /* LATIN SMALL LETTER W WITH ACUTE */ + ["\u1E84", "\u1E85"], /* LATIN CAPITAL LETTER W WITH DIAERESIS */ + ["\u1E84", "\u1E85"], /* LATIN SMALL LETTER W WITH DIAERESIS */ + ["\u1E86", "\u1E87"], /* LATIN CAPITAL LETTER W WITH DOT ABOVE */ + ["\u1E86", "\u1E87"], /* LATIN SMALL LETTER W WITH DOT ABOVE */ + ["\u1E88", "\u1E89"], /* LATIN CAPITAL LETTER W WITH DOT BELOW */ + ["\u1E88", "\u1E89"], /* LATIN SMALL LETTER W WITH DOT BELOW */ + ["\u1E8A", "\u1E8B"], /* LATIN CAPITAL LETTER X WITH DOT ABOVE */ + ["\u1E8A", "\u1E8B"], /* LATIN SMALL LETTER X WITH DOT ABOVE */ + ["\u1E8C", "\u1E8D"], /* LATIN CAPITAL LETTER X WITH DIAERESIS */ + ["\u1E8C", "\u1E8D"], /* LATIN SMALL LETTER X WITH DIAERESIS */ + ["\u1E8E", "\u1E8F"], /* LATIN CAPITAL LETTER Y WITH DOT ABOVE */ + ["\u1E8E", "\u1E8F"], /* LATIN SMALL LETTER Y WITH DOT ABOVE */ + ["\u1E90", "\u1E91"], /* LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */ + ["\u1E90", "\u1E91"], /* LATIN SMALL LETTER Z WITH CIRCUMFLEX */ + ["\u1E92", "\u1E93"], /* LATIN CAPITAL LETTER Z WITH DOT BELOW */ + ["\u1E92", "\u1E93"], /* LATIN SMALL LETTER Z WITH DOT BELOW */ + ["\u1E94", "\u1E95"], /* LATIN CAPITAL LETTER Z WITH LINE BELOW */ + ["\u1E94", "\u1E95"], /* LATIN SMALL LETTER Z WITH LINE BELOW */ + ["\u0048\u0331", "\u1E96"], /* LATIN SMALL LETTER H WITH LINE BELOW */ + ["\u0054\u0308", "\u1E97"], /* LATIN SMALL LETTER T WITH DIAERESIS */ + ["\u0057\u030A", "\u1E98"], /* LATIN SMALL LETTER W WITH RING ABOVE */ + ["\u0059\u030A", "\u1E99"], /* LATIN SMALL LETTER Y WITH RING ABOVE */ + ["\u0041\u02BE", "\u1E9A"], /* LATIN SMALL LETTER A WITH RIGHT HALF RING */ + ["\u1E60", "\u1E9B"], /* LATIN SMALL LETTER LONG S WITH DOT ABOVE */ + ["\u1E9C", "\u1E9C"], /* LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE */ + ["\u1E9D", "\u1E9D"], /* LATIN SMALL LETTER LONG S WITH HIGH STROKE */ + ["\u1E9E", "\u00DF"], /* LATIN CAPITAL LETTER SHARP S */ + ["\u1E9F", "\u1E9F"], /* LATIN SMALL LETTER DELTA */ + ["\u1EA0", "\u1EA1"], /* LATIN CAPITAL LETTER A WITH DOT BELOW */ + ["\u1EA0", "\u1EA1"], /* LATIN SMALL LETTER A WITH DOT BELOW */ + ["\u1EA2", "\u1EA3"], /* LATIN CAPITAL LETTER A WITH HOOK ABOVE */ + ["\u1EA2", "\u1EA3"], /* LATIN SMALL LETTER A WITH HOOK ABOVE */ + ["\u1EA4", "\u1EA5"], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ + ["\u1EA4", "\u1EA5"], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */ + ["\u1EA6", "\u1EA7"], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ + ["\u1EA6", "\u1EA7"], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */ + ["\u1EA8", "\u1EA9"], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ + ["\u1EA8", "\u1EA9"], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ + ["\u1EAA", "\u1EAB"], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ + ["\u1EAA", "\u1EAB"], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */ + ["\u1EAC", "\u1EAD"], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ + ["\u1EAC", "\u1EAD"], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ + ["\u1EAE", "\u1EAF"], /* LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ + ["\u1EAE", "\u1EAF"], /* LATIN SMALL LETTER A WITH BREVE AND ACUTE */ + ["\u1EB0", "\u1EB1"], /* LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ + ["\u1EB0", "\u1EB1"], /* LATIN SMALL LETTER A WITH BREVE AND GRAVE */ + ["\u1EB2", "\u1EB3"], /* LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ + ["\u1EB2", "\u1EB3"], /* LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */ + ["\u1EB4", "\u1EB5"], /* LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ + ["\u1EB4", "\u1EB5"], /* LATIN SMALL LETTER A WITH BREVE AND TILDE */ + ["\u1EB6", "\u1EB7"], /* LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ + ["\u1EB6", "\u1EB7"], /* LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */ + ["\u1EB8", "\u1EB9"], /* LATIN CAPITAL LETTER E WITH DOT BELOW */ + ["\u1EB8", "\u1EB9"], /* LATIN SMALL LETTER E WITH DOT BELOW */ + ["\u1EBA", "\u1EBB"], /* LATIN CAPITAL LETTER E WITH HOOK ABOVE */ + ["\u1EBA", "\u1EBB"], /* LATIN SMALL LETTER E WITH HOOK ABOVE */ + ["\u1EBC", "\u1EBD"], /* LATIN CAPITAL LETTER E WITH TILDE */ + ["\u1EBC", "\u1EBD"], /* LATIN SMALL LETTER E WITH TILDE */ + ["\u1EBE", "\u1EBF"], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ + ["\u1EBE", "\u1EBF"], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */ + ["\u1EC0", "\u1EC1"], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ + ["\u1EC0", "\u1EC1"], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */ + ["\u1EC2", "\u1EC3"], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ + ["\u1EC2", "\u1EC3"], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ + ["\u1EC4", "\u1EC5"], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ + ["\u1EC4", "\u1EC5"], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */ + ["\u1EC6", "\u1EC7"], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ + ["\u1EC6", "\u1EC7"], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ + ["\u1EC8", "\u1EC9"], /* LATIN CAPITAL LETTER I WITH HOOK ABOVE */ + ["\u1EC8", "\u1EC9"], /* LATIN SMALL LETTER I WITH HOOK ABOVE */ + ["\u1ECA", "\u1ECB"], /* LATIN CAPITAL LETTER I WITH DOT BELOW */ + ["\u1ECA", "\u1ECB"], /* LATIN SMALL LETTER I WITH DOT BELOW */ + ["\u1ECC", "\u1ECD"], /* LATIN CAPITAL LETTER O WITH DOT BELOW */ + ["\u1ECC", "\u1ECD"], /* LATIN SMALL LETTER O WITH DOT BELOW */ + ["\u1ECE", "\u1ECF"], /* LATIN CAPITAL LETTER O WITH HOOK ABOVE */ + ["\u1ECE", "\u1ECF"], /* LATIN SMALL LETTER O WITH HOOK ABOVE */ + ["\u1ED0", "\u1ED1"], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ + ["\u1ED0", "\u1ED1"], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */ + ["\u1ED2", "\u1ED3"], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ + ["\u1ED2", "\u1ED3"], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */ + ["\u1ED4", "\u1ED5"], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ + ["\u1ED4", "\u1ED5"], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ + ["\u1ED6", "\u1ED7"], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ + ["\u1ED6", "\u1ED7"], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */ + ["\u1ED8", "\u1ED9"], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ + ["\u1ED8", "\u1ED9"], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ + ["\u1EDA", "\u1EDB"], /* LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ + ["\u1EDA", "\u1EDB"], /* LATIN SMALL LETTER O WITH HORN AND ACUTE */ + ["\u1EDC", "\u1EDD"], /* LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ + ["\u1EDC", "\u1EDD"], /* LATIN SMALL LETTER O WITH HORN AND GRAVE */ + ["\u1EDE", "\u1EDF"], /* LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ + ["\u1EDE", "\u1EDF"], /* LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */ + ["\u1EE0", "\u1EE1"], /* LATIN CAPITAL LETTER O WITH HORN AND TILDE */ + ["\u1EE0", "\u1EE1"], /* LATIN SMALL LETTER O WITH HORN AND TILDE */ + ["\u1EE2", "\u1EE3"], /* LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ + ["\u1EE2", "\u1EE3"], /* LATIN SMALL LETTER O WITH HORN AND DOT BELOW */ + ["\u1EE4", "\u1EE5"], /* LATIN CAPITAL LETTER U WITH DOT BELOW */ + ["\u1EE4", "\u1EE5"], /* LATIN SMALL LETTER U WITH DOT BELOW */ + ["\u1EE6", "\u1EE7"], /* LATIN CAPITAL LETTER U WITH HOOK ABOVE */ + ["\u1EE6", "\u1EE7"], /* LATIN SMALL LETTER U WITH HOOK ABOVE */ + ["\u1EE8", "\u1EE9"], /* LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ + ["\u1EE8", "\u1EE9"], /* LATIN SMALL LETTER U WITH HORN AND ACUTE */ + ["\u1EEA", "\u1EEB"], /* LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ + ["\u1EEA", "\u1EEB"], /* LATIN SMALL LETTER U WITH HORN AND GRAVE */ + ["\u1EEC", "\u1EED"], /* LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ + ["\u1EEC", "\u1EED"], /* LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */ + ["\u1EEE", "\u1EEF"], /* LATIN CAPITAL LETTER U WITH HORN AND TILDE */ + ["\u1EEE", "\u1EEF"], /* LATIN SMALL LETTER U WITH HORN AND TILDE */ + ["\u1EF0", "\u1EF1"], /* LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ + ["\u1EF0", "\u1EF1"], /* LATIN SMALL LETTER U WITH HORN AND DOT BELOW */ + ["\u1EF2", "\u1EF3"], /* LATIN CAPITAL LETTER Y WITH GRAVE */ + ["\u1EF2", "\u1EF3"], /* LATIN SMALL LETTER Y WITH GRAVE */ + ["\u1EF4", "\u1EF5"], /* LATIN CAPITAL LETTER Y WITH DOT BELOW */ + ["\u1EF4", "\u1EF5"], /* LATIN SMALL LETTER Y WITH DOT BELOW */ + ["\u1EF6", "\u1EF7"], /* LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ + ["\u1EF6", "\u1EF7"], /* LATIN SMALL LETTER Y WITH HOOK ABOVE */ + ["\u1EF8", "\u1EF9"], /* LATIN CAPITAL LETTER Y WITH TILDE */ + ["\u1EF8", "\u1EF9"], /* LATIN SMALL LETTER Y WITH TILDE */ + ["\u1EFA", "\u1EFB"], /* LATIN CAPITAL LETTER MIDDLE-WELSH LL */ + ["\u1EFA", "\u1EFB"], /* LATIN SMALL LETTER MIDDLE-WELSH LL */ + ["\u1EFC", "\u1EFD"], /* LATIN CAPITAL LETTER MIDDLE-WELSH V */ + ["\u1EFC", "\u1EFD"], /* LATIN SMALL LETTER MIDDLE-WELSH V */ + ["\u1EFE", "\u1EFF"], /* LATIN CAPITAL LETTER Y WITH LOOP */ + ["\u1EFE", "\u1EFF"], /* LATIN SMALL LETTER Y WITH LOOP */ + ["\u1F08", "\u1F00"], /* GREEK SMALL LETTER ALPHA WITH PSILI */ + ["\u1F09", "\u1F01"], /* GREEK SMALL LETTER ALPHA WITH DASIA */ + ["\u1F0A", "\u1F02"], /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */ + ["\u1F0B", "\u1F03"], /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */ + ["\u1F0C", "\u1F04"], /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */ + ["\u1F0D", "\u1F05"], /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */ + ["\u1F0E", "\u1F06"], /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */ + ["\u1F0F", "\u1F07"], /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */ + ["\u1F08", "\u1F00"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI */ + ["\u1F09", "\u1F01"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA */ + ["\u1F0A", "\u1F02"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */ + ["\u1F0B", "\u1F03"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */ + ["\u1F0C", "\u1F04"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */ + ["\u1F0D", "\u1F05"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */ + ["\u1F0E", "\u1F06"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */ + ["\u1F0F", "\u1F07"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */ + ["\u1F18", "\u1F10"], /* GREEK SMALL LETTER EPSILON WITH PSILI */ + ["\u1F19", "\u1F11"], /* GREEK SMALL LETTER EPSILON WITH DASIA */ + ["\u1F1A", "\u1F12"], /* GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */ + ["\u1F1B", "\u1F13"], /* GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */ + ["\u1F1C", "\u1F14"], /* GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */ + ["\u1F1D", "\u1F15"], /* GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */ + ["\u1F16", "\u1F16"], + ["\u1F17", "\u1F17"], + ["\u1F18", "\u1F10"], /* GREEK CAPITAL LETTER EPSILON WITH PSILI */ + ["\u1F19", "\u1F11"], /* GREEK CAPITAL LETTER EPSILON WITH DASIA */ + ["\u1F1A", "\u1F12"], /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */ + ["\u1F1B", "\u1F13"], /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */ + ["\u1F1C", "\u1F14"], /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */ + ["\u1F1D", "\u1F15"], /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */ + ["\u1F1E", "\u1F1E"], + ["\u1F1F", "\u1F1F"], + ["\u1F28", "\u1F20"], /* GREEK SMALL LETTER ETA WITH PSILI */ + ["\u1F29", "\u1F21"], /* GREEK SMALL LETTER ETA WITH DASIA */ + ["\u1F2A", "\u1F22"], /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA */ + ["\u1F2B", "\u1F23"], /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA */ + ["\u1F2C", "\u1F24"], /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA */ + ["\u1F2D", "\u1F25"], /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA */ + ["\u1F2E", "\u1F26"], /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */ + ["\u1F2F", "\u1F27"], /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */ + ["\u1F28", "\u1F20"], /* GREEK CAPITAL LETTER ETA WITH PSILI */ + ["\u1F29", "\u1F21"], /* GREEK CAPITAL LETTER ETA WITH DASIA */ + ["\u1F2A", "\u1F22"], /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */ + ["\u1F2B", "\u1F23"], /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */ + ["\u1F2C", "\u1F24"], /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */ + ["\u1F2D", "\u1F25"], /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */ + ["\u1F2E", "\u1F26"], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */ + ["\u1F2F", "\u1F27"], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */ + ["\u1F38", "\u1F30"], /* GREEK SMALL LETTER IOTA WITH PSILI */ + ["\u1F39", "\u1F31"], /* GREEK SMALL LETTER IOTA WITH DASIA */ + ["\u1F3A", "\u1F32"], /* GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */ + ["\u1F3B", "\u1F33"], /* GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */ + ["\u1F3C", "\u1F34"], /* GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */ + ["\u1F3D", "\u1F35"], /* GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */ + ["\u1F3E", "\u1F36"], /* GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */ + ["\u1F3F", "\u1F37"], /* GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */ + ["\u1F38", "\u1F30"], /* GREEK CAPITAL LETTER IOTA WITH PSILI */ + ["\u1F39", "\u1F31"], /* GREEK CAPITAL LETTER IOTA WITH DASIA */ + ["\u1F3A", "\u1F32"], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */ + ["\u1F3B", "\u1F33"], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */ + ["\u1F3C", "\u1F34"], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */ + ["\u1F3D", "\u1F35"], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */ + ["\u1F3E", "\u1F36"], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */ + ["\u1F3F", "\u1F37"], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */ + ["\u1F48", "\u1F40"], /* GREEK SMALL LETTER OMICRON WITH PSILI */ + ["\u1F49", "\u1F41"], /* GREEK SMALL LETTER OMICRON WITH DASIA */ + ["\u1F4A", "\u1F42"], /* GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */ + ["\u1F4B", "\u1F43"], /* GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */ + ["\u1F4C", "\u1F44"], /* GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */ + ["\u1F4D", "\u1F45"], /* GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */ + ["\u1F46", "\u1F46"], + ["\u1F47", "\u1F47"], + ["\u1F48", "\u1F40"], /* GREEK CAPITAL LETTER OMICRON WITH PSILI */ + ["\u1F49", "\u1F41"], /* GREEK CAPITAL LETTER OMICRON WITH DASIA */ + ["\u1F4A", "\u1F42"], /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */ + ["\u1F4B", "\u1F43"], /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */ + ["\u1F4C", "\u1F44"], /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */ + ["\u1F4D", "\u1F45"], /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */ + ["\u1F4E", "\u1F4E"], + ["\u1F4F", "\u1F4F"], + ["\u03A5\u0313", "\u1F50"], /* GREEK SMALL LETTER UPSILON WITH PSILI */ + ["\u1F59", "\u1F51"], /* GREEK SMALL LETTER UPSILON WITH DASIA */ + ["\u03A5\u0313\u0300", "\u1F52"], /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */ + ["\u1F5B", "\u1F53"], /* GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */ + ["\u03A5\u0313\u0301", "\u1F54"], /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */ + ["\u1F5D", "\u1F55"], /* GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */ + ["\u03A5\u0313\u0342", "\u1F56"], /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */ + ["\u1F5F", "\u1F57"], /* GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */ + ["\u1F58", "\u1F58"], + ["\u1F59", "\u1F51"], /* GREEK CAPITAL LETTER UPSILON WITH DASIA */ + ["\u1F5A", "\u1F5A"], + ["\u1F5B", "\u1F53"], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */ + ["\u1F5C", "\u1F5C"], + ["\u1F5D", "\u1F55"], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */ + ["\u1F5E", "\u1F5E"], + ["\u1F5F", "\u1F57"], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */ + ["\u1F68", "\u1F60"], /* GREEK SMALL LETTER OMEGA WITH PSILI */ + ["\u1F69", "\u1F61"], /* GREEK SMALL LETTER OMEGA WITH DASIA */ + ["\u1F6A", "\u1F62"], /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */ + ["\u1F6B", "\u1F63"], /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */ + ["\u1F6C", "\u1F64"], /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */ + ["\u1F6D", "\u1F65"], /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */ + ["\u1F6E", "\u1F66"], /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */ + ["\u1F6F", "\u1F67"], /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */ + ["\u1F68", "\u1F60"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI */ + ["\u1F69", "\u1F61"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA */ + ["\u1F6A", "\u1F62"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */ + ["\u1F6B", "\u1F63"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */ + ["\u1F6C", "\u1F64"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */ + ["\u1F6D", "\u1F65"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */ + ["\u1F6E", "\u1F66"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */ + ["\u1F6F", "\u1F67"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */ + ["\u1FBA", "\u1F70"], /* GREEK SMALL LETTER ALPHA WITH VARIA */ + ["\u1FBB", "\u1F71"], /* GREEK SMALL LETTER ALPHA WITH OXIA */ + ["\u1FC8", "\u1F72"], /* GREEK SMALL LETTER EPSILON WITH VARIA */ + ["\u1FC9", "\u1F73"], /* GREEK SMALL LETTER EPSILON WITH OXIA */ + ["\u1FCA", "\u1F74"], /* GREEK SMALL LETTER ETA WITH VARIA */ + ["\u1FCB", "\u1F75"], /* GREEK SMALL LETTER ETA WITH OXIA */ + ["\u1FDA", "\u1F76"], /* GREEK SMALL LETTER IOTA WITH VARIA */ + ["\u1FDB", "\u1F77"], /* GREEK SMALL LETTER IOTA WITH OXIA */ + ["\u1FF8", "\u1F78"], /* GREEK SMALL LETTER OMICRON WITH VARIA */ + ["\u1FF9", "\u1F79"], /* GREEK SMALL LETTER OMICRON WITH OXIA */ + ["\u1FEA", "\u1F7A"], /* GREEK SMALL LETTER UPSILON WITH VARIA */ + ["\u1FEB", "\u1F7B"], /* GREEK SMALL LETTER UPSILON WITH OXIA */ + ["\u1FFA", "\u1F7C"], /* GREEK SMALL LETTER OMEGA WITH VARIA */ + ["\u1FFB", "\u1F7D"], /* GREEK SMALL LETTER OMEGA WITH OXIA */ + ["\u1F7E", "\u1F7E"], + ["\u1F7F", "\u1F7F"], + ["\u1F08\u0399", "\u1F80"], /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */ + ["\u1F09\u0399", "\u1F81"], /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */ + ["\u1F0A\u0399", "\u1F82"], /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ + ["\u1F0B\u0399", "\u1F83"], /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ + ["\u1F0C\u0399", "\u1F84"], /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ + ["\u1F0D\u0399", "\u1F85"], /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ + ["\u1F0E\u0399", "\u1F86"], /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1F0F\u0399", "\u1F87"], /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1F08\u0399", "\u1F80"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */ + ["\u1F09\u0399", "\u1F81"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */ + ["\u1F0A\u0399", "\u1F82"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ + ["\u1F0B\u0399", "\u1F83"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ + ["\u1F0C\u0399", "\u1F84"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ + ["\u1F0D\u0399", "\u1F85"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ + ["\u1F0E\u0399", "\u1F86"], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ + ["\u1F0F\u0399", "\u1F87"], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ + ["\u1F28\u0399", "\u1F90"], /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */ + ["\u1F29\u0399", "\u1F91"], /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */ + ["\u1F2A\u0399", "\u1F92"], /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ + ["\u1F2B\u0399", "\u1F93"], /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ + ["\u1F2C\u0399", "\u1F94"], /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ + ["\u1F2D\u0399", "\u1F95"], /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ + ["\u1F2E\u0399", "\u1F96"], /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1F2F\u0399", "\u1F97"], /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1F28\u0399", "\u1F90"], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */ + ["\u1F29\u0399", "\u1F91"], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */ + ["\u1F2A\u0399", "\u1F92"], /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ + ["\u1F2B\u0399", "\u1F93"], /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ + ["\u1F2C\u0399", "\u1F94"], /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ + ["\u1F2D\u0399", "\u1F95"], /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ + ["\u1F2E\u0399", "\u1F96"], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ + ["\u1F2F\u0399", "\u1F97"], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ + ["\u1F68\u0399", "\u1FA0"], /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */ + ["\u1F69\u0399", "\u1FA1"], /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */ + ["\u1F6A\u0399", "\u1FA2"], /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ + ["\u1F6B\u0399", "\u1FA3"], /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ + ["\u1F6C\u0399", "\u1FA4"], /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ + ["\u1F6D\u0399", "\u1FA5"], /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ + ["\u1F6E\u0399", "\u1FA6"], /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1F6F\u0399", "\u1FA7"], /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1F68\u0399", "\u1FA0"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */ + ["\u1F69\u0399", "\u1FA1"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */ + ["\u1F6A\u0399", "\u1FA2"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ + ["\u1F6B\u0399", "\u1FA3"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ + ["\u1F6C\u0399", "\u1FA4"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ + ["\u1F6D\u0399", "\u1FA5"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ + ["\u1F6E\u0399", "\u1FA6"], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ + ["\u1F6F\u0399", "\u1FA7"], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ + ["\u1FB8", "\u1FB0"], /* GREEK SMALL LETTER ALPHA WITH VRACHY */ + ["\u1FB9", "\u1FB1"], /* GREEK SMALL LETTER ALPHA WITH MACRON */ + ["\u1FBA\u0399", "\u1FB2"], /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */ + ["\u0391\u0399", "\u1FB3"], /* GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */ + ["\u0386\u0399", "\u1FB4"], /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */ + ["\u1FB5", "\u1FB5"], + ["\u0391\u0342", "\u1FB6"], /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI */ + ["\u0391\u0342\u0399", "\u1FB7"], /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1FB8", "\u1FB0"], /* GREEK CAPITAL LETTER ALPHA WITH VRACHY */ + ["\u1FB9", "\u1FB1"], /* GREEK CAPITAL LETTER ALPHA WITH MACRON */ + ["\u1FBA", "\u1F70"], /* GREEK CAPITAL LETTER ALPHA WITH VARIA */ + ["\u1FBB", "\u1F71"], /* GREEK CAPITAL LETTER ALPHA WITH OXIA */ + ["\u0391\u0399", "\u1FB3"], /* GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */ + ["\u1FBD", "\u1FBD"], /* GREEK KORONIS */ + ["\u0399", "\u1FBE"], /* GREEK PROSGEGRAMMENI */ + ["\u1FBF", "\u1FBF"], /* GREEK PSILI */ + ["\u1FC0", "\u1FC0"], /* GREEK PERISPOMENI */ + ["\u1FC1", "\u1FC1"], /* GREEK DIALYTIKA AND PERISPOMENI */ + ["\u1FCA\u0399", "\u1FC2"], /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */ + ["\u0397\u0399", "\u1FC3"], /* GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */ + ["\u0389\u0399", "\u1FC4"], /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */ + ["\u1FC5", "\u1FC5"], + ["\u0397\u0342", "\u1FC6"], /* GREEK SMALL LETTER ETA WITH PERISPOMENI */ + ["\u0397\u0342\u0399", "\u1FC7"], /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1FC8", "\u1F72"], /* GREEK CAPITAL LETTER EPSILON WITH VARIA */ + ["\u1FC9", "\u1F73"], /* GREEK CAPITAL LETTER EPSILON WITH OXIA */ + ["\u1FCA", "\u1F74"], /* GREEK CAPITAL LETTER ETA WITH VARIA */ + ["\u1FCB", "\u1F75"], /* GREEK CAPITAL LETTER ETA WITH OXIA */ + ["\u0397\u0399", "\u1FC3"], /* GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */ + ["\u1FCD", "\u1FCD"], /* GREEK PSILI AND VARIA */ + ["\u1FCE", "\u1FCE"], /* GREEK PSILI AND OXIA */ + ["\u1FCF", "\u1FCF"], /* GREEK PSILI AND PERISPOMENI */ + ["\u1FD8", "\u1FD0"], /* GREEK SMALL LETTER IOTA WITH VRACHY */ + ["\u1FD9", "\u1FD1"], /* GREEK SMALL LETTER IOTA WITH MACRON */ + ["\u0399\u0308\u0300", "\u1FD2"], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */ + ["\u0399\u0308\u0301", "\u1FD3"], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */ + ["\u1FD4", "\u1FD4"], + ["\u1FD5", "\u1FD5"], + ["\u0399\u0342", "\u1FD6"], /* GREEK SMALL LETTER IOTA WITH PERISPOMENI */ + ["\u0399\u0308\u0342", "\u1FD7"], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */ + ["\u1FD8", "\u1FD0"], /* GREEK CAPITAL LETTER IOTA WITH VRACHY */ + ["\u1FD9", "\u1FD1"], /* GREEK CAPITAL LETTER IOTA WITH MACRON */ + ["\u1FDA", "\u1F76"], /* GREEK CAPITAL LETTER IOTA WITH VARIA */ + ["\u1FDB", "\u1F77"], /* GREEK CAPITAL LETTER IOTA WITH OXIA */ + ["\u1FDC", "\u1FDC"], + ["\u1FDD", "\u1FDD"], /* GREEK DASIA AND VARIA */ + ["\u1FDE", "\u1FDE"], /* GREEK DASIA AND OXIA */ + ["\u1FDF", "\u1FDF"], /* GREEK DASIA AND PERISPOMENI */ + ["\u1FE8", "\u1FE0"], /* GREEK SMALL LETTER UPSILON WITH VRACHY */ + ["\u1FE9", "\u1FE1"], /* GREEK SMALL LETTER UPSILON WITH MACRON */ + ["\u03A5\u0308\u0300", "\u1FE2"], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */ + ["\u03A5\u0308\u0301", "\u1FE3"], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */ + ["\u03A1\u0313", "\u1FE4"], /* GREEK SMALL LETTER RHO WITH PSILI */ + ["\u1FEC", "\u1FE5"], /* GREEK SMALL LETTER RHO WITH DASIA */ + ["\u03A5\u0342", "\u1FE6"], /* GREEK SMALL LETTER UPSILON WITH PERISPOMENI */ + ["\u03A5\u0308\u0342", "\u1FE7"], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */ + ["\u1FE8", "\u1FE0"], /* GREEK CAPITAL LETTER UPSILON WITH VRACHY */ + ["\u1FE9", "\u1FE1"], /* GREEK CAPITAL LETTER UPSILON WITH MACRON */ + ["\u1FEA", "\u1F7A"], /* GREEK CAPITAL LETTER UPSILON WITH VARIA */ + ["\u1FEB", "\u1F7B"], /* GREEK CAPITAL LETTER UPSILON WITH OXIA */ + ["\u1FEC", "\u1FE5"], /* GREEK CAPITAL LETTER RHO WITH DASIA */ + ["\u1FED", "\u1FED"], /* GREEK DIALYTIKA AND VARIA */ + ["\u1FEE", "\u1FEE"], /* GREEK DIALYTIKA AND OXIA */ + ["\u1FEF", "\u1FEF"], /* GREEK VARIA */ + ["\u1FF0", "\u1FF0"], + ["\u1FF1", "\u1FF1"], + ["\u1FFA\u0399", "\u1FF2"], /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */ + ["\u03A9\u0399", "\u1FF3"], /* GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */ + ["\u038F\u0399", "\u1FF4"], /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */ + ["\u1FF5", "\u1FF5"], + ["\u03A9\u0342", "\u1FF6"], /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI */ + ["\u03A9\u0342\u0399", "\u1FF7"], /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */ + ["\u1FF8", "\u1F78"], /* GREEK CAPITAL LETTER OMICRON WITH VARIA */ + ["\u1FF9", "\u1F79"], /* GREEK CAPITAL LETTER OMICRON WITH OXIA */ + ["\u1FFA", "\u1F7C"], /* GREEK CAPITAL LETTER OMEGA WITH VARIA */ + ["\u1FFB", "\u1F7D"], /* GREEK CAPITAL LETTER OMEGA WITH OXIA */ + ["\u03A9\u0399", "\u1FF3"], /* GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */ + ["\u1FFD", "\u1FFD"], /* GREEK OXIA */ + ["\u1FFE", "\u1FFE"], /* GREEK DASIA */ + ["\u1FFF", "\u1FFF"], + ["\u2000", "\u2000"], /* EN QUAD */ + ["\u2001", "\u2001"], /* EM QUAD */ + ["\u2002", "\u2002"], /* EN SPACE */ + ["\u2003", "\u2003"], /* EM SPACE */ + ["\u2004", "\u2004"], /* THREE-PER-EM SPACE */ + ["\u2005", "\u2005"], /* FOUR-PER-EM SPACE */ + ["\u2006", "\u2006"], /* SIX-PER-EM SPACE */ + ["\u2007", "\u2007"], /* FIGURE SPACE */ + ["\u2008", "\u2008"], /* PUNCTUATION SPACE */ + ["\u2009", "\u2009"], /* THIN SPACE */ + ["\u200A", "\u200A"], /* HAIR SPACE */ + ["\u200B", "\u200B"], /* ZERO WIDTH SPACE */ + ["\u200C", "\u200C"], /* ZERO WIDTH NON-JOINER */ + ["\u200D", "\u200D"], /* ZERO WIDTH JOINER */ + ["\u200E", "\u200E"], /* LEFT-TO-RIGHT MARK */ + ["\u200F", "\u200F"], /* RIGHT-TO-LEFT MARK */ + ["\u2010", "\u2010"], /* HYPHEN */ + ["\u2011", "\u2011"], /* NON-BREAKING HYPHEN */ + ["\u2012", "\u2012"], /* FIGURE DASH */ + ["\u2013", "\u2013"], /* EN DASH */ + ["\u2014", "\u2014"], /* EM DASH */ + ["\u2015", "\u2015"], /* HORIZONTAL BAR (QUOTATION DASH) */ + ["\u2016", "\u2016"], /* DOUBLE VERTICAL LINE (DOUBLE VERTICAL BAR) */ + ["\u2017", "\u2017"], /* DOUBLE LOW LINE (SPACING DOUBLE UNDERSCORE) */ + ["\u2018", "\u2018"], /* LEFT SINGLE QUOTATION MARK (SINGLE TURNED COMMA QUOTATION MARK) */ + ["\u2019", "\u2019"], /* RIGHT SINGLE QUOTATION MARK (SINGLE COMMA QUOTATION MARK) */ + ["\u201A", "\u201A"], /* SINGLE LOW-9 QUOTATION MARK (LOW SINGLE COMMA QUOTATION MARK) */ + ["\u201B", "\u201B"], /* SINGLE HIGH-REVERSED-9 QUOTATION MARK (SINGLE REVERSED COMMA QUOTATION MARK) */ + ["\u201C", "\u201C"], /* LEFT DOUBLE QUOTATION MARK (DOUBLE TURNED COMMA QUOTATION MARK) */ + ["\u201D", "\u201D"], /* RIGHT DOUBLE QUOTATION MARK (DOUBLE COMMA QUOTATION MARK) */ + ["\u201E", "\u201E"], /* DOUBLE LOW-9 QUOTATION MARK (LOW DOUBLE COMMA QUOTATION MARK) */ + ["\u201F", "\u201F"], /* DOUBLE HIGH-REVERSED-9 QUOTATION MARK (DOUBLE REVERSED COMMA QUOTATION MARK) */ + ["\u2020", "\u2020"], /* DAGGER */ + ["\u2021", "\u2021"], /* DOUBLE DAGGER */ + ["\u2022", "\u2022"], /* BULLET */ + ["\u2023", "\u2023"], /* TRIANGULAR BULLET */ + ["\u2024", "\u2024"], /* ONE DOT LEADER */ + ["\u2025", "\u2025"], /* TWO DOT LEADER */ + ["\u2026", "\u2026"], /* HORIZONTAL ELLIPSIS */ + ["\u2027", "\u2027"], /* HYPHENATION POINT */ + ["\u2028", "\u2028"], /* LINE SEPARATOR */ + ["\u2029", "\u2029"], /* PARAGRAPH SEPARATOR */ + ["\u202A", "\u202A"], /* LEFT-TO-RIGHT EMBEDDING */ + ["\u202B", "\u202B"], /* RIGHT-TO-LEFT EMBEDDING */ + ["\u202C", "\u202C"], /* POP DIRECTIONAL FORMATTING */ + ["\u202D", "\u202D"], /* LEFT-TO-RIGHT OVERRIDE */ + ["\u202E", "\u202E"], /* RIGHT-TO-LEFT OVERRIDE */ + ["\u202F", "\u202F"], /* NARROW NO-BREAK SPACE */ + ["\u2030", "\u2030"], /* PER MILLE SIGN */ + ["\u2031", "\u2031"], /* PER TEN THOUSAND SIGN */ + ["\u2032", "\u2032"], /* PRIME */ + ["\u2033", "\u2033"], /* DOUBLE PRIME */ + ["\u2034", "\u2034"], /* TRIPLE PRIME */ + ["\u2035", "\u2035"], /* REVERSED PRIME */ + ["\u2036", "\u2036"], /* REVERSED DOUBLE PRIME */ + ["\u2037", "\u2037"], /* REVERSED TRIPLE PRIME */ + ["\u2038", "\u2038"], /* CARET */ + ["\u2039", "\u2039"], /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK (LEFT POINTING SINGLE GUILLEMET) */ + ["\u203A", "\u203A"], /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (RIGHT POINTING SINGLE GUILLEMET) */ + ["\u203B", "\u203B"], /* REFERENCE MARK */ + ["\u203C", "\u203C"], /* DOUBLE EXCLAMATION MARK */ + ["\u203D", "\u203D"], /* INTERROBANG */ + ["\u203E", "\u203E"], /* OVERLINE (SPACING OVERSCORE) */ + ["\u203F", "\u203F"], /* UNDERTIE */ + ["\u2040", "\u2040"], /* CHARACTER TIE */ + ["\u2041", "\u2041"], /* CARET INSERTION POINT */ + ["\u2042", "\u2042"], /* ASTERISM */ + ["\u2043", "\u2043"], /* HYPHEN BULLET */ + ["\u2044", "\u2044"], /* FRACTION SLASH */ + ["\u2045", "\u2045"], /* LEFT SQUARE BRACKET WITH QUILL */ + ["\u2046", "\u2046"], /* RIGHT SQUARE BRACKET WITH QUILL */ + ["\u2047", "\u2047"], /* DOUBLE QUESTION MARK */ + ["\u2048", "\u2048"], /* QUESTION EXCLAMATION MARK */ + ["\u2049", "\u2049"], /* EXCLAMATION QUESTION MARK */ + ["\u204A", "\u204A"], /* TIRONIAN SIGN ET */ + ["\u204B", "\u204B"], /* REVERSED PILCROW SIGN */ + ["\u204C", "\u204C"], /* BLACK LEFTWARDS BULLET */ + ["\u204D", "\u204D"], /* BLACK RIGHTWARDS BULLET */ + ["\u204E", "\u204E"], /* LOW ASTERISK */ + ["\u204F", "\u204F"], /* REVERSED SEMICOLON */ + ["\u2050", "\u2050"], /* CLOSE UP */ + ["\u2051", "\u2051"], /* TWO ASTERISKS ALIGNED VERTICALLY */ + ["\u2052", "\u2052"], /* COMMERCIAL MINUS SIGN */ + ["\u2053", "\u2053"], /* SWUNG DASH */ + ["\u2054", "\u2054"], /* INVERTED UNDERTIE */ + ["\u2055", "\u2055"], /* FLOWER PUNCTUATION MARK */ + ["\u2056", "\u2056"], /* THREE DOT PUNCTUATION */ + ["\u2057", "\u2057"], /* QUADRUPLE PRIME */ + ["\u2058", "\u2058"], /* FOUR DOT PUNCTUATION */ + ["\u2059", "\u2059"], /* FIVE DOT PUNCTUATION */ + ["\u205A", "\u205A"], /* TWO DOT PUNCTUATION */ + ["\u205B", "\u205B"], /* FOUR DOT MARK */ + ["\u205C", "\u205C"], /* DOTTED CROSS */ + ["\u205D", "\u205D"], /* TRICOLON */ + ["\u205E", "\u205E"], /* VERTICAL FOUR DOTS */ + ["\u205F", "\u205F"], /* MEDIUM MATHEMATICAL SPACE */ + ["\u2060", "\u2060"], /* WORD JOINER */ + ["\u2061", "\u2061"], /* FUNCTION APPLICATION */ + ["\u2062", "\u2062"], /* INVISIBLE TIMES */ + ["\u2063", "\u2063"], /* INVISIBLE SEPARATOR */ + ["\u2064", "\u2064"], /* INVISIBLE PLUS */ + ["\u2065", "\u2065"], + ["\u2066", "\u2066"], /* LEFT-TO-RIGHT ISOLATE */ + ["\u2067", "\u2067"], /* RIGHT-TO-LEFT ISOLATE */ + ["\u2068", "\u2068"], /* FIRST STRONG ISOLATE */ + ["\u2069", "\u2069"], /* POP DIRECTIONAL ISOLATE */ + ["\u206A", "\u206A"], /* INHIBIT SYMMETRIC SWAPPING */ + ["\u206B", "\u206B"], /* ACTIVATE SYMMETRIC SWAPPING */ + ["\u206C", "\u206C"], /* INHIBIT ARABIC FORM SHAPING */ + ["\u206D", "\u206D"], /* ACTIVATE ARABIC FORM SHAPING */ + ["\u206E", "\u206E"], /* NATIONAL DIGIT SHAPES */ + ["\u206F", "\u206F"], /* NOMINAL DIGIT SHAPES */ + ["\u2070", "\u2070"], /* SUPERSCRIPT ZERO (SUPERSCRIPT DIGIT ZERO) */ + ["\u2071", "\u2071"], /* SUPERSCRIPT LATIN SMALL LETTER I */ + ["\u2072", "\u2072"], + ["\u2073", "\u2073"], + ["\u2074", "\u2074"], /* SUPERSCRIPT FOUR (SUPERSCRIPT DIGIT FOUR) */ + ["\u2075", "\u2075"], /* SUPERSCRIPT FIVE (SUPERSCRIPT DIGIT FIVE) */ + ["\u2076", "\u2076"], /* SUPERSCRIPT SIX (SUPERSCRIPT DIGIT SIX) */ + ["\u2077", "\u2077"], /* SUPERSCRIPT SEVEN (SUPERSCRIPT DIGIT SEVEN) */ + ["\u2078", "\u2078"], /* SUPERSCRIPT EIGHT (SUPERSCRIPT DIGIT EIGHT) */ + ["\u2079", "\u2079"], /* SUPERSCRIPT NINE (SUPERSCRIPT DIGIT NINE) */ + ["\u207A", "\u207A"], /* SUPERSCRIPT PLUS SIGN */ + ["\u207B", "\u207B"], /* SUPERSCRIPT MINUS (SUPERSCRIPT HYPHEN-MINUS) */ + ["\u207C", "\u207C"], /* SUPERSCRIPT EQUALS SIGN */ + ["\u207D", "\u207D"], /* SUPERSCRIPT LEFT PARENTHESIS (SUPERSCRIPT OPENING PARENTHESIS) */ + ["\u207E", "\u207E"], /* SUPERSCRIPT RIGHT PARENTHESIS (SUPERSCRIPT CLOSING PARENTHESIS) */ + ["\u207F", "\u207F"], /* SUPERSCRIPT LATIN SMALL LETTER N */ + ["\u2080", "\u2080"], /* SUBSCRIPT ZERO (SUBSCRIPT DIGIT ZERO) */ + ["\u2081", "\u2081"], /* SUBSCRIPT ONE (SUBSCRIPT DIGIT ONE) */ + ["\u2082", "\u2082"], /* SUBSCRIPT TWO (SUBSCRIPT DIGIT TWO) */ + ["\u2083", "\u2083"], /* SUBSCRIPT THREE (SUBSCRIPT DIGIT THREE) */ + ["\u2084", "\u2084"], /* SUBSCRIPT FOUR (SUBSCRIPT DIGIT FOUR) */ + ["\u2085", "\u2085"], /* SUBSCRIPT FIVE (SUBSCRIPT DIGIT FIVE) */ + ["\u2086", "\u2086"], /* SUBSCRIPT SIX (SUBSCRIPT DIGIT SIX) */ + ["\u2087", "\u2087"], /* SUBSCRIPT SEVEN (SUBSCRIPT DIGIT SEVEN) */ + ["\u2088", "\u2088"], /* SUBSCRIPT EIGHT (SUBSCRIPT DIGIT EIGHT) */ + ["\u2089", "\u2089"], /* SUBSCRIPT NINE (SUBSCRIPT DIGIT NINE) */ + ["\u208A", "\u208A"], /* SUBSCRIPT PLUS SIGN */ + ["\u208B", "\u208B"], /* SUBSCRIPT MINUS (SUBSCRIPT HYPHEN-MINUS) */ + ["\u208C", "\u208C"], /* SUBSCRIPT EQUALS SIGN */ + ["\u208D", "\u208D"], /* SUBSCRIPT LEFT PARENTHESIS (SUBSCRIPT OPENING PARENTHESIS) */ + ["\u208E", "\u208E"], /* SUBSCRIPT RIGHT PARENTHESIS (SUBSCRIPT CLOSING PARENTHESIS) */ + ["\u208F", "\u208F"], + ["\u2090", "\u2090"], /* LATIN SUBSCRIPT SMALL LETTER A */ + ["\u2091", "\u2091"], /* LATIN SUBSCRIPT SMALL LETTER E */ + ["\u2092", "\u2092"], /* LATIN SUBSCRIPT SMALL LETTER O */ + ["\u2093", "\u2093"], /* LATIN SUBSCRIPT SMALL LETTER X */ + ["\u2094", "\u2094"], /* LATIN SUBSCRIPT SMALL LETTER SCHWA */ + ["\u2095", "\u2095"], /* LATIN SUBSCRIPT SMALL LETTER H */ + ["\u2096", "\u2096"], /* LATIN SUBSCRIPT SMALL LETTER K */ + ["\u2097", "\u2097"], /* LATIN SUBSCRIPT SMALL LETTER L */ + ["\u2098", "\u2098"], /* LATIN SUBSCRIPT SMALL LETTER M */ + ["\u2099", "\u2099"], /* LATIN SUBSCRIPT SMALL LETTER N */ + ["\u209A", "\u209A"], /* LATIN SUBSCRIPT SMALL LETTER P */ + ["\u209B", "\u209B"], /* LATIN SUBSCRIPT SMALL LETTER S */ + ["\u209C", "\u209C"], /* LATIN SUBSCRIPT SMALL LETTER T */ + ["\u209D", "\u209D"], + ["\u209E", "\u209E"], + ["\u209F", "\u209F"], + ["\u20A0", "\u20A0"], /* EURO-CURRENCY SIGN */ + ["\u20A1", "\u20A1"], /* COLON SIGN */ + ["\u20A2", "\u20A2"], /* CRUZEIRO SIGN */ + ["\u20A3", "\u20A3"], /* FRENCH FRANC SIGN */ + ["\u20A4", "\u20A4"], /* LIRA SIGN */ + ["\u20A5", "\u20A5"], /* MILL SIGN */ + ["\u20A6", "\u20A6"], /* NAIRA SIGN */ + ["\u20A7", "\u20A7"], /* PESETA SIGN */ + ["\u20A8", "\u20A8"], /* RUPEE SIGN */ + ["\u20A9", "\u20A9"], /* WON SIGN */ + ["\u20AA", "\u20AA"], /* NEW SHEQEL SIGN */ + ["\u20AB", "\u20AB"], /* DONG SIGN */ + ["\u20AC", "\u20AC"], /* EURO SIGN */ + ["\u20AD", "\u20AD"], /* KIP SIGN */ + ["\u20AE", "\u20AE"], /* TUGRIK SIGN */ + ["\u20AF", "\u20AF"], /* DRACHMA SIGN */ + ["\u20B0", "\u20B0"], /* GERMAN PENNY SIGN */ + ["\u20B1", "\u20B1"], /* PESO SIGN */ + ["\u20B2", "\u20B2"], /* GUARANI SIGN */ + ["\u20B3", "\u20B3"], /* AUSTRAL SIGN */ + ["\u20B4", "\u20B4"], /* HRYVNIA SIGN */ + ["\u20B5", "\u20B5"], /* CEDI SIGN */ + ["\u20B6", "\u20B6"], /* LIVRE TOURNOIS SIGN */ + ["\u20B7", "\u20B7"], /* SPESMILO SIGN */ + ["\u20B8", "\u20B8"], /* TENGE SIGN */ + ["\u20B9", "\u20B9"], /* INDIAN RUPEE SIGN */ + ["\u20BA", "\u20BA"], /* TURKISH LIRA SIGN */ + ["\u20BB", "\u20BB"], /* NORDIC MARK SIGN */ + ["\u20BC", "\u20BC"], /* MANAT SIGN */ + ["\u20BD", "\u20BD"], /* RUBLE SIGN */ + ["\u20BE", "\u20BE"], /* LARI SIGN */ + ["\u20BF", "\u20BF"], /* BITCOIN SIGN */ + ["\u20C0", "\u20C0"], /* SOM SIGN */ + ["\u20C1", "\u20C1"], + ["\u20C2", "\u20C2"], + ["\u20C3", "\u20C3"], + ["\u20C4", "\u20C4"], + ["\u20C5", "\u20C5"], + ["\u20C6", "\u20C6"], + ["\u20C7", "\u20C7"], + ["\u20C8", "\u20C8"], + ["\u20C9", "\u20C9"], + ["\u20CA", "\u20CA"], + ["\u20CB", "\u20CB"], + ["\u20CC", "\u20CC"], + ["\u20CD", "\u20CD"], + ["\u20CE", "\u20CE"], + ["\u20CF", "\u20CF"], + ["\u20D0", "\u20D0"], /* COMBINING LEFT HARPOON ABOVE (NON-SPACING LEFT HARPOON ABOVE) */ + ["\u20D1", "\u20D1"], /* COMBINING RIGHT HARPOON ABOVE (NON-SPACING RIGHT HARPOON ABOVE) */ + ["\u20D2", "\u20D2"], /* COMBINING LONG VERTICAL LINE OVERLAY (NON-SPACING LONG VERTICAL BAR OVERLAY) */ + ["\u20D3", "\u20D3"], /* COMBINING SHORT VERTICAL LINE OVERLAY (NON-SPACING SHORT VERTICAL BAR OVERLAY) */ + ["\u20D4", "\u20D4"], /* COMBINING ANTICLOCKWISE ARROW ABOVE (NON-SPACING ANTICLOCKWISE ARROW ABOVE) */ + ["\u20D5", "\u20D5"], /* COMBINING CLOCKWISE ARROW ABOVE (NON-SPACING CLOCKWISE ARROW ABOVE) */ + ["\u20D6", "\u20D6"], /* COMBINING LEFT ARROW ABOVE (NON-SPACING LEFT ARROW ABOVE) */ + ["\u20D7", "\u20D7"], /* COMBINING RIGHT ARROW ABOVE (NON-SPACING RIGHT ARROW ABOVE) */ + ["\u20D8", "\u20D8"], /* COMBINING RING OVERLAY (NON-SPACING RING OVERLAY) */ + ["\u20D9", "\u20D9"], /* COMBINING CLOCKWISE RING OVERLAY (NON-SPACING CLOCKWISE RING OVERLAY) */ + ["\u20DA", "\u20DA"], /* COMBINING ANTICLOCKWISE RING OVERLAY (NON-SPACING ANTICLOCKWISE RING OVERLAY) */ + ["\u20DB", "\u20DB"], /* COMBINING THREE DOTS ABOVE (NON-SPACING THREE DOTS ABOVE) */ + ["\u20DC", "\u20DC"], /* COMBINING FOUR DOTS ABOVE (NON-SPACING FOUR DOTS ABOVE) */ + ["\u20DD", "\u20DD"], /* COMBINING ENCLOSING CIRCLE (ENCLOSING CIRCLE) */ + ["\u20DE", "\u20DE"], /* COMBINING ENCLOSING SQUARE (ENCLOSING SQUARE) */ + ["\u20DF", "\u20DF"], /* COMBINING ENCLOSING DIAMOND (ENCLOSING DIAMOND) */ + ["\u20E0", "\u20E0"], /* COMBINING ENCLOSING CIRCLE BACKSLASH (ENCLOSING CIRCLE SLASH) */ + ["\u20E1", "\u20E1"], /* COMBINING LEFT RIGHT ARROW ABOVE (NON-SPACING LEFT RIGHT ARROW ABOVE) */ + ["\u20E2", "\u20E2"], /* COMBINING ENCLOSING SCREEN */ + ["\u20E3", "\u20E3"], /* COMBINING ENCLOSING KEYCAP */ + ["\u20E4", "\u20E4"], /* COMBINING ENCLOSING UPWARD POINTING TRIANGLE */ + ["\u20E5", "\u20E5"], /* COMBINING REVERSE SOLIDUS OVERLAY */ + ["\u20E6", "\u20E6"], /* COMBINING DOUBLE VERTICAL STROKE OVERLAY */ + ["\u20E7", "\u20E7"], /* COMBINING ANNUITY SYMBOL */ + ["\u20E8", "\u20E8"], /* COMBINING TRIPLE UNDERDOT */ + ["\u20E9", "\u20E9"], /* COMBINING WIDE BRIDGE ABOVE */ + ["\u20EA", "\u20EA"], /* COMBINING LEFTWARDS ARROW OVERLAY */ + ["\u20EB", "\u20EB"], /* COMBINING LONG DOUBLE SOLIDUS OVERLAY */ + ["\u20EC", "\u20EC"], /* COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS */ + ["\u20ED", "\u20ED"], /* COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS */ + ["\u20EE", "\u20EE"], /* COMBINING LEFT ARROW BELOW */ + ["\u20EF", "\u20EF"], /* COMBINING RIGHT ARROW BELOW */ + ["\u20F0", "\u20F0"], /* COMBINING ASTERISK ABOVE */ + ["\u20F1", "\u20F1"], + ["\u20F2", "\u20F2"], + ["\u20F3", "\u20F3"], + ["\u20F4", "\u20F4"], + ["\u20F5", "\u20F5"], + ["\u20F6", "\u20F6"], + ["\u20F7", "\u20F7"], + ["\u20F8", "\u20F8"], + ["\u20F9", "\u20F9"], + ["\u20FA", "\u20FA"], + ["\u20FB", "\u20FB"], + ["\u20FC", "\u20FC"], + ["\u20FD", "\u20FD"], + ["\u20FE", "\u20FE"], + ["\u20FF", "\u20FF"], + ["\u2100", "\u2100"], /* ACCOUNT OF */ + ["\u2101", "\u2101"], /* ADDRESSED TO THE SUBJECT */ + ["\u2102", "\u2102"], /* DOUBLE-STRUCK CAPITAL C (DOUBLE-STRUCK C) */ + ["\u2103", "\u2103"], /* DEGREE CELSIUS (DEGREES CENTIGRADE) */ + ["\u2104", "\u2104"], /* CENTRE LINE SYMBOL (C L SYMBOL) */ + ["\u2105", "\u2105"], /* CARE OF */ + ["\u2106", "\u2106"], /* CADA UNA */ + ["\u2107", "\u2107"], /* EULER CONSTANT (EULERS) */ + ["\u2108", "\u2108"], /* SCRUPLE */ + ["\u2109", "\u2109"], /* DEGREE FAHRENHEIT (DEGREES FAHRENHEIT) */ + ["\u210A", "\u210A"], /* SCRIPT SMALL G */ + ["\u210B", "\u210B"], /* SCRIPT CAPITAL H (SCRIPT H) */ + ["\u210C", "\u210C"], /* BLACK-LETTER CAPITAL H (BLACK-LETTER H) */ + ["\u210D", "\u210D"], /* DOUBLE-STRUCK CAPITAL H (DOUBLE-STRUCK H) */ + ["\u210E", "\u210E"], /* PLANCK CONSTANT */ + ["\u210F", "\u210F"], /* PLANCK CONSTANT OVER TWO PI (PLANCK CONSTANT OVER 2 PI) */ + ["\u2110", "\u2110"], /* SCRIPT CAPITAL I (SCRIPT I) */ + ["\u2111", "\u2111"], /* BLACK-LETTER CAPITAL I (BLACK-LETTER I) */ + ["\u2112", "\u2112"], /* SCRIPT CAPITAL L (SCRIPT L) */ + ["\u2113", "\u2113"], /* SCRIPT SMALL L */ + ["\u2114", "\u2114"], /* L B BAR SYMBOL */ + ["\u2115", "\u2115"], /* DOUBLE-STRUCK CAPITAL N (DOUBLE-STRUCK N) */ + ["\u2116", "\u2116"], /* NUMERO SIGN (NUMERO) */ + ["\u2117", "\u2117"], /* SOUND RECORDING COPYRIGHT */ + ["\u2118", "\u2118"], /* SCRIPT CAPITAL P (SCRIPT P) */ + ["\u2119", "\u2119"], /* DOUBLE-STRUCK CAPITAL P (DOUBLE-STRUCK P) */ + ["\u211A", "\u211A"], /* DOUBLE-STRUCK CAPITAL Q (DOUBLE-STRUCK Q) */ + ["\u211B", "\u211B"], /* SCRIPT CAPITAL R (SCRIPT R) */ + ["\u211C", "\u211C"], /* BLACK-LETTER CAPITAL R (BLACK-LETTER R) */ + ["\u211D", "\u211D"], /* DOUBLE-STRUCK CAPITAL R (DOUBLE-STRUCK R) */ + ["\u211E", "\u211E"], /* PRESCRIPTION TAKE */ + ["\u211F", "\u211F"], /* RESPONSE */ + ["\u2120", "\u2120"], /* SERVICE MARK */ + ["\u2121", "\u2121"], /* TELEPHONE SIGN (T E L SYMBOL) */ + ["\u2122", "\u2122"], /* TRADE MARK SIGN (TRADEMARK) */ + ["\u2123", "\u2123"], /* VERSICLE */ + ["\u2124", "\u2124"], /* DOUBLE-STRUCK CAPITAL Z (DOUBLE-STRUCK Z) */ + ["\u2125", "\u2125"], /* OUNCE SIGN (OUNCE) */ + ["\u2126", "\u03C9"], /* OHM SIGN (OHM) */ + ["\u2127", "\u2127"], /* INVERTED OHM SIGN (MHO) */ + ["\u2128", "\u2128"], /* BLACK-LETTER CAPITAL Z (BLACK-LETTER Z) */ + ["\u2129", "\u2129"], /* TURNED GREEK SMALL LETTER IOTA */ + ["\u212A", "\u006B"], /* KELVIN SIGN (DEGREES KELVIN) */ + ["\u212B", "\u00E5"], /* ANGSTROM SIGN (ANGSTROM UNIT) */ + ["\u212C", "\u212C"], /* SCRIPT CAPITAL B (SCRIPT B) */ + ["\u212D", "\u212D"], /* BLACK-LETTER CAPITAL C (BLACK-LETTER C) */ + ["\u212E", "\u212E"], /* ESTIMATED SYMBOL */ + ["\u212F", "\u212F"], /* SCRIPT SMALL E */ + ["\u2130", "\u2130"], /* SCRIPT CAPITAL E (SCRIPT E) */ + ["\u2131", "\u2131"], /* SCRIPT CAPITAL F (SCRIPT F) */ + ["\u2132", "\u214E"], /* TURNED CAPITAL F (TURNED F) */ + ["\u2133", "\u2133"], /* SCRIPT CAPITAL M (SCRIPT M) */ + ["\u2134", "\u2134"], /* SCRIPT SMALL O */ + ["\u2135", "\u2135"], /* ALEF SYMBOL (FIRST TRANSFINITE CARDINAL) */ + ["\u2136", "\u2136"], /* BET SYMBOL (SECOND TRANSFINITE CARDINAL) */ + ["\u2137", "\u2137"], /* GIMEL SYMBOL (THIRD TRANSFINITE CARDINAL) */ + ["\u2138", "\u2138"], /* DALET SYMBOL (FOURTH TRANSFINITE CARDINAL) */ + ["\u2139", "\u2139"], /* INFORMATION SOURCE */ + ["\u213A", "\u213A"], /* ROTATED CAPITAL Q */ + ["\u213B", "\u213B"], /* FACSIMILE SIGN */ + ["\u213C", "\u213C"], /* DOUBLE-STRUCK SMALL PI */ + ["\u213D", "\u213D"], /* DOUBLE-STRUCK SMALL GAMMA */ + ["\u213E", "\u213E"], /* DOUBLE-STRUCK CAPITAL GAMMA */ + ["\u213F", "\u213F"], /* DOUBLE-STRUCK CAPITAL PI */ + ["\u2140", "\u2140"], /* DOUBLE-STRUCK N-ARY SUMMATION */ + ["\u2141", "\u2141"], /* TURNED SANS-SERIF CAPITAL G */ + ["\u2142", "\u2142"], /* TURNED SANS-SERIF CAPITAL L */ + ["\u2143", "\u2143"], /* REVERSED SANS-SERIF CAPITAL L */ + ["\u2144", "\u2144"], /* TURNED SANS-SERIF CAPITAL Y */ + ["\u2145", "\u2145"], /* DOUBLE-STRUCK ITALIC CAPITAL D */ + ["\u2146", "\u2146"], /* DOUBLE-STRUCK ITALIC SMALL D */ + ["\u2147", "\u2147"], /* DOUBLE-STRUCK ITALIC SMALL E */ + ["\u2148", "\u2148"], /* DOUBLE-STRUCK ITALIC SMALL I */ + ["\u2149", "\u2149"], /* DOUBLE-STRUCK ITALIC SMALL J */ + ["\u214A", "\u214A"], /* PROPERTY LINE */ + ["\u214B", "\u214B"], /* TURNED AMPERSAND */ + ["\u214C", "\u214C"], /* PER SIGN */ + ["\u214D", "\u214D"], /* AKTIESELSKAB */ + ["\u2132", "\u214E"], /* TURNED SMALL F */ + ["\u214F", "\u214F"], /* SYMBOL FOR SAMARITAN SOURCE */ + ["\u2150", "\u2150"], /* VULGAR FRACTION ONE SEVENTH */ + ["\u2151", "\u2151"], /* VULGAR FRACTION ONE NINTH */ + ["\u2152", "\u2152"], /* VULGAR FRACTION ONE TENTH */ + ["\u2153", "\u2153"], /* VULGAR FRACTION ONE THIRD (FRACTION ONE THIRD) */ + ["\u2154", "\u2154"], /* VULGAR FRACTION TWO THIRDS (FRACTION TWO THIRDS) */ + ["\u2155", "\u2155"], /* VULGAR FRACTION ONE FIFTH (FRACTION ONE FIFTH) */ + ["\u2156", "\u2156"], /* VULGAR FRACTION TWO FIFTHS (FRACTION TWO FIFTHS) */ + ["\u2157", "\u2157"], /* VULGAR FRACTION THREE FIFTHS (FRACTION THREE FIFTHS) */ + ["\u2158", "\u2158"], /* VULGAR FRACTION FOUR FIFTHS (FRACTION FOUR FIFTHS) */ + ["\u2159", "\u2159"], /* VULGAR FRACTION ONE SIXTH (FRACTION ONE SIXTH) */ + ["\u215A", "\u215A"], /* VULGAR FRACTION FIVE SIXTHS (FRACTION FIVE SIXTHS) */ + ["\u215B", "\u215B"], /* VULGAR FRACTION ONE EIGHTH (FRACTION ONE EIGHTH) */ + ["\u215C", "\u215C"], /* VULGAR FRACTION THREE EIGHTHS (FRACTION THREE EIGHTHS) */ + ["\u215D", "\u215D"], /* VULGAR FRACTION FIVE EIGHTHS (FRACTION FIVE EIGHTHS) */ + ["\u215E", "\u215E"], /* VULGAR FRACTION SEVEN EIGHTHS (FRACTION SEVEN EIGHTHS) */ + ["\u215F", "\u215F"], /* FRACTION NUMERATOR ONE */ + ["\u2160", "\u2170"], /* ROMAN NUMERAL ONE */ + ["\u2161", "\u2171"], /* ROMAN NUMERAL TWO */ + ["\u2162", "\u2172"], /* ROMAN NUMERAL THREE */ + ["\u2163", "\u2173"], /* ROMAN NUMERAL FOUR */ + ["\u2164", "\u2174"], /* ROMAN NUMERAL FIVE */ + ["\u2165", "\u2175"], /* ROMAN NUMERAL SIX */ + ["\u2166", "\u2176"], /* ROMAN NUMERAL SEVEN */ + ["\u2167", "\u2177"], /* ROMAN NUMERAL EIGHT */ + ["\u2168", "\u2178"], /* ROMAN NUMERAL NINE */ + ["\u2169", "\u2179"], /* ROMAN NUMERAL TEN */ + ["\u216A", "\u217A"], /* ROMAN NUMERAL ELEVEN */ + ["\u216B", "\u217B"], /* ROMAN NUMERAL TWELVE */ + ["\u216C", "\u217C"], /* ROMAN NUMERAL FIFTY */ + ["\u216D", "\u217D"], /* ROMAN NUMERAL ONE HUNDRED */ + ["\u216E", "\u217E"], /* ROMAN NUMERAL FIVE HUNDRED */ + ["\u216F", "\u217F"], /* ROMAN NUMERAL ONE THOUSAND */ + ["\u2160", "\u2170"], /* SMALL ROMAN NUMERAL ONE */ + ["\u2161", "\u2171"], /* SMALL ROMAN NUMERAL TWO */ + ["\u2162", "\u2172"], /* SMALL ROMAN NUMERAL THREE */ + ["\u2163", "\u2173"], /* SMALL ROMAN NUMERAL FOUR */ + ["\u2164", "\u2174"], /* SMALL ROMAN NUMERAL FIVE */ + ["\u2165", "\u2175"], /* SMALL ROMAN NUMERAL SIX */ + ["\u2166", "\u2176"], /* SMALL ROMAN NUMERAL SEVEN */ + ["\u2167", "\u2177"], /* SMALL ROMAN NUMERAL EIGHT */ + ["\u2168", "\u2178"], /* SMALL ROMAN NUMERAL NINE */ + ["\u2169", "\u2179"], /* SMALL ROMAN NUMERAL TEN */ + ["\u216A", "\u217A"], /* SMALL ROMAN NUMERAL ELEVEN */ + ["\u216B", "\u217B"], /* SMALL ROMAN NUMERAL TWELVE */ + ["\u216C", "\u217C"], /* SMALL ROMAN NUMERAL FIFTY */ + ["\u216D", "\u217D"], /* SMALL ROMAN NUMERAL ONE HUNDRED */ + ["\u216E", "\u217E"], /* SMALL ROMAN NUMERAL FIVE HUNDRED */ + ["\u216F", "\u217F"], /* SMALL ROMAN NUMERAL ONE THOUSAND */ + ["\u2180", "\u2180"], /* ROMAN NUMERAL ONE THOUSAND C D */ + ["\u2181", "\u2181"], /* ROMAN NUMERAL FIVE THOUSAND */ + ["\u2182", "\u2182"], /* ROMAN NUMERAL TEN THOUSAND */ + ["\u2183", "\u2184"], /* ROMAN NUMERAL REVERSED ONE HUNDRED */ + ["\u2183", "\u2184"], /* LATIN SMALL LETTER REVERSED C */ + ["\u2185", "\u2185"], /* ROMAN NUMERAL SIX LATE FORM */ + ["\u2186", "\u2186"], /* ROMAN NUMERAL FIFTY EARLY FORM */ + ["\u2187", "\u2187"], /* ROMAN NUMERAL FIFTY THOUSAND */ + ["\u2188", "\u2188"], /* ROMAN NUMERAL ONE HUNDRED THOUSAND */ + ["\u2189", "\u2189"], /* VULGAR FRACTION ZERO THIRDS */ + ["\u218A", "\u218A"], /* TURNED DIGIT TWO */ + ["\u218B", "\u218B"], /* TURNED DIGIT THREE */ + ["\u218C", "\u218C"], + ["\u218D", "\u218D"], + ["\u218E", "\u218E"], + ["\u218F", "\u218F"], + ["\u2190", "\u2190"], /* LEFTWARDS ARROW (LEFT ARROW) */ + ["\u2191", "\u2191"], /* UPWARDS ARROW (UP ARROW) */ + ["\u2192", "\u2192"], /* RIGHTWARDS ARROW (RIGHT ARROW) */ + ["\u2193", "\u2193"], /* DOWNWARDS ARROW (DOWN ARROW) */ + ["\u2194", "\u2194"], /* LEFT RIGHT ARROW */ + ["\u2195", "\u2195"], /* UP DOWN ARROW */ + ["\u2196", "\u2196"], /* NORTH WEST ARROW (UPPER LEFT ARROW) */ + ["\u2197", "\u2197"], /* NORTH EAST ARROW (UPPER RIGHT ARROW) */ + ["\u2198", "\u2198"], /* SOUTH EAST ARROW (LOWER RIGHT ARROW) */ + ["\u2199", "\u2199"], /* SOUTH WEST ARROW (LOWER LEFT ARROW) */ + ["\u219A", "\u219A"], /* LEFTWARDS ARROW WITH STROKE (LEFT ARROW WITH STROKE) */ + ["\u219B", "\u219B"], /* RIGHTWARDS ARROW WITH STROKE (RIGHT ARROW WITH STROKE) */ + ["\u219C", "\u219C"], /* LEFTWARDS WAVE ARROW (LEFT WAVE ARROW) */ + ["\u219D", "\u219D"], /* RIGHTWARDS WAVE ARROW (RIGHT WAVE ARROW) */ + ["\u219E", "\u219E"], /* LEFTWARDS TWO HEADED ARROW (LEFT TWO HEADED ARROW) */ + ["\u219F", "\u219F"], /* UPWARDS TWO HEADED ARROW (UP TWO HEADED ARROW) */ + ["\u21A0", "\u21A0"], /* RIGHTWARDS TWO HEADED ARROW (RIGHT TWO HEADED ARROW) */ + ["\u21A1", "\u21A1"], /* DOWNWARDS TWO HEADED ARROW (DOWN TWO HEADED ARROW) */ + ["\u21A2", "\u21A2"], /* LEFTWARDS ARROW WITH TAIL (LEFT ARROW WITH TAIL) */ + ["\u21A3", "\u21A3"], /* RIGHTWARDS ARROW WITH TAIL (RIGHT ARROW WITH TAIL) */ + ["\u21A4", "\u21A4"], /* LEFTWARDS ARROW FROM BAR (LEFT ARROW FROM BAR) */ + ["\u21A5", "\u21A5"], /* UPWARDS ARROW FROM BAR (UP ARROW FROM BAR) */ + ["\u21A6", "\u21A6"], /* RIGHTWARDS ARROW FROM BAR (RIGHT ARROW FROM BAR) */ + ["\u21A7", "\u21A7"], /* DOWNWARDS ARROW FROM BAR (DOWN ARROW FROM BAR) */ + ["\u21A8", "\u21A8"], /* UP DOWN ARROW WITH BASE */ + ["\u21A9", "\u21A9"], /* LEFTWARDS ARROW WITH HOOK (LEFT ARROW WITH HOOK) */ + ["\u21AA", "\u21AA"], /* RIGHTWARDS ARROW WITH HOOK (RIGHT ARROW WITH HOOK) */ + ["\u21AB", "\u21AB"], /* LEFTWARDS ARROW WITH LOOP (LEFT ARROW WITH LOOP) */ + ["\u21AC", "\u21AC"], /* RIGHTWARDS ARROW WITH LOOP (RIGHT ARROW WITH LOOP) */ + ["\u21AD", "\u21AD"], /* LEFT RIGHT WAVE ARROW */ + ["\u21AE", "\u21AE"], /* LEFT RIGHT ARROW WITH STROKE */ + ["\u21AF", "\u21AF"], /* DOWNWARDS ZIGZAG ARROW (DOWN ZIGZAG ARROW) */ + ["\u21B0", "\u21B0"], /* UPWARDS ARROW WITH TIP LEFTWARDS (UP ARROW WITH TIP LEFT) */ + ["\u21B1", "\u21B1"], /* UPWARDS ARROW WITH TIP RIGHTWARDS (UP ARROW WITH TIP RIGHT) */ + ["\u21B2", "\u21B2"], /* DOWNWARDS ARROW WITH TIP LEFTWARDS (DOWN ARROW WITH TIP LEFT) */ + ["\u21B3", "\u21B3"], /* DOWNWARDS ARROW WITH TIP RIGHTWARDS (DOWN ARROW WITH TIP RIGHT) */ + ["\u21B4", "\u21B4"], /* RIGHTWARDS ARROW WITH CORNER DOWNWARDS (RIGHT ARROW WITH CORNER DOWN) */ + ["\u21B5", "\u21B5"], /* DOWNWARDS ARROW WITH CORNER LEFTWARDS (DOWN ARROW WITH CORNER LEFT) */ + ["\u21B6", "\u21B6"], /* ANTICLOCKWISE TOP SEMICIRCLE ARROW */ + ["\u21B7", "\u21B7"], /* CLOCKWISE TOP SEMICIRCLE ARROW */ + ["\u21B8", "\u21B8"], /* NORTH WEST ARROW TO LONG BAR (UPPER LEFT ARROW TO LONG BAR) */ + ["\u21B9", "\u21B9"], /* LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR (LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR) */ + ["\u21BA", "\u21BA"], /* ANTICLOCKWISE OPEN CIRCLE ARROW */ + ["\u21BB", "\u21BB"], /* CLOCKWISE OPEN CIRCLE ARROW */ + ["\u21BC", "\u21BC"], /* LEFTWARDS HARPOON WITH BARB UPWARDS (LEFT HARPOON WITH BARB UP) */ + ["\u21BD", "\u21BD"], /* LEFTWARDS HARPOON WITH BARB DOWNWARDS (LEFT HARPOON WITH BARB DOWN) */ + ["\u21BE", "\u21BE"], /* UPWARDS HARPOON WITH BARB RIGHTWARDS (UP HARPOON WITH BARB RIGHT) */ + ["\u21BF", "\u21BF"], /* UPWARDS HARPOON WITH BARB LEFTWARDS (UP HARPOON WITH BARB LEFT) */ + ["\u21C0", "\u21C0"], /* RIGHTWARDS HARPOON WITH BARB UPWARDS (RIGHT HARPOON WITH BARB UP) */ + ["\u21C1", "\u21C1"], /* RIGHTWARDS HARPOON WITH BARB DOWNWARDS (RIGHT HARPOON WITH BARB DOWN) */ + ["\u21C2", "\u21C2"], /* DOWNWARDS HARPOON WITH BARB RIGHTWARDS (DOWN HARPOON WITH BARB RIGHT) */ + ["\u21C3", "\u21C3"], /* DOWNWARDS HARPOON WITH BARB LEFTWARDS (DOWN HARPOON WITH BARB LEFT) */ + ["\u21C4", "\u21C4"], /* RIGHTWARDS ARROW OVER LEFTWARDS ARROW (RIGHT ARROW OVER LEFT ARROW) */ + ["\u21C5", "\u21C5"], /* UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW (UP ARROW LEFT OF DOWN ARROW) */ + ["\u21C6", "\u21C6"], /* LEFTWARDS ARROW OVER RIGHTWARDS ARROW (LEFT ARROW OVER RIGHT ARROW) */ + ["\u21C7", "\u21C7"], /* LEFTWARDS PAIRED ARROWS (LEFT PAIRED ARROWS) */ + ["\u21C8", "\u21C8"], /* UPWARDS PAIRED ARROWS (UP PAIRED ARROWS) */ + ["\u21C9", "\u21C9"], /* RIGHTWARDS PAIRED ARROWS (RIGHT PAIRED ARROWS) */ + ["\u21CA", "\u21CA"], /* DOWNWARDS PAIRED ARROWS (DOWN PAIRED ARROWS) */ + ["\u21CB", "\u21CB"], /* LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON (LEFT HARPOON OVER RIGHT HARPOON) */ + ["\u21CC", "\u21CC"], /* RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON (RIGHT HARPOON OVER LEFT HARPOON) */ + ["\u21CD", "\u21CD"], /* LEFTWARDS DOUBLE ARROW WITH STROKE (LEFT DOUBLE ARROW WITH STROKE) */ + ["\u21CE", "\u21CE"], /* LEFT RIGHT DOUBLE ARROW WITH STROKE */ + ["\u21CF", "\u21CF"], /* RIGHTWARDS DOUBLE ARROW WITH STROKE (RIGHT DOUBLE ARROW WITH STROKE) */ + ["\u21D0", "\u21D0"], /* LEFTWARDS DOUBLE ARROW (LEFT DOUBLE ARROW) */ + ["\u21D1", "\u21D1"], /* UPWARDS DOUBLE ARROW (UP DOUBLE ARROW) */ + ["\u21D2", "\u21D2"], /* RIGHTWARDS DOUBLE ARROW (RIGHT DOUBLE ARROW) */ + ["\u21D3", "\u21D3"], /* DOWNWARDS DOUBLE ARROW (DOWN DOUBLE ARROW) */ + ["\u21D4", "\u21D4"], /* LEFT RIGHT DOUBLE ARROW */ + ["\u21D5", "\u21D5"], /* UP DOWN DOUBLE ARROW */ + ["\u21D6", "\u21D6"], /* NORTH WEST DOUBLE ARROW (UPPER LEFT DOUBLE ARROW) */ + ["\u21D7", "\u21D7"], /* NORTH EAST DOUBLE ARROW (UPPER RIGHT DOUBLE ARROW) */ + ["\u21D8", "\u21D8"], /* SOUTH EAST DOUBLE ARROW (LOWER RIGHT DOUBLE ARROW) */ + ["\u21D9", "\u21D9"], /* SOUTH WEST DOUBLE ARROW (LOWER LEFT DOUBLE ARROW) */ + ["\u21DA", "\u21DA"], /* LEFTWARDS TRIPLE ARROW (LEFT TRIPLE ARROW) */ + ["\u21DB", "\u21DB"], /* RIGHTWARDS TRIPLE ARROW (RIGHT TRIPLE ARROW) */ + ["\u21DC", "\u21DC"], /* LEFTWARDS SQUIGGLE ARROW (LEFT SQUIGGLE ARROW) */ + ["\u21DD", "\u21DD"], /* RIGHTWARDS SQUIGGLE ARROW (RIGHT SQUIGGLE ARROW) */ + ["\u21DE", "\u21DE"], /* UPWARDS ARROW WITH DOUBLE STROKE (UP ARROW WITH DOUBLE STROKE) */ + ["\u21DF", "\u21DF"], /* DOWNWARDS ARROW WITH DOUBLE STROKE (DOWN ARROW WITH DOUBLE STROKE) */ + ["\u21E0", "\u21E0"], /* LEFTWARDS DASHED ARROW (LEFT DASHED ARROW) */ + ["\u21E1", "\u21E1"], /* UPWARDS DASHED ARROW (UP DASHED ARROW) */ + ["\u21E2", "\u21E2"], /* RIGHTWARDS DASHED ARROW (RIGHT DASHED ARROW) */ + ["\u21E3", "\u21E3"], /* DOWNWARDS DASHED ARROW (DOWN DASHED ARROW) */ + ["\u21E4", "\u21E4"], /* LEFTWARDS ARROW TO BAR (LEFT ARROW TO BAR) */ + ["\u21E5", "\u21E5"], /* RIGHTWARDS ARROW TO BAR (RIGHT ARROW TO BAR) */ + ["\u21E6", "\u21E6"], /* LEFTWARDS WHITE ARROW (WHITE LEFT ARROW) */ + ["\u21E7", "\u21E7"], /* UPWARDS WHITE ARROW (WHITE UP ARROW) */ + ["\u21E8", "\u21E8"], /* RIGHTWARDS WHITE ARROW (WHITE RIGHT ARROW) */ + ["\u21E9", "\u21E9"], /* DOWNWARDS WHITE ARROW (WHITE DOWN ARROW) */ + ["\u21EA", "\u21EA"], /* UPWARDS WHITE ARROW FROM BAR (WHITE UP ARROW FROM BAR) */ + ["\u21EB", "\u21EB"], /* UPWARDS WHITE ARROW ON PEDESTAL */ + ["\u21EC", "\u21EC"], /* UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR */ + ["\u21ED", "\u21ED"], /* UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR */ + ["\u21EE", "\u21EE"], /* UPWARDS WHITE DOUBLE ARROW */ + ["\u21EF", "\u21EF"], /* UPWARDS WHITE DOUBLE ARROW ON PEDESTAL */ + ["\u21F0", "\u21F0"], /* RIGHTWARDS WHITE ARROW FROM WALL */ + ["\u21F1", "\u21F1"], /* NORTH WEST ARROW TO CORNER */ + ["\u21F2", "\u21F2"], /* SOUTH EAST ARROW TO CORNER */ + ["\u21F3", "\u21F3"], /* UP DOWN WHITE ARROW */ + ["\u21F4", "\u21F4"], /* RIGHT ARROW WITH SMALL CIRCLE */ + ["\u21F5", "\u21F5"], /* DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW */ + ["\u21F6", "\u21F6"], /* THREE RIGHTWARDS ARROWS */ + ["\u21F7", "\u21F7"], /* LEFTWARDS ARROW WITH VERTICAL STROKE */ + ["\u21F8", "\u21F8"], /* RIGHTWARDS ARROW WITH VERTICAL STROKE */ + ["\u21F9", "\u21F9"], /* LEFT RIGHT ARROW WITH VERTICAL STROKE */ + ["\u21FA", "\u21FA"], /* LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE */ + ["\u21FB", "\u21FB"], /* RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE */ + ["\u21FC", "\u21FC"], /* LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE */ + ["\u21FD", "\u21FD"], /* LEFTWARDS OPEN-HEADED ARROW */ + ["\u21FE", "\u21FE"], /* RIGHTWARDS OPEN-HEADED ARROW */ + ["\u21FF", "\u21FF"], /* LEFT RIGHT OPEN-HEADED ARROW */ + ["\u2200", "\u2200"], /* FOR ALL */ + ["\u2201", "\u2201"], /* COMPLEMENT */ + ["\u2202", "\u2202"], /* PARTIAL DIFFERENTIAL */ + ["\u2203", "\u2203"], /* THERE EXISTS */ + ["\u2204", "\u2204"], /* THERE DOES NOT EXIST */ + ["\u2205", "\u2205"], /* EMPTY SET */ + ["\u2206", "\u2206"], /* INCREMENT */ + ["\u2207", "\u2207"], /* NABLA */ + ["\u2208", "\u2208"], /* ELEMENT OF */ + ["\u2209", "\u2209"], /* NOT AN ELEMENT OF */ + ["\u220A", "\u220A"], /* SMALL ELEMENT OF */ + ["\u220B", "\u220B"], /* CONTAINS AS MEMBER */ + ["\u220C", "\u220C"], /* DOES NOT CONTAIN AS MEMBER */ + ["\u220D", "\u220D"], /* SMALL CONTAINS AS MEMBER */ + ["\u220E", "\u220E"], /* END OF PROOF */ + ["\u220F", "\u220F"], /* N-ARY PRODUCT */ + ["\u2210", "\u2210"], /* N-ARY COPRODUCT */ + ["\u2211", "\u2211"], /* N-ARY SUMMATION */ + ["\u2212", "\u2212"], /* MINUS SIGN */ + ["\u2213", "\u2213"], /* MINUS-OR-PLUS SIGN */ + ["\u2214", "\u2214"], /* DOT PLUS */ + ["\u2215", "\u2215"], /* DIVISION SLASH */ + ["\u2216", "\u2216"], /* SET MINUS */ + ["\u2217", "\u2217"], /* ASTERISK OPERATOR */ + ["\u2218", "\u2218"], /* RING OPERATOR */ + ["\u2219", "\u2219"], /* BULLET OPERATOR */ + ["\u221A", "\u221A"], /* SQUARE ROOT */ + ["\u221B", "\u221B"], /* CUBE ROOT */ + ["\u221C", "\u221C"], /* FOURTH ROOT */ + ["\u221D", "\u221D"], /* PROPORTIONAL TO */ + ["\u221E", "\u221E"], /* INFINITY */ + ["\u221F", "\u221F"], /* RIGHT ANGLE */ + ["\u2220", "\u2220"], /* ANGLE */ + ["\u2221", "\u2221"], /* MEASURED ANGLE */ + ["\u2222", "\u2222"], /* SPHERICAL ANGLE */ + ["\u2223", "\u2223"], /* DIVIDES */ + ["\u2224", "\u2224"], /* DOES NOT DIVIDE */ + ["\u2225", "\u2225"], /* PARALLEL TO */ + ["\u2226", "\u2226"], /* NOT PARALLEL TO */ + ["\u2227", "\u2227"], /* LOGICAL AND */ + ["\u2228", "\u2228"], /* LOGICAL OR */ + ["\u2229", "\u2229"], /* INTERSECTION */ + ["\u222A", "\u222A"], /* UNION */ + ["\u222B", "\u222B"], /* INTEGRAL */ + ["\u222C", "\u222C"], /* DOUBLE INTEGRAL */ + ["\u222D", "\u222D"], /* TRIPLE INTEGRAL */ + ["\u222E", "\u222E"], /* CONTOUR INTEGRAL */ + ["\u222F", "\u222F"], /* SURFACE INTEGRAL */ + ["\u2230", "\u2230"], /* VOLUME INTEGRAL */ + ["\u2231", "\u2231"], /* CLOCKWISE INTEGRAL */ + ["\u2232", "\u2232"], /* CLOCKWISE CONTOUR INTEGRAL */ + ["\u2233", "\u2233"], /* ANTICLOCKWISE CONTOUR INTEGRAL */ + ["\u2234", "\u2234"], /* THEREFORE */ + ["\u2235", "\u2235"], /* BECAUSE */ + ["\u2236", "\u2236"], /* RATIO */ + ["\u2237", "\u2237"], /* PROPORTION */ + ["\u2238", "\u2238"], /* DOT MINUS */ + ["\u2239", "\u2239"], /* EXCESS */ + ["\u223A", "\u223A"], /* GEOMETRIC PROPORTION */ + ["\u223B", "\u223B"], /* HOMOTHETIC */ + ["\u223C", "\u223C"], /* TILDE OPERATOR */ + ["\u223D", "\u223D"], /* REVERSED TILDE */ + ["\u223E", "\u223E"], /* INVERTED LAZY S */ + ["\u223F", "\u223F"], /* SINE WAVE */ + ["\u2240", "\u2240"], /* WREATH PRODUCT */ + ["\u2241", "\u2241"], /* NOT TILDE */ + ["\u2242", "\u2242"], /* MINUS TILDE */ + ["\u2243", "\u2243"], /* ASYMPTOTICALLY EQUAL TO */ + ["\u2244", "\u2244"], /* NOT ASYMPTOTICALLY EQUAL TO */ + ["\u2245", "\u2245"], /* APPROXIMATELY EQUAL TO */ + ["\u2246", "\u2246"], /* APPROXIMATELY BUT NOT ACTUALLY EQUAL TO */ + ["\u2247", "\u2247"], /* NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO */ + ["\u2248", "\u2248"], /* ALMOST EQUAL TO */ + ["\u2249", "\u2249"], /* NOT ALMOST EQUAL TO */ + ["\u224A", "\u224A"], /* ALMOST EQUAL OR EQUAL TO */ + ["\u224B", "\u224B"], /* TRIPLE TILDE */ + ["\u224C", "\u224C"], /* ALL EQUAL TO */ + ["\u224D", "\u224D"], /* EQUIVALENT TO */ + ["\u224E", "\u224E"], /* GEOMETRICALLY EQUIVALENT TO */ + ["\u224F", "\u224F"], /* DIFFERENCE BETWEEN */ + ["\u2250", "\u2250"], /* APPROACHES THE LIMIT */ + ["\u2251", "\u2251"], /* GEOMETRICALLY EQUAL TO */ + ["\u2252", "\u2252"], /* APPROXIMATELY EQUAL TO OR THE IMAGE OF */ + ["\u2253", "\u2253"], /* IMAGE OF OR APPROXIMATELY EQUAL TO */ + ["\u2254", "\u2254"], /* COLON EQUALS (COLON EQUAL) */ + ["\u2255", "\u2255"], /* EQUALS COLON (EQUAL COLON) */ + ["\u2256", "\u2256"], /* RING IN EQUAL TO */ + ["\u2257", "\u2257"], /* RING EQUAL TO */ + ["\u2258", "\u2258"], /* CORRESPONDS TO */ + ["\u2259", "\u2259"], /* ESTIMATES */ + ["\u225A", "\u225A"], /* EQUIANGULAR TO */ + ["\u225B", "\u225B"], /* STAR EQUALS */ + ["\u225C", "\u225C"], /* DELTA EQUAL TO */ + ["\u225D", "\u225D"], /* EQUAL TO BY DEFINITION */ + ["\u225E", "\u225E"], /* MEASURED BY */ + ["\u225F", "\u225F"], /* QUESTIONED EQUAL TO */ + ["\u2260", "\u2260"], /* NOT EQUAL TO */ + ["\u2261", "\u2261"], /* IDENTICAL TO */ + ["\u2262", "\u2262"], /* NOT IDENTICAL TO */ + ["\u2263", "\u2263"], /* STRICTLY EQUIVALENT TO */ + ["\u2264", "\u2264"], /* LESS-THAN OR EQUAL TO (LESS THAN OR EQUAL TO) */ + ["\u2265", "\u2265"], /* GREATER-THAN OR EQUAL TO (GREATER THAN OR EQUAL TO) */ + ["\u2266", "\u2266"], /* LESS-THAN OVER EQUAL TO (LESS THAN OVER EQUAL TO) */ + ["\u2267", "\u2267"], /* GREATER-THAN OVER EQUAL TO (GREATER THAN OVER EQUAL TO) */ + ["\u2268", "\u2268"], /* LESS-THAN BUT NOT EQUAL TO (LESS THAN BUT NOT EQUAL TO) */ + ["\u2269", "\u2269"], /* GREATER-THAN BUT NOT EQUAL TO (GREATER THAN BUT NOT EQUAL TO) */ + ["\u226A", "\u226A"], /* MUCH LESS-THAN (MUCH LESS THAN) */ + ["\u226B", "\u226B"], /* MUCH GREATER-THAN (MUCH GREATER THAN) */ + ["\u226C", "\u226C"], /* BETWEEN */ + ["\u226D", "\u226D"], /* NOT EQUIVALENT TO */ + ["\u226E", "\u226E"], /* NOT LESS-THAN (NOT LESS THAN) */ + ["\u226F", "\u226F"], /* NOT GREATER-THAN (NOT GREATER THAN) */ + ["\u2270", "\u2270"], /* NEITHER LESS-THAN NOR EQUAL TO (NEITHER LESS THAN NOR EQUAL TO) */ + ["\u2271", "\u2271"], /* NEITHER GREATER-THAN NOR EQUAL TO (NEITHER GREATER THAN NOR EQUAL TO) */ + ["\u2272", "\u2272"], /* LESS-THAN OR EQUIVALENT TO (LESS THAN OR EQUIVALENT TO) */ + ["\u2273", "\u2273"], /* GREATER-THAN OR EQUIVALENT TO (GREATER THAN OR EQUIVALENT TO) */ + ["\u2274", "\u2274"], /* NEITHER LESS-THAN NOR EQUIVALENT TO (NEITHER LESS THAN NOR EQUIVALENT TO) */ + ["\u2275", "\u2275"], /* NEITHER GREATER-THAN NOR EQUIVALENT TO (NEITHER GREATER THAN NOR EQUIVALENT TO) */ + ["\u2276", "\u2276"], /* LESS-THAN OR GREATER-THAN (LESS THAN OR GREATER THAN) */ + ["\u2277", "\u2277"], /* GREATER-THAN OR LESS-THAN (GREATER THAN OR LESS THAN) */ + ["\u2278", "\u2278"], /* NEITHER LESS-THAN NOR GREATER-THAN (NEITHER LESS THAN NOR GREATER THAN) */ + ["\u2279", "\u2279"], /* NEITHER GREATER-THAN NOR LESS-THAN (NEITHER GREATER THAN NOR LESS THAN) */ + ["\u227A", "\u227A"], /* PRECEDES */ + ["\u227B", "\u227B"], /* SUCCEEDS */ + ["\u227C", "\u227C"], /* PRECEDES OR EQUAL TO */ + ["\u227D", "\u227D"], /* SUCCEEDS OR EQUAL TO */ + ["\u227E", "\u227E"], /* PRECEDES OR EQUIVALENT TO */ + ["\u227F", "\u227F"], /* SUCCEEDS OR EQUIVALENT TO */ + ["\u2280", "\u2280"], /* DOES NOT PRECEDE */ + ["\u2281", "\u2281"], /* DOES NOT SUCCEED */ + ["\u2282", "\u2282"], /* SUBSET OF */ + ["\u2283", "\u2283"], /* SUPERSET OF */ + ["\u2284", "\u2284"], /* NOT A SUBSET OF */ + ["\u2285", "\u2285"], /* NOT A SUPERSET OF */ + ["\u2286", "\u2286"], /* SUBSET OF OR EQUAL TO */ + ["\u2287", "\u2287"], /* SUPERSET OF OR EQUAL TO */ + ["\u2288", "\u2288"], /* NEITHER A SUBSET OF NOR EQUAL TO */ + ["\u2289", "\u2289"], /* NEITHER A SUPERSET OF NOR EQUAL TO */ + ["\u228A", "\u228A"], /* SUBSET OF WITH NOT EQUAL TO (SUBSET OF OR NOT EQUAL TO) */ + ["\u228B", "\u228B"], /* SUPERSET OF WITH NOT EQUAL TO (SUPERSET OF OR NOT EQUAL TO) */ + ["\u228C", "\u228C"], /* MULTISET */ + ["\u228D", "\u228D"], /* MULTISET MULTIPLICATION */ + ["\u228E", "\u228E"], /* MULTISET UNION */ + ["\u228F", "\u228F"], /* SQUARE IMAGE OF */ + ["\u2290", "\u2290"], /* SQUARE ORIGINAL OF */ + ["\u2291", "\u2291"], /* SQUARE IMAGE OF OR EQUAL TO */ + ["\u2292", "\u2292"], /* SQUARE ORIGINAL OF OR EQUAL TO */ + ["\u2293", "\u2293"], /* SQUARE CAP */ + ["\u2294", "\u2294"], /* SQUARE CUP */ + ["\u2295", "\u2295"], /* CIRCLED PLUS */ + ["\u2296", "\u2296"], /* CIRCLED MINUS */ + ["\u2297", "\u2297"], /* CIRCLED TIMES */ + ["\u2298", "\u2298"], /* CIRCLED DIVISION SLASH */ + ["\u2299", "\u2299"], /* CIRCLED DOT OPERATOR */ + ["\u229A", "\u229A"], /* CIRCLED RING OPERATOR */ + ["\u229B", "\u229B"], /* CIRCLED ASTERISK OPERATOR */ + ["\u229C", "\u229C"], /* CIRCLED EQUALS */ + ["\u229D", "\u229D"], /* CIRCLED DASH */ + ["\u229E", "\u229E"], /* SQUARED PLUS */ + ["\u229F", "\u229F"], /* SQUARED MINUS */ + ["\u22A0", "\u22A0"], /* SQUARED TIMES */ + ["\u22A1", "\u22A1"], /* SQUARED DOT OPERATOR */ + ["\u22A2", "\u22A2"], /* RIGHT TACK */ + ["\u22A3", "\u22A3"], /* LEFT TACK */ + ["\u22A4", "\u22A4"], /* DOWN TACK */ + ["\u22A5", "\u22A5"], /* UP TACK */ + ["\u22A6", "\u22A6"], /* ASSERTION */ + ["\u22A7", "\u22A7"], /* MODELS */ + ["\u22A8", "\u22A8"], /* TRUE */ + ["\u22A9", "\u22A9"], /* FORCES */ + ["\u22AA", "\u22AA"], /* TRIPLE VERTICAL BAR RIGHT TURNSTILE */ + ["\u22AB", "\u22AB"], /* DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE */ + ["\u22AC", "\u22AC"], /* DOES NOT PROVE */ + ["\u22AD", "\u22AD"], /* NOT TRUE */ + ["\u22AE", "\u22AE"], /* DOES NOT FORCE */ + ["\u22AF", "\u22AF"], /* NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE */ + ["\u22B0", "\u22B0"], /* PRECEDES UNDER RELATION */ + ["\u22B1", "\u22B1"], /* SUCCEEDS UNDER RELATION */ + ["\u22B2", "\u22B2"], /* NORMAL SUBGROUP OF */ + ["\u22B3", "\u22B3"], /* CONTAINS AS NORMAL SUBGROUP */ + ["\u22B4", "\u22B4"], /* NORMAL SUBGROUP OF OR EQUAL TO */ + ["\u22B5", "\u22B5"], /* CONTAINS AS NORMAL SUBGROUP OR EQUAL TO */ + ["\u22B6", "\u22B6"], /* ORIGINAL OF */ + ["\u22B7", "\u22B7"], /* IMAGE OF */ + ["\u22B8", "\u22B8"], /* MULTIMAP */ + ["\u22B9", "\u22B9"], /* HERMITIAN CONJUGATE MATRIX */ + ["\u22BA", "\u22BA"], /* INTERCALATE */ + ["\u22BB", "\u22BB"], /* XOR */ + ["\u22BC", "\u22BC"], /* NAND */ + ["\u22BD", "\u22BD"], /* NOR */ + ["\u22BE", "\u22BE"], /* RIGHT ANGLE WITH ARC */ + ["\u22BF", "\u22BF"], /* RIGHT TRIANGLE */ + ["\u22C0", "\u22C0"], /* N-ARY LOGICAL AND */ + ["\u22C1", "\u22C1"], /* N-ARY LOGICAL OR */ + ["\u22C2", "\u22C2"], /* N-ARY INTERSECTION */ + ["\u22C3", "\u22C3"], /* N-ARY UNION */ + ["\u22C4", "\u22C4"], /* DIAMOND OPERATOR */ + ["\u22C5", "\u22C5"], /* DOT OPERATOR */ + ["\u22C6", "\u22C6"], /* STAR OPERATOR */ + ["\u22C7", "\u22C7"], /* DIVISION TIMES */ + ["\u22C8", "\u22C8"], /* BOWTIE */ + ["\u22C9", "\u22C9"], /* LEFT NORMAL FACTOR SEMIDIRECT PRODUCT */ + ["\u22CA", "\u22CA"], /* RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT */ + ["\u22CB", "\u22CB"], /* LEFT SEMIDIRECT PRODUCT */ + ["\u22CC", "\u22CC"], /* RIGHT SEMIDIRECT PRODUCT */ + ["\u22CD", "\u22CD"], /* REVERSED TILDE EQUALS */ + ["\u22CE", "\u22CE"], /* CURLY LOGICAL OR */ + ["\u22CF", "\u22CF"], /* CURLY LOGICAL AND */ + ["\u22D0", "\u22D0"], /* DOUBLE SUBSET */ + ["\u22D1", "\u22D1"], /* DOUBLE SUPERSET */ + ["\u22D2", "\u22D2"], /* DOUBLE INTERSECTION */ + ["\u22D3", "\u22D3"], /* DOUBLE UNION */ + ["\u22D4", "\u22D4"], /* PITCHFORK */ + ["\u22D5", "\u22D5"], /* EQUAL AND PARALLEL TO */ + ["\u22D6", "\u22D6"], /* LESS-THAN WITH DOT (LESS THAN WITH DOT) */ + ["\u22D7", "\u22D7"], /* GREATER-THAN WITH DOT (GREATER THAN WITH DOT) */ + ["\u22D8", "\u22D8"], /* VERY MUCH LESS-THAN (VERY MUCH LESS THAN) */ + ["\u22D9", "\u22D9"], /* VERY MUCH GREATER-THAN (VERY MUCH GREATER THAN) */ + ["\u22DA", "\u22DA"], /* LESS-THAN EQUAL TO OR GREATER-THAN (LESS THAN EQUAL TO OR GREATER THAN) */ + ["\u22DB", "\u22DB"], /* GREATER-THAN EQUAL TO OR LESS-THAN (GREATER THAN EQUAL TO OR LESS THAN) */ + ["\u22DC", "\u22DC"], /* EQUAL TO OR LESS-THAN (EQUAL TO OR LESS THAN) */ + ["\u22DD", "\u22DD"], /* EQUAL TO OR GREATER-THAN (EQUAL TO OR GREATER THAN) */ + ["\u22DE", "\u22DE"], /* EQUAL TO OR PRECEDES */ + ["\u22DF", "\u22DF"], /* EQUAL TO OR SUCCEEDS */ + ["\u22E0", "\u22E0"], /* DOES NOT PRECEDE OR EQUAL */ + ["\u22E1", "\u22E1"], /* DOES NOT SUCCEED OR EQUAL */ + ["\u22E2", "\u22E2"], /* NOT SQUARE IMAGE OF OR EQUAL TO */ + ["\u22E3", "\u22E3"], /* NOT SQUARE ORIGINAL OF OR EQUAL TO */ + ["\u22E4", "\u22E4"], /* SQUARE IMAGE OF OR NOT EQUAL TO */ + ["\u22E5", "\u22E5"], /* SQUARE ORIGINAL OF OR NOT EQUAL TO */ + ["\u22E6", "\u22E6"], /* LESS-THAN BUT NOT EQUIVALENT TO (LESS THAN BUT NOT EQUIVALENT TO) */ + ["\u22E7", "\u22E7"], /* GREATER-THAN BUT NOT EQUIVALENT TO (GREATER THAN BUT NOT EQUIVALENT TO) */ + ["\u22E8", "\u22E8"], /* PRECEDES BUT NOT EQUIVALENT TO */ + ["\u22E9", "\u22E9"], /* SUCCEEDS BUT NOT EQUIVALENT TO */ + ["\u22EA", "\u22EA"], /* NOT NORMAL SUBGROUP OF */ + ["\u22EB", "\u22EB"], /* DOES NOT CONTAIN AS NORMAL SUBGROUP */ + ["\u22EC", "\u22EC"], /* NOT NORMAL SUBGROUP OF OR EQUAL TO */ + ["\u22ED", "\u22ED"], /* DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL */ + ["\u22EE", "\u22EE"], /* VERTICAL ELLIPSIS */ + ["\u22EF", "\u22EF"], /* MIDLINE HORIZONTAL ELLIPSIS */ + ["\u22F0", "\u22F0"], /* UP RIGHT DIAGONAL ELLIPSIS */ + ["\u22F1", "\u22F1"], /* DOWN RIGHT DIAGONAL ELLIPSIS */ + ["\u22F2", "\u22F2"], /* ELEMENT OF WITH LONG HORIZONTAL STROKE */ + ["\u22F3", "\u22F3"], /* ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + ["\u22F4", "\u22F4"], /* SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + ["\u22F5", "\u22F5"], /* ELEMENT OF WITH DOT ABOVE */ + ["\u22F6", "\u22F6"], /* ELEMENT OF WITH OVERBAR */ + ["\u22F7", "\u22F7"], /* SMALL ELEMENT OF WITH OVERBAR */ + ["\u22F8", "\u22F8"], /* ELEMENT OF WITH UNDERBAR */ + ["\u22F9", "\u22F9"], /* ELEMENT OF WITH TWO HORIZONTAL STROKES */ + ["\u22FA", "\u22FA"], /* CONTAINS WITH LONG HORIZONTAL STROKE */ + ["\u22FB", "\u22FB"], /* CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + ["\u22FC", "\u22FC"], /* SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + ["\u22FD", "\u22FD"], /* CONTAINS WITH OVERBAR */ + ["\u22FE", "\u22FE"], /* SMALL CONTAINS WITH OVERBAR */ + ["\u22FF", "\u22FF"], /* Z NOTATION BAG MEMBERSHIP */ + ["\u2300", "\u2300"], /* DIAMETER SIGN */ + ["\u2301", "\u2301"], /* ELECTRIC ARROW */ + ["\u2302", "\u2302"], /* HOUSE */ + ["\u2303", "\u2303"], /* UP ARROWHEAD */ + ["\u2304", "\u2304"], /* DOWN ARROWHEAD */ + ["\u2305", "\u2305"], /* PROJECTIVE */ + ["\u2306", "\u2306"], /* PERSPECTIVE */ + ["\u2307", "\u2307"], /* WAVY LINE */ + ["\u2308", "\u2308"], /* LEFT CEILING */ + ["\u2309", "\u2309"], /* RIGHT CEILING */ + ["\u230A", "\u230A"], /* LEFT FLOOR */ + ["\u230B", "\u230B"], /* RIGHT FLOOR */ + ["\u230C", "\u230C"], /* BOTTOM RIGHT CROP */ + ["\u230D", "\u230D"], /* BOTTOM LEFT CROP */ + ["\u230E", "\u230E"], /* TOP RIGHT CROP */ + ["\u230F", "\u230F"], /* TOP LEFT CROP */ + ["\u2310", "\u2310"], /* REVERSED NOT SIGN */ + ["\u2311", "\u2311"], /* SQUARE LOZENGE */ + ["\u2312", "\u2312"], /* ARC */ + ["\u2313", "\u2313"], /* SEGMENT */ + ["\u2314", "\u2314"], /* SECTOR */ + ["\u2315", "\u2315"], /* TELEPHONE RECORDER */ + ["\u2316", "\u2316"], /* POSITION INDICATOR */ + ["\u2317", "\u2317"], /* VIEWDATA SQUARE */ + ["\u2318", "\u2318"], /* PLACE OF INTEREST SIGN (COMMAND KEY) */ + ["\u2319", "\u2319"], /* TURNED NOT SIGN */ + ["\u231A", "\u231A"], /* WATCH */ + ["\u231B", "\u231B"], /* HOURGLASS */ + ["\u231C", "\u231C"], /* TOP LEFT CORNER */ + ["\u231D", "\u231D"], /* TOP RIGHT CORNER */ + ["\u231E", "\u231E"], /* BOTTOM LEFT CORNER */ + ["\u231F", "\u231F"], /* BOTTOM RIGHT CORNER */ + ["\u2320", "\u2320"], /* TOP HALF INTEGRAL */ + ["\u2321", "\u2321"], /* BOTTOM HALF INTEGRAL */ + ["\u2322", "\u2322"], /* FROWN */ + ["\u2323", "\u2323"], /* SMILE */ + ["\u2324", "\u2324"], /* UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS (ENTER KEY) */ + ["\u2325", "\u2325"], /* OPTION KEY */ + ["\u2326", "\u2326"], /* ERASE TO THE RIGHT (DELETE TO THE RIGHT KEY) */ + ["\u2327", "\u2327"], /* X IN A RECTANGLE BOX (CLEAR KEY) */ + ["\u2328", "\u2328"], /* KEYBOARD */ + ["\u2329", "\u2329"], /* LEFT-POINTING ANGLE BRACKET (BRA) */ + ["\u232A", "\u232A"], /* RIGHT-POINTING ANGLE BRACKET (KET) */ + ["\u232B", "\u232B"], /* ERASE TO THE LEFT (DELETE TO THE LEFT KEY) */ + ["\u232C", "\u232C"], /* BENZENE RING */ + ["\u232D", "\u232D"], /* CYLINDRICITY */ + ["\u232E", "\u232E"], /* ALL AROUND-PROFILE */ + ["\u232F", "\u232F"], /* SYMMETRY */ + ["\u2330", "\u2330"], /* TOTAL RUNOUT */ + ["\u2331", "\u2331"], /* DIMENSION ORIGIN */ + ["\u2332", "\u2332"], /* CONICAL TAPER */ + ["\u2333", "\u2333"], /* SLOPE */ + ["\u2334", "\u2334"], /* COUNTERBORE */ + ["\u2335", "\u2335"], /* COUNTERSINK */ + ["\u2336", "\u2336"], /* APL FUNCTIONAL SYMBOL I-BEAM */ + ["\u2337", "\u2337"], /* APL FUNCTIONAL SYMBOL SQUISH QUAD */ + ["\u2338", "\u2338"], /* APL FUNCTIONAL SYMBOL QUAD EQUAL */ + ["\u2339", "\u2339"], /* APL FUNCTIONAL SYMBOL QUAD DIVIDE */ + ["\u233A", "\u233A"], /* APL FUNCTIONAL SYMBOL QUAD DIAMOND */ + ["\u233B", "\u233B"], /* APL FUNCTIONAL SYMBOL QUAD JOT */ + ["\u233C", "\u233C"], /* APL FUNCTIONAL SYMBOL QUAD CIRCLE */ + ["\u233D", "\u233D"], /* APL FUNCTIONAL SYMBOL CIRCLE STILE */ + ["\u233E", "\u233E"], /* APL FUNCTIONAL SYMBOL CIRCLE JOT */ + ["\u233F", "\u233F"], /* APL FUNCTIONAL SYMBOL SLASH BAR */ + ["\u2340", "\u2340"], /* APL FUNCTIONAL SYMBOL BACKSLASH BAR */ + ["\u2341", "\u2341"], /* APL FUNCTIONAL SYMBOL QUAD SLASH */ + ["\u2342", "\u2342"], /* APL FUNCTIONAL SYMBOL QUAD BACKSLASH */ + ["\u2343", "\u2343"], /* APL FUNCTIONAL SYMBOL QUAD LESS-THAN */ + ["\u2344", "\u2344"], /* APL FUNCTIONAL SYMBOL QUAD GREATER-THAN */ + ["\u2345", "\u2345"], /* APL FUNCTIONAL SYMBOL LEFTWARDS VANE */ + ["\u2346", "\u2346"], /* APL FUNCTIONAL SYMBOL RIGHTWARDS VANE */ + ["\u2347", "\u2347"], /* APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW */ + ["\u2348", "\u2348"], /* APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW */ + ["\u2349", "\u2349"], /* APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH */ + ["\u234A", "\u234A"], /* APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR */ + ["\u234B", "\u234B"], /* APL FUNCTIONAL SYMBOL DELTA STILE */ + ["\u234C", "\u234C"], /* APL FUNCTIONAL SYMBOL QUAD DOWN CARET */ + ["\u234D", "\u234D"], /* APL FUNCTIONAL SYMBOL QUAD DELTA */ + ["\u234E", "\u234E"], /* APL FUNCTIONAL SYMBOL DOWN TACK JOT */ + ["\u234F", "\u234F"], /* APL FUNCTIONAL SYMBOL UPWARDS VANE */ + ["\u2350", "\u2350"], /* APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW */ + ["\u2351", "\u2351"], /* APL FUNCTIONAL SYMBOL UP TACK OVERBAR */ + ["\u2352", "\u2352"], /* APL FUNCTIONAL SYMBOL DEL STILE */ + ["\u2353", "\u2353"], /* APL FUNCTIONAL SYMBOL QUAD UP CARET */ + ["\u2354", "\u2354"], /* APL FUNCTIONAL SYMBOL QUAD DEL */ + ["\u2355", "\u2355"], /* APL FUNCTIONAL SYMBOL UP TACK JOT */ + ["\u2356", "\u2356"], /* APL FUNCTIONAL SYMBOL DOWNWARDS VANE */ + ["\u2357", "\u2357"], /* APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW */ + ["\u2358", "\u2358"], /* APL FUNCTIONAL SYMBOL QUOTE UNDERBAR */ + ["\u2359", "\u2359"], /* APL FUNCTIONAL SYMBOL DELTA UNDERBAR */ + ["\u235A", "\u235A"], /* APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR */ + ["\u235B", "\u235B"], /* APL FUNCTIONAL SYMBOL JOT UNDERBAR */ + ["\u235C", "\u235C"], /* APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR */ + ["\u235D", "\u235D"], /* APL FUNCTIONAL SYMBOL UP SHOE JOT */ + ["\u235E", "\u235E"], /* APL FUNCTIONAL SYMBOL QUOTE QUAD */ + ["\u235F", "\u235F"], /* APL FUNCTIONAL SYMBOL CIRCLE STAR */ + ["\u2360", "\u2360"], /* APL FUNCTIONAL SYMBOL QUAD COLON */ + ["\u2361", "\u2361"], /* APL FUNCTIONAL SYMBOL UP TACK DIAERESIS */ + ["\u2362", "\u2362"], /* APL FUNCTIONAL SYMBOL DEL DIAERESIS */ + ["\u2363", "\u2363"], /* APL FUNCTIONAL SYMBOL STAR DIAERESIS */ + ["\u2364", "\u2364"], /* APL FUNCTIONAL SYMBOL JOT DIAERESIS */ + ["\u2365", "\u2365"], /* APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS */ + ["\u2366", "\u2366"], /* APL FUNCTIONAL SYMBOL DOWN SHOE STILE */ + ["\u2367", "\u2367"], /* APL FUNCTIONAL SYMBOL LEFT SHOE STILE */ + ["\u2368", "\u2368"], /* APL FUNCTIONAL SYMBOL TILDE DIAERESIS */ + ["\u2369", "\u2369"], /* APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS */ + ["\u236A", "\u236A"], /* APL FUNCTIONAL SYMBOL COMMA BAR */ + ["\u236B", "\u236B"], /* APL FUNCTIONAL SYMBOL DEL TILDE */ + ["\u236C", "\u236C"], /* APL FUNCTIONAL SYMBOL ZILDE */ + ["\u236D", "\u236D"], /* APL FUNCTIONAL SYMBOL STILE TILDE */ + ["\u236E", "\u236E"], /* APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR */ + ["\u236F", "\u236F"], /* APL FUNCTIONAL SYMBOL QUAD NOT EQUAL */ + ["\u2370", "\u2370"], /* APL FUNCTIONAL SYMBOL QUAD QUESTION */ + ["\u2371", "\u2371"], /* APL FUNCTIONAL SYMBOL DOWN CARET TILDE */ + ["\u2372", "\u2372"], /* APL FUNCTIONAL SYMBOL UP CARET TILDE */ + ["\u2373", "\u2373"], /* APL FUNCTIONAL SYMBOL IOTA */ + ["\u2374", "\u2374"], /* APL FUNCTIONAL SYMBOL RHO */ + ["\u2375", "\u2375"], /* APL FUNCTIONAL SYMBOL OMEGA */ + ["\u2376", "\u2376"], /* APL FUNCTIONAL SYMBOL ALPHA UNDERBAR */ + ["\u2377", "\u2377"], /* APL FUNCTIONAL SYMBOL EPSILON UNDERBAR */ + ["\u2378", "\u2378"], /* APL FUNCTIONAL SYMBOL IOTA UNDERBAR */ + ["\u2379", "\u2379"], /* APL FUNCTIONAL SYMBOL OMEGA UNDERBAR */ + ["\u237A", "\u237A"], /* APL FUNCTIONAL SYMBOL ALPHA */ + ["\u237B", "\u237B"], /* NOT CHECK MARK */ + ["\u237C", "\u237C"], /* RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW */ + ["\u237D", "\u237D"], /* SHOULDERED OPEN BOX */ + ["\u237E", "\u237E"], /* BELL SYMBOL */ + ["\u237F", "\u237F"], /* VERTICAL LINE WITH MIDDLE DOT */ + ["\u2380", "\u2380"], /* INSERTION SYMBOL */ + ["\u2381", "\u2381"], /* CONTINUOUS UNDERLINE SYMBOL */ + ["\u2382", "\u2382"], /* DISCONTINUOUS UNDERLINE SYMBOL */ + ["\u2383", "\u2383"], /* EMPHASIS SYMBOL */ + ["\u2384", "\u2384"], /* COMPOSITION SYMBOL */ + ["\u2385", "\u2385"], /* WHITE SQUARE WITH CENTRE VERTICAL LINE */ + ["\u2386", "\u2386"], /* ENTER SYMBOL */ + ["\u2387", "\u2387"], /* ALTERNATIVE KEY SYMBOL */ + ["\u2388", "\u2388"], /* HELM SYMBOL */ + ["\u2389", "\u2389"], /* CIRCLED HORIZONTAL BAR WITH NOTCH */ + ["\u238A", "\u238A"], /* CIRCLED TRIANGLE DOWN */ + ["\u238B", "\u238B"], /* BROKEN CIRCLE WITH NORTHWEST ARROW */ + ["\u238C", "\u238C"], /* UNDO SYMBOL */ + ["\u238D", "\u238D"], /* MONOSTABLE SYMBOL */ + ["\u238E", "\u238E"], /* HYSTERESIS SYMBOL */ + ["\u238F", "\u238F"], /* OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL */ + ["\u2390", "\u2390"], /* OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL */ + ["\u2391", "\u2391"], /* PASSIVE-PULL-DOWN-OUTPUT SYMBOL */ + ["\u2392", "\u2392"], /* PASSIVE-PULL-UP-OUTPUT SYMBOL */ + ["\u2393", "\u2393"], /* DIRECT CURRENT SYMBOL FORM TWO */ + ["\u2394", "\u2394"], /* SOFTWARE-FUNCTION SYMBOL */ + ["\u2395", "\u2395"], /* APL FUNCTIONAL SYMBOL QUAD */ + ["\u2396", "\u2396"], /* DECIMAL SEPARATOR KEY SYMBOL */ + ["\u2397", "\u2397"], /* PREVIOUS PAGE */ + ["\u2398", "\u2398"], /* NEXT PAGE */ + ["\u2399", "\u2399"], /* PRINT SCREEN SYMBOL */ + ["\u239A", "\u239A"], /* CLEAR SCREEN SYMBOL */ + ["\u239B", "\u239B"], /* LEFT PARENTHESIS UPPER HOOK */ + ["\u239C", "\u239C"], /* LEFT PARENTHESIS EXTENSION */ + ["\u239D", "\u239D"], /* LEFT PARENTHESIS LOWER HOOK */ + ["\u239E", "\u239E"], /* RIGHT PARENTHESIS UPPER HOOK */ + ["\u239F", "\u239F"], /* RIGHT PARENTHESIS EXTENSION */ + ["\u23A0", "\u23A0"], /* RIGHT PARENTHESIS LOWER HOOK */ + ["\u23A1", "\u23A1"], /* LEFT SQUARE BRACKET UPPER CORNER */ + ["\u23A2", "\u23A2"], /* LEFT SQUARE BRACKET EXTENSION */ + ["\u23A3", "\u23A3"], /* LEFT SQUARE BRACKET LOWER CORNER */ + ["\u23A4", "\u23A4"], /* RIGHT SQUARE BRACKET UPPER CORNER */ + ["\u23A5", "\u23A5"], /* RIGHT SQUARE BRACKET EXTENSION */ + ["\u23A6", "\u23A6"], /* RIGHT SQUARE BRACKET LOWER CORNER */ + ["\u23A7", "\u23A7"], /* LEFT CURLY BRACKET UPPER HOOK */ + ["\u23A8", "\u23A8"], /* LEFT CURLY BRACKET MIDDLE PIECE */ + ["\u23A9", "\u23A9"], /* LEFT CURLY BRACKET LOWER HOOK */ + ["\u23AA", "\u23AA"], /* CURLY BRACKET EXTENSION */ + ["\u23AB", "\u23AB"], /* RIGHT CURLY BRACKET UPPER HOOK */ + ["\u23AC", "\u23AC"], /* RIGHT CURLY BRACKET MIDDLE PIECE */ + ["\u23AD", "\u23AD"], /* RIGHT CURLY BRACKET LOWER HOOK */ + ["\u23AE", "\u23AE"], /* INTEGRAL EXTENSION */ + ["\u23AF", "\u23AF"], /* HORIZONTAL LINE EXTENSION */ + ["\u23B0", "\u23B0"], /* UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION */ + ["\u23B1", "\u23B1"], /* UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION */ + ["\u23B2", "\u23B2"], /* SUMMATION TOP */ + ["\u23B3", "\u23B3"], /* SUMMATION BOTTOM */ + ["\u23B4", "\u23B4"], /* TOP SQUARE BRACKET */ + ["\u23B5", "\u23B5"], /* BOTTOM SQUARE BRACKET */ + ["\u23B6", "\u23B6"], /* BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET */ + ["\u23B7", "\u23B7"], /* RADICAL SYMBOL BOTTOM */ + ["\u23B8", "\u23B8"], /* LEFT VERTICAL BOX LINE */ + ["\u23B9", "\u23B9"], /* RIGHT VERTICAL BOX LINE */ + ["\u23BA", "\u23BA"], /* HORIZONTAL SCAN LINE-1 */ + ["\u23BB", "\u23BB"], /* HORIZONTAL SCAN LINE-3 */ + ["\u23BC", "\u23BC"], /* HORIZONTAL SCAN LINE-7 */ + ["\u23BD", "\u23BD"], /* HORIZONTAL SCAN LINE-9 */ + ["\u23BE", "\u23BE"], /* DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT */ + ["\u23BF", "\u23BF"], /* DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT */ + ["\u23C0", "\u23C0"], /* DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE */ + ["\u23C1", "\u23C1"], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE */ + ["\u23C2", "\u23C2"], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE */ + ["\u23C3", "\u23C3"], /* DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE */ + ["\u23C4", "\u23C4"], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE */ + ["\u23C5", "\u23C5"], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE */ + ["\u23C6", "\u23C6"], /* DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE */ + ["\u23C7", "\u23C7"], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE */ + ["\u23C8", "\u23C8"], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE */ + ["\u23C9", "\u23C9"], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL */ + ["\u23CA", "\u23CA"], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL */ + ["\u23CB", "\u23CB"], /* DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT */ + ["\u23CC", "\u23CC"], /* DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT */ + ["\u23CD", "\u23CD"], /* SQUARE FOOT */ + ["\u23CE", "\u23CE"], /* RETURN SYMBOL */ + ["\u23CF", "\u23CF"], /* EJECT SYMBOL */ + ["\u23D0", "\u23D0"], /* VERTICAL LINE EXTENSION */ + ["\u23D1", "\u23D1"], /* METRICAL BREVE */ + ["\u23D2", "\u23D2"], /* METRICAL LONG OVER SHORT */ + ["\u23D3", "\u23D3"], /* METRICAL SHORT OVER LONG */ + ["\u23D4", "\u23D4"], /* METRICAL LONG OVER TWO SHORTS */ + ["\u23D5", "\u23D5"], /* METRICAL TWO SHORTS OVER LONG */ + ["\u23D6", "\u23D6"], /* METRICAL TWO SHORTS JOINED */ + ["\u23D7", "\u23D7"], /* METRICAL TRISEME */ + ["\u23D8", "\u23D8"], /* METRICAL TETRASEME */ + ["\u23D9", "\u23D9"], /* METRICAL PENTASEME */ + ["\u23DA", "\u23DA"], /* EARTH GROUND */ + ["\u23DB", "\u23DB"], /* FUSE */ + ["\u23DC", "\u23DC"], /* TOP PARENTHESIS */ + ["\u23DD", "\u23DD"], /* BOTTOM PARENTHESIS */ + ["\u23DE", "\u23DE"], /* TOP CURLY BRACKET */ + ["\u23DF", "\u23DF"], /* BOTTOM CURLY BRACKET */ + ["\u23E0", "\u23E0"], /* TOP TORTOISE SHELL BRACKET */ + ["\u23E1", "\u23E1"], /* BOTTOM TORTOISE SHELL BRACKET */ + ["\u23E2", "\u23E2"], /* WHITE TRAPEZIUM */ + ["\u23E3", "\u23E3"], /* BENZENE RING WITH CIRCLE */ + ["\u23E4", "\u23E4"], /* STRAIGHTNESS */ + ["\u23E5", "\u23E5"], /* FLATNESS */ + ["\u23E6", "\u23E6"], /* AC CURRENT */ + ["\u23E7", "\u23E7"], /* ELECTRICAL INTERSECTION */ + ["\u23E8", "\u23E8"], /* DECIMAL EXPONENT SYMBOL */ + ["\u23E9", "\u23E9"], /* BLACK RIGHT-POINTING DOUBLE TRIANGLE */ + ["\u23EA", "\u23EA"], /* BLACK LEFT-POINTING DOUBLE TRIANGLE */ + ["\u23EB", "\u23EB"], /* BLACK UP-POINTING DOUBLE TRIANGLE */ + ["\u23EC", "\u23EC"], /* BLACK DOWN-POINTING DOUBLE TRIANGLE */ + ["\u23ED", "\u23ED"], /* BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR */ + ["\u23EE", "\u23EE"], /* BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR */ + ["\u23EF", "\u23EF"], /* BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR */ + ["\u23F0", "\u23F0"], /* ALARM CLOCK */ + ["\u23F1", "\u23F1"], /* STOPWATCH */ + ["\u23F2", "\u23F2"], /* TIMER CLOCK */ + ["\u23F3", "\u23F3"], /* HOURGLASS WITH FLOWING SAND */ + ["\u23F4", "\u23F4"], /* BLACK MEDIUM LEFT-POINTING TRIANGLE */ + ["\u23F5", "\u23F5"], /* BLACK MEDIUM RIGHT-POINTING TRIANGLE */ + ["\u23F6", "\u23F6"], /* BLACK MEDIUM UP-POINTING TRIANGLE */ + ["\u23F7", "\u23F7"], /* BLACK MEDIUM DOWN-POINTING TRIANGLE */ + ["\u23F8", "\u23F8"], /* DOUBLE VERTICAL BAR */ + ["\u23F9", "\u23F9"], /* BLACK SQUARE FOR STOP */ + ["\u23FA", "\u23FA"], /* BLACK CIRCLE FOR RECORD */ + ["\u23FB", "\u23FB"], /* POWER SYMBOL */ + ["\u23FC", "\u23FC"], /* POWER ON-OFF SYMBOL */ + ["\u23FD", "\u23FD"], /* POWER ON SYMBOL */ + ["\u23FE", "\u23FE"], /* POWER SLEEP SYMBOL */ + ["\u23FF", "\u23FF"], /* OBSERVER EYE SYMBOL */ + ["\u2400", "\u2400"], /* SYMBOL FOR NULL (GRAPHIC FOR NULL) */ + ["\u2401", "\u2401"], /* SYMBOL FOR START OF HEADING (GRAPHIC FOR START OF HEADING) */ + ["\u2402", "\u2402"], /* SYMBOL FOR START OF TEXT (GRAPHIC FOR START OF TEXT) */ + ["\u2403", "\u2403"], /* SYMBOL FOR END OF TEXT (GRAPHIC FOR END OF TEXT) */ + ["\u2404", "\u2404"], /* SYMBOL FOR END OF TRANSMISSION (GRAPHIC FOR END OF TRANSMISSION) */ + ["\u2405", "\u2405"], /* SYMBOL FOR ENQUIRY (GRAPHIC FOR ENQUIRY) */ + ["\u2406", "\u2406"], /* SYMBOL FOR ACKNOWLEDGE (GRAPHIC FOR ACKNOWLEDGE) */ + ["\u2407", "\u2407"], /* SYMBOL FOR BELL (GRAPHIC FOR BELL) */ + ["\u2408", "\u2408"], /* SYMBOL FOR BACKSPACE (GRAPHIC FOR BACKSPACE) */ + ["\u2409", "\u2409"], /* SYMBOL FOR HORIZONTAL TABULATION (GRAPHIC FOR HORIZONTAL TABULATION) */ + ["\u240A", "\u240A"], /* SYMBOL FOR LINE FEED (GRAPHIC FOR LINE FEED) */ + ["\u240B", "\u240B"], /* SYMBOL FOR VERTICAL TABULATION (GRAPHIC FOR VERTICAL TABULATION) */ + ["\u240C", "\u240C"], /* SYMBOL FOR FORM FEED (GRAPHIC FOR FORM FEED) */ + ["\u240D", "\u240D"], /* SYMBOL FOR CARRIAGE RETURN (GRAPHIC FOR CARRIAGE RETURN) */ + ["\u240E", "\u240E"], /* SYMBOL FOR SHIFT OUT (GRAPHIC FOR SHIFT OUT) */ + ["\u240F", "\u240F"], /* SYMBOL FOR SHIFT IN (GRAPHIC FOR SHIFT IN) */ + ["\u2410", "\u2410"], /* SYMBOL FOR DATA LINK ESCAPE (GRAPHIC FOR DATA LINK ESCAPE) */ + ["\u2411", "\u2411"], /* SYMBOL FOR DEVICE CONTROL ONE (GRAPHIC FOR DEVICE CONTROL ONE) */ + ["\u2412", "\u2412"], /* SYMBOL FOR DEVICE CONTROL TWO (GRAPHIC FOR DEVICE CONTROL TWO) */ + ["\u2413", "\u2413"], /* SYMBOL FOR DEVICE CONTROL THREE (GRAPHIC FOR DEVICE CONTROL THREE) */ + ["\u2414", "\u2414"], /* SYMBOL FOR DEVICE CONTROL FOUR (GRAPHIC FOR DEVICE CONTROL FOUR) */ + ["\u2415", "\u2415"], /* SYMBOL FOR NEGATIVE ACKNOWLEDGE (GRAPHIC FOR NEGATIVE ACKNOWLEDGE) */ + ["\u2416", "\u2416"], /* SYMBOL FOR SYNCHRONOUS IDLE (GRAPHIC FOR SYNCHRONOUS IDLE) */ + ["\u2417", "\u2417"], /* SYMBOL FOR END OF TRANSMISSION BLOCK (GRAPHIC FOR END OF TRANSMISSION BLOCK) */ + ["\u2418", "\u2418"], /* SYMBOL FOR CANCEL (GRAPHIC FOR CANCEL) */ + ["\u2419", "\u2419"], /* SYMBOL FOR END OF MEDIUM (GRAPHIC FOR END OF MEDIUM) */ + ["\u241A", "\u241A"], /* SYMBOL FOR SUBSTITUTE (GRAPHIC FOR SUBSTITUTE) */ + ["\u241B", "\u241B"], /* SYMBOL FOR ESCAPE (GRAPHIC FOR ESCAPE) */ + ["\u241C", "\u241C"], /* SYMBOL FOR FILE SEPARATOR (GRAPHIC FOR FILE SEPARATOR) */ + ["\u241D", "\u241D"], /* SYMBOL FOR GROUP SEPARATOR (GRAPHIC FOR GROUP SEPARATOR) */ + ["\u241E", "\u241E"], /* SYMBOL FOR RECORD SEPARATOR (GRAPHIC FOR RECORD SEPARATOR) */ + ["\u241F", "\u241F"], /* SYMBOL FOR UNIT SEPARATOR (GRAPHIC FOR UNIT SEPARATOR) */ + ["\u2420", "\u2420"], /* SYMBOL FOR SPACE (GRAPHIC FOR SPACE) */ + ["\u2421", "\u2421"], /* SYMBOL FOR DELETE (GRAPHIC FOR DELETE) */ + ["\u2422", "\u2422"], /* BLANK SYMBOL (BLANK) */ + ["\u2423", "\u2423"], /* OPEN BOX */ + ["\u2424", "\u2424"], /* SYMBOL FOR NEWLINE (GRAPHIC FOR NEWLINE) */ + ["\u2425", "\u2425"], /* SYMBOL FOR DELETE FORM TWO */ + ["\u2426", "\u2426"], /* SYMBOL FOR SUBSTITUTE FORM TWO */ + ["\u2427", "\u2427"], + ["\u2428", "\u2428"], + ["\u2429", "\u2429"], + ["\u242A", "\u242A"], + ["\u242B", "\u242B"], + ["\u242C", "\u242C"], + ["\u242D", "\u242D"], + ["\u242E", "\u242E"], + ["\u242F", "\u242F"], + ["\u2430", "\u2430"], + ["\u2431", "\u2431"], + ["\u2432", "\u2432"], + ["\u2433", "\u2433"], + ["\u2434", "\u2434"], + ["\u2435", "\u2435"], + ["\u2436", "\u2436"], + ["\u2437", "\u2437"], + ["\u2438", "\u2438"], + ["\u2439", "\u2439"], + ["\u243A", "\u243A"], + ["\u243B", "\u243B"], + ["\u243C", "\u243C"], + ["\u243D", "\u243D"], + ["\u243E", "\u243E"], + ["\u243F", "\u243F"], + ["\u2440", "\u2440"], /* OCR HOOK */ + ["\u2441", "\u2441"], /* OCR CHAIR */ + ["\u2442", "\u2442"], /* OCR FORK */ + ["\u2443", "\u2443"], /* OCR INVERTED FORK */ + ["\u2444", "\u2444"], /* OCR BELT BUCKLE */ + ["\u2445", "\u2445"], /* OCR BOW TIE */ + ["\u2446", "\u2446"], /* OCR BRANCH BANK IDENTIFICATION */ + ["\u2447", "\u2447"], /* OCR AMOUNT OF CHECK */ + ["\u2448", "\u2448"], /* OCR DASH */ + ["\u2449", "\u2449"], /* OCR CUSTOMER ACCOUNT NUMBER */ + ["\u244A", "\u244A"], /* OCR DOUBLE BACKSLASH */ + ["\u244B", "\u244B"], + ["\u244C", "\u244C"], + ["\u244D", "\u244D"], + ["\u244E", "\u244E"], + ["\u244F", "\u244F"], + ["\u2450", "\u2450"], + ["\u2451", "\u2451"], + ["\u2452", "\u2452"], + ["\u2453", "\u2453"], + ["\u2454", "\u2454"], + ["\u2455", "\u2455"], + ["\u2456", "\u2456"], + ["\u2457", "\u2457"], + ["\u2458", "\u2458"], + ["\u2459", "\u2459"], + ["\u245A", "\u245A"], + ["\u245B", "\u245B"], + ["\u245C", "\u245C"], + ["\u245D", "\u245D"], + ["\u245E", "\u245E"], + ["\u245F", "\u245F"], + ["\u2460", "\u2460"], /* CIRCLED DIGIT ONE */ + ["\u2461", "\u2461"], /* CIRCLED DIGIT TWO */ + ["\u2462", "\u2462"], /* CIRCLED DIGIT THREE */ + ["\u2463", "\u2463"], /* CIRCLED DIGIT FOUR */ + ["\u2464", "\u2464"], /* CIRCLED DIGIT FIVE */ + ["\u2465", "\u2465"], /* CIRCLED DIGIT SIX */ + ["\u2466", "\u2466"], /* CIRCLED DIGIT SEVEN */ + ["\u2467", "\u2467"], /* CIRCLED DIGIT EIGHT */ + ["\u2468", "\u2468"], /* CIRCLED DIGIT NINE */ + ["\u2469", "\u2469"], /* CIRCLED NUMBER TEN */ + ["\u246A", "\u246A"], /* CIRCLED NUMBER ELEVEN */ + ["\u246B", "\u246B"], /* CIRCLED NUMBER TWELVE */ + ["\u246C", "\u246C"], /* CIRCLED NUMBER THIRTEEN */ + ["\u246D", "\u246D"], /* CIRCLED NUMBER FOURTEEN */ + ["\u246E", "\u246E"], /* CIRCLED NUMBER FIFTEEN */ + ["\u246F", "\u246F"], /* CIRCLED NUMBER SIXTEEN */ + ["\u2470", "\u2470"], /* CIRCLED NUMBER SEVENTEEN */ + ["\u2471", "\u2471"], /* CIRCLED NUMBER EIGHTEEN */ + ["\u2472", "\u2472"], /* CIRCLED NUMBER NINETEEN */ + ["\u2473", "\u2473"], /* CIRCLED NUMBER TWENTY */ + ["\u2474", "\u2474"], /* PARENTHESIZED DIGIT ONE */ + ["\u2475", "\u2475"], /* PARENTHESIZED DIGIT TWO */ + ["\u2476", "\u2476"], /* PARENTHESIZED DIGIT THREE */ + ["\u2477", "\u2477"], /* PARENTHESIZED DIGIT FOUR */ + ["\u2478", "\u2478"], /* PARENTHESIZED DIGIT FIVE */ + ["\u2479", "\u2479"], /* PARENTHESIZED DIGIT SIX */ + ["\u247A", "\u247A"], /* PARENTHESIZED DIGIT SEVEN */ + ["\u247B", "\u247B"], /* PARENTHESIZED DIGIT EIGHT */ + ["\u247C", "\u247C"], /* PARENTHESIZED DIGIT NINE */ + ["\u247D", "\u247D"], /* PARENTHESIZED NUMBER TEN */ + ["\u247E", "\u247E"], /* PARENTHESIZED NUMBER ELEVEN */ + ["\u247F", "\u247F"], /* PARENTHESIZED NUMBER TWELVE */ + ["\u2480", "\u2480"], /* PARENTHESIZED NUMBER THIRTEEN */ + ["\u2481", "\u2481"], /* PARENTHESIZED NUMBER FOURTEEN */ + ["\u2482", "\u2482"], /* PARENTHESIZED NUMBER FIFTEEN */ + ["\u2483", "\u2483"], /* PARENTHESIZED NUMBER SIXTEEN */ + ["\u2484", "\u2484"], /* PARENTHESIZED NUMBER SEVENTEEN */ + ["\u2485", "\u2485"], /* PARENTHESIZED NUMBER EIGHTEEN */ + ["\u2486", "\u2486"], /* PARENTHESIZED NUMBER NINETEEN */ + ["\u2487", "\u2487"], /* PARENTHESIZED NUMBER TWENTY */ + ["\u2488", "\u2488"], /* DIGIT ONE FULL STOP (DIGIT ONE PERIOD) */ + ["\u2489", "\u2489"], /* DIGIT TWO FULL STOP (DIGIT TWO PERIOD) */ + ["\u248A", "\u248A"], /* DIGIT THREE FULL STOP (DIGIT THREE PERIOD) */ + ["\u248B", "\u248B"], /* DIGIT FOUR FULL STOP (DIGIT FOUR PERIOD) */ + ["\u248C", "\u248C"], /* DIGIT FIVE FULL STOP (DIGIT FIVE PERIOD) */ + ["\u248D", "\u248D"], /* DIGIT SIX FULL STOP (DIGIT SIX PERIOD) */ + ["\u248E", "\u248E"], /* DIGIT SEVEN FULL STOP (DIGIT SEVEN PERIOD) */ + ["\u248F", "\u248F"], /* DIGIT EIGHT FULL STOP (DIGIT EIGHT PERIOD) */ + ["\u2490", "\u2490"], /* DIGIT NINE FULL STOP (DIGIT NINE PERIOD) */ + ["\u2491", "\u2491"], /* NUMBER TEN FULL STOP (NUMBER TEN PERIOD) */ + ["\u2492", "\u2492"], /* NUMBER ELEVEN FULL STOP (NUMBER ELEVEN PERIOD) */ + ["\u2493", "\u2493"], /* NUMBER TWELVE FULL STOP (NUMBER TWELVE PERIOD) */ + ["\u2494", "\u2494"], /* NUMBER THIRTEEN FULL STOP (NUMBER THIRTEEN PERIOD) */ + ["\u2495", "\u2495"], /* NUMBER FOURTEEN FULL STOP (NUMBER FOURTEEN PERIOD) */ + ["\u2496", "\u2496"], /* NUMBER FIFTEEN FULL STOP (NUMBER FIFTEEN PERIOD) */ + ["\u2497", "\u2497"], /* NUMBER SIXTEEN FULL STOP (NUMBER SIXTEEN PERIOD) */ + ["\u2498", "\u2498"], /* NUMBER SEVENTEEN FULL STOP (NUMBER SEVENTEEN PERIOD) */ + ["\u2499", "\u2499"], /* NUMBER EIGHTEEN FULL STOP (NUMBER EIGHTEEN PERIOD) */ + ["\u249A", "\u249A"], /* NUMBER NINETEEN FULL STOP (NUMBER NINETEEN PERIOD) */ + ["\u249B", "\u249B"], /* NUMBER TWENTY FULL STOP (NUMBER TWENTY PERIOD) */ + ["\u249C", "\u249C"], /* PARENTHESIZED LATIN SMALL LETTER A */ + ["\u249D", "\u249D"], /* PARENTHESIZED LATIN SMALL LETTER B */ + ["\u249E", "\u249E"], /* PARENTHESIZED LATIN SMALL LETTER C */ + ["\u249F", "\u249F"], /* PARENTHESIZED LATIN SMALL LETTER D */ + ["\u24A0", "\u24A0"], /* PARENTHESIZED LATIN SMALL LETTER E */ + ["\u24A1", "\u24A1"], /* PARENTHESIZED LATIN SMALL LETTER F */ + ["\u24A2", "\u24A2"], /* PARENTHESIZED LATIN SMALL LETTER G */ + ["\u24A3", "\u24A3"], /* PARENTHESIZED LATIN SMALL LETTER H */ + ["\u24A4", "\u24A4"], /* PARENTHESIZED LATIN SMALL LETTER I */ + ["\u24A5", "\u24A5"], /* PARENTHESIZED LATIN SMALL LETTER J */ + ["\u24A6", "\u24A6"], /* PARENTHESIZED LATIN SMALL LETTER K */ + ["\u24A7", "\u24A7"], /* PARENTHESIZED LATIN SMALL LETTER L */ + ["\u24A8", "\u24A8"], /* PARENTHESIZED LATIN SMALL LETTER M */ + ["\u24A9", "\u24A9"], /* PARENTHESIZED LATIN SMALL LETTER N */ + ["\u24AA", "\u24AA"], /* PARENTHESIZED LATIN SMALL LETTER O */ + ["\u24AB", "\u24AB"], /* PARENTHESIZED LATIN SMALL LETTER P */ + ["\u24AC", "\u24AC"], /* PARENTHESIZED LATIN SMALL LETTER Q */ + ["\u24AD", "\u24AD"], /* PARENTHESIZED LATIN SMALL LETTER R */ + ["\u24AE", "\u24AE"], /* PARENTHESIZED LATIN SMALL LETTER S */ + ["\u24AF", "\u24AF"], /* PARENTHESIZED LATIN SMALL LETTER T */ + ["\u24B0", "\u24B0"], /* PARENTHESIZED LATIN SMALL LETTER U */ + ["\u24B1", "\u24B1"], /* PARENTHESIZED LATIN SMALL LETTER V */ + ["\u24B2", "\u24B2"], /* PARENTHESIZED LATIN SMALL LETTER W */ + ["\u24B3", "\u24B3"], /* PARENTHESIZED LATIN SMALL LETTER X */ + ["\u24B4", "\u24B4"], /* PARENTHESIZED LATIN SMALL LETTER Y */ + ["\u24B5", "\u24B5"], /* PARENTHESIZED LATIN SMALL LETTER Z */ + ["\u24B6", "\u24D0"], /* CIRCLED LATIN CAPITAL LETTER A */ + ["\u24B7", "\u24D1"], /* CIRCLED LATIN CAPITAL LETTER B */ + ["\u24B8", "\u24D2"], /* CIRCLED LATIN CAPITAL LETTER C */ + ["\u24B9", "\u24D3"], /* CIRCLED LATIN CAPITAL LETTER D */ + ["\u24BA", "\u24D4"], /* CIRCLED LATIN CAPITAL LETTER E */ + ["\u24BB", "\u24D5"], /* CIRCLED LATIN CAPITAL LETTER F */ + ["\u24BC", "\u24D6"], /* CIRCLED LATIN CAPITAL LETTER G */ + ["\u24BD", "\u24D7"], /* CIRCLED LATIN CAPITAL LETTER H */ + ["\u24BE", "\u24D8"], /* CIRCLED LATIN CAPITAL LETTER I */ + ["\u24BF", "\u24D9"], /* CIRCLED LATIN CAPITAL LETTER J */ + ["\u24C0", "\u24DA"], /* CIRCLED LATIN CAPITAL LETTER K */ + ["\u24C1", "\u24DB"], /* CIRCLED LATIN CAPITAL LETTER L */ + ["\u24C2", "\u24DC"], /* CIRCLED LATIN CAPITAL LETTER M */ + ["\u24C3", "\u24DD"], /* CIRCLED LATIN CAPITAL LETTER N */ + ["\u24C4", "\u24DE"], /* CIRCLED LATIN CAPITAL LETTER O */ + ["\u24C5", "\u24DF"], /* CIRCLED LATIN CAPITAL LETTER P */ + ["\u24C6", "\u24E0"], /* CIRCLED LATIN CAPITAL LETTER Q */ + ["\u24C7", "\u24E1"], /* CIRCLED LATIN CAPITAL LETTER R */ + ["\u24C8", "\u24E2"], /* CIRCLED LATIN CAPITAL LETTER S */ + ["\u24C9", "\u24E3"], /* CIRCLED LATIN CAPITAL LETTER T */ + ["\u24CA", "\u24E4"], /* CIRCLED LATIN CAPITAL LETTER U */ + ["\u24CB", "\u24E5"], /* CIRCLED LATIN CAPITAL LETTER V */ + ["\u24CC", "\u24E6"], /* CIRCLED LATIN CAPITAL LETTER W */ + ["\u24CD", "\u24E7"], /* CIRCLED LATIN CAPITAL LETTER X */ + ["\u24CE", "\u24E8"], /* CIRCLED LATIN CAPITAL LETTER Y */ + ["\u24CF", "\u24E9"], /* CIRCLED LATIN CAPITAL LETTER Z */ + ["\u24B6", "\u24D0"], /* CIRCLED LATIN SMALL LETTER A */ + ["\u24B7", "\u24D1"], /* CIRCLED LATIN SMALL LETTER B */ + ["\u24B8", "\u24D2"], /* CIRCLED LATIN SMALL LETTER C */ + ["\u24B9", "\u24D3"], /* CIRCLED LATIN SMALL LETTER D */ + ["\u24BA", "\u24D4"], /* CIRCLED LATIN SMALL LETTER E */ + ["\u24BB", "\u24D5"], /* CIRCLED LATIN SMALL LETTER F */ + ["\u24BC", "\u24D6"], /* CIRCLED LATIN SMALL LETTER G */ + ["\u24BD", "\u24D7"], /* CIRCLED LATIN SMALL LETTER H */ + ["\u24BE", "\u24D8"], /* CIRCLED LATIN SMALL LETTER I */ + ["\u24BF", "\u24D9"], /* CIRCLED LATIN SMALL LETTER J */ + ["\u24C0", "\u24DA"], /* CIRCLED LATIN SMALL LETTER K */ + ["\u24C1", "\u24DB"], /* CIRCLED LATIN SMALL LETTER L */ + ["\u24C2", "\u24DC"], /* CIRCLED LATIN SMALL LETTER M */ + ["\u24C3", "\u24DD"], /* CIRCLED LATIN SMALL LETTER N */ + ["\u24C4", "\u24DE"], /* CIRCLED LATIN SMALL LETTER O */ + ["\u24C5", "\u24DF"], /* CIRCLED LATIN SMALL LETTER P */ + ["\u24C6", "\u24E0"], /* CIRCLED LATIN SMALL LETTER Q */ + ["\u24C7", "\u24E1"], /* CIRCLED LATIN SMALL LETTER R */ + ["\u24C8", "\u24E2"], /* CIRCLED LATIN SMALL LETTER S */ + ["\u24C9", "\u24E3"], /* CIRCLED LATIN SMALL LETTER T */ + ["\u24CA", "\u24E4"], /* CIRCLED LATIN SMALL LETTER U */ + ["\u24CB", "\u24E5"], /* CIRCLED LATIN SMALL LETTER V */ + ["\u24CC", "\u24E6"], /* CIRCLED LATIN SMALL LETTER W */ + ["\u24CD", "\u24E7"], /* CIRCLED LATIN SMALL LETTER X */ + ["\u24CE", "\u24E8"], /* CIRCLED LATIN SMALL LETTER Y */ + ["\u24CF", "\u24E9"], /* CIRCLED LATIN SMALL LETTER Z */ + ["\u24EA", "\u24EA"], /* CIRCLED DIGIT ZERO */ + ["\u24EB", "\u24EB"], /* NEGATIVE CIRCLED NUMBER ELEVEN */ + ["\u24EC", "\u24EC"], /* NEGATIVE CIRCLED NUMBER TWELVE */ + ["\u24ED", "\u24ED"], /* NEGATIVE CIRCLED NUMBER THIRTEEN */ + ["\u24EE", "\u24EE"], /* NEGATIVE CIRCLED NUMBER FOURTEEN */ + ["\u24EF", "\u24EF"], /* NEGATIVE CIRCLED NUMBER FIFTEEN */ + ["\u24F0", "\u24F0"], /* NEGATIVE CIRCLED NUMBER SIXTEEN */ + ["\u24F1", "\u24F1"], /* NEGATIVE CIRCLED NUMBER SEVENTEEN */ + ["\u24F2", "\u24F2"], /* NEGATIVE CIRCLED NUMBER EIGHTEEN */ + ["\u24F3", "\u24F3"], /* NEGATIVE CIRCLED NUMBER NINETEEN */ + ["\u24F4", "\u24F4"], /* NEGATIVE CIRCLED NUMBER TWENTY */ + ["\u24F5", "\u24F5"], /* DOUBLE CIRCLED DIGIT ONE */ + ["\u24F6", "\u24F6"], /* DOUBLE CIRCLED DIGIT TWO */ + ["\u24F7", "\u24F7"], /* DOUBLE CIRCLED DIGIT THREE */ + ["\u24F8", "\u24F8"], /* DOUBLE CIRCLED DIGIT FOUR */ + ["\u24F9", "\u24F9"], /* DOUBLE CIRCLED DIGIT FIVE */ + ["\u24FA", "\u24FA"], /* DOUBLE CIRCLED DIGIT SIX */ + ["\u24FB", "\u24FB"], /* DOUBLE CIRCLED DIGIT SEVEN */ + ["\u24FC", "\u24FC"], /* DOUBLE CIRCLED DIGIT EIGHT */ + ["\u24FD", "\u24FD"], /* DOUBLE CIRCLED DIGIT NINE */ + ["\u24FE", "\u24FE"], /* DOUBLE CIRCLED NUMBER TEN */ + ["\u24FF", "\u24FF"], /* NEGATIVE CIRCLED DIGIT ZERO */ + ["\u2500", "\u2500"], /* BOX DRAWINGS LIGHT HORIZONTAL (FORMS LIGHT HORIZONTAL) */ + ["\u2501", "\u2501"], /* BOX DRAWINGS HEAVY HORIZONTAL (FORMS HEAVY HORIZONTAL) */ + ["\u2502", "\u2502"], /* BOX DRAWINGS LIGHT VERTICAL (FORMS LIGHT VERTICAL) */ + ["\u2503", "\u2503"], /* BOX DRAWINGS HEAVY VERTICAL (FORMS HEAVY VERTICAL) */ + ["\u2504", "\u2504"], /* BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL (FORMS LIGHT TRIPLE DASH HORIZONTAL) */ + ["\u2505", "\u2505"], /* BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL (FORMS HEAVY TRIPLE DASH HORIZONTAL) */ + ["\u2506", "\u2506"], /* BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL (FORMS LIGHT TRIPLE DASH VERTICAL) */ + ["\u2507", "\u2507"], /* BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL (FORMS HEAVY TRIPLE DASH VERTICAL) */ + ["\u2508", "\u2508"], /* BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL (FORMS LIGHT QUADRUPLE DASH HORIZONTAL) */ + ["\u2509", "\u2509"], /* BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL (FORMS HEAVY QUADRUPLE DASH HORIZONTAL) */ + ["\u250A", "\u250A"], /* BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL (FORMS LIGHT QUADRUPLE DASH VERTICAL) */ + ["\u250B", "\u250B"], /* BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL (FORMS HEAVY QUADRUPLE DASH VERTICAL) */ + ["\u250C", "\u250C"], /* BOX DRAWINGS LIGHT DOWN AND RIGHT (FORMS LIGHT DOWN AND RIGHT) */ + ["\u250D", "\u250D"], /* BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY (FORMS DOWN LIGHT AND RIGHT HEAVY) */ + ["\u250E", "\u250E"], /* BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT (FORMS DOWN HEAVY AND RIGHT LIGHT) */ + ["\u250F", "\u250F"], /* BOX DRAWINGS HEAVY DOWN AND RIGHT (FORMS HEAVY DOWN AND RIGHT) */ + ["\u2510", "\u2510"], /* BOX DRAWINGS LIGHT DOWN AND LEFT (FORMS LIGHT DOWN AND LEFT) */ + ["\u2511", "\u2511"], /* BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY (FORMS DOWN LIGHT AND LEFT HEAVY) */ + ["\u2512", "\u2512"], /* BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT (FORMS DOWN HEAVY AND LEFT LIGHT) */ + ["\u2513", "\u2513"], /* BOX DRAWINGS HEAVY DOWN AND LEFT (FORMS HEAVY DOWN AND LEFT) */ + ["\u2514", "\u2514"], /* BOX DRAWINGS LIGHT UP AND RIGHT (FORMS LIGHT UP AND RIGHT) */ + ["\u2515", "\u2515"], /* BOX DRAWINGS UP LIGHT AND RIGHT HEAVY (FORMS UP LIGHT AND RIGHT HEAVY) */ + ["\u2516", "\u2516"], /* BOX DRAWINGS UP HEAVY AND RIGHT LIGHT (FORMS UP HEAVY AND RIGHT LIGHT) */ + ["\u2517", "\u2517"], /* BOX DRAWINGS HEAVY UP AND RIGHT (FORMS HEAVY UP AND RIGHT) */ + ["\u2518", "\u2518"], /* BOX DRAWINGS LIGHT UP AND LEFT (FORMS LIGHT UP AND LEFT) */ + ["\u2519", "\u2519"], /* BOX DRAWINGS UP LIGHT AND LEFT HEAVY (FORMS UP LIGHT AND LEFT HEAVY) */ + ["\u251A", "\u251A"], /* BOX DRAWINGS UP HEAVY AND LEFT LIGHT (FORMS UP HEAVY AND LEFT LIGHT) */ + ["\u251B", "\u251B"], /* BOX DRAWINGS HEAVY UP AND LEFT (FORMS HEAVY UP AND LEFT) */ + ["\u251C", "\u251C"], /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT (FORMS LIGHT VERTICAL AND RIGHT) */ + ["\u251D", "\u251D"], /* BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY (FORMS VERTICAL LIGHT AND RIGHT HEAVY) */ + ["\u251E", "\u251E"], /* BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT (FORMS UP HEAVY AND RIGHT DOWN LIGHT) */ + ["\u251F", "\u251F"], /* BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT (FORMS DOWN HEAVY AND RIGHT UP LIGHT) */ + ["\u2520", "\u2520"], /* BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT (FORMS VERTICAL HEAVY AND RIGHT LIGHT) */ + ["\u2521", "\u2521"], /* BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY (FORMS DOWN LIGHT AND RIGHT UP HEAVY) */ + ["\u2522", "\u2522"], /* BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY (FORMS UP LIGHT AND RIGHT DOWN HEAVY) */ + ["\u2523", "\u2523"], /* BOX DRAWINGS HEAVY VERTICAL AND RIGHT (FORMS HEAVY VERTICAL AND RIGHT) */ + ["\u2524", "\u2524"], /* BOX DRAWINGS LIGHT VERTICAL AND LEFT (FORMS LIGHT VERTICAL AND LEFT) */ + ["\u2525", "\u2525"], /* BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY (FORMS VERTICAL LIGHT AND LEFT HEAVY) */ + ["\u2526", "\u2526"], /* BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT (FORMS UP HEAVY AND LEFT DOWN LIGHT) */ + ["\u2527", "\u2527"], /* BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT (FORMS DOWN HEAVY AND LEFT UP LIGHT) */ + ["\u2528", "\u2528"], /* BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT (FORMS VERTICAL HEAVY AND LEFT LIGHT) */ + ["\u2529", "\u2529"], /* BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY (FORMS DOWN LIGHT AND LEFT UP HEAVY) */ + ["\u252A", "\u252A"], /* BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY (FORMS UP LIGHT AND LEFT DOWN HEAVY) */ + ["\u252B", "\u252B"], /* BOX DRAWINGS HEAVY VERTICAL AND LEFT (FORMS HEAVY VERTICAL AND LEFT) */ + ["\u252C", "\u252C"], /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL (FORMS LIGHT DOWN AND HORIZONTAL) */ + ["\u252D", "\u252D"], /* BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT (FORMS LEFT HEAVY AND RIGHT DOWN LIGHT) */ + ["\u252E", "\u252E"], /* BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT (FORMS RIGHT HEAVY AND LEFT DOWN LIGHT) */ + ["\u252F", "\u252F"], /* BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY (FORMS DOWN LIGHT AND HORIZONTAL HEAVY) */ + ["\u2530", "\u2530"], /* BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT (FORMS DOWN HEAVY AND HORIZONTAL LIGHT) */ + ["\u2531", "\u2531"], /* BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY (FORMS RIGHT LIGHT AND LEFT DOWN HEAVY) */ + ["\u2532", "\u2532"], /* BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY (FORMS LEFT LIGHT AND RIGHT DOWN HEAVY) */ + ["\u2533", "\u2533"], /* BOX DRAWINGS HEAVY DOWN AND HORIZONTAL (FORMS HEAVY DOWN AND HORIZONTAL) */ + ["\u2534", "\u2534"], /* BOX DRAWINGS LIGHT UP AND HORIZONTAL (FORMS LIGHT UP AND HORIZONTAL) */ + ["\u2535", "\u2535"], /* BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT (FORMS LEFT HEAVY AND RIGHT UP LIGHT) */ + ["\u2536", "\u2536"], /* BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT (FORMS RIGHT HEAVY AND LEFT UP LIGHT) */ + ["\u2537", "\u2537"], /* BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY (FORMS UP LIGHT AND HORIZONTAL HEAVY) */ + ["\u2538", "\u2538"], /* BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT (FORMS UP HEAVY AND HORIZONTAL LIGHT) */ + ["\u2539", "\u2539"], /* BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY (FORMS RIGHT LIGHT AND LEFT UP HEAVY) */ + ["\u253A", "\u253A"], /* BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY (FORMS LEFT LIGHT AND RIGHT UP HEAVY) */ + ["\u253B", "\u253B"], /* BOX DRAWINGS HEAVY UP AND HORIZONTAL (FORMS HEAVY UP AND HORIZONTAL) */ + ["\u253C", "\u253C"], /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL (FORMS LIGHT VERTICAL AND HORIZONTAL) */ + ["\u253D", "\u253D"], /* BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT (FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT) */ + ["\u253E", "\u253E"], /* BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT (FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT) */ + ["\u253F", "\u253F"], /* BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY (FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY) */ + ["\u2540", "\u2540"], /* BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT (FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT) */ + ["\u2541", "\u2541"], /* BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT (FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT) */ + ["\u2542", "\u2542"], /* BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT (FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT) */ + ["\u2543", "\u2543"], /* BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT (FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT) */ + ["\u2544", "\u2544"], /* BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT (FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT) */ + ["\u2545", "\u2545"], /* BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT (FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT) */ + ["\u2546", "\u2546"], /* BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT (FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT) */ + ["\u2547", "\u2547"], /* BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY (FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY) */ + ["\u2548", "\u2548"], /* BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY (FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY) */ + ["\u2549", "\u2549"], /* BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY (FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY) */ + ["\u254A", "\u254A"], /* BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY (FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY) */ + ["\u254B", "\u254B"], /* BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL (FORMS HEAVY VERTICAL AND HORIZONTAL) */ + ["\u254C", "\u254C"], /* BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL (FORMS LIGHT DOUBLE DASH HORIZONTAL) */ + ["\u254D", "\u254D"], /* BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL (FORMS HEAVY DOUBLE DASH HORIZONTAL) */ + ["\u254E", "\u254E"], /* BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL (FORMS LIGHT DOUBLE DASH VERTICAL) */ + ["\u254F", "\u254F"], /* BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL (FORMS HEAVY DOUBLE DASH VERTICAL) */ + ["\u2550", "\u2550"], /* BOX DRAWINGS DOUBLE HORIZONTAL (FORMS DOUBLE HORIZONTAL) */ + ["\u2551", "\u2551"], /* BOX DRAWINGS DOUBLE VERTICAL (FORMS DOUBLE VERTICAL) */ + ["\u2552", "\u2552"], /* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE (FORMS DOWN SINGLE AND RIGHT DOUBLE) */ + ["\u2553", "\u2553"], /* BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE (FORMS DOWN DOUBLE AND RIGHT SINGLE) */ + ["\u2554", "\u2554"], /* BOX DRAWINGS DOUBLE DOWN AND RIGHT (FORMS DOUBLE DOWN AND RIGHT) */ + ["\u2555", "\u2555"], /* BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE (FORMS DOWN SINGLE AND LEFT DOUBLE) */ + ["\u2556", "\u2556"], /* BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE (FORMS DOWN DOUBLE AND LEFT SINGLE) */ + ["\u2557", "\u2557"], /* BOX DRAWINGS DOUBLE DOWN AND LEFT (FORMS DOUBLE DOWN AND LEFT) */ + ["\u2558", "\u2558"], /* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE (FORMS UP SINGLE AND RIGHT DOUBLE) */ + ["\u2559", "\u2559"], /* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE (FORMS UP DOUBLE AND RIGHT SINGLE) */ + ["\u255A", "\u255A"], /* BOX DRAWINGS DOUBLE UP AND RIGHT (FORMS DOUBLE UP AND RIGHT) */ + ["\u255B", "\u255B"], /* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE (FORMS UP SINGLE AND LEFT DOUBLE) */ + ["\u255C", "\u255C"], /* BOX DRAWINGS UP DOUBLE AND LEFT SINGLE (FORMS UP DOUBLE AND LEFT SINGLE) */ + ["\u255D", "\u255D"], /* BOX DRAWINGS DOUBLE UP AND LEFT (FORMS DOUBLE UP AND LEFT) */ + ["\u255E", "\u255E"], /* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE (FORMS VERTICAL SINGLE AND RIGHT DOUBLE) */ + ["\u255F", "\u255F"], /* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE (FORMS VERTICAL DOUBLE AND RIGHT SINGLE) */ + ["\u2560", "\u2560"], /* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT (FORMS DOUBLE VERTICAL AND RIGHT) */ + ["\u2561", "\u2561"], /* BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE (FORMS VERTICAL SINGLE AND LEFT DOUBLE) */ + ["\u2562", "\u2562"], /* BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE (FORMS VERTICAL DOUBLE AND LEFT SINGLE) */ + ["\u2563", "\u2563"], /* BOX DRAWINGS DOUBLE VERTICAL AND LEFT (FORMS DOUBLE VERTICAL AND LEFT) */ + ["\u2564", "\u2564"], /* BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE (FORMS DOWN SINGLE AND HORIZONTAL DOUBLE) */ + ["\u2565", "\u2565"], /* BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE (FORMS DOWN DOUBLE AND HORIZONTAL SINGLE) */ + ["\u2566", "\u2566"], /* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL (FORMS DOUBLE DOWN AND HORIZONTAL) */ + ["\u2567", "\u2567"], /* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE (FORMS UP SINGLE AND HORIZONTAL DOUBLE) */ + ["\u2568", "\u2568"], /* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE (FORMS UP DOUBLE AND HORIZONTAL SINGLE) */ + ["\u2569", "\u2569"], /* BOX DRAWINGS DOUBLE UP AND HORIZONTAL (FORMS DOUBLE UP AND HORIZONTAL) */ + ["\u256A", "\u256A"], /* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE (FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE) */ + ["\u256B", "\u256B"], /* BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE (FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE) */ + ["\u256C", "\u256C"], /* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL (FORMS DOUBLE VERTICAL AND HORIZONTAL) */ + ["\u256D", "\u256D"], /* BOX DRAWINGS LIGHT ARC DOWN AND RIGHT (FORMS LIGHT ARC DOWN AND RIGHT) */ + ["\u256E", "\u256E"], /* BOX DRAWINGS LIGHT ARC DOWN AND LEFT (FORMS LIGHT ARC DOWN AND LEFT) */ + ["\u256F", "\u256F"], /* BOX DRAWINGS LIGHT ARC UP AND LEFT (FORMS LIGHT ARC UP AND LEFT) */ + ["\u2570", "\u2570"], /* BOX DRAWINGS LIGHT ARC UP AND RIGHT (FORMS LIGHT ARC UP AND RIGHT) */ + ["\u2571", "\u2571"], /* BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT (FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT) */ + ["\u2572", "\u2572"], /* BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT (FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT) */ + ["\u2573", "\u2573"], /* BOX DRAWINGS LIGHT DIAGONAL CROSS (FORMS LIGHT DIAGONAL CROSS) */ + ["\u2574", "\u2574"], /* BOX DRAWINGS LIGHT LEFT (FORMS LIGHT LEFT) */ + ["\u2575", "\u2575"], /* BOX DRAWINGS LIGHT UP (FORMS LIGHT UP) */ + ["\u2576", "\u2576"], /* BOX DRAWINGS LIGHT RIGHT (FORMS LIGHT RIGHT) */ + ["\u2577", "\u2577"], /* BOX DRAWINGS LIGHT DOWN (FORMS LIGHT DOWN) */ + ["\u2578", "\u2578"], /* BOX DRAWINGS HEAVY LEFT (FORMS HEAVY LEFT) */ + ["\u2579", "\u2579"], /* BOX DRAWINGS HEAVY UP (FORMS HEAVY UP) */ + ["\u257A", "\u257A"], /* BOX DRAWINGS HEAVY RIGHT (FORMS HEAVY RIGHT) */ + ["\u257B", "\u257B"], /* BOX DRAWINGS HEAVY DOWN (FORMS HEAVY DOWN) */ + ["\u257C", "\u257C"], /* BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT (FORMS LIGHT LEFT AND HEAVY RIGHT) */ + ["\u257D", "\u257D"], /* BOX DRAWINGS LIGHT UP AND HEAVY DOWN (FORMS LIGHT UP AND HEAVY DOWN) */ + ["\u257E", "\u257E"], /* BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT (FORMS HEAVY LEFT AND LIGHT RIGHT) */ + ["\u257F", "\u257F"], /* BOX DRAWINGS HEAVY UP AND LIGHT DOWN (FORMS HEAVY UP AND LIGHT DOWN) */ + ["\u2580", "\u2580"], /* UPPER HALF BLOCK */ + ["\u2581", "\u2581"], /* LOWER ONE EIGHTH BLOCK */ + ["\u2582", "\u2582"], /* LOWER ONE QUARTER BLOCK */ + ["\u2583", "\u2583"], /* LOWER THREE EIGHTHS BLOCK */ + ["\u2584", "\u2584"], /* LOWER HALF BLOCK */ + ["\u2585", "\u2585"], /* LOWER FIVE EIGHTHS BLOCK */ + ["\u2586", "\u2586"], /* LOWER THREE QUARTERS BLOCK (LOWER THREE QUARTER BLOCK) */ + ["\u2587", "\u2587"], /* LOWER SEVEN EIGHTHS BLOCK */ + ["\u2588", "\u2588"], /* FULL BLOCK */ + ["\u2589", "\u2589"], /* LEFT SEVEN EIGHTHS BLOCK */ + ["\u258A", "\u258A"], /* LEFT THREE QUARTERS BLOCK (LEFT THREE QUARTER BLOCK) */ + ["\u258B", "\u258B"], /* LEFT FIVE EIGHTHS BLOCK */ + ["\u258C", "\u258C"], /* LEFT HALF BLOCK */ + ["\u258D", "\u258D"], /* LEFT THREE EIGHTHS BLOCK */ + ["\u258E", "\u258E"], /* LEFT ONE QUARTER BLOCK */ + ["\u258F", "\u258F"], /* LEFT ONE EIGHTH BLOCK */ + ["\u2590", "\u2590"], /* RIGHT HALF BLOCK */ + ["\u2591", "\u2591"], /* LIGHT SHADE */ + ["\u2592", "\u2592"], /* MEDIUM SHADE */ + ["\u2593", "\u2593"], /* DARK SHADE */ + ["\u2594", "\u2594"], /* UPPER ONE EIGHTH BLOCK */ + ["\u2595", "\u2595"], /* RIGHT ONE EIGHTH BLOCK */ + ["\u2596", "\u2596"], /* QUADRANT LOWER LEFT */ + ["\u2597", "\u2597"], /* QUADRANT LOWER RIGHT */ + ["\u2598", "\u2598"], /* QUADRANT UPPER LEFT */ + ["\u2599", "\u2599"], /* QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT */ + ["\u259A", "\u259A"], /* QUADRANT UPPER LEFT AND LOWER RIGHT */ + ["\u259B", "\u259B"], /* QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT */ + ["\u259C", "\u259C"], /* QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT */ + ["\u259D", "\u259D"], /* QUADRANT UPPER RIGHT */ + ["\u259E", "\u259E"], /* QUADRANT UPPER RIGHT AND LOWER LEFT */ + ["\u259F", "\u259F"], /* QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT */ + ["\u25A0", "\u25A0"], /* BLACK SQUARE */ + ["\u25A1", "\u25A1"], /* WHITE SQUARE */ + ["\u25A2", "\u25A2"], /* WHITE SQUARE WITH ROUNDED CORNERS */ + ["\u25A3", "\u25A3"], /* WHITE SQUARE CONTAINING BLACK SMALL SQUARE */ + ["\u25A4", "\u25A4"], /* SQUARE WITH HORIZONTAL FILL */ + ["\u25A5", "\u25A5"], /* SQUARE WITH VERTICAL FILL */ + ["\u25A6", "\u25A6"], /* SQUARE WITH ORTHOGONAL CROSSHATCH FILL */ + ["\u25A7", "\u25A7"], /* SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL */ + ["\u25A8", "\u25A8"], /* SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL */ + ["\u25A9", "\u25A9"], /* SQUARE WITH DIAGONAL CROSSHATCH FILL */ + ["\u25AA", "\u25AA"], /* BLACK SMALL SQUARE */ + ["\u25AB", "\u25AB"], /* WHITE SMALL SQUARE */ + ["\u25AC", "\u25AC"], /* BLACK RECTANGLE */ + ["\u25AD", "\u25AD"], /* WHITE RECTANGLE */ + ["\u25AE", "\u25AE"], /* BLACK VERTICAL RECTANGLE */ + ["\u25AF", "\u25AF"], /* WHITE VERTICAL RECTANGLE */ + ["\u25B0", "\u25B0"], /* BLACK PARALLELOGRAM */ + ["\u25B1", "\u25B1"], /* WHITE PARALLELOGRAM */ + ["\u25B2", "\u25B2"], /* BLACK UP-POINTING TRIANGLE (BLACK UP POINTING TRIANGLE) */ + ["\u25B3", "\u25B3"], /* WHITE UP-POINTING TRIANGLE (WHITE UP POINTING TRIANGLE) */ + ["\u25B4", "\u25B4"], /* BLACK UP-POINTING SMALL TRIANGLE (BLACK UP POINTING SMALL TRIANGLE) */ + ["\u25B5", "\u25B5"], /* WHITE UP-POINTING SMALL TRIANGLE (WHITE UP POINTING SMALL TRIANGLE) */ + ["\u25B6", "\u25B6"], /* BLACK RIGHT-POINTING TRIANGLE (BLACK RIGHT POINTING TRIANGLE) */ + ["\u25B7", "\u25B7"], /* WHITE RIGHT-POINTING TRIANGLE (WHITE RIGHT POINTING TRIANGLE) */ + ["\u25B8", "\u25B8"], /* BLACK RIGHT-POINTING SMALL TRIANGLE (BLACK RIGHT POINTING SMALL TRIANGLE) */ + ["\u25B9", "\u25B9"], /* WHITE RIGHT-POINTING SMALL TRIANGLE (WHITE RIGHT POINTING SMALL TRIANGLE) */ + ["\u25BA", "\u25BA"], /* BLACK RIGHT-POINTING POINTER (BLACK RIGHT POINTING POINTER) */ + ["\u25BB", "\u25BB"], /* WHITE RIGHT-POINTING POINTER (WHITE RIGHT POINTING POINTER) */ + ["\u25BC", "\u25BC"], /* BLACK DOWN-POINTING TRIANGLE (BLACK DOWN POINTING TRIANGLE) */ + ["\u25BD", "\u25BD"], /* WHITE DOWN-POINTING TRIANGLE (WHITE DOWN POINTING TRIANGLE) */ + ["\u25BE", "\u25BE"], /* BLACK DOWN-POINTING SMALL TRIANGLE (BLACK DOWN POINTING SMALL TRIANGLE) */ + ["\u25BF", "\u25BF"], /* WHITE DOWN-POINTING SMALL TRIANGLE (WHITE DOWN POINTING SMALL TRIANGLE) */ + ["\u25C0", "\u25C0"], /* BLACK LEFT-POINTING TRIANGLE (BLACK LEFT POINTING TRIANGLE) */ + ["\u25C1", "\u25C1"], /* WHITE LEFT-POINTING TRIANGLE (WHITE LEFT POINTING TRIANGLE) */ + ["\u25C2", "\u25C2"], /* BLACK LEFT-POINTING SMALL TRIANGLE (BLACK LEFT POINTING SMALL TRIANGLE) */ + ["\u25C3", "\u25C3"], /* WHITE LEFT-POINTING SMALL TRIANGLE (WHITE LEFT POINTING SMALL TRIANGLE) */ + ["\u25C4", "\u25C4"], /* BLACK LEFT-POINTING POINTER (BLACK LEFT POINTING POINTER) */ + ["\u25C5", "\u25C5"], /* WHITE LEFT-POINTING POINTER (WHITE LEFT POINTING POINTER) */ + ["\u25C6", "\u25C6"], /* BLACK DIAMOND */ + ["\u25C7", "\u25C7"], /* WHITE DIAMOND */ + ["\u25C8", "\u25C8"], /* WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND */ + ["\u25C9", "\u25C9"], /* FISHEYE */ + ["\u25CA", "\u25CA"], /* LOZENGE */ + ["\u25CB", "\u25CB"], /* WHITE CIRCLE */ + ["\u25CC", "\u25CC"], /* DOTTED CIRCLE */ + ["\u25CD", "\u25CD"], /* CIRCLE WITH VERTICAL FILL */ + ["\u25CE", "\u25CE"], /* BULLSEYE */ + ["\u25CF", "\u25CF"], /* BLACK CIRCLE */ + ["\u25D0", "\u25D0"], /* CIRCLE WITH LEFT HALF BLACK */ + ["\u25D1", "\u25D1"], /* CIRCLE WITH RIGHT HALF BLACK */ + ["\u25D2", "\u25D2"], /* CIRCLE WITH LOWER HALF BLACK */ + ["\u25D3", "\u25D3"], /* CIRCLE WITH UPPER HALF BLACK */ + ["\u25D4", "\u25D4"], /* CIRCLE WITH UPPER RIGHT QUADRANT BLACK */ + ["\u25D5", "\u25D5"], /* CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK */ + ["\u25D6", "\u25D6"], /* LEFT HALF BLACK CIRCLE */ + ["\u25D7", "\u25D7"], /* RIGHT HALF BLACK CIRCLE */ + ["\u25D8", "\u25D8"], /* INVERSE BULLET */ + ["\u25D9", "\u25D9"], /* INVERSE WHITE CIRCLE */ + ["\u25DA", "\u25DA"], /* UPPER HALF INVERSE WHITE CIRCLE */ + ["\u25DB", "\u25DB"], /* LOWER HALF INVERSE WHITE CIRCLE */ + ["\u25DC", "\u25DC"], /* UPPER LEFT QUADRANT CIRCULAR ARC */ + ["\u25DD", "\u25DD"], /* UPPER RIGHT QUADRANT CIRCULAR ARC */ + ["\u25DE", "\u25DE"], /* LOWER RIGHT QUADRANT CIRCULAR ARC */ + ["\u25DF", "\u25DF"], /* LOWER LEFT QUADRANT CIRCULAR ARC */ + ["\u25E0", "\u25E0"], /* UPPER HALF CIRCLE */ + ["\u25E1", "\u25E1"], /* LOWER HALF CIRCLE */ + ["\u25E2", "\u25E2"], /* BLACK LOWER RIGHT TRIANGLE */ + ["\u25E3", "\u25E3"], /* BLACK LOWER LEFT TRIANGLE */ + ["\u25E4", "\u25E4"], /* BLACK UPPER LEFT TRIANGLE */ + ["\u25E5", "\u25E5"], /* BLACK UPPER RIGHT TRIANGLE */ + ["\u25E6", "\u25E6"], /* WHITE BULLET */ + ["\u25E7", "\u25E7"], /* SQUARE WITH LEFT HALF BLACK */ + ["\u25E8", "\u25E8"], /* SQUARE WITH RIGHT HALF BLACK */ + ["\u25E9", "\u25E9"], /* SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK */ + ["\u25EA", "\u25EA"], /* SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK */ + ["\u25EB", "\u25EB"], /* WHITE SQUARE WITH VERTICAL BISECTING LINE */ + ["\u25EC", "\u25EC"], /* WHITE UP-POINTING TRIANGLE WITH DOT (WHITE UP POINTING TRIANGLE WITH DOT) */ + ["\u25ED", "\u25ED"], /* UP-POINTING TRIANGLE WITH LEFT HALF BLACK (UP POINTING TRIANGLE WITH LEFT HALF BLACK) */ + ["\u25EE", "\u25EE"], /* UP-POINTING TRIANGLE WITH RIGHT HALF BLACK (UP POINTING TRIANGLE WITH RIGHT HALF BLACK) */ + ["\u25EF", "\u25EF"], /* LARGE CIRCLE */ + ["\u25F0", "\u25F0"], /* WHITE SQUARE WITH UPPER LEFT QUADRANT */ + ["\u25F1", "\u25F1"], /* WHITE SQUARE WITH LOWER LEFT QUADRANT */ + ["\u25F2", "\u25F2"], /* WHITE SQUARE WITH LOWER RIGHT QUADRANT */ + ["\u25F3", "\u25F3"], /* WHITE SQUARE WITH UPPER RIGHT QUADRANT */ + ["\u25F4", "\u25F4"], /* WHITE CIRCLE WITH UPPER LEFT QUADRANT */ + ["\u25F5", "\u25F5"], /* WHITE CIRCLE WITH LOWER LEFT QUADRANT */ + ["\u25F6", "\u25F6"], /* WHITE CIRCLE WITH LOWER RIGHT QUADRANT */ + ["\u25F7", "\u25F7"], /* WHITE CIRCLE WITH UPPER RIGHT QUADRANT */ + ["\u25F8", "\u25F8"], /* UPPER LEFT TRIANGLE */ + ["\u25F9", "\u25F9"], /* UPPER RIGHT TRIANGLE */ + ["\u25FA", "\u25FA"], /* LOWER LEFT TRIANGLE */ + ["\u25FB", "\u25FB"], /* WHITE MEDIUM SQUARE */ + ["\u25FC", "\u25FC"], /* BLACK MEDIUM SQUARE */ + ["\u25FD", "\u25FD"], /* WHITE MEDIUM SMALL SQUARE */ + ["\u25FE", "\u25FE"], /* BLACK MEDIUM SMALL SQUARE */ + ["\u25FF", "\u25FF"], /* LOWER RIGHT TRIANGLE */ + ["\u2600", "\u2600"], /* BLACK SUN WITH RAYS */ + ["\u2601", "\u2601"], /* CLOUD */ + ["\u2602", "\u2602"], /* UMBRELLA */ + ["\u2603", "\u2603"], /* SNOWMAN */ + ["\u2604", "\u2604"], /* COMET */ + ["\u2605", "\u2605"], /* BLACK STAR */ + ["\u2606", "\u2606"], /* WHITE STAR */ + ["\u2607", "\u2607"], /* LIGHTNING */ + ["\u2608", "\u2608"], /* THUNDERSTORM */ + ["\u2609", "\u2609"], /* SUN */ + ["\u260A", "\u260A"], /* ASCENDING NODE */ + ["\u260B", "\u260B"], /* DESCENDING NODE */ + ["\u260C", "\u260C"], /* CONJUNCTION */ + ["\u260D", "\u260D"], /* OPPOSITION */ + ["\u260E", "\u260E"], /* BLACK TELEPHONE */ + ["\u260F", "\u260F"], /* WHITE TELEPHONE */ + ["\u2610", "\u2610"], /* BALLOT BOX */ + ["\u2611", "\u2611"], /* BALLOT BOX WITH CHECK */ + ["\u2612", "\u2612"], /* BALLOT BOX WITH X */ + ["\u2613", "\u2613"], /* SALTIRE */ + ["\u2614", "\u2614"], /* UMBRELLA WITH RAIN DROPS */ + ["\u2615", "\u2615"], /* HOT BEVERAGE */ + ["\u2616", "\u2616"], /* WHITE SHOGI PIECE */ + ["\u2617", "\u2617"], /* BLACK SHOGI PIECE */ + ["\u2618", "\u2618"], /* SHAMROCK */ + ["\u2619", "\u2619"], /* REVERSED ROTATED FLORAL HEART BULLET */ + ["\u261A", "\u261A"], /* BLACK LEFT POINTING INDEX */ + ["\u261B", "\u261B"], /* BLACK RIGHT POINTING INDEX */ + ["\u261C", "\u261C"], /* WHITE LEFT POINTING INDEX */ + ["\u261D", "\u261D"], /* WHITE UP POINTING INDEX */ + ["\u261E", "\u261E"], /* WHITE RIGHT POINTING INDEX */ + ["\u261F", "\u261F"], /* WHITE DOWN POINTING INDEX */ + ["\u2620", "\u2620"], /* SKULL AND CROSSBONES */ + ["\u2621", "\u2621"], /* CAUTION SIGN */ + ["\u2622", "\u2622"], /* RADIOACTIVE SIGN */ + ["\u2623", "\u2623"], /* BIOHAZARD SIGN */ + ["\u2624", "\u2624"], /* CADUCEUS */ + ["\u2625", "\u2625"], /* ANKH */ + ["\u2626", "\u2626"], /* ORTHODOX CROSS */ + ["\u2627", "\u2627"], /* CHI RHO */ + ["\u2628", "\u2628"], /* CROSS OF LORRAINE */ + ["\u2629", "\u2629"], /* CROSS OF JERUSALEM */ + ["\u262A", "\u262A"], /* STAR AND CRESCENT */ + ["\u262B", "\u262B"], /* FARSI SYMBOL (SYMBOL OF IRAN) */ + ["\u262C", "\u262C"], /* ADI SHAKTI */ + ["\u262D", "\u262D"], /* HAMMER AND SICKLE */ + ["\u262E", "\u262E"], /* PEACE SYMBOL */ + ["\u262F", "\u262F"], /* YIN YANG */ + ["\u2630", "\u2630"], /* TRIGRAM FOR HEAVEN */ + ["\u2631", "\u2631"], /* TRIGRAM FOR LAKE */ + ["\u2632", "\u2632"], /* TRIGRAM FOR FIRE */ + ["\u2633", "\u2633"], /* TRIGRAM FOR THUNDER */ + ["\u2634", "\u2634"], /* TRIGRAM FOR WIND */ + ["\u2635", "\u2635"], /* TRIGRAM FOR WATER */ + ["\u2636", "\u2636"], /* TRIGRAM FOR MOUNTAIN */ + ["\u2637", "\u2637"], /* TRIGRAM FOR EARTH */ + ["\u2638", "\u2638"], /* WHEEL OF DHARMA */ + ["\u2639", "\u2639"], /* WHITE FROWNING FACE */ + ["\u263A", "\u263A"], /* WHITE SMILING FACE */ + ["\u263B", "\u263B"], /* BLACK SMILING FACE */ + ["\u263C", "\u263C"], /* WHITE SUN WITH RAYS */ + ["\u263D", "\u263D"], /* FIRST QUARTER MOON */ + ["\u263E", "\u263E"], /* LAST QUARTER MOON */ + ["\u263F", "\u263F"], /* MERCURY */ + ["\u2640", "\u2640"], /* FEMALE SIGN */ + ["\u2641", "\u2641"], /* EARTH */ + ["\u2642", "\u2642"], /* MALE SIGN */ + ["\u2643", "\u2643"], /* JUPITER */ + ["\u2644", "\u2644"], /* SATURN */ + ["\u2645", "\u2645"], /* URANUS */ + ["\u2646", "\u2646"], /* NEPTUNE */ + ["\u2647", "\u2647"], /* PLUTO */ + ["\u2648", "\u2648"], /* ARIES */ + ["\u2649", "\u2649"], /* TAURUS */ + ["\u264A", "\u264A"], /* GEMINI */ + ["\u264B", "\u264B"], /* CANCER */ + ["\u264C", "\u264C"], /* LEO */ + ["\u264D", "\u264D"], /* VIRGO */ + ["\u264E", "\u264E"], /* LIBRA */ + ["\u264F", "\u264F"], /* SCORPIUS */ + ["\u2650", "\u2650"], /* SAGITTARIUS */ + ["\u2651", "\u2651"], /* CAPRICORN */ + ["\u2652", "\u2652"], /* AQUARIUS */ + ["\u2653", "\u2653"], /* PISCES */ + ["\u2654", "\u2654"], /* WHITE CHESS KING */ + ["\u2655", "\u2655"], /* WHITE CHESS QUEEN */ + ["\u2656", "\u2656"], /* WHITE CHESS ROOK */ + ["\u2657", "\u2657"], /* WHITE CHESS BISHOP */ + ["\u2658", "\u2658"], /* WHITE CHESS KNIGHT */ + ["\u2659", "\u2659"], /* WHITE CHESS PAWN */ + ["\u265A", "\u265A"], /* BLACK CHESS KING */ + ["\u265B", "\u265B"], /* BLACK CHESS QUEEN */ + ["\u265C", "\u265C"], /* BLACK CHESS ROOK */ + ["\u265D", "\u265D"], /* BLACK CHESS BISHOP */ + ["\u265E", "\u265E"], /* BLACK CHESS KNIGHT */ + ["\u265F", "\u265F"], /* BLACK CHESS PAWN */ + ["\u2660", "\u2660"], /* BLACK SPADE SUIT */ + ["\u2661", "\u2661"], /* WHITE HEART SUIT */ + ["\u2662", "\u2662"], /* WHITE DIAMOND SUIT */ + ["\u2663", "\u2663"], /* BLACK CLUB SUIT */ + ["\u2664", "\u2664"], /* WHITE SPADE SUIT */ + ["\u2665", "\u2665"], /* BLACK HEART SUIT */ + ["\u2666", "\u2666"], /* BLACK DIAMOND SUIT */ + ["\u2667", "\u2667"], /* WHITE CLUB SUIT */ + ["\u2668", "\u2668"], /* HOT SPRINGS */ + ["\u2669", "\u2669"], /* QUARTER NOTE */ + ["\u266A", "\u266A"], /* EIGHTH NOTE */ + ["\u266B", "\u266B"], /* BEAMED EIGHTH NOTES (BARRED EIGHTH NOTES) */ + ["\u266C", "\u266C"], /* BEAMED SIXTEENTH NOTES (BARRED SIXTEENTH NOTES) */ + ["\u266D", "\u266D"], /* MUSIC FLAT SIGN (FLAT) */ + ["\u266E", "\u266E"], /* MUSIC NATURAL SIGN (NATURAL) */ + ["\u266F", "\u266F"], /* MUSIC SHARP SIGN (SHARP) */ + ["\u2670", "\u2670"], /* WEST SYRIAC CROSS */ + ["\u2671", "\u2671"], /* EAST SYRIAC CROSS */ + ["\u2672", "\u2672"], /* UNIVERSAL RECYCLING SYMBOL */ + ["\u2673", "\u2673"], /* RECYCLING SYMBOL FOR TYPE-1 PLASTICS */ + ["\u2674", "\u2674"], /* RECYCLING SYMBOL FOR TYPE-2 PLASTICS */ + ["\u2675", "\u2675"], /* RECYCLING SYMBOL FOR TYPE-3 PLASTICS */ + ["\u2676", "\u2676"], /* RECYCLING SYMBOL FOR TYPE-4 PLASTICS */ + ["\u2677", "\u2677"], /* RECYCLING SYMBOL FOR TYPE-5 PLASTICS */ + ["\u2678", "\u2678"], /* RECYCLING SYMBOL FOR TYPE-6 PLASTICS */ + ["\u2679", "\u2679"], /* RECYCLING SYMBOL FOR TYPE-7 PLASTICS */ + ["\u267A", "\u267A"], /* RECYCLING SYMBOL FOR GENERIC MATERIALS */ + ["\u267B", "\u267B"], /* BLACK UNIVERSAL RECYCLING SYMBOL */ + ["\u267C", "\u267C"], /* RECYCLED PAPER SYMBOL */ + ["\u267D", "\u267D"], /* PARTIALLY-RECYCLED PAPER SYMBOL */ + ["\u267E", "\u267E"], /* PERMANENT PAPER SIGN */ + ["\u267F", "\u267F"], /* WHEELCHAIR SYMBOL */ + ["\u2680", "\u2680"], /* DIE FACE-1 */ + ["\u2681", "\u2681"], /* DIE FACE-2 */ + ["\u2682", "\u2682"], /* DIE FACE-3 */ + ["\u2683", "\u2683"], /* DIE FACE-4 */ + ["\u2684", "\u2684"], /* DIE FACE-5 */ + ["\u2685", "\u2685"], /* DIE FACE-6 */ + ["\u2686", "\u2686"], /* WHITE CIRCLE WITH DOT RIGHT */ + ["\u2687", "\u2687"], /* WHITE CIRCLE WITH TWO DOTS */ + ["\u2688", "\u2688"], /* BLACK CIRCLE WITH WHITE DOT RIGHT */ + ["\u2689", "\u2689"], /* BLACK CIRCLE WITH TWO WHITE DOTS */ + ["\u268A", "\u268A"], /* MONOGRAM FOR YANG */ + ["\u268B", "\u268B"], /* MONOGRAM FOR YIN */ + ["\u268C", "\u268C"], /* DIGRAM FOR GREATER YANG */ + ["\u268D", "\u268D"], /* DIGRAM FOR LESSER YIN */ + ["\u268E", "\u268E"], /* DIGRAM FOR LESSER YANG */ + ["\u268F", "\u268F"], /* DIGRAM FOR GREATER YIN */ + ["\u2690", "\u2690"], /* WHITE FLAG */ + ["\u2691", "\u2691"], /* BLACK FLAG */ + ["\u2692", "\u2692"], /* HAMMER AND PICK */ + ["\u2693", "\u2693"], /* ANCHOR */ + ["\u2694", "\u2694"], /* CROSSED SWORDS */ + ["\u2695", "\u2695"], /* STAFF OF AESCULAPIUS */ + ["\u2696", "\u2696"], /* SCALES */ + ["\u2697", "\u2697"], /* ALEMBIC */ + ["\u2698", "\u2698"], /* FLOWER */ + ["\u2699", "\u2699"], /* GEAR */ + ["\u269A", "\u269A"], /* STAFF OF HERMES */ + ["\u269B", "\u269B"], /* ATOM SYMBOL */ + ["\u269C", "\u269C"], /* FLEUR-DE-LIS */ + ["\u269D", "\u269D"], /* OUTLINED WHITE STAR */ + ["\u269E", "\u269E"], /* THREE LINES CONVERGING RIGHT */ + ["\u269F", "\u269F"], /* THREE LINES CONVERGING LEFT */ + ["\u26A0", "\u26A0"], /* WARNING SIGN */ + ["\u26A1", "\u26A1"], /* HIGH VOLTAGE SIGN */ + ["\u26A2", "\u26A2"], /* DOUBLED FEMALE SIGN */ + ["\u26A3", "\u26A3"], /* DOUBLED MALE SIGN */ + ["\u26A4", "\u26A4"], /* INTERLOCKED FEMALE AND MALE SIGN */ + ["\u26A5", "\u26A5"], /* MALE AND FEMALE SIGN */ + ["\u26A6", "\u26A6"], /* MALE WITH STROKE SIGN */ + ["\u26A7", "\u26A7"], /* MALE WITH STROKE AND MALE AND FEMALE SIGN */ + ["\u26A8", "\u26A8"], /* VERTICAL MALE WITH STROKE SIGN */ + ["\u26A9", "\u26A9"], /* HORIZONTAL MALE WITH STROKE SIGN */ + ["\u26AA", "\u26AA"], /* MEDIUM WHITE CIRCLE */ + ["\u26AB", "\u26AB"], /* MEDIUM BLACK CIRCLE */ + ["\u26AC", "\u26AC"], /* MEDIUM SMALL WHITE CIRCLE */ + ["\u26AD", "\u26AD"], /* MARRIAGE SYMBOL */ + ["\u26AE", "\u26AE"], /* DIVORCE SYMBOL */ + ["\u26AF", "\u26AF"], /* UNMARRIED PARTNERSHIP SYMBOL */ + ["\u26B0", "\u26B0"], /* COFFIN */ + ["\u26B1", "\u26B1"], /* FUNERAL URN */ + ["\u26B2", "\u26B2"], /* NEUTER */ + ["\u26B3", "\u26B3"], /* CERES */ + ["\u26B4", "\u26B4"], /* PALLAS */ + ["\u26B5", "\u26B5"], /* JUNO */ + ["\u26B6", "\u26B6"], /* VESTA */ + ["\u26B7", "\u26B7"], /* CHIRON */ + ["\u26B8", "\u26B8"], /* BLACK MOON LILITH */ + ["\u26B9", "\u26B9"], /* SEXTILE */ + ["\u26BA", "\u26BA"], /* SEMISEXTILE */ + ["\u26BB", "\u26BB"], /* QUINCUNX */ + ["\u26BC", "\u26BC"], /* SESQUIQUADRATE */ + ["\u26BD", "\u26BD"], /* SOCCER BALL */ + ["\u26BE", "\u26BE"], /* BASEBALL */ + ["\u26BF", "\u26BF"], /* SQUARED KEY */ + ["\u26C0", "\u26C0"], /* WHITE DRAUGHTS MAN */ + ["\u26C1", "\u26C1"], /* WHITE DRAUGHTS KING */ + ["\u26C2", "\u26C2"], /* BLACK DRAUGHTS MAN */ + ["\u26C3", "\u26C3"], /* BLACK DRAUGHTS KING */ + ["\u26C4", "\u26C4"], /* SNOWMAN WITHOUT SNOW */ + ["\u26C5", "\u26C5"], /* SUN BEHIND CLOUD */ + ["\u26C6", "\u26C6"], /* RAIN */ + ["\u26C7", "\u26C7"], /* BLACK SNOWMAN */ + ["\u26C8", "\u26C8"], /* THUNDER CLOUD AND RAIN */ + ["\u26C9", "\u26C9"], /* TURNED WHITE SHOGI PIECE */ + ["\u26CA", "\u26CA"], /* TURNED BLACK SHOGI PIECE */ + ["\u26CB", "\u26CB"], /* WHITE DIAMOND IN SQUARE */ + ["\u26CC", "\u26CC"], /* CROSSING LANES */ + ["\u26CD", "\u26CD"], /* DISABLED CAR */ + ["\u26CE", "\u26CE"], /* OPHIUCHUS */ + ["\u26CF", "\u26CF"], /* PICK */ + ["\u26D0", "\u26D0"], /* CAR SLIDING */ + ["\u26D1", "\u26D1"], /* HELMET WITH WHITE CROSS */ + ["\u26D2", "\u26D2"], /* CIRCLED CROSSING LANES */ + ["\u26D3", "\u26D3"], /* CHAINS */ + ["\u26D4", "\u26D4"], /* NO ENTRY */ + ["\u26D5", "\u26D5"], /* ALTERNATE ONE-WAY LEFT WAY TRAFFIC */ + ["\u26D6", "\u26D6"], /* BLACK TWO-WAY LEFT WAY TRAFFIC */ + ["\u26D7", "\u26D7"], /* WHITE TWO-WAY LEFT WAY TRAFFIC */ + ["\u26D8", "\u26D8"], /* BLACK LEFT LANE MERGE */ + ["\u26D9", "\u26D9"], /* WHITE LEFT LANE MERGE */ + ["\u26DA", "\u26DA"], /* DRIVE SLOW SIGN */ + ["\u26DB", "\u26DB"], /* HEAVY WHITE DOWN-POINTING TRIANGLE */ + ["\u26DC", "\u26DC"], /* LEFT CLOSED ENTRY */ + ["\u26DD", "\u26DD"], /* SQUARED SALTIRE */ + ["\u26DE", "\u26DE"], /* FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE */ + ["\u26DF", "\u26DF"], /* BLACK TRUCK */ + ["\u26E0", "\u26E0"], /* RESTRICTED LEFT ENTRY-1 */ + ["\u26E1", "\u26E1"], /* RESTRICTED LEFT ENTRY-2 */ + ["\u26E2", "\u26E2"], /* ASTRONOMICAL SYMBOL FOR URANUS */ + ["\u26E3", "\u26E3"], /* HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE */ + ["\u26E4", "\u26E4"], /* PENTAGRAM */ + ["\u26E5", "\u26E5"], /* RIGHT-HANDED INTERLACED PENTAGRAM */ + ["\u26E6", "\u26E6"], /* LEFT-HANDED INTERLACED PENTAGRAM */ + ["\u26E7", "\u26E7"], /* INVERTED PENTAGRAM */ + ["\u26E8", "\u26E8"], /* BLACK CROSS ON SHIELD */ + ["\u26E9", "\u26E9"], /* SHINTO SHRINE */ + ["\u26EA", "\u26EA"], /* CHURCH */ + ["\u26EB", "\u26EB"], /* CASTLE */ + ["\u26EC", "\u26EC"], /* HISTORIC SITE */ + ["\u26ED", "\u26ED"], /* GEAR WITHOUT HUB */ + ["\u26EE", "\u26EE"], /* GEAR WITH HANDLES */ + ["\u26EF", "\u26EF"], /* MAP SYMBOL FOR LIGHTHOUSE */ + ["\u26F0", "\u26F0"], /* MOUNTAIN */ + ["\u26F1", "\u26F1"], /* UMBRELLA ON GROUND */ + ["\u26F2", "\u26F2"], /* FOUNTAIN */ + ["\u26F3", "\u26F3"], /* FLAG IN HOLE */ + ["\u26F4", "\u26F4"], /* FERRY */ + ["\u26F5", "\u26F5"], /* SAILBOAT */ + ["\u26F6", "\u26F6"], /* SQUARE FOUR CORNERS */ + ["\u26F7", "\u26F7"], /* SKIER */ + ["\u26F8", "\u26F8"], /* ICE SKATE */ + ["\u26F9", "\u26F9"], /* PERSON WITH BALL */ + ["\u26FA", "\u26FA"], /* TENT */ + ["\u26FB", "\u26FB"], /* JAPANESE BANK SYMBOL */ + ["\u26FC", "\u26FC"], /* HEADSTONE GRAVEYARD SYMBOL */ + ["\u26FD", "\u26FD"], /* FUEL PUMP */ + ["\u26FE", "\u26FE"], /* CUP ON BLACK SQUARE */ + ["\u26FF", "\u26FF"], /* WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE */ + ["\u2700", "\u2700"], /* BLACK SAFETY SCISSORS */ + ["\u2701", "\u2701"], /* UPPER BLADE SCISSORS */ + ["\u2702", "\u2702"], /* BLACK SCISSORS */ + ["\u2703", "\u2703"], /* LOWER BLADE SCISSORS */ + ["\u2704", "\u2704"], /* WHITE SCISSORS */ + ["\u2705", "\u2705"], /* WHITE HEAVY CHECK MARK */ + ["\u2706", "\u2706"], /* TELEPHONE LOCATION SIGN */ + ["\u2707", "\u2707"], /* TAPE DRIVE */ + ["\u2708", "\u2708"], /* AIRPLANE */ + ["\u2709", "\u2709"], /* ENVELOPE */ + ["\u270A", "\u270A"], /* RAISED FIST */ + ["\u270B", "\u270B"], /* RAISED HAND */ + ["\u270C", "\u270C"], /* VICTORY HAND */ + ["\u270D", "\u270D"], /* WRITING HAND */ + ["\u270E", "\u270E"], /* LOWER RIGHT PENCIL */ + ["\u270F", "\u270F"], /* PENCIL */ + ["\u2710", "\u2710"], /* UPPER RIGHT PENCIL */ + ["\u2711", "\u2711"], /* WHITE NIB */ + ["\u2712", "\u2712"], /* BLACK NIB */ + ["\u2713", "\u2713"], /* CHECK MARK */ + ["\u2714", "\u2714"], /* HEAVY CHECK MARK */ + ["\u2715", "\u2715"], /* MULTIPLICATION X */ + ["\u2716", "\u2716"], /* HEAVY MULTIPLICATION X */ + ["\u2717", "\u2717"], /* BALLOT X */ + ["\u2718", "\u2718"], /* HEAVY BALLOT X */ + ["\u2719", "\u2719"], /* OUTLINED GREEK CROSS */ + ["\u271A", "\u271A"], /* HEAVY GREEK CROSS */ + ["\u271B", "\u271B"], /* OPEN CENTRE CROSS (OPEN CENTER CROSS) */ + ["\u271C", "\u271C"], /* HEAVY OPEN CENTRE CROSS (HEAVY OPEN CENTER CROSS) */ + ["\u271D", "\u271D"], /* LATIN CROSS */ + ["\u271E", "\u271E"], /* SHADOWED WHITE LATIN CROSS */ + ["\u271F", "\u271F"], /* OUTLINED LATIN CROSS */ + ["\u2720", "\u2720"], /* MALTESE CROSS */ + ["\u2721", "\u2721"], /* STAR OF DAVID */ + ["\u2722", "\u2722"], /* FOUR TEARDROP-SPOKED ASTERISK */ + ["\u2723", "\u2723"], /* FOUR BALLOON-SPOKED ASTERISK */ + ["\u2724", "\u2724"], /* HEAVY FOUR BALLOON-SPOKED ASTERISK */ + ["\u2725", "\u2725"], /* FOUR CLUB-SPOKED ASTERISK */ + ["\u2726", "\u2726"], /* BLACK FOUR POINTED STAR */ + ["\u2727", "\u2727"], /* WHITE FOUR POINTED STAR */ + ["\u2728", "\u2728"], /* SPARKLES */ + ["\u2729", "\u2729"], /* STRESS OUTLINED WHITE STAR */ + ["\u272A", "\u272A"], /* CIRCLED WHITE STAR */ + ["\u272B", "\u272B"], /* OPEN CENTRE BLACK STAR (OPEN CENTER BLACK STAR) */ + ["\u272C", "\u272C"], /* BLACK CENTRE WHITE STAR (BLACK CENTER WHITE STAR) */ + ["\u272D", "\u272D"], /* OUTLINED BLACK STAR */ + ["\u272E", "\u272E"], /* HEAVY OUTLINED BLACK STAR */ + ["\u272F", "\u272F"], /* PINWHEEL STAR */ + ["\u2730", "\u2730"], /* SHADOWED WHITE STAR */ + ["\u2731", "\u2731"], /* HEAVY ASTERISK */ + ["\u2732", "\u2732"], /* OPEN CENTRE ASTERISK (OPEN CENTER ASTERISK) */ + ["\u2733", "\u2733"], /* EIGHT SPOKED ASTERISK */ + ["\u2734", "\u2734"], /* EIGHT POINTED BLACK STAR */ + ["\u2735", "\u2735"], /* EIGHT POINTED PINWHEEL STAR */ + ["\u2736", "\u2736"], /* SIX POINTED BLACK STAR */ + ["\u2737", "\u2737"], /* EIGHT POINTED RECTILINEAR BLACK STAR */ + ["\u2738", "\u2738"], /* HEAVY EIGHT POINTED RECTILINEAR BLACK STAR */ + ["\u2739", "\u2739"], /* TWELVE POINTED BLACK STAR */ + ["\u273A", "\u273A"], /* SIXTEEN POINTED ASTERISK */ + ["\u273B", "\u273B"], /* TEARDROP-SPOKED ASTERISK */ + ["\u273C", "\u273C"], /* OPEN CENTRE TEARDROP-SPOKED ASTERISK (OPEN CENTER TEARDROP-SPOKED ASTERISK) */ + ["\u273D", "\u273D"], /* HEAVY TEARDROP-SPOKED ASTERISK */ + ["\u273E", "\u273E"], /* SIX PETALLED BLACK AND WHITE FLORETTE */ + ["\u273F", "\u273F"], /* BLACK FLORETTE */ + ["\u2740", "\u2740"], /* WHITE FLORETTE */ + ["\u2741", "\u2741"], /* EIGHT PETALLED OUTLINED BLACK FLORETTE */ + ["\u2742", "\u2742"], /* CIRCLED OPEN CENTRE EIGHT POINTED STAR (CIRCLED OPEN CENTER EIGHT POINTED STAR) */ + ["\u2743", "\u2743"], /* HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK */ + ["\u2744", "\u2744"], /* SNOWFLAKE */ + ["\u2745", "\u2745"], /* TIGHT TRIFOLIATE SNOWFLAKE */ + ["\u2746", "\u2746"], /* HEAVY CHEVRON SNOWFLAKE */ + ["\u2747", "\u2747"], /* SPARKLE */ + ["\u2748", "\u2748"], /* HEAVY SPARKLE */ + ["\u2749", "\u2749"], /* BALLOON-SPOKED ASTERISK */ + ["\u274A", "\u274A"], /* EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */ + ["\u274B", "\u274B"], /* HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */ + ["\u274C", "\u274C"], /* CROSS MARK */ + ["\u274D", "\u274D"], /* SHADOWED WHITE CIRCLE */ + ["\u274E", "\u274E"], /* NEGATIVE SQUARED CROSS MARK */ + ["\u274F", "\u274F"], /* LOWER RIGHT DROP-SHADOWED WHITE SQUARE */ + ["\u2750", "\u2750"], /* UPPER RIGHT DROP-SHADOWED WHITE SQUARE */ + ["\u2751", "\u2751"], /* LOWER RIGHT SHADOWED WHITE SQUARE */ + ["\u2752", "\u2752"], /* UPPER RIGHT SHADOWED WHITE SQUARE */ + ["\u2753", "\u2753"], /* BLACK QUESTION MARK ORNAMENT */ + ["\u2754", "\u2754"], /* WHITE QUESTION MARK ORNAMENT */ + ["\u2755", "\u2755"], /* WHITE EXCLAMATION MARK ORNAMENT */ + ["\u2756", "\u2756"], /* BLACK DIAMOND MINUS WHITE X */ + ["\u2757", "\u2757"], /* HEAVY EXCLAMATION MARK SYMBOL */ + ["\u2758", "\u2758"], /* LIGHT VERTICAL BAR */ + ["\u2759", "\u2759"], /* MEDIUM VERTICAL BAR */ + ["\u275A", "\u275A"], /* HEAVY VERTICAL BAR */ + ["\u275B", "\u275B"], /* HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT */ + ["\u275C", "\u275C"], /* HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT */ + ["\u275D", "\u275D"], /* HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT */ + ["\u275E", "\u275E"], /* HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT */ + ["\u275F", "\u275F"], /* HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT */ + ["\u2760", "\u2760"], /* HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT */ + ["\u2761", "\u2761"], /* CURVED STEM PARAGRAPH SIGN ORNAMENT */ + ["\u2762", "\u2762"], /* HEAVY EXCLAMATION MARK ORNAMENT */ + ["\u2763", "\u2763"], /* HEAVY HEART EXCLAMATION MARK ORNAMENT */ + ["\u2764", "\u2764"], /* HEAVY BLACK HEART */ + ["\u2765", "\u2765"], /* ROTATED HEAVY BLACK HEART BULLET */ + ["\u2766", "\u2766"], /* FLORAL HEART */ + ["\u2767", "\u2767"], /* ROTATED FLORAL HEART BULLET */ + ["\u2768", "\u2768"], /* MEDIUM LEFT PARENTHESIS ORNAMENT */ + ["\u2769", "\u2769"], /* MEDIUM RIGHT PARENTHESIS ORNAMENT */ + ["\u276A", "\u276A"], /* MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT */ + ["\u276B", "\u276B"], /* MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT */ + ["\u276C", "\u276C"], /* MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT */ + ["\u276D", "\u276D"], /* MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT */ + ["\u276E", "\u276E"], /* HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT */ + ["\u276F", "\u276F"], /* HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT */ + ["\u2770", "\u2770"], /* HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT */ + ["\u2771", "\u2771"], /* HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT */ + ["\u2772", "\u2772"], /* LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT */ + ["\u2773", "\u2773"], /* LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT */ + ["\u2774", "\u2774"], /* MEDIUM LEFT CURLY BRACKET ORNAMENT */ + ["\u2775", "\u2775"], /* MEDIUM RIGHT CURLY BRACKET ORNAMENT */ + ["\u2776", "\u2776"], /* DINGBAT NEGATIVE CIRCLED DIGIT ONE (INVERSE CIRCLED DIGIT ONE) */ + ["\u2777", "\u2777"], /* DINGBAT NEGATIVE CIRCLED DIGIT TWO (INVERSE CIRCLED DIGIT TWO) */ + ["\u2778", "\u2778"], /* DINGBAT NEGATIVE CIRCLED DIGIT THREE (INVERSE CIRCLED DIGIT THREE) */ + ["\u2779", "\u2779"], /* DINGBAT NEGATIVE CIRCLED DIGIT FOUR (INVERSE CIRCLED DIGIT FOUR) */ + ["\u277A", "\u277A"], /* DINGBAT NEGATIVE CIRCLED DIGIT FIVE (INVERSE CIRCLED DIGIT FIVE) */ + ["\u277B", "\u277B"], /* DINGBAT NEGATIVE CIRCLED DIGIT SIX (INVERSE CIRCLED DIGIT SIX) */ + ["\u277C", "\u277C"], /* DINGBAT NEGATIVE CIRCLED DIGIT SEVEN (INVERSE CIRCLED DIGIT SEVEN) */ + ["\u277D", "\u277D"], /* DINGBAT NEGATIVE CIRCLED DIGIT EIGHT (INVERSE CIRCLED DIGIT EIGHT) */ + ["\u277E", "\u277E"], /* DINGBAT NEGATIVE CIRCLED DIGIT NINE (INVERSE CIRCLED DIGIT NINE) */ + ["\u277F", "\u277F"], /* DINGBAT NEGATIVE CIRCLED NUMBER TEN (INVERSE CIRCLED NUMBER TEN) */ + ["\u2780", "\u2780"], /* DINGBAT CIRCLED SANS-SERIF DIGIT ONE (CIRCLED SANS-SERIF DIGIT ONE) */ + ["\u2781", "\u2781"], /* DINGBAT CIRCLED SANS-SERIF DIGIT TWO (CIRCLED SANS-SERIF DIGIT TWO) */ + ["\u2782", "\u2782"], /* DINGBAT CIRCLED SANS-SERIF DIGIT THREE (CIRCLED SANS-SERIF DIGIT THREE) */ + ["\u2783", "\u2783"], /* DINGBAT CIRCLED SANS-SERIF DIGIT FOUR (CIRCLED SANS-SERIF DIGIT FOUR) */ + ["\u2784", "\u2784"], /* DINGBAT CIRCLED SANS-SERIF DIGIT FIVE (CIRCLED SANS-SERIF DIGIT FIVE) */ + ["\u2785", "\u2785"], /* DINGBAT CIRCLED SANS-SERIF DIGIT SIX (CIRCLED SANS-SERIF DIGIT SIX) */ + ["\u2786", "\u2786"], /* DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN (CIRCLED SANS-SERIF DIGIT SEVEN) */ + ["\u2787", "\u2787"], /* DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT (CIRCLED SANS-SERIF DIGIT EIGHT) */ + ["\u2788", "\u2788"], /* DINGBAT CIRCLED SANS-SERIF DIGIT NINE (CIRCLED SANS-SERIF DIGIT NINE) */ + ["\u2789", "\u2789"], /* DINGBAT CIRCLED SANS-SERIF NUMBER TEN (CIRCLED SANS-SERIF NUMBER TEN) */ + ["\u278A", "\u278A"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE (INVERSE CIRCLED SANS-SERIF DIGIT ONE) */ + ["\u278B", "\u278B"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO (INVERSE CIRCLED SANS-SERIF DIGIT TWO) */ + ["\u278C", "\u278C"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE (INVERSE CIRCLED SANS-SERIF DIGIT THREE) */ + ["\u278D", "\u278D"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR (INVERSE CIRCLED SANS-SERIF DIGIT FOUR) */ + ["\u278E", "\u278E"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE (INVERSE CIRCLED SANS-SERIF DIGIT FIVE) */ + ["\u278F", "\u278F"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX (INVERSE CIRCLED SANS-SERIF DIGIT SIX) */ + ["\u2790", "\u2790"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN (INVERSE CIRCLED SANS-SERIF DIGIT SEVEN) */ + ["\u2791", "\u2791"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT (INVERSE CIRCLED SANS-SERIF DIGIT EIGHT) */ + ["\u2792", "\u2792"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE (INVERSE CIRCLED SANS-SERIF DIGIT NINE) */ + ["\u2793", "\u2793"], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN (INVERSE CIRCLED SANS-SERIF NUMBER TEN) */ + ["\u2794", "\u2794"], /* HEAVY WIDE-HEADED RIGHTWARDS ARROW (HEAVY WIDE-HEADED RIGHT ARROW) */ + ["\u2795", "\u2795"], /* HEAVY PLUS SIGN */ + ["\u2796", "\u2796"], /* HEAVY MINUS SIGN */ + ["\u2797", "\u2797"], /* HEAVY DIVISION SIGN */ + ["\u2798", "\u2798"], /* HEAVY SOUTH EAST ARROW (HEAVY LOWER RIGHT ARROW) */ + ["\u2799", "\u2799"], /* HEAVY RIGHTWARDS ARROW (HEAVY RIGHT ARROW) */ + ["\u279A", "\u279A"], /* HEAVY NORTH EAST ARROW (HEAVY UPPER RIGHT ARROW) */ + ["\u279B", "\u279B"], /* DRAFTING POINT RIGHTWARDS ARROW (DRAFTING POINT RIGHT ARROW) */ + ["\u279C", "\u279C"], /* HEAVY ROUND-TIPPED RIGHTWARDS ARROW (HEAVY ROUND-TIPPED RIGHT ARROW) */ + ["\u279D", "\u279D"], /* TRIANGLE-HEADED RIGHTWARDS ARROW (TRIANGLE-HEADED RIGHT ARROW) */ + ["\u279E", "\u279E"], /* HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW (HEAVY TRIANGLE-HEADED RIGHT ARROW) */ + ["\u279F", "\u279F"], /* DASHED TRIANGLE-HEADED RIGHTWARDS ARROW (DASHED TRIANGLE-HEADED RIGHT ARROW) */ + ["\u27A0", "\u27A0"], /* HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW (HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW) */ + ["\u27A1", "\u27A1"], /* BLACK RIGHTWARDS ARROW (BLACK RIGHT ARROW) */ + ["\u27A2", "\u27A2"], /* THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD (THREE-D TOP-LIGHTED RIGHT ARROWHEAD) */ + ["\u27A3", "\u27A3"], /* THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD (THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD) */ + ["\u27A4", "\u27A4"], /* BLACK RIGHTWARDS ARROWHEAD (BLACK RIGHT ARROWHEAD) */ + ["\u27A5", "\u27A5"], /* HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW (HEAVY BLACK CURVED DOWN AND RIGHT ARROW) */ + ["\u27A6", "\u27A6"], /* HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW (HEAVY BLACK CURVED UP AND RIGHT ARROW) */ + ["\u27A7", "\u27A7"], /* SQUAT BLACK RIGHTWARDS ARROW (SQUAT BLACK RIGHT ARROW) */ + ["\u27A8", "\u27A8"], /* HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW (HEAVY CONCAVE-POINTED BLACK RIGHT ARROW) */ + ["\u27A9", "\u27A9"], /* RIGHT-SHADED WHITE RIGHTWARDS ARROW (RIGHT-SHADED WHITE RIGHT ARROW) */ + ["\u27AA", "\u27AA"], /* LEFT-SHADED WHITE RIGHTWARDS ARROW (LEFT-SHADED WHITE RIGHT ARROW) */ + ["\u27AB", "\u27AB"], /* BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW (BACK-TILTED SHADOWED WHITE RIGHT ARROW) */ + ["\u27AC", "\u27AC"], /* FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW (FRONT-TILTED SHADOWED WHITE RIGHT ARROW) */ + ["\u27AD", "\u27AD"], /* HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + ["\u27AE", "\u27AE"], /* HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + ["\u27AF", "\u27AF"], /* NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + ["\u27B0", "\u27B0"], /* CURLY LOOP */ + ["\u27B1", "\u27B1"], /* NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + ["\u27B2", "\u27B2"], /* CIRCLED HEAVY WHITE RIGHTWARDS ARROW (CIRCLED HEAVY WHITE RIGHT ARROW) */ + ["\u27B3", "\u27B3"], /* WHITE-FEATHERED RIGHTWARDS ARROW (WHITE-FEATHERED RIGHT ARROW) */ + ["\u27B4", "\u27B4"], /* BLACK-FEATHERED SOUTH EAST ARROW (BLACK-FEATHERED LOWER RIGHT ARROW) */ + ["\u27B5", "\u27B5"], /* BLACK-FEATHERED RIGHTWARDS ARROW (BLACK-FEATHERED RIGHT ARROW) */ + ["\u27B6", "\u27B6"], /* BLACK-FEATHERED NORTH EAST ARROW (BLACK-FEATHERED UPPER RIGHT ARROW) */ + ["\u27B7", "\u27B7"], /* HEAVY BLACK-FEATHERED SOUTH EAST ARROW (HEAVY BLACK-FEATHERED LOWER RIGHT ARROW) */ + ["\u27B8", "\u27B8"], /* HEAVY BLACK-FEATHERED RIGHTWARDS ARROW (HEAVY BLACK-FEATHERED RIGHT ARROW) */ + ["\u27B9", "\u27B9"], /* HEAVY BLACK-FEATHERED NORTH EAST ARROW (HEAVY BLACK-FEATHERED UPPER RIGHT ARROW) */ + ["\u27BA", "\u27BA"], /* TEARDROP-BARBED RIGHTWARDS ARROW (TEARDROP-BARBED RIGHT ARROW) */ + ["\u27BB", "\u27BB"], /* HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW (HEAVY TEARDROP-SHANKED RIGHT ARROW) */ + ["\u27BC", "\u27BC"], /* WEDGE-TAILED RIGHTWARDS ARROW (WEDGE-TAILED RIGHT ARROW) */ + ["\u27BD", "\u27BD"], /* HEAVY WEDGE-TAILED RIGHTWARDS ARROW (HEAVY WEDGE-TAILED RIGHT ARROW) */ + ["\u27BE", "\u27BE"], /* OPEN-OUTLINED RIGHTWARDS ARROW (OPEN-OUTLINED RIGHT ARROW) */ + ["\u27BF", "\u27BF"], /* DOUBLE CURLY LOOP */ + ["\u27C0", "\u27C0"], /* THREE DIMENSIONAL ANGLE */ + ["\u27C1", "\u27C1"], /* WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE */ + ["\u27C2", "\u27C2"], /* PERPENDICULAR */ + ["\u27C3", "\u27C3"], /* OPEN SUBSET */ + ["\u27C4", "\u27C4"], /* OPEN SUPERSET */ + ["\u27C5", "\u27C5"], /* LEFT S-SHAPED BAG DELIMITER */ + ["\u27C6", "\u27C6"], /* RIGHT S-SHAPED BAG DELIMITER */ + ["\u27C7", "\u27C7"], /* OR WITH DOT INSIDE */ + ["\u27C8", "\u27C8"], /* REVERSE SOLIDUS PRECEDING SUBSET */ + ["\u27C9", "\u27C9"], /* SUPERSET PRECEDING SOLIDUS */ + ["\u27CA", "\u27CA"], /* VERTICAL BAR WITH HORIZONTAL STROKE */ + ["\u27CB", "\u27CB"], /* MATHEMATICAL RISING DIAGONAL */ + ["\u27CC", "\u27CC"], /* LONG DIVISION */ + ["\u27CD", "\u27CD"], /* MATHEMATICAL FALLING DIAGONAL */ + ["\u27CE", "\u27CE"], /* SQUARED LOGICAL AND */ + ["\u27CF", "\u27CF"], /* SQUARED LOGICAL OR */ + ["\u27D0", "\u27D0"], /* WHITE DIAMOND WITH CENTRED DOT */ + ["\u27D1", "\u27D1"], /* AND WITH DOT */ + ["\u27D2", "\u27D2"], /* ELEMENT OF OPENING UPWARDS */ + ["\u27D3", "\u27D3"], /* LOWER RIGHT CORNER WITH DOT */ + ["\u27D4", "\u27D4"], /* UPPER LEFT CORNER WITH DOT */ + ["\u27D5", "\u27D5"], /* LEFT OUTER JOIN */ + ["\u27D6", "\u27D6"], /* RIGHT OUTER JOIN */ + ["\u27D7", "\u27D7"], /* FULL OUTER JOIN */ + ["\u27D8", "\u27D8"], /* LARGE UP TACK */ + ["\u27D9", "\u27D9"], /* LARGE DOWN TACK */ + ["\u27DA", "\u27DA"], /* LEFT AND RIGHT DOUBLE TURNSTILE */ + ["\u27DB", "\u27DB"], /* LEFT AND RIGHT TACK */ + ["\u27DC", "\u27DC"], /* LEFT MULTIMAP */ + ["\u27DD", "\u27DD"], /* LONG RIGHT TACK */ + ["\u27DE", "\u27DE"], /* LONG LEFT TACK */ + ["\u27DF", "\u27DF"], /* UP TACK WITH CIRCLE ABOVE */ + ["\u27E0", "\u27E0"], /* LOZENGE DIVIDED BY HORIZONTAL RULE */ + ["\u27E1", "\u27E1"], /* WHITE CONCAVE-SIDED DIAMOND */ + ["\u27E2", "\u27E2"], /* WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK */ + ["\u27E3", "\u27E3"], /* WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK */ + ["\u27E4", "\u27E4"], /* WHITE SQUARE WITH LEFTWARDS TICK */ + ["\u27E5", "\u27E5"], /* WHITE SQUARE WITH RIGHTWARDS TICK */ + ["\u27E6", "\u27E6"], /* MATHEMATICAL LEFT WHITE SQUARE BRACKET */ + ["\u27E7", "\u27E7"], /* MATHEMATICAL RIGHT WHITE SQUARE BRACKET */ + ["\u27E8", "\u27E8"], /* MATHEMATICAL LEFT ANGLE BRACKET */ + ["\u27E9", "\u27E9"], /* MATHEMATICAL RIGHT ANGLE BRACKET */ + ["\u27EA", "\u27EA"], /* MATHEMATICAL LEFT DOUBLE ANGLE BRACKET */ + ["\u27EB", "\u27EB"], /* MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET */ + ["\u27EC", "\u27EC"], /* MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET */ + ["\u27ED", "\u27ED"], /* MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET */ + ["\u27EE", "\u27EE"], /* MATHEMATICAL LEFT FLATTENED PARENTHESIS */ + ["\u27EF", "\u27EF"], /* MATHEMATICAL RIGHT FLATTENED PARENTHESIS */ + ["\u27F0", "\u27F0"], /* UPWARDS QUADRUPLE ARROW */ + ["\u27F1", "\u27F1"], /* DOWNWARDS QUADRUPLE ARROW */ + ["\u27F2", "\u27F2"], /* ANTICLOCKWISE GAPPED CIRCLE ARROW */ + ["\u27F3", "\u27F3"], /* CLOCKWISE GAPPED CIRCLE ARROW */ + ["\u27F4", "\u27F4"], /* RIGHT ARROW WITH CIRCLED PLUS */ + ["\u27F5", "\u27F5"], /* LONG LEFTWARDS ARROW */ + ["\u27F6", "\u27F6"], /* LONG RIGHTWARDS ARROW */ + ["\u27F7", "\u27F7"], /* LONG LEFT RIGHT ARROW */ + ["\u27F8", "\u27F8"], /* LONG LEFTWARDS DOUBLE ARROW */ + ["\u27F9", "\u27F9"], /* LONG RIGHTWARDS DOUBLE ARROW */ + ["\u27FA", "\u27FA"], /* LONG LEFT RIGHT DOUBLE ARROW */ + ["\u27FB", "\u27FB"], /* LONG LEFTWARDS ARROW FROM BAR */ + ["\u27FC", "\u27FC"], /* LONG RIGHTWARDS ARROW FROM BAR */ + ["\u27FD", "\u27FD"], /* LONG LEFTWARDS DOUBLE ARROW FROM BAR */ + ["\u27FE", "\u27FE"], /* LONG RIGHTWARDS DOUBLE ARROW FROM BAR */ + ["\u27FF", "\u27FF"], /* LONG RIGHTWARDS SQUIGGLE ARROW */ + ["\u2800", "\u2800"], /* BRAILLE PATTERN BLANK */ + ["\u2801", "\u2801"], /* BRAILLE PATTERN DOTS-1 */ + ["\u2802", "\u2802"], /* BRAILLE PATTERN DOTS-2 */ + ["\u2803", "\u2803"], /* BRAILLE PATTERN DOTS-12 */ + ["\u2804", "\u2804"], /* BRAILLE PATTERN DOTS-3 */ + ["\u2805", "\u2805"], /* BRAILLE PATTERN DOTS-13 */ + ["\u2806", "\u2806"], /* BRAILLE PATTERN DOTS-23 */ + ["\u2807", "\u2807"], /* BRAILLE PATTERN DOTS-123 */ + ["\u2808", "\u2808"], /* BRAILLE PATTERN DOTS-4 */ + ["\u2809", "\u2809"], /* BRAILLE PATTERN DOTS-14 */ + ["\u280A", "\u280A"], /* BRAILLE PATTERN DOTS-24 */ + ["\u280B", "\u280B"], /* BRAILLE PATTERN DOTS-124 */ + ["\u280C", "\u280C"], /* BRAILLE PATTERN DOTS-34 */ + ["\u280D", "\u280D"], /* BRAILLE PATTERN DOTS-134 */ + ["\u280E", "\u280E"], /* BRAILLE PATTERN DOTS-234 */ + ["\u280F", "\u280F"], /* BRAILLE PATTERN DOTS-1234 */ + ["\u2810", "\u2810"], /* BRAILLE PATTERN DOTS-5 */ + ["\u2811", "\u2811"], /* BRAILLE PATTERN DOTS-15 */ + ["\u2812", "\u2812"], /* BRAILLE PATTERN DOTS-25 */ + ["\u2813", "\u2813"], /* BRAILLE PATTERN DOTS-125 */ + ["\u2814", "\u2814"], /* BRAILLE PATTERN DOTS-35 */ + ["\u2815", "\u2815"], /* BRAILLE PATTERN DOTS-135 */ + ["\u2816", "\u2816"], /* BRAILLE PATTERN DOTS-235 */ + ["\u2817", "\u2817"], /* BRAILLE PATTERN DOTS-1235 */ + ["\u2818", "\u2818"], /* BRAILLE PATTERN DOTS-45 */ + ["\u2819", "\u2819"], /* BRAILLE PATTERN DOTS-145 */ + ["\u281A", "\u281A"], /* BRAILLE PATTERN DOTS-245 */ + ["\u281B", "\u281B"], /* BRAILLE PATTERN DOTS-1245 */ + ["\u281C", "\u281C"], /* BRAILLE PATTERN DOTS-345 */ + ["\u281D", "\u281D"], /* BRAILLE PATTERN DOTS-1345 */ + ["\u281E", "\u281E"], /* BRAILLE PATTERN DOTS-2345 */ + ["\u281F", "\u281F"], /* BRAILLE PATTERN DOTS-12345 */ + ["\u2820", "\u2820"], /* BRAILLE PATTERN DOTS-6 */ + ["\u2821", "\u2821"], /* BRAILLE PATTERN DOTS-16 */ + ["\u2822", "\u2822"], /* BRAILLE PATTERN DOTS-26 */ + ["\u2823", "\u2823"], /* BRAILLE PATTERN DOTS-126 */ + ["\u2824", "\u2824"], /* BRAILLE PATTERN DOTS-36 */ + ["\u2825", "\u2825"], /* BRAILLE PATTERN DOTS-136 */ + ["\u2826", "\u2826"], /* BRAILLE PATTERN DOTS-236 */ + ["\u2827", "\u2827"], /* BRAILLE PATTERN DOTS-1236 */ + ["\u2828", "\u2828"], /* BRAILLE PATTERN DOTS-46 */ + ["\u2829", "\u2829"], /* BRAILLE PATTERN DOTS-146 */ + ["\u282A", "\u282A"], /* BRAILLE PATTERN DOTS-246 */ + ["\u282B", "\u282B"], /* BRAILLE PATTERN DOTS-1246 */ + ["\u282C", "\u282C"], /* BRAILLE PATTERN DOTS-346 */ + ["\u282D", "\u282D"], /* BRAILLE PATTERN DOTS-1346 */ + ["\u282E", "\u282E"], /* BRAILLE PATTERN DOTS-2346 */ + ["\u282F", "\u282F"], /* BRAILLE PATTERN DOTS-12346 */ + ["\u2830", "\u2830"], /* BRAILLE PATTERN DOTS-56 */ + ["\u2831", "\u2831"], /* BRAILLE PATTERN DOTS-156 */ + ["\u2832", "\u2832"], /* BRAILLE PATTERN DOTS-256 */ + ["\u2833", "\u2833"], /* BRAILLE PATTERN DOTS-1256 */ + ["\u2834", "\u2834"], /* BRAILLE PATTERN DOTS-356 */ + ["\u2835", "\u2835"], /* BRAILLE PATTERN DOTS-1356 */ + ["\u2836", "\u2836"], /* BRAILLE PATTERN DOTS-2356 */ + ["\u2837", "\u2837"], /* BRAILLE PATTERN DOTS-12356 */ + ["\u2838", "\u2838"], /* BRAILLE PATTERN DOTS-456 */ + ["\u2839", "\u2839"], /* BRAILLE PATTERN DOTS-1456 */ + ["\u283A", "\u283A"], /* BRAILLE PATTERN DOTS-2456 */ + ["\u283B", "\u283B"], /* BRAILLE PATTERN DOTS-12456 */ + ["\u283C", "\u283C"], /* BRAILLE PATTERN DOTS-3456 */ + ["\u283D", "\u283D"], /* BRAILLE PATTERN DOTS-13456 */ + ["\u283E", "\u283E"], /* BRAILLE PATTERN DOTS-23456 */ + ["\u283F", "\u283F"], /* BRAILLE PATTERN DOTS-123456 */ + ["\u2840", "\u2840"], /* BRAILLE PATTERN DOTS-7 */ + ["\u2841", "\u2841"], /* BRAILLE PATTERN DOTS-17 */ + ["\u2842", "\u2842"], /* BRAILLE PATTERN DOTS-27 */ + ["\u2843", "\u2843"], /* BRAILLE PATTERN DOTS-127 */ + ["\u2844", "\u2844"], /* BRAILLE PATTERN DOTS-37 */ + ["\u2845", "\u2845"], /* BRAILLE PATTERN DOTS-137 */ + ["\u2846", "\u2846"], /* BRAILLE PATTERN DOTS-237 */ + ["\u2847", "\u2847"], /* BRAILLE PATTERN DOTS-1237 */ + ["\u2848", "\u2848"], /* BRAILLE PATTERN DOTS-47 */ + ["\u2849", "\u2849"], /* BRAILLE PATTERN DOTS-147 */ + ["\u284A", "\u284A"], /* BRAILLE PATTERN DOTS-247 */ + ["\u284B", "\u284B"], /* BRAILLE PATTERN DOTS-1247 */ + ["\u284C", "\u284C"], /* BRAILLE PATTERN DOTS-347 */ + ["\u284D", "\u284D"], /* BRAILLE PATTERN DOTS-1347 */ + ["\u284E", "\u284E"], /* BRAILLE PATTERN DOTS-2347 */ + ["\u284F", "\u284F"], /* BRAILLE PATTERN DOTS-12347 */ + ["\u2850", "\u2850"], /* BRAILLE PATTERN DOTS-57 */ + ["\u2851", "\u2851"], /* BRAILLE PATTERN DOTS-157 */ + ["\u2852", "\u2852"], /* BRAILLE PATTERN DOTS-257 */ + ["\u2853", "\u2853"], /* BRAILLE PATTERN DOTS-1257 */ + ["\u2854", "\u2854"], /* BRAILLE PATTERN DOTS-357 */ + ["\u2855", "\u2855"], /* BRAILLE PATTERN DOTS-1357 */ + ["\u2856", "\u2856"], /* BRAILLE PATTERN DOTS-2357 */ + ["\u2857", "\u2857"], /* BRAILLE PATTERN DOTS-12357 */ + ["\u2858", "\u2858"], /* BRAILLE PATTERN DOTS-457 */ + ["\u2859", "\u2859"], /* BRAILLE PATTERN DOTS-1457 */ + ["\u285A", "\u285A"], /* BRAILLE PATTERN DOTS-2457 */ + ["\u285B", "\u285B"], /* BRAILLE PATTERN DOTS-12457 */ + ["\u285C", "\u285C"], /* BRAILLE PATTERN DOTS-3457 */ + ["\u285D", "\u285D"], /* BRAILLE PATTERN DOTS-13457 */ + ["\u285E", "\u285E"], /* BRAILLE PATTERN DOTS-23457 */ + ["\u285F", "\u285F"], /* BRAILLE PATTERN DOTS-123457 */ + ["\u2860", "\u2860"], /* BRAILLE PATTERN DOTS-67 */ + ["\u2861", "\u2861"], /* BRAILLE PATTERN DOTS-167 */ + ["\u2862", "\u2862"], /* BRAILLE PATTERN DOTS-267 */ + ["\u2863", "\u2863"], /* BRAILLE PATTERN DOTS-1267 */ + ["\u2864", "\u2864"], /* BRAILLE PATTERN DOTS-367 */ + ["\u2865", "\u2865"], /* BRAILLE PATTERN DOTS-1367 */ + ["\u2866", "\u2866"], /* BRAILLE PATTERN DOTS-2367 */ + ["\u2867", "\u2867"], /* BRAILLE PATTERN DOTS-12367 */ + ["\u2868", "\u2868"], /* BRAILLE PATTERN DOTS-467 */ + ["\u2869", "\u2869"], /* BRAILLE PATTERN DOTS-1467 */ + ["\u286A", "\u286A"], /* BRAILLE PATTERN DOTS-2467 */ + ["\u286B", "\u286B"], /* BRAILLE PATTERN DOTS-12467 */ + ["\u286C", "\u286C"], /* BRAILLE PATTERN DOTS-3467 */ + ["\u286D", "\u286D"], /* BRAILLE PATTERN DOTS-13467 */ + ["\u286E", "\u286E"], /* BRAILLE PATTERN DOTS-23467 */ + ["\u286F", "\u286F"], /* BRAILLE PATTERN DOTS-123467 */ + ["\u2870", "\u2870"], /* BRAILLE PATTERN DOTS-567 */ + ["\u2871", "\u2871"], /* BRAILLE PATTERN DOTS-1567 */ + ["\u2872", "\u2872"], /* BRAILLE PATTERN DOTS-2567 */ + ["\u2873", "\u2873"], /* BRAILLE PATTERN DOTS-12567 */ + ["\u2874", "\u2874"], /* BRAILLE PATTERN DOTS-3567 */ + ["\u2875", "\u2875"], /* BRAILLE PATTERN DOTS-13567 */ + ["\u2876", "\u2876"], /* BRAILLE PATTERN DOTS-23567 */ + ["\u2877", "\u2877"], /* BRAILLE PATTERN DOTS-123567 */ + ["\u2878", "\u2878"], /* BRAILLE PATTERN DOTS-4567 */ + ["\u2879", "\u2879"], /* BRAILLE PATTERN DOTS-14567 */ + ["\u287A", "\u287A"], /* BRAILLE PATTERN DOTS-24567 */ + ["\u287B", "\u287B"], /* BRAILLE PATTERN DOTS-124567 */ + ["\u287C", "\u287C"], /* BRAILLE PATTERN DOTS-34567 */ + ["\u287D", "\u287D"], /* BRAILLE PATTERN DOTS-134567 */ + ["\u287E", "\u287E"], /* BRAILLE PATTERN DOTS-234567 */ + ["\u287F", "\u287F"], /* BRAILLE PATTERN DOTS-1234567 */ + ["\u2880", "\u2880"], /* BRAILLE PATTERN DOTS-8 */ + ["\u2881", "\u2881"], /* BRAILLE PATTERN DOTS-18 */ + ["\u2882", "\u2882"], /* BRAILLE PATTERN DOTS-28 */ + ["\u2883", "\u2883"], /* BRAILLE PATTERN DOTS-128 */ + ["\u2884", "\u2884"], /* BRAILLE PATTERN DOTS-38 */ + ["\u2885", "\u2885"], /* BRAILLE PATTERN DOTS-138 */ + ["\u2886", "\u2886"], /* BRAILLE PATTERN DOTS-238 */ + ["\u2887", "\u2887"], /* BRAILLE PATTERN DOTS-1238 */ + ["\u2888", "\u2888"], /* BRAILLE PATTERN DOTS-48 */ + ["\u2889", "\u2889"], /* BRAILLE PATTERN DOTS-148 */ + ["\u288A", "\u288A"], /* BRAILLE PATTERN DOTS-248 */ + ["\u288B", "\u288B"], /* BRAILLE PATTERN DOTS-1248 */ + ["\u288C", "\u288C"], /* BRAILLE PATTERN DOTS-348 */ + ["\u288D", "\u288D"], /* BRAILLE PATTERN DOTS-1348 */ + ["\u288E", "\u288E"], /* BRAILLE PATTERN DOTS-2348 */ + ["\u288F", "\u288F"], /* BRAILLE PATTERN DOTS-12348 */ + ["\u2890", "\u2890"], /* BRAILLE PATTERN DOTS-58 */ + ["\u2891", "\u2891"], /* BRAILLE PATTERN DOTS-158 */ + ["\u2892", "\u2892"], /* BRAILLE PATTERN DOTS-258 */ + ["\u2893", "\u2893"], /* BRAILLE PATTERN DOTS-1258 */ + ["\u2894", "\u2894"], /* BRAILLE PATTERN DOTS-358 */ + ["\u2895", "\u2895"], /* BRAILLE PATTERN DOTS-1358 */ + ["\u2896", "\u2896"], /* BRAILLE PATTERN DOTS-2358 */ + ["\u2897", "\u2897"], /* BRAILLE PATTERN DOTS-12358 */ + ["\u2898", "\u2898"], /* BRAILLE PATTERN DOTS-458 */ + ["\u2899", "\u2899"], /* BRAILLE PATTERN DOTS-1458 */ + ["\u289A", "\u289A"], /* BRAILLE PATTERN DOTS-2458 */ + ["\u289B", "\u289B"], /* BRAILLE PATTERN DOTS-12458 */ + ["\u289C", "\u289C"], /* BRAILLE PATTERN DOTS-3458 */ + ["\u289D", "\u289D"], /* BRAILLE PATTERN DOTS-13458 */ + ["\u289E", "\u289E"], /* BRAILLE PATTERN DOTS-23458 */ + ["\u289F", "\u289F"], /* BRAILLE PATTERN DOTS-123458 */ + ["\u28A0", "\u28A0"], /* BRAILLE PATTERN DOTS-68 */ + ["\u28A1", "\u28A1"], /* BRAILLE PATTERN DOTS-168 */ + ["\u28A2", "\u28A2"], /* BRAILLE PATTERN DOTS-268 */ + ["\u28A3", "\u28A3"], /* BRAILLE PATTERN DOTS-1268 */ + ["\u28A4", "\u28A4"], /* BRAILLE PATTERN DOTS-368 */ + ["\u28A5", "\u28A5"], /* BRAILLE PATTERN DOTS-1368 */ + ["\u28A6", "\u28A6"], /* BRAILLE PATTERN DOTS-2368 */ + ["\u28A7", "\u28A7"], /* BRAILLE PATTERN DOTS-12368 */ + ["\u28A8", "\u28A8"], /* BRAILLE PATTERN DOTS-468 */ + ["\u28A9", "\u28A9"], /* BRAILLE PATTERN DOTS-1468 */ + ["\u28AA", "\u28AA"], /* BRAILLE PATTERN DOTS-2468 */ + ["\u28AB", "\u28AB"], /* BRAILLE PATTERN DOTS-12468 */ + ["\u28AC", "\u28AC"], /* BRAILLE PATTERN DOTS-3468 */ + ["\u28AD", "\u28AD"], /* BRAILLE PATTERN DOTS-13468 */ + ["\u28AE", "\u28AE"], /* BRAILLE PATTERN DOTS-23468 */ + ["\u28AF", "\u28AF"], /* BRAILLE PATTERN DOTS-123468 */ + ["\u28B0", "\u28B0"], /* BRAILLE PATTERN DOTS-568 */ + ["\u28B1", "\u28B1"], /* BRAILLE PATTERN DOTS-1568 */ + ["\u28B2", "\u28B2"], /* BRAILLE PATTERN DOTS-2568 */ + ["\u28B3", "\u28B3"], /* BRAILLE PATTERN DOTS-12568 */ + ["\u28B4", "\u28B4"], /* BRAILLE PATTERN DOTS-3568 */ + ["\u28B5", "\u28B5"], /* BRAILLE PATTERN DOTS-13568 */ + ["\u28B6", "\u28B6"], /* BRAILLE PATTERN DOTS-23568 */ + ["\u28B7", "\u28B7"], /* BRAILLE PATTERN DOTS-123568 */ + ["\u28B8", "\u28B8"], /* BRAILLE PATTERN DOTS-4568 */ + ["\u28B9", "\u28B9"], /* BRAILLE PATTERN DOTS-14568 */ + ["\u28BA", "\u28BA"], /* BRAILLE PATTERN DOTS-24568 */ + ["\u28BB", "\u28BB"], /* BRAILLE PATTERN DOTS-124568 */ + ["\u28BC", "\u28BC"], /* BRAILLE PATTERN DOTS-34568 */ + ["\u28BD", "\u28BD"], /* BRAILLE PATTERN DOTS-134568 */ + ["\u28BE", "\u28BE"], /* BRAILLE PATTERN DOTS-234568 */ + ["\u28BF", "\u28BF"], /* BRAILLE PATTERN DOTS-1234568 */ + ["\u28C0", "\u28C0"], /* BRAILLE PATTERN DOTS-78 */ + ["\u28C1", "\u28C1"], /* BRAILLE PATTERN DOTS-178 */ + ["\u28C2", "\u28C2"], /* BRAILLE PATTERN DOTS-278 */ + ["\u28C3", "\u28C3"], /* BRAILLE PATTERN DOTS-1278 */ + ["\u28C4", "\u28C4"], /* BRAILLE PATTERN DOTS-378 */ + ["\u28C5", "\u28C5"], /* BRAILLE PATTERN DOTS-1378 */ + ["\u28C6", "\u28C6"], /* BRAILLE PATTERN DOTS-2378 */ + ["\u28C7", "\u28C7"], /* BRAILLE PATTERN DOTS-12378 */ + ["\u28C8", "\u28C8"], /* BRAILLE PATTERN DOTS-478 */ + ["\u28C9", "\u28C9"], /* BRAILLE PATTERN DOTS-1478 */ + ["\u28CA", "\u28CA"], /* BRAILLE PATTERN DOTS-2478 */ + ["\u28CB", "\u28CB"], /* BRAILLE PATTERN DOTS-12478 */ + ["\u28CC", "\u28CC"], /* BRAILLE PATTERN DOTS-3478 */ + ["\u28CD", "\u28CD"], /* BRAILLE PATTERN DOTS-13478 */ + ["\u28CE", "\u28CE"], /* BRAILLE PATTERN DOTS-23478 */ + ["\u28CF", "\u28CF"], /* BRAILLE PATTERN DOTS-123478 */ + ["\u28D0", "\u28D0"], /* BRAILLE PATTERN DOTS-578 */ + ["\u28D1", "\u28D1"], /* BRAILLE PATTERN DOTS-1578 */ + ["\u28D2", "\u28D2"], /* BRAILLE PATTERN DOTS-2578 */ + ["\u28D3", "\u28D3"], /* BRAILLE PATTERN DOTS-12578 */ + ["\u28D4", "\u28D4"], /* BRAILLE PATTERN DOTS-3578 */ + ["\u28D5", "\u28D5"], /* BRAILLE PATTERN DOTS-13578 */ + ["\u28D6", "\u28D6"], /* BRAILLE PATTERN DOTS-23578 */ + ["\u28D7", "\u28D7"], /* BRAILLE PATTERN DOTS-123578 */ + ["\u28D8", "\u28D8"], /* BRAILLE PATTERN DOTS-4578 */ + ["\u28D9", "\u28D9"], /* BRAILLE PATTERN DOTS-14578 */ + ["\u28DA", "\u28DA"], /* BRAILLE PATTERN DOTS-24578 */ + ["\u28DB", "\u28DB"], /* BRAILLE PATTERN DOTS-124578 */ + ["\u28DC", "\u28DC"], /* BRAILLE PATTERN DOTS-34578 */ + ["\u28DD", "\u28DD"], /* BRAILLE PATTERN DOTS-134578 */ + ["\u28DE", "\u28DE"], /* BRAILLE PATTERN DOTS-234578 */ + ["\u28DF", "\u28DF"], /* BRAILLE PATTERN DOTS-1234578 */ + ["\u28E0", "\u28E0"], /* BRAILLE PATTERN DOTS-678 */ + ["\u28E1", "\u28E1"], /* BRAILLE PATTERN DOTS-1678 */ + ["\u28E2", "\u28E2"], /* BRAILLE PATTERN DOTS-2678 */ + ["\u28E3", "\u28E3"], /* BRAILLE PATTERN DOTS-12678 */ + ["\u28E4", "\u28E4"], /* BRAILLE PATTERN DOTS-3678 */ + ["\u28E5", "\u28E5"], /* BRAILLE PATTERN DOTS-13678 */ + ["\u28E6", "\u28E6"], /* BRAILLE PATTERN DOTS-23678 */ + ["\u28E7", "\u28E7"], /* BRAILLE PATTERN DOTS-123678 */ + ["\u28E8", "\u28E8"], /* BRAILLE PATTERN DOTS-4678 */ + ["\u28E9", "\u28E9"], /* BRAILLE PATTERN DOTS-14678 */ + ["\u28EA", "\u28EA"], /* BRAILLE PATTERN DOTS-24678 */ + ["\u28EB", "\u28EB"], /* BRAILLE PATTERN DOTS-124678 */ + ["\u28EC", "\u28EC"], /* BRAILLE PATTERN DOTS-34678 */ + ["\u28ED", "\u28ED"], /* BRAILLE PATTERN DOTS-134678 */ + ["\u28EE", "\u28EE"], /* BRAILLE PATTERN DOTS-234678 */ + ["\u28EF", "\u28EF"], /* BRAILLE PATTERN DOTS-1234678 */ + ["\u28F0", "\u28F0"], /* BRAILLE PATTERN DOTS-5678 */ + ["\u28F1", "\u28F1"], /* BRAILLE PATTERN DOTS-15678 */ + ["\u28F2", "\u28F2"], /* BRAILLE PATTERN DOTS-25678 */ + ["\u28F3", "\u28F3"], /* BRAILLE PATTERN DOTS-125678 */ + ["\u28F4", "\u28F4"], /* BRAILLE PATTERN DOTS-35678 */ + ["\u28F5", "\u28F5"], /* BRAILLE PATTERN DOTS-135678 */ + ["\u28F6", "\u28F6"], /* BRAILLE PATTERN DOTS-235678 */ + ["\u28F7", "\u28F7"], /* BRAILLE PATTERN DOTS-1235678 */ + ["\u28F8", "\u28F8"], /* BRAILLE PATTERN DOTS-45678 */ + ["\u28F9", "\u28F9"], /* BRAILLE PATTERN DOTS-145678 */ + ["\u28FA", "\u28FA"], /* BRAILLE PATTERN DOTS-245678 */ + ["\u28FB", "\u28FB"], /* BRAILLE PATTERN DOTS-1245678 */ + ["\u28FC", "\u28FC"], /* BRAILLE PATTERN DOTS-345678 */ + ["\u28FD", "\u28FD"], /* BRAILLE PATTERN DOTS-1345678 */ + ["\u28FE", "\u28FE"], /* BRAILLE PATTERN DOTS-2345678 */ + ["\u28FF", "\u28FF"], /* BRAILLE PATTERN DOTS-12345678 */ + ["\u2900", "\u2900"], /* RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE */ + ["\u2901", "\u2901"], /* RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE */ + ["\u2902", "\u2902"], /* LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE */ + ["\u2903", "\u2903"], /* RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE */ + ["\u2904", "\u2904"], /* LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE */ + ["\u2905", "\u2905"], /* RIGHTWARDS TWO-HEADED ARROW FROM BAR */ + ["\u2906", "\u2906"], /* LEFTWARDS DOUBLE ARROW FROM BAR */ + ["\u2907", "\u2907"], /* RIGHTWARDS DOUBLE ARROW FROM BAR */ + ["\u2908", "\u2908"], /* DOWNWARDS ARROW WITH HORIZONTAL STROKE */ + ["\u2909", "\u2909"], /* UPWARDS ARROW WITH HORIZONTAL STROKE */ + ["\u290A", "\u290A"], /* UPWARDS TRIPLE ARROW */ + ["\u290B", "\u290B"], /* DOWNWARDS TRIPLE ARROW */ + ["\u290C", "\u290C"], /* LEFTWARDS DOUBLE DASH ARROW */ + ["\u290D", "\u290D"], /* RIGHTWARDS DOUBLE DASH ARROW */ + ["\u290E", "\u290E"], /* LEFTWARDS TRIPLE DASH ARROW */ + ["\u290F", "\u290F"], /* RIGHTWARDS TRIPLE DASH ARROW */ + ["\u2910", "\u2910"], /* RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW */ + ["\u2911", "\u2911"], /* RIGHTWARDS ARROW WITH DOTTED STEM */ + ["\u2912", "\u2912"], /* UPWARDS ARROW TO BAR */ + ["\u2913", "\u2913"], /* DOWNWARDS ARROW TO BAR */ + ["\u2914", "\u2914"], /* RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE */ + ["\u2915", "\u2915"], /* RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + ["\u2916", "\u2916"], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL */ + ["\u2917", "\u2917"], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE */ + ["\u2918", "\u2918"], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + ["\u2919", "\u2919"], /* LEFTWARDS ARROW-TAIL */ + ["\u291A", "\u291A"], /* RIGHTWARDS ARROW-TAIL */ + ["\u291B", "\u291B"], /* LEFTWARDS DOUBLE ARROW-TAIL */ + ["\u291C", "\u291C"], /* RIGHTWARDS DOUBLE ARROW-TAIL */ + ["\u291D", "\u291D"], /* LEFTWARDS ARROW TO BLACK DIAMOND */ + ["\u291E", "\u291E"], /* RIGHTWARDS ARROW TO BLACK DIAMOND */ + ["\u291F", "\u291F"], /* LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND */ + ["\u2920", "\u2920"], /* RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND */ + ["\u2921", "\u2921"], /* NORTH WEST AND SOUTH EAST ARROW */ + ["\u2922", "\u2922"], /* NORTH EAST AND SOUTH WEST ARROW */ + ["\u2923", "\u2923"], /* NORTH WEST ARROW WITH HOOK */ + ["\u2924", "\u2924"], /* NORTH EAST ARROW WITH HOOK */ + ["\u2925", "\u2925"], /* SOUTH EAST ARROW WITH HOOK */ + ["\u2926", "\u2926"], /* SOUTH WEST ARROW WITH HOOK */ + ["\u2927", "\u2927"], /* NORTH WEST ARROW AND NORTH EAST ARROW */ + ["\u2928", "\u2928"], /* NORTH EAST ARROW AND SOUTH EAST ARROW */ + ["\u2929", "\u2929"], /* SOUTH EAST ARROW AND SOUTH WEST ARROW */ + ["\u292A", "\u292A"], /* SOUTH WEST ARROW AND NORTH WEST ARROW */ + ["\u292B", "\u292B"], /* RISING DIAGONAL CROSSING FALLING DIAGONAL */ + ["\u292C", "\u292C"], /* FALLING DIAGONAL CROSSING RISING DIAGONAL */ + ["\u292D", "\u292D"], /* SOUTH EAST ARROW CROSSING NORTH EAST ARROW */ + ["\u292E", "\u292E"], /* NORTH EAST ARROW CROSSING SOUTH EAST ARROW */ + ["\u292F", "\u292F"], /* FALLING DIAGONAL CROSSING NORTH EAST ARROW */ + ["\u2930", "\u2930"], /* RISING DIAGONAL CROSSING SOUTH EAST ARROW */ + ["\u2931", "\u2931"], /* NORTH EAST ARROW CROSSING NORTH WEST ARROW */ + ["\u2932", "\u2932"], /* NORTH WEST ARROW CROSSING NORTH EAST ARROW */ + ["\u2933", "\u2933"], /* WAVE ARROW POINTING DIRECTLY RIGHT */ + ["\u2934", "\u2934"], /* ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS */ + ["\u2935", "\u2935"], /* ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS */ + ["\u2936", "\u2936"], /* ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS */ + ["\u2937", "\u2937"], /* ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS */ + ["\u2938", "\u2938"], /* RIGHT-SIDE ARC CLOCKWISE ARROW */ + ["\u2939", "\u2939"], /* LEFT-SIDE ARC ANTICLOCKWISE ARROW */ + ["\u293A", "\u293A"], /* TOP ARC ANTICLOCKWISE ARROW */ + ["\u293B", "\u293B"], /* BOTTOM ARC ANTICLOCKWISE ARROW */ + ["\u293C", "\u293C"], /* TOP ARC CLOCKWISE ARROW WITH MINUS */ + ["\u293D", "\u293D"], /* TOP ARC ANTICLOCKWISE ARROW WITH PLUS */ + ["\u293E", "\u293E"], /* LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW */ + ["\u293F", "\u293F"], /* LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW */ + ["\u2940", "\u2940"], /* ANTICLOCKWISE CLOSED CIRCLE ARROW */ + ["\u2941", "\u2941"], /* CLOCKWISE CLOSED CIRCLE ARROW */ + ["\u2942", "\u2942"], /* RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW */ + ["\u2943", "\u2943"], /* LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW */ + ["\u2944", "\u2944"], /* SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW */ + ["\u2945", "\u2945"], /* RIGHTWARDS ARROW WITH PLUS BELOW */ + ["\u2946", "\u2946"], /* LEFTWARDS ARROW WITH PLUS BELOW */ + ["\u2947", "\u2947"], /* RIGHTWARDS ARROW THROUGH X */ + ["\u2948", "\u2948"], /* LEFT RIGHT ARROW THROUGH SMALL CIRCLE */ + ["\u2949", "\u2949"], /* UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE */ + ["\u294A", "\u294A"], /* LEFT BARB UP RIGHT BARB DOWN HARPOON */ + ["\u294B", "\u294B"], /* LEFT BARB DOWN RIGHT BARB UP HARPOON */ + ["\u294C", "\u294C"], /* UP BARB RIGHT DOWN BARB LEFT HARPOON */ + ["\u294D", "\u294D"], /* UP BARB LEFT DOWN BARB RIGHT HARPOON */ + ["\u294E", "\u294E"], /* LEFT BARB UP RIGHT BARB UP HARPOON */ + ["\u294F", "\u294F"], /* UP BARB RIGHT DOWN BARB RIGHT HARPOON */ + ["\u2950", "\u2950"], /* LEFT BARB DOWN RIGHT BARB DOWN HARPOON */ + ["\u2951", "\u2951"], /* UP BARB LEFT DOWN BARB LEFT HARPOON */ + ["\u2952", "\u2952"], /* LEFTWARDS HARPOON WITH BARB UP TO BAR */ + ["\u2953", "\u2953"], /* RIGHTWARDS HARPOON WITH BARB UP TO BAR */ + ["\u2954", "\u2954"], /* UPWARDS HARPOON WITH BARB RIGHT TO BAR */ + ["\u2955", "\u2955"], /* DOWNWARDS HARPOON WITH BARB RIGHT TO BAR */ + ["\u2956", "\u2956"], /* LEFTWARDS HARPOON WITH BARB DOWN TO BAR */ + ["\u2957", "\u2957"], /* RIGHTWARDS HARPOON WITH BARB DOWN TO BAR */ + ["\u2958", "\u2958"], /* UPWARDS HARPOON WITH BARB LEFT TO BAR */ + ["\u2959", "\u2959"], /* DOWNWARDS HARPOON WITH BARB LEFT TO BAR */ + ["\u295A", "\u295A"], /* LEFTWARDS HARPOON WITH BARB UP FROM BAR */ + ["\u295B", "\u295B"], /* RIGHTWARDS HARPOON WITH BARB UP FROM BAR */ + ["\u295C", "\u295C"], /* UPWARDS HARPOON WITH BARB RIGHT FROM BAR */ + ["\u295D", "\u295D"], /* DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR */ + ["\u295E", "\u295E"], /* LEFTWARDS HARPOON WITH BARB DOWN FROM BAR */ + ["\u295F", "\u295F"], /* RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR */ + ["\u2960", "\u2960"], /* UPWARDS HARPOON WITH BARB LEFT FROM BAR */ + ["\u2961", "\u2961"], /* DOWNWARDS HARPOON WITH BARB LEFT FROM BAR */ + ["\u2962", "\u2962"], /* LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN */ + ["\u2963", "\u2963"], /* UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT */ + ["\u2964", "\u2964"], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN */ + ["\u2965", "\u2965"], /* DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT */ + ["\u2966", "\u2966"], /* LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP */ + ["\u2967", "\u2967"], /* LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN */ + ["\u2968", "\u2968"], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP */ + ["\u2969", "\u2969"], /* RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN */ + ["\u296A", "\u296A"], /* LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH */ + ["\u296B", "\u296B"], /* LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH */ + ["\u296C", "\u296C"], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH */ + ["\u296D", "\u296D"], /* RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH */ + ["\u296E", "\u296E"], /* UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT */ + ["\u296F", "\u296F"], /* DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT */ + ["\u2970", "\u2970"], /* RIGHT DOUBLE ARROW WITH ROUNDED HEAD */ + ["\u2971", "\u2971"], /* EQUALS SIGN ABOVE RIGHTWARDS ARROW */ + ["\u2972", "\u2972"], /* TILDE OPERATOR ABOVE RIGHTWARDS ARROW */ + ["\u2973", "\u2973"], /* LEFTWARDS ARROW ABOVE TILDE OPERATOR */ + ["\u2974", "\u2974"], /* RIGHTWARDS ARROW ABOVE TILDE OPERATOR */ + ["\u2975", "\u2975"], /* RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO */ + ["\u2976", "\u2976"], /* LESS-THAN ABOVE LEFTWARDS ARROW */ + ["\u2977", "\u2977"], /* LEFTWARDS ARROW THROUGH LESS-THAN */ + ["\u2978", "\u2978"], /* GREATER-THAN ABOVE RIGHTWARDS ARROW */ + ["\u2979", "\u2979"], /* SUBSET ABOVE RIGHTWARDS ARROW */ + ["\u297A", "\u297A"], /* LEFTWARDS ARROW THROUGH SUBSET */ + ["\u297B", "\u297B"], /* SUPERSET ABOVE LEFTWARDS ARROW */ + ["\u297C", "\u297C"], /* LEFT FISH TAIL */ + ["\u297D", "\u297D"], /* RIGHT FISH TAIL */ + ["\u297E", "\u297E"], /* UP FISH TAIL */ + ["\u297F", "\u297F"], /* DOWN FISH TAIL */ + ["\u2980", "\u2980"], /* TRIPLE VERTICAL BAR DELIMITER */ + ["\u2981", "\u2981"], /* Z NOTATION SPOT */ + ["\u2982", "\u2982"], /* Z NOTATION TYPE COLON */ + ["\u2983", "\u2983"], /* LEFT WHITE CURLY BRACKET */ + ["\u2984", "\u2984"], /* RIGHT WHITE CURLY BRACKET */ + ["\u2985", "\u2985"], /* LEFT WHITE PARENTHESIS */ + ["\u2986", "\u2986"], /* RIGHT WHITE PARENTHESIS */ + ["\u2987", "\u2987"], /* Z NOTATION LEFT IMAGE BRACKET */ + ["\u2988", "\u2988"], /* Z NOTATION RIGHT IMAGE BRACKET */ + ["\u2989", "\u2989"], /* Z NOTATION LEFT BINDING BRACKET */ + ["\u298A", "\u298A"], /* Z NOTATION RIGHT BINDING BRACKET */ + ["\u298B", "\u298B"], /* LEFT SQUARE BRACKET WITH UNDERBAR */ + ["\u298C", "\u298C"], /* RIGHT SQUARE BRACKET WITH UNDERBAR */ + ["\u298D", "\u298D"], /* LEFT SQUARE BRACKET WITH TICK IN TOP CORNER */ + ["\u298E", "\u298E"], /* RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER */ + ["\u298F", "\u298F"], /* LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER */ + ["\u2990", "\u2990"], /* RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER */ + ["\u2991", "\u2991"], /* LEFT ANGLE BRACKET WITH DOT */ + ["\u2992", "\u2992"], /* RIGHT ANGLE BRACKET WITH DOT */ + ["\u2993", "\u2993"], /* LEFT ARC LESS-THAN BRACKET */ + ["\u2994", "\u2994"], /* RIGHT ARC GREATER-THAN BRACKET */ + ["\u2995", "\u2995"], /* DOUBLE LEFT ARC GREATER-THAN BRACKET */ + ["\u2996", "\u2996"], /* DOUBLE RIGHT ARC LESS-THAN BRACKET */ + ["\u2997", "\u2997"], /* LEFT BLACK TORTOISE SHELL BRACKET */ + ["\u2998", "\u2998"], /* RIGHT BLACK TORTOISE SHELL BRACKET */ + ["\u2999", "\u2999"], /* DOTTED FENCE */ + ["\u299A", "\u299A"], /* VERTICAL ZIGZAG LINE */ + ["\u299B", "\u299B"], /* MEASURED ANGLE OPENING LEFT */ + ["\u299C", "\u299C"], /* RIGHT ANGLE VARIANT WITH SQUARE */ + ["\u299D", "\u299D"], /* MEASURED RIGHT ANGLE WITH DOT */ + ["\u299E", "\u299E"], /* ANGLE WITH S INSIDE */ + ["\u299F", "\u299F"], /* ACUTE ANGLE */ + ["\u29A0", "\u29A0"], /* SPHERICAL ANGLE OPENING LEFT */ + ["\u29A1", "\u29A1"], /* SPHERICAL ANGLE OPENING UP */ + ["\u29A2", "\u29A2"], /* TURNED ANGLE */ + ["\u29A3", "\u29A3"], /* REVERSED ANGLE */ + ["\u29A4", "\u29A4"], /* ANGLE WITH UNDERBAR */ + ["\u29A5", "\u29A5"], /* REVERSED ANGLE WITH UNDERBAR */ + ["\u29A6", "\u29A6"], /* OBLIQUE ANGLE OPENING UP */ + ["\u29A7", "\u29A7"], /* OBLIQUE ANGLE OPENING DOWN */ + ["\u29A8", "\u29A8"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT */ + ["\u29A9", "\u29A9"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT */ + ["\u29AA", "\u29AA"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT */ + ["\u29AB", "\u29AB"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT */ + ["\u29AC", "\u29AC"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP */ + ["\u29AD", "\u29AD"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP */ + ["\u29AE", "\u29AE"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN */ + ["\u29AF", "\u29AF"], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN */ + ["\u29B0", "\u29B0"], /* REVERSED EMPTY SET */ + ["\u29B1", "\u29B1"], /* EMPTY SET WITH OVERBAR */ + ["\u29B2", "\u29B2"], /* EMPTY SET WITH SMALL CIRCLE ABOVE */ + ["\u29B3", "\u29B3"], /* EMPTY SET WITH RIGHT ARROW ABOVE */ + ["\u29B4", "\u29B4"], /* EMPTY SET WITH LEFT ARROW ABOVE */ + ["\u29B5", "\u29B5"], /* CIRCLE WITH HORIZONTAL BAR */ + ["\u29B6", "\u29B6"], /* CIRCLED VERTICAL BAR */ + ["\u29B7", "\u29B7"], /* CIRCLED PARALLEL */ + ["\u29B8", "\u29B8"], /* CIRCLED REVERSE SOLIDUS */ + ["\u29B9", "\u29B9"], /* CIRCLED PERPENDICULAR */ + ["\u29BA", "\u29BA"], /* CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR */ + ["\u29BB", "\u29BB"], /* CIRCLE WITH SUPERIMPOSED X */ + ["\u29BC", "\u29BC"], /* CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN */ + ["\u29BD", "\u29BD"], /* UP ARROW THROUGH CIRCLE */ + ["\u29BE", "\u29BE"], /* CIRCLED WHITE BULLET */ + ["\u29BF", "\u29BF"], /* CIRCLED BULLET */ + ["\u29C0", "\u29C0"], /* CIRCLED LESS-THAN */ + ["\u29C1", "\u29C1"], /* CIRCLED GREATER-THAN */ + ["\u29C2", "\u29C2"], /* CIRCLE WITH SMALL CIRCLE TO THE RIGHT */ + ["\u29C3", "\u29C3"], /* CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT */ + ["\u29C4", "\u29C4"], /* SQUARED RISING DIAGONAL SLASH */ + ["\u29C5", "\u29C5"], /* SQUARED FALLING DIAGONAL SLASH */ + ["\u29C6", "\u29C6"], /* SQUARED ASTERISK */ + ["\u29C7", "\u29C7"], /* SQUARED SMALL CIRCLE */ + ["\u29C8", "\u29C8"], /* SQUARED SQUARE */ + ["\u29C9", "\u29C9"], /* TWO JOINED SQUARES */ + ["\u29CA", "\u29CA"], /* TRIANGLE WITH DOT ABOVE */ + ["\u29CB", "\u29CB"], /* TRIANGLE WITH UNDERBAR */ + ["\u29CC", "\u29CC"], /* S IN TRIANGLE */ + ["\u29CD", "\u29CD"], /* TRIANGLE WITH SERIFS AT BOTTOM */ + ["\u29CE", "\u29CE"], /* RIGHT TRIANGLE ABOVE LEFT TRIANGLE */ + ["\u29CF", "\u29CF"], /* LEFT TRIANGLE BESIDE VERTICAL BAR */ + ["\u29D0", "\u29D0"], /* VERTICAL BAR BESIDE RIGHT TRIANGLE */ + ["\u29D1", "\u29D1"], /* BOWTIE WITH LEFT HALF BLACK */ + ["\u29D2", "\u29D2"], /* BOWTIE WITH RIGHT HALF BLACK */ + ["\u29D3", "\u29D3"], /* BLACK BOWTIE */ + ["\u29D4", "\u29D4"], /* TIMES WITH LEFT HALF BLACK */ + ["\u29D5", "\u29D5"], /* TIMES WITH RIGHT HALF BLACK */ + ["\u29D6", "\u29D6"], /* WHITE HOURGLASS */ + ["\u29D7", "\u29D7"], /* BLACK HOURGLASS */ + ["\u29D8", "\u29D8"], /* LEFT WIGGLY FENCE */ + ["\u29D9", "\u29D9"], /* RIGHT WIGGLY FENCE */ + ["\u29DA", "\u29DA"], /* LEFT DOUBLE WIGGLY FENCE */ + ["\u29DB", "\u29DB"], /* RIGHT DOUBLE WIGGLY FENCE */ + ["\u29DC", "\u29DC"], /* INCOMPLETE INFINITY */ + ["\u29DD", "\u29DD"], /* TIE OVER INFINITY */ + ["\u29DE", "\u29DE"], /* INFINITY NEGATED WITH VERTICAL BAR */ + ["\u29DF", "\u29DF"], /* DOUBLE-ENDED MULTIMAP */ + ["\u29E0", "\u29E0"], /* SQUARE WITH CONTOURED OUTLINE */ + ["\u29E1", "\u29E1"], /* INCREASES AS */ + ["\u29E2", "\u29E2"], /* SHUFFLE PRODUCT */ + ["\u29E3", "\u29E3"], /* EQUALS SIGN AND SLANTED PARALLEL */ + ["\u29E4", "\u29E4"], /* EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE */ + ["\u29E5", "\u29E5"], /* IDENTICAL TO AND SLANTED PARALLEL */ + ["\u29E6", "\u29E6"], /* GLEICH STARK */ + ["\u29E7", "\u29E7"], /* THERMODYNAMIC */ + ["\u29E8", "\u29E8"], /* DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK */ + ["\u29E9", "\u29E9"], /* DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK */ + ["\u29EA", "\u29EA"], /* BLACK DIAMOND WITH DOWN ARROW */ + ["\u29EB", "\u29EB"], /* BLACK LOZENGE */ + ["\u29EC", "\u29EC"], /* WHITE CIRCLE WITH DOWN ARROW */ + ["\u29ED", "\u29ED"], /* BLACK CIRCLE WITH DOWN ARROW */ + ["\u29EE", "\u29EE"], /* ERROR-BARRED WHITE SQUARE */ + ["\u29EF", "\u29EF"], /* ERROR-BARRED BLACK SQUARE */ + ["\u29F0", "\u29F0"], /* ERROR-BARRED WHITE DIAMOND */ + ["\u29F1", "\u29F1"], /* ERROR-BARRED BLACK DIAMOND */ + ["\u29F2", "\u29F2"], /* ERROR-BARRED WHITE CIRCLE */ + ["\u29F3", "\u29F3"], /* ERROR-BARRED BLACK CIRCLE */ + ["\u29F4", "\u29F4"], /* RULE-DELAYED */ + ["\u29F5", "\u29F5"], /* REVERSE SOLIDUS OPERATOR */ + ["\u29F6", "\u29F6"], /* SOLIDUS WITH OVERBAR */ + ["\u29F7", "\u29F7"], /* REVERSE SOLIDUS WITH HORIZONTAL STROKE */ + ["\u29F8", "\u29F8"], /* BIG SOLIDUS */ + ["\u29F9", "\u29F9"], /* BIG REVERSE SOLIDUS */ + ["\u29FA", "\u29FA"], /* DOUBLE PLUS */ + ["\u29FB", "\u29FB"], /* TRIPLE PLUS */ + ["\u29FC", "\u29FC"], /* LEFT-POINTING CURVED ANGLE BRACKET */ + ["\u29FD", "\u29FD"], /* RIGHT-POINTING CURVED ANGLE BRACKET */ + ["\u29FE", "\u29FE"], /* TINY */ + ["\u29FF", "\u29FF"], /* MINY */ + ["\u2A00", "\u2A00"], /* N-ARY CIRCLED DOT OPERATOR */ + ["\u2A01", "\u2A01"], /* N-ARY CIRCLED PLUS OPERATOR */ + ["\u2A02", "\u2A02"], /* N-ARY CIRCLED TIMES OPERATOR */ + ["\u2A03", "\u2A03"], /* N-ARY UNION OPERATOR WITH DOT */ + ["\u2A04", "\u2A04"], /* N-ARY UNION OPERATOR WITH PLUS */ + ["\u2A05", "\u2A05"], /* N-ARY SQUARE INTERSECTION OPERATOR */ + ["\u2A06", "\u2A06"], /* N-ARY SQUARE UNION OPERATOR */ + ["\u2A07", "\u2A07"], /* TWO LOGICAL AND OPERATOR */ + ["\u2A08", "\u2A08"], /* TWO LOGICAL OR OPERATOR */ + ["\u2A09", "\u2A09"], /* N-ARY TIMES OPERATOR */ + ["\u2A0A", "\u2A0A"], /* MODULO TWO SUM */ + ["\u2A0B", "\u2A0B"], /* SUMMATION WITH INTEGRAL */ + ["\u2A0C", "\u2A0C"], /* QUADRUPLE INTEGRAL OPERATOR */ + ["\u2A0D", "\u2A0D"], /* FINITE PART INTEGRAL */ + ["\u2A0E", "\u2A0E"], /* INTEGRAL WITH DOUBLE STROKE */ + ["\u2A0F", "\u2A0F"], /* INTEGRAL AVERAGE WITH SLASH */ + ["\u2A10", "\u2A10"], /* CIRCULATION FUNCTION */ + ["\u2A11", "\u2A11"], /* ANTICLOCKWISE INTEGRATION */ + ["\u2A12", "\u2A12"], /* LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE */ + ["\u2A13", "\u2A13"], /* LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE */ + ["\u2A14", "\u2A14"], /* LINE INTEGRATION NOT INCLUDING THE POLE */ + ["\u2A15", "\u2A15"], /* INTEGRAL AROUND A POINT OPERATOR */ + ["\u2A16", "\u2A16"], /* QUATERNION INTEGRAL OPERATOR */ + ["\u2A17", "\u2A17"], /* INTEGRAL WITH LEFTWARDS ARROW WITH HOOK */ + ["\u2A18", "\u2A18"], /* INTEGRAL WITH TIMES SIGN */ + ["\u2A19", "\u2A19"], /* INTEGRAL WITH INTERSECTION */ + ["\u2A1A", "\u2A1A"], /* INTEGRAL WITH UNION */ + ["\u2A1B", "\u2A1B"], /* INTEGRAL WITH OVERBAR */ + ["\u2A1C", "\u2A1C"], /* INTEGRAL WITH UNDERBAR */ + ["\u2A1D", "\u2A1D"], /* JOIN */ + ["\u2A1E", "\u2A1E"], /* LARGE LEFT TRIANGLE OPERATOR */ + ["\u2A1F", "\u2A1F"], /* Z NOTATION SCHEMA COMPOSITION */ + ["\u2A20", "\u2A20"], /* Z NOTATION SCHEMA PIPING */ + ["\u2A21", "\u2A21"], /* Z NOTATION SCHEMA PROJECTION */ + ["\u2A22", "\u2A22"], /* PLUS SIGN WITH SMALL CIRCLE ABOVE */ + ["\u2A23", "\u2A23"], /* PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE */ + ["\u2A24", "\u2A24"], /* PLUS SIGN WITH TILDE ABOVE */ + ["\u2A25", "\u2A25"], /* PLUS SIGN WITH DOT BELOW */ + ["\u2A26", "\u2A26"], /* PLUS SIGN WITH TILDE BELOW */ + ["\u2A27", "\u2A27"], /* PLUS SIGN WITH SUBSCRIPT TWO */ + ["\u2A28", "\u2A28"], /* PLUS SIGN WITH BLACK TRIANGLE */ + ["\u2A29", "\u2A29"], /* MINUS SIGN WITH COMMA ABOVE */ + ["\u2A2A", "\u2A2A"], /* MINUS SIGN WITH DOT BELOW */ + ["\u2A2B", "\u2A2B"], /* MINUS SIGN WITH FALLING DOTS */ + ["\u2A2C", "\u2A2C"], /* MINUS SIGN WITH RISING DOTS */ + ["\u2A2D", "\u2A2D"], /* PLUS SIGN IN LEFT HALF CIRCLE */ + ["\u2A2E", "\u2A2E"], /* PLUS SIGN IN RIGHT HALF CIRCLE */ + ["\u2A2F", "\u2A2F"], /* VECTOR OR CROSS PRODUCT */ + ["\u2A30", "\u2A30"], /* MULTIPLICATION SIGN WITH DOT ABOVE */ + ["\u2A31", "\u2A31"], /* MULTIPLICATION SIGN WITH UNDERBAR */ + ["\u2A32", "\u2A32"], /* SEMIDIRECT PRODUCT WITH BOTTOM CLOSED */ + ["\u2A33", "\u2A33"], /* SMASH PRODUCT */ + ["\u2A34", "\u2A34"], /* MULTIPLICATION SIGN IN LEFT HALF CIRCLE */ + ["\u2A35", "\u2A35"], /* MULTIPLICATION SIGN IN RIGHT HALF CIRCLE */ + ["\u2A36", "\u2A36"], /* CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT */ + ["\u2A37", "\u2A37"], /* MULTIPLICATION SIGN IN DOUBLE CIRCLE */ + ["\u2A38", "\u2A38"], /* CIRCLED DIVISION SIGN */ + ["\u2A39", "\u2A39"], /* PLUS SIGN IN TRIANGLE */ + ["\u2A3A", "\u2A3A"], /* MINUS SIGN IN TRIANGLE */ + ["\u2A3B", "\u2A3B"], /* MULTIPLICATION SIGN IN TRIANGLE */ + ["\u2A3C", "\u2A3C"], /* INTERIOR PRODUCT */ + ["\u2A3D", "\u2A3D"], /* RIGHTHAND INTERIOR PRODUCT */ + ["\u2A3E", "\u2A3E"], /* Z NOTATION RELATIONAL COMPOSITION */ + ["\u2A3F", "\u2A3F"], /* AMALGAMATION OR COPRODUCT */ + ["\u2A40", "\u2A40"], /* INTERSECTION WITH DOT */ + ["\u2A41", "\u2A41"], /* UNION WITH MINUS SIGN */ + ["\u2A42", "\u2A42"], /* UNION WITH OVERBAR */ + ["\u2A43", "\u2A43"], /* INTERSECTION WITH OVERBAR */ + ["\u2A44", "\u2A44"], /* INTERSECTION WITH LOGICAL AND */ + ["\u2A45", "\u2A45"], /* UNION WITH LOGICAL OR */ + ["\u2A46", "\u2A46"], /* UNION ABOVE INTERSECTION */ + ["\u2A47", "\u2A47"], /* INTERSECTION ABOVE UNION */ + ["\u2A48", "\u2A48"], /* UNION ABOVE BAR ABOVE INTERSECTION */ + ["\u2A49", "\u2A49"], /* INTERSECTION ABOVE BAR ABOVE UNION */ + ["\u2A4A", "\u2A4A"], /* UNION BESIDE AND JOINED WITH UNION */ + ["\u2A4B", "\u2A4B"], /* INTERSECTION BESIDE AND JOINED WITH INTERSECTION */ + ["\u2A4C", "\u2A4C"], /* CLOSED UNION WITH SERIFS */ + ["\u2A4D", "\u2A4D"], /* CLOSED INTERSECTION WITH SERIFS */ + ["\u2A4E", "\u2A4E"], /* DOUBLE SQUARE INTERSECTION */ + ["\u2A4F", "\u2A4F"], /* DOUBLE SQUARE UNION */ + ["\u2A50", "\u2A50"], /* CLOSED UNION WITH SERIFS AND SMASH PRODUCT */ + ["\u2A51", "\u2A51"], /* LOGICAL AND WITH DOT ABOVE */ + ["\u2A52", "\u2A52"], /* LOGICAL OR WITH DOT ABOVE */ + ["\u2A53", "\u2A53"], /* DOUBLE LOGICAL AND */ + ["\u2A54", "\u2A54"], /* DOUBLE LOGICAL OR */ + ["\u2A55", "\u2A55"], /* TWO INTERSECTING LOGICAL AND */ + ["\u2A56", "\u2A56"], /* TWO INTERSECTING LOGICAL OR */ + ["\u2A57", "\u2A57"], /* SLOPING LARGE OR */ + ["\u2A58", "\u2A58"], /* SLOPING LARGE AND */ + ["\u2A59", "\u2A59"], /* LOGICAL OR OVERLAPPING LOGICAL AND */ + ["\u2A5A", "\u2A5A"], /* LOGICAL AND WITH MIDDLE STEM */ + ["\u2A5B", "\u2A5B"], /* LOGICAL OR WITH MIDDLE STEM */ + ["\u2A5C", "\u2A5C"], /* LOGICAL AND WITH HORIZONTAL DASH */ + ["\u2A5D", "\u2A5D"], /* LOGICAL OR WITH HORIZONTAL DASH */ + ["\u2A5E", "\u2A5E"], /* LOGICAL AND WITH DOUBLE OVERBAR */ + ["\u2A5F", "\u2A5F"], /* LOGICAL AND WITH UNDERBAR */ + ["\u2A60", "\u2A60"], /* LOGICAL AND WITH DOUBLE UNDERBAR */ + ["\u2A61", "\u2A61"], /* SMALL VEE WITH UNDERBAR */ + ["\u2A62", "\u2A62"], /* LOGICAL OR WITH DOUBLE OVERBAR */ + ["\u2A63", "\u2A63"], /* LOGICAL OR WITH DOUBLE UNDERBAR */ + ["\u2A64", "\u2A64"], /* Z NOTATION DOMAIN ANTIRESTRICTION */ + ["\u2A65", "\u2A65"], /* Z NOTATION RANGE ANTIRESTRICTION */ + ["\u2A66", "\u2A66"], /* EQUALS SIGN WITH DOT BELOW */ + ["\u2A67", "\u2A67"], /* IDENTICAL WITH DOT ABOVE */ + ["\u2A68", "\u2A68"], /* TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE */ + ["\u2A69", "\u2A69"], /* TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE */ + ["\u2A6A", "\u2A6A"], /* TILDE OPERATOR WITH DOT ABOVE */ + ["\u2A6B", "\u2A6B"], /* TILDE OPERATOR WITH RISING DOTS */ + ["\u2A6C", "\u2A6C"], /* SIMILAR MINUS SIMILAR */ + ["\u2A6D", "\u2A6D"], /* CONGRUENT WITH DOT ABOVE */ + ["\u2A6E", "\u2A6E"], /* EQUALS WITH ASTERISK */ + ["\u2A6F", "\u2A6F"], /* ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT */ + ["\u2A70", "\u2A70"], /* APPROXIMATELY EQUAL OR EQUAL TO */ + ["\u2A71", "\u2A71"], /* EQUALS SIGN ABOVE PLUS SIGN */ + ["\u2A72", "\u2A72"], /* PLUS SIGN ABOVE EQUALS SIGN */ + ["\u2A73", "\u2A73"], /* EQUALS SIGN ABOVE TILDE OPERATOR */ + ["\u2A74", "\u2A74"], /* DOUBLE COLON EQUAL */ + ["\u2A75", "\u2A75"], /* TWO CONSECUTIVE EQUALS SIGNS */ + ["\u2A76", "\u2A76"], /* THREE CONSECUTIVE EQUALS SIGNS */ + ["\u2A77", "\u2A77"], /* EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW */ + ["\u2A78", "\u2A78"], /* EQUIVALENT WITH FOUR DOTS ABOVE */ + ["\u2A79", "\u2A79"], /* LESS-THAN WITH CIRCLE INSIDE */ + ["\u2A7A", "\u2A7A"], /* GREATER-THAN WITH CIRCLE INSIDE */ + ["\u2A7B", "\u2A7B"], /* LESS-THAN WITH QUESTION MARK ABOVE */ + ["\u2A7C", "\u2A7C"], /* GREATER-THAN WITH QUESTION MARK ABOVE */ + ["\u2A7D", "\u2A7D"], /* LESS-THAN OR SLANTED EQUAL TO */ + ["\u2A7E", "\u2A7E"], /* GREATER-THAN OR SLANTED EQUAL TO */ + ["\u2A7F", "\u2A7F"], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE */ + ["\u2A80", "\u2A80"], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE */ + ["\u2A81", "\u2A81"], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE */ + ["\u2A82", "\u2A82"], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE */ + ["\u2A83", "\u2A83"], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT */ + ["\u2A84", "\u2A84"], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT */ + ["\u2A85", "\u2A85"], /* LESS-THAN OR APPROXIMATE */ + ["\u2A86", "\u2A86"], /* GREATER-THAN OR APPROXIMATE */ + ["\u2A87", "\u2A87"], /* LESS-THAN AND SINGLE-LINE NOT EQUAL TO */ + ["\u2A88", "\u2A88"], /* GREATER-THAN AND SINGLE-LINE NOT EQUAL TO */ + ["\u2A89", "\u2A89"], /* LESS-THAN AND NOT APPROXIMATE */ + ["\u2A8A", "\u2A8A"], /* GREATER-THAN AND NOT APPROXIMATE */ + ["\u2A8B", "\u2A8B"], /* LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN */ + ["\u2A8C", "\u2A8C"], /* GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN */ + ["\u2A8D", "\u2A8D"], /* LESS-THAN ABOVE SIMILAR OR EQUAL */ + ["\u2A8E", "\u2A8E"], /* GREATER-THAN ABOVE SIMILAR OR EQUAL */ + ["\u2A8F", "\u2A8F"], /* LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN */ + ["\u2A90", "\u2A90"], /* GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN */ + ["\u2A91", "\u2A91"], /* LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL */ + ["\u2A92", "\u2A92"], /* GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL */ + ["\u2A93", "\u2A93"], /* LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL */ + ["\u2A94", "\u2A94"], /* GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL */ + ["\u2A95", "\u2A95"], /* SLANTED EQUAL TO OR LESS-THAN */ + ["\u2A96", "\u2A96"], /* SLANTED EQUAL TO OR GREATER-THAN */ + ["\u2A97", "\u2A97"], /* SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE */ + ["\u2A98", "\u2A98"], /* SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE */ + ["\u2A99", "\u2A99"], /* DOUBLE-LINE EQUAL TO OR LESS-THAN */ + ["\u2A9A", "\u2A9A"], /* DOUBLE-LINE EQUAL TO OR GREATER-THAN */ + ["\u2A9B", "\u2A9B"], /* DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN */ + ["\u2A9C", "\u2A9C"], /* DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN */ + ["\u2A9D", "\u2A9D"], /* SIMILAR OR LESS-THAN */ + ["\u2A9E", "\u2A9E"], /* SIMILAR OR GREATER-THAN */ + ["\u2A9F", "\u2A9F"], /* SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN */ + ["\u2AA0", "\u2AA0"], /* SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN */ + ["\u2AA1", "\u2AA1"], /* DOUBLE NESTED LESS-THAN */ + ["\u2AA2", "\u2AA2"], /* DOUBLE NESTED GREATER-THAN */ + ["\u2AA3", "\u2AA3"], /* DOUBLE NESTED LESS-THAN WITH UNDERBAR */ + ["\u2AA4", "\u2AA4"], /* GREATER-THAN OVERLAPPING LESS-THAN */ + ["\u2AA5", "\u2AA5"], /* GREATER-THAN BESIDE LESS-THAN */ + ["\u2AA6", "\u2AA6"], /* LESS-THAN CLOSED BY CURVE */ + ["\u2AA7", "\u2AA7"], /* GREATER-THAN CLOSED BY CURVE */ + ["\u2AA8", "\u2AA8"], /* LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL */ + ["\u2AA9", "\u2AA9"], /* GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL */ + ["\u2AAA", "\u2AAA"], /* SMALLER THAN */ + ["\u2AAB", "\u2AAB"], /* LARGER THAN */ + ["\u2AAC", "\u2AAC"], /* SMALLER THAN OR EQUAL TO */ + ["\u2AAD", "\u2AAD"], /* LARGER THAN OR EQUAL TO */ + ["\u2AAE", "\u2AAE"], /* EQUALS SIGN WITH BUMPY ABOVE */ + ["\u2AAF", "\u2AAF"], /* PRECEDES ABOVE SINGLE-LINE EQUALS SIGN */ + ["\u2AB0", "\u2AB0"], /* SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN */ + ["\u2AB1", "\u2AB1"], /* PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO */ + ["\u2AB2", "\u2AB2"], /* SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO */ + ["\u2AB3", "\u2AB3"], /* PRECEDES ABOVE EQUALS SIGN */ + ["\u2AB4", "\u2AB4"], /* SUCCEEDS ABOVE EQUALS SIGN */ + ["\u2AB5", "\u2AB5"], /* PRECEDES ABOVE NOT EQUAL TO */ + ["\u2AB6", "\u2AB6"], /* SUCCEEDS ABOVE NOT EQUAL TO */ + ["\u2AB7", "\u2AB7"], /* PRECEDES ABOVE ALMOST EQUAL TO */ + ["\u2AB8", "\u2AB8"], /* SUCCEEDS ABOVE ALMOST EQUAL TO */ + ["\u2AB9", "\u2AB9"], /* PRECEDES ABOVE NOT ALMOST EQUAL TO */ + ["\u2ABA", "\u2ABA"], /* SUCCEEDS ABOVE NOT ALMOST EQUAL TO */ + ["\u2ABB", "\u2ABB"], /* DOUBLE PRECEDES */ + ["\u2ABC", "\u2ABC"], /* DOUBLE SUCCEEDS */ + ["\u2ABD", "\u2ABD"], /* SUBSET WITH DOT */ + ["\u2ABE", "\u2ABE"], /* SUPERSET WITH DOT */ + ["\u2ABF", "\u2ABF"], /* SUBSET WITH PLUS SIGN BELOW */ + ["\u2AC0", "\u2AC0"], /* SUPERSET WITH PLUS SIGN BELOW */ + ["\u2AC1", "\u2AC1"], /* SUBSET WITH MULTIPLICATION SIGN BELOW */ + ["\u2AC2", "\u2AC2"], /* SUPERSET WITH MULTIPLICATION SIGN BELOW */ + ["\u2AC3", "\u2AC3"], /* SUBSET OF OR EQUAL TO WITH DOT ABOVE */ + ["\u2AC4", "\u2AC4"], /* SUPERSET OF OR EQUAL TO WITH DOT ABOVE */ + ["\u2AC5", "\u2AC5"], /* SUBSET OF ABOVE EQUALS SIGN */ + ["\u2AC6", "\u2AC6"], /* SUPERSET OF ABOVE EQUALS SIGN */ + ["\u2AC7", "\u2AC7"], /* SUBSET OF ABOVE TILDE OPERATOR */ + ["\u2AC8", "\u2AC8"], /* SUPERSET OF ABOVE TILDE OPERATOR */ + ["\u2AC9", "\u2AC9"], /* SUBSET OF ABOVE ALMOST EQUAL TO */ + ["\u2ACA", "\u2ACA"], /* SUPERSET OF ABOVE ALMOST EQUAL TO */ + ["\u2ACB", "\u2ACB"], /* SUBSET OF ABOVE NOT EQUAL TO */ + ["\u2ACC", "\u2ACC"], /* SUPERSET OF ABOVE NOT EQUAL TO */ + ["\u2ACD", "\u2ACD"], /* SQUARE LEFT OPEN BOX OPERATOR */ + ["\u2ACE", "\u2ACE"], /* SQUARE RIGHT OPEN BOX OPERATOR */ + ["\u2ACF", "\u2ACF"], /* CLOSED SUBSET */ + ["\u2AD0", "\u2AD0"], /* CLOSED SUPERSET */ + ["\u2AD1", "\u2AD1"], /* CLOSED SUBSET OR EQUAL TO */ + ["\u2AD2", "\u2AD2"], /* CLOSED SUPERSET OR EQUAL TO */ + ["\u2AD3", "\u2AD3"], /* SUBSET ABOVE SUPERSET */ + ["\u2AD4", "\u2AD4"], /* SUPERSET ABOVE SUBSET */ + ["\u2AD5", "\u2AD5"], /* SUBSET ABOVE SUBSET */ + ["\u2AD6", "\u2AD6"], /* SUPERSET ABOVE SUPERSET */ + ["\u2AD7", "\u2AD7"], /* SUPERSET BESIDE SUBSET */ + ["\u2AD8", "\u2AD8"], /* SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET */ + ["\u2AD9", "\u2AD9"], /* ELEMENT OF OPENING DOWNWARDS */ + ["\u2ADA", "\u2ADA"], /* PITCHFORK WITH TEE TOP */ + ["\u2ADB", "\u2ADB"], /* TRANSVERSAL INTERSECTION */ + ["\u2ADC", "\u2ADC"], /* FORKING */ + ["\u2ADD", "\u2ADD"], /* NONFORKING */ + ["\u2ADE", "\u2ADE"], /* SHORT LEFT TACK */ + ["\u2ADF", "\u2ADF"], /* SHORT DOWN TACK */ + ["\u2AE0", "\u2AE0"], /* SHORT UP TACK */ + ["\u2AE1", "\u2AE1"], /* PERPENDICULAR WITH S */ + ["\u2AE2", "\u2AE2"], /* VERTICAL BAR TRIPLE RIGHT TURNSTILE */ + ["\u2AE3", "\u2AE3"], /* DOUBLE VERTICAL BAR LEFT TURNSTILE */ + ["\u2AE4", "\u2AE4"], /* VERTICAL BAR DOUBLE LEFT TURNSTILE */ + ["\u2AE5", "\u2AE5"], /* DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE */ + ["\u2AE6", "\u2AE6"], /* LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL */ + ["\u2AE7", "\u2AE7"], /* SHORT DOWN TACK WITH OVERBAR */ + ["\u2AE8", "\u2AE8"], /* SHORT UP TACK WITH UNDERBAR */ + ["\u2AE9", "\u2AE9"], /* SHORT UP TACK ABOVE SHORT DOWN TACK */ + ["\u2AEA", "\u2AEA"], /* DOUBLE DOWN TACK */ + ["\u2AEB", "\u2AEB"], /* DOUBLE UP TACK */ + ["\u2AEC", "\u2AEC"], /* DOUBLE STROKE NOT SIGN */ + ["\u2AED", "\u2AED"], /* REVERSED DOUBLE STROKE NOT SIGN */ + ["\u2AEE", "\u2AEE"], /* DOES NOT DIVIDE WITH REVERSED NEGATION SLASH */ + ["\u2AEF", "\u2AEF"], /* VERTICAL LINE WITH CIRCLE ABOVE */ + ["\u2AF0", "\u2AF0"], /* VERTICAL LINE WITH CIRCLE BELOW */ + ["\u2AF1", "\u2AF1"], /* DOWN TACK WITH CIRCLE BELOW */ + ["\u2AF2", "\u2AF2"], /* PARALLEL WITH HORIZONTAL STROKE */ + ["\u2AF3", "\u2AF3"], /* PARALLEL WITH TILDE OPERATOR */ + ["\u2AF4", "\u2AF4"], /* TRIPLE VERTICAL BAR BINARY RELATION */ + ["\u2AF5", "\u2AF5"], /* TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE */ + ["\u2AF6", "\u2AF6"], /* TRIPLE COLON OPERATOR */ + ["\u2AF7", "\u2AF7"], /* TRIPLE NESTED LESS-THAN */ + ["\u2AF8", "\u2AF8"], /* TRIPLE NESTED GREATER-THAN */ + ["\u2AF9", "\u2AF9"], /* DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO */ + ["\u2AFA", "\u2AFA"], /* DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO */ + ["\u2AFB", "\u2AFB"], /* TRIPLE SOLIDUS BINARY RELATION */ + ["\u2AFC", "\u2AFC"], /* LARGE TRIPLE VERTICAL BAR OPERATOR */ + ["\u2AFD", "\u2AFD"], /* DOUBLE SOLIDUS OPERATOR */ + ["\u2AFE", "\u2AFE"], /* WHITE VERTICAL BAR */ + ["\u2AFF", "\u2AFF"], /* N-ARY WHITE VERTICAL BAR */ + ["\u2B00", "\u2B00"], /* NORTH EAST WHITE ARROW */ + ["\u2B01", "\u2B01"], /* NORTH WEST WHITE ARROW */ + ["\u2B02", "\u2B02"], /* SOUTH EAST WHITE ARROW */ + ["\u2B03", "\u2B03"], /* SOUTH WEST WHITE ARROW */ + ["\u2B04", "\u2B04"], /* LEFT RIGHT WHITE ARROW */ + ["\u2B05", "\u2B05"], /* LEFTWARDS BLACK ARROW */ + ["\u2B06", "\u2B06"], /* UPWARDS BLACK ARROW */ + ["\u2B07", "\u2B07"], /* DOWNWARDS BLACK ARROW */ + ["\u2B08", "\u2B08"], /* NORTH EAST BLACK ARROW */ + ["\u2B09", "\u2B09"], /* NORTH WEST BLACK ARROW */ + ["\u2B0A", "\u2B0A"], /* SOUTH EAST BLACK ARROW */ + ["\u2B0B", "\u2B0B"], /* SOUTH WEST BLACK ARROW */ + ["\u2B0C", "\u2B0C"], /* LEFT RIGHT BLACK ARROW */ + ["\u2B0D", "\u2B0D"], /* UP DOWN BLACK ARROW */ + ["\u2B0E", "\u2B0E"], /* RIGHTWARDS ARROW WITH TIP DOWNWARDS */ + ["\u2B0F", "\u2B0F"], /* RIGHTWARDS ARROW WITH TIP UPWARDS */ + ["\u2B10", "\u2B10"], /* LEFTWARDS ARROW WITH TIP DOWNWARDS */ + ["\u2B11", "\u2B11"], /* LEFTWARDS ARROW WITH TIP UPWARDS */ + ["\u2B12", "\u2B12"], /* SQUARE WITH TOP HALF BLACK */ + ["\u2B13", "\u2B13"], /* SQUARE WITH BOTTOM HALF BLACK */ + ["\u2B14", "\u2B14"], /* SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK */ + ["\u2B15", "\u2B15"], /* SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK */ + ["\u2B16", "\u2B16"], /* DIAMOND WITH LEFT HALF BLACK */ + ["\u2B17", "\u2B17"], /* DIAMOND WITH RIGHT HALF BLACK */ + ["\u2B18", "\u2B18"], /* DIAMOND WITH TOP HALF BLACK */ + ["\u2B19", "\u2B19"], /* DIAMOND WITH BOTTOM HALF BLACK */ + ["\u2B1A", "\u2B1A"], /* DOTTED SQUARE */ + ["\u2B1B", "\u2B1B"], /* BLACK LARGE SQUARE */ + ["\u2B1C", "\u2B1C"], /* WHITE LARGE SQUARE */ + ["\u2B1D", "\u2B1D"], /* BLACK VERY SMALL SQUARE */ + ["\u2B1E", "\u2B1E"], /* WHITE VERY SMALL SQUARE */ + ["\u2B1F", "\u2B1F"], /* BLACK PENTAGON */ + ["\u2B20", "\u2B20"], /* WHITE PENTAGON */ + ["\u2B21", "\u2B21"], /* WHITE HEXAGON */ + ["\u2B22", "\u2B22"], /* BLACK HEXAGON */ + ["\u2B23", "\u2B23"], /* HORIZONTAL BLACK HEXAGON */ + ["\u2B24", "\u2B24"], /* BLACK LARGE CIRCLE */ + ["\u2B25", "\u2B25"], /* BLACK MEDIUM DIAMOND */ + ["\u2B26", "\u2B26"], /* WHITE MEDIUM DIAMOND */ + ["\u2B27", "\u2B27"], /* BLACK MEDIUM LOZENGE */ + ["\u2B28", "\u2B28"], /* WHITE MEDIUM LOZENGE */ + ["\u2B29", "\u2B29"], /* BLACK SMALL DIAMOND */ + ["\u2B2A", "\u2B2A"], /* BLACK SMALL LOZENGE */ + ["\u2B2B", "\u2B2B"], /* WHITE SMALL LOZENGE */ + ["\u2B2C", "\u2B2C"], /* BLACK HORIZONTAL ELLIPSE */ + ["\u2B2D", "\u2B2D"], /* WHITE HORIZONTAL ELLIPSE */ + ["\u2B2E", "\u2B2E"], /* BLACK VERTICAL ELLIPSE */ + ["\u2B2F", "\u2B2F"], /* WHITE VERTICAL ELLIPSE */ + ["\u2B30", "\u2B30"], /* LEFT ARROW WITH SMALL CIRCLE */ + ["\u2B31", "\u2B31"], /* THREE LEFTWARDS ARROWS */ + ["\u2B32", "\u2B32"], /* LEFT ARROW WITH CIRCLED PLUS */ + ["\u2B33", "\u2B33"], /* LONG LEFTWARDS SQUIGGLE ARROW */ + ["\u2B34", "\u2B34"], /* LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE */ + ["\u2B35", "\u2B35"], /* LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE */ + ["\u2B36", "\u2B36"], /* LEFTWARDS TWO-HEADED ARROW FROM BAR */ + ["\u2B37", "\u2B37"], /* LEFTWARDS TWO-HEADED TRIPLE DASH ARROW */ + ["\u2B38", "\u2B38"], /* LEFTWARDS ARROW WITH DOTTED STEM */ + ["\u2B39", "\u2B39"], /* LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE */ + ["\u2B3A", "\u2B3A"], /* LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + ["\u2B3B", "\u2B3B"], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL */ + ["\u2B3C", "\u2B3C"], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE */ + ["\u2B3D", "\u2B3D"], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + ["\u2B3E", "\u2B3E"], /* LEFTWARDS ARROW THROUGH X */ + ["\u2B3F", "\u2B3F"], /* WAVE ARROW POINTING DIRECTLY LEFT */ + ["\u2B40", "\u2B40"], /* EQUALS SIGN ABOVE LEFTWARDS ARROW */ + ["\u2B41", "\u2B41"], /* REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW */ + ["\u2B42", "\u2B42"], /* LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO */ + ["\u2B43", "\u2B43"], /* RIGHTWARDS ARROW THROUGH GREATER-THAN */ + ["\u2B44", "\u2B44"], /* RIGHTWARDS ARROW THROUGH SUPERSET */ + ["\u2B45", "\u2B45"], /* LEFTWARDS QUADRUPLE ARROW */ + ["\u2B46", "\u2B46"], /* RIGHTWARDS QUADRUPLE ARROW */ + ["\u2B47", "\u2B47"], /* REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW */ + ["\u2B48", "\u2B48"], /* RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO */ + ["\u2B49", "\u2B49"], /* TILDE OPERATOR ABOVE LEFTWARDS ARROW */ + ["\u2B4A", "\u2B4A"], /* LEFTWARDS ARROW ABOVE ALMOST EQUAL TO */ + ["\u2B4B", "\u2B4B"], /* LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR */ + ["\u2B4C", "\u2B4C"], /* RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR */ + ["\u2B4D", "\u2B4D"], /* DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW */ + ["\u2B4E", "\u2B4E"], /* SHORT SLANTED NORTH ARROW */ + ["\u2B4F", "\u2B4F"], /* SHORT BACKSLANTED SOUTH ARROW */ + ["\u2B50", "\u2B50"], /* WHITE MEDIUM STAR */ + ["\u2B51", "\u2B51"], /* BLACK SMALL STAR */ + ["\u2B52", "\u2B52"], /* WHITE SMALL STAR */ + ["\u2B53", "\u2B53"], /* BLACK RIGHT-POINTING PENTAGON */ + ["\u2B54", "\u2B54"], /* WHITE RIGHT-POINTING PENTAGON */ + ["\u2B55", "\u2B55"], /* HEAVY LARGE CIRCLE */ + ["\u2B56", "\u2B56"], /* HEAVY OVAL WITH OVAL INSIDE */ + ["\u2B57", "\u2B57"], /* HEAVY CIRCLE WITH CIRCLE INSIDE */ + ["\u2B58", "\u2B58"], /* HEAVY CIRCLE */ + ["\u2B59", "\u2B59"], /* HEAVY CIRCLED SALTIRE */ + ["\u2B5A", "\u2B5A"], /* SLANTED NORTH ARROW WITH HOOKED HEAD */ + ["\u2B5B", "\u2B5B"], /* BACKSLANTED SOUTH ARROW WITH HOOKED TAIL */ + ["\u2B5C", "\u2B5C"], /* SLANTED NORTH ARROW WITH HORIZONTAL TAIL */ + ["\u2B5D", "\u2B5D"], /* BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL */ + ["\u2B5E", "\u2B5E"], /* BENT ARROW POINTING DOWNWARDS THEN NORTH EAST */ + ["\u2B5F", "\u2B5F"], /* SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST */ + ["\u2B60", "\u2B60"], /* LEFTWARDS TRIANGLE-HEADED ARROW */ + ["\u2B61", "\u2B61"], /* UPWARDS TRIANGLE-HEADED ARROW */ + ["\u2B62", "\u2B62"], /* RIGHTWARDS TRIANGLE-HEADED ARROW */ + ["\u2B63", "\u2B63"], /* DOWNWARDS TRIANGLE-HEADED ARROW */ + ["\u2B64", "\u2B64"], /* LEFT RIGHT TRIANGLE-HEADED ARROW */ + ["\u2B65", "\u2B65"], /* UP DOWN TRIANGLE-HEADED ARROW */ + ["\u2B66", "\u2B66"], /* NORTH WEST TRIANGLE-HEADED ARROW */ + ["\u2B67", "\u2B67"], /* NORTH EAST TRIANGLE-HEADED ARROW */ + ["\u2B68", "\u2B68"], /* SOUTH EAST TRIANGLE-HEADED ARROW */ + ["\u2B69", "\u2B69"], /* SOUTH WEST TRIANGLE-HEADED ARROW */ + ["\u2B6A", "\u2B6A"], /* LEFTWARDS TRIANGLE-HEADED DASHED ARROW */ + ["\u2B6B", "\u2B6B"], /* UPWARDS TRIANGLE-HEADED DASHED ARROW */ + ["\u2B6C", "\u2B6C"], /* RIGHTWARDS TRIANGLE-HEADED DASHED ARROW */ + ["\u2B6D", "\u2B6D"], /* DOWNWARDS TRIANGLE-HEADED DASHED ARROW */ + ["\u2B6E", "\u2B6E"], /* CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW */ + ["\u2B6F", "\u2B6F"], /* ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW */ + ["\u2B70", "\u2B70"], /* LEFTWARDS TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B71", "\u2B71"], /* UPWARDS TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B72", "\u2B72"], /* RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B73", "\u2B73"], /* DOWNWARDS TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B74", "\u2B74"], + ["\u2B75", "\u2B75"], + ["\u2B76", "\u2B76"], /* NORTH WEST TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B77", "\u2B77"], /* NORTH EAST TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B78", "\u2B78"], /* SOUTH EAST TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B79", "\u2B79"], /* SOUTH WEST TRIANGLE-HEADED ARROW TO BAR */ + ["\u2B7A", "\u2B7A"], /* LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */ + ["\u2B7B", "\u2B7B"], /* UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */ + ["\u2B7C", "\u2B7C"], /* RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */ + ["\u2B7D", "\u2B7D"], /* DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE */ + ["\u2B7E", "\u2B7E"], /* HORIZONTAL TAB KEY */ + ["\u2B7F", "\u2B7F"], /* VERTICAL TAB KEY */ + ["\u2B80", "\u2B80"], /* LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW */ + ["\u2B81", "\u2B81"], /* UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW */ + ["\u2B82", "\u2B82"], /* RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW */ + ["\u2B83", "\u2B83"], /* DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW */ + ["\u2B84", "\u2B84"], /* LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS */ + ["\u2B85", "\u2B85"], /* UPWARDS TRIANGLE-HEADED PAIRED ARROWS */ + ["\u2B86", "\u2B86"], /* RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS */ + ["\u2B87", "\u2B87"], /* DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS */ + ["\u2B88", "\u2B88"], /* LEFTWARDS BLACK CIRCLED WHITE ARROW */ + ["\u2B89", "\u2B89"], /* UPWARDS BLACK CIRCLED WHITE ARROW */ + ["\u2B8A", "\u2B8A"], /* RIGHTWARDS BLACK CIRCLED WHITE ARROW */ + ["\u2B8B", "\u2B8B"], /* DOWNWARDS BLACK CIRCLED WHITE ARROW */ + ["\u2B8C", "\u2B8C"], /* ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW */ + ["\u2B8D", "\u2B8D"], /* ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW */ + ["\u2B8E", "\u2B8E"], /* ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW */ + ["\u2B8F", "\u2B8F"], /* ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW */ + ["\u2B90", "\u2B90"], /* RETURN LEFT */ + ["\u2B91", "\u2B91"], /* RETURN RIGHT */ + ["\u2B92", "\u2B92"], /* NEWLINE LEFT */ + ["\u2B93", "\u2B93"], /* NEWLINE RIGHT */ + ["\u2B94", "\u2B94"], /* FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE */ + ["\u2B95", "\u2B95"], /* RIGHTWARDS BLACK ARROW */ + ["\u2B96", "\u2B96"], + ["\u2B97", "\u2B97"], /* SYMBOL FOR TYPE A ELECTRONICS */ + ["\u2B98", "\u2B98"], /* THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD */ + ["\u2B99", "\u2B99"], /* THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD */ + ["\u2B9A", "\u2B9A"], /* THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD */ + ["\u2B9B", "\u2B9B"], /* THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD */ + ["\u2B9C", "\u2B9C"], /* BLACK LEFTWARDS EQUILATERAL ARROWHEAD */ + ["\u2B9D", "\u2B9D"], /* BLACK UPWARDS EQUILATERAL ARROWHEAD */ + ["\u2B9E", "\u2B9E"], /* BLACK RIGHTWARDS EQUILATERAL ARROWHEAD */ + ["\u2B9F", "\u2B9F"], /* BLACK DOWNWARDS EQUILATERAL ARROWHEAD */ + ["\u2BA0", "\u2BA0"], /* DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS */ + ["\u2BA1", "\u2BA1"], /* DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS */ + ["\u2BA2", "\u2BA2"], /* UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS */ + ["\u2BA3", "\u2BA3"], /* UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS */ + ["\u2BA4", "\u2BA4"], /* LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS */ + ["\u2BA5", "\u2BA5"], /* RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS */ + ["\u2BA6", "\u2BA6"], /* LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS */ + ["\u2BA7", "\u2BA7"], /* RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS */ + ["\u2BA8", "\u2BA8"], /* BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW */ + ["\u2BA9", "\u2BA9"], /* BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW */ + ["\u2BAA", "\u2BAA"], /* BLACK CURVED UPWARDS AND LEFTWARDS ARROW */ + ["\u2BAB", "\u2BAB"], /* BLACK CURVED UPWARDS AND RIGHTWARDS ARROW */ + ["\u2BAC", "\u2BAC"], /* BLACK CURVED LEFTWARDS AND UPWARDS ARROW */ + ["\u2BAD", "\u2BAD"], /* BLACK CURVED RIGHTWARDS AND UPWARDS ARROW */ + ["\u2BAE", "\u2BAE"], /* BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW */ + ["\u2BAF", "\u2BAF"], /* BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW */ + ["\u2BB0", "\u2BB0"], /* RIBBON ARROW DOWN LEFT */ + ["\u2BB1", "\u2BB1"], /* RIBBON ARROW DOWN RIGHT */ + ["\u2BB2", "\u2BB2"], /* RIBBON ARROW UP LEFT */ + ["\u2BB3", "\u2BB3"], /* RIBBON ARROW UP RIGHT */ + ["\u2BB4", "\u2BB4"], /* RIBBON ARROW LEFT UP */ + ["\u2BB5", "\u2BB5"], /* RIBBON ARROW RIGHT UP */ + ["\u2BB6", "\u2BB6"], /* RIBBON ARROW LEFT DOWN */ + ["\u2BB7", "\u2BB7"], /* RIBBON ARROW RIGHT DOWN */ + ["\u2BB8", "\u2BB8"], /* UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR */ + ["\u2BB9", "\u2BB9"], /* UP ARROWHEAD IN A RECTANGLE BOX */ + ["\u2BBA", "\u2BBA"], /* OVERLAPPING WHITE SQUARES */ + ["\u2BBB", "\u2BBB"], /* OVERLAPPING WHITE AND BLACK SQUARES */ + ["\u2BBC", "\u2BBC"], /* OVERLAPPING BLACK SQUARES */ + ["\u2BBD", "\u2BBD"], /* BALLOT BOX WITH LIGHT X */ + ["\u2BBE", "\u2BBE"], /* CIRCLED X */ + ["\u2BBF", "\u2BBF"], /* CIRCLED BOLD X */ + ["\u2BC0", "\u2BC0"], /* BLACK SQUARE CENTRED */ + ["\u2BC1", "\u2BC1"], /* BLACK DIAMOND CENTRED */ + ["\u2BC2", "\u2BC2"], /* TURNED BLACK PENTAGON */ + ["\u2BC3", "\u2BC3"], /* HORIZONTAL BLACK OCTAGON */ + ["\u2BC4", "\u2BC4"], /* BLACK OCTAGON */ + ["\u2BC5", "\u2BC5"], /* BLACK MEDIUM UP-POINTING TRIANGLE CENTRED */ + ["\u2BC6", "\u2BC6"], /* BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED */ + ["\u2BC7", "\u2BC7"], /* BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED */ + ["\u2BC8", "\u2BC8"], /* BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED */ + ["\u2BC9", "\u2BC9"], /* NEPTUNE FORM TWO */ + ["\u2BCA", "\u2BCA"], /* TOP HALF BLACK CIRCLE */ + ["\u2BCB", "\u2BCB"], /* BOTTOM HALF BLACK CIRCLE */ + ["\u2BCC", "\u2BCC"], /* LIGHT FOUR POINTED BLACK CUSP */ + ["\u2BCD", "\u2BCD"], /* ROTATED LIGHT FOUR POINTED BLACK CUSP */ + ["\u2BCE", "\u2BCE"], /* WHITE FOUR POINTED CUSP */ + ["\u2BCF", "\u2BCF"], /* ROTATED WHITE FOUR POINTED CUSP */ + ["\u2BD0", "\u2BD0"], /* SQUARE POSITION INDICATOR */ + ["\u2BD1", "\u2BD1"], /* UNCERTAINTY SIGN */ + ["\u2BD2", "\u2BD2"], /* GROUP MARK */ + ["\u2BD3", "\u2BD3"], /* PLUTO FORM TWO */ + ["\u2BD4", "\u2BD4"], /* PLUTO FORM THREE */ + ["\u2BD5", "\u2BD5"], /* PLUTO FORM FOUR */ + ["\u2BD6", "\u2BD6"], /* PLUTO FORM FIVE */ + ["\u2BD7", "\u2BD7"], /* TRANSPLUTO */ + ["\u2BD8", "\u2BD8"], /* PROSERPINA */ + ["\u2BD9", "\u2BD9"], /* ASTRAEA */ + ["\u2BDA", "\u2BDA"], /* HYGIEA */ + ["\u2BDB", "\u2BDB"], /* PHOLUS */ + ["\u2BDC", "\u2BDC"], /* NESSUS */ + ["\u2BDD", "\u2BDD"], /* WHITE MOON SELENA */ + ["\u2BDE", "\u2BDE"], /* BLACK DIAMOND ON CROSS */ + ["\u2BDF", "\u2BDF"], /* TRUE LIGHT MOON ARTA */ + ["\u2BE0", "\u2BE0"], /* CUPIDO */ + ["\u2BE1", "\u2BE1"], /* HADES */ + ["\u2BE2", "\u2BE2"], /* ZEUS */ + ["\u2BE3", "\u2BE3"], /* KRONOS */ + ["\u2BE4", "\u2BE4"], /* APOLLON */ + ["\u2BE5", "\u2BE5"], /* ADMETOS */ + ["\u2BE6", "\u2BE6"], /* VULCANUS */ + ["\u2BE7", "\u2BE7"], /* POSEIDON */ + ["\u2BE8", "\u2BE8"], /* LEFT HALF BLACK STAR */ + ["\u2BE9", "\u2BE9"], /* RIGHT HALF BLACK STAR */ + ["\u2BEA", "\u2BEA"], /* STAR WITH LEFT HALF BLACK */ + ["\u2BEB", "\u2BEB"], /* STAR WITH RIGHT HALF BLACK */ + ["\u2BEC", "\u2BEC"], /* LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */ + ["\u2BED", "\u2BED"], /* UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */ + ["\u2BEE", "\u2BEE"], /* RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */ + ["\u2BEF", "\u2BEF"], /* DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS */ + ["\u2BF0", "\u2BF0"], /* ERIS FORM ONE */ + ["\u2BF1", "\u2BF1"], /* ERIS FORM TWO */ + ["\u2BF2", "\u2BF2"], /* SEDNA */ + ["\u2BF3", "\u2BF3"], /* RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE */ + ["\u2BF4", "\u2BF4"], /* RUSSIAN ASTROLOGICAL SYMBOL NOVILE */ + ["\u2BF5", "\u2BF5"], /* RUSSIAN ASTROLOGICAL SYMBOL QUINTILE */ + ["\u2BF6", "\u2BF6"], /* RUSSIAN ASTROLOGICAL SYMBOL BINOVILE */ + ["\u2BF7", "\u2BF7"], /* RUSSIAN ASTROLOGICAL SYMBOL SENTAGON */ + ["\u2BF8", "\u2BF8"], /* RUSSIAN ASTROLOGICAL SYMBOL TREDECILE */ + ["\u2BF9", "\u2BF9"], /* EQUALS SIGN WITH INFINITY BELOW */ + ["\u2BFA", "\u2BFA"], /* UNITED SYMBOL */ + ["\u2BFB", "\u2BFB"], /* SEPARATED SYMBOL */ + ["\u2BFC", "\u2BFC"], /* DOUBLED SYMBOL */ + ["\u2BFD", "\u2BFD"], /* PASSED SYMBOL */ + ["\u2BFE", "\u2BFE"], /* REVERSED RIGHT ANGLE */ + ["\u2BFF", "\u2BFF"], /* HELLSCHREIBER PAUSE SYMBOL */ + ["\u2C00", "\u2C30"], /* GLAGOLITIC CAPITAL LETTER AZU */ + ["\u2C01", "\u2C31"], /* GLAGOLITIC CAPITAL LETTER BUKY */ + ["\u2C02", "\u2C32"], /* GLAGOLITIC CAPITAL LETTER VEDE */ + ["\u2C03", "\u2C33"], /* GLAGOLITIC CAPITAL LETTER GLAGOLI */ + ["\u2C04", "\u2C34"], /* GLAGOLITIC CAPITAL LETTER DOBRO */ + ["\u2C05", "\u2C35"], /* GLAGOLITIC CAPITAL LETTER YESTU */ + ["\u2C06", "\u2C36"], /* GLAGOLITIC CAPITAL LETTER ZHIVETE */ + ["\u2C07", "\u2C37"], /* GLAGOLITIC CAPITAL LETTER DZELO */ + ["\u2C08", "\u2C38"], /* GLAGOLITIC CAPITAL LETTER ZEMLJA */ + ["\u2C09", "\u2C39"], /* GLAGOLITIC CAPITAL LETTER IZHE */ + ["\u2C0A", "\u2C3A"], /* GLAGOLITIC CAPITAL LETTER INITIAL IZHE */ + ["\u2C0B", "\u2C3B"], /* GLAGOLITIC CAPITAL LETTER I */ + ["\u2C0C", "\u2C3C"], /* GLAGOLITIC CAPITAL LETTER DJERVI */ + ["\u2C0D", "\u2C3D"], /* GLAGOLITIC CAPITAL LETTER KAKO */ + ["\u2C0E", "\u2C3E"], /* GLAGOLITIC CAPITAL LETTER LJUDIJE */ + ["\u2C0F", "\u2C3F"], /* GLAGOLITIC CAPITAL LETTER MYSLITE */ + ["\u2C10", "\u2C40"], /* GLAGOLITIC CAPITAL LETTER NASHI */ + ["\u2C11", "\u2C41"], /* GLAGOLITIC CAPITAL LETTER ONU */ + ["\u2C12", "\u2C42"], /* GLAGOLITIC CAPITAL LETTER POKOJI */ + ["\u2C13", "\u2C43"], /* GLAGOLITIC CAPITAL LETTER RITSI */ + ["\u2C14", "\u2C44"], /* GLAGOLITIC CAPITAL LETTER SLOVO */ + ["\u2C15", "\u2C45"], /* GLAGOLITIC CAPITAL LETTER TVRIDO */ + ["\u2C16", "\u2C46"], /* GLAGOLITIC CAPITAL LETTER UKU */ + ["\u2C17", "\u2C47"], /* GLAGOLITIC CAPITAL LETTER FRITU */ + ["\u2C18", "\u2C48"], /* GLAGOLITIC CAPITAL LETTER HERU */ + ["\u2C19", "\u2C49"], /* GLAGOLITIC CAPITAL LETTER OTU */ + ["\u2C1A", "\u2C4A"], /* GLAGOLITIC CAPITAL LETTER PE */ + ["\u2C1B", "\u2C4B"], /* GLAGOLITIC CAPITAL LETTER SHTA */ + ["\u2C1C", "\u2C4C"], /* GLAGOLITIC CAPITAL LETTER TSI */ + ["\u2C1D", "\u2C4D"], /* GLAGOLITIC CAPITAL LETTER CHRIVI */ + ["\u2C1E", "\u2C4E"], /* GLAGOLITIC CAPITAL LETTER SHA */ + ["\u2C1F", "\u2C4F"], /* GLAGOLITIC CAPITAL LETTER YERU */ + ["\u2C20", "\u2C50"], /* GLAGOLITIC CAPITAL LETTER YERI */ + ["\u2C21", "\u2C51"], /* GLAGOLITIC CAPITAL LETTER YATI */ + ["\u2C22", "\u2C52"], /* GLAGOLITIC CAPITAL LETTER SPIDERY HA */ + ["\u2C23", "\u2C53"], /* GLAGOLITIC CAPITAL LETTER YU */ + ["\u2C24", "\u2C54"], /* GLAGOLITIC CAPITAL LETTER SMALL YUS */ + ["\u2C25", "\u2C55"], /* GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL */ + ["\u2C26", "\u2C56"], /* GLAGOLITIC CAPITAL LETTER YO */ + ["\u2C27", "\u2C57"], /* GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS */ + ["\u2C28", "\u2C58"], /* GLAGOLITIC CAPITAL LETTER BIG YUS */ + ["\u2C29", "\u2C59"], /* GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS */ + ["\u2C2A", "\u2C5A"], /* GLAGOLITIC CAPITAL LETTER FITA */ + ["\u2C2B", "\u2C5B"], /* GLAGOLITIC CAPITAL LETTER IZHITSA */ + ["\u2C2C", "\u2C5C"], /* GLAGOLITIC CAPITAL LETTER SHTAPIC */ + ["\u2C2D", "\u2C5D"], /* GLAGOLITIC CAPITAL LETTER TROKUTASTI A */ + ["\u2C2E", "\u2C5E"], /* GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE */ + ["\u2C2F", "\u2C5F"], /* GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI */ + ["\u2C00", "\u2C30"], /* GLAGOLITIC SMALL LETTER AZU */ + ["\u2C01", "\u2C31"], /* GLAGOLITIC SMALL LETTER BUKY */ + ["\u2C02", "\u2C32"], /* GLAGOLITIC SMALL LETTER VEDE */ + ["\u2C03", "\u2C33"], /* GLAGOLITIC SMALL LETTER GLAGOLI */ + ["\u2C04", "\u2C34"], /* GLAGOLITIC SMALL LETTER DOBRO */ + ["\u2C05", "\u2C35"], /* GLAGOLITIC SMALL LETTER YESTU */ + ["\u2C06", "\u2C36"], /* GLAGOLITIC SMALL LETTER ZHIVETE */ + ["\u2C07", "\u2C37"], /* GLAGOLITIC SMALL LETTER DZELO */ + ["\u2C08", "\u2C38"], /* GLAGOLITIC SMALL LETTER ZEMLJA */ + ["\u2C09", "\u2C39"], /* GLAGOLITIC SMALL LETTER IZHE */ + ["\u2C0A", "\u2C3A"], /* GLAGOLITIC SMALL LETTER INITIAL IZHE */ + ["\u2C0B", "\u2C3B"], /* GLAGOLITIC SMALL LETTER I */ + ["\u2C0C", "\u2C3C"], /* GLAGOLITIC SMALL LETTER DJERVI */ + ["\u2C0D", "\u2C3D"], /* GLAGOLITIC SMALL LETTER KAKO */ + ["\u2C0E", "\u2C3E"], /* GLAGOLITIC SMALL LETTER LJUDIJE */ + ["\u2C0F", "\u2C3F"], /* GLAGOLITIC SMALL LETTER MYSLITE */ + ["\u2C10", "\u2C40"], /* GLAGOLITIC SMALL LETTER NASHI */ + ["\u2C11", "\u2C41"], /* GLAGOLITIC SMALL LETTER ONU */ + ["\u2C12", "\u2C42"], /* GLAGOLITIC SMALL LETTER POKOJI */ + ["\u2C13", "\u2C43"], /* GLAGOLITIC SMALL LETTER RITSI */ + ["\u2C14", "\u2C44"], /* GLAGOLITIC SMALL LETTER SLOVO */ + ["\u2C15", "\u2C45"], /* GLAGOLITIC SMALL LETTER TVRIDO */ + ["\u2C16", "\u2C46"], /* GLAGOLITIC SMALL LETTER UKU */ + ["\u2C17", "\u2C47"], /* GLAGOLITIC SMALL LETTER FRITU */ + ["\u2C18", "\u2C48"], /* GLAGOLITIC SMALL LETTER HERU */ + ["\u2C19", "\u2C49"], /* GLAGOLITIC SMALL LETTER OTU */ + ["\u2C1A", "\u2C4A"], /* GLAGOLITIC SMALL LETTER PE */ + ["\u2C1B", "\u2C4B"], /* GLAGOLITIC SMALL LETTER SHTA */ + ["\u2C1C", "\u2C4C"], /* GLAGOLITIC SMALL LETTER TSI */ + ["\u2C1D", "\u2C4D"], /* GLAGOLITIC SMALL LETTER CHRIVI */ + ["\u2C1E", "\u2C4E"], /* GLAGOLITIC SMALL LETTER SHA */ + ["\u2C1F", "\u2C4F"], /* GLAGOLITIC SMALL LETTER YERU */ + ["\u2C20", "\u2C50"], /* GLAGOLITIC SMALL LETTER YERI */ + ["\u2C21", "\u2C51"], /* GLAGOLITIC SMALL LETTER YATI */ + ["\u2C22", "\u2C52"], /* GLAGOLITIC SMALL LETTER SPIDERY HA */ + ["\u2C23", "\u2C53"], /* GLAGOLITIC SMALL LETTER YU */ + ["\u2C24", "\u2C54"], /* GLAGOLITIC SMALL LETTER SMALL YUS */ + ["\u2C25", "\u2C55"], /* GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL */ + ["\u2C26", "\u2C56"], /* GLAGOLITIC SMALL LETTER YO */ + ["\u2C27", "\u2C57"], /* GLAGOLITIC SMALL LETTER IOTATED SMALL YUS */ + ["\u2C28", "\u2C58"], /* GLAGOLITIC SMALL LETTER BIG YUS */ + ["\u2C29", "\u2C59"], /* GLAGOLITIC SMALL LETTER IOTATED BIG YUS */ + ["\u2C2A", "\u2C5A"], /* GLAGOLITIC SMALL LETTER FITA */ + ["\u2C2B", "\u2C5B"], /* GLAGOLITIC SMALL LETTER IZHITSA */ + ["\u2C2C", "\u2C5C"], /* GLAGOLITIC SMALL LETTER SHTAPIC */ + ["\u2C2D", "\u2C5D"], /* GLAGOLITIC SMALL LETTER TROKUTASTI A */ + ["\u2C2E", "\u2C5E"], /* GLAGOLITIC SMALL LETTER LATINATE MYSLITE */ + ["\u2C2F", "\u2C5F"], /* GLAGOLITIC SMALL LETTER CAUDATE CHRIVI */ + ["\u2C60", "\u2C61"], /* LATIN CAPITAL LETTER L WITH DOUBLE BAR */ + ["\u2C60", "\u2C61"], /* LATIN SMALL LETTER L WITH DOUBLE BAR */ + ["\u2C62", "\u026B"], /* LATIN CAPITAL LETTER L WITH MIDDLE TILDE */ + ["\u2C63", "\u1D7D"], /* LATIN CAPITAL LETTER P WITH STROKE */ + ["\u2C64", "\u027D"], /* LATIN CAPITAL LETTER R WITH TAIL */ + ["\u023A", "\u2C65"], /* LATIN SMALL LETTER A WITH STROKE */ + ["\u023E", "\u2C66"], /* LATIN SMALL LETTER T WITH DIAGONAL STROKE */ + ["\u2C67", "\u2C68"], /* LATIN CAPITAL LETTER H WITH DESCENDER */ + ["\u2C67", "\u2C68"], /* LATIN SMALL LETTER H WITH DESCENDER */ + ["\u2C69", "\u2C6A"], /* LATIN CAPITAL LETTER K WITH DESCENDER */ + ["\u2C69", "\u2C6A"], /* LATIN SMALL LETTER K WITH DESCENDER */ + ["\u2C6B", "\u2C6C"], /* LATIN CAPITAL LETTER Z WITH DESCENDER */ + ["\u2C6B", "\u2C6C"], /* LATIN SMALL LETTER Z WITH DESCENDER */ + ["\u2C6D", "\u0251"], /* LATIN CAPITAL LETTER ALPHA */ + ["\u2C6E", "\u0271"], /* LATIN CAPITAL LETTER M WITH HOOK */ + ["\u2C6F", "\u0250"], /* LATIN CAPITAL LETTER TURNED A */ + ["\u2C70", "\u0252"], /* LATIN CAPITAL LETTER TURNED ALPHA */ + ["\u2C71", "\u2C71"], /* LATIN SMALL LETTER V WITH RIGHT HOOK */ + ["\u2C72", "\u2C73"], /* LATIN CAPITAL LETTER W WITH HOOK */ + ["\u2C72", "\u2C73"], /* LATIN SMALL LETTER W WITH HOOK */ + ["\u2C74", "\u2C74"], /* LATIN SMALL LETTER V WITH CURL */ + ["\u2C75", "\u2C76"], /* LATIN CAPITAL LETTER HALF H */ + ["\u2C75", "\u2C76"], /* LATIN SMALL LETTER HALF H */ + ["\u2C77", "\u2C77"], /* LATIN SMALL LETTER TAILLESS PHI */ + ["\u2C78", "\u2C78"], /* LATIN SMALL LETTER E WITH NOTCH */ + ["\u2C79", "\u2C79"], /* LATIN SMALL LETTER TURNED R WITH TAIL */ + ["\u2C7A", "\u2C7A"], /* LATIN SMALL LETTER O WITH LOW RING INSIDE */ + ["\u2C7B", "\u2C7B"], /* LATIN LETTER SMALL CAPITAL TURNED E */ + ["\u2C7C", "\u2C7C"], /* LATIN SUBSCRIPT SMALL LETTER J */ + ["\u2C7D", "\u2C7D"], /* MODIFIER LETTER CAPITAL V */ + ["\u2C7E", "\u023F"], /* LATIN CAPITAL LETTER S WITH SWASH TAIL */ + ["\u2C7F", "\u0240"], /* LATIN CAPITAL LETTER Z WITH SWASH TAIL */ + ["\u2C80", "\u2C81"], /* COPTIC CAPITAL LETTER ALFA */ + ["\u2C80", "\u2C81"], /* COPTIC SMALL LETTER ALFA */ + ["\u2C82", "\u2C83"], /* COPTIC CAPITAL LETTER VIDA */ + ["\u2C82", "\u2C83"], /* COPTIC SMALL LETTER VIDA */ + ["\u2C84", "\u2C85"], /* COPTIC CAPITAL LETTER GAMMA */ + ["\u2C84", "\u2C85"], /* COPTIC SMALL LETTER GAMMA */ + ["\u2C86", "\u2C87"], /* COPTIC CAPITAL LETTER DALDA */ + ["\u2C86", "\u2C87"], /* COPTIC SMALL LETTER DALDA */ + ["\u2C88", "\u2C89"], /* COPTIC CAPITAL LETTER EIE */ + ["\u2C88", "\u2C89"], /* COPTIC SMALL LETTER EIE */ + ["\u2C8A", "\u2C8B"], /* COPTIC CAPITAL LETTER SOU */ + ["\u2C8A", "\u2C8B"], /* COPTIC SMALL LETTER SOU */ + ["\u2C8C", "\u2C8D"], /* COPTIC CAPITAL LETTER ZATA */ + ["\u2C8C", "\u2C8D"], /* COPTIC SMALL LETTER ZATA */ + ["\u2C8E", "\u2C8F"], /* COPTIC CAPITAL LETTER HATE */ + ["\u2C8E", "\u2C8F"], /* COPTIC SMALL LETTER HATE */ + ["\u2C90", "\u2C91"], /* COPTIC CAPITAL LETTER THETHE */ + ["\u2C90", "\u2C91"], /* COPTIC SMALL LETTER THETHE */ + ["\u2C92", "\u2C93"], /* COPTIC CAPITAL LETTER IAUDA */ + ["\u2C92", "\u2C93"], /* COPTIC SMALL LETTER IAUDA */ + ["\u2C94", "\u2C95"], /* COPTIC CAPITAL LETTER KAPA */ + ["\u2C94", "\u2C95"], /* COPTIC SMALL LETTER KAPA */ + ["\u2C96", "\u2C97"], /* COPTIC CAPITAL LETTER LAULA */ + ["\u2C96", "\u2C97"], /* COPTIC SMALL LETTER LAULA */ + ["\u2C98", "\u2C99"], /* COPTIC CAPITAL LETTER MI */ + ["\u2C98", "\u2C99"], /* COPTIC SMALL LETTER MI */ + ["\u2C9A", "\u2C9B"], /* COPTIC CAPITAL LETTER NI */ + ["\u2C9A", "\u2C9B"], /* COPTIC SMALL LETTER NI */ + ["\u2C9C", "\u2C9D"], /* COPTIC CAPITAL LETTER KSI */ + ["\u2C9C", "\u2C9D"], /* COPTIC SMALL LETTER KSI */ + ["\u2C9E", "\u2C9F"], /* COPTIC CAPITAL LETTER O */ + ["\u2C9E", "\u2C9F"], /* COPTIC SMALL LETTER O */ + ["\u2CA0", "\u2CA1"], /* COPTIC CAPITAL LETTER PI */ + ["\u2CA0", "\u2CA1"], /* COPTIC SMALL LETTER PI */ + ["\u2CA2", "\u2CA3"], /* COPTIC CAPITAL LETTER RO */ + ["\u2CA2", "\u2CA3"], /* COPTIC SMALL LETTER RO */ + ["\u2CA4", "\u2CA5"], /* COPTIC CAPITAL LETTER SIMA */ + ["\u2CA4", "\u2CA5"], /* COPTIC SMALL LETTER SIMA */ + ["\u2CA6", "\u2CA7"], /* COPTIC CAPITAL LETTER TAU */ + ["\u2CA6", "\u2CA7"], /* COPTIC SMALL LETTER TAU */ + ["\u2CA8", "\u2CA9"], /* COPTIC CAPITAL LETTER UA */ + ["\u2CA8", "\u2CA9"], /* COPTIC SMALL LETTER UA */ + ["\u2CAA", "\u2CAB"], /* COPTIC CAPITAL LETTER FI */ + ["\u2CAA", "\u2CAB"], /* COPTIC SMALL LETTER FI */ + ["\u2CAC", "\u2CAD"], /* COPTIC CAPITAL LETTER KHI */ + ["\u2CAC", "\u2CAD"], /* COPTIC SMALL LETTER KHI */ + ["\u2CAE", "\u2CAF"], /* COPTIC CAPITAL LETTER PSI */ + ["\u2CAE", "\u2CAF"], /* COPTIC SMALL LETTER PSI */ + ["\u2CB0", "\u2CB1"], /* COPTIC CAPITAL LETTER OOU */ + ["\u2CB0", "\u2CB1"], /* COPTIC SMALL LETTER OOU */ + ["\u2CB2", "\u2CB3"], /* COPTIC CAPITAL LETTER DIALECT-P ALEF */ + ["\u2CB2", "\u2CB3"], /* COPTIC SMALL LETTER DIALECT-P ALEF */ + ["\u2CB4", "\u2CB5"], /* COPTIC CAPITAL LETTER OLD COPTIC AIN */ + ["\u2CB4", "\u2CB5"], /* COPTIC SMALL LETTER OLD COPTIC AIN */ + ["\u2CB6", "\u2CB7"], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */ + ["\u2CB6", "\u2CB7"], /* COPTIC SMALL LETTER CRYPTOGRAMMIC EIE */ + ["\u2CB8", "\u2CB9"], /* COPTIC CAPITAL LETTER DIALECT-P KAPA */ + ["\u2CB8", "\u2CB9"], /* COPTIC SMALL LETTER DIALECT-P KAPA */ + ["\u2CBA", "\u2CBB"], /* COPTIC CAPITAL LETTER DIALECT-P NI */ + ["\u2CBA", "\u2CBB"], /* COPTIC SMALL LETTER DIALECT-P NI */ + ["\u2CBC", "\u2CBD"], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */ + ["\u2CBC", "\u2CBD"], /* COPTIC SMALL LETTER CRYPTOGRAMMIC NI */ + ["\u2CBE", "\u2CBF"], /* COPTIC CAPITAL LETTER OLD COPTIC OOU */ + ["\u2CBE", "\u2CBF"], /* COPTIC SMALL LETTER OLD COPTIC OOU */ + ["\u2CC0", "\u2CC1"], /* COPTIC CAPITAL LETTER SAMPI */ + ["\u2CC0", "\u2CC1"], /* COPTIC SMALL LETTER SAMPI */ + ["\u2CC2", "\u2CC3"], /* COPTIC CAPITAL LETTER CROSSED SHEI */ + ["\u2CC2", "\u2CC3"], /* COPTIC SMALL LETTER CROSSED SHEI */ + ["\u2CC4", "\u2CC5"], /* COPTIC CAPITAL LETTER OLD COPTIC SHEI */ + ["\u2CC4", "\u2CC5"], /* COPTIC SMALL LETTER OLD COPTIC SHEI */ + ["\u2CC6", "\u2CC7"], /* COPTIC CAPITAL LETTER OLD COPTIC ESH */ + ["\u2CC6", "\u2CC7"], /* COPTIC SMALL LETTER OLD COPTIC ESH */ + ["\u2CC8", "\u2CC9"], /* COPTIC CAPITAL LETTER AKHMIMIC KHEI */ + ["\u2CC8", "\u2CC9"], /* COPTIC SMALL LETTER AKHMIMIC KHEI */ + ["\u2CCA", "\u2CCB"], /* COPTIC CAPITAL LETTER DIALECT-P HORI */ + ["\u2CCA", "\u2CCB"], /* COPTIC SMALL LETTER DIALECT-P HORI */ + ["\u2CCC", "\u2CCD"], /* COPTIC CAPITAL LETTER OLD COPTIC HORI */ + ["\u2CCC", "\u2CCD"], /* COPTIC SMALL LETTER OLD COPTIC HORI */ + ["\u2CCE", "\u2CCF"], /* COPTIC CAPITAL LETTER OLD COPTIC HA */ + ["\u2CCE", "\u2CCF"], /* COPTIC SMALL LETTER OLD COPTIC HA */ + ["\u2CD0", "\u2CD1"], /* COPTIC CAPITAL LETTER L-SHAPED HA */ + ["\u2CD0", "\u2CD1"], /* COPTIC SMALL LETTER L-SHAPED HA */ + ["\u2CD2", "\u2CD3"], /* COPTIC CAPITAL LETTER OLD COPTIC HEI */ + ["\u2CD2", "\u2CD3"], /* COPTIC SMALL LETTER OLD COPTIC HEI */ + ["\u2CD4", "\u2CD5"], /* COPTIC CAPITAL LETTER OLD COPTIC HAT */ + ["\u2CD4", "\u2CD5"], /* COPTIC SMALL LETTER OLD COPTIC HAT */ + ["\u2CD6", "\u2CD7"], /* COPTIC CAPITAL LETTER OLD COPTIC GANGIA */ + ["\u2CD6", "\u2CD7"], /* COPTIC SMALL LETTER OLD COPTIC GANGIA */ + ["\u2CD8", "\u2CD9"], /* COPTIC CAPITAL LETTER OLD COPTIC DJA */ + ["\u2CD8", "\u2CD9"], /* COPTIC SMALL LETTER OLD COPTIC DJA */ + ["\u2CDA", "\u2CDB"], /* COPTIC CAPITAL LETTER OLD COPTIC SHIMA */ + ["\u2CDA", "\u2CDB"], /* COPTIC SMALL LETTER OLD COPTIC SHIMA */ + ["\u2CDC", "\u2CDD"], /* COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */ + ["\u2CDC", "\u2CDD"], /* COPTIC SMALL LETTER OLD NUBIAN SHIMA */ + ["\u2CDE", "\u2CDF"], /* COPTIC CAPITAL LETTER OLD NUBIAN NGI */ + ["\u2CDE", "\u2CDF"], /* COPTIC SMALL LETTER OLD NUBIAN NGI */ + ["\u2CE0", "\u2CE1"], /* COPTIC CAPITAL LETTER OLD NUBIAN NYI */ + ["\u2CE0", "\u2CE1"], /* COPTIC SMALL LETTER OLD NUBIAN NYI */ + ["\u2CE2", "\u2CE3"], /* COPTIC CAPITAL LETTER OLD NUBIAN WAU */ + ["\u2CE2", "\u2CE3"], /* COPTIC SMALL LETTER OLD NUBIAN WAU */ + ["\u2CE4", "\u2CE4"], /* COPTIC SYMBOL KAI */ + ["\u2CE5", "\u2CE5"], /* COPTIC SYMBOL MI RO */ + ["\u2CE6", "\u2CE6"], /* COPTIC SYMBOL PI RO */ + ["\u2CE7", "\u2CE7"], /* COPTIC SYMBOL STAUROS */ + ["\u2CE8", "\u2CE8"], /* COPTIC SYMBOL TAU RO */ + ["\u2CE9", "\u2CE9"], /* COPTIC SYMBOL KHI RO */ + ["\u2CEA", "\u2CEA"], /* COPTIC SYMBOL SHIMA SIMA */ + ["\u2CEB", "\u2CEC"], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */ + ["\u2CEB", "\u2CEC"], /* COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI */ + ["\u2CED", "\u2CEE"], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */ + ["\u2CED", "\u2CEE"], /* COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA */ + ["\u2CEF", "\u2CEF"], /* COPTIC COMBINING NI ABOVE */ + ["\u2CF0", "\u2CF0"], /* COPTIC COMBINING SPIRITUS ASPER */ + ["\u2CF1", "\u2CF1"], /* COPTIC COMBINING SPIRITUS LENIS */ + ["\u2CF2", "\u2CF3"], /* COPTIC CAPITAL LETTER BOHAIRIC KHEI */ + ["\u2CF2", "\u2CF3"], /* COPTIC SMALL LETTER BOHAIRIC KHEI */ + ["\u2CF4", "\u2CF4"], + ["\u2CF5", "\u2CF5"], + ["\u2CF6", "\u2CF6"], + ["\u2CF7", "\u2CF7"], + ["\u2CF8", "\u2CF8"], + ["\u2CF9", "\u2CF9"], /* COPTIC OLD NUBIAN FULL STOP */ + ["\u2CFA", "\u2CFA"], /* COPTIC OLD NUBIAN DIRECT QUESTION MARK */ + ["\u2CFB", "\u2CFB"], /* COPTIC OLD NUBIAN INDIRECT QUESTION MARK */ + ["\u2CFC", "\u2CFC"], /* COPTIC OLD NUBIAN VERSE DIVIDER */ + ["\u2CFD", "\u2CFD"], /* COPTIC FRACTION ONE HALF */ + ["\u2CFE", "\u2CFE"], /* COPTIC FULL STOP */ + ["\u2CFF", "\u2CFF"], /* COPTIC MORPHOLOGICAL DIVIDER */ + ["\u10A0", "\u2D00"], /* GEORGIAN SMALL LETTER AN */ + ["\u10A1", "\u2D01"], /* GEORGIAN SMALL LETTER BAN */ + ["\u10A2", "\u2D02"], /* GEORGIAN SMALL LETTER GAN */ + ["\u10A3", "\u2D03"], /* GEORGIAN SMALL LETTER DON */ + ["\u10A4", "\u2D04"], /* GEORGIAN SMALL LETTER EN */ + ["\u10A5", "\u2D05"], /* GEORGIAN SMALL LETTER VIN */ + ["\u10A6", "\u2D06"], /* GEORGIAN SMALL LETTER ZEN */ + ["\u10A7", "\u2D07"], /* GEORGIAN SMALL LETTER TAN */ + ["\u10A8", "\u2D08"], /* GEORGIAN SMALL LETTER IN */ + ["\u10A9", "\u2D09"], /* GEORGIAN SMALL LETTER KAN */ + ["\u10AA", "\u2D0A"], /* GEORGIAN SMALL LETTER LAS */ + ["\u10AB", "\u2D0B"], /* GEORGIAN SMALL LETTER MAN */ + ["\u10AC", "\u2D0C"], /* GEORGIAN SMALL LETTER NAR */ + ["\u10AD", "\u2D0D"], /* GEORGIAN SMALL LETTER ON */ + ["\u10AE", "\u2D0E"], /* GEORGIAN SMALL LETTER PAR */ + ["\u10AF", "\u2D0F"], /* GEORGIAN SMALL LETTER ZHAR */ + ["\u10B0", "\u2D10"], /* GEORGIAN SMALL LETTER RAE */ + ["\u10B1", "\u2D11"], /* GEORGIAN SMALL LETTER SAN */ + ["\u10B2", "\u2D12"], /* GEORGIAN SMALL LETTER TAR */ + ["\u10B3", "\u2D13"], /* GEORGIAN SMALL LETTER UN */ + ["\u10B4", "\u2D14"], /* GEORGIAN SMALL LETTER PHAR */ + ["\u10B5", "\u2D15"], /* GEORGIAN SMALL LETTER KHAR */ + ["\u10B6", "\u2D16"], /* GEORGIAN SMALL LETTER GHAN */ + ["\u10B7", "\u2D17"], /* GEORGIAN SMALL LETTER QAR */ + ["\u10B8", "\u2D18"], /* GEORGIAN SMALL LETTER SHIN */ + ["\u10B9", "\u2D19"], /* GEORGIAN SMALL LETTER CHIN */ + ["\u10BA", "\u2D1A"], /* GEORGIAN SMALL LETTER CAN */ + ["\u10BB", "\u2D1B"], /* GEORGIAN SMALL LETTER JIL */ + ["\u10BC", "\u2D1C"], /* GEORGIAN SMALL LETTER CIL */ + ["\u10BD", "\u2D1D"], /* GEORGIAN SMALL LETTER CHAR */ + ["\u10BE", "\u2D1E"], /* GEORGIAN SMALL LETTER XAN */ + ["\u10BF", "\u2D1F"], /* GEORGIAN SMALL LETTER JHAN */ + ["\u10C0", "\u2D20"], /* GEORGIAN SMALL LETTER HAE */ + ["\u10C1", "\u2D21"], /* GEORGIAN SMALL LETTER HE */ + ["\u10C2", "\u2D22"], /* GEORGIAN SMALL LETTER HIE */ + ["\u10C3", "\u2D23"], /* GEORGIAN SMALL LETTER WE */ + ["\u10C4", "\u2D24"], /* GEORGIAN SMALL LETTER HAR */ + ["\u10C5", "\u2D25"], /* GEORGIAN SMALL LETTER HOE */ + ["\u2D26", "\u2D26"], + ["\u10C7", "\u2D27"], /* GEORGIAN SMALL LETTER YN */ + ["\u2D28", "\u2D28"], + ["\u2D29", "\u2D29"], + ["\u2D2A", "\u2D2A"], + ["\u2D2B", "\u2D2B"], + ["\u2D2C", "\u2D2C"], + ["\u10CD", "\u2D2D"], /* GEORGIAN SMALL LETTER AEN */ + ["\u2D2E", "\u2D2E"], + ["\u2D2F", "\u2D2F"], + ["\u2D30", "\u2D30"], /* TIFINAGH LETTER YA */ + ["\u2D31", "\u2D31"], /* TIFINAGH LETTER YAB */ + ["\u2D32", "\u2D32"], /* TIFINAGH LETTER YABH */ + ["\u2D33", "\u2D33"], /* TIFINAGH LETTER YAG */ + ["\u2D34", "\u2D34"], /* TIFINAGH LETTER YAGHH */ + ["\u2D35", "\u2D35"], /* TIFINAGH LETTER BERBER ACADEMY YAJ */ + ["\u2D36", "\u2D36"], /* TIFINAGH LETTER YAJ */ + ["\u2D37", "\u2D37"], /* TIFINAGH LETTER YAD */ + ["\u2D38", "\u2D38"], /* TIFINAGH LETTER YADH */ + ["\u2D39", "\u2D39"], /* TIFINAGH LETTER YADD */ + ["\u2D3A", "\u2D3A"], /* TIFINAGH LETTER YADDH */ + ["\u2D3B", "\u2D3B"], /* TIFINAGH LETTER YEY */ + ["\u2D3C", "\u2D3C"], /* TIFINAGH LETTER YAF */ + ["\u2D3D", "\u2D3D"], /* TIFINAGH LETTER YAK */ + ["\u2D3E", "\u2D3E"], /* TIFINAGH LETTER TUAREG YAK */ + ["\u2D3F", "\u2D3F"], /* TIFINAGH LETTER YAKHH */ + ["\u2D40", "\u2D40"], /* TIFINAGH LETTER YAH */ + ["\u2D41", "\u2D41"], /* TIFINAGH LETTER BERBER ACADEMY YAH */ + ["\u2D42", "\u2D42"], /* TIFINAGH LETTER TUAREG YAH */ + ["\u2D43", "\u2D43"], /* TIFINAGH LETTER YAHH */ + ["\u2D44", "\u2D44"], /* TIFINAGH LETTER YAA */ + ["\u2D45", "\u2D45"], /* TIFINAGH LETTER YAKH */ + ["\u2D46", "\u2D46"], /* TIFINAGH LETTER TUAREG YAKH */ + ["\u2D47", "\u2D47"], /* TIFINAGH LETTER YAQ */ + ["\u2D48", "\u2D48"], /* TIFINAGH LETTER TUAREG YAQ */ + ["\u2D49", "\u2D49"], /* TIFINAGH LETTER YI */ + ["\u2D4A", "\u2D4A"], /* TIFINAGH LETTER YAZH */ + ["\u2D4B", "\u2D4B"], /* TIFINAGH LETTER AHAGGAR YAZH */ + ["\u2D4C", "\u2D4C"], /* TIFINAGH LETTER TUAREG YAZH */ + ["\u2D4D", "\u2D4D"], /* TIFINAGH LETTER YAL */ + ["\u2D4E", "\u2D4E"], /* TIFINAGH LETTER YAM */ + ["\u2D4F", "\u2D4F"], /* TIFINAGH LETTER YAN */ + ["\u2D50", "\u2D50"], /* TIFINAGH LETTER TUAREG YAGN */ + ["\u2D51", "\u2D51"], /* TIFINAGH LETTER TUAREG YANG */ + ["\u2D52", "\u2D52"], /* TIFINAGH LETTER YAP */ + ["\u2D53", "\u2D53"], /* TIFINAGH LETTER YU */ + ["\u2D54", "\u2D54"], /* TIFINAGH LETTER YAR */ + ["\u2D55", "\u2D55"], /* TIFINAGH LETTER YARR */ + ["\u2D56", "\u2D56"], /* TIFINAGH LETTER YAGH */ + ["\u2D57", "\u2D57"], /* TIFINAGH LETTER TUAREG YAGH */ + ["\u2D58", "\u2D58"], /* TIFINAGH LETTER AYER YAGH */ + ["\u2D59", "\u2D59"], /* TIFINAGH LETTER YAS */ + ["\u2D5A", "\u2D5A"], /* TIFINAGH LETTER YASS */ + ["\u2D5B", "\u2D5B"], /* TIFINAGH LETTER YASH */ + ["\u2D5C", "\u2D5C"], /* TIFINAGH LETTER YAT */ + ["\u2D5D", "\u2D5D"], /* TIFINAGH LETTER YATH */ + ["\u2D5E", "\u2D5E"], /* TIFINAGH LETTER YACH */ + ["\u2D5F", "\u2D5F"], /* TIFINAGH LETTER YATT */ + ["\u2D60", "\u2D60"], /* TIFINAGH LETTER YAV */ + ["\u2D61", "\u2D61"], /* TIFINAGH LETTER YAW */ + ["\u2D62", "\u2D62"], /* TIFINAGH LETTER YAY */ + ["\u2D63", "\u2D63"], /* TIFINAGH LETTER YAZ */ + ["\u2D64", "\u2D64"], /* TIFINAGH LETTER TAWELLEMET YAZ */ + ["\u2D65", "\u2D65"], /* TIFINAGH LETTER YAZZ */ + ["\u2D66", "\u2D66"], /* TIFINAGH LETTER YE */ + ["\u2D67", "\u2D67"], /* TIFINAGH LETTER YO */ + ["\u2D68", "\u2D68"], + ["\u2D69", "\u2D69"], + ["\u2D6A", "\u2D6A"], + ["\u2D6B", "\u2D6B"], + ["\u2D6C", "\u2D6C"], + ["\u2D6D", "\u2D6D"], + ["\u2D6E", "\u2D6E"], + ["\u2D6F", "\u2D6F"], /* TIFINAGH MODIFIER LETTER LABIALIZATION MARK */ + ["\u2D70", "\u2D70"], /* TIFINAGH SEPARATOR MARK */ + ["\u2D71", "\u2D71"], + ["\u2D72", "\u2D72"], + ["\u2D73", "\u2D73"], + ["\u2D74", "\u2D74"], + ["\u2D75", "\u2D75"], + ["\u2D76", "\u2D76"], + ["\u2D77", "\u2D77"], + ["\u2D78", "\u2D78"], + ["\u2D79", "\u2D79"], + ["\u2D7A", "\u2D7A"], + ["\u2D7B", "\u2D7B"], + ["\u2D7C", "\u2D7C"], + ["\u2D7D", "\u2D7D"], + ["\u2D7E", "\u2D7E"], + ["\u2D7F", "\u2D7F"], /* TIFINAGH CONSONANT JOINER */ + ["\u2D80", "\u2D80"], /* ETHIOPIC SYLLABLE LOA */ + ["\u2D81", "\u2D81"], /* ETHIOPIC SYLLABLE MOA */ + ["\u2D82", "\u2D82"], /* ETHIOPIC SYLLABLE ROA */ + ["\u2D83", "\u2D83"], /* ETHIOPIC SYLLABLE SOA */ + ["\u2D84", "\u2D84"], /* ETHIOPIC SYLLABLE SHOA */ + ["\u2D85", "\u2D85"], /* ETHIOPIC SYLLABLE BOA */ + ["\u2D86", "\u2D86"], /* ETHIOPIC SYLLABLE TOA */ + ["\u2D87", "\u2D87"], /* ETHIOPIC SYLLABLE COA */ + ["\u2D88", "\u2D88"], /* ETHIOPIC SYLLABLE NOA */ + ["\u2D89", "\u2D89"], /* ETHIOPIC SYLLABLE NYOA */ + ["\u2D8A", "\u2D8A"], /* ETHIOPIC SYLLABLE GLOTTAL OA */ + ["\u2D8B", "\u2D8B"], /* ETHIOPIC SYLLABLE ZOA */ + ["\u2D8C", "\u2D8C"], /* ETHIOPIC SYLLABLE DOA */ + ["\u2D8D", "\u2D8D"], /* ETHIOPIC SYLLABLE DDOA */ + ["\u2D8E", "\u2D8E"], /* ETHIOPIC SYLLABLE JOA */ + ["\u2D8F", "\u2D8F"], /* ETHIOPIC SYLLABLE THOA */ + ["\u2D90", "\u2D90"], /* ETHIOPIC SYLLABLE CHOA */ + ["\u2D91", "\u2D91"], /* ETHIOPIC SYLLABLE PHOA */ + ["\u2D92", "\u2D92"], /* ETHIOPIC SYLLABLE POA */ + ["\u2D93", "\u2D93"], /* ETHIOPIC SYLLABLE GGWA */ + ["\u2D94", "\u2D94"], /* ETHIOPIC SYLLABLE GGWI */ + ["\u2D95", "\u2D95"], /* ETHIOPIC SYLLABLE GGWEE */ + ["\u2D96", "\u2D96"], /* ETHIOPIC SYLLABLE GGWE */ + ["\u2D97", "\u2D97"], + ["\u2D98", "\u2D98"], + ["\u2D99", "\u2D99"], + ["\u2D9A", "\u2D9A"], + ["\u2D9B", "\u2D9B"], + ["\u2D9C", "\u2D9C"], + ["\u2D9D", "\u2D9D"], + ["\u2D9E", "\u2D9E"], + ["\u2D9F", "\u2D9F"], + ["\u2DA0", "\u2DA0"], /* ETHIOPIC SYLLABLE SSA */ + ["\u2DA1", "\u2DA1"], /* ETHIOPIC SYLLABLE SSU */ + ["\u2DA2", "\u2DA2"], /* ETHIOPIC SYLLABLE SSI */ + ["\u2DA3", "\u2DA3"], /* ETHIOPIC SYLLABLE SSAA */ + ["\u2DA4", "\u2DA4"], /* ETHIOPIC SYLLABLE SSEE */ + ["\u2DA5", "\u2DA5"], /* ETHIOPIC SYLLABLE SSE */ + ["\u2DA6", "\u2DA6"], /* ETHIOPIC SYLLABLE SSO */ + ["\u2DA7", "\u2DA7"], + ["\u2DA8", "\u2DA8"], /* ETHIOPIC SYLLABLE CCA */ + ["\u2DA9", "\u2DA9"], /* ETHIOPIC SYLLABLE CCU */ + ["\u2DAA", "\u2DAA"], /* ETHIOPIC SYLLABLE CCI */ + ["\u2DAB", "\u2DAB"], /* ETHIOPIC SYLLABLE CCAA */ + ["\u2DAC", "\u2DAC"], /* ETHIOPIC SYLLABLE CCEE */ + ["\u2DAD", "\u2DAD"], /* ETHIOPIC SYLLABLE CCE */ + ["\u2DAE", "\u2DAE"], /* ETHIOPIC SYLLABLE CCO */ + ["\u2DAF", "\u2DAF"], + ["\u2DB0", "\u2DB0"], /* ETHIOPIC SYLLABLE ZZA */ + ["\u2DB1", "\u2DB1"], /* ETHIOPIC SYLLABLE ZZU */ + ["\u2DB2", "\u2DB2"], /* ETHIOPIC SYLLABLE ZZI */ + ["\u2DB3", "\u2DB3"], /* ETHIOPIC SYLLABLE ZZAA */ + ["\u2DB4", "\u2DB4"], /* ETHIOPIC SYLLABLE ZZEE */ + ["\u2DB5", "\u2DB5"], /* ETHIOPIC SYLLABLE ZZE */ + ["\u2DB6", "\u2DB6"], /* ETHIOPIC SYLLABLE ZZO */ + ["\u2DB7", "\u2DB7"], + ["\u2DB8", "\u2DB8"], /* ETHIOPIC SYLLABLE CCHA */ + ["\u2DB9", "\u2DB9"], /* ETHIOPIC SYLLABLE CCHU */ + ["\u2DBA", "\u2DBA"], /* ETHIOPIC SYLLABLE CCHI */ + ["\u2DBB", "\u2DBB"], /* ETHIOPIC SYLLABLE CCHAA */ + ["\u2DBC", "\u2DBC"], /* ETHIOPIC SYLLABLE CCHEE */ + ["\u2DBD", "\u2DBD"], /* ETHIOPIC SYLLABLE CCHE */ + ["\u2DBE", "\u2DBE"], /* ETHIOPIC SYLLABLE CCHO */ + ["\u2DBF", "\u2DBF"], + ["\u2DC0", "\u2DC0"], /* ETHIOPIC SYLLABLE QYA */ + ["\u2DC1", "\u2DC1"], /* ETHIOPIC SYLLABLE QYU */ + ["\u2DC2", "\u2DC2"], /* ETHIOPIC SYLLABLE QYI */ + ["\u2DC3", "\u2DC3"], /* ETHIOPIC SYLLABLE QYAA */ + ["\u2DC4", "\u2DC4"], /* ETHIOPIC SYLLABLE QYEE */ + ["\u2DC5", "\u2DC5"], /* ETHIOPIC SYLLABLE QYE */ + ["\u2DC6", "\u2DC6"], /* ETHIOPIC SYLLABLE QYO */ + ["\u2DC7", "\u2DC7"], + ["\u2DC8", "\u2DC8"], /* ETHIOPIC SYLLABLE KYA */ + ["\u2DC9", "\u2DC9"], /* ETHIOPIC SYLLABLE KYU */ + ["\u2DCA", "\u2DCA"], /* ETHIOPIC SYLLABLE KYI */ + ["\u2DCB", "\u2DCB"], /* ETHIOPIC SYLLABLE KYAA */ + ["\u2DCC", "\u2DCC"], /* ETHIOPIC SYLLABLE KYEE */ + ["\u2DCD", "\u2DCD"], /* ETHIOPIC SYLLABLE KYE */ + ["\u2DCE", "\u2DCE"], /* ETHIOPIC SYLLABLE KYO */ + ["\u2DCF", "\u2DCF"], + ["\u2DD0", "\u2DD0"], /* ETHIOPIC SYLLABLE XYA */ + ["\u2DD1", "\u2DD1"], /* ETHIOPIC SYLLABLE XYU */ + ["\u2DD2", "\u2DD2"], /* ETHIOPIC SYLLABLE XYI */ + ["\u2DD3", "\u2DD3"], /* ETHIOPIC SYLLABLE XYAA */ + ["\u2DD4", "\u2DD4"], /* ETHIOPIC SYLLABLE XYEE */ + ["\u2DD5", "\u2DD5"], /* ETHIOPIC SYLLABLE XYE */ + ["\u2DD6", "\u2DD6"], /* ETHIOPIC SYLLABLE XYO */ + ["\u2DD7", "\u2DD7"], + ["\u2DD8", "\u2DD8"], /* ETHIOPIC SYLLABLE GYA */ + ["\u2DD9", "\u2DD9"], /* ETHIOPIC SYLLABLE GYU */ + ["\u2DDA", "\u2DDA"], /* ETHIOPIC SYLLABLE GYI */ + ["\u2DDB", "\u2DDB"], /* ETHIOPIC SYLLABLE GYAA */ + ["\u2DDC", "\u2DDC"], /* ETHIOPIC SYLLABLE GYEE */ + ["\u2DDD", "\u2DDD"], /* ETHIOPIC SYLLABLE GYE */ + ["\u2DDE", "\u2DDE"], /* ETHIOPIC SYLLABLE GYO */ + ["\u2DDF", "\u2DDF"], + ["\u2DE0", "\u2DE0"], /* COMBINING CYRILLIC LETTER BE */ + ["\u2DE1", "\u2DE1"], /* COMBINING CYRILLIC LETTER VE */ + ["\u2DE2", "\u2DE2"], /* COMBINING CYRILLIC LETTER GHE */ + ["\u2DE3", "\u2DE3"], /* COMBINING CYRILLIC LETTER DE */ + ["\u2DE4", "\u2DE4"], /* COMBINING CYRILLIC LETTER ZHE */ + ["\u2DE5", "\u2DE5"], /* COMBINING CYRILLIC LETTER ZE */ + ["\u2DE6", "\u2DE6"], /* COMBINING CYRILLIC LETTER KA */ + ["\u2DE7", "\u2DE7"], /* COMBINING CYRILLIC LETTER EL */ + ["\u2DE8", "\u2DE8"], /* COMBINING CYRILLIC LETTER EM */ + ["\u2DE9", "\u2DE9"], /* COMBINING CYRILLIC LETTER EN */ + ["\u2DEA", "\u2DEA"], /* COMBINING CYRILLIC LETTER O */ + ["\u2DEB", "\u2DEB"], /* COMBINING CYRILLIC LETTER PE */ + ["\u2DEC", "\u2DEC"], /* COMBINING CYRILLIC LETTER ER */ + ["\u2DED", "\u2DED"], /* COMBINING CYRILLIC LETTER ES */ + ["\u2DEE", "\u2DEE"], /* COMBINING CYRILLIC LETTER TE */ + ["\u2DEF", "\u2DEF"], /* COMBINING CYRILLIC LETTER HA */ + ["\u2DF0", "\u2DF0"], /* COMBINING CYRILLIC LETTER TSE */ + ["\u2DF1", "\u2DF1"], /* COMBINING CYRILLIC LETTER CHE */ + ["\u2DF2", "\u2DF2"], /* COMBINING CYRILLIC LETTER SHA */ + ["\u2DF3", "\u2DF3"], /* COMBINING CYRILLIC LETTER SHCHA */ + ["\u2DF4", "\u2DF4"], /* COMBINING CYRILLIC LETTER FITA */ + ["\u2DF5", "\u2DF5"], /* COMBINING CYRILLIC LETTER ES-TE */ + ["\u2DF6", "\u2DF6"], /* COMBINING CYRILLIC LETTER A */ + ["\u2DF7", "\u2DF7"], /* COMBINING CYRILLIC LETTER IE */ + ["\u2DF8", "\u2DF8"], /* COMBINING CYRILLIC LETTER DJERV */ + ["\u2DF9", "\u2DF9"], /* COMBINING CYRILLIC LETTER MONOGRAPH UK */ + ["\u2DFA", "\u2DFA"], /* COMBINING CYRILLIC LETTER YAT */ + ["\u2DFB", "\u2DFB"], /* COMBINING CYRILLIC LETTER YU */ + ["\u2DFC", "\u2DFC"], /* COMBINING CYRILLIC LETTER IOTIFIED A */ + ["\u2DFD", "\u2DFD"], /* COMBINING CYRILLIC LETTER LITTLE YUS */ + ["\u2DFE", "\u2DFE"], /* COMBINING CYRILLIC LETTER BIG YUS */ + ["\u2DFF", "\u2DFF"], /* COMBINING CYRILLIC LETTER IOTIFIED BIG YUS */ + ["\u2E00", "\u2E00"], /* RIGHT ANGLE SUBSTITUTION MARKER */ + ["\u2E01", "\u2E01"], /* RIGHT ANGLE DOTTED SUBSTITUTION MARKER */ + ["\u2E02", "\u2E02"], /* LEFT SUBSTITUTION BRACKET */ + ["\u2E03", "\u2E03"], /* RIGHT SUBSTITUTION BRACKET */ + ["\u2E04", "\u2E04"], /* LEFT DOTTED SUBSTITUTION BRACKET */ + ["\u2E05", "\u2E05"], /* RIGHT DOTTED SUBSTITUTION BRACKET */ + ["\u2E06", "\u2E06"], /* RAISED INTERPOLATION MARKER */ + ["\u2E07", "\u2E07"], /* RAISED DOTTED INTERPOLATION MARKER */ + ["\u2E08", "\u2E08"], /* DOTTED TRANSPOSITION MARKER */ + ["\u2E09", "\u2E09"], /* LEFT TRANSPOSITION BRACKET */ + ["\u2E0A", "\u2E0A"], /* RIGHT TRANSPOSITION BRACKET */ + ["\u2E0B", "\u2E0B"], /* RAISED SQUARE */ + ["\u2E0C", "\u2E0C"], /* LEFT RAISED OMISSION BRACKET */ + ["\u2E0D", "\u2E0D"], /* RIGHT RAISED OMISSION BRACKET */ + ["\u2E0E", "\u2E0E"], /* EDITORIAL CORONIS */ + ["\u2E0F", "\u2E0F"], /* PARAGRAPHOS */ + ["\u2E10", "\u2E10"], /* FORKED PARAGRAPHOS */ + ["\u2E11", "\u2E11"], /* REVERSED FORKED PARAGRAPHOS */ + ["\u2E12", "\u2E12"], /* HYPODIASTOLE */ + ["\u2E13", "\u2E13"], /* DOTTED OBELOS */ + ["\u2E14", "\u2E14"], /* DOWNWARDS ANCORA */ + ["\u2E15", "\u2E15"], /* UPWARDS ANCORA */ + ["\u2E16", "\u2E16"], /* DOTTED RIGHT-POINTING ANGLE */ + ["\u2E17", "\u2E17"], /* DOUBLE OBLIQUE HYPHEN */ + ["\u2E18", "\u2E18"], /* INVERTED INTERROBANG */ + ["\u2E19", "\u2E19"], /* PALM BRANCH */ + ["\u2E1A", "\u2E1A"], /* HYPHEN WITH DIAERESIS */ + ["\u2E1B", "\u2E1B"], /* TILDE WITH RING ABOVE */ + ["\u2E1C", "\u2E1C"], /* LEFT LOW PARAPHRASE BRACKET */ + ["\u2E1D", "\u2E1D"], /* RIGHT LOW PARAPHRASE BRACKET */ + ["\u2E1E", "\u2E1E"], /* TILDE WITH DOT ABOVE */ + ["\u2E1F", "\u2E1F"], /* TILDE WITH DOT BELOW */ + ["\u2E20", "\u2E20"], /* LEFT VERTICAL BAR WITH QUILL */ + ["\u2E21", "\u2E21"], /* RIGHT VERTICAL BAR WITH QUILL */ + ["\u2E22", "\u2E22"], /* TOP LEFT HALF BRACKET */ + ["\u2E23", "\u2E23"], /* TOP RIGHT HALF BRACKET */ + ["\u2E24", "\u2E24"], /* BOTTOM LEFT HALF BRACKET */ + ["\u2E25", "\u2E25"], /* BOTTOM RIGHT HALF BRACKET */ + ["\u2E26", "\u2E26"], /* LEFT SIDEWAYS U BRACKET */ + ["\u2E27", "\u2E27"], /* RIGHT SIDEWAYS U BRACKET */ + ["\u2E28", "\u2E28"], /* LEFT DOUBLE PARENTHESIS */ + ["\u2E29", "\u2E29"], /* RIGHT DOUBLE PARENTHESIS */ + ["\u2E2A", "\u2E2A"], /* TWO DOTS OVER ONE DOT PUNCTUATION */ + ["\u2E2B", "\u2E2B"], /* ONE DOT OVER TWO DOTS PUNCTUATION */ + ["\u2E2C", "\u2E2C"], /* SQUARED FOUR DOT PUNCTUATION */ + ["\u2E2D", "\u2E2D"], /* FIVE DOT MARK */ + ["\u2E2E", "\u2E2E"], /* REVERSED QUESTION MARK */ + ["\u2E2F", "\u2E2F"], /* VERTICAL TILDE */ + ["\u2E30", "\u2E30"], /* RING POINT */ + ["\u2E31", "\u2E31"], /* WORD SEPARATOR MIDDLE DOT */ + ["\u2E32", "\u2E32"], /* TURNED COMMA */ + ["\u2E33", "\u2E33"], /* RAISED DOT */ + ["\u2E34", "\u2E34"], /* RAISED COMMA */ + ["\u2E35", "\u2E35"], /* TURNED SEMICOLON */ + ["\u2E36", "\u2E36"], /* DAGGER WITH LEFT GUARD */ + ["\u2E37", "\u2E37"], /* DAGGER WITH RIGHT GUARD */ + ["\u2E38", "\u2E38"], /* TURNED DAGGER */ + ["\u2E39", "\u2E39"], /* TOP HALF SECTION SIGN */ + ["\u2E3A", "\u2E3A"], /* TWO-EM DASH */ + ["\u2E3B", "\u2E3B"], /* THREE-EM DASH */ + ["\u2E3C", "\u2E3C"], /* STENOGRAPHIC FULL STOP */ + ["\u2E3D", "\u2E3D"], /* VERTICAL SIX DOTS */ + ["\u2E3E", "\u2E3E"], /* WIGGLY VERTICAL LINE */ + ["\u2E3F", "\u2E3F"], /* CAPITULUM */ + ["\u2E40", "\u2E40"], /* DOUBLE HYPHEN */ + ["\u2E41", "\u2E41"], /* REVERSED COMMA */ + ["\u2E42", "\u2E42"], /* DOUBLE LOW-REVERSED-9 QUOTATION MARK */ + ["\u2E43", "\u2E43"], /* DASH WITH LEFT UPTURN */ + ["\u2E44", "\u2E44"], /* DOUBLE SUSPENSION MARK */ + ["\u2E45", "\u2E45"], /* INVERTED LOW KAVYKA */ + ["\u2E46", "\u2E46"], /* INVERTED LOW KAVYKA WITH KAVYKA ABOVE */ + ["\u2E47", "\u2E47"], /* LOW KAVYKA */ + ["\u2E48", "\u2E48"], /* LOW KAVYKA WITH DOT */ + ["\u2E49", "\u2E49"], /* DOUBLE STACKED COMMA */ + ["\u2E4A", "\u2E4A"], /* DOTTED SOLIDUS */ + ["\u2E4B", "\u2E4B"], /* TRIPLE DAGGER */ + ["\u2E4C", "\u2E4C"], /* MEDIEVAL COMMA */ + ["\u2E4D", "\u2E4D"], /* PARAGRAPHUS MARK */ + ["\u2E4E", "\u2E4E"], /* PUNCTUS ELEVATUS MARK */ + ["\u2E4F", "\u2E4F"], /* CORNISH VERSE DIVIDER */ + ["\u2E50", "\u2E50"], /* CROSS PATTY WITH RIGHT CROSSBAR */ + ["\u2E51", "\u2E51"], /* CROSS PATTY WITH LEFT CROSSBAR */ + ["\u2E52", "\u2E52"], /* TIRONIAN SIGN CAPITAL ET */ + ["\u2E53", "\u2E53"], /* MEDIEVAL EXCLAMATION MARK */ + ["\u2E54", "\u2E54"], /* MEDIEVAL QUESTION MARK */ + ["\u2E55", "\u2E55"], /* LEFT SQUARE BRACKET WITH STROKE */ + ["\u2E56", "\u2E56"], /* RIGHT SQUARE BRACKET WITH STROKE */ + ["\u2E57", "\u2E57"], /* LEFT SQUARE BRACKET WITH DOUBLE STROKE */ + ["\u2E58", "\u2E58"], /* RIGHT SQUARE BRACKET WITH DOUBLE STROKE */ + ["\u2E59", "\u2E59"], /* TOP HALF LEFT PARENTHESIS */ + ["\u2E5A", "\u2E5A"], /* TOP HALF RIGHT PARENTHESIS */ + ["\u2E5B", "\u2E5B"], /* BOTTOM HALF LEFT PARENTHESIS */ + ["\u2E5C", "\u2E5C"], /* BOTTOM HALF RIGHT PARENTHESIS */ + ["\u2E5D", "\u2E5D"], /* OBLIQUE HYPHEN */ + ["\u2E5E", "\u2E5E"], + ["\u2E5F", "\u2E5F"], + ["\u2E60", "\u2E60"], + ["\u2E61", "\u2E61"], + ["\u2E62", "\u2E62"], + ["\u2E63", "\u2E63"], + ["\u2E64", "\u2E64"], + ["\u2E65", "\u2E65"], + ["\u2E66", "\u2E66"], + ["\u2E67", "\u2E67"], + ["\u2E68", "\u2E68"], + ["\u2E69", "\u2E69"], + ["\u2E6A", "\u2E6A"], + ["\u2E6B", "\u2E6B"], + ["\u2E6C", "\u2E6C"], + ["\u2E6D", "\u2E6D"], + ["\u2E6E", "\u2E6E"], + ["\u2E6F", "\u2E6F"], + ["\u2E70", "\u2E70"], + ["\u2E71", "\u2E71"], + ["\u2E72", "\u2E72"], + ["\u2E73", "\u2E73"], + ["\u2E74", "\u2E74"], + ["\u2E75", "\u2E75"], + ["\u2E76", "\u2E76"], + ["\u2E77", "\u2E77"], + ["\u2E78", "\u2E78"], + ["\u2E79", "\u2E79"], + ["\u2E7A", "\u2E7A"], + ["\u2E7B", "\u2E7B"], + ["\u2E7C", "\u2E7C"], + ["\u2E7D", "\u2E7D"], + ["\u2E7E", "\u2E7E"], + ["\u2E7F", "\u2E7F"], + ["\u2E80", "\u2E80"], /* CJK RADICAL REPEAT */ + ["\u2E81", "\u2E81"], /* CJK RADICAL CLIFF */ + ["\u2E82", "\u2E82"], /* CJK RADICAL SECOND ONE */ + ["\u2E83", "\u2E83"], /* CJK RADICAL SECOND TWO */ + ["\u2E84", "\u2E84"], /* CJK RADICAL SECOND THREE */ + ["\u2E85", "\u2E85"], /* CJK RADICAL PERSON */ + ["\u2E86", "\u2E86"], /* CJK RADICAL BOX */ + ["\u2E87", "\u2E87"], /* CJK RADICAL TABLE */ + ["\u2E88", "\u2E88"], /* CJK RADICAL KNIFE ONE */ + ["\u2E89", "\u2E89"], /* CJK RADICAL KNIFE TWO */ + ["\u2E8A", "\u2E8A"], /* CJK RADICAL DIVINATION */ + ["\u2E8B", "\u2E8B"], /* CJK RADICAL SEAL */ + ["\u2E8C", "\u2E8C"], /* CJK RADICAL SMALL ONE */ + ["\u2E8D", "\u2E8D"], /* CJK RADICAL SMALL TWO */ + ["\u2E8E", "\u2E8E"], /* CJK RADICAL LAME ONE */ + ["\u2E8F", "\u2E8F"], /* CJK RADICAL LAME TWO */ + ["\u2E90", "\u2E90"], /* CJK RADICAL LAME THREE */ + ["\u2E91", "\u2E91"], /* CJK RADICAL LAME FOUR */ + ["\u2E92", "\u2E92"], /* CJK RADICAL SNAKE */ + ["\u2E93", "\u2E93"], /* CJK RADICAL THREAD */ + ["\u2E94", "\u2E94"], /* CJK RADICAL SNOUT ONE */ + ["\u2E95", "\u2E95"], /* CJK RADICAL SNOUT TWO */ + ["\u2E96", "\u2E96"], /* CJK RADICAL HEART ONE */ + ["\u2E97", "\u2E97"], /* CJK RADICAL HEART TWO */ + ["\u2E98", "\u2E98"], /* CJK RADICAL HAND */ + ["\u2E99", "\u2E99"], /* CJK RADICAL RAP */ + ["\u2E9A", "\u2E9A"], + ["\u2E9B", "\u2E9B"], /* CJK RADICAL CHOKE */ + ["\u2E9C", "\u2E9C"], /* CJK RADICAL SUN */ + ["\u2E9D", "\u2E9D"], /* CJK RADICAL MOON */ + ["\u2E9E", "\u2E9E"], /* CJK RADICAL DEATH */ + ["\u2E9F", "\u2E9F"], /* CJK RADICAL MOTHER */ + ["\u2EA0", "\u2EA0"], /* CJK RADICAL CIVILIAN */ + ["\u2EA1", "\u2EA1"], /* CJK RADICAL WATER ONE */ + ["\u2EA2", "\u2EA2"], /* CJK RADICAL WATER TWO */ + ["\u2EA3", "\u2EA3"], /* CJK RADICAL FIRE */ + ["\u2EA4", "\u2EA4"], /* CJK RADICAL PAW ONE */ + ["\u2EA5", "\u2EA5"], /* CJK RADICAL PAW TWO */ + ["\u2EA6", "\u2EA6"], /* CJK RADICAL SIMPLIFIED HALF TREE TRUNK */ + ["\u2EA7", "\u2EA7"], /* CJK RADICAL COW */ + ["\u2EA8", "\u2EA8"], /* CJK RADICAL DOG */ + ["\u2EA9", "\u2EA9"], /* CJK RADICAL JADE */ + ["\u2EAA", "\u2EAA"], /* CJK RADICAL BOLT OF CLOTH */ + ["\u2EAB", "\u2EAB"], /* CJK RADICAL EYE */ + ["\u2EAC", "\u2EAC"], /* CJK RADICAL SPIRIT ONE */ + ["\u2EAD", "\u2EAD"], /* CJK RADICAL SPIRIT TWO */ + ["\u2EAE", "\u2EAE"], /* CJK RADICAL BAMBOO */ + ["\u2EAF", "\u2EAF"], /* CJK RADICAL SILK */ + ["\u2EB0", "\u2EB0"], /* CJK RADICAL C-SIMPLIFIED SILK */ + ["\u2EB1", "\u2EB1"], /* CJK RADICAL NET ONE */ + ["\u2EB2", "\u2EB2"], /* CJK RADICAL NET TWO */ + ["\u2EB3", "\u2EB3"], /* CJK RADICAL NET THREE */ + ["\u2EB4", "\u2EB4"], /* CJK RADICAL NET FOUR */ + ["\u2EB5", "\u2EB5"], /* CJK RADICAL MESH */ + ["\u2EB6", "\u2EB6"], /* CJK RADICAL SHEEP */ + ["\u2EB7", "\u2EB7"], /* CJK RADICAL RAM */ + ["\u2EB8", "\u2EB8"], /* CJK RADICAL EWE */ + ["\u2EB9", "\u2EB9"], /* CJK RADICAL OLD */ + ["\u2EBA", "\u2EBA"], /* CJK RADICAL BRUSH ONE */ + ["\u2EBB", "\u2EBB"], /* CJK RADICAL BRUSH TWO */ + ["\u2EBC", "\u2EBC"], /* CJK RADICAL MEAT */ + ["\u2EBD", "\u2EBD"], /* CJK RADICAL MORTAR */ + ["\u2EBE", "\u2EBE"], /* CJK RADICAL GRASS ONE */ + ["\u2EBF", "\u2EBF"], /* CJK RADICAL GRASS TWO */ + ["\u2EC0", "\u2EC0"], /* CJK RADICAL GRASS THREE */ + ["\u2EC1", "\u2EC1"], /* CJK RADICAL TIGER */ + ["\u2EC2", "\u2EC2"], /* CJK RADICAL CLOTHES */ + ["\u2EC3", "\u2EC3"], /* CJK RADICAL WEST ONE */ + ["\u2EC4", "\u2EC4"], /* CJK RADICAL WEST TWO */ + ["\u2EC5", "\u2EC5"], /* CJK RADICAL C-SIMPLIFIED SEE */ + ["\u2EC6", "\u2EC6"], /* CJK RADICAL SIMPLIFIED HORN */ + ["\u2EC7", "\u2EC7"], /* CJK RADICAL HORN */ + ["\u2EC8", "\u2EC8"], /* CJK RADICAL C-SIMPLIFIED SPEECH */ + ["\u2EC9", "\u2EC9"], /* CJK RADICAL C-SIMPLIFIED SHELL */ + ["\u2ECA", "\u2ECA"], /* CJK RADICAL FOOT */ + ["\u2ECB", "\u2ECB"], /* CJK RADICAL C-SIMPLIFIED CART */ + ["\u2ECC", "\u2ECC"], /* CJK RADICAL SIMPLIFIED WALK */ + ["\u2ECD", "\u2ECD"], /* CJK RADICAL WALK ONE */ + ["\u2ECE", "\u2ECE"], /* CJK RADICAL WALK TWO */ + ["\u2ECF", "\u2ECF"], /* CJK RADICAL CITY */ + ["\u2ED0", "\u2ED0"], /* CJK RADICAL C-SIMPLIFIED GOLD */ + ["\u2ED1", "\u2ED1"], /* CJK RADICAL LONG ONE */ + ["\u2ED2", "\u2ED2"], /* CJK RADICAL LONG TWO */ + ["\u2ED3", "\u2ED3"], /* CJK RADICAL C-SIMPLIFIED LONG */ + ["\u2ED4", "\u2ED4"], /* CJK RADICAL C-SIMPLIFIED GATE */ + ["\u2ED5", "\u2ED5"], /* CJK RADICAL MOUND ONE */ + ["\u2ED6", "\u2ED6"], /* CJK RADICAL MOUND TWO */ + ["\u2ED7", "\u2ED7"], /* CJK RADICAL RAIN */ + ["\u2ED8", "\u2ED8"], /* CJK RADICAL BLUE */ + ["\u2ED9", "\u2ED9"], /* CJK RADICAL C-SIMPLIFIED TANNED LEATHER */ + ["\u2EDA", "\u2EDA"], /* CJK RADICAL C-SIMPLIFIED LEAF */ + ["\u2EDB", "\u2EDB"], /* CJK RADICAL C-SIMPLIFIED WIND */ + ["\u2EDC", "\u2EDC"], /* CJK RADICAL C-SIMPLIFIED FLY */ + ["\u2EDD", "\u2EDD"], /* CJK RADICAL EAT ONE */ + ["\u2EDE", "\u2EDE"], /* CJK RADICAL EAT TWO */ + ["\u2EDF", "\u2EDF"], /* CJK RADICAL EAT THREE */ + ["\u2EE0", "\u2EE0"], /* CJK RADICAL C-SIMPLIFIED EAT */ + ["\u2EE1", "\u2EE1"], /* CJK RADICAL HEAD */ + ["\u2EE2", "\u2EE2"], /* CJK RADICAL C-SIMPLIFIED HORSE */ + ["\u2EE3", "\u2EE3"], /* CJK RADICAL BONE */ + ["\u2EE4", "\u2EE4"], /* CJK RADICAL GHOST */ + ["\u2EE5", "\u2EE5"], /* CJK RADICAL C-SIMPLIFIED FISH */ + ["\u2EE6", "\u2EE6"], /* CJK RADICAL C-SIMPLIFIED BIRD */ + ["\u2EE7", "\u2EE7"], /* CJK RADICAL C-SIMPLIFIED SALT */ + ["\u2EE8", "\u2EE8"], /* CJK RADICAL SIMPLIFIED WHEAT */ + ["\u2EE9", "\u2EE9"], /* CJK RADICAL SIMPLIFIED YELLOW */ + ["\u2EEA", "\u2EEA"], /* CJK RADICAL C-SIMPLIFIED FROG */ + ["\u2EEB", "\u2EEB"], /* CJK RADICAL J-SIMPLIFIED EVEN */ + ["\u2EEC", "\u2EEC"], /* CJK RADICAL C-SIMPLIFIED EVEN */ + ["\u2EED", "\u2EED"], /* CJK RADICAL J-SIMPLIFIED TOOTH */ + ["\u2EEE", "\u2EEE"], /* CJK RADICAL C-SIMPLIFIED TOOTH */ + ["\u2EEF", "\u2EEF"], /* CJK RADICAL J-SIMPLIFIED DRAGON */ + ["\u2EF0", "\u2EF0"], /* CJK RADICAL C-SIMPLIFIED DRAGON */ + ["\u2EF1", "\u2EF1"], /* CJK RADICAL TURTLE */ + ["\u2EF2", "\u2EF2"], /* CJK RADICAL J-SIMPLIFIED TURTLE */ + ["\u2EF3", "\u2EF3"], /* CJK RADICAL C-SIMPLIFIED TURTLE */ + ["\u2EF4", "\u2EF4"], + ["\u2EF5", "\u2EF5"], + ["\u2EF6", "\u2EF6"], + ["\u2EF7", "\u2EF7"], + ["\u2EF8", "\u2EF8"], + ["\u2EF9", "\u2EF9"], + ["\u2EFA", "\u2EFA"], + ["\u2EFB", "\u2EFB"], + ["\u2EFC", "\u2EFC"], + ["\u2EFD", "\u2EFD"], + ["\u2EFE", "\u2EFE"], + ["\u2EFF", "\u2EFF"], + ["\u2F00", "\u2F00"], /* KANGXI RADICAL ONE */ + ["\u2F01", "\u2F01"], /* KANGXI RADICAL LINE */ + ["\u2F02", "\u2F02"], /* KANGXI RADICAL DOT */ + ["\u2F03", "\u2F03"], /* KANGXI RADICAL SLASH */ + ["\u2F04", "\u2F04"], /* KANGXI RADICAL SECOND */ + ["\u2F05", "\u2F05"], /* KANGXI RADICAL HOOK */ + ["\u2F06", "\u2F06"], /* KANGXI RADICAL TWO */ + ["\u2F07", "\u2F07"], /* KANGXI RADICAL LID */ + ["\u2F08", "\u2F08"], /* KANGXI RADICAL MAN */ + ["\u2F09", "\u2F09"], /* KANGXI RADICAL LEGS */ + ["\u2F0A", "\u2F0A"], /* KANGXI RADICAL ENTER */ + ["\u2F0B", "\u2F0B"], /* KANGXI RADICAL EIGHT */ + ["\u2F0C", "\u2F0C"], /* KANGXI RADICAL DOWN BOX */ + ["\u2F0D", "\u2F0D"], /* KANGXI RADICAL COVER */ + ["\u2F0E", "\u2F0E"], /* KANGXI RADICAL ICE */ + ["\u2F0F", "\u2F0F"], /* KANGXI RADICAL TABLE */ + ["\u2F10", "\u2F10"], /* KANGXI RADICAL OPEN BOX */ + ["\u2F11", "\u2F11"], /* KANGXI RADICAL KNIFE */ + ["\u2F12", "\u2F12"], /* KANGXI RADICAL POWER */ + ["\u2F13", "\u2F13"], /* KANGXI RADICAL WRAP */ + ["\u2F14", "\u2F14"], /* KANGXI RADICAL SPOON */ + ["\u2F15", "\u2F15"], /* KANGXI RADICAL RIGHT OPEN BOX */ + ["\u2F16", "\u2F16"], /* KANGXI RADICAL HIDING ENCLOSURE */ + ["\u2F17", "\u2F17"], /* KANGXI RADICAL TEN */ + ["\u2F18", "\u2F18"], /* KANGXI RADICAL DIVINATION */ + ["\u2F19", "\u2F19"], /* KANGXI RADICAL SEAL */ + ["\u2F1A", "\u2F1A"], /* KANGXI RADICAL CLIFF */ + ["\u2F1B", "\u2F1B"], /* KANGXI RADICAL PRIVATE */ + ["\u2F1C", "\u2F1C"], /* KANGXI RADICAL AGAIN */ + ["\u2F1D", "\u2F1D"], /* KANGXI RADICAL MOUTH */ + ["\u2F1E", "\u2F1E"], /* KANGXI RADICAL ENCLOSURE */ + ["\u2F1F", "\u2F1F"], /* KANGXI RADICAL EARTH */ + ["\u2F20", "\u2F20"], /* KANGXI RADICAL SCHOLAR */ + ["\u2F21", "\u2F21"], /* KANGXI RADICAL GO */ + ["\u2F22", "\u2F22"], /* KANGXI RADICAL GO SLOWLY */ + ["\u2F23", "\u2F23"], /* KANGXI RADICAL EVENING */ + ["\u2F24", "\u2F24"], /* KANGXI RADICAL BIG */ + ["\u2F25", "\u2F25"], /* KANGXI RADICAL WOMAN */ + ["\u2F26", "\u2F26"], /* KANGXI RADICAL CHILD */ + ["\u2F27", "\u2F27"], /* KANGXI RADICAL ROOF */ + ["\u2F28", "\u2F28"], /* KANGXI RADICAL INCH */ + ["\u2F29", "\u2F29"], /* KANGXI RADICAL SMALL */ + ["\u2F2A", "\u2F2A"], /* KANGXI RADICAL LAME */ + ["\u2F2B", "\u2F2B"], /* KANGXI RADICAL CORPSE */ + ["\u2F2C", "\u2F2C"], /* KANGXI RADICAL SPROUT */ + ["\u2F2D", "\u2F2D"], /* KANGXI RADICAL MOUNTAIN */ + ["\u2F2E", "\u2F2E"], /* KANGXI RADICAL RIVER */ + ["\u2F2F", "\u2F2F"], /* KANGXI RADICAL WORK */ + ["\u2F30", "\u2F30"], /* KANGXI RADICAL ONESELF */ + ["\u2F31", "\u2F31"], /* KANGXI RADICAL TURBAN */ + ["\u2F32", "\u2F32"], /* KANGXI RADICAL DRY */ + ["\u2F33", "\u2F33"], /* KANGXI RADICAL SHORT THREAD */ + ["\u2F34", "\u2F34"], /* KANGXI RADICAL DOTTED CLIFF */ + ["\u2F35", "\u2F35"], /* KANGXI RADICAL LONG STRIDE */ + ["\u2F36", "\u2F36"], /* KANGXI RADICAL TWO HANDS */ + ["\u2F37", "\u2F37"], /* KANGXI RADICAL SHOOT */ + ["\u2F38", "\u2F38"], /* KANGXI RADICAL BOW */ + ["\u2F39", "\u2F39"], /* KANGXI RADICAL SNOUT */ + ["\u2F3A", "\u2F3A"], /* KANGXI RADICAL BRISTLE */ + ["\u2F3B", "\u2F3B"], /* KANGXI RADICAL STEP */ + ["\u2F3C", "\u2F3C"], /* KANGXI RADICAL HEART */ + ["\u2F3D", "\u2F3D"], /* KANGXI RADICAL HALBERD */ + ["\u2F3E", "\u2F3E"], /* KANGXI RADICAL DOOR */ + ["\u2F3F", "\u2F3F"], /* KANGXI RADICAL HAND */ + ["\u2F40", "\u2F40"], /* KANGXI RADICAL BRANCH */ + ["\u2F41", "\u2F41"], /* KANGXI RADICAL RAP */ + ["\u2F42", "\u2F42"], /* KANGXI RADICAL SCRIPT */ + ["\u2F43", "\u2F43"], /* KANGXI RADICAL DIPPER */ + ["\u2F44", "\u2F44"], /* KANGXI RADICAL AXE */ + ["\u2F45", "\u2F45"], /* KANGXI RADICAL SQUARE */ + ["\u2F46", "\u2F46"], /* KANGXI RADICAL NOT */ + ["\u2F47", "\u2F47"], /* KANGXI RADICAL SUN */ + ["\u2F48", "\u2F48"], /* KANGXI RADICAL SAY */ + ["\u2F49", "\u2F49"], /* KANGXI RADICAL MOON */ + ["\u2F4A", "\u2F4A"], /* KANGXI RADICAL TREE */ + ["\u2F4B", "\u2F4B"], /* KANGXI RADICAL LACK */ + ["\u2F4C", "\u2F4C"], /* KANGXI RADICAL STOP */ + ["\u2F4D", "\u2F4D"], /* KANGXI RADICAL DEATH */ + ["\u2F4E", "\u2F4E"], /* KANGXI RADICAL WEAPON */ + ["\u2F4F", "\u2F4F"], /* KANGXI RADICAL DO NOT */ + ["\u2F50", "\u2F50"], /* KANGXI RADICAL COMPARE */ + ["\u2F51", "\u2F51"], /* KANGXI RADICAL FUR */ + ["\u2F52", "\u2F52"], /* KANGXI RADICAL CLAN */ + ["\u2F53", "\u2F53"], /* KANGXI RADICAL STEAM */ + ["\u2F54", "\u2F54"], /* KANGXI RADICAL WATER */ + ["\u2F55", "\u2F55"], /* KANGXI RADICAL FIRE */ + ["\u2F56", "\u2F56"], /* KANGXI RADICAL CLAW */ + ["\u2F57", "\u2F57"], /* KANGXI RADICAL FATHER */ + ["\u2F58", "\u2F58"], /* KANGXI RADICAL DOUBLE X */ + ["\u2F59", "\u2F59"], /* KANGXI RADICAL HALF TREE TRUNK */ + ["\u2F5A", "\u2F5A"], /* KANGXI RADICAL SLICE */ + ["\u2F5B", "\u2F5B"], /* KANGXI RADICAL FANG */ + ["\u2F5C", "\u2F5C"], /* KANGXI RADICAL COW */ + ["\u2F5D", "\u2F5D"], /* KANGXI RADICAL DOG */ + ["\u2F5E", "\u2F5E"], /* KANGXI RADICAL PROFOUND */ + ["\u2F5F", "\u2F5F"], /* KANGXI RADICAL JADE */ + ["\u2F60", "\u2F60"], /* KANGXI RADICAL MELON */ + ["\u2F61", "\u2F61"], /* KANGXI RADICAL TILE */ + ["\u2F62", "\u2F62"], /* KANGXI RADICAL SWEET */ + ["\u2F63", "\u2F63"], /* KANGXI RADICAL LIFE */ + ["\u2F64", "\u2F64"], /* KANGXI RADICAL USE */ + ["\u2F65", "\u2F65"], /* KANGXI RADICAL FIELD */ + ["\u2F66", "\u2F66"], /* KANGXI RADICAL BOLT OF CLOTH */ + ["\u2F67", "\u2F67"], /* KANGXI RADICAL SICKNESS */ + ["\u2F68", "\u2F68"], /* KANGXI RADICAL DOTTED TENT */ + ["\u2F69", "\u2F69"], /* KANGXI RADICAL WHITE */ + ["\u2F6A", "\u2F6A"], /* KANGXI RADICAL SKIN */ + ["\u2F6B", "\u2F6B"], /* KANGXI RADICAL DISH */ + ["\u2F6C", "\u2F6C"], /* KANGXI RADICAL EYE */ + ["\u2F6D", "\u2F6D"], /* KANGXI RADICAL SPEAR */ + ["\u2F6E", "\u2F6E"], /* KANGXI RADICAL ARROW */ + ["\u2F6F", "\u2F6F"], /* KANGXI RADICAL STONE */ + ["\u2F70", "\u2F70"], /* KANGXI RADICAL SPIRIT */ + ["\u2F71", "\u2F71"], /* KANGXI RADICAL TRACK */ + ["\u2F72", "\u2F72"], /* KANGXI RADICAL GRAIN */ + ["\u2F73", "\u2F73"], /* KANGXI RADICAL CAVE */ + ["\u2F74", "\u2F74"], /* KANGXI RADICAL STAND */ + ["\u2F75", "\u2F75"], /* KANGXI RADICAL BAMBOO */ + ["\u2F76", "\u2F76"], /* KANGXI RADICAL RICE */ + ["\u2F77", "\u2F77"], /* KANGXI RADICAL SILK */ + ["\u2F78", "\u2F78"], /* KANGXI RADICAL JAR */ + ["\u2F79", "\u2F79"], /* KANGXI RADICAL NET */ + ["\u2F7A", "\u2F7A"], /* KANGXI RADICAL SHEEP */ + ["\u2F7B", "\u2F7B"], /* KANGXI RADICAL FEATHER */ + ["\u2F7C", "\u2F7C"], /* KANGXI RADICAL OLD */ + ["\u2F7D", "\u2F7D"], /* KANGXI RADICAL AND */ + ["\u2F7E", "\u2F7E"], /* KANGXI RADICAL PLOW */ + ["\u2F7F", "\u2F7F"], /* KANGXI RADICAL EAR */ + ["\u2F80", "\u2F80"], /* KANGXI RADICAL BRUSH */ + ["\u2F81", "\u2F81"], /* KANGXI RADICAL MEAT */ + ["\u2F82", "\u2F82"], /* KANGXI RADICAL MINISTER */ + ["\u2F83", "\u2F83"], /* KANGXI RADICAL SELF */ + ["\u2F84", "\u2F84"], /* KANGXI RADICAL ARRIVE */ + ["\u2F85", "\u2F85"], /* KANGXI RADICAL MORTAR */ + ["\u2F86", "\u2F86"], /* KANGXI RADICAL TONGUE */ + ["\u2F87", "\u2F87"], /* KANGXI RADICAL OPPOSE */ + ["\u2F88", "\u2F88"], /* KANGXI RADICAL BOAT */ + ["\u2F89", "\u2F89"], /* KANGXI RADICAL STOPPING */ + ["\u2F8A", "\u2F8A"], /* KANGXI RADICAL COLOR */ + ["\u2F8B", "\u2F8B"], /* KANGXI RADICAL GRASS */ + ["\u2F8C", "\u2F8C"], /* KANGXI RADICAL TIGER */ + ["\u2F8D", "\u2F8D"], /* KANGXI RADICAL INSECT */ + ["\u2F8E", "\u2F8E"], /* KANGXI RADICAL BLOOD */ + ["\u2F8F", "\u2F8F"], /* KANGXI RADICAL WALK ENCLOSURE */ + ["\u2F90", "\u2F90"], /* KANGXI RADICAL CLOTHES */ + ["\u2F91", "\u2F91"], /* KANGXI RADICAL WEST */ + ["\u2F92", "\u2F92"], /* KANGXI RADICAL SEE */ + ["\u2F93", "\u2F93"], /* KANGXI RADICAL HORN */ + ["\u2F94", "\u2F94"], /* KANGXI RADICAL SPEECH */ + ["\u2F95", "\u2F95"], /* KANGXI RADICAL VALLEY */ + ["\u2F96", "\u2F96"], /* KANGXI RADICAL BEAN */ + ["\u2F97", "\u2F97"], /* KANGXI RADICAL PIG */ + ["\u2F98", "\u2F98"], /* KANGXI RADICAL BADGER */ + ["\u2F99", "\u2F99"], /* KANGXI RADICAL SHELL */ + ["\u2F9A", "\u2F9A"], /* KANGXI RADICAL RED */ + ["\u2F9B", "\u2F9B"], /* KANGXI RADICAL RUN */ + ["\u2F9C", "\u2F9C"], /* KANGXI RADICAL FOOT */ + ["\u2F9D", "\u2F9D"], /* KANGXI RADICAL BODY */ + ["\u2F9E", "\u2F9E"], /* KANGXI RADICAL CART */ + ["\u2F9F", "\u2F9F"], /* KANGXI RADICAL BITTER */ + ["\u2FA0", "\u2FA0"], /* KANGXI RADICAL MORNING */ + ["\u2FA1", "\u2FA1"], /* KANGXI RADICAL WALK */ + ["\u2FA2", "\u2FA2"], /* KANGXI RADICAL CITY */ + ["\u2FA3", "\u2FA3"], /* KANGXI RADICAL WINE */ + ["\u2FA4", "\u2FA4"], /* KANGXI RADICAL DISTINGUISH */ + ["\u2FA5", "\u2FA5"], /* KANGXI RADICAL VILLAGE */ + ["\u2FA6", "\u2FA6"], /* KANGXI RADICAL GOLD */ + ["\u2FA7", "\u2FA7"], /* KANGXI RADICAL LONG */ + ["\u2FA8", "\u2FA8"], /* KANGXI RADICAL GATE */ + ["\u2FA9", "\u2FA9"], /* KANGXI RADICAL MOUND */ + ["\u2FAA", "\u2FAA"], /* KANGXI RADICAL SLAVE */ + ["\u2FAB", "\u2FAB"], /* KANGXI RADICAL SHORT TAILED BIRD */ + ["\u2FAC", "\u2FAC"], /* KANGXI RADICAL RAIN */ + ["\u2FAD", "\u2FAD"], /* KANGXI RADICAL BLUE */ + ["\u2FAE", "\u2FAE"], /* KANGXI RADICAL WRONG */ + ["\u2FAF", "\u2FAF"], /* KANGXI RADICAL FACE */ + ["\u2FB0", "\u2FB0"], /* KANGXI RADICAL LEATHER */ + ["\u2FB1", "\u2FB1"], /* KANGXI RADICAL TANNED LEATHER */ + ["\u2FB2", "\u2FB2"], /* KANGXI RADICAL LEEK */ + ["\u2FB3", "\u2FB3"], /* KANGXI RADICAL SOUND */ + ["\u2FB4", "\u2FB4"], /* KANGXI RADICAL LEAF */ + ["\u2FB5", "\u2FB5"], /* KANGXI RADICAL WIND */ + ["\u2FB6", "\u2FB6"], /* KANGXI RADICAL FLY */ + ["\u2FB7", "\u2FB7"], /* KANGXI RADICAL EAT */ + ["\u2FB8", "\u2FB8"], /* KANGXI RADICAL HEAD */ + ["\u2FB9", "\u2FB9"], /* KANGXI RADICAL FRAGRANT */ + ["\u2FBA", "\u2FBA"], /* KANGXI RADICAL HORSE */ + ["\u2FBB", "\u2FBB"], /* KANGXI RADICAL BONE */ + ["\u2FBC", "\u2FBC"], /* KANGXI RADICAL TALL */ + ["\u2FBD", "\u2FBD"], /* KANGXI RADICAL HAIR */ + ["\u2FBE", "\u2FBE"], /* KANGXI RADICAL FIGHT */ + ["\u2FBF", "\u2FBF"], /* KANGXI RADICAL SACRIFICIAL WINE */ + ["\u2FC0", "\u2FC0"], /* KANGXI RADICAL CAULDRON */ + ["\u2FC1", "\u2FC1"], /* KANGXI RADICAL GHOST */ + ["\u2FC2", "\u2FC2"], /* KANGXI RADICAL FISH */ + ["\u2FC3", "\u2FC3"], /* KANGXI RADICAL BIRD */ + ["\u2FC4", "\u2FC4"], /* KANGXI RADICAL SALT */ + ["\u2FC5", "\u2FC5"], /* KANGXI RADICAL DEER */ + ["\u2FC6", "\u2FC6"], /* KANGXI RADICAL WHEAT */ + ["\u2FC7", "\u2FC7"], /* KANGXI RADICAL HEMP */ + ["\u2FC8", "\u2FC8"], /* KANGXI RADICAL YELLOW */ + ["\u2FC9", "\u2FC9"], /* KANGXI RADICAL MILLET */ + ["\u2FCA", "\u2FCA"], /* KANGXI RADICAL BLACK */ + ["\u2FCB", "\u2FCB"], /* KANGXI RADICAL EMBROIDERY */ + ["\u2FCC", "\u2FCC"], /* KANGXI RADICAL FROG */ + ["\u2FCD", "\u2FCD"], /* KANGXI RADICAL TRIPOD */ + ["\u2FCE", "\u2FCE"], /* KANGXI RADICAL DRUM */ + ["\u2FCF", "\u2FCF"], /* KANGXI RADICAL RAT */ + ["\u2FD0", "\u2FD0"], /* KANGXI RADICAL NOSE */ + ["\u2FD1", "\u2FD1"], /* KANGXI RADICAL EVEN */ + ["\u2FD2", "\u2FD2"], /* KANGXI RADICAL TOOTH */ + ["\u2FD3", "\u2FD3"], /* KANGXI RADICAL DRAGON */ + ["\u2FD4", "\u2FD4"], /* KANGXI RADICAL TURTLE */ + ["\u2FD5", "\u2FD5"], /* KANGXI RADICAL FLUTE */ + ["\u2FD6", "\u2FD6"], + ["\u2FD7", "\u2FD7"], + ["\u2FD8", "\u2FD8"], + ["\u2FD9", "\u2FD9"], + ["\u2FDA", "\u2FDA"], + ["\u2FDB", "\u2FDB"], + ["\u2FDC", "\u2FDC"], + ["\u2FDD", "\u2FDD"], + ["\u2FDE", "\u2FDE"], + ["\u2FDF", "\u2FDF"], + ["\u2FE0", "\u2FE0"], + ["\u2FE1", "\u2FE1"], + ["\u2FE2", "\u2FE2"], + ["\u2FE3", "\u2FE3"], + ["\u2FE4", "\u2FE4"], + ["\u2FE5", "\u2FE5"], + ["\u2FE6", "\u2FE6"], + ["\u2FE7", "\u2FE7"], + ["\u2FE8", "\u2FE8"], + ["\u2FE9", "\u2FE9"], + ["\u2FEA", "\u2FEA"], + ["\u2FEB", "\u2FEB"], + ["\u2FEC", "\u2FEC"], + ["\u2FED", "\u2FED"], + ["\u2FEE", "\u2FEE"], + ["\u2FEF", "\u2FEF"], + ["\u2FF0", "\u2FF0"], /* IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT */ + ["\u2FF1", "\u2FF1"], /* IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW */ + ["\u2FF2", "\u2FF2"], /* IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT */ + ["\u2FF3", "\u2FF3"], /* IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW */ + ["\u2FF4", "\u2FF4"], /* IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND */ + ["\u2FF5", "\u2FF5"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE */ + ["\u2FF6", "\u2FF6"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW */ + ["\u2FF7", "\u2FF7"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT */ + ["\u2FF8", "\u2FF8"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT */ + ["\u2FF9", "\u2FF9"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT */ + ["\u2FFA", "\u2FFA"], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT */ + ["\u2FFB", "\u2FFB"], /* IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID */ + ["\u2FFC", "\u2FFC"], + ["\u2FFD", "\u2FFD"], + ["\u2FFE", "\u2FFE"], + ["\u2FFF", "\u2FFF"], + ["\u3000", "\u3000"], /* IDEOGRAPHIC SPACE */ + ["\u3001", "\u3001"], /* IDEOGRAPHIC COMMA */ + ["\u3002", "\u3002"], /* IDEOGRAPHIC FULL STOP (IDEOGRAPHIC PERIOD) */ + ["\u3003", "\u3003"], /* DITTO MARK */ + ["\u3004", "\u3004"], /* JAPANESE INDUSTRIAL STANDARD SYMBOL */ + ["\u3005", "\u3005"], /* IDEOGRAPHIC ITERATION MARK */ + ["\u3006", "\u3006"], /* IDEOGRAPHIC CLOSING MARK */ + ["\u3007", "\u3007"], /* IDEOGRAPHIC NUMBER ZERO */ + ["\u3008", "\u3008"], /* LEFT ANGLE BRACKET (OPENING ANGLE BRACKET) */ + ["\u3009", "\u3009"], /* RIGHT ANGLE BRACKET (CLOSING ANGLE BRACKET) */ + ["\u300A", "\u300A"], /* LEFT DOUBLE ANGLE BRACKET (OPENING DOUBLE ANGLE BRACKET) */ + ["\u300B", "\u300B"], /* RIGHT DOUBLE ANGLE BRACKET (CLOSING DOUBLE ANGLE BRACKET) */ + ["\u300C", "\u300C"], /* LEFT CORNER BRACKET (OPENING CORNER BRACKET) */ + ["\u300D", "\u300D"], /* RIGHT CORNER BRACKET (CLOSING CORNER BRACKET) */ + ["\u300E", "\u300E"], /* LEFT WHITE CORNER BRACKET (OPENING WHITE CORNER BRACKET) */ + ["\u300F", "\u300F"], /* RIGHT WHITE CORNER BRACKET (CLOSING WHITE CORNER BRACKET) */ + ["\u3010", "\u3010"], /* LEFT BLACK LENTICULAR BRACKET (OPENING BLACK LENTICULAR BRACKET) */ + ["\u3011", "\u3011"], /* RIGHT BLACK LENTICULAR BRACKET (CLOSING BLACK LENTICULAR BRACKET) */ + ["\u3012", "\u3012"], /* POSTAL MARK */ + ["\u3013", "\u3013"], /* GETA MARK */ + ["\u3014", "\u3014"], /* LEFT TORTOISE SHELL BRACKET (OPENING TORTOISE SHELL BRACKET) */ + ["\u3015", "\u3015"], /* RIGHT TORTOISE SHELL BRACKET (CLOSING TORTOISE SHELL BRACKET) */ + ["\u3016", "\u3016"], /* LEFT WHITE LENTICULAR BRACKET (OPENING WHITE LENTICULAR BRACKET) */ + ["\u3017", "\u3017"], /* RIGHT WHITE LENTICULAR BRACKET (CLOSING WHITE LENTICULAR BRACKET) */ + ["\u3018", "\u3018"], /* LEFT WHITE TORTOISE SHELL BRACKET (OPENING WHITE TORTOISE SHELL BRACKET) */ + ["\u3019", "\u3019"], /* RIGHT WHITE TORTOISE SHELL BRACKET (CLOSING WHITE TORTOISE SHELL BRACKET) */ + ["\u301A", "\u301A"], /* LEFT WHITE SQUARE BRACKET (OPENING WHITE SQUARE BRACKET) */ + ["\u301B", "\u301B"], /* RIGHT WHITE SQUARE BRACKET (CLOSING WHITE SQUARE BRACKET) */ + ["\u301C", "\u301C"], /* WAVE DASH */ + ["\u301D", "\u301D"], /* REVERSED DOUBLE PRIME QUOTATION MARK */ + ["\u301E", "\u301E"], /* DOUBLE PRIME QUOTATION MARK */ + ["\u301F", "\u301F"], /* LOW DOUBLE PRIME QUOTATION MARK */ + ["\u3020", "\u3020"], /* POSTAL MARK FACE */ + ["\u3021", "\u3021"], /* HANGZHOU NUMERAL ONE */ + ["\u3022", "\u3022"], /* HANGZHOU NUMERAL TWO */ + ["\u3023", "\u3023"], /* HANGZHOU NUMERAL THREE */ + ["\u3024", "\u3024"], /* HANGZHOU NUMERAL FOUR */ + ["\u3025", "\u3025"], /* HANGZHOU NUMERAL FIVE */ + ["\u3026", "\u3026"], /* HANGZHOU NUMERAL SIX */ + ["\u3027", "\u3027"], /* HANGZHOU NUMERAL SEVEN */ + ["\u3028", "\u3028"], /* HANGZHOU NUMERAL EIGHT */ + ["\u3029", "\u3029"], /* HANGZHOU NUMERAL NINE */ + ["\u302A", "\u302A"], /* IDEOGRAPHIC LEVEL TONE MARK */ + ["\u302B", "\u302B"], /* IDEOGRAPHIC RISING TONE MARK */ + ["\u302C", "\u302C"], /* IDEOGRAPHIC DEPARTING TONE MARK */ + ["\u302D", "\u302D"], /* IDEOGRAPHIC ENTERING TONE MARK */ + ["\u302E", "\u302E"], /* HANGUL SINGLE DOT TONE MARK */ + ["\u302F", "\u302F"], /* HANGUL DOUBLE DOT TONE MARK */ + ["\u3030", "\u3030"], /* WAVY DASH */ + ["\u3031", "\u3031"], /* VERTICAL KANA REPEAT MARK */ + ["\u3032", "\u3032"], /* VERTICAL KANA REPEAT WITH VOICED SOUND MARK */ + ["\u3033", "\u3033"], /* VERTICAL KANA REPEAT MARK UPPER HALF */ + ["\u3034", "\u3034"], /* VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF */ + ["\u3035", "\u3035"], /* VERTICAL KANA REPEAT MARK LOWER HALF */ + ["\u3036", "\u3036"], /* CIRCLED POSTAL MARK */ + ["\u3037", "\u3037"], /* IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL */ + ["\u3038", "\u3038"], /* HANGZHOU NUMERAL TEN */ + ["\u3039", "\u3039"], /* HANGZHOU NUMERAL TWENTY */ + ["\u303A", "\u303A"], /* HANGZHOU NUMERAL THIRTY */ + ["\u303B", "\u303B"], /* VERTICAL IDEOGRAPHIC ITERATION MARK */ + ["\u303C", "\u303C"], /* MASU MARK */ + ["\u303D", "\u303D"], /* PART ALTERNATION MARK */ + ["\u303E", "\u303E"], /* IDEOGRAPHIC VARIATION INDICATOR */ + ["\u303F", "\u303F"], /* IDEOGRAPHIC HALF FILL SPACE */ + ["\u3040", "\u3040"], + ["\u3041", "\u3041"], /* HIRAGANA LETTER SMALL A */ + ["\u3042", "\u3042"], /* HIRAGANA LETTER A */ + ["\u3043", "\u3043"], /* HIRAGANA LETTER SMALL I */ + ["\u3044", "\u3044"], /* HIRAGANA LETTER I */ + ["\u3045", "\u3045"], /* HIRAGANA LETTER SMALL U */ + ["\u3046", "\u3046"], /* HIRAGANA LETTER U */ + ["\u3047", "\u3047"], /* HIRAGANA LETTER SMALL E */ + ["\u3048", "\u3048"], /* HIRAGANA LETTER E */ + ["\u3049", "\u3049"], /* HIRAGANA LETTER SMALL O */ + ["\u304A", "\u304A"], /* HIRAGANA LETTER O */ + ["\u304B", "\u304B"], /* HIRAGANA LETTER KA */ + ["\u304C", "\u304C"], /* HIRAGANA LETTER GA */ + ["\u304D", "\u304D"], /* HIRAGANA LETTER KI */ + ["\u304E", "\u304E"], /* HIRAGANA LETTER GI */ + ["\u304F", "\u304F"], /* HIRAGANA LETTER KU */ + ["\u3050", "\u3050"], /* HIRAGANA LETTER GU */ + ["\u3051", "\u3051"], /* HIRAGANA LETTER KE */ + ["\u3052", "\u3052"], /* HIRAGANA LETTER GE */ + ["\u3053", "\u3053"], /* HIRAGANA LETTER KO */ + ["\u3054", "\u3054"], /* HIRAGANA LETTER GO */ + ["\u3055", "\u3055"], /* HIRAGANA LETTER SA */ + ["\u3056", "\u3056"], /* HIRAGANA LETTER ZA */ + ["\u3057", "\u3057"], /* HIRAGANA LETTER SI */ + ["\u3058", "\u3058"], /* HIRAGANA LETTER ZI */ + ["\u3059", "\u3059"], /* HIRAGANA LETTER SU */ + ["\u305A", "\u305A"], /* HIRAGANA LETTER ZU */ + ["\u305B", "\u305B"], /* HIRAGANA LETTER SE */ + ["\u305C", "\u305C"], /* HIRAGANA LETTER ZE */ + ["\u305D", "\u305D"], /* HIRAGANA LETTER SO */ + ["\u305E", "\u305E"], /* HIRAGANA LETTER ZO */ + ["\u305F", "\u305F"], /* HIRAGANA LETTER TA */ + ["\u3060", "\u3060"], /* HIRAGANA LETTER DA */ + ["\u3061", "\u3061"], /* HIRAGANA LETTER TI */ + ["\u3062", "\u3062"], /* HIRAGANA LETTER DI */ + ["\u3063", "\u3063"], /* HIRAGANA LETTER SMALL TU */ + ["\u3064", "\u3064"], /* HIRAGANA LETTER TU */ + ["\u3065", "\u3065"], /* HIRAGANA LETTER DU */ + ["\u3066", "\u3066"], /* HIRAGANA LETTER TE */ + ["\u3067", "\u3067"], /* HIRAGANA LETTER DE */ + ["\u3068", "\u3068"], /* HIRAGANA LETTER TO */ + ["\u3069", "\u3069"], /* HIRAGANA LETTER DO */ + ["\u306A", "\u306A"], /* HIRAGANA LETTER NA */ + ["\u306B", "\u306B"], /* HIRAGANA LETTER NI */ + ["\u306C", "\u306C"], /* HIRAGANA LETTER NU */ + ["\u306D", "\u306D"], /* HIRAGANA LETTER NE */ + ["\u306E", "\u306E"], /* HIRAGANA LETTER NO */ + ["\u306F", "\u306F"], /* HIRAGANA LETTER HA */ + ["\u3070", "\u3070"], /* HIRAGANA LETTER BA */ + ["\u3071", "\u3071"], /* HIRAGANA LETTER PA */ + ["\u3072", "\u3072"], /* HIRAGANA LETTER HI */ + ["\u3073", "\u3073"], /* HIRAGANA LETTER BI */ + ["\u3074", "\u3074"], /* HIRAGANA LETTER PI */ + ["\u3075", "\u3075"], /* HIRAGANA LETTER HU */ + ["\u3076", "\u3076"], /* HIRAGANA LETTER BU */ + ["\u3077", "\u3077"], /* HIRAGANA LETTER PU */ + ["\u3078", "\u3078"], /* HIRAGANA LETTER HE */ + ["\u3079", "\u3079"], /* HIRAGANA LETTER BE */ + ["\u307A", "\u307A"], /* HIRAGANA LETTER PE */ + ["\u307B", "\u307B"], /* HIRAGANA LETTER HO */ + ["\u307C", "\u307C"], /* HIRAGANA LETTER BO */ + ["\u307D", "\u307D"], /* HIRAGANA LETTER PO */ + ["\u307E", "\u307E"], /* HIRAGANA LETTER MA */ + ["\u307F", "\u307F"], /* HIRAGANA LETTER MI */ + ["\u3080", "\u3080"], /* HIRAGANA LETTER MU */ + ["\u3081", "\u3081"], /* HIRAGANA LETTER ME */ + ["\u3082", "\u3082"], /* HIRAGANA LETTER MO */ + ["\u3083", "\u3083"], /* HIRAGANA LETTER SMALL YA */ + ["\u3084", "\u3084"], /* HIRAGANA LETTER YA */ + ["\u3085", "\u3085"], /* HIRAGANA LETTER SMALL YU */ + ["\u3086", "\u3086"], /* HIRAGANA LETTER YU */ + ["\u3087", "\u3087"], /* HIRAGANA LETTER SMALL YO */ + ["\u3088", "\u3088"], /* HIRAGANA LETTER YO */ + ["\u3089", "\u3089"], /* HIRAGANA LETTER RA */ + ["\u308A", "\u308A"], /* HIRAGANA LETTER RI */ + ["\u308B", "\u308B"], /* HIRAGANA LETTER RU */ + ["\u308C", "\u308C"], /* HIRAGANA LETTER RE */ + ["\u308D", "\u308D"], /* HIRAGANA LETTER RO */ + ["\u308E", "\u308E"], /* HIRAGANA LETTER SMALL WA */ + ["\u308F", "\u308F"], /* HIRAGANA LETTER WA */ + ["\u3090", "\u3090"], /* HIRAGANA LETTER WI */ + ["\u3091", "\u3091"], /* HIRAGANA LETTER WE */ + ["\u3092", "\u3092"], /* HIRAGANA LETTER WO */ + ["\u3093", "\u3093"], /* HIRAGANA LETTER N */ + ["\u3094", "\u3094"], /* HIRAGANA LETTER VU */ + ["\u3095", "\u3095"], /* HIRAGANA LETTER SMALL KA */ + ["\u3096", "\u3096"], /* HIRAGANA LETTER SMALL KE */ + ["\u3097", "\u3097"], + ["\u3098", "\u3098"], + ["\u3099", "\u3099"], /* COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK (NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK) */ + ["\u309A", "\u309A"], /* COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK (NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK) */ + ["\u309B", "\u309B"], /* KATAKANA-HIRAGANA VOICED SOUND MARK */ + ["\u309C", "\u309C"], /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ + ["\u309D", "\u309D"], /* HIRAGANA ITERATION MARK */ + ["\u309E", "\u309E"], /* HIRAGANA VOICED ITERATION MARK */ + ["\u309F", "\u309F"], /* HIRAGANA DIGRAPH YORI */ + ["\u30A0", "\u30A0"], /* KATAKANA-HIRAGANA DOUBLE HYPHEN */ + ["\u30A1", "\u30A1"], /* KATAKANA LETTER SMALL A */ + ["\u30A2", "\u30A2"], /* KATAKANA LETTER A */ + ["\u30A3", "\u30A3"], /* KATAKANA LETTER SMALL I */ + ["\u30A4", "\u30A4"], /* KATAKANA LETTER I */ + ["\u30A5", "\u30A5"], /* KATAKANA LETTER SMALL U */ + ["\u30A6", "\u30A6"], /* KATAKANA LETTER U */ + ["\u30A7", "\u30A7"], /* KATAKANA LETTER SMALL E */ + ["\u30A8", "\u30A8"], /* KATAKANA LETTER E */ + ["\u30A9", "\u30A9"], /* KATAKANA LETTER SMALL O */ + ["\u30AA", "\u30AA"], /* KATAKANA LETTER O */ + ["\u30AB", "\u30AB"], /* KATAKANA LETTER KA */ + ["\u30AC", "\u30AC"], /* KATAKANA LETTER GA */ + ["\u30AD", "\u30AD"], /* KATAKANA LETTER KI */ + ["\u30AE", "\u30AE"], /* KATAKANA LETTER GI */ + ["\u30AF", "\u30AF"], /* KATAKANA LETTER KU */ + ["\u30B0", "\u30B0"], /* KATAKANA LETTER GU */ + ["\u30B1", "\u30B1"], /* KATAKANA LETTER KE */ + ["\u30B2", "\u30B2"], /* KATAKANA LETTER GE */ + ["\u30B3", "\u30B3"], /* KATAKANA LETTER KO */ + ["\u30B4", "\u30B4"], /* KATAKANA LETTER GO */ + ["\u30B5", "\u30B5"], /* KATAKANA LETTER SA */ + ["\u30B6", "\u30B6"], /* KATAKANA LETTER ZA */ + ["\u30B7", "\u30B7"], /* KATAKANA LETTER SI */ + ["\u30B8", "\u30B8"], /* KATAKANA LETTER ZI */ + ["\u30B9", "\u30B9"], /* KATAKANA LETTER SU */ + ["\u30BA", "\u30BA"], /* KATAKANA LETTER ZU */ + ["\u30BB", "\u30BB"], /* KATAKANA LETTER SE */ + ["\u30BC", "\u30BC"], /* KATAKANA LETTER ZE */ + ["\u30BD", "\u30BD"], /* KATAKANA LETTER SO */ + ["\u30BE", "\u30BE"], /* KATAKANA LETTER ZO */ + ["\u30BF", "\u30BF"], /* KATAKANA LETTER TA */ + ["\u30C0", "\u30C0"], /* KATAKANA LETTER DA */ + ["\u30C1", "\u30C1"], /* KATAKANA LETTER TI */ + ["\u30C2", "\u30C2"], /* KATAKANA LETTER DI */ + ["\u30C3", "\u30C3"], /* KATAKANA LETTER SMALL TU */ + ["\u30C4", "\u30C4"], /* KATAKANA LETTER TU */ + ["\u30C5", "\u30C5"], /* KATAKANA LETTER DU */ + ["\u30C6", "\u30C6"], /* KATAKANA LETTER TE */ + ["\u30C7", "\u30C7"], /* KATAKANA LETTER DE */ + ["\u30C8", "\u30C8"], /* KATAKANA LETTER TO */ + ["\u30C9", "\u30C9"], /* KATAKANA LETTER DO */ + ["\u30CA", "\u30CA"], /* KATAKANA LETTER NA */ + ["\u30CB", "\u30CB"], /* KATAKANA LETTER NI */ + ["\u30CC", "\u30CC"], /* KATAKANA LETTER NU */ + ["\u30CD", "\u30CD"], /* KATAKANA LETTER NE */ + ["\u30CE", "\u30CE"], /* KATAKANA LETTER NO */ + ["\u30CF", "\u30CF"], /* KATAKANA LETTER HA */ + ["\u30D0", "\u30D0"], /* KATAKANA LETTER BA */ + ["\u30D1", "\u30D1"], /* KATAKANA LETTER PA */ + ["\u30D2", "\u30D2"], /* KATAKANA LETTER HI */ + ["\u30D3", "\u30D3"], /* KATAKANA LETTER BI */ + ["\u30D4", "\u30D4"], /* KATAKANA LETTER PI */ + ["\u30D5", "\u30D5"], /* KATAKANA LETTER HU */ + ["\u30D6", "\u30D6"], /* KATAKANA LETTER BU */ + ["\u30D7", "\u30D7"], /* KATAKANA LETTER PU */ + ["\u30D8", "\u30D8"], /* KATAKANA LETTER HE */ + ["\u30D9", "\u30D9"], /* KATAKANA LETTER BE */ + ["\u30DA", "\u30DA"], /* KATAKANA LETTER PE */ + ["\u30DB", "\u30DB"], /* KATAKANA LETTER HO */ + ["\u30DC", "\u30DC"], /* KATAKANA LETTER BO */ + ["\u30DD", "\u30DD"], /* KATAKANA LETTER PO */ + ["\u30DE", "\u30DE"], /* KATAKANA LETTER MA */ + ["\u30DF", "\u30DF"], /* KATAKANA LETTER MI */ + ["\u30E0", "\u30E0"], /* KATAKANA LETTER MU */ + ["\u30E1", "\u30E1"], /* KATAKANA LETTER ME */ + ["\u30E2", "\u30E2"], /* KATAKANA LETTER MO */ + ["\u30E3", "\u30E3"], /* KATAKANA LETTER SMALL YA */ + ["\u30E4", "\u30E4"], /* KATAKANA LETTER YA */ + ["\u30E5", "\u30E5"], /* KATAKANA LETTER SMALL YU */ + ["\u30E6", "\u30E6"], /* KATAKANA LETTER YU */ + ["\u30E7", "\u30E7"], /* KATAKANA LETTER SMALL YO */ + ["\u30E8", "\u30E8"], /* KATAKANA LETTER YO */ + ["\u30E9", "\u30E9"], /* KATAKANA LETTER RA */ + ["\u30EA", "\u30EA"], /* KATAKANA LETTER RI */ + ["\u30EB", "\u30EB"], /* KATAKANA LETTER RU */ + ["\u30EC", "\u30EC"], /* KATAKANA LETTER RE */ + ["\u30ED", "\u30ED"], /* KATAKANA LETTER RO */ + ["\u30EE", "\u30EE"], /* KATAKANA LETTER SMALL WA */ + ["\u30EF", "\u30EF"], /* KATAKANA LETTER WA */ + ["\u30F0", "\u30F0"], /* KATAKANA LETTER WI */ + ["\u30F1", "\u30F1"], /* KATAKANA LETTER WE */ + ["\u30F2", "\u30F2"], /* KATAKANA LETTER WO */ + ["\u30F3", "\u30F3"], /* KATAKANA LETTER N */ + ["\u30F4", "\u30F4"], /* KATAKANA LETTER VU */ + ["\u30F5", "\u30F5"], /* KATAKANA LETTER SMALL KA */ + ["\u30F6", "\u30F6"], /* KATAKANA LETTER SMALL KE */ + ["\u30F7", "\u30F7"], /* KATAKANA LETTER VA */ + ["\u30F8", "\u30F8"], /* KATAKANA LETTER VI */ + ["\u30F9", "\u30F9"], /* KATAKANA LETTER VE */ + ["\u30FA", "\u30FA"], /* KATAKANA LETTER VO */ + ["\u30FB", "\u30FB"], /* KATAKANA MIDDLE DOT */ + ["\u30FC", "\u30FC"], /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + ["\u30FD", "\u30FD"], /* KATAKANA ITERATION MARK */ + ["\u30FE", "\u30FE"], /* KATAKANA VOICED ITERATION MARK */ + ["\u30FF", "\u30FF"], /* KATAKANA DIGRAPH KOTO */ + ["\u3100", "\u3100"], + ["\u3101", "\u3101"], + ["\u3102", "\u3102"], + ["\u3103", "\u3103"], + ["\u3104", "\u3104"], + ["\u3105", "\u3105"], /* BOPOMOFO LETTER B */ + ["\u3106", "\u3106"], /* BOPOMOFO LETTER P */ + ["\u3107", "\u3107"], /* BOPOMOFO LETTER M */ + ["\u3108", "\u3108"], /* BOPOMOFO LETTER F */ + ["\u3109", "\u3109"], /* BOPOMOFO LETTER D */ + ["\u310A", "\u310A"], /* BOPOMOFO LETTER T */ + ["\u310B", "\u310B"], /* BOPOMOFO LETTER N */ + ["\u310C", "\u310C"], /* BOPOMOFO LETTER L */ + ["\u310D", "\u310D"], /* BOPOMOFO LETTER G */ + ["\u310E", "\u310E"], /* BOPOMOFO LETTER K */ + ["\u310F", "\u310F"], /* BOPOMOFO LETTER H */ + ["\u3110", "\u3110"], /* BOPOMOFO LETTER J */ + ["\u3111", "\u3111"], /* BOPOMOFO LETTER Q */ + ["\u3112", "\u3112"], /* BOPOMOFO LETTER X */ + ["\u3113", "\u3113"], /* BOPOMOFO LETTER ZH */ + ["\u3114", "\u3114"], /* BOPOMOFO LETTER CH */ + ["\u3115", "\u3115"], /* BOPOMOFO LETTER SH */ + ["\u3116", "\u3116"], /* BOPOMOFO LETTER R */ + ["\u3117", "\u3117"], /* BOPOMOFO LETTER Z */ + ["\u3118", "\u3118"], /* BOPOMOFO LETTER C */ + ["\u3119", "\u3119"], /* BOPOMOFO LETTER S */ + ["\u311A", "\u311A"], /* BOPOMOFO LETTER A */ + ["\u311B", "\u311B"], /* BOPOMOFO LETTER O */ + ["\u311C", "\u311C"], /* BOPOMOFO LETTER E */ + ["\u311D", "\u311D"], /* BOPOMOFO LETTER EH */ + ["\u311E", "\u311E"], /* BOPOMOFO LETTER AI */ + ["\u311F", "\u311F"], /* BOPOMOFO LETTER EI */ + ["\u3120", "\u3120"], /* BOPOMOFO LETTER AU */ + ["\u3121", "\u3121"], /* BOPOMOFO LETTER OU */ + ["\u3122", "\u3122"], /* BOPOMOFO LETTER AN */ + ["\u3123", "\u3123"], /* BOPOMOFO LETTER EN */ + ["\u3124", "\u3124"], /* BOPOMOFO LETTER ANG */ + ["\u3125", "\u3125"], /* BOPOMOFO LETTER ENG */ + ["\u3126", "\u3126"], /* BOPOMOFO LETTER ER */ + ["\u3127", "\u3127"], /* BOPOMOFO LETTER I */ + ["\u3128", "\u3128"], /* BOPOMOFO LETTER U */ + ["\u3129", "\u3129"], /* BOPOMOFO LETTER IU */ + ["\u312A", "\u312A"], /* BOPOMOFO LETTER V */ + ["\u312B", "\u312B"], /* BOPOMOFO LETTER NG */ + ["\u312C", "\u312C"], /* BOPOMOFO LETTER GN */ + ["\u312D", "\u312D"], /* BOPOMOFO LETTER IH */ + ["\u312E", "\u312E"], /* BOPOMOFO LETTER O WITH DOT ABOVE */ + ["\u312F", "\u312F"], /* BOPOMOFO LETTER NN */ + ["\u3130", "\u3130"], + ["\u3131", "\u3131"], /* HANGUL LETTER KIYEOK (HANGUL LETTER GIYEOG) */ + ["\u3132", "\u3132"], /* HANGUL LETTER SSANGKIYEOK (HANGUL LETTER SSANG GIYEOG) */ + ["\u3133", "\u3133"], /* HANGUL LETTER KIYEOK-SIOS (HANGUL LETTER GIYEOG SIOS) */ + ["\u3134", "\u3134"], /* HANGUL LETTER NIEUN */ + ["\u3135", "\u3135"], /* HANGUL LETTER NIEUN-CIEUC (HANGUL LETTER NIEUN JIEUJ) */ + ["\u3136", "\u3136"], /* HANGUL LETTER NIEUN-HIEUH (HANGUL LETTER NIEUN HIEUH) */ + ["\u3137", "\u3137"], /* HANGUL LETTER TIKEUT (HANGUL LETTER DIGEUD) */ + ["\u3138", "\u3138"], /* HANGUL LETTER SSANGTIKEUT (HANGUL LETTER SSANG DIGEUD) */ + ["\u3139", "\u3139"], /* HANGUL LETTER RIEUL (HANGUL LETTER LIEUL) */ + ["\u313A", "\u313A"], /* HANGUL LETTER RIEUL-KIYEOK (HANGUL LETTER LIEUL GIYEOG) */ + ["\u313B", "\u313B"], /* HANGUL LETTER RIEUL-MIEUM (HANGUL LETTER LIEUL MIEUM) */ + ["\u313C", "\u313C"], /* HANGUL LETTER RIEUL-PIEUP (HANGUL LETTER LIEUL BIEUB) */ + ["\u313D", "\u313D"], /* HANGUL LETTER RIEUL-SIOS (HANGUL LETTER LIEUL SIOS) */ + ["\u313E", "\u313E"], /* HANGUL LETTER RIEUL-THIEUTH (HANGUL LETTER LIEUL TIEUT) */ + ["\u313F", "\u313F"], /* HANGUL LETTER RIEUL-PHIEUPH (HANGUL LETTER LIEUL PIEUP) */ + ["\u3140", "\u3140"], /* HANGUL LETTER RIEUL-HIEUH (HANGUL LETTER LIEUL HIEUH) */ + ["\u3141", "\u3141"], /* HANGUL LETTER MIEUM */ + ["\u3142", "\u3142"], /* HANGUL LETTER PIEUP (HANGUL LETTER BIEUB) */ + ["\u3143", "\u3143"], /* HANGUL LETTER SSANGPIEUP (HANGUL LETTER SSANG BIEUB) */ + ["\u3144", "\u3144"], /* HANGUL LETTER PIEUP-SIOS (HANGUL LETTER BIEUB SIOS) */ + ["\u3145", "\u3145"], /* HANGUL LETTER SIOS */ + ["\u3146", "\u3146"], /* HANGUL LETTER SSANGSIOS (HANGUL LETTER SSANG SIOS) */ + ["\u3147", "\u3147"], /* HANGUL LETTER IEUNG */ + ["\u3148", "\u3148"], /* HANGUL LETTER CIEUC (HANGUL LETTER JIEUJ) */ + ["\u3149", "\u3149"], /* HANGUL LETTER SSANGCIEUC (HANGUL LETTER SSANG JIEUJ) */ + ["\u314A", "\u314A"], /* HANGUL LETTER CHIEUCH (HANGUL LETTER CIEUC) */ + ["\u314B", "\u314B"], /* HANGUL LETTER KHIEUKH (HANGUL LETTER KIYEOK) */ + ["\u314C", "\u314C"], /* HANGUL LETTER THIEUTH (HANGUL LETTER TIEUT) */ + ["\u314D", "\u314D"], /* HANGUL LETTER PHIEUPH (HANGUL LETTER PIEUP) */ + ["\u314E", "\u314E"], /* HANGUL LETTER HIEUH */ + ["\u314F", "\u314F"], /* HANGUL LETTER A */ + ["\u3150", "\u3150"], /* HANGUL LETTER AE */ + ["\u3151", "\u3151"], /* HANGUL LETTER YA */ + ["\u3152", "\u3152"], /* HANGUL LETTER YAE */ + ["\u3153", "\u3153"], /* HANGUL LETTER EO */ + ["\u3154", "\u3154"], /* HANGUL LETTER E */ + ["\u3155", "\u3155"], /* HANGUL LETTER YEO */ + ["\u3156", "\u3156"], /* HANGUL LETTER YE */ + ["\u3157", "\u3157"], /* HANGUL LETTER O */ + ["\u3158", "\u3158"], /* HANGUL LETTER WA */ + ["\u3159", "\u3159"], /* HANGUL LETTER WAE */ + ["\u315A", "\u315A"], /* HANGUL LETTER OE */ + ["\u315B", "\u315B"], /* HANGUL LETTER YO */ + ["\u315C", "\u315C"], /* HANGUL LETTER U */ + ["\u315D", "\u315D"], /* HANGUL LETTER WEO */ + ["\u315E", "\u315E"], /* HANGUL LETTER WE */ + ["\u315F", "\u315F"], /* HANGUL LETTER WI */ + ["\u3160", "\u3160"], /* HANGUL LETTER YU */ + ["\u3161", "\u3161"], /* HANGUL LETTER EU */ + ["\u3162", "\u3162"], /* HANGUL LETTER YI */ + ["\u3163", "\u3163"], /* HANGUL LETTER I */ + ["\u3164", "\u3164"], /* HANGUL FILLER (HANGUL CAE OM) */ + ["\u3165", "\u3165"], /* HANGUL LETTER SSANGNIEUN (HANGUL LETTER SSANG NIEUN) */ + ["\u3166", "\u3166"], /* HANGUL LETTER NIEUN-TIKEUT (HANGUL LETTER NIEUN DIGEUD) */ + ["\u3167", "\u3167"], /* HANGUL LETTER NIEUN-SIOS (HANGUL LETTER NIEUN SIOS) */ + ["\u3168", "\u3168"], /* HANGUL LETTER NIEUN-PANSIOS (HANGUL LETTER NIEUN BAN CHI EUM) */ + ["\u3169", "\u3169"], /* HANGUL LETTER RIEUL-KIYEOK-SIOS (HANGUL LETTER LIEUL GIYEOG SIOS) */ + ["\u316A", "\u316A"], /* HANGUL LETTER RIEUL-TIKEUT (HANGUL LETTER LIEUL DIGEUD) */ + ["\u316B", "\u316B"], /* HANGUL LETTER RIEUL-PIEUP-SIOS (HANGUL LETTER LIEUL BIEUB SIOS) */ + ["\u316C", "\u316C"], /* HANGUL LETTER RIEUL-PANSIOS (HANGUL LETTER LIEUL BAN CHI EUM) */ + ["\u316D", "\u316D"], /* HANGUL LETTER RIEUL-YEORINHIEUH (HANGUL LETTER LIEUL YEOLIN HIEUH) */ + ["\u316E", "\u316E"], /* HANGUL LETTER MIEUM-PIEUP (HANGUL LETTER MIEUM BIEUB) */ + ["\u316F", "\u316F"], /* HANGUL LETTER MIEUM-SIOS (HANGUL LETTER MIEUM SIOS) */ + ["\u3170", "\u3170"], /* HANGUL LETTER MIEUM-PANSIOS (HANGUL LETTER BIEUB BAN CHI EUM) */ + ["\u3171", "\u3171"], /* HANGUL LETTER KAPYEOUNMIEUM (HANGUL LETTER MIEUM SUN GYEONG EUM) */ + ["\u3172", "\u3172"], /* HANGUL LETTER PIEUP-KIYEOK (HANGUL LETTER BIEUB GIYEOG) */ + ["\u3173", "\u3173"], /* HANGUL LETTER PIEUP-TIKEUT (HANGUL LETTER BIEUB DIGEUD) */ + ["\u3174", "\u3174"], /* HANGUL LETTER PIEUP-SIOS-KIYEOK (HANGUL LETTER BIEUB SIOS GIYEOG) */ + ["\u3175", "\u3175"], /* HANGUL LETTER PIEUP-SIOS-TIKEUT (HANGUL LETTER BIEUB SIOS DIGEUD) */ + ["\u3176", "\u3176"], /* HANGUL LETTER PIEUP-CIEUC (HANGUL LETTER BIEUB JIEUJ) */ + ["\u3177", "\u3177"], /* HANGUL LETTER PIEUP-THIEUTH (HANGUL LETTER BIEUB TIEUT) */ + ["\u3178", "\u3178"], /* HANGUL LETTER KAPYEOUNPIEUP (HANGUL LETTER BIEUB SUN GYEONG EUM) */ + ["\u3179", "\u3179"], /* HANGUL LETTER KAPYEOUNSSANGPIEUP (HANGUL LETTER SSANG BIEUB SUN GYEONG EUM) */ + ["\u317A", "\u317A"], /* HANGUL LETTER SIOS-KIYEOK (HANGUL LETTER SIOS GIYEOG) */ + ["\u317B", "\u317B"], /* HANGUL LETTER SIOS-NIEUN (HANGUL LETTER SIOS NIEUN) */ + ["\u317C", "\u317C"], /* HANGUL LETTER SIOS-TIKEUT (HANGUL LETTER SIOS DIGEUD) */ + ["\u317D", "\u317D"], /* HANGUL LETTER SIOS-PIEUP (HANGUL LETTER SIOS BIEUB) */ + ["\u317E", "\u317E"], /* HANGUL LETTER SIOS-CIEUC (HANGUL LETTER SIOS JIEUJ) */ + ["\u317F", "\u317F"], /* HANGUL LETTER PANSIOS (HANGUL LETTER BAN CHI EUM) */ + ["\u3180", "\u3180"], /* HANGUL LETTER SSANGIEUNG (HANGUL LETTER SSANG IEUNG) */ + ["\u3181", "\u3181"], /* HANGUL LETTER YESIEUNG (HANGUL LETTER NGIEUNG) */ + ["\u3182", "\u3182"], /* HANGUL LETTER YESIEUNG-SIOS (HANGUL LETTER NGIEUNG SIOS) */ + ["\u3183", "\u3183"], /* HANGUL LETTER YESIEUNG-PANSIOS (HANGUL LETTER NGIEUNG BAN CHI EUM) */ + ["\u3184", "\u3184"], /* HANGUL LETTER KAPYEOUNPHIEUPH (HANGUL LETTER PIEUP SUN GYEONG EUM) */ + ["\u3185", "\u3185"], /* HANGUL LETTER SSANGHIEUH (HANGUL LETTER SSANG HIEUH) */ + ["\u3186", "\u3186"], /* HANGUL LETTER YEORINHIEUH (HANGUL LETTER YEOLIN HIEUH) */ + ["\u3187", "\u3187"], /* HANGUL LETTER YO-YA (HANGUL LETTER YOYA) */ + ["\u3188", "\u3188"], /* HANGUL LETTER YO-YAE (HANGUL LETTER YOYAE) */ + ["\u3189", "\u3189"], /* HANGUL LETTER YO-I (HANGUL LETTER YOI) */ + ["\u318A", "\u318A"], /* HANGUL LETTER YU-YEO (HANGUL LETTER YUYEO) */ + ["\u318B", "\u318B"], /* HANGUL LETTER YU-YE (HANGUL LETTER YUYE) */ + ["\u318C", "\u318C"], /* HANGUL LETTER YU-I (HANGUL LETTER YUI) */ + ["\u318D", "\u318D"], /* HANGUL LETTER ARAEA (HANGUL LETTER ALAE A) */ + ["\u318E", "\u318E"], /* HANGUL LETTER ARAEAE (HANGUL LETTER ALAE AE) */ + ["\u318F", "\u318F"], + ["\u3190", "\u3190"], /* IDEOGRAPHIC ANNOTATION LINKING MARK (KANBUN TATETEN) */ + ["\u3191", "\u3191"], /* IDEOGRAPHIC ANNOTATION REVERSE MARK (KAERITEN RE) */ + ["\u3192", "\u3192"], /* IDEOGRAPHIC ANNOTATION ONE MARK (KAERITEN ITI) */ + ["\u3193", "\u3193"], /* IDEOGRAPHIC ANNOTATION TWO MARK (KAERITEN NI) */ + ["\u3194", "\u3194"], /* IDEOGRAPHIC ANNOTATION THREE MARK (KAERITEN SAN) */ + ["\u3195", "\u3195"], /* IDEOGRAPHIC ANNOTATION FOUR MARK (KAERITEN SI) */ + ["\u3196", "\u3196"], /* IDEOGRAPHIC ANNOTATION TOP MARK (KAERITEN ZYOU) */ + ["\u3197", "\u3197"], /* IDEOGRAPHIC ANNOTATION MIDDLE MARK (KAERITEN TYUU) */ + ["\u3198", "\u3198"], /* IDEOGRAPHIC ANNOTATION BOTTOM MARK (KAERITEN GE) */ + ["\u3199", "\u3199"], /* IDEOGRAPHIC ANNOTATION FIRST MARK (KAERITEN KOU) */ + ["\u319A", "\u319A"], /* IDEOGRAPHIC ANNOTATION SECOND MARK (KAERITEN OTU) */ + ["\u319B", "\u319B"], /* IDEOGRAPHIC ANNOTATION THIRD MARK (KAERITEN HEI) */ + ["\u319C", "\u319C"], /* IDEOGRAPHIC ANNOTATION FOURTH MARK (KAERITEN TEI) */ + ["\u319D", "\u319D"], /* IDEOGRAPHIC ANNOTATION HEAVEN MARK (KAERITEN TEN) */ + ["\u319E", "\u319E"], /* IDEOGRAPHIC ANNOTATION EARTH MARK (KAERITEN TI) */ + ["\u319F", "\u319F"], /* IDEOGRAPHIC ANNOTATION MAN MARK (KAERITEN ZIN) */ + ["\u31A0", "\u31A0"], /* BOPOMOFO LETTER BU */ + ["\u31A1", "\u31A1"], /* BOPOMOFO LETTER ZI */ + ["\u31A2", "\u31A2"], /* BOPOMOFO LETTER JI */ + ["\u31A3", "\u31A3"], /* BOPOMOFO LETTER GU */ + ["\u31A4", "\u31A4"], /* BOPOMOFO LETTER EE */ + ["\u31A5", "\u31A5"], /* BOPOMOFO LETTER ENN */ + ["\u31A6", "\u31A6"], /* BOPOMOFO LETTER OO */ + ["\u31A7", "\u31A7"], /* BOPOMOFO LETTER ONN */ + ["\u31A8", "\u31A8"], /* BOPOMOFO LETTER IR */ + ["\u31A9", "\u31A9"], /* BOPOMOFO LETTER ANN */ + ["\u31AA", "\u31AA"], /* BOPOMOFO LETTER INN */ + ["\u31AB", "\u31AB"], /* BOPOMOFO LETTER UNN */ + ["\u31AC", "\u31AC"], /* BOPOMOFO LETTER IM */ + ["\u31AD", "\u31AD"], /* BOPOMOFO LETTER NGG */ + ["\u31AE", "\u31AE"], /* BOPOMOFO LETTER AINN */ + ["\u31AF", "\u31AF"], /* BOPOMOFO LETTER AUNN */ + ["\u31B0", "\u31B0"], /* BOPOMOFO LETTER AM */ + ["\u31B1", "\u31B1"], /* BOPOMOFO LETTER OM */ + ["\u31B2", "\u31B2"], /* BOPOMOFO LETTER ONG */ + ["\u31B3", "\u31B3"], /* BOPOMOFO LETTER INNN */ + ["\u31B4", "\u31B4"], /* BOPOMOFO FINAL LETTER P */ + ["\u31B5", "\u31B5"], /* BOPOMOFO FINAL LETTER T */ + ["\u31B6", "\u31B6"], /* BOPOMOFO FINAL LETTER K */ + ["\u31B7", "\u31B7"], /* BOPOMOFO FINAL LETTER H */ + ["\u31B8", "\u31B8"], /* BOPOMOFO LETTER GH */ + ["\u31B9", "\u31B9"], /* BOPOMOFO LETTER LH */ + ["\u31BA", "\u31BA"], /* BOPOMOFO LETTER ZY */ + ["\u31BB", "\u31BB"], /* BOPOMOFO FINAL LETTER G */ + ["\u31BC", "\u31BC"], /* BOPOMOFO LETTER GW */ + ["\u31BD", "\u31BD"], /* BOPOMOFO LETTER KW */ + ["\u31BE", "\u31BE"], /* BOPOMOFO LETTER OE */ + ["\u31BF", "\u31BF"], /* BOPOMOFO LETTER AH */ + ["\u31C0", "\u31C0"], /* CJK STROKE T */ + ["\u31C1", "\u31C1"], /* CJK STROKE WG */ + ["\u31C2", "\u31C2"], /* CJK STROKE XG */ + ["\u31C3", "\u31C3"], /* CJK STROKE BXG */ + ["\u31C4", "\u31C4"], /* CJK STROKE SW */ + ["\u31C5", "\u31C5"], /* CJK STROKE HZZ */ + ["\u31C6", "\u31C6"], /* CJK STROKE HZG */ + ["\u31C7", "\u31C7"], /* CJK STROKE HP */ + ["\u31C8", "\u31C8"], /* CJK STROKE HZWG */ + ["\u31C9", "\u31C9"], /* CJK STROKE SZWG */ + ["\u31CA", "\u31CA"], /* CJK STROKE HZT */ + ["\u31CB", "\u31CB"], /* CJK STROKE HZZP */ + ["\u31CC", "\u31CC"], /* CJK STROKE HPWG */ + ["\u31CD", "\u31CD"], /* CJK STROKE HZW */ + ["\u31CE", "\u31CE"], /* CJK STROKE HZZZ */ + ["\u31CF", "\u31CF"], /* CJK STROKE N */ + ["\u31D0", "\u31D0"], /* CJK STROKE H */ + ["\u31D1", "\u31D1"], /* CJK STROKE S */ + ["\u31D2", "\u31D2"], /* CJK STROKE P */ + ["\u31D3", "\u31D3"], /* CJK STROKE SP */ + ["\u31D4", "\u31D4"], /* CJK STROKE D */ + ["\u31D5", "\u31D5"], /* CJK STROKE HZ */ + ["\u31D6", "\u31D6"], /* CJK STROKE HG */ + ["\u31D7", "\u31D7"], /* CJK STROKE SZ */ + ["\u31D8", "\u31D8"], /* CJK STROKE SWZ */ + ["\u31D9", "\u31D9"], /* CJK STROKE ST */ + ["\u31DA", "\u31DA"], /* CJK STROKE SG */ + ["\u31DB", "\u31DB"], /* CJK STROKE PD */ + ["\u31DC", "\u31DC"], /* CJK STROKE PZ */ + ["\u31DD", "\u31DD"], /* CJK STROKE TN */ + ["\u31DE", "\u31DE"], /* CJK STROKE SZZ */ + ["\u31DF", "\u31DF"], /* CJK STROKE SWG */ + ["\u31E0", "\u31E0"], /* CJK STROKE HXWG */ + ["\u31E1", "\u31E1"], /* CJK STROKE HZZZG */ + ["\u31E2", "\u31E2"], /* CJK STROKE PG */ + ["\u31E3", "\u31E3"], /* CJK STROKE Q */ + ["\u31E4", "\u31E4"], + ["\u31E5", "\u31E5"], + ["\u31E6", "\u31E6"], + ["\u31E7", "\u31E7"], + ["\u31E8", "\u31E8"], + ["\u31E9", "\u31E9"], + ["\u31EA", "\u31EA"], + ["\u31EB", "\u31EB"], + ["\u31EC", "\u31EC"], + ["\u31ED", "\u31ED"], + ["\u31EE", "\u31EE"], + ["\u31EF", "\u31EF"], + ["\u31F0", "\u31F0"], /* KATAKANA LETTER SMALL KU */ + ["\u31F1", "\u31F1"], /* KATAKANA LETTER SMALL SI */ + ["\u31F2", "\u31F2"], /* KATAKANA LETTER SMALL SU */ + ["\u31F3", "\u31F3"], /* KATAKANA LETTER SMALL TO */ + ["\u31F4", "\u31F4"], /* KATAKANA LETTER SMALL NU */ + ["\u31F5", "\u31F5"], /* KATAKANA LETTER SMALL HA */ + ["\u31F6", "\u31F6"], /* KATAKANA LETTER SMALL HI */ + ["\u31F7", "\u31F7"], /* KATAKANA LETTER SMALL HU */ + ["\u31F8", "\u31F8"], /* KATAKANA LETTER SMALL HE */ + ["\u31F9", "\u31F9"], /* KATAKANA LETTER SMALL HO */ + ["\u31FA", "\u31FA"], /* KATAKANA LETTER SMALL MU */ + ["\u31FB", "\u31FB"], /* KATAKANA LETTER SMALL RA */ + ["\u31FC", "\u31FC"], /* KATAKANA LETTER SMALL RI */ + ["\u31FD", "\u31FD"], /* KATAKANA LETTER SMALL RU */ + ["\u31FE", "\u31FE"], /* KATAKANA LETTER SMALL RE */ + ["\u31FF", "\u31FF"], /* KATAKANA LETTER SMALL RO */ + ["\u3200", "\u3200"], /* PARENTHESIZED HANGUL KIYEOK (PARENTHESIZED HANGUL GIYEOG) */ + ["\u3201", "\u3201"], /* PARENTHESIZED HANGUL NIEUN */ + ["\u3202", "\u3202"], /* PARENTHESIZED HANGUL TIKEUT (PARENTHESIZED HANGUL DIGEUD) */ + ["\u3203", "\u3203"], /* PARENTHESIZED HANGUL RIEUL (PARENTHESIZED HANGUL LIEUL) */ + ["\u3204", "\u3204"], /* PARENTHESIZED HANGUL MIEUM */ + ["\u3205", "\u3205"], /* PARENTHESIZED HANGUL PIEUP (PARENTHESIZED HANGUL BIEUB) */ + ["\u3206", "\u3206"], /* PARENTHESIZED HANGUL SIOS */ + ["\u3207", "\u3207"], /* PARENTHESIZED HANGUL IEUNG */ + ["\u3208", "\u3208"], /* PARENTHESIZED HANGUL CIEUC (PARENTHESIZED HANGUL JIEUJ) */ + ["\u3209", "\u3209"], /* PARENTHESIZED HANGUL CHIEUCH (PARENTHESIZED HANGUL CIEUC) */ + ["\u320A", "\u320A"], /* PARENTHESIZED HANGUL KHIEUKH (PARENTHESIZED HANGUL KIYEOK) */ + ["\u320B", "\u320B"], /* PARENTHESIZED HANGUL THIEUTH (PARENTHESIZED HANGUL TIEUT) */ + ["\u320C", "\u320C"], /* PARENTHESIZED HANGUL PHIEUPH (PARENTHESIZED HANGUL PIEUP) */ + ["\u320D", "\u320D"], /* PARENTHESIZED HANGUL HIEUH */ + ["\u320E", "\u320E"], /* PARENTHESIZED HANGUL KIYEOK A (PARENTHESIZED HANGUL GA) */ + ["\u320F", "\u320F"], /* PARENTHESIZED HANGUL NIEUN A (PARENTHESIZED HANGUL NA) */ + ["\u3210", "\u3210"], /* PARENTHESIZED HANGUL TIKEUT A (PARENTHESIZED HANGUL DA) */ + ["\u3211", "\u3211"], /* PARENTHESIZED HANGUL RIEUL A (PARENTHESIZED HANGUL LA) */ + ["\u3212", "\u3212"], /* PARENTHESIZED HANGUL MIEUM A (PARENTHESIZED HANGUL MA) */ + ["\u3213", "\u3213"], /* PARENTHESIZED HANGUL PIEUP A (PARENTHESIZED HANGUL BA) */ + ["\u3214", "\u3214"], /* PARENTHESIZED HANGUL SIOS A (PARENTHESIZED HANGUL SA) */ + ["\u3215", "\u3215"], /* PARENTHESIZED HANGUL IEUNG A (PARENTHESIZED HANGUL A) */ + ["\u3216", "\u3216"], /* PARENTHESIZED HANGUL CIEUC A (PARENTHESIZED HANGUL JA) */ + ["\u3217", "\u3217"], /* PARENTHESIZED HANGUL CHIEUCH A (PARENTHESIZED HANGUL CA) */ + ["\u3218", "\u3218"], /* PARENTHESIZED HANGUL KHIEUKH A (PARENTHESIZED HANGUL KA) */ + ["\u3219", "\u3219"], /* PARENTHESIZED HANGUL THIEUTH A (PARENTHESIZED HANGUL TA) */ + ["\u321A", "\u321A"], /* PARENTHESIZED HANGUL PHIEUPH A (PARENTHESIZED HANGUL PA) */ + ["\u321B", "\u321B"], /* PARENTHESIZED HANGUL HIEUH A (PARENTHESIZED HANGUL HA) */ + ["\u321C", "\u321C"], /* PARENTHESIZED HANGUL CIEUC U (PARENTHESIZED HANGUL JU) */ + ["\u321D", "\u321D"], /* PARENTHESIZED KOREAN CHARACTER OJEON */ + ["\u321E", "\u321E"], /* PARENTHESIZED KOREAN CHARACTER O HU */ + ["\u321F", "\u321F"], + ["\u3220", "\u3220"], /* PARENTHESIZED IDEOGRAPH ONE */ + ["\u3221", "\u3221"], /* PARENTHESIZED IDEOGRAPH TWO */ + ["\u3222", "\u3222"], /* PARENTHESIZED IDEOGRAPH THREE */ + ["\u3223", "\u3223"], /* PARENTHESIZED IDEOGRAPH FOUR */ + ["\u3224", "\u3224"], /* PARENTHESIZED IDEOGRAPH FIVE */ + ["\u3225", "\u3225"], /* PARENTHESIZED IDEOGRAPH SIX */ + ["\u3226", "\u3226"], /* PARENTHESIZED IDEOGRAPH SEVEN */ + ["\u3227", "\u3227"], /* PARENTHESIZED IDEOGRAPH EIGHT */ + ["\u3228", "\u3228"], /* PARENTHESIZED IDEOGRAPH NINE */ + ["\u3229", "\u3229"], /* PARENTHESIZED IDEOGRAPH TEN */ + ["\u322A", "\u322A"], /* PARENTHESIZED IDEOGRAPH MOON */ + ["\u322B", "\u322B"], /* PARENTHESIZED IDEOGRAPH FIRE */ + ["\u322C", "\u322C"], /* PARENTHESIZED IDEOGRAPH WATER */ + ["\u322D", "\u322D"], /* PARENTHESIZED IDEOGRAPH WOOD */ + ["\u322E", "\u322E"], /* PARENTHESIZED IDEOGRAPH METAL */ + ["\u322F", "\u322F"], /* PARENTHESIZED IDEOGRAPH EARTH */ + ["\u3230", "\u3230"], /* PARENTHESIZED IDEOGRAPH SUN */ + ["\u3231", "\u3231"], /* PARENTHESIZED IDEOGRAPH STOCK */ + ["\u3232", "\u3232"], /* PARENTHESIZED IDEOGRAPH HAVE */ + ["\u3233", "\u3233"], /* PARENTHESIZED IDEOGRAPH SOCIETY */ + ["\u3234", "\u3234"], /* PARENTHESIZED IDEOGRAPH NAME */ + ["\u3235", "\u3235"], /* PARENTHESIZED IDEOGRAPH SPECIAL */ + ["\u3236", "\u3236"], /* PARENTHESIZED IDEOGRAPH FINANCIAL */ + ["\u3237", "\u3237"], /* PARENTHESIZED IDEOGRAPH CONGRATULATION */ + ["\u3238", "\u3238"], /* PARENTHESIZED IDEOGRAPH LABOR */ + ["\u3239", "\u3239"], /* PARENTHESIZED IDEOGRAPH REPRESENT */ + ["\u323A", "\u323A"], /* PARENTHESIZED IDEOGRAPH CALL */ + ["\u323B", "\u323B"], /* PARENTHESIZED IDEOGRAPH STUDY */ + ["\u323C", "\u323C"], /* PARENTHESIZED IDEOGRAPH SUPERVISE */ + ["\u323D", "\u323D"], /* PARENTHESIZED IDEOGRAPH ENTERPRISE */ + ["\u323E", "\u323E"], /* PARENTHESIZED IDEOGRAPH RESOURCE */ + ["\u323F", "\u323F"], /* PARENTHESIZED IDEOGRAPH ALLIANCE */ + ["\u3240", "\u3240"], /* PARENTHESIZED IDEOGRAPH FESTIVAL */ + ["\u3241", "\u3241"], /* PARENTHESIZED IDEOGRAPH REST */ + ["\u3242", "\u3242"], /* PARENTHESIZED IDEOGRAPH SELF */ + ["\u3243", "\u3243"], /* PARENTHESIZED IDEOGRAPH REACH */ + ["\u3244", "\u3244"], /* CIRCLED IDEOGRAPH QUESTION */ + ["\u3245", "\u3245"], /* CIRCLED IDEOGRAPH KINDERGARTEN */ + ["\u3246", "\u3246"], /* CIRCLED IDEOGRAPH SCHOOL */ + ["\u3247", "\u3247"], /* CIRCLED IDEOGRAPH KOTO */ + ["\u3248", "\u3248"], /* CIRCLED NUMBER TEN ON BLACK SQUARE */ + ["\u3249", "\u3249"], /* CIRCLED NUMBER TWENTY ON BLACK SQUARE */ + ["\u324A", "\u324A"], /* CIRCLED NUMBER THIRTY ON BLACK SQUARE */ + ["\u324B", "\u324B"], /* CIRCLED NUMBER FORTY ON BLACK SQUARE */ + ["\u324C", "\u324C"], /* CIRCLED NUMBER FIFTY ON BLACK SQUARE */ + ["\u324D", "\u324D"], /* CIRCLED NUMBER SIXTY ON BLACK SQUARE */ + ["\u324E", "\u324E"], /* CIRCLED NUMBER SEVENTY ON BLACK SQUARE */ + ["\u324F", "\u324F"], /* CIRCLED NUMBER EIGHTY ON BLACK SQUARE */ + ["\u3250", "\u3250"], /* PARTNERSHIP SIGN */ + ["\u3251", "\u3251"], /* CIRCLED NUMBER TWENTY ONE */ + ["\u3252", "\u3252"], /* CIRCLED NUMBER TWENTY TWO */ + ["\u3253", "\u3253"], /* CIRCLED NUMBER TWENTY THREE */ + ["\u3254", "\u3254"], /* CIRCLED NUMBER TWENTY FOUR */ + ["\u3255", "\u3255"], /* CIRCLED NUMBER TWENTY FIVE */ + ["\u3256", "\u3256"], /* CIRCLED NUMBER TWENTY SIX */ + ["\u3257", "\u3257"], /* CIRCLED NUMBER TWENTY SEVEN */ + ["\u3258", "\u3258"], /* CIRCLED NUMBER TWENTY EIGHT */ + ["\u3259", "\u3259"], /* CIRCLED NUMBER TWENTY NINE */ + ["\u325A", "\u325A"], /* CIRCLED NUMBER THIRTY */ + ["\u325B", "\u325B"], /* CIRCLED NUMBER THIRTY ONE */ + ["\u325C", "\u325C"], /* CIRCLED NUMBER THIRTY TWO */ + ["\u325D", "\u325D"], /* CIRCLED NUMBER THIRTY THREE */ + ["\u325E", "\u325E"], /* CIRCLED NUMBER THIRTY FOUR */ + ["\u325F", "\u325F"], /* CIRCLED NUMBER THIRTY FIVE */ + ["\u3260", "\u3260"], /* CIRCLED HANGUL KIYEOK (CIRCLED HANGUL GIYEOG) */ + ["\u3261", "\u3261"], /* CIRCLED HANGUL NIEUN */ + ["\u3262", "\u3262"], /* CIRCLED HANGUL TIKEUT (CIRCLED HANGUL DIGEUD) */ + ["\u3263", "\u3263"], /* CIRCLED HANGUL RIEUL (CIRCLED HANGUL LIEUL) */ + ["\u3264", "\u3264"], /* CIRCLED HANGUL MIEUM */ + ["\u3265", "\u3265"], /* CIRCLED HANGUL PIEUP (CIRCLED HANGUL BIEUB) */ + ["\u3266", "\u3266"], /* CIRCLED HANGUL SIOS */ + ["\u3267", "\u3267"], /* CIRCLED HANGUL IEUNG */ + ["\u3268", "\u3268"], /* CIRCLED HANGUL CIEUC (CIRCLED HANGUL JIEUJ) */ + ["\u3269", "\u3269"], /* CIRCLED HANGUL CHIEUCH (CIRCLED HANGUL CIEUC) */ + ["\u326A", "\u326A"], /* CIRCLED HANGUL KHIEUKH (CIRCLED HANGUL KIYEOK) */ + ["\u326B", "\u326B"], /* CIRCLED HANGUL THIEUTH (CIRCLED HANGUL TIEUT) */ + ["\u326C", "\u326C"], /* CIRCLED HANGUL PHIEUPH (CIRCLED HANGUL PIEUP) */ + ["\u326D", "\u326D"], /* CIRCLED HANGUL HIEUH */ + ["\u326E", "\u326E"], /* CIRCLED HANGUL KIYEOK A (CIRCLED HANGUL GA) */ + ["\u326F", "\u326F"], /* CIRCLED HANGUL NIEUN A (CIRCLED HANGUL NA) */ + ["\u3270", "\u3270"], /* CIRCLED HANGUL TIKEUT A (CIRCLED HANGUL DA) */ + ["\u3271", "\u3271"], /* CIRCLED HANGUL RIEUL A (CIRCLED HANGUL LA) */ + ["\u3272", "\u3272"], /* CIRCLED HANGUL MIEUM A (CIRCLED HANGUL MA) */ + ["\u3273", "\u3273"], /* CIRCLED HANGUL PIEUP A (CIRCLED HANGUL BA) */ + ["\u3274", "\u3274"], /* CIRCLED HANGUL SIOS A (CIRCLED HANGUL SA) */ + ["\u3275", "\u3275"], /* CIRCLED HANGUL IEUNG A (CIRCLED HANGUL A) */ + ["\u3276", "\u3276"], /* CIRCLED HANGUL CIEUC A (CIRCLED HANGUL JA) */ + ["\u3277", "\u3277"], /* CIRCLED HANGUL CHIEUCH A (CIRCLED HANGUL CA) */ + ["\u3278", "\u3278"], /* CIRCLED HANGUL KHIEUKH A (CIRCLED HANGUL KA) */ + ["\u3279", "\u3279"], /* CIRCLED HANGUL THIEUTH A (CIRCLED HANGUL TA) */ + ["\u327A", "\u327A"], /* CIRCLED HANGUL PHIEUPH A (CIRCLED HANGUL PA) */ + ["\u327B", "\u327B"], /* CIRCLED HANGUL HIEUH A (CIRCLED HANGUL HA) */ + ["\u327C", "\u327C"], /* CIRCLED KOREAN CHARACTER CHAMKO */ + ["\u327D", "\u327D"], /* CIRCLED KOREAN CHARACTER JUEUI */ + ["\u327E", "\u327E"], /* CIRCLED HANGUL IEUNG U */ + ["\u327F", "\u327F"], /* KOREAN STANDARD SYMBOL */ + ["\u3280", "\u3280"], /* CIRCLED IDEOGRAPH ONE */ + ["\u3281", "\u3281"], /* CIRCLED IDEOGRAPH TWO */ + ["\u3282", "\u3282"], /* CIRCLED IDEOGRAPH THREE */ + ["\u3283", "\u3283"], /* CIRCLED IDEOGRAPH FOUR */ + ["\u3284", "\u3284"], /* CIRCLED IDEOGRAPH FIVE */ + ["\u3285", "\u3285"], /* CIRCLED IDEOGRAPH SIX */ + ["\u3286", "\u3286"], /* CIRCLED IDEOGRAPH SEVEN */ + ["\u3287", "\u3287"], /* CIRCLED IDEOGRAPH EIGHT */ + ["\u3288", "\u3288"], /* CIRCLED IDEOGRAPH NINE */ + ["\u3289", "\u3289"], /* CIRCLED IDEOGRAPH TEN */ + ["\u328A", "\u328A"], /* CIRCLED IDEOGRAPH MOON */ + ["\u328B", "\u328B"], /* CIRCLED IDEOGRAPH FIRE */ + ["\u328C", "\u328C"], /* CIRCLED IDEOGRAPH WATER */ + ["\u328D", "\u328D"], /* CIRCLED IDEOGRAPH WOOD */ + ["\u328E", "\u328E"], /* CIRCLED IDEOGRAPH METAL */ + ["\u328F", "\u328F"], /* CIRCLED IDEOGRAPH EARTH */ + ["\u3290", "\u3290"], /* CIRCLED IDEOGRAPH SUN */ + ["\u3291", "\u3291"], /* CIRCLED IDEOGRAPH STOCK */ + ["\u3292", "\u3292"], /* CIRCLED IDEOGRAPH HAVE */ + ["\u3293", "\u3293"], /* CIRCLED IDEOGRAPH SOCIETY */ + ["\u3294", "\u3294"], /* CIRCLED IDEOGRAPH NAME */ + ["\u3295", "\u3295"], /* CIRCLED IDEOGRAPH SPECIAL */ + ["\u3296", "\u3296"], /* CIRCLED IDEOGRAPH FINANCIAL */ + ["\u3297", "\u3297"], /* CIRCLED IDEOGRAPH CONGRATULATION */ + ["\u3298", "\u3298"], /* CIRCLED IDEOGRAPH LABOR */ + ["\u3299", "\u3299"], /* CIRCLED IDEOGRAPH SECRET */ + ["\u329A", "\u329A"], /* CIRCLED IDEOGRAPH MALE */ + ["\u329B", "\u329B"], /* CIRCLED IDEOGRAPH FEMALE */ + ["\u329C", "\u329C"], /* CIRCLED IDEOGRAPH SUITABLE */ + ["\u329D", "\u329D"], /* CIRCLED IDEOGRAPH EXCELLENT */ + ["\u329E", "\u329E"], /* CIRCLED IDEOGRAPH PRINT */ + ["\u329F", "\u329F"], /* CIRCLED IDEOGRAPH ATTENTION */ + ["\u32A0", "\u32A0"], /* CIRCLED IDEOGRAPH ITEM */ + ["\u32A1", "\u32A1"], /* CIRCLED IDEOGRAPH REST */ + ["\u32A2", "\u32A2"], /* CIRCLED IDEOGRAPH COPY */ + ["\u32A3", "\u32A3"], /* CIRCLED IDEOGRAPH CORRECT */ + ["\u32A4", "\u32A4"], /* CIRCLED IDEOGRAPH HIGH */ + ["\u32A5", "\u32A5"], /* CIRCLED IDEOGRAPH CENTRE (CIRCLED IDEOGRAPH CENTER) */ + ["\u32A6", "\u32A6"], /* CIRCLED IDEOGRAPH LOW */ + ["\u32A7", "\u32A7"], /* CIRCLED IDEOGRAPH LEFT */ + ["\u32A8", "\u32A8"], /* CIRCLED IDEOGRAPH RIGHT */ + ["\u32A9", "\u32A9"], /* CIRCLED IDEOGRAPH MEDICINE */ + ["\u32AA", "\u32AA"], /* CIRCLED IDEOGRAPH RELIGION */ + ["\u32AB", "\u32AB"], /* CIRCLED IDEOGRAPH STUDY */ + ["\u32AC", "\u32AC"], /* CIRCLED IDEOGRAPH SUPERVISE */ + ["\u32AD", "\u32AD"], /* CIRCLED IDEOGRAPH ENTERPRISE */ + ["\u32AE", "\u32AE"], /* CIRCLED IDEOGRAPH RESOURCE */ + ["\u32AF", "\u32AF"], /* CIRCLED IDEOGRAPH ALLIANCE */ + ["\u32B0", "\u32B0"], /* CIRCLED IDEOGRAPH NIGHT */ + ["\u32B1", "\u32B1"], /* CIRCLED NUMBER THIRTY SIX */ + ["\u32B2", "\u32B2"], /* CIRCLED NUMBER THIRTY SEVEN */ + ["\u32B3", "\u32B3"], /* CIRCLED NUMBER THIRTY EIGHT */ + ["\u32B4", "\u32B4"], /* CIRCLED NUMBER THIRTY NINE */ + ["\u32B5", "\u32B5"], /* CIRCLED NUMBER FORTY */ + ["\u32B6", "\u32B6"], /* CIRCLED NUMBER FORTY ONE */ + ["\u32B7", "\u32B7"], /* CIRCLED NUMBER FORTY TWO */ + ["\u32B8", "\u32B8"], /* CIRCLED NUMBER FORTY THREE */ + ["\u32B9", "\u32B9"], /* CIRCLED NUMBER FORTY FOUR */ + ["\u32BA", "\u32BA"], /* CIRCLED NUMBER FORTY FIVE */ + ["\u32BB", "\u32BB"], /* CIRCLED NUMBER FORTY SIX */ + ["\u32BC", "\u32BC"], /* CIRCLED NUMBER FORTY SEVEN */ + ["\u32BD", "\u32BD"], /* CIRCLED NUMBER FORTY EIGHT */ + ["\u32BE", "\u32BE"], /* CIRCLED NUMBER FORTY NINE */ + ["\u32BF", "\u32BF"], /* CIRCLED NUMBER FIFTY */ + ["\u32C0", "\u32C0"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY */ + ["\u32C1", "\u32C1"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY */ + ["\u32C2", "\u32C2"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH */ + ["\u32C3", "\u32C3"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL */ + ["\u32C4", "\u32C4"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY */ + ["\u32C5", "\u32C5"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE */ + ["\u32C6", "\u32C6"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY */ + ["\u32C7", "\u32C7"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST */ + ["\u32C8", "\u32C8"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER */ + ["\u32C9", "\u32C9"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER */ + ["\u32CA", "\u32CA"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER */ + ["\u32CB", "\u32CB"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER */ + ["\u32CC", "\u32CC"], /* SQUARE HG */ + ["\u32CD", "\u32CD"], /* SQUARE ERG */ + ["\u32CE", "\u32CE"], /* SQUARE EV */ + ["\u32CF", "\u32CF"], /* LIMITED LIABILITY SIGN */ + ["\u32D0", "\u32D0"], /* CIRCLED KATAKANA A */ + ["\u32D1", "\u32D1"], /* CIRCLED KATAKANA I */ + ["\u32D2", "\u32D2"], /* CIRCLED KATAKANA U */ + ["\u32D3", "\u32D3"], /* CIRCLED KATAKANA E */ + ["\u32D4", "\u32D4"], /* CIRCLED KATAKANA O */ + ["\u32D5", "\u32D5"], /* CIRCLED KATAKANA KA */ + ["\u32D6", "\u32D6"], /* CIRCLED KATAKANA KI */ + ["\u32D7", "\u32D7"], /* CIRCLED KATAKANA KU */ + ["\u32D8", "\u32D8"], /* CIRCLED KATAKANA KE */ + ["\u32D9", "\u32D9"], /* CIRCLED KATAKANA KO */ + ["\u32DA", "\u32DA"], /* CIRCLED KATAKANA SA */ + ["\u32DB", "\u32DB"], /* CIRCLED KATAKANA SI */ + ["\u32DC", "\u32DC"], /* CIRCLED KATAKANA SU */ + ["\u32DD", "\u32DD"], /* CIRCLED KATAKANA SE */ + ["\u32DE", "\u32DE"], /* CIRCLED KATAKANA SO */ + ["\u32DF", "\u32DF"], /* CIRCLED KATAKANA TA */ + ["\u32E0", "\u32E0"], /* CIRCLED KATAKANA TI */ + ["\u32E1", "\u32E1"], /* CIRCLED KATAKANA TU */ + ["\u32E2", "\u32E2"], /* CIRCLED KATAKANA TE */ + ["\u32E3", "\u32E3"], /* CIRCLED KATAKANA TO */ + ["\u32E4", "\u32E4"], /* CIRCLED KATAKANA NA */ + ["\u32E5", "\u32E5"], /* CIRCLED KATAKANA NI */ + ["\u32E6", "\u32E6"], /* CIRCLED KATAKANA NU */ + ["\u32E7", "\u32E7"], /* CIRCLED KATAKANA NE */ + ["\u32E8", "\u32E8"], /* CIRCLED KATAKANA NO */ + ["\u32E9", "\u32E9"], /* CIRCLED KATAKANA HA */ + ["\u32EA", "\u32EA"], /* CIRCLED KATAKANA HI */ + ["\u32EB", "\u32EB"], /* CIRCLED KATAKANA HU */ + ["\u32EC", "\u32EC"], /* CIRCLED KATAKANA HE */ + ["\u32ED", "\u32ED"], /* CIRCLED KATAKANA HO */ + ["\u32EE", "\u32EE"], /* CIRCLED KATAKANA MA */ + ["\u32EF", "\u32EF"], /* CIRCLED KATAKANA MI */ + ["\u32F0", "\u32F0"], /* CIRCLED KATAKANA MU */ + ["\u32F1", "\u32F1"], /* CIRCLED KATAKANA ME */ + ["\u32F2", "\u32F2"], /* CIRCLED KATAKANA MO */ + ["\u32F3", "\u32F3"], /* CIRCLED KATAKANA YA */ + ["\u32F4", "\u32F4"], /* CIRCLED KATAKANA YU */ + ["\u32F5", "\u32F5"], /* CIRCLED KATAKANA YO */ + ["\u32F6", "\u32F6"], /* CIRCLED KATAKANA RA */ + ["\u32F7", "\u32F7"], /* CIRCLED KATAKANA RI */ + ["\u32F8", "\u32F8"], /* CIRCLED KATAKANA RU */ + ["\u32F9", "\u32F9"], /* CIRCLED KATAKANA RE */ + ["\u32FA", "\u32FA"], /* CIRCLED KATAKANA RO */ + ["\u32FB", "\u32FB"], /* CIRCLED KATAKANA WA */ + ["\u32FC", "\u32FC"], /* CIRCLED KATAKANA WI */ + ["\u32FD", "\u32FD"], /* CIRCLED KATAKANA WE */ + ["\u32FE", "\u32FE"], /* CIRCLED KATAKANA WO */ + ["\u32FF", "\u32FF"], /* SQUARE ERA NAME REIWA */ + ["\u3300", "\u3300"], /* SQUARE APAATO (SQUARED APAATO) */ + ["\u3301", "\u3301"], /* SQUARE ARUHUA (SQUARED ARUHUA) */ + ["\u3302", "\u3302"], /* SQUARE ANPEA (SQUARED ANPEA) */ + ["\u3303", "\u3303"], /* SQUARE AARU (SQUARED AARU) */ + ["\u3304", "\u3304"], /* SQUARE ININGU (SQUARED ININGU) */ + ["\u3305", "\u3305"], /* SQUARE INTI (SQUARED INTI) */ + ["\u3306", "\u3306"], /* SQUARE UON (SQUARED UON) */ + ["\u3307", "\u3307"], /* SQUARE ESUKUUDO (SQUARED ESUKUUDO) */ + ["\u3308", "\u3308"], /* SQUARE EEKAA (SQUARED EEKAA) */ + ["\u3309", "\u3309"], /* SQUARE ONSU (SQUARED ONSU) */ + ["\u330A", "\u330A"], /* SQUARE OOMU (SQUARED OOMU) */ + ["\u330B", "\u330B"], /* SQUARE KAIRI (SQUARED KAIRI) */ + ["\u330C", "\u330C"], /* SQUARE KARATTO (SQUARED KARATTO) */ + ["\u330D", "\u330D"], /* SQUARE KARORII (SQUARED KARORII) */ + ["\u330E", "\u330E"], /* SQUARE GARON (SQUARED GARON) */ + ["\u330F", "\u330F"], /* SQUARE GANMA (SQUARED GANMA) */ + ["\u3310", "\u3310"], /* SQUARE GIGA (SQUARED GIGA) */ + ["\u3311", "\u3311"], /* SQUARE GINII (SQUARED GINII) */ + ["\u3312", "\u3312"], /* SQUARE KYURII (SQUARED KYURII) */ + ["\u3313", "\u3313"], /* SQUARE GIRUDAA (SQUARED GIRUDAA) */ + ["\u3314", "\u3314"], /* SQUARE KIRO (SQUARED KIRO) */ + ["\u3315", "\u3315"], /* SQUARE KIROGURAMU (SQUARED KIROGURAMU) */ + ["\u3316", "\u3316"], /* SQUARE KIROMEETORU (SQUARED KIROMEETORU) */ + ["\u3317", "\u3317"], /* SQUARE KIROWATTO (SQUARED KIROWATTO) */ + ["\u3318", "\u3318"], /* SQUARE GURAMU (SQUARED GURAMU) */ + ["\u3319", "\u3319"], /* SQUARE GURAMUTON (SQUARED GURAMUTON) */ + ["\u331A", "\u331A"], /* SQUARE KURUZEIRO (SQUARED KURUZEIRO) */ + ["\u331B", "\u331B"], /* SQUARE KUROONE (SQUARED KUROONE) */ + ["\u331C", "\u331C"], /* SQUARE KEESU (SQUARED KEESU) */ + ["\u331D", "\u331D"], /* SQUARE KORUNA (SQUARED KORUNA) */ + ["\u331E", "\u331E"], /* SQUARE KOOPO (SQUARED KOOPO) */ + ["\u331F", "\u331F"], /* SQUARE SAIKURU (SQUARED SAIKURU) */ + ["\u3320", "\u3320"], /* SQUARE SANTIIMU (SQUARED SANTIIMU) */ + ["\u3321", "\u3321"], /* SQUARE SIRINGU (SQUARED SIRINGU) */ + ["\u3322", "\u3322"], /* SQUARE SENTI (SQUARED SENTI) */ + ["\u3323", "\u3323"], /* SQUARE SENTO (SQUARED SENTO) */ + ["\u3324", "\u3324"], /* SQUARE DAASU (SQUARED DAASU) */ + ["\u3325", "\u3325"], /* SQUARE DESI (SQUARED DESI) */ + ["\u3326", "\u3326"], /* SQUARE DORU (SQUARED DORU) */ + ["\u3327", "\u3327"], /* SQUARE TON (SQUARED TON) */ + ["\u3328", "\u3328"], /* SQUARE NANO (SQUARED NANO) */ + ["\u3329", "\u3329"], /* SQUARE NOTTO (SQUARED NOTTO) */ + ["\u332A", "\u332A"], /* SQUARE HAITU (SQUARED HAITU) */ + ["\u332B", "\u332B"], /* SQUARE PAASENTO (SQUARED PAASENTO) */ + ["\u332C", "\u332C"], /* SQUARE PAATU (SQUARED PAATU) */ + ["\u332D", "\u332D"], /* SQUARE BAARERU (SQUARED BAARERU) */ + ["\u332E", "\u332E"], /* SQUARE PIASUTORU (SQUARED PIASUTORU) */ + ["\u332F", "\u332F"], /* SQUARE PIKURU (SQUARED PIKURU) */ + ["\u3330", "\u3330"], /* SQUARE PIKO (SQUARED PIKO) */ + ["\u3331", "\u3331"], /* SQUARE BIRU (SQUARED BIRU) */ + ["\u3332", "\u3332"], /* SQUARE HUARADDO (SQUARED HUARADDO) */ + ["\u3333", "\u3333"], /* SQUARE HUIITO (SQUARED HUIITO) */ + ["\u3334", "\u3334"], /* SQUARE BUSSYERU (SQUARED BUSSYERU) */ + ["\u3335", "\u3335"], /* SQUARE HURAN (SQUARED HURAN) */ + ["\u3336", "\u3336"], /* SQUARE HEKUTAARU (SQUARED HEKUTAARU) */ + ["\u3337", "\u3337"], /* SQUARE PESO (SQUARED PESO) */ + ["\u3338", "\u3338"], /* SQUARE PENIHI (SQUARED PENIHI) */ + ["\u3339", "\u3339"], /* SQUARE HERUTU (SQUARED HERUTU) */ + ["\u333A", "\u333A"], /* SQUARE PENSU (SQUARED PENSU) */ + ["\u333B", "\u333B"], /* SQUARE PEEZI (SQUARED PEEZI) */ + ["\u333C", "\u333C"], /* SQUARE BEETA (SQUARED BEETA) */ + ["\u333D", "\u333D"], /* SQUARE POINTO (SQUARED POINTO) */ + ["\u333E", "\u333E"], /* SQUARE BORUTO (SQUARED BORUTO) */ + ["\u333F", "\u333F"], /* SQUARE HON (SQUARED HON) */ + ["\u3340", "\u3340"], /* SQUARE PONDO (SQUARED PONDO) */ + ["\u3341", "\u3341"], /* SQUARE HOORU (SQUARED HOORU) */ + ["\u3342", "\u3342"], /* SQUARE HOON (SQUARED HOON) */ + ["\u3343", "\u3343"], /* SQUARE MAIKURO (SQUARED MAIKURO) */ + ["\u3344", "\u3344"], /* SQUARE MAIRU (SQUARED MAIRU) */ + ["\u3345", "\u3345"], /* SQUARE MAHHA (SQUARED MAHHA) */ + ["\u3346", "\u3346"], /* SQUARE MARUKU (SQUARED MARUKU) */ + ["\u3347", "\u3347"], /* SQUARE MANSYON (SQUARED MANSYON) */ + ["\u3348", "\u3348"], /* SQUARE MIKURON (SQUARED MIKURON) */ + ["\u3349", "\u3349"], /* SQUARE MIRI (SQUARED MIRI) */ + ["\u334A", "\u334A"], /* SQUARE MIRIBAARU (SQUARED MIRIBAARU) */ + ["\u334B", "\u334B"], /* SQUARE MEGA (SQUARED MEGA) */ + ["\u334C", "\u334C"], /* SQUARE MEGATON (SQUARED MEGATON) */ + ["\u334D", "\u334D"], /* SQUARE MEETORU (SQUARED MEETORU) */ + ["\u334E", "\u334E"], /* SQUARE YAADO (SQUARED YAADO) */ + ["\u334F", "\u334F"], /* SQUARE YAARU (SQUARED YAARU) */ + ["\u3350", "\u3350"], /* SQUARE YUAN (SQUARED YUAN) */ + ["\u3351", "\u3351"], /* SQUARE RITTORU (SQUARED RITTORU) */ + ["\u3352", "\u3352"], /* SQUARE RIRA (SQUARED RIRA) */ + ["\u3353", "\u3353"], /* SQUARE RUPII (SQUARED RUPII) */ + ["\u3354", "\u3354"], /* SQUARE RUUBURU (SQUARED RUUBURU) */ + ["\u3355", "\u3355"], /* SQUARE REMU (SQUARED REMU) */ + ["\u3356", "\u3356"], /* SQUARE RENTOGEN (SQUARED RENTOGEN) */ + ["\u3357", "\u3357"], /* SQUARE WATTO (SQUARED WATTO) */ + ["\u3358", "\u3358"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO */ + ["\u3359", "\u3359"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE */ + ["\u335A", "\u335A"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO */ + ["\u335B", "\u335B"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE */ + ["\u335C", "\u335C"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR */ + ["\u335D", "\u335D"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE */ + ["\u335E", "\u335E"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX */ + ["\u335F", "\u335F"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN */ + ["\u3360", "\u3360"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT */ + ["\u3361", "\u3361"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE */ + ["\u3362", "\u3362"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN */ + ["\u3363", "\u3363"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN */ + ["\u3364", "\u3364"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE */ + ["\u3365", "\u3365"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN */ + ["\u3366", "\u3366"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN */ + ["\u3367", "\u3367"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN */ + ["\u3368", "\u3368"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN */ + ["\u3369", "\u3369"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN */ + ["\u336A", "\u336A"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN */ + ["\u336B", "\u336B"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN */ + ["\u336C", "\u336C"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY */ + ["\u336D", "\u336D"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE */ + ["\u336E", "\u336E"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO */ + ["\u336F", "\u336F"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE */ + ["\u3370", "\u3370"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR */ + ["\u3371", "\u3371"], /* SQUARE HPA */ + ["\u3372", "\u3372"], /* SQUARE DA */ + ["\u3373", "\u3373"], /* SQUARE AU */ + ["\u3374", "\u3374"], /* SQUARE BAR */ + ["\u3375", "\u3375"], /* SQUARE OV */ + ["\u3376", "\u3376"], /* SQUARE PC */ + ["\u3377", "\u3377"], /* SQUARE DM */ + ["\u3378", "\u3378"], /* SQUARE DM SQUARED */ + ["\u3379", "\u3379"], /* SQUARE DM CUBED */ + ["\u337A", "\u337A"], /* SQUARE IU */ + ["\u337B", "\u337B"], /* SQUARE ERA NAME HEISEI (SQUARED TWO IDEOGRAPHS ERA NAME HEISEI) */ + ["\u337C", "\u337C"], /* SQUARE ERA NAME SYOUWA (SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA) */ + ["\u337D", "\u337D"], /* SQUARE ERA NAME TAISYOU (SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU) */ + ["\u337E", "\u337E"], /* SQUARE ERA NAME MEIZI (SQUARED TWO IDEOGRAPHS ERA NAME MEIZI) */ + ["\u337F", "\u337F"], /* SQUARE CORPORATION (SQUARED FOUR IDEOGRAPHS CORPORATION) */ + ["\u3380", "\u3380"], /* SQUARE PA AMPS (SQUARED PA AMPS) */ + ["\u3381", "\u3381"], /* SQUARE NA (SQUARED NA) */ + ["\u3382", "\u3382"], /* SQUARE MU A (SQUARED MU A) */ + ["\u3383", "\u3383"], /* SQUARE MA (SQUARED MA) */ + ["\u3384", "\u3384"], /* SQUARE KA (SQUARED KA) */ + ["\u3385", "\u3385"], /* SQUARE KB (SQUARED KB) */ + ["\u3386", "\u3386"], /* SQUARE MB (SQUARED MB) */ + ["\u3387", "\u3387"], /* SQUARE GB (SQUARED GB) */ + ["\u3388", "\u3388"], /* SQUARE CAL (SQUARED CAL) */ + ["\u3389", "\u3389"], /* SQUARE KCAL (SQUARED KCAL) */ + ["\u338A", "\u338A"], /* SQUARE PF (SQUARED PF) */ + ["\u338B", "\u338B"], /* SQUARE NF (SQUARED NF) */ + ["\u338C", "\u338C"], /* SQUARE MU F (SQUARED MU F) */ + ["\u338D", "\u338D"], /* SQUARE MU G (SQUARED MU G) */ + ["\u338E", "\u338E"], /* SQUARE MG (SQUARED MG) */ + ["\u338F", "\u338F"], /* SQUARE KG (SQUARED KG) */ + ["\u3390", "\u3390"], /* SQUARE HZ (SQUARED HZ) */ + ["\u3391", "\u3391"], /* SQUARE KHZ (SQUARED KHZ) */ + ["\u3392", "\u3392"], /* SQUARE MHZ (SQUARED MHZ) */ + ["\u3393", "\u3393"], /* SQUARE GHZ (SQUARED GHZ) */ + ["\u3394", "\u3394"], /* SQUARE THZ (SQUARED THZ) */ + ["\u3395", "\u3395"], /* SQUARE MU L (SQUARED MU L) */ + ["\u3396", "\u3396"], /* SQUARE ML (SQUARED ML) */ + ["\u3397", "\u3397"], /* SQUARE DL (SQUARED DL) */ + ["\u3398", "\u3398"], /* SQUARE KL (SQUARED KL) */ + ["\u3399", "\u3399"], /* SQUARE FM (SQUARED FM) */ + ["\u339A", "\u339A"], /* SQUARE NM (SQUARED NM) */ + ["\u339B", "\u339B"], /* SQUARE MU M (SQUARED MU M) */ + ["\u339C", "\u339C"], /* SQUARE MM (SQUARED MM) */ + ["\u339D", "\u339D"], /* SQUARE CM (SQUARED CM) */ + ["\u339E", "\u339E"], /* SQUARE KM (SQUARED KM) */ + ["\u339F", "\u339F"], /* SQUARE MM SQUARED (SQUARED MM SQUARED) */ + ["\u33A0", "\u33A0"], /* SQUARE CM SQUARED (SQUARED CM SQUARED) */ + ["\u33A1", "\u33A1"], /* SQUARE M SQUARED (SQUARED M SQUARED) */ + ["\u33A2", "\u33A2"], /* SQUARE KM SQUARED (SQUARED KM SQUARED) */ + ["\u33A3", "\u33A3"], /* SQUARE MM CUBED (SQUARED MM CUBED) */ + ["\u33A4", "\u33A4"], /* SQUARE CM CUBED (SQUARED CM CUBED) */ + ["\u33A5", "\u33A5"], /* SQUARE M CUBED (SQUARED M CUBED) */ + ["\u33A6", "\u33A6"], /* SQUARE KM CUBED (SQUARED KM CUBED) */ + ["\u33A7", "\u33A7"], /* SQUARE M OVER S (SQUARED M OVER S) */ + ["\u33A8", "\u33A8"], /* SQUARE M OVER S SQUARED (SQUARED M OVER S SQUARED) */ + ["\u33A9", "\u33A9"], /* SQUARE PA (SQUARED PA) */ + ["\u33AA", "\u33AA"], /* SQUARE KPA (SQUARED KPA) */ + ["\u33AB", "\u33AB"], /* SQUARE MPA (SQUARED MPA) */ + ["\u33AC", "\u33AC"], /* SQUARE GPA (SQUARED GPA) */ + ["\u33AD", "\u33AD"], /* SQUARE RAD (SQUARED RAD) */ + ["\u33AE", "\u33AE"], /* SQUARE RAD OVER S (SQUARED RAD OVER S) */ + ["\u33AF", "\u33AF"], /* SQUARE RAD OVER S SQUARED (SQUARED RAD OVER S SQUARED) */ + ["\u33B0", "\u33B0"], /* SQUARE PS (SQUARED PS) */ + ["\u33B1", "\u33B1"], /* SQUARE NS (SQUARED NS) */ + ["\u33B2", "\u33B2"], /* SQUARE MU S (SQUARED MU S) */ + ["\u33B3", "\u33B3"], /* SQUARE MS (SQUARED MS) */ + ["\u33B4", "\u33B4"], /* SQUARE PV (SQUARED PV) */ + ["\u33B5", "\u33B5"], /* SQUARE NV (SQUARED NV) */ + ["\u33B6", "\u33B6"], /* SQUARE MU V (SQUARED MU V) */ + ["\u33B7", "\u33B7"], /* SQUARE MV (SQUARED MV) */ + ["\u33B8", "\u33B8"], /* SQUARE KV (SQUARED KV) */ + ["\u33B9", "\u33B9"], /* SQUARE MV MEGA (SQUARED MV MEGA) */ + ["\u33BA", "\u33BA"], /* SQUARE PW (SQUARED PW) */ + ["\u33BB", "\u33BB"], /* SQUARE NW (SQUARED NW) */ + ["\u33BC", "\u33BC"], /* SQUARE MU W (SQUARED MU W) */ + ["\u33BD", "\u33BD"], /* SQUARE MW (SQUARED MW) */ + ["\u33BE", "\u33BE"], /* SQUARE KW (SQUARED KW) */ + ["\u33BF", "\u33BF"], /* SQUARE MW MEGA (SQUARED MW MEGA) */ + ["\u33C0", "\u33C0"], /* SQUARE K OHM (SQUARED K OHM) */ + ["\u33C1", "\u33C1"], /* SQUARE M OHM (SQUARED M OHM) */ + ["\u33C2", "\u33C2"], /* SQUARE AM (SQUARED AM) */ + ["\u33C3", "\u33C3"], /* SQUARE BQ (SQUARED BQ) */ + ["\u33C4", "\u33C4"], /* SQUARE CC (SQUARED CC) */ + ["\u33C5", "\u33C5"], /* SQUARE CD (SQUARED CD) */ + ["\u33C6", "\u33C6"], /* SQUARE C OVER KG (SQUARED C OVER KG) */ + ["\u33C7", "\u33C7"], /* SQUARE CO (SQUARED CO) */ + ["\u33C8", "\u33C8"], /* SQUARE DB (SQUARED DB) */ + ["\u33C9", "\u33C9"], /* SQUARE GY (SQUARED GY) */ + ["\u33CA", "\u33CA"], /* SQUARE HA (SQUARED HA) */ + ["\u33CB", "\u33CB"], /* SQUARE HP (SQUARED HP) */ + ["\u33CC", "\u33CC"], /* SQUARE IN (SQUARED IN) */ + ["\u33CD", "\u33CD"], /* SQUARE KK (SQUARED KK) */ + ["\u33CE", "\u33CE"], /* SQUARE KM CAPITAL (SQUARED KM CAPITAL) */ + ["\u33CF", "\u33CF"], /* SQUARE KT (SQUARED KT) */ + ["\u33D0", "\u33D0"], /* SQUARE LM (SQUARED LM) */ + ["\u33D1", "\u33D1"], /* SQUARE LN (SQUARED LN) */ + ["\u33D2", "\u33D2"], /* SQUARE LOG (SQUARED LOG) */ + ["\u33D3", "\u33D3"], /* SQUARE LX (SQUARED LX) */ + ["\u33D4", "\u33D4"], /* SQUARE MB SMALL (SQUARED MB SMALL) */ + ["\u33D5", "\u33D5"], /* SQUARE MIL (SQUARED MIL) */ + ["\u33D6", "\u33D6"], /* SQUARE MOL (SQUARED MOL) */ + ["\u33D7", "\u33D7"], /* SQUARE PH (SQUARED PH) */ + ["\u33D8", "\u33D8"], /* SQUARE PM (SQUARED PM) */ + ["\u33D9", "\u33D9"], /* SQUARE PPM (SQUARED PPM) */ + ["\u33DA", "\u33DA"], /* SQUARE PR (SQUARED PR) */ + ["\u33DB", "\u33DB"], /* SQUARE SR (SQUARED SR) */ + ["\u33DC", "\u33DC"], /* SQUARE SV (SQUARED SV) */ + ["\u33DD", "\u33DD"], /* SQUARE WB (SQUARED WB) */ + ["\u33DE", "\u33DE"], /* SQUARE V OVER M */ + ["\u33DF", "\u33DF"], /* SQUARE A OVER M */ + ["\u33E0", "\u33E0"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE */ + ["\u33E1", "\u33E1"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO */ + ["\u33E2", "\u33E2"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE */ + ["\u33E3", "\u33E3"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR */ + ["\u33E4", "\u33E4"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE */ + ["\u33E5", "\u33E5"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX */ + ["\u33E6", "\u33E6"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN */ + ["\u33E7", "\u33E7"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT */ + ["\u33E8", "\u33E8"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE */ + ["\u33E9", "\u33E9"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN */ + ["\u33EA", "\u33EA"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN */ + ["\u33EB", "\u33EB"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE */ + ["\u33EC", "\u33EC"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN */ + ["\u33ED", "\u33ED"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN */ + ["\u33EE", "\u33EE"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN */ + ["\u33EF", "\u33EF"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN */ + ["\u33F0", "\u33F0"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN */ + ["\u33F1", "\u33F1"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN */ + ["\u33F2", "\u33F2"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN */ + ["\u33F3", "\u33F3"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY */ + ["\u33F4", "\u33F4"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE */ + ["\u33F5", "\u33F5"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO */ + ["\u33F6", "\u33F6"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE */ + ["\u33F7", "\u33F7"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR */ + ["\u33F8", "\u33F8"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE */ + ["\u33F9", "\u33F9"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX */ + ["\u33FA", "\u33FA"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN */ + ["\u33FB", "\u33FB"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT */ + ["\u33FC", "\u33FC"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE */ + ["\u33FD", "\u33FD"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY */ + ["\u33FE", "\u33FE"], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE */ + ["\u33FF", "\u33FF"], /* SQUARE GAL */ + ["\u3400", "\u3400"], /* CJK Ideograph Extension A */ + ["\u3401", "\u3401"], /* CJK Ideograph Extension A */ + ["\u3402", "\u3402"], /* CJK Ideograph Extension A */ + ["\u3403", "\u3403"], /* CJK Ideograph Extension A */ + ["\u3404", "\u3404"], /* CJK Ideograph Extension A */ + ["\u3405", "\u3405"], /* CJK Ideograph Extension A */ + ["\u3406", "\u3406"], /* CJK Ideograph Extension A */ + ["\u3407", "\u3407"], /* CJK Ideograph Extension A */ + ["\u3408", "\u3408"], /* CJK Ideograph Extension A */ + ["\u3409", "\u3409"], /* CJK Ideograph Extension A */ + ["\u340A", "\u340A"], /* CJK Ideograph Extension A */ + ["\u340B", "\u340B"], /* CJK Ideograph Extension A */ + ["\u340C", "\u340C"], /* CJK Ideograph Extension A */ + ["\u340D", "\u340D"], /* CJK Ideograph Extension A */ + ["\u340E", "\u340E"], /* CJK Ideograph Extension A */ + ["\u340F", "\u340F"], /* CJK Ideograph Extension A */ + ["\u3410", "\u3410"], /* CJK Ideograph Extension A */ + ["\u3411", "\u3411"], /* CJK Ideograph Extension A */ + ["\u3412", "\u3412"], /* CJK Ideograph Extension A */ + ["\u3413", "\u3413"], /* CJK Ideograph Extension A */ + ["\u3414", "\u3414"], /* CJK Ideograph Extension A */ + ["\u3415", "\u3415"], /* CJK Ideograph Extension A */ + ["\u3416", "\u3416"], /* CJK Ideograph Extension A */ + ["\u3417", "\u3417"], /* CJK Ideograph Extension A */ + ["\u3418", "\u3418"], /* CJK Ideograph Extension A */ + ["\u3419", "\u3419"], /* CJK Ideograph Extension A */ + ["\u341A", "\u341A"], /* CJK Ideograph Extension A */ + ["\u341B", "\u341B"], /* CJK Ideograph Extension A */ + ["\u341C", "\u341C"], /* CJK Ideograph Extension A */ + ["\u341D", "\u341D"], /* CJK Ideograph Extension A */ + ["\u341E", "\u341E"], /* CJK Ideograph Extension A */ + ["\u341F", "\u341F"], /* CJK Ideograph Extension A */ + ["\u3420", "\u3420"], /* CJK Ideograph Extension A */ + ["\u3421", "\u3421"], /* CJK Ideograph Extension A */ + ["\u3422", "\u3422"], /* CJK Ideograph Extension A */ + ["\u3423", "\u3423"], /* CJK Ideograph Extension A */ + ["\u3424", "\u3424"], /* CJK Ideograph Extension A */ + ["\u3425", "\u3425"], /* CJK Ideograph Extension A */ + ["\u3426", "\u3426"], /* CJK Ideograph Extension A */ + ["\u3427", "\u3427"], /* CJK Ideograph Extension A */ + ["\u3428", "\u3428"], /* CJK Ideograph Extension A */ + ["\u3429", "\u3429"], /* CJK Ideograph Extension A */ + ["\u342A", "\u342A"], /* CJK Ideograph Extension A */ + ["\u342B", "\u342B"], /* CJK Ideograph Extension A */ + ["\u342C", "\u342C"], /* CJK Ideograph Extension A */ + ["\u342D", "\u342D"], /* CJK Ideograph Extension A */ + ["\u342E", "\u342E"], /* CJK Ideograph Extension A */ + ["\u342F", "\u342F"], /* CJK Ideograph Extension A */ + ["\u3430", "\u3430"], /* CJK Ideograph Extension A */ + ["\u3431", "\u3431"], /* CJK Ideograph Extension A */ + ["\u3432", "\u3432"], /* CJK Ideograph Extension A */ + ["\u3433", "\u3433"], /* CJK Ideograph Extension A */ + ["\u3434", "\u3434"], /* CJK Ideograph Extension A */ + ["\u3435", "\u3435"], /* CJK Ideograph Extension A */ + ["\u3436", "\u3436"], /* CJK Ideograph Extension A */ + ["\u3437", "\u3437"], /* CJK Ideograph Extension A */ + ["\u3438", "\u3438"], /* CJK Ideograph Extension A */ + ["\u3439", "\u3439"], /* CJK Ideograph Extension A */ + ["\u343A", "\u343A"], /* CJK Ideograph Extension A */ + ["\u343B", "\u343B"], /* CJK Ideograph Extension A */ + ["\u343C", "\u343C"], /* CJK Ideograph Extension A */ + ["\u343D", "\u343D"], /* CJK Ideograph Extension A */ + ["\u343E", "\u343E"], /* CJK Ideograph Extension A */ + ["\u343F", "\u343F"], /* CJK Ideograph Extension A */ + ["\u3440", "\u3440"], /* CJK Ideograph Extension A */ + ["\u3441", "\u3441"], /* CJK Ideograph Extension A */ + ["\u3442", "\u3442"], /* CJK Ideograph Extension A */ + ["\u3443", "\u3443"], /* CJK Ideograph Extension A */ + ["\u3444", "\u3444"], /* CJK Ideograph Extension A */ + ["\u3445", "\u3445"], /* CJK Ideograph Extension A */ + ["\u3446", "\u3446"], /* CJK Ideograph Extension A */ + ["\u3447", "\u3447"], /* CJK Ideograph Extension A */ + ["\u3448", "\u3448"], /* CJK Ideograph Extension A */ + ["\u3449", "\u3449"], /* CJK Ideograph Extension A */ + ["\u344A", "\u344A"], /* CJK Ideograph Extension A */ + ["\u344B", "\u344B"], /* CJK Ideograph Extension A */ + ["\u344C", "\u344C"], /* CJK Ideograph Extension A */ + ["\u344D", "\u344D"], /* CJK Ideograph Extension A */ + ["\u344E", "\u344E"], /* CJK Ideograph Extension A */ + ["\u344F", "\u344F"], /* CJK Ideograph Extension A */ + ["\u3450", "\u3450"], /* CJK Ideograph Extension A */ + ["\u3451", "\u3451"], /* CJK Ideograph Extension A */ + ["\u3452", "\u3452"], /* CJK Ideograph Extension A */ + ["\u3453", "\u3453"], /* CJK Ideograph Extension A */ + ["\u3454", "\u3454"], /* CJK Ideograph Extension A */ + ["\u3455", "\u3455"], /* CJK Ideograph Extension A */ + ["\u3456", "\u3456"], /* CJK Ideograph Extension A */ + ["\u3457", "\u3457"], /* CJK Ideograph Extension A */ + ["\u3458", "\u3458"], /* CJK Ideograph Extension A */ + ["\u3459", "\u3459"], /* CJK Ideograph Extension A */ + ["\u345A", "\u345A"], /* CJK Ideograph Extension A */ + ["\u345B", "\u345B"], /* CJK Ideograph Extension A */ + ["\u345C", "\u345C"], /* CJK Ideograph Extension A */ + ["\u345D", "\u345D"], /* CJK Ideograph Extension A */ + ["\u345E", "\u345E"], /* CJK Ideograph Extension A */ + ["\u345F", "\u345F"], /* CJK Ideograph Extension A */ + ["\u3460", "\u3460"], /* CJK Ideograph Extension A */ + ["\u3461", "\u3461"], /* CJK Ideograph Extension A */ + ["\u3462", "\u3462"], /* CJK Ideograph Extension A */ + ["\u3463", "\u3463"], /* CJK Ideograph Extension A */ + ["\u3464", "\u3464"], /* CJK Ideograph Extension A */ + ["\u3465", "\u3465"], /* CJK Ideograph Extension A */ + ["\u3466", "\u3466"], /* CJK Ideograph Extension A */ + ["\u3467", "\u3467"], /* CJK Ideograph Extension A */ + ["\u3468", "\u3468"], /* CJK Ideograph Extension A */ + ["\u3469", "\u3469"], /* CJK Ideograph Extension A */ + ["\u346A", "\u346A"], /* CJK Ideograph Extension A */ + ["\u346B", "\u346B"], /* CJK Ideograph Extension A */ + ["\u346C", "\u346C"], /* CJK Ideograph Extension A */ + ["\u346D", "\u346D"], /* CJK Ideograph Extension A */ + ["\u346E", "\u346E"], /* CJK Ideograph Extension A */ + ["\u346F", "\u346F"], /* CJK Ideograph Extension A */ + ["\u3470", "\u3470"], /* CJK Ideograph Extension A */ + ["\u3471", "\u3471"], /* CJK Ideograph Extension A */ + ["\u3472", "\u3472"], /* CJK Ideograph Extension A */ + ["\u3473", "\u3473"], /* CJK Ideograph Extension A */ + ["\u3474", "\u3474"], /* CJK Ideograph Extension A */ + ["\u3475", "\u3475"], /* CJK Ideograph Extension A */ + ["\u3476", "\u3476"], /* CJK Ideograph Extension A */ + ["\u3477", "\u3477"], /* CJK Ideograph Extension A */ + ["\u3478", "\u3478"], /* CJK Ideograph Extension A */ + ["\u3479", "\u3479"], /* CJK Ideograph Extension A */ + ["\u347A", "\u347A"], /* CJK Ideograph Extension A */ + ["\u347B", "\u347B"], /* CJK Ideograph Extension A */ + ["\u347C", "\u347C"], /* CJK Ideograph Extension A */ + ["\u347D", "\u347D"], /* CJK Ideograph Extension A */ + ["\u347E", "\u347E"], /* CJK Ideograph Extension A */ + ["\u347F", "\u347F"], /* CJK Ideograph Extension A */ + ["\u3480", "\u3480"], /* CJK Ideograph Extension A */ + ["\u3481", "\u3481"], /* CJK Ideograph Extension A */ + ["\u3482", "\u3482"], /* CJK Ideograph Extension A */ + ["\u3483", "\u3483"], /* CJK Ideograph Extension A */ + ["\u3484", "\u3484"], /* CJK Ideograph Extension A */ + ["\u3485", "\u3485"], /* CJK Ideograph Extension A */ + ["\u3486", "\u3486"], /* CJK Ideograph Extension A */ + ["\u3487", "\u3487"], /* CJK Ideograph Extension A */ + ["\u3488", "\u3488"], /* CJK Ideograph Extension A */ + ["\u3489", "\u3489"], /* CJK Ideograph Extension A */ + ["\u348A", "\u348A"], /* CJK Ideograph Extension A */ + ["\u348B", "\u348B"], /* CJK Ideograph Extension A */ + ["\u348C", "\u348C"], /* CJK Ideograph Extension A */ + ["\u348D", "\u348D"], /* CJK Ideograph Extension A */ + ["\u348E", "\u348E"], /* CJK Ideograph Extension A */ + ["\u348F", "\u348F"], /* CJK Ideograph Extension A */ + ["\u3490", "\u3490"], /* CJK Ideograph Extension A */ + ["\u3491", "\u3491"], /* CJK Ideograph Extension A */ + ["\u3492", "\u3492"], /* CJK Ideograph Extension A */ + ["\u3493", "\u3493"], /* CJK Ideograph Extension A */ + ["\u3494", "\u3494"], /* CJK Ideograph Extension A */ + ["\u3495", "\u3495"], /* CJK Ideograph Extension A */ + ["\u3496", "\u3496"], /* CJK Ideograph Extension A */ + ["\u3497", "\u3497"], /* CJK Ideograph Extension A */ + ["\u3498", "\u3498"], /* CJK Ideograph Extension A */ + ["\u3499", "\u3499"], /* CJK Ideograph Extension A */ + ["\u349A", "\u349A"], /* CJK Ideograph Extension A */ + ["\u349B", "\u349B"], /* CJK Ideograph Extension A */ + ["\u349C", "\u349C"], /* CJK Ideograph Extension A */ + ["\u349D", "\u349D"], /* CJK Ideograph Extension A */ + ["\u349E", "\u349E"], /* CJK Ideograph Extension A */ + ["\u349F", "\u349F"], /* CJK Ideograph Extension A */ + ["\u34A0", "\u34A0"], /* CJK Ideograph Extension A */ + ["\u34A1", "\u34A1"], /* CJK Ideograph Extension A */ + ["\u34A2", "\u34A2"], /* CJK Ideograph Extension A */ + ["\u34A3", "\u34A3"], /* CJK Ideograph Extension A */ + ["\u34A4", "\u34A4"], /* CJK Ideograph Extension A */ + ["\u34A5", "\u34A5"], /* CJK Ideograph Extension A */ + ["\u34A6", "\u34A6"], /* CJK Ideograph Extension A */ + ["\u34A7", "\u34A7"], /* CJK Ideograph Extension A */ + ["\u34A8", "\u34A8"], /* CJK Ideograph Extension A */ + ["\u34A9", "\u34A9"], /* CJK Ideograph Extension A */ + ["\u34AA", "\u34AA"], /* CJK Ideograph Extension A */ + ["\u34AB", "\u34AB"], /* CJK Ideograph Extension A */ + ["\u34AC", "\u34AC"], /* CJK Ideograph Extension A */ + ["\u34AD", "\u34AD"], /* CJK Ideograph Extension A */ + ["\u34AE", "\u34AE"], /* CJK Ideograph Extension A */ + ["\u34AF", "\u34AF"], /* CJK Ideograph Extension A */ + ["\u34B0", "\u34B0"], /* CJK Ideograph Extension A */ + ["\u34B1", "\u34B1"], /* CJK Ideograph Extension A */ + ["\u34B2", "\u34B2"], /* CJK Ideograph Extension A */ + ["\u34B3", "\u34B3"], /* CJK Ideograph Extension A */ + ["\u34B4", "\u34B4"], /* CJK Ideograph Extension A */ + ["\u34B5", "\u34B5"], /* CJK Ideograph Extension A */ + ["\u34B6", "\u34B6"], /* CJK Ideograph Extension A */ + ["\u34B7", "\u34B7"], /* CJK Ideograph Extension A */ + ["\u34B8", "\u34B8"], /* CJK Ideograph Extension A */ + ["\u34B9", "\u34B9"], /* CJK Ideograph Extension A */ + ["\u34BA", "\u34BA"], /* CJK Ideograph Extension A */ + ["\u34BB", "\u34BB"], /* CJK Ideograph Extension A */ + ["\u34BC", "\u34BC"], /* CJK Ideograph Extension A */ + ["\u34BD", "\u34BD"], /* CJK Ideograph Extension A */ + ["\u34BE", "\u34BE"], /* CJK Ideograph Extension A */ + ["\u34BF", "\u34BF"], /* CJK Ideograph Extension A */ + ["\u34C0", "\u34C0"], /* CJK Ideograph Extension A */ + ["\u34C1", "\u34C1"], /* CJK Ideograph Extension A */ + ["\u34C2", "\u34C2"], /* CJK Ideograph Extension A */ + ["\u34C3", "\u34C3"], /* CJK Ideograph Extension A */ + ["\u34C4", "\u34C4"], /* CJK Ideograph Extension A */ + ["\u34C5", "\u34C5"], /* CJK Ideograph Extension A */ + ["\u34C6", "\u34C6"], /* CJK Ideograph Extension A */ + ["\u34C7", "\u34C7"], /* CJK Ideograph Extension A */ + ["\u34C8", "\u34C8"], /* CJK Ideograph Extension A */ + ["\u34C9", "\u34C9"], /* CJK Ideograph Extension A */ + ["\u34CA", "\u34CA"], /* CJK Ideograph Extension A */ + ["\u34CB", "\u34CB"], /* CJK Ideograph Extension A */ + ["\u34CC", "\u34CC"], /* CJK Ideograph Extension A */ + ["\u34CD", "\u34CD"], /* CJK Ideograph Extension A */ + ["\u34CE", "\u34CE"], /* CJK Ideograph Extension A */ + ["\u34CF", "\u34CF"], /* CJK Ideograph Extension A */ + ["\u34D0", "\u34D0"], /* CJK Ideograph Extension A */ + ["\u34D1", "\u34D1"], /* CJK Ideograph Extension A */ + ["\u34D2", "\u34D2"], /* CJK Ideograph Extension A */ + ["\u34D3", "\u34D3"], /* CJK Ideograph Extension A */ + ["\u34D4", "\u34D4"], /* CJK Ideograph Extension A */ + ["\u34D5", "\u34D5"], /* CJK Ideograph Extension A */ + ["\u34D6", "\u34D6"], /* CJK Ideograph Extension A */ + ["\u34D7", "\u34D7"], /* CJK Ideograph Extension A */ + ["\u34D8", "\u34D8"], /* CJK Ideograph Extension A */ + ["\u34D9", "\u34D9"], /* CJK Ideograph Extension A */ + ["\u34DA", "\u34DA"], /* CJK Ideograph Extension A */ + ["\u34DB", "\u34DB"], /* CJK Ideograph Extension A */ + ["\u34DC", "\u34DC"], /* CJK Ideograph Extension A */ + ["\u34DD", "\u34DD"], /* CJK Ideograph Extension A */ + ["\u34DE", "\u34DE"], /* CJK Ideograph Extension A */ + ["\u34DF", "\u34DF"], /* CJK Ideograph Extension A */ + ["\u34E0", "\u34E0"], /* CJK Ideograph Extension A */ + ["\u34E1", "\u34E1"], /* CJK Ideograph Extension A */ + ["\u34E2", "\u34E2"], /* CJK Ideograph Extension A */ + ["\u34E3", "\u34E3"], /* CJK Ideograph Extension A */ + ["\u34E4", "\u34E4"], /* CJK Ideograph Extension A */ + ["\u34E5", "\u34E5"], /* CJK Ideograph Extension A */ + ["\u34E6", "\u34E6"], /* CJK Ideograph Extension A */ + ["\u34E7", "\u34E7"], /* CJK Ideograph Extension A */ + ["\u34E8", "\u34E8"], /* CJK Ideograph Extension A */ + ["\u34E9", "\u34E9"], /* CJK Ideograph Extension A */ + ["\u34EA", "\u34EA"], /* CJK Ideograph Extension A */ + ["\u34EB", "\u34EB"], /* CJK Ideograph Extension A */ + ["\u34EC", "\u34EC"], /* CJK Ideograph Extension A */ + ["\u34ED", "\u34ED"], /* CJK Ideograph Extension A */ + ["\u34EE", "\u34EE"], /* CJK Ideograph Extension A */ + ["\u34EF", "\u34EF"], /* CJK Ideograph Extension A */ + ["\u34F0", "\u34F0"], /* CJK Ideograph Extension A */ + ["\u34F1", "\u34F1"], /* CJK Ideograph Extension A */ + ["\u34F2", "\u34F2"], /* CJK Ideograph Extension A */ + ["\u34F3", "\u34F3"], /* CJK Ideograph Extension A */ + ["\u34F4", "\u34F4"], /* CJK Ideograph Extension A */ + ["\u34F5", "\u34F5"], /* CJK Ideograph Extension A */ + ["\u34F6", "\u34F6"], /* CJK Ideograph Extension A */ + ["\u34F7", "\u34F7"], /* CJK Ideograph Extension A */ + ["\u34F8", "\u34F8"], /* CJK Ideograph Extension A */ + ["\u34F9", "\u34F9"], /* CJK Ideograph Extension A */ + ["\u34FA", "\u34FA"], /* CJK Ideograph Extension A */ + ["\u34FB", "\u34FB"], /* CJK Ideograph Extension A */ + ["\u34FC", "\u34FC"], /* CJK Ideograph Extension A */ + ["\u34FD", "\u34FD"], /* CJK Ideograph Extension A */ + ["\u34FE", "\u34FE"], /* CJK Ideograph Extension A */ + ["\u34FF", "\u34FF"], /* CJK Ideograph Extension A */ + ["\u3500", "\u3500"], /* CJK Ideograph Extension A */ + ["\u3501", "\u3501"], /* CJK Ideograph Extension A */ + ["\u3502", "\u3502"], /* CJK Ideograph Extension A */ + ["\u3503", "\u3503"], /* CJK Ideograph Extension A */ + ["\u3504", "\u3504"], /* CJK Ideograph Extension A */ + ["\u3505", "\u3505"], /* CJK Ideograph Extension A */ + ["\u3506", "\u3506"], /* CJK Ideograph Extension A */ + ["\u3507", "\u3507"], /* CJK Ideograph Extension A */ + ["\u3508", "\u3508"], /* CJK Ideograph Extension A */ + ["\u3509", "\u3509"], /* CJK Ideograph Extension A */ + ["\u350A", "\u350A"], /* CJK Ideograph Extension A */ + ["\u350B", "\u350B"], /* CJK Ideograph Extension A */ + ["\u350C", "\u350C"], /* CJK Ideograph Extension A */ + ["\u350D", "\u350D"], /* CJK Ideograph Extension A */ + ["\u350E", "\u350E"], /* CJK Ideograph Extension A */ + ["\u350F", "\u350F"], /* CJK Ideograph Extension A */ + ["\u3510", "\u3510"], /* CJK Ideograph Extension A */ + ["\u3511", "\u3511"], /* CJK Ideograph Extension A */ + ["\u3512", "\u3512"], /* CJK Ideograph Extension A */ + ["\u3513", "\u3513"], /* CJK Ideograph Extension A */ + ["\u3514", "\u3514"], /* CJK Ideograph Extension A */ + ["\u3515", "\u3515"], /* CJK Ideograph Extension A */ + ["\u3516", "\u3516"], /* CJK Ideograph Extension A */ + ["\u3517", "\u3517"], /* CJK Ideograph Extension A */ + ["\u3518", "\u3518"], /* CJK Ideograph Extension A */ + ["\u3519", "\u3519"], /* CJK Ideograph Extension A */ + ["\u351A", "\u351A"], /* CJK Ideograph Extension A */ + ["\u351B", "\u351B"], /* CJK Ideograph Extension A */ + ["\u351C", "\u351C"], /* CJK Ideograph Extension A */ + ["\u351D", "\u351D"], /* CJK Ideograph Extension A */ + ["\u351E", "\u351E"], /* CJK Ideograph Extension A */ + ["\u351F", "\u351F"], /* CJK Ideograph Extension A */ + ["\u3520", "\u3520"], /* CJK Ideograph Extension A */ + ["\u3521", "\u3521"], /* CJK Ideograph Extension A */ + ["\u3522", "\u3522"], /* CJK Ideograph Extension A */ + ["\u3523", "\u3523"], /* CJK Ideograph Extension A */ + ["\u3524", "\u3524"], /* CJK Ideograph Extension A */ + ["\u3525", "\u3525"], /* CJK Ideograph Extension A */ + ["\u3526", "\u3526"], /* CJK Ideograph Extension A */ + ["\u3527", "\u3527"], /* CJK Ideograph Extension A */ + ["\u3528", "\u3528"], /* CJK Ideograph Extension A */ + ["\u3529", "\u3529"], /* CJK Ideograph Extension A */ + ["\u352A", "\u352A"], /* CJK Ideograph Extension A */ + ["\u352B", "\u352B"], /* CJK Ideograph Extension A */ + ["\u352C", "\u352C"], /* CJK Ideograph Extension A */ + ["\u352D", "\u352D"], /* CJK Ideograph Extension A */ + ["\u352E", "\u352E"], /* CJK Ideograph Extension A */ + ["\u352F", "\u352F"], /* CJK Ideograph Extension A */ + ["\u3530", "\u3530"], /* CJK Ideograph Extension A */ + ["\u3531", "\u3531"], /* CJK Ideograph Extension A */ + ["\u3532", "\u3532"], /* CJK Ideograph Extension A */ + ["\u3533", "\u3533"], /* CJK Ideograph Extension A */ + ["\u3534", "\u3534"], /* CJK Ideograph Extension A */ + ["\u3535", "\u3535"], /* CJK Ideograph Extension A */ + ["\u3536", "\u3536"], /* CJK Ideograph Extension A */ + ["\u3537", "\u3537"], /* CJK Ideograph Extension A */ + ["\u3538", "\u3538"], /* CJK Ideograph Extension A */ + ["\u3539", "\u3539"], /* CJK Ideograph Extension A */ + ["\u353A", "\u353A"], /* CJK Ideograph Extension A */ + ["\u353B", "\u353B"], /* CJK Ideograph Extension A */ + ["\u353C", "\u353C"], /* CJK Ideograph Extension A */ + ["\u353D", "\u353D"], /* CJK Ideograph Extension A */ + ["\u353E", "\u353E"], /* CJK Ideograph Extension A */ + ["\u353F", "\u353F"], /* CJK Ideograph Extension A */ + ["\u3540", "\u3540"], /* CJK Ideograph Extension A */ + ["\u3541", "\u3541"], /* CJK Ideograph Extension A */ + ["\u3542", "\u3542"], /* CJK Ideograph Extension A */ + ["\u3543", "\u3543"], /* CJK Ideograph Extension A */ + ["\u3544", "\u3544"], /* CJK Ideograph Extension A */ + ["\u3545", "\u3545"], /* CJK Ideograph Extension A */ + ["\u3546", "\u3546"], /* CJK Ideograph Extension A */ + ["\u3547", "\u3547"], /* CJK Ideograph Extension A */ + ["\u3548", "\u3548"], /* CJK Ideograph Extension A */ + ["\u3549", "\u3549"], /* CJK Ideograph Extension A */ + ["\u354A", "\u354A"], /* CJK Ideograph Extension A */ + ["\u354B", "\u354B"], /* CJK Ideograph Extension A */ + ["\u354C", "\u354C"], /* CJK Ideograph Extension A */ + ["\u354D", "\u354D"], /* CJK Ideograph Extension A */ + ["\u354E", "\u354E"], /* CJK Ideograph Extension A */ + ["\u354F", "\u354F"], /* CJK Ideograph Extension A */ + ["\u3550", "\u3550"], /* CJK Ideograph Extension A */ + ["\u3551", "\u3551"], /* CJK Ideograph Extension A */ + ["\u3552", "\u3552"], /* CJK Ideograph Extension A */ + ["\u3553", "\u3553"], /* CJK Ideograph Extension A */ + ["\u3554", "\u3554"], /* CJK Ideograph Extension A */ + ["\u3555", "\u3555"], /* CJK Ideograph Extension A */ + ["\u3556", "\u3556"], /* CJK Ideograph Extension A */ + ["\u3557", "\u3557"], /* CJK Ideograph Extension A */ + ["\u3558", "\u3558"], /* CJK Ideograph Extension A */ + ["\u3559", "\u3559"], /* CJK Ideograph Extension A */ + ["\u355A", "\u355A"], /* CJK Ideograph Extension A */ + ["\u355B", "\u355B"], /* CJK Ideograph Extension A */ + ["\u355C", "\u355C"], /* CJK Ideograph Extension A */ + ["\u355D", "\u355D"], /* CJK Ideograph Extension A */ + ["\u355E", "\u355E"], /* CJK Ideograph Extension A */ + ["\u355F", "\u355F"], /* CJK Ideograph Extension A */ + ["\u3560", "\u3560"], /* CJK Ideograph Extension A */ + ["\u3561", "\u3561"], /* CJK Ideograph Extension A */ + ["\u3562", "\u3562"], /* CJK Ideograph Extension A */ + ["\u3563", "\u3563"], /* CJK Ideograph Extension A */ + ["\u3564", "\u3564"], /* CJK Ideograph Extension A */ + ["\u3565", "\u3565"], /* CJK Ideograph Extension A */ + ["\u3566", "\u3566"], /* CJK Ideograph Extension A */ + ["\u3567", "\u3567"], /* CJK Ideograph Extension A */ + ["\u3568", "\u3568"], /* CJK Ideograph Extension A */ + ["\u3569", "\u3569"], /* CJK Ideograph Extension A */ + ["\u356A", "\u356A"], /* CJK Ideograph Extension A */ + ["\u356B", "\u356B"], /* CJK Ideograph Extension A */ + ["\u356C", "\u356C"], /* CJK Ideograph Extension A */ + ["\u356D", "\u356D"], /* CJK Ideograph Extension A */ + ["\u356E", "\u356E"], /* CJK Ideograph Extension A */ + ["\u356F", "\u356F"], /* CJK Ideograph Extension A */ + ["\u3570", "\u3570"], /* CJK Ideograph Extension A */ + ["\u3571", "\u3571"], /* CJK Ideograph Extension A */ + ["\u3572", "\u3572"], /* CJK Ideograph Extension A */ + ["\u3573", "\u3573"], /* CJK Ideograph Extension A */ + ["\u3574", "\u3574"], /* CJK Ideograph Extension A */ + ["\u3575", "\u3575"], /* CJK Ideograph Extension A */ + ["\u3576", "\u3576"], /* CJK Ideograph Extension A */ + ["\u3577", "\u3577"], /* CJK Ideograph Extension A */ + ["\u3578", "\u3578"], /* CJK Ideograph Extension A */ + ["\u3579", "\u3579"], /* CJK Ideograph Extension A */ + ["\u357A", "\u357A"], /* CJK Ideograph Extension A */ + ["\u357B", "\u357B"], /* CJK Ideograph Extension A */ + ["\u357C", "\u357C"], /* CJK Ideograph Extension A */ + ["\u357D", "\u357D"], /* CJK Ideograph Extension A */ + ["\u357E", "\u357E"], /* CJK Ideograph Extension A */ + ["\u357F", "\u357F"], /* CJK Ideograph Extension A */ + ["\u3580", "\u3580"], /* CJK Ideograph Extension A */ + ["\u3581", "\u3581"], /* CJK Ideograph Extension A */ + ["\u3582", "\u3582"], /* CJK Ideograph Extension A */ + ["\u3583", "\u3583"], /* CJK Ideograph Extension A */ + ["\u3584", "\u3584"], /* CJK Ideograph Extension A */ + ["\u3585", "\u3585"], /* CJK Ideograph Extension A */ + ["\u3586", "\u3586"], /* CJK Ideograph Extension A */ + ["\u3587", "\u3587"], /* CJK Ideograph Extension A */ + ["\u3588", "\u3588"], /* CJK Ideograph Extension A */ + ["\u3589", "\u3589"], /* CJK Ideograph Extension A */ + ["\u358A", "\u358A"], /* CJK Ideograph Extension A */ + ["\u358B", "\u358B"], /* CJK Ideograph Extension A */ + ["\u358C", "\u358C"], /* CJK Ideograph Extension A */ + ["\u358D", "\u358D"], /* CJK Ideograph Extension A */ + ["\u358E", "\u358E"], /* CJK Ideograph Extension A */ + ["\u358F", "\u358F"], /* CJK Ideograph Extension A */ + ["\u3590", "\u3590"], /* CJK Ideograph Extension A */ + ["\u3591", "\u3591"], /* CJK Ideograph Extension A */ + ["\u3592", "\u3592"], /* CJK Ideograph Extension A */ + ["\u3593", "\u3593"], /* CJK Ideograph Extension A */ + ["\u3594", "\u3594"], /* CJK Ideograph Extension A */ + ["\u3595", "\u3595"], /* CJK Ideograph Extension A */ + ["\u3596", "\u3596"], /* CJK Ideograph Extension A */ + ["\u3597", "\u3597"], /* CJK Ideograph Extension A */ + ["\u3598", "\u3598"], /* CJK Ideograph Extension A */ + ["\u3599", "\u3599"], /* CJK Ideograph Extension A */ + ["\u359A", "\u359A"], /* CJK Ideograph Extension A */ + ["\u359B", "\u359B"], /* CJK Ideograph Extension A */ + ["\u359C", "\u359C"], /* CJK Ideograph Extension A */ + ["\u359D", "\u359D"], /* CJK Ideograph Extension A */ + ["\u359E", "\u359E"], /* CJK Ideograph Extension A */ + ["\u359F", "\u359F"], /* CJK Ideograph Extension A */ + ["\u35A0", "\u35A0"], /* CJK Ideograph Extension A */ + ["\u35A1", "\u35A1"], /* CJK Ideograph Extension A */ + ["\u35A2", "\u35A2"], /* CJK Ideograph Extension A */ + ["\u35A3", "\u35A3"], /* CJK Ideograph Extension A */ + ["\u35A4", "\u35A4"], /* CJK Ideograph Extension A */ + ["\u35A5", "\u35A5"], /* CJK Ideograph Extension A */ + ["\u35A6", "\u35A6"], /* CJK Ideograph Extension A */ + ["\u35A7", "\u35A7"], /* CJK Ideograph Extension A */ + ["\u35A8", "\u35A8"], /* CJK Ideograph Extension A */ + ["\u35A9", "\u35A9"], /* CJK Ideograph Extension A */ + ["\u35AA", "\u35AA"], /* CJK Ideograph Extension A */ + ["\u35AB", "\u35AB"], /* CJK Ideograph Extension A */ + ["\u35AC", "\u35AC"], /* CJK Ideograph Extension A */ + ["\u35AD", "\u35AD"], /* CJK Ideograph Extension A */ + ["\u35AE", "\u35AE"], /* CJK Ideograph Extension A */ + ["\u35AF", "\u35AF"], /* CJK Ideograph Extension A */ + ["\u35B0", "\u35B0"], /* CJK Ideograph Extension A */ + ["\u35B1", "\u35B1"], /* CJK Ideograph Extension A */ + ["\u35B2", "\u35B2"], /* CJK Ideograph Extension A */ + ["\u35B3", "\u35B3"], /* CJK Ideograph Extension A */ + ["\u35B4", "\u35B4"], /* CJK Ideograph Extension A */ + ["\u35B5", "\u35B5"], /* CJK Ideograph Extension A */ + ["\u35B6", "\u35B6"], /* CJK Ideograph Extension A */ + ["\u35B7", "\u35B7"], /* CJK Ideograph Extension A */ + ["\u35B8", "\u35B8"], /* CJK Ideograph Extension A */ + ["\u35B9", "\u35B9"], /* CJK Ideograph Extension A */ + ["\u35BA", "\u35BA"], /* CJK Ideograph Extension A */ + ["\u35BB", "\u35BB"], /* CJK Ideograph Extension A */ + ["\u35BC", "\u35BC"], /* CJK Ideograph Extension A */ + ["\u35BD", "\u35BD"], /* CJK Ideograph Extension A */ + ["\u35BE", "\u35BE"], /* CJK Ideograph Extension A */ + ["\u35BF", "\u35BF"], /* CJK Ideograph Extension A */ + ["\u35C0", "\u35C0"], /* CJK Ideograph Extension A */ + ["\u35C1", "\u35C1"], /* CJK Ideograph Extension A */ + ["\u35C2", "\u35C2"], /* CJK Ideograph Extension A */ + ["\u35C3", "\u35C3"], /* CJK Ideograph Extension A */ + ["\u35C4", "\u35C4"], /* CJK Ideograph Extension A */ + ["\u35C5", "\u35C5"], /* CJK Ideograph Extension A */ + ["\u35C6", "\u35C6"], /* CJK Ideograph Extension A */ + ["\u35C7", "\u35C7"], /* CJK Ideograph Extension A */ + ["\u35C8", "\u35C8"], /* CJK Ideograph Extension A */ + ["\u35C9", "\u35C9"], /* CJK Ideograph Extension A */ + ["\u35CA", "\u35CA"], /* CJK Ideograph Extension A */ + ["\u35CB", "\u35CB"], /* CJK Ideograph Extension A */ + ["\u35CC", "\u35CC"], /* CJK Ideograph Extension A */ + ["\u35CD", "\u35CD"], /* CJK Ideograph Extension A */ + ["\u35CE", "\u35CE"], /* CJK Ideograph Extension A */ + ["\u35CF", "\u35CF"], /* CJK Ideograph Extension A */ + ["\u35D0", "\u35D0"], /* CJK Ideograph Extension A */ + ["\u35D1", "\u35D1"], /* CJK Ideograph Extension A */ + ["\u35D2", "\u35D2"], /* CJK Ideograph Extension A */ + ["\u35D3", "\u35D3"], /* CJK Ideograph Extension A */ + ["\u35D4", "\u35D4"], /* CJK Ideograph Extension A */ + ["\u35D5", "\u35D5"], /* CJK Ideograph Extension A */ + ["\u35D6", "\u35D6"], /* CJK Ideograph Extension A */ + ["\u35D7", "\u35D7"], /* CJK Ideograph Extension A */ + ["\u35D8", "\u35D8"], /* CJK Ideograph Extension A */ + ["\u35D9", "\u35D9"], /* CJK Ideograph Extension A */ + ["\u35DA", "\u35DA"], /* CJK Ideograph Extension A */ + ["\u35DB", "\u35DB"], /* CJK Ideograph Extension A */ + ["\u35DC", "\u35DC"], /* CJK Ideograph Extension A */ + ["\u35DD", "\u35DD"], /* CJK Ideograph Extension A */ + ["\u35DE", "\u35DE"], /* CJK Ideograph Extension A */ + ["\u35DF", "\u35DF"], /* CJK Ideograph Extension A */ + ["\u35E0", "\u35E0"], /* CJK Ideograph Extension A */ + ["\u35E1", "\u35E1"], /* CJK Ideograph Extension A */ + ["\u35E2", "\u35E2"], /* CJK Ideograph Extension A */ + ["\u35E3", "\u35E3"], /* CJK Ideograph Extension A */ + ["\u35E4", "\u35E4"], /* CJK Ideograph Extension A */ + ["\u35E5", "\u35E5"], /* CJK Ideograph Extension A */ + ["\u35E6", "\u35E6"], /* CJK Ideograph Extension A */ + ["\u35E7", "\u35E7"], /* CJK Ideograph Extension A */ + ["\u35E8", "\u35E8"], /* CJK Ideograph Extension A */ + ["\u35E9", "\u35E9"], /* CJK Ideograph Extension A */ + ["\u35EA", "\u35EA"], /* CJK Ideograph Extension A */ + ["\u35EB", "\u35EB"], /* CJK Ideograph Extension A */ + ["\u35EC", "\u35EC"], /* CJK Ideograph Extension A */ + ["\u35ED", "\u35ED"], /* CJK Ideograph Extension A */ + ["\u35EE", "\u35EE"], /* CJK Ideograph Extension A */ + ["\u35EF", "\u35EF"], /* CJK Ideograph Extension A */ + ["\u35F0", "\u35F0"], /* CJK Ideograph Extension A */ + ["\u35F1", "\u35F1"], /* CJK Ideograph Extension A */ + ["\u35F2", "\u35F2"], /* CJK Ideograph Extension A */ + ["\u35F3", "\u35F3"], /* CJK Ideograph Extension A */ + ["\u35F4", "\u35F4"], /* CJK Ideograph Extension A */ + ["\u35F5", "\u35F5"], /* CJK Ideograph Extension A */ + ["\u35F6", "\u35F6"], /* CJK Ideograph Extension A */ + ["\u35F7", "\u35F7"], /* CJK Ideograph Extension A */ + ["\u35F8", "\u35F8"], /* CJK Ideograph Extension A */ + ["\u35F9", "\u35F9"], /* CJK Ideograph Extension A */ + ["\u35FA", "\u35FA"], /* CJK Ideograph Extension A */ + ["\u35FB", "\u35FB"], /* CJK Ideograph Extension A */ + ["\u35FC", "\u35FC"], /* CJK Ideograph Extension A */ + ["\u35FD", "\u35FD"], /* CJK Ideograph Extension A */ + ["\u35FE", "\u35FE"], /* CJK Ideograph Extension A */ + ["\u35FF", "\u35FF"], /* CJK Ideograph Extension A */ + ["\u3600", "\u3600"], /* CJK Ideograph Extension A */ + ["\u3601", "\u3601"], /* CJK Ideograph Extension A */ + ["\u3602", "\u3602"], /* CJK Ideograph Extension A */ + ["\u3603", "\u3603"], /* CJK Ideograph Extension A */ + ["\u3604", "\u3604"], /* CJK Ideograph Extension A */ + ["\u3605", "\u3605"], /* CJK Ideograph Extension A */ + ["\u3606", "\u3606"], /* CJK Ideograph Extension A */ + ["\u3607", "\u3607"], /* CJK Ideograph Extension A */ + ["\u3608", "\u3608"], /* CJK Ideograph Extension A */ + ["\u3609", "\u3609"], /* CJK Ideograph Extension A */ + ["\u360A", "\u360A"], /* CJK Ideograph Extension A */ + ["\u360B", "\u360B"], /* CJK Ideograph Extension A */ + ["\u360C", "\u360C"], /* CJK Ideograph Extension A */ + ["\u360D", "\u360D"], /* CJK Ideograph Extension A */ + ["\u360E", "\u360E"], /* CJK Ideograph Extension A */ + ["\u360F", "\u360F"], /* CJK Ideograph Extension A */ + ["\u3610", "\u3610"], /* CJK Ideograph Extension A */ + ["\u3611", "\u3611"], /* CJK Ideograph Extension A */ + ["\u3612", "\u3612"], /* CJK Ideograph Extension A */ + ["\u3613", "\u3613"], /* CJK Ideograph Extension A */ + ["\u3614", "\u3614"], /* CJK Ideograph Extension A */ + ["\u3615", "\u3615"], /* CJK Ideograph Extension A */ + ["\u3616", "\u3616"], /* CJK Ideograph Extension A */ + ["\u3617", "\u3617"], /* CJK Ideograph Extension A */ + ["\u3618", "\u3618"], /* CJK Ideograph Extension A */ + ["\u3619", "\u3619"], /* CJK Ideograph Extension A */ + ["\u361A", "\u361A"], /* CJK Ideograph Extension A */ + ["\u361B", "\u361B"], /* CJK Ideograph Extension A */ + ["\u361C", "\u361C"], /* CJK Ideograph Extension A */ + ["\u361D", "\u361D"], /* CJK Ideograph Extension A */ + ["\u361E", "\u361E"], /* CJK Ideograph Extension A */ + ["\u361F", "\u361F"], /* CJK Ideograph Extension A */ + ["\u3620", "\u3620"], /* CJK Ideograph Extension A */ + ["\u3621", "\u3621"], /* CJK Ideograph Extension A */ + ["\u3622", "\u3622"], /* CJK Ideograph Extension A */ + ["\u3623", "\u3623"], /* CJK Ideograph Extension A */ + ["\u3624", "\u3624"], /* CJK Ideograph Extension A */ + ["\u3625", "\u3625"], /* CJK Ideograph Extension A */ + ["\u3626", "\u3626"], /* CJK Ideograph Extension A */ + ["\u3627", "\u3627"], /* CJK Ideograph Extension A */ + ["\u3628", "\u3628"], /* CJK Ideograph Extension A */ + ["\u3629", "\u3629"], /* CJK Ideograph Extension A */ + ["\u362A", "\u362A"], /* CJK Ideograph Extension A */ + ["\u362B", "\u362B"], /* CJK Ideograph Extension A */ + ["\u362C", "\u362C"], /* CJK Ideograph Extension A */ + ["\u362D", "\u362D"], /* CJK Ideograph Extension A */ + ["\u362E", "\u362E"], /* CJK Ideograph Extension A */ + ["\u362F", "\u362F"], /* CJK Ideograph Extension A */ + ["\u3630", "\u3630"], /* CJK Ideograph Extension A */ + ["\u3631", "\u3631"], /* CJK Ideograph Extension A */ + ["\u3632", "\u3632"], /* CJK Ideograph Extension A */ + ["\u3633", "\u3633"], /* CJK Ideograph Extension A */ + ["\u3634", "\u3634"], /* CJK Ideograph Extension A */ + ["\u3635", "\u3635"], /* CJK Ideograph Extension A */ + ["\u3636", "\u3636"], /* CJK Ideograph Extension A */ + ["\u3637", "\u3637"], /* CJK Ideograph Extension A */ + ["\u3638", "\u3638"], /* CJK Ideograph Extension A */ + ["\u3639", "\u3639"], /* CJK Ideograph Extension A */ + ["\u363A", "\u363A"], /* CJK Ideograph Extension A */ + ["\u363B", "\u363B"], /* CJK Ideograph Extension A */ + ["\u363C", "\u363C"], /* CJK Ideograph Extension A */ + ["\u363D", "\u363D"], /* CJK Ideograph Extension A */ + ["\u363E", "\u363E"], /* CJK Ideograph Extension A */ + ["\u363F", "\u363F"], /* CJK Ideograph Extension A */ + ["\u3640", "\u3640"], /* CJK Ideograph Extension A */ + ["\u3641", "\u3641"], /* CJK Ideograph Extension A */ + ["\u3642", "\u3642"], /* CJK Ideograph Extension A */ + ["\u3643", "\u3643"], /* CJK Ideograph Extension A */ + ["\u3644", "\u3644"], /* CJK Ideograph Extension A */ + ["\u3645", "\u3645"], /* CJK Ideograph Extension A */ + ["\u3646", "\u3646"], /* CJK Ideograph Extension A */ + ["\u3647", "\u3647"], /* CJK Ideograph Extension A */ + ["\u3648", "\u3648"], /* CJK Ideograph Extension A */ + ["\u3649", "\u3649"], /* CJK Ideograph Extension A */ + ["\u364A", "\u364A"], /* CJK Ideograph Extension A */ + ["\u364B", "\u364B"], /* CJK Ideograph Extension A */ + ["\u364C", "\u364C"], /* CJK Ideograph Extension A */ + ["\u364D", "\u364D"], /* CJK Ideograph Extension A */ + ["\u364E", "\u364E"], /* CJK Ideograph Extension A */ + ["\u364F", "\u364F"], /* CJK Ideograph Extension A */ + ["\u3650", "\u3650"], /* CJK Ideograph Extension A */ + ["\u3651", "\u3651"], /* CJK Ideograph Extension A */ + ["\u3652", "\u3652"], /* CJK Ideograph Extension A */ + ["\u3653", "\u3653"], /* CJK Ideograph Extension A */ + ["\u3654", "\u3654"], /* CJK Ideograph Extension A */ + ["\u3655", "\u3655"], /* CJK Ideograph Extension A */ + ["\u3656", "\u3656"], /* CJK Ideograph Extension A */ + ["\u3657", "\u3657"], /* CJK Ideograph Extension A */ + ["\u3658", "\u3658"], /* CJK Ideograph Extension A */ + ["\u3659", "\u3659"], /* CJK Ideograph Extension A */ + ["\u365A", "\u365A"], /* CJK Ideograph Extension A */ + ["\u365B", "\u365B"], /* CJK Ideograph Extension A */ + ["\u365C", "\u365C"], /* CJK Ideograph Extension A */ + ["\u365D", "\u365D"], /* CJK Ideograph Extension A */ + ["\u365E", "\u365E"], /* CJK Ideograph Extension A */ + ["\u365F", "\u365F"], /* CJK Ideograph Extension A */ + ["\u3660", "\u3660"], /* CJK Ideograph Extension A */ + ["\u3661", "\u3661"], /* CJK Ideograph Extension A */ + ["\u3662", "\u3662"], /* CJK Ideograph Extension A */ + ["\u3663", "\u3663"], /* CJK Ideograph Extension A */ + ["\u3664", "\u3664"], /* CJK Ideograph Extension A */ + ["\u3665", "\u3665"], /* CJK Ideograph Extension A */ + ["\u3666", "\u3666"], /* CJK Ideograph Extension A */ + ["\u3667", "\u3667"], /* CJK Ideograph Extension A */ + ["\u3668", "\u3668"], /* CJK Ideograph Extension A */ + ["\u3669", "\u3669"], /* CJK Ideograph Extension A */ + ["\u366A", "\u366A"], /* CJK Ideograph Extension A */ + ["\u366B", "\u366B"], /* CJK Ideograph Extension A */ + ["\u366C", "\u366C"], /* CJK Ideograph Extension A */ + ["\u366D", "\u366D"], /* CJK Ideograph Extension A */ + ["\u366E", "\u366E"], /* CJK Ideograph Extension A */ + ["\u366F", "\u366F"], /* CJK Ideograph Extension A */ + ["\u3670", "\u3670"], /* CJK Ideograph Extension A */ + ["\u3671", "\u3671"], /* CJK Ideograph Extension A */ + ["\u3672", "\u3672"], /* CJK Ideograph Extension A */ + ["\u3673", "\u3673"], /* CJK Ideograph Extension A */ + ["\u3674", "\u3674"], /* CJK Ideograph Extension A */ + ["\u3675", "\u3675"], /* CJK Ideograph Extension A */ + ["\u3676", "\u3676"], /* CJK Ideograph Extension A */ + ["\u3677", "\u3677"], /* CJK Ideograph Extension A */ + ["\u3678", "\u3678"], /* CJK Ideograph Extension A */ + ["\u3679", "\u3679"], /* CJK Ideograph Extension A */ + ["\u367A", "\u367A"], /* CJK Ideograph Extension A */ + ["\u367B", "\u367B"], /* CJK Ideograph Extension A */ + ["\u367C", "\u367C"], /* CJK Ideograph Extension A */ + ["\u367D", "\u367D"], /* CJK Ideograph Extension A */ + ["\u367E", "\u367E"], /* CJK Ideograph Extension A */ + ["\u367F", "\u367F"], /* CJK Ideograph Extension A */ + ["\u3680", "\u3680"], /* CJK Ideograph Extension A */ + ["\u3681", "\u3681"], /* CJK Ideograph Extension A */ + ["\u3682", "\u3682"], /* CJK Ideograph Extension A */ + ["\u3683", "\u3683"], /* CJK Ideograph Extension A */ + ["\u3684", "\u3684"], /* CJK Ideograph Extension A */ + ["\u3685", "\u3685"], /* CJK Ideograph Extension A */ + ["\u3686", "\u3686"], /* CJK Ideograph Extension A */ + ["\u3687", "\u3687"], /* CJK Ideograph Extension A */ + ["\u3688", "\u3688"], /* CJK Ideograph Extension A */ + ["\u3689", "\u3689"], /* CJK Ideograph Extension A */ + ["\u368A", "\u368A"], /* CJK Ideograph Extension A */ + ["\u368B", "\u368B"], /* CJK Ideograph Extension A */ + ["\u368C", "\u368C"], /* CJK Ideograph Extension A */ + ["\u368D", "\u368D"], /* CJK Ideograph Extension A */ + ["\u368E", "\u368E"], /* CJK Ideograph Extension A */ + ["\u368F", "\u368F"], /* CJK Ideograph Extension A */ + ["\u3690", "\u3690"], /* CJK Ideograph Extension A */ + ["\u3691", "\u3691"], /* CJK Ideograph Extension A */ + ["\u3692", "\u3692"], /* CJK Ideograph Extension A */ + ["\u3693", "\u3693"], /* CJK Ideograph Extension A */ + ["\u3694", "\u3694"], /* CJK Ideograph Extension A */ + ["\u3695", "\u3695"], /* CJK Ideograph Extension A */ + ["\u3696", "\u3696"], /* CJK Ideograph Extension A */ + ["\u3697", "\u3697"], /* CJK Ideograph Extension A */ + ["\u3698", "\u3698"], /* CJK Ideograph Extension A */ + ["\u3699", "\u3699"], /* CJK Ideograph Extension A */ + ["\u369A", "\u369A"], /* CJK Ideograph Extension A */ + ["\u369B", "\u369B"], /* CJK Ideograph Extension A */ + ["\u369C", "\u369C"], /* CJK Ideograph Extension A */ + ["\u369D", "\u369D"], /* CJK Ideograph Extension A */ + ["\u369E", "\u369E"], /* CJK Ideograph Extension A */ + ["\u369F", "\u369F"], /* CJK Ideograph Extension A */ + ["\u36A0", "\u36A0"], /* CJK Ideograph Extension A */ + ["\u36A1", "\u36A1"], /* CJK Ideograph Extension A */ + ["\u36A2", "\u36A2"], /* CJK Ideograph Extension A */ + ["\u36A3", "\u36A3"], /* CJK Ideograph Extension A */ + ["\u36A4", "\u36A4"], /* CJK Ideograph Extension A */ + ["\u36A5", "\u36A5"], /* CJK Ideograph Extension A */ + ["\u36A6", "\u36A6"], /* CJK Ideograph Extension A */ + ["\u36A7", "\u36A7"], /* CJK Ideograph Extension A */ + ["\u36A8", "\u36A8"], /* CJK Ideograph Extension A */ + ["\u36A9", "\u36A9"], /* CJK Ideograph Extension A */ + ["\u36AA", "\u36AA"], /* CJK Ideograph Extension A */ + ["\u36AB", "\u36AB"], /* CJK Ideograph Extension A */ + ["\u36AC", "\u36AC"], /* CJK Ideograph Extension A */ + ["\u36AD", "\u36AD"], /* CJK Ideograph Extension A */ + ["\u36AE", "\u36AE"], /* CJK Ideograph Extension A */ + ["\u36AF", "\u36AF"], /* CJK Ideograph Extension A */ + ["\u36B0", "\u36B0"], /* CJK Ideograph Extension A */ + ["\u36B1", "\u36B1"], /* CJK Ideograph Extension A */ + ["\u36B2", "\u36B2"], /* CJK Ideograph Extension A */ + ["\u36B3", "\u36B3"], /* CJK Ideograph Extension A */ + ["\u36B4", "\u36B4"], /* CJK Ideograph Extension A */ + ["\u36B5", "\u36B5"], /* CJK Ideograph Extension A */ + ["\u36B6", "\u36B6"], /* CJK Ideograph Extension A */ + ["\u36B7", "\u36B7"], /* CJK Ideograph Extension A */ + ["\u36B8", "\u36B8"], /* CJK Ideograph Extension A */ + ["\u36B9", "\u36B9"], /* CJK Ideograph Extension A */ + ["\u36BA", "\u36BA"], /* CJK Ideograph Extension A */ + ["\u36BB", "\u36BB"], /* CJK Ideograph Extension A */ + ["\u36BC", "\u36BC"], /* CJK Ideograph Extension A */ + ["\u36BD", "\u36BD"], /* CJK Ideograph Extension A */ + ["\u36BE", "\u36BE"], /* CJK Ideograph Extension A */ + ["\u36BF", "\u36BF"], /* CJK Ideograph Extension A */ + ["\u36C0", "\u36C0"], /* CJK Ideograph Extension A */ + ["\u36C1", "\u36C1"], /* CJK Ideograph Extension A */ + ["\u36C2", "\u36C2"], /* CJK Ideograph Extension A */ + ["\u36C3", "\u36C3"], /* CJK Ideograph Extension A */ + ["\u36C4", "\u36C4"], /* CJK Ideograph Extension A */ + ["\u36C5", "\u36C5"], /* CJK Ideograph Extension A */ + ["\u36C6", "\u36C6"], /* CJK Ideograph Extension A */ + ["\u36C7", "\u36C7"], /* CJK Ideograph Extension A */ + ["\u36C8", "\u36C8"], /* CJK Ideograph Extension A */ + ["\u36C9", "\u36C9"], /* CJK Ideograph Extension A */ + ["\u36CA", "\u36CA"], /* CJK Ideograph Extension A */ + ["\u36CB", "\u36CB"], /* CJK Ideograph Extension A */ + ["\u36CC", "\u36CC"], /* CJK Ideograph Extension A */ + ["\u36CD", "\u36CD"], /* CJK Ideograph Extension A */ + ["\u36CE", "\u36CE"], /* CJK Ideograph Extension A */ + ["\u36CF", "\u36CF"], /* CJK Ideograph Extension A */ + ["\u36D0", "\u36D0"], /* CJK Ideograph Extension A */ + ["\u36D1", "\u36D1"], /* CJK Ideograph Extension A */ + ["\u36D2", "\u36D2"], /* CJK Ideograph Extension A */ + ["\u36D3", "\u36D3"], /* CJK Ideograph Extension A */ + ["\u36D4", "\u36D4"], /* CJK Ideograph Extension A */ + ["\u36D5", "\u36D5"], /* CJK Ideograph Extension A */ + ["\u36D6", "\u36D6"], /* CJK Ideograph Extension A */ + ["\u36D7", "\u36D7"], /* CJK Ideograph Extension A */ + ["\u36D8", "\u36D8"], /* CJK Ideograph Extension A */ + ["\u36D9", "\u36D9"], /* CJK Ideograph Extension A */ + ["\u36DA", "\u36DA"], /* CJK Ideograph Extension A */ + ["\u36DB", "\u36DB"], /* CJK Ideograph Extension A */ + ["\u36DC", "\u36DC"], /* CJK Ideograph Extension A */ + ["\u36DD", "\u36DD"], /* CJK Ideograph Extension A */ + ["\u36DE", "\u36DE"], /* CJK Ideograph Extension A */ + ["\u36DF", "\u36DF"], /* CJK Ideograph Extension A */ + ["\u36E0", "\u36E0"], /* CJK Ideograph Extension A */ + ["\u36E1", "\u36E1"], /* CJK Ideograph Extension A */ + ["\u36E2", "\u36E2"], /* CJK Ideograph Extension A */ + ["\u36E3", "\u36E3"], /* CJK Ideograph Extension A */ + ["\u36E4", "\u36E4"], /* CJK Ideograph Extension A */ + ["\u36E5", "\u36E5"], /* CJK Ideograph Extension A */ + ["\u36E6", "\u36E6"], /* CJK Ideograph Extension A */ + ["\u36E7", "\u36E7"], /* CJK Ideograph Extension A */ + ["\u36E8", "\u36E8"], /* CJK Ideograph Extension A */ + ["\u36E9", "\u36E9"], /* CJK Ideograph Extension A */ + ["\u36EA", "\u36EA"], /* CJK Ideograph Extension A */ + ["\u36EB", "\u36EB"], /* CJK Ideograph Extension A */ + ["\u36EC", "\u36EC"], /* CJK Ideograph Extension A */ + ["\u36ED", "\u36ED"], /* CJK Ideograph Extension A */ + ["\u36EE", "\u36EE"], /* CJK Ideograph Extension A */ + ["\u36EF", "\u36EF"], /* CJK Ideograph Extension A */ + ["\u36F0", "\u36F0"], /* CJK Ideograph Extension A */ + ["\u36F1", "\u36F1"], /* CJK Ideograph Extension A */ + ["\u36F2", "\u36F2"], /* CJK Ideograph Extension A */ + ["\u36F3", "\u36F3"], /* CJK Ideograph Extension A */ + ["\u36F4", "\u36F4"], /* CJK Ideograph Extension A */ + ["\u36F5", "\u36F5"], /* CJK Ideograph Extension A */ + ["\u36F6", "\u36F6"], /* CJK Ideograph Extension A */ + ["\u36F7", "\u36F7"], /* CJK Ideograph Extension A */ + ["\u36F8", "\u36F8"], /* CJK Ideograph Extension A */ + ["\u36F9", "\u36F9"], /* CJK Ideograph Extension A */ + ["\u36FA", "\u36FA"], /* CJK Ideograph Extension A */ + ["\u36FB", "\u36FB"], /* CJK Ideograph Extension A */ + ["\u36FC", "\u36FC"], /* CJK Ideograph Extension A */ + ["\u36FD", "\u36FD"], /* CJK Ideograph Extension A */ + ["\u36FE", "\u36FE"], /* CJK Ideograph Extension A */ + ["\u36FF", "\u36FF"], /* CJK Ideograph Extension A */ + ["\u3700", "\u3700"], /* CJK Ideograph Extension A */ + ["\u3701", "\u3701"], /* CJK Ideograph Extension A */ + ["\u3702", "\u3702"], /* CJK Ideograph Extension A */ + ["\u3703", "\u3703"], /* CJK Ideograph Extension A */ + ["\u3704", "\u3704"], /* CJK Ideograph Extension A */ + ["\u3705", "\u3705"], /* CJK Ideograph Extension A */ + ["\u3706", "\u3706"], /* CJK Ideograph Extension A */ + ["\u3707", "\u3707"], /* CJK Ideograph Extension A */ + ["\u3708", "\u3708"], /* CJK Ideograph Extension A */ + ["\u3709", "\u3709"], /* CJK Ideograph Extension A */ + ["\u370A", "\u370A"], /* CJK Ideograph Extension A */ + ["\u370B", "\u370B"], /* CJK Ideograph Extension A */ + ["\u370C", "\u370C"], /* CJK Ideograph Extension A */ + ["\u370D", "\u370D"], /* CJK Ideograph Extension A */ + ["\u370E", "\u370E"], /* CJK Ideograph Extension A */ + ["\u370F", "\u370F"], /* CJK Ideograph Extension A */ + ["\u3710", "\u3710"], /* CJK Ideograph Extension A */ + ["\u3711", "\u3711"], /* CJK Ideograph Extension A */ + ["\u3712", "\u3712"], /* CJK Ideograph Extension A */ + ["\u3713", "\u3713"], /* CJK Ideograph Extension A */ + ["\u3714", "\u3714"], /* CJK Ideograph Extension A */ + ["\u3715", "\u3715"], /* CJK Ideograph Extension A */ + ["\u3716", "\u3716"], /* CJK Ideograph Extension A */ + ["\u3717", "\u3717"], /* CJK Ideograph Extension A */ + ["\u3718", "\u3718"], /* CJK Ideograph Extension A */ + ["\u3719", "\u3719"], /* CJK Ideograph Extension A */ + ["\u371A", "\u371A"], /* CJK Ideograph Extension A */ + ["\u371B", "\u371B"], /* CJK Ideograph Extension A */ + ["\u371C", "\u371C"], /* CJK Ideograph Extension A */ + ["\u371D", "\u371D"], /* CJK Ideograph Extension A */ + ["\u371E", "\u371E"], /* CJK Ideograph Extension A */ + ["\u371F", "\u371F"], /* CJK Ideograph Extension A */ + ["\u3720", "\u3720"], /* CJK Ideograph Extension A */ + ["\u3721", "\u3721"], /* CJK Ideograph Extension A */ + ["\u3722", "\u3722"], /* CJK Ideograph Extension A */ + ["\u3723", "\u3723"], /* CJK Ideograph Extension A */ + ["\u3724", "\u3724"], /* CJK Ideograph Extension A */ + ["\u3725", "\u3725"], /* CJK Ideograph Extension A */ + ["\u3726", "\u3726"], /* CJK Ideograph Extension A */ + ["\u3727", "\u3727"], /* CJK Ideograph Extension A */ + ["\u3728", "\u3728"], /* CJK Ideograph Extension A */ + ["\u3729", "\u3729"], /* CJK Ideograph Extension A */ + ["\u372A", "\u372A"], /* CJK Ideograph Extension A */ + ["\u372B", "\u372B"], /* CJK Ideograph Extension A */ + ["\u372C", "\u372C"], /* CJK Ideograph Extension A */ + ["\u372D", "\u372D"], /* CJK Ideograph Extension A */ + ["\u372E", "\u372E"], /* CJK Ideograph Extension A */ + ["\u372F", "\u372F"], /* CJK Ideograph Extension A */ + ["\u3730", "\u3730"], /* CJK Ideograph Extension A */ + ["\u3731", "\u3731"], /* CJK Ideograph Extension A */ + ["\u3732", "\u3732"], /* CJK Ideograph Extension A */ + ["\u3733", "\u3733"], /* CJK Ideograph Extension A */ + ["\u3734", "\u3734"], /* CJK Ideograph Extension A */ + ["\u3735", "\u3735"], /* CJK Ideograph Extension A */ + ["\u3736", "\u3736"], /* CJK Ideograph Extension A */ + ["\u3737", "\u3737"], /* CJK Ideograph Extension A */ + ["\u3738", "\u3738"], /* CJK Ideograph Extension A */ + ["\u3739", "\u3739"], /* CJK Ideograph Extension A */ + ["\u373A", "\u373A"], /* CJK Ideograph Extension A */ + ["\u373B", "\u373B"], /* CJK Ideograph Extension A */ + ["\u373C", "\u373C"], /* CJK Ideograph Extension A */ + ["\u373D", "\u373D"], /* CJK Ideograph Extension A */ + ["\u373E", "\u373E"], /* CJK Ideograph Extension A */ + ["\u373F", "\u373F"], /* CJK Ideograph Extension A */ + ["\u3740", "\u3740"], /* CJK Ideograph Extension A */ + ["\u3741", "\u3741"], /* CJK Ideograph Extension A */ + ["\u3742", "\u3742"], /* CJK Ideograph Extension A */ + ["\u3743", "\u3743"], /* CJK Ideograph Extension A */ + ["\u3744", "\u3744"], /* CJK Ideograph Extension A */ + ["\u3745", "\u3745"], /* CJK Ideograph Extension A */ + ["\u3746", "\u3746"], /* CJK Ideograph Extension A */ + ["\u3747", "\u3747"], /* CJK Ideograph Extension A */ + ["\u3748", "\u3748"], /* CJK Ideograph Extension A */ + ["\u3749", "\u3749"], /* CJK Ideograph Extension A */ + ["\u374A", "\u374A"], /* CJK Ideograph Extension A */ + ["\u374B", "\u374B"], /* CJK Ideograph Extension A */ + ["\u374C", "\u374C"], /* CJK Ideograph Extension A */ + ["\u374D", "\u374D"], /* CJK Ideograph Extension A */ + ["\u374E", "\u374E"], /* CJK Ideograph Extension A */ + ["\u374F", "\u374F"], /* CJK Ideograph Extension A */ + ["\u3750", "\u3750"], /* CJK Ideograph Extension A */ + ["\u3751", "\u3751"], /* CJK Ideograph Extension A */ + ["\u3752", "\u3752"], /* CJK Ideograph Extension A */ + ["\u3753", "\u3753"], /* CJK Ideograph Extension A */ + ["\u3754", "\u3754"], /* CJK Ideograph Extension A */ + ["\u3755", "\u3755"], /* CJK Ideograph Extension A */ + ["\u3756", "\u3756"], /* CJK Ideograph Extension A */ + ["\u3757", "\u3757"], /* CJK Ideograph Extension A */ + ["\u3758", "\u3758"], /* CJK Ideograph Extension A */ + ["\u3759", "\u3759"], /* CJK Ideograph Extension A */ + ["\u375A", "\u375A"], /* CJK Ideograph Extension A */ + ["\u375B", "\u375B"], /* CJK Ideograph Extension A */ + ["\u375C", "\u375C"], /* CJK Ideograph Extension A */ + ["\u375D", "\u375D"], /* CJK Ideograph Extension A */ + ["\u375E", "\u375E"], /* CJK Ideograph Extension A */ + ["\u375F", "\u375F"], /* CJK Ideograph Extension A */ + ["\u3760", "\u3760"], /* CJK Ideograph Extension A */ + ["\u3761", "\u3761"], /* CJK Ideograph Extension A */ + ["\u3762", "\u3762"], /* CJK Ideograph Extension A */ + ["\u3763", "\u3763"], /* CJK Ideograph Extension A */ + ["\u3764", "\u3764"], /* CJK Ideograph Extension A */ + ["\u3765", "\u3765"], /* CJK Ideograph Extension A */ + ["\u3766", "\u3766"], /* CJK Ideograph Extension A */ + ["\u3767", "\u3767"], /* CJK Ideograph Extension A */ + ["\u3768", "\u3768"], /* CJK Ideograph Extension A */ + ["\u3769", "\u3769"], /* CJK Ideograph Extension A */ + ["\u376A", "\u376A"], /* CJK Ideograph Extension A */ + ["\u376B", "\u376B"], /* CJK Ideograph Extension A */ + ["\u376C", "\u376C"], /* CJK Ideograph Extension A */ + ["\u376D", "\u376D"], /* CJK Ideograph Extension A */ + ["\u376E", "\u376E"], /* CJK Ideograph Extension A */ + ["\u376F", "\u376F"], /* CJK Ideograph Extension A */ + ["\u3770", "\u3770"], /* CJK Ideograph Extension A */ + ["\u3771", "\u3771"], /* CJK Ideograph Extension A */ + ["\u3772", "\u3772"], /* CJK Ideograph Extension A */ + ["\u3773", "\u3773"], /* CJK Ideograph Extension A */ + ["\u3774", "\u3774"], /* CJK Ideograph Extension A */ + ["\u3775", "\u3775"], /* CJK Ideograph Extension A */ + ["\u3776", "\u3776"], /* CJK Ideograph Extension A */ + ["\u3777", "\u3777"], /* CJK Ideograph Extension A */ + ["\u3778", "\u3778"], /* CJK Ideograph Extension A */ + ["\u3779", "\u3779"], /* CJK Ideograph Extension A */ + ["\u377A", "\u377A"], /* CJK Ideograph Extension A */ + ["\u377B", "\u377B"], /* CJK Ideograph Extension A */ + ["\u377C", "\u377C"], /* CJK Ideograph Extension A */ + ["\u377D", "\u377D"], /* CJK Ideograph Extension A */ + ["\u377E", "\u377E"], /* CJK Ideograph Extension A */ + ["\u377F", "\u377F"], /* CJK Ideograph Extension A */ + ["\u3780", "\u3780"], /* CJK Ideograph Extension A */ + ["\u3781", "\u3781"], /* CJK Ideograph Extension A */ + ["\u3782", "\u3782"], /* CJK Ideograph Extension A */ + ["\u3783", "\u3783"], /* CJK Ideograph Extension A */ + ["\u3784", "\u3784"], /* CJK Ideograph Extension A */ + ["\u3785", "\u3785"], /* CJK Ideograph Extension A */ + ["\u3786", "\u3786"], /* CJK Ideograph Extension A */ + ["\u3787", "\u3787"], /* CJK Ideograph Extension A */ + ["\u3788", "\u3788"], /* CJK Ideograph Extension A */ + ["\u3789", "\u3789"], /* CJK Ideograph Extension A */ + ["\u378A", "\u378A"], /* CJK Ideograph Extension A */ + ["\u378B", "\u378B"], /* CJK Ideograph Extension A */ + ["\u378C", "\u378C"], /* CJK Ideograph Extension A */ + ["\u378D", "\u378D"], /* CJK Ideograph Extension A */ + ["\u378E", "\u378E"], /* CJK Ideograph Extension A */ + ["\u378F", "\u378F"], /* CJK Ideograph Extension A */ + ["\u3790", "\u3790"], /* CJK Ideograph Extension A */ + ["\u3791", "\u3791"], /* CJK Ideograph Extension A */ + ["\u3792", "\u3792"], /* CJK Ideograph Extension A */ + ["\u3793", "\u3793"], /* CJK Ideograph Extension A */ + ["\u3794", "\u3794"], /* CJK Ideograph Extension A */ + ["\u3795", "\u3795"], /* CJK Ideograph Extension A */ + ["\u3796", "\u3796"], /* CJK Ideograph Extension A */ + ["\u3797", "\u3797"], /* CJK Ideograph Extension A */ + ["\u3798", "\u3798"], /* CJK Ideograph Extension A */ + ["\u3799", "\u3799"], /* CJK Ideograph Extension A */ + ["\u379A", "\u379A"], /* CJK Ideograph Extension A */ + ["\u379B", "\u379B"], /* CJK Ideograph Extension A */ + ["\u379C", "\u379C"], /* CJK Ideograph Extension A */ + ["\u379D", "\u379D"], /* CJK Ideograph Extension A */ + ["\u379E", "\u379E"], /* CJK Ideograph Extension A */ + ["\u379F", "\u379F"], /* CJK Ideograph Extension A */ + ["\u37A0", "\u37A0"], /* CJK Ideograph Extension A */ + ["\u37A1", "\u37A1"], /* CJK Ideograph Extension A */ + ["\u37A2", "\u37A2"], /* CJK Ideograph Extension A */ + ["\u37A3", "\u37A3"], /* CJK Ideograph Extension A */ + ["\u37A4", "\u37A4"], /* CJK Ideograph Extension A */ + ["\u37A5", "\u37A5"], /* CJK Ideograph Extension A */ + ["\u37A6", "\u37A6"], /* CJK Ideograph Extension A */ + ["\u37A7", "\u37A7"], /* CJK Ideograph Extension A */ + ["\u37A8", "\u37A8"], /* CJK Ideograph Extension A */ + ["\u37A9", "\u37A9"], /* CJK Ideograph Extension A */ + ["\u37AA", "\u37AA"], /* CJK Ideograph Extension A */ + ["\u37AB", "\u37AB"], /* CJK Ideograph Extension A */ + ["\u37AC", "\u37AC"], /* CJK Ideograph Extension A */ + ["\u37AD", "\u37AD"], /* CJK Ideograph Extension A */ + ["\u37AE", "\u37AE"], /* CJK Ideograph Extension A */ + ["\u37AF", "\u37AF"], /* CJK Ideograph Extension A */ + ["\u37B0", "\u37B0"], /* CJK Ideograph Extension A */ + ["\u37B1", "\u37B1"], /* CJK Ideograph Extension A */ + ["\u37B2", "\u37B2"], /* CJK Ideograph Extension A */ + ["\u37B3", "\u37B3"], /* CJK Ideograph Extension A */ + ["\u37B4", "\u37B4"], /* CJK Ideograph Extension A */ + ["\u37B5", "\u37B5"], /* CJK Ideograph Extension A */ + ["\u37B6", "\u37B6"], /* CJK Ideograph Extension A */ + ["\u37B7", "\u37B7"], /* CJK Ideograph Extension A */ + ["\u37B8", "\u37B8"], /* CJK Ideograph Extension A */ + ["\u37B9", "\u37B9"], /* CJK Ideograph Extension A */ + ["\u37BA", "\u37BA"], /* CJK Ideograph Extension A */ + ["\u37BB", "\u37BB"], /* CJK Ideograph Extension A */ + ["\u37BC", "\u37BC"], /* CJK Ideograph Extension A */ + ["\u37BD", "\u37BD"], /* CJK Ideograph Extension A */ + ["\u37BE", "\u37BE"], /* CJK Ideograph Extension A */ + ["\u37BF", "\u37BF"], /* CJK Ideograph Extension A */ + ["\u37C0", "\u37C0"], /* CJK Ideograph Extension A */ + ["\u37C1", "\u37C1"], /* CJK Ideograph Extension A */ + ["\u37C2", "\u37C2"], /* CJK Ideograph Extension A */ + ["\u37C3", "\u37C3"], /* CJK Ideograph Extension A */ + ["\u37C4", "\u37C4"], /* CJK Ideograph Extension A */ + ["\u37C5", "\u37C5"], /* CJK Ideograph Extension A */ + ["\u37C6", "\u37C6"], /* CJK Ideograph Extension A */ + ["\u37C7", "\u37C7"], /* CJK Ideograph Extension A */ + ["\u37C8", "\u37C8"], /* CJK Ideograph Extension A */ + ["\u37C9", "\u37C9"], /* CJK Ideograph Extension A */ + ["\u37CA", "\u37CA"], /* CJK Ideograph Extension A */ + ["\u37CB", "\u37CB"], /* CJK Ideograph Extension A */ + ["\u37CC", "\u37CC"], /* CJK Ideograph Extension A */ + ["\u37CD", "\u37CD"], /* CJK Ideograph Extension A */ + ["\u37CE", "\u37CE"], /* CJK Ideograph Extension A */ + ["\u37CF", "\u37CF"], /* CJK Ideograph Extension A */ + ["\u37D0", "\u37D0"], /* CJK Ideograph Extension A */ + ["\u37D1", "\u37D1"], /* CJK Ideograph Extension A */ + ["\u37D2", "\u37D2"], /* CJK Ideograph Extension A */ + ["\u37D3", "\u37D3"], /* CJK Ideograph Extension A */ + ["\u37D4", "\u37D4"], /* CJK Ideograph Extension A */ + ["\u37D5", "\u37D5"], /* CJK Ideograph Extension A */ + ["\u37D6", "\u37D6"], /* CJK Ideograph Extension A */ + ["\u37D7", "\u37D7"], /* CJK Ideograph Extension A */ + ["\u37D8", "\u37D8"], /* CJK Ideograph Extension A */ + ["\u37D9", "\u37D9"], /* CJK Ideograph Extension A */ + ["\u37DA", "\u37DA"], /* CJK Ideograph Extension A */ + ["\u37DB", "\u37DB"], /* CJK Ideograph Extension A */ + ["\u37DC", "\u37DC"], /* CJK Ideograph Extension A */ + ["\u37DD", "\u37DD"], /* CJK Ideograph Extension A */ + ["\u37DE", "\u37DE"], /* CJK Ideograph Extension A */ + ["\u37DF", "\u37DF"], /* CJK Ideograph Extension A */ + ["\u37E0", "\u37E0"], /* CJK Ideograph Extension A */ + ["\u37E1", "\u37E1"], /* CJK Ideograph Extension A */ + ["\u37E2", "\u37E2"], /* CJK Ideograph Extension A */ + ["\u37E3", "\u37E3"], /* CJK Ideograph Extension A */ + ["\u37E4", "\u37E4"], /* CJK Ideograph Extension A */ + ["\u37E5", "\u37E5"], /* CJK Ideograph Extension A */ + ["\u37E6", "\u37E6"], /* CJK Ideograph Extension A */ + ["\u37E7", "\u37E7"], /* CJK Ideograph Extension A */ + ["\u37E8", "\u37E8"], /* CJK Ideograph Extension A */ + ["\u37E9", "\u37E9"], /* CJK Ideograph Extension A */ + ["\u37EA", "\u37EA"], /* CJK Ideograph Extension A */ + ["\u37EB", "\u37EB"], /* CJK Ideograph Extension A */ + ["\u37EC", "\u37EC"], /* CJK Ideograph Extension A */ + ["\u37ED", "\u37ED"], /* CJK Ideograph Extension A */ + ["\u37EE", "\u37EE"], /* CJK Ideograph Extension A */ + ["\u37EF", "\u37EF"], /* CJK Ideograph Extension A */ + ["\u37F0", "\u37F0"], /* CJK Ideograph Extension A */ + ["\u37F1", "\u37F1"], /* CJK Ideograph Extension A */ + ["\u37F2", "\u37F2"], /* CJK Ideograph Extension A */ + ["\u37F3", "\u37F3"], /* CJK Ideograph Extension A */ + ["\u37F4", "\u37F4"], /* CJK Ideograph Extension A */ + ["\u37F5", "\u37F5"], /* CJK Ideograph Extension A */ + ["\u37F6", "\u37F6"], /* CJK Ideograph Extension A */ + ["\u37F7", "\u37F7"], /* CJK Ideograph Extension A */ + ["\u37F8", "\u37F8"], /* CJK Ideograph Extension A */ + ["\u37F9", "\u37F9"], /* CJK Ideograph Extension A */ + ["\u37FA", "\u37FA"], /* CJK Ideograph Extension A */ + ["\u37FB", "\u37FB"], /* CJK Ideograph Extension A */ + ["\u37FC", "\u37FC"], /* CJK Ideograph Extension A */ + ["\u37FD", "\u37FD"], /* CJK Ideograph Extension A */ + ["\u37FE", "\u37FE"], /* CJK Ideograph Extension A */ + ["\u37FF", "\u37FF"], /* CJK Ideograph Extension A */ + ["\u3800", "\u3800"], /* CJK Ideograph Extension A */ + ["\u3801", "\u3801"], /* CJK Ideograph Extension A */ + ["\u3802", "\u3802"], /* CJK Ideograph Extension A */ + ["\u3803", "\u3803"], /* CJK Ideograph Extension A */ + ["\u3804", "\u3804"], /* CJK Ideograph Extension A */ + ["\u3805", "\u3805"], /* CJK Ideograph Extension A */ + ["\u3806", "\u3806"], /* CJK Ideograph Extension A */ + ["\u3807", "\u3807"], /* CJK Ideograph Extension A */ + ["\u3808", "\u3808"], /* CJK Ideograph Extension A */ + ["\u3809", "\u3809"], /* CJK Ideograph Extension A */ + ["\u380A", "\u380A"], /* CJK Ideograph Extension A */ + ["\u380B", "\u380B"], /* CJK Ideograph Extension A */ + ["\u380C", "\u380C"], /* CJK Ideograph Extension A */ + ["\u380D", "\u380D"], /* CJK Ideograph Extension A */ + ["\u380E", "\u380E"], /* CJK Ideograph Extension A */ + ["\u380F", "\u380F"], /* CJK Ideograph Extension A */ + ["\u3810", "\u3810"], /* CJK Ideograph Extension A */ + ["\u3811", "\u3811"], /* CJK Ideograph Extension A */ + ["\u3812", "\u3812"], /* CJK Ideograph Extension A */ + ["\u3813", "\u3813"], /* CJK Ideograph Extension A */ + ["\u3814", "\u3814"], /* CJK Ideograph Extension A */ + ["\u3815", "\u3815"], /* CJK Ideograph Extension A */ + ["\u3816", "\u3816"], /* CJK Ideograph Extension A */ + ["\u3817", "\u3817"], /* CJK Ideograph Extension A */ + ["\u3818", "\u3818"], /* CJK Ideograph Extension A */ + ["\u3819", "\u3819"], /* CJK Ideograph Extension A */ + ["\u381A", "\u381A"], /* CJK Ideograph Extension A */ + ["\u381B", "\u381B"], /* CJK Ideograph Extension A */ + ["\u381C", "\u381C"], /* CJK Ideograph Extension A */ + ["\u381D", "\u381D"], /* CJK Ideograph Extension A */ + ["\u381E", "\u381E"], /* CJK Ideograph Extension A */ + ["\u381F", "\u381F"], /* CJK Ideograph Extension A */ + ["\u3820", "\u3820"], /* CJK Ideograph Extension A */ + ["\u3821", "\u3821"], /* CJK Ideograph Extension A */ + ["\u3822", "\u3822"], /* CJK Ideograph Extension A */ + ["\u3823", "\u3823"], /* CJK Ideograph Extension A */ + ["\u3824", "\u3824"], /* CJK Ideograph Extension A */ + ["\u3825", "\u3825"], /* CJK Ideograph Extension A */ + ["\u3826", "\u3826"], /* CJK Ideograph Extension A */ + ["\u3827", "\u3827"], /* CJK Ideograph Extension A */ + ["\u3828", "\u3828"], /* CJK Ideograph Extension A */ + ["\u3829", "\u3829"], /* CJK Ideograph Extension A */ + ["\u382A", "\u382A"], /* CJK Ideograph Extension A */ + ["\u382B", "\u382B"], /* CJK Ideograph Extension A */ + ["\u382C", "\u382C"], /* CJK Ideograph Extension A */ + ["\u382D", "\u382D"], /* CJK Ideograph Extension A */ + ["\u382E", "\u382E"], /* CJK Ideograph Extension A */ + ["\u382F", "\u382F"], /* CJK Ideograph Extension A */ + ["\u3830", "\u3830"], /* CJK Ideograph Extension A */ + ["\u3831", "\u3831"], /* CJK Ideograph Extension A */ + ["\u3832", "\u3832"], /* CJK Ideograph Extension A */ + ["\u3833", "\u3833"], /* CJK Ideograph Extension A */ + ["\u3834", "\u3834"], /* CJK Ideograph Extension A */ + ["\u3835", "\u3835"], /* CJK Ideograph Extension A */ + ["\u3836", "\u3836"], /* CJK Ideograph Extension A */ + ["\u3837", "\u3837"], /* CJK Ideograph Extension A */ + ["\u3838", "\u3838"], /* CJK Ideograph Extension A */ + ["\u3839", "\u3839"], /* CJK Ideograph Extension A */ + ["\u383A", "\u383A"], /* CJK Ideograph Extension A */ + ["\u383B", "\u383B"], /* CJK Ideograph Extension A */ + ["\u383C", "\u383C"], /* CJK Ideograph Extension A */ + ["\u383D", "\u383D"], /* CJK Ideograph Extension A */ + ["\u383E", "\u383E"], /* CJK Ideograph Extension A */ + ["\u383F", "\u383F"], /* CJK Ideograph Extension A */ + ["\u3840", "\u3840"], /* CJK Ideograph Extension A */ + ["\u3841", "\u3841"], /* CJK Ideograph Extension A */ + ["\u3842", "\u3842"], /* CJK Ideograph Extension A */ + ["\u3843", "\u3843"], /* CJK Ideograph Extension A */ + ["\u3844", "\u3844"], /* CJK Ideograph Extension A */ + ["\u3845", "\u3845"], /* CJK Ideograph Extension A */ + ["\u3846", "\u3846"], /* CJK Ideograph Extension A */ + ["\u3847", "\u3847"], /* CJK Ideograph Extension A */ + ["\u3848", "\u3848"], /* CJK Ideograph Extension A */ + ["\u3849", "\u3849"], /* CJK Ideograph Extension A */ + ["\u384A", "\u384A"], /* CJK Ideograph Extension A */ + ["\u384B", "\u384B"], /* CJK Ideograph Extension A */ + ["\u384C", "\u384C"], /* CJK Ideograph Extension A */ + ["\u384D", "\u384D"], /* CJK Ideograph Extension A */ + ["\u384E", "\u384E"], /* CJK Ideograph Extension A */ + ["\u384F", "\u384F"], /* CJK Ideograph Extension A */ + ["\u3850", "\u3850"], /* CJK Ideograph Extension A */ + ["\u3851", "\u3851"], /* CJK Ideograph Extension A */ + ["\u3852", "\u3852"], /* CJK Ideograph Extension A */ + ["\u3853", "\u3853"], /* CJK Ideograph Extension A */ + ["\u3854", "\u3854"], /* CJK Ideograph Extension A */ + ["\u3855", "\u3855"], /* CJK Ideograph Extension A */ + ["\u3856", "\u3856"], /* CJK Ideograph Extension A */ + ["\u3857", "\u3857"], /* CJK Ideograph Extension A */ + ["\u3858", "\u3858"], /* CJK Ideograph Extension A */ + ["\u3859", "\u3859"], /* CJK Ideograph Extension A */ + ["\u385A", "\u385A"], /* CJK Ideograph Extension A */ + ["\u385B", "\u385B"], /* CJK Ideograph Extension A */ + ["\u385C", "\u385C"], /* CJK Ideograph Extension A */ + ["\u385D", "\u385D"], /* CJK Ideograph Extension A */ + ["\u385E", "\u385E"], /* CJK Ideograph Extension A */ + ["\u385F", "\u385F"], /* CJK Ideograph Extension A */ + ["\u3860", "\u3860"], /* CJK Ideograph Extension A */ + ["\u3861", "\u3861"], /* CJK Ideograph Extension A */ + ["\u3862", "\u3862"], /* CJK Ideograph Extension A */ + ["\u3863", "\u3863"], /* CJK Ideograph Extension A */ + ["\u3864", "\u3864"], /* CJK Ideograph Extension A */ + ["\u3865", "\u3865"], /* CJK Ideograph Extension A */ + ["\u3866", "\u3866"], /* CJK Ideograph Extension A */ + ["\u3867", "\u3867"], /* CJK Ideograph Extension A */ + ["\u3868", "\u3868"], /* CJK Ideograph Extension A */ + ["\u3869", "\u3869"], /* CJK Ideograph Extension A */ + ["\u386A", "\u386A"], /* CJK Ideograph Extension A */ + ["\u386B", "\u386B"], /* CJK Ideograph Extension A */ + ["\u386C", "\u386C"], /* CJK Ideograph Extension A */ + ["\u386D", "\u386D"], /* CJK Ideograph Extension A */ + ["\u386E", "\u386E"], /* CJK Ideograph Extension A */ + ["\u386F", "\u386F"], /* CJK Ideograph Extension A */ + ["\u3870", "\u3870"], /* CJK Ideograph Extension A */ + ["\u3871", "\u3871"], /* CJK Ideograph Extension A */ + ["\u3872", "\u3872"], /* CJK Ideograph Extension A */ + ["\u3873", "\u3873"], /* CJK Ideograph Extension A */ + ["\u3874", "\u3874"], /* CJK Ideograph Extension A */ + ["\u3875", "\u3875"], /* CJK Ideograph Extension A */ + ["\u3876", "\u3876"], /* CJK Ideograph Extension A */ + ["\u3877", "\u3877"], /* CJK Ideograph Extension A */ + ["\u3878", "\u3878"], /* CJK Ideograph Extension A */ + ["\u3879", "\u3879"], /* CJK Ideograph Extension A */ + ["\u387A", "\u387A"], /* CJK Ideograph Extension A */ + ["\u387B", "\u387B"], /* CJK Ideograph Extension A */ + ["\u387C", "\u387C"], /* CJK Ideograph Extension A */ + ["\u387D", "\u387D"], /* CJK Ideograph Extension A */ + ["\u387E", "\u387E"], /* CJK Ideograph Extension A */ + ["\u387F", "\u387F"], /* CJK Ideograph Extension A */ + ["\u3880", "\u3880"], /* CJK Ideograph Extension A */ + ["\u3881", "\u3881"], /* CJK Ideograph Extension A */ + ["\u3882", "\u3882"], /* CJK Ideograph Extension A */ + ["\u3883", "\u3883"], /* CJK Ideograph Extension A */ + ["\u3884", "\u3884"], /* CJK Ideograph Extension A */ + ["\u3885", "\u3885"], /* CJK Ideograph Extension A */ + ["\u3886", "\u3886"], /* CJK Ideograph Extension A */ + ["\u3887", "\u3887"], /* CJK Ideograph Extension A */ + ["\u3888", "\u3888"], /* CJK Ideograph Extension A */ + ["\u3889", "\u3889"], /* CJK Ideograph Extension A */ + ["\u388A", "\u388A"], /* CJK Ideograph Extension A */ + ["\u388B", "\u388B"], /* CJK Ideograph Extension A */ + ["\u388C", "\u388C"], /* CJK Ideograph Extension A */ + ["\u388D", "\u388D"], /* CJK Ideograph Extension A */ + ["\u388E", "\u388E"], /* CJK Ideograph Extension A */ + ["\u388F", "\u388F"], /* CJK Ideograph Extension A */ + ["\u3890", "\u3890"], /* CJK Ideograph Extension A */ + ["\u3891", "\u3891"], /* CJK Ideograph Extension A */ + ["\u3892", "\u3892"], /* CJK Ideograph Extension A */ + ["\u3893", "\u3893"], /* CJK Ideograph Extension A */ + ["\u3894", "\u3894"], /* CJK Ideograph Extension A */ + ["\u3895", "\u3895"], /* CJK Ideograph Extension A */ + ["\u3896", "\u3896"], /* CJK Ideograph Extension A */ + ["\u3897", "\u3897"], /* CJK Ideograph Extension A */ + ["\u3898", "\u3898"], /* CJK Ideograph Extension A */ + ["\u3899", "\u3899"], /* CJK Ideograph Extension A */ + ["\u389A", "\u389A"], /* CJK Ideograph Extension A */ + ["\u389B", "\u389B"], /* CJK Ideograph Extension A */ + ["\u389C", "\u389C"], /* CJK Ideograph Extension A */ + ["\u389D", "\u389D"], /* CJK Ideograph Extension A */ + ["\u389E", "\u389E"], /* CJK Ideograph Extension A */ + ["\u389F", "\u389F"], /* CJK Ideograph Extension A */ + ["\u38A0", "\u38A0"], /* CJK Ideograph Extension A */ + ["\u38A1", "\u38A1"], /* CJK Ideograph Extension A */ + ["\u38A2", "\u38A2"], /* CJK Ideograph Extension A */ + ["\u38A3", "\u38A3"], /* CJK Ideograph Extension A */ + ["\u38A4", "\u38A4"], /* CJK Ideograph Extension A */ + ["\u38A5", "\u38A5"], /* CJK Ideograph Extension A */ + ["\u38A6", "\u38A6"], /* CJK Ideograph Extension A */ + ["\u38A7", "\u38A7"], /* CJK Ideograph Extension A */ + ["\u38A8", "\u38A8"], /* CJK Ideograph Extension A */ + ["\u38A9", "\u38A9"], /* CJK Ideograph Extension A */ + ["\u38AA", "\u38AA"], /* CJK Ideograph Extension A */ + ["\u38AB", "\u38AB"], /* CJK Ideograph Extension A */ + ["\u38AC", "\u38AC"], /* CJK Ideograph Extension A */ + ["\u38AD", "\u38AD"], /* CJK Ideograph Extension A */ + ["\u38AE", "\u38AE"], /* CJK Ideograph Extension A */ + ["\u38AF", "\u38AF"], /* CJK Ideograph Extension A */ + ["\u38B0", "\u38B0"], /* CJK Ideograph Extension A */ + ["\u38B1", "\u38B1"], /* CJK Ideograph Extension A */ + ["\u38B2", "\u38B2"], /* CJK Ideograph Extension A */ + ["\u38B3", "\u38B3"], /* CJK Ideograph Extension A */ + ["\u38B4", "\u38B4"], /* CJK Ideograph Extension A */ + ["\u38B5", "\u38B5"], /* CJK Ideograph Extension A */ + ["\u38B6", "\u38B6"], /* CJK Ideograph Extension A */ + ["\u38B7", "\u38B7"], /* CJK Ideograph Extension A */ + ["\u38B8", "\u38B8"], /* CJK Ideograph Extension A */ + ["\u38B9", "\u38B9"], /* CJK Ideograph Extension A */ + ["\u38BA", "\u38BA"], /* CJK Ideograph Extension A */ + ["\u38BB", "\u38BB"], /* CJK Ideograph Extension A */ + ["\u38BC", "\u38BC"], /* CJK Ideograph Extension A */ + ["\u38BD", "\u38BD"], /* CJK Ideograph Extension A */ + ["\u38BE", "\u38BE"], /* CJK Ideograph Extension A */ + ["\u38BF", "\u38BF"], /* CJK Ideograph Extension A */ + ["\u38C0", "\u38C0"], /* CJK Ideograph Extension A */ + ["\u38C1", "\u38C1"], /* CJK Ideograph Extension A */ + ["\u38C2", "\u38C2"], /* CJK Ideograph Extension A */ + ["\u38C3", "\u38C3"], /* CJK Ideograph Extension A */ + ["\u38C4", "\u38C4"], /* CJK Ideograph Extension A */ + ["\u38C5", "\u38C5"], /* CJK Ideograph Extension A */ + ["\u38C6", "\u38C6"], /* CJK Ideograph Extension A */ + ["\u38C7", "\u38C7"], /* CJK Ideograph Extension A */ + ["\u38C8", "\u38C8"], /* CJK Ideograph Extension A */ + ["\u38C9", "\u38C9"], /* CJK Ideograph Extension A */ + ["\u38CA", "\u38CA"], /* CJK Ideograph Extension A */ + ["\u38CB", "\u38CB"], /* CJK Ideograph Extension A */ + ["\u38CC", "\u38CC"], /* CJK Ideograph Extension A */ + ["\u38CD", "\u38CD"], /* CJK Ideograph Extension A */ + ["\u38CE", "\u38CE"], /* CJK Ideograph Extension A */ + ["\u38CF", "\u38CF"], /* CJK Ideograph Extension A */ + ["\u38D0", "\u38D0"], /* CJK Ideograph Extension A */ + ["\u38D1", "\u38D1"], /* CJK Ideograph Extension A */ + ["\u38D2", "\u38D2"], /* CJK Ideograph Extension A */ + ["\u38D3", "\u38D3"], /* CJK Ideograph Extension A */ + ["\u38D4", "\u38D4"], /* CJK Ideograph Extension A */ + ["\u38D5", "\u38D5"], /* CJK Ideograph Extension A */ + ["\u38D6", "\u38D6"], /* CJK Ideograph Extension A */ + ["\u38D7", "\u38D7"], /* CJK Ideograph Extension A */ + ["\u38D8", "\u38D8"], /* CJK Ideograph Extension A */ + ["\u38D9", "\u38D9"], /* CJK Ideograph Extension A */ + ["\u38DA", "\u38DA"], /* CJK Ideograph Extension A */ + ["\u38DB", "\u38DB"], /* CJK Ideograph Extension A */ + ["\u38DC", "\u38DC"], /* CJK Ideograph Extension A */ + ["\u38DD", "\u38DD"], /* CJK Ideograph Extension A */ + ["\u38DE", "\u38DE"], /* CJK Ideograph Extension A */ + ["\u38DF", "\u38DF"], /* CJK Ideograph Extension A */ + ["\u38E0", "\u38E0"], /* CJK Ideograph Extension A */ + ["\u38E1", "\u38E1"], /* CJK Ideograph Extension A */ + ["\u38E2", "\u38E2"], /* CJK Ideograph Extension A */ + ["\u38E3", "\u38E3"], /* CJK Ideograph Extension A */ + ["\u38E4", "\u38E4"], /* CJK Ideograph Extension A */ + ["\u38E5", "\u38E5"], /* CJK Ideograph Extension A */ + ["\u38E6", "\u38E6"], /* CJK Ideograph Extension A */ + ["\u38E7", "\u38E7"], /* CJK Ideograph Extension A */ + ["\u38E8", "\u38E8"], /* CJK Ideograph Extension A */ + ["\u38E9", "\u38E9"], /* CJK Ideograph Extension A */ + ["\u38EA", "\u38EA"], /* CJK Ideograph Extension A */ + ["\u38EB", "\u38EB"], /* CJK Ideograph Extension A */ + ["\u38EC", "\u38EC"], /* CJK Ideograph Extension A */ + ["\u38ED", "\u38ED"], /* CJK Ideograph Extension A */ + ["\u38EE", "\u38EE"], /* CJK Ideograph Extension A */ + ["\u38EF", "\u38EF"], /* CJK Ideograph Extension A */ + ["\u38F0", "\u38F0"], /* CJK Ideograph Extension A */ + ["\u38F1", "\u38F1"], /* CJK Ideograph Extension A */ + ["\u38F2", "\u38F2"], /* CJK Ideograph Extension A */ + ["\u38F3", "\u38F3"], /* CJK Ideograph Extension A */ + ["\u38F4", "\u38F4"], /* CJK Ideograph Extension A */ + ["\u38F5", "\u38F5"], /* CJK Ideograph Extension A */ + ["\u38F6", "\u38F6"], /* CJK Ideograph Extension A */ + ["\u38F7", "\u38F7"], /* CJK Ideograph Extension A */ + ["\u38F8", "\u38F8"], /* CJK Ideograph Extension A */ + ["\u38F9", "\u38F9"], /* CJK Ideograph Extension A */ + ["\u38FA", "\u38FA"], /* CJK Ideograph Extension A */ + ["\u38FB", "\u38FB"], /* CJK Ideograph Extension A */ + ["\u38FC", "\u38FC"], /* CJK Ideograph Extension A */ + ["\u38FD", "\u38FD"], /* CJK Ideograph Extension A */ + ["\u38FE", "\u38FE"], /* CJK Ideograph Extension A */ + ["\u38FF", "\u38FF"], /* CJK Ideograph Extension A */ + ["\u3900", "\u3900"], /* CJK Ideograph Extension A */ + ["\u3901", "\u3901"], /* CJK Ideograph Extension A */ + ["\u3902", "\u3902"], /* CJK Ideograph Extension A */ + ["\u3903", "\u3903"], /* CJK Ideograph Extension A */ + ["\u3904", "\u3904"], /* CJK Ideograph Extension A */ + ["\u3905", "\u3905"], /* CJK Ideograph Extension A */ + ["\u3906", "\u3906"], /* CJK Ideograph Extension A */ + ["\u3907", "\u3907"], /* CJK Ideograph Extension A */ + ["\u3908", "\u3908"], /* CJK Ideograph Extension A */ + ["\u3909", "\u3909"], /* CJK Ideograph Extension A */ + ["\u390A", "\u390A"], /* CJK Ideograph Extension A */ + ["\u390B", "\u390B"], /* CJK Ideograph Extension A */ + ["\u390C", "\u390C"], /* CJK Ideograph Extension A */ + ["\u390D", "\u390D"], /* CJK Ideograph Extension A */ + ["\u390E", "\u390E"], /* CJK Ideograph Extension A */ + ["\u390F", "\u390F"], /* CJK Ideograph Extension A */ + ["\u3910", "\u3910"], /* CJK Ideograph Extension A */ + ["\u3911", "\u3911"], /* CJK Ideograph Extension A */ + ["\u3912", "\u3912"], /* CJK Ideograph Extension A */ + ["\u3913", "\u3913"], /* CJK Ideograph Extension A */ + ["\u3914", "\u3914"], /* CJK Ideograph Extension A */ + ["\u3915", "\u3915"], /* CJK Ideograph Extension A */ + ["\u3916", "\u3916"], /* CJK Ideograph Extension A */ + ["\u3917", "\u3917"], /* CJK Ideograph Extension A */ + ["\u3918", "\u3918"], /* CJK Ideograph Extension A */ + ["\u3919", "\u3919"], /* CJK Ideograph Extension A */ + ["\u391A", "\u391A"], /* CJK Ideograph Extension A */ + ["\u391B", "\u391B"], /* CJK Ideograph Extension A */ + ["\u391C", "\u391C"], /* CJK Ideograph Extension A */ + ["\u391D", "\u391D"], /* CJK Ideograph Extension A */ + ["\u391E", "\u391E"], /* CJK Ideograph Extension A */ + ["\u391F", "\u391F"], /* CJK Ideograph Extension A */ + ["\u3920", "\u3920"], /* CJK Ideograph Extension A */ + ["\u3921", "\u3921"], /* CJK Ideograph Extension A */ + ["\u3922", "\u3922"], /* CJK Ideograph Extension A */ + ["\u3923", "\u3923"], /* CJK Ideograph Extension A */ + ["\u3924", "\u3924"], /* CJK Ideograph Extension A */ + ["\u3925", "\u3925"], /* CJK Ideograph Extension A */ + ["\u3926", "\u3926"], /* CJK Ideograph Extension A */ + ["\u3927", "\u3927"], /* CJK Ideograph Extension A */ + ["\u3928", "\u3928"], /* CJK Ideograph Extension A */ + ["\u3929", "\u3929"], /* CJK Ideograph Extension A */ + ["\u392A", "\u392A"], /* CJK Ideograph Extension A */ + ["\u392B", "\u392B"], /* CJK Ideograph Extension A */ + ["\u392C", "\u392C"], /* CJK Ideograph Extension A */ + ["\u392D", "\u392D"], /* CJK Ideograph Extension A */ + ["\u392E", "\u392E"], /* CJK Ideograph Extension A */ + ["\u392F", "\u392F"], /* CJK Ideograph Extension A */ + ["\u3930", "\u3930"], /* CJK Ideograph Extension A */ + ["\u3931", "\u3931"], /* CJK Ideograph Extension A */ + ["\u3932", "\u3932"], /* CJK Ideograph Extension A */ + ["\u3933", "\u3933"], /* CJK Ideograph Extension A */ + ["\u3934", "\u3934"], /* CJK Ideograph Extension A */ + ["\u3935", "\u3935"], /* CJK Ideograph Extension A */ + ["\u3936", "\u3936"], /* CJK Ideograph Extension A */ + ["\u3937", "\u3937"], /* CJK Ideograph Extension A */ + ["\u3938", "\u3938"], /* CJK Ideograph Extension A */ + ["\u3939", "\u3939"], /* CJK Ideograph Extension A */ + ["\u393A", "\u393A"], /* CJK Ideograph Extension A */ + ["\u393B", "\u393B"], /* CJK Ideograph Extension A */ + ["\u393C", "\u393C"], /* CJK Ideograph Extension A */ + ["\u393D", "\u393D"], /* CJK Ideograph Extension A */ + ["\u393E", "\u393E"], /* CJK Ideograph Extension A */ + ["\u393F", "\u393F"], /* CJK Ideograph Extension A */ + ["\u3940", "\u3940"], /* CJK Ideograph Extension A */ + ["\u3941", "\u3941"], /* CJK Ideograph Extension A */ + ["\u3942", "\u3942"], /* CJK Ideograph Extension A */ + ["\u3943", "\u3943"], /* CJK Ideograph Extension A */ + ["\u3944", "\u3944"], /* CJK Ideograph Extension A */ + ["\u3945", "\u3945"], /* CJK Ideograph Extension A */ + ["\u3946", "\u3946"], /* CJK Ideograph Extension A */ + ["\u3947", "\u3947"], /* CJK Ideograph Extension A */ + ["\u3948", "\u3948"], /* CJK Ideograph Extension A */ + ["\u3949", "\u3949"], /* CJK Ideograph Extension A */ + ["\u394A", "\u394A"], /* CJK Ideograph Extension A */ + ["\u394B", "\u394B"], /* CJK Ideograph Extension A */ + ["\u394C", "\u394C"], /* CJK Ideograph Extension A */ + ["\u394D", "\u394D"], /* CJK Ideograph Extension A */ + ["\u394E", "\u394E"], /* CJK Ideograph Extension A */ + ["\u394F", "\u394F"], /* CJK Ideograph Extension A */ + ["\u3950", "\u3950"], /* CJK Ideograph Extension A */ + ["\u3951", "\u3951"], /* CJK Ideograph Extension A */ + ["\u3952", "\u3952"], /* CJK Ideograph Extension A */ + ["\u3953", "\u3953"], /* CJK Ideograph Extension A */ + ["\u3954", "\u3954"], /* CJK Ideograph Extension A */ + ["\u3955", "\u3955"], /* CJK Ideograph Extension A */ + ["\u3956", "\u3956"], /* CJK Ideograph Extension A */ + ["\u3957", "\u3957"], /* CJK Ideograph Extension A */ + ["\u3958", "\u3958"], /* CJK Ideograph Extension A */ + ["\u3959", "\u3959"], /* CJK Ideograph Extension A */ + ["\u395A", "\u395A"], /* CJK Ideograph Extension A */ + ["\u395B", "\u395B"], /* CJK Ideograph Extension A */ + ["\u395C", "\u395C"], /* CJK Ideograph Extension A */ + ["\u395D", "\u395D"], /* CJK Ideograph Extension A */ + ["\u395E", "\u395E"], /* CJK Ideograph Extension A */ + ["\u395F", "\u395F"], /* CJK Ideograph Extension A */ + ["\u3960", "\u3960"], /* CJK Ideograph Extension A */ + ["\u3961", "\u3961"], /* CJK Ideograph Extension A */ + ["\u3962", "\u3962"], /* CJK Ideograph Extension A */ + ["\u3963", "\u3963"], /* CJK Ideograph Extension A */ + ["\u3964", "\u3964"], /* CJK Ideograph Extension A */ + ["\u3965", "\u3965"], /* CJK Ideograph Extension A */ + ["\u3966", "\u3966"], /* CJK Ideograph Extension A */ + ["\u3967", "\u3967"], /* CJK Ideograph Extension A */ + ["\u3968", "\u3968"], /* CJK Ideograph Extension A */ + ["\u3969", "\u3969"], /* CJK Ideograph Extension A */ + ["\u396A", "\u396A"], /* CJK Ideograph Extension A */ + ["\u396B", "\u396B"], /* CJK Ideograph Extension A */ + ["\u396C", "\u396C"], /* CJK Ideograph Extension A */ + ["\u396D", "\u396D"], /* CJK Ideograph Extension A */ + ["\u396E", "\u396E"], /* CJK Ideograph Extension A */ + ["\u396F", "\u396F"], /* CJK Ideograph Extension A */ + ["\u3970", "\u3970"], /* CJK Ideograph Extension A */ + ["\u3971", "\u3971"], /* CJK Ideograph Extension A */ + ["\u3972", "\u3972"], /* CJK Ideograph Extension A */ + ["\u3973", "\u3973"], /* CJK Ideograph Extension A */ + ["\u3974", "\u3974"], /* CJK Ideograph Extension A */ + ["\u3975", "\u3975"], /* CJK Ideograph Extension A */ + ["\u3976", "\u3976"], /* CJK Ideograph Extension A */ + ["\u3977", "\u3977"], /* CJK Ideograph Extension A */ + ["\u3978", "\u3978"], /* CJK Ideograph Extension A */ + ["\u3979", "\u3979"], /* CJK Ideograph Extension A */ + ["\u397A", "\u397A"], /* CJK Ideograph Extension A */ + ["\u397B", "\u397B"], /* CJK Ideograph Extension A */ + ["\u397C", "\u397C"], /* CJK Ideograph Extension A */ + ["\u397D", "\u397D"], /* CJK Ideograph Extension A */ + ["\u397E", "\u397E"], /* CJK Ideograph Extension A */ + ["\u397F", "\u397F"], /* CJK Ideograph Extension A */ + ["\u3980", "\u3980"], /* CJK Ideograph Extension A */ + ["\u3981", "\u3981"], /* CJK Ideograph Extension A */ + ["\u3982", "\u3982"], /* CJK Ideograph Extension A */ + ["\u3983", "\u3983"], /* CJK Ideograph Extension A */ + ["\u3984", "\u3984"], /* CJK Ideograph Extension A */ + ["\u3985", "\u3985"], /* CJK Ideograph Extension A */ + ["\u3986", "\u3986"], /* CJK Ideograph Extension A */ + ["\u3987", "\u3987"], /* CJK Ideograph Extension A */ + ["\u3988", "\u3988"], /* CJK Ideograph Extension A */ + ["\u3989", "\u3989"], /* CJK Ideograph Extension A */ + ["\u398A", "\u398A"], /* CJK Ideograph Extension A */ + ["\u398B", "\u398B"], /* CJK Ideograph Extension A */ + ["\u398C", "\u398C"], /* CJK Ideograph Extension A */ + ["\u398D", "\u398D"], /* CJK Ideograph Extension A */ + ["\u398E", "\u398E"], /* CJK Ideograph Extension A */ + ["\u398F", "\u398F"], /* CJK Ideograph Extension A */ + ["\u3990", "\u3990"], /* CJK Ideograph Extension A */ + ["\u3991", "\u3991"], /* CJK Ideograph Extension A */ + ["\u3992", "\u3992"], /* CJK Ideograph Extension A */ + ["\u3993", "\u3993"], /* CJK Ideograph Extension A */ + ["\u3994", "\u3994"], /* CJK Ideograph Extension A */ + ["\u3995", "\u3995"], /* CJK Ideograph Extension A */ + ["\u3996", "\u3996"], /* CJK Ideograph Extension A */ + ["\u3997", "\u3997"], /* CJK Ideograph Extension A */ + ["\u3998", "\u3998"], /* CJK Ideograph Extension A */ + ["\u3999", "\u3999"], /* CJK Ideograph Extension A */ + ["\u399A", "\u399A"], /* CJK Ideograph Extension A */ + ["\u399B", "\u399B"], /* CJK Ideograph Extension A */ + ["\u399C", "\u399C"], /* CJK Ideograph Extension A */ + ["\u399D", "\u399D"], /* CJK Ideograph Extension A */ + ["\u399E", "\u399E"], /* CJK Ideograph Extension A */ + ["\u399F", "\u399F"], /* CJK Ideograph Extension A */ + ["\u39A0", "\u39A0"], /* CJK Ideograph Extension A */ + ["\u39A1", "\u39A1"], /* CJK Ideograph Extension A */ + ["\u39A2", "\u39A2"], /* CJK Ideograph Extension A */ + ["\u39A3", "\u39A3"], /* CJK Ideograph Extension A */ + ["\u39A4", "\u39A4"], /* CJK Ideograph Extension A */ + ["\u39A5", "\u39A5"], /* CJK Ideograph Extension A */ + ["\u39A6", "\u39A6"], /* CJK Ideograph Extension A */ + ["\u39A7", "\u39A7"], /* CJK Ideograph Extension A */ + ["\u39A8", "\u39A8"], /* CJK Ideograph Extension A */ + ["\u39A9", "\u39A9"], /* CJK Ideograph Extension A */ + ["\u39AA", "\u39AA"], /* CJK Ideograph Extension A */ + ["\u39AB", "\u39AB"], /* CJK Ideograph Extension A */ + ["\u39AC", "\u39AC"], /* CJK Ideograph Extension A */ + ["\u39AD", "\u39AD"], /* CJK Ideograph Extension A */ + ["\u39AE", "\u39AE"], /* CJK Ideograph Extension A */ + ["\u39AF", "\u39AF"], /* CJK Ideograph Extension A */ + ["\u39B0", "\u39B0"], /* CJK Ideograph Extension A */ + ["\u39B1", "\u39B1"], /* CJK Ideograph Extension A */ + ["\u39B2", "\u39B2"], /* CJK Ideograph Extension A */ + ["\u39B3", "\u39B3"], /* CJK Ideograph Extension A */ + ["\u39B4", "\u39B4"], /* CJK Ideograph Extension A */ + ["\u39B5", "\u39B5"], /* CJK Ideograph Extension A */ + ["\u39B6", "\u39B6"], /* CJK Ideograph Extension A */ + ["\u39B7", "\u39B7"], /* CJK Ideograph Extension A */ + ["\u39B8", "\u39B8"], /* CJK Ideograph Extension A */ + ["\u39B9", "\u39B9"], /* CJK Ideograph Extension A */ + ["\u39BA", "\u39BA"], /* CJK Ideograph Extension A */ + ["\u39BB", "\u39BB"], /* CJK Ideograph Extension A */ + ["\u39BC", "\u39BC"], /* CJK Ideograph Extension A */ + ["\u39BD", "\u39BD"], /* CJK Ideograph Extension A */ + ["\u39BE", "\u39BE"], /* CJK Ideograph Extension A */ + ["\u39BF", "\u39BF"], /* CJK Ideograph Extension A */ + ["\u39C0", "\u39C0"], /* CJK Ideograph Extension A */ + ["\u39C1", "\u39C1"], /* CJK Ideograph Extension A */ + ["\u39C2", "\u39C2"], /* CJK Ideograph Extension A */ + ["\u39C3", "\u39C3"], /* CJK Ideograph Extension A */ + ["\u39C4", "\u39C4"], /* CJK Ideograph Extension A */ + ["\u39C5", "\u39C5"], /* CJK Ideograph Extension A */ + ["\u39C6", "\u39C6"], /* CJK Ideograph Extension A */ + ["\u39C7", "\u39C7"], /* CJK Ideograph Extension A */ + ["\u39C8", "\u39C8"], /* CJK Ideograph Extension A */ + ["\u39C9", "\u39C9"], /* CJK Ideograph Extension A */ + ["\u39CA", "\u39CA"], /* CJK Ideograph Extension A */ + ["\u39CB", "\u39CB"], /* CJK Ideograph Extension A */ + ["\u39CC", "\u39CC"], /* CJK Ideograph Extension A */ + ["\u39CD", "\u39CD"], /* CJK Ideograph Extension A */ + ["\u39CE", "\u39CE"], /* CJK Ideograph Extension A */ + ["\u39CF", "\u39CF"], /* CJK Ideograph Extension A */ + ["\u39D0", "\u39D0"], /* CJK Ideograph Extension A */ + ["\u39D1", "\u39D1"], /* CJK Ideograph Extension A */ + ["\u39D2", "\u39D2"], /* CJK Ideograph Extension A */ + ["\u39D3", "\u39D3"], /* CJK Ideograph Extension A */ + ["\u39D4", "\u39D4"], /* CJK Ideograph Extension A */ + ["\u39D5", "\u39D5"], /* CJK Ideograph Extension A */ + ["\u39D6", "\u39D6"], /* CJK Ideograph Extension A */ + ["\u39D7", "\u39D7"], /* CJK Ideograph Extension A */ + ["\u39D8", "\u39D8"], /* CJK Ideograph Extension A */ + ["\u39D9", "\u39D9"], /* CJK Ideograph Extension A */ + ["\u39DA", "\u39DA"], /* CJK Ideograph Extension A */ + ["\u39DB", "\u39DB"], /* CJK Ideograph Extension A */ + ["\u39DC", "\u39DC"], /* CJK Ideograph Extension A */ + ["\u39DD", "\u39DD"], /* CJK Ideograph Extension A */ + ["\u39DE", "\u39DE"], /* CJK Ideograph Extension A */ + ["\u39DF", "\u39DF"], /* CJK Ideograph Extension A */ + ["\u39E0", "\u39E0"], /* CJK Ideograph Extension A */ + ["\u39E1", "\u39E1"], /* CJK Ideograph Extension A */ + ["\u39E2", "\u39E2"], /* CJK Ideograph Extension A */ + ["\u39E3", "\u39E3"], /* CJK Ideograph Extension A */ + ["\u39E4", "\u39E4"], /* CJK Ideograph Extension A */ + ["\u39E5", "\u39E5"], /* CJK Ideograph Extension A */ + ["\u39E6", "\u39E6"], /* CJK Ideograph Extension A */ + ["\u39E7", "\u39E7"], /* CJK Ideograph Extension A */ + ["\u39E8", "\u39E8"], /* CJK Ideograph Extension A */ + ["\u39E9", "\u39E9"], /* CJK Ideograph Extension A */ + ["\u39EA", "\u39EA"], /* CJK Ideograph Extension A */ + ["\u39EB", "\u39EB"], /* CJK Ideograph Extension A */ + ["\u39EC", "\u39EC"], /* CJK Ideograph Extension A */ + ["\u39ED", "\u39ED"], /* CJK Ideograph Extension A */ + ["\u39EE", "\u39EE"], /* CJK Ideograph Extension A */ + ["\u39EF", "\u39EF"], /* CJK Ideograph Extension A */ + ["\u39F0", "\u39F0"], /* CJK Ideograph Extension A */ + ["\u39F1", "\u39F1"], /* CJK Ideograph Extension A */ + ["\u39F2", "\u39F2"], /* CJK Ideograph Extension A */ + ["\u39F3", "\u39F3"], /* CJK Ideograph Extension A */ + ["\u39F4", "\u39F4"], /* CJK Ideograph Extension A */ + ["\u39F5", "\u39F5"], /* CJK Ideograph Extension A */ + ["\u39F6", "\u39F6"], /* CJK Ideograph Extension A */ + ["\u39F7", "\u39F7"], /* CJK Ideograph Extension A */ + ["\u39F8", "\u39F8"], /* CJK Ideograph Extension A */ + ["\u39F9", "\u39F9"], /* CJK Ideograph Extension A */ + ["\u39FA", "\u39FA"], /* CJK Ideograph Extension A */ + ["\u39FB", "\u39FB"], /* CJK Ideograph Extension A */ + ["\u39FC", "\u39FC"], /* CJK Ideograph Extension A */ + ["\u39FD", "\u39FD"], /* CJK Ideograph Extension A */ + ["\u39FE", "\u39FE"], /* CJK Ideograph Extension A */ + ["\u39FF", "\u39FF"], /* CJK Ideograph Extension A */ + ["\u3A00", "\u3A00"], /* CJK Ideograph Extension A */ + ["\u3A01", "\u3A01"], /* CJK Ideograph Extension A */ + ["\u3A02", "\u3A02"], /* CJK Ideograph Extension A */ + ["\u3A03", "\u3A03"], /* CJK Ideograph Extension A */ + ["\u3A04", "\u3A04"], /* CJK Ideograph Extension A */ + ["\u3A05", "\u3A05"], /* CJK Ideograph Extension A */ + ["\u3A06", "\u3A06"], /* CJK Ideograph Extension A */ + ["\u3A07", "\u3A07"], /* CJK Ideograph Extension A */ + ["\u3A08", "\u3A08"], /* CJK Ideograph Extension A */ + ["\u3A09", "\u3A09"], /* CJK Ideograph Extension A */ + ["\u3A0A", "\u3A0A"], /* CJK Ideograph Extension A */ + ["\u3A0B", "\u3A0B"], /* CJK Ideograph Extension A */ + ["\u3A0C", "\u3A0C"], /* CJK Ideograph Extension A */ + ["\u3A0D", "\u3A0D"], /* CJK Ideograph Extension A */ + ["\u3A0E", "\u3A0E"], /* CJK Ideograph Extension A */ + ["\u3A0F", "\u3A0F"], /* CJK Ideograph Extension A */ + ["\u3A10", "\u3A10"], /* CJK Ideograph Extension A */ + ["\u3A11", "\u3A11"], /* CJK Ideograph Extension A */ + ["\u3A12", "\u3A12"], /* CJK Ideograph Extension A */ + ["\u3A13", "\u3A13"], /* CJK Ideograph Extension A */ + ["\u3A14", "\u3A14"], /* CJK Ideograph Extension A */ + ["\u3A15", "\u3A15"], /* CJK Ideograph Extension A */ + ["\u3A16", "\u3A16"], /* CJK Ideograph Extension A */ + ["\u3A17", "\u3A17"], /* CJK Ideograph Extension A */ + ["\u3A18", "\u3A18"], /* CJK Ideograph Extension A */ + ["\u3A19", "\u3A19"], /* CJK Ideograph Extension A */ + ["\u3A1A", "\u3A1A"], /* CJK Ideograph Extension A */ + ["\u3A1B", "\u3A1B"], /* CJK Ideograph Extension A */ + ["\u3A1C", "\u3A1C"], /* CJK Ideograph Extension A */ + ["\u3A1D", "\u3A1D"], /* CJK Ideograph Extension A */ + ["\u3A1E", "\u3A1E"], /* CJK Ideograph Extension A */ + ["\u3A1F", "\u3A1F"], /* CJK Ideograph Extension A */ + ["\u3A20", "\u3A20"], /* CJK Ideograph Extension A */ + ["\u3A21", "\u3A21"], /* CJK Ideograph Extension A */ + ["\u3A22", "\u3A22"], /* CJK Ideograph Extension A */ + ["\u3A23", "\u3A23"], /* CJK Ideograph Extension A */ + ["\u3A24", "\u3A24"], /* CJK Ideograph Extension A */ + ["\u3A25", "\u3A25"], /* CJK Ideograph Extension A */ + ["\u3A26", "\u3A26"], /* CJK Ideograph Extension A */ + ["\u3A27", "\u3A27"], /* CJK Ideograph Extension A */ + ["\u3A28", "\u3A28"], /* CJK Ideograph Extension A */ + ["\u3A29", "\u3A29"], /* CJK Ideograph Extension A */ + ["\u3A2A", "\u3A2A"], /* CJK Ideograph Extension A */ + ["\u3A2B", "\u3A2B"], /* CJK Ideograph Extension A */ + ["\u3A2C", "\u3A2C"], /* CJK Ideograph Extension A */ + ["\u3A2D", "\u3A2D"], /* CJK Ideograph Extension A */ + ["\u3A2E", "\u3A2E"], /* CJK Ideograph Extension A */ + ["\u3A2F", "\u3A2F"], /* CJK Ideograph Extension A */ + ["\u3A30", "\u3A30"], /* CJK Ideograph Extension A */ + ["\u3A31", "\u3A31"], /* CJK Ideograph Extension A */ + ["\u3A32", "\u3A32"], /* CJK Ideograph Extension A */ + ["\u3A33", "\u3A33"], /* CJK Ideograph Extension A */ + ["\u3A34", "\u3A34"], /* CJK Ideograph Extension A */ + ["\u3A35", "\u3A35"], /* CJK Ideograph Extension A */ + ["\u3A36", "\u3A36"], /* CJK Ideograph Extension A */ + ["\u3A37", "\u3A37"], /* CJK Ideograph Extension A */ + ["\u3A38", "\u3A38"], /* CJK Ideograph Extension A */ + ["\u3A39", "\u3A39"], /* CJK Ideograph Extension A */ + ["\u3A3A", "\u3A3A"], /* CJK Ideograph Extension A */ + ["\u3A3B", "\u3A3B"], /* CJK Ideograph Extension A */ + ["\u3A3C", "\u3A3C"], /* CJK Ideograph Extension A */ + ["\u3A3D", "\u3A3D"], /* CJK Ideograph Extension A */ + ["\u3A3E", "\u3A3E"], /* CJK Ideograph Extension A */ + ["\u3A3F", "\u3A3F"], /* CJK Ideograph Extension A */ + ["\u3A40", "\u3A40"], /* CJK Ideograph Extension A */ + ["\u3A41", "\u3A41"], /* CJK Ideograph Extension A */ + ["\u3A42", "\u3A42"], /* CJK Ideograph Extension A */ + ["\u3A43", "\u3A43"], /* CJK Ideograph Extension A */ + ["\u3A44", "\u3A44"], /* CJK Ideograph Extension A */ + ["\u3A45", "\u3A45"], /* CJK Ideograph Extension A */ + ["\u3A46", "\u3A46"], /* CJK Ideograph Extension A */ + ["\u3A47", "\u3A47"], /* CJK Ideograph Extension A */ + ["\u3A48", "\u3A48"], /* CJK Ideograph Extension A */ + ["\u3A49", "\u3A49"], /* CJK Ideograph Extension A */ + ["\u3A4A", "\u3A4A"], /* CJK Ideograph Extension A */ + ["\u3A4B", "\u3A4B"], /* CJK Ideograph Extension A */ + ["\u3A4C", "\u3A4C"], /* CJK Ideograph Extension A */ + ["\u3A4D", "\u3A4D"], /* CJK Ideograph Extension A */ + ["\u3A4E", "\u3A4E"], /* CJK Ideograph Extension A */ + ["\u3A4F", "\u3A4F"], /* CJK Ideograph Extension A */ + ["\u3A50", "\u3A50"], /* CJK Ideograph Extension A */ + ["\u3A51", "\u3A51"], /* CJK Ideograph Extension A */ + ["\u3A52", "\u3A52"], /* CJK Ideograph Extension A */ + ["\u3A53", "\u3A53"], /* CJK Ideograph Extension A */ + ["\u3A54", "\u3A54"], /* CJK Ideograph Extension A */ + ["\u3A55", "\u3A55"], /* CJK Ideograph Extension A */ + ["\u3A56", "\u3A56"], /* CJK Ideograph Extension A */ + ["\u3A57", "\u3A57"], /* CJK Ideograph Extension A */ + ["\u3A58", "\u3A58"], /* CJK Ideograph Extension A */ + ["\u3A59", "\u3A59"], /* CJK Ideograph Extension A */ + ["\u3A5A", "\u3A5A"], /* CJK Ideograph Extension A */ + ["\u3A5B", "\u3A5B"], /* CJK Ideograph Extension A */ + ["\u3A5C", "\u3A5C"], /* CJK Ideograph Extension A */ + ["\u3A5D", "\u3A5D"], /* CJK Ideograph Extension A */ + ["\u3A5E", "\u3A5E"], /* CJK Ideograph Extension A */ + ["\u3A5F", "\u3A5F"], /* CJK Ideograph Extension A */ + ["\u3A60", "\u3A60"], /* CJK Ideograph Extension A */ + ["\u3A61", "\u3A61"], /* CJK Ideograph Extension A */ + ["\u3A62", "\u3A62"], /* CJK Ideograph Extension A */ + ["\u3A63", "\u3A63"], /* CJK Ideograph Extension A */ + ["\u3A64", "\u3A64"], /* CJK Ideograph Extension A */ + ["\u3A65", "\u3A65"], /* CJK Ideograph Extension A */ + ["\u3A66", "\u3A66"], /* CJK Ideograph Extension A */ + ["\u3A67", "\u3A67"], /* CJK Ideograph Extension A */ + ["\u3A68", "\u3A68"], /* CJK Ideograph Extension A */ + ["\u3A69", "\u3A69"], /* CJK Ideograph Extension A */ + ["\u3A6A", "\u3A6A"], /* CJK Ideograph Extension A */ + ["\u3A6B", "\u3A6B"], /* CJK Ideograph Extension A */ + ["\u3A6C", "\u3A6C"], /* CJK Ideograph Extension A */ + ["\u3A6D", "\u3A6D"], /* CJK Ideograph Extension A */ + ["\u3A6E", "\u3A6E"], /* CJK Ideograph Extension A */ + ["\u3A6F", "\u3A6F"], /* CJK Ideograph Extension A */ + ["\u3A70", "\u3A70"], /* CJK Ideograph Extension A */ + ["\u3A71", "\u3A71"], /* CJK Ideograph Extension A */ + ["\u3A72", "\u3A72"], /* CJK Ideograph Extension A */ + ["\u3A73", "\u3A73"], /* CJK Ideograph Extension A */ + ["\u3A74", "\u3A74"], /* CJK Ideograph Extension A */ + ["\u3A75", "\u3A75"], /* CJK Ideograph Extension A */ + ["\u3A76", "\u3A76"], /* CJK Ideograph Extension A */ + ["\u3A77", "\u3A77"], /* CJK Ideograph Extension A */ + ["\u3A78", "\u3A78"], /* CJK Ideograph Extension A */ + ["\u3A79", "\u3A79"], /* CJK Ideograph Extension A */ + ["\u3A7A", "\u3A7A"], /* CJK Ideograph Extension A */ + ["\u3A7B", "\u3A7B"], /* CJK Ideograph Extension A */ + ["\u3A7C", "\u3A7C"], /* CJK Ideograph Extension A */ + ["\u3A7D", "\u3A7D"], /* CJK Ideograph Extension A */ + ["\u3A7E", "\u3A7E"], /* CJK Ideograph Extension A */ + ["\u3A7F", "\u3A7F"], /* CJK Ideograph Extension A */ + ["\u3A80", "\u3A80"], /* CJK Ideograph Extension A */ + ["\u3A81", "\u3A81"], /* CJK Ideograph Extension A */ + ["\u3A82", "\u3A82"], /* CJK Ideograph Extension A */ + ["\u3A83", "\u3A83"], /* CJK Ideograph Extension A */ + ["\u3A84", "\u3A84"], /* CJK Ideograph Extension A */ + ["\u3A85", "\u3A85"], /* CJK Ideograph Extension A */ + ["\u3A86", "\u3A86"], /* CJK Ideograph Extension A */ + ["\u3A87", "\u3A87"], /* CJK Ideograph Extension A */ + ["\u3A88", "\u3A88"], /* CJK Ideograph Extension A */ + ["\u3A89", "\u3A89"], /* CJK Ideograph Extension A */ + ["\u3A8A", "\u3A8A"], /* CJK Ideograph Extension A */ + ["\u3A8B", "\u3A8B"], /* CJK Ideograph Extension A */ + ["\u3A8C", "\u3A8C"], /* CJK Ideograph Extension A */ + ["\u3A8D", "\u3A8D"], /* CJK Ideograph Extension A */ + ["\u3A8E", "\u3A8E"], /* CJK Ideograph Extension A */ + ["\u3A8F", "\u3A8F"], /* CJK Ideograph Extension A */ + ["\u3A90", "\u3A90"], /* CJK Ideograph Extension A */ + ["\u3A91", "\u3A91"], /* CJK Ideograph Extension A */ + ["\u3A92", "\u3A92"], /* CJK Ideograph Extension A */ + ["\u3A93", "\u3A93"], /* CJK Ideograph Extension A */ + ["\u3A94", "\u3A94"], /* CJK Ideograph Extension A */ + ["\u3A95", "\u3A95"], /* CJK Ideograph Extension A */ + ["\u3A96", "\u3A96"], /* CJK Ideograph Extension A */ + ["\u3A97", "\u3A97"], /* CJK Ideograph Extension A */ + ["\u3A98", "\u3A98"], /* CJK Ideograph Extension A */ + ["\u3A99", "\u3A99"], /* CJK Ideograph Extension A */ + ["\u3A9A", "\u3A9A"], /* CJK Ideograph Extension A */ + ["\u3A9B", "\u3A9B"], /* CJK Ideograph Extension A */ + ["\u3A9C", "\u3A9C"], /* CJK Ideograph Extension A */ + ["\u3A9D", "\u3A9D"], /* CJK Ideograph Extension A */ + ["\u3A9E", "\u3A9E"], /* CJK Ideograph Extension A */ + ["\u3A9F", "\u3A9F"], /* CJK Ideograph Extension A */ + ["\u3AA0", "\u3AA0"], /* CJK Ideograph Extension A */ + ["\u3AA1", "\u3AA1"], /* CJK Ideograph Extension A */ + ["\u3AA2", "\u3AA2"], /* CJK Ideograph Extension A */ + ["\u3AA3", "\u3AA3"], /* CJK Ideograph Extension A */ + ["\u3AA4", "\u3AA4"], /* CJK Ideograph Extension A */ + ["\u3AA5", "\u3AA5"], /* CJK Ideograph Extension A */ + ["\u3AA6", "\u3AA6"], /* CJK Ideograph Extension A */ + ["\u3AA7", "\u3AA7"], /* CJK Ideograph Extension A */ + ["\u3AA8", "\u3AA8"], /* CJK Ideograph Extension A */ + ["\u3AA9", "\u3AA9"], /* CJK Ideograph Extension A */ + ["\u3AAA", "\u3AAA"], /* CJK Ideograph Extension A */ + ["\u3AAB", "\u3AAB"], /* CJK Ideograph Extension A */ + ["\u3AAC", "\u3AAC"], /* CJK Ideograph Extension A */ + ["\u3AAD", "\u3AAD"], /* CJK Ideograph Extension A */ + ["\u3AAE", "\u3AAE"], /* CJK Ideograph Extension A */ + ["\u3AAF", "\u3AAF"], /* CJK Ideograph Extension A */ + ["\u3AB0", "\u3AB0"], /* CJK Ideograph Extension A */ + ["\u3AB1", "\u3AB1"], /* CJK Ideograph Extension A */ + ["\u3AB2", "\u3AB2"], /* CJK Ideograph Extension A */ + ["\u3AB3", "\u3AB3"], /* CJK Ideograph Extension A */ + ["\u3AB4", "\u3AB4"], /* CJK Ideograph Extension A */ + ["\u3AB5", "\u3AB5"], /* CJK Ideograph Extension A */ + ["\u3AB6", "\u3AB6"], /* CJK Ideograph Extension A */ + ["\u3AB7", "\u3AB7"], /* CJK Ideograph Extension A */ + ["\u3AB8", "\u3AB8"], /* CJK Ideograph Extension A */ + ["\u3AB9", "\u3AB9"], /* CJK Ideograph Extension A */ + ["\u3ABA", "\u3ABA"], /* CJK Ideograph Extension A */ + ["\u3ABB", "\u3ABB"], /* CJK Ideograph Extension A */ + ["\u3ABC", "\u3ABC"], /* CJK Ideograph Extension A */ + ["\u3ABD", "\u3ABD"], /* CJK Ideograph Extension A */ + ["\u3ABE", "\u3ABE"], /* CJK Ideograph Extension A */ + ["\u3ABF", "\u3ABF"], /* CJK Ideograph Extension A */ + ["\u3AC0", "\u3AC0"], /* CJK Ideograph Extension A */ + ["\u3AC1", "\u3AC1"], /* CJK Ideograph Extension A */ + ["\u3AC2", "\u3AC2"], /* CJK Ideograph Extension A */ + ["\u3AC3", "\u3AC3"], /* CJK Ideograph Extension A */ + ["\u3AC4", "\u3AC4"], /* CJK Ideograph Extension A */ + ["\u3AC5", "\u3AC5"], /* CJK Ideograph Extension A */ + ["\u3AC6", "\u3AC6"], /* CJK Ideograph Extension A */ + ["\u3AC7", "\u3AC7"], /* CJK Ideograph Extension A */ + ["\u3AC8", "\u3AC8"], /* CJK Ideograph Extension A */ + ["\u3AC9", "\u3AC9"], /* CJK Ideograph Extension A */ + ["\u3ACA", "\u3ACA"], /* CJK Ideograph Extension A */ + ["\u3ACB", "\u3ACB"], /* CJK Ideograph Extension A */ + ["\u3ACC", "\u3ACC"], /* CJK Ideograph Extension A */ + ["\u3ACD", "\u3ACD"], /* CJK Ideograph Extension A */ + ["\u3ACE", "\u3ACE"], /* CJK Ideograph Extension A */ + ["\u3ACF", "\u3ACF"], /* CJK Ideograph Extension A */ + ["\u3AD0", "\u3AD0"], /* CJK Ideograph Extension A */ + ["\u3AD1", "\u3AD1"], /* CJK Ideograph Extension A */ + ["\u3AD2", "\u3AD2"], /* CJK Ideograph Extension A */ + ["\u3AD3", "\u3AD3"], /* CJK Ideograph Extension A */ + ["\u3AD4", "\u3AD4"], /* CJK Ideograph Extension A */ + ["\u3AD5", "\u3AD5"], /* CJK Ideograph Extension A */ + ["\u3AD6", "\u3AD6"], /* CJK Ideograph Extension A */ + ["\u3AD7", "\u3AD7"], /* CJK Ideograph Extension A */ + ["\u3AD8", "\u3AD8"], /* CJK Ideograph Extension A */ + ["\u3AD9", "\u3AD9"], /* CJK Ideograph Extension A */ + ["\u3ADA", "\u3ADA"], /* CJK Ideograph Extension A */ + ["\u3ADB", "\u3ADB"], /* CJK Ideograph Extension A */ + ["\u3ADC", "\u3ADC"], /* CJK Ideograph Extension A */ + ["\u3ADD", "\u3ADD"], /* CJK Ideograph Extension A */ + ["\u3ADE", "\u3ADE"], /* CJK Ideograph Extension A */ + ["\u3ADF", "\u3ADF"], /* CJK Ideograph Extension A */ + ["\u3AE0", "\u3AE0"], /* CJK Ideograph Extension A */ + ["\u3AE1", "\u3AE1"], /* CJK Ideograph Extension A */ + ["\u3AE2", "\u3AE2"], /* CJK Ideograph Extension A */ + ["\u3AE3", "\u3AE3"], /* CJK Ideograph Extension A */ + ["\u3AE4", "\u3AE4"], /* CJK Ideograph Extension A */ + ["\u3AE5", "\u3AE5"], /* CJK Ideograph Extension A */ + ["\u3AE6", "\u3AE6"], /* CJK Ideograph Extension A */ + ["\u3AE7", "\u3AE7"], /* CJK Ideograph Extension A */ + ["\u3AE8", "\u3AE8"], /* CJK Ideograph Extension A */ + ["\u3AE9", "\u3AE9"], /* CJK Ideograph Extension A */ + ["\u3AEA", "\u3AEA"], /* CJK Ideograph Extension A */ + ["\u3AEB", "\u3AEB"], /* CJK Ideograph Extension A */ + ["\u3AEC", "\u3AEC"], /* CJK Ideograph Extension A */ + ["\u3AED", "\u3AED"], /* CJK Ideograph Extension A */ + ["\u3AEE", "\u3AEE"], /* CJK Ideograph Extension A */ + ["\u3AEF", "\u3AEF"], /* CJK Ideograph Extension A */ + ["\u3AF0", "\u3AF0"], /* CJK Ideograph Extension A */ + ["\u3AF1", "\u3AF1"], /* CJK Ideograph Extension A */ + ["\u3AF2", "\u3AF2"], /* CJK Ideograph Extension A */ + ["\u3AF3", "\u3AF3"], /* CJK Ideograph Extension A */ + ["\u3AF4", "\u3AF4"], /* CJK Ideograph Extension A */ + ["\u3AF5", "\u3AF5"], /* CJK Ideograph Extension A */ + ["\u3AF6", "\u3AF6"], /* CJK Ideograph Extension A */ + ["\u3AF7", "\u3AF7"], /* CJK Ideograph Extension A */ + ["\u3AF8", "\u3AF8"], /* CJK Ideograph Extension A */ + ["\u3AF9", "\u3AF9"], /* CJK Ideograph Extension A */ + ["\u3AFA", "\u3AFA"], /* CJK Ideograph Extension A */ + ["\u3AFB", "\u3AFB"], /* CJK Ideograph Extension A */ + ["\u3AFC", "\u3AFC"], /* CJK Ideograph Extension A */ + ["\u3AFD", "\u3AFD"], /* CJK Ideograph Extension A */ + ["\u3AFE", "\u3AFE"], /* CJK Ideograph Extension A */ + ["\u3AFF", "\u3AFF"], /* CJK Ideograph Extension A */ + ["\u3B00", "\u3B00"], /* CJK Ideograph Extension A */ + ["\u3B01", "\u3B01"], /* CJK Ideograph Extension A */ + ["\u3B02", "\u3B02"], /* CJK Ideograph Extension A */ + ["\u3B03", "\u3B03"], /* CJK Ideograph Extension A */ + ["\u3B04", "\u3B04"], /* CJK Ideograph Extension A */ + ["\u3B05", "\u3B05"], /* CJK Ideograph Extension A */ + ["\u3B06", "\u3B06"], /* CJK Ideograph Extension A */ + ["\u3B07", "\u3B07"], /* CJK Ideograph Extension A */ + ["\u3B08", "\u3B08"], /* CJK Ideograph Extension A */ + ["\u3B09", "\u3B09"], /* CJK Ideograph Extension A */ + ["\u3B0A", "\u3B0A"], /* CJK Ideograph Extension A */ + ["\u3B0B", "\u3B0B"], /* CJK Ideograph Extension A */ + ["\u3B0C", "\u3B0C"], /* CJK Ideograph Extension A */ + ["\u3B0D", "\u3B0D"], /* CJK Ideograph Extension A */ + ["\u3B0E", "\u3B0E"], /* CJK Ideograph Extension A */ + ["\u3B0F", "\u3B0F"], /* CJK Ideograph Extension A */ + ["\u3B10", "\u3B10"], /* CJK Ideograph Extension A */ + ["\u3B11", "\u3B11"], /* CJK Ideograph Extension A */ + ["\u3B12", "\u3B12"], /* CJK Ideograph Extension A */ + ["\u3B13", "\u3B13"], /* CJK Ideograph Extension A */ + ["\u3B14", "\u3B14"], /* CJK Ideograph Extension A */ + ["\u3B15", "\u3B15"], /* CJK Ideograph Extension A */ + ["\u3B16", "\u3B16"], /* CJK Ideograph Extension A */ + ["\u3B17", "\u3B17"], /* CJK Ideograph Extension A */ + ["\u3B18", "\u3B18"], /* CJK Ideograph Extension A */ + ["\u3B19", "\u3B19"], /* CJK Ideograph Extension A */ + ["\u3B1A", "\u3B1A"], /* CJK Ideograph Extension A */ + ["\u3B1B", "\u3B1B"], /* CJK Ideograph Extension A */ + ["\u3B1C", "\u3B1C"], /* CJK Ideograph Extension A */ + ["\u3B1D", "\u3B1D"], /* CJK Ideograph Extension A */ + ["\u3B1E", "\u3B1E"], /* CJK Ideograph Extension A */ + ["\u3B1F", "\u3B1F"], /* CJK Ideograph Extension A */ + ["\u3B20", "\u3B20"], /* CJK Ideograph Extension A */ + ["\u3B21", "\u3B21"], /* CJK Ideograph Extension A */ + ["\u3B22", "\u3B22"], /* CJK Ideograph Extension A */ + ["\u3B23", "\u3B23"], /* CJK Ideograph Extension A */ + ["\u3B24", "\u3B24"], /* CJK Ideograph Extension A */ + ["\u3B25", "\u3B25"], /* CJK Ideograph Extension A */ + ["\u3B26", "\u3B26"], /* CJK Ideograph Extension A */ + ["\u3B27", "\u3B27"], /* CJK Ideograph Extension A */ + ["\u3B28", "\u3B28"], /* CJK Ideograph Extension A */ + ["\u3B29", "\u3B29"], /* CJK Ideograph Extension A */ + ["\u3B2A", "\u3B2A"], /* CJK Ideograph Extension A */ + ["\u3B2B", "\u3B2B"], /* CJK Ideograph Extension A */ + ["\u3B2C", "\u3B2C"], /* CJK Ideograph Extension A */ + ["\u3B2D", "\u3B2D"], /* CJK Ideograph Extension A */ + ["\u3B2E", "\u3B2E"], /* CJK Ideograph Extension A */ + ["\u3B2F", "\u3B2F"], /* CJK Ideograph Extension A */ + ["\u3B30", "\u3B30"], /* CJK Ideograph Extension A */ + ["\u3B31", "\u3B31"], /* CJK Ideograph Extension A */ + ["\u3B32", "\u3B32"], /* CJK Ideograph Extension A */ + ["\u3B33", "\u3B33"], /* CJK Ideograph Extension A */ + ["\u3B34", "\u3B34"], /* CJK Ideograph Extension A */ + ["\u3B35", "\u3B35"], /* CJK Ideograph Extension A */ + ["\u3B36", "\u3B36"], /* CJK Ideograph Extension A */ + ["\u3B37", "\u3B37"], /* CJK Ideograph Extension A */ + ["\u3B38", "\u3B38"], /* CJK Ideograph Extension A */ + ["\u3B39", "\u3B39"], /* CJK Ideograph Extension A */ + ["\u3B3A", "\u3B3A"], /* CJK Ideograph Extension A */ + ["\u3B3B", "\u3B3B"], /* CJK Ideograph Extension A */ + ["\u3B3C", "\u3B3C"], /* CJK Ideograph Extension A */ + ["\u3B3D", "\u3B3D"], /* CJK Ideograph Extension A */ + ["\u3B3E", "\u3B3E"], /* CJK Ideograph Extension A */ + ["\u3B3F", "\u3B3F"], /* CJK Ideograph Extension A */ + ["\u3B40", "\u3B40"], /* CJK Ideograph Extension A */ + ["\u3B41", "\u3B41"], /* CJK Ideograph Extension A */ + ["\u3B42", "\u3B42"], /* CJK Ideograph Extension A */ + ["\u3B43", "\u3B43"], /* CJK Ideograph Extension A */ + ["\u3B44", "\u3B44"], /* CJK Ideograph Extension A */ + ["\u3B45", "\u3B45"], /* CJK Ideograph Extension A */ + ["\u3B46", "\u3B46"], /* CJK Ideograph Extension A */ + ["\u3B47", "\u3B47"], /* CJK Ideograph Extension A */ + ["\u3B48", "\u3B48"], /* CJK Ideograph Extension A */ + ["\u3B49", "\u3B49"], /* CJK Ideograph Extension A */ + ["\u3B4A", "\u3B4A"], /* CJK Ideograph Extension A */ + ["\u3B4B", "\u3B4B"], /* CJK Ideograph Extension A */ + ["\u3B4C", "\u3B4C"], /* CJK Ideograph Extension A */ + ["\u3B4D", "\u3B4D"], /* CJK Ideograph Extension A */ + ["\u3B4E", "\u3B4E"], /* CJK Ideograph Extension A */ + ["\u3B4F", "\u3B4F"], /* CJK Ideograph Extension A */ + ["\u3B50", "\u3B50"], /* CJK Ideograph Extension A */ + ["\u3B51", "\u3B51"], /* CJK Ideograph Extension A */ + ["\u3B52", "\u3B52"], /* CJK Ideograph Extension A */ + ["\u3B53", "\u3B53"], /* CJK Ideograph Extension A */ + ["\u3B54", "\u3B54"], /* CJK Ideograph Extension A */ + ["\u3B55", "\u3B55"], /* CJK Ideograph Extension A */ + ["\u3B56", "\u3B56"], /* CJK Ideograph Extension A */ + ["\u3B57", "\u3B57"], /* CJK Ideograph Extension A */ + ["\u3B58", "\u3B58"], /* CJK Ideograph Extension A */ + ["\u3B59", "\u3B59"], /* CJK Ideograph Extension A */ + ["\u3B5A", "\u3B5A"], /* CJK Ideograph Extension A */ + ["\u3B5B", "\u3B5B"], /* CJK Ideograph Extension A */ + ["\u3B5C", "\u3B5C"], /* CJK Ideograph Extension A */ + ["\u3B5D", "\u3B5D"], /* CJK Ideograph Extension A */ + ["\u3B5E", "\u3B5E"], /* CJK Ideograph Extension A */ + ["\u3B5F", "\u3B5F"], /* CJK Ideograph Extension A */ + ["\u3B60", "\u3B60"], /* CJK Ideograph Extension A */ + ["\u3B61", "\u3B61"], /* CJK Ideograph Extension A */ + ["\u3B62", "\u3B62"], /* CJK Ideograph Extension A */ + ["\u3B63", "\u3B63"], /* CJK Ideograph Extension A */ + ["\u3B64", "\u3B64"], /* CJK Ideograph Extension A */ + ["\u3B65", "\u3B65"], /* CJK Ideograph Extension A */ + ["\u3B66", "\u3B66"], /* CJK Ideograph Extension A */ + ["\u3B67", "\u3B67"], /* CJK Ideograph Extension A */ + ["\u3B68", "\u3B68"], /* CJK Ideograph Extension A */ + ["\u3B69", "\u3B69"], /* CJK Ideograph Extension A */ + ["\u3B6A", "\u3B6A"], /* CJK Ideograph Extension A */ + ["\u3B6B", "\u3B6B"], /* CJK Ideograph Extension A */ + ["\u3B6C", "\u3B6C"], /* CJK Ideograph Extension A */ + ["\u3B6D", "\u3B6D"], /* CJK Ideograph Extension A */ + ["\u3B6E", "\u3B6E"], /* CJK Ideograph Extension A */ + ["\u3B6F", "\u3B6F"], /* CJK Ideograph Extension A */ + ["\u3B70", "\u3B70"], /* CJK Ideograph Extension A */ + ["\u3B71", "\u3B71"], /* CJK Ideograph Extension A */ + ["\u3B72", "\u3B72"], /* CJK Ideograph Extension A */ + ["\u3B73", "\u3B73"], /* CJK Ideograph Extension A */ + ["\u3B74", "\u3B74"], /* CJK Ideograph Extension A */ + ["\u3B75", "\u3B75"], /* CJK Ideograph Extension A */ + ["\u3B76", "\u3B76"], /* CJK Ideograph Extension A */ + ["\u3B77", "\u3B77"], /* CJK Ideograph Extension A */ + ["\u3B78", "\u3B78"], /* CJK Ideograph Extension A */ + ["\u3B79", "\u3B79"], /* CJK Ideograph Extension A */ + ["\u3B7A", "\u3B7A"], /* CJK Ideograph Extension A */ + ["\u3B7B", "\u3B7B"], /* CJK Ideograph Extension A */ + ["\u3B7C", "\u3B7C"], /* CJK Ideograph Extension A */ + ["\u3B7D", "\u3B7D"], /* CJK Ideograph Extension A */ + ["\u3B7E", "\u3B7E"], /* CJK Ideograph Extension A */ + ["\u3B7F", "\u3B7F"], /* CJK Ideograph Extension A */ + ["\u3B80", "\u3B80"], /* CJK Ideograph Extension A */ + ["\u3B81", "\u3B81"], /* CJK Ideograph Extension A */ + ["\u3B82", "\u3B82"], /* CJK Ideograph Extension A */ + ["\u3B83", "\u3B83"], /* CJK Ideograph Extension A */ + ["\u3B84", "\u3B84"], /* CJK Ideograph Extension A */ + ["\u3B85", "\u3B85"], /* CJK Ideograph Extension A */ + ["\u3B86", "\u3B86"], /* CJK Ideograph Extension A */ + ["\u3B87", "\u3B87"], /* CJK Ideograph Extension A */ + ["\u3B88", "\u3B88"], /* CJK Ideograph Extension A */ + ["\u3B89", "\u3B89"], /* CJK Ideograph Extension A */ + ["\u3B8A", "\u3B8A"], /* CJK Ideograph Extension A */ + ["\u3B8B", "\u3B8B"], /* CJK Ideograph Extension A */ + ["\u3B8C", "\u3B8C"], /* CJK Ideograph Extension A */ + ["\u3B8D", "\u3B8D"], /* CJK Ideograph Extension A */ + ["\u3B8E", "\u3B8E"], /* CJK Ideograph Extension A */ + ["\u3B8F", "\u3B8F"], /* CJK Ideograph Extension A */ + ["\u3B90", "\u3B90"], /* CJK Ideograph Extension A */ + ["\u3B91", "\u3B91"], /* CJK Ideograph Extension A */ + ["\u3B92", "\u3B92"], /* CJK Ideograph Extension A */ + ["\u3B93", "\u3B93"], /* CJK Ideograph Extension A */ + ["\u3B94", "\u3B94"], /* CJK Ideograph Extension A */ + ["\u3B95", "\u3B95"], /* CJK Ideograph Extension A */ + ["\u3B96", "\u3B96"], /* CJK Ideograph Extension A */ + ["\u3B97", "\u3B97"], /* CJK Ideograph Extension A */ + ["\u3B98", "\u3B98"], /* CJK Ideograph Extension A */ + ["\u3B99", "\u3B99"], /* CJK Ideograph Extension A */ + ["\u3B9A", "\u3B9A"], /* CJK Ideograph Extension A */ + ["\u3B9B", "\u3B9B"], /* CJK Ideograph Extension A */ + ["\u3B9C", "\u3B9C"], /* CJK Ideograph Extension A */ + ["\u3B9D", "\u3B9D"], /* CJK Ideograph Extension A */ + ["\u3B9E", "\u3B9E"], /* CJK Ideograph Extension A */ + ["\u3B9F", "\u3B9F"], /* CJK Ideograph Extension A */ + ["\u3BA0", "\u3BA0"], /* CJK Ideograph Extension A */ + ["\u3BA1", "\u3BA1"], /* CJK Ideograph Extension A */ + ["\u3BA2", "\u3BA2"], /* CJK Ideograph Extension A */ + ["\u3BA3", "\u3BA3"], /* CJK Ideograph Extension A */ + ["\u3BA4", "\u3BA4"], /* CJK Ideograph Extension A */ + ["\u3BA5", "\u3BA5"], /* CJK Ideograph Extension A */ + ["\u3BA6", "\u3BA6"], /* CJK Ideograph Extension A */ + ["\u3BA7", "\u3BA7"], /* CJK Ideograph Extension A */ + ["\u3BA8", "\u3BA8"], /* CJK Ideograph Extension A */ + ["\u3BA9", "\u3BA9"], /* CJK Ideograph Extension A */ + ["\u3BAA", "\u3BAA"], /* CJK Ideograph Extension A */ + ["\u3BAB", "\u3BAB"], /* CJK Ideograph Extension A */ + ["\u3BAC", "\u3BAC"], /* CJK Ideograph Extension A */ + ["\u3BAD", "\u3BAD"], /* CJK Ideograph Extension A */ + ["\u3BAE", "\u3BAE"], /* CJK Ideograph Extension A */ + ["\u3BAF", "\u3BAF"], /* CJK Ideograph Extension A */ + ["\u3BB0", "\u3BB0"], /* CJK Ideograph Extension A */ + ["\u3BB1", "\u3BB1"], /* CJK Ideograph Extension A */ + ["\u3BB2", "\u3BB2"], /* CJK Ideograph Extension A */ + ["\u3BB3", "\u3BB3"], /* CJK Ideograph Extension A */ + ["\u3BB4", "\u3BB4"], /* CJK Ideograph Extension A */ + ["\u3BB5", "\u3BB5"], /* CJK Ideograph Extension A */ + ["\u3BB6", "\u3BB6"], /* CJK Ideograph Extension A */ + ["\u3BB7", "\u3BB7"], /* CJK Ideograph Extension A */ + ["\u3BB8", "\u3BB8"], /* CJK Ideograph Extension A */ + ["\u3BB9", "\u3BB9"], /* CJK Ideograph Extension A */ + ["\u3BBA", "\u3BBA"], /* CJK Ideograph Extension A */ + ["\u3BBB", "\u3BBB"], /* CJK Ideograph Extension A */ + ["\u3BBC", "\u3BBC"], /* CJK Ideograph Extension A */ + ["\u3BBD", "\u3BBD"], /* CJK Ideograph Extension A */ + ["\u3BBE", "\u3BBE"], /* CJK Ideograph Extension A */ + ["\u3BBF", "\u3BBF"], /* CJK Ideograph Extension A */ + ["\u3BC0", "\u3BC0"], /* CJK Ideograph Extension A */ + ["\u3BC1", "\u3BC1"], /* CJK Ideograph Extension A */ + ["\u3BC2", "\u3BC2"], /* CJK Ideograph Extension A */ + ["\u3BC3", "\u3BC3"], /* CJK Ideograph Extension A */ + ["\u3BC4", "\u3BC4"], /* CJK Ideograph Extension A */ + ["\u3BC5", "\u3BC5"], /* CJK Ideograph Extension A */ + ["\u3BC6", "\u3BC6"], /* CJK Ideograph Extension A */ + ["\u3BC7", "\u3BC7"], /* CJK Ideograph Extension A */ + ["\u3BC8", "\u3BC8"], /* CJK Ideograph Extension A */ + ["\u3BC9", "\u3BC9"], /* CJK Ideograph Extension A */ + ["\u3BCA", "\u3BCA"], /* CJK Ideograph Extension A */ + ["\u3BCB", "\u3BCB"], /* CJK Ideograph Extension A */ + ["\u3BCC", "\u3BCC"], /* CJK Ideograph Extension A */ + ["\u3BCD", "\u3BCD"], /* CJK Ideograph Extension A */ + ["\u3BCE", "\u3BCE"], /* CJK Ideograph Extension A */ + ["\u3BCF", "\u3BCF"], /* CJK Ideograph Extension A */ + ["\u3BD0", "\u3BD0"], /* CJK Ideograph Extension A */ + ["\u3BD1", "\u3BD1"], /* CJK Ideograph Extension A */ + ["\u3BD2", "\u3BD2"], /* CJK Ideograph Extension A */ + ["\u3BD3", "\u3BD3"], /* CJK Ideograph Extension A */ + ["\u3BD4", "\u3BD4"], /* CJK Ideograph Extension A */ + ["\u3BD5", "\u3BD5"], /* CJK Ideograph Extension A */ + ["\u3BD6", "\u3BD6"], /* CJK Ideograph Extension A */ + ["\u3BD7", "\u3BD7"], /* CJK Ideograph Extension A */ + ["\u3BD8", "\u3BD8"], /* CJK Ideograph Extension A */ + ["\u3BD9", "\u3BD9"], /* CJK Ideograph Extension A */ + ["\u3BDA", "\u3BDA"], /* CJK Ideograph Extension A */ + ["\u3BDB", "\u3BDB"], /* CJK Ideograph Extension A */ + ["\u3BDC", "\u3BDC"], /* CJK Ideograph Extension A */ + ["\u3BDD", "\u3BDD"], /* CJK Ideograph Extension A */ + ["\u3BDE", "\u3BDE"], /* CJK Ideograph Extension A */ + ["\u3BDF", "\u3BDF"], /* CJK Ideograph Extension A */ + ["\u3BE0", "\u3BE0"], /* CJK Ideograph Extension A */ + ["\u3BE1", "\u3BE1"], /* CJK Ideograph Extension A */ + ["\u3BE2", "\u3BE2"], /* CJK Ideograph Extension A */ + ["\u3BE3", "\u3BE3"], /* CJK Ideograph Extension A */ + ["\u3BE4", "\u3BE4"], /* CJK Ideograph Extension A */ + ["\u3BE5", "\u3BE5"], /* CJK Ideograph Extension A */ + ["\u3BE6", "\u3BE6"], /* CJK Ideograph Extension A */ + ["\u3BE7", "\u3BE7"], /* CJK Ideograph Extension A */ + ["\u3BE8", "\u3BE8"], /* CJK Ideograph Extension A */ + ["\u3BE9", "\u3BE9"], /* CJK Ideograph Extension A */ + ["\u3BEA", "\u3BEA"], /* CJK Ideograph Extension A */ + ["\u3BEB", "\u3BEB"], /* CJK Ideograph Extension A */ + ["\u3BEC", "\u3BEC"], /* CJK Ideograph Extension A */ + ["\u3BED", "\u3BED"], /* CJK Ideograph Extension A */ + ["\u3BEE", "\u3BEE"], /* CJK Ideograph Extension A */ + ["\u3BEF", "\u3BEF"], /* CJK Ideograph Extension A */ + ["\u3BF0", "\u3BF0"], /* CJK Ideograph Extension A */ + ["\u3BF1", "\u3BF1"], /* CJK Ideograph Extension A */ + ["\u3BF2", "\u3BF2"], /* CJK Ideograph Extension A */ + ["\u3BF3", "\u3BF3"], /* CJK Ideograph Extension A */ + ["\u3BF4", "\u3BF4"], /* CJK Ideograph Extension A */ + ["\u3BF5", "\u3BF5"], /* CJK Ideograph Extension A */ + ["\u3BF6", "\u3BF6"], /* CJK Ideograph Extension A */ + ["\u3BF7", "\u3BF7"], /* CJK Ideograph Extension A */ + ["\u3BF8", "\u3BF8"], /* CJK Ideograph Extension A */ + ["\u3BF9", "\u3BF9"], /* CJK Ideograph Extension A */ + ["\u3BFA", "\u3BFA"], /* CJK Ideograph Extension A */ + ["\u3BFB", "\u3BFB"], /* CJK Ideograph Extension A */ + ["\u3BFC", "\u3BFC"], /* CJK Ideograph Extension A */ + ["\u3BFD", "\u3BFD"], /* CJK Ideograph Extension A */ + ["\u3BFE", "\u3BFE"], /* CJK Ideograph Extension A */ + ["\u3BFF", "\u3BFF"], /* CJK Ideograph Extension A */ + ["\u3C00", "\u3C00"], /* CJK Ideograph Extension A */ + ["\u3C01", "\u3C01"], /* CJK Ideograph Extension A */ + ["\u3C02", "\u3C02"], /* CJK Ideograph Extension A */ + ["\u3C03", "\u3C03"], /* CJK Ideograph Extension A */ + ["\u3C04", "\u3C04"], /* CJK Ideograph Extension A */ + ["\u3C05", "\u3C05"], /* CJK Ideograph Extension A */ + ["\u3C06", "\u3C06"], /* CJK Ideograph Extension A */ + ["\u3C07", "\u3C07"], /* CJK Ideograph Extension A */ + ["\u3C08", "\u3C08"], /* CJK Ideograph Extension A */ + ["\u3C09", "\u3C09"], /* CJK Ideograph Extension A */ + ["\u3C0A", "\u3C0A"], /* CJK Ideograph Extension A */ + ["\u3C0B", "\u3C0B"], /* CJK Ideograph Extension A */ + ["\u3C0C", "\u3C0C"], /* CJK Ideograph Extension A */ + ["\u3C0D", "\u3C0D"], /* CJK Ideograph Extension A */ + ["\u3C0E", "\u3C0E"], /* CJK Ideograph Extension A */ + ["\u3C0F", "\u3C0F"], /* CJK Ideograph Extension A */ + ["\u3C10", "\u3C10"], /* CJK Ideograph Extension A */ + ["\u3C11", "\u3C11"], /* CJK Ideograph Extension A */ + ["\u3C12", "\u3C12"], /* CJK Ideograph Extension A */ + ["\u3C13", "\u3C13"], /* CJK Ideograph Extension A */ + ["\u3C14", "\u3C14"], /* CJK Ideograph Extension A */ + ["\u3C15", "\u3C15"], /* CJK Ideograph Extension A */ + ["\u3C16", "\u3C16"], /* CJK Ideograph Extension A */ + ["\u3C17", "\u3C17"], /* CJK Ideograph Extension A */ + ["\u3C18", "\u3C18"], /* CJK Ideograph Extension A */ + ["\u3C19", "\u3C19"], /* CJK Ideograph Extension A */ + ["\u3C1A", "\u3C1A"], /* CJK Ideograph Extension A */ + ["\u3C1B", "\u3C1B"], /* CJK Ideograph Extension A */ + ["\u3C1C", "\u3C1C"], /* CJK Ideograph Extension A */ + ["\u3C1D", "\u3C1D"], /* CJK Ideograph Extension A */ + ["\u3C1E", "\u3C1E"], /* CJK Ideograph Extension A */ + ["\u3C1F", "\u3C1F"], /* CJK Ideograph Extension A */ + ["\u3C20", "\u3C20"], /* CJK Ideograph Extension A */ + ["\u3C21", "\u3C21"], /* CJK Ideograph Extension A */ + ["\u3C22", "\u3C22"], /* CJK Ideograph Extension A */ + ["\u3C23", "\u3C23"], /* CJK Ideograph Extension A */ + ["\u3C24", "\u3C24"], /* CJK Ideograph Extension A */ + ["\u3C25", "\u3C25"], /* CJK Ideograph Extension A */ + ["\u3C26", "\u3C26"], /* CJK Ideograph Extension A */ + ["\u3C27", "\u3C27"], /* CJK Ideograph Extension A */ + ["\u3C28", "\u3C28"], /* CJK Ideograph Extension A */ + ["\u3C29", "\u3C29"], /* CJK Ideograph Extension A */ + ["\u3C2A", "\u3C2A"], /* CJK Ideograph Extension A */ + ["\u3C2B", "\u3C2B"], /* CJK Ideograph Extension A */ + ["\u3C2C", "\u3C2C"], /* CJK Ideograph Extension A */ + ["\u3C2D", "\u3C2D"], /* CJK Ideograph Extension A */ + ["\u3C2E", "\u3C2E"], /* CJK Ideograph Extension A */ + ["\u3C2F", "\u3C2F"], /* CJK Ideograph Extension A */ + ["\u3C30", "\u3C30"], /* CJK Ideograph Extension A */ + ["\u3C31", "\u3C31"], /* CJK Ideograph Extension A */ + ["\u3C32", "\u3C32"], /* CJK Ideograph Extension A */ + ["\u3C33", "\u3C33"], /* CJK Ideograph Extension A */ + ["\u3C34", "\u3C34"], /* CJK Ideograph Extension A */ + ["\u3C35", "\u3C35"], /* CJK Ideograph Extension A */ + ["\u3C36", "\u3C36"], /* CJK Ideograph Extension A */ + ["\u3C37", "\u3C37"], /* CJK Ideograph Extension A */ + ["\u3C38", "\u3C38"], /* CJK Ideograph Extension A */ + ["\u3C39", "\u3C39"], /* CJK Ideograph Extension A */ + ["\u3C3A", "\u3C3A"], /* CJK Ideograph Extension A */ + ["\u3C3B", "\u3C3B"], /* CJK Ideograph Extension A */ + ["\u3C3C", "\u3C3C"], /* CJK Ideograph Extension A */ + ["\u3C3D", "\u3C3D"], /* CJK Ideograph Extension A */ + ["\u3C3E", "\u3C3E"], /* CJK Ideograph Extension A */ + ["\u3C3F", "\u3C3F"], /* CJK Ideograph Extension A */ + ["\u3C40", "\u3C40"], /* CJK Ideograph Extension A */ + ["\u3C41", "\u3C41"], /* CJK Ideograph Extension A */ + ["\u3C42", "\u3C42"], /* CJK Ideograph Extension A */ + ["\u3C43", "\u3C43"], /* CJK Ideograph Extension A */ + ["\u3C44", "\u3C44"], /* CJK Ideograph Extension A */ + ["\u3C45", "\u3C45"], /* CJK Ideograph Extension A */ + ["\u3C46", "\u3C46"], /* CJK Ideograph Extension A */ + ["\u3C47", "\u3C47"], /* CJK Ideograph Extension A */ + ["\u3C48", "\u3C48"], /* CJK Ideograph Extension A */ + ["\u3C49", "\u3C49"], /* CJK Ideograph Extension A */ + ["\u3C4A", "\u3C4A"], /* CJK Ideograph Extension A */ + ["\u3C4B", "\u3C4B"], /* CJK Ideograph Extension A */ + ["\u3C4C", "\u3C4C"], /* CJK Ideograph Extension A */ + ["\u3C4D", "\u3C4D"], /* CJK Ideograph Extension A */ + ["\u3C4E", "\u3C4E"], /* CJK Ideograph Extension A */ + ["\u3C4F", "\u3C4F"], /* CJK Ideograph Extension A */ + ["\u3C50", "\u3C50"], /* CJK Ideograph Extension A */ + ["\u3C51", "\u3C51"], /* CJK Ideograph Extension A */ + ["\u3C52", "\u3C52"], /* CJK Ideograph Extension A */ + ["\u3C53", "\u3C53"], /* CJK Ideograph Extension A */ + ["\u3C54", "\u3C54"], /* CJK Ideograph Extension A */ + ["\u3C55", "\u3C55"], /* CJK Ideograph Extension A */ + ["\u3C56", "\u3C56"], /* CJK Ideograph Extension A */ + ["\u3C57", "\u3C57"], /* CJK Ideograph Extension A */ + ["\u3C58", "\u3C58"], /* CJK Ideograph Extension A */ + ["\u3C59", "\u3C59"], /* CJK Ideograph Extension A */ + ["\u3C5A", "\u3C5A"], /* CJK Ideograph Extension A */ + ["\u3C5B", "\u3C5B"], /* CJK Ideograph Extension A */ + ["\u3C5C", "\u3C5C"], /* CJK Ideograph Extension A */ + ["\u3C5D", "\u3C5D"], /* CJK Ideograph Extension A */ + ["\u3C5E", "\u3C5E"], /* CJK Ideograph Extension A */ + ["\u3C5F", "\u3C5F"], /* CJK Ideograph Extension A */ + ["\u3C60", "\u3C60"], /* CJK Ideograph Extension A */ + ["\u3C61", "\u3C61"], /* CJK Ideograph Extension A */ + ["\u3C62", "\u3C62"], /* CJK Ideograph Extension A */ + ["\u3C63", "\u3C63"], /* CJK Ideograph Extension A */ + ["\u3C64", "\u3C64"], /* CJK Ideograph Extension A */ + ["\u3C65", "\u3C65"], /* CJK Ideograph Extension A */ + ["\u3C66", "\u3C66"], /* CJK Ideograph Extension A */ + ["\u3C67", "\u3C67"], /* CJK Ideograph Extension A */ + ["\u3C68", "\u3C68"], /* CJK Ideograph Extension A */ + ["\u3C69", "\u3C69"], /* CJK Ideograph Extension A */ + ["\u3C6A", "\u3C6A"], /* CJK Ideograph Extension A */ + ["\u3C6B", "\u3C6B"], /* CJK Ideograph Extension A */ + ["\u3C6C", "\u3C6C"], /* CJK Ideograph Extension A */ + ["\u3C6D", "\u3C6D"], /* CJK Ideograph Extension A */ + ["\u3C6E", "\u3C6E"], /* CJK Ideograph Extension A */ + ["\u3C6F", "\u3C6F"], /* CJK Ideograph Extension A */ + ["\u3C70", "\u3C70"], /* CJK Ideograph Extension A */ + ["\u3C71", "\u3C71"], /* CJK Ideograph Extension A */ + ["\u3C72", "\u3C72"], /* CJK Ideograph Extension A */ + ["\u3C73", "\u3C73"], /* CJK Ideograph Extension A */ + ["\u3C74", "\u3C74"], /* CJK Ideograph Extension A */ + ["\u3C75", "\u3C75"], /* CJK Ideograph Extension A */ + ["\u3C76", "\u3C76"], /* CJK Ideograph Extension A */ + ["\u3C77", "\u3C77"], /* CJK Ideograph Extension A */ + ["\u3C78", "\u3C78"], /* CJK Ideograph Extension A */ + ["\u3C79", "\u3C79"], /* CJK Ideograph Extension A */ + ["\u3C7A", "\u3C7A"], /* CJK Ideograph Extension A */ + ["\u3C7B", "\u3C7B"], /* CJK Ideograph Extension A */ + ["\u3C7C", "\u3C7C"], /* CJK Ideograph Extension A */ + ["\u3C7D", "\u3C7D"], /* CJK Ideograph Extension A */ + ["\u3C7E", "\u3C7E"], /* CJK Ideograph Extension A */ + ["\u3C7F", "\u3C7F"], /* CJK Ideograph Extension A */ + ["\u3C80", "\u3C80"], /* CJK Ideograph Extension A */ + ["\u3C81", "\u3C81"], /* CJK Ideograph Extension A */ + ["\u3C82", "\u3C82"], /* CJK Ideograph Extension A */ + ["\u3C83", "\u3C83"], /* CJK Ideograph Extension A */ + ["\u3C84", "\u3C84"], /* CJK Ideograph Extension A */ + ["\u3C85", "\u3C85"], /* CJK Ideograph Extension A */ + ["\u3C86", "\u3C86"], /* CJK Ideograph Extension A */ + ["\u3C87", "\u3C87"], /* CJK Ideograph Extension A */ + ["\u3C88", "\u3C88"], /* CJK Ideograph Extension A */ + ["\u3C89", "\u3C89"], /* CJK Ideograph Extension A */ + ["\u3C8A", "\u3C8A"], /* CJK Ideograph Extension A */ + ["\u3C8B", "\u3C8B"], /* CJK Ideograph Extension A */ + ["\u3C8C", "\u3C8C"], /* CJK Ideograph Extension A */ + ["\u3C8D", "\u3C8D"], /* CJK Ideograph Extension A */ + ["\u3C8E", "\u3C8E"], /* CJK Ideograph Extension A */ + ["\u3C8F", "\u3C8F"], /* CJK Ideograph Extension A */ + ["\u3C90", "\u3C90"], /* CJK Ideograph Extension A */ + ["\u3C91", "\u3C91"], /* CJK Ideograph Extension A */ + ["\u3C92", "\u3C92"], /* CJK Ideograph Extension A */ + ["\u3C93", "\u3C93"], /* CJK Ideograph Extension A */ + ["\u3C94", "\u3C94"], /* CJK Ideograph Extension A */ + ["\u3C95", "\u3C95"], /* CJK Ideograph Extension A */ + ["\u3C96", "\u3C96"], /* CJK Ideograph Extension A */ + ["\u3C97", "\u3C97"], /* CJK Ideograph Extension A */ + ["\u3C98", "\u3C98"], /* CJK Ideograph Extension A */ + ["\u3C99", "\u3C99"], /* CJK Ideograph Extension A */ + ["\u3C9A", "\u3C9A"], /* CJK Ideograph Extension A */ + ["\u3C9B", "\u3C9B"], /* CJK Ideograph Extension A */ + ["\u3C9C", "\u3C9C"], /* CJK Ideograph Extension A */ + ["\u3C9D", "\u3C9D"], /* CJK Ideograph Extension A */ + ["\u3C9E", "\u3C9E"], /* CJK Ideograph Extension A */ + ["\u3C9F", "\u3C9F"], /* CJK Ideograph Extension A */ + ["\u3CA0", "\u3CA0"], /* CJK Ideograph Extension A */ + ["\u3CA1", "\u3CA1"], /* CJK Ideograph Extension A */ + ["\u3CA2", "\u3CA2"], /* CJK Ideograph Extension A */ + ["\u3CA3", "\u3CA3"], /* CJK Ideograph Extension A */ + ["\u3CA4", "\u3CA4"], /* CJK Ideograph Extension A */ + ["\u3CA5", "\u3CA5"], /* CJK Ideograph Extension A */ + ["\u3CA6", "\u3CA6"], /* CJK Ideograph Extension A */ + ["\u3CA7", "\u3CA7"], /* CJK Ideograph Extension A */ + ["\u3CA8", "\u3CA8"], /* CJK Ideograph Extension A */ + ["\u3CA9", "\u3CA9"], /* CJK Ideograph Extension A */ + ["\u3CAA", "\u3CAA"], /* CJK Ideograph Extension A */ + ["\u3CAB", "\u3CAB"], /* CJK Ideograph Extension A */ + ["\u3CAC", "\u3CAC"], /* CJK Ideograph Extension A */ + ["\u3CAD", "\u3CAD"], /* CJK Ideograph Extension A */ + ["\u3CAE", "\u3CAE"], /* CJK Ideograph Extension A */ + ["\u3CAF", "\u3CAF"], /* CJK Ideograph Extension A */ + ["\u3CB0", "\u3CB0"], /* CJK Ideograph Extension A */ + ["\u3CB1", "\u3CB1"], /* CJK Ideograph Extension A */ + ["\u3CB2", "\u3CB2"], /* CJK Ideograph Extension A */ + ["\u3CB3", "\u3CB3"], /* CJK Ideograph Extension A */ + ["\u3CB4", "\u3CB4"], /* CJK Ideograph Extension A */ + ["\u3CB5", "\u3CB5"], /* CJK Ideograph Extension A */ + ["\u3CB6", "\u3CB6"], /* CJK Ideograph Extension A */ + ["\u3CB7", "\u3CB7"], /* CJK Ideograph Extension A */ + ["\u3CB8", "\u3CB8"], /* CJK Ideograph Extension A */ + ["\u3CB9", "\u3CB9"], /* CJK Ideograph Extension A */ + ["\u3CBA", "\u3CBA"], /* CJK Ideograph Extension A */ + ["\u3CBB", "\u3CBB"], /* CJK Ideograph Extension A */ + ["\u3CBC", "\u3CBC"], /* CJK Ideograph Extension A */ + ["\u3CBD", "\u3CBD"], /* CJK Ideograph Extension A */ + ["\u3CBE", "\u3CBE"], /* CJK Ideograph Extension A */ + ["\u3CBF", "\u3CBF"], /* CJK Ideograph Extension A */ + ["\u3CC0", "\u3CC0"], /* CJK Ideograph Extension A */ + ["\u3CC1", "\u3CC1"], /* CJK Ideograph Extension A */ + ["\u3CC2", "\u3CC2"], /* CJK Ideograph Extension A */ + ["\u3CC3", "\u3CC3"], /* CJK Ideograph Extension A */ + ["\u3CC4", "\u3CC4"], /* CJK Ideograph Extension A */ + ["\u3CC5", "\u3CC5"], /* CJK Ideograph Extension A */ + ["\u3CC6", "\u3CC6"], /* CJK Ideograph Extension A */ + ["\u3CC7", "\u3CC7"], /* CJK Ideograph Extension A */ + ["\u3CC8", "\u3CC8"], /* CJK Ideograph Extension A */ + ["\u3CC9", "\u3CC9"], /* CJK Ideograph Extension A */ + ["\u3CCA", "\u3CCA"], /* CJK Ideograph Extension A */ + ["\u3CCB", "\u3CCB"], /* CJK Ideograph Extension A */ + ["\u3CCC", "\u3CCC"], /* CJK Ideograph Extension A */ + ["\u3CCD", "\u3CCD"], /* CJK Ideograph Extension A */ + ["\u3CCE", "\u3CCE"], /* CJK Ideograph Extension A */ + ["\u3CCF", "\u3CCF"], /* CJK Ideograph Extension A */ + ["\u3CD0", "\u3CD0"], /* CJK Ideograph Extension A */ + ["\u3CD1", "\u3CD1"], /* CJK Ideograph Extension A */ + ["\u3CD2", "\u3CD2"], /* CJK Ideograph Extension A */ + ["\u3CD3", "\u3CD3"], /* CJK Ideograph Extension A */ + ["\u3CD4", "\u3CD4"], /* CJK Ideograph Extension A */ + ["\u3CD5", "\u3CD5"], /* CJK Ideograph Extension A */ + ["\u3CD6", "\u3CD6"], /* CJK Ideograph Extension A */ + ["\u3CD7", "\u3CD7"], /* CJK Ideograph Extension A */ + ["\u3CD8", "\u3CD8"], /* CJK Ideograph Extension A */ + ["\u3CD9", "\u3CD9"], /* CJK Ideograph Extension A */ + ["\u3CDA", "\u3CDA"], /* CJK Ideograph Extension A */ + ["\u3CDB", "\u3CDB"], /* CJK Ideograph Extension A */ + ["\u3CDC", "\u3CDC"], /* CJK Ideograph Extension A */ + ["\u3CDD", "\u3CDD"], /* CJK Ideograph Extension A */ + ["\u3CDE", "\u3CDE"], /* CJK Ideograph Extension A */ + ["\u3CDF", "\u3CDF"], /* CJK Ideograph Extension A */ + ["\u3CE0", "\u3CE0"], /* CJK Ideograph Extension A */ + ["\u3CE1", "\u3CE1"], /* CJK Ideograph Extension A */ + ["\u3CE2", "\u3CE2"], /* CJK Ideograph Extension A */ + ["\u3CE3", "\u3CE3"], /* CJK Ideograph Extension A */ + ["\u3CE4", "\u3CE4"], /* CJK Ideograph Extension A */ + ["\u3CE5", "\u3CE5"], /* CJK Ideograph Extension A */ + ["\u3CE6", "\u3CE6"], /* CJK Ideograph Extension A */ + ["\u3CE7", "\u3CE7"], /* CJK Ideograph Extension A */ + ["\u3CE8", "\u3CE8"], /* CJK Ideograph Extension A */ + ["\u3CE9", "\u3CE9"], /* CJK Ideograph Extension A */ + ["\u3CEA", "\u3CEA"], /* CJK Ideograph Extension A */ + ["\u3CEB", "\u3CEB"], /* CJK Ideograph Extension A */ + ["\u3CEC", "\u3CEC"], /* CJK Ideograph Extension A */ + ["\u3CED", "\u3CED"], /* CJK Ideograph Extension A */ + ["\u3CEE", "\u3CEE"], /* CJK Ideograph Extension A */ + ["\u3CEF", "\u3CEF"], /* CJK Ideograph Extension A */ + ["\u3CF0", "\u3CF0"], /* CJK Ideograph Extension A */ + ["\u3CF1", "\u3CF1"], /* CJK Ideograph Extension A */ + ["\u3CF2", "\u3CF2"], /* CJK Ideograph Extension A */ + ["\u3CF3", "\u3CF3"], /* CJK Ideograph Extension A */ + ["\u3CF4", "\u3CF4"], /* CJK Ideograph Extension A */ + ["\u3CF5", "\u3CF5"], /* CJK Ideograph Extension A */ + ["\u3CF6", "\u3CF6"], /* CJK Ideograph Extension A */ + ["\u3CF7", "\u3CF7"], /* CJK Ideograph Extension A */ + ["\u3CF8", "\u3CF8"], /* CJK Ideograph Extension A */ + ["\u3CF9", "\u3CF9"], /* CJK Ideograph Extension A */ + ["\u3CFA", "\u3CFA"], /* CJK Ideograph Extension A */ + ["\u3CFB", "\u3CFB"], /* CJK Ideograph Extension A */ + ["\u3CFC", "\u3CFC"], /* CJK Ideograph Extension A */ + ["\u3CFD", "\u3CFD"], /* CJK Ideograph Extension A */ + ["\u3CFE", "\u3CFE"], /* CJK Ideograph Extension A */ + ["\u3CFF", "\u3CFF"], /* CJK Ideograph Extension A */ + ["\u3D00", "\u3D00"], /* CJK Ideograph Extension A */ + ["\u3D01", "\u3D01"], /* CJK Ideograph Extension A */ + ["\u3D02", "\u3D02"], /* CJK Ideograph Extension A */ + ["\u3D03", "\u3D03"], /* CJK Ideograph Extension A */ + ["\u3D04", "\u3D04"], /* CJK Ideograph Extension A */ + ["\u3D05", "\u3D05"], /* CJK Ideograph Extension A */ + ["\u3D06", "\u3D06"], /* CJK Ideograph Extension A */ + ["\u3D07", "\u3D07"], /* CJK Ideograph Extension A */ + ["\u3D08", "\u3D08"], /* CJK Ideograph Extension A */ + ["\u3D09", "\u3D09"], /* CJK Ideograph Extension A */ + ["\u3D0A", "\u3D0A"], /* CJK Ideograph Extension A */ + ["\u3D0B", "\u3D0B"], /* CJK Ideograph Extension A */ + ["\u3D0C", "\u3D0C"], /* CJK Ideograph Extension A */ + ["\u3D0D", "\u3D0D"], /* CJK Ideograph Extension A */ + ["\u3D0E", "\u3D0E"], /* CJK Ideograph Extension A */ + ["\u3D0F", "\u3D0F"], /* CJK Ideograph Extension A */ + ["\u3D10", "\u3D10"], /* CJK Ideograph Extension A */ + ["\u3D11", "\u3D11"], /* CJK Ideograph Extension A */ + ["\u3D12", "\u3D12"], /* CJK Ideograph Extension A */ + ["\u3D13", "\u3D13"], /* CJK Ideograph Extension A */ + ["\u3D14", "\u3D14"], /* CJK Ideograph Extension A */ + ["\u3D15", "\u3D15"], /* CJK Ideograph Extension A */ + ["\u3D16", "\u3D16"], /* CJK Ideograph Extension A */ + ["\u3D17", "\u3D17"], /* CJK Ideograph Extension A */ + ["\u3D18", "\u3D18"], /* CJK Ideograph Extension A */ + ["\u3D19", "\u3D19"], /* CJK Ideograph Extension A */ + ["\u3D1A", "\u3D1A"], /* CJK Ideograph Extension A */ + ["\u3D1B", "\u3D1B"], /* CJK Ideograph Extension A */ + ["\u3D1C", "\u3D1C"], /* CJK Ideograph Extension A */ + ["\u3D1D", "\u3D1D"], /* CJK Ideograph Extension A */ + ["\u3D1E", "\u3D1E"], /* CJK Ideograph Extension A */ + ["\u3D1F", "\u3D1F"], /* CJK Ideograph Extension A */ + ["\u3D20", "\u3D20"], /* CJK Ideograph Extension A */ + ["\u3D21", "\u3D21"], /* CJK Ideograph Extension A */ + ["\u3D22", "\u3D22"], /* CJK Ideograph Extension A */ + ["\u3D23", "\u3D23"], /* CJK Ideograph Extension A */ + ["\u3D24", "\u3D24"], /* CJK Ideograph Extension A */ + ["\u3D25", "\u3D25"], /* CJK Ideograph Extension A */ + ["\u3D26", "\u3D26"], /* CJK Ideograph Extension A */ + ["\u3D27", "\u3D27"], /* CJK Ideograph Extension A */ + ["\u3D28", "\u3D28"], /* CJK Ideograph Extension A */ + ["\u3D29", "\u3D29"], /* CJK Ideograph Extension A */ + ["\u3D2A", "\u3D2A"], /* CJK Ideograph Extension A */ + ["\u3D2B", "\u3D2B"], /* CJK Ideograph Extension A */ + ["\u3D2C", "\u3D2C"], /* CJK Ideograph Extension A */ + ["\u3D2D", "\u3D2D"], /* CJK Ideograph Extension A */ + ["\u3D2E", "\u3D2E"], /* CJK Ideograph Extension A */ + ["\u3D2F", "\u3D2F"], /* CJK Ideograph Extension A */ + ["\u3D30", "\u3D30"], /* CJK Ideograph Extension A */ + ["\u3D31", "\u3D31"], /* CJK Ideograph Extension A */ + ["\u3D32", "\u3D32"], /* CJK Ideograph Extension A */ + ["\u3D33", "\u3D33"], /* CJK Ideograph Extension A */ + ["\u3D34", "\u3D34"], /* CJK Ideograph Extension A */ + ["\u3D35", "\u3D35"], /* CJK Ideograph Extension A */ + ["\u3D36", "\u3D36"], /* CJK Ideograph Extension A */ + ["\u3D37", "\u3D37"], /* CJK Ideograph Extension A */ + ["\u3D38", "\u3D38"], /* CJK Ideograph Extension A */ + ["\u3D39", "\u3D39"], /* CJK Ideograph Extension A */ + ["\u3D3A", "\u3D3A"], /* CJK Ideograph Extension A */ + ["\u3D3B", "\u3D3B"], /* CJK Ideograph Extension A */ + ["\u3D3C", "\u3D3C"], /* CJK Ideograph Extension A */ + ["\u3D3D", "\u3D3D"], /* CJK Ideograph Extension A */ + ["\u3D3E", "\u3D3E"], /* CJK Ideograph Extension A */ + ["\u3D3F", "\u3D3F"], /* CJK Ideograph Extension A */ + ["\u3D40", "\u3D40"], /* CJK Ideograph Extension A */ + ["\u3D41", "\u3D41"], /* CJK Ideograph Extension A */ + ["\u3D42", "\u3D42"], /* CJK Ideograph Extension A */ + ["\u3D43", "\u3D43"], /* CJK Ideograph Extension A */ + ["\u3D44", "\u3D44"], /* CJK Ideograph Extension A */ + ["\u3D45", "\u3D45"], /* CJK Ideograph Extension A */ + ["\u3D46", "\u3D46"], /* CJK Ideograph Extension A */ + ["\u3D47", "\u3D47"], /* CJK Ideograph Extension A */ + ["\u3D48", "\u3D48"], /* CJK Ideograph Extension A */ + ["\u3D49", "\u3D49"], /* CJK Ideograph Extension A */ + ["\u3D4A", "\u3D4A"], /* CJK Ideograph Extension A */ + ["\u3D4B", "\u3D4B"], /* CJK Ideograph Extension A */ + ["\u3D4C", "\u3D4C"], /* CJK Ideograph Extension A */ + ["\u3D4D", "\u3D4D"], /* CJK Ideograph Extension A */ + ["\u3D4E", "\u3D4E"], /* CJK Ideograph Extension A */ + ["\u3D4F", "\u3D4F"], /* CJK Ideograph Extension A */ + ["\u3D50", "\u3D50"], /* CJK Ideograph Extension A */ + ["\u3D51", "\u3D51"], /* CJK Ideograph Extension A */ + ["\u3D52", "\u3D52"], /* CJK Ideograph Extension A */ + ["\u3D53", "\u3D53"], /* CJK Ideograph Extension A */ + ["\u3D54", "\u3D54"], /* CJK Ideograph Extension A */ + ["\u3D55", "\u3D55"], /* CJK Ideograph Extension A */ + ["\u3D56", "\u3D56"], /* CJK Ideograph Extension A */ + ["\u3D57", "\u3D57"], /* CJK Ideograph Extension A */ + ["\u3D58", "\u3D58"], /* CJK Ideograph Extension A */ + ["\u3D59", "\u3D59"], /* CJK Ideograph Extension A */ + ["\u3D5A", "\u3D5A"], /* CJK Ideograph Extension A */ + ["\u3D5B", "\u3D5B"], /* CJK Ideograph Extension A */ + ["\u3D5C", "\u3D5C"], /* CJK Ideograph Extension A */ + ["\u3D5D", "\u3D5D"], /* CJK Ideograph Extension A */ + ["\u3D5E", "\u3D5E"], /* CJK Ideograph Extension A */ + ["\u3D5F", "\u3D5F"], /* CJK Ideograph Extension A */ + ["\u3D60", "\u3D60"], /* CJK Ideograph Extension A */ + ["\u3D61", "\u3D61"], /* CJK Ideograph Extension A */ + ["\u3D62", "\u3D62"], /* CJK Ideograph Extension A */ + ["\u3D63", "\u3D63"], /* CJK Ideograph Extension A */ + ["\u3D64", "\u3D64"], /* CJK Ideograph Extension A */ + ["\u3D65", "\u3D65"], /* CJK Ideograph Extension A */ + ["\u3D66", "\u3D66"], /* CJK Ideograph Extension A */ + ["\u3D67", "\u3D67"], /* CJK Ideograph Extension A */ + ["\u3D68", "\u3D68"], /* CJK Ideograph Extension A */ + ["\u3D69", "\u3D69"], /* CJK Ideograph Extension A */ + ["\u3D6A", "\u3D6A"], /* CJK Ideograph Extension A */ + ["\u3D6B", "\u3D6B"], /* CJK Ideograph Extension A */ + ["\u3D6C", "\u3D6C"], /* CJK Ideograph Extension A */ + ["\u3D6D", "\u3D6D"], /* CJK Ideograph Extension A */ + ["\u3D6E", "\u3D6E"], /* CJK Ideograph Extension A */ + ["\u3D6F", "\u3D6F"], /* CJK Ideograph Extension A */ + ["\u3D70", "\u3D70"], /* CJK Ideograph Extension A */ + ["\u3D71", "\u3D71"], /* CJK Ideograph Extension A */ + ["\u3D72", "\u3D72"], /* CJK Ideograph Extension A */ + ["\u3D73", "\u3D73"], /* CJK Ideograph Extension A */ + ["\u3D74", "\u3D74"], /* CJK Ideograph Extension A */ + ["\u3D75", "\u3D75"], /* CJK Ideograph Extension A */ + ["\u3D76", "\u3D76"], /* CJK Ideograph Extension A */ + ["\u3D77", "\u3D77"], /* CJK Ideograph Extension A */ + ["\u3D78", "\u3D78"], /* CJK Ideograph Extension A */ + ["\u3D79", "\u3D79"], /* CJK Ideograph Extension A */ + ["\u3D7A", "\u3D7A"], /* CJK Ideograph Extension A */ + ["\u3D7B", "\u3D7B"], /* CJK Ideograph Extension A */ + ["\u3D7C", "\u3D7C"], /* CJK Ideograph Extension A */ + ["\u3D7D", "\u3D7D"], /* CJK Ideograph Extension A */ + ["\u3D7E", "\u3D7E"], /* CJK Ideograph Extension A */ + ["\u3D7F", "\u3D7F"], /* CJK Ideograph Extension A */ + ["\u3D80", "\u3D80"], /* CJK Ideograph Extension A */ + ["\u3D81", "\u3D81"], /* CJK Ideograph Extension A */ + ["\u3D82", "\u3D82"], /* CJK Ideograph Extension A */ + ["\u3D83", "\u3D83"], /* CJK Ideograph Extension A */ + ["\u3D84", "\u3D84"], /* CJK Ideograph Extension A */ + ["\u3D85", "\u3D85"], /* CJK Ideograph Extension A */ + ["\u3D86", "\u3D86"], /* CJK Ideograph Extension A */ + ["\u3D87", "\u3D87"], /* CJK Ideograph Extension A */ + ["\u3D88", "\u3D88"], /* CJK Ideograph Extension A */ + ["\u3D89", "\u3D89"], /* CJK Ideograph Extension A */ + ["\u3D8A", "\u3D8A"], /* CJK Ideograph Extension A */ + ["\u3D8B", "\u3D8B"], /* CJK Ideograph Extension A */ + ["\u3D8C", "\u3D8C"], /* CJK Ideograph Extension A */ + ["\u3D8D", "\u3D8D"], /* CJK Ideograph Extension A */ + ["\u3D8E", "\u3D8E"], /* CJK Ideograph Extension A */ + ["\u3D8F", "\u3D8F"], /* CJK Ideograph Extension A */ + ["\u3D90", "\u3D90"], /* CJK Ideograph Extension A */ + ["\u3D91", "\u3D91"], /* CJK Ideograph Extension A */ + ["\u3D92", "\u3D92"], /* CJK Ideograph Extension A */ + ["\u3D93", "\u3D93"], /* CJK Ideograph Extension A */ + ["\u3D94", "\u3D94"], /* CJK Ideograph Extension A */ + ["\u3D95", "\u3D95"], /* CJK Ideograph Extension A */ + ["\u3D96", "\u3D96"], /* CJK Ideograph Extension A */ + ["\u3D97", "\u3D97"], /* CJK Ideograph Extension A */ + ["\u3D98", "\u3D98"], /* CJK Ideograph Extension A */ + ["\u3D99", "\u3D99"], /* CJK Ideograph Extension A */ + ["\u3D9A", "\u3D9A"], /* CJK Ideograph Extension A */ + ["\u3D9B", "\u3D9B"], /* CJK Ideograph Extension A */ + ["\u3D9C", "\u3D9C"], /* CJK Ideograph Extension A */ + ["\u3D9D", "\u3D9D"], /* CJK Ideograph Extension A */ + ["\u3D9E", "\u3D9E"], /* CJK Ideograph Extension A */ + ["\u3D9F", "\u3D9F"], /* CJK Ideograph Extension A */ + ["\u3DA0", "\u3DA0"], /* CJK Ideograph Extension A */ + ["\u3DA1", "\u3DA1"], /* CJK Ideograph Extension A */ + ["\u3DA2", "\u3DA2"], /* CJK Ideograph Extension A */ + ["\u3DA3", "\u3DA3"], /* CJK Ideograph Extension A */ + ["\u3DA4", "\u3DA4"], /* CJK Ideograph Extension A */ + ["\u3DA5", "\u3DA5"], /* CJK Ideograph Extension A */ + ["\u3DA6", "\u3DA6"], /* CJK Ideograph Extension A */ + ["\u3DA7", "\u3DA7"], /* CJK Ideograph Extension A */ + ["\u3DA8", "\u3DA8"], /* CJK Ideograph Extension A */ + ["\u3DA9", "\u3DA9"], /* CJK Ideograph Extension A */ + ["\u3DAA", "\u3DAA"], /* CJK Ideograph Extension A */ + ["\u3DAB", "\u3DAB"], /* CJK Ideograph Extension A */ + ["\u3DAC", "\u3DAC"], /* CJK Ideograph Extension A */ + ["\u3DAD", "\u3DAD"], /* CJK Ideograph Extension A */ + ["\u3DAE", "\u3DAE"], /* CJK Ideograph Extension A */ + ["\u3DAF", "\u3DAF"], /* CJK Ideograph Extension A */ + ["\u3DB0", "\u3DB0"], /* CJK Ideograph Extension A */ + ["\u3DB1", "\u3DB1"], /* CJK Ideograph Extension A */ + ["\u3DB2", "\u3DB2"], /* CJK Ideograph Extension A */ + ["\u3DB3", "\u3DB3"], /* CJK Ideograph Extension A */ + ["\u3DB4", "\u3DB4"], /* CJK Ideograph Extension A */ + ["\u3DB5", "\u3DB5"], /* CJK Ideograph Extension A */ + ["\u3DB6", "\u3DB6"], /* CJK Ideograph Extension A */ + ["\u3DB7", "\u3DB7"], /* CJK Ideograph Extension A */ + ["\u3DB8", "\u3DB8"], /* CJK Ideograph Extension A */ + ["\u3DB9", "\u3DB9"], /* CJK Ideograph Extension A */ + ["\u3DBA", "\u3DBA"], /* CJK Ideograph Extension A */ + ["\u3DBB", "\u3DBB"], /* CJK Ideograph Extension A */ + ["\u3DBC", "\u3DBC"], /* CJK Ideograph Extension A */ + ["\u3DBD", "\u3DBD"], /* CJK Ideograph Extension A */ + ["\u3DBE", "\u3DBE"], /* CJK Ideograph Extension A */ + ["\u3DBF", "\u3DBF"], /* CJK Ideograph Extension A */ + ["\u3DC0", "\u3DC0"], /* CJK Ideograph Extension A */ + ["\u3DC1", "\u3DC1"], /* CJK Ideograph Extension A */ + ["\u3DC2", "\u3DC2"], /* CJK Ideograph Extension A */ + ["\u3DC3", "\u3DC3"], /* CJK Ideograph Extension A */ + ["\u3DC4", "\u3DC4"], /* CJK Ideograph Extension A */ + ["\u3DC5", "\u3DC5"], /* CJK Ideograph Extension A */ + ["\u3DC6", "\u3DC6"], /* CJK Ideograph Extension A */ + ["\u3DC7", "\u3DC7"], /* CJK Ideograph Extension A */ + ["\u3DC8", "\u3DC8"], /* CJK Ideograph Extension A */ + ["\u3DC9", "\u3DC9"], /* CJK Ideograph Extension A */ + ["\u3DCA", "\u3DCA"], /* CJK Ideograph Extension A */ + ["\u3DCB", "\u3DCB"], /* CJK Ideograph Extension A */ + ["\u3DCC", "\u3DCC"], /* CJK Ideograph Extension A */ + ["\u3DCD", "\u3DCD"], /* CJK Ideograph Extension A */ + ["\u3DCE", "\u3DCE"], /* CJK Ideograph Extension A */ + ["\u3DCF", "\u3DCF"], /* CJK Ideograph Extension A */ + ["\u3DD0", "\u3DD0"], /* CJK Ideograph Extension A */ + ["\u3DD1", "\u3DD1"], /* CJK Ideograph Extension A */ + ["\u3DD2", "\u3DD2"], /* CJK Ideograph Extension A */ + ["\u3DD3", "\u3DD3"], /* CJK Ideograph Extension A */ + ["\u3DD4", "\u3DD4"], /* CJK Ideograph Extension A */ + ["\u3DD5", "\u3DD5"], /* CJK Ideograph Extension A */ + ["\u3DD6", "\u3DD6"], /* CJK Ideograph Extension A */ + ["\u3DD7", "\u3DD7"], /* CJK Ideograph Extension A */ + ["\u3DD8", "\u3DD8"], /* CJK Ideograph Extension A */ + ["\u3DD9", "\u3DD9"], /* CJK Ideograph Extension A */ + ["\u3DDA", "\u3DDA"], /* CJK Ideograph Extension A */ + ["\u3DDB", "\u3DDB"], /* CJK Ideograph Extension A */ + ["\u3DDC", "\u3DDC"], /* CJK Ideograph Extension A */ + ["\u3DDD", "\u3DDD"], /* CJK Ideograph Extension A */ + ["\u3DDE", "\u3DDE"], /* CJK Ideograph Extension A */ + ["\u3DDF", "\u3DDF"], /* CJK Ideograph Extension A */ + ["\u3DE0", "\u3DE0"], /* CJK Ideograph Extension A */ + ["\u3DE1", "\u3DE1"], /* CJK Ideograph Extension A */ + ["\u3DE2", "\u3DE2"], /* CJK Ideograph Extension A */ + ["\u3DE3", "\u3DE3"], /* CJK Ideograph Extension A */ + ["\u3DE4", "\u3DE4"], /* CJK Ideograph Extension A */ + ["\u3DE5", "\u3DE5"], /* CJK Ideograph Extension A */ + ["\u3DE6", "\u3DE6"], /* CJK Ideograph Extension A */ + ["\u3DE7", "\u3DE7"], /* CJK Ideograph Extension A */ + ["\u3DE8", "\u3DE8"], /* CJK Ideograph Extension A */ + ["\u3DE9", "\u3DE9"], /* CJK Ideograph Extension A */ + ["\u3DEA", "\u3DEA"], /* CJK Ideograph Extension A */ + ["\u3DEB", "\u3DEB"], /* CJK Ideograph Extension A */ + ["\u3DEC", "\u3DEC"], /* CJK Ideograph Extension A */ + ["\u3DED", "\u3DED"], /* CJK Ideograph Extension A */ + ["\u3DEE", "\u3DEE"], /* CJK Ideograph Extension A */ + ["\u3DEF", "\u3DEF"], /* CJK Ideograph Extension A */ + ["\u3DF0", "\u3DF0"], /* CJK Ideograph Extension A */ + ["\u3DF1", "\u3DF1"], /* CJK Ideograph Extension A */ + ["\u3DF2", "\u3DF2"], /* CJK Ideograph Extension A */ + ["\u3DF3", "\u3DF3"], /* CJK Ideograph Extension A */ + ["\u3DF4", "\u3DF4"], /* CJK Ideograph Extension A */ + ["\u3DF5", "\u3DF5"], /* CJK Ideograph Extension A */ + ["\u3DF6", "\u3DF6"], /* CJK Ideograph Extension A */ + ["\u3DF7", "\u3DF7"], /* CJK Ideograph Extension A */ + ["\u3DF8", "\u3DF8"], /* CJK Ideograph Extension A */ + ["\u3DF9", "\u3DF9"], /* CJK Ideograph Extension A */ + ["\u3DFA", "\u3DFA"], /* CJK Ideograph Extension A */ + ["\u3DFB", "\u3DFB"], /* CJK Ideograph Extension A */ + ["\u3DFC", "\u3DFC"], /* CJK Ideograph Extension A */ + ["\u3DFD", "\u3DFD"], /* CJK Ideograph Extension A */ + ["\u3DFE", "\u3DFE"], /* CJK Ideograph Extension A */ + ["\u3DFF", "\u3DFF"], /* CJK Ideograph Extension A */ + ["\u3E00", "\u3E00"], /* CJK Ideograph Extension A */ + ["\u3E01", "\u3E01"], /* CJK Ideograph Extension A */ + ["\u3E02", "\u3E02"], /* CJK Ideograph Extension A */ + ["\u3E03", "\u3E03"], /* CJK Ideograph Extension A */ + ["\u3E04", "\u3E04"], /* CJK Ideograph Extension A */ + ["\u3E05", "\u3E05"], /* CJK Ideograph Extension A */ + ["\u3E06", "\u3E06"], /* CJK Ideograph Extension A */ + ["\u3E07", "\u3E07"], /* CJK Ideograph Extension A */ + ["\u3E08", "\u3E08"], /* CJK Ideograph Extension A */ + ["\u3E09", "\u3E09"], /* CJK Ideograph Extension A */ + ["\u3E0A", "\u3E0A"], /* CJK Ideograph Extension A */ + ["\u3E0B", "\u3E0B"], /* CJK Ideograph Extension A */ + ["\u3E0C", "\u3E0C"], /* CJK Ideograph Extension A */ + ["\u3E0D", "\u3E0D"], /* CJK Ideograph Extension A */ + ["\u3E0E", "\u3E0E"], /* CJK Ideograph Extension A */ + ["\u3E0F", "\u3E0F"], /* CJK Ideograph Extension A */ + ["\u3E10", "\u3E10"], /* CJK Ideograph Extension A */ + ["\u3E11", "\u3E11"], /* CJK Ideograph Extension A */ + ["\u3E12", "\u3E12"], /* CJK Ideograph Extension A */ + ["\u3E13", "\u3E13"], /* CJK Ideograph Extension A */ + ["\u3E14", "\u3E14"], /* CJK Ideograph Extension A */ + ["\u3E15", "\u3E15"], /* CJK Ideograph Extension A */ + ["\u3E16", "\u3E16"], /* CJK Ideograph Extension A */ + ["\u3E17", "\u3E17"], /* CJK Ideograph Extension A */ + ["\u3E18", "\u3E18"], /* CJK Ideograph Extension A */ + ["\u3E19", "\u3E19"], /* CJK Ideograph Extension A */ + ["\u3E1A", "\u3E1A"], /* CJK Ideograph Extension A */ + ["\u3E1B", "\u3E1B"], /* CJK Ideograph Extension A */ + ["\u3E1C", "\u3E1C"], /* CJK Ideograph Extension A */ + ["\u3E1D", "\u3E1D"], /* CJK Ideograph Extension A */ + ["\u3E1E", "\u3E1E"], /* CJK Ideograph Extension A */ + ["\u3E1F", "\u3E1F"], /* CJK Ideograph Extension A */ + ["\u3E20", "\u3E20"], /* CJK Ideograph Extension A */ + ["\u3E21", "\u3E21"], /* CJK Ideograph Extension A */ + ["\u3E22", "\u3E22"], /* CJK Ideograph Extension A */ + ["\u3E23", "\u3E23"], /* CJK Ideograph Extension A */ + ["\u3E24", "\u3E24"], /* CJK Ideograph Extension A */ + ["\u3E25", "\u3E25"], /* CJK Ideograph Extension A */ + ["\u3E26", "\u3E26"], /* CJK Ideograph Extension A */ + ["\u3E27", "\u3E27"], /* CJK Ideograph Extension A */ + ["\u3E28", "\u3E28"], /* CJK Ideograph Extension A */ + ["\u3E29", "\u3E29"], /* CJK Ideograph Extension A */ + ["\u3E2A", "\u3E2A"], /* CJK Ideograph Extension A */ + ["\u3E2B", "\u3E2B"], /* CJK Ideograph Extension A */ + ["\u3E2C", "\u3E2C"], /* CJK Ideograph Extension A */ + ["\u3E2D", "\u3E2D"], /* CJK Ideograph Extension A */ + ["\u3E2E", "\u3E2E"], /* CJK Ideograph Extension A */ + ["\u3E2F", "\u3E2F"], /* CJK Ideograph Extension A */ + ["\u3E30", "\u3E30"], /* CJK Ideograph Extension A */ + ["\u3E31", "\u3E31"], /* CJK Ideograph Extension A */ + ["\u3E32", "\u3E32"], /* CJK Ideograph Extension A */ + ["\u3E33", "\u3E33"], /* CJK Ideograph Extension A */ + ["\u3E34", "\u3E34"], /* CJK Ideograph Extension A */ + ["\u3E35", "\u3E35"], /* CJK Ideograph Extension A */ + ["\u3E36", "\u3E36"], /* CJK Ideograph Extension A */ + ["\u3E37", "\u3E37"], /* CJK Ideograph Extension A */ + ["\u3E38", "\u3E38"], /* CJK Ideograph Extension A */ + ["\u3E39", "\u3E39"], /* CJK Ideograph Extension A */ + ["\u3E3A", "\u3E3A"], /* CJK Ideograph Extension A */ + ["\u3E3B", "\u3E3B"], /* CJK Ideograph Extension A */ + ["\u3E3C", "\u3E3C"], /* CJK Ideograph Extension A */ + ["\u3E3D", "\u3E3D"], /* CJK Ideograph Extension A */ + ["\u3E3E", "\u3E3E"], /* CJK Ideograph Extension A */ + ["\u3E3F", "\u3E3F"], /* CJK Ideograph Extension A */ + ["\u3E40", "\u3E40"], /* CJK Ideograph Extension A */ + ["\u3E41", "\u3E41"], /* CJK Ideograph Extension A */ + ["\u3E42", "\u3E42"], /* CJK Ideograph Extension A */ + ["\u3E43", "\u3E43"], /* CJK Ideograph Extension A */ + ["\u3E44", "\u3E44"], /* CJK Ideograph Extension A */ + ["\u3E45", "\u3E45"], /* CJK Ideograph Extension A */ + ["\u3E46", "\u3E46"], /* CJK Ideograph Extension A */ + ["\u3E47", "\u3E47"], /* CJK Ideograph Extension A */ + ["\u3E48", "\u3E48"], /* CJK Ideograph Extension A */ + ["\u3E49", "\u3E49"], /* CJK Ideograph Extension A */ + ["\u3E4A", "\u3E4A"], /* CJK Ideograph Extension A */ + ["\u3E4B", "\u3E4B"], /* CJK Ideograph Extension A */ + ["\u3E4C", "\u3E4C"], /* CJK Ideograph Extension A */ + ["\u3E4D", "\u3E4D"], /* CJK Ideograph Extension A */ + ["\u3E4E", "\u3E4E"], /* CJK Ideograph Extension A */ + ["\u3E4F", "\u3E4F"], /* CJK Ideograph Extension A */ + ["\u3E50", "\u3E50"], /* CJK Ideograph Extension A */ + ["\u3E51", "\u3E51"], /* CJK Ideograph Extension A */ + ["\u3E52", "\u3E52"], /* CJK Ideograph Extension A */ + ["\u3E53", "\u3E53"], /* CJK Ideograph Extension A */ + ["\u3E54", "\u3E54"], /* CJK Ideograph Extension A */ + ["\u3E55", "\u3E55"], /* CJK Ideograph Extension A */ + ["\u3E56", "\u3E56"], /* CJK Ideograph Extension A */ + ["\u3E57", "\u3E57"], /* CJK Ideograph Extension A */ + ["\u3E58", "\u3E58"], /* CJK Ideograph Extension A */ + ["\u3E59", "\u3E59"], /* CJK Ideograph Extension A */ + ["\u3E5A", "\u3E5A"], /* CJK Ideograph Extension A */ + ["\u3E5B", "\u3E5B"], /* CJK Ideograph Extension A */ + ["\u3E5C", "\u3E5C"], /* CJK Ideograph Extension A */ + ["\u3E5D", "\u3E5D"], /* CJK Ideograph Extension A */ + ["\u3E5E", "\u3E5E"], /* CJK Ideograph Extension A */ + ["\u3E5F", "\u3E5F"], /* CJK Ideograph Extension A */ + ["\u3E60", "\u3E60"], /* CJK Ideograph Extension A */ + ["\u3E61", "\u3E61"], /* CJK Ideograph Extension A */ + ["\u3E62", "\u3E62"], /* CJK Ideograph Extension A */ + ["\u3E63", "\u3E63"], /* CJK Ideograph Extension A */ + ["\u3E64", "\u3E64"], /* CJK Ideograph Extension A */ + ["\u3E65", "\u3E65"], /* CJK Ideograph Extension A */ + ["\u3E66", "\u3E66"], /* CJK Ideograph Extension A */ + ["\u3E67", "\u3E67"], /* CJK Ideograph Extension A */ + ["\u3E68", "\u3E68"], /* CJK Ideograph Extension A */ + ["\u3E69", "\u3E69"], /* CJK Ideograph Extension A */ + ["\u3E6A", "\u3E6A"], /* CJK Ideograph Extension A */ + ["\u3E6B", "\u3E6B"], /* CJK Ideograph Extension A */ + ["\u3E6C", "\u3E6C"], /* CJK Ideograph Extension A */ + ["\u3E6D", "\u3E6D"], /* CJK Ideograph Extension A */ + ["\u3E6E", "\u3E6E"], /* CJK Ideograph Extension A */ + ["\u3E6F", "\u3E6F"], /* CJK Ideograph Extension A */ + ["\u3E70", "\u3E70"], /* CJK Ideograph Extension A */ + ["\u3E71", "\u3E71"], /* CJK Ideograph Extension A */ + ["\u3E72", "\u3E72"], /* CJK Ideograph Extension A */ + ["\u3E73", "\u3E73"], /* CJK Ideograph Extension A */ + ["\u3E74", "\u3E74"], /* CJK Ideograph Extension A */ + ["\u3E75", "\u3E75"], /* CJK Ideograph Extension A */ + ["\u3E76", "\u3E76"], /* CJK Ideograph Extension A */ + ["\u3E77", "\u3E77"], /* CJK Ideograph Extension A */ + ["\u3E78", "\u3E78"], /* CJK Ideograph Extension A */ + ["\u3E79", "\u3E79"], /* CJK Ideograph Extension A */ + ["\u3E7A", "\u3E7A"], /* CJK Ideograph Extension A */ + ["\u3E7B", "\u3E7B"], /* CJK Ideograph Extension A */ + ["\u3E7C", "\u3E7C"], /* CJK Ideograph Extension A */ + ["\u3E7D", "\u3E7D"], /* CJK Ideograph Extension A */ + ["\u3E7E", "\u3E7E"], /* CJK Ideograph Extension A */ + ["\u3E7F", "\u3E7F"], /* CJK Ideograph Extension A */ + ["\u3E80", "\u3E80"], /* CJK Ideograph Extension A */ + ["\u3E81", "\u3E81"], /* CJK Ideograph Extension A */ + ["\u3E82", "\u3E82"], /* CJK Ideograph Extension A */ + ["\u3E83", "\u3E83"], /* CJK Ideograph Extension A */ + ["\u3E84", "\u3E84"], /* CJK Ideograph Extension A */ + ["\u3E85", "\u3E85"], /* CJK Ideograph Extension A */ + ["\u3E86", "\u3E86"], /* CJK Ideograph Extension A */ + ["\u3E87", "\u3E87"], /* CJK Ideograph Extension A */ + ["\u3E88", "\u3E88"], /* CJK Ideograph Extension A */ + ["\u3E89", "\u3E89"], /* CJK Ideograph Extension A */ + ["\u3E8A", "\u3E8A"], /* CJK Ideograph Extension A */ + ["\u3E8B", "\u3E8B"], /* CJK Ideograph Extension A */ + ["\u3E8C", "\u3E8C"], /* CJK Ideograph Extension A */ + ["\u3E8D", "\u3E8D"], /* CJK Ideograph Extension A */ + ["\u3E8E", "\u3E8E"], /* CJK Ideograph Extension A */ + ["\u3E8F", "\u3E8F"], /* CJK Ideograph Extension A */ + ["\u3E90", "\u3E90"], /* CJK Ideograph Extension A */ + ["\u3E91", "\u3E91"], /* CJK Ideograph Extension A */ + ["\u3E92", "\u3E92"], /* CJK Ideograph Extension A */ + ["\u3E93", "\u3E93"], /* CJK Ideograph Extension A */ + ["\u3E94", "\u3E94"], /* CJK Ideograph Extension A */ + ["\u3E95", "\u3E95"], /* CJK Ideograph Extension A */ + ["\u3E96", "\u3E96"], /* CJK Ideograph Extension A */ + ["\u3E97", "\u3E97"], /* CJK Ideograph Extension A */ + ["\u3E98", "\u3E98"], /* CJK Ideograph Extension A */ + ["\u3E99", "\u3E99"], /* CJK Ideograph Extension A */ + ["\u3E9A", "\u3E9A"], /* CJK Ideograph Extension A */ + ["\u3E9B", "\u3E9B"], /* CJK Ideograph Extension A */ + ["\u3E9C", "\u3E9C"], /* CJK Ideograph Extension A */ + ["\u3E9D", "\u3E9D"], /* CJK Ideograph Extension A */ + ["\u3E9E", "\u3E9E"], /* CJK Ideograph Extension A */ + ["\u3E9F", "\u3E9F"], /* CJK Ideograph Extension A */ + ["\u3EA0", "\u3EA0"], /* CJK Ideograph Extension A */ + ["\u3EA1", "\u3EA1"], /* CJK Ideograph Extension A */ + ["\u3EA2", "\u3EA2"], /* CJK Ideograph Extension A */ + ["\u3EA3", "\u3EA3"], /* CJK Ideograph Extension A */ + ["\u3EA4", "\u3EA4"], /* CJK Ideograph Extension A */ + ["\u3EA5", "\u3EA5"], /* CJK Ideograph Extension A */ + ["\u3EA6", "\u3EA6"], /* CJK Ideograph Extension A */ + ["\u3EA7", "\u3EA7"], /* CJK Ideograph Extension A */ + ["\u3EA8", "\u3EA8"], /* CJK Ideograph Extension A */ + ["\u3EA9", "\u3EA9"], /* CJK Ideograph Extension A */ + ["\u3EAA", "\u3EAA"], /* CJK Ideograph Extension A */ + ["\u3EAB", "\u3EAB"], /* CJK Ideograph Extension A */ + ["\u3EAC", "\u3EAC"], /* CJK Ideograph Extension A */ + ["\u3EAD", "\u3EAD"], /* CJK Ideograph Extension A */ + ["\u3EAE", "\u3EAE"], /* CJK Ideograph Extension A */ + ["\u3EAF", "\u3EAF"], /* CJK Ideograph Extension A */ + ["\u3EB0", "\u3EB0"], /* CJK Ideograph Extension A */ + ["\u3EB1", "\u3EB1"], /* CJK Ideograph Extension A */ + ["\u3EB2", "\u3EB2"], /* CJK Ideograph Extension A */ + ["\u3EB3", "\u3EB3"], /* CJK Ideograph Extension A */ + ["\u3EB4", "\u3EB4"], /* CJK Ideograph Extension A */ + ["\u3EB5", "\u3EB5"], /* CJK Ideograph Extension A */ + ["\u3EB6", "\u3EB6"], /* CJK Ideograph Extension A */ + ["\u3EB7", "\u3EB7"], /* CJK Ideograph Extension A */ + ["\u3EB8", "\u3EB8"], /* CJK Ideograph Extension A */ + ["\u3EB9", "\u3EB9"], /* CJK Ideograph Extension A */ + ["\u3EBA", "\u3EBA"], /* CJK Ideograph Extension A */ + ["\u3EBB", "\u3EBB"], /* CJK Ideograph Extension A */ + ["\u3EBC", "\u3EBC"], /* CJK Ideograph Extension A */ + ["\u3EBD", "\u3EBD"], /* CJK Ideograph Extension A */ + ["\u3EBE", "\u3EBE"], /* CJK Ideograph Extension A */ + ["\u3EBF", "\u3EBF"], /* CJK Ideograph Extension A */ + ["\u3EC0", "\u3EC0"], /* CJK Ideograph Extension A */ + ["\u3EC1", "\u3EC1"], /* CJK Ideograph Extension A */ + ["\u3EC2", "\u3EC2"], /* CJK Ideograph Extension A */ + ["\u3EC3", "\u3EC3"], /* CJK Ideograph Extension A */ + ["\u3EC4", "\u3EC4"], /* CJK Ideograph Extension A */ + ["\u3EC5", "\u3EC5"], /* CJK Ideograph Extension A */ + ["\u3EC6", "\u3EC6"], /* CJK Ideograph Extension A */ + ["\u3EC7", "\u3EC7"], /* CJK Ideograph Extension A */ + ["\u3EC8", "\u3EC8"], /* CJK Ideograph Extension A */ + ["\u3EC9", "\u3EC9"], /* CJK Ideograph Extension A */ + ["\u3ECA", "\u3ECA"], /* CJK Ideograph Extension A */ + ["\u3ECB", "\u3ECB"], /* CJK Ideograph Extension A */ + ["\u3ECC", "\u3ECC"], /* CJK Ideograph Extension A */ + ["\u3ECD", "\u3ECD"], /* CJK Ideograph Extension A */ + ["\u3ECE", "\u3ECE"], /* CJK Ideograph Extension A */ + ["\u3ECF", "\u3ECF"], /* CJK Ideograph Extension A */ + ["\u3ED0", "\u3ED0"], /* CJK Ideograph Extension A */ + ["\u3ED1", "\u3ED1"], /* CJK Ideograph Extension A */ + ["\u3ED2", "\u3ED2"], /* CJK Ideograph Extension A */ + ["\u3ED3", "\u3ED3"], /* CJK Ideograph Extension A */ + ["\u3ED4", "\u3ED4"], /* CJK Ideograph Extension A */ + ["\u3ED5", "\u3ED5"], /* CJK Ideograph Extension A */ + ["\u3ED6", "\u3ED6"], /* CJK Ideograph Extension A */ + ["\u3ED7", "\u3ED7"], /* CJK Ideograph Extension A */ + ["\u3ED8", "\u3ED8"], /* CJK Ideograph Extension A */ + ["\u3ED9", "\u3ED9"], /* CJK Ideograph Extension A */ + ["\u3EDA", "\u3EDA"], /* CJK Ideograph Extension A */ + ["\u3EDB", "\u3EDB"], /* CJK Ideograph Extension A */ + ["\u3EDC", "\u3EDC"], /* CJK Ideograph Extension A */ + ["\u3EDD", "\u3EDD"], /* CJK Ideograph Extension A */ + ["\u3EDE", "\u3EDE"], /* CJK Ideograph Extension A */ + ["\u3EDF", "\u3EDF"], /* CJK Ideograph Extension A */ + ["\u3EE0", "\u3EE0"], /* CJK Ideograph Extension A */ + ["\u3EE1", "\u3EE1"], /* CJK Ideograph Extension A */ + ["\u3EE2", "\u3EE2"], /* CJK Ideograph Extension A */ + ["\u3EE3", "\u3EE3"], /* CJK Ideograph Extension A */ + ["\u3EE4", "\u3EE4"], /* CJK Ideograph Extension A */ + ["\u3EE5", "\u3EE5"], /* CJK Ideograph Extension A */ + ["\u3EE6", "\u3EE6"], /* CJK Ideograph Extension A */ + ["\u3EE7", "\u3EE7"], /* CJK Ideograph Extension A */ + ["\u3EE8", "\u3EE8"], /* CJK Ideograph Extension A */ + ["\u3EE9", "\u3EE9"], /* CJK Ideograph Extension A */ + ["\u3EEA", "\u3EEA"], /* CJK Ideograph Extension A */ + ["\u3EEB", "\u3EEB"], /* CJK Ideograph Extension A */ + ["\u3EEC", "\u3EEC"], /* CJK Ideograph Extension A */ + ["\u3EED", "\u3EED"], /* CJK Ideograph Extension A */ + ["\u3EEE", "\u3EEE"], /* CJK Ideograph Extension A */ + ["\u3EEF", "\u3EEF"], /* CJK Ideograph Extension A */ + ["\u3EF0", "\u3EF0"], /* CJK Ideograph Extension A */ + ["\u3EF1", "\u3EF1"], /* CJK Ideograph Extension A */ + ["\u3EF2", "\u3EF2"], /* CJK Ideograph Extension A */ + ["\u3EF3", "\u3EF3"], /* CJK Ideograph Extension A */ + ["\u3EF4", "\u3EF4"], /* CJK Ideograph Extension A */ + ["\u3EF5", "\u3EF5"], /* CJK Ideograph Extension A */ + ["\u3EF6", "\u3EF6"], /* CJK Ideograph Extension A */ + ["\u3EF7", "\u3EF7"], /* CJK Ideograph Extension A */ + ["\u3EF8", "\u3EF8"], /* CJK Ideograph Extension A */ + ["\u3EF9", "\u3EF9"], /* CJK Ideograph Extension A */ + ["\u3EFA", "\u3EFA"], /* CJK Ideograph Extension A */ + ["\u3EFB", "\u3EFB"], /* CJK Ideograph Extension A */ + ["\u3EFC", "\u3EFC"], /* CJK Ideograph Extension A */ + ["\u3EFD", "\u3EFD"], /* CJK Ideograph Extension A */ + ["\u3EFE", "\u3EFE"], /* CJK Ideograph Extension A */ + ["\u3EFF", "\u3EFF"], /* CJK Ideograph Extension A */ + ["\u3F00", "\u3F00"], /* CJK Ideograph Extension A */ + ["\u3F01", "\u3F01"], /* CJK Ideograph Extension A */ + ["\u3F02", "\u3F02"], /* CJK Ideograph Extension A */ + ["\u3F03", "\u3F03"], /* CJK Ideograph Extension A */ + ["\u3F04", "\u3F04"], /* CJK Ideograph Extension A */ + ["\u3F05", "\u3F05"], /* CJK Ideograph Extension A */ + ["\u3F06", "\u3F06"], /* CJK Ideograph Extension A */ + ["\u3F07", "\u3F07"], /* CJK Ideograph Extension A */ + ["\u3F08", "\u3F08"], /* CJK Ideograph Extension A */ + ["\u3F09", "\u3F09"], /* CJK Ideograph Extension A */ + ["\u3F0A", "\u3F0A"], /* CJK Ideograph Extension A */ + ["\u3F0B", "\u3F0B"], /* CJK Ideograph Extension A */ + ["\u3F0C", "\u3F0C"], /* CJK Ideograph Extension A */ + ["\u3F0D", "\u3F0D"], /* CJK Ideograph Extension A */ + ["\u3F0E", "\u3F0E"], /* CJK Ideograph Extension A */ + ["\u3F0F", "\u3F0F"], /* CJK Ideograph Extension A */ + ["\u3F10", "\u3F10"], /* CJK Ideograph Extension A */ + ["\u3F11", "\u3F11"], /* CJK Ideograph Extension A */ + ["\u3F12", "\u3F12"], /* CJK Ideograph Extension A */ + ["\u3F13", "\u3F13"], /* CJK Ideograph Extension A */ + ["\u3F14", "\u3F14"], /* CJK Ideograph Extension A */ + ["\u3F15", "\u3F15"], /* CJK Ideograph Extension A */ + ["\u3F16", "\u3F16"], /* CJK Ideograph Extension A */ + ["\u3F17", "\u3F17"], /* CJK Ideograph Extension A */ + ["\u3F18", "\u3F18"], /* CJK Ideograph Extension A */ + ["\u3F19", "\u3F19"], /* CJK Ideograph Extension A */ + ["\u3F1A", "\u3F1A"], /* CJK Ideograph Extension A */ + ["\u3F1B", "\u3F1B"], /* CJK Ideograph Extension A */ + ["\u3F1C", "\u3F1C"], /* CJK Ideograph Extension A */ + ["\u3F1D", "\u3F1D"], /* CJK Ideograph Extension A */ + ["\u3F1E", "\u3F1E"], /* CJK Ideograph Extension A */ + ["\u3F1F", "\u3F1F"], /* CJK Ideograph Extension A */ + ["\u3F20", "\u3F20"], /* CJK Ideograph Extension A */ + ["\u3F21", "\u3F21"], /* CJK Ideograph Extension A */ + ["\u3F22", "\u3F22"], /* CJK Ideograph Extension A */ + ["\u3F23", "\u3F23"], /* CJK Ideograph Extension A */ + ["\u3F24", "\u3F24"], /* CJK Ideograph Extension A */ + ["\u3F25", "\u3F25"], /* CJK Ideograph Extension A */ + ["\u3F26", "\u3F26"], /* CJK Ideograph Extension A */ + ["\u3F27", "\u3F27"], /* CJK Ideograph Extension A */ + ["\u3F28", "\u3F28"], /* CJK Ideograph Extension A */ + ["\u3F29", "\u3F29"], /* CJK Ideograph Extension A */ + ["\u3F2A", "\u3F2A"], /* CJK Ideograph Extension A */ + ["\u3F2B", "\u3F2B"], /* CJK Ideograph Extension A */ + ["\u3F2C", "\u3F2C"], /* CJK Ideograph Extension A */ + ["\u3F2D", "\u3F2D"], /* CJK Ideograph Extension A */ + ["\u3F2E", "\u3F2E"], /* CJK Ideograph Extension A */ + ["\u3F2F", "\u3F2F"], /* CJK Ideograph Extension A */ + ["\u3F30", "\u3F30"], /* CJK Ideograph Extension A */ + ["\u3F31", "\u3F31"], /* CJK Ideograph Extension A */ + ["\u3F32", "\u3F32"], /* CJK Ideograph Extension A */ + ["\u3F33", "\u3F33"], /* CJK Ideograph Extension A */ + ["\u3F34", "\u3F34"], /* CJK Ideograph Extension A */ + ["\u3F35", "\u3F35"], /* CJK Ideograph Extension A */ + ["\u3F36", "\u3F36"], /* CJK Ideograph Extension A */ + ["\u3F37", "\u3F37"], /* CJK Ideograph Extension A */ + ["\u3F38", "\u3F38"], /* CJK Ideograph Extension A */ + ["\u3F39", "\u3F39"], /* CJK Ideograph Extension A */ + ["\u3F3A", "\u3F3A"], /* CJK Ideograph Extension A */ + ["\u3F3B", "\u3F3B"], /* CJK Ideograph Extension A */ + ["\u3F3C", "\u3F3C"], /* CJK Ideograph Extension A */ + ["\u3F3D", "\u3F3D"], /* CJK Ideograph Extension A */ + ["\u3F3E", "\u3F3E"], /* CJK Ideograph Extension A */ + ["\u3F3F", "\u3F3F"], /* CJK Ideograph Extension A */ + ["\u3F40", "\u3F40"], /* CJK Ideograph Extension A */ + ["\u3F41", "\u3F41"], /* CJK Ideograph Extension A */ + ["\u3F42", "\u3F42"], /* CJK Ideograph Extension A */ + ["\u3F43", "\u3F43"], /* CJK Ideograph Extension A */ + ["\u3F44", "\u3F44"], /* CJK Ideograph Extension A */ + ["\u3F45", "\u3F45"], /* CJK Ideograph Extension A */ + ["\u3F46", "\u3F46"], /* CJK Ideograph Extension A */ + ["\u3F47", "\u3F47"], /* CJK Ideograph Extension A */ + ["\u3F48", "\u3F48"], /* CJK Ideograph Extension A */ + ["\u3F49", "\u3F49"], /* CJK Ideograph Extension A */ + ["\u3F4A", "\u3F4A"], /* CJK Ideograph Extension A */ + ["\u3F4B", "\u3F4B"], /* CJK Ideograph Extension A */ + ["\u3F4C", "\u3F4C"], /* CJK Ideograph Extension A */ + ["\u3F4D", "\u3F4D"], /* CJK Ideograph Extension A */ + ["\u3F4E", "\u3F4E"], /* CJK Ideograph Extension A */ + ["\u3F4F", "\u3F4F"], /* CJK Ideograph Extension A */ + ["\u3F50", "\u3F50"], /* CJK Ideograph Extension A */ + ["\u3F51", "\u3F51"], /* CJK Ideograph Extension A */ + ["\u3F52", "\u3F52"], /* CJK Ideograph Extension A */ + ["\u3F53", "\u3F53"], /* CJK Ideograph Extension A */ + ["\u3F54", "\u3F54"], /* CJK Ideograph Extension A */ + ["\u3F55", "\u3F55"], /* CJK Ideograph Extension A */ + ["\u3F56", "\u3F56"], /* CJK Ideograph Extension A */ + ["\u3F57", "\u3F57"], /* CJK Ideograph Extension A */ + ["\u3F58", "\u3F58"], /* CJK Ideograph Extension A */ + ["\u3F59", "\u3F59"], /* CJK Ideograph Extension A */ + ["\u3F5A", "\u3F5A"], /* CJK Ideograph Extension A */ + ["\u3F5B", "\u3F5B"], /* CJK Ideograph Extension A */ + ["\u3F5C", "\u3F5C"], /* CJK Ideograph Extension A */ + ["\u3F5D", "\u3F5D"], /* CJK Ideograph Extension A */ + ["\u3F5E", "\u3F5E"], /* CJK Ideograph Extension A */ + ["\u3F5F", "\u3F5F"], /* CJK Ideograph Extension A */ + ["\u3F60", "\u3F60"], /* CJK Ideograph Extension A */ + ["\u3F61", "\u3F61"], /* CJK Ideograph Extension A */ + ["\u3F62", "\u3F62"], /* CJK Ideograph Extension A */ + ["\u3F63", "\u3F63"], /* CJK Ideograph Extension A */ + ["\u3F64", "\u3F64"], /* CJK Ideograph Extension A */ + ["\u3F65", "\u3F65"], /* CJK Ideograph Extension A */ + ["\u3F66", "\u3F66"], /* CJK Ideograph Extension A */ + ["\u3F67", "\u3F67"], /* CJK Ideograph Extension A */ + ["\u3F68", "\u3F68"], /* CJK Ideograph Extension A */ + ["\u3F69", "\u3F69"], /* CJK Ideograph Extension A */ + ["\u3F6A", "\u3F6A"], /* CJK Ideograph Extension A */ + ["\u3F6B", "\u3F6B"], /* CJK Ideograph Extension A */ + ["\u3F6C", "\u3F6C"], /* CJK Ideograph Extension A */ + ["\u3F6D", "\u3F6D"], /* CJK Ideograph Extension A */ + ["\u3F6E", "\u3F6E"], /* CJK Ideograph Extension A */ + ["\u3F6F", "\u3F6F"], /* CJK Ideograph Extension A */ + ["\u3F70", "\u3F70"], /* CJK Ideograph Extension A */ + ["\u3F71", "\u3F71"], /* CJK Ideograph Extension A */ + ["\u3F72", "\u3F72"], /* CJK Ideograph Extension A */ + ["\u3F73", "\u3F73"], /* CJK Ideograph Extension A */ + ["\u3F74", "\u3F74"], /* CJK Ideograph Extension A */ + ["\u3F75", "\u3F75"], /* CJK Ideograph Extension A */ + ["\u3F76", "\u3F76"], /* CJK Ideograph Extension A */ + ["\u3F77", "\u3F77"], /* CJK Ideograph Extension A */ + ["\u3F78", "\u3F78"], /* CJK Ideograph Extension A */ + ["\u3F79", "\u3F79"], /* CJK Ideograph Extension A */ + ["\u3F7A", "\u3F7A"], /* CJK Ideograph Extension A */ + ["\u3F7B", "\u3F7B"], /* CJK Ideograph Extension A */ + ["\u3F7C", "\u3F7C"], /* CJK Ideograph Extension A */ + ["\u3F7D", "\u3F7D"], /* CJK Ideograph Extension A */ + ["\u3F7E", "\u3F7E"], /* CJK Ideograph Extension A */ + ["\u3F7F", "\u3F7F"], /* CJK Ideograph Extension A */ + ["\u3F80", "\u3F80"], /* CJK Ideograph Extension A */ + ["\u3F81", "\u3F81"], /* CJK Ideograph Extension A */ + ["\u3F82", "\u3F82"], /* CJK Ideograph Extension A */ + ["\u3F83", "\u3F83"], /* CJK Ideograph Extension A */ + ["\u3F84", "\u3F84"], /* CJK Ideograph Extension A */ + ["\u3F85", "\u3F85"], /* CJK Ideograph Extension A */ + ["\u3F86", "\u3F86"], /* CJK Ideograph Extension A */ + ["\u3F87", "\u3F87"], /* CJK Ideograph Extension A */ + ["\u3F88", "\u3F88"], /* CJK Ideograph Extension A */ + ["\u3F89", "\u3F89"], /* CJK Ideograph Extension A */ + ["\u3F8A", "\u3F8A"], /* CJK Ideograph Extension A */ + ["\u3F8B", "\u3F8B"], /* CJK Ideograph Extension A */ + ["\u3F8C", "\u3F8C"], /* CJK Ideograph Extension A */ + ["\u3F8D", "\u3F8D"], /* CJK Ideograph Extension A */ + ["\u3F8E", "\u3F8E"], /* CJK Ideograph Extension A */ + ["\u3F8F", "\u3F8F"], /* CJK Ideograph Extension A */ + ["\u3F90", "\u3F90"], /* CJK Ideograph Extension A */ + ["\u3F91", "\u3F91"], /* CJK Ideograph Extension A */ + ["\u3F92", "\u3F92"], /* CJK Ideograph Extension A */ + ["\u3F93", "\u3F93"], /* CJK Ideograph Extension A */ + ["\u3F94", "\u3F94"], /* CJK Ideograph Extension A */ + ["\u3F95", "\u3F95"], /* CJK Ideograph Extension A */ + ["\u3F96", "\u3F96"], /* CJK Ideograph Extension A */ + ["\u3F97", "\u3F97"], /* CJK Ideograph Extension A */ + ["\u3F98", "\u3F98"], /* CJK Ideograph Extension A */ + ["\u3F99", "\u3F99"], /* CJK Ideograph Extension A */ + ["\u3F9A", "\u3F9A"], /* CJK Ideograph Extension A */ + ["\u3F9B", "\u3F9B"], /* CJK Ideograph Extension A */ + ["\u3F9C", "\u3F9C"], /* CJK Ideograph Extension A */ + ["\u3F9D", "\u3F9D"], /* CJK Ideograph Extension A */ + ["\u3F9E", "\u3F9E"], /* CJK Ideograph Extension A */ + ["\u3F9F", "\u3F9F"], /* CJK Ideograph Extension A */ + ["\u3FA0", "\u3FA0"], /* CJK Ideograph Extension A */ + ["\u3FA1", "\u3FA1"], /* CJK Ideograph Extension A */ + ["\u3FA2", "\u3FA2"], /* CJK Ideograph Extension A */ + ["\u3FA3", "\u3FA3"], /* CJK Ideograph Extension A */ + ["\u3FA4", "\u3FA4"], /* CJK Ideograph Extension A */ + ["\u3FA5", "\u3FA5"], /* CJK Ideograph Extension A */ + ["\u3FA6", "\u3FA6"], /* CJK Ideograph Extension A */ + ["\u3FA7", "\u3FA7"], /* CJK Ideograph Extension A */ + ["\u3FA8", "\u3FA8"], /* CJK Ideograph Extension A */ + ["\u3FA9", "\u3FA9"], /* CJK Ideograph Extension A */ + ["\u3FAA", "\u3FAA"], /* CJK Ideograph Extension A */ + ["\u3FAB", "\u3FAB"], /* CJK Ideograph Extension A */ + ["\u3FAC", "\u3FAC"], /* CJK Ideograph Extension A */ + ["\u3FAD", "\u3FAD"], /* CJK Ideograph Extension A */ + ["\u3FAE", "\u3FAE"], /* CJK Ideograph Extension A */ + ["\u3FAF", "\u3FAF"], /* CJK Ideograph Extension A */ + ["\u3FB0", "\u3FB0"], /* CJK Ideograph Extension A */ + ["\u3FB1", "\u3FB1"], /* CJK Ideograph Extension A */ + ["\u3FB2", "\u3FB2"], /* CJK Ideograph Extension A */ + ["\u3FB3", "\u3FB3"], /* CJK Ideograph Extension A */ + ["\u3FB4", "\u3FB4"], /* CJK Ideograph Extension A */ + ["\u3FB5", "\u3FB5"], /* CJK Ideograph Extension A */ + ["\u3FB6", "\u3FB6"], /* CJK Ideograph Extension A */ + ["\u3FB7", "\u3FB7"], /* CJK Ideograph Extension A */ + ["\u3FB8", "\u3FB8"], /* CJK Ideograph Extension A */ + ["\u3FB9", "\u3FB9"], /* CJK Ideograph Extension A */ + ["\u3FBA", "\u3FBA"], /* CJK Ideograph Extension A */ + ["\u3FBB", "\u3FBB"], /* CJK Ideograph Extension A */ + ["\u3FBC", "\u3FBC"], /* CJK Ideograph Extension A */ + ["\u3FBD", "\u3FBD"], /* CJK Ideograph Extension A */ + ["\u3FBE", "\u3FBE"], /* CJK Ideograph Extension A */ + ["\u3FBF", "\u3FBF"], /* CJK Ideograph Extension A */ + ["\u3FC0", "\u3FC0"], /* CJK Ideograph Extension A */ + ["\u3FC1", "\u3FC1"], /* CJK Ideograph Extension A */ + ["\u3FC2", "\u3FC2"], /* CJK Ideograph Extension A */ + ["\u3FC3", "\u3FC3"], /* CJK Ideograph Extension A */ + ["\u3FC4", "\u3FC4"], /* CJK Ideograph Extension A */ + ["\u3FC5", "\u3FC5"], /* CJK Ideograph Extension A */ + ["\u3FC6", "\u3FC6"], /* CJK Ideograph Extension A */ + ["\u3FC7", "\u3FC7"], /* CJK Ideograph Extension A */ + ["\u3FC8", "\u3FC8"], /* CJK Ideograph Extension A */ + ["\u3FC9", "\u3FC9"], /* CJK Ideograph Extension A */ + ["\u3FCA", "\u3FCA"], /* CJK Ideograph Extension A */ + ["\u3FCB", "\u3FCB"], /* CJK Ideograph Extension A */ + ["\u3FCC", "\u3FCC"], /* CJK Ideograph Extension A */ + ["\u3FCD", "\u3FCD"], /* CJK Ideograph Extension A */ + ["\u3FCE", "\u3FCE"], /* CJK Ideograph Extension A */ + ["\u3FCF", "\u3FCF"], /* CJK Ideograph Extension A */ + ["\u3FD0", "\u3FD0"], /* CJK Ideograph Extension A */ + ["\u3FD1", "\u3FD1"], /* CJK Ideograph Extension A */ + ["\u3FD2", "\u3FD2"], /* CJK Ideograph Extension A */ + ["\u3FD3", "\u3FD3"], /* CJK Ideograph Extension A */ + ["\u3FD4", "\u3FD4"], /* CJK Ideograph Extension A */ + ["\u3FD5", "\u3FD5"], /* CJK Ideograph Extension A */ + ["\u3FD6", "\u3FD6"], /* CJK Ideograph Extension A */ + ["\u3FD7", "\u3FD7"], /* CJK Ideograph Extension A */ + ["\u3FD8", "\u3FD8"], /* CJK Ideograph Extension A */ + ["\u3FD9", "\u3FD9"], /* CJK Ideograph Extension A */ + ["\u3FDA", "\u3FDA"], /* CJK Ideograph Extension A */ + ["\u3FDB", "\u3FDB"], /* CJK Ideograph Extension A */ + ["\u3FDC", "\u3FDC"], /* CJK Ideograph Extension A */ + ["\u3FDD", "\u3FDD"], /* CJK Ideograph Extension A */ + ["\u3FDE", "\u3FDE"], /* CJK Ideograph Extension A */ + ["\u3FDF", "\u3FDF"], /* CJK Ideograph Extension A */ + ["\u3FE0", "\u3FE0"], /* CJK Ideograph Extension A */ + ["\u3FE1", "\u3FE1"], /* CJK Ideograph Extension A */ + ["\u3FE2", "\u3FE2"], /* CJK Ideograph Extension A */ + ["\u3FE3", "\u3FE3"], /* CJK Ideograph Extension A */ + ["\u3FE4", "\u3FE4"], /* CJK Ideograph Extension A */ + ["\u3FE5", "\u3FE5"], /* CJK Ideograph Extension A */ + ["\u3FE6", "\u3FE6"], /* CJK Ideograph Extension A */ + ["\u3FE7", "\u3FE7"], /* CJK Ideograph Extension A */ + ["\u3FE8", "\u3FE8"], /* CJK Ideograph Extension A */ + ["\u3FE9", "\u3FE9"], /* CJK Ideograph Extension A */ + ["\u3FEA", "\u3FEA"], /* CJK Ideograph Extension A */ + ["\u3FEB", "\u3FEB"], /* CJK Ideograph Extension A */ + ["\u3FEC", "\u3FEC"], /* CJK Ideograph Extension A */ + ["\u3FED", "\u3FED"], /* CJK Ideograph Extension A */ + ["\u3FEE", "\u3FEE"], /* CJK Ideograph Extension A */ + ["\u3FEF", "\u3FEF"], /* CJK Ideograph Extension A */ + ["\u3FF0", "\u3FF0"], /* CJK Ideograph Extension A */ + ["\u3FF1", "\u3FF1"], /* CJK Ideograph Extension A */ + ["\u3FF2", "\u3FF2"], /* CJK Ideograph Extension A */ + ["\u3FF3", "\u3FF3"], /* CJK Ideograph Extension A */ + ["\u3FF4", "\u3FF4"], /* CJK Ideograph Extension A */ + ["\u3FF5", "\u3FF5"], /* CJK Ideograph Extension A */ + ["\u3FF6", "\u3FF6"], /* CJK Ideograph Extension A */ + ["\u3FF7", "\u3FF7"], /* CJK Ideograph Extension A */ + ["\u3FF8", "\u3FF8"], /* CJK Ideograph Extension A */ + ["\u3FF9", "\u3FF9"], /* CJK Ideograph Extension A */ + ["\u3FFA", "\u3FFA"], /* CJK Ideograph Extension A */ + ["\u3FFB", "\u3FFB"], /* CJK Ideograph Extension A */ + ["\u3FFC", "\u3FFC"], /* CJK Ideograph Extension A */ + ["\u3FFD", "\u3FFD"], /* CJK Ideograph Extension A */ + ["\u3FFE", "\u3FFE"], /* CJK Ideograph Extension A */ + ["\u3FFF", "\u3FFF"], /* CJK Ideograph Extension A */ + ["\u4000", "\u4000"], /* CJK Ideograph Extension A */ + ["\u4001", "\u4001"], /* CJK Ideograph Extension A */ + ["\u4002", "\u4002"], /* CJK Ideograph Extension A */ + ["\u4003", "\u4003"], /* CJK Ideograph Extension A */ + ["\u4004", "\u4004"], /* CJK Ideograph Extension A */ + ["\u4005", "\u4005"], /* CJK Ideograph Extension A */ + ["\u4006", "\u4006"], /* CJK Ideograph Extension A */ + ["\u4007", "\u4007"], /* CJK Ideograph Extension A */ + ["\u4008", "\u4008"], /* CJK Ideograph Extension A */ + ["\u4009", "\u4009"], /* CJK Ideograph Extension A */ + ["\u400A", "\u400A"], /* CJK Ideograph Extension A */ + ["\u400B", "\u400B"], /* CJK Ideograph Extension A */ + ["\u400C", "\u400C"], /* CJK Ideograph Extension A */ + ["\u400D", "\u400D"], /* CJK Ideograph Extension A */ + ["\u400E", "\u400E"], /* CJK Ideograph Extension A */ + ["\u400F", "\u400F"], /* CJK Ideograph Extension A */ + ["\u4010", "\u4010"], /* CJK Ideograph Extension A */ + ["\u4011", "\u4011"], /* CJK Ideograph Extension A */ + ["\u4012", "\u4012"], /* CJK Ideograph Extension A */ + ["\u4013", "\u4013"], /* CJK Ideograph Extension A */ + ["\u4014", "\u4014"], /* CJK Ideograph Extension A */ + ["\u4015", "\u4015"], /* CJK Ideograph Extension A */ + ["\u4016", "\u4016"], /* CJK Ideograph Extension A */ + ["\u4017", "\u4017"], /* CJK Ideograph Extension A */ + ["\u4018", "\u4018"], /* CJK Ideograph Extension A */ + ["\u4019", "\u4019"], /* CJK Ideograph Extension A */ + ["\u401A", "\u401A"], /* CJK Ideograph Extension A */ + ["\u401B", "\u401B"], /* CJK Ideograph Extension A */ + ["\u401C", "\u401C"], /* CJK Ideograph Extension A */ + ["\u401D", "\u401D"], /* CJK Ideograph Extension A */ + ["\u401E", "\u401E"], /* CJK Ideograph Extension A */ + ["\u401F", "\u401F"], /* CJK Ideograph Extension A */ + ["\u4020", "\u4020"], /* CJK Ideograph Extension A */ + ["\u4021", "\u4021"], /* CJK Ideograph Extension A */ + ["\u4022", "\u4022"], /* CJK Ideograph Extension A */ + ["\u4023", "\u4023"], /* CJK Ideograph Extension A */ + ["\u4024", "\u4024"], /* CJK Ideograph Extension A */ + ["\u4025", "\u4025"], /* CJK Ideograph Extension A */ + ["\u4026", "\u4026"], /* CJK Ideograph Extension A */ + ["\u4027", "\u4027"], /* CJK Ideograph Extension A */ + ["\u4028", "\u4028"], /* CJK Ideograph Extension A */ + ["\u4029", "\u4029"], /* CJK Ideograph Extension A */ + ["\u402A", "\u402A"], /* CJK Ideograph Extension A */ + ["\u402B", "\u402B"], /* CJK Ideograph Extension A */ + ["\u402C", "\u402C"], /* CJK Ideograph Extension A */ + ["\u402D", "\u402D"], /* CJK Ideograph Extension A */ + ["\u402E", "\u402E"], /* CJK Ideograph Extension A */ + ["\u402F", "\u402F"], /* CJK Ideograph Extension A */ + ["\u4030", "\u4030"], /* CJK Ideograph Extension A */ + ["\u4031", "\u4031"], /* CJK Ideograph Extension A */ + ["\u4032", "\u4032"], /* CJK Ideograph Extension A */ + ["\u4033", "\u4033"], /* CJK Ideograph Extension A */ + ["\u4034", "\u4034"], /* CJK Ideograph Extension A */ + ["\u4035", "\u4035"], /* CJK Ideograph Extension A */ + ["\u4036", "\u4036"], /* CJK Ideograph Extension A */ + ["\u4037", "\u4037"], /* CJK Ideograph Extension A */ + ["\u4038", "\u4038"], /* CJK Ideograph Extension A */ + ["\u4039", "\u4039"], /* CJK Ideograph Extension A */ + ["\u403A", "\u403A"], /* CJK Ideograph Extension A */ + ["\u403B", "\u403B"], /* CJK Ideograph Extension A */ + ["\u403C", "\u403C"], /* CJK Ideograph Extension A */ + ["\u403D", "\u403D"], /* CJK Ideograph Extension A */ + ["\u403E", "\u403E"], /* CJK Ideograph Extension A */ + ["\u403F", "\u403F"], /* CJK Ideograph Extension A */ + ["\u4040", "\u4040"], /* CJK Ideograph Extension A */ + ["\u4041", "\u4041"], /* CJK Ideograph Extension A */ + ["\u4042", "\u4042"], /* CJK Ideograph Extension A */ + ["\u4043", "\u4043"], /* CJK Ideograph Extension A */ + ["\u4044", "\u4044"], /* CJK Ideograph Extension A */ + ["\u4045", "\u4045"], /* CJK Ideograph Extension A */ + ["\u4046", "\u4046"], /* CJK Ideograph Extension A */ + ["\u4047", "\u4047"], /* CJK Ideograph Extension A */ + ["\u4048", "\u4048"], /* CJK Ideograph Extension A */ + ["\u4049", "\u4049"], /* CJK Ideograph Extension A */ + ["\u404A", "\u404A"], /* CJK Ideograph Extension A */ + ["\u404B", "\u404B"], /* CJK Ideograph Extension A */ + ["\u404C", "\u404C"], /* CJK Ideograph Extension A */ + ["\u404D", "\u404D"], /* CJK Ideograph Extension A */ + ["\u404E", "\u404E"], /* CJK Ideograph Extension A */ + ["\u404F", "\u404F"], /* CJK Ideograph Extension A */ + ["\u4050", "\u4050"], /* CJK Ideograph Extension A */ + ["\u4051", "\u4051"], /* CJK Ideograph Extension A */ + ["\u4052", "\u4052"], /* CJK Ideograph Extension A */ + ["\u4053", "\u4053"], /* CJK Ideograph Extension A */ + ["\u4054", "\u4054"], /* CJK Ideograph Extension A */ + ["\u4055", "\u4055"], /* CJK Ideograph Extension A */ + ["\u4056", "\u4056"], /* CJK Ideograph Extension A */ + ["\u4057", "\u4057"], /* CJK Ideograph Extension A */ + ["\u4058", "\u4058"], /* CJK Ideograph Extension A */ + ["\u4059", "\u4059"], /* CJK Ideograph Extension A */ + ["\u405A", "\u405A"], /* CJK Ideograph Extension A */ + ["\u405B", "\u405B"], /* CJK Ideograph Extension A */ + ["\u405C", "\u405C"], /* CJK Ideograph Extension A */ + ["\u405D", "\u405D"], /* CJK Ideograph Extension A */ + ["\u405E", "\u405E"], /* CJK Ideograph Extension A */ + ["\u405F", "\u405F"], /* CJK Ideograph Extension A */ + ["\u4060", "\u4060"], /* CJK Ideograph Extension A */ + ["\u4061", "\u4061"], /* CJK Ideograph Extension A */ + ["\u4062", "\u4062"], /* CJK Ideograph Extension A */ + ["\u4063", "\u4063"], /* CJK Ideograph Extension A */ + ["\u4064", "\u4064"], /* CJK Ideograph Extension A */ + ["\u4065", "\u4065"], /* CJK Ideograph Extension A */ + ["\u4066", "\u4066"], /* CJK Ideograph Extension A */ + ["\u4067", "\u4067"], /* CJK Ideograph Extension A */ + ["\u4068", "\u4068"], /* CJK Ideograph Extension A */ + ["\u4069", "\u4069"], /* CJK Ideograph Extension A */ + ["\u406A", "\u406A"], /* CJK Ideograph Extension A */ + ["\u406B", "\u406B"], /* CJK Ideograph Extension A */ + ["\u406C", "\u406C"], /* CJK Ideograph Extension A */ + ["\u406D", "\u406D"], /* CJK Ideograph Extension A */ + ["\u406E", "\u406E"], /* CJK Ideograph Extension A */ + ["\u406F", "\u406F"], /* CJK Ideograph Extension A */ + ["\u4070", "\u4070"], /* CJK Ideograph Extension A */ + ["\u4071", "\u4071"], /* CJK Ideograph Extension A */ + ["\u4072", "\u4072"], /* CJK Ideograph Extension A */ + ["\u4073", "\u4073"], /* CJK Ideograph Extension A */ + ["\u4074", "\u4074"], /* CJK Ideograph Extension A */ + ["\u4075", "\u4075"], /* CJK Ideograph Extension A */ + ["\u4076", "\u4076"], /* CJK Ideograph Extension A */ + ["\u4077", "\u4077"], /* CJK Ideograph Extension A */ + ["\u4078", "\u4078"], /* CJK Ideograph Extension A */ + ["\u4079", "\u4079"], /* CJK Ideograph Extension A */ + ["\u407A", "\u407A"], /* CJK Ideograph Extension A */ + ["\u407B", "\u407B"], /* CJK Ideograph Extension A */ + ["\u407C", "\u407C"], /* CJK Ideograph Extension A */ + ["\u407D", "\u407D"], /* CJK Ideograph Extension A */ + ["\u407E", "\u407E"], /* CJK Ideograph Extension A */ + ["\u407F", "\u407F"], /* CJK Ideograph Extension A */ + ["\u4080", "\u4080"], /* CJK Ideograph Extension A */ + ["\u4081", "\u4081"], /* CJK Ideograph Extension A */ + ["\u4082", "\u4082"], /* CJK Ideograph Extension A */ + ["\u4083", "\u4083"], /* CJK Ideograph Extension A */ + ["\u4084", "\u4084"], /* CJK Ideograph Extension A */ + ["\u4085", "\u4085"], /* CJK Ideograph Extension A */ + ["\u4086", "\u4086"], /* CJK Ideograph Extension A */ + ["\u4087", "\u4087"], /* CJK Ideograph Extension A */ + ["\u4088", "\u4088"], /* CJK Ideograph Extension A */ + ["\u4089", "\u4089"], /* CJK Ideograph Extension A */ + ["\u408A", "\u408A"], /* CJK Ideograph Extension A */ + ["\u408B", "\u408B"], /* CJK Ideograph Extension A */ + ["\u408C", "\u408C"], /* CJK Ideograph Extension A */ + ["\u408D", "\u408D"], /* CJK Ideograph Extension A */ + ["\u408E", "\u408E"], /* CJK Ideograph Extension A */ + ["\u408F", "\u408F"], /* CJK Ideograph Extension A */ + ["\u4090", "\u4090"], /* CJK Ideograph Extension A */ + ["\u4091", "\u4091"], /* CJK Ideograph Extension A */ + ["\u4092", "\u4092"], /* CJK Ideograph Extension A */ + ["\u4093", "\u4093"], /* CJK Ideograph Extension A */ + ["\u4094", "\u4094"], /* CJK Ideograph Extension A */ + ["\u4095", "\u4095"], /* CJK Ideograph Extension A */ + ["\u4096", "\u4096"], /* CJK Ideograph Extension A */ + ["\u4097", "\u4097"], /* CJK Ideograph Extension A */ + ["\u4098", "\u4098"], /* CJK Ideograph Extension A */ + ["\u4099", "\u4099"], /* CJK Ideograph Extension A */ + ["\u409A", "\u409A"], /* CJK Ideograph Extension A */ + ["\u409B", "\u409B"], /* CJK Ideograph Extension A */ + ["\u409C", "\u409C"], /* CJK Ideograph Extension A */ + ["\u409D", "\u409D"], /* CJK Ideograph Extension A */ + ["\u409E", "\u409E"], /* CJK Ideograph Extension A */ + ["\u409F", "\u409F"], /* CJK Ideograph Extension A */ + ["\u40A0", "\u40A0"], /* CJK Ideograph Extension A */ + ["\u40A1", "\u40A1"], /* CJK Ideograph Extension A */ + ["\u40A2", "\u40A2"], /* CJK Ideograph Extension A */ + ["\u40A3", "\u40A3"], /* CJK Ideograph Extension A */ + ["\u40A4", "\u40A4"], /* CJK Ideograph Extension A */ + ["\u40A5", "\u40A5"], /* CJK Ideograph Extension A */ + ["\u40A6", "\u40A6"], /* CJK Ideograph Extension A */ + ["\u40A7", "\u40A7"], /* CJK Ideograph Extension A */ + ["\u40A8", "\u40A8"], /* CJK Ideograph Extension A */ + ["\u40A9", "\u40A9"], /* CJK Ideograph Extension A */ + ["\u40AA", "\u40AA"], /* CJK Ideograph Extension A */ + ["\u40AB", "\u40AB"], /* CJK Ideograph Extension A */ + ["\u40AC", "\u40AC"], /* CJK Ideograph Extension A */ + ["\u40AD", "\u40AD"], /* CJK Ideograph Extension A */ + ["\u40AE", "\u40AE"], /* CJK Ideograph Extension A */ + ["\u40AF", "\u40AF"], /* CJK Ideograph Extension A */ + ["\u40B0", "\u40B0"], /* CJK Ideograph Extension A */ + ["\u40B1", "\u40B1"], /* CJK Ideograph Extension A */ + ["\u40B2", "\u40B2"], /* CJK Ideograph Extension A */ + ["\u40B3", "\u40B3"], /* CJK Ideograph Extension A */ + ["\u40B4", "\u40B4"], /* CJK Ideograph Extension A */ + ["\u40B5", "\u40B5"], /* CJK Ideograph Extension A */ + ["\u40B6", "\u40B6"], /* CJK Ideograph Extension A */ + ["\u40B7", "\u40B7"], /* CJK Ideograph Extension A */ + ["\u40B8", "\u40B8"], /* CJK Ideograph Extension A */ + ["\u40B9", "\u40B9"], /* CJK Ideograph Extension A */ + ["\u40BA", "\u40BA"], /* CJK Ideograph Extension A */ + ["\u40BB", "\u40BB"], /* CJK Ideograph Extension A */ + ["\u40BC", "\u40BC"], /* CJK Ideograph Extension A */ + ["\u40BD", "\u40BD"], /* CJK Ideograph Extension A */ + ["\u40BE", "\u40BE"], /* CJK Ideograph Extension A */ + ["\u40BF", "\u40BF"], /* CJK Ideograph Extension A */ + ["\u40C0", "\u40C0"], /* CJK Ideograph Extension A */ + ["\u40C1", "\u40C1"], /* CJK Ideograph Extension A */ + ["\u40C2", "\u40C2"], /* CJK Ideograph Extension A */ + ["\u40C3", "\u40C3"], /* CJK Ideograph Extension A */ + ["\u40C4", "\u40C4"], /* CJK Ideograph Extension A */ + ["\u40C5", "\u40C5"], /* CJK Ideograph Extension A */ + ["\u40C6", "\u40C6"], /* CJK Ideograph Extension A */ + ["\u40C7", "\u40C7"], /* CJK Ideograph Extension A */ + ["\u40C8", "\u40C8"], /* CJK Ideograph Extension A */ + ["\u40C9", "\u40C9"], /* CJK Ideograph Extension A */ + ["\u40CA", "\u40CA"], /* CJK Ideograph Extension A */ + ["\u40CB", "\u40CB"], /* CJK Ideograph Extension A */ + ["\u40CC", "\u40CC"], /* CJK Ideograph Extension A */ + ["\u40CD", "\u40CD"], /* CJK Ideograph Extension A */ + ["\u40CE", "\u40CE"], /* CJK Ideograph Extension A */ + ["\u40CF", "\u40CF"], /* CJK Ideograph Extension A */ + ["\u40D0", "\u40D0"], /* CJK Ideograph Extension A */ + ["\u40D1", "\u40D1"], /* CJK Ideograph Extension A */ + ["\u40D2", "\u40D2"], /* CJK Ideograph Extension A */ + ["\u40D3", "\u40D3"], /* CJK Ideograph Extension A */ + ["\u40D4", "\u40D4"], /* CJK Ideograph Extension A */ + ["\u40D5", "\u40D5"], /* CJK Ideograph Extension A */ + ["\u40D6", "\u40D6"], /* CJK Ideograph Extension A */ + ["\u40D7", "\u40D7"], /* CJK Ideograph Extension A */ + ["\u40D8", "\u40D8"], /* CJK Ideograph Extension A */ + ["\u40D9", "\u40D9"], /* CJK Ideograph Extension A */ + ["\u40DA", "\u40DA"], /* CJK Ideograph Extension A */ + ["\u40DB", "\u40DB"], /* CJK Ideograph Extension A */ + ["\u40DC", "\u40DC"], /* CJK Ideograph Extension A */ + ["\u40DD", "\u40DD"], /* CJK Ideograph Extension A */ + ["\u40DE", "\u40DE"], /* CJK Ideograph Extension A */ + ["\u40DF", "\u40DF"], /* CJK Ideograph Extension A */ + ["\u40E0", "\u40E0"], /* CJK Ideograph Extension A */ + ["\u40E1", "\u40E1"], /* CJK Ideograph Extension A */ + ["\u40E2", "\u40E2"], /* CJK Ideograph Extension A */ + ["\u40E3", "\u40E3"], /* CJK Ideograph Extension A */ + ["\u40E4", "\u40E4"], /* CJK Ideograph Extension A */ + ["\u40E5", "\u40E5"], /* CJK Ideograph Extension A */ + ["\u40E6", "\u40E6"], /* CJK Ideograph Extension A */ + ["\u40E7", "\u40E7"], /* CJK Ideograph Extension A */ + ["\u40E8", "\u40E8"], /* CJK Ideograph Extension A */ + ["\u40E9", "\u40E9"], /* CJK Ideograph Extension A */ + ["\u40EA", "\u40EA"], /* CJK Ideograph Extension A */ + ["\u40EB", "\u40EB"], /* CJK Ideograph Extension A */ + ["\u40EC", "\u40EC"], /* CJK Ideograph Extension A */ + ["\u40ED", "\u40ED"], /* CJK Ideograph Extension A */ + ["\u40EE", "\u40EE"], /* CJK Ideograph Extension A */ + ["\u40EF", "\u40EF"], /* CJK Ideograph Extension A */ + ["\u40F0", "\u40F0"], /* CJK Ideograph Extension A */ + ["\u40F1", "\u40F1"], /* CJK Ideograph Extension A */ + ["\u40F2", "\u40F2"], /* CJK Ideograph Extension A */ + ["\u40F3", "\u40F3"], /* CJK Ideograph Extension A */ + ["\u40F4", "\u40F4"], /* CJK Ideograph Extension A */ + ["\u40F5", "\u40F5"], /* CJK Ideograph Extension A */ + ["\u40F6", "\u40F6"], /* CJK Ideograph Extension A */ + ["\u40F7", "\u40F7"], /* CJK Ideograph Extension A */ + ["\u40F8", "\u40F8"], /* CJK Ideograph Extension A */ + ["\u40F9", "\u40F9"], /* CJK Ideograph Extension A */ + ["\u40FA", "\u40FA"], /* CJK Ideograph Extension A */ + ["\u40FB", "\u40FB"], /* CJK Ideograph Extension A */ + ["\u40FC", "\u40FC"], /* CJK Ideograph Extension A */ + ["\u40FD", "\u40FD"], /* CJK Ideograph Extension A */ + ["\u40FE", "\u40FE"], /* CJK Ideograph Extension A */ + ["\u40FF", "\u40FF"], /* CJK Ideograph Extension A */ + ["\u4100", "\u4100"], /* CJK Ideograph Extension A */ + ["\u4101", "\u4101"], /* CJK Ideograph Extension A */ + ["\u4102", "\u4102"], /* CJK Ideograph Extension A */ + ["\u4103", "\u4103"], /* CJK Ideograph Extension A */ + ["\u4104", "\u4104"], /* CJK Ideograph Extension A */ + ["\u4105", "\u4105"], /* CJK Ideograph Extension A */ + ["\u4106", "\u4106"], /* CJK Ideograph Extension A */ + ["\u4107", "\u4107"], /* CJK Ideograph Extension A */ + ["\u4108", "\u4108"], /* CJK Ideograph Extension A */ + ["\u4109", "\u4109"], /* CJK Ideograph Extension A */ + ["\u410A", "\u410A"], /* CJK Ideograph Extension A */ + ["\u410B", "\u410B"], /* CJK Ideograph Extension A */ + ["\u410C", "\u410C"], /* CJK Ideograph Extension A */ + ["\u410D", "\u410D"], /* CJK Ideograph Extension A */ + ["\u410E", "\u410E"], /* CJK Ideograph Extension A */ + ["\u410F", "\u410F"], /* CJK Ideograph Extension A */ + ["\u4110", "\u4110"], /* CJK Ideograph Extension A */ + ["\u4111", "\u4111"], /* CJK Ideograph Extension A */ + ["\u4112", "\u4112"], /* CJK Ideograph Extension A */ + ["\u4113", "\u4113"], /* CJK Ideograph Extension A */ + ["\u4114", "\u4114"], /* CJK Ideograph Extension A */ + ["\u4115", "\u4115"], /* CJK Ideograph Extension A */ + ["\u4116", "\u4116"], /* CJK Ideograph Extension A */ + ["\u4117", "\u4117"], /* CJK Ideograph Extension A */ + ["\u4118", "\u4118"], /* CJK Ideograph Extension A */ + ["\u4119", "\u4119"], /* CJK Ideograph Extension A */ + ["\u411A", "\u411A"], /* CJK Ideograph Extension A */ + ["\u411B", "\u411B"], /* CJK Ideograph Extension A */ + ["\u411C", "\u411C"], /* CJK Ideograph Extension A */ + ["\u411D", "\u411D"], /* CJK Ideograph Extension A */ + ["\u411E", "\u411E"], /* CJK Ideograph Extension A */ + ["\u411F", "\u411F"], /* CJK Ideograph Extension A */ + ["\u4120", "\u4120"], /* CJK Ideograph Extension A */ + ["\u4121", "\u4121"], /* CJK Ideograph Extension A */ + ["\u4122", "\u4122"], /* CJK Ideograph Extension A */ + ["\u4123", "\u4123"], /* CJK Ideograph Extension A */ + ["\u4124", "\u4124"], /* CJK Ideograph Extension A */ + ["\u4125", "\u4125"], /* CJK Ideograph Extension A */ + ["\u4126", "\u4126"], /* CJK Ideograph Extension A */ + ["\u4127", "\u4127"], /* CJK Ideograph Extension A */ + ["\u4128", "\u4128"], /* CJK Ideograph Extension A */ + ["\u4129", "\u4129"], /* CJK Ideograph Extension A */ + ["\u412A", "\u412A"], /* CJK Ideograph Extension A */ + ["\u412B", "\u412B"], /* CJK Ideograph Extension A */ + ["\u412C", "\u412C"], /* CJK Ideograph Extension A */ + ["\u412D", "\u412D"], /* CJK Ideograph Extension A */ + ["\u412E", "\u412E"], /* CJK Ideograph Extension A */ + ["\u412F", "\u412F"], /* CJK Ideograph Extension A */ + ["\u4130", "\u4130"], /* CJK Ideograph Extension A */ + ["\u4131", "\u4131"], /* CJK Ideograph Extension A */ + ["\u4132", "\u4132"], /* CJK Ideograph Extension A */ + ["\u4133", "\u4133"], /* CJK Ideograph Extension A */ + ["\u4134", "\u4134"], /* CJK Ideograph Extension A */ + ["\u4135", "\u4135"], /* CJK Ideograph Extension A */ + ["\u4136", "\u4136"], /* CJK Ideograph Extension A */ + ["\u4137", "\u4137"], /* CJK Ideograph Extension A */ + ["\u4138", "\u4138"], /* CJK Ideograph Extension A */ + ["\u4139", "\u4139"], /* CJK Ideograph Extension A */ + ["\u413A", "\u413A"], /* CJK Ideograph Extension A */ + ["\u413B", "\u413B"], /* CJK Ideograph Extension A */ + ["\u413C", "\u413C"], /* CJK Ideograph Extension A */ + ["\u413D", "\u413D"], /* CJK Ideograph Extension A */ + ["\u413E", "\u413E"], /* CJK Ideograph Extension A */ + ["\u413F", "\u413F"], /* CJK Ideograph Extension A */ + ["\u4140", "\u4140"], /* CJK Ideograph Extension A */ + ["\u4141", "\u4141"], /* CJK Ideograph Extension A */ + ["\u4142", "\u4142"], /* CJK Ideograph Extension A */ + ["\u4143", "\u4143"], /* CJK Ideograph Extension A */ + ["\u4144", "\u4144"], /* CJK Ideograph Extension A */ + ["\u4145", "\u4145"], /* CJK Ideograph Extension A */ + ["\u4146", "\u4146"], /* CJK Ideograph Extension A */ + ["\u4147", "\u4147"], /* CJK Ideograph Extension A */ + ["\u4148", "\u4148"], /* CJK Ideograph Extension A */ + ["\u4149", "\u4149"], /* CJK Ideograph Extension A */ + ["\u414A", "\u414A"], /* CJK Ideograph Extension A */ + ["\u414B", "\u414B"], /* CJK Ideograph Extension A */ + ["\u414C", "\u414C"], /* CJK Ideograph Extension A */ + ["\u414D", "\u414D"], /* CJK Ideograph Extension A */ + ["\u414E", "\u414E"], /* CJK Ideograph Extension A */ + ["\u414F", "\u414F"], /* CJK Ideograph Extension A */ + ["\u4150", "\u4150"], /* CJK Ideograph Extension A */ + ["\u4151", "\u4151"], /* CJK Ideograph Extension A */ + ["\u4152", "\u4152"], /* CJK Ideograph Extension A */ + ["\u4153", "\u4153"], /* CJK Ideograph Extension A */ + ["\u4154", "\u4154"], /* CJK Ideograph Extension A */ + ["\u4155", "\u4155"], /* CJK Ideograph Extension A */ + ["\u4156", "\u4156"], /* CJK Ideograph Extension A */ + ["\u4157", "\u4157"], /* CJK Ideograph Extension A */ + ["\u4158", "\u4158"], /* CJK Ideograph Extension A */ + ["\u4159", "\u4159"], /* CJK Ideograph Extension A */ + ["\u415A", "\u415A"], /* CJK Ideograph Extension A */ + ["\u415B", "\u415B"], /* CJK Ideograph Extension A */ + ["\u415C", "\u415C"], /* CJK Ideograph Extension A */ + ["\u415D", "\u415D"], /* CJK Ideograph Extension A */ + ["\u415E", "\u415E"], /* CJK Ideograph Extension A */ + ["\u415F", "\u415F"], /* CJK Ideograph Extension A */ + ["\u4160", "\u4160"], /* CJK Ideograph Extension A */ + ["\u4161", "\u4161"], /* CJK Ideograph Extension A */ + ["\u4162", "\u4162"], /* CJK Ideograph Extension A */ + ["\u4163", "\u4163"], /* CJK Ideograph Extension A */ + ["\u4164", "\u4164"], /* CJK Ideograph Extension A */ + ["\u4165", "\u4165"], /* CJK Ideograph Extension A */ + ["\u4166", "\u4166"], /* CJK Ideograph Extension A */ + ["\u4167", "\u4167"], /* CJK Ideograph Extension A */ + ["\u4168", "\u4168"], /* CJK Ideograph Extension A */ + ["\u4169", "\u4169"], /* CJK Ideograph Extension A */ + ["\u416A", "\u416A"], /* CJK Ideograph Extension A */ + ["\u416B", "\u416B"], /* CJK Ideograph Extension A */ + ["\u416C", "\u416C"], /* CJK Ideograph Extension A */ + ["\u416D", "\u416D"], /* CJK Ideograph Extension A */ + ["\u416E", "\u416E"], /* CJK Ideograph Extension A */ + ["\u416F", "\u416F"], /* CJK Ideograph Extension A */ + ["\u4170", "\u4170"], /* CJK Ideograph Extension A */ + ["\u4171", "\u4171"], /* CJK Ideograph Extension A */ + ["\u4172", "\u4172"], /* CJK Ideograph Extension A */ + ["\u4173", "\u4173"], /* CJK Ideograph Extension A */ + ["\u4174", "\u4174"], /* CJK Ideograph Extension A */ + ["\u4175", "\u4175"], /* CJK Ideograph Extension A */ + ["\u4176", "\u4176"], /* CJK Ideograph Extension A */ + ["\u4177", "\u4177"], /* CJK Ideograph Extension A */ + ["\u4178", "\u4178"], /* CJK Ideograph Extension A */ + ["\u4179", "\u4179"], /* CJK Ideograph Extension A */ + ["\u417A", "\u417A"], /* CJK Ideograph Extension A */ + ["\u417B", "\u417B"], /* CJK Ideograph Extension A */ + ["\u417C", "\u417C"], /* CJK Ideograph Extension A */ + ["\u417D", "\u417D"], /* CJK Ideograph Extension A */ + ["\u417E", "\u417E"], /* CJK Ideograph Extension A */ + ["\u417F", "\u417F"], /* CJK Ideograph Extension A */ + ["\u4180", "\u4180"], /* CJK Ideograph Extension A */ + ["\u4181", "\u4181"], /* CJK Ideograph Extension A */ + ["\u4182", "\u4182"], /* CJK Ideograph Extension A */ + ["\u4183", "\u4183"], /* CJK Ideograph Extension A */ + ["\u4184", "\u4184"], /* CJK Ideograph Extension A */ + ["\u4185", "\u4185"], /* CJK Ideograph Extension A */ + ["\u4186", "\u4186"], /* CJK Ideograph Extension A */ + ["\u4187", "\u4187"], /* CJK Ideograph Extension A */ + ["\u4188", "\u4188"], /* CJK Ideograph Extension A */ + ["\u4189", "\u4189"], /* CJK Ideograph Extension A */ + ["\u418A", "\u418A"], /* CJK Ideograph Extension A */ + ["\u418B", "\u418B"], /* CJK Ideograph Extension A */ + ["\u418C", "\u418C"], /* CJK Ideograph Extension A */ + ["\u418D", "\u418D"], /* CJK Ideograph Extension A */ + ["\u418E", "\u418E"], /* CJK Ideograph Extension A */ + ["\u418F", "\u418F"], /* CJK Ideograph Extension A */ + ["\u4190", "\u4190"], /* CJK Ideograph Extension A */ + ["\u4191", "\u4191"], /* CJK Ideograph Extension A */ + ["\u4192", "\u4192"], /* CJK Ideograph Extension A */ + ["\u4193", "\u4193"], /* CJK Ideograph Extension A */ + ["\u4194", "\u4194"], /* CJK Ideograph Extension A */ + ["\u4195", "\u4195"], /* CJK Ideograph Extension A */ + ["\u4196", "\u4196"], /* CJK Ideograph Extension A */ + ["\u4197", "\u4197"], /* CJK Ideograph Extension A */ + ["\u4198", "\u4198"], /* CJK Ideograph Extension A */ + ["\u4199", "\u4199"], /* CJK Ideograph Extension A */ + ["\u419A", "\u419A"], /* CJK Ideograph Extension A */ + ["\u419B", "\u419B"], /* CJK Ideograph Extension A */ + ["\u419C", "\u419C"], /* CJK Ideograph Extension A */ + ["\u419D", "\u419D"], /* CJK Ideograph Extension A */ + ["\u419E", "\u419E"], /* CJK Ideograph Extension A */ + ["\u419F", "\u419F"], /* CJK Ideograph Extension A */ + ["\u41A0", "\u41A0"], /* CJK Ideograph Extension A */ + ["\u41A1", "\u41A1"], /* CJK Ideograph Extension A */ + ["\u41A2", "\u41A2"], /* CJK Ideograph Extension A */ + ["\u41A3", "\u41A3"], /* CJK Ideograph Extension A */ + ["\u41A4", "\u41A4"], /* CJK Ideograph Extension A */ + ["\u41A5", "\u41A5"], /* CJK Ideograph Extension A */ + ["\u41A6", "\u41A6"], /* CJK Ideograph Extension A */ + ["\u41A7", "\u41A7"], /* CJK Ideograph Extension A */ + ["\u41A8", "\u41A8"], /* CJK Ideograph Extension A */ + ["\u41A9", "\u41A9"], /* CJK Ideograph Extension A */ + ["\u41AA", "\u41AA"], /* CJK Ideograph Extension A */ + ["\u41AB", "\u41AB"], /* CJK Ideograph Extension A */ + ["\u41AC", "\u41AC"], /* CJK Ideograph Extension A */ + ["\u41AD", "\u41AD"], /* CJK Ideograph Extension A */ + ["\u41AE", "\u41AE"], /* CJK Ideograph Extension A */ + ["\u41AF", "\u41AF"], /* CJK Ideograph Extension A */ + ["\u41B0", "\u41B0"], /* CJK Ideograph Extension A */ + ["\u41B1", "\u41B1"], /* CJK Ideograph Extension A */ + ["\u41B2", "\u41B2"], /* CJK Ideograph Extension A */ + ["\u41B3", "\u41B3"], /* CJK Ideograph Extension A */ + ["\u41B4", "\u41B4"], /* CJK Ideograph Extension A */ + ["\u41B5", "\u41B5"], /* CJK Ideograph Extension A */ + ["\u41B6", "\u41B6"], /* CJK Ideograph Extension A */ + ["\u41B7", "\u41B7"], /* CJK Ideograph Extension A */ + ["\u41B8", "\u41B8"], /* CJK Ideograph Extension A */ + ["\u41B9", "\u41B9"], /* CJK Ideograph Extension A */ + ["\u41BA", "\u41BA"], /* CJK Ideograph Extension A */ + ["\u41BB", "\u41BB"], /* CJK Ideograph Extension A */ + ["\u41BC", "\u41BC"], /* CJK Ideograph Extension A */ + ["\u41BD", "\u41BD"], /* CJK Ideograph Extension A */ + ["\u41BE", "\u41BE"], /* CJK Ideograph Extension A */ + ["\u41BF", "\u41BF"], /* CJK Ideograph Extension A */ + ["\u41C0", "\u41C0"], /* CJK Ideograph Extension A */ + ["\u41C1", "\u41C1"], /* CJK Ideograph Extension A */ + ["\u41C2", "\u41C2"], /* CJK Ideograph Extension A */ + ["\u41C3", "\u41C3"], /* CJK Ideograph Extension A */ + ["\u41C4", "\u41C4"], /* CJK Ideograph Extension A */ + ["\u41C5", "\u41C5"], /* CJK Ideograph Extension A */ + ["\u41C6", "\u41C6"], /* CJK Ideograph Extension A */ + ["\u41C7", "\u41C7"], /* CJK Ideograph Extension A */ + ["\u41C8", "\u41C8"], /* CJK Ideograph Extension A */ + ["\u41C9", "\u41C9"], /* CJK Ideograph Extension A */ + ["\u41CA", "\u41CA"], /* CJK Ideograph Extension A */ + ["\u41CB", "\u41CB"], /* CJK Ideograph Extension A */ + ["\u41CC", "\u41CC"], /* CJK Ideograph Extension A */ + ["\u41CD", "\u41CD"], /* CJK Ideograph Extension A */ + ["\u41CE", "\u41CE"], /* CJK Ideograph Extension A */ + ["\u41CF", "\u41CF"], /* CJK Ideograph Extension A */ + ["\u41D0", "\u41D0"], /* CJK Ideograph Extension A */ + ["\u41D1", "\u41D1"], /* CJK Ideograph Extension A */ + ["\u41D2", "\u41D2"], /* CJK Ideograph Extension A */ + ["\u41D3", "\u41D3"], /* CJK Ideograph Extension A */ + ["\u41D4", "\u41D4"], /* CJK Ideograph Extension A */ + ["\u41D5", "\u41D5"], /* CJK Ideograph Extension A */ + ["\u41D6", "\u41D6"], /* CJK Ideograph Extension A */ + ["\u41D7", "\u41D7"], /* CJK Ideograph Extension A */ + ["\u41D8", "\u41D8"], /* CJK Ideograph Extension A */ + ["\u41D9", "\u41D9"], /* CJK Ideograph Extension A */ + ["\u41DA", "\u41DA"], /* CJK Ideograph Extension A */ + ["\u41DB", "\u41DB"], /* CJK Ideograph Extension A */ + ["\u41DC", "\u41DC"], /* CJK Ideograph Extension A */ + ["\u41DD", "\u41DD"], /* CJK Ideograph Extension A */ + ["\u41DE", "\u41DE"], /* CJK Ideograph Extension A */ + ["\u41DF", "\u41DF"], /* CJK Ideograph Extension A */ + ["\u41E0", "\u41E0"], /* CJK Ideograph Extension A */ + ["\u41E1", "\u41E1"], /* CJK Ideograph Extension A */ + ["\u41E2", "\u41E2"], /* CJK Ideograph Extension A */ + ["\u41E3", "\u41E3"], /* CJK Ideograph Extension A */ + ["\u41E4", "\u41E4"], /* CJK Ideograph Extension A */ + ["\u41E5", "\u41E5"], /* CJK Ideograph Extension A */ + ["\u41E6", "\u41E6"], /* CJK Ideograph Extension A */ + ["\u41E7", "\u41E7"], /* CJK Ideograph Extension A */ + ["\u41E8", "\u41E8"], /* CJK Ideograph Extension A */ + ["\u41E9", "\u41E9"], /* CJK Ideograph Extension A */ + ["\u41EA", "\u41EA"], /* CJK Ideograph Extension A */ + ["\u41EB", "\u41EB"], /* CJK Ideograph Extension A */ + ["\u41EC", "\u41EC"], /* CJK Ideograph Extension A */ + ["\u41ED", "\u41ED"], /* CJK Ideograph Extension A */ + ["\u41EE", "\u41EE"], /* CJK Ideograph Extension A */ + ["\u41EF", "\u41EF"], /* CJK Ideograph Extension A */ + ["\u41F0", "\u41F0"], /* CJK Ideograph Extension A */ + ["\u41F1", "\u41F1"], /* CJK Ideograph Extension A */ + ["\u41F2", "\u41F2"], /* CJK Ideograph Extension A */ + ["\u41F3", "\u41F3"], /* CJK Ideograph Extension A */ + ["\u41F4", "\u41F4"], /* CJK Ideograph Extension A */ + ["\u41F5", "\u41F5"], /* CJK Ideograph Extension A */ + ["\u41F6", "\u41F6"], /* CJK Ideograph Extension A */ + ["\u41F7", "\u41F7"], /* CJK Ideograph Extension A */ + ["\u41F8", "\u41F8"], /* CJK Ideograph Extension A */ + ["\u41F9", "\u41F9"], /* CJK Ideograph Extension A */ + ["\u41FA", "\u41FA"], /* CJK Ideograph Extension A */ + ["\u41FB", "\u41FB"], /* CJK Ideograph Extension A */ + ["\u41FC", "\u41FC"], /* CJK Ideograph Extension A */ + ["\u41FD", "\u41FD"], /* CJK Ideograph Extension A */ + ["\u41FE", "\u41FE"], /* CJK Ideograph Extension A */ + ["\u41FF", "\u41FF"], /* CJK Ideograph Extension A */ + ["\u4200", "\u4200"], /* CJK Ideograph Extension A */ + ["\u4201", "\u4201"], /* CJK Ideograph Extension A */ + ["\u4202", "\u4202"], /* CJK Ideograph Extension A */ + ["\u4203", "\u4203"], /* CJK Ideograph Extension A */ + ["\u4204", "\u4204"], /* CJK Ideograph Extension A */ + ["\u4205", "\u4205"], /* CJK Ideograph Extension A */ + ["\u4206", "\u4206"], /* CJK Ideograph Extension A */ + ["\u4207", "\u4207"], /* CJK Ideograph Extension A */ + ["\u4208", "\u4208"], /* CJK Ideograph Extension A */ + ["\u4209", "\u4209"], /* CJK Ideograph Extension A */ + ["\u420A", "\u420A"], /* CJK Ideograph Extension A */ + ["\u420B", "\u420B"], /* CJK Ideograph Extension A */ + ["\u420C", "\u420C"], /* CJK Ideograph Extension A */ + ["\u420D", "\u420D"], /* CJK Ideograph Extension A */ + ["\u420E", "\u420E"], /* CJK Ideograph Extension A */ + ["\u420F", "\u420F"], /* CJK Ideograph Extension A */ + ["\u4210", "\u4210"], /* CJK Ideograph Extension A */ + ["\u4211", "\u4211"], /* CJK Ideograph Extension A */ + ["\u4212", "\u4212"], /* CJK Ideograph Extension A */ + ["\u4213", "\u4213"], /* CJK Ideograph Extension A */ + ["\u4214", "\u4214"], /* CJK Ideograph Extension A */ + ["\u4215", "\u4215"], /* CJK Ideograph Extension A */ + ["\u4216", "\u4216"], /* CJK Ideograph Extension A */ + ["\u4217", "\u4217"], /* CJK Ideograph Extension A */ + ["\u4218", "\u4218"], /* CJK Ideograph Extension A */ + ["\u4219", "\u4219"], /* CJK Ideograph Extension A */ + ["\u421A", "\u421A"], /* CJK Ideograph Extension A */ + ["\u421B", "\u421B"], /* CJK Ideograph Extension A */ + ["\u421C", "\u421C"], /* CJK Ideograph Extension A */ + ["\u421D", "\u421D"], /* CJK Ideograph Extension A */ + ["\u421E", "\u421E"], /* CJK Ideograph Extension A */ + ["\u421F", "\u421F"], /* CJK Ideograph Extension A */ + ["\u4220", "\u4220"], /* CJK Ideograph Extension A */ + ["\u4221", "\u4221"], /* CJK Ideograph Extension A */ + ["\u4222", "\u4222"], /* CJK Ideograph Extension A */ + ["\u4223", "\u4223"], /* CJK Ideograph Extension A */ + ["\u4224", "\u4224"], /* CJK Ideograph Extension A */ + ["\u4225", "\u4225"], /* CJK Ideograph Extension A */ + ["\u4226", "\u4226"], /* CJK Ideograph Extension A */ + ["\u4227", "\u4227"], /* CJK Ideograph Extension A */ + ["\u4228", "\u4228"], /* CJK Ideograph Extension A */ + ["\u4229", "\u4229"], /* CJK Ideograph Extension A */ + ["\u422A", "\u422A"], /* CJK Ideograph Extension A */ + ["\u422B", "\u422B"], /* CJK Ideograph Extension A */ + ["\u422C", "\u422C"], /* CJK Ideograph Extension A */ + ["\u422D", "\u422D"], /* CJK Ideograph Extension A */ + ["\u422E", "\u422E"], /* CJK Ideograph Extension A */ + ["\u422F", "\u422F"], /* CJK Ideograph Extension A */ + ["\u4230", "\u4230"], /* CJK Ideograph Extension A */ + ["\u4231", "\u4231"], /* CJK Ideograph Extension A */ + ["\u4232", "\u4232"], /* CJK Ideograph Extension A */ + ["\u4233", "\u4233"], /* CJK Ideograph Extension A */ + ["\u4234", "\u4234"], /* CJK Ideograph Extension A */ + ["\u4235", "\u4235"], /* CJK Ideograph Extension A */ + ["\u4236", "\u4236"], /* CJK Ideograph Extension A */ + ["\u4237", "\u4237"], /* CJK Ideograph Extension A */ + ["\u4238", "\u4238"], /* CJK Ideograph Extension A */ + ["\u4239", "\u4239"], /* CJK Ideograph Extension A */ + ["\u423A", "\u423A"], /* CJK Ideograph Extension A */ + ["\u423B", "\u423B"], /* CJK Ideograph Extension A */ + ["\u423C", "\u423C"], /* CJK Ideograph Extension A */ + ["\u423D", "\u423D"], /* CJK Ideograph Extension A */ + ["\u423E", "\u423E"], /* CJK Ideograph Extension A */ + ["\u423F", "\u423F"], /* CJK Ideograph Extension A */ + ["\u4240", "\u4240"], /* CJK Ideograph Extension A */ + ["\u4241", "\u4241"], /* CJK Ideograph Extension A */ + ["\u4242", "\u4242"], /* CJK Ideograph Extension A */ + ["\u4243", "\u4243"], /* CJK Ideograph Extension A */ + ["\u4244", "\u4244"], /* CJK Ideograph Extension A */ + ["\u4245", "\u4245"], /* CJK Ideograph Extension A */ + ["\u4246", "\u4246"], /* CJK Ideograph Extension A */ + ["\u4247", "\u4247"], /* CJK Ideograph Extension A */ + ["\u4248", "\u4248"], /* CJK Ideograph Extension A */ + ["\u4249", "\u4249"], /* CJK Ideograph Extension A */ + ["\u424A", "\u424A"], /* CJK Ideograph Extension A */ + ["\u424B", "\u424B"], /* CJK Ideograph Extension A */ + ["\u424C", "\u424C"], /* CJK Ideograph Extension A */ + ["\u424D", "\u424D"], /* CJK Ideograph Extension A */ + ["\u424E", "\u424E"], /* CJK Ideograph Extension A */ + ["\u424F", "\u424F"], /* CJK Ideograph Extension A */ + ["\u4250", "\u4250"], /* CJK Ideograph Extension A */ + ["\u4251", "\u4251"], /* CJK Ideograph Extension A */ + ["\u4252", "\u4252"], /* CJK Ideograph Extension A */ + ["\u4253", "\u4253"], /* CJK Ideograph Extension A */ + ["\u4254", "\u4254"], /* CJK Ideograph Extension A */ + ["\u4255", "\u4255"], /* CJK Ideograph Extension A */ + ["\u4256", "\u4256"], /* CJK Ideograph Extension A */ + ["\u4257", "\u4257"], /* CJK Ideograph Extension A */ + ["\u4258", "\u4258"], /* CJK Ideograph Extension A */ + ["\u4259", "\u4259"], /* CJK Ideograph Extension A */ + ["\u425A", "\u425A"], /* CJK Ideograph Extension A */ + ["\u425B", "\u425B"], /* CJK Ideograph Extension A */ + ["\u425C", "\u425C"], /* CJK Ideograph Extension A */ + ["\u425D", "\u425D"], /* CJK Ideograph Extension A */ + ["\u425E", "\u425E"], /* CJK Ideograph Extension A */ + ["\u425F", "\u425F"], /* CJK Ideograph Extension A */ + ["\u4260", "\u4260"], /* CJK Ideograph Extension A */ + ["\u4261", "\u4261"], /* CJK Ideograph Extension A */ + ["\u4262", "\u4262"], /* CJK Ideograph Extension A */ + ["\u4263", "\u4263"], /* CJK Ideograph Extension A */ + ["\u4264", "\u4264"], /* CJK Ideograph Extension A */ + ["\u4265", "\u4265"], /* CJK Ideograph Extension A */ + ["\u4266", "\u4266"], /* CJK Ideograph Extension A */ + ["\u4267", "\u4267"], /* CJK Ideograph Extension A */ + ["\u4268", "\u4268"], /* CJK Ideograph Extension A */ + ["\u4269", "\u4269"], /* CJK Ideograph Extension A */ + ["\u426A", "\u426A"], /* CJK Ideograph Extension A */ + ["\u426B", "\u426B"], /* CJK Ideograph Extension A */ + ["\u426C", "\u426C"], /* CJK Ideograph Extension A */ + ["\u426D", "\u426D"], /* CJK Ideograph Extension A */ + ["\u426E", "\u426E"], /* CJK Ideograph Extension A */ + ["\u426F", "\u426F"], /* CJK Ideograph Extension A */ + ["\u4270", "\u4270"], /* CJK Ideograph Extension A */ + ["\u4271", "\u4271"], /* CJK Ideograph Extension A */ + ["\u4272", "\u4272"], /* CJK Ideograph Extension A */ + ["\u4273", "\u4273"], /* CJK Ideograph Extension A */ + ["\u4274", "\u4274"], /* CJK Ideograph Extension A */ + ["\u4275", "\u4275"], /* CJK Ideograph Extension A */ + ["\u4276", "\u4276"], /* CJK Ideograph Extension A */ + ["\u4277", "\u4277"], /* CJK Ideograph Extension A */ + ["\u4278", "\u4278"], /* CJK Ideograph Extension A */ + ["\u4279", "\u4279"], /* CJK Ideograph Extension A */ + ["\u427A", "\u427A"], /* CJK Ideograph Extension A */ + ["\u427B", "\u427B"], /* CJK Ideograph Extension A */ + ["\u427C", "\u427C"], /* CJK Ideograph Extension A */ + ["\u427D", "\u427D"], /* CJK Ideograph Extension A */ + ["\u427E", "\u427E"], /* CJK Ideograph Extension A */ + ["\u427F", "\u427F"], /* CJK Ideograph Extension A */ + ["\u4280", "\u4280"], /* CJK Ideograph Extension A */ + ["\u4281", "\u4281"], /* CJK Ideograph Extension A */ + ["\u4282", "\u4282"], /* CJK Ideograph Extension A */ + ["\u4283", "\u4283"], /* CJK Ideograph Extension A */ + ["\u4284", "\u4284"], /* CJK Ideograph Extension A */ + ["\u4285", "\u4285"], /* CJK Ideograph Extension A */ + ["\u4286", "\u4286"], /* CJK Ideograph Extension A */ + ["\u4287", "\u4287"], /* CJK Ideograph Extension A */ + ["\u4288", "\u4288"], /* CJK Ideograph Extension A */ + ["\u4289", "\u4289"], /* CJK Ideograph Extension A */ + ["\u428A", "\u428A"], /* CJK Ideograph Extension A */ + ["\u428B", "\u428B"], /* CJK Ideograph Extension A */ + ["\u428C", "\u428C"], /* CJK Ideograph Extension A */ + ["\u428D", "\u428D"], /* CJK Ideograph Extension A */ + ["\u428E", "\u428E"], /* CJK Ideograph Extension A */ + ["\u428F", "\u428F"], /* CJK Ideograph Extension A */ + ["\u4290", "\u4290"], /* CJK Ideograph Extension A */ + ["\u4291", "\u4291"], /* CJK Ideograph Extension A */ + ["\u4292", "\u4292"], /* CJK Ideograph Extension A */ + ["\u4293", "\u4293"], /* CJK Ideograph Extension A */ + ["\u4294", "\u4294"], /* CJK Ideograph Extension A */ + ["\u4295", "\u4295"], /* CJK Ideograph Extension A */ + ["\u4296", "\u4296"], /* CJK Ideograph Extension A */ + ["\u4297", "\u4297"], /* CJK Ideograph Extension A */ + ["\u4298", "\u4298"], /* CJK Ideograph Extension A */ + ["\u4299", "\u4299"], /* CJK Ideograph Extension A */ + ["\u429A", "\u429A"], /* CJK Ideograph Extension A */ + ["\u429B", "\u429B"], /* CJK Ideograph Extension A */ + ["\u429C", "\u429C"], /* CJK Ideograph Extension A */ + ["\u429D", "\u429D"], /* CJK Ideograph Extension A */ + ["\u429E", "\u429E"], /* CJK Ideograph Extension A */ + ["\u429F", "\u429F"], /* CJK Ideograph Extension A */ + ["\u42A0", "\u42A0"], /* CJK Ideograph Extension A */ + ["\u42A1", "\u42A1"], /* CJK Ideograph Extension A */ + ["\u42A2", "\u42A2"], /* CJK Ideograph Extension A */ + ["\u42A3", "\u42A3"], /* CJK Ideograph Extension A */ + ["\u42A4", "\u42A4"], /* CJK Ideograph Extension A */ + ["\u42A5", "\u42A5"], /* CJK Ideograph Extension A */ + ["\u42A6", "\u42A6"], /* CJK Ideograph Extension A */ + ["\u42A7", "\u42A7"], /* CJK Ideograph Extension A */ + ["\u42A8", "\u42A8"], /* CJK Ideograph Extension A */ + ["\u42A9", "\u42A9"], /* CJK Ideograph Extension A */ + ["\u42AA", "\u42AA"], /* CJK Ideograph Extension A */ + ["\u42AB", "\u42AB"], /* CJK Ideograph Extension A */ + ["\u42AC", "\u42AC"], /* CJK Ideograph Extension A */ + ["\u42AD", "\u42AD"], /* CJK Ideograph Extension A */ + ["\u42AE", "\u42AE"], /* CJK Ideograph Extension A */ + ["\u42AF", "\u42AF"], /* CJK Ideograph Extension A */ + ["\u42B0", "\u42B0"], /* CJK Ideograph Extension A */ + ["\u42B1", "\u42B1"], /* CJK Ideograph Extension A */ + ["\u42B2", "\u42B2"], /* CJK Ideograph Extension A */ + ["\u42B3", "\u42B3"], /* CJK Ideograph Extension A */ + ["\u42B4", "\u42B4"], /* CJK Ideograph Extension A */ + ["\u42B5", "\u42B5"], /* CJK Ideograph Extension A */ + ["\u42B6", "\u42B6"], /* CJK Ideograph Extension A */ + ["\u42B7", "\u42B7"], /* CJK Ideograph Extension A */ + ["\u42B8", "\u42B8"], /* CJK Ideograph Extension A */ + ["\u42B9", "\u42B9"], /* CJK Ideograph Extension A */ + ["\u42BA", "\u42BA"], /* CJK Ideograph Extension A */ + ["\u42BB", "\u42BB"], /* CJK Ideograph Extension A */ + ["\u42BC", "\u42BC"], /* CJK Ideograph Extension A */ + ["\u42BD", "\u42BD"], /* CJK Ideograph Extension A */ + ["\u42BE", "\u42BE"], /* CJK Ideograph Extension A */ + ["\u42BF", "\u42BF"], /* CJK Ideograph Extension A */ + ["\u42C0", "\u42C0"], /* CJK Ideograph Extension A */ + ["\u42C1", "\u42C1"], /* CJK Ideograph Extension A */ + ["\u42C2", "\u42C2"], /* CJK Ideograph Extension A */ + ["\u42C3", "\u42C3"], /* CJK Ideograph Extension A */ + ["\u42C4", "\u42C4"], /* CJK Ideograph Extension A */ + ["\u42C5", "\u42C5"], /* CJK Ideograph Extension A */ + ["\u42C6", "\u42C6"], /* CJK Ideograph Extension A */ + ["\u42C7", "\u42C7"], /* CJK Ideograph Extension A */ + ["\u42C8", "\u42C8"], /* CJK Ideograph Extension A */ + ["\u42C9", "\u42C9"], /* CJK Ideograph Extension A */ + ["\u42CA", "\u42CA"], /* CJK Ideograph Extension A */ + ["\u42CB", "\u42CB"], /* CJK Ideograph Extension A */ + ["\u42CC", "\u42CC"], /* CJK Ideograph Extension A */ + ["\u42CD", "\u42CD"], /* CJK Ideograph Extension A */ + ["\u42CE", "\u42CE"], /* CJK Ideograph Extension A */ + ["\u42CF", "\u42CF"], /* CJK Ideograph Extension A */ + ["\u42D0", "\u42D0"], /* CJK Ideograph Extension A */ + ["\u42D1", "\u42D1"], /* CJK Ideograph Extension A */ + ["\u42D2", "\u42D2"], /* CJK Ideograph Extension A */ + ["\u42D3", "\u42D3"], /* CJK Ideograph Extension A */ + ["\u42D4", "\u42D4"], /* CJK Ideograph Extension A */ + ["\u42D5", "\u42D5"], /* CJK Ideograph Extension A */ + ["\u42D6", "\u42D6"], /* CJK Ideograph Extension A */ + ["\u42D7", "\u42D7"], /* CJK Ideograph Extension A */ + ["\u42D8", "\u42D8"], /* CJK Ideograph Extension A */ + ["\u42D9", "\u42D9"], /* CJK Ideograph Extension A */ + ["\u42DA", "\u42DA"], /* CJK Ideograph Extension A */ + ["\u42DB", "\u42DB"], /* CJK Ideograph Extension A */ + ["\u42DC", "\u42DC"], /* CJK Ideograph Extension A */ + ["\u42DD", "\u42DD"], /* CJK Ideograph Extension A */ + ["\u42DE", "\u42DE"], /* CJK Ideograph Extension A */ + ["\u42DF", "\u42DF"], /* CJK Ideograph Extension A */ + ["\u42E0", "\u42E0"], /* CJK Ideograph Extension A */ + ["\u42E1", "\u42E1"], /* CJK Ideograph Extension A */ + ["\u42E2", "\u42E2"], /* CJK Ideograph Extension A */ + ["\u42E3", "\u42E3"], /* CJK Ideograph Extension A */ + ["\u42E4", "\u42E4"], /* CJK Ideograph Extension A */ + ["\u42E5", "\u42E5"], /* CJK Ideograph Extension A */ + ["\u42E6", "\u42E6"], /* CJK Ideograph Extension A */ + ["\u42E7", "\u42E7"], /* CJK Ideograph Extension A */ + ["\u42E8", "\u42E8"], /* CJK Ideograph Extension A */ + ["\u42E9", "\u42E9"], /* CJK Ideograph Extension A */ + ["\u42EA", "\u42EA"], /* CJK Ideograph Extension A */ + ["\u42EB", "\u42EB"], /* CJK Ideograph Extension A */ + ["\u42EC", "\u42EC"], /* CJK Ideograph Extension A */ + ["\u42ED", "\u42ED"], /* CJK Ideograph Extension A */ + ["\u42EE", "\u42EE"], /* CJK Ideograph Extension A */ + ["\u42EF", "\u42EF"], /* CJK Ideograph Extension A */ + ["\u42F0", "\u42F0"], /* CJK Ideograph Extension A */ + ["\u42F1", "\u42F1"], /* CJK Ideograph Extension A */ + ["\u42F2", "\u42F2"], /* CJK Ideograph Extension A */ + ["\u42F3", "\u42F3"], /* CJK Ideograph Extension A */ + ["\u42F4", "\u42F4"], /* CJK Ideograph Extension A */ + ["\u42F5", "\u42F5"], /* CJK Ideograph Extension A */ + ["\u42F6", "\u42F6"], /* CJK Ideograph Extension A */ + ["\u42F7", "\u42F7"], /* CJK Ideograph Extension A */ + ["\u42F8", "\u42F8"], /* CJK Ideograph Extension A */ + ["\u42F9", "\u42F9"], /* CJK Ideograph Extension A */ + ["\u42FA", "\u42FA"], /* CJK Ideograph Extension A */ + ["\u42FB", "\u42FB"], /* CJK Ideograph Extension A */ + ["\u42FC", "\u42FC"], /* CJK Ideograph Extension A */ + ["\u42FD", "\u42FD"], /* CJK Ideograph Extension A */ + ["\u42FE", "\u42FE"], /* CJK Ideograph Extension A */ + ["\u42FF", "\u42FF"], /* CJK Ideograph Extension A */ + ["\u4300", "\u4300"], /* CJK Ideograph Extension A */ + ["\u4301", "\u4301"], /* CJK Ideograph Extension A */ + ["\u4302", "\u4302"], /* CJK Ideograph Extension A */ + ["\u4303", "\u4303"], /* CJK Ideograph Extension A */ + ["\u4304", "\u4304"], /* CJK Ideograph Extension A */ + ["\u4305", "\u4305"], /* CJK Ideograph Extension A */ + ["\u4306", "\u4306"], /* CJK Ideograph Extension A */ + ["\u4307", "\u4307"], /* CJK Ideograph Extension A */ + ["\u4308", "\u4308"], /* CJK Ideograph Extension A */ + ["\u4309", "\u4309"], /* CJK Ideograph Extension A */ + ["\u430A", "\u430A"], /* CJK Ideograph Extension A */ + ["\u430B", "\u430B"], /* CJK Ideograph Extension A */ + ["\u430C", "\u430C"], /* CJK Ideograph Extension A */ + ["\u430D", "\u430D"], /* CJK Ideograph Extension A */ + ["\u430E", "\u430E"], /* CJK Ideograph Extension A */ + ["\u430F", "\u430F"], /* CJK Ideograph Extension A */ + ["\u4310", "\u4310"], /* CJK Ideograph Extension A */ + ["\u4311", "\u4311"], /* CJK Ideograph Extension A */ + ["\u4312", "\u4312"], /* CJK Ideograph Extension A */ + ["\u4313", "\u4313"], /* CJK Ideograph Extension A */ + ["\u4314", "\u4314"], /* CJK Ideograph Extension A */ + ["\u4315", "\u4315"], /* CJK Ideograph Extension A */ + ["\u4316", "\u4316"], /* CJK Ideograph Extension A */ + ["\u4317", "\u4317"], /* CJK Ideograph Extension A */ + ["\u4318", "\u4318"], /* CJK Ideograph Extension A */ + ["\u4319", "\u4319"], /* CJK Ideograph Extension A */ + ["\u431A", "\u431A"], /* CJK Ideograph Extension A */ + ["\u431B", "\u431B"], /* CJK Ideograph Extension A */ + ["\u431C", "\u431C"], /* CJK Ideograph Extension A */ + ["\u431D", "\u431D"], /* CJK Ideograph Extension A */ + ["\u431E", "\u431E"], /* CJK Ideograph Extension A */ + ["\u431F", "\u431F"], /* CJK Ideograph Extension A */ + ["\u4320", "\u4320"], /* CJK Ideograph Extension A */ + ["\u4321", "\u4321"], /* CJK Ideograph Extension A */ + ["\u4322", "\u4322"], /* CJK Ideograph Extension A */ + ["\u4323", "\u4323"], /* CJK Ideograph Extension A */ + ["\u4324", "\u4324"], /* CJK Ideograph Extension A */ + ["\u4325", "\u4325"], /* CJK Ideograph Extension A */ + ["\u4326", "\u4326"], /* CJK Ideograph Extension A */ + ["\u4327", "\u4327"], /* CJK Ideograph Extension A */ + ["\u4328", "\u4328"], /* CJK Ideograph Extension A */ + ["\u4329", "\u4329"], /* CJK Ideograph Extension A */ + ["\u432A", "\u432A"], /* CJK Ideograph Extension A */ + ["\u432B", "\u432B"], /* CJK Ideograph Extension A */ + ["\u432C", "\u432C"], /* CJK Ideograph Extension A */ + ["\u432D", "\u432D"], /* CJK Ideograph Extension A */ + ["\u432E", "\u432E"], /* CJK Ideograph Extension A */ + ["\u432F", "\u432F"], /* CJK Ideograph Extension A */ + ["\u4330", "\u4330"], /* CJK Ideograph Extension A */ + ["\u4331", "\u4331"], /* CJK Ideograph Extension A */ + ["\u4332", "\u4332"], /* CJK Ideograph Extension A */ + ["\u4333", "\u4333"], /* CJK Ideograph Extension A */ + ["\u4334", "\u4334"], /* CJK Ideograph Extension A */ + ["\u4335", "\u4335"], /* CJK Ideograph Extension A */ + ["\u4336", "\u4336"], /* CJK Ideograph Extension A */ + ["\u4337", "\u4337"], /* CJK Ideograph Extension A */ + ["\u4338", "\u4338"], /* CJK Ideograph Extension A */ + ["\u4339", "\u4339"], /* CJK Ideograph Extension A */ + ["\u433A", "\u433A"], /* CJK Ideograph Extension A */ + ["\u433B", "\u433B"], /* CJK Ideograph Extension A */ + ["\u433C", "\u433C"], /* CJK Ideograph Extension A */ + ["\u433D", "\u433D"], /* CJK Ideograph Extension A */ + ["\u433E", "\u433E"], /* CJK Ideograph Extension A */ + ["\u433F", "\u433F"], /* CJK Ideograph Extension A */ + ["\u4340", "\u4340"], /* CJK Ideograph Extension A */ + ["\u4341", "\u4341"], /* CJK Ideograph Extension A */ + ["\u4342", "\u4342"], /* CJK Ideograph Extension A */ + ["\u4343", "\u4343"], /* CJK Ideograph Extension A */ + ["\u4344", "\u4344"], /* CJK Ideograph Extension A */ + ["\u4345", "\u4345"], /* CJK Ideograph Extension A */ + ["\u4346", "\u4346"], /* CJK Ideograph Extension A */ + ["\u4347", "\u4347"], /* CJK Ideograph Extension A */ + ["\u4348", "\u4348"], /* CJK Ideograph Extension A */ + ["\u4349", "\u4349"], /* CJK Ideograph Extension A */ + ["\u434A", "\u434A"], /* CJK Ideograph Extension A */ + ["\u434B", "\u434B"], /* CJK Ideograph Extension A */ + ["\u434C", "\u434C"], /* CJK Ideograph Extension A */ + ["\u434D", "\u434D"], /* CJK Ideograph Extension A */ + ["\u434E", "\u434E"], /* CJK Ideograph Extension A */ + ["\u434F", "\u434F"], /* CJK Ideograph Extension A */ + ["\u4350", "\u4350"], /* CJK Ideograph Extension A */ + ["\u4351", "\u4351"], /* CJK Ideograph Extension A */ + ["\u4352", "\u4352"], /* CJK Ideograph Extension A */ + ["\u4353", "\u4353"], /* CJK Ideograph Extension A */ + ["\u4354", "\u4354"], /* CJK Ideograph Extension A */ + ["\u4355", "\u4355"], /* CJK Ideograph Extension A */ + ["\u4356", "\u4356"], /* CJK Ideograph Extension A */ + ["\u4357", "\u4357"], /* CJK Ideograph Extension A */ + ["\u4358", "\u4358"], /* CJK Ideograph Extension A */ + ["\u4359", "\u4359"], /* CJK Ideograph Extension A */ + ["\u435A", "\u435A"], /* CJK Ideograph Extension A */ + ["\u435B", "\u435B"], /* CJK Ideograph Extension A */ + ["\u435C", "\u435C"], /* CJK Ideograph Extension A */ + ["\u435D", "\u435D"], /* CJK Ideograph Extension A */ + ["\u435E", "\u435E"], /* CJK Ideograph Extension A */ + ["\u435F", "\u435F"], /* CJK Ideograph Extension A */ + ["\u4360", "\u4360"], /* CJK Ideograph Extension A */ + ["\u4361", "\u4361"], /* CJK Ideograph Extension A */ + ["\u4362", "\u4362"], /* CJK Ideograph Extension A */ + ["\u4363", "\u4363"], /* CJK Ideograph Extension A */ + ["\u4364", "\u4364"], /* CJK Ideograph Extension A */ + ["\u4365", "\u4365"], /* CJK Ideograph Extension A */ + ["\u4366", "\u4366"], /* CJK Ideograph Extension A */ + ["\u4367", "\u4367"], /* CJK Ideograph Extension A */ + ["\u4368", "\u4368"], /* CJK Ideograph Extension A */ + ["\u4369", "\u4369"], /* CJK Ideograph Extension A */ + ["\u436A", "\u436A"], /* CJK Ideograph Extension A */ + ["\u436B", "\u436B"], /* CJK Ideograph Extension A */ + ["\u436C", "\u436C"], /* CJK Ideograph Extension A */ + ["\u436D", "\u436D"], /* CJK Ideograph Extension A */ + ["\u436E", "\u436E"], /* CJK Ideograph Extension A */ + ["\u436F", "\u436F"], /* CJK Ideograph Extension A */ + ["\u4370", "\u4370"], /* CJK Ideograph Extension A */ + ["\u4371", "\u4371"], /* CJK Ideograph Extension A */ + ["\u4372", "\u4372"], /* CJK Ideograph Extension A */ + ["\u4373", "\u4373"], /* CJK Ideograph Extension A */ + ["\u4374", "\u4374"], /* CJK Ideograph Extension A */ + ["\u4375", "\u4375"], /* CJK Ideograph Extension A */ + ["\u4376", "\u4376"], /* CJK Ideograph Extension A */ + ["\u4377", "\u4377"], /* CJK Ideograph Extension A */ + ["\u4378", "\u4378"], /* CJK Ideograph Extension A */ + ["\u4379", "\u4379"], /* CJK Ideograph Extension A */ + ["\u437A", "\u437A"], /* CJK Ideograph Extension A */ + ["\u437B", "\u437B"], /* CJK Ideograph Extension A */ + ["\u437C", "\u437C"], /* CJK Ideograph Extension A */ + ["\u437D", "\u437D"], /* CJK Ideograph Extension A */ + ["\u437E", "\u437E"], /* CJK Ideograph Extension A */ + ["\u437F", "\u437F"], /* CJK Ideograph Extension A */ + ["\u4380", "\u4380"], /* CJK Ideograph Extension A */ + ["\u4381", "\u4381"], /* CJK Ideograph Extension A */ + ["\u4382", "\u4382"], /* CJK Ideograph Extension A */ + ["\u4383", "\u4383"], /* CJK Ideograph Extension A */ + ["\u4384", "\u4384"], /* CJK Ideograph Extension A */ + ["\u4385", "\u4385"], /* CJK Ideograph Extension A */ + ["\u4386", "\u4386"], /* CJK Ideograph Extension A */ + ["\u4387", "\u4387"], /* CJK Ideograph Extension A */ + ["\u4388", "\u4388"], /* CJK Ideograph Extension A */ + ["\u4389", "\u4389"], /* CJK Ideograph Extension A */ + ["\u438A", "\u438A"], /* CJK Ideograph Extension A */ + ["\u438B", "\u438B"], /* CJK Ideograph Extension A */ + ["\u438C", "\u438C"], /* CJK Ideograph Extension A */ + ["\u438D", "\u438D"], /* CJK Ideograph Extension A */ + ["\u438E", "\u438E"], /* CJK Ideograph Extension A */ + ["\u438F", "\u438F"], /* CJK Ideograph Extension A */ + ["\u4390", "\u4390"], /* CJK Ideograph Extension A */ + ["\u4391", "\u4391"], /* CJK Ideograph Extension A */ + ["\u4392", "\u4392"], /* CJK Ideograph Extension A */ + ["\u4393", "\u4393"], /* CJK Ideograph Extension A */ + ["\u4394", "\u4394"], /* CJK Ideograph Extension A */ + ["\u4395", "\u4395"], /* CJK Ideograph Extension A */ + ["\u4396", "\u4396"], /* CJK Ideograph Extension A */ + ["\u4397", "\u4397"], /* CJK Ideograph Extension A */ + ["\u4398", "\u4398"], /* CJK Ideograph Extension A */ + ["\u4399", "\u4399"], /* CJK Ideograph Extension A */ + ["\u439A", "\u439A"], /* CJK Ideograph Extension A */ + ["\u439B", "\u439B"], /* CJK Ideograph Extension A */ + ["\u439C", "\u439C"], /* CJK Ideograph Extension A */ + ["\u439D", "\u439D"], /* CJK Ideograph Extension A */ + ["\u439E", "\u439E"], /* CJK Ideograph Extension A */ + ["\u439F", "\u439F"], /* CJK Ideograph Extension A */ + ["\u43A0", "\u43A0"], /* CJK Ideograph Extension A */ + ["\u43A1", "\u43A1"], /* CJK Ideograph Extension A */ + ["\u43A2", "\u43A2"], /* CJK Ideograph Extension A */ + ["\u43A3", "\u43A3"], /* CJK Ideograph Extension A */ + ["\u43A4", "\u43A4"], /* CJK Ideograph Extension A */ + ["\u43A5", "\u43A5"], /* CJK Ideograph Extension A */ + ["\u43A6", "\u43A6"], /* CJK Ideograph Extension A */ + ["\u43A7", "\u43A7"], /* CJK Ideograph Extension A */ + ["\u43A8", "\u43A8"], /* CJK Ideograph Extension A */ + ["\u43A9", "\u43A9"], /* CJK Ideograph Extension A */ + ["\u43AA", "\u43AA"], /* CJK Ideograph Extension A */ + ["\u43AB", "\u43AB"], /* CJK Ideograph Extension A */ + ["\u43AC", "\u43AC"], /* CJK Ideograph Extension A */ + ["\u43AD", "\u43AD"], /* CJK Ideograph Extension A */ + ["\u43AE", "\u43AE"], /* CJK Ideograph Extension A */ + ["\u43AF", "\u43AF"], /* CJK Ideograph Extension A */ + ["\u43B0", "\u43B0"], /* CJK Ideograph Extension A */ + ["\u43B1", "\u43B1"], /* CJK Ideograph Extension A */ + ["\u43B2", "\u43B2"], /* CJK Ideograph Extension A */ + ["\u43B3", "\u43B3"], /* CJK Ideograph Extension A */ + ["\u43B4", "\u43B4"], /* CJK Ideograph Extension A */ + ["\u43B5", "\u43B5"], /* CJK Ideograph Extension A */ + ["\u43B6", "\u43B6"], /* CJK Ideograph Extension A */ + ["\u43B7", "\u43B7"], /* CJK Ideograph Extension A */ + ["\u43B8", "\u43B8"], /* CJK Ideograph Extension A */ + ["\u43B9", "\u43B9"], /* CJK Ideograph Extension A */ + ["\u43BA", "\u43BA"], /* CJK Ideograph Extension A */ + ["\u43BB", "\u43BB"], /* CJK Ideograph Extension A */ + ["\u43BC", "\u43BC"], /* CJK Ideograph Extension A */ + ["\u43BD", "\u43BD"], /* CJK Ideograph Extension A */ + ["\u43BE", "\u43BE"], /* CJK Ideograph Extension A */ + ["\u43BF", "\u43BF"], /* CJK Ideograph Extension A */ + ["\u43C0", "\u43C0"], /* CJK Ideograph Extension A */ + ["\u43C1", "\u43C1"], /* CJK Ideograph Extension A */ + ["\u43C2", "\u43C2"], /* CJK Ideograph Extension A */ + ["\u43C3", "\u43C3"], /* CJK Ideograph Extension A */ + ["\u43C4", "\u43C4"], /* CJK Ideograph Extension A */ + ["\u43C5", "\u43C5"], /* CJK Ideograph Extension A */ + ["\u43C6", "\u43C6"], /* CJK Ideograph Extension A */ + ["\u43C7", "\u43C7"], /* CJK Ideograph Extension A */ + ["\u43C8", "\u43C8"], /* CJK Ideograph Extension A */ + ["\u43C9", "\u43C9"], /* CJK Ideograph Extension A */ + ["\u43CA", "\u43CA"], /* CJK Ideograph Extension A */ + ["\u43CB", "\u43CB"], /* CJK Ideograph Extension A */ + ["\u43CC", "\u43CC"], /* CJK Ideograph Extension A */ + ["\u43CD", "\u43CD"], /* CJK Ideograph Extension A */ + ["\u43CE", "\u43CE"], /* CJK Ideograph Extension A */ + ["\u43CF", "\u43CF"], /* CJK Ideograph Extension A */ + ["\u43D0", "\u43D0"], /* CJK Ideograph Extension A */ + ["\u43D1", "\u43D1"], /* CJK Ideograph Extension A */ + ["\u43D2", "\u43D2"], /* CJK Ideograph Extension A */ + ["\u43D3", "\u43D3"], /* CJK Ideograph Extension A */ + ["\u43D4", "\u43D4"], /* CJK Ideograph Extension A */ + ["\u43D5", "\u43D5"], /* CJK Ideograph Extension A */ + ["\u43D6", "\u43D6"], /* CJK Ideograph Extension A */ + ["\u43D7", "\u43D7"], /* CJK Ideograph Extension A */ + ["\u43D8", "\u43D8"], /* CJK Ideograph Extension A */ + ["\u43D9", "\u43D9"], /* CJK Ideograph Extension A */ + ["\u43DA", "\u43DA"], /* CJK Ideograph Extension A */ + ["\u43DB", "\u43DB"], /* CJK Ideograph Extension A */ + ["\u43DC", "\u43DC"], /* CJK Ideograph Extension A */ + ["\u43DD", "\u43DD"], /* CJK Ideograph Extension A */ + ["\u43DE", "\u43DE"], /* CJK Ideograph Extension A */ + ["\u43DF", "\u43DF"], /* CJK Ideograph Extension A */ + ["\u43E0", "\u43E0"], /* CJK Ideograph Extension A */ + ["\u43E1", "\u43E1"], /* CJK Ideograph Extension A */ + ["\u43E2", "\u43E2"], /* CJK Ideograph Extension A */ + ["\u43E3", "\u43E3"], /* CJK Ideograph Extension A */ + ["\u43E4", "\u43E4"], /* CJK Ideograph Extension A */ + ["\u43E5", "\u43E5"], /* CJK Ideograph Extension A */ + ["\u43E6", "\u43E6"], /* CJK Ideograph Extension A */ + ["\u43E7", "\u43E7"], /* CJK Ideograph Extension A */ + ["\u43E8", "\u43E8"], /* CJK Ideograph Extension A */ + ["\u43E9", "\u43E9"], /* CJK Ideograph Extension A */ + ["\u43EA", "\u43EA"], /* CJK Ideograph Extension A */ + ["\u43EB", "\u43EB"], /* CJK Ideograph Extension A */ + ["\u43EC", "\u43EC"], /* CJK Ideograph Extension A */ + ["\u43ED", "\u43ED"], /* CJK Ideograph Extension A */ + ["\u43EE", "\u43EE"], /* CJK Ideograph Extension A */ + ["\u43EF", "\u43EF"], /* CJK Ideograph Extension A */ + ["\u43F0", "\u43F0"], /* CJK Ideograph Extension A */ + ["\u43F1", "\u43F1"], /* CJK Ideograph Extension A */ + ["\u43F2", "\u43F2"], /* CJK Ideograph Extension A */ + ["\u43F3", "\u43F3"], /* CJK Ideograph Extension A */ + ["\u43F4", "\u43F4"], /* CJK Ideograph Extension A */ + ["\u43F5", "\u43F5"], /* CJK Ideograph Extension A */ + ["\u43F6", "\u43F6"], /* CJK Ideograph Extension A */ + ["\u43F7", "\u43F7"], /* CJK Ideograph Extension A */ + ["\u43F8", "\u43F8"], /* CJK Ideograph Extension A */ + ["\u43F9", "\u43F9"], /* CJK Ideograph Extension A */ + ["\u43FA", "\u43FA"], /* CJK Ideograph Extension A */ + ["\u43FB", "\u43FB"], /* CJK Ideograph Extension A */ + ["\u43FC", "\u43FC"], /* CJK Ideograph Extension A */ + ["\u43FD", "\u43FD"], /* CJK Ideograph Extension A */ + ["\u43FE", "\u43FE"], /* CJK Ideograph Extension A */ + ["\u43FF", "\u43FF"], /* CJK Ideograph Extension A */ + ["\u4400", "\u4400"], /* CJK Ideograph Extension A */ + ["\u4401", "\u4401"], /* CJK Ideograph Extension A */ + ["\u4402", "\u4402"], /* CJK Ideograph Extension A */ + ["\u4403", "\u4403"], /* CJK Ideograph Extension A */ + ["\u4404", "\u4404"], /* CJK Ideograph Extension A */ + ["\u4405", "\u4405"], /* CJK Ideograph Extension A */ + ["\u4406", "\u4406"], /* CJK Ideograph Extension A */ + ["\u4407", "\u4407"], /* CJK Ideograph Extension A */ + ["\u4408", "\u4408"], /* CJK Ideograph Extension A */ + ["\u4409", "\u4409"], /* CJK Ideograph Extension A */ + ["\u440A", "\u440A"], /* CJK Ideograph Extension A */ + ["\u440B", "\u440B"], /* CJK Ideograph Extension A */ + ["\u440C", "\u440C"], /* CJK Ideograph Extension A */ + ["\u440D", "\u440D"], /* CJK Ideograph Extension A */ + ["\u440E", "\u440E"], /* CJK Ideograph Extension A */ + ["\u440F", "\u440F"], /* CJK Ideograph Extension A */ + ["\u4410", "\u4410"], /* CJK Ideograph Extension A */ + ["\u4411", "\u4411"], /* CJK Ideograph Extension A */ + ["\u4412", "\u4412"], /* CJK Ideograph Extension A */ + ["\u4413", "\u4413"], /* CJK Ideograph Extension A */ + ["\u4414", "\u4414"], /* CJK Ideograph Extension A */ + ["\u4415", "\u4415"], /* CJK Ideograph Extension A */ + ["\u4416", "\u4416"], /* CJK Ideograph Extension A */ + ["\u4417", "\u4417"], /* CJK Ideograph Extension A */ + ["\u4418", "\u4418"], /* CJK Ideograph Extension A */ + ["\u4419", "\u4419"], /* CJK Ideograph Extension A */ + ["\u441A", "\u441A"], /* CJK Ideograph Extension A */ + ["\u441B", "\u441B"], /* CJK Ideograph Extension A */ + ["\u441C", "\u441C"], /* CJK Ideograph Extension A */ + ["\u441D", "\u441D"], /* CJK Ideograph Extension A */ + ["\u441E", "\u441E"], /* CJK Ideograph Extension A */ + ["\u441F", "\u441F"], /* CJK Ideograph Extension A */ + ["\u4420", "\u4420"], /* CJK Ideograph Extension A */ + ["\u4421", "\u4421"], /* CJK Ideograph Extension A */ + ["\u4422", "\u4422"], /* CJK Ideograph Extension A */ + ["\u4423", "\u4423"], /* CJK Ideograph Extension A */ + ["\u4424", "\u4424"], /* CJK Ideograph Extension A */ + ["\u4425", "\u4425"], /* CJK Ideograph Extension A */ + ["\u4426", "\u4426"], /* CJK Ideograph Extension A */ + ["\u4427", "\u4427"], /* CJK Ideograph Extension A */ + ["\u4428", "\u4428"], /* CJK Ideograph Extension A */ + ["\u4429", "\u4429"], /* CJK Ideograph Extension A */ + ["\u442A", "\u442A"], /* CJK Ideograph Extension A */ + ["\u442B", "\u442B"], /* CJK Ideograph Extension A */ + ["\u442C", "\u442C"], /* CJK Ideograph Extension A */ + ["\u442D", "\u442D"], /* CJK Ideograph Extension A */ + ["\u442E", "\u442E"], /* CJK Ideograph Extension A */ + ["\u442F", "\u442F"], /* CJK Ideograph Extension A */ + ["\u4430", "\u4430"], /* CJK Ideograph Extension A */ + ["\u4431", "\u4431"], /* CJK Ideograph Extension A */ + ["\u4432", "\u4432"], /* CJK Ideograph Extension A */ + ["\u4433", "\u4433"], /* CJK Ideograph Extension A */ + ["\u4434", "\u4434"], /* CJK Ideograph Extension A */ + ["\u4435", "\u4435"], /* CJK Ideograph Extension A */ + ["\u4436", "\u4436"], /* CJK Ideograph Extension A */ + ["\u4437", "\u4437"], /* CJK Ideograph Extension A */ + ["\u4438", "\u4438"], /* CJK Ideograph Extension A */ + ["\u4439", "\u4439"], /* CJK Ideograph Extension A */ + ["\u443A", "\u443A"], /* CJK Ideograph Extension A */ + ["\u443B", "\u443B"], /* CJK Ideograph Extension A */ + ["\u443C", "\u443C"], /* CJK Ideograph Extension A */ + ["\u443D", "\u443D"], /* CJK Ideograph Extension A */ + ["\u443E", "\u443E"], /* CJK Ideograph Extension A */ + ["\u443F", "\u443F"], /* CJK Ideograph Extension A */ + ["\u4440", "\u4440"], /* CJK Ideograph Extension A */ + ["\u4441", "\u4441"], /* CJK Ideograph Extension A */ + ["\u4442", "\u4442"], /* CJK Ideograph Extension A */ + ["\u4443", "\u4443"], /* CJK Ideograph Extension A */ + ["\u4444", "\u4444"], /* CJK Ideograph Extension A */ + ["\u4445", "\u4445"], /* CJK Ideograph Extension A */ + ["\u4446", "\u4446"], /* CJK Ideograph Extension A */ + ["\u4447", "\u4447"], /* CJK Ideograph Extension A */ + ["\u4448", "\u4448"], /* CJK Ideograph Extension A */ + ["\u4449", "\u4449"], /* CJK Ideograph Extension A */ + ["\u444A", "\u444A"], /* CJK Ideograph Extension A */ + ["\u444B", "\u444B"], /* CJK Ideograph Extension A */ + ["\u444C", "\u444C"], /* CJK Ideograph Extension A */ + ["\u444D", "\u444D"], /* CJK Ideograph Extension A */ + ["\u444E", "\u444E"], /* CJK Ideograph Extension A */ + ["\u444F", "\u444F"], /* CJK Ideograph Extension A */ + ["\u4450", "\u4450"], /* CJK Ideograph Extension A */ + ["\u4451", "\u4451"], /* CJK Ideograph Extension A */ + ["\u4452", "\u4452"], /* CJK Ideograph Extension A */ + ["\u4453", "\u4453"], /* CJK Ideograph Extension A */ + ["\u4454", "\u4454"], /* CJK Ideograph Extension A */ + ["\u4455", "\u4455"], /* CJK Ideograph Extension A */ + ["\u4456", "\u4456"], /* CJK Ideograph Extension A */ + ["\u4457", "\u4457"], /* CJK Ideograph Extension A */ + ["\u4458", "\u4458"], /* CJK Ideograph Extension A */ + ["\u4459", "\u4459"], /* CJK Ideograph Extension A */ + ["\u445A", "\u445A"], /* CJK Ideograph Extension A */ + ["\u445B", "\u445B"], /* CJK Ideograph Extension A */ + ["\u445C", "\u445C"], /* CJK Ideograph Extension A */ + ["\u445D", "\u445D"], /* CJK Ideograph Extension A */ + ["\u445E", "\u445E"], /* CJK Ideograph Extension A */ + ["\u445F", "\u445F"], /* CJK Ideograph Extension A */ + ["\u4460", "\u4460"], /* CJK Ideograph Extension A */ + ["\u4461", "\u4461"], /* CJK Ideograph Extension A */ + ["\u4462", "\u4462"], /* CJK Ideograph Extension A */ + ["\u4463", "\u4463"], /* CJK Ideograph Extension A */ + ["\u4464", "\u4464"], /* CJK Ideograph Extension A */ + ["\u4465", "\u4465"], /* CJK Ideograph Extension A */ + ["\u4466", "\u4466"], /* CJK Ideograph Extension A */ + ["\u4467", "\u4467"], /* CJK Ideograph Extension A */ + ["\u4468", "\u4468"], /* CJK Ideograph Extension A */ + ["\u4469", "\u4469"], /* CJK Ideograph Extension A */ + ["\u446A", "\u446A"], /* CJK Ideograph Extension A */ + ["\u446B", "\u446B"], /* CJK Ideograph Extension A */ + ["\u446C", "\u446C"], /* CJK Ideograph Extension A */ + ["\u446D", "\u446D"], /* CJK Ideograph Extension A */ + ["\u446E", "\u446E"], /* CJK Ideograph Extension A */ + ["\u446F", "\u446F"], /* CJK Ideograph Extension A */ + ["\u4470", "\u4470"], /* CJK Ideograph Extension A */ + ["\u4471", "\u4471"], /* CJK Ideograph Extension A */ + ["\u4472", "\u4472"], /* CJK Ideograph Extension A */ + ["\u4473", "\u4473"], /* CJK Ideograph Extension A */ + ["\u4474", "\u4474"], /* CJK Ideograph Extension A */ + ["\u4475", "\u4475"], /* CJK Ideograph Extension A */ + ["\u4476", "\u4476"], /* CJK Ideograph Extension A */ + ["\u4477", "\u4477"], /* CJK Ideograph Extension A */ + ["\u4478", "\u4478"], /* CJK Ideograph Extension A */ + ["\u4479", "\u4479"], /* CJK Ideograph Extension A */ + ["\u447A", "\u447A"], /* CJK Ideograph Extension A */ + ["\u447B", "\u447B"], /* CJK Ideograph Extension A */ + ["\u447C", "\u447C"], /* CJK Ideograph Extension A */ + ["\u447D", "\u447D"], /* CJK Ideograph Extension A */ + ["\u447E", "\u447E"], /* CJK Ideograph Extension A */ + ["\u447F", "\u447F"], /* CJK Ideograph Extension A */ + ["\u4480", "\u4480"], /* CJK Ideograph Extension A */ + ["\u4481", "\u4481"], /* CJK Ideograph Extension A */ + ["\u4482", "\u4482"], /* CJK Ideograph Extension A */ + ["\u4483", "\u4483"], /* CJK Ideograph Extension A */ + ["\u4484", "\u4484"], /* CJK Ideograph Extension A */ + ["\u4485", "\u4485"], /* CJK Ideograph Extension A */ + ["\u4486", "\u4486"], /* CJK Ideograph Extension A */ + ["\u4487", "\u4487"], /* CJK Ideograph Extension A */ + ["\u4488", "\u4488"], /* CJK Ideograph Extension A */ + ["\u4489", "\u4489"], /* CJK Ideograph Extension A */ + ["\u448A", "\u448A"], /* CJK Ideograph Extension A */ + ["\u448B", "\u448B"], /* CJK Ideograph Extension A */ + ["\u448C", "\u448C"], /* CJK Ideograph Extension A */ + ["\u448D", "\u448D"], /* CJK Ideograph Extension A */ + ["\u448E", "\u448E"], /* CJK Ideograph Extension A */ + ["\u448F", "\u448F"], /* CJK Ideograph Extension A */ + ["\u4490", "\u4490"], /* CJK Ideograph Extension A */ + ["\u4491", "\u4491"], /* CJK Ideograph Extension A */ + ["\u4492", "\u4492"], /* CJK Ideograph Extension A */ + ["\u4493", "\u4493"], /* CJK Ideograph Extension A */ + ["\u4494", "\u4494"], /* CJK Ideograph Extension A */ + ["\u4495", "\u4495"], /* CJK Ideograph Extension A */ + ["\u4496", "\u4496"], /* CJK Ideograph Extension A */ + ["\u4497", "\u4497"], /* CJK Ideograph Extension A */ + ["\u4498", "\u4498"], /* CJK Ideograph Extension A */ + ["\u4499", "\u4499"], /* CJK Ideograph Extension A */ + ["\u449A", "\u449A"], /* CJK Ideograph Extension A */ + ["\u449B", "\u449B"], /* CJK Ideograph Extension A */ + ["\u449C", "\u449C"], /* CJK Ideograph Extension A */ + ["\u449D", "\u449D"], /* CJK Ideograph Extension A */ + ["\u449E", "\u449E"], /* CJK Ideograph Extension A */ + ["\u449F", "\u449F"], /* CJK Ideograph Extension A */ + ["\u44A0", "\u44A0"], /* CJK Ideograph Extension A */ + ["\u44A1", "\u44A1"], /* CJK Ideograph Extension A */ + ["\u44A2", "\u44A2"], /* CJK Ideograph Extension A */ + ["\u44A3", "\u44A3"], /* CJK Ideograph Extension A */ + ["\u44A4", "\u44A4"], /* CJK Ideograph Extension A */ + ["\u44A5", "\u44A5"], /* CJK Ideograph Extension A */ + ["\u44A6", "\u44A6"], /* CJK Ideograph Extension A */ + ["\u44A7", "\u44A7"], /* CJK Ideograph Extension A */ + ["\u44A8", "\u44A8"], /* CJK Ideograph Extension A */ + ["\u44A9", "\u44A9"], /* CJK Ideograph Extension A */ + ["\u44AA", "\u44AA"], /* CJK Ideograph Extension A */ + ["\u44AB", "\u44AB"], /* CJK Ideograph Extension A */ + ["\u44AC", "\u44AC"], /* CJK Ideograph Extension A */ + ["\u44AD", "\u44AD"], /* CJK Ideograph Extension A */ + ["\u44AE", "\u44AE"], /* CJK Ideograph Extension A */ + ["\u44AF", "\u44AF"], /* CJK Ideograph Extension A */ + ["\u44B0", "\u44B0"], /* CJK Ideograph Extension A */ + ["\u44B1", "\u44B1"], /* CJK Ideograph Extension A */ + ["\u44B2", "\u44B2"], /* CJK Ideograph Extension A */ + ["\u44B3", "\u44B3"], /* CJK Ideograph Extension A */ + ["\u44B4", "\u44B4"], /* CJK Ideograph Extension A */ + ["\u44B5", "\u44B5"], /* CJK Ideograph Extension A */ + ["\u44B6", "\u44B6"], /* CJK Ideograph Extension A */ + ["\u44B7", "\u44B7"], /* CJK Ideograph Extension A */ + ["\u44B8", "\u44B8"], /* CJK Ideograph Extension A */ + ["\u44B9", "\u44B9"], /* CJK Ideograph Extension A */ + ["\u44BA", "\u44BA"], /* CJK Ideograph Extension A */ + ["\u44BB", "\u44BB"], /* CJK Ideograph Extension A */ + ["\u44BC", "\u44BC"], /* CJK Ideograph Extension A */ + ["\u44BD", "\u44BD"], /* CJK Ideograph Extension A */ + ["\u44BE", "\u44BE"], /* CJK Ideograph Extension A */ + ["\u44BF", "\u44BF"], /* CJK Ideograph Extension A */ + ["\u44C0", "\u44C0"], /* CJK Ideograph Extension A */ + ["\u44C1", "\u44C1"], /* CJK Ideograph Extension A */ + ["\u44C2", "\u44C2"], /* CJK Ideograph Extension A */ + ["\u44C3", "\u44C3"], /* CJK Ideograph Extension A */ + ["\u44C4", "\u44C4"], /* CJK Ideograph Extension A */ + ["\u44C5", "\u44C5"], /* CJK Ideograph Extension A */ + ["\u44C6", "\u44C6"], /* CJK Ideograph Extension A */ + ["\u44C7", "\u44C7"], /* CJK Ideograph Extension A */ + ["\u44C8", "\u44C8"], /* CJK Ideograph Extension A */ + ["\u44C9", "\u44C9"], /* CJK Ideograph Extension A */ + ["\u44CA", "\u44CA"], /* CJK Ideograph Extension A */ + ["\u44CB", "\u44CB"], /* CJK Ideograph Extension A */ + ["\u44CC", "\u44CC"], /* CJK Ideograph Extension A */ + ["\u44CD", "\u44CD"], /* CJK Ideograph Extension A */ + ["\u44CE", "\u44CE"], /* CJK Ideograph Extension A */ + ["\u44CF", "\u44CF"], /* CJK Ideograph Extension A */ + ["\u44D0", "\u44D0"], /* CJK Ideograph Extension A */ + ["\u44D1", "\u44D1"], /* CJK Ideograph Extension A */ + ["\u44D2", "\u44D2"], /* CJK Ideograph Extension A */ + ["\u44D3", "\u44D3"], /* CJK Ideograph Extension A */ + ["\u44D4", "\u44D4"], /* CJK Ideograph Extension A */ + ["\u44D5", "\u44D5"], /* CJK Ideograph Extension A */ + ["\u44D6", "\u44D6"], /* CJK Ideograph Extension A */ + ["\u44D7", "\u44D7"], /* CJK Ideograph Extension A */ + ["\u44D8", "\u44D8"], /* CJK Ideograph Extension A */ + ["\u44D9", "\u44D9"], /* CJK Ideograph Extension A */ + ["\u44DA", "\u44DA"], /* CJK Ideograph Extension A */ + ["\u44DB", "\u44DB"], /* CJK Ideograph Extension A */ + ["\u44DC", "\u44DC"], /* CJK Ideograph Extension A */ + ["\u44DD", "\u44DD"], /* CJK Ideograph Extension A */ + ["\u44DE", "\u44DE"], /* CJK Ideograph Extension A */ + ["\u44DF", "\u44DF"], /* CJK Ideograph Extension A */ + ["\u44E0", "\u44E0"], /* CJK Ideograph Extension A */ + ["\u44E1", "\u44E1"], /* CJK Ideograph Extension A */ + ["\u44E2", "\u44E2"], /* CJK Ideograph Extension A */ + ["\u44E3", "\u44E3"], /* CJK Ideograph Extension A */ + ["\u44E4", "\u44E4"], /* CJK Ideograph Extension A */ + ["\u44E5", "\u44E5"], /* CJK Ideograph Extension A */ + ["\u44E6", "\u44E6"], /* CJK Ideograph Extension A */ + ["\u44E7", "\u44E7"], /* CJK Ideograph Extension A */ + ["\u44E8", "\u44E8"], /* CJK Ideograph Extension A */ + ["\u44E9", "\u44E9"], /* CJK Ideograph Extension A */ + ["\u44EA", "\u44EA"], /* CJK Ideograph Extension A */ + ["\u44EB", "\u44EB"], /* CJK Ideograph Extension A */ + ["\u44EC", "\u44EC"], /* CJK Ideograph Extension A */ + ["\u44ED", "\u44ED"], /* CJK Ideograph Extension A */ + ["\u44EE", "\u44EE"], /* CJK Ideograph Extension A */ + ["\u44EF", "\u44EF"], /* CJK Ideograph Extension A */ + ["\u44F0", "\u44F0"], /* CJK Ideograph Extension A */ + ["\u44F1", "\u44F1"], /* CJK Ideograph Extension A */ + ["\u44F2", "\u44F2"], /* CJK Ideograph Extension A */ + ["\u44F3", "\u44F3"], /* CJK Ideograph Extension A */ + ["\u44F4", "\u44F4"], /* CJK Ideograph Extension A */ + ["\u44F5", "\u44F5"], /* CJK Ideograph Extension A */ + ["\u44F6", "\u44F6"], /* CJK Ideograph Extension A */ + ["\u44F7", "\u44F7"], /* CJK Ideograph Extension A */ + ["\u44F8", "\u44F8"], /* CJK Ideograph Extension A */ + ["\u44F9", "\u44F9"], /* CJK Ideograph Extension A */ + ["\u44FA", "\u44FA"], /* CJK Ideograph Extension A */ + ["\u44FB", "\u44FB"], /* CJK Ideograph Extension A */ + ["\u44FC", "\u44FC"], /* CJK Ideograph Extension A */ + ["\u44FD", "\u44FD"], /* CJK Ideograph Extension A */ + ["\u44FE", "\u44FE"], /* CJK Ideograph Extension A */ + ["\u44FF", "\u44FF"], /* CJK Ideograph Extension A */ + ["\u4500", "\u4500"], /* CJK Ideograph Extension A */ + ["\u4501", "\u4501"], /* CJK Ideograph Extension A */ + ["\u4502", "\u4502"], /* CJK Ideograph Extension A */ + ["\u4503", "\u4503"], /* CJK Ideograph Extension A */ + ["\u4504", "\u4504"], /* CJK Ideograph Extension A */ + ["\u4505", "\u4505"], /* CJK Ideograph Extension A */ + ["\u4506", "\u4506"], /* CJK Ideograph Extension A */ + ["\u4507", "\u4507"], /* CJK Ideograph Extension A */ + ["\u4508", "\u4508"], /* CJK Ideograph Extension A */ + ["\u4509", "\u4509"], /* CJK Ideograph Extension A */ + ["\u450A", "\u450A"], /* CJK Ideograph Extension A */ + ["\u450B", "\u450B"], /* CJK Ideograph Extension A */ + ["\u450C", "\u450C"], /* CJK Ideograph Extension A */ + ["\u450D", "\u450D"], /* CJK Ideograph Extension A */ + ["\u450E", "\u450E"], /* CJK Ideograph Extension A */ + ["\u450F", "\u450F"], /* CJK Ideograph Extension A */ + ["\u4510", "\u4510"], /* CJK Ideograph Extension A */ + ["\u4511", "\u4511"], /* CJK Ideograph Extension A */ + ["\u4512", "\u4512"], /* CJK Ideograph Extension A */ + ["\u4513", "\u4513"], /* CJK Ideograph Extension A */ + ["\u4514", "\u4514"], /* CJK Ideograph Extension A */ + ["\u4515", "\u4515"], /* CJK Ideograph Extension A */ + ["\u4516", "\u4516"], /* CJK Ideograph Extension A */ + ["\u4517", "\u4517"], /* CJK Ideograph Extension A */ + ["\u4518", "\u4518"], /* CJK Ideograph Extension A */ + ["\u4519", "\u4519"], /* CJK Ideograph Extension A */ + ["\u451A", "\u451A"], /* CJK Ideograph Extension A */ + ["\u451B", "\u451B"], /* CJK Ideograph Extension A */ + ["\u451C", "\u451C"], /* CJK Ideograph Extension A */ + ["\u451D", "\u451D"], /* CJK Ideograph Extension A */ + ["\u451E", "\u451E"], /* CJK Ideograph Extension A */ + ["\u451F", "\u451F"], /* CJK Ideograph Extension A */ + ["\u4520", "\u4520"], /* CJK Ideograph Extension A */ + ["\u4521", "\u4521"], /* CJK Ideograph Extension A */ + ["\u4522", "\u4522"], /* CJK Ideograph Extension A */ + ["\u4523", "\u4523"], /* CJK Ideograph Extension A */ + ["\u4524", "\u4524"], /* CJK Ideograph Extension A */ + ["\u4525", "\u4525"], /* CJK Ideograph Extension A */ + ["\u4526", "\u4526"], /* CJK Ideograph Extension A */ + ["\u4527", "\u4527"], /* CJK Ideograph Extension A */ + ["\u4528", "\u4528"], /* CJK Ideograph Extension A */ + ["\u4529", "\u4529"], /* CJK Ideograph Extension A */ + ["\u452A", "\u452A"], /* CJK Ideograph Extension A */ + ["\u452B", "\u452B"], /* CJK Ideograph Extension A */ + ["\u452C", "\u452C"], /* CJK Ideograph Extension A */ + ["\u452D", "\u452D"], /* CJK Ideograph Extension A */ + ["\u452E", "\u452E"], /* CJK Ideograph Extension A */ + ["\u452F", "\u452F"], /* CJK Ideograph Extension A */ + ["\u4530", "\u4530"], /* CJK Ideograph Extension A */ + ["\u4531", "\u4531"], /* CJK Ideograph Extension A */ + ["\u4532", "\u4532"], /* CJK Ideograph Extension A */ + ["\u4533", "\u4533"], /* CJK Ideograph Extension A */ + ["\u4534", "\u4534"], /* CJK Ideograph Extension A */ + ["\u4535", "\u4535"], /* CJK Ideograph Extension A */ + ["\u4536", "\u4536"], /* CJK Ideograph Extension A */ + ["\u4537", "\u4537"], /* CJK Ideograph Extension A */ + ["\u4538", "\u4538"], /* CJK Ideograph Extension A */ + ["\u4539", "\u4539"], /* CJK Ideograph Extension A */ + ["\u453A", "\u453A"], /* CJK Ideograph Extension A */ + ["\u453B", "\u453B"], /* CJK Ideograph Extension A */ + ["\u453C", "\u453C"], /* CJK Ideograph Extension A */ + ["\u453D", "\u453D"], /* CJK Ideograph Extension A */ + ["\u453E", "\u453E"], /* CJK Ideograph Extension A */ + ["\u453F", "\u453F"], /* CJK Ideograph Extension A */ + ["\u4540", "\u4540"], /* CJK Ideograph Extension A */ + ["\u4541", "\u4541"], /* CJK Ideograph Extension A */ + ["\u4542", "\u4542"], /* CJK Ideograph Extension A */ + ["\u4543", "\u4543"], /* CJK Ideograph Extension A */ + ["\u4544", "\u4544"], /* CJK Ideograph Extension A */ + ["\u4545", "\u4545"], /* CJK Ideograph Extension A */ + ["\u4546", "\u4546"], /* CJK Ideograph Extension A */ + ["\u4547", "\u4547"], /* CJK Ideograph Extension A */ + ["\u4548", "\u4548"], /* CJK Ideograph Extension A */ + ["\u4549", "\u4549"], /* CJK Ideograph Extension A */ + ["\u454A", "\u454A"], /* CJK Ideograph Extension A */ + ["\u454B", "\u454B"], /* CJK Ideograph Extension A */ + ["\u454C", "\u454C"], /* CJK Ideograph Extension A */ + ["\u454D", "\u454D"], /* CJK Ideograph Extension A */ + ["\u454E", "\u454E"], /* CJK Ideograph Extension A */ + ["\u454F", "\u454F"], /* CJK Ideograph Extension A */ + ["\u4550", "\u4550"], /* CJK Ideograph Extension A */ + ["\u4551", "\u4551"], /* CJK Ideograph Extension A */ + ["\u4552", "\u4552"], /* CJK Ideograph Extension A */ + ["\u4553", "\u4553"], /* CJK Ideograph Extension A */ + ["\u4554", "\u4554"], /* CJK Ideograph Extension A */ + ["\u4555", "\u4555"], /* CJK Ideograph Extension A */ + ["\u4556", "\u4556"], /* CJK Ideograph Extension A */ + ["\u4557", "\u4557"], /* CJK Ideograph Extension A */ + ["\u4558", "\u4558"], /* CJK Ideograph Extension A */ + ["\u4559", "\u4559"], /* CJK Ideograph Extension A */ + ["\u455A", "\u455A"], /* CJK Ideograph Extension A */ + ["\u455B", "\u455B"], /* CJK Ideograph Extension A */ + ["\u455C", "\u455C"], /* CJK Ideograph Extension A */ + ["\u455D", "\u455D"], /* CJK Ideograph Extension A */ + ["\u455E", "\u455E"], /* CJK Ideograph Extension A */ + ["\u455F", "\u455F"], /* CJK Ideograph Extension A */ + ["\u4560", "\u4560"], /* CJK Ideograph Extension A */ + ["\u4561", "\u4561"], /* CJK Ideograph Extension A */ + ["\u4562", "\u4562"], /* CJK Ideograph Extension A */ + ["\u4563", "\u4563"], /* CJK Ideograph Extension A */ + ["\u4564", "\u4564"], /* CJK Ideograph Extension A */ + ["\u4565", "\u4565"], /* CJK Ideograph Extension A */ + ["\u4566", "\u4566"], /* CJK Ideograph Extension A */ + ["\u4567", "\u4567"], /* CJK Ideograph Extension A */ + ["\u4568", "\u4568"], /* CJK Ideograph Extension A */ + ["\u4569", "\u4569"], /* CJK Ideograph Extension A */ + ["\u456A", "\u456A"], /* CJK Ideograph Extension A */ + ["\u456B", "\u456B"], /* CJK Ideograph Extension A */ + ["\u456C", "\u456C"], /* CJK Ideograph Extension A */ + ["\u456D", "\u456D"], /* CJK Ideograph Extension A */ + ["\u456E", "\u456E"], /* CJK Ideograph Extension A */ + ["\u456F", "\u456F"], /* CJK Ideograph Extension A */ + ["\u4570", "\u4570"], /* CJK Ideograph Extension A */ + ["\u4571", "\u4571"], /* CJK Ideograph Extension A */ + ["\u4572", "\u4572"], /* CJK Ideograph Extension A */ + ["\u4573", "\u4573"], /* CJK Ideograph Extension A */ + ["\u4574", "\u4574"], /* CJK Ideograph Extension A */ + ["\u4575", "\u4575"], /* CJK Ideograph Extension A */ + ["\u4576", "\u4576"], /* CJK Ideograph Extension A */ + ["\u4577", "\u4577"], /* CJK Ideograph Extension A */ + ["\u4578", "\u4578"], /* CJK Ideograph Extension A */ + ["\u4579", "\u4579"], /* CJK Ideograph Extension A */ + ["\u457A", "\u457A"], /* CJK Ideograph Extension A */ + ["\u457B", "\u457B"], /* CJK Ideograph Extension A */ + ["\u457C", "\u457C"], /* CJK Ideograph Extension A */ + ["\u457D", "\u457D"], /* CJK Ideograph Extension A */ + ["\u457E", "\u457E"], /* CJK Ideograph Extension A */ + ["\u457F", "\u457F"], /* CJK Ideograph Extension A */ + ["\u4580", "\u4580"], /* CJK Ideograph Extension A */ + ["\u4581", "\u4581"], /* CJK Ideograph Extension A */ + ["\u4582", "\u4582"], /* CJK Ideograph Extension A */ + ["\u4583", "\u4583"], /* CJK Ideograph Extension A */ + ["\u4584", "\u4584"], /* CJK Ideograph Extension A */ + ["\u4585", "\u4585"], /* CJK Ideograph Extension A */ + ["\u4586", "\u4586"], /* CJK Ideograph Extension A */ + ["\u4587", "\u4587"], /* CJK Ideograph Extension A */ + ["\u4588", "\u4588"], /* CJK Ideograph Extension A */ + ["\u4589", "\u4589"], /* CJK Ideograph Extension A */ + ["\u458A", "\u458A"], /* CJK Ideograph Extension A */ + ["\u458B", "\u458B"], /* CJK Ideograph Extension A */ + ["\u458C", "\u458C"], /* CJK Ideograph Extension A */ + ["\u458D", "\u458D"], /* CJK Ideograph Extension A */ + ["\u458E", "\u458E"], /* CJK Ideograph Extension A */ + ["\u458F", "\u458F"], /* CJK Ideograph Extension A */ + ["\u4590", "\u4590"], /* CJK Ideograph Extension A */ + ["\u4591", "\u4591"], /* CJK Ideograph Extension A */ + ["\u4592", "\u4592"], /* CJK Ideograph Extension A */ + ["\u4593", "\u4593"], /* CJK Ideograph Extension A */ + ["\u4594", "\u4594"], /* CJK Ideograph Extension A */ + ["\u4595", "\u4595"], /* CJK Ideograph Extension A */ + ["\u4596", "\u4596"], /* CJK Ideograph Extension A */ + ["\u4597", "\u4597"], /* CJK Ideograph Extension A */ + ["\u4598", "\u4598"], /* CJK Ideograph Extension A */ + ["\u4599", "\u4599"], /* CJK Ideograph Extension A */ + ["\u459A", "\u459A"], /* CJK Ideograph Extension A */ + ["\u459B", "\u459B"], /* CJK Ideograph Extension A */ + ["\u459C", "\u459C"], /* CJK Ideograph Extension A */ + ["\u459D", "\u459D"], /* CJK Ideograph Extension A */ + ["\u459E", "\u459E"], /* CJK Ideograph Extension A */ + ["\u459F", "\u459F"], /* CJK Ideograph Extension A */ + ["\u45A0", "\u45A0"], /* CJK Ideograph Extension A */ + ["\u45A1", "\u45A1"], /* CJK Ideograph Extension A */ + ["\u45A2", "\u45A2"], /* CJK Ideograph Extension A */ + ["\u45A3", "\u45A3"], /* CJK Ideograph Extension A */ + ["\u45A4", "\u45A4"], /* CJK Ideograph Extension A */ + ["\u45A5", "\u45A5"], /* CJK Ideograph Extension A */ + ["\u45A6", "\u45A6"], /* CJK Ideograph Extension A */ + ["\u45A7", "\u45A7"], /* CJK Ideograph Extension A */ + ["\u45A8", "\u45A8"], /* CJK Ideograph Extension A */ + ["\u45A9", "\u45A9"], /* CJK Ideograph Extension A */ + ["\u45AA", "\u45AA"], /* CJK Ideograph Extension A */ + ["\u45AB", "\u45AB"], /* CJK Ideograph Extension A */ + ["\u45AC", "\u45AC"], /* CJK Ideograph Extension A */ + ["\u45AD", "\u45AD"], /* CJK Ideograph Extension A */ + ["\u45AE", "\u45AE"], /* CJK Ideograph Extension A */ + ["\u45AF", "\u45AF"], /* CJK Ideograph Extension A */ + ["\u45B0", "\u45B0"], /* CJK Ideograph Extension A */ + ["\u45B1", "\u45B1"], /* CJK Ideograph Extension A */ + ["\u45B2", "\u45B2"], /* CJK Ideograph Extension A */ + ["\u45B3", "\u45B3"], /* CJK Ideograph Extension A */ + ["\u45B4", "\u45B4"], /* CJK Ideograph Extension A */ + ["\u45B5", "\u45B5"], /* CJK Ideograph Extension A */ + ["\u45B6", "\u45B6"], /* CJK Ideograph Extension A */ + ["\u45B7", "\u45B7"], /* CJK Ideograph Extension A */ + ["\u45B8", "\u45B8"], /* CJK Ideograph Extension A */ + ["\u45B9", "\u45B9"], /* CJK Ideograph Extension A */ + ["\u45BA", "\u45BA"], /* CJK Ideograph Extension A */ + ["\u45BB", "\u45BB"], /* CJK Ideograph Extension A */ + ["\u45BC", "\u45BC"], /* CJK Ideograph Extension A */ + ["\u45BD", "\u45BD"], /* CJK Ideograph Extension A */ + ["\u45BE", "\u45BE"], /* CJK Ideograph Extension A */ + ["\u45BF", "\u45BF"], /* CJK Ideograph Extension A */ + ["\u45C0", "\u45C0"], /* CJK Ideograph Extension A */ + ["\u45C1", "\u45C1"], /* CJK Ideograph Extension A */ + ["\u45C2", "\u45C2"], /* CJK Ideograph Extension A */ + ["\u45C3", "\u45C3"], /* CJK Ideograph Extension A */ + ["\u45C4", "\u45C4"], /* CJK Ideograph Extension A */ + ["\u45C5", "\u45C5"], /* CJK Ideograph Extension A */ + ["\u45C6", "\u45C6"], /* CJK Ideograph Extension A */ + ["\u45C7", "\u45C7"], /* CJK Ideograph Extension A */ + ["\u45C8", "\u45C8"], /* CJK Ideograph Extension A */ + ["\u45C9", "\u45C9"], /* CJK Ideograph Extension A */ + ["\u45CA", "\u45CA"], /* CJK Ideograph Extension A */ + ["\u45CB", "\u45CB"], /* CJK Ideograph Extension A */ + ["\u45CC", "\u45CC"], /* CJK Ideograph Extension A */ + ["\u45CD", "\u45CD"], /* CJK Ideograph Extension A */ + ["\u45CE", "\u45CE"], /* CJK Ideograph Extension A */ + ["\u45CF", "\u45CF"], /* CJK Ideograph Extension A */ + ["\u45D0", "\u45D0"], /* CJK Ideograph Extension A */ + ["\u45D1", "\u45D1"], /* CJK Ideograph Extension A */ + ["\u45D2", "\u45D2"], /* CJK Ideograph Extension A */ + ["\u45D3", "\u45D3"], /* CJK Ideograph Extension A */ + ["\u45D4", "\u45D4"], /* CJK Ideograph Extension A */ + ["\u45D5", "\u45D5"], /* CJK Ideograph Extension A */ + ["\u45D6", "\u45D6"], /* CJK Ideograph Extension A */ + ["\u45D7", "\u45D7"], /* CJK Ideograph Extension A */ + ["\u45D8", "\u45D8"], /* CJK Ideograph Extension A */ + ["\u45D9", "\u45D9"], /* CJK Ideograph Extension A */ + ["\u45DA", "\u45DA"], /* CJK Ideograph Extension A */ + ["\u45DB", "\u45DB"], /* CJK Ideograph Extension A */ + ["\u45DC", "\u45DC"], /* CJK Ideograph Extension A */ + ["\u45DD", "\u45DD"], /* CJK Ideograph Extension A */ + ["\u45DE", "\u45DE"], /* CJK Ideograph Extension A */ + ["\u45DF", "\u45DF"], /* CJK Ideograph Extension A */ + ["\u45E0", "\u45E0"], /* CJK Ideograph Extension A */ + ["\u45E1", "\u45E1"], /* CJK Ideograph Extension A */ + ["\u45E2", "\u45E2"], /* CJK Ideograph Extension A */ + ["\u45E3", "\u45E3"], /* CJK Ideograph Extension A */ + ["\u45E4", "\u45E4"], /* CJK Ideograph Extension A */ + ["\u45E5", "\u45E5"], /* CJK Ideograph Extension A */ + ["\u45E6", "\u45E6"], /* CJK Ideograph Extension A */ + ["\u45E7", "\u45E7"], /* CJK Ideograph Extension A */ + ["\u45E8", "\u45E8"], /* CJK Ideograph Extension A */ + ["\u45E9", "\u45E9"], /* CJK Ideograph Extension A */ + ["\u45EA", "\u45EA"], /* CJK Ideograph Extension A */ + ["\u45EB", "\u45EB"], /* CJK Ideograph Extension A */ + ["\u45EC", "\u45EC"], /* CJK Ideograph Extension A */ + ["\u45ED", "\u45ED"], /* CJK Ideograph Extension A */ + ["\u45EE", "\u45EE"], /* CJK Ideograph Extension A */ + ["\u45EF", "\u45EF"], /* CJK Ideograph Extension A */ + ["\u45F0", "\u45F0"], /* CJK Ideograph Extension A */ + ["\u45F1", "\u45F1"], /* CJK Ideograph Extension A */ + ["\u45F2", "\u45F2"], /* CJK Ideograph Extension A */ + ["\u45F3", "\u45F3"], /* CJK Ideograph Extension A */ + ["\u45F4", "\u45F4"], /* CJK Ideograph Extension A */ + ["\u45F5", "\u45F5"], /* CJK Ideograph Extension A */ + ["\u45F6", "\u45F6"], /* CJK Ideograph Extension A */ + ["\u45F7", "\u45F7"], /* CJK Ideograph Extension A */ + ["\u45F8", "\u45F8"], /* CJK Ideograph Extension A */ + ["\u45F9", "\u45F9"], /* CJK Ideograph Extension A */ + ["\u45FA", "\u45FA"], /* CJK Ideograph Extension A */ + ["\u45FB", "\u45FB"], /* CJK Ideograph Extension A */ + ["\u45FC", "\u45FC"], /* CJK Ideograph Extension A */ + ["\u45FD", "\u45FD"], /* CJK Ideograph Extension A */ + ["\u45FE", "\u45FE"], /* CJK Ideograph Extension A */ + ["\u45FF", "\u45FF"], /* CJK Ideograph Extension A */ + ["\u4600", "\u4600"], /* CJK Ideograph Extension A */ + ["\u4601", "\u4601"], /* CJK Ideograph Extension A */ + ["\u4602", "\u4602"], /* CJK Ideograph Extension A */ + ["\u4603", "\u4603"], /* CJK Ideograph Extension A */ + ["\u4604", "\u4604"], /* CJK Ideograph Extension A */ + ["\u4605", "\u4605"], /* CJK Ideograph Extension A */ + ["\u4606", "\u4606"], /* CJK Ideograph Extension A */ + ["\u4607", "\u4607"], /* CJK Ideograph Extension A */ + ["\u4608", "\u4608"], /* CJK Ideograph Extension A */ + ["\u4609", "\u4609"], /* CJK Ideograph Extension A */ + ["\u460A", "\u460A"], /* CJK Ideograph Extension A */ + ["\u460B", "\u460B"], /* CJK Ideograph Extension A */ + ["\u460C", "\u460C"], /* CJK Ideograph Extension A */ + ["\u460D", "\u460D"], /* CJK Ideograph Extension A */ + ["\u460E", "\u460E"], /* CJK Ideograph Extension A */ + ["\u460F", "\u460F"], /* CJK Ideograph Extension A */ + ["\u4610", "\u4610"], /* CJK Ideograph Extension A */ + ["\u4611", "\u4611"], /* CJK Ideograph Extension A */ + ["\u4612", "\u4612"], /* CJK Ideograph Extension A */ + ["\u4613", "\u4613"], /* CJK Ideograph Extension A */ + ["\u4614", "\u4614"], /* CJK Ideograph Extension A */ + ["\u4615", "\u4615"], /* CJK Ideograph Extension A */ + ["\u4616", "\u4616"], /* CJK Ideograph Extension A */ + ["\u4617", "\u4617"], /* CJK Ideograph Extension A */ + ["\u4618", "\u4618"], /* CJK Ideograph Extension A */ + ["\u4619", "\u4619"], /* CJK Ideograph Extension A */ + ["\u461A", "\u461A"], /* CJK Ideograph Extension A */ + ["\u461B", "\u461B"], /* CJK Ideograph Extension A */ + ["\u461C", "\u461C"], /* CJK Ideograph Extension A */ + ["\u461D", "\u461D"], /* CJK Ideograph Extension A */ + ["\u461E", "\u461E"], /* CJK Ideograph Extension A */ + ["\u461F", "\u461F"], /* CJK Ideograph Extension A */ + ["\u4620", "\u4620"], /* CJK Ideograph Extension A */ + ["\u4621", "\u4621"], /* CJK Ideograph Extension A */ + ["\u4622", "\u4622"], /* CJK Ideograph Extension A */ + ["\u4623", "\u4623"], /* CJK Ideograph Extension A */ + ["\u4624", "\u4624"], /* CJK Ideograph Extension A */ + ["\u4625", "\u4625"], /* CJK Ideograph Extension A */ + ["\u4626", "\u4626"], /* CJK Ideograph Extension A */ + ["\u4627", "\u4627"], /* CJK Ideograph Extension A */ + ["\u4628", "\u4628"], /* CJK Ideograph Extension A */ + ["\u4629", "\u4629"], /* CJK Ideograph Extension A */ + ["\u462A", "\u462A"], /* CJK Ideograph Extension A */ + ["\u462B", "\u462B"], /* CJK Ideograph Extension A */ + ["\u462C", "\u462C"], /* CJK Ideograph Extension A */ + ["\u462D", "\u462D"], /* CJK Ideograph Extension A */ + ["\u462E", "\u462E"], /* CJK Ideograph Extension A */ + ["\u462F", "\u462F"], /* CJK Ideograph Extension A */ + ["\u4630", "\u4630"], /* CJK Ideograph Extension A */ + ["\u4631", "\u4631"], /* CJK Ideograph Extension A */ + ["\u4632", "\u4632"], /* CJK Ideograph Extension A */ + ["\u4633", "\u4633"], /* CJK Ideograph Extension A */ + ["\u4634", "\u4634"], /* CJK Ideograph Extension A */ + ["\u4635", "\u4635"], /* CJK Ideograph Extension A */ + ["\u4636", "\u4636"], /* CJK Ideograph Extension A */ + ["\u4637", "\u4637"], /* CJK Ideograph Extension A */ + ["\u4638", "\u4638"], /* CJK Ideograph Extension A */ + ["\u4639", "\u4639"], /* CJK Ideograph Extension A */ + ["\u463A", "\u463A"], /* CJK Ideograph Extension A */ + ["\u463B", "\u463B"], /* CJK Ideograph Extension A */ + ["\u463C", "\u463C"], /* CJK Ideograph Extension A */ + ["\u463D", "\u463D"], /* CJK Ideograph Extension A */ + ["\u463E", "\u463E"], /* CJK Ideograph Extension A */ + ["\u463F", "\u463F"], /* CJK Ideograph Extension A */ + ["\u4640", "\u4640"], /* CJK Ideograph Extension A */ + ["\u4641", "\u4641"], /* CJK Ideograph Extension A */ + ["\u4642", "\u4642"], /* CJK Ideograph Extension A */ + ["\u4643", "\u4643"], /* CJK Ideograph Extension A */ + ["\u4644", "\u4644"], /* CJK Ideograph Extension A */ + ["\u4645", "\u4645"], /* CJK Ideograph Extension A */ + ["\u4646", "\u4646"], /* CJK Ideograph Extension A */ + ["\u4647", "\u4647"], /* CJK Ideograph Extension A */ + ["\u4648", "\u4648"], /* CJK Ideograph Extension A */ + ["\u4649", "\u4649"], /* CJK Ideograph Extension A */ + ["\u464A", "\u464A"], /* CJK Ideograph Extension A */ + ["\u464B", "\u464B"], /* CJK Ideograph Extension A */ + ["\u464C", "\u464C"], /* CJK Ideograph Extension A */ + ["\u464D", "\u464D"], /* CJK Ideograph Extension A */ + ["\u464E", "\u464E"], /* CJK Ideograph Extension A */ + ["\u464F", "\u464F"], /* CJK Ideograph Extension A */ + ["\u4650", "\u4650"], /* CJK Ideograph Extension A */ + ["\u4651", "\u4651"], /* CJK Ideograph Extension A */ + ["\u4652", "\u4652"], /* CJK Ideograph Extension A */ + ["\u4653", "\u4653"], /* CJK Ideograph Extension A */ + ["\u4654", "\u4654"], /* CJK Ideograph Extension A */ + ["\u4655", "\u4655"], /* CJK Ideograph Extension A */ + ["\u4656", "\u4656"], /* CJK Ideograph Extension A */ + ["\u4657", "\u4657"], /* CJK Ideograph Extension A */ + ["\u4658", "\u4658"], /* CJK Ideograph Extension A */ + ["\u4659", "\u4659"], /* CJK Ideograph Extension A */ + ["\u465A", "\u465A"], /* CJK Ideograph Extension A */ + ["\u465B", "\u465B"], /* CJK Ideograph Extension A */ + ["\u465C", "\u465C"], /* CJK Ideograph Extension A */ + ["\u465D", "\u465D"], /* CJK Ideograph Extension A */ + ["\u465E", "\u465E"], /* CJK Ideograph Extension A */ + ["\u465F", "\u465F"], /* CJK Ideograph Extension A */ + ["\u4660", "\u4660"], /* CJK Ideograph Extension A */ + ["\u4661", "\u4661"], /* CJK Ideograph Extension A */ + ["\u4662", "\u4662"], /* CJK Ideograph Extension A */ + ["\u4663", "\u4663"], /* CJK Ideograph Extension A */ + ["\u4664", "\u4664"], /* CJK Ideograph Extension A */ + ["\u4665", "\u4665"], /* CJK Ideograph Extension A */ + ["\u4666", "\u4666"], /* CJK Ideograph Extension A */ + ["\u4667", "\u4667"], /* CJK Ideograph Extension A */ + ["\u4668", "\u4668"], /* CJK Ideograph Extension A */ + ["\u4669", "\u4669"], /* CJK Ideograph Extension A */ + ["\u466A", "\u466A"], /* CJK Ideograph Extension A */ + ["\u466B", "\u466B"], /* CJK Ideograph Extension A */ + ["\u466C", "\u466C"], /* CJK Ideograph Extension A */ + ["\u466D", "\u466D"], /* CJK Ideograph Extension A */ + ["\u466E", "\u466E"], /* CJK Ideograph Extension A */ + ["\u466F", "\u466F"], /* CJK Ideograph Extension A */ + ["\u4670", "\u4670"], /* CJK Ideograph Extension A */ + ["\u4671", "\u4671"], /* CJK Ideograph Extension A */ + ["\u4672", "\u4672"], /* CJK Ideograph Extension A */ + ["\u4673", "\u4673"], /* CJK Ideograph Extension A */ + ["\u4674", "\u4674"], /* CJK Ideograph Extension A */ + ["\u4675", "\u4675"], /* CJK Ideograph Extension A */ + ["\u4676", "\u4676"], /* CJK Ideograph Extension A */ + ["\u4677", "\u4677"], /* CJK Ideograph Extension A */ + ["\u4678", "\u4678"], /* CJK Ideograph Extension A */ + ["\u4679", "\u4679"], /* CJK Ideograph Extension A */ + ["\u467A", "\u467A"], /* CJK Ideograph Extension A */ + ["\u467B", "\u467B"], /* CJK Ideograph Extension A */ + ["\u467C", "\u467C"], /* CJK Ideograph Extension A */ + ["\u467D", "\u467D"], /* CJK Ideograph Extension A */ + ["\u467E", "\u467E"], /* CJK Ideograph Extension A */ + ["\u467F", "\u467F"], /* CJK Ideograph Extension A */ + ["\u4680", "\u4680"], /* CJK Ideograph Extension A */ + ["\u4681", "\u4681"], /* CJK Ideograph Extension A */ + ["\u4682", "\u4682"], /* CJK Ideograph Extension A */ + ["\u4683", "\u4683"], /* CJK Ideograph Extension A */ + ["\u4684", "\u4684"], /* CJK Ideograph Extension A */ + ["\u4685", "\u4685"], /* CJK Ideograph Extension A */ + ["\u4686", "\u4686"], /* CJK Ideograph Extension A */ + ["\u4687", "\u4687"], /* CJK Ideograph Extension A */ + ["\u4688", "\u4688"], /* CJK Ideograph Extension A */ + ["\u4689", "\u4689"], /* CJK Ideograph Extension A */ + ["\u468A", "\u468A"], /* CJK Ideograph Extension A */ + ["\u468B", "\u468B"], /* CJK Ideograph Extension A */ + ["\u468C", "\u468C"], /* CJK Ideograph Extension A */ + ["\u468D", "\u468D"], /* CJK Ideograph Extension A */ + ["\u468E", "\u468E"], /* CJK Ideograph Extension A */ + ["\u468F", "\u468F"], /* CJK Ideograph Extension A */ + ["\u4690", "\u4690"], /* CJK Ideograph Extension A */ + ["\u4691", "\u4691"], /* CJK Ideograph Extension A */ + ["\u4692", "\u4692"], /* CJK Ideograph Extension A */ + ["\u4693", "\u4693"], /* CJK Ideograph Extension A */ + ["\u4694", "\u4694"], /* CJK Ideograph Extension A */ + ["\u4695", "\u4695"], /* CJK Ideograph Extension A */ + ["\u4696", "\u4696"], /* CJK Ideograph Extension A */ + ["\u4697", "\u4697"], /* CJK Ideograph Extension A */ + ["\u4698", "\u4698"], /* CJK Ideograph Extension A */ + ["\u4699", "\u4699"], /* CJK Ideograph Extension A */ + ["\u469A", "\u469A"], /* CJK Ideograph Extension A */ + ["\u469B", "\u469B"], /* CJK Ideograph Extension A */ + ["\u469C", "\u469C"], /* CJK Ideograph Extension A */ + ["\u469D", "\u469D"], /* CJK Ideograph Extension A */ + ["\u469E", "\u469E"], /* CJK Ideograph Extension A */ + ["\u469F", "\u469F"], /* CJK Ideograph Extension A */ + ["\u46A0", "\u46A0"], /* CJK Ideograph Extension A */ + ["\u46A1", "\u46A1"], /* CJK Ideograph Extension A */ + ["\u46A2", "\u46A2"], /* CJK Ideograph Extension A */ + ["\u46A3", "\u46A3"], /* CJK Ideograph Extension A */ + ["\u46A4", "\u46A4"], /* CJK Ideograph Extension A */ + ["\u46A5", "\u46A5"], /* CJK Ideograph Extension A */ + ["\u46A6", "\u46A6"], /* CJK Ideograph Extension A */ + ["\u46A7", "\u46A7"], /* CJK Ideograph Extension A */ + ["\u46A8", "\u46A8"], /* CJK Ideograph Extension A */ + ["\u46A9", "\u46A9"], /* CJK Ideograph Extension A */ + ["\u46AA", "\u46AA"], /* CJK Ideograph Extension A */ + ["\u46AB", "\u46AB"], /* CJK Ideograph Extension A */ + ["\u46AC", "\u46AC"], /* CJK Ideograph Extension A */ + ["\u46AD", "\u46AD"], /* CJK Ideograph Extension A */ + ["\u46AE", "\u46AE"], /* CJK Ideograph Extension A */ + ["\u46AF", "\u46AF"], /* CJK Ideograph Extension A */ + ["\u46B0", "\u46B0"], /* CJK Ideograph Extension A */ + ["\u46B1", "\u46B1"], /* CJK Ideograph Extension A */ + ["\u46B2", "\u46B2"], /* CJK Ideograph Extension A */ + ["\u46B3", "\u46B3"], /* CJK Ideograph Extension A */ + ["\u46B4", "\u46B4"], /* CJK Ideograph Extension A */ + ["\u46B5", "\u46B5"], /* CJK Ideograph Extension A */ + ["\u46B6", "\u46B6"], /* CJK Ideograph Extension A */ + ["\u46B7", "\u46B7"], /* CJK Ideograph Extension A */ + ["\u46B8", "\u46B8"], /* CJK Ideograph Extension A */ + ["\u46B9", "\u46B9"], /* CJK Ideograph Extension A */ + ["\u46BA", "\u46BA"], /* CJK Ideograph Extension A */ + ["\u46BB", "\u46BB"], /* CJK Ideograph Extension A */ + ["\u46BC", "\u46BC"], /* CJK Ideograph Extension A */ + ["\u46BD", "\u46BD"], /* CJK Ideograph Extension A */ + ["\u46BE", "\u46BE"], /* CJK Ideograph Extension A */ + ["\u46BF", "\u46BF"], /* CJK Ideograph Extension A */ + ["\u46C0", "\u46C0"], /* CJK Ideograph Extension A */ + ["\u46C1", "\u46C1"], /* CJK Ideograph Extension A */ + ["\u46C2", "\u46C2"], /* CJK Ideograph Extension A */ + ["\u46C3", "\u46C3"], /* CJK Ideograph Extension A */ + ["\u46C4", "\u46C4"], /* CJK Ideograph Extension A */ + ["\u46C5", "\u46C5"], /* CJK Ideograph Extension A */ + ["\u46C6", "\u46C6"], /* CJK Ideograph Extension A */ + ["\u46C7", "\u46C7"], /* CJK Ideograph Extension A */ + ["\u46C8", "\u46C8"], /* CJK Ideograph Extension A */ + ["\u46C9", "\u46C9"], /* CJK Ideograph Extension A */ + ["\u46CA", "\u46CA"], /* CJK Ideograph Extension A */ + ["\u46CB", "\u46CB"], /* CJK Ideograph Extension A */ + ["\u46CC", "\u46CC"], /* CJK Ideograph Extension A */ + ["\u46CD", "\u46CD"], /* CJK Ideograph Extension A */ + ["\u46CE", "\u46CE"], /* CJK Ideograph Extension A */ + ["\u46CF", "\u46CF"], /* CJK Ideograph Extension A */ + ["\u46D0", "\u46D0"], /* CJK Ideograph Extension A */ + ["\u46D1", "\u46D1"], /* CJK Ideograph Extension A */ + ["\u46D2", "\u46D2"], /* CJK Ideograph Extension A */ + ["\u46D3", "\u46D3"], /* CJK Ideograph Extension A */ + ["\u46D4", "\u46D4"], /* CJK Ideograph Extension A */ + ["\u46D5", "\u46D5"], /* CJK Ideograph Extension A */ + ["\u46D6", "\u46D6"], /* CJK Ideograph Extension A */ + ["\u46D7", "\u46D7"], /* CJK Ideograph Extension A */ + ["\u46D8", "\u46D8"], /* CJK Ideograph Extension A */ + ["\u46D9", "\u46D9"], /* CJK Ideograph Extension A */ + ["\u46DA", "\u46DA"], /* CJK Ideograph Extension A */ + ["\u46DB", "\u46DB"], /* CJK Ideograph Extension A */ + ["\u46DC", "\u46DC"], /* CJK Ideograph Extension A */ + ["\u46DD", "\u46DD"], /* CJK Ideograph Extension A */ + ["\u46DE", "\u46DE"], /* CJK Ideograph Extension A */ + ["\u46DF", "\u46DF"], /* CJK Ideograph Extension A */ + ["\u46E0", "\u46E0"], /* CJK Ideograph Extension A */ + ["\u46E1", "\u46E1"], /* CJK Ideograph Extension A */ + ["\u46E2", "\u46E2"], /* CJK Ideograph Extension A */ + ["\u46E3", "\u46E3"], /* CJK Ideograph Extension A */ + ["\u46E4", "\u46E4"], /* CJK Ideograph Extension A */ + ["\u46E5", "\u46E5"], /* CJK Ideograph Extension A */ + ["\u46E6", "\u46E6"], /* CJK Ideograph Extension A */ + ["\u46E7", "\u46E7"], /* CJK Ideograph Extension A */ + ["\u46E8", "\u46E8"], /* CJK Ideograph Extension A */ + ["\u46E9", "\u46E9"], /* CJK Ideograph Extension A */ + ["\u46EA", "\u46EA"], /* CJK Ideograph Extension A */ + ["\u46EB", "\u46EB"], /* CJK Ideograph Extension A */ + ["\u46EC", "\u46EC"], /* CJK Ideograph Extension A */ + ["\u46ED", "\u46ED"], /* CJK Ideograph Extension A */ + ["\u46EE", "\u46EE"], /* CJK Ideograph Extension A */ + ["\u46EF", "\u46EF"], /* CJK Ideograph Extension A */ + ["\u46F0", "\u46F0"], /* CJK Ideograph Extension A */ + ["\u46F1", "\u46F1"], /* CJK Ideograph Extension A */ + ["\u46F2", "\u46F2"], /* CJK Ideograph Extension A */ + ["\u46F3", "\u46F3"], /* CJK Ideograph Extension A */ + ["\u46F4", "\u46F4"], /* CJK Ideograph Extension A */ + ["\u46F5", "\u46F5"], /* CJK Ideograph Extension A */ + ["\u46F6", "\u46F6"], /* CJK Ideograph Extension A */ + ["\u46F7", "\u46F7"], /* CJK Ideograph Extension A */ + ["\u46F8", "\u46F8"], /* CJK Ideograph Extension A */ + ["\u46F9", "\u46F9"], /* CJK Ideograph Extension A */ + ["\u46FA", "\u46FA"], /* CJK Ideograph Extension A */ + ["\u46FB", "\u46FB"], /* CJK Ideograph Extension A */ + ["\u46FC", "\u46FC"], /* CJK Ideograph Extension A */ + ["\u46FD", "\u46FD"], /* CJK Ideograph Extension A */ + ["\u46FE", "\u46FE"], /* CJK Ideograph Extension A */ + ["\u46FF", "\u46FF"], /* CJK Ideograph Extension A */ + ["\u4700", "\u4700"], /* CJK Ideograph Extension A */ + ["\u4701", "\u4701"], /* CJK Ideograph Extension A */ + ["\u4702", "\u4702"], /* CJK Ideograph Extension A */ + ["\u4703", "\u4703"], /* CJK Ideograph Extension A */ + ["\u4704", "\u4704"], /* CJK Ideograph Extension A */ + ["\u4705", "\u4705"], /* CJK Ideograph Extension A */ + ["\u4706", "\u4706"], /* CJK Ideograph Extension A */ + ["\u4707", "\u4707"], /* CJK Ideograph Extension A */ + ["\u4708", "\u4708"], /* CJK Ideograph Extension A */ + ["\u4709", "\u4709"], /* CJK Ideograph Extension A */ + ["\u470A", "\u470A"], /* CJK Ideograph Extension A */ + ["\u470B", "\u470B"], /* CJK Ideograph Extension A */ + ["\u470C", "\u470C"], /* CJK Ideograph Extension A */ + ["\u470D", "\u470D"], /* CJK Ideograph Extension A */ + ["\u470E", "\u470E"], /* CJK Ideograph Extension A */ + ["\u470F", "\u470F"], /* CJK Ideograph Extension A */ + ["\u4710", "\u4710"], /* CJK Ideograph Extension A */ + ["\u4711", "\u4711"], /* CJK Ideograph Extension A */ + ["\u4712", "\u4712"], /* CJK Ideograph Extension A */ + ["\u4713", "\u4713"], /* CJK Ideograph Extension A */ + ["\u4714", "\u4714"], /* CJK Ideograph Extension A */ + ["\u4715", "\u4715"], /* CJK Ideograph Extension A */ + ["\u4716", "\u4716"], /* CJK Ideograph Extension A */ + ["\u4717", "\u4717"], /* CJK Ideograph Extension A */ + ["\u4718", "\u4718"], /* CJK Ideograph Extension A */ + ["\u4719", "\u4719"], /* CJK Ideograph Extension A */ + ["\u471A", "\u471A"], /* CJK Ideograph Extension A */ + ["\u471B", "\u471B"], /* CJK Ideograph Extension A */ + ["\u471C", "\u471C"], /* CJK Ideograph Extension A */ + ["\u471D", "\u471D"], /* CJK Ideograph Extension A */ + ["\u471E", "\u471E"], /* CJK Ideograph Extension A */ + ["\u471F", "\u471F"], /* CJK Ideograph Extension A */ + ["\u4720", "\u4720"], /* CJK Ideograph Extension A */ + ["\u4721", "\u4721"], /* CJK Ideograph Extension A */ + ["\u4722", "\u4722"], /* CJK Ideograph Extension A */ + ["\u4723", "\u4723"], /* CJK Ideograph Extension A */ + ["\u4724", "\u4724"], /* CJK Ideograph Extension A */ + ["\u4725", "\u4725"], /* CJK Ideograph Extension A */ + ["\u4726", "\u4726"], /* CJK Ideograph Extension A */ + ["\u4727", "\u4727"], /* CJK Ideograph Extension A */ + ["\u4728", "\u4728"], /* CJK Ideograph Extension A */ + ["\u4729", "\u4729"], /* CJK Ideograph Extension A */ + ["\u472A", "\u472A"], /* CJK Ideograph Extension A */ + ["\u472B", "\u472B"], /* CJK Ideograph Extension A */ + ["\u472C", "\u472C"], /* CJK Ideograph Extension A */ + ["\u472D", "\u472D"], /* CJK Ideograph Extension A */ + ["\u472E", "\u472E"], /* CJK Ideograph Extension A */ + ["\u472F", "\u472F"], /* CJK Ideograph Extension A */ + ["\u4730", "\u4730"], /* CJK Ideograph Extension A */ + ["\u4731", "\u4731"], /* CJK Ideograph Extension A */ + ["\u4732", "\u4732"], /* CJK Ideograph Extension A */ + ["\u4733", "\u4733"], /* CJK Ideograph Extension A */ + ["\u4734", "\u4734"], /* CJK Ideograph Extension A */ + ["\u4735", "\u4735"], /* CJK Ideograph Extension A */ + ["\u4736", "\u4736"], /* CJK Ideograph Extension A */ + ["\u4737", "\u4737"], /* CJK Ideograph Extension A */ + ["\u4738", "\u4738"], /* CJK Ideograph Extension A */ + ["\u4739", "\u4739"], /* CJK Ideograph Extension A */ + ["\u473A", "\u473A"], /* CJK Ideograph Extension A */ + ["\u473B", "\u473B"], /* CJK Ideograph Extension A */ + ["\u473C", "\u473C"], /* CJK Ideograph Extension A */ + ["\u473D", "\u473D"], /* CJK Ideograph Extension A */ + ["\u473E", "\u473E"], /* CJK Ideograph Extension A */ + ["\u473F", "\u473F"], /* CJK Ideograph Extension A */ + ["\u4740", "\u4740"], /* CJK Ideograph Extension A */ + ["\u4741", "\u4741"], /* CJK Ideograph Extension A */ + ["\u4742", "\u4742"], /* CJK Ideograph Extension A */ + ["\u4743", "\u4743"], /* CJK Ideograph Extension A */ + ["\u4744", "\u4744"], /* CJK Ideograph Extension A */ + ["\u4745", "\u4745"], /* CJK Ideograph Extension A */ + ["\u4746", "\u4746"], /* CJK Ideograph Extension A */ + ["\u4747", "\u4747"], /* CJK Ideograph Extension A */ + ["\u4748", "\u4748"], /* CJK Ideograph Extension A */ + ["\u4749", "\u4749"], /* CJK Ideograph Extension A */ + ["\u474A", "\u474A"], /* CJK Ideograph Extension A */ + ["\u474B", "\u474B"], /* CJK Ideograph Extension A */ + ["\u474C", "\u474C"], /* CJK Ideograph Extension A */ + ["\u474D", "\u474D"], /* CJK Ideograph Extension A */ + ["\u474E", "\u474E"], /* CJK Ideograph Extension A */ + ["\u474F", "\u474F"], /* CJK Ideograph Extension A */ + ["\u4750", "\u4750"], /* CJK Ideograph Extension A */ + ["\u4751", "\u4751"], /* CJK Ideograph Extension A */ + ["\u4752", "\u4752"], /* CJK Ideograph Extension A */ + ["\u4753", "\u4753"], /* CJK Ideograph Extension A */ + ["\u4754", "\u4754"], /* CJK Ideograph Extension A */ + ["\u4755", "\u4755"], /* CJK Ideograph Extension A */ + ["\u4756", "\u4756"], /* CJK Ideograph Extension A */ + ["\u4757", "\u4757"], /* CJK Ideograph Extension A */ + ["\u4758", "\u4758"], /* CJK Ideograph Extension A */ + ["\u4759", "\u4759"], /* CJK Ideograph Extension A */ + ["\u475A", "\u475A"], /* CJK Ideograph Extension A */ + ["\u475B", "\u475B"], /* CJK Ideograph Extension A */ + ["\u475C", "\u475C"], /* CJK Ideograph Extension A */ + ["\u475D", "\u475D"], /* CJK Ideograph Extension A */ + ["\u475E", "\u475E"], /* CJK Ideograph Extension A */ + ["\u475F", "\u475F"], /* CJK Ideograph Extension A */ + ["\u4760", "\u4760"], /* CJK Ideograph Extension A */ + ["\u4761", "\u4761"], /* CJK Ideograph Extension A */ + ["\u4762", "\u4762"], /* CJK Ideograph Extension A */ + ["\u4763", "\u4763"], /* CJK Ideograph Extension A */ + ["\u4764", "\u4764"], /* CJK Ideograph Extension A */ + ["\u4765", "\u4765"], /* CJK Ideograph Extension A */ + ["\u4766", "\u4766"], /* CJK Ideograph Extension A */ + ["\u4767", "\u4767"], /* CJK Ideograph Extension A */ + ["\u4768", "\u4768"], /* CJK Ideograph Extension A */ + ["\u4769", "\u4769"], /* CJK Ideograph Extension A */ + ["\u476A", "\u476A"], /* CJK Ideograph Extension A */ + ["\u476B", "\u476B"], /* CJK Ideograph Extension A */ + ["\u476C", "\u476C"], /* CJK Ideograph Extension A */ + ["\u476D", "\u476D"], /* CJK Ideograph Extension A */ + ["\u476E", "\u476E"], /* CJK Ideograph Extension A */ + ["\u476F", "\u476F"], /* CJK Ideograph Extension A */ + ["\u4770", "\u4770"], /* CJK Ideograph Extension A */ + ["\u4771", "\u4771"], /* CJK Ideograph Extension A */ + ["\u4772", "\u4772"], /* CJK Ideograph Extension A */ + ["\u4773", "\u4773"], /* CJK Ideograph Extension A */ + ["\u4774", "\u4774"], /* CJK Ideograph Extension A */ + ["\u4775", "\u4775"], /* CJK Ideograph Extension A */ + ["\u4776", "\u4776"], /* CJK Ideograph Extension A */ + ["\u4777", "\u4777"], /* CJK Ideograph Extension A */ + ["\u4778", "\u4778"], /* CJK Ideograph Extension A */ + ["\u4779", "\u4779"], /* CJK Ideograph Extension A */ + ["\u477A", "\u477A"], /* CJK Ideograph Extension A */ + ["\u477B", "\u477B"], /* CJK Ideograph Extension A */ + ["\u477C", "\u477C"], /* CJK Ideograph Extension A */ + ["\u477D", "\u477D"], /* CJK Ideograph Extension A */ + ["\u477E", "\u477E"], /* CJK Ideograph Extension A */ + ["\u477F", "\u477F"], /* CJK Ideograph Extension A */ + ["\u4780", "\u4780"], /* CJK Ideograph Extension A */ + ["\u4781", "\u4781"], /* CJK Ideograph Extension A */ + ["\u4782", "\u4782"], /* CJK Ideograph Extension A */ + ["\u4783", "\u4783"], /* CJK Ideograph Extension A */ + ["\u4784", "\u4784"], /* CJK Ideograph Extension A */ + ["\u4785", "\u4785"], /* CJK Ideograph Extension A */ + ["\u4786", "\u4786"], /* CJK Ideograph Extension A */ + ["\u4787", "\u4787"], /* CJK Ideograph Extension A */ + ["\u4788", "\u4788"], /* CJK Ideograph Extension A */ + ["\u4789", "\u4789"], /* CJK Ideograph Extension A */ + ["\u478A", "\u478A"], /* CJK Ideograph Extension A */ + ["\u478B", "\u478B"], /* CJK Ideograph Extension A */ + ["\u478C", "\u478C"], /* CJK Ideograph Extension A */ + ["\u478D", "\u478D"], /* CJK Ideograph Extension A */ + ["\u478E", "\u478E"], /* CJK Ideograph Extension A */ + ["\u478F", "\u478F"], /* CJK Ideograph Extension A */ + ["\u4790", "\u4790"], /* CJK Ideograph Extension A */ + ["\u4791", "\u4791"], /* CJK Ideograph Extension A */ + ["\u4792", "\u4792"], /* CJK Ideograph Extension A */ + ["\u4793", "\u4793"], /* CJK Ideograph Extension A */ + ["\u4794", "\u4794"], /* CJK Ideograph Extension A */ + ["\u4795", "\u4795"], /* CJK Ideograph Extension A */ + ["\u4796", "\u4796"], /* CJK Ideograph Extension A */ + ["\u4797", "\u4797"], /* CJK Ideograph Extension A */ + ["\u4798", "\u4798"], /* CJK Ideograph Extension A */ + ["\u4799", "\u4799"], /* CJK Ideograph Extension A */ + ["\u479A", "\u479A"], /* CJK Ideograph Extension A */ + ["\u479B", "\u479B"], /* CJK Ideograph Extension A */ + ["\u479C", "\u479C"], /* CJK Ideograph Extension A */ + ["\u479D", "\u479D"], /* CJK Ideograph Extension A */ + ["\u479E", "\u479E"], /* CJK Ideograph Extension A */ + ["\u479F", "\u479F"], /* CJK Ideograph Extension A */ + ["\u47A0", "\u47A0"], /* CJK Ideograph Extension A */ + ["\u47A1", "\u47A1"], /* CJK Ideograph Extension A */ + ["\u47A2", "\u47A2"], /* CJK Ideograph Extension A */ + ["\u47A3", "\u47A3"], /* CJK Ideograph Extension A */ + ["\u47A4", "\u47A4"], /* CJK Ideograph Extension A */ + ["\u47A5", "\u47A5"], /* CJK Ideograph Extension A */ + ["\u47A6", "\u47A6"], /* CJK Ideograph Extension A */ + ["\u47A7", "\u47A7"], /* CJK Ideograph Extension A */ + ["\u47A8", "\u47A8"], /* CJK Ideograph Extension A */ + ["\u47A9", "\u47A9"], /* CJK Ideograph Extension A */ + ["\u47AA", "\u47AA"], /* CJK Ideograph Extension A */ + ["\u47AB", "\u47AB"], /* CJK Ideograph Extension A */ + ["\u47AC", "\u47AC"], /* CJK Ideograph Extension A */ + ["\u47AD", "\u47AD"], /* CJK Ideograph Extension A */ + ["\u47AE", "\u47AE"], /* CJK Ideograph Extension A */ + ["\u47AF", "\u47AF"], /* CJK Ideograph Extension A */ + ["\u47B0", "\u47B0"], /* CJK Ideograph Extension A */ + ["\u47B1", "\u47B1"], /* CJK Ideograph Extension A */ + ["\u47B2", "\u47B2"], /* CJK Ideograph Extension A */ + ["\u47B3", "\u47B3"], /* CJK Ideograph Extension A */ + ["\u47B4", "\u47B4"], /* CJK Ideograph Extension A */ + ["\u47B5", "\u47B5"], /* CJK Ideograph Extension A */ + ["\u47B6", "\u47B6"], /* CJK Ideograph Extension A */ + ["\u47B7", "\u47B7"], /* CJK Ideograph Extension A */ + ["\u47B8", "\u47B8"], /* CJK Ideograph Extension A */ + ["\u47B9", "\u47B9"], /* CJK Ideograph Extension A */ + ["\u47BA", "\u47BA"], /* CJK Ideograph Extension A */ + ["\u47BB", "\u47BB"], /* CJK Ideograph Extension A */ + ["\u47BC", "\u47BC"], /* CJK Ideograph Extension A */ + ["\u47BD", "\u47BD"], /* CJK Ideograph Extension A */ + ["\u47BE", "\u47BE"], /* CJK Ideograph Extension A */ + ["\u47BF", "\u47BF"], /* CJK Ideograph Extension A */ + ["\u47C0", "\u47C0"], /* CJK Ideograph Extension A */ + ["\u47C1", "\u47C1"], /* CJK Ideograph Extension A */ + ["\u47C2", "\u47C2"], /* CJK Ideograph Extension A */ + ["\u47C3", "\u47C3"], /* CJK Ideograph Extension A */ + ["\u47C4", "\u47C4"], /* CJK Ideograph Extension A */ + ["\u47C5", "\u47C5"], /* CJK Ideograph Extension A */ + ["\u47C6", "\u47C6"], /* CJK Ideograph Extension A */ + ["\u47C7", "\u47C7"], /* CJK Ideograph Extension A */ + ["\u47C8", "\u47C8"], /* CJK Ideograph Extension A */ + ["\u47C9", "\u47C9"], /* CJK Ideograph Extension A */ + ["\u47CA", "\u47CA"], /* CJK Ideograph Extension A */ + ["\u47CB", "\u47CB"], /* CJK Ideograph Extension A */ + ["\u47CC", "\u47CC"], /* CJK Ideograph Extension A */ + ["\u47CD", "\u47CD"], /* CJK Ideograph Extension A */ + ["\u47CE", "\u47CE"], /* CJK Ideograph Extension A */ + ["\u47CF", "\u47CF"], /* CJK Ideograph Extension A */ + ["\u47D0", "\u47D0"], /* CJK Ideograph Extension A */ + ["\u47D1", "\u47D1"], /* CJK Ideograph Extension A */ + ["\u47D2", "\u47D2"], /* CJK Ideograph Extension A */ + ["\u47D3", "\u47D3"], /* CJK Ideograph Extension A */ + ["\u47D4", "\u47D4"], /* CJK Ideograph Extension A */ + ["\u47D5", "\u47D5"], /* CJK Ideograph Extension A */ + ["\u47D6", "\u47D6"], /* CJK Ideograph Extension A */ + ["\u47D7", "\u47D7"], /* CJK Ideograph Extension A */ + ["\u47D8", "\u47D8"], /* CJK Ideograph Extension A */ + ["\u47D9", "\u47D9"], /* CJK Ideograph Extension A */ + ["\u47DA", "\u47DA"], /* CJK Ideograph Extension A */ + ["\u47DB", "\u47DB"], /* CJK Ideograph Extension A */ + ["\u47DC", "\u47DC"], /* CJK Ideograph Extension A */ + ["\u47DD", "\u47DD"], /* CJK Ideograph Extension A */ + ["\u47DE", "\u47DE"], /* CJK Ideograph Extension A */ + ["\u47DF", "\u47DF"], /* CJK Ideograph Extension A */ + ["\u47E0", "\u47E0"], /* CJK Ideograph Extension A */ + ["\u47E1", "\u47E1"], /* CJK Ideograph Extension A */ + ["\u47E2", "\u47E2"], /* CJK Ideograph Extension A */ + ["\u47E3", "\u47E3"], /* CJK Ideograph Extension A */ + ["\u47E4", "\u47E4"], /* CJK Ideograph Extension A */ + ["\u47E5", "\u47E5"], /* CJK Ideograph Extension A */ + ["\u47E6", "\u47E6"], /* CJK Ideograph Extension A */ + ["\u47E7", "\u47E7"], /* CJK Ideograph Extension A */ + ["\u47E8", "\u47E8"], /* CJK Ideograph Extension A */ + ["\u47E9", "\u47E9"], /* CJK Ideograph Extension A */ + ["\u47EA", "\u47EA"], /* CJK Ideograph Extension A */ + ["\u47EB", "\u47EB"], /* CJK Ideograph Extension A */ + ["\u47EC", "\u47EC"], /* CJK Ideograph Extension A */ + ["\u47ED", "\u47ED"], /* CJK Ideograph Extension A */ + ["\u47EE", "\u47EE"], /* CJK Ideograph Extension A */ + ["\u47EF", "\u47EF"], /* CJK Ideograph Extension A */ + ["\u47F0", "\u47F0"], /* CJK Ideograph Extension A */ + ["\u47F1", "\u47F1"], /* CJK Ideograph Extension A */ + ["\u47F2", "\u47F2"], /* CJK Ideograph Extension A */ + ["\u47F3", "\u47F3"], /* CJK Ideograph Extension A */ + ["\u47F4", "\u47F4"], /* CJK Ideograph Extension A */ + ["\u47F5", "\u47F5"], /* CJK Ideograph Extension A */ + ["\u47F6", "\u47F6"], /* CJK Ideograph Extension A */ + ["\u47F7", "\u47F7"], /* CJK Ideograph Extension A */ + ["\u47F8", "\u47F8"], /* CJK Ideograph Extension A */ + ["\u47F9", "\u47F9"], /* CJK Ideograph Extension A */ + ["\u47FA", "\u47FA"], /* CJK Ideograph Extension A */ + ["\u47FB", "\u47FB"], /* CJK Ideograph Extension A */ + ["\u47FC", "\u47FC"], /* CJK Ideograph Extension A */ + ["\u47FD", "\u47FD"], /* CJK Ideograph Extension A */ + ["\u47FE", "\u47FE"], /* CJK Ideograph Extension A */ + ["\u47FF", "\u47FF"], /* CJK Ideograph Extension A */ + ["\u4800", "\u4800"], /* CJK Ideograph Extension A */ + ["\u4801", "\u4801"], /* CJK Ideograph Extension A */ + ["\u4802", "\u4802"], /* CJK Ideograph Extension A */ + ["\u4803", "\u4803"], /* CJK Ideograph Extension A */ + ["\u4804", "\u4804"], /* CJK Ideograph Extension A */ + ["\u4805", "\u4805"], /* CJK Ideograph Extension A */ + ["\u4806", "\u4806"], /* CJK Ideograph Extension A */ + ["\u4807", "\u4807"], /* CJK Ideograph Extension A */ + ["\u4808", "\u4808"], /* CJK Ideograph Extension A */ + ["\u4809", "\u4809"], /* CJK Ideograph Extension A */ + ["\u480A", "\u480A"], /* CJK Ideograph Extension A */ + ["\u480B", "\u480B"], /* CJK Ideograph Extension A */ + ["\u480C", "\u480C"], /* CJK Ideograph Extension A */ + ["\u480D", "\u480D"], /* CJK Ideograph Extension A */ + ["\u480E", "\u480E"], /* CJK Ideograph Extension A */ + ["\u480F", "\u480F"], /* CJK Ideograph Extension A */ + ["\u4810", "\u4810"], /* CJK Ideograph Extension A */ + ["\u4811", "\u4811"], /* CJK Ideograph Extension A */ + ["\u4812", "\u4812"], /* CJK Ideograph Extension A */ + ["\u4813", "\u4813"], /* CJK Ideograph Extension A */ + ["\u4814", "\u4814"], /* CJK Ideograph Extension A */ + ["\u4815", "\u4815"], /* CJK Ideograph Extension A */ + ["\u4816", "\u4816"], /* CJK Ideograph Extension A */ + ["\u4817", "\u4817"], /* CJK Ideograph Extension A */ + ["\u4818", "\u4818"], /* CJK Ideograph Extension A */ + ["\u4819", "\u4819"], /* CJK Ideograph Extension A */ + ["\u481A", "\u481A"], /* CJK Ideograph Extension A */ + ["\u481B", "\u481B"], /* CJK Ideograph Extension A */ + ["\u481C", "\u481C"], /* CJK Ideograph Extension A */ + ["\u481D", "\u481D"], /* CJK Ideograph Extension A */ + ["\u481E", "\u481E"], /* CJK Ideograph Extension A */ + ["\u481F", "\u481F"], /* CJK Ideograph Extension A */ + ["\u4820", "\u4820"], /* CJK Ideograph Extension A */ + ["\u4821", "\u4821"], /* CJK Ideograph Extension A */ + ["\u4822", "\u4822"], /* CJK Ideograph Extension A */ + ["\u4823", "\u4823"], /* CJK Ideograph Extension A */ + ["\u4824", "\u4824"], /* CJK Ideograph Extension A */ + ["\u4825", "\u4825"], /* CJK Ideograph Extension A */ + ["\u4826", "\u4826"], /* CJK Ideograph Extension A */ + ["\u4827", "\u4827"], /* CJK Ideograph Extension A */ + ["\u4828", "\u4828"], /* CJK Ideograph Extension A */ + ["\u4829", "\u4829"], /* CJK Ideograph Extension A */ + ["\u482A", "\u482A"], /* CJK Ideograph Extension A */ + ["\u482B", "\u482B"], /* CJK Ideograph Extension A */ + ["\u482C", "\u482C"], /* CJK Ideograph Extension A */ + ["\u482D", "\u482D"], /* CJK Ideograph Extension A */ + ["\u482E", "\u482E"], /* CJK Ideograph Extension A */ + ["\u482F", "\u482F"], /* CJK Ideograph Extension A */ + ["\u4830", "\u4830"], /* CJK Ideograph Extension A */ + ["\u4831", "\u4831"], /* CJK Ideograph Extension A */ + ["\u4832", "\u4832"], /* CJK Ideograph Extension A */ + ["\u4833", "\u4833"], /* CJK Ideograph Extension A */ + ["\u4834", "\u4834"], /* CJK Ideograph Extension A */ + ["\u4835", "\u4835"], /* CJK Ideograph Extension A */ + ["\u4836", "\u4836"], /* CJK Ideograph Extension A */ + ["\u4837", "\u4837"], /* CJK Ideograph Extension A */ + ["\u4838", "\u4838"], /* CJK Ideograph Extension A */ + ["\u4839", "\u4839"], /* CJK Ideograph Extension A */ + ["\u483A", "\u483A"], /* CJK Ideograph Extension A */ + ["\u483B", "\u483B"], /* CJK Ideograph Extension A */ + ["\u483C", "\u483C"], /* CJK Ideograph Extension A */ + ["\u483D", "\u483D"], /* CJK Ideograph Extension A */ + ["\u483E", "\u483E"], /* CJK Ideograph Extension A */ + ["\u483F", "\u483F"], /* CJK Ideograph Extension A */ + ["\u4840", "\u4840"], /* CJK Ideograph Extension A */ + ["\u4841", "\u4841"], /* CJK Ideograph Extension A */ + ["\u4842", "\u4842"], /* CJK Ideograph Extension A */ + ["\u4843", "\u4843"], /* CJK Ideograph Extension A */ + ["\u4844", "\u4844"], /* CJK Ideograph Extension A */ + ["\u4845", "\u4845"], /* CJK Ideograph Extension A */ + ["\u4846", "\u4846"], /* CJK Ideograph Extension A */ + ["\u4847", "\u4847"], /* CJK Ideograph Extension A */ + ["\u4848", "\u4848"], /* CJK Ideograph Extension A */ + ["\u4849", "\u4849"], /* CJK Ideograph Extension A */ + ["\u484A", "\u484A"], /* CJK Ideograph Extension A */ + ["\u484B", "\u484B"], /* CJK Ideograph Extension A */ + ["\u484C", "\u484C"], /* CJK Ideograph Extension A */ + ["\u484D", "\u484D"], /* CJK Ideograph Extension A */ + ["\u484E", "\u484E"], /* CJK Ideograph Extension A */ + ["\u484F", "\u484F"], /* CJK Ideograph Extension A */ + ["\u4850", "\u4850"], /* CJK Ideograph Extension A */ + ["\u4851", "\u4851"], /* CJK Ideograph Extension A */ + ["\u4852", "\u4852"], /* CJK Ideograph Extension A */ + ["\u4853", "\u4853"], /* CJK Ideograph Extension A */ + ["\u4854", "\u4854"], /* CJK Ideograph Extension A */ + ["\u4855", "\u4855"], /* CJK Ideograph Extension A */ + ["\u4856", "\u4856"], /* CJK Ideograph Extension A */ + ["\u4857", "\u4857"], /* CJK Ideograph Extension A */ + ["\u4858", "\u4858"], /* CJK Ideograph Extension A */ + ["\u4859", "\u4859"], /* CJK Ideograph Extension A */ + ["\u485A", "\u485A"], /* CJK Ideograph Extension A */ + ["\u485B", "\u485B"], /* CJK Ideograph Extension A */ + ["\u485C", "\u485C"], /* CJK Ideograph Extension A */ + ["\u485D", "\u485D"], /* CJK Ideograph Extension A */ + ["\u485E", "\u485E"], /* CJK Ideograph Extension A */ + ["\u485F", "\u485F"], /* CJK Ideograph Extension A */ + ["\u4860", "\u4860"], /* CJK Ideograph Extension A */ + ["\u4861", "\u4861"], /* CJK Ideograph Extension A */ + ["\u4862", "\u4862"], /* CJK Ideograph Extension A */ + ["\u4863", "\u4863"], /* CJK Ideograph Extension A */ + ["\u4864", "\u4864"], /* CJK Ideograph Extension A */ + ["\u4865", "\u4865"], /* CJK Ideograph Extension A */ + ["\u4866", "\u4866"], /* CJK Ideograph Extension A */ + ["\u4867", "\u4867"], /* CJK Ideograph Extension A */ + ["\u4868", "\u4868"], /* CJK Ideograph Extension A */ + ["\u4869", "\u4869"], /* CJK Ideograph Extension A */ + ["\u486A", "\u486A"], /* CJK Ideograph Extension A */ + ["\u486B", "\u486B"], /* CJK Ideograph Extension A */ + ["\u486C", "\u486C"], /* CJK Ideograph Extension A */ + ["\u486D", "\u486D"], /* CJK Ideograph Extension A */ + ["\u486E", "\u486E"], /* CJK Ideograph Extension A */ + ["\u486F", "\u486F"], /* CJK Ideograph Extension A */ + ["\u4870", "\u4870"], /* CJK Ideograph Extension A */ + ["\u4871", "\u4871"], /* CJK Ideograph Extension A */ + ["\u4872", "\u4872"], /* CJK Ideograph Extension A */ + ["\u4873", "\u4873"], /* CJK Ideograph Extension A */ + ["\u4874", "\u4874"], /* CJK Ideograph Extension A */ + ["\u4875", "\u4875"], /* CJK Ideograph Extension A */ + ["\u4876", "\u4876"], /* CJK Ideograph Extension A */ + ["\u4877", "\u4877"], /* CJK Ideograph Extension A */ + ["\u4878", "\u4878"], /* CJK Ideograph Extension A */ + ["\u4879", "\u4879"], /* CJK Ideograph Extension A */ + ["\u487A", "\u487A"], /* CJK Ideograph Extension A */ + ["\u487B", "\u487B"], /* CJK Ideograph Extension A */ + ["\u487C", "\u487C"], /* CJK Ideograph Extension A */ + ["\u487D", "\u487D"], /* CJK Ideograph Extension A */ + ["\u487E", "\u487E"], /* CJK Ideograph Extension A */ + ["\u487F", "\u487F"], /* CJK Ideograph Extension A */ + ["\u4880", "\u4880"], /* CJK Ideograph Extension A */ + ["\u4881", "\u4881"], /* CJK Ideograph Extension A */ + ["\u4882", "\u4882"], /* CJK Ideograph Extension A */ + ["\u4883", "\u4883"], /* CJK Ideograph Extension A */ + ["\u4884", "\u4884"], /* CJK Ideograph Extension A */ + ["\u4885", "\u4885"], /* CJK Ideograph Extension A */ + ["\u4886", "\u4886"], /* CJK Ideograph Extension A */ + ["\u4887", "\u4887"], /* CJK Ideograph Extension A */ + ["\u4888", "\u4888"], /* CJK Ideograph Extension A */ + ["\u4889", "\u4889"], /* CJK Ideograph Extension A */ + ["\u488A", "\u488A"], /* CJK Ideograph Extension A */ + ["\u488B", "\u488B"], /* CJK Ideograph Extension A */ + ["\u488C", "\u488C"], /* CJK Ideograph Extension A */ + ["\u488D", "\u488D"], /* CJK Ideograph Extension A */ + ["\u488E", "\u488E"], /* CJK Ideograph Extension A */ + ["\u488F", "\u488F"], /* CJK Ideograph Extension A */ + ["\u4890", "\u4890"], /* CJK Ideograph Extension A */ + ["\u4891", "\u4891"], /* CJK Ideograph Extension A */ + ["\u4892", "\u4892"], /* CJK Ideograph Extension A */ + ["\u4893", "\u4893"], /* CJK Ideograph Extension A */ + ["\u4894", "\u4894"], /* CJK Ideograph Extension A */ + ["\u4895", "\u4895"], /* CJK Ideograph Extension A */ + ["\u4896", "\u4896"], /* CJK Ideograph Extension A */ + ["\u4897", "\u4897"], /* CJK Ideograph Extension A */ + ["\u4898", "\u4898"], /* CJK Ideograph Extension A */ + ["\u4899", "\u4899"], /* CJK Ideograph Extension A */ + ["\u489A", "\u489A"], /* CJK Ideograph Extension A */ + ["\u489B", "\u489B"], /* CJK Ideograph Extension A */ + ["\u489C", "\u489C"], /* CJK Ideograph Extension A */ + ["\u489D", "\u489D"], /* CJK Ideograph Extension A */ + ["\u489E", "\u489E"], /* CJK Ideograph Extension A */ + ["\u489F", "\u489F"], /* CJK Ideograph Extension A */ + ["\u48A0", "\u48A0"], /* CJK Ideograph Extension A */ + ["\u48A1", "\u48A1"], /* CJK Ideograph Extension A */ + ["\u48A2", "\u48A2"], /* CJK Ideograph Extension A */ + ["\u48A3", "\u48A3"], /* CJK Ideograph Extension A */ + ["\u48A4", "\u48A4"], /* CJK Ideograph Extension A */ + ["\u48A5", "\u48A5"], /* CJK Ideograph Extension A */ + ["\u48A6", "\u48A6"], /* CJK Ideograph Extension A */ + ["\u48A7", "\u48A7"], /* CJK Ideograph Extension A */ + ["\u48A8", "\u48A8"], /* CJK Ideograph Extension A */ + ["\u48A9", "\u48A9"], /* CJK Ideograph Extension A */ + ["\u48AA", "\u48AA"], /* CJK Ideograph Extension A */ + ["\u48AB", "\u48AB"], /* CJK Ideograph Extension A */ + ["\u48AC", "\u48AC"], /* CJK Ideograph Extension A */ + ["\u48AD", "\u48AD"], /* CJK Ideograph Extension A */ + ["\u48AE", "\u48AE"], /* CJK Ideograph Extension A */ + ["\u48AF", "\u48AF"], /* CJK Ideograph Extension A */ + ["\u48B0", "\u48B0"], /* CJK Ideograph Extension A */ + ["\u48B1", "\u48B1"], /* CJK Ideograph Extension A */ + ["\u48B2", "\u48B2"], /* CJK Ideograph Extension A */ + ["\u48B3", "\u48B3"], /* CJK Ideograph Extension A */ + ["\u48B4", "\u48B4"], /* CJK Ideograph Extension A */ + ["\u48B5", "\u48B5"], /* CJK Ideograph Extension A */ + ["\u48B6", "\u48B6"], /* CJK Ideograph Extension A */ + ["\u48B7", "\u48B7"], /* CJK Ideograph Extension A */ + ["\u48B8", "\u48B8"], /* CJK Ideograph Extension A */ + ["\u48B9", "\u48B9"], /* CJK Ideograph Extension A */ + ["\u48BA", "\u48BA"], /* CJK Ideograph Extension A */ + ["\u48BB", "\u48BB"], /* CJK Ideograph Extension A */ + ["\u48BC", "\u48BC"], /* CJK Ideograph Extension A */ + ["\u48BD", "\u48BD"], /* CJK Ideograph Extension A */ + ["\u48BE", "\u48BE"], /* CJK Ideograph Extension A */ + ["\u48BF", "\u48BF"], /* CJK Ideograph Extension A */ + ["\u48C0", "\u48C0"], /* CJK Ideograph Extension A */ + ["\u48C1", "\u48C1"], /* CJK Ideograph Extension A */ + ["\u48C2", "\u48C2"], /* CJK Ideograph Extension A */ + ["\u48C3", "\u48C3"], /* CJK Ideograph Extension A */ + ["\u48C4", "\u48C4"], /* CJK Ideograph Extension A */ + ["\u48C5", "\u48C5"], /* CJK Ideograph Extension A */ + ["\u48C6", "\u48C6"], /* CJK Ideograph Extension A */ + ["\u48C7", "\u48C7"], /* CJK Ideograph Extension A */ + ["\u48C8", "\u48C8"], /* CJK Ideograph Extension A */ + ["\u48C9", "\u48C9"], /* CJK Ideograph Extension A */ + ["\u48CA", "\u48CA"], /* CJK Ideograph Extension A */ + ["\u48CB", "\u48CB"], /* CJK Ideograph Extension A */ + ["\u48CC", "\u48CC"], /* CJK Ideograph Extension A */ + ["\u48CD", "\u48CD"], /* CJK Ideograph Extension A */ + ["\u48CE", "\u48CE"], /* CJK Ideograph Extension A */ + ["\u48CF", "\u48CF"], /* CJK Ideograph Extension A */ + ["\u48D0", "\u48D0"], /* CJK Ideograph Extension A */ + ["\u48D1", "\u48D1"], /* CJK Ideograph Extension A */ + ["\u48D2", "\u48D2"], /* CJK Ideograph Extension A */ + ["\u48D3", "\u48D3"], /* CJK Ideograph Extension A */ + ["\u48D4", "\u48D4"], /* CJK Ideograph Extension A */ + ["\u48D5", "\u48D5"], /* CJK Ideograph Extension A */ + ["\u48D6", "\u48D6"], /* CJK Ideograph Extension A */ + ["\u48D7", "\u48D7"], /* CJK Ideograph Extension A */ + ["\u48D8", "\u48D8"], /* CJK Ideograph Extension A */ + ["\u48D9", "\u48D9"], /* CJK Ideograph Extension A */ + ["\u48DA", "\u48DA"], /* CJK Ideograph Extension A */ + ["\u48DB", "\u48DB"], /* CJK Ideograph Extension A */ + ["\u48DC", "\u48DC"], /* CJK Ideograph Extension A */ + ["\u48DD", "\u48DD"], /* CJK Ideograph Extension A */ + ["\u48DE", "\u48DE"], /* CJK Ideograph Extension A */ + ["\u48DF", "\u48DF"], /* CJK Ideograph Extension A */ + ["\u48E0", "\u48E0"], /* CJK Ideograph Extension A */ + ["\u48E1", "\u48E1"], /* CJK Ideograph Extension A */ + ["\u48E2", "\u48E2"], /* CJK Ideograph Extension A */ + ["\u48E3", "\u48E3"], /* CJK Ideograph Extension A */ + ["\u48E4", "\u48E4"], /* CJK Ideograph Extension A */ + ["\u48E5", "\u48E5"], /* CJK Ideograph Extension A */ + ["\u48E6", "\u48E6"], /* CJK Ideograph Extension A */ + ["\u48E7", "\u48E7"], /* CJK Ideograph Extension A */ + ["\u48E8", "\u48E8"], /* CJK Ideograph Extension A */ + ["\u48E9", "\u48E9"], /* CJK Ideograph Extension A */ + ["\u48EA", "\u48EA"], /* CJK Ideograph Extension A */ + ["\u48EB", "\u48EB"], /* CJK Ideograph Extension A */ + ["\u48EC", "\u48EC"], /* CJK Ideograph Extension A */ + ["\u48ED", "\u48ED"], /* CJK Ideograph Extension A */ + ["\u48EE", "\u48EE"], /* CJK Ideograph Extension A */ + ["\u48EF", "\u48EF"], /* CJK Ideograph Extension A */ + ["\u48F0", "\u48F0"], /* CJK Ideograph Extension A */ + ["\u48F1", "\u48F1"], /* CJK Ideograph Extension A */ + ["\u48F2", "\u48F2"], /* CJK Ideograph Extension A */ + ["\u48F3", "\u48F3"], /* CJK Ideograph Extension A */ + ["\u48F4", "\u48F4"], /* CJK Ideograph Extension A */ + ["\u48F5", "\u48F5"], /* CJK Ideograph Extension A */ + ["\u48F6", "\u48F6"], /* CJK Ideograph Extension A */ + ["\u48F7", "\u48F7"], /* CJK Ideograph Extension A */ + ["\u48F8", "\u48F8"], /* CJK Ideograph Extension A */ + ["\u48F9", "\u48F9"], /* CJK Ideograph Extension A */ + ["\u48FA", "\u48FA"], /* CJK Ideograph Extension A */ + ["\u48FB", "\u48FB"], /* CJK Ideograph Extension A */ + ["\u48FC", "\u48FC"], /* CJK Ideograph Extension A */ + ["\u48FD", "\u48FD"], /* CJK Ideograph Extension A */ + ["\u48FE", "\u48FE"], /* CJK Ideograph Extension A */ + ["\u48FF", "\u48FF"], /* CJK Ideograph Extension A */ + ["\u4900", "\u4900"], /* CJK Ideograph Extension A */ + ["\u4901", "\u4901"], /* CJK Ideograph Extension A */ + ["\u4902", "\u4902"], /* CJK Ideograph Extension A */ + ["\u4903", "\u4903"], /* CJK Ideograph Extension A */ + ["\u4904", "\u4904"], /* CJK Ideograph Extension A */ + ["\u4905", "\u4905"], /* CJK Ideograph Extension A */ + ["\u4906", "\u4906"], /* CJK Ideograph Extension A */ + ["\u4907", "\u4907"], /* CJK Ideograph Extension A */ + ["\u4908", "\u4908"], /* CJK Ideograph Extension A */ + ["\u4909", "\u4909"], /* CJK Ideograph Extension A */ + ["\u490A", "\u490A"], /* CJK Ideograph Extension A */ + ["\u490B", "\u490B"], /* CJK Ideograph Extension A */ + ["\u490C", "\u490C"], /* CJK Ideograph Extension A */ + ["\u490D", "\u490D"], /* CJK Ideograph Extension A */ + ["\u490E", "\u490E"], /* CJK Ideograph Extension A */ + ["\u490F", "\u490F"], /* CJK Ideograph Extension A */ + ["\u4910", "\u4910"], /* CJK Ideograph Extension A */ + ["\u4911", "\u4911"], /* CJK Ideograph Extension A */ + ["\u4912", "\u4912"], /* CJK Ideograph Extension A */ + ["\u4913", "\u4913"], /* CJK Ideograph Extension A */ + ["\u4914", "\u4914"], /* CJK Ideograph Extension A */ + ["\u4915", "\u4915"], /* CJK Ideograph Extension A */ + ["\u4916", "\u4916"], /* CJK Ideograph Extension A */ + ["\u4917", "\u4917"], /* CJK Ideograph Extension A */ + ["\u4918", "\u4918"], /* CJK Ideograph Extension A */ + ["\u4919", "\u4919"], /* CJK Ideograph Extension A */ + ["\u491A", "\u491A"], /* CJK Ideograph Extension A */ + ["\u491B", "\u491B"], /* CJK Ideograph Extension A */ + ["\u491C", "\u491C"], /* CJK Ideograph Extension A */ + ["\u491D", "\u491D"], /* CJK Ideograph Extension A */ + ["\u491E", "\u491E"], /* CJK Ideograph Extension A */ + ["\u491F", "\u491F"], /* CJK Ideograph Extension A */ + ["\u4920", "\u4920"], /* CJK Ideograph Extension A */ + ["\u4921", "\u4921"], /* CJK Ideograph Extension A */ + ["\u4922", "\u4922"], /* CJK Ideograph Extension A */ + ["\u4923", "\u4923"], /* CJK Ideograph Extension A */ + ["\u4924", "\u4924"], /* CJK Ideograph Extension A */ + ["\u4925", "\u4925"], /* CJK Ideograph Extension A */ + ["\u4926", "\u4926"], /* CJK Ideograph Extension A */ + ["\u4927", "\u4927"], /* CJK Ideograph Extension A */ + ["\u4928", "\u4928"], /* CJK Ideograph Extension A */ + ["\u4929", "\u4929"], /* CJK Ideograph Extension A */ + ["\u492A", "\u492A"], /* CJK Ideograph Extension A */ + ["\u492B", "\u492B"], /* CJK Ideograph Extension A */ + ["\u492C", "\u492C"], /* CJK Ideograph Extension A */ + ["\u492D", "\u492D"], /* CJK Ideograph Extension A */ + ["\u492E", "\u492E"], /* CJK Ideograph Extension A */ + ["\u492F", "\u492F"], /* CJK Ideograph Extension A */ + ["\u4930", "\u4930"], /* CJK Ideograph Extension A */ + ["\u4931", "\u4931"], /* CJK Ideograph Extension A */ + ["\u4932", "\u4932"], /* CJK Ideograph Extension A */ + ["\u4933", "\u4933"], /* CJK Ideograph Extension A */ + ["\u4934", "\u4934"], /* CJK Ideograph Extension A */ + ["\u4935", "\u4935"], /* CJK Ideograph Extension A */ + ["\u4936", "\u4936"], /* CJK Ideograph Extension A */ + ["\u4937", "\u4937"], /* CJK Ideograph Extension A */ + ["\u4938", "\u4938"], /* CJK Ideograph Extension A */ + ["\u4939", "\u4939"], /* CJK Ideograph Extension A */ + ["\u493A", "\u493A"], /* CJK Ideograph Extension A */ + ["\u493B", "\u493B"], /* CJK Ideograph Extension A */ + ["\u493C", "\u493C"], /* CJK Ideograph Extension A */ + ["\u493D", "\u493D"], /* CJK Ideograph Extension A */ + ["\u493E", "\u493E"], /* CJK Ideograph Extension A */ + ["\u493F", "\u493F"], /* CJK Ideograph Extension A */ + ["\u4940", "\u4940"], /* CJK Ideograph Extension A */ + ["\u4941", "\u4941"], /* CJK Ideograph Extension A */ + ["\u4942", "\u4942"], /* CJK Ideograph Extension A */ + ["\u4943", "\u4943"], /* CJK Ideograph Extension A */ + ["\u4944", "\u4944"], /* CJK Ideograph Extension A */ + ["\u4945", "\u4945"], /* CJK Ideograph Extension A */ + ["\u4946", "\u4946"], /* CJK Ideograph Extension A */ + ["\u4947", "\u4947"], /* CJK Ideograph Extension A */ + ["\u4948", "\u4948"], /* CJK Ideograph Extension A */ + ["\u4949", "\u4949"], /* CJK Ideograph Extension A */ + ["\u494A", "\u494A"], /* CJK Ideograph Extension A */ + ["\u494B", "\u494B"], /* CJK Ideograph Extension A */ + ["\u494C", "\u494C"], /* CJK Ideograph Extension A */ + ["\u494D", "\u494D"], /* CJK Ideograph Extension A */ + ["\u494E", "\u494E"], /* CJK Ideograph Extension A */ + ["\u494F", "\u494F"], /* CJK Ideograph Extension A */ + ["\u4950", "\u4950"], /* CJK Ideograph Extension A */ + ["\u4951", "\u4951"], /* CJK Ideograph Extension A */ + ["\u4952", "\u4952"], /* CJK Ideograph Extension A */ + ["\u4953", "\u4953"], /* CJK Ideograph Extension A */ + ["\u4954", "\u4954"], /* CJK Ideograph Extension A */ + ["\u4955", "\u4955"], /* CJK Ideograph Extension A */ + ["\u4956", "\u4956"], /* CJK Ideograph Extension A */ + ["\u4957", "\u4957"], /* CJK Ideograph Extension A */ + ["\u4958", "\u4958"], /* CJK Ideograph Extension A */ + ["\u4959", "\u4959"], /* CJK Ideograph Extension A */ + ["\u495A", "\u495A"], /* CJK Ideograph Extension A */ + ["\u495B", "\u495B"], /* CJK Ideograph Extension A */ + ["\u495C", "\u495C"], /* CJK Ideograph Extension A */ + ["\u495D", "\u495D"], /* CJK Ideograph Extension A */ + ["\u495E", "\u495E"], /* CJK Ideograph Extension A */ + ["\u495F", "\u495F"], /* CJK Ideograph Extension A */ + ["\u4960", "\u4960"], /* CJK Ideograph Extension A */ + ["\u4961", "\u4961"], /* CJK Ideograph Extension A */ + ["\u4962", "\u4962"], /* CJK Ideograph Extension A */ + ["\u4963", "\u4963"], /* CJK Ideograph Extension A */ + ["\u4964", "\u4964"], /* CJK Ideograph Extension A */ + ["\u4965", "\u4965"], /* CJK Ideograph Extension A */ + ["\u4966", "\u4966"], /* CJK Ideograph Extension A */ + ["\u4967", "\u4967"], /* CJK Ideograph Extension A */ + ["\u4968", "\u4968"], /* CJK Ideograph Extension A */ + ["\u4969", "\u4969"], /* CJK Ideograph Extension A */ + ["\u496A", "\u496A"], /* CJK Ideograph Extension A */ + ["\u496B", "\u496B"], /* CJK Ideograph Extension A */ + ["\u496C", "\u496C"], /* CJK Ideograph Extension A */ + ["\u496D", "\u496D"], /* CJK Ideograph Extension A */ + ["\u496E", "\u496E"], /* CJK Ideograph Extension A */ + ["\u496F", "\u496F"], /* CJK Ideograph Extension A */ + ["\u4970", "\u4970"], /* CJK Ideograph Extension A */ + ["\u4971", "\u4971"], /* CJK Ideograph Extension A */ + ["\u4972", "\u4972"], /* CJK Ideograph Extension A */ + ["\u4973", "\u4973"], /* CJK Ideograph Extension A */ + ["\u4974", "\u4974"], /* CJK Ideograph Extension A */ + ["\u4975", "\u4975"], /* CJK Ideograph Extension A */ + ["\u4976", "\u4976"], /* CJK Ideograph Extension A */ + ["\u4977", "\u4977"], /* CJK Ideograph Extension A */ + ["\u4978", "\u4978"], /* CJK Ideograph Extension A */ + ["\u4979", "\u4979"], /* CJK Ideograph Extension A */ + ["\u497A", "\u497A"], /* CJK Ideograph Extension A */ + ["\u497B", "\u497B"], /* CJK Ideograph Extension A */ + ["\u497C", "\u497C"], /* CJK Ideograph Extension A */ + ["\u497D", "\u497D"], /* CJK Ideograph Extension A */ + ["\u497E", "\u497E"], /* CJK Ideograph Extension A */ + ["\u497F", "\u497F"], /* CJK Ideograph Extension A */ + ["\u4980", "\u4980"], /* CJK Ideograph Extension A */ + ["\u4981", "\u4981"], /* CJK Ideograph Extension A */ + ["\u4982", "\u4982"], /* CJK Ideograph Extension A */ + ["\u4983", "\u4983"], /* CJK Ideograph Extension A */ + ["\u4984", "\u4984"], /* CJK Ideograph Extension A */ + ["\u4985", "\u4985"], /* CJK Ideograph Extension A */ + ["\u4986", "\u4986"], /* CJK Ideograph Extension A */ + ["\u4987", "\u4987"], /* CJK Ideograph Extension A */ + ["\u4988", "\u4988"], /* CJK Ideograph Extension A */ + ["\u4989", "\u4989"], /* CJK Ideograph Extension A */ + ["\u498A", "\u498A"], /* CJK Ideograph Extension A */ + ["\u498B", "\u498B"], /* CJK Ideograph Extension A */ + ["\u498C", "\u498C"], /* CJK Ideograph Extension A */ + ["\u498D", "\u498D"], /* CJK Ideograph Extension A */ + ["\u498E", "\u498E"], /* CJK Ideograph Extension A */ + ["\u498F", "\u498F"], /* CJK Ideograph Extension A */ + ["\u4990", "\u4990"], /* CJK Ideograph Extension A */ + ["\u4991", "\u4991"], /* CJK Ideograph Extension A */ + ["\u4992", "\u4992"], /* CJK Ideograph Extension A */ + ["\u4993", "\u4993"], /* CJK Ideograph Extension A */ + ["\u4994", "\u4994"], /* CJK Ideograph Extension A */ + ["\u4995", "\u4995"], /* CJK Ideograph Extension A */ + ["\u4996", "\u4996"], /* CJK Ideograph Extension A */ + ["\u4997", "\u4997"], /* CJK Ideograph Extension A */ + ["\u4998", "\u4998"], /* CJK Ideograph Extension A */ + ["\u4999", "\u4999"], /* CJK Ideograph Extension A */ + ["\u499A", "\u499A"], /* CJK Ideograph Extension A */ + ["\u499B", "\u499B"], /* CJK Ideograph Extension A */ + ["\u499C", "\u499C"], /* CJK Ideograph Extension A */ + ["\u499D", "\u499D"], /* CJK Ideograph Extension A */ + ["\u499E", "\u499E"], /* CJK Ideograph Extension A */ + ["\u499F", "\u499F"], /* CJK Ideograph Extension A */ + ["\u49A0", "\u49A0"], /* CJK Ideograph Extension A */ + ["\u49A1", "\u49A1"], /* CJK Ideograph Extension A */ + ["\u49A2", "\u49A2"], /* CJK Ideograph Extension A */ + ["\u49A3", "\u49A3"], /* CJK Ideograph Extension A */ + ["\u49A4", "\u49A4"], /* CJK Ideograph Extension A */ + ["\u49A5", "\u49A5"], /* CJK Ideograph Extension A */ + ["\u49A6", "\u49A6"], /* CJK Ideograph Extension A */ + ["\u49A7", "\u49A7"], /* CJK Ideograph Extension A */ + ["\u49A8", "\u49A8"], /* CJK Ideograph Extension A */ + ["\u49A9", "\u49A9"], /* CJK Ideograph Extension A */ + ["\u49AA", "\u49AA"], /* CJK Ideograph Extension A */ + ["\u49AB", "\u49AB"], /* CJK Ideograph Extension A */ + ["\u49AC", "\u49AC"], /* CJK Ideograph Extension A */ + ["\u49AD", "\u49AD"], /* CJK Ideograph Extension A */ + ["\u49AE", "\u49AE"], /* CJK Ideograph Extension A */ + ["\u49AF", "\u49AF"], /* CJK Ideograph Extension A */ + ["\u49B0", "\u49B0"], /* CJK Ideograph Extension A */ + ["\u49B1", "\u49B1"], /* CJK Ideograph Extension A */ + ["\u49B2", "\u49B2"], /* CJK Ideograph Extension A */ + ["\u49B3", "\u49B3"], /* CJK Ideograph Extension A */ + ["\u49B4", "\u49B4"], /* CJK Ideograph Extension A */ + ["\u49B5", "\u49B5"], /* CJK Ideograph Extension A */ + ["\u49B6", "\u49B6"], /* CJK Ideograph Extension A */ + ["\u49B7", "\u49B7"], /* CJK Ideograph Extension A */ + ["\u49B8", "\u49B8"], /* CJK Ideograph Extension A */ + ["\u49B9", "\u49B9"], /* CJK Ideograph Extension A */ + ["\u49BA", "\u49BA"], /* CJK Ideograph Extension A */ + ["\u49BB", "\u49BB"], /* CJK Ideograph Extension A */ + ["\u49BC", "\u49BC"], /* CJK Ideograph Extension A */ + ["\u49BD", "\u49BD"], /* CJK Ideograph Extension A */ + ["\u49BE", "\u49BE"], /* CJK Ideograph Extension A */ + ["\u49BF", "\u49BF"], /* CJK Ideograph Extension A */ + ["\u49C0", "\u49C0"], /* CJK Ideograph Extension A */ + ["\u49C1", "\u49C1"], /* CJK Ideograph Extension A */ + ["\u49C2", "\u49C2"], /* CJK Ideograph Extension A */ + ["\u49C3", "\u49C3"], /* CJK Ideograph Extension A */ + ["\u49C4", "\u49C4"], /* CJK Ideograph Extension A */ + ["\u49C5", "\u49C5"], /* CJK Ideograph Extension A */ + ["\u49C6", "\u49C6"], /* CJK Ideograph Extension A */ + ["\u49C7", "\u49C7"], /* CJK Ideograph Extension A */ + ["\u49C8", "\u49C8"], /* CJK Ideograph Extension A */ + ["\u49C9", "\u49C9"], /* CJK Ideograph Extension A */ + ["\u49CA", "\u49CA"], /* CJK Ideograph Extension A */ + ["\u49CB", "\u49CB"], /* CJK Ideograph Extension A */ + ["\u49CC", "\u49CC"], /* CJK Ideograph Extension A */ + ["\u49CD", "\u49CD"], /* CJK Ideograph Extension A */ + ["\u49CE", "\u49CE"], /* CJK Ideograph Extension A */ + ["\u49CF", "\u49CF"], /* CJK Ideograph Extension A */ + ["\u49D0", "\u49D0"], /* CJK Ideograph Extension A */ + ["\u49D1", "\u49D1"], /* CJK Ideograph Extension A */ + ["\u49D2", "\u49D2"], /* CJK Ideograph Extension A */ + ["\u49D3", "\u49D3"], /* CJK Ideograph Extension A */ + ["\u49D4", "\u49D4"], /* CJK Ideograph Extension A */ + ["\u49D5", "\u49D5"], /* CJK Ideograph Extension A */ + ["\u49D6", "\u49D6"], /* CJK Ideograph Extension A */ + ["\u49D7", "\u49D7"], /* CJK Ideograph Extension A */ + ["\u49D8", "\u49D8"], /* CJK Ideograph Extension A */ + ["\u49D9", "\u49D9"], /* CJK Ideograph Extension A */ + ["\u49DA", "\u49DA"], /* CJK Ideograph Extension A */ + ["\u49DB", "\u49DB"], /* CJK Ideograph Extension A */ + ["\u49DC", "\u49DC"], /* CJK Ideograph Extension A */ + ["\u49DD", "\u49DD"], /* CJK Ideograph Extension A */ + ["\u49DE", "\u49DE"], /* CJK Ideograph Extension A */ + ["\u49DF", "\u49DF"], /* CJK Ideograph Extension A */ + ["\u49E0", "\u49E0"], /* CJK Ideograph Extension A */ + ["\u49E1", "\u49E1"], /* CJK Ideograph Extension A */ + ["\u49E2", "\u49E2"], /* CJK Ideograph Extension A */ + ["\u49E3", "\u49E3"], /* CJK Ideograph Extension A */ + ["\u49E4", "\u49E4"], /* CJK Ideograph Extension A */ + ["\u49E5", "\u49E5"], /* CJK Ideograph Extension A */ + ["\u49E6", "\u49E6"], /* CJK Ideograph Extension A */ + ["\u49E7", "\u49E7"], /* CJK Ideograph Extension A */ + ["\u49E8", "\u49E8"], /* CJK Ideograph Extension A */ + ["\u49E9", "\u49E9"], /* CJK Ideograph Extension A */ + ["\u49EA", "\u49EA"], /* CJK Ideograph Extension A */ + ["\u49EB", "\u49EB"], /* CJK Ideograph Extension A */ + ["\u49EC", "\u49EC"], /* CJK Ideograph Extension A */ + ["\u49ED", "\u49ED"], /* CJK Ideograph Extension A */ + ["\u49EE", "\u49EE"], /* CJK Ideograph Extension A */ + ["\u49EF", "\u49EF"], /* CJK Ideograph Extension A */ + ["\u49F0", "\u49F0"], /* CJK Ideograph Extension A */ + ["\u49F1", "\u49F1"], /* CJK Ideograph Extension A */ + ["\u49F2", "\u49F2"], /* CJK Ideograph Extension A */ + ["\u49F3", "\u49F3"], /* CJK Ideograph Extension A */ + ["\u49F4", "\u49F4"], /* CJK Ideograph Extension A */ + ["\u49F5", "\u49F5"], /* CJK Ideograph Extension A */ + ["\u49F6", "\u49F6"], /* CJK Ideograph Extension A */ + ["\u49F7", "\u49F7"], /* CJK Ideograph Extension A */ + ["\u49F8", "\u49F8"], /* CJK Ideograph Extension A */ + ["\u49F9", "\u49F9"], /* CJK Ideograph Extension A */ + ["\u49FA", "\u49FA"], /* CJK Ideograph Extension A */ + ["\u49FB", "\u49FB"], /* CJK Ideograph Extension A */ + ["\u49FC", "\u49FC"], /* CJK Ideograph Extension A */ + ["\u49FD", "\u49FD"], /* CJK Ideograph Extension A */ + ["\u49FE", "\u49FE"], /* CJK Ideograph Extension A */ + ["\u49FF", "\u49FF"], /* CJK Ideograph Extension A */ + ["\u4A00", "\u4A00"], /* CJK Ideograph Extension A */ + ["\u4A01", "\u4A01"], /* CJK Ideograph Extension A */ + ["\u4A02", "\u4A02"], /* CJK Ideograph Extension A */ + ["\u4A03", "\u4A03"], /* CJK Ideograph Extension A */ + ["\u4A04", "\u4A04"], /* CJK Ideograph Extension A */ + ["\u4A05", "\u4A05"], /* CJK Ideograph Extension A */ + ["\u4A06", "\u4A06"], /* CJK Ideograph Extension A */ + ["\u4A07", "\u4A07"], /* CJK Ideograph Extension A */ + ["\u4A08", "\u4A08"], /* CJK Ideograph Extension A */ + ["\u4A09", "\u4A09"], /* CJK Ideograph Extension A */ + ["\u4A0A", "\u4A0A"], /* CJK Ideograph Extension A */ + ["\u4A0B", "\u4A0B"], /* CJK Ideograph Extension A */ + ["\u4A0C", "\u4A0C"], /* CJK Ideograph Extension A */ + ["\u4A0D", "\u4A0D"], /* CJK Ideograph Extension A */ + ["\u4A0E", "\u4A0E"], /* CJK Ideograph Extension A */ + ["\u4A0F", "\u4A0F"], /* CJK Ideograph Extension A */ + ["\u4A10", "\u4A10"], /* CJK Ideograph Extension A */ + ["\u4A11", "\u4A11"], /* CJK Ideograph Extension A */ + ["\u4A12", "\u4A12"], /* CJK Ideograph Extension A */ + ["\u4A13", "\u4A13"], /* CJK Ideograph Extension A */ + ["\u4A14", "\u4A14"], /* CJK Ideograph Extension A */ + ["\u4A15", "\u4A15"], /* CJK Ideograph Extension A */ + ["\u4A16", "\u4A16"], /* CJK Ideograph Extension A */ + ["\u4A17", "\u4A17"], /* CJK Ideograph Extension A */ + ["\u4A18", "\u4A18"], /* CJK Ideograph Extension A */ + ["\u4A19", "\u4A19"], /* CJK Ideograph Extension A */ + ["\u4A1A", "\u4A1A"], /* CJK Ideograph Extension A */ + ["\u4A1B", "\u4A1B"], /* CJK Ideograph Extension A */ + ["\u4A1C", "\u4A1C"], /* CJK Ideograph Extension A */ + ["\u4A1D", "\u4A1D"], /* CJK Ideograph Extension A */ + ["\u4A1E", "\u4A1E"], /* CJK Ideograph Extension A */ + ["\u4A1F", "\u4A1F"], /* CJK Ideograph Extension A */ + ["\u4A20", "\u4A20"], /* CJK Ideograph Extension A */ + ["\u4A21", "\u4A21"], /* CJK Ideograph Extension A */ + ["\u4A22", "\u4A22"], /* CJK Ideograph Extension A */ + ["\u4A23", "\u4A23"], /* CJK Ideograph Extension A */ + ["\u4A24", "\u4A24"], /* CJK Ideograph Extension A */ + ["\u4A25", "\u4A25"], /* CJK Ideograph Extension A */ + ["\u4A26", "\u4A26"], /* CJK Ideograph Extension A */ + ["\u4A27", "\u4A27"], /* CJK Ideograph Extension A */ + ["\u4A28", "\u4A28"], /* CJK Ideograph Extension A */ + ["\u4A29", "\u4A29"], /* CJK Ideograph Extension A */ + ["\u4A2A", "\u4A2A"], /* CJK Ideograph Extension A */ + ["\u4A2B", "\u4A2B"], /* CJK Ideograph Extension A */ + ["\u4A2C", "\u4A2C"], /* CJK Ideograph Extension A */ + ["\u4A2D", "\u4A2D"], /* CJK Ideograph Extension A */ + ["\u4A2E", "\u4A2E"], /* CJK Ideograph Extension A */ + ["\u4A2F", "\u4A2F"], /* CJK Ideograph Extension A */ + ["\u4A30", "\u4A30"], /* CJK Ideograph Extension A */ + ["\u4A31", "\u4A31"], /* CJK Ideograph Extension A */ + ["\u4A32", "\u4A32"], /* CJK Ideograph Extension A */ + ["\u4A33", "\u4A33"], /* CJK Ideograph Extension A */ + ["\u4A34", "\u4A34"], /* CJK Ideograph Extension A */ + ["\u4A35", "\u4A35"], /* CJK Ideograph Extension A */ + ["\u4A36", "\u4A36"], /* CJK Ideograph Extension A */ + ["\u4A37", "\u4A37"], /* CJK Ideograph Extension A */ + ["\u4A38", "\u4A38"], /* CJK Ideograph Extension A */ + ["\u4A39", "\u4A39"], /* CJK Ideograph Extension A */ + ["\u4A3A", "\u4A3A"], /* CJK Ideograph Extension A */ + ["\u4A3B", "\u4A3B"], /* CJK Ideograph Extension A */ + ["\u4A3C", "\u4A3C"], /* CJK Ideograph Extension A */ + ["\u4A3D", "\u4A3D"], /* CJK Ideograph Extension A */ + ["\u4A3E", "\u4A3E"], /* CJK Ideograph Extension A */ + ["\u4A3F", "\u4A3F"], /* CJK Ideograph Extension A */ + ["\u4A40", "\u4A40"], /* CJK Ideograph Extension A */ + ["\u4A41", "\u4A41"], /* CJK Ideograph Extension A */ + ["\u4A42", "\u4A42"], /* CJK Ideograph Extension A */ + ["\u4A43", "\u4A43"], /* CJK Ideograph Extension A */ + ["\u4A44", "\u4A44"], /* CJK Ideograph Extension A */ + ["\u4A45", "\u4A45"], /* CJK Ideograph Extension A */ + ["\u4A46", "\u4A46"], /* CJK Ideograph Extension A */ + ["\u4A47", "\u4A47"], /* CJK Ideograph Extension A */ + ["\u4A48", "\u4A48"], /* CJK Ideograph Extension A */ + ["\u4A49", "\u4A49"], /* CJK Ideograph Extension A */ + ["\u4A4A", "\u4A4A"], /* CJK Ideograph Extension A */ + ["\u4A4B", "\u4A4B"], /* CJK Ideograph Extension A */ + ["\u4A4C", "\u4A4C"], /* CJK Ideograph Extension A */ + ["\u4A4D", "\u4A4D"], /* CJK Ideograph Extension A */ + ["\u4A4E", "\u4A4E"], /* CJK Ideograph Extension A */ + ["\u4A4F", "\u4A4F"], /* CJK Ideograph Extension A */ + ["\u4A50", "\u4A50"], /* CJK Ideograph Extension A */ + ["\u4A51", "\u4A51"], /* CJK Ideograph Extension A */ + ["\u4A52", "\u4A52"], /* CJK Ideograph Extension A */ + ["\u4A53", "\u4A53"], /* CJK Ideograph Extension A */ + ["\u4A54", "\u4A54"], /* CJK Ideograph Extension A */ + ["\u4A55", "\u4A55"], /* CJK Ideograph Extension A */ + ["\u4A56", "\u4A56"], /* CJK Ideograph Extension A */ + ["\u4A57", "\u4A57"], /* CJK Ideograph Extension A */ + ["\u4A58", "\u4A58"], /* CJK Ideograph Extension A */ + ["\u4A59", "\u4A59"], /* CJK Ideograph Extension A */ + ["\u4A5A", "\u4A5A"], /* CJK Ideograph Extension A */ + ["\u4A5B", "\u4A5B"], /* CJK Ideograph Extension A */ + ["\u4A5C", "\u4A5C"], /* CJK Ideograph Extension A */ + ["\u4A5D", "\u4A5D"], /* CJK Ideograph Extension A */ + ["\u4A5E", "\u4A5E"], /* CJK Ideograph Extension A */ + ["\u4A5F", "\u4A5F"], /* CJK Ideograph Extension A */ + ["\u4A60", "\u4A60"], /* CJK Ideograph Extension A */ + ["\u4A61", "\u4A61"], /* CJK Ideograph Extension A */ + ["\u4A62", "\u4A62"], /* CJK Ideograph Extension A */ + ["\u4A63", "\u4A63"], /* CJK Ideograph Extension A */ + ["\u4A64", "\u4A64"], /* CJK Ideograph Extension A */ + ["\u4A65", "\u4A65"], /* CJK Ideograph Extension A */ + ["\u4A66", "\u4A66"], /* CJK Ideograph Extension A */ + ["\u4A67", "\u4A67"], /* CJK Ideograph Extension A */ + ["\u4A68", "\u4A68"], /* CJK Ideograph Extension A */ + ["\u4A69", "\u4A69"], /* CJK Ideograph Extension A */ + ["\u4A6A", "\u4A6A"], /* CJK Ideograph Extension A */ + ["\u4A6B", "\u4A6B"], /* CJK Ideograph Extension A */ + ["\u4A6C", "\u4A6C"], /* CJK Ideograph Extension A */ + ["\u4A6D", "\u4A6D"], /* CJK Ideograph Extension A */ + ["\u4A6E", "\u4A6E"], /* CJK Ideograph Extension A */ + ["\u4A6F", "\u4A6F"], /* CJK Ideograph Extension A */ + ["\u4A70", "\u4A70"], /* CJK Ideograph Extension A */ + ["\u4A71", "\u4A71"], /* CJK Ideograph Extension A */ + ["\u4A72", "\u4A72"], /* CJK Ideograph Extension A */ + ["\u4A73", "\u4A73"], /* CJK Ideograph Extension A */ + ["\u4A74", "\u4A74"], /* CJK Ideograph Extension A */ + ["\u4A75", "\u4A75"], /* CJK Ideograph Extension A */ + ["\u4A76", "\u4A76"], /* CJK Ideograph Extension A */ + ["\u4A77", "\u4A77"], /* CJK Ideograph Extension A */ + ["\u4A78", "\u4A78"], /* CJK Ideograph Extension A */ + ["\u4A79", "\u4A79"], /* CJK Ideograph Extension A */ + ["\u4A7A", "\u4A7A"], /* CJK Ideograph Extension A */ + ["\u4A7B", "\u4A7B"], /* CJK Ideograph Extension A */ + ["\u4A7C", "\u4A7C"], /* CJK Ideograph Extension A */ + ["\u4A7D", "\u4A7D"], /* CJK Ideograph Extension A */ + ["\u4A7E", "\u4A7E"], /* CJK Ideograph Extension A */ + ["\u4A7F", "\u4A7F"], /* CJK Ideograph Extension A */ + ["\u4A80", "\u4A80"], /* CJK Ideograph Extension A */ + ["\u4A81", "\u4A81"], /* CJK Ideograph Extension A */ + ["\u4A82", "\u4A82"], /* CJK Ideograph Extension A */ + ["\u4A83", "\u4A83"], /* CJK Ideograph Extension A */ + ["\u4A84", "\u4A84"], /* CJK Ideograph Extension A */ + ["\u4A85", "\u4A85"], /* CJK Ideograph Extension A */ + ["\u4A86", "\u4A86"], /* CJK Ideograph Extension A */ + ["\u4A87", "\u4A87"], /* CJK Ideograph Extension A */ + ["\u4A88", "\u4A88"], /* CJK Ideograph Extension A */ + ["\u4A89", "\u4A89"], /* CJK Ideograph Extension A */ + ["\u4A8A", "\u4A8A"], /* CJK Ideograph Extension A */ + ["\u4A8B", "\u4A8B"], /* CJK Ideograph Extension A */ + ["\u4A8C", "\u4A8C"], /* CJK Ideograph Extension A */ + ["\u4A8D", "\u4A8D"], /* CJK Ideograph Extension A */ + ["\u4A8E", "\u4A8E"], /* CJK Ideograph Extension A */ + ["\u4A8F", "\u4A8F"], /* CJK Ideograph Extension A */ + ["\u4A90", "\u4A90"], /* CJK Ideograph Extension A */ + ["\u4A91", "\u4A91"], /* CJK Ideograph Extension A */ + ["\u4A92", "\u4A92"], /* CJK Ideograph Extension A */ + ["\u4A93", "\u4A93"], /* CJK Ideograph Extension A */ + ["\u4A94", "\u4A94"], /* CJK Ideograph Extension A */ + ["\u4A95", "\u4A95"], /* CJK Ideograph Extension A */ + ["\u4A96", "\u4A96"], /* CJK Ideograph Extension A */ + ["\u4A97", "\u4A97"], /* CJK Ideograph Extension A */ + ["\u4A98", "\u4A98"], /* CJK Ideograph Extension A */ + ["\u4A99", "\u4A99"], /* CJK Ideograph Extension A */ + ["\u4A9A", "\u4A9A"], /* CJK Ideograph Extension A */ + ["\u4A9B", "\u4A9B"], /* CJK Ideograph Extension A */ + ["\u4A9C", "\u4A9C"], /* CJK Ideograph Extension A */ + ["\u4A9D", "\u4A9D"], /* CJK Ideograph Extension A */ + ["\u4A9E", "\u4A9E"], /* CJK Ideograph Extension A */ + ["\u4A9F", "\u4A9F"], /* CJK Ideograph Extension A */ + ["\u4AA0", "\u4AA0"], /* CJK Ideograph Extension A */ + ["\u4AA1", "\u4AA1"], /* CJK Ideograph Extension A */ + ["\u4AA2", "\u4AA2"], /* CJK Ideograph Extension A */ + ["\u4AA3", "\u4AA3"], /* CJK Ideograph Extension A */ + ["\u4AA4", "\u4AA4"], /* CJK Ideograph Extension A */ + ["\u4AA5", "\u4AA5"], /* CJK Ideograph Extension A */ + ["\u4AA6", "\u4AA6"], /* CJK Ideograph Extension A */ + ["\u4AA7", "\u4AA7"], /* CJK Ideograph Extension A */ + ["\u4AA8", "\u4AA8"], /* CJK Ideograph Extension A */ + ["\u4AA9", "\u4AA9"], /* CJK Ideograph Extension A */ + ["\u4AAA", "\u4AAA"], /* CJK Ideograph Extension A */ + ["\u4AAB", "\u4AAB"], /* CJK Ideograph Extension A */ + ["\u4AAC", "\u4AAC"], /* CJK Ideograph Extension A */ + ["\u4AAD", "\u4AAD"], /* CJK Ideograph Extension A */ + ["\u4AAE", "\u4AAE"], /* CJK Ideograph Extension A */ + ["\u4AAF", "\u4AAF"], /* CJK Ideograph Extension A */ + ["\u4AB0", "\u4AB0"], /* CJK Ideograph Extension A */ + ["\u4AB1", "\u4AB1"], /* CJK Ideograph Extension A */ + ["\u4AB2", "\u4AB2"], /* CJK Ideograph Extension A */ + ["\u4AB3", "\u4AB3"], /* CJK Ideograph Extension A */ + ["\u4AB4", "\u4AB4"], /* CJK Ideograph Extension A */ + ["\u4AB5", "\u4AB5"], /* CJK Ideograph Extension A */ + ["\u4AB6", "\u4AB6"], /* CJK Ideograph Extension A */ + ["\u4AB7", "\u4AB7"], /* CJK Ideograph Extension A */ + ["\u4AB8", "\u4AB8"], /* CJK Ideograph Extension A */ + ["\u4AB9", "\u4AB9"], /* CJK Ideograph Extension A */ + ["\u4ABA", "\u4ABA"], /* CJK Ideograph Extension A */ + ["\u4ABB", "\u4ABB"], /* CJK Ideograph Extension A */ + ["\u4ABC", "\u4ABC"], /* CJK Ideograph Extension A */ + ["\u4ABD", "\u4ABD"], /* CJK Ideograph Extension A */ + ["\u4ABE", "\u4ABE"], /* CJK Ideograph Extension A */ + ["\u4ABF", "\u4ABF"], /* CJK Ideograph Extension A */ + ["\u4AC0", "\u4AC0"], /* CJK Ideograph Extension A */ + ["\u4AC1", "\u4AC1"], /* CJK Ideograph Extension A */ + ["\u4AC2", "\u4AC2"], /* CJK Ideograph Extension A */ + ["\u4AC3", "\u4AC3"], /* CJK Ideograph Extension A */ + ["\u4AC4", "\u4AC4"], /* CJK Ideograph Extension A */ + ["\u4AC5", "\u4AC5"], /* CJK Ideograph Extension A */ + ["\u4AC6", "\u4AC6"], /* CJK Ideograph Extension A */ + ["\u4AC7", "\u4AC7"], /* CJK Ideograph Extension A */ + ["\u4AC8", "\u4AC8"], /* CJK Ideograph Extension A */ + ["\u4AC9", "\u4AC9"], /* CJK Ideograph Extension A */ + ["\u4ACA", "\u4ACA"], /* CJK Ideograph Extension A */ + ["\u4ACB", "\u4ACB"], /* CJK Ideograph Extension A */ + ["\u4ACC", "\u4ACC"], /* CJK Ideograph Extension A */ + ["\u4ACD", "\u4ACD"], /* CJK Ideograph Extension A */ + ["\u4ACE", "\u4ACE"], /* CJK Ideograph Extension A */ + ["\u4ACF", "\u4ACF"], /* CJK Ideograph Extension A */ + ["\u4AD0", "\u4AD0"], /* CJK Ideograph Extension A */ + ["\u4AD1", "\u4AD1"], /* CJK Ideograph Extension A */ + ["\u4AD2", "\u4AD2"], /* CJK Ideograph Extension A */ + ["\u4AD3", "\u4AD3"], /* CJK Ideograph Extension A */ + ["\u4AD4", "\u4AD4"], /* CJK Ideograph Extension A */ + ["\u4AD5", "\u4AD5"], /* CJK Ideograph Extension A */ + ["\u4AD6", "\u4AD6"], /* CJK Ideograph Extension A */ + ["\u4AD7", "\u4AD7"], /* CJK Ideograph Extension A */ + ["\u4AD8", "\u4AD8"], /* CJK Ideograph Extension A */ + ["\u4AD9", "\u4AD9"], /* CJK Ideograph Extension A */ + ["\u4ADA", "\u4ADA"], /* CJK Ideograph Extension A */ + ["\u4ADB", "\u4ADB"], /* CJK Ideograph Extension A */ + ["\u4ADC", "\u4ADC"], /* CJK Ideograph Extension A */ + ["\u4ADD", "\u4ADD"], /* CJK Ideograph Extension A */ + ["\u4ADE", "\u4ADE"], /* CJK Ideograph Extension A */ + ["\u4ADF", "\u4ADF"], /* CJK Ideograph Extension A */ + ["\u4AE0", "\u4AE0"], /* CJK Ideograph Extension A */ + ["\u4AE1", "\u4AE1"], /* CJK Ideograph Extension A */ + ["\u4AE2", "\u4AE2"], /* CJK Ideograph Extension A */ + ["\u4AE3", "\u4AE3"], /* CJK Ideograph Extension A */ + ["\u4AE4", "\u4AE4"], /* CJK Ideograph Extension A */ + ["\u4AE5", "\u4AE5"], /* CJK Ideograph Extension A */ + ["\u4AE6", "\u4AE6"], /* CJK Ideograph Extension A */ + ["\u4AE7", "\u4AE7"], /* CJK Ideograph Extension A */ + ["\u4AE8", "\u4AE8"], /* CJK Ideograph Extension A */ + ["\u4AE9", "\u4AE9"], /* CJK Ideograph Extension A */ + ["\u4AEA", "\u4AEA"], /* CJK Ideograph Extension A */ + ["\u4AEB", "\u4AEB"], /* CJK Ideograph Extension A */ + ["\u4AEC", "\u4AEC"], /* CJK Ideograph Extension A */ + ["\u4AED", "\u4AED"], /* CJK Ideograph Extension A */ + ["\u4AEE", "\u4AEE"], /* CJK Ideograph Extension A */ + ["\u4AEF", "\u4AEF"], /* CJK Ideograph Extension A */ + ["\u4AF0", "\u4AF0"], /* CJK Ideograph Extension A */ + ["\u4AF1", "\u4AF1"], /* CJK Ideograph Extension A */ + ["\u4AF2", "\u4AF2"], /* CJK Ideograph Extension A */ + ["\u4AF3", "\u4AF3"], /* CJK Ideograph Extension A */ + ["\u4AF4", "\u4AF4"], /* CJK Ideograph Extension A */ + ["\u4AF5", "\u4AF5"], /* CJK Ideograph Extension A */ + ["\u4AF6", "\u4AF6"], /* CJK Ideograph Extension A */ + ["\u4AF7", "\u4AF7"], /* CJK Ideograph Extension A */ + ["\u4AF8", "\u4AF8"], /* CJK Ideograph Extension A */ + ["\u4AF9", "\u4AF9"], /* CJK Ideograph Extension A */ + ["\u4AFA", "\u4AFA"], /* CJK Ideograph Extension A */ + ["\u4AFB", "\u4AFB"], /* CJK Ideograph Extension A */ + ["\u4AFC", "\u4AFC"], /* CJK Ideograph Extension A */ + ["\u4AFD", "\u4AFD"], /* CJK Ideograph Extension A */ + ["\u4AFE", "\u4AFE"], /* CJK Ideograph Extension A */ + ["\u4AFF", "\u4AFF"], /* CJK Ideograph Extension A */ + ["\u4B00", "\u4B00"], /* CJK Ideograph Extension A */ + ["\u4B01", "\u4B01"], /* CJK Ideograph Extension A */ + ["\u4B02", "\u4B02"], /* CJK Ideograph Extension A */ + ["\u4B03", "\u4B03"], /* CJK Ideograph Extension A */ + ["\u4B04", "\u4B04"], /* CJK Ideograph Extension A */ + ["\u4B05", "\u4B05"], /* CJK Ideograph Extension A */ + ["\u4B06", "\u4B06"], /* CJK Ideograph Extension A */ + ["\u4B07", "\u4B07"], /* CJK Ideograph Extension A */ + ["\u4B08", "\u4B08"], /* CJK Ideograph Extension A */ + ["\u4B09", "\u4B09"], /* CJK Ideograph Extension A */ + ["\u4B0A", "\u4B0A"], /* CJK Ideograph Extension A */ + ["\u4B0B", "\u4B0B"], /* CJK Ideograph Extension A */ + ["\u4B0C", "\u4B0C"], /* CJK Ideograph Extension A */ + ["\u4B0D", "\u4B0D"], /* CJK Ideograph Extension A */ + ["\u4B0E", "\u4B0E"], /* CJK Ideograph Extension A */ + ["\u4B0F", "\u4B0F"], /* CJK Ideograph Extension A */ + ["\u4B10", "\u4B10"], /* CJK Ideograph Extension A */ + ["\u4B11", "\u4B11"], /* CJK Ideograph Extension A */ + ["\u4B12", "\u4B12"], /* CJK Ideograph Extension A */ + ["\u4B13", "\u4B13"], /* CJK Ideograph Extension A */ + ["\u4B14", "\u4B14"], /* CJK Ideograph Extension A */ + ["\u4B15", "\u4B15"], /* CJK Ideograph Extension A */ + ["\u4B16", "\u4B16"], /* CJK Ideograph Extension A */ + ["\u4B17", "\u4B17"], /* CJK Ideograph Extension A */ + ["\u4B18", "\u4B18"], /* CJK Ideograph Extension A */ + ["\u4B19", "\u4B19"], /* CJK Ideograph Extension A */ + ["\u4B1A", "\u4B1A"], /* CJK Ideograph Extension A */ + ["\u4B1B", "\u4B1B"], /* CJK Ideograph Extension A */ + ["\u4B1C", "\u4B1C"], /* CJK Ideograph Extension A */ + ["\u4B1D", "\u4B1D"], /* CJK Ideograph Extension A */ + ["\u4B1E", "\u4B1E"], /* CJK Ideograph Extension A */ + ["\u4B1F", "\u4B1F"], /* CJK Ideograph Extension A */ + ["\u4B20", "\u4B20"], /* CJK Ideograph Extension A */ + ["\u4B21", "\u4B21"], /* CJK Ideograph Extension A */ + ["\u4B22", "\u4B22"], /* CJK Ideograph Extension A */ + ["\u4B23", "\u4B23"], /* CJK Ideograph Extension A */ + ["\u4B24", "\u4B24"], /* CJK Ideograph Extension A */ + ["\u4B25", "\u4B25"], /* CJK Ideograph Extension A */ + ["\u4B26", "\u4B26"], /* CJK Ideograph Extension A */ + ["\u4B27", "\u4B27"], /* CJK Ideograph Extension A */ + ["\u4B28", "\u4B28"], /* CJK Ideograph Extension A */ + ["\u4B29", "\u4B29"], /* CJK Ideograph Extension A */ + ["\u4B2A", "\u4B2A"], /* CJK Ideograph Extension A */ + ["\u4B2B", "\u4B2B"], /* CJK Ideograph Extension A */ + ["\u4B2C", "\u4B2C"], /* CJK Ideograph Extension A */ + ["\u4B2D", "\u4B2D"], /* CJK Ideograph Extension A */ + ["\u4B2E", "\u4B2E"], /* CJK Ideograph Extension A */ + ["\u4B2F", "\u4B2F"], /* CJK Ideograph Extension A */ + ["\u4B30", "\u4B30"], /* CJK Ideograph Extension A */ + ["\u4B31", "\u4B31"], /* CJK Ideograph Extension A */ + ["\u4B32", "\u4B32"], /* CJK Ideograph Extension A */ + ["\u4B33", "\u4B33"], /* CJK Ideograph Extension A */ + ["\u4B34", "\u4B34"], /* CJK Ideograph Extension A */ + ["\u4B35", "\u4B35"], /* CJK Ideograph Extension A */ + ["\u4B36", "\u4B36"], /* CJK Ideograph Extension A */ + ["\u4B37", "\u4B37"], /* CJK Ideograph Extension A */ + ["\u4B38", "\u4B38"], /* CJK Ideograph Extension A */ + ["\u4B39", "\u4B39"], /* CJK Ideograph Extension A */ + ["\u4B3A", "\u4B3A"], /* CJK Ideograph Extension A */ + ["\u4B3B", "\u4B3B"], /* CJK Ideograph Extension A */ + ["\u4B3C", "\u4B3C"], /* CJK Ideograph Extension A */ + ["\u4B3D", "\u4B3D"], /* CJK Ideograph Extension A */ + ["\u4B3E", "\u4B3E"], /* CJK Ideograph Extension A */ + ["\u4B3F", "\u4B3F"], /* CJK Ideograph Extension A */ + ["\u4B40", "\u4B40"], /* CJK Ideograph Extension A */ + ["\u4B41", "\u4B41"], /* CJK Ideograph Extension A */ + ["\u4B42", "\u4B42"], /* CJK Ideograph Extension A */ + ["\u4B43", "\u4B43"], /* CJK Ideograph Extension A */ + ["\u4B44", "\u4B44"], /* CJK Ideograph Extension A */ + ["\u4B45", "\u4B45"], /* CJK Ideograph Extension A */ + ["\u4B46", "\u4B46"], /* CJK Ideograph Extension A */ + ["\u4B47", "\u4B47"], /* CJK Ideograph Extension A */ + ["\u4B48", "\u4B48"], /* CJK Ideograph Extension A */ + ["\u4B49", "\u4B49"], /* CJK Ideograph Extension A */ + ["\u4B4A", "\u4B4A"], /* CJK Ideograph Extension A */ + ["\u4B4B", "\u4B4B"], /* CJK Ideograph Extension A */ + ["\u4B4C", "\u4B4C"], /* CJK Ideograph Extension A */ + ["\u4B4D", "\u4B4D"], /* CJK Ideograph Extension A */ + ["\u4B4E", "\u4B4E"], /* CJK Ideograph Extension A */ + ["\u4B4F", "\u4B4F"], /* CJK Ideograph Extension A */ + ["\u4B50", "\u4B50"], /* CJK Ideograph Extension A */ + ["\u4B51", "\u4B51"], /* CJK Ideograph Extension A */ + ["\u4B52", "\u4B52"], /* CJK Ideograph Extension A */ + ["\u4B53", "\u4B53"], /* CJK Ideograph Extension A */ + ["\u4B54", "\u4B54"], /* CJK Ideograph Extension A */ + ["\u4B55", "\u4B55"], /* CJK Ideograph Extension A */ + ["\u4B56", "\u4B56"], /* CJK Ideograph Extension A */ + ["\u4B57", "\u4B57"], /* CJK Ideograph Extension A */ + ["\u4B58", "\u4B58"], /* CJK Ideograph Extension A */ + ["\u4B59", "\u4B59"], /* CJK Ideograph Extension A */ + ["\u4B5A", "\u4B5A"], /* CJK Ideograph Extension A */ + ["\u4B5B", "\u4B5B"], /* CJK Ideograph Extension A */ + ["\u4B5C", "\u4B5C"], /* CJK Ideograph Extension A */ + ["\u4B5D", "\u4B5D"], /* CJK Ideograph Extension A */ + ["\u4B5E", "\u4B5E"], /* CJK Ideograph Extension A */ + ["\u4B5F", "\u4B5F"], /* CJK Ideograph Extension A */ + ["\u4B60", "\u4B60"], /* CJK Ideograph Extension A */ + ["\u4B61", "\u4B61"], /* CJK Ideograph Extension A */ + ["\u4B62", "\u4B62"], /* CJK Ideograph Extension A */ + ["\u4B63", "\u4B63"], /* CJK Ideograph Extension A */ + ["\u4B64", "\u4B64"], /* CJK Ideograph Extension A */ + ["\u4B65", "\u4B65"], /* CJK Ideograph Extension A */ + ["\u4B66", "\u4B66"], /* CJK Ideograph Extension A */ + ["\u4B67", "\u4B67"], /* CJK Ideograph Extension A */ + ["\u4B68", "\u4B68"], /* CJK Ideograph Extension A */ + ["\u4B69", "\u4B69"], /* CJK Ideograph Extension A */ + ["\u4B6A", "\u4B6A"], /* CJK Ideograph Extension A */ + ["\u4B6B", "\u4B6B"], /* CJK Ideograph Extension A */ + ["\u4B6C", "\u4B6C"], /* CJK Ideograph Extension A */ + ["\u4B6D", "\u4B6D"], /* CJK Ideograph Extension A */ + ["\u4B6E", "\u4B6E"], /* CJK Ideograph Extension A */ + ["\u4B6F", "\u4B6F"], /* CJK Ideograph Extension A */ + ["\u4B70", "\u4B70"], /* CJK Ideograph Extension A */ + ["\u4B71", "\u4B71"], /* CJK Ideograph Extension A */ + ["\u4B72", "\u4B72"], /* CJK Ideograph Extension A */ + ["\u4B73", "\u4B73"], /* CJK Ideograph Extension A */ + ["\u4B74", "\u4B74"], /* CJK Ideograph Extension A */ + ["\u4B75", "\u4B75"], /* CJK Ideograph Extension A */ + ["\u4B76", "\u4B76"], /* CJK Ideograph Extension A */ + ["\u4B77", "\u4B77"], /* CJK Ideograph Extension A */ + ["\u4B78", "\u4B78"], /* CJK Ideograph Extension A */ + ["\u4B79", "\u4B79"], /* CJK Ideograph Extension A */ + ["\u4B7A", "\u4B7A"], /* CJK Ideograph Extension A */ + ["\u4B7B", "\u4B7B"], /* CJK Ideograph Extension A */ + ["\u4B7C", "\u4B7C"], /* CJK Ideograph Extension A */ + ["\u4B7D", "\u4B7D"], /* CJK Ideograph Extension A */ + ["\u4B7E", "\u4B7E"], /* CJK Ideograph Extension A */ + ["\u4B7F", "\u4B7F"], /* CJK Ideograph Extension A */ + ["\u4B80", "\u4B80"], /* CJK Ideograph Extension A */ + ["\u4B81", "\u4B81"], /* CJK Ideograph Extension A */ + ["\u4B82", "\u4B82"], /* CJK Ideograph Extension A */ + ["\u4B83", "\u4B83"], /* CJK Ideograph Extension A */ + ["\u4B84", "\u4B84"], /* CJK Ideograph Extension A */ + ["\u4B85", "\u4B85"], /* CJK Ideograph Extension A */ + ["\u4B86", "\u4B86"], /* CJK Ideograph Extension A */ + ["\u4B87", "\u4B87"], /* CJK Ideograph Extension A */ + ["\u4B88", "\u4B88"], /* CJK Ideograph Extension A */ + ["\u4B89", "\u4B89"], /* CJK Ideograph Extension A */ + ["\u4B8A", "\u4B8A"], /* CJK Ideograph Extension A */ + ["\u4B8B", "\u4B8B"], /* CJK Ideograph Extension A */ + ["\u4B8C", "\u4B8C"], /* CJK Ideograph Extension A */ + ["\u4B8D", "\u4B8D"], /* CJK Ideograph Extension A */ + ["\u4B8E", "\u4B8E"], /* CJK Ideograph Extension A */ + ["\u4B8F", "\u4B8F"], /* CJK Ideograph Extension A */ + ["\u4B90", "\u4B90"], /* CJK Ideograph Extension A */ + ["\u4B91", "\u4B91"], /* CJK Ideograph Extension A */ + ["\u4B92", "\u4B92"], /* CJK Ideograph Extension A */ + ["\u4B93", "\u4B93"], /* CJK Ideograph Extension A */ + ["\u4B94", "\u4B94"], /* CJK Ideograph Extension A */ + ["\u4B95", "\u4B95"], /* CJK Ideograph Extension A */ + ["\u4B96", "\u4B96"], /* CJK Ideograph Extension A */ + ["\u4B97", "\u4B97"], /* CJK Ideograph Extension A */ + ["\u4B98", "\u4B98"], /* CJK Ideograph Extension A */ + ["\u4B99", "\u4B99"], /* CJK Ideograph Extension A */ + ["\u4B9A", "\u4B9A"], /* CJK Ideograph Extension A */ + ["\u4B9B", "\u4B9B"], /* CJK Ideograph Extension A */ + ["\u4B9C", "\u4B9C"], /* CJK Ideograph Extension A */ + ["\u4B9D", "\u4B9D"], /* CJK Ideograph Extension A */ + ["\u4B9E", "\u4B9E"], /* CJK Ideograph Extension A */ + ["\u4B9F", "\u4B9F"], /* CJK Ideograph Extension A */ + ["\u4BA0", "\u4BA0"], /* CJK Ideograph Extension A */ + ["\u4BA1", "\u4BA1"], /* CJK Ideograph Extension A */ + ["\u4BA2", "\u4BA2"], /* CJK Ideograph Extension A */ + ["\u4BA3", "\u4BA3"], /* CJK Ideograph Extension A */ + ["\u4BA4", "\u4BA4"], /* CJK Ideograph Extension A */ + ["\u4BA5", "\u4BA5"], /* CJK Ideograph Extension A */ + ["\u4BA6", "\u4BA6"], /* CJK Ideograph Extension A */ + ["\u4BA7", "\u4BA7"], /* CJK Ideograph Extension A */ + ["\u4BA8", "\u4BA8"], /* CJK Ideograph Extension A */ + ["\u4BA9", "\u4BA9"], /* CJK Ideograph Extension A */ + ["\u4BAA", "\u4BAA"], /* CJK Ideograph Extension A */ + ["\u4BAB", "\u4BAB"], /* CJK Ideograph Extension A */ + ["\u4BAC", "\u4BAC"], /* CJK Ideograph Extension A */ + ["\u4BAD", "\u4BAD"], /* CJK Ideograph Extension A */ + ["\u4BAE", "\u4BAE"], /* CJK Ideograph Extension A */ + ["\u4BAF", "\u4BAF"], /* CJK Ideograph Extension A */ + ["\u4BB0", "\u4BB0"], /* CJK Ideograph Extension A */ + ["\u4BB1", "\u4BB1"], /* CJK Ideograph Extension A */ + ["\u4BB2", "\u4BB2"], /* CJK Ideograph Extension A */ + ["\u4BB3", "\u4BB3"], /* CJK Ideograph Extension A */ + ["\u4BB4", "\u4BB4"], /* CJK Ideograph Extension A */ + ["\u4BB5", "\u4BB5"], /* CJK Ideograph Extension A */ + ["\u4BB6", "\u4BB6"], /* CJK Ideograph Extension A */ + ["\u4BB7", "\u4BB7"], /* CJK Ideograph Extension A */ + ["\u4BB8", "\u4BB8"], /* CJK Ideograph Extension A */ + ["\u4BB9", "\u4BB9"], /* CJK Ideograph Extension A */ + ["\u4BBA", "\u4BBA"], /* CJK Ideograph Extension A */ + ["\u4BBB", "\u4BBB"], /* CJK Ideograph Extension A */ + ["\u4BBC", "\u4BBC"], /* CJK Ideograph Extension A */ + ["\u4BBD", "\u4BBD"], /* CJK Ideograph Extension A */ + ["\u4BBE", "\u4BBE"], /* CJK Ideograph Extension A */ + ["\u4BBF", "\u4BBF"], /* CJK Ideograph Extension A */ + ["\u4BC0", "\u4BC0"], /* CJK Ideograph Extension A */ + ["\u4BC1", "\u4BC1"], /* CJK Ideograph Extension A */ + ["\u4BC2", "\u4BC2"], /* CJK Ideograph Extension A */ + ["\u4BC3", "\u4BC3"], /* CJK Ideograph Extension A */ + ["\u4BC4", "\u4BC4"], /* CJK Ideograph Extension A */ + ["\u4BC5", "\u4BC5"], /* CJK Ideograph Extension A */ + ["\u4BC6", "\u4BC6"], /* CJK Ideograph Extension A */ + ["\u4BC7", "\u4BC7"], /* CJK Ideograph Extension A */ + ["\u4BC8", "\u4BC8"], /* CJK Ideograph Extension A */ + ["\u4BC9", "\u4BC9"], /* CJK Ideograph Extension A */ + ["\u4BCA", "\u4BCA"], /* CJK Ideograph Extension A */ + ["\u4BCB", "\u4BCB"], /* CJK Ideograph Extension A */ + ["\u4BCC", "\u4BCC"], /* CJK Ideograph Extension A */ + ["\u4BCD", "\u4BCD"], /* CJK Ideograph Extension A */ + ["\u4BCE", "\u4BCE"], /* CJK Ideograph Extension A */ + ["\u4BCF", "\u4BCF"], /* CJK Ideograph Extension A */ + ["\u4BD0", "\u4BD0"], /* CJK Ideograph Extension A */ + ["\u4BD1", "\u4BD1"], /* CJK Ideograph Extension A */ + ["\u4BD2", "\u4BD2"], /* CJK Ideograph Extension A */ + ["\u4BD3", "\u4BD3"], /* CJK Ideograph Extension A */ + ["\u4BD4", "\u4BD4"], /* CJK Ideograph Extension A */ + ["\u4BD5", "\u4BD5"], /* CJK Ideograph Extension A */ + ["\u4BD6", "\u4BD6"], /* CJK Ideograph Extension A */ + ["\u4BD7", "\u4BD7"], /* CJK Ideograph Extension A */ + ["\u4BD8", "\u4BD8"], /* CJK Ideograph Extension A */ + ["\u4BD9", "\u4BD9"], /* CJK Ideograph Extension A */ + ["\u4BDA", "\u4BDA"], /* CJK Ideograph Extension A */ + ["\u4BDB", "\u4BDB"], /* CJK Ideograph Extension A */ + ["\u4BDC", "\u4BDC"], /* CJK Ideograph Extension A */ + ["\u4BDD", "\u4BDD"], /* CJK Ideograph Extension A */ + ["\u4BDE", "\u4BDE"], /* CJK Ideograph Extension A */ + ["\u4BDF", "\u4BDF"], /* CJK Ideograph Extension A */ + ["\u4BE0", "\u4BE0"], /* CJK Ideograph Extension A */ + ["\u4BE1", "\u4BE1"], /* CJK Ideograph Extension A */ + ["\u4BE2", "\u4BE2"], /* CJK Ideograph Extension A */ + ["\u4BE3", "\u4BE3"], /* CJK Ideograph Extension A */ + ["\u4BE4", "\u4BE4"], /* CJK Ideograph Extension A */ + ["\u4BE5", "\u4BE5"], /* CJK Ideograph Extension A */ + ["\u4BE6", "\u4BE6"], /* CJK Ideograph Extension A */ + ["\u4BE7", "\u4BE7"], /* CJK Ideograph Extension A */ + ["\u4BE8", "\u4BE8"], /* CJK Ideograph Extension A */ + ["\u4BE9", "\u4BE9"], /* CJK Ideograph Extension A */ + ["\u4BEA", "\u4BEA"], /* CJK Ideograph Extension A */ + ["\u4BEB", "\u4BEB"], /* CJK Ideograph Extension A */ + ["\u4BEC", "\u4BEC"], /* CJK Ideograph Extension A */ + ["\u4BED", "\u4BED"], /* CJK Ideograph Extension A */ + ["\u4BEE", "\u4BEE"], /* CJK Ideograph Extension A */ + ["\u4BEF", "\u4BEF"], /* CJK Ideograph Extension A */ + ["\u4BF0", "\u4BF0"], /* CJK Ideograph Extension A */ + ["\u4BF1", "\u4BF1"], /* CJK Ideograph Extension A */ + ["\u4BF2", "\u4BF2"], /* CJK Ideograph Extension A */ + ["\u4BF3", "\u4BF3"], /* CJK Ideograph Extension A */ + ["\u4BF4", "\u4BF4"], /* CJK Ideograph Extension A */ + ["\u4BF5", "\u4BF5"], /* CJK Ideograph Extension A */ + ["\u4BF6", "\u4BF6"], /* CJK Ideograph Extension A */ + ["\u4BF7", "\u4BF7"], /* CJK Ideograph Extension A */ + ["\u4BF8", "\u4BF8"], /* CJK Ideograph Extension A */ + ["\u4BF9", "\u4BF9"], /* CJK Ideograph Extension A */ + ["\u4BFA", "\u4BFA"], /* CJK Ideograph Extension A */ + ["\u4BFB", "\u4BFB"], /* CJK Ideograph Extension A */ + ["\u4BFC", "\u4BFC"], /* CJK Ideograph Extension A */ + ["\u4BFD", "\u4BFD"], /* CJK Ideograph Extension A */ + ["\u4BFE", "\u4BFE"], /* CJK Ideograph Extension A */ + ["\u4BFF", "\u4BFF"], /* CJK Ideograph Extension A */ + ["\u4C00", "\u4C00"], /* CJK Ideograph Extension A */ + ["\u4C01", "\u4C01"], /* CJK Ideograph Extension A */ + ["\u4C02", "\u4C02"], /* CJK Ideograph Extension A */ + ["\u4C03", "\u4C03"], /* CJK Ideograph Extension A */ + ["\u4C04", "\u4C04"], /* CJK Ideograph Extension A */ + ["\u4C05", "\u4C05"], /* CJK Ideograph Extension A */ + ["\u4C06", "\u4C06"], /* CJK Ideograph Extension A */ + ["\u4C07", "\u4C07"], /* CJK Ideograph Extension A */ + ["\u4C08", "\u4C08"], /* CJK Ideograph Extension A */ + ["\u4C09", "\u4C09"], /* CJK Ideograph Extension A */ + ["\u4C0A", "\u4C0A"], /* CJK Ideograph Extension A */ + ["\u4C0B", "\u4C0B"], /* CJK Ideograph Extension A */ + ["\u4C0C", "\u4C0C"], /* CJK Ideograph Extension A */ + ["\u4C0D", "\u4C0D"], /* CJK Ideograph Extension A */ + ["\u4C0E", "\u4C0E"], /* CJK Ideograph Extension A */ + ["\u4C0F", "\u4C0F"], /* CJK Ideograph Extension A */ + ["\u4C10", "\u4C10"], /* CJK Ideograph Extension A */ + ["\u4C11", "\u4C11"], /* CJK Ideograph Extension A */ + ["\u4C12", "\u4C12"], /* CJK Ideograph Extension A */ + ["\u4C13", "\u4C13"], /* CJK Ideograph Extension A */ + ["\u4C14", "\u4C14"], /* CJK Ideograph Extension A */ + ["\u4C15", "\u4C15"], /* CJK Ideograph Extension A */ + ["\u4C16", "\u4C16"], /* CJK Ideograph Extension A */ + ["\u4C17", "\u4C17"], /* CJK Ideograph Extension A */ + ["\u4C18", "\u4C18"], /* CJK Ideograph Extension A */ + ["\u4C19", "\u4C19"], /* CJK Ideograph Extension A */ + ["\u4C1A", "\u4C1A"], /* CJK Ideograph Extension A */ + ["\u4C1B", "\u4C1B"], /* CJK Ideograph Extension A */ + ["\u4C1C", "\u4C1C"], /* CJK Ideograph Extension A */ + ["\u4C1D", "\u4C1D"], /* CJK Ideograph Extension A */ + ["\u4C1E", "\u4C1E"], /* CJK Ideograph Extension A */ + ["\u4C1F", "\u4C1F"], /* CJK Ideograph Extension A */ + ["\u4C20", "\u4C20"], /* CJK Ideograph Extension A */ + ["\u4C21", "\u4C21"], /* CJK Ideograph Extension A */ + ["\u4C22", "\u4C22"], /* CJK Ideograph Extension A */ + ["\u4C23", "\u4C23"], /* CJK Ideograph Extension A */ + ["\u4C24", "\u4C24"], /* CJK Ideograph Extension A */ + ["\u4C25", "\u4C25"], /* CJK Ideograph Extension A */ + ["\u4C26", "\u4C26"], /* CJK Ideograph Extension A */ + ["\u4C27", "\u4C27"], /* CJK Ideograph Extension A */ + ["\u4C28", "\u4C28"], /* CJK Ideograph Extension A */ + ["\u4C29", "\u4C29"], /* CJK Ideograph Extension A */ + ["\u4C2A", "\u4C2A"], /* CJK Ideograph Extension A */ + ["\u4C2B", "\u4C2B"], /* CJK Ideograph Extension A */ + ["\u4C2C", "\u4C2C"], /* CJK Ideograph Extension A */ + ["\u4C2D", "\u4C2D"], /* CJK Ideograph Extension A */ + ["\u4C2E", "\u4C2E"], /* CJK Ideograph Extension A */ + ["\u4C2F", "\u4C2F"], /* CJK Ideograph Extension A */ + ["\u4C30", "\u4C30"], /* CJK Ideograph Extension A */ + ["\u4C31", "\u4C31"], /* CJK Ideograph Extension A */ + ["\u4C32", "\u4C32"], /* CJK Ideograph Extension A */ + ["\u4C33", "\u4C33"], /* CJK Ideograph Extension A */ + ["\u4C34", "\u4C34"], /* CJK Ideograph Extension A */ + ["\u4C35", "\u4C35"], /* CJK Ideograph Extension A */ + ["\u4C36", "\u4C36"], /* CJK Ideograph Extension A */ + ["\u4C37", "\u4C37"], /* CJK Ideograph Extension A */ + ["\u4C38", "\u4C38"], /* CJK Ideograph Extension A */ + ["\u4C39", "\u4C39"], /* CJK Ideograph Extension A */ + ["\u4C3A", "\u4C3A"], /* CJK Ideograph Extension A */ + ["\u4C3B", "\u4C3B"], /* CJK Ideograph Extension A */ + ["\u4C3C", "\u4C3C"], /* CJK Ideograph Extension A */ + ["\u4C3D", "\u4C3D"], /* CJK Ideograph Extension A */ + ["\u4C3E", "\u4C3E"], /* CJK Ideograph Extension A */ + ["\u4C3F", "\u4C3F"], /* CJK Ideograph Extension A */ + ["\u4C40", "\u4C40"], /* CJK Ideograph Extension A */ + ["\u4C41", "\u4C41"], /* CJK Ideograph Extension A */ + ["\u4C42", "\u4C42"], /* CJK Ideograph Extension A */ + ["\u4C43", "\u4C43"], /* CJK Ideograph Extension A */ + ["\u4C44", "\u4C44"], /* CJK Ideograph Extension A */ + ["\u4C45", "\u4C45"], /* CJK Ideograph Extension A */ + ["\u4C46", "\u4C46"], /* CJK Ideograph Extension A */ + ["\u4C47", "\u4C47"], /* CJK Ideograph Extension A */ + ["\u4C48", "\u4C48"], /* CJK Ideograph Extension A */ + ["\u4C49", "\u4C49"], /* CJK Ideograph Extension A */ + ["\u4C4A", "\u4C4A"], /* CJK Ideograph Extension A */ + ["\u4C4B", "\u4C4B"], /* CJK Ideograph Extension A */ + ["\u4C4C", "\u4C4C"], /* CJK Ideograph Extension A */ + ["\u4C4D", "\u4C4D"], /* CJK Ideograph Extension A */ + ["\u4C4E", "\u4C4E"], /* CJK Ideograph Extension A */ + ["\u4C4F", "\u4C4F"], /* CJK Ideograph Extension A */ + ["\u4C50", "\u4C50"], /* CJK Ideograph Extension A */ + ["\u4C51", "\u4C51"], /* CJK Ideograph Extension A */ + ["\u4C52", "\u4C52"], /* CJK Ideograph Extension A */ + ["\u4C53", "\u4C53"], /* CJK Ideograph Extension A */ + ["\u4C54", "\u4C54"], /* CJK Ideograph Extension A */ + ["\u4C55", "\u4C55"], /* CJK Ideograph Extension A */ + ["\u4C56", "\u4C56"], /* CJK Ideograph Extension A */ + ["\u4C57", "\u4C57"], /* CJK Ideograph Extension A */ + ["\u4C58", "\u4C58"], /* CJK Ideograph Extension A */ + ["\u4C59", "\u4C59"], /* CJK Ideograph Extension A */ + ["\u4C5A", "\u4C5A"], /* CJK Ideograph Extension A */ + ["\u4C5B", "\u4C5B"], /* CJK Ideograph Extension A */ + ["\u4C5C", "\u4C5C"], /* CJK Ideograph Extension A */ + ["\u4C5D", "\u4C5D"], /* CJK Ideograph Extension A */ + ["\u4C5E", "\u4C5E"], /* CJK Ideograph Extension A */ + ["\u4C5F", "\u4C5F"], /* CJK Ideograph Extension A */ + ["\u4C60", "\u4C60"], /* CJK Ideograph Extension A */ + ["\u4C61", "\u4C61"], /* CJK Ideograph Extension A */ + ["\u4C62", "\u4C62"], /* CJK Ideograph Extension A */ + ["\u4C63", "\u4C63"], /* CJK Ideograph Extension A */ + ["\u4C64", "\u4C64"], /* CJK Ideograph Extension A */ + ["\u4C65", "\u4C65"], /* CJK Ideograph Extension A */ + ["\u4C66", "\u4C66"], /* CJK Ideograph Extension A */ + ["\u4C67", "\u4C67"], /* CJK Ideograph Extension A */ + ["\u4C68", "\u4C68"], /* CJK Ideograph Extension A */ + ["\u4C69", "\u4C69"], /* CJK Ideograph Extension A */ + ["\u4C6A", "\u4C6A"], /* CJK Ideograph Extension A */ + ["\u4C6B", "\u4C6B"], /* CJK Ideograph Extension A */ + ["\u4C6C", "\u4C6C"], /* CJK Ideograph Extension A */ + ["\u4C6D", "\u4C6D"], /* CJK Ideograph Extension A */ + ["\u4C6E", "\u4C6E"], /* CJK Ideograph Extension A */ + ["\u4C6F", "\u4C6F"], /* CJK Ideograph Extension A */ + ["\u4C70", "\u4C70"], /* CJK Ideograph Extension A */ + ["\u4C71", "\u4C71"], /* CJK Ideograph Extension A */ + ["\u4C72", "\u4C72"], /* CJK Ideograph Extension A */ + ["\u4C73", "\u4C73"], /* CJK Ideograph Extension A */ + ["\u4C74", "\u4C74"], /* CJK Ideograph Extension A */ + ["\u4C75", "\u4C75"], /* CJK Ideograph Extension A */ + ["\u4C76", "\u4C76"], /* CJK Ideograph Extension A */ + ["\u4C77", "\u4C77"], /* CJK Ideograph Extension A */ + ["\u4C78", "\u4C78"], /* CJK Ideograph Extension A */ + ["\u4C79", "\u4C79"], /* CJK Ideograph Extension A */ + ["\u4C7A", "\u4C7A"], /* CJK Ideograph Extension A */ + ["\u4C7B", "\u4C7B"], /* CJK Ideograph Extension A */ + ["\u4C7C", "\u4C7C"], /* CJK Ideograph Extension A */ + ["\u4C7D", "\u4C7D"], /* CJK Ideograph Extension A */ + ["\u4C7E", "\u4C7E"], /* CJK Ideograph Extension A */ + ["\u4C7F", "\u4C7F"], /* CJK Ideograph Extension A */ + ["\u4C80", "\u4C80"], /* CJK Ideograph Extension A */ + ["\u4C81", "\u4C81"], /* CJK Ideograph Extension A */ + ["\u4C82", "\u4C82"], /* CJK Ideograph Extension A */ + ["\u4C83", "\u4C83"], /* CJK Ideograph Extension A */ + ["\u4C84", "\u4C84"], /* CJK Ideograph Extension A */ + ["\u4C85", "\u4C85"], /* CJK Ideograph Extension A */ + ["\u4C86", "\u4C86"], /* CJK Ideograph Extension A */ + ["\u4C87", "\u4C87"], /* CJK Ideograph Extension A */ + ["\u4C88", "\u4C88"], /* CJK Ideograph Extension A */ + ["\u4C89", "\u4C89"], /* CJK Ideograph Extension A */ + ["\u4C8A", "\u4C8A"], /* CJK Ideograph Extension A */ + ["\u4C8B", "\u4C8B"], /* CJK Ideograph Extension A */ + ["\u4C8C", "\u4C8C"], /* CJK Ideograph Extension A */ + ["\u4C8D", "\u4C8D"], /* CJK Ideograph Extension A */ + ["\u4C8E", "\u4C8E"], /* CJK Ideograph Extension A */ + ["\u4C8F", "\u4C8F"], /* CJK Ideograph Extension A */ + ["\u4C90", "\u4C90"], /* CJK Ideograph Extension A */ + ["\u4C91", "\u4C91"], /* CJK Ideograph Extension A */ + ["\u4C92", "\u4C92"], /* CJK Ideograph Extension A */ + ["\u4C93", "\u4C93"], /* CJK Ideograph Extension A */ + ["\u4C94", "\u4C94"], /* CJK Ideograph Extension A */ + ["\u4C95", "\u4C95"], /* CJK Ideograph Extension A */ + ["\u4C96", "\u4C96"], /* CJK Ideograph Extension A */ + ["\u4C97", "\u4C97"], /* CJK Ideograph Extension A */ + ["\u4C98", "\u4C98"], /* CJK Ideograph Extension A */ + ["\u4C99", "\u4C99"], /* CJK Ideograph Extension A */ + ["\u4C9A", "\u4C9A"], /* CJK Ideograph Extension A */ + ["\u4C9B", "\u4C9B"], /* CJK Ideograph Extension A */ + ["\u4C9C", "\u4C9C"], /* CJK Ideograph Extension A */ + ["\u4C9D", "\u4C9D"], /* CJK Ideograph Extension A */ + ["\u4C9E", "\u4C9E"], /* CJK Ideograph Extension A */ + ["\u4C9F", "\u4C9F"], /* CJK Ideograph Extension A */ + ["\u4CA0", "\u4CA0"], /* CJK Ideograph Extension A */ + ["\u4CA1", "\u4CA1"], /* CJK Ideograph Extension A */ + ["\u4CA2", "\u4CA2"], /* CJK Ideograph Extension A */ + ["\u4CA3", "\u4CA3"], /* CJK Ideograph Extension A */ + ["\u4CA4", "\u4CA4"], /* CJK Ideograph Extension A */ + ["\u4CA5", "\u4CA5"], /* CJK Ideograph Extension A */ + ["\u4CA6", "\u4CA6"], /* CJK Ideograph Extension A */ + ["\u4CA7", "\u4CA7"], /* CJK Ideograph Extension A */ + ["\u4CA8", "\u4CA8"], /* CJK Ideograph Extension A */ + ["\u4CA9", "\u4CA9"], /* CJK Ideograph Extension A */ + ["\u4CAA", "\u4CAA"], /* CJK Ideograph Extension A */ + ["\u4CAB", "\u4CAB"], /* CJK Ideograph Extension A */ + ["\u4CAC", "\u4CAC"], /* CJK Ideograph Extension A */ + ["\u4CAD", "\u4CAD"], /* CJK Ideograph Extension A */ + ["\u4CAE", "\u4CAE"], /* CJK Ideograph Extension A */ + ["\u4CAF", "\u4CAF"], /* CJK Ideograph Extension A */ + ["\u4CB0", "\u4CB0"], /* CJK Ideograph Extension A */ + ["\u4CB1", "\u4CB1"], /* CJK Ideograph Extension A */ + ["\u4CB2", "\u4CB2"], /* CJK Ideograph Extension A */ + ["\u4CB3", "\u4CB3"], /* CJK Ideograph Extension A */ + ["\u4CB4", "\u4CB4"], /* CJK Ideograph Extension A */ + ["\u4CB5", "\u4CB5"], /* CJK Ideograph Extension A */ + ["\u4CB6", "\u4CB6"], /* CJK Ideograph Extension A */ + ["\u4CB7", "\u4CB7"], /* CJK Ideograph Extension A */ + ["\u4CB8", "\u4CB8"], /* CJK Ideograph Extension A */ + ["\u4CB9", "\u4CB9"], /* CJK Ideograph Extension A */ + ["\u4CBA", "\u4CBA"], /* CJK Ideograph Extension A */ + ["\u4CBB", "\u4CBB"], /* CJK Ideograph Extension A */ + ["\u4CBC", "\u4CBC"], /* CJK Ideograph Extension A */ + ["\u4CBD", "\u4CBD"], /* CJK Ideograph Extension A */ + ["\u4CBE", "\u4CBE"], /* CJK Ideograph Extension A */ + ["\u4CBF", "\u4CBF"], /* CJK Ideograph Extension A */ + ["\u4CC0", "\u4CC0"], /* CJK Ideograph Extension A */ + ["\u4CC1", "\u4CC1"], /* CJK Ideograph Extension A */ + ["\u4CC2", "\u4CC2"], /* CJK Ideograph Extension A */ + ["\u4CC3", "\u4CC3"], /* CJK Ideograph Extension A */ + ["\u4CC4", "\u4CC4"], /* CJK Ideograph Extension A */ + ["\u4CC5", "\u4CC5"], /* CJK Ideograph Extension A */ + ["\u4CC6", "\u4CC6"], /* CJK Ideograph Extension A */ + ["\u4CC7", "\u4CC7"], /* CJK Ideograph Extension A */ + ["\u4CC8", "\u4CC8"], /* CJK Ideograph Extension A */ + ["\u4CC9", "\u4CC9"], /* CJK Ideograph Extension A */ + ["\u4CCA", "\u4CCA"], /* CJK Ideograph Extension A */ + ["\u4CCB", "\u4CCB"], /* CJK Ideograph Extension A */ + ["\u4CCC", "\u4CCC"], /* CJK Ideograph Extension A */ + ["\u4CCD", "\u4CCD"], /* CJK Ideograph Extension A */ + ["\u4CCE", "\u4CCE"], /* CJK Ideograph Extension A */ + ["\u4CCF", "\u4CCF"], /* CJK Ideograph Extension A */ + ["\u4CD0", "\u4CD0"], /* CJK Ideograph Extension A */ + ["\u4CD1", "\u4CD1"], /* CJK Ideograph Extension A */ + ["\u4CD2", "\u4CD2"], /* CJK Ideograph Extension A */ + ["\u4CD3", "\u4CD3"], /* CJK Ideograph Extension A */ + ["\u4CD4", "\u4CD4"], /* CJK Ideograph Extension A */ + ["\u4CD5", "\u4CD5"], /* CJK Ideograph Extension A */ + ["\u4CD6", "\u4CD6"], /* CJK Ideograph Extension A */ + ["\u4CD7", "\u4CD7"], /* CJK Ideograph Extension A */ + ["\u4CD8", "\u4CD8"], /* CJK Ideograph Extension A */ + ["\u4CD9", "\u4CD9"], /* CJK Ideograph Extension A */ + ["\u4CDA", "\u4CDA"], /* CJK Ideograph Extension A */ + ["\u4CDB", "\u4CDB"], /* CJK Ideograph Extension A */ + ["\u4CDC", "\u4CDC"], /* CJK Ideograph Extension A */ + ["\u4CDD", "\u4CDD"], /* CJK Ideograph Extension A */ + ["\u4CDE", "\u4CDE"], /* CJK Ideograph Extension A */ + ["\u4CDF", "\u4CDF"], /* CJK Ideograph Extension A */ + ["\u4CE0", "\u4CE0"], /* CJK Ideograph Extension A */ + ["\u4CE1", "\u4CE1"], /* CJK Ideograph Extension A */ + ["\u4CE2", "\u4CE2"], /* CJK Ideograph Extension A */ + ["\u4CE3", "\u4CE3"], /* CJK Ideograph Extension A */ + ["\u4CE4", "\u4CE4"], /* CJK Ideograph Extension A */ + ["\u4CE5", "\u4CE5"], /* CJK Ideograph Extension A */ + ["\u4CE6", "\u4CE6"], /* CJK Ideograph Extension A */ + ["\u4CE7", "\u4CE7"], /* CJK Ideograph Extension A */ + ["\u4CE8", "\u4CE8"], /* CJK Ideograph Extension A */ + ["\u4CE9", "\u4CE9"], /* CJK Ideograph Extension A */ + ["\u4CEA", "\u4CEA"], /* CJK Ideograph Extension A */ + ["\u4CEB", "\u4CEB"], /* CJK Ideograph Extension A */ + ["\u4CEC", "\u4CEC"], /* CJK Ideograph Extension A */ + ["\u4CED", "\u4CED"], /* CJK Ideograph Extension A */ + ["\u4CEE", "\u4CEE"], /* CJK Ideograph Extension A */ + ["\u4CEF", "\u4CEF"], /* CJK Ideograph Extension A */ + ["\u4CF0", "\u4CF0"], /* CJK Ideograph Extension A */ + ["\u4CF1", "\u4CF1"], /* CJK Ideograph Extension A */ + ["\u4CF2", "\u4CF2"], /* CJK Ideograph Extension A */ + ["\u4CF3", "\u4CF3"], /* CJK Ideograph Extension A */ + ["\u4CF4", "\u4CF4"], /* CJK Ideograph Extension A */ + ["\u4CF5", "\u4CF5"], /* CJK Ideograph Extension A */ + ["\u4CF6", "\u4CF6"], /* CJK Ideograph Extension A */ + ["\u4CF7", "\u4CF7"], /* CJK Ideograph Extension A */ + ["\u4CF8", "\u4CF8"], /* CJK Ideograph Extension A */ + ["\u4CF9", "\u4CF9"], /* CJK Ideograph Extension A */ + ["\u4CFA", "\u4CFA"], /* CJK Ideograph Extension A */ + ["\u4CFB", "\u4CFB"], /* CJK Ideograph Extension A */ + ["\u4CFC", "\u4CFC"], /* CJK Ideograph Extension A */ + ["\u4CFD", "\u4CFD"], /* CJK Ideograph Extension A */ + ["\u4CFE", "\u4CFE"], /* CJK Ideograph Extension A */ + ["\u4CFF", "\u4CFF"], /* CJK Ideograph Extension A */ + ["\u4D00", "\u4D00"], /* CJK Ideograph Extension A */ + ["\u4D01", "\u4D01"], /* CJK Ideograph Extension A */ + ["\u4D02", "\u4D02"], /* CJK Ideograph Extension A */ + ["\u4D03", "\u4D03"], /* CJK Ideograph Extension A */ + ["\u4D04", "\u4D04"], /* CJK Ideograph Extension A */ + ["\u4D05", "\u4D05"], /* CJK Ideograph Extension A */ + ["\u4D06", "\u4D06"], /* CJK Ideograph Extension A */ + ["\u4D07", "\u4D07"], /* CJK Ideograph Extension A */ + ["\u4D08", "\u4D08"], /* CJK Ideograph Extension A */ + ["\u4D09", "\u4D09"], /* CJK Ideograph Extension A */ + ["\u4D0A", "\u4D0A"], /* CJK Ideograph Extension A */ + ["\u4D0B", "\u4D0B"], /* CJK Ideograph Extension A */ + ["\u4D0C", "\u4D0C"], /* CJK Ideograph Extension A */ + ["\u4D0D", "\u4D0D"], /* CJK Ideograph Extension A */ + ["\u4D0E", "\u4D0E"], /* CJK Ideograph Extension A */ + ["\u4D0F", "\u4D0F"], /* CJK Ideograph Extension A */ + ["\u4D10", "\u4D10"], /* CJK Ideograph Extension A */ + ["\u4D11", "\u4D11"], /* CJK Ideograph Extension A */ + ["\u4D12", "\u4D12"], /* CJK Ideograph Extension A */ + ["\u4D13", "\u4D13"], /* CJK Ideograph Extension A */ + ["\u4D14", "\u4D14"], /* CJK Ideograph Extension A */ + ["\u4D15", "\u4D15"], /* CJK Ideograph Extension A */ + ["\u4D16", "\u4D16"], /* CJK Ideograph Extension A */ + ["\u4D17", "\u4D17"], /* CJK Ideograph Extension A */ + ["\u4D18", "\u4D18"], /* CJK Ideograph Extension A */ + ["\u4D19", "\u4D19"], /* CJK Ideograph Extension A */ + ["\u4D1A", "\u4D1A"], /* CJK Ideograph Extension A */ + ["\u4D1B", "\u4D1B"], /* CJK Ideograph Extension A */ + ["\u4D1C", "\u4D1C"], /* CJK Ideograph Extension A */ + ["\u4D1D", "\u4D1D"], /* CJK Ideograph Extension A */ + ["\u4D1E", "\u4D1E"], /* CJK Ideograph Extension A */ + ["\u4D1F", "\u4D1F"], /* CJK Ideograph Extension A */ + ["\u4D20", "\u4D20"], /* CJK Ideograph Extension A */ + ["\u4D21", "\u4D21"], /* CJK Ideograph Extension A */ + ["\u4D22", "\u4D22"], /* CJK Ideograph Extension A */ + ["\u4D23", "\u4D23"], /* CJK Ideograph Extension A */ + ["\u4D24", "\u4D24"], /* CJK Ideograph Extension A */ + ["\u4D25", "\u4D25"], /* CJK Ideograph Extension A */ + ["\u4D26", "\u4D26"], /* CJK Ideograph Extension A */ + ["\u4D27", "\u4D27"], /* CJK Ideograph Extension A */ + ["\u4D28", "\u4D28"], /* CJK Ideograph Extension A */ + ["\u4D29", "\u4D29"], /* CJK Ideograph Extension A */ + ["\u4D2A", "\u4D2A"], /* CJK Ideograph Extension A */ + ["\u4D2B", "\u4D2B"], /* CJK Ideograph Extension A */ + ["\u4D2C", "\u4D2C"], /* CJK Ideograph Extension A */ + ["\u4D2D", "\u4D2D"], /* CJK Ideograph Extension A */ + ["\u4D2E", "\u4D2E"], /* CJK Ideograph Extension A */ + ["\u4D2F", "\u4D2F"], /* CJK Ideograph Extension A */ + ["\u4D30", "\u4D30"], /* CJK Ideograph Extension A */ + ["\u4D31", "\u4D31"], /* CJK Ideograph Extension A */ + ["\u4D32", "\u4D32"], /* CJK Ideograph Extension A */ + ["\u4D33", "\u4D33"], /* CJK Ideograph Extension A */ + ["\u4D34", "\u4D34"], /* CJK Ideograph Extension A */ + ["\u4D35", "\u4D35"], /* CJK Ideograph Extension A */ + ["\u4D36", "\u4D36"], /* CJK Ideograph Extension A */ + ["\u4D37", "\u4D37"], /* CJK Ideograph Extension A */ + ["\u4D38", "\u4D38"], /* CJK Ideograph Extension A */ + ["\u4D39", "\u4D39"], /* CJK Ideograph Extension A */ + ["\u4D3A", "\u4D3A"], /* CJK Ideograph Extension A */ + ["\u4D3B", "\u4D3B"], /* CJK Ideograph Extension A */ + ["\u4D3C", "\u4D3C"], /* CJK Ideograph Extension A */ + ["\u4D3D", "\u4D3D"], /* CJK Ideograph Extension A */ + ["\u4D3E", "\u4D3E"], /* CJK Ideograph Extension A */ + ["\u4D3F", "\u4D3F"], /* CJK Ideograph Extension A */ + ["\u4D40", "\u4D40"], /* CJK Ideograph Extension A */ + ["\u4D41", "\u4D41"], /* CJK Ideograph Extension A */ + ["\u4D42", "\u4D42"], /* CJK Ideograph Extension A */ + ["\u4D43", "\u4D43"], /* CJK Ideograph Extension A */ + ["\u4D44", "\u4D44"], /* CJK Ideograph Extension A */ + ["\u4D45", "\u4D45"], /* CJK Ideograph Extension A */ + ["\u4D46", "\u4D46"], /* CJK Ideograph Extension A */ + ["\u4D47", "\u4D47"], /* CJK Ideograph Extension A */ + ["\u4D48", "\u4D48"], /* CJK Ideograph Extension A */ + ["\u4D49", "\u4D49"], /* CJK Ideograph Extension A */ + ["\u4D4A", "\u4D4A"], /* CJK Ideograph Extension A */ + ["\u4D4B", "\u4D4B"], /* CJK Ideograph Extension A */ + ["\u4D4C", "\u4D4C"], /* CJK Ideograph Extension A */ + ["\u4D4D", "\u4D4D"], /* CJK Ideograph Extension A */ + ["\u4D4E", "\u4D4E"], /* CJK Ideograph Extension A */ + ["\u4D4F", "\u4D4F"], /* CJK Ideograph Extension A */ + ["\u4D50", "\u4D50"], /* CJK Ideograph Extension A */ + ["\u4D51", "\u4D51"], /* CJK Ideograph Extension A */ + ["\u4D52", "\u4D52"], /* CJK Ideograph Extension A */ + ["\u4D53", "\u4D53"], /* CJK Ideograph Extension A */ + ["\u4D54", "\u4D54"], /* CJK Ideograph Extension A */ + ["\u4D55", "\u4D55"], /* CJK Ideograph Extension A */ + ["\u4D56", "\u4D56"], /* CJK Ideograph Extension A */ + ["\u4D57", "\u4D57"], /* CJK Ideograph Extension A */ + ["\u4D58", "\u4D58"], /* CJK Ideograph Extension A */ + ["\u4D59", "\u4D59"], /* CJK Ideograph Extension A */ + ["\u4D5A", "\u4D5A"], /* CJK Ideograph Extension A */ + ["\u4D5B", "\u4D5B"], /* CJK Ideograph Extension A */ + ["\u4D5C", "\u4D5C"], /* CJK Ideograph Extension A */ + ["\u4D5D", "\u4D5D"], /* CJK Ideograph Extension A */ + ["\u4D5E", "\u4D5E"], /* CJK Ideograph Extension A */ + ["\u4D5F", "\u4D5F"], /* CJK Ideograph Extension A */ + ["\u4D60", "\u4D60"], /* CJK Ideograph Extension A */ + ["\u4D61", "\u4D61"], /* CJK Ideograph Extension A */ + ["\u4D62", "\u4D62"], /* CJK Ideograph Extension A */ + ["\u4D63", "\u4D63"], /* CJK Ideograph Extension A */ + ["\u4D64", "\u4D64"], /* CJK Ideograph Extension A */ + ["\u4D65", "\u4D65"], /* CJK Ideograph Extension A */ + ["\u4D66", "\u4D66"], /* CJK Ideograph Extension A */ + ["\u4D67", "\u4D67"], /* CJK Ideograph Extension A */ + ["\u4D68", "\u4D68"], /* CJK Ideograph Extension A */ + ["\u4D69", "\u4D69"], /* CJK Ideograph Extension A */ + ["\u4D6A", "\u4D6A"], /* CJK Ideograph Extension A */ + ["\u4D6B", "\u4D6B"], /* CJK Ideograph Extension A */ + ["\u4D6C", "\u4D6C"], /* CJK Ideograph Extension A */ + ["\u4D6D", "\u4D6D"], /* CJK Ideograph Extension A */ + ["\u4D6E", "\u4D6E"], /* CJK Ideograph Extension A */ + ["\u4D6F", "\u4D6F"], /* CJK Ideograph Extension A */ + ["\u4D70", "\u4D70"], /* CJK Ideograph Extension A */ + ["\u4D71", "\u4D71"], /* CJK Ideograph Extension A */ + ["\u4D72", "\u4D72"], /* CJK Ideograph Extension A */ + ["\u4D73", "\u4D73"], /* CJK Ideograph Extension A */ + ["\u4D74", "\u4D74"], /* CJK Ideograph Extension A */ + ["\u4D75", "\u4D75"], /* CJK Ideograph Extension A */ + ["\u4D76", "\u4D76"], /* CJK Ideograph Extension A */ + ["\u4D77", "\u4D77"], /* CJK Ideograph Extension A */ + ["\u4D78", "\u4D78"], /* CJK Ideograph Extension A */ + ["\u4D79", "\u4D79"], /* CJK Ideograph Extension A */ + ["\u4D7A", "\u4D7A"], /* CJK Ideograph Extension A */ + ["\u4D7B", "\u4D7B"], /* CJK Ideograph Extension A */ + ["\u4D7C", "\u4D7C"], /* CJK Ideograph Extension A */ + ["\u4D7D", "\u4D7D"], /* CJK Ideograph Extension A */ + ["\u4D7E", "\u4D7E"], /* CJK Ideograph Extension A */ + ["\u4D7F", "\u4D7F"], /* CJK Ideograph Extension A */ + ["\u4D80", "\u4D80"], /* CJK Ideograph Extension A */ + ["\u4D81", "\u4D81"], /* CJK Ideograph Extension A */ + ["\u4D82", "\u4D82"], /* CJK Ideograph Extension A */ + ["\u4D83", "\u4D83"], /* CJK Ideograph Extension A */ + ["\u4D84", "\u4D84"], /* CJK Ideograph Extension A */ + ["\u4D85", "\u4D85"], /* CJK Ideograph Extension A */ + ["\u4D86", "\u4D86"], /* CJK Ideograph Extension A */ + ["\u4D87", "\u4D87"], /* CJK Ideograph Extension A */ + ["\u4D88", "\u4D88"], /* CJK Ideograph Extension A */ + ["\u4D89", "\u4D89"], /* CJK Ideograph Extension A */ + ["\u4D8A", "\u4D8A"], /* CJK Ideograph Extension A */ + ["\u4D8B", "\u4D8B"], /* CJK Ideograph Extension A */ + ["\u4D8C", "\u4D8C"], /* CJK Ideograph Extension A */ + ["\u4D8D", "\u4D8D"], /* CJK Ideograph Extension A */ + ["\u4D8E", "\u4D8E"], /* CJK Ideograph Extension A */ + ["\u4D8F", "\u4D8F"], /* CJK Ideograph Extension A */ + ["\u4D90", "\u4D90"], /* CJK Ideograph Extension A */ + ["\u4D91", "\u4D91"], /* CJK Ideograph Extension A */ + ["\u4D92", "\u4D92"], /* CJK Ideograph Extension A */ + ["\u4D93", "\u4D93"], /* CJK Ideograph Extension A */ + ["\u4D94", "\u4D94"], /* CJK Ideograph Extension A */ + ["\u4D95", "\u4D95"], /* CJK Ideograph Extension A */ + ["\u4D96", "\u4D96"], /* CJK Ideograph Extension A */ + ["\u4D97", "\u4D97"], /* CJK Ideograph Extension A */ + ["\u4D98", "\u4D98"], /* CJK Ideograph Extension A */ + ["\u4D99", "\u4D99"], /* CJK Ideograph Extension A */ + ["\u4D9A", "\u4D9A"], /* CJK Ideograph Extension A */ + ["\u4D9B", "\u4D9B"], /* CJK Ideograph Extension A */ + ["\u4D9C", "\u4D9C"], /* CJK Ideograph Extension A */ + ["\u4D9D", "\u4D9D"], /* CJK Ideograph Extension A */ + ["\u4D9E", "\u4D9E"], /* CJK Ideograph Extension A */ + ["\u4D9F", "\u4D9F"], /* CJK Ideograph Extension A */ + ["\u4DA0", "\u4DA0"], /* CJK Ideograph Extension A */ + ["\u4DA1", "\u4DA1"], /* CJK Ideograph Extension A */ + ["\u4DA2", "\u4DA2"], /* CJK Ideograph Extension A */ + ["\u4DA3", "\u4DA3"], /* CJK Ideograph Extension A */ + ["\u4DA4", "\u4DA4"], /* CJK Ideograph Extension A */ + ["\u4DA5", "\u4DA5"], /* CJK Ideograph Extension A */ + ["\u4DA6", "\u4DA6"], /* CJK Ideograph Extension A */ + ["\u4DA7", "\u4DA7"], /* CJK Ideograph Extension A */ + ["\u4DA8", "\u4DA8"], /* CJK Ideograph Extension A */ + ["\u4DA9", "\u4DA9"], /* CJK Ideograph Extension A */ + ["\u4DAA", "\u4DAA"], /* CJK Ideograph Extension A */ + ["\u4DAB", "\u4DAB"], /* CJK Ideograph Extension A */ + ["\u4DAC", "\u4DAC"], /* CJK Ideograph Extension A */ + ["\u4DAD", "\u4DAD"], /* CJK Ideograph Extension A */ + ["\u4DAE", "\u4DAE"], /* CJK Ideograph Extension A */ + ["\u4DAF", "\u4DAF"], /* CJK Ideograph Extension A */ + ["\u4DB0", "\u4DB0"], /* CJK Ideograph Extension A */ + ["\u4DB1", "\u4DB1"], /* CJK Ideograph Extension A */ + ["\u4DB2", "\u4DB2"], /* CJK Ideograph Extension A */ + ["\u4DB3", "\u4DB3"], /* CJK Ideograph Extension A */ + ["\u4DB4", "\u4DB4"], /* CJK Ideograph Extension A */ + ["\u4DB5", "\u4DB5"], /* CJK Ideograph Extension A */ + ["\u4DB6", "\u4DB6"], /* CJK Ideograph Extension A */ + ["\u4DB7", "\u4DB7"], /* CJK Ideograph Extension A */ + ["\u4DB8", "\u4DB8"], /* CJK Ideograph Extension A */ + ["\u4DB9", "\u4DB9"], /* CJK Ideograph Extension A */ + ["\u4DBA", "\u4DBA"], /* CJK Ideograph Extension A */ + ["\u4DBB", "\u4DBB"], /* CJK Ideograph Extension A */ + ["\u4DBC", "\u4DBC"], /* CJK Ideograph Extension A */ + ["\u4DBD", "\u4DBD"], /* CJK Ideograph Extension A */ + ["\u4DBE", "\u4DBE"], /* CJK Ideograph Extension A */ + ["\u4DBF", "\u4DBF"], /* CJK Ideograph Extension A */ + ["\u4DC0", "\u4DC0"], /* HEXAGRAM FOR THE CREATIVE HEAVEN */ + ["\u4DC1", "\u4DC1"], /* HEXAGRAM FOR THE RECEPTIVE EARTH */ + ["\u4DC2", "\u4DC2"], /* HEXAGRAM FOR DIFFICULTY AT THE BEGINNING */ + ["\u4DC3", "\u4DC3"], /* HEXAGRAM FOR YOUTHFUL FOLLY */ + ["\u4DC4", "\u4DC4"], /* HEXAGRAM FOR WAITING */ + ["\u4DC5", "\u4DC5"], /* HEXAGRAM FOR CONFLICT */ + ["\u4DC6", "\u4DC6"], /* HEXAGRAM FOR THE ARMY */ + ["\u4DC7", "\u4DC7"], /* HEXAGRAM FOR HOLDING TOGETHER */ + ["\u4DC8", "\u4DC8"], /* HEXAGRAM FOR SMALL TAMING */ + ["\u4DC9", "\u4DC9"], /* HEXAGRAM FOR TREADING */ + ["\u4DCA", "\u4DCA"], /* HEXAGRAM FOR PEACE */ + ["\u4DCB", "\u4DCB"], /* HEXAGRAM FOR STANDSTILL */ + ["\u4DCC", "\u4DCC"], /* HEXAGRAM FOR FELLOWSHIP */ + ["\u4DCD", "\u4DCD"], /* HEXAGRAM FOR GREAT POSSESSION */ + ["\u4DCE", "\u4DCE"], /* HEXAGRAM FOR MODESTY */ + ["\u4DCF", "\u4DCF"], /* HEXAGRAM FOR ENTHUSIASM */ + ["\u4DD0", "\u4DD0"], /* HEXAGRAM FOR FOLLOWING */ + ["\u4DD1", "\u4DD1"], /* HEXAGRAM FOR WORK ON THE DECAYED */ + ["\u4DD2", "\u4DD2"], /* HEXAGRAM FOR APPROACH */ + ["\u4DD3", "\u4DD3"], /* HEXAGRAM FOR CONTEMPLATION */ + ["\u4DD4", "\u4DD4"], /* HEXAGRAM FOR BITING THROUGH */ + ["\u4DD5", "\u4DD5"], /* HEXAGRAM FOR GRACE */ + ["\u4DD6", "\u4DD6"], /* HEXAGRAM FOR SPLITTING APART */ + ["\u4DD7", "\u4DD7"], /* HEXAGRAM FOR RETURN */ + ["\u4DD8", "\u4DD8"], /* HEXAGRAM FOR INNOCENCE */ + ["\u4DD9", "\u4DD9"], /* HEXAGRAM FOR GREAT TAMING */ + ["\u4DDA", "\u4DDA"], /* HEXAGRAM FOR MOUTH CORNERS */ + ["\u4DDB", "\u4DDB"], /* HEXAGRAM FOR GREAT PREPONDERANCE */ + ["\u4DDC", "\u4DDC"], /* HEXAGRAM FOR THE ABYSMAL WATER */ + ["\u4DDD", "\u4DDD"], /* HEXAGRAM FOR THE CLINGING FIRE */ + ["\u4DDE", "\u4DDE"], /* HEXAGRAM FOR INFLUENCE */ + ["\u4DDF", "\u4DDF"], /* HEXAGRAM FOR DURATION */ + ["\u4DE0", "\u4DE0"], /* HEXAGRAM FOR RETREAT */ + ["\u4DE1", "\u4DE1"], /* HEXAGRAM FOR GREAT POWER */ + ["\u4DE2", "\u4DE2"], /* HEXAGRAM FOR PROGRESS */ + ["\u4DE3", "\u4DE3"], /* HEXAGRAM FOR DARKENING OF THE LIGHT */ + ["\u4DE4", "\u4DE4"], /* HEXAGRAM FOR THE FAMILY */ + ["\u4DE5", "\u4DE5"], /* HEXAGRAM FOR OPPOSITION */ + ["\u4DE6", "\u4DE6"], /* HEXAGRAM FOR OBSTRUCTION */ + ["\u4DE7", "\u4DE7"], /* HEXAGRAM FOR DELIVERANCE */ + ["\u4DE8", "\u4DE8"], /* HEXAGRAM FOR DECREASE */ + ["\u4DE9", "\u4DE9"], /* HEXAGRAM FOR INCREASE */ + ["\u4DEA", "\u4DEA"], /* HEXAGRAM FOR BREAKTHROUGH */ + ["\u4DEB", "\u4DEB"], /* HEXAGRAM FOR COMING TO MEET */ + ["\u4DEC", "\u4DEC"], /* HEXAGRAM FOR GATHERING TOGETHER */ + ["\u4DED", "\u4DED"], /* HEXAGRAM FOR PUSHING UPWARD */ + ["\u4DEE", "\u4DEE"], /* HEXAGRAM FOR OPPRESSION */ + ["\u4DEF", "\u4DEF"], /* HEXAGRAM FOR THE WELL */ + ["\u4DF0", "\u4DF0"], /* HEXAGRAM FOR REVOLUTION */ + ["\u4DF1", "\u4DF1"], /* HEXAGRAM FOR THE CAULDRON */ + ["\u4DF2", "\u4DF2"], /* HEXAGRAM FOR THE AROUSING THUNDER */ + ["\u4DF3", "\u4DF3"], /* HEXAGRAM FOR THE KEEPING STILL MOUNTAIN */ + ["\u4DF4", "\u4DF4"], /* HEXAGRAM FOR DEVELOPMENT */ + ["\u4DF5", "\u4DF5"], /* HEXAGRAM FOR THE MARRYING MAIDEN */ + ["\u4DF6", "\u4DF6"], /* HEXAGRAM FOR ABUNDANCE */ + ["\u4DF7", "\u4DF7"], /* HEXAGRAM FOR THE WANDERER */ + ["\u4DF8", "\u4DF8"], /* HEXAGRAM FOR THE GENTLE WIND */ + ["\u4DF9", "\u4DF9"], /* HEXAGRAM FOR THE JOYOUS LAKE */ + ["\u4DFA", "\u4DFA"], /* HEXAGRAM FOR DISPERSION */ + ["\u4DFB", "\u4DFB"], /* HEXAGRAM FOR LIMITATION */ + ["\u4DFC", "\u4DFC"], /* HEXAGRAM FOR INNER TRUTH */ + ["\u4DFD", "\u4DFD"], /* HEXAGRAM FOR SMALL PREPONDERANCE */ + ["\u4DFE", "\u4DFE"], /* HEXAGRAM FOR AFTER COMPLETION */ + ["\u4DFF", "\u4DFF"], /* HEXAGRAM FOR BEFORE COMPLETION */ + ["\u4E00", "\u4E00"], /* CJK Ideograph */ + ["\u4E01", "\u4E01"], /* CJK Ideograph */ + ["\u4E02", "\u4E02"], /* CJK Ideograph */ + ["\u4E03", "\u4E03"], /* CJK Ideograph */ + ["\u4E04", "\u4E04"], /* CJK Ideograph */ + ["\u4E05", "\u4E05"], /* CJK Ideograph */ + ["\u4E06", "\u4E06"], /* CJK Ideograph */ + ["\u4E07", "\u4E07"], /* CJK Ideograph */ + ["\u4E08", "\u4E08"], /* CJK Ideograph */ + ["\u4E09", "\u4E09"], /* CJK Ideograph */ + ["\u4E0A", "\u4E0A"], /* CJK Ideograph */ + ["\u4E0B", "\u4E0B"], /* CJK Ideograph */ + ["\u4E0C", "\u4E0C"], /* CJK Ideograph */ + ["\u4E0D", "\u4E0D"], /* CJK Ideograph */ + ["\u4E0E", "\u4E0E"], /* CJK Ideograph */ + ["\u4E0F", "\u4E0F"], /* CJK Ideograph */ + ["\u4E10", "\u4E10"], /* CJK Ideograph */ + ["\u4E11", "\u4E11"], /* CJK Ideograph */ + ["\u4E12", "\u4E12"], /* CJK Ideograph */ + ["\u4E13", "\u4E13"], /* CJK Ideograph */ + ["\u4E14", "\u4E14"], /* CJK Ideograph */ + ["\u4E15", "\u4E15"], /* CJK Ideograph */ + ["\u4E16", "\u4E16"], /* CJK Ideograph */ + ["\u4E17", "\u4E17"], /* CJK Ideograph */ + ["\u4E18", "\u4E18"], /* CJK Ideograph */ + ["\u4E19", "\u4E19"], /* CJK Ideograph */ + ["\u4E1A", "\u4E1A"], /* CJK Ideograph */ + ["\u4E1B", "\u4E1B"], /* CJK Ideograph */ + ["\u4E1C", "\u4E1C"], /* CJK Ideograph */ + ["\u4E1D", "\u4E1D"], /* CJK Ideograph */ + ["\u4E1E", "\u4E1E"], /* CJK Ideograph */ + ["\u4E1F", "\u4E1F"], /* CJK Ideograph */ + ["\u4E20", "\u4E20"], /* CJK Ideograph */ + ["\u4E21", "\u4E21"], /* CJK Ideograph */ + ["\u4E22", "\u4E22"], /* CJK Ideograph */ + ["\u4E23", "\u4E23"], /* CJK Ideograph */ + ["\u4E24", "\u4E24"], /* CJK Ideograph */ + ["\u4E25", "\u4E25"], /* CJK Ideograph */ + ["\u4E26", "\u4E26"], /* CJK Ideograph */ + ["\u4E27", "\u4E27"], /* CJK Ideograph */ + ["\u4E28", "\u4E28"], /* CJK Ideograph */ + ["\u4E29", "\u4E29"], /* CJK Ideograph */ + ["\u4E2A", "\u4E2A"], /* CJK Ideograph */ + ["\u4E2B", "\u4E2B"], /* CJK Ideograph */ + ["\u4E2C", "\u4E2C"], /* CJK Ideograph */ + ["\u4E2D", "\u4E2D"], /* CJK Ideograph */ + ["\u4E2E", "\u4E2E"], /* CJK Ideograph */ + ["\u4E2F", "\u4E2F"], /* CJK Ideograph */ + ["\u4E30", "\u4E30"], /* CJK Ideograph */ + ["\u4E31", "\u4E31"], /* CJK Ideograph */ + ["\u4E32", "\u4E32"], /* CJK Ideograph */ + ["\u4E33", "\u4E33"], /* CJK Ideograph */ + ["\u4E34", "\u4E34"], /* CJK Ideograph */ + ["\u4E35", "\u4E35"], /* CJK Ideograph */ + ["\u4E36", "\u4E36"], /* CJK Ideograph */ + ["\u4E37", "\u4E37"], /* CJK Ideograph */ + ["\u4E38", "\u4E38"], /* CJK Ideograph */ + ["\u4E39", "\u4E39"], /* CJK Ideograph */ + ["\u4E3A", "\u4E3A"], /* CJK Ideograph */ + ["\u4E3B", "\u4E3B"], /* CJK Ideograph */ + ["\u4E3C", "\u4E3C"], /* CJK Ideograph */ + ["\u4E3D", "\u4E3D"], /* CJK Ideograph */ + ["\u4E3E", "\u4E3E"], /* CJK Ideograph */ + ["\u4E3F", "\u4E3F"], /* CJK Ideograph */ + ["\u4E40", "\u4E40"], /* CJK Ideograph */ + ["\u4E41", "\u4E41"], /* CJK Ideograph */ + ["\u4E42", "\u4E42"], /* CJK Ideograph */ + ["\u4E43", "\u4E43"], /* CJK Ideograph */ + ["\u4E44", "\u4E44"], /* CJK Ideograph */ + ["\u4E45", "\u4E45"], /* CJK Ideograph */ + ["\u4E46", "\u4E46"], /* CJK Ideograph */ + ["\u4E47", "\u4E47"], /* CJK Ideograph */ + ["\u4E48", "\u4E48"], /* CJK Ideograph */ + ["\u4E49", "\u4E49"], /* CJK Ideograph */ + ["\u4E4A", "\u4E4A"], /* CJK Ideograph */ + ["\u4E4B", "\u4E4B"], /* CJK Ideograph */ + ["\u4E4C", "\u4E4C"], /* CJK Ideograph */ + ["\u4E4D", "\u4E4D"], /* CJK Ideograph */ + ["\u4E4E", "\u4E4E"], /* CJK Ideograph */ + ["\u4E4F", "\u4E4F"], /* CJK Ideograph */ + ["\u4E50", "\u4E50"], /* CJK Ideograph */ + ["\u4E51", "\u4E51"], /* CJK Ideograph */ + ["\u4E52", "\u4E52"], /* CJK Ideograph */ + ["\u4E53", "\u4E53"], /* CJK Ideograph */ + ["\u4E54", "\u4E54"], /* CJK Ideograph */ + ["\u4E55", "\u4E55"], /* CJK Ideograph */ + ["\u4E56", "\u4E56"], /* CJK Ideograph */ + ["\u4E57", "\u4E57"], /* CJK Ideograph */ + ["\u4E58", "\u4E58"], /* CJK Ideograph */ + ["\u4E59", "\u4E59"], /* CJK Ideograph */ + ["\u4E5A", "\u4E5A"], /* CJK Ideograph */ + ["\u4E5B", "\u4E5B"], /* CJK Ideograph */ + ["\u4E5C", "\u4E5C"], /* CJK Ideograph */ + ["\u4E5D", "\u4E5D"], /* CJK Ideograph */ + ["\u4E5E", "\u4E5E"], /* CJK Ideograph */ + ["\u4E5F", "\u4E5F"], /* CJK Ideograph */ + ["\u4E60", "\u4E60"], /* CJK Ideograph */ + ["\u4E61", "\u4E61"], /* CJK Ideograph */ + ["\u4E62", "\u4E62"], /* CJK Ideograph */ + ["\u4E63", "\u4E63"], /* CJK Ideograph */ + ["\u4E64", "\u4E64"], /* CJK Ideograph */ + ["\u4E65", "\u4E65"], /* CJK Ideograph */ + ["\u4E66", "\u4E66"], /* CJK Ideograph */ + ["\u4E67", "\u4E67"], /* CJK Ideograph */ + ["\u4E68", "\u4E68"], /* CJK Ideograph */ + ["\u4E69", "\u4E69"], /* CJK Ideograph */ + ["\u4E6A", "\u4E6A"], /* CJK Ideograph */ + ["\u4E6B", "\u4E6B"], /* CJK Ideograph */ + ["\u4E6C", "\u4E6C"], /* CJK Ideograph */ + ["\u4E6D", "\u4E6D"], /* CJK Ideograph */ + ["\u4E6E", "\u4E6E"], /* CJK Ideograph */ + ["\u4E6F", "\u4E6F"], /* CJK Ideograph */ + ["\u4E70", "\u4E70"], /* CJK Ideograph */ + ["\u4E71", "\u4E71"], /* CJK Ideograph */ + ["\u4E72", "\u4E72"], /* CJK Ideograph */ + ["\u4E73", "\u4E73"], /* CJK Ideograph */ + ["\u4E74", "\u4E74"], /* CJK Ideograph */ + ["\u4E75", "\u4E75"], /* CJK Ideograph */ + ["\u4E76", "\u4E76"], /* CJK Ideograph */ + ["\u4E77", "\u4E77"], /* CJK Ideograph */ + ["\u4E78", "\u4E78"], /* CJK Ideograph */ + ["\u4E79", "\u4E79"], /* CJK Ideograph */ + ["\u4E7A", "\u4E7A"], /* CJK Ideograph */ + ["\u4E7B", "\u4E7B"], /* CJK Ideograph */ + ["\u4E7C", "\u4E7C"], /* CJK Ideograph */ + ["\u4E7D", "\u4E7D"], /* CJK Ideograph */ + ["\u4E7E", "\u4E7E"], /* CJK Ideograph */ + ["\u4E7F", "\u4E7F"], /* CJK Ideograph */ + ["\u4E80", "\u4E80"], /* CJK Ideograph */ + ["\u4E81", "\u4E81"], /* CJK Ideograph */ + ["\u4E82", "\u4E82"], /* CJK Ideograph */ + ["\u4E83", "\u4E83"], /* CJK Ideograph */ + ["\u4E84", "\u4E84"], /* CJK Ideograph */ + ["\u4E85", "\u4E85"], /* CJK Ideograph */ + ["\u4E86", "\u4E86"], /* CJK Ideograph */ + ["\u4E87", "\u4E87"], /* CJK Ideograph */ + ["\u4E88", "\u4E88"], /* CJK Ideograph */ + ["\u4E89", "\u4E89"], /* CJK Ideograph */ + ["\u4E8A", "\u4E8A"], /* CJK Ideograph */ + ["\u4E8B", "\u4E8B"], /* CJK Ideograph */ + ["\u4E8C", "\u4E8C"], /* CJK Ideograph */ + ["\u4E8D", "\u4E8D"], /* CJK Ideograph */ + ["\u4E8E", "\u4E8E"], /* CJK Ideograph */ + ["\u4E8F", "\u4E8F"], /* CJK Ideograph */ + ["\u4E90", "\u4E90"], /* CJK Ideograph */ + ["\u4E91", "\u4E91"], /* CJK Ideograph */ + ["\u4E92", "\u4E92"], /* CJK Ideograph */ + ["\u4E93", "\u4E93"], /* CJK Ideograph */ + ["\u4E94", "\u4E94"], /* CJK Ideograph */ + ["\u4E95", "\u4E95"], /* CJK Ideograph */ + ["\u4E96", "\u4E96"], /* CJK Ideograph */ + ["\u4E97", "\u4E97"], /* CJK Ideograph */ + ["\u4E98", "\u4E98"], /* CJK Ideograph */ + ["\u4E99", "\u4E99"], /* CJK Ideograph */ + ["\u4E9A", "\u4E9A"], /* CJK Ideograph */ + ["\u4E9B", "\u4E9B"], /* CJK Ideograph */ + ["\u4E9C", "\u4E9C"], /* CJK Ideograph */ + ["\u4E9D", "\u4E9D"], /* CJK Ideograph */ + ["\u4E9E", "\u4E9E"], /* CJK Ideograph */ + ["\u4E9F", "\u4E9F"], /* CJK Ideograph */ + ["\u4EA0", "\u4EA0"], /* CJK Ideograph */ + ["\u4EA1", "\u4EA1"], /* CJK Ideograph */ + ["\u4EA2", "\u4EA2"], /* CJK Ideograph */ + ["\u4EA3", "\u4EA3"], /* CJK Ideograph */ + ["\u4EA4", "\u4EA4"], /* CJK Ideograph */ + ["\u4EA5", "\u4EA5"], /* CJK Ideograph */ + ["\u4EA6", "\u4EA6"], /* CJK Ideograph */ + ["\u4EA7", "\u4EA7"], /* CJK Ideograph */ + ["\u4EA8", "\u4EA8"], /* CJK Ideograph */ + ["\u4EA9", "\u4EA9"], /* CJK Ideograph */ + ["\u4EAA", "\u4EAA"], /* CJK Ideograph */ + ["\u4EAB", "\u4EAB"], /* CJK Ideograph */ + ["\u4EAC", "\u4EAC"], /* CJK Ideograph */ + ["\u4EAD", "\u4EAD"], /* CJK Ideograph */ + ["\u4EAE", "\u4EAE"], /* CJK Ideograph */ + ["\u4EAF", "\u4EAF"], /* CJK Ideograph */ + ["\u4EB0", "\u4EB0"], /* CJK Ideograph */ + ["\u4EB1", "\u4EB1"], /* CJK Ideograph */ + ["\u4EB2", "\u4EB2"], /* CJK Ideograph */ + ["\u4EB3", "\u4EB3"], /* CJK Ideograph */ + ["\u4EB4", "\u4EB4"], /* CJK Ideograph */ + ["\u4EB5", "\u4EB5"], /* CJK Ideograph */ + ["\u4EB6", "\u4EB6"], /* CJK Ideograph */ + ["\u4EB7", "\u4EB7"], /* CJK Ideograph */ + ["\u4EB8", "\u4EB8"], /* CJK Ideograph */ + ["\u4EB9", "\u4EB9"], /* CJK Ideograph */ + ["\u4EBA", "\u4EBA"], /* CJK Ideograph */ + ["\u4EBB", "\u4EBB"], /* CJK Ideograph */ + ["\u4EBC", "\u4EBC"], /* CJK Ideograph */ + ["\u4EBD", "\u4EBD"], /* CJK Ideograph */ + ["\u4EBE", "\u4EBE"], /* CJK Ideograph */ + ["\u4EBF", "\u4EBF"], /* CJK Ideograph */ + ["\u4EC0", "\u4EC0"], /* CJK Ideograph */ + ["\u4EC1", "\u4EC1"], /* CJK Ideograph */ + ["\u4EC2", "\u4EC2"], /* CJK Ideograph */ + ["\u4EC3", "\u4EC3"], /* CJK Ideograph */ + ["\u4EC4", "\u4EC4"], /* CJK Ideograph */ + ["\u4EC5", "\u4EC5"], /* CJK Ideograph */ + ["\u4EC6", "\u4EC6"], /* CJK Ideograph */ + ["\u4EC7", "\u4EC7"], /* CJK Ideograph */ + ["\u4EC8", "\u4EC8"], /* CJK Ideograph */ + ["\u4EC9", "\u4EC9"], /* CJK Ideograph */ + ["\u4ECA", "\u4ECA"], /* CJK Ideograph */ + ["\u4ECB", "\u4ECB"], /* CJK Ideograph */ + ["\u4ECC", "\u4ECC"], /* CJK Ideograph */ + ["\u4ECD", "\u4ECD"], /* CJK Ideograph */ + ["\u4ECE", "\u4ECE"], /* CJK Ideograph */ + ["\u4ECF", "\u4ECF"], /* CJK Ideograph */ + ["\u4ED0", "\u4ED0"], /* CJK Ideograph */ + ["\u4ED1", "\u4ED1"], /* CJK Ideograph */ + ["\u4ED2", "\u4ED2"], /* CJK Ideograph */ + ["\u4ED3", "\u4ED3"], /* CJK Ideograph */ + ["\u4ED4", "\u4ED4"], /* CJK Ideograph */ + ["\u4ED5", "\u4ED5"], /* CJK Ideograph */ + ["\u4ED6", "\u4ED6"], /* CJK Ideograph */ + ["\u4ED7", "\u4ED7"], /* CJK Ideograph */ + ["\u4ED8", "\u4ED8"], /* CJK Ideograph */ + ["\u4ED9", "\u4ED9"], /* CJK Ideograph */ + ["\u4EDA", "\u4EDA"], /* CJK Ideograph */ + ["\u4EDB", "\u4EDB"], /* CJK Ideograph */ + ["\u4EDC", "\u4EDC"], /* CJK Ideograph */ + ["\u4EDD", "\u4EDD"], /* CJK Ideograph */ + ["\u4EDE", "\u4EDE"], /* CJK Ideograph */ + ["\u4EDF", "\u4EDF"], /* CJK Ideograph */ + ["\u4EE0", "\u4EE0"], /* CJK Ideograph */ + ["\u4EE1", "\u4EE1"], /* CJK Ideograph */ + ["\u4EE2", "\u4EE2"], /* CJK Ideograph */ + ["\u4EE3", "\u4EE3"], /* CJK Ideograph */ + ["\u4EE4", "\u4EE4"], /* CJK Ideograph */ + ["\u4EE5", "\u4EE5"], /* CJK Ideograph */ + ["\u4EE6", "\u4EE6"], /* CJK Ideograph */ + ["\u4EE7", "\u4EE7"], /* CJK Ideograph */ + ["\u4EE8", "\u4EE8"], /* CJK Ideograph */ + ["\u4EE9", "\u4EE9"], /* CJK Ideograph */ + ["\u4EEA", "\u4EEA"], /* CJK Ideograph */ + ["\u4EEB", "\u4EEB"], /* CJK Ideograph */ + ["\u4EEC", "\u4EEC"], /* CJK Ideograph */ + ["\u4EED", "\u4EED"], /* CJK Ideograph */ + ["\u4EEE", "\u4EEE"], /* CJK Ideograph */ + ["\u4EEF", "\u4EEF"], /* CJK Ideograph */ + ["\u4EF0", "\u4EF0"], /* CJK Ideograph */ + ["\u4EF1", "\u4EF1"], /* CJK Ideograph */ + ["\u4EF2", "\u4EF2"], /* CJK Ideograph */ + ["\u4EF3", "\u4EF3"], /* CJK Ideograph */ + ["\u4EF4", "\u4EF4"], /* CJK Ideograph */ + ["\u4EF5", "\u4EF5"], /* CJK Ideograph */ + ["\u4EF6", "\u4EF6"], /* CJK Ideograph */ + ["\u4EF7", "\u4EF7"], /* CJK Ideograph */ + ["\u4EF8", "\u4EF8"], /* CJK Ideograph */ + ["\u4EF9", "\u4EF9"], /* CJK Ideograph */ + ["\u4EFA", "\u4EFA"], /* CJK Ideograph */ + ["\u4EFB", "\u4EFB"], /* CJK Ideograph */ + ["\u4EFC", "\u4EFC"], /* CJK Ideograph */ + ["\u4EFD", "\u4EFD"], /* CJK Ideograph */ + ["\u4EFE", "\u4EFE"], /* CJK Ideograph */ + ["\u4EFF", "\u4EFF"], /* CJK Ideograph */ + ["\u4F00", "\u4F00"], /* CJK Ideograph */ + ["\u4F01", "\u4F01"], /* CJK Ideograph */ + ["\u4F02", "\u4F02"], /* CJK Ideograph */ + ["\u4F03", "\u4F03"], /* CJK Ideograph */ + ["\u4F04", "\u4F04"], /* CJK Ideograph */ + ["\u4F05", "\u4F05"], /* CJK Ideograph */ + ["\u4F06", "\u4F06"], /* CJK Ideograph */ + ["\u4F07", "\u4F07"], /* CJK Ideograph */ + ["\u4F08", "\u4F08"], /* CJK Ideograph */ + ["\u4F09", "\u4F09"], /* CJK Ideograph */ + ["\u4F0A", "\u4F0A"], /* CJK Ideograph */ + ["\u4F0B", "\u4F0B"], /* CJK Ideograph */ + ["\u4F0C", "\u4F0C"], /* CJK Ideograph */ + ["\u4F0D", "\u4F0D"], /* CJK Ideograph */ + ["\u4F0E", "\u4F0E"], /* CJK Ideograph */ + ["\u4F0F", "\u4F0F"], /* CJK Ideograph */ + ["\u4F10", "\u4F10"], /* CJK Ideograph */ + ["\u4F11", "\u4F11"], /* CJK Ideograph */ + ["\u4F12", "\u4F12"], /* CJK Ideograph */ + ["\u4F13", "\u4F13"], /* CJK Ideograph */ + ["\u4F14", "\u4F14"], /* CJK Ideograph */ + ["\u4F15", "\u4F15"], /* CJK Ideograph */ + ["\u4F16", "\u4F16"], /* CJK Ideograph */ + ["\u4F17", "\u4F17"], /* CJK Ideograph */ + ["\u4F18", "\u4F18"], /* CJK Ideograph */ + ["\u4F19", "\u4F19"], /* CJK Ideograph */ + ["\u4F1A", "\u4F1A"], /* CJK Ideograph */ + ["\u4F1B", "\u4F1B"], /* CJK Ideograph */ + ["\u4F1C", "\u4F1C"], /* CJK Ideograph */ + ["\u4F1D", "\u4F1D"], /* CJK Ideograph */ + ["\u4F1E", "\u4F1E"], /* CJK Ideograph */ + ["\u4F1F", "\u4F1F"], /* CJK Ideograph */ + ["\u4F20", "\u4F20"], /* CJK Ideograph */ + ["\u4F21", "\u4F21"], /* CJK Ideograph */ + ["\u4F22", "\u4F22"], /* CJK Ideograph */ + ["\u4F23", "\u4F23"], /* CJK Ideograph */ + ["\u4F24", "\u4F24"], /* CJK Ideograph */ + ["\u4F25", "\u4F25"], /* CJK Ideograph */ + ["\u4F26", "\u4F26"], /* CJK Ideograph */ + ["\u4F27", "\u4F27"], /* CJK Ideograph */ + ["\u4F28", "\u4F28"], /* CJK Ideograph */ + ["\u4F29", "\u4F29"], /* CJK Ideograph */ + ["\u4F2A", "\u4F2A"], /* CJK Ideograph */ + ["\u4F2B", "\u4F2B"], /* CJK Ideograph */ + ["\u4F2C", "\u4F2C"], /* CJK Ideograph */ + ["\u4F2D", "\u4F2D"], /* CJK Ideograph */ + ["\u4F2E", "\u4F2E"], /* CJK Ideograph */ + ["\u4F2F", "\u4F2F"], /* CJK Ideograph */ + ["\u4F30", "\u4F30"], /* CJK Ideograph */ + ["\u4F31", "\u4F31"], /* CJK Ideograph */ + ["\u4F32", "\u4F32"], /* CJK Ideograph */ + ["\u4F33", "\u4F33"], /* CJK Ideograph */ + ["\u4F34", "\u4F34"], /* CJK Ideograph */ + ["\u4F35", "\u4F35"], /* CJK Ideograph */ + ["\u4F36", "\u4F36"], /* CJK Ideograph */ + ["\u4F37", "\u4F37"], /* CJK Ideograph */ + ["\u4F38", "\u4F38"], /* CJK Ideograph */ + ["\u4F39", "\u4F39"], /* CJK Ideograph */ + ["\u4F3A", "\u4F3A"], /* CJK Ideograph */ + ["\u4F3B", "\u4F3B"], /* CJK Ideograph */ + ["\u4F3C", "\u4F3C"], /* CJK Ideograph */ + ["\u4F3D", "\u4F3D"], /* CJK Ideograph */ + ["\u4F3E", "\u4F3E"], /* CJK Ideograph */ + ["\u4F3F", "\u4F3F"], /* CJK Ideograph */ + ["\u4F40", "\u4F40"], /* CJK Ideograph */ + ["\u4F41", "\u4F41"], /* CJK Ideograph */ + ["\u4F42", "\u4F42"], /* CJK Ideograph */ + ["\u4F43", "\u4F43"], /* CJK Ideograph */ + ["\u4F44", "\u4F44"], /* CJK Ideograph */ + ["\u4F45", "\u4F45"], /* CJK Ideograph */ + ["\u4F46", "\u4F46"], /* CJK Ideograph */ + ["\u4F47", "\u4F47"], /* CJK Ideograph */ + ["\u4F48", "\u4F48"], /* CJK Ideograph */ + ["\u4F49", "\u4F49"], /* CJK Ideograph */ + ["\u4F4A", "\u4F4A"], /* CJK Ideograph */ + ["\u4F4B", "\u4F4B"], /* CJK Ideograph */ + ["\u4F4C", "\u4F4C"], /* CJK Ideograph */ + ["\u4F4D", "\u4F4D"], /* CJK Ideograph */ + ["\u4F4E", "\u4F4E"], /* CJK Ideograph */ + ["\u4F4F", "\u4F4F"], /* CJK Ideograph */ + ["\u4F50", "\u4F50"], /* CJK Ideograph */ + ["\u4F51", "\u4F51"], /* CJK Ideograph */ + ["\u4F52", "\u4F52"], /* CJK Ideograph */ + ["\u4F53", "\u4F53"], /* CJK Ideograph */ + ["\u4F54", "\u4F54"], /* CJK Ideograph */ + ["\u4F55", "\u4F55"], /* CJK Ideograph */ + ["\u4F56", "\u4F56"], /* CJK Ideograph */ + ["\u4F57", "\u4F57"], /* CJK Ideograph */ + ["\u4F58", "\u4F58"], /* CJK Ideograph */ + ["\u4F59", "\u4F59"], /* CJK Ideograph */ + ["\u4F5A", "\u4F5A"], /* CJK Ideograph */ + ["\u4F5B", "\u4F5B"], /* CJK Ideograph */ + ["\u4F5C", "\u4F5C"], /* CJK Ideograph */ + ["\u4F5D", "\u4F5D"], /* CJK Ideograph */ + ["\u4F5E", "\u4F5E"], /* CJK Ideograph */ + ["\u4F5F", "\u4F5F"], /* CJK Ideograph */ + ["\u4F60", "\u4F60"], /* CJK Ideograph */ + ["\u4F61", "\u4F61"], /* CJK Ideograph */ + ["\u4F62", "\u4F62"], /* CJK Ideograph */ + ["\u4F63", "\u4F63"], /* CJK Ideograph */ + ["\u4F64", "\u4F64"], /* CJK Ideograph */ + ["\u4F65", "\u4F65"], /* CJK Ideograph */ + ["\u4F66", "\u4F66"], /* CJK Ideograph */ + ["\u4F67", "\u4F67"], /* CJK Ideograph */ + ["\u4F68", "\u4F68"], /* CJK Ideograph */ + ["\u4F69", "\u4F69"], /* CJK Ideograph */ + ["\u4F6A", "\u4F6A"], /* CJK Ideograph */ + ["\u4F6B", "\u4F6B"], /* CJK Ideograph */ + ["\u4F6C", "\u4F6C"], /* CJK Ideograph */ + ["\u4F6D", "\u4F6D"], /* CJK Ideograph */ + ["\u4F6E", "\u4F6E"], /* CJK Ideograph */ + ["\u4F6F", "\u4F6F"], /* CJK Ideograph */ + ["\u4F70", "\u4F70"], /* CJK Ideograph */ + ["\u4F71", "\u4F71"], /* CJK Ideograph */ + ["\u4F72", "\u4F72"], /* CJK Ideograph */ + ["\u4F73", "\u4F73"], /* CJK Ideograph */ + ["\u4F74", "\u4F74"], /* CJK Ideograph */ + ["\u4F75", "\u4F75"], /* CJK Ideograph */ + ["\u4F76", "\u4F76"], /* CJK Ideograph */ + ["\u4F77", "\u4F77"], /* CJK Ideograph */ + ["\u4F78", "\u4F78"], /* CJK Ideograph */ + ["\u4F79", "\u4F79"], /* CJK Ideograph */ + ["\u4F7A", "\u4F7A"], /* CJK Ideograph */ + ["\u4F7B", "\u4F7B"], /* CJK Ideograph */ + ["\u4F7C", "\u4F7C"], /* CJK Ideograph */ + ["\u4F7D", "\u4F7D"], /* CJK Ideograph */ + ["\u4F7E", "\u4F7E"], /* CJK Ideograph */ + ["\u4F7F", "\u4F7F"], /* CJK Ideograph */ + ["\u4F80", "\u4F80"], /* CJK Ideograph */ + ["\u4F81", "\u4F81"], /* CJK Ideograph */ + ["\u4F82", "\u4F82"], /* CJK Ideograph */ + ["\u4F83", "\u4F83"], /* CJK Ideograph */ + ["\u4F84", "\u4F84"], /* CJK Ideograph */ + ["\u4F85", "\u4F85"], /* CJK Ideograph */ + ["\u4F86", "\u4F86"], /* CJK Ideograph */ + ["\u4F87", "\u4F87"], /* CJK Ideograph */ + ["\u4F88", "\u4F88"], /* CJK Ideograph */ + ["\u4F89", "\u4F89"], /* CJK Ideograph */ + ["\u4F8A", "\u4F8A"], /* CJK Ideograph */ + ["\u4F8B", "\u4F8B"], /* CJK Ideograph */ + ["\u4F8C", "\u4F8C"], /* CJK Ideograph */ + ["\u4F8D", "\u4F8D"], /* CJK Ideograph */ + ["\u4F8E", "\u4F8E"], /* CJK Ideograph */ + ["\u4F8F", "\u4F8F"], /* CJK Ideograph */ + ["\u4F90", "\u4F90"], /* CJK Ideograph */ + ["\u4F91", "\u4F91"], /* CJK Ideograph */ + ["\u4F92", "\u4F92"], /* CJK Ideograph */ + ["\u4F93", "\u4F93"], /* CJK Ideograph */ + ["\u4F94", "\u4F94"], /* CJK Ideograph */ + ["\u4F95", "\u4F95"], /* CJK Ideograph */ + ["\u4F96", "\u4F96"], /* CJK Ideograph */ + ["\u4F97", "\u4F97"], /* CJK Ideograph */ + ["\u4F98", "\u4F98"], /* CJK Ideograph */ + ["\u4F99", "\u4F99"], /* CJK Ideograph */ + ["\u4F9A", "\u4F9A"], /* CJK Ideograph */ + ["\u4F9B", "\u4F9B"], /* CJK Ideograph */ + ["\u4F9C", "\u4F9C"], /* CJK Ideograph */ + ["\u4F9D", "\u4F9D"], /* CJK Ideograph */ + ["\u4F9E", "\u4F9E"], /* CJK Ideograph */ + ["\u4F9F", "\u4F9F"], /* CJK Ideograph */ + ["\u4FA0", "\u4FA0"], /* CJK Ideograph */ + ["\u4FA1", "\u4FA1"], /* CJK Ideograph */ + ["\u4FA2", "\u4FA2"], /* CJK Ideograph */ + ["\u4FA3", "\u4FA3"], /* CJK Ideograph */ + ["\u4FA4", "\u4FA4"], /* CJK Ideograph */ + ["\u4FA5", "\u4FA5"], /* CJK Ideograph */ + ["\u4FA6", "\u4FA6"], /* CJK Ideograph */ + ["\u4FA7", "\u4FA7"], /* CJK Ideograph */ + ["\u4FA8", "\u4FA8"], /* CJK Ideograph */ + ["\u4FA9", "\u4FA9"], /* CJK Ideograph */ + ["\u4FAA", "\u4FAA"], /* CJK Ideograph */ + ["\u4FAB", "\u4FAB"], /* CJK Ideograph */ + ["\u4FAC", "\u4FAC"], /* CJK Ideograph */ + ["\u4FAD", "\u4FAD"], /* CJK Ideograph */ + ["\u4FAE", "\u4FAE"], /* CJK Ideograph */ + ["\u4FAF", "\u4FAF"], /* CJK Ideograph */ + ["\u4FB0", "\u4FB0"], /* CJK Ideograph */ + ["\u4FB1", "\u4FB1"], /* CJK Ideograph */ + ["\u4FB2", "\u4FB2"], /* CJK Ideograph */ + ["\u4FB3", "\u4FB3"], /* CJK Ideograph */ + ["\u4FB4", "\u4FB4"], /* CJK Ideograph */ + ["\u4FB5", "\u4FB5"], /* CJK Ideograph */ + ["\u4FB6", "\u4FB6"], /* CJK Ideograph */ + ["\u4FB7", "\u4FB7"], /* CJK Ideograph */ + ["\u4FB8", "\u4FB8"], /* CJK Ideograph */ + ["\u4FB9", "\u4FB9"], /* CJK Ideograph */ + ["\u4FBA", "\u4FBA"], /* CJK Ideograph */ + ["\u4FBB", "\u4FBB"], /* CJK Ideograph */ + ["\u4FBC", "\u4FBC"], /* CJK Ideograph */ + ["\u4FBD", "\u4FBD"], /* CJK Ideograph */ + ["\u4FBE", "\u4FBE"], /* CJK Ideograph */ + ["\u4FBF", "\u4FBF"], /* CJK Ideograph */ + ["\u4FC0", "\u4FC0"], /* CJK Ideograph */ + ["\u4FC1", "\u4FC1"], /* CJK Ideograph */ + ["\u4FC2", "\u4FC2"], /* CJK Ideograph */ + ["\u4FC3", "\u4FC3"], /* CJK Ideograph */ + ["\u4FC4", "\u4FC4"], /* CJK Ideograph */ + ["\u4FC5", "\u4FC5"], /* CJK Ideograph */ + ["\u4FC6", "\u4FC6"], /* CJK Ideograph */ + ["\u4FC7", "\u4FC7"], /* CJK Ideograph */ + ["\u4FC8", "\u4FC8"], /* CJK Ideograph */ + ["\u4FC9", "\u4FC9"], /* CJK Ideograph */ + ["\u4FCA", "\u4FCA"], /* CJK Ideograph */ + ["\u4FCB", "\u4FCB"], /* CJK Ideograph */ + ["\u4FCC", "\u4FCC"], /* CJK Ideograph */ + ["\u4FCD", "\u4FCD"], /* CJK Ideograph */ + ["\u4FCE", "\u4FCE"], /* CJK Ideograph */ + ["\u4FCF", "\u4FCF"], /* CJK Ideograph */ + ["\u4FD0", "\u4FD0"], /* CJK Ideograph */ + ["\u4FD1", "\u4FD1"], /* CJK Ideograph */ + ["\u4FD2", "\u4FD2"], /* CJK Ideograph */ + ["\u4FD3", "\u4FD3"], /* CJK Ideograph */ + ["\u4FD4", "\u4FD4"], /* CJK Ideograph */ + ["\u4FD5", "\u4FD5"], /* CJK Ideograph */ + ["\u4FD6", "\u4FD6"], /* CJK Ideograph */ + ["\u4FD7", "\u4FD7"], /* CJK Ideograph */ + ["\u4FD8", "\u4FD8"], /* CJK Ideograph */ + ["\u4FD9", "\u4FD9"], /* CJK Ideograph */ + ["\u4FDA", "\u4FDA"], /* CJK Ideograph */ + ["\u4FDB", "\u4FDB"], /* CJK Ideograph */ + ["\u4FDC", "\u4FDC"], /* CJK Ideograph */ + ["\u4FDD", "\u4FDD"], /* CJK Ideograph */ + ["\u4FDE", "\u4FDE"], /* CJK Ideograph */ + ["\u4FDF", "\u4FDF"], /* CJK Ideograph */ + ["\u4FE0", "\u4FE0"], /* CJK Ideograph */ + ["\u4FE1", "\u4FE1"], /* CJK Ideograph */ + ["\u4FE2", "\u4FE2"], /* CJK Ideograph */ + ["\u4FE3", "\u4FE3"], /* CJK Ideograph */ + ["\u4FE4", "\u4FE4"], /* CJK Ideograph */ + ["\u4FE5", "\u4FE5"], /* CJK Ideograph */ + ["\u4FE6", "\u4FE6"], /* CJK Ideograph */ + ["\u4FE7", "\u4FE7"], /* CJK Ideograph */ + ["\u4FE8", "\u4FE8"], /* CJK Ideograph */ + ["\u4FE9", "\u4FE9"], /* CJK Ideograph */ + ["\u4FEA", "\u4FEA"], /* CJK Ideograph */ + ["\u4FEB", "\u4FEB"], /* CJK Ideograph */ + ["\u4FEC", "\u4FEC"], /* CJK Ideograph */ + ["\u4FED", "\u4FED"], /* CJK Ideograph */ + ["\u4FEE", "\u4FEE"], /* CJK Ideograph */ + ["\u4FEF", "\u4FEF"], /* CJK Ideograph */ + ["\u4FF0", "\u4FF0"], /* CJK Ideograph */ + ["\u4FF1", "\u4FF1"], /* CJK Ideograph */ + ["\u4FF2", "\u4FF2"], /* CJK Ideograph */ + ["\u4FF3", "\u4FF3"], /* CJK Ideograph */ + ["\u4FF4", "\u4FF4"], /* CJK Ideograph */ + ["\u4FF5", "\u4FF5"], /* CJK Ideograph */ + ["\u4FF6", "\u4FF6"], /* CJK Ideograph */ + ["\u4FF7", "\u4FF7"], /* CJK Ideograph */ + ["\u4FF8", "\u4FF8"], /* CJK Ideograph */ + ["\u4FF9", "\u4FF9"], /* CJK Ideograph */ + ["\u4FFA", "\u4FFA"], /* CJK Ideograph */ + ["\u4FFB", "\u4FFB"], /* CJK Ideograph */ + ["\u4FFC", "\u4FFC"], /* CJK Ideograph */ + ["\u4FFD", "\u4FFD"], /* CJK Ideograph */ + ["\u4FFE", "\u4FFE"], /* CJK Ideograph */ + ["\u4FFF", "\u4FFF"], /* CJK Ideograph */ + ["\u5000", "\u5000"], /* CJK Ideograph */ + ["\u5001", "\u5001"], /* CJK Ideograph */ + ["\u5002", "\u5002"], /* CJK Ideograph */ + ["\u5003", "\u5003"], /* CJK Ideograph */ + ["\u5004", "\u5004"], /* CJK Ideograph */ + ["\u5005", "\u5005"], /* CJK Ideograph */ + ["\u5006", "\u5006"], /* CJK Ideograph */ + ["\u5007", "\u5007"], /* CJK Ideograph */ + ["\u5008", "\u5008"], /* CJK Ideograph */ + ["\u5009", "\u5009"], /* CJK Ideograph */ + ["\u500A", "\u500A"], /* CJK Ideograph */ + ["\u500B", "\u500B"], /* CJK Ideograph */ + ["\u500C", "\u500C"], /* CJK Ideograph */ + ["\u500D", "\u500D"], /* CJK Ideograph */ + ["\u500E", "\u500E"], /* CJK Ideograph */ + ["\u500F", "\u500F"], /* CJK Ideograph */ + ["\u5010", "\u5010"], /* CJK Ideograph */ + ["\u5011", "\u5011"], /* CJK Ideograph */ + ["\u5012", "\u5012"], /* CJK Ideograph */ + ["\u5013", "\u5013"], /* CJK Ideograph */ + ["\u5014", "\u5014"], /* CJK Ideograph */ + ["\u5015", "\u5015"], /* CJK Ideograph */ + ["\u5016", "\u5016"], /* CJK Ideograph */ + ["\u5017", "\u5017"], /* CJK Ideograph */ + ["\u5018", "\u5018"], /* CJK Ideograph */ + ["\u5019", "\u5019"], /* CJK Ideograph */ + ["\u501A", "\u501A"], /* CJK Ideograph */ + ["\u501B", "\u501B"], /* CJK Ideograph */ + ["\u501C", "\u501C"], /* CJK Ideograph */ + ["\u501D", "\u501D"], /* CJK Ideograph */ + ["\u501E", "\u501E"], /* CJK Ideograph */ + ["\u501F", "\u501F"], /* CJK Ideograph */ + ["\u5020", "\u5020"], /* CJK Ideograph */ + ["\u5021", "\u5021"], /* CJK Ideograph */ + ["\u5022", "\u5022"], /* CJK Ideograph */ + ["\u5023", "\u5023"], /* CJK Ideograph */ + ["\u5024", "\u5024"], /* CJK Ideograph */ + ["\u5025", "\u5025"], /* CJK Ideograph */ + ["\u5026", "\u5026"], /* CJK Ideograph */ + ["\u5027", "\u5027"], /* CJK Ideograph */ + ["\u5028", "\u5028"], /* CJK Ideograph */ + ["\u5029", "\u5029"], /* CJK Ideograph */ + ["\u502A", "\u502A"], /* CJK Ideograph */ + ["\u502B", "\u502B"], /* CJK Ideograph */ + ["\u502C", "\u502C"], /* CJK Ideograph */ + ["\u502D", "\u502D"], /* CJK Ideograph */ + ["\u502E", "\u502E"], /* CJK Ideograph */ + ["\u502F", "\u502F"], /* CJK Ideograph */ + ["\u5030", "\u5030"], /* CJK Ideograph */ + ["\u5031", "\u5031"], /* CJK Ideograph */ + ["\u5032", "\u5032"], /* CJK Ideograph */ + ["\u5033", "\u5033"], /* CJK Ideograph */ + ["\u5034", "\u5034"], /* CJK Ideograph */ + ["\u5035", "\u5035"], /* CJK Ideograph */ + ["\u5036", "\u5036"], /* CJK Ideograph */ + ["\u5037", "\u5037"], /* CJK Ideograph */ + ["\u5038", "\u5038"], /* CJK Ideograph */ + ["\u5039", "\u5039"], /* CJK Ideograph */ + ["\u503A", "\u503A"], /* CJK Ideograph */ + ["\u503B", "\u503B"], /* CJK Ideograph */ + ["\u503C", "\u503C"], /* CJK Ideograph */ + ["\u503D", "\u503D"], /* CJK Ideograph */ + ["\u503E", "\u503E"], /* CJK Ideograph */ + ["\u503F", "\u503F"], /* CJK Ideograph */ + ["\u5040", "\u5040"], /* CJK Ideograph */ + ["\u5041", "\u5041"], /* CJK Ideograph */ + ["\u5042", "\u5042"], /* CJK Ideograph */ + ["\u5043", "\u5043"], /* CJK Ideograph */ + ["\u5044", "\u5044"], /* CJK Ideograph */ + ["\u5045", "\u5045"], /* CJK Ideograph */ + ["\u5046", "\u5046"], /* CJK Ideograph */ + ["\u5047", "\u5047"], /* CJK Ideograph */ + ["\u5048", "\u5048"], /* CJK Ideograph */ + ["\u5049", "\u5049"], /* CJK Ideograph */ + ["\u504A", "\u504A"], /* CJK Ideograph */ + ["\u504B", "\u504B"], /* CJK Ideograph */ + ["\u504C", "\u504C"], /* CJK Ideograph */ + ["\u504D", "\u504D"], /* CJK Ideograph */ + ["\u504E", "\u504E"], /* CJK Ideograph */ + ["\u504F", "\u504F"], /* CJK Ideograph */ + ["\u5050", "\u5050"], /* CJK Ideograph */ + ["\u5051", "\u5051"], /* CJK Ideograph */ + ["\u5052", "\u5052"], /* CJK Ideograph */ + ["\u5053", "\u5053"], /* CJK Ideograph */ + ["\u5054", "\u5054"], /* CJK Ideograph */ + ["\u5055", "\u5055"], /* CJK Ideograph */ + ["\u5056", "\u5056"], /* CJK Ideograph */ + ["\u5057", "\u5057"], /* CJK Ideograph */ + ["\u5058", "\u5058"], /* CJK Ideograph */ + ["\u5059", "\u5059"], /* CJK Ideograph */ + ["\u505A", "\u505A"], /* CJK Ideograph */ + ["\u505B", "\u505B"], /* CJK Ideograph */ + ["\u505C", "\u505C"], /* CJK Ideograph */ + ["\u505D", "\u505D"], /* CJK Ideograph */ + ["\u505E", "\u505E"], /* CJK Ideograph */ + ["\u505F", "\u505F"], /* CJK Ideograph */ + ["\u5060", "\u5060"], /* CJK Ideograph */ + ["\u5061", "\u5061"], /* CJK Ideograph */ + ["\u5062", "\u5062"], /* CJK Ideograph */ + ["\u5063", "\u5063"], /* CJK Ideograph */ + ["\u5064", "\u5064"], /* CJK Ideograph */ + ["\u5065", "\u5065"], /* CJK Ideograph */ + ["\u5066", "\u5066"], /* CJK Ideograph */ + ["\u5067", "\u5067"], /* CJK Ideograph */ + ["\u5068", "\u5068"], /* CJK Ideograph */ + ["\u5069", "\u5069"], /* CJK Ideograph */ + ["\u506A", "\u506A"], /* CJK Ideograph */ + ["\u506B", "\u506B"], /* CJK Ideograph */ + ["\u506C", "\u506C"], /* CJK Ideograph */ + ["\u506D", "\u506D"], /* CJK Ideograph */ + ["\u506E", "\u506E"], /* CJK Ideograph */ + ["\u506F", "\u506F"], /* CJK Ideograph */ + ["\u5070", "\u5070"], /* CJK Ideograph */ + ["\u5071", "\u5071"], /* CJK Ideograph */ + ["\u5072", "\u5072"], /* CJK Ideograph */ + ["\u5073", "\u5073"], /* CJK Ideograph */ + ["\u5074", "\u5074"], /* CJK Ideograph */ + ["\u5075", "\u5075"], /* CJK Ideograph */ + ["\u5076", "\u5076"], /* CJK Ideograph */ + ["\u5077", "\u5077"], /* CJK Ideograph */ + ["\u5078", "\u5078"], /* CJK Ideograph */ + ["\u5079", "\u5079"], /* CJK Ideograph */ + ["\u507A", "\u507A"], /* CJK Ideograph */ + ["\u507B", "\u507B"], /* CJK Ideograph */ + ["\u507C", "\u507C"], /* CJK Ideograph */ + ["\u507D", "\u507D"], /* CJK Ideograph */ + ["\u507E", "\u507E"], /* CJK Ideograph */ + ["\u507F", "\u507F"], /* CJK Ideograph */ + ["\u5080", "\u5080"], /* CJK Ideograph */ + ["\u5081", "\u5081"], /* CJK Ideograph */ + ["\u5082", "\u5082"], /* CJK Ideograph */ + ["\u5083", "\u5083"], /* CJK Ideograph */ + ["\u5084", "\u5084"], /* CJK Ideograph */ + ["\u5085", "\u5085"], /* CJK Ideograph */ + ["\u5086", "\u5086"], /* CJK Ideograph */ + ["\u5087", "\u5087"], /* CJK Ideograph */ + ["\u5088", "\u5088"], /* CJK Ideograph */ + ["\u5089", "\u5089"], /* CJK Ideograph */ + ["\u508A", "\u508A"], /* CJK Ideograph */ + ["\u508B", "\u508B"], /* CJK Ideograph */ + ["\u508C", "\u508C"], /* CJK Ideograph */ + ["\u508D", "\u508D"], /* CJK Ideograph */ + ["\u508E", "\u508E"], /* CJK Ideograph */ + ["\u508F", "\u508F"], /* CJK Ideograph */ + ["\u5090", "\u5090"], /* CJK Ideograph */ + ["\u5091", "\u5091"], /* CJK Ideograph */ + ["\u5092", "\u5092"], /* CJK Ideograph */ + ["\u5093", "\u5093"], /* CJK Ideograph */ + ["\u5094", "\u5094"], /* CJK Ideograph */ + ["\u5095", "\u5095"], /* CJK Ideograph */ + ["\u5096", "\u5096"], /* CJK Ideograph */ + ["\u5097", "\u5097"], /* CJK Ideograph */ + ["\u5098", "\u5098"], /* CJK Ideograph */ + ["\u5099", "\u5099"], /* CJK Ideograph */ + ["\u509A", "\u509A"], /* CJK Ideograph */ + ["\u509B", "\u509B"], /* CJK Ideograph */ + ["\u509C", "\u509C"], /* CJK Ideograph */ + ["\u509D", "\u509D"], /* CJK Ideograph */ + ["\u509E", "\u509E"], /* CJK Ideograph */ + ["\u509F", "\u509F"], /* CJK Ideograph */ + ["\u50A0", "\u50A0"], /* CJK Ideograph */ + ["\u50A1", "\u50A1"], /* CJK Ideograph */ + ["\u50A2", "\u50A2"], /* CJK Ideograph */ + ["\u50A3", "\u50A3"], /* CJK Ideograph */ + ["\u50A4", "\u50A4"], /* CJK Ideograph */ + ["\u50A5", "\u50A5"], /* CJK Ideograph */ + ["\u50A6", "\u50A6"], /* CJK Ideograph */ + ["\u50A7", "\u50A7"], /* CJK Ideograph */ + ["\u50A8", "\u50A8"], /* CJK Ideograph */ + ["\u50A9", "\u50A9"], /* CJK Ideograph */ + ["\u50AA", "\u50AA"], /* CJK Ideograph */ + ["\u50AB", "\u50AB"], /* CJK Ideograph */ + ["\u50AC", "\u50AC"], /* CJK Ideograph */ + ["\u50AD", "\u50AD"], /* CJK Ideograph */ + ["\u50AE", "\u50AE"], /* CJK Ideograph */ + ["\u50AF", "\u50AF"], /* CJK Ideograph */ + ["\u50B0", "\u50B0"], /* CJK Ideograph */ + ["\u50B1", "\u50B1"], /* CJK Ideograph */ + ["\u50B2", "\u50B2"], /* CJK Ideograph */ + ["\u50B3", "\u50B3"], /* CJK Ideograph */ + ["\u50B4", "\u50B4"], /* CJK Ideograph */ + ["\u50B5", "\u50B5"], /* CJK Ideograph */ + ["\u50B6", "\u50B6"], /* CJK Ideograph */ + ["\u50B7", "\u50B7"], /* CJK Ideograph */ + ["\u50B8", "\u50B8"], /* CJK Ideograph */ + ["\u50B9", "\u50B9"], /* CJK Ideograph */ + ["\u50BA", "\u50BA"], /* CJK Ideograph */ + ["\u50BB", "\u50BB"], /* CJK Ideograph */ + ["\u50BC", "\u50BC"], /* CJK Ideograph */ + ["\u50BD", "\u50BD"], /* CJK Ideograph */ + ["\u50BE", "\u50BE"], /* CJK Ideograph */ + ["\u50BF", "\u50BF"], /* CJK Ideograph */ + ["\u50C0", "\u50C0"], /* CJK Ideograph */ + ["\u50C1", "\u50C1"], /* CJK Ideograph */ + ["\u50C2", "\u50C2"], /* CJK Ideograph */ + ["\u50C3", "\u50C3"], /* CJK Ideograph */ + ["\u50C4", "\u50C4"], /* CJK Ideograph */ + ["\u50C5", "\u50C5"], /* CJK Ideograph */ + ["\u50C6", "\u50C6"], /* CJK Ideograph */ + ["\u50C7", "\u50C7"], /* CJK Ideograph */ + ["\u50C8", "\u50C8"], /* CJK Ideograph */ + ["\u50C9", "\u50C9"], /* CJK Ideograph */ + ["\u50CA", "\u50CA"], /* CJK Ideograph */ + ["\u50CB", "\u50CB"], /* CJK Ideograph */ + ["\u50CC", "\u50CC"], /* CJK Ideograph */ + ["\u50CD", "\u50CD"], /* CJK Ideograph */ + ["\u50CE", "\u50CE"], /* CJK Ideograph */ + ["\u50CF", "\u50CF"], /* CJK Ideograph */ + ["\u50D0", "\u50D0"], /* CJK Ideograph */ + ["\u50D1", "\u50D1"], /* CJK Ideograph */ + ["\u50D2", "\u50D2"], /* CJK Ideograph */ + ["\u50D3", "\u50D3"], /* CJK Ideograph */ + ["\u50D4", "\u50D4"], /* CJK Ideograph */ + ["\u50D5", "\u50D5"], /* CJK Ideograph */ + ["\u50D6", "\u50D6"], /* CJK Ideograph */ + ["\u50D7", "\u50D7"], /* CJK Ideograph */ + ["\u50D8", "\u50D8"], /* CJK Ideograph */ + ["\u50D9", "\u50D9"], /* CJK Ideograph */ + ["\u50DA", "\u50DA"], /* CJK Ideograph */ + ["\u50DB", "\u50DB"], /* CJK Ideograph */ + ["\u50DC", "\u50DC"], /* CJK Ideograph */ + ["\u50DD", "\u50DD"], /* CJK Ideograph */ + ["\u50DE", "\u50DE"], /* CJK Ideograph */ + ["\u50DF", "\u50DF"], /* CJK Ideograph */ + ["\u50E0", "\u50E0"], /* CJK Ideograph */ + ["\u50E1", "\u50E1"], /* CJK Ideograph */ + ["\u50E2", "\u50E2"], /* CJK Ideograph */ + ["\u50E3", "\u50E3"], /* CJK Ideograph */ + ["\u50E4", "\u50E4"], /* CJK Ideograph */ + ["\u50E5", "\u50E5"], /* CJK Ideograph */ + ["\u50E6", "\u50E6"], /* CJK Ideograph */ + ["\u50E7", "\u50E7"], /* CJK Ideograph */ + ["\u50E8", "\u50E8"], /* CJK Ideograph */ + ["\u50E9", "\u50E9"], /* CJK Ideograph */ + ["\u50EA", "\u50EA"], /* CJK Ideograph */ + ["\u50EB", "\u50EB"], /* CJK Ideograph */ + ["\u50EC", "\u50EC"], /* CJK Ideograph */ + ["\u50ED", "\u50ED"], /* CJK Ideograph */ + ["\u50EE", "\u50EE"], /* CJK Ideograph */ + ["\u50EF", "\u50EF"], /* CJK Ideograph */ + ["\u50F0", "\u50F0"], /* CJK Ideograph */ + ["\u50F1", "\u50F1"], /* CJK Ideograph */ + ["\u50F2", "\u50F2"], /* CJK Ideograph */ + ["\u50F3", "\u50F3"], /* CJK Ideograph */ + ["\u50F4", "\u50F4"], /* CJK Ideograph */ + ["\u50F5", "\u50F5"], /* CJK Ideograph */ + ["\u50F6", "\u50F6"], /* CJK Ideograph */ + ["\u50F7", "\u50F7"], /* CJK Ideograph */ + ["\u50F8", "\u50F8"], /* CJK Ideograph */ + ["\u50F9", "\u50F9"], /* CJK Ideograph */ + ["\u50FA", "\u50FA"], /* CJK Ideograph */ + ["\u50FB", "\u50FB"], /* CJK Ideograph */ + ["\u50FC", "\u50FC"], /* CJK Ideograph */ + ["\u50FD", "\u50FD"], /* CJK Ideograph */ + ["\u50FE", "\u50FE"], /* CJK Ideograph */ + ["\u50FF", "\u50FF"], /* CJK Ideograph */ + ["\u5100", "\u5100"], /* CJK Ideograph */ + ["\u5101", "\u5101"], /* CJK Ideograph */ + ["\u5102", "\u5102"], /* CJK Ideograph */ + ["\u5103", "\u5103"], /* CJK Ideograph */ + ["\u5104", "\u5104"], /* CJK Ideograph */ + ["\u5105", "\u5105"], /* CJK Ideograph */ + ["\u5106", "\u5106"], /* CJK Ideograph */ + ["\u5107", "\u5107"], /* CJK Ideograph */ + ["\u5108", "\u5108"], /* CJK Ideograph */ + ["\u5109", "\u5109"], /* CJK Ideograph */ + ["\u510A", "\u510A"], /* CJK Ideograph */ + ["\u510B", "\u510B"], /* CJK Ideograph */ + ["\u510C", "\u510C"], /* CJK Ideograph */ + ["\u510D", "\u510D"], /* CJK Ideograph */ + ["\u510E", "\u510E"], /* CJK Ideograph */ + ["\u510F", "\u510F"], /* CJK Ideograph */ + ["\u5110", "\u5110"], /* CJK Ideograph */ + ["\u5111", "\u5111"], /* CJK Ideograph */ + ["\u5112", "\u5112"], /* CJK Ideograph */ + ["\u5113", "\u5113"], /* CJK Ideograph */ + ["\u5114", "\u5114"], /* CJK Ideograph */ + ["\u5115", "\u5115"], /* CJK Ideograph */ + ["\u5116", "\u5116"], /* CJK Ideograph */ + ["\u5117", "\u5117"], /* CJK Ideograph */ + ["\u5118", "\u5118"], /* CJK Ideograph */ + ["\u5119", "\u5119"], /* CJK Ideograph */ + ["\u511A", "\u511A"], /* CJK Ideograph */ + ["\u511B", "\u511B"], /* CJK Ideograph */ + ["\u511C", "\u511C"], /* CJK Ideograph */ + ["\u511D", "\u511D"], /* CJK Ideograph */ + ["\u511E", "\u511E"], /* CJK Ideograph */ + ["\u511F", "\u511F"], /* CJK Ideograph */ + ["\u5120", "\u5120"], /* CJK Ideograph */ + ["\u5121", "\u5121"], /* CJK Ideograph */ + ["\u5122", "\u5122"], /* CJK Ideograph */ + ["\u5123", "\u5123"], /* CJK Ideograph */ + ["\u5124", "\u5124"], /* CJK Ideograph */ + ["\u5125", "\u5125"], /* CJK Ideograph */ + ["\u5126", "\u5126"], /* CJK Ideograph */ + ["\u5127", "\u5127"], /* CJK Ideograph */ + ["\u5128", "\u5128"], /* CJK Ideograph */ + ["\u5129", "\u5129"], /* CJK Ideograph */ + ["\u512A", "\u512A"], /* CJK Ideograph */ + ["\u512B", "\u512B"], /* CJK Ideograph */ + ["\u512C", "\u512C"], /* CJK Ideograph */ + ["\u512D", "\u512D"], /* CJK Ideograph */ + ["\u512E", "\u512E"], /* CJK Ideograph */ + ["\u512F", "\u512F"], /* CJK Ideograph */ + ["\u5130", "\u5130"], /* CJK Ideograph */ + ["\u5131", "\u5131"], /* CJK Ideograph */ + ["\u5132", "\u5132"], /* CJK Ideograph */ + ["\u5133", "\u5133"], /* CJK Ideograph */ + ["\u5134", "\u5134"], /* CJK Ideograph */ + ["\u5135", "\u5135"], /* CJK Ideograph */ + ["\u5136", "\u5136"], /* CJK Ideograph */ + ["\u5137", "\u5137"], /* CJK Ideograph */ + ["\u5138", "\u5138"], /* CJK Ideograph */ + ["\u5139", "\u5139"], /* CJK Ideograph */ + ["\u513A", "\u513A"], /* CJK Ideograph */ + ["\u513B", "\u513B"], /* CJK Ideograph */ + ["\u513C", "\u513C"], /* CJK Ideograph */ + ["\u513D", "\u513D"], /* CJK Ideograph */ + ["\u513E", "\u513E"], /* CJK Ideograph */ + ["\u513F", "\u513F"], /* CJK Ideograph */ + ["\u5140", "\u5140"], /* CJK Ideograph */ + ["\u5141", "\u5141"], /* CJK Ideograph */ + ["\u5142", "\u5142"], /* CJK Ideograph */ + ["\u5143", "\u5143"], /* CJK Ideograph */ + ["\u5144", "\u5144"], /* CJK Ideograph */ + ["\u5145", "\u5145"], /* CJK Ideograph */ + ["\u5146", "\u5146"], /* CJK Ideograph */ + ["\u5147", "\u5147"], /* CJK Ideograph */ + ["\u5148", "\u5148"], /* CJK Ideograph */ + ["\u5149", "\u5149"], /* CJK Ideograph */ + ["\u514A", "\u514A"], /* CJK Ideograph */ + ["\u514B", "\u514B"], /* CJK Ideograph */ + ["\u514C", "\u514C"], /* CJK Ideograph */ + ["\u514D", "\u514D"], /* CJK Ideograph */ + ["\u514E", "\u514E"], /* CJK Ideograph */ + ["\u514F", "\u514F"], /* CJK Ideograph */ + ["\u5150", "\u5150"], /* CJK Ideograph */ + ["\u5151", "\u5151"], /* CJK Ideograph */ + ["\u5152", "\u5152"], /* CJK Ideograph */ + ["\u5153", "\u5153"], /* CJK Ideograph */ + ["\u5154", "\u5154"], /* CJK Ideograph */ + ["\u5155", "\u5155"], /* CJK Ideograph */ + ["\u5156", "\u5156"], /* CJK Ideograph */ + ["\u5157", "\u5157"], /* CJK Ideograph */ + ["\u5158", "\u5158"], /* CJK Ideograph */ + ["\u5159", "\u5159"], /* CJK Ideograph */ + ["\u515A", "\u515A"], /* CJK Ideograph */ + ["\u515B", "\u515B"], /* CJK Ideograph */ + ["\u515C", "\u515C"], /* CJK Ideograph */ + ["\u515D", "\u515D"], /* CJK Ideograph */ + ["\u515E", "\u515E"], /* CJK Ideograph */ + ["\u515F", "\u515F"], /* CJK Ideograph */ + ["\u5160", "\u5160"], /* CJK Ideograph */ + ["\u5161", "\u5161"], /* CJK Ideograph */ + ["\u5162", "\u5162"], /* CJK Ideograph */ + ["\u5163", "\u5163"], /* CJK Ideograph */ + ["\u5164", "\u5164"], /* CJK Ideograph */ + ["\u5165", "\u5165"], /* CJK Ideograph */ + ["\u5166", "\u5166"], /* CJK Ideograph */ + ["\u5167", "\u5167"], /* CJK Ideograph */ + ["\u5168", "\u5168"], /* CJK Ideograph */ + ["\u5169", "\u5169"], /* CJK Ideograph */ + ["\u516A", "\u516A"], /* CJK Ideograph */ + ["\u516B", "\u516B"], /* CJK Ideograph */ + ["\u516C", "\u516C"], /* CJK Ideograph */ + ["\u516D", "\u516D"], /* CJK Ideograph */ + ["\u516E", "\u516E"], /* CJK Ideograph */ + ["\u516F", "\u516F"], /* CJK Ideograph */ + ["\u5170", "\u5170"], /* CJK Ideograph */ + ["\u5171", "\u5171"], /* CJK Ideograph */ + ["\u5172", "\u5172"], /* CJK Ideograph */ + ["\u5173", "\u5173"], /* CJK Ideograph */ + ["\u5174", "\u5174"], /* CJK Ideograph */ + ["\u5175", "\u5175"], /* CJK Ideograph */ + ["\u5176", "\u5176"], /* CJK Ideograph */ + ["\u5177", "\u5177"], /* CJK Ideograph */ + ["\u5178", "\u5178"], /* CJK Ideograph */ + ["\u5179", "\u5179"], /* CJK Ideograph */ + ["\u517A", "\u517A"], /* CJK Ideograph */ + ["\u517B", "\u517B"], /* CJK Ideograph */ + ["\u517C", "\u517C"], /* CJK Ideograph */ + ["\u517D", "\u517D"], /* CJK Ideograph */ + ["\u517E", "\u517E"], /* CJK Ideograph */ + ["\u517F", "\u517F"], /* CJK Ideograph */ + ["\u5180", "\u5180"], /* CJK Ideograph */ + ["\u5181", "\u5181"], /* CJK Ideograph */ + ["\u5182", "\u5182"], /* CJK Ideograph */ + ["\u5183", "\u5183"], /* CJK Ideograph */ + ["\u5184", "\u5184"], /* CJK Ideograph */ + ["\u5185", "\u5185"], /* CJK Ideograph */ + ["\u5186", "\u5186"], /* CJK Ideograph */ + ["\u5187", "\u5187"], /* CJK Ideograph */ + ["\u5188", "\u5188"], /* CJK Ideograph */ + ["\u5189", "\u5189"], /* CJK Ideograph */ + ["\u518A", "\u518A"], /* CJK Ideograph */ + ["\u518B", "\u518B"], /* CJK Ideograph */ + ["\u518C", "\u518C"], /* CJK Ideograph */ + ["\u518D", "\u518D"], /* CJK Ideograph */ + ["\u518E", "\u518E"], /* CJK Ideograph */ + ["\u518F", "\u518F"], /* CJK Ideograph */ + ["\u5190", "\u5190"], /* CJK Ideograph */ + ["\u5191", "\u5191"], /* CJK Ideograph */ + ["\u5192", "\u5192"], /* CJK Ideograph */ + ["\u5193", "\u5193"], /* CJK Ideograph */ + ["\u5194", "\u5194"], /* CJK Ideograph */ + ["\u5195", "\u5195"], /* CJK Ideograph */ + ["\u5196", "\u5196"], /* CJK Ideograph */ + ["\u5197", "\u5197"], /* CJK Ideograph */ + ["\u5198", "\u5198"], /* CJK Ideograph */ + ["\u5199", "\u5199"], /* CJK Ideograph */ + ["\u519A", "\u519A"], /* CJK Ideograph */ + ["\u519B", "\u519B"], /* CJK Ideograph */ + ["\u519C", "\u519C"], /* CJK Ideograph */ + ["\u519D", "\u519D"], /* CJK Ideograph */ + ["\u519E", "\u519E"], /* CJK Ideograph */ + ["\u519F", "\u519F"], /* CJK Ideograph */ + ["\u51A0", "\u51A0"], /* CJK Ideograph */ + ["\u51A1", "\u51A1"], /* CJK Ideograph */ + ["\u51A2", "\u51A2"], /* CJK Ideograph */ + ["\u51A3", "\u51A3"], /* CJK Ideograph */ + ["\u51A4", "\u51A4"], /* CJK Ideograph */ + ["\u51A5", "\u51A5"], /* CJK Ideograph */ + ["\u51A6", "\u51A6"], /* CJK Ideograph */ + ["\u51A7", "\u51A7"], /* CJK Ideograph */ + ["\u51A8", "\u51A8"], /* CJK Ideograph */ + ["\u51A9", "\u51A9"], /* CJK Ideograph */ + ["\u51AA", "\u51AA"], /* CJK Ideograph */ + ["\u51AB", "\u51AB"], /* CJK Ideograph */ + ["\u51AC", "\u51AC"], /* CJK Ideograph */ + ["\u51AD", "\u51AD"], /* CJK Ideograph */ + ["\u51AE", "\u51AE"], /* CJK Ideograph */ + ["\u51AF", "\u51AF"], /* CJK Ideograph */ + ["\u51B0", "\u51B0"], /* CJK Ideograph */ + ["\u51B1", "\u51B1"], /* CJK Ideograph */ + ["\u51B2", "\u51B2"], /* CJK Ideograph */ + ["\u51B3", "\u51B3"], /* CJK Ideograph */ + ["\u51B4", "\u51B4"], /* CJK Ideograph */ + ["\u51B5", "\u51B5"], /* CJK Ideograph */ + ["\u51B6", "\u51B6"], /* CJK Ideograph */ + ["\u51B7", "\u51B7"], /* CJK Ideograph */ + ["\u51B8", "\u51B8"], /* CJK Ideograph */ + ["\u51B9", "\u51B9"], /* CJK Ideograph */ + ["\u51BA", "\u51BA"], /* CJK Ideograph */ + ["\u51BB", "\u51BB"], /* CJK Ideograph */ + ["\u51BC", "\u51BC"], /* CJK Ideograph */ + ["\u51BD", "\u51BD"], /* CJK Ideograph */ + ["\u51BE", "\u51BE"], /* CJK Ideograph */ + ["\u51BF", "\u51BF"], /* CJK Ideograph */ + ["\u51C0", "\u51C0"], /* CJK Ideograph */ + ["\u51C1", "\u51C1"], /* CJK Ideograph */ + ["\u51C2", "\u51C2"], /* CJK Ideograph */ + ["\u51C3", "\u51C3"], /* CJK Ideograph */ + ["\u51C4", "\u51C4"], /* CJK Ideograph */ + ["\u51C5", "\u51C5"], /* CJK Ideograph */ + ["\u51C6", "\u51C6"], /* CJK Ideograph */ + ["\u51C7", "\u51C7"], /* CJK Ideograph */ + ["\u51C8", "\u51C8"], /* CJK Ideograph */ + ["\u51C9", "\u51C9"], /* CJK Ideograph */ + ["\u51CA", "\u51CA"], /* CJK Ideograph */ + ["\u51CB", "\u51CB"], /* CJK Ideograph */ + ["\u51CC", "\u51CC"], /* CJK Ideograph */ + ["\u51CD", "\u51CD"], /* CJK Ideograph */ + ["\u51CE", "\u51CE"], /* CJK Ideograph */ + ["\u51CF", "\u51CF"], /* CJK Ideograph */ + ["\u51D0", "\u51D0"], /* CJK Ideograph */ + ["\u51D1", "\u51D1"], /* CJK Ideograph */ + ["\u51D2", "\u51D2"], /* CJK Ideograph */ + ["\u51D3", "\u51D3"], /* CJK Ideograph */ + ["\u51D4", "\u51D4"], /* CJK Ideograph */ + ["\u51D5", "\u51D5"], /* CJK Ideograph */ + ["\u51D6", "\u51D6"], /* CJK Ideograph */ + ["\u51D7", "\u51D7"], /* CJK Ideograph */ + ["\u51D8", "\u51D8"], /* CJK Ideograph */ + ["\u51D9", "\u51D9"], /* CJK Ideograph */ + ["\u51DA", "\u51DA"], /* CJK Ideograph */ + ["\u51DB", "\u51DB"], /* CJK Ideograph */ + ["\u51DC", "\u51DC"], /* CJK Ideograph */ + ["\u51DD", "\u51DD"], /* CJK Ideograph */ + ["\u51DE", "\u51DE"], /* CJK Ideograph */ + ["\u51DF", "\u51DF"], /* CJK Ideograph */ + ["\u51E0", "\u51E0"], /* CJK Ideograph */ + ["\u51E1", "\u51E1"], /* CJK Ideograph */ + ["\u51E2", "\u51E2"], /* CJK Ideograph */ + ["\u51E3", "\u51E3"], /* CJK Ideograph */ + ["\u51E4", "\u51E4"], /* CJK Ideograph */ + ["\u51E5", "\u51E5"], /* CJK Ideograph */ + ["\u51E6", "\u51E6"], /* CJK Ideograph */ + ["\u51E7", "\u51E7"], /* CJK Ideograph */ + ["\u51E8", "\u51E8"], /* CJK Ideograph */ + ["\u51E9", "\u51E9"], /* CJK Ideograph */ + ["\u51EA", "\u51EA"], /* CJK Ideograph */ + ["\u51EB", "\u51EB"], /* CJK Ideograph */ + ["\u51EC", "\u51EC"], /* CJK Ideograph */ + ["\u51ED", "\u51ED"], /* CJK Ideograph */ + ["\u51EE", "\u51EE"], /* CJK Ideograph */ + ["\u51EF", "\u51EF"], /* CJK Ideograph */ + ["\u51F0", "\u51F0"], /* CJK Ideograph */ + ["\u51F1", "\u51F1"], /* CJK Ideograph */ + ["\u51F2", "\u51F2"], /* CJK Ideograph */ + ["\u51F3", "\u51F3"], /* CJK Ideograph */ + ["\u51F4", "\u51F4"], /* CJK Ideograph */ + ["\u51F5", "\u51F5"], /* CJK Ideograph */ + ["\u51F6", "\u51F6"], /* CJK Ideograph */ + ["\u51F7", "\u51F7"], /* CJK Ideograph */ + ["\u51F8", "\u51F8"], /* CJK Ideograph */ + ["\u51F9", "\u51F9"], /* CJK Ideograph */ + ["\u51FA", "\u51FA"], /* CJK Ideograph */ + ["\u51FB", "\u51FB"], /* CJK Ideograph */ + ["\u51FC", "\u51FC"], /* CJK Ideograph */ + ["\u51FD", "\u51FD"], /* CJK Ideograph */ + ["\u51FE", "\u51FE"], /* CJK Ideograph */ + ["\u51FF", "\u51FF"], /* CJK Ideograph */ + ["\u5200", "\u5200"], /* CJK Ideograph */ + ["\u5201", "\u5201"], /* CJK Ideograph */ + ["\u5202", "\u5202"], /* CJK Ideograph */ + ["\u5203", "\u5203"], /* CJK Ideograph */ + ["\u5204", "\u5204"], /* CJK Ideograph */ + ["\u5205", "\u5205"], /* CJK Ideograph */ + ["\u5206", "\u5206"], /* CJK Ideograph */ + ["\u5207", "\u5207"], /* CJK Ideograph */ + ["\u5208", "\u5208"], /* CJK Ideograph */ + ["\u5209", "\u5209"], /* CJK Ideograph */ + ["\u520A", "\u520A"], /* CJK Ideograph */ + ["\u520B", "\u520B"], /* CJK Ideograph */ + ["\u520C", "\u520C"], /* CJK Ideograph */ + ["\u520D", "\u520D"], /* CJK Ideograph */ + ["\u520E", "\u520E"], /* CJK Ideograph */ + ["\u520F", "\u520F"], /* CJK Ideograph */ + ["\u5210", "\u5210"], /* CJK Ideograph */ + ["\u5211", "\u5211"], /* CJK Ideograph */ + ["\u5212", "\u5212"], /* CJK Ideograph */ + ["\u5213", "\u5213"], /* CJK Ideograph */ + ["\u5214", "\u5214"], /* CJK Ideograph */ + ["\u5215", "\u5215"], /* CJK Ideograph */ + ["\u5216", "\u5216"], /* CJK Ideograph */ + ["\u5217", "\u5217"], /* CJK Ideograph */ + ["\u5218", "\u5218"], /* CJK Ideograph */ + ["\u5219", "\u5219"], /* CJK Ideograph */ + ["\u521A", "\u521A"], /* CJK Ideograph */ + ["\u521B", "\u521B"], /* CJK Ideograph */ + ["\u521C", "\u521C"], /* CJK Ideograph */ + ["\u521D", "\u521D"], /* CJK Ideograph */ + ["\u521E", "\u521E"], /* CJK Ideograph */ + ["\u521F", "\u521F"], /* CJK Ideograph */ + ["\u5220", "\u5220"], /* CJK Ideograph */ + ["\u5221", "\u5221"], /* CJK Ideograph */ + ["\u5222", "\u5222"], /* CJK Ideograph */ + ["\u5223", "\u5223"], /* CJK Ideograph */ + ["\u5224", "\u5224"], /* CJK Ideograph */ + ["\u5225", "\u5225"], /* CJK Ideograph */ + ["\u5226", "\u5226"], /* CJK Ideograph */ + ["\u5227", "\u5227"], /* CJK Ideograph */ + ["\u5228", "\u5228"], /* CJK Ideograph */ + ["\u5229", "\u5229"], /* CJK Ideograph */ + ["\u522A", "\u522A"], /* CJK Ideograph */ + ["\u522B", "\u522B"], /* CJK Ideograph */ + ["\u522C", "\u522C"], /* CJK Ideograph */ + ["\u522D", "\u522D"], /* CJK Ideograph */ + ["\u522E", "\u522E"], /* CJK Ideograph */ + ["\u522F", "\u522F"], /* CJK Ideograph */ + ["\u5230", "\u5230"], /* CJK Ideograph */ + ["\u5231", "\u5231"], /* CJK Ideograph */ + ["\u5232", "\u5232"], /* CJK Ideograph */ + ["\u5233", "\u5233"], /* CJK Ideograph */ + ["\u5234", "\u5234"], /* CJK Ideograph */ + ["\u5235", "\u5235"], /* CJK Ideograph */ + ["\u5236", "\u5236"], /* CJK Ideograph */ + ["\u5237", "\u5237"], /* CJK Ideograph */ + ["\u5238", "\u5238"], /* CJK Ideograph */ + ["\u5239", "\u5239"], /* CJK Ideograph */ + ["\u523A", "\u523A"], /* CJK Ideograph */ + ["\u523B", "\u523B"], /* CJK Ideograph */ + ["\u523C", "\u523C"], /* CJK Ideograph */ + ["\u523D", "\u523D"], /* CJK Ideograph */ + ["\u523E", "\u523E"], /* CJK Ideograph */ + ["\u523F", "\u523F"], /* CJK Ideograph */ + ["\u5240", "\u5240"], /* CJK Ideograph */ + ["\u5241", "\u5241"], /* CJK Ideograph */ + ["\u5242", "\u5242"], /* CJK Ideograph */ + ["\u5243", "\u5243"], /* CJK Ideograph */ + ["\u5244", "\u5244"], /* CJK Ideograph */ + ["\u5245", "\u5245"], /* CJK Ideograph */ + ["\u5246", "\u5246"], /* CJK Ideograph */ + ["\u5247", "\u5247"], /* CJK Ideograph */ + ["\u5248", "\u5248"], /* CJK Ideograph */ + ["\u5249", "\u5249"], /* CJK Ideograph */ + ["\u524A", "\u524A"], /* CJK Ideograph */ + ["\u524B", "\u524B"], /* CJK Ideograph */ + ["\u524C", "\u524C"], /* CJK Ideograph */ + ["\u524D", "\u524D"], /* CJK Ideograph */ + ["\u524E", "\u524E"], /* CJK Ideograph */ + ["\u524F", "\u524F"], /* CJK Ideograph */ + ["\u5250", "\u5250"], /* CJK Ideograph */ + ["\u5251", "\u5251"], /* CJK Ideograph */ + ["\u5252", "\u5252"], /* CJK Ideograph */ + ["\u5253", "\u5253"], /* CJK Ideograph */ + ["\u5254", "\u5254"], /* CJK Ideograph */ + ["\u5255", "\u5255"], /* CJK Ideograph */ + ["\u5256", "\u5256"], /* CJK Ideograph */ + ["\u5257", "\u5257"], /* CJK Ideograph */ + ["\u5258", "\u5258"], /* CJK Ideograph */ + ["\u5259", "\u5259"], /* CJK Ideograph */ + ["\u525A", "\u525A"], /* CJK Ideograph */ + ["\u525B", "\u525B"], /* CJK Ideograph */ + ["\u525C", "\u525C"], /* CJK Ideograph */ + ["\u525D", "\u525D"], /* CJK Ideograph */ + ["\u525E", "\u525E"], /* CJK Ideograph */ + ["\u525F", "\u525F"], /* CJK Ideograph */ + ["\u5260", "\u5260"], /* CJK Ideograph */ + ["\u5261", "\u5261"], /* CJK Ideograph */ + ["\u5262", "\u5262"], /* CJK Ideograph */ + ["\u5263", "\u5263"], /* CJK Ideograph */ + ["\u5264", "\u5264"], /* CJK Ideograph */ + ["\u5265", "\u5265"], /* CJK Ideograph */ + ["\u5266", "\u5266"], /* CJK Ideograph */ + ["\u5267", "\u5267"], /* CJK Ideograph */ + ["\u5268", "\u5268"], /* CJK Ideograph */ + ["\u5269", "\u5269"], /* CJK Ideograph */ + ["\u526A", "\u526A"], /* CJK Ideograph */ + ["\u526B", "\u526B"], /* CJK Ideograph */ + ["\u526C", "\u526C"], /* CJK Ideograph */ + ["\u526D", "\u526D"], /* CJK Ideograph */ + ["\u526E", "\u526E"], /* CJK Ideograph */ + ["\u526F", "\u526F"], /* CJK Ideograph */ + ["\u5270", "\u5270"], /* CJK Ideograph */ + ["\u5271", "\u5271"], /* CJK Ideograph */ + ["\u5272", "\u5272"], /* CJK Ideograph */ + ["\u5273", "\u5273"], /* CJK Ideograph */ + ["\u5274", "\u5274"], /* CJK Ideograph */ + ["\u5275", "\u5275"], /* CJK Ideograph */ + ["\u5276", "\u5276"], /* CJK Ideograph */ + ["\u5277", "\u5277"], /* CJK Ideograph */ + ["\u5278", "\u5278"], /* CJK Ideograph */ + ["\u5279", "\u5279"], /* CJK Ideograph */ + ["\u527A", "\u527A"], /* CJK Ideograph */ + ["\u527B", "\u527B"], /* CJK Ideograph */ + ["\u527C", "\u527C"], /* CJK Ideograph */ + ["\u527D", "\u527D"], /* CJK Ideograph */ + ["\u527E", "\u527E"], /* CJK Ideograph */ + ["\u527F", "\u527F"], /* CJK Ideograph */ + ["\u5280", "\u5280"], /* CJK Ideograph */ + ["\u5281", "\u5281"], /* CJK Ideograph */ + ["\u5282", "\u5282"], /* CJK Ideograph */ + ["\u5283", "\u5283"], /* CJK Ideograph */ + ["\u5284", "\u5284"], /* CJK Ideograph */ + ["\u5285", "\u5285"], /* CJK Ideograph */ + ["\u5286", "\u5286"], /* CJK Ideograph */ + ["\u5287", "\u5287"], /* CJK Ideograph */ + ["\u5288", "\u5288"], /* CJK Ideograph */ + ["\u5289", "\u5289"], /* CJK Ideograph */ + ["\u528A", "\u528A"], /* CJK Ideograph */ + ["\u528B", "\u528B"], /* CJK Ideograph */ + ["\u528C", "\u528C"], /* CJK Ideograph */ + ["\u528D", "\u528D"], /* CJK Ideograph */ + ["\u528E", "\u528E"], /* CJK Ideograph */ + ["\u528F", "\u528F"], /* CJK Ideograph */ + ["\u5290", "\u5290"], /* CJK Ideograph */ + ["\u5291", "\u5291"], /* CJK Ideograph */ + ["\u5292", "\u5292"], /* CJK Ideograph */ + ["\u5293", "\u5293"], /* CJK Ideograph */ + ["\u5294", "\u5294"], /* CJK Ideograph */ + ["\u5295", "\u5295"], /* CJK Ideograph */ + ["\u5296", "\u5296"], /* CJK Ideograph */ + ["\u5297", "\u5297"], /* CJK Ideograph */ + ["\u5298", "\u5298"], /* CJK Ideograph */ + ["\u5299", "\u5299"], /* CJK Ideograph */ + ["\u529A", "\u529A"], /* CJK Ideograph */ + ["\u529B", "\u529B"], /* CJK Ideograph */ + ["\u529C", "\u529C"], /* CJK Ideograph */ + ["\u529D", "\u529D"], /* CJK Ideograph */ + ["\u529E", "\u529E"], /* CJK Ideograph */ + ["\u529F", "\u529F"], /* CJK Ideograph */ + ["\u52A0", "\u52A0"], /* CJK Ideograph */ + ["\u52A1", "\u52A1"], /* CJK Ideograph */ + ["\u52A2", "\u52A2"], /* CJK Ideograph */ + ["\u52A3", "\u52A3"], /* CJK Ideograph */ + ["\u52A4", "\u52A4"], /* CJK Ideograph */ + ["\u52A5", "\u52A5"], /* CJK Ideograph */ + ["\u52A6", "\u52A6"], /* CJK Ideograph */ + ["\u52A7", "\u52A7"], /* CJK Ideograph */ + ["\u52A8", "\u52A8"], /* CJK Ideograph */ + ["\u52A9", "\u52A9"], /* CJK Ideograph */ + ["\u52AA", "\u52AA"], /* CJK Ideograph */ + ["\u52AB", "\u52AB"], /* CJK Ideograph */ + ["\u52AC", "\u52AC"], /* CJK Ideograph */ + ["\u52AD", "\u52AD"], /* CJK Ideograph */ + ["\u52AE", "\u52AE"], /* CJK Ideograph */ + ["\u52AF", "\u52AF"], /* CJK Ideograph */ + ["\u52B0", "\u52B0"], /* CJK Ideograph */ + ["\u52B1", "\u52B1"], /* CJK Ideograph */ + ["\u52B2", "\u52B2"], /* CJK Ideograph */ + ["\u52B3", "\u52B3"], /* CJK Ideograph */ + ["\u52B4", "\u52B4"], /* CJK Ideograph */ + ["\u52B5", "\u52B5"], /* CJK Ideograph */ + ["\u52B6", "\u52B6"], /* CJK Ideograph */ + ["\u52B7", "\u52B7"], /* CJK Ideograph */ + ["\u52B8", "\u52B8"], /* CJK Ideograph */ + ["\u52B9", "\u52B9"], /* CJK Ideograph */ + ["\u52BA", "\u52BA"], /* CJK Ideograph */ + ["\u52BB", "\u52BB"], /* CJK Ideograph */ + ["\u52BC", "\u52BC"], /* CJK Ideograph */ + ["\u52BD", "\u52BD"], /* CJK Ideograph */ + ["\u52BE", "\u52BE"], /* CJK Ideograph */ + ["\u52BF", "\u52BF"], /* CJK Ideograph */ + ["\u52C0", "\u52C0"], /* CJK Ideograph */ + ["\u52C1", "\u52C1"], /* CJK Ideograph */ + ["\u52C2", "\u52C2"], /* CJK Ideograph */ + ["\u52C3", "\u52C3"], /* CJK Ideograph */ + ["\u52C4", "\u52C4"], /* CJK Ideograph */ + ["\u52C5", "\u52C5"], /* CJK Ideograph */ + ["\u52C6", "\u52C6"], /* CJK Ideograph */ + ["\u52C7", "\u52C7"], /* CJK Ideograph */ + ["\u52C8", "\u52C8"], /* CJK Ideograph */ + ["\u52C9", "\u52C9"], /* CJK Ideograph */ + ["\u52CA", "\u52CA"], /* CJK Ideograph */ + ["\u52CB", "\u52CB"], /* CJK Ideograph */ + ["\u52CC", "\u52CC"], /* CJK Ideograph */ + ["\u52CD", "\u52CD"], /* CJK Ideograph */ + ["\u52CE", "\u52CE"], /* CJK Ideograph */ + ["\u52CF", "\u52CF"], /* CJK Ideograph */ + ["\u52D0", "\u52D0"], /* CJK Ideograph */ + ["\u52D1", "\u52D1"], /* CJK Ideograph */ + ["\u52D2", "\u52D2"], /* CJK Ideograph */ + ["\u52D3", "\u52D3"], /* CJK Ideograph */ + ["\u52D4", "\u52D4"], /* CJK Ideograph */ + ["\u52D5", "\u52D5"], /* CJK Ideograph */ + ["\u52D6", "\u52D6"], /* CJK Ideograph */ + ["\u52D7", "\u52D7"], /* CJK Ideograph */ + ["\u52D8", "\u52D8"], /* CJK Ideograph */ + ["\u52D9", "\u52D9"], /* CJK Ideograph */ + ["\u52DA", "\u52DA"], /* CJK Ideograph */ + ["\u52DB", "\u52DB"], /* CJK Ideograph */ + ["\u52DC", "\u52DC"], /* CJK Ideograph */ + ["\u52DD", "\u52DD"], /* CJK Ideograph */ + ["\u52DE", "\u52DE"], /* CJK Ideograph */ + ["\u52DF", "\u52DF"], /* CJK Ideograph */ + ["\u52E0", "\u52E0"], /* CJK Ideograph */ + ["\u52E1", "\u52E1"], /* CJK Ideograph */ + ["\u52E2", "\u52E2"], /* CJK Ideograph */ + ["\u52E3", "\u52E3"], /* CJK Ideograph */ + ["\u52E4", "\u52E4"], /* CJK Ideograph */ + ["\u52E5", "\u52E5"], /* CJK Ideograph */ + ["\u52E6", "\u52E6"], /* CJK Ideograph */ + ["\u52E7", "\u52E7"], /* CJK Ideograph */ + ["\u52E8", "\u52E8"], /* CJK Ideograph */ + ["\u52E9", "\u52E9"], /* CJK Ideograph */ + ["\u52EA", "\u52EA"], /* CJK Ideograph */ + ["\u52EB", "\u52EB"], /* CJK Ideograph */ + ["\u52EC", "\u52EC"], /* CJK Ideograph */ + ["\u52ED", "\u52ED"], /* CJK Ideograph */ + ["\u52EE", "\u52EE"], /* CJK Ideograph */ + ["\u52EF", "\u52EF"], /* CJK Ideograph */ + ["\u52F0", "\u52F0"], /* CJK Ideograph */ + ["\u52F1", "\u52F1"], /* CJK Ideograph */ + ["\u52F2", "\u52F2"], /* CJK Ideograph */ + ["\u52F3", "\u52F3"], /* CJK Ideograph */ + ["\u52F4", "\u52F4"], /* CJK Ideograph */ + ["\u52F5", "\u52F5"], /* CJK Ideograph */ + ["\u52F6", "\u52F6"], /* CJK Ideograph */ + ["\u52F7", "\u52F7"], /* CJK Ideograph */ + ["\u52F8", "\u52F8"], /* CJK Ideograph */ + ["\u52F9", "\u52F9"], /* CJK Ideograph */ + ["\u52FA", "\u52FA"], /* CJK Ideograph */ + ["\u52FB", "\u52FB"], /* CJK Ideograph */ + ["\u52FC", "\u52FC"], /* CJK Ideograph */ + ["\u52FD", "\u52FD"], /* CJK Ideograph */ + ["\u52FE", "\u52FE"], /* CJK Ideograph */ + ["\u52FF", "\u52FF"], /* CJK Ideograph */ + ["\u5300", "\u5300"], /* CJK Ideograph */ + ["\u5301", "\u5301"], /* CJK Ideograph */ + ["\u5302", "\u5302"], /* CJK Ideograph */ + ["\u5303", "\u5303"], /* CJK Ideograph */ + ["\u5304", "\u5304"], /* CJK Ideograph */ + ["\u5305", "\u5305"], /* CJK Ideograph */ + ["\u5306", "\u5306"], /* CJK Ideograph */ + ["\u5307", "\u5307"], /* CJK Ideograph */ + ["\u5308", "\u5308"], /* CJK Ideograph */ + ["\u5309", "\u5309"], /* CJK Ideograph */ + ["\u530A", "\u530A"], /* CJK Ideograph */ + ["\u530B", "\u530B"], /* CJK Ideograph */ + ["\u530C", "\u530C"], /* CJK Ideograph */ + ["\u530D", "\u530D"], /* CJK Ideograph */ + ["\u530E", "\u530E"], /* CJK Ideograph */ + ["\u530F", "\u530F"], /* CJK Ideograph */ + ["\u5310", "\u5310"], /* CJK Ideograph */ + ["\u5311", "\u5311"], /* CJK Ideograph */ + ["\u5312", "\u5312"], /* CJK Ideograph */ + ["\u5313", "\u5313"], /* CJK Ideograph */ + ["\u5314", "\u5314"], /* CJK Ideograph */ + ["\u5315", "\u5315"], /* CJK Ideograph */ + ["\u5316", "\u5316"], /* CJK Ideograph */ + ["\u5317", "\u5317"], /* CJK Ideograph */ + ["\u5318", "\u5318"], /* CJK Ideograph */ + ["\u5319", "\u5319"], /* CJK Ideograph */ + ["\u531A", "\u531A"], /* CJK Ideograph */ + ["\u531B", "\u531B"], /* CJK Ideograph */ + ["\u531C", "\u531C"], /* CJK Ideograph */ + ["\u531D", "\u531D"], /* CJK Ideograph */ + ["\u531E", "\u531E"], /* CJK Ideograph */ + ["\u531F", "\u531F"], /* CJK Ideograph */ + ["\u5320", "\u5320"], /* CJK Ideograph */ + ["\u5321", "\u5321"], /* CJK Ideograph */ + ["\u5322", "\u5322"], /* CJK Ideograph */ + ["\u5323", "\u5323"], /* CJK Ideograph */ + ["\u5324", "\u5324"], /* CJK Ideograph */ + ["\u5325", "\u5325"], /* CJK Ideograph */ + ["\u5326", "\u5326"], /* CJK Ideograph */ + ["\u5327", "\u5327"], /* CJK Ideograph */ + ["\u5328", "\u5328"], /* CJK Ideograph */ + ["\u5329", "\u5329"], /* CJK Ideograph */ + ["\u532A", "\u532A"], /* CJK Ideograph */ + ["\u532B", "\u532B"], /* CJK Ideograph */ + ["\u532C", "\u532C"], /* CJK Ideograph */ + ["\u532D", "\u532D"], /* CJK Ideograph */ + ["\u532E", "\u532E"], /* CJK Ideograph */ + ["\u532F", "\u532F"], /* CJK Ideograph */ + ["\u5330", "\u5330"], /* CJK Ideograph */ + ["\u5331", "\u5331"], /* CJK Ideograph */ + ["\u5332", "\u5332"], /* CJK Ideograph */ + ["\u5333", "\u5333"], /* CJK Ideograph */ + ["\u5334", "\u5334"], /* CJK Ideograph */ + ["\u5335", "\u5335"], /* CJK Ideograph */ + ["\u5336", "\u5336"], /* CJK Ideograph */ + ["\u5337", "\u5337"], /* CJK Ideograph */ + ["\u5338", "\u5338"], /* CJK Ideograph */ + ["\u5339", "\u5339"], /* CJK Ideograph */ + ["\u533A", "\u533A"], /* CJK Ideograph */ + ["\u533B", "\u533B"], /* CJK Ideograph */ + ["\u533C", "\u533C"], /* CJK Ideograph */ + ["\u533D", "\u533D"], /* CJK Ideograph */ + ["\u533E", "\u533E"], /* CJK Ideograph */ + ["\u533F", "\u533F"], /* CJK Ideograph */ + ["\u5340", "\u5340"], /* CJK Ideograph */ + ["\u5341", "\u5341"], /* CJK Ideograph */ + ["\u5342", "\u5342"], /* CJK Ideograph */ + ["\u5343", "\u5343"], /* CJK Ideograph */ + ["\u5344", "\u5344"], /* CJK Ideograph */ + ["\u5345", "\u5345"], /* CJK Ideograph */ + ["\u5346", "\u5346"], /* CJK Ideograph */ + ["\u5347", "\u5347"], /* CJK Ideograph */ + ["\u5348", "\u5348"], /* CJK Ideograph */ + ["\u5349", "\u5349"], /* CJK Ideograph */ + ["\u534A", "\u534A"], /* CJK Ideograph */ + ["\u534B", "\u534B"], /* CJK Ideograph */ + ["\u534C", "\u534C"], /* CJK Ideograph */ + ["\u534D", "\u534D"], /* CJK Ideograph */ + ["\u534E", "\u534E"], /* CJK Ideograph */ + ["\u534F", "\u534F"], /* CJK Ideograph */ + ["\u5350", "\u5350"], /* CJK Ideograph */ + ["\u5351", "\u5351"], /* CJK Ideograph */ + ["\u5352", "\u5352"], /* CJK Ideograph */ + ["\u5353", "\u5353"], /* CJK Ideograph */ + ["\u5354", "\u5354"], /* CJK Ideograph */ + ["\u5355", "\u5355"], /* CJK Ideograph */ + ["\u5356", "\u5356"], /* CJK Ideograph */ + ["\u5357", "\u5357"], /* CJK Ideograph */ + ["\u5358", "\u5358"], /* CJK Ideograph */ + ["\u5359", "\u5359"], /* CJK Ideograph */ + ["\u535A", "\u535A"], /* CJK Ideograph */ + ["\u535B", "\u535B"], /* CJK Ideograph */ + ["\u535C", "\u535C"], /* CJK Ideograph */ + ["\u535D", "\u535D"], /* CJK Ideograph */ + ["\u535E", "\u535E"], /* CJK Ideograph */ + ["\u535F", "\u535F"], /* CJK Ideograph */ + ["\u5360", "\u5360"], /* CJK Ideograph */ + ["\u5361", "\u5361"], /* CJK Ideograph */ + ["\u5362", "\u5362"], /* CJK Ideograph */ + ["\u5363", "\u5363"], /* CJK Ideograph */ + ["\u5364", "\u5364"], /* CJK Ideograph */ + ["\u5365", "\u5365"], /* CJK Ideograph */ + ["\u5366", "\u5366"], /* CJK Ideograph */ + ["\u5367", "\u5367"], /* CJK Ideograph */ + ["\u5368", "\u5368"], /* CJK Ideograph */ + ["\u5369", "\u5369"], /* CJK Ideograph */ + ["\u536A", "\u536A"], /* CJK Ideograph */ + ["\u536B", "\u536B"], /* CJK Ideograph */ + ["\u536C", "\u536C"], /* CJK Ideograph */ + ["\u536D", "\u536D"], /* CJK Ideograph */ + ["\u536E", "\u536E"], /* CJK Ideograph */ + ["\u536F", "\u536F"], /* CJK Ideograph */ + ["\u5370", "\u5370"], /* CJK Ideograph */ + ["\u5371", "\u5371"], /* CJK Ideograph */ + ["\u5372", "\u5372"], /* CJK Ideograph */ + ["\u5373", "\u5373"], /* CJK Ideograph */ + ["\u5374", "\u5374"], /* CJK Ideograph */ + ["\u5375", "\u5375"], /* CJK Ideograph */ + ["\u5376", "\u5376"], /* CJK Ideograph */ + ["\u5377", "\u5377"], /* CJK Ideograph */ + ["\u5378", "\u5378"], /* CJK Ideograph */ + ["\u5379", "\u5379"], /* CJK Ideograph */ + ["\u537A", "\u537A"], /* CJK Ideograph */ + ["\u537B", "\u537B"], /* CJK Ideograph */ + ["\u537C", "\u537C"], /* CJK Ideograph */ + ["\u537D", "\u537D"], /* CJK Ideograph */ + ["\u537E", "\u537E"], /* CJK Ideograph */ + ["\u537F", "\u537F"], /* CJK Ideograph */ + ["\u5380", "\u5380"], /* CJK Ideograph */ + ["\u5381", "\u5381"], /* CJK Ideograph */ + ["\u5382", "\u5382"], /* CJK Ideograph */ + ["\u5383", "\u5383"], /* CJK Ideograph */ + ["\u5384", "\u5384"], /* CJK Ideograph */ + ["\u5385", "\u5385"], /* CJK Ideograph */ + ["\u5386", "\u5386"], /* CJK Ideograph */ + ["\u5387", "\u5387"], /* CJK Ideograph */ + ["\u5388", "\u5388"], /* CJK Ideograph */ + ["\u5389", "\u5389"], /* CJK Ideograph */ + ["\u538A", "\u538A"], /* CJK Ideograph */ + ["\u538B", "\u538B"], /* CJK Ideograph */ + ["\u538C", "\u538C"], /* CJK Ideograph */ + ["\u538D", "\u538D"], /* CJK Ideograph */ + ["\u538E", "\u538E"], /* CJK Ideograph */ + ["\u538F", "\u538F"], /* CJK Ideograph */ + ["\u5390", "\u5390"], /* CJK Ideograph */ + ["\u5391", "\u5391"], /* CJK Ideograph */ + ["\u5392", "\u5392"], /* CJK Ideograph */ + ["\u5393", "\u5393"], /* CJK Ideograph */ + ["\u5394", "\u5394"], /* CJK Ideograph */ + ["\u5395", "\u5395"], /* CJK Ideograph */ + ["\u5396", "\u5396"], /* CJK Ideograph */ + ["\u5397", "\u5397"], /* CJK Ideograph */ + ["\u5398", "\u5398"], /* CJK Ideograph */ + ["\u5399", "\u5399"], /* CJK Ideograph */ + ["\u539A", "\u539A"], /* CJK Ideograph */ + ["\u539B", "\u539B"], /* CJK Ideograph */ + ["\u539C", "\u539C"], /* CJK Ideograph */ + ["\u539D", "\u539D"], /* CJK Ideograph */ + ["\u539E", "\u539E"], /* CJK Ideograph */ + ["\u539F", "\u539F"], /* CJK Ideograph */ + ["\u53A0", "\u53A0"], /* CJK Ideograph */ + ["\u53A1", "\u53A1"], /* CJK Ideograph */ + ["\u53A2", "\u53A2"], /* CJK Ideograph */ + ["\u53A3", "\u53A3"], /* CJK Ideograph */ + ["\u53A4", "\u53A4"], /* CJK Ideograph */ + ["\u53A5", "\u53A5"], /* CJK Ideograph */ + ["\u53A6", "\u53A6"], /* CJK Ideograph */ + ["\u53A7", "\u53A7"], /* CJK Ideograph */ + ["\u53A8", "\u53A8"], /* CJK Ideograph */ + ["\u53A9", "\u53A9"], /* CJK Ideograph */ + ["\u53AA", "\u53AA"], /* CJK Ideograph */ + ["\u53AB", "\u53AB"], /* CJK Ideograph */ + ["\u53AC", "\u53AC"], /* CJK Ideograph */ + ["\u53AD", "\u53AD"], /* CJK Ideograph */ + ["\u53AE", "\u53AE"], /* CJK Ideograph */ + ["\u53AF", "\u53AF"], /* CJK Ideograph */ + ["\u53B0", "\u53B0"], /* CJK Ideograph */ + ["\u53B1", "\u53B1"], /* CJK Ideograph */ + ["\u53B2", "\u53B2"], /* CJK Ideograph */ + ["\u53B3", "\u53B3"], /* CJK Ideograph */ + ["\u53B4", "\u53B4"], /* CJK Ideograph */ + ["\u53B5", "\u53B5"], /* CJK Ideograph */ + ["\u53B6", "\u53B6"], /* CJK Ideograph */ + ["\u53B7", "\u53B7"], /* CJK Ideograph */ + ["\u53B8", "\u53B8"], /* CJK Ideograph */ + ["\u53B9", "\u53B9"], /* CJK Ideograph */ + ["\u53BA", "\u53BA"], /* CJK Ideograph */ + ["\u53BB", "\u53BB"], /* CJK Ideograph */ + ["\u53BC", "\u53BC"], /* CJK Ideograph */ + ["\u53BD", "\u53BD"], /* CJK Ideograph */ + ["\u53BE", "\u53BE"], /* CJK Ideograph */ + ["\u53BF", "\u53BF"], /* CJK Ideograph */ + ["\u53C0", "\u53C0"], /* CJK Ideograph */ + ["\u53C1", "\u53C1"], /* CJK Ideograph */ + ["\u53C2", "\u53C2"], /* CJK Ideograph */ + ["\u53C3", "\u53C3"], /* CJK Ideograph */ + ["\u53C4", "\u53C4"], /* CJK Ideograph */ + ["\u53C5", "\u53C5"], /* CJK Ideograph */ + ["\u53C6", "\u53C6"], /* CJK Ideograph */ + ["\u53C7", "\u53C7"], /* CJK Ideograph */ + ["\u53C8", "\u53C8"], /* CJK Ideograph */ + ["\u53C9", "\u53C9"], /* CJK Ideograph */ + ["\u53CA", "\u53CA"], /* CJK Ideograph */ + ["\u53CB", "\u53CB"], /* CJK Ideograph */ + ["\u53CC", "\u53CC"], /* CJK Ideograph */ + ["\u53CD", "\u53CD"], /* CJK Ideograph */ + ["\u53CE", "\u53CE"], /* CJK Ideograph */ + ["\u53CF", "\u53CF"], /* CJK Ideograph */ + ["\u53D0", "\u53D0"], /* CJK Ideograph */ + ["\u53D1", "\u53D1"], /* CJK Ideograph */ + ["\u53D2", "\u53D2"], /* CJK Ideograph */ + ["\u53D3", "\u53D3"], /* CJK Ideograph */ + ["\u53D4", "\u53D4"], /* CJK Ideograph */ + ["\u53D5", "\u53D5"], /* CJK Ideograph */ + ["\u53D6", "\u53D6"], /* CJK Ideograph */ + ["\u53D7", "\u53D7"], /* CJK Ideograph */ + ["\u53D8", "\u53D8"], /* CJK Ideograph */ + ["\u53D9", "\u53D9"], /* CJK Ideograph */ + ["\u53DA", "\u53DA"], /* CJK Ideograph */ + ["\u53DB", "\u53DB"], /* CJK Ideograph */ + ["\u53DC", "\u53DC"], /* CJK Ideograph */ + ["\u53DD", "\u53DD"], /* CJK Ideograph */ + ["\u53DE", "\u53DE"], /* CJK Ideograph */ + ["\u53DF", "\u53DF"], /* CJK Ideograph */ + ["\u53E0", "\u53E0"], /* CJK Ideograph */ + ["\u53E1", "\u53E1"], /* CJK Ideograph */ + ["\u53E2", "\u53E2"], /* CJK Ideograph */ + ["\u53E3", "\u53E3"], /* CJK Ideograph */ + ["\u53E4", "\u53E4"], /* CJK Ideograph */ + ["\u53E5", "\u53E5"], /* CJK Ideograph */ + ["\u53E6", "\u53E6"], /* CJK Ideograph */ + ["\u53E7", "\u53E7"], /* CJK Ideograph */ + ["\u53E8", "\u53E8"], /* CJK Ideograph */ + ["\u53E9", "\u53E9"], /* CJK Ideograph */ + ["\u53EA", "\u53EA"], /* CJK Ideograph */ + ["\u53EB", "\u53EB"], /* CJK Ideograph */ + ["\u53EC", "\u53EC"], /* CJK Ideograph */ + ["\u53ED", "\u53ED"], /* CJK Ideograph */ + ["\u53EE", "\u53EE"], /* CJK Ideograph */ + ["\u53EF", "\u53EF"], /* CJK Ideograph */ + ["\u53F0", "\u53F0"], /* CJK Ideograph */ + ["\u53F1", "\u53F1"], /* CJK Ideograph */ + ["\u53F2", "\u53F2"], /* CJK Ideograph */ + ["\u53F3", "\u53F3"], /* CJK Ideograph */ + ["\u53F4", "\u53F4"], /* CJK Ideograph */ + ["\u53F5", "\u53F5"], /* CJK Ideograph */ + ["\u53F6", "\u53F6"], /* CJK Ideograph */ + ["\u53F7", "\u53F7"], /* CJK Ideograph */ + ["\u53F8", "\u53F8"], /* CJK Ideograph */ + ["\u53F9", "\u53F9"], /* CJK Ideograph */ + ["\u53FA", "\u53FA"], /* CJK Ideograph */ + ["\u53FB", "\u53FB"], /* CJK Ideograph */ + ["\u53FC", "\u53FC"], /* CJK Ideograph */ + ["\u53FD", "\u53FD"], /* CJK Ideograph */ + ["\u53FE", "\u53FE"], /* CJK Ideograph */ + ["\u53FF", "\u53FF"], /* CJK Ideograph */ + ["\u5400", "\u5400"], /* CJK Ideograph */ + ["\u5401", "\u5401"], /* CJK Ideograph */ + ["\u5402", "\u5402"], /* CJK Ideograph */ + ["\u5403", "\u5403"], /* CJK Ideograph */ + ["\u5404", "\u5404"], /* CJK Ideograph */ + ["\u5405", "\u5405"], /* CJK Ideograph */ + ["\u5406", "\u5406"], /* CJK Ideograph */ + ["\u5407", "\u5407"], /* CJK Ideograph */ + ["\u5408", "\u5408"], /* CJK Ideograph */ + ["\u5409", "\u5409"], /* CJK Ideograph */ + ["\u540A", "\u540A"], /* CJK Ideograph */ + ["\u540B", "\u540B"], /* CJK Ideograph */ + ["\u540C", "\u540C"], /* CJK Ideograph */ + ["\u540D", "\u540D"], /* CJK Ideograph */ + ["\u540E", "\u540E"], /* CJK Ideograph */ + ["\u540F", "\u540F"], /* CJK Ideograph */ + ["\u5410", "\u5410"], /* CJK Ideograph */ + ["\u5411", "\u5411"], /* CJK Ideograph */ + ["\u5412", "\u5412"], /* CJK Ideograph */ + ["\u5413", "\u5413"], /* CJK Ideograph */ + ["\u5414", "\u5414"], /* CJK Ideograph */ + ["\u5415", "\u5415"], /* CJK Ideograph */ + ["\u5416", "\u5416"], /* CJK Ideograph */ + ["\u5417", "\u5417"], /* CJK Ideograph */ + ["\u5418", "\u5418"], /* CJK Ideograph */ + ["\u5419", "\u5419"], /* CJK Ideograph */ + ["\u541A", "\u541A"], /* CJK Ideograph */ + ["\u541B", "\u541B"], /* CJK Ideograph */ + ["\u541C", "\u541C"], /* CJK Ideograph */ + ["\u541D", "\u541D"], /* CJK Ideograph */ + ["\u541E", "\u541E"], /* CJK Ideograph */ + ["\u541F", "\u541F"], /* CJK Ideograph */ + ["\u5420", "\u5420"], /* CJK Ideograph */ + ["\u5421", "\u5421"], /* CJK Ideograph */ + ["\u5422", "\u5422"], /* CJK Ideograph */ + ["\u5423", "\u5423"], /* CJK Ideograph */ + ["\u5424", "\u5424"], /* CJK Ideograph */ + ["\u5425", "\u5425"], /* CJK Ideograph */ + ["\u5426", "\u5426"], /* CJK Ideograph */ + ["\u5427", "\u5427"], /* CJK Ideograph */ + ["\u5428", "\u5428"], /* CJK Ideograph */ + ["\u5429", "\u5429"], /* CJK Ideograph */ + ["\u542A", "\u542A"], /* CJK Ideograph */ + ["\u542B", "\u542B"], /* CJK Ideograph */ + ["\u542C", "\u542C"], /* CJK Ideograph */ + ["\u542D", "\u542D"], /* CJK Ideograph */ + ["\u542E", "\u542E"], /* CJK Ideograph */ + ["\u542F", "\u542F"], /* CJK Ideograph */ + ["\u5430", "\u5430"], /* CJK Ideograph */ + ["\u5431", "\u5431"], /* CJK Ideograph */ + ["\u5432", "\u5432"], /* CJK Ideograph */ + ["\u5433", "\u5433"], /* CJK Ideograph */ + ["\u5434", "\u5434"], /* CJK Ideograph */ + ["\u5435", "\u5435"], /* CJK Ideograph */ + ["\u5436", "\u5436"], /* CJK Ideograph */ + ["\u5437", "\u5437"], /* CJK Ideograph */ + ["\u5438", "\u5438"], /* CJK Ideograph */ + ["\u5439", "\u5439"], /* CJK Ideograph */ + ["\u543A", "\u543A"], /* CJK Ideograph */ + ["\u543B", "\u543B"], /* CJK Ideograph */ + ["\u543C", "\u543C"], /* CJK Ideograph */ + ["\u543D", "\u543D"], /* CJK Ideograph */ + ["\u543E", "\u543E"], /* CJK Ideograph */ + ["\u543F", "\u543F"], /* CJK Ideograph */ + ["\u5440", "\u5440"], /* CJK Ideograph */ + ["\u5441", "\u5441"], /* CJK Ideograph */ + ["\u5442", "\u5442"], /* CJK Ideograph */ + ["\u5443", "\u5443"], /* CJK Ideograph */ + ["\u5444", "\u5444"], /* CJK Ideograph */ + ["\u5445", "\u5445"], /* CJK Ideograph */ + ["\u5446", "\u5446"], /* CJK Ideograph */ + ["\u5447", "\u5447"], /* CJK Ideograph */ + ["\u5448", "\u5448"], /* CJK Ideograph */ + ["\u5449", "\u5449"], /* CJK Ideograph */ + ["\u544A", "\u544A"], /* CJK Ideograph */ + ["\u544B", "\u544B"], /* CJK Ideograph */ + ["\u544C", "\u544C"], /* CJK Ideograph */ + ["\u544D", "\u544D"], /* CJK Ideograph */ + ["\u544E", "\u544E"], /* CJK Ideograph */ + ["\u544F", "\u544F"], /* CJK Ideograph */ + ["\u5450", "\u5450"], /* CJK Ideograph */ + ["\u5451", "\u5451"], /* CJK Ideograph */ + ["\u5452", "\u5452"], /* CJK Ideograph */ + ["\u5453", "\u5453"], /* CJK Ideograph */ + ["\u5454", "\u5454"], /* CJK Ideograph */ + ["\u5455", "\u5455"], /* CJK Ideograph */ + ["\u5456", "\u5456"], /* CJK Ideograph */ + ["\u5457", "\u5457"], /* CJK Ideograph */ + ["\u5458", "\u5458"], /* CJK Ideograph */ + ["\u5459", "\u5459"], /* CJK Ideograph */ + ["\u545A", "\u545A"], /* CJK Ideograph */ + ["\u545B", "\u545B"], /* CJK Ideograph */ + ["\u545C", "\u545C"], /* CJK Ideograph */ + ["\u545D", "\u545D"], /* CJK Ideograph */ + ["\u545E", "\u545E"], /* CJK Ideograph */ + ["\u545F", "\u545F"], /* CJK Ideograph */ + ["\u5460", "\u5460"], /* CJK Ideograph */ + ["\u5461", "\u5461"], /* CJK Ideograph */ + ["\u5462", "\u5462"], /* CJK Ideograph */ + ["\u5463", "\u5463"], /* CJK Ideograph */ + ["\u5464", "\u5464"], /* CJK Ideograph */ + ["\u5465", "\u5465"], /* CJK Ideograph */ + ["\u5466", "\u5466"], /* CJK Ideograph */ + ["\u5467", "\u5467"], /* CJK Ideograph */ + ["\u5468", "\u5468"], /* CJK Ideograph */ + ["\u5469", "\u5469"], /* CJK Ideograph */ + ["\u546A", "\u546A"], /* CJK Ideograph */ + ["\u546B", "\u546B"], /* CJK Ideograph */ + ["\u546C", "\u546C"], /* CJK Ideograph */ + ["\u546D", "\u546D"], /* CJK Ideograph */ + ["\u546E", "\u546E"], /* CJK Ideograph */ + ["\u546F", "\u546F"], /* CJK Ideograph */ + ["\u5470", "\u5470"], /* CJK Ideograph */ + ["\u5471", "\u5471"], /* CJK Ideograph */ + ["\u5472", "\u5472"], /* CJK Ideograph */ + ["\u5473", "\u5473"], /* CJK Ideograph */ + ["\u5474", "\u5474"], /* CJK Ideograph */ + ["\u5475", "\u5475"], /* CJK Ideograph */ + ["\u5476", "\u5476"], /* CJK Ideograph */ + ["\u5477", "\u5477"], /* CJK Ideograph */ + ["\u5478", "\u5478"], /* CJK Ideograph */ + ["\u5479", "\u5479"], /* CJK Ideograph */ + ["\u547A", "\u547A"], /* CJK Ideograph */ + ["\u547B", "\u547B"], /* CJK Ideograph */ + ["\u547C", "\u547C"], /* CJK Ideograph */ + ["\u547D", "\u547D"], /* CJK Ideograph */ + ["\u547E", "\u547E"], /* CJK Ideograph */ + ["\u547F", "\u547F"], /* CJK Ideograph */ + ["\u5480", "\u5480"], /* CJK Ideograph */ + ["\u5481", "\u5481"], /* CJK Ideograph */ + ["\u5482", "\u5482"], /* CJK Ideograph */ + ["\u5483", "\u5483"], /* CJK Ideograph */ + ["\u5484", "\u5484"], /* CJK Ideograph */ + ["\u5485", "\u5485"], /* CJK Ideograph */ + ["\u5486", "\u5486"], /* CJK Ideograph */ + ["\u5487", "\u5487"], /* CJK Ideograph */ + ["\u5488", "\u5488"], /* CJK Ideograph */ + ["\u5489", "\u5489"], /* CJK Ideograph */ + ["\u548A", "\u548A"], /* CJK Ideograph */ + ["\u548B", "\u548B"], /* CJK Ideograph */ + ["\u548C", "\u548C"], /* CJK Ideograph */ + ["\u548D", "\u548D"], /* CJK Ideograph */ + ["\u548E", "\u548E"], /* CJK Ideograph */ + ["\u548F", "\u548F"], /* CJK Ideograph */ + ["\u5490", "\u5490"], /* CJK Ideograph */ + ["\u5491", "\u5491"], /* CJK Ideograph */ + ["\u5492", "\u5492"], /* CJK Ideograph */ + ["\u5493", "\u5493"], /* CJK Ideograph */ + ["\u5494", "\u5494"], /* CJK Ideograph */ + ["\u5495", "\u5495"], /* CJK Ideograph */ + ["\u5496", "\u5496"], /* CJK Ideograph */ + ["\u5497", "\u5497"], /* CJK Ideograph */ + ["\u5498", "\u5498"], /* CJK Ideograph */ + ["\u5499", "\u5499"], /* CJK Ideograph */ + ["\u549A", "\u549A"], /* CJK Ideograph */ + ["\u549B", "\u549B"], /* CJK Ideograph */ + ["\u549C", "\u549C"], /* CJK Ideograph */ + ["\u549D", "\u549D"], /* CJK Ideograph */ + ["\u549E", "\u549E"], /* CJK Ideograph */ + ["\u549F", "\u549F"], /* CJK Ideograph */ + ["\u54A0", "\u54A0"], /* CJK Ideograph */ + ["\u54A1", "\u54A1"], /* CJK Ideograph */ + ["\u54A2", "\u54A2"], /* CJK Ideograph */ + ["\u54A3", "\u54A3"], /* CJK Ideograph */ + ["\u54A4", "\u54A4"], /* CJK Ideograph */ + ["\u54A5", "\u54A5"], /* CJK Ideograph */ + ["\u54A6", "\u54A6"], /* CJK Ideograph */ + ["\u54A7", "\u54A7"], /* CJK Ideograph */ + ["\u54A8", "\u54A8"], /* CJK Ideograph */ + ["\u54A9", "\u54A9"], /* CJK Ideograph */ + ["\u54AA", "\u54AA"], /* CJK Ideograph */ + ["\u54AB", "\u54AB"], /* CJK Ideograph */ + ["\u54AC", "\u54AC"], /* CJK Ideograph */ + ["\u54AD", "\u54AD"], /* CJK Ideograph */ + ["\u54AE", "\u54AE"], /* CJK Ideograph */ + ["\u54AF", "\u54AF"], /* CJK Ideograph */ + ["\u54B0", "\u54B0"], /* CJK Ideograph */ + ["\u54B1", "\u54B1"], /* CJK Ideograph */ + ["\u54B2", "\u54B2"], /* CJK Ideograph */ + ["\u54B3", "\u54B3"], /* CJK Ideograph */ + ["\u54B4", "\u54B4"], /* CJK Ideograph */ + ["\u54B5", "\u54B5"], /* CJK Ideograph */ + ["\u54B6", "\u54B6"], /* CJK Ideograph */ + ["\u54B7", "\u54B7"], /* CJK Ideograph */ + ["\u54B8", "\u54B8"], /* CJK Ideograph */ + ["\u54B9", "\u54B9"], /* CJK Ideograph */ + ["\u54BA", "\u54BA"], /* CJK Ideograph */ + ["\u54BB", "\u54BB"], /* CJK Ideograph */ + ["\u54BC", "\u54BC"], /* CJK Ideograph */ + ["\u54BD", "\u54BD"], /* CJK Ideograph */ + ["\u54BE", "\u54BE"], /* CJK Ideograph */ + ["\u54BF", "\u54BF"], /* CJK Ideograph */ + ["\u54C0", "\u54C0"], /* CJK Ideograph */ + ["\u54C1", "\u54C1"], /* CJK Ideograph */ + ["\u54C2", "\u54C2"], /* CJK Ideograph */ + ["\u54C3", "\u54C3"], /* CJK Ideograph */ + ["\u54C4", "\u54C4"], /* CJK Ideograph */ + ["\u54C5", "\u54C5"], /* CJK Ideograph */ + ["\u54C6", "\u54C6"], /* CJK Ideograph */ + ["\u54C7", "\u54C7"], /* CJK Ideograph */ + ["\u54C8", "\u54C8"], /* CJK Ideograph */ + ["\u54C9", "\u54C9"], /* CJK Ideograph */ + ["\u54CA", "\u54CA"], /* CJK Ideograph */ + ["\u54CB", "\u54CB"], /* CJK Ideograph */ + ["\u54CC", "\u54CC"], /* CJK Ideograph */ + ["\u54CD", "\u54CD"], /* CJK Ideograph */ + ["\u54CE", "\u54CE"], /* CJK Ideograph */ + ["\u54CF", "\u54CF"], /* CJK Ideograph */ + ["\u54D0", "\u54D0"], /* CJK Ideograph */ + ["\u54D1", "\u54D1"], /* CJK Ideograph */ + ["\u54D2", "\u54D2"], /* CJK Ideograph */ + ["\u54D3", "\u54D3"], /* CJK Ideograph */ + ["\u54D4", "\u54D4"], /* CJK Ideograph */ + ["\u54D5", "\u54D5"], /* CJK Ideograph */ + ["\u54D6", "\u54D6"], /* CJK Ideograph */ + ["\u54D7", "\u54D7"], /* CJK Ideograph */ + ["\u54D8", "\u54D8"], /* CJK Ideograph */ + ["\u54D9", "\u54D9"], /* CJK Ideograph */ + ["\u54DA", "\u54DA"], /* CJK Ideograph */ + ["\u54DB", "\u54DB"], /* CJK Ideograph */ + ["\u54DC", "\u54DC"], /* CJK Ideograph */ + ["\u54DD", "\u54DD"], /* CJK Ideograph */ + ["\u54DE", "\u54DE"], /* CJK Ideograph */ + ["\u54DF", "\u54DF"], /* CJK Ideograph */ + ["\u54E0", "\u54E0"], /* CJK Ideograph */ + ["\u54E1", "\u54E1"], /* CJK Ideograph */ + ["\u54E2", "\u54E2"], /* CJK Ideograph */ + ["\u54E3", "\u54E3"], /* CJK Ideograph */ + ["\u54E4", "\u54E4"], /* CJK Ideograph */ + ["\u54E5", "\u54E5"], /* CJK Ideograph */ + ["\u54E6", "\u54E6"], /* CJK Ideograph */ + ["\u54E7", "\u54E7"], /* CJK Ideograph */ + ["\u54E8", "\u54E8"], /* CJK Ideograph */ + ["\u54E9", "\u54E9"], /* CJK Ideograph */ + ["\u54EA", "\u54EA"], /* CJK Ideograph */ + ["\u54EB", "\u54EB"], /* CJK Ideograph */ + ["\u54EC", "\u54EC"], /* CJK Ideograph */ + ["\u54ED", "\u54ED"], /* CJK Ideograph */ + ["\u54EE", "\u54EE"], /* CJK Ideograph */ + ["\u54EF", "\u54EF"], /* CJK Ideograph */ + ["\u54F0", "\u54F0"], /* CJK Ideograph */ + ["\u54F1", "\u54F1"], /* CJK Ideograph */ + ["\u54F2", "\u54F2"], /* CJK Ideograph */ + ["\u54F3", "\u54F3"], /* CJK Ideograph */ + ["\u54F4", "\u54F4"], /* CJK Ideograph */ + ["\u54F5", "\u54F5"], /* CJK Ideograph */ + ["\u54F6", "\u54F6"], /* CJK Ideograph */ + ["\u54F7", "\u54F7"], /* CJK Ideograph */ + ["\u54F8", "\u54F8"], /* CJK Ideograph */ + ["\u54F9", "\u54F9"], /* CJK Ideograph */ + ["\u54FA", "\u54FA"], /* CJK Ideograph */ + ["\u54FB", "\u54FB"], /* CJK Ideograph */ + ["\u54FC", "\u54FC"], /* CJK Ideograph */ + ["\u54FD", "\u54FD"], /* CJK Ideograph */ + ["\u54FE", "\u54FE"], /* CJK Ideograph */ + ["\u54FF", "\u54FF"], /* CJK Ideograph */ + ["\u5500", "\u5500"], /* CJK Ideograph */ + ["\u5501", "\u5501"], /* CJK Ideograph */ + ["\u5502", "\u5502"], /* CJK Ideograph */ + ["\u5503", "\u5503"], /* CJK Ideograph */ + ["\u5504", "\u5504"], /* CJK Ideograph */ + ["\u5505", "\u5505"], /* CJK Ideograph */ + ["\u5506", "\u5506"], /* CJK Ideograph */ + ["\u5507", "\u5507"], /* CJK Ideograph */ + ["\u5508", "\u5508"], /* CJK Ideograph */ + ["\u5509", "\u5509"], /* CJK Ideograph */ + ["\u550A", "\u550A"], /* CJK Ideograph */ + ["\u550B", "\u550B"], /* CJK Ideograph */ + ["\u550C", "\u550C"], /* CJK Ideograph */ + ["\u550D", "\u550D"], /* CJK Ideograph */ + ["\u550E", "\u550E"], /* CJK Ideograph */ + ["\u550F", "\u550F"], /* CJK Ideograph */ + ["\u5510", "\u5510"], /* CJK Ideograph */ + ["\u5511", "\u5511"], /* CJK Ideograph */ + ["\u5512", "\u5512"], /* CJK Ideograph */ + ["\u5513", "\u5513"], /* CJK Ideograph */ + ["\u5514", "\u5514"], /* CJK Ideograph */ + ["\u5515", "\u5515"], /* CJK Ideograph */ + ["\u5516", "\u5516"], /* CJK Ideograph */ + ["\u5517", "\u5517"], /* CJK Ideograph */ + ["\u5518", "\u5518"], /* CJK Ideograph */ + ["\u5519", "\u5519"], /* CJK Ideograph */ + ["\u551A", "\u551A"], /* CJK Ideograph */ + ["\u551B", "\u551B"], /* CJK Ideograph */ + ["\u551C", "\u551C"], /* CJK Ideograph */ + ["\u551D", "\u551D"], /* CJK Ideograph */ + ["\u551E", "\u551E"], /* CJK Ideograph */ + ["\u551F", "\u551F"], /* CJK Ideograph */ + ["\u5520", "\u5520"], /* CJK Ideograph */ + ["\u5521", "\u5521"], /* CJK Ideograph */ + ["\u5522", "\u5522"], /* CJK Ideograph */ + ["\u5523", "\u5523"], /* CJK Ideograph */ + ["\u5524", "\u5524"], /* CJK Ideograph */ + ["\u5525", "\u5525"], /* CJK Ideograph */ + ["\u5526", "\u5526"], /* CJK Ideograph */ + ["\u5527", "\u5527"], /* CJK Ideograph */ + ["\u5528", "\u5528"], /* CJK Ideograph */ + ["\u5529", "\u5529"], /* CJK Ideograph */ + ["\u552A", "\u552A"], /* CJK Ideograph */ + ["\u552B", "\u552B"], /* CJK Ideograph */ + ["\u552C", "\u552C"], /* CJK Ideograph */ + ["\u552D", "\u552D"], /* CJK Ideograph */ + ["\u552E", "\u552E"], /* CJK Ideograph */ + ["\u552F", "\u552F"], /* CJK Ideograph */ + ["\u5530", "\u5530"], /* CJK Ideograph */ + ["\u5531", "\u5531"], /* CJK Ideograph */ + ["\u5532", "\u5532"], /* CJK Ideograph */ + ["\u5533", "\u5533"], /* CJK Ideograph */ + ["\u5534", "\u5534"], /* CJK Ideograph */ + ["\u5535", "\u5535"], /* CJK Ideograph */ + ["\u5536", "\u5536"], /* CJK Ideograph */ + ["\u5537", "\u5537"], /* CJK Ideograph */ + ["\u5538", "\u5538"], /* CJK Ideograph */ + ["\u5539", "\u5539"], /* CJK Ideograph */ + ["\u553A", "\u553A"], /* CJK Ideograph */ + ["\u553B", "\u553B"], /* CJK Ideograph */ + ["\u553C", "\u553C"], /* CJK Ideograph */ + ["\u553D", "\u553D"], /* CJK Ideograph */ + ["\u553E", "\u553E"], /* CJK Ideograph */ + ["\u553F", "\u553F"], /* CJK Ideograph */ + ["\u5540", "\u5540"], /* CJK Ideograph */ + ["\u5541", "\u5541"], /* CJK Ideograph */ + ["\u5542", "\u5542"], /* CJK Ideograph */ + ["\u5543", "\u5543"], /* CJK Ideograph */ + ["\u5544", "\u5544"], /* CJK Ideograph */ + ["\u5545", "\u5545"], /* CJK Ideograph */ + ["\u5546", "\u5546"], /* CJK Ideograph */ + ["\u5547", "\u5547"], /* CJK Ideograph */ + ["\u5548", "\u5548"], /* CJK Ideograph */ + ["\u5549", "\u5549"], /* CJK Ideograph */ + ["\u554A", "\u554A"], /* CJK Ideograph */ + ["\u554B", "\u554B"], /* CJK Ideograph */ + ["\u554C", "\u554C"], /* CJK Ideograph */ + ["\u554D", "\u554D"], /* CJK Ideograph */ + ["\u554E", "\u554E"], /* CJK Ideograph */ + ["\u554F", "\u554F"], /* CJK Ideograph */ + ["\u5550", "\u5550"], /* CJK Ideograph */ + ["\u5551", "\u5551"], /* CJK Ideograph */ + ["\u5552", "\u5552"], /* CJK Ideograph */ + ["\u5553", "\u5553"], /* CJK Ideograph */ + ["\u5554", "\u5554"], /* CJK Ideograph */ + ["\u5555", "\u5555"], /* CJK Ideograph */ + ["\u5556", "\u5556"], /* CJK Ideograph */ + ["\u5557", "\u5557"], /* CJK Ideograph */ + ["\u5558", "\u5558"], /* CJK Ideograph */ + ["\u5559", "\u5559"], /* CJK Ideograph */ + ["\u555A", "\u555A"], /* CJK Ideograph */ + ["\u555B", "\u555B"], /* CJK Ideograph */ + ["\u555C", "\u555C"], /* CJK Ideograph */ + ["\u555D", "\u555D"], /* CJK Ideograph */ + ["\u555E", "\u555E"], /* CJK Ideograph */ + ["\u555F", "\u555F"], /* CJK Ideograph */ + ["\u5560", "\u5560"], /* CJK Ideograph */ + ["\u5561", "\u5561"], /* CJK Ideograph */ + ["\u5562", "\u5562"], /* CJK Ideograph */ + ["\u5563", "\u5563"], /* CJK Ideograph */ + ["\u5564", "\u5564"], /* CJK Ideograph */ + ["\u5565", "\u5565"], /* CJK Ideograph */ + ["\u5566", "\u5566"], /* CJK Ideograph */ + ["\u5567", "\u5567"], /* CJK Ideograph */ + ["\u5568", "\u5568"], /* CJK Ideograph */ + ["\u5569", "\u5569"], /* CJK Ideograph */ + ["\u556A", "\u556A"], /* CJK Ideograph */ + ["\u556B", "\u556B"], /* CJK Ideograph */ + ["\u556C", "\u556C"], /* CJK Ideograph */ + ["\u556D", "\u556D"], /* CJK Ideograph */ + ["\u556E", "\u556E"], /* CJK Ideograph */ + ["\u556F", "\u556F"], /* CJK Ideograph */ + ["\u5570", "\u5570"], /* CJK Ideograph */ + ["\u5571", "\u5571"], /* CJK Ideograph */ + ["\u5572", "\u5572"], /* CJK Ideograph */ + ["\u5573", "\u5573"], /* CJK Ideograph */ + ["\u5574", "\u5574"], /* CJK Ideograph */ + ["\u5575", "\u5575"], /* CJK Ideograph */ + ["\u5576", "\u5576"], /* CJK Ideograph */ + ["\u5577", "\u5577"], /* CJK Ideograph */ + ["\u5578", "\u5578"], /* CJK Ideograph */ + ["\u5579", "\u5579"], /* CJK Ideograph */ + ["\u557A", "\u557A"], /* CJK Ideograph */ + ["\u557B", "\u557B"], /* CJK Ideograph */ + ["\u557C", "\u557C"], /* CJK Ideograph */ + ["\u557D", "\u557D"], /* CJK Ideograph */ + ["\u557E", "\u557E"], /* CJK Ideograph */ + ["\u557F", "\u557F"], /* CJK Ideograph */ + ["\u5580", "\u5580"], /* CJK Ideograph */ + ["\u5581", "\u5581"], /* CJK Ideograph */ + ["\u5582", "\u5582"], /* CJK Ideograph */ + ["\u5583", "\u5583"], /* CJK Ideograph */ + ["\u5584", "\u5584"], /* CJK Ideograph */ + ["\u5585", "\u5585"], /* CJK Ideograph */ + ["\u5586", "\u5586"], /* CJK Ideograph */ + ["\u5587", "\u5587"], /* CJK Ideograph */ + ["\u5588", "\u5588"], /* CJK Ideograph */ + ["\u5589", "\u5589"], /* CJK Ideograph */ + ["\u558A", "\u558A"], /* CJK Ideograph */ + ["\u558B", "\u558B"], /* CJK Ideograph */ + ["\u558C", "\u558C"], /* CJK Ideograph */ + ["\u558D", "\u558D"], /* CJK Ideograph */ + ["\u558E", "\u558E"], /* CJK Ideograph */ + ["\u558F", "\u558F"], /* CJK Ideograph */ + ["\u5590", "\u5590"], /* CJK Ideograph */ + ["\u5591", "\u5591"], /* CJK Ideograph */ + ["\u5592", "\u5592"], /* CJK Ideograph */ + ["\u5593", "\u5593"], /* CJK Ideograph */ + ["\u5594", "\u5594"], /* CJK Ideograph */ + ["\u5595", "\u5595"], /* CJK Ideograph */ + ["\u5596", "\u5596"], /* CJK Ideograph */ + ["\u5597", "\u5597"], /* CJK Ideograph */ + ["\u5598", "\u5598"], /* CJK Ideograph */ + ["\u5599", "\u5599"], /* CJK Ideograph */ + ["\u559A", "\u559A"], /* CJK Ideograph */ + ["\u559B", "\u559B"], /* CJK Ideograph */ + ["\u559C", "\u559C"], /* CJK Ideograph */ + ["\u559D", "\u559D"], /* CJK Ideograph */ + ["\u559E", "\u559E"], /* CJK Ideograph */ + ["\u559F", "\u559F"], /* CJK Ideograph */ + ["\u55A0", "\u55A0"], /* CJK Ideograph */ + ["\u55A1", "\u55A1"], /* CJK Ideograph */ + ["\u55A2", "\u55A2"], /* CJK Ideograph */ + ["\u55A3", "\u55A3"], /* CJK Ideograph */ + ["\u55A4", "\u55A4"], /* CJK Ideograph */ + ["\u55A5", "\u55A5"], /* CJK Ideograph */ + ["\u55A6", "\u55A6"], /* CJK Ideograph */ + ["\u55A7", "\u55A7"], /* CJK Ideograph */ + ["\u55A8", "\u55A8"], /* CJK Ideograph */ + ["\u55A9", "\u55A9"], /* CJK Ideograph */ + ["\u55AA", "\u55AA"], /* CJK Ideograph */ + ["\u55AB", "\u55AB"], /* CJK Ideograph */ + ["\u55AC", "\u55AC"], /* CJK Ideograph */ + ["\u55AD", "\u55AD"], /* CJK Ideograph */ + ["\u55AE", "\u55AE"], /* CJK Ideograph */ + ["\u55AF", "\u55AF"], /* CJK Ideograph */ + ["\u55B0", "\u55B0"], /* CJK Ideograph */ + ["\u55B1", "\u55B1"], /* CJK Ideograph */ + ["\u55B2", "\u55B2"], /* CJK Ideograph */ + ["\u55B3", "\u55B3"], /* CJK Ideograph */ + ["\u55B4", "\u55B4"], /* CJK Ideograph */ + ["\u55B5", "\u55B5"], /* CJK Ideograph */ + ["\u55B6", "\u55B6"], /* CJK Ideograph */ + ["\u55B7", "\u55B7"], /* CJK Ideograph */ + ["\u55B8", "\u55B8"], /* CJK Ideograph */ + ["\u55B9", "\u55B9"], /* CJK Ideograph */ + ["\u55BA", "\u55BA"], /* CJK Ideograph */ + ["\u55BB", "\u55BB"], /* CJK Ideograph */ + ["\u55BC", "\u55BC"], /* CJK Ideograph */ + ["\u55BD", "\u55BD"], /* CJK Ideograph */ + ["\u55BE", "\u55BE"], /* CJK Ideograph */ + ["\u55BF", "\u55BF"], /* CJK Ideograph */ + ["\u55C0", "\u55C0"], /* CJK Ideograph */ + ["\u55C1", "\u55C1"], /* CJK Ideograph */ + ["\u55C2", "\u55C2"], /* CJK Ideograph */ + ["\u55C3", "\u55C3"], /* CJK Ideograph */ + ["\u55C4", "\u55C4"], /* CJK Ideograph */ + ["\u55C5", "\u55C5"], /* CJK Ideograph */ + ["\u55C6", "\u55C6"], /* CJK Ideograph */ + ["\u55C7", "\u55C7"], /* CJK Ideograph */ + ["\u55C8", "\u55C8"], /* CJK Ideograph */ + ["\u55C9", "\u55C9"], /* CJK Ideograph */ + ["\u55CA", "\u55CA"], /* CJK Ideograph */ + ["\u55CB", "\u55CB"], /* CJK Ideograph */ + ["\u55CC", "\u55CC"], /* CJK Ideograph */ + ["\u55CD", "\u55CD"], /* CJK Ideograph */ + ["\u55CE", "\u55CE"], /* CJK Ideograph */ + ["\u55CF", "\u55CF"], /* CJK Ideograph */ + ["\u55D0", "\u55D0"], /* CJK Ideograph */ + ["\u55D1", "\u55D1"], /* CJK Ideograph */ + ["\u55D2", "\u55D2"], /* CJK Ideograph */ + ["\u55D3", "\u55D3"], /* CJK Ideograph */ + ["\u55D4", "\u55D4"], /* CJK Ideograph */ + ["\u55D5", "\u55D5"], /* CJK Ideograph */ + ["\u55D6", "\u55D6"], /* CJK Ideograph */ + ["\u55D7", "\u55D7"], /* CJK Ideograph */ + ["\u55D8", "\u55D8"], /* CJK Ideograph */ + ["\u55D9", "\u55D9"], /* CJK Ideograph */ + ["\u55DA", "\u55DA"], /* CJK Ideograph */ + ["\u55DB", "\u55DB"], /* CJK Ideograph */ + ["\u55DC", "\u55DC"], /* CJK Ideograph */ + ["\u55DD", "\u55DD"], /* CJK Ideograph */ + ["\u55DE", "\u55DE"], /* CJK Ideograph */ + ["\u55DF", "\u55DF"], /* CJK Ideograph */ + ["\u55E0", "\u55E0"], /* CJK Ideograph */ + ["\u55E1", "\u55E1"], /* CJK Ideograph */ + ["\u55E2", "\u55E2"], /* CJK Ideograph */ + ["\u55E3", "\u55E3"], /* CJK Ideograph */ + ["\u55E4", "\u55E4"], /* CJK Ideograph */ + ["\u55E5", "\u55E5"], /* CJK Ideograph */ + ["\u55E6", "\u55E6"], /* CJK Ideograph */ + ["\u55E7", "\u55E7"], /* CJK Ideograph */ + ["\u55E8", "\u55E8"], /* CJK Ideograph */ + ["\u55E9", "\u55E9"], /* CJK Ideograph */ + ["\u55EA", "\u55EA"], /* CJK Ideograph */ + ["\u55EB", "\u55EB"], /* CJK Ideograph */ + ["\u55EC", "\u55EC"], /* CJK Ideograph */ + ["\u55ED", "\u55ED"], /* CJK Ideograph */ + ["\u55EE", "\u55EE"], /* CJK Ideograph */ + ["\u55EF", "\u55EF"], /* CJK Ideograph */ + ["\u55F0", "\u55F0"], /* CJK Ideograph */ + ["\u55F1", "\u55F1"], /* CJK Ideograph */ + ["\u55F2", "\u55F2"], /* CJK Ideograph */ + ["\u55F3", "\u55F3"], /* CJK Ideograph */ + ["\u55F4", "\u55F4"], /* CJK Ideograph */ + ["\u55F5", "\u55F5"], /* CJK Ideograph */ + ["\u55F6", "\u55F6"], /* CJK Ideograph */ + ["\u55F7", "\u55F7"], /* CJK Ideograph */ + ["\u55F8", "\u55F8"], /* CJK Ideograph */ + ["\u55F9", "\u55F9"], /* CJK Ideograph */ + ["\u55FA", "\u55FA"], /* CJK Ideograph */ + ["\u55FB", "\u55FB"], /* CJK Ideograph */ + ["\u55FC", "\u55FC"], /* CJK Ideograph */ + ["\u55FD", "\u55FD"], /* CJK Ideograph */ + ["\u55FE", "\u55FE"], /* CJK Ideograph */ + ["\u55FF", "\u55FF"], /* CJK Ideograph */ + ["\u5600", "\u5600"], /* CJK Ideograph */ + ["\u5601", "\u5601"], /* CJK Ideograph */ + ["\u5602", "\u5602"], /* CJK Ideograph */ + ["\u5603", "\u5603"], /* CJK Ideograph */ + ["\u5604", "\u5604"], /* CJK Ideograph */ + ["\u5605", "\u5605"], /* CJK Ideograph */ + ["\u5606", "\u5606"], /* CJK Ideograph */ + ["\u5607", "\u5607"], /* CJK Ideograph */ + ["\u5608", "\u5608"], /* CJK Ideograph */ + ["\u5609", "\u5609"], /* CJK Ideograph */ + ["\u560A", "\u560A"], /* CJK Ideograph */ + ["\u560B", "\u560B"], /* CJK Ideograph */ + ["\u560C", "\u560C"], /* CJK Ideograph */ + ["\u560D", "\u560D"], /* CJK Ideograph */ + ["\u560E", "\u560E"], /* CJK Ideograph */ + ["\u560F", "\u560F"], /* CJK Ideograph */ + ["\u5610", "\u5610"], /* CJK Ideograph */ + ["\u5611", "\u5611"], /* CJK Ideograph */ + ["\u5612", "\u5612"], /* CJK Ideograph */ + ["\u5613", "\u5613"], /* CJK Ideograph */ + ["\u5614", "\u5614"], /* CJK Ideograph */ + ["\u5615", "\u5615"], /* CJK Ideograph */ + ["\u5616", "\u5616"], /* CJK Ideograph */ + ["\u5617", "\u5617"], /* CJK Ideograph */ + ["\u5618", "\u5618"], /* CJK Ideograph */ + ["\u5619", "\u5619"], /* CJK Ideograph */ + ["\u561A", "\u561A"], /* CJK Ideograph */ + ["\u561B", "\u561B"], /* CJK Ideograph */ + ["\u561C", "\u561C"], /* CJK Ideograph */ + ["\u561D", "\u561D"], /* CJK Ideograph */ + ["\u561E", "\u561E"], /* CJK Ideograph */ + ["\u561F", "\u561F"], /* CJK Ideograph */ + ["\u5620", "\u5620"], /* CJK Ideograph */ + ["\u5621", "\u5621"], /* CJK Ideograph */ + ["\u5622", "\u5622"], /* CJK Ideograph */ + ["\u5623", "\u5623"], /* CJK Ideograph */ + ["\u5624", "\u5624"], /* CJK Ideograph */ + ["\u5625", "\u5625"], /* CJK Ideograph */ + ["\u5626", "\u5626"], /* CJK Ideograph */ + ["\u5627", "\u5627"], /* CJK Ideograph */ + ["\u5628", "\u5628"], /* CJK Ideograph */ + ["\u5629", "\u5629"], /* CJK Ideograph */ + ["\u562A", "\u562A"], /* CJK Ideograph */ + ["\u562B", "\u562B"], /* CJK Ideograph */ + ["\u562C", "\u562C"], /* CJK Ideograph */ + ["\u562D", "\u562D"], /* CJK Ideograph */ + ["\u562E", "\u562E"], /* CJK Ideograph */ + ["\u562F", "\u562F"], /* CJK Ideograph */ + ["\u5630", "\u5630"], /* CJK Ideograph */ + ["\u5631", "\u5631"], /* CJK Ideograph */ + ["\u5632", "\u5632"], /* CJK Ideograph */ + ["\u5633", "\u5633"], /* CJK Ideograph */ + ["\u5634", "\u5634"], /* CJK Ideograph */ + ["\u5635", "\u5635"], /* CJK Ideograph */ + ["\u5636", "\u5636"], /* CJK Ideograph */ + ["\u5637", "\u5637"], /* CJK Ideograph */ + ["\u5638", "\u5638"], /* CJK Ideograph */ + ["\u5639", "\u5639"], /* CJK Ideograph */ + ["\u563A", "\u563A"], /* CJK Ideograph */ + ["\u563B", "\u563B"], /* CJK Ideograph */ + ["\u563C", "\u563C"], /* CJK Ideograph */ + ["\u563D", "\u563D"], /* CJK Ideograph */ + ["\u563E", "\u563E"], /* CJK Ideograph */ + ["\u563F", "\u563F"], /* CJK Ideograph */ + ["\u5640", "\u5640"], /* CJK Ideograph */ + ["\u5641", "\u5641"], /* CJK Ideograph */ + ["\u5642", "\u5642"], /* CJK Ideograph */ + ["\u5643", "\u5643"], /* CJK Ideograph */ + ["\u5644", "\u5644"], /* CJK Ideograph */ + ["\u5645", "\u5645"], /* CJK Ideograph */ + ["\u5646", "\u5646"], /* CJK Ideograph */ + ["\u5647", "\u5647"], /* CJK Ideograph */ + ["\u5648", "\u5648"], /* CJK Ideograph */ + ["\u5649", "\u5649"], /* CJK Ideograph */ + ["\u564A", "\u564A"], /* CJK Ideograph */ + ["\u564B", "\u564B"], /* CJK Ideograph */ + ["\u564C", "\u564C"], /* CJK Ideograph */ + ["\u564D", "\u564D"], /* CJK Ideograph */ + ["\u564E", "\u564E"], /* CJK Ideograph */ + ["\u564F", "\u564F"], /* CJK Ideograph */ + ["\u5650", "\u5650"], /* CJK Ideograph */ + ["\u5651", "\u5651"], /* CJK Ideograph */ + ["\u5652", "\u5652"], /* CJK Ideograph */ + ["\u5653", "\u5653"], /* CJK Ideograph */ + ["\u5654", "\u5654"], /* CJK Ideograph */ + ["\u5655", "\u5655"], /* CJK Ideograph */ + ["\u5656", "\u5656"], /* CJK Ideograph */ + ["\u5657", "\u5657"], /* CJK Ideograph */ + ["\u5658", "\u5658"], /* CJK Ideograph */ + ["\u5659", "\u5659"], /* CJK Ideograph */ + ["\u565A", "\u565A"], /* CJK Ideograph */ + ["\u565B", "\u565B"], /* CJK Ideograph */ + ["\u565C", "\u565C"], /* CJK Ideograph */ + ["\u565D", "\u565D"], /* CJK Ideograph */ + ["\u565E", "\u565E"], /* CJK Ideograph */ + ["\u565F", "\u565F"], /* CJK Ideograph */ + ["\u5660", "\u5660"], /* CJK Ideograph */ + ["\u5661", "\u5661"], /* CJK Ideograph */ + ["\u5662", "\u5662"], /* CJK Ideograph */ + ["\u5663", "\u5663"], /* CJK Ideograph */ + ["\u5664", "\u5664"], /* CJK Ideograph */ + ["\u5665", "\u5665"], /* CJK Ideograph */ + ["\u5666", "\u5666"], /* CJK Ideograph */ + ["\u5667", "\u5667"], /* CJK Ideograph */ + ["\u5668", "\u5668"], /* CJK Ideograph */ + ["\u5669", "\u5669"], /* CJK Ideograph */ + ["\u566A", "\u566A"], /* CJK Ideograph */ + ["\u566B", "\u566B"], /* CJK Ideograph */ + ["\u566C", "\u566C"], /* CJK Ideograph */ + ["\u566D", "\u566D"], /* CJK Ideograph */ + ["\u566E", "\u566E"], /* CJK Ideograph */ + ["\u566F", "\u566F"], /* CJK Ideograph */ + ["\u5670", "\u5670"], /* CJK Ideograph */ + ["\u5671", "\u5671"], /* CJK Ideograph */ + ["\u5672", "\u5672"], /* CJK Ideograph */ + ["\u5673", "\u5673"], /* CJK Ideograph */ + ["\u5674", "\u5674"], /* CJK Ideograph */ + ["\u5675", "\u5675"], /* CJK Ideograph */ + ["\u5676", "\u5676"], /* CJK Ideograph */ + ["\u5677", "\u5677"], /* CJK Ideograph */ + ["\u5678", "\u5678"], /* CJK Ideograph */ + ["\u5679", "\u5679"], /* CJK Ideograph */ + ["\u567A", "\u567A"], /* CJK Ideograph */ + ["\u567B", "\u567B"], /* CJK Ideograph */ + ["\u567C", "\u567C"], /* CJK Ideograph */ + ["\u567D", "\u567D"], /* CJK Ideograph */ + ["\u567E", "\u567E"], /* CJK Ideograph */ + ["\u567F", "\u567F"], /* CJK Ideograph */ + ["\u5680", "\u5680"], /* CJK Ideograph */ + ["\u5681", "\u5681"], /* CJK Ideograph */ + ["\u5682", "\u5682"], /* CJK Ideograph */ + ["\u5683", "\u5683"], /* CJK Ideograph */ + ["\u5684", "\u5684"], /* CJK Ideograph */ + ["\u5685", "\u5685"], /* CJK Ideograph */ + ["\u5686", "\u5686"], /* CJK Ideograph */ + ["\u5687", "\u5687"], /* CJK Ideograph */ + ["\u5688", "\u5688"], /* CJK Ideograph */ + ["\u5689", "\u5689"], /* CJK Ideograph */ + ["\u568A", "\u568A"], /* CJK Ideograph */ + ["\u568B", "\u568B"], /* CJK Ideograph */ + ["\u568C", "\u568C"], /* CJK Ideograph */ + ["\u568D", "\u568D"], /* CJK Ideograph */ + ["\u568E", "\u568E"], /* CJK Ideograph */ + ["\u568F", "\u568F"], /* CJK Ideograph */ + ["\u5690", "\u5690"], /* CJK Ideograph */ + ["\u5691", "\u5691"], /* CJK Ideograph */ + ["\u5692", "\u5692"], /* CJK Ideograph */ + ["\u5693", "\u5693"], /* CJK Ideograph */ + ["\u5694", "\u5694"], /* CJK Ideograph */ + ["\u5695", "\u5695"], /* CJK Ideograph */ + ["\u5696", "\u5696"], /* CJK Ideograph */ + ["\u5697", "\u5697"], /* CJK Ideograph */ + ["\u5698", "\u5698"], /* CJK Ideograph */ + ["\u5699", "\u5699"], /* CJK Ideograph */ + ["\u569A", "\u569A"], /* CJK Ideograph */ + ["\u569B", "\u569B"], /* CJK Ideograph */ + ["\u569C", "\u569C"], /* CJK Ideograph */ + ["\u569D", "\u569D"], /* CJK Ideograph */ + ["\u569E", "\u569E"], /* CJK Ideograph */ + ["\u569F", "\u569F"], /* CJK Ideograph */ + ["\u56A0", "\u56A0"], /* CJK Ideograph */ + ["\u56A1", "\u56A1"], /* CJK Ideograph */ + ["\u56A2", "\u56A2"], /* CJK Ideograph */ + ["\u56A3", "\u56A3"], /* CJK Ideograph */ + ["\u56A4", "\u56A4"], /* CJK Ideograph */ + ["\u56A5", "\u56A5"], /* CJK Ideograph */ + ["\u56A6", "\u56A6"], /* CJK Ideograph */ + ["\u56A7", "\u56A7"], /* CJK Ideograph */ + ["\u56A8", "\u56A8"], /* CJK Ideograph */ + ["\u56A9", "\u56A9"], /* CJK Ideograph */ + ["\u56AA", "\u56AA"], /* CJK Ideograph */ + ["\u56AB", "\u56AB"], /* CJK Ideograph */ + ["\u56AC", "\u56AC"], /* CJK Ideograph */ + ["\u56AD", "\u56AD"], /* CJK Ideograph */ + ["\u56AE", "\u56AE"], /* CJK Ideograph */ + ["\u56AF", "\u56AF"], /* CJK Ideograph */ + ["\u56B0", "\u56B0"], /* CJK Ideograph */ + ["\u56B1", "\u56B1"], /* CJK Ideograph */ + ["\u56B2", "\u56B2"], /* CJK Ideograph */ + ["\u56B3", "\u56B3"], /* CJK Ideograph */ + ["\u56B4", "\u56B4"], /* CJK Ideograph */ + ["\u56B5", "\u56B5"], /* CJK Ideograph */ + ["\u56B6", "\u56B6"], /* CJK Ideograph */ + ["\u56B7", "\u56B7"], /* CJK Ideograph */ + ["\u56B8", "\u56B8"], /* CJK Ideograph */ + ["\u56B9", "\u56B9"], /* CJK Ideograph */ + ["\u56BA", "\u56BA"], /* CJK Ideograph */ + ["\u56BB", "\u56BB"], /* CJK Ideograph */ + ["\u56BC", "\u56BC"], /* CJK Ideograph */ + ["\u56BD", "\u56BD"], /* CJK Ideograph */ + ["\u56BE", "\u56BE"], /* CJK Ideograph */ + ["\u56BF", "\u56BF"], /* CJK Ideograph */ + ["\u56C0", "\u56C0"], /* CJK Ideograph */ + ["\u56C1", "\u56C1"], /* CJK Ideograph */ + ["\u56C2", "\u56C2"], /* CJK Ideograph */ + ["\u56C3", "\u56C3"], /* CJK Ideograph */ + ["\u56C4", "\u56C4"], /* CJK Ideograph */ + ["\u56C5", "\u56C5"], /* CJK Ideograph */ + ["\u56C6", "\u56C6"], /* CJK Ideograph */ + ["\u56C7", "\u56C7"], /* CJK Ideograph */ + ["\u56C8", "\u56C8"], /* CJK Ideograph */ + ["\u56C9", "\u56C9"], /* CJK Ideograph */ + ["\u56CA", "\u56CA"], /* CJK Ideograph */ + ["\u56CB", "\u56CB"], /* CJK Ideograph */ + ["\u56CC", "\u56CC"], /* CJK Ideograph */ + ["\u56CD", "\u56CD"], /* CJK Ideograph */ + ["\u56CE", "\u56CE"], /* CJK Ideograph */ + ["\u56CF", "\u56CF"], /* CJK Ideograph */ + ["\u56D0", "\u56D0"], /* CJK Ideograph */ + ["\u56D1", "\u56D1"], /* CJK Ideograph */ + ["\u56D2", "\u56D2"], /* CJK Ideograph */ + ["\u56D3", "\u56D3"], /* CJK Ideograph */ + ["\u56D4", "\u56D4"], /* CJK Ideograph */ + ["\u56D5", "\u56D5"], /* CJK Ideograph */ + ["\u56D6", "\u56D6"], /* CJK Ideograph */ + ["\u56D7", "\u56D7"], /* CJK Ideograph */ + ["\u56D8", "\u56D8"], /* CJK Ideograph */ + ["\u56D9", "\u56D9"], /* CJK Ideograph */ + ["\u56DA", "\u56DA"], /* CJK Ideograph */ + ["\u56DB", "\u56DB"], /* CJK Ideograph */ + ["\u56DC", "\u56DC"], /* CJK Ideograph */ + ["\u56DD", "\u56DD"], /* CJK Ideograph */ + ["\u56DE", "\u56DE"], /* CJK Ideograph */ + ["\u56DF", "\u56DF"], /* CJK Ideograph */ + ["\u56E0", "\u56E0"], /* CJK Ideograph */ + ["\u56E1", "\u56E1"], /* CJK Ideograph */ + ["\u56E2", "\u56E2"], /* CJK Ideograph */ + ["\u56E3", "\u56E3"], /* CJK Ideograph */ + ["\u56E4", "\u56E4"], /* CJK Ideograph */ + ["\u56E5", "\u56E5"], /* CJK Ideograph */ + ["\u56E6", "\u56E6"], /* CJK Ideograph */ + ["\u56E7", "\u56E7"], /* CJK Ideograph */ + ["\u56E8", "\u56E8"], /* CJK Ideograph */ + ["\u56E9", "\u56E9"], /* CJK Ideograph */ + ["\u56EA", "\u56EA"], /* CJK Ideograph */ + ["\u56EB", "\u56EB"], /* CJK Ideograph */ + ["\u56EC", "\u56EC"], /* CJK Ideograph */ + ["\u56ED", "\u56ED"], /* CJK Ideograph */ + ["\u56EE", "\u56EE"], /* CJK Ideograph */ + ["\u56EF", "\u56EF"], /* CJK Ideograph */ + ["\u56F0", "\u56F0"], /* CJK Ideograph */ + ["\u56F1", "\u56F1"], /* CJK Ideograph */ + ["\u56F2", "\u56F2"], /* CJK Ideograph */ + ["\u56F3", "\u56F3"], /* CJK Ideograph */ + ["\u56F4", "\u56F4"], /* CJK Ideograph */ + ["\u56F5", "\u56F5"], /* CJK Ideograph */ + ["\u56F6", "\u56F6"], /* CJK Ideograph */ + ["\u56F7", "\u56F7"], /* CJK Ideograph */ + ["\u56F8", "\u56F8"], /* CJK Ideograph */ + ["\u56F9", "\u56F9"], /* CJK Ideograph */ + ["\u56FA", "\u56FA"], /* CJK Ideograph */ + ["\u56FB", "\u56FB"], /* CJK Ideograph */ + ["\u56FC", "\u56FC"], /* CJK Ideograph */ + ["\u56FD", "\u56FD"], /* CJK Ideograph */ + ["\u56FE", "\u56FE"], /* CJK Ideograph */ + ["\u56FF", "\u56FF"], /* CJK Ideograph */ + ["\u5700", "\u5700"], /* CJK Ideograph */ + ["\u5701", "\u5701"], /* CJK Ideograph */ + ["\u5702", "\u5702"], /* CJK Ideograph */ + ["\u5703", "\u5703"], /* CJK Ideograph */ + ["\u5704", "\u5704"], /* CJK Ideograph */ + ["\u5705", "\u5705"], /* CJK Ideograph */ + ["\u5706", "\u5706"], /* CJK Ideograph */ + ["\u5707", "\u5707"], /* CJK Ideograph */ + ["\u5708", "\u5708"], /* CJK Ideograph */ + ["\u5709", "\u5709"], /* CJK Ideograph */ + ["\u570A", "\u570A"], /* CJK Ideograph */ + ["\u570B", "\u570B"], /* CJK Ideograph */ + ["\u570C", "\u570C"], /* CJK Ideograph */ + ["\u570D", "\u570D"], /* CJK Ideograph */ + ["\u570E", "\u570E"], /* CJK Ideograph */ + ["\u570F", "\u570F"], /* CJK Ideograph */ + ["\u5710", "\u5710"], /* CJK Ideograph */ + ["\u5711", "\u5711"], /* CJK Ideograph */ + ["\u5712", "\u5712"], /* CJK Ideograph */ + ["\u5713", "\u5713"], /* CJK Ideograph */ + ["\u5714", "\u5714"], /* CJK Ideograph */ + ["\u5715", "\u5715"], /* CJK Ideograph */ + ["\u5716", "\u5716"], /* CJK Ideograph */ + ["\u5717", "\u5717"], /* CJK Ideograph */ + ["\u5718", "\u5718"], /* CJK Ideograph */ + ["\u5719", "\u5719"], /* CJK Ideograph */ + ["\u571A", "\u571A"], /* CJK Ideograph */ + ["\u571B", "\u571B"], /* CJK Ideograph */ + ["\u571C", "\u571C"], /* CJK Ideograph */ + ["\u571D", "\u571D"], /* CJK Ideograph */ + ["\u571E", "\u571E"], /* CJK Ideograph */ + ["\u571F", "\u571F"], /* CJK Ideograph */ + ["\u5720", "\u5720"], /* CJK Ideograph */ + ["\u5721", "\u5721"], /* CJK Ideograph */ + ["\u5722", "\u5722"], /* CJK Ideograph */ + ["\u5723", "\u5723"], /* CJK Ideograph */ + ["\u5724", "\u5724"], /* CJK Ideograph */ + ["\u5725", "\u5725"], /* CJK Ideograph */ + ["\u5726", "\u5726"], /* CJK Ideograph */ + ["\u5727", "\u5727"], /* CJK Ideograph */ + ["\u5728", "\u5728"], /* CJK Ideograph */ + ["\u5729", "\u5729"], /* CJK Ideograph */ + ["\u572A", "\u572A"], /* CJK Ideograph */ + ["\u572B", "\u572B"], /* CJK Ideograph */ + ["\u572C", "\u572C"], /* CJK Ideograph */ + ["\u572D", "\u572D"], /* CJK Ideograph */ + ["\u572E", "\u572E"], /* CJK Ideograph */ + ["\u572F", "\u572F"], /* CJK Ideograph */ + ["\u5730", "\u5730"], /* CJK Ideograph */ + ["\u5731", "\u5731"], /* CJK Ideograph */ + ["\u5732", "\u5732"], /* CJK Ideograph */ + ["\u5733", "\u5733"], /* CJK Ideograph */ + ["\u5734", "\u5734"], /* CJK Ideograph */ + ["\u5735", "\u5735"], /* CJK Ideograph */ + ["\u5736", "\u5736"], /* CJK Ideograph */ + ["\u5737", "\u5737"], /* CJK Ideograph */ + ["\u5738", "\u5738"], /* CJK Ideograph */ + ["\u5739", "\u5739"], /* CJK Ideograph */ + ["\u573A", "\u573A"], /* CJK Ideograph */ + ["\u573B", "\u573B"], /* CJK Ideograph */ + ["\u573C", "\u573C"], /* CJK Ideograph */ + ["\u573D", "\u573D"], /* CJK Ideograph */ + ["\u573E", "\u573E"], /* CJK Ideograph */ + ["\u573F", "\u573F"], /* CJK Ideograph */ + ["\u5740", "\u5740"], /* CJK Ideograph */ + ["\u5741", "\u5741"], /* CJK Ideograph */ + ["\u5742", "\u5742"], /* CJK Ideograph */ + ["\u5743", "\u5743"], /* CJK Ideograph */ + ["\u5744", "\u5744"], /* CJK Ideograph */ + ["\u5745", "\u5745"], /* CJK Ideograph */ + ["\u5746", "\u5746"], /* CJK Ideograph */ + ["\u5747", "\u5747"], /* CJK Ideograph */ + ["\u5748", "\u5748"], /* CJK Ideograph */ + ["\u5749", "\u5749"], /* CJK Ideograph */ + ["\u574A", "\u574A"], /* CJK Ideograph */ + ["\u574B", "\u574B"], /* CJK Ideograph */ + ["\u574C", "\u574C"], /* CJK Ideograph */ + ["\u574D", "\u574D"], /* CJK Ideograph */ + ["\u574E", "\u574E"], /* CJK Ideograph */ + ["\u574F", "\u574F"], /* CJK Ideograph */ + ["\u5750", "\u5750"], /* CJK Ideograph */ + ["\u5751", "\u5751"], /* CJK Ideograph */ + ["\u5752", "\u5752"], /* CJK Ideograph */ + ["\u5753", "\u5753"], /* CJK Ideograph */ + ["\u5754", "\u5754"], /* CJK Ideograph */ + ["\u5755", "\u5755"], /* CJK Ideograph */ + ["\u5756", "\u5756"], /* CJK Ideograph */ + ["\u5757", "\u5757"], /* CJK Ideograph */ + ["\u5758", "\u5758"], /* CJK Ideograph */ + ["\u5759", "\u5759"], /* CJK Ideograph */ + ["\u575A", "\u575A"], /* CJK Ideograph */ + ["\u575B", "\u575B"], /* CJK Ideograph */ + ["\u575C", "\u575C"], /* CJK Ideograph */ + ["\u575D", "\u575D"], /* CJK Ideograph */ + ["\u575E", "\u575E"], /* CJK Ideograph */ + ["\u575F", "\u575F"], /* CJK Ideograph */ + ["\u5760", "\u5760"], /* CJK Ideograph */ + ["\u5761", "\u5761"], /* CJK Ideograph */ + ["\u5762", "\u5762"], /* CJK Ideograph */ + ["\u5763", "\u5763"], /* CJK Ideograph */ + ["\u5764", "\u5764"], /* CJK Ideograph */ + ["\u5765", "\u5765"], /* CJK Ideograph */ + ["\u5766", "\u5766"], /* CJK Ideograph */ + ["\u5767", "\u5767"], /* CJK Ideograph */ + ["\u5768", "\u5768"], /* CJK Ideograph */ + ["\u5769", "\u5769"], /* CJK Ideograph */ + ["\u576A", "\u576A"], /* CJK Ideograph */ + ["\u576B", "\u576B"], /* CJK Ideograph */ + ["\u576C", "\u576C"], /* CJK Ideograph */ + ["\u576D", "\u576D"], /* CJK Ideograph */ + ["\u576E", "\u576E"], /* CJK Ideograph */ + ["\u576F", "\u576F"], /* CJK Ideograph */ + ["\u5770", "\u5770"], /* CJK Ideograph */ + ["\u5771", "\u5771"], /* CJK Ideograph */ + ["\u5772", "\u5772"], /* CJK Ideograph */ + ["\u5773", "\u5773"], /* CJK Ideograph */ + ["\u5774", "\u5774"], /* CJK Ideograph */ + ["\u5775", "\u5775"], /* CJK Ideograph */ + ["\u5776", "\u5776"], /* CJK Ideograph */ + ["\u5777", "\u5777"], /* CJK Ideograph */ + ["\u5778", "\u5778"], /* CJK Ideograph */ + ["\u5779", "\u5779"], /* CJK Ideograph */ + ["\u577A", "\u577A"], /* CJK Ideograph */ + ["\u577B", "\u577B"], /* CJK Ideograph */ + ["\u577C", "\u577C"], /* CJK Ideograph */ + ["\u577D", "\u577D"], /* CJK Ideograph */ + ["\u577E", "\u577E"], /* CJK Ideograph */ + ["\u577F", "\u577F"], /* CJK Ideograph */ + ["\u5780", "\u5780"], /* CJK Ideograph */ + ["\u5781", "\u5781"], /* CJK Ideograph */ + ["\u5782", "\u5782"], /* CJK Ideograph */ + ["\u5783", "\u5783"], /* CJK Ideograph */ + ["\u5784", "\u5784"], /* CJK Ideograph */ + ["\u5785", "\u5785"], /* CJK Ideograph */ + ["\u5786", "\u5786"], /* CJK Ideograph */ + ["\u5787", "\u5787"], /* CJK Ideograph */ + ["\u5788", "\u5788"], /* CJK Ideograph */ + ["\u5789", "\u5789"], /* CJK Ideograph */ + ["\u578A", "\u578A"], /* CJK Ideograph */ + ["\u578B", "\u578B"], /* CJK Ideograph */ + ["\u578C", "\u578C"], /* CJK Ideograph */ + ["\u578D", "\u578D"], /* CJK Ideograph */ + ["\u578E", "\u578E"], /* CJK Ideograph */ + ["\u578F", "\u578F"], /* CJK Ideograph */ + ["\u5790", "\u5790"], /* CJK Ideograph */ + ["\u5791", "\u5791"], /* CJK Ideograph */ + ["\u5792", "\u5792"], /* CJK Ideograph */ + ["\u5793", "\u5793"], /* CJK Ideograph */ + ["\u5794", "\u5794"], /* CJK Ideograph */ + ["\u5795", "\u5795"], /* CJK Ideograph */ + ["\u5796", "\u5796"], /* CJK Ideograph */ + ["\u5797", "\u5797"], /* CJK Ideograph */ + ["\u5798", "\u5798"], /* CJK Ideograph */ + ["\u5799", "\u5799"], /* CJK Ideograph */ + ["\u579A", "\u579A"], /* CJK Ideograph */ + ["\u579B", "\u579B"], /* CJK Ideograph */ + ["\u579C", "\u579C"], /* CJK Ideograph */ + ["\u579D", "\u579D"], /* CJK Ideograph */ + ["\u579E", "\u579E"], /* CJK Ideograph */ + ["\u579F", "\u579F"], /* CJK Ideograph */ + ["\u57A0", "\u57A0"], /* CJK Ideograph */ + ["\u57A1", "\u57A1"], /* CJK Ideograph */ + ["\u57A2", "\u57A2"], /* CJK Ideograph */ + ["\u57A3", "\u57A3"], /* CJK Ideograph */ + ["\u57A4", "\u57A4"], /* CJK Ideograph */ + ["\u57A5", "\u57A5"], /* CJK Ideograph */ + ["\u57A6", "\u57A6"], /* CJK Ideograph */ + ["\u57A7", "\u57A7"], /* CJK Ideograph */ + ["\u57A8", "\u57A8"], /* CJK Ideograph */ + ["\u57A9", "\u57A9"], /* CJK Ideograph */ + ["\u57AA", "\u57AA"], /* CJK Ideograph */ + ["\u57AB", "\u57AB"], /* CJK Ideograph */ + ["\u57AC", "\u57AC"], /* CJK Ideograph */ + ["\u57AD", "\u57AD"], /* CJK Ideograph */ + ["\u57AE", "\u57AE"], /* CJK Ideograph */ + ["\u57AF", "\u57AF"], /* CJK Ideograph */ + ["\u57B0", "\u57B0"], /* CJK Ideograph */ + ["\u57B1", "\u57B1"], /* CJK Ideograph */ + ["\u57B2", "\u57B2"], /* CJK Ideograph */ + ["\u57B3", "\u57B3"], /* CJK Ideograph */ + ["\u57B4", "\u57B4"], /* CJK Ideograph */ + ["\u57B5", "\u57B5"], /* CJK Ideograph */ + ["\u57B6", "\u57B6"], /* CJK Ideograph */ + ["\u57B7", "\u57B7"], /* CJK Ideograph */ + ["\u57B8", "\u57B8"], /* CJK Ideograph */ + ["\u57B9", "\u57B9"], /* CJK Ideograph */ + ["\u57BA", "\u57BA"], /* CJK Ideograph */ + ["\u57BB", "\u57BB"], /* CJK Ideograph */ + ["\u57BC", "\u57BC"], /* CJK Ideograph */ + ["\u57BD", "\u57BD"], /* CJK Ideograph */ + ["\u57BE", "\u57BE"], /* CJK Ideograph */ + ["\u57BF", "\u57BF"], /* CJK Ideograph */ + ["\u57C0", "\u57C0"], /* CJK Ideograph */ + ["\u57C1", "\u57C1"], /* CJK Ideograph */ + ["\u57C2", "\u57C2"], /* CJK Ideograph */ + ["\u57C3", "\u57C3"], /* CJK Ideograph */ + ["\u57C4", "\u57C4"], /* CJK Ideograph */ + ["\u57C5", "\u57C5"], /* CJK Ideograph */ + ["\u57C6", "\u57C6"], /* CJK Ideograph */ + ["\u57C7", "\u57C7"], /* CJK Ideograph */ + ["\u57C8", "\u57C8"], /* CJK Ideograph */ + ["\u57C9", "\u57C9"], /* CJK Ideograph */ + ["\u57CA", "\u57CA"], /* CJK Ideograph */ + ["\u57CB", "\u57CB"], /* CJK Ideograph */ + ["\u57CC", "\u57CC"], /* CJK Ideograph */ + ["\u57CD", "\u57CD"], /* CJK Ideograph */ + ["\u57CE", "\u57CE"], /* CJK Ideograph */ + ["\u57CF", "\u57CF"], /* CJK Ideograph */ + ["\u57D0", "\u57D0"], /* CJK Ideograph */ + ["\u57D1", "\u57D1"], /* CJK Ideograph */ + ["\u57D2", "\u57D2"], /* CJK Ideograph */ + ["\u57D3", "\u57D3"], /* CJK Ideograph */ + ["\u57D4", "\u57D4"], /* CJK Ideograph */ + ["\u57D5", "\u57D5"], /* CJK Ideograph */ + ["\u57D6", "\u57D6"], /* CJK Ideograph */ + ["\u57D7", "\u57D7"], /* CJK Ideograph */ + ["\u57D8", "\u57D8"], /* CJK Ideograph */ + ["\u57D9", "\u57D9"], /* CJK Ideograph */ + ["\u57DA", "\u57DA"], /* CJK Ideograph */ + ["\u57DB", "\u57DB"], /* CJK Ideograph */ + ["\u57DC", "\u57DC"], /* CJK Ideograph */ + ["\u57DD", "\u57DD"], /* CJK Ideograph */ + ["\u57DE", "\u57DE"], /* CJK Ideograph */ + ["\u57DF", "\u57DF"], /* CJK Ideograph */ + ["\u57E0", "\u57E0"], /* CJK Ideograph */ + ["\u57E1", "\u57E1"], /* CJK Ideograph */ + ["\u57E2", "\u57E2"], /* CJK Ideograph */ + ["\u57E3", "\u57E3"], /* CJK Ideograph */ + ["\u57E4", "\u57E4"], /* CJK Ideograph */ + ["\u57E5", "\u57E5"], /* CJK Ideograph */ + ["\u57E6", "\u57E6"], /* CJK Ideograph */ + ["\u57E7", "\u57E7"], /* CJK Ideograph */ + ["\u57E8", "\u57E8"], /* CJK Ideograph */ + ["\u57E9", "\u57E9"], /* CJK Ideograph */ + ["\u57EA", "\u57EA"], /* CJK Ideograph */ + ["\u57EB", "\u57EB"], /* CJK Ideograph */ + ["\u57EC", "\u57EC"], /* CJK Ideograph */ + ["\u57ED", "\u57ED"], /* CJK Ideograph */ + ["\u57EE", "\u57EE"], /* CJK Ideograph */ + ["\u57EF", "\u57EF"], /* CJK Ideograph */ + ["\u57F0", "\u57F0"], /* CJK Ideograph */ + ["\u57F1", "\u57F1"], /* CJK Ideograph */ + ["\u57F2", "\u57F2"], /* CJK Ideograph */ + ["\u57F3", "\u57F3"], /* CJK Ideograph */ + ["\u57F4", "\u57F4"], /* CJK Ideograph */ + ["\u57F5", "\u57F5"], /* CJK Ideograph */ + ["\u57F6", "\u57F6"], /* CJK Ideograph */ + ["\u57F7", "\u57F7"], /* CJK Ideograph */ + ["\u57F8", "\u57F8"], /* CJK Ideograph */ + ["\u57F9", "\u57F9"], /* CJK Ideograph */ + ["\u57FA", "\u57FA"], /* CJK Ideograph */ + ["\u57FB", "\u57FB"], /* CJK Ideograph */ + ["\u57FC", "\u57FC"], /* CJK Ideograph */ + ["\u57FD", "\u57FD"], /* CJK Ideograph */ + ["\u57FE", "\u57FE"], /* CJK Ideograph */ + ["\u57FF", "\u57FF"], /* CJK Ideograph */ + ["\u5800", "\u5800"], /* CJK Ideograph */ + ["\u5801", "\u5801"], /* CJK Ideograph */ + ["\u5802", "\u5802"], /* CJK Ideograph */ + ["\u5803", "\u5803"], /* CJK Ideograph */ + ["\u5804", "\u5804"], /* CJK Ideograph */ + ["\u5805", "\u5805"], /* CJK Ideograph */ + ["\u5806", "\u5806"], /* CJK Ideograph */ + ["\u5807", "\u5807"], /* CJK Ideograph */ + ["\u5808", "\u5808"], /* CJK Ideograph */ + ["\u5809", "\u5809"], /* CJK Ideograph */ + ["\u580A", "\u580A"], /* CJK Ideograph */ + ["\u580B", "\u580B"], /* CJK Ideograph */ + ["\u580C", "\u580C"], /* CJK Ideograph */ + ["\u580D", "\u580D"], /* CJK Ideograph */ + ["\u580E", "\u580E"], /* CJK Ideograph */ + ["\u580F", "\u580F"], /* CJK Ideograph */ + ["\u5810", "\u5810"], /* CJK Ideograph */ + ["\u5811", "\u5811"], /* CJK Ideograph */ + ["\u5812", "\u5812"], /* CJK Ideograph */ + ["\u5813", "\u5813"], /* CJK Ideograph */ + ["\u5814", "\u5814"], /* CJK Ideograph */ + ["\u5815", "\u5815"], /* CJK Ideograph */ + ["\u5816", "\u5816"], /* CJK Ideograph */ + ["\u5817", "\u5817"], /* CJK Ideograph */ + ["\u5818", "\u5818"], /* CJK Ideograph */ + ["\u5819", "\u5819"], /* CJK Ideograph */ + ["\u581A", "\u581A"], /* CJK Ideograph */ + ["\u581B", "\u581B"], /* CJK Ideograph */ + ["\u581C", "\u581C"], /* CJK Ideograph */ + ["\u581D", "\u581D"], /* CJK Ideograph */ + ["\u581E", "\u581E"], /* CJK Ideograph */ + ["\u581F", "\u581F"], /* CJK Ideograph */ + ["\u5820", "\u5820"], /* CJK Ideograph */ + ["\u5821", "\u5821"], /* CJK Ideograph */ + ["\u5822", "\u5822"], /* CJK Ideograph */ + ["\u5823", "\u5823"], /* CJK Ideograph */ + ["\u5824", "\u5824"], /* CJK Ideograph */ + ["\u5825", "\u5825"], /* CJK Ideograph */ + ["\u5826", "\u5826"], /* CJK Ideograph */ + ["\u5827", "\u5827"], /* CJK Ideograph */ + ["\u5828", "\u5828"], /* CJK Ideograph */ + ["\u5829", "\u5829"], /* CJK Ideograph */ + ["\u582A", "\u582A"], /* CJK Ideograph */ + ["\u582B", "\u582B"], /* CJK Ideograph */ + ["\u582C", "\u582C"], /* CJK Ideograph */ + ["\u582D", "\u582D"], /* CJK Ideograph */ + ["\u582E", "\u582E"], /* CJK Ideograph */ + ["\u582F", "\u582F"], /* CJK Ideograph */ + ["\u5830", "\u5830"], /* CJK Ideograph */ + ["\u5831", "\u5831"], /* CJK Ideograph */ + ["\u5832", "\u5832"], /* CJK Ideograph */ + ["\u5833", "\u5833"], /* CJK Ideograph */ + ["\u5834", "\u5834"], /* CJK Ideograph */ + ["\u5835", "\u5835"], /* CJK Ideograph */ + ["\u5836", "\u5836"], /* CJK Ideograph */ + ["\u5837", "\u5837"], /* CJK Ideograph */ + ["\u5838", "\u5838"], /* CJK Ideograph */ + ["\u5839", "\u5839"], /* CJK Ideograph */ + ["\u583A", "\u583A"], /* CJK Ideograph */ + ["\u583B", "\u583B"], /* CJK Ideograph */ + ["\u583C", "\u583C"], /* CJK Ideograph */ + ["\u583D", "\u583D"], /* CJK Ideograph */ + ["\u583E", "\u583E"], /* CJK Ideograph */ + ["\u583F", "\u583F"], /* CJK Ideograph */ + ["\u5840", "\u5840"], /* CJK Ideograph */ + ["\u5841", "\u5841"], /* CJK Ideograph */ + ["\u5842", "\u5842"], /* CJK Ideograph */ + ["\u5843", "\u5843"], /* CJK Ideograph */ + ["\u5844", "\u5844"], /* CJK Ideograph */ + ["\u5845", "\u5845"], /* CJK Ideograph */ + ["\u5846", "\u5846"], /* CJK Ideograph */ + ["\u5847", "\u5847"], /* CJK Ideograph */ + ["\u5848", "\u5848"], /* CJK Ideograph */ + ["\u5849", "\u5849"], /* CJK Ideograph */ + ["\u584A", "\u584A"], /* CJK Ideograph */ + ["\u584B", "\u584B"], /* CJK Ideograph */ + ["\u584C", "\u584C"], /* CJK Ideograph */ + ["\u584D", "\u584D"], /* CJK Ideograph */ + ["\u584E", "\u584E"], /* CJK Ideograph */ + ["\u584F", "\u584F"], /* CJK Ideograph */ + ["\u5850", "\u5850"], /* CJK Ideograph */ + ["\u5851", "\u5851"], /* CJK Ideograph */ + ["\u5852", "\u5852"], /* CJK Ideograph */ + ["\u5853", "\u5853"], /* CJK Ideograph */ + ["\u5854", "\u5854"], /* CJK Ideograph */ + ["\u5855", "\u5855"], /* CJK Ideograph */ + ["\u5856", "\u5856"], /* CJK Ideograph */ + ["\u5857", "\u5857"], /* CJK Ideograph */ + ["\u5858", "\u5858"], /* CJK Ideograph */ + ["\u5859", "\u5859"], /* CJK Ideograph */ + ["\u585A", "\u585A"], /* CJK Ideograph */ + ["\u585B", "\u585B"], /* CJK Ideograph */ + ["\u585C", "\u585C"], /* CJK Ideograph */ + ["\u585D", "\u585D"], /* CJK Ideograph */ + ["\u585E", "\u585E"], /* CJK Ideograph */ + ["\u585F", "\u585F"], /* CJK Ideograph */ + ["\u5860", "\u5860"], /* CJK Ideograph */ + ["\u5861", "\u5861"], /* CJK Ideograph */ + ["\u5862", "\u5862"], /* CJK Ideograph */ + ["\u5863", "\u5863"], /* CJK Ideograph */ + ["\u5864", "\u5864"], /* CJK Ideograph */ + ["\u5865", "\u5865"], /* CJK Ideograph */ + ["\u5866", "\u5866"], /* CJK Ideograph */ + ["\u5867", "\u5867"], /* CJK Ideograph */ + ["\u5868", "\u5868"], /* CJK Ideograph */ + ["\u5869", "\u5869"], /* CJK Ideograph */ + ["\u586A", "\u586A"], /* CJK Ideograph */ + ["\u586B", "\u586B"], /* CJK Ideograph */ + ["\u586C", "\u586C"], /* CJK Ideograph */ + ["\u586D", "\u586D"], /* CJK Ideograph */ + ["\u586E", "\u586E"], /* CJK Ideograph */ + ["\u586F", "\u586F"], /* CJK Ideograph */ + ["\u5870", "\u5870"], /* CJK Ideograph */ + ["\u5871", "\u5871"], /* CJK Ideograph */ + ["\u5872", "\u5872"], /* CJK Ideograph */ + ["\u5873", "\u5873"], /* CJK Ideograph */ + ["\u5874", "\u5874"], /* CJK Ideograph */ + ["\u5875", "\u5875"], /* CJK Ideograph */ + ["\u5876", "\u5876"], /* CJK Ideograph */ + ["\u5877", "\u5877"], /* CJK Ideograph */ + ["\u5878", "\u5878"], /* CJK Ideograph */ + ["\u5879", "\u5879"], /* CJK Ideograph */ + ["\u587A", "\u587A"], /* CJK Ideograph */ + ["\u587B", "\u587B"], /* CJK Ideograph */ + ["\u587C", "\u587C"], /* CJK Ideograph */ + ["\u587D", "\u587D"], /* CJK Ideograph */ + ["\u587E", "\u587E"], /* CJK Ideograph */ + ["\u587F", "\u587F"], /* CJK Ideograph */ + ["\u5880", "\u5880"], /* CJK Ideograph */ + ["\u5881", "\u5881"], /* CJK Ideograph */ + ["\u5882", "\u5882"], /* CJK Ideograph */ + ["\u5883", "\u5883"], /* CJK Ideograph */ + ["\u5884", "\u5884"], /* CJK Ideograph */ + ["\u5885", "\u5885"], /* CJK Ideograph */ + ["\u5886", "\u5886"], /* CJK Ideograph */ + ["\u5887", "\u5887"], /* CJK Ideograph */ + ["\u5888", "\u5888"], /* CJK Ideograph */ + ["\u5889", "\u5889"], /* CJK Ideograph */ + ["\u588A", "\u588A"], /* CJK Ideograph */ + ["\u588B", "\u588B"], /* CJK Ideograph */ + ["\u588C", "\u588C"], /* CJK Ideograph */ + ["\u588D", "\u588D"], /* CJK Ideograph */ + ["\u588E", "\u588E"], /* CJK Ideograph */ + ["\u588F", "\u588F"], /* CJK Ideograph */ + ["\u5890", "\u5890"], /* CJK Ideograph */ + ["\u5891", "\u5891"], /* CJK Ideograph */ + ["\u5892", "\u5892"], /* CJK Ideograph */ + ["\u5893", "\u5893"], /* CJK Ideograph */ + ["\u5894", "\u5894"], /* CJK Ideograph */ + ["\u5895", "\u5895"], /* CJK Ideograph */ + ["\u5896", "\u5896"], /* CJK Ideograph */ + ["\u5897", "\u5897"], /* CJK Ideograph */ + ["\u5898", "\u5898"], /* CJK Ideograph */ + ["\u5899", "\u5899"], /* CJK Ideograph */ + ["\u589A", "\u589A"], /* CJK Ideograph */ + ["\u589B", "\u589B"], /* CJK Ideograph */ + ["\u589C", "\u589C"], /* CJK Ideograph */ + ["\u589D", "\u589D"], /* CJK Ideograph */ + ["\u589E", "\u589E"], /* CJK Ideograph */ + ["\u589F", "\u589F"], /* CJK Ideograph */ + ["\u58A0", "\u58A0"], /* CJK Ideograph */ + ["\u58A1", "\u58A1"], /* CJK Ideograph */ + ["\u58A2", "\u58A2"], /* CJK Ideograph */ + ["\u58A3", "\u58A3"], /* CJK Ideograph */ + ["\u58A4", "\u58A4"], /* CJK Ideograph */ + ["\u58A5", "\u58A5"], /* CJK Ideograph */ + ["\u58A6", "\u58A6"], /* CJK Ideograph */ + ["\u58A7", "\u58A7"], /* CJK Ideograph */ + ["\u58A8", "\u58A8"], /* CJK Ideograph */ + ["\u58A9", "\u58A9"], /* CJK Ideograph */ + ["\u58AA", "\u58AA"], /* CJK Ideograph */ + ["\u58AB", "\u58AB"], /* CJK Ideograph */ + ["\u58AC", "\u58AC"], /* CJK Ideograph */ + ["\u58AD", "\u58AD"], /* CJK Ideograph */ + ["\u58AE", "\u58AE"], /* CJK Ideograph */ + ["\u58AF", "\u58AF"], /* CJK Ideograph */ + ["\u58B0", "\u58B0"], /* CJK Ideograph */ + ["\u58B1", "\u58B1"], /* CJK Ideograph */ + ["\u58B2", "\u58B2"], /* CJK Ideograph */ + ["\u58B3", "\u58B3"], /* CJK Ideograph */ + ["\u58B4", "\u58B4"], /* CJK Ideograph */ + ["\u58B5", "\u58B5"], /* CJK Ideograph */ + ["\u58B6", "\u58B6"], /* CJK Ideograph */ + ["\u58B7", "\u58B7"], /* CJK Ideograph */ + ["\u58B8", "\u58B8"], /* CJK Ideograph */ + ["\u58B9", "\u58B9"], /* CJK Ideograph */ + ["\u58BA", "\u58BA"], /* CJK Ideograph */ + ["\u58BB", "\u58BB"], /* CJK Ideograph */ + ["\u58BC", "\u58BC"], /* CJK Ideograph */ + ["\u58BD", "\u58BD"], /* CJK Ideograph */ + ["\u58BE", "\u58BE"], /* CJK Ideograph */ + ["\u58BF", "\u58BF"], /* CJK Ideograph */ + ["\u58C0", "\u58C0"], /* CJK Ideograph */ + ["\u58C1", "\u58C1"], /* CJK Ideograph */ + ["\u58C2", "\u58C2"], /* CJK Ideograph */ + ["\u58C3", "\u58C3"], /* CJK Ideograph */ + ["\u58C4", "\u58C4"], /* CJK Ideograph */ + ["\u58C5", "\u58C5"], /* CJK Ideograph */ + ["\u58C6", "\u58C6"], /* CJK Ideograph */ + ["\u58C7", "\u58C7"], /* CJK Ideograph */ + ["\u58C8", "\u58C8"], /* CJK Ideograph */ + ["\u58C9", "\u58C9"], /* CJK Ideograph */ + ["\u58CA", "\u58CA"], /* CJK Ideograph */ + ["\u58CB", "\u58CB"], /* CJK Ideograph */ + ["\u58CC", "\u58CC"], /* CJK Ideograph */ + ["\u58CD", "\u58CD"], /* CJK Ideograph */ + ["\u58CE", "\u58CE"], /* CJK Ideograph */ + ["\u58CF", "\u58CF"], /* CJK Ideograph */ + ["\u58D0", "\u58D0"], /* CJK Ideograph */ + ["\u58D1", "\u58D1"], /* CJK Ideograph */ + ["\u58D2", "\u58D2"], /* CJK Ideograph */ + ["\u58D3", "\u58D3"], /* CJK Ideograph */ + ["\u58D4", "\u58D4"], /* CJK Ideograph */ + ["\u58D5", "\u58D5"], /* CJK Ideograph */ + ["\u58D6", "\u58D6"], /* CJK Ideograph */ + ["\u58D7", "\u58D7"], /* CJK Ideograph */ + ["\u58D8", "\u58D8"], /* CJK Ideograph */ + ["\u58D9", "\u58D9"], /* CJK Ideograph */ + ["\u58DA", "\u58DA"], /* CJK Ideograph */ + ["\u58DB", "\u58DB"], /* CJK Ideograph */ + ["\u58DC", "\u58DC"], /* CJK Ideograph */ + ["\u58DD", "\u58DD"], /* CJK Ideograph */ + ["\u58DE", "\u58DE"], /* CJK Ideograph */ + ["\u58DF", "\u58DF"], /* CJK Ideograph */ + ["\u58E0", "\u58E0"], /* CJK Ideograph */ + ["\u58E1", "\u58E1"], /* CJK Ideograph */ + ["\u58E2", "\u58E2"], /* CJK Ideograph */ + ["\u58E3", "\u58E3"], /* CJK Ideograph */ + ["\u58E4", "\u58E4"], /* CJK Ideograph */ + ["\u58E5", "\u58E5"], /* CJK Ideograph */ + ["\u58E6", "\u58E6"], /* CJK Ideograph */ + ["\u58E7", "\u58E7"], /* CJK Ideograph */ + ["\u58E8", "\u58E8"], /* CJK Ideograph */ + ["\u58E9", "\u58E9"], /* CJK Ideograph */ + ["\u58EA", "\u58EA"], /* CJK Ideograph */ + ["\u58EB", "\u58EB"], /* CJK Ideograph */ + ["\u58EC", "\u58EC"], /* CJK Ideograph */ + ["\u58ED", "\u58ED"], /* CJK Ideograph */ + ["\u58EE", "\u58EE"], /* CJK Ideograph */ + ["\u58EF", "\u58EF"], /* CJK Ideograph */ + ["\u58F0", "\u58F0"], /* CJK Ideograph */ + ["\u58F1", "\u58F1"], /* CJK Ideograph */ + ["\u58F2", "\u58F2"], /* CJK Ideograph */ + ["\u58F3", "\u58F3"], /* CJK Ideograph */ + ["\u58F4", "\u58F4"], /* CJK Ideograph */ + ["\u58F5", "\u58F5"], /* CJK Ideograph */ + ["\u58F6", "\u58F6"], /* CJK Ideograph */ + ["\u58F7", "\u58F7"], /* CJK Ideograph */ + ["\u58F8", "\u58F8"], /* CJK Ideograph */ + ["\u58F9", "\u58F9"], /* CJK Ideograph */ + ["\u58FA", "\u58FA"], /* CJK Ideograph */ + ["\u58FB", "\u58FB"], /* CJK Ideograph */ + ["\u58FC", "\u58FC"], /* CJK Ideograph */ + ["\u58FD", "\u58FD"], /* CJK Ideograph */ + ["\u58FE", "\u58FE"], /* CJK Ideograph */ + ["\u58FF", "\u58FF"], /* CJK Ideograph */ + ["\u5900", "\u5900"], /* CJK Ideograph */ + ["\u5901", "\u5901"], /* CJK Ideograph */ + ["\u5902", "\u5902"], /* CJK Ideograph */ + ["\u5903", "\u5903"], /* CJK Ideograph */ + ["\u5904", "\u5904"], /* CJK Ideograph */ + ["\u5905", "\u5905"], /* CJK Ideograph */ + ["\u5906", "\u5906"], /* CJK Ideograph */ + ["\u5907", "\u5907"], /* CJK Ideograph */ + ["\u5908", "\u5908"], /* CJK Ideograph */ + ["\u5909", "\u5909"], /* CJK Ideograph */ + ["\u590A", "\u590A"], /* CJK Ideograph */ + ["\u590B", "\u590B"], /* CJK Ideograph */ + ["\u590C", "\u590C"], /* CJK Ideograph */ + ["\u590D", "\u590D"], /* CJK Ideograph */ + ["\u590E", "\u590E"], /* CJK Ideograph */ + ["\u590F", "\u590F"], /* CJK Ideograph */ + ["\u5910", "\u5910"], /* CJK Ideograph */ + ["\u5911", "\u5911"], /* CJK Ideograph */ + ["\u5912", "\u5912"], /* CJK Ideograph */ + ["\u5913", "\u5913"], /* CJK Ideograph */ + ["\u5914", "\u5914"], /* CJK Ideograph */ + ["\u5915", "\u5915"], /* CJK Ideograph */ + ["\u5916", "\u5916"], /* CJK Ideograph */ + ["\u5917", "\u5917"], /* CJK Ideograph */ + ["\u5918", "\u5918"], /* CJK Ideograph */ + ["\u5919", "\u5919"], /* CJK Ideograph */ + ["\u591A", "\u591A"], /* CJK Ideograph */ + ["\u591B", "\u591B"], /* CJK Ideograph */ + ["\u591C", "\u591C"], /* CJK Ideograph */ + ["\u591D", "\u591D"], /* CJK Ideograph */ + ["\u591E", "\u591E"], /* CJK Ideograph */ + ["\u591F", "\u591F"], /* CJK Ideograph */ + ["\u5920", "\u5920"], /* CJK Ideograph */ + ["\u5921", "\u5921"], /* CJK Ideograph */ + ["\u5922", "\u5922"], /* CJK Ideograph */ + ["\u5923", "\u5923"], /* CJK Ideograph */ + ["\u5924", "\u5924"], /* CJK Ideograph */ + ["\u5925", "\u5925"], /* CJK Ideograph */ + ["\u5926", "\u5926"], /* CJK Ideograph */ + ["\u5927", "\u5927"], /* CJK Ideograph */ + ["\u5928", "\u5928"], /* CJK Ideograph */ + ["\u5929", "\u5929"], /* CJK Ideograph */ + ["\u592A", "\u592A"], /* CJK Ideograph */ + ["\u592B", "\u592B"], /* CJK Ideograph */ + ["\u592C", "\u592C"], /* CJK Ideograph */ + ["\u592D", "\u592D"], /* CJK Ideograph */ + ["\u592E", "\u592E"], /* CJK Ideograph */ + ["\u592F", "\u592F"], /* CJK Ideograph */ + ["\u5930", "\u5930"], /* CJK Ideograph */ + ["\u5931", "\u5931"], /* CJK Ideograph */ + ["\u5932", "\u5932"], /* CJK Ideograph */ + ["\u5933", "\u5933"], /* CJK Ideograph */ + ["\u5934", "\u5934"], /* CJK Ideograph */ + ["\u5935", "\u5935"], /* CJK Ideograph */ + ["\u5936", "\u5936"], /* CJK Ideograph */ + ["\u5937", "\u5937"], /* CJK Ideograph */ + ["\u5938", "\u5938"], /* CJK Ideograph */ + ["\u5939", "\u5939"], /* CJK Ideograph */ + ["\u593A", "\u593A"], /* CJK Ideograph */ + ["\u593B", "\u593B"], /* CJK Ideograph */ + ["\u593C", "\u593C"], /* CJK Ideograph */ + ["\u593D", "\u593D"], /* CJK Ideograph */ + ["\u593E", "\u593E"], /* CJK Ideograph */ + ["\u593F", "\u593F"], /* CJK Ideograph */ + ["\u5940", "\u5940"], /* CJK Ideograph */ + ["\u5941", "\u5941"], /* CJK Ideograph */ + ["\u5942", "\u5942"], /* CJK Ideograph */ + ["\u5943", "\u5943"], /* CJK Ideograph */ + ["\u5944", "\u5944"], /* CJK Ideograph */ + ["\u5945", "\u5945"], /* CJK Ideograph */ + ["\u5946", "\u5946"], /* CJK Ideograph */ + ["\u5947", "\u5947"], /* CJK Ideograph */ + ["\u5948", "\u5948"], /* CJK Ideograph */ + ["\u5949", "\u5949"], /* CJK Ideograph */ + ["\u594A", "\u594A"], /* CJK Ideograph */ + ["\u594B", "\u594B"], /* CJK Ideograph */ + ["\u594C", "\u594C"], /* CJK Ideograph */ + ["\u594D", "\u594D"], /* CJK Ideograph */ + ["\u594E", "\u594E"], /* CJK Ideograph */ + ["\u594F", "\u594F"], /* CJK Ideograph */ + ["\u5950", "\u5950"], /* CJK Ideograph */ + ["\u5951", "\u5951"], /* CJK Ideograph */ + ["\u5952", "\u5952"], /* CJK Ideograph */ + ["\u5953", "\u5953"], /* CJK Ideograph */ + ["\u5954", "\u5954"], /* CJK Ideograph */ + ["\u5955", "\u5955"], /* CJK Ideograph */ + ["\u5956", "\u5956"], /* CJK Ideograph */ + ["\u5957", "\u5957"], /* CJK Ideograph */ + ["\u5958", "\u5958"], /* CJK Ideograph */ + ["\u5959", "\u5959"], /* CJK Ideograph */ + ["\u595A", "\u595A"], /* CJK Ideograph */ + ["\u595B", "\u595B"], /* CJK Ideograph */ + ["\u595C", "\u595C"], /* CJK Ideograph */ + ["\u595D", "\u595D"], /* CJK Ideograph */ + ["\u595E", "\u595E"], /* CJK Ideograph */ + ["\u595F", "\u595F"], /* CJK Ideograph */ + ["\u5960", "\u5960"], /* CJK Ideograph */ + ["\u5961", "\u5961"], /* CJK Ideograph */ + ["\u5962", "\u5962"], /* CJK Ideograph */ + ["\u5963", "\u5963"], /* CJK Ideograph */ + ["\u5964", "\u5964"], /* CJK Ideograph */ + ["\u5965", "\u5965"], /* CJK Ideograph */ + ["\u5966", "\u5966"], /* CJK Ideograph */ + ["\u5967", "\u5967"], /* CJK Ideograph */ + ["\u5968", "\u5968"], /* CJK Ideograph */ + ["\u5969", "\u5969"], /* CJK Ideograph */ + ["\u596A", "\u596A"], /* CJK Ideograph */ + ["\u596B", "\u596B"], /* CJK Ideograph */ + ["\u596C", "\u596C"], /* CJK Ideograph */ + ["\u596D", "\u596D"], /* CJK Ideograph */ + ["\u596E", "\u596E"], /* CJK Ideograph */ + ["\u596F", "\u596F"], /* CJK Ideograph */ + ["\u5970", "\u5970"], /* CJK Ideograph */ + ["\u5971", "\u5971"], /* CJK Ideograph */ + ["\u5972", "\u5972"], /* CJK Ideograph */ + ["\u5973", "\u5973"], /* CJK Ideograph */ + ["\u5974", "\u5974"], /* CJK Ideograph */ + ["\u5975", "\u5975"], /* CJK Ideograph */ + ["\u5976", "\u5976"], /* CJK Ideograph */ + ["\u5977", "\u5977"], /* CJK Ideograph */ + ["\u5978", "\u5978"], /* CJK Ideograph */ + ["\u5979", "\u5979"], /* CJK Ideograph */ + ["\u597A", "\u597A"], /* CJK Ideograph */ + ["\u597B", "\u597B"], /* CJK Ideograph */ + ["\u597C", "\u597C"], /* CJK Ideograph */ + ["\u597D", "\u597D"], /* CJK Ideograph */ + ["\u597E", "\u597E"], /* CJK Ideograph */ + ["\u597F", "\u597F"], /* CJK Ideograph */ + ["\u5980", "\u5980"], /* CJK Ideograph */ + ["\u5981", "\u5981"], /* CJK Ideograph */ + ["\u5982", "\u5982"], /* CJK Ideograph */ + ["\u5983", "\u5983"], /* CJK Ideograph */ + ["\u5984", "\u5984"], /* CJK Ideograph */ + ["\u5985", "\u5985"], /* CJK Ideograph */ + ["\u5986", "\u5986"], /* CJK Ideograph */ + ["\u5987", "\u5987"], /* CJK Ideograph */ + ["\u5988", "\u5988"], /* CJK Ideograph */ + ["\u5989", "\u5989"], /* CJK Ideograph */ + ["\u598A", "\u598A"], /* CJK Ideograph */ + ["\u598B", "\u598B"], /* CJK Ideograph */ + ["\u598C", "\u598C"], /* CJK Ideograph */ + ["\u598D", "\u598D"], /* CJK Ideograph */ + ["\u598E", "\u598E"], /* CJK Ideograph */ + ["\u598F", "\u598F"], /* CJK Ideograph */ + ["\u5990", "\u5990"], /* CJK Ideograph */ + ["\u5991", "\u5991"], /* CJK Ideograph */ + ["\u5992", "\u5992"], /* CJK Ideograph */ + ["\u5993", "\u5993"], /* CJK Ideograph */ + ["\u5994", "\u5994"], /* CJK Ideograph */ + ["\u5995", "\u5995"], /* CJK Ideograph */ + ["\u5996", "\u5996"], /* CJK Ideograph */ + ["\u5997", "\u5997"], /* CJK Ideograph */ + ["\u5998", "\u5998"], /* CJK Ideograph */ + ["\u5999", "\u5999"], /* CJK Ideograph */ + ["\u599A", "\u599A"], /* CJK Ideograph */ + ["\u599B", "\u599B"], /* CJK Ideograph */ + ["\u599C", "\u599C"], /* CJK Ideograph */ + ["\u599D", "\u599D"], /* CJK Ideograph */ + ["\u599E", "\u599E"], /* CJK Ideograph */ + ["\u599F", "\u599F"], /* CJK Ideograph */ + ["\u59A0", "\u59A0"], /* CJK Ideograph */ + ["\u59A1", "\u59A1"], /* CJK Ideograph */ + ["\u59A2", "\u59A2"], /* CJK Ideograph */ + ["\u59A3", "\u59A3"], /* CJK Ideograph */ + ["\u59A4", "\u59A4"], /* CJK Ideograph */ + ["\u59A5", "\u59A5"], /* CJK Ideograph */ + ["\u59A6", "\u59A6"], /* CJK Ideograph */ + ["\u59A7", "\u59A7"], /* CJK Ideograph */ + ["\u59A8", "\u59A8"], /* CJK Ideograph */ + ["\u59A9", "\u59A9"], /* CJK Ideograph */ + ["\u59AA", "\u59AA"], /* CJK Ideograph */ + ["\u59AB", "\u59AB"], /* CJK Ideograph */ + ["\u59AC", "\u59AC"], /* CJK Ideograph */ + ["\u59AD", "\u59AD"], /* CJK Ideograph */ + ["\u59AE", "\u59AE"], /* CJK Ideograph */ + ["\u59AF", "\u59AF"], /* CJK Ideograph */ + ["\u59B0", "\u59B0"], /* CJK Ideograph */ + ["\u59B1", "\u59B1"], /* CJK Ideograph */ + ["\u59B2", "\u59B2"], /* CJK Ideograph */ + ["\u59B3", "\u59B3"], /* CJK Ideograph */ + ["\u59B4", "\u59B4"], /* CJK Ideograph */ + ["\u59B5", "\u59B5"], /* CJK Ideograph */ + ["\u59B6", "\u59B6"], /* CJK Ideograph */ + ["\u59B7", "\u59B7"], /* CJK Ideograph */ + ["\u59B8", "\u59B8"], /* CJK Ideograph */ + ["\u59B9", "\u59B9"], /* CJK Ideograph */ + ["\u59BA", "\u59BA"], /* CJK Ideograph */ + ["\u59BB", "\u59BB"], /* CJK Ideograph */ + ["\u59BC", "\u59BC"], /* CJK Ideograph */ + ["\u59BD", "\u59BD"], /* CJK Ideograph */ + ["\u59BE", "\u59BE"], /* CJK Ideograph */ + ["\u59BF", "\u59BF"], /* CJK Ideograph */ + ["\u59C0", "\u59C0"], /* CJK Ideograph */ + ["\u59C1", "\u59C1"], /* CJK Ideograph */ + ["\u59C2", "\u59C2"], /* CJK Ideograph */ + ["\u59C3", "\u59C3"], /* CJK Ideograph */ + ["\u59C4", "\u59C4"], /* CJK Ideograph */ + ["\u59C5", "\u59C5"], /* CJK Ideograph */ + ["\u59C6", "\u59C6"], /* CJK Ideograph */ + ["\u59C7", "\u59C7"], /* CJK Ideograph */ + ["\u59C8", "\u59C8"], /* CJK Ideograph */ + ["\u59C9", "\u59C9"], /* CJK Ideograph */ + ["\u59CA", "\u59CA"], /* CJK Ideograph */ + ["\u59CB", "\u59CB"], /* CJK Ideograph */ + ["\u59CC", "\u59CC"], /* CJK Ideograph */ + ["\u59CD", "\u59CD"], /* CJK Ideograph */ + ["\u59CE", "\u59CE"], /* CJK Ideograph */ + ["\u59CF", "\u59CF"], /* CJK Ideograph */ + ["\u59D0", "\u59D0"], /* CJK Ideograph */ + ["\u59D1", "\u59D1"], /* CJK Ideograph */ + ["\u59D2", "\u59D2"], /* CJK Ideograph */ + ["\u59D3", "\u59D3"], /* CJK Ideograph */ + ["\u59D4", "\u59D4"], /* CJK Ideograph */ + ["\u59D5", "\u59D5"], /* CJK Ideograph */ + ["\u59D6", "\u59D6"], /* CJK Ideograph */ + ["\u59D7", "\u59D7"], /* CJK Ideograph */ + ["\u59D8", "\u59D8"], /* CJK Ideograph */ + ["\u59D9", "\u59D9"], /* CJK Ideograph */ + ["\u59DA", "\u59DA"], /* CJK Ideograph */ + ["\u59DB", "\u59DB"], /* CJK Ideograph */ + ["\u59DC", "\u59DC"], /* CJK Ideograph */ + ["\u59DD", "\u59DD"], /* CJK Ideograph */ + ["\u59DE", "\u59DE"], /* CJK Ideograph */ + ["\u59DF", "\u59DF"], /* CJK Ideograph */ + ["\u59E0", "\u59E0"], /* CJK Ideograph */ + ["\u59E1", "\u59E1"], /* CJK Ideograph */ + ["\u59E2", "\u59E2"], /* CJK Ideograph */ + ["\u59E3", "\u59E3"], /* CJK Ideograph */ + ["\u59E4", "\u59E4"], /* CJK Ideograph */ + ["\u59E5", "\u59E5"], /* CJK Ideograph */ + ["\u59E6", "\u59E6"], /* CJK Ideograph */ + ["\u59E7", "\u59E7"], /* CJK Ideograph */ + ["\u59E8", "\u59E8"], /* CJK Ideograph */ + ["\u59E9", "\u59E9"], /* CJK Ideograph */ + ["\u59EA", "\u59EA"], /* CJK Ideograph */ + ["\u59EB", "\u59EB"], /* CJK Ideograph */ + ["\u59EC", "\u59EC"], /* CJK Ideograph */ + ["\u59ED", "\u59ED"], /* CJK Ideograph */ + ["\u59EE", "\u59EE"], /* CJK Ideograph */ + ["\u59EF", "\u59EF"], /* CJK Ideograph */ + ["\u59F0", "\u59F0"], /* CJK Ideograph */ + ["\u59F1", "\u59F1"], /* CJK Ideograph */ + ["\u59F2", "\u59F2"], /* CJK Ideograph */ + ["\u59F3", "\u59F3"], /* CJK Ideograph */ + ["\u59F4", "\u59F4"], /* CJK Ideograph */ + ["\u59F5", "\u59F5"], /* CJK Ideograph */ + ["\u59F6", "\u59F6"], /* CJK Ideograph */ + ["\u59F7", "\u59F7"], /* CJK Ideograph */ + ["\u59F8", "\u59F8"], /* CJK Ideograph */ + ["\u59F9", "\u59F9"], /* CJK Ideograph */ + ["\u59FA", "\u59FA"], /* CJK Ideograph */ + ["\u59FB", "\u59FB"], /* CJK Ideograph */ + ["\u59FC", "\u59FC"], /* CJK Ideograph */ + ["\u59FD", "\u59FD"], /* CJK Ideograph */ + ["\u59FE", "\u59FE"], /* CJK Ideograph */ + ["\u59FF", "\u59FF"], /* CJK Ideograph */ + ["\u5A00", "\u5A00"], /* CJK Ideograph */ + ["\u5A01", "\u5A01"], /* CJK Ideograph */ + ["\u5A02", "\u5A02"], /* CJK Ideograph */ + ["\u5A03", "\u5A03"], /* CJK Ideograph */ + ["\u5A04", "\u5A04"], /* CJK Ideograph */ + ["\u5A05", "\u5A05"], /* CJK Ideograph */ + ["\u5A06", "\u5A06"], /* CJK Ideograph */ + ["\u5A07", "\u5A07"], /* CJK Ideograph */ + ["\u5A08", "\u5A08"], /* CJK Ideograph */ + ["\u5A09", "\u5A09"], /* CJK Ideograph */ + ["\u5A0A", "\u5A0A"], /* CJK Ideograph */ + ["\u5A0B", "\u5A0B"], /* CJK Ideograph */ + ["\u5A0C", "\u5A0C"], /* CJK Ideograph */ + ["\u5A0D", "\u5A0D"], /* CJK Ideograph */ + ["\u5A0E", "\u5A0E"], /* CJK Ideograph */ + ["\u5A0F", "\u5A0F"], /* CJK Ideograph */ + ["\u5A10", "\u5A10"], /* CJK Ideograph */ + ["\u5A11", "\u5A11"], /* CJK Ideograph */ + ["\u5A12", "\u5A12"], /* CJK Ideograph */ + ["\u5A13", "\u5A13"], /* CJK Ideograph */ + ["\u5A14", "\u5A14"], /* CJK Ideograph */ + ["\u5A15", "\u5A15"], /* CJK Ideograph */ + ["\u5A16", "\u5A16"], /* CJK Ideograph */ + ["\u5A17", "\u5A17"], /* CJK Ideograph */ + ["\u5A18", "\u5A18"], /* CJK Ideograph */ + ["\u5A19", "\u5A19"], /* CJK Ideograph */ + ["\u5A1A", "\u5A1A"], /* CJK Ideograph */ + ["\u5A1B", "\u5A1B"], /* CJK Ideograph */ + ["\u5A1C", "\u5A1C"], /* CJK Ideograph */ + ["\u5A1D", "\u5A1D"], /* CJK Ideograph */ + ["\u5A1E", "\u5A1E"], /* CJK Ideograph */ + ["\u5A1F", "\u5A1F"], /* CJK Ideograph */ + ["\u5A20", "\u5A20"], /* CJK Ideograph */ + ["\u5A21", "\u5A21"], /* CJK Ideograph */ + ["\u5A22", "\u5A22"], /* CJK Ideograph */ + ["\u5A23", "\u5A23"], /* CJK Ideograph */ + ["\u5A24", "\u5A24"], /* CJK Ideograph */ + ["\u5A25", "\u5A25"], /* CJK Ideograph */ + ["\u5A26", "\u5A26"], /* CJK Ideograph */ + ["\u5A27", "\u5A27"], /* CJK Ideograph */ + ["\u5A28", "\u5A28"], /* CJK Ideograph */ + ["\u5A29", "\u5A29"], /* CJK Ideograph */ + ["\u5A2A", "\u5A2A"], /* CJK Ideograph */ + ["\u5A2B", "\u5A2B"], /* CJK Ideograph */ + ["\u5A2C", "\u5A2C"], /* CJK Ideograph */ + ["\u5A2D", "\u5A2D"], /* CJK Ideograph */ + ["\u5A2E", "\u5A2E"], /* CJK Ideograph */ + ["\u5A2F", "\u5A2F"], /* CJK Ideograph */ + ["\u5A30", "\u5A30"], /* CJK Ideograph */ + ["\u5A31", "\u5A31"], /* CJK Ideograph */ + ["\u5A32", "\u5A32"], /* CJK Ideograph */ + ["\u5A33", "\u5A33"], /* CJK Ideograph */ + ["\u5A34", "\u5A34"], /* CJK Ideograph */ + ["\u5A35", "\u5A35"], /* CJK Ideograph */ + ["\u5A36", "\u5A36"], /* CJK Ideograph */ + ["\u5A37", "\u5A37"], /* CJK Ideograph */ + ["\u5A38", "\u5A38"], /* CJK Ideograph */ + ["\u5A39", "\u5A39"], /* CJK Ideograph */ + ["\u5A3A", "\u5A3A"], /* CJK Ideograph */ + ["\u5A3B", "\u5A3B"], /* CJK Ideograph */ + ["\u5A3C", "\u5A3C"], /* CJK Ideograph */ + ["\u5A3D", "\u5A3D"], /* CJK Ideograph */ + ["\u5A3E", "\u5A3E"], /* CJK Ideograph */ + ["\u5A3F", "\u5A3F"], /* CJK Ideograph */ + ["\u5A40", "\u5A40"], /* CJK Ideograph */ + ["\u5A41", "\u5A41"], /* CJK Ideograph */ + ["\u5A42", "\u5A42"], /* CJK Ideograph */ + ["\u5A43", "\u5A43"], /* CJK Ideograph */ + ["\u5A44", "\u5A44"], /* CJK Ideograph */ + ["\u5A45", "\u5A45"], /* CJK Ideograph */ + ["\u5A46", "\u5A46"], /* CJK Ideograph */ + ["\u5A47", "\u5A47"], /* CJK Ideograph */ + ["\u5A48", "\u5A48"], /* CJK Ideograph */ + ["\u5A49", "\u5A49"], /* CJK Ideograph */ + ["\u5A4A", "\u5A4A"], /* CJK Ideograph */ + ["\u5A4B", "\u5A4B"], /* CJK Ideograph */ + ["\u5A4C", "\u5A4C"], /* CJK Ideograph */ + ["\u5A4D", "\u5A4D"], /* CJK Ideograph */ + ["\u5A4E", "\u5A4E"], /* CJK Ideograph */ + ["\u5A4F", "\u5A4F"], /* CJK Ideograph */ + ["\u5A50", "\u5A50"], /* CJK Ideograph */ + ["\u5A51", "\u5A51"], /* CJK Ideograph */ + ["\u5A52", "\u5A52"], /* CJK Ideograph */ + ["\u5A53", "\u5A53"], /* CJK Ideograph */ + ["\u5A54", "\u5A54"], /* CJK Ideograph */ + ["\u5A55", "\u5A55"], /* CJK Ideograph */ + ["\u5A56", "\u5A56"], /* CJK Ideograph */ + ["\u5A57", "\u5A57"], /* CJK Ideograph */ + ["\u5A58", "\u5A58"], /* CJK Ideograph */ + ["\u5A59", "\u5A59"], /* CJK Ideograph */ + ["\u5A5A", "\u5A5A"], /* CJK Ideograph */ + ["\u5A5B", "\u5A5B"], /* CJK Ideograph */ + ["\u5A5C", "\u5A5C"], /* CJK Ideograph */ + ["\u5A5D", "\u5A5D"], /* CJK Ideograph */ + ["\u5A5E", "\u5A5E"], /* CJK Ideograph */ + ["\u5A5F", "\u5A5F"], /* CJK Ideograph */ + ["\u5A60", "\u5A60"], /* CJK Ideograph */ + ["\u5A61", "\u5A61"], /* CJK Ideograph */ + ["\u5A62", "\u5A62"], /* CJK Ideograph */ + ["\u5A63", "\u5A63"], /* CJK Ideograph */ + ["\u5A64", "\u5A64"], /* CJK Ideograph */ + ["\u5A65", "\u5A65"], /* CJK Ideograph */ + ["\u5A66", "\u5A66"], /* CJK Ideograph */ + ["\u5A67", "\u5A67"], /* CJK Ideograph */ + ["\u5A68", "\u5A68"], /* CJK Ideograph */ + ["\u5A69", "\u5A69"], /* CJK Ideograph */ + ["\u5A6A", "\u5A6A"], /* CJK Ideograph */ + ["\u5A6B", "\u5A6B"], /* CJK Ideograph */ + ["\u5A6C", "\u5A6C"], /* CJK Ideograph */ + ["\u5A6D", "\u5A6D"], /* CJK Ideograph */ + ["\u5A6E", "\u5A6E"], /* CJK Ideograph */ + ["\u5A6F", "\u5A6F"], /* CJK Ideograph */ + ["\u5A70", "\u5A70"], /* CJK Ideograph */ + ["\u5A71", "\u5A71"], /* CJK Ideograph */ + ["\u5A72", "\u5A72"], /* CJK Ideograph */ + ["\u5A73", "\u5A73"], /* CJK Ideograph */ + ["\u5A74", "\u5A74"], /* CJK Ideograph */ + ["\u5A75", "\u5A75"], /* CJK Ideograph */ + ["\u5A76", "\u5A76"], /* CJK Ideograph */ + ["\u5A77", "\u5A77"], /* CJK Ideograph */ + ["\u5A78", "\u5A78"], /* CJK Ideograph */ + ["\u5A79", "\u5A79"], /* CJK Ideograph */ + ["\u5A7A", "\u5A7A"], /* CJK Ideograph */ + ["\u5A7B", "\u5A7B"], /* CJK Ideograph */ + ["\u5A7C", "\u5A7C"], /* CJK Ideograph */ + ["\u5A7D", "\u5A7D"], /* CJK Ideograph */ + ["\u5A7E", "\u5A7E"], /* CJK Ideograph */ + ["\u5A7F", "\u5A7F"], /* CJK Ideograph */ + ["\u5A80", "\u5A80"], /* CJK Ideograph */ + ["\u5A81", "\u5A81"], /* CJK Ideograph */ + ["\u5A82", "\u5A82"], /* CJK Ideograph */ + ["\u5A83", "\u5A83"], /* CJK Ideograph */ + ["\u5A84", "\u5A84"], /* CJK Ideograph */ + ["\u5A85", "\u5A85"], /* CJK Ideograph */ + ["\u5A86", "\u5A86"], /* CJK Ideograph */ + ["\u5A87", "\u5A87"], /* CJK Ideograph */ + ["\u5A88", "\u5A88"], /* CJK Ideograph */ + ["\u5A89", "\u5A89"], /* CJK Ideograph */ + ["\u5A8A", "\u5A8A"], /* CJK Ideograph */ + ["\u5A8B", "\u5A8B"], /* CJK Ideograph */ + ["\u5A8C", "\u5A8C"], /* CJK Ideograph */ + ["\u5A8D", "\u5A8D"], /* CJK Ideograph */ + ["\u5A8E", "\u5A8E"], /* CJK Ideograph */ + ["\u5A8F", "\u5A8F"], /* CJK Ideograph */ + ["\u5A90", "\u5A90"], /* CJK Ideograph */ + ["\u5A91", "\u5A91"], /* CJK Ideograph */ + ["\u5A92", "\u5A92"], /* CJK Ideograph */ + ["\u5A93", "\u5A93"], /* CJK Ideograph */ + ["\u5A94", "\u5A94"], /* CJK Ideograph */ + ["\u5A95", "\u5A95"], /* CJK Ideograph */ + ["\u5A96", "\u5A96"], /* CJK Ideograph */ + ["\u5A97", "\u5A97"], /* CJK Ideograph */ + ["\u5A98", "\u5A98"], /* CJK Ideograph */ + ["\u5A99", "\u5A99"], /* CJK Ideograph */ + ["\u5A9A", "\u5A9A"], /* CJK Ideograph */ + ["\u5A9B", "\u5A9B"], /* CJK Ideograph */ + ["\u5A9C", "\u5A9C"], /* CJK Ideograph */ + ["\u5A9D", "\u5A9D"], /* CJK Ideograph */ + ["\u5A9E", "\u5A9E"], /* CJK Ideograph */ + ["\u5A9F", "\u5A9F"], /* CJK Ideograph */ + ["\u5AA0", "\u5AA0"], /* CJK Ideograph */ + ["\u5AA1", "\u5AA1"], /* CJK Ideograph */ + ["\u5AA2", "\u5AA2"], /* CJK Ideograph */ + ["\u5AA3", "\u5AA3"], /* CJK Ideograph */ + ["\u5AA4", "\u5AA4"], /* CJK Ideograph */ + ["\u5AA5", "\u5AA5"], /* CJK Ideograph */ + ["\u5AA6", "\u5AA6"], /* CJK Ideograph */ + ["\u5AA7", "\u5AA7"], /* CJK Ideograph */ + ["\u5AA8", "\u5AA8"], /* CJK Ideograph */ + ["\u5AA9", "\u5AA9"], /* CJK Ideograph */ + ["\u5AAA", "\u5AAA"], /* CJK Ideograph */ + ["\u5AAB", "\u5AAB"], /* CJK Ideograph */ + ["\u5AAC", "\u5AAC"], /* CJK Ideograph */ + ["\u5AAD", "\u5AAD"], /* CJK Ideograph */ + ["\u5AAE", "\u5AAE"], /* CJK Ideograph */ + ["\u5AAF", "\u5AAF"], /* CJK Ideograph */ + ["\u5AB0", "\u5AB0"], /* CJK Ideograph */ + ["\u5AB1", "\u5AB1"], /* CJK Ideograph */ + ["\u5AB2", "\u5AB2"], /* CJK Ideograph */ + ["\u5AB3", "\u5AB3"], /* CJK Ideograph */ + ["\u5AB4", "\u5AB4"], /* CJK Ideograph */ + ["\u5AB5", "\u5AB5"], /* CJK Ideograph */ + ["\u5AB6", "\u5AB6"], /* CJK Ideograph */ + ["\u5AB7", "\u5AB7"], /* CJK Ideograph */ + ["\u5AB8", "\u5AB8"], /* CJK Ideograph */ + ["\u5AB9", "\u5AB9"], /* CJK Ideograph */ + ["\u5ABA", "\u5ABA"], /* CJK Ideograph */ + ["\u5ABB", "\u5ABB"], /* CJK Ideograph */ + ["\u5ABC", "\u5ABC"], /* CJK Ideograph */ + ["\u5ABD", "\u5ABD"], /* CJK Ideograph */ + ["\u5ABE", "\u5ABE"], /* CJK Ideograph */ + ["\u5ABF", "\u5ABF"], /* CJK Ideograph */ + ["\u5AC0", "\u5AC0"], /* CJK Ideograph */ + ["\u5AC1", "\u5AC1"], /* CJK Ideograph */ + ["\u5AC2", "\u5AC2"], /* CJK Ideograph */ + ["\u5AC3", "\u5AC3"], /* CJK Ideograph */ + ["\u5AC4", "\u5AC4"], /* CJK Ideograph */ + ["\u5AC5", "\u5AC5"], /* CJK Ideograph */ + ["\u5AC6", "\u5AC6"], /* CJK Ideograph */ + ["\u5AC7", "\u5AC7"], /* CJK Ideograph */ + ["\u5AC8", "\u5AC8"], /* CJK Ideograph */ + ["\u5AC9", "\u5AC9"], /* CJK Ideograph */ + ["\u5ACA", "\u5ACA"], /* CJK Ideograph */ + ["\u5ACB", "\u5ACB"], /* CJK Ideograph */ + ["\u5ACC", "\u5ACC"], /* CJK Ideograph */ + ["\u5ACD", "\u5ACD"], /* CJK Ideograph */ + ["\u5ACE", "\u5ACE"], /* CJK Ideograph */ + ["\u5ACF", "\u5ACF"], /* CJK Ideograph */ + ["\u5AD0", "\u5AD0"], /* CJK Ideograph */ + ["\u5AD1", "\u5AD1"], /* CJK Ideograph */ + ["\u5AD2", "\u5AD2"], /* CJK Ideograph */ + ["\u5AD3", "\u5AD3"], /* CJK Ideograph */ + ["\u5AD4", "\u5AD4"], /* CJK Ideograph */ + ["\u5AD5", "\u5AD5"], /* CJK Ideograph */ + ["\u5AD6", "\u5AD6"], /* CJK Ideograph */ + ["\u5AD7", "\u5AD7"], /* CJK Ideograph */ + ["\u5AD8", "\u5AD8"], /* CJK Ideograph */ + ["\u5AD9", "\u5AD9"], /* CJK Ideograph */ + ["\u5ADA", "\u5ADA"], /* CJK Ideograph */ + ["\u5ADB", "\u5ADB"], /* CJK Ideograph */ + ["\u5ADC", "\u5ADC"], /* CJK Ideograph */ + ["\u5ADD", "\u5ADD"], /* CJK Ideograph */ + ["\u5ADE", "\u5ADE"], /* CJK Ideograph */ + ["\u5ADF", "\u5ADF"], /* CJK Ideograph */ + ["\u5AE0", "\u5AE0"], /* CJK Ideograph */ + ["\u5AE1", "\u5AE1"], /* CJK Ideograph */ + ["\u5AE2", "\u5AE2"], /* CJK Ideograph */ + ["\u5AE3", "\u5AE3"], /* CJK Ideograph */ + ["\u5AE4", "\u5AE4"], /* CJK Ideograph */ + ["\u5AE5", "\u5AE5"], /* CJK Ideograph */ + ["\u5AE6", "\u5AE6"], /* CJK Ideograph */ + ["\u5AE7", "\u5AE7"], /* CJK Ideograph */ + ["\u5AE8", "\u5AE8"], /* CJK Ideograph */ + ["\u5AE9", "\u5AE9"], /* CJK Ideograph */ + ["\u5AEA", "\u5AEA"], /* CJK Ideograph */ + ["\u5AEB", "\u5AEB"], /* CJK Ideograph */ + ["\u5AEC", "\u5AEC"], /* CJK Ideograph */ + ["\u5AED", "\u5AED"], /* CJK Ideograph */ + ["\u5AEE", "\u5AEE"], /* CJK Ideograph */ + ["\u5AEF", "\u5AEF"], /* CJK Ideograph */ + ["\u5AF0", "\u5AF0"], /* CJK Ideograph */ + ["\u5AF1", "\u5AF1"], /* CJK Ideograph */ + ["\u5AF2", "\u5AF2"], /* CJK Ideograph */ + ["\u5AF3", "\u5AF3"], /* CJK Ideograph */ + ["\u5AF4", "\u5AF4"], /* CJK Ideograph */ + ["\u5AF5", "\u5AF5"], /* CJK Ideograph */ + ["\u5AF6", "\u5AF6"], /* CJK Ideograph */ + ["\u5AF7", "\u5AF7"], /* CJK Ideograph */ + ["\u5AF8", "\u5AF8"], /* CJK Ideograph */ + ["\u5AF9", "\u5AF9"], /* CJK Ideograph */ + ["\u5AFA", "\u5AFA"], /* CJK Ideograph */ + ["\u5AFB", "\u5AFB"], /* CJK Ideograph */ + ["\u5AFC", "\u5AFC"], /* CJK Ideograph */ + ["\u5AFD", "\u5AFD"], /* CJK Ideograph */ + ["\u5AFE", "\u5AFE"], /* CJK Ideograph */ + ["\u5AFF", "\u5AFF"], /* CJK Ideograph */ + ["\u5B00", "\u5B00"], /* CJK Ideograph */ + ["\u5B01", "\u5B01"], /* CJK Ideograph */ + ["\u5B02", "\u5B02"], /* CJK Ideograph */ + ["\u5B03", "\u5B03"], /* CJK Ideograph */ + ["\u5B04", "\u5B04"], /* CJK Ideograph */ + ["\u5B05", "\u5B05"], /* CJK Ideograph */ + ["\u5B06", "\u5B06"], /* CJK Ideograph */ + ["\u5B07", "\u5B07"], /* CJK Ideograph */ + ["\u5B08", "\u5B08"], /* CJK Ideograph */ + ["\u5B09", "\u5B09"], /* CJK Ideograph */ + ["\u5B0A", "\u5B0A"], /* CJK Ideograph */ + ["\u5B0B", "\u5B0B"], /* CJK Ideograph */ + ["\u5B0C", "\u5B0C"], /* CJK Ideograph */ + ["\u5B0D", "\u5B0D"], /* CJK Ideograph */ + ["\u5B0E", "\u5B0E"], /* CJK Ideograph */ + ["\u5B0F", "\u5B0F"], /* CJK Ideograph */ + ["\u5B10", "\u5B10"], /* CJK Ideograph */ + ["\u5B11", "\u5B11"], /* CJK Ideograph */ + ["\u5B12", "\u5B12"], /* CJK Ideograph */ + ["\u5B13", "\u5B13"], /* CJK Ideograph */ + ["\u5B14", "\u5B14"], /* CJK Ideograph */ + ["\u5B15", "\u5B15"], /* CJK Ideograph */ + ["\u5B16", "\u5B16"], /* CJK Ideograph */ + ["\u5B17", "\u5B17"], /* CJK Ideograph */ + ["\u5B18", "\u5B18"], /* CJK Ideograph */ + ["\u5B19", "\u5B19"], /* CJK Ideograph */ + ["\u5B1A", "\u5B1A"], /* CJK Ideograph */ + ["\u5B1B", "\u5B1B"], /* CJK Ideograph */ + ["\u5B1C", "\u5B1C"], /* CJK Ideograph */ + ["\u5B1D", "\u5B1D"], /* CJK Ideograph */ + ["\u5B1E", "\u5B1E"], /* CJK Ideograph */ + ["\u5B1F", "\u5B1F"], /* CJK Ideograph */ + ["\u5B20", "\u5B20"], /* CJK Ideograph */ + ["\u5B21", "\u5B21"], /* CJK Ideograph */ + ["\u5B22", "\u5B22"], /* CJK Ideograph */ + ["\u5B23", "\u5B23"], /* CJK Ideograph */ + ["\u5B24", "\u5B24"], /* CJK Ideograph */ + ["\u5B25", "\u5B25"], /* CJK Ideograph */ + ["\u5B26", "\u5B26"], /* CJK Ideograph */ + ["\u5B27", "\u5B27"], /* CJK Ideograph */ + ["\u5B28", "\u5B28"], /* CJK Ideograph */ + ["\u5B29", "\u5B29"], /* CJK Ideograph */ + ["\u5B2A", "\u5B2A"], /* CJK Ideograph */ + ["\u5B2B", "\u5B2B"], /* CJK Ideograph */ + ["\u5B2C", "\u5B2C"], /* CJK Ideograph */ + ["\u5B2D", "\u5B2D"], /* CJK Ideograph */ + ["\u5B2E", "\u5B2E"], /* CJK Ideograph */ + ["\u5B2F", "\u5B2F"], /* CJK Ideograph */ + ["\u5B30", "\u5B30"], /* CJK Ideograph */ + ["\u5B31", "\u5B31"], /* CJK Ideograph */ + ["\u5B32", "\u5B32"], /* CJK Ideograph */ + ["\u5B33", "\u5B33"], /* CJK Ideograph */ + ["\u5B34", "\u5B34"], /* CJK Ideograph */ + ["\u5B35", "\u5B35"], /* CJK Ideograph */ + ["\u5B36", "\u5B36"], /* CJK Ideograph */ + ["\u5B37", "\u5B37"], /* CJK Ideograph */ + ["\u5B38", "\u5B38"], /* CJK Ideograph */ + ["\u5B39", "\u5B39"], /* CJK Ideograph */ + ["\u5B3A", "\u5B3A"], /* CJK Ideograph */ + ["\u5B3B", "\u5B3B"], /* CJK Ideograph */ + ["\u5B3C", "\u5B3C"], /* CJK Ideograph */ + ["\u5B3D", "\u5B3D"], /* CJK Ideograph */ + ["\u5B3E", "\u5B3E"], /* CJK Ideograph */ + ["\u5B3F", "\u5B3F"], /* CJK Ideograph */ + ["\u5B40", "\u5B40"], /* CJK Ideograph */ + ["\u5B41", "\u5B41"], /* CJK Ideograph */ + ["\u5B42", "\u5B42"], /* CJK Ideograph */ + ["\u5B43", "\u5B43"], /* CJK Ideograph */ + ["\u5B44", "\u5B44"], /* CJK Ideograph */ + ["\u5B45", "\u5B45"], /* CJK Ideograph */ + ["\u5B46", "\u5B46"], /* CJK Ideograph */ + ["\u5B47", "\u5B47"], /* CJK Ideograph */ + ["\u5B48", "\u5B48"], /* CJK Ideograph */ + ["\u5B49", "\u5B49"], /* CJK Ideograph */ + ["\u5B4A", "\u5B4A"], /* CJK Ideograph */ + ["\u5B4B", "\u5B4B"], /* CJK Ideograph */ + ["\u5B4C", "\u5B4C"], /* CJK Ideograph */ + ["\u5B4D", "\u5B4D"], /* CJK Ideograph */ + ["\u5B4E", "\u5B4E"], /* CJK Ideograph */ + ["\u5B4F", "\u5B4F"], /* CJK Ideograph */ + ["\u5B50", "\u5B50"], /* CJK Ideograph */ + ["\u5B51", "\u5B51"], /* CJK Ideograph */ + ["\u5B52", "\u5B52"], /* CJK Ideograph */ + ["\u5B53", "\u5B53"], /* CJK Ideograph */ + ["\u5B54", "\u5B54"], /* CJK Ideograph */ + ["\u5B55", "\u5B55"], /* CJK Ideograph */ + ["\u5B56", "\u5B56"], /* CJK Ideograph */ + ["\u5B57", "\u5B57"], /* CJK Ideograph */ + ["\u5B58", "\u5B58"], /* CJK Ideograph */ + ["\u5B59", "\u5B59"], /* CJK Ideograph */ + ["\u5B5A", "\u5B5A"], /* CJK Ideograph */ + ["\u5B5B", "\u5B5B"], /* CJK Ideograph */ + ["\u5B5C", "\u5B5C"], /* CJK Ideograph */ + ["\u5B5D", "\u5B5D"], /* CJK Ideograph */ + ["\u5B5E", "\u5B5E"], /* CJK Ideograph */ + ["\u5B5F", "\u5B5F"], /* CJK Ideograph */ + ["\u5B60", "\u5B60"], /* CJK Ideograph */ + ["\u5B61", "\u5B61"], /* CJK Ideograph */ + ["\u5B62", "\u5B62"], /* CJK Ideograph */ + ["\u5B63", "\u5B63"], /* CJK Ideograph */ + ["\u5B64", "\u5B64"], /* CJK Ideograph */ + ["\u5B65", "\u5B65"], /* CJK Ideograph */ + ["\u5B66", "\u5B66"], /* CJK Ideograph */ + ["\u5B67", "\u5B67"], /* CJK Ideograph */ + ["\u5B68", "\u5B68"], /* CJK Ideograph */ + ["\u5B69", "\u5B69"], /* CJK Ideograph */ + ["\u5B6A", "\u5B6A"], /* CJK Ideograph */ + ["\u5B6B", "\u5B6B"], /* CJK Ideograph */ + ["\u5B6C", "\u5B6C"], /* CJK Ideograph */ + ["\u5B6D", "\u5B6D"], /* CJK Ideograph */ + ["\u5B6E", "\u5B6E"], /* CJK Ideograph */ + ["\u5B6F", "\u5B6F"], /* CJK Ideograph */ + ["\u5B70", "\u5B70"], /* CJK Ideograph */ + ["\u5B71", "\u5B71"], /* CJK Ideograph */ + ["\u5B72", "\u5B72"], /* CJK Ideograph */ + ["\u5B73", "\u5B73"], /* CJK Ideograph */ + ["\u5B74", "\u5B74"], /* CJK Ideograph */ + ["\u5B75", "\u5B75"], /* CJK Ideograph */ + ["\u5B76", "\u5B76"], /* CJK Ideograph */ + ["\u5B77", "\u5B77"], /* CJK Ideograph */ + ["\u5B78", "\u5B78"], /* CJK Ideograph */ + ["\u5B79", "\u5B79"], /* CJK Ideograph */ + ["\u5B7A", "\u5B7A"], /* CJK Ideograph */ + ["\u5B7B", "\u5B7B"], /* CJK Ideograph */ + ["\u5B7C", "\u5B7C"], /* CJK Ideograph */ + ["\u5B7D", "\u5B7D"], /* CJK Ideograph */ + ["\u5B7E", "\u5B7E"], /* CJK Ideograph */ + ["\u5B7F", "\u5B7F"], /* CJK Ideograph */ + ["\u5B80", "\u5B80"], /* CJK Ideograph */ + ["\u5B81", "\u5B81"], /* CJK Ideograph */ + ["\u5B82", "\u5B82"], /* CJK Ideograph */ + ["\u5B83", "\u5B83"], /* CJK Ideograph */ + ["\u5B84", "\u5B84"], /* CJK Ideograph */ + ["\u5B85", "\u5B85"], /* CJK Ideograph */ + ["\u5B86", "\u5B86"], /* CJK Ideograph */ + ["\u5B87", "\u5B87"], /* CJK Ideograph */ + ["\u5B88", "\u5B88"], /* CJK Ideograph */ + ["\u5B89", "\u5B89"], /* CJK Ideograph */ + ["\u5B8A", "\u5B8A"], /* CJK Ideograph */ + ["\u5B8B", "\u5B8B"], /* CJK Ideograph */ + ["\u5B8C", "\u5B8C"], /* CJK Ideograph */ + ["\u5B8D", "\u5B8D"], /* CJK Ideograph */ + ["\u5B8E", "\u5B8E"], /* CJK Ideograph */ + ["\u5B8F", "\u5B8F"], /* CJK Ideograph */ + ["\u5B90", "\u5B90"], /* CJK Ideograph */ + ["\u5B91", "\u5B91"], /* CJK Ideograph */ + ["\u5B92", "\u5B92"], /* CJK Ideograph */ + ["\u5B93", "\u5B93"], /* CJK Ideograph */ + ["\u5B94", "\u5B94"], /* CJK Ideograph */ + ["\u5B95", "\u5B95"], /* CJK Ideograph */ + ["\u5B96", "\u5B96"], /* CJK Ideograph */ + ["\u5B97", "\u5B97"], /* CJK Ideograph */ + ["\u5B98", "\u5B98"], /* CJK Ideograph */ + ["\u5B99", "\u5B99"], /* CJK Ideograph */ + ["\u5B9A", "\u5B9A"], /* CJK Ideograph */ + ["\u5B9B", "\u5B9B"], /* CJK Ideograph */ + ["\u5B9C", "\u5B9C"], /* CJK Ideograph */ + ["\u5B9D", "\u5B9D"], /* CJK Ideograph */ + ["\u5B9E", "\u5B9E"], /* CJK Ideograph */ + ["\u5B9F", "\u5B9F"], /* CJK Ideograph */ + ["\u5BA0", "\u5BA0"], /* CJK Ideograph */ + ["\u5BA1", "\u5BA1"], /* CJK Ideograph */ + ["\u5BA2", "\u5BA2"], /* CJK Ideograph */ + ["\u5BA3", "\u5BA3"], /* CJK Ideograph */ + ["\u5BA4", "\u5BA4"], /* CJK Ideograph */ + ["\u5BA5", "\u5BA5"], /* CJK Ideograph */ + ["\u5BA6", "\u5BA6"], /* CJK Ideograph */ + ["\u5BA7", "\u5BA7"], /* CJK Ideograph */ + ["\u5BA8", "\u5BA8"], /* CJK Ideograph */ + ["\u5BA9", "\u5BA9"], /* CJK Ideograph */ + ["\u5BAA", "\u5BAA"], /* CJK Ideograph */ + ["\u5BAB", "\u5BAB"], /* CJK Ideograph */ + ["\u5BAC", "\u5BAC"], /* CJK Ideograph */ + ["\u5BAD", "\u5BAD"], /* CJK Ideograph */ + ["\u5BAE", "\u5BAE"], /* CJK Ideograph */ + ["\u5BAF", "\u5BAF"], /* CJK Ideograph */ + ["\u5BB0", "\u5BB0"], /* CJK Ideograph */ + ["\u5BB1", "\u5BB1"], /* CJK Ideograph */ + ["\u5BB2", "\u5BB2"], /* CJK Ideograph */ + ["\u5BB3", "\u5BB3"], /* CJK Ideograph */ + ["\u5BB4", "\u5BB4"], /* CJK Ideograph */ + ["\u5BB5", "\u5BB5"], /* CJK Ideograph */ + ["\u5BB6", "\u5BB6"], /* CJK Ideograph */ + ["\u5BB7", "\u5BB7"], /* CJK Ideograph */ + ["\u5BB8", "\u5BB8"], /* CJK Ideograph */ + ["\u5BB9", "\u5BB9"], /* CJK Ideograph */ + ["\u5BBA", "\u5BBA"], /* CJK Ideograph */ + ["\u5BBB", "\u5BBB"], /* CJK Ideograph */ + ["\u5BBC", "\u5BBC"], /* CJK Ideograph */ + ["\u5BBD", "\u5BBD"], /* CJK Ideograph */ + ["\u5BBE", "\u5BBE"], /* CJK Ideograph */ + ["\u5BBF", "\u5BBF"], /* CJK Ideograph */ + ["\u5BC0", "\u5BC0"], /* CJK Ideograph */ + ["\u5BC1", "\u5BC1"], /* CJK Ideograph */ + ["\u5BC2", "\u5BC2"], /* CJK Ideograph */ + ["\u5BC3", "\u5BC3"], /* CJK Ideograph */ + ["\u5BC4", "\u5BC4"], /* CJK Ideograph */ + ["\u5BC5", "\u5BC5"], /* CJK Ideograph */ + ["\u5BC6", "\u5BC6"], /* CJK Ideograph */ + ["\u5BC7", "\u5BC7"], /* CJK Ideograph */ + ["\u5BC8", "\u5BC8"], /* CJK Ideograph */ + ["\u5BC9", "\u5BC9"], /* CJK Ideograph */ + ["\u5BCA", "\u5BCA"], /* CJK Ideograph */ + ["\u5BCB", "\u5BCB"], /* CJK Ideograph */ + ["\u5BCC", "\u5BCC"], /* CJK Ideograph */ + ["\u5BCD", "\u5BCD"], /* CJK Ideograph */ + ["\u5BCE", "\u5BCE"], /* CJK Ideograph */ + ["\u5BCF", "\u5BCF"], /* CJK Ideograph */ + ["\u5BD0", "\u5BD0"], /* CJK Ideograph */ + ["\u5BD1", "\u5BD1"], /* CJK Ideograph */ + ["\u5BD2", "\u5BD2"], /* CJK Ideograph */ + ["\u5BD3", "\u5BD3"], /* CJK Ideograph */ + ["\u5BD4", "\u5BD4"], /* CJK Ideograph */ + ["\u5BD5", "\u5BD5"], /* CJK Ideograph */ + ["\u5BD6", "\u5BD6"], /* CJK Ideograph */ + ["\u5BD7", "\u5BD7"], /* CJK Ideograph */ + ["\u5BD8", "\u5BD8"], /* CJK Ideograph */ + ["\u5BD9", "\u5BD9"], /* CJK Ideograph */ + ["\u5BDA", "\u5BDA"], /* CJK Ideograph */ + ["\u5BDB", "\u5BDB"], /* CJK Ideograph */ + ["\u5BDC", "\u5BDC"], /* CJK Ideograph */ + ["\u5BDD", "\u5BDD"], /* CJK Ideograph */ + ["\u5BDE", "\u5BDE"], /* CJK Ideograph */ + ["\u5BDF", "\u5BDF"], /* CJK Ideograph */ + ["\u5BE0", "\u5BE0"], /* CJK Ideograph */ + ["\u5BE1", "\u5BE1"], /* CJK Ideograph */ + ["\u5BE2", "\u5BE2"], /* CJK Ideograph */ + ["\u5BE3", "\u5BE3"], /* CJK Ideograph */ + ["\u5BE4", "\u5BE4"], /* CJK Ideograph */ + ["\u5BE5", "\u5BE5"], /* CJK Ideograph */ + ["\u5BE6", "\u5BE6"], /* CJK Ideograph */ + ["\u5BE7", "\u5BE7"], /* CJK Ideograph */ + ["\u5BE8", "\u5BE8"], /* CJK Ideograph */ + ["\u5BE9", "\u5BE9"], /* CJK Ideograph */ + ["\u5BEA", "\u5BEA"], /* CJK Ideograph */ + ["\u5BEB", "\u5BEB"], /* CJK Ideograph */ + ["\u5BEC", "\u5BEC"], /* CJK Ideograph */ + ["\u5BED", "\u5BED"], /* CJK Ideograph */ + ["\u5BEE", "\u5BEE"], /* CJK Ideograph */ + ["\u5BEF", "\u5BEF"], /* CJK Ideograph */ + ["\u5BF0", "\u5BF0"], /* CJK Ideograph */ + ["\u5BF1", "\u5BF1"], /* CJK Ideograph */ + ["\u5BF2", "\u5BF2"], /* CJK Ideograph */ + ["\u5BF3", "\u5BF3"], /* CJK Ideograph */ + ["\u5BF4", "\u5BF4"], /* CJK Ideograph */ + ["\u5BF5", "\u5BF5"], /* CJK Ideograph */ + ["\u5BF6", "\u5BF6"], /* CJK Ideograph */ + ["\u5BF7", "\u5BF7"], /* CJK Ideograph */ + ["\u5BF8", "\u5BF8"], /* CJK Ideograph */ + ["\u5BF9", "\u5BF9"], /* CJK Ideograph */ + ["\u5BFA", "\u5BFA"], /* CJK Ideograph */ + ["\u5BFB", "\u5BFB"], /* CJK Ideograph */ + ["\u5BFC", "\u5BFC"], /* CJK Ideograph */ + ["\u5BFD", "\u5BFD"], /* CJK Ideograph */ + ["\u5BFE", "\u5BFE"], /* CJK Ideograph */ + ["\u5BFF", "\u5BFF"], /* CJK Ideograph */ + ["\u5C00", "\u5C00"], /* CJK Ideograph */ + ["\u5C01", "\u5C01"], /* CJK Ideograph */ + ["\u5C02", "\u5C02"], /* CJK Ideograph */ + ["\u5C03", "\u5C03"], /* CJK Ideograph */ + ["\u5C04", "\u5C04"], /* CJK Ideograph */ + ["\u5C05", "\u5C05"], /* CJK Ideograph */ + ["\u5C06", "\u5C06"], /* CJK Ideograph */ + ["\u5C07", "\u5C07"], /* CJK Ideograph */ + ["\u5C08", "\u5C08"], /* CJK Ideograph */ + ["\u5C09", "\u5C09"], /* CJK Ideograph */ + ["\u5C0A", "\u5C0A"], /* CJK Ideograph */ + ["\u5C0B", "\u5C0B"], /* CJK Ideograph */ + ["\u5C0C", "\u5C0C"], /* CJK Ideograph */ + ["\u5C0D", "\u5C0D"], /* CJK Ideograph */ + ["\u5C0E", "\u5C0E"], /* CJK Ideograph */ + ["\u5C0F", "\u5C0F"], /* CJK Ideograph */ + ["\u5C10", "\u5C10"], /* CJK Ideograph */ + ["\u5C11", "\u5C11"], /* CJK Ideograph */ + ["\u5C12", "\u5C12"], /* CJK Ideograph */ + ["\u5C13", "\u5C13"], /* CJK Ideograph */ + ["\u5C14", "\u5C14"], /* CJK Ideograph */ + ["\u5C15", "\u5C15"], /* CJK Ideograph */ + ["\u5C16", "\u5C16"], /* CJK Ideograph */ + ["\u5C17", "\u5C17"], /* CJK Ideograph */ + ["\u5C18", "\u5C18"], /* CJK Ideograph */ + ["\u5C19", "\u5C19"], /* CJK Ideograph */ + ["\u5C1A", "\u5C1A"], /* CJK Ideograph */ + ["\u5C1B", "\u5C1B"], /* CJK Ideograph */ + ["\u5C1C", "\u5C1C"], /* CJK Ideograph */ + ["\u5C1D", "\u5C1D"], /* CJK Ideograph */ + ["\u5C1E", "\u5C1E"], /* CJK Ideograph */ + ["\u5C1F", "\u5C1F"], /* CJK Ideograph */ + ["\u5C20", "\u5C20"], /* CJK Ideograph */ + ["\u5C21", "\u5C21"], /* CJK Ideograph */ + ["\u5C22", "\u5C22"], /* CJK Ideograph */ + ["\u5C23", "\u5C23"], /* CJK Ideograph */ + ["\u5C24", "\u5C24"], /* CJK Ideograph */ + ["\u5C25", "\u5C25"], /* CJK Ideograph */ + ["\u5C26", "\u5C26"], /* CJK Ideograph */ + ["\u5C27", "\u5C27"], /* CJK Ideograph */ + ["\u5C28", "\u5C28"], /* CJK Ideograph */ + ["\u5C29", "\u5C29"], /* CJK Ideograph */ + ["\u5C2A", "\u5C2A"], /* CJK Ideograph */ + ["\u5C2B", "\u5C2B"], /* CJK Ideograph */ + ["\u5C2C", "\u5C2C"], /* CJK Ideograph */ + ["\u5C2D", "\u5C2D"], /* CJK Ideograph */ + ["\u5C2E", "\u5C2E"], /* CJK Ideograph */ + ["\u5C2F", "\u5C2F"], /* CJK Ideograph */ + ["\u5C30", "\u5C30"], /* CJK Ideograph */ + ["\u5C31", "\u5C31"], /* CJK Ideograph */ + ["\u5C32", "\u5C32"], /* CJK Ideograph */ + ["\u5C33", "\u5C33"], /* CJK Ideograph */ + ["\u5C34", "\u5C34"], /* CJK Ideograph */ + ["\u5C35", "\u5C35"], /* CJK Ideograph */ + ["\u5C36", "\u5C36"], /* CJK Ideograph */ + ["\u5C37", "\u5C37"], /* CJK Ideograph */ + ["\u5C38", "\u5C38"], /* CJK Ideograph */ + ["\u5C39", "\u5C39"], /* CJK Ideograph */ + ["\u5C3A", "\u5C3A"], /* CJK Ideograph */ + ["\u5C3B", "\u5C3B"], /* CJK Ideograph */ + ["\u5C3C", "\u5C3C"], /* CJK Ideograph */ + ["\u5C3D", "\u5C3D"], /* CJK Ideograph */ + ["\u5C3E", "\u5C3E"], /* CJK Ideograph */ + ["\u5C3F", "\u5C3F"], /* CJK Ideograph */ + ["\u5C40", "\u5C40"], /* CJK Ideograph */ + ["\u5C41", "\u5C41"], /* CJK Ideograph */ + ["\u5C42", "\u5C42"], /* CJK Ideograph */ + ["\u5C43", "\u5C43"], /* CJK Ideograph */ + ["\u5C44", "\u5C44"], /* CJK Ideograph */ + ["\u5C45", "\u5C45"], /* CJK Ideograph */ + ["\u5C46", "\u5C46"], /* CJK Ideograph */ + ["\u5C47", "\u5C47"], /* CJK Ideograph */ + ["\u5C48", "\u5C48"], /* CJK Ideograph */ + ["\u5C49", "\u5C49"], /* CJK Ideograph */ + ["\u5C4A", "\u5C4A"], /* CJK Ideograph */ + ["\u5C4B", "\u5C4B"], /* CJK Ideograph */ + ["\u5C4C", "\u5C4C"], /* CJK Ideograph */ + ["\u5C4D", "\u5C4D"], /* CJK Ideograph */ + ["\u5C4E", "\u5C4E"], /* CJK Ideograph */ + ["\u5C4F", "\u5C4F"], /* CJK Ideograph */ + ["\u5C50", "\u5C50"], /* CJK Ideograph */ + ["\u5C51", "\u5C51"], /* CJK Ideograph */ + ["\u5C52", "\u5C52"], /* CJK Ideograph */ + ["\u5C53", "\u5C53"], /* CJK Ideograph */ + ["\u5C54", "\u5C54"], /* CJK Ideograph */ + ["\u5C55", "\u5C55"], /* CJK Ideograph */ + ["\u5C56", "\u5C56"], /* CJK Ideograph */ + ["\u5C57", "\u5C57"], /* CJK Ideograph */ + ["\u5C58", "\u5C58"], /* CJK Ideograph */ + ["\u5C59", "\u5C59"], /* CJK Ideograph */ + ["\u5C5A", "\u5C5A"], /* CJK Ideograph */ + ["\u5C5B", "\u5C5B"], /* CJK Ideograph */ + ["\u5C5C", "\u5C5C"], /* CJK Ideograph */ + ["\u5C5D", "\u5C5D"], /* CJK Ideograph */ + ["\u5C5E", "\u5C5E"], /* CJK Ideograph */ + ["\u5C5F", "\u5C5F"], /* CJK Ideograph */ + ["\u5C60", "\u5C60"], /* CJK Ideograph */ + ["\u5C61", "\u5C61"], /* CJK Ideograph */ + ["\u5C62", "\u5C62"], /* CJK Ideograph */ + ["\u5C63", "\u5C63"], /* CJK Ideograph */ + ["\u5C64", "\u5C64"], /* CJK Ideograph */ + ["\u5C65", "\u5C65"], /* CJK Ideograph */ + ["\u5C66", "\u5C66"], /* CJK Ideograph */ + ["\u5C67", "\u5C67"], /* CJK Ideograph */ + ["\u5C68", "\u5C68"], /* CJK Ideograph */ + ["\u5C69", "\u5C69"], /* CJK Ideograph */ + ["\u5C6A", "\u5C6A"], /* CJK Ideograph */ + ["\u5C6B", "\u5C6B"], /* CJK Ideograph */ + ["\u5C6C", "\u5C6C"], /* CJK Ideograph */ + ["\u5C6D", "\u5C6D"], /* CJK Ideograph */ + ["\u5C6E", "\u5C6E"], /* CJK Ideograph */ + ["\u5C6F", "\u5C6F"], /* CJK Ideograph */ + ["\u5C70", "\u5C70"], /* CJK Ideograph */ + ["\u5C71", "\u5C71"], /* CJK Ideograph */ + ["\u5C72", "\u5C72"], /* CJK Ideograph */ + ["\u5C73", "\u5C73"], /* CJK Ideograph */ + ["\u5C74", "\u5C74"], /* CJK Ideograph */ + ["\u5C75", "\u5C75"], /* CJK Ideograph */ + ["\u5C76", "\u5C76"], /* CJK Ideograph */ + ["\u5C77", "\u5C77"], /* CJK Ideograph */ + ["\u5C78", "\u5C78"], /* CJK Ideograph */ + ["\u5C79", "\u5C79"], /* CJK Ideograph */ + ["\u5C7A", "\u5C7A"], /* CJK Ideograph */ + ["\u5C7B", "\u5C7B"], /* CJK Ideograph */ + ["\u5C7C", "\u5C7C"], /* CJK Ideograph */ + ["\u5C7D", "\u5C7D"], /* CJK Ideograph */ + ["\u5C7E", "\u5C7E"], /* CJK Ideograph */ + ["\u5C7F", "\u5C7F"], /* CJK Ideograph */ + ["\u5C80", "\u5C80"], /* CJK Ideograph */ + ["\u5C81", "\u5C81"], /* CJK Ideograph */ + ["\u5C82", "\u5C82"], /* CJK Ideograph */ + ["\u5C83", "\u5C83"], /* CJK Ideograph */ + ["\u5C84", "\u5C84"], /* CJK Ideograph */ + ["\u5C85", "\u5C85"], /* CJK Ideograph */ + ["\u5C86", "\u5C86"], /* CJK Ideograph */ + ["\u5C87", "\u5C87"], /* CJK Ideograph */ + ["\u5C88", "\u5C88"], /* CJK Ideograph */ + ["\u5C89", "\u5C89"], /* CJK Ideograph */ + ["\u5C8A", "\u5C8A"], /* CJK Ideograph */ + ["\u5C8B", "\u5C8B"], /* CJK Ideograph */ + ["\u5C8C", "\u5C8C"], /* CJK Ideograph */ + ["\u5C8D", "\u5C8D"], /* CJK Ideograph */ + ["\u5C8E", "\u5C8E"], /* CJK Ideograph */ + ["\u5C8F", "\u5C8F"], /* CJK Ideograph */ + ["\u5C90", "\u5C90"], /* CJK Ideograph */ + ["\u5C91", "\u5C91"], /* CJK Ideograph */ + ["\u5C92", "\u5C92"], /* CJK Ideograph */ + ["\u5C93", "\u5C93"], /* CJK Ideograph */ + ["\u5C94", "\u5C94"], /* CJK Ideograph */ + ["\u5C95", "\u5C95"], /* CJK Ideograph */ + ["\u5C96", "\u5C96"], /* CJK Ideograph */ + ["\u5C97", "\u5C97"], /* CJK Ideograph */ + ["\u5C98", "\u5C98"], /* CJK Ideograph */ + ["\u5C99", "\u5C99"], /* CJK Ideograph */ + ["\u5C9A", "\u5C9A"], /* CJK Ideograph */ + ["\u5C9B", "\u5C9B"], /* CJK Ideograph */ + ["\u5C9C", "\u5C9C"], /* CJK Ideograph */ + ["\u5C9D", "\u5C9D"], /* CJK Ideograph */ + ["\u5C9E", "\u5C9E"], /* CJK Ideograph */ + ["\u5C9F", "\u5C9F"], /* CJK Ideograph */ + ["\u5CA0", "\u5CA0"], /* CJK Ideograph */ + ["\u5CA1", "\u5CA1"], /* CJK Ideograph */ + ["\u5CA2", "\u5CA2"], /* CJK Ideograph */ + ["\u5CA3", "\u5CA3"], /* CJK Ideograph */ + ["\u5CA4", "\u5CA4"], /* CJK Ideograph */ + ["\u5CA5", "\u5CA5"], /* CJK Ideograph */ + ["\u5CA6", "\u5CA6"], /* CJK Ideograph */ + ["\u5CA7", "\u5CA7"], /* CJK Ideograph */ + ["\u5CA8", "\u5CA8"], /* CJK Ideograph */ + ["\u5CA9", "\u5CA9"], /* CJK Ideograph */ + ["\u5CAA", "\u5CAA"], /* CJK Ideograph */ + ["\u5CAB", "\u5CAB"], /* CJK Ideograph */ + ["\u5CAC", "\u5CAC"], /* CJK Ideograph */ + ["\u5CAD", "\u5CAD"], /* CJK Ideograph */ + ["\u5CAE", "\u5CAE"], /* CJK Ideograph */ + ["\u5CAF", "\u5CAF"], /* CJK Ideograph */ + ["\u5CB0", "\u5CB0"], /* CJK Ideograph */ + ["\u5CB1", "\u5CB1"], /* CJK Ideograph */ + ["\u5CB2", "\u5CB2"], /* CJK Ideograph */ + ["\u5CB3", "\u5CB3"], /* CJK Ideograph */ + ["\u5CB4", "\u5CB4"], /* CJK Ideograph */ + ["\u5CB5", "\u5CB5"], /* CJK Ideograph */ + ["\u5CB6", "\u5CB6"], /* CJK Ideograph */ + ["\u5CB7", "\u5CB7"], /* CJK Ideograph */ + ["\u5CB8", "\u5CB8"], /* CJK Ideograph */ + ["\u5CB9", "\u5CB9"], /* CJK Ideograph */ + ["\u5CBA", "\u5CBA"], /* CJK Ideograph */ + ["\u5CBB", "\u5CBB"], /* CJK Ideograph */ + ["\u5CBC", "\u5CBC"], /* CJK Ideograph */ + ["\u5CBD", "\u5CBD"], /* CJK Ideograph */ + ["\u5CBE", "\u5CBE"], /* CJK Ideograph */ + ["\u5CBF", "\u5CBF"], /* CJK Ideograph */ + ["\u5CC0", "\u5CC0"], /* CJK Ideograph */ + ["\u5CC1", "\u5CC1"], /* CJK Ideograph */ + ["\u5CC2", "\u5CC2"], /* CJK Ideograph */ + ["\u5CC3", "\u5CC3"], /* CJK Ideograph */ + ["\u5CC4", "\u5CC4"], /* CJK Ideograph */ + ["\u5CC5", "\u5CC5"], /* CJK Ideograph */ + ["\u5CC6", "\u5CC6"], /* CJK Ideograph */ + ["\u5CC7", "\u5CC7"], /* CJK Ideograph */ + ["\u5CC8", "\u5CC8"], /* CJK Ideograph */ + ["\u5CC9", "\u5CC9"], /* CJK Ideograph */ + ["\u5CCA", "\u5CCA"], /* CJK Ideograph */ + ["\u5CCB", "\u5CCB"], /* CJK Ideograph */ + ["\u5CCC", "\u5CCC"], /* CJK Ideograph */ + ["\u5CCD", "\u5CCD"], /* CJK Ideograph */ + ["\u5CCE", "\u5CCE"], /* CJK Ideograph */ + ["\u5CCF", "\u5CCF"], /* CJK Ideograph */ + ["\u5CD0", "\u5CD0"], /* CJK Ideograph */ + ["\u5CD1", "\u5CD1"], /* CJK Ideograph */ + ["\u5CD2", "\u5CD2"], /* CJK Ideograph */ + ["\u5CD3", "\u5CD3"], /* CJK Ideograph */ + ["\u5CD4", "\u5CD4"], /* CJK Ideograph */ + ["\u5CD5", "\u5CD5"], /* CJK Ideograph */ + ["\u5CD6", "\u5CD6"], /* CJK Ideograph */ + ["\u5CD7", "\u5CD7"], /* CJK Ideograph */ + ["\u5CD8", "\u5CD8"], /* CJK Ideograph */ + ["\u5CD9", "\u5CD9"], /* CJK Ideograph */ + ["\u5CDA", "\u5CDA"], /* CJK Ideograph */ + ["\u5CDB", "\u5CDB"], /* CJK Ideograph */ + ["\u5CDC", "\u5CDC"], /* CJK Ideograph */ + ["\u5CDD", "\u5CDD"], /* CJK Ideograph */ + ["\u5CDE", "\u5CDE"], /* CJK Ideograph */ + ["\u5CDF", "\u5CDF"], /* CJK Ideograph */ + ["\u5CE0", "\u5CE0"], /* CJK Ideograph */ + ["\u5CE1", "\u5CE1"], /* CJK Ideograph */ + ["\u5CE2", "\u5CE2"], /* CJK Ideograph */ + ["\u5CE3", "\u5CE3"], /* CJK Ideograph */ + ["\u5CE4", "\u5CE4"], /* CJK Ideograph */ + ["\u5CE5", "\u5CE5"], /* CJK Ideograph */ + ["\u5CE6", "\u5CE6"], /* CJK Ideograph */ + ["\u5CE7", "\u5CE7"], /* CJK Ideograph */ + ["\u5CE8", "\u5CE8"], /* CJK Ideograph */ + ["\u5CE9", "\u5CE9"], /* CJK Ideograph */ + ["\u5CEA", "\u5CEA"], /* CJK Ideograph */ + ["\u5CEB", "\u5CEB"], /* CJK Ideograph */ + ["\u5CEC", "\u5CEC"], /* CJK Ideograph */ + ["\u5CED", "\u5CED"], /* CJK Ideograph */ + ["\u5CEE", "\u5CEE"], /* CJK Ideograph */ + ["\u5CEF", "\u5CEF"], /* CJK Ideograph */ + ["\u5CF0", "\u5CF0"], /* CJK Ideograph */ + ["\u5CF1", "\u5CF1"], /* CJK Ideograph */ + ["\u5CF2", "\u5CF2"], /* CJK Ideograph */ + ["\u5CF3", "\u5CF3"], /* CJK Ideograph */ + ["\u5CF4", "\u5CF4"], /* CJK Ideograph */ + ["\u5CF5", "\u5CF5"], /* CJK Ideograph */ + ["\u5CF6", "\u5CF6"], /* CJK Ideograph */ + ["\u5CF7", "\u5CF7"], /* CJK Ideograph */ + ["\u5CF8", "\u5CF8"], /* CJK Ideograph */ + ["\u5CF9", "\u5CF9"], /* CJK Ideograph */ + ["\u5CFA", "\u5CFA"], /* CJK Ideograph */ + ["\u5CFB", "\u5CFB"], /* CJK Ideograph */ + ["\u5CFC", "\u5CFC"], /* CJK Ideograph */ + ["\u5CFD", "\u5CFD"], /* CJK Ideograph */ + ["\u5CFE", "\u5CFE"], /* CJK Ideograph */ + ["\u5CFF", "\u5CFF"], /* CJK Ideograph */ + ["\u5D00", "\u5D00"], /* CJK Ideograph */ + ["\u5D01", "\u5D01"], /* CJK Ideograph */ + ["\u5D02", "\u5D02"], /* CJK Ideograph */ + ["\u5D03", "\u5D03"], /* CJK Ideograph */ + ["\u5D04", "\u5D04"], /* CJK Ideograph */ + ["\u5D05", "\u5D05"], /* CJK Ideograph */ + ["\u5D06", "\u5D06"], /* CJK Ideograph */ + ["\u5D07", "\u5D07"], /* CJK Ideograph */ + ["\u5D08", "\u5D08"], /* CJK Ideograph */ + ["\u5D09", "\u5D09"], /* CJK Ideograph */ + ["\u5D0A", "\u5D0A"], /* CJK Ideograph */ + ["\u5D0B", "\u5D0B"], /* CJK Ideograph */ + ["\u5D0C", "\u5D0C"], /* CJK Ideograph */ + ["\u5D0D", "\u5D0D"], /* CJK Ideograph */ + ["\u5D0E", "\u5D0E"], /* CJK Ideograph */ + ["\u5D0F", "\u5D0F"], /* CJK Ideograph */ + ["\u5D10", "\u5D10"], /* CJK Ideograph */ + ["\u5D11", "\u5D11"], /* CJK Ideograph */ + ["\u5D12", "\u5D12"], /* CJK Ideograph */ + ["\u5D13", "\u5D13"], /* CJK Ideograph */ + ["\u5D14", "\u5D14"], /* CJK Ideograph */ + ["\u5D15", "\u5D15"], /* CJK Ideograph */ + ["\u5D16", "\u5D16"], /* CJK Ideograph */ + ["\u5D17", "\u5D17"], /* CJK Ideograph */ + ["\u5D18", "\u5D18"], /* CJK Ideograph */ + ["\u5D19", "\u5D19"], /* CJK Ideograph */ + ["\u5D1A", "\u5D1A"], /* CJK Ideograph */ + ["\u5D1B", "\u5D1B"], /* CJK Ideograph */ + ["\u5D1C", "\u5D1C"], /* CJK Ideograph */ + ["\u5D1D", "\u5D1D"], /* CJK Ideograph */ + ["\u5D1E", "\u5D1E"], /* CJK Ideograph */ + ["\u5D1F", "\u5D1F"], /* CJK Ideograph */ + ["\u5D20", "\u5D20"], /* CJK Ideograph */ + ["\u5D21", "\u5D21"], /* CJK Ideograph */ + ["\u5D22", "\u5D22"], /* CJK Ideograph */ + ["\u5D23", "\u5D23"], /* CJK Ideograph */ + ["\u5D24", "\u5D24"], /* CJK Ideograph */ + ["\u5D25", "\u5D25"], /* CJK Ideograph */ + ["\u5D26", "\u5D26"], /* CJK Ideograph */ + ["\u5D27", "\u5D27"], /* CJK Ideograph */ + ["\u5D28", "\u5D28"], /* CJK Ideograph */ + ["\u5D29", "\u5D29"], /* CJK Ideograph */ + ["\u5D2A", "\u5D2A"], /* CJK Ideograph */ + ["\u5D2B", "\u5D2B"], /* CJK Ideograph */ + ["\u5D2C", "\u5D2C"], /* CJK Ideograph */ + ["\u5D2D", "\u5D2D"], /* CJK Ideograph */ + ["\u5D2E", "\u5D2E"], /* CJK Ideograph */ + ["\u5D2F", "\u5D2F"], /* CJK Ideograph */ + ["\u5D30", "\u5D30"], /* CJK Ideograph */ + ["\u5D31", "\u5D31"], /* CJK Ideograph */ + ["\u5D32", "\u5D32"], /* CJK Ideograph */ + ["\u5D33", "\u5D33"], /* CJK Ideograph */ + ["\u5D34", "\u5D34"], /* CJK Ideograph */ + ["\u5D35", "\u5D35"], /* CJK Ideograph */ + ["\u5D36", "\u5D36"], /* CJK Ideograph */ + ["\u5D37", "\u5D37"], /* CJK Ideograph */ + ["\u5D38", "\u5D38"], /* CJK Ideograph */ + ["\u5D39", "\u5D39"], /* CJK Ideograph */ + ["\u5D3A", "\u5D3A"], /* CJK Ideograph */ + ["\u5D3B", "\u5D3B"], /* CJK Ideograph */ + ["\u5D3C", "\u5D3C"], /* CJK Ideograph */ + ["\u5D3D", "\u5D3D"], /* CJK Ideograph */ + ["\u5D3E", "\u5D3E"], /* CJK Ideograph */ + ["\u5D3F", "\u5D3F"], /* CJK Ideograph */ + ["\u5D40", "\u5D40"], /* CJK Ideograph */ + ["\u5D41", "\u5D41"], /* CJK Ideograph */ + ["\u5D42", "\u5D42"], /* CJK Ideograph */ + ["\u5D43", "\u5D43"], /* CJK Ideograph */ + ["\u5D44", "\u5D44"], /* CJK Ideograph */ + ["\u5D45", "\u5D45"], /* CJK Ideograph */ + ["\u5D46", "\u5D46"], /* CJK Ideograph */ + ["\u5D47", "\u5D47"], /* CJK Ideograph */ + ["\u5D48", "\u5D48"], /* CJK Ideograph */ + ["\u5D49", "\u5D49"], /* CJK Ideograph */ + ["\u5D4A", "\u5D4A"], /* CJK Ideograph */ + ["\u5D4B", "\u5D4B"], /* CJK Ideograph */ + ["\u5D4C", "\u5D4C"], /* CJK Ideograph */ + ["\u5D4D", "\u5D4D"], /* CJK Ideograph */ + ["\u5D4E", "\u5D4E"], /* CJK Ideograph */ + ["\u5D4F", "\u5D4F"], /* CJK Ideograph */ + ["\u5D50", "\u5D50"], /* CJK Ideograph */ + ["\u5D51", "\u5D51"], /* CJK Ideograph */ + ["\u5D52", "\u5D52"], /* CJK Ideograph */ + ["\u5D53", "\u5D53"], /* CJK Ideograph */ + ["\u5D54", "\u5D54"], /* CJK Ideograph */ + ["\u5D55", "\u5D55"], /* CJK Ideograph */ + ["\u5D56", "\u5D56"], /* CJK Ideograph */ + ["\u5D57", "\u5D57"], /* CJK Ideograph */ + ["\u5D58", "\u5D58"], /* CJK Ideograph */ + ["\u5D59", "\u5D59"], /* CJK Ideograph */ + ["\u5D5A", "\u5D5A"], /* CJK Ideograph */ + ["\u5D5B", "\u5D5B"], /* CJK Ideograph */ + ["\u5D5C", "\u5D5C"], /* CJK Ideograph */ + ["\u5D5D", "\u5D5D"], /* CJK Ideograph */ + ["\u5D5E", "\u5D5E"], /* CJK Ideograph */ + ["\u5D5F", "\u5D5F"], /* CJK Ideograph */ + ["\u5D60", "\u5D60"], /* CJK Ideograph */ + ["\u5D61", "\u5D61"], /* CJK Ideograph */ + ["\u5D62", "\u5D62"], /* CJK Ideograph */ + ["\u5D63", "\u5D63"], /* CJK Ideograph */ + ["\u5D64", "\u5D64"], /* CJK Ideograph */ + ["\u5D65", "\u5D65"], /* CJK Ideograph */ + ["\u5D66", "\u5D66"], /* CJK Ideograph */ + ["\u5D67", "\u5D67"], /* CJK Ideograph */ + ["\u5D68", "\u5D68"], /* CJK Ideograph */ + ["\u5D69", "\u5D69"], /* CJK Ideograph */ + ["\u5D6A", "\u5D6A"], /* CJK Ideograph */ + ["\u5D6B", "\u5D6B"], /* CJK Ideograph */ + ["\u5D6C", "\u5D6C"], /* CJK Ideograph */ + ["\u5D6D", "\u5D6D"], /* CJK Ideograph */ + ["\u5D6E", "\u5D6E"], /* CJK Ideograph */ + ["\u5D6F", "\u5D6F"], /* CJK Ideograph */ + ["\u5D70", "\u5D70"], /* CJK Ideograph */ + ["\u5D71", "\u5D71"], /* CJK Ideograph */ + ["\u5D72", "\u5D72"], /* CJK Ideograph */ + ["\u5D73", "\u5D73"], /* CJK Ideograph */ + ["\u5D74", "\u5D74"], /* CJK Ideograph */ + ["\u5D75", "\u5D75"], /* CJK Ideograph */ + ["\u5D76", "\u5D76"], /* CJK Ideograph */ + ["\u5D77", "\u5D77"], /* CJK Ideograph */ + ["\u5D78", "\u5D78"], /* CJK Ideograph */ + ["\u5D79", "\u5D79"], /* CJK Ideograph */ + ["\u5D7A", "\u5D7A"], /* CJK Ideograph */ + ["\u5D7B", "\u5D7B"], /* CJK Ideograph */ + ["\u5D7C", "\u5D7C"], /* CJK Ideograph */ + ["\u5D7D", "\u5D7D"], /* CJK Ideograph */ + ["\u5D7E", "\u5D7E"], /* CJK Ideograph */ + ["\u5D7F", "\u5D7F"], /* CJK Ideograph */ + ["\u5D80", "\u5D80"], /* CJK Ideograph */ + ["\u5D81", "\u5D81"], /* CJK Ideograph */ + ["\u5D82", "\u5D82"], /* CJK Ideograph */ + ["\u5D83", "\u5D83"], /* CJK Ideograph */ + ["\u5D84", "\u5D84"], /* CJK Ideograph */ + ["\u5D85", "\u5D85"], /* CJK Ideograph */ + ["\u5D86", "\u5D86"], /* CJK Ideograph */ + ["\u5D87", "\u5D87"], /* CJK Ideograph */ + ["\u5D88", "\u5D88"], /* CJK Ideograph */ + ["\u5D89", "\u5D89"], /* CJK Ideograph */ + ["\u5D8A", "\u5D8A"], /* CJK Ideograph */ + ["\u5D8B", "\u5D8B"], /* CJK Ideograph */ + ["\u5D8C", "\u5D8C"], /* CJK Ideograph */ + ["\u5D8D", "\u5D8D"], /* CJK Ideograph */ + ["\u5D8E", "\u5D8E"], /* CJK Ideograph */ + ["\u5D8F", "\u5D8F"], /* CJK Ideograph */ + ["\u5D90", "\u5D90"], /* CJK Ideograph */ + ["\u5D91", "\u5D91"], /* CJK Ideograph */ + ["\u5D92", "\u5D92"], /* CJK Ideograph */ + ["\u5D93", "\u5D93"], /* CJK Ideograph */ + ["\u5D94", "\u5D94"], /* CJK Ideograph */ + ["\u5D95", "\u5D95"], /* CJK Ideograph */ + ["\u5D96", "\u5D96"], /* CJK Ideograph */ + ["\u5D97", "\u5D97"], /* CJK Ideograph */ + ["\u5D98", "\u5D98"], /* CJK Ideograph */ + ["\u5D99", "\u5D99"], /* CJK Ideograph */ + ["\u5D9A", "\u5D9A"], /* CJK Ideograph */ + ["\u5D9B", "\u5D9B"], /* CJK Ideograph */ + ["\u5D9C", "\u5D9C"], /* CJK Ideograph */ + ["\u5D9D", "\u5D9D"], /* CJK Ideograph */ + ["\u5D9E", "\u5D9E"], /* CJK Ideograph */ + ["\u5D9F", "\u5D9F"], /* CJK Ideograph */ + ["\u5DA0", "\u5DA0"], /* CJK Ideograph */ + ["\u5DA1", "\u5DA1"], /* CJK Ideograph */ + ["\u5DA2", "\u5DA2"], /* CJK Ideograph */ + ["\u5DA3", "\u5DA3"], /* CJK Ideograph */ + ["\u5DA4", "\u5DA4"], /* CJK Ideograph */ + ["\u5DA5", "\u5DA5"], /* CJK Ideograph */ + ["\u5DA6", "\u5DA6"], /* CJK Ideograph */ + ["\u5DA7", "\u5DA7"], /* CJK Ideograph */ + ["\u5DA8", "\u5DA8"], /* CJK Ideograph */ + ["\u5DA9", "\u5DA9"], /* CJK Ideograph */ + ["\u5DAA", "\u5DAA"], /* CJK Ideograph */ + ["\u5DAB", "\u5DAB"], /* CJK Ideograph */ + ["\u5DAC", "\u5DAC"], /* CJK Ideograph */ + ["\u5DAD", "\u5DAD"], /* CJK Ideograph */ + ["\u5DAE", "\u5DAE"], /* CJK Ideograph */ + ["\u5DAF", "\u5DAF"], /* CJK Ideograph */ + ["\u5DB0", "\u5DB0"], /* CJK Ideograph */ + ["\u5DB1", "\u5DB1"], /* CJK Ideograph */ + ["\u5DB2", "\u5DB2"], /* CJK Ideograph */ + ["\u5DB3", "\u5DB3"], /* CJK Ideograph */ + ["\u5DB4", "\u5DB4"], /* CJK Ideograph */ + ["\u5DB5", "\u5DB5"], /* CJK Ideograph */ + ["\u5DB6", "\u5DB6"], /* CJK Ideograph */ + ["\u5DB7", "\u5DB7"], /* CJK Ideograph */ + ["\u5DB8", "\u5DB8"], /* CJK Ideograph */ + ["\u5DB9", "\u5DB9"], /* CJK Ideograph */ + ["\u5DBA", "\u5DBA"], /* CJK Ideograph */ + ["\u5DBB", "\u5DBB"], /* CJK Ideograph */ + ["\u5DBC", "\u5DBC"], /* CJK Ideograph */ + ["\u5DBD", "\u5DBD"], /* CJK Ideograph */ + ["\u5DBE", "\u5DBE"], /* CJK Ideograph */ + ["\u5DBF", "\u5DBF"], /* CJK Ideograph */ + ["\u5DC0", "\u5DC0"], /* CJK Ideograph */ + ["\u5DC1", "\u5DC1"], /* CJK Ideograph */ + ["\u5DC2", "\u5DC2"], /* CJK Ideograph */ + ["\u5DC3", "\u5DC3"], /* CJK Ideograph */ + ["\u5DC4", "\u5DC4"], /* CJK Ideograph */ + ["\u5DC5", "\u5DC5"], /* CJK Ideograph */ + ["\u5DC6", "\u5DC6"], /* CJK Ideograph */ + ["\u5DC7", "\u5DC7"], /* CJK Ideograph */ + ["\u5DC8", "\u5DC8"], /* CJK Ideograph */ + ["\u5DC9", "\u5DC9"], /* CJK Ideograph */ + ["\u5DCA", "\u5DCA"], /* CJK Ideograph */ + ["\u5DCB", "\u5DCB"], /* CJK Ideograph */ + ["\u5DCC", "\u5DCC"], /* CJK Ideograph */ + ["\u5DCD", "\u5DCD"], /* CJK Ideograph */ + ["\u5DCE", "\u5DCE"], /* CJK Ideograph */ + ["\u5DCF", "\u5DCF"], /* CJK Ideograph */ + ["\u5DD0", "\u5DD0"], /* CJK Ideograph */ + ["\u5DD1", "\u5DD1"], /* CJK Ideograph */ + ["\u5DD2", "\u5DD2"], /* CJK Ideograph */ + ["\u5DD3", "\u5DD3"], /* CJK Ideograph */ + ["\u5DD4", "\u5DD4"], /* CJK Ideograph */ + ["\u5DD5", "\u5DD5"], /* CJK Ideograph */ + ["\u5DD6", "\u5DD6"], /* CJK Ideograph */ + ["\u5DD7", "\u5DD7"], /* CJK Ideograph */ + ["\u5DD8", "\u5DD8"], /* CJK Ideograph */ + ["\u5DD9", "\u5DD9"], /* CJK Ideograph */ + ["\u5DDA", "\u5DDA"], /* CJK Ideograph */ + ["\u5DDB", "\u5DDB"], /* CJK Ideograph */ + ["\u5DDC", "\u5DDC"], /* CJK Ideograph */ + ["\u5DDD", "\u5DDD"], /* CJK Ideograph */ + ["\u5DDE", "\u5DDE"], /* CJK Ideograph */ + ["\u5DDF", "\u5DDF"], /* CJK Ideograph */ + ["\u5DE0", "\u5DE0"], /* CJK Ideograph */ + ["\u5DE1", "\u5DE1"], /* CJK Ideograph */ + ["\u5DE2", "\u5DE2"], /* CJK Ideograph */ + ["\u5DE3", "\u5DE3"], /* CJK Ideograph */ + ["\u5DE4", "\u5DE4"], /* CJK Ideograph */ + ["\u5DE5", "\u5DE5"], /* CJK Ideograph */ + ["\u5DE6", "\u5DE6"], /* CJK Ideograph */ + ["\u5DE7", "\u5DE7"], /* CJK Ideograph */ + ["\u5DE8", "\u5DE8"], /* CJK Ideograph */ + ["\u5DE9", "\u5DE9"], /* CJK Ideograph */ + ["\u5DEA", "\u5DEA"], /* CJK Ideograph */ + ["\u5DEB", "\u5DEB"], /* CJK Ideograph */ + ["\u5DEC", "\u5DEC"], /* CJK Ideograph */ + ["\u5DED", "\u5DED"], /* CJK Ideograph */ + ["\u5DEE", "\u5DEE"], /* CJK Ideograph */ + ["\u5DEF", "\u5DEF"], /* CJK Ideograph */ + ["\u5DF0", "\u5DF0"], /* CJK Ideograph */ + ["\u5DF1", "\u5DF1"], /* CJK Ideograph */ + ["\u5DF2", "\u5DF2"], /* CJK Ideograph */ + ["\u5DF3", "\u5DF3"], /* CJK Ideograph */ + ["\u5DF4", "\u5DF4"], /* CJK Ideograph */ + ["\u5DF5", "\u5DF5"], /* CJK Ideograph */ + ["\u5DF6", "\u5DF6"], /* CJK Ideograph */ + ["\u5DF7", "\u5DF7"], /* CJK Ideograph */ + ["\u5DF8", "\u5DF8"], /* CJK Ideograph */ + ["\u5DF9", "\u5DF9"], /* CJK Ideograph */ + ["\u5DFA", "\u5DFA"], /* CJK Ideograph */ + ["\u5DFB", "\u5DFB"], /* CJK Ideograph */ + ["\u5DFC", "\u5DFC"], /* CJK Ideograph */ + ["\u5DFD", "\u5DFD"], /* CJK Ideograph */ + ["\u5DFE", "\u5DFE"], /* CJK Ideograph */ + ["\u5DFF", "\u5DFF"], /* CJK Ideograph */ + ["\u5E00", "\u5E00"], /* CJK Ideograph */ + ["\u5E01", "\u5E01"], /* CJK Ideograph */ + ["\u5E02", "\u5E02"], /* CJK Ideograph */ + ["\u5E03", "\u5E03"], /* CJK Ideograph */ + ["\u5E04", "\u5E04"], /* CJK Ideograph */ + ["\u5E05", "\u5E05"], /* CJK Ideograph */ + ["\u5E06", "\u5E06"], /* CJK Ideograph */ + ["\u5E07", "\u5E07"], /* CJK Ideograph */ + ["\u5E08", "\u5E08"], /* CJK Ideograph */ + ["\u5E09", "\u5E09"], /* CJK Ideograph */ + ["\u5E0A", "\u5E0A"], /* CJK Ideograph */ + ["\u5E0B", "\u5E0B"], /* CJK Ideograph */ + ["\u5E0C", "\u5E0C"], /* CJK Ideograph */ + ["\u5E0D", "\u5E0D"], /* CJK Ideograph */ + ["\u5E0E", "\u5E0E"], /* CJK Ideograph */ + ["\u5E0F", "\u5E0F"], /* CJK Ideograph */ + ["\u5E10", "\u5E10"], /* CJK Ideograph */ + ["\u5E11", "\u5E11"], /* CJK Ideograph */ + ["\u5E12", "\u5E12"], /* CJK Ideograph */ + ["\u5E13", "\u5E13"], /* CJK Ideograph */ + ["\u5E14", "\u5E14"], /* CJK Ideograph */ + ["\u5E15", "\u5E15"], /* CJK Ideograph */ + ["\u5E16", "\u5E16"], /* CJK Ideograph */ + ["\u5E17", "\u5E17"], /* CJK Ideograph */ + ["\u5E18", "\u5E18"], /* CJK Ideograph */ + ["\u5E19", "\u5E19"], /* CJK Ideograph */ + ["\u5E1A", "\u5E1A"], /* CJK Ideograph */ + ["\u5E1B", "\u5E1B"], /* CJK Ideograph */ + ["\u5E1C", "\u5E1C"], /* CJK Ideograph */ + ["\u5E1D", "\u5E1D"], /* CJK Ideograph */ + ["\u5E1E", "\u5E1E"], /* CJK Ideograph */ + ["\u5E1F", "\u5E1F"], /* CJK Ideograph */ + ["\u5E20", "\u5E20"], /* CJK Ideograph */ + ["\u5E21", "\u5E21"], /* CJK Ideograph */ + ["\u5E22", "\u5E22"], /* CJK Ideograph */ + ["\u5E23", "\u5E23"], /* CJK Ideograph */ + ["\u5E24", "\u5E24"], /* CJK Ideograph */ + ["\u5E25", "\u5E25"], /* CJK Ideograph */ + ["\u5E26", "\u5E26"], /* CJK Ideograph */ + ["\u5E27", "\u5E27"], /* CJK Ideograph */ + ["\u5E28", "\u5E28"], /* CJK Ideograph */ + ["\u5E29", "\u5E29"], /* CJK Ideograph */ + ["\u5E2A", "\u5E2A"], /* CJK Ideograph */ + ["\u5E2B", "\u5E2B"], /* CJK Ideograph */ + ["\u5E2C", "\u5E2C"], /* CJK Ideograph */ + ["\u5E2D", "\u5E2D"], /* CJK Ideograph */ + ["\u5E2E", "\u5E2E"], /* CJK Ideograph */ + ["\u5E2F", "\u5E2F"], /* CJK Ideograph */ + ["\u5E30", "\u5E30"], /* CJK Ideograph */ + ["\u5E31", "\u5E31"], /* CJK Ideograph */ + ["\u5E32", "\u5E32"], /* CJK Ideograph */ + ["\u5E33", "\u5E33"], /* CJK Ideograph */ + ["\u5E34", "\u5E34"], /* CJK Ideograph */ + ["\u5E35", "\u5E35"], /* CJK Ideograph */ + ["\u5E36", "\u5E36"], /* CJK Ideograph */ + ["\u5E37", "\u5E37"], /* CJK Ideograph */ + ["\u5E38", "\u5E38"], /* CJK Ideograph */ + ["\u5E39", "\u5E39"], /* CJK Ideograph */ + ["\u5E3A", "\u5E3A"], /* CJK Ideograph */ + ["\u5E3B", "\u5E3B"], /* CJK Ideograph */ + ["\u5E3C", "\u5E3C"], /* CJK Ideograph */ + ["\u5E3D", "\u5E3D"], /* CJK Ideograph */ + ["\u5E3E", "\u5E3E"], /* CJK Ideograph */ + ["\u5E3F", "\u5E3F"], /* CJK Ideograph */ + ["\u5E40", "\u5E40"], /* CJK Ideograph */ + ["\u5E41", "\u5E41"], /* CJK Ideograph */ + ["\u5E42", "\u5E42"], /* CJK Ideograph */ + ["\u5E43", "\u5E43"], /* CJK Ideograph */ + ["\u5E44", "\u5E44"], /* CJK Ideograph */ + ["\u5E45", "\u5E45"], /* CJK Ideograph */ + ["\u5E46", "\u5E46"], /* CJK Ideograph */ + ["\u5E47", "\u5E47"], /* CJK Ideograph */ + ["\u5E48", "\u5E48"], /* CJK Ideograph */ + ["\u5E49", "\u5E49"], /* CJK Ideograph */ + ["\u5E4A", "\u5E4A"], /* CJK Ideograph */ + ["\u5E4B", "\u5E4B"], /* CJK Ideograph */ + ["\u5E4C", "\u5E4C"], /* CJK Ideograph */ + ["\u5E4D", "\u5E4D"], /* CJK Ideograph */ + ["\u5E4E", "\u5E4E"], /* CJK Ideograph */ + ["\u5E4F", "\u5E4F"], /* CJK Ideograph */ + ["\u5E50", "\u5E50"], /* CJK Ideograph */ + ["\u5E51", "\u5E51"], /* CJK Ideograph */ + ["\u5E52", "\u5E52"], /* CJK Ideograph */ + ["\u5E53", "\u5E53"], /* CJK Ideograph */ + ["\u5E54", "\u5E54"], /* CJK Ideograph */ + ["\u5E55", "\u5E55"], /* CJK Ideograph */ + ["\u5E56", "\u5E56"], /* CJK Ideograph */ + ["\u5E57", "\u5E57"], /* CJK Ideograph */ + ["\u5E58", "\u5E58"], /* CJK Ideograph */ + ["\u5E59", "\u5E59"], /* CJK Ideograph */ + ["\u5E5A", "\u5E5A"], /* CJK Ideograph */ + ["\u5E5B", "\u5E5B"], /* CJK Ideograph */ + ["\u5E5C", "\u5E5C"], /* CJK Ideograph */ + ["\u5E5D", "\u5E5D"], /* CJK Ideograph */ + ["\u5E5E", "\u5E5E"], /* CJK Ideograph */ + ["\u5E5F", "\u5E5F"], /* CJK Ideograph */ + ["\u5E60", "\u5E60"], /* CJK Ideograph */ + ["\u5E61", "\u5E61"], /* CJK Ideograph */ + ["\u5E62", "\u5E62"], /* CJK Ideograph */ + ["\u5E63", "\u5E63"], /* CJK Ideograph */ + ["\u5E64", "\u5E64"], /* CJK Ideograph */ + ["\u5E65", "\u5E65"], /* CJK Ideograph */ + ["\u5E66", "\u5E66"], /* CJK Ideograph */ + ["\u5E67", "\u5E67"], /* CJK Ideograph */ + ["\u5E68", "\u5E68"], /* CJK Ideograph */ + ["\u5E69", "\u5E69"], /* CJK Ideograph */ + ["\u5E6A", "\u5E6A"], /* CJK Ideograph */ + ["\u5E6B", "\u5E6B"], /* CJK Ideograph */ + ["\u5E6C", "\u5E6C"], /* CJK Ideograph */ + ["\u5E6D", "\u5E6D"], /* CJK Ideograph */ + ["\u5E6E", "\u5E6E"], /* CJK Ideograph */ + ["\u5E6F", "\u5E6F"], /* CJK Ideograph */ + ["\u5E70", "\u5E70"], /* CJK Ideograph */ + ["\u5E71", "\u5E71"], /* CJK Ideograph */ + ["\u5E72", "\u5E72"], /* CJK Ideograph */ + ["\u5E73", "\u5E73"], /* CJK Ideograph */ + ["\u5E74", "\u5E74"], /* CJK Ideograph */ + ["\u5E75", "\u5E75"], /* CJK Ideograph */ + ["\u5E76", "\u5E76"], /* CJK Ideograph */ + ["\u5E77", "\u5E77"], /* CJK Ideograph */ + ["\u5E78", "\u5E78"], /* CJK Ideograph */ + ["\u5E79", "\u5E79"], /* CJK Ideograph */ + ["\u5E7A", "\u5E7A"], /* CJK Ideograph */ + ["\u5E7B", "\u5E7B"], /* CJK Ideograph */ + ["\u5E7C", "\u5E7C"], /* CJK Ideograph */ + ["\u5E7D", "\u5E7D"], /* CJK Ideograph */ + ["\u5E7E", "\u5E7E"], /* CJK Ideograph */ + ["\u5E7F", "\u5E7F"], /* CJK Ideograph */ + ["\u5E80", "\u5E80"], /* CJK Ideograph */ + ["\u5E81", "\u5E81"], /* CJK Ideograph */ + ["\u5E82", "\u5E82"], /* CJK Ideograph */ + ["\u5E83", "\u5E83"], /* CJK Ideograph */ + ["\u5E84", "\u5E84"], /* CJK Ideograph */ + ["\u5E85", "\u5E85"], /* CJK Ideograph */ + ["\u5E86", "\u5E86"], /* CJK Ideograph */ + ["\u5E87", "\u5E87"], /* CJK Ideograph */ + ["\u5E88", "\u5E88"], /* CJK Ideograph */ + ["\u5E89", "\u5E89"], /* CJK Ideograph */ + ["\u5E8A", "\u5E8A"], /* CJK Ideograph */ + ["\u5E8B", "\u5E8B"], /* CJK Ideograph */ + ["\u5E8C", "\u5E8C"], /* CJK Ideograph */ + ["\u5E8D", "\u5E8D"], /* CJK Ideograph */ + ["\u5E8E", "\u5E8E"], /* CJK Ideograph */ + ["\u5E8F", "\u5E8F"], /* CJK Ideograph */ + ["\u5E90", "\u5E90"], /* CJK Ideograph */ + ["\u5E91", "\u5E91"], /* CJK Ideograph */ + ["\u5E92", "\u5E92"], /* CJK Ideograph */ + ["\u5E93", "\u5E93"], /* CJK Ideograph */ + ["\u5E94", "\u5E94"], /* CJK Ideograph */ + ["\u5E95", "\u5E95"], /* CJK Ideograph */ + ["\u5E96", "\u5E96"], /* CJK Ideograph */ + ["\u5E97", "\u5E97"], /* CJK Ideograph */ + ["\u5E98", "\u5E98"], /* CJK Ideograph */ + ["\u5E99", "\u5E99"], /* CJK Ideograph */ + ["\u5E9A", "\u5E9A"], /* CJK Ideograph */ + ["\u5E9B", "\u5E9B"], /* CJK Ideograph */ + ["\u5E9C", "\u5E9C"], /* CJK Ideograph */ + ["\u5E9D", "\u5E9D"], /* CJK Ideograph */ + ["\u5E9E", "\u5E9E"], /* CJK Ideograph */ + ["\u5E9F", "\u5E9F"], /* CJK Ideograph */ + ["\u5EA0", "\u5EA0"], /* CJK Ideograph */ + ["\u5EA1", "\u5EA1"], /* CJK Ideograph */ + ["\u5EA2", "\u5EA2"], /* CJK Ideograph */ + ["\u5EA3", "\u5EA3"], /* CJK Ideograph */ + ["\u5EA4", "\u5EA4"], /* CJK Ideograph */ + ["\u5EA5", "\u5EA5"], /* CJK Ideograph */ + ["\u5EA6", "\u5EA6"], /* CJK Ideograph */ + ["\u5EA7", "\u5EA7"], /* CJK Ideograph */ + ["\u5EA8", "\u5EA8"], /* CJK Ideograph */ + ["\u5EA9", "\u5EA9"], /* CJK Ideograph */ + ["\u5EAA", "\u5EAA"], /* CJK Ideograph */ + ["\u5EAB", "\u5EAB"], /* CJK Ideograph */ + ["\u5EAC", "\u5EAC"], /* CJK Ideograph */ + ["\u5EAD", "\u5EAD"], /* CJK Ideograph */ + ["\u5EAE", "\u5EAE"], /* CJK Ideograph */ + ["\u5EAF", "\u5EAF"], /* CJK Ideograph */ + ["\u5EB0", "\u5EB0"], /* CJK Ideograph */ + ["\u5EB1", "\u5EB1"], /* CJK Ideograph */ + ["\u5EB2", "\u5EB2"], /* CJK Ideograph */ + ["\u5EB3", "\u5EB3"], /* CJK Ideograph */ + ["\u5EB4", "\u5EB4"], /* CJK Ideograph */ + ["\u5EB5", "\u5EB5"], /* CJK Ideograph */ + ["\u5EB6", "\u5EB6"], /* CJK Ideograph */ + ["\u5EB7", "\u5EB7"], /* CJK Ideograph */ + ["\u5EB8", "\u5EB8"], /* CJK Ideograph */ + ["\u5EB9", "\u5EB9"], /* CJK Ideograph */ + ["\u5EBA", "\u5EBA"], /* CJK Ideograph */ + ["\u5EBB", "\u5EBB"], /* CJK Ideograph */ + ["\u5EBC", "\u5EBC"], /* CJK Ideograph */ + ["\u5EBD", "\u5EBD"], /* CJK Ideograph */ + ["\u5EBE", "\u5EBE"], /* CJK Ideograph */ + ["\u5EBF", "\u5EBF"], /* CJK Ideograph */ + ["\u5EC0", "\u5EC0"], /* CJK Ideograph */ + ["\u5EC1", "\u5EC1"], /* CJK Ideograph */ + ["\u5EC2", "\u5EC2"], /* CJK Ideograph */ + ["\u5EC3", "\u5EC3"], /* CJK Ideograph */ + ["\u5EC4", "\u5EC4"], /* CJK Ideograph */ + ["\u5EC5", "\u5EC5"], /* CJK Ideograph */ + ["\u5EC6", "\u5EC6"], /* CJK Ideograph */ + ["\u5EC7", "\u5EC7"], /* CJK Ideograph */ + ["\u5EC8", "\u5EC8"], /* CJK Ideograph */ + ["\u5EC9", "\u5EC9"], /* CJK Ideograph */ + ["\u5ECA", "\u5ECA"], /* CJK Ideograph */ + ["\u5ECB", "\u5ECB"], /* CJK Ideograph */ + ["\u5ECC", "\u5ECC"], /* CJK Ideograph */ + ["\u5ECD", "\u5ECD"], /* CJK Ideograph */ + ["\u5ECE", "\u5ECE"], /* CJK Ideograph */ + ["\u5ECF", "\u5ECF"], /* CJK Ideograph */ + ["\u5ED0", "\u5ED0"], /* CJK Ideograph */ + ["\u5ED1", "\u5ED1"], /* CJK Ideograph */ + ["\u5ED2", "\u5ED2"], /* CJK Ideograph */ + ["\u5ED3", "\u5ED3"], /* CJK Ideograph */ + ["\u5ED4", "\u5ED4"], /* CJK Ideograph */ + ["\u5ED5", "\u5ED5"], /* CJK Ideograph */ + ["\u5ED6", "\u5ED6"], /* CJK Ideograph */ + ["\u5ED7", "\u5ED7"], /* CJK Ideograph */ + ["\u5ED8", "\u5ED8"], /* CJK Ideograph */ + ["\u5ED9", "\u5ED9"], /* CJK Ideograph */ + ["\u5EDA", "\u5EDA"], /* CJK Ideograph */ + ["\u5EDB", "\u5EDB"], /* CJK Ideograph */ + ["\u5EDC", "\u5EDC"], /* CJK Ideograph */ + ["\u5EDD", "\u5EDD"], /* CJK Ideograph */ + ["\u5EDE", "\u5EDE"], /* CJK Ideograph */ + ["\u5EDF", "\u5EDF"], /* CJK Ideograph */ + ["\u5EE0", "\u5EE0"], /* CJK Ideograph */ + ["\u5EE1", "\u5EE1"], /* CJK Ideograph */ + ["\u5EE2", "\u5EE2"], /* CJK Ideograph */ + ["\u5EE3", "\u5EE3"], /* CJK Ideograph */ + ["\u5EE4", "\u5EE4"], /* CJK Ideograph */ + ["\u5EE5", "\u5EE5"], /* CJK Ideograph */ + ["\u5EE6", "\u5EE6"], /* CJK Ideograph */ + ["\u5EE7", "\u5EE7"], /* CJK Ideograph */ + ["\u5EE8", "\u5EE8"], /* CJK Ideograph */ + ["\u5EE9", "\u5EE9"], /* CJK Ideograph */ + ["\u5EEA", "\u5EEA"], /* CJK Ideograph */ + ["\u5EEB", "\u5EEB"], /* CJK Ideograph */ + ["\u5EEC", "\u5EEC"], /* CJK Ideograph */ + ["\u5EED", "\u5EED"], /* CJK Ideograph */ + ["\u5EEE", "\u5EEE"], /* CJK Ideograph */ + ["\u5EEF", "\u5EEF"], /* CJK Ideograph */ + ["\u5EF0", "\u5EF0"], /* CJK Ideograph */ + ["\u5EF1", "\u5EF1"], /* CJK Ideograph */ + ["\u5EF2", "\u5EF2"], /* CJK Ideograph */ + ["\u5EF3", "\u5EF3"], /* CJK Ideograph */ + ["\u5EF4", "\u5EF4"], /* CJK Ideograph */ + ["\u5EF5", "\u5EF5"], /* CJK Ideograph */ + ["\u5EF6", "\u5EF6"], /* CJK Ideograph */ + ["\u5EF7", "\u5EF7"], /* CJK Ideograph */ + ["\u5EF8", "\u5EF8"], /* CJK Ideograph */ + ["\u5EF9", "\u5EF9"], /* CJK Ideograph */ + ["\u5EFA", "\u5EFA"], /* CJK Ideograph */ + ["\u5EFB", "\u5EFB"], /* CJK Ideograph */ + ["\u5EFC", "\u5EFC"], /* CJK Ideograph */ + ["\u5EFD", "\u5EFD"], /* CJK Ideograph */ + ["\u5EFE", "\u5EFE"], /* CJK Ideograph */ + ["\u5EFF", "\u5EFF"], /* CJK Ideograph */ + ["\u5F00", "\u5F00"], /* CJK Ideograph */ + ["\u5F01", "\u5F01"], /* CJK Ideograph */ + ["\u5F02", "\u5F02"], /* CJK Ideograph */ + ["\u5F03", "\u5F03"], /* CJK Ideograph */ + ["\u5F04", "\u5F04"], /* CJK Ideograph */ + ["\u5F05", "\u5F05"], /* CJK Ideograph */ + ["\u5F06", "\u5F06"], /* CJK Ideograph */ + ["\u5F07", "\u5F07"], /* CJK Ideograph */ + ["\u5F08", "\u5F08"], /* CJK Ideograph */ + ["\u5F09", "\u5F09"], /* CJK Ideograph */ + ["\u5F0A", "\u5F0A"], /* CJK Ideograph */ + ["\u5F0B", "\u5F0B"], /* CJK Ideograph */ + ["\u5F0C", "\u5F0C"], /* CJK Ideograph */ + ["\u5F0D", "\u5F0D"], /* CJK Ideograph */ + ["\u5F0E", "\u5F0E"], /* CJK Ideograph */ + ["\u5F0F", "\u5F0F"], /* CJK Ideograph */ + ["\u5F10", "\u5F10"], /* CJK Ideograph */ + ["\u5F11", "\u5F11"], /* CJK Ideograph */ + ["\u5F12", "\u5F12"], /* CJK Ideograph */ + ["\u5F13", "\u5F13"], /* CJK Ideograph */ + ["\u5F14", "\u5F14"], /* CJK Ideograph */ + ["\u5F15", "\u5F15"], /* CJK Ideograph */ + ["\u5F16", "\u5F16"], /* CJK Ideograph */ + ["\u5F17", "\u5F17"], /* CJK Ideograph */ + ["\u5F18", "\u5F18"], /* CJK Ideograph */ + ["\u5F19", "\u5F19"], /* CJK Ideograph */ + ["\u5F1A", "\u5F1A"], /* CJK Ideograph */ + ["\u5F1B", "\u5F1B"], /* CJK Ideograph */ + ["\u5F1C", "\u5F1C"], /* CJK Ideograph */ + ["\u5F1D", "\u5F1D"], /* CJK Ideograph */ + ["\u5F1E", "\u5F1E"], /* CJK Ideograph */ + ["\u5F1F", "\u5F1F"], /* CJK Ideograph */ + ["\u5F20", "\u5F20"], /* CJK Ideograph */ + ["\u5F21", "\u5F21"], /* CJK Ideograph */ + ["\u5F22", "\u5F22"], /* CJK Ideograph */ + ["\u5F23", "\u5F23"], /* CJK Ideograph */ + ["\u5F24", "\u5F24"], /* CJK Ideograph */ + ["\u5F25", "\u5F25"], /* CJK Ideograph */ + ["\u5F26", "\u5F26"], /* CJK Ideograph */ + ["\u5F27", "\u5F27"], /* CJK Ideograph */ + ["\u5F28", "\u5F28"], /* CJK Ideograph */ + ["\u5F29", "\u5F29"], /* CJK Ideograph */ + ["\u5F2A", "\u5F2A"], /* CJK Ideograph */ + ["\u5F2B", "\u5F2B"], /* CJK Ideograph */ + ["\u5F2C", "\u5F2C"], /* CJK Ideograph */ + ["\u5F2D", "\u5F2D"], /* CJK Ideograph */ + ["\u5F2E", "\u5F2E"], /* CJK Ideograph */ + ["\u5F2F", "\u5F2F"], /* CJK Ideograph */ + ["\u5F30", "\u5F30"], /* CJK Ideograph */ + ["\u5F31", "\u5F31"], /* CJK Ideograph */ + ["\u5F32", "\u5F32"], /* CJK Ideograph */ + ["\u5F33", "\u5F33"], /* CJK Ideograph */ + ["\u5F34", "\u5F34"], /* CJK Ideograph */ + ["\u5F35", "\u5F35"], /* CJK Ideograph */ + ["\u5F36", "\u5F36"], /* CJK Ideograph */ + ["\u5F37", "\u5F37"], /* CJK Ideograph */ + ["\u5F38", "\u5F38"], /* CJK Ideograph */ + ["\u5F39", "\u5F39"], /* CJK Ideograph */ + ["\u5F3A", "\u5F3A"], /* CJK Ideograph */ + ["\u5F3B", "\u5F3B"], /* CJK Ideograph */ + ["\u5F3C", "\u5F3C"], /* CJK Ideograph */ + ["\u5F3D", "\u5F3D"], /* CJK Ideograph */ + ["\u5F3E", "\u5F3E"], /* CJK Ideograph */ + ["\u5F3F", "\u5F3F"], /* CJK Ideograph */ + ["\u5F40", "\u5F40"], /* CJK Ideograph */ + ["\u5F41", "\u5F41"], /* CJK Ideograph */ + ["\u5F42", "\u5F42"], /* CJK Ideograph */ + ["\u5F43", "\u5F43"], /* CJK Ideograph */ + ["\u5F44", "\u5F44"], /* CJK Ideograph */ + ["\u5F45", "\u5F45"], /* CJK Ideograph */ + ["\u5F46", "\u5F46"], /* CJK Ideograph */ + ["\u5F47", "\u5F47"], /* CJK Ideograph */ + ["\u5F48", "\u5F48"], /* CJK Ideograph */ + ["\u5F49", "\u5F49"], /* CJK Ideograph */ + ["\u5F4A", "\u5F4A"], /* CJK Ideograph */ + ["\u5F4B", "\u5F4B"], /* CJK Ideograph */ + ["\u5F4C", "\u5F4C"], /* CJK Ideograph */ + ["\u5F4D", "\u5F4D"], /* CJK Ideograph */ + ["\u5F4E", "\u5F4E"], /* CJK Ideograph */ + ["\u5F4F", "\u5F4F"], /* CJK Ideograph */ + ["\u5F50", "\u5F50"], /* CJK Ideograph */ + ["\u5F51", "\u5F51"], /* CJK Ideograph */ + ["\u5F52", "\u5F52"], /* CJK Ideograph */ + ["\u5F53", "\u5F53"], /* CJK Ideograph */ + ["\u5F54", "\u5F54"], /* CJK Ideograph */ + ["\u5F55", "\u5F55"], /* CJK Ideograph */ + ["\u5F56", "\u5F56"], /* CJK Ideograph */ + ["\u5F57", "\u5F57"], /* CJK Ideograph */ + ["\u5F58", "\u5F58"], /* CJK Ideograph */ + ["\u5F59", "\u5F59"], /* CJK Ideograph */ + ["\u5F5A", "\u5F5A"], /* CJK Ideograph */ + ["\u5F5B", "\u5F5B"], /* CJK Ideograph */ + ["\u5F5C", "\u5F5C"], /* CJK Ideograph */ + ["\u5F5D", "\u5F5D"], /* CJK Ideograph */ + ["\u5F5E", "\u5F5E"], /* CJK Ideograph */ + ["\u5F5F", "\u5F5F"], /* CJK Ideograph */ + ["\u5F60", "\u5F60"], /* CJK Ideograph */ + ["\u5F61", "\u5F61"], /* CJK Ideograph */ + ["\u5F62", "\u5F62"], /* CJK Ideograph */ + ["\u5F63", "\u5F63"], /* CJK Ideograph */ + ["\u5F64", "\u5F64"], /* CJK Ideograph */ + ["\u5F65", "\u5F65"], /* CJK Ideograph */ + ["\u5F66", "\u5F66"], /* CJK Ideograph */ + ["\u5F67", "\u5F67"], /* CJK Ideograph */ + ["\u5F68", "\u5F68"], /* CJK Ideograph */ + ["\u5F69", "\u5F69"], /* CJK Ideograph */ + ["\u5F6A", "\u5F6A"], /* CJK Ideograph */ + ["\u5F6B", "\u5F6B"], /* CJK Ideograph */ + ["\u5F6C", "\u5F6C"], /* CJK Ideograph */ + ["\u5F6D", "\u5F6D"], /* CJK Ideograph */ + ["\u5F6E", "\u5F6E"], /* CJK Ideograph */ + ["\u5F6F", "\u5F6F"], /* CJK Ideograph */ + ["\u5F70", "\u5F70"], /* CJK Ideograph */ + ["\u5F71", "\u5F71"], /* CJK Ideograph */ + ["\u5F72", "\u5F72"], /* CJK Ideograph */ + ["\u5F73", "\u5F73"], /* CJK Ideograph */ + ["\u5F74", "\u5F74"], /* CJK Ideograph */ + ["\u5F75", "\u5F75"], /* CJK Ideograph */ + ["\u5F76", "\u5F76"], /* CJK Ideograph */ + ["\u5F77", "\u5F77"], /* CJK Ideograph */ + ["\u5F78", "\u5F78"], /* CJK Ideograph */ + ["\u5F79", "\u5F79"], /* CJK Ideograph */ + ["\u5F7A", "\u5F7A"], /* CJK Ideograph */ + ["\u5F7B", "\u5F7B"], /* CJK Ideograph */ + ["\u5F7C", "\u5F7C"], /* CJK Ideograph */ + ["\u5F7D", "\u5F7D"], /* CJK Ideograph */ + ["\u5F7E", "\u5F7E"], /* CJK Ideograph */ + ["\u5F7F", "\u5F7F"], /* CJK Ideograph */ + ["\u5F80", "\u5F80"], /* CJK Ideograph */ + ["\u5F81", "\u5F81"], /* CJK Ideograph */ + ["\u5F82", "\u5F82"], /* CJK Ideograph */ + ["\u5F83", "\u5F83"], /* CJK Ideograph */ + ["\u5F84", "\u5F84"], /* CJK Ideograph */ + ["\u5F85", "\u5F85"], /* CJK Ideograph */ + ["\u5F86", "\u5F86"], /* CJK Ideograph */ + ["\u5F87", "\u5F87"], /* CJK Ideograph */ + ["\u5F88", "\u5F88"], /* CJK Ideograph */ + ["\u5F89", "\u5F89"], /* CJK Ideograph */ + ["\u5F8A", "\u5F8A"], /* CJK Ideograph */ + ["\u5F8B", "\u5F8B"], /* CJK Ideograph */ + ["\u5F8C", "\u5F8C"], /* CJK Ideograph */ + ["\u5F8D", "\u5F8D"], /* CJK Ideograph */ + ["\u5F8E", "\u5F8E"], /* CJK Ideograph */ + ["\u5F8F", "\u5F8F"], /* CJK Ideograph */ + ["\u5F90", "\u5F90"], /* CJK Ideograph */ + ["\u5F91", "\u5F91"], /* CJK Ideograph */ + ["\u5F92", "\u5F92"], /* CJK Ideograph */ + ["\u5F93", "\u5F93"], /* CJK Ideograph */ + ["\u5F94", "\u5F94"], /* CJK Ideograph */ + ["\u5F95", "\u5F95"], /* CJK Ideograph */ + ["\u5F96", "\u5F96"], /* CJK Ideograph */ + ["\u5F97", "\u5F97"], /* CJK Ideograph */ + ["\u5F98", "\u5F98"], /* CJK Ideograph */ + ["\u5F99", "\u5F99"], /* CJK Ideograph */ + ["\u5F9A", "\u5F9A"], /* CJK Ideograph */ + ["\u5F9B", "\u5F9B"], /* CJK Ideograph */ + ["\u5F9C", "\u5F9C"], /* CJK Ideograph */ + ["\u5F9D", "\u5F9D"], /* CJK Ideograph */ + ["\u5F9E", "\u5F9E"], /* CJK Ideograph */ + ["\u5F9F", "\u5F9F"], /* CJK Ideograph */ + ["\u5FA0", "\u5FA0"], /* CJK Ideograph */ + ["\u5FA1", "\u5FA1"], /* CJK Ideograph */ + ["\u5FA2", "\u5FA2"], /* CJK Ideograph */ + ["\u5FA3", "\u5FA3"], /* CJK Ideograph */ + ["\u5FA4", "\u5FA4"], /* CJK Ideograph */ + ["\u5FA5", "\u5FA5"], /* CJK Ideograph */ + ["\u5FA6", "\u5FA6"], /* CJK Ideograph */ + ["\u5FA7", "\u5FA7"], /* CJK Ideograph */ + ["\u5FA8", "\u5FA8"], /* CJK Ideograph */ + ["\u5FA9", "\u5FA9"], /* CJK Ideograph */ + ["\u5FAA", "\u5FAA"], /* CJK Ideograph */ + ["\u5FAB", "\u5FAB"], /* CJK Ideograph */ + ["\u5FAC", "\u5FAC"], /* CJK Ideograph */ + ["\u5FAD", "\u5FAD"], /* CJK Ideograph */ + ["\u5FAE", "\u5FAE"], /* CJK Ideograph */ + ["\u5FAF", "\u5FAF"], /* CJK Ideograph */ + ["\u5FB0", "\u5FB0"], /* CJK Ideograph */ + ["\u5FB1", "\u5FB1"], /* CJK Ideograph */ + ["\u5FB2", "\u5FB2"], /* CJK Ideograph */ + ["\u5FB3", "\u5FB3"], /* CJK Ideograph */ + ["\u5FB4", "\u5FB4"], /* CJK Ideograph */ + ["\u5FB5", "\u5FB5"], /* CJK Ideograph */ + ["\u5FB6", "\u5FB6"], /* CJK Ideograph */ + ["\u5FB7", "\u5FB7"], /* CJK Ideograph */ + ["\u5FB8", "\u5FB8"], /* CJK Ideograph */ + ["\u5FB9", "\u5FB9"], /* CJK Ideograph */ + ["\u5FBA", "\u5FBA"], /* CJK Ideograph */ + ["\u5FBB", "\u5FBB"], /* CJK Ideograph */ + ["\u5FBC", "\u5FBC"], /* CJK Ideograph */ + ["\u5FBD", "\u5FBD"], /* CJK Ideograph */ + ["\u5FBE", "\u5FBE"], /* CJK Ideograph */ + ["\u5FBF", "\u5FBF"], /* CJK Ideograph */ + ["\u5FC0", "\u5FC0"], /* CJK Ideograph */ + ["\u5FC1", "\u5FC1"], /* CJK Ideograph */ + ["\u5FC2", "\u5FC2"], /* CJK Ideograph */ + ["\u5FC3", "\u5FC3"], /* CJK Ideograph */ + ["\u5FC4", "\u5FC4"], /* CJK Ideograph */ + ["\u5FC5", "\u5FC5"], /* CJK Ideograph */ + ["\u5FC6", "\u5FC6"], /* CJK Ideograph */ + ["\u5FC7", "\u5FC7"], /* CJK Ideograph */ + ["\u5FC8", "\u5FC8"], /* CJK Ideograph */ + ["\u5FC9", "\u5FC9"], /* CJK Ideograph */ + ["\u5FCA", "\u5FCA"], /* CJK Ideograph */ + ["\u5FCB", "\u5FCB"], /* CJK Ideograph */ + ["\u5FCC", "\u5FCC"], /* CJK Ideograph */ + ["\u5FCD", "\u5FCD"], /* CJK Ideograph */ + ["\u5FCE", "\u5FCE"], /* CJK Ideograph */ + ["\u5FCF", "\u5FCF"], /* CJK Ideograph */ + ["\u5FD0", "\u5FD0"], /* CJK Ideograph */ + ["\u5FD1", "\u5FD1"], /* CJK Ideograph */ + ["\u5FD2", "\u5FD2"], /* CJK Ideograph */ + ["\u5FD3", "\u5FD3"], /* CJK Ideograph */ + ["\u5FD4", "\u5FD4"], /* CJK Ideograph */ + ["\u5FD5", "\u5FD5"], /* CJK Ideograph */ + ["\u5FD6", "\u5FD6"], /* CJK Ideograph */ + ["\u5FD7", "\u5FD7"], /* CJK Ideograph */ + ["\u5FD8", "\u5FD8"], /* CJK Ideograph */ + ["\u5FD9", "\u5FD9"], /* CJK Ideograph */ + ["\u5FDA", "\u5FDA"], /* CJK Ideograph */ + ["\u5FDB", "\u5FDB"], /* CJK Ideograph */ + ["\u5FDC", "\u5FDC"], /* CJK Ideograph */ + ["\u5FDD", "\u5FDD"], /* CJK Ideograph */ + ["\u5FDE", "\u5FDE"], /* CJK Ideograph */ + ["\u5FDF", "\u5FDF"], /* CJK Ideograph */ + ["\u5FE0", "\u5FE0"], /* CJK Ideograph */ + ["\u5FE1", "\u5FE1"], /* CJK Ideograph */ + ["\u5FE2", "\u5FE2"], /* CJK Ideograph */ + ["\u5FE3", "\u5FE3"], /* CJK Ideograph */ + ["\u5FE4", "\u5FE4"], /* CJK Ideograph */ + ["\u5FE5", "\u5FE5"], /* CJK Ideograph */ + ["\u5FE6", "\u5FE6"], /* CJK Ideograph */ + ["\u5FE7", "\u5FE7"], /* CJK Ideograph */ + ["\u5FE8", "\u5FE8"], /* CJK Ideograph */ + ["\u5FE9", "\u5FE9"], /* CJK Ideograph */ + ["\u5FEA", "\u5FEA"], /* CJK Ideograph */ + ["\u5FEB", "\u5FEB"], /* CJK Ideograph */ + ["\u5FEC", "\u5FEC"], /* CJK Ideograph */ + ["\u5FED", "\u5FED"], /* CJK Ideograph */ + ["\u5FEE", "\u5FEE"], /* CJK Ideograph */ + ["\u5FEF", "\u5FEF"], /* CJK Ideograph */ + ["\u5FF0", "\u5FF0"], /* CJK Ideograph */ + ["\u5FF1", "\u5FF1"], /* CJK Ideograph */ + ["\u5FF2", "\u5FF2"], /* CJK Ideograph */ + ["\u5FF3", "\u5FF3"], /* CJK Ideograph */ + ["\u5FF4", "\u5FF4"], /* CJK Ideograph */ + ["\u5FF5", "\u5FF5"], /* CJK Ideograph */ + ["\u5FF6", "\u5FF6"], /* CJK Ideograph */ + ["\u5FF7", "\u5FF7"], /* CJK Ideograph */ + ["\u5FF8", "\u5FF8"], /* CJK Ideograph */ + ["\u5FF9", "\u5FF9"], /* CJK Ideograph */ + ["\u5FFA", "\u5FFA"], /* CJK Ideograph */ + ["\u5FFB", "\u5FFB"], /* CJK Ideograph */ + ["\u5FFC", "\u5FFC"], /* CJK Ideograph */ + ["\u5FFD", "\u5FFD"], /* CJK Ideograph */ + ["\u5FFE", "\u5FFE"], /* CJK Ideograph */ + ["\u5FFF", "\u5FFF"], /* CJK Ideograph */ + ["\u6000", "\u6000"], /* CJK Ideograph */ + ["\u6001", "\u6001"], /* CJK Ideograph */ + ["\u6002", "\u6002"], /* CJK Ideograph */ + ["\u6003", "\u6003"], /* CJK Ideograph */ + ["\u6004", "\u6004"], /* CJK Ideograph */ + ["\u6005", "\u6005"], /* CJK Ideograph */ + ["\u6006", "\u6006"], /* CJK Ideograph */ + ["\u6007", "\u6007"], /* CJK Ideograph */ + ["\u6008", "\u6008"], /* CJK Ideograph */ + ["\u6009", "\u6009"], /* CJK Ideograph */ + ["\u600A", "\u600A"], /* CJK Ideograph */ + ["\u600B", "\u600B"], /* CJK Ideograph */ + ["\u600C", "\u600C"], /* CJK Ideograph */ + ["\u600D", "\u600D"], /* CJK Ideograph */ + ["\u600E", "\u600E"], /* CJK Ideograph */ + ["\u600F", "\u600F"], /* CJK Ideograph */ + ["\u6010", "\u6010"], /* CJK Ideograph */ + ["\u6011", "\u6011"], /* CJK Ideograph */ + ["\u6012", "\u6012"], /* CJK Ideograph */ + ["\u6013", "\u6013"], /* CJK Ideograph */ + ["\u6014", "\u6014"], /* CJK Ideograph */ + ["\u6015", "\u6015"], /* CJK Ideograph */ + ["\u6016", "\u6016"], /* CJK Ideograph */ + ["\u6017", "\u6017"], /* CJK Ideograph */ + ["\u6018", "\u6018"], /* CJK Ideograph */ + ["\u6019", "\u6019"], /* CJK Ideograph */ + ["\u601A", "\u601A"], /* CJK Ideograph */ + ["\u601B", "\u601B"], /* CJK Ideograph */ + ["\u601C", "\u601C"], /* CJK Ideograph */ + ["\u601D", "\u601D"], /* CJK Ideograph */ + ["\u601E", "\u601E"], /* CJK Ideograph */ + ["\u601F", "\u601F"], /* CJK Ideograph */ + ["\u6020", "\u6020"], /* CJK Ideograph */ + ["\u6021", "\u6021"], /* CJK Ideograph */ + ["\u6022", "\u6022"], /* CJK Ideograph */ + ["\u6023", "\u6023"], /* CJK Ideograph */ + ["\u6024", "\u6024"], /* CJK Ideograph */ + ["\u6025", "\u6025"], /* CJK Ideograph */ + ["\u6026", "\u6026"], /* CJK Ideograph */ + ["\u6027", "\u6027"], /* CJK Ideograph */ + ["\u6028", "\u6028"], /* CJK Ideograph */ + ["\u6029", "\u6029"], /* CJK Ideograph */ + ["\u602A", "\u602A"], /* CJK Ideograph */ + ["\u602B", "\u602B"], /* CJK Ideograph */ + ["\u602C", "\u602C"], /* CJK Ideograph */ + ["\u602D", "\u602D"], /* CJK Ideograph */ + ["\u602E", "\u602E"], /* CJK Ideograph */ + ["\u602F", "\u602F"], /* CJK Ideograph */ + ["\u6030", "\u6030"], /* CJK Ideograph */ + ["\u6031", "\u6031"], /* CJK Ideograph */ + ["\u6032", "\u6032"], /* CJK Ideograph */ + ["\u6033", "\u6033"], /* CJK Ideograph */ + ["\u6034", "\u6034"], /* CJK Ideograph */ + ["\u6035", "\u6035"], /* CJK Ideograph */ + ["\u6036", "\u6036"], /* CJK Ideograph */ + ["\u6037", "\u6037"], /* CJK Ideograph */ + ["\u6038", "\u6038"], /* CJK Ideograph */ + ["\u6039", "\u6039"], /* CJK Ideograph */ + ["\u603A", "\u603A"], /* CJK Ideograph */ + ["\u603B", "\u603B"], /* CJK Ideograph */ + ["\u603C", "\u603C"], /* CJK Ideograph */ + ["\u603D", "\u603D"], /* CJK Ideograph */ + ["\u603E", "\u603E"], /* CJK Ideograph */ + ["\u603F", "\u603F"], /* CJK Ideograph */ + ["\u6040", "\u6040"], /* CJK Ideograph */ + ["\u6041", "\u6041"], /* CJK Ideograph */ + ["\u6042", "\u6042"], /* CJK Ideograph */ + ["\u6043", "\u6043"], /* CJK Ideograph */ + ["\u6044", "\u6044"], /* CJK Ideograph */ + ["\u6045", "\u6045"], /* CJK Ideograph */ + ["\u6046", "\u6046"], /* CJK Ideograph */ + ["\u6047", "\u6047"], /* CJK Ideograph */ + ["\u6048", "\u6048"], /* CJK Ideograph */ + ["\u6049", "\u6049"], /* CJK Ideograph */ + ["\u604A", "\u604A"], /* CJK Ideograph */ + ["\u604B", "\u604B"], /* CJK Ideograph */ + ["\u604C", "\u604C"], /* CJK Ideograph */ + ["\u604D", "\u604D"], /* CJK Ideograph */ + ["\u604E", "\u604E"], /* CJK Ideograph */ + ["\u604F", "\u604F"], /* CJK Ideograph */ + ["\u6050", "\u6050"], /* CJK Ideograph */ + ["\u6051", "\u6051"], /* CJK Ideograph */ + ["\u6052", "\u6052"], /* CJK Ideograph */ + ["\u6053", "\u6053"], /* CJK Ideograph */ + ["\u6054", "\u6054"], /* CJK Ideograph */ + ["\u6055", "\u6055"], /* CJK Ideograph */ + ["\u6056", "\u6056"], /* CJK Ideograph */ + ["\u6057", "\u6057"], /* CJK Ideograph */ + ["\u6058", "\u6058"], /* CJK Ideograph */ + ["\u6059", "\u6059"], /* CJK Ideograph */ + ["\u605A", "\u605A"], /* CJK Ideograph */ + ["\u605B", "\u605B"], /* CJK Ideograph */ + ["\u605C", "\u605C"], /* CJK Ideograph */ + ["\u605D", "\u605D"], /* CJK Ideograph */ + ["\u605E", "\u605E"], /* CJK Ideograph */ + ["\u605F", "\u605F"], /* CJK Ideograph */ + ["\u6060", "\u6060"], /* CJK Ideograph */ + ["\u6061", "\u6061"], /* CJK Ideograph */ + ["\u6062", "\u6062"], /* CJK Ideograph */ + ["\u6063", "\u6063"], /* CJK Ideograph */ + ["\u6064", "\u6064"], /* CJK Ideograph */ + ["\u6065", "\u6065"], /* CJK Ideograph */ + ["\u6066", "\u6066"], /* CJK Ideograph */ + ["\u6067", "\u6067"], /* CJK Ideograph */ + ["\u6068", "\u6068"], /* CJK Ideograph */ + ["\u6069", "\u6069"], /* CJK Ideograph */ + ["\u606A", "\u606A"], /* CJK Ideograph */ + ["\u606B", "\u606B"], /* CJK Ideograph */ + ["\u606C", "\u606C"], /* CJK Ideograph */ + ["\u606D", "\u606D"], /* CJK Ideograph */ + ["\u606E", "\u606E"], /* CJK Ideograph */ + ["\u606F", "\u606F"], /* CJK Ideograph */ + ["\u6070", "\u6070"], /* CJK Ideograph */ + ["\u6071", "\u6071"], /* CJK Ideograph */ + ["\u6072", "\u6072"], /* CJK Ideograph */ + ["\u6073", "\u6073"], /* CJK Ideograph */ + ["\u6074", "\u6074"], /* CJK Ideograph */ + ["\u6075", "\u6075"], /* CJK Ideograph */ + ["\u6076", "\u6076"], /* CJK Ideograph */ + ["\u6077", "\u6077"], /* CJK Ideograph */ + ["\u6078", "\u6078"], /* CJK Ideograph */ + ["\u6079", "\u6079"], /* CJK Ideograph */ + ["\u607A", "\u607A"], /* CJK Ideograph */ + ["\u607B", "\u607B"], /* CJK Ideograph */ + ["\u607C", "\u607C"], /* CJK Ideograph */ + ["\u607D", "\u607D"], /* CJK Ideograph */ + ["\u607E", "\u607E"], /* CJK Ideograph */ + ["\u607F", "\u607F"], /* CJK Ideograph */ + ["\u6080", "\u6080"], /* CJK Ideograph */ + ["\u6081", "\u6081"], /* CJK Ideograph */ + ["\u6082", "\u6082"], /* CJK Ideograph */ + ["\u6083", "\u6083"], /* CJK Ideograph */ + ["\u6084", "\u6084"], /* CJK Ideograph */ + ["\u6085", "\u6085"], /* CJK Ideograph */ + ["\u6086", "\u6086"], /* CJK Ideograph */ + ["\u6087", "\u6087"], /* CJK Ideograph */ + ["\u6088", "\u6088"], /* CJK Ideograph */ + ["\u6089", "\u6089"], /* CJK Ideograph */ + ["\u608A", "\u608A"], /* CJK Ideograph */ + ["\u608B", "\u608B"], /* CJK Ideograph */ + ["\u608C", "\u608C"], /* CJK Ideograph */ + ["\u608D", "\u608D"], /* CJK Ideograph */ + ["\u608E", "\u608E"], /* CJK Ideograph */ + ["\u608F", "\u608F"], /* CJK Ideograph */ + ["\u6090", "\u6090"], /* CJK Ideograph */ + ["\u6091", "\u6091"], /* CJK Ideograph */ + ["\u6092", "\u6092"], /* CJK Ideograph */ + ["\u6093", "\u6093"], /* CJK Ideograph */ + ["\u6094", "\u6094"], /* CJK Ideograph */ + ["\u6095", "\u6095"], /* CJK Ideograph */ + ["\u6096", "\u6096"], /* CJK Ideograph */ + ["\u6097", "\u6097"], /* CJK Ideograph */ + ["\u6098", "\u6098"], /* CJK Ideograph */ + ["\u6099", "\u6099"], /* CJK Ideograph */ + ["\u609A", "\u609A"], /* CJK Ideograph */ + ["\u609B", "\u609B"], /* CJK Ideograph */ + ["\u609C", "\u609C"], /* CJK Ideograph */ + ["\u609D", "\u609D"], /* CJK Ideograph */ + ["\u609E", "\u609E"], /* CJK Ideograph */ + ["\u609F", "\u609F"], /* CJK Ideograph */ + ["\u60A0", "\u60A0"], /* CJK Ideograph */ + ["\u60A1", "\u60A1"], /* CJK Ideograph */ + ["\u60A2", "\u60A2"], /* CJK Ideograph */ + ["\u60A3", "\u60A3"], /* CJK Ideograph */ + ["\u60A4", "\u60A4"], /* CJK Ideograph */ + ["\u60A5", "\u60A5"], /* CJK Ideograph */ + ["\u60A6", "\u60A6"], /* CJK Ideograph */ + ["\u60A7", "\u60A7"], /* CJK Ideograph */ + ["\u60A8", "\u60A8"], /* CJK Ideograph */ + ["\u60A9", "\u60A9"], /* CJK Ideograph */ + ["\u60AA", "\u60AA"], /* CJK Ideograph */ + ["\u60AB", "\u60AB"], /* CJK Ideograph */ + ["\u60AC", "\u60AC"], /* CJK Ideograph */ + ["\u60AD", "\u60AD"], /* CJK Ideograph */ + ["\u60AE", "\u60AE"], /* CJK Ideograph */ + ["\u60AF", "\u60AF"], /* CJK Ideograph */ + ["\u60B0", "\u60B0"], /* CJK Ideograph */ + ["\u60B1", "\u60B1"], /* CJK Ideograph */ + ["\u60B2", "\u60B2"], /* CJK Ideograph */ + ["\u60B3", "\u60B3"], /* CJK Ideograph */ + ["\u60B4", "\u60B4"], /* CJK Ideograph */ + ["\u60B5", "\u60B5"], /* CJK Ideograph */ + ["\u60B6", "\u60B6"], /* CJK Ideograph */ + ["\u60B7", "\u60B7"], /* CJK Ideograph */ + ["\u60B8", "\u60B8"], /* CJK Ideograph */ + ["\u60B9", "\u60B9"], /* CJK Ideograph */ + ["\u60BA", "\u60BA"], /* CJK Ideograph */ + ["\u60BB", "\u60BB"], /* CJK Ideograph */ + ["\u60BC", "\u60BC"], /* CJK Ideograph */ + ["\u60BD", "\u60BD"], /* CJK Ideograph */ + ["\u60BE", "\u60BE"], /* CJK Ideograph */ + ["\u60BF", "\u60BF"], /* CJK Ideograph */ + ["\u60C0", "\u60C0"], /* CJK Ideograph */ + ["\u60C1", "\u60C1"], /* CJK Ideograph */ + ["\u60C2", "\u60C2"], /* CJK Ideograph */ + ["\u60C3", "\u60C3"], /* CJK Ideograph */ + ["\u60C4", "\u60C4"], /* CJK Ideograph */ + ["\u60C5", "\u60C5"], /* CJK Ideograph */ + ["\u60C6", "\u60C6"], /* CJK Ideograph */ + ["\u60C7", "\u60C7"], /* CJK Ideograph */ + ["\u60C8", "\u60C8"], /* CJK Ideograph */ + ["\u60C9", "\u60C9"], /* CJK Ideograph */ + ["\u60CA", "\u60CA"], /* CJK Ideograph */ + ["\u60CB", "\u60CB"], /* CJK Ideograph */ + ["\u60CC", "\u60CC"], /* CJK Ideograph */ + ["\u60CD", "\u60CD"], /* CJK Ideograph */ + ["\u60CE", "\u60CE"], /* CJK Ideograph */ + ["\u60CF", "\u60CF"], /* CJK Ideograph */ + ["\u60D0", "\u60D0"], /* CJK Ideograph */ + ["\u60D1", "\u60D1"], /* CJK Ideograph */ + ["\u60D2", "\u60D2"], /* CJK Ideograph */ + ["\u60D3", "\u60D3"], /* CJK Ideograph */ + ["\u60D4", "\u60D4"], /* CJK Ideograph */ + ["\u60D5", "\u60D5"], /* CJK Ideograph */ + ["\u60D6", "\u60D6"], /* CJK Ideograph */ + ["\u60D7", "\u60D7"], /* CJK Ideograph */ + ["\u60D8", "\u60D8"], /* CJK Ideograph */ + ["\u60D9", "\u60D9"], /* CJK Ideograph */ + ["\u60DA", "\u60DA"], /* CJK Ideograph */ + ["\u60DB", "\u60DB"], /* CJK Ideograph */ + ["\u60DC", "\u60DC"], /* CJK Ideograph */ + ["\u60DD", "\u60DD"], /* CJK Ideograph */ + ["\u60DE", "\u60DE"], /* CJK Ideograph */ + ["\u60DF", "\u60DF"], /* CJK Ideograph */ + ["\u60E0", "\u60E0"], /* CJK Ideograph */ + ["\u60E1", "\u60E1"], /* CJK Ideograph */ + ["\u60E2", "\u60E2"], /* CJK Ideograph */ + ["\u60E3", "\u60E3"], /* CJK Ideograph */ + ["\u60E4", "\u60E4"], /* CJK Ideograph */ + ["\u60E5", "\u60E5"], /* CJK Ideograph */ + ["\u60E6", "\u60E6"], /* CJK Ideograph */ + ["\u60E7", "\u60E7"], /* CJK Ideograph */ + ["\u60E8", "\u60E8"], /* CJK Ideograph */ + ["\u60E9", "\u60E9"], /* CJK Ideograph */ + ["\u60EA", "\u60EA"], /* CJK Ideograph */ + ["\u60EB", "\u60EB"], /* CJK Ideograph */ + ["\u60EC", "\u60EC"], /* CJK Ideograph */ + ["\u60ED", "\u60ED"], /* CJK Ideograph */ + ["\u60EE", "\u60EE"], /* CJK Ideograph */ + ["\u60EF", "\u60EF"], /* CJK Ideograph */ + ["\u60F0", "\u60F0"], /* CJK Ideograph */ + ["\u60F1", "\u60F1"], /* CJK Ideograph */ + ["\u60F2", "\u60F2"], /* CJK Ideograph */ + ["\u60F3", "\u60F3"], /* CJK Ideograph */ + ["\u60F4", "\u60F4"], /* CJK Ideograph */ + ["\u60F5", "\u60F5"], /* CJK Ideograph */ + ["\u60F6", "\u60F6"], /* CJK Ideograph */ + ["\u60F7", "\u60F7"], /* CJK Ideograph */ + ["\u60F8", "\u60F8"], /* CJK Ideograph */ + ["\u60F9", "\u60F9"], /* CJK Ideograph */ + ["\u60FA", "\u60FA"], /* CJK Ideograph */ + ["\u60FB", "\u60FB"], /* CJK Ideograph */ + ["\u60FC", "\u60FC"], /* CJK Ideograph */ + ["\u60FD", "\u60FD"], /* CJK Ideograph */ + ["\u60FE", "\u60FE"], /* CJK Ideograph */ + ["\u60FF", "\u60FF"], /* CJK Ideograph */ + ["\u6100", "\u6100"], /* CJK Ideograph */ + ["\u6101", "\u6101"], /* CJK Ideograph */ + ["\u6102", "\u6102"], /* CJK Ideograph */ + ["\u6103", "\u6103"], /* CJK Ideograph */ + ["\u6104", "\u6104"], /* CJK Ideograph */ + ["\u6105", "\u6105"], /* CJK Ideograph */ + ["\u6106", "\u6106"], /* CJK Ideograph */ + ["\u6107", "\u6107"], /* CJK Ideograph */ + ["\u6108", "\u6108"], /* CJK Ideograph */ + ["\u6109", "\u6109"], /* CJK Ideograph */ + ["\u610A", "\u610A"], /* CJK Ideograph */ + ["\u610B", "\u610B"], /* CJK Ideograph */ + ["\u610C", "\u610C"], /* CJK Ideograph */ + ["\u610D", "\u610D"], /* CJK Ideograph */ + ["\u610E", "\u610E"], /* CJK Ideograph */ + ["\u610F", "\u610F"], /* CJK Ideograph */ + ["\u6110", "\u6110"], /* CJK Ideograph */ + ["\u6111", "\u6111"], /* CJK Ideograph */ + ["\u6112", "\u6112"], /* CJK Ideograph */ + ["\u6113", "\u6113"], /* CJK Ideograph */ + ["\u6114", "\u6114"], /* CJK Ideograph */ + ["\u6115", "\u6115"], /* CJK Ideograph */ + ["\u6116", "\u6116"], /* CJK Ideograph */ + ["\u6117", "\u6117"], /* CJK Ideograph */ + ["\u6118", "\u6118"], /* CJK Ideograph */ + ["\u6119", "\u6119"], /* CJK Ideograph */ + ["\u611A", "\u611A"], /* CJK Ideograph */ + ["\u611B", "\u611B"], /* CJK Ideograph */ + ["\u611C", "\u611C"], /* CJK Ideograph */ + ["\u611D", "\u611D"], /* CJK Ideograph */ + ["\u611E", "\u611E"], /* CJK Ideograph */ + ["\u611F", "\u611F"], /* CJK Ideograph */ + ["\u6120", "\u6120"], /* CJK Ideograph */ + ["\u6121", "\u6121"], /* CJK Ideograph */ + ["\u6122", "\u6122"], /* CJK Ideograph */ + ["\u6123", "\u6123"], /* CJK Ideograph */ + ["\u6124", "\u6124"], /* CJK Ideograph */ + ["\u6125", "\u6125"], /* CJK Ideograph */ + ["\u6126", "\u6126"], /* CJK Ideograph */ + ["\u6127", "\u6127"], /* CJK Ideograph */ + ["\u6128", "\u6128"], /* CJK Ideograph */ + ["\u6129", "\u6129"], /* CJK Ideograph */ + ["\u612A", "\u612A"], /* CJK Ideograph */ + ["\u612B", "\u612B"], /* CJK Ideograph */ + ["\u612C", "\u612C"], /* CJK Ideograph */ + ["\u612D", "\u612D"], /* CJK Ideograph */ + ["\u612E", "\u612E"], /* CJK Ideograph */ + ["\u612F", "\u612F"], /* CJK Ideograph */ + ["\u6130", "\u6130"], /* CJK Ideograph */ + ["\u6131", "\u6131"], /* CJK Ideograph */ + ["\u6132", "\u6132"], /* CJK Ideograph */ + ["\u6133", "\u6133"], /* CJK Ideograph */ + ["\u6134", "\u6134"], /* CJK Ideograph */ + ["\u6135", "\u6135"], /* CJK Ideograph */ + ["\u6136", "\u6136"], /* CJK Ideograph */ + ["\u6137", "\u6137"], /* CJK Ideograph */ + ["\u6138", "\u6138"], /* CJK Ideograph */ + ["\u6139", "\u6139"], /* CJK Ideograph */ + ["\u613A", "\u613A"], /* CJK Ideograph */ + ["\u613B", "\u613B"], /* CJK Ideograph */ + ["\u613C", "\u613C"], /* CJK Ideograph */ + ["\u613D", "\u613D"], /* CJK Ideograph */ + ["\u613E", "\u613E"], /* CJK Ideograph */ + ["\u613F", "\u613F"], /* CJK Ideograph */ + ["\u6140", "\u6140"], /* CJK Ideograph */ + ["\u6141", "\u6141"], /* CJK Ideograph */ + ["\u6142", "\u6142"], /* CJK Ideograph */ + ["\u6143", "\u6143"], /* CJK Ideograph */ + ["\u6144", "\u6144"], /* CJK Ideograph */ + ["\u6145", "\u6145"], /* CJK Ideograph */ + ["\u6146", "\u6146"], /* CJK Ideograph */ + ["\u6147", "\u6147"], /* CJK Ideograph */ + ["\u6148", "\u6148"], /* CJK Ideograph */ + ["\u6149", "\u6149"], /* CJK Ideograph */ + ["\u614A", "\u614A"], /* CJK Ideograph */ + ["\u614B", "\u614B"], /* CJK Ideograph */ + ["\u614C", "\u614C"], /* CJK Ideograph */ + ["\u614D", "\u614D"], /* CJK Ideograph */ + ["\u614E", "\u614E"], /* CJK Ideograph */ + ["\u614F", "\u614F"], /* CJK Ideograph */ + ["\u6150", "\u6150"], /* CJK Ideograph */ + ["\u6151", "\u6151"], /* CJK Ideograph */ + ["\u6152", "\u6152"], /* CJK Ideograph */ + ["\u6153", "\u6153"], /* CJK Ideograph */ + ["\u6154", "\u6154"], /* CJK Ideograph */ + ["\u6155", "\u6155"], /* CJK Ideograph */ + ["\u6156", "\u6156"], /* CJK Ideograph */ + ["\u6157", "\u6157"], /* CJK Ideograph */ + ["\u6158", "\u6158"], /* CJK Ideograph */ + ["\u6159", "\u6159"], /* CJK Ideograph */ + ["\u615A", "\u615A"], /* CJK Ideograph */ + ["\u615B", "\u615B"], /* CJK Ideograph */ + ["\u615C", "\u615C"], /* CJK Ideograph */ + ["\u615D", "\u615D"], /* CJK Ideograph */ + ["\u615E", "\u615E"], /* CJK Ideograph */ + ["\u615F", "\u615F"], /* CJK Ideograph */ + ["\u6160", "\u6160"], /* CJK Ideograph */ + ["\u6161", "\u6161"], /* CJK Ideograph */ + ["\u6162", "\u6162"], /* CJK Ideograph */ + ["\u6163", "\u6163"], /* CJK Ideograph */ + ["\u6164", "\u6164"], /* CJK Ideograph */ + ["\u6165", "\u6165"], /* CJK Ideograph */ + ["\u6166", "\u6166"], /* CJK Ideograph */ + ["\u6167", "\u6167"], /* CJK Ideograph */ + ["\u6168", "\u6168"], /* CJK Ideograph */ + ["\u6169", "\u6169"], /* CJK Ideograph */ + ["\u616A", "\u616A"], /* CJK Ideograph */ + ["\u616B", "\u616B"], /* CJK Ideograph */ + ["\u616C", "\u616C"], /* CJK Ideograph */ + ["\u616D", "\u616D"], /* CJK Ideograph */ + ["\u616E", "\u616E"], /* CJK Ideograph */ + ["\u616F", "\u616F"], /* CJK Ideograph */ + ["\u6170", "\u6170"], /* CJK Ideograph */ + ["\u6171", "\u6171"], /* CJK Ideograph */ + ["\u6172", "\u6172"], /* CJK Ideograph */ + ["\u6173", "\u6173"], /* CJK Ideograph */ + ["\u6174", "\u6174"], /* CJK Ideograph */ + ["\u6175", "\u6175"], /* CJK Ideograph */ + ["\u6176", "\u6176"], /* CJK Ideograph */ + ["\u6177", "\u6177"], /* CJK Ideograph */ + ["\u6178", "\u6178"], /* CJK Ideograph */ + ["\u6179", "\u6179"], /* CJK Ideograph */ + ["\u617A", "\u617A"], /* CJK Ideograph */ + ["\u617B", "\u617B"], /* CJK Ideograph */ + ["\u617C", "\u617C"], /* CJK Ideograph */ + ["\u617D", "\u617D"], /* CJK Ideograph */ + ["\u617E", "\u617E"], /* CJK Ideograph */ + ["\u617F", "\u617F"], /* CJK Ideograph */ + ["\u6180", "\u6180"], /* CJK Ideograph */ + ["\u6181", "\u6181"], /* CJK Ideograph */ + ["\u6182", "\u6182"], /* CJK Ideograph */ + ["\u6183", "\u6183"], /* CJK Ideograph */ + ["\u6184", "\u6184"], /* CJK Ideograph */ + ["\u6185", "\u6185"], /* CJK Ideograph */ + ["\u6186", "\u6186"], /* CJK Ideograph */ + ["\u6187", "\u6187"], /* CJK Ideograph */ + ["\u6188", "\u6188"], /* CJK Ideograph */ + ["\u6189", "\u6189"], /* CJK Ideograph */ + ["\u618A", "\u618A"], /* CJK Ideograph */ + ["\u618B", "\u618B"], /* CJK Ideograph */ + ["\u618C", "\u618C"], /* CJK Ideograph */ + ["\u618D", "\u618D"], /* CJK Ideograph */ + ["\u618E", "\u618E"], /* CJK Ideograph */ + ["\u618F", "\u618F"], /* CJK Ideograph */ + ["\u6190", "\u6190"], /* CJK Ideograph */ + ["\u6191", "\u6191"], /* CJK Ideograph */ + ["\u6192", "\u6192"], /* CJK Ideograph */ + ["\u6193", "\u6193"], /* CJK Ideograph */ + ["\u6194", "\u6194"], /* CJK Ideograph */ + ["\u6195", "\u6195"], /* CJK Ideograph */ + ["\u6196", "\u6196"], /* CJK Ideograph */ + ["\u6197", "\u6197"], /* CJK Ideograph */ + ["\u6198", "\u6198"], /* CJK Ideograph */ + ["\u6199", "\u6199"], /* CJK Ideograph */ + ["\u619A", "\u619A"], /* CJK Ideograph */ + ["\u619B", "\u619B"], /* CJK Ideograph */ + ["\u619C", "\u619C"], /* CJK Ideograph */ + ["\u619D", "\u619D"], /* CJK Ideograph */ + ["\u619E", "\u619E"], /* CJK Ideograph */ + ["\u619F", "\u619F"], /* CJK Ideograph */ + ["\u61A0", "\u61A0"], /* CJK Ideograph */ + ["\u61A1", "\u61A1"], /* CJK Ideograph */ + ["\u61A2", "\u61A2"], /* CJK Ideograph */ + ["\u61A3", "\u61A3"], /* CJK Ideograph */ + ["\u61A4", "\u61A4"], /* CJK Ideograph */ + ["\u61A5", "\u61A5"], /* CJK Ideograph */ + ["\u61A6", "\u61A6"], /* CJK Ideograph */ + ["\u61A7", "\u61A7"], /* CJK Ideograph */ + ["\u61A8", "\u61A8"], /* CJK Ideograph */ + ["\u61A9", "\u61A9"], /* CJK Ideograph */ + ["\u61AA", "\u61AA"], /* CJK Ideograph */ + ["\u61AB", "\u61AB"], /* CJK Ideograph */ + ["\u61AC", "\u61AC"], /* CJK Ideograph */ + ["\u61AD", "\u61AD"], /* CJK Ideograph */ + ["\u61AE", "\u61AE"], /* CJK Ideograph */ + ["\u61AF", "\u61AF"], /* CJK Ideograph */ + ["\u61B0", "\u61B0"], /* CJK Ideograph */ + ["\u61B1", "\u61B1"], /* CJK Ideograph */ + ["\u61B2", "\u61B2"], /* CJK Ideograph */ + ["\u61B3", "\u61B3"], /* CJK Ideograph */ + ["\u61B4", "\u61B4"], /* CJK Ideograph */ + ["\u61B5", "\u61B5"], /* CJK Ideograph */ + ["\u61B6", "\u61B6"], /* CJK Ideograph */ + ["\u61B7", "\u61B7"], /* CJK Ideograph */ + ["\u61B8", "\u61B8"], /* CJK Ideograph */ + ["\u61B9", "\u61B9"], /* CJK Ideograph */ + ["\u61BA", "\u61BA"], /* CJK Ideograph */ + ["\u61BB", "\u61BB"], /* CJK Ideograph */ + ["\u61BC", "\u61BC"], /* CJK Ideograph */ + ["\u61BD", "\u61BD"], /* CJK Ideograph */ + ["\u61BE", "\u61BE"], /* CJK Ideograph */ + ["\u61BF", "\u61BF"], /* CJK Ideograph */ + ["\u61C0", "\u61C0"], /* CJK Ideograph */ + ["\u61C1", "\u61C1"], /* CJK Ideograph */ + ["\u61C2", "\u61C2"], /* CJK Ideograph */ + ["\u61C3", "\u61C3"], /* CJK Ideograph */ + ["\u61C4", "\u61C4"], /* CJK Ideograph */ + ["\u61C5", "\u61C5"], /* CJK Ideograph */ + ["\u61C6", "\u61C6"], /* CJK Ideograph */ + ["\u61C7", "\u61C7"], /* CJK Ideograph */ + ["\u61C8", "\u61C8"], /* CJK Ideograph */ + ["\u61C9", "\u61C9"], /* CJK Ideograph */ + ["\u61CA", "\u61CA"], /* CJK Ideograph */ + ["\u61CB", "\u61CB"], /* CJK Ideograph */ + ["\u61CC", "\u61CC"], /* CJK Ideograph */ + ["\u61CD", "\u61CD"], /* CJK Ideograph */ + ["\u61CE", "\u61CE"], /* CJK Ideograph */ + ["\u61CF", "\u61CF"], /* CJK Ideograph */ + ["\u61D0", "\u61D0"], /* CJK Ideograph */ + ["\u61D1", "\u61D1"], /* CJK Ideograph */ + ["\u61D2", "\u61D2"], /* CJK Ideograph */ + ["\u61D3", "\u61D3"], /* CJK Ideograph */ + ["\u61D4", "\u61D4"], /* CJK Ideograph */ + ["\u61D5", "\u61D5"], /* CJK Ideograph */ + ["\u61D6", "\u61D6"], /* CJK Ideograph */ + ["\u61D7", "\u61D7"], /* CJK Ideograph */ + ["\u61D8", "\u61D8"], /* CJK Ideograph */ + ["\u61D9", "\u61D9"], /* CJK Ideograph */ + ["\u61DA", "\u61DA"], /* CJK Ideograph */ + ["\u61DB", "\u61DB"], /* CJK Ideograph */ + ["\u61DC", "\u61DC"], /* CJK Ideograph */ + ["\u61DD", "\u61DD"], /* CJK Ideograph */ + ["\u61DE", "\u61DE"], /* CJK Ideograph */ + ["\u61DF", "\u61DF"], /* CJK Ideograph */ + ["\u61E0", "\u61E0"], /* CJK Ideograph */ + ["\u61E1", "\u61E1"], /* CJK Ideograph */ + ["\u61E2", "\u61E2"], /* CJK Ideograph */ + ["\u61E3", "\u61E3"], /* CJK Ideograph */ + ["\u61E4", "\u61E4"], /* CJK Ideograph */ + ["\u61E5", "\u61E5"], /* CJK Ideograph */ + ["\u61E6", "\u61E6"], /* CJK Ideograph */ + ["\u61E7", "\u61E7"], /* CJK Ideograph */ + ["\u61E8", "\u61E8"], /* CJK Ideograph */ + ["\u61E9", "\u61E9"], /* CJK Ideograph */ + ["\u61EA", "\u61EA"], /* CJK Ideograph */ + ["\u61EB", "\u61EB"], /* CJK Ideograph */ + ["\u61EC", "\u61EC"], /* CJK Ideograph */ + ["\u61ED", "\u61ED"], /* CJK Ideograph */ + ["\u61EE", "\u61EE"], /* CJK Ideograph */ + ["\u61EF", "\u61EF"], /* CJK Ideograph */ + ["\u61F0", "\u61F0"], /* CJK Ideograph */ + ["\u61F1", "\u61F1"], /* CJK Ideograph */ + ["\u61F2", "\u61F2"], /* CJK Ideograph */ + ["\u61F3", "\u61F3"], /* CJK Ideograph */ + ["\u61F4", "\u61F4"], /* CJK Ideograph */ + ["\u61F5", "\u61F5"], /* CJK Ideograph */ + ["\u61F6", "\u61F6"], /* CJK Ideograph */ + ["\u61F7", "\u61F7"], /* CJK Ideograph */ + ["\u61F8", "\u61F8"], /* CJK Ideograph */ + ["\u61F9", "\u61F9"], /* CJK Ideograph */ + ["\u61FA", "\u61FA"], /* CJK Ideograph */ + ["\u61FB", "\u61FB"], /* CJK Ideograph */ + ["\u61FC", "\u61FC"], /* CJK Ideograph */ + ["\u61FD", "\u61FD"], /* CJK Ideograph */ + ["\u61FE", "\u61FE"], /* CJK Ideograph */ + ["\u61FF", "\u61FF"], /* CJK Ideograph */ + ["\u6200", "\u6200"], /* CJK Ideograph */ + ["\u6201", "\u6201"], /* CJK Ideograph */ + ["\u6202", "\u6202"], /* CJK Ideograph */ + ["\u6203", "\u6203"], /* CJK Ideograph */ + ["\u6204", "\u6204"], /* CJK Ideograph */ + ["\u6205", "\u6205"], /* CJK Ideograph */ + ["\u6206", "\u6206"], /* CJK Ideograph */ + ["\u6207", "\u6207"], /* CJK Ideograph */ + ["\u6208", "\u6208"], /* CJK Ideograph */ + ["\u6209", "\u6209"], /* CJK Ideograph */ + ["\u620A", "\u620A"], /* CJK Ideograph */ + ["\u620B", "\u620B"], /* CJK Ideograph */ + ["\u620C", "\u620C"], /* CJK Ideograph */ + ["\u620D", "\u620D"], /* CJK Ideograph */ + ["\u620E", "\u620E"], /* CJK Ideograph */ + ["\u620F", "\u620F"], /* CJK Ideograph */ + ["\u6210", "\u6210"], /* CJK Ideograph */ + ["\u6211", "\u6211"], /* CJK Ideograph */ + ["\u6212", "\u6212"], /* CJK Ideograph */ + ["\u6213", "\u6213"], /* CJK Ideograph */ + ["\u6214", "\u6214"], /* CJK Ideograph */ + ["\u6215", "\u6215"], /* CJK Ideograph */ + ["\u6216", "\u6216"], /* CJK Ideograph */ + ["\u6217", "\u6217"], /* CJK Ideograph */ + ["\u6218", "\u6218"], /* CJK Ideograph */ + ["\u6219", "\u6219"], /* CJK Ideograph */ + ["\u621A", "\u621A"], /* CJK Ideograph */ + ["\u621B", "\u621B"], /* CJK Ideograph */ + ["\u621C", "\u621C"], /* CJK Ideograph */ + ["\u621D", "\u621D"], /* CJK Ideograph */ + ["\u621E", "\u621E"], /* CJK Ideograph */ + ["\u621F", "\u621F"], /* CJK Ideograph */ + ["\u6220", "\u6220"], /* CJK Ideograph */ + ["\u6221", "\u6221"], /* CJK Ideograph */ + ["\u6222", "\u6222"], /* CJK Ideograph */ + ["\u6223", "\u6223"], /* CJK Ideograph */ + ["\u6224", "\u6224"], /* CJK Ideograph */ + ["\u6225", "\u6225"], /* CJK Ideograph */ + ["\u6226", "\u6226"], /* CJK Ideograph */ + ["\u6227", "\u6227"], /* CJK Ideograph */ + ["\u6228", "\u6228"], /* CJK Ideograph */ + ["\u6229", "\u6229"], /* CJK Ideograph */ + ["\u622A", "\u622A"], /* CJK Ideograph */ + ["\u622B", "\u622B"], /* CJK Ideograph */ + ["\u622C", "\u622C"], /* CJK Ideograph */ + ["\u622D", "\u622D"], /* CJK Ideograph */ + ["\u622E", "\u622E"], /* CJK Ideograph */ + ["\u622F", "\u622F"], /* CJK Ideograph */ + ["\u6230", "\u6230"], /* CJK Ideograph */ + ["\u6231", "\u6231"], /* CJK Ideograph */ + ["\u6232", "\u6232"], /* CJK Ideograph */ + ["\u6233", "\u6233"], /* CJK Ideograph */ + ["\u6234", "\u6234"], /* CJK Ideograph */ + ["\u6235", "\u6235"], /* CJK Ideograph */ + ["\u6236", "\u6236"], /* CJK Ideograph */ + ["\u6237", "\u6237"], /* CJK Ideograph */ + ["\u6238", "\u6238"], /* CJK Ideograph */ + ["\u6239", "\u6239"], /* CJK Ideograph */ + ["\u623A", "\u623A"], /* CJK Ideograph */ + ["\u623B", "\u623B"], /* CJK Ideograph */ + ["\u623C", "\u623C"], /* CJK Ideograph */ + ["\u623D", "\u623D"], /* CJK Ideograph */ + ["\u623E", "\u623E"], /* CJK Ideograph */ + ["\u623F", "\u623F"], /* CJK Ideograph */ + ["\u6240", "\u6240"], /* CJK Ideograph */ + ["\u6241", "\u6241"], /* CJK Ideograph */ + ["\u6242", "\u6242"], /* CJK Ideograph */ + ["\u6243", "\u6243"], /* CJK Ideograph */ + ["\u6244", "\u6244"], /* CJK Ideograph */ + ["\u6245", "\u6245"], /* CJK Ideograph */ + ["\u6246", "\u6246"], /* CJK Ideograph */ + ["\u6247", "\u6247"], /* CJK Ideograph */ + ["\u6248", "\u6248"], /* CJK Ideograph */ + ["\u6249", "\u6249"], /* CJK Ideograph */ + ["\u624A", "\u624A"], /* CJK Ideograph */ + ["\u624B", "\u624B"], /* CJK Ideograph */ + ["\u624C", "\u624C"], /* CJK Ideograph */ + ["\u624D", "\u624D"], /* CJK Ideograph */ + ["\u624E", "\u624E"], /* CJK Ideograph */ + ["\u624F", "\u624F"], /* CJK Ideograph */ + ["\u6250", "\u6250"], /* CJK Ideograph */ + ["\u6251", "\u6251"], /* CJK Ideograph */ + ["\u6252", "\u6252"], /* CJK Ideograph */ + ["\u6253", "\u6253"], /* CJK Ideograph */ + ["\u6254", "\u6254"], /* CJK Ideograph */ + ["\u6255", "\u6255"], /* CJK Ideograph */ + ["\u6256", "\u6256"], /* CJK Ideograph */ + ["\u6257", "\u6257"], /* CJK Ideograph */ + ["\u6258", "\u6258"], /* CJK Ideograph */ + ["\u6259", "\u6259"], /* CJK Ideograph */ + ["\u625A", "\u625A"], /* CJK Ideograph */ + ["\u625B", "\u625B"], /* CJK Ideograph */ + ["\u625C", "\u625C"], /* CJK Ideograph */ + ["\u625D", "\u625D"], /* CJK Ideograph */ + ["\u625E", "\u625E"], /* CJK Ideograph */ + ["\u625F", "\u625F"], /* CJK Ideograph */ + ["\u6260", "\u6260"], /* CJK Ideograph */ + ["\u6261", "\u6261"], /* CJK Ideograph */ + ["\u6262", "\u6262"], /* CJK Ideograph */ + ["\u6263", "\u6263"], /* CJK Ideograph */ + ["\u6264", "\u6264"], /* CJK Ideograph */ + ["\u6265", "\u6265"], /* CJK Ideograph */ + ["\u6266", "\u6266"], /* CJK Ideograph */ + ["\u6267", "\u6267"], /* CJK Ideograph */ + ["\u6268", "\u6268"], /* CJK Ideograph */ + ["\u6269", "\u6269"], /* CJK Ideograph */ + ["\u626A", "\u626A"], /* CJK Ideograph */ + ["\u626B", "\u626B"], /* CJK Ideograph */ + ["\u626C", "\u626C"], /* CJK Ideograph */ + ["\u626D", "\u626D"], /* CJK Ideograph */ + ["\u626E", "\u626E"], /* CJK Ideograph */ + ["\u626F", "\u626F"], /* CJK Ideograph */ + ["\u6270", "\u6270"], /* CJK Ideograph */ + ["\u6271", "\u6271"], /* CJK Ideograph */ + ["\u6272", "\u6272"], /* CJK Ideograph */ + ["\u6273", "\u6273"], /* CJK Ideograph */ + ["\u6274", "\u6274"], /* CJK Ideograph */ + ["\u6275", "\u6275"], /* CJK Ideograph */ + ["\u6276", "\u6276"], /* CJK Ideograph */ + ["\u6277", "\u6277"], /* CJK Ideograph */ + ["\u6278", "\u6278"], /* CJK Ideograph */ + ["\u6279", "\u6279"], /* CJK Ideograph */ + ["\u627A", "\u627A"], /* CJK Ideograph */ + ["\u627B", "\u627B"], /* CJK Ideograph */ + ["\u627C", "\u627C"], /* CJK Ideograph */ + ["\u627D", "\u627D"], /* CJK Ideograph */ + ["\u627E", "\u627E"], /* CJK Ideograph */ + ["\u627F", "\u627F"], /* CJK Ideograph */ + ["\u6280", "\u6280"], /* CJK Ideograph */ + ["\u6281", "\u6281"], /* CJK Ideograph */ + ["\u6282", "\u6282"], /* CJK Ideograph */ + ["\u6283", "\u6283"], /* CJK Ideograph */ + ["\u6284", "\u6284"], /* CJK Ideograph */ + ["\u6285", "\u6285"], /* CJK Ideograph */ + ["\u6286", "\u6286"], /* CJK Ideograph */ + ["\u6287", "\u6287"], /* CJK Ideograph */ + ["\u6288", "\u6288"], /* CJK Ideograph */ + ["\u6289", "\u6289"], /* CJK Ideograph */ + ["\u628A", "\u628A"], /* CJK Ideograph */ + ["\u628B", "\u628B"], /* CJK Ideograph */ + ["\u628C", "\u628C"], /* CJK Ideograph */ + ["\u628D", "\u628D"], /* CJK Ideograph */ + ["\u628E", "\u628E"], /* CJK Ideograph */ + ["\u628F", "\u628F"], /* CJK Ideograph */ + ["\u6290", "\u6290"], /* CJK Ideograph */ + ["\u6291", "\u6291"], /* CJK Ideograph */ + ["\u6292", "\u6292"], /* CJK Ideograph */ + ["\u6293", "\u6293"], /* CJK Ideograph */ + ["\u6294", "\u6294"], /* CJK Ideograph */ + ["\u6295", "\u6295"], /* CJK Ideograph */ + ["\u6296", "\u6296"], /* CJK Ideograph */ + ["\u6297", "\u6297"], /* CJK Ideograph */ + ["\u6298", "\u6298"], /* CJK Ideograph */ + ["\u6299", "\u6299"], /* CJK Ideograph */ + ["\u629A", "\u629A"], /* CJK Ideograph */ + ["\u629B", "\u629B"], /* CJK Ideograph */ + ["\u629C", "\u629C"], /* CJK Ideograph */ + ["\u629D", "\u629D"], /* CJK Ideograph */ + ["\u629E", "\u629E"], /* CJK Ideograph */ + ["\u629F", "\u629F"], /* CJK Ideograph */ + ["\u62A0", "\u62A0"], /* CJK Ideograph */ + ["\u62A1", "\u62A1"], /* CJK Ideograph */ + ["\u62A2", "\u62A2"], /* CJK Ideograph */ + ["\u62A3", "\u62A3"], /* CJK Ideograph */ + ["\u62A4", "\u62A4"], /* CJK Ideograph */ + ["\u62A5", "\u62A5"], /* CJK Ideograph */ + ["\u62A6", "\u62A6"], /* CJK Ideograph */ + ["\u62A7", "\u62A7"], /* CJK Ideograph */ + ["\u62A8", "\u62A8"], /* CJK Ideograph */ + ["\u62A9", "\u62A9"], /* CJK Ideograph */ + ["\u62AA", "\u62AA"], /* CJK Ideograph */ + ["\u62AB", "\u62AB"], /* CJK Ideograph */ + ["\u62AC", "\u62AC"], /* CJK Ideograph */ + ["\u62AD", "\u62AD"], /* CJK Ideograph */ + ["\u62AE", "\u62AE"], /* CJK Ideograph */ + ["\u62AF", "\u62AF"], /* CJK Ideograph */ + ["\u62B0", "\u62B0"], /* CJK Ideograph */ + ["\u62B1", "\u62B1"], /* CJK Ideograph */ + ["\u62B2", "\u62B2"], /* CJK Ideograph */ + ["\u62B3", "\u62B3"], /* CJK Ideograph */ + ["\u62B4", "\u62B4"], /* CJK Ideograph */ + ["\u62B5", "\u62B5"], /* CJK Ideograph */ + ["\u62B6", "\u62B6"], /* CJK Ideograph */ + ["\u62B7", "\u62B7"], /* CJK Ideograph */ + ["\u62B8", "\u62B8"], /* CJK Ideograph */ + ["\u62B9", "\u62B9"], /* CJK Ideograph */ + ["\u62BA", "\u62BA"], /* CJK Ideograph */ + ["\u62BB", "\u62BB"], /* CJK Ideograph */ + ["\u62BC", "\u62BC"], /* CJK Ideograph */ + ["\u62BD", "\u62BD"], /* CJK Ideograph */ + ["\u62BE", "\u62BE"], /* CJK Ideograph */ + ["\u62BF", "\u62BF"], /* CJK Ideograph */ + ["\u62C0", "\u62C0"], /* CJK Ideograph */ + ["\u62C1", "\u62C1"], /* CJK Ideograph */ + ["\u62C2", "\u62C2"], /* CJK Ideograph */ + ["\u62C3", "\u62C3"], /* CJK Ideograph */ + ["\u62C4", "\u62C4"], /* CJK Ideograph */ + ["\u62C5", "\u62C5"], /* CJK Ideograph */ + ["\u62C6", "\u62C6"], /* CJK Ideograph */ + ["\u62C7", "\u62C7"], /* CJK Ideograph */ + ["\u62C8", "\u62C8"], /* CJK Ideograph */ + ["\u62C9", "\u62C9"], /* CJK Ideograph */ + ["\u62CA", "\u62CA"], /* CJK Ideograph */ + ["\u62CB", "\u62CB"], /* CJK Ideograph */ + ["\u62CC", "\u62CC"], /* CJK Ideograph */ + ["\u62CD", "\u62CD"], /* CJK Ideograph */ + ["\u62CE", "\u62CE"], /* CJK Ideograph */ + ["\u62CF", "\u62CF"], /* CJK Ideograph */ + ["\u62D0", "\u62D0"], /* CJK Ideograph */ + ["\u62D1", "\u62D1"], /* CJK Ideograph */ + ["\u62D2", "\u62D2"], /* CJK Ideograph */ + ["\u62D3", "\u62D3"], /* CJK Ideograph */ + ["\u62D4", "\u62D4"], /* CJK Ideograph */ + ["\u62D5", "\u62D5"], /* CJK Ideograph */ + ["\u62D6", "\u62D6"], /* CJK Ideograph */ + ["\u62D7", "\u62D7"], /* CJK Ideograph */ + ["\u62D8", "\u62D8"], /* CJK Ideograph */ + ["\u62D9", "\u62D9"], /* CJK Ideograph */ + ["\u62DA", "\u62DA"], /* CJK Ideograph */ + ["\u62DB", "\u62DB"], /* CJK Ideograph */ + ["\u62DC", "\u62DC"], /* CJK Ideograph */ + ["\u62DD", "\u62DD"], /* CJK Ideograph */ + ["\u62DE", "\u62DE"], /* CJK Ideograph */ + ["\u62DF", "\u62DF"], /* CJK Ideograph */ + ["\u62E0", "\u62E0"], /* CJK Ideograph */ + ["\u62E1", "\u62E1"], /* CJK Ideograph */ + ["\u62E2", "\u62E2"], /* CJK Ideograph */ + ["\u62E3", "\u62E3"], /* CJK Ideograph */ + ["\u62E4", "\u62E4"], /* CJK Ideograph */ + ["\u62E5", "\u62E5"], /* CJK Ideograph */ + ["\u62E6", "\u62E6"], /* CJK Ideograph */ + ["\u62E7", "\u62E7"], /* CJK Ideograph */ + ["\u62E8", "\u62E8"], /* CJK Ideograph */ + ["\u62E9", "\u62E9"], /* CJK Ideograph */ + ["\u62EA", "\u62EA"], /* CJK Ideograph */ + ["\u62EB", "\u62EB"], /* CJK Ideograph */ + ["\u62EC", "\u62EC"], /* CJK Ideograph */ + ["\u62ED", "\u62ED"], /* CJK Ideograph */ + ["\u62EE", "\u62EE"], /* CJK Ideograph */ + ["\u62EF", "\u62EF"], /* CJK Ideograph */ + ["\u62F0", "\u62F0"], /* CJK Ideograph */ + ["\u62F1", "\u62F1"], /* CJK Ideograph */ + ["\u62F2", "\u62F2"], /* CJK Ideograph */ + ["\u62F3", "\u62F3"], /* CJK Ideograph */ + ["\u62F4", "\u62F4"], /* CJK Ideograph */ + ["\u62F5", "\u62F5"], /* CJK Ideograph */ + ["\u62F6", "\u62F6"], /* CJK Ideograph */ + ["\u62F7", "\u62F7"], /* CJK Ideograph */ + ["\u62F8", "\u62F8"], /* CJK Ideograph */ + ["\u62F9", "\u62F9"], /* CJK Ideograph */ + ["\u62FA", "\u62FA"], /* CJK Ideograph */ + ["\u62FB", "\u62FB"], /* CJK Ideograph */ + ["\u62FC", "\u62FC"], /* CJK Ideograph */ + ["\u62FD", "\u62FD"], /* CJK Ideograph */ + ["\u62FE", "\u62FE"], /* CJK Ideograph */ + ["\u62FF", "\u62FF"], /* CJK Ideograph */ + ["\u6300", "\u6300"], /* CJK Ideograph */ + ["\u6301", "\u6301"], /* CJK Ideograph */ + ["\u6302", "\u6302"], /* CJK Ideograph */ + ["\u6303", "\u6303"], /* CJK Ideograph */ + ["\u6304", "\u6304"], /* CJK Ideograph */ + ["\u6305", "\u6305"], /* CJK Ideograph */ + ["\u6306", "\u6306"], /* CJK Ideograph */ + ["\u6307", "\u6307"], /* CJK Ideograph */ + ["\u6308", "\u6308"], /* CJK Ideograph */ + ["\u6309", "\u6309"], /* CJK Ideograph */ + ["\u630A", "\u630A"], /* CJK Ideograph */ + ["\u630B", "\u630B"], /* CJK Ideograph */ + ["\u630C", "\u630C"], /* CJK Ideograph */ + ["\u630D", "\u630D"], /* CJK Ideograph */ + ["\u630E", "\u630E"], /* CJK Ideograph */ + ["\u630F", "\u630F"], /* CJK Ideograph */ + ["\u6310", "\u6310"], /* CJK Ideograph */ + ["\u6311", "\u6311"], /* CJK Ideograph */ + ["\u6312", "\u6312"], /* CJK Ideograph */ + ["\u6313", "\u6313"], /* CJK Ideograph */ + ["\u6314", "\u6314"], /* CJK Ideograph */ + ["\u6315", "\u6315"], /* CJK Ideograph */ + ["\u6316", "\u6316"], /* CJK Ideograph */ + ["\u6317", "\u6317"], /* CJK Ideograph */ + ["\u6318", "\u6318"], /* CJK Ideograph */ + ["\u6319", "\u6319"], /* CJK Ideograph */ + ["\u631A", "\u631A"], /* CJK Ideograph */ + ["\u631B", "\u631B"], /* CJK Ideograph */ + ["\u631C", "\u631C"], /* CJK Ideograph */ + ["\u631D", "\u631D"], /* CJK Ideograph */ + ["\u631E", "\u631E"], /* CJK Ideograph */ + ["\u631F", "\u631F"], /* CJK Ideograph */ + ["\u6320", "\u6320"], /* CJK Ideograph */ + ["\u6321", "\u6321"], /* CJK Ideograph */ + ["\u6322", "\u6322"], /* CJK Ideograph */ + ["\u6323", "\u6323"], /* CJK Ideograph */ + ["\u6324", "\u6324"], /* CJK Ideograph */ + ["\u6325", "\u6325"], /* CJK Ideograph */ + ["\u6326", "\u6326"], /* CJK Ideograph */ + ["\u6327", "\u6327"], /* CJK Ideograph */ + ["\u6328", "\u6328"], /* CJK Ideograph */ + ["\u6329", "\u6329"], /* CJK Ideograph */ + ["\u632A", "\u632A"], /* CJK Ideograph */ + ["\u632B", "\u632B"], /* CJK Ideograph */ + ["\u632C", "\u632C"], /* CJK Ideograph */ + ["\u632D", "\u632D"], /* CJK Ideograph */ + ["\u632E", "\u632E"], /* CJK Ideograph */ + ["\u632F", "\u632F"], /* CJK Ideograph */ + ["\u6330", "\u6330"], /* CJK Ideograph */ + ["\u6331", "\u6331"], /* CJK Ideograph */ + ["\u6332", "\u6332"], /* CJK Ideograph */ + ["\u6333", "\u6333"], /* CJK Ideograph */ + ["\u6334", "\u6334"], /* CJK Ideograph */ + ["\u6335", "\u6335"], /* CJK Ideograph */ + ["\u6336", "\u6336"], /* CJK Ideograph */ + ["\u6337", "\u6337"], /* CJK Ideograph */ + ["\u6338", "\u6338"], /* CJK Ideograph */ + ["\u6339", "\u6339"], /* CJK Ideograph */ + ["\u633A", "\u633A"], /* CJK Ideograph */ + ["\u633B", "\u633B"], /* CJK Ideograph */ + ["\u633C", "\u633C"], /* CJK Ideograph */ + ["\u633D", "\u633D"], /* CJK Ideograph */ + ["\u633E", "\u633E"], /* CJK Ideograph */ + ["\u633F", "\u633F"], /* CJK Ideograph */ + ["\u6340", "\u6340"], /* CJK Ideograph */ + ["\u6341", "\u6341"], /* CJK Ideograph */ + ["\u6342", "\u6342"], /* CJK Ideograph */ + ["\u6343", "\u6343"], /* CJK Ideograph */ + ["\u6344", "\u6344"], /* CJK Ideograph */ + ["\u6345", "\u6345"], /* CJK Ideograph */ + ["\u6346", "\u6346"], /* CJK Ideograph */ + ["\u6347", "\u6347"], /* CJK Ideograph */ + ["\u6348", "\u6348"], /* CJK Ideograph */ + ["\u6349", "\u6349"], /* CJK Ideograph */ + ["\u634A", "\u634A"], /* CJK Ideograph */ + ["\u634B", "\u634B"], /* CJK Ideograph */ + ["\u634C", "\u634C"], /* CJK Ideograph */ + ["\u634D", "\u634D"], /* CJK Ideograph */ + ["\u634E", "\u634E"], /* CJK Ideograph */ + ["\u634F", "\u634F"], /* CJK Ideograph */ + ["\u6350", "\u6350"], /* CJK Ideograph */ + ["\u6351", "\u6351"], /* CJK Ideograph */ + ["\u6352", "\u6352"], /* CJK Ideograph */ + ["\u6353", "\u6353"], /* CJK Ideograph */ + ["\u6354", "\u6354"], /* CJK Ideograph */ + ["\u6355", "\u6355"], /* CJK Ideograph */ + ["\u6356", "\u6356"], /* CJK Ideograph */ + ["\u6357", "\u6357"], /* CJK Ideograph */ + ["\u6358", "\u6358"], /* CJK Ideograph */ + ["\u6359", "\u6359"], /* CJK Ideograph */ + ["\u635A", "\u635A"], /* CJK Ideograph */ + ["\u635B", "\u635B"], /* CJK Ideograph */ + ["\u635C", "\u635C"], /* CJK Ideograph */ + ["\u635D", "\u635D"], /* CJK Ideograph */ + ["\u635E", "\u635E"], /* CJK Ideograph */ + ["\u635F", "\u635F"], /* CJK Ideograph */ + ["\u6360", "\u6360"], /* CJK Ideograph */ + ["\u6361", "\u6361"], /* CJK Ideograph */ + ["\u6362", "\u6362"], /* CJK Ideograph */ + ["\u6363", "\u6363"], /* CJK Ideograph */ + ["\u6364", "\u6364"], /* CJK Ideograph */ + ["\u6365", "\u6365"], /* CJK Ideograph */ + ["\u6366", "\u6366"], /* CJK Ideograph */ + ["\u6367", "\u6367"], /* CJK Ideograph */ + ["\u6368", "\u6368"], /* CJK Ideograph */ + ["\u6369", "\u6369"], /* CJK Ideograph */ + ["\u636A", "\u636A"], /* CJK Ideograph */ + ["\u636B", "\u636B"], /* CJK Ideograph */ + ["\u636C", "\u636C"], /* CJK Ideograph */ + ["\u636D", "\u636D"], /* CJK Ideograph */ + ["\u636E", "\u636E"], /* CJK Ideograph */ + ["\u636F", "\u636F"], /* CJK Ideograph */ + ["\u6370", "\u6370"], /* CJK Ideograph */ + ["\u6371", "\u6371"], /* CJK Ideograph */ + ["\u6372", "\u6372"], /* CJK Ideograph */ + ["\u6373", "\u6373"], /* CJK Ideograph */ + ["\u6374", "\u6374"], /* CJK Ideograph */ + ["\u6375", "\u6375"], /* CJK Ideograph */ + ["\u6376", "\u6376"], /* CJK Ideograph */ + ["\u6377", "\u6377"], /* CJK Ideograph */ + ["\u6378", "\u6378"], /* CJK Ideograph */ + ["\u6379", "\u6379"], /* CJK Ideograph */ + ["\u637A", "\u637A"], /* CJK Ideograph */ + ["\u637B", "\u637B"], /* CJK Ideograph */ + ["\u637C", "\u637C"], /* CJK Ideograph */ + ["\u637D", "\u637D"], /* CJK Ideograph */ + ["\u637E", "\u637E"], /* CJK Ideograph */ + ["\u637F", "\u637F"], /* CJK Ideograph */ + ["\u6380", "\u6380"], /* CJK Ideograph */ + ["\u6381", "\u6381"], /* CJK Ideograph */ + ["\u6382", "\u6382"], /* CJK Ideograph */ + ["\u6383", "\u6383"], /* CJK Ideograph */ + ["\u6384", "\u6384"], /* CJK Ideograph */ + ["\u6385", "\u6385"], /* CJK Ideograph */ + ["\u6386", "\u6386"], /* CJK Ideograph */ + ["\u6387", "\u6387"], /* CJK Ideograph */ + ["\u6388", "\u6388"], /* CJK Ideograph */ + ["\u6389", "\u6389"], /* CJK Ideograph */ + ["\u638A", "\u638A"], /* CJK Ideograph */ + ["\u638B", "\u638B"], /* CJK Ideograph */ + ["\u638C", "\u638C"], /* CJK Ideograph */ + ["\u638D", "\u638D"], /* CJK Ideograph */ + ["\u638E", "\u638E"], /* CJK Ideograph */ + ["\u638F", "\u638F"], /* CJK Ideograph */ + ["\u6390", "\u6390"], /* CJK Ideograph */ + ["\u6391", "\u6391"], /* CJK Ideograph */ + ["\u6392", "\u6392"], /* CJK Ideograph */ + ["\u6393", "\u6393"], /* CJK Ideograph */ + ["\u6394", "\u6394"], /* CJK Ideograph */ + ["\u6395", "\u6395"], /* CJK Ideograph */ + ["\u6396", "\u6396"], /* CJK Ideograph */ + ["\u6397", "\u6397"], /* CJK Ideograph */ + ["\u6398", "\u6398"], /* CJK Ideograph */ + ["\u6399", "\u6399"], /* CJK Ideograph */ + ["\u639A", "\u639A"], /* CJK Ideograph */ + ["\u639B", "\u639B"], /* CJK Ideograph */ + ["\u639C", "\u639C"], /* CJK Ideograph */ + ["\u639D", "\u639D"], /* CJK Ideograph */ + ["\u639E", "\u639E"], /* CJK Ideograph */ + ["\u639F", "\u639F"], /* CJK Ideograph */ + ["\u63A0", "\u63A0"], /* CJK Ideograph */ + ["\u63A1", "\u63A1"], /* CJK Ideograph */ + ["\u63A2", "\u63A2"], /* CJK Ideograph */ + ["\u63A3", "\u63A3"], /* CJK Ideograph */ + ["\u63A4", "\u63A4"], /* CJK Ideograph */ + ["\u63A5", "\u63A5"], /* CJK Ideograph */ + ["\u63A6", "\u63A6"], /* CJK Ideograph */ + ["\u63A7", "\u63A7"], /* CJK Ideograph */ + ["\u63A8", "\u63A8"], /* CJK Ideograph */ + ["\u63A9", "\u63A9"], /* CJK Ideograph */ + ["\u63AA", "\u63AA"], /* CJK Ideograph */ + ["\u63AB", "\u63AB"], /* CJK Ideograph */ + ["\u63AC", "\u63AC"], /* CJK Ideograph */ + ["\u63AD", "\u63AD"], /* CJK Ideograph */ + ["\u63AE", "\u63AE"], /* CJK Ideograph */ + ["\u63AF", "\u63AF"], /* CJK Ideograph */ + ["\u63B0", "\u63B0"], /* CJK Ideograph */ + ["\u63B1", "\u63B1"], /* CJK Ideograph */ + ["\u63B2", "\u63B2"], /* CJK Ideograph */ + ["\u63B3", "\u63B3"], /* CJK Ideograph */ + ["\u63B4", "\u63B4"], /* CJK Ideograph */ + ["\u63B5", "\u63B5"], /* CJK Ideograph */ + ["\u63B6", "\u63B6"], /* CJK Ideograph */ + ["\u63B7", "\u63B7"], /* CJK Ideograph */ + ["\u63B8", "\u63B8"], /* CJK Ideograph */ + ["\u63B9", "\u63B9"], /* CJK Ideograph */ + ["\u63BA", "\u63BA"], /* CJK Ideograph */ + ["\u63BB", "\u63BB"], /* CJK Ideograph */ + ["\u63BC", "\u63BC"], /* CJK Ideograph */ + ["\u63BD", "\u63BD"], /* CJK Ideograph */ + ["\u63BE", "\u63BE"], /* CJK Ideograph */ + ["\u63BF", "\u63BF"], /* CJK Ideograph */ + ["\u63C0", "\u63C0"], /* CJK Ideograph */ + ["\u63C1", "\u63C1"], /* CJK Ideograph */ + ["\u63C2", "\u63C2"], /* CJK Ideograph */ + ["\u63C3", "\u63C3"], /* CJK Ideograph */ + ["\u63C4", "\u63C4"], /* CJK Ideograph */ + ["\u63C5", "\u63C5"], /* CJK Ideograph */ + ["\u63C6", "\u63C6"], /* CJK Ideograph */ + ["\u63C7", "\u63C7"], /* CJK Ideograph */ + ["\u63C8", "\u63C8"], /* CJK Ideograph */ + ["\u63C9", "\u63C9"], /* CJK Ideograph */ + ["\u63CA", "\u63CA"], /* CJK Ideograph */ + ["\u63CB", "\u63CB"], /* CJK Ideograph */ + ["\u63CC", "\u63CC"], /* CJK Ideograph */ + ["\u63CD", "\u63CD"], /* CJK Ideograph */ + ["\u63CE", "\u63CE"], /* CJK Ideograph */ + ["\u63CF", "\u63CF"], /* CJK Ideograph */ + ["\u63D0", "\u63D0"], /* CJK Ideograph */ + ["\u63D1", "\u63D1"], /* CJK Ideograph */ + ["\u63D2", "\u63D2"], /* CJK Ideograph */ + ["\u63D3", "\u63D3"], /* CJK Ideograph */ + ["\u63D4", "\u63D4"], /* CJK Ideograph */ + ["\u63D5", "\u63D5"], /* CJK Ideograph */ + ["\u63D6", "\u63D6"], /* CJK Ideograph */ + ["\u63D7", "\u63D7"], /* CJK Ideograph */ + ["\u63D8", "\u63D8"], /* CJK Ideograph */ + ["\u63D9", "\u63D9"], /* CJK Ideograph */ + ["\u63DA", "\u63DA"], /* CJK Ideograph */ + ["\u63DB", "\u63DB"], /* CJK Ideograph */ + ["\u63DC", "\u63DC"], /* CJK Ideograph */ + ["\u63DD", "\u63DD"], /* CJK Ideograph */ + ["\u63DE", "\u63DE"], /* CJK Ideograph */ + ["\u63DF", "\u63DF"], /* CJK Ideograph */ + ["\u63E0", "\u63E0"], /* CJK Ideograph */ + ["\u63E1", "\u63E1"], /* CJK Ideograph */ + ["\u63E2", "\u63E2"], /* CJK Ideograph */ + ["\u63E3", "\u63E3"], /* CJK Ideograph */ + ["\u63E4", "\u63E4"], /* CJK Ideograph */ + ["\u63E5", "\u63E5"], /* CJK Ideograph */ + ["\u63E6", "\u63E6"], /* CJK Ideograph */ + ["\u63E7", "\u63E7"], /* CJK Ideograph */ + ["\u63E8", "\u63E8"], /* CJK Ideograph */ + ["\u63E9", "\u63E9"], /* CJK Ideograph */ + ["\u63EA", "\u63EA"], /* CJK Ideograph */ + ["\u63EB", "\u63EB"], /* CJK Ideograph */ + ["\u63EC", "\u63EC"], /* CJK Ideograph */ + ["\u63ED", "\u63ED"], /* CJK Ideograph */ + ["\u63EE", "\u63EE"], /* CJK Ideograph */ + ["\u63EF", "\u63EF"], /* CJK Ideograph */ + ["\u63F0", "\u63F0"], /* CJK Ideograph */ + ["\u63F1", "\u63F1"], /* CJK Ideograph */ + ["\u63F2", "\u63F2"], /* CJK Ideograph */ + ["\u63F3", "\u63F3"], /* CJK Ideograph */ + ["\u63F4", "\u63F4"], /* CJK Ideograph */ + ["\u63F5", "\u63F5"], /* CJK Ideograph */ + ["\u63F6", "\u63F6"], /* CJK Ideograph */ + ["\u63F7", "\u63F7"], /* CJK Ideograph */ + ["\u63F8", "\u63F8"], /* CJK Ideograph */ + ["\u63F9", "\u63F9"], /* CJK Ideograph */ + ["\u63FA", "\u63FA"], /* CJK Ideograph */ + ["\u63FB", "\u63FB"], /* CJK Ideograph */ + ["\u63FC", "\u63FC"], /* CJK Ideograph */ + ["\u63FD", "\u63FD"], /* CJK Ideograph */ + ["\u63FE", "\u63FE"], /* CJK Ideograph */ + ["\u63FF", "\u63FF"], /* CJK Ideograph */ + ["\u6400", "\u6400"], /* CJK Ideograph */ + ["\u6401", "\u6401"], /* CJK Ideograph */ + ["\u6402", "\u6402"], /* CJK Ideograph */ + ["\u6403", "\u6403"], /* CJK Ideograph */ + ["\u6404", "\u6404"], /* CJK Ideograph */ + ["\u6405", "\u6405"], /* CJK Ideograph */ + ["\u6406", "\u6406"], /* CJK Ideograph */ + ["\u6407", "\u6407"], /* CJK Ideograph */ + ["\u6408", "\u6408"], /* CJK Ideograph */ + ["\u6409", "\u6409"], /* CJK Ideograph */ + ["\u640A", "\u640A"], /* CJK Ideograph */ + ["\u640B", "\u640B"], /* CJK Ideograph */ + ["\u640C", "\u640C"], /* CJK Ideograph */ + ["\u640D", "\u640D"], /* CJK Ideograph */ + ["\u640E", "\u640E"], /* CJK Ideograph */ + ["\u640F", "\u640F"], /* CJK Ideograph */ + ["\u6410", "\u6410"], /* CJK Ideograph */ + ["\u6411", "\u6411"], /* CJK Ideograph */ + ["\u6412", "\u6412"], /* CJK Ideograph */ + ["\u6413", "\u6413"], /* CJK Ideograph */ + ["\u6414", "\u6414"], /* CJK Ideograph */ + ["\u6415", "\u6415"], /* CJK Ideograph */ + ["\u6416", "\u6416"], /* CJK Ideograph */ + ["\u6417", "\u6417"], /* CJK Ideograph */ + ["\u6418", "\u6418"], /* CJK Ideograph */ + ["\u6419", "\u6419"], /* CJK Ideograph */ + ["\u641A", "\u641A"], /* CJK Ideograph */ + ["\u641B", "\u641B"], /* CJK Ideograph */ + ["\u641C", "\u641C"], /* CJK Ideograph */ + ["\u641D", "\u641D"], /* CJK Ideograph */ + ["\u641E", "\u641E"], /* CJK Ideograph */ + ["\u641F", "\u641F"], /* CJK Ideograph */ + ["\u6420", "\u6420"], /* CJK Ideograph */ + ["\u6421", "\u6421"], /* CJK Ideograph */ + ["\u6422", "\u6422"], /* CJK Ideograph */ + ["\u6423", "\u6423"], /* CJK Ideograph */ + ["\u6424", "\u6424"], /* CJK Ideograph */ + ["\u6425", "\u6425"], /* CJK Ideograph */ + ["\u6426", "\u6426"], /* CJK Ideograph */ + ["\u6427", "\u6427"], /* CJK Ideograph */ + ["\u6428", "\u6428"], /* CJK Ideograph */ + ["\u6429", "\u6429"], /* CJK Ideograph */ + ["\u642A", "\u642A"], /* CJK Ideograph */ + ["\u642B", "\u642B"], /* CJK Ideograph */ + ["\u642C", "\u642C"], /* CJK Ideograph */ + ["\u642D", "\u642D"], /* CJK Ideograph */ + ["\u642E", "\u642E"], /* CJK Ideograph */ + ["\u642F", "\u642F"], /* CJK Ideograph */ + ["\u6430", "\u6430"], /* CJK Ideograph */ + ["\u6431", "\u6431"], /* CJK Ideograph */ + ["\u6432", "\u6432"], /* CJK Ideograph */ + ["\u6433", "\u6433"], /* CJK Ideograph */ + ["\u6434", "\u6434"], /* CJK Ideograph */ + ["\u6435", "\u6435"], /* CJK Ideograph */ + ["\u6436", "\u6436"], /* CJK Ideograph */ + ["\u6437", "\u6437"], /* CJK Ideograph */ + ["\u6438", "\u6438"], /* CJK Ideograph */ + ["\u6439", "\u6439"], /* CJK Ideograph */ + ["\u643A", "\u643A"], /* CJK Ideograph */ + ["\u643B", "\u643B"], /* CJK Ideograph */ + ["\u643C", "\u643C"], /* CJK Ideograph */ + ["\u643D", "\u643D"], /* CJK Ideograph */ + ["\u643E", "\u643E"], /* CJK Ideograph */ + ["\u643F", "\u643F"], /* CJK Ideograph */ + ["\u6440", "\u6440"], /* CJK Ideograph */ + ["\u6441", "\u6441"], /* CJK Ideograph */ + ["\u6442", "\u6442"], /* CJK Ideograph */ + ["\u6443", "\u6443"], /* CJK Ideograph */ + ["\u6444", "\u6444"], /* CJK Ideograph */ + ["\u6445", "\u6445"], /* CJK Ideograph */ + ["\u6446", "\u6446"], /* CJK Ideograph */ + ["\u6447", "\u6447"], /* CJK Ideograph */ + ["\u6448", "\u6448"], /* CJK Ideograph */ + ["\u6449", "\u6449"], /* CJK Ideograph */ + ["\u644A", "\u644A"], /* CJK Ideograph */ + ["\u644B", "\u644B"], /* CJK Ideograph */ + ["\u644C", "\u644C"], /* CJK Ideograph */ + ["\u644D", "\u644D"], /* CJK Ideograph */ + ["\u644E", "\u644E"], /* CJK Ideograph */ + ["\u644F", "\u644F"], /* CJK Ideograph */ + ["\u6450", "\u6450"], /* CJK Ideograph */ + ["\u6451", "\u6451"], /* CJK Ideograph */ + ["\u6452", "\u6452"], /* CJK Ideograph */ + ["\u6453", "\u6453"], /* CJK Ideograph */ + ["\u6454", "\u6454"], /* CJK Ideograph */ + ["\u6455", "\u6455"], /* CJK Ideograph */ + ["\u6456", "\u6456"], /* CJK Ideograph */ + ["\u6457", "\u6457"], /* CJK Ideograph */ + ["\u6458", "\u6458"], /* CJK Ideograph */ + ["\u6459", "\u6459"], /* CJK Ideograph */ + ["\u645A", "\u645A"], /* CJK Ideograph */ + ["\u645B", "\u645B"], /* CJK Ideograph */ + ["\u645C", "\u645C"], /* CJK Ideograph */ + ["\u645D", "\u645D"], /* CJK Ideograph */ + ["\u645E", "\u645E"], /* CJK Ideograph */ + ["\u645F", "\u645F"], /* CJK Ideograph */ + ["\u6460", "\u6460"], /* CJK Ideograph */ + ["\u6461", "\u6461"], /* CJK Ideograph */ + ["\u6462", "\u6462"], /* CJK Ideograph */ + ["\u6463", "\u6463"], /* CJK Ideograph */ + ["\u6464", "\u6464"], /* CJK Ideograph */ + ["\u6465", "\u6465"], /* CJK Ideograph */ + ["\u6466", "\u6466"], /* CJK Ideograph */ + ["\u6467", "\u6467"], /* CJK Ideograph */ + ["\u6468", "\u6468"], /* CJK Ideograph */ + ["\u6469", "\u6469"], /* CJK Ideograph */ + ["\u646A", "\u646A"], /* CJK Ideograph */ + ["\u646B", "\u646B"], /* CJK Ideograph */ + ["\u646C", "\u646C"], /* CJK Ideograph */ + ["\u646D", "\u646D"], /* CJK Ideograph */ + ["\u646E", "\u646E"], /* CJK Ideograph */ + ["\u646F", "\u646F"], /* CJK Ideograph */ + ["\u6470", "\u6470"], /* CJK Ideograph */ + ["\u6471", "\u6471"], /* CJK Ideograph */ + ["\u6472", "\u6472"], /* CJK Ideograph */ + ["\u6473", "\u6473"], /* CJK Ideograph */ + ["\u6474", "\u6474"], /* CJK Ideograph */ + ["\u6475", "\u6475"], /* CJK Ideograph */ + ["\u6476", "\u6476"], /* CJK Ideograph */ + ["\u6477", "\u6477"], /* CJK Ideograph */ + ["\u6478", "\u6478"], /* CJK Ideograph */ + ["\u6479", "\u6479"], /* CJK Ideograph */ + ["\u647A", "\u647A"], /* CJK Ideograph */ + ["\u647B", "\u647B"], /* CJK Ideograph */ + ["\u647C", "\u647C"], /* CJK Ideograph */ + ["\u647D", "\u647D"], /* CJK Ideograph */ + ["\u647E", "\u647E"], /* CJK Ideograph */ + ["\u647F", "\u647F"], /* CJK Ideograph */ + ["\u6480", "\u6480"], /* CJK Ideograph */ + ["\u6481", "\u6481"], /* CJK Ideograph */ + ["\u6482", "\u6482"], /* CJK Ideograph */ + ["\u6483", "\u6483"], /* CJK Ideograph */ + ["\u6484", "\u6484"], /* CJK Ideograph */ + ["\u6485", "\u6485"], /* CJK Ideograph */ + ["\u6486", "\u6486"], /* CJK Ideograph */ + ["\u6487", "\u6487"], /* CJK Ideograph */ + ["\u6488", "\u6488"], /* CJK Ideograph */ + ["\u6489", "\u6489"], /* CJK Ideograph */ + ["\u648A", "\u648A"], /* CJK Ideograph */ + ["\u648B", "\u648B"], /* CJK Ideograph */ + ["\u648C", "\u648C"], /* CJK Ideograph */ + ["\u648D", "\u648D"], /* CJK Ideograph */ + ["\u648E", "\u648E"], /* CJK Ideograph */ + ["\u648F", "\u648F"], /* CJK Ideograph */ + ["\u6490", "\u6490"], /* CJK Ideograph */ + ["\u6491", "\u6491"], /* CJK Ideograph */ + ["\u6492", "\u6492"], /* CJK Ideograph */ + ["\u6493", "\u6493"], /* CJK Ideograph */ + ["\u6494", "\u6494"], /* CJK Ideograph */ + ["\u6495", "\u6495"], /* CJK Ideograph */ + ["\u6496", "\u6496"], /* CJK Ideograph */ + ["\u6497", "\u6497"], /* CJK Ideograph */ + ["\u6498", "\u6498"], /* CJK Ideograph */ + ["\u6499", "\u6499"], /* CJK Ideograph */ + ["\u649A", "\u649A"], /* CJK Ideograph */ + ["\u649B", "\u649B"], /* CJK Ideograph */ + ["\u649C", "\u649C"], /* CJK Ideograph */ + ["\u649D", "\u649D"], /* CJK Ideograph */ + ["\u649E", "\u649E"], /* CJK Ideograph */ + ["\u649F", "\u649F"], /* CJK Ideograph */ + ["\u64A0", "\u64A0"], /* CJK Ideograph */ + ["\u64A1", "\u64A1"], /* CJK Ideograph */ + ["\u64A2", "\u64A2"], /* CJK Ideograph */ + ["\u64A3", "\u64A3"], /* CJK Ideograph */ + ["\u64A4", "\u64A4"], /* CJK Ideograph */ + ["\u64A5", "\u64A5"], /* CJK Ideograph */ + ["\u64A6", "\u64A6"], /* CJK Ideograph */ + ["\u64A7", "\u64A7"], /* CJK Ideograph */ + ["\u64A8", "\u64A8"], /* CJK Ideograph */ + ["\u64A9", "\u64A9"], /* CJK Ideograph */ + ["\u64AA", "\u64AA"], /* CJK Ideograph */ + ["\u64AB", "\u64AB"], /* CJK Ideograph */ + ["\u64AC", "\u64AC"], /* CJK Ideograph */ + ["\u64AD", "\u64AD"], /* CJK Ideograph */ + ["\u64AE", "\u64AE"], /* CJK Ideograph */ + ["\u64AF", "\u64AF"], /* CJK Ideograph */ + ["\u64B0", "\u64B0"], /* CJK Ideograph */ + ["\u64B1", "\u64B1"], /* CJK Ideograph */ + ["\u64B2", "\u64B2"], /* CJK Ideograph */ + ["\u64B3", "\u64B3"], /* CJK Ideograph */ + ["\u64B4", "\u64B4"], /* CJK Ideograph */ + ["\u64B5", "\u64B5"], /* CJK Ideograph */ + ["\u64B6", "\u64B6"], /* CJK Ideograph */ + ["\u64B7", "\u64B7"], /* CJK Ideograph */ + ["\u64B8", "\u64B8"], /* CJK Ideograph */ + ["\u64B9", "\u64B9"], /* CJK Ideograph */ + ["\u64BA", "\u64BA"], /* CJK Ideograph */ + ["\u64BB", "\u64BB"], /* CJK Ideograph */ + ["\u64BC", "\u64BC"], /* CJK Ideograph */ + ["\u64BD", "\u64BD"], /* CJK Ideograph */ + ["\u64BE", "\u64BE"], /* CJK Ideograph */ + ["\u64BF", "\u64BF"], /* CJK Ideograph */ + ["\u64C0", "\u64C0"], /* CJK Ideograph */ + ["\u64C1", "\u64C1"], /* CJK Ideograph */ + ["\u64C2", "\u64C2"], /* CJK Ideograph */ + ["\u64C3", "\u64C3"], /* CJK Ideograph */ + ["\u64C4", "\u64C4"], /* CJK Ideograph */ + ["\u64C5", "\u64C5"], /* CJK Ideograph */ + ["\u64C6", "\u64C6"], /* CJK Ideograph */ + ["\u64C7", "\u64C7"], /* CJK Ideograph */ + ["\u64C8", "\u64C8"], /* CJK Ideograph */ + ["\u64C9", "\u64C9"], /* CJK Ideograph */ + ["\u64CA", "\u64CA"], /* CJK Ideograph */ + ["\u64CB", "\u64CB"], /* CJK Ideograph */ + ["\u64CC", "\u64CC"], /* CJK Ideograph */ + ["\u64CD", "\u64CD"], /* CJK Ideograph */ + ["\u64CE", "\u64CE"], /* CJK Ideograph */ + ["\u64CF", "\u64CF"], /* CJK Ideograph */ + ["\u64D0", "\u64D0"], /* CJK Ideograph */ + ["\u64D1", "\u64D1"], /* CJK Ideograph */ + ["\u64D2", "\u64D2"], /* CJK Ideograph */ + ["\u64D3", "\u64D3"], /* CJK Ideograph */ + ["\u64D4", "\u64D4"], /* CJK Ideograph */ + ["\u64D5", "\u64D5"], /* CJK Ideograph */ + ["\u64D6", "\u64D6"], /* CJK Ideograph */ + ["\u64D7", "\u64D7"], /* CJK Ideograph */ + ["\u64D8", "\u64D8"], /* CJK Ideograph */ + ["\u64D9", "\u64D9"], /* CJK Ideograph */ + ["\u64DA", "\u64DA"], /* CJK Ideograph */ + ["\u64DB", "\u64DB"], /* CJK Ideograph */ + ["\u64DC", "\u64DC"], /* CJK Ideograph */ + ["\u64DD", "\u64DD"], /* CJK Ideograph */ + ["\u64DE", "\u64DE"], /* CJK Ideograph */ + ["\u64DF", "\u64DF"], /* CJK Ideograph */ + ["\u64E0", "\u64E0"], /* CJK Ideograph */ + ["\u64E1", "\u64E1"], /* CJK Ideograph */ + ["\u64E2", "\u64E2"], /* CJK Ideograph */ + ["\u64E3", "\u64E3"], /* CJK Ideograph */ + ["\u64E4", "\u64E4"], /* CJK Ideograph */ + ["\u64E5", "\u64E5"], /* CJK Ideograph */ + ["\u64E6", "\u64E6"], /* CJK Ideograph */ + ["\u64E7", "\u64E7"], /* CJK Ideograph */ + ["\u64E8", "\u64E8"], /* CJK Ideograph */ + ["\u64E9", "\u64E9"], /* CJK Ideograph */ + ["\u64EA", "\u64EA"], /* CJK Ideograph */ + ["\u64EB", "\u64EB"], /* CJK Ideograph */ + ["\u64EC", "\u64EC"], /* CJK Ideograph */ + ["\u64ED", "\u64ED"], /* CJK Ideograph */ + ["\u64EE", "\u64EE"], /* CJK Ideograph */ + ["\u64EF", "\u64EF"], /* CJK Ideograph */ + ["\u64F0", "\u64F0"], /* CJK Ideograph */ + ["\u64F1", "\u64F1"], /* CJK Ideograph */ + ["\u64F2", "\u64F2"], /* CJK Ideograph */ + ["\u64F3", "\u64F3"], /* CJK Ideograph */ + ["\u64F4", "\u64F4"], /* CJK Ideograph */ + ["\u64F5", "\u64F5"], /* CJK Ideograph */ + ["\u64F6", "\u64F6"], /* CJK Ideograph */ + ["\u64F7", "\u64F7"], /* CJK Ideograph */ + ["\u64F8", "\u64F8"], /* CJK Ideograph */ + ["\u64F9", "\u64F9"], /* CJK Ideograph */ + ["\u64FA", "\u64FA"], /* CJK Ideograph */ + ["\u64FB", "\u64FB"], /* CJK Ideograph */ + ["\u64FC", "\u64FC"], /* CJK Ideograph */ + ["\u64FD", "\u64FD"], /* CJK Ideograph */ + ["\u64FE", "\u64FE"], /* CJK Ideograph */ + ["\u64FF", "\u64FF"], /* CJK Ideograph */ + ["\u6500", "\u6500"], /* CJK Ideograph */ + ["\u6501", "\u6501"], /* CJK Ideograph */ + ["\u6502", "\u6502"], /* CJK Ideograph */ + ["\u6503", "\u6503"], /* CJK Ideograph */ + ["\u6504", "\u6504"], /* CJK Ideograph */ + ["\u6505", "\u6505"], /* CJK Ideograph */ + ["\u6506", "\u6506"], /* CJK Ideograph */ + ["\u6507", "\u6507"], /* CJK Ideograph */ + ["\u6508", "\u6508"], /* CJK Ideograph */ + ["\u6509", "\u6509"], /* CJK Ideograph */ + ["\u650A", "\u650A"], /* CJK Ideograph */ + ["\u650B", "\u650B"], /* CJK Ideograph */ + ["\u650C", "\u650C"], /* CJK Ideograph */ + ["\u650D", "\u650D"], /* CJK Ideograph */ + ["\u650E", "\u650E"], /* CJK Ideograph */ + ["\u650F", "\u650F"], /* CJK Ideograph */ + ["\u6510", "\u6510"], /* CJK Ideograph */ + ["\u6511", "\u6511"], /* CJK Ideograph */ + ["\u6512", "\u6512"], /* CJK Ideograph */ + ["\u6513", "\u6513"], /* CJK Ideograph */ + ["\u6514", "\u6514"], /* CJK Ideograph */ + ["\u6515", "\u6515"], /* CJK Ideograph */ + ["\u6516", "\u6516"], /* CJK Ideograph */ + ["\u6517", "\u6517"], /* CJK Ideograph */ + ["\u6518", "\u6518"], /* CJK Ideograph */ + ["\u6519", "\u6519"], /* CJK Ideograph */ + ["\u651A", "\u651A"], /* CJK Ideograph */ + ["\u651B", "\u651B"], /* CJK Ideograph */ + ["\u651C", "\u651C"], /* CJK Ideograph */ + ["\u651D", "\u651D"], /* CJK Ideograph */ + ["\u651E", "\u651E"], /* CJK Ideograph */ + ["\u651F", "\u651F"], /* CJK Ideograph */ + ["\u6520", "\u6520"], /* CJK Ideograph */ + ["\u6521", "\u6521"], /* CJK Ideograph */ + ["\u6522", "\u6522"], /* CJK Ideograph */ + ["\u6523", "\u6523"], /* CJK Ideograph */ + ["\u6524", "\u6524"], /* CJK Ideograph */ + ["\u6525", "\u6525"], /* CJK Ideograph */ + ["\u6526", "\u6526"], /* CJK Ideograph */ + ["\u6527", "\u6527"], /* CJK Ideograph */ + ["\u6528", "\u6528"], /* CJK Ideograph */ + ["\u6529", "\u6529"], /* CJK Ideograph */ + ["\u652A", "\u652A"], /* CJK Ideograph */ + ["\u652B", "\u652B"], /* CJK Ideograph */ + ["\u652C", "\u652C"], /* CJK Ideograph */ + ["\u652D", "\u652D"], /* CJK Ideograph */ + ["\u652E", "\u652E"], /* CJK Ideograph */ + ["\u652F", "\u652F"], /* CJK Ideograph */ + ["\u6530", "\u6530"], /* CJK Ideograph */ + ["\u6531", "\u6531"], /* CJK Ideograph */ + ["\u6532", "\u6532"], /* CJK Ideograph */ + ["\u6533", "\u6533"], /* CJK Ideograph */ + ["\u6534", "\u6534"], /* CJK Ideograph */ + ["\u6535", "\u6535"], /* CJK Ideograph */ + ["\u6536", "\u6536"], /* CJK Ideograph */ + ["\u6537", "\u6537"], /* CJK Ideograph */ + ["\u6538", "\u6538"], /* CJK Ideograph */ + ["\u6539", "\u6539"], /* CJK Ideograph */ + ["\u653A", "\u653A"], /* CJK Ideograph */ + ["\u653B", "\u653B"], /* CJK Ideograph */ + ["\u653C", "\u653C"], /* CJK Ideograph */ + ["\u653D", "\u653D"], /* CJK Ideograph */ + ["\u653E", "\u653E"], /* CJK Ideograph */ + ["\u653F", "\u653F"], /* CJK Ideograph */ + ["\u6540", "\u6540"], /* CJK Ideograph */ + ["\u6541", "\u6541"], /* CJK Ideograph */ + ["\u6542", "\u6542"], /* CJK Ideograph */ + ["\u6543", "\u6543"], /* CJK Ideograph */ + ["\u6544", "\u6544"], /* CJK Ideograph */ + ["\u6545", "\u6545"], /* CJK Ideograph */ + ["\u6546", "\u6546"], /* CJK Ideograph */ + ["\u6547", "\u6547"], /* CJK Ideograph */ + ["\u6548", "\u6548"], /* CJK Ideograph */ + ["\u6549", "\u6549"], /* CJK Ideograph */ + ["\u654A", "\u654A"], /* CJK Ideograph */ + ["\u654B", "\u654B"], /* CJK Ideograph */ + ["\u654C", "\u654C"], /* CJK Ideograph */ + ["\u654D", "\u654D"], /* CJK Ideograph */ + ["\u654E", "\u654E"], /* CJK Ideograph */ + ["\u654F", "\u654F"], /* CJK Ideograph */ + ["\u6550", "\u6550"], /* CJK Ideograph */ + ["\u6551", "\u6551"], /* CJK Ideograph */ + ["\u6552", "\u6552"], /* CJK Ideograph */ + ["\u6553", "\u6553"], /* CJK Ideograph */ + ["\u6554", "\u6554"], /* CJK Ideograph */ + ["\u6555", "\u6555"], /* CJK Ideograph */ + ["\u6556", "\u6556"], /* CJK Ideograph */ + ["\u6557", "\u6557"], /* CJK Ideograph */ + ["\u6558", "\u6558"], /* CJK Ideograph */ + ["\u6559", "\u6559"], /* CJK Ideograph */ + ["\u655A", "\u655A"], /* CJK Ideograph */ + ["\u655B", "\u655B"], /* CJK Ideograph */ + ["\u655C", "\u655C"], /* CJK Ideograph */ + ["\u655D", "\u655D"], /* CJK Ideograph */ + ["\u655E", "\u655E"], /* CJK Ideograph */ + ["\u655F", "\u655F"], /* CJK Ideograph */ + ["\u6560", "\u6560"], /* CJK Ideograph */ + ["\u6561", "\u6561"], /* CJK Ideograph */ + ["\u6562", "\u6562"], /* CJK Ideograph */ + ["\u6563", "\u6563"], /* CJK Ideograph */ + ["\u6564", "\u6564"], /* CJK Ideograph */ + ["\u6565", "\u6565"], /* CJK Ideograph */ + ["\u6566", "\u6566"], /* CJK Ideograph */ + ["\u6567", "\u6567"], /* CJK Ideograph */ + ["\u6568", "\u6568"], /* CJK Ideograph */ + ["\u6569", "\u6569"], /* CJK Ideograph */ + ["\u656A", "\u656A"], /* CJK Ideograph */ + ["\u656B", "\u656B"], /* CJK Ideograph */ + ["\u656C", "\u656C"], /* CJK Ideograph */ + ["\u656D", "\u656D"], /* CJK Ideograph */ + ["\u656E", "\u656E"], /* CJK Ideograph */ + ["\u656F", "\u656F"], /* CJK Ideograph */ + ["\u6570", "\u6570"], /* CJK Ideograph */ + ["\u6571", "\u6571"], /* CJK Ideograph */ + ["\u6572", "\u6572"], /* CJK Ideograph */ + ["\u6573", "\u6573"], /* CJK Ideograph */ + ["\u6574", "\u6574"], /* CJK Ideograph */ + ["\u6575", "\u6575"], /* CJK Ideograph */ + ["\u6576", "\u6576"], /* CJK Ideograph */ + ["\u6577", "\u6577"], /* CJK Ideograph */ + ["\u6578", "\u6578"], /* CJK Ideograph */ + ["\u6579", "\u6579"], /* CJK Ideograph */ + ["\u657A", "\u657A"], /* CJK Ideograph */ + ["\u657B", "\u657B"], /* CJK Ideograph */ + ["\u657C", "\u657C"], /* CJK Ideograph */ + ["\u657D", "\u657D"], /* CJK Ideograph */ + ["\u657E", "\u657E"], /* CJK Ideograph */ + ["\u657F", "\u657F"], /* CJK Ideograph */ + ["\u6580", "\u6580"], /* CJK Ideograph */ + ["\u6581", "\u6581"], /* CJK Ideograph */ + ["\u6582", "\u6582"], /* CJK Ideograph */ + ["\u6583", "\u6583"], /* CJK Ideograph */ + ["\u6584", "\u6584"], /* CJK Ideograph */ + ["\u6585", "\u6585"], /* CJK Ideograph */ + ["\u6586", "\u6586"], /* CJK Ideograph */ + ["\u6587", "\u6587"], /* CJK Ideograph */ + ["\u6588", "\u6588"], /* CJK Ideograph */ + ["\u6589", "\u6589"], /* CJK Ideograph */ + ["\u658A", "\u658A"], /* CJK Ideograph */ + ["\u658B", "\u658B"], /* CJK Ideograph */ + ["\u658C", "\u658C"], /* CJK Ideograph */ + ["\u658D", "\u658D"], /* CJK Ideograph */ + ["\u658E", "\u658E"], /* CJK Ideograph */ + ["\u658F", "\u658F"], /* CJK Ideograph */ + ["\u6590", "\u6590"], /* CJK Ideograph */ + ["\u6591", "\u6591"], /* CJK Ideograph */ + ["\u6592", "\u6592"], /* CJK Ideograph */ + ["\u6593", "\u6593"], /* CJK Ideograph */ + ["\u6594", "\u6594"], /* CJK Ideograph */ + ["\u6595", "\u6595"], /* CJK Ideograph */ + ["\u6596", "\u6596"], /* CJK Ideograph */ + ["\u6597", "\u6597"], /* CJK Ideograph */ + ["\u6598", "\u6598"], /* CJK Ideograph */ + ["\u6599", "\u6599"], /* CJK Ideograph */ + ["\u659A", "\u659A"], /* CJK Ideograph */ + ["\u659B", "\u659B"], /* CJK Ideograph */ + ["\u659C", "\u659C"], /* CJK Ideograph */ + ["\u659D", "\u659D"], /* CJK Ideograph */ + ["\u659E", "\u659E"], /* CJK Ideograph */ + ["\u659F", "\u659F"], /* CJK Ideograph */ + ["\u65A0", "\u65A0"], /* CJK Ideograph */ + ["\u65A1", "\u65A1"], /* CJK Ideograph */ + ["\u65A2", "\u65A2"], /* CJK Ideograph */ + ["\u65A3", "\u65A3"], /* CJK Ideograph */ + ["\u65A4", "\u65A4"], /* CJK Ideograph */ + ["\u65A5", "\u65A5"], /* CJK Ideograph */ + ["\u65A6", "\u65A6"], /* CJK Ideograph */ + ["\u65A7", "\u65A7"], /* CJK Ideograph */ + ["\u65A8", "\u65A8"], /* CJK Ideograph */ + ["\u65A9", "\u65A9"], /* CJK Ideograph */ + ["\u65AA", "\u65AA"], /* CJK Ideograph */ + ["\u65AB", "\u65AB"], /* CJK Ideograph */ + ["\u65AC", "\u65AC"], /* CJK Ideograph */ + ["\u65AD", "\u65AD"], /* CJK Ideograph */ + ["\u65AE", "\u65AE"], /* CJK Ideograph */ + ["\u65AF", "\u65AF"], /* CJK Ideograph */ + ["\u65B0", "\u65B0"], /* CJK Ideograph */ + ["\u65B1", "\u65B1"], /* CJK Ideograph */ + ["\u65B2", "\u65B2"], /* CJK Ideograph */ + ["\u65B3", "\u65B3"], /* CJK Ideograph */ + ["\u65B4", "\u65B4"], /* CJK Ideograph */ + ["\u65B5", "\u65B5"], /* CJK Ideograph */ + ["\u65B6", "\u65B6"], /* CJK Ideograph */ + ["\u65B7", "\u65B7"], /* CJK Ideograph */ + ["\u65B8", "\u65B8"], /* CJK Ideograph */ + ["\u65B9", "\u65B9"], /* CJK Ideograph */ + ["\u65BA", "\u65BA"], /* CJK Ideograph */ + ["\u65BB", "\u65BB"], /* CJK Ideograph */ + ["\u65BC", "\u65BC"], /* CJK Ideograph */ + ["\u65BD", "\u65BD"], /* CJK Ideograph */ + ["\u65BE", "\u65BE"], /* CJK Ideograph */ + ["\u65BF", "\u65BF"], /* CJK Ideograph */ + ["\u65C0", "\u65C0"], /* CJK Ideograph */ + ["\u65C1", "\u65C1"], /* CJK Ideograph */ + ["\u65C2", "\u65C2"], /* CJK Ideograph */ + ["\u65C3", "\u65C3"], /* CJK Ideograph */ + ["\u65C4", "\u65C4"], /* CJK Ideograph */ + ["\u65C5", "\u65C5"], /* CJK Ideograph */ + ["\u65C6", "\u65C6"], /* CJK Ideograph */ + ["\u65C7", "\u65C7"], /* CJK Ideograph */ + ["\u65C8", "\u65C8"], /* CJK Ideograph */ + ["\u65C9", "\u65C9"], /* CJK Ideograph */ + ["\u65CA", "\u65CA"], /* CJK Ideograph */ + ["\u65CB", "\u65CB"], /* CJK Ideograph */ + ["\u65CC", "\u65CC"], /* CJK Ideograph */ + ["\u65CD", "\u65CD"], /* CJK Ideograph */ + ["\u65CE", "\u65CE"], /* CJK Ideograph */ + ["\u65CF", "\u65CF"], /* CJK Ideograph */ + ["\u65D0", "\u65D0"], /* CJK Ideograph */ + ["\u65D1", "\u65D1"], /* CJK Ideograph */ + ["\u65D2", "\u65D2"], /* CJK Ideograph */ + ["\u65D3", "\u65D3"], /* CJK Ideograph */ + ["\u65D4", "\u65D4"], /* CJK Ideograph */ + ["\u65D5", "\u65D5"], /* CJK Ideograph */ + ["\u65D6", "\u65D6"], /* CJK Ideograph */ + ["\u65D7", "\u65D7"], /* CJK Ideograph */ + ["\u65D8", "\u65D8"], /* CJK Ideograph */ + ["\u65D9", "\u65D9"], /* CJK Ideograph */ + ["\u65DA", "\u65DA"], /* CJK Ideograph */ + ["\u65DB", "\u65DB"], /* CJK Ideograph */ + ["\u65DC", "\u65DC"], /* CJK Ideograph */ + ["\u65DD", "\u65DD"], /* CJK Ideograph */ + ["\u65DE", "\u65DE"], /* CJK Ideograph */ + ["\u65DF", "\u65DF"], /* CJK Ideograph */ + ["\u65E0", "\u65E0"], /* CJK Ideograph */ + ["\u65E1", "\u65E1"], /* CJK Ideograph */ + ["\u65E2", "\u65E2"], /* CJK Ideograph */ + ["\u65E3", "\u65E3"], /* CJK Ideograph */ + ["\u65E4", "\u65E4"], /* CJK Ideograph */ + ["\u65E5", "\u65E5"], /* CJK Ideograph */ + ["\u65E6", "\u65E6"], /* CJK Ideograph */ + ["\u65E7", "\u65E7"], /* CJK Ideograph */ + ["\u65E8", "\u65E8"], /* CJK Ideograph */ + ["\u65E9", "\u65E9"], /* CJK Ideograph */ + ["\u65EA", "\u65EA"], /* CJK Ideograph */ + ["\u65EB", "\u65EB"], /* CJK Ideograph */ + ["\u65EC", "\u65EC"], /* CJK Ideograph */ + ["\u65ED", "\u65ED"], /* CJK Ideograph */ + ["\u65EE", "\u65EE"], /* CJK Ideograph */ + ["\u65EF", "\u65EF"], /* CJK Ideograph */ + ["\u65F0", "\u65F0"], /* CJK Ideograph */ + ["\u65F1", "\u65F1"], /* CJK Ideograph */ + ["\u65F2", "\u65F2"], /* CJK Ideograph */ + ["\u65F3", "\u65F3"], /* CJK Ideograph */ + ["\u65F4", "\u65F4"], /* CJK Ideograph */ + ["\u65F5", "\u65F5"], /* CJK Ideograph */ + ["\u65F6", "\u65F6"], /* CJK Ideograph */ + ["\u65F7", "\u65F7"], /* CJK Ideograph */ + ["\u65F8", "\u65F8"], /* CJK Ideograph */ + ["\u65F9", "\u65F9"], /* CJK Ideograph */ + ["\u65FA", "\u65FA"], /* CJK Ideograph */ + ["\u65FB", "\u65FB"], /* CJK Ideograph */ + ["\u65FC", "\u65FC"], /* CJK Ideograph */ + ["\u65FD", "\u65FD"], /* CJK Ideograph */ + ["\u65FE", "\u65FE"], /* CJK Ideograph */ + ["\u65FF", "\u65FF"], /* CJK Ideograph */ + ["\u6600", "\u6600"], /* CJK Ideograph */ + ["\u6601", "\u6601"], /* CJK Ideograph */ + ["\u6602", "\u6602"], /* CJK Ideograph */ + ["\u6603", "\u6603"], /* CJK Ideograph */ + ["\u6604", "\u6604"], /* CJK Ideograph */ + ["\u6605", "\u6605"], /* CJK Ideograph */ + ["\u6606", "\u6606"], /* CJK Ideograph */ + ["\u6607", "\u6607"], /* CJK Ideograph */ + ["\u6608", "\u6608"], /* CJK Ideograph */ + ["\u6609", "\u6609"], /* CJK Ideograph */ + ["\u660A", "\u660A"], /* CJK Ideograph */ + ["\u660B", "\u660B"], /* CJK Ideograph */ + ["\u660C", "\u660C"], /* CJK Ideograph */ + ["\u660D", "\u660D"], /* CJK Ideograph */ + ["\u660E", "\u660E"], /* CJK Ideograph */ + ["\u660F", "\u660F"], /* CJK Ideograph */ + ["\u6610", "\u6610"], /* CJK Ideograph */ + ["\u6611", "\u6611"], /* CJK Ideograph */ + ["\u6612", "\u6612"], /* CJK Ideograph */ + ["\u6613", "\u6613"], /* CJK Ideograph */ + ["\u6614", "\u6614"], /* CJK Ideograph */ + ["\u6615", "\u6615"], /* CJK Ideograph */ + ["\u6616", "\u6616"], /* CJK Ideograph */ + ["\u6617", "\u6617"], /* CJK Ideograph */ + ["\u6618", "\u6618"], /* CJK Ideograph */ + ["\u6619", "\u6619"], /* CJK Ideograph */ + ["\u661A", "\u661A"], /* CJK Ideograph */ + ["\u661B", "\u661B"], /* CJK Ideograph */ + ["\u661C", "\u661C"], /* CJK Ideograph */ + ["\u661D", "\u661D"], /* CJK Ideograph */ + ["\u661E", "\u661E"], /* CJK Ideograph */ + ["\u661F", "\u661F"], /* CJK Ideograph */ + ["\u6620", "\u6620"], /* CJK Ideograph */ + ["\u6621", "\u6621"], /* CJK Ideograph */ + ["\u6622", "\u6622"], /* CJK Ideograph */ + ["\u6623", "\u6623"], /* CJK Ideograph */ + ["\u6624", "\u6624"], /* CJK Ideograph */ + ["\u6625", "\u6625"], /* CJK Ideograph */ + ["\u6626", "\u6626"], /* CJK Ideograph */ + ["\u6627", "\u6627"], /* CJK Ideograph */ + ["\u6628", "\u6628"], /* CJK Ideograph */ + ["\u6629", "\u6629"], /* CJK Ideograph */ + ["\u662A", "\u662A"], /* CJK Ideograph */ + ["\u662B", "\u662B"], /* CJK Ideograph */ + ["\u662C", "\u662C"], /* CJK Ideograph */ + ["\u662D", "\u662D"], /* CJK Ideograph */ + ["\u662E", "\u662E"], /* CJK Ideograph */ + ["\u662F", "\u662F"], /* CJK Ideograph */ + ["\u6630", "\u6630"], /* CJK Ideograph */ + ["\u6631", "\u6631"], /* CJK Ideograph */ + ["\u6632", "\u6632"], /* CJK Ideograph */ + ["\u6633", "\u6633"], /* CJK Ideograph */ + ["\u6634", "\u6634"], /* CJK Ideograph */ + ["\u6635", "\u6635"], /* CJK Ideograph */ + ["\u6636", "\u6636"], /* CJK Ideograph */ + ["\u6637", "\u6637"], /* CJK Ideograph */ + ["\u6638", "\u6638"], /* CJK Ideograph */ + ["\u6639", "\u6639"], /* CJK Ideograph */ + ["\u663A", "\u663A"], /* CJK Ideograph */ + ["\u663B", "\u663B"], /* CJK Ideograph */ + ["\u663C", "\u663C"], /* CJK Ideograph */ + ["\u663D", "\u663D"], /* CJK Ideograph */ + ["\u663E", "\u663E"], /* CJK Ideograph */ + ["\u663F", "\u663F"], /* CJK Ideograph */ + ["\u6640", "\u6640"], /* CJK Ideograph */ + ["\u6641", "\u6641"], /* CJK Ideograph */ + ["\u6642", "\u6642"], /* CJK Ideograph */ + ["\u6643", "\u6643"], /* CJK Ideograph */ + ["\u6644", "\u6644"], /* CJK Ideograph */ + ["\u6645", "\u6645"], /* CJK Ideograph */ + ["\u6646", "\u6646"], /* CJK Ideograph */ + ["\u6647", "\u6647"], /* CJK Ideograph */ + ["\u6648", "\u6648"], /* CJK Ideograph */ + ["\u6649", "\u6649"], /* CJK Ideograph */ + ["\u664A", "\u664A"], /* CJK Ideograph */ + ["\u664B", "\u664B"], /* CJK Ideograph */ + ["\u664C", "\u664C"], /* CJK Ideograph */ + ["\u664D", "\u664D"], /* CJK Ideograph */ + ["\u664E", "\u664E"], /* CJK Ideograph */ + ["\u664F", "\u664F"], /* CJK Ideograph */ + ["\u6650", "\u6650"], /* CJK Ideograph */ + ["\u6651", "\u6651"], /* CJK Ideograph */ + ["\u6652", "\u6652"], /* CJK Ideograph */ + ["\u6653", "\u6653"], /* CJK Ideograph */ + ["\u6654", "\u6654"], /* CJK Ideograph */ + ["\u6655", "\u6655"], /* CJK Ideograph */ + ["\u6656", "\u6656"], /* CJK Ideograph */ + ["\u6657", "\u6657"], /* CJK Ideograph */ + ["\u6658", "\u6658"], /* CJK Ideograph */ + ["\u6659", "\u6659"], /* CJK Ideograph */ + ["\u665A", "\u665A"], /* CJK Ideograph */ + ["\u665B", "\u665B"], /* CJK Ideograph */ + ["\u665C", "\u665C"], /* CJK Ideograph */ + ["\u665D", "\u665D"], /* CJK Ideograph */ + ["\u665E", "\u665E"], /* CJK Ideograph */ + ["\u665F", "\u665F"], /* CJK Ideograph */ + ["\u6660", "\u6660"], /* CJK Ideograph */ + ["\u6661", "\u6661"], /* CJK Ideograph */ + ["\u6662", "\u6662"], /* CJK Ideograph */ + ["\u6663", "\u6663"], /* CJK Ideograph */ + ["\u6664", "\u6664"], /* CJK Ideograph */ + ["\u6665", "\u6665"], /* CJK Ideograph */ + ["\u6666", "\u6666"], /* CJK Ideograph */ + ["\u6667", "\u6667"], /* CJK Ideograph */ + ["\u6668", "\u6668"], /* CJK Ideograph */ + ["\u6669", "\u6669"], /* CJK Ideograph */ + ["\u666A", "\u666A"], /* CJK Ideograph */ + ["\u666B", "\u666B"], /* CJK Ideograph */ + ["\u666C", "\u666C"], /* CJK Ideograph */ + ["\u666D", "\u666D"], /* CJK Ideograph */ + ["\u666E", "\u666E"], /* CJK Ideograph */ + ["\u666F", "\u666F"], /* CJK Ideograph */ + ["\u6670", "\u6670"], /* CJK Ideograph */ + ["\u6671", "\u6671"], /* CJK Ideograph */ + ["\u6672", "\u6672"], /* CJK Ideograph */ + ["\u6673", "\u6673"], /* CJK Ideograph */ + ["\u6674", "\u6674"], /* CJK Ideograph */ + ["\u6675", "\u6675"], /* CJK Ideograph */ + ["\u6676", "\u6676"], /* CJK Ideograph */ + ["\u6677", "\u6677"], /* CJK Ideograph */ + ["\u6678", "\u6678"], /* CJK Ideograph */ + ["\u6679", "\u6679"], /* CJK Ideograph */ + ["\u667A", "\u667A"], /* CJK Ideograph */ + ["\u667B", "\u667B"], /* CJK Ideograph */ + ["\u667C", "\u667C"], /* CJK Ideograph */ + ["\u667D", "\u667D"], /* CJK Ideograph */ + ["\u667E", "\u667E"], /* CJK Ideograph */ + ["\u667F", "\u667F"], /* CJK Ideograph */ + ["\u6680", "\u6680"], /* CJK Ideograph */ + ["\u6681", "\u6681"], /* CJK Ideograph */ + ["\u6682", "\u6682"], /* CJK Ideograph */ + ["\u6683", "\u6683"], /* CJK Ideograph */ + ["\u6684", "\u6684"], /* CJK Ideograph */ + ["\u6685", "\u6685"], /* CJK Ideograph */ + ["\u6686", "\u6686"], /* CJK Ideograph */ + ["\u6687", "\u6687"], /* CJK Ideograph */ + ["\u6688", "\u6688"], /* CJK Ideograph */ + ["\u6689", "\u6689"], /* CJK Ideograph */ + ["\u668A", "\u668A"], /* CJK Ideograph */ + ["\u668B", "\u668B"], /* CJK Ideograph */ + ["\u668C", "\u668C"], /* CJK Ideograph */ + ["\u668D", "\u668D"], /* CJK Ideograph */ + ["\u668E", "\u668E"], /* CJK Ideograph */ + ["\u668F", "\u668F"], /* CJK Ideograph */ + ["\u6690", "\u6690"], /* CJK Ideograph */ + ["\u6691", "\u6691"], /* CJK Ideograph */ + ["\u6692", "\u6692"], /* CJK Ideograph */ + ["\u6693", "\u6693"], /* CJK Ideograph */ + ["\u6694", "\u6694"], /* CJK Ideograph */ + ["\u6695", "\u6695"], /* CJK Ideograph */ + ["\u6696", "\u6696"], /* CJK Ideograph */ + ["\u6697", "\u6697"], /* CJK Ideograph */ + ["\u6698", "\u6698"], /* CJK Ideograph */ + ["\u6699", "\u6699"], /* CJK Ideograph */ + ["\u669A", "\u669A"], /* CJK Ideograph */ + ["\u669B", "\u669B"], /* CJK Ideograph */ + ["\u669C", "\u669C"], /* CJK Ideograph */ + ["\u669D", "\u669D"], /* CJK Ideograph */ + ["\u669E", "\u669E"], /* CJK Ideograph */ + ["\u669F", "\u669F"], /* CJK Ideograph */ + ["\u66A0", "\u66A0"], /* CJK Ideograph */ + ["\u66A1", "\u66A1"], /* CJK Ideograph */ + ["\u66A2", "\u66A2"], /* CJK Ideograph */ + ["\u66A3", "\u66A3"], /* CJK Ideograph */ + ["\u66A4", "\u66A4"], /* CJK Ideograph */ + ["\u66A5", "\u66A5"], /* CJK Ideograph */ + ["\u66A6", "\u66A6"], /* CJK Ideograph */ + ["\u66A7", "\u66A7"], /* CJK Ideograph */ + ["\u66A8", "\u66A8"], /* CJK Ideograph */ + ["\u66A9", "\u66A9"], /* CJK Ideograph */ + ["\u66AA", "\u66AA"], /* CJK Ideograph */ + ["\u66AB", "\u66AB"], /* CJK Ideograph */ + ["\u66AC", "\u66AC"], /* CJK Ideograph */ + ["\u66AD", "\u66AD"], /* CJK Ideograph */ + ["\u66AE", "\u66AE"], /* CJK Ideograph */ + ["\u66AF", "\u66AF"], /* CJK Ideograph */ + ["\u66B0", "\u66B0"], /* CJK Ideograph */ + ["\u66B1", "\u66B1"], /* CJK Ideograph */ + ["\u66B2", "\u66B2"], /* CJK Ideograph */ + ["\u66B3", "\u66B3"], /* CJK Ideograph */ + ["\u66B4", "\u66B4"], /* CJK Ideograph */ + ["\u66B5", "\u66B5"], /* CJK Ideograph */ + ["\u66B6", "\u66B6"], /* CJK Ideograph */ + ["\u66B7", "\u66B7"], /* CJK Ideograph */ + ["\u66B8", "\u66B8"], /* CJK Ideograph */ + ["\u66B9", "\u66B9"], /* CJK Ideograph */ + ["\u66BA", "\u66BA"], /* CJK Ideograph */ + ["\u66BB", "\u66BB"], /* CJK Ideograph */ + ["\u66BC", "\u66BC"], /* CJK Ideograph */ + ["\u66BD", "\u66BD"], /* CJK Ideograph */ + ["\u66BE", "\u66BE"], /* CJK Ideograph */ + ["\u66BF", "\u66BF"], /* CJK Ideograph */ + ["\u66C0", "\u66C0"], /* CJK Ideograph */ + ["\u66C1", "\u66C1"], /* CJK Ideograph */ + ["\u66C2", "\u66C2"], /* CJK Ideograph */ + ["\u66C3", "\u66C3"], /* CJK Ideograph */ + ["\u66C4", "\u66C4"], /* CJK Ideograph */ + ["\u66C5", "\u66C5"], /* CJK Ideograph */ + ["\u66C6", "\u66C6"], /* CJK Ideograph */ + ["\u66C7", "\u66C7"], /* CJK Ideograph */ + ["\u66C8", "\u66C8"], /* CJK Ideograph */ + ["\u66C9", "\u66C9"], /* CJK Ideograph */ + ["\u66CA", "\u66CA"], /* CJK Ideograph */ + ["\u66CB", "\u66CB"], /* CJK Ideograph */ + ["\u66CC", "\u66CC"], /* CJK Ideograph */ + ["\u66CD", "\u66CD"], /* CJK Ideograph */ + ["\u66CE", "\u66CE"], /* CJK Ideograph */ + ["\u66CF", "\u66CF"], /* CJK Ideograph */ + ["\u66D0", "\u66D0"], /* CJK Ideograph */ + ["\u66D1", "\u66D1"], /* CJK Ideograph */ + ["\u66D2", "\u66D2"], /* CJK Ideograph */ + ["\u66D3", "\u66D3"], /* CJK Ideograph */ + ["\u66D4", "\u66D4"], /* CJK Ideograph */ + ["\u66D5", "\u66D5"], /* CJK Ideograph */ + ["\u66D6", "\u66D6"], /* CJK Ideograph */ + ["\u66D7", "\u66D7"], /* CJK Ideograph */ + ["\u66D8", "\u66D8"], /* CJK Ideograph */ + ["\u66D9", "\u66D9"], /* CJK Ideograph */ + ["\u66DA", "\u66DA"], /* CJK Ideograph */ + ["\u66DB", "\u66DB"], /* CJK Ideograph */ + ["\u66DC", "\u66DC"], /* CJK Ideograph */ + ["\u66DD", "\u66DD"], /* CJK Ideograph */ + ["\u66DE", "\u66DE"], /* CJK Ideograph */ + ["\u66DF", "\u66DF"], /* CJK Ideograph */ + ["\u66E0", "\u66E0"], /* CJK Ideograph */ + ["\u66E1", "\u66E1"], /* CJK Ideograph */ + ["\u66E2", "\u66E2"], /* CJK Ideograph */ + ["\u66E3", "\u66E3"], /* CJK Ideograph */ + ["\u66E4", "\u66E4"], /* CJK Ideograph */ + ["\u66E5", "\u66E5"], /* CJK Ideograph */ + ["\u66E6", "\u66E6"], /* CJK Ideograph */ + ["\u66E7", "\u66E7"], /* CJK Ideograph */ + ["\u66E8", "\u66E8"], /* CJK Ideograph */ + ["\u66E9", "\u66E9"], /* CJK Ideograph */ + ["\u66EA", "\u66EA"], /* CJK Ideograph */ + ["\u66EB", "\u66EB"], /* CJK Ideograph */ + ["\u66EC", "\u66EC"], /* CJK Ideograph */ + ["\u66ED", "\u66ED"], /* CJK Ideograph */ + ["\u66EE", "\u66EE"], /* CJK Ideograph */ + ["\u66EF", "\u66EF"], /* CJK Ideograph */ + ["\u66F0", "\u66F0"], /* CJK Ideograph */ + ["\u66F1", "\u66F1"], /* CJK Ideograph */ + ["\u66F2", "\u66F2"], /* CJK Ideograph */ + ["\u66F3", "\u66F3"], /* CJK Ideograph */ + ["\u66F4", "\u66F4"], /* CJK Ideograph */ + ["\u66F5", "\u66F5"], /* CJK Ideograph */ + ["\u66F6", "\u66F6"], /* CJK Ideograph */ + ["\u66F7", "\u66F7"], /* CJK Ideograph */ + ["\u66F8", "\u66F8"], /* CJK Ideograph */ + ["\u66F9", "\u66F9"], /* CJK Ideograph */ + ["\u66FA", "\u66FA"], /* CJK Ideograph */ + ["\u66FB", "\u66FB"], /* CJK Ideograph */ + ["\u66FC", "\u66FC"], /* CJK Ideograph */ + ["\u66FD", "\u66FD"], /* CJK Ideograph */ + ["\u66FE", "\u66FE"], /* CJK Ideograph */ + ["\u66FF", "\u66FF"], /* CJK Ideograph */ + ["\u6700", "\u6700"], /* CJK Ideograph */ + ["\u6701", "\u6701"], /* CJK Ideograph */ + ["\u6702", "\u6702"], /* CJK Ideograph */ + ["\u6703", "\u6703"], /* CJK Ideograph */ + ["\u6704", "\u6704"], /* CJK Ideograph */ + ["\u6705", "\u6705"], /* CJK Ideograph */ + ["\u6706", "\u6706"], /* CJK Ideograph */ + ["\u6707", "\u6707"], /* CJK Ideograph */ + ["\u6708", "\u6708"], /* CJK Ideograph */ + ["\u6709", "\u6709"], /* CJK Ideograph */ + ["\u670A", "\u670A"], /* CJK Ideograph */ + ["\u670B", "\u670B"], /* CJK Ideograph */ + ["\u670C", "\u670C"], /* CJK Ideograph */ + ["\u670D", "\u670D"], /* CJK Ideograph */ + ["\u670E", "\u670E"], /* CJK Ideograph */ + ["\u670F", "\u670F"], /* CJK Ideograph */ + ["\u6710", "\u6710"], /* CJK Ideograph */ + ["\u6711", "\u6711"], /* CJK Ideograph */ + ["\u6712", "\u6712"], /* CJK Ideograph */ + ["\u6713", "\u6713"], /* CJK Ideograph */ + ["\u6714", "\u6714"], /* CJK Ideograph */ + ["\u6715", "\u6715"], /* CJK Ideograph */ + ["\u6716", "\u6716"], /* CJK Ideograph */ + ["\u6717", "\u6717"], /* CJK Ideograph */ + ["\u6718", "\u6718"], /* CJK Ideograph */ + ["\u6719", "\u6719"], /* CJK Ideograph */ + ["\u671A", "\u671A"], /* CJK Ideograph */ + ["\u671B", "\u671B"], /* CJK Ideograph */ + ["\u671C", "\u671C"], /* CJK Ideograph */ + ["\u671D", "\u671D"], /* CJK Ideograph */ + ["\u671E", "\u671E"], /* CJK Ideograph */ + ["\u671F", "\u671F"], /* CJK Ideograph */ + ["\u6720", "\u6720"], /* CJK Ideograph */ + ["\u6721", "\u6721"], /* CJK Ideograph */ + ["\u6722", "\u6722"], /* CJK Ideograph */ + ["\u6723", "\u6723"], /* CJK Ideograph */ + ["\u6724", "\u6724"], /* CJK Ideograph */ + ["\u6725", "\u6725"], /* CJK Ideograph */ + ["\u6726", "\u6726"], /* CJK Ideograph */ + ["\u6727", "\u6727"], /* CJK Ideograph */ + ["\u6728", "\u6728"], /* CJK Ideograph */ + ["\u6729", "\u6729"], /* CJK Ideograph */ + ["\u672A", "\u672A"], /* CJK Ideograph */ + ["\u672B", "\u672B"], /* CJK Ideograph */ + ["\u672C", "\u672C"], /* CJK Ideograph */ + ["\u672D", "\u672D"], /* CJK Ideograph */ + ["\u672E", "\u672E"], /* CJK Ideograph */ + ["\u672F", "\u672F"], /* CJK Ideograph */ + ["\u6730", "\u6730"], /* CJK Ideograph */ + ["\u6731", "\u6731"], /* CJK Ideograph */ + ["\u6732", "\u6732"], /* CJK Ideograph */ + ["\u6733", "\u6733"], /* CJK Ideograph */ + ["\u6734", "\u6734"], /* CJK Ideograph */ + ["\u6735", "\u6735"], /* CJK Ideograph */ + ["\u6736", "\u6736"], /* CJK Ideograph */ + ["\u6737", "\u6737"], /* CJK Ideograph */ + ["\u6738", "\u6738"], /* CJK Ideograph */ + ["\u6739", "\u6739"], /* CJK Ideograph */ + ["\u673A", "\u673A"], /* CJK Ideograph */ + ["\u673B", "\u673B"], /* CJK Ideograph */ + ["\u673C", "\u673C"], /* CJK Ideograph */ + ["\u673D", "\u673D"], /* CJK Ideograph */ + ["\u673E", "\u673E"], /* CJK Ideograph */ + ["\u673F", "\u673F"], /* CJK Ideograph */ + ["\u6740", "\u6740"], /* CJK Ideograph */ + ["\u6741", "\u6741"], /* CJK Ideograph */ + ["\u6742", "\u6742"], /* CJK Ideograph */ + ["\u6743", "\u6743"], /* CJK Ideograph */ + ["\u6744", "\u6744"], /* CJK Ideograph */ + ["\u6745", "\u6745"], /* CJK Ideograph */ + ["\u6746", "\u6746"], /* CJK Ideograph */ + ["\u6747", "\u6747"], /* CJK Ideograph */ + ["\u6748", "\u6748"], /* CJK Ideograph */ + ["\u6749", "\u6749"], /* CJK Ideograph */ + ["\u674A", "\u674A"], /* CJK Ideograph */ + ["\u674B", "\u674B"], /* CJK Ideograph */ + ["\u674C", "\u674C"], /* CJK Ideograph */ + ["\u674D", "\u674D"], /* CJK Ideograph */ + ["\u674E", "\u674E"], /* CJK Ideograph */ + ["\u674F", "\u674F"], /* CJK Ideograph */ + ["\u6750", "\u6750"], /* CJK Ideograph */ + ["\u6751", "\u6751"], /* CJK Ideograph */ + ["\u6752", "\u6752"], /* CJK Ideograph */ + ["\u6753", "\u6753"], /* CJK Ideograph */ + ["\u6754", "\u6754"], /* CJK Ideograph */ + ["\u6755", "\u6755"], /* CJK Ideograph */ + ["\u6756", "\u6756"], /* CJK Ideograph */ + ["\u6757", "\u6757"], /* CJK Ideograph */ + ["\u6758", "\u6758"], /* CJK Ideograph */ + ["\u6759", "\u6759"], /* CJK Ideograph */ + ["\u675A", "\u675A"], /* CJK Ideograph */ + ["\u675B", "\u675B"], /* CJK Ideograph */ + ["\u675C", "\u675C"], /* CJK Ideograph */ + ["\u675D", "\u675D"], /* CJK Ideograph */ + ["\u675E", "\u675E"], /* CJK Ideograph */ + ["\u675F", "\u675F"], /* CJK Ideograph */ + ["\u6760", "\u6760"], /* CJK Ideograph */ + ["\u6761", "\u6761"], /* CJK Ideograph */ + ["\u6762", "\u6762"], /* CJK Ideograph */ + ["\u6763", "\u6763"], /* CJK Ideograph */ + ["\u6764", "\u6764"], /* CJK Ideograph */ + ["\u6765", "\u6765"], /* CJK Ideograph */ + ["\u6766", "\u6766"], /* CJK Ideograph */ + ["\u6767", "\u6767"], /* CJK Ideograph */ + ["\u6768", "\u6768"], /* CJK Ideograph */ + ["\u6769", "\u6769"], /* CJK Ideograph */ + ["\u676A", "\u676A"], /* CJK Ideograph */ + ["\u676B", "\u676B"], /* CJK Ideograph */ + ["\u676C", "\u676C"], /* CJK Ideograph */ + ["\u676D", "\u676D"], /* CJK Ideograph */ + ["\u676E", "\u676E"], /* CJK Ideograph */ + ["\u676F", "\u676F"], /* CJK Ideograph */ + ["\u6770", "\u6770"], /* CJK Ideograph */ + ["\u6771", "\u6771"], /* CJK Ideograph */ + ["\u6772", "\u6772"], /* CJK Ideograph */ + ["\u6773", "\u6773"], /* CJK Ideograph */ + ["\u6774", "\u6774"], /* CJK Ideograph */ + ["\u6775", "\u6775"], /* CJK Ideograph */ + ["\u6776", "\u6776"], /* CJK Ideograph */ + ["\u6777", "\u6777"], /* CJK Ideograph */ + ["\u6778", "\u6778"], /* CJK Ideograph */ + ["\u6779", "\u6779"], /* CJK Ideograph */ + ["\u677A", "\u677A"], /* CJK Ideograph */ + ["\u677B", "\u677B"], /* CJK Ideograph */ + ["\u677C", "\u677C"], /* CJK Ideograph */ + ["\u677D", "\u677D"], /* CJK Ideograph */ + ["\u677E", "\u677E"], /* CJK Ideograph */ + ["\u677F", "\u677F"], /* CJK Ideograph */ + ["\u6780", "\u6780"], /* CJK Ideograph */ + ["\u6781", "\u6781"], /* CJK Ideograph */ + ["\u6782", "\u6782"], /* CJK Ideograph */ + ["\u6783", "\u6783"], /* CJK Ideograph */ + ["\u6784", "\u6784"], /* CJK Ideograph */ + ["\u6785", "\u6785"], /* CJK Ideograph */ + ["\u6786", "\u6786"], /* CJK Ideograph */ + ["\u6787", "\u6787"], /* CJK Ideograph */ + ["\u6788", "\u6788"], /* CJK Ideograph */ + ["\u6789", "\u6789"], /* CJK Ideograph */ + ["\u678A", "\u678A"], /* CJK Ideograph */ + ["\u678B", "\u678B"], /* CJK Ideograph */ + ["\u678C", "\u678C"], /* CJK Ideograph */ + ["\u678D", "\u678D"], /* CJK Ideograph */ + ["\u678E", "\u678E"], /* CJK Ideograph */ + ["\u678F", "\u678F"], /* CJK Ideograph */ + ["\u6790", "\u6790"], /* CJK Ideograph */ + ["\u6791", "\u6791"], /* CJK Ideograph */ + ["\u6792", "\u6792"], /* CJK Ideograph */ + ["\u6793", "\u6793"], /* CJK Ideograph */ + ["\u6794", "\u6794"], /* CJK Ideograph */ + ["\u6795", "\u6795"], /* CJK Ideograph */ + ["\u6796", "\u6796"], /* CJK Ideograph */ + ["\u6797", "\u6797"], /* CJK Ideograph */ + ["\u6798", "\u6798"], /* CJK Ideograph */ + ["\u6799", "\u6799"], /* CJK Ideograph */ + ["\u679A", "\u679A"], /* CJK Ideograph */ + ["\u679B", "\u679B"], /* CJK Ideograph */ + ["\u679C", "\u679C"], /* CJK Ideograph */ + ["\u679D", "\u679D"], /* CJK Ideograph */ + ["\u679E", "\u679E"], /* CJK Ideograph */ + ["\u679F", "\u679F"], /* CJK Ideograph */ + ["\u67A0", "\u67A0"], /* CJK Ideograph */ + ["\u67A1", "\u67A1"], /* CJK Ideograph */ + ["\u67A2", "\u67A2"], /* CJK Ideograph */ + ["\u67A3", "\u67A3"], /* CJK Ideograph */ + ["\u67A4", "\u67A4"], /* CJK Ideograph */ + ["\u67A5", "\u67A5"], /* CJK Ideograph */ + ["\u67A6", "\u67A6"], /* CJK Ideograph */ + ["\u67A7", "\u67A7"], /* CJK Ideograph */ + ["\u67A8", "\u67A8"], /* CJK Ideograph */ + ["\u67A9", "\u67A9"], /* CJK Ideograph */ + ["\u67AA", "\u67AA"], /* CJK Ideograph */ + ["\u67AB", "\u67AB"], /* CJK Ideograph */ + ["\u67AC", "\u67AC"], /* CJK Ideograph */ + ["\u67AD", "\u67AD"], /* CJK Ideograph */ + ["\u67AE", "\u67AE"], /* CJK Ideograph */ + ["\u67AF", "\u67AF"], /* CJK Ideograph */ + ["\u67B0", "\u67B0"], /* CJK Ideograph */ + ["\u67B1", "\u67B1"], /* CJK Ideograph */ + ["\u67B2", "\u67B2"], /* CJK Ideograph */ + ["\u67B3", "\u67B3"], /* CJK Ideograph */ + ["\u67B4", "\u67B4"], /* CJK Ideograph */ + ["\u67B5", "\u67B5"], /* CJK Ideograph */ + ["\u67B6", "\u67B6"], /* CJK Ideograph */ + ["\u67B7", "\u67B7"], /* CJK Ideograph */ + ["\u67B8", "\u67B8"], /* CJK Ideograph */ + ["\u67B9", "\u67B9"], /* CJK Ideograph */ + ["\u67BA", "\u67BA"], /* CJK Ideograph */ + ["\u67BB", "\u67BB"], /* CJK Ideograph */ + ["\u67BC", "\u67BC"], /* CJK Ideograph */ + ["\u67BD", "\u67BD"], /* CJK Ideograph */ + ["\u67BE", "\u67BE"], /* CJK Ideograph */ + ["\u67BF", "\u67BF"], /* CJK Ideograph */ + ["\u67C0", "\u67C0"], /* CJK Ideograph */ + ["\u67C1", "\u67C1"], /* CJK Ideograph */ + ["\u67C2", "\u67C2"], /* CJK Ideograph */ + ["\u67C3", "\u67C3"], /* CJK Ideograph */ + ["\u67C4", "\u67C4"], /* CJK Ideograph */ + ["\u67C5", "\u67C5"], /* CJK Ideograph */ + ["\u67C6", "\u67C6"], /* CJK Ideograph */ + ["\u67C7", "\u67C7"], /* CJK Ideograph */ + ["\u67C8", "\u67C8"], /* CJK Ideograph */ + ["\u67C9", "\u67C9"], /* CJK Ideograph */ + ["\u67CA", "\u67CA"], /* CJK Ideograph */ + ["\u67CB", "\u67CB"], /* CJK Ideograph */ + ["\u67CC", "\u67CC"], /* CJK Ideograph */ + ["\u67CD", "\u67CD"], /* CJK Ideograph */ + ["\u67CE", "\u67CE"], /* CJK Ideograph */ + ["\u67CF", "\u67CF"], /* CJK Ideograph */ + ["\u67D0", "\u67D0"], /* CJK Ideograph */ + ["\u67D1", "\u67D1"], /* CJK Ideograph */ + ["\u67D2", "\u67D2"], /* CJK Ideograph */ + ["\u67D3", "\u67D3"], /* CJK Ideograph */ + ["\u67D4", "\u67D4"], /* CJK Ideograph */ + ["\u67D5", "\u67D5"], /* CJK Ideograph */ + ["\u67D6", "\u67D6"], /* CJK Ideograph */ + ["\u67D7", "\u67D7"], /* CJK Ideograph */ + ["\u67D8", "\u67D8"], /* CJK Ideograph */ + ["\u67D9", "\u67D9"], /* CJK Ideograph */ + ["\u67DA", "\u67DA"], /* CJK Ideograph */ + ["\u67DB", "\u67DB"], /* CJK Ideograph */ + ["\u67DC", "\u67DC"], /* CJK Ideograph */ + ["\u67DD", "\u67DD"], /* CJK Ideograph */ + ["\u67DE", "\u67DE"], /* CJK Ideograph */ + ["\u67DF", "\u67DF"], /* CJK Ideograph */ + ["\u67E0", "\u67E0"], /* CJK Ideograph */ + ["\u67E1", "\u67E1"], /* CJK Ideograph */ + ["\u67E2", "\u67E2"], /* CJK Ideograph */ + ["\u67E3", "\u67E3"], /* CJK Ideograph */ + ["\u67E4", "\u67E4"], /* CJK Ideograph */ + ["\u67E5", "\u67E5"], /* CJK Ideograph */ + ["\u67E6", "\u67E6"], /* CJK Ideograph */ + ["\u67E7", "\u67E7"], /* CJK Ideograph */ + ["\u67E8", "\u67E8"], /* CJK Ideograph */ + ["\u67E9", "\u67E9"], /* CJK Ideograph */ + ["\u67EA", "\u67EA"], /* CJK Ideograph */ + ["\u67EB", "\u67EB"], /* CJK Ideograph */ + ["\u67EC", "\u67EC"], /* CJK Ideograph */ + ["\u67ED", "\u67ED"], /* CJK Ideograph */ + ["\u67EE", "\u67EE"], /* CJK Ideograph */ + ["\u67EF", "\u67EF"], /* CJK Ideograph */ + ["\u67F0", "\u67F0"], /* CJK Ideograph */ + ["\u67F1", "\u67F1"], /* CJK Ideograph */ + ["\u67F2", "\u67F2"], /* CJK Ideograph */ + ["\u67F3", "\u67F3"], /* CJK Ideograph */ + ["\u67F4", "\u67F4"], /* CJK Ideograph */ + ["\u67F5", "\u67F5"], /* CJK Ideograph */ + ["\u67F6", "\u67F6"], /* CJK Ideograph */ + ["\u67F7", "\u67F7"], /* CJK Ideograph */ + ["\u67F8", "\u67F8"], /* CJK Ideograph */ + ["\u67F9", "\u67F9"], /* CJK Ideograph */ + ["\u67FA", "\u67FA"], /* CJK Ideograph */ + ["\u67FB", "\u67FB"], /* CJK Ideograph */ + ["\u67FC", "\u67FC"], /* CJK Ideograph */ + ["\u67FD", "\u67FD"], /* CJK Ideograph */ + ["\u67FE", "\u67FE"], /* CJK Ideograph */ + ["\u67FF", "\u67FF"], /* CJK Ideograph */ + ["\u6800", "\u6800"], /* CJK Ideograph */ + ["\u6801", "\u6801"], /* CJK Ideograph */ + ["\u6802", "\u6802"], /* CJK Ideograph */ + ["\u6803", "\u6803"], /* CJK Ideograph */ + ["\u6804", "\u6804"], /* CJK Ideograph */ + ["\u6805", "\u6805"], /* CJK Ideograph */ + ["\u6806", "\u6806"], /* CJK Ideograph */ + ["\u6807", "\u6807"], /* CJK Ideograph */ + ["\u6808", "\u6808"], /* CJK Ideograph */ + ["\u6809", "\u6809"], /* CJK Ideograph */ + ["\u680A", "\u680A"], /* CJK Ideograph */ + ["\u680B", "\u680B"], /* CJK Ideograph */ + ["\u680C", "\u680C"], /* CJK Ideograph */ + ["\u680D", "\u680D"], /* CJK Ideograph */ + ["\u680E", "\u680E"], /* CJK Ideograph */ + ["\u680F", "\u680F"], /* CJK Ideograph */ + ["\u6810", "\u6810"], /* CJK Ideograph */ + ["\u6811", "\u6811"], /* CJK Ideograph */ + ["\u6812", "\u6812"], /* CJK Ideograph */ + ["\u6813", "\u6813"], /* CJK Ideograph */ + ["\u6814", "\u6814"], /* CJK Ideograph */ + ["\u6815", "\u6815"], /* CJK Ideograph */ + ["\u6816", "\u6816"], /* CJK Ideograph */ + ["\u6817", "\u6817"], /* CJK Ideograph */ + ["\u6818", "\u6818"], /* CJK Ideograph */ + ["\u6819", "\u6819"], /* CJK Ideograph */ + ["\u681A", "\u681A"], /* CJK Ideograph */ + ["\u681B", "\u681B"], /* CJK Ideograph */ + ["\u681C", "\u681C"], /* CJK Ideograph */ + ["\u681D", "\u681D"], /* CJK Ideograph */ + ["\u681E", "\u681E"], /* CJK Ideograph */ + ["\u681F", "\u681F"], /* CJK Ideograph */ + ["\u6820", "\u6820"], /* CJK Ideograph */ + ["\u6821", "\u6821"], /* CJK Ideograph */ + ["\u6822", "\u6822"], /* CJK Ideograph */ + ["\u6823", "\u6823"], /* CJK Ideograph */ + ["\u6824", "\u6824"], /* CJK Ideograph */ + ["\u6825", "\u6825"], /* CJK Ideograph */ + ["\u6826", "\u6826"], /* CJK Ideograph */ + ["\u6827", "\u6827"], /* CJK Ideograph */ + ["\u6828", "\u6828"], /* CJK Ideograph */ + ["\u6829", "\u6829"], /* CJK Ideograph */ + ["\u682A", "\u682A"], /* CJK Ideograph */ + ["\u682B", "\u682B"], /* CJK Ideograph */ + ["\u682C", "\u682C"], /* CJK Ideograph */ + ["\u682D", "\u682D"], /* CJK Ideograph */ + ["\u682E", "\u682E"], /* CJK Ideograph */ + ["\u682F", "\u682F"], /* CJK Ideograph */ + ["\u6830", "\u6830"], /* CJK Ideograph */ + ["\u6831", "\u6831"], /* CJK Ideograph */ + ["\u6832", "\u6832"], /* CJK Ideograph */ + ["\u6833", "\u6833"], /* CJK Ideograph */ + ["\u6834", "\u6834"], /* CJK Ideograph */ + ["\u6835", "\u6835"], /* CJK Ideograph */ + ["\u6836", "\u6836"], /* CJK Ideograph */ + ["\u6837", "\u6837"], /* CJK Ideograph */ + ["\u6838", "\u6838"], /* CJK Ideograph */ + ["\u6839", "\u6839"], /* CJK Ideograph */ + ["\u683A", "\u683A"], /* CJK Ideograph */ + ["\u683B", "\u683B"], /* CJK Ideograph */ + ["\u683C", "\u683C"], /* CJK Ideograph */ + ["\u683D", "\u683D"], /* CJK Ideograph */ + ["\u683E", "\u683E"], /* CJK Ideograph */ + ["\u683F", "\u683F"], /* CJK Ideograph */ + ["\u6840", "\u6840"], /* CJK Ideograph */ + ["\u6841", "\u6841"], /* CJK Ideograph */ + ["\u6842", "\u6842"], /* CJK Ideograph */ + ["\u6843", "\u6843"], /* CJK Ideograph */ + ["\u6844", "\u6844"], /* CJK Ideograph */ + ["\u6845", "\u6845"], /* CJK Ideograph */ + ["\u6846", "\u6846"], /* CJK Ideograph */ + ["\u6847", "\u6847"], /* CJK Ideograph */ + ["\u6848", "\u6848"], /* CJK Ideograph */ + ["\u6849", "\u6849"], /* CJK Ideograph */ + ["\u684A", "\u684A"], /* CJK Ideograph */ + ["\u684B", "\u684B"], /* CJK Ideograph */ + ["\u684C", "\u684C"], /* CJK Ideograph */ + ["\u684D", "\u684D"], /* CJK Ideograph */ + ["\u684E", "\u684E"], /* CJK Ideograph */ + ["\u684F", "\u684F"], /* CJK Ideograph */ + ["\u6850", "\u6850"], /* CJK Ideograph */ + ["\u6851", "\u6851"], /* CJK Ideograph */ + ["\u6852", "\u6852"], /* CJK Ideograph */ + ["\u6853", "\u6853"], /* CJK Ideograph */ + ["\u6854", "\u6854"], /* CJK Ideograph */ + ["\u6855", "\u6855"], /* CJK Ideograph */ + ["\u6856", "\u6856"], /* CJK Ideograph */ + ["\u6857", "\u6857"], /* CJK Ideograph */ + ["\u6858", "\u6858"], /* CJK Ideograph */ + ["\u6859", "\u6859"], /* CJK Ideograph */ + ["\u685A", "\u685A"], /* CJK Ideograph */ + ["\u685B", "\u685B"], /* CJK Ideograph */ + ["\u685C", "\u685C"], /* CJK Ideograph */ + ["\u685D", "\u685D"], /* CJK Ideograph */ + ["\u685E", "\u685E"], /* CJK Ideograph */ + ["\u685F", "\u685F"], /* CJK Ideograph */ + ["\u6860", "\u6860"], /* CJK Ideograph */ + ["\u6861", "\u6861"], /* CJK Ideograph */ + ["\u6862", "\u6862"], /* CJK Ideograph */ + ["\u6863", "\u6863"], /* CJK Ideograph */ + ["\u6864", "\u6864"], /* CJK Ideograph */ + ["\u6865", "\u6865"], /* CJK Ideograph */ + ["\u6866", "\u6866"], /* CJK Ideograph */ + ["\u6867", "\u6867"], /* CJK Ideograph */ + ["\u6868", "\u6868"], /* CJK Ideograph */ + ["\u6869", "\u6869"], /* CJK Ideograph */ + ["\u686A", "\u686A"], /* CJK Ideograph */ + ["\u686B", "\u686B"], /* CJK Ideograph */ + ["\u686C", "\u686C"], /* CJK Ideograph */ + ["\u686D", "\u686D"], /* CJK Ideograph */ + ["\u686E", "\u686E"], /* CJK Ideograph */ + ["\u686F", "\u686F"], /* CJK Ideograph */ + ["\u6870", "\u6870"], /* CJK Ideograph */ + ["\u6871", "\u6871"], /* CJK Ideograph */ + ["\u6872", "\u6872"], /* CJK Ideograph */ + ["\u6873", "\u6873"], /* CJK Ideograph */ + ["\u6874", "\u6874"], /* CJK Ideograph */ + ["\u6875", "\u6875"], /* CJK Ideograph */ + ["\u6876", "\u6876"], /* CJK Ideograph */ + ["\u6877", "\u6877"], /* CJK Ideograph */ + ["\u6878", "\u6878"], /* CJK Ideograph */ + ["\u6879", "\u6879"], /* CJK Ideograph */ + ["\u687A", "\u687A"], /* CJK Ideograph */ + ["\u687B", "\u687B"], /* CJK Ideograph */ + ["\u687C", "\u687C"], /* CJK Ideograph */ + ["\u687D", "\u687D"], /* CJK Ideograph */ + ["\u687E", "\u687E"], /* CJK Ideograph */ + ["\u687F", "\u687F"], /* CJK Ideograph */ + ["\u6880", "\u6880"], /* CJK Ideograph */ + ["\u6881", "\u6881"], /* CJK Ideograph */ + ["\u6882", "\u6882"], /* CJK Ideograph */ + ["\u6883", "\u6883"], /* CJK Ideograph */ + ["\u6884", "\u6884"], /* CJK Ideograph */ + ["\u6885", "\u6885"], /* CJK Ideograph */ + ["\u6886", "\u6886"], /* CJK Ideograph */ + ["\u6887", "\u6887"], /* CJK Ideograph */ + ["\u6888", "\u6888"], /* CJK Ideograph */ + ["\u6889", "\u6889"], /* CJK Ideograph */ + ["\u688A", "\u688A"], /* CJK Ideograph */ + ["\u688B", "\u688B"], /* CJK Ideograph */ + ["\u688C", "\u688C"], /* CJK Ideograph */ + ["\u688D", "\u688D"], /* CJK Ideograph */ + ["\u688E", "\u688E"], /* CJK Ideograph */ + ["\u688F", "\u688F"], /* CJK Ideograph */ + ["\u6890", "\u6890"], /* CJK Ideograph */ + ["\u6891", "\u6891"], /* CJK Ideograph */ + ["\u6892", "\u6892"], /* CJK Ideograph */ + ["\u6893", "\u6893"], /* CJK Ideograph */ + ["\u6894", "\u6894"], /* CJK Ideograph */ + ["\u6895", "\u6895"], /* CJK Ideograph */ + ["\u6896", "\u6896"], /* CJK Ideograph */ + ["\u6897", "\u6897"], /* CJK Ideograph */ + ["\u6898", "\u6898"], /* CJK Ideograph */ + ["\u6899", "\u6899"], /* CJK Ideograph */ + ["\u689A", "\u689A"], /* CJK Ideograph */ + ["\u689B", "\u689B"], /* CJK Ideograph */ + ["\u689C", "\u689C"], /* CJK Ideograph */ + ["\u689D", "\u689D"], /* CJK Ideograph */ + ["\u689E", "\u689E"], /* CJK Ideograph */ + ["\u689F", "\u689F"], /* CJK Ideograph */ + ["\u68A0", "\u68A0"], /* CJK Ideograph */ + ["\u68A1", "\u68A1"], /* CJK Ideograph */ + ["\u68A2", "\u68A2"], /* CJK Ideograph */ + ["\u68A3", "\u68A3"], /* CJK Ideograph */ + ["\u68A4", "\u68A4"], /* CJK Ideograph */ + ["\u68A5", "\u68A5"], /* CJK Ideograph */ + ["\u68A6", "\u68A6"], /* CJK Ideograph */ + ["\u68A7", "\u68A7"], /* CJK Ideograph */ + ["\u68A8", "\u68A8"], /* CJK Ideograph */ + ["\u68A9", "\u68A9"], /* CJK Ideograph */ + ["\u68AA", "\u68AA"], /* CJK Ideograph */ + ["\u68AB", "\u68AB"], /* CJK Ideograph */ + ["\u68AC", "\u68AC"], /* CJK Ideograph */ + ["\u68AD", "\u68AD"], /* CJK Ideograph */ + ["\u68AE", "\u68AE"], /* CJK Ideograph */ + ["\u68AF", "\u68AF"], /* CJK Ideograph */ + ["\u68B0", "\u68B0"], /* CJK Ideograph */ + ["\u68B1", "\u68B1"], /* CJK Ideograph */ + ["\u68B2", "\u68B2"], /* CJK Ideograph */ + ["\u68B3", "\u68B3"], /* CJK Ideograph */ + ["\u68B4", "\u68B4"], /* CJK Ideograph */ + ["\u68B5", "\u68B5"], /* CJK Ideograph */ + ["\u68B6", "\u68B6"], /* CJK Ideograph */ + ["\u68B7", "\u68B7"], /* CJK Ideograph */ + ["\u68B8", "\u68B8"], /* CJK Ideograph */ + ["\u68B9", "\u68B9"], /* CJK Ideograph */ + ["\u68BA", "\u68BA"], /* CJK Ideograph */ + ["\u68BB", "\u68BB"], /* CJK Ideograph */ + ["\u68BC", "\u68BC"], /* CJK Ideograph */ + ["\u68BD", "\u68BD"], /* CJK Ideograph */ + ["\u68BE", "\u68BE"], /* CJK Ideograph */ + ["\u68BF", "\u68BF"], /* CJK Ideograph */ + ["\u68C0", "\u68C0"], /* CJK Ideograph */ + ["\u68C1", "\u68C1"], /* CJK Ideograph */ + ["\u68C2", "\u68C2"], /* CJK Ideograph */ + ["\u68C3", "\u68C3"], /* CJK Ideograph */ + ["\u68C4", "\u68C4"], /* CJK Ideograph */ + ["\u68C5", "\u68C5"], /* CJK Ideograph */ + ["\u68C6", "\u68C6"], /* CJK Ideograph */ + ["\u68C7", "\u68C7"], /* CJK Ideograph */ + ["\u68C8", "\u68C8"], /* CJK Ideograph */ + ["\u68C9", "\u68C9"], /* CJK Ideograph */ + ["\u68CA", "\u68CA"], /* CJK Ideograph */ + ["\u68CB", "\u68CB"], /* CJK Ideograph */ + ["\u68CC", "\u68CC"], /* CJK Ideograph */ + ["\u68CD", "\u68CD"], /* CJK Ideograph */ + ["\u68CE", "\u68CE"], /* CJK Ideograph */ + ["\u68CF", "\u68CF"], /* CJK Ideograph */ + ["\u68D0", "\u68D0"], /* CJK Ideograph */ + ["\u68D1", "\u68D1"], /* CJK Ideograph */ + ["\u68D2", "\u68D2"], /* CJK Ideograph */ + ["\u68D3", "\u68D3"], /* CJK Ideograph */ + ["\u68D4", "\u68D4"], /* CJK Ideograph */ + ["\u68D5", "\u68D5"], /* CJK Ideograph */ + ["\u68D6", "\u68D6"], /* CJK Ideograph */ + ["\u68D7", "\u68D7"], /* CJK Ideograph */ + ["\u68D8", "\u68D8"], /* CJK Ideograph */ + ["\u68D9", "\u68D9"], /* CJK Ideograph */ + ["\u68DA", "\u68DA"], /* CJK Ideograph */ + ["\u68DB", "\u68DB"], /* CJK Ideograph */ + ["\u68DC", "\u68DC"], /* CJK Ideograph */ + ["\u68DD", "\u68DD"], /* CJK Ideograph */ + ["\u68DE", "\u68DE"], /* CJK Ideograph */ + ["\u68DF", "\u68DF"], /* CJK Ideograph */ + ["\u68E0", "\u68E0"], /* CJK Ideograph */ + ["\u68E1", "\u68E1"], /* CJK Ideograph */ + ["\u68E2", "\u68E2"], /* CJK Ideograph */ + ["\u68E3", "\u68E3"], /* CJK Ideograph */ + ["\u68E4", "\u68E4"], /* CJK Ideograph */ + ["\u68E5", "\u68E5"], /* CJK Ideograph */ + ["\u68E6", "\u68E6"], /* CJK Ideograph */ + ["\u68E7", "\u68E7"], /* CJK Ideograph */ + ["\u68E8", "\u68E8"], /* CJK Ideograph */ + ["\u68E9", "\u68E9"], /* CJK Ideograph */ + ["\u68EA", "\u68EA"], /* CJK Ideograph */ + ["\u68EB", "\u68EB"], /* CJK Ideograph */ + ["\u68EC", "\u68EC"], /* CJK Ideograph */ + ["\u68ED", "\u68ED"], /* CJK Ideograph */ + ["\u68EE", "\u68EE"], /* CJK Ideograph */ + ["\u68EF", "\u68EF"], /* CJK Ideograph */ + ["\u68F0", "\u68F0"], /* CJK Ideograph */ + ["\u68F1", "\u68F1"], /* CJK Ideograph */ + ["\u68F2", "\u68F2"], /* CJK Ideograph */ + ["\u68F3", "\u68F3"], /* CJK Ideograph */ + ["\u68F4", "\u68F4"], /* CJK Ideograph */ + ["\u68F5", "\u68F5"], /* CJK Ideograph */ + ["\u68F6", "\u68F6"], /* CJK Ideograph */ + ["\u68F7", "\u68F7"], /* CJK Ideograph */ + ["\u68F8", "\u68F8"], /* CJK Ideograph */ + ["\u68F9", "\u68F9"], /* CJK Ideograph */ + ["\u68FA", "\u68FA"], /* CJK Ideograph */ + ["\u68FB", "\u68FB"], /* CJK Ideograph */ + ["\u68FC", "\u68FC"], /* CJK Ideograph */ + ["\u68FD", "\u68FD"], /* CJK Ideograph */ + ["\u68FE", "\u68FE"], /* CJK Ideograph */ + ["\u68FF", "\u68FF"], /* CJK Ideograph */ + ["\u6900", "\u6900"], /* CJK Ideograph */ + ["\u6901", "\u6901"], /* CJK Ideograph */ + ["\u6902", "\u6902"], /* CJK Ideograph */ + ["\u6903", "\u6903"], /* CJK Ideograph */ + ["\u6904", "\u6904"], /* CJK Ideograph */ + ["\u6905", "\u6905"], /* CJK Ideograph */ + ["\u6906", "\u6906"], /* CJK Ideograph */ + ["\u6907", "\u6907"], /* CJK Ideograph */ + ["\u6908", "\u6908"], /* CJK Ideograph */ + ["\u6909", "\u6909"], /* CJK Ideograph */ + ["\u690A", "\u690A"], /* CJK Ideograph */ + ["\u690B", "\u690B"], /* CJK Ideograph */ + ["\u690C", "\u690C"], /* CJK Ideograph */ + ["\u690D", "\u690D"], /* CJK Ideograph */ + ["\u690E", "\u690E"], /* CJK Ideograph */ + ["\u690F", "\u690F"], /* CJK Ideograph */ + ["\u6910", "\u6910"], /* CJK Ideograph */ + ["\u6911", "\u6911"], /* CJK Ideograph */ + ["\u6912", "\u6912"], /* CJK Ideograph */ + ["\u6913", "\u6913"], /* CJK Ideograph */ + ["\u6914", "\u6914"], /* CJK Ideograph */ + ["\u6915", "\u6915"], /* CJK Ideograph */ + ["\u6916", "\u6916"], /* CJK Ideograph */ + ["\u6917", "\u6917"], /* CJK Ideograph */ + ["\u6918", "\u6918"], /* CJK Ideograph */ + ["\u6919", "\u6919"], /* CJK Ideograph */ + ["\u691A", "\u691A"], /* CJK Ideograph */ + ["\u691B", "\u691B"], /* CJK Ideograph */ + ["\u691C", "\u691C"], /* CJK Ideograph */ + ["\u691D", "\u691D"], /* CJK Ideograph */ + ["\u691E", "\u691E"], /* CJK Ideograph */ + ["\u691F", "\u691F"], /* CJK Ideograph */ + ["\u6920", "\u6920"], /* CJK Ideograph */ + ["\u6921", "\u6921"], /* CJK Ideograph */ + ["\u6922", "\u6922"], /* CJK Ideograph */ + ["\u6923", "\u6923"], /* CJK Ideograph */ + ["\u6924", "\u6924"], /* CJK Ideograph */ + ["\u6925", "\u6925"], /* CJK Ideograph */ + ["\u6926", "\u6926"], /* CJK Ideograph */ + ["\u6927", "\u6927"], /* CJK Ideograph */ + ["\u6928", "\u6928"], /* CJK Ideograph */ + ["\u6929", "\u6929"], /* CJK Ideograph */ + ["\u692A", "\u692A"], /* CJK Ideograph */ + ["\u692B", "\u692B"], /* CJK Ideograph */ + ["\u692C", "\u692C"], /* CJK Ideograph */ + ["\u692D", "\u692D"], /* CJK Ideograph */ + ["\u692E", "\u692E"], /* CJK Ideograph */ + ["\u692F", "\u692F"], /* CJK Ideograph */ + ["\u6930", "\u6930"], /* CJK Ideograph */ + ["\u6931", "\u6931"], /* CJK Ideograph */ + ["\u6932", "\u6932"], /* CJK Ideograph */ + ["\u6933", "\u6933"], /* CJK Ideograph */ + ["\u6934", "\u6934"], /* CJK Ideograph */ + ["\u6935", "\u6935"], /* CJK Ideograph */ + ["\u6936", "\u6936"], /* CJK Ideograph */ + ["\u6937", "\u6937"], /* CJK Ideograph */ + ["\u6938", "\u6938"], /* CJK Ideograph */ + ["\u6939", "\u6939"], /* CJK Ideograph */ + ["\u693A", "\u693A"], /* CJK Ideograph */ + ["\u693B", "\u693B"], /* CJK Ideograph */ + ["\u693C", "\u693C"], /* CJK Ideograph */ + ["\u693D", "\u693D"], /* CJK Ideograph */ + ["\u693E", "\u693E"], /* CJK Ideograph */ + ["\u693F", "\u693F"], /* CJK Ideograph */ + ["\u6940", "\u6940"], /* CJK Ideograph */ + ["\u6941", "\u6941"], /* CJK Ideograph */ + ["\u6942", "\u6942"], /* CJK Ideograph */ + ["\u6943", "\u6943"], /* CJK Ideograph */ + ["\u6944", "\u6944"], /* CJK Ideograph */ + ["\u6945", "\u6945"], /* CJK Ideograph */ + ["\u6946", "\u6946"], /* CJK Ideograph */ + ["\u6947", "\u6947"], /* CJK Ideograph */ + ["\u6948", "\u6948"], /* CJK Ideograph */ + ["\u6949", "\u6949"], /* CJK Ideograph */ + ["\u694A", "\u694A"], /* CJK Ideograph */ + ["\u694B", "\u694B"], /* CJK Ideograph */ + ["\u694C", "\u694C"], /* CJK Ideograph */ + ["\u694D", "\u694D"], /* CJK Ideograph */ + ["\u694E", "\u694E"], /* CJK Ideograph */ + ["\u694F", "\u694F"], /* CJK Ideograph */ + ["\u6950", "\u6950"], /* CJK Ideograph */ + ["\u6951", "\u6951"], /* CJK Ideograph */ + ["\u6952", "\u6952"], /* CJK Ideograph */ + ["\u6953", "\u6953"], /* CJK Ideograph */ + ["\u6954", "\u6954"], /* CJK Ideograph */ + ["\u6955", "\u6955"], /* CJK Ideograph */ + ["\u6956", "\u6956"], /* CJK Ideograph */ + ["\u6957", "\u6957"], /* CJK Ideograph */ + ["\u6958", "\u6958"], /* CJK Ideograph */ + ["\u6959", "\u6959"], /* CJK Ideograph */ + ["\u695A", "\u695A"], /* CJK Ideograph */ + ["\u695B", "\u695B"], /* CJK Ideograph */ + ["\u695C", "\u695C"], /* CJK Ideograph */ + ["\u695D", "\u695D"], /* CJK Ideograph */ + ["\u695E", "\u695E"], /* CJK Ideograph */ + ["\u695F", "\u695F"], /* CJK Ideograph */ + ["\u6960", "\u6960"], /* CJK Ideograph */ + ["\u6961", "\u6961"], /* CJK Ideograph */ + ["\u6962", "\u6962"], /* CJK Ideograph */ + ["\u6963", "\u6963"], /* CJK Ideograph */ + ["\u6964", "\u6964"], /* CJK Ideograph */ + ["\u6965", "\u6965"], /* CJK Ideograph */ + ["\u6966", "\u6966"], /* CJK Ideograph */ + ["\u6967", "\u6967"], /* CJK Ideograph */ + ["\u6968", "\u6968"], /* CJK Ideograph */ + ["\u6969", "\u6969"], /* CJK Ideograph */ + ["\u696A", "\u696A"], /* CJK Ideograph */ + ["\u696B", "\u696B"], /* CJK Ideograph */ + ["\u696C", "\u696C"], /* CJK Ideograph */ + ["\u696D", "\u696D"], /* CJK Ideograph */ + ["\u696E", "\u696E"], /* CJK Ideograph */ + ["\u696F", "\u696F"], /* CJK Ideograph */ + ["\u6970", "\u6970"], /* CJK Ideograph */ + ["\u6971", "\u6971"], /* CJK Ideograph */ + ["\u6972", "\u6972"], /* CJK Ideograph */ + ["\u6973", "\u6973"], /* CJK Ideograph */ + ["\u6974", "\u6974"], /* CJK Ideograph */ + ["\u6975", "\u6975"], /* CJK Ideograph */ + ["\u6976", "\u6976"], /* CJK Ideograph */ + ["\u6977", "\u6977"], /* CJK Ideograph */ + ["\u6978", "\u6978"], /* CJK Ideograph */ + ["\u6979", "\u6979"], /* CJK Ideograph */ + ["\u697A", "\u697A"], /* CJK Ideograph */ + ["\u697B", "\u697B"], /* CJK Ideograph */ + ["\u697C", "\u697C"], /* CJK Ideograph */ + ["\u697D", "\u697D"], /* CJK Ideograph */ + ["\u697E", "\u697E"], /* CJK Ideograph */ + ["\u697F", "\u697F"], /* CJK Ideograph */ + ["\u6980", "\u6980"], /* CJK Ideograph */ + ["\u6981", "\u6981"], /* CJK Ideograph */ + ["\u6982", "\u6982"], /* CJK Ideograph */ + ["\u6983", "\u6983"], /* CJK Ideograph */ + ["\u6984", "\u6984"], /* CJK Ideograph */ + ["\u6985", "\u6985"], /* CJK Ideograph */ + ["\u6986", "\u6986"], /* CJK Ideograph */ + ["\u6987", "\u6987"], /* CJK Ideograph */ + ["\u6988", "\u6988"], /* CJK Ideograph */ + ["\u6989", "\u6989"], /* CJK Ideograph */ + ["\u698A", "\u698A"], /* CJK Ideograph */ + ["\u698B", "\u698B"], /* CJK Ideograph */ + ["\u698C", "\u698C"], /* CJK Ideograph */ + ["\u698D", "\u698D"], /* CJK Ideograph */ + ["\u698E", "\u698E"], /* CJK Ideograph */ + ["\u698F", "\u698F"], /* CJK Ideograph */ + ["\u6990", "\u6990"], /* CJK Ideograph */ + ["\u6991", "\u6991"], /* CJK Ideograph */ + ["\u6992", "\u6992"], /* CJK Ideograph */ + ["\u6993", "\u6993"], /* CJK Ideograph */ + ["\u6994", "\u6994"], /* CJK Ideograph */ + ["\u6995", "\u6995"], /* CJK Ideograph */ + ["\u6996", "\u6996"], /* CJK Ideograph */ + ["\u6997", "\u6997"], /* CJK Ideograph */ + ["\u6998", "\u6998"], /* CJK Ideograph */ + ["\u6999", "\u6999"], /* CJK Ideograph */ + ["\u699A", "\u699A"], /* CJK Ideograph */ + ["\u699B", "\u699B"], /* CJK Ideograph */ + ["\u699C", "\u699C"], /* CJK Ideograph */ + ["\u699D", "\u699D"], /* CJK Ideograph */ + ["\u699E", "\u699E"], /* CJK Ideograph */ + ["\u699F", "\u699F"], /* CJK Ideograph */ + ["\u69A0", "\u69A0"], /* CJK Ideograph */ + ["\u69A1", "\u69A1"], /* CJK Ideograph */ + ["\u69A2", "\u69A2"], /* CJK Ideograph */ + ["\u69A3", "\u69A3"], /* CJK Ideograph */ + ["\u69A4", "\u69A4"], /* CJK Ideograph */ + ["\u69A5", "\u69A5"], /* CJK Ideograph */ + ["\u69A6", "\u69A6"], /* CJK Ideograph */ + ["\u69A7", "\u69A7"], /* CJK Ideograph */ + ["\u69A8", "\u69A8"], /* CJK Ideograph */ + ["\u69A9", "\u69A9"], /* CJK Ideograph */ + ["\u69AA", "\u69AA"], /* CJK Ideograph */ + ["\u69AB", "\u69AB"], /* CJK Ideograph */ + ["\u69AC", "\u69AC"], /* CJK Ideograph */ + ["\u69AD", "\u69AD"], /* CJK Ideograph */ + ["\u69AE", "\u69AE"], /* CJK Ideograph */ + ["\u69AF", "\u69AF"], /* CJK Ideograph */ + ["\u69B0", "\u69B0"], /* CJK Ideograph */ + ["\u69B1", "\u69B1"], /* CJK Ideograph */ + ["\u69B2", "\u69B2"], /* CJK Ideograph */ + ["\u69B3", "\u69B3"], /* CJK Ideograph */ + ["\u69B4", "\u69B4"], /* CJK Ideograph */ + ["\u69B5", "\u69B5"], /* CJK Ideograph */ + ["\u69B6", "\u69B6"], /* CJK Ideograph */ + ["\u69B7", "\u69B7"], /* CJK Ideograph */ + ["\u69B8", "\u69B8"], /* CJK Ideograph */ + ["\u69B9", "\u69B9"], /* CJK Ideograph */ + ["\u69BA", "\u69BA"], /* CJK Ideograph */ + ["\u69BB", "\u69BB"], /* CJK Ideograph */ + ["\u69BC", "\u69BC"], /* CJK Ideograph */ + ["\u69BD", "\u69BD"], /* CJK Ideograph */ + ["\u69BE", "\u69BE"], /* CJK Ideograph */ + ["\u69BF", "\u69BF"], /* CJK Ideograph */ + ["\u69C0", "\u69C0"], /* CJK Ideograph */ + ["\u69C1", "\u69C1"], /* CJK Ideograph */ + ["\u69C2", "\u69C2"], /* CJK Ideograph */ + ["\u69C3", "\u69C3"], /* CJK Ideograph */ + ["\u69C4", "\u69C4"], /* CJK Ideograph */ + ["\u69C5", "\u69C5"], /* CJK Ideograph */ + ["\u69C6", "\u69C6"], /* CJK Ideograph */ + ["\u69C7", "\u69C7"], /* CJK Ideograph */ + ["\u69C8", "\u69C8"], /* CJK Ideograph */ + ["\u69C9", "\u69C9"], /* CJK Ideograph */ + ["\u69CA", "\u69CA"], /* CJK Ideograph */ + ["\u69CB", "\u69CB"], /* CJK Ideograph */ + ["\u69CC", "\u69CC"], /* CJK Ideograph */ + ["\u69CD", "\u69CD"], /* CJK Ideograph */ + ["\u69CE", "\u69CE"], /* CJK Ideograph */ + ["\u69CF", "\u69CF"], /* CJK Ideograph */ + ["\u69D0", "\u69D0"], /* CJK Ideograph */ + ["\u69D1", "\u69D1"], /* CJK Ideograph */ + ["\u69D2", "\u69D2"], /* CJK Ideograph */ + ["\u69D3", "\u69D3"], /* CJK Ideograph */ + ["\u69D4", "\u69D4"], /* CJK Ideograph */ + ["\u69D5", "\u69D5"], /* CJK Ideograph */ + ["\u69D6", "\u69D6"], /* CJK Ideograph */ + ["\u69D7", "\u69D7"], /* CJK Ideograph */ + ["\u69D8", "\u69D8"], /* CJK Ideograph */ + ["\u69D9", "\u69D9"], /* CJK Ideograph */ + ["\u69DA", "\u69DA"], /* CJK Ideograph */ + ["\u69DB", "\u69DB"], /* CJK Ideograph */ + ["\u69DC", "\u69DC"], /* CJK Ideograph */ + ["\u69DD", "\u69DD"], /* CJK Ideograph */ + ["\u69DE", "\u69DE"], /* CJK Ideograph */ + ["\u69DF", "\u69DF"], /* CJK Ideograph */ + ["\u69E0", "\u69E0"], /* CJK Ideograph */ + ["\u69E1", "\u69E1"], /* CJK Ideograph */ + ["\u69E2", "\u69E2"], /* CJK Ideograph */ + ["\u69E3", "\u69E3"], /* CJK Ideograph */ + ["\u69E4", "\u69E4"], /* CJK Ideograph */ + ["\u69E5", "\u69E5"], /* CJK Ideograph */ + ["\u69E6", "\u69E6"], /* CJK Ideograph */ + ["\u69E7", "\u69E7"], /* CJK Ideograph */ + ["\u69E8", "\u69E8"], /* CJK Ideograph */ + ["\u69E9", "\u69E9"], /* CJK Ideograph */ + ["\u69EA", "\u69EA"], /* CJK Ideograph */ + ["\u69EB", "\u69EB"], /* CJK Ideograph */ + ["\u69EC", "\u69EC"], /* CJK Ideograph */ + ["\u69ED", "\u69ED"], /* CJK Ideograph */ + ["\u69EE", "\u69EE"], /* CJK Ideograph */ + ["\u69EF", "\u69EF"], /* CJK Ideograph */ + ["\u69F0", "\u69F0"], /* CJK Ideograph */ + ["\u69F1", "\u69F1"], /* CJK Ideograph */ + ["\u69F2", "\u69F2"], /* CJK Ideograph */ + ["\u69F3", "\u69F3"], /* CJK Ideograph */ + ["\u69F4", "\u69F4"], /* CJK Ideograph */ + ["\u69F5", "\u69F5"], /* CJK Ideograph */ + ["\u69F6", "\u69F6"], /* CJK Ideograph */ + ["\u69F7", "\u69F7"], /* CJK Ideograph */ + ["\u69F8", "\u69F8"], /* CJK Ideograph */ + ["\u69F9", "\u69F9"], /* CJK Ideograph */ + ["\u69FA", "\u69FA"], /* CJK Ideograph */ + ["\u69FB", "\u69FB"], /* CJK Ideograph */ + ["\u69FC", "\u69FC"], /* CJK Ideograph */ + ["\u69FD", "\u69FD"], /* CJK Ideograph */ + ["\u69FE", "\u69FE"], /* CJK Ideograph */ + ["\u69FF", "\u69FF"], /* CJK Ideograph */ + ["\u6A00", "\u6A00"], /* CJK Ideograph */ + ["\u6A01", "\u6A01"], /* CJK Ideograph */ + ["\u6A02", "\u6A02"], /* CJK Ideograph */ + ["\u6A03", "\u6A03"], /* CJK Ideograph */ + ["\u6A04", "\u6A04"], /* CJK Ideograph */ + ["\u6A05", "\u6A05"], /* CJK Ideograph */ + ["\u6A06", "\u6A06"], /* CJK Ideograph */ + ["\u6A07", "\u6A07"], /* CJK Ideograph */ + ["\u6A08", "\u6A08"], /* CJK Ideograph */ + ["\u6A09", "\u6A09"], /* CJK Ideograph */ + ["\u6A0A", "\u6A0A"], /* CJK Ideograph */ + ["\u6A0B", "\u6A0B"], /* CJK Ideograph */ + ["\u6A0C", "\u6A0C"], /* CJK Ideograph */ + ["\u6A0D", "\u6A0D"], /* CJK Ideograph */ + ["\u6A0E", "\u6A0E"], /* CJK Ideograph */ + ["\u6A0F", "\u6A0F"], /* CJK Ideograph */ + ["\u6A10", "\u6A10"], /* CJK Ideograph */ + ["\u6A11", "\u6A11"], /* CJK Ideograph */ + ["\u6A12", "\u6A12"], /* CJK Ideograph */ + ["\u6A13", "\u6A13"], /* CJK Ideograph */ + ["\u6A14", "\u6A14"], /* CJK Ideograph */ + ["\u6A15", "\u6A15"], /* CJK Ideograph */ + ["\u6A16", "\u6A16"], /* CJK Ideograph */ + ["\u6A17", "\u6A17"], /* CJK Ideograph */ + ["\u6A18", "\u6A18"], /* CJK Ideograph */ + ["\u6A19", "\u6A19"], /* CJK Ideograph */ + ["\u6A1A", "\u6A1A"], /* CJK Ideograph */ + ["\u6A1B", "\u6A1B"], /* CJK Ideograph */ + ["\u6A1C", "\u6A1C"], /* CJK Ideograph */ + ["\u6A1D", "\u6A1D"], /* CJK Ideograph */ + ["\u6A1E", "\u6A1E"], /* CJK Ideograph */ + ["\u6A1F", "\u6A1F"], /* CJK Ideograph */ + ["\u6A20", "\u6A20"], /* CJK Ideograph */ + ["\u6A21", "\u6A21"], /* CJK Ideograph */ + ["\u6A22", "\u6A22"], /* CJK Ideograph */ + ["\u6A23", "\u6A23"], /* CJK Ideograph */ + ["\u6A24", "\u6A24"], /* CJK Ideograph */ + ["\u6A25", "\u6A25"], /* CJK Ideograph */ + ["\u6A26", "\u6A26"], /* CJK Ideograph */ + ["\u6A27", "\u6A27"], /* CJK Ideograph */ + ["\u6A28", "\u6A28"], /* CJK Ideograph */ + ["\u6A29", "\u6A29"], /* CJK Ideograph */ + ["\u6A2A", "\u6A2A"], /* CJK Ideograph */ + ["\u6A2B", "\u6A2B"], /* CJK Ideograph */ + ["\u6A2C", "\u6A2C"], /* CJK Ideograph */ + ["\u6A2D", "\u6A2D"], /* CJK Ideograph */ + ["\u6A2E", "\u6A2E"], /* CJK Ideograph */ + ["\u6A2F", "\u6A2F"], /* CJK Ideograph */ + ["\u6A30", "\u6A30"], /* CJK Ideograph */ + ["\u6A31", "\u6A31"], /* CJK Ideograph */ + ["\u6A32", "\u6A32"], /* CJK Ideograph */ + ["\u6A33", "\u6A33"], /* CJK Ideograph */ + ["\u6A34", "\u6A34"], /* CJK Ideograph */ + ["\u6A35", "\u6A35"], /* CJK Ideograph */ + ["\u6A36", "\u6A36"], /* CJK Ideograph */ + ["\u6A37", "\u6A37"], /* CJK Ideograph */ + ["\u6A38", "\u6A38"], /* CJK Ideograph */ + ["\u6A39", "\u6A39"], /* CJK Ideograph */ + ["\u6A3A", "\u6A3A"], /* CJK Ideograph */ + ["\u6A3B", "\u6A3B"], /* CJK Ideograph */ + ["\u6A3C", "\u6A3C"], /* CJK Ideograph */ + ["\u6A3D", "\u6A3D"], /* CJK Ideograph */ + ["\u6A3E", "\u6A3E"], /* CJK Ideograph */ + ["\u6A3F", "\u6A3F"], /* CJK Ideograph */ + ["\u6A40", "\u6A40"], /* CJK Ideograph */ + ["\u6A41", "\u6A41"], /* CJK Ideograph */ + ["\u6A42", "\u6A42"], /* CJK Ideograph */ + ["\u6A43", "\u6A43"], /* CJK Ideograph */ + ["\u6A44", "\u6A44"], /* CJK Ideograph */ + ["\u6A45", "\u6A45"], /* CJK Ideograph */ + ["\u6A46", "\u6A46"], /* CJK Ideograph */ + ["\u6A47", "\u6A47"], /* CJK Ideograph */ + ["\u6A48", "\u6A48"], /* CJK Ideograph */ + ["\u6A49", "\u6A49"], /* CJK Ideograph */ + ["\u6A4A", "\u6A4A"], /* CJK Ideograph */ + ["\u6A4B", "\u6A4B"], /* CJK Ideograph */ + ["\u6A4C", "\u6A4C"], /* CJK Ideograph */ + ["\u6A4D", "\u6A4D"], /* CJK Ideograph */ + ["\u6A4E", "\u6A4E"], /* CJK Ideograph */ + ["\u6A4F", "\u6A4F"], /* CJK Ideograph */ + ["\u6A50", "\u6A50"], /* CJK Ideograph */ + ["\u6A51", "\u6A51"], /* CJK Ideograph */ + ["\u6A52", "\u6A52"], /* CJK Ideograph */ + ["\u6A53", "\u6A53"], /* CJK Ideograph */ + ["\u6A54", "\u6A54"], /* CJK Ideograph */ + ["\u6A55", "\u6A55"], /* CJK Ideograph */ + ["\u6A56", "\u6A56"], /* CJK Ideograph */ + ["\u6A57", "\u6A57"], /* CJK Ideograph */ + ["\u6A58", "\u6A58"], /* CJK Ideograph */ + ["\u6A59", "\u6A59"], /* CJK Ideograph */ + ["\u6A5A", "\u6A5A"], /* CJK Ideograph */ + ["\u6A5B", "\u6A5B"], /* CJK Ideograph */ + ["\u6A5C", "\u6A5C"], /* CJK Ideograph */ + ["\u6A5D", "\u6A5D"], /* CJK Ideograph */ + ["\u6A5E", "\u6A5E"], /* CJK Ideograph */ + ["\u6A5F", "\u6A5F"], /* CJK Ideograph */ + ["\u6A60", "\u6A60"], /* CJK Ideograph */ + ["\u6A61", "\u6A61"], /* CJK Ideograph */ + ["\u6A62", "\u6A62"], /* CJK Ideograph */ + ["\u6A63", "\u6A63"], /* CJK Ideograph */ + ["\u6A64", "\u6A64"], /* CJK Ideograph */ + ["\u6A65", "\u6A65"], /* CJK Ideograph */ + ["\u6A66", "\u6A66"], /* CJK Ideograph */ + ["\u6A67", "\u6A67"], /* CJK Ideograph */ + ["\u6A68", "\u6A68"], /* CJK Ideograph */ + ["\u6A69", "\u6A69"], /* CJK Ideograph */ + ["\u6A6A", "\u6A6A"], /* CJK Ideograph */ + ["\u6A6B", "\u6A6B"], /* CJK Ideograph */ + ["\u6A6C", "\u6A6C"], /* CJK Ideograph */ + ["\u6A6D", "\u6A6D"], /* CJK Ideograph */ + ["\u6A6E", "\u6A6E"], /* CJK Ideograph */ + ["\u6A6F", "\u6A6F"], /* CJK Ideograph */ + ["\u6A70", "\u6A70"], /* CJK Ideograph */ + ["\u6A71", "\u6A71"], /* CJK Ideograph */ + ["\u6A72", "\u6A72"], /* CJK Ideograph */ + ["\u6A73", "\u6A73"], /* CJK Ideograph */ + ["\u6A74", "\u6A74"], /* CJK Ideograph */ + ["\u6A75", "\u6A75"], /* CJK Ideograph */ + ["\u6A76", "\u6A76"], /* CJK Ideograph */ + ["\u6A77", "\u6A77"], /* CJK Ideograph */ + ["\u6A78", "\u6A78"], /* CJK Ideograph */ + ["\u6A79", "\u6A79"], /* CJK Ideograph */ + ["\u6A7A", "\u6A7A"], /* CJK Ideograph */ + ["\u6A7B", "\u6A7B"], /* CJK Ideograph */ + ["\u6A7C", "\u6A7C"], /* CJK Ideograph */ + ["\u6A7D", "\u6A7D"], /* CJK Ideograph */ + ["\u6A7E", "\u6A7E"], /* CJK Ideograph */ + ["\u6A7F", "\u6A7F"], /* CJK Ideograph */ + ["\u6A80", "\u6A80"], /* CJK Ideograph */ + ["\u6A81", "\u6A81"], /* CJK Ideograph */ + ["\u6A82", "\u6A82"], /* CJK Ideograph */ + ["\u6A83", "\u6A83"], /* CJK Ideograph */ + ["\u6A84", "\u6A84"], /* CJK Ideograph */ + ["\u6A85", "\u6A85"], /* CJK Ideograph */ + ["\u6A86", "\u6A86"], /* CJK Ideograph */ + ["\u6A87", "\u6A87"], /* CJK Ideograph */ + ["\u6A88", "\u6A88"], /* CJK Ideograph */ + ["\u6A89", "\u6A89"], /* CJK Ideograph */ + ["\u6A8A", "\u6A8A"], /* CJK Ideograph */ + ["\u6A8B", "\u6A8B"], /* CJK Ideograph */ + ["\u6A8C", "\u6A8C"], /* CJK Ideograph */ + ["\u6A8D", "\u6A8D"], /* CJK Ideograph */ + ["\u6A8E", "\u6A8E"], /* CJK Ideograph */ + ["\u6A8F", "\u6A8F"], /* CJK Ideograph */ + ["\u6A90", "\u6A90"], /* CJK Ideograph */ + ["\u6A91", "\u6A91"], /* CJK Ideograph */ + ["\u6A92", "\u6A92"], /* CJK Ideograph */ + ["\u6A93", "\u6A93"], /* CJK Ideograph */ + ["\u6A94", "\u6A94"], /* CJK Ideograph */ + ["\u6A95", "\u6A95"], /* CJK Ideograph */ + ["\u6A96", "\u6A96"], /* CJK Ideograph */ + ["\u6A97", "\u6A97"], /* CJK Ideograph */ + ["\u6A98", "\u6A98"], /* CJK Ideograph */ + ["\u6A99", "\u6A99"], /* CJK Ideograph */ + ["\u6A9A", "\u6A9A"], /* CJK Ideograph */ + ["\u6A9B", "\u6A9B"], /* CJK Ideograph */ + ["\u6A9C", "\u6A9C"], /* CJK Ideograph */ + ["\u6A9D", "\u6A9D"], /* CJK Ideograph */ + ["\u6A9E", "\u6A9E"], /* CJK Ideograph */ + ["\u6A9F", "\u6A9F"], /* CJK Ideograph */ + ["\u6AA0", "\u6AA0"], /* CJK Ideograph */ + ["\u6AA1", "\u6AA1"], /* CJK Ideograph */ + ["\u6AA2", "\u6AA2"], /* CJK Ideograph */ + ["\u6AA3", "\u6AA3"], /* CJK Ideograph */ + ["\u6AA4", "\u6AA4"], /* CJK Ideograph */ + ["\u6AA5", "\u6AA5"], /* CJK Ideograph */ + ["\u6AA6", "\u6AA6"], /* CJK Ideograph */ + ["\u6AA7", "\u6AA7"], /* CJK Ideograph */ + ["\u6AA8", "\u6AA8"], /* CJK Ideograph */ + ["\u6AA9", "\u6AA9"], /* CJK Ideograph */ + ["\u6AAA", "\u6AAA"], /* CJK Ideograph */ + ["\u6AAB", "\u6AAB"], /* CJK Ideograph */ + ["\u6AAC", "\u6AAC"], /* CJK Ideograph */ + ["\u6AAD", "\u6AAD"], /* CJK Ideograph */ + ["\u6AAE", "\u6AAE"], /* CJK Ideograph */ + ["\u6AAF", "\u6AAF"], /* CJK Ideograph */ + ["\u6AB0", "\u6AB0"], /* CJK Ideograph */ + ["\u6AB1", "\u6AB1"], /* CJK Ideograph */ + ["\u6AB2", "\u6AB2"], /* CJK Ideograph */ + ["\u6AB3", "\u6AB3"], /* CJK Ideograph */ + ["\u6AB4", "\u6AB4"], /* CJK Ideograph */ + ["\u6AB5", "\u6AB5"], /* CJK Ideograph */ + ["\u6AB6", "\u6AB6"], /* CJK Ideograph */ + ["\u6AB7", "\u6AB7"], /* CJK Ideograph */ + ["\u6AB8", "\u6AB8"], /* CJK Ideograph */ + ["\u6AB9", "\u6AB9"], /* CJK Ideograph */ + ["\u6ABA", "\u6ABA"], /* CJK Ideograph */ + ["\u6ABB", "\u6ABB"], /* CJK Ideograph */ + ["\u6ABC", "\u6ABC"], /* CJK Ideograph */ + ["\u6ABD", "\u6ABD"], /* CJK Ideograph */ + ["\u6ABE", "\u6ABE"], /* CJK Ideograph */ + ["\u6ABF", "\u6ABF"], /* CJK Ideograph */ + ["\u6AC0", "\u6AC0"], /* CJK Ideograph */ + ["\u6AC1", "\u6AC1"], /* CJK Ideograph */ + ["\u6AC2", "\u6AC2"], /* CJK Ideograph */ + ["\u6AC3", "\u6AC3"], /* CJK Ideograph */ + ["\u6AC4", "\u6AC4"], /* CJK Ideograph */ + ["\u6AC5", "\u6AC5"], /* CJK Ideograph */ + ["\u6AC6", "\u6AC6"], /* CJK Ideograph */ + ["\u6AC7", "\u6AC7"], /* CJK Ideograph */ + ["\u6AC8", "\u6AC8"], /* CJK Ideograph */ + ["\u6AC9", "\u6AC9"], /* CJK Ideograph */ + ["\u6ACA", "\u6ACA"], /* CJK Ideograph */ + ["\u6ACB", "\u6ACB"], /* CJK Ideograph */ + ["\u6ACC", "\u6ACC"], /* CJK Ideograph */ + ["\u6ACD", "\u6ACD"], /* CJK Ideograph */ + ["\u6ACE", "\u6ACE"], /* CJK Ideograph */ + ["\u6ACF", "\u6ACF"], /* CJK Ideograph */ + ["\u6AD0", "\u6AD0"], /* CJK Ideograph */ + ["\u6AD1", "\u6AD1"], /* CJK Ideograph */ + ["\u6AD2", "\u6AD2"], /* CJK Ideograph */ + ["\u6AD3", "\u6AD3"], /* CJK Ideograph */ + ["\u6AD4", "\u6AD4"], /* CJK Ideograph */ + ["\u6AD5", "\u6AD5"], /* CJK Ideograph */ + ["\u6AD6", "\u6AD6"], /* CJK Ideograph */ + ["\u6AD7", "\u6AD7"], /* CJK Ideograph */ + ["\u6AD8", "\u6AD8"], /* CJK Ideograph */ + ["\u6AD9", "\u6AD9"], /* CJK Ideograph */ + ["\u6ADA", "\u6ADA"], /* CJK Ideograph */ + ["\u6ADB", "\u6ADB"], /* CJK Ideograph */ + ["\u6ADC", "\u6ADC"], /* CJK Ideograph */ + ["\u6ADD", "\u6ADD"], /* CJK Ideograph */ + ["\u6ADE", "\u6ADE"], /* CJK Ideograph */ + ["\u6ADF", "\u6ADF"], /* CJK Ideograph */ + ["\u6AE0", "\u6AE0"], /* CJK Ideograph */ + ["\u6AE1", "\u6AE1"], /* CJK Ideograph */ + ["\u6AE2", "\u6AE2"], /* CJK Ideograph */ + ["\u6AE3", "\u6AE3"], /* CJK Ideograph */ + ["\u6AE4", "\u6AE4"], /* CJK Ideograph */ + ["\u6AE5", "\u6AE5"], /* CJK Ideograph */ + ["\u6AE6", "\u6AE6"], /* CJK Ideograph */ + ["\u6AE7", "\u6AE7"], /* CJK Ideograph */ + ["\u6AE8", "\u6AE8"], /* CJK Ideograph */ + ["\u6AE9", "\u6AE9"], /* CJK Ideograph */ + ["\u6AEA", "\u6AEA"], /* CJK Ideograph */ + ["\u6AEB", "\u6AEB"], /* CJK Ideograph */ + ["\u6AEC", "\u6AEC"], /* CJK Ideograph */ + ["\u6AED", "\u6AED"], /* CJK Ideograph */ + ["\u6AEE", "\u6AEE"], /* CJK Ideograph */ + ["\u6AEF", "\u6AEF"], /* CJK Ideograph */ + ["\u6AF0", "\u6AF0"], /* CJK Ideograph */ + ["\u6AF1", "\u6AF1"], /* CJK Ideograph */ + ["\u6AF2", "\u6AF2"], /* CJK Ideograph */ + ["\u6AF3", "\u6AF3"], /* CJK Ideograph */ + ["\u6AF4", "\u6AF4"], /* CJK Ideograph */ + ["\u6AF5", "\u6AF5"], /* CJK Ideograph */ + ["\u6AF6", "\u6AF6"], /* CJK Ideograph */ + ["\u6AF7", "\u6AF7"], /* CJK Ideograph */ + ["\u6AF8", "\u6AF8"], /* CJK Ideograph */ + ["\u6AF9", "\u6AF9"], /* CJK Ideograph */ + ["\u6AFA", "\u6AFA"], /* CJK Ideograph */ + ["\u6AFB", "\u6AFB"], /* CJK Ideograph */ + ["\u6AFC", "\u6AFC"], /* CJK Ideograph */ + ["\u6AFD", "\u6AFD"], /* CJK Ideograph */ + ["\u6AFE", "\u6AFE"], /* CJK Ideograph */ + ["\u6AFF", "\u6AFF"], /* CJK Ideograph */ + ["\u6B00", "\u6B00"], /* CJK Ideograph */ + ["\u6B01", "\u6B01"], /* CJK Ideograph */ + ["\u6B02", "\u6B02"], /* CJK Ideograph */ + ["\u6B03", "\u6B03"], /* CJK Ideograph */ + ["\u6B04", "\u6B04"], /* CJK Ideograph */ + ["\u6B05", "\u6B05"], /* CJK Ideograph */ + ["\u6B06", "\u6B06"], /* CJK Ideograph */ + ["\u6B07", "\u6B07"], /* CJK Ideograph */ + ["\u6B08", "\u6B08"], /* CJK Ideograph */ + ["\u6B09", "\u6B09"], /* CJK Ideograph */ + ["\u6B0A", "\u6B0A"], /* CJK Ideograph */ + ["\u6B0B", "\u6B0B"], /* CJK Ideograph */ + ["\u6B0C", "\u6B0C"], /* CJK Ideograph */ + ["\u6B0D", "\u6B0D"], /* CJK Ideograph */ + ["\u6B0E", "\u6B0E"], /* CJK Ideograph */ + ["\u6B0F", "\u6B0F"], /* CJK Ideograph */ + ["\u6B10", "\u6B10"], /* CJK Ideograph */ + ["\u6B11", "\u6B11"], /* CJK Ideograph */ + ["\u6B12", "\u6B12"], /* CJK Ideograph */ + ["\u6B13", "\u6B13"], /* CJK Ideograph */ + ["\u6B14", "\u6B14"], /* CJK Ideograph */ + ["\u6B15", "\u6B15"], /* CJK Ideograph */ + ["\u6B16", "\u6B16"], /* CJK Ideograph */ + ["\u6B17", "\u6B17"], /* CJK Ideograph */ + ["\u6B18", "\u6B18"], /* CJK Ideograph */ + ["\u6B19", "\u6B19"], /* CJK Ideograph */ + ["\u6B1A", "\u6B1A"], /* CJK Ideograph */ + ["\u6B1B", "\u6B1B"], /* CJK Ideograph */ + ["\u6B1C", "\u6B1C"], /* CJK Ideograph */ + ["\u6B1D", "\u6B1D"], /* CJK Ideograph */ + ["\u6B1E", "\u6B1E"], /* CJK Ideograph */ + ["\u6B1F", "\u6B1F"], /* CJK Ideograph */ + ["\u6B20", "\u6B20"], /* CJK Ideograph */ + ["\u6B21", "\u6B21"], /* CJK Ideograph */ + ["\u6B22", "\u6B22"], /* CJK Ideograph */ + ["\u6B23", "\u6B23"], /* CJK Ideograph */ + ["\u6B24", "\u6B24"], /* CJK Ideograph */ + ["\u6B25", "\u6B25"], /* CJK Ideograph */ + ["\u6B26", "\u6B26"], /* CJK Ideograph */ + ["\u6B27", "\u6B27"], /* CJK Ideograph */ + ["\u6B28", "\u6B28"], /* CJK Ideograph */ + ["\u6B29", "\u6B29"], /* CJK Ideograph */ + ["\u6B2A", "\u6B2A"], /* CJK Ideograph */ + ["\u6B2B", "\u6B2B"], /* CJK Ideograph */ + ["\u6B2C", "\u6B2C"], /* CJK Ideograph */ + ["\u6B2D", "\u6B2D"], /* CJK Ideograph */ + ["\u6B2E", "\u6B2E"], /* CJK Ideograph */ + ["\u6B2F", "\u6B2F"], /* CJK Ideograph */ + ["\u6B30", "\u6B30"], /* CJK Ideograph */ + ["\u6B31", "\u6B31"], /* CJK Ideograph */ + ["\u6B32", "\u6B32"], /* CJK Ideograph */ + ["\u6B33", "\u6B33"], /* CJK Ideograph */ + ["\u6B34", "\u6B34"], /* CJK Ideograph */ + ["\u6B35", "\u6B35"], /* CJK Ideograph */ + ["\u6B36", "\u6B36"], /* CJK Ideograph */ + ["\u6B37", "\u6B37"], /* CJK Ideograph */ + ["\u6B38", "\u6B38"], /* CJK Ideograph */ + ["\u6B39", "\u6B39"], /* CJK Ideograph */ + ["\u6B3A", "\u6B3A"], /* CJK Ideograph */ + ["\u6B3B", "\u6B3B"], /* CJK Ideograph */ + ["\u6B3C", "\u6B3C"], /* CJK Ideograph */ + ["\u6B3D", "\u6B3D"], /* CJK Ideograph */ + ["\u6B3E", "\u6B3E"], /* CJK Ideograph */ + ["\u6B3F", "\u6B3F"], /* CJK Ideograph */ + ["\u6B40", "\u6B40"], /* CJK Ideograph */ + ["\u6B41", "\u6B41"], /* CJK Ideograph */ + ["\u6B42", "\u6B42"], /* CJK Ideograph */ + ["\u6B43", "\u6B43"], /* CJK Ideograph */ + ["\u6B44", "\u6B44"], /* CJK Ideograph */ + ["\u6B45", "\u6B45"], /* CJK Ideograph */ + ["\u6B46", "\u6B46"], /* CJK Ideograph */ + ["\u6B47", "\u6B47"], /* CJK Ideograph */ + ["\u6B48", "\u6B48"], /* CJK Ideograph */ + ["\u6B49", "\u6B49"], /* CJK Ideograph */ + ["\u6B4A", "\u6B4A"], /* CJK Ideograph */ + ["\u6B4B", "\u6B4B"], /* CJK Ideograph */ + ["\u6B4C", "\u6B4C"], /* CJK Ideograph */ + ["\u6B4D", "\u6B4D"], /* CJK Ideograph */ + ["\u6B4E", "\u6B4E"], /* CJK Ideograph */ + ["\u6B4F", "\u6B4F"], /* CJK Ideograph */ + ["\u6B50", "\u6B50"], /* CJK Ideograph */ + ["\u6B51", "\u6B51"], /* CJK Ideograph */ + ["\u6B52", "\u6B52"], /* CJK Ideograph */ + ["\u6B53", "\u6B53"], /* CJK Ideograph */ + ["\u6B54", "\u6B54"], /* CJK Ideograph */ + ["\u6B55", "\u6B55"], /* CJK Ideograph */ + ["\u6B56", "\u6B56"], /* CJK Ideograph */ + ["\u6B57", "\u6B57"], /* CJK Ideograph */ + ["\u6B58", "\u6B58"], /* CJK Ideograph */ + ["\u6B59", "\u6B59"], /* CJK Ideograph */ + ["\u6B5A", "\u6B5A"], /* CJK Ideograph */ + ["\u6B5B", "\u6B5B"], /* CJK Ideograph */ + ["\u6B5C", "\u6B5C"], /* CJK Ideograph */ + ["\u6B5D", "\u6B5D"], /* CJK Ideograph */ + ["\u6B5E", "\u6B5E"], /* CJK Ideograph */ + ["\u6B5F", "\u6B5F"], /* CJK Ideograph */ + ["\u6B60", "\u6B60"], /* CJK Ideograph */ + ["\u6B61", "\u6B61"], /* CJK Ideograph */ + ["\u6B62", "\u6B62"], /* CJK Ideograph */ + ["\u6B63", "\u6B63"], /* CJK Ideograph */ + ["\u6B64", "\u6B64"], /* CJK Ideograph */ + ["\u6B65", "\u6B65"], /* CJK Ideograph */ + ["\u6B66", "\u6B66"], /* CJK Ideograph */ + ["\u6B67", "\u6B67"], /* CJK Ideograph */ + ["\u6B68", "\u6B68"], /* CJK Ideograph */ + ["\u6B69", "\u6B69"], /* CJK Ideograph */ + ["\u6B6A", "\u6B6A"], /* CJK Ideograph */ + ["\u6B6B", "\u6B6B"], /* CJK Ideograph */ + ["\u6B6C", "\u6B6C"], /* CJK Ideograph */ + ["\u6B6D", "\u6B6D"], /* CJK Ideograph */ + ["\u6B6E", "\u6B6E"], /* CJK Ideograph */ + ["\u6B6F", "\u6B6F"], /* CJK Ideograph */ + ["\u6B70", "\u6B70"], /* CJK Ideograph */ + ["\u6B71", "\u6B71"], /* CJK Ideograph */ + ["\u6B72", "\u6B72"], /* CJK Ideograph */ + ["\u6B73", "\u6B73"], /* CJK Ideograph */ + ["\u6B74", "\u6B74"], /* CJK Ideograph */ + ["\u6B75", "\u6B75"], /* CJK Ideograph */ + ["\u6B76", "\u6B76"], /* CJK Ideograph */ + ["\u6B77", "\u6B77"], /* CJK Ideograph */ + ["\u6B78", "\u6B78"], /* CJK Ideograph */ + ["\u6B79", "\u6B79"], /* CJK Ideograph */ + ["\u6B7A", "\u6B7A"], /* CJK Ideograph */ + ["\u6B7B", "\u6B7B"], /* CJK Ideograph */ + ["\u6B7C", "\u6B7C"], /* CJK Ideograph */ + ["\u6B7D", "\u6B7D"], /* CJK Ideograph */ + ["\u6B7E", "\u6B7E"], /* CJK Ideograph */ + ["\u6B7F", "\u6B7F"], /* CJK Ideograph */ + ["\u6B80", "\u6B80"], /* CJK Ideograph */ + ["\u6B81", "\u6B81"], /* CJK Ideograph */ + ["\u6B82", "\u6B82"], /* CJK Ideograph */ + ["\u6B83", "\u6B83"], /* CJK Ideograph */ + ["\u6B84", "\u6B84"], /* CJK Ideograph */ + ["\u6B85", "\u6B85"], /* CJK Ideograph */ + ["\u6B86", "\u6B86"], /* CJK Ideograph */ + ["\u6B87", "\u6B87"], /* CJK Ideograph */ + ["\u6B88", "\u6B88"], /* CJK Ideograph */ + ["\u6B89", "\u6B89"], /* CJK Ideograph */ + ["\u6B8A", "\u6B8A"], /* CJK Ideograph */ + ["\u6B8B", "\u6B8B"], /* CJK Ideograph */ + ["\u6B8C", "\u6B8C"], /* CJK Ideograph */ + ["\u6B8D", "\u6B8D"], /* CJK Ideograph */ + ["\u6B8E", "\u6B8E"], /* CJK Ideograph */ + ["\u6B8F", "\u6B8F"], /* CJK Ideograph */ + ["\u6B90", "\u6B90"], /* CJK Ideograph */ + ["\u6B91", "\u6B91"], /* CJK Ideograph */ + ["\u6B92", "\u6B92"], /* CJK Ideograph */ + ["\u6B93", "\u6B93"], /* CJK Ideograph */ + ["\u6B94", "\u6B94"], /* CJK Ideograph */ + ["\u6B95", "\u6B95"], /* CJK Ideograph */ + ["\u6B96", "\u6B96"], /* CJK Ideograph */ + ["\u6B97", "\u6B97"], /* CJK Ideograph */ + ["\u6B98", "\u6B98"], /* CJK Ideograph */ + ["\u6B99", "\u6B99"], /* CJK Ideograph */ + ["\u6B9A", "\u6B9A"], /* CJK Ideograph */ + ["\u6B9B", "\u6B9B"], /* CJK Ideograph */ + ["\u6B9C", "\u6B9C"], /* CJK Ideograph */ + ["\u6B9D", "\u6B9D"], /* CJK Ideograph */ + ["\u6B9E", "\u6B9E"], /* CJK Ideograph */ + ["\u6B9F", "\u6B9F"], /* CJK Ideograph */ + ["\u6BA0", "\u6BA0"], /* CJK Ideograph */ + ["\u6BA1", "\u6BA1"], /* CJK Ideograph */ + ["\u6BA2", "\u6BA2"], /* CJK Ideograph */ + ["\u6BA3", "\u6BA3"], /* CJK Ideograph */ + ["\u6BA4", "\u6BA4"], /* CJK Ideograph */ + ["\u6BA5", "\u6BA5"], /* CJK Ideograph */ + ["\u6BA6", "\u6BA6"], /* CJK Ideograph */ + ["\u6BA7", "\u6BA7"], /* CJK Ideograph */ + ["\u6BA8", "\u6BA8"], /* CJK Ideograph */ + ["\u6BA9", "\u6BA9"], /* CJK Ideograph */ + ["\u6BAA", "\u6BAA"], /* CJK Ideograph */ + ["\u6BAB", "\u6BAB"], /* CJK Ideograph */ + ["\u6BAC", "\u6BAC"], /* CJK Ideograph */ + ["\u6BAD", "\u6BAD"], /* CJK Ideograph */ + ["\u6BAE", "\u6BAE"], /* CJK Ideograph */ + ["\u6BAF", "\u6BAF"], /* CJK Ideograph */ + ["\u6BB0", "\u6BB0"], /* CJK Ideograph */ + ["\u6BB1", "\u6BB1"], /* CJK Ideograph */ + ["\u6BB2", "\u6BB2"], /* CJK Ideograph */ + ["\u6BB3", "\u6BB3"], /* CJK Ideograph */ + ["\u6BB4", "\u6BB4"], /* CJK Ideograph */ + ["\u6BB5", "\u6BB5"], /* CJK Ideograph */ + ["\u6BB6", "\u6BB6"], /* CJK Ideograph */ + ["\u6BB7", "\u6BB7"], /* CJK Ideograph */ + ["\u6BB8", "\u6BB8"], /* CJK Ideograph */ + ["\u6BB9", "\u6BB9"], /* CJK Ideograph */ + ["\u6BBA", "\u6BBA"], /* CJK Ideograph */ + ["\u6BBB", "\u6BBB"], /* CJK Ideograph */ + ["\u6BBC", "\u6BBC"], /* CJK Ideograph */ + ["\u6BBD", "\u6BBD"], /* CJK Ideograph */ + ["\u6BBE", "\u6BBE"], /* CJK Ideograph */ + ["\u6BBF", "\u6BBF"], /* CJK Ideograph */ + ["\u6BC0", "\u6BC0"], /* CJK Ideograph */ + ["\u6BC1", "\u6BC1"], /* CJK Ideograph */ + ["\u6BC2", "\u6BC2"], /* CJK Ideograph */ + ["\u6BC3", "\u6BC3"], /* CJK Ideograph */ + ["\u6BC4", "\u6BC4"], /* CJK Ideograph */ + ["\u6BC5", "\u6BC5"], /* CJK Ideograph */ + ["\u6BC6", "\u6BC6"], /* CJK Ideograph */ + ["\u6BC7", "\u6BC7"], /* CJK Ideograph */ + ["\u6BC8", "\u6BC8"], /* CJK Ideograph */ + ["\u6BC9", "\u6BC9"], /* CJK Ideograph */ + ["\u6BCA", "\u6BCA"], /* CJK Ideograph */ + ["\u6BCB", "\u6BCB"], /* CJK Ideograph */ + ["\u6BCC", "\u6BCC"], /* CJK Ideograph */ + ["\u6BCD", "\u6BCD"], /* CJK Ideograph */ + ["\u6BCE", "\u6BCE"], /* CJK Ideograph */ + ["\u6BCF", "\u6BCF"], /* CJK Ideograph */ + ["\u6BD0", "\u6BD0"], /* CJK Ideograph */ + ["\u6BD1", "\u6BD1"], /* CJK Ideograph */ + ["\u6BD2", "\u6BD2"], /* CJK Ideograph */ + ["\u6BD3", "\u6BD3"], /* CJK Ideograph */ + ["\u6BD4", "\u6BD4"], /* CJK Ideograph */ + ["\u6BD5", "\u6BD5"], /* CJK Ideograph */ + ["\u6BD6", "\u6BD6"], /* CJK Ideograph */ + ["\u6BD7", "\u6BD7"], /* CJK Ideograph */ + ["\u6BD8", "\u6BD8"], /* CJK Ideograph */ + ["\u6BD9", "\u6BD9"], /* CJK Ideograph */ + ["\u6BDA", "\u6BDA"], /* CJK Ideograph */ + ["\u6BDB", "\u6BDB"], /* CJK Ideograph */ + ["\u6BDC", "\u6BDC"], /* CJK Ideograph */ + ["\u6BDD", "\u6BDD"], /* CJK Ideograph */ + ["\u6BDE", "\u6BDE"], /* CJK Ideograph */ + ["\u6BDF", "\u6BDF"], /* CJK Ideograph */ + ["\u6BE0", "\u6BE0"], /* CJK Ideograph */ + ["\u6BE1", "\u6BE1"], /* CJK Ideograph */ + ["\u6BE2", "\u6BE2"], /* CJK Ideograph */ + ["\u6BE3", "\u6BE3"], /* CJK Ideograph */ + ["\u6BE4", "\u6BE4"], /* CJK Ideograph */ + ["\u6BE5", "\u6BE5"], /* CJK Ideograph */ + ["\u6BE6", "\u6BE6"], /* CJK Ideograph */ + ["\u6BE7", "\u6BE7"], /* CJK Ideograph */ + ["\u6BE8", "\u6BE8"], /* CJK Ideograph */ + ["\u6BE9", "\u6BE9"], /* CJK Ideograph */ + ["\u6BEA", "\u6BEA"], /* CJK Ideograph */ + ["\u6BEB", "\u6BEB"], /* CJK Ideograph */ + ["\u6BEC", "\u6BEC"], /* CJK Ideograph */ + ["\u6BED", "\u6BED"], /* CJK Ideograph */ + ["\u6BEE", "\u6BEE"], /* CJK Ideograph */ + ["\u6BEF", "\u6BEF"], /* CJK Ideograph */ + ["\u6BF0", "\u6BF0"], /* CJK Ideograph */ + ["\u6BF1", "\u6BF1"], /* CJK Ideograph */ + ["\u6BF2", "\u6BF2"], /* CJK Ideograph */ + ["\u6BF3", "\u6BF3"], /* CJK Ideograph */ + ["\u6BF4", "\u6BF4"], /* CJK Ideograph */ + ["\u6BF5", "\u6BF5"], /* CJK Ideograph */ + ["\u6BF6", "\u6BF6"], /* CJK Ideograph */ + ["\u6BF7", "\u6BF7"], /* CJK Ideograph */ + ["\u6BF8", "\u6BF8"], /* CJK Ideograph */ + ["\u6BF9", "\u6BF9"], /* CJK Ideograph */ + ["\u6BFA", "\u6BFA"], /* CJK Ideograph */ + ["\u6BFB", "\u6BFB"], /* CJK Ideograph */ + ["\u6BFC", "\u6BFC"], /* CJK Ideograph */ + ["\u6BFD", "\u6BFD"], /* CJK Ideograph */ + ["\u6BFE", "\u6BFE"], /* CJK Ideograph */ + ["\u6BFF", "\u6BFF"], /* CJK Ideograph */ + ["\u6C00", "\u6C00"], /* CJK Ideograph */ + ["\u6C01", "\u6C01"], /* CJK Ideograph */ + ["\u6C02", "\u6C02"], /* CJK Ideograph */ + ["\u6C03", "\u6C03"], /* CJK Ideograph */ + ["\u6C04", "\u6C04"], /* CJK Ideograph */ + ["\u6C05", "\u6C05"], /* CJK Ideograph */ + ["\u6C06", "\u6C06"], /* CJK Ideograph */ + ["\u6C07", "\u6C07"], /* CJK Ideograph */ + ["\u6C08", "\u6C08"], /* CJK Ideograph */ + ["\u6C09", "\u6C09"], /* CJK Ideograph */ + ["\u6C0A", "\u6C0A"], /* CJK Ideograph */ + ["\u6C0B", "\u6C0B"], /* CJK Ideograph */ + ["\u6C0C", "\u6C0C"], /* CJK Ideograph */ + ["\u6C0D", "\u6C0D"], /* CJK Ideograph */ + ["\u6C0E", "\u6C0E"], /* CJK Ideograph */ + ["\u6C0F", "\u6C0F"], /* CJK Ideograph */ + ["\u6C10", "\u6C10"], /* CJK Ideograph */ + ["\u6C11", "\u6C11"], /* CJK Ideograph */ + ["\u6C12", "\u6C12"], /* CJK Ideograph */ + ["\u6C13", "\u6C13"], /* CJK Ideograph */ + ["\u6C14", "\u6C14"], /* CJK Ideograph */ + ["\u6C15", "\u6C15"], /* CJK Ideograph */ + ["\u6C16", "\u6C16"], /* CJK Ideograph */ + ["\u6C17", "\u6C17"], /* CJK Ideograph */ + ["\u6C18", "\u6C18"], /* CJK Ideograph */ + ["\u6C19", "\u6C19"], /* CJK Ideograph */ + ["\u6C1A", "\u6C1A"], /* CJK Ideograph */ + ["\u6C1B", "\u6C1B"], /* CJK Ideograph */ + ["\u6C1C", "\u6C1C"], /* CJK Ideograph */ + ["\u6C1D", "\u6C1D"], /* CJK Ideograph */ + ["\u6C1E", "\u6C1E"], /* CJK Ideograph */ + ["\u6C1F", "\u6C1F"], /* CJK Ideograph */ + ["\u6C20", "\u6C20"], /* CJK Ideograph */ + ["\u6C21", "\u6C21"], /* CJK Ideograph */ + ["\u6C22", "\u6C22"], /* CJK Ideograph */ + ["\u6C23", "\u6C23"], /* CJK Ideograph */ + ["\u6C24", "\u6C24"], /* CJK Ideograph */ + ["\u6C25", "\u6C25"], /* CJK Ideograph */ + ["\u6C26", "\u6C26"], /* CJK Ideograph */ + ["\u6C27", "\u6C27"], /* CJK Ideograph */ + ["\u6C28", "\u6C28"], /* CJK Ideograph */ + ["\u6C29", "\u6C29"], /* CJK Ideograph */ + ["\u6C2A", "\u6C2A"], /* CJK Ideograph */ + ["\u6C2B", "\u6C2B"], /* CJK Ideograph */ + ["\u6C2C", "\u6C2C"], /* CJK Ideograph */ + ["\u6C2D", "\u6C2D"], /* CJK Ideograph */ + ["\u6C2E", "\u6C2E"], /* CJK Ideograph */ + ["\u6C2F", "\u6C2F"], /* CJK Ideograph */ + ["\u6C30", "\u6C30"], /* CJK Ideograph */ + ["\u6C31", "\u6C31"], /* CJK Ideograph */ + ["\u6C32", "\u6C32"], /* CJK Ideograph */ + ["\u6C33", "\u6C33"], /* CJK Ideograph */ + ["\u6C34", "\u6C34"], /* CJK Ideograph */ + ["\u6C35", "\u6C35"], /* CJK Ideograph */ + ["\u6C36", "\u6C36"], /* CJK Ideograph */ + ["\u6C37", "\u6C37"], /* CJK Ideograph */ + ["\u6C38", "\u6C38"], /* CJK Ideograph */ + ["\u6C39", "\u6C39"], /* CJK Ideograph */ + ["\u6C3A", "\u6C3A"], /* CJK Ideograph */ + ["\u6C3B", "\u6C3B"], /* CJK Ideograph */ + ["\u6C3C", "\u6C3C"], /* CJK Ideograph */ + ["\u6C3D", "\u6C3D"], /* CJK Ideograph */ + ["\u6C3E", "\u6C3E"], /* CJK Ideograph */ + ["\u6C3F", "\u6C3F"], /* CJK Ideograph */ + ["\u6C40", "\u6C40"], /* CJK Ideograph */ + ["\u6C41", "\u6C41"], /* CJK Ideograph */ + ["\u6C42", "\u6C42"], /* CJK Ideograph */ + ["\u6C43", "\u6C43"], /* CJK Ideograph */ + ["\u6C44", "\u6C44"], /* CJK Ideograph */ + ["\u6C45", "\u6C45"], /* CJK Ideograph */ + ["\u6C46", "\u6C46"], /* CJK Ideograph */ + ["\u6C47", "\u6C47"], /* CJK Ideograph */ + ["\u6C48", "\u6C48"], /* CJK Ideograph */ + ["\u6C49", "\u6C49"], /* CJK Ideograph */ + ["\u6C4A", "\u6C4A"], /* CJK Ideograph */ + ["\u6C4B", "\u6C4B"], /* CJK Ideograph */ + ["\u6C4C", "\u6C4C"], /* CJK Ideograph */ + ["\u6C4D", "\u6C4D"], /* CJK Ideograph */ + ["\u6C4E", "\u6C4E"], /* CJK Ideograph */ + ["\u6C4F", "\u6C4F"], /* CJK Ideograph */ + ["\u6C50", "\u6C50"], /* CJK Ideograph */ + ["\u6C51", "\u6C51"], /* CJK Ideograph */ + ["\u6C52", "\u6C52"], /* CJK Ideograph */ + ["\u6C53", "\u6C53"], /* CJK Ideograph */ + ["\u6C54", "\u6C54"], /* CJK Ideograph */ + ["\u6C55", "\u6C55"], /* CJK Ideograph */ + ["\u6C56", "\u6C56"], /* CJK Ideograph */ + ["\u6C57", "\u6C57"], /* CJK Ideograph */ + ["\u6C58", "\u6C58"], /* CJK Ideograph */ + ["\u6C59", "\u6C59"], /* CJK Ideograph */ + ["\u6C5A", "\u6C5A"], /* CJK Ideograph */ + ["\u6C5B", "\u6C5B"], /* CJK Ideograph */ + ["\u6C5C", "\u6C5C"], /* CJK Ideograph */ + ["\u6C5D", "\u6C5D"], /* CJK Ideograph */ + ["\u6C5E", "\u6C5E"], /* CJK Ideograph */ + ["\u6C5F", "\u6C5F"], /* CJK Ideograph */ + ["\u6C60", "\u6C60"], /* CJK Ideograph */ + ["\u6C61", "\u6C61"], /* CJK Ideograph */ + ["\u6C62", "\u6C62"], /* CJK Ideograph */ + ["\u6C63", "\u6C63"], /* CJK Ideograph */ + ["\u6C64", "\u6C64"], /* CJK Ideograph */ + ["\u6C65", "\u6C65"], /* CJK Ideograph */ + ["\u6C66", "\u6C66"], /* CJK Ideograph */ + ["\u6C67", "\u6C67"], /* CJK Ideograph */ + ["\u6C68", "\u6C68"], /* CJK Ideograph */ + ["\u6C69", "\u6C69"], /* CJK Ideograph */ + ["\u6C6A", "\u6C6A"], /* CJK Ideograph */ + ["\u6C6B", "\u6C6B"], /* CJK Ideograph */ + ["\u6C6C", "\u6C6C"], /* CJK Ideograph */ + ["\u6C6D", "\u6C6D"], /* CJK Ideograph */ + ["\u6C6E", "\u6C6E"], /* CJK Ideograph */ + ["\u6C6F", "\u6C6F"], /* CJK Ideograph */ + ["\u6C70", "\u6C70"], /* CJK Ideograph */ + ["\u6C71", "\u6C71"], /* CJK Ideograph */ + ["\u6C72", "\u6C72"], /* CJK Ideograph */ + ["\u6C73", "\u6C73"], /* CJK Ideograph */ + ["\u6C74", "\u6C74"], /* CJK Ideograph */ + ["\u6C75", "\u6C75"], /* CJK Ideograph */ + ["\u6C76", "\u6C76"], /* CJK Ideograph */ + ["\u6C77", "\u6C77"], /* CJK Ideograph */ + ["\u6C78", "\u6C78"], /* CJK Ideograph */ + ["\u6C79", "\u6C79"], /* CJK Ideograph */ + ["\u6C7A", "\u6C7A"], /* CJK Ideograph */ + ["\u6C7B", "\u6C7B"], /* CJK Ideograph */ + ["\u6C7C", "\u6C7C"], /* CJK Ideograph */ + ["\u6C7D", "\u6C7D"], /* CJK Ideograph */ + ["\u6C7E", "\u6C7E"], /* CJK Ideograph */ + ["\u6C7F", "\u6C7F"], /* CJK Ideograph */ + ["\u6C80", "\u6C80"], /* CJK Ideograph */ + ["\u6C81", "\u6C81"], /* CJK Ideograph */ + ["\u6C82", "\u6C82"], /* CJK Ideograph */ + ["\u6C83", "\u6C83"], /* CJK Ideograph */ + ["\u6C84", "\u6C84"], /* CJK Ideograph */ + ["\u6C85", "\u6C85"], /* CJK Ideograph */ + ["\u6C86", "\u6C86"], /* CJK Ideograph */ + ["\u6C87", "\u6C87"], /* CJK Ideograph */ + ["\u6C88", "\u6C88"], /* CJK Ideograph */ + ["\u6C89", "\u6C89"], /* CJK Ideograph */ + ["\u6C8A", "\u6C8A"], /* CJK Ideograph */ + ["\u6C8B", "\u6C8B"], /* CJK Ideograph */ + ["\u6C8C", "\u6C8C"], /* CJK Ideograph */ + ["\u6C8D", "\u6C8D"], /* CJK Ideograph */ + ["\u6C8E", "\u6C8E"], /* CJK Ideograph */ + ["\u6C8F", "\u6C8F"], /* CJK Ideograph */ + ["\u6C90", "\u6C90"], /* CJK Ideograph */ + ["\u6C91", "\u6C91"], /* CJK Ideograph */ + ["\u6C92", "\u6C92"], /* CJK Ideograph */ + ["\u6C93", "\u6C93"], /* CJK Ideograph */ + ["\u6C94", "\u6C94"], /* CJK Ideograph */ + ["\u6C95", "\u6C95"], /* CJK Ideograph */ + ["\u6C96", "\u6C96"], /* CJK Ideograph */ + ["\u6C97", "\u6C97"], /* CJK Ideograph */ + ["\u6C98", "\u6C98"], /* CJK Ideograph */ + ["\u6C99", "\u6C99"], /* CJK Ideograph */ + ["\u6C9A", "\u6C9A"], /* CJK Ideograph */ + ["\u6C9B", "\u6C9B"], /* CJK Ideograph */ + ["\u6C9C", "\u6C9C"], /* CJK Ideograph */ + ["\u6C9D", "\u6C9D"], /* CJK Ideograph */ + ["\u6C9E", "\u6C9E"], /* CJK Ideograph */ + ["\u6C9F", "\u6C9F"], /* CJK Ideograph */ + ["\u6CA0", "\u6CA0"], /* CJK Ideograph */ + ["\u6CA1", "\u6CA1"], /* CJK Ideograph */ + ["\u6CA2", "\u6CA2"], /* CJK Ideograph */ + ["\u6CA3", "\u6CA3"], /* CJK Ideograph */ + ["\u6CA4", "\u6CA4"], /* CJK Ideograph */ + ["\u6CA5", "\u6CA5"], /* CJK Ideograph */ + ["\u6CA6", "\u6CA6"], /* CJK Ideograph */ + ["\u6CA7", "\u6CA7"], /* CJK Ideograph */ + ["\u6CA8", "\u6CA8"], /* CJK Ideograph */ + ["\u6CA9", "\u6CA9"], /* CJK Ideograph */ + ["\u6CAA", "\u6CAA"], /* CJK Ideograph */ + ["\u6CAB", "\u6CAB"], /* CJK Ideograph */ + ["\u6CAC", "\u6CAC"], /* CJK Ideograph */ + ["\u6CAD", "\u6CAD"], /* CJK Ideograph */ + ["\u6CAE", "\u6CAE"], /* CJK Ideograph */ + ["\u6CAF", "\u6CAF"], /* CJK Ideograph */ + ["\u6CB0", "\u6CB0"], /* CJK Ideograph */ + ["\u6CB1", "\u6CB1"], /* CJK Ideograph */ + ["\u6CB2", "\u6CB2"], /* CJK Ideograph */ + ["\u6CB3", "\u6CB3"], /* CJK Ideograph */ + ["\u6CB4", "\u6CB4"], /* CJK Ideograph */ + ["\u6CB5", "\u6CB5"], /* CJK Ideograph */ + ["\u6CB6", "\u6CB6"], /* CJK Ideograph */ + ["\u6CB7", "\u6CB7"], /* CJK Ideograph */ + ["\u6CB8", "\u6CB8"], /* CJK Ideograph */ + ["\u6CB9", "\u6CB9"], /* CJK Ideograph */ + ["\u6CBA", "\u6CBA"], /* CJK Ideograph */ + ["\u6CBB", "\u6CBB"], /* CJK Ideograph */ + ["\u6CBC", "\u6CBC"], /* CJK Ideograph */ + ["\u6CBD", "\u6CBD"], /* CJK Ideograph */ + ["\u6CBE", "\u6CBE"], /* CJK Ideograph */ + ["\u6CBF", "\u6CBF"], /* CJK Ideograph */ + ["\u6CC0", "\u6CC0"], /* CJK Ideograph */ + ["\u6CC1", "\u6CC1"], /* CJK Ideograph */ + ["\u6CC2", "\u6CC2"], /* CJK Ideograph */ + ["\u6CC3", "\u6CC3"], /* CJK Ideograph */ + ["\u6CC4", "\u6CC4"], /* CJK Ideograph */ + ["\u6CC5", "\u6CC5"], /* CJK Ideograph */ + ["\u6CC6", "\u6CC6"], /* CJK Ideograph */ + ["\u6CC7", "\u6CC7"], /* CJK Ideograph */ + ["\u6CC8", "\u6CC8"], /* CJK Ideograph */ + ["\u6CC9", "\u6CC9"], /* CJK Ideograph */ + ["\u6CCA", "\u6CCA"], /* CJK Ideograph */ + ["\u6CCB", "\u6CCB"], /* CJK Ideograph */ + ["\u6CCC", "\u6CCC"], /* CJK Ideograph */ + ["\u6CCD", "\u6CCD"], /* CJK Ideograph */ + ["\u6CCE", "\u6CCE"], /* CJK Ideograph */ + ["\u6CCF", "\u6CCF"], /* CJK Ideograph */ + ["\u6CD0", "\u6CD0"], /* CJK Ideograph */ + ["\u6CD1", "\u6CD1"], /* CJK Ideograph */ + ["\u6CD2", "\u6CD2"], /* CJK Ideograph */ + ["\u6CD3", "\u6CD3"], /* CJK Ideograph */ + ["\u6CD4", "\u6CD4"], /* CJK Ideograph */ + ["\u6CD5", "\u6CD5"], /* CJK Ideograph */ + ["\u6CD6", "\u6CD6"], /* CJK Ideograph */ + ["\u6CD7", "\u6CD7"], /* CJK Ideograph */ + ["\u6CD8", "\u6CD8"], /* CJK Ideograph */ + ["\u6CD9", "\u6CD9"], /* CJK Ideograph */ + ["\u6CDA", "\u6CDA"], /* CJK Ideograph */ + ["\u6CDB", "\u6CDB"], /* CJK Ideograph */ + ["\u6CDC", "\u6CDC"], /* CJK Ideograph */ + ["\u6CDD", "\u6CDD"], /* CJK Ideograph */ + ["\u6CDE", "\u6CDE"], /* CJK Ideograph */ + ["\u6CDF", "\u6CDF"], /* CJK Ideograph */ + ["\u6CE0", "\u6CE0"], /* CJK Ideograph */ + ["\u6CE1", "\u6CE1"], /* CJK Ideograph */ + ["\u6CE2", "\u6CE2"], /* CJK Ideograph */ + ["\u6CE3", "\u6CE3"], /* CJK Ideograph */ + ["\u6CE4", "\u6CE4"], /* CJK Ideograph */ + ["\u6CE5", "\u6CE5"], /* CJK Ideograph */ + ["\u6CE6", "\u6CE6"], /* CJK Ideograph */ + ["\u6CE7", "\u6CE7"], /* CJK Ideograph */ + ["\u6CE8", "\u6CE8"], /* CJK Ideograph */ + ["\u6CE9", "\u6CE9"], /* CJK Ideograph */ + ["\u6CEA", "\u6CEA"], /* CJK Ideograph */ + ["\u6CEB", "\u6CEB"], /* CJK Ideograph */ + ["\u6CEC", "\u6CEC"], /* CJK Ideograph */ + ["\u6CED", "\u6CED"], /* CJK Ideograph */ + ["\u6CEE", "\u6CEE"], /* CJK Ideograph */ + ["\u6CEF", "\u6CEF"], /* CJK Ideograph */ + ["\u6CF0", "\u6CF0"], /* CJK Ideograph */ + ["\u6CF1", "\u6CF1"], /* CJK Ideograph */ + ["\u6CF2", "\u6CF2"], /* CJK Ideograph */ + ["\u6CF3", "\u6CF3"], /* CJK Ideograph */ + ["\u6CF4", "\u6CF4"], /* CJK Ideograph */ + ["\u6CF5", "\u6CF5"], /* CJK Ideograph */ + ["\u6CF6", "\u6CF6"], /* CJK Ideograph */ + ["\u6CF7", "\u6CF7"], /* CJK Ideograph */ + ["\u6CF8", "\u6CF8"], /* CJK Ideograph */ + ["\u6CF9", "\u6CF9"], /* CJK Ideograph */ + ["\u6CFA", "\u6CFA"], /* CJK Ideograph */ + ["\u6CFB", "\u6CFB"], /* CJK Ideograph */ + ["\u6CFC", "\u6CFC"], /* CJK Ideograph */ + ["\u6CFD", "\u6CFD"], /* CJK Ideograph */ + ["\u6CFE", "\u6CFE"], /* CJK Ideograph */ + ["\u6CFF", "\u6CFF"], /* CJK Ideograph */ + ["\u6D00", "\u6D00"], /* CJK Ideograph */ + ["\u6D01", "\u6D01"], /* CJK Ideograph */ + ["\u6D02", "\u6D02"], /* CJK Ideograph */ + ["\u6D03", "\u6D03"], /* CJK Ideograph */ + ["\u6D04", "\u6D04"], /* CJK Ideograph */ + ["\u6D05", "\u6D05"], /* CJK Ideograph */ + ["\u6D06", "\u6D06"], /* CJK Ideograph */ + ["\u6D07", "\u6D07"], /* CJK Ideograph */ + ["\u6D08", "\u6D08"], /* CJK Ideograph */ + ["\u6D09", "\u6D09"], /* CJK Ideograph */ + ["\u6D0A", "\u6D0A"], /* CJK Ideograph */ + ["\u6D0B", "\u6D0B"], /* CJK Ideograph */ + ["\u6D0C", "\u6D0C"], /* CJK Ideograph */ + ["\u6D0D", "\u6D0D"], /* CJK Ideograph */ + ["\u6D0E", "\u6D0E"], /* CJK Ideograph */ + ["\u6D0F", "\u6D0F"], /* CJK Ideograph */ + ["\u6D10", "\u6D10"], /* CJK Ideograph */ + ["\u6D11", "\u6D11"], /* CJK Ideograph */ + ["\u6D12", "\u6D12"], /* CJK Ideograph */ + ["\u6D13", "\u6D13"], /* CJK Ideograph */ + ["\u6D14", "\u6D14"], /* CJK Ideograph */ + ["\u6D15", "\u6D15"], /* CJK Ideograph */ + ["\u6D16", "\u6D16"], /* CJK Ideograph */ + ["\u6D17", "\u6D17"], /* CJK Ideograph */ + ["\u6D18", "\u6D18"], /* CJK Ideograph */ + ["\u6D19", "\u6D19"], /* CJK Ideograph */ + ["\u6D1A", "\u6D1A"], /* CJK Ideograph */ + ["\u6D1B", "\u6D1B"], /* CJK Ideograph */ + ["\u6D1C", "\u6D1C"], /* CJK Ideograph */ + ["\u6D1D", "\u6D1D"], /* CJK Ideograph */ + ["\u6D1E", "\u6D1E"], /* CJK Ideograph */ + ["\u6D1F", "\u6D1F"], /* CJK Ideograph */ + ["\u6D20", "\u6D20"], /* CJK Ideograph */ + ["\u6D21", "\u6D21"], /* CJK Ideograph */ + ["\u6D22", "\u6D22"], /* CJK Ideograph */ + ["\u6D23", "\u6D23"], /* CJK Ideograph */ + ["\u6D24", "\u6D24"], /* CJK Ideograph */ + ["\u6D25", "\u6D25"], /* CJK Ideograph */ + ["\u6D26", "\u6D26"], /* CJK Ideograph */ + ["\u6D27", "\u6D27"], /* CJK Ideograph */ + ["\u6D28", "\u6D28"], /* CJK Ideograph */ + ["\u6D29", "\u6D29"], /* CJK Ideograph */ + ["\u6D2A", "\u6D2A"], /* CJK Ideograph */ + ["\u6D2B", "\u6D2B"], /* CJK Ideograph */ + ["\u6D2C", "\u6D2C"], /* CJK Ideograph */ + ["\u6D2D", "\u6D2D"], /* CJK Ideograph */ + ["\u6D2E", "\u6D2E"], /* CJK Ideograph */ + ["\u6D2F", "\u6D2F"], /* CJK Ideograph */ + ["\u6D30", "\u6D30"], /* CJK Ideograph */ + ["\u6D31", "\u6D31"], /* CJK Ideograph */ + ["\u6D32", "\u6D32"], /* CJK Ideograph */ + ["\u6D33", "\u6D33"], /* CJK Ideograph */ + ["\u6D34", "\u6D34"], /* CJK Ideograph */ + ["\u6D35", "\u6D35"], /* CJK Ideograph */ + ["\u6D36", "\u6D36"], /* CJK Ideograph */ + ["\u6D37", "\u6D37"], /* CJK Ideograph */ + ["\u6D38", "\u6D38"], /* CJK Ideograph */ + ["\u6D39", "\u6D39"], /* CJK Ideograph */ + ["\u6D3A", "\u6D3A"], /* CJK Ideograph */ + ["\u6D3B", "\u6D3B"], /* CJK Ideograph */ + ["\u6D3C", "\u6D3C"], /* CJK Ideograph */ + ["\u6D3D", "\u6D3D"], /* CJK Ideograph */ + ["\u6D3E", "\u6D3E"], /* CJK Ideograph */ + ["\u6D3F", "\u6D3F"], /* CJK Ideograph */ + ["\u6D40", "\u6D40"], /* CJK Ideograph */ + ["\u6D41", "\u6D41"], /* CJK Ideograph */ + ["\u6D42", "\u6D42"], /* CJK Ideograph */ + ["\u6D43", "\u6D43"], /* CJK Ideograph */ + ["\u6D44", "\u6D44"], /* CJK Ideograph */ + ["\u6D45", "\u6D45"], /* CJK Ideograph */ + ["\u6D46", "\u6D46"], /* CJK Ideograph */ + ["\u6D47", "\u6D47"], /* CJK Ideograph */ + ["\u6D48", "\u6D48"], /* CJK Ideograph */ + ["\u6D49", "\u6D49"], /* CJK Ideograph */ + ["\u6D4A", "\u6D4A"], /* CJK Ideograph */ + ["\u6D4B", "\u6D4B"], /* CJK Ideograph */ + ["\u6D4C", "\u6D4C"], /* CJK Ideograph */ + ["\u6D4D", "\u6D4D"], /* CJK Ideograph */ + ["\u6D4E", "\u6D4E"], /* CJK Ideograph */ + ["\u6D4F", "\u6D4F"], /* CJK Ideograph */ + ["\u6D50", "\u6D50"], /* CJK Ideograph */ + ["\u6D51", "\u6D51"], /* CJK Ideograph */ + ["\u6D52", "\u6D52"], /* CJK Ideograph */ + ["\u6D53", "\u6D53"], /* CJK Ideograph */ + ["\u6D54", "\u6D54"], /* CJK Ideograph */ + ["\u6D55", "\u6D55"], /* CJK Ideograph */ + ["\u6D56", "\u6D56"], /* CJK Ideograph */ + ["\u6D57", "\u6D57"], /* CJK Ideograph */ + ["\u6D58", "\u6D58"], /* CJK Ideograph */ + ["\u6D59", "\u6D59"], /* CJK Ideograph */ + ["\u6D5A", "\u6D5A"], /* CJK Ideograph */ + ["\u6D5B", "\u6D5B"], /* CJK Ideograph */ + ["\u6D5C", "\u6D5C"], /* CJK Ideograph */ + ["\u6D5D", "\u6D5D"], /* CJK Ideograph */ + ["\u6D5E", "\u6D5E"], /* CJK Ideograph */ + ["\u6D5F", "\u6D5F"], /* CJK Ideograph */ + ["\u6D60", "\u6D60"], /* CJK Ideograph */ + ["\u6D61", "\u6D61"], /* CJK Ideograph */ + ["\u6D62", "\u6D62"], /* CJK Ideograph */ + ["\u6D63", "\u6D63"], /* CJK Ideograph */ + ["\u6D64", "\u6D64"], /* CJK Ideograph */ + ["\u6D65", "\u6D65"], /* CJK Ideograph */ + ["\u6D66", "\u6D66"], /* CJK Ideograph */ + ["\u6D67", "\u6D67"], /* CJK Ideograph */ + ["\u6D68", "\u6D68"], /* CJK Ideograph */ + ["\u6D69", "\u6D69"], /* CJK Ideograph */ + ["\u6D6A", "\u6D6A"], /* CJK Ideograph */ + ["\u6D6B", "\u6D6B"], /* CJK Ideograph */ + ["\u6D6C", "\u6D6C"], /* CJK Ideograph */ + ["\u6D6D", "\u6D6D"], /* CJK Ideograph */ + ["\u6D6E", "\u6D6E"], /* CJK Ideograph */ + ["\u6D6F", "\u6D6F"], /* CJK Ideograph */ + ["\u6D70", "\u6D70"], /* CJK Ideograph */ + ["\u6D71", "\u6D71"], /* CJK Ideograph */ + ["\u6D72", "\u6D72"], /* CJK Ideograph */ + ["\u6D73", "\u6D73"], /* CJK Ideograph */ + ["\u6D74", "\u6D74"], /* CJK Ideograph */ + ["\u6D75", "\u6D75"], /* CJK Ideograph */ + ["\u6D76", "\u6D76"], /* CJK Ideograph */ + ["\u6D77", "\u6D77"], /* CJK Ideograph */ + ["\u6D78", "\u6D78"], /* CJK Ideograph */ + ["\u6D79", "\u6D79"], /* CJK Ideograph */ + ["\u6D7A", "\u6D7A"], /* CJK Ideograph */ + ["\u6D7B", "\u6D7B"], /* CJK Ideograph */ + ["\u6D7C", "\u6D7C"], /* CJK Ideograph */ + ["\u6D7D", "\u6D7D"], /* CJK Ideograph */ + ["\u6D7E", "\u6D7E"], /* CJK Ideograph */ + ["\u6D7F", "\u6D7F"], /* CJK Ideograph */ + ["\u6D80", "\u6D80"], /* CJK Ideograph */ + ["\u6D81", "\u6D81"], /* CJK Ideograph */ + ["\u6D82", "\u6D82"], /* CJK Ideograph */ + ["\u6D83", "\u6D83"], /* CJK Ideograph */ + ["\u6D84", "\u6D84"], /* CJK Ideograph */ + ["\u6D85", "\u6D85"], /* CJK Ideograph */ + ["\u6D86", "\u6D86"], /* CJK Ideograph */ + ["\u6D87", "\u6D87"], /* CJK Ideograph */ + ["\u6D88", "\u6D88"], /* CJK Ideograph */ + ["\u6D89", "\u6D89"], /* CJK Ideograph */ + ["\u6D8A", "\u6D8A"], /* CJK Ideograph */ + ["\u6D8B", "\u6D8B"], /* CJK Ideograph */ + ["\u6D8C", "\u6D8C"], /* CJK Ideograph */ + ["\u6D8D", "\u6D8D"], /* CJK Ideograph */ + ["\u6D8E", "\u6D8E"], /* CJK Ideograph */ + ["\u6D8F", "\u6D8F"], /* CJK Ideograph */ + ["\u6D90", "\u6D90"], /* CJK Ideograph */ + ["\u6D91", "\u6D91"], /* CJK Ideograph */ + ["\u6D92", "\u6D92"], /* CJK Ideograph */ + ["\u6D93", "\u6D93"], /* CJK Ideograph */ + ["\u6D94", "\u6D94"], /* CJK Ideograph */ + ["\u6D95", "\u6D95"], /* CJK Ideograph */ + ["\u6D96", "\u6D96"], /* CJK Ideograph */ + ["\u6D97", "\u6D97"], /* CJK Ideograph */ + ["\u6D98", "\u6D98"], /* CJK Ideograph */ + ["\u6D99", "\u6D99"], /* CJK Ideograph */ + ["\u6D9A", "\u6D9A"], /* CJK Ideograph */ + ["\u6D9B", "\u6D9B"], /* CJK Ideograph */ + ["\u6D9C", "\u6D9C"], /* CJK Ideograph */ + ["\u6D9D", "\u6D9D"], /* CJK Ideograph */ + ["\u6D9E", "\u6D9E"], /* CJK Ideograph */ + ["\u6D9F", "\u6D9F"], /* CJK Ideograph */ + ["\u6DA0", "\u6DA0"], /* CJK Ideograph */ + ["\u6DA1", "\u6DA1"], /* CJK Ideograph */ + ["\u6DA2", "\u6DA2"], /* CJK Ideograph */ + ["\u6DA3", "\u6DA3"], /* CJK Ideograph */ + ["\u6DA4", "\u6DA4"], /* CJK Ideograph */ + ["\u6DA5", "\u6DA5"], /* CJK Ideograph */ + ["\u6DA6", "\u6DA6"], /* CJK Ideograph */ + ["\u6DA7", "\u6DA7"], /* CJK Ideograph */ + ["\u6DA8", "\u6DA8"], /* CJK Ideograph */ + ["\u6DA9", "\u6DA9"], /* CJK Ideograph */ + ["\u6DAA", "\u6DAA"], /* CJK Ideograph */ + ["\u6DAB", "\u6DAB"], /* CJK Ideograph */ + ["\u6DAC", "\u6DAC"], /* CJK Ideograph */ + ["\u6DAD", "\u6DAD"], /* CJK Ideograph */ + ["\u6DAE", "\u6DAE"], /* CJK Ideograph */ + ["\u6DAF", "\u6DAF"], /* CJK Ideograph */ + ["\u6DB0", "\u6DB0"], /* CJK Ideograph */ + ["\u6DB1", "\u6DB1"], /* CJK Ideograph */ + ["\u6DB2", "\u6DB2"], /* CJK Ideograph */ + ["\u6DB3", "\u6DB3"], /* CJK Ideograph */ + ["\u6DB4", "\u6DB4"], /* CJK Ideograph */ + ["\u6DB5", "\u6DB5"], /* CJK Ideograph */ + ["\u6DB6", "\u6DB6"], /* CJK Ideograph */ + ["\u6DB7", "\u6DB7"], /* CJK Ideograph */ + ["\u6DB8", "\u6DB8"], /* CJK Ideograph */ + ["\u6DB9", "\u6DB9"], /* CJK Ideograph */ + ["\u6DBA", "\u6DBA"], /* CJK Ideograph */ + ["\u6DBB", "\u6DBB"], /* CJK Ideograph */ + ["\u6DBC", "\u6DBC"], /* CJK Ideograph */ + ["\u6DBD", "\u6DBD"], /* CJK Ideograph */ + ["\u6DBE", "\u6DBE"], /* CJK Ideograph */ + ["\u6DBF", "\u6DBF"], /* CJK Ideograph */ + ["\u6DC0", "\u6DC0"], /* CJK Ideograph */ + ["\u6DC1", "\u6DC1"], /* CJK Ideograph */ + ["\u6DC2", "\u6DC2"], /* CJK Ideograph */ + ["\u6DC3", "\u6DC3"], /* CJK Ideograph */ + ["\u6DC4", "\u6DC4"], /* CJK Ideograph */ + ["\u6DC5", "\u6DC5"], /* CJK Ideograph */ + ["\u6DC6", "\u6DC6"], /* CJK Ideograph */ + ["\u6DC7", "\u6DC7"], /* CJK Ideograph */ + ["\u6DC8", "\u6DC8"], /* CJK Ideograph */ + ["\u6DC9", "\u6DC9"], /* CJK Ideograph */ + ["\u6DCA", "\u6DCA"], /* CJK Ideograph */ + ["\u6DCB", "\u6DCB"], /* CJK Ideograph */ + ["\u6DCC", "\u6DCC"], /* CJK Ideograph */ + ["\u6DCD", "\u6DCD"], /* CJK Ideograph */ + ["\u6DCE", "\u6DCE"], /* CJK Ideograph */ + ["\u6DCF", "\u6DCF"], /* CJK Ideograph */ + ["\u6DD0", "\u6DD0"], /* CJK Ideograph */ + ["\u6DD1", "\u6DD1"], /* CJK Ideograph */ + ["\u6DD2", "\u6DD2"], /* CJK Ideograph */ + ["\u6DD3", "\u6DD3"], /* CJK Ideograph */ + ["\u6DD4", "\u6DD4"], /* CJK Ideograph */ + ["\u6DD5", "\u6DD5"], /* CJK Ideograph */ + ["\u6DD6", "\u6DD6"], /* CJK Ideograph */ + ["\u6DD7", "\u6DD7"], /* CJK Ideograph */ + ["\u6DD8", "\u6DD8"], /* CJK Ideograph */ + ["\u6DD9", "\u6DD9"], /* CJK Ideograph */ + ["\u6DDA", "\u6DDA"], /* CJK Ideograph */ + ["\u6DDB", "\u6DDB"], /* CJK Ideograph */ + ["\u6DDC", "\u6DDC"], /* CJK Ideograph */ + ["\u6DDD", "\u6DDD"], /* CJK Ideograph */ + ["\u6DDE", "\u6DDE"], /* CJK Ideograph */ + ["\u6DDF", "\u6DDF"], /* CJK Ideograph */ + ["\u6DE0", "\u6DE0"], /* CJK Ideograph */ + ["\u6DE1", "\u6DE1"], /* CJK Ideograph */ + ["\u6DE2", "\u6DE2"], /* CJK Ideograph */ + ["\u6DE3", "\u6DE3"], /* CJK Ideograph */ + ["\u6DE4", "\u6DE4"], /* CJK Ideograph */ + ["\u6DE5", "\u6DE5"], /* CJK Ideograph */ + ["\u6DE6", "\u6DE6"], /* CJK Ideograph */ + ["\u6DE7", "\u6DE7"], /* CJK Ideograph */ + ["\u6DE8", "\u6DE8"], /* CJK Ideograph */ + ["\u6DE9", "\u6DE9"], /* CJK Ideograph */ + ["\u6DEA", "\u6DEA"], /* CJK Ideograph */ + ["\u6DEB", "\u6DEB"], /* CJK Ideograph */ + ["\u6DEC", "\u6DEC"], /* CJK Ideograph */ + ["\u6DED", "\u6DED"], /* CJK Ideograph */ + ["\u6DEE", "\u6DEE"], /* CJK Ideograph */ + ["\u6DEF", "\u6DEF"], /* CJK Ideograph */ + ["\u6DF0", "\u6DF0"], /* CJK Ideograph */ + ["\u6DF1", "\u6DF1"], /* CJK Ideograph */ + ["\u6DF2", "\u6DF2"], /* CJK Ideograph */ + ["\u6DF3", "\u6DF3"], /* CJK Ideograph */ + ["\u6DF4", "\u6DF4"], /* CJK Ideograph */ + ["\u6DF5", "\u6DF5"], /* CJK Ideograph */ + ["\u6DF6", "\u6DF6"], /* CJK Ideograph */ + ["\u6DF7", "\u6DF7"], /* CJK Ideograph */ + ["\u6DF8", "\u6DF8"], /* CJK Ideograph */ + ["\u6DF9", "\u6DF9"], /* CJK Ideograph */ + ["\u6DFA", "\u6DFA"], /* CJK Ideograph */ + ["\u6DFB", "\u6DFB"], /* CJK Ideograph */ + ["\u6DFC", "\u6DFC"], /* CJK Ideograph */ + ["\u6DFD", "\u6DFD"], /* CJK Ideograph */ + ["\u6DFE", "\u6DFE"], /* CJK Ideograph */ + ["\u6DFF", "\u6DFF"], /* CJK Ideograph */ + ["\u6E00", "\u6E00"], /* CJK Ideograph */ + ["\u6E01", "\u6E01"], /* CJK Ideograph */ + ["\u6E02", "\u6E02"], /* CJK Ideograph */ + ["\u6E03", "\u6E03"], /* CJK Ideograph */ + ["\u6E04", "\u6E04"], /* CJK Ideograph */ + ["\u6E05", "\u6E05"], /* CJK Ideograph */ + ["\u6E06", "\u6E06"], /* CJK Ideograph */ + ["\u6E07", "\u6E07"], /* CJK Ideograph */ + ["\u6E08", "\u6E08"], /* CJK Ideograph */ + ["\u6E09", "\u6E09"], /* CJK Ideograph */ + ["\u6E0A", "\u6E0A"], /* CJK Ideograph */ + ["\u6E0B", "\u6E0B"], /* CJK Ideograph */ + ["\u6E0C", "\u6E0C"], /* CJK Ideograph */ + ["\u6E0D", "\u6E0D"], /* CJK Ideograph */ + ["\u6E0E", "\u6E0E"], /* CJK Ideograph */ + ["\u6E0F", "\u6E0F"], /* CJK Ideograph */ + ["\u6E10", "\u6E10"], /* CJK Ideograph */ + ["\u6E11", "\u6E11"], /* CJK Ideograph */ + ["\u6E12", "\u6E12"], /* CJK Ideograph */ + ["\u6E13", "\u6E13"], /* CJK Ideograph */ + ["\u6E14", "\u6E14"], /* CJK Ideograph */ + ["\u6E15", "\u6E15"], /* CJK Ideograph */ + ["\u6E16", "\u6E16"], /* CJK Ideograph */ + ["\u6E17", "\u6E17"], /* CJK Ideograph */ + ["\u6E18", "\u6E18"], /* CJK Ideograph */ + ["\u6E19", "\u6E19"], /* CJK Ideograph */ + ["\u6E1A", "\u6E1A"], /* CJK Ideograph */ + ["\u6E1B", "\u6E1B"], /* CJK Ideograph */ + ["\u6E1C", "\u6E1C"], /* CJK Ideograph */ + ["\u6E1D", "\u6E1D"], /* CJK Ideograph */ + ["\u6E1E", "\u6E1E"], /* CJK Ideograph */ + ["\u6E1F", "\u6E1F"], /* CJK Ideograph */ + ["\u6E20", "\u6E20"], /* CJK Ideograph */ + ["\u6E21", "\u6E21"], /* CJK Ideograph */ + ["\u6E22", "\u6E22"], /* CJK Ideograph */ + ["\u6E23", "\u6E23"], /* CJK Ideograph */ + ["\u6E24", "\u6E24"], /* CJK Ideograph */ + ["\u6E25", "\u6E25"], /* CJK Ideograph */ + ["\u6E26", "\u6E26"], /* CJK Ideograph */ + ["\u6E27", "\u6E27"], /* CJK Ideograph */ + ["\u6E28", "\u6E28"], /* CJK Ideograph */ + ["\u6E29", "\u6E29"], /* CJK Ideograph */ + ["\u6E2A", "\u6E2A"], /* CJK Ideograph */ + ["\u6E2B", "\u6E2B"], /* CJK Ideograph */ + ["\u6E2C", "\u6E2C"], /* CJK Ideograph */ + ["\u6E2D", "\u6E2D"], /* CJK Ideograph */ + ["\u6E2E", "\u6E2E"], /* CJK Ideograph */ + ["\u6E2F", "\u6E2F"], /* CJK Ideograph */ + ["\u6E30", "\u6E30"], /* CJK Ideograph */ + ["\u6E31", "\u6E31"], /* CJK Ideograph */ + ["\u6E32", "\u6E32"], /* CJK Ideograph */ + ["\u6E33", "\u6E33"], /* CJK Ideograph */ + ["\u6E34", "\u6E34"], /* CJK Ideograph */ + ["\u6E35", "\u6E35"], /* CJK Ideograph */ + ["\u6E36", "\u6E36"], /* CJK Ideograph */ + ["\u6E37", "\u6E37"], /* CJK Ideograph */ + ["\u6E38", "\u6E38"], /* CJK Ideograph */ + ["\u6E39", "\u6E39"], /* CJK Ideograph */ + ["\u6E3A", "\u6E3A"], /* CJK Ideograph */ + ["\u6E3B", "\u6E3B"], /* CJK Ideograph */ + ["\u6E3C", "\u6E3C"], /* CJK Ideograph */ + ["\u6E3D", "\u6E3D"], /* CJK Ideograph */ + ["\u6E3E", "\u6E3E"], /* CJK Ideograph */ + ["\u6E3F", "\u6E3F"], /* CJK Ideograph */ + ["\u6E40", "\u6E40"], /* CJK Ideograph */ + ["\u6E41", "\u6E41"], /* CJK Ideograph */ + ["\u6E42", "\u6E42"], /* CJK Ideograph */ + ["\u6E43", "\u6E43"], /* CJK Ideograph */ + ["\u6E44", "\u6E44"], /* CJK Ideograph */ + ["\u6E45", "\u6E45"], /* CJK Ideograph */ + ["\u6E46", "\u6E46"], /* CJK Ideograph */ + ["\u6E47", "\u6E47"], /* CJK Ideograph */ + ["\u6E48", "\u6E48"], /* CJK Ideograph */ + ["\u6E49", "\u6E49"], /* CJK Ideograph */ + ["\u6E4A", "\u6E4A"], /* CJK Ideograph */ + ["\u6E4B", "\u6E4B"], /* CJK Ideograph */ + ["\u6E4C", "\u6E4C"], /* CJK Ideograph */ + ["\u6E4D", "\u6E4D"], /* CJK Ideograph */ + ["\u6E4E", "\u6E4E"], /* CJK Ideograph */ + ["\u6E4F", "\u6E4F"], /* CJK Ideograph */ + ["\u6E50", "\u6E50"], /* CJK Ideograph */ + ["\u6E51", "\u6E51"], /* CJK Ideograph */ + ["\u6E52", "\u6E52"], /* CJK Ideograph */ + ["\u6E53", "\u6E53"], /* CJK Ideograph */ + ["\u6E54", "\u6E54"], /* CJK Ideograph */ + ["\u6E55", "\u6E55"], /* CJK Ideograph */ + ["\u6E56", "\u6E56"], /* CJK Ideograph */ + ["\u6E57", "\u6E57"], /* CJK Ideograph */ + ["\u6E58", "\u6E58"], /* CJK Ideograph */ + ["\u6E59", "\u6E59"], /* CJK Ideograph */ + ["\u6E5A", "\u6E5A"], /* CJK Ideograph */ + ["\u6E5B", "\u6E5B"], /* CJK Ideograph */ + ["\u6E5C", "\u6E5C"], /* CJK Ideograph */ + ["\u6E5D", "\u6E5D"], /* CJK Ideograph */ + ["\u6E5E", "\u6E5E"], /* CJK Ideograph */ + ["\u6E5F", "\u6E5F"], /* CJK Ideograph */ + ["\u6E60", "\u6E60"], /* CJK Ideograph */ + ["\u6E61", "\u6E61"], /* CJK Ideograph */ + ["\u6E62", "\u6E62"], /* CJK Ideograph */ + ["\u6E63", "\u6E63"], /* CJK Ideograph */ + ["\u6E64", "\u6E64"], /* CJK Ideograph */ + ["\u6E65", "\u6E65"], /* CJK Ideograph */ + ["\u6E66", "\u6E66"], /* CJK Ideograph */ + ["\u6E67", "\u6E67"], /* CJK Ideograph */ + ["\u6E68", "\u6E68"], /* CJK Ideograph */ + ["\u6E69", "\u6E69"], /* CJK Ideograph */ + ["\u6E6A", "\u6E6A"], /* CJK Ideograph */ + ["\u6E6B", "\u6E6B"], /* CJK Ideograph */ + ["\u6E6C", "\u6E6C"], /* CJK Ideograph */ + ["\u6E6D", "\u6E6D"], /* CJK Ideograph */ + ["\u6E6E", "\u6E6E"], /* CJK Ideograph */ + ["\u6E6F", "\u6E6F"], /* CJK Ideograph */ + ["\u6E70", "\u6E70"], /* CJK Ideograph */ + ["\u6E71", "\u6E71"], /* CJK Ideograph */ + ["\u6E72", "\u6E72"], /* CJK Ideograph */ + ["\u6E73", "\u6E73"], /* CJK Ideograph */ + ["\u6E74", "\u6E74"], /* CJK Ideograph */ + ["\u6E75", "\u6E75"], /* CJK Ideograph */ + ["\u6E76", "\u6E76"], /* CJK Ideograph */ + ["\u6E77", "\u6E77"], /* CJK Ideograph */ + ["\u6E78", "\u6E78"], /* CJK Ideograph */ + ["\u6E79", "\u6E79"], /* CJK Ideograph */ + ["\u6E7A", "\u6E7A"], /* CJK Ideograph */ + ["\u6E7B", "\u6E7B"], /* CJK Ideograph */ + ["\u6E7C", "\u6E7C"], /* CJK Ideograph */ + ["\u6E7D", "\u6E7D"], /* CJK Ideograph */ + ["\u6E7E", "\u6E7E"], /* CJK Ideograph */ + ["\u6E7F", "\u6E7F"], /* CJK Ideograph */ + ["\u6E80", "\u6E80"], /* CJK Ideograph */ + ["\u6E81", "\u6E81"], /* CJK Ideograph */ + ["\u6E82", "\u6E82"], /* CJK Ideograph */ + ["\u6E83", "\u6E83"], /* CJK Ideograph */ + ["\u6E84", "\u6E84"], /* CJK Ideograph */ + ["\u6E85", "\u6E85"], /* CJK Ideograph */ + ["\u6E86", "\u6E86"], /* CJK Ideograph */ + ["\u6E87", "\u6E87"], /* CJK Ideograph */ + ["\u6E88", "\u6E88"], /* CJK Ideograph */ + ["\u6E89", "\u6E89"], /* CJK Ideograph */ + ["\u6E8A", "\u6E8A"], /* CJK Ideograph */ + ["\u6E8B", "\u6E8B"], /* CJK Ideograph */ + ["\u6E8C", "\u6E8C"], /* CJK Ideograph */ + ["\u6E8D", "\u6E8D"], /* CJK Ideograph */ + ["\u6E8E", "\u6E8E"], /* CJK Ideograph */ + ["\u6E8F", "\u6E8F"], /* CJK Ideograph */ + ["\u6E90", "\u6E90"], /* CJK Ideograph */ + ["\u6E91", "\u6E91"], /* CJK Ideograph */ + ["\u6E92", "\u6E92"], /* CJK Ideograph */ + ["\u6E93", "\u6E93"], /* CJK Ideograph */ + ["\u6E94", "\u6E94"], /* CJK Ideograph */ + ["\u6E95", "\u6E95"], /* CJK Ideograph */ + ["\u6E96", "\u6E96"], /* CJK Ideograph */ + ["\u6E97", "\u6E97"], /* CJK Ideograph */ + ["\u6E98", "\u6E98"], /* CJK Ideograph */ + ["\u6E99", "\u6E99"], /* CJK Ideograph */ + ["\u6E9A", "\u6E9A"], /* CJK Ideograph */ + ["\u6E9B", "\u6E9B"], /* CJK Ideograph */ + ["\u6E9C", "\u6E9C"], /* CJK Ideograph */ + ["\u6E9D", "\u6E9D"], /* CJK Ideograph */ + ["\u6E9E", "\u6E9E"], /* CJK Ideograph */ + ["\u6E9F", "\u6E9F"], /* CJK Ideograph */ + ["\u6EA0", "\u6EA0"], /* CJK Ideograph */ + ["\u6EA1", "\u6EA1"], /* CJK Ideograph */ + ["\u6EA2", "\u6EA2"], /* CJK Ideograph */ + ["\u6EA3", "\u6EA3"], /* CJK Ideograph */ + ["\u6EA4", "\u6EA4"], /* CJK Ideograph */ + ["\u6EA5", "\u6EA5"], /* CJK Ideograph */ + ["\u6EA6", "\u6EA6"], /* CJK Ideograph */ + ["\u6EA7", "\u6EA7"], /* CJK Ideograph */ + ["\u6EA8", "\u6EA8"], /* CJK Ideograph */ + ["\u6EA9", "\u6EA9"], /* CJK Ideograph */ + ["\u6EAA", "\u6EAA"], /* CJK Ideograph */ + ["\u6EAB", "\u6EAB"], /* CJK Ideograph */ + ["\u6EAC", "\u6EAC"], /* CJK Ideograph */ + ["\u6EAD", "\u6EAD"], /* CJK Ideograph */ + ["\u6EAE", "\u6EAE"], /* CJK Ideograph */ + ["\u6EAF", "\u6EAF"], /* CJK Ideograph */ + ["\u6EB0", "\u6EB0"], /* CJK Ideograph */ + ["\u6EB1", "\u6EB1"], /* CJK Ideograph */ + ["\u6EB2", "\u6EB2"], /* CJK Ideograph */ + ["\u6EB3", "\u6EB3"], /* CJK Ideograph */ + ["\u6EB4", "\u6EB4"], /* CJK Ideograph */ + ["\u6EB5", "\u6EB5"], /* CJK Ideograph */ + ["\u6EB6", "\u6EB6"], /* CJK Ideograph */ + ["\u6EB7", "\u6EB7"], /* CJK Ideograph */ + ["\u6EB8", "\u6EB8"], /* CJK Ideograph */ + ["\u6EB9", "\u6EB9"], /* CJK Ideograph */ + ["\u6EBA", "\u6EBA"], /* CJK Ideograph */ + ["\u6EBB", "\u6EBB"], /* CJK Ideograph */ + ["\u6EBC", "\u6EBC"], /* CJK Ideograph */ + ["\u6EBD", "\u6EBD"], /* CJK Ideograph */ + ["\u6EBE", "\u6EBE"], /* CJK Ideograph */ + ["\u6EBF", "\u6EBF"], /* CJK Ideograph */ + ["\u6EC0", "\u6EC0"], /* CJK Ideograph */ + ["\u6EC1", "\u6EC1"], /* CJK Ideograph */ + ["\u6EC2", "\u6EC2"], /* CJK Ideograph */ + ["\u6EC3", "\u6EC3"], /* CJK Ideograph */ + ["\u6EC4", "\u6EC4"], /* CJK Ideograph */ + ["\u6EC5", "\u6EC5"], /* CJK Ideograph */ + ["\u6EC6", "\u6EC6"], /* CJK Ideograph */ + ["\u6EC7", "\u6EC7"], /* CJK Ideograph */ + ["\u6EC8", "\u6EC8"], /* CJK Ideograph */ + ["\u6EC9", "\u6EC9"], /* CJK Ideograph */ + ["\u6ECA", "\u6ECA"], /* CJK Ideograph */ + ["\u6ECB", "\u6ECB"], /* CJK Ideograph */ + ["\u6ECC", "\u6ECC"], /* CJK Ideograph */ + ["\u6ECD", "\u6ECD"], /* CJK Ideograph */ + ["\u6ECE", "\u6ECE"], /* CJK Ideograph */ + ["\u6ECF", "\u6ECF"], /* CJK Ideograph */ + ["\u6ED0", "\u6ED0"], /* CJK Ideograph */ + ["\u6ED1", "\u6ED1"], /* CJK Ideograph */ + ["\u6ED2", "\u6ED2"], /* CJK Ideograph */ + ["\u6ED3", "\u6ED3"], /* CJK Ideograph */ + ["\u6ED4", "\u6ED4"], /* CJK Ideograph */ + ["\u6ED5", "\u6ED5"], /* CJK Ideograph */ + ["\u6ED6", "\u6ED6"], /* CJK Ideograph */ + ["\u6ED7", "\u6ED7"], /* CJK Ideograph */ + ["\u6ED8", "\u6ED8"], /* CJK Ideograph */ + ["\u6ED9", "\u6ED9"], /* CJK Ideograph */ + ["\u6EDA", "\u6EDA"], /* CJK Ideograph */ + ["\u6EDB", "\u6EDB"], /* CJK Ideograph */ + ["\u6EDC", "\u6EDC"], /* CJK Ideograph */ + ["\u6EDD", "\u6EDD"], /* CJK Ideograph */ + ["\u6EDE", "\u6EDE"], /* CJK Ideograph */ + ["\u6EDF", "\u6EDF"], /* CJK Ideograph */ + ["\u6EE0", "\u6EE0"], /* CJK Ideograph */ + ["\u6EE1", "\u6EE1"], /* CJK Ideograph */ + ["\u6EE2", "\u6EE2"], /* CJK Ideograph */ + ["\u6EE3", "\u6EE3"], /* CJK Ideograph */ + ["\u6EE4", "\u6EE4"], /* CJK Ideograph */ + ["\u6EE5", "\u6EE5"], /* CJK Ideograph */ + ["\u6EE6", "\u6EE6"], /* CJK Ideograph */ + ["\u6EE7", "\u6EE7"], /* CJK Ideograph */ + ["\u6EE8", "\u6EE8"], /* CJK Ideograph */ + ["\u6EE9", "\u6EE9"], /* CJK Ideograph */ + ["\u6EEA", "\u6EEA"], /* CJK Ideograph */ + ["\u6EEB", "\u6EEB"], /* CJK Ideograph */ + ["\u6EEC", "\u6EEC"], /* CJK Ideograph */ + ["\u6EED", "\u6EED"], /* CJK Ideograph */ + ["\u6EEE", "\u6EEE"], /* CJK Ideograph */ + ["\u6EEF", "\u6EEF"], /* CJK Ideograph */ + ["\u6EF0", "\u6EF0"], /* CJK Ideograph */ + ["\u6EF1", "\u6EF1"], /* CJK Ideograph */ + ["\u6EF2", "\u6EF2"], /* CJK Ideograph */ + ["\u6EF3", "\u6EF3"], /* CJK Ideograph */ + ["\u6EF4", "\u6EF4"], /* CJK Ideograph */ + ["\u6EF5", "\u6EF5"], /* CJK Ideograph */ + ["\u6EF6", "\u6EF6"], /* CJK Ideograph */ + ["\u6EF7", "\u6EF7"], /* CJK Ideograph */ + ["\u6EF8", "\u6EF8"], /* CJK Ideograph */ + ["\u6EF9", "\u6EF9"], /* CJK Ideograph */ + ["\u6EFA", "\u6EFA"], /* CJK Ideograph */ + ["\u6EFB", "\u6EFB"], /* CJK Ideograph */ + ["\u6EFC", "\u6EFC"], /* CJK Ideograph */ + ["\u6EFD", "\u6EFD"], /* CJK Ideograph */ + ["\u6EFE", "\u6EFE"], /* CJK Ideograph */ + ["\u6EFF", "\u6EFF"], /* CJK Ideograph */ + ["\u6F00", "\u6F00"], /* CJK Ideograph */ + ["\u6F01", "\u6F01"], /* CJK Ideograph */ + ["\u6F02", "\u6F02"], /* CJK Ideograph */ + ["\u6F03", "\u6F03"], /* CJK Ideograph */ + ["\u6F04", "\u6F04"], /* CJK Ideograph */ + ["\u6F05", "\u6F05"], /* CJK Ideograph */ + ["\u6F06", "\u6F06"], /* CJK Ideograph */ + ["\u6F07", "\u6F07"], /* CJK Ideograph */ + ["\u6F08", "\u6F08"], /* CJK Ideograph */ + ["\u6F09", "\u6F09"], /* CJK Ideograph */ + ["\u6F0A", "\u6F0A"], /* CJK Ideograph */ + ["\u6F0B", "\u6F0B"], /* CJK Ideograph */ + ["\u6F0C", "\u6F0C"], /* CJK Ideograph */ + ["\u6F0D", "\u6F0D"], /* CJK Ideograph */ + ["\u6F0E", "\u6F0E"], /* CJK Ideograph */ + ["\u6F0F", "\u6F0F"], /* CJK Ideograph */ + ["\u6F10", "\u6F10"], /* CJK Ideograph */ + ["\u6F11", "\u6F11"], /* CJK Ideograph */ + ["\u6F12", "\u6F12"], /* CJK Ideograph */ + ["\u6F13", "\u6F13"], /* CJK Ideograph */ + ["\u6F14", "\u6F14"], /* CJK Ideograph */ + ["\u6F15", "\u6F15"], /* CJK Ideograph */ + ["\u6F16", "\u6F16"], /* CJK Ideograph */ + ["\u6F17", "\u6F17"], /* CJK Ideograph */ + ["\u6F18", "\u6F18"], /* CJK Ideograph */ + ["\u6F19", "\u6F19"], /* CJK Ideograph */ + ["\u6F1A", "\u6F1A"], /* CJK Ideograph */ + ["\u6F1B", "\u6F1B"], /* CJK Ideograph */ + ["\u6F1C", "\u6F1C"], /* CJK Ideograph */ + ["\u6F1D", "\u6F1D"], /* CJK Ideograph */ + ["\u6F1E", "\u6F1E"], /* CJK Ideograph */ + ["\u6F1F", "\u6F1F"], /* CJK Ideograph */ + ["\u6F20", "\u6F20"], /* CJK Ideograph */ + ["\u6F21", "\u6F21"], /* CJK Ideograph */ + ["\u6F22", "\u6F22"], /* CJK Ideograph */ + ["\u6F23", "\u6F23"], /* CJK Ideograph */ + ["\u6F24", "\u6F24"], /* CJK Ideograph */ + ["\u6F25", "\u6F25"], /* CJK Ideograph */ + ["\u6F26", "\u6F26"], /* CJK Ideograph */ + ["\u6F27", "\u6F27"], /* CJK Ideograph */ + ["\u6F28", "\u6F28"], /* CJK Ideograph */ + ["\u6F29", "\u6F29"], /* CJK Ideograph */ + ["\u6F2A", "\u6F2A"], /* CJK Ideograph */ + ["\u6F2B", "\u6F2B"], /* CJK Ideograph */ + ["\u6F2C", "\u6F2C"], /* CJK Ideograph */ + ["\u6F2D", "\u6F2D"], /* CJK Ideograph */ + ["\u6F2E", "\u6F2E"], /* CJK Ideograph */ + ["\u6F2F", "\u6F2F"], /* CJK Ideograph */ + ["\u6F30", "\u6F30"], /* CJK Ideograph */ + ["\u6F31", "\u6F31"], /* CJK Ideograph */ + ["\u6F32", "\u6F32"], /* CJK Ideograph */ + ["\u6F33", "\u6F33"], /* CJK Ideograph */ + ["\u6F34", "\u6F34"], /* CJK Ideograph */ + ["\u6F35", "\u6F35"], /* CJK Ideograph */ + ["\u6F36", "\u6F36"], /* CJK Ideograph */ + ["\u6F37", "\u6F37"], /* CJK Ideograph */ + ["\u6F38", "\u6F38"], /* CJK Ideograph */ + ["\u6F39", "\u6F39"], /* CJK Ideograph */ + ["\u6F3A", "\u6F3A"], /* CJK Ideograph */ + ["\u6F3B", "\u6F3B"], /* CJK Ideograph */ + ["\u6F3C", "\u6F3C"], /* CJK Ideograph */ + ["\u6F3D", "\u6F3D"], /* CJK Ideograph */ + ["\u6F3E", "\u6F3E"], /* CJK Ideograph */ + ["\u6F3F", "\u6F3F"], /* CJK Ideograph */ + ["\u6F40", "\u6F40"], /* CJK Ideograph */ + ["\u6F41", "\u6F41"], /* CJK Ideograph */ + ["\u6F42", "\u6F42"], /* CJK Ideograph */ + ["\u6F43", "\u6F43"], /* CJK Ideograph */ + ["\u6F44", "\u6F44"], /* CJK Ideograph */ + ["\u6F45", "\u6F45"], /* CJK Ideograph */ + ["\u6F46", "\u6F46"], /* CJK Ideograph */ + ["\u6F47", "\u6F47"], /* CJK Ideograph */ + ["\u6F48", "\u6F48"], /* CJK Ideograph */ + ["\u6F49", "\u6F49"], /* CJK Ideograph */ + ["\u6F4A", "\u6F4A"], /* CJK Ideograph */ + ["\u6F4B", "\u6F4B"], /* CJK Ideograph */ + ["\u6F4C", "\u6F4C"], /* CJK Ideograph */ + ["\u6F4D", "\u6F4D"], /* CJK Ideograph */ + ["\u6F4E", "\u6F4E"], /* CJK Ideograph */ + ["\u6F4F", "\u6F4F"], /* CJK Ideograph */ + ["\u6F50", "\u6F50"], /* CJK Ideograph */ + ["\u6F51", "\u6F51"], /* CJK Ideograph */ + ["\u6F52", "\u6F52"], /* CJK Ideograph */ + ["\u6F53", "\u6F53"], /* CJK Ideograph */ + ["\u6F54", "\u6F54"], /* CJK Ideograph */ + ["\u6F55", "\u6F55"], /* CJK Ideograph */ + ["\u6F56", "\u6F56"], /* CJK Ideograph */ + ["\u6F57", "\u6F57"], /* CJK Ideograph */ + ["\u6F58", "\u6F58"], /* CJK Ideograph */ + ["\u6F59", "\u6F59"], /* CJK Ideograph */ + ["\u6F5A", "\u6F5A"], /* CJK Ideograph */ + ["\u6F5B", "\u6F5B"], /* CJK Ideograph */ + ["\u6F5C", "\u6F5C"], /* CJK Ideograph */ + ["\u6F5D", "\u6F5D"], /* CJK Ideograph */ + ["\u6F5E", "\u6F5E"], /* CJK Ideograph */ + ["\u6F5F", "\u6F5F"], /* CJK Ideograph */ + ["\u6F60", "\u6F60"], /* CJK Ideograph */ + ["\u6F61", "\u6F61"], /* CJK Ideograph */ + ["\u6F62", "\u6F62"], /* CJK Ideograph */ + ["\u6F63", "\u6F63"], /* CJK Ideograph */ + ["\u6F64", "\u6F64"], /* CJK Ideograph */ + ["\u6F65", "\u6F65"], /* CJK Ideograph */ + ["\u6F66", "\u6F66"], /* CJK Ideograph */ + ["\u6F67", "\u6F67"], /* CJK Ideograph */ + ["\u6F68", "\u6F68"], /* CJK Ideograph */ + ["\u6F69", "\u6F69"], /* CJK Ideograph */ + ["\u6F6A", "\u6F6A"], /* CJK Ideograph */ + ["\u6F6B", "\u6F6B"], /* CJK Ideograph */ + ["\u6F6C", "\u6F6C"], /* CJK Ideograph */ + ["\u6F6D", "\u6F6D"], /* CJK Ideograph */ + ["\u6F6E", "\u6F6E"], /* CJK Ideograph */ + ["\u6F6F", "\u6F6F"], /* CJK Ideograph */ + ["\u6F70", "\u6F70"], /* CJK Ideograph */ + ["\u6F71", "\u6F71"], /* CJK Ideograph */ + ["\u6F72", "\u6F72"], /* CJK Ideograph */ + ["\u6F73", "\u6F73"], /* CJK Ideograph */ + ["\u6F74", "\u6F74"], /* CJK Ideograph */ + ["\u6F75", "\u6F75"], /* CJK Ideograph */ + ["\u6F76", "\u6F76"], /* CJK Ideograph */ + ["\u6F77", "\u6F77"], /* CJK Ideograph */ + ["\u6F78", "\u6F78"], /* CJK Ideograph */ + ["\u6F79", "\u6F79"], /* CJK Ideograph */ + ["\u6F7A", "\u6F7A"], /* CJK Ideograph */ + ["\u6F7B", "\u6F7B"], /* CJK Ideograph */ + ["\u6F7C", "\u6F7C"], /* CJK Ideograph */ + ["\u6F7D", "\u6F7D"], /* CJK Ideograph */ + ["\u6F7E", "\u6F7E"], /* CJK Ideograph */ + ["\u6F7F", "\u6F7F"], /* CJK Ideograph */ + ["\u6F80", "\u6F80"], /* CJK Ideograph */ + ["\u6F81", "\u6F81"], /* CJK Ideograph */ + ["\u6F82", "\u6F82"], /* CJK Ideograph */ + ["\u6F83", "\u6F83"], /* CJK Ideograph */ + ["\u6F84", "\u6F84"], /* CJK Ideograph */ + ["\u6F85", "\u6F85"], /* CJK Ideograph */ + ["\u6F86", "\u6F86"], /* CJK Ideograph */ + ["\u6F87", "\u6F87"], /* CJK Ideograph */ + ["\u6F88", "\u6F88"], /* CJK Ideograph */ + ["\u6F89", "\u6F89"], /* CJK Ideograph */ + ["\u6F8A", "\u6F8A"], /* CJK Ideograph */ + ["\u6F8B", "\u6F8B"], /* CJK Ideograph */ + ["\u6F8C", "\u6F8C"], /* CJK Ideograph */ + ["\u6F8D", "\u6F8D"], /* CJK Ideograph */ + ["\u6F8E", "\u6F8E"], /* CJK Ideograph */ + ["\u6F8F", "\u6F8F"], /* CJK Ideograph */ + ["\u6F90", "\u6F90"], /* CJK Ideograph */ + ["\u6F91", "\u6F91"], /* CJK Ideograph */ + ["\u6F92", "\u6F92"], /* CJK Ideograph */ + ["\u6F93", "\u6F93"], /* CJK Ideograph */ + ["\u6F94", "\u6F94"], /* CJK Ideograph */ + ["\u6F95", "\u6F95"], /* CJK Ideograph */ + ["\u6F96", "\u6F96"], /* CJK Ideograph */ + ["\u6F97", "\u6F97"], /* CJK Ideograph */ + ["\u6F98", "\u6F98"], /* CJK Ideograph */ + ["\u6F99", "\u6F99"], /* CJK Ideograph */ + ["\u6F9A", "\u6F9A"], /* CJK Ideograph */ + ["\u6F9B", "\u6F9B"], /* CJK Ideograph */ + ["\u6F9C", "\u6F9C"], /* CJK Ideograph */ + ["\u6F9D", "\u6F9D"], /* CJK Ideograph */ + ["\u6F9E", "\u6F9E"], /* CJK Ideograph */ + ["\u6F9F", "\u6F9F"], /* CJK Ideograph */ + ["\u6FA0", "\u6FA0"], /* CJK Ideograph */ + ["\u6FA1", "\u6FA1"], /* CJK Ideograph */ + ["\u6FA2", "\u6FA2"], /* CJK Ideograph */ + ["\u6FA3", "\u6FA3"], /* CJK Ideograph */ + ["\u6FA4", "\u6FA4"], /* CJK Ideograph */ + ["\u6FA5", "\u6FA5"], /* CJK Ideograph */ + ["\u6FA6", "\u6FA6"], /* CJK Ideograph */ + ["\u6FA7", "\u6FA7"], /* CJK Ideograph */ + ["\u6FA8", "\u6FA8"], /* CJK Ideograph */ + ["\u6FA9", "\u6FA9"], /* CJK Ideograph */ + ["\u6FAA", "\u6FAA"], /* CJK Ideograph */ + ["\u6FAB", "\u6FAB"], /* CJK Ideograph */ + ["\u6FAC", "\u6FAC"], /* CJK Ideograph */ + ["\u6FAD", "\u6FAD"], /* CJK Ideograph */ + ["\u6FAE", "\u6FAE"], /* CJK Ideograph */ + ["\u6FAF", "\u6FAF"], /* CJK Ideograph */ + ["\u6FB0", "\u6FB0"], /* CJK Ideograph */ + ["\u6FB1", "\u6FB1"], /* CJK Ideograph */ + ["\u6FB2", "\u6FB2"], /* CJK Ideograph */ + ["\u6FB3", "\u6FB3"], /* CJK Ideograph */ + ["\u6FB4", "\u6FB4"], /* CJK Ideograph */ + ["\u6FB5", "\u6FB5"], /* CJK Ideograph */ + ["\u6FB6", "\u6FB6"], /* CJK Ideograph */ + ["\u6FB7", "\u6FB7"], /* CJK Ideograph */ + ["\u6FB8", "\u6FB8"], /* CJK Ideograph */ + ["\u6FB9", "\u6FB9"], /* CJK Ideograph */ + ["\u6FBA", "\u6FBA"], /* CJK Ideograph */ + ["\u6FBB", "\u6FBB"], /* CJK Ideograph */ + ["\u6FBC", "\u6FBC"], /* CJK Ideograph */ + ["\u6FBD", "\u6FBD"], /* CJK Ideograph */ + ["\u6FBE", "\u6FBE"], /* CJK Ideograph */ + ["\u6FBF", "\u6FBF"], /* CJK Ideograph */ + ["\u6FC0", "\u6FC0"], /* CJK Ideograph */ + ["\u6FC1", "\u6FC1"], /* CJK Ideograph */ + ["\u6FC2", "\u6FC2"], /* CJK Ideograph */ + ["\u6FC3", "\u6FC3"], /* CJK Ideograph */ + ["\u6FC4", "\u6FC4"], /* CJK Ideograph */ + ["\u6FC5", "\u6FC5"], /* CJK Ideograph */ + ["\u6FC6", "\u6FC6"], /* CJK Ideograph */ + ["\u6FC7", "\u6FC7"], /* CJK Ideograph */ + ["\u6FC8", "\u6FC8"], /* CJK Ideograph */ + ["\u6FC9", "\u6FC9"], /* CJK Ideograph */ + ["\u6FCA", "\u6FCA"], /* CJK Ideograph */ + ["\u6FCB", "\u6FCB"], /* CJK Ideograph */ + ["\u6FCC", "\u6FCC"], /* CJK Ideograph */ + ["\u6FCD", "\u6FCD"], /* CJK Ideograph */ + ["\u6FCE", "\u6FCE"], /* CJK Ideograph */ + ["\u6FCF", "\u6FCF"], /* CJK Ideograph */ + ["\u6FD0", "\u6FD0"], /* CJK Ideograph */ + ["\u6FD1", "\u6FD1"], /* CJK Ideograph */ + ["\u6FD2", "\u6FD2"], /* CJK Ideograph */ + ["\u6FD3", "\u6FD3"], /* CJK Ideograph */ + ["\u6FD4", "\u6FD4"], /* CJK Ideograph */ + ["\u6FD5", "\u6FD5"], /* CJK Ideograph */ + ["\u6FD6", "\u6FD6"], /* CJK Ideograph */ + ["\u6FD7", "\u6FD7"], /* CJK Ideograph */ + ["\u6FD8", "\u6FD8"], /* CJK Ideograph */ + ["\u6FD9", "\u6FD9"], /* CJK Ideograph */ + ["\u6FDA", "\u6FDA"], /* CJK Ideograph */ + ["\u6FDB", "\u6FDB"], /* CJK Ideograph */ + ["\u6FDC", "\u6FDC"], /* CJK Ideograph */ + ["\u6FDD", "\u6FDD"], /* CJK Ideograph */ + ["\u6FDE", "\u6FDE"], /* CJK Ideograph */ + ["\u6FDF", "\u6FDF"], /* CJK Ideograph */ + ["\u6FE0", "\u6FE0"], /* CJK Ideograph */ + ["\u6FE1", "\u6FE1"], /* CJK Ideograph */ + ["\u6FE2", "\u6FE2"], /* CJK Ideograph */ + ["\u6FE3", "\u6FE3"], /* CJK Ideograph */ + ["\u6FE4", "\u6FE4"], /* CJK Ideograph */ + ["\u6FE5", "\u6FE5"], /* CJK Ideograph */ + ["\u6FE6", "\u6FE6"], /* CJK Ideograph */ + ["\u6FE7", "\u6FE7"], /* CJK Ideograph */ + ["\u6FE8", "\u6FE8"], /* CJK Ideograph */ + ["\u6FE9", "\u6FE9"], /* CJK Ideograph */ + ["\u6FEA", "\u6FEA"], /* CJK Ideograph */ + ["\u6FEB", "\u6FEB"], /* CJK Ideograph */ + ["\u6FEC", "\u6FEC"], /* CJK Ideograph */ + ["\u6FED", "\u6FED"], /* CJK Ideograph */ + ["\u6FEE", "\u6FEE"], /* CJK Ideograph */ + ["\u6FEF", "\u6FEF"], /* CJK Ideograph */ + ["\u6FF0", "\u6FF0"], /* CJK Ideograph */ + ["\u6FF1", "\u6FF1"], /* CJK Ideograph */ + ["\u6FF2", "\u6FF2"], /* CJK Ideograph */ + ["\u6FF3", "\u6FF3"], /* CJK Ideograph */ + ["\u6FF4", "\u6FF4"], /* CJK Ideograph */ + ["\u6FF5", "\u6FF5"], /* CJK Ideograph */ + ["\u6FF6", "\u6FF6"], /* CJK Ideograph */ + ["\u6FF7", "\u6FF7"], /* CJK Ideograph */ + ["\u6FF8", "\u6FF8"], /* CJK Ideograph */ + ["\u6FF9", "\u6FF9"], /* CJK Ideograph */ + ["\u6FFA", "\u6FFA"], /* CJK Ideograph */ + ["\u6FFB", "\u6FFB"], /* CJK Ideograph */ + ["\u6FFC", "\u6FFC"], /* CJK Ideograph */ + ["\u6FFD", "\u6FFD"], /* CJK Ideograph */ + ["\u6FFE", "\u6FFE"], /* CJK Ideograph */ + ["\u6FFF", "\u6FFF"], /* CJK Ideograph */ + ["\u7000", "\u7000"], /* CJK Ideograph */ + ["\u7001", "\u7001"], /* CJK Ideograph */ + ["\u7002", "\u7002"], /* CJK Ideograph */ + ["\u7003", "\u7003"], /* CJK Ideograph */ + ["\u7004", "\u7004"], /* CJK Ideograph */ + ["\u7005", "\u7005"], /* CJK Ideograph */ + ["\u7006", "\u7006"], /* CJK Ideograph */ + ["\u7007", "\u7007"], /* CJK Ideograph */ + ["\u7008", "\u7008"], /* CJK Ideograph */ + ["\u7009", "\u7009"], /* CJK Ideograph */ + ["\u700A", "\u700A"], /* CJK Ideograph */ + ["\u700B", "\u700B"], /* CJK Ideograph */ + ["\u700C", "\u700C"], /* CJK Ideograph */ + ["\u700D", "\u700D"], /* CJK Ideograph */ + ["\u700E", "\u700E"], /* CJK Ideograph */ + ["\u700F", "\u700F"], /* CJK Ideograph */ + ["\u7010", "\u7010"], /* CJK Ideograph */ + ["\u7011", "\u7011"], /* CJK Ideograph */ + ["\u7012", "\u7012"], /* CJK Ideograph */ + ["\u7013", "\u7013"], /* CJK Ideograph */ + ["\u7014", "\u7014"], /* CJK Ideograph */ + ["\u7015", "\u7015"], /* CJK Ideograph */ + ["\u7016", "\u7016"], /* CJK Ideograph */ + ["\u7017", "\u7017"], /* CJK Ideograph */ + ["\u7018", "\u7018"], /* CJK Ideograph */ + ["\u7019", "\u7019"], /* CJK Ideograph */ + ["\u701A", "\u701A"], /* CJK Ideograph */ + ["\u701B", "\u701B"], /* CJK Ideograph */ + ["\u701C", "\u701C"], /* CJK Ideograph */ + ["\u701D", "\u701D"], /* CJK Ideograph */ + ["\u701E", "\u701E"], /* CJK Ideograph */ + ["\u701F", "\u701F"], /* CJK Ideograph */ + ["\u7020", "\u7020"], /* CJK Ideograph */ + ["\u7021", "\u7021"], /* CJK Ideograph */ + ["\u7022", "\u7022"], /* CJK Ideograph */ + ["\u7023", "\u7023"], /* CJK Ideograph */ + ["\u7024", "\u7024"], /* CJK Ideograph */ + ["\u7025", "\u7025"], /* CJK Ideograph */ + ["\u7026", "\u7026"], /* CJK Ideograph */ + ["\u7027", "\u7027"], /* CJK Ideograph */ + ["\u7028", "\u7028"], /* CJK Ideograph */ + ["\u7029", "\u7029"], /* CJK Ideograph */ + ["\u702A", "\u702A"], /* CJK Ideograph */ + ["\u702B", "\u702B"], /* CJK Ideograph */ + ["\u702C", "\u702C"], /* CJK Ideograph */ + ["\u702D", "\u702D"], /* CJK Ideograph */ + ["\u702E", "\u702E"], /* CJK Ideograph */ + ["\u702F", "\u702F"], /* CJK Ideograph */ + ["\u7030", "\u7030"], /* CJK Ideograph */ + ["\u7031", "\u7031"], /* CJK Ideograph */ + ["\u7032", "\u7032"], /* CJK Ideograph */ + ["\u7033", "\u7033"], /* CJK Ideograph */ + ["\u7034", "\u7034"], /* CJK Ideograph */ + ["\u7035", "\u7035"], /* CJK Ideograph */ + ["\u7036", "\u7036"], /* CJK Ideograph */ + ["\u7037", "\u7037"], /* CJK Ideograph */ + ["\u7038", "\u7038"], /* CJK Ideograph */ + ["\u7039", "\u7039"], /* CJK Ideograph */ + ["\u703A", "\u703A"], /* CJK Ideograph */ + ["\u703B", "\u703B"], /* CJK Ideograph */ + ["\u703C", "\u703C"], /* CJK Ideograph */ + ["\u703D", "\u703D"], /* CJK Ideograph */ + ["\u703E", "\u703E"], /* CJK Ideograph */ + ["\u703F", "\u703F"], /* CJK Ideograph */ + ["\u7040", "\u7040"], /* CJK Ideograph */ + ["\u7041", "\u7041"], /* CJK Ideograph */ + ["\u7042", "\u7042"], /* CJK Ideograph */ + ["\u7043", "\u7043"], /* CJK Ideograph */ + ["\u7044", "\u7044"], /* CJK Ideograph */ + ["\u7045", "\u7045"], /* CJK Ideograph */ + ["\u7046", "\u7046"], /* CJK Ideograph */ + ["\u7047", "\u7047"], /* CJK Ideograph */ + ["\u7048", "\u7048"], /* CJK Ideograph */ + ["\u7049", "\u7049"], /* CJK Ideograph */ + ["\u704A", "\u704A"], /* CJK Ideograph */ + ["\u704B", "\u704B"], /* CJK Ideograph */ + ["\u704C", "\u704C"], /* CJK Ideograph */ + ["\u704D", "\u704D"], /* CJK Ideograph */ + ["\u704E", "\u704E"], /* CJK Ideograph */ + ["\u704F", "\u704F"], /* CJK Ideograph */ + ["\u7050", "\u7050"], /* CJK Ideograph */ + ["\u7051", "\u7051"], /* CJK Ideograph */ + ["\u7052", "\u7052"], /* CJK Ideograph */ + ["\u7053", "\u7053"], /* CJK Ideograph */ + ["\u7054", "\u7054"], /* CJK Ideograph */ + ["\u7055", "\u7055"], /* CJK Ideograph */ + ["\u7056", "\u7056"], /* CJK Ideograph */ + ["\u7057", "\u7057"], /* CJK Ideograph */ + ["\u7058", "\u7058"], /* CJK Ideograph */ + ["\u7059", "\u7059"], /* CJK Ideograph */ + ["\u705A", "\u705A"], /* CJK Ideograph */ + ["\u705B", "\u705B"], /* CJK Ideograph */ + ["\u705C", "\u705C"], /* CJK Ideograph */ + ["\u705D", "\u705D"], /* CJK Ideograph */ + ["\u705E", "\u705E"], /* CJK Ideograph */ + ["\u705F", "\u705F"], /* CJK Ideograph */ + ["\u7060", "\u7060"], /* CJK Ideograph */ + ["\u7061", "\u7061"], /* CJK Ideograph */ + ["\u7062", "\u7062"], /* CJK Ideograph */ + ["\u7063", "\u7063"], /* CJK Ideograph */ + ["\u7064", "\u7064"], /* CJK Ideograph */ + ["\u7065", "\u7065"], /* CJK Ideograph */ + ["\u7066", "\u7066"], /* CJK Ideograph */ + ["\u7067", "\u7067"], /* CJK Ideograph */ + ["\u7068", "\u7068"], /* CJK Ideograph */ + ["\u7069", "\u7069"], /* CJK Ideograph */ + ["\u706A", "\u706A"], /* CJK Ideograph */ + ["\u706B", "\u706B"], /* CJK Ideograph */ + ["\u706C", "\u706C"], /* CJK Ideograph */ + ["\u706D", "\u706D"], /* CJK Ideograph */ + ["\u706E", "\u706E"], /* CJK Ideograph */ + ["\u706F", "\u706F"], /* CJK Ideograph */ + ["\u7070", "\u7070"], /* CJK Ideograph */ + ["\u7071", "\u7071"], /* CJK Ideograph */ + ["\u7072", "\u7072"], /* CJK Ideograph */ + ["\u7073", "\u7073"], /* CJK Ideograph */ + ["\u7074", "\u7074"], /* CJK Ideograph */ + ["\u7075", "\u7075"], /* CJK Ideograph */ + ["\u7076", "\u7076"], /* CJK Ideograph */ + ["\u7077", "\u7077"], /* CJK Ideograph */ + ["\u7078", "\u7078"], /* CJK Ideograph */ + ["\u7079", "\u7079"], /* CJK Ideograph */ + ["\u707A", "\u707A"], /* CJK Ideograph */ + ["\u707B", "\u707B"], /* CJK Ideograph */ + ["\u707C", "\u707C"], /* CJK Ideograph */ + ["\u707D", "\u707D"], /* CJK Ideograph */ + ["\u707E", "\u707E"], /* CJK Ideograph */ + ["\u707F", "\u707F"], /* CJK Ideograph */ + ["\u7080", "\u7080"], /* CJK Ideograph */ + ["\u7081", "\u7081"], /* CJK Ideograph */ + ["\u7082", "\u7082"], /* CJK Ideograph */ + ["\u7083", "\u7083"], /* CJK Ideograph */ + ["\u7084", "\u7084"], /* CJK Ideograph */ + ["\u7085", "\u7085"], /* CJK Ideograph */ + ["\u7086", "\u7086"], /* CJK Ideograph */ + ["\u7087", "\u7087"], /* CJK Ideograph */ + ["\u7088", "\u7088"], /* CJK Ideograph */ + ["\u7089", "\u7089"], /* CJK Ideograph */ + ["\u708A", "\u708A"], /* CJK Ideograph */ + ["\u708B", "\u708B"], /* CJK Ideograph */ + ["\u708C", "\u708C"], /* CJK Ideograph */ + ["\u708D", "\u708D"], /* CJK Ideograph */ + ["\u708E", "\u708E"], /* CJK Ideograph */ + ["\u708F", "\u708F"], /* CJK Ideograph */ + ["\u7090", "\u7090"], /* CJK Ideograph */ + ["\u7091", "\u7091"], /* CJK Ideograph */ + ["\u7092", "\u7092"], /* CJK Ideograph */ + ["\u7093", "\u7093"], /* CJK Ideograph */ + ["\u7094", "\u7094"], /* CJK Ideograph */ + ["\u7095", "\u7095"], /* CJK Ideograph */ + ["\u7096", "\u7096"], /* CJK Ideograph */ + ["\u7097", "\u7097"], /* CJK Ideograph */ + ["\u7098", "\u7098"], /* CJK Ideograph */ + ["\u7099", "\u7099"], /* CJK Ideograph */ + ["\u709A", "\u709A"], /* CJK Ideograph */ + ["\u709B", "\u709B"], /* CJK Ideograph */ + ["\u709C", "\u709C"], /* CJK Ideograph */ + ["\u709D", "\u709D"], /* CJK Ideograph */ + ["\u709E", "\u709E"], /* CJK Ideograph */ + ["\u709F", "\u709F"], /* CJK Ideograph */ + ["\u70A0", "\u70A0"], /* CJK Ideograph */ + ["\u70A1", "\u70A1"], /* CJK Ideograph */ + ["\u70A2", "\u70A2"], /* CJK Ideograph */ + ["\u70A3", "\u70A3"], /* CJK Ideograph */ + ["\u70A4", "\u70A4"], /* CJK Ideograph */ + ["\u70A5", "\u70A5"], /* CJK Ideograph */ + ["\u70A6", "\u70A6"], /* CJK Ideograph */ + ["\u70A7", "\u70A7"], /* CJK Ideograph */ + ["\u70A8", "\u70A8"], /* CJK Ideograph */ + ["\u70A9", "\u70A9"], /* CJK Ideograph */ + ["\u70AA", "\u70AA"], /* CJK Ideograph */ + ["\u70AB", "\u70AB"], /* CJK Ideograph */ + ["\u70AC", "\u70AC"], /* CJK Ideograph */ + ["\u70AD", "\u70AD"], /* CJK Ideograph */ + ["\u70AE", "\u70AE"], /* CJK Ideograph */ + ["\u70AF", "\u70AF"], /* CJK Ideograph */ + ["\u70B0", "\u70B0"], /* CJK Ideograph */ + ["\u70B1", "\u70B1"], /* CJK Ideograph */ + ["\u70B2", "\u70B2"], /* CJK Ideograph */ + ["\u70B3", "\u70B3"], /* CJK Ideograph */ + ["\u70B4", "\u70B4"], /* CJK Ideograph */ + ["\u70B5", "\u70B5"], /* CJK Ideograph */ + ["\u70B6", "\u70B6"], /* CJK Ideograph */ + ["\u70B7", "\u70B7"], /* CJK Ideograph */ + ["\u70B8", "\u70B8"], /* CJK Ideograph */ + ["\u70B9", "\u70B9"], /* CJK Ideograph */ + ["\u70BA", "\u70BA"], /* CJK Ideograph */ + ["\u70BB", "\u70BB"], /* CJK Ideograph */ + ["\u70BC", "\u70BC"], /* CJK Ideograph */ + ["\u70BD", "\u70BD"], /* CJK Ideograph */ + ["\u70BE", "\u70BE"], /* CJK Ideograph */ + ["\u70BF", "\u70BF"], /* CJK Ideograph */ + ["\u70C0", "\u70C0"], /* CJK Ideograph */ + ["\u70C1", "\u70C1"], /* CJK Ideograph */ + ["\u70C2", "\u70C2"], /* CJK Ideograph */ + ["\u70C3", "\u70C3"], /* CJK Ideograph */ + ["\u70C4", "\u70C4"], /* CJK Ideograph */ + ["\u70C5", "\u70C5"], /* CJK Ideograph */ + ["\u70C6", "\u70C6"], /* CJK Ideograph */ + ["\u70C7", "\u70C7"], /* CJK Ideograph */ + ["\u70C8", "\u70C8"], /* CJK Ideograph */ + ["\u70C9", "\u70C9"], /* CJK Ideograph */ + ["\u70CA", "\u70CA"], /* CJK Ideograph */ + ["\u70CB", "\u70CB"], /* CJK Ideograph */ + ["\u70CC", "\u70CC"], /* CJK Ideograph */ + ["\u70CD", "\u70CD"], /* CJK Ideograph */ + ["\u70CE", "\u70CE"], /* CJK Ideograph */ + ["\u70CF", "\u70CF"], /* CJK Ideograph */ + ["\u70D0", "\u70D0"], /* CJK Ideograph */ + ["\u70D1", "\u70D1"], /* CJK Ideograph */ + ["\u70D2", "\u70D2"], /* CJK Ideograph */ + ["\u70D3", "\u70D3"], /* CJK Ideograph */ + ["\u70D4", "\u70D4"], /* CJK Ideograph */ + ["\u70D5", "\u70D5"], /* CJK Ideograph */ + ["\u70D6", "\u70D6"], /* CJK Ideograph */ + ["\u70D7", "\u70D7"], /* CJK Ideograph */ + ["\u70D8", "\u70D8"], /* CJK Ideograph */ + ["\u70D9", "\u70D9"], /* CJK Ideograph */ + ["\u70DA", "\u70DA"], /* CJK Ideograph */ + ["\u70DB", "\u70DB"], /* CJK Ideograph */ + ["\u70DC", "\u70DC"], /* CJK Ideograph */ + ["\u70DD", "\u70DD"], /* CJK Ideograph */ + ["\u70DE", "\u70DE"], /* CJK Ideograph */ + ["\u70DF", "\u70DF"], /* CJK Ideograph */ + ["\u70E0", "\u70E0"], /* CJK Ideograph */ + ["\u70E1", "\u70E1"], /* CJK Ideograph */ + ["\u70E2", "\u70E2"], /* CJK Ideograph */ + ["\u70E3", "\u70E3"], /* CJK Ideograph */ + ["\u70E4", "\u70E4"], /* CJK Ideograph */ + ["\u70E5", "\u70E5"], /* CJK Ideograph */ + ["\u70E6", "\u70E6"], /* CJK Ideograph */ + ["\u70E7", "\u70E7"], /* CJK Ideograph */ + ["\u70E8", "\u70E8"], /* CJK Ideograph */ + ["\u70E9", "\u70E9"], /* CJK Ideograph */ + ["\u70EA", "\u70EA"], /* CJK Ideograph */ + ["\u70EB", "\u70EB"], /* CJK Ideograph */ + ["\u70EC", "\u70EC"], /* CJK Ideograph */ + ["\u70ED", "\u70ED"], /* CJK Ideograph */ + ["\u70EE", "\u70EE"], /* CJK Ideograph */ + ["\u70EF", "\u70EF"], /* CJK Ideograph */ + ["\u70F0", "\u70F0"], /* CJK Ideograph */ + ["\u70F1", "\u70F1"], /* CJK Ideograph */ + ["\u70F2", "\u70F2"], /* CJK Ideograph */ + ["\u70F3", "\u70F3"], /* CJK Ideograph */ + ["\u70F4", "\u70F4"], /* CJK Ideograph */ + ["\u70F5", "\u70F5"], /* CJK Ideograph */ + ["\u70F6", "\u70F6"], /* CJK Ideograph */ + ["\u70F7", "\u70F7"], /* CJK Ideograph */ + ["\u70F8", "\u70F8"], /* CJK Ideograph */ + ["\u70F9", "\u70F9"], /* CJK Ideograph */ + ["\u70FA", "\u70FA"], /* CJK Ideograph */ + ["\u70FB", "\u70FB"], /* CJK Ideograph */ + ["\u70FC", "\u70FC"], /* CJK Ideograph */ + ["\u70FD", "\u70FD"], /* CJK Ideograph */ + ["\u70FE", "\u70FE"], /* CJK Ideograph */ + ["\u70FF", "\u70FF"], /* CJK Ideograph */ + ["\u7100", "\u7100"], /* CJK Ideograph */ + ["\u7101", "\u7101"], /* CJK Ideograph */ + ["\u7102", "\u7102"], /* CJK Ideograph */ + ["\u7103", "\u7103"], /* CJK Ideograph */ + ["\u7104", "\u7104"], /* CJK Ideograph */ + ["\u7105", "\u7105"], /* CJK Ideograph */ + ["\u7106", "\u7106"], /* CJK Ideograph */ + ["\u7107", "\u7107"], /* CJK Ideograph */ + ["\u7108", "\u7108"], /* CJK Ideograph */ + ["\u7109", "\u7109"], /* CJK Ideograph */ + ["\u710A", "\u710A"], /* CJK Ideograph */ + ["\u710B", "\u710B"], /* CJK Ideograph */ + ["\u710C", "\u710C"], /* CJK Ideograph */ + ["\u710D", "\u710D"], /* CJK Ideograph */ + ["\u710E", "\u710E"], /* CJK Ideograph */ + ["\u710F", "\u710F"], /* CJK Ideograph */ + ["\u7110", "\u7110"], /* CJK Ideograph */ + ["\u7111", "\u7111"], /* CJK Ideograph */ + ["\u7112", "\u7112"], /* CJK Ideograph */ + ["\u7113", "\u7113"], /* CJK Ideograph */ + ["\u7114", "\u7114"], /* CJK Ideograph */ + ["\u7115", "\u7115"], /* CJK Ideograph */ + ["\u7116", "\u7116"], /* CJK Ideograph */ + ["\u7117", "\u7117"], /* CJK Ideograph */ + ["\u7118", "\u7118"], /* CJK Ideograph */ + ["\u7119", "\u7119"], /* CJK Ideograph */ + ["\u711A", "\u711A"], /* CJK Ideograph */ + ["\u711B", "\u711B"], /* CJK Ideograph */ + ["\u711C", "\u711C"], /* CJK Ideograph */ + ["\u711D", "\u711D"], /* CJK Ideograph */ + ["\u711E", "\u711E"], /* CJK Ideograph */ + ["\u711F", "\u711F"], /* CJK Ideograph */ + ["\u7120", "\u7120"], /* CJK Ideograph */ + ["\u7121", "\u7121"], /* CJK Ideograph */ + ["\u7122", "\u7122"], /* CJK Ideograph */ + ["\u7123", "\u7123"], /* CJK Ideograph */ + ["\u7124", "\u7124"], /* CJK Ideograph */ + ["\u7125", "\u7125"], /* CJK Ideograph */ + ["\u7126", "\u7126"], /* CJK Ideograph */ + ["\u7127", "\u7127"], /* CJK Ideograph */ + ["\u7128", "\u7128"], /* CJK Ideograph */ + ["\u7129", "\u7129"], /* CJK Ideograph */ + ["\u712A", "\u712A"], /* CJK Ideograph */ + ["\u712B", "\u712B"], /* CJK Ideograph */ + ["\u712C", "\u712C"], /* CJK Ideograph */ + ["\u712D", "\u712D"], /* CJK Ideograph */ + ["\u712E", "\u712E"], /* CJK Ideograph */ + ["\u712F", "\u712F"], /* CJK Ideograph */ + ["\u7130", "\u7130"], /* CJK Ideograph */ + ["\u7131", "\u7131"], /* CJK Ideograph */ + ["\u7132", "\u7132"], /* CJK Ideograph */ + ["\u7133", "\u7133"], /* CJK Ideograph */ + ["\u7134", "\u7134"], /* CJK Ideograph */ + ["\u7135", "\u7135"], /* CJK Ideograph */ + ["\u7136", "\u7136"], /* CJK Ideograph */ + ["\u7137", "\u7137"], /* CJK Ideograph */ + ["\u7138", "\u7138"], /* CJK Ideograph */ + ["\u7139", "\u7139"], /* CJK Ideograph */ + ["\u713A", "\u713A"], /* CJK Ideograph */ + ["\u713B", "\u713B"], /* CJK Ideograph */ + ["\u713C", "\u713C"], /* CJK Ideograph */ + ["\u713D", "\u713D"], /* CJK Ideograph */ + ["\u713E", "\u713E"], /* CJK Ideograph */ + ["\u713F", "\u713F"], /* CJK Ideograph */ + ["\u7140", "\u7140"], /* CJK Ideograph */ + ["\u7141", "\u7141"], /* CJK Ideograph */ + ["\u7142", "\u7142"], /* CJK Ideograph */ + ["\u7143", "\u7143"], /* CJK Ideograph */ + ["\u7144", "\u7144"], /* CJK Ideograph */ + ["\u7145", "\u7145"], /* CJK Ideograph */ + ["\u7146", "\u7146"], /* CJK Ideograph */ + ["\u7147", "\u7147"], /* CJK Ideograph */ + ["\u7148", "\u7148"], /* CJK Ideograph */ + ["\u7149", "\u7149"], /* CJK Ideograph */ + ["\u714A", "\u714A"], /* CJK Ideograph */ + ["\u714B", "\u714B"], /* CJK Ideograph */ + ["\u714C", "\u714C"], /* CJK Ideograph */ + ["\u714D", "\u714D"], /* CJK Ideograph */ + ["\u714E", "\u714E"], /* CJK Ideograph */ + ["\u714F", "\u714F"], /* CJK Ideograph */ + ["\u7150", "\u7150"], /* CJK Ideograph */ + ["\u7151", "\u7151"], /* CJK Ideograph */ + ["\u7152", "\u7152"], /* CJK Ideograph */ + ["\u7153", "\u7153"], /* CJK Ideograph */ + ["\u7154", "\u7154"], /* CJK Ideograph */ + ["\u7155", "\u7155"], /* CJK Ideograph */ + ["\u7156", "\u7156"], /* CJK Ideograph */ + ["\u7157", "\u7157"], /* CJK Ideograph */ + ["\u7158", "\u7158"], /* CJK Ideograph */ + ["\u7159", "\u7159"], /* CJK Ideograph */ + ["\u715A", "\u715A"], /* CJK Ideograph */ + ["\u715B", "\u715B"], /* CJK Ideograph */ + ["\u715C", "\u715C"], /* CJK Ideograph */ + ["\u715D", "\u715D"], /* CJK Ideograph */ + ["\u715E", "\u715E"], /* CJK Ideograph */ + ["\u715F", "\u715F"], /* CJK Ideograph */ + ["\u7160", "\u7160"], /* CJK Ideograph */ + ["\u7161", "\u7161"], /* CJK Ideograph */ + ["\u7162", "\u7162"], /* CJK Ideograph */ + ["\u7163", "\u7163"], /* CJK Ideograph */ + ["\u7164", "\u7164"], /* CJK Ideograph */ + ["\u7165", "\u7165"], /* CJK Ideograph */ + ["\u7166", "\u7166"], /* CJK Ideograph */ + ["\u7167", "\u7167"], /* CJK Ideograph */ + ["\u7168", "\u7168"], /* CJK Ideograph */ + ["\u7169", "\u7169"], /* CJK Ideograph */ + ["\u716A", "\u716A"], /* CJK Ideograph */ + ["\u716B", "\u716B"], /* CJK Ideograph */ + ["\u716C", "\u716C"], /* CJK Ideograph */ + ["\u716D", "\u716D"], /* CJK Ideograph */ + ["\u716E", "\u716E"], /* CJK Ideograph */ + ["\u716F", "\u716F"], /* CJK Ideograph */ + ["\u7170", "\u7170"], /* CJK Ideograph */ + ["\u7171", "\u7171"], /* CJK Ideograph */ + ["\u7172", "\u7172"], /* CJK Ideograph */ + ["\u7173", "\u7173"], /* CJK Ideograph */ + ["\u7174", "\u7174"], /* CJK Ideograph */ + ["\u7175", "\u7175"], /* CJK Ideograph */ + ["\u7176", "\u7176"], /* CJK Ideograph */ + ["\u7177", "\u7177"], /* CJK Ideograph */ + ["\u7178", "\u7178"], /* CJK Ideograph */ + ["\u7179", "\u7179"], /* CJK Ideograph */ + ["\u717A", "\u717A"], /* CJK Ideograph */ + ["\u717B", "\u717B"], /* CJK Ideograph */ + ["\u717C", "\u717C"], /* CJK Ideograph */ + ["\u717D", "\u717D"], /* CJK Ideograph */ + ["\u717E", "\u717E"], /* CJK Ideograph */ + ["\u717F", "\u717F"], /* CJK Ideograph */ + ["\u7180", "\u7180"], /* CJK Ideograph */ + ["\u7181", "\u7181"], /* CJK Ideograph */ + ["\u7182", "\u7182"], /* CJK Ideograph */ + ["\u7183", "\u7183"], /* CJK Ideograph */ + ["\u7184", "\u7184"], /* CJK Ideograph */ + ["\u7185", "\u7185"], /* CJK Ideograph */ + ["\u7186", "\u7186"], /* CJK Ideograph */ + ["\u7187", "\u7187"], /* CJK Ideograph */ + ["\u7188", "\u7188"], /* CJK Ideograph */ + ["\u7189", "\u7189"], /* CJK Ideograph */ + ["\u718A", "\u718A"], /* CJK Ideograph */ + ["\u718B", "\u718B"], /* CJK Ideograph */ + ["\u718C", "\u718C"], /* CJK Ideograph */ + ["\u718D", "\u718D"], /* CJK Ideograph */ + ["\u718E", "\u718E"], /* CJK Ideograph */ + ["\u718F", "\u718F"], /* CJK Ideograph */ + ["\u7190", "\u7190"], /* CJK Ideograph */ + ["\u7191", "\u7191"], /* CJK Ideograph */ + ["\u7192", "\u7192"], /* CJK Ideograph */ + ["\u7193", "\u7193"], /* CJK Ideograph */ + ["\u7194", "\u7194"], /* CJK Ideograph */ + ["\u7195", "\u7195"], /* CJK Ideograph */ + ["\u7196", "\u7196"], /* CJK Ideograph */ + ["\u7197", "\u7197"], /* CJK Ideograph */ + ["\u7198", "\u7198"], /* CJK Ideograph */ + ["\u7199", "\u7199"], /* CJK Ideograph */ + ["\u719A", "\u719A"], /* CJK Ideograph */ + ["\u719B", "\u719B"], /* CJK Ideograph */ + ["\u719C", "\u719C"], /* CJK Ideograph */ + ["\u719D", "\u719D"], /* CJK Ideograph */ + ["\u719E", "\u719E"], /* CJK Ideograph */ + ["\u719F", "\u719F"], /* CJK Ideograph */ + ["\u71A0", "\u71A0"], /* CJK Ideograph */ + ["\u71A1", "\u71A1"], /* CJK Ideograph */ + ["\u71A2", "\u71A2"], /* CJK Ideograph */ + ["\u71A3", "\u71A3"], /* CJK Ideograph */ + ["\u71A4", "\u71A4"], /* CJK Ideograph */ + ["\u71A5", "\u71A5"], /* CJK Ideograph */ + ["\u71A6", "\u71A6"], /* CJK Ideograph */ + ["\u71A7", "\u71A7"], /* CJK Ideograph */ + ["\u71A8", "\u71A8"], /* CJK Ideograph */ + ["\u71A9", "\u71A9"], /* CJK Ideograph */ + ["\u71AA", "\u71AA"], /* CJK Ideograph */ + ["\u71AB", "\u71AB"], /* CJK Ideograph */ + ["\u71AC", "\u71AC"], /* CJK Ideograph */ + ["\u71AD", "\u71AD"], /* CJK Ideograph */ + ["\u71AE", "\u71AE"], /* CJK Ideograph */ + ["\u71AF", "\u71AF"], /* CJK Ideograph */ + ["\u71B0", "\u71B0"], /* CJK Ideograph */ + ["\u71B1", "\u71B1"], /* CJK Ideograph */ + ["\u71B2", "\u71B2"], /* CJK Ideograph */ + ["\u71B3", "\u71B3"], /* CJK Ideograph */ + ["\u71B4", "\u71B4"], /* CJK Ideograph */ + ["\u71B5", "\u71B5"], /* CJK Ideograph */ + ["\u71B6", "\u71B6"], /* CJK Ideograph */ + ["\u71B7", "\u71B7"], /* CJK Ideograph */ + ["\u71B8", "\u71B8"], /* CJK Ideograph */ + ["\u71B9", "\u71B9"], /* CJK Ideograph */ + ["\u71BA", "\u71BA"], /* CJK Ideograph */ + ["\u71BB", "\u71BB"], /* CJK Ideograph */ + ["\u71BC", "\u71BC"], /* CJK Ideograph */ + ["\u71BD", "\u71BD"], /* CJK Ideograph */ + ["\u71BE", "\u71BE"], /* CJK Ideograph */ + ["\u71BF", "\u71BF"], /* CJK Ideograph */ + ["\u71C0", "\u71C0"], /* CJK Ideograph */ + ["\u71C1", "\u71C1"], /* CJK Ideograph */ + ["\u71C2", "\u71C2"], /* CJK Ideograph */ + ["\u71C3", "\u71C3"], /* CJK Ideograph */ + ["\u71C4", "\u71C4"], /* CJK Ideograph */ + ["\u71C5", "\u71C5"], /* CJK Ideograph */ + ["\u71C6", "\u71C6"], /* CJK Ideograph */ + ["\u71C7", "\u71C7"], /* CJK Ideograph */ + ["\u71C8", "\u71C8"], /* CJK Ideograph */ + ["\u71C9", "\u71C9"], /* CJK Ideograph */ + ["\u71CA", "\u71CA"], /* CJK Ideograph */ + ["\u71CB", "\u71CB"], /* CJK Ideograph */ + ["\u71CC", "\u71CC"], /* CJK Ideograph */ + ["\u71CD", "\u71CD"], /* CJK Ideograph */ + ["\u71CE", "\u71CE"], /* CJK Ideograph */ + ["\u71CF", "\u71CF"], /* CJK Ideograph */ + ["\u71D0", "\u71D0"], /* CJK Ideograph */ + ["\u71D1", "\u71D1"], /* CJK Ideograph */ + ["\u71D2", "\u71D2"], /* CJK Ideograph */ + ["\u71D3", "\u71D3"], /* CJK Ideograph */ + ["\u71D4", "\u71D4"], /* CJK Ideograph */ + ["\u71D5", "\u71D5"], /* CJK Ideograph */ + ["\u71D6", "\u71D6"], /* CJK Ideograph */ + ["\u71D7", "\u71D7"], /* CJK Ideograph */ + ["\u71D8", "\u71D8"], /* CJK Ideograph */ + ["\u71D9", "\u71D9"], /* CJK Ideograph */ + ["\u71DA", "\u71DA"], /* CJK Ideograph */ + ["\u71DB", "\u71DB"], /* CJK Ideograph */ + ["\u71DC", "\u71DC"], /* CJK Ideograph */ + ["\u71DD", "\u71DD"], /* CJK Ideograph */ + ["\u71DE", "\u71DE"], /* CJK Ideograph */ + ["\u71DF", "\u71DF"], /* CJK Ideograph */ + ["\u71E0", "\u71E0"], /* CJK Ideograph */ + ["\u71E1", "\u71E1"], /* CJK Ideograph */ + ["\u71E2", "\u71E2"], /* CJK Ideograph */ + ["\u71E3", "\u71E3"], /* CJK Ideograph */ + ["\u71E4", "\u71E4"], /* CJK Ideograph */ + ["\u71E5", "\u71E5"], /* CJK Ideograph */ + ["\u71E6", "\u71E6"], /* CJK Ideograph */ + ["\u71E7", "\u71E7"], /* CJK Ideograph */ + ["\u71E8", "\u71E8"], /* CJK Ideograph */ + ["\u71E9", "\u71E9"], /* CJK Ideograph */ + ["\u71EA", "\u71EA"], /* CJK Ideograph */ + ["\u71EB", "\u71EB"], /* CJK Ideograph */ + ["\u71EC", "\u71EC"], /* CJK Ideograph */ + ["\u71ED", "\u71ED"], /* CJK Ideograph */ + ["\u71EE", "\u71EE"], /* CJK Ideograph */ + ["\u71EF", "\u71EF"], /* CJK Ideograph */ + ["\u71F0", "\u71F0"], /* CJK Ideograph */ + ["\u71F1", "\u71F1"], /* CJK Ideograph */ + ["\u71F2", "\u71F2"], /* CJK Ideograph */ + ["\u71F3", "\u71F3"], /* CJK Ideograph */ + ["\u71F4", "\u71F4"], /* CJK Ideograph */ + ["\u71F5", "\u71F5"], /* CJK Ideograph */ + ["\u71F6", "\u71F6"], /* CJK Ideograph */ + ["\u71F7", "\u71F7"], /* CJK Ideograph */ + ["\u71F8", "\u71F8"], /* CJK Ideograph */ + ["\u71F9", "\u71F9"], /* CJK Ideograph */ + ["\u71FA", "\u71FA"], /* CJK Ideograph */ + ["\u71FB", "\u71FB"], /* CJK Ideograph */ + ["\u71FC", "\u71FC"], /* CJK Ideograph */ + ["\u71FD", "\u71FD"], /* CJK Ideograph */ + ["\u71FE", "\u71FE"], /* CJK Ideograph */ + ["\u71FF", "\u71FF"], /* CJK Ideograph */ + ["\u7200", "\u7200"], /* CJK Ideograph */ + ["\u7201", "\u7201"], /* CJK Ideograph */ + ["\u7202", "\u7202"], /* CJK Ideograph */ + ["\u7203", "\u7203"], /* CJK Ideograph */ + ["\u7204", "\u7204"], /* CJK Ideograph */ + ["\u7205", "\u7205"], /* CJK Ideograph */ + ["\u7206", "\u7206"], /* CJK Ideograph */ + ["\u7207", "\u7207"], /* CJK Ideograph */ + ["\u7208", "\u7208"], /* CJK Ideograph */ + ["\u7209", "\u7209"], /* CJK Ideograph */ + ["\u720A", "\u720A"], /* CJK Ideograph */ + ["\u720B", "\u720B"], /* CJK Ideograph */ + ["\u720C", "\u720C"], /* CJK Ideograph */ + ["\u720D", "\u720D"], /* CJK Ideograph */ + ["\u720E", "\u720E"], /* CJK Ideograph */ + ["\u720F", "\u720F"], /* CJK Ideograph */ + ["\u7210", "\u7210"], /* CJK Ideograph */ + ["\u7211", "\u7211"], /* CJK Ideograph */ + ["\u7212", "\u7212"], /* CJK Ideograph */ + ["\u7213", "\u7213"], /* CJK Ideograph */ + ["\u7214", "\u7214"], /* CJK Ideograph */ + ["\u7215", "\u7215"], /* CJK Ideograph */ + ["\u7216", "\u7216"], /* CJK Ideograph */ + ["\u7217", "\u7217"], /* CJK Ideograph */ + ["\u7218", "\u7218"], /* CJK Ideograph */ + ["\u7219", "\u7219"], /* CJK Ideograph */ + ["\u721A", "\u721A"], /* CJK Ideograph */ + ["\u721B", "\u721B"], /* CJK Ideograph */ + ["\u721C", "\u721C"], /* CJK Ideograph */ + ["\u721D", "\u721D"], /* CJK Ideograph */ + ["\u721E", "\u721E"], /* CJK Ideograph */ + ["\u721F", "\u721F"], /* CJK Ideograph */ + ["\u7220", "\u7220"], /* CJK Ideograph */ + ["\u7221", "\u7221"], /* CJK Ideograph */ + ["\u7222", "\u7222"], /* CJK Ideograph */ + ["\u7223", "\u7223"], /* CJK Ideograph */ + ["\u7224", "\u7224"], /* CJK Ideograph */ + ["\u7225", "\u7225"], /* CJK Ideograph */ + ["\u7226", "\u7226"], /* CJK Ideograph */ + ["\u7227", "\u7227"], /* CJK Ideograph */ + ["\u7228", "\u7228"], /* CJK Ideograph */ + ["\u7229", "\u7229"], /* CJK Ideograph */ + ["\u722A", "\u722A"], /* CJK Ideograph */ + ["\u722B", "\u722B"], /* CJK Ideograph */ + ["\u722C", "\u722C"], /* CJK Ideograph */ + ["\u722D", "\u722D"], /* CJK Ideograph */ + ["\u722E", "\u722E"], /* CJK Ideograph */ + ["\u722F", "\u722F"], /* CJK Ideograph */ + ["\u7230", "\u7230"], /* CJK Ideograph */ + ["\u7231", "\u7231"], /* CJK Ideograph */ + ["\u7232", "\u7232"], /* CJK Ideograph */ + ["\u7233", "\u7233"], /* CJK Ideograph */ + ["\u7234", "\u7234"], /* CJK Ideograph */ + ["\u7235", "\u7235"], /* CJK Ideograph */ + ["\u7236", "\u7236"], /* CJK Ideograph */ + ["\u7237", "\u7237"], /* CJK Ideograph */ + ["\u7238", "\u7238"], /* CJK Ideograph */ + ["\u7239", "\u7239"], /* CJK Ideograph */ + ["\u723A", "\u723A"], /* CJK Ideograph */ + ["\u723B", "\u723B"], /* CJK Ideograph */ + ["\u723C", "\u723C"], /* CJK Ideograph */ + ["\u723D", "\u723D"], /* CJK Ideograph */ + ["\u723E", "\u723E"], /* CJK Ideograph */ + ["\u723F", "\u723F"], /* CJK Ideograph */ + ["\u7240", "\u7240"], /* CJK Ideograph */ + ["\u7241", "\u7241"], /* CJK Ideograph */ + ["\u7242", "\u7242"], /* CJK Ideograph */ + ["\u7243", "\u7243"], /* CJK Ideograph */ + ["\u7244", "\u7244"], /* CJK Ideograph */ + ["\u7245", "\u7245"], /* CJK Ideograph */ + ["\u7246", "\u7246"], /* CJK Ideograph */ + ["\u7247", "\u7247"], /* CJK Ideograph */ + ["\u7248", "\u7248"], /* CJK Ideograph */ + ["\u7249", "\u7249"], /* CJK Ideograph */ + ["\u724A", "\u724A"], /* CJK Ideograph */ + ["\u724B", "\u724B"], /* CJK Ideograph */ + ["\u724C", "\u724C"], /* CJK Ideograph */ + ["\u724D", "\u724D"], /* CJK Ideograph */ + ["\u724E", "\u724E"], /* CJK Ideograph */ + ["\u724F", "\u724F"], /* CJK Ideograph */ + ["\u7250", "\u7250"], /* CJK Ideograph */ + ["\u7251", "\u7251"], /* CJK Ideograph */ + ["\u7252", "\u7252"], /* CJK Ideograph */ + ["\u7253", "\u7253"], /* CJK Ideograph */ + ["\u7254", "\u7254"], /* CJK Ideograph */ + ["\u7255", "\u7255"], /* CJK Ideograph */ + ["\u7256", "\u7256"], /* CJK Ideograph */ + ["\u7257", "\u7257"], /* CJK Ideograph */ + ["\u7258", "\u7258"], /* CJK Ideograph */ + ["\u7259", "\u7259"], /* CJK Ideograph */ + ["\u725A", "\u725A"], /* CJK Ideograph */ + ["\u725B", "\u725B"], /* CJK Ideograph */ + ["\u725C", "\u725C"], /* CJK Ideograph */ + ["\u725D", "\u725D"], /* CJK Ideograph */ + ["\u725E", "\u725E"], /* CJK Ideograph */ + ["\u725F", "\u725F"], /* CJK Ideograph */ + ["\u7260", "\u7260"], /* CJK Ideograph */ + ["\u7261", "\u7261"], /* CJK Ideograph */ + ["\u7262", "\u7262"], /* CJK Ideograph */ + ["\u7263", "\u7263"], /* CJK Ideograph */ + ["\u7264", "\u7264"], /* CJK Ideograph */ + ["\u7265", "\u7265"], /* CJK Ideograph */ + ["\u7266", "\u7266"], /* CJK Ideograph */ + ["\u7267", "\u7267"], /* CJK Ideograph */ + ["\u7268", "\u7268"], /* CJK Ideograph */ + ["\u7269", "\u7269"], /* CJK Ideograph */ + ["\u726A", "\u726A"], /* CJK Ideograph */ + ["\u726B", "\u726B"], /* CJK Ideograph */ + ["\u726C", "\u726C"], /* CJK Ideograph */ + ["\u726D", "\u726D"], /* CJK Ideograph */ + ["\u726E", "\u726E"], /* CJK Ideograph */ + ["\u726F", "\u726F"], /* CJK Ideograph */ + ["\u7270", "\u7270"], /* CJK Ideograph */ + ["\u7271", "\u7271"], /* CJK Ideograph */ + ["\u7272", "\u7272"], /* CJK Ideograph */ + ["\u7273", "\u7273"], /* CJK Ideograph */ + ["\u7274", "\u7274"], /* CJK Ideograph */ + ["\u7275", "\u7275"], /* CJK Ideograph */ + ["\u7276", "\u7276"], /* CJK Ideograph */ + ["\u7277", "\u7277"], /* CJK Ideograph */ + ["\u7278", "\u7278"], /* CJK Ideograph */ + ["\u7279", "\u7279"], /* CJK Ideograph */ + ["\u727A", "\u727A"], /* CJK Ideograph */ + ["\u727B", "\u727B"], /* CJK Ideograph */ + ["\u727C", "\u727C"], /* CJK Ideograph */ + ["\u727D", "\u727D"], /* CJK Ideograph */ + ["\u727E", "\u727E"], /* CJK Ideograph */ + ["\u727F", "\u727F"], /* CJK Ideograph */ + ["\u7280", "\u7280"], /* CJK Ideograph */ + ["\u7281", "\u7281"], /* CJK Ideograph */ + ["\u7282", "\u7282"], /* CJK Ideograph */ + ["\u7283", "\u7283"], /* CJK Ideograph */ + ["\u7284", "\u7284"], /* CJK Ideograph */ + ["\u7285", "\u7285"], /* CJK Ideograph */ + ["\u7286", "\u7286"], /* CJK Ideograph */ + ["\u7287", "\u7287"], /* CJK Ideograph */ + ["\u7288", "\u7288"], /* CJK Ideograph */ + ["\u7289", "\u7289"], /* CJK Ideograph */ + ["\u728A", "\u728A"], /* CJK Ideograph */ + ["\u728B", "\u728B"], /* CJK Ideograph */ + ["\u728C", "\u728C"], /* CJK Ideograph */ + ["\u728D", "\u728D"], /* CJK Ideograph */ + ["\u728E", "\u728E"], /* CJK Ideograph */ + ["\u728F", "\u728F"], /* CJK Ideograph */ + ["\u7290", "\u7290"], /* CJK Ideograph */ + ["\u7291", "\u7291"], /* CJK Ideograph */ + ["\u7292", "\u7292"], /* CJK Ideograph */ + ["\u7293", "\u7293"], /* CJK Ideograph */ + ["\u7294", "\u7294"], /* CJK Ideograph */ + ["\u7295", "\u7295"], /* CJK Ideograph */ + ["\u7296", "\u7296"], /* CJK Ideograph */ + ["\u7297", "\u7297"], /* CJK Ideograph */ + ["\u7298", "\u7298"], /* CJK Ideograph */ + ["\u7299", "\u7299"], /* CJK Ideograph */ + ["\u729A", "\u729A"], /* CJK Ideograph */ + ["\u729B", "\u729B"], /* CJK Ideograph */ + ["\u729C", "\u729C"], /* CJK Ideograph */ + ["\u729D", "\u729D"], /* CJK Ideograph */ + ["\u729E", "\u729E"], /* CJK Ideograph */ + ["\u729F", "\u729F"], /* CJK Ideograph */ + ["\u72A0", "\u72A0"], /* CJK Ideograph */ + ["\u72A1", "\u72A1"], /* CJK Ideograph */ + ["\u72A2", "\u72A2"], /* CJK Ideograph */ + ["\u72A3", "\u72A3"], /* CJK Ideograph */ + ["\u72A4", "\u72A4"], /* CJK Ideograph */ + ["\u72A5", "\u72A5"], /* CJK Ideograph */ + ["\u72A6", "\u72A6"], /* CJK Ideograph */ + ["\u72A7", "\u72A7"], /* CJK Ideograph */ + ["\u72A8", "\u72A8"], /* CJK Ideograph */ + ["\u72A9", "\u72A9"], /* CJK Ideograph */ + ["\u72AA", "\u72AA"], /* CJK Ideograph */ + ["\u72AB", "\u72AB"], /* CJK Ideograph */ + ["\u72AC", "\u72AC"], /* CJK Ideograph */ + ["\u72AD", "\u72AD"], /* CJK Ideograph */ + ["\u72AE", "\u72AE"], /* CJK Ideograph */ + ["\u72AF", "\u72AF"], /* CJK Ideograph */ + ["\u72B0", "\u72B0"], /* CJK Ideograph */ + ["\u72B1", "\u72B1"], /* CJK Ideograph */ + ["\u72B2", "\u72B2"], /* CJK Ideograph */ + ["\u72B3", "\u72B3"], /* CJK Ideograph */ + ["\u72B4", "\u72B4"], /* CJK Ideograph */ + ["\u72B5", "\u72B5"], /* CJK Ideograph */ + ["\u72B6", "\u72B6"], /* CJK Ideograph */ + ["\u72B7", "\u72B7"], /* CJK Ideograph */ + ["\u72B8", "\u72B8"], /* CJK Ideograph */ + ["\u72B9", "\u72B9"], /* CJK Ideograph */ + ["\u72BA", "\u72BA"], /* CJK Ideograph */ + ["\u72BB", "\u72BB"], /* CJK Ideograph */ + ["\u72BC", "\u72BC"], /* CJK Ideograph */ + ["\u72BD", "\u72BD"], /* CJK Ideograph */ + ["\u72BE", "\u72BE"], /* CJK Ideograph */ + ["\u72BF", "\u72BF"], /* CJK Ideograph */ + ["\u72C0", "\u72C0"], /* CJK Ideograph */ + ["\u72C1", "\u72C1"], /* CJK Ideograph */ + ["\u72C2", "\u72C2"], /* CJK Ideograph */ + ["\u72C3", "\u72C3"], /* CJK Ideograph */ + ["\u72C4", "\u72C4"], /* CJK Ideograph */ + ["\u72C5", "\u72C5"], /* CJK Ideograph */ + ["\u72C6", "\u72C6"], /* CJK Ideograph */ + ["\u72C7", "\u72C7"], /* CJK Ideograph */ + ["\u72C8", "\u72C8"], /* CJK Ideograph */ + ["\u72C9", "\u72C9"], /* CJK Ideograph */ + ["\u72CA", "\u72CA"], /* CJK Ideograph */ + ["\u72CB", "\u72CB"], /* CJK Ideograph */ + ["\u72CC", "\u72CC"], /* CJK Ideograph */ + ["\u72CD", "\u72CD"], /* CJK Ideograph */ + ["\u72CE", "\u72CE"], /* CJK Ideograph */ + ["\u72CF", "\u72CF"], /* CJK Ideograph */ + ["\u72D0", "\u72D0"], /* CJK Ideograph */ + ["\u72D1", "\u72D1"], /* CJK Ideograph */ + ["\u72D2", "\u72D2"], /* CJK Ideograph */ + ["\u72D3", "\u72D3"], /* CJK Ideograph */ + ["\u72D4", "\u72D4"], /* CJK Ideograph */ + ["\u72D5", "\u72D5"], /* CJK Ideograph */ + ["\u72D6", "\u72D6"], /* CJK Ideograph */ + ["\u72D7", "\u72D7"], /* CJK Ideograph */ + ["\u72D8", "\u72D8"], /* CJK Ideograph */ + ["\u72D9", "\u72D9"], /* CJK Ideograph */ + ["\u72DA", "\u72DA"], /* CJK Ideograph */ + ["\u72DB", "\u72DB"], /* CJK Ideograph */ + ["\u72DC", "\u72DC"], /* CJK Ideograph */ + ["\u72DD", "\u72DD"], /* CJK Ideograph */ + ["\u72DE", "\u72DE"], /* CJK Ideograph */ + ["\u72DF", "\u72DF"], /* CJK Ideograph */ + ["\u72E0", "\u72E0"], /* CJK Ideograph */ + ["\u72E1", "\u72E1"], /* CJK Ideograph */ + ["\u72E2", "\u72E2"], /* CJK Ideograph */ + ["\u72E3", "\u72E3"], /* CJK Ideograph */ + ["\u72E4", "\u72E4"], /* CJK Ideograph */ + ["\u72E5", "\u72E5"], /* CJK Ideograph */ + ["\u72E6", "\u72E6"], /* CJK Ideograph */ + ["\u72E7", "\u72E7"], /* CJK Ideograph */ + ["\u72E8", "\u72E8"], /* CJK Ideograph */ + ["\u72E9", "\u72E9"], /* CJK Ideograph */ + ["\u72EA", "\u72EA"], /* CJK Ideograph */ + ["\u72EB", "\u72EB"], /* CJK Ideograph */ + ["\u72EC", "\u72EC"], /* CJK Ideograph */ + ["\u72ED", "\u72ED"], /* CJK Ideograph */ + ["\u72EE", "\u72EE"], /* CJK Ideograph */ + ["\u72EF", "\u72EF"], /* CJK Ideograph */ + ["\u72F0", "\u72F0"], /* CJK Ideograph */ + ["\u72F1", "\u72F1"], /* CJK Ideograph */ + ["\u72F2", "\u72F2"], /* CJK Ideograph */ + ["\u72F3", "\u72F3"], /* CJK Ideograph */ + ["\u72F4", "\u72F4"], /* CJK Ideograph */ + ["\u72F5", "\u72F5"], /* CJK Ideograph */ + ["\u72F6", "\u72F6"], /* CJK Ideograph */ + ["\u72F7", "\u72F7"], /* CJK Ideograph */ + ["\u72F8", "\u72F8"], /* CJK Ideograph */ + ["\u72F9", "\u72F9"], /* CJK Ideograph */ + ["\u72FA", "\u72FA"], /* CJK Ideograph */ + ["\u72FB", "\u72FB"], /* CJK Ideograph */ + ["\u72FC", "\u72FC"], /* CJK Ideograph */ + ["\u72FD", "\u72FD"], /* CJK Ideograph */ + ["\u72FE", "\u72FE"], /* CJK Ideograph */ + ["\u72FF", "\u72FF"], /* CJK Ideograph */ + ["\u7300", "\u7300"], /* CJK Ideograph */ + ["\u7301", "\u7301"], /* CJK Ideograph */ + ["\u7302", "\u7302"], /* CJK Ideograph */ + ["\u7303", "\u7303"], /* CJK Ideograph */ + ["\u7304", "\u7304"], /* CJK Ideograph */ + ["\u7305", "\u7305"], /* CJK Ideograph */ + ["\u7306", "\u7306"], /* CJK Ideograph */ + ["\u7307", "\u7307"], /* CJK Ideograph */ + ["\u7308", "\u7308"], /* CJK Ideograph */ + ["\u7309", "\u7309"], /* CJK Ideograph */ + ["\u730A", "\u730A"], /* CJK Ideograph */ + ["\u730B", "\u730B"], /* CJK Ideograph */ + ["\u730C", "\u730C"], /* CJK Ideograph */ + ["\u730D", "\u730D"], /* CJK Ideograph */ + ["\u730E", "\u730E"], /* CJK Ideograph */ + ["\u730F", "\u730F"], /* CJK Ideograph */ + ["\u7310", "\u7310"], /* CJK Ideograph */ + ["\u7311", "\u7311"], /* CJK Ideograph */ + ["\u7312", "\u7312"], /* CJK Ideograph */ + ["\u7313", "\u7313"], /* CJK Ideograph */ + ["\u7314", "\u7314"], /* CJK Ideograph */ + ["\u7315", "\u7315"], /* CJK Ideograph */ + ["\u7316", "\u7316"], /* CJK Ideograph */ + ["\u7317", "\u7317"], /* CJK Ideograph */ + ["\u7318", "\u7318"], /* CJK Ideograph */ + ["\u7319", "\u7319"], /* CJK Ideograph */ + ["\u731A", "\u731A"], /* CJK Ideograph */ + ["\u731B", "\u731B"], /* CJK Ideograph */ + ["\u731C", "\u731C"], /* CJK Ideograph */ + ["\u731D", "\u731D"], /* CJK Ideograph */ + ["\u731E", "\u731E"], /* CJK Ideograph */ + ["\u731F", "\u731F"], /* CJK Ideograph */ + ["\u7320", "\u7320"], /* CJK Ideograph */ + ["\u7321", "\u7321"], /* CJK Ideograph */ + ["\u7322", "\u7322"], /* CJK Ideograph */ + ["\u7323", "\u7323"], /* CJK Ideograph */ + ["\u7324", "\u7324"], /* CJK Ideograph */ + ["\u7325", "\u7325"], /* CJK Ideograph */ + ["\u7326", "\u7326"], /* CJK Ideograph */ + ["\u7327", "\u7327"], /* CJK Ideograph */ + ["\u7328", "\u7328"], /* CJK Ideograph */ + ["\u7329", "\u7329"], /* CJK Ideograph */ + ["\u732A", "\u732A"], /* CJK Ideograph */ + ["\u732B", "\u732B"], /* CJK Ideograph */ + ["\u732C", "\u732C"], /* CJK Ideograph */ + ["\u732D", "\u732D"], /* CJK Ideograph */ + ["\u732E", "\u732E"], /* CJK Ideograph */ + ["\u732F", "\u732F"], /* CJK Ideograph */ + ["\u7330", "\u7330"], /* CJK Ideograph */ + ["\u7331", "\u7331"], /* CJK Ideograph */ + ["\u7332", "\u7332"], /* CJK Ideograph */ + ["\u7333", "\u7333"], /* CJK Ideograph */ + ["\u7334", "\u7334"], /* CJK Ideograph */ + ["\u7335", "\u7335"], /* CJK Ideograph */ + ["\u7336", "\u7336"], /* CJK Ideograph */ + ["\u7337", "\u7337"], /* CJK Ideograph */ + ["\u7338", "\u7338"], /* CJK Ideograph */ + ["\u7339", "\u7339"], /* CJK Ideograph */ + ["\u733A", "\u733A"], /* CJK Ideograph */ + ["\u733B", "\u733B"], /* CJK Ideograph */ + ["\u733C", "\u733C"], /* CJK Ideograph */ + ["\u733D", "\u733D"], /* CJK Ideograph */ + ["\u733E", "\u733E"], /* CJK Ideograph */ + ["\u733F", "\u733F"], /* CJK Ideograph */ + ["\u7340", "\u7340"], /* CJK Ideograph */ + ["\u7341", "\u7341"], /* CJK Ideograph */ + ["\u7342", "\u7342"], /* CJK Ideograph */ + ["\u7343", "\u7343"], /* CJK Ideograph */ + ["\u7344", "\u7344"], /* CJK Ideograph */ + ["\u7345", "\u7345"], /* CJK Ideograph */ + ["\u7346", "\u7346"], /* CJK Ideograph */ + ["\u7347", "\u7347"], /* CJK Ideograph */ + ["\u7348", "\u7348"], /* CJK Ideograph */ + ["\u7349", "\u7349"], /* CJK Ideograph */ + ["\u734A", "\u734A"], /* CJK Ideograph */ + ["\u734B", "\u734B"], /* CJK Ideograph */ + ["\u734C", "\u734C"], /* CJK Ideograph */ + ["\u734D", "\u734D"], /* CJK Ideograph */ + ["\u734E", "\u734E"], /* CJK Ideograph */ + ["\u734F", "\u734F"], /* CJK Ideograph */ + ["\u7350", "\u7350"], /* CJK Ideograph */ + ["\u7351", "\u7351"], /* CJK Ideograph */ + ["\u7352", "\u7352"], /* CJK Ideograph */ + ["\u7353", "\u7353"], /* CJK Ideograph */ + ["\u7354", "\u7354"], /* CJK Ideograph */ + ["\u7355", "\u7355"], /* CJK Ideograph */ + ["\u7356", "\u7356"], /* CJK Ideograph */ + ["\u7357", "\u7357"], /* CJK Ideograph */ + ["\u7358", "\u7358"], /* CJK Ideograph */ + ["\u7359", "\u7359"], /* CJK Ideograph */ + ["\u735A", "\u735A"], /* CJK Ideograph */ + ["\u735B", "\u735B"], /* CJK Ideograph */ + ["\u735C", "\u735C"], /* CJK Ideograph */ + ["\u735D", "\u735D"], /* CJK Ideograph */ + ["\u735E", "\u735E"], /* CJK Ideograph */ + ["\u735F", "\u735F"], /* CJK Ideograph */ + ["\u7360", "\u7360"], /* CJK Ideograph */ + ["\u7361", "\u7361"], /* CJK Ideograph */ + ["\u7362", "\u7362"], /* CJK Ideograph */ + ["\u7363", "\u7363"], /* CJK Ideograph */ + ["\u7364", "\u7364"], /* CJK Ideograph */ + ["\u7365", "\u7365"], /* CJK Ideograph */ + ["\u7366", "\u7366"], /* CJK Ideograph */ + ["\u7367", "\u7367"], /* CJK Ideograph */ + ["\u7368", "\u7368"], /* CJK Ideograph */ + ["\u7369", "\u7369"], /* CJK Ideograph */ + ["\u736A", "\u736A"], /* CJK Ideograph */ + ["\u736B", "\u736B"], /* CJK Ideograph */ + ["\u736C", "\u736C"], /* CJK Ideograph */ + ["\u736D", "\u736D"], /* CJK Ideograph */ + ["\u736E", "\u736E"], /* CJK Ideograph */ + ["\u736F", "\u736F"], /* CJK Ideograph */ + ["\u7370", "\u7370"], /* CJK Ideograph */ + ["\u7371", "\u7371"], /* CJK Ideograph */ + ["\u7372", "\u7372"], /* CJK Ideograph */ + ["\u7373", "\u7373"], /* CJK Ideograph */ + ["\u7374", "\u7374"], /* CJK Ideograph */ + ["\u7375", "\u7375"], /* CJK Ideograph */ + ["\u7376", "\u7376"], /* CJK Ideograph */ + ["\u7377", "\u7377"], /* CJK Ideograph */ + ["\u7378", "\u7378"], /* CJK Ideograph */ + ["\u7379", "\u7379"], /* CJK Ideograph */ + ["\u737A", "\u737A"], /* CJK Ideograph */ + ["\u737B", "\u737B"], /* CJK Ideograph */ + ["\u737C", "\u737C"], /* CJK Ideograph */ + ["\u737D", "\u737D"], /* CJK Ideograph */ + ["\u737E", "\u737E"], /* CJK Ideograph */ + ["\u737F", "\u737F"], /* CJK Ideograph */ + ["\u7380", "\u7380"], /* CJK Ideograph */ + ["\u7381", "\u7381"], /* CJK Ideograph */ + ["\u7382", "\u7382"], /* CJK Ideograph */ + ["\u7383", "\u7383"], /* CJK Ideograph */ + ["\u7384", "\u7384"], /* CJK Ideograph */ + ["\u7385", "\u7385"], /* CJK Ideograph */ + ["\u7386", "\u7386"], /* CJK Ideograph */ + ["\u7387", "\u7387"], /* CJK Ideograph */ + ["\u7388", "\u7388"], /* CJK Ideograph */ + ["\u7389", "\u7389"], /* CJK Ideograph */ + ["\u738A", "\u738A"], /* CJK Ideograph */ + ["\u738B", "\u738B"], /* CJK Ideograph */ + ["\u738C", "\u738C"], /* CJK Ideograph */ + ["\u738D", "\u738D"], /* CJK Ideograph */ + ["\u738E", "\u738E"], /* CJK Ideograph */ + ["\u738F", "\u738F"], /* CJK Ideograph */ + ["\u7390", "\u7390"], /* CJK Ideograph */ + ["\u7391", "\u7391"], /* CJK Ideograph */ + ["\u7392", "\u7392"], /* CJK Ideograph */ + ["\u7393", "\u7393"], /* CJK Ideograph */ + ["\u7394", "\u7394"], /* CJK Ideograph */ + ["\u7395", "\u7395"], /* CJK Ideograph */ + ["\u7396", "\u7396"], /* CJK Ideograph */ + ["\u7397", "\u7397"], /* CJK Ideograph */ + ["\u7398", "\u7398"], /* CJK Ideograph */ + ["\u7399", "\u7399"], /* CJK Ideograph */ + ["\u739A", "\u739A"], /* CJK Ideograph */ + ["\u739B", "\u739B"], /* CJK Ideograph */ + ["\u739C", "\u739C"], /* CJK Ideograph */ + ["\u739D", "\u739D"], /* CJK Ideograph */ + ["\u739E", "\u739E"], /* CJK Ideograph */ + ["\u739F", "\u739F"], /* CJK Ideograph */ + ["\u73A0", "\u73A0"], /* CJK Ideograph */ + ["\u73A1", "\u73A1"], /* CJK Ideograph */ + ["\u73A2", "\u73A2"], /* CJK Ideograph */ + ["\u73A3", "\u73A3"], /* CJK Ideograph */ + ["\u73A4", "\u73A4"], /* CJK Ideograph */ + ["\u73A5", "\u73A5"], /* CJK Ideograph */ + ["\u73A6", "\u73A6"], /* CJK Ideograph */ + ["\u73A7", "\u73A7"], /* CJK Ideograph */ + ["\u73A8", "\u73A8"], /* CJK Ideograph */ + ["\u73A9", "\u73A9"], /* CJK Ideograph */ + ["\u73AA", "\u73AA"], /* CJK Ideograph */ + ["\u73AB", "\u73AB"], /* CJK Ideograph */ + ["\u73AC", "\u73AC"], /* CJK Ideograph */ + ["\u73AD", "\u73AD"], /* CJK Ideograph */ + ["\u73AE", "\u73AE"], /* CJK Ideograph */ + ["\u73AF", "\u73AF"], /* CJK Ideograph */ + ["\u73B0", "\u73B0"], /* CJK Ideograph */ + ["\u73B1", "\u73B1"], /* CJK Ideograph */ + ["\u73B2", "\u73B2"], /* CJK Ideograph */ + ["\u73B3", "\u73B3"], /* CJK Ideograph */ + ["\u73B4", "\u73B4"], /* CJK Ideograph */ + ["\u73B5", "\u73B5"], /* CJK Ideograph */ + ["\u73B6", "\u73B6"], /* CJK Ideograph */ + ["\u73B7", "\u73B7"], /* CJK Ideograph */ + ["\u73B8", "\u73B8"], /* CJK Ideograph */ + ["\u73B9", "\u73B9"], /* CJK Ideograph */ + ["\u73BA", "\u73BA"], /* CJK Ideograph */ + ["\u73BB", "\u73BB"], /* CJK Ideograph */ + ["\u73BC", "\u73BC"], /* CJK Ideograph */ + ["\u73BD", "\u73BD"], /* CJK Ideograph */ + ["\u73BE", "\u73BE"], /* CJK Ideograph */ + ["\u73BF", "\u73BF"], /* CJK Ideograph */ + ["\u73C0", "\u73C0"], /* CJK Ideograph */ + ["\u73C1", "\u73C1"], /* CJK Ideograph */ + ["\u73C2", "\u73C2"], /* CJK Ideograph */ + ["\u73C3", "\u73C3"], /* CJK Ideograph */ + ["\u73C4", "\u73C4"], /* CJK Ideograph */ + ["\u73C5", "\u73C5"], /* CJK Ideograph */ + ["\u73C6", "\u73C6"], /* CJK Ideograph */ + ["\u73C7", "\u73C7"], /* CJK Ideograph */ + ["\u73C8", "\u73C8"], /* CJK Ideograph */ + ["\u73C9", "\u73C9"], /* CJK Ideograph */ + ["\u73CA", "\u73CA"], /* CJK Ideograph */ + ["\u73CB", "\u73CB"], /* CJK Ideograph */ + ["\u73CC", "\u73CC"], /* CJK Ideograph */ + ["\u73CD", "\u73CD"], /* CJK Ideograph */ + ["\u73CE", "\u73CE"], /* CJK Ideograph */ + ["\u73CF", "\u73CF"], /* CJK Ideograph */ + ["\u73D0", "\u73D0"], /* CJK Ideograph */ + ["\u73D1", "\u73D1"], /* CJK Ideograph */ + ["\u73D2", "\u73D2"], /* CJK Ideograph */ + ["\u73D3", "\u73D3"], /* CJK Ideograph */ + ["\u73D4", "\u73D4"], /* CJK Ideograph */ + ["\u73D5", "\u73D5"], /* CJK Ideograph */ + ["\u73D6", "\u73D6"], /* CJK Ideograph */ + ["\u73D7", "\u73D7"], /* CJK Ideograph */ + ["\u73D8", "\u73D8"], /* CJK Ideograph */ + ["\u73D9", "\u73D9"], /* CJK Ideograph */ + ["\u73DA", "\u73DA"], /* CJK Ideograph */ + ["\u73DB", "\u73DB"], /* CJK Ideograph */ + ["\u73DC", "\u73DC"], /* CJK Ideograph */ + ["\u73DD", "\u73DD"], /* CJK Ideograph */ + ["\u73DE", "\u73DE"], /* CJK Ideograph */ + ["\u73DF", "\u73DF"], /* CJK Ideograph */ + ["\u73E0", "\u73E0"], /* CJK Ideograph */ + ["\u73E1", "\u73E1"], /* CJK Ideograph */ + ["\u73E2", "\u73E2"], /* CJK Ideograph */ + ["\u73E3", "\u73E3"], /* CJK Ideograph */ + ["\u73E4", "\u73E4"], /* CJK Ideograph */ + ["\u73E5", "\u73E5"], /* CJK Ideograph */ + ["\u73E6", "\u73E6"], /* CJK Ideograph */ + ["\u73E7", "\u73E7"], /* CJK Ideograph */ + ["\u73E8", "\u73E8"], /* CJK Ideograph */ + ["\u73E9", "\u73E9"], /* CJK Ideograph */ + ["\u73EA", "\u73EA"], /* CJK Ideograph */ + ["\u73EB", "\u73EB"], /* CJK Ideograph */ + ["\u73EC", "\u73EC"], /* CJK Ideograph */ + ["\u73ED", "\u73ED"], /* CJK Ideograph */ + ["\u73EE", "\u73EE"], /* CJK Ideograph */ + ["\u73EF", "\u73EF"], /* CJK Ideograph */ + ["\u73F0", "\u73F0"], /* CJK Ideograph */ + ["\u73F1", "\u73F1"], /* CJK Ideograph */ + ["\u73F2", "\u73F2"], /* CJK Ideograph */ + ["\u73F3", "\u73F3"], /* CJK Ideograph */ + ["\u73F4", "\u73F4"], /* CJK Ideograph */ + ["\u73F5", "\u73F5"], /* CJK Ideograph */ + ["\u73F6", "\u73F6"], /* CJK Ideograph */ + ["\u73F7", "\u73F7"], /* CJK Ideograph */ + ["\u73F8", "\u73F8"], /* CJK Ideograph */ + ["\u73F9", "\u73F9"], /* CJK Ideograph */ + ["\u73FA", "\u73FA"], /* CJK Ideograph */ + ["\u73FB", "\u73FB"], /* CJK Ideograph */ + ["\u73FC", "\u73FC"], /* CJK Ideograph */ + ["\u73FD", "\u73FD"], /* CJK Ideograph */ + ["\u73FE", "\u73FE"], /* CJK Ideograph */ + ["\u73FF", "\u73FF"], /* CJK Ideograph */ + ["\u7400", "\u7400"], /* CJK Ideograph */ + ["\u7401", "\u7401"], /* CJK Ideograph */ + ["\u7402", "\u7402"], /* CJK Ideograph */ + ["\u7403", "\u7403"], /* CJK Ideograph */ + ["\u7404", "\u7404"], /* CJK Ideograph */ + ["\u7405", "\u7405"], /* CJK Ideograph */ + ["\u7406", "\u7406"], /* CJK Ideograph */ + ["\u7407", "\u7407"], /* CJK Ideograph */ + ["\u7408", "\u7408"], /* CJK Ideograph */ + ["\u7409", "\u7409"], /* CJK Ideograph */ + ["\u740A", "\u740A"], /* CJK Ideograph */ + ["\u740B", "\u740B"], /* CJK Ideograph */ + ["\u740C", "\u740C"], /* CJK Ideograph */ + ["\u740D", "\u740D"], /* CJK Ideograph */ + ["\u740E", "\u740E"], /* CJK Ideograph */ + ["\u740F", "\u740F"], /* CJK Ideograph */ + ["\u7410", "\u7410"], /* CJK Ideograph */ + ["\u7411", "\u7411"], /* CJK Ideograph */ + ["\u7412", "\u7412"], /* CJK Ideograph */ + ["\u7413", "\u7413"], /* CJK Ideograph */ + ["\u7414", "\u7414"], /* CJK Ideograph */ + ["\u7415", "\u7415"], /* CJK Ideograph */ + ["\u7416", "\u7416"], /* CJK Ideograph */ + ["\u7417", "\u7417"], /* CJK Ideograph */ + ["\u7418", "\u7418"], /* CJK Ideograph */ + ["\u7419", "\u7419"], /* CJK Ideograph */ + ["\u741A", "\u741A"], /* CJK Ideograph */ + ["\u741B", "\u741B"], /* CJK Ideograph */ + ["\u741C", "\u741C"], /* CJK Ideograph */ + ["\u741D", "\u741D"], /* CJK Ideograph */ + ["\u741E", "\u741E"], /* CJK Ideograph */ + ["\u741F", "\u741F"], /* CJK Ideograph */ + ["\u7420", "\u7420"], /* CJK Ideograph */ + ["\u7421", "\u7421"], /* CJK Ideograph */ + ["\u7422", "\u7422"], /* CJK Ideograph */ + ["\u7423", "\u7423"], /* CJK Ideograph */ + ["\u7424", "\u7424"], /* CJK Ideograph */ + ["\u7425", "\u7425"], /* CJK Ideograph */ + ["\u7426", "\u7426"], /* CJK Ideograph */ + ["\u7427", "\u7427"], /* CJK Ideograph */ + ["\u7428", "\u7428"], /* CJK Ideograph */ + ["\u7429", "\u7429"], /* CJK Ideograph */ + ["\u742A", "\u742A"], /* CJK Ideograph */ + ["\u742B", "\u742B"], /* CJK Ideograph */ + ["\u742C", "\u742C"], /* CJK Ideograph */ + ["\u742D", "\u742D"], /* CJK Ideograph */ + ["\u742E", "\u742E"], /* CJK Ideograph */ + ["\u742F", "\u742F"], /* CJK Ideograph */ + ["\u7430", "\u7430"], /* CJK Ideograph */ + ["\u7431", "\u7431"], /* CJK Ideograph */ + ["\u7432", "\u7432"], /* CJK Ideograph */ + ["\u7433", "\u7433"], /* CJK Ideograph */ + ["\u7434", "\u7434"], /* CJK Ideograph */ + ["\u7435", "\u7435"], /* CJK Ideograph */ + ["\u7436", "\u7436"], /* CJK Ideograph */ + ["\u7437", "\u7437"], /* CJK Ideograph */ + ["\u7438", "\u7438"], /* CJK Ideograph */ + ["\u7439", "\u7439"], /* CJK Ideograph */ + ["\u743A", "\u743A"], /* CJK Ideograph */ + ["\u743B", "\u743B"], /* CJK Ideograph */ + ["\u743C", "\u743C"], /* CJK Ideograph */ + ["\u743D", "\u743D"], /* CJK Ideograph */ + ["\u743E", "\u743E"], /* CJK Ideograph */ + ["\u743F", "\u743F"], /* CJK Ideograph */ + ["\u7440", "\u7440"], /* CJK Ideograph */ + ["\u7441", "\u7441"], /* CJK Ideograph */ + ["\u7442", "\u7442"], /* CJK Ideograph */ + ["\u7443", "\u7443"], /* CJK Ideograph */ + ["\u7444", "\u7444"], /* CJK Ideograph */ + ["\u7445", "\u7445"], /* CJK Ideograph */ + ["\u7446", "\u7446"], /* CJK Ideograph */ + ["\u7447", "\u7447"], /* CJK Ideograph */ + ["\u7448", "\u7448"], /* CJK Ideograph */ + ["\u7449", "\u7449"], /* CJK Ideograph */ + ["\u744A", "\u744A"], /* CJK Ideograph */ + ["\u744B", "\u744B"], /* CJK Ideograph */ + ["\u744C", "\u744C"], /* CJK Ideograph */ + ["\u744D", "\u744D"], /* CJK Ideograph */ + ["\u744E", "\u744E"], /* CJK Ideograph */ + ["\u744F", "\u744F"], /* CJK Ideograph */ + ["\u7450", "\u7450"], /* CJK Ideograph */ + ["\u7451", "\u7451"], /* CJK Ideograph */ + ["\u7452", "\u7452"], /* CJK Ideograph */ + ["\u7453", "\u7453"], /* CJK Ideograph */ + ["\u7454", "\u7454"], /* CJK Ideograph */ + ["\u7455", "\u7455"], /* CJK Ideograph */ + ["\u7456", "\u7456"], /* CJK Ideograph */ + ["\u7457", "\u7457"], /* CJK Ideograph */ + ["\u7458", "\u7458"], /* CJK Ideograph */ + ["\u7459", "\u7459"], /* CJK Ideograph */ + ["\u745A", "\u745A"], /* CJK Ideograph */ + ["\u745B", "\u745B"], /* CJK Ideograph */ + ["\u745C", "\u745C"], /* CJK Ideograph */ + ["\u745D", "\u745D"], /* CJK Ideograph */ + ["\u745E", "\u745E"], /* CJK Ideograph */ + ["\u745F", "\u745F"], /* CJK Ideograph */ + ["\u7460", "\u7460"], /* CJK Ideograph */ + ["\u7461", "\u7461"], /* CJK Ideograph */ + ["\u7462", "\u7462"], /* CJK Ideograph */ + ["\u7463", "\u7463"], /* CJK Ideograph */ + ["\u7464", "\u7464"], /* CJK Ideograph */ + ["\u7465", "\u7465"], /* CJK Ideograph */ + ["\u7466", "\u7466"], /* CJK Ideograph */ + ["\u7467", "\u7467"], /* CJK Ideograph */ + ["\u7468", "\u7468"], /* CJK Ideograph */ + ["\u7469", "\u7469"], /* CJK Ideograph */ + ["\u746A", "\u746A"], /* CJK Ideograph */ + ["\u746B", "\u746B"], /* CJK Ideograph */ + ["\u746C", "\u746C"], /* CJK Ideograph */ + ["\u746D", "\u746D"], /* CJK Ideograph */ + ["\u746E", "\u746E"], /* CJK Ideograph */ + ["\u746F", "\u746F"], /* CJK Ideograph */ + ["\u7470", "\u7470"], /* CJK Ideograph */ + ["\u7471", "\u7471"], /* CJK Ideograph */ + ["\u7472", "\u7472"], /* CJK Ideograph */ + ["\u7473", "\u7473"], /* CJK Ideograph */ + ["\u7474", "\u7474"], /* CJK Ideograph */ + ["\u7475", "\u7475"], /* CJK Ideograph */ + ["\u7476", "\u7476"], /* CJK Ideograph */ + ["\u7477", "\u7477"], /* CJK Ideograph */ + ["\u7478", "\u7478"], /* CJK Ideograph */ + ["\u7479", "\u7479"], /* CJK Ideograph */ + ["\u747A", "\u747A"], /* CJK Ideograph */ + ["\u747B", "\u747B"], /* CJK Ideograph */ + ["\u747C", "\u747C"], /* CJK Ideograph */ + ["\u747D", "\u747D"], /* CJK Ideograph */ + ["\u747E", "\u747E"], /* CJK Ideograph */ + ["\u747F", "\u747F"], /* CJK Ideograph */ + ["\u7480", "\u7480"], /* CJK Ideograph */ + ["\u7481", "\u7481"], /* CJK Ideograph */ + ["\u7482", "\u7482"], /* CJK Ideograph */ + ["\u7483", "\u7483"], /* CJK Ideograph */ + ["\u7484", "\u7484"], /* CJK Ideograph */ + ["\u7485", "\u7485"], /* CJK Ideograph */ + ["\u7486", "\u7486"], /* CJK Ideograph */ + ["\u7487", "\u7487"], /* CJK Ideograph */ + ["\u7488", "\u7488"], /* CJK Ideograph */ + ["\u7489", "\u7489"], /* CJK Ideograph */ + ["\u748A", "\u748A"], /* CJK Ideograph */ + ["\u748B", "\u748B"], /* CJK Ideograph */ + ["\u748C", "\u748C"], /* CJK Ideograph */ + ["\u748D", "\u748D"], /* CJK Ideograph */ + ["\u748E", "\u748E"], /* CJK Ideograph */ + ["\u748F", "\u748F"], /* CJK Ideograph */ + ["\u7490", "\u7490"], /* CJK Ideograph */ + ["\u7491", "\u7491"], /* CJK Ideograph */ + ["\u7492", "\u7492"], /* CJK Ideograph */ + ["\u7493", "\u7493"], /* CJK Ideograph */ + ["\u7494", "\u7494"], /* CJK Ideograph */ + ["\u7495", "\u7495"], /* CJK Ideograph */ + ["\u7496", "\u7496"], /* CJK Ideograph */ + ["\u7497", "\u7497"], /* CJK Ideograph */ + ["\u7498", "\u7498"], /* CJK Ideograph */ + ["\u7499", "\u7499"], /* CJK Ideograph */ + ["\u749A", "\u749A"], /* CJK Ideograph */ + ["\u749B", "\u749B"], /* CJK Ideograph */ + ["\u749C", "\u749C"], /* CJK Ideograph */ + ["\u749D", "\u749D"], /* CJK Ideograph */ + ["\u749E", "\u749E"], /* CJK Ideograph */ + ["\u749F", "\u749F"], /* CJK Ideograph */ + ["\u74A0", "\u74A0"], /* CJK Ideograph */ + ["\u74A1", "\u74A1"], /* CJK Ideograph */ + ["\u74A2", "\u74A2"], /* CJK Ideograph */ + ["\u74A3", "\u74A3"], /* CJK Ideograph */ + ["\u74A4", "\u74A4"], /* CJK Ideograph */ + ["\u74A5", "\u74A5"], /* CJK Ideograph */ + ["\u74A6", "\u74A6"], /* CJK Ideograph */ + ["\u74A7", "\u74A7"], /* CJK Ideograph */ + ["\u74A8", "\u74A8"], /* CJK Ideograph */ + ["\u74A9", "\u74A9"], /* CJK Ideograph */ + ["\u74AA", "\u74AA"], /* CJK Ideograph */ + ["\u74AB", "\u74AB"], /* CJK Ideograph */ + ["\u74AC", "\u74AC"], /* CJK Ideograph */ + ["\u74AD", "\u74AD"], /* CJK Ideograph */ + ["\u74AE", "\u74AE"], /* CJK Ideograph */ + ["\u74AF", "\u74AF"], /* CJK Ideograph */ + ["\u74B0", "\u74B0"], /* CJK Ideograph */ + ["\u74B1", "\u74B1"], /* CJK Ideograph */ + ["\u74B2", "\u74B2"], /* CJK Ideograph */ + ["\u74B3", "\u74B3"], /* CJK Ideograph */ + ["\u74B4", "\u74B4"], /* CJK Ideograph */ + ["\u74B5", "\u74B5"], /* CJK Ideograph */ + ["\u74B6", "\u74B6"], /* CJK Ideograph */ + ["\u74B7", "\u74B7"], /* CJK Ideograph */ + ["\u74B8", "\u74B8"], /* CJK Ideograph */ + ["\u74B9", "\u74B9"], /* CJK Ideograph */ + ["\u74BA", "\u74BA"], /* CJK Ideograph */ + ["\u74BB", "\u74BB"], /* CJK Ideograph */ + ["\u74BC", "\u74BC"], /* CJK Ideograph */ + ["\u74BD", "\u74BD"], /* CJK Ideograph */ + ["\u74BE", "\u74BE"], /* CJK Ideograph */ + ["\u74BF", "\u74BF"], /* CJK Ideograph */ + ["\u74C0", "\u74C0"], /* CJK Ideograph */ + ["\u74C1", "\u74C1"], /* CJK Ideograph */ + ["\u74C2", "\u74C2"], /* CJK Ideograph */ + ["\u74C3", "\u74C3"], /* CJK Ideograph */ + ["\u74C4", "\u74C4"], /* CJK Ideograph */ + ["\u74C5", "\u74C5"], /* CJK Ideograph */ + ["\u74C6", "\u74C6"], /* CJK Ideograph */ + ["\u74C7", "\u74C7"], /* CJK Ideograph */ + ["\u74C8", "\u74C8"], /* CJK Ideograph */ + ["\u74C9", "\u74C9"], /* CJK Ideograph */ + ["\u74CA", "\u74CA"], /* CJK Ideograph */ + ["\u74CB", "\u74CB"], /* CJK Ideograph */ + ["\u74CC", "\u74CC"], /* CJK Ideograph */ + ["\u74CD", "\u74CD"], /* CJK Ideograph */ + ["\u74CE", "\u74CE"], /* CJK Ideograph */ + ["\u74CF", "\u74CF"], /* CJK Ideograph */ + ["\u74D0", "\u74D0"], /* CJK Ideograph */ + ["\u74D1", "\u74D1"], /* CJK Ideograph */ + ["\u74D2", "\u74D2"], /* CJK Ideograph */ + ["\u74D3", "\u74D3"], /* CJK Ideograph */ + ["\u74D4", "\u74D4"], /* CJK Ideograph */ + ["\u74D5", "\u74D5"], /* CJK Ideograph */ + ["\u74D6", "\u74D6"], /* CJK Ideograph */ + ["\u74D7", "\u74D7"], /* CJK Ideograph */ + ["\u74D8", "\u74D8"], /* CJK Ideograph */ + ["\u74D9", "\u74D9"], /* CJK Ideograph */ + ["\u74DA", "\u74DA"], /* CJK Ideograph */ + ["\u74DB", "\u74DB"], /* CJK Ideograph */ + ["\u74DC", "\u74DC"], /* CJK Ideograph */ + ["\u74DD", "\u74DD"], /* CJK Ideograph */ + ["\u74DE", "\u74DE"], /* CJK Ideograph */ + ["\u74DF", "\u74DF"], /* CJK Ideograph */ + ["\u74E0", "\u74E0"], /* CJK Ideograph */ + ["\u74E1", "\u74E1"], /* CJK Ideograph */ + ["\u74E2", "\u74E2"], /* CJK Ideograph */ + ["\u74E3", "\u74E3"], /* CJK Ideograph */ + ["\u74E4", "\u74E4"], /* CJK Ideograph */ + ["\u74E5", "\u74E5"], /* CJK Ideograph */ + ["\u74E6", "\u74E6"], /* CJK Ideograph */ + ["\u74E7", "\u74E7"], /* CJK Ideograph */ + ["\u74E8", "\u74E8"], /* CJK Ideograph */ + ["\u74E9", "\u74E9"], /* CJK Ideograph */ + ["\u74EA", "\u74EA"], /* CJK Ideograph */ + ["\u74EB", "\u74EB"], /* CJK Ideograph */ + ["\u74EC", "\u74EC"], /* CJK Ideograph */ + ["\u74ED", "\u74ED"], /* CJK Ideograph */ + ["\u74EE", "\u74EE"], /* CJK Ideograph */ + ["\u74EF", "\u74EF"], /* CJK Ideograph */ + ["\u74F0", "\u74F0"], /* CJK Ideograph */ + ["\u74F1", "\u74F1"], /* CJK Ideograph */ + ["\u74F2", "\u74F2"], /* CJK Ideograph */ + ["\u74F3", "\u74F3"], /* CJK Ideograph */ + ["\u74F4", "\u74F4"], /* CJK Ideograph */ + ["\u74F5", "\u74F5"], /* CJK Ideograph */ + ["\u74F6", "\u74F6"], /* CJK Ideograph */ + ["\u74F7", "\u74F7"], /* CJK Ideograph */ + ["\u74F8", "\u74F8"], /* CJK Ideograph */ + ["\u74F9", "\u74F9"], /* CJK Ideograph */ + ["\u74FA", "\u74FA"], /* CJK Ideograph */ + ["\u74FB", "\u74FB"], /* CJK Ideograph */ + ["\u74FC", "\u74FC"], /* CJK Ideograph */ + ["\u74FD", "\u74FD"], /* CJK Ideograph */ + ["\u74FE", "\u74FE"], /* CJK Ideograph */ + ["\u74FF", "\u74FF"], /* CJK Ideograph */ + ["\u7500", "\u7500"], /* CJK Ideograph */ + ["\u7501", "\u7501"], /* CJK Ideograph */ + ["\u7502", "\u7502"], /* CJK Ideograph */ + ["\u7503", "\u7503"], /* CJK Ideograph */ + ["\u7504", "\u7504"], /* CJK Ideograph */ + ["\u7505", "\u7505"], /* CJK Ideograph */ + ["\u7506", "\u7506"], /* CJK Ideograph */ + ["\u7507", "\u7507"], /* CJK Ideograph */ + ["\u7508", "\u7508"], /* CJK Ideograph */ + ["\u7509", "\u7509"], /* CJK Ideograph */ + ["\u750A", "\u750A"], /* CJK Ideograph */ + ["\u750B", "\u750B"], /* CJK Ideograph */ + ["\u750C", "\u750C"], /* CJK Ideograph */ + ["\u750D", "\u750D"], /* CJK Ideograph */ + ["\u750E", "\u750E"], /* CJK Ideograph */ + ["\u750F", "\u750F"], /* CJK Ideograph */ + ["\u7510", "\u7510"], /* CJK Ideograph */ + ["\u7511", "\u7511"], /* CJK Ideograph */ + ["\u7512", "\u7512"], /* CJK Ideograph */ + ["\u7513", "\u7513"], /* CJK Ideograph */ + ["\u7514", "\u7514"], /* CJK Ideograph */ + ["\u7515", "\u7515"], /* CJK Ideograph */ + ["\u7516", "\u7516"], /* CJK Ideograph */ + ["\u7517", "\u7517"], /* CJK Ideograph */ + ["\u7518", "\u7518"], /* CJK Ideograph */ + ["\u7519", "\u7519"], /* CJK Ideograph */ + ["\u751A", "\u751A"], /* CJK Ideograph */ + ["\u751B", "\u751B"], /* CJK Ideograph */ + ["\u751C", "\u751C"], /* CJK Ideograph */ + ["\u751D", "\u751D"], /* CJK Ideograph */ + ["\u751E", "\u751E"], /* CJK Ideograph */ + ["\u751F", "\u751F"], /* CJK Ideograph */ + ["\u7520", "\u7520"], /* CJK Ideograph */ + ["\u7521", "\u7521"], /* CJK Ideograph */ + ["\u7522", "\u7522"], /* CJK Ideograph */ + ["\u7523", "\u7523"], /* CJK Ideograph */ + ["\u7524", "\u7524"], /* CJK Ideograph */ + ["\u7525", "\u7525"], /* CJK Ideograph */ + ["\u7526", "\u7526"], /* CJK Ideograph */ + ["\u7527", "\u7527"], /* CJK Ideograph */ + ["\u7528", "\u7528"], /* CJK Ideograph */ + ["\u7529", "\u7529"], /* CJK Ideograph */ + ["\u752A", "\u752A"], /* CJK Ideograph */ + ["\u752B", "\u752B"], /* CJK Ideograph */ + ["\u752C", "\u752C"], /* CJK Ideograph */ + ["\u752D", "\u752D"], /* CJK Ideograph */ + ["\u752E", "\u752E"], /* CJK Ideograph */ + ["\u752F", "\u752F"], /* CJK Ideograph */ + ["\u7530", "\u7530"], /* CJK Ideograph */ + ["\u7531", "\u7531"], /* CJK Ideograph */ + ["\u7532", "\u7532"], /* CJK Ideograph */ + ["\u7533", "\u7533"], /* CJK Ideograph */ + ["\u7534", "\u7534"], /* CJK Ideograph */ + ["\u7535", "\u7535"], /* CJK Ideograph */ + ["\u7536", "\u7536"], /* CJK Ideograph */ + ["\u7537", "\u7537"], /* CJK Ideograph */ + ["\u7538", "\u7538"], /* CJK Ideograph */ + ["\u7539", "\u7539"], /* CJK Ideograph */ + ["\u753A", "\u753A"], /* CJK Ideograph */ + ["\u753B", "\u753B"], /* CJK Ideograph */ + ["\u753C", "\u753C"], /* CJK Ideograph */ + ["\u753D", "\u753D"], /* CJK Ideograph */ + ["\u753E", "\u753E"], /* CJK Ideograph */ + ["\u753F", "\u753F"], /* CJK Ideograph */ + ["\u7540", "\u7540"], /* CJK Ideograph */ + ["\u7541", "\u7541"], /* CJK Ideograph */ + ["\u7542", "\u7542"], /* CJK Ideograph */ + ["\u7543", "\u7543"], /* CJK Ideograph */ + ["\u7544", "\u7544"], /* CJK Ideograph */ + ["\u7545", "\u7545"], /* CJK Ideograph */ + ["\u7546", "\u7546"], /* CJK Ideograph */ + ["\u7547", "\u7547"], /* CJK Ideograph */ + ["\u7548", "\u7548"], /* CJK Ideograph */ + ["\u7549", "\u7549"], /* CJK Ideograph */ + ["\u754A", "\u754A"], /* CJK Ideograph */ + ["\u754B", "\u754B"], /* CJK Ideograph */ + ["\u754C", "\u754C"], /* CJK Ideograph */ + ["\u754D", "\u754D"], /* CJK Ideograph */ + ["\u754E", "\u754E"], /* CJK Ideograph */ + ["\u754F", "\u754F"], /* CJK Ideograph */ + ["\u7550", "\u7550"], /* CJK Ideograph */ + ["\u7551", "\u7551"], /* CJK Ideograph */ + ["\u7552", "\u7552"], /* CJK Ideograph */ + ["\u7553", "\u7553"], /* CJK Ideograph */ + ["\u7554", "\u7554"], /* CJK Ideograph */ + ["\u7555", "\u7555"], /* CJK Ideograph */ + ["\u7556", "\u7556"], /* CJK Ideograph */ + ["\u7557", "\u7557"], /* CJK Ideograph */ + ["\u7558", "\u7558"], /* CJK Ideograph */ + ["\u7559", "\u7559"], /* CJK Ideograph */ + ["\u755A", "\u755A"], /* CJK Ideograph */ + ["\u755B", "\u755B"], /* CJK Ideograph */ + ["\u755C", "\u755C"], /* CJK Ideograph */ + ["\u755D", "\u755D"], /* CJK Ideograph */ + ["\u755E", "\u755E"], /* CJK Ideograph */ + ["\u755F", "\u755F"], /* CJK Ideograph */ + ["\u7560", "\u7560"], /* CJK Ideograph */ + ["\u7561", "\u7561"], /* CJK Ideograph */ + ["\u7562", "\u7562"], /* CJK Ideograph */ + ["\u7563", "\u7563"], /* CJK Ideograph */ + ["\u7564", "\u7564"], /* CJK Ideograph */ + ["\u7565", "\u7565"], /* CJK Ideograph */ + ["\u7566", "\u7566"], /* CJK Ideograph */ + ["\u7567", "\u7567"], /* CJK Ideograph */ + ["\u7568", "\u7568"], /* CJK Ideograph */ + ["\u7569", "\u7569"], /* CJK Ideograph */ + ["\u756A", "\u756A"], /* CJK Ideograph */ + ["\u756B", "\u756B"], /* CJK Ideograph */ + ["\u756C", "\u756C"], /* CJK Ideograph */ + ["\u756D", "\u756D"], /* CJK Ideograph */ + ["\u756E", "\u756E"], /* CJK Ideograph */ + ["\u756F", "\u756F"], /* CJK Ideograph */ + ["\u7570", "\u7570"], /* CJK Ideograph */ + ["\u7571", "\u7571"], /* CJK Ideograph */ + ["\u7572", "\u7572"], /* CJK Ideograph */ + ["\u7573", "\u7573"], /* CJK Ideograph */ + ["\u7574", "\u7574"], /* CJK Ideograph */ + ["\u7575", "\u7575"], /* CJK Ideograph */ + ["\u7576", "\u7576"], /* CJK Ideograph */ + ["\u7577", "\u7577"], /* CJK Ideograph */ + ["\u7578", "\u7578"], /* CJK Ideograph */ + ["\u7579", "\u7579"], /* CJK Ideograph */ + ["\u757A", "\u757A"], /* CJK Ideograph */ + ["\u757B", "\u757B"], /* CJK Ideograph */ + ["\u757C", "\u757C"], /* CJK Ideograph */ + ["\u757D", "\u757D"], /* CJK Ideograph */ + ["\u757E", "\u757E"], /* CJK Ideograph */ + ["\u757F", "\u757F"], /* CJK Ideograph */ + ["\u7580", "\u7580"], /* CJK Ideograph */ + ["\u7581", "\u7581"], /* CJK Ideograph */ + ["\u7582", "\u7582"], /* CJK Ideograph */ + ["\u7583", "\u7583"], /* CJK Ideograph */ + ["\u7584", "\u7584"], /* CJK Ideograph */ + ["\u7585", "\u7585"], /* CJK Ideograph */ + ["\u7586", "\u7586"], /* CJK Ideograph */ + ["\u7587", "\u7587"], /* CJK Ideograph */ + ["\u7588", "\u7588"], /* CJK Ideograph */ + ["\u7589", "\u7589"], /* CJK Ideograph */ + ["\u758A", "\u758A"], /* CJK Ideograph */ + ["\u758B", "\u758B"], /* CJK Ideograph */ + ["\u758C", "\u758C"], /* CJK Ideograph */ + ["\u758D", "\u758D"], /* CJK Ideograph */ + ["\u758E", "\u758E"], /* CJK Ideograph */ + ["\u758F", "\u758F"], /* CJK Ideograph */ + ["\u7590", "\u7590"], /* CJK Ideograph */ + ["\u7591", "\u7591"], /* CJK Ideograph */ + ["\u7592", "\u7592"], /* CJK Ideograph */ + ["\u7593", "\u7593"], /* CJK Ideograph */ + ["\u7594", "\u7594"], /* CJK Ideograph */ + ["\u7595", "\u7595"], /* CJK Ideograph */ + ["\u7596", "\u7596"], /* CJK Ideograph */ + ["\u7597", "\u7597"], /* CJK Ideograph */ + ["\u7598", "\u7598"], /* CJK Ideograph */ + ["\u7599", "\u7599"], /* CJK Ideograph */ + ["\u759A", "\u759A"], /* CJK Ideograph */ + ["\u759B", "\u759B"], /* CJK Ideograph */ + ["\u759C", "\u759C"], /* CJK Ideograph */ + ["\u759D", "\u759D"], /* CJK Ideograph */ + ["\u759E", "\u759E"], /* CJK Ideograph */ + ["\u759F", "\u759F"], /* CJK Ideograph */ + ["\u75A0", "\u75A0"], /* CJK Ideograph */ + ["\u75A1", "\u75A1"], /* CJK Ideograph */ + ["\u75A2", "\u75A2"], /* CJK Ideograph */ + ["\u75A3", "\u75A3"], /* CJK Ideograph */ + ["\u75A4", "\u75A4"], /* CJK Ideograph */ + ["\u75A5", "\u75A5"], /* CJK Ideograph */ + ["\u75A6", "\u75A6"], /* CJK Ideograph */ + ["\u75A7", "\u75A7"], /* CJK Ideograph */ + ["\u75A8", "\u75A8"], /* CJK Ideograph */ + ["\u75A9", "\u75A9"], /* CJK Ideograph */ + ["\u75AA", "\u75AA"], /* CJK Ideograph */ + ["\u75AB", "\u75AB"], /* CJK Ideograph */ + ["\u75AC", "\u75AC"], /* CJK Ideograph */ + ["\u75AD", "\u75AD"], /* CJK Ideograph */ + ["\u75AE", "\u75AE"], /* CJK Ideograph */ + ["\u75AF", "\u75AF"], /* CJK Ideograph */ + ["\u75B0", "\u75B0"], /* CJK Ideograph */ + ["\u75B1", "\u75B1"], /* CJK Ideograph */ + ["\u75B2", "\u75B2"], /* CJK Ideograph */ + ["\u75B3", "\u75B3"], /* CJK Ideograph */ + ["\u75B4", "\u75B4"], /* CJK Ideograph */ + ["\u75B5", "\u75B5"], /* CJK Ideograph */ + ["\u75B6", "\u75B6"], /* CJK Ideograph */ + ["\u75B7", "\u75B7"], /* CJK Ideograph */ + ["\u75B8", "\u75B8"], /* CJK Ideograph */ + ["\u75B9", "\u75B9"], /* CJK Ideograph */ + ["\u75BA", "\u75BA"], /* CJK Ideograph */ + ["\u75BB", "\u75BB"], /* CJK Ideograph */ + ["\u75BC", "\u75BC"], /* CJK Ideograph */ + ["\u75BD", "\u75BD"], /* CJK Ideograph */ + ["\u75BE", "\u75BE"], /* CJK Ideograph */ + ["\u75BF", "\u75BF"], /* CJK Ideograph */ + ["\u75C0", "\u75C0"], /* CJK Ideograph */ + ["\u75C1", "\u75C1"], /* CJK Ideograph */ + ["\u75C2", "\u75C2"], /* CJK Ideograph */ + ["\u75C3", "\u75C3"], /* CJK Ideograph */ + ["\u75C4", "\u75C4"], /* CJK Ideograph */ + ["\u75C5", "\u75C5"], /* CJK Ideograph */ + ["\u75C6", "\u75C6"], /* CJK Ideograph */ + ["\u75C7", "\u75C7"], /* CJK Ideograph */ + ["\u75C8", "\u75C8"], /* CJK Ideograph */ + ["\u75C9", "\u75C9"], /* CJK Ideograph */ + ["\u75CA", "\u75CA"], /* CJK Ideograph */ + ["\u75CB", "\u75CB"], /* CJK Ideograph */ + ["\u75CC", "\u75CC"], /* CJK Ideograph */ + ["\u75CD", "\u75CD"], /* CJK Ideograph */ + ["\u75CE", "\u75CE"], /* CJK Ideograph */ + ["\u75CF", "\u75CF"], /* CJK Ideograph */ + ["\u75D0", "\u75D0"], /* CJK Ideograph */ + ["\u75D1", "\u75D1"], /* CJK Ideograph */ + ["\u75D2", "\u75D2"], /* CJK Ideograph */ + ["\u75D3", "\u75D3"], /* CJK Ideograph */ + ["\u75D4", "\u75D4"], /* CJK Ideograph */ + ["\u75D5", "\u75D5"], /* CJK Ideograph */ + ["\u75D6", "\u75D6"], /* CJK Ideograph */ + ["\u75D7", "\u75D7"], /* CJK Ideograph */ + ["\u75D8", "\u75D8"], /* CJK Ideograph */ + ["\u75D9", "\u75D9"], /* CJK Ideograph */ + ["\u75DA", "\u75DA"], /* CJK Ideograph */ + ["\u75DB", "\u75DB"], /* CJK Ideograph */ + ["\u75DC", "\u75DC"], /* CJK Ideograph */ + ["\u75DD", "\u75DD"], /* CJK Ideograph */ + ["\u75DE", "\u75DE"], /* CJK Ideograph */ + ["\u75DF", "\u75DF"], /* CJK Ideograph */ + ["\u75E0", "\u75E0"], /* CJK Ideograph */ + ["\u75E1", "\u75E1"], /* CJK Ideograph */ + ["\u75E2", "\u75E2"], /* CJK Ideograph */ + ["\u75E3", "\u75E3"], /* CJK Ideograph */ + ["\u75E4", "\u75E4"], /* CJK Ideograph */ + ["\u75E5", "\u75E5"], /* CJK Ideograph */ + ["\u75E6", "\u75E6"], /* CJK Ideograph */ + ["\u75E7", "\u75E7"], /* CJK Ideograph */ + ["\u75E8", "\u75E8"], /* CJK Ideograph */ + ["\u75E9", "\u75E9"], /* CJK Ideograph */ + ["\u75EA", "\u75EA"], /* CJK Ideograph */ + ["\u75EB", "\u75EB"], /* CJK Ideograph */ + ["\u75EC", "\u75EC"], /* CJK Ideograph */ + ["\u75ED", "\u75ED"], /* CJK Ideograph */ + ["\u75EE", "\u75EE"], /* CJK Ideograph */ + ["\u75EF", "\u75EF"], /* CJK Ideograph */ + ["\u75F0", "\u75F0"], /* CJK Ideograph */ + ["\u75F1", "\u75F1"], /* CJK Ideograph */ + ["\u75F2", "\u75F2"], /* CJK Ideograph */ + ["\u75F3", "\u75F3"], /* CJK Ideograph */ + ["\u75F4", "\u75F4"], /* CJK Ideograph */ + ["\u75F5", "\u75F5"], /* CJK Ideograph */ + ["\u75F6", "\u75F6"], /* CJK Ideograph */ + ["\u75F7", "\u75F7"], /* CJK Ideograph */ + ["\u75F8", "\u75F8"], /* CJK Ideograph */ + ["\u75F9", "\u75F9"], /* CJK Ideograph */ + ["\u75FA", "\u75FA"], /* CJK Ideograph */ + ["\u75FB", "\u75FB"], /* CJK Ideograph */ + ["\u75FC", "\u75FC"], /* CJK Ideograph */ + ["\u75FD", "\u75FD"], /* CJK Ideograph */ + ["\u75FE", "\u75FE"], /* CJK Ideograph */ + ["\u75FF", "\u75FF"], /* CJK Ideograph */ + ["\u7600", "\u7600"], /* CJK Ideograph */ + ["\u7601", "\u7601"], /* CJK Ideograph */ + ["\u7602", "\u7602"], /* CJK Ideograph */ + ["\u7603", "\u7603"], /* CJK Ideograph */ + ["\u7604", "\u7604"], /* CJK Ideograph */ + ["\u7605", "\u7605"], /* CJK Ideograph */ + ["\u7606", "\u7606"], /* CJK Ideograph */ + ["\u7607", "\u7607"], /* CJK Ideograph */ + ["\u7608", "\u7608"], /* CJK Ideograph */ + ["\u7609", "\u7609"], /* CJK Ideograph */ + ["\u760A", "\u760A"], /* CJK Ideograph */ + ["\u760B", "\u760B"], /* CJK Ideograph */ + ["\u760C", "\u760C"], /* CJK Ideograph */ + ["\u760D", "\u760D"], /* CJK Ideograph */ + ["\u760E", "\u760E"], /* CJK Ideograph */ + ["\u760F", "\u760F"], /* CJK Ideograph */ + ["\u7610", "\u7610"], /* CJK Ideograph */ + ["\u7611", "\u7611"], /* CJK Ideograph */ + ["\u7612", "\u7612"], /* CJK Ideograph */ + ["\u7613", "\u7613"], /* CJK Ideograph */ + ["\u7614", "\u7614"], /* CJK Ideograph */ + ["\u7615", "\u7615"], /* CJK Ideograph */ + ["\u7616", "\u7616"], /* CJK Ideograph */ + ["\u7617", "\u7617"], /* CJK Ideograph */ + ["\u7618", "\u7618"], /* CJK Ideograph */ + ["\u7619", "\u7619"], /* CJK Ideograph */ + ["\u761A", "\u761A"], /* CJK Ideograph */ + ["\u761B", "\u761B"], /* CJK Ideograph */ + ["\u761C", "\u761C"], /* CJK Ideograph */ + ["\u761D", "\u761D"], /* CJK Ideograph */ + ["\u761E", "\u761E"], /* CJK Ideograph */ + ["\u761F", "\u761F"], /* CJK Ideograph */ + ["\u7620", "\u7620"], /* CJK Ideograph */ + ["\u7621", "\u7621"], /* CJK Ideograph */ + ["\u7622", "\u7622"], /* CJK Ideograph */ + ["\u7623", "\u7623"], /* CJK Ideograph */ + ["\u7624", "\u7624"], /* CJK Ideograph */ + ["\u7625", "\u7625"], /* CJK Ideograph */ + ["\u7626", "\u7626"], /* CJK Ideograph */ + ["\u7627", "\u7627"], /* CJK Ideograph */ + ["\u7628", "\u7628"], /* CJK Ideograph */ + ["\u7629", "\u7629"], /* CJK Ideograph */ + ["\u762A", "\u762A"], /* CJK Ideograph */ + ["\u762B", "\u762B"], /* CJK Ideograph */ + ["\u762C", "\u762C"], /* CJK Ideograph */ + ["\u762D", "\u762D"], /* CJK Ideograph */ + ["\u762E", "\u762E"], /* CJK Ideograph */ + ["\u762F", "\u762F"], /* CJK Ideograph */ + ["\u7630", "\u7630"], /* CJK Ideograph */ + ["\u7631", "\u7631"], /* CJK Ideograph */ + ["\u7632", "\u7632"], /* CJK Ideograph */ + ["\u7633", "\u7633"], /* CJK Ideograph */ + ["\u7634", "\u7634"], /* CJK Ideograph */ + ["\u7635", "\u7635"], /* CJK Ideograph */ + ["\u7636", "\u7636"], /* CJK Ideograph */ + ["\u7637", "\u7637"], /* CJK Ideograph */ + ["\u7638", "\u7638"], /* CJK Ideograph */ + ["\u7639", "\u7639"], /* CJK Ideograph */ + ["\u763A", "\u763A"], /* CJK Ideograph */ + ["\u763B", "\u763B"], /* CJK Ideograph */ + ["\u763C", "\u763C"], /* CJK Ideograph */ + ["\u763D", "\u763D"], /* CJK Ideograph */ + ["\u763E", "\u763E"], /* CJK Ideograph */ + ["\u763F", "\u763F"], /* CJK Ideograph */ + ["\u7640", "\u7640"], /* CJK Ideograph */ + ["\u7641", "\u7641"], /* CJK Ideograph */ + ["\u7642", "\u7642"], /* CJK Ideograph */ + ["\u7643", "\u7643"], /* CJK Ideograph */ + ["\u7644", "\u7644"], /* CJK Ideograph */ + ["\u7645", "\u7645"], /* CJK Ideograph */ + ["\u7646", "\u7646"], /* CJK Ideograph */ + ["\u7647", "\u7647"], /* CJK Ideograph */ + ["\u7648", "\u7648"], /* CJK Ideograph */ + ["\u7649", "\u7649"], /* CJK Ideograph */ + ["\u764A", "\u764A"], /* CJK Ideograph */ + ["\u764B", "\u764B"], /* CJK Ideograph */ + ["\u764C", "\u764C"], /* CJK Ideograph */ + ["\u764D", "\u764D"], /* CJK Ideograph */ + ["\u764E", "\u764E"], /* CJK Ideograph */ + ["\u764F", "\u764F"], /* CJK Ideograph */ + ["\u7650", "\u7650"], /* CJK Ideograph */ + ["\u7651", "\u7651"], /* CJK Ideograph */ + ["\u7652", "\u7652"], /* CJK Ideograph */ + ["\u7653", "\u7653"], /* CJK Ideograph */ + ["\u7654", "\u7654"], /* CJK Ideograph */ + ["\u7655", "\u7655"], /* CJK Ideograph */ + ["\u7656", "\u7656"], /* CJK Ideograph */ + ["\u7657", "\u7657"], /* CJK Ideograph */ + ["\u7658", "\u7658"], /* CJK Ideograph */ + ["\u7659", "\u7659"], /* CJK Ideograph */ + ["\u765A", "\u765A"], /* CJK Ideograph */ + ["\u765B", "\u765B"], /* CJK Ideograph */ + ["\u765C", "\u765C"], /* CJK Ideograph */ + ["\u765D", "\u765D"], /* CJK Ideograph */ + ["\u765E", "\u765E"], /* CJK Ideograph */ + ["\u765F", "\u765F"], /* CJK Ideograph */ + ["\u7660", "\u7660"], /* CJK Ideograph */ + ["\u7661", "\u7661"], /* CJK Ideograph */ + ["\u7662", "\u7662"], /* CJK Ideograph */ + ["\u7663", "\u7663"], /* CJK Ideograph */ + ["\u7664", "\u7664"], /* CJK Ideograph */ + ["\u7665", "\u7665"], /* CJK Ideograph */ + ["\u7666", "\u7666"], /* CJK Ideograph */ + ["\u7667", "\u7667"], /* CJK Ideograph */ + ["\u7668", "\u7668"], /* CJK Ideograph */ + ["\u7669", "\u7669"], /* CJK Ideograph */ + ["\u766A", "\u766A"], /* CJK Ideograph */ + ["\u766B", "\u766B"], /* CJK Ideograph */ + ["\u766C", "\u766C"], /* CJK Ideograph */ + ["\u766D", "\u766D"], /* CJK Ideograph */ + ["\u766E", "\u766E"], /* CJK Ideograph */ + ["\u766F", "\u766F"], /* CJK Ideograph */ + ["\u7670", "\u7670"], /* CJK Ideograph */ + ["\u7671", "\u7671"], /* CJK Ideograph */ + ["\u7672", "\u7672"], /* CJK Ideograph */ + ["\u7673", "\u7673"], /* CJK Ideograph */ + ["\u7674", "\u7674"], /* CJK Ideograph */ + ["\u7675", "\u7675"], /* CJK Ideograph */ + ["\u7676", "\u7676"], /* CJK Ideograph */ + ["\u7677", "\u7677"], /* CJK Ideograph */ + ["\u7678", "\u7678"], /* CJK Ideograph */ + ["\u7679", "\u7679"], /* CJK Ideograph */ + ["\u767A", "\u767A"], /* CJK Ideograph */ + ["\u767B", "\u767B"], /* CJK Ideograph */ + ["\u767C", "\u767C"], /* CJK Ideograph */ + ["\u767D", "\u767D"], /* CJK Ideograph */ + ["\u767E", "\u767E"], /* CJK Ideograph */ + ["\u767F", "\u767F"], /* CJK Ideograph */ + ["\u7680", "\u7680"], /* CJK Ideograph */ + ["\u7681", "\u7681"], /* CJK Ideograph */ + ["\u7682", "\u7682"], /* CJK Ideograph */ + ["\u7683", "\u7683"], /* CJK Ideograph */ + ["\u7684", "\u7684"], /* CJK Ideograph */ + ["\u7685", "\u7685"], /* CJK Ideograph */ + ["\u7686", "\u7686"], /* CJK Ideograph */ + ["\u7687", "\u7687"], /* CJK Ideograph */ + ["\u7688", "\u7688"], /* CJK Ideograph */ + ["\u7689", "\u7689"], /* CJK Ideograph */ + ["\u768A", "\u768A"], /* CJK Ideograph */ + ["\u768B", "\u768B"], /* CJK Ideograph */ + ["\u768C", "\u768C"], /* CJK Ideograph */ + ["\u768D", "\u768D"], /* CJK Ideograph */ + ["\u768E", "\u768E"], /* CJK Ideograph */ + ["\u768F", "\u768F"], /* CJK Ideograph */ + ["\u7690", "\u7690"], /* CJK Ideograph */ + ["\u7691", "\u7691"], /* CJK Ideograph */ + ["\u7692", "\u7692"], /* CJK Ideograph */ + ["\u7693", "\u7693"], /* CJK Ideograph */ + ["\u7694", "\u7694"], /* CJK Ideograph */ + ["\u7695", "\u7695"], /* CJK Ideograph */ + ["\u7696", "\u7696"], /* CJK Ideograph */ + ["\u7697", "\u7697"], /* CJK Ideograph */ + ["\u7698", "\u7698"], /* CJK Ideograph */ + ["\u7699", "\u7699"], /* CJK Ideograph */ + ["\u769A", "\u769A"], /* CJK Ideograph */ + ["\u769B", "\u769B"], /* CJK Ideograph */ + ["\u769C", "\u769C"], /* CJK Ideograph */ + ["\u769D", "\u769D"], /* CJK Ideograph */ + ["\u769E", "\u769E"], /* CJK Ideograph */ + ["\u769F", "\u769F"], /* CJK Ideograph */ + ["\u76A0", "\u76A0"], /* CJK Ideograph */ + ["\u76A1", "\u76A1"], /* CJK Ideograph */ + ["\u76A2", "\u76A2"], /* CJK Ideograph */ + ["\u76A3", "\u76A3"], /* CJK Ideograph */ + ["\u76A4", "\u76A4"], /* CJK Ideograph */ + ["\u76A5", "\u76A5"], /* CJK Ideograph */ + ["\u76A6", "\u76A6"], /* CJK Ideograph */ + ["\u76A7", "\u76A7"], /* CJK Ideograph */ + ["\u76A8", "\u76A8"], /* CJK Ideograph */ + ["\u76A9", "\u76A9"], /* CJK Ideograph */ + ["\u76AA", "\u76AA"], /* CJK Ideograph */ + ["\u76AB", "\u76AB"], /* CJK Ideograph */ + ["\u76AC", "\u76AC"], /* CJK Ideograph */ + ["\u76AD", "\u76AD"], /* CJK Ideograph */ + ["\u76AE", "\u76AE"], /* CJK Ideograph */ + ["\u76AF", "\u76AF"], /* CJK Ideograph */ + ["\u76B0", "\u76B0"], /* CJK Ideograph */ + ["\u76B1", "\u76B1"], /* CJK Ideograph */ + ["\u76B2", "\u76B2"], /* CJK Ideograph */ + ["\u76B3", "\u76B3"], /* CJK Ideograph */ + ["\u76B4", "\u76B4"], /* CJK Ideograph */ + ["\u76B5", "\u76B5"], /* CJK Ideograph */ + ["\u76B6", "\u76B6"], /* CJK Ideograph */ + ["\u76B7", "\u76B7"], /* CJK Ideograph */ + ["\u76B8", "\u76B8"], /* CJK Ideograph */ + ["\u76B9", "\u76B9"], /* CJK Ideograph */ + ["\u76BA", "\u76BA"], /* CJK Ideograph */ + ["\u76BB", "\u76BB"], /* CJK Ideograph */ + ["\u76BC", "\u76BC"], /* CJK Ideograph */ + ["\u76BD", "\u76BD"], /* CJK Ideograph */ + ["\u76BE", "\u76BE"], /* CJK Ideograph */ + ["\u76BF", "\u76BF"], /* CJK Ideograph */ + ["\u76C0", "\u76C0"], /* CJK Ideograph */ + ["\u76C1", "\u76C1"], /* CJK Ideograph */ + ["\u76C2", "\u76C2"], /* CJK Ideograph */ + ["\u76C3", "\u76C3"], /* CJK Ideograph */ + ["\u76C4", "\u76C4"], /* CJK Ideograph */ + ["\u76C5", "\u76C5"], /* CJK Ideograph */ + ["\u76C6", "\u76C6"], /* CJK Ideograph */ + ["\u76C7", "\u76C7"], /* CJK Ideograph */ + ["\u76C8", "\u76C8"], /* CJK Ideograph */ + ["\u76C9", "\u76C9"], /* CJK Ideograph */ + ["\u76CA", "\u76CA"], /* CJK Ideograph */ + ["\u76CB", "\u76CB"], /* CJK Ideograph */ + ["\u76CC", "\u76CC"], /* CJK Ideograph */ + ["\u76CD", "\u76CD"], /* CJK Ideograph */ + ["\u76CE", "\u76CE"], /* CJK Ideograph */ + ["\u76CF", "\u76CF"], /* CJK Ideograph */ + ["\u76D0", "\u76D0"], /* CJK Ideograph */ + ["\u76D1", "\u76D1"], /* CJK Ideograph */ + ["\u76D2", "\u76D2"], /* CJK Ideograph */ + ["\u76D3", "\u76D3"], /* CJK Ideograph */ + ["\u76D4", "\u76D4"], /* CJK Ideograph */ + ["\u76D5", "\u76D5"], /* CJK Ideograph */ + ["\u76D6", "\u76D6"], /* CJK Ideograph */ + ["\u76D7", "\u76D7"], /* CJK Ideograph */ + ["\u76D8", "\u76D8"], /* CJK Ideograph */ + ["\u76D9", "\u76D9"], /* CJK Ideograph */ + ["\u76DA", "\u76DA"], /* CJK Ideograph */ + ["\u76DB", "\u76DB"], /* CJK Ideograph */ + ["\u76DC", "\u76DC"], /* CJK Ideograph */ + ["\u76DD", "\u76DD"], /* CJK Ideograph */ + ["\u76DE", "\u76DE"], /* CJK Ideograph */ + ["\u76DF", "\u76DF"], /* CJK Ideograph */ + ["\u76E0", "\u76E0"], /* CJK Ideograph */ + ["\u76E1", "\u76E1"], /* CJK Ideograph */ + ["\u76E2", "\u76E2"], /* CJK Ideograph */ + ["\u76E3", "\u76E3"], /* CJK Ideograph */ + ["\u76E4", "\u76E4"], /* CJK Ideograph */ + ["\u76E5", "\u76E5"], /* CJK Ideograph */ + ["\u76E6", "\u76E6"], /* CJK Ideograph */ + ["\u76E7", "\u76E7"], /* CJK Ideograph */ + ["\u76E8", "\u76E8"], /* CJK Ideograph */ + ["\u76E9", "\u76E9"], /* CJK Ideograph */ + ["\u76EA", "\u76EA"], /* CJK Ideograph */ + ["\u76EB", "\u76EB"], /* CJK Ideograph */ + ["\u76EC", "\u76EC"], /* CJK Ideograph */ + ["\u76ED", "\u76ED"], /* CJK Ideograph */ + ["\u76EE", "\u76EE"], /* CJK Ideograph */ + ["\u76EF", "\u76EF"], /* CJK Ideograph */ + ["\u76F0", "\u76F0"], /* CJK Ideograph */ + ["\u76F1", "\u76F1"], /* CJK Ideograph */ + ["\u76F2", "\u76F2"], /* CJK Ideograph */ + ["\u76F3", "\u76F3"], /* CJK Ideograph */ + ["\u76F4", "\u76F4"], /* CJK Ideograph */ + ["\u76F5", "\u76F5"], /* CJK Ideograph */ + ["\u76F6", "\u76F6"], /* CJK Ideograph */ + ["\u76F7", "\u76F7"], /* CJK Ideograph */ + ["\u76F8", "\u76F8"], /* CJK Ideograph */ + ["\u76F9", "\u76F9"], /* CJK Ideograph */ + ["\u76FA", "\u76FA"], /* CJK Ideograph */ + ["\u76FB", "\u76FB"], /* CJK Ideograph */ + ["\u76FC", "\u76FC"], /* CJK Ideograph */ + ["\u76FD", "\u76FD"], /* CJK Ideograph */ + ["\u76FE", "\u76FE"], /* CJK Ideograph */ + ["\u76FF", "\u76FF"], /* CJK Ideograph */ + ["\u7700", "\u7700"], /* CJK Ideograph */ + ["\u7701", "\u7701"], /* CJK Ideograph */ + ["\u7702", "\u7702"], /* CJK Ideograph */ + ["\u7703", "\u7703"], /* CJK Ideograph */ + ["\u7704", "\u7704"], /* CJK Ideograph */ + ["\u7705", "\u7705"], /* CJK Ideograph */ + ["\u7706", "\u7706"], /* CJK Ideograph */ + ["\u7707", "\u7707"], /* CJK Ideograph */ + ["\u7708", "\u7708"], /* CJK Ideograph */ + ["\u7709", "\u7709"], /* CJK Ideograph */ + ["\u770A", "\u770A"], /* CJK Ideograph */ + ["\u770B", "\u770B"], /* CJK Ideograph */ + ["\u770C", "\u770C"], /* CJK Ideograph */ + ["\u770D", "\u770D"], /* CJK Ideograph */ + ["\u770E", "\u770E"], /* CJK Ideograph */ + ["\u770F", "\u770F"], /* CJK Ideograph */ + ["\u7710", "\u7710"], /* CJK Ideograph */ + ["\u7711", "\u7711"], /* CJK Ideograph */ + ["\u7712", "\u7712"], /* CJK Ideograph */ + ["\u7713", "\u7713"], /* CJK Ideograph */ + ["\u7714", "\u7714"], /* CJK Ideograph */ + ["\u7715", "\u7715"], /* CJK Ideograph */ + ["\u7716", "\u7716"], /* CJK Ideograph */ + ["\u7717", "\u7717"], /* CJK Ideograph */ + ["\u7718", "\u7718"], /* CJK Ideograph */ + ["\u7719", "\u7719"], /* CJK Ideograph */ + ["\u771A", "\u771A"], /* CJK Ideograph */ + ["\u771B", "\u771B"], /* CJK Ideograph */ + ["\u771C", "\u771C"], /* CJK Ideograph */ + ["\u771D", "\u771D"], /* CJK Ideograph */ + ["\u771E", "\u771E"], /* CJK Ideograph */ + ["\u771F", "\u771F"], /* CJK Ideograph */ + ["\u7720", "\u7720"], /* CJK Ideograph */ + ["\u7721", "\u7721"], /* CJK Ideograph */ + ["\u7722", "\u7722"], /* CJK Ideograph */ + ["\u7723", "\u7723"], /* CJK Ideograph */ + ["\u7724", "\u7724"], /* CJK Ideograph */ + ["\u7725", "\u7725"], /* CJK Ideograph */ + ["\u7726", "\u7726"], /* CJK Ideograph */ + ["\u7727", "\u7727"], /* CJK Ideograph */ + ["\u7728", "\u7728"], /* CJK Ideograph */ + ["\u7729", "\u7729"], /* CJK Ideograph */ + ["\u772A", "\u772A"], /* CJK Ideograph */ + ["\u772B", "\u772B"], /* CJK Ideograph */ + ["\u772C", "\u772C"], /* CJK Ideograph */ + ["\u772D", "\u772D"], /* CJK Ideograph */ + ["\u772E", "\u772E"], /* CJK Ideograph */ + ["\u772F", "\u772F"], /* CJK Ideograph */ + ["\u7730", "\u7730"], /* CJK Ideograph */ + ["\u7731", "\u7731"], /* CJK Ideograph */ + ["\u7732", "\u7732"], /* CJK Ideograph */ + ["\u7733", "\u7733"], /* CJK Ideograph */ + ["\u7734", "\u7734"], /* CJK Ideograph */ + ["\u7735", "\u7735"], /* CJK Ideograph */ + ["\u7736", "\u7736"], /* CJK Ideograph */ + ["\u7737", "\u7737"], /* CJK Ideograph */ + ["\u7738", "\u7738"], /* CJK Ideograph */ + ["\u7739", "\u7739"], /* CJK Ideograph */ + ["\u773A", "\u773A"], /* CJK Ideograph */ + ["\u773B", "\u773B"], /* CJK Ideograph */ + ["\u773C", "\u773C"], /* CJK Ideograph */ + ["\u773D", "\u773D"], /* CJK Ideograph */ + ["\u773E", "\u773E"], /* CJK Ideograph */ + ["\u773F", "\u773F"], /* CJK Ideograph */ + ["\u7740", "\u7740"], /* CJK Ideograph */ + ["\u7741", "\u7741"], /* CJK Ideograph */ + ["\u7742", "\u7742"], /* CJK Ideograph */ + ["\u7743", "\u7743"], /* CJK Ideograph */ + ["\u7744", "\u7744"], /* CJK Ideograph */ + ["\u7745", "\u7745"], /* CJK Ideograph */ + ["\u7746", "\u7746"], /* CJK Ideograph */ + ["\u7747", "\u7747"], /* CJK Ideograph */ + ["\u7748", "\u7748"], /* CJK Ideograph */ + ["\u7749", "\u7749"], /* CJK Ideograph */ + ["\u774A", "\u774A"], /* CJK Ideograph */ + ["\u774B", "\u774B"], /* CJK Ideograph */ + ["\u774C", "\u774C"], /* CJK Ideograph */ + ["\u774D", "\u774D"], /* CJK Ideograph */ + ["\u774E", "\u774E"], /* CJK Ideograph */ + ["\u774F", "\u774F"], /* CJK Ideograph */ + ["\u7750", "\u7750"], /* CJK Ideograph */ + ["\u7751", "\u7751"], /* CJK Ideograph */ + ["\u7752", "\u7752"], /* CJK Ideograph */ + ["\u7753", "\u7753"], /* CJK Ideograph */ + ["\u7754", "\u7754"], /* CJK Ideograph */ + ["\u7755", "\u7755"], /* CJK Ideograph */ + ["\u7756", "\u7756"], /* CJK Ideograph */ + ["\u7757", "\u7757"], /* CJK Ideograph */ + ["\u7758", "\u7758"], /* CJK Ideograph */ + ["\u7759", "\u7759"], /* CJK Ideograph */ + ["\u775A", "\u775A"], /* CJK Ideograph */ + ["\u775B", "\u775B"], /* CJK Ideograph */ + ["\u775C", "\u775C"], /* CJK Ideograph */ + ["\u775D", "\u775D"], /* CJK Ideograph */ + ["\u775E", "\u775E"], /* CJK Ideograph */ + ["\u775F", "\u775F"], /* CJK Ideograph */ + ["\u7760", "\u7760"], /* CJK Ideograph */ + ["\u7761", "\u7761"], /* CJK Ideograph */ + ["\u7762", "\u7762"], /* CJK Ideograph */ + ["\u7763", "\u7763"], /* CJK Ideograph */ + ["\u7764", "\u7764"], /* CJK Ideograph */ + ["\u7765", "\u7765"], /* CJK Ideograph */ + ["\u7766", "\u7766"], /* CJK Ideograph */ + ["\u7767", "\u7767"], /* CJK Ideograph */ + ["\u7768", "\u7768"], /* CJK Ideograph */ + ["\u7769", "\u7769"], /* CJK Ideograph */ + ["\u776A", "\u776A"], /* CJK Ideograph */ + ["\u776B", "\u776B"], /* CJK Ideograph */ + ["\u776C", "\u776C"], /* CJK Ideograph */ + ["\u776D", "\u776D"], /* CJK Ideograph */ + ["\u776E", "\u776E"], /* CJK Ideograph */ + ["\u776F", "\u776F"], /* CJK Ideograph */ + ["\u7770", "\u7770"], /* CJK Ideograph */ + ["\u7771", "\u7771"], /* CJK Ideograph */ + ["\u7772", "\u7772"], /* CJK Ideograph */ + ["\u7773", "\u7773"], /* CJK Ideograph */ + ["\u7774", "\u7774"], /* CJK Ideograph */ + ["\u7775", "\u7775"], /* CJK Ideograph */ + ["\u7776", "\u7776"], /* CJK Ideograph */ + ["\u7777", "\u7777"], /* CJK Ideograph */ + ["\u7778", "\u7778"], /* CJK Ideograph */ + ["\u7779", "\u7779"], /* CJK Ideograph */ + ["\u777A", "\u777A"], /* CJK Ideograph */ + ["\u777B", "\u777B"], /* CJK Ideograph */ + ["\u777C", "\u777C"], /* CJK Ideograph */ + ["\u777D", "\u777D"], /* CJK Ideograph */ + ["\u777E", "\u777E"], /* CJK Ideograph */ + ["\u777F", "\u777F"], /* CJK Ideograph */ + ["\u7780", "\u7780"], /* CJK Ideograph */ + ["\u7781", "\u7781"], /* CJK Ideograph */ + ["\u7782", "\u7782"], /* CJK Ideograph */ + ["\u7783", "\u7783"], /* CJK Ideograph */ + ["\u7784", "\u7784"], /* CJK Ideograph */ + ["\u7785", "\u7785"], /* CJK Ideograph */ + ["\u7786", "\u7786"], /* CJK Ideograph */ + ["\u7787", "\u7787"], /* CJK Ideograph */ + ["\u7788", "\u7788"], /* CJK Ideograph */ + ["\u7789", "\u7789"], /* CJK Ideograph */ + ["\u778A", "\u778A"], /* CJK Ideograph */ + ["\u778B", "\u778B"], /* CJK Ideograph */ + ["\u778C", "\u778C"], /* CJK Ideograph */ + ["\u778D", "\u778D"], /* CJK Ideograph */ + ["\u778E", "\u778E"], /* CJK Ideograph */ + ["\u778F", "\u778F"], /* CJK Ideograph */ + ["\u7790", "\u7790"], /* CJK Ideograph */ + ["\u7791", "\u7791"], /* CJK Ideograph */ + ["\u7792", "\u7792"], /* CJK Ideograph */ + ["\u7793", "\u7793"], /* CJK Ideograph */ + ["\u7794", "\u7794"], /* CJK Ideograph */ + ["\u7795", "\u7795"], /* CJK Ideograph */ + ["\u7796", "\u7796"], /* CJK Ideograph */ + ["\u7797", "\u7797"], /* CJK Ideograph */ + ["\u7798", "\u7798"], /* CJK Ideograph */ + ["\u7799", "\u7799"], /* CJK Ideograph */ + ["\u779A", "\u779A"], /* CJK Ideograph */ + ["\u779B", "\u779B"], /* CJK Ideograph */ + ["\u779C", "\u779C"], /* CJK Ideograph */ + ["\u779D", "\u779D"], /* CJK Ideograph */ + ["\u779E", "\u779E"], /* CJK Ideograph */ + ["\u779F", "\u779F"], /* CJK Ideograph */ + ["\u77A0", "\u77A0"], /* CJK Ideograph */ + ["\u77A1", "\u77A1"], /* CJK Ideograph */ + ["\u77A2", "\u77A2"], /* CJK Ideograph */ + ["\u77A3", "\u77A3"], /* CJK Ideograph */ + ["\u77A4", "\u77A4"], /* CJK Ideograph */ + ["\u77A5", "\u77A5"], /* CJK Ideograph */ + ["\u77A6", "\u77A6"], /* CJK Ideograph */ + ["\u77A7", "\u77A7"], /* CJK Ideograph */ + ["\u77A8", "\u77A8"], /* CJK Ideograph */ + ["\u77A9", "\u77A9"], /* CJK Ideograph */ + ["\u77AA", "\u77AA"], /* CJK Ideograph */ + ["\u77AB", "\u77AB"], /* CJK Ideograph */ + ["\u77AC", "\u77AC"], /* CJK Ideograph */ + ["\u77AD", "\u77AD"], /* CJK Ideograph */ + ["\u77AE", "\u77AE"], /* CJK Ideograph */ + ["\u77AF", "\u77AF"], /* CJK Ideograph */ + ["\u77B0", "\u77B0"], /* CJK Ideograph */ + ["\u77B1", "\u77B1"], /* CJK Ideograph */ + ["\u77B2", "\u77B2"], /* CJK Ideograph */ + ["\u77B3", "\u77B3"], /* CJK Ideograph */ + ["\u77B4", "\u77B4"], /* CJK Ideograph */ + ["\u77B5", "\u77B5"], /* CJK Ideograph */ + ["\u77B6", "\u77B6"], /* CJK Ideograph */ + ["\u77B7", "\u77B7"], /* CJK Ideograph */ + ["\u77B8", "\u77B8"], /* CJK Ideograph */ + ["\u77B9", "\u77B9"], /* CJK Ideograph */ + ["\u77BA", "\u77BA"], /* CJK Ideograph */ + ["\u77BB", "\u77BB"], /* CJK Ideograph */ + ["\u77BC", "\u77BC"], /* CJK Ideograph */ + ["\u77BD", "\u77BD"], /* CJK Ideograph */ + ["\u77BE", "\u77BE"], /* CJK Ideograph */ + ["\u77BF", "\u77BF"], /* CJK Ideograph */ + ["\u77C0", "\u77C0"], /* CJK Ideograph */ + ["\u77C1", "\u77C1"], /* CJK Ideograph */ + ["\u77C2", "\u77C2"], /* CJK Ideograph */ + ["\u77C3", "\u77C3"], /* CJK Ideograph */ + ["\u77C4", "\u77C4"], /* CJK Ideograph */ + ["\u77C5", "\u77C5"], /* CJK Ideograph */ + ["\u77C6", "\u77C6"], /* CJK Ideograph */ + ["\u77C7", "\u77C7"], /* CJK Ideograph */ + ["\u77C8", "\u77C8"], /* CJK Ideograph */ + ["\u77C9", "\u77C9"], /* CJK Ideograph */ + ["\u77CA", "\u77CA"], /* CJK Ideograph */ + ["\u77CB", "\u77CB"], /* CJK Ideograph */ + ["\u77CC", "\u77CC"], /* CJK Ideograph */ + ["\u77CD", "\u77CD"], /* CJK Ideograph */ + ["\u77CE", "\u77CE"], /* CJK Ideograph */ + ["\u77CF", "\u77CF"], /* CJK Ideograph */ + ["\u77D0", "\u77D0"], /* CJK Ideograph */ + ["\u77D1", "\u77D1"], /* CJK Ideograph */ + ["\u77D2", "\u77D2"], /* CJK Ideograph */ + ["\u77D3", "\u77D3"], /* CJK Ideograph */ + ["\u77D4", "\u77D4"], /* CJK Ideograph */ + ["\u77D5", "\u77D5"], /* CJK Ideograph */ + ["\u77D6", "\u77D6"], /* CJK Ideograph */ + ["\u77D7", "\u77D7"], /* CJK Ideograph */ + ["\u77D8", "\u77D8"], /* CJK Ideograph */ + ["\u77D9", "\u77D9"], /* CJK Ideograph */ + ["\u77DA", "\u77DA"], /* CJK Ideograph */ + ["\u77DB", "\u77DB"], /* CJK Ideograph */ + ["\u77DC", "\u77DC"], /* CJK Ideograph */ + ["\u77DD", "\u77DD"], /* CJK Ideograph */ + ["\u77DE", "\u77DE"], /* CJK Ideograph */ + ["\u77DF", "\u77DF"], /* CJK Ideograph */ + ["\u77E0", "\u77E0"], /* CJK Ideograph */ + ["\u77E1", "\u77E1"], /* CJK Ideograph */ + ["\u77E2", "\u77E2"], /* CJK Ideograph */ + ["\u77E3", "\u77E3"], /* CJK Ideograph */ + ["\u77E4", "\u77E4"], /* CJK Ideograph */ + ["\u77E5", "\u77E5"], /* CJK Ideograph */ + ["\u77E6", "\u77E6"], /* CJK Ideograph */ + ["\u77E7", "\u77E7"], /* CJK Ideograph */ + ["\u77E8", "\u77E8"], /* CJK Ideograph */ + ["\u77E9", "\u77E9"], /* CJK Ideograph */ + ["\u77EA", "\u77EA"], /* CJK Ideograph */ + ["\u77EB", "\u77EB"], /* CJK Ideograph */ + ["\u77EC", "\u77EC"], /* CJK Ideograph */ + ["\u77ED", "\u77ED"], /* CJK Ideograph */ + ["\u77EE", "\u77EE"], /* CJK Ideograph */ + ["\u77EF", "\u77EF"], /* CJK Ideograph */ + ["\u77F0", "\u77F0"], /* CJK Ideograph */ + ["\u77F1", "\u77F1"], /* CJK Ideograph */ + ["\u77F2", "\u77F2"], /* CJK Ideograph */ + ["\u77F3", "\u77F3"], /* CJK Ideograph */ + ["\u77F4", "\u77F4"], /* CJK Ideograph */ + ["\u77F5", "\u77F5"], /* CJK Ideograph */ + ["\u77F6", "\u77F6"], /* CJK Ideograph */ + ["\u77F7", "\u77F7"], /* CJK Ideograph */ + ["\u77F8", "\u77F8"], /* CJK Ideograph */ + ["\u77F9", "\u77F9"], /* CJK Ideograph */ + ["\u77FA", "\u77FA"], /* CJK Ideograph */ + ["\u77FB", "\u77FB"], /* CJK Ideograph */ + ["\u77FC", "\u77FC"], /* CJK Ideograph */ + ["\u77FD", "\u77FD"], /* CJK Ideograph */ + ["\u77FE", "\u77FE"], /* CJK Ideograph */ + ["\u77FF", "\u77FF"], /* CJK Ideograph */ + ["\u7800", "\u7800"], /* CJK Ideograph */ + ["\u7801", "\u7801"], /* CJK Ideograph */ + ["\u7802", "\u7802"], /* CJK Ideograph */ + ["\u7803", "\u7803"], /* CJK Ideograph */ + ["\u7804", "\u7804"], /* CJK Ideograph */ + ["\u7805", "\u7805"], /* CJK Ideograph */ + ["\u7806", "\u7806"], /* CJK Ideograph */ + ["\u7807", "\u7807"], /* CJK Ideograph */ + ["\u7808", "\u7808"], /* CJK Ideograph */ + ["\u7809", "\u7809"], /* CJK Ideograph */ + ["\u780A", "\u780A"], /* CJK Ideograph */ + ["\u780B", "\u780B"], /* CJK Ideograph */ + ["\u780C", "\u780C"], /* CJK Ideograph */ + ["\u780D", "\u780D"], /* CJK Ideograph */ + ["\u780E", "\u780E"], /* CJK Ideograph */ + ["\u780F", "\u780F"], /* CJK Ideograph */ + ["\u7810", "\u7810"], /* CJK Ideograph */ + ["\u7811", "\u7811"], /* CJK Ideograph */ + ["\u7812", "\u7812"], /* CJK Ideograph */ + ["\u7813", "\u7813"], /* CJK Ideograph */ + ["\u7814", "\u7814"], /* CJK Ideograph */ + ["\u7815", "\u7815"], /* CJK Ideograph */ + ["\u7816", "\u7816"], /* CJK Ideograph */ + ["\u7817", "\u7817"], /* CJK Ideograph */ + ["\u7818", "\u7818"], /* CJK Ideograph */ + ["\u7819", "\u7819"], /* CJK Ideograph */ + ["\u781A", "\u781A"], /* CJK Ideograph */ + ["\u781B", "\u781B"], /* CJK Ideograph */ + ["\u781C", "\u781C"], /* CJK Ideograph */ + ["\u781D", "\u781D"], /* CJK Ideograph */ + ["\u781E", "\u781E"], /* CJK Ideograph */ + ["\u781F", "\u781F"], /* CJK Ideograph */ + ["\u7820", "\u7820"], /* CJK Ideograph */ + ["\u7821", "\u7821"], /* CJK Ideograph */ + ["\u7822", "\u7822"], /* CJK Ideograph */ + ["\u7823", "\u7823"], /* CJK Ideograph */ + ["\u7824", "\u7824"], /* CJK Ideograph */ + ["\u7825", "\u7825"], /* CJK Ideograph */ + ["\u7826", "\u7826"], /* CJK Ideograph */ + ["\u7827", "\u7827"], /* CJK Ideograph */ + ["\u7828", "\u7828"], /* CJK Ideograph */ + ["\u7829", "\u7829"], /* CJK Ideograph */ + ["\u782A", "\u782A"], /* CJK Ideograph */ + ["\u782B", "\u782B"], /* CJK Ideograph */ + ["\u782C", "\u782C"], /* CJK Ideograph */ + ["\u782D", "\u782D"], /* CJK Ideograph */ + ["\u782E", "\u782E"], /* CJK Ideograph */ + ["\u782F", "\u782F"], /* CJK Ideograph */ + ["\u7830", "\u7830"], /* CJK Ideograph */ + ["\u7831", "\u7831"], /* CJK Ideograph */ + ["\u7832", "\u7832"], /* CJK Ideograph */ + ["\u7833", "\u7833"], /* CJK Ideograph */ + ["\u7834", "\u7834"], /* CJK Ideograph */ + ["\u7835", "\u7835"], /* CJK Ideograph */ + ["\u7836", "\u7836"], /* CJK Ideograph */ + ["\u7837", "\u7837"], /* CJK Ideograph */ + ["\u7838", "\u7838"], /* CJK Ideograph */ + ["\u7839", "\u7839"], /* CJK Ideograph */ + ["\u783A", "\u783A"], /* CJK Ideograph */ + ["\u783B", "\u783B"], /* CJK Ideograph */ + ["\u783C", "\u783C"], /* CJK Ideograph */ + ["\u783D", "\u783D"], /* CJK Ideograph */ + ["\u783E", "\u783E"], /* CJK Ideograph */ + ["\u783F", "\u783F"], /* CJK Ideograph */ + ["\u7840", "\u7840"], /* CJK Ideograph */ + ["\u7841", "\u7841"], /* CJK Ideograph */ + ["\u7842", "\u7842"], /* CJK Ideograph */ + ["\u7843", "\u7843"], /* CJK Ideograph */ + ["\u7844", "\u7844"], /* CJK Ideograph */ + ["\u7845", "\u7845"], /* CJK Ideograph */ + ["\u7846", "\u7846"], /* CJK Ideograph */ + ["\u7847", "\u7847"], /* CJK Ideograph */ + ["\u7848", "\u7848"], /* CJK Ideograph */ + ["\u7849", "\u7849"], /* CJK Ideograph */ + ["\u784A", "\u784A"], /* CJK Ideograph */ + ["\u784B", "\u784B"], /* CJK Ideograph */ + ["\u784C", "\u784C"], /* CJK Ideograph */ + ["\u784D", "\u784D"], /* CJK Ideograph */ + ["\u784E", "\u784E"], /* CJK Ideograph */ + ["\u784F", "\u784F"], /* CJK Ideograph */ + ["\u7850", "\u7850"], /* CJK Ideograph */ + ["\u7851", "\u7851"], /* CJK Ideograph */ + ["\u7852", "\u7852"], /* CJK Ideograph */ + ["\u7853", "\u7853"], /* CJK Ideograph */ + ["\u7854", "\u7854"], /* CJK Ideograph */ + ["\u7855", "\u7855"], /* CJK Ideograph */ + ["\u7856", "\u7856"], /* CJK Ideograph */ + ["\u7857", "\u7857"], /* CJK Ideograph */ + ["\u7858", "\u7858"], /* CJK Ideograph */ + ["\u7859", "\u7859"], /* CJK Ideograph */ + ["\u785A", "\u785A"], /* CJK Ideograph */ + ["\u785B", "\u785B"], /* CJK Ideograph */ + ["\u785C", "\u785C"], /* CJK Ideograph */ + ["\u785D", "\u785D"], /* CJK Ideograph */ + ["\u785E", "\u785E"], /* CJK Ideograph */ + ["\u785F", "\u785F"], /* CJK Ideograph */ + ["\u7860", "\u7860"], /* CJK Ideograph */ + ["\u7861", "\u7861"], /* CJK Ideograph */ + ["\u7862", "\u7862"], /* CJK Ideograph */ + ["\u7863", "\u7863"], /* CJK Ideograph */ + ["\u7864", "\u7864"], /* CJK Ideograph */ + ["\u7865", "\u7865"], /* CJK Ideograph */ + ["\u7866", "\u7866"], /* CJK Ideograph */ + ["\u7867", "\u7867"], /* CJK Ideograph */ + ["\u7868", "\u7868"], /* CJK Ideograph */ + ["\u7869", "\u7869"], /* CJK Ideograph */ + ["\u786A", "\u786A"], /* CJK Ideograph */ + ["\u786B", "\u786B"], /* CJK Ideograph */ + ["\u786C", "\u786C"], /* CJK Ideograph */ + ["\u786D", "\u786D"], /* CJK Ideograph */ + ["\u786E", "\u786E"], /* CJK Ideograph */ + ["\u786F", "\u786F"], /* CJK Ideograph */ + ["\u7870", "\u7870"], /* CJK Ideograph */ + ["\u7871", "\u7871"], /* CJK Ideograph */ + ["\u7872", "\u7872"], /* CJK Ideograph */ + ["\u7873", "\u7873"], /* CJK Ideograph */ + ["\u7874", "\u7874"], /* CJK Ideograph */ + ["\u7875", "\u7875"], /* CJK Ideograph */ + ["\u7876", "\u7876"], /* CJK Ideograph */ + ["\u7877", "\u7877"], /* CJK Ideograph */ + ["\u7878", "\u7878"], /* CJK Ideograph */ + ["\u7879", "\u7879"], /* CJK Ideograph */ + ["\u787A", "\u787A"], /* CJK Ideograph */ + ["\u787B", "\u787B"], /* CJK Ideograph */ + ["\u787C", "\u787C"], /* CJK Ideograph */ + ["\u787D", "\u787D"], /* CJK Ideograph */ + ["\u787E", "\u787E"], /* CJK Ideograph */ + ["\u787F", "\u787F"], /* CJK Ideograph */ + ["\u7880", "\u7880"], /* CJK Ideograph */ + ["\u7881", "\u7881"], /* CJK Ideograph */ + ["\u7882", "\u7882"], /* CJK Ideograph */ + ["\u7883", "\u7883"], /* CJK Ideograph */ + ["\u7884", "\u7884"], /* CJK Ideograph */ + ["\u7885", "\u7885"], /* CJK Ideograph */ + ["\u7886", "\u7886"], /* CJK Ideograph */ + ["\u7887", "\u7887"], /* CJK Ideograph */ + ["\u7888", "\u7888"], /* CJK Ideograph */ + ["\u7889", "\u7889"], /* CJK Ideograph */ + ["\u788A", "\u788A"], /* CJK Ideograph */ + ["\u788B", "\u788B"], /* CJK Ideograph */ + ["\u788C", "\u788C"], /* CJK Ideograph */ + ["\u788D", "\u788D"], /* CJK Ideograph */ + ["\u788E", "\u788E"], /* CJK Ideograph */ + ["\u788F", "\u788F"], /* CJK Ideograph */ + ["\u7890", "\u7890"], /* CJK Ideograph */ + ["\u7891", "\u7891"], /* CJK Ideograph */ + ["\u7892", "\u7892"], /* CJK Ideograph */ + ["\u7893", "\u7893"], /* CJK Ideograph */ + ["\u7894", "\u7894"], /* CJK Ideograph */ + ["\u7895", "\u7895"], /* CJK Ideograph */ + ["\u7896", "\u7896"], /* CJK Ideograph */ + ["\u7897", "\u7897"], /* CJK Ideograph */ + ["\u7898", "\u7898"], /* CJK Ideograph */ + ["\u7899", "\u7899"], /* CJK Ideograph */ + ["\u789A", "\u789A"], /* CJK Ideograph */ + ["\u789B", "\u789B"], /* CJK Ideograph */ + ["\u789C", "\u789C"], /* CJK Ideograph */ + ["\u789D", "\u789D"], /* CJK Ideograph */ + ["\u789E", "\u789E"], /* CJK Ideograph */ + ["\u789F", "\u789F"], /* CJK Ideograph */ + ["\u78A0", "\u78A0"], /* CJK Ideograph */ + ["\u78A1", "\u78A1"], /* CJK Ideograph */ + ["\u78A2", "\u78A2"], /* CJK Ideograph */ + ["\u78A3", "\u78A3"], /* CJK Ideograph */ + ["\u78A4", "\u78A4"], /* CJK Ideograph */ + ["\u78A5", "\u78A5"], /* CJK Ideograph */ + ["\u78A6", "\u78A6"], /* CJK Ideograph */ + ["\u78A7", "\u78A7"], /* CJK Ideograph */ + ["\u78A8", "\u78A8"], /* CJK Ideograph */ + ["\u78A9", "\u78A9"], /* CJK Ideograph */ + ["\u78AA", "\u78AA"], /* CJK Ideograph */ + ["\u78AB", "\u78AB"], /* CJK Ideograph */ + ["\u78AC", "\u78AC"], /* CJK Ideograph */ + ["\u78AD", "\u78AD"], /* CJK Ideograph */ + ["\u78AE", "\u78AE"], /* CJK Ideograph */ + ["\u78AF", "\u78AF"], /* CJK Ideograph */ + ["\u78B0", "\u78B0"], /* CJK Ideograph */ + ["\u78B1", "\u78B1"], /* CJK Ideograph */ + ["\u78B2", "\u78B2"], /* CJK Ideograph */ + ["\u78B3", "\u78B3"], /* CJK Ideograph */ + ["\u78B4", "\u78B4"], /* CJK Ideograph */ + ["\u78B5", "\u78B5"], /* CJK Ideograph */ + ["\u78B6", "\u78B6"], /* CJK Ideograph */ + ["\u78B7", "\u78B7"], /* CJK Ideograph */ + ["\u78B8", "\u78B8"], /* CJK Ideograph */ + ["\u78B9", "\u78B9"], /* CJK Ideograph */ + ["\u78BA", "\u78BA"], /* CJK Ideograph */ + ["\u78BB", "\u78BB"], /* CJK Ideograph */ + ["\u78BC", "\u78BC"], /* CJK Ideograph */ + ["\u78BD", "\u78BD"], /* CJK Ideograph */ + ["\u78BE", "\u78BE"], /* CJK Ideograph */ + ["\u78BF", "\u78BF"], /* CJK Ideograph */ + ["\u78C0", "\u78C0"], /* CJK Ideograph */ + ["\u78C1", "\u78C1"], /* CJK Ideograph */ + ["\u78C2", "\u78C2"], /* CJK Ideograph */ + ["\u78C3", "\u78C3"], /* CJK Ideograph */ + ["\u78C4", "\u78C4"], /* CJK Ideograph */ + ["\u78C5", "\u78C5"], /* CJK Ideograph */ + ["\u78C6", "\u78C6"], /* CJK Ideograph */ + ["\u78C7", "\u78C7"], /* CJK Ideograph */ + ["\u78C8", "\u78C8"], /* CJK Ideograph */ + ["\u78C9", "\u78C9"], /* CJK Ideograph */ + ["\u78CA", "\u78CA"], /* CJK Ideograph */ + ["\u78CB", "\u78CB"], /* CJK Ideograph */ + ["\u78CC", "\u78CC"], /* CJK Ideograph */ + ["\u78CD", "\u78CD"], /* CJK Ideograph */ + ["\u78CE", "\u78CE"], /* CJK Ideograph */ + ["\u78CF", "\u78CF"], /* CJK Ideograph */ + ["\u78D0", "\u78D0"], /* CJK Ideograph */ + ["\u78D1", "\u78D1"], /* CJK Ideograph */ + ["\u78D2", "\u78D2"], /* CJK Ideograph */ + ["\u78D3", "\u78D3"], /* CJK Ideograph */ + ["\u78D4", "\u78D4"], /* CJK Ideograph */ + ["\u78D5", "\u78D5"], /* CJK Ideograph */ + ["\u78D6", "\u78D6"], /* CJK Ideograph */ + ["\u78D7", "\u78D7"], /* CJK Ideograph */ + ["\u78D8", "\u78D8"], /* CJK Ideograph */ + ["\u78D9", "\u78D9"], /* CJK Ideograph */ + ["\u78DA", "\u78DA"], /* CJK Ideograph */ + ["\u78DB", "\u78DB"], /* CJK Ideograph */ + ["\u78DC", "\u78DC"], /* CJK Ideograph */ + ["\u78DD", "\u78DD"], /* CJK Ideograph */ + ["\u78DE", "\u78DE"], /* CJK Ideograph */ + ["\u78DF", "\u78DF"], /* CJK Ideograph */ + ["\u78E0", "\u78E0"], /* CJK Ideograph */ + ["\u78E1", "\u78E1"], /* CJK Ideograph */ + ["\u78E2", "\u78E2"], /* CJK Ideograph */ + ["\u78E3", "\u78E3"], /* CJK Ideograph */ + ["\u78E4", "\u78E4"], /* CJK Ideograph */ + ["\u78E5", "\u78E5"], /* CJK Ideograph */ + ["\u78E6", "\u78E6"], /* CJK Ideograph */ + ["\u78E7", "\u78E7"], /* CJK Ideograph */ + ["\u78E8", "\u78E8"], /* CJK Ideograph */ + ["\u78E9", "\u78E9"], /* CJK Ideograph */ + ["\u78EA", "\u78EA"], /* CJK Ideograph */ + ["\u78EB", "\u78EB"], /* CJK Ideograph */ + ["\u78EC", "\u78EC"], /* CJK Ideograph */ + ["\u78ED", "\u78ED"], /* CJK Ideograph */ + ["\u78EE", "\u78EE"], /* CJK Ideograph */ + ["\u78EF", "\u78EF"], /* CJK Ideograph */ + ["\u78F0", "\u78F0"], /* CJK Ideograph */ + ["\u78F1", "\u78F1"], /* CJK Ideograph */ + ["\u78F2", "\u78F2"], /* CJK Ideograph */ + ["\u78F3", "\u78F3"], /* CJK Ideograph */ + ["\u78F4", "\u78F4"], /* CJK Ideograph */ + ["\u78F5", "\u78F5"], /* CJK Ideograph */ + ["\u78F6", "\u78F6"], /* CJK Ideograph */ + ["\u78F7", "\u78F7"], /* CJK Ideograph */ + ["\u78F8", "\u78F8"], /* CJK Ideograph */ + ["\u78F9", "\u78F9"], /* CJK Ideograph */ + ["\u78FA", "\u78FA"], /* CJK Ideograph */ + ["\u78FB", "\u78FB"], /* CJK Ideograph */ + ["\u78FC", "\u78FC"], /* CJK Ideograph */ + ["\u78FD", "\u78FD"], /* CJK Ideograph */ + ["\u78FE", "\u78FE"], /* CJK Ideograph */ + ["\u78FF", "\u78FF"], /* CJK Ideograph */ + ["\u7900", "\u7900"], /* CJK Ideograph */ + ["\u7901", "\u7901"], /* CJK Ideograph */ + ["\u7902", "\u7902"], /* CJK Ideograph */ + ["\u7903", "\u7903"], /* CJK Ideograph */ + ["\u7904", "\u7904"], /* CJK Ideograph */ + ["\u7905", "\u7905"], /* CJK Ideograph */ + ["\u7906", "\u7906"], /* CJK Ideograph */ + ["\u7907", "\u7907"], /* CJK Ideograph */ + ["\u7908", "\u7908"], /* CJK Ideograph */ + ["\u7909", "\u7909"], /* CJK Ideograph */ + ["\u790A", "\u790A"], /* CJK Ideograph */ + ["\u790B", "\u790B"], /* CJK Ideograph */ + ["\u790C", "\u790C"], /* CJK Ideograph */ + ["\u790D", "\u790D"], /* CJK Ideograph */ + ["\u790E", "\u790E"], /* CJK Ideograph */ + ["\u790F", "\u790F"], /* CJK Ideograph */ + ["\u7910", "\u7910"], /* CJK Ideograph */ + ["\u7911", "\u7911"], /* CJK Ideograph */ + ["\u7912", "\u7912"], /* CJK Ideograph */ + ["\u7913", "\u7913"], /* CJK Ideograph */ + ["\u7914", "\u7914"], /* CJK Ideograph */ + ["\u7915", "\u7915"], /* CJK Ideograph */ + ["\u7916", "\u7916"], /* CJK Ideograph */ + ["\u7917", "\u7917"], /* CJK Ideograph */ + ["\u7918", "\u7918"], /* CJK Ideograph */ + ["\u7919", "\u7919"], /* CJK Ideograph */ + ["\u791A", "\u791A"], /* CJK Ideograph */ + ["\u791B", "\u791B"], /* CJK Ideograph */ + ["\u791C", "\u791C"], /* CJK Ideograph */ + ["\u791D", "\u791D"], /* CJK Ideograph */ + ["\u791E", "\u791E"], /* CJK Ideograph */ + ["\u791F", "\u791F"], /* CJK Ideograph */ + ["\u7920", "\u7920"], /* CJK Ideograph */ + ["\u7921", "\u7921"], /* CJK Ideograph */ + ["\u7922", "\u7922"], /* CJK Ideograph */ + ["\u7923", "\u7923"], /* CJK Ideograph */ + ["\u7924", "\u7924"], /* CJK Ideograph */ + ["\u7925", "\u7925"], /* CJK Ideograph */ + ["\u7926", "\u7926"], /* CJK Ideograph */ + ["\u7927", "\u7927"], /* CJK Ideograph */ + ["\u7928", "\u7928"], /* CJK Ideograph */ + ["\u7929", "\u7929"], /* CJK Ideograph */ + ["\u792A", "\u792A"], /* CJK Ideograph */ + ["\u792B", "\u792B"], /* CJK Ideograph */ + ["\u792C", "\u792C"], /* CJK Ideograph */ + ["\u792D", "\u792D"], /* CJK Ideograph */ + ["\u792E", "\u792E"], /* CJK Ideograph */ + ["\u792F", "\u792F"], /* CJK Ideograph */ + ["\u7930", "\u7930"], /* CJK Ideograph */ + ["\u7931", "\u7931"], /* CJK Ideograph */ + ["\u7932", "\u7932"], /* CJK Ideograph */ + ["\u7933", "\u7933"], /* CJK Ideograph */ + ["\u7934", "\u7934"], /* CJK Ideograph */ + ["\u7935", "\u7935"], /* CJK Ideograph */ + ["\u7936", "\u7936"], /* CJK Ideograph */ + ["\u7937", "\u7937"], /* CJK Ideograph */ + ["\u7938", "\u7938"], /* CJK Ideograph */ + ["\u7939", "\u7939"], /* CJK Ideograph */ + ["\u793A", "\u793A"], /* CJK Ideograph */ + ["\u793B", "\u793B"], /* CJK Ideograph */ + ["\u793C", "\u793C"], /* CJK Ideograph */ + ["\u793D", "\u793D"], /* CJK Ideograph */ + ["\u793E", "\u793E"], /* CJK Ideograph */ + ["\u793F", "\u793F"], /* CJK Ideograph */ + ["\u7940", "\u7940"], /* CJK Ideograph */ + ["\u7941", "\u7941"], /* CJK Ideograph */ + ["\u7942", "\u7942"], /* CJK Ideograph */ + ["\u7943", "\u7943"], /* CJK Ideograph */ + ["\u7944", "\u7944"], /* CJK Ideograph */ + ["\u7945", "\u7945"], /* CJK Ideograph */ + ["\u7946", "\u7946"], /* CJK Ideograph */ + ["\u7947", "\u7947"], /* CJK Ideograph */ + ["\u7948", "\u7948"], /* CJK Ideograph */ + ["\u7949", "\u7949"], /* CJK Ideograph */ + ["\u794A", "\u794A"], /* CJK Ideograph */ + ["\u794B", "\u794B"], /* CJK Ideograph */ + ["\u794C", "\u794C"], /* CJK Ideograph */ + ["\u794D", "\u794D"], /* CJK Ideograph */ + ["\u794E", "\u794E"], /* CJK Ideograph */ + ["\u794F", "\u794F"], /* CJK Ideograph */ + ["\u7950", "\u7950"], /* CJK Ideograph */ + ["\u7951", "\u7951"], /* CJK Ideograph */ + ["\u7952", "\u7952"], /* CJK Ideograph */ + ["\u7953", "\u7953"], /* CJK Ideograph */ + ["\u7954", "\u7954"], /* CJK Ideograph */ + ["\u7955", "\u7955"], /* CJK Ideograph */ + ["\u7956", "\u7956"], /* CJK Ideograph */ + ["\u7957", "\u7957"], /* CJK Ideograph */ + ["\u7958", "\u7958"], /* CJK Ideograph */ + ["\u7959", "\u7959"], /* CJK Ideograph */ + ["\u795A", "\u795A"], /* CJK Ideograph */ + ["\u795B", "\u795B"], /* CJK Ideograph */ + ["\u795C", "\u795C"], /* CJK Ideograph */ + ["\u795D", "\u795D"], /* CJK Ideograph */ + ["\u795E", "\u795E"], /* CJK Ideograph */ + ["\u795F", "\u795F"], /* CJK Ideograph */ + ["\u7960", "\u7960"], /* CJK Ideograph */ + ["\u7961", "\u7961"], /* CJK Ideograph */ + ["\u7962", "\u7962"], /* CJK Ideograph */ + ["\u7963", "\u7963"], /* CJK Ideograph */ + ["\u7964", "\u7964"], /* CJK Ideograph */ + ["\u7965", "\u7965"], /* CJK Ideograph */ + ["\u7966", "\u7966"], /* CJK Ideograph */ + ["\u7967", "\u7967"], /* CJK Ideograph */ + ["\u7968", "\u7968"], /* CJK Ideograph */ + ["\u7969", "\u7969"], /* CJK Ideograph */ + ["\u796A", "\u796A"], /* CJK Ideograph */ + ["\u796B", "\u796B"], /* CJK Ideograph */ + ["\u796C", "\u796C"], /* CJK Ideograph */ + ["\u796D", "\u796D"], /* CJK Ideograph */ + ["\u796E", "\u796E"], /* CJK Ideograph */ + ["\u796F", "\u796F"], /* CJK Ideograph */ + ["\u7970", "\u7970"], /* CJK Ideograph */ + ["\u7971", "\u7971"], /* CJK Ideograph */ + ["\u7972", "\u7972"], /* CJK Ideograph */ + ["\u7973", "\u7973"], /* CJK Ideograph */ + ["\u7974", "\u7974"], /* CJK Ideograph */ + ["\u7975", "\u7975"], /* CJK Ideograph */ + ["\u7976", "\u7976"], /* CJK Ideograph */ + ["\u7977", "\u7977"], /* CJK Ideograph */ + ["\u7978", "\u7978"], /* CJK Ideograph */ + ["\u7979", "\u7979"], /* CJK Ideograph */ + ["\u797A", "\u797A"], /* CJK Ideograph */ + ["\u797B", "\u797B"], /* CJK Ideograph */ + ["\u797C", "\u797C"], /* CJK Ideograph */ + ["\u797D", "\u797D"], /* CJK Ideograph */ + ["\u797E", "\u797E"], /* CJK Ideograph */ + ["\u797F", "\u797F"], /* CJK Ideograph */ + ["\u7980", "\u7980"], /* CJK Ideograph */ + ["\u7981", "\u7981"], /* CJK Ideograph */ + ["\u7982", "\u7982"], /* CJK Ideograph */ + ["\u7983", "\u7983"], /* CJK Ideograph */ + ["\u7984", "\u7984"], /* CJK Ideograph */ + ["\u7985", "\u7985"], /* CJK Ideograph */ + ["\u7986", "\u7986"], /* CJK Ideograph */ + ["\u7987", "\u7987"], /* CJK Ideograph */ + ["\u7988", "\u7988"], /* CJK Ideograph */ + ["\u7989", "\u7989"], /* CJK Ideograph */ + ["\u798A", "\u798A"], /* CJK Ideograph */ + ["\u798B", "\u798B"], /* CJK Ideograph */ + ["\u798C", "\u798C"], /* CJK Ideograph */ + ["\u798D", "\u798D"], /* CJK Ideograph */ + ["\u798E", "\u798E"], /* CJK Ideograph */ + ["\u798F", "\u798F"], /* CJK Ideograph */ + ["\u7990", "\u7990"], /* CJK Ideograph */ + ["\u7991", "\u7991"], /* CJK Ideograph */ + ["\u7992", "\u7992"], /* CJK Ideograph */ + ["\u7993", "\u7993"], /* CJK Ideograph */ + ["\u7994", "\u7994"], /* CJK Ideograph */ + ["\u7995", "\u7995"], /* CJK Ideograph */ + ["\u7996", "\u7996"], /* CJK Ideograph */ + ["\u7997", "\u7997"], /* CJK Ideograph */ + ["\u7998", "\u7998"], /* CJK Ideograph */ + ["\u7999", "\u7999"], /* CJK Ideograph */ + ["\u799A", "\u799A"], /* CJK Ideograph */ + ["\u799B", "\u799B"], /* CJK Ideograph */ + ["\u799C", "\u799C"], /* CJK Ideograph */ + ["\u799D", "\u799D"], /* CJK Ideograph */ + ["\u799E", "\u799E"], /* CJK Ideograph */ + ["\u799F", "\u799F"], /* CJK Ideograph */ + ["\u79A0", "\u79A0"], /* CJK Ideograph */ + ["\u79A1", "\u79A1"], /* CJK Ideograph */ + ["\u79A2", "\u79A2"], /* CJK Ideograph */ + ["\u79A3", "\u79A3"], /* CJK Ideograph */ + ["\u79A4", "\u79A4"], /* CJK Ideograph */ + ["\u79A5", "\u79A5"], /* CJK Ideograph */ + ["\u79A6", "\u79A6"], /* CJK Ideograph */ + ["\u79A7", "\u79A7"], /* CJK Ideograph */ + ["\u79A8", "\u79A8"], /* CJK Ideograph */ + ["\u79A9", "\u79A9"], /* CJK Ideograph */ + ["\u79AA", "\u79AA"], /* CJK Ideograph */ + ["\u79AB", "\u79AB"], /* CJK Ideograph */ + ["\u79AC", "\u79AC"], /* CJK Ideograph */ + ["\u79AD", "\u79AD"], /* CJK Ideograph */ + ["\u79AE", "\u79AE"], /* CJK Ideograph */ + ["\u79AF", "\u79AF"], /* CJK Ideograph */ + ["\u79B0", "\u79B0"], /* CJK Ideograph */ + ["\u79B1", "\u79B1"], /* CJK Ideograph */ + ["\u79B2", "\u79B2"], /* CJK Ideograph */ + ["\u79B3", "\u79B3"], /* CJK Ideograph */ + ["\u79B4", "\u79B4"], /* CJK Ideograph */ + ["\u79B5", "\u79B5"], /* CJK Ideograph */ + ["\u79B6", "\u79B6"], /* CJK Ideograph */ + ["\u79B7", "\u79B7"], /* CJK Ideograph */ + ["\u79B8", "\u79B8"], /* CJK Ideograph */ + ["\u79B9", "\u79B9"], /* CJK Ideograph */ + ["\u79BA", "\u79BA"], /* CJK Ideograph */ + ["\u79BB", "\u79BB"], /* CJK Ideograph */ + ["\u79BC", "\u79BC"], /* CJK Ideograph */ + ["\u79BD", "\u79BD"], /* CJK Ideograph */ + ["\u79BE", "\u79BE"], /* CJK Ideograph */ + ["\u79BF", "\u79BF"], /* CJK Ideograph */ + ["\u79C0", "\u79C0"], /* CJK Ideograph */ + ["\u79C1", "\u79C1"], /* CJK Ideograph */ + ["\u79C2", "\u79C2"], /* CJK Ideograph */ + ["\u79C3", "\u79C3"], /* CJK Ideograph */ + ["\u79C4", "\u79C4"], /* CJK Ideograph */ + ["\u79C5", "\u79C5"], /* CJK Ideograph */ + ["\u79C6", "\u79C6"], /* CJK Ideograph */ + ["\u79C7", "\u79C7"], /* CJK Ideograph */ + ["\u79C8", "\u79C8"], /* CJK Ideograph */ + ["\u79C9", "\u79C9"], /* CJK Ideograph */ + ["\u79CA", "\u79CA"], /* CJK Ideograph */ + ["\u79CB", "\u79CB"], /* CJK Ideograph */ + ["\u79CC", "\u79CC"], /* CJK Ideograph */ + ["\u79CD", "\u79CD"], /* CJK Ideograph */ + ["\u79CE", "\u79CE"], /* CJK Ideograph */ + ["\u79CF", "\u79CF"], /* CJK Ideograph */ + ["\u79D0", "\u79D0"], /* CJK Ideograph */ + ["\u79D1", "\u79D1"], /* CJK Ideograph */ + ["\u79D2", "\u79D2"], /* CJK Ideograph */ + ["\u79D3", "\u79D3"], /* CJK Ideograph */ + ["\u79D4", "\u79D4"], /* CJK Ideograph */ + ["\u79D5", "\u79D5"], /* CJK Ideograph */ + ["\u79D6", "\u79D6"], /* CJK Ideograph */ + ["\u79D7", "\u79D7"], /* CJK Ideograph */ + ["\u79D8", "\u79D8"], /* CJK Ideograph */ + ["\u79D9", "\u79D9"], /* CJK Ideograph */ + ["\u79DA", "\u79DA"], /* CJK Ideograph */ + ["\u79DB", "\u79DB"], /* CJK Ideograph */ + ["\u79DC", "\u79DC"], /* CJK Ideograph */ + ["\u79DD", "\u79DD"], /* CJK Ideograph */ + ["\u79DE", "\u79DE"], /* CJK Ideograph */ + ["\u79DF", "\u79DF"], /* CJK Ideograph */ + ["\u79E0", "\u79E0"], /* CJK Ideograph */ + ["\u79E1", "\u79E1"], /* CJK Ideograph */ + ["\u79E2", "\u79E2"], /* CJK Ideograph */ + ["\u79E3", "\u79E3"], /* CJK Ideograph */ + ["\u79E4", "\u79E4"], /* CJK Ideograph */ + ["\u79E5", "\u79E5"], /* CJK Ideograph */ + ["\u79E6", "\u79E6"], /* CJK Ideograph */ + ["\u79E7", "\u79E7"], /* CJK Ideograph */ + ["\u79E8", "\u79E8"], /* CJK Ideograph */ + ["\u79E9", "\u79E9"], /* CJK Ideograph */ + ["\u79EA", "\u79EA"], /* CJK Ideograph */ + ["\u79EB", "\u79EB"], /* CJK Ideograph */ + ["\u79EC", "\u79EC"], /* CJK Ideograph */ + ["\u79ED", "\u79ED"], /* CJK Ideograph */ + ["\u79EE", "\u79EE"], /* CJK Ideograph */ + ["\u79EF", "\u79EF"], /* CJK Ideograph */ + ["\u79F0", "\u79F0"], /* CJK Ideograph */ + ["\u79F1", "\u79F1"], /* CJK Ideograph */ + ["\u79F2", "\u79F2"], /* CJK Ideograph */ + ["\u79F3", "\u79F3"], /* CJK Ideograph */ + ["\u79F4", "\u79F4"], /* CJK Ideograph */ + ["\u79F5", "\u79F5"], /* CJK Ideograph */ + ["\u79F6", "\u79F6"], /* CJK Ideograph */ + ["\u79F7", "\u79F7"], /* CJK Ideograph */ + ["\u79F8", "\u79F8"], /* CJK Ideograph */ + ["\u79F9", "\u79F9"], /* CJK Ideograph */ + ["\u79FA", "\u79FA"], /* CJK Ideograph */ + ["\u79FB", "\u79FB"], /* CJK Ideograph */ + ["\u79FC", "\u79FC"], /* CJK Ideograph */ + ["\u79FD", "\u79FD"], /* CJK Ideograph */ + ["\u79FE", "\u79FE"], /* CJK Ideograph */ + ["\u79FF", "\u79FF"], /* CJK Ideograph */ + ["\u7A00", "\u7A00"], /* CJK Ideograph */ + ["\u7A01", "\u7A01"], /* CJK Ideograph */ + ["\u7A02", "\u7A02"], /* CJK Ideograph */ + ["\u7A03", "\u7A03"], /* CJK Ideograph */ + ["\u7A04", "\u7A04"], /* CJK Ideograph */ + ["\u7A05", "\u7A05"], /* CJK Ideograph */ + ["\u7A06", "\u7A06"], /* CJK Ideograph */ + ["\u7A07", "\u7A07"], /* CJK Ideograph */ + ["\u7A08", "\u7A08"], /* CJK Ideograph */ + ["\u7A09", "\u7A09"], /* CJK Ideograph */ + ["\u7A0A", "\u7A0A"], /* CJK Ideograph */ + ["\u7A0B", "\u7A0B"], /* CJK Ideograph */ + ["\u7A0C", "\u7A0C"], /* CJK Ideograph */ + ["\u7A0D", "\u7A0D"], /* CJK Ideograph */ + ["\u7A0E", "\u7A0E"], /* CJK Ideograph */ + ["\u7A0F", "\u7A0F"], /* CJK Ideograph */ + ["\u7A10", "\u7A10"], /* CJK Ideograph */ + ["\u7A11", "\u7A11"], /* CJK Ideograph */ + ["\u7A12", "\u7A12"], /* CJK Ideograph */ + ["\u7A13", "\u7A13"], /* CJK Ideograph */ + ["\u7A14", "\u7A14"], /* CJK Ideograph */ + ["\u7A15", "\u7A15"], /* CJK Ideograph */ + ["\u7A16", "\u7A16"], /* CJK Ideograph */ + ["\u7A17", "\u7A17"], /* CJK Ideograph */ + ["\u7A18", "\u7A18"], /* CJK Ideograph */ + ["\u7A19", "\u7A19"], /* CJK Ideograph */ + ["\u7A1A", "\u7A1A"], /* CJK Ideograph */ + ["\u7A1B", "\u7A1B"], /* CJK Ideograph */ + ["\u7A1C", "\u7A1C"], /* CJK Ideograph */ + ["\u7A1D", "\u7A1D"], /* CJK Ideograph */ + ["\u7A1E", "\u7A1E"], /* CJK Ideograph */ + ["\u7A1F", "\u7A1F"], /* CJK Ideograph */ + ["\u7A20", "\u7A20"], /* CJK Ideograph */ + ["\u7A21", "\u7A21"], /* CJK Ideograph */ + ["\u7A22", "\u7A22"], /* CJK Ideograph */ + ["\u7A23", "\u7A23"], /* CJK Ideograph */ + ["\u7A24", "\u7A24"], /* CJK Ideograph */ + ["\u7A25", "\u7A25"], /* CJK Ideograph */ + ["\u7A26", "\u7A26"], /* CJK Ideograph */ + ["\u7A27", "\u7A27"], /* CJK Ideograph */ + ["\u7A28", "\u7A28"], /* CJK Ideograph */ + ["\u7A29", "\u7A29"], /* CJK Ideograph */ + ["\u7A2A", "\u7A2A"], /* CJK Ideograph */ + ["\u7A2B", "\u7A2B"], /* CJK Ideograph */ + ["\u7A2C", "\u7A2C"], /* CJK Ideograph */ + ["\u7A2D", "\u7A2D"], /* CJK Ideograph */ + ["\u7A2E", "\u7A2E"], /* CJK Ideograph */ + ["\u7A2F", "\u7A2F"], /* CJK Ideograph */ + ["\u7A30", "\u7A30"], /* CJK Ideograph */ + ["\u7A31", "\u7A31"], /* CJK Ideograph */ + ["\u7A32", "\u7A32"], /* CJK Ideograph */ + ["\u7A33", "\u7A33"], /* CJK Ideograph */ + ["\u7A34", "\u7A34"], /* CJK Ideograph */ + ["\u7A35", "\u7A35"], /* CJK Ideograph */ + ["\u7A36", "\u7A36"], /* CJK Ideograph */ + ["\u7A37", "\u7A37"], /* CJK Ideograph */ + ["\u7A38", "\u7A38"], /* CJK Ideograph */ + ["\u7A39", "\u7A39"], /* CJK Ideograph */ + ["\u7A3A", "\u7A3A"], /* CJK Ideograph */ + ["\u7A3B", "\u7A3B"], /* CJK Ideograph */ + ["\u7A3C", "\u7A3C"], /* CJK Ideograph */ + ["\u7A3D", "\u7A3D"], /* CJK Ideograph */ + ["\u7A3E", "\u7A3E"], /* CJK Ideograph */ + ["\u7A3F", "\u7A3F"], /* CJK Ideograph */ + ["\u7A40", "\u7A40"], /* CJK Ideograph */ + ["\u7A41", "\u7A41"], /* CJK Ideograph */ + ["\u7A42", "\u7A42"], /* CJK Ideograph */ + ["\u7A43", "\u7A43"], /* CJK Ideograph */ + ["\u7A44", "\u7A44"], /* CJK Ideograph */ + ["\u7A45", "\u7A45"], /* CJK Ideograph */ + ["\u7A46", "\u7A46"], /* CJK Ideograph */ + ["\u7A47", "\u7A47"], /* CJK Ideograph */ + ["\u7A48", "\u7A48"], /* CJK Ideograph */ + ["\u7A49", "\u7A49"], /* CJK Ideograph */ + ["\u7A4A", "\u7A4A"], /* CJK Ideograph */ + ["\u7A4B", "\u7A4B"], /* CJK Ideograph */ + ["\u7A4C", "\u7A4C"], /* CJK Ideograph */ + ["\u7A4D", "\u7A4D"], /* CJK Ideograph */ + ["\u7A4E", "\u7A4E"], /* CJK Ideograph */ + ["\u7A4F", "\u7A4F"], /* CJK Ideograph */ + ["\u7A50", "\u7A50"], /* CJK Ideograph */ + ["\u7A51", "\u7A51"], /* CJK Ideograph */ + ["\u7A52", "\u7A52"], /* CJK Ideograph */ + ["\u7A53", "\u7A53"], /* CJK Ideograph */ + ["\u7A54", "\u7A54"], /* CJK Ideograph */ + ["\u7A55", "\u7A55"], /* CJK Ideograph */ + ["\u7A56", "\u7A56"], /* CJK Ideograph */ + ["\u7A57", "\u7A57"], /* CJK Ideograph */ + ["\u7A58", "\u7A58"], /* CJK Ideograph */ + ["\u7A59", "\u7A59"], /* CJK Ideograph */ + ["\u7A5A", "\u7A5A"], /* CJK Ideograph */ + ["\u7A5B", "\u7A5B"], /* CJK Ideograph */ + ["\u7A5C", "\u7A5C"], /* CJK Ideograph */ + ["\u7A5D", "\u7A5D"], /* CJK Ideograph */ + ["\u7A5E", "\u7A5E"], /* CJK Ideograph */ + ["\u7A5F", "\u7A5F"], /* CJK Ideograph */ + ["\u7A60", "\u7A60"], /* CJK Ideograph */ + ["\u7A61", "\u7A61"], /* CJK Ideograph */ + ["\u7A62", "\u7A62"], /* CJK Ideograph */ + ["\u7A63", "\u7A63"], /* CJK Ideograph */ + ["\u7A64", "\u7A64"], /* CJK Ideograph */ + ["\u7A65", "\u7A65"], /* CJK Ideograph */ + ["\u7A66", "\u7A66"], /* CJK Ideograph */ + ["\u7A67", "\u7A67"], /* CJK Ideograph */ + ["\u7A68", "\u7A68"], /* CJK Ideograph */ + ["\u7A69", "\u7A69"], /* CJK Ideograph */ + ["\u7A6A", "\u7A6A"], /* CJK Ideograph */ + ["\u7A6B", "\u7A6B"], /* CJK Ideograph */ + ["\u7A6C", "\u7A6C"], /* CJK Ideograph */ + ["\u7A6D", "\u7A6D"], /* CJK Ideograph */ + ["\u7A6E", "\u7A6E"], /* CJK Ideograph */ + ["\u7A6F", "\u7A6F"], /* CJK Ideograph */ + ["\u7A70", "\u7A70"], /* CJK Ideograph */ + ["\u7A71", "\u7A71"], /* CJK Ideograph */ + ["\u7A72", "\u7A72"], /* CJK Ideograph */ + ["\u7A73", "\u7A73"], /* CJK Ideograph */ + ["\u7A74", "\u7A74"], /* CJK Ideograph */ + ["\u7A75", "\u7A75"], /* CJK Ideograph */ + ["\u7A76", "\u7A76"], /* CJK Ideograph */ + ["\u7A77", "\u7A77"], /* CJK Ideograph */ + ["\u7A78", "\u7A78"], /* CJK Ideograph */ + ["\u7A79", "\u7A79"], /* CJK Ideograph */ + ["\u7A7A", "\u7A7A"], /* CJK Ideograph */ + ["\u7A7B", "\u7A7B"], /* CJK Ideograph */ + ["\u7A7C", "\u7A7C"], /* CJK Ideograph */ + ["\u7A7D", "\u7A7D"], /* CJK Ideograph */ + ["\u7A7E", "\u7A7E"], /* CJK Ideograph */ + ["\u7A7F", "\u7A7F"], /* CJK Ideograph */ + ["\u7A80", "\u7A80"], /* CJK Ideograph */ + ["\u7A81", "\u7A81"], /* CJK Ideograph */ + ["\u7A82", "\u7A82"], /* CJK Ideograph */ + ["\u7A83", "\u7A83"], /* CJK Ideograph */ + ["\u7A84", "\u7A84"], /* CJK Ideograph */ + ["\u7A85", "\u7A85"], /* CJK Ideograph */ + ["\u7A86", "\u7A86"], /* CJK Ideograph */ + ["\u7A87", "\u7A87"], /* CJK Ideograph */ + ["\u7A88", "\u7A88"], /* CJK Ideograph */ + ["\u7A89", "\u7A89"], /* CJK Ideograph */ + ["\u7A8A", "\u7A8A"], /* CJK Ideograph */ + ["\u7A8B", "\u7A8B"], /* CJK Ideograph */ + ["\u7A8C", "\u7A8C"], /* CJK Ideograph */ + ["\u7A8D", "\u7A8D"], /* CJK Ideograph */ + ["\u7A8E", "\u7A8E"], /* CJK Ideograph */ + ["\u7A8F", "\u7A8F"], /* CJK Ideograph */ + ["\u7A90", "\u7A90"], /* CJK Ideograph */ + ["\u7A91", "\u7A91"], /* CJK Ideograph */ + ["\u7A92", "\u7A92"], /* CJK Ideograph */ + ["\u7A93", "\u7A93"], /* CJK Ideograph */ + ["\u7A94", "\u7A94"], /* CJK Ideograph */ + ["\u7A95", "\u7A95"], /* CJK Ideograph */ + ["\u7A96", "\u7A96"], /* CJK Ideograph */ + ["\u7A97", "\u7A97"], /* CJK Ideograph */ + ["\u7A98", "\u7A98"], /* CJK Ideograph */ + ["\u7A99", "\u7A99"], /* CJK Ideograph */ + ["\u7A9A", "\u7A9A"], /* CJK Ideograph */ + ["\u7A9B", "\u7A9B"], /* CJK Ideograph */ + ["\u7A9C", "\u7A9C"], /* CJK Ideograph */ + ["\u7A9D", "\u7A9D"], /* CJK Ideograph */ + ["\u7A9E", "\u7A9E"], /* CJK Ideograph */ + ["\u7A9F", "\u7A9F"], /* CJK Ideograph */ + ["\u7AA0", "\u7AA0"], /* CJK Ideograph */ + ["\u7AA1", "\u7AA1"], /* CJK Ideograph */ + ["\u7AA2", "\u7AA2"], /* CJK Ideograph */ + ["\u7AA3", "\u7AA3"], /* CJK Ideograph */ + ["\u7AA4", "\u7AA4"], /* CJK Ideograph */ + ["\u7AA5", "\u7AA5"], /* CJK Ideograph */ + ["\u7AA6", "\u7AA6"], /* CJK Ideograph */ + ["\u7AA7", "\u7AA7"], /* CJK Ideograph */ + ["\u7AA8", "\u7AA8"], /* CJK Ideograph */ + ["\u7AA9", "\u7AA9"], /* CJK Ideograph */ + ["\u7AAA", "\u7AAA"], /* CJK Ideograph */ + ["\u7AAB", "\u7AAB"], /* CJK Ideograph */ + ["\u7AAC", "\u7AAC"], /* CJK Ideograph */ + ["\u7AAD", "\u7AAD"], /* CJK Ideograph */ + ["\u7AAE", "\u7AAE"], /* CJK Ideograph */ + ["\u7AAF", "\u7AAF"], /* CJK Ideograph */ + ["\u7AB0", "\u7AB0"], /* CJK Ideograph */ + ["\u7AB1", "\u7AB1"], /* CJK Ideograph */ + ["\u7AB2", "\u7AB2"], /* CJK Ideograph */ + ["\u7AB3", "\u7AB3"], /* CJK Ideograph */ + ["\u7AB4", "\u7AB4"], /* CJK Ideograph */ + ["\u7AB5", "\u7AB5"], /* CJK Ideograph */ + ["\u7AB6", "\u7AB6"], /* CJK Ideograph */ + ["\u7AB7", "\u7AB7"], /* CJK Ideograph */ + ["\u7AB8", "\u7AB8"], /* CJK Ideograph */ + ["\u7AB9", "\u7AB9"], /* CJK Ideograph */ + ["\u7ABA", "\u7ABA"], /* CJK Ideograph */ + ["\u7ABB", "\u7ABB"], /* CJK Ideograph */ + ["\u7ABC", "\u7ABC"], /* CJK Ideograph */ + ["\u7ABD", "\u7ABD"], /* CJK Ideograph */ + ["\u7ABE", "\u7ABE"], /* CJK Ideograph */ + ["\u7ABF", "\u7ABF"], /* CJK Ideograph */ + ["\u7AC0", "\u7AC0"], /* CJK Ideograph */ + ["\u7AC1", "\u7AC1"], /* CJK Ideograph */ + ["\u7AC2", "\u7AC2"], /* CJK Ideograph */ + ["\u7AC3", "\u7AC3"], /* CJK Ideograph */ + ["\u7AC4", "\u7AC4"], /* CJK Ideograph */ + ["\u7AC5", "\u7AC5"], /* CJK Ideograph */ + ["\u7AC6", "\u7AC6"], /* CJK Ideograph */ + ["\u7AC7", "\u7AC7"], /* CJK Ideograph */ + ["\u7AC8", "\u7AC8"], /* CJK Ideograph */ + ["\u7AC9", "\u7AC9"], /* CJK Ideograph */ + ["\u7ACA", "\u7ACA"], /* CJK Ideograph */ + ["\u7ACB", "\u7ACB"], /* CJK Ideograph */ + ["\u7ACC", "\u7ACC"], /* CJK Ideograph */ + ["\u7ACD", "\u7ACD"], /* CJK Ideograph */ + ["\u7ACE", "\u7ACE"], /* CJK Ideograph */ + ["\u7ACF", "\u7ACF"], /* CJK Ideograph */ + ["\u7AD0", "\u7AD0"], /* CJK Ideograph */ + ["\u7AD1", "\u7AD1"], /* CJK Ideograph */ + ["\u7AD2", "\u7AD2"], /* CJK Ideograph */ + ["\u7AD3", "\u7AD3"], /* CJK Ideograph */ + ["\u7AD4", "\u7AD4"], /* CJK Ideograph */ + ["\u7AD5", "\u7AD5"], /* CJK Ideograph */ + ["\u7AD6", "\u7AD6"], /* CJK Ideograph */ + ["\u7AD7", "\u7AD7"], /* CJK Ideograph */ + ["\u7AD8", "\u7AD8"], /* CJK Ideograph */ + ["\u7AD9", "\u7AD9"], /* CJK Ideograph */ + ["\u7ADA", "\u7ADA"], /* CJK Ideograph */ + ["\u7ADB", "\u7ADB"], /* CJK Ideograph */ + ["\u7ADC", "\u7ADC"], /* CJK Ideograph */ + ["\u7ADD", "\u7ADD"], /* CJK Ideograph */ + ["\u7ADE", "\u7ADE"], /* CJK Ideograph */ + ["\u7ADF", "\u7ADF"], /* CJK Ideograph */ + ["\u7AE0", "\u7AE0"], /* CJK Ideograph */ + ["\u7AE1", "\u7AE1"], /* CJK Ideograph */ + ["\u7AE2", "\u7AE2"], /* CJK Ideograph */ + ["\u7AE3", "\u7AE3"], /* CJK Ideograph */ + ["\u7AE4", "\u7AE4"], /* CJK Ideograph */ + ["\u7AE5", "\u7AE5"], /* CJK Ideograph */ + ["\u7AE6", "\u7AE6"], /* CJK Ideograph */ + ["\u7AE7", "\u7AE7"], /* CJK Ideograph */ + ["\u7AE8", "\u7AE8"], /* CJK Ideograph */ + ["\u7AE9", "\u7AE9"], /* CJK Ideograph */ + ["\u7AEA", "\u7AEA"], /* CJK Ideograph */ + ["\u7AEB", "\u7AEB"], /* CJK Ideograph */ + ["\u7AEC", "\u7AEC"], /* CJK Ideograph */ + ["\u7AED", "\u7AED"], /* CJK Ideograph */ + ["\u7AEE", "\u7AEE"], /* CJK Ideograph */ + ["\u7AEF", "\u7AEF"], /* CJK Ideograph */ + ["\u7AF0", "\u7AF0"], /* CJK Ideograph */ + ["\u7AF1", "\u7AF1"], /* CJK Ideograph */ + ["\u7AF2", "\u7AF2"], /* CJK Ideograph */ + ["\u7AF3", "\u7AF3"], /* CJK Ideograph */ + ["\u7AF4", "\u7AF4"], /* CJK Ideograph */ + ["\u7AF5", "\u7AF5"], /* CJK Ideograph */ + ["\u7AF6", "\u7AF6"], /* CJK Ideograph */ + ["\u7AF7", "\u7AF7"], /* CJK Ideograph */ + ["\u7AF8", "\u7AF8"], /* CJK Ideograph */ + ["\u7AF9", "\u7AF9"], /* CJK Ideograph */ + ["\u7AFA", "\u7AFA"], /* CJK Ideograph */ + ["\u7AFB", "\u7AFB"], /* CJK Ideograph */ + ["\u7AFC", "\u7AFC"], /* CJK Ideograph */ + ["\u7AFD", "\u7AFD"], /* CJK Ideograph */ + ["\u7AFE", "\u7AFE"], /* CJK Ideograph */ + ["\u7AFF", "\u7AFF"], /* CJK Ideograph */ + ["\u7B00", "\u7B00"], /* CJK Ideograph */ + ["\u7B01", "\u7B01"], /* CJK Ideograph */ + ["\u7B02", "\u7B02"], /* CJK Ideograph */ + ["\u7B03", "\u7B03"], /* CJK Ideograph */ + ["\u7B04", "\u7B04"], /* CJK Ideograph */ + ["\u7B05", "\u7B05"], /* CJK Ideograph */ + ["\u7B06", "\u7B06"], /* CJK Ideograph */ + ["\u7B07", "\u7B07"], /* CJK Ideograph */ + ["\u7B08", "\u7B08"], /* CJK Ideograph */ + ["\u7B09", "\u7B09"], /* CJK Ideograph */ + ["\u7B0A", "\u7B0A"], /* CJK Ideograph */ + ["\u7B0B", "\u7B0B"], /* CJK Ideograph */ + ["\u7B0C", "\u7B0C"], /* CJK Ideograph */ + ["\u7B0D", "\u7B0D"], /* CJK Ideograph */ + ["\u7B0E", "\u7B0E"], /* CJK Ideograph */ + ["\u7B0F", "\u7B0F"], /* CJK Ideograph */ + ["\u7B10", "\u7B10"], /* CJK Ideograph */ + ["\u7B11", "\u7B11"], /* CJK Ideograph */ + ["\u7B12", "\u7B12"], /* CJK Ideograph */ + ["\u7B13", "\u7B13"], /* CJK Ideograph */ + ["\u7B14", "\u7B14"], /* CJK Ideograph */ + ["\u7B15", "\u7B15"], /* CJK Ideograph */ + ["\u7B16", "\u7B16"], /* CJK Ideograph */ + ["\u7B17", "\u7B17"], /* CJK Ideograph */ + ["\u7B18", "\u7B18"], /* CJK Ideograph */ + ["\u7B19", "\u7B19"], /* CJK Ideograph */ + ["\u7B1A", "\u7B1A"], /* CJK Ideograph */ + ["\u7B1B", "\u7B1B"], /* CJK Ideograph */ + ["\u7B1C", "\u7B1C"], /* CJK Ideograph */ + ["\u7B1D", "\u7B1D"], /* CJK Ideograph */ + ["\u7B1E", "\u7B1E"], /* CJK Ideograph */ + ["\u7B1F", "\u7B1F"], /* CJK Ideograph */ + ["\u7B20", "\u7B20"], /* CJK Ideograph */ + ["\u7B21", "\u7B21"], /* CJK Ideograph */ + ["\u7B22", "\u7B22"], /* CJK Ideograph */ + ["\u7B23", "\u7B23"], /* CJK Ideograph */ + ["\u7B24", "\u7B24"], /* CJK Ideograph */ + ["\u7B25", "\u7B25"], /* CJK Ideograph */ + ["\u7B26", "\u7B26"], /* CJK Ideograph */ + ["\u7B27", "\u7B27"], /* CJK Ideograph */ + ["\u7B28", "\u7B28"], /* CJK Ideograph */ + ["\u7B29", "\u7B29"], /* CJK Ideograph */ + ["\u7B2A", "\u7B2A"], /* CJK Ideograph */ + ["\u7B2B", "\u7B2B"], /* CJK Ideograph */ + ["\u7B2C", "\u7B2C"], /* CJK Ideograph */ + ["\u7B2D", "\u7B2D"], /* CJK Ideograph */ + ["\u7B2E", "\u7B2E"], /* CJK Ideograph */ + ["\u7B2F", "\u7B2F"], /* CJK Ideograph */ + ["\u7B30", "\u7B30"], /* CJK Ideograph */ + ["\u7B31", "\u7B31"], /* CJK Ideograph */ + ["\u7B32", "\u7B32"], /* CJK Ideograph */ + ["\u7B33", "\u7B33"], /* CJK Ideograph */ + ["\u7B34", "\u7B34"], /* CJK Ideograph */ + ["\u7B35", "\u7B35"], /* CJK Ideograph */ + ["\u7B36", "\u7B36"], /* CJK Ideograph */ + ["\u7B37", "\u7B37"], /* CJK Ideograph */ + ["\u7B38", "\u7B38"], /* CJK Ideograph */ + ["\u7B39", "\u7B39"], /* CJK Ideograph */ + ["\u7B3A", "\u7B3A"], /* CJK Ideograph */ + ["\u7B3B", "\u7B3B"], /* CJK Ideograph */ + ["\u7B3C", "\u7B3C"], /* CJK Ideograph */ + ["\u7B3D", "\u7B3D"], /* CJK Ideograph */ + ["\u7B3E", "\u7B3E"], /* CJK Ideograph */ + ["\u7B3F", "\u7B3F"], /* CJK Ideograph */ + ["\u7B40", "\u7B40"], /* CJK Ideograph */ + ["\u7B41", "\u7B41"], /* CJK Ideograph */ + ["\u7B42", "\u7B42"], /* CJK Ideograph */ + ["\u7B43", "\u7B43"], /* CJK Ideograph */ + ["\u7B44", "\u7B44"], /* CJK Ideograph */ + ["\u7B45", "\u7B45"], /* CJK Ideograph */ + ["\u7B46", "\u7B46"], /* CJK Ideograph */ + ["\u7B47", "\u7B47"], /* CJK Ideograph */ + ["\u7B48", "\u7B48"], /* CJK Ideograph */ + ["\u7B49", "\u7B49"], /* CJK Ideograph */ + ["\u7B4A", "\u7B4A"], /* CJK Ideograph */ + ["\u7B4B", "\u7B4B"], /* CJK Ideograph */ + ["\u7B4C", "\u7B4C"], /* CJK Ideograph */ + ["\u7B4D", "\u7B4D"], /* CJK Ideograph */ + ["\u7B4E", "\u7B4E"], /* CJK Ideograph */ + ["\u7B4F", "\u7B4F"], /* CJK Ideograph */ + ["\u7B50", "\u7B50"], /* CJK Ideograph */ + ["\u7B51", "\u7B51"], /* CJK Ideograph */ + ["\u7B52", "\u7B52"], /* CJK Ideograph */ + ["\u7B53", "\u7B53"], /* CJK Ideograph */ + ["\u7B54", "\u7B54"], /* CJK Ideograph */ + ["\u7B55", "\u7B55"], /* CJK Ideograph */ + ["\u7B56", "\u7B56"], /* CJK Ideograph */ + ["\u7B57", "\u7B57"], /* CJK Ideograph */ + ["\u7B58", "\u7B58"], /* CJK Ideograph */ + ["\u7B59", "\u7B59"], /* CJK Ideograph */ + ["\u7B5A", "\u7B5A"], /* CJK Ideograph */ + ["\u7B5B", "\u7B5B"], /* CJK Ideograph */ + ["\u7B5C", "\u7B5C"], /* CJK Ideograph */ + ["\u7B5D", "\u7B5D"], /* CJK Ideograph */ + ["\u7B5E", "\u7B5E"], /* CJK Ideograph */ + ["\u7B5F", "\u7B5F"], /* CJK Ideograph */ + ["\u7B60", "\u7B60"], /* CJK Ideograph */ + ["\u7B61", "\u7B61"], /* CJK Ideograph */ + ["\u7B62", "\u7B62"], /* CJK Ideograph */ + ["\u7B63", "\u7B63"], /* CJK Ideograph */ + ["\u7B64", "\u7B64"], /* CJK Ideograph */ + ["\u7B65", "\u7B65"], /* CJK Ideograph */ + ["\u7B66", "\u7B66"], /* CJK Ideograph */ + ["\u7B67", "\u7B67"], /* CJK Ideograph */ + ["\u7B68", "\u7B68"], /* CJK Ideograph */ + ["\u7B69", "\u7B69"], /* CJK Ideograph */ + ["\u7B6A", "\u7B6A"], /* CJK Ideograph */ + ["\u7B6B", "\u7B6B"], /* CJK Ideograph */ + ["\u7B6C", "\u7B6C"], /* CJK Ideograph */ + ["\u7B6D", "\u7B6D"], /* CJK Ideograph */ + ["\u7B6E", "\u7B6E"], /* CJK Ideograph */ + ["\u7B6F", "\u7B6F"], /* CJK Ideograph */ + ["\u7B70", "\u7B70"], /* CJK Ideograph */ + ["\u7B71", "\u7B71"], /* CJK Ideograph */ + ["\u7B72", "\u7B72"], /* CJK Ideograph */ + ["\u7B73", "\u7B73"], /* CJK Ideograph */ + ["\u7B74", "\u7B74"], /* CJK Ideograph */ + ["\u7B75", "\u7B75"], /* CJK Ideograph */ + ["\u7B76", "\u7B76"], /* CJK Ideograph */ + ["\u7B77", "\u7B77"], /* CJK Ideograph */ + ["\u7B78", "\u7B78"], /* CJK Ideograph */ + ["\u7B79", "\u7B79"], /* CJK Ideograph */ + ["\u7B7A", "\u7B7A"], /* CJK Ideograph */ + ["\u7B7B", "\u7B7B"], /* CJK Ideograph */ + ["\u7B7C", "\u7B7C"], /* CJK Ideograph */ + ["\u7B7D", "\u7B7D"], /* CJK Ideograph */ + ["\u7B7E", "\u7B7E"], /* CJK Ideograph */ + ["\u7B7F", "\u7B7F"], /* CJK Ideograph */ + ["\u7B80", "\u7B80"], /* CJK Ideograph */ + ["\u7B81", "\u7B81"], /* CJK Ideograph */ + ["\u7B82", "\u7B82"], /* CJK Ideograph */ + ["\u7B83", "\u7B83"], /* CJK Ideograph */ + ["\u7B84", "\u7B84"], /* CJK Ideograph */ + ["\u7B85", "\u7B85"], /* CJK Ideograph */ + ["\u7B86", "\u7B86"], /* CJK Ideograph */ + ["\u7B87", "\u7B87"], /* CJK Ideograph */ + ["\u7B88", "\u7B88"], /* CJK Ideograph */ + ["\u7B89", "\u7B89"], /* CJK Ideograph */ + ["\u7B8A", "\u7B8A"], /* CJK Ideograph */ + ["\u7B8B", "\u7B8B"], /* CJK Ideograph */ + ["\u7B8C", "\u7B8C"], /* CJK Ideograph */ + ["\u7B8D", "\u7B8D"], /* CJK Ideograph */ + ["\u7B8E", "\u7B8E"], /* CJK Ideograph */ + ["\u7B8F", "\u7B8F"], /* CJK Ideograph */ + ["\u7B90", "\u7B90"], /* CJK Ideograph */ + ["\u7B91", "\u7B91"], /* CJK Ideograph */ + ["\u7B92", "\u7B92"], /* CJK Ideograph */ + ["\u7B93", "\u7B93"], /* CJK Ideograph */ + ["\u7B94", "\u7B94"], /* CJK Ideograph */ + ["\u7B95", "\u7B95"], /* CJK Ideograph */ + ["\u7B96", "\u7B96"], /* CJK Ideograph */ + ["\u7B97", "\u7B97"], /* CJK Ideograph */ + ["\u7B98", "\u7B98"], /* CJK Ideograph */ + ["\u7B99", "\u7B99"], /* CJK Ideograph */ + ["\u7B9A", "\u7B9A"], /* CJK Ideograph */ + ["\u7B9B", "\u7B9B"], /* CJK Ideograph */ + ["\u7B9C", "\u7B9C"], /* CJK Ideograph */ + ["\u7B9D", "\u7B9D"], /* CJK Ideograph */ + ["\u7B9E", "\u7B9E"], /* CJK Ideograph */ + ["\u7B9F", "\u7B9F"], /* CJK Ideograph */ + ["\u7BA0", "\u7BA0"], /* CJK Ideograph */ + ["\u7BA1", "\u7BA1"], /* CJK Ideograph */ + ["\u7BA2", "\u7BA2"], /* CJK Ideograph */ + ["\u7BA3", "\u7BA3"], /* CJK Ideograph */ + ["\u7BA4", "\u7BA4"], /* CJK Ideograph */ + ["\u7BA5", "\u7BA5"], /* CJK Ideograph */ + ["\u7BA6", "\u7BA6"], /* CJK Ideograph */ + ["\u7BA7", "\u7BA7"], /* CJK Ideograph */ + ["\u7BA8", "\u7BA8"], /* CJK Ideograph */ + ["\u7BA9", "\u7BA9"], /* CJK Ideograph */ + ["\u7BAA", "\u7BAA"], /* CJK Ideograph */ + ["\u7BAB", "\u7BAB"], /* CJK Ideograph */ + ["\u7BAC", "\u7BAC"], /* CJK Ideograph */ + ["\u7BAD", "\u7BAD"], /* CJK Ideograph */ + ["\u7BAE", "\u7BAE"], /* CJK Ideograph */ + ["\u7BAF", "\u7BAF"], /* CJK Ideograph */ + ["\u7BB0", "\u7BB0"], /* CJK Ideograph */ + ["\u7BB1", "\u7BB1"], /* CJK Ideograph */ + ["\u7BB2", "\u7BB2"], /* CJK Ideograph */ + ["\u7BB3", "\u7BB3"], /* CJK Ideograph */ + ["\u7BB4", "\u7BB4"], /* CJK Ideograph */ + ["\u7BB5", "\u7BB5"], /* CJK Ideograph */ + ["\u7BB6", "\u7BB6"], /* CJK Ideograph */ + ["\u7BB7", "\u7BB7"], /* CJK Ideograph */ + ["\u7BB8", "\u7BB8"], /* CJK Ideograph */ + ["\u7BB9", "\u7BB9"], /* CJK Ideograph */ + ["\u7BBA", "\u7BBA"], /* CJK Ideograph */ + ["\u7BBB", "\u7BBB"], /* CJK Ideograph */ + ["\u7BBC", "\u7BBC"], /* CJK Ideograph */ + ["\u7BBD", "\u7BBD"], /* CJK Ideograph */ + ["\u7BBE", "\u7BBE"], /* CJK Ideograph */ + ["\u7BBF", "\u7BBF"], /* CJK Ideograph */ + ["\u7BC0", "\u7BC0"], /* CJK Ideograph */ + ["\u7BC1", "\u7BC1"], /* CJK Ideograph */ + ["\u7BC2", "\u7BC2"], /* CJK Ideograph */ + ["\u7BC3", "\u7BC3"], /* CJK Ideograph */ + ["\u7BC4", "\u7BC4"], /* CJK Ideograph */ + ["\u7BC5", "\u7BC5"], /* CJK Ideograph */ + ["\u7BC6", "\u7BC6"], /* CJK Ideograph */ + ["\u7BC7", "\u7BC7"], /* CJK Ideograph */ + ["\u7BC8", "\u7BC8"], /* CJK Ideograph */ + ["\u7BC9", "\u7BC9"], /* CJK Ideograph */ + ["\u7BCA", "\u7BCA"], /* CJK Ideograph */ + ["\u7BCB", "\u7BCB"], /* CJK Ideograph */ + ["\u7BCC", "\u7BCC"], /* CJK Ideograph */ + ["\u7BCD", "\u7BCD"], /* CJK Ideograph */ + ["\u7BCE", "\u7BCE"], /* CJK Ideograph */ + ["\u7BCF", "\u7BCF"], /* CJK Ideograph */ + ["\u7BD0", "\u7BD0"], /* CJK Ideograph */ + ["\u7BD1", "\u7BD1"], /* CJK Ideograph */ + ["\u7BD2", "\u7BD2"], /* CJK Ideograph */ + ["\u7BD3", "\u7BD3"], /* CJK Ideograph */ + ["\u7BD4", "\u7BD4"], /* CJK Ideograph */ + ["\u7BD5", "\u7BD5"], /* CJK Ideograph */ + ["\u7BD6", "\u7BD6"], /* CJK Ideograph */ + ["\u7BD7", "\u7BD7"], /* CJK Ideograph */ + ["\u7BD8", "\u7BD8"], /* CJK Ideograph */ + ["\u7BD9", "\u7BD9"], /* CJK Ideograph */ + ["\u7BDA", "\u7BDA"], /* CJK Ideograph */ + ["\u7BDB", "\u7BDB"], /* CJK Ideograph */ + ["\u7BDC", "\u7BDC"], /* CJK Ideograph */ + ["\u7BDD", "\u7BDD"], /* CJK Ideograph */ + ["\u7BDE", "\u7BDE"], /* CJK Ideograph */ + ["\u7BDF", "\u7BDF"], /* CJK Ideograph */ + ["\u7BE0", "\u7BE0"], /* CJK Ideograph */ + ["\u7BE1", "\u7BE1"], /* CJK Ideograph */ + ["\u7BE2", "\u7BE2"], /* CJK Ideograph */ + ["\u7BE3", "\u7BE3"], /* CJK Ideograph */ + ["\u7BE4", "\u7BE4"], /* CJK Ideograph */ + ["\u7BE5", "\u7BE5"], /* CJK Ideograph */ + ["\u7BE6", "\u7BE6"], /* CJK Ideograph */ + ["\u7BE7", "\u7BE7"], /* CJK Ideograph */ + ["\u7BE8", "\u7BE8"], /* CJK Ideograph */ + ["\u7BE9", "\u7BE9"], /* CJK Ideograph */ + ["\u7BEA", "\u7BEA"], /* CJK Ideograph */ + ["\u7BEB", "\u7BEB"], /* CJK Ideograph */ + ["\u7BEC", "\u7BEC"], /* CJK Ideograph */ + ["\u7BED", "\u7BED"], /* CJK Ideograph */ + ["\u7BEE", "\u7BEE"], /* CJK Ideograph */ + ["\u7BEF", "\u7BEF"], /* CJK Ideograph */ + ["\u7BF0", "\u7BF0"], /* CJK Ideograph */ + ["\u7BF1", "\u7BF1"], /* CJK Ideograph */ + ["\u7BF2", "\u7BF2"], /* CJK Ideograph */ + ["\u7BF3", "\u7BF3"], /* CJK Ideograph */ + ["\u7BF4", "\u7BF4"], /* CJK Ideograph */ + ["\u7BF5", "\u7BF5"], /* CJK Ideograph */ + ["\u7BF6", "\u7BF6"], /* CJK Ideograph */ + ["\u7BF7", "\u7BF7"], /* CJK Ideograph */ + ["\u7BF8", "\u7BF8"], /* CJK Ideograph */ + ["\u7BF9", "\u7BF9"], /* CJK Ideograph */ + ["\u7BFA", "\u7BFA"], /* CJK Ideograph */ + ["\u7BFB", "\u7BFB"], /* CJK Ideograph */ + ["\u7BFC", "\u7BFC"], /* CJK Ideograph */ + ["\u7BFD", "\u7BFD"], /* CJK Ideograph */ + ["\u7BFE", "\u7BFE"], /* CJK Ideograph */ + ["\u7BFF", "\u7BFF"], /* CJK Ideograph */ + ["\u7C00", "\u7C00"], /* CJK Ideograph */ + ["\u7C01", "\u7C01"], /* CJK Ideograph */ + ["\u7C02", "\u7C02"], /* CJK Ideograph */ + ["\u7C03", "\u7C03"], /* CJK Ideograph */ + ["\u7C04", "\u7C04"], /* CJK Ideograph */ + ["\u7C05", "\u7C05"], /* CJK Ideograph */ + ["\u7C06", "\u7C06"], /* CJK Ideograph */ + ["\u7C07", "\u7C07"], /* CJK Ideograph */ + ["\u7C08", "\u7C08"], /* CJK Ideograph */ + ["\u7C09", "\u7C09"], /* CJK Ideograph */ + ["\u7C0A", "\u7C0A"], /* CJK Ideograph */ + ["\u7C0B", "\u7C0B"], /* CJK Ideograph */ + ["\u7C0C", "\u7C0C"], /* CJK Ideograph */ + ["\u7C0D", "\u7C0D"], /* CJK Ideograph */ + ["\u7C0E", "\u7C0E"], /* CJK Ideograph */ + ["\u7C0F", "\u7C0F"], /* CJK Ideograph */ + ["\u7C10", "\u7C10"], /* CJK Ideograph */ + ["\u7C11", "\u7C11"], /* CJK Ideograph */ + ["\u7C12", "\u7C12"], /* CJK Ideograph */ + ["\u7C13", "\u7C13"], /* CJK Ideograph */ + ["\u7C14", "\u7C14"], /* CJK Ideograph */ + ["\u7C15", "\u7C15"], /* CJK Ideograph */ + ["\u7C16", "\u7C16"], /* CJK Ideograph */ + ["\u7C17", "\u7C17"], /* CJK Ideograph */ + ["\u7C18", "\u7C18"], /* CJK Ideograph */ + ["\u7C19", "\u7C19"], /* CJK Ideograph */ + ["\u7C1A", "\u7C1A"], /* CJK Ideograph */ + ["\u7C1B", "\u7C1B"], /* CJK Ideograph */ + ["\u7C1C", "\u7C1C"], /* CJK Ideograph */ + ["\u7C1D", "\u7C1D"], /* CJK Ideograph */ + ["\u7C1E", "\u7C1E"], /* CJK Ideograph */ + ["\u7C1F", "\u7C1F"], /* CJK Ideograph */ + ["\u7C20", "\u7C20"], /* CJK Ideograph */ + ["\u7C21", "\u7C21"], /* CJK Ideograph */ + ["\u7C22", "\u7C22"], /* CJK Ideograph */ + ["\u7C23", "\u7C23"], /* CJK Ideograph */ + ["\u7C24", "\u7C24"], /* CJK Ideograph */ + ["\u7C25", "\u7C25"], /* CJK Ideograph */ + ["\u7C26", "\u7C26"], /* CJK Ideograph */ + ["\u7C27", "\u7C27"], /* CJK Ideograph */ + ["\u7C28", "\u7C28"], /* CJK Ideograph */ + ["\u7C29", "\u7C29"], /* CJK Ideograph */ + ["\u7C2A", "\u7C2A"], /* CJK Ideograph */ + ["\u7C2B", "\u7C2B"], /* CJK Ideograph */ + ["\u7C2C", "\u7C2C"], /* CJK Ideograph */ + ["\u7C2D", "\u7C2D"], /* CJK Ideograph */ + ["\u7C2E", "\u7C2E"], /* CJK Ideograph */ + ["\u7C2F", "\u7C2F"], /* CJK Ideograph */ + ["\u7C30", "\u7C30"], /* CJK Ideograph */ + ["\u7C31", "\u7C31"], /* CJK Ideograph */ + ["\u7C32", "\u7C32"], /* CJK Ideograph */ + ["\u7C33", "\u7C33"], /* CJK Ideograph */ + ["\u7C34", "\u7C34"], /* CJK Ideograph */ + ["\u7C35", "\u7C35"], /* CJK Ideograph */ + ["\u7C36", "\u7C36"], /* CJK Ideograph */ + ["\u7C37", "\u7C37"], /* CJK Ideograph */ + ["\u7C38", "\u7C38"], /* CJK Ideograph */ + ["\u7C39", "\u7C39"], /* CJK Ideograph */ + ["\u7C3A", "\u7C3A"], /* CJK Ideograph */ + ["\u7C3B", "\u7C3B"], /* CJK Ideograph */ + ["\u7C3C", "\u7C3C"], /* CJK Ideograph */ + ["\u7C3D", "\u7C3D"], /* CJK Ideograph */ + ["\u7C3E", "\u7C3E"], /* CJK Ideograph */ + ["\u7C3F", "\u7C3F"], /* CJK Ideograph */ + ["\u7C40", "\u7C40"], /* CJK Ideograph */ + ["\u7C41", "\u7C41"], /* CJK Ideograph */ + ["\u7C42", "\u7C42"], /* CJK Ideograph */ + ["\u7C43", "\u7C43"], /* CJK Ideograph */ + ["\u7C44", "\u7C44"], /* CJK Ideograph */ + ["\u7C45", "\u7C45"], /* CJK Ideograph */ + ["\u7C46", "\u7C46"], /* CJK Ideograph */ + ["\u7C47", "\u7C47"], /* CJK Ideograph */ + ["\u7C48", "\u7C48"], /* CJK Ideograph */ + ["\u7C49", "\u7C49"], /* CJK Ideograph */ + ["\u7C4A", "\u7C4A"], /* CJK Ideograph */ + ["\u7C4B", "\u7C4B"], /* CJK Ideograph */ + ["\u7C4C", "\u7C4C"], /* CJK Ideograph */ + ["\u7C4D", "\u7C4D"], /* CJK Ideograph */ + ["\u7C4E", "\u7C4E"], /* CJK Ideograph */ + ["\u7C4F", "\u7C4F"], /* CJK Ideograph */ + ["\u7C50", "\u7C50"], /* CJK Ideograph */ + ["\u7C51", "\u7C51"], /* CJK Ideograph */ + ["\u7C52", "\u7C52"], /* CJK Ideograph */ + ["\u7C53", "\u7C53"], /* CJK Ideograph */ + ["\u7C54", "\u7C54"], /* CJK Ideograph */ + ["\u7C55", "\u7C55"], /* CJK Ideograph */ + ["\u7C56", "\u7C56"], /* CJK Ideograph */ + ["\u7C57", "\u7C57"], /* CJK Ideograph */ + ["\u7C58", "\u7C58"], /* CJK Ideograph */ + ["\u7C59", "\u7C59"], /* CJK Ideograph */ + ["\u7C5A", "\u7C5A"], /* CJK Ideograph */ + ["\u7C5B", "\u7C5B"], /* CJK Ideograph */ + ["\u7C5C", "\u7C5C"], /* CJK Ideograph */ + ["\u7C5D", "\u7C5D"], /* CJK Ideograph */ + ["\u7C5E", "\u7C5E"], /* CJK Ideograph */ + ["\u7C5F", "\u7C5F"], /* CJK Ideograph */ + ["\u7C60", "\u7C60"], /* CJK Ideograph */ + ["\u7C61", "\u7C61"], /* CJK Ideograph */ + ["\u7C62", "\u7C62"], /* CJK Ideograph */ + ["\u7C63", "\u7C63"], /* CJK Ideograph */ + ["\u7C64", "\u7C64"], /* CJK Ideograph */ + ["\u7C65", "\u7C65"], /* CJK Ideograph */ + ["\u7C66", "\u7C66"], /* CJK Ideograph */ + ["\u7C67", "\u7C67"], /* CJK Ideograph */ + ["\u7C68", "\u7C68"], /* CJK Ideograph */ + ["\u7C69", "\u7C69"], /* CJK Ideograph */ + ["\u7C6A", "\u7C6A"], /* CJK Ideograph */ + ["\u7C6B", "\u7C6B"], /* CJK Ideograph */ + ["\u7C6C", "\u7C6C"], /* CJK Ideograph */ + ["\u7C6D", "\u7C6D"], /* CJK Ideograph */ + ["\u7C6E", "\u7C6E"], /* CJK Ideograph */ + ["\u7C6F", "\u7C6F"], /* CJK Ideograph */ + ["\u7C70", "\u7C70"], /* CJK Ideograph */ + ["\u7C71", "\u7C71"], /* CJK Ideograph */ + ["\u7C72", "\u7C72"], /* CJK Ideograph */ + ["\u7C73", "\u7C73"], /* CJK Ideograph */ + ["\u7C74", "\u7C74"], /* CJK Ideograph */ + ["\u7C75", "\u7C75"], /* CJK Ideograph */ + ["\u7C76", "\u7C76"], /* CJK Ideograph */ + ["\u7C77", "\u7C77"], /* CJK Ideograph */ + ["\u7C78", "\u7C78"], /* CJK Ideograph */ + ["\u7C79", "\u7C79"], /* CJK Ideograph */ + ["\u7C7A", "\u7C7A"], /* CJK Ideograph */ + ["\u7C7B", "\u7C7B"], /* CJK Ideograph */ + ["\u7C7C", "\u7C7C"], /* CJK Ideograph */ + ["\u7C7D", "\u7C7D"], /* CJK Ideograph */ + ["\u7C7E", "\u7C7E"], /* CJK Ideograph */ + ["\u7C7F", "\u7C7F"], /* CJK Ideograph */ + ["\u7C80", "\u7C80"], /* CJK Ideograph */ + ["\u7C81", "\u7C81"], /* CJK Ideograph */ + ["\u7C82", "\u7C82"], /* CJK Ideograph */ + ["\u7C83", "\u7C83"], /* CJK Ideograph */ + ["\u7C84", "\u7C84"], /* CJK Ideograph */ + ["\u7C85", "\u7C85"], /* CJK Ideograph */ + ["\u7C86", "\u7C86"], /* CJK Ideograph */ + ["\u7C87", "\u7C87"], /* CJK Ideograph */ + ["\u7C88", "\u7C88"], /* CJK Ideograph */ + ["\u7C89", "\u7C89"], /* CJK Ideograph */ + ["\u7C8A", "\u7C8A"], /* CJK Ideograph */ + ["\u7C8B", "\u7C8B"], /* CJK Ideograph */ + ["\u7C8C", "\u7C8C"], /* CJK Ideograph */ + ["\u7C8D", "\u7C8D"], /* CJK Ideograph */ + ["\u7C8E", "\u7C8E"], /* CJK Ideograph */ + ["\u7C8F", "\u7C8F"], /* CJK Ideograph */ + ["\u7C90", "\u7C90"], /* CJK Ideograph */ + ["\u7C91", "\u7C91"], /* CJK Ideograph */ + ["\u7C92", "\u7C92"], /* CJK Ideograph */ + ["\u7C93", "\u7C93"], /* CJK Ideograph */ + ["\u7C94", "\u7C94"], /* CJK Ideograph */ + ["\u7C95", "\u7C95"], /* CJK Ideograph */ + ["\u7C96", "\u7C96"], /* CJK Ideograph */ + ["\u7C97", "\u7C97"], /* CJK Ideograph */ + ["\u7C98", "\u7C98"], /* CJK Ideograph */ + ["\u7C99", "\u7C99"], /* CJK Ideograph */ + ["\u7C9A", "\u7C9A"], /* CJK Ideograph */ + ["\u7C9B", "\u7C9B"], /* CJK Ideograph */ + ["\u7C9C", "\u7C9C"], /* CJK Ideograph */ + ["\u7C9D", "\u7C9D"], /* CJK Ideograph */ + ["\u7C9E", "\u7C9E"], /* CJK Ideograph */ + ["\u7C9F", "\u7C9F"], /* CJK Ideograph */ + ["\u7CA0", "\u7CA0"], /* CJK Ideograph */ + ["\u7CA1", "\u7CA1"], /* CJK Ideograph */ + ["\u7CA2", "\u7CA2"], /* CJK Ideograph */ + ["\u7CA3", "\u7CA3"], /* CJK Ideograph */ + ["\u7CA4", "\u7CA4"], /* CJK Ideograph */ + ["\u7CA5", "\u7CA5"], /* CJK Ideograph */ + ["\u7CA6", "\u7CA6"], /* CJK Ideograph */ + ["\u7CA7", "\u7CA7"], /* CJK Ideograph */ + ["\u7CA8", "\u7CA8"], /* CJK Ideograph */ + ["\u7CA9", "\u7CA9"], /* CJK Ideograph */ + ["\u7CAA", "\u7CAA"], /* CJK Ideograph */ + ["\u7CAB", "\u7CAB"], /* CJK Ideograph */ + ["\u7CAC", "\u7CAC"], /* CJK Ideograph */ + ["\u7CAD", "\u7CAD"], /* CJK Ideograph */ + ["\u7CAE", "\u7CAE"], /* CJK Ideograph */ + ["\u7CAF", "\u7CAF"], /* CJK Ideograph */ + ["\u7CB0", "\u7CB0"], /* CJK Ideograph */ + ["\u7CB1", "\u7CB1"], /* CJK Ideograph */ + ["\u7CB2", "\u7CB2"], /* CJK Ideograph */ + ["\u7CB3", "\u7CB3"], /* CJK Ideograph */ + ["\u7CB4", "\u7CB4"], /* CJK Ideograph */ + ["\u7CB5", "\u7CB5"], /* CJK Ideograph */ + ["\u7CB6", "\u7CB6"], /* CJK Ideograph */ + ["\u7CB7", "\u7CB7"], /* CJK Ideograph */ + ["\u7CB8", "\u7CB8"], /* CJK Ideograph */ + ["\u7CB9", "\u7CB9"], /* CJK Ideograph */ + ["\u7CBA", "\u7CBA"], /* CJK Ideograph */ + ["\u7CBB", "\u7CBB"], /* CJK Ideograph */ + ["\u7CBC", "\u7CBC"], /* CJK Ideograph */ + ["\u7CBD", "\u7CBD"], /* CJK Ideograph */ + ["\u7CBE", "\u7CBE"], /* CJK Ideograph */ + ["\u7CBF", "\u7CBF"], /* CJK Ideograph */ + ["\u7CC0", "\u7CC0"], /* CJK Ideograph */ + ["\u7CC1", "\u7CC1"], /* CJK Ideograph */ + ["\u7CC2", "\u7CC2"], /* CJK Ideograph */ + ["\u7CC3", "\u7CC3"], /* CJK Ideograph */ + ["\u7CC4", "\u7CC4"], /* CJK Ideograph */ + ["\u7CC5", "\u7CC5"], /* CJK Ideograph */ + ["\u7CC6", "\u7CC6"], /* CJK Ideograph */ + ["\u7CC7", "\u7CC7"], /* CJK Ideograph */ + ["\u7CC8", "\u7CC8"], /* CJK Ideograph */ + ["\u7CC9", "\u7CC9"], /* CJK Ideograph */ + ["\u7CCA", "\u7CCA"], /* CJK Ideograph */ + ["\u7CCB", "\u7CCB"], /* CJK Ideograph */ + ["\u7CCC", "\u7CCC"], /* CJK Ideograph */ + ["\u7CCD", "\u7CCD"], /* CJK Ideograph */ + ["\u7CCE", "\u7CCE"], /* CJK Ideograph */ + ["\u7CCF", "\u7CCF"], /* CJK Ideograph */ + ["\u7CD0", "\u7CD0"], /* CJK Ideograph */ + ["\u7CD1", "\u7CD1"], /* CJK Ideograph */ + ["\u7CD2", "\u7CD2"], /* CJK Ideograph */ + ["\u7CD3", "\u7CD3"], /* CJK Ideograph */ + ["\u7CD4", "\u7CD4"], /* CJK Ideograph */ + ["\u7CD5", "\u7CD5"], /* CJK Ideograph */ + ["\u7CD6", "\u7CD6"], /* CJK Ideograph */ + ["\u7CD7", "\u7CD7"], /* CJK Ideograph */ + ["\u7CD8", "\u7CD8"], /* CJK Ideograph */ + ["\u7CD9", "\u7CD9"], /* CJK Ideograph */ + ["\u7CDA", "\u7CDA"], /* CJK Ideograph */ + ["\u7CDB", "\u7CDB"], /* CJK Ideograph */ + ["\u7CDC", "\u7CDC"], /* CJK Ideograph */ + ["\u7CDD", "\u7CDD"], /* CJK Ideograph */ + ["\u7CDE", "\u7CDE"], /* CJK Ideograph */ + ["\u7CDF", "\u7CDF"], /* CJK Ideograph */ + ["\u7CE0", "\u7CE0"], /* CJK Ideograph */ + ["\u7CE1", "\u7CE1"], /* CJK Ideograph */ + ["\u7CE2", "\u7CE2"], /* CJK Ideograph */ + ["\u7CE3", "\u7CE3"], /* CJK Ideograph */ + ["\u7CE4", "\u7CE4"], /* CJK Ideograph */ + ["\u7CE5", "\u7CE5"], /* CJK Ideograph */ + ["\u7CE6", "\u7CE6"], /* CJK Ideograph */ + ["\u7CE7", "\u7CE7"], /* CJK Ideograph */ + ["\u7CE8", "\u7CE8"], /* CJK Ideograph */ + ["\u7CE9", "\u7CE9"], /* CJK Ideograph */ + ["\u7CEA", "\u7CEA"], /* CJK Ideograph */ + ["\u7CEB", "\u7CEB"], /* CJK Ideograph */ + ["\u7CEC", "\u7CEC"], /* CJK Ideograph */ + ["\u7CED", "\u7CED"], /* CJK Ideograph */ + ["\u7CEE", "\u7CEE"], /* CJK Ideograph */ + ["\u7CEF", "\u7CEF"], /* CJK Ideograph */ + ["\u7CF0", "\u7CF0"], /* CJK Ideograph */ + ["\u7CF1", "\u7CF1"], /* CJK Ideograph */ + ["\u7CF2", "\u7CF2"], /* CJK Ideograph */ + ["\u7CF3", "\u7CF3"], /* CJK Ideograph */ + ["\u7CF4", "\u7CF4"], /* CJK Ideograph */ + ["\u7CF5", "\u7CF5"], /* CJK Ideograph */ + ["\u7CF6", "\u7CF6"], /* CJK Ideograph */ + ["\u7CF7", "\u7CF7"], /* CJK Ideograph */ + ["\u7CF8", "\u7CF8"], /* CJK Ideograph */ + ["\u7CF9", "\u7CF9"], /* CJK Ideograph */ + ["\u7CFA", "\u7CFA"], /* CJK Ideograph */ + ["\u7CFB", "\u7CFB"], /* CJK Ideograph */ + ["\u7CFC", "\u7CFC"], /* CJK Ideograph */ + ["\u7CFD", "\u7CFD"], /* CJK Ideograph */ + ["\u7CFE", "\u7CFE"], /* CJK Ideograph */ + ["\u7CFF", "\u7CFF"], /* CJK Ideograph */ + ["\u7D00", "\u7D00"], /* CJK Ideograph */ + ["\u7D01", "\u7D01"], /* CJK Ideograph */ + ["\u7D02", "\u7D02"], /* CJK Ideograph */ + ["\u7D03", "\u7D03"], /* CJK Ideograph */ + ["\u7D04", "\u7D04"], /* CJK Ideograph */ + ["\u7D05", "\u7D05"], /* CJK Ideograph */ + ["\u7D06", "\u7D06"], /* CJK Ideograph */ + ["\u7D07", "\u7D07"], /* CJK Ideograph */ + ["\u7D08", "\u7D08"], /* CJK Ideograph */ + ["\u7D09", "\u7D09"], /* CJK Ideograph */ + ["\u7D0A", "\u7D0A"], /* CJK Ideograph */ + ["\u7D0B", "\u7D0B"], /* CJK Ideograph */ + ["\u7D0C", "\u7D0C"], /* CJK Ideograph */ + ["\u7D0D", "\u7D0D"], /* CJK Ideograph */ + ["\u7D0E", "\u7D0E"], /* CJK Ideograph */ + ["\u7D0F", "\u7D0F"], /* CJK Ideograph */ + ["\u7D10", "\u7D10"], /* CJK Ideograph */ + ["\u7D11", "\u7D11"], /* CJK Ideograph */ + ["\u7D12", "\u7D12"], /* CJK Ideograph */ + ["\u7D13", "\u7D13"], /* CJK Ideograph */ + ["\u7D14", "\u7D14"], /* CJK Ideograph */ + ["\u7D15", "\u7D15"], /* CJK Ideograph */ + ["\u7D16", "\u7D16"], /* CJK Ideograph */ + ["\u7D17", "\u7D17"], /* CJK Ideograph */ + ["\u7D18", "\u7D18"], /* CJK Ideograph */ + ["\u7D19", "\u7D19"], /* CJK Ideograph */ + ["\u7D1A", "\u7D1A"], /* CJK Ideograph */ + ["\u7D1B", "\u7D1B"], /* CJK Ideograph */ + ["\u7D1C", "\u7D1C"], /* CJK Ideograph */ + ["\u7D1D", "\u7D1D"], /* CJK Ideograph */ + ["\u7D1E", "\u7D1E"], /* CJK Ideograph */ + ["\u7D1F", "\u7D1F"], /* CJK Ideograph */ + ["\u7D20", "\u7D20"], /* CJK Ideograph */ + ["\u7D21", "\u7D21"], /* CJK Ideograph */ + ["\u7D22", "\u7D22"], /* CJK Ideograph */ + ["\u7D23", "\u7D23"], /* CJK Ideograph */ + ["\u7D24", "\u7D24"], /* CJK Ideograph */ + ["\u7D25", "\u7D25"], /* CJK Ideograph */ + ["\u7D26", "\u7D26"], /* CJK Ideograph */ + ["\u7D27", "\u7D27"], /* CJK Ideograph */ + ["\u7D28", "\u7D28"], /* CJK Ideograph */ + ["\u7D29", "\u7D29"], /* CJK Ideograph */ + ["\u7D2A", "\u7D2A"], /* CJK Ideograph */ + ["\u7D2B", "\u7D2B"], /* CJK Ideograph */ + ["\u7D2C", "\u7D2C"], /* CJK Ideograph */ + ["\u7D2D", "\u7D2D"], /* CJK Ideograph */ + ["\u7D2E", "\u7D2E"], /* CJK Ideograph */ + ["\u7D2F", "\u7D2F"], /* CJK Ideograph */ + ["\u7D30", "\u7D30"], /* CJK Ideograph */ + ["\u7D31", "\u7D31"], /* CJK Ideograph */ + ["\u7D32", "\u7D32"], /* CJK Ideograph */ + ["\u7D33", "\u7D33"], /* CJK Ideograph */ + ["\u7D34", "\u7D34"], /* CJK Ideograph */ + ["\u7D35", "\u7D35"], /* CJK Ideograph */ + ["\u7D36", "\u7D36"], /* CJK Ideograph */ + ["\u7D37", "\u7D37"], /* CJK Ideograph */ + ["\u7D38", "\u7D38"], /* CJK Ideograph */ + ["\u7D39", "\u7D39"], /* CJK Ideograph */ + ["\u7D3A", "\u7D3A"], /* CJK Ideograph */ + ["\u7D3B", "\u7D3B"], /* CJK Ideograph */ + ["\u7D3C", "\u7D3C"], /* CJK Ideograph */ + ["\u7D3D", "\u7D3D"], /* CJK Ideograph */ + ["\u7D3E", "\u7D3E"], /* CJK Ideograph */ + ["\u7D3F", "\u7D3F"], /* CJK Ideograph */ + ["\u7D40", "\u7D40"], /* CJK Ideograph */ + ["\u7D41", "\u7D41"], /* CJK Ideograph */ + ["\u7D42", "\u7D42"], /* CJK Ideograph */ + ["\u7D43", "\u7D43"], /* CJK Ideograph */ + ["\u7D44", "\u7D44"], /* CJK Ideograph */ + ["\u7D45", "\u7D45"], /* CJK Ideograph */ + ["\u7D46", "\u7D46"], /* CJK Ideograph */ + ["\u7D47", "\u7D47"], /* CJK Ideograph */ + ["\u7D48", "\u7D48"], /* CJK Ideograph */ + ["\u7D49", "\u7D49"], /* CJK Ideograph */ + ["\u7D4A", "\u7D4A"], /* CJK Ideograph */ + ["\u7D4B", "\u7D4B"], /* CJK Ideograph */ + ["\u7D4C", "\u7D4C"], /* CJK Ideograph */ + ["\u7D4D", "\u7D4D"], /* CJK Ideograph */ + ["\u7D4E", "\u7D4E"], /* CJK Ideograph */ + ["\u7D4F", "\u7D4F"], /* CJK Ideograph */ + ["\u7D50", "\u7D50"], /* CJK Ideograph */ + ["\u7D51", "\u7D51"], /* CJK Ideograph */ + ["\u7D52", "\u7D52"], /* CJK Ideograph */ + ["\u7D53", "\u7D53"], /* CJK Ideograph */ + ["\u7D54", "\u7D54"], /* CJK Ideograph */ + ["\u7D55", "\u7D55"], /* CJK Ideograph */ + ["\u7D56", "\u7D56"], /* CJK Ideograph */ + ["\u7D57", "\u7D57"], /* CJK Ideograph */ + ["\u7D58", "\u7D58"], /* CJK Ideograph */ + ["\u7D59", "\u7D59"], /* CJK Ideograph */ + ["\u7D5A", "\u7D5A"], /* CJK Ideograph */ + ["\u7D5B", "\u7D5B"], /* CJK Ideograph */ + ["\u7D5C", "\u7D5C"], /* CJK Ideograph */ + ["\u7D5D", "\u7D5D"], /* CJK Ideograph */ + ["\u7D5E", "\u7D5E"], /* CJK Ideograph */ + ["\u7D5F", "\u7D5F"], /* CJK Ideograph */ + ["\u7D60", "\u7D60"], /* CJK Ideograph */ + ["\u7D61", "\u7D61"], /* CJK Ideograph */ + ["\u7D62", "\u7D62"], /* CJK Ideograph */ + ["\u7D63", "\u7D63"], /* CJK Ideograph */ + ["\u7D64", "\u7D64"], /* CJK Ideograph */ + ["\u7D65", "\u7D65"], /* CJK Ideograph */ + ["\u7D66", "\u7D66"], /* CJK Ideograph */ + ["\u7D67", "\u7D67"], /* CJK Ideograph */ + ["\u7D68", "\u7D68"], /* CJK Ideograph */ + ["\u7D69", "\u7D69"], /* CJK Ideograph */ + ["\u7D6A", "\u7D6A"], /* CJK Ideograph */ + ["\u7D6B", "\u7D6B"], /* CJK Ideograph */ + ["\u7D6C", "\u7D6C"], /* CJK Ideograph */ + ["\u7D6D", "\u7D6D"], /* CJK Ideograph */ + ["\u7D6E", "\u7D6E"], /* CJK Ideograph */ + ["\u7D6F", "\u7D6F"], /* CJK Ideograph */ + ["\u7D70", "\u7D70"], /* CJK Ideograph */ + ["\u7D71", "\u7D71"], /* CJK Ideograph */ + ["\u7D72", "\u7D72"], /* CJK Ideograph */ + ["\u7D73", "\u7D73"], /* CJK Ideograph */ + ["\u7D74", "\u7D74"], /* CJK Ideograph */ + ["\u7D75", "\u7D75"], /* CJK Ideograph */ + ["\u7D76", "\u7D76"], /* CJK Ideograph */ + ["\u7D77", "\u7D77"], /* CJK Ideograph */ + ["\u7D78", "\u7D78"], /* CJK Ideograph */ + ["\u7D79", "\u7D79"], /* CJK Ideograph */ + ["\u7D7A", "\u7D7A"], /* CJK Ideograph */ + ["\u7D7B", "\u7D7B"], /* CJK Ideograph */ + ["\u7D7C", "\u7D7C"], /* CJK Ideograph */ + ["\u7D7D", "\u7D7D"], /* CJK Ideograph */ + ["\u7D7E", "\u7D7E"], /* CJK Ideograph */ + ["\u7D7F", "\u7D7F"], /* CJK Ideograph */ + ["\u7D80", "\u7D80"], /* CJK Ideograph */ + ["\u7D81", "\u7D81"], /* CJK Ideograph */ + ["\u7D82", "\u7D82"], /* CJK Ideograph */ + ["\u7D83", "\u7D83"], /* CJK Ideograph */ + ["\u7D84", "\u7D84"], /* CJK Ideograph */ + ["\u7D85", "\u7D85"], /* CJK Ideograph */ + ["\u7D86", "\u7D86"], /* CJK Ideograph */ + ["\u7D87", "\u7D87"], /* CJK Ideograph */ + ["\u7D88", "\u7D88"], /* CJK Ideograph */ + ["\u7D89", "\u7D89"], /* CJK Ideograph */ + ["\u7D8A", "\u7D8A"], /* CJK Ideograph */ + ["\u7D8B", "\u7D8B"], /* CJK Ideograph */ + ["\u7D8C", "\u7D8C"], /* CJK Ideograph */ + ["\u7D8D", "\u7D8D"], /* CJK Ideograph */ + ["\u7D8E", "\u7D8E"], /* CJK Ideograph */ + ["\u7D8F", "\u7D8F"], /* CJK Ideograph */ + ["\u7D90", "\u7D90"], /* CJK Ideograph */ + ["\u7D91", "\u7D91"], /* CJK Ideograph */ + ["\u7D92", "\u7D92"], /* CJK Ideograph */ + ["\u7D93", "\u7D93"], /* CJK Ideograph */ + ["\u7D94", "\u7D94"], /* CJK Ideograph */ + ["\u7D95", "\u7D95"], /* CJK Ideograph */ + ["\u7D96", "\u7D96"], /* CJK Ideograph */ + ["\u7D97", "\u7D97"], /* CJK Ideograph */ + ["\u7D98", "\u7D98"], /* CJK Ideograph */ + ["\u7D99", "\u7D99"], /* CJK Ideograph */ + ["\u7D9A", "\u7D9A"], /* CJK Ideograph */ + ["\u7D9B", "\u7D9B"], /* CJK Ideograph */ + ["\u7D9C", "\u7D9C"], /* CJK Ideograph */ + ["\u7D9D", "\u7D9D"], /* CJK Ideograph */ + ["\u7D9E", "\u7D9E"], /* CJK Ideograph */ + ["\u7D9F", "\u7D9F"], /* CJK Ideograph */ + ["\u7DA0", "\u7DA0"], /* CJK Ideograph */ + ["\u7DA1", "\u7DA1"], /* CJK Ideograph */ + ["\u7DA2", "\u7DA2"], /* CJK Ideograph */ + ["\u7DA3", "\u7DA3"], /* CJK Ideograph */ + ["\u7DA4", "\u7DA4"], /* CJK Ideograph */ + ["\u7DA5", "\u7DA5"], /* CJK Ideograph */ + ["\u7DA6", "\u7DA6"], /* CJK Ideograph */ + ["\u7DA7", "\u7DA7"], /* CJK Ideograph */ + ["\u7DA8", "\u7DA8"], /* CJK Ideograph */ + ["\u7DA9", "\u7DA9"], /* CJK Ideograph */ + ["\u7DAA", "\u7DAA"], /* CJK Ideograph */ + ["\u7DAB", "\u7DAB"], /* CJK Ideograph */ + ["\u7DAC", "\u7DAC"], /* CJK Ideograph */ + ["\u7DAD", "\u7DAD"], /* CJK Ideograph */ + ["\u7DAE", "\u7DAE"], /* CJK Ideograph */ + ["\u7DAF", "\u7DAF"], /* CJK Ideograph */ + ["\u7DB0", "\u7DB0"], /* CJK Ideograph */ + ["\u7DB1", "\u7DB1"], /* CJK Ideograph */ + ["\u7DB2", "\u7DB2"], /* CJK Ideograph */ + ["\u7DB3", "\u7DB3"], /* CJK Ideograph */ + ["\u7DB4", "\u7DB4"], /* CJK Ideograph */ + ["\u7DB5", "\u7DB5"], /* CJK Ideograph */ + ["\u7DB6", "\u7DB6"], /* CJK Ideograph */ + ["\u7DB7", "\u7DB7"], /* CJK Ideograph */ + ["\u7DB8", "\u7DB8"], /* CJK Ideograph */ + ["\u7DB9", "\u7DB9"], /* CJK Ideograph */ + ["\u7DBA", "\u7DBA"], /* CJK Ideograph */ + ["\u7DBB", "\u7DBB"], /* CJK Ideograph */ + ["\u7DBC", "\u7DBC"], /* CJK Ideograph */ + ["\u7DBD", "\u7DBD"], /* CJK Ideograph */ + ["\u7DBE", "\u7DBE"], /* CJK Ideograph */ + ["\u7DBF", "\u7DBF"], /* CJK Ideograph */ + ["\u7DC0", "\u7DC0"], /* CJK Ideograph */ + ["\u7DC1", "\u7DC1"], /* CJK Ideograph */ + ["\u7DC2", "\u7DC2"], /* CJK Ideograph */ + ["\u7DC3", "\u7DC3"], /* CJK Ideograph */ + ["\u7DC4", "\u7DC4"], /* CJK Ideograph */ + ["\u7DC5", "\u7DC5"], /* CJK Ideograph */ + ["\u7DC6", "\u7DC6"], /* CJK Ideograph */ + ["\u7DC7", "\u7DC7"], /* CJK Ideograph */ + ["\u7DC8", "\u7DC8"], /* CJK Ideograph */ + ["\u7DC9", "\u7DC9"], /* CJK Ideograph */ + ["\u7DCA", "\u7DCA"], /* CJK Ideograph */ + ["\u7DCB", "\u7DCB"], /* CJK Ideograph */ + ["\u7DCC", "\u7DCC"], /* CJK Ideograph */ + ["\u7DCD", "\u7DCD"], /* CJK Ideograph */ + ["\u7DCE", "\u7DCE"], /* CJK Ideograph */ + ["\u7DCF", "\u7DCF"], /* CJK Ideograph */ + ["\u7DD0", "\u7DD0"], /* CJK Ideograph */ + ["\u7DD1", "\u7DD1"], /* CJK Ideograph */ + ["\u7DD2", "\u7DD2"], /* CJK Ideograph */ + ["\u7DD3", "\u7DD3"], /* CJK Ideograph */ + ["\u7DD4", "\u7DD4"], /* CJK Ideograph */ + ["\u7DD5", "\u7DD5"], /* CJK Ideograph */ + ["\u7DD6", "\u7DD6"], /* CJK Ideograph */ + ["\u7DD7", "\u7DD7"], /* CJK Ideograph */ + ["\u7DD8", "\u7DD8"], /* CJK Ideograph */ + ["\u7DD9", "\u7DD9"], /* CJK Ideograph */ + ["\u7DDA", "\u7DDA"], /* CJK Ideograph */ + ["\u7DDB", "\u7DDB"], /* CJK Ideograph */ + ["\u7DDC", "\u7DDC"], /* CJK Ideograph */ + ["\u7DDD", "\u7DDD"], /* CJK Ideograph */ + ["\u7DDE", "\u7DDE"], /* CJK Ideograph */ + ["\u7DDF", "\u7DDF"], /* CJK Ideograph */ + ["\u7DE0", "\u7DE0"], /* CJK Ideograph */ + ["\u7DE1", "\u7DE1"], /* CJK Ideograph */ + ["\u7DE2", "\u7DE2"], /* CJK Ideograph */ + ["\u7DE3", "\u7DE3"], /* CJK Ideograph */ + ["\u7DE4", "\u7DE4"], /* CJK Ideograph */ + ["\u7DE5", "\u7DE5"], /* CJK Ideograph */ + ["\u7DE6", "\u7DE6"], /* CJK Ideograph */ + ["\u7DE7", "\u7DE7"], /* CJK Ideograph */ + ["\u7DE8", "\u7DE8"], /* CJK Ideograph */ + ["\u7DE9", "\u7DE9"], /* CJK Ideograph */ + ["\u7DEA", "\u7DEA"], /* CJK Ideograph */ + ["\u7DEB", "\u7DEB"], /* CJK Ideograph */ + ["\u7DEC", "\u7DEC"], /* CJK Ideograph */ + ["\u7DED", "\u7DED"], /* CJK Ideograph */ + ["\u7DEE", "\u7DEE"], /* CJK Ideograph */ + ["\u7DEF", "\u7DEF"], /* CJK Ideograph */ + ["\u7DF0", "\u7DF0"], /* CJK Ideograph */ + ["\u7DF1", "\u7DF1"], /* CJK Ideograph */ + ["\u7DF2", "\u7DF2"], /* CJK Ideograph */ + ["\u7DF3", "\u7DF3"], /* CJK Ideograph */ + ["\u7DF4", "\u7DF4"], /* CJK Ideograph */ + ["\u7DF5", "\u7DF5"], /* CJK Ideograph */ + ["\u7DF6", "\u7DF6"], /* CJK Ideograph */ + ["\u7DF7", "\u7DF7"], /* CJK Ideograph */ + ["\u7DF8", "\u7DF8"], /* CJK Ideograph */ + ["\u7DF9", "\u7DF9"], /* CJK Ideograph */ + ["\u7DFA", "\u7DFA"], /* CJK Ideograph */ + ["\u7DFB", "\u7DFB"], /* CJK Ideograph */ + ["\u7DFC", "\u7DFC"], /* CJK Ideograph */ + ["\u7DFD", "\u7DFD"], /* CJK Ideograph */ + ["\u7DFE", "\u7DFE"], /* CJK Ideograph */ + ["\u7DFF", "\u7DFF"], /* CJK Ideograph */ + ["\u7E00", "\u7E00"], /* CJK Ideograph */ + ["\u7E01", "\u7E01"], /* CJK Ideograph */ + ["\u7E02", "\u7E02"], /* CJK Ideograph */ + ["\u7E03", "\u7E03"], /* CJK Ideograph */ + ["\u7E04", "\u7E04"], /* CJK Ideograph */ + ["\u7E05", "\u7E05"], /* CJK Ideograph */ + ["\u7E06", "\u7E06"], /* CJK Ideograph */ + ["\u7E07", "\u7E07"], /* CJK Ideograph */ + ["\u7E08", "\u7E08"], /* CJK Ideograph */ + ["\u7E09", "\u7E09"], /* CJK Ideograph */ + ["\u7E0A", "\u7E0A"], /* CJK Ideograph */ + ["\u7E0B", "\u7E0B"], /* CJK Ideograph */ + ["\u7E0C", "\u7E0C"], /* CJK Ideograph */ + ["\u7E0D", "\u7E0D"], /* CJK Ideograph */ + ["\u7E0E", "\u7E0E"], /* CJK Ideograph */ + ["\u7E0F", "\u7E0F"], /* CJK Ideograph */ + ["\u7E10", "\u7E10"], /* CJK Ideograph */ + ["\u7E11", "\u7E11"], /* CJK Ideograph */ + ["\u7E12", "\u7E12"], /* CJK Ideograph */ + ["\u7E13", "\u7E13"], /* CJK Ideograph */ + ["\u7E14", "\u7E14"], /* CJK Ideograph */ + ["\u7E15", "\u7E15"], /* CJK Ideograph */ + ["\u7E16", "\u7E16"], /* CJK Ideograph */ + ["\u7E17", "\u7E17"], /* CJK Ideograph */ + ["\u7E18", "\u7E18"], /* CJK Ideograph */ + ["\u7E19", "\u7E19"], /* CJK Ideograph */ + ["\u7E1A", "\u7E1A"], /* CJK Ideograph */ + ["\u7E1B", "\u7E1B"], /* CJK Ideograph */ + ["\u7E1C", "\u7E1C"], /* CJK Ideograph */ + ["\u7E1D", "\u7E1D"], /* CJK Ideograph */ + ["\u7E1E", "\u7E1E"], /* CJK Ideograph */ + ["\u7E1F", "\u7E1F"], /* CJK Ideograph */ + ["\u7E20", "\u7E20"], /* CJK Ideograph */ + ["\u7E21", "\u7E21"], /* CJK Ideograph */ + ["\u7E22", "\u7E22"], /* CJK Ideograph */ + ["\u7E23", "\u7E23"], /* CJK Ideograph */ + ["\u7E24", "\u7E24"], /* CJK Ideograph */ + ["\u7E25", "\u7E25"], /* CJK Ideograph */ + ["\u7E26", "\u7E26"], /* CJK Ideograph */ + ["\u7E27", "\u7E27"], /* CJK Ideograph */ + ["\u7E28", "\u7E28"], /* CJK Ideograph */ + ["\u7E29", "\u7E29"], /* CJK Ideograph */ + ["\u7E2A", "\u7E2A"], /* CJK Ideograph */ + ["\u7E2B", "\u7E2B"], /* CJK Ideograph */ + ["\u7E2C", "\u7E2C"], /* CJK Ideograph */ + ["\u7E2D", "\u7E2D"], /* CJK Ideograph */ + ["\u7E2E", "\u7E2E"], /* CJK Ideograph */ + ["\u7E2F", "\u7E2F"], /* CJK Ideograph */ + ["\u7E30", "\u7E30"], /* CJK Ideograph */ + ["\u7E31", "\u7E31"], /* CJK Ideograph */ + ["\u7E32", "\u7E32"], /* CJK Ideograph */ + ["\u7E33", "\u7E33"], /* CJK Ideograph */ + ["\u7E34", "\u7E34"], /* CJK Ideograph */ + ["\u7E35", "\u7E35"], /* CJK Ideograph */ + ["\u7E36", "\u7E36"], /* CJK Ideograph */ + ["\u7E37", "\u7E37"], /* CJK Ideograph */ + ["\u7E38", "\u7E38"], /* CJK Ideograph */ + ["\u7E39", "\u7E39"], /* CJK Ideograph */ + ["\u7E3A", "\u7E3A"], /* CJK Ideograph */ + ["\u7E3B", "\u7E3B"], /* CJK Ideograph */ + ["\u7E3C", "\u7E3C"], /* CJK Ideograph */ + ["\u7E3D", "\u7E3D"], /* CJK Ideograph */ + ["\u7E3E", "\u7E3E"], /* CJK Ideograph */ + ["\u7E3F", "\u7E3F"], /* CJK Ideograph */ + ["\u7E40", "\u7E40"], /* CJK Ideograph */ + ["\u7E41", "\u7E41"], /* CJK Ideograph */ + ["\u7E42", "\u7E42"], /* CJK Ideograph */ + ["\u7E43", "\u7E43"], /* CJK Ideograph */ + ["\u7E44", "\u7E44"], /* CJK Ideograph */ + ["\u7E45", "\u7E45"], /* CJK Ideograph */ + ["\u7E46", "\u7E46"], /* CJK Ideograph */ + ["\u7E47", "\u7E47"], /* CJK Ideograph */ + ["\u7E48", "\u7E48"], /* CJK Ideograph */ + ["\u7E49", "\u7E49"], /* CJK Ideograph */ + ["\u7E4A", "\u7E4A"], /* CJK Ideograph */ + ["\u7E4B", "\u7E4B"], /* CJK Ideograph */ + ["\u7E4C", "\u7E4C"], /* CJK Ideograph */ + ["\u7E4D", "\u7E4D"], /* CJK Ideograph */ + ["\u7E4E", "\u7E4E"], /* CJK Ideograph */ + ["\u7E4F", "\u7E4F"], /* CJK Ideograph */ + ["\u7E50", "\u7E50"], /* CJK Ideograph */ + ["\u7E51", "\u7E51"], /* CJK Ideograph */ + ["\u7E52", "\u7E52"], /* CJK Ideograph */ + ["\u7E53", "\u7E53"], /* CJK Ideograph */ + ["\u7E54", "\u7E54"], /* CJK Ideograph */ + ["\u7E55", "\u7E55"], /* CJK Ideograph */ + ["\u7E56", "\u7E56"], /* CJK Ideograph */ + ["\u7E57", "\u7E57"], /* CJK Ideograph */ + ["\u7E58", "\u7E58"], /* CJK Ideograph */ + ["\u7E59", "\u7E59"], /* CJK Ideograph */ + ["\u7E5A", "\u7E5A"], /* CJK Ideograph */ + ["\u7E5B", "\u7E5B"], /* CJK Ideograph */ + ["\u7E5C", "\u7E5C"], /* CJK Ideograph */ + ["\u7E5D", "\u7E5D"], /* CJK Ideograph */ + ["\u7E5E", "\u7E5E"], /* CJK Ideograph */ + ["\u7E5F", "\u7E5F"], /* CJK Ideograph */ + ["\u7E60", "\u7E60"], /* CJK Ideograph */ + ["\u7E61", "\u7E61"], /* CJK Ideograph */ + ["\u7E62", "\u7E62"], /* CJK Ideograph */ + ["\u7E63", "\u7E63"], /* CJK Ideograph */ + ["\u7E64", "\u7E64"], /* CJK Ideograph */ + ["\u7E65", "\u7E65"], /* CJK Ideograph */ + ["\u7E66", "\u7E66"], /* CJK Ideograph */ + ["\u7E67", "\u7E67"], /* CJK Ideograph */ + ["\u7E68", "\u7E68"], /* CJK Ideograph */ + ["\u7E69", "\u7E69"], /* CJK Ideograph */ + ["\u7E6A", "\u7E6A"], /* CJK Ideograph */ + ["\u7E6B", "\u7E6B"], /* CJK Ideograph */ + ["\u7E6C", "\u7E6C"], /* CJK Ideograph */ + ["\u7E6D", "\u7E6D"], /* CJK Ideograph */ + ["\u7E6E", "\u7E6E"], /* CJK Ideograph */ + ["\u7E6F", "\u7E6F"], /* CJK Ideograph */ + ["\u7E70", "\u7E70"], /* CJK Ideograph */ + ["\u7E71", "\u7E71"], /* CJK Ideograph */ + ["\u7E72", "\u7E72"], /* CJK Ideograph */ + ["\u7E73", "\u7E73"], /* CJK Ideograph */ + ["\u7E74", "\u7E74"], /* CJK Ideograph */ + ["\u7E75", "\u7E75"], /* CJK Ideograph */ + ["\u7E76", "\u7E76"], /* CJK Ideograph */ + ["\u7E77", "\u7E77"], /* CJK Ideograph */ + ["\u7E78", "\u7E78"], /* CJK Ideograph */ + ["\u7E79", "\u7E79"], /* CJK Ideograph */ + ["\u7E7A", "\u7E7A"], /* CJK Ideograph */ + ["\u7E7B", "\u7E7B"], /* CJK Ideograph */ + ["\u7E7C", "\u7E7C"], /* CJK Ideograph */ + ["\u7E7D", "\u7E7D"], /* CJK Ideograph */ + ["\u7E7E", "\u7E7E"], /* CJK Ideograph */ + ["\u7E7F", "\u7E7F"], /* CJK Ideograph */ + ["\u7E80", "\u7E80"], /* CJK Ideograph */ + ["\u7E81", "\u7E81"], /* CJK Ideograph */ + ["\u7E82", "\u7E82"], /* CJK Ideograph */ + ["\u7E83", "\u7E83"], /* CJK Ideograph */ + ["\u7E84", "\u7E84"], /* CJK Ideograph */ + ["\u7E85", "\u7E85"], /* CJK Ideograph */ + ["\u7E86", "\u7E86"], /* CJK Ideograph */ + ["\u7E87", "\u7E87"], /* CJK Ideograph */ + ["\u7E88", "\u7E88"], /* CJK Ideograph */ + ["\u7E89", "\u7E89"], /* CJK Ideograph */ + ["\u7E8A", "\u7E8A"], /* CJK Ideograph */ + ["\u7E8B", "\u7E8B"], /* CJK Ideograph */ + ["\u7E8C", "\u7E8C"], /* CJK Ideograph */ + ["\u7E8D", "\u7E8D"], /* CJK Ideograph */ + ["\u7E8E", "\u7E8E"], /* CJK Ideograph */ + ["\u7E8F", "\u7E8F"], /* CJK Ideograph */ + ["\u7E90", "\u7E90"], /* CJK Ideograph */ + ["\u7E91", "\u7E91"], /* CJK Ideograph */ + ["\u7E92", "\u7E92"], /* CJK Ideograph */ + ["\u7E93", "\u7E93"], /* CJK Ideograph */ + ["\u7E94", "\u7E94"], /* CJK Ideograph */ + ["\u7E95", "\u7E95"], /* CJK Ideograph */ + ["\u7E96", "\u7E96"], /* CJK Ideograph */ + ["\u7E97", "\u7E97"], /* CJK Ideograph */ + ["\u7E98", "\u7E98"], /* CJK Ideograph */ + ["\u7E99", "\u7E99"], /* CJK Ideograph */ + ["\u7E9A", "\u7E9A"], /* CJK Ideograph */ + ["\u7E9B", "\u7E9B"], /* CJK Ideograph */ + ["\u7E9C", "\u7E9C"], /* CJK Ideograph */ + ["\u7E9D", "\u7E9D"], /* CJK Ideograph */ + ["\u7E9E", "\u7E9E"], /* CJK Ideograph */ + ["\u7E9F", "\u7E9F"], /* CJK Ideograph */ + ["\u7EA0", "\u7EA0"], /* CJK Ideograph */ + ["\u7EA1", "\u7EA1"], /* CJK Ideograph */ + ["\u7EA2", "\u7EA2"], /* CJK Ideograph */ + ["\u7EA3", "\u7EA3"], /* CJK Ideograph */ + ["\u7EA4", "\u7EA4"], /* CJK Ideograph */ + ["\u7EA5", "\u7EA5"], /* CJK Ideograph */ + ["\u7EA6", "\u7EA6"], /* CJK Ideograph */ + ["\u7EA7", "\u7EA7"], /* CJK Ideograph */ + ["\u7EA8", "\u7EA8"], /* CJK Ideograph */ + ["\u7EA9", "\u7EA9"], /* CJK Ideograph */ + ["\u7EAA", "\u7EAA"], /* CJK Ideograph */ + ["\u7EAB", "\u7EAB"], /* CJK Ideograph */ + ["\u7EAC", "\u7EAC"], /* CJK Ideograph */ + ["\u7EAD", "\u7EAD"], /* CJK Ideograph */ + ["\u7EAE", "\u7EAE"], /* CJK Ideograph */ + ["\u7EAF", "\u7EAF"], /* CJK Ideograph */ + ["\u7EB0", "\u7EB0"], /* CJK Ideograph */ + ["\u7EB1", "\u7EB1"], /* CJK Ideograph */ + ["\u7EB2", "\u7EB2"], /* CJK Ideograph */ + ["\u7EB3", "\u7EB3"], /* CJK Ideograph */ + ["\u7EB4", "\u7EB4"], /* CJK Ideograph */ + ["\u7EB5", "\u7EB5"], /* CJK Ideograph */ + ["\u7EB6", "\u7EB6"], /* CJK Ideograph */ + ["\u7EB7", "\u7EB7"], /* CJK Ideograph */ + ["\u7EB8", "\u7EB8"], /* CJK Ideograph */ + ["\u7EB9", "\u7EB9"], /* CJK Ideograph */ + ["\u7EBA", "\u7EBA"], /* CJK Ideograph */ + ["\u7EBB", "\u7EBB"], /* CJK Ideograph */ + ["\u7EBC", "\u7EBC"], /* CJK Ideograph */ + ["\u7EBD", "\u7EBD"], /* CJK Ideograph */ + ["\u7EBE", "\u7EBE"], /* CJK Ideograph */ + ["\u7EBF", "\u7EBF"], /* CJK Ideograph */ + ["\u7EC0", "\u7EC0"], /* CJK Ideograph */ + ["\u7EC1", "\u7EC1"], /* CJK Ideograph */ + ["\u7EC2", "\u7EC2"], /* CJK Ideograph */ + ["\u7EC3", "\u7EC3"], /* CJK Ideograph */ + ["\u7EC4", "\u7EC4"], /* CJK Ideograph */ + ["\u7EC5", "\u7EC5"], /* CJK Ideograph */ + ["\u7EC6", "\u7EC6"], /* CJK Ideograph */ + ["\u7EC7", "\u7EC7"], /* CJK Ideograph */ + ["\u7EC8", "\u7EC8"], /* CJK Ideograph */ + ["\u7EC9", "\u7EC9"], /* CJK Ideograph */ + ["\u7ECA", "\u7ECA"], /* CJK Ideograph */ + ["\u7ECB", "\u7ECB"], /* CJK Ideograph */ + ["\u7ECC", "\u7ECC"], /* CJK Ideograph */ + ["\u7ECD", "\u7ECD"], /* CJK Ideograph */ + ["\u7ECE", "\u7ECE"], /* CJK Ideograph */ + ["\u7ECF", "\u7ECF"], /* CJK Ideograph */ + ["\u7ED0", "\u7ED0"], /* CJK Ideograph */ + ["\u7ED1", "\u7ED1"], /* CJK Ideograph */ + ["\u7ED2", "\u7ED2"], /* CJK Ideograph */ + ["\u7ED3", "\u7ED3"], /* CJK Ideograph */ + ["\u7ED4", "\u7ED4"], /* CJK Ideograph */ + ["\u7ED5", "\u7ED5"], /* CJK Ideograph */ + ["\u7ED6", "\u7ED6"], /* CJK Ideograph */ + ["\u7ED7", "\u7ED7"], /* CJK Ideograph */ + ["\u7ED8", "\u7ED8"], /* CJK Ideograph */ + ["\u7ED9", "\u7ED9"], /* CJK Ideograph */ + ["\u7EDA", "\u7EDA"], /* CJK Ideograph */ + ["\u7EDB", "\u7EDB"], /* CJK Ideograph */ + ["\u7EDC", "\u7EDC"], /* CJK Ideograph */ + ["\u7EDD", "\u7EDD"], /* CJK Ideograph */ + ["\u7EDE", "\u7EDE"], /* CJK Ideograph */ + ["\u7EDF", "\u7EDF"], /* CJK Ideograph */ + ["\u7EE0", "\u7EE0"], /* CJK Ideograph */ + ["\u7EE1", "\u7EE1"], /* CJK Ideograph */ + ["\u7EE2", "\u7EE2"], /* CJK Ideograph */ + ["\u7EE3", "\u7EE3"], /* CJK Ideograph */ + ["\u7EE4", "\u7EE4"], /* CJK Ideograph */ + ["\u7EE5", "\u7EE5"], /* CJK Ideograph */ + ["\u7EE6", "\u7EE6"], /* CJK Ideograph */ + ["\u7EE7", "\u7EE7"], /* CJK Ideograph */ + ["\u7EE8", "\u7EE8"], /* CJK Ideograph */ + ["\u7EE9", "\u7EE9"], /* CJK Ideograph */ + ["\u7EEA", "\u7EEA"], /* CJK Ideograph */ + ["\u7EEB", "\u7EEB"], /* CJK Ideograph */ + ["\u7EEC", "\u7EEC"], /* CJK Ideograph */ + ["\u7EED", "\u7EED"], /* CJK Ideograph */ + ["\u7EEE", "\u7EEE"], /* CJK Ideograph */ + ["\u7EEF", "\u7EEF"], /* CJK Ideograph */ + ["\u7EF0", "\u7EF0"], /* CJK Ideograph */ + ["\u7EF1", "\u7EF1"], /* CJK Ideograph */ + ["\u7EF2", "\u7EF2"], /* CJK Ideograph */ + ["\u7EF3", "\u7EF3"], /* CJK Ideograph */ + ["\u7EF4", "\u7EF4"], /* CJK Ideograph */ + ["\u7EF5", "\u7EF5"], /* CJK Ideograph */ + ["\u7EF6", "\u7EF6"], /* CJK Ideograph */ + ["\u7EF7", "\u7EF7"], /* CJK Ideograph */ + ["\u7EF8", "\u7EF8"], /* CJK Ideograph */ + ["\u7EF9", "\u7EF9"], /* CJK Ideograph */ + ["\u7EFA", "\u7EFA"], /* CJK Ideograph */ + ["\u7EFB", "\u7EFB"], /* CJK Ideograph */ + ["\u7EFC", "\u7EFC"], /* CJK Ideograph */ + ["\u7EFD", "\u7EFD"], /* CJK Ideograph */ + ["\u7EFE", "\u7EFE"], /* CJK Ideograph */ + ["\u7EFF", "\u7EFF"], /* CJK Ideograph */ + ["\u7F00", "\u7F00"], /* CJK Ideograph */ + ["\u7F01", "\u7F01"], /* CJK Ideograph */ + ["\u7F02", "\u7F02"], /* CJK Ideograph */ + ["\u7F03", "\u7F03"], /* CJK Ideograph */ + ["\u7F04", "\u7F04"], /* CJK Ideograph */ + ["\u7F05", "\u7F05"], /* CJK Ideograph */ + ["\u7F06", "\u7F06"], /* CJK Ideograph */ + ["\u7F07", "\u7F07"], /* CJK Ideograph */ + ["\u7F08", "\u7F08"], /* CJK Ideograph */ + ["\u7F09", "\u7F09"], /* CJK Ideograph */ + ["\u7F0A", "\u7F0A"], /* CJK Ideograph */ + ["\u7F0B", "\u7F0B"], /* CJK Ideograph */ + ["\u7F0C", "\u7F0C"], /* CJK Ideograph */ + ["\u7F0D", "\u7F0D"], /* CJK Ideograph */ + ["\u7F0E", "\u7F0E"], /* CJK Ideograph */ + ["\u7F0F", "\u7F0F"], /* CJK Ideograph */ + ["\u7F10", "\u7F10"], /* CJK Ideograph */ + ["\u7F11", "\u7F11"], /* CJK Ideograph */ + ["\u7F12", "\u7F12"], /* CJK Ideograph */ + ["\u7F13", "\u7F13"], /* CJK Ideograph */ + ["\u7F14", "\u7F14"], /* CJK Ideograph */ + ["\u7F15", "\u7F15"], /* CJK Ideograph */ + ["\u7F16", "\u7F16"], /* CJK Ideograph */ + ["\u7F17", "\u7F17"], /* CJK Ideograph */ + ["\u7F18", "\u7F18"], /* CJK Ideograph */ + ["\u7F19", "\u7F19"], /* CJK Ideograph */ + ["\u7F1A", "\u7F1A"], /* CJK Ideograph */ + ["\u7F1B", "\u7F1B"], /* CJK Ideograph */ + ["\u7F1C", "\u7F1C"], /* CJK Ideograph */ + ["\u7F1D", "\u7F1D"], /* CJK Ideograph */ + ["\u7F1E", "\u7F1E"], /* CJK Ideograph */ + ["\u7F1F", "\u7F1F"], /* CJK Ideograph */ + ["\u7F20", "\u7F20"], /* CJK Ideograph */ + ["\u7F21", "\u7F21"], /* CJK Ideograph */ + ["\u7F22", "\u7F22"], /* CJK Ideograph */ + ["\u7F23", "\u7F23"], /* CJK Ideograph */ + ["\u7F24", "\u7F24"], /* CJK Ideograph */ + ["\u7F25", "\u7F25"], /* CJK Ideograph */ + ["\u7F26", "\u7F26"], /* CJK Ideograph */ + ["\u7F27", "\u7F27"], /* CJK Ideograph */ + ["\u7F28", "\u7F28"], /* CJK Ideograph */ + ["\u7F29", "\u7F29"], /* CJK Ideograph */ + ["\u7F2A", "\u7F2A"], /* CJK Ideograph */ + ["\u7F2B", "\u7F2B"], /* CJK Ideograph */ + ["\u7F2C", "\u7F2C"], /* CJK Ideograph */ + ["\u7F2D", "\u7F2D"], /* CJK Ideograph */ + ["\u7F2E", "\u7F2E"], /* CJK Ideograph */ + ["\u7F2F", "\u7F2F"], /* CJK Ideograph */ + ["\u7F30", "\u7F30"], /* CJK Ideograph */ + ["\u7F31", "\u7F31"], /* CJK Ideograph */ + ["\u7F32", "\u7F32"], /* CJK Ideograph */ + ["\u7F33", "\u7F33"], /* CJK Ideograph */ + ["\u7F34", "\u7F34"], /* CJK Ideograph */ + ["\u7F35", "\u7F35"], /* CJK Ideograph */ + ["\u7F36", "\u7F36"], /* CJK Ideograph */ + ["\u7F37", "\u7F37"], /* CJK Ideograph */ + ["\u7F38", "\u7F38"], /* CJK Ideograph */ + ["\u7F39", "\u7F39"], /* CJK Ideograph */ + ["\u7F3A", "\u7F3A"], /* CJK Ideograph */ + ["\u7F3B", "\u7F3B"], /* CJK Ideograph */ + ["\u7F3C", "\u7F3C"], /* CJK Ideograph */ + ["\u7F3D", "\u7F3D"], /* CJK Ideograph */ + ["\u7F3E", "\u7F3E"], /* CJK Ideograph */ + ["\u7F3F", "\u7F3F"], /* CJK Ideograph */ + ["\u7F40", "\u7F40"], /* CJK Ideograph */ + ["\u7F41", "\u7F41"], /* CJK Ideograph */ + ["\u7F42", "\u7F42"], /* CJK Ideograph */ + ["\u7F43", "\u7F43"], /* CJK Ideograph */ + ["\u7F44", "\u7F44"], /* CJK Ideograph */ + ["\u7F45", "\u7F45"], /* CJK Ideograph */ + ["\u7F46", "\u7F46"], /* CJK Ideograph */ + ["\u7F47", "\u7F47"], /* CJK Ideograph */ + ["\u7F48", "\u7F48"], /* CJK Ideograph */ + ["\u7F49", "\u7F49"], /* CJK Ideograph */ + ["\u7F4A", "\u7F4A"], /* CJK Ideograph */ + ["\u7F4B", "\u7F4B"], /* CJK Ideograph */ + ["\u7F4C", "\u7F4C"], /* CJK Ideograph */ + ["\u7F4D", "\u7F4D"], /* CJK Ideograph */ + ["\u7F4E", "\u7F4E"], /* CJK Ideograph */ + ["\u7F4F", "\u7F4F"], /* CJK Ideograph */ + ["\u7F50", "\u7F50"], /* CJK Ideograph */ + ["\u7F51", "\u7F51"], /* CJK Ideograph */ + ["\u7F52", "\u7F52"], /* CJK Ideograph */ + ["\u7F53", "\u7F53"], /* CJK Ideograph */ + ["\u7F54", "\u7F54"], /* CJK Ideograph */ + ["\u7F55", "\u7F55"], /* CJK Ideograph */ + ["\u7F56", "\u7F56"], /* CJK Ideograph */ + ["\u7F57", "\u7F57"], /* CJK Ideograph */ + ["\u7F58", "\u7F58"], /* CJK Ideograph */ + ["\u7F59", "\u7F59"], /* CJK Ideograph */ + ["\u7F5A", "\u7F5A"], /* CJK Ideograph */ + ["\u7F5B", "\u7F5B"], /* CJK Ideograph */ + ["\u7F5C", "\u7F5C"], /* CJK Ideograph */ + ["\u7F5D", "\u7F5D"], /* CJK Ideograph */ + ["\u7F5E", "\u7F5E"], /* CJK Ideograph */ + ["\u7F5F", "\u7F5F"], /* CJK Ideograph */ + ["\u7F60", "\u7F60"], /* CJK Ideograph */ + ["\u7F61", "\u7F61"], /* CJK Ideograph */ + ["\u7F62", "\u7F62"], /* CJK Ideograph */ + ["\u7F63", "\u7F63"], /* CJK Ideograph */ + ["\u7F64", "\u7F64"], /* CJK Ideograph */ + ["\u7F65", "\u7F65"], /* CJK Ideograph */ + ["\u7F66", "\u7F66"], /* CJK Ideograph */ + ["\u7F67", "\u7F67"], /* CJK Ideograph */ + ["\u7F68", "\u7F68"], /* CJK Ideograph */ + ["\u7F69", "\u7F69"], /* CJK Ideograph */ + ["\u7F6A", "\u7F6A"], /* CJK Ideograph */ + ["\u7F6B", "\u7F6B"], /* CJK Ideograph */ + ["\u7F6C", "\u7F6C"], /* CJK Ideograph */ + ["\u7F6D", "\u7F6D"], /* CJK Ideograph */ + ["\u7F6E", "\u7F6E"], /* CJK Ideograph */ + ["\u7F6F", "\u7F6F"], /* CJK Ideograph */ + ["\u7F70", "\u7F70"], /* CJK Ideograph */ + ["\u7F71", "\u7F71"], /* CJK Ideograph */ + ["\u7F72", "\u7F72"], /* CJK Ideograph */ + ["\u7F73", "\u7F73"], /* CJK Ideograph */ + ["\u7F74", "\u7F74"], /* CJK Ideograph */ + ["\u7F75", "\u7F75"], /* CJK Ideograph */ + ["\u7F76", "\u7F76"], /* CJK Ideograph */ + ["\u7F77", "\u7F77"], /* CJK Ideograph */ + ["\u7F78", "\u7F78"], /* CJK Ideograph */ + ["\u7F79", "\u7F79"], /* CJK Ideograph */ + ["\u7F7A", "\u7F7A"], /* CJK Ideograph */ + ["\u7F7B", "\u7F7B"], /* CJK Ideograph */ + ["\u7F7C", "\u7F7C"], /* CJK Ideograph */ + ["\u7F7D", "\u7F7D"], /* CJK Ideograph */ + ["\u7F7E", "\u7F7E"], /* CJK Ideograph */ + ["\u7F7F", "\u7F7F"], /* CJK Ideograph */ + ["\u7F80", "\u7F80"], /* CJK Ideograph */ + ["\u7F81", "\u7F81"], /* CJK Ideograph */ + ["\u7F82", "\u7F82"], /* CJK Ideograph */ + ["\u7F83", "\u7F83"], /* CJK Ideograph */ + ["\u7F84", "\u7F84"], /* CJK Ideograph */ + ["\u7F85", "\u7F85"], /* CJK Ideograph */ + ["\u7F86", "\u7F86"], /* CJK Ideograph */ + ["\u7F87", "\u7F87"], /* CJK Ideograph */ + ["\u7F88", "\u7F88"], /* CJK Ideograph */ + ["\u7F89", "\u7F89"], /* CJK Ideograph */ + ["\u7F8A", "\u7F8A"], /* CJK Ideograph */ + ["\u7F8B", "\u7F8B"], /* CJK Ideograph */ + ["\u7F8C", "\u7F8C"], /* CJK Ideograph */ + ["\u7F8D", "\u7F8D"], /* CJK Ideograph */ + ["\u7F8E", "\u7F8E"], /* CJK Ideograph */ + ["\u7F8F", "\u7F8F"], /* CJK Ideograph */ + ["\u7F90", "\u7F90"], /* CJK Ideograph */ + ["\u7F91", "\u7F91"], /* CJK Ideograph */ + ["\u7F92", "\u7F92"], /* CJK Ideograph */ + ["\u7F93", "\u7F93"], /* CJK Ideograph */ + ["\u7F94", "\u7F94"], /* CJK Ideograph */ + ["\u7F95", "\u7F95"], /* CJK Ideograph */ + ["\u7F96", "\u7F96"], /* CJK Ideograph */ + ["\u7F97", "\u7F97"], /* CJK Ideograph */ + ["\u7F98", "\u7F98"], /* CJK Ideograph */ + ["\u7F99", "\u7F99"], /* CJK Ideograph */ + ["\u7F9A", "\u7F9A"], /* CJK Ideograph */ + ["\u7F9B", "\u7F9B"], /* CJK Ideograph */ + ["\u7F9C", "\u7F9C"], /* CJK Ideograph */ + ["\u7F9D", "\u7F9D"], /* CJK Ideograph */ + ["\u7F9E", "\u7F9E"], /* CJK Ideograph */ + ["\u7F9F", "\u7F9F"], /* CJK Ideograph */ + ["\u7FA0", "\u7FA0"], /* CJK Ideograph */ + ["\u7FA1", "\u7FA1"], /* CJK Ideograph */ + ["\u7FA2", "\u7FA2"], /* CJK Ideograph */ + ["\u7FA3", "\u7FA3"], /* CJK Ideograph */ + ["\u7FA4", "\u7FA4"], /* CJK Ideograph */ + ["\u7FA5", "\u7FA5"], /* CJK Ideograph */ + ["\u7FA6", "\u7FA6"], /* CJK Ideograph */ + ["\u7FA7", "\u7FA7"], /* CJK Ideograph */ + ["\u7FA8", "\u7FA8"], /* CJK Ideograph */ + ["\u7FA9", "\u7FA9"], /* CJK Ideograph */ + ["\u7FAA", "\u7FAA"], /* CJK Ideograph */ + ["\u7FAB", "\u7FAB"], /* CJK Ideograph */ + ["\u7FAC", "\u7FAC"], /* CJK Ideograph */ + ["\u7FAD", "\u7FAD"], /* CJK Ideograph */ + ["\u7FAE", "\u7FAE"], /* CJK Ideograph */ + ["\u7FAF", "\u7FAF"], /* CJK Ideograph */ + ["\u7FB0", "\u7FB0"], /* CJK Ideograph */ + ["\u7FB1", "\u7FB1"], /* CJK Ideograph */ + ["\u7FB2", "\u7FB2"], /* CJK Ideograph */ + ["\u7FB3", "\u7FB3"], /* CJK Ideograph */ + ["\u7FB4", "\u7FB4"], /* CJK Ideograph */ + ["\u7FB5", "\u7FB5"], /* CJK Ideograph */ + ["\u7FB6", "\u7FB6"], /* CJK Ideograph */ + ["\u7FB7", "\u7FB7"], /* CJK Ideograph */ + ["\u7FB8", "\u7FB8"], /* CJK Ideograph */ + ["\u7FB9", "\u7FB9"], /* CJK Ideograph */ + ["\u7FBA", "\u7FBA"], /* CJK Ideograph */ + ["\u7FBB", "\u7FBB"], /* CJK Ideograph */ + ["\u7FBC", "\u7FBC"], /* CJK Ideograph */ + ["\u7FBD", "\u7FBD"], /* CJK Ideograph */ + ["\u7FBE", "\u7FBE"], /* CJK Ideograph */ + ["\u7FBF", "\u7FBF"], /* CJK Ideograph */ + ["\u7FC0", "\u7FC0"], /* CJK Ideograph */ + ["\u7FC1", "\u7FC1"], /* CJK Ideograph */ + ["\u7FC2", "\u7FC2"], /* CJK Ideograph */ + ["\u7FC3", "\u7FC3"], /* CJK Ideograph */ + ["\u7FC4", "\u7FC4"], /* CJK Ideograph */ + ["\u7FC5", "\u7FC5"], /* CJK Ideograph */ + ["\u7FC6", "\u7FC6"], /* CJK Ideograph */ + ["\u7FC7", "\u7FC7"], /* CJK Ideograph */ + ["\u7FC8", "\u7FC8"], /* CJK Ideograph */ + ["\u7FC9", "\u7FC9"], /* CJK Ideograph */ + ["\u7FCA", "\u7FCA"], /* CJK Ideograph */ + ["\u7FCB", "\u7FCB"], /* CJK Ideograph */ + ["\u7FCC", "\u7FCC"], /* CJK Ideograph */ + ["\u7FCD", "\u7FCD"], /* CJK Ideograph */ + ["\u7FCE", "\u7FCE"], /* CJK Ideograph */ + ["\u7FCF", "\u7FCF"], /* CJK Ideograph */ + ["\u7FD0", "\u7FD0"], /* CJK Ideograph */ + ["\u7FD1", "\u7FD1"], /* CJK Ideograph */ + ["\u7FD2", "\u7FD2"], /* CJK Ideograph */ + ["\u7FD3", "\u7FD3"], /* CJK Ideograph */ + ["\u7FD4", "\u7FD4"], /* CJK Ideograph */ + ["\u7FD5", "\u7FD5"], /* CJK Ideograph */ + ["\u7FD6", "\u7FD6"], /* CJK Ideograph */ + ["\u7FD7", "\u7FD7"], /* CJK Ideograph */ + ["\u7FD8", "\u7FD8"], /* CJK Ideograph */ + ["\u7FD9", "\u7FD9"], /* CJK Ideograph */ + ["\u7FDA", "\u7FDA"], /* CJK Ideograph */ + ["\u7FDB", "\u7FDB"], /* CJK Ideograph */ + ["\u7FDC", "\u7FDC"], /* CJK Ideograph */ + ["\u7FDD", "\u7FDD"], /* CJK Ideograph */ + ["\u7FDE", "\u7FDE"], /* CJK Ideograph */ + ["\u7FDF", "\u7FDF"], /* CJK Ideograph */ + ["\u7FE0", "\u7FE0"], /* CJK Ideograph */ + ["\u7FE1", "\u7FE1"], /* CJK Ideograph */ + ["\u7FE2", "\u7FE2"], /* CJK Ideograph */ + ["\u7FE3", "\u7FE3"], /* CJK Ideograph */ + ["\u7FE4", "\u7FE4"], /* CJK Ideograph */ + ["\u7FE5", "\u7FE5"], /* CJK Ideograph */ + ["\u7FE6", "\u7FE6"], /* CJK Ideograph */ + ["\u7FE7", "\u7FE7"], /* CJK Ideograph */ + ["\u7FE8", "\u7FE8"], /* CJK Ideograph */ + ["\u7FE9", "\u7FE9"], /* CJK Ideograph */ + ["\u7FEA", "\u7FEA"], /* CJK Ideograph */ + ["\u7FEB", "\u7FEB"], /* CJK Ideograph */ + ["\u7FEC", "\u7FEC"], /* CJK Ideograph */ + ["\u7FED", "\u7FED"], /* CJK Ideograph */ + ["\u7FEE", "\u7FEE"], /* CJK Ideograph */ + ["\u7FEF", "\u7FEF"], /* CJK Ideograph */ + ["\u7FF0", "\u7FF0"], /* CJK Ideograph */ + ["\u7FF1", "\u7FF1"], /* CJK Ideograph */ + ["\u7FF2", "\u7FF2"], /* CJK Ideograph */ + ["\u7FF3", "\u7FF3"], /* CJK Ideograph */ + ["\u7FF4", "\u7FF4"], /* CJK Ideograph */ + ["\u7FF5", "\u7FF5"], /* CJK Ideograph */ + ["\u7FF6", "\u7FF6"], /* CJK Ideograph */ + ["\u7FF7", "\u7FF7"], /* CJK Ideograph */ + ["\u7FF8", "\u7FF8"], /* CJK Ideograph */ + ["\u7FF9", "\u7FF9"], /* CJK Ideograph */ + ["\u7FFA", "\u7FFA"], /* CJK Ideograph */ + ["\u7FFB", "\u7FFB"], /* CJK Ideograph */ + ["\u7FFC", "\u7FFC"], /* CJK Ideograph */ + ["\u7FFD", "\u7FFD"], /* CJK Ideograph */ + ["\u7FFE", "\u7FFE"], /* CJK Ideograph */ + ["\u7FFF", "\u7FFF"], /* CJK Ideograph */ + ["\u8000", "\u8000"], /* CJK Ideograph */ + ["\u8001", "\u8001"], /* CJK Ideograph */ + ["\u8002", "\u8002"], /* CJK Ideograph */ + ["\u8003", "\u8003"], /* CJK Ideograph */ + ["\u8004", "\u8004"], /* CJK Ideograph */ + ["\u8005", "\u8005"], /* CJK Ideograph */ + ["\u8006", "\u8006"], /* CJK Ideograph */ + ["\u8007", "\u8007"], /* CJK Ideograph */ + ["\u8008", "\u8008"], /* CJK Ideograph */ + ["\u8009", "\u8009"], /* CJK Ideograph */ + ["\u800A", "\u800A"], /* CJK Ideograph */ + ["\u800B", "\u800B"], /* CJK Ideograph */ + ["\u800C", "\u800C"], /* CJK Ideograph */ + ["\u800D", "\u800D"], /* CJK Ideograph */ + ["\u800E", "\u800E"], /* CJK Ideograph */ + ["\u800F", "\u800F"], /* CJK Ideograph */ + ["\u8010", "\u8010"], /* CJK Ideograph */ + ["\u8011", "\u8011"], /* CJK Ideograph */ + ["\u8012", "\u8012"], /* CJK Ideograph */ + ["\u8013", "\u8013"], /* CJK Ideograph */ + ["\u8014", "\u8014"], /* CJK Ideograph */ + ["\u8015", "\u8015"], /* CJK Ideograph */ + ["\u8016", "\u8016"], /* CJK Ideograph */ + ["\u8017", "\u8017"], /* CJK Ideograph */ + ["\u8018", "\u8018"], /* CJK Ideograph */ + ["\u8019", "\u8019"], /* CJK Ideograph */ + ["\u801A", "\u801A"], /* CJK Ideograph */ + ["\u801B", "\u801B"], /* CJK Ideograph */ + ["\u801C", "\u801C"], /* CJK Ideograph */ + ["\u801D", "\u801D"], /* CJK Ideograph */ + ["\u801E", "\u801E"], /* CJK Ideograph */ + ["\u801F", "\u801F"], /* CJK Ideograph */ + ["\u8020", "\u8020"], /* CJK Ideograph */ + ["\u8021", "\u8021"], /* CJK Ideograph */ + ["\u8022", "\u8022"], /* CJK Ideograph */ + ["\u8023", "\u8023"], /* CJK Ideograph */ + ["\u8024", "\u8024"], /* CJK Ideograph */ + ["\u8025", "\u8025"], /* CJK Ideograph */ + ["\u8026", "\u8026"], /* CJK Ideograph */ + ["\u8027", "\u8027"], /* CJK Ideograph */ + ["\u8028", "\u8028"], /* CJK Ideograph */ + ["\u8029", "\u8029"], /* CJK Ideograph */ + ["\u802A", "\u802A"], /* CJK Ideograph */ + ["\u802B", "\u802B"], /* CJK Ideograph */ + ["\u802C", "\u802C"], /* CJK Ideograph */ + ["\u802D", "\u802D"], /* CJK Ideograph */ + ["\u802E", "\u802E"], /* CJK Ideograph */ + ["\u802F", "\u802F"], /* CJK Ideograph */ + ["\u8030", "\u8030"], /* CJK Ideograph */ + ["\u8031", "\u8031"], /* CJK Ideograph */ + ["\u8032", "\u8032"], /* CJK Ideograph */ + ["\u8033", "\u8033"], /* CJK Ideograph */ + ["\u8034", "\u8034"], /* CJK Ideograph */ + ["\u8035", "\u8035"], /* CJK Ideograph */ + ["\u8036", "\u8036"], /* CJK Ideograph */ + ["\u8037", "\u8037"], /* CJK Ideograph */ + ["\u8038", "\u8038"], /* CJK Ideograph */ + ["\u8039", "\u8039"], /* CJK Ideograph */ + ["\u803A", "\u803A"], /* CJK Ideograph */ + ["\u803B", "\u803B"], /* CJK Ideograph */ + ["\u803C", "\u803C"], /* CJK Ideograph */ + ["\u803D", "\u803D"], /* CJK Ideograph */ + ["\u803E", "\u803E"], /* CJK Ideograph */ + ["\u803F", "\u803F"], /* CJK Ideograph */ + ["\u8040", "\u8040"], /* CJK Ideograph */ + ["\u8041", "\u8041"], /* CJK Ideograph */ + ["\u8042", "\u8042"], /* CJK Ideograph */ + ["\u8043", "\u8043"], /* CJK Ideograph */ + ["\u8044", "\u8044"], /* CJK Ideograph */ + ["\u8045", "\u8045"], /* CJK Ideograph */ + ["\u8046", "\u8046"], /* CJK Ideograph */ + ["\u8047", "\u8047"], /* CJK Ideograph */ + ["\u8048", "\u8048"], /* CJK Ideograph */ + ["\u8049", "\u8049"], /* CJK Ideograph */ + ["\u804A", "\u804A"], /* CJK Ideograph */ + ["\u804B", "\u804B"], /* CJK Ideograph */ + ["\u804C", "\u804C"], /* CJK Ideograph */ + ["\u804D", "\u804D"], /* CJK Ideograph */ + ["\u804E", "\u804E"], /* CJK Ideograph */ + ["\u804F", "\u804F"], /* CJK Ideograph */ + ["\u8050", "\u8050"], /* CJK Ideograph */ + ["\u8051", "\u8051"], /* CJK Ideograph */ + ["\u8052", "\u8052"], /* CJK Ideograph */ + ["\u8053", "\u8053"], /* CJK Ideograph */ + ["\u8054", "\u8054"], /* CJK Ideograph */ + ["\u8055", "\u8055"], /* CJK Ideograph */ + ["\u8056", "\u8056"], /* CJK Ideograph */ + ["\u8057", "\u8057"], /* CJK Ideograph */ + ["\u8058", "\u8058"], /* CJK Ideograph */ + ["\u8059", "\u8059"], /* CJK Ideograph */ + ["\u805A", "\u805A"], /* CJK Ideograph */ + ["\u805B", "\u805B"], /* CJK Ideograph */ + ["\u805C", "\u805C"], /* CJK Ideograph */ + ["\u805D", "\u805D"], /* CJK Ideograph */ + ["\u805E", "\u805E"], /* CJK Ideograph */ + ["\u805F", "\u805F"], /* CJK Ideograph */ + ["\u8060", "\u8060"], /* CJK Ideograph */ + ["\u8061", "\u8061"], /* CJK Ideograph */ + ["\u8062", "\u8062"], /* CJK Ideograph */ + ["\u8063", "\u8063"], /* CJK Ideograph */ + ["\u8064", "\u8064"], /* CJK Ideograph */ + ["\u8065", "\u8065"], /* CJK Ideograph */ + ["\u8066", "\u8066"], /* CJK Ideograph */ + ["\u8067", "\u8067"], /* CJK Ideograph */ + ["\u8068", "\u8068"], /* CJK Ideograph */ + ["\u8069", "\u8069"], /* CJK Ideograph */ + ["\u806A", "\u806A"], /* CJK Ideograph */ + ["\u806B", "\u806B"], /* CJK Ideograph */ + ["\u806C", "\u806C"], /* CJK Ideograph */ + ["\u806D", "\u806D"], /* CJK Ideograph */ + ["\u806E", "\u806E"], /* CJK Ideograph */ + ["\u806F", "\u806F"], /* CJK Ideograph */ + ["\u8070", "\u8070"], /* CJK Ideograph */ + ["\u8071", "\u8071"], /* CJK Ideograph */ + ["\u8072", "\u8072"], /* CJK Ideograph */ + ["\u8073", "\u8073"], /* CJK Ideograph */ + ["\u8074", "\u8074"], /* CJK Ideograph */ + ["\u8075", "\u8075"], /* CJK Ideograph */ + ["\u8076", "\u8076"], /* CJK Ideograph */ + ["\u8077", "\u8077"], /* CJK Ideograph */ + ["\u8078", "\u8078"], /* CJK Ideograph */ + ["\u8079", "\u8079"], /* CJK Ideograph */ + ["\u807A", "\u807A"], /* CJK Ideograph */ + ["\u807B", "\u807B"], /* CJK Ideograph */ + ["\u807C", "\u807C"], /* CJK Ideograph */ + ["\u807D", "\u807D"], /* CJK Ideograph */ + ["\u807E", "\u807E"], /* CJK Ideograph */ + ["\u807F", "\u807F"], /* CJK Ideograph */ + ["\u8080", "\u8080"], /* CJK Ideograph */ + ["\u8081", "\u8081"], /* CJK Ideograph */ + ["\u8082", "\u8082"], /* CJK Ideograph */ + ["\u8083", "\u8083"], /* CJK Ideograph */ + ["\u8084", "\u8084"], /* CJK Ideograph */ + ["\u8085", "\u8085"], /* CJK Ideograph */ + ["\u8086", "\u8086"], /* CJK Ideograph */ + ["\u8087", "\u8087"], /* CJK Ideograph */ + ["\u8088", "\u8088"], /* CJK Ideograph */ + ["\u8089", "\u8089"], /* CJK Ideograph */ + ["\u808A", "\u808A"], /* CJK Ideograph */ + ["\u808B", "\u808B"], /* CJK Ideograph */ + ["\u808C", "\u808C"], /* CJK Ideograph */ + ["\u808D", "\u808D"], /* CJK Ideograph */ + ["\u808E", "\u808E"], /* CJK Ideograph */ + ["\u808F", "\u808F"], /* CJK Ideograph */ + ["\u8090", "\u8090"], /* CJK Ideograph */ + ["\u8091", "\u8091"], /* CJK Ideograph */ + ["\u8092", "\u8092"], /* CJK Ideograph */ + ["\u8093", "\u8093"], /* CJK Ideograph */ + ["\u8094", "\u8094"], /* CJK Ideograph */ + ["\u8095", "\u8095"], /* CJK Ideograph */ + ["\u8096", "\u8096"], /* CJK Ideograph */ + ["\u8097", "\u8097"], /* CJK Ideograph */ + ["\u8098", "\u8098"], /* CJK Ideograph */ + ["\u8099", "\u8099"], /* CJK Ideograph */ + ["\u809A", "\u809A"], /* CJK Ideograph */ + ["\u809B", "\u809B"], /* CJK Ideograph */ + ["\u809C", "\u809C"], /* CJK Ideograph */ + ["\u809D", "\u809D"], /* CJK Ideograph */ + ["\u809E", "\u809E"], /* CJK Ideograph */ + ["\u809F", "\u809F"], /* CJK Ideograph */ + ["\u80A0", "\u80A0"], /* CJK Ideograph */ + ["\u80A1", "\u80A1"], /* CJK Ideograph */ + ["\u80A2", "\u80A2"], /* CJK Ideograph */ + ["\u80A3", "\u80A3"], /* CJK Ideograph */ + ["\u80A4", "\u80A4"], /* CJK Ideograph */ + ["\u80A5", "\u80A5"], /* CJK Ideograph */ + ["\u80A6", "\u80A6"], /* CJK Ideograph */ + ["\u80A7", "\u80A7"], /* CJK Ideograph */ + ["\u80A8", "\u80A8"], /* CJK Ideograph */ + ["\u80A9", "\u80A9"], /* CJK Ideograph */ + ["\u80AA", "\u80AA"], /* CJK Ideograph */ + ["\u80AB", "\u80AB"], /* CJK Ideograph */ + ["\u80AC", "\u80AC"], /* CJK Ideograph */ + ["\u80AD", "\u80AD"], /* CJK Ideograph */ + ["\u80AE", "\u80AE"], /* CJK Ideograph */ + ["\u80AF", "\u80AF"], /* CJK Ideograph */ + ["\u80B0", "\u80B0"], /* CJK Ideograph */ + ["\u80B1", "\u80B1"], /* CJK Ideograph */ + ["\u80B2", "\u80B2"], /* CJK Ideograph */ + ["\u80B3", "\u80B3"], /* CJK Ideograph */ + ["\u80B4", "\u80B4"], /* CJK Ideograph */ + ["\u80B5", "\u80B5"], /* CJK Ideograph */ + ["\u80B6", "\u80B6"], /* CJK Ideograph */ + ["\u80B7", "\u80B7"], /* CJK Ideograph */ + ["\u80B8", "\u80B8"], /* CJK Ideograph */ + ["\u80B9", "\u80B9"], /* CJK Ideograph */ + ["\u80BA", "\u80BA"], /* CJK Ideograph */ + ["\u80BB", "\u80BB"], /* CJK Ideograph */ + ["\u80BC", "\u80BC"], /* CJK Ideograph */ + ["\u80BD", "\u80BD"], /* CJK Ideograph */ + ["\u80BE", "\u80BE"], /* CJK Ideograph */ + ["\u80BF", "\u80BF"], /* CJK Ideograph */ + ["\u80C0", "\u80C0"], /* CJK Ideograph */ + ["\u80C1", "\u80C1"], /* CJK Ideograph */ + ["\u80C2", "\u80C2"], /* CJK Ideograph */ + ["\u80C3", "\u80C3"], /* CJK Ideograph */ + ["\u80C4", "\u80C4"], /* CJK Ideograph */ + ["\u80C5", "\u80C5"], /* CJK Ideograph */ + ["\u80C6", "\u80C6"], /* CJK Ideograph */ + ["\u80C7", "\u80C7"], /* CJK Ideograph */ + ["\u80C8", "\u80C8"], /* CJK Ideograph */ + ["\u80C9", "\u80C9"], /* CJK Ideograph */ + ["\u80CA", "\u80CA"], /* CJK Ideograph */ + ["\u80CB", "\u80CB"], /* CJK Ideograph */ + ["\u80CC", "\u80CC"], /* CJK Ideograph */ + ["\u80CD", "\u80CD"], /* CJK Ideograph */ + ["\u80CE", "\u80CE"], /* CJK Ideograph */ + ["\u80CF", "\u80CF"], /* CJK Ideograph */ + ["\u80D0", "\u80D0"], /* CJK Ideograph */ + ["\u80D1", "\u80D1"], /* CJK Ideograph */ + ["\u80D2", "\u80D2"], /* CJK Ideograph */ + ["\u80D3", "\u80D3"], /* CJK Ideograph */ + ["\u80D4", "\u80D4"], /* CJK Ideograph */ + ["\u80D5", "\u80D5"], /* CJK Ideograph */ + ["\u80D6", "\u80D6"], /* CJK Ideograph */ + ["\u80D7", "\u80D7"], /* CJK Ideograph */ + ["\u80D8", "\u80D8"], /* CJK Ideograph */ + ["\u80D9", "\u80D9"], /* CJK Ideograph */ + ["\u80DA", "\u80DA"], /* CJK Ideograph */ + ["\u80DB", "\u80DB"], /* CJK Ideograph */ + ["\u80DC", "\u80DC"], /* CJK Ideograph */ + ["\u80DD", "\u80DD"], /* CJK Ideograph */ + ["\u80DE", "\u80DE"], /* CJK Ideograph */ + ["\u80DF", "\u80DF"], /* CJK Ideograph */ + ["\u80E0", "\u80E0"], /* CJK Ideograph */ + ["\u80E1", "\u80E1"], /* CJK Ideograph */ + ["\u80E2", "\u80E2"], /* CJK Ideograph */ + ["\u80E3", "\u80E3"], /* CJK Ideograph */ + ["\u80E4", "\u80E4"], /* CJK Ideograph */ + ["\u80E5", "\u80E5"], /* CJK Ideograph */ + ["\u80E6", "\u80E6"], /* CJK Ideograph */ + ["\u80E7", "\u80E7"], /* CJK Ideograph */ + ["\u80E8", "\u80E8"], /* CJK Ideograph */ + ["\u80E9", "\u80E9"], /* CJK Ideograph */ + ["\u80EA", "\u80EA"], /* CJK Ideograph */ + ["\u80EB", "\u80EB"], /* CJK Ideograph */ + ["\u80EC", "\u80EC"], /* CJK Ideograph */ + ["\u80ED", "\u80ED"], /* CJK Ideograph */ + ["\u80EE", "\u80EE"], /* CJK Ideograph */ + ["\u80EF", "\u80EF"], /* CJK Ideograph */ + ["\u80F0", "\u80F0"], /* CJK Ideograph */ + ["\u80F1", "\u80F1"], /* CJK Ideograph */ + ["\u80F2", "\u80F2"], /* CJK Ideograph */ + ["\u80F3", "\u80F3"], /* CJK Ideograph */ + ["\u80F4", "\u80F4"], /* CJK Ideograph */ + ["\u80F5", "\u80F5"], /* CJK Ideograph */ + ["\u80F6", "\u80F6"], /* CJK Ideograph */ + ["\u80F7", "\u80F7"], /* CJK Ideograph */ + ["\u80F8", "\u80F8"], /* CJK Ideograph */ + ["\u80F9", "\u80F9"], /* CJK Ideograph */ + ["\u80FA", "\u80FA"], /* CJK Ideograph */ + ["\u80FB", "\u80FB"], /* CJK Ideograph */ + ["\u80FC", "\u80FC"], /* CJK Ideograph */ + ["\u80FD", "\u80FD"], /* CJK Ideograph */ + ["\u80FE", "\u80FE"], /* CJK Ideograph */ + ["\u80FF", "\u80FF"], /* CJK Ideograph */ + ["\u8100", "\u8100"], /* CJK Ideograph */ + ["\u8101", "\u8101"], /* CJK Ideograph */ + ["\u8102", "\u8102"], /* CJK Ideograph */ + ["\u8103", "\u8103"], /* CJK Ideograph */ + ["\u8104", "\u8104"], /* CJK Ideograph */ + ["\u8105", "\u8105"], /* CJK Ideograph */ + ["\u8106", "\u8106"], /* CJK Ideograph */ + ["\u8107", "\u8107"], /* CJK Ideograph */ + ["\u8108", "\u8108"], /* CJK Ideograph */ + ["\u8109", "\u8109"], /* CJK Ideograph */ + ["\u810A", "\u810A"], /* CJK Ideograph */ + ["\u810B", "\u810B"], /* CJK Ideograph */ + ["\u810C", "\u810C"], /* CJK Ideograph */ + ["\u810D", "\u810D"], /* CJK Ideograph */ + ["\u810E", "\u810E"], /* CJK Ideograph */ + ["\u810F", "\u810F"], /* CJK Ideograph */ + ["\u8110", "\u8110"], /* CJK Ideograph */ + ["\u8111", "\u8111"], /* CJK Ideograph */ + ["\u8112", "\u8112"], /* CJK Ideograph */ + ["\u8113", "\u8113"], /* CJK Ideograph */ + ["\u8114", "\u8114"], /* CJK Ideograph */ + ["\u8115", "\u8115"], /* CJK Ideograph */ + ["\u8116", "\u8116"], /* CJK Ideograph */ + ["\u8117", "\u8117"], /* CJK Ideograph */ + ["\u8118", "\u8118"], /* CJK Ideograph */ + ["\u8119", "\u8119"], /* CJK Ideograph */ + ["\u811A", "\u811A"], /* CJK Ideograph */ + ["\u811B", "\u811B"], /* CJK Ideograph */ + ["\u811C", "\u811C"], /* CJK Ideograph */ + ["\u811D", "\u811D"], /* CJK Ideograph */ + ["\u811E", "\u811E"], /* CJK Ideograph */ + ["\u811F", "\u811F"], /* CJK Ideograph */ + ["\u8120", "\u8120"], /* CJK Ideograph */ + ["\u8121", "\u8121"], /* CJK Ideograph */ + ["\u8122", "\u8122"], /* CJK Ideograph */ + ["\u8123", "\u8123"], /* CJK Ideograph */ + ["\u8124", "\u8124"], /* CJK Ideograph */ + ["\u8125", "\u8125"], /* CJK Ideograph */ + ["\u8126", "\u8126"], /* CJK Ideograph */ + ["\u8127", "\u8127"], /* CJK Ideograph */ + ["\u8128", "\u8128"], /* CJK Ideograph */ + ["\u8129", "\u8129"], /* CJK Ideograph */ + ["\u812A", "\u812A"], /* CJK Ideograph */ + ["\u812B", "\u812B"], /* CJK Ideograph */ + ["\u812C", "\u812C"], /* CJK Ideograph */ + ["\u812D", "\u812D"], /* CJK Ideograph */ + ["\u812E", "\u812E"], /* CJK Ideograph */ + ["\u812F", "\u812F"], /* CJK Ideograph */ + ["\u8130", "\u8130"], /* CJK Ideograph */ + ["\u8131", "\u8131"], /* CJK Ideograph */ + ["\u8132", "\u8132"], /* CJK Ideograph */ + ["\u8133", "\u8133"], /* CJK Ideograph */ + ["\u8134", "\u8134"], /* CJK Ideograph */ + ["\u8135", "\u8135"], /* CJK Ideograph */ + ["\u8136", "\u8136"], /* CJK Ideograph */ + ["\u8137", "\u8137"], /* CJK Ideograph */ + ["\u8138", "\u8138"], /* CJK Ideograph */ + ["\u8139", "\u8139"], /* CJK Ideograph */ + ["\u813A", "\u813A"], /* CJK Ideograph */ + ["\u813B", "\u813B"], /* CJK Ideograph */ + ["\u813C", "\u813C"], /* CJK Ideograph */ + ["\u813D", "\u813D"], /* CJK Ideograph */ + ["\u813E", "\u813E"], /* CJK Ideograph */ + ["\u813F", "\u813F"], /* CJK Ideograph */ + ["\u8140", "\u8140"], /* CJK Ideograph */ + ["\u8141", "\u8141"], /* CJK Ideograph */ + ["\u8142", "\u8142"], /* CJK Ideograph */ + ["\u8143", "\u8143"], /* CJK Ideograph */ + ["\u8144", "\u8144"], /* CJK Ideograph */ + ["\u8145", "\u8145"], /* CJK Ideograph */ + ["\u8146", "\u8146"], /* CJK Ideograph */ + ["\u8147", "\u8147"], /* CJK Ideograph */ + ["\u8148", "\u8148"], /* CJK Ideograph */ + ["\u8149", "\u8149"], /* CJK Ideograph */ + ["\u814A", "\u814A"], /* CJK Ideograph */ + ["\u814B", "\u814B"], /* CJK Ideograph */ + ["\u814C", "\u814C"], /* CJK Ideograph */ + ["\u814D", "\u814D"], /* CJK Ideograph */ + ["\u814E", "\u814E"], /* CJK Ideograph */ + ["\u814F", "\u814F"], /* CJK Ideograph */ + ["\u8150", "\u8150"], /* CJK Ideograph */ + ["\u8151", "\u8151"], /* CJK Ideograph */ + ["\u8152", "\u8152"], /* CJK Ideograph */ + ["\u8153", "\u8153"], /* CJK Ideograph */ + ["\u8154", "\u8154"], /* CJK Ideograph */ + ["\u8155", "\u8155"], /* CJK Ideograph */ + ["\u8156", "\u8156"], /* CJK Ideograph */ + ["\u8157", "\u8157"], /* CJK Ideograph */ + ["\u8158", "\u8158"], /* CJK Ideograph */ + ["\u8159", "\u8159"], /* CJK Ideograph */ + ["\u815A", "\u815A"], /* CJK Ideograph */ + ["\u815B", "\u815B"], /* CJK Ideograph */ + ["\u815C", "\u815C"], /* CJK Ideograph */ + ["\u815D", "\u815D"], /* CJK Ideograph */ + ["\u815E", "\u815E"], /* CJK Ideograph */ + ["\u815F", "\u815F"], /* CJK Ideograph */ + ["\u8160", "\u8160"], /* CJK Ideograph */ + ["\u8161", "\u8161"], /* CJK Ideograph */ + ["\u8162", "\u8162"], /* CJK Ideograph */ + ["\u8163", "\u8163"], /* CJK Ideograph */ + ["\u8164", "\u8164"], /* CJK Ideograph */ + ["\u8165", "\u8165"], /* CJK Ideograph */ + ["\u8166", "\u8166"], /* CJK Ideograph */ + ["\u8167", "\u8167"], /* CJK Ideograph */ + ["\u8168", "\u8168"], /* CJK Ideograph */ + ["\u8169", "\u8169"], /* CJK Ideograph */ + ["\u816A", "\u816A"], /* CJK Ideograph */ + ["\u816B", "\u816B"], /* CJK Ideograph */ + ["\u816C", "\u816C"], /* CJK Ideograph */ + ["\u816D", "\u816D"], /* CJK Ideograph */ + ["\u816E", "\u816E"], /* CJK Ideograph */ + ["\u816F", "\u816F"], /* CJK Ideograph */ + ["\u8170", "\u8170"], /* CJK Ideograph */ + ["\u8171", "\u8171"], /* CJK Ideograph */ + ["\u8172", "\u8172"], /* CJK Ideograph */ + ["\u8173", "\u8173"], /* CJK Ideograph */ + ["\u8174", "\u8174"], /* CJK Ideograph */ + ["\u8175", "\u8175"], /* CJK Ideograph */ + ["\u8176", "\u8176"], /* CJK Ideograph */ + ["\u8177", "\u8177"], /* CJK Ideograph */ + ["\u8178", "\u8178"], /* CJK Ideograph */ + ["\u8179", "\u8179"], /* CJK Ideograph */ + ["\u817A", "\u817A"], /* CJK Ideograph */ + ["\u817B", "\u817B"], /* CJK Ideograph */ + ["\u817C", "\u817C"], /* CJK Ideograph */ + ["\u817D", "\u817D"], /* CJK Ideograph */ + ["\u817E", "\u817E"], /* CJK Ideograph */ + ["\u817F", "\u817F"], /* CJK Ideograph */ + ["\u8180", "\u8180"], /* CJK Ideograph */ + ["\u8181", "\u8181"], /* CJK Ideograph */ + ["\u8182", "\u8182"], /* CJK Ideograph */ + ["\u8183", "\u8183"], /* CJK Ideograph */ + ["\u8184", "\u8184"], /* CJK Ideograph */ + ["\u8185", "\u8185"], /* CJK Ideograph */ + ["\u8186", "\u8186"], /* CJK Ideograph */ + ["\u8187", "\u8187"], /* CJK Ideograph */ + ["\u8188", "\u8188"], /* CJK Ideograph */ + ["\u8189", "\u8189"], /* CJK Ideograph */ + ["\u818A", "\u818A"], /* CJK Ideograph */ + ["\u818B", "\u818B"], /* CJK Ideograph */ + ["\u818C", "\u818C"], /* CJK Ideograph */ + ["\u818D", "\u818D"], /* CJK Ideograph */ + ["\u818E", "\u818E"], /* CJK Ideograph */ + ["\u818F", "\u818F"], /* CJK Ideograph */ + ["\u8190", "\u8190"], /* CJK Ideograph */ + ["\u8191", "\u8191"], /* CJK Ideograph */ + ["\u8192", "\u8192"], /* CJK Ideograph */ + ["\u8193", "\u8193"], /* CJK Ideograph */ + ["\u8194", "\u8194"], /* CJK Ideograph */ + ["\u8195", "\u8195"], /* CJK Ideograph */ + ["\u8196", "\u8196"], /* CJK Ideograph */ + ["\u8197", "\u8197"], /* CJK Ideograph */ + ["\u8198", "\u8198"], /* CJK Ideograph */ + ["\u8199", "\u8199"], /* CJK Ideograph */ + ["\u819A", "\u819A"], /* CJK Ideograph */ + ["\u819B", "\u819B"], /* CJK Ideograph */ + ["\u819C", "\u819C"], /* CJK Ideograph */ + ["\u819D", "\u819D"], /* CJK Ideograph */ + ["\u819E", "\u819E"], /* CJK Ideograph */ + ["\u819F", "\u819F"], /* CJK Ideograph */ + ["\u81A0", "\u81A0"], /* CJK Ideograph */ + ["\u81A1", "\u81A1"], /* CJK Ideograph */ + ["\u81A2", "\u81A2"], /* CJK Ideograph */ + ["\u81A3", "\u81A3"], /* CJK Ideograph */ + ["\u81A4", "\u81A4"], /* CJK Ideograph */ + ["\u81A5", "\u81A5"], /* CJK Ideograph */ + ["\u81A6", "\u81A6"], /* CJK Ideograph */ + ["\u81A7", "\u81A7"], /* CJK Ideograph */ + ["\u81A8", "\u81A8"], /* CJK Ideograph */ + ["\u81A9", "\u81A9"], /* CJK Ideograph */ + ["\u81AA", "\u81AA"], /* CJK Ideograph */ + ["\u81AB", "\u81AB"], /* CJK Ideograph */ + ["\u81AC", "\u81AC"], /* CJK Ideograph */ + ["\u81AD", "\u81AD"], /* CJK Ideograph */ + ["\u81AE", "\u81AE"], /* CJK Ideograph */ + ["\u81AF", "\u81AF"], /* CJK Ideograph */ + ["\u81B0", "\u81B0"], /* CJK Ideograph */ + ["\u81B1", "\u81B1"], /* CJK Ideograph */ + ["\u81B2", "\u81B2"], /* CJK Ideograph */ + ["\u81B3", "\u81B3"], /* CJK Ideograph */ + ["\u81B4", "\u81B4"], /* CJK Ideograph */ + ["\u81B5", "\u81B5"], /* CJK Ideograph */ + ["\u81B6", "\u81B6"], /* CJK Ideograph */ + ["\u81B7", "\u81B7"], /* CJK Ideograph */ + ["\u81B8", "\u81B8"], /* CJK Ideograph */ + ["\u81B9", "\u81B9"], /* CJK Ideograph */ + ["\u81BA", "\u81BA"], /* CJK Ideograph */ + ["\u81BB", "\u81BB"], /* CJK Ideograph */ + ["\u81BC", "\u81BC"], /* CJK Ideograph */ + ["\u81BD", "\u81BD"], /* CJK Ideograph */ + ["\u81BE", "\u81BE"], /* CJK Ideograph */ + ["\u81BF", "\u81BF"], /* CJK Ideograph */ + ["\u81C0", "\u81C0"], /* CJK Ideograph */ + ["\u81C1", "\u81C1"], /* CJK Ideograph */ + ["\u81C2", "\u81C2"], /* CJK Ideograph */ + ["\u81C3", "\u81C3"], /* CJK Ideograph */ + ["\u81C4", "\u81C4"], /* CJK Ideograph */ + ["\u81C5", "\u81C5"], /* CJK Ideograph */ + ["\u81C6", "\u81C6"], /* CJK Ideograph */ + ["\u81C7", "\u81C7"], /* CJK Ideograph */ + ["\u81C8", "\u81C8"], /* CJK Ideograph */ + ["\u81C9", "\u81C9"], /* CJK Ideograph */ + ["\u81CA", "\u81CA"], /* CJK Ideograph */ + ["\u81CB", "\u81CB"], /* CJK Ideograph */ + ["\u81CC", "\u81CC"], /* CJK Ideograph */ + ["\u81CD", "\u81CD"], /* CJK Ideograph */ + ["\u81CE", "\u81CE"], /* CJK Ideograph */ + ["\u81CF", "\u81CF"], /* CJK Ideograph */ + ["\u81D0", "\u81D0"], /* CJK Ideograph */ + ["\u81D1", "\u81D1"], /* CJK Ideograph */ + ["\u81D2", "\u81D2"], /* CJK Ideograph */ + ["\u81D3", "\u81D3"], /* CJK Ideograph */ + ["\u81D4", "\u81D4"], /* CJK Ideograph */ + ["\u81D5", "\u81D5"], /* CJK Ideograph */ + ["\u81D6", "\u81D6"], /* CJK Ideograph */ + ["\u81D7", "\u81D7"], /* CJK Ideograph */ + ["\u81D8", "\u81D8"], /* CJK Ideograph */ + ["\u81D9", "\u81D9"], /* CJK Ideograph */ + ["\u81DA", "\u81DA"], /* CJK Ideograph */ + ["\u81DB", "\u81DB"], /* CJK Ideograph */ + ["\u81DC", "\u81DC"], /* CJK Ideograph */ + ["\u81DD", "\u81DD"], /* CJK Ideograph */ + ["\u81DE", "\u81DE"], /* CJK Ideograph */ + ["\u81DF", "\u81DF"], /* CJK Ideograph */ + ["\u81E0", "\u81E0"], /* CJK Ideograph */ + ["\u81E1", "\u81E1"], /* CJK Ideograph */ + ["\u81E2", "\u81E2"], /* CJK Ideograph */ + ["\u81E3", "\u81E3"], /* CJK Ideograph */ + ["\u81E4", "\u81E4"], /* CJK Ideograph */ + ["\u81E5", "\u81E5"], /* CJK Ideograph */ + ["\u81E6", "\u81E6"], /* CJK Ideograph */ + ["\u81E7", "\u81E7"], /* CJK Ideograph */ + ["\u81E8", "\u81E8"], /* CJK Ideograph */ + ["\u81E9", "\u81E9"], /* CJK Ideograph */ + ["\u81EA", "\u81EA"], /* CJK Ideograph */ + ["\u81EB", "\u81EB"], /* CJK Ideograph */ + ["\u81EC", "\u81EC"], /* CJK Ideograph */ + ["\u81ED", "\u81ED"], /* CJK Ideograph */ + ["\u81EE", "\u81EE"], /* CJK Ideograph */ + ["\u81EF", "\u81EF"], /* CJK Ideograph */ + ["\u81F0", "\u81F0"], /* CJK Ideograph */ + ["\u81F1", "\u81F1"], /* CJK Ideograph */ + ["\u81F2", "\u81F2"], /* CJK Ideograph */ + ["\u81F3", "\u81F3"], /* CJK Ideograph */ + ["\u81F4", "\u81F4"], /* CJK Ideograph */ + ["\u81F5", "\u81F5"], /* CJK Ideograph */ + ["\u81F6", "\u81F6"], /* CJK Ideograph */ + ["\u81F7", "\u81F7"], /* CJK Ideograph */ + ["\u81F8", "\u81F8"], /* CJK Ideograph */ + ["\u81F9", "\u81F9"], /* CJK Ideograph */ + ["\u81FA", "\u81FA"], /* CJK Ideograph */ + ["\u81FB", "\u81FB"], /* CJK Ideograph */ + ["\u81FC", "\u81FC"], /* CJK Ideograph */ + ["\u81FD", "\u81FD"], /* CJK Ideograph */ + ["\u81FE", "\u81FE"], /* CJK Ideograph */ + ["\u81FF", "\u81FF"], /* CJK Ideograph */ + ["\u8200", "\u8200"], /* CJK Ideograph */ + ["\u8201", "\u8201"], /* CJK Ideograph */ + ["\u8202", "\u8202"], /* CJK Ideograph */ + ["\u8203", "\u8203"], /* CJK Ideograph */ + ["\u8204", "\u8204"], /* CJK Ideograph */ + ["\u8205", "\u8205"], /* CJK Ideograph */ + ["\u8206", "\u8206"], /* CJK Ideograph */ + ["\u8207", "\u8207"], /* CJK Ideograph */ + ["\u8208", "\u8208"], /* CJK Ideograph */ + ["\u8209", "\u8209"], /* CJK Ideograph */ + ["\u820A", "\u820A"], /* CJK Ideograph */ + ["\u820B", "\u820B"], /* CJK Ideograph */ + ["\u820C", "\u820C"], /* CJK Ideograph */ + ["\u820D", "\u820D"], /* CJK Ideograph */ + ["\u820E", "\u820E"], /* CJK Ideograph */ + ["\u820F", "\u820F"], /* CJK Ideograph */ + ["\u8210", "\u8210"], /* CJK Ideograph */ + ["\u8211", "\u8211"], /* CJK Ideograph */ + ["\u8212", "\u8212"], /* CJK Ideograph */ + ["\u8213", "\u8213"], /* CJK Ideograph */ + ["\u8214", "\u8214"], /* CJK Ideograph */ + ["\u8215", "\u8215"], /* CJK Ideograph */ + ["\u8216", "\u8216"], /* CJK Ideograph */ + ["\u8217", "\u8217"], /* CJK Ideograph */ + ["\u8218", "\u8218"], /* CJK Ideograph */ + ["\u8219", "\u8219"], /* CJK Ideograph */ + ["\u821A", "\u821A"], /* CJK Ideograph */ + ["\u821B", "\u821B"], /* CJK Ideograph */ + ["\u821C", "\u821C"], /* CJK Ideograph */ + ["\u821D", "\u821D"], /* CJK Ideograph */ + ["\u821E", "\u821E"], /* CJK Ideograph */ + ["\u821F", "\u821F"], /* CJK Ideograph */ + ["\u8220", "\u8220"], /* CJK Ideograph */ + ["\u8221", "\u8221"], /* CJK Ideograph */ + ["\u8222", "\u8222"], /* CJK Ideograph */ + ["\u8223", "\u8223"], /* CJK Ideograph */ + ["\u8224", "\u8224"], /* CJK Ideograph */ + ["\u8225", "\u8225"], /* CJK Ideograph */ + ["\u8226", "\u8226"], /* CJK Ideograph */ + ["\u8227", "\u8227"], /* CJK Ideograph */ + ["\u8228", "\u8228"], /* CJK Ideograph */ + ["\u8229", "\u8229"], /* CJK Ideograph */ + ["\u822A", "\u822A"], /* CJK Ideograph */ + ["\u822B", "\u822B"], /* CJK Ideograph */ + ["\u822C", "\u822C"], /* CJK Ideograph */ + ["\u822D", "\u822D"], /* CJK Ideograph */ + ["\u822E", "\u822E"], /* CJK Ideograph */ + ["\u822F", "\u822F"], /* CJK Ideograph */ + ["\u8230", "\u8230"], /* CJK Ideograph */ + ["\u8231", "\u8231"], /* CJK Ideograph */ + ["\u8232", "\u8232"], /* CJK Ideograph */ + ["\u8233", "\u8233"], /* CJK Ideograph */ + ["\u8234", "\u8234"], /* CJK Ideograph */ + ["\u8235", "\u8235"], /* CJK Ideograph */ + ["\u8236", "\u8236"], /* CJK Ideograph */ + ["\u8237", "\u8237"], /* CJK Ideograph */ + ["\u8238", "\u8238"], /* CJK Ideograph */ + ["\u8239", "\u8239"], /* CJK Ideograph */ + ["\u823A", "\u823A"], /* CJK Ideograph */ + ["\u823B", "\u823B"], /* CJK Ideograph */ + ["\u823C", "\u823C"], /* CJK Ideograph */ + ["\u823D", "\u823D"], /* CJK Ideograph */ + ["\u823E", "\u823E"], /* CJK Ideograph */ + ["\u823F", "\u823F"], /* CJK Ideograph */ + ["\u8240", "\u8240"], /* CJK Ideograph */ + ["\u8241", "\u8241"], /* CJK Ideograph */ + ["\u8242", "\u8242"], /* CJK Ideograph */ + ["\u8243", "\u8243"], /* CJK Ideograph */ + ["\u8244", "\u8244"], /* CJK Ideograph */ + ["\u8245", "\u8245"], /* CJK Ideograph */ + ["\u8246", "\u8246"], /* CJK Ideograph */ + ["\u8247", "\u8247"], /* CJK Ideograph */ + ["\u8248", "\u8248"], /* CJK Ideograph */ + ["\u8249", "\u8249"], /* CJK Ideograph */ + ["\u824A", "\u824A"], /* CJK Ideograph */ + ["\u824B", "\u824B"], /* CJK Ideograph */ + ["\u824C", "\u824C"], /* CJK Ideograph */ + ["\u824D", "\u824D"], /* CJK Ideograph */ + ["\u824E", "\u824E"], /* CJK Ideograph */ + ["\u824F", "\u824F"], /* CJK Ideograph */ + ["\u8250", "\u8250"], /* CJK Ideograph */ + ["\u8251", "\u8251"], /* CJK Ideograph */ + ["\u8252", "\u8252"], /* CJK Ideograph */ + ["\u8253", "\u8253"], /* CJK Ideograph */ + ["\u8254", "\u8254"], /* CJK Ideograph */ + ["\u8255", "\u8255"], /* CJK Ideograph */ + ["\u8256", "\u8256"], /* CJK Ideograph */ + ["\u8257", "\u8257"], /* CJK Ideograph */ + ["\u8258", "\u8258"], /* CJK Ideograph */ + ["\u8259", "\u8259"], /* CJK Ideograph */ + ["\u825A", "\u825A"], /* CJK Ideograph */ + ["\u825B", "\u825B"], /* CJK Ideograph */ + ["\u825C", "\u825C"], /* CJK Ideograph */ + ["\u825D", "\u825D"], /* CJK Ideograph */ + ["\u825E", "\u825E"], /* CJK Ideograph */ + ["\u825F", "\u825F"], /* CJK Ideograph */ + ["\u8260", "\u8260"], /* CJK Ideograph */ + ["\u8261", "\u8261"], /* CJK Ideograph */ + ["\u8262", "\u8262"], /* CJK Ideograph */ + ["\u8263", "\u8263"], /* CJK Ideograph */ + ["\u8264", "\u8264"], /* CJK Ideograph */ + ["\u8265", "\u8265"], /* CJK Ideograph */ + ["\u8266", "\u8266"], /* CJK Ideograph */ + ["\u8267", "\u8267"], /* CJK Ideograph */ + ["\u8268", "\u8268"], /* CJK Ideograph */ + ["\u8269", "\u8269"], /* CJK Ideograph */ + ["\u826A", "\u826A"], /* CJK Ideograph */ + ["\u826B", "\u826B"], /* CJK Ideograph */ + ["\u826C", "\u826C"], /* CJK Ideograph */ + ["\u826D", "\u826D"], /* CJK Ideograph */ + ["\u826E", "\u826E"], /* CJK Ideograph */ + ["\u826F", "\u826F"], /* CJK Ideograph */ + ["\u8270", "\u8270"], /* CJK Ideograph */ + ["\u8271", "\u8271"], /* CJK Ideograph */ + ["\u8272", "\u8272"], /* CJK Ideograph */ + ["\u8273", "\u8273"], /* CJK Ideograph */ + ["\u8274", "\u8274"], /* CJK Ideograph */ + ["\u8275", "\u8275"], /* CJK Ideograph */ + ["\u8276", "\u8276"], /* CJK Ideograph */ + ["\u8277", "\u8277"], /* CJK Ideograph */ + ["\u8278", "\u8278"], /* CJK Ideograph */ + ["\u8279", "\u8279"], /* CJK Ideograph */ + ["\u827A", "\u827A"], /* CJK Ideograph */ + ["\u827B", "\u827B"], /* CJK Ideograph */ + ["\u827C", "\u827C"], /* CJK Ideograph */ + ["\u827D", "\u827D"], /* CJK Ideograph */ + ["\u827E", "\u827E"], /* CJK Ideograph */ + ["\u827F", "\u827F"], /* CJK Ideograph */ + ["\u8280", "\u8280"], /* CJK Ideograph */ + ["\u8281", "\u8281"], /* CJK Ideograph */ + ["\u8282", "\u8282"], /* CJK Ideograph */ + ["\u8283", "\u8283"], /* CJK Ideograph */ + ["\u8284", "\u8284"], /* CJK Ideograph */ + ["\u8285", "\u8285"], /* CJK Ideograph */ + ["\u8286", "\u8286"], /* CJK Ideograph */ + ["\u8287", "\u8287"], /* CJK Ideograph */ + ["\u8288", "\u8288"], /* CJK Ideograph */ + ["\u8289", "\u8289"], /* CJK Ideograph */ + ["\u828A", "\u828A"], /* CJK Ideograph */ + ["\u828B", "\u828B"], /* CJK Ideograph */ + ["\u828C", "\u828C"], /* CJK Ideograph */ + ["\u828D", "\u828D"], /* CJK Ideograph */ + ["\u828E", "\u828E"], /* CJK Ideograph */ + ["\u828F", "\u828F"], /* CJK Ideograph */ + ["\u8290", "\u8290"], /* CJK Ideograph */ + ["\u8291", "\u8291"], /* CJK Ideograph */ + ["\u8292", "\u8292"], /* CJK Ideograph */ + ["\u8293", "\u8293"], /* CJK Ideograph */ + ["\u8294", "\u8294"], /* CJK Ideograph */ + ["\u8295", "\u8295"], /* CJK Ideograph */ + ["\u8296", "\u8296"], /* CJK Ideograph */ + ["\u8297", "\u8297"], /* CJK Ideograph */ + ["\u8298", "\u8298"], /* CJK Ideograph */ + ["\u8299", "\u8299"], /* CJK Ideograph */ + ["\u829A", "\u829A"], /* CJK Ideograph */ + ["\u829B", "\u829B"], /* CJK Ideograph */ + ["\u829C", "\u829C"], /* CJK Ideograph */ + ["\u829D", "\u829D"], /* CJK Ideograph */ + ["\u829E", "\u829E"], /* CJK Ideograph */ + ["\u829F", "\u829F"], /* CJK Ideograph */ + ["\u82A0", "\u82A0"], /* CJK Ideograph */ + ["\u82A1", "\u82A1"], /* CJK Ideograph */ + ["\u82A2", "\u82A2"], /* CJK Ideograph */ + ["\u82A3", "\u82A3"], /* CJK Ideograph */ + ["\u82A4", "\u82A4"], /* CJK Ideograph */ + ["\u82A5", "\u82A5"], /* CJK Ideograph */ + ["\u82A6", "\u82A6"], /* CJK Ideograph */ + ["\u82A7", "\u82A7"], /* CJK Ideograph */ + ["\u82A8", "\u82A8"], /* CJK Ideograph */ + ["\u82A9", "\u82A9"], /* CJK Ideograph */ + ["\u82AA", "\u82AA"], /* CJK Ideograph */ + ["\u82AB", "\u82AB"], /* CJK Ideograph */ + ["\u82AC", "\u82AC"], /* CJK Ideograph */ + ["\u82AD", "\u82AD"], /* CJK Ideograph */ + ["\u82AE", "\u82AE"], /* CJK Ideograph */ + ["\u82AF", "\u82AF"], /* CJK Ideograph */ + ["\u82B0", "\u82B0"], /* CJK Ideograph */ + ["\u82B1", "\u82B1"], /* CJK Ideograph */ + ["\u82B2", "\u82B2"], /* CJK Ideograph */ + ["\u82B3", "\u82B3"], /* CJK Ideograph */ + ["\u82B4", "\u82B4"], /* CJK Ideograph */ + ["\u82B5", "\u82B5"], /* CJK Ideograph */ + ["\u82B6", "\u82B6"], /* CJK Ideograph */ + ["\u82B7", "\u82B7"], /* CJK Ideograph */ + ["\u82B8", "\u82B8"], /* CJK Ideograph */ + ["\u82B9", "\u82B9"], /* CJK Ideograph */ + ["\u82BA", "\u82BA"], /* CJK Ideograph */ + ["\u82BB", "\u82BB"], /* CJK Ideograph */ + ["\u82BC", "\u82BC"], /* CJK Ideograph */ + ["\u82BD", "\u82BD"], /* CJK Ideograph */ + ["\u82BE", "\u82BE"], /* CJK Ideograph */ + ["\u82BF", "\u82BF"], /* CJK Ideograph */ + ["\u82C0", "\u82C0"], /* CJK Ideograph */ + ["\u82C1", "\u82C1"], /* CJK Ideograph */ + ["\u82C2", "\u82C2"], /* CJK Ideograph */ + ["\u82C3", "\u82C3"], /* CJK Ideograph */ + ["\u82C4", "\u82C4"], /* CJK Ideograph */ + ["\u82C5", "\u82C5"], /* CJK Ideograph */ + ["\u82C6", "\u82C6"], /* CJK Ideograph */ + ["\u82C7", "\u82C7"], /* CJK Ideograph */ + ["\u82C8", "\u82C8"], /* CJK Ideograph */ + ["\u82C9", "\u82C9"], /* CJK Ideograph */ + ["\u82CA", "\u82CA"], /* CJK Ideograph */ + ["\u82CB", "\u82CB"], /* CJK Ideograph */ + ["\u82CC", "\u82CC"], /* CJK Ideograph */ + ["\u82CD", "\u82CD"], /* CJK Ideograph */ + ["\u82CE", "\u82CE"], /* CJK Ideograph */ + ["\u82CF", "\u82CF"], /* CJK Ideograph */ + ["\u82D0", "\u82D0"], /* CJK Ideograph */ + ["\u82D1", "\u82D1"], /* CJK Ideograph */ + ["\u82D2", "\u82D2"], /* CJK Ideograph */ + ["\u82D3", "\u82D3"], /* CJK Ideograph */ + ["\u82D4", "\u82D4"], /* CJK Ideograph */ + ["\u82D5", "\u82D5"], /* CJK Ideograph */ + ["\u82D6", "\u82D6"], /* CJK Ideograph */ + ["\u82D7", "\u82D7"], /* CJK Ideograph */ + ["\u82D8", "\u82D8"], /* CJK Ideograph */ + ["\u82D9", "\u82D9"], /* CJK Ideograph */ + ["\u82DA", "\u82DA"], /* CJK Ideograph */ + ["\u82DB", "\u82DB"], /* CJK Ideograph */ + ["\u82DC", "\u82DC"], /* CJK Ideograph */ + ["\u82DD", "\u82DD"], /* CJK Ideograph */ + ["\u82DE", "\u82DE"], /* CJK Ideograph */ + ["\u82DF", "\u82DF"], /* CJK Ideograph */ + ["\u82E0", "\u82E0"], /* CJK Ideograph */ + ["\u82E1", "\u82E1"], /* CJK Ideograph */ + ["\u82E2", "\u82E2"], /* CJK Ideograph */ + ["\u82E3", "\u82E3"], /* CJK Ideograph */ + ["\u82E4", "\u82E4"], /* CJK Ideograph */ + ["\u82E5", "\u82E5"], /* CJK Ideograph */ + ["\u82E6", "\u82E6"], /* CJK Ideograph */ + ["\u82E7", "\u82E7"], /* CJK Ideograph */ + ["\u82E8", "\u82E8"], /* CJK Ideograph */ + ["\u82E9", "\u82E9"], /* CJK Ideograph */ + ["\u82EA", "\u82EA"], /* CJK Ideograph */ + ["\u82EB", "\u82EB"], /* CJK Ideograph */ + ["\u82EC", "\u82EC"], /* CJK Ideograph */ + ["\u82ED", "\u82ED"], /* CJK Ideograph */ + ["\u82EE", "\u82EE"], /* CJK Ideograph */ + ["\u82EF", "\u82EF"], /* CJK Ideograph */ + ["\u82F0", "\u82F0"], /* CJK Ideograph */ + ["\u82F1", "\u82F1"], /* CJK Ideograph */ + ["\u82F2", "\u82F2"], /* CJK Ideograph */ + ["\u82F3", "\u82F3"], /* CJK Ideograph */ + ["\u82F4", "\u82F4"], /* CJK Ideograph */ + ["\u82F5", "\u82F5"], /* CJK Ideograph */ + ["\u82F6", "\u82F6"], /* CJK Ideograph */ + ["\u82F7", "\u82F7"], /* CJK Ideograph */ + ["\u82F8", "\u82F8"], /* CJK Ideograph */ + ["\u82F9", "\u82F9"], /* CJK Ideograph */ + ["\u82FA", "\u82FA"], /* CJK Ideograph */ + ["\u82FB", "\u82FB"], /* CJK Ideograph */ + ["\u82FC", "\u82FC"], /* CJK Ideograph */ + ["\u82FD", "\u82FD"], /* CJK Ideograph */ + ["\u82FE", "\u82FE"], /* CJK Ideograph */ + ["\u82FF", "\u82FF"], /* CJK Ideograph */ + ["\u8300", "\u8300"], /* CJK Ideograph */ + ["\u8301", "\u8301"], /* CJK Ideograph */ + ["\u8302", "\u8302"], /* CJK Ideograph */ + ["\u8303", "\u8303"], /* CJK Ideograph */ + ["\u8304", "\u8304"], /* CJK Ideograph */ + ["\u8305", "\u8305"], /* CJK Ideograph */ + ["\u8306", "\u8306"], /* CJK Ideograph */ + ["\u8307", "\u8307"], /* CJK Ideograph */ + ["\u8308", "\u8308"], /* CJK Ideograph */ + ["\u8309", "\u8309"], /* CJK Ideograph */ + ["\u830A", "\u830A"], /* CJK Ideograph */ + ["\u830B", "\u830B"], /* CJK Ideograph */ + ["\u830C", "\u830C"], /* CJK Ideograph */ + ["\u830D", "\u830D"], /* CJK Ideograph */ + ["\u830E", "\u830E"], /* CJK Ideograph */ + ["\u830F", "\u830F"], /* CJK Ideograph */ + ["\u8310", "\u8310"], /* CJK Ideograph */ + ["\u8311", "\u8311"], /* CJK Ideograph */ + ["\u8312", "\u8312"], /* CJK Ideograph */ + ["\u8313", "\u8313"], /* CJK Ideograph */ + ["\u8314", "\u8314"], /* CJK Ideograph */ + ["\u8315", "\u8315"], /* CJK Ideograph */ + ["\u8316", "\u8316"], /* CJK Ideograph */ + ["\u8317", "\u8317"], /* CJK Ideograph */ + ["\u8318", "\u8318"], /* CJK Ideograph */ + ["\u8319", "\u8319"], /* CJK Ideograph */ + ["\u831A", "\u831A"], /* CJK Ideograph */ + ["\u831B", "\u831B"], /* CJK Ideograph */ + ["\u831C", "\u831C"], /* CJK Ideograph */ + ["\u831D", "\u831D"], /* CJK Ideograph */ + ["\u831E", "\u831E"], /* CJK Ideograph */ + ["\u831F", "\u831F"], /* CJK Ideograph */ + ["\u8320", "\u8320"], /* CJK Ideograph */ + ["\u8321", "\u8321"], /* CJK Ideograph */ + ["\u8322", "\u8322"], /* CJK Ideograph */ + ["\u8323", "\u8323"], /* CJK Ideograph */ + ["\u8324", "\u8324"], /* CJK Ideograph */ + ["\u8325", "\u8325"], /* CJK Ideograph */ + ["\u8326", "\u8326"], /* CJK Ideograph */ + ["\u8327", "\u8327"], /* CJK Ideograph */ + ["\u8328", "\u8328"], /* CJK Ideograph */ + ["\u8329", "\u8329"], /* CJK Ideograph */ + ["\u832A", "\u832A"], /* CJK Ideograph */ + ["\u832B", "\u832B"], /* CJK Ideograph */ + ["\u832C", "\u832C"], /* CJK Ideograph */ + ["\u832D", "\u832D"], /* CJK Ideograph */ + ["\u832E", "\u832E"], /* CJK Ideograph */ + ["\u832F", "\u832F"], /* CJK Ideograph */ + ["\u8330", "\u8330"], /* CJK Ideograph */ + ["\u8331", "\u8331"], /* CJK Ideograph */ + ["\u8332", "\u8332"], /* CJK Ideograph */ + ["\u8333", "\u8333"], /* CJK Ideograph */ + ["\u8334", "\u8334"], /* CJK Ideograph */ + ["\u8335", "\u8335"], /* CJK Ideograph */ + ["\u8336", "\u8336"], /* CJK Ideograph */ + ["\u8337", "\u8337"], /* CJK Ideograph */ + ["\u8338", "\u8338"], /* CJK Ideograph */ + ["\u8339", "\u8339"], /* CJK Ideograph */ + ["\u833A", "\u833A"], /* CJK Ideograph */ + ["\u833B", "\u833B"], /* CJK Ideograph */ + ["\u833C", "\u833C"], /* CJK Ideograph */ + ["\u833D", "\u833D"], /* CJK Ideograph */ + ["\u833E", "\u833E"], /* CJK Ideograph */ + ["\u833F", "\u833F"], /* CJK Ideograph */ + ["\u8340", "\u8340"], /* CJK Ideograph */ + ["\u8341", "\u8341"], /* CJK Ideograph */ + ["\u8342", "\u8342"], /* CJK Ideograph */ + ["\u8343", "\u8343"], /* CJK Ideograph */ + ["\u8344", "\u8344"], /* CJK Ideograph */ + ["\u8345", "\u8345"], /* CJK Ideograph */ + ["\u8346", "\u8346"], /* CJK Ideograph */ + ["\u8347", "\u8347"], /* CJK Ideograph */ + ["\u8348", "\u8348"], /* CJK Ideograph */ + ["\u8349", "\u8349"], /* CJK Ideograph */ + ["\u834A", "\u834A"], /* CJK Ideograph */ + ["\u834B", "\u834B"], /* CJK Ideograph */ + ["\u834C", "\u834C"], /* CJK Ideograph */ + ["\u834D", "\u834D"], /* CJK Ideograph */ + ["\u834E", "\u834E"], /* CJK Ideograph */ + ["\u834F", "\u834F"], /* CJK Ideograph */ + ["\u8350", "\u8350"], /* CJK Ideograph */ + ["\u8351", "\u8351"], /* CJK Ideograph */ + ["\u8352", "\u8352"], /* CJK Ideograph */ + ["\u8353", "\u8353"], /* CJK Ideograph */ + ["\u8354", "\u8354"], /* CJK Ideograph */ + ["\u8355", "\u8355"], /* CJK Ideograph */ + ["\u8356", "\u8356"], /* CJK Ideograph */ + ["\u8357", "\u8357"], /* CJK Ideograph */ + ["\u8358", "\u8358"], /* CJK Ideograph */ + ["\u8359", "\u8359"], /* CJK Ideograph */ + ["\u835A", "\u835A"], /* CJK Ideograph */ + ["\u835B", "\u835B"], /* CJK Ideograph */ + ["\u835C", "\u835C"], /* CJK Ideograph */ + ["\u835D", "\u835D"], /* CJK Ideograph */ + ["\u835E", "\u835E"], /* CJK Ideograph */ + ["\u835F", "\u835F"], /* CJK Ideograph */ + ["\u8360", "\u8360"], /* CJK Ideograph */ + ["\u8361", "\u8361"], /* CJK Ideograph */ + ["\u8362", "\u8362"], /* CJK Ideograph */ + ["\u8363", "\u8363"], /* CJK Ideograph */ + ["\u8364", "\u8364"], /* CJK Ideograph */ + ["\u8365", "\u8365"], /* CJK Ideograph */ + ["\u8366", "\u8366"], /* CJK Ideograph */ + ["\u8367", "\u8367"], /* CJK Ideograph */ + ["\u8368", "\u8368"], /* CJK Ideograph */ + ["\u8369", "\u8369"], /* CJK Ideograph */ + ["\u836A", "\u836A"], /* CJK Ideograph */ + ["\u836B", "\u836B"], /* CJK Ideograph */ + ["\u836C", "\u836C"], /* CJK Ideograph */ + ["\u836D", "\u836D"], /* CJK Ideograph */ + ["\u836E", "\u836E"], /* CJK Ideograph */ + ["\u836F", "\u836F"], /* CJK Ideograph */ + ["\u8370", "\u8370"], /* CJK Ideograph */ + ["\u8371", "\u8371"], /* CJK Ideograph */ + ["\u8372", "\u8372"], /* CJK Ideograph */ + ["\u8373", "\u8373"], /* CJK Ideograph */ + ["\u8374", "\u8374"], /* CJK Ideograph */ + ["\u8375", "\u8375"], /* CJK Ideograph */ + ["\u8376", "\u8376"], /* CJK Ideograph */ + ["\u8377", "\u8377"], /* CJK Ideograph */ + ["\u8378", "\u8378"], /* CJK Ideograph */ + ["\u8379", "\u8379"], /* CJK Ideograph */ + ["\u837A", "\u837A"], /* CJK Ideograph */ + ["\u837B", "\u837B"], /* CJK Ideograph */ + ["\u837C", "\u837C"], /* CJK Ideograph */ + ["\u837D", "\u837D"], /* CJK Ideograph */ + ["\u837E", "\u837E"], /* CJK Ideograph */ + ["\u837F", "\u837F"], /* CJK Ideograph */ + ["\u8380", "\u8380"], /* CJK Ideograph */ + ["\u8381", "\u8381"], /* CJK Ideograph */ + ["\u8382", "\u8382"], /* CJK Ideograph */ + ["\u8383", "\u8383"], /* CJK Ideograph */ + ["\u8384", "\u8384"], /* CJK Ideograph */ + ["\u8385", "\u8385"], /* CJK Ideograph */ + ["\u8386", "\u8386"], /* CJK Ideograph */ + ["\u8387", "\u8387"], /* CJK Ideograph */ + ["\u8388", "\u8388"], /* CJK Ideograph */ + ["\u8389", "\u8389"], /* CJK Ideograph */ + ["\u838A", "\u838A"], /* CJK Ideograph */ + ["\u838B", "\u838B"], /* CJK Ideograph */ + ["\u838C", "\u838C"], /* CJK Ideograph */ + ["\u838D", "\u838D"], /* CJK Ideograph */ + ["\u838E", "\u838E"], /* CJK Ideograph */ + ["\u838F", "\u838F"], /* CJK Ideograph */ + ["\u8390", "\u8390"], /* CJK Ideograph */ + ["\u8391", "\u8391"], /* CJK Ideograph */ + ["\u8392", "\u8392"], /* CJK Ideograph */ + ["\u8393", "\u8393"], /* CJK Ideograph */ + ["\u8394", "\u8394"], /* CJK Ideograph */ + ["\u8395", "\u8395"], /* CJK Ideograph */ + ["\u8396", "\u8396"], /* CJK Ideograph */ + ["\u8397", "\u8397"], /* CJK Ideograph */ + ["\u8398", "\u8398"], /* CJK Ideograph */ + ["\u8399", "\u8399"], /* CJK Ideograph */ + ["\u839A", "\u839A"], /* CJK Ideograph */ + ["\u839B", "\u839B"], /* CJK Ideograph */ + ["\u839C", "\u839C"], /* CJK Ideograph */ + ["\u839D", "\u839D"], /* CJK Ideograph */ + ["\u839E", "\u839E"], /* CJK Ideograph */ + ["\u839F", "\u839F"], /* CJK Ideograph */ + ["\u83A0", "\u83A0"], /* CJK Ideograph */ + ["\u83A1", "\u83A1"], /* CJK Ideograph */ + ["\u83A2", "\u83A2"], /* CJK Ideograph */ + ["\u83A3", "\u83A3"], /* CJK Ideograph */ + ["\u83A4", "\u83A4"], /* CJK Ideograph */ + ["\u83A5", "\u83A5"], /* CJK Ideograph */ + ["\u83A6", "\u83A6"], /* CJK Ideograph */ + ["\u83A7", "\u83A7"], /* CJK Ideograph */ + ["\u83A8", "\u83A8"], /* CJK Ideograph */ + ["\u83A9", "\u83A9"], /* CJK Ideograph */ + ["\u83AA", "\u83AA"], /* CJK Ideograph */ + ["\u83AB", "\u83AB"], /* CJK Ideograph */ + ["\u83AC", "\u83AC"], /* CJK Ideograph */ + ["\u83AD", "\u83AD"], /* CJK Ideograph */ + ["\u83AE", "\u83AE"], /* CJK Ideograph */ + ["\u83AF", "\u83AF"], /* CJK Ideograph */ + ["\u83B0", "\u83B0"], /* CJK Ideograph */ + ["\u83B1", "\u83B1"], /* CJK Ideograph */ + ["\u83B2", "\u83B2"], /* CJK Ideograph */ + ["\u83B3", "\u83B3"], /* CJK Ideograph */ + ["\u83B4", "\u83B4"], /* CJK Ideograph */ + ["\u83B5", "\u83B5"], /* CJK Ideograph */ + ["\u83B6", "\u83B6"], /* CJK Ideograph */ + ["\u83B7", "\u83B7"], /* CJK Ideograph */ + ["\u83B8", "\u83B8"], /* CJK Ideograph */ + ["\u83B9", "\u83B9"], /* CJK Ideograph */ + ["\u83BA", "\u83BA"], /* CJK Ideograph */ + ["\u83BB", "\u83BB"], /* CJK Ideograph */ + ["\u83BC", "\u83BC"], /* CJK Ideograph */ + ["\u83BD", "\u83BD"], /* CJK Ideograph */ + ["\u83BE", "\u83BE"], /* CJK Ideograph */ + ["\u83BF", "\u83BF"], /* CJK Ideograph */ + ["\u83C0", "\u83C0"], /* CJK Ideograph */ + ["\u83C1", "\u83C1"], /* CJK Ideograph */ + ["\u83C2", "\u83C2"], /* CJK Ideograph */ + ["\u83C3", "\u83C3"], /* CJK Ideograph */ + ["\u83C4", "\u83C4"], /* CJK Ideograph */ + ["\u83C5", "\u83C5"], /* CJK Ideograph */ + ["\u83C6", "\u83C6"], /* CJK Ideograph */ + ["\u83C7", "\u83C7"], /* CJK Ideograph */ + ["\u83C8", "\u83C8"], /* CJK Ideograph */ + ["\u83C9", "\u83C9"], /* CJK Ideograph */ + ["\u83CA", "\u83CA"], /* CJK Ideograph */ + ["\u83CB", "\u83CB"], /* CJK Ideograph */ + ["\u83CC", "\u83CC"], /* CJK Ideograph */ + ["\u83CD", "\u83CD"], /* CJK Ideograph */ + ["\u83CE", "\u83CE"], /* CJK Ideograph */ + ["\u83CF", "\u83CF"], /* CJK Ideograph */ + ["\u83D0", "\u83D0"], /* CJK Ideograph */ + ["\u83D1", "\u83D1"], /* CJK Ideograph */ + ["\u83D2", "\u83D2"], /* CJK Ideograph */ + ["\u83D3", "\u83D3"], /* CJK Ideograph */ + ["\u83D4", "\u83D4"], /* CJK Ideograph */ + ["\u83D5", "\u83D5"], /* CJK Ideograph */ + ["\u83D6", "\u83D6"], /* CJK Ideograph */ + ["\u83D7", "\u83D7"], /* CJK Ideograph */ + ["\u83D8", "\u83D8"], /* CJK Ideograph */ + ["\u83D9", "\u83D9"], /* CJK Ideograph */ + ["\u83DA", "\u83DA"], /* CJK Ideograph */ + ["\u83DB", "\u83DB"], /* CJK Ideograph */ + ["\u83DC", "\u83DC"], /* CJK Ideograph */ + ["\u83DD", "\u83DD"], /* CJK Ideograph */ + ["\u83DE", "\u83DE"], /* CJK Ideograph */ + ["\u83DF", "\u83DF"], /* CJK Ideograph */ + ["\u83E0", "\u83E0"], /* CJK Ideograph */ + ["\u83E1", "\u83E1"], /* CJK Ideograph */ + ["\u83E2", "\u83E2"], /* CJK Ideograph */ + ["\u83E3", "\u83E3"], /* CJK Ideograph */ + ["\u83E4", "\u83E4"], /* CJK Ideograph */ + ["\u83E5", "\u83E5"], /* CJK Ideograph */ + ["\u83E6", "\u83E6"], /* CJK Ideograph */ + ["\u83E7", "\u83E7"], /* CJK Ideograph */ + ["\u83E8", "\u83E8"], /* CJK Ideograph */ + ["\u83E9", "\u83E9"], /* CJK Ideograph */ + ["\u83EA", "\u83EA"], /* CJK Ideograph */ + ["\u83EB", "\u83EB"], /* CJK Ideograph */ + ["\u83EC", "\u83EC"], /* CJK Ideograph */ + ["\u83ED", "\u83ED"], /* CJK Ideograph */ + ["\u83EE", "\u83EE"], /* CJK Ideograph */ + ["\u83EF", "\u83EF"], /* CJK Ideograph */ + ["\u83F0", "\u83F0"], /* CJK Ideograph */ + ["\u83F1", "\u83F1"], /* CJK Ideograph */ + ["\u83F2", "\u83F2"], /* CJK Ideograph */ + ["\u83F3", "\u83F3"], /* CJK Ideograph */ + ["\u83F4", "\u83F4"], /* CJK Ideograph */ + ["\u83F5", "\u83F5"], /* CJK Ideograph */ + ["\u83F6", "\u83F6"], /* CJK Ideograph */ + ["\u83F7", "\u83F7"], /* CJK Ideograph */ + ["\u83F8", "\u83F8"], /* CJK Ideograph */ + ["\u83F9", "\u83F9"], /* CJK Ideograph */ + ["\u83FA", "\u83FA"], /* CJK Ideograph */ + ["\u83FB", "\u83FB"], /* CJK Ideograph */ + ["\u83FC", "\u83FC"], /* CJK Ideograph */ + ["\u83FD", "\u83FD"], /* CJK Ideograph */ + ["\u83FE", "\u83FE"], /* CJK Ideograph */ + ["\u83FF", "\u83FF"], /* CJK Ideograph */ + ["\u8400", "\u8400"], /* CJK Ideograph */ + ["\u8401", "\u8401"], /* CJK Ideograph */ + ["\u8402", "\u8402"], /* CJK Ideograph */ + ["\u8403", "\u8403"], /* CJK Ideograph */ + ["\u8404", "\u8404"], /* CJK Ideograph */ + ["\u8405", "\u8405"], /* CJK Ideograph */ + ["\u8406", "\u8406"], /* CJK Ideograph */ + ["\u8407", "\u8407"], /* CJK Ideograph */ + ["\u8408", "\u8408"], /* CJK Ideograph */ + ["\u8409", "\u8409"], /* CJK Ideograph */ + ["\u840A", "\u840A"], /* CJK Ideograph */ + ["\u840B", "\u840B"], /* CJK Ideograph */ + ["\u840C", "\u840C"], /* CJK Ideograph */ + ["\u840D", "\u840D"], /* CJK Ideograph */ + ["\u840E", "\u840E"], /* CJK Ideograph */ + ["\u840F", "\u840F"], /* CJK Ideograph */ + ["\u8410", "\u8410"], /* CJK Ideograph */ + ["\u8411", "\u8411"], /* CJK Ideograph */ + ["\u8412", "\u8412"], /* CJK Ideograph */ + ["\u8413", "\u8413"], /* CJK Ideograph */ + ["\u8414", "\u8414"], /* CJK Ideograph */ + ["\u8415", "\u8415"], /* CJK Ideograph */ + ["\u8416", "\u8416"], /* CJK Ideograph */ + ["\u8417", "\u8417"], /* CJK Ideograph */ + ["\u8418", "\u8418"], /* CJK Ideograph */ + ["\u8419", "\u8419"], /* CJK Ideograph */ + ["\u841A", "\u841A"], /* CJK Ideograph */ + ["\u841B", "\u841B"], /* CJK Ideograph */ + ["\u841C", "\u841C"], /* CJK Ideograph */ + ["\u841D", "\u841D"], /* CJK Ideograph */ + ["\u841E", "\u841E"], /* CJK Ideograph */ + ["\u841F", "\u841F"], /* CJK Ideograph */ + ["\u8420", "\u8420"], /* CJK Ideograph */ + ["\u8421", "\u8421"], /* CJK Ideograph */ + ["\u8422", "\u8422"], /* CJK Ideograph */ + ["\u8423", "\u8423"], /* CJK Ideograph */ + ["\u8424", "\u8424"], /* CJK Ideograph */ + ["\u8425", "\u8425"], /* CJK Ideograph */ + ["\u8426", "\u8426"], /* CJK Ideograph */ + ["\u8427", "\u8427"], /* CJK Ideograph */ + ["\u8428", "\u8428"], /* CJK Ideograph */ + ["\u8429", "\u8429"], /* CJK Ideograph */ + ["\u842A", "\u842A"], /* CJK Ideograph */ + ["\u842B", "\u842B"], /* CJK Ideograph */ + ["\u842C", "\u842C"], /* CJK Ideograph */ + ["\u842D", "\u842D"], /* CJK Ideograph */ + ["\u842E", "\u842E"], /* CJK Ideograph */ + ["\u842F", "\u842F"], /* CJK Ideograph */ + ["\u8430", "\u8430"], /* CJK Ideograph */ + ["\u8431", "\u8431"], /* CJK Ideograph */ + ["\u8432", "\u8432"], /* CJK Ideograph */ + ["\u8433", "\u8433"], /* CJK Ideograph */ + ["\u8434", "\u8434"], /* CJK Ideograph */ + ["\u8435", "\u8435"], /* CJK Ideograph */ + ["\u8436", "\u8436"], /* CJK Ideograph */ + ["\u8437", "\u8437"], /* CJK Ideograph */ + ["\u8438", "\u8438"], /* CJK Ideograph */ + ["\u8439", "\u8439"], /* CJK Ideograph */ + ["\u843A", "\u843A"], /* CJK Ideograph */ + ["\u843B", "\u843B"], /* CJK Ideograph */ + ["\u843C", "\u843C"], /* CJK Ideograph */ + ["\u843D", "\u843D"], /* CJK Ideograph */ + ["\u843E", "\u843E"], /* CJK Ideograph */ + ["\u843F", "\u843F"], /* CJK Ideograph */ + ["\u8440", "\u8440"], /* CJK Ideograph */ + ["\u8441", "\u8441"], /* CJK Ideograph */ + ["\u8442", "\u8442"], /* CJK Ideograph */ + ["\u8443", "\u8443"], /* CJK Ideograph */ + ["\u8444", "\u8444"], /* CJK Ideograph */ + ["\u8445", "\u8445"], /* CJK Ideograph */ + ["\u8446", "\u8446"], /* CJK Ideograph */ + ["\u8447", "\u8447"], /* CJK Ideograph */ + ["\u8448", "\u8448"], /* CJK Ideograph */ + ["\u8449", "\u8449"], /* CJK Ideograph */ + ["\u844A", "\u844A"], /* CJK Ideograph */ + ["\u844B", "\u844B"], /* CJK Ideograph */ + ["\u844C", "\u844C"], /* CJK Ideograph */ + ["\u844D", "\u844D"], /* CJK Ideograph */ + ["\u844E", "\u844E"], /* CJK Ideograph */ + ["\u844F", "\u844F"], /* CJK Ideograph */ + ["\u8450", "\u8450"], /* CJK Ideograph */ + ["\u8451", "\u8451"], /* CJK Ideograph */ + ["\u8452", "\u8452"], /* CJK Ideograph */ + ["\u8453", "\u8453"], /* CJK Ideograph */ + ["\u8454", "\u8454"], /* CJK Ideograph */ + ["\u8455", "\u8455"], /* CJK Ideograph */ + ["\u8456", "\u8456"], /* CJK Ideograph */ + ["\u8457", "\u8457"], /* CJK Ideograph */ + ["\u8458", "\u8458"], /* CJK Ideograph */ + ["\u8459", "\u8459"], /* CJK Ideograph */ + ["\u845A", "\u845A"], /* CJK Ideograph */ + ["\u845B", "\u845B"], /* CJK Ideograph */ + ["\u845C", "\u845C"], /* CJK Ideograph */ + ["\u845D", "\u845D"], /* CJK Ideograph */ + ["\u845E", "\u845E"], /* CJK Ideograph */ + ["\u845F", "\u845F"], /* CJK Ideograph */ + ["\u8460", "\u8460"], /* CJK Ideograph */ + ["\u8461", "\u8461"], /* CJK Ideograph */ + ["\u8462", "\u8462"], /* CJK Ideograph */ + ["\u8463", "\u8463"], /* CJK Ideograph */ + ["\u8464", "\u8464"], /* CJK Ideograph */ + ["\u8465", "\u8465"], /* CJK Ideograph */ + ["\u8466", "\u8466"], /* CJK Ideograph */ + ["\u8467", "\u8467"], /* CJK Ideograph */ + ["\u8468", "\u8468"], /* CJK Ideograph */ + ["\u8469", "\u8469"], /* CJK Ideograph */ + ["\u846A", "\u846A"], /* CJK Ideograph */ + ["\u846B", "\u846B"], /* CJK Ideograph */ + ["\u846C", "\u846C"], /* CJK Ideograph */ + ["\u846D", "\u846D"], /* CJK Ideograph */ + ["\u846E", "\u846E"], /* CJK Ideograph */ + ["\u846F", "\u846F"], /* CJK Ideograph */ + ["\u8470", "\u8470"], /* CJK Ideograph */ + ["\u8471", "\u8471"], /* CJK Ideograph */ + ["\u8472", "\u8472"], /* CJK Ideograph */ + ["\u8473", "\u8473"], /* CJK Ideograph */ + ["\u8474", "\u8474"], /* CJK Ideograph */ + ["\u8475", "\u8475"], /* CJK Ideograph */ + ["\u8476", "\u8476"], /* CJK Ideograph */ + ["\u8477", "\u8477"], /* CJK Ideograph */ + ["\u8478", "\u8478"], /* CJK Ideograph */ + ["\u8479", "\u8479"], /* CJK Ideograph */ + ["\u847A", "\u847A"], /* CJK Ideograph */ + ["\u847B", "\u847B"], /* CJK Ideograph */ + ["\u847C", "\u847C"], /* CJK Ideograph */ + ["\u847D", "\u847D"], /* CJK Ideograph */ + ["\u847E", "\u847E"], /* CJK Ideograph */ + ["\u847F", "\u847F"], /* CJK Ideograph */ + ["\u8480", "\u8480"], /* CJK Ideograph */ + ["\u8481", "\u8481"], /* CJK Ideograph */ + ["\u8482", "\u8482"], /* CJK Ideograph */ + ["\u8483", "\u8483"], /* CJK Ideograph */ + ["\u8484", "\u8484"], /* CJK Ideograph */ + ["\u8485", "\u8485"], /* CJK Ideograph */ + ["\u8486", "\u8486"], /* CJK Ideograph */ + ["\u8487", "\u8487"], /* CJK Ideograph */ + ["\u8488", "\u8488"], /* CJK Ideograph */ + ["\u8489", "\u8489"], /* CJK Ideograph */ + ["\u848A", "\u848A"], /* CJK Ideograph */ + ["\u848B", "\u848B"], /* CJK Ideograph */ + ["\u848C", "\u848C"], /* CJK Ideograph */ + ["\u848D", "\u848D"], /* CJK Ideograph */ + ["\u848E", "\u848E"], /* CJK Ideograph */ + ["\u848F", "\u848F"], /* CJK Ideograph */ + ["\u8490", "\u8490"], /* CJK Ideograph */ + ["\u8491", "\u8491"], /* CJK Ideograph */ + ["\u8492", "\u8492"], /* CJK Ideograph */ + ["\u8493", "\u8493"], /* CJK Ideograph */ + ["\u8494", "\u8494"], /* CJK Ideograph */ + ["\u8495", "\u8495"], /* CJK Ideograph */ + ["\u8496", "\u8496"], /* CJK Ideograph */ + ["\u8497", "\u8497"], /* CJK Ideograph */ + ["\u8498", "\u8498"], /* CJK Ideograph */ + ["\u8499", "\u8499"], /* CJK Ideograph */ + ["\u849A", "\u849A"], /* CJK Ideograph */ + ["\u849B", "\u849B"], /* CJK Ideograph */ + ["\u849C", "\u849C"], /* CJK Ideograph */ + ["\u849D", "\u849D"], /* CJK Ideograph */ + ["\u849E", "\u849E"], /* CJK Ideograph */ + ["\u849F", "\u849F"], /* CJK Ideograph */ + ["\u84A0", "\u84A0"], /* CJK Ideograph */ + ["\u84A1", "\u84A1"], /* CJK Ideograph */ + ["\u84A2", "\u84A2"], /* CJK Ideograph */ + ["\u84A3", "\u84A3"], /* CJK Ideograph */ + ["\u84A4", "\u84A4"], /* CJK Ideograph */ + ["\u84A5", "\u84A5"], /* CJK Ideograph */ + ["\u84A6", "\u84A6"], /* CJK Ideograph */ + ["\u84A7", "\u84A7"], /* CJK Ideograph */ + ["\u84A8", "\u84A8"], /* CJK Ideograph */ + ["\u84A9", "\u84A9"], /* CJK Ideograph */ + ["\u84AA", "\u84AA"], /* CJK Ideograph */ + ["\u84AB", "\u84AB"], /* CJK Ideograph */ + ["\u84AC", "\u84AC"], /* CJK Ideograph */ + ["\u84AD", "\u84AD"], /* CJK Ideograph */ + ["\u84AE", "\u84AE"], /* CJK Ideograph */ + ["\u84AF", "\u84AF"], /* CJK Ideograph */ + ["\u84B0", "\u84B0"], /* CJK Ideograph */ + ["\u84B1", "\u84B1"], /* CJK Ideograph */ + ["\u84B2", "\u84B2"], /* CJK Ideograph */ + ["\u84B3", "\u84B3"], /* CJK Ideograph */ + ["\u84B4", "\u84B4"], /* CJK Ideograph */ + ["\u84B5", "\u84B5"], /* CJK Ideograph */ + ["\u84B6", "\u84B6"], /* CJK Ideograph */ + ["\u84B7", "\u84B7"], /* CJK Ideograph */ + ["\u84B8", "\u84B8"], /* CJK Ideograph */ + ["\u84B9", "\u84B9"], /* CJK Ideograph */ + ["\u84BA", "\u84BA"], /* CJK Ideograph */ + ["\u84BB", "\u84BB"], /* CJK Ideograph */ + ["\u84BC", "\u84BC"], /* CJK Ideograph */ + ["\u84BD", "\u84BD"], /* CJK Ideograph */ + ["\u84BE", "\u84BE"], /* CJK Ideograph */ + ["\u84BF", "\u84BF"], /* CJK Ideograph */ + ["\u84C0", "\u84C0"], /* CJK Ideograph */ + ["\u84C1", "\u84C1"], /* CJK Ideograph */ + ["\u84C2", "\u84C2"], /* CJK Ideograph */ + ["\u84C3", "\u84C3"], /* CJK Ideograph */ + ["\u84C4", "\u84C4"], /* CJK Ideograph */ + ["\u84C5", "\u84C5"], /* CJK Ideograph */ + ["\u84C6", "\u84C6"], /* CJK Ideograph */ + ["\u84C7", "\u84C7"], /* CJK Ideograph */ + ["\u84C8", "\u84C8"], /* CJK Ideograph */ + ["\u84C9", "\u84C9"], /* CJK Ideograph */ + ["\u84CA", "\u84CA"], /* CJK Ideograph */ + ["\u84CB", "\u84CB"], /* CJK Ideograph */ + ["\u84CC", "\u84CC"], /* CJK Ideograph */ + ["\u84CD", "\u84CD"], /* CJK Ideograph */ + ["\u84CE", "\u84CE"], /* CJK Ideograph */ + ["\u84CF", "\u84CF"], /* CJK Ideograph */ + ["\u84D0", "\u84D0"], /* CJK Ideograph */ + ["\u84D1", "\u84D1"], /* CJK Ideograph */ + ["\u84D2", "\u84D2"], /* CJK Ideograph */ + ["\u84D3", "\u84D3"], /* CJK Ideograph */ + ["\u84D4", "\u84D4"], /* CJK Ideograph */ + ["\u84D5", "\u84D5"], /* CJK Ideograph */ + ["\u84D6", "\u84D6"], /* CJK Ideograph */ + ["\u84D7", "\u84D7"], /* CJK Ideograph */ + ["\u84D8", "\u84D8"], /* CJK Ideograph */ + ["\u84D9", "\u84D9"], /* CJK Ideograph */ + ["\u84DA", "\u84DA"], /* CJK Ideograph */ + ["\u84DB", "\u84DB"], /* CJK Ideograph */ + ["\u84DC", "\u84DC"], /* CJK Ideograph */ + ["\u84DD", "\u84DD"], /* CJK Ideograph */ + ["\u84DE", "\u84DE"], /* CJK Ideograph */ + ["\u84DF", "\u84DF"], /* CJK Ideograph */ + ["\u84E0", "\u84E0"], /* CJK Ideograph */ + ["\u84E1", "\u84E1"], /* CJK Ideograph */ + ["\u84E2", "\u84E2"], /* CJK Ideograph */ + ["\u84E3", "\u84E3"], /* CJK Ideograph */ + ["\u84E4", "\u84E4"], /* CJK Ideograph */ + ["\u84E5", "\u84E5"], /* CJK Ideograph */ + ["\u84E6", "\u84E6"], /* CJK Ideograph */ + ["\u84E7", "\u84E7"], /* CJK Ideograph */ + ["\u84E8", "\u84E8"], /* CJK Ideograph */ + ["\u84E9", "\u84E9"], /* CJK Ideograph */ + ["\u84EA", "\u84EA"], /* CJK Ideograph */ + ["\u84EB", "\u84EB"], /* CJK Ideograph */ + ["\u84EC", "\u84EC"], /* CJK Ideograph */ + ["\u84ED", "\u84ED"], /* CJK Ideograph */ + ["\u84EE", "\u84EE"], /* CJK Ideograph */ + ["\u84EF", "\u84EF"], /* CJK Ideograph */ + ["\u84F0", "\u84F0"], /* CJK Ideograph */ + ["\u84F1", "\u84F1"], /* CJK Ideograph */ + ["\u84F2", "\u84F2"], /* CJK Ideograph */ + ["\u84F3", "\u84F3"], /* CJK Ideograph */ + ["\u84F4", "\u84F4"], /* CJK Ideograph */ + ["\u84F5", "\u84F5"], /* CJK Ideograph */ + ["\u84F6", "\u84F6"], /* CJK Ideograph */ + ["\u84F7", "\u84F7"], /* CJK Ideograph */ + ["\u84F8", "\u84F8"], /* CJK Ideograph */ + ["\u84F9", "\u84F9"], /* CJK Ideograph */ + ["\u84FA", "\u84FA"], /* CJK Ideograph */ + ["\u84FB", "\u84FB"], /* CJK Ideograph */ + ["\u84FC", "\u84FC"], /* CJK Ideograph */ + ["\u84FD", "\u84FD"], /* CJK Ideograph */ + ["\u84FE", "\u84FE"], /* CJK Ideograph */ + ["\u84FF", "\u84FF"], /* CJK Ideograph */ + ["\u8500", "\u8500"], /* CJK Ideograph */ + ["\u8501", "\u8501"], /* CJK Ideograph */ + ["\u8502", "\u8502"], /* CJK Ideograph */ + ["\u8503", "\u8503"], /* CJK Ideograph */ + ["\u8504", "\u8504"], /* CJK Ideograph */ + ["\u8505", "\u8505"], /* CJK Ideograph */ + ["\u8506", "\u8506"], /* CJK Ideograph */ + ["\u8507", "\u8507"], /* CJK Ideograph */ + ["\u8508", "\u8508"], /* CJK Ideograph */ + ["\u8509", "\u8509"], /* CJK Ideograph */ + ["\u850A", "\u850A"], /* CJK Ideograph */ + ["\u850B", "\u850B"], /* CJK Ideograph */ + ["\u850C", "\u850C"], /* CJK Ideograph */ + ["\u850D", "\u850D"], /* CJK Ideograph */ + ["\u850E", "\u850E"], /* CJK Ideograph */ + ["\u850F", "\u850F"], /* CJK Ideograph */ + ["\u8510", "\u8510"], /* CJK Ideograph */ + ["\u8511", "\u8511"], /* CJK Ideograph */ + ["\u8512", "\u8512"], /* CJK Ideograph */ + ["\u8513", "\u8513"], /* CJK Ideograph */ + ["\u8514", "\u8514"], /* CJK Ideograph */ + ["\u8515", "\u8515"], /* CJK Ideograph */ + ["\u8516", "\u8516"], /* CJK Ideograph */ + ["\u8517", "\u8517"], /* CJK Ideograph */ + ["\u8518", "\u8518"], /* CJK Ideograph */ + ["\u8519", "\u8519"], /* CJK Ideograph */ + ["\u851A", "\u851A"], /* CJK Ideograph */ + ["\u851B", "\u851B"], /* CJK Ideograph */ + ["\u851C", "\u851C"], /* CJK Ideograph */ + ["\u851D", "\u851D"], /* CJK Ideograph */ + ["\u851E", "\u851E"], /* CJK Ideograph */ + ["\u851F", "\u851F"], /* CJK Ideograph */ + ["\u8520", "\u8520"], /* CJK Ideograph */ + ["\u8521", "\u8521"], /* CJK Ideograph */ + ["\u8522", "\u8522"], /* CJK Ideograph */ + ["\u8523", "\u8523"], /* CJK Ideograph */ + ["\u8524", "\u8524"], /* CJK Ideograph */ + ["\u8525", "\u8525"], /* CJK Ideograph */ + ["\u8526", "\u8526"], /* CJK Ideograph */ + ["\u8527", "\u8527"], /* CJK Ideograph */ + ["\u8528", "\u8528"], /* CJK Ideograph */ + ["\u8529", "\u8529"], /* CJK Ideograph */ + ["\u852A", "\u852A"], /* CJK Ideograph */ + ["\u852B", "\u852B"], /* CJK Ideograph */ + ["\u852C", "\u852C"], /* CJK Ideograph */ + ["\u852D", "\u852D"], /* CJK Ideograph */ + ["\u852E", "\u852E"], /* CJK Ideograph */ + ["\u852F", "\u852F"], /* CJK Ideograph */ + ["\u8530", "\u8530"], /* CJK Ideograph */ + ["\u8531", "\u8531"], /* CJK Ideograph */ + ["\u8532", "\u8532"], /* CJK Ideograph */ + ["\u8533", "\u8533"], /* CJK Ideograph */ + ["\u8534", "\u8534"], /* CJK Ideograph */ + ["\u8535", "\u8535"], /* CJK Ideograph */ + ["\u8536", "\u8536"], /* CJK Ideograph */ + ["\u8537", "\u8537"], /* CJK Ideograph */ + ["\u8538", "\u8538"], /* CJK Ideograph */ + ["\u8539", "\u8539"], /* CJK Ideograph */ + ["\u853A", "\u853A"], /* CJK Ideograph */ + ["\u853B", "\u853B"], /* CJK Ideograph */ + ["\u853C", "\u853C"], /* CJK Ideograph */ + ["\u853D", "\u853D"], /* CJK Ideograph */ + ["\u853E", "\u853E"], /* CJK Ideograph */ + ["\u853F", "\u853F"], /* CJK Ideograph */ + ["\u8540", "\u8540"], /* CJK Ideograph */ + ["\u8541", "\u8541"], /* CJK Ideograph */ + ["\u8542", "\u8542"], /* CJK Ideograph */ + ["\u8543", "\u8543"], /* CJK Ideograph */ + ["\u8544", "\u8544"], /* CJK Ideograph */ + ["\u8545", "\u8545"], /* CJK Ideograph */ + ["\u8546", "\u8546"], /* CJK Ideograph */ + ["\u8547", "\u8547"], /* CJK Ideograph */ + ["\u8548", "\u8548"], /* CJK Ideograph */ + ["\u8549", "\u8549"], /* CJK Ideograph */ + ["\u854A", "\u854A"], /* CJK Ideograph */ + ["\u854B", "\u854B"], /* CJK Ideograph */ + ["\u854C", "\u854C"], /* CJK Ideograph */ + ["\u854D", "\u854D"], /* CJK Ideograph */ + ["\u854E", "\u854E"], /* CJK Ideograph */ + ["\u854F", "\u854F"], /* CJK Ideograph */ + ["\u8550", "\u8550"], /* CJK Ideograph */ + ["\u8551", "\u8551"], /* CJK Ideograph */ + ["\u8552", "\u8552"], /* CJK Ideograph */ + ["\u8553", "\u8553"], /* CJK Ideograph */ + ["\u8554", "\u8554"], /* CJK Ideograph */ + ["\u8555", "\u8555"], /* CJK Ideograph */ + ["\u8556", "\u8556"], /* CJK Ideograph */ + ["\u8557", "\u8557"], /* CJK Ideograph */ + ["\u8558", "\u8558"], /* CJK Ideograph */ + ["\u8559", "\u8559"], /* CJK Ideograph */ + ["\u855A", "\u855A"], /* CJK Ideograph */ + ["\u855B", "\u855B"], /* CJK Ideograph */ + ["\u855C", "\u855C"], /* CJK Ideograph */ + ["\u855D", "\u855D"], /* CJK Ideograph */ + ["\u855E", "\u855E"], /* CJK Ideograph */ + ["\u855F", "\u855F"], /* CJK Ideograph */ + ["\u8560", "\u8560"], /* CJK Ideograph */ + ["\u8561", "\u8561"], /* CJK Ideograph */ + ["\u8562", "\u8562"], /* CJK Ideograph */ + ["\u8563", "\u8563"], /* CJK Ideograph */ + ["\u8564", "\u8564"], /* CJK Ideograph */ + ["\u8565", "\u8565"], /* CJK Ideograph */ + ["\u8566", "\u8566"], /* CJK Ideograph */ + ["\u8567", "\u8567"], /* CJK Ideograph */ + ["\u8568", "\u8568"], /* CJK Ideograph */ + ["\u8569", "\u8569"], /* CJK Ideograph */ + ["\u856A", "\u856A"], /* CJK Ideograph */ + ["\u856B", "\u856B"], /* CJK Ideograph */ + ["\u856C", "\u856C"], /* CJK Ideograph */ + ["\u856D", "\u856D"], /* CJK Ideograph */ + ["\u856E", "\u856E"], /* CJK Ideograph */ + ["\u856F", "\u856F"], /* CJK Ideograph */ + ["\u8570", "\u8570"], /* CJK Ideograph */ + ["\u8571", "\u8571"], /* CJK Ideograph */ + ["\u8572", "\u8572"], /* CJK Ideograph */ + ["\u8573", "\u8573"], /* CJK Ideograph */ + ["\u8574", "\u8574"], /* CJK Ideograph */ + ["\u8575", "\u8575"], /* CJK Ideograph */ + ["\u8576", "\u8576"], /* CJK Ideograph */ + ["\u8577", "\u8577"], /* CJK Ideograph */ + ["\u8578", "\u8578"], /* CJK Ideograph */ + ["\u8579", "\u8579"], /* CJK Ideograph */ + ["\u857A", "\u857A"], /* CJK Ideograph */ + ["\u857B", "\u857B"], /* CJK Ideograph */ + ["\u857C", "\u857C"], /* CJK Ideograph */ + ["\u857D", "\u857D"], /* CJK Ideograph */ + ["\u857E", "\u857E"], /* CJK Ideograph */ + ["\u857F", "\u857F"], /* CJK Ideograph */ + ["\u8580", "\u8580"], /* CJK Ideograph */ + ["\u8581", "\u8581"], /* CJK Ideograph */ + ["\u8582", "\u8582"], /* CJK Ideograph */ + ["\u8583", "\u8583"], /* CJK Ideograph */ + ["\u8584", "\u8584"], /* CJK Ideograph */ + ["\u8585", "\u8585"], /* CJK Ideograph */ + ["\u8586", "\u8586"], /* CJK Ideograph */ + ["\u8587", "\u8587"], /* CJK Ideograph */ + ["\u8588", "\u8588"], /* CJK Ideograph */ + ["\u8589", "\u8589"], /* CJK Ideograph */ + ["\u858A", "\u858A"], /* CJK Ideograph */ + ["\u858B", "\u858B"], /* CJK Ideograph */ + ["\u858C", "\u858C"], /* CJK Ideograph */ + ["\u858D", "\u858D"], /* CJK Ideograph */ + ["\u858E", "\u858E"], /* CJK Ideograph */ + ["\u858F", "\u858F"], /* CJK Ideograph */ + ["\u8590", "\u8590"], /* CJK Ideograph */ + ["\u8591", "\u8591"], /* CJK Ideograph */ + ["\u8592", "\u8592"], /* CJK Ideograph */ + ["\u8593", "\u8593"], /* CJK Ideograph */ + ["\u8594", "\u8594"], /* CJK Ideograph */ + ["\u8595", "\u8595"], /* CJK Ideograph */ + ["\u8596", "\u8596"], /* CJK Ideograph */ + ["\u8597", "\u8597"], /* CJK Ideograph */ + ["\u8598", "\u8598"], /* CJK Ideograph */ + ["\u8599", "\u8599"], /* CJK Ideograph */ + ["\u859A", "\u859A"], /* CJK Ideograph */ + ["\u859B", "\u859B"], /* CJK Ideograph */ + ["\u859C", "\u859C"], /* CJK Ideograph */ + ["\u859D", "\u859D"], /* CJK Ideograph */ + ["\u859E", "\u859E"], /* CJK Ideograph */ + ["\u859F", "\u859F"], /* CJK Ideograph */ + ["\u85A0", "\u85A0"], /* CJK Ideograph */ + ["\u85A1", "\u85A1"], /* CJK Ideograph */ + ["\u85A2", "\u85A2"], /* CJK Ideograph */ + ["\u85A3", "\u85A3"], /* CJK Ideograph */ + ["\u85A4", "\u85A4"], /* CJK Ideograph */ + ["\u85A5", "\u85A5"], /* CJK Ideograph */ + ["\u85A6", "\u85A6"], /* CJK Ideograph */ + ["\u85A7", "\u85A7"], /* CJK Ideograph */ + ["\u85A8", "\u85A8"], /* CJK Ideograph */ + ["\u85A9", "\u85A9"], /* CJK Ideograph */ + ["\u85AA", "\u85AA"], /* CJK Ideograph */ + ["\u85AB", "\u85AB"], /* CJK Ideograph */ + ["\u85AC", "\u85AC"], /* CJK Ideograph */ + ["\u85AD", "\u85AD"], /* CJK Ideograph */ + ["\u85AE", "\u85AE"], /* CJK Ideograph */ + ["\u85AF", "\u85AF"], /* CJK Ideograph */ + ["\u85B0", "\u85B0"], /* CJK Ideograph */ + ["\u85B1", "\u85B1"], /* CJK Ideograph */ + ["\u85B2", "\u85B2"], /* CJK Ideograph */ + ["\u85B3", "\u85B3"], /* CJK Ideograph */ + ["\u85B4", "\u85B4"], /* CJK Ideograph */ + ["\u85B5", "\u85B5"], /* CJK Ideograph */ + ["\u85B6", "\u85B6"], /* CJK Ideograph */ + ["\u85B7", "\u85B7"], /* CJK Ideograph */ + ["\u85B8", "\u85B8"], /* CJK Ideograph */ + ["\u85B9", "\u85B9"], /* CJK Ideograph */ + ["\u85BA", "\u85BA"], /* CJK Ideograph */ + ["\u85BB", "\u85BB"], /* CJK Ideograph */ + ["\u85BC", "\u85BC"], /* CJK Ideograph */ + ["\u85BD", "\u85BD"], /* CJK Ideograph */ + ["\u85BE", "\u85BE"], /* CJK Ideograph */ + ["\u85BF", "\u85BF"], /* CJK Ideograph */ + ["\u85C0", "\u85C0"], /* CJK Ideograph */ + ["\u85C1", "\u85C1"], /* CJK Ideograph */ + ["\u85C2", "\u85C2"], /* CJK Ideograph */ + ["\u85C3", "\u85C3"], /* CJK Ideograph */ + ["\u85C4", "\u85C4"], /* CJK Ideograph */ + ["\u85C5", "\u85C5"], /* CJK Ideograph */ + ["\u85C6", "\u85C6"], /* CJK Ideograph */ + ["\u85C7", "\u85C7"], /* CJK Ideograph */ + ["\u85C8", "\u85C8"], /* CJK Ideograph */ + ["\u85C9", "\u85C9"], /* CJK Ideograph */ + ["\u85CA", "\u85CA"], /* CJK Ideograph */ + ["\u85CB", "\u85CB"], /* CJK Ideograph */ + ["\u85CC", "\u85CC"], /* CJK Ideograph */ + ["\u85CD", "\u85CD"], /* CJK Ideograph */ + ["\u85CE", "\u85CE"], /* CJK Ideograph */ + ["\u85CF", "\u85CF"], /* CJK Ideograph */ + ["\u85D0", "\u85D0"], /* CJK Ideograph */ + ["\u85D1", "\u85D1"], /* CJK Ideograph */ + ["\u85D2", "\u85D2"], /* CJK Ideograph */ + ["\u85D3", "\u85D3"], /* CJK Ideograph */ + ["\u85D4", "\u85D4"], /* CJK Ideograph */ + ["\u85D5", "\u85D5"], /* CJK Ideograph */ + ["\u85D6", "\u85D6"], /* CJK Ideograph */ + ["\u85D7", "\u85D7"], /* CJK Ideograph */ + ["\u85D8", "\u85D8"], /* CJK Ideograph */ + ["\u85D9", "\u85D9"], /* CJK Ideograph */ + ["\u85DA", "\u85DA"], /* CJK Ideograph */ + ["\u85DB", "\u85DB"], /* CJK Ideograph */ + ["\u85DC", "\u85DC"], /* CJK Ideograph */ + ["\u85DD", "\u85DD"], /* CJK Ideograph */ + ["\u85DE", "\u85DE"], /* CJK Ideograph */ + ["\u85DF", "\u85DF"], /* CJK Ideograph */ + ["\u85E0", "\u85E0"], /* CJK Ideograph */ + ["\u85E1", "\u85E1"], /* CJK Ideograph */ + ["\u85E2", "\u85E2"], /* CJK Ideograph */ + ["\u85E3", "\u85E3"], /* CJK Ideograph */ + ["\u85E4", "\u85E4"], /* CJK Ideograph */ + ["\u85E5", "\u85E5"], /* CJK Ideograph */ + ["\u85E6", "\u85E6"], /* CJK Ideograph */ + ["\u85E7", "\u85E7"], /* CJK Ideograph */ + ["\u85E8", "\u85E8"], /* CJK Ideograph */ + ["\u85E9", "\u85E9"], /* CJK Ideograph */ + ["\u85EA", "\u85EA"], /* CJK Ideograph */ + ["\u85EB", "\u85EB"], /* CJK Ideograph */ + ["\u85EC", "\u85EC"], /* CJK Ideograph */ + ["\u85ED", "\u85ED"], /* CJK Ideograph */ + ["\u85EE", "\u85EE"], /* CJK Ideograph */ + ["\u85EF", "\u85EF"], /* CJK Ideograph */ + ["\u85F0", "\u85F0"], /* CJK Ideograph */ + ["\u85F1", "\u85F1"], /* CJK Ideograph */ + ["\u85F2", "\u85F2"], /* CJK Ideograph */ + ["\u85F3", "\u85F3"], /* CJK Ideograph */ + ["\u85F4", "\u85F4"], /* CJK Ideograph */ + ["\u85F5", "\u85F5"], /* CJK Ideograph */ + ["\u85F6", "\u85F6"], /* CJK Ideograph */ + ["\u85F7", "\u85F7"], /* CJK Ideograph */ + ["\u85F8", "\u85F8"], /* CJK Ideograph */ + ["\u85F9", "\u85F9"], /* CJK Ideograph */ + ["\u85FA", "\u85FA"], /* CJK Ideograph */ + ["\u85FB", "\u85FB"], /* CJK Ideograph */ + ["\u85FC", "\u85FC"], /* CJK Ideograph */ + ["\u85FD", "\u85FD"], /* CJK Ideograph */ + ["\u85FE", "\u85FE"], /* CJK Ideograph */ + ["\u85FF", "\u85FF"], /* CJK Ideograph */ + ["\u8600", "\u8600"], /* CJK Ideograph */ + ["\u8601", "\u8601"], /* CJK Ideograph */ + ["\u8602", "\u8602"], /* CJK Ideograph */ + ["\u8603", "\u8603"], /* CJK Ideograph */ + ["\u8604", "\u8604"], /* CJK Ideograph */ + ["\u8605", "\u8605"], /* CJK Ideograph */ + ["\u8606", "\u8606"], /* CJK Ideograph */ + ["\u8607", "\u8607"], /* CJK Ideograph */ + ["\u8608", "\u8608"], /* CJK Ideograph */ + ["\u8609", "\u8609"], /* CJK Ideograph */ + ["\u860A", "\u860A"], /* CJK Ideograph */ + ["\u860B", "\u860B"], /* CJK Ideograph */ + ["\u860C", "\u860C"], /* CJK Ideograph */ + ["\u860D", "\u860D"], /* CJK Ideograph */ + ["\u860E", "\u860E"], /* CJK Ideograph */ + ["\u860F", "\u860F"], /* CJK Ideograph */ + ["\u8610", "\u8610"], /* CJK Ideograph */ + ["\u8611", "\u8611"], /* CJK Ideograph */ + ["\u8612", "\u8612"], /* CJK Ideograph */ + ["\u8613", "\u8613"], /* CJK Ideograph */ + ["\u8614", "\u8614"], /* CJK Ideograph */ + ["\u8615", "\u8615"], /* CJK Ideograph */ + ["\u8616", "\u8616"], /* CJK Ideograph */ + ["\u8617", "\u8617"], /* CJK Ideograph */ + ["\u8618", "\u8618"], /* CJK Ideograph */ + ["\u8619", "\u8619"], /* CJK Ideograph */ + ["\u861A", "\u861A"], /* CJK Ideograph */ + ["\u861B", "\u861B"], /* CJK Ideograph */ + ["\u861C", "\u861C"], /* CJK Ideograph */ + ["\u861D", "\u861D"], /* CJK Ideograph */ + ["\u861E", "\u861E"], /* CJK Ideograph */ + ["\u861F", "\u861F"], /* CJK Ideograph */ + ["\u8620", "\u8620"], /* CJK Ideograph */ + ["\u8621", "\u8621"], /* CJK Ideograph */ + ["\u8622", "\u8622"], /* CJK Ideograph */ + ["\u8623", "\u8623"], /* CJK Ideograph */ + ["\u8624", "\u8624"], /* CJK Ideograph */ + ["\u8625", "\u8625"], /* CJK Ideograph */ + ["\u8626", "\u8626"], /* CJK Ideograph */ + ["\u8627", "\u8627"], /* CJK Ideograph */ + ["\u8628", "\u8628"], /* CJK Ideograph */ + ["\u8629", "\u8629"], /* CJK Ideograph */ + ["\u862A", "\u862A"], /* CJK Ideograph */ + ["\u862B", "\u862B"], /* CJK Ideograph */ + ["\u862C", "\u862C"], /* CJK Ideograph */ + ["\u862D", "\u862D"], /* CJK Ideograph */ + ["\u862E", "\u862E"], /* CJK Ideograph */ + ["\u862F", "\u862F"], /* CJK Ideograph */ + ["\u8630", "\u8630"], /* CJK Ideograph */ + ["\u8631", "\u8631"], /* CJK Ideograph */ + ["\u8632", "\u8632"], /* CJK Ideograph */ + ["\u8633", "\u8633"], /* CJK Ideograph */ + ["\u8634", "\u8634"], /* CJK Ideograph */ + ["\u8635", "\u8635"], /* CJK Ideograph */ + ["\u8636", "\u8636"], /* CJK Ideograph */ + ["\u8637", "\u8637"], /* CJK Ideograph */ + ["\u8638", "\u8638"], /* CJK Ideograph */ + ["\u8639", "\u8639"], /* CJK Ideograph */ + ["\u863A", "\u863A"], /* CJK Ideograph */ + ["\u863B", "\u863B"], /* CJK Ideograph */ + ["\u863C", "\u863C"], /* CJK Ideograph */ + ["\u863D", "\u863D"], /* CJK Ideograph */ + ["\u863E", "\u863E"], /* CJK Ideograph */ + ["\u863F", "\u863F"], /* CJK Ideograph */ + ["\u8640", "\u8640"], /* CJK Ideograph */ + ["\u8641", "\u8641"], /* CJK Ideograph */ + ["\u8642", "\u8642"], /* CJK Ideograph */ + ["\u8643", "\u8643"], /* CJK Ideograph */ + ["\u8644", "\u8644"], /* CJK Ideograph */ + ["\u8645", "\u8645"], /* CJK Ideograph */ + ["\u8646", "\u8646"], /* CJK Ideograph */ + ["\u8647", "\u8647"], /* CJK Ideograph */ + ["\u8648", "\u8648"], /* CJK Ideograph */ + ["\u8649", "\u8649"], /* CJK Ideograph */ + ["\u864A", "\u864A"], /* CJK Ideograph */ + ["\u864B", "\u864B"], /* CJK Ideograph */ + ["\u864C", "\u864C"], /* CJK Ideograph */ + ["\u864D", "\u864D"], /* CJK Ideograph */ + ["\u864E", "\u864E"], /* CJK Ideograph */ + ["\u864F", "\u864F"], /* CJK Ideograph */ + ["\u8650", "\u8650"], /* CJK Ideograph */ + ["\u8651", "\u8651"], /* CJK Ideograph */ + ["\u8652", "\u8652"], /* CJK Ideograph */ + ["\u8653", "\u8653"], /* CJK Ideograph */ + ["\u8654", "\u8654"], /* CJK Ideograph */ + ["\u8655", "\u8655"], /* CJK Ideograph */ + ["\u8656", "\u8656"], /* CJK Ideograph */ + ["\u8657", "\u8657"], /* CJK Ideograph */ + ["\u8658", "\u8658"], /* CJK Ideograph */ + ["\u8659", "\u8659"], /* CJK Ideograph */ + ["\u865A", "\u865A"], /* CJK Ideograph */ + ["\u865B", "\u865B"], /* CJK Ideograph */ + ["\u865C", "\u865C"], /* CJK Ideograph */ + ["\u865D", "\u865D"], /* CJK Ideograph */ + ["\u865E", "\u865E"], /* CJK Ideograph */ + ["\u865F", "\u865F"], /* CJK Ideograph */ + ["\u8660", "\u8660"], /* CJK Ideograph */ + ["\u8661", "\u8661"], /* CJK Ideograph */ + ["\u8662", "\u8662"], /* CJK Ideograph */ + ["\u8663", "\u8663"], /* CJK Ideograph */ + ["\u8664", "\u8664"], /* CJK Ideograph */ + ["\u8665", "\u8665"], /* CJK Ideograph */ + ["\u8666", "\u8666"], /* CJK Ideograph */ + ["\u8667", "\u8667"], /* CJK Ideograph */ + ["\u8668", "\u8668"], /* CJK Ideograph */ + ["\u8669", "\u8669"], /* CJK Ideograph */ + ["\u866A", "\u866A"], /* CJK Ideograph */ + ["\u866B", "\u866B"], /* CJK Ideograph */ + ["\u866C", "\u866C"], /* CJK Ideograph */ + ["\u866D", "\u866D"], /* CJK Ideograph */ + ["\u866E", "\u866E"], /* CJK Ideograph */ + ["\u866F", "\u866F"], /* CJK Ideograph */ + ["\u8670", "\u8670"], /* CJK Ideograph */ + ["\u8671", "\u8671"], /* CJK Ideograph */ + ["\u8672", "\u8672"], /* CJK Ideograph */ + ["\u8673", "\u8673"], /* CJK Ideograph */ + ["\u8674", "\u8674"], /* CJK Ideograph */ + ["\u8675", "\u8675"], /* CJK Ideograph */ + ["\u8676", "\u8676"], /* CJK Ideograph */ + ["\u8677", "\u8677"], /* CJK Ideograph */ + ["\u8678", "\u8678"], /* CJK Ideograph */ + ["\u8679", "\u8679"], /* CJK Ideograph */ + ["\u867A", "\u867A"], /* CJK Ideograph */ + ["\u867B", "\u867B"], /* CJK Ideograph */ + ["\u867C", "\u867C"], /* CJK Ideograph */ + ["\u867D", "\u867D"], /* CJK Ideograph */ + ["\u867E", "\u867E"], /* CJK Ideograph */ + ["\u867F", "\u867F"], /* CJK Ideograph */ + ["\u8680", "\u8680"], /* CJK Ideograph */ + ["\u8681", "\u8681"], /* CJK Ideograph */ + ["\u8682", "\u8682"], /* CJK Ideograph */ + ["\u8683", "\u8683"], /* CJK Ideograph */ + ["\u8684", "\u8684"], /* CJK Ideograph */ + ["\u8685", "\u8685"], /* CJK Ideograph */ + ["\u8686", "\u8686"], /* CJK Ideograph */ + ["\u8687", "\u8687"], /* CJK Ideograph */ + ["\u8688", "\u8688"], /* CJK Ideograph */ + ["\u8689", "\u8689"], /* CJK Ideograph */ + ["\u868A", "\u868A"], /* CJK Ideograph */ + ["\u868B", "\u868B"], /* CJK Ideograph */ + ["\u868C", "\u868C"], /* CJK Ideograph */ + ["\u868D", "\u868D"], /* CJK Ideograph */ + ["\u868E", "\u868E"], /* CJK Ideograph */ + ["\u868F", "\u868F"], /* CJK Ideograph */ + ["\u8690", "\u8690"], /* CJK Ideograph */ + ["\u8691", "\u8691"], /* CJK Ideograph */ + ["\u8692", "\u8692"], /* CJK Ideograph */ + ["\u8693", "\u8693"], /* CJK Ideograph */ + ["\u8694", "\u8694"], /* CJK Ideograph */ + ["\u8695", "\u8695"], /* CJK Ideograph */ + ["\u8696", "\u8696"], /* CJK Ideograph */ + ["\u8697", "\u8697"], /* CJK Ideograph */ + ["\u8698", "\u8698"], /* CJK Ideograph */ + ["\u8699", "\u8699"], /* CJK Ideograph */ + ["\u869A", "\u869A"], /* CJK Ideograph */ + ["\u869B", "\u869B"], /* CJK Ideograph */ + ["\u869C", "\u869C"], /* CJK Ideograph */ + ["\u869D", "\u869D"], /* CJK Ideograph */ + ["\u869E", "\u869E"], /* CJK Ideograph */ + ["\u869F", "\u869F"], /* CJK Ideograph */ + ["\u86A0", "\u86A0"], /* CJK Ideograph */ + ["\u86A1", "\u86A1"], /* CJK Ideograph */ + ["\u86A2", "\u86A2"], /* CJK Ideograph */ + ["\u86A3", "\u86A3"], /* CJK Ideograph */ + ["\u86A4", "\u86A4"], /* CJK Ideograph */ + ["\u86A5", "\u86A5"], /* CJK Ideograph */ + ["\u86A6", "\u86A6"], /* CJK Ideograph */ + ["\u86A7", "\u86A7"], /* CJK Ideograph */ + ["\u86A8", "\u86A8"], /* CJK Ideograph */ + ["\u86A9", "\u86A9"], /* CJK Ideograph */ + ["\u86AA", "\u86AA"], /* CJK Ideograph */ + ["\u86AB", "\u86AB"], /* CJK Ideograph */ + ["\u86AC", "\u86AC"], /* CJK Ideograph */ + ["\u86AD", "\u86AD"], /* CJK Ideograph */ + ["\u86AE", "\u86AE"], /* CJK Ideograph */ + ["\u86AF", "\u86AF"], /* CJK Ideograph */ + ["\u86B0", "\u86B0"], /* CJK Ideograph */ + ["\u86B1", "\u86B1"], /* CJK Ideograph */ + ["\u86B2", "\u86B2"], /* CJK Ideograph */ + ["\u86B3", "\u86B3"], /* CJK Ideograph */ + ["\u86B4", "\u86B4"], /* CJK Ideograph */ + ["\u86B5", "\u86B5"], /* CJK Ideograph */ + ["\u86B6", "\u86B6"], /* CJK Ideograph */ + ["\u86B7", "\u86B7"], /* CJK Ideograph */ + ["\u86B8", "\u86B8"], /* CJK Ideograph */ + ["\u86B9", "\u86B9"], /* CJK Ideograph */ + ["\u86BA", "\u86BA"], /* CJK Ideograph */ + ["\u86BB", "\u86BB"], /* CJK Ideograph */ + ["\u86BC", "\u86BC"], /* CJK Ideograph */ + ["\u86BD", "\u86BD"], /* CJK Ideograph */ + ["\u86BE", "\u86BE"], /* CJK Ideograph */ + ["\u86BF", "\u86BF"], /* CJK Ideograph */ + ["\u86C0", "\u86C0"], /* CJK Ideograph */ + ["\u86C1", "\u86C1"], /* CJK Ideograph */ + ["\u86C2", "\u86C2"], /* CJK Ideograph */ + ["\u86C3", "\u86C3"], /* CJK Ideograph */ + ["\u86C4", "\u86C4"], /* CJK Ideograph */ + ["\u86C5", "\u86C5"], /* CJK Ideograph */ + ["\u86C6", "\u86C6"], /* CJK Ideograph */ + ["\u86C7", "\u86C7"], /* CJK Ideograph */ + ["\u86C8", "\u86C8"], /* CJK Ideograph */ + ["\u86C9", "\u86C9"], /* CJK Ideograph */ + ["\u86CA", "\u86CA"], /* CJK Ideograph */ + ["\u86CB", "\u86CB"], /* CJK Ideograph */ + ["\u86CC", "\u86CC"], /* CJK Ideograph */ + ["\u86CD", "\u86CD"], /* CJK Ideograph */ + ["\u86CE", "\u86CE"], /* CJK Ideograph */ + ["\u86CF", "\u86CF"], /* CJK Ideograph */ + ["\u86D0", "\u86D0"], /* CJK Ideograph */ + ["\u86D1", "\u86D1"], /* CJK Ideograph */ + ["\u86D2", "\u86D2"], /* CJK Ideograph */ + ["\u86D3", "\u86D3"], /* CJK Ideograph */ + ["\u86D4", "\u86D4"], /* CJK Ideograph */ + ["\u86D5", "\u86D5"], /* CJK Ideograph */ + ["\u86D6", "\u86D6"], /* CJK Ideograph */ + ["\u86D7", "\u86D7"], /* CJK Ideograph */ + ["\u86D8", "\u86D8"], /* CJK Ideograph */ + ["\u86D9", "\u86D9"], /* CJK Ideograph */ + ["\u86DA", "\u86DA"], /* CJK Ideograph */ + ["\u86DB", "\u86DB"], /* CJK Ideograph */ + ["\u86DC", "\u86DC"], /* CJK Ideograph */ + ["\u86DD", "\u86DD"], /* CJK Ideograph */ + ["\u86DE", "\u86DE"], /* CJK Ideograph */ + ["\u86DF", "\u86DF"], /* CJK Ideograph */ + ["\u86E0", "\u86E0"], /* CJK Ideograph */ + ["\u86E1", "\u86E1"], /* CJK Ideograph */ + ["\u86E2", "\u86E2"], /* CJK Ideograph */ + ["\u86E3", "\u86E3"], /* CJK Ideograph */ + ["\u86E4", "\u86E4"], /* CJK Ideograph */ + ["\u86E5", "\u86E5"], /* CJK Ideograph */ + ["\u86E6", "\u86E6"], /* CJK Ideograph */ + ["\u86E7", "\u86E7"], /* CJK Ideograph */ + ["\u86E8", "\u86E8"], /* CJK Ideograph */ + ["\u86E9", "\u86E9"], /* CJK Ideograph */ + ["\u86EA", "\u86EA"], /* CJK Ideograph */ + ["\u86EB", "\u86EB"], /* CJK Ideograph */ + ["\u86EC", "\u86EC"], /* CJK Ideograph */ + ["\u86ED", "\u86ED"], /* CJK Ideograph */ + ["\u86EE", "\u86EE"], /* CJK Ideograph */ + ["\u86EF", "\u86EF"], /* CJK Ideograph */ + ["\u86F0", "\u86F0"], /* CJK Ideograph */ + ["\u86F1", "\u86F1"], /* CJK Ideograph */ + ["\u86F2", "\u86F2"], /* CJK Ideograph */ + ["\u86F3", "\u86F3"], /* CJK Ideograph */ + ["\u86F4", "\u86F4"], /* CJK Ideograph */ + ["\u86F5", "\u86F5"], /* CJK Ideograph */ + ["\u86F6", "\u86F6"], /* CJK Ideograph */ + ["\u86F7", "\u86F7"], /* CJK Ideograph */ + ["\u86F8", "\u86F8"], /* CJK Ideograph */ + ["\u86F9", "\u86F9"], /* CJK Ideograph */ + ["\u86FA", "\u86FA"], /* CJK Ideograph */ + ["\u86FB", "\u86FB"], /* CJK Ideograph */ + ["\u86FC", "\u86FC"], /* CJK Ideograph */ + ["\u86FD", "\u86FD"], /* CJK Ideograph */ + ["\u86FE", "\u86FE"], /* CJK Ideograph */ + ["\u86FF", "\u86FF"], /* CJK Ideograph */ + ["\u8700", "\u8700"], /* CJK Ideograph */ + ["\u8701", "\u8701"], /* CJK Ideograph */ + ["\u8702", "\u8702"], /* CJK Ideograph */ + ["\u8703", "\u8703"], /* CJK Ideograph */ + ["\u8704", "\u8704"], /* CJK Ideograph */ + ["\u8705", "\u8705"], /* CJK Ideograph */ + ["\u8706", "\u8706"], /* CJK Ideograph */ + ["\u8707", "\u8707"], /* CJK Ideograph */ + ["\u8708", "\u8708"], /* CJK Ideograph */ + ["\u8709", "\u8709"], /* CJK Ideograph */ + ["\u870A", "\u870A"], /* CJK Ideograph */ + ["\u870B", "\u870B"], /* CJK Ideograph */ + ["\u870C", "\u870C"], /* CJK Ideograph */ + ["\u870D", "\u870D"], /* CJK Ideograph */ + ["\u870E", "\u870E"], /* CJK Ideograph */ + ["\u870F", "\u870F"], /* CJK Ideograph */ + ["\u8710", "\u8710"], /* CJK Ideograph */ + ["\u8711", "\u8711"], /* CJK Ideograph */ + ["\u8712", "\u8712"], /* CJK Ideograph */ + ["\u8713", "\u8713"], /* CJK Ideograph */ + ["\u8714", "\u8714"], /* CJK Ideograph */ + ["\u8715", "\u8715"], /* CJK Ideograph */ + ["\u8716", "\u8716"], /* CJK Ideograph */ + ["\u8717", "\u8717"], /* CJK Ideograph */ + ["\u8718", "\u8718"], /* CJK Ideograph */ + ["\u8719", "\u8719"], /* CJK Ideograph */ + ["\u871A", "\u871A"], /* CJK Ideograph */ + ["\u871B", "\u871B"], /* CJK Ideograph */ + ["\u871C", "\u871C"], /* CJK Ideograph */ + ["\u871D", "\u871D"], /* CJK Ideograph */ + ["\u871E", "\u871E"], /* CJK Ideograph */ + ["\u871F", "\u871F"], /* CJK Ideograph */ + ["\u8720", "\u8720"], /* CJK Ideograph */ + ["\u8721", "\u8721"], /* CJK Ideograph */ + ["\u8722", "\u8722"], /* CJK Ideograph */ + ["\u8723", "\u8723"], /* CJK Ideograph */ + ["\u8724", "\u8724"], /* CJK Ideograph */ + ["\u8725", "\u8725"], /* CJK Ideograph */ + ["\u8726", "\u8726"], /* CJK Ideograph */ + ["\u8727", "\u8727"], /* CJK Ideograph */ + ["\u8728", "\u8728"], /* CJK Ideograph */ + ["\u8729", "\u8729"], /* CJK Ideograph */ + ["\u872A", "\u872A"], /* CJK Ideograph */ + ["\u872B", "\u872B"], /* CJK Ideograph */ + ["\u872C", "\u872C"], /* CJK Ideograph */ + ["\u872D", "\u872D"], /* CJK Ideograph */ + ["\u872E", "\u872E"], /* CJK Ideograph */ + ["\u872F", "\u872F"], /* CJK Ideograph */ + ["\u8730", "\u8730"], /* CJK Ideograph */ + ["\u8731", "\u8731"], /* CJK Ideograph */ + ["\u8732", "\u8732"], /* CJK Ideograph */ + ["\u8733", "\u8733"], /* CJK Ideograph */ + ["\u8734", "\u8734"], /* CJK Ideograph */ + ["\u8735", "\u8735"], /* CJK Ideograph */ + ["\u8736", "\u8736"], /* CJK Ideograph */ + ["\u8737", "\u8737"], /* CJK Ideograph */ + ["\u8738", "\u8738"], /* CJK Ideograph */ + ["\u8739", "\u8739"], /* CJK Ideograph */ + ["\u873A", "\u873A"], /* CJK Ideograph */ + ["\u873B", "\u873B"], /* CJK Ideograph */ + ["\u873C", "\u873C"], /* CJK Ideograph */ + ["\u873D", "\u873D"], /* CJK Ideograph */ + ["\u873E", "\u873E"], /* CJK Ideograph */ + ["\u873F", "\u873F"], /* CJK Ideograph */ + ["\u8740", "\u8740"], /* CJK Ideograph */ + ["\u8741", "\u8741"], /* CJK Ideograph */ + ["\u8742", "\u8742"], /* CJK Ideograph */ + ["\u8743", "\u8743"], /* CJK Ideograph */ + ["\u8744", "\u8744"], /* CJK Ideograph */ + ["\u8745", "\u8745"], /* CJK Ideograph */ + ["\u8746", "\u8746"], /* CJK Ideograph */ + ["\u8747", "\u8747"], /* CJK Ideograph */ + ["\u8748", "\u8748"], /* CJK Ideograph */ + ["\u8749", "\u8749"], /* CJK Ideograph */ + ["\u874A", "\u874A"], /* CJK Ideograph */ + ["\u874B", "\u874B"], /* CJK Ideograph */ + ["\u874C", "\u874C"], /* CJK Ideograph */ + ["\u874D", "\u874D"], /* CJK Ideograph */ + ["\u874E", "\u874E"], /* CJK Ideograph */ + ["\u874F", "\u874F"], /* CJK Ideograph */ + ["\u8750", "\u8750"], /* CJK Ideograph */ + ["\u8751", "\u8751"], /* CJK Ideograph */ + ["\u8752", "\u8752"], /* CJK Ideograph */ + ["\u8753", "\u8753"], /* CJK Ideograph */ + ["\u8754", "\u8754"], /* CJK Ideograph */ + ["\u8755", "\u8755"], /* CJK Ideograph */ + ["\u8756", "\u8756"], /* CJK Ideograph */ + ["\u8757", "\u8757"], /* CJK Ideograph */ + ["\u8758", "\u8758"], /* CJK Ideograph */ + ["\u8759", "\u8759"], /* CJK Ideograph */ + ["\u875A", "\u875A"], /* CJK Ideograph */ + ["\u875B", "\u875B"], /* CJK Ideograph */ + ["\u875C", "\u875C"], /* CJK Ideograph */ + ["\u875D", "\u875D"], /* CJK Ideograph */ + ["\u875E", "\u875E"], /* CJK Ideograph */ + ["\u875F", "\u875F"], /* CJK Ideograph */ + ["\u8760", "\u8760"], /* CJK Ideograph */ + ["\u8761", "\u8761"], /* CJK Ideograph */ + ["\u8762", "\u8762"], /* CJK Ideograph */ + ["\u8763", "\u8763"], /* CJK Ideograph */ + ["\u8764", "\u8764"], /* CJK Ideograph */ + ["\u8765", "\u8765"], /* CJK Ideograph */ + ["\u8766", "\u8766"], /* CJK Ideograph */ + ["\u8767", "\u8767"], /* CJK Ideograph */ + ["\u8768", "\u8768"], /* CJK Ideograph */ + ["\u8769", "\u8769"], /* CJK Ideograph */ + ["\u876A", "\u876A"], /* CJK Ideograph */ + ["\u876B", "\u876B"], /* CJK Ideograph */ + ["\u876C", "\u876C"], /* CJK Ideograph */ + ["\u876D", "\u876D"], /* CJK Ideograph */ + ["\u876E", "\u876E"], /* CJK Ideograph */ + ["\u876F", "\u876F"], /* CJK Ideograph */ + ["\u8770", "\u8770"], /* CJK Ideograph */ + ["\u8771", "\u8771"], /* CJK Ideograph */ + ["\u8772", "\u8772"], /* CJK Ideograph */ + ["\u8773", "\u8773"], /* CJK Ideograph */ + ["\u8774", "\u8774"], /* CJK Ideograph */ + ["\u8775", "\u8775"], /* CJK Ideograph */ + ["\u8776", "\u8776"], /* CJK Ideograph */ + ["\u8777", "\u8777"], /* CJK Ideograph */ + ["\u8778", "\u8778"], /* CJK Ideograph */ + ["\u8779", "\u8779"], /* CJK Ideograph */ + ["\u877A", "\u877A"], /* CJK Ideograph */ + ["\u877B", "\u877B"], /* CJK Ideograph */ + ["\u877C", "\u877C"], /* CJK Ideograph */ + ["\u877D", "\u877D"], /* CJK Ideograph */ + ["\u877E", "\u877E"], /* CJK Ideograph */ + ["\u877F", "\u877F"], /* CJK Ideograph */ + ["\u8780", "\u8780"], /* CJK Ideograph */ + ["\u8781", "\u8781"], /* CJK Ideograph */ + ["\u8782", "\u8782"], /* CJK Ideograph */ + ["\u8783", "\u8783"], /* CJK Ideograph */ + ["\u8784", "\u8784"], /* CJK Ideograph */ + ["\u8785", "\u8785"], /* CJK Ideograph */ + ["\u8786", "\u8786"], /* CJK Ideograph */ + ["\u8787", "\u8787"], /* CJK Ideograph */ + ["\u8788", "\u8788"], /* CJK Ideograph */ + ["\u8789", "\u8789"], /* CJK Ideograph */ + ["\u878A", "\u878A"], /* CJK Ideograph */ + ["\u878B", "\u878B"], /* CJK Ideograph */ + ["\u878C", "\u878C"], /* CJK Ideograph */ + ["\u878D", "\u878D"], /* CJK Ideograph */ + ["\u878E", "\u878E"], /* CJK Ideograph */ + ["\u878F", "\u878F"], /* CJK Ideograph */ + ["\u8790", "\u8790"], /* CJK Ideograph */ + ["\u8791", "\u8791"], /* CJK Ideograph */ + ["\u8792", "\u8792"], /* CJK Ideograph */ + ["\u8793", "\u8793"], /* CJK Ideograph */ + ["\u8794", "\u8794"], /* CJK Ideograph */ + ["\u8795", "\u8795"], /* CJK Ideograph */ + ["\u8796", "\u8796"], /* CJK Ideograph */ + ["\u8797", "\u8797"], /* CJK Ideograph */ + ["\u8798", "\u8798"], /* CJK Ideograph */ + ["\u8799", "\u8799"], /* CJK Ideograph */ + ["\u879A", "\u879A"], /* CJK Ideograph */ + ["\u879B", "\u879B"], /* CJK Ideograph */ + ["\u879C", "\u879C"], /* CJK Ideograph */ + ["\u879D", "\u879D"], /* CJK Ideograph */ + ["\u879E", "\u879E"], /* CJK Ideograph */ + ["\u879F", "\u879F"], /* CJK Ideograph */ + ["\u87A0", "\u87A0"], /* CJK Ideograph */ + ["\u87A1", "\u87A1"], /* CJK Ideograph */ + ["\u87A2", "\u87A2"], /* CJK Ideograph */ + ["\u87A3", "\u87A3"], /* CJK Ideograph */ + ["\u87A4", "\u87A4"], /* CJK Ideograph */ + ["\u87A5", "\u87A5"], /* CJK Ideograph */ + ["\u87A6", "\u87A6"], /* CJK Ideograph */ + ["\u87A7", "\u87A7"], /* CJK Ideograph */ + ["\u87A8", "\u87A8"], /* CJK Ideograph */ + ["\u87A9", "\u87A9"], /* CJK Ideograph */ + ["\u87AA", "\u87AA"], /* CJK Ideograph */ + ["\u87AB", "\u87AB"], /* CJK Ideograph */ + ["\u87AC", "\u87AC"], /* CJK Ideograph */ + ["\u87AD", "\u87AD"], /* CJK Ideograph */ + ["\u87AE", "\u87AE"], /* CJK Ideograph */ + ["\u87AF", "\u87AF"], /* CJK Ideograph */ + ["\u87B0", "\u87B0"], /* CJK Ideograph */ + ["\u87B1", "\u87B1"], /* CJK Ideograph */ + ["\u87B2", "\u87B2"], /* CJK Ideograph */ + ["\u87B3", "\u87B3"], /* CJK Ideograph */ + ["\u87B4", "\u87B4"], /* CJK Ideograph */ + ["\u87B5", "\u87B5"], /* CJK Ideograph */ + ["\u87B6", "\u87B6"], /* CJK Ideograph */ + ["\u87B7", "\u87B7"], /* CJK Ideograph */ + ["\u87B8", "\u87B8"], /* CJK Ideograph */ + ["\u87B9", "\u87B9"], /* CJK Ideograph */ + ["\u87BA", "\u87BA"], /* CJK Ideograph */ + ["\u87BB", "\u87BB"], /* CJK Ideograph */ + ["\u87BC", "\u87BC"], /* CJK Ideograph */ + ["\u87BD", "\u87BD"], /* CJK Ideograph */ + ["\u87BE", "\u87BE"], /* CJK Ideograph */ + ["\u87BF", "\u87BF"], /* CJK Ideograph */ + ["\u87C0", "\u87C0"], /* CJK Ideograph */ + ["\u87C1", "\u87C1"], /* CJK Ideograph */ + ["\u87C2", "\u87C2"], /* CJK Ideograph */ + ["\u87C3", "\u87C3"], /* CJK Ideograph */ + ["\u87C4", "\u87C4"], /* CJK Ideograph */ + ["\u87C5", "\u87C5"], /* CJK Ideograph */ + ["\u87C6", "\u87C6"], /* CJK Ideograph */ + ["\u87C7", "\u87C7"], /* CJK Ideograph */ + ["\u87C8", "\u87C8"], /* CJK Ideograph */ + ["\u87C9", "\u87C9"], /* CJK Ideograph */ + ["\u87CA", "\u87CA"], /* CJK Ideograph */ + ["\u87CB", "\u87CB"], /* CJK Ideograph */ + ["\u87CC", "\u87CC"], /* CJK Ideograph */ + ["\u87CD", "\u87CD"], /* CJK Ideograph */ + ["\u87CE", "\u87CE"], /* CJK Ideograph */ + ["\u87CF", "\u87CF"], /* CJK Ideograph */ + ["\u87D0", "\u87D0"], /* CJK Ideograph */ + ["\u87D1", "\u87D1"], /* CJK Ideograph */ + ["\u87D2", "\u87D2"], /* CJK Ideograph */ + ["\u87D3", "\u87D3"], /* CJK Ideograph */ + ["\u87D4", "\u87D4"], /* CJK Ideograph */ + ["\u87D5", "\u87D5"], /* CJK Ideograph */ + ["\u87D6", "\u87D6"], /* CJK Ideograph */ + ["\u87D7", "\u87D7"], /* CJK Ideograph */ + ["\u87D8", "\u87D8"], /* CJK Ideograph */ + ["\u87D9", "\u87D9"], /* CJK Ideograph */ + ["\u87DA", "\u87DA"], /* CJK Ideograph */ + ["\u87DB", "\u87DB"], /* CJK Ideograph */ + ["\u87DC", "\u87DC"], /* CJK Ideograph */ + ["\u87DD", "\u87DD"], /* CJK Ideograph */ + ["\u87DE", "\u87DE"], /* CJK Ideograph */ + ["\u87DF", "\u87DF"], /* CJK Ideograph */ + ["\u87E0", "\u87E0"], /* CJK Ideograph */ + ["\u87E1", "\u87E1"], /* CJK Ideograph */ + ["\u87E2", "\u87E2"], /* CJK Ideograph */ + ["\u87E3", "\u87E3"], /* CJK Ideograph */ + ["\u87E4", "\u87E4"], /* CJK Ideograph */ + ["\u87E5", "\u87E5"], /* CJK Ideograph */ + ["\u87E6", "\u87E6"], /* CJK Ideograph */ + ["\u87E7", "\u87E7"], /* CJK Ideograph */ + ["\u87E8", "\u87E8"], /* CJK Ideograph */ + ["\u87E9", "\u87E9"], /* CJK Ideograph */ + ["\u87EA", "\u87EA"], /* CJK Ideograph */ + ["\u87EB", "\u87EB"], /* CJK Ideograph */ + ["\u87EC", "\u87EC"], /* CJK Ideograph */ + ["\u87ED", "\u87ED"], /* CJK Ideograph */ + ["\u87EE", "\u87EE"], /* CJK Ideograph */ + ["\u87EF", "\u87EF"], /* CJK Ideograph */ + ["\u87F0", "\u87F0"], /* CJK Ideograph */ + ["\u87F1", "\u87F1"], /* CJK Ideograph */ + ["\u87F2", "\u87F2"], /* CJK Ideograph */ + ["\u87F3", "\u87F3"], /* CJK Ideograph */ + ["\u87F4", "\u87F4"], /* CJK Ideograph */ + ["\u87F5", "\u87F5"], /* CJK Ideograph */ + ["\u87F6", "\u87F6"], /* CJK Ideograph */ + ["\u87F7", "\u87F7"], /* CJK Ideograph */ + ["\u87F8", "\u87F8"], /* CJK Ideograph */ + ["\u87F9", "\u87F9"], /* CJK Ideograph */ + ["\u87FA", "\u87FA"], /* CJK Ideograph */ + ["\u87FB", "\u87FB"], /* CJK Ideograph */ + ["\u87FC", "\u87FC"], /* CJK Ideograph */ + ["\u87FD", "\u87FD"], /* CJK Ideograph */ + ["\u87FE", "\u87FE"], /* CJK Ideograph */ + ["\u87FF", "\u87FF"], /* CJK Ideograph */ + ["\u8800", "\u8800"], /* CJK Ideograph */ + ["\u8801", "\u8801"], /* CJK Ideograph */ + ["\u8802", "\u8802"], /* CJK Ideograph */ + ["\u8803", "\u8803"], /* CJK Ideograph */ + ["\u8804", "\u8804"], /* CJK Ideograph */ + ["\u8805", "\u8805"], /* CJK Ideograph */ + ["\u8806", "\u8806"], /* CJK Ideograph */ + ["\u8807", "\u8807"], /* CJK Ideograph */ + ["\u8808", "\u8808"], /* CJK Ideograph */ + ["\u8809", "\u8809"], /* CJK Ideograph */ + ["\u880A", "\u880A"], /* CJK Ideograph */ + ["\u880B", "\u880B"], /* CJK Ideograph */ + ["\u880C", "\u880C"], /* CJK Ideograph */ + ["\u880D", "\u880D"], /* CJK Ideograph */ + ["\u880E", "\u880E"], /* CJK Ideograph */ + ["\u880F", "\u880F"], /* CJK Ideograph */ + ["\u8810", "\u8810"], /* CJK Ideograph */ + ["\u8811", "\u8811"], /* CJK Ideograph */ + ["\u8812", "\u8812"], /* CJK Ideograph */ + ["\u8813", "\u8813"], /* CJK Ideograph */ + ["\u8814", "\u8814"], /* CJK Ideograph */ + ["\u8815", "\u8815"], /* CJK Ideograph */ + ["\u8816", "\u8816"], /* CJK Ideograph */ + ["\u8817", "\u8817"], /* CJK Ideograph */ + ["\u8818", "\u8818"], /* CJK Ideograph */ + ["\u8819", "\u8819"], /* CJK Ideograph */ + ["\u881A", "\u881A"], /* CJK Ideograph */ + ["\u881B", "\u881B"], /* CJK Ideograph */ + ["\u881C", "\u881C"], /* CJK Ideograph */ + ["\u881D", "\u881D"], /* CJK Ideograph */ + ["\u881E", "\u881E"], /* CJK Ideograph */ + ["\u881F", "\u881F"], /* CJK Ideograph */ + ["\u8820", "\u8820"], /* CJK Ideograph */ + ["\u8821", "\u8821"], /* CJK Ideograph */ + ["\u8822", "\u8822"], /* CJK Ideograph */ + ["\u8823", "\u8823"], /* CJK Ideograph */ + ["\u8824", "\u8824"], /* CJK Ideograph */ + ["\u8825", "\u8825"], /* CJK Ideograph */ + ["\u8826", "\u8826"], /* CJK Ideograph */ + ["\u8827", "\u8827"], /* CJK Ideograph */ + ["\u8828", "\u8828"], /* CJK Ideograph */ + ["\u8829", "\u8829"], /* CJK Ideograph */ + ["\u882A", "\u882A"], /* CJK Ideograph */ + ["\u882B", "\u882B"], /* CJK Ideograph */ + ["\u882C", "\u882C"], /* CJK Ideograph */ + ["\u882D", "\u882D"], /* CJK Ideograph */ + ["\u882E", "\u882E"], /* CJK Ideograph */ + ["\u882F", "\u882F"], /* CJK Ideograph */ + ["\u8830", "\u8830"], /* CJK Ideograph */ + ["\u8831", "\u8831"], /* CJK Ideograph */ + ["\u8832", "\u8832"], /* CJK Ideograph */ + ["\u8833", "\u8833"], /* CJK Ideograph */ + ["\u8834", "\u8834"], /* CJK Ideograph */ + ["\u8835", "\u8835"], /* CJK Ideograph */ + ["\u8836", "\u8836"], /* CJK Ideograph */ + ["\u8837", "\u8837"], /* CJK Ideograph */ + ["\u8838", "\u8838"], /* CJK Ideograph */ + ["\u8839", "\u8839"], /* CJK Ideograph */ + ["\u883A", "\u883A"], /* CJK Ideograph */ + ["\u883B", "\u883B"], /* CJK Ideograph */ + ["\u883C", "\u883C"], /* CJK Ideograph */ + ["\u883D", "\u883D"], /* CJK Ideograph */ + ["\u883E", "\u883E"], /* CJK Ideograph */ + ["\u883F", "\u883F"], /* CJK Ideograph */ + ["\u8840", "\u8840"], /* CJK Ideograph */ + ["\u8841", "\u8841"], /* CJK Ideograph */ + ["\u8842", "\u8842"], /* CJK Ideograph */ + ["\u8843", "\u8843"], /* CJK Ideograph */ + ["\u8844", "\u8844"], /* CJK Ideograph */ + ["\u8845", "\u8845"], /* CJK Ideograph */ + ["\u8846", "\u8846"], /* CJK Ideograph */ + ["\u8847", "\u8847"], /* CJK Ideograph */ + ["\u8848", "\u8848"], /* CJK Ideograph */ + ["\u8849", "\u8849"], /* CJK Ideograph */ + ["\u884A", "\u884A"], /* CJK Ideograph */ + ["\u884B", "\u884B"], /* CJK Ideograph */ + ["\u884C", "\u884C"], /* CJK Ideograph */ + ["\u884D", "\u884D"], /* CJK Ideograph */ + ["\u884E", "\u884E"], /* CJK Ideograph */ + ["\u884F", "\u884F"], /* CJK Ideograph */ + ["\u8850", "\u8850"], /* CJK Ideograph */ + ["\u8851", "\u8851"], /* CJK Ideograph */ + ["\u8852", "\u8852"], /* CJK Ideograph */ + ["\u8853", "\u8853"], /* CJK Ideograph */ + ["\u8854", "\u8854"], /* CJK Ideograph */ + ["\u8855", "\u8855"], /* CJK Ideograph */ + ["\u8856", "\u8856"], /* CJK Ideograph */ + ["\u8857", "\u8857"], /* CJK Ideograph */ + ["\u8858", "\u8858"], /* CJK Ideograph */ + ["\u8859", "\u8859"], /* CJK Ideograph */ + ["\u885A", "\u885A"], /* CJK Ideograph */ + ["\u885B", "\u885B"], /* CJK Ideograph */ + ["\u885C", "\u885C"], /* CJK Ideograph */ + ["\u885D", "\u885D"], /* CJK Ideograph */ + ["\u885E", "\u885E"], /* CJK Ideograph */ + ["\u885F", "\u885F"], /* CJK Ideograph */ + ["\u8860", "\u8860"], /* CJK Ideograph */ + ["\u8861", "\u8861"], /* CJK Ideograph */ + ["\u8862", "\u8862"], /* CJK Ideograph */ + ["\u8863", "\u8863"], /* CJK Ideograph */ + ["\u8864", "\u8864"], /* CJK Ideograph */ + ["\u8865", "\u8865"], /* CJK Ideograph */ + ["\u8866", "\u8866"], /* CJK Ideograph */ + ["\u8867", "\u8867"], /* CJK Ideograph */ + ["\u8868", "\u8868"], /* CJK Ideograph */ + ["\u8869", "\u8869"], /* CJK Ideograph */ + ["\u886A", "\u886A"], /* CJK Ideograph */ + ["\u886B", "\u886B"], /* CJK Ideograph */ + ["\u886C", "\u886C"], /* CJK Ideograph */ + ["\u886D", "\u886D"], /* CJK Ideograph */ + ["\u886E", "\u886E"], /* CJK Ideograph */ + ["\u886F", "\u886F"], /* CJK Ideograph */ + ["\u8870", "\u8870"], /* CJK Ideograph */ + ["\u8871", "\u8871"], /* CJK Ideograph */ + ["\u8872", "\u8872"], /* CJK Ideograph */ + ["\u8873", "\u8873"], /* CJK Ideograph */ + ["\u8874", "\u8874"], /* CJK Ideograph */ + ["\u8875", "\u8875"], /* CJK Ideograph */ + ["\u8876", "\u8876"], /* CJK Ideograph */ + ["\u8877", "\u8877"], /* CJK Ideograph */ + ["\u8878", "\u8878"], /* CJK Ideograph */ + ["\u8879", "\u8879"], /* CJK Ideograph */ + ["\u887A", "\u887A"], /* CJK Ideograph */ + ["\u887B", "\u887B"], /* CJK Ideograph */ + ["\u887C", "\u887C"], /* CJK Ideograph */ + ["\u887D", "\u887D"], /* CJK Ideograph */ + ["\u887E", "\u887E"], /* CJK Ideograph */ + ["\u887F", "\u887F"], /* CJK Ideograph */ + ["\u8880", "\u8880"], /* CJK Ideograph */ + ["\u8881", "\u8881"], /* CJK Ideograph */ + ["\u8882", "\u8882"], /* CJK Ideograph */ + ["\u8883", "\u8883"], /* CJK Ideograph */ + ["\u8884", "\u8884"], /* CJK Ideograph */ + ["\u8885", "\u8885"], /* CJK Ideograph */ + ["\u8886", "\u8886"], /* CJK Ideograph */ + ["\u8887", "\u8887"], /* CJK Ideograph */ + ["\u8888", "\u8888"], /* CJK Ideograph */ + ["\u8889", "\u8889"], /* CJK Ideograph */ + ["\u888A", "\u888A"], /* CJK Ideograph */ + ["\u888B", "\u888B"], /* CJK Ideograph */ + ["\u888C", "\u888C"], /* CJK Ideograph */ + ["\u888D", "\u888D"], /* CJK Ideograph */ + ["\u888E", "\u888E"], /* CJK Ideograph */ + ["\u888F", "\u888F"], /* CJK Ideograph */ + ["\u8890", "\u8890"], /* CJK Ideograph */ + ["\u8891", "\u8891"], /* CJK Ideograph */ + ["\u8892", "\u8892"], /* CJK Ideograph */ + ["\u8893", "\u8893"], /* CJK Ideograph */ + ["\u8894", "\u8894"], /* CJK Ideograph */ + ["\u8895", "\u8895"], /* CJK Ideograph */ + ["\u8896", "\u8896"], /* CJK Ideograph */ + ["\u8897", "\u8897"], /* CJK Ideograph */ + ["\u8898", "\u8898"], /* CJK Ideograph */ + ["\u8899", "\u8899"], /* CJK Ideograph */ + ["\u889A", "\u889A"], /* CJK Ideograph */ + ["\u889B", "\u889B"], /* CJK Ideograph */ + ["\u889C", "\u889C"], /* CJK Ideograph */ + ["\u889D", "\u889D"], /* CJK Ideograph */ + ["\u889E", "\u889E"], /* CJK Ideograph */ + ["\u889F", "\u889F"], /* CJK Ideograph */ + ["\u88A0", "\u88A0"], /* CJK Ideograph */ + ["\u88A1", "\u88A1"], /* CJK Ideograph */ + ["\u88A2", "\u88A2"], /* CJK Ideograph */ + ["\u88A3", "\u88A3"], /* CJK Ideograph */ + ["\u88A4", "\u88A4"], /* CJK Ideograph */ + ["\u88A5", "\u88A5"], /* CJK Ideograph */ + ["\u88A6", "\u88A6"], /* CJK Ideograph */ + ["\u88A7", "\u88A7"], /* CJK Ideograph */ + ["\u88A8", "\u88A8"], /* CJK Ideograph */ + ["\u88A9", "\u88A9"], /* CJK Ideograph */ + ["\u88AA", "\u88AA"], /* CJK Ideograph */ + ["\u88AB", "\u88AB"], /* CJK Ideograph */ + ["\u88AC", "\u88AC"], /* CJK Ideograph */ + ["\u88AD", "\u88AD"], /* CJK Ideograph */ + ["\u88AE", "\u88AE"], /* CJK Ideograph */ + ["\u88AF", "\u88AF"], /* CJK Ideograph */ + ["\u88B0", "\u88B0"], /* CJK Ideograph */ + ["\u88B1", "\u88B1"], /* CJK Ideograph */ + ["\u88B2", "\u88B2"], /* CJK Ideograph */ + ["\u88B3", "\u88B3"], /* CJK Ideograph */ + ["\u88B4", "\u88B4"], /* CJK Ideograph */ + ["\u88B5", "\u88B5"], /* CJK Ideograph */ + ["\u88B6", "\u88B6"], /* CJK Ideograph */ + ["\u88B7", "\u88B7"], /* CJK Ideograph */ + ["\u88B8", "\u88B8"], /* CJK Ideograph */ + ["\u88B9", "\u88B9"], /* CJK Ideograph */ + ["\u88BA", "\u88BA"], /* CJK Ideograph */ + ["\u88BB", "\u88BB"], /* CJK Ideograph */ + ["\u88BC", "\u88BC"], /* CJK Ideograph */ + ["\u88BD", "\u88BD"], /* CJK Ideograph */ + ["\u88BE", "\u88BE"], /* CJK Ideograph */ + ["\u88BF", "\u88BF"], /* CJK Ideograph */ + ["\u88C0", "\u88C0"], /* CJK Ideograph */ + ["\u88C1", "\u88C1"], /* CJK Ideograph */ + ["\u88C2", "\u88C2"], /* CJK Ideograph */ + ["\u88C3", "\u88C3"], /* CJK Ideograph */ + ["\u88C4", "\u88C4"], /* CJK Ideograph */ + ["\u88C5", "\u88C5"], /* CJK Ideograph */ + ["\u88C6", "\u88C6"], /* CJK Ideograph */ + ["\u88C7", "\u88C7"], /* CJK Ideograph */ + ["\u88C8", "\u88C8"], /* CJK Ideograph */ + ["\u88C9", "\u88C9"], /* CJK Ideograph */ + ["\u88CA", "\u88CA"], /* CJK Ideograph */ + ["\u88CB", "\u88CB"], /* CJK Ideograph */ + ["\u88CC", "\u88CC"], /* CJK Ideograph */ + ["\u88CD", "\u88CD"], /* CJK Ideograph */ + ["\u88CE", "\u88CE"], /* CJK Ideograph */ + ["\u88CF", "\u88CF"], /* CJK Ideograph */ + ["\u88D0", "\u88D0"], /* CJK Ideograph */ + ["\u88D1", "\u88D1"], /* CJK Ideograph */ + ["\u88D2", "\u88D2"], /* CJK Ideograph */ + ["\u88D3", "\u88D3"], /* CJK Ideograph */ + ["\u88D4", "\u88D4"], /* CJK Ideograph */ + ["\u88D5", "\u88D5"], /* CJK Ideograph */ + ["\u88D6", "\u88D6"], /* CJK Ideograph */ + ["\u88D7", "\u88D7"], /* CJK Ideograph */ + ["\u88D8", "\u88D8"], /* CJK Ideograph */ + ["\u88D9", "\u88D9"], /* CJK Ideograph */ + ["\u88DA", "\u88DA"], /* CJK Ideograph */ + ["\u88DB", "\u88DB"], /* CJK Ideograph */ + ["\u88DC", "\u88DC"], /* CJK Ideograph */ + ["\u88DD", "\u88DD"], /* CJK Ideograph */ + ["\u88DE", "\u88DE"], /* CJK Ideograph */ + ["\u88DF", "\u88DF"], /* CJK Ideograph */ + ["\u88E0", "\u88E0"], /* CJK Ideograph */ + ["\u88E1", "\u88E1"], /* CJK Ideograph */ + ["\u88E2", "\u88E2"], /* CJK Ideograph */ + ["\u88E3", "\u88E3"], /* CJK Ideograph */ + ["\u88E4", "\u88E4"], /* CJK Ideograph */ + ["\u88E5", "\u88E5"], /* CJK Ideograph */ + ["\u88E6", "\u88E6"], /* CJK Ideograph */ + ["\u88E7", "\u88E7"], /* CJK Ideograph */ + ["\u88E8", "\u88E8"], /* CJK Ideograph */ + ["\u88E9", "\u88E9"], /* CJK Ideograph */ + ["\u88EA", "\u88EA"], /* CJK Ideograph */ + ["\u88EB", "\u88EB"], /* CJK Ideograph */ + ["\u88EC", "\u88EC"], /* CJK Ideograph */ + ["\u88ED", "\u88ED"], /* CJK Ideograph */ + ["\u88EE", "\u88EE"], /* CJK Ideograph */ + ["\u88EF", "\u88EF"], /* CJK Ideograph */ + ["\u88F0", "\u88F0"], /* CJK Ideograph */ + ["\u88F1", "\u88F1"], /* CJK Ideograph */ + ["\u88F2", "\u88F2"], /* CJK Ideograph */ + ["\u88F3", "\u88F3"], /* CJK Ideograph */ + ["\u88F4", "\u88F4"], /* CJK Ideograph */ + ["\u88F5", "\u88F5"], /* CJK Ideograph */ + ["\u88F6", "\u88F6"], /* CJK Ideograph */ + ["\u88F7", "\u88F7"], /* CJK Ideograph */ + ["\u88F8", "\u88F8"], /* CJK Ideograph */ + ["\u88F9", "\u88F9"], /* CJK Ideograph */ + ["\u88FA", "\u88FA"], /* CJK Ideograph */ + ["\u88FB", "\u88FB"], /* CJK Ideograph */ + ["\u88FC", "\u88FC"], /* CJK Ideograph */ + ["\u88FD", "\u88FD"], /* CJK Ideograph */ + ["\u88FE", "\u88FE"], /* CJK Ideograph */ + ["\u88FF", "\u88FF"], /* CJK Ideograph */ + ["\u8900", "\u8900"], /* CJK Ideograph */ + ["\u8901", "\u8901"], /* CJK Ideograph */ + ["\u8902", "\u8902"], /* CJK Ideograph */ + ["\u8903", "\u8903"], /* CJK Ideograph */ + ["\u8904", "\u8904"], /* CJK Ideograph */ + ["\u8905", "\u8905"], /* CJK Ideograph */ + ["\u8906", "\u8906"], /* CJK Ideograph */ + ["\u8907", "\u8907"], /* CJK Ideograph */ + ["\u8908", "\u8908"], /* CJK Ideograph */ + ["\u8909", "\u8909"], /* CJK Ideograph */ + ["\u890A", "\u890A"], /* CJK Ideograph */ + ["\u890B", "\u890B"], /* CJK Ideograph */ + ["\u890C", "\u890C"], /* CJK Ideograph */ + ["\u890D", "\u890D"], /* CJK Ideograph */ + ["\u890E", "\u890E"], /* CJK Ideograph */ + ["\u890F", "\u890F"], /* CJK Ideograph */ + ["\u8910", "\u8910"], /* CJK Ideograph */ + ["\u8911", "\u8911"], /* CJK Ideograph */ + ["\u8912", "\u8912"], /* CJK Ideograph */ + ["\u8913", "\u8913"], /* CJK Ideograph */ + ["\u8914", "\u8914"], /* CJK Ideograph */ + ["\u8915", "\u8915"], /* CJK Ideograph */ + ["\u8916", "\u8916"], /* CJK Ideograph */ + ["\u8917", "\u8917"], /* CJK Ideograph */ + ["\u8918", "\u8918"], /* CJK Ideograph */ + ["\u8919", "\u8919"], /* CJK Ideograph */ + ["\u891A", "\u891A"], /* CJK Ideograph */ + ["\u891B", "\u891B"], /* CJK Ideograph */ + ["\u891C", "\u891C"], /* CJK Ideograph */ + ["\u891D", "\u891D"], /* CJK Ideograph */ + ["\u891E", "\u891E"], /* CJK Ideograph */ + ["\u891F", "\u891F"], /* CJK Ideograph */ + ["\u8920", "\u8920"], /* CJK Ideograph */ + ["\u8921", "\u8921"], /* CJK Ideograph */ + ["\u8922", "\u8922"], /* CJK Ideograph */ + ["\u8923", "\u8923"], /* CJK Ideograph */ + ["\u8924", "\u8924"], /* CJK Ideograph */ + ["\u8925", "\u8925"], /* CJK Ideograph */ + ["\u8926", "\u8926"], /* CJK Ideograph */ + ["\u8927", "\u8927"], /* CJK Ideograph */ + ["\u8928", "\u8928"], /* CJK Ideograph */ + ["\u8929", "\u8929"], /* CJK Ideograph */ + ["\u892A", "\u892A"], /* CJK Ideograph */ + ["\u892B", "\u892B"], /* CJK Ideograph */ + ["\u892C", "\u892C"], /* CJK Ideograph */ + ["\u892D", "\u892D"], /* CJK Ideograph */ + ["\u892E", "\u892E"], /* CJK Ideograph */ + ["\u892F", "\u892F"], /* CJK Ideograph */ + ["\u8930", "\u8930"], /* CJK Ideograph */ + ["\u8931", "\u8931"], /* CJK Ideograph */ + ["\u8932", "\u8932"], /* CJK Ideograph */ + ["\u8933", "\u8933"], /* CJK Ideograph */ + ["\u8934", "\u8934"], /* CJK Ideograph */ + ["\u8935", "\u8935"], /* CJK Ideograph */ + ["\u8936", "\u8936"], /* CJK Ideograph */ + ["\u8937", "\u8937"], /* CJK Ideograph */ + ["\u8938", "\u8938"], /* CJK Ideograph */ + ["\u8939", "\u8939"], /* CJK Ideograph */ + ["\u893A", "\u893A"], /* CJK Ideograph */ + ["\u893B", "\u893B"], /* CJK Ideograph */ + ["\u893C", "\u893C"], /* CJK Ideograph */ + ["\u893D", "\u893D"], /* CJK Ideograph */ + ["\u893E", "\u893E"], /* CJK Ideograph */ + ["\u893F", "\u893F"], /* CJK Ideograph */ + ["\u8940", "\u8940"], /* CJK Ideograph */ + ["\u8941", "\u8941"], /* CJK Ideograph */ + ["\u8942", "\u8942"], /* CJK Ideograph */ + ["\u8943", "\u8943"], /* CJK Ideograph */ + ["\u8944", "\u8944"], /* CJK Ideograph */ + ["\u8945", "\u8945"], /* CJK Ideograph */ + ["\u8946", "\u8946"], /* CJK Ideograph */ + ["\u8947", "\u8947"], /* CJK Ideograph */ + ["\u8948", "\u8948"], /* CJK Ideograph */ + ["\u8949", "\u8949"], /* CJK Ideograph */ + ["\u894A", "\u894A"], /* CJK Ideograph */ + ["\u894B", "\u894B"], /* CJK Ideograph */ + ["\u894C", "\u894C"], /* CJK Ideograph */ + ["\u894D", "\u894D"], /* CJK Ideograph */ + ["\u894E", "\u894E"], /* CJK Ideograph */ + ["\u894F", "\u894F"], /* CJK Ideograph */ + ["\u8950", "\u8950"], /* CJK Ideograph */ + ["\u8951", "\u8951"], /* CJK Ideograph */ + ["\u8952", "\u8952"], /* CJK Ideograph */ + ["\u8953", "\u8953"], /* CJK Ideograph */ + ["\u8954", "\u8954"], /* CJK Ideograph */ + ["\u8955", "\u8955"], /* CJK Ideograph */ + ["\u8956", "\u8956"], /* CJK Ideograph */ + ["\u8957", "\u8957"], /* CJK Ideograph */ + ["\u8958", "\u8958"], /* CJK Ideograph */ + ["\u8959", "\u8959"], /* CJK Ideograph */ + ["\u895A", "\u895A"], /* CJK Ideograph */ + ["\u895B", "\u895B"], /* CJK Ideograph */ + ["\u895C", "\u895C"], /* CJK Ideograph */ + ["\u895D", "\u895D"], /* CJK Ideograph */ + ["\u895E", "\u895E"], /* CJK Ideograph */ + ["\u895F", "\u895F"], /* CJK Ideograph */ + ["\u8960", "\u8960"], /* CJK Ideograph */ + ["\u8961", "\u8961"], /* CJK Ideograph */ + ["\u8962", "\u8962"], /* CJK Ideograph */ + ["\u8963", "\u8963"], /* CJK Ideograph */ + ["\u8964", "\u8964"], /* CJK Ideograph */ + ["\u8965", "\u8965"], /* CJK Ideograph */ + ["\u8966", "\u8966"], /* CJK Ideograph */ + ["\u8967", "\u8967"], /* CJK Ideograph */ + ["\u8968", "\u8968"], /* CJK Ideograph */ + ["\u8969", "\u8969"], /* CJK Ideograph */ + ["\u896A", "\u896A"], /* CJK Ideograph */ + ["\u896B", "\u896B"], /* CJK Ideograph */ + ["\u896C", "\u896C"], /* CJK Ideograph */ + ["\u896D", "\u896D"], /* CJK Ideograph */ + ["\u896E", "\u896E"], /* CJK Ideograph */ + ["\u896F", "\u896F"], /* CJK Ideograph */ + ["\u8970", "\u8970"], /* CJK Ideograph */ + ["\u8971", "\u8971"], /* CJK Ideograph */ + ["\u8972", "\u8972"], /* CJK Ideograph */ + ["\u8973", "\u8973"], /* CJK Ideograph */ + ["\u8974", "\u8974"], /* CJK Ideograph */ + ["\u8975", "\u8975"], /* CJK Ideograph */ + ["\u8976", "\u8976"], /* CJK Ideograph */ + ["\u8977", "\u8977"], /* CJK Ideograph */ + ["\u8978", "\u8978"], /* CJK Ideograph */ + ["\u8979", "\u8979"], /* CJK Ideograph */ + ["\u897A", "\u897A"], /* CJK Ideograph */ + ["\u897B", "\u897B"], /* CJK Ideograph */ + ["\u897C", "\u897C"], /* CJK Ideograph */ + ["\u897D", "\u897D"], /* CJK Ideograph */ + ["\u897E", "\u897E"], /* CJK Ideograph */ + ["\u897F", "\u897F"], /* CJK Ideograph */ + ["\u8980", "\u8980"], /* CJK Ideograph */ + ["\u8981", "\u8981"], /* CJK Ideograph */ + ["\u8982", "\u8982"], /* CJK Ideograph */ + ["\u8983", "\u8983"], /* CJK Ideograph */ + ["\u8984", "\u8984"], /* CJK Ideograph */ + ["\u8985", "\u8985"], /* CJK Ideograph */ + ["\u8986", "\u8986"], /* CJK Ideograph */ + ["\u8987", "\u8987"], /* CJK Ideograph */ + ["\u8988", "\u8988"], /* CJK Ideograph */ + ["\u8989", "\u8989"], /* CJK Ideograph */ + ["\u898A", "\u898A"], /* CJK Ideograph */ + ["\u898B", "\u898B"], /* CJK Ideograph */ + ["\u898C", "\u898C"], /* CJK Ideograph */ + ["\u898D", "\u898D"], /* CJK Ideograph */ + ["\u898E", "\u898E"], /* CJK Ideograph */ + ["\u898F", "\u898F"], /* CJK Ideograph */ + ["\u8990", "\u8990"], /* CJK Ideograph */ + ["\u8991", "\u8991"], /* CJK Ideograph */ + ["\u8992", "\u8992"], /* CJK Ideograph */ + ["\u8993", "\u8993"], /* CJK Ideograph */ + ["\u8994", "\u8994"], /* CJK Ideograph */ + ["\u8995", "\u8995"], /* CJK Ideograph */ + ["\u8996", "\u8996"], /* CJK Ideograph */ + ["\u8997", "\u8997"], /* CJK Ideograph */ + ["\u8998", "\u8998"], /* CJK Ideograph */ + ["\u8999", "\u8999"], /* CJK Ideograph */ + ["\u899A", "\u899A"], /* CJK Ideograph */ + ["\u899B", "\u899B"], /* CJK Ideograph */ + ["\u899C", "\u899C"], /* CJK Ideograph */ + ["\u899D", "\u899D"], /* CJK Ideograph */ + ["\u899E", "\u899E"], /* CJK Ideograph */ + ["\u899F", "\u899F"], /* CJK Ideograph */ + ["\u89A0", "\u89A0"], /* CJK Ideograph */ + ["\u89A1", "\u89A1"], /* CJK Ideograph */ + ["\u89A2", "\u89A2"], /* CJK Ideograph */ + ["\u89A3", "\u89A3"], /* CJK Ideograph */ + ["\u89A4", "\u89A4"], /* CJK Ideograph */ + ["\u89A5", "\u89A5"], /* CJK Ideograph */ + ["\u89A6", "\u89A6"], /* CJK Ideograph */ + ["\u89A7", "\u89A7"], /* CJK Ideograph */ + ["\u89A8", "\u89A8"], /* CJK Ideograph */ + ["\u89A9", "\u89A9"], /* CJK Ideograph */ + ["\u89AA", "\u89AA"], /* CJK Ideograph */ + ["\u89AB", "\u89AB"], /* CJK Ideograph */ + ["\u89AC", "\u89AC"], /* CJK Ideograph */ + ["\u89AD", "\u89AD"], /* CJK Ideograph */ + ["\u89AE", "\u89AE"], /* CJK Ideograph */ + ["\u89AF", "\u89AF"], /* CJK Ideograph */ + ["\u89B0", "\u89B0"], /* CJK Ideograph */ + ["\u89B1", "\u89B1"], /* CJK Ideograph */ + ["\u89B2", "\u89B2"], /* CJK Ideograph */ + ["\u89B3", "\u89B3"], /* CJK Ideograph */ + ["\u89B4", "\u89B4"], /* CJK Ideograph */ + ["\u89B5", "\u89B5"], /* CJK Ideograph */ + ["\u89B6", "\u89B6"], /* CJK Ideograph */ + ["\u89B7", "\u89B7"], /* CJK Ideograph */ + ["\u89B8", "\u89B8"], /* CJK Ideograph */ + ["\u89B9", "\u89B9"], /* CJK Ideograph */ + ["\u89BA", "\u89BA"], /* CJK Ideograph */ + ["\u89BB", "\u89BB"], /* CJK Ideograph */ + ["\u89BC", "\u89BC"], /* CJK Ideograph */ + ["\u89BD", "\u89BD"], /* CJK Ideograph */ + ["\u89BE", "\u89BE"], /* CJK Ideograph */ + ["\u89BF", "\u89BF"], /* CJK Ideograph */ + ["\u89C0", "\u89C0"], /* CJK Ideograph */ + ["\u89C1", "\u89C1"], /* CJK Ideograph */ + ["\u89C2", "\u89C2"], /* CJK Ideograph */ + ["\u89C3", "\u89C3"], /* CJK Ideograph */ + ["\u89C4", "\u89C4"], /* CJK Ideograph */ + ["\u89C5", "\u89C5"], /* CJK Ideograph */ + ["\u89C6", "\u89C6"], /* CJK Ideograph */ + ["\u89C7", "\u89C7"], /* CJK Ideograph */ + ["\u89C8", "\u89C8"], /* CJK Ideograph */ + ["\u89C9", "\u89C9"], /* CJK Ideograph */ + ["\u89CA", "\u89CA"], /* CJK Ideograph */ + ["\u89CB", "\u89CB"], /* CJK Ideograph */ + ["\u89CC", "\u89CC"], /* CJK Ideograph */ + ["\u89CD", "\u89CD"], /* CJK Ideograph */ + ["\u89CE", "\u89CE"], /* CJK Ideograph */ + ["\u89CF", "\u89CF"], /* CJK Ideograph */ + ["\u89D0", "\u89D0"], /* CJK Ideograph */ + ["\u89D1", "\u89D1"], /* CJK Ideograph */ + ["\u89D2", "\u89D2"], /* CJK Ideograph */ + ["\u89D3", "\u89D3"], /* CJK Ideograph */ + ["\u89D4", "\u89D4"], /* CJK Ideograph */ + ["\u89D5", "\u89D5"], /* CJK Ideograph */ + ["\u89D6", "\u89D6"], /* CJK Ideograph */ + ["\u89D7", "\u89D7"], /* CJK Ideograph */ + ["\u89D8", "\u89D8"], /* CJK Ideograph */ + ["\u89D9", "\u89D9"], /* CJK Ideograph */ + ["\u89DA", "\u89DA"], /* CJK Ideograph */ + ["\u89DB", "\u89DB"], /* CJK Ideograph */ + ["\u89DC", "\u89DC"], /* CJK Ideograph */ + ["\u89DD", "\u89DD"], /* CJK Ideograph */ + ["\u89DE", "\u89DE"], /* CJK Ideograph */ + ["\u89DF", "\u89DF"], /* CJK Ideograph */ + ["\u89E0", "\u89E0"], /* CJK Ideograph */ + ["\u89E1", "\u89E1"], /* CJK Ideograph */ + ["\u89E2", "\u89E2"], /* CJK Ideograph */ + ["\u89E3", "\u89E3"], /* CJK Ideograph */ + ["\u89E4", "\u89E4"], /* CJK Ideograph */ + ["\u89E5", "\u89E5"], /* CJK Ideograph */ + ["\u89E6", "\u89E6"], /* CJK Ideograph */ + ["\u89E7", "\u89E7"], /* CJK Ideograph */ + ["\u89E8", "\u89E8"], /* CJK Ideograph */ + ["\u89E9", "\u89E9"], /* CJK Ideograph */ + ["\u89EA", "\u89EA"], /* CJK Ideograph */ + ["\u89EB", "\u89EB"], /* CJK Ideograph */ + ["\u89EC", "\u89EC"], /* CJK Ideograph */ + ["\u89ED", "\u89ED"], /* CJK Ideograph */ + ["\u89EE", "\u89EE"], /* CJK Ideograph */ + ["\u89EF", "\u89EF"], /* CJK Ideograph */ + ["\u89F0", "\u89F0"], /* CJK Ideograph */ + ["\u89F1", "\u89F1"], /* CJK Ideograph */ + ["\u89F2", "\u89F2"], /* CJK Ideograph */ + ["\u89F3", "\u89F3"], /* CJK Ideograph */ + ["\u89F4", "\u89F4"], /* CJK Ideograph */ + ["\u89F5", "\u89F5"], /* CJK Ideograph */ + ["\u89F6", "\u89F6"], /* CJK Ideograph */ + ["\u89F7", "\u89F7"], /* CJK Ideograph */ + ["\u89F8", "\u89F8"], /* CJK Ideograph */ + ["\u89F9", "\u89F9"], /* CJK Ideograph */ + ["\u89FA", "\u89FA"], /* CJK Ideograph */ + ["\u89FB", "\u89FB"], /* CJK Ideograph */ + ["\u89FC", "\u89FC"], /* CJK Ideograph */ + ["\u89FD", "\u89FD"], /* CJK Ideograph */ + ["\u89FE", "\u89FE"], /* CJK Ideograph */ + ["\u89FF", "\u89FF"], /* CJK Ideograph */ + ["\u8A00", "\u8A00"], /* CJK Ideograph */ + ["\u8A01", "\u8A01"], /* CJK Ideograph */ + ["\u8A02", "\u8A02"], /* CJK Ideograph */ + ["\u8A03", "\u8A03"], /* CJK Ideograph */ + ["\u8A04", "\u8A04"], /* CJK Ideograph */ + ["\u8A05", "\u8A05"], /* CJK Ideograph */ + ["\u8A06", "\u8A06"], /* CJK Ideograph */ + ["\u8A07", "\u8A07"], /* CJK Ideograph */ + ["\u8A08", "\u8A08"], /* CJK Ideograph */ + ["\u8A09", "\u8A09"], /* CJK Ideograph */ + ["\u8A0A", "\u8A0A"], /* CJK Ideograph */ + ["\u8A0B", "\u8A0B"], /* CJK Ideograph */ + ["\u8A0C", "\u8A0C"], /* CJK Ideograph */ + ["\u8A0D", "\u8A0D"], /* CJK Ideograph */ + ["\u8A0E", "\u8A0E"], /* CJK Ideograph */ + ["\u8A0F", "\u8A0F"], /* CJK Ideograph */ + ["\u8A10", "\u8A10"], /* CJK Ideograph */ + ["\u8A11", "\u8A11"], /* CJK Ideograph */ + ["\u8A12", "\u8A12"], /* CJK Ideograph */ + ["\u8A13", "\u8A13"], /* CJK Ideograph */ + ["\u8A14", "\u8A14"], /* CJK Ideograph */ + ["\u8A15", "\u8A15"], /* CJK Ideograph */ + ["\u8A16", "\u8A16"], /* CJK Ideograph */ + ["\u8A17", "\u8A17"], /* CJK Ideograph */ + ["\u8A18", "\u8A18"], /* CJK Ideograph */ + ["\u8A19", "\u8A19"], /* CJK Ideograph */ + ["\u8A1A", "\u8A1A"], /* CJK Ideograph */ + ["\u8A1B", "\u8A1B"], /* CJK Ideograph */ + ["\u8A1C", "\u8A1C"], /* CJK Ideograph */ + ["\u8A1D", "\u8A1D"], /* CJK Ideograph */ + ["\u8A1E", "\u8A1E"], /* CJK Ideograph */ + ["\u8A1F", "\u8A1F"], /* CJK Ideograph */ + ["\u8A20", "\u8A20"], /* CJK Ideograph */ + ["\u8A21", "\u8A21"], /* CJK Ideograph */ + ["\u8A22", "\u8A22"], /* CJK Ideograph */ + ["\u8A23", "\u8A23"], /* CJK Ideograph */ + ["\u8A24", "\u8A24"], /* CJK Ideograph */ + ["\u8A25", "\u8A25"], /* CJK Ideograph */ + ["\u8A26", "\u8A26"], /* CJK Ideograph */ + ["\u8A27", "\u8A27"], /* CJK Ideograph */ + ["\u8A28", "\u8A28"], /* CJK Ideograph */ + ["\u8A29", "\u8A29"], /* CJK Ideograph */ + ["\u8A2A", "\u8A2A"], /* CJK Ideograph */ + ["\u8A2B", "\u8A2B"], /* CJK Ideograph */ + ["\u8A2C", "\u8A2C"], /* CJK Ideograph */ + ["\u8A2D", "\u8A2D"], /* CJK Ideograph */ + ["\u8A2E", "\u8A2E"], /* CJK Ideograph */ + ["\u8A2F", "\u8A2F"], /* CJK Ideograph */ + ["\u8A30", "\u8A30"], /* CJK Ideograph */ + ["\u8A31", "\u8A31"], /* CJK Ideograph */ + ["\u8A32", "\u8A32"], /* CJK Ideograph */ + ["\u8A33", "\u8A33"], /* CJK Ideograph */ + ["\u8A34", "\u8A34"], /* CJK Ideograph */ + ["\u8A35", "\u8A35"], /* CJK Ideograph */ + ["\u8A36", "\u8A36"], /* CJK Ideograph */ + ["\u8A37", "\u8A37"], /* CJK Ideograph */ + ["\u8A38", "\u8A38"], /* CJK Ideograph */ + ["\u8A39", "\u8A39"], /* CJK Ideograph */ + ["\u8A3A", "\u8A3A"], /* CJK Ideograph */ + ["\u8A3B", "\u8A3B"], /* CJK Ideograph */ + ["\u8A3C", "\u8A3C"], /* CJK Ideograph */ + ["\u8A3D", "\u8A3D"], /* CJK Ideograph */ + ["\u8A3E", "\u8A3E"], /* CJK Ideograph */ + ["\u8A3F", "\u8A3F"], /* CJK Ideograph */ + ["\u8A40", "\u8A40"], /* CJK Ideograph */ + ["\u8A41", "\u8A41"], /* CJK Ideograph */ + ["\u8A42", "\u8A42"], /* CJK Ideograph */ + ["\u8A43", "\u8A43"], /* CJK Ideograph */ + ["\u8A44", "\u8A44"], /* CJK Ideograph */ + ["\u8A45", "\u8A45"], /* CJK Ideograph */ + ["\u8A46", "\u8A46"], /* CJK Ideograph */ + ["\u8A47", "\u8A47"], /* CJK Ideograph */ + ["\u8A48", "\u8A48"], /* CJK Ideograph */ + ["\u8A49", "\u8A49"], /* CJK Ideograph */ + ["\u8A4A", "\u8A4A"], /* CJK Ideograph */ + ["\u8A4B", "\u8A4B"], /* CJK Ideograph */ + ["\u8A4C", "\u8A4C"], /* CJK Ideograph */ + ["\u8A4D", "\u8A4D"], /* CJK Ideograph */ + ["\u8A4E", "\u8A4E"], /* CJK Ideograph */ + ["\u8A4F", "\u8A4F"], /* CJK Ideograph */ + ["\u8A50", "\u8A50"], /* CJK Ideograph */ + ["\u8A51", "\u8A51"], /* CJK Ideograph */ + ["\u8A52", "\u8A52"], /* CJK Ideograph */ + ["\u8A53", "\u8A53"], /* CJK Ideograph */ + ["\u8A54", "\u8A54"], /* CJK Ideograph */ + ["\u8A55", "\u8A55"], /* CJK Ideograph */ + ["\u8A56", "\u8A56"], /* CJK Ideograph */ + ["\u8A57", "\u8A57"], /* CJK Ideograph */ + ["\u8A58", "\u8A58"], /* CJK Ideograph */ + ["\u8A59", "\u8A59"], /* CJK Ideograph */ + ["\u8A5A", "\u8A5A"], /* CJK Ideograph */ + ["\u8A5B", "\u8A5B"], /* CJK Ideograph */ + ["\u8A5C", "\u8A5C"], /* CJK Ideograph */ + ["\u8A5D", "\u8A5D"], /* CJK Ideograph */ + ["\u8A5E", "\u8A5E"], /* CJK Ideograph */ + ["\u8A5F", "\u8A5F"], /* CJK Ideograph */ + ["\u8A60", "\u8A60"], /* CJK Ideograph */ + ["\u8A61", "\u8A61"], /* CJK Ideograph */ + ["\u8A62", "\u8A62"], /* CJK Ideograph */ + ["\u8A63", "\u8A63"], /* CJK Ideograph */ + ["\u8A64", "\u8A64"], /* CJK Ideograph */ + ["\u8A65", "\u8A65"], /* CJK Ideograph */ + ["\u8A66", "\u8A66"], /* CJK Ideograph */ + ["\u8A67", "\u8A67"], /* CJK Ideograph */ + ["\u8A68", "\u8A68"], /* CJK Ideograph */ + ["\u8A69", "\u8A69"], /* CJK Ideograph */ + ["\u8A6A", "\u8A6A"], /* CJK Ideograph */ + ["\u8A6B", "\u8A6B"], /* CJK Ideograph */ + ["\u8A6C", "\u8A6C"], /* CJK Ideograph */ + ["\u8A6D", "\u8A6D"], /* CJK Ideograph */ + ["\u8A6E", "\u8A6E"], /* CJK Ideograph */ + ["\u8A6F", "\u8A6F"], /* CJK Ideograph */ + ["\u8A70", "\u8A70"], /* CJK Ideograph */ + ["\u8A71", "\u8A71"], /* CJK Ideograph */ + ["\u8A72", "\u8A72"], /* CJK Ideograph */ + ["\u8A73", "\u8A73"], /* CJK Ideograph */ + ["\u8A74", "\u8A74"], /* CJK Ideograph */ + ["\u8A75", "\u8A75"], /* CJK Ideograph */ + ["\u8A76", "\u8A76"], /* CJK Ideograph */ + ["\u8A77", "\u8A77"], /* CJK Ideograph */ + ["\u8A78", "\u8A78"], /* CJK Ideograph */ + ["\u8A79", "\u8A79"], /* CJK Ideograph */ + ["\u8A7A", "\u8A7A"], /* CJK Ideograph */ + ["\u8A7B", "\u8A7B"], /* CJK Ideograph */ + ["\u8A7C", "\u8A7C"], /* CJK Ideograph */ + ["\u8A7D", "\u8A7D"], /* CJK Ideograph */ + ["\u8A7E", "\u8A7E"], /* CJK Ideograph */ + ["\u8A7F", "\u8A7F"], /* CJK Ideograph */ + ["\u8A80", "\u8A80"], /* CJK Ideograph */ + ["\u8A81", "\u8A81"], /* CJK Ideograph */ + ["\u8A82", "\u8A82"], /* CJK Ideograph */ + ["\u8A83", "\u8A83"], /* CJK Ideograph */ + ["\u8A84", "\u8A84"], /* CJK Ideograph */ + ["\u8A85", "\u8A85"], /* CJK Ideograph */ + ["\u8A86", "\u8A86"], /* CJK Ideograph */ + ["\u8A87", "\u8A87"], /* CJK Ideograph */ + ["\u8A88", "\u8A88"], /* CJK Ideograph */ + ["\u8A89", "\u8A89"], /* CJK Ideograph */ + ["\u8A8A", "\u8A8A"], /* CJK Ideograph */ + ["\u8A8B", "\u8A8B"], /* CJK Ideograph */ + ["\u8A8C", "\u8A8C"], /* CJK Ideograph */ + ["\u8A8D", "\u8A8D"], /* CJK Ideograph */ + ["\u8A8E", "\u8A8E"], /* CJK Ideograph */ + ["\u8A8F", "\u8A8F"], /* CJK Ideograph */ + ["\u8A90", "\u8A90"], /* CJK Ideograph */ + ["\u8A91", "\u8A91"], /* CJK Ideograph */ + ["\u8A92", "\u8A92"], /* CJK Ideograph */ + ["\u8A93", "\u8A93"], /* CJK Ideograph */ + ["\u8A94", "\u8A94"], /* CJK Ideograph */ + ["\u8A95", "\u8A95"], /* CJK Ideograph */ + ["\u8A96", "\u8A96"], /* CJK Ideograph */ + ["\u8A97", "\u8A97"], /* CJK Ideograph */ + ["\u8A98", "\u8A98"], /* CJK Ideograph */ + ["\u8A99", "\u8A99"], /* CJK Ideograph */ + ["\u8A9A", "\u8A9A"], /* CJK Ideograph */ + ["\u8A9B", "\u8A9B"], /* CJK Ideograph */ + ["\u8A9C", "\u8A9C"], /* CJK Ideograph */ + ["\u8A9D", "\u8A9D"], /* CJK Ideograph */ + ["\u8A9E", "\u8A9E"], /* CJK Ideograph */ + ["\u8A9F", "\u8A9F"], /* CJK Ideograph */ + ["\u8AA0", "\u8AA0"], /* CJK Ideograph */ + ["\u8AA1", "\u8AA1"], /* CJK Ideograph */ + ["\u8AA2", "\u8AA2"], /* CJK Ideograph */ + ["\u8AA3", "\u8AA3"], /* CJK Ideograph */ + ["\u8AA4", "\u8AA4"], /* CJK Ideograph */ + ["\u8AA5", "\u8AA5"], /* CJK Ideograph */ + ["\u8AA6", "\u8AA6"], /* CJK Ideograph */ + ["\u8AA7", "\u8AA7"], /* CJK Ideograph */ + ["\u8AA8", "\u8AA8"], /* CJK Ideograph */ + ["\u8AA9", "\u8AA9"], /* CJK Ideograph */ + ["\u8AAA", "\u8AAA"], /* CJK Ideograph */ + ["\u8AAB", "\u8AAB"], /* CJK Ideograph */ + ["\u8AAC", "\u8AAC"], /* CJK Ideograph */ + ["\u8AAD", "\u8AAD"], /* CJK Ideograph */ + ["\u8AAE", "\u8AAE"], /* CJK Ideograph */ + ["\u8AAF", "\u8AAF"], /* CJK Ideograph */ + ["\u8AB0", "\u8AB0"], /* CJK Ideograph */ + ["\u8AB1", "\u8AB1"], /* CJK Ideograph */ + ["\u8AB2", "\u8AB2"], /* CJK Ideograph */ + ["\u8AB3", "\u8AB3"], /* CJK Ideograph */ + ["\u8AB4", "\u8AB4"], /* CJK Ideograph */ + ["\u8AB5", "\u8AB5"], /* CJK Ideograph */ + ["\u8AB6", "\u8AB6"], /* CJK Ideograph */ + ["\u8AB7", "\u8AB7"], /* CJK Ideograph */ + ["\u8AB8", "\u8AB8"], /* CJK Ideograph */ + ["\u8AB9", "\u8AB9"], /* CJK Ideograph */ + ["\u8ABA", "\u8ABA"], /* CJK Ideograph */ + ["\u8ABB", "\u8ABB"], /* CJK Ideograph */ + ["\u8ABC", "\u8ABC"], /* CJK Ideograph */ + ["\u8ABD", "\u8ABD"], /* CJK Ideograph */ + ["\u8ABE", "\u8ABE"], /* CJK Ideograph */ + ["\u8ABF", "\u8ABF"], /* CJK Ideograph */ + ["\u8AC0", "\u8AC0"], /* CJK Ideograph */ + ["\u8AC1", "\u8AC1"], /* CJK Ideograph */ + ["\u8AC2", "\u8AC2"], /* CJK Ideograph */ + ["\u8AC3", "\u8AC3"], /* CJK Ideograph */ + ["\u8AC4", "\u8AC4"], /* CJK Ideograph */ + ["\u8AC5", "\u8AC5"], /* CJK Ideograph */ + ["\u8AC6", "\u8AC6"], /* CJK Ideograph */ + ["\u8AC7", "\u8AC7"], /* CJK Ideograph */ + ["\u8AC8", "\u8AC8"], /* CJK Ideograph */ + ["\u8AC9", "\u8AC9"], /* CJK Ideograph */ + ["\u8ACA", "\u8ACA"], /* CJK Ideograph */ + ["\u8ACB", "\u8ACB"], /* CJK Ideograph */ + ["\u8ACC", "\u8ACC"], /* CJK Ideograph */ + ["\u8ACD", "\u8ACD"], /* CJK Ideograph */ + ["\u8ACE", "\u8ACE"], /* CJK Ideograph */ + ["\u8ACF", "\u8ACF"], /* CJK Ideograph */ + ["\u8AD0", "\u8AD0"], /* CJK Ideograph */ + ["\u8AD1", "\u8AD1"], /* CJK Ideograph */ + ["\u8AD2", "\u8AD2"], /* CJK Ideograph */ + ["\u8AD3", "\u8AD3"], /* CJK Ideograph */ + ["\u8AD4", "\u8AD4"], /* CJK Ideograph */ + ["\u8AD5", "\u8AD5"], /* CJK Ideograph */ + ["\u8AD6", "\u8AD6"], /* CJK Ideograph */ + ["\u8AD7", "\u8AD7"], /* CJK Ideograph */ + ["\u8AD8", "\u8AD8"], /* CJK Ideograph */ + ["\u8AD9", "\u8AD9"], /* CJK Ideograph */ + ["\u8ADA", "\u8ADA"], /* CJK Ideograph */ + ["\u8ADB", "\u8ADB"], /* CJK Ideograph */ + ["\u8ADC", "\u8ADC"], /* CJK Ideograph */ + ["\u8ADD", "\u8ADD"], /* CJK Ideograph */ + ["\u8ADE", "\u8ADE"], /* CJK Ideograph */ + ["\u8ADF", "\u8ADF"], /* CJK Ideograph */ + ["\u8AE0", "\u8AE0"], /* CJK Ideograph */ + ["\u8AE1", "\u8AE1"], /* CJK Ideograph */ + ["\u8AE2", "\u8AE2"], /* CJK Ideograph */ + ["\u8AE3", "\u8AE3"], /* CJK Ideograph */ + ["\u8AE4", "\u8AE4"], /* CJK Ideograph */ + ["\u8AE5", "\u8AE5"], /* CJK Ideograph */ + ["\u8AE6", "\u8AE6"], /* CJK Ideograph */ + ["\u8AE7", "\u8AE7"], /* CJK Ideograph */ + ["\u8AE8", "\u8AE8"], /* CJK Ideograph */ + ["\u8AE9", "\u8AE9"], /* CJK Ideograph */ + ["\u8AEA", "\u8AEA"], /* CJK Ideograph */ + ["\u8AEB", "\u8AEB"], /* CJK Ideograph */ + ["\u8AEC", "\u8AEC"], /* CJK Ideograph */ + ["\u8AED", "\u8AED"], /* CJK Ideograph */ + ["\u8AEE", "\u8AEE"], /* CJK Ideograph */ + ["\u8AEF", "\u8AEF"], /* CJK Ideograph */ + ["\u8AF0", "\u8AF0"], /* CJK Ideograph */ + ["\u8AF1", "\u8AF1"], /* CJK Ideograph */ + ["\u8AF2", "\u8AF2"], /* CJK Ideograph */ + ["\u8AF3", "\u8AF3"], /* CJK Ideograph */ + ["\u8AF4", "\u8AF4"], /* CJK Ideograph */ + ["\u8AF5", "\u8AF5"], /* CJK Ideograph */ + ["\u8AF6", "\u8AF6"], /* CJK Ideograph */ + ["\u8AF7", "\u8AF7"], /* CJK Ideograph */ + ["\u8AF8", "\u8AF8"], /* CJK Ideograph */ + ["\u8AF9", "\u8AF9"], /* CJK Ideograph */ + ["\u8AFA", "\u8AFA"], /* CJK Ideograph */ + ["\u8AFB", "\u8AFB"], /* CJK Ideograph */ + ["\u8AFC", "\u8AFC"], /* CJK Ideograph */ + ["\u8AFD", "\u8AFD"], /* CJK Ideograph */ + ["\u8AFE", "\u8AFE"], /* CJK Ideograph */ + ["\u8AFF", "\u8AFF"], /* CJK Ideograph */ + ["\u8B00", "\u8B00"], /* CJK Ideograph */ + ["\u8B01", "\u8B01"], /* CJK Ideograph */ + ["\u8B02", "\u8B02"], /* CJK Ideograph */ + ["\u8B03", "\u8B03"], /* CJK Ideograph */ + ["\u8B04", "\u8B04"], /* CJK Ideograph */ + ["\u8B05", "\u8B05"], /* CJK Ideograph */ + ["\u8B06", "\u8B06"], /* CJK Ideograph */ + ["\u8B07", "\u8B07"], /* CJK Ideograph */ + ["\u8B08", "\u8B08"], /* CJK Ideograph */ + ["\u8B09", "\u8B09"], /* CJK Ideograph */ + ["\u8B0A", "\u8B0A"], /* CJK Ideograph */ + ["\u8B0B", "\u8B0B"], /* CJK Ideograph */ + ["\u8B0C", "\u8B0C"], /* CJK Ideograph */ + ["\u8B0D", "\u8B0D"], /* CJK Ideograph */ + ["\u8B0E", "\u8B0E"], /* CJK Ideograph */ + ["\u8B0F", "\u8B0F"], /* CJK Ideograph */ + ["\u8B10", "\u8B10"], /* CJK Ideograph */ + ["\u8B11", "\u8B11"], /* CJK Ideograph */ + ["\u8B12", "\u8B12"], /* CJK Ideograph */ + ["\u8B13", "\u8B13"], /* CJK Ideograph */ + ["\u8B14", "\u8B14"], /* CJK Ideograph */ + ["\u8B15", "\u8B15"], /* CJK Ideograph */ + ["\u8B16", "\u8B16"], /* CJK Ideograph */ + ["\u8B17", "\u8B17"], /* CJK Ideograph */ + ["\u8B18", "\u8B18"], /* CJK Ideograph */ + ["\u8B19", "\u8B19"], /* CJK Ideograph */ + ["\u8B1A", "\u8B1A"], /* CJK Ideograph */ + ["\u8B1B", "\u8B1B"], /* CJK Ideograph */ + ["\u8B1C", "\u8B1C"], /* CJK Ideograph */ + ["\u8B1D", "\u8B1D"], /* CJK Ideograph */ + ["\u8B1E", "\u8B1E"], /* CJK Ideograph */ + ["\u8B1F", "\u8B1F"], /* CJK Ideograph */ + ["\u8B20", "\u8B20"], /* CJK Ideograph */ + ["\u8B21", "\u8B21"], /* CJK Ideograph */ + ["\u8B22", "\u8B22"], /* CJK Ideograph */ + ["\u8B23", "\u8B23"], /* CJK Ideograph */ + ["\u8B24", "\u8B24"], /* CJK Ideograph */ + ["\u8B25", "\u8B25"], /* CJK Ideograph */ + ["\u8B26", "\u8B26"], /* CJK Ideograph */ + ["\u8B27", "\u8B27"], /* CJK Ideograph */ + ["\u8B28", "\u8B28"], /* CJK Ideograph */ + ["\u8B29", "\u8B29"], /* CJK Ideograph */ + ["\u8B2A", "\u8B2A"], /* CJK Ideograph */ + ["\u8B2B", "\u8B2B"], /* CJK Ideograph */ + ["\u8B2C", "\u8B2C"], /* CJK Ideograph */ + ["\u8B2D", "\u8B2D"], /* CJK Ideograph */ + ["\u8B2E", "\u8B2E"], /* CJK Ideograph */ + ["\u8B2F", "\u8B2F"], /* CJK Ideograph */ + ["\u8B30", "\u8B30"], /* CJK Ideograph */ + ["\u8B31", "\u8B31"], /* CJK Ideograph */ + ["\u8B32", "\u8B32"], /* CJK Ideograph */ + ["\u8B33", "\u8B33"], /* CJK Ideograph */ + ["\u8B34", "\u8B34"], /* CJK Ideograph */ + ["\u8B35", "\u8B35"], /* CJK Ideograph */ + ["\u8B36", "\u8B36"], /* CJK Ideograph */ + ["\u8B37", "\u8B37"], /* CJK Ideograph */ + ["\u8B38", "\u8B38"], /* CJK Ideograph */ + ["\u8B39", "\u8B39"], /* CJK Ideograph */ + ["\u8B3A", "\u8B3A"], /* CJK Ideograph */ + ["\u8B3B", "\u8B3B"], /* CJK Ideograph */ + ["\u8B3C", "\u8B3C"], /* CJK Ideograph */ + ["\u8B3D", "\u8B3D"], /* CJK Ideograph */ + ["\u8B3E", "\u8B3E"], /* CJK Ideograph */ + ["\u8B3F", "\u8B3F"], /* CJK Ideograph */ + ["\u8B40", "\u8B40"], /* CJK Ideograph */ + ["\u8B41", "\u8B41"], /* CJK Ideograph */ + ["\u8B42", "\u8B42"], /* CJK Ideograph */ + ["\u8B43", "\u8B43"], /* CJK Ideograph */ + ["\u8B44", "\u8B44"], /* CJK Ideograph */ + ["\u8B45", "\u8B45"], /* CJK Ideograph */ + ["\u8B46", "\u8B46"], /* CJK Ideograph */ + ["\u8B47", "\u8B47"], /* CJK Ideograph */ + ["\u8B48", "\u8B48"], /* CJK Ideograph */ + ["\u8B49", "\u8B49"], /* CJK Ideograph */ + ["\u8B4A", "\u8B4A"], /* CJK Ideograph */ + ["\u8B4B", "\u8B4B"], /* CJK Ideograph */ + ["\u8B4C", "\u8B4C"], /* CJK Ideograph */ + ["\u8B4D", "\u8B4D"], /* CJK Ideograph */ + ["\u8B4E", "\u8B4E"], /* CJK Ideograph */ + ["\u8B4F", "\u8B4F"], /* CJK Ideograph */ + ["\u8B50", "\u8B50"], /* CJK Ideograph */ + ["\u8B51", "\u8B51"], /* CJK Ideograph */ + ["\u8B52", "\u8B52"], /* CJK Ideograph */ + ["\u8B53", "\u8B53"], /* CJK Ideograph */ + ["\u8B54", "\u8B54"], /* CJK Ideograph */ + ["\u8B55", "\u8B55"], /* CJK Ideograph */ + ["\u8B56", "\u8B56"], /* CJK Ideograph */ + ["\u8B57", "\u8B57"], /* CJK Ideograph */ + ["\u8B58", "\u8B58"], /* CJK Ideograph */ + ["\u8B59", "\u8B59"], /* CJK Ideograph */ + ["\u8B5A", "\u8B5A"], /* CJK Ideograph */ + ["\u8B5B", "\u8B5B"], /* CJK Ideograph */ + ["\u8B5C", "\u8B5C"], /* CJK Ideograph */ + ["\u8B5D", "\u8B5D"], /* CJK Ideograph */ + ["\u8B5E", "\u8B5E"], /* CJK Ideograph */ + ["\u8B5F", "\u8B5F"], /* CJK Ideograph */ + ["\u8B60", "\u8B60"], /* CJK Ideograph */ + ["\u8B61", "\u8B61"], /* CJK Ideograph */ + ["\u8B62", "\u8B62"], /* CJK Ideograph */ + ["\u8B63", "\u8B63"], /* CJK Ideograph */ + ["\u8B64", "\u8B64"], /* CJK Ideograph */ + ["\u8B65", "\u8B65"], /* CJK Ideograph */ + ["\u8B66", "\u8B66"], /* CJK Ideograph */ + ["\u8B67", "\u8B67"], /* CJK Ideograph */ + ["\u8B68", "\u8B68"], /* CJK Ideograph */ + ["\u8B69", "\u8B69"], /* CJK Ideograph */ + ["\u8B6A", "\u8B6A"], /* CJK Ideograph */ + ["\u8B6B", "\u8B6B"], /* CJK Ideograph */ + ["\u8B6C", "\u8B6C"], /* CJK Ideograph */ + ["\u8B6D", "\u8B6D"], /* CJK Ideograph */ + ["\u8B6E", "\u8B6E"], /* CJK Ideograph */ + ["\u8B6F", "\u8B6F"], /* CJK Ideograph */ + ["\u8B70", "\u8B70"], /* CJK Ideograph */ + ["\u8B71", "\u8B71"], /* CJK Ideograph */ + ["\u8B72", "\u8B72"], /* CJK Ideograph */ + ["\u8B73", "\u8B73"], /* CJK Ideograph */ + ["\u8B74", "\u8B74"], /* CJK Ideograph */ + ["\u8B75", "\u8B75"], /* CJK Ideograph */ + ["\u8B76", "\u8B76"], /* CJK Ideograph */ + ["\u8B77", "\u8B77"], /* CJK Ideograph */ + ["\u8B78", "\u8B78"], /* CJK Ideograph */ + ["\u8B79", "\u8B79"], /* CJK Ideograph */ + ["\u8B7A", "\u8B7A"], /* CJK Ideograph */ + ["\u8B7B", "\u8B7B"], /* CJK Ideograph */ + ["\u8B7C", "\u8B7C"], /* CJK Ideograph */ + ["\u8B7D", "\u8B7D"], /* CJK Ideograph */ + ["\u8B7E", "\u8B7E"], /* CJK Ideograph */ + ["\u8B7F", "\u8B7F"], /* CJK Ideograph */ + ["\u8B80", "\u8B80"], /* CJK Ideograph */ + ["\u8B81", "\u8B81"], /* CJK Ideograph */ + ["\u8B82", "\u8B82"], /* CJK Ideograph */ + ["\u8B83", "\u8B83"], /* CJK Ideograph */ + ["\u8B84", "\u8B84"], /* CJK Ideograph */ + ["\u8B85", "\u8B85"], /* CJK Ideograph */ + ["\u8B86", "\u8B86"], /* CJK Ideograph */ + ["\u8B87", "\u8B87"], /* CJK Ideograph */ + ["\u8B88", "\u8B88"], /* CJK Ideograph */ + ["\u8B89", "\u8B89"], /* CJK Ideograph */ + ["\u8B8A", "\u8B8A"], /* CJK Ideograph */ + ["\u8B8B", "\u8B8B"], /* CJK Ideograph */ + ["\u8B8C", "\u8B8C"], /* CJK Ideograph */ + ["\u8B8D", "\u8B8D"], /* CJK Ideograph */ + ["\u8B8E", "\u8B8E"], /* CJK Ideograph */ + ["\u8B8F", "\u8B8F"], /* CJK Ideograph */ + ["\u8B90", "\u8B90"], /* CJK Ideograph */ + ["\u8B91", "\u8B91"], /* CJK Ideograph */ + ["\u8B92", "\u8B92"], /* CJK Ideograph */ + ["\u8B93", "\u8B93"], /* CJK Ideograph */ + ["\u8B94", "\u8B94"], /* CJK Ideograph */ + ["\u8B95", "\u8B95"], /* CJK Ideograph */ + ["\u8B96", "\u8B96"], /* CJK Ideograph */ + ["\u8B97", "\u8B97"], /* CJK Ideograph */ + ["\u8B98", "\u8B98"], /* CJK Ideograph */ + ["\u8B99", "\u8B99"], /* CJK Ideograph */ + ["\u8B9A", "\u8B9A"], /* CJK Ideograph */ + ["\u8B9B", "\u8B9B"], /* CJK Ideograph */ + ["\u8B9C", "\u8B9C"], /* CJK Ideograph */ + ["\u8B9D", "\u8B9D"], /* CJK Ideograph */ + ["\u8B9E", "\u8B9E"], /* CJK Ideograph */ + ["\u8B9F", "\u8B9F"], /* CJK Ideograph */ + ["\u8BA0", "\u8BA0"], /* CJK Ideograph */ + ["\u8BA1", "\u8BA1"], /* CJK Ideograph */ + ["\u8BA2", "\u8BA2"], /* CJK Ideograph */ + ["\u8BA3", "\u8BA3"], /* CJK Ideograph */ + ["\u8BA4", "\u8BA4"], /* CJK Ideograph */ + ["\u8BA5", "\u8BA5"], /* CJK Ideograph */ + ["\u8BA6", "\u8BA6"], /* CJK Ideograph */ + ["\u8BA7", "\u8BA7"], /* CJK Ideograph */ + ["\u8BA8", "\u8BA8"], /* CJK Ideograph */ + ["\u8BA9", "\u8BA9"], /* CJK Ideograph */ + ["\u8BAA", "\u8BAA"], /* CJK Ideograph */ + ["\u8BAB", "\u8BAB"], /* CJK Ideograph */ + ["\u8BAC", "\u8BAC"], /* CJK Ideograph */ + ["\u8BAD", "\u8BAD"], /* CJK Ideograph */ + ["\u8BAE", "\u8BAE"], /* CJK Ideograph */ + ["\u8BAF", "\u8BAF"], /* CJK Ideograph */ + ["\u8BB0", "\u8BB0"], /* CJK Ideograph */ + ["\u8BB1", "\u8BB1"], /* CJK Ideograph */ + ["\u8BB2", "\u8BB2"], /* CJK Ideograph */ + ["\u8BB3", "\u8BB3"], /* CJK Ideograph */ + ["\u8BB4", "\u8BB4"], /* CJK Ideograph */ + ["\u8BB5", "\u8BB5"], /* CJK Ideograph */ + ["\u8BB6", "\u8BB6"], /* CJK Ideograph */ + ["\u8BB7", "\u8BB7"], /* CJK Ideograph */ + ["\u8BB8", "\u8BB8"], /* CJK Ideograph */ + ["\u8BB9", "\u8BB9"], /* CJK Ideograph */ + ["\u8BBA", "\u8BBA"], /* CJK Ideograph */ + ["\u8BBB", "\u8BBB"], /* CJK Ideograph */ + ["\u8BBC", "\u8BBC"], /* CJK Ideograph */ + ["\u8BBD", "\u8BBD"], /* CJK Ideograph */ + ["\u8BBE", "\u8BBE"], /* CJK Ideograph */ + ["\u8BBF", "\u8BBF"], /* CJK Ideograph */ + ["\u8BC0", "\u8BC0"], /* CJK Ideograph */ + ["\u8BC1", "\u8BC1"], /* CJK Ideograph */ + ["\u8BC2", "\u8BC2"], /* CJK Ideograph */ + ["\u8BC3", "\u8BC3"], /* CJK Ideograph */ + ["\u8BC4", "\u8BC4"], /* CJK Ideograph */ + ["\u8BC5", "\u8BC5"], /* CJK Ideograph */ + ["\u8BC6", "\u8BC6"], /* CJK Ideograph */ + ["\u8BC7", "\u8BC7"], /* CJK Ideograph */ + ["\u8BC8", "\u8BC8"], /* CJK Ideograph */ + ["\u8BC9", "\u8BC9"], /* CJK Ideograph */ + ["\u8BCA", "\u8BCA"], /* CJK Ideograph */ + ["\u8BCB", "\u8BCB"], /* CJK Ideograph */ + ["\u8BCC", "\u8BCC"], /* CJK Ideograph */ + ["\u8BCD", "\u8BCD"], /* CJK Ideograph */ + ["\u8BCE", "\u8BCE"], /* CJK Ideograph */ + ["\u8BCF", "\u8BCF"], /* CJK Ideograph */ + ["\u8BD0", "\u8BD0"], /* CJK Ideograph */ + ["\u8BD1", "\u8BD1"], /* CJK Ideograph */ + ["\u8BD2", "\u8BD2"], /* CJK Ideograph */ + ["\u8BD3", "\u8BD3"], /* CJK Ideograph */ + ["\u8BD4", "\u8BD4"], /* CJK Ideograph */ + ["\u8BD5", "\u8BD5"], /* CJK Ideograph */ + ["\u8BD6", "\u8BD6"], /* CJK Ideograph */ + ["\u8BD7", "\u8BD7"], /* CJK Ideograph */ + ["\u8BD8", "\u8BD8"], /* CJK Ideograph */ + ["\u8BD9", "\u8BD9"], /* CJK Ideograph */ + ["\u8BDA", "\u8BDA"], /* CJK Ideograph */ + ["\u8BDB", "\u8BDB"], /* CJK Ideograph */ + ["\u8BDC", "\u8BDC"], /* CJK Ideograph */ + ["\u8BDD", "\u8BDD"], /* CJK Ideograph */ + ["\u8BDE", "\u8BDE"], /* CJK Ideograph */ + ["\u8BDF", "\u8BDF"], /* CJK Ideograph */ + ["\u8BE0", "\u8BE0"], /* CJK Ideograph */ + ["\u8BE1", "\u8BE1"], /* CJK Ideograph */ + ["\u8BE2", "\u8BE2"], /* CJK Ideograph */ + ["\u8BE3", "\u8BE3"], /* CJK Ideograph */ + ["\u8BE4", "\u8BE4"], /* CJK Ideograph */ + ["\u8BE5", "\u8BE5"], /* CJK Ideograph */ + ["\u8BE6", "\u8BE6"], /* CJK Ideograph */ + ["\u8BE7", "\u8BE7"], /* CJK Ideograph */ + ["\u8BE8", "\u8BE8"], /* CJK Ideograph */ + ["\u8BE9", "\u8BE9"], /* CJK Ideograph */ + ["\u8BEA", "\u8BEA"], /* CJK Ideograph */ + ["\u8BEB", "\u8BEB"], /* CJK Ideograph */ + ["\u8BEC", "\u8BEC"], /* CJK Ideograph */ + ["\u8BED", "\u8BED"], /* CJK Ideograph */ + ["\u8BEE", "\u8BEE"], /* CJK Ideograph */ + ["\u8BEF", "\u8BEF"], /* CJK Ideograph */ + ["\u8BF0", "\u8BF0"], /* CJK Ideograph */ + ["\u8BF1", "\u8BF1"], /* CJK Ideograph */ + ["\u8BF2", "\u8BF2"], /* CJK Ideograph */ + ["\u8BF3", "\u8BF3"], /* CJK Ideograph */ + ["\u8BF4", "\u8BF4"], /* CJK Ideograph */ + ["\u8BF5", "\u8BF5"], /* CJK Ideograph */ + ["\u8BF6", "\u8BF6"], /* CJK Ideograph */ + ["\u8BF7", "\u8BF7"], /* CJK Ideograph */ + ["\u8BF8", "\u8BF8"], /* CJK Ideograph */ + ["\u8BF9", "\u8BF9"], /* CJK Ideograph */ + ["\u8BFA", "\u8BFA"], /* CJK Ideograph */ + ["\u8BFB", "\u8BFB"], /* CJK Ideograph */ + ["\u8BFC", "\u8BFC"], /* CJK Ideograph */ + ["\u8BFD", "\u8BFD"], /* CJK Ideograph */ + ["\u8BFE", "\u8BFE"], /* CJK Ideograph */ + ["\u8BFF", "\u8BFF"], /* CJK Ideograph */ + ["\u8C00", "\u8C00"], /* CJK Ideograph */ + ["\u8C01", "\u8C01"], /* CJK Ideograph */ + ["\u8C02", "\u8C02"], /* CJK Ideograph */ + ["\u8C03", "\u8C03"], /* CJK Ideograph */ + ["\u8C04", "\u8C04"], /* CJK Ideograph */ + ["\u8C05", "\u8C05"], /* CJK Ideograph */ + ["\u8C06", "\u8C06"], /* CJK Ideograph */ + ["\u8C07", "\u8C07"], /* CJK Ideograph */ + ["\u8C08", "\u8C08"], /* CJK Ideograph */ + ["\u8C09", "\u8C09"], /* CJK Ideograph */ + ["\u8C0A", "\u8C0A"], /* CJK Ideograph */ + ["\u8C0B", "\u8C0B"], /* CJK Ideograph */ + ["\u8C0C", "\u8C0C"], /* CJK Ideograph */ + ["\u8C0D", "\u8C0D"], /* CJK Ideograph */ + ["\u8C0E", "\u8C0E"], /* CJK Ideograph */ + ["\u8C0F", "\u8C0F"], /* CJK Ideograph */ + ["\u8C10", "\u8C10"], /* CJK Ideograph */ + ["\u8C11", "\u8C11"], /* CJK Ideograph */ + ["\u8C12", "\u8C12"], /* CJK Ideograph */ + ["\u8C13", "\u8C13"], /* CJK Ideograph */ + ["\u8C14", "\u8C14"], /* CJK Ideograph */ + ["\u8C15", "\u8C15"], /* CJK Ideograph */ + ["\u8C16", "\u8C16"], /* CJK Ideograph */ + ["\u8C17", "\u8C17"], /* CJK Ideograph */ + ["\u8C18", "\u8C18"], /* CJK Ideograph */ + ["\u8C19", "\u8C19"], /* CJK Ideograph */ + ["\u8C1A", "\u8C1A"], /* CJK Ideograph */ + ["\u8C1B", "\u8C1B"], /* CJK Ideograph */ + ["\u8C1C", "\u8C1C"], /* CJK Ideograph */ + ["\u8C1D", "\u8C1D"], /* CJK Ideograph */ + ["\u8C1E", "\u8C1E"], /* CJK Ideograph */ + ["\u8C1F", "\u8C1F"], /* CJK Ideograph */ + ["\u8C20", "\u8C20"], /* CJK Ideograph */ + ["\u8C21", "\u8C21"], /* CJK Ideograph */ + ["\u8C22", "\u8C22"], /* CJK Ideograph */ + ["\u8C23", "\u8C23"], /* CJK Ideograph */ + ["\u8C24", "\u8C24"], /* CJK Ideograph */ + ["\u8C25", "\u8C25"], /* CJK Ideograph */ + ["\u8C26", "\u8C26"], /* CJK Ideograph */ + ["\u8C27", "\u8C27"], /* CJK Ideograph */ + ["\u8C28", "\u8C28"], /* CJK Ideograph */ + ["\u8C29", "\u8C29"], /* CJK Ideograph */ + ["\u8C2A", "\u8C2A"], /* CJK Ideograph */ + ["\u8C2B", "\u8C2B"], /* CJK Ideograph */ + ["\u8C2C", "\u8C2C"], /* CJK Ideograph */ + ["\u8C2D", "\u8C2D"], /* CJK Ideograph */ + ["\u8C2E", "\u8C2E"], /* CJK Ideograph */ + ["\u8C2F", "\u8C2F"], /* CJK Ideograph */ + ["\u8C30", "\u8C30"], /* CJK Ideograph */ + ["\u8C31", "\u8C31"], /* CJK Ideograph */ + ["\u8C32", "\u8C32"], /* CJK Ideograph */ + ["\u8C33", "\u8C33"], /* CJK Ideograph */ + ["\u8C34", "\u8C34"], /* CJK Ideograph */ + ["\u8C35", "\u8C35"], /* CJK Ideograph */ + ["\u8C36", "\u8C36"], /* CJK Ideograph */ + ["\u8C37", "\u8C37"], /* CJK Ideograph */ + ["\u8C38", "\u8C38"], /* CJK Ideograph */ + ["\u8C39", "\u8C39"], /* CJK Ideograph */ + ["\u8C3A", "\u8C3A"], /* CJK Ideograph */ + ["\u8C3B", "\u8C3B"], /* CJK Ideograph */ + ["\u8C3C", "\u8C3C"], /* CJK Ideograph */ + ["\u8C3D", "\u8C3D"], /* CJK Ideograph */ + ["\u8C3E", "\u8C3E"], /* CJK Ideograph */ + ["\u8C3F", "\u8C3F"], /* CJK Ideograph */ + ["\u8C40", "\u8C40"], /* CJK Ideograph */ + ["\u8C41", "\u8C41"], /* CJK Ideograph */ + ["\u8C42", "\u8C42"], /* CJK Ideograph */ + ["\u8C43", "\u8C43"], /* CJK Ideograph */ + ["\u8C44", "\u8C44"], /* CJK Ideograph */ + ["\u8C45", "\u8C45"], /* CJK Ideograph */ + ["\u8C46", "\u8C46"], /* CJK Ideograph */ + ["\u8C47", "\u8C47"], /* CJK Ideograph */ + ["\u8C48", "\u8C48"], /* CJK Ideograph */ + ["\u8C49", "\u8C49"], /* CJK Ideograph */ + ["\u8C4A", "\u8C4A"], /* CJK Ideograph */ + ["\u8C4B", "\u8C4B"], /* CJK Ideograph */ + ["\u8C4C", "\u8C4C"], /* CJK Ideograph */ + ["\u8C4D", "\u8C4D"], /* CJK Ideograph */ + ["\u8C4E", "\u8C4E"], /* CJK Ideograph */ + ["\u8C4F", "\u8C4F"], /* CJK Ideograph */ + ["\u8C50", "\u8C50"], /* CJK Ideograph */ + ["\u8C51", "\u8C51"], /* CJK Ideograph */ + ["\u8C52", "\u8C52"], /* CJK Ideograph */ + ["\u8C53", "\u8C53"], /* CJK Ideograph */ + ["\u8C54", "\u8C54"], /* CJK Ideograph */ + ["\u8C55", "\u8C55"], /* CJK Ideograph */ + ["\u8C56", "\u8C56"], /* CJK Ideograph */ + ["\u8C57", "\u8C57"], /* CJK Ideograph */ + ["\u8C58", "\u8C58"], /* CJK Ideograph */ + ["\u8C59", "\u8C59"], /* CJK Ideograph */ + ["\u8C5A", "\u8C5A"], /* CJK Ideograph */ + ["\u8C5B", "\u8C5B"], /* CJK Ideograph */ + ["\u8C5C", "\u8C5C"], /* CJK Ideograph */ + ["\u8C5D", "\u8C5D"], /* CJK Ideograph */ + ["\u8C5E", "\u8C5E"], /* CJK Ideograph */ + ["\u8C5F", "\u8C5F"], /* CJK Ideograph */ + ["\u8C60", "\u8C60"], /* CJK Ideograph */ + ["\u8C61", "\u8C61"], /* CJK Ideograph */ + ["\u8C62", "\u8C62"], /* CJK Ideograph */ + ["\u8C63", "\u8C63"], /* CJK Ideograph */ + ["\u8C64", "\u8C64"], /* CJK Ideograph */ + ["\u8C65", "\u8C65"], /* CJK Ideograph */ + ["\u8C66", "\u8C66"], /* CJK Ideograph */ + ["\u8C67", "\u8C67"], /* CJK Ideograph */ + ["\u8C68", "\u8C68"], /* CJK Ideograph */ + ["\u8C69", "\u8C69"], /* CJK Ideograph */ + ["\u8C6A", "\u8C6A"], /* CJK Ideograph */ + ["\u8C6B", "\u8C6B"], /* CJK Ideograph */ + ["\u8C6C", "\u8C6C"], /* CJK Ideograph */ + ["\u8C6D", "\u8C6D"], /* CJK Ideograph */ + ["\u8C6E", "\u8C6E"], /* CJK Ideograph */ + ["\u8C6F", "\u8C6F"], /* CJK Ideograph */ + ["\u8C70", "\u8C70"], /* CJK Ideograph */ + ["\u8C71", "\u8C71"], /* CJK Ideograph */ + ["\u8C72", "\u8C72"], /* CJK Ideograph */ + ["\u8C73", "\u8C73"], /* CJK Ideograph */ + ["\u8C74", "\u8C74"], /* CJK Ideograph */ + ["\u8C75", "\u8C75"], /* CJK Ideograph */ + ["\u8C76", "\u8C76"], /* CJK Ideograph */ + ["\u8C77", "\u8C77"], /* CJK Ideograph */ + ["\u8C78", "\u8C78"], /* CJK Ideograph */ + ["\u8C79", "\u8C79"], /* CJK Ideograph */ + ["\u8C7A", "\u8C7A"], /* CJK Ideograph */ + ["\u8C7B", "\u8C7B"], /* CJK Ideograph */ + ["\u8C7C", "\u8C7C"], /* CJK Ideograph */ + ["\u8C7D", "\u8C7D"], /* CJK Ideograph */ + ["\u8C7E", "\u8C7E"], /* CJK Ideograph */ + ["\u8C7F", "\u8C7F"], /* CJK Ideograph */ + ["\u8C80", "\u8C80"], /* CJK Ideograph */ + ["\u8C81", "\u8C81"], /* CJK Ideograph */ + ["\u8C82", "\u8C82"], /* CJK Ideograph */ + ["\u8C83", "\u8C83"], /* CJK Ideograph */ + ["\u8C84", "\u8C84"], /* CJK Ideograph */ + ["\u8C85", "\u8C85"], /* CJK Ideograph */ + ["\u8C86", "\u8C86"], /* CJK Ideograph */ + ["\u8C87", "\u8C87"], /* CJK Ideograph */ + ["\u8C88", "\u8C88"], /* CJK Ideograph */ + ["\u8C89", "\u8C89"], /* CJK Ideograph */ + ["\u8C8A", "\u8C8A"], /* CJK Ideograph */ + ["\u8C8B", "\u8C8B"], /* CJK Ideograph */ + ["\u8C8C", "\u8C8C"], /* CJK Ideograph */ + ["\u8C8D", "\u8C8D"], /* CJK Ideograph */ + ["\u8C8E", "\u8C8E"], /* CJK Ideograph */ + ["\u8C8F", "\u8C8F"], /* CJK Ideograph */ + ["\u8C90", "\u8C90"], /* CJK Ideograph */ + ["\u8C91", "\u8C91"], /* CJK Ideograph */ + ["\u8C92", "\u8C92"], /* CJK Ideograph */ + ["\u8C93", "\u8C93"], /* CJK Ideograph */ + ["\u8C94", "\u8C94"], /* CJK Ideograph */ + ["\u8C95", "\u8C95"], /* CJK Ideograph */ + ["\u8C96", "\u8C96"], /* CJK Ideograph */ + ["\u8C97", "\u8C97"], /* CJK Ideograph */ + ["\u8C98", "\u8C98"], /* CJK Ideograph */ + ["\u8C99", "\u8C99"], /* CJK Ideograph */ + ["\u8C9A", "\u8C9A"], /* CJK Ideograph */ + ["\u8C9B", "\u8C9B"], /* CJK Ideograph */ + ["\u8C9C", "\u8C9C"], /* CJK Ideograph */ + ["\u8C9D", "\u8C9D"], /* CJK Ideograph */ + ["\u8C9E", "\u8C9E"], /* CJK Ideograph */ + ["\u8C9F", "\u8C9F"], /* CJK Ideograph */ + ["\u8CA0", "\u8CA0"], /* CJK Ideograph */ + ["\u8CA1", "\u8CA1"], /* CJK Ideograph */ + ["\u8CA2", "\u8CA2"], /* CJK Ideograph */ + ["\u8CA3", "\u8CA3"], /* CJK Ideograph */ + ["\u8CA4", "\u8CA4"], /* CJK Ideograph */ + ["\u8CA5", "\u8CA5"], /* CJK Ideograph */ + ["\u8CA6", "\u8CA6"], /* CJK Ideograph */ + ["\u8CA7", "\u8CA7"], /* CJK Ideograph */ + ["\u8CA8", "\u8CA8"], /* CJK Ideograph */ + ["\u8CA9", "\u8CA9"], /* CJK Ideograph */ + ["\u8CAA", "\u8CAA"], /* CJK Ideograph */ + ["\u8CAB", "\u8CAB"], /* CJK Ideograph */ + ["\u8CAC", "\u8CAC"], /* CJK Ideograph */ + ["\u8CAD", "\u8CAD"], /* CJK Ideograph */ + ["\u8CAE", "\u8CAE"], /* CJK Ideograph */ + ["\u8CAF", "\u8CAF"], /* CJK Ideograph */ + ["\u8CB0", "\u8CB0"], /* CJK Ideograph */ + ["\u8CB1", "\u8CB1"], /* CJK Ideograph */ + ["\u8CB2", "\u8CB2"], /* CJK Ideograph */ + ["\u8CB3", "\u8CB3"], /* CJK Ideograph */ + ["\u8CB4", "\u8CB4"], /* CJK Ideograph */ + ["\u8CB5", "\u8CB5"], /* CJK Ideograph */ + ["\u8CB6", "\u8CB6"], /* CJK Ideograph */ + ["\u8CB7", "\u8CB7"], /* CJK Ideograph */ + ["\u8CB8", "\u8CB8"], /* CJK Ideograph */ + ["\u8CB9", "\u8CB9"], /* CJK Ideograph */ + ["\u8CBA", "\u8CBA"], /* CJK Ideograph */ + ["\u8CBB", "\u8CBB"], /* CJK Ideograph */ + ["\u8CBC", "\u8CBC"], /* CJK Ideograph */ + ["\u8CBD", "\u8CBD"], /* CJK Ideograph */ + ["\u8CBE", "\u8CBE"], /* CJK Ideograph */ + ["\u8CBF", "\u8CBF"], /* CJK Ideograph */ + ["\u8CC0", "\u8CC0"], /* CJK Ideograph */ + ["\u8CC1", "\u8CC1"], /* CJK Ideograph */ + ["\u8CC2", "\u8CC2"], /* CJK Ideograph */ + ["\u8CC3", "\u8CC3"], /* CJK Ideograph */ + ["\u8CC4", "\u8CC4"], /* CJK Ideograph */ + ["\u8CC5", "\u8CC5"], /* CJK Ideograph */ + ["\u8CC6", "\u8CC6"], /* CJK Ideograph */ + ["\u8CC7", "\u8CC7"], /* CJK Ideograph */ + ["\u8CC8", "\u8CC8"], /* CJK Ideograph */ + ["\u8CC9", "\u8CC9"], /* CJK Ideograph */ + ["\u8CCA", "\u8CCA"], /* CJK Ideograph */ + ["\u8CCB", "\u8CCB"], /* CJK Ideograph */ + ["\u8CCC", "\u8CCC"], /* CJK Ideograph */ + ["\u8CCD", "\u8CCD"], /* CJK Ideograph */ + ["\u8CCE", "\u8CCE"], /* CJK Ideograph */ + ["\u8CCF", "\u8CCF"], /* CJK Ideograph */ + ["\u8CD0", "\u8CD0"], /* CJK Ideograph */ + ["\u8CD1", "\u8CD1"], /* CJK Ideograph */ + ["\u8CD2", "\u8CD2"], /* CJK Ideograph */ + ["\u8CD3", "\u8CD3"], /* CJK Ideograph */ + ["\u8CD4", "\u8CD4"], /* CJK Ideograph */ + ["\u8CD5", "\u8CD5"], /* CJK Ideograph */ + ["\u8CD6", "\u8CD6"], /* CJK Ideograph */ + ["\u8CD7", "\u8CD7"], /* CJK Ideograph */ + ["\u8CD8", "\u8CD8"], /* CJK Ideograph */ + ["\u8CD9", "\u8CD9"], /* CJK Ideograph */ + ["\u8CDA", "\u8CDA"], /* CJK Ideograph */ + ["\u8CDB", "\u8CDB"], /* CJK Ideograph */ + ["\u8CDC", "\u8CDC"], /* CJK Ideograph */ + ["\u8CDD", "\u8CDD"], /* CJK Ideograph */ + ["\u8CDE", "\u8CDE"], /* CJK Ideograph */ + ["\u8CDF", "\u8CDF"], /* CJK Ideograph */ + ["\u8CE0", "\u8CE0"], /* CJK Ideograph */ + ["\u8CE1", "\u8CE1"], /* CJK Ideograph */ + ["\u8CE2", "\u8CE2"], /* CJK Ideograph */ + ["\u8CE3", "\u8CE3"], /* CJK Ideograph */ + ["\u8CE4", "\u8CE4"], /* CJK Ideograph */ + ["\u8CE5", "\u8CE5"], /* CJK Ideograph */ + ["\u8CE6", "\u8CE6"], /* CJK Ideograph */ + ["\u8CE7", "\u8CE7"], /* CJK Ideograph */ + ["\u8CE8", "\u8CE8"], /* CJK Ideograph */ + ["\u8CE9", "\u8CE9"], /* CJK Ideograph */ + ["\u8CEA", "\u8CEA"], /* CJK Ideograph */ + ["\u8CEB", "\u8CEB"], /* CJK Ideograph */ + ["\u8CEC", "\u8CEC"], /* CJK Ideograph */ + ["\u8CED", "\u8CED"], /* CJK Ideograph */ + ["\u8CEE", "\u8CEE"], /* CJK Ideograph */ + ["\u8CEF", "\u8CEF"], /* CJK Ideograph */ + ["\u8CF0", "\u8CF0"], /* CJK Ideograph */ + ["\u8CF1", "\u8CF1"], /* CJK Ideograph */ + ["\u8CF2", "\u8CF2"], /* CJK Ideograph */ + ["\u8CF3", "\u8CF3"], /* CJK Ideograph */ + ["\u8CF4", "\u8CF4"], /* CJK Ideograph */ + ["\u8CF5", "\u8CF5"], /* CJK Ideograph */ + ["\u8CF6", "\u8CF6"], /* CJK Ideograph */ + ["\u8CF7", "\u8CF7"], /* CJK Ideograph */ + ["\u8CF8", "\u8CF8"], /* CJK Ideograph */ + ["\u8CF9", "\u8CF9"], /* CJK Ideograph */ + ["\u8CFA", "\u8CFA"], /* CJK Ideograph */ + ["\u8CFB", "\u8CFB"], /* CJK Ideograph */ + ["\u8CFC", "\u8CFC"], /* CJK Ideograph */ + ["\u8CFD", "\u8CFD"], /* CJK Ideograph */ + ["\u8CFE", "\u8CFE"], /* CJK Ideograph */ + ["\u8CFF", "\u8CFF"], /* CJK Ideograph */ + ["\u8D00", "\u8D00"], /* CJK Ideograph */ + ["\u8D01", "\u8D01"], /* CJK Ideograph */ + ["\u8D02", "\u8D02"], /* CJK Ideograph */ + ["\u8D03", "\u8D03"], /* CJK Ideograph */ + ["\u8D04", "\u8D04"], /* CJK Ideograph */ + ["\u8D05", "\u8D05"], /* CJK Ideograph */ + ["\u8D06", "\u8D06"], /* CJK Ideograph */ + ["\u8D07", "\u8D07"], /* CJK Ideograph */ + ["\u8D08", "\u8D08"], /* CJK Ideograph */ + ["\u8D09", "\u8D09"], /* CJK Ideograph */ + ["\u8D0A", "\u8D0A"], /* CJK Ideograph */ + ["\u8D0B", "\u8D0B"], /* CJK Ideograph */ + ["\u8D0C", "\u8D0C"], /* CJK Ideograph */ + ["\u8D0D", "\u8D0D"], /* CJK Ideograph */ + ["\u8D0E", "\u8D0E"], /* CJK Ideograph */ + ["\u8D0F", "\u8D0F"], /* CJK Ideograph */ + ["\u8D10", "\u8D10"], /* CJK Ideograph */ + ["\u8D11", "\u8D11"], /* CJK Ideograph */ + ["\u8D12", "\u8D12"], /* CJK Ideograph */ + ["\u8D13", "\u8D13"], /* CJK Ideograph */ + ["\u8D14", "\u8D14"], /* CJK Ideograph */ + ["\u8D15", "\u8D15"], /* CJK Ideograph */ + ["\u8D16", "\u8D16"], /* CJK Ideograph */ + ["\u8D17", "\u8D17"], /* CJK Ideograph */ + ["\u8D18", "\u8D18"], /* CJK Ideograph */ + ["\u8D19", "\u8D19"], /* CJK Ideograph */ + ["\u8D1A", "\u8D1A"], /* CJK Ideograph */ + ["\u8D1B", "\u8D1B"], /* CJK Ideograph */ + ["\u8D1C", "\u8D1C"], /* CJK Ideograph */ + ["\u8D1D", "\u8D1D"], /* CJK Ideograph */ + ["\u8D1E", "\u8D1E"], /* CJK Ideograph */ + ["\u8D1F", "\u8D1F"], /* CJK Ideograph */ + ["\u8D20", "\u8D20"], /* CJK Ideograph */ + ["\u8D21", "\u8D21"], /* CJK Ideograph */ + ["\u8D22", "\u8D22"], /* CJK Ideograph */ + ["\u8D23", "\u8D23"], /* CJK Ideograph */ + ["\u8D24", "\u8D24"], /* CJK Ideograph */ + ["\u8D25", "\u8D25"], /* CJK Ideograph */ + ["\u8D26", "\u8D26"], /* CJK Ideograph */ + ["\u8D27", "\u8D27"], /* CJK Ideograph */ + ["\u8D28", "\u8D28"], /* CJK Ideograph */ + ["\u8D29", "\u8D29"], /* CJK Ideograph */ + ["\u8D2A", "\u8D2A"], /* CJK Ideograph */ + ["\u8D2B", "\u8D2B"], /* CJK Ideograph */ + ["\u8D2C", "\u8D2C"], /* CJK Ideograph */ + ["\u8D2D", "\u8D2D"], /* CJK Ideograph */ + ["\u8D2E", "\u8D2E"], /* CJK Ideograph */ + ["\u8D2F", "\u8D2F"], /* CJK Ideograph */ + ["\u8D30", "\u8D30"], /* CJK Ideograph */ + ["\u8D31", "\u8D31"], /* CJK Ideograph */ + ["\u8D32", "\u8D32"], /* CJK Ideograph */ + ["\u8D33", "\u8D33"], /* CJK Ideograph */ + ["\u8D34", "\u8D34"], /* CJK Ideograph */ + ["\u8D35", "\u8D35"], /* CJK Ideograph */ + ["\u8D36", "\u8D36"], /* CJK Ideograph */ + ["\u8D37", "\u8D37"], /* CJK Ideograph */ + ["\u8D38", "\u8D38"], /* CJK Ideograph */ + ["\u8D39", "\u8D39"], /* CJK Ideograph */ + ["\u8D3A", "\u8D3A"], /* CJK Ideograph */ + ["\u8D3B", "\u8D3B"], /* CJK Ideograph */ + ["\u8D3C", "\u8D3C"], /* CJK Ideograph */ + ["\u8D3D", "\u8D3D"], /* CJK Ideograph */ + ["\u8D3E", "\u8D3E"], /* CJK Ideograph */ + ["\u8D3F", "\u8D3F"], /* CJK Ideograph */ + ["\u8D40", "\u8D40"], /* CJK Ideograph */ + ["\u8D41", "\u8D41"], /* CJK Ideograph */ + ["\u8D42", "\u8D42"], /* CJK Ideograph */ + ["\u8D43", "\u8D43"], /* CJK Ideograph */ + ["\u8D44", "\u8D44"], /* CJK Ideograph */ + ["\u8D45", "\u8D45"], /* CJK Ideograph */ + ["\u8D46", "\u8D46"], /* CJK Ideograph */ + ["\u8D47", "\u8D47"], /* CJK Ideograph */ + ["\u8D48", "\u8D48"], /* CJK Ideograph */ + ["\u8D49", "\u8D49"], /* CJK Ideograph */ + ["\u8D4A", "\u8D4A"], /* CJK Ideograph */ + ["\u8D4B", "\u8D4B"], /* CJK Ideograph */ + ["\u8D4C", "\u8D4C"], /* CJK Ideograph */ + ["\u8D4D", "\u8D4D"], /* CJK Ideograph */ + ["\u8D4E", "\u8D4E"], /* CJK Ideograph */ + ["\u8D4F", "\u8D4F"], /* CJK Ideograph */ + ["\u8D50", "\u8D50"], /* CJK Ideograph */ + ["\u8D51", "\u8D51"], /* CJK Ideograph */ + ["\u8D52", "\u8D52"], /* CJK Ideograph */ + ["\u8D53", "\u8D53"], /* CJK Ideograph */ + ["\u8D54", "\u8D54"], /* CJK Ideograph */ + ["\u8D55", "\u8D55"], /* CJK Ideograph */ + ["\u8D56", "\u8D56"], /* CJK Ideograph */ + ["\u8D57", "\u8D57"], /* CJK Ideograph */ + ["\u8D58", "\u8D58"], /* CJK Ideograph */ + ["\u8D59", "\u8D59"], /* CJK Ideograph */ + ["\u8D5A", "\u8D5A"], /* CJK Ideograph */ + ["\u8D5B", "\u8D5B"], /* CJK Ideograph */ + ["\u8D5C", "\u8D5C"], /* CJK Ideograph */ + ["\u8D5D", "\u8D5D"], /* CJK Ideograph */ + ["\u8D5E", "\u8D5E"], /* CJK Ideograph */ + ["\u8D5F", "\u8D5F"], /* CJK Ideograph */ + ["\u8D60", "\u8D60"], /* CJK Ideograph */ + ["\u8D61", "\u8D61"], /* CJK Ideograph */ + ["\u8D62", "\u8D62"], /* CJK Ideograph */ + ["\u8D63", "\u8D63"], /* CJK Ideograph */ + ["\u8D64", "\u8D64"], /* CJK Ideograph */ + ["\u8D65", "\u8D65"], /* CJK Ideograph */ + ["\u8D66", "\u8D66"], /* CJK Ideograph */ + ["\u8D67", "\u8D67"], /* CJK Ideograph */ + ["\u8D68", "\u8D68"], /* CJK Ideograph */ + ["\u8D69", "\u8D69"], /* CJK Ideograph */ + ["\u8D6A", "\u8D6A"], /* CJK Ideograph */ + ["\u8D6B", "\u8D6B"], /* CJK Ideograph */ + ["\u8D6C", "\u8D6C"], /* CJK Ideograph */ + ["\u8D6D", "\u8D6D"], /* CJK Ideograph */ + ["\u8D6E", "\u8D6E"], /* CJK Ideograph */ + ["\u8D6F", "\u8D6F"], /* CJK Ideograph */ + ["\u8D70", "\u8D70"], /* CJK Ideograph */ + ["\u8D71", "\u8D71"], /* CJK Ideograph */ + ["\u8D72", "\u8D72"], /* CJK Ideograph */ + ["\u8D73", "\u8D73"], /* CJK Ideograph */ + ["\u8D74", "\u8D74"], /* CJK Ideograph */ + ["\u8D75", "\u8D75"], /* CJK Ideograph */ + ["\u8D76", "\u8D76"], /* CJK Ideograph */ + ["\u8D77", "\u8D77"], /* CJK Ideograph */ + ["\u8D78", "\u8D78"], /* CJK Ideograph */ + ["\u8D79", "\u8D79"], /* CJK Ideograph */ + ["\u8D7A", "\u8D7A"], /* CJK Ideograph */ + ["\u8D7B", "\u8D7B"], /* CJK Ideograph */ + ["\u8D7C", "\u8D7C"], /* CJK Ideograph */ + ["\u8D7D", "\u8D7D"], /* CJK Ideograph */ + ["\u8D7E", "\u8D7E"], /* CJK Ideograph */ + ["\u8D7F", "\u8D7F"], /* CJK Ideograph */ + ["\u8D80", "\u8D80"], /* CJK Ideograph */ + ["\u8D81", "\u8D81"], /* CJK Ideograph */ + ["\u8D82", "\u8D82"], /* CJK Ideograph */ + ["\u8D83", "\u8D83"], /* CJK Ideograph */ + ["\u8D84", "\u8D84"], /* CJK Ideograph */ + ["\u8D85", "\u8D85"], /* CJK Ideograph */ + ["\u8D86", "\u8D86"], /* CJK Ideograph */ + ["\u8D87", "\u8D87"], /* CJK Ideograph */ + ["\u8D88", "\u8D88"], /* CJK Ideograph */ + ["\u8D89", "\u8D89"], /* CJK Ideograph */ + ["\u8D8A", "\u8D8A"], /* CJK Ideograph */ + ["\u8D8B", "\u8D8B"], /* CJK Ideograph */ + ["\u8D8C", "\u8D8C"], /* CJK Ideograph */ + ["\u8D8D", "\u8D8D"], /* CJK Ideograph */ + ["\u8D8E", "\u8D8E"], /* CJK Ideograph */ + ["\u8D8F", "\u8D8F"], /* CJK Ideograph */ + ["\u8D90", "\u8D90"], /* CJK Ideograph */ + ["\u8D91", "\u8D91"], /* CJK Ideograph */ + ["\u8D92", "\u8D92"], /* CJK Ideograph */ + ["\u8D93", "\u8D93"], /* CJK Ideograph */ + ["\u8D94", "\u8D94"], /* CJK Ideograph */ + ["\u8D95", "\u8D95"], /* CJK Ideograph */ + ["\u8D96", "\u8D96"], /* CJK Ideograph */ + ["\u8D97", "\u8D97"], /* CJK Ideograph */ + ["\u8D98", "\u8D98"], /* CJK Ideograph */ + ["\u8D99", "\u8D99"], /* CJK Ideograph */ + ["\u8D9A", "\u8D9A"], /* CJK Ideograph */ + ["\u8D9B", "\u8D9B"], /* CJK Ideograph */ + ["\u8D9C", "\u8D9C"], /* CJK Ideograph */ + ["\u8D9D", "\u8D9D"], /* CJK Ideograph */ + ["\u8D9E", "\u8D9E"], /* CJK Ideograph */ + ["\u8D9F", "\u8D9F"], /* CJK Ideograph */ + ["\u8DA0", "\u8DA0"], /* CJK Ideograph */ + ["\u8DA1", "\u8DA1"], /* CJK Ideograph */ + ["\u8DA2", "\u8DA2"], /* CJK Ideograph */ + ["\u8DA3", "\u8DA3"], /* CJK Ideograph */ + ["\u8DA4", "\u8DA4"], /* CJK Ideograph */ + ["\u8DA5", "\u8DA5"], /* CJK Ideograph */ + ["\u8DA6", "\u8DA6"], /* CJK Ideograph */ + ["\u8DA7", "\u8DA7"], /* CJK Ideograph */ + ["\u8DA8", "\u8DA8"], /* CJK Ideograph */ + ["\u8DA9", "\u8DA9"], /* CJK Ideograph */ + ["\u8DAA", "\u8DAA"], /* CJK Ideograph */ + ["\u8DAB", "\u8DAB"], /* CJK Ideograph */ + ["\u8DAC", "\u8DAC"], /* CJK Ideograph */ + ["\u8DAD", "\u8DAD"], /* CJK Ideograph */ + ["\u8DAE", "\u8DAE"], /* CJK Ideograph */ + ["\u8DAF", "\u8DAF"], /* CJK Ideograph */ + ["\u8DB0", "\u8DB0"], /* CJK Ideograph */ + ["\u8DB1", "\u8DB1"], /* CJK Ideograph */ + ["\u8DB2", "\u8DB2"], /* CJK Ideograph */ + ["\u8DB3", "\u8DB3"], /* CJK Ideograph */ + ["\u8DB4", "\u8DB4"], /* CJK Ideograph */ + ["\u8DB5", "\u8DB5"], /* CJK Ideograph */ + ["\u8DB6", "\u8DB6"], /* CJK Ideograph */ + ["\u8DB7", "\u8DB7"], /* CJK Ideograph */ + ["\u8DB8", "\u8DB8"], /* CJK Ideograph */ + ["\u8DB9", "\u8DB9"], /* CJK Ideograph */ + ["\u8DBA", "\u8DBA"], /* CJK Ideograph */ + ["\u8DBB", "\u8DBB"], /* CJK Ideograph */ + ["\u8DBC", "\u8DBC"], /* CJK Ideograph */ + ["\u8DBD", "\u8DBD"], /* CJK Ideograph */ + ["\u8DBE", "\u8DBE"], /* CJK Ideograph */ + ["\u8DBF", "\u8DBF"], /* CJK Ideograph */ + ["\u8DC0", "\u8DC0"], /* CJK Ideograph */ + ["\u8DC1", "\u8DC1"], /* CJK Ideograph */ + ["\u8DC2", "\u8DC2"], /* CJK Ideograph */ + ["\u8DC3", "\u8DC3"], /* CJK Ideograph */ + ["\u8DC4", "\u8DC4"], /* CJK Ideograph */ + ["\u8DC5", "\u8DC5"], /* CJK Ideograph */ + ["\u8DC6", "\u8DC6"], /* CJK Ideograph */ + ["\u8DC7", "\u8DC7"], /* CJK Ideograph */ + ["\u8DC8", "\u8DC8"], /* CJK Ideograph */ + ["\u8DC9", "\u8DC9"], /* CJK Ideograph */ + ["\u8DCA", "\u8DCA"], /* CJK Ideograph */ + ["\u8DCB", "\u8DCB"], /* CJK Ideograph */ + ["\u8DCC", "\u8DCC"], /* CJK Ideograph */ + ["\u8DCD", "\u8DCD"], /* CJK Ideograph */ + ["\u8DCE", "\u8DCE"], /* CJK Ideograph */ + ["\u8DCF", "\u8DCF"], /* CJK Ideograph */ + ["\u8DD0", "\u8DD0"], /* CJK Ideograph */ + ["\u8DD1", "\u8DD1"], /* CJK Ideograph */ + ["\u8DD2", "\u8DD2"], /* CJK Ideograph */ + ["\u8DD3", "\u8DD3"], /* CJK Ideograph */ + ["\u8DD4", "\u8DD4"], /* CJK Ideograph */ + ["\u8DD5", "\u8DD5"], /* CJK Ideograph */ + ["\u8DD6", "\u8DD6"], /* CJK Ideograph */ + ["\u8DD7", "\u8DD7"], /* CJK Ideograph */ + ["\u8DD8", "\u8DD8"], /* CJK Ideograph */ + ["\u8DD9", "\u8DD9"], /* CJK Ideograph */ + ["\u8DDA", "\u8DDA"], /* CJK Ideograph */ + ["\u8DDB", "\u8DDB"], /* CJK Ideograph */ + ["\u8DDC", "\u8DDC"], /* CJK Ideograph */ + ["\u8DDD", "\u8DDD"], /* CJK Ideograph */ + ["\u8DDE", "\u8DDE"], /* CJK Ideograph */ + ["\u8DDF", "\u8DDF"], /* CJK Ideograph */ + ["\u8DE0", "\u8DE0"], /* CJK Ideograph */ + ["\u8DE1", "\u8DE1"], /* CJK Ideograph */ + ["\u8DE2", "\u8DE2"], /* CJK Ideograph */ + ["\u8DE3", "\u8DE3"], /* CJK Ideograph */ + ["\u8DE4", "\u8DE4"], /* CJK Ideograph */ + ["\u8DE5", "\u8DE5"], /* CJK Ideograph */ + ["\u8DE6", "\u8DE6"], /* CJK Ideograph */ + ["\u8DE7", "\u8DE7"], /* CJK Ideograph */ + ["\u8DE8", "\u8DE8"], /* CJK Ideograph */ + ["\u8DE9", "\u8DE9"], /* CJK Ideograph */ + ["\u8DEA", "\u8DEA"], /* CJK Ideograph */ + ["\u8DEB", "\u8DEB"], /* CJK Ideograph */ + ["\u8DEC", "\u8DEC"], /* CJK Ideograph */ + ["\u8DED", "\u8DED"], /* CJK Ideograph */ + ["\u8DEE", "\u8DEE"], /* CJK Ideograph */ + ["\u8DEF", "\u8DEF"], /* CJK Ideograph */ + ["\u8DF0", "\u8DF0"], /* CJK Ideograph */ + ["\u8DF1", "\u8DF1"], /* CJK Ideograph */ + ["\u8DF2", "\u8DF2"], /* CJK Ideograph */ + ["\u8DF3", "\u8DF3"], /* CJK Ideograph */ + ["\u8DF4", "\u8DF4"], /* CJK Ideograph */ + ["\u8DF5", "\u8DF5"], /* CJK Ideograph */ + ["\u8DF6", "\u8DF6"], /* CJK Ideograph */ + ["\u8DF7", "\u8DF7"], /* CJK Ideograph */ + ["\u8DF8", "\u8DF8"], /* CJK Ideograph */ + ["\u8DF9", "\u8DF9"], /* CJK Ideograph */ + ["\u8DFA", "\u8DFA"], /* CJK Ideograph */ + ["\u8DFB", "\u8DFB"], /* CJK Ideograph */ + ["\u8DFC", "\u8DFC"], /* CJK Ideograph */ + ["\u8DFD", "\u8DFD"], /* CJK Ideograph */ + ["\u8DFE", "\u8DFE"], /* CJK Ideograph */ + ["\u8DFF", "\u8DFF"], /* CJK Ideograph */ + ["\u8E00", "\u8E00"], /* CJK Ideograph */ + ["\u8E01", "\u8E01"], /* CJK Ideograph */ + ["\u8E02", "\u8E02"], /* CJK Ideograph */ + ["\u8E03", "\u8E03"], /* CJK Ideograph */ + ["\u8E04", "\u8E04"], /* CJK Ideograph */ + ["\u8E05", "\u8E05"], /* CJK Ideograph */ + ["\u8E06", "\u8E06"], /* CJK Ideograph */ + ["\u8E07", "\u8E07"], /* CJK Ideograph */ + ["\u8E08", "\u8E08"], /* CJK Ideograph */ + ["\u8E09", "\u8E09"], /* CJK Ideograph */ + ["\u8E0A", "\u8E0A"], /* CJK Ideograph */ + ["\u8E0B", "\u8E0B"], /* CJK Ideograph */ + ["\u8E0C", "\u8E0C"], /* CJK Ideograph */ + ["\u8E0D", "\u8E0D"], /* CJK Ideograph */ + ["\u8E0E", "\u8E0E"], /* CJK Ideograph */ + ["\u8E0F", "\u8E0F"], /* CJK Ideograph */ + ["\u8E10", "\u8E10"], /* CJK Ideograph */ + ["\u8E11", "\u8E11"], /* CJK Ideograph */ + ["\u8E12", "\u8E12"], /* CJK Ideograph */ + ["\u8E13", "\u8E13"], /* CJK Ideograph */ + ["\u8E14", "\u8E14"], /* CJK Ideograph */ + ["\u8E15", "\u8E15"], /* CJK Ideograph */ + ["\u8E16", "\u8E16"], /* CJK Ideograph */ + ["\u8E17", "\u8E17"], /* CJK Ideograph */ + ["\u8E18", "\u8E18"], /* CJK Ideograph */ + ["\u8E19", "\u8E19"], /* CJK Ideograph */ + ["\u8E1A", "\u8E1A"], /* CJK Ideograph */ + ["\u8E1B", "\u8E1B"], /* CJK Ideograph */ + ["\u8E1C", "\u8E1C"], /* CJK Ideograph */ + ["\u8E1D", "\u8E1D"], /* CJK Ideograph */ + ["\u8E1E", "\u8E1E"], /* CJK Ideograph */ + ["\u8E1F", "\u8E1F"], /* CJK Ideograph */ + ["\u8E20", "\u8E20"], /* CJK Ideograph */ + ["\u8E21", "\u8E21"], /* CJK Ideograph */ + ["\u8E22", "\u8E22"], /* CJK Ideograph */ + ["\u8E23", "\u8E23"], /* CJK Ideograph */ + ["\u8E24", "\u8E24"], /* CJK Ideograph */ + ["\u8E25", "\u8E25"], /* CJK Ideograph */ + ["\u8E26", "\u8E26"], /* CJK Ideograph */ + ["\u8E27", "\u8E27"], /* CJK Ideograph */ + ["\u8E28", "\u8E28"], /* CJK Ideograph */ + ["\u8E29", "\u8E29"], /* CJK Ideograph */ + ["\u8E2A", "\u8E2A"], /* CJK Ideograph */ + ["\u8E2B", "\u8E2B"], /* CJK Ideograph */ + ["\u8E2C", "\u8E2C"], /* CJK Ideograph */ + ["\u8E2D", "\u8E2D"], /* CJK Ideograph */ + ["\u8E2E", "\u8E2E"], /* CJK Ideograph */ + ["\u8E2F", "\u8E2F"], /* CJK Ideograph */ + ["\u8E30", "\u8E30"], /* CJK Ideograph */ + ["\u8E31", "\u8E31"], /* CJK Ideograph */ + ["\u8E32", "\u8E32"], /* CJK Ideograph */ + ["\u8E33", "\u8E33"], /* CJK Ideograph */ + ["\u8E34", "\u8E34"], /* CJK Ideograph */ + ["\u8E35", "\u8E35"], /* CJK Ideograph */ + ["\u8E36", "\u8E36"], /* CJK Ideograph */ + ["\u8E37", "\u8E37"], /* CJK Ideograph */ + ["\u8E38", "\u8E38"], /* CJK Ideograph */ + ["\u8E39", "\u8E39"], /* CJK Ideograph */ + ["\u8E3A", "\u8E3A"], /* CJK Ideograph */ + ["\u8E3B", "\u8E3B"], /* CJK Ideograph */ + ["\u8E3C", "\u8E3C"], /* CJK Ideograph */ + ["\u8E3D", "\u8E3D"], /* CJK Ideograph */ + ["\u8E3E", "\u8E3E"], /* CJK Ideograph */ + ["\u8E3F", "\u8E3F"], /* CJK Ideograph */ + ["\u8E40", "\u8E40"], /* CJK Ideograph */ + ["\u8E41", "\u8E41"], /* CJK Ideograph */ + ["\u8E42", "\u8E42"], /* CJK Ideograph */ + ["\u8E43", "\u8E43"], /* CJK Ideograph */ + ["\u8E44", "\u8E44"], /* CJK Ideograph */ + ["\u8E45", "\u8E45"], /* CJK Ideograph */ + ["\u8E46", "\u8E46"], /* CJK Ideograph */ + ["\u8E47", "\u8E47"], /* CJK Ideograph */ + ["\u8E48", "\u8E48"], /* CJK Ideograph */ + ["\u8E49", "\u8E49"], /* CJK Ideograph */ + ["\u8E4A", "\u8E4A"], /* CJK Ideograph */ + ["\u8E4B", "\u8E4B"], /* CJK Ideograph */ + ["\u8E4C", "\u8E4C"], /* CJK Ideograph */ + ["\u8E4D", "\u8E4D"], /* CJK Ideograph */ + ["\u8E4E", "\u8E4E"], /* CJK Ideograph */ + ["\u8E4F", "\u8E4F"], /* CJK Ideograph */ + ["\u8E50", "\u8E50"], /* CJK Ideograph */ + ["\u8E51", "\u8E51"], /* CJK Ideograph */ + ["\u8E52", "\u8E52"], /* CJK Ideograph */ + ["\u8E53", "\u8E53"], /* CJK Ideograph */ + ["\u8E54", "\u8E54"], /* CJK Ideograph */ + ["\u8E55", "\u8E55"], /* CJK Ideograph */ + ["\u8E56", "\u8E56"], /* CJK Ideograph */ + ["\u8E57", "\u8E57"], /* CJK Ideograph */ + ["\u8E58", "\u8E58"], /* CJK Ideograph */ + ["\u8E59", "\u8E59"], /* CJK Ideograph */ + ["\u8E5A", "\u8E5A"], /* CJK Ideograph */ + ["\u8E5B", "\u8E5B"], /* CJK Ideograph */ + ["\u8E5C", "\u8E5C"], /* CJK Ideograph */ + ["\u8E5D", "\u8E5D"], /* CJK Ideograph */ + ["\u8E5E", "\u8E5E"], /* CJK Ideograph */ + ["\u8E5F", "\u8E5F"], /* CJK Ideograph */ + ["\u8E60", "\u8E60"], /* CJK Ideograph */ + ["\u8E61", "\u8E61"], /* CJK Ideograph */ + ["\u8E62", "\u8E62"], /* CJK Ideograph */ + ["\u8E63", "\u8E63"], /* CJK Ideograph */ + ["\u8E64", "\u8E64"], /* CJK Ideograph */ + ["\u8E65", "\u8E65"], /* CJK Ideograph */ + ["\u8E66", "\u8E66"], /* CJK Ideograph */ + ["\u8E67", "\u8E67"], /* CJK Ideograph */ + ["\u8E68", "\u8E68"], /* CJK Ideograph */ + ["\u8E69", "\u8E69"], /* CJK Ideograph */ + ["\u8E6A", "\u8E6A"], /* CJK Ideograph */ + ["\u8E6B", "\u8E6B"], /* CJK Ideograph */ + ["\u8E6C", "\u8E6C"], /* CJK Ideograph */ + ["\u8E6D", "\u8E6D"], /* CJK Ideograph */ + ["\u8E6E", "\u8E6E"], /* CJK Ideograph */ + ["\u8E6F", "\u8E6F"], /* CJK Ideograph */ + ["\u8E70", "\u8E70"], /* CJK Ideograph */ + ["\u8E71", "\u8E71"], /* CJK Ideograph */ + ["\u8E72", "\u8E72"], /* CJK Ideograph */ + ["\u8E73", "\u8E73"], /* CJK Ideograph */ + ["\u8E74", "\u8E74"], /* CJK Ideograph */ + ["\u8E75", "\u8E75"], /* CJK Ideograph */ + ["\u8E76", "\u8E76"], /* CJK Ideograph */ + ["\u8E77", "\u8E77"], /* CJK Ideograph */ + ["\u8E78", "\u8E78"], /* CJK Ideograph */ + ["\u8E79", "\u8E79"], /* CJK Ideograph */ + ["\u8E7A", "\u8E7A"], /* CJK Ideograph */ + ["\u8E7B", "\u8E7B"], /* CJK Ideograph */ + ["\u8E7C", "\u8E7C"], /* CJK Ideograph */ + ["\u8E7D", "\u8E7D"], /* CJK Ideograph */ + ["\u8E7E", "\u8E7E"], /* CJK Ideograph */ + ["\u8E7F", "\u8E7F"], /* CJK Ideograph */ + ["\u8E80", "\u8E80"], /* CJK Ideograph */ + ["\u8E81", "\u8E81"], /* CJK Ideograph */ + ["\u8E82", "\u8E82"], /* CJK Ideograph */ + ["\u8E83", "\u8E83"], /* CJK Ideograph */ + ["\u8E84", "\u8E84"], /* CJK Ideograph */ + ["\u8E85", "\u8E85"], /* CJK Ideograph */ + ["\u8E86", "\u8E86"], /* CJK Ideograph */ + ["\u8E87", "\u8E87"], /* CJK Ideograph */ + ["\u8E88", "\u8E88"], /* CJK Ideograph */ + ["\u8E89", "\u8E89"], /* CJK Ideograph */ + ["\u8E8A", "\u8E8A"], /* CJK Ideograph */ + ["\u8E8B", "\u8E8B"], /* CJK Ideograph */ + ["\u8E8C", "\u8E8C"], /* CJK Ideograph */ + ["\u8E8D", "\u8E8D"], /* CJK Ideograph */ + ["\u8E8E", "\u8E8E"], /* CJK Ideograph */ + ["\u8E8F", "\u8E8F"], /* CJK Ideograph */ + ["\u8E90", "\u8E90"], /* CJK Ideograph */ + ["\u8E91", "\u8E91"], /* CJK Ideograph */ + ["\u8E92", "\u8E92"], /* CJK Ideograph */ + ["\u8E93", "\u8E93"], /* CJK Ideograph */ + ["\u8E94", "\u8E94"], /* CJK Ideograph */ + ["\u8E95", "\u8E95"], /* CJK Ideograph */ + ["\u8E96", "\u8E96"], /* CJK Ideograph */ + ["\u8E97", "\u8E97"], /* CJK Ideograph */ + ["\u8E98", "\u8E98"], /* CJK Ideograph */ + ["\u8E99", "\u8E99"], /* CJK Ideograph */ + ["\u8E9A", "\u8E9A"], /* CJK Ideograph */ + ["\u8E9B", "\u8E9B"], /* CJK Ideograph */ + ["\u8E9C", "\u8E9C"], /* CJK Ideograph */ + ["\u8E9D", "\u8E9D"], /* CJK Ideograph */ + ["\u8E9E", "\u8E9E"], /* CJK Ideograph */ + ["\u8E9F", "\u8E9F"], /* CJK Ideograph */ + ["\u8EA0", "\u8EA0"], /* CJK Ideograph */ + ["\u8EA1", "\u8EA1"], /* CJK Ideograph */ + ["\u8EA2", "\u8EA2"], /* CJK Ideograph */ + ["\u8EA3", "\u8EA3"], /* CJK Ideograph */ + ["\u8EA4", "\u8EA4"], /* CJK Ideograph */ + ["\u8EA5", "\u8EA5"], /* CJK Ideograph */ + ["\u8EA6", "\u8EA6"], /* CJK Ideograph */ + ["\u8EA7", "\u8EA7"], /* CJK Ideograph */ + ["\u8EA8", "\u8EA8"], /* CJK Ideograph */ + ["\u8EA9", "\u8EA9"], /* CJK Ideograph */ + ["\u8EAA", "\u8EAA"], /* CJK Ideograph */ + ["\u8EAB", "\u8EAB"], /* CJK Ideograph */ + ["\u8EAC", "\u8EAC"], /* CJK Ideograph */ + ["\u8EAD", "\u8EAD"], /* CJK Ideograph */ + ["\u8EAE", "\u8EAE"], /* CJK Ideograph */ + ["\u8EAF", "\u8EAF"], /* CJK Ideograph */ + ["\u8EB0", "\u8EB0"], /* CJK Ideograph */ + ["\u8EB1", "\u8EB1"], /* CJK Ideograph */ + ["\u8EB2", "\u8EB2"], /* CJK Ideograph */ + ["\u8EB3", "\u8EB3"], /* CJK Ideograph */ + ["\u8EB4", "\u8EB4"], /* CJK Ideograph */ + ["\u8EB5", "\u8EB5"], /* CJK Ideograph */ + ["\u8EB6", "\u8EB6"], /* CJK Ideograph */ + ["\u8EB7", "\u8EB7"], /* CJK Ideograph */ + ["\u8EB8", "\u8EB8"], /* CJK Ideograph */ + ["\u8EB9", "\u8EB9"], /* CJK Ideograph */ + ["\u8EBA", "\u8EBA"], /* CJK Ideograph */ + ["\u8EBB", "\u8EBB"], /* CJK Ideograph */ + ["\u8EBC", "\u8EBC"], /* CJK Ideograph */ + ["\u8EBD", "\u8EBD"], /* CJK Ideograph */ + ["\u8EBE", "\u8EBE"], /* CJK Ideograph */ + ["\u8EBF", "\u8EBF"], /* CJK Ideograph */ + ["\u8EC0", "\u8EC0"], /* CJK Ideograph */ + ["\u8EC1", "\u8EC1"], /* CJK Ideograph */ + ["\u8EC2", "\u8EC2"], /* CJK Ideograph */ + ["\u8EC3", "\u8EC3"], /* CJK Ideograph */ + ["\u8EC4", "\u8EC4"], /* CJK Ideograph */ + ["\u8EC5", "\u8EC5"], /* CJK Ideograph */ + ["\u8EC6", "\u8EC6"], /* CJK Ideograph */ + ["\u8EC7", "\u8EC7"], /* CJK Ideograph */ + ["\u8EC8", "\u8EC8"], /* CJK Ideograph */ + ["\u8EC9", "\u8EC9"], /* CJK Ideograph */ + ["\u8ECA", "\u8ECA"], /* CJK Ideograph */ + ["\u8ECB", "\u8ECB"], /* CJK Ideograph */ + ["\u8ECC", "\u8ECC"], /* CJK Ideograph */ + ["\u8ECD", "\u8ECD"], /* CJK Ideograph */ + ["\u8ECE", "\u8ECE"], /* CJK Ideograph */ + ["\u8ECF", "\u8ECF"], /* CJK Ideograph */ + ["\u8ED0", "\u8ED0"], /* CJK Ideograph */ + ["\u8ED1", "\u8ED1"], /* CJK Ideograph */ + ["\u8ED2", "\u8ED2"], /* CJK Ideograph */ + ["\u8ED3", "\u8ED3"], /* CJK Ideograph */ + ["\u8ED4", "\u8ED4"], /* CJK Ideograph */ + ["\u8ED5", "\u8ED5"], /* CJK Ideograph */ + ["\u8ED6", "\u8ED6"], /* CJK Ideograph */ + ["\u8ED7", "\u8ED7"], /* CJK Ideograph */ + ["\u8ED8", "\u8ED8"], /* CJK Ideograph */ + ["\u8ED9", "\u8ED9"], /* CJK Ideograph */ + ["\u8EDA", "\u8EDA"], /* CJK Ideograph */ + ["\u8EDB", "\u8EDB"], /* CJK Ideograph */ + ["\u8EDC", "\u8EDC"], /* CJK Ideograph */ + ["\u8EDD", "\u8EDD"], /* CJK Ideograph */ + ["\u8EDE", "\u8EDE"], /* CJK Ideograph */ + ["\u8EDF", "\u8EDF"], /* CJK Ideograph */ + ["\u8EE0", "\u8EE0"], /* CJK Ideograph */ + ["\u8EE1", "\u8EE1"], /* CJK Ideograph */ + ["\u8EE2", "\u8EE2"], /* CJK Ideograph */ + ["\u8EE3", "\u8EE3"], /* CJK Ideograph */ + ["\u8EE4", "\u8EE4"], /* CJK Ideograph */ + ["\u8EE5", "\u8EE5"], /* CJK Ideograph */ + ["\u8EE6", "\u8EE6"], /* CJK Ideograph */ + ["\u8EE7", "\u8EE7"], /* CJK Ideograph */ + ["\u8EE8", "\u8EE8"], /* CJK Ideograph */ + ["\u8EE9", "\u8EE9"], /* CJK Ideograph */ + ["\u8EEA", "\u8EEA"], /* CJK Ideograph */ + ["\u8EEB", "\u8EEB"], /* CJK Ideograph */ + ["\u8EEC", "\u8EEC"], /* CJK Ideograph */ + ["\u8EED", "\u8EED"], /* CJK Ideograph */ + ["\u8EEE", "\u8EEE"], /* CJK Ideograph */ + ["\u8EEF", "\u8EEF"], /* CJK Ideograph */ + ["\u8EF0", "\u8EF0"], /* CJK Ideograph */ + ["\u8EF1", "\u8EF1"], /* CJK Ideograph */ + ["\u8EF2", "\u8EF2"], /* CJK Ideograph */ + ["\u8EF3", "\u8EF3"], /* CJK Ideograph */ + ["\u8EF4", "\u8EF4"], /* CJK Ideograph */ + ["\u8EF5", "\u8EF5"], /* CJK Ideograph */ + ["\u8EF6", "\u8EF6"], /* CJK Ideograph */ + ["\u8EF7", "\u8EF7"], /* CJK Ideograph */ + ["\u8EF8", "\u8EF8"], /* CJK Ideograph */ + ["\u8EF9", "\u8EF9"], /* CJK Ideograph */ + ["\u8EFA", "\u8EFA"], /* CJK Ideograph */ + ["\u8EFB", "\u8EFB"], /* CJK Ideograph */ + ["\u8EFC", "\u8EFC"], /* CJK Ideograph */ + ["\u8EFD", "\u8EFD"], /* CJK Ideograph */ + ["\u8EFE", "\u8EFE"], /* CJK Ideograph */ + ["\u8EFF", "\u8EFF"], /* CJK Ideograph */ + ["\u8F00", "\u8F00"], /* CJK Ideograph */ + ["\u8F01", "\u8F01"], /* CJK Ideograph */ + ["\u8F02", "\u8F02"], /* CJK Ideograph */ + ["\u8F03", "\u8F03"], /* CJK Ideograph */ + ["\u8F04", "\u8F04"], /* CJK Ideograph */ + ["\u8F05", "\u8F05"], /* CJK Ideograph */ + ["\u8F06", "\u8F06"], /* CJK Ideograph */ + ["\u8F07", "\u8F07"], /* CJK Ideograph */ + ["\u8F08", "\u8F08"], /* CJK Ideograph */ + ["\u8F09", "\u8F09"], /* CJK Ideograph */ + ["\u8F0A", "\u8F0A"], /* CJK Ideograph */ + ["\u8F0B", "\u8F0B"], /* CJK Ideograph */ + ["\u8F0C", "\u8F0C"], /* CJK Ideograph */ + ["\u8F0D", "\u8F0D"], /* CJK Ideograph */ + ["\u8F0E", "\u8F0E"], /* CJK Ideograph */ + ["\u8F0F", "\u8F0F"], /* CJK Ideograph */ + ["\u8F10", "\u8F10"], /* CJK Ideograph */ + ["\u8F11", "\u8F11"], /* CJK Ideograph */ + ["\u8F12", "\u8F12"], /* CJK Ideograph */ + ["\u8F13", "\u8F13"], /* CJK Ideograph */ + ["\u8F14", "\u8F14"], /* CJK Ideograph */ + ["\u8F15", "\u8F15"], /* CJK Ideograph */ + ["\u8F16", "\u8F16"], /* CJK Ideograph */ + ["\u8F17", "\u8F17"], /* CJK Ideograph */ + ["\u8F18", "\u8F18"], /* CJK Ideograph */ + ["\u8F19", "\u8F19"], /* CJK Ideograph */ + ["\u8F1A", "\u8F1A"], /* CJK Ideograph */ + ["\u8F1B", "\u8F1B"], /* CJK Ideograph */ + ["\u8F1C", "\u8F1C"], /* CJK Ideograph */ + ["\u8F1D", "\u8F1D"], /* CJK Ideograph */ + ["\u8F1E", "\u8F1E"], /* CJK Ideograph */ + ["\u8F1F", "\u8F1F"], /* CJK Ideograph */ + ["\u8F20", "\u8F20"], /* CJK Ideograph */ + ["\u8F21", "\u8F21"], /* CJK Ideograph */ + ["\u8F22", "\u8F22"], /* CJK Ideograph */ + ["\u8F23", "\u8F23"], /* CJK Ideograph */ + ["\u8F24", "\u8F24"], /* CJK Ideograph */ + ["\u8F25", "\u8F25"], /* CJK Ideograph */ + ["\u8F26", "\u8F26"], /* CJK Ideograph */ + ["\u8F27", "\u8F27"], /* CJK Ideograph */ + ["\u8F28", "\u8F28"], /* CJK Ideograph */ + ["\u8F29", "\u8F29"], /* CJK Ideograph */ + ["\u8F2A", "\u8F2A"], /* CJK Ideograph */ + ["\u8F2B", "\u8F2B"], /* CJK Ideograph */ + ["\u8F2C", "\u8F2C"], /* CJK Ideograph */ + ["\u8F2D", "\u8F2D"], /* CJK Ideograph */ + ["\u8F2E", "\u8F2E"], /* CJK Ideograph */ + ["\u8F2F", "\u8F2F"], /* CJK Ideograph */ + ["\u8F30", "\u8F30"], /* CJK Ideograph */ + ["\u8F31", "\u8F31"], /* CJK Ideograph */ + ["\u8F32", "\u8F32"], /* CJK Ideograph */ + ["\u8F33", "\u8F33"], /* CJK Ideograph */ + ["\u8F34", "\u8F34"], /* CJK Ideograph */ + ["\u8F35", "\u8F35"], /* CJK Ideograph */ + ["\u8F36", "\u8F36"], /* CJK Ideograph */ + ["\u8F37", "\u8F37"], /* CJK Ideograph */ + ["\u8F38", "\u8F38"], /* CJK Ideograph */ + ["\u8F39", "\u8F39"], /* CJK Ideograph */ + ["\u8F3A", "\u8F3A"], /* CJK Ideograph */ + ["\u8F3B", "\u8F3B"], /* CJK Ideograph */ + ["\u8F3C", "\u8F3C"], /* CJK Ideograph */ + ["\u8F3D", "\u8F3D"], /* CJK Ideograph */ + ["\u8F3E", "\u8F3E"], /* CJK Ideograph */ + ["\u8F3F", "\u8F3F"], /* CJK Ideograph */ + ["\u8F40", "\u8F40"], /* CJK Ideograph */ + ["\u8F41", "\u8F41"], /* CJK Ideograph */ + ["\u8F42", "\u8F42"], /* CJK Ideograph */ + ["\u8F43", "\u8F43"], /* CJK Ideograph */ + ["\u8F44", "\u8F44"], /* CJK Ideograph */ + ["\u8F45", "\u8F45"], /* CJK Ideograph */ + ["\u8F46", "\u8F46"], /* CJK Ideograph */ + ["\u8F47", "\u8F47"], /* CJK Ideograph */ + ["\u8F48", "\u8F48"], /* CJK Ideograph */ + ["\u8F49", "\u8F49"], /* CJK Ideograph */ + ["\u8F4A", "\u8F4A"], /* CJK Ideograph */ + ["\u8F4B", "\u8F4B"], /* CJK Ideograph */ + ["\u8F4C", "\u8F4C"], /* CJK Ideograph */ + ["\u8F4D", "\u8F4D"], /* CJK Ideograph */ + ["\u8F4E", "\u8F4E"], /* CJK Ideograph */ + ["\u8F4F", "\u8F4F"], /* CJK Ideograph */ + ["\u8F50", "\u8F50"], /* CJK Ideograph */ + ["\u8F51", "\u8F51"], /* CJK Ideograph */ + ["\u8F52", "\u8F52"], /* CJK Ideograph */ + ["\u8F53", "\u8F53"], /* CJK Ideograph */ + ["\u8F54", "\u8F54"], /* CJK Ideograph */ + ["\u8F55", "\u8F55"], /* CJK Ideograph */ + ["\u8F56", "\u8F56"], /* CJK Ideograph */ + ["\u8F57", "\u8F57"], /* CJK Ideograph */ + ["\u8F58", "\u8F58"], /* CJK Ideograph */ + ["\u8F59", "\u8F59"], /* CJK Ideograph */ + ["\u8F5A", "\u8F5A"], /* CJK Ideograph */ + ["\u8F5B", "\u8F5B"], /* CJK Ideograph */ + ["\u8F5C", "\u8F5C"], /* CJK Ideograph */ + ["\u8F5D", "\u8F5D"], /* CJK Ideograph */ + ["\u8F5E", "\u8F5E"], /* CJK Ideograph */ + ["\u8F5F", "\u8F5F"], /* CJK Ideograph */ + ["\u8F60", "\u8F60"], /* CJK Ideograph */ + ["\u8F61", "\u8F61"], /* CJK Ideograph */ + ["\u8F62", "\u8F62"], /* CJK Ideograph */ + ["\u8F63", "\u8F63"], /* CJK Ideograph */ + ["\u8F64", "\u8F64"], /* CJK Ideograph */ + ["\u8F65", "\u8F65"], /* CJK Ideograph */ + ["\u8F66", "\u8F66"], /* CJK Ideograph */ + ["\u8F67", "\u8F67"], /* CJK Ideograph */ + ["\u8F68", "\u8F68"], /* CJK Ideograph */ + ["\u8F69", "\u8F69"], /* CJK Ideograph */ + ["\u8F6A", "\u8F6A"], /* CJK Ideograph */ + ["\u8F6B", "\u8F6B"], /* CJK Ideograph */ + ["\u8F6C", "\u8F6C"], /* CJK Ideograph */ + ["\u8F6D", "\u8F6D"], /* CJK Ideograph */ + ["\u8F6E", "\u8F6E"], /* CJK Ideograph */ + ["\u8F6F", "\u8F6F"], /* CJK Ideograph */ + ["\u8F70", "\u8F70"], /* CJK Ideograph */ + ["\u8F71", "\u8F71"], /* CJK Ideograph */ + ["\u8F72", "\u8F72"], /* CJK Ideograph */ + ["\u8F73", "\u8F73"], /* CJK Ideograph */ + ["\u8F74", "\u8F74"], /* CJK Ideograph */ + ["\u8F75", "\u8F75"], /* CJK Ideograph */ + ["\u8F76", "\u8F76"], /* CJK Ideograph */ + ["\u8F77", "\u8F77"], /* CJK Ideograph */ + ["\u8F78", "\u8F78"], /* CJK Ideograph */ + ["\u8F79", "\u8F79"], /* CJK Ideograph */ + ["\u8F7A", "\u8F7A"], /* CJK Ideograph */ + ["\u8F7B", "\u8F7B"], /* CJK Ideograph */ + ["\u8F7C", "\u8F7C"], /* CJK Ideograph */ + ["\u8F7D", "\u8F7D"], /* CJK Ideograph */ + ["\u8F7E", "\u8F7E"], /* CJK Ideograph */ + ["\u8F7F", "\u8F7F"], /* CJK Ideograph */ + ["\u8F80", "\u8F80"], /* CJK Ideograph */ + ["\u8F81", "\u8F81"], /* CJK Ideograph */ + ["\u8F82", "\u8F82"], /* CJK Ideograph */ + ["\u8F83", "\u8F83"], /* CJK Ideograph */ + ["\u8F84", "\u8F84"], /* CJK Ideograph */ + ["\u8F85", "\u8F85"], /* CJK Ideograph */ + ["\u8F86", "\u8F86"], /* CJK Ideograph */ + ["\u8F87", "\u8F87"], /* CJK Ideograph */ + ["\u8F88", "\u8F88"], /* CJK Ideograph */ + ["\u8F89", "\u8F89"], /* CJK Ideograph */ + ["\u8F8A", "\u8F8A"], /* CJK Ideograph */ + ["\u8F8B", "\u8F8B"], /* CJK Ideograph */ + ["\u8F8C", "\u8F8C"], /* CJK Ideograph */ + ["\u8F8D", "\u8F8D"], /* CJK Ideograph */ + ["\u8F8E", "\u8F8E"], /* CJK Ideograph */ + ["\u8F8F", "\u8F8F"], /* CJK Ideograph */ + ["\u8F90", "\u8F90"], /* CJK Ideograph */ + ["\u8F91", "\u8F91"], /* CJK Ideograph */ + ["\u8F92", "\u8F92"], /* CJK Ideograph */ + ["\u8F93", "\u8F93"], /* CJK Ideograph */ + ["\u8F94", "\u8F94"], /* CJK Ideograph */ + ["\u8F95", "\u8F95"], /* CJK Ideograph */ + ["\u8F96", "\u8F96"], /* CJK Ideograph */ + ["\u8F97", "\u8F97"], /* CJK Ideograph */ + ["\u8F98", "\u8F98"], /* CJK Ideograph */ + ["\u8F99", "\u8F99"], /* CJK Ideograph */ + ["\u8F9A", "\u8F9A"], /* CJK Ideograph */ + ["\u8F9B", "\u8F9B"], /* CJK Ideograph */ + ["\u8F9C", "\u8F9C"], /* CJK Ideograph */ + ["\u8F9D", "\u8F9D"], /* CJK Ideograph */ + ["\u8F9E", "\u8F9E"], /* CJK Ideograph */ + ["\u8F9F", "\u8F9F"], /* CJK Ideograph */ + ["\u8FA0", "\u8FA0"], /* CJK Ideograph */ + ["\u8FA1", "\u8FA1"], /* CJK Ideograph */ + ["\u8FA2", "\u8FA2"], /* CJK Ideograph */ + ["\u8FA3", "\u8FA3"], /* CJK Ideograph */ + ["\u8FA4", "\u8FA4"], /* CJK Ideograph */ + ["\u8FA5", "\u8FA5"], /* CJK Ideograph */ + ["\u8FA6", "\u8FA6"], /* CJK Ideograph */ + ["\u8FA7", "\u8FA7"], /* CJK Ideograph */ + ["\u8FA8", "\u8FA8"], /* CJK Ideograph */ + ["\u8FA9", "\u8FA9"], /* CJK Ideograph */ + ["\u8FAA", "\u8FAA"], /* CJK Ideograph */ + ["\u8FAB", "\u8FAB"], /* CJK Ideograph */ + ["\u8FAC", "\u8FAC"], /* CJK Ideograph */ + ["\u8FAD", "\u8FAD"], /* CJK Ideograph */ + ["\u8FAE", "\u8FAE"], /* CJK Ideograph */ + ["\u8FAF", "\u8FAF"], /* CJK Ideograph */ + ["\u8FB0", "\u8FB0"], /* CJK Ideograph */ + ["\u8FB1", "\u8FB1"], /* CJK Ideograph */ + ["\u8FB2", "\u8FB2"], /* CJK Ideograph */ + ["\u8FB3", "\u8FB3"], /* CJK Ideograph */ + ["\u8FB4", "\u8FB4"], /* CJK Ideograph */ + ["\u8FB5", "\u8FB5"], /* CJK Ideograph */ + ["\u8FB6", "\u8FB6"], /* CJK Ideograph */ + ["\u8FB7", "\u8FB7"], /* CJK Ideograph */ + ["\u8FB8", "\u8FB8"], /* CJK Ideograph */ + ["\u8FB9", "\u8FB9"], /* CJK Ideograph */ + ["\u8FBA", "\u8FBA"], /* CJK Ideograph */ + ["\u8FBB", "\u8FBB"], /* CJK Ideograph */ + ["\u8FBC", "\u8FBC"], /* CJK Ideograph */ + ["\u8FBD", "\u8FBD"], /* CJK Ideograph */ + ["\u8FBE", "\u8FBE"], /* CJK Ideograph */ + ["\u8FBF", "\u8FBF"], /* CJK Ideograph */ + ["\u8FC0", "\u8FC0"], /* CJK Ideograph */ + ["\u8FC1", "\u8FC1"], /* CJK Ideograph */ + ["\u8FC2", "\u8FC2"], /* CJK Ideograph */ + ["\u8FC3", "\u8FC3"], /* CJK Ideograph */ + ["\u8FC4", "\u8FC4"], /* CJK Ideograph */ + ["\u8FC5", "\u8FC5"], /* CJK Ideograph */ + ["\u8FC6", "\u8FC6"], /* CJK Ideograph */ + ["\u8FC7", "\u8FC7"], /* CJK Ideograph */ + ["\u8FC8", "\u8FC8"], /* CJK Ideograph */ + ["\u8FC9", "\u8FC9"], /* CJK Ideograph */ + ["\u8FCA", "\u8FCA"], /* CJK Ideograph */ + ["\u8FCB", "\u8FCB"], /* CJK Ideograph */ + ["\u8FCC", "\u8FCC"], /* CJK Ideograph */ + ["\u8FCD", "\u8FCD"], /* CJK Ideograph */ + ["\u8FCE", "\u8FCE"], /* CJK Ideograph */ + ["\u8FCF", "\u8FCF"], /* CJK Ideograph */ + ["\u8FD0", "\u8FD0"], /* CJK Ideograph */ + ["\u8FD1", "\u8FD1"], /* CJK Ideograph */ + ["\u8FD2", "\u8FD2"], /* CJK Ideograph */ + ["\u8FD3", "\u8FD3"], /* CJK Ideograph */ + ["\u8FD4", "\u8FD4"], /* CJK Ideograph */ + ["\u8FD5", "\u8FD5"], /* CJK Ideograph */ + ["\u8FD6", "\u8FD6"], /* CJK Ideograph */ + ["\u8FD7", "\u8FD7"], /* CJK Ideograph */ + ["\u8FD8", "\u8FD8"], /* CJK Ideograph */ + ["\u8FD9", "\u8FD9"], /* CJK Ideograph */ + ["\u8FDA", "\u8FDA"], /* CJK Ideograph */ + ["\u8FDB", "\u8FDB"], /* CJK Ideograph */ + ["\u8FDC", "\u8FDC"], /* CJK Ideograph */ + ["\u8FDD", "\u8FDD"], /* CJK Ideograph */ + ["\u8FDE", "\u8FDE"], /* CJK Ideograph */ + ["\u8FDF", "\u8FDF"], /* CJK Ideograph */ + ["\u8FE0", "\u8FE0"], /* CJK Ideograph */ + ["\u8FE1", "\u8FE1"], /* CJK Ideograph */ + ["\u8FE2", "\u8FE2"], /* CJK Ideograph */ + ["\u8FE3", "\u8FE3"], /* CJK Ideograph */ + ["\u8FE4", "\u8FE4"], /* CJK Ideograph */ + ["\u8FE5", "\u8FE5"], /* CJK Ideograph */ + ["\u8FE6", "\u8FE6"], /* CJK Ideograph */ + ["\u8FE7", "\u8FE7"], /* CJK Ideograph */ + ["\u8FE8", "\u8FE8"], /* CJK Ideograph */ + ["\u8FE9", "\u8FE9"], /* CJK Ideograph */ + ["\u8FEA", "\u8FEA"], /* CJK Ideograph */ + ["\u8FEB", "\u8FEB"], /* CJK Ideograph */ + ["\u8FEC", "\u8FEC"], /* CJK Ideograph */ + ["\u8FED", "\u8FED"], /* CJK Ideograph */ + ["\u8FEE", "\u8FEE"], /* CJK Ideograph */ + ["\u8FEF", "\u8FEF"], /* CJK Ideograph */ + ["\u8FF0", "\u8FF0"], /* CJK Ideograph */ + ["\u8FF1", "\u8FF1"], /* CJK Ideograph */ + ["\u8FF2", "\u8FF2"], /* CJK Ideograph */ + ["\u8FF3", "\u8FF3"], /* CJK Ideograph */ + ["\u8FF4", "\u8FF4"], /* CJK Ideograph */ + ["\u8FF5", "\u8FF5"], /* CJK Ideograph */ + ["\u8FF6", "\u8FF6"], /* CJK Ideograph */ + ["\u8FF7", "\u8FF7"], /* CJK Ideograph */ + ["\u8FF8", "\u8FF8"], /* CJK Ideograph */ + ["\u8FF9", "\u8FF9"], /* CJK Ideograph */ + ["\u8FFA", "\u8FFA"], /* CJK Ideograph */ + ["\u8FFB", "\u8FFB"], /* CJK Ideograph */ + ["\u8FFC", "\u8FFC"], /* CJK Ideograph */ + ["\u8FFD", "\u8FFD"], /* CJK Ideograph */ + ["\u8FFE", "\u8FFE"], /* CJK Ideograph */ + ["\u8FFF", "\u8FFF"], /* CJK Ideograph */ + ["\u9000", "\u9000"], /* CJK Ideograph */ + ["\u9001", "\u9001"], /* CJK Ideograph */ + ["\u9002", "\u9002"], /* CJK Ideograph */ + ["\u9003", "\u9003"], /* CJK Ideograph */ + ["\u9004", "\u9004"], /* CJK Ideograph */ + ["\u9005", "\u9005"], /* CJK Ideograph */ + ["\u9006", "\u9006"], /* CJK Ideograph */ + ["\u9007", "\u9007"], /* CJK Ideograph */ + ["\u9008", "\u9008"], /* CJK Ideograph */ + ["\u9009", "\u9009"], /* CJK Ideograph */ + ["\u900A", "\u900A"], /* CJK Ideograph */ + ["\u900B", "\u900B"], /* CJK Ideograph */ + ["\u900C", "\u900C"], /* CJK Ideograph */ + ["\u900D", "\u900D"], /* CJK Ideograph */ + ["\u900E", "\u900E"], /* CJK Ideograph */ + ["\u900F", "\u900F"], /* CJK Ideograph */ + ["\u9010", "\u9010"], /* CJK Ideograph */ + ["\u9011", "\u9011"], /* CJK Ideograph */ + ["\u9012", "\u9012"], /* CJK Ideograph */ + ["\u9013", "\u9013"], /* CJK Ideograph */ + ["\u9014", "\u9014"], /* CJK Ideograph */ + ["\u9015", "\u9015"], /* CJK Ideograph */ + ["\u9016", "\u9016"], /* CJK Ideograph */ + ["\u9017", "\u9017"], /* CJK Ideograph */ + ["\u9018", "\u9018"], /* CJK Ideograph */ + ["\u9019", "\u9019"], /* CJK Ideograph */ + ["\u901A", "\u901A"], /* CJK Ideograph */ + ["\u901B", "\u901B"], /* CJK Ideograph */ + ["\u901C", "\u901C"], /* CJK Ideograph */ + ["\u901D", "\u901D"], /* CJK Ideograph */ + ["\u901E", "\u901E"], /* CJK Ideograph */ + ["\u901F", "\u901F"], /* CJK Ideograph */ + ["\u9020", "\u9020"], /* CJK Ideograph */ + ["\u9021", "\u9021"], /* CJK Ideograph */ + ["\u9022", "\u9022"], /* CJK Ideograph */ + ["\u9023", "\u9023"], /* CJK Ideograph */ + ["\u9024", "\u9024"], /* CJK Ideograph */ + ["\u9025", "\u9025"], /* CJK Ideograph */ + ["\u9026", "\u9026"], /* CJK Ideograph */ + ["\u9027", "\u9027"], /* CJK Ideograph */ + ["\u9028", "\u9028"], /* CJK Ideograph */ + ["\u9029", "\u9029"], /* CJK Ideograph */ + ["\u902A", "\u902A"], /* CJK Ideograph */ + ["\u902B", "\u902B"], /* CJK Ideograph */ + ["\u902C", "\u902C"], /* CJK Ideograph */ + ["\u902D", "\u902D"], /* CJK Ideograph */ + ["\u902E", "\u902E"], /* CJK Ideograph */ + ["\u902F", "\u902F"], /* CJK Ideograph */ + ["\u9030", "\u9030"], /* CJK Ideograph */ + ["\u9031", "\u9031"], /* CJK Ideograph */ + ["\u9032", "\u9032"], /* CJK Ideograph */ + ["\u9033", "\u9033"], /* CJK Ideograph */ + ["\u9034", "\u9034"], /* CJK Ideograph */ + ["\u9035", "\u9035"], /* CJK Ideograph */ + ["\u9036", "\u9036"], /* CJK Ideograph */ + ["\u9037", "\u9037"], /* CJK Ideograph */ + ["\u9038", "\u9038"], /* CJK Ideograph */ + ["\u9039", "\u9039"], /* CJK Ideograph */ + ["\u903A", "\u903A"], /* CJK Ideograph */ + ["\u903B", "\u903B"], /* CJK Ideograph */ + ["\u903C", "\u903C"], /* CJK Ideograph */ + ["\u903D", "\u903D"], /* CJK Ideograph */ + ["\u903E", "\u903E"], /* CJK Ideograph */ + ["\u903F", "\u903F"], /* CJK Ideograph */ + ["\u9040", "\u9040"], /* CJK Ideograph */ + ["\u9041", "\u9041"], /* CJK Ideograph */ + ["\u9042", "\u9042"], /* CJK Ideograph */ + ["\u9043", "\u9043"], /* CJK Ideograph */ + ["\u9044", "\u9044"], /* CJK Ideograph */ + ["\u9045", "\u9045"], /* CJK Ideograph */ + ["\u9046", "\u9046"], /* CJK Ideograph */ + ["\u9047", "\u9047"], /* CJK Ideograph */ + ["\u9048", "\u9048"], /* CJK Ideograph */ + ["\u9049", "\u9049"], /* CJK Ideograph */ + ["\u904A", "\u904A"], /* CJK Ideograph */ + ["\u904B", "\u904B"], /* CJK Ideograph */ + ["\u904C", "\u904C"], /* CJK Ideograph */ + ["\u904D", "\u904D"], /* CJK Ideograph */ + ["\u904E", "\u904E"], /* CJK Ideograph */ + ["\u904F", "\u904F"], /* CJK Ideograph */ + ["\u9050", "\u9050"], /* CJK Ideograph */ + ["\u9051", "\u9051"], /* CJK Ideograph */ + ["\u9052", "\u9052"], /* CJK Ideograph */ + ["\u9053", "\u9053"], /* CJK Ideograph */ + ["\u9054", "\u9054"], /* CJK Ideograph */ + ["\u9055", "\u9055"], /* CJK Ideograph */ + ["\u9056", "\u9056"], /* CJK Ideograph */ + ["\u9057", "\u9057"], /* CJK Ideograph */ + ["\u9058", "\u9058"], /* CJK Ideograph */ + ["\u9059", "\u9059"], /* CJK Ideograph */ + ["\u905A", "\u905A"], /* CJK Ideograph */ + ["\u905B", "\u905B"], /* CJK Ideograph */ + ["\u905C", "\u905C"], /* CJK Ideograph */ + ["\u905D", "\u905D"], /* CJK Ideograph */ + ["\u905E", "\u905E"], /* CJK Ideograph */ + ["\u905F", "\u905F"], /* CJK Ideograph */ + ["\u9060", "\u9060"], /* CJK Ideograph */ + ["\u9061", "\u9061"], /* CJK Ideograph */ + ["\u9062", "\u9062"], /* CJK Ideograph */ + ["\u9063", "\u9063"], /* CJK Ideograph */ + ["\u9064", "\u9064"], /* CJK Ideograph */ + ["\u9065", "\u9065"], /* CJK Ideograph */ + ["\u9066", "\u9066"], /* CJK Ideograph */ + ["\u9067", "\u9067"], /* CJK Ideograph */ + ["\u9068", "\u9068"], /* CJK Ideograph */ + ["\u9069", "\u9069"], /* CJK Ideograph */ + ["\u906A", "\u906A"], /* CJK Ideograph */ + ["\u906B", "\u906B"], /* CJK Ideograph */ + ["\u906C", "\u906C"], /* CJK Ideograph */ + ["\u906D", "\u906D"], /* CJK Ideograph */ + ["\u906E", "\u906E"], /* CJK Ideograph */ + ["\u906F", "\u906F"], /* CJK Ideograph */ + ["\u9070", "\u9070"], /* CJK Ideograph */ + ["\u9071", "\u9071"], /* CJK Ideograph */ + ["\u9072", "\u9072"], /* CJK Ideograph */ + ["\u9073", "\u9073"], /* CJK Ideograph */ + ["\u9074", "\u9074"], /* CJK Ideograph */ + ["\u9075", "\u9075"], /* CJK Ideograph */ + ["\u9076", "\u9076"], /* CJK Ideograph */ + ["\u9077", "\u9077"], /* CJK Ideograph */ + ["\u9078", "\u9078"], /* CJK Ideograph */ + ["\u9079", "\u9079"], /* CJK Ideograph */ + ["\u907A", "\u907A"], /* CJK Ideograph */ + ["\u907B", "\u907B"], /* CJK Ideograph */ + ["\u907C", "\u907C"], /* CJK Ideograph */ + ["\u907D", "\u907D"], /* CJK Ideograph */ + ["\u907E", "\u907E"], /* CJK Ideograph */ + ["\u907F", "\u907F"], /* CJK Ideograph */ + ["\u9080", "\u9080"], /* CJK Ideograph */ + ["\u9081", "\u9081"], /* CJK Ideograph */ + ["\u9082", "\u9082"], /* CJK Ideograph */ + ["\u9083", "\u9083"], /* CJK Ideograph */ + ["\u9084", "\u9084"], /* CJK Ideograph */ + ["\u9085", "\u9085"], /* CJK Ideograph */ + ["\u9086", "\u9086"], /* CJK Ideograph */ + ["\u9087", "\u9087"], /* CJK Ideograph */ + ["\u9088", "\u9088"], /* CJK Ideograph */ + ["\u9089", "\u9089"], /* CJK Ideograph */ + ["\u908A", "\u908A"], /* CJK Ideograph */ + ["\u908B", "\u908B"], /* CJK Ideograph */ + ["\u908C", "\u908C"], /* CJK Ideograph */ + ["\u908D", "\u908D"], /* CJK Ideograph */ + ["\u908E", "\u908E"], /* CJK Ideograph */ + ["\u908F", "\u908F"], /* CJK Ideograph */ + ["\u9090", "\u9090"], /* CJK Ideograph */ + ["\u9091", "\u9091"], /* CJK Ideograph */ + ["\u9092", "\u9092"], /* CJK Ideograph */ + ["\u9093", "\u9093"], /* CJK Ideograph */ + ["\u9094", "\u9094"], /* CJK Ideograph */ + ["\u9095", "\u9095"], /* CJK Ideograph */ + ["\u9096", "\u9096"], /* CJK Ideograph */ + ["\u9097", "\u9097"], /* CJK Ideograph */ + ["\u9098", "\u9098"], /* CJK Ideograph */ + ["\u9099", "\u9099"], /* CJK Ideograph */ + ["\u909A", "\u909A"], /* CJK Ideograph */ + ["\u909B", "\u909B"], /* CJK Ideograph */ + ["\u909C", "\u909C"], /* CJK Ideograph */ + ["\u909D", "\u909D"], /* CJK Ideograph */ + ["\u909E", "\u909E"], /* CJK Ideograph */ + ["\u909F", "\u909F"], /* CJK Ideograph */ + ["\u90A0", "\u90A0"], /* CJK Ideograph */ + ["\u90A1", "\u90A1"], /* CJK Ideograph */ + ["\u90A2", "\u90A2"], /* CJK Ideograph */ + ["\u90A3", "\u90A3"], /* CJK Ideograph */ + ["\u90A4", "\u90A4"], /* CJK Ideograph */ + ["\u90A5", "\u90A5"], /* CJK Ideograph */ + ["\u90A6", "\u90A6"], /* CJK Ideograph */ + ["\u90A7", "\u90A7"], /* CJK Ideograph */ + ["\u90A8", "\u90A8"], /* CJK Ideograph */ + ["\u90A9", "\u90A9"], /* CJK Ideograph */ + ["\u90AA", "\u90AA"], /* CJK Ideograph */ + ["\u90AB", "\u90AB"], /* CJK Ideograph */ + ["\u90AC", "\u90AC"], /* CJK Ideograph */ + ["\u90AD", "\u90AD"], /* CJK Ideograph */ + ["\u90AE", "\u90AE"], /* CJK Ideograph */ + ["\u90AF", "\u90AF"], /* CJK Ideograph */ + ["\u90B0", "\u90B0"], /* CJK Ideograph */ + ["\u90B1", "\u90B1"], /* CJK Ideograph */ + ["\u90B2", "\u90B2"], /* CJK Ideograph */ + ["\u90B3", "\u90B3"], /* CJK Ideograph */ + ["\u90B4", "\u90B4"], /* CJK Ideograph */ + ["\u90B5", "\u90B5"], /* CJK Ideograph */ + ["\u90B6", "\u90B6"], /* CJK Ideograph */ + ["\u90B7", "\u90B7"], /* CJK Ideograph */ + ["\u90B8", "\u90B8"], /* CJK Ideograph */ + ["\u90B9", "\u90B9"], /* CJK Ideograph */ + ["\u90BA", "\u90BA"], /* CJK Ideograph */ + ["\u90BB", "\u90BB"], /* CJK Ideograph */ + ["\u90BC", "\u90BC"], /* CJK Ideograph */ + ["\u90BD", "\u90BD"], /* CJK Ideograph */ + ["\u90BE", "\u90BE"], /* CJK Ideograph */ + ["\u90BF", "\u90BF"], /* CJK Ideograph */ + ["\u90C0", "\u90C0"], /* CJK Ideograph */ + ["\u90C1", "\u90C1"], /* CJK Ideograph */ + ["\u90C2", "\u90C2"], /* CJK Ideograph */ + ["\u90C3", "\u90C3"], /* CJK Ideograph */ + ["\u90C4", "\u90C4"], /* CJK Ideograph */ + ["\u90C5", "\u90C5"], /* CJK Ideograph */ + ["\u90C6", "\u90C6"], /* CJK Ideograph */ + ["\u90C7", "\u90C7"], /* CJK Ideograph */ + ["\u90C8", "\u90C8"], /* CJK Ideograph */ + ["\u90C9", "\u90C9"], /* CJK Ideograph */ + ["\u90CA", "\u90CA"], /* CJK Ideograph */ + ["\u90CB", "\u90CB"], /* CJK Ideograph */ + ["\u90CC", "\u90CC"], /* CJK Ideograph */ + ["\u90CD", "\u90CD"], /* CJK Ideograph */ + ["\u90CE", "\u90CE"], /* CJK Ideograph */ + ["\u90CF", "\u90CF"], /* CJK Ideograph */ + ["\u90D0", "\u90D0"], /* CJK Ideograph */ + ["\u90D1", "\u90D1"], /* CJK Ideograph */ + ["\u90D2", "\u90D2"], /* CJK Ideograph */ + ["\u90D3", "\u90D3"], /* CJK Ideograph */ + ["\u90D4", "\u90D4"], /* CJK Ideograph */ + ["\u90D5", "\u90D5"], /* CJK Ideograph */ + ["\u90D6", "\u90D6"], /* CJK Ideograph */ + ["\u90D7", "\u90D7"], /* CJK Ideograph */ + ["\u90D8", "\u90D8"], /* CJK Ideograph */ + ["\u90D9", "\u90D9"], /* CJK Ideograph */ + ["\u90DA", "\u90DA"], /* CJK Ideograph */ + ["\u90DB", "\u90DB"], /* CJK Ideograph */ + ["\u90DC", "\u90DC"], /* CJK Ideograph */ + ["\u90DD", "\u90DD"], /* CJK Ideograph */ + ["\u90DE", "\u90DE"], /* CJK Ideograph */ + ["\u90DF", "\u90DF"], /* CJK Ideograph */ + ["\u90E0", "\u90E0"], /* CJK Ideograph */ + ["\u90E1", "\u90E1"], /* CJK Ideograph */ + ["\u90E2", "\u90E2"], /* CJK Ideograph */ + ["\u90E3", "\u90E3"], /* CJK Ideograph */ + ["\u90E4", "\u90E4"], /* CJK Ideograph */ + ["\u90E5", "\u90E5"], /* CJK Ideograph */ + ["\u90E6", "\u90E6"], /* CJK Ideograph */ + ["\u90E7", "\u90E7"], /* CJK Ideograph */ + ["\u90E8", "\u90E8"], /* CJK Ideograph */ + ["\u90E9", "\u90E9"], /* CJK Ideograph */ + ["\u90EA", "\u90EA"], /* CJK Ideograph */ + ["\u90EB", "\u90EB"], /* CJK Ideograph */ + ["\u90EC", "\u90EC"], /* CJK Ideograph */ + ["\u90ED", "\u90ED"], /* CJK Ideograph */ + ["\u90EE", "\u90EE"], /* CJK Ideograph */ + ["\u90EF", "\u90EF"], /* CJK Ideograph */ + ["\u90F0", "\u90F0"], /* CJK Ideograph */ + ["\u90F1", "\u90F1"], /* CJK Ideograph */ + ["\u90F2", "\u90F2"], /* CJK Ideograph */ + ["\u90F3", "\u90F3"], /* CJK Ideograph */ + ["\u90F4", "\u90F4"], /* CJK Ideograph */ + ["\u90F5", "\u90F5"], /* CJK Ideograph */ + ["\u90F6", "\u90F6"], /* CJK Ideograph */ + ["\u90F7", "\u90F7"], /* CJK Ideograph */ + ["\u90F8", "\u90F8"], /* CJK Ideograph */ + ["\u90F9", "\u90F9"], /* CJK Ideograph */ + ["\u90FA", "\u90FA"], /* CJK Ideograph */ + ["\u90FB", "\u90FB"], /* CJK Ideograph */ + ["\u90FC", "\u90FC"], /* CJK Ideograph */ + ["\u90FD", "\u90FD"], /* CJK Ideograph */ + ["\u90FE", "\u90FE"], /* CJK Ideograph */ + ["\u90FF", "\u90FF"], /* CJK Ideograph */ + ["\u9100", "\u9100"], /* CJK Ideograph */ + ["\u9101", "\u9101"], /* CJK Ideograph */ + ["\u9102", "\u9102"], /* CJK Ideograph */ + ["\u9103", "\u9103"], /* CJK Ideograph */ + ["\u9104", "\u9104"], /* CJK Ideograph */ + ["\u9105", "\u9105"], /* CJK Ideograph */ + ["\u9106", "\u9106"], /* CJK Ideograph */ + ["\u9107", "\u9107"], /* CJK Ideograph */ + ["\u9108", "\u9108"], /* CJK Ideograph */ + ["\u9109", "\u9109"], /* CJK Ideograph */ + ["\u910A", "\u910A"], /* CJK Ideograph */ + ["\u910B", "\u910B"], /* CJK Ideograph */ + ["\u910C", "\u910C"], /* CJK Ideograph */ + ["\u910D", "\u910D"], /* CJK Ideograph */ + ["\u910E", "\u910E"], /* CJK Ideograph */ + ["\u910F", "\u910F"], /* CJK Ideograph */ + ["\u9110", "\u9110"], /* CJK Ideograph */ + ["\u9111", "\u9111"], /* CJK Ideograph */ + ["\u9112", "\u9112"], /* CJK Ideograph */ + ["\u9113", "\u9113"], /* CJK Ideograph */ + ["\u9114", "\u9114"], /* CJK Ideograph */ + ["\u9115", "\u9115"], /* CJK Ideograph */ + ["\u9116", "\u9116"], /* CJK Ideograph */ + ["\u9117", "\u9117"], /* CJK Ideograph */ + ["\u9118", "\u9118"], /* CJK Ideograph */ + ["\u9119", "\u9119"], /* CJK Ideograph */ + ["\u911A", "\u911A"], /* CJK Ideograph */ + ["\u911B", "\u911B"], /* CJK Ideograph */ + ["\u911C", "\u911C"], /* CJK Ideograph */ + ["\u911D", "\u911D"], /* CJK Ideograph */ + ["\u911E", "\u911E"], /* CJK Ideograph */ + ["\u911F", "\u911F"], /* CJK Ideograph */ + ["\u9120", "\u9120"], /* CJK Ideograph */ + ["\u9121", "\u9121"], /* CJK Ideograph */ + ["\u9122", "\u9122"], /* CJK Ideograph */ + ["\u9123", "\u9123"], /* CJK Ideograph */ + ["\u9124", "\u9124"], /* CJK Ideograph */ + ["\u9125", "\u9125"], /* CJK Ideograph */ + ["\u9126", "\u9126"], /* CJK Ideograph */ + ["\u9127", "\u9127"], /* CJK Ideograph */ + ["\u9128", "\u9128"], /* CJK Ideograph */ + ["\u9129", "\u9129"], /* CJK Ideograph */ + ["\u912A", "\u912A"], /* CJK Ideograph */ + ["\u912B", "\u912B"], /* CJK Ideograph */ + ["\u912C", "\u912C"], /* CJK Ideograph */ + ["\u912D", "\u912D"], /* CJK Ideograph */ + ["\u912E", "\u912E"], /* CJK Ideograph */ + ["\u912F", "\u912F"], /* CJK Ideograph */ + ["\u9130", "\u9130"], /* CJK Ideograph */ + ["\u9131", "\u9131"], /* CJK Ideograph */ + ["\u9132", "\u9132"], /* CJK Ideograph */ + ["\u9133", "\u9133"], /* CJK Ideograph */ + ["\u9134", "\u9134"], /* CJK Ideograph */ + ["\u9135", "\u9135"], /* CJK Ideograph */ + ["\u9136", "\u9136"], /* CJK Ideograph */ + ["\u9137", "\u9137"], /* CJK Ideograph */ + ["\u9138", "\u9138"], /* CJK Ideograph */ + ["\u9139", "\u9139"], /* CJK Ideograph */ + ["\u913A", "\u913A"], /* CJK Ideograph */ + ["\u913B", "\u913B"], /* CJK Ideograph */ + ["\u913C", "\u913C"], /* CJK Ideograph */ + ["\u913D", "\u913D"], /* CJK Ideograph */ + ["\u913E", "\u913E"], /* CJK Ideograph */ + ["\u913F", "\u913F"], /* CJK Ideograph */ + ["\u9140", "\u9140"], /* CJK Ideograph */ + ["\u9141", "\u9141"], /* CJK Ideograph */ + ["\u9142", "\u9142"], /* CJK Ideograph */ + ["\u9143", "\u9143"], /* CJK Ideograph */ + ["\u9144", "\u9144"], /* CJK Ideograph */ + ["\u9145", "\u9145"], /* CJK Ideograph */ + ["\u9146", "\u9146"], /* CJK Ideograph */ + ["\u9147", "\u9147"], /* CJK Ideograph */ + ["\u9148", "\u9148"], /* CJK Ideograph */ + ["\u9149", "\u9149"], /* CJK Ideograph */ + ["\u914A", "\u914A"], /* CJK Ideograph */ + ["\u914B", "\u914B"], /* CJK Ideograph */ + ["\u914C", "\u914C"], /* CJK Ideograph */ + ["\u914D", "\u914D"], /* CJK Ideograph */ + ["\u914E", "\u914E"], /* CJK Ideograph */ + ["\u914F", "\u914F"], /* CJK Ideograph */ + ["\u9150", "\u9150"], /* CJK Ideograph */ + ["\u9151", "\u9151"], /* CJK Ideograph */ + ["\u9152", "\u9152"], /* CJK Ideograph */ + ["\u9153", "\u9153"], /* CJK Ideograph */ + ["\u9154", "\u9154"], /* CJK Ideograph */ + ["\u9155", "\u9155"], /* CJK Ideograph */ + ["\u9156", "\u9156"], /* CJK Ideograph */ + ["\u9157", "\u9157"], /* CJK Ideograph */ + ["\u9158", "\u9158"], /* CJK Ideograph */ + ["\u9159", "\u9159"], /* CJK Ideograph */ + ["\u915A", "\u915A"], /* CJK Ideograph */ + ["\u915B", "\u915B"], /* CJK Ideograph */ + ["\u915C", "\u915C"], /* CJK Ideograph */ + ["\u915D", "\u915D"], /* CJK Ideograph */ + ["\u915E", "\u915E"], /* CJK Ideograph */ + ["\u915F", "\u915F"], /* CJK Ideograph */ + ["\u9160", "\u9160"], /* CJK Ideograph */ + ["\u9161", "\u9161"], /* CJK Ideograph */ + ["\u9162", "\u9162"], /* CJK Ideograph */ + ["\u9163", "\u9163"], /* CJK Ideograph */ + ["\u9164", "\u9164"], /* CJK Ideograph */ + ["\u9165", "\u9165"], /* CJK Ideograph */ + ["\u9166", "\u9166"], /* CJK Ideograph */ + ["\u9167", "\u9167"], /* CJK Ideograph */ + ["\u9168", "\u9168"], /* CJK Ideograph */ + ["\u9169", "\u9169"], /* CJK Ideograph */ + ["\u916A", "\u916A"], /* CJK Ideograph */ + ["\u916B", "\u916B"], /* CJK Ideograph */ + ["\u916C", "\u916C"], /* CJK Ideograph */ + ["\u916D", "\u916D"], /* CJK Ideograph */ + ["\u916E", "\u916E"], /* CJK Ideograph */ + ["\u916F", "\u916F"], /* CJK Ideograph */ + ["\u9170", "\u9170"], /* CJK Ideograph */ + ["\u9171", "\u9171"], /* CJK Ideograph */ + ["\u9172", "\u9172"], /* CJK Ideograph */ + ["\u9173", "\u9173"], /* CJK Ideograph */ + ["\u9174", "\u9174"], /* CJK Ideograph */ + ["\u9175", "\u9175"], /* CJK Ideograph */ + ["\u9176", "\u9176"], /* CJK Ideograph */ + ["\u9177", "\u9177"], /* CJK Ideograph */ + ["\u9178", "\u9178"], /* CJK Ideograph */ + ["\u9179", "\u9179"], /* CJK Ideograph */ + ["\u917A", "\u917A"], /* CJK Ideograph */ + ["\u917B", "\u917B"], /* CJK Ideograph */ + ["\u917C", "\u917C"], /* CJK Ideograph */ + ["\u917D", "\u917D"], /* CJK Ideograph */ + ["\u917E", "\u917E"], /* CJK Ideograph */ + ["\u917F", "\u917F"], /* CJK Ideograph */ + ["\u9180", "\u9180"], /* CJK Ideograph */ + ["\u9181", "\u9181"], /* CJK Ideograph */ + ["\u9182", "\u9182"], /* CJK Ideograph */ + ["\u9183", "\u9183"], /* CJK Ideograph */ + ["\u9184", "\u9184"], /* CJK Ideograph */ + ["\u9185", "\u9185"], /* CJK Ideograph */ + ["\u9186", "\u9186"], /* CJK Ideograph */ + ["\u9187", "\u9187"], /* CJK Ideograph */ + ["\u9188", "\u9188"], /* CJK Ideograph */ + ["\u9189", "\u9189"], /* CJK Ideograph */ + ["\u918A", "\u918A"], /* CJK Ideograph */ + ["\u918B", "\u918B"], /* CJK Ideograph */ + ["\u918C", "\u918C"], /* CJK Ideograph */ + ["\u918D", "\u918D"], /* CJK Ideograph */ + ["\u918E", "\u918E"], /* CJK Ideograph */ + ["\u918F", "\u918F"], /* CJK Ideograph */ + ["\u9190", "\u9190"], /* CJK Ideograph */ + ["\u9191", "\u9191"], /* CJK Ideograph */ + ["\u9192", "\u9192"], /* CJK Ideograph */ + ["\u9193", "\u9193"], /* CJK Ideograph */ + ["\u9194", "\u9194"], /* CJK Ideograph */ + ["\u9195", "\u9195"], /* CJK Ideograph */ + ["\u9196", "\u9196"], /* CJK Ideograph */ + ["\u9197", "\u9197"], /* CJK Ideograph */ + ["\u9198", "\u9198"], /* CJK Ideograph */ + ["\u9199", "\u9199"], /* CJK Ideograph */ + ["\u919A", "\u919A"], /* CJK Ideograph */ + ["\u919B", "\u919B"], /* CJK Ideograph */ + ["\u919C", "\u919C"], /* CJK Ideograph */ + ["\u919D", "\u919D"], /* CJK Ideograph */ + ["\u919E", "\u919E"], /* CJK Ideograph */ + ["\u919F", "\u919F"], /* CJK Ideograph */ + ["\u91A0", "\u91A0"], /* CJK Ideograph */ + ["\u91A1", "\u91A1"], /* CJK Ideograph */ + ["\u91A2", "\u91A2"], /* CJK Ideograph */ + ["\u91A3", "\u91A3"], /* CJK Ideograph */ + ["\u91A4", "\u91A4"], /* CJK Ideograph */ + ["\u91A5", "\u91A5"], /* CJK Ideograph */ + ["\u91A6", "\u91A6"], /* CJK Ideograph */ + ["\u91A7", "\u91A7"], /* CJK Ideograph */ + ["\u91A8", "\u91A8"], /* CJK Ideograph */ + ["\u91A9", "\u91A9"], /* CJK Ideograph */ + ["\u91AA", "\u91AA"], /* CJK Ideograph */ + ["\u91AB", "\u91AB"], /* CJK Ideograph */ + ["\u91AC", "\u91AC"], /* CJK Ideograph */ + ["\u91AD", "\u91AD"], /* CJK Ideograph */ + ["\u91AE", "\u91AE"], /* CJK Ideograph */ + ["\u91AF", "\u91AF"], /* CJK Ideograph */ + ["\u91B0", "\u91B0"], /* CJK Ideograph */ + ["\u91B1", "\u91B1"], /* CJK Ideograph */ + ["\u91B2", "\u91B2"], /* CJK Ideograph */ + ["\u91B3", "\u91B3"], /* CJK Ideograph */ + ["\u91B4", "\u91B4"], /* CJK Ideograph */ + ["\u91B5", "\u91B5"], /* CJK Ideograph */ + ["\u91B6", "\u91B6"], /* CJK Ideograph */ + ["\u91B7", "\u91B7"], /* CJK Ideograph */ + ["\u91B8", "\u91B8"], /* CJK Ideograph */ + ["\u91B9", "\u91B9"], /* CJK Ideograph */ + ["\u91BA", "\u91BA"], /* CJK Ideograph */ + ["\u91BB", "\u91BB"], /* CJK Ideograph */ + ["\u91BC", "\u91BC"], /* CJK Ideograph */ + ["\u91BD", "\u91BD"], /* CJK Ideograph */ + ["\u91BE", "\u91BE"], /* CJK Ideograph */ + ["\u91BF", "\u91BF"], /* CJK Ideograph */ + ["\u91C0", "\u91C0"], /* CJK Ideograph */ + ["\u91C1", "\u91C1"], /* CJK Ideograph */ + ["\u91C2", "\u91C2"], /* CJK Ideograph */ + ["\u91C3", "\u91C3"], /* CJK Ideograph */ + ["\u91C4", "\u91C4"], /* CJK Ideograph */ + ["\u91C5", "\u91C5"], /* CJK Ideograph */ + ["\u91C6", "\u91C6"], /* CJK Ideograph */ + ["\u91C7", "\u91C7"], /* CJK Ideograph */ + ["\u91C8", "\u91C8"], /* CJK Ideograph */ + ["\u91C9", "\u91C9"], /* CJK Ideograph */ + ["\u91CA", "\u91CA"], /* CJK Ideograph */ + ["\u91CB", "\u91CB"], /* CJK Ideograph */ + ["\u91CC", "\u91CC"], /* CJK Ideograph */ + ["\u91CD", "\u91CD"], /* CJK Ideograph */ + ["\u91CE", "\u91CE"], /* CJK Ideograph */ + ["\u91CF", "\u91CF"], /* CJK Ideograph */ + ["\u91D0", "\u91D0"], /* CJK Ideograph */ + ["\u91D1", "\u91D1"], /* CJK Ideograph */ + ["\u91D2", "\u91D2"], /* CJK Ideograph */ + ["\u91D3", "\u91D3"], /* CJK Ideograph */ + ["\u91D4", "\u91D4"], /* CJK Ideograph */ + ["\u91D5", "\u91D5"], /* CJK Ideograph */ + ["\u91D6", "\u91D6"], /* CJK Ideograph */ + ["\u91D7", "\u91D7"], /* CJK Ideograph */ + ["\u91D8", "\u91D8"], /* CJK Ideograph */ + ["\u91D9", "\u91D9"], /* CJK Ideograph */ + ["\u91DA", "\u91DA"], /* CJK Ideograph */ + ["\u91DB", "\u91DB"], /* CJK Ideograph */ + ["\u91DC", "\u91DC"], /* CJK Ideograph */ + ["\u91DD", "\u91DD"], /* CJK Ideograph */ + ["\u91DE", "\u91DE"], /* CJK Ideograph */ + ["\u91DF", "\u91DF"], /* CJK Ideograph */ + ["\u91E0", "\u91E0"], /* CJK Ideograph */ + ["\u91E1", "\u91E1"], /* CJK Ideograph */ + ["\u91E2", "\u91E2"], /* CJK Ideograph */ + ["\u91E3", "\u91E3"], /* CJK Ideograph */ + ["\u91E4", "\u91E4"], /* CJK Ideograph */ + ["\u91E5", "\u91E5"], /* CJK Ideograph */ + ["\u91E6", "\u91E6"], /* CJK Ideograph */ + ["\u91E7", "\u91E7"], /* CJK Ideograph */ + ["\u91E8", "\u91E8"], /* CJK Ideograph */ + ["\u91E9", "\u91E9"], /* CJK Ideograph */ + ["\u91EA", "\u91EA"], /* CJK Ideograph */ + ["\u91EB", "\u91EB"], /* CJK Ideograph */ + ["\u91EC", "\u91EC"], /* CJK Ideograph */ + ["\u91ED", "\u91ED"], /* CJK Ideograph */ + ["\u91EE", "\u91EE"], /* CJK Ideograph */ + ["\u91EF", "\u91EF"], /* CJK Ideograph */ + ["\u91F0", "\u91F0"], /* CJK Ideograph */ + ["\u91F1", "\u91F1"], /* CJK Ideograph */ + ["\u91F2", "\u91F2"], /* CJK Ideograph */ + ["\u91F3", "\u91F3"], /* CJK Ideograph */ + ["\u91F4", "\u91F4"], /* CJK Ideograph */ + ["\u91F5", "\u91F5"], /* CJK Ideograph */ + ["\u91F6", "\u91F6"], /* CJK Ideograph */ + ["\u91F7", "\u91F7"], /* CJK Ideograph */ + ["\u91F8", "\u91F8"], /* CJK Ideograph */ + ["\u91F9", "\u91F9"], /* CJK Ideograph */ + ["\u91FA", "\u91FA"], /* CJK Ideograph */ + ["\u91FB", "\u91FB"], /* CJK Ideograph */ + ["\u91FC", "\u91FC"], /* CJK Ideograph */ + ["\u91FD", "\u91FD"], /* CJK Ideograph */ + ["\u91FE", "\u91FE"], /* CJK Ideograph */ + ["\u91FF", "\u91FF"], /* CJK Ideograph */ + ["\u9200", "\u9200"], /* CJK Ideograph */ + ["\u9201", "\u9201"], /* CJK Ideograph */ + ["\u9202", "\u9202"], /* CJK Ideograph */ + ["\u9203", "\u9203"], /* CJK Ideograph */ + ["\u9204", "\u9204"], /* CJK Ideograph */ + ["\u9205", "\u9205"], /* CJK Ideograph */ + ["\u9206", "\u9206"], /* CJK Ideograph */ + ["\u9207", "\u9207"], /* CJK Ideograph */ + ["\u9208", "\u9208"], /* CJK Ideograph */ + ["\u9209", "\u9209"], /* CJK Ideograph */ + ["\u920A", "\u920A"], /* CJK Ideograph */ + ["\u920B", "\u920B"], /* CJK Ideograph */ + ["\u920C", "\u920C"], /* CJK Ideograph */ + ["\u920D", "\u920D"], /* CJK Ideograph */ + ["\u920E", "\u920E"], /* CJK Ideograph */ + ["\u920F", "\u920F"], /* CJK Ideograph */ + ["\u9210", "\u9210"], /* CJK Ideograph */ + ["\u9211", "\u9211"], /* CJK Ideograph */ + ["\u9212", "\u9212"], /* CJK Ideograph */ + ["\u9213", "\u9213"], /* CJK Ideograph */ + ["\u9214", "\u9214"], /* CJK Ideograph */ + ["\u9215", "\u9215"], /* CJK Ideograph */ + ["\u9216", "\u9216"], /* CJK Ideograph */ + ["\u9217", "\u9217"], /* CJK Ideograph */ + ["\u9218", "\u9218"], /* CJK Ideograph */ + ["\u9219", "\u9219"], /* CJK Ideograph */ + ["\u921A", "\u921A"], /* CJK Ideograph */ + ["\u921B", "\u921B"], /* CJK Ideograph */ + ["\u921C", "\u921C"], /* CJK Ideograph */ + ["\u921D", "\u921D"], /* CJK Ideograph */ + ["\u921E", "\u921E"], /* CJK Ideograph */ + ["\u921F", "\u921F"], /* CJK Ideograph */ + ["\u9220", "\u9220"], /* CJK Ideograph */ + ["\u9221", "\u9221"], /* CJK Ideograph */ + ["\u9222", "\u9222"], /* CJK Ideograph */ + ["\u9223", "\u9223"], /* CJK Ideograph */ + ["\u9224", "\u9224"], /* CJK Ideograph */ + ["\u9225", "\u9225"], /* CJK Ideograph */ + ["\u9226", "\u9226"], /* CJK Ideograph */ + ["\u9227", "\u9227"], /* CJK Ideograph */ + ["\u9228", "\u9228"], /* CJK Ideograph */ + ["\u9229", "\u9229"], /* CJK Ideograph */ + ["\u922A", "\u922A"], /* CJK Ideograph */ + ["\u922B", "\u922B"], /* CJK Ideograph */ + ["\u922C", "\u922C"], /* CJK Ideograph */ + ["\u922D", "\u922D"], /* CJK Ideograph */ + ["\u922E", "\u922E"], /* CJK Ideograph */ + ["\u922F", "\u922F"], /* CJK Ideograph */ + ["\u9230", "\u9230"], /* CJK Ideograph */ + ["\u9231", "\u9231"], /* CJK Ideograph */ + ["\u9232", "\u9232"], /* CJK Ideograph */ + ["\u9233", "\u9233"], /* CJK Ideograph */ + ["\u9234", "\u9234"], /* CJK Ideograph */ + ["\u9235", "\u9235"], /* CJK Ideograph */ + ["\u9236", "\u9236"], /* CJK Ideograph */ + ["\u9237", "\u9237"], /* CJK Ideograph */ + ["\u9238", "\u9238"], /* CJK Ideograph */ + ["\u9239", "\u9239"], /* CJK Ideograph */ + ["\u923A", "\u923A"], /* CJK Ideograph */ + ["\u923B", "\u923B"], /* CJK Ideograph */ + ["\u923C", "\u923C"], /* CJK Ideograph */ + ["\u923D", "\u923D"], /* CJK Ideograph */ + ["\u923E", "\u923E"], /* CJK Ideograph */ + ["\u923F", "\u923F"], /* CJK Ideograph */ + ["\u9240", "\u9240"], /* CJK Ideograph */ + ["\u9241", "\u9241"], /* CJK Ideograph */ + ["\u9242", "\u9242"], /* CJK Ideograph */ + ["\u9243", "\u9243"], /* CJK Ideograph */ + ["\u9244", "\u9244"], /* CJK Ideograph */ + ["\u9245", "\u9245"], /* CJK Ideograph */ + ["\u9246", "\u9246"], /* CJK Ideograph */ + ["\u9247", "\u9247"], /* CJK Ideograph */ + ["\u9248", "\u9248"], /* CJK Ideograph */ + ["\u9249", "\u9249"], /* CJK Ideograph */ + ["\u924A", "\u924A"], /* CJK Ideograph */ + ["\u924B", "\u924B"], /* CJK Ideograph */ + ["\u924C", "\u924C"], /* CJK Ideograph */ + ["\u924D", "\u924D"], /* CJK Ideograph */ + ["\u924E", "\u924E"], /* CJK Ideograph */ + ["\u924F", "\u924F"], /* CJK Ideograph */ + ["\u9250", "\u9250"], /* CJK Ideograph */ + ["\u9251", "\u9251"], /* CJK Ideograph */ + ["\u9252", "\u9252"], /* CJK Ideograph */ + ["\u9253", "\u9253"], /* CJK Ideograph */ + ["\u9254", "\u9254"], /* CJK Ideograph */ + ["\u9255", "\u9255"], /* CJK Ideograph */ + ["\u9256", "\u9256"], /* CJK Ideograph */ + ["\u9257", "\u9257"], /* CJK Ideograph */ + ["\u9258", "\u9258"], /* CJK Ideograph */ + ["\u9259", "\u9259"], /* CJK Ideograph */ + ["\u925A", "\u925A"], /* CJK Ideograph */ + ["\u925B", "\u925B"], /* CJK Ideograph */ + ["\u925C", "\u925C"], /* CJK Ideograph */ + ["\u925D", "\u925D"], /* CJK Ideograph */ + ["\u925E", "\u925E"], /* CJK Ideograph */ + ["\u925F", "\u925F"], /* CJK Ideograph */ + ["\u9260", "\u9260"], /* CJK Ideograph */ + ["\u9261", "\u9261"], /* CJK Ideograph */ + ["\u9262", "\u9262"], /* CJK Ideograph */ + ["\u9263", "\u9263"], /* CJK Ideograph */ + ["\u9264", "\u9264"], /* CJK Ideograph */ + ["\u9265", "\u9265"], /* CJK Ideograph */ + ["\u9266", "\u9266"], /* CJK Ideograph */ + ["\u9267", "\u9267"], /* CJK Ideograph */ + ["\u9268", "\u9268"], /* CJK Ideograph */ + ["\u9269", "\u9269"], /* CJK Ideograph */ + ["\u926A", "\u926A"], /* CJK Ideograph */ + ["\u926B", "\u926B"], /* CJK Ideograph */ + ["\u926C", "\u926C"], /* CJK Ideograph */ + ["\u926D", "\u926D"], /* CJK Ideograph */ + ["\u926E", "\u926E"], /* CJK Ideograph */ + ["\u926F", "\u926F"], /* CJK Ideograph */ + ["\u9270", "\u9270"], /* CJK Ideograph */ + ["\u9271", "\u9271"], /* CJK Ideograph */ + ["\u9272", "\u9272"], /* CJK Ideograph */ + ["\u9273", "\u9273"], /* CJK Ideograph */ + ["\u9274", "\u9274"], /* CJK Ideograph */ + ["\u9275", "\u9275"], /* CJK Ideograph */ + ["\u9276", "\u9276"], /* CJK Ideograph */ + ["\u9277", "\u9277"], /* CJK Ideograph */ + ["\u9278", "\u9278"], /* CJK Ideograph */ + ["\u9279", "\u9279"], /* CJK Ideograph */ + ["\u927A", "\u927A"], /* CJK Ideograph */ + ["\u927B", "\u927B"], /* CJK Ideograph */ + ["\u927C", "\u927C"], /* CJK Ideograph */ + ["\u927D", "\u927D"], /* CJK Ideograph */ + ["\u927E", "\u927E"], /* CJK Ideograph */ + ["\u927F", "\u927F"], /* CJK Ideograph */ + ["\u9280", "\u9280"], /* CJK Ideograph */ + ["\u9281", "\u9281"], /* CJK Ideograph */ + ["\u9282", "\u9282"], /* CJK Ideograph */ + ["\u9283", "\u9283"], /* CJK Ideograph */ + ["\u9284", "\u9284"], /* CJK Ideograph */ + ["\u9285", "\u9285"], /* CJK Ideograph */ + ["\u9286", "\u9286"], /* CJK Ideograph */ + ["\u9287", "\u9287"], /* CJK Ideograph */ + ["\u9288", "\u9288"], /* CJK Ideograph */ + ["\u9289", "\u9289"], /* CJK Ideograph */ + ["\u928A", "\u928A"], /* CJK Ideograph */ + ["\u928B", "\u928B"], /* CJK Ideograph */ + ["\u928C", "\u928C"], /* CJK Ideograph */ + ["\u928D", "\u928D"], /* CJK Ideograph */ + ["\u928E", "\u928E"], /* CJK Ideograph */ + ["\u928F", "\u928F"], /* CJK Ideograph */ + ["\u9290", "\u9290"], /* CJK Ideograph */ + ["\u9291", "\u9291"], /* CJK Ideograph */ + ["\u9292", "\u9292"], /* CJK Ideograph */ + ["\u9293", "\u9293"], /* CJK Ideograph */ + ["\u9294", "\u9294"], /* CJK Ideograph */ + ["\u9295", "\u9295"], /* CJK Ideograph */ + ["\u9296", "\u9296"], /* CJK Ideograph */ + ["\u9297", "\u9297"], /* CJK Ideograph */ + ["\u9298", "\u9298"], /* CJK Ideograph */ + ["\u9299", "\u9299"], /* CJK Ideograph */ + ["\u929A", "\u929A"], /* CJK Ideograph */ + ["\u929B", "\u929B"], /* CJK Ideograph */ + ["\u929C", "\u929C"], /* CJK Ideograph */ + ["\u929D", "\u929D"], /* CJK Ideograph */ + ["\u929E", "\u929E"], /* CJK Ideograph */ + ["\u929F", "\u929F"], /* CJK Ideograph */ + ["\u92A0", "\u92A0"], /* CJK Ideograph */ + ["\u92A1", "\u92A1"], /* CJK Ideograph */ + ["\u92A2", "\u92A2"], /* CJK Ideograph */ + ["\u92A3", "\u92A3"], /* CJK Ideograph */ + ["\u92A4", "\u92A4"], /* CJK Ideograph */ + ["\u92A5", "\u92A5"], /* CJK Ideograph */ + ["\u92A6", "\u92A6"], /* CJK Ideograph */ + ["\u92A7", "\u92A7"], /* CJK Ideograph */ + ["\u92A8", "\u92A8"], /* CJK Ideograph */ + ["\u92A9", "\u92A9"], /* CJK Ideograph */ + ["\u92AA", "\u92AA"], /* CJK Ideograph */ + ["\u92AB", "\u92AB"], /* CJK Ideograph */ + ["\u92AC", "\u92AC"], /* CJK Ideograph */ + ["\u92AD", "\u92AD"], /* CJK Ideograph */ + ["\u92AE", "\u92AE"], /* CJK Ideograph */ + ["\u92AF", "\u92AF"], /* CJK Ideograph */ + ["\u92B0", "\u92B0"], /* CJK Ideograph */ + ["\u92B1", "\u92B1"], /* CJK Ideograph */ + ["\u92B2", "\u92B2"], /* CJK Ideograph */ + ["\u92B3", "\u92B3"], /* CJK Ideograph */ + ["\u92B4", "\u92B4"], /* CJK Ideograph */ + ["\u92B5", "\u92B5"], /* CJK Ideograph */ + ["\u92B6", "\u92B6"], /* CJK Ideograph */ + ["\u92B7", "\u92B7"], /* CJK Ideograph */ + ["\u92B8", "\u92B8"], /* CJK Ideograph */ + ["\u92B9", "\u92B9"], /* CJK Ideograph */ + ["\u92BA", "\u92BA"], /* CJK Ideograph */ + ["\u92BB", "\u92BB"], /* CJK Ideograph */ + ["\u92BC", "\u92BC"], /* CJK Ideograph */ + ["\u92BD", "\u92BD"], /* CJK Ideograph */ + ["\u92BE", "\u92BE"], /* CJK Ideograph */ + ["\u92BF", "\u92BF"], /* CJK Ideograph */ + ["\u92C0", "\u92C0"], /* CJK Ideograph */ + ["\u92C1", "\u92C1"], /* CJK Ideograph */ + ["\u92C2", "\u92C2"], /* CJK Ideograph */ + ["\u92C3", "\u92C3"], /* CJK Ideograph */ + ["\u92C4", "\u92C4"], /* CJK Ideograph */ + ["\u92C5", "\u92C5"], /* CJK Ideograph */ + ["\u92C6", "\u92C6"], /* CJK Ideograph */ + ["\u92C7", "\u92C7"], /* CJK Ideograph */ + ["\u92C8", "\u92C8"], /* CJK Ideograph */ + ["\u92C9", "\u92C9"], /* CJK Ideograph */ + ["\u92CA", "\u92CA"], /* CJK Ideograph */ + ["\u92CB", "\u92CB"], /* CJK Ideograph */ + ["\u92CC", "\u92CC"], /* CJK Ideograph */ + ["\u92CD", "\u92CD"], /* CJK Ideograph */ + ["\u92CE", "\u92CE"], /* CJK Ideograph */ + ["\u92CF", "\u92CF"], /* CJK Ideograph */ + ["\u92D0", "\u92D0"], /* CJK Ideograph */ + ["\u92D1", "\u92D1"], /* CJK Ideograph */ + ["\u92D2", "\u92D2"], /* CJK Ideograph */ + ["\u92D3", "\u92D3"], /* CJK Ideograph */ + ["\u92D4", "\u92D4"], /* CJK Ideograph */ + ["\u92D5", "\u92D5"], /* CJK Ideograph */ + ["\u92D6", "\u92D6"], /* CJK Ideograph */ + ["\u92D7", "\u92D7"], /* CJK Ideograph */ + ["\u92D8", "\u92D8"], /* CJK Ideograph */ + ["\u92D9", "\u92D9"], /* CJK Ideograph */ + ["\u92DA", "\u92DA"], /* CJK Ideograph */ + ["\u92DB", "\u92DB"], /* CJK Ideograph */ + ["\u92DC", "\u92DC"], /* CJK Ideograph */ + ["\u92DD", "\u92DD"], /* CJK Ideograph */ + ["\u92DE", "\u92DE"], /* CJK Ideograph */ + ["\u92DF", "\u92DF"], /* CJK Ideograph */ + ["\u92E0", "\u92E0"], /* CJK Ideograph */ + ["\u92E1", "\u92E1"], /* CJK Ideograph */ + ["\u92E2", "\u92E2"], /* CJK Ideograph */ + ["\u92E3", "\u92E3"], /* CJK Ideograph */ + ["\u92E4", "\u92E4"], /* CJK Ideograph */ + ["\u92E5", "\u92E5"], /* CJK Ideograph */ + ["\u92E6", "\u92E6"], /* CJK Ideograph */ + ["\u92E7", "\u92E7"], /* CJK Ideograph */ + ["\u92E8", "\u92E8"], /* CJK Ideograph */ + ["\u92E9", "\u92E9"], /* CJK Ideograph */ + ["\u92EA", "\u92EA"], /* CJK Ideograph */ + ["\u92EB", "\u92EB"], /* CJK Ideograph */ + ["\u92EC", "\u92EC"], /* CJK Ideograph */ + ["\u92ED", "\u92ED"], /* CJK Ideograph */ + ["\u92EE", "\u92EE"], /* CJK Ideograph */ + ["\u92EF", "\u92EF"], /* CJK Ideograph */ + ["\u92F0", "\u92F0"], /* CJK Ideograph */ + ["\u92F1", "\u92F1"], /* CJK Ideograph */ + ["\u92F2", "\u92F2"], /* CJK Ideograph */ + ["\u92F3", "\u92F3"], /* CJK Ideograph */ + ["\u92F4", "\u92F4"], /* CJK Ideograph */ + ["\u92F5", "\u92F5"], /* CJK Ideograph */ + ["\u92F6", "\u92F6"], /* CJK Ideograph */ + ["\u92F7", "\u92F7"], /* CJK Ideograph */ + ["\u92F8", "\u92F8"], /* CJK Ideograph */ + ["\u92F9", "\u92F9"], /* CJK Ideograph */ + ["\u92FA", "\u92FA"], /* CJK Ideograph */ + ["\u92FB", "\u92FB"], /* CJK Ideograph */ + ["\u92FC", "\u92FC"], /* CJK Ideograph */ + ["\u92FD", "\u92FD"], /* CJK Ideograph */ + ["\u92FE", "\u92FE"], /* CJK Ideograph */ + ["\u92FF", "\u92FF"], /* CJK Ideograph */ + ["\u9300", "\u9300"], /* CJK Ideograph */ + ["\u9301", "\u9301"], /* CJK Ideograph */ + ["\u9302", "\u9302"], /* CJK Ideograph */ + ["\u9303", "\u9303"], /* CJK Ideograph */ + ["\u9304", "\u9304"], /* CJK Ideograph */ + ["\u9305", "\u9305"], /* CJK Ideograph */ + ["\u9306", "\u9306"], /* CJK Ideograph */ + ["\u9307", "\u9307"], /* CJK Ideograph */ + ["\u9308", "\u9308"], /* CJK Ideograph */ + ["\u9309", "\u9309"], /* CJK Ideograph */ + ["\u930A", "\u930A"], /* CJK Ideograph */ + ["\u930B", "\u930B"], /* CJK Ideograph */ + ["\u930C", "\u930C"], /* CJK Ideograph */ + ["\u930D", "\u930D"], /* CJK Ideograph */ + ["\u930E", "\u930E"], /* CJK Ideograph */ + ["\u930F", "\u930F"], /* CJK Ideograph */ + ["\u9310", "\u9310"], /* CJK Ideograph */ + ["\u9311", "\u9311"], /* CJK Ideograph */ + ["\u9312", "\u9312"], /* CJK Ideograph */ + ["\u9313", "\u9313"], /* CJK Ideograph */ + ["\u9314", "\u9314"], /* CJK Ideograph */ + ["\u9315", "\u9315"], /* CJK Ideograph */ + ["\u9316", "\u9316"], /* CJK Ideograph */ + ["\u9317", "\u9317"], /* CJK Ideograph */ + ["\u9318", "\u9318"], /* CJK Ideograph */ + ["\u9319", "\u9319"], /* CJK Ideograph */ + ["\u931A", "\u931A"], /* CJK Ideograph */ + ["\u931B", "\u931B"], /* CJK Ideograph */ + ["\u931C", "\u931C"], /* CJK Ideograph */ + ["\u931D", "\u931D"], /* CJK Ideograph */ + ["\u931E", "\u931E"], /* CJK Ideograph */ + ["\u931F", "\u931F"], /* CJK Ideograph */ + ["\u9320", "\u9320"], /* CJK Ideograph */ + ["\u9321", "\u9321"], /* CJK Ideograph */ + ["\u9322", "\u9322"], /* CJK Ideograph */ + ["\u9323", "\u9323"], /* CJK Ideograph */ + ["\u9324", "\u9324"], /* CJK Ideograph */ + ["\u9325", "\u9325"], /* CJK Ideograph */ + ["\u9326", "\u9326"], /* CJK Ideograph */ + ["\u9327", "\u9327"], /* CJK Ideograph */ + ["\u9328", "\u9328"], /* CJK Ideograph */ + ["\u9329", "\u9329"], /* CJK Ideograph */ + ["\u932A", "\u932A"], /* CJK Ideograph */ + ["\u932B", "\u932B"], /* CJK Ideograph */ + ["\u932C", "\u932C"], /* CJK Ideograph */ + ["\u932D", "\u932D"], /* CJK Ideograph */ + ["\u932E", "\u932E"], /* CJK Ideograph */ + ["\u932F", "\u932F"], /* CJK Ideograph */ + ["\u9330", "\u9330"], /* CJK Ideograph */ + ["\u9331", "\u9331"], /* CJK Ideograph */ + ["\u9332", "\u9332"], /* CJK Ideograph */ + ["\u9333", "\u9333"], /* CJK Ideograph */ + ["\u9334", "\u9334"], /* CJK Ideograph */ + ["\u9335", "\u9335"], /* CJK Ideograph */ + ["\u9336", "\u9336"], /* CJK Ideograph */ + ["\u9337", "\u9337"], /* CJK Ideograph */ + ["\u9338", "\u9338"], /* CJK Ideograph */ + ["\u9339", "\u9339"], /* CJK Ideograph */ + ["\u933A", "\u933A"], /* CJK Ideograph */ + ["\u933B", "\u933B"], /* CJK Ideograph */ + ["\u933C", "\u933C"], /* CJK Ideograph */ + ["\u933D", "\u933D"], /* CJK Ideograph */ + ["\u933E", "\u933E"], /* CJK Ideograph */ + ["\u933F", "\u933F"], /* CJK Ideograph */ + ["\u9340", "\u9340"], /* CJK Ideograph */ + ["\u9341", "\u9341"], /* CJK Ideograph */ + ["\u9342", "\u9342"], /* CJK Ideograph */ + ["\u9343", "\u9343"], /* CJK Ideograph */ + ["\u9344", "\u9344"], /* CJK Ideograph */ + ["\u9345", "\u9345"], /* CJK Ideograph */ + ["\u9346", "\u9346"], /* CJK Ideograph */ + ["\u9347", "\u9347"], /* CJK Ideograph */ + ["\u9348", "\u9348"], /* CJK Ideograph */ + ["\u9349", "\u9349"], /* CJK Ideograph */ + ["\u934A", "\u934A"], /* CJK Ideograph */ + ["\u934B", "\u934B"], /* CJK Ideograph */ + ["\u934C", "\u934C"], /* CJK Ideograph */ + ["\u934D", "\u934D"], /* CJK Ideograph */ + ["\u934E", "\u934E"], /* CJK Ideograph */ + ["\u934F", "\u934F"], /* CJK Ideograph */ + ["\u9350", "\u9350"], /* CJK Ideograph */ + ["\u9351", "\u9351"], /* CJK Ideograph */ + ["\u9352", "\u9352"], /* CJK Ideograph */ + ["\u9353", "\u9353"], /* CJK Ideograph */ + ["\u9354", "\u9354"], /* CJK Ideograph */ + ["\u9355", "\u9355"], /* CJK Ideograph */ + ["\u9356", "\u9356"], /* CJK Ideograph */ + ["\u9357", "\u9357"], /* CJK Ideograph */ + ["\u9358", "\u9358"], /* CJK Ideograph */ + ["\u9359", "\u9359"], /* CJK Ideograph */ + ["\u935A", "\u935A"], /* CJK Ideograph */ + ["\u935B", "\u935B"], /* CJK Ideograph */ + ["\u935C", "\u935C"], /* CJK Ideograph */ + ["\u935D", "\u935D"], /* CJK Ideograph */ + ["\u935E", "\u935E"], /* CJK Ideograph */ + ["\u935F", "\u935F"], /* CJK Ideograph */ + ["\u9360", "\u9360"], /* CJK Ideograph */ + ["\u9361", "\u9361"], /* CJK Ideograph */ + ["\u9362", "\u9362"], /* CJK Ideograph */ + ["\u9363", "\u9363"], /* CJK Ideograph */ + ["\u9364", "\u9364"], /* CJK Ideograph */ + ["\u9365", "\u9365"], /* CJK Ideograph */ + ["\u9366", "\u9366"], /* CJK Ideograph */ + ["\u9367", "\u9367"], /* CJK Ideograph */ + ["\u9368", "\u9368"], /* CJK Ideograph */ + ["\u9369", "\u9369"], /* CJK Ideograph */ + ["\u936A", "\u936A"], /* CJK Ideograph */ + ["\u936B", "\u936B"], /* CJK Ideograph */ + ["\u936C", "\u936C"], /* CJK Ideograph */ + ["\u936D", "\u936D"], /* CJK Ideograph */ + ["\u936E", "\u936E"], /* CJK Ideograph */ + ["\u936F", "\u936F"], /* CJK Ideograph */ + ["\u9370", "\u9370"], /* CJK Ideograph */ + ["\u9371", "\u9371"], /* CJK Ideograph */ + ["\u9372", "\u9372"], /* CJK Ideograph */ + ["\u9373", "\u9373"], /* CJK Ideograph */ + ["\u9374", "\u9374"], /* CJK Ideograph */ + ["\u9375", "\u9375"], /* CJK Ideograph */ + ["\u9376", "\u9376"], /* CJK Ideograph */ + ["\u9377", "\u9377"], /* CJK Ideograph */ + ["\u9378", "\u9378"], /* CJK Ideograph */ + ["\u9379", "\u9379"], /* CJK Ideograph */ + ["\u937A", "\u937A"], /* CJK Ideograph */ + ["\u937B", "\u937B"], /* CJK Ideograph */ + ["\u937C", "\u937C"], /* CJK Ideograph */ + ["\u937D", "\u937D"], /* CJK Ideograph */ + ["\u937E", "\u937E"], /* CJK Ideograph */ + ["\u937F", "\u937F"], /* CJK Ideograph */ + ["\u9380", "\u9380"], /* CJK Ideograph */ + ["\u9381", "\u9381"], /* CJK Ideograph */ + ["\u9382", "\u9382"], /* CJK Ideograph */ + ["\u9383", "\u9383"], /* CJK Ideograph */ + ["\u9384", "\u9384"], /* CJK Ideograph */ + ["\u9385", "\u9385"], /* CJK Ideograph */ + ["\u9386", "\u9386"], /* CJK Ideograph */ + ["\u9387", "\u9387"], /* CJK Ideograph */ + ["\u9388", "\u9388"], /* CJK Ideograph */ + ["\u9389", "\u9389"], /* CJK Ideograph */ + ["\u938A", "\u938A"], /* CJK Ideograph */ + ["\u938B", "\u938B"], /* CJK Ideograph */ + ["\u938C", "\u938C"], /* CJK Ideograph */ + ["\u938D", "\u938D"], /* CJK Ideograph */ + ["\u938E", "\u938E"], /* CJK Ideograph */ + ["\u938F", "\u938F"], /* CJK Ideograph */ + ["\u9390", "\u9390"], /* CJK Ideograph */ + ["\u9391", "\u9391"], /* CJK Ideograph */ + ["\u9392", "\u9392"], /* CJK Ideograph */ + ["\u9393", "\u9393"], /* CJK Ideograph */ + ["\u9394", "\u9394"], /* CJK Ideograph */ + ["\u9395", "\u9395"], /* CJK Ideograph */ + ["\u9396", "\u9396"], /* CJK Ideograph */ + ["\u9397", "\u9397"], /* CJK Ideograph */ + ["\u9398", "\u9398"], /* CJK Ideograph */ + ["\u9399", "\u9399"], /* CJK Ideograph */ + ["\u939A", "\u939A"], /* CJK Ideograph */ + ["\u939B", "\u939B"], /* CJK Ideograph */ + ["\u939C", "\u939C"], /* CJK Ideograph */ + ["\u939D", "\u939D"], /* CJK Ideograph */ + ["\u939E", "\u939E"], /* CJK Ideograph */ + ["\u939F", "\u939F"], /* CJK Ideograph */ + ["\u93A0", "\u93A0"], /* CJK Ideograph */ + ["\u93A1", "\u93A1"], /* CJK Ideograph */ + ["\u93A2", "\u93A2"], /* CJK Ideograph */ + ["\u93A3", "\u93A3"], /* CJK Ideograph */ + ["\u93A4", "\u93A4"], /* CJK Ideograph */ + ["\u93A5", "\u93A5"], /* CJK Ideograph */ + ["\u93A6", "\u93A6"], /* CJK Ideograph */ + ["\u93A7", "\u93A7"], /* CJK Ideograph */ + ["\u93A8", "\u93A8"], /* CJK Ideograph */ + ["\u93A9", "\u93A9"], /* CJK Ideograph */ + ["\u93AA", "\u93AA"], /* CJK Ideograph */ + ["\u93AB", "\u93AB"], /* CJK Ideograph */ + ["\u93AC", "\u93AC"], /* CJK Ideograph */ + ["\u93AD", "\u93AD"], /* CJK Ideograph */ + ["\u93AE", "\u93AE"], /* CJK Ideograph */ + ["\u93AF", "\u93AF"], /* CJK Ideograph */ + ["\u93B0", "\u93B0"], /* CJK Ideograph */ + ["\u93B1", "\u93B1"], /* CJK Ideograph */ + ["\u93B2", "\u93B2"], /* CJK Ideograph */ + ["\u93B3", "\u93B3"], /* CJK Ideograph */ + ["\u93B4", "\u93B4"], /* CJK Ideograph */ + ["\u93B5", "\u93B5"], /* CJK Ideograph */ + ["\u93B6", "\u93B6"], /* CJK Ideograph */ + ["\u93B7", "\u93B7"], /* CJK Ideograph */ + ["\u93B8", "\u93B8"], /* CJK Ideograph */ + ["\u93B9", "\u93B9"], /* CJK Ideograph */ + ["\u93BA", "\u93BA"], /* CJK Ideograph */ + ["\u93BB", "\u93BB"], /* CJK Ideograph */ + ["\u93BC", "\u93BC"], /* CJK Ideograph */ + ["\u93BD", "\u93BD"], /* CJK Ideograph */ + ["\u93BE", "\u93BE"], /* CJK Ideograph */ + ["\u93BF", "\u93BF"], /* CJK Ideograph */ + ["\u93C0", "\u93C0"], /* CJK Ideograph */ + ["\u93C1", "\u93C1"], /* CJK Ideograph */ + ["\u93C2", "\u93C2"], /* CJK Ideograph */ + ["\u93C3", "\u93C3"], /* CJK Ideograph */ + ["\u93C4", "\u93C4"], /* CJK Ideograph */ + ["\u93C5", "\u93C5"], /* CJK Ideograph */ + ["\u93C6", "\u93C6"], /* CJK Ideograph */ + ["\u93C7", "\u93C7"], /* CJK Ideograph */ + ["\u93C8", "\u93C8"], /* CJK Ideograph */ + ["\u93C9", "\u93C9"], /* CJK Ideograph */ + ["\u93CA", "\u93CA"], /* CJK Ideograph */ + ["\u93CB", "\u93CB"], /* CJK Ideograph */ + ["\u93CC", "\u93CC"], /* CJK Ideograph */ + ["\u93CD", "\u93CD"], /* CJK Ideograph */ + ["\u93CE", "\u93CE"], /* CJK Ideograph */ + ["\u93CF", "\u93CF"], /* CJK Ideograph */ + ["\u93D0", "\u93D0"], /* CJK Ideograph */ + ["\u93D1", "\u93D1"], /* CJK Ideograph */ + ["\u93D2", "\u93D2"], /* CJK Ideograph */ + ["\u93D3", "\u93D3"], /* CJK Ideograph */ + ["\u93D4", "\u93D4"], /* CJK Ideograph */ + ["\u93D5", "\u93D5"], /* CJK Ideograph */ + ["\u93D6", "\u93D6"], /* CJK Ideograph */ + ["\u93D7", "\u93D7"], /* CJK Ideograph */ + ["\u93D8", "\u93D8"], /* CJK Ideograph */ + ["\u93D9", "\u93D9"], /* CJK Ideograph */ + ["\u93DA", "\u93DA"], /* CJK Ideograph */ + ["\u93DB", "\u93DB"], /* CJK Ideograph */ + ["\u93DC", "\u93DC"], /* CJK Ideograph */ + ["\u93DD", "\u93DD"], /* CJK Ideograph */ + ["\u93DE", "\u93DE"], /* CJK Ideograph */ + ["\u93DF", "\u93DF"], /* CJK Ideograph */ + ["\u93E0", "\u93E0"], /* CJK Ideograph */ + ["\u93E1", "\u93E1"], /* CJK Ideograph */ + ["\u93E2", "\u93E2"], /* CJK Ideograph */ + ["\u93E3", "\u93E3"], /* CJK Ideograph */ + ["\u93E4", "\u93E4"], /* CJK Ideograph */ + ["\u93E5", "\u93E5"], /* CJK Ideograph */ + ["\u93E6", "\u93E6"], /* CJK Ideograph */ + ["\u93E7", "\u93E7"], /* CJK Ideograph */ + ["\u93E8", "\u93E8"], /* CJK Ideograph */ + ["\u93E9", "\u93E9"], /* CJK Ideograph */ + ["\u93EA", "\u93EA"], /* CJK Ideograph */ + ["\u93EB", "\u93EB"], /* CJK Ideograph */ + ["\u93EC", "\u93EC"], /* CJK Ideograph */ + ["\u93ED", "\u93ED"], /* CJK Ideograph */ + ["\u93EE", "\u93EE"], /* CJK Ideograph */ + ["\u93EF", "\u93EF"], /* CJK Ideograph */ + ["\u93F0", "\u93F0"], /* CJK Ideograph */ + ["\u93F1", "\u93F1"], /* CJK Ideograph */ + ["\u93F2", "\u93F2"], /* CJK Ideograph */ + ["\u93F3", "\u93F3"], /* CJK Ideograph */ + ["\u93F4", "\u93F4"], /* CJK Ideograph */ + ["\u93F5", "\u93F5"], /* CJK Ideograph */ + ["\u93F6", "\u93F6"], /* CJK Ideograph */ + ["\u93F7", "\u93F7"], /* CJK Ideograph */ + ["\u93F8", "\u93F8"], /* CJK Ideograph */ + ["\u93F9", "\u93F9"], /* CJK Ideograph */ + ["\u93FA", "\u93FA"], /* CJK Ideograph */ + ["\u93FB", "\u93FB"], /* CJK Ideograph */ + ["\u93FC", "\u93FC"], /* CJK Ideograph */ + ["\u93FD", "\u93FD"], /* CJK Ideograph */ + ["\u93FE", "\u93FE"], /* CJK Ideograph */ + ["\u93FF", "\u93FF"], /* CJK Ideograph */ + ["\u9400", "\u9400"], /* CJK Ideograph */ + ["\u9401", "\u9401"], /* CJK Ideograph */ + ["\u9402", "\u9402"], /* CJK Ideograph */ + ["\u9403", "\u9403"], /* CJK Ideograph */ + ["\u9404", "\u9404"], /* CJK Ideograph */ + ["\u9405", "\u9405"], /* CJK Ideograph */ + ["\u9406", "\u9406"], /* CJK Ideograph */ + ["\u9407", "\u9407"], /* CJK Ideograph */ + ["\u9408", "\u9408"], /* CJK Ideograph */ + ["\u9409", "\u9409"], /* CJK Ideograph */ + ["\u940A", "\u940A"], /* CJK Ideograph */ + ["\u940B", "\u940B"], /* CJK Ideograph */ + ["\u940C", "\u940C"], /* CJK Ideograph */ + ["\u940D", "\u940D"], /* CJK Ideograph */ + ["\u940E", "\u940E"], /* CJK Ideograph */ + ["\u940F", "\u940F"], /* CJK Ideograph */ + ["\u9410", "\u9410"], /* CJK Ideograph */ + ["\u9411", "\u9411"], /* CJK Ideograph */ + ["\u9412", "\u9412"], /* CJK Ideograph */ + ["\u9413", "\u9413"], /* CJK Ideograph */ + ["\u9414", "\u9414"], /* CJK Ideograph */ + ["\u9415", "\u9415"], /* CJK Ideograph */ + ["\u9416", "\u9416"], /* CJK Ideograph */ + ["\u9417", "\u9417"], /* CJK Ideograph */ + ["\u9418", "\u9418"], /* CJK Ideograph */ + ["\u9419", "\u9419"], /* CJK Ideograph */ + ["\u941A", "\u941A"], /* CJK Ideograph */ + ["\u941B", "\u941B"], /* CJK Ideograph */ + ["\u941C", "\u941C"], /* CJK Ideograph */ + ["\u941D", "\u941D"], /* CJK Ideograph */ + ["\u941E", "\u941E"], /* CJK Ideograph */ + ["\u941F", "\u941F"], /* CJK Ideograph */ + ["\u9420", "\u9420"], /* CJK Ideograph */ + ["\u9421", "\u9421"], /* CJK Ideograph */ + ["\u9422", "\u9422"], /* CJK Ideograph */ + ["\u9423", "\u9423"], /* CJK Ideograph */ + ["\u9424", "\u9424"], /* CJK Ideograph */ + ["\u9425", "\u9425"], /* CJK Ideograph */ + ["\u9426", "\u9426"], /* CJK Ideograph */ + ["\u9427", "\u9427"], /* CJK Ideograph */ + ["\u9428", "\u9428"], /* CJK Ideograph */ + ["\u9429", "\u9429"], /* CJK Ideograph */ + ["\u942A", "\u942A"], /* CJK Ideograph */ + ["\u942B", "\u942B"], /* CJK Ideograph */ + ["\u942C", "\u942C"], /* CJK Ideograph */ + ["\u942D", "\u942D"], /* CJK Ideograph */ + ["\u942E", "\u942E"], /* CJK Ideograph */ + ["\u942F", "\u942F"], /* CJK Ideograph */ + ["\u9430", "\u9430"], /* CJK Ideograph */ + ["\u9431", "\u9431"], /* CJK Ideograph */ + ["\u9432", "\u9432"], /* CJK Ideograph */ + ["\u9433", "\u9433"], /* CJK Ideograph */ + ["\u9434", "\u9434"], /* CJK Ideograph */ + ["\u9435", "\u9435"], /* CJK Ideograph */ + ["\u9436", "\u9436"], /* CJK Ideograph */ + ["\u9437", "\u9437"], /* CJK Ideograph */ + ["\u9438", "\u9438"], /* CJK Ideograph */ + ["\u9439", "\u9439"], /* CJK Ideograph */ + ["\u943A", "\u943A"], /* CJK Ideograph */ + ["\u943B", "\u943B"], /* CJK Ideograph */ + ["\u943C", "\u943C"], /* CJK Ideograph */ + ["\u943D", "\u943D"], /* CJK Ideograph */ + ["\u943E", "\u943E"], /* CJK Ideograph */ + ["\u943F", "\u943F"], /* CJK Ideograph */ + ["\u9440", "\u9440"], /* CJK Ideograph */ + ["\u9441", "\u9441"], /* CJK Ideograph */ + ["\u9442", "\u9442"], /* CJK Ideograph */ + ["\u9443", "\u9443"], /* CJK Ideograph */ + ["\u9444", "\u9444"], /* CJK Ideograph */ + ["\u9445", "\u9445"], /* CJK Ideograph */ + ["\u9446", "\u9446"], /* CJK Ideograph */ + ["\u9447", "\u9447"], /* CJK Ideograph */ + ["\u9448", "\u9448"], /* CJK Ideograph */ + ["\u9449", "\u9449"], /* CJK Ideograph */ + ["\u944A", "\u944A"], /* CJK Ideograph */ + ["\u944B", "\u944B"], /* CJK Ideograph */ + ["\u944C", "\u944C"], /* CJK Ideograph */ + ["\u944D", "\u944D"], /* CJK Ideograph */ + ["\u944E", "\u944E"], /* CJK Ideograph */ + ["\u944F", "\u944F"], /* CJK Ideograph */ + ["\u9450", "\u9450"], /* CJK Ideograph */ + ["\u9451", "\u9451"], /* CJK Ideograph */ + ["\u9452", "\u9452"], /* CJK Ideograph */ + ["\u9453", "\u9453"], /* CJK Ideograph */ + ["\u9454", "\u9454"], /* CJK Ideograph */ + ["\u9455", "\u9455"], /* CJK Ideograph */ + ["\u9456", "\u9456"], /* CJK Ideograph */ + ["\u9457", "\u9457"], /* CJK Ideograph */ + ["\u9458", "\u9458"], /* CJK Ideograph */ + ["\u9459", "\u9459"], /* CJK Ideograph */ + ["\u945A", "\u945A"], /* CJK Ideograph */ + ["\u945B", "\u945B"], /* CJK Ideograph */ + ["\u945C", "\u945C"], /* CJK Ideograph */ + ["\u945D", "\u945D"], /* CJK Ideograph */ + ["\u945E", "\u945E"], /* CJK Ideograph */ + ["\u945F", "\u945F"], /* CJK Ideograph */ + ["\u9460", "\u9460"], /* CJK Ideograph */ + ["\u9461", "\u9461"], /* CJK Ideograph */ + ["\u9462", "\u9462"], /* CJK Ideograph */ + ["\u9463", "\u9463"], /* CJK Ideograph */ + ["\u9464", "\u9464"], /* CJK Ideograph */ + ["\u9465", "\u9465"], /* CJK Ideograph */ + ["\u9466", "\u9466"], /* CJK Ideograph */ + ["\u9467", "\u9467"], /* CJK Ideograph */ + ["\u9468", "\u9468"], /* CJK Ideograph */ + ["\u9469", "\u9469"], /* CJK Ideograph */ + ["\u946A", "\u946A"], /* CJK Ideograph */ + ["\u946B", "\u946B"], /* CJK Ideograph */ + ["\u946C", "\u946C"], /* CJK Ideograph */ + ["\u946D", "\u946D"], /* CJK Ideograph */ + ["\u946E", "\u946E"], /* CJK Ideograph */ + ["\u946F", "\u946F"], /* CJK Ideograph */ + ["\u9470", "\u9470"], /* CJK Ideograph */ + ["\u9471", "\u9471"], /* CJK Ideograph */ + ["\u9472", "\u9472"], /* CJK Ideograph */ + ["\u9473", "\u9473"], /* CJK Ideograph */ + ["\u9474", "\u9474"], /* CJK Ideograph */ + ["\u9475", "\u9475"], /* CJK Ideograph */ + ["\u9476", "\u9476"], /* CJK Ideograph */ + ["\u9477", "\u9477"], /* CJK Ideograph */ + ["\u9478", "\u9478"], /* CJK Ideograph */ + ["\u9479", "\u9479"], /* CJK Ideograph */ + ["\u947A", "\u947A"], /* CJK Ideograph */ + ["\u947B", "\u947B"], /* CJK Ideograph */ + ["\u947C", "\u947C"], /* CJK Ideograph */ + ["\u947D", "\u947D"], /* CJK Ideograph */ + ["\u947E", "\u947E"], /* CJK Ideograph */ + ["\u947F", "\u947F"], /* CJK Ideograph */ + ["\u9480", "\u9480"], /* CJK Ideograph */ + ["\u9481", "\u9481"], /* CJK Ideograph */ + ["\u9482", "\u9482"], /* CJK Ideograph */ + ["\u9483", "\u9483"], /* CJK Ideograph */ + ["\u9484", "\u9484"], /* CJK Ideograph */ + ["\u9485", "\u9485"], /* CJK Ideograph */ + ["\u9486", "\u9486"], /* CJK Ideograph */ + ["\u9487", "\u9487"], /* CJK Ideograph */ + ["\u9488", "\u9488"], /* CJK Ideograph */ + ["\u9489", "\u9489"], /* CJK Ideograph */ + ["\u948A", "\u948A"], /* CJK Ideograph */ + ["\u948B", "\u948B"], /* CJK Ideograph */ + ["\u948C", "\u948C"], /* CJK Ideograph */ + ["\u948D", "\u948D"], /* CJK Ideograph */ + ["\u948E", "\u948E"], /* CJK Ideograph */ + ["\u948F", "\u948F"], /* CJK Ideograph */ + ["\u9490", "\u9490"], /* CJK Ideograph */ + ["\u9491", "\u9491"], /* CJK Ideograph */ + ["\u9492", "\u9492"], /* CJK Ideograph */ + ["\u9493", "\u9493"], /* CJK Ideograph */ + ["\u9494", "\u9494"], /* CJK Ideograph */ + ["\u9495", "\u9495"], /* CJK Ideograph */ + ["\u9496", "\u9496"], /* CJK Ideograph */ + ["\u9497", "\u9497"], /* CJK Ideograph */ + ["\u9498", "\u9498"], /* CJK Ideograph */ + ["\u9499", "\u9499"], /* CJK Ideograph */ + ["\u949A", "\u949A"], /* CJK Ideograph */ + ["\u949B", "\u949B"], /* CJK Ideograph */ + ["\u949C", "\u949C"], /* CJK Ideograph */ + ["\u949D", "\u949D"], /* CJK Ideograph */ + ["\u949E", "\u949E"], /* CJK Ideograph */ + ["\u949F", "\u949F"], /* CJK Ideograph */ + ["\u94A0", "\u94A0"], /* CJK Ideograph */ + ["\u94A1", "\u94A1"], /* CJK Ideograph */ + ["\u94A2", "\u94A2"], /* CJK Ideograph */ + ["\u94A3", "\u94A3"], /* CJK Ideograph */ + ["\u94A4", "\u94A4"], /* CJK Ideograph */ + ["\u94A5", "\u94A5"], /* CJK Ideograph */ + ["\u94A6", "\u94A6"], /* CJK Ideograph */ + ["\u94A7", "\u94A7"], /* CJK Ideograph */ + ["\u94A8", "\u94A8"], /* CJK Ideograph */ + ["\u94A9", "\u94A9"], /* CJK Ideograph */ + ["\u94AA", "\u94AA"], /* CJK Ideograph */ + ["\u94AB", "\u94AB"], /* CJK Ideograph */ + ["\u94AC", "\u94AC"], /* CJK Ideograph */ + ["\u94AD", "\u94AD"], /* CJK Ideograph */ + ["\u94AE", "\u94AE"], /* CJK Ideograph */ + ["\u94AF", "\u94AF"], /* CJK Ideograph */ + ["\u94B0", "\u94B0"], /* CJK Ideograph */ + ["\u94B1", "\u94B1"], /* CJK Ideograph */ + ["\u94B2", "\u94B2"], /* CJK Ideograph */ + ["\u94B3", "\u94B3"], /* CJK Ideograph */ + ["\u94B4", "\u94B4"], /* CJK Ideograph */ + ["\u94B5", "\u94B5"], /* CJK Ideograph */ + ["\u94B6", "\u94B6"], /* CJK Ideograph */ + ["\u94B7", "\u94B7"], /* CJK Ideograph */ + ["\u94B8", "\u94B8"], /* CJK Ideograph */ + ["\u94B9", "\u94B9"], /* CJK Ideograph */ + ["\u94BA", "\u94BA"], /* CJK Ideograph */ + ["\u94BB", "\u94BB"], /* CJK Ideograph */ + ["\u94BC", "\u94BC"], /* CJK Ideograph */ + ["\u94BD", "\u94BD"], /* CJK Ideograph */ + ["\u94BE", "\u94BE"], /* CJK Ideograph */ + ["\u94BF", "\u94BF"], /* CJK Ideograph */ + ["\u94C0", "\u94C0"], /* CJK Ideograph */ + ["\u94C1", "\u94C1"], /* CJK Ideograph */ + ["\u94C2", "\u94C2"], /* CJK Ideograph */ + ["\u94C3", "\u94C3"], /* CJK Ideograph */ + ["\u94C4", "\u94C4"], /* CJK Ideograph */ + ["\u94C5", "\u94C5"], /* CJK Ideograph */ + ["\u94C6", "\u94C6"], /* CJK Ideograph */ + ["\u94C7", "\u94C7"], /* CJK Ideograph */ + ["\u94C8", "\u94C8"], /* CJK Ideograph */ + ["\u94C9", "\u94C9"], /* CJK Ideograph */ + ["\u94CA", "\u94CA"], /* CJK Ideograph */ + ["\u94CB", "\u94CB"], /* CJK Ideograph */ + ["\u94CC", "\u94CC"], /* CJK Ideograph */ + ["\u94CD", "\u94CD"], /* CJK Ideograph */ + ["\u94CE", "\u94CE"], /* CJK Ideograph */ + ["\u94CF", "\u94CF"], /* CJK Ideograph */ + ["\u94D0", "\u94D0"], /* CJK Ideograph */ + ["\u94D1", "\u94D1"], /* CJK Ideograph */ + ["\u94D2", "\u94D2"], /* CJK Ideograph */ + ["\u94D3", "\u94D3"], /* CJK Ideograph */ + ["\u94D4", "\u94D4"], /* CJK Ideograph */ + ["\u94D5", "\u94D5"], /* CJK Ideograph */ + ["\u94D6", "\u94D6"], /* CJK Ideograph */ + ["\u94D7", "\u94D7"], /* CJK Ideograph */ + ["\u94D8", "\u94D8"], /* CJK Ideograph */ + ["\u94D9", "\u94D9"], /* CJK Ideograph */ + ["\u94DA", "\u94DA"], /* CJK Ideograph */ + ["\u94DB", "\u94DB"], /* CJK Ideograph */ + ["\u94DC", "\u94DC"], /* CJK Ideograph */ + ["\u94DD", "\u94DD"], /* CJK Ideograph */ + ["\u94DE", "\u94DE"], /* CJK Ideograph */ + ["\u94DF", "\u94DF"], /* CJK Ideograph */ + ["\u94E0", "\u94E0"], /* CJK Ideograph */ + ["\u94E1", "\u94E1"], /* CJK Ideograph */ + ["\u94E2", "\u94E2"], /* CJK Ideograph */ + ["\u94E3", "\u94E3"], /* CJK Ideograph */ + ["\u94E4", "\u94E4"], /* CJK Ideograph */ + ["\u94E5", "\u94E5"], /* CJK Ideograph */ + ["\u94E6", "\u94E6"], /* CJK Ideograph */ + ["\u94E7", "\u94E7"], /* CJK Ideograph */ + ["\u94E8", "\u94E8"], /* CJK Ideograph */ + ["\u94E9", "\u94E9"], /* CJK Ideograph */ + ["\u94EA", "\u94EA"], /* CJK Ideograph */ + ["\u94EB", "\u94EB"], /* CJK Ideograph */ + ["\u94EC", "\u94EC"], /* CJK Ideograph */ + ["\u94ED", "\u94ED"], /* CJK Ideograph */ + ["\u94EE", "\u94EE"], /* CJK Ideograph */ + ["\u94EF", "\u94EF"], /* CJK Ideograph */ + ["\u94F0", "\u94F0"], /* CJK Ideograph */ + ["\u94F1", "\u94F1"], /* CJK Ideograph */ + ["\u94F2", "\u94F2"], /* CJK Ideograph */ + ["\u94F3", "\u94F3"], /* CJK Ideograph */ + ["\u94F4", "\u94F4"], /* CJK Ideograph */ + ["\u94F5", "\u94F5"], /* CJK Ideograph */ + ["\u94F6", "\u94F6"], /* CJK Ideograph */ + ["\u94F7", "\u94F7"], /* CJK Ideograph */ + ["\u94F8", "\u94F8"], /* CJK Ideograph */ + ["\u94F9", "\u94F9"], /* CJK Ideograph */ + ["\u94FA", "\u94FA"], /* CJK Ideograph */ + ["\u94FB", "\u94FB"], /* CJK Ideograph */ + ["\u94FC", "\u94FC"], /* CJK Ideograph */ + ["\u94FD", "\u94FD"], /* CJK Ideograph */ + ["\u94FE", "\u94FE"], /* CJK Ideograph */ + ["\u94FF", "\u94FF"], /* CJK Ideograph */ + ["\u9500", "\u9500"], /* CJK Ideograph */ + ["\u9501", "\u9501"], /* CJK Ideograph */ + ["\u9502", "\u9502"], /* CJK Ideograph */ + ["\u9503", "\u9503"], /* CJK Ideograph */ + ["\u9504", "\u9504"], /* CJK Ideograph */ + ["\u9505", "\u9505"], /* CJK Ideograph */ + ["\u9506", "\u9506"], /* CJK Ideograph */ + ["\u9507", "\u9507"], /* CJK Ideograph */ + ["\u9508", "\u9508"], /* CJK Ideograph */ + ["\u9509", "\u9509"], /* CJK Ideograph */ + ["\u950A", "\u950A"], /* CJK Ideograph */ + ["\u950B", "\u950B"], /* CJK Ideograph */ + ["\u950C", "\u950C"], /* CJK Ideograph */ + ["\u950D", "\u950D"], /* CJK Ideograph */ + ["\u950E", "\u950E"], /* CJK Ideograph */ + ["\u950F", "\u950F"], /* CJK Ideograph */ + ["\u9510", "\u9510"], /* CJK Ideograph */ + ["\u9511", "\u9511"], /* CJK Ideograph */ + ["\u9512", "\u9512"], /* CJK Ideograph */ + ["\u9513", "\u9513"], /* CJK Ideograph */ + ["\u9514", "\u9514"], /* CJK Ideograph */ + ["\u9515", "\u9515"], /* CJK Ideograph */ + ["\u9516", "\u9516"], /* CJK Ideograph */ + ["\u9517", "\u9517"], /* CJK Ideograph */ + ["\u9518", "\u9518"], /* CJK Ideograph */ + ["\u9519", "\u9519"], /* CJK Ideograph */ + ["\u951A", "\u951A"], /* CJK Ideograph */ + ["\u951B", "\u951B"], /* CJK Ideograph */ + ["\u951C", "\u951C"], /* CJK Ideograph */ + ["\u951D", "\u951D"], /* CJK Ideograph */ + ["\u951E", "\u951E"], /* CJK Ideograph */ + ["\u951F", "\u951F"], /* CJK Ideograph */ + ["\u9520", "\u9520"], /* CJK Ideograph */ + ["\u9521", "\u9521"], /* CJK Ideograph */ + ["\u9522", "\u9522"], /* CJK Ideograph */ + ["\u9523", "\u9523"], /* CJK Ideograph */ + ["\u9524", "\u9524"], /* CJK Ideograph */ + ["\u9525", "\u9525"], /* CJK Ideograph */ + ["\u9526", "\u9526"], /* CJK Ideograph */ + ["\u9527", "\u9527"], /* CJK Ideograph */ + ["\u9528", "\u9528"], /* CJK Ideograph */ + ["\u9529", "\u9529"], /* CJK Ideograph */ + ["\u952A", "\u952A"], /* CJK Ideograph */ + ["\u952B", "\u952B"], /* CJK Ideograph */ + ["\u952C", "\u952C"], /* CJK Ideograph */ + ["\u952D", "\u952D"], /* CJK Ideograph */ + ["\u952E", "\u952E"], /* CJK Ideograph */ + ["\u952F", "\u952F"], /* CJK Ideograph */ + ["\u9530", "\u9530"], /* CJK Ideograph */ + ["\u9531", "\u9531"], /* CJK Ideograph */ + ["\u9532", "\u9532"], /* CJK Ideograph */ + ["\u9533", "\u9533"], /* CJK Ideograph */ + ["\u9534", "\u9534"], /* CJK Ideograph */ + ["\u9535", "\u9535"], /* CJK Ideograph */ + ["\u9536", "\u9536"], /* CJK Ideograph */ + ["\u9537", "\u9537"], /* CJK Ideograph */ + ["\u9538", "\u9538"], /* CJK Ideograph */ + ["\u9539", "\u9539"], /* CJK Ideograph */ + ["\u953A", "\u953A"], /* CJK Ideograph */ + ["\u953B", "\u953B"], /* CJK Ideograph */ + ["\u953C", "\u953C"], /* CJK Ideograph */ + ["\u953D", "\u953D"], /* CJK Ideograph */ + ["\u953E", "\u953E"], /* CJK Ideograph */ + ["\u953F", "\u953F"], /* CJK Ideograph */ + ["\u9540", "\u9540"], /* CJK Ideograph */ + ["\u9541", "\u9541"], /* CJK Ideograph */ + ["\u9542", "\u9542"], /* CJK Ideograph */ + ["\u9543", "\u9543"], /* CJK Ideograph */ + ["\u9544", "\u9544"], /* CJK Ideograph */ + ["\u9545", "\u9545"], /* CJK Ideograph */ + ["\u9546", "\u9546"], /* CJK Ideograph */ + ["\u9547", "\u9547"], /* CJK Ideograph */ + ["\u9548", "\u9548"], /* CJK Ideograph */ + ["\u9549", "\u9549"], /* CJK Ideograph */ + ["\u954A", "\u954A"], /* CJK Ideograph */ + ["\u954B", "\u954B"], /* CJK Ideograph */ + ["\u954C", "\u954C"], /* CJK Ideograph */ + ["\u954D", "\u954D"], /* CJK Ideograph */ + ["\u954E", "\u954E"], /* CJK Ideograph */ + ["\u954F", "\u954F"], /* CJK Ideograph */ + ["\u9550", "\u9550"], /* CJK Ideograph */ + ["\u9551", "\u9551"], /* CJK Ideograph */ + ["\u9552", "\u9552"], /* CJK Ideograph */ + ["\u9553", "\u9553"], /* CJK Ideograph */ + ["\u9554", "\u9554"], /* CJK Ideograph */ + ["\u9555", "\u9555"], /* CJK Ideograph */ + ["\u9556", "\u9556"], /* CJK Ideograph */ + ["\u9557", "\u9557"], /* CJK Ideograph */ + ["\u9558", "\u9558"], /* CJK Ideograph */ + ["\u9559", "\u9559"], /* CJK Ideograph */ + ["\u955A", "\u955A"], /* CJK Ideograph */ + ["\u955B", "\u955B"], /* CJK Ideograph */ + ["\u955C", "\u955C"], /* CJK Ideograph */ + ["\u955D", "\u955D"], /* CJK Ideograph */ + ["\u955E", "\u955E"], /* CJK Ideograph */ + ["\u955F", "\u955F"], /* CJK Ideograph */ + ["\u9560", "\u9560"], /* CJK Ideograph */ + ["\u9561", "\u9561"], /* CJK Ideograph */ + ["\u9562", "\u9562"], /* CJK Ideograph */ + ["\u9563", "\u9563"], /* CJK Ideograph */ + ["\u9564", "\u9564"], /* CJK Ideograph */ + ["\u9565", "\u9565"], /* CJK Ideograph */ + ["\u9566", "\u9566"], /* CJK Ideograph */ + ["\u9567", "\u9567"], /* CJK Ideograph */ + ["\u9568", "\u9568"], /* CJK Ideograph */ + ["\u9569", "\u9569"], /* CJK Ideograph */ + ["\u956A", "\u956A"], /* CJK Ideograph */ + ["\u956B", "\u956B"], /* CJK Ideograph */ + ["\u956C", "\u956C"], /* CJK Ideograph */ + ["\u956D", "\u956D"], /* CJK Ideograph */ + ["\u956E", "\u956E"], /* CJK Ideograph */ + ["\u956F", "\u956F"], /* CJK Ideograph */ + ["\u9570", "\u9570"], /* CJK Ideograph */ + ["\u9571", "\u9571"], /* CJK Ideograph */ + ["\u9572", "\u9572"], /* CJK Ideograph */ + ["\u9573", "\u9573"], /* CJK Ideograph */ + ["\u9574", "\u9574"], /* CJK Ideograph */ + ["\u9575", "\u9575"], /* CJK Ideograph */ + ["\u9576", "\u9576"], /* CJK Ideograph */ + ["\u9577", "\u9577"], /* CJK Ideograph */ + ["\u9578", "\u9578"], /* CJK Ideograph */ + ["\u9579", "\u9579"], /* CJK Ideograph */ + ["\u957A", "\u957A"], /* CJK Ideograph */ + ["\u957B", "\u957B"], /* CJK Ideograph */ + ["\u957C", "\u957C"], /* CJK Ideograph */ + ["\u957D", "\u957D"], /* CJK Ideograph */ + ["\u957E", "\u957E"], /* CJK Ideograph */ + ["\u957F", "\u957F"], /* CJK Ideograph */ + ["\u9580", "\u9580"], /* CJK Ideograph */ + ["\u9581", "\u9581"], /* CJK Ideograph */ + ["\u9582", "\u9582"], /* CJK Ideograph */ + ["\u9583", "\u9583"], /* CJK Ideograph */ + ["\u9584", "\u9584"], /* CJK Ideograph */ + ["\u9585", "\u9585"], /* CJK Ideograph */ + ["\u9586", "\u9586"], /* CJK Ideograph */ + ["\u9587", "\u9587"], /* CJK Ideograph */ + ["\u9588", "\u9588"], /* CJK Ideograph */ + ["\u9589", "\u9589"], /* CJK Ideograph */ + ["\u958A", "\u958A"], /* CJK Ideograph */ + ["\u958B", "\u958B"], /* CJK Ideograph */ + ["\u958C", "\u958C"], /* CJK Ideograph */ + ["\u958D", "\u958D"], /* CJK Ideograph */ + ["\u958E", "\u958E"], /* CJK Ideograph */ + ["\u958F", "\u958F"], /* CJK Ideograph */ + ["\u9590", "\u9590"], /* CJK Ideograph */ + ["\u9591", "\u9591"], /* CJK Ideograph */ + ["\u9592", "\u9592"], /* CJK Ideograph */ + ["\u9593", "\u9593"], /* CJK Ideograph */ + ["\u9594", "\u9594"], /* CJK Ideograph */ + ["\u9595", "\u9595"], /* CJK Ideograph */ + ["\u9596", "\u9596"], /* CJK Ideograph */ + ["\u9597", "\u9597"], /* CJK Ideograph */ + ["\u9598", "\u9598"], /* CJK Ideograph */ + ["\u9599", "\u9599"], /* CJK Ideograph */ + ["\u959A", "\u959A"], /* CJK Ideograph */ + ["\u959B", "\u959B"], /* CJK Ideograph */ + ["\u959C", "\u959C"], /* CJK Ideograph */ + ["\u959D", "\u959D"], /* CJK Ideograph */ + ["\u959E", "\u959E"], /* CJK Ideograph */ + ["\u959F", "\u959F"], /* CJK Ideograph */ + ["\u95A0", "\u95A0"], /* CJK Ideograph */ + ["\u95A1", "\u95A1"], /* CJK Ideograph */ + ["\u95A2", "\u95A2"], /* CJK Ideograph */ + ["\u95A3", "\u95A3"], /* CJK Ideograph */ + ["\u95A4", "\u95A4"], /* CJK Ideograph */ + ["\u95A5", "\u95A5"], /* CJK Ideograph */ + ["\u95A6", "\u95A6"], /* CJK Ideograph */ + ["\u95A7", "\u95A7"], /* CJK Ideograph */ + ["\u95A8", "\u95A8"], /* CJK Ideograph */ + ["\u95A9", "\u95A9"], /* CJK Ideograph */ + ["\u95AA", "\u95AA"], /* CJK Ideograph */ + ["\u95AB", "\u95AB"], /* CJK Ideograph */ + ["\u95AC", "\u95AC"], /* CJK Ideograph */ + ["\u95AD", "\u95AD"], /* CJK Ideograph */ + ["\u95AE", "\u95AE"], /* CJK Ideograph */ + ["\u95AF", "\u95AF"], /* CJK Ideograph */ + ["\u95B0", "\u95B0"], /* CJK Ideograph */ + ["\u95B1", "\u95B1"], /* CJK Ideograph */ + ["\u95B2", "\u95B2"], /* CJK Ideograph */ + ["\u95B3", "\u95B3"], /* CJK Ideograph */ + ["\u95B4", "\u95B4"], /* CJK Ideograph */ + ["\u95B5", "\u95B5"], /* CJK Ideograph */ + ["\u95B6", "\u95B6"], /* CJK Ideograph */ + ["\u95B7", "\u95B7"], /* CJK Ideograph */ + ["\u95B8", "\u95B8"], /* CJK Ideograph */ + ["\u95B9", "\u95B9"], /* CJK Ideograph */ + ["\u95BA", "\u95BA"], /* CJK Ideograph */ + ["\u95BB", "\u95BB"], /* CJK Ideograph */ + ["\u95BC", "\u95BC"], /* CJK Ideograph */ + ["\u95BD", "\u95BD"], /* CJK Ideograph */ + ["\u95BE", "\u95BE"], /* CJK Ideograph */ + ["\u95BF", "\u95BF"], /* CJK Ideograph */ + ["\u95C0", "\u95C0"], /* CJK Ideograph */ + ["\u95C1", "\u95C1"], /* CJK Ideograph */ + ["\u95C2", "\u95C2"], /* CJK Ideograph */ + ["\u95C3", "\u95C3"], /* CJK Ideograph */ + ["\u95C4", "\u95C4"], /* CJK Ideograph */ + ["\u95C5", "\u95C5"], /* CJK Ideograph */ + ["\u95C6", "\u95C6"], /* CJK Ideograph */ + ["\u95C7", "\u95C7"], /* CJK Ideograph */ + ["\u95C8", "\u95C8"], /* CJK Ideograph */ + ["\u95C9", "\u95C9"], /* CJK Ideograph */ + ["\u95CA", "\u95CA"], /* CJK Ideograph */ + ["\u95CB", "\u95CB"], /* CJK Ideograph */ + ["\u95CC", "\u95CC"], /* CJK Ideograph */ + ["\u95CD", "\u95CD"], /* CJK Ideograph */ + ["\u95CE", "\u95CE"], /* CJK Ideograph */ + ["\u95CF", "\u95CF"], /* CJK Ideograph */ + ["\u95D0", "\u95D0"], /* CJK Ideograph */ + ["\u95D1", "\u95D1"], /* CJK Ideograph */ + ["\u95D2", "\u95D2"], /* CJK Ideograph */ + ["\u95D3", "\u95D3"], /* CJK Ideograph */ + ["\u95D4", "\u95D4"], /* CJK Ideograph */ + ["\u95D5", "\u95D5"], /* CJK Ideograph */ + ["\u95D6", "\u95D6"], /* CJK Ideograph */ + ["\u95D7", "\u95D7"], /* CJK Ideograph */ + ["\u95D8", "\u95D8"], /* CJK Ideograph */ + ["\u95D9", "\u95D9"], /* CJK Ideograph */ + ["\u95DA", "\u95DA"], /* CJK Ideograph */ + ["\u95DB", "\u95DB"], /* CJK Ideograph */ + ["\u95DC", "\u95DC"], /* CJK Ideograph */ + ["\u95DD", "\u95DD"], /* CJK Ideograph */ + ["\u95DE", "\u95DE"], /* CJK Ideograph */ + ["\u95DF", "\u95DF"], /* CJK Ideograph */ + ["\u95E0", "\u95E0"], /* CJK Ideograph */ + ["\u95E1", "\u95E1"], /* CJK Ideograph */ + ["\u95E2", "\u95E2"], /* CJK Ideograph */ + ["\u95E3", "\u95E3"], /* CJK Ideograph */ + ["\u95E4", "\u95E4"], /* CJK Ideograph */ + ["\u95E5", "\u95E5"], /* CJK Ideograph */ + ["\u95E6", "\u95E6"], /* CJK Ideograph */ + ["\u95E7", "\u95E7"], /* CJK Ideograph */ + ["\u95E8", "\u95E8"], /* CJK Ideograph */ + ["\u95E9", "\u95E9"], /* CJK Ideograph */ + ["\u95EA", "\u95EA"], /* CJK Ideograph */ + ["\u95EB", "\u95EB"], /* CJK Ideograph */ + ["\u95EC", "\u95EC"], /* CJK Ideograph */ + ["\u95ED", "\u95ED"], /* CJK Ideograph */ + ["\u95EE", "\u95EE"], /* CJK Ideograph */ + ["\u95EF", "\u95EF"], /* CJK Ideograph */ + ["\u95F0", "\u95F0"], /* CJK Ideograph */ + ["\u95F1", "\u95F1"], /* CJK Ideograph */ + ["\u95F2", "\u95F2"], /* CJK Ideograph */ + ["\u95F3", "\u95F3"], /* CJK Ideograph */ + ["\u95F4", "\u95F4"], /* CJK Ideograph */ + ["\u95F5", "\u95F5"], /* CJK Ideograph */ + ["\u95F6", "\u95F6"], /* CJK Ideograph */ + ["\u95F7", "\u95F7"], /* CJK Ideograph */ + ["\u95F8", "\u95F8"], /* CJK Ideograph */ + ["\u95F9", "\u95F9"], /* CJK Ideograph */ + ["\u95FA", "\u95FA"], /* CJK Ideograph */ + ["\u95FB", "\u95FB"], /* CJK Ideograph */ + ["\u95FC", "\u95FC"], /* CJK Ideograph */ + ["\u95FD", "\u95FD"], /* CJK Ideograph */ + ["\u95FE", "\u95FE"], /* CJK Ideograph */ + ["\u95FF", "\u95FF"], /* CJK Ideograph */ + ["\u9600", "\u9600"], /* CJK Ideograph */ + ["\u9601", "\u9601"], /* CJK Ideograph */ + ["\u9602", "\u9602"], /* CJK Ideograph */ + ["\u9603", "\u9603"], /* CJK Ideograph */ + ["\u9604", "\u9604"], /* CJK Ideograph */ + ["\u9605", "\u9605"], /* CJK Ideograph */ + ["\u9606", "\u9606"], /* CJK Ideograph */ + ["\u9607", "\u9607"], /* CJK Ideograph */ + ["\u9608", "\u9608"], /* CJK Ideograph */ + ["\u9609", "\u9609"], /* CJK Ideograph */ + ["\u960A", "\u960A"], /* CJK Ideograph */ + ["\u960B", "\u960B"], /* CJK Ideograph */ + ["\u960C", "\u960C"], /* CJK Ideograph */ + ["\u960D", "\u960D"], /* CJK Ideograph */ + ["\u960E", "\u960E"], /* CJK Ideograph */ + ["\u960F", "\u960F"], /* CJK Ideograph */ + ["\u9610", "\u9610"], /* CJK Ideograph */ + ["\u9611", "\u9611"], /* CJK Ideograph */ + ["\u9612", "\u9612"], /* CJK Ideograph */ + ["\u9613", "\u9613"], /* CJK Ideograph */ + ["\u9614", "\u9614"], /* CJK Ideograph */ + ["\u9615", "\u9615"], /* CJK Ideograph */ + ["\u9616", "\u9616"], /* CJK Ideograph */ + ["\u9617", "\u9617"], /* CJK Ideograph */ + ["\u9618", "\u9618"], /* CJK Ideograph */ + ["\u9619", "\u9619"], /* CJK Ideograph */ + ["\u961A", "\u961A"], /* CJK Ideograph */ + ["\u961B", "\u961B"], /* CJK Ideograph */ + ["\u961C", "\u961C"], /* CJK Ideograph */ + ["\u961D", "\u961D"], /* CJK Ideograph */ + ["\u961E", "\u961E"], /* CJK Ideograph */ + ["\u961F", "\u961F"], /* CJK Ideograph */ + ["\u9620", "\u9620"], /* CJK Ideograph */ + ["\u9621", "\u9621"], /* CJK Ideograph */ + ["\u9622", "\u9622"], /* CJK Ideograph */ + ["\u9623", "\u9623"], /* CJK Ideograph */ + ["\u9624", "\u9624"], /* CJK Ideograph */ + ["\u9625", "\u9625"], /* CJK Ideograph */ + ["\u9626", "\u9626"], /* CJK Ideograph */ + ["\u9627", "\u9627"], /* CJK Ideograph */ + ["\u9628", "\u9628"], /* CJK Ideograph */ + ["\u9629", "\u9629"], /* CJK Ideograph */ + ["\u962A", "\u962A"], /* CJK Ideograph */ + ["\u962B", "\u962B"], /* CJK Ideograph */ + ["\u962C", "\u962C"], /* CJK Ideograph */ + ["\u962D", "\u962D"], /* CJK Ideograph */ + ["\u962E", "\u962E"], /* CJK Ideograph */ + ["\u962F", "\u962F"], /* CJK Ideograph */ + ["\u9630", "\u9630"], /* CJK Ideograph */ + ["\u9631", "\u9631"], /* CJK Ideograph */ + ["\u9632", "\u9632"], /* CJK Ideograph */ + ["\u9633", "\u9633"], /* CJK Ideograph */ + ["\u9634", "\u9634"], /* CJK Ideograph */ + ["\u9635", "\u9635"], /* CJK Ideograph */ + ["\u9636", "\u9636"], /* CJK Ideograph */ + ["\u9637", "\u9637"], /* CJK Ideograph */ + ["\u9638", "\u9638"], /* CJK Ideograph */ + ["\u9639", "\u9639"], /* CJK Ideograph */ + ["\u963A", "\u963A"], /* CJK Ideograph */ + ["\u963B", "\u963B"], /* CJK Ideograph */ + ["\u963C", "\u963C"], /* CJK Ideograph */ + ["\u963D", "\u963D"], /* CJK Ideograph */ + ["\u963E", "\u963E"], /* CJK Ideograph */ + ["\u963F", "\u963F"], /* CJK Ideograph */ + ["\u9640", "\u9640"], /* CJK Ideograph */ + ["\u9641", "\u9641"], /* CJK Ideograph */ + ["\u9642", "\u9642"], /* CJK Ideograph */ + ["\u9643", "\u9643"], /* CJK Ideograph */ + ["\u9644", "\u9644"], /* CJK Ideograph */ + ["\u9645", "\u9645"], /* CJK Ideograph */ + ["\u9646", "\u9646"], /* CJK Ideograph */ + ["\u9647", "\u9647"], /* CJK Ideograph */ + ["\u9648", "\u9648"], /* CJK Ideograph */ + ["\u9649", "\u9649"], /* CJK Ideograph */ + ["\u964A", "\u964A"], /* CJK Ideograph */ + ["\u964B", "\u964B"], /* CJK Ideograph */ + ["\u964C", "\u964C"], /* CJK Ideograph */ + ["\u964D", "\u964D"], /* CJK Ideograph */ + ["\u964E", "\u964E"], /* CJK Ideograph */ + ["\u964F", "\u964F"], /* CJK Ideograph */ + ["\u9650", "\u9650"], /* CJK Ideograph */ + ["\u9651", "\u9651"], /* CJK Ideograph */ + ["\u9652", "\u9652"], /* CJK Ideograph */ + ["\u9653", "\u9653"], /* CJK Ideograph */ + ["\u9654", "\u9654"], /* CJK Ideograph */ + ["\u9655", "\u9655"], /* CJK Ideograph */ + ["\u9656", "\u9656"], /* CJK Ideograph */ + ["\u9657", "\u9657"], /* CJK Ideograph */ + ["\u9658", "\u9658"], /* CJK Ideograph */ + ["\u9659", "\u9659"], /* CJK Ideograph */ + ["\u965A", "\u965A"], /* CJK Ideograph */ + ["\u965B", "\u965B"], /* CJK Ideograph */ + ["\u965C", "\u965C"], /* CJK Ideograph */ + ["\u965D", "\u965D"], /* CJK Ideograph */ + ["\u965E", "\u965E"], /* CJK Ideograph */ + ["\u965F", "\u965F"], /* CJK Ideograph */ + ["\u9660", "\u9660"], /* CJK Ideograph */ + ["\u9661", "\u9661"], /* CJK Ideograph */ + ["\u9662", "\u9662"], /* CJK Ideograph */ + ["\u9663", "\u9663"], /* CJK Ideograph */ + ["\u9664", "\u9664"], /* CJK Ideograph */ + ["\u9665", "\u9665"], /* CJK Ideograph */ + ["\u9666", "\u9666"], /* CJK Ideograph */ + ["\u9667", "\u9667"], /* CJK Ideograph */ + ["\u9668", "\u9668"], /* CJK Ideograph */ + ["\u9669", "\u9669"], /* CJK Ideograph */ + ["\u966A", "\u966A"], /* CJK Ideograph */ + ["\u966B", "\u966B"], /* CJK Ideograph */ + ["\u966C", "\u966C"], /* CJK Ideograph */ + ["\u966D", "\u966D"], /* CJK Ideograph */ + ["\u966E", "\u966E"], /* CJK Ideograph */ + ["\u966F", "\u966F"], /* CJK Ideograph */ + ["\u9670", "\u9670"], /* CJK Ideograph */ + ["\u9671", "\u9671"], /* CJK Ideograph */ + ["\u9672", "\u9672"], /* CJK Ideograph */ + ["\u9673", "\u9673"], /* CJK Ideograph */ + ["\u9674", "\u9674"], /* CJK Ideograph */ + ["\u9675", "\u9675"], /* CJK Ideograph */ + ["\u9676", "\u9676"], /* CJK Ideograph */ + ["\u9677", "\u9677"], /* CJK Ideograph */ + ["\u9678", "\u9678"], /* CJK Ideograph */ + ["\u9679", "\u9679"], /* CJK Ideograph */ + ["\u967A", "\u967A"], /* CJK Ideograph */ + ["\u967B", "\u967B"], /* CJK Ideograph */ + ["\u967C", "\u967C"], /* CJK Ideograph */ + ["\u967D", "\u967D"], /* CJK Ideograph */ + ["\u967E", "\u967E"], /* CJK Ideograph */ + ["\u967F", "\u967F"], /* CJK Ideograph */ + ["\u9680", "\u9680"], /* CJK Ideograph */ + ["\u9681", "\u9681"], /* CJK Ideograph */ + ["\u9682", "\u9682"], /* CJK Ideograph */ + ["\u9683", "\u9683"], /* CJK Ideograph */ + ["\u9684", "\u9684"], /* CJK Ideograph */ + ["\u9685", "\u9685"], /* CJK Ideograph */ + ["\u9686", "\u9686"], /* CJK Ideograph */ + ["\u9687", "\u9687"], /* CJK Ideograph */ + ["\u9688", "\u9688"], /* CJK Ideograph */ + ["\u9689", "\u9689"], /* CJK Ideograph */ + ["\u968A", "\u968A"], /* CJK Ideograph */ + ["\u968B", "\u968B"], /* CJK Ideograph */ + ["\u968C", "\u968C"], /* CJK Ideograph */ + ["\u968D", "\u968D"], /* CJK Ideograph */ + ["\u968E", "\u968E"], /* CJK Ideograph */ + ["\u968F", "\u968F"], /* CJK Ideograph */ + ["\u9690", "\u9690"], /* CJK Ideograph */ + ["\u9691", "\u9691"], /* CJK Ideograph */ + ["\u9692", "\u9692"], /* CJK Ideograph */ + ["\u9693", "\u9693"], /* CJK Ideograph */ + ["\u9694", "\u9694"], /* CJK Ideograph */ + ["\u9695", "\u9695"], /* CJK Ideograph */ + ["\u9696", "\u9696"], /* CJK Ideograph */ + ["\u9697", "\u9697"], /* CJK Ideograph */ + ["\u9698", "\u9698"], /* CJK Ideograph */ + ["\u9699", "\u9699"], /* CJK Ideograph */ + ["\u969A", "\u969A"], /* CJK Ideograph */ + ["\u969B", "\u969B"], /* CJK Ideograph */ + ["\u969C", "\u969C"], /* CJK Ideograph */ + ["\u969D", "\u969D"], /* CJK Ideograph */ + ["\u969E", "\u969E"], /* CJK Ideograph */ + ["\u969F", "\u969F"], /* CJK Ideograph */ + ["\u96A0", "\u96A0"], /* CJK Ideograph */ + ["\u96A1", "\u96A1"], /* CJK Ideograph */ + ["\u96A2", "\u96A2"], /* CJK Ideograph */ + ["\u96A3", "\u96A3"], /* CJK Ideograph */ + ["\u96A4", "\u96A4"], /* CJK Ideograph */ + ["\u96A5", "\u96A5"], /* CJK Ideograph */ + ["\u96A6", "\u96A6"], /* CJK Ideograph */ + ["\u96A7", "\u96A7"], /* CJK Ideograph */ + ["\u96A8", "\u96A8"], /* CJK Ideograph */ + ["\u96A9", "\u96A9"], /* CJK Ideograph */ + ["\u96AA", "\u96AA"], /* CJK Ideograph */ + ["\u96AB", "\u96AB"], /* CJK Ideograph */ + ["\u96AC", "\u96AC"], /* CJK Ideograph */ + ["\u96AD", "\u96AD"], /* CJK Ideograph */ + ["\u96AE", "\u96AE"], /* CJK Ideograph */ + ["\u96AF", "\u96AF"], /* CJK Ideograph */ + ["\u96B0", "\u96B0"], /* CJK Ideograph */ + ["\u96B1", "\u96B1"], /* CJK Ideograph */ + ["\u96B2", "\u96B2"], /* CJK Ideograph */ + ["\u96B3", "\u96B3"], /* CJK Ideograph */ + ["\u96B4", "\u96B4"], /* CJK Ideograph */ + ["\u96B5", "\u96B5"], /* CJK Ideograph */ + ["\u96B6", "\u96B6"], /* CJK Ideograph */ + ["\u96B7", "\u96B7"], /* CJK Ideograph */ + ["\u96B8", "\u96B8"], /* CJK Ideograph */ + ["\u96B9", "\u96B9"], /* CJK Ideograph */ + ["\u96BA", "\u96BA"], /* CJK Ideograph */ + ["\u96BB", "\u96BB"], /* CJK Ideograph */ + ["\u96BC", "\u96BC"], /* CJK Ideograph */ + ["\u96BD", "\u96BD"], /* CJK Ideograph */ + ["\u96BE", "\u96BE"], /* CJK Ideograph */ + ["\u96BF", "\u96BF"], /* CJK Ideograph */ + ["\u96C0", "\u96C0"], /* CJK Ideograph */ + ["\u96C1", "\u96C1"], /* CJK Ideograph */ + ["\u96C2", "\u96C2"], /* CJK Ideograph */ + ["\u96C3", "\u96C3"], /* CJK Ideograph */ + ["\u96C4", "\u96C4"], /* CJK Ideograph */ + ["\u96C5", "\u96C5"], /* CJK Ideograph */ + ["\u96C6", "\u96C6"], /* CJK Ideograph */ + ["\u96C7", "\u96C7"], /* CJK Ideograph */ + ["\u96C8", "\u96C8"], /* CJK Ideograph */ + ["\u96C9", "\u96C9"], /* CJK Ideograph */ + ["\u96CA", "\u96CA"], /* CJK Ideograph */ + ["\u96CB", "\u96CB"], /* CJK Ideograph */ + ["\u96CC", "\u96CC"], /* CJK Ideograph */ + ["\u96CD", "\u96CD"], /* CJK Ideograph */ + ["\u96CE", "\u96CE"], /* CJK Ideograph */ + ["\u96CF", "\u96CF"], /* CJK Ideograph */ + ["\u96D0", "\u96D0"], /* CJK Ideograph */ + ["\u96D1", "\u96D1"], /* CJK Ideograph */ + ["\u96D2", "\u96D2"], /* CJK Ideograph */ + ["\u96D3", "\u96D3"], /* CJK Ideograph */ + ["\u96D4", "\u96D4"], /* CJK Ideograph */ + ["\u96D5", "\u96D5"], /* CJK Ideograph */ + ["\u96D6", "\u96D6"], /* CJK Ideograph */ + ["\u96D7", "\u96D7"], /* CJK Ideograph */ + ["\u96D8", "\u96D8"], /* CJK Ideograph */ + ["\u96D9", "\u96D9"], /* CJK Ideograph */ + ["\u96DA", "\u96DA"], /* CJK Ideograph */ + ["\u96DB", "\u96DB"], /* CJK Ideograph */ + ["\u96DC", "\u96DC"], /* CJK Ideograph */ + ["\u96DD", "\u96DD"], /* CJK Ideograph */ + ["\u96DE", "\u96DE"], /* CJK Ideograph */ + ["\u96DF", "\u96DF"], /* CJK Ideograph */ + ["\u96E0", "\u96E0"], /* CJK Ideograph */ + ["\u96E1", "\u96E1"], /* CJK Ideograph */ + ["\u96E2", "\u96E2"], /* CJK Ideograph */ + ["\u96E3", "\u96E3"], /* CJK Ideograph */ + ["\u96E4", "\u96E4"], /* CJK Ideograph */ + ["\u96E5", "\u96E5"], /* CJK Ideograph */ + ["\u96E6", "\u96E6"], /* CJK Ideograph */ + ["\u96E7", "\u96E7"], /* CJK Ideograph */ + ["\u96E8", "\u96E8"], /* CJK Ideograph */ + ["\u96E9", "\u96E9"], /* CJK Ideograph */ + ["\u96EA", "\u96EA"], /* CJK Ideograph */ + ["\u96EB", "\u96EB"], /* CJK Ideograph */ + ["\u96EC", "\u96EC"], /* CJK Ideograph */ + ["\u96ED", "\u96ED"], /* CJK Ideograph */ + ["\u96EE", "\u96EE"], /* CJK Ideograph */ + ["\u96EF", "\u96EF"], /* CJK Ideograph */ + ["\u96F0", "\u96F0"], /* CJK Ideograph */ + ["\u96F1", "\u96F1"], /* CJK Ideograph */ + ["\u96F2", "\u96F2"], /* CJK Ideograph */ + ["\u96F3", "\u96F3"], /* CJK Ideograph */ + ["\u96F4", "\u96F4"], /* CJK Ideograph */ + ["\u96F5", "\u96F5"], /* CJK Ideograph */ + ["\u96F6", "\u96F6"], /* CJK Ideograph */ + ["\u96F7", "\u96F7"], /* CJK Ideograph */ + ["\u96F8", "\u96F8"], /* CJK Ideograph */ + ["\u96F9", "\u96F9"], /* CJK Ideograph */ + ["\u96FA", "\u96FA"], /* CJK Ideograph */ + ["\u96FB", "\u96FB"], /* CJK Ideograph */ + ["\u96FC", "\u96FC"], /* CJK Ideograph */ + ["\u96FD", "\u96FD"], /* CJK Ideograph */ + ["\u96FE", "\u96FE"], /* CJK Ideograph */ + ["\u96FF", "\u96FF"], /* CJK Ideograph */ + ["\u9700", "\u9700"], /* CJK Ideograph */ + ["\u9701", "\u9701"], /* CJK Ideograph */ + ["\u9702", "\u9702"], /* CJK Ideograph */ + ["\u9703", "\u9703"], /* CJK Ideograph */ + ["\u9704", "\u9704"], /* CJK Ideograph */ + ["\u9705", "\u9705"], /* CJK Ideograph */ + ["\u9706", "\u9706"], /* CJK Ideograph */ + ["\u9707", "\u9707"], /* CJK Ideograph */ + ["\u9708", "\u9708"], /* CJK Ideograph */ + ["\u9709", "\u9709"], /* CJK Ideograph */ + ["\u970A", "\u970A"], /* CJK Ideograph */ + ["\u970B", "\u970B"], /* CJK Ideograph */ + ["\u970C", "\u970C"], /* CJK Ideograph */ + ["\u970D", "\u970D"], /* CJK Ideograph */ + ["\u970E", "\u970E"], /* CJK Ideograph */ + ["\u970F", "\u970F"], /* CJK Ideograph */ + ["\u9710", "\u9710"], /* CJK Ideograph */ + ["\u9711", "\u9711"], /* CJK Ideograph */ + ["\u9712", "\u9712"], /* CJK Ideograph */ + ["\u9713", "\u9713"], /* CJK Ideograph */ + ["\u9714", "\u9714"], /* CJK Ideograph */ + ["\u9715", "\u9715"], /* CJK Ideograph */ + ["\u9716", "\u9716"], /* CJK Ideograph */ + ["\u9717", "\u9717"], /* CJK Ideograph */ + ["\u9718", "\u9718"], /* CJK Ideograph */ + ["\u9719", "\u9719"], /* CJK Ideograph */ + ["\u971A", "\u971A"], /* CJK Ideograph */ + ["\u971B", "\u971B"], /* CJK Ideograph */ + ["\u971C", "\u971C"], /* CJK Ideograph */ + ["\u971D", "\u971D"], /* CJK Ideograph */ + ["\u971E", "\u971E"], /* CJK Ideograph */ + ["\u971F", "\u971F"], /* CJK Ideograph */ + ["\u9720", "\u9720"], /* CJK Ideograph */ + ["\u9721", "\u9721"], /* CJK Ideograph */ + ["\u9722", "\u9722"], /* CJK Ideograph */ + ["\u9723", "\u9723"], /* CJK Ideograph */ + ["\u9724", "\u9724"], /* CJK Ideograph */ + ["\u9725", "\u9725"], /* CJK Ideograph */ + ["\u9726", "\u9726"], /* CJK Ideograph */ + ["\u9727", "\u9727"], /* CJK Ideograph */ + ["\u9728", "\u9728"], /* CJK Ideograph */ + ["\u9729", "\u9729"], /* CJK Ideograph */ + ["\u972A", "\u972A"], /* CJK Ideograph */ + ["\u972B", "\u972B"], /* CJK Ideograph */ + ["\u972C", "\u972C"], /* CJK Ideograph */ + ["\u972D", "\u972D"], /* CJK Ideograph */ + ["\u972E", "\u972E"], /* CJK Ideograph */ + ["\u972F", "\u972F"], /* CJK Ideograph */ + ["\u9730", "\u9730"], /* CJK Ideograph */ + ["\u9731", "\u9731"], /* CJK Ideograph */ + ["\u9732", "\u9732"], /* CJK Ideograph */ + ["\u9733", "\u9733"], /* CJK Ideograph */ + ["\u9734", "\u9734"], /* CJK Ideograph */ + ["\u9735", "\u9735"], /* CJK Ideograph */ + ["\u9736", "\u9736"], /* CJK Ideograph */ + ["\u9737", "\u9737"], /* CJK Ideograph */ + ["\u9738", "\u9738"], /* CJK Ideograph */ + ["\u9739", "\u9739"], /* CJK Ideograph */ + ["\u973A", "\u973A"], /* CJK Ideograph */ + ["\u973B", "\u973B"], /* CJK Ideograph */ + ["\u973C", "\u973C"], /* CJK Ideograph */ + ["\u973D", "\u973D"], /* CJK Ideograph */ + ["\u973E", "\u973E"], /* CJK Ideograph */ + ["\u973F", "\u973F"], /* CJK Ideograph */ + ["\u9740", "\u9740"], /* CJK Ideograph */ + ["\u9741", "\u9741"], /* CJK Ideograph */ + ["\u9742", "\u9742"], /* CJK Ideograph */ + ["\u9743", "\u9743"], /* CJK Ideograph */ + ["\u9744", "\u9744"], /* CJK Ideograph */ + ["\u9745", "\u9745"], /* CJK Ideograph */ + ["\u9746", "\u9746"], /* CJK Ideograph */ + ["\u9747", "\u9747"], /* CJK Ideograph */ + ["\u9748", "\u9748"], /* CJK Ideograph */ + ["\u9749", "\u9749"], /* CJK Ideograph */ + ["\u974A", "\u974A"], /* CJK Ideograph */ + ["\u974B", "\u974B"], /* CJK Ideograph */ + ["\u974C", "\u974C"], /* CJK Ideograph */ + ["\u974D", "\u974D"], /* CJK Ideograph */ + ["\u974E", "\u974E"], /* CJK Ideograph */ + ["\u974F", "\u974F"], /* CJK Ideograph */ + ["\u9750", "\u9750"], /* CJK Ideograph */ + ["\u9751", "\u9751"], /* CJK Ideograph */ + ["\u9752", "\u9752"], /* CJK Ideograph */ + ["\u9753", "\u9753"], /* CJK Ideograph */ + ["\u9754", "\u9754"], /* CJK Ideograph */ + ["\u9755", "\u9755"], /* CJK Ideograph */ + ["\u9756", "\u9756"], /* CJK Ideograph */ + ["\u9757", "\u9757"], /* CJK Ideograph */ + ["\u9758", "\u9758"], /* CJK Ideograph */ + ["\u9759", "\u9759"], /* CJK Ideograph */ + ["\u975A", "\u975A"], /* CJK Ideograph */ + ["\u975B", "\u975B"], /* CJK Ideograph */ + ["\u975C", "\u975C"], /* CJK Ideograph */ + ["\u975D", "\u975D"], /* CJK Ideograph */ + ["\u975E", "\u975E"], /* CJK Ideograph */ + ["\u975F", "\u975F"], /* CJK Ideograph */ + ["\u9760", "\u9760"], /* CJK Ideograph */ + ["\u9761", "\u9761"], /* CJK Ideograph */ + ["\u9762", "\u9762"], /* CJK Ideograph */ + ["\u9763", "\u9763"], /* CJK Ideograph */ + ["\u9764", "\u9764"], /* CJK Ideograph */ + ["\u9765", "\u9765"], /* CJK Ideograph */ + ["\u9766", "\u9766"], /* CJK Ideograph */ + ["\u9767", "\u9767"], /* CJK Ideograph */ + ["\u9768", "\u9768"], /* CJK Ideograph */ + ["\u9769", "\u9769"], /* CJK Ideograph */ + ["\u976A", "\u976A"], /* CJK Ideograph */ + ["\u976B", "\u976B"], /* CJK Ideograph */ + ["\u976C", "\u976C"], /* CJK Ideograph */ + ["\u976D", "\u976D"], /* CJK Ideograph */ + ["\u976E", "\u976E"], /* CJK Ideograph */ + ["\u976F", "\u976F"], /* CJK Ideograph */ + ["\u9770", "\u9770"], /* CJK Ideograph */ + ["\u9771", "\u9771"], /* CJK Ideograph */ + ["\u9772", "\u9772"], /* CJK Ideograph */ + ["\u9773", "\u9773"], /* CJK Ideograph */ + ["\u9774", "\u9774"], /* CJK Ideograph */ + ["\u9775", "\u9775"], /* CJK Ideograph */ + ["\u9776", "\u9776"], /* CJK Ideograph */ + ["\u9777", "\u9777"], /* CJK Ideograph */ + ["\u9778", "\u9778"], /* CJK Ideograph */ + ["\u9779", "\u9779"], /* CJK Ideograph */ + ["\u977A", "\u977A"], /* CJK Ideograph */ + ["\u977B", "\u977B"], /* CJK Ideograph */ + ["\u977C", "\u977C"], /* CJK Ideograph */ + ["\u977D", "\u977D"], /* CJK Ideograph */ + ["\u977E", "\u977E"], /* CJK Ideograph */ + ["\u977F", "\u977F"], /* CJK Ideograph */ + ["\u9780", "\u9780"], /* CJK Ideograph */ + ["\u9781", "\u9781"], /* CJK Ideograph */ + ["\u9782", "\u9782"], /* CJK Ideograph */ + ["\u9783", "\u9783"], /* CJK Ideograph */ + ["\u9784", "\u9784"], /* CJK Ideograph */ + ["\u9785", "\u9785"], /* CJK Ideograph */ + ["\u9786", "\u9786"], /* CJK Ideograph */ + ["\u9787", "\u9787"], /* CJK Ideograph */ + ["\u9788", "\u9788"], /* CJK Ideograph */ + ["\u9789", "\u9789"], /* CJK Ideograph */ + ["\u978A", "\u978A"], /* CJK Ideograph */ + ["\u978B", "\u978B"], /* CJK Ideograph */ + ["\u978C", "\u978C"], /* CJK Ideograph */ + ["\u978D", "\u978D"], /* CJK Ideograph */ + ["\u978E", "\u978E"], /* CJK Ideograph */ + ["\u978F", "\u978F"], /* CJK Ideograph */ + ["\u9790", "\u9790"], /* CJK Ideograph */ + ["\u9791", "\u9791"], /* CJK Ideograph */ + ["\u9792", "\u9792"], /* CJK Ideograph */ + ["\u9793", "\u9793"], /* CJK Ideograph */ + ["\u9794", "\u9794"], /* CJK Ideograph */ + ["\u9795", "\u9795"], /* CJK Ideograph */ + ["\u9796", "\u9796"], /* CJK Ideograph */ + ["\u9797", "\u9797"], /* CJK Ideograph */ + ["\u9798", "\u9798"], /* CJK Ideograph */ + ["\u9799", "\u9799"], /* CJK Ideograph */ + ["\u979A", "\u979A"], /* CJK Ideograph */ + ["\u979B", "\u979B"], /* CJK Ideograph */ + ["\u979C", "\u979C"], /* CJK Ideograph */ + ["\u979D", "\u979D"], /* CJK Ideograph */ + ["\u979E", "\u979E"], /* CJK Ideograph */ + ["\u979F", "\u979F"], /* CJK Ideograph */ + ["\u97A0", "\u97A0"], /* CJK Ideograph */ + ["\u97A1", "\u97A1"], /* CJK Ideograph */ + ["\u97A2", "\u97A2"], /* CJK Ideograph */ + ["\u97A3", "\u97A3"], /* CJK Ideograph */ + ["\u97A4", "\u97A4"], /* CJK Ideograph */ + ["\u97A5", "\u97A5"], /* CJK Ideograph */ + ["\u97A6", "\u97A6"], /* CJK Ideograph */ + ["\u97A7", "\u97A7"], /* CJK Ideograph */ + ["\u97A8", "\u97A8"], /* CJK Ideograph */ + ["\u97A9", "\u97A9"], /* CJK Ideograph */ + ["\u97AA", "\u97AA"], /* CJK Ideograph */ + ["\u97AB", "\u97AB"], /* CJK Ideograph */ + ["\u97AC", "\u97AC"], /* CJK Ideograph */ + ["\u97AD", "\u97AD"], /* CJK Ideograph */ + ["\u97AE", "\u97AE"], /* CJK Ideograph */ + ["\u97AF", "\u97AF"], /* CJK Ideograph */ + ["\u97B0", "\u97B0"], /* CJK Ideograph */ + ["\u97B1", "\u97B1"], /* CJK Ideograph */ + ["\u97B2", "\u97B2"], /* CJK Ideograph */ + ["\u97B3", "\u97B3"], /* CJK Ideograph */ + ["\u97B4", "\u97B4"], /* CJK Ideograph */ + ["\u97B5", "\u97B5"], /* CJK Ideograph */ + ["\u97B6", "\u97B6"], /* CJK Ideograph */ + ["\u97B7", "\u97B7"], /* CJK Ideograph */ + ["\u97B8", "\u97B8"], /* CJK Ideograph */ + ["\u97B9", "\u97B9"], /* CJK Ideograph */ + ["\u97BA", "\u97BA"], /* CJK Ideograph */ + ["\u97BB", "\u97BB"], /* CJK Ideograph */ + ["\u97BC", "\u97BC"], /* CJK Ideograph */ + ["\u97BD", "\u97BD"], /* CJK Ideograph */ + ["\u97BE", "\u97BE"], /* CJK Ideograph */ + ["\u97BF", "\u97BF"], /* CJK Ideograph */ + ["\u97C0", "\u97C0"], /* CJK Ideograph */ + ["\u97C1", "\u97C1"], /* CJK Ideograph */ + ["\u97C2", "\u97C2"], /* CJK Ideograph */ + ["\u97C3", "\u97C3"], /* CJK Ideograph */ + ["\u97C4", "\u97C4"], /* CJK Ideograph */ + ["\u97C5", "\u97C5"], /* CJK Ideograph */ + ["\u97C6", "\u97C6"], /* CJK Ideograph */ + ["\u97C7", "\u97C7"], /* CJK Ideograph */ + ["\u97C8", "\u97C8"], /* CJK Ideograph */ + ["\u97C9", "\u97C9"], /* CJK Ideograph */ + ["\u97CA", "\u97CA"], /* CJK Ideograph */ + ["\u97CB", "\u97CB"], /* CJK Ideograph */ + ["\u97CC", "\u97CC"], /* CJK Ideograph */ + ["\u97CD", "\u97CD"], /* CJK Ideograph */ + ["\u97CE", "\u97CE"], /* CJK Ideograph */ + ["\u97CF", "\u97CF"], /* CJK Ideograph */ + ["\u97D0", "\u97D0"], /* CJK Ideograph */ + ["\u97D1", "\u97D1"], /* CJK Ideograph */ + ["\u97D2", "\u97D2"], /* CJK Ideograph */ + ["\u97D3", "\u97D3"], /* CJK Ideograph */ + ["\u97D4", "\u97D4"], /* CJK Ideograph */ + ["\u97D5", "\u97D5"], /* CJK Ideograph */ + ["\u97D6", "\u97D6"], /* CJK Ideograph */ + ["\u97D7", "\u97D7"], /* CJK Ideograph */ + ["\u97D8", "\u97D8"], /* CJK Ideograph */ + ["\u97D9", "\u97D9"], /* CJK Ideograph */ + ["\u97DA", "\u97DA"], /* CJK Ideograph */ + ["\u97DB", "\u97DB"], /* CJK Ideograph */ + ["\u97DC", "\u97DC"], /* CJK Ideograph */ + ["\u97DD", "\u97DD"], /* CJK Ideograph */ + ["\u97DE", "\u97DE"], /* CJK Ideograph */ + ["\u97DF", "\u97DF"], /* CJK Ideograph */ + ["\u97E0", "\u97E0"], /* CJK Ideograph */ + ["\u97E1", "\u97E1"], /* CJK Ideograph */ + ["\u97E2", "\u97E2"], /* CJK Ideograph */ + ["\u97E3", "\u97E3"], /* CJK Ideograph */ + ["\u97E4", "\u97E4"], /* CJK Ideograph */ + ["\u97E5", "\u97E5"], /* CJK Ideograph */ + ["\u97E6", "\u97E6"], /* CJK Ideograph */ + ["\u97E7", "\u97E7"], /* CJK Ideograph */ + ["\u97E8", "\u97E8"], /* CJK Ideograph */ + ["\u97E9", "\u97E9"], /* CJK Ideograph */ + ["\u97EA", "\u97EA"], /* CJK Ideograph */ + ["\u97EB", "\u97EB"], /* CJK Ideograph */ + ["\u97EC", "\u97EC"], /* CJK Ideograph */ + ["\u97ED", "\u97ED"], /* CJK Ideograph */ + ["\u97EE", "\u97EE"], /* CJK Ideograph */ + ["\u97EF", "\u97EF"], /* CJK Ideograph */ + ["\u97F0", "\u97F0"], /* CJK Ideograph */ + ["\u97F1", "\u97F1"], /* CJK Ideograph */ + ["\u97F2", "\u97F2"], /* CJK Ideograph */ + ["\u97F3", "\u97F3"], /* CJK Ideograph */ + ["\u97F4", "\u97F4"], /* CJK Ideograph */ + ["\u97F5", "\u97F5"], /* CJK Ideograph */ + ["\u97F6", "\u97F6"], /* CJK Ideograph */ + ["\u97F7", "\u97F7"], /* CJK Ideograph */ + ["\u97F8", "\u97F8"], /* CJK Ideograph */ + ["\u97F9", "\u97F9"], /* CJK Ideograph */ + ["\u97FA", "\u97FA"], /* CJK Ideograph */ + ["\u97FB", "\u97FB"], /* CJK Ideograph */ + ["\u97FC", "\u97FC"], /* CJK Ideograph */ + ["\u97FD", "\u97FD"], /* CJK Ideograph */ + ["\u97FE", "\u97FE"], /* CJK Ideograph */ + ["\u97FF", "\u97FF"], /* CJK Ideograph */ + ["\u9800", "\u9800"], /* CJK Ideograph */ + ["\u9801", "\u9801"], /* CJK Ideograph */ + ["\u9802", "\u9802"], /* CJK Ideograph */ + ["\u9803", "\u9803"], /* CJK Ideograph */ + ["\u9804", "\u9804"], /* CJK Ideograph */ + ["\u9805", "\u9805"], /* CJK Ideograph */ + ["\u9806", "\u9806"], /* CJK Ideograph */ + ["\u9807", "\u9807"], /* CJK Ideograph */ + ["\u9808", "\u9808"], /* CJK Ideograph */ + ["\u9809", "\u9809"], /* CJK Ideograph */ + ["\u980A", "\u980A"], /* CJK Ideograph */ + ["\u980B", "\u980B"], /* CJK Ideograph */ + ["\u980C", "\u980C"], /* CJK Ideograph */ + ["\u980D", "\u980D"], /* CJK Ideograph */ + ["\u980E", "\u980E"], /* CJK Ideograph */ + ["\u980F", "\u980F"], /* CJK Ideograph */ + ["\u9810", "\u9810"], /* CJK Ideograph */ + ["\u9811", "\u9811"], /* CJK Ideograph */ + ["\u9812", "\u9812"], /* CJK Ideograph */ + ["\u9813", "\u9813"], /* CJK Ideograph */ + ["\u9814", "\u9814"], /* CJK Ideograph */ + ["\u9815", "\u9815"], /* CJK Ideograph */ + ["\u9816", "\u9816"], /* CJK Ideograph */ + ["\u9817", "\u9817"], /* CJK Ideograph */ + ["\u9818", "\u9818"], /* CJK Ideograph */ + ["\u9819", "\u9819"], /* CJK Ideograph */ + ["\u981A", "\u981A"], /* CJK Ideograph */ + ["\u981B", "\u981B"], /* CJK Ideograph */ + ["\u981C", "\u981C"], /* CJK Ideograph */ + ["\u981D", "\u981D"], /* CJK Ideograph */ + ["\u981E", "\u981E"], /* CJK Ideograph */ + ["\u981F", "\u981F"], /* CJK Ideograph */ + ["\u9820", "\u9820"], /* CJK Ideograph */ + ["\u9821", "\u9821"], /* CJK Ideograph */ + ["\u9822", "\u9822"], /* CJK Ideograph */ + ["\u9823", "\u9823"], /* CJK Ideograph */ + ["\u9824", "\u9824"], /* CJK Ideograph */ + ["\u9825", "\u9825"], /* CJK Ideograph */ + ["\u9826", "\u9826"], /* CJK Ideograph */ + ["\u9827", "\u9827"], /* CJK Ideograph */ + ["\u9828", "\u9828"], /* CJK Ideograph */ + ["\u9829", "\u9829"], /* CJK Ideograph */ + ["\u982A", "\u982A"], /* CJK Ideograph */ + ["\u982B", "\u982B"], /* CJK Ideograph */ + ["\u982C", "\u982C"], /* CJK Ideograph */ + ["\u982D", "\u982D"], /* CJK Ideograph */ + ["\u982E", "\u982E"], /* CJK Ideograph */ + ["\u982F", "\u982F"], /* CJK Ideograph */ + ["\u9830", "\u9830"], /* CJK Ideograph */ + ["\u9831", "\u9831"], /* CJK Ideograph */ + ["\u9832", "\u9832"], /* CJK Ideograph */ + ["\u9833", "\u9833"], /* CJK Ideograph */ + ["\u9834", "\u9834"], /* CJK Ideograph */ + ["\u9835", "\u9835"], /* CJK Ideograph */ + ["\u9836", "\u9836"], /* CJK Ideograph */ + ["\u9837", "\u9837"], /* CJK Ideograph */ + ["\u9838", "\u9838"], /* CJK Ideograph */ + ["\u9839", "\u9839"], /* CJK Ideograph */ + ["\u983A", "\u983A"], /* CJK Ideograph */ + ["\u983B", "\u983B"], /* CJK Ideograph */ + ["\u983C", "\u983C"], /* CJK Ideograph */ + ["\u983D", "\u983D"], /* CJK Ideograph */ + ["\u983E", "\u983E"], /* CJK Ideograph */ + ["\u983F", "\u983F"], /* CJK Ideograph */ + ["\u9840", "\u9840"], /* CJK Ideograph */ + ["\u9841", "\u9841"], /* CJK Ideograph */ + ["\u9842", "\u9842"], /* CJK Ideograph */ + ["\u9843", "\u9843"], /* CJK Ideograph */ + ["\u9844", "\u9844"], /* CJK Ideograph */ + ["\u9845", "\u9845"], /* CJK Ideograph */ + ["\u9846", "\u9846"], /* CJK Ideograph */ + ["\u9847", "\u9847"], /* CJK Ideograph */ + ["\u9848", "\u9848"], /* CJK Ideograph */ + ["\u9849", "\u9849"], /* CJK Ideograph */ + ["\u984A", "\u984A"], /* CJK Ideograph */ + ["\u984B", "\u984B"], /* CJK Ideograph */ + ["\u984C", "\u984C"], /* CJK Ideograph */ + ["\u984D", "\u984D"], /* CJK Ideograph */ + ["\u984E", "\u984E"], /* CJK Ideograph */ + ["\u984F", "\u984F"], /* CJK Ideograph */ + ["\u9850", "\u9850"], /* CJK Ideograph */ + ["\u9851", "\u9851"], /* CJK Ideograph */ + ["\u9852", "\u9852"], /* CJK Ideograph */ + ["\u9853", "\u9853"], /* CJK Ideograph */ + ["\u9854", "\u9854"], /* CJK Ideograph */ + ["\u9855", "\u9855"], /* CJK Ideograph */ + ["\u9856", "\u9856"], /* CJK Ideograph */ + ["\u9857", "\u9857"], /* CJK Ideograph */ + ["\u9858", "\u9858"], /* CJK Ideograph */ + ["\u9859", "\u9859"], /* CJK Ideograph */ + ["\u985A", "\u985A"], /* CJK Ideograph */ + ["\u985B", "\u985B"], /* CJK Ideograph */ + ["\u985C", "\u985C"], /* CJK Ideograph */ + ["\u985D", "\u985D"], /* CJK Ideograph */ + ["\u985E", "\u985E"], /* CJK Ideograph */ + ["\u985F", "\u985F"], /* CJK Ideograph */ + ["\u9860", "\u9860"], /* CJK Ideograph */ + ["\u9861", "\u9861"], /* CJK Ideograph */ + ["\u9862", "\u9862"], /* CJK Ideograph */ + ["\u9863", "\u9863"], /* CJK Ideograph */ + ["\u9864", "\u9864"], /* CJK Ideograph */ + ["\u9865", "\u9865"], /* CJK Ideograph */ + ["\u9866", "\u9866"], /* CJK Ideograph */ + ["\u9867", "\u9867"], /* CJK Ideograph */ + ["\u9868", "\u9868"], /* CJK Ideograph */ + ["\u9869", "\u9869"], /* CJK Ideograph */ + ["\u986A", "\u986A"], /* CJK Ideograph */ + ["\u986B", "\u986B"], /* CJK Ideograph */ + ["\u986C", "\u986C"], /* CJK Ideograph */ + ["\u986D", "\u986D"], /* CJK Ideograph */ + ["\u986E", "\u986E"], /* CJK Ideograph */ + ["\u986F", "\u986F"], /* CJK Ideograph */ + ["\u9870", "\u9870"], /* CJK Ideograph */ + ["\u9871", "\u9871"], /* CJK Ideograph */ + ["\u9872", "\u9872"], /* CJK Ideograph */ + ["\u9873", "\u9873"], /* CJK Ideograph */ + ["\u9874", "\u9874"], /* CJK Ideograph */ + ["\u9875", "\u9875"], /* CJK Ideograph */ + ["\u9876", "\u9876"], /* CJK Ideograph */ + ["\u9877", "\u9877"], /* CJK Ideograph */ + ["\u9878", "\u9878"], /* CJK Ideograph */ + ["\u9879", "\u9879"], /* CJK Ideograph */ + ["\u987A", "\u987A"], /* CJK Ideograph */ + ["\u987B", "\u987B"], /* CJK Ideograph */ + ["\u987C", "\u987C"], /* CJK Ideograph */ + ["\u987D", "\u987D"], /* CJK Ideograph */ + ["\u987E", "\u987E"], /* CJK Ideograph */ + ["\u987F", "\u987F"], /* CJK Ideograph */ + ["\u9880", "\u9880"], /* CJK Ideograph */ + ["\u9881", "\u9881"], /* CJK Ideograph */ + ["\u9882", "\u9882"], /* CJK Ideograph */ + ["\u9883", "\u9883"], /* CJK Ideograph */ + ["\u9884", "\u9884"], /* CJK Ideograph */ + ["\u9885", "\u9885"], /* CJK Ideograph */ + ["\u9886", "\u9886"], /* CJK Ideograph */ + ["\u9887", "\u9887"], /* CJK Ideograph */ + ["\u9888", "\u9888"], /* CJK Ideograph */ + ["\u9889", "\u9889"], /* CJK Ideograph */ + ["\u988A", "\u988A"], /* CJK Ideograph */ + ["\u988B", "\u988B"], /* CJK Ideograph */ + ["\u988C", "\u988C"], /* CJK Ideograph */ + ["\u988D", "\u988D"], /* CJK Ideograph */ + ["\u988E", "\u988E"], /* CJK Ideograph */ + ["\u988F", "\u988F"], /* CJK Ideograph */ + ["\u9890", "\u9890"], /* CJK Ideograph */ + ["\u9891", "\u9891"], /* CJK Ideograph */ + ["\u9892", "\u9892"], /* CJK Ideograph */ + ["\u9893", "\u9893"], /* CJK Ideograph */ + ["\u9894", "\u9894"], /* CJK Ideograph */ + ["\u9895", "\u9895"], /* CJK Ideograph */ + ["\u9896", "\u9896"], /* CJK Ideograph */ + ["\u9897", "\u9897"], /* CJK Ideograph */ + ["\u9898", "\u9898"], /* CJK Ideograph */ + ["\u9899", "\u9899"], /* CJK Ideograph */ + ["\u989A", "\u989A"], /* CJK Ideograph */ + ["\u989B", "\u989B"], /* CJK Ideograph */ + ["\u989C", "\u989C"], /* CJK Ideograph */ + ["\u989D", "\u989D"], /* CJK Ideograph */ + ["\u989E", "\u989E"], /* CJK Ideograph */ + ["\u989F", "\u989F"], /* CJK Ideograph */ + ["\u98A0", "\u98A0"], /* CJK Ideograph */ + ["\u98A1", "\u98A1"], /* CJK Ideograph */ + ["\u98A2", "\u98A2"], /* CJK Ideograph */ + ["\u98A3", "\u98A3"], /* CJK Ideograph */ + ["\u98A4", "\u98A4"], /* CJK Ideograph */ + ["\u98A5", "\u98A5"], /* CJK Ideograph */ + ["\u98A6", "\u98A6"], /* CJK Ideograph */ + ["\u98A7", "\u98A7"], /* CJK Ideograph */ + ["\u98A8", "\u98A8"], /* CJK Ideograph */ + ["\u98A9", "\u98A9"], /* CJK Ideograph */ + ["\u98AA", "\u98AA"], /* CJK Ideograph */ + ["\u98AB", "\u98AB"], /* CJK Ideograph */ + ["\u98AC", "\u98AC"], /* CJK Ideograph */ + ["\u98AD", "\u98AD"], /* CJK Ideograph */ + ["\u98AE", "\u98AE"], /* CJK Ideograph */ + ["\u98AF", "\u98AF"], /* CJK Ideograph */ + ["\u98B0", "\u98B0"], /* CJK Ideograph */ + ["\u98B1", "\u98B1"], /* CJK Ideograph */ + ["\u98B2", "\u98B2"], /* CJK Ideograph */ + ["\u98B3", "\u98B3"], /* CJK Ideograph */ + ["\u98B4", "\u98B4"], /* CJK Ideograph */ + ["\u98B5", "\u98B5"], /* CJK Ideograph */ + ["\u98B6", "\u98B6"], /* CJK Ideograph */ + ["\u98B7", "\u98B7"], /* CJK Ideograph */ + ["\u98B8", "\u98B8"], /* CJK Ideograph */ + ["\u98B9", "\u98B9"], /* CJK Ideograph */ + ["\u98BA", "\u98BA"], /* CJK Ideograph */ + ["\u98BB", "\u98BB"], /* CJK Ideograph */ + ["\u98BC", "\u98BC"], /* CJK Ideograph */ + ["\u98BD", "\u98BD"], /* CJK Ideograph */ + ["\u98BE", "\u98BE"], /* CJK Ideograph */ + ["\u98BF", "\u98BF"], /* CJK Ideograph */ + ["\u98C0", "\u98C0"], /* CJK Ideograph */ + ["\u98C1", "\u98C1"], /* CJK Ideograph */ + ["\u98C2", "\u98C2"], /* CJK Ideograph */ + ["\u98C3", "\u98C3"], /* CJK Ideograph */ + ["\u98C4", "\u98C4"], /* CJK Ideograph */ + ["\u98C5", "\u98C5"], /* CJK Ideograph */ + ["\u98C6", "\u98C6"], /* CJK Ideograph */ + ["\u98C7", "\u98C7"], /* CJK Ideograph */ + ["\u98C8", "\u98C8"], /* CJK Ideograph */ + ["\u98C9", "\u98C9"], /* CJK Ideograph */ + ["\u98CA", "\u98CA"], /* CJK Ideograph */ + ["\u98CB", "\u98CB"], /* CJK Ideograph */ + ["\u98CC", "\u98CC"], /* CJK Ideograph */ + ["\u98CD", "\u98CD"], /* CJK Ideograph */ + ["\u98CE", "\u98CE"], /* CJK Ideograph */ + ["\u98CF", "\u98CF"], /* CJK Ideograph */ + ["\u98D0", "\u98D0"], /* CJK Ideograph */ + ["\u98D1", "\u98D1"], /* CJK Ideograph */ + ["\u98D2", "\u98D2"], /* CJK Ideograph */ + ["\u98D3", "\u98D3"], /* CJK Ideograph */ + ["\u98D4", "\u98D4"], /* CJK Ideograph */ + ["\u98D5", "\u98D5"], /* CJK Ideograph */ + ["\u98D6", "\u98D6"], /* CJK Ideograph */ + ["\u98D7", "\u98D7"], /* CJK Ideograph */ + ["\u98D8", "\u98D8"], /* CJK Ideograph */ + ["\u98D9", "\u98D9"], /* CJK Ideograph */ + ["\u98DA", "\u98DA"], /* CJK Ideograph */ + ["\u98DB", "\u98DB"], /* CJK Ideograph */ + ["\u98DC", "\u98DC"], /* CJK Ideograph */ + ["\u98DD", "\u98DD"], /* CJK Ideograph */ + ["\u98DE", "\u98DE"], /* CJK Ideograph */ + ["\u98DF", "\u98DF"], /* CJK Ideograph */ + ["\u98E0", "\u98E0"], /* CJK Ideograph */ + ["\u98E1", "\u98E1"], /* CJK Ideograph */ + ["\u98E2", "\u98E2"], /* CJK Ideograph */ + ["\u98E3", "\u98E3"], /* CJK Ideograph */ + ["\u98E4", "\u98E4"], /* CJK Ideograph */ + ["\u98E5", "\u98E5"], /* CJK Ideograph */ + ["\u98E6", "\u98E6"], /* CJK Ideograph */ + ["\u98E7", "\u98E7"], /* CJK Ideograph */ + ["\u98E8", "\u98E8"], /* CJK Ideograph */ + ["\u98E9", "\u98E9"], /* CJK Ideograph */ + ["\u98EA", "\u98EA"], /* CJK Ideograph */ + ["\u98EB", "\u98EB"], /* CJK Ideograph */ + ["\u98EC", "\u98EC"], /* CJK Ideograph */ + ["\u98ED", "\u98ED"], /* CJK Ideograph */ + ["\u98EE", "\u98EE"], /* CJK Ideograph */ + ["\u98EF", "\u98EF"], /* CJK Ideograph */ + ["\u98F0", "\u98F0"], /* CJK Ideograph */ + ["\u98F1", "\u98F1"], /* CJK Ideograph */ + ["\u98F2", "\u98F2"], /* CJK Ideograph */ + ["\u98F3", "\u98F3"], /* CJK Ideograph */ + ["\u98F4", "\u98F4"], /* CJK Ideograph */ + ["\u98F5", "\u98F5"], /* CJK Ideograph */ + ["\u98F6", "\u98F6"], /* CJK Ideograph */ + ["\u98F7", "\u98F7"], /* CJK Ideograph */ + ["\u98F8", "\u98F8"], /* CJK Ideograph */ + ["\u98F9", "\u98F9"], /* CJK Ideograph */ + ["\u98FA", "\u98FA"], /* CJK Ideograph */ + ["\u98FB", "\u98FB"], /* CJK Ideograph */ + ["\u98FC", "\u98FC"], /* CJK Ideograph */ + ["\u98FD", "\u98FD"], /* CJK Ideograph */ + ["\u98FE", "\u98FE"], /* CJK Ideograph */ + ["\u98FF", "\u98FF"], /* CJK Ideograph */ + ["\u9900", "\u9900"], /* CJK Ideograph */ + ["\u9901", "\u9901"], /* CJK Ideograph */ + ["\u9902", "\u9902"], /* CJK Ideograph */ + ["\u9903", "\u9903"], /* CJK Ideograph */ + ["\u9904", "\u9904"], /* CJK Ideograph */ + ["\u9905", "\u9905"], /* CJK Ideograph */ + ["\u9906", "\u9906"], /* CJK Ideograph */ + ["\u9907", "\u9907"], /* CJK Ideograph */ + ["\u9908", "\u9908"], /* CJK Ideograph */ + ["\u9909", "\u9909"], /* CJK Ideograph */ + ["\u990A", "\u990A"], /* CJK Ideograph */ + ["\u990B", "\u990B"], /* CJK Ideograph */ + ["\u990C", "\u990C"], /* CJK Ideograph */ + ["\u990D", "\u990D"], /* CJK Ideograph */ + ["\u990E", "\u990E"], /* CJK Ideograph */ + ["\u990F", "\u990F"], /* CJK Ideograph */ + ["\u9910", "\u9910"], /* CJK Ideograph */ + ["\u9911", "\u9911"], /* CJK Ideograph */ + ["\u9912", "\u9912"], /* CJK Ideograph */ + ["\u9913", "\u9913"], /* CJK Ideograph */ + ["\u9914", "\u9914"], /* CJK Ideograph */ + ["\u9915", "\u9915"], /* CJK Ideograph */ + ["\u9916", "\u9916"], /* CJK Ideograph */ + ["\u9917", "\u9917"], /* CJK Ideograph */ + ["\u9918", "\u9918"], /* CJK Ideograph */ + ["\u9919", "\u9919"], /* CJK Ideograph */ + ["\u991A", "\u991A"], /* CJK Ideograph */ + ["\u991B", "\u991B"], /* CJK Ideograph */ + ["\u991C", "\u991C"], /* CJK Ideograph */ + ["\u991D", "\u991D"], /* CJK Ideograph */ + ["\u991E", "\u991E"], /* CJK Ideograph */ + ["\u991F", "\u991F"], /* CJK Ideograph */ + ["\u9920", "\u9920"], /* CJK Ideograph */ + ["\u9921", "\u9921"], /* CJK Ideograph */ + ["\u9922", "\u9922"], /* CJK Ideograph */ + ["\u9923", "\u9923"], /* CJK Ideograph */ + ["\u9924", "\u9924"], /* CJK Ideograph */ + ["\u9925", "\u9925"], /* CJK Ideograph */ + ["\u9926", "\u9926"], /* CJK Ideograph */ + ["\u9927", "\u9927"], /* CJK Ideograph */ + ["\u9928", "\u9928"], /* CJK Ideograph */ + ["\u9929", "\u9929"], /* CJK Ideograph */ + ["\u992A", "\u992A"], /* CJK Ideograph */ + ["\u992B", "\u992B"], /* CJK Ideograph */ + ["\u992C", "\u992C"], /* CJK Ideograph */ + ["\u992D", "\u992D"], /* CJK Ideograph */ + ["\u992E", "\u992E"], /* CJK Ideograph */ + ["\u992F", "\u992F"], /* CJK Ideograph */ + ["\u9930", "\u9930"], /* CJK Ideograph */ + ["\u9931", "\u9931"], /* CJK Ideograph */ + ["\u9932", "\u9932"], /* CJK Ideograph */ + ["\u9933", "\u9933"], /* CJK Ideograph */ + ["\u9934", "\u9934"], /* CJK Ideograph */ + ["\u9935", "\u9935"], /* CJK Ideograph */ + ["\u9936", "\u9936"], /* CJK Ideograph */ + ["\u9937", "\u9937"], /* CJK Ideograph */ + ["\u9938", "\u9938"], /* CJK Ideograph */ + ["\u9939", "\u9939"], /* CJK Ideograph */ + ["\u993A", "\u993A"], /* CJK Ideograph */ + ["\u993B", "\u993B"], /* CJK Ideograph */ + ["\u993C", "\u993C"], /* CJK Ideograph */ + ["\u993D", "\u993D"], /* CJK Ideograph */ + ["\u993E", "\u993E"], /* CJK Ideograph */ + ["\u993F", "\u993F"], /* CJK Ideograph */ + ["\u9940", "\u9940"], /* CJK Ideograph */ + ["\u9941", "\u9941"], /* CJK Ideograph */ + ["\u9942", "\u9942"], /* CJK Ideograph */ + ["\u9943", "\u9943"], /* CJK Ideograph */ + ["\u9944", "\u9944"], /* CJK Ideograph */ + ["\u9945", "\u9945"], /* CJK Ideograph */ + ["\u9946", "\u9946"], /* CJK Ideograph */ + ["\u9947", "\u9947"], /* CJK Ideograph */ + ["\u9948", "\u9948"], /* CJK Ideograph */ + ["\u9949", "\u9949"], /* CJK Ideograph */ + ["\u994A", "\u994A"], /* CJK Ideograph */ + ["\u994B", "\u994B"], /* CJK Ideograph */ + ["\u994C", "\u994C"], /* CJK Ideograph */ + ["\u994D", "\u994D"], /* CJK Ideograph */ + ["\u994E", "\u994E"], /* CJK Ideograph */ + ["\u994F", "\u994F"], /* CJK Ideograph */ + ["\u9950", "\u9950"], /* CJK Ideograph */ + ["\u9951", "\u9951"], /* CJK Ideograph */ + ["\u9952", "\u9952"], /* CJK Ideograph */ + ["\u9953", "\u9953"], /* CJK Ideograph */ + ["\u9954", "\u9954"], /* CJK Ideograph */ + ["\u9955", "\u9955"], /* CJK Ideograph */ + ["\u9956", "\u9956"], /* CJK Ideograph */ + ["\u9957", "\u9957"], /* CJK Ideograph */ + ["\u9958", "\u9958"], /* CJK Ideograph */ + ["\u9959", "\u9959"], /* CJK Ideograph */ + ["\u995A", "\u995A"], /* CJK Ideograph */ + ["\u995B", "\u995B"], /* CJK Ideograph */ + ["\u995C", "\u995C"], /* CJK Ideograph */ + ["\u995D", "\u995D"], /* CJK Ideograph */ + ["\u995E", "\u995E"], /* CJK Ideograph */ + ["\u995F", "\u995F"], /* CJK Ideograph */ + ["\u9960", "\u9960"], /* CJK Ideograph */ + ["\u9961", "\u9961"], /* CJK Ideograph */ + ["\u9962", "\u9962"], /* CJK Ideograph */ + ["\u9963", "\u9963"], /* CJK Ideograph */ + ["\u9964", "\u9964"], /* CJK Ideograph */ + ["\u9965", "\u9965"], /* CJK Ideograph */ + ["\u9966", "\u9966"], /* CJK Ideograph */ + ["\u9967", "\u9967"], /* CJK Ideograph */ + ["\u9968", "\u9968"], /* CJK Ideograph */ + ["\u9969", "\u9969"], /* CJK Ideograph */ + ["\u996A", "\u996A"], /* CJK Ideograph */ + ["\u996B", "\u996B"], /* CJK Ideograph */ + ["\u996C", "\u996C"], /* CJK Ideograph */ + ["\u996D", "\u996D"], /* CJK Ideograph */ + ["\u996E", "\u996E"], /* CJK Ideograph */ + ["\u996F", "\u996F"], /* CJK Ideograph */ + ["\u9970", "\u9970"], /* CJK Ideograph */ + ["\u9971", "\u9971"], /* CJK Ideograph */ + ["\u9972", "\u9972"], /* CJK Ideograph */ + ["\u9973", "\u9973"], /* CJK Ideograph */ + ["\u9974", "\u9974"], /* CJK Ideograph */ + ["\u9975", "\u9975"], /* CJK Ideograph */ + ["\u9976", "\u9976"], /* CJK Ideograph */ + ["\u9977", "\u9977"], /* CJK Ideograph */ + ["\u9978", "\u9978"], /* CJK Ideograph */ + ["\u9979", "\u9979"], /* CJK Ideograph */ + ["\u997A", "\u997A"], /* CJK Ideograph */ + ["\u997B", "\u997B"], /* CJK Ideograph */ + ["\u997C", "\u997C"], /* CJK Ideograph */ + ["\u997D", "\u997D"], /* CJK Ideograph */ + ["\u997E", "\u997E"], /* CJK Ideograph */ + ["\u997F", "\u997F"], /* CJK Ideograph */ + ["\u9980", "\u9980"], /* CJK Ideograph */ + ["\u9981", "\u9981"], /* CJK Ideograph */ + ["\u9982", "\u9982"], /* CJK Ideograph */ + ["\u9983", "\u9983"], /* CJK Ideograph */ + ["\u9984", "\u9984"], /* CJK Ideograph */ + ["\u9985", "\u9985"], /* CJK Ideograph */ + ["\u9986", "\u9986"], /* CJK Ideograph */ + ["\u9987", "\u9987"], /* CJK Ideograph */ + ["\u9988", "\u9988"], /* CJK Ideograph */ + ["\u9989", "\u9989"], /* CJK Ideograph */ + ["\u998A", "\u998A"], /* CJK Ideograph */ + ["\u998B", "\u998B"], /* CJK Ideograph */ + ["\u998C", "\u998C"], /* CJK Ideograph */ + ["\u998D", "\u998D"], /* CJK Ideograph */ + ["\u998E", "\u998E"], /* CJK Ideograph */ + ["\u998F", "\u998F"], /* CJK Ideograph */ + ["\u9990", "\u9990"], /* CJK Ideograph */ + ["\u9991", "\u9991"], /* CJK Ideograph */ + ["\u9992", "\u9992"], /* CJK Ideograph */ + ["\u9993", "\u9993"], /* CJK Ideograph */ + ["\u9994", "\u9994"], /* CJK Ideograph */ + ["\u9995", "\u9995"], /* CJK Ideograph */ + ["\u9996", "\u9996"], /* CJK Ideograph */ + ["\u9997", "\u9997"], /* CJK Ideograph */ + ["\u9998", "\u9998"], /* CJK Ideograph */ + ["\u9999", "\u9999"], /* CJK Ideograph */ + ["\u999A", "\u999A"], /* CJK Ideograph */ + ["\u999B", "\u999B"], /* CJK Ideograph */ + ["\u999C", "\u999C"], /* CJK Ideograph */ + ["\u999D", "\u999D"], /* CJK Ideograph */ + ["\u999E", "\u999E"], /* CJK Ideograph */ + ["\u999F", "\u999F"], /* CJK Ideograph */ + ["\u99A0", "\u99A0"], /* CJK Ideograph */ + ["\u99A1", "\u99A1"], /* CJK Ideograph */ + ["\u99A2", "\u99A2"], /* CJK Ideograph */ + ["\u99A3", "\u99A3"], /* CJK Ideograph */ + ["\u99A4", "\u99A4"], /* CJK Ideograph */ + ["\u99A5", "\u99A5"], /* CJK Ideograph */ + ["\u99A6", "\u99A6"], /* CJK Ideograph */ + ["\u99A7", "\u99A7"], /* CJK Ideograph */ + ["\u99A8", "\u99A8"], /* CJK Ideograph */ + ["\u99A9", "\u99A9"], /* CJK Ideograph */ + ["\u99AA", "\u99AA"], /* CJK Ideograph */ + ["\u99AB", "\u99AB"], /* CJK Ideograph */ + ["\u99AC", "\u99AC"], /* CJK Ideograph */ + ["\u99AD", "\u99AD"], /* CJK Ideograph */ + ["\u99AE", "\u99AE"], /* CJK Ideograph */ + ["\u99AF", "\u99AF"], /* CJK Ideograph */ + ["\u99B0", "\u99B0"], /* CJK Ideograph */ + ["\u99B1", "\u99B1"], /* CJK Ideograph */ + ["\u99B2", "\u99B2"], /* CJK Ideograph */ + ["\u99B3", "\u99B3"], /* CJK Ideograph */ + ["\u99B4", "\u99B4"], /* CJK Ideograph */ + ["\u99B5", "\u99B5"], /* CJK Ideograph */ + ["\u99B6", "\u99B6"], /* CJK Ideograph */ + ["\u99B7", "\u99B7"], /* CJK Ideograph */ + ["\u99B8", "\u99B8"], /* CJK Ideograph */ + ["\u99B9", "\u99B9"], /* CJK Ideograph */ + ["\u99BA", "\u99BA"], /* CJK Ideograph */ + ["\u99BB", "\u99BB"], /* CJK Ideograph */ + ["\u99BC", "\u99BC"], /* CJK Ideograph */ + ["\u99BD", "\u99BD"], /* CJK Ideograph */ + ["\u99BE", "\u99BE"], /* CJK Ideograph */ + ["\u99BF", "\u99BF"], /* CJK Ideograph */ + ["\u99C0", "\u99C0"], /* CJK Ideograph */ + ["\u99C1", "\u99C1"], /* CJK Ideograph */ + ["\u99C2", "\u99C2"], /* CJK Ideograph */ + ["\u99C3", "\u99C3"], /* CJK Ideograph */ + ["\u99C4", "\u99C4"], /* CJK Ideograph */ + ["\u99C5", "\u99C5"], /* CJK Ideograph */ + ["\u99C6", "\u99C6"], /* CJK Ideograph */ + ["\u99C7", "\u99C7"], /* CJK Ideograph */ + ["\u99C8", "\u99C8"], /* CJK Ideograph */ + ["\u99C9", "\u99C9"], /* CJK Ideograph */ + ["\u99CA", "\u99CA"], /* CJK Ideograph */ + ["\u99CB", "\u99CB"], /* CJK Ideograph */ + ["\u99CC", "\u99CC"], /* CJK Ideograph */ + ["\u99CD", "\u99CD"], /* CJK Ideograph */ + ["\u99CE", "\u99CE"], /* CJK Ideograph */ + ["\u99CF", "\u99CF"], /* CJK Ideograph */ + ["\u99D0", "\u99D0"], /* CJK Ideograph */ + ["\u99D1", "\u99D1"], /* CJK Ideograph */ + ["\u99D2", "\u99D2"], /* CJK Ideograph */ + ["\u99D3", "\u99D3"], /* CJK Ideograph */ + ["\u99D4", "\u99D4"], /* CJK Ideograph */ + ["\u99D5", "\u99D5"], /* CJK Ideograph */ + ["\u99D6", "\u99D6"], /* CJK Ideograph */ + ["\u99D7", "\u99D7"], /* CJK Ideograph */ + ["\u99D8", "\u99D8"], /* CJK Ideograph */ + ["\u99D9", "\u99D9"], /* CJK Ideograph */ + ["\u99DA", "\u99DA"], /* CJK Ideograph */ + ["\u99DB", "\u99DB"], /* CJK Ideograph */ + ["\u99DC", "\u99DC"], /* CJK Ideograph */ + ["\u99DD", "\u99DD"], /* CJK Ideograph */ + ["\u99DE", "\u99DE"], /* CJK Ideograph */ + ["\u99DF", "\u99DF"], /* CJK Ideograph */ + ["\u99E0", "\u99E0"], /* CJK Ideograph */ + ["\u99E1", "\u99E1"], /* CJK Ideograph */ + ["\u99E2", "\u99E2"], /* CJK Ideograph */ + ["\u99E3", "\u99E3"], /* CJK Ideograph */ + ["\u99E4", "\u99E4"], /* CJK Ideograph */ + ["\u99E5", "\u99E5"], /* CJK Ideograph */ + ["\u99E6", "\u99E6"], /* CJK Ideograph */ + ["\u99E7", "\u99E7"], /* CJK Ideograph */ + ["\u99E8", "\u99E8"], /* CJK Ideograph */ + ["\u99E9", "\u99E9"], /* CJK Ideograph */ + ["\u99EA", "\u99EA"], /* CJK Ideograph */ + ["\u99EB", "\u99EB"], /* CJK Ideograph */ + ["\u99EC", "\u99EC"], /* CJK Ideograph */ + ["\u99ED", "\u99ED"], /* CJK Ideograph */ + ["\u99EE", "\u99EE"], /* CJK Ideograph */ + ["\u99EF", "\u99EF"], /* CJK Ideograph */ + ["\u99F0", "\u99F0"], /* CJK Ideograph */ + ["\u99F1", "\u99F1"], /* CJK Ideograph */ + ["\u99F2", "\u99F2"], /* CJK Ideograph */ + ["\u99F3", "\u99F3"], /* CJK Ideograph */ + ["\u99F4", "\u99F4"], /* CJK Ideograph */ + ["\u99F5", "\u99F5"], /* CJK Ideograph */ + ["\u99F6", "\u99F6"], /* CJK Ideograph */ + ["\u99F7", "\u99F7"], /* CJK Ideograph */ + ["\u99F8", "\u99F8"], /* CJK Ideograph */ + ["\u99F9", "\u99F9"], /* CJK Ideograph */ + ["\u99FA", "\u99FA"], /* CJK Ideograph */ + ["\u99FB", "\u99FB"], /* CJK Ideograph */ + ["\u99FC", "\u99FC"], /* CJK Ideograph */ + ["\u99FD", "\u99FD"], /* CJK Ideograph */ + ["\u99FE", "\u99FE"], /* CJK Ideograph */ + ["\u99FF", "\u99FF"], /* CJK Ideograph */ + ["\u9A00", "\u9A00"], /* CJK Ideograph */ + ["\u9A01", "\u9A01"], /* CJK Ideograph */ + ["\u9A02", "\u9A02"], /* CJK Ideograph */ + ["\u9A03", "\u9A03"], /* CJK Ideograph */ + ["\u9A04", "\u9A04"], /* CJK Ideograph */ + ["\u9A05", "\u9A05"], /* CJK Ideograph */ + ["\u9A06", "\u9A06"], /* CJK Ideograph */ + ["\u9A07", "\u9A07"], /* CJK Ideograph */ + ["\u9A08", "\u9A08"], /* CJK Ideograph */ + ["\u9A09", "\u9A09"], /* CJK Ideograph */ + ["\u9A0A", "\u9A0A"], /* CJK Ideograph */ + ["\u9A0B", "\u9A0B"], /* CJK Ideograph */ + ["\u9A0C", "\u9A0C"], /* CJK Ideograph */ + ["\u9A0D", "\u9A0D"], /* CJK Ideograph */ + ["\u9A0E", "\u9A0E"], /* CJK Ideograph */ + ["\u9A0F", "\u9A0F"], /* CJK Ideograph */ + ["\u9A10", "\u9A10"], /* CJK Ideograph */ + ["\u9A11", "\u9A11"], /* CJK Ideograph */ + ["\u9A12", "\u9A12"], /* CJK Ideograph */ + ["\u9A13", "\u9A13"], /* CJK Ideograph */ + ["\u9A14", "\u9A14"], /* CJK Ideograph */ + ["\u9A15", "\u9A15"], /* CJK Ideograph */ + ["\u9A16", "\u9A16"], /* CJK Ideograph */ + ["\u9A17", "\u9A17"], /* CJK Ideograph */ + ["\u9A18", "\u9A18"], /* CJK Ideograph */ + ["\u9A19", "\u9A19"], /* CJK Ideograph */ + ["\u9A1A", "\u9A1A"], /* CJK Ideograph */ + ["\u9A1B", "\u9A1B"], /* CJK Ideograph */ + ["\u9A1C", "\u9A1C"], /* CJK Ideograph */ + ["\u9A1D", "\u9A1D"], /* CJK Ideograph */ + ["\u9A1E", "\u9A1E"], /* CJK Ideograph */ + ["\u9A1F", "\u9A1F"], /* CJK Ideograph */ + ["\u9A20", "\u9A20"], /* CJK Ideograph */ + ["\u9A21", "\u9A21"], /* CJK Ideograph */ + ["\u9A22", "\u9A22"], /* CJK Ideograph */ + ["\u9A23", "\u9A23"], /* CJK Ideograph */ + ["\u9A24", "\u9A24"], /* CJK Ideograph */ + ["\u9A25", "\u9A25"], /* CJK Ideograph */ + ["\u9A26", "\u9A26"], /* CJK Ideograph */ + ["\u9A27", "\u9A27"], /* CJK Ideograph */ + ["\u9A28", "\u9A28"], /* CJK Ideograph */ + ["\u9A29", "\u9A29"], /* CJK Ideograph */ + ["\u9A2A", "\u9A2A"], /* CJK Ideograph */ + ["\u9A2B", "\u9A2B"], /* CJK Ideograph */ + ["\u9A2C", "\u9A2C"], /* CJK Ideograph */ + ["\u9A2D", "\u9A2D"], /* CJK Ideograph */ + ["\u9A2E", "\u9A2E"], /* CJK Ideograph */ + ["\u9A2F", "\u9A2F"], /* CJK Ideograph */ + ["\u9A30", "\u9A30"], /* CJK Ideograph */ + ["\u9A31", "\u9A31"], /* CJK Ideograph */ + ["\u9A32", "\u9A32"], /* CJK Ideograph */ + ["\u9A33", "\u9A33"], /* CJK Ideograph */ + ["\u9A34", "\u9A34"], /* CJK Ideograph */ + ["\u9A35", "\u9A35"], /* CJK Ideograph */ + ["\u9A36", "\u9A36"], /* CJK Ideograph */ + ["\u9A37", "\u9A37"], /* CJK Ideograph */ + ["\u9A38", "\u9A38"], /* CJK Ideograph */ + ["\u9A39", "\u9A39"], /* CJK Ideograph */ + ["\u9A3A", "\u9A3A"], /* CJK Ideograph */ + ["\u9A3B", "\u9A3B"], /* CJK Ideograph */ + ["\u9A3C", "\u9A3C"], /* CJK Ideograph */ + ["\u9A3D", "\u9A3D"], /* CJK Ideograph */ + ["\u9A3E", "\u9A3E"], /* CJK Ideograph */ + ["\u9A3F", "\u9A3F"], /* CJK Ideograph */ + ["\u9A40", "\u9A40"], /* CJK Ideograph */ + ["\u9A41", "\u9A41"], /* CJK Ideograph */ + ["\u9A42", "\u9A42"], /* CJK Ideograph */ + ["\u9A43", "\u9A43"], /* CJK Ideograph */ + ["\u9A44", "\u9A44"], /* CJK Ideograph */ + ["\u9A45", "\u9A45"], /* CJK Ideograph */ + ["\u9A46", "\u9A46"], /* CJK Ideograph */ + ["\u9A47", "\u9A47"], /* CJK Ideograph */ + ["\u9A48", "\u9A48"], /* CJK Ideograph */ + ["\u9A49", "\u9A49"], /* CJK Ideograph */ + ["\u9A4A", "\u9A4A"], /* CJK Ideograph */ + ["\u9A4B", "\u9A4B"], /* CJK Ideograph */ + ["\u9A4C", "\u9A4C"], /* CJK Ideograph */ + ["\u9A4D", "\u9A4D"], /* CJK Ideograph */ + ["\u9A4E", "\u9A4E"], /* CJK Ideograph */ + ["\u9A4F", "\u9A4F"], /* CJK Ideograph */ + ["\u9A50", "\u9A50"], /* CJK Ideograph */ + ["\u9A51", "\u9A51"], /* CJK Ideograph */ + ["\u9A52", "\u9A52"], /* CJK Ideograph */ + ["\u9A53", "\u9A53"], /* CJK Ideograph */ + ["\u9A54", "\u9A54"], /* CJK Ideograph */ + ["\u9A55", "\u9A55"], /* CJK Ideograph */ + ["\u9A56", "\u9A56"], /* CJK Ideograph */ + ["\u9A57", "\u9A57"], /* CJK Ideograph */ + ["\u9A58", "\u9A58"], /* CJK Ideograph */ + ["\u9A59", "\u9A59"], /* CJK Ideograph */ + ["\u9A5A", "\u9A5A"], /* CJK Ideograph */ + ["\u9A5B", "\u9A5B"], /* CJK Ideograph */ + ["\u9A5C", "\u9A5C"], /* CJK Ideograph */ + ["\u9A5D", "\u9A5D"], /* CJK Ideograph */ + ["\u9A5E", "\u9A5E"], /* CJK Ideograph */ + ["\u9A5F", "\u9A5F"], /* CJK Ideograph */ + ["\u9A60", "\u9A60"], /* CJK Ideograph */ + ["\u9A61", "\u9A61"], /* CJK Ideograph */ + ["\u9A62", "\u9A62"], /* CJK Ideograph */ + ["\u9A63", "\u9A63"], /* CJK Ideograph */ + ["\u9A64", "\u9A64"], /* CJK Ideograph */ + ["\u9A65", "\u9A65"], /* CJK Ideograph */ + ["\u9A66", "\u9A66"], /* CJK Ideograph */ + ["\u9A67", "\u9A67"], /* CJK Ideograph */ + ["\u9A68", "\u9A68"], /* CJK Ideograph */ + ["\u9A69", "\u9A69"], /* CJK Ideograph */ + ["\u9A6A", "\u9A6A"], /* CJK Ideograph */ + ["\u9A6B", "\u9A6B"], /* CJK Ideograph */ + ["\u9A6C", "\u9A6C"], /* CJK Ideograph */ + ["\u9A6D", "\u9A6D"], /* CJK Ideograph */ + ["\u9A6E", "\u9A6E"], /* CJK Ideograph */ + ["\u9A6F", "\u9A6F"], /* CJK Ideograph */ + ["\u9A70", "\u9A70"], /* CJK Ideograph */ + ["\u9A71", "\u9A71"], /* CJK Ideograph */ + ["\u9A72", "\u9A72"], /* CJK Ideograph */ + ["\u9A73", "\u9A73"], /* CJK Ideograph */ + ["\u9A74", "\u9A74"], /* CJK Ideograph */ + ["\u9A75", "\u9A75"], /* CJK Ideograph */ + ["\u9A76", "\u9A76"], /* CJK Ideograph */ + ["\u9A77", "\u9A77"], /* CJK Ideograph */ + ["\u9A78", "\u9A78"], /* CJK Ideograph */ + ["\u9A79", "\u9A79"], /* CJK Ideograph */ + ["\u9A7A", "\u9A7A"], /* CJK Ideograph */ + ["\u9A7B", "\u9A7B"], /* CJK Ideograph */ + ["\u9A7C", "\u9A7C"], /* CJK Ideograph */ + ["\u9A7D", "\u9A7D"], /* CJK Ideograph */ + ["\u9A7E", "\u9A7E"], /* CJK Ideograph */ + ["\u9A7F", "\u9A7F"], /* CJK Ideograph */ + ["\u9A80", "\u9A80"], /* CJK Ideograph */ + ["\u9A81", "\u9A81"], /* CJK Ideograph */ + ["\u9A82", "\u9A82"], /* CJK Ideograph */ + ["\u9A83", "\u9A83"], /* CJK Ideograph */ + ["\u9A84", "\u9A84"], /* CJK Ideograph */ + ["\u9A85", "\u9A85"], /* CJK Ideograph */ + ["\u9A86", "\u9A86"], /* CJK Ideograph */ + ["\u9A87", "\u9A87"], /* CJK Ideograph */ + ["\u9A88", "\u9A88"], /* CJK Ideograph */ + ["\u9A89", "\u9A89"], /* CJK Ideograph */ + ["\u9A8A", "\u9A8A"], /* CJK Ideograph */ + ["\u9A8B", "\u9A8B"], /* CJK Ideograph */ + ["\u9A8C", "\u9A8C"], /* CJK Ideograph */ + ["\u9A8D", "\u9A8D"], /* CJK Ideograph */ + ["\u9A8E", "\u9A8E"], /* CJK Ideograph */ + ["\u9A8F", "\u9A8F"], /* CJK Ideograph */ + ["\u9A90", "\u9A90"], /* CJK Ideograph */ + ["\u9A91", "\u9A91"], /* CJK Ideograph */ + ["\u9A92", "\u9A92"], /* CJK Ideograph */ + ["\u9A93", "\u9A93"], /* CJK Ideograph */ + ["\u9A94", "\u9A94"], /* CJK Ideograph */ + ["\u9A95", "\u9A95"], /* CJK Ideograph */ + ["\u9A96", "\u9A96"], /* CJK Ideograph */ + ["\u9A97", "\u9A97"], /* CJK Ideograph */ + ["\u9A98", "\u9A98"], /* CJK Ideograph */ + ["\u9A99", "\u9A99"], /* CJK Ideograph */ + ["\u9A9A", "\u9A9A"], /* CJK Ideograph */ + ["\u9A9B", "\u9A9B"], /* CJK Ideograph */ + ["\u9A9C", "\u9A9C"], /* CJK Ideograph */ + ["\u9A9D", "\u9A9D"], /* CJK Ideograph */ + ["\u9A9E", "\u9A9E"], /* CJK Ideograph */ + ["\u9A9F", "\u9A9F"], /* CJK Ideograph */ + ["\u9AA0", "\u9AA0"], /* CJK Ideograph */ + ["\u9AA1", "\u9AA1"], /* CJK Ideograph */ + ["\u9AA2", "\u9AA2"], /* CJK Ideograph */ + ["\u9AA3", "\u9AA3"], /* CJK Ideograph */ + ["\u9AA4", "\u9AA4"], /* CJK Ideograph */ + ["\u9AA5", "\u9AA5"], /* CJK Ideograph */ + ["\u9AA6", "\u9AA6"], /* CJK Ideograph */ + ["\u9AA7", "\u9AA7"], /* CJK Ideograph */ + ["\u9AA8", "\u9AA8"], /* CJK Ideograph */ + ["\u9AA9", "\u9AA9"], /* CJK Ideograph */ + ["\u9AAA", "\u9AAA"], /* CJK Ideograph */ + ["\u9AAB", "\u9AAB"], /* CJK Ideograph */ + ["\u9AAC", "\u9AAC"], /* CJK Ideograph */ + ["\u9AAD", "\u9AAD"], /* CJK Ideograph */ + ["\u9AAE", "\u9AAE"], /* CJK Ideograph */ + ["\u9AAF", "\u9AAF"], /* CJK Ideograph */ + ["\u9AB0", "\u9AB0"], /* CJK Ideograph */ + ["\u9AB1", "\u9AB1"], /* CJK Ideograph */ + ["\u9AB2", "\u9AB2"], /* CJK Ideograph */ + ["\u9AB3", "\u9AB3"], /* CJK Ideograph */ + ["\u9AB4", "\u9AB4"], /* CJK Ideograph */ + ["\u9AB5", "\u9AB5"], /* CJK Ideograph */ + ["\u9AB6", "\u9AB6"], /* CJK Ideograph */ + ["\u9AB7", "\u9AB7"], /* CJK Ideograph */ + ["\u9AB8", "\u9AB8"], /* CJK Ideograph */ + ["\u9AB9", "\u9AB9"], /* CJK Ideograph */ + ["\u9ABA", "\u9ABA"], /* CJK Ideograph */ + ["\u9ABB", "\u9ABB"], /* CJK Ideograph */ + ["\u9ABC", "\u9ABC"], /* CJK Ideograph */ + ["\u9ABD", "\u9ABD"], /* CJK Ideograph */ + ["\u9ABE", "\u9ABE"], /* CJK Ideograph */ + ["\u9ABF", "\u9ABF"], /* CJK Ideograph */ + ["\u9AC0", "\u9AC0"], /* CJK Ideograph */ + ["\u9AC1", "\u9AC1"], /* CJK Ideograph */ + ["\u9AC2", "\u9AC2"], /* CJK Ideograph */ + ["\u9AC3", "\u9AC3"], /* CJK Ideograph */ + ["\u9AC4", "\u9AC4"], /* CJK Ideograph */ + ["\u9AC5", "\u9AC5"], /* CJK Ideograph */ + ["\u9AC6", "\u9AC6"], /* CJK Ideograph */ + ["\u9AC7", "\u9AC7"], /* CJK Ideograph */ + ["\u9AC8", "\u9AC8"], /* CJK Ideograph */ + ["\u9AC9", "\u9AC9"], /* CJK Ideograph */ + ["\u9ACA", "\u9ACA"], /* CJK Ideograph */ + ["\u9ACB", "\u9ACB"], /* CJK Ideograph */ + ["\u9ACC", "\u9ACC"], /* CJK Ideograph */ + ["\u9ACD", "\u9ACD"], /* CJK Ideograph */ + ["\u9ACE", "\u9ACE"], /* CJK Ideograph */ + ["\u9ACF", "\u9ACF"], /* CJK Ideograph */ + ["\u9AD0", "\u9AD0"], /* CJK Ideograph */ + ["\u9AD1", "\u9AD1"], /* CJK Ideograph */ + ["\u9AD2", "\u9AD2"], /* CJK Ideograph */ + ["\u9AD3", "\u9AD3"], /* CJK Ideograph */ + ["\u9AD4", "\u9AD4"], /* CJK Ideograph */ + ["\u9AD5", "\u9AD5"], /* CJK Ideograph */ + ["\u9AD6", "\u9AD6"], /* CJK Ideograph */ + ["\u9AD7", "\u9AD7"], /* CJK Ideograph */ + ["\u9AD8", "\u9AD8"], /* CJK Ideograph */ + ["\u9AD9", "\u9AD9"], /* CJK Ideograph */ + ["\u9ADA", "\u9ADA"], /* CJK Ideograph */ + ["\u9ADB", "\u9ADB"], /* CJK Ideograph */ + ["\u9ADC", "\u9ADC"], /* CJK Ideograph */ + ["\u9ADD", "\u9ADD"], /* CJK Ideograph */ + ["\u9ADE", "\u9ADE"], /* CJK Ideograph */ + ["\u9ADF", "\u9ADF"], /* CJK Ideograph */ + ["\u9AE0", "\u9AE0"], /* CJK Ideograph */ + ["\u9AE1", "\u9AE1"], /* CJK Ideograph */ + ["\u9AE2", "\u9AE2"], /* CJK Ideograph */ + ["\u9AE3", "\u9AE3"], /* CJK Ideograph */ + ["\u9AE4", "\u9AE4"], /* CJK Ideograph */ + ["\u9AE5", "\u9AE5"], /* CJK Ideograph */ + ["\u9AE6", "\u9AE6"], /* CJK Ideograph */ + ["\u9AE7", "\u9AE7"], /* CJK Ideograph */ + ["\u9AE8", "\u9AE8"], /* CJK Ideograph */ + ["\u9AE9", "\u9AE9"], /* CJK Ideograph */ + ["\u9AEA", "\u9AEA"], /* CJK Ideograph */ + ["\u9AEB", "\u9AEB"], /* CJK Ideograph */ + ["\u9AEC", "\u9AEC"], /* CJK Ideograph */ + ["\u9AED", "\u9AED"], /* CJK Ideograph */ + ["\u9AEE", "\u9AEE"], /* CJK Ideograph */ + ["\u9AEF", "\u9AEF"], /* CJK Ideograph */ + ["\u9AF0", "\u9AF0"], /* CJK Ideograph */ + ["\u9AF1", "\u9AF1"], /* CJK Ideograph */ + ["\u9AF2", "\u9AF2"], /* CJK Ideograph */ + ["\u9AF3", "\u9AF3"], /* CJK Ideograph */ + ["\u9AF4", "\u9AF4"], /* CJK Ideograph */ + ["\u9AF5", "\u9AF5"], /* CJK Ideograph */ + ["\u9AF6", "\u9AF6"], /* CJK Ideograph */ + ["\u9AF7", "\u9AF7"], /* CJK Ideograph */ + ["\u9AF8", "\u9AF8"], /* CJK Ideograph */ + ["\u9AF9", "\u9AF9"], /* CJK Ideograph */ + ["\u9AFA", "\u9AFA"], /* CJK Ideograph */ + ["\u9AFB", "\u9AFB"], /* CJK Ideograph */ + ["\u9AFC", "\u9AFC"], /* CJK Ideograph */ + ["\u9AFD", "\u9AFD"], /* CJK Ideograph */ + ["\u9AFE", "\u9AFE"], /* CJK Ideograph */ + ["\u9AFF", "\u9AFF"], /* CJK Ideograph */ + ["\u9B00", "\u9B00"], /* CJK Ideograph */ + ["\u9B01", "\u9B01"], /* CJK Ideograph */ + ["\u9B02", "\u9B02"], /* CJK Ideograph */ + ["\u9B03", "\u9B03"], /* CJK Ideograph */ + ["\u9B04", "\u9B04"], /* CJK Ideograph */ + ["\u9B05", "\u9B05"], /* CJK Ideograph */ + ["\u9B06", "\u9B06"], /* CJK Ideograph */ + ["\u9B07", "\u9B07"], /* CJK Ideograph */ + ["\u9B08", "\u9B08"], /* CJK Ideograph */ + ["\u9B09", "\u9B09"], /* CJK Ideograph */ + ["\u9B0A", "\u9B0A"], /* CJK Ideograph */ + ["\u9B0B", "\u9B0B"], /* CJK Ideograph */ + ["\u9B0C", "\u9B0C"], /* CJK Ideograph */ + ["\u9B0D", "\u9B0D"], /* CJK Ideograph */ + ["\u9B0E", "\u9B0E"], /* CJK Ideograph */ + ["\u9B0F", "\u9B0F"], /* CJK Ideograph */ + ["\u9B10", "\u9B10"], /* CJK Ideograph */ + ["\u9B11", "\u9B11"], /* CJK Ideograph */ + ["\u9B12", "\u9B12"], /* CJK Ideograph */ + ["\u9B13", "\u9B13"], /* CJK Ideograph */ + ["\u9B14", "\u9B14"], /* CJK Ideograph */ + ["\u9B15", "\u9B15"], /* CJK Ideograph */ + ["\u9B16", "\u9B16"], /* CJK Ideograph */ + ["\u9B17", "\u9B17"], /* CJK Ideograph */ + ["\u9B18", "\u9B18"], /* CJK Ideograph */ + ["\u9B19", "\u9B19"], /* CJK Ideograph */ + ["\u9B1A", "\u9B1A"], /* CJK Ideograph */ + ["\u9B1B", "\u9B1B"], /* CJK Ideograph */ + ["\u9B1C", "\u9B1C"], /* CJK Ideograph */ + ["\u9B1D", "\u9B1D"], /* CJK Ideograph */ + ["\u9B1E", "\u9B1E"], /* CJK Ideograph */ + ["\u9B1F", "\u9B1F"], /* CJK Ideograph */ + ["\u9B20", "\u9B20"], /* CJK Ideograph */ + ["\u9B21", "\u9B21"], /* CJK Ideograph */ + ["\u9B22", "\u9B22"], /* CJK Ideograph */ + ["\u9B23", "\u9B23"], /* CJK Ideograph */ + ["\u9B24", "\u9B24"], /* CJK Ideograph */ + ["\u9B25", "\u9B25"], /* CJK Ideograph */ + ["\u9B26", "\u9B26"], /* CJK Ideograph */ + ["\u9B27", "\u9B27"], /* CJK Ideograph */ + ["\u9B28", "\u9B28"], /* CJK Ideograph */ + ["\u9B29", "\u9B29"], /* CJK Ideograph */ + ["\u9B2A", "\u9B2A"], /* CJK Ideograph */ + ["\u9B2B", "\u9B2B"], /* CJK Ideograph */ + ["\u9B2C", "\u9B2C"], /* CJK Ideograph */ + ["\u9B2D", "\u9B2D"], /* CJK Ideograph */ + ["\u9B2E", "\u9B2E"], /* CJK Ideograph */ + ["\u9B2F", "\u9B2F"], /* CJK Ideograph */ + ["\u9B30", "\u9B30"], /* CJK Ideograph */ + ["\u9B31", "\u9B31"], /* CJK Ideograph */ + ["\u9B32", "\u9B32"], /* CJK Ideograph */ + ["\u9B33", "\u9B33"], /* CJK Ideograph */ + ["\u9B34", "\u9B34"], /* CJK Ideograph */ + ["\u9B35", "\u9B35"], /* CJK Ideograph */ + ["\u9B36", "\u9B36"], /* CJK Ideograph */ + ["\u9B37", "\u9B37"], /* CJK Ideograph */ + ["\u9B38", "\u9B38"], /* CJK Ideograph */ + ["\u9B39", "\u9B39"], /* CJK Ideograph */ + ["\u9B3A", "\u9B3A"], /* CJK Ideograph */ + ["\u9B3B", "\u9B3B"], /* CJK Ideograph */ + ["\u9B3C", "\u9B3C"], /* CJK Ideograph */ + ["\u9B3D", "\u9B3D"], /* CJK Ideograph */ + ["\u9B3E", "\u9B3E"], /* CJK Ideograph */ + ["\u9B3F", "\u9B3F"], /* CJK Ideograph */ + ["\u9B40", "\u9B40"], /* CJK Ideograph */ + ["\u9B41", "\u9B41"], /* CJK Ideograph */ + ["\u9B42", "\u9B42"], /* CJK Ideograph */ + ["\u9B43", "\u9B43"], /* CJK Ideograph */ + ["\u9B44", "\u9B44"], /* CJK Ideograph */ + ["\u9B45", "\u9B45"], /* CJK Ideograph */ + ["\u9B46", "\u9B46"], /* CJK Ideograph */ + ["\u9B47", "\u9B47"], /* CJK Ideograph */ + ["\u9B48", "\u9B48"], /* CJK Ideograph */ + ["\u9B49", "\u9B49"], /* CJK Ideograph */ + ["\u9B4A", "\u9B4A"], /* CJK Ideograph */ + ["\u9B4B", "\u9B4B"], /* CJK Ideograph */ + ["\u9B4C", "\u9B4C"], /* CJK Ideograph */ + ["\u9B4D", "\u9B4D"], /* CJK Ideograph */ + ["\u9B4E", "\u9B4E"], /* CJK Ideograph */ + ["\u9B4F", "\u9B4F"], /* CJK Ideograph */ + ["\u9B50", "\u9B50"], /* CJK Ideograph */ + ["\u9B51", "\u9B51"], /* CJK Ideograph */ + ["\u9B52", "\u9B52"], /* CJK Ideograph */ + ["\u9B53", "\u9B53"], /* CJK Ideograph */ + ["\u9B54", "\u9B54"], /* CJK Ideograph */ + ["\u9B55", "\u9B55"], /* CJK Ideograph */ + ["\u9B56", "\u9B56"], /* CJK Ideograph */ + ["\u9B57", "\u9B57"], /* CJK Ideograph */ + ["\u9B58", "\u9B58"], /* CJK Ideograph */ + ["\u9B59", "\u9B59"], /* CJK Ideograph */ + ["\u9B5A", "\u9B5A"], /* CJK Ideograph */ + ["\u9B5B", "\u9B5B"], /* CJK Ideograph */ + ["\u9B5C", "\u9B5C"], /* CJK Ideograph */ + ["\u9B5D", "\u9B5D"], /* CJK Ideograph */ + ["\u9B5E", "\u9B5E"], /* CJK Ideograph */ + ["\u9B5F", "\u9B5F"], /* CJK Ideograph */ + ["\u9B60", "\u9B60"], /* CJK Ideograph */ + ["\u9B61", "\u9B61"], /* CJK Ideograph */ + ["\u9B62", "\u9B62"], /* CJK Ideograph */ + ["\u9B63", "\u9B63"], /* CJK Ideograph */ + ["\u9B64", "\u9B64"], /* CJK Ideograph */ + ["\u9B65", "\u9B65"], /* CJK Ideograph */ + ["\u9B66", "\u9B66"], /* CJK Ideograph */ + ["\u9B67", "\u9B67"], /* CJK Ideograph */ + ["\u9B68", "\u9B68"], /* CJK Ideograph */ + ["\u9B69", "\u9B69"], /* CJK Ideograph */ + ["\u9B6A", "\u9B6A"], /* CJK Ideograph */ + ["\u9B6B", "\u9B6B"], /* CJK Ideograph */ + ["\u9B6C", "\u9B6C"], /* CJK Ideograph */ + ["\u9B6D", "\u9B6D"], /* CJK Ideograph */ + ["\u9B6E", "\u9B6E"], /* CJK Ideograph */ + ["\u9B6F", "\u9B6F"], /* CJK Ideograph */ + ["\u9B70", "\u9B70"], /* CJK Ideograph */ + ["\u9B71", "\u9B71"], /* CJK Ideograph */ + ["\u9B72", "\u9B72"], /* CJK Ideograph */ + ["\u9B73", "\u9B73"], /* CJK Ideograph */ + ["\u9B74", "\u9B74"], /* CJK Ideograph */ + ["\u9B75", "\u9B75"], /* CJK Ideograph */ + ["\u9B76", "\u9B76"], /* CJK Ideograph */ + ["\u9B77", "\u9B77"], /* CJK Ideograph */ + ["\u9B78", "\u9B78"], /* CJK Ideograph */ + ["\u9B79", "\u9B79"], /* CJK Ideograph */ + ["\u9B7A", "\u9B7A"], /* CJK Ideograph */ + ["\u9B7B", "\u9B7B"], /* CJK Ideograph */ + ["\u9B7C", "\u9B7C"], /* CJK Ideograph */ + ["\u9B7D", "\u9B7D"], /* CJK Ideograph */ + ["\u9B7E", "\u9B7E"], /* CJK Ideograph */ + ["\u9B7F", "\u9B7F"], /* CJK Ideograph */ + ["\u9B80", "\u9B80"], /* CJK Ideograph */ + ["\u9B81", "\u9B81"], /* CJK Ideograph */ + ["\u9B82", "\u9B82"], /* CJK Ideograph */ + ["\u9B83", "\u9B83"], /* CJK Ideograph */ + ["\u9B84", "\u9B84"], /* CJK Ideograph */ + ["\u9B85", "\u9B85"], /* CJK Ideograph */ + ["\u9B86", "\u9B86"], /* CJK Ideograph */ + ["\u9B87", "\u9B87"], /* CJK Ideograph */ + ["\u9B88", "\u9B88"], /* CJK Ideograph */ + ["\u9B89", "\u9B89"], /* CJK Ideograph */ + ["\u9B8A", "\u9B8A"], /* CJK Ideograph */ + ["\u9B8B", "\u9B8B"], /* CJK Ideograph */ + ["\u9B8C", "\u9B8C"], /* CJK Ideograph */ + ["\u9B8D", "\u9B8D"], /* CJK Ideograph */ + ["\u9B8E", "\u9B8E"], /* CJK Ideograph */ + ["\u9B8F", "\u9B8F"], /* CJK Ideograph */ + ["\u9B90", "\u9B90"], /* CJK Ideograph */ + ["\u9B91", "\u9B91"], /* CJK Ideograph */ + ["\u9B92", "\u9B92"], /* CJK Ideograph */ + ["\u9B93", "\u9B93"], /* CJK Ideograph */ + ["\u9B94", "\u9B94"], /* CJK Ideograph */ + ["\u9B95", "\u9B95"], /* CJK Ideograph */ + ["\u9B96", "\u9B96"], /* CJK Ideograph */ + ["\u9B97", "\u9B97"], /* CJK Ideograph */ + ["\u9B98", "\u9B98"], /* CJK Ideograph */ + ["\u9B99", "\u9B99"], /* CJK Ideograph */ + ["\u9B9A", "\u9B9A"], /* CJK Ideograph */ + ["\u9B9B", "\u9B9B"], /* CJK Ideograph */ + ["\u9B9C", "\u9B9C"], /* CJK Ideograph */ + ["\u9B9D", "\u9B9D"], /* CJK Ideograph */ + ["\u9B9E", "\u9B9E"], /* CJK Ideograph */ + ["\u9B9F", "\u9B9F"], /* CJK Ideograph */ + ["\u9BA0", "\u9BA0"], /* CJK Ideograph */ + ["\u9BA1", "\u9BA1"], /* CJK Ideograph */ + ["\u9BA2", "\u9BA2"], /* CJK Ideograph */ + ["\u9BA3", "\u9BA3"], /* CJK Ideograph */ + ["\u9BA4", "\u9BA4"], /* CJK Ideograph */ + ["\u9BA5", "\u9BA5"], /* CJK Ideograph */ + ["\u9BA6", "\u9BA6"], /* CJK Ideograph */ + ["\u9BA7", "\u9BA7"], /* CJK Ideograph */ + ["\u9BA8", "\u9BA8"], /* CJK Ideograph */ + ["\u9BA9", "\u9BA9"], /* CJK Ideograph */ + ["\u9BAA", "\u9BAA"], /* CJK Ideograph */ + ["\u9BAB", "\u9BAB"], /* CJK Ideograph */ + ["\u9BAC", "\u9BAC"], /* CJK Ideograph */ + ["\u9BAD", "\u9BAD"], /* CJK Ideograph */ + ["\u9BAE", "\u9BAE"], /* CJK Ideograph */ + ["\u9BAF", "\u9BAF"], /* CJK Ideograph */ + ["\u9BB0", "\u9BB0"], /* CJK Ideograph */ + ["\u9BB1", "\u9BB1"], /* CJK Ideograph */ + ["\u9BB2", "\u9BB2"], /* CJK Ideograph */ + ["\u9BB3", "\u9BB3"], /* CJK Ideograph */ + ["\u9BB4", "\u9BB4"], /* CJK Ideograph */ + ["\u9BB5", "\u9BB5"], /* CJK Ideograph */ + ["\u9BB6", "\u9BB6"], /* CJK Ideograph */ + ["\u9BB7", "\u9BB7"], /* CJK Ideograph */ + ["\u9BB8", "\u9BB8"], /* CJK Ideograph */ + ["\u9BB9", "\u9BB9"], /* CJK Ideograph */ + ["\u9BBA", "\u9BBA"], /* CJK Ideograph */ + ["\u9BBB", "\u9BBB"], /* CJK Ideograph */ + ["\u9BBC", "\u9BBC"], /* CJK Ideograph */ + ["\u9BBD", "\u9BBD"], /* CJK Ideograph */ + ["\u9BBE", "\u9BBE"], /* CJK Ideograph */ + ["\u9BBF", "\u9BBF"], /* CJK Ideograph */ + ["\u9BC0", "\u9BC0"], /* CJK Ideograph */ + ["\u9BC1", "\u9BC1"], /* CJK Ideograph */ + ["\u9BC2", "\u9BC2"], /* CJK Ideograph */ + ["\u9BC3", "\u9BC3"], /* CJK Ideograph */ + ["\u9BC4", "\u9BC4"], /* CJK Ideograph */ + ["\u9BC5", "\u9BC5"], /* CJK Ideograph */ + ["\u9BC6", "\u9BC6"], /* CJK Ideograph */ + ["\u9BC7", "\u9BC7"], /* CJK Ideograph */ + ["\u9BC8", "\u9BC8"], /* CJK Ideograph */ + ["\u9BC9", "\u9BC9"], /* CJK Ideograph */ + ["\u9BCA", "\u9BCA"], /* CJK Ideograph */ + ["\u9BCB", "\u9BCB"], /* CJK Ideograph */ + ["\u9BCC", "\u9BCC"], /* CJK Ideograph */ + ["\u9BCD", "\u9BCD"], /* CJK Ideograph */ + ["\u9BCE", "\u9BCE"], /* CJK Ideograph */ + ["\u9BCF", "\u9BCF"], /* CJK Ideograph */ + ["\u9BD0", "\u9BD0"], /* CJK Ideograph */ + ["\u9BD1", "\u9BD1"], /* CJK Ideograph */ + ["\u9BD2", "\u9BD2"], /* CJK Ideograph */ + ["\u9BD3", "\u9BD3"], /* CJK Ideograph */ + ["\u9BD4", "\u9BD4"], /* CJK Ideograph */ + ["\u9BD5", "\u9BD5"], /* CJK Ideograph */ + ["\u9BD6", "\u9BD6"], /* CJK Ideograph */ + ["\u9BD7", "\u9BD7"], /* CJK Ideograph */ + ["\u9BD8", "\u9BD8"], /* CJK Ideograph */ + ["\u9BD9", "\u9BD9"], /* CJK Ideograph */ + ["\u9BDA", "\u9BDA"], /* CJK Ideograph */ + ["\u9BDB", "\u9BDB"], /* CJK Ideograph */ + ["\u9BDC", "\u9BDC"], /* CJK Ideograph */ + ["\u9BDD", "\u9BDD"], /* CJK Ideograph */ + ["\u9BDE", "\u9BDE"], /* CJK Ideograph */ + ["\u9BDF", "\u9BDF"], /* CJK Ideograph */ + ["\u9BE0", "\u9BE0"], /* CJK Ideograph */ + ["\u9BE1", "\u9BE1"], /* CJK Ideograph */ + ["\u9BE2", "\u9BE2"], /* CJK Ideograph */ + ["\u9BE3", "\u9BE3"], /* CJK Ideograph */ + ["\u9BE4", "\u9BE4"], /* CJK Ideograph */ + ["\u9BE5", "\u9BE5"], /* CJK Ideograph */ + ["\u9BE6", "\u9BE6"], /* CJK Ideograph */ + ["\u9BE7", "\u9BE7"], /* CJK Ideograph */ + ["\u9BE8", "\u9BE8"], /* CJK Ideograph */ + ["\u9BE9", "\u9BE9"], /* CJK Ideograph */ + ["\u9BEA", "\u9BEA"], /* CJK Ideograph */ + ["\u9BEB", "\u9BEB"], /* CJK Ideograph */ + ["\u9BEC", "\u9BEC"], /* CJK Ideograph */ + ["\u9BED", "\u9BED"], /* CJK Ideograph */ + ["\u9BEE", "\u9BEE"], /* CJK Ideograph */ + ["\u9BEF", "\u9BEF"], /* CJK Ideograph */ + ["\u9BF0", "\u9BF0"], /* CJK Ideograph */ + ["\u9BF1", "\u9BF1"], /* CJK Ideograph */ + ["\u9BF2", "\u9BF2"], /* CJK Ideograph */ + ["\u9BF3", "\u9BF3"], /* CJK Ideograph */ + ["\u9BF4", "\u9BF4"], /* CJK Ideograph */ + ["\u9BF5", "\u9BF5"], /* CJK Ideograph */ + ["\u9BF6", "\u9BF6"], /* CJK Ideograph */ + ["\u9BF7", "\u9BF7"], /* CJK Ideograph */ + ["\u9BF8", "\u9BF8"], /* CJK Ideograph */ + ["\u9BF9", "\u9BF9"], /* CJK Ideograph */ + ["\u9BFA", "\u9BFA"], /* CJK Ideograph */ + ["\u9BFB", "\u9BFB"], /* CJK Ideograph */ + ["\u9BFC", "\u9BFC"], /* CJK Ideograph */ + ["\u9BFD", "\u9BFD"], /* CJK Ideograph */ + ["\u9BFE", "\u9BFE"], /* CJK Ideograph */ + ["\u9BFF", "\u9BFF"], /* CJK Ideograph */ + ["\u9C00", "\u9C00"], /* CJK Ideograph */ + ["\u9C01", "\u9C01"], /* CJK Ideograph */ + ["\u9C02", "\u9C02"], /* CJK Ideograph */ + ["\u9C03", "\u9C03"], /* CJK Ideograph */ + ["\u9C04", "\u9C04"], /* CJK Ideograph */ + ["\u9C05", "\u9C05"], /* CJK Ideograph */ + ["\u9C06", "\u9C06"], /* CJK Ideograph */ + ["\u9C07", "\u9C07"], /* CJK Ideograph */ + ["\u9C08", "\u9C08"], /* CJK Ideograph */ + ["\u9C09", "\u9C09"], /* CJK Ideograph */ + ["\u9C0A", "\u9C0A"], /* CJK Ideograph */ + ["\u9C0B", "\u9C0B"], /* CJK Ideograph */ + ["\u9C0C", "\u9C0C"], /* CJK Ideograph */ + ["\u9C0D", "\u9C0D"], /* CJK Ideograph */ + ["\u9C0E", "\u9C0E"], /* CJK Ideograph */ + ["\u9C0F", "\u9C0F"], /* CJK Ideograph */ + ["\u9C10", "\u9C10"], /* CJK Ideograph */ + ["\u9C11", "\u9C11"], /* CJK Ideograph */ + ["\u9C12", "\u9C12"], /* CJK Ideograph */ + ["\u9C13", "\u9C13"], /* CJK Ideograph */ + ["\u9C14", "\u9C14"], /* CJK Ideograph */ + ["\u9C15", "\u9C15"], /* CJK Ideograph */ + ["\u9C16", "\u9C16"], /* CJK Ideograph */ + ["\u9C17", "\u9C17"], /* CJK Ideograph */ + ["\u9C18", "\u9C18"], /* CJK Ideograph */ + ["\u9C19", "\u9C19"], /* CJK Ideograph */ + ["\u9C1A", "\u9C1A"], /* CJK Ideograph */ + ["\u9C1B", "\u9C1B"], /* CJK Ideograph */ + ["\u9C1C", "\u9C1C"], /* CJK Ideograph */ + ["\u9C1D", "\u9C1D"], /* CJK Ideograph */ + ["\u9C1E", "\u9C1E"], /* CJK Ideograph */ + ["\u9C1F", "\u9C1F"], /* CJK Ideograph */ + ["\u9C20", "\u9C20"], /* CJK Ideograph */ + ["\u9C21", "\u9C21"], /* CJK Ideograph */ + ["\u9C22", "\u9C22"], /* CJK Ideograph */ + ["\u9C23", "\u9C23"], /* CJK Ideograph */ + ["\u9C24", "\u9C24"], /* CJK Ideograph */ + ["\u9C25", "\u9C25"], /* CJK Ideograph */ + ["\u9C26", "\u9C26"], /* CJK Ideograph */ + ["\u9C27", "\u9C27"], /* CJK Ideograph */ + ["\u9C28", "\u9C28"], /* CJK Ideograph */ + ["\u9C29", "\u9C29"], /* CJK Ideograph */ + ["\u9C2A", "\u9C2A"], /* CJK Ideograph */ + ["\u9C2B", "\u9C2B"], /* CJK Ideograph */ + ["\u9C2C", "\u9C2C"], /* CJK Ideograph */ + ["\u9C2D", "\u9C2D"], /* CJK Ideograph */ + ["\u9C2E", "\u9C2E"], /* CJK Ideograph */ + ["\u9C2F", "\u9C2F"], /* CJK Ideograph */ + ["\u9C30", "\u9C30"], /* CJK Ideograph */ + ["\u9C31", "\u9C31"], /* CJK Ideograph */ + ["\u9C32", "\u9C32"], /* CJK Ideograph */ + ["\u9C33", "\u9C33"], /* CJK Ideograph */ + ["\u9C34", "\u9C34"], /* CJK Ideograph */ + ["\u9C35", "\u9C35"], /* CJK Ideograph */ + ["\u9C36", "\u9C36"], /* CJK Ideograph */ + ["\u9C37", "\u9C37"], /* CJK Ideograph */ + ["\u9C38", "\u9C38"], /* CJK Ideograph */ + ["\u9C39", "\u9C39"], /* CJK Ideograph */ + ["\u9C3A", "\u9C3A"], /* CJK Ideograph */ + ["\u9C3B", "\u9C3B"], /* CJK Ideograph */ + ["\u9C3C", "\u9C3C"], /* CJK Ideograph */ + ["\u9C3D", "\u9C3D"], /* CJK Ideograph */ + ["\u9C3E", "\u9C3E"], /* CJK Ideograph */ + ["\u9C3F", "\u9C3F"], /* CJK Ideograph */ + ["\u9C40", "\u9C40"], /* CJK Ideograph */ + ["\u9C41", "\u9C41"], /* CJK Ideograph */ + ["\u9C42", "\u9C42"], /* CJK Ideograph */ + ["\u9C43", "\u9C43"], /* CJK Ideograph */ + ["\u9C44", "\u9C44"], /* CJK Ideograph */ + ["\u9C45", "\u9C45"], /* CJK Ideograph */ + ["\u9C46", "\u9C46"], /* CJK Ideograph */ + ["\u9C47", "\u9C47"], /* CJK Ideograph */ + ["\u9C48", "\u9C48"], /* CJK Ideograph */ + ["\u9C49", "\u9C49"], /* CJK Ideograph */ + ["\u9C4A", "\u9C4A"], /* CJK Ideograph */ + ["\u9C4B", "\u9C4B"], /* CJK Ideograph */ + ["\u9C4C", "\u9C4C"], /* CJK Ideograph */ + ["\u9C4D", "\u9C4D"], /* CJK Ideograph */ + ["\u9C4E", "\u9C4E"], /* CJK Ideograph */ + ["\u9C4F", "\u9C4F"], /* CJK Ideograph */ + ["\u9C50", "\u9C50"], /* CJK Ideograph */ + ["\u9C51", "\u9C51"], /* CJK Ideograph */ + ["\u9C52", "\u9C52"], /* CJK Ideograph */ + ["\u9C53", "\u9C53"], /* CJK Ideograph */ + ["\u9C54", "\u9C54"], /* CJK Ideograph */ + ["\u9C55", "\u9C55"], /* CJK Ideograph */ + ["\u9C56", "\u9C56"], /* CJK Ideograph */ + ["\u9C57", "\u9C57"], /* CJK Ideograph */ + ["\u9C58", "\u9C58"], /* CJK Ideograph */ + ["\u9C59", "\u9C59"], /* CJK Ideograph */ + ["\u9C5A", "\u9C5A"], /* CJK Ideograph */ + ["\u9C5B", "\u9C5B"], /* CJK Ideograph */ + ["\u9C5C", "\u9C5C"], /* CJK Ideograph */ + ["\u9C5D", "\u9C5D"], /* CJK Ideograph */ + ["\u9C5E", "\u9C5E"], /* CJK Ideograph */ + ["\u9C5F", "\u9C5F"], /* CJK Ideograph */ + ["\u9C60", "\u9C60"], /* CJK Ideograph */ + ["\u9C61", "\u9C61"], /* CJK Ideograph */ + ["\u9C62", "\u9C62"], /* CJK Ideograph */ + ["\u9C63", "\u9C63"], /* CJK Ideograph */ + ["\u9C64", "\u9C64"], /* CJK Ideograph */ + ["\u9C65", "\u9C65"], /* CJK Ideograph */ + ["\u9C66", "\u9C66"], /* CJK Ideograph */ + ["\u9C67", "\u9C67"], /* CJK Ideograph */ + ["\u9C68", "\u9C68"], /* CJK Ideograph */ + ["\u9C69", "\u9C69"], /* CJK Ideograph */ + ["\u9C6A", "\u9C6A"], /* CJK Ideograph */ + ["\u9C6B", "\u9C6B"], /* CJK Ideograph */ + ["\u9C6C", "\u9C6C"], /* CJK Ideograph */ + ["\u9C6D", "\u9C6D"], /* CJK Ideograph */ + ["\u9C6E", "\u9C6E"], /* CJK Ideograph */ + ["\u9C6F", "\u9C6F"], /* CJK Ideograph */ + ["\u9C70", "\u9C70"], /* CJK Ideograph */ + ["\u9C71", "\u9C71"], /* CJK Ideograph */ + ["\u9C72", "\u9C72"], /* CJK Ideograph */ + ["\u9C73", "\u9C73"], /* CJK Ideograph */ + ["\u9C74", "\u9C74"], /* CJK Ideograph */ + ["\u9C75", "\u9C75"], /* CJK Ideograph */ + ["\u9C76", "\u9C76"], /* CJK Ideograph */ + ["\u9C77", "\u9C77"], /* CJK Ideograph */ + ["\u9C78", "\u9C78"], /* CJK Ideograph */ + ["\u9C79", "\u9C79"], /* CJK Ideograph */ + ["\u9C7A", "\u9C7A"], /* CJK Ideograph */ + ["\u9C7B", "\u9C7B"], /* CJK Ideograph */ + ["\u9C7C", "\u9C7C"], /* CJK Ideograph */ + ["\u9C7D", "\u9C7D"], /* CJK Ideograph */ + ["\u9C7E", "\u9C7E"], /* CJK Ideograph */ + ["\u9C7F", "\u9C7F"], /* CJK Ideograph */ + ["\u9C80", "\u9C80"], /* CJK Ideograph */ + ["\u9C81", "\u9C81"], /* CJK Ideograph */ + ["\u9C82", "\u9C82"], /* CJK Ideograph */ + ["\u9C83", "\u9C83"], /* CJK Ideograph */ + ["\u9C84", "\u9C84"], /* CJK Ideograph */ + ["\u9C85", "\u9C85"], /* CJK Ideograph */ + ["\u9C86", "\u9C86"], /* CJK Ideograph */ + ["\u9C87", "\u9C87"], /* CJK Ideograph */ + ["\u9C88", "\u9C88"], /* CJK Ideograph */ + ["\u9C89", "\u9C89"], /* CJK Ideograph */ + ["\u9C8A", "\u9C8A"], /* CJK Ideograph */ + ["\u9C8B", "\u9C8B"], /* CJK Ideograph */ + ["\u9C8C", "\u9C8C"], /* CJK Ideograph */ + ["\u9C8D", "\u9C8D"], /* CJK Ideograph */ + ["\u9C8E", "\u9C8E"], /* CJK Ideograph */ + ["\u9C8F", "\u9C8F"], /* CJK Ideograph */ + ["\u9C90", "\u9C90"], /* CJK Ideograph */ + ["\u9C91", "\u9C91"], /* CJK Ideograph */ + ["\u9C92", "\u9C92"], /* CJK Ideograph */ + ["\u9C93", "\u9C93"], /* CJK Ideograph */ + ["\u9C94", "\u9C94"], /* CJK Ideograph */ + ["\u9C95", "\u9C95"], /* CJK Ideograph */ + ["\u9C96", "\u9C96"], /* CJK Ideograph */ + ["\u9C97", "\u9C97"], /* CJK Ideograph */ + ["\u9C98", "\u9C98"], /* CJK Ideograph */ + ["\u9C99", "\u9C99"], /* CJK Ideograph */ + ["\u9C9A", "\u9C9A"], /* CJK Ideograph */ + ["\u9C9B", "\u9C9B"], /* CJK Ideograph */ + ["\u9C9C", "\u9C9C"], /* CJK Ideograph */ + ["\u9C9D", "\u9C9D"], /* CJK Ideograph */ + ["\u9C9E", "\u9C9E"], /* CJK Ideograph */ + ["\u9C9F", "\u9C9F"], /* CJK Ideograph */ + ["\u9CA0", "\u9CA0"], /* CJK Ideograph */ + ["\u9CA1", "\u9CA1"], /* CJK Ideograph */ + ["\u9CA2", "\u9CA2"], /* CJK Ideograph */ + ["\u9CA3", "\u9CA3"], /* CJK Ideograph */ + ["\u9CA4", "\u9CA4"], /* CJK Ideograph */ + ["\u9CA5", "\u9CA5"], /* CJK Ideograph */ + ["\u9CA6", "\u9CA6"], /* CJK Ideograph */ + ["\u9CA7", "\u9CA7"], /* CJK Ideograph */ + ["\u9CA8", "\u9CA8"], /* CJK Ideograph */ + ["\u9CA9", "\u9CA9"], /* CJK Ideograph */ + ["\u9CAA", "\u9CAA"], /* CJK Ideograph */ + ["\u9CAB", "\u9CAB"], /* CJK Ideograph */ + ["\u9CAC", "\u9CAC"], /* CJK Ideograph */ + ["\u9CAD", "\u9CAD"], /* CJK Ideograph */ + ["\u9CAE", "\u9CAE"], /* CJK Ideograph */ + ["\u9CAF", "\u9CAF"], /* CJK Ideograph */ + ["\u9CB0", "\u9CB0"], /* CJK Ideograph */ + ["\u9CB1", "\u9CB1"], /* CJK Ideograph */ + ["\u9CB2", "\u9CB2"], /* CJK Ideograph */ + ["\u9CB3", "\u9CB3"], /* CJK Ideograph */ + ["\u9CB4", "\u9CB4"], /* CJK Ideograph */ + ["\u9CB5", "\u9CB5"], /* CJK Ideograph */ + ["\u9CB6", "\u9CB6"], /* CJK Ideograph */ + ["\u9CB7", "\u9CB7"], /* CJK Ideograph */ + ["\u9CB8", "\u9CB8"], /* CJK Ideograph */ + ["\u9CB9", "\u9CB9"], /* CJK Ideograph */ + ["\u9CBA", "\u9CBA"], /* CJK Ideograph */ + ["\u9CBB", "\u9CBB"], /* CJK Ideograph */ + ["\u9CBC", "\u9CBC"], /* CJK Ideograph */ + ["\u9CBD", "\u9CBD"], /* CJK Ideograph */ + ["\u9CBE", "\u9CBE"], /* CJK Ideograph */ + ["\u9CBF", "\u9CBF"], /* CJK Ideograph */ + ["\u9CC0", "\u9CC0"], /* CJK Ideograph */ + ["\u9CC1", "\u9CC1"], /* CJK Ideograph */ + ["\u9CC2", "\u9CC2"], /* CJK Ideograph */ + ["\u9CC3", "\u9CC3"], /* CJK Ideograph */ + ["\u9CC4", "\u9CC4"], /* CJK Ideograph */ + ["\u9CC5", "\u9CC5"], /* CJK Ideograph */ + ["\u9CC6", "\u9CC6"], /* CJK Ideograph */ + ["\u9CC7", "\u9CC7"], /* CJK Ideograph */ + ["\u9CC8", "\u9CC8"], /* CJK Ideograph */ + ["\u9CC9", "\u9CC9"], /* CJK Ideograph */ + ["\u9CCA", "\u9CCA"], /* CJK Ideograph */ + ["\u9CCB", "\u9CCB"], /* CJK Ideograph */ + ["\u9CCC", "\u9CCC"], /* CJK Ideograph */ + ["\u9CCD", "\u9CCD"], /* CJK Ideograph */ + ["\u9CCE", "\u9CCE"], /* CJK Ideograph */ + ["\u9CCF", "\u9CCF"], /* CJK Ideograph */ + ["\u9CD0", "\u9CD0"], /* CJK Ideograph */ + ["\u9CD1", "\u9CD1"], /* CJK Ideograph */ + ["\u9CD2", "\u9CD2"], /* CJK Ideograph */ + ["\u9CD3", "\u9CD3"], /* CJK Ideograph */ + ["\u9CD4", "\u9CD4"], /* CJK Ideograph */ + ["\u9CD5", "\u9CD5"], /* CJK Ideograph */ + ["\u9CD6", "\u9CD6"], /* CJK Ideograph */ + ["\u9CD7", "\u9CD7"], /* CJK Ideograph */ + ["\u9CD8", "\u9CD8"], /* CJK Ideograph */ + ["\u9CD9", "\u9CD9"], /* CJK Ideograph */ + ["\u9CDA", "\u9CDA"], /* CJK Ideograph */ + ["\u9CDB", "\u9CDB"], /* CJK Ideograph */ + ["\u9CDC", "\u9CDC"], /* CJK Ideograph */ + ["\u9CDD", "\u9CDD"], /* CJK Ideograph */ + ["\u9CDE", "\u9CDE"], /* CJK Ideograph */ + ["\u9CDF", "\u9CDF"], /* CJK Ideograph */ + ["\u9CE0", "\u9CE0"], /* CJK Ideograph */ + ["\u9CE1", "\u9CE1"], /* CJK Ideograph */ + ["\u9CE2", "\u9CE2"], /* CJK Ideograph */ + ["\u9CE3", "\u9CE3"], /* CJK Ideograph */ + ["\u9CE4", "\u9CE4"], /* CJK Ideograph */ + ["\u9CE5", "\u9CE5"], /* CJK Ideograph */ + ["\u9CE6", "\u9CE6"], /* CJK Ideograph */ + ["\u9CE7", "\u9CE7"], /* CJK Ideograph */ + ["\u9CE8", "\u9CE8"], /* CJK Ideograph */ + ["\u9CE9", "\u9CE9"], /* CJK Ideograph */ + ["\u9CEA", "\u9CEA"], /* CJK Ideograph */ + ["\u9CEB", "\u9CEB"], /* CJK Ideograph */ + ["\u9CEC", "\u9CEC"], /* CJK Ideograph */ + ["\u9CED", "\u9CED"], /* CJK Ideograph */ + ["\u9CEE", "\u9CEE"], /* CJK Ideograph */ + ["\u9CEF", "\u9CEF"], /* CJK Ideograph */ + ["\u9CF0", "\u9CF0"], /* CJK Ideograph */ + ["\u9CF1", "\u9CF1"], /* CJK Ideograph */ + ["\u9CF2", "\u9CF2"], /* CJK Ideograph */ + ["\u9CF3", "\u9CF3"], /* CJK Ideograph */ + ["\u9CF4", "\u9CF4"], /* CJK Ideograph */ + ["\u9CF5", "\u9CF5"], /* CJK Ideograph */ + ["\u9CF6", "\u9CF6"], /* CJK Ideograph */ + ["\u9CF7", "\u9CF7"], /* CJK Ideograph */ + ["\u9CF8", "\u9CF8"], /* CJK Ideograph */ + ["\u9CF9", "\u9CF9"], /* CJK Ideograph */ + ["\u9CFA", "\u9CFA"], /* CJK Ideograph */ + ["\u9CFB", "\u9CFB"], /* CJK Ideograph */ + ["\u9CFC", "\u9CFC"], /* CJK Ideograph */ + ["\u9CFD", "\u9CFD"], /* CJK Ideograph */ + ["\u9CFE", "\u9CFE"], /* CJK Ideograph */ + ["\u9CFF", "\u9CFF"], /* CJK Ideograph */ + ["\u9D00", "\u9D00"], /* CJK Ideograph */ + ["\u9D01", "\u9D01"], /* CJK Ideograph */ + ["\u9D02", "\u9D02"], /* CJK Ideograph */ + ["\u9D03", "\u9D03"], /* CJK Ideograph */ + ["\u9D04", "\u9D04"], /* CJK Ideograph */ + ["\u9D05", "\u9D05"], /* CJK Ideograph */ + ["\u9D06", "\u9D06"], /* CJK Ideograph */ + ["\u9D07", "\u9D07"], /* CJK Ideograph */ + ["\u9D08", "\u9D08"], /* CJK Ideograph */ + ["\u9D09", "\u9D09"], /* CJK Ideograph */ + ["\u9D0A", "\u9D0A"], /* CJK Ideograph */ + ["\u9D0B", "\u9D0B"], /* CJK Ideograph */ + ["\u9D0C", "\u9D0C"], /* CJK Ideograph */ + ["\u9D0D", "\u9D0D"], /* CJK Ideograph */ + ["\u9D0E", "\u9D0E"], /* CJK Ideograph */ + ["\u9D0F", "\u9D0F"], /* CJK Ideograph */ + ["\u9D10", "\u9D10"], /* CJK Ideograph */ + ["\u9D11", "\u9D11"], /* CJK Ideograph */ + ["\u9D12", "\u9D12"], /* CJK Ideograph */ + ["\u9D13", "\u9D13"], /* CJK Ideograph */ + ["\u9D14", "\u9D14"], /* CJK Ideograph */ + ["\u9D15", "\u9D15"], /* CJK Ideograph */ + ["\u9D16", "\u9D16"], /* CJK Ideograph */ + ["\u9D17", "\u9D17"], /* CJK Ideograph */ + ["\u9D18", "\u9D18"], /* CJK Ideograph */ + ["\u9D19", "\u9D19"], /* CJK Ideograph */ + ["\u9D1A", "\u9D1A"], /* CJK Ideograph */ + ["\u9D1B", "\u9D1B"], /* CJK Ideograph */ + ["\u9D1C", "\u9D1C"], /* CJK Ideograph */ + ["\u9D1D", "\u9D1D"], /* CJK Ideograph */ + ["\u9D1E", "\u9D1E"], /* CJK Ideograph */ + ["\u9D1F", "\u9D1F"], /* CJK Ideograph */ + ["\u9D20", "\u9D20"], /* CJK Ideograph */ + ["\u9D21", "\u9D21"], /* CJK Ideograph */ + ["\u9D22", "\u9D22"], /* CJK Ideograph */ + ["\u9D23", "\u9D23"], /* CJK Ideograph */ + ["\u9D24", "\u9D24"], /* CJK Ideograph */ + ["\u9D25", "\u9D25"], /* CJK Ideograph */ + ["\u9D26", "\u9D26"], /* CJK Ideograph */ + ["\u9D27", "\u9D27"], /* CJK Ideograph */ + ["\u9D28", "\u9D28"], /* CJK Ideograph */ + ["\u9D29", "\u9D29"], /* CJK Ideograph */ + ["\u9D2A", "\u9D2A"], /* CJK Ideograph */ + ["\u9D2B", "\u9D2B"], /* CJK Ideograph */ + ["\u9D2C", "\u9D2C"], /* CJK Ideograph */ + ["\u9D2D", "\u9D2D"], /* CJK Ideograph */ + ["\u9D2E", "\u9D2E"], /* CJK Ideograph */ + ["\u9D2F", "\u9D2F"], /* CJK Ideograph */ + ["\u9D30", "\u9D30"], /* CJK Ideograph */ + ["\u9D31", "\u9D31"], /* CJK Ideograph */ + ["\u9D32", "\u9D32"], /* CJK Ideograph */ + ["\u9D33", "\u9D33"], /* CJK Ideograph */ + ["\u9D34", "\u9D34"], /* CJK Ideograph */ + ["\u9D35", "\u9D35"], /* CJK Ideograph */ + ["\u9D36", "\u9D36"], /* CJK Ideograph */ + ["\u9D37", "\u9D37"], /* CJK Ideograph */ + ["\u9D38", "\u9D38"], /* CJK Ideograph */ + ["\u9D39", "\u9D39"], /* CJK Ideograph */ + ["\u9D3A", "\u9D3A"], /* CJK Ideograph */ + ["\u9D3B", "\u9D3B"], /* CJK Ideograph */ + ["\u9D3C", "\u9D3C"], /* CJK Ideograph */ + ["\u9D3D", "\u9D3D"], /* CJK Ideograph */ + ["\u9D3E", "\u9D3E"], /* CJK Ideograph */ + ["\u9D3F", "\u9D3F"], /* CJK Ideograph */ + ["\u9D40", "\u9D40"], /* CJK Ideograph */ + ["\u9D41", "\u9D41"], /* CJK Ideograph */ + ["\u9D42", "\u9D42"], /* CJK Ideograph */ + ["\u9D43", "\u9D43"], /* CJK Ideograph */ + ["\u9D44", "\u9D44"], /* CJK Ideograph */ + ["\u9D45", "\u9D45"], /* CJK Ideograph */ + ["\u9D46", "\u9D46"], /* CJK Ideograph */ + ["\u9D47", "\u9D47"], /* CJK Ideograph */ + ["\u9D48", "\u9D48"], /* CJK Ideograph */ + ["\u9D49", "\u9D49"], /* CJK Ideograph */ + ["\u9D4A", "\u9D4A"], /* CJK Ideograph */ + ["\u9D4B", "\u9D4B"], /* CJK Ideograph */ + ["\u9D4C", "\u9D4C"], /* CJK Ideograph */ + ["\u9D4D", "\u9D4D"], /* CJK Ideograph */ + ["\u9D4E", "\u9D4E"], /* CJK Ideograph */ + ["\u9D4F", "\u9D4F"], /* CJK Ideograph */ + ["\u9D50", "\u9D50"], /* CJK Ideograph */ + ["\u9D51", "\u9D51"], /* CJK Ideograph */ + ["\u9D52", "\u9D52"], /* CJK Ideograph */ + ["\u9D53", "\u9D53"], /* CJK Ideograph */ + ["\u9D54", "\u9D54"], /* CJK Ideograph */ + ["\u9D55", "\u9D55"], /* CJK Ideograph */ + ["\u9D56", "\u9D56"], /* CJK Ideograph */ + ["\u9D57", "\u9D57"], /* CJK Ideograph */ + ["\u9D58", "\u9D58"], /* CJK Ideograph */ + ["\u9D59", "\u9D59"], /* CJK Ideograph */ + ["\u9D5A", "\u9D5A"], /* CJK Ideograph */ + ["\u9D5B", "\u9D5B"], /* CJK Ideograph */ + ["\u9D5C", "\u9D5C"], /* CJK Ideograph */ + ["\u9D5D", "\u9D5D"], /* CJK Ideograph */ + ["\u9D5E", "\u9D5E"], /* CJK Ideograph */ + ["\u9D5F", "\u9D5F"], /* CJK Ideograph */ + ["\u9D60", "\u9D60"], /* CJK Ideograph */ + ["\u9D61", "\u9D61"], /* CJK Ideograph */ + ["\u9D62", "\u9D62"], /* CJK Ideograph */ + ["\u9D63", "\u9D63"], /* CJK Ideograph */ + ["\u9D64", "\u9D64"], /* CJK Ideograph */ + ["\u9D65", "\u9D65"], /* CJK Ideograph */ + ["\u9D66", "\u9D66"], /* CJK Ideograph */ + ["\u9D67", "\u9D67"], /* CJK Ideograph */ + ["\u9D68", "\u9D68"], /* CJK Ideograph */ + ["\u9D69", "\u9D69"], /* CJK Ideograph */ + ["\u9D6A", "\u9D6A"], /* CJK Ideograph */ + ["\u9D6B", "\u9D6B"], /* CJK Ideograph */ + ["\u9D6C", "\u9D6C"], /* CJK Ideograph */ + ["\u9D6D", "\u9D6D"], /* CJK Ideograph */ + ["\u9D6E", "\u9D6E"], /* CJK Ideograph */ + ["\u9D6F", "\u9D6F"], /* CJK Ideograph */ + ["\u9D70", "\u9D70"], /* CJK Ideograph */ + ["\u9D71", "\u9D71"], /* CJK Ideograph */ + ["\u9D72", "\u9D72"], /* CJK Ideograph */ + ["\u9D73", "\u9D73"], /* CJK Ideograph */ + ["\u9D74", "\u9D74"], /* CJK Ideograph */ + ["\u9D75", "\u9D75"], /* CJK Ideograph */ + ["\u9D76", "\u9D76"], /* CJK Ideograph */ + ["\u9D77", "\u9D77"], /* CJK Ideograph */ + ["\u9D78", "\u9D78"], /* CJK Ideograph */ + ["\u9D79", "\u9D79"], /* CJK Ideograph */ + ["\u9D7A", "\u9D7A"], /* CJK Ideograph */ + ["\u9D7B", "\u9D7B"], /* CJK Ideograph */ + ["\u9D7C", "\u9D7C"], /* CJK Ideograph */ + ["\u9D7D", "\u9D7D"], /* CJK Ideograph */ + ["\u9D7E", "\u9D7E"], /* CJK Ideograph */ + ["\u9D7F", "\u9D7F"], /* CJK Ideograph */ + ["\u9D80", "\u9D80"], /* CJK Ideograph */ + ["\u9D81", "\u9D81"], /* CJK Ideograph */ + ["\u9D82", "\u9D82"], /* CJK Ideograph */ + ["\u9D83", "\u9D83"], /* CJK Ideograph */ + ["\u9D84", "\u9D84"], /* CJK Ideograph */ + ["\u9D85", "\u9D85"], /* CJK Ideograph */ + ["\u9D86", "\u9D86"], /* CJK Ideograph */ + ["\u9D87", "\u9D87"], /* CJK Ideograph */ + ["\u9D88", "\u9D88"], /* CJK Ideograph */ + ["\u9D89", "\u9D89"], /* CJK Ideograph */ + ["\u9D8A", "\u9D8A"], /* CJK Ideograph */ + ["\u9D8B", "\u9D8B"], /* CJK Ideograph */ + ["\u9D8C", "\u9D8C"], /* CJK Ideograph */ + ["\u9D8D", "\u9D8D"], /* CJK Ideograph */ + ["\u9D8E", "\u9D8E"], /* CJK Ideograph */ + ["\u9D8F", "\u9D8F"], /* CJK Ideograph */ + ["\u9D90", "\u9D90"], /* CJK Ideograph */ + ["\u9D91", "\u9D91"], /* CJK Ideograph */ + ["\u9D92", "\u9D92"], /* CJK Ideograph */ + ["\u9D93", "\u9D93"], /* CJK Ideograph */ + ["\u9D94", "\u9D94"], /* CJK Ideograph */ + ["\u9D95", "\u9D95"], /* CJK Ideograph */ + ["\u9D96", "\u9D96"], /* CJK Ideograph */ + ["\u9D97", "\u9D97"], /* CJK Ideograph */ + ["\u9D98", "\u9D98"], /* CJK Ideograph */ + ["\u9D99", "\u9D99"], /* CJK Ideograph */ + ["\u9D9A", "\u9D9A"], /* CJK Ideograph */ + ["\u9D9B", "\u9D9B"], /* CJK Ideograph */ + ["\u9D9C", "\u9D9C"], /* CJK Ideograph */ + ["\u9D9D", "\u9D9D"], /* CJK Ideograph */ + ["\u9D9E", "\u9D9E"], /* CJK Ideograph */ + ["\u9D9F", "\u9D9F"], /* CJK Ideograph */ + ["\u9DA0", "\u9DA0"], /* CJK Ideograph */ + ["\u9DA1", "\u9DA1"], /* CJK Ideograph */ + ["\u9DA2", "\u9DA2"], /* CJK Ideograph */ + ["\u9DA3", "\u9DA3"], /* CJK Ideograph */ + ["\u9DA4", "\u9DA4"], /* CJK Ideograph */ + ["\u9DA5", "\u9DA5"], /* CJK Ideograph */ + ["\u9DA6", "\u9DA6"], /* CJK Ideograph */ + ["\u9DA7", "\u9DA7"], /* CJK Ideograph */ + ["\u9DA8", "\u9DA8"], /* CJK Ideograph */ + ["\u9DA9", "\u9DA9"], /* CJK Ideograph */ + ["\u9DAA", "\u9DAA"], /* CJK Ideograph */ + ["\u9DAB", "\u9DAB"], /* CJK Ideograph */ + ["\u9DAC", "\u9DAC"], /* CJK Ideograph */ + ["\u9DAD", "\u9DAD"], /* CJK Ideograph */ + ["\u9DAE", "\u9DAE"], /* CJK Ideograph */ + ["\u9DAF", "\u9DAF"], /* CJK Ideograph */ + ["\u9DB0", "\u9DB0"], /* CJK Ideograph */ + ["\u9DB1", "\u9DB1"], /* CJK Ideograph */ + ["\u9DB2", "\u9DB2"], /* CJK Ideograph */ + ["\u9DB3", "\u9DB3"], /* CJK Ideograph */ + ["\u9DB4", "\u9DB4"], /* CJK Ideograph */ + ["\u9DB5", "\u9DB5"], /* CJK Ideograph */ + ["\u9DB6", "\u9DB6"], /* CJK Ideograph */ + ["\u9DB7", "\u9DB7"], /* CJK Ideograph */ + ["\u9DB8", "\u9DB8"], /* CJK Ideograph */ + ["\u9DB9", "\u9DB9"], /* CJK Ideograph */ + ["\u9DBA", "\u9DBA"], /* CJK Ideograph */ + ["\u9DBB", "\u9DBB"], /* CJK Ideograph */ + ["\u9DBC", "\u9DBC"], /* CJK Ideograph */ + ["\u9DBD", "\u9DBD"], /* CJK Ideograph */ + ["\u9DBE", "\u9DBE"], /* CJK Ideograph */ + ["\u9DBF", "\u9DBF"], /* CJK Ideograph */ + ["\u9DC0", "\u9DC0"], /* CJK Ideograph */ + ["\u9DC1", "\u9DC1"], /* CJK Ideograph */ + ["\u9DC2", "\u9DC2"], /* CJK Ideograph */ + ["\u9DC3", "\u9DC3"], /* CJK Ideograph */ + ["\u9DC4", "\u9DC4"], /* CJK Ideograph */ + ["\u9DC5", "\u9DC5"], /* CJK Ideograph */ + ["\u9DC6", "\u9DC6"], /* CJK Ideograph */ + ["\u9DC7", "\u9DC7"], /* CJK Ideograph */ + ["\u9DC8", "\u9DC8"], /* CJK Ideograph */ + ["\u9DC9", "\u9DC9"], /* CJK Ideograph */ + ["\u9DCA", "\u9DCA"], /* CJK Ideograph */ + ["\u9DCB", "\u9DCB"], /* CJK Ideograph */ + ["\u9DCC", "\u9DCC"], /* CJK Ideograph */ + ["\u9DCD", "\u9DCD"], /* CJK Ideograph */ + ["\u9DCE", "\u9DCE"], /* CJK Ideograph */ + ["\u9DCF", "\u9DCF"], /* CJK Ideograph */ + ["\u9DD0", "\u9DD0"], /* CJK Ideograph */ + ["\u9DD1", "\u9DD1"], /* CJK Ideograph */ + ["\u9DD2", "\u9DD2"], /* CJK Ideograph */ + ["\u9DD3", "\u9DD3"], /* CJK Ideograph */ + ["\u9DD4", "\u9DD4"], /* CJK Ideograph */ + ["\u9DD5", "\u9DD5"], /* CJK Ideograph */ + ["\u9DD6", "\u9DD6"], /* CJK Ideograph */ + ["\u9DD7", "\u9DD7"], /* CJK Ideograph */ + ["\u9DD8", "\u9DD8"], /* CJK Ideograph */ + ["\u9DD9", "\u9DD9"], /* CJK Ideograph */ + ["\u9DDA", "\u9DDA"], /* CJK Ideograph */ + ["\u9DDB", "\u9DDB"], /* CJK Ideograph */ + ["\u9DDC", "\u9DDC"], /* CJK Ideograph */ + ["\u9DDD", "\u9DDD"], /* CJK Ideograph */ + ["\u9DDE", "\u9DDE"], /* CJK Ideograph */ + ["\u9DDF", "\u9DDF"], /* CJK Ideograph */ + ["\u9DE0", "\u9DE0"], /* CJK Ideograph */ + ["\u9DE1", "\u9DE1"], /* CJK Ideograph */ + ["\u9DE2", "\u9DE2"], /* CJK Ideograph */ + ["\u9DE3", "\u9DE3"], /* CJK Ideograph */ + ["\u9DE4", "\u9DE4"], /* CJK Ideograph */ + ["\u9DE5", "\u9DE5"], /* CJK Ideograph */ + ["\u9DE6", "\u9DE6"], /* CJK Ideograph */ + ["\u9DE7", "\u9DE7"], /* CJK Ideograph */ + ["\u9DE8", "\u9DE8"], /* CJK Ideograph */ + ["\u9DE9", "\u9DE9"], /* CJK Ideograph */ + ["\u9DEA", "\u9DEA"], /* CJK Ideograph */ + ["\u9DEB", "\u9DEB"], /* CJK Ideograph */ + ["\u9DEC", "\u9DEC"], /* CJK Ideograph */ + ["\u9DED", "\u9DED"], /* CJK Ideograph */ + ["\u9DEE", "\u9DEE"], /* CJK Ideograph */ + ["\u9DEF", "\u9DEF"], /* CJK Ideograph */ + ["\u9DF0", "\u9DF0"], /* CJK Ideograph */ + ["\u9DF1", "\u9DF1"], /* CJK Ideograph */ + ["\u9DF2", "\u9DF2"], /* CJK Ideograph */ + ["\u9DF3", "\u9DF3"], /* CJK Ideograph */ + ["\u9DF4", "\u9DF4"], /* CJK Ideograph */ + ["\u9DF5", "\u9DF5"], /* CJK Ideograph */ + ["\u9DF6", "\u9DF6"], /* CJK Ideograph */ + ["\u9DF7", "\u9DF7"], /* CJK Ideograph */ + ["\u9DF8", "\u9DF8"], /* CJK Ideograph */ + ["\u9DF9", "\u9DF9"], /* CJK Ideograph */ + ["\u9DFA", "\u9DFA"], /* CJK Ideograph */ + ["\u9DFB", "\u9DFB"], /* CJK Ideograph */ + ["\u9DFC", "\u9DFC"], /* CJK Ideograph */ + ["\u9DFD", "\u9DFD"], /* CJK Ideograph */ + ["\u9DFE", "\u9DFE"], /* CJK Ideograph */ + ["\u9DFF", "\u9DFF"], /* CJK Ideograph */ + ["\u9E00", "\u9E00"], /* CJK Ideograph */ + ["\u9E01", "\u9E01"], /* CJK Ideograph */ + ["\u9E02", "\u9E02"], /* CJK Ideograph */ + ["\u9E03", "\u9E03"], /* CJK Ideograph */ + ["\u9E04", "\u9E04"], /* CJK Ideograph */ + ["\u9E05", "\u9E05"], /* CJK Ideograph */ + ["\u9E06", "\u9E06"], /* CJK Ideograph */ + ["\u9E07", "\u9E07"], /* CJK Ideograph */ + ["\u9E08", "\u9E08"], /* CJK Ideograph */ + ["\u9E09", "\u9E09"], /* CJK Ideograph */ + ["\u9E0A", "\u9E0A"], /* CJK Ideograph */ + ["\u9E0B", "\u9E0B"], /* CJK Ideograph */ + ["\u9E0C", "\u9E0C"], /* CJK Ideograph */ + ["\u9E0D", "\u9E0D"], /* CJK Ideograph */ + ["\u9E0E", "\u9E0E"], /* CJK Ideograph */ + ["\u9E0F", "\u9E0F"], /* CJK Ideograph */ + ["\u9E10", "\u9E10"], /* CJK Ideograph */ + ["\u9E11", "\u9E11"], /* CJK Ideograph */ + ["\u9E12", "\u9E12"], /* CJK Ideograph */ + ["\u9E13", "\u9E13"], /* CJK Ideograph */ + ["\u9E14", "\u9E14"], /* CJK Ideograph */ + ["\u9E15", "\u9E15"], /* CJK Ideograph */ + ["\u9E16", "\u9E16"], /* CJK Ideograph */ + ["\u9E17", "\u9E17"], /* CJK Ideograph */ + ["\u9E18", "\u9E18"], /* CJK Ideograph */ + ["\u9E19", "\u9E19"], /* CJK Ideograph */ + ["\u9E1A", "\u9E1A"], /* CJK Ideograph */ + ["\u9E1B", "\u9E1B"], /* CJK Ideograph */ + ["\u9E1C", "\u9E1C"], /* CJK Ideograph */ + ["\u9E1D", "\u9E1D"], /* CJK Ideograph */ + ["\u9E1E", "\u9E1E"], /* CJK Ideograph */ + ["\u9E1F", "\u9E1F"], /* CJK Ideograph */ + ["\u9E20", "\u9E20"], /* CJK Ideograph */ + ["\u9E21", "\u9E21"], /* CJK Ideograph */ + ["\u9E22", "\u9E22"], /* CJK Ideograph */ + ["\u9E23", "\u9E23"], /* CJK Ideograph */ + ["\u9E24", "\u9E24"], /* CJK Ideograph */ + ["\u9E25", "\u9E25"], /* CJK Ideograph */ + ["\u9E26", "\u9E26"], /* CJK Ideograph */ + ["\u9E27", "\u9E27"], /* CJK Ideograph */ + ["\u9E28", "\u9E28"], /* CJK Ideograph */ + ["\u9E29", "\u9E29"], /* CJK Ideograph */ + ["\u9E2A", "\u9E2A"], /* CJK Ideograph */ + ["\u9E2B", "\u9E2B"], /* CJK Ideograph */ + ["\u9E2C", "\u9E2C"], /* CJK Ideograph */ + ["\u9E2D", "\u9E2D"], /* CJK Ideograph */ + ["\u9E2E", "\u9E2E"], /* CJK Ideograph */ + ["\u9E2F", "\u9E2F"], /* CJK Ideograph */ + ["\u9E30", "\u9E30"], /* CJK Ideograph */ + ["\u9E31", "\u9E31"], /* CJK Ideograph */ + ["\u9E32", "\u9E32"], /* CJK Ideograph */ + ["\u9E33", "\u9E33"], /* CJK Ideograph */ + ["\u9E34", "\u9E34"], /* CJK Ideograph */ + ["\u9E35", "\u9E35"], /* CJK Ideograph */ + ["\u9E36", "\u9E36"], /* CJK Ideograph */ + ["\u9E37", "\u9E37"], /* CJK Ideograph */ + ["\u9E38", "\u9E38"], /* CJK Ideograph */ + ["\u9E39", "\u9E39"], /* CJK Ideograph */ + ["\u9E3A", "\u9E3A"], /* CJK Ideograph */ + ["\u9E3B", "\u9E3B"], /* CJK Ideograph */ + ["\u9E3C", "\u9E3C"], /* CJK Ideograph */ + ["\u9E3D", "\u9E3D"], /* CJK Ideograph */ + ["\u9E3E", "\u9E3E"], /* CJK Ideograph */ + ["\u9E3F", "\u9E3F"], /* CJK Ideograph */ + ["\u9E40", "\u9E40"], /* CJK Ideograph */ + ["\u9E41", "\u9E41"], /* CJK Ideograph */ + ["\u9E42", "\u9E42"], /* CJK Ideograph */ + ["\u9E43", "\u9E43"], /* CJK Ideograph */ + ["\u9E44", "\u9E44"], /* CJK Ideograph */ + ["\u9E45", "\u9E45"], /* CJK Ideograph */ + ["\u9E46", "\u9E46"], /* CJK Ideograph */ + ["\u9E47", "\u9E47"], /* CJK Ideograph */ + ["\u9E48", "\u9E48"], /* CJK Ideograph */ + ["\u9E49", "\u9E49"], /* CJK Ideograph */ + ["\u9E4A", "\u9E4A"], /* CJK Ideograph */ + ["\u9E4B", "\u9E4B"], /* CJK Ideograph */ + ["\u9E4C", "\u9E4C"], /* CJK Ideograph */ + ["\u9E4D", "\u9E4D"], /* CJK Ideograph */ + ["\u9E4E", "\u9E4E"], /* CJK Ideograph */ + ["\u9E4F", "\u9E4F"], /* CJK Ideograph */ + ["\u9E50", "\u9E50"], /* CJK Ideograph */ + ["\u9E51", "\u9E51"], /* CJK Ideograph */ + ["\u9E52", "\u9E52"], /* CJK Ideograph */ + ["\u9E53", "\u9E53"], /* CJK Ideograph */ + ["\u9E54", "\u9E54"], /* CJK Ideograph */ + ["\u9E55", "\u9E55"], /* CJK Ideograph */ + ["\u9E56", "\u9E56"], /* CJK Ideograph */ + ["\u9E57", "\u9E57"], /* CJK Ideograph */ + ["\u9E58", "\u9E58"], /* CJK Ideograph */ + ["\u9E59", "\u9E59"], /* CJK Ideograph */ + ["\u9E5A", "\u9E5A"], /* CJK Ideograph */ + ["\u9E5B", "\u9E5B"], /* CJK Ideograph */ + ["\u9E5C", "\u9E5C"], /* CJK Ideograph */ + ["\u9E5D", "\u9E5D"], /* CJK Ideograph */ + ["\u9E5E", "\u9E5E"], /* CJK Ideograph */ + ["\u9E5F", "\u9E5F"], /* CJK Ideograph */ + ["\u9E60", "\u9E60"], /* CJK Ideograph */ + ["\u9E61", "\u9E61"], /* CJK Ideograph */ + ["\u9E62", "\u9E62"], /* CJK Ideograph */ + ["\u9E63", "\u9E63"], /* CJK Ideograph */ + ["\u9E64", "\u9E64"], /* CJK Ideograph */ + ["\u9E65", "\u9E65"], /* CJK Ideograph */ + ["\u9E66", "\u9E66"], /* CJK Ideograph */ + ["\u9E67", "\u9E67"], /* CJK Ideograph */ + ["\u9E68", "\u9E68"], /* CJK Ideograph */ + ["\u9E69", "\u9E69"], /* CJK Ideograph */ + ["\u9E6A", "\u9E6A"], /* CJK Ideograph */ + ["\u9E6B", "\u9E6B"], /* CJK Ideograph */ + ["\u9E6C", "\u9E6C"], /* CJK Ideograph */ + ["\u9E6D", "\u9E6D"], /* CJK Ideograph */ + ["\u9E6E", "\u9E6E"], /* CJK Ideograph */ + ["\u9E6F", "\u9E6F"], /* CJK Ideograph */ + ["\u9E70", "\u9E70"], /* CJK Ideograph */ + ["\u9E71", "\u9E71"], /* CJK Ideograph */ + ["\u9E72", "\u9E72"], /* CJK Ideograph */ + ["\u9E73", "\u9E73"], /* CJK Ideograph */ + ["\u9E74", "\u9E74"], /* CJK Ideograph */ + ["\u9E75", "\u9E75"], /* CJK Ideograph */ + ["\u9E76", "\u9E76"], /* CJK Ideograph */ + ["\u9E77", "\u9E77"], /* CJK Ideograph */ + ["\u9E78", "\u9E78"], /* CJK Ideograph */ + ["\u9E79", "\u9E79"], /* CJK Ideograph */ + ["\u9E7A", "\u9E7A"], /* CJK Ideograph */ + ["\u9E7B", "\u9E7B"], /* CJK Ideograph */ + ["\u9E7C", "\u9E7C"], /* CJK Ideograph */ + ["\u9E7D", "\u9E7D"], /* CJK Ideograph */ + ["\u9E7E", "\u9E7E"], /* CJK Ideograph */ + ["\u9E7F", "\u9E7F"], /* CJK Ideograph */ + ["\u9E80", "\u9E80"], /* CJK Ideograph */ + ["\u9E81", "\u9E81"], /* CJK Ideograph */ + ["\u9E82", "\u9E82"], /* CJK Ideograph */ + ["\u9E83", "\u9E83"], /* CJK Ideograph */ + ["\u9E84", "\u9E84"], /* CJK Ideograph */ + ["\u9E85", "\u9E85"], /* CJK Ideograph */ + ["\u9E86", "\u9E86"], /* CJK Ideograph */ + ["\u9E87", "\u9E87"], /* CJK Ideograph */ + ["\u9E88", "\u9E88"], /* CJK Ideograph */ + ["\u9E89", "\u9E89"], /* CJK Ideograph */ + ["\u9E8A", "\u9E8A"], /* CJK Ideograph */ + ["\u9E8B", "\u9E8B"], /* CJK Ideograph */ + ["\u9E8C", "\u9E8C"], /* CJK Ideograph */ + ["\u9E8D", "\u9E8D"], /* CJK Ideograph */ + ["\u9E8E", "\u9E8E"], /* CJK Ideograph */ + ["\u9E8F", "\u9E8F"], /* CJK Ideograph */ + ["\u9E90", "\u9E90"], /* CJK Ideograph */ + ["\u9E91", "\u9E91"], /* CJK Ideograph */ + ["\u9E92", "\u9E92"], /* CJK Ideograph */ + ["\u9E93", "\u9E93"], /* CJK Ideograph */ + ["\u9E94", "\u9E94"], /* CJK Ideograph */ + ["\u9E95", "\u9E95"], /* CJK Ideograph */ + ["\u9E96", "\u9E96"], /* CJK Ideograph */ + ["\u9E97", "\u9E97"], /* CJK Ideograph */ + ["\u9E98", "\u9E98"], /* CJK Ideograph */ + ["\u9E99", "\u9E99"], /* CJK Ideograph */ + ["\u9E9A", "\u9E9A"], /* CJK Ideograph */ + ["\u9E9B", "\u9E9B"], /* CJK Ideograph */ + ["\u9E9C", "\u9E9C"], /* CJK Ideograph */ + ["\u9E9D", "\u9E9D"], /* CJK Ideograph */ + ["\u9E9E", "\u9E9E"], /* CJK Ideograph */ + ["\u9E9F", "\u9E9F"], /* CJK Ideograph */ + ["\u9EA0", "\u9EA0"], /* CJK Ideograph */ + ["\u9EA1", "\u9EA1"], /* CJK Ideograph */ + ["\u9EA2", "\u9EA2"], /* CJK Ideograph */ + ["\u9EA3", "\u9EA3"], /* CJK Ideograph */ + ["\u9EA4", "\u9EA4"], /* CJK Ideograph */ + ["\u9EA5", "\u9EA5"], /* CJK Ideograph */ + ["\u9EA6", "\u9EA6"], /* CJK Ideograph */ + ["\u9EA7", "\u9EA7"], /* CJK Ideograph */ + ["\u9EA8", "\u9EA8"], /* CJK Ideograph */ + ["\u9EA9", "\u9EA9"], /* CJK Ideograph */ + ["\u9EAA", "\u9EAA"], /* CJK Ideograph */ + ["\u9EAB", "\u9EAB"], /* CJK Ideograph */ + ["\u9EAC", "\u9EAC"], /* CJK Ideograph */ + ["\u9EAD", "\u9EAD"], /* CJK Ideograph */ + ["\u9EAE", "\u9EAE"], /* CJK Ideograph */ + ["\u9EAF", "\u9EAF"], /* CJK Ideograph */ + ["\u9EB0", "\u9EB0"], /* CJK Ideograph */ + ["\u9EB1", "\u9EB1"], /* CJK Ideograph */ + ["\u9EB2", "\u9EB2"], /* CJK Ideograph */ + ["\u9EB3", "\u9EB3"], /* CJK Ideograph */ + ["\u9EB4", "\u9EB4"], /* CJK Ideograph */ + ["\u9EB5", "\u9EB5"], /* CJK Ideograph */ + ["\u9EB6", "\u9EB6"], /* CJK Ideograph */ + ["\u9EB7", "\u9EB7"], /* CJK Ideograph */ + ["\u9EB8", "\u9EB8"], /* CJK Ideograph */ + ["\u9EB9", "\u9EB9"], /* CJK Ideograph */ + ["\u9EBA", "\u9EBA"], /* CJK Ideograph */ + ["\u9EBB", "\u9EBB"], /* CJK Ideograph */ + ["\u9EBC", "\u9EBC"], /* CJK Ideograph */ + ["\u9EBD", "\u9EBD"], /* CJK Ideograph */ + ["\u9EBE", "\u9EBE"], /* CJK Ideograph */ + ["\u9EBF", "\u9EBF"], /* CJK Ideograph */ + ["\u9EC0", "\u9EC0"], /* CJK Ideograph */ + ["\u9EC1", "\u9EC1"], /* CJK Ideograph */ + ["\u9EC2", "\u9EC2"], /* CJK Ideograph */ + ["\u9EC3", "\u9EC3"], /* CJK Ideograph */ + ["\u9EC4", "\u9EC4"], /* CJK Ideograph */ + ["\u9EC5", "\u9EC5"], /* CJK Ideograph */ + ["\u9EC6", "\u9EC6"], /* CJK Ideograph */ + ["\u9EC7", "\u9EC7"], /* CJK Ideograph */ + ["\u9EC8", "\u9EC8"], /* CJK Ideograph */ + ["\u9EC9", "\u9EC9"], /* CJK Ideograph */ + ["\u9ECA", "\u9ECA"], /* CJK Ideograph */ + ["\u9ECB", "\u9ECB"], /* CJK Ideograph */ + ["\u9ECC", "\u9ECC"], /* CJK Ideograph */ + ["\u9ECD", "\u9ECD"], /* CJK Ideograph */ + ["\u9ECE", "\u9ECE"], /* CJK Ideograph */ + ["\u9ECF", "\u9ECF"], /* CJK Ideograph */ + ["\u9ED0", "\u9ED0"], /* CJK Ideograph */ + ["\u9ED1", "\u9ED1"], /* CJK Ideograph */ + ["\u9ED2", "\u9ED2"], /* CJK Ideograph */ + ["\u9ED3", "\u9ED3"], /* CJK Ideograph */ + ["\u9ED4", "\u9ED4"], /* CJK Ideograph */ + ["\u9ED5", "\u9ED5"], /* CJK Ideograph */ + ["\u9ED6", "\u9ED6"], /* CJK Ideograph */ + ["\u9ED7", "\u9ED7"], /* CJK Ideograph */ + ["\u9ED8", "\u9ED8"], /* CJK Ideograph */ + ["\u9ED9", "\u9ED9"], /* CJK Ideograph */ + ["\u9EDA", "\u9EDA"], /* CJK Ideograph */ + ["\u9EDB", "\u9EDB"], /* CJK Ideograph */ + ["\u9EDC", "\u9EDC"], /* CJK Ideograph */ + ["\u9EDD", "\u9EDD"], /* CJK Ideograph */ + ["\u9EDE", "\u9EDE"], /* CJK Ideograph */ + ["\u9EDF", "\u9EDF"], /* CJK Ideograph */ + ["\u9EE0", "\u9EE0"], /* CJK Ideograph */ + ["\u9EE1", "\u9EE1"], /* CJK Ideograph */ + ["\u9EE2", "\u9EE2"], /* CJK Ideograph */ + ["\u9EE3", "\u9EE3"], /* CJK Ideograph */ + ["\u9EE4", "\u9EE4"], /* CJK Ideograph */ + ["\u9EE5", "\u9EE5"], /* CJK Ideograph */ + ["\u9EE6", "\u9EE6"], /* CJK Ideograph */ + ["\u9EE7", "\u9EE7"], /* CJK Ideograph */ + ["\u9EE8", "\u9EE8"], /* CJK Ideograph */ + ["\u9EE9", "\u9EE9"], /* CJK Ideograph */ + ["\u9EEA", "\u9EEA"], /* CJK Ideograph */ + ["\u9EEB", "\u9EEB"], /* CJK Ideograph */ + ["\u9EEC", "\u9EEC"], /* CJK Ideograph */ + ["\u9EED", "\u9EED"], /* CJK Ideograph */ + ["\u9EEE", "\u9EEE"], /* CJK Ideograph */ + ["\u9EEF", "\u9EEF"], /* CJK Ideograph */ + ["\u9EF0", "\u9EF0"], /* CJK Ideograph */ + ["\u9EF1", "\u9EF1"], /* CJK Ideograph */ + ["\u9EF2", "\u9EF2"], /* CJK Ideograph */ + ["\u9EF3", "\u9EF3"], /* CJK Ideograph */ + ["\u9EF4", "\u9EF4"], /* CJK Ideograph */ + ["\u9EF5", "\u9EF5"], /* CJK Ideograph */ + ["\u9EF6", "\u9EF6"], /* CJK Ideograph */ + ["\u9EF7", "\u9EF7"], /* CJK Ideograph */ + ["\u9EF8", "\u9EF8"], /* CJK Ideograph */ + ["\u9EF9", "\u9EF9"], /* CJK Ideograph */ + ["\u9EFA", "\u9EFA"], /* CJK Ideograph */ + ["\u9EFB", "\u9EFB"], /* CJK Ideograph */ + ["\u9EFC", "\u9EFC"], /* CJK Ideograph */ + ["\u9EFD", "\u9EFD"], /* CJK Ideograph */ + ["\u9EFE", "\u9EFE"], /* CJK Ideograph */ + ["\u9EFF", "\u9EFF"], /* CJK Ideograph */ + ["\u9F00", "\u9F00"], /* CJK Ideograph */ + ["\u9F01", "\u9F01"], /* CJK Ideograph */ + ["\u9F02", "\u9F02"], /* CJK Ideograph */ + ["\u9F03", "\u9F03"], /* CJK Ideograph */ + ["\u9F04", "\u9F04"], /* CJK Ideograph */ + ["\u9F05", "\u9F05"], /* CJK Ideograph */ + ["\u9F06", "\u9F06"], /* CJK Ideograph */ + ["\u9F07", "\u9F07"], /* CJK Ideograph */ + ["\u9F08", "\u9F08"], /* CJK Ideograph */ + ["\u9F09", "\u9F09"], /* CJK Ideograph */ + ["\u9F0A", "\u9F0A"], /* CJK Ideograph */ + ["\u9F0B", "\u9F0B"], /* CJK Ideograph */ + ["\u9F0C", "\u9F0C"], /* CJK Ideograph */ + ["\u9F0D", "\u9F0D"], /* CJK Ideograph */ + ["\u9F0E", "\u9F0E"], /* CJK Ideograph */ + ["\u9F0F", "\u9F0F"], /* CJK Ideograph */ + ["\u9F10", "\u9F10"], /* CJK Ideograph */ + ["\u9F11", "\u9F11"], /* CJK Ideograph */ + ["\u9F12", "\u9F12"], /* CJK Ideograph */ + ["\u9F13", "\u9F13"], /* CJK Ideograph */ + ["\u9F14", "\u9F14"], /* CJK Ideograph */ + ["\u9F15", "\u9F15"], /* CJK Ideograph */ + ["\u9F16", "\u9F16"], /* CJK Ideograph */ + ["\u9F17", "\u9F17"], /* CJK Ideograph */ + ["\u9F18", "\u9F18"], /* CJK Ideograph */ + ["\u9F19", "\u9F19"], /* CJK Ideograph */ + ["\u9F1A", "\u9F1A"], /* CJK Ideograph */ + ["\u9F1B", "\u9F1B"], /* CJK Ideograph */ + ["\u9F1C", "\u9F1C"], /* CJK Ideograph */ + ["\u9F1D", "\u9F1D"], /* CJK Ideograph */ + ["\u9F1E", "\u9F1E"], /* CJK Ideograph */ + ["\u9F1F", "\u9F1F"], /* CJK Ideograph */ + ["\u9F20", "\u9F20"], /* CJK Ideograph */ + ["\u9F21", "\u9F21"], /* CJK Ideograph */ + ["\u9F22", "\u9F22"], /* CJK Ideograph */ + ["\u9F23", "\u9F23"], /* CJK Ideograph */ + ["\u9F24", "\u9F24"], /* CJK Ideograph */ + ["\u9F25", "\u9F25"], /* CJK Ideograph */ + ["\u9F26", "\u9F26"], /* CJK Ideograph */ + ["\u9F27", "\u9F27"], /* CJK Ideograph */ + ["\u9F28", "\u9F28"], /* CJK Ideograph */ + ["\u9F29", "\u9F29"], /* CJK Ideograph */ + ["\u9F2A", "\u9F2A"], /* CJK Ideograph */ + ["\u9F2B", "\u9F2B"], /* CJK Ideograph */ + ["\u9F2C", "\u9F2C"], /* CJK Ideograph */ + ["\u9F2D", "\u9F2D"], /* CJK Ideograph */ + ["\u9F2E", "\u9F2E"], /* CJK Ideograph */ + ["\u9F2F", "\u9F2F"], /* CJK Ideograph */ + ["\u9F30", "\u9F30"], /* CJK Ideograph */ + ["\u9F31", "\u9F31"], /* CJK Ideograph */ + ["\u9F32", "\u9F32"], /* CJK Ideograph */ + ["\u9F33", "\u9F33"], /* CJK Ideograph */ + ["\u9F34", "\u9F34"], /* CJK Ideograph */ + ["\u9F35", "\u9F35"], /* CJK Ideograph */ + ["\u9F36", "\u9F36"], /* CJK Ideograph */ + ["\u9F37", "\u9F37"], /* CJK Ideograph */ + ["\u9F38", "\u9F38"], /* CJK Ideograph */ + ["\u9F39", "\u9F39"], /* CJK Ideograph */ + ["\u9F3A", "\u9F3A"], /* CJK Ideograph */ + ["\u9F3B", "\u9F3B"], /* CJK Ideograph */ + ["\u9F3C", "\u9F3C"], /* CJK Ideograph */ + ["\u9F3D", "\u9F3D"], /* CJK Ideograph */ + ["\u9F3E", "\u9F3E"], /* CJK Ideograph */ + ["\u9F3F", "\u9F3F"], /* CJK Ideograph */ + ["\u9F40", "\u9F40"], /* CJK Ideograph */ + ["\u9F41", "\u9F41"], /* CJK Ideograph */ + ["\u9F42", "\u9F42"], /* CJK Ideograph */ + ["\u9F43", "\u9F43"], /* CJK Ideograph */ + ["\u9F44", "\u9F44"], /* CJK Ideograph */ + ["\u9F45", "\u9F45"], /* CJK Ideograph */ + ["\u9F46", "\u9F46"], /* CJK Ideograph */ + ["\u9F47", "\u9F47"], /* CJK Ideograph */ + ["\u9F48", "\u9F48"], /* CJK Ideograph */ + ["\u9F49", "\u9F49"], /* CJK Ideograph */ + ["\u9F4A", "\u9F4A"], /* CJK Ideograph */ + ["\u9F4B", "\u9F4B"], /* CJK Ideograph */ + ["\u9F4C", "\u9F4C"], /* CJK Ideograph */ + ["\u9F4D", "\u9F4D"], /* CJK Ideograph */ + ["\u9F4E", "\u9F4E"], /* CJK Ideograph */ + ["\u9F4F", "\u9F4F"], /* CJK Ideograph */ + ["\u9F50", "\u9F50"], /* CJK Ideograph */ + ["\u9F51", "\u9F51"], /* CJK Ideograph */ + ["\u9F52", "\u9F52"], /* CJK Ideograph */ + ["\u9F53", "\u9F53"], /* CJK Ideograph */ + ["\u9F54", "\u9F54"], /* CJK Ideograph */ + ["\u9F55", "\u9F55"], /* CJK Ideograph */ + ["\u9F56", "\u9F56"], /* CJK Ideograph */ + ["\u9F57", "\u9F57"], /* CJK Ideograph */ + ["\u9F58", "\u9F58"], /* CJK Ideograph */ + ["\u9F59", "\u9F59"], /* CJK Ideograph */ + ["\u9F5A", "\u9F5A"], /* CJK Ideograph */ + ["\u9F5B", "\u9F5B"], /* CJK Ideograph */ + ["\u9F5C", "\u9F5C"], /* CJK Ideograph */ + ["\u9F5D", "\u9F5D"], /* CJK Ideograph */ + ["\u9F5E", "\u9F5E"], /* CJK Ideograph */ + ["\u9F5F", "\u9F5F"], /* CJK Ideograph */ + ["\u9F60", "\u9F60"], /* CJK Ideograph */ + ["\u9F61", "\u9F61"], /* CJK Ideograph */ + ["\u9F62", "\u9F62"], /* CJK Ideograph */ + ["\u9F63", "\u9F63"], /* CJK Ideograph */ + ["\u9F64", "\u9F64"], /* CJK Ideograph */ + ["\u9F65", "\u9F65"], /* CJK Ideograph */ + ["\u9F66", "\u9F66"], /* CJK Ideograph */ + ["\u9F67", "\u9F67"], /* CJK Ideograph */ + ["\u9F68", "\u9F68"], /* CJK Ideograph */ + ["\u9F69", "\u9F69"], /* CJK Ideograph */ + ["\u9F6A", "\u9F6A"], /* CJK Ideograph */ + ["\u9F6B", "\u9F6B"], /* CJK Ideograph */ + ["\u9F6C", "\u9F6C"], /* CJK Ideograph */ + ["\u9F6D", "\u9F6D"], /* CJK Ideograph */ + ["\u9F6E", "\u9F6E"], /* CJK Ideograph */ + ["\u9F6F", "\u9F6F"], /* CJK Ideograph */ + ["\u9F70", "\u9F70"], /* CJK Ideograph */ + ["\u9F71", "\u9F71"], /* CJK Ideograph */ + ["\u9F72", "\u9F72"], /* CJK Ideograph */ + ["\u9F73", "\u9F73"], /* CJK Ideograph */ + ["\u9F74", "\u9F74"], /* CJK Ideograph */ + ["\u9F75", "\u9F75"], /* CJK Ideograph */ + ["\u9F76", "\u9F76"], /* CJK Ideograph */ + ["\u9F77", "\u9F77"], /* CJK Ideograph */ + ["\u9F78", "\u9F78"], /* CJK Ideograph */ + ["\u9F79", "\u9F79"], /* CJK Ideograph */ + ["\u9F7A", "\u9F7A"], /* CJK Ideograph */ + ["\u9F7B", "\u9F7B"], /* CJK Ideograph */ + ["\u9F7C", "\u9F7C"], /* CJK Ideograph */ + ["\u9F7D", "\u9F7D"], /* CJK Ideograph */ + ["\u9F7E", "\u9F7E"], /* CJK Ideograph */ + ["\u9F7F", "\u9F7F"], /* CJK Ideograph */ + ["\u9F80", "\u9F80"], /* CJK Ideograph */ + ["\u9F81", "\u9F81"], /* CJK Ideograph */ + ["\u9F82", "\u9F82"], /* CJK Ideograph */ + ["\u9F83", "\u9F83"], /* CJK Ideograph */ + ["\u9F84", "\u9F84"], /* CJK Ideograph */ + ["\u9F85", "\u9F85"], /* CJK Ideograph */ + ["\u9F86", "\u9F86"], /* CJK Ideograph */ + ["\u9F87", "\u9F87"], /* CJK Ideograph */ + ["\u9F88", "\u9F88"], /* CJK Ideograph */ + ["\u9F89", "\u9F89"], /* CJK Ideograph */ + ["\u9F8A", "\u9F8A"], /* CJK Ideograph */ + ["\u9F8B", "\u9F8B"], /* CJK Ideograph */ + ["\u9F8C", "\u9F8C"], /* CJK Ideograph */ + ["\u9F8D", "\u9F8D"], /* CJK Ideograph */ + ["\u9F8E", "\u9F8E"], /* CJK Ideograph */ + ["\u9F8F", "\u9F8F"], /* CJK Ideograph */ + ["\u9F90", "\u9F90"], /* CJK Ideograph */ + ["\u9F91", "\u9F91"], /* CJK Ideograph */ + ["\u9F92", "\u9F92"], /* CJK Ideograph */ + ["\u9F93", "\u9F93"], /* CJK Ideograph */ + ["\u9F94", "\u9F94"], /* CJK Ideograph */ + ["\u9F95", "\u9F95"], /* CJK Ideograph */ + ["\u9F96", "\u9F96"], /* CJK Ideograph */ + ["\u9F97", "\u9F97"], /* CJK Ideograph */ + ["\u9F98", "\u9F98"], /* CJK Ideograph */ + ["\u9F99", "\u9F99"], /* CJK Ideograph */ + ["\u9F9A", "\u9F9A"], /* CJK Ideograph */ + ["\u9F9B", "\u9F9B"], /* CJK Ideograph */ + ["\u9F9C", "\u9F9C"], /* CJK Ideograph */ + ["\u9F9D", "\u9F9D"], /* CJK Ideograph */ + ["\u9F9E", "\u9F9E"], /* CJK Ideograph */ + ["\u9F9F", "\u9F9F"], /* CJK Ideograph */ + ["\u9FA0", "\u9FA0"], /* CJK Ideograph */ + ["\u9FA1", "\u9FA1"], /* CJK Ideograph */ + ["\u9FA2", "\u9FA2"], /* CJK Ideograph */ + ["\u9FA3", "\u9FA3"], /* CJK Ideograph */ + ["\u9FA4", "\u9FA4"], /* CJK Ideograph */ + ["\u9FA5", "\u9FA5"], /* CJK Ideograph */ + ["\u9FA6", "\u9FA6"], /* CJK Ideograph */ + ["\u9FA7", "\u9FA7"], /* CJK Ideograph */ + ["\u9FA8", "\u9FA8"], /* CJK Ideograph */ + ["\u9FA9", "\u9FA9"], /* CJK Ideograph */ + ["\u9FAA", "\u9FAA"], /* CJK Ideograph */ + ["\u9FAB", "\u9FAB"], /* CJK Ideograph */ + ["\u9FAC", "\u9FAC"], /* CJK Ideograph */ + ["\u9FAD", "\u9FAD"], /* CJK Ideograph */ + ["\u9FAE", "\u9FAE"], /* CJK Ideograph */ + ["\u9FAF", "\u9FAF"], /* CJK Ideograph */ + ["\u9FB0", "\u9FB0"], /* CJK Ideograph */ + ["\u9FB1", "\u9FB1"], /* CJK Ideograph */ + ["\u9FB2", "\u9FB2"], /* CJK Ideograph */ + ["\u9FB3", "\u9FB3"], /* CJK Ideograph */ + ["\u9FB4", "\u9FB4"], /* CJK Ideograph */ + ["\u9FB5", "\u9FB5"], /* CJK Ideograph */ + ["\u9FB6", "\u9FB6"], /* CJK Ideograph */ + ["\u9FB7", "\u9FB7"], /* CJK Ideograph */ + ["\u9FB8", "\u9FB8"], /* CJK Ideograph */ + ["\u9FB9", "\u9FB9"], /* CJK Ideograph */ + ["\u9FBA", "\u9FBA"], /* CJK Ideograph */ + ["\u9FBB", "\u9FBB"], /* CJK Ideograph */ + ["\u9FBC", "\u9FBC"], /* CJK Ideograph */ + ["\u9FBD", "\u9FBD"], /* CJK Ideograph */ + ["\u9FBE", "\u9FBE"], /* CJK Ideograph */ + ["\u9FBF", "\u9FBF"], /* CJK Ideograph */ + ["\u9FC0", "\u9FC0"], /* CJK Ideograph */ + ["\u9FC1", "\u9FC1"], /* CJK Ideograph */ + ["\u9FC2", "\u9FC2"], /* CJK Ideograph */ + ["\u9FC3", "\u9FC3"], /* CJK Ideograph */ + ["\u9FC4", "\u9FC4"], /* CJK Ideograph */ + ["\u9FC5", "\u9FC5"], /* CJK Ideograph */ + ["\u9FC6", "\u9FC6"], /* CJK Ideograph */ + ["\u9FC7", "\u9FC7"], /* CJK Ideograph */ + ["\u9FC8", "\u9FC8"], /* CJK Ideograph */ + ["\u9FC9", "\u9FC9"], /* CJK Ideograph */ + ["\u9FCA", "\u9FCA"], /* CJK Ideograph */ + ["\u9FCB", "\u9FCB"], /* CJK Ideograph */ + ["\u9FCC", "\u9FCC"], /* CJK Ideograph */ + ["\u9FCD", "\u9FCD"], /* CJK Ideograph */ + ["\u9FCE", "\u9FCE"], /* CJK Ideograph */ + ["\u9FCF", "\u9FCF"], /* CJK Ideograph */ + ["\u9FD0", "\u9FD0"], /* CJK Ideograph */ + ["\u9FD1", "\u9FD1"], /* CJK Ideograph */ + ["\u9FD2", "\u9FD2"], /* CJK Ideograph */ + ["\u9FD3", "\u9FD3"], /* CJK Ideograph */ + ["\u9FD4", "\u9FD4"], /* CJK Ideograph */ + ["\u9FD5", "\u9FD5"], /* CJK Ideograph */ + ["\u9FD6", "\u9FD6"], /* CJK Ideograph */ + ["\u9FD7", "\u9FD7"], /* CJK Ideograph */ + ["\u9FD8", "\u9FD8"], /* CJK Ideograph */ + ["\u9FD9", "\u9FD9"], /* CJK Ideograph */ + ["\u9FDA", "\u9FDA"], /* CJK Ideograph */ + ["\u9FDB", "\u9FDB"], /* CJK Ideograph */ + ["\u9FDC", "\u9FDC"], /* CJK Ideograph */ + ["\u9FDD", "\u9FDD"], /* CJK Ideograph */ + ["\u9FDE", "\u9FDE"], /* CJK Ideograph */ + ["\u9FDF", "\u9FDF"], /* CJK Ideograph */ + ["\u9FE0", "\u9FE0"], /* CJK Ideograph */ + ["\u9FE1", "\u9FE1"], /* CJK Ideograph */ + ["\u9FE2", "\u9FE2"], /* CJK Ideograph */ + ["\u9FE3", "\u9FE3"], /* CJK Ideograph */ + ["\u9FE4", "\u9FE4"], /* CJK Ideograph */ + ["\u9FE5", "\u9FE5"], /* CJK Ideograph */ + ["\u9FE6", "\u9FE6"], /* CJK Ideograph */ + ["\u9FE7", "\u9FE7"], /* CJK Ideograph */ + ["\u9FE8", "\u9FE8"], /* CJK Ideograph */ + ["\u9FE9", "\u9FE9"], /* CJK Ideograph */ + ["\u9FEA", "\u9FEA"], /* CJK Ideograph */ + ["\u9FEB", "\u9FEB"], /* CJK Ideograph */ + ["\u9FEC", "\u9FEC"], /* CJK Ideograph */ + ["\u9FED", "\u9FED"], /* CJK Ideograph */ + ["\u9FEE", "\u9FEE"], /* CJK Ideograph */ + ["\u9FEF", "\u9FEF"], /* CJK Ideograph */ + ["\u9FF0", "\u9FF0"], /* CJK Ideograph */ + ["\u9FF1", "\u9FF1"], /* CJK Ideograph */ + ["\u9FF2", "\u9FF2"], /* CJK Ideograph */ + ["\u9FF3", "\u9FF3"], /* CJK Ideograph */ + ["\u9FF4", "\u9FF4"], /* CJK Ideograph */ + ["\u9FF5", "\u9FF5"], /* CJK Ideograph */ + ["\u9FF6", "\u9FF6"], /* CJK Ideograph */ + ["\u9FF7", "\u9FF7"], /* CJK Ideograph */ + ["\u9FF8", "\u9FF8"], /* CJK Ideograph */ + ["\u9FF9", "\u9FF9"], /* CJK Ideograph */ + ["\u9FFA", "\u9FFA"], /* CJK Ideograph */ + ["\u9FFB", "\u9FFB"], /* CJK Ideograph */ + ["\u9FFC", "\u9FFC"], /* CJK Ideograph */ + ["\u9FFD", "\u9FFD"], /* CJK Ideograph */ + ["\u9FFE", "\u9FFE"], /* CJK Ideograph */ + ["\u9FFF", "\u9FFF"], /* CJK Ideograph */ + ["\uA000", "\uA000"], /* YI SYLLABLE IT */ + ["\uA001", "\uA001"], /* YI SYLLABLE IX */ + ["\uA002", "\uA002"], /* YI SYLLABLE I */ + ["\uA003", "\uA003"], /* YI SYLLABLE IP */ + ["\uA004", "\uA004"], /* YI SYLLABLE IET */ + ["\uA005", "\uA005"], /* YI SYLLABLE IEX */ + ["\uA006", "\uA006"], /* YI SYLLABLE IE */ + ["\uA007", "\uA007"], /* YI SYLLABLE IEP */ + ["\uA008", "\uA008"], /* YI SYLLABLE AT */ + ["\uA009", "\uA009"], /* YI SYLLABLE AX */ + ["\uA00A", "\uA00A"], /* YI SYLLABLE A */ + ["\uA00B", "\uA00B"], /* YI SYLLABLE AP */ + ["\uA00C", "\uA00C"], /* YI SYLLABLE UOX */ + ["\uA00D", "\uA00D"], /* YI SYLLABLE UO */ + ["\uA00E", "\uA00E"], /* YI SYLLABLE UOP */ + ["\uA00F", "\uA00F"], /* YI SYLLABLE OT */ + ["\uA010", "\uA010"], /* YI SYLLABLE OX */ + ["\uA011", "\uA011"], /* YI SYLLABLE O */ + ["\uA012", "\uA012"], /* YI SYLLABLE OP */ + ["\uA013", "\uA013"], /* YI SYLLABLE EX */ + ["\uA014", "\uA014"], /* YI SYLLABLE E */ + ["\uA015", "\uA015"], /* YI SYLLABLE WU */ + ["\uA016", "\uA016"], /* YI SYLLABLE BIT */ + ["\uA017", "\uA017"], /* YI SYLLABLE BIX */ + ["\uA018", "\uA018"], /* YI SYLLABLE BI */ + ["\uA019", "\uA019"], /* YI SYLLABLE BIP */ + ["\uA01A", "\uA01A"], /* YI SYLLABLE BIET */ + ["\uA01B", "\uA01B"], /* YI SYLLABLE BIEX */ + ["\uA01C", "\uA01C"], /* YI SYLLABLE BIE */ + ["\uA01D", "\uA01D"], /* YI SYLLABLE BIEP */ + ["\uA01E", "\uA01E"], /* YI SYLLABLE BAT */ + ["\uA01F", "\uA01F"], /* YI SYLLABLE BAX */ + ["\uA020", "\uA020"], /* YI SYLLABLE BA */ + ["\uA021", "\uA021"], /* YI SYLLABLE BAP */ + ["\uA022", "\uA022"], /* YI SYLLABLE BUOX */ + ["\uA023", "\uA023"], /* YI SYLLABLE BUO */ + ["\uA024", "\uA024"], /* YI SYLLABLE BUOP */ + ["\uA025", "\uA025"], /* YI SYLLABLE BOT */ + ["\uA026", "\uA026"], /* YI SYLLABLE BOX */ + ["\uA027", "\uA027"], /* YI SYLLABLE BO */ + ["\uA028", "\uA028"], /* YI SYLLABLE BOP */ + ["\uA029", "\uA029"], /* YI SYLLABLE BEX */ + ["\uA02A", "\uA02A"], /* YI SYLLABLE BE */ + ["\uA02B", "\uA02B"], /* YI SYLLABLE BEP */ + ["\uA02C", "\uA02C"], /* YI SYLLABLE BUT */ + ["\uA02D", "\uA02D"], /* YI SYLLABLE BUX */ + ["\uA02E", "\uA02E"], /* YI SYLLABLE BU */ + ["\uA02F", "\uA02F"], /* YI SYLLABLE BUP */ + ["\uA030", "\uA030"], /* YI SYLLABLE BURX */ + ["\uA031", "\uA031"], /* YI SYLLABLE BUR */ + ["\uA032", "\uA032"], /* YI SYLLABLE BYT */ + ["\uA033", "\uA033"], /* YI SYLLABLE BYX */ + ["\uA034", "\uA034"], /* YI SYLLABLE BY */ + ["\uA035", "\uA035"], /* YI SYLLABLE BYP */ + ["\uA036", "\uA036"], /* YI SYLLABLE BYRX */ + ["\uA037", "\uA037"], /* YI SYLLABLE BYR */ + ["\uA038", "\uA038"], /* YI SYLLABLE PIT */ + ["\uA039", "\uA039"], /* YI SYLLABLE PIX */ + ["\uA03A", "\uA03A"], /* YI SYLLABLE PI */ + ["\uA03B", "\uA03B"], /* YI SYLLABLE PIP */ + ["\uA03C", "\uA03C"], /* YI SYLLABLE PIEX */ + ["\uA03D", "\uA03D"], /* YI SYLLABLE PIE */ + ["\uA03E", "\uA03E"], /* YI SYLLABLE PIEP */ + ["\uA03F", "\uA03F"], /* YI SYLLABLE PAT */ + ["\uA040", "\uA040"], /* YI SYLLABLE PAX */ + ["\uA041", "\uA041"], /* YI SYLLABLE PA */ + ["\uA042", "\uA042"], /* YI SYLLABLE PAP */ + ["\uA043", "\uA043"], /* YI SYLLABLE PUOX */ + ["\uA044", "\uA044"], /* YI SYLLABLE PUO */ + ["\uA045", "\uA045"], /* YI SYLLABLE PUOP */ + ["\uA046", "\uA046"], /* YI SYLLABLE POT */ + ["\uA047", "\uA047"], /* YI SYLLABLE POX */ + ["\uA048", "\uA048"], /* YI SYLLABLE PO */ + ["\uA049", "\uA049"], /* YI SYLLABLE POP */ + ["\uA04A", "\uA04A"], /* YI SYLLABLE PUT */ + ["\uA04B", "\uA04B"], /* YI SYLLABLE PUX */ + ["\uA04C", "\uA04C"], /* YI SYLLABLE PU */ + ["\uA04D", "\uA04D"], /* YI SYLLABLE PUP */ + ["\uA04E", "\uA04E"], /* YI SYLLABLE PURX */ + ["\uA04F", "\uA04F"], /* YI SYLLABLE PUR */ + ["\uA050", "\uA050"], /* YI SYLLABLE PYT */ + ["\uA051", "\uA051"], /* YI SYLLABLE PYX */ + ["\uA052", "\uA052"], /* YI SYLLABLE PY */ + ["\uA053", "\uA053"], /* YI SYLLABLE PYP */ + ["\uA054", "\uA054"], /* YI SYLLABLE PYRX */ + ["\uA055", "\uA055"], /* YI SYLLABLE PYR */ + ["\uA056", "\uA056"], /* YI SYLLABLE BBIT */ + ["\uA057", "\uA057"], /* YI SYLLABLE BBIX */ + ["\uA058", "\uA058"], /* YI SYLLABLE BBI */ + ["\uA059", "\uA059"], /* YI SYLLABLE BBIP */ + ["\uA05A", "\uA05A"], /* YI SYLLABLE BBIET */ + ["\uA05B", "\uA05B"], /* YI SYLLABLE BBIEX */ + ["\uA05C", "\uA05C"], /* YI SYLLABLE BBIE */ + ["\uA05D", "\uA05D"], /* YI SYLLABLE BBIEP */ + ["\uA05E", "\uA05E"], /* YI SYLLABLE BBAT */ + ["\uA05F", "\uA05F"], /* YI SYLLABLE BBAX */ + ["\uA060", "\uA060"], /* YI SYLLABLE BBA */ + ["\uA061", "\uA061"], /* YI SYLLABLE BBAP */ + ["\uA062", "\uA062"], /* YI SYLLABLE BBUOX */ + ["\uA063", "\uA063"], /* YI SYLLABLE BBUO */ + ["\uA064", "\uA064"], /* YI SYLLABLE BBUOP */ + ["\uA065", "\uA065"], /* YI SYLLABLE BBOT */ + ["\uA066", "\uA066"], /* YI SYLLABLE BBOX */ + ["\uA067", "\uA067"], /* YI SYLLABLE BBO */ + ["\uA068", "\uA068"], /* YI SYLLABLE BBOP */ + ["\uA069", "\uA069"], /* YI SYLLABLE BBEX */ + ["\uA06A", "\uA06A"], /* YI SYLLABLE BBE */ + ["\uA06B", "\uA06B"], /* YI SYLLABLE BBEP */ + ["\uA06C", "\uA06C"], /* YI SYLLABLE BBUT */ + ["\uA06D", "\uA06D"], /* YI SYLLABLE BBUX */ + ["\uA06E", "\uA06E"], /* YI SYLLABLE BBU */ + ["\uA06F", "\uA06F"], /* YI SYLLABLE BBUP */ + ["\uA070", "\uA070"], /* YI SYLLABLE BBURX */ + ["\uA071", "\uA071"], /* YI SYLLABLE BBUR */ + ["\uA072", "\uA072"], /* YI SYLLABLE BBYT */ + ["\uA073", "\uA073"], /* YI SYLLABLE BBYX */ + ["\uA074", "\uA074"], /* YI SYLLABLE BBY */ + ["\uA075", "\uA075"], /* YI SYLLABLE BBYP */ + ["\uA076", "\uA076"], /* YI SYLLABLE NBIT */ + ["\uA077", "\uA077"], /* YI SYLLABLE NBIX */ + ["\uA078", "\uA078"], /* YI SYLLABLE NBI */ + ["\uA079", "\uA079"], /* YI SYLLABLE NBIP */ + ["\uA07A", "\uA07A"], /* YI SYLLABLE NBIEX */ + ["\uA07B", "\uA07B"], /* YI SYLLABLE NBIE */ + ["\uA07C", "\uA07C"], /* YI SYLLABLE NBIEP */ + ["\uA07D", "\uA07D"], /* YI SYLLABLE NBAT */ + ["\uA07E", "\uA07E"], /* YI SYLLABLE NBAX */ + ["\uA07F", "\uA07F"], /* YI SYLLABLE NBA */ + ["\uA080", "\uA080"], /* YI SYLLABLE NBAP */ + ["\uA081", "\uA081"], /* YI SYLLABLE NBOT */ + ["\uA082", "\uA082"], /* YI SYLLABLE NBOX */ + ["\uA083", "\uA083"], /* YI SYLLABLE NBO */ + ["\uA084", "\uA084"], /* YI SYLLABLE NBOP */ + ["\uA085", "\uA085"], /* YI SYLLABLE NBUT */ + ["\uA086", "\uA086"], /* YI SYLLABLE NBUX */ + ["\uA087", "\uA087"], /* YI SYLLABLE NBU */ + ["\uA088", "\uA088"], /* YI SYLLABLE NBUP */ + ["\uA089", "\uA089"], /* YI SYLLABLE NBURX */ + ["\uA08A", "\uA08A"], /* YI SYLLABLE NBUR */ + ["\uA08B", "\uA08B"], /* YI SYLLABLE NBYT */ + ["\uA08C", "\uA08C"], /* YI SYLLABLE NBYX */ + ["\uA08D", "\uA08D"], /* YI SYLLABLE NBY */ + ["\uA08E", "\uA08E"], /* YI SYLLABLE NBYP */ + ["\uA08F", "\uA08F"], /* YI SYLLABLE NBYRX */ + ["\uA090", "\uA090"], /* YI SYLLABLE NBYR */ + ["\uA091", "\uA091"], /* YI SYLLABLE HMIT */ + ["\uA092", "\uA092"], /* YI SYLLABLE HMIX */ + ["\uA093", "\uA093"], /* YI SYLLABLE HMI */ + ["\uA094", "\uA094"], /* YI SYLLABLE HMIP */ + ["\uA095", "\uA095"], /* YI SYLLABLE HMIEX */ + ["\uA096", "\uA096"], /* YI SYLLABLE HMIE */ + ["\uA097", "\uA097"], /* YI SYLLABLE HMIEP */ + ["\uA098", "\uA098"], /* YI SYLLABLE HMAT */ + ["\uA099", "\uA099"], /* YI SYLLABLE HMAX */ + ["\uA09A", "\uA09A"], /* YI SYLLABLE HMA */ + ["\uA09B", "\uA09B"], /* YI SYLLABLE HMAP */ + ["\uA09C", "\uA09C"], /* YI SYLLABLE HMUOX */ + ["\uA09D", "\uA09D"], /* YI SYLLABLE HMUO */ + ["\uA09E", "\uA09E"], /* YI SYLLABLE HMUOP */ + ["\uA09F", "\uA09F"], /* YI SYLLABLE HMOT */ + ["\uA0A0", "\uA0A0"], /* YI SYLLABLE HMOX */ + ["\uA0A1", "\uA0A1"], /* YI SYLLABLE HMO */ + ["\uA0A2", "\uA0A2"], /* YI SYLLABLE HMOP */ + ["\uA0A3", "\uA0A3"], /* YI SYLLABLE HMUT */ + ["\uA0A4", "\uA0A4"], /* YI SYLLABLE HMUX */ + ["\uA0A5", "\uA0A5"], /* YI SYLLABLE HMU */ + ["\uA0A6", "\uA0A6"], /* YI SYLLABLE HMUP */ + ["\uA0A7", "\uA0A7"], /* YI SYLLABLE HMURX */ + ["\uA0A8", "\uA0A8"], /* YI SYLLABLE HMUR */ + ["\uA0A9", "\uA0A9"], /* YI SYLLABLE HMYX */ + ["\uA0AA", "\uA0AA"], /* YI SYLLABLE HMY */ + ["\uA0AB", "\uA0AB"], /* YI SYLLABLE HMYP */ + ["\uA0AC", "\uA0AC"], /* YI SYLLABLE HMYRX */ + ["\uA0AD", "\uA0AD"], /* YI SYLLABLE HMYR */ + ["\uA0AE", "\uA0AE"], /* YI SYLLABLE MIT */ + ["\uA0AF", "\uA0AF"], /* YI SYLLABLE MIX */ + ["\uA0B0", "\uA0B0"], /* YI SYLLABLE MI */ + ["\uA0B1", "\uA0B1"], /* YI SYLLABLE MIP */ + ["\uA0B2", "\uA0B2"], /* YI SYLLABLE MIEX */ + ["\uA0B3", "\uA0B3"], /* YI SYLLABLE MIE */ + ["\uA0B4", "\uA0B4"], /* YI SYLLABLE MIEP */ + ["\uA0B5", "\uA0B5"], /* YI SYLLABLE MAT */ + ["\uA0B6", "\uA0B6"], /* YI SYLLABLE MAX */ + ["\uA0B7", "\uA0B7"], /* YI SYLLABLE MA */ + ["\uA0B8", "\uA0B8"], /* YI SYLLABLE MAP */ + ["\uA0B9", "\uA0B9"], /* YI SYLLABLE MUOT */ + ["\uA0BA", "\uA0BA"], /* YI SYLLABLE MUOX */ + ["\uA0BB", "\uA0BB"], /* YI SYLLABLE MUO */ + ["\uA0BC", "\uA0BC"], /* YI SYLLABLE MUOP */ + ["\uA0BD", "\uA0BD"], /* YI SYLLABLE MOT */ + ["\uA0BE", "\uA0BE"], /* YI SYLLABLE MOX */ + ["\uA0BF", "\uA0BF"], /* YI SYLLABLE MO */ + ["\uA0C0", "\uA0C0"], /* YI SYLLABLE MOP */ + ["\uA0C1", "\uA0C1"], /* YI SYLLABLE MEX */ + ["\uA0C2", "\uA0C2"], /* YI SYLLABLE ME */ + ["\uA0C3", "\uA0C3"], /* YI SYLLABLE MUT */ + ["\uA0C4", "\uA0C4"], /* YI SYLLABLE MUX */ + ["\uA0C5", "\uA0C5"], /* YI SYLLABLE MU */ + ["\uA0C6", "\uA0C6"], /* YI SYLLABLE MUP */ + ["\uA0C7", "\uA0C7"], /* YI SYLLABLE MURX */ + ["\uA0C8", "\uA0C8"], /* YI SYLLABLE MUR */ + ["\uA0C9", "\uA0C9"], /* YI SYLLABLE MYT */ + ["\uA0CA", "\uA0CA"], /* YI SYLLABLE MYX */ + ["\uA0CB", "\uA0CB"], /* YI SYLLABLE MY */ + ["\uA0CC", "\uA0CC"], /* YI SYLLABLE MYP */ + ["\uA0CD", "\uA0CD"], /* YI SYLLABLE FIT */ + ["\uA0CE", "\uA0CE"], /* YI SYLLABLE FIX */ + ["\uA0CF", "\uA0CF"], /* YI SYLLABLE FI */ + ["\uA0D0", "\uA0D0"], /* YI SYLLABLE FIP */ + ["\uA0D1", "\uA0D1"], /* YI SYLLABLE FAT */ + ["\uA0D2", "\uA0D2"], /* YI SYLLABLE FAX */ + ["\uA0D3", "\uA0D3"], /* YI SYLLABLE FA */ + ["\uA0D4", "\uA0D4"], /* YI SYLLABLE FAP */ + ["\uA0D5", "\uA0D5"], /* YI SYLLABLE FOX */ + ["\uA0D6", "\uA0D6"], /* YI SYLLABLE FO */ + ["\uA0D7", "\uA0D7"], /* YI SYLLABLE FOP */ + ["\uA0D8", "\uA0D8"], /* YI SYLLABLE FUT */ + ["\uA0D9", "\uA0D9"], /* YI SYLLABLE FUX */ + ["\uA0DA", "\uA0DA"], /* YI SYLLABLE FU */ + ["\uA0DB", "\uA0DB"], /* YI SYLLABLE FUP */ + ["\uA0DC", "\uA0DC"], /* YI SYLLABLE FURX */ + ["\uA0DD", "\uA0DD"], /* YI SYLLABLE FUR */ + ["\uA0DE", "\uA0DE"], /* YI SYLLABLE FYT */ + ["\uA0DF", "\uA0DF"], /* YI SYLLABLE FYX */ + ["\uA0E0", "\uA0E0"], /* YI SYLLABLE FY */ + ["\uA0E1", "\uA0E1"], /* YI SYLLABLE FYP */ + ["\uA0E2", "\uA0E2"], /* YI SYLLABLE VIT */ + ["\uA0E3", "\uA0E3"], /* YI SYLLABLE VIX */ + ["\uA0E4", "\uA0E4"], /* YI SYLLABLE VI */ + ["\uA0E5", "\uA0E5"], /* YI SYLLABLE VIP */ + ["\uA0E6", "\uA0E6"], /* YI SYLLABLE VIET */ + ["\uA0E7", "\uA0E7"], /* YI SYLLABLE VIEX */ + ["\uA0E8", "\uA0E8"], /* YI SYLLABLE VIE */ + ["\uA0E9", "\uA0E9"], /* YI SYLLABLE VIEP */ + ["\uA0EA", "\uA0EA"], /* YI SYLLABLE VAT */ + ["\uA0EB", "\uA0EB"], /* YI SYLLABLE VAX */ + ["\uA0EC", "\uA0EC"], /* YI SYLLABLE VA */ + ["\uA0ED", "\uA0ED"], /* YI SYLLABLE VAP */ + ["\uA0EE", "\uA0EE"], /* YI SYLLABLE VOT */ + ["\uA0EF", "\uA0EF"], /* YI SYLLABLE VOX */ + ["\uA0F0", "\uA0F0"], /* YI SYLLABLE VO */ + ["\uA0F1", "\uA0F1"], /* YI SYLLABLE VOP */ + ["\uA0F2", "\uA0F2"], /* YI SYLLABLE VEX */ + ["\uA0F3", "\uA0F3"], /* YI SYLLABLE VEP */ + ["\uA0F4", "\uA0F4"], /* YI SYLLABLE VUT */ + ["\uA0F5", "\uA0F5"], /* YI SYLLABLE VUX */ + ["\uA0F6", "\uA0F6"], /* YI SYLLABLE VU */ + ["\uA0F7", "\uA0F7"], /* YI SYLLABLE VUP */ + ["\uA0F8", "\uA0F8"], /* YI SYLLABLE VURX */ + ["\uA0F9", "\uA0F9"], /* YI SYLLABLE VUR */ + ["\uA0FA", "\uA0FA"], /* YI SYLLABLE VYT */ + ["\uA0FB", "\uA0FB"], /* YI SYLLABLE VYX */ + ["\uA0FC", "\uA0FC"], /* YI SYLLABLE VY */ + ["\uA0FD", "\uA0FD"], /* YI SYLLABLE VYP */ + ["\uA0FE", "\uA0FE"], /* YI SYLLABLE VYRX */ + ["\uA0FF", "\uA0FF"], /* YI SYLLABLE VYR */ + ["\uA100", "\uA100"], /* YI SYLLABLE DIT */ + ["\uA101", "\uA101"], /* YI SYLLABLE DIX */ + ["\uA102", "\uA102"], /* YI SYLLABLE DI */ + ["\uA103", "\uA103"], /* YI SYLLABLE DIP */ + ["\uA104", "\uA104"], /* YI SYLLABLE DIEX */ + ["\uA105", "\uA105"], /* YI SYLLABLE DIE */ + ["\uA106", "\uA106"], /* YI SYLLABLE DIEP */ + ["\uA107", "\uA107"], /* YI SYLLABLE DAT */ + ["\uA108", "\uA108"], /* YI SYLLABLE DAX */ + ["\uA109", "\uA109"], /* YI SYLLABLE DA */ + ["\uA10A", "\uA10A"], /* YI SYLLABLE DAP */ + ["\uA10B", "\uA10B"], /* YI SYLLABLE DUOX */ + ["\uA10C", "\uA10C"], /* YI SYLLABLE DUO */ + ["\uA10D", "\uA10D"], /* YI SYLLABLE DOT */ + ["\uA10E", "\uA10E"], /* YI SYLLABLE DOX */ + ["\uA10F", "\uA10F"], /* YI SYLLABLE DO */ + ["\uA110", "\uA110"], /* YI SYLLABLE DOP */ + ["\uA111", "\uA111"], /* YI SYLLABLE DEX */ + ["\uA112", "\uA112"], /* YI SYLLABLE DE */ + ["\uA113", "\uA113"], /* YI SYLLABLE DEP */ + ["\uA114", "\uA114"], /* YI SYLLABLE DUT */ + ["\uA115", "\uA115"], /* YI SYLLABLE DUX */ + ["\uA116", "\uA116"], /* YI SYLLABLE DU */ + ["\uA117", "\uA117"], /* YI SYLLABLE DUP */ + ["\uA118", "\uA118"], /* YI SYLLABLE DURX */ + ["\uA119", "\uA119"], /* YI SYLLABLE DUR */ + ["\uA11A", "\uA11A"], /* YI SYLLABLE TIT */ + ["\uA11B", "\uA11B"], /* YI SYLLABLE TIX */ + ["\uA11C", "\uA11C"], /* YI SYLLABLE TI */ + ["\uA11D", "\uA11D"], /* YI SYLLABLE TIP */ + ["\uA11E", "\uA11E"], /* YI SYLLABLE TIEX */ + ["\uA11F", "\uA11F"], /* YI SYLLABLE TIE */ + ["\uA120", "\uA120"], /* YI SYLLABLE TIEP */ + ["\uA121", "\uA121"], /* YI SYLLABLE TAT */ + ["\uA122", "\uA122"], /* YI SYLLABLE TAX */ + ["\uA123", "\uA123"], /* YI SYLLABLE TA */ + ["\uA124", "\uA124"], /* YI SYLLABLE TAP */ + ["\uA125", "\uA125"], /* YI SYLLABLE TUOT */ + ["\uA126", "\uA126"], /* YI SYLLABLE TUOX */ + ["\uA127", "\uA127"], /* YI SYLLABLE TUO */ + ["\uA128", "\uA128"], /* YI SYLLABLE TUOP */ + ["\uA129", "\uA129"], /* YI SYLLABLE TOT */ + ["\uA12A", "\uA12A"], /* YI SYLLABLE TOX */ + ["\uA12B", "\uA12B"], /* YI SYLLABLE TO */ + ["\uA12C", "\uA12C"], /* YI SYLLABLE TOP */ + ["\uA12D", "\uA12D"], /* YI SYLLABLE TEX */ + ["\uA12E", "\uA12E"], /* YI SYLLABLE TE */ + ["\uA12F", "\uA12F"], /* YI SYLLABLE TEP */ + ["\uA130", "\uA130"], /* YI SYLLABLE TUT */ + ["\uA131", "\uA131"], /* YI SYLLABLE TUX */ + ["\uA132", "\uA132"], /* YI SYLLABLE TU */ + ["\uA133", "\uA133"], /* YI SYLLABLE TUP */ + ["\uA134", "\uA134"], /* YI SYLLABLE TURX */ + ["\uA135", "\uA135"], /* YI SYLLABLE TUR */ + ["\uA136", "\uA136"], /* YI SYLLABLE DDIT */ + ["\uA137", "\uA137"], /* YI SYLLABLE DDIX */ + ["\uA138", "\uA138"], /* YI SYLLABLE DDI */ + ["\uA139", "\uA139"], /* YI SYLLABLE DDIP */ + ["\uA13A", "\uA13A"], /* YI SYLLABLE DDIEX */ + ["\uA13B", "\uA13B"], /* YI SYLLABLE DDIE */ + ["\uA13C", "\uA13C"], /* YI SYLLABLE DDIEP */ + ["\uA13D", "\uA13D"], /* YI SYLLABLE DDAT */ + ["\uA13E", "\uA13E"], /* YI SYLLABLE DDAX */ + ["\uA13F", "\uA13F"], /* YI SYLLABLE DDA */ + ["\uA140", "\uA140"], /* YI SYLLABLE DDAP */ + ["\uA141", "\uA141"], /* YI SYLLABLE DDUOX */ + ["\uA142", "\uA142"], /* YI SYLLABLE DDUO */ + ["\uA143", "\uA143"], /* YI SYLLABLE DDUOP */ + ["\uA144", "\uA144"], /* YI SYLLABLE DDOT */ + ["\uA145", "\uA145"], /* YI SYLLABLE DDOX */ + ["\uA146", "\uA146"], /* YI SYLLABLE DDO */ + ["\uA147", "\uA147"], /* YI SYLLABLE DDOP */ + ["\uA148", "\uA148"], /* YI SYLLABLE DDEX */ + ["\uA149", "\uA149"], /* YI SYLLABLE DDE */ + ["\uA14A", "\uA14A"], /* YI SYLLABLE DDEP */ + ["\uA14B", "\uA14B"], /* YI SYLLABLE DDUT */ + ["\uA14C", "\uA14C"], /* YI SYLLABLE DDUX */ + ["\uA14D", "\uA14D"], /* YI SYLLABLE DDU */ + ["\uA14E", "\uA14E"], /* YI SYLLABLE DDUP */ + ["\uA14F", "\uA14F"], /* YI SYLLABLE DDURX */ + ["\uA150", "\uA150"], /* YI SYLLABLE DDUR */ + ["\uA151", "\uA151"], /* YI SYLLABLE NDIT */ + ["\uA152", "\uA152"], /* YI SYLLABLE NDIX */ + ["\uA153", "\uA153"], /* YI SYLLABLE NDI */ + ["\uA154", "\uA154"], /* YI SYLLABLE NDIP */ + ["\uA155", "\uA155"], /* YI SYLLABLE NDIEX */ + ["\uA156", "\uA156"], /* YI SYLLABLE NDIE */ + ["\uA157", "\uA157"], /* YI SYLLABLE NDAT */ + ["\uA158", "\uA158"], /* YI SYLLABLE NDAX */ + ["\uA159", "\uA159"], /* YI SYLLABLE NDA */ + ["\uA15A", "\uA15A"], /* YI SYLLABLE NDAP */ + ["\uA15B", "\uA15B"], /* YI SYLLABLE NDOT */ + ["\uA15C", "\uA15C"], /* YI SYLLABLE NDOX */ + ["\uA15D", "\uA15D"], /* YI SYLLABLE NDO */ + ["\uA15E", "\uA15E"], /* YI SYLLABLE NDOP */ + ["\uA15F", "\uA15F"], /* YI SYLLABLE NDEX */ + ["\uA160", "\uA160"], /* YI SYLLABLE NDE */ + ["\uA161", "\uA161"], /* YI SYLLABLE NDEP */ + ["\uA162", "\uA162"], /* YI SYLLABLE NDUT */ + ["\uA163", "\uA163"], /* YI SYLLABLE NDUX */ + ["\uA164", "\uA164"], /* YI SYLLABLE NDU */ + ["\uA165", "\uA165"], /* YI SYLLABLE NDUP */ + ["\uA166", "\uA166"], /* YI SYLLABLE NDURX */ + ["\uA167", "\uA167"], /* YI SYLLABLE NDUR */ + ["\uA168", "\uA168"], /* YI SYLLABLE HNIT */ + ["\uA169", "\uA169"], /* YI SYLLABLE HNIX */ + ["\uA16A", "\uA16A"], /* YI SYLLABLE HNI */ + ["\uA16B", "\uA16B"], /* YI SYLLABLE HNIP */ + ["\uA16C", "\uA16C"], /* YI SYLLABLE HNIET */ + ["\uA16D", "\uA16D"], /* YI SYLLABLE HNIEX */ + ["\uA16E", "\uA16E"], /* YI SYLLABLE HNIE */ + ["\uA16F", "\uA16F"], /* YI SYLLABLE HNIEP */ + ["\uA170", "\uA170"], /* YI SYLLABLE HNAT */ + ["\uA171", "\uA171"], /* YI SYLLABLE HNAX */ + ["\uA172", "\uA172"], /* YI SYLLABLE HNA */ + ["\uA173", "\uA173"], /* YI SYLLABLE HNAP */ + ["\uA174", "\uA174"], /* YI SYLLABLE HNUOX */ + ["\uA175", "\uA175"], /* YI SYLLABLE HNUO */ + ["\uA176", "\uA176"], /* YI SYLLABLE HNOT */ + ["\uA177", "\uA177"], /* YI SYLLABLE HNOX */ + ["\uA178", "\uA178"], /* YI SYLLABLE HNOP */ + ["\uA179", "\uA179"], /* YI SYLLABLE HNEX */ + ["\uA17A", "\uA17A"], /* YI SYLLABLE HNE */ + ["\uA17B", "\uA17B"], /* YI SYLLABLE HNEP */ + ["\uA17C", "\uA17C"], /* YI SYLLABLE HNUT */ + ["\uA17D", "\uA17D"], /* YI SYLLABLE NIT */ + ["\uA17E", "\uA17E"], /* YI SYLLABLE NIX */ + ["\uA17F", "\uA17F"], /* YI SYLLABLE NI */ + ["\uA180", "\uA180"], /* YI SYLLABLE NIP */ + ["\uA181", "\uA181"], /* YI SYLLABLE NIEX */ + ["\uA182", "\uA182"], /* YI SYLLABLE NIE */ + ["\uA183", "\uA183"], /* YI SYLLABLE NIEP */ + ["\uA184", "\uA184"], /* YI SYLLABLE NAX */ + ["\uA185", "\uA185"], /* YI SYLLABLE NA */ + ["\uA186", "\uA186"], /* YI SYLLABLE NAP */ + ["\uA187", "\uA187"], /* YI SYLLABLE NUOX */ + ["\uA188", "\uA188"], /* YI SYLLABLE NUO */ + ["\uA189", "\uA189"], /* YI SYLLABLE NUOP */ + ["\uA18A", "\uA18A"], /* YI SYLLABLE NOT */ + ["\uA18B", "\uA18B"], /* YI SYLLABLE NOX */ + ["\uA18C", "\uA18C"], /* YI SYLLABLE NO */ + ["\uA18D", "\uA18D"], /* YI SYLLABLE NOP */ + ["\uA18E", "\uA18E"], /* YI SYLLABLE NEX */ + ["\uA18F", "\uA18F"], /* YI SYLLABLE NE */ + ["\uA190", "\uA190"], /* YI SYLLABLE NEP */ + ["\uA191", "\uA191"], /* YI SYLLABLE NUT */ + ["\uA192", "\uA192"], /* YI SYLLABLE NUX */ + ["\uA193", "\uA193"], /* YI SYLLABLE NU */ + ["\uA194", "\uA194"], /* YI SYLLABLE NUP */ + ["\uA195", "\uA195"], /* YI SYLLABLE NURX */ + ["\uA196", "\uA196"], /* YI SYLLABLE NUR */ + ["\uA197", "\uA197"], /* YI SYLLABLE HLIT */ + ["\uA198", "\uA198"], /* YI SYLLABLE HLIX */ + ["\uA199", "\uA199"], /* YI SYLLABLE HLI */ + ["\uA19A", "\uA19A"], /* YI SYLLABLE HLIP */ + ["\uA19B", "\uA19B"], /* YI SYLLABLE HLIEX */ + ["\uA19C", "\uA19C"], /* YI SYLLABLE HLIE */ + ["\uA19D", "\uA19D"], /* YI SYLLABLE HLIEP */ + ["\uA19E", "\uA19E"], /* YI SYLLABLE HLAT */ + ["\uA19F", "\uA19F"], /* YI SYLLABLE HLAX */ + ["\uA1A0", "\uA1A0"], /* YI SYLLABLE HLA */ + ["\uA1A1", "\uA1A1"], /* YI SYLLABLE HLAP */ + ["\uA1A2", "\uA1A2"], /* YI SYLLABLE HLUOX */ + ["\uA1A3", "\uA1A3"], /* YI SYLLABLE HLUO */ + ["\uA1A4", "\uA1A4"], /* YI SYLLABLE HLUOP */ + ["\uA1A5", "\uA1A5"], /* YI SYLLABLE HLOX */ + ["\uA1A6", "\uA1A6"], /* YI SYLLABLE HLO */ + ["\uA1A7", "\uA1A7"], /* YI SYLLABLE HLOP */ + ["\uA1A8", "\uA1A8"], /* YI SYLLABLE HLEX */ + ["\uA1A9", "\uA1A9"], /* YI SYLLABLE HLE */ + ["\uA1AA", "\uA1AA"], /* YI SYLLABLE HLEP */ + ["\uA1AB", "\uA1AB"], /* YI SYLLABLE HLUT */ + ["\uA1AC", "\uA1AC"], /* YI SYLLABLE HLUX */ + ["\uA1AD", "\uA1AD"], /* YI SYLLABLE HLU */ + ["\uA1AE", "\uA1AE"], /* YI SYLLABLE HLUP */ + ["\uA1AF", "\uA1AF"], /* YI SYLLABLE HLURX */ + ["\uA1B0", "\uA1B0"], /* YI SYLLABLE HLUR */ + ["\uA1B1", "\uA1B1"], /* YI SYLLABLE HLYT */ + ["\uA1B2", "\uA1B2"], /* YI SYLLABLE HLYX */ + ["\uA1B3", "\uA1B3"], /* YI SYLLABLE HLY */ + ["\uA1B4", "\uA1B4"], /* YI SYLLABLE HLYP */ + ["\uA1B5", "\uA1B5"], /* YI SYLLABLE HLYRX */ + ["\uA1B6", "\uA1B6"], /* YI SYLLABLE HLYR */ + ["\uA1B7", "\uA1B7"], /* YI SYLLABLE LIT */ + ["\uA1B8", "\uA1B8"], /* YI SYLLABLE LIX */ + ["\uA1B9", "\uA1B9"], /* YI SYLLABLE LI */ + ["\uA1BA", "\uA1BA"], /* YI SYLLABLE LIP */ + ["\uA1BB", "\uA1BB"], /* YI SYLLABLE LIET */ + ["\uA1BC", "\uA1BC"], /* YI SYLLABLE LIEX */ + ["\uA1BD", "\uA1BD"], /* YI SYLLABLE LIE */ + ["\uA1BE", "\uA1BE"], /* YI SYLLABLE LIEP */ + ["\uA1BF", "\uA1BF"], /* YI SYLLABLE LAT */ + ["\uA1C0", "\uA1C0"], /* YI SYLLABLE LAX */ + ["\uA1C1", "\uA1C1"], /* YI SYLLABLE LA */ + ["\uA1C2", "\uA1C2"], /* YI SYLLABLE LAP */ + ["\uA1C3", "\uA1C3"], /* YI SYLLABLE LUOT */ + ["\uA1C4", "\uA1C4"], /* YI SYLLABLE LUOX */ + ["\uA1C5", "\uA1C5"], /* YI SYLLABLE LUO */ + ["\uA1C6", "\uA1C6"], /* YI SYLLABLE LUOP */ + ["\uA1C7", "\uA1C7"], /* YI SYLLABLE LOT */ + ["\uA1C8", "\uA1C8"], /* YI SYLLABLE LOX */ + ["\uA1C9", "\uA1C9"], /* YI SYLLABLE LO */ + ["\uA1CA", "\uA1CA"], /* YI SYLLABLE LOP */ + ["\uA1CB", "\uA1CB"], /* YI SYLLABLE LEX */ + ["\uA1CC", "\uA1CC"], /* YI SYLLABLE LE */ + ["\uA1CD", "\uA1CD"], /* YI SYLLABLE LEP */ + ["\uA1CE", "\uA1CE"], /* YI SYLLABLE LUT */ + ["\uA1CF", "\uA1CF"], /* YI SYLLABLE LUX */ + ["\uA1D0", "\uA1D0"], /* YI SYLLABLE LU */ + ["\uA1D1", "\uA1D1"], /* YI SYLLABLE LUP */ + ["\uA1D2", "\uA1D2"], /* YI SYLLABLE LURX */ + ["\uA1D3", "\uA1D3"], /* YI SYLLABLE LUR */ + ["\uA1D4", "\uA1D4"], /* YI SYLLABLE LYT */ + ["\uA1D5", "\uA1D5"], /* YI SYLLABLE LYX */ + ["\uA1D6", "\uA1D6"], /* YI SYLLABLE LY */ + ["\uA1D7", "\uA1D7"], /* YI SYLLABLE LYP */ + ["\uA1D8", "\uA1D8"], /* YI SYLLABLE LYRX */ + ["\uA1D9", "\uA1D9"], /* YI SYLLABLE LYR */ + ["\uA1DA", "\uA1DA"], /* YI SYLLABLE GIT */ + ["\uA1DB", "\uA1DB"], /* YI SYLLABLE GIX */ + ["\uA1DC", "\uA1DC"], /* YI SYLLABLE GI */ + ["\uA1DD", "\uA1DD"], /* YI SYLLABLE GIP */ + ["\uA1DE", "\uA1DE"], /* YI SYLLABLE GIET */ + ["\uA1DF", "\uA1DF"], /* YI SYLLABLE GIEX */ + ["\uA1E0", "\uA1E0"], /* YI SYLLABLE GIE */ + ["\uA1E1", "\uA1E1"], /* YI SYLLABLE GIEP */ + ["\uA1E2", "\uA1E2"], /* YI SYLLABLE GAT */ + ["\uA1E3", "\uA1E3"], /* YI SYLLABLE GAX */ + ["\uA1E4", "\uA1E4"], /* YI SYLLABLE GA */ + ["\uA1E5", "\uA1E5"], /* YI SYLLABLE GAP */ + ["\uA1E6", "\uA1E6"], /* YI SYLLABLE GUOT */ + ["\uA1E7", "\uA1E7"], /* YI SYLLABLE GUOX */ + ["\uA1E8", "\uA1E8"], /* YI SYLLABLE GUO */ + ["\uA1E9", "\uA1E9"], /* YI SYLLABLE GUOP */ + ["\uA1EA", "\uA1EA"], /* YI SYLLABLE GOT */ + ["\uA1EB", "\uA1EB"], /* YI SYLLABLE GOX */ + ["\uA1EC", "\uA1EC"], /* YI SYLLABLE GO */ + ["\uA1ED", "\uA1ED"], /* YI SYLLABLE GOP */ + ["\uA1EE", "\uA1EE"], /* YI SYLLABLE GET */ + ["\uA1EF", "\uA1EF"], /* YI SYLLABLE GEX */ + ["\uA1F0", "\uA1F0"], /* YI SYLLABLE GE */ + ["\uA1F1", "\uA1F1"], /* YI SYLLABLE GEP */ + ["\uA1F2", "\uA1F2"], /* YI SYLLABLE GUT */ + ["\uA1F3", "\uA1F3"], /* YI SYLLABLE GUX */ + ["\uA1F4", "\uA1F4"], /* YI SYLLABLE GU */ + ["\uA1F5", "\uA1F5"], /* YI SYLLABLE GUP */ + ["\uA1F6", "\uA1F6"], /* YI SYLLABLE GURX */ + ["\uA1F7", "\uA1F7"], /* YI SYLLABLE GUR */ + ["\uA1F8", "\uA1F8"], /* YI SYLLABLE KIT */ + ["\uA1F9", "\uA1F9"], /* YI SYLLABLE KIX */ + ["\uA1FA", "\uA1FA"], /* YI SYLLABLE KI */ + ["\uA1FB", "\uA1FB"], /* YI SYLLABLE KIP */ + ["\uA1FC", "\uA1FC"], /* YI SYLLABLE KIEX */ + ["\uA1FD", "\uA1FD"], /* YI SYLLABLE KIE */ + ["\uA1FE", "\uA1FE"], /* YI SYLLABLE KIEP */ + ["\uA1FF", "\uA1FF"], /* YI SYLLABLE KAT */ + ["\uA200", "\uA200"], /* YI SYLLABLE KAX */ + ["\uA201", "\uA201"], /* YI SYLLABLE KA */ + ["\uA202", "\uA202"], /* YI SYLLABLE KAP */ + ["\uA203", "\uA203"], /* YI SYLLABLE KUOX */ + ["\uA204", "\uA204"], /* YI SYLLABLE KUO */ + ["\uA205", "\uA205"], /* YI SYLLABLE KUOP */ + ["\uA206", "\uA206"], /* YI SYLLABLE KOT */ + ["\uA207", "\uA207"], /* YI SYLLABLE KOX */ + ["\uA208", "\uA208"], /* YI SYLLABLE KO */ + ["\uA209", "\uA209"], /* YI SYLLABLE KOP */ + ["\uA20A", "\uA20A"], /* YI SYLLABLE KET */ + ["\uA20B", "\uA20B"], /* YI SYLLABLE KEX */ + ["\uA20C", "\uA20C"], /* YI SYLLABLE KE */ + ["\uA20D", "\uA20D"], /* YI SYLLABLE KEP */ + ["\uA20E", "\uA20E"], /* YI SYLLABLE KUT */ + ["\uA20F", "\uA20F"], /* YI SYLLABLE KUX */ + ["\uA210", "\uA210"], /* YI SYLLABLE KU */ + ["\uA211", "\uA211"], /* YI SYLLABLE KUP */ + ["\uA212", "\uA212"], /* YI SYLLABLE KURX */ + ["\uA213", "\uA213"], /* YI SYLLABLE KUR */ + ["\uA214", "\uA214"], /* YI SYLLABLE GGIT */ + ["\uA215", "\uA215"], /* YI SYLLABLE GGIX */ + ["\uA216", "\uA216"], /* YI SYLLABLE GGI */ + ["\uA217", "\uA217"], /* YI SYLLABLE GGIEX */ + ["\uA218", "\uA218"], /* YI SYLLABLE GGIE */ + ["\uA219", "\uA219"], /* YI SYLLABLE GGIEP */ + ["\uA21A", "\uA21A"], /* YI SYLLABLE GGAT */ + ["\uA21B", "\uA21B"], /* YI SYLLABLE GGAX */ + ["\uA21C", "\uA21C"], /* YI SYLLABLE GGA */ + ["\uA21D", "\uA21D"], /* YI SYLLABLE GGAP */ + ["\uA21E", "\uA21E"], /* YI SYLLABLE GGUOT */ + ["\uA21F", "\uA21F"], /* YI SYLLABLE GGUOX */ + ["\uA220", "\uA220"], /* YI SYLLABLE GGUO */ + ["\uA221", "\uA221"], /* YI SYLLABLE GGUOP */ + ["\uA222", "\uA222"], /* YI SYLLABLE GGOT */ + ["\uA223", "\uA223"], /* YI SYLLABLE GGOX */ + ["\uA224", "\uA224"], /* YI SYLLABLE GGO */ + ["\uA225", "\uA225"], /* YI SYLLABLE GGOP */ + ["\uA226", "\uA226"], /* YI SYLLABLE GGET */ + ["\uA227", "\uA227"], /* YI SYLLABLE GGEX */ + ["\uA228", "\uA228"], /* YI SYLLABLE GGE */ + ["\uA229", "\uA229"], /* YI SYLLABLE GGEP */ + ["\uA22A", "\uA22A"], /* YI SYLLABLE GGUT */ + ["\uA22B", "\uA22B"], /* YI SYLLABLE GGUX */ + ["\uA22C", "\uA22C"], /* YI SYLLABLE GGU */ + ["\uA22D", "\uA22D"], /* YI SYLLABLE GGUP */ + ["\uA22E", "\uA22E"], /* YI SYLLABLE GGURX */ + ["\uA22F", "\uA22F"], /* YI SYLLABLE GGUR */ + ["\uA230", "\uA230"], /* YI SYLLABLE MGIEX */ + ["\uA231", "\uA231"], /* YI SYLLABLE MGIE */ + ["\uA232", "\uA232"], /* YI SYLLABLE MGAT */ + ["\uA233", "\uA233"], /* YI SYLLABLE MGAX */ + ["\uA234", "\uA234"], /* YI SYLLABLE MGA */ + ["\uA235", "\uA235"], /* YI SYLLABLE MGAP */ + ["\uA236", "\uA236"], /* YI SYLLABLE MGUOX */ + ["\uA237", "\uA237"], /* YI SYLLABLE MGUO */ + ["\uA238", "\uA238"], /* YI SYLLABLE MGUOP */ + ["\uA239", "\uA239"], /* YI SYLLABLE MGOT */ + ["\uA23A", "\uA23A"], /* YI SYLLABLE MGOX */ + ["\uA23B", "\uA23B"], /* YI SYLLABLE MGO */ + ["\uA23C", "\uA23C"], /* YI SYLLABLE MGOP */ + ["\uA23D", "\uA23D"], /* YI SYLLABLE MGEX */ + ["\uA23E", "\uA23E"], /* YI SYLLABLE MGE */ + ["\uA23F", "\uA23F"], /* YI SYLLABLE MGEP */ + ["\uA240", "\uA240"], /* YI SYLLABLE MGUT */ + ["\uA241", "\uA241"], /* YI SYLLABLE MGUX */ + ["\uA242", "\uA242"], /* YI SYLLABLE MGU */ + ["\uA243", "\uA243"], /* YI SYLLABLE MGUP */ + ["\uA244", "\uA244"], /* YI SYLLABLE MGURX */ + ["\uA245", "\uA245"], /* YI SYLLABLE MGUR */ + ["\uA246", "\uA246"], /* YI SYLLABLE HXIT */ + ["\uA247", "\uA247"], /* YI SYLLABLE HXIX */ + ["\uA248", "\uA248"], /* YI SYLLABLE HXI */ + ["\uA249", "\uA249"], /* YI SYLLABLE HXIP */ + ["\uA24A", "\uA24A"], /* YI SYLLABLE HXIET */ + ["\uA24B", "\uA24B"], /* YI SYLLABLE HXIEX */ + ["\uA24C", "\uA24C"], /* YI SYLLABLE HXIE */ + ["\uA24D", "\uA24D"], /* YI SYLLABLE HXIEP */ + ["\uA24E", "\uA24E"], /* YI SYLLABLE HXAT */ + ["\uA24F", "\uA24F"], /* YI SYLLABLE HXAX */ + ["\uA250", "\uA250"], /* YI SYLLABLE HXA */ + ["\uA251", "\uA251"], /* YI SYLLABLE HXAP */ + ["\uA252", "\uA252"], /* YI SYLLABLE HXUOT */ + ["\uA253", "\uA253"], /* YI SYLLABLE HXUOX */ + ["\uA254", "\uA254"], /* YI SYLLABLE HXUO */ + ["\uA255", "\uA255"], /* YI SYLLABLE HXUOP */ + ["\uA256", "\uA256"], /* YI SYLLABLE HXOT */ + ["\uA257", "\uA257"], /* YI SYLLABLE HXOX */ + ["\uA258", "\uA258"], /* YI SYLLABLE HXO */ + ["\uA259", "\uA259"], /* YI SYLLABLE HXOP */ + ["\uA25A", "\uA25A"], /* YI SYLLABLE HXEX */ + ["\uA25B", "\uA25B"], /* YI SYLLABLE HXE */ + ["\uA25C", "\uA25C"], /* YI SYLLABLE HXEP */ + ["\uA25D", "\uA25D"], /* YI SYLLABLE NGIEX */ + ["\uA25E", "\uA25E"], /* YI SYLLABLE NGIE */ + ["\uA25F", "\uA25F"], /* YI SYLLABLE NGIEP */ + ["\uA260", "\uA260"], /* YI SYLLABLE NGAT */ + ["\uA261", "\uA261"], /* YI SYLLABLE NGAX */ + ["\uA262", "\uA262"], /* YI SYLLABLE NGA */ + ["\uA263", "\uA263"], /* YI SYLLABLE NGAP */ + ["\uA264", "\uA264"], /* YI SYLLABLE NGUOT */ + ["\uA265", "\uA265"], /* YI SYLLABLE NGUOX */ + ["\uA266", "\uA266"], /* YI SYLLABLE NGUO */ + ["\uA267", "\uA267"], /* YI SYLLABLE NGOT */ + ["\uA268", "\uA268"], /* YI SYLLABLE NGOX */ + ["\uA269", "\uA269"], /* YI SYLLABLE NGO */ + ["\uA26A", "\uA26A"], /* YI SYLLABLE NGOP */ + ["\uA26B", "\uA26B"], /* YI SYLLABLE NGEX */ + ["\uA26C", "\uA26C"], /* YI SYLLABLE NGE */ + ["\uA26D", "\uA26D"], /* YI SYLLABLE NGEP */ + ["\uA26E", "\uA26E"], /* YI SYLLABLE HIT */ + ["\uA26F", "\uA26F"], /* YI SYLLABLE HIEX */ + ["\uA270", "\uA270"], /* YI SYLLABLE HIE */ + ["\uA271", "\uA271"], /* YI SYLLABLE HAT */ + ["\uA272", "\uA272"], /* YI SYLLABLE HAX */ + ["\uA273", "\uA273"], /* YI SYLLABLE HA */ + ["\uA274", "\uA274"], /* YI SYLLABLE HAP */ + ["\uA275", "\uA275"], /* YI SYLLABLE HUOT */ + ["\uA276", "\uA276"], /* YI SYLLABLE HUOX */ + ["\uA277", "\uA277"], /* YI SYLLABLE HUO */ + ["\uA278", "\uA278"], /* YI SYLLABLE HUOP */ + ["\uA279", "\uA279"], /* YI SYLLABLE HOT */ + ["\uA27A", "\uA27A"], /* YI SYLLABLE HOX */ + ["\uA27B", "\uA27B"], /* YI SYLLABLE HO */ + ["\uA27C", "\uA27C"], /* YI SYLLABLE HOP */ + ["\uA27D", "\uA27D"], /* YI SYLLABLE HEX */ + ["\uA27E", "\uA27E"], /* YI SYLLABLE HE */ + ["\uA27F", "\uA27F"], /* YI SYLLABLE HEP */ + ["\uA280", "\uA280"], /* YI SYLLABLE WAT */ + ["\uA281", "\uA281"], /* YI SYLLABLE WAX */ + ["\uA282", "\uA282"], /* YI SYLLABLE WA */ + ["\uA283", "\uA283"], /* YI SYLLABLE WAP */ + ["\uA284", "\uA284"], /* YI SYLLABLE WUOX */ + ["\uA285", "\uA285"], /* YI SYLLABLE WUO */ + ["\uA286", "\uA286"], /* YI SYLLABLE WUOP */ + ["\uA287", "\uA287"], /* YI SYLLABLE WOX */ + ["\uA288", "\uA288"], /* YI SYLLABLE WO */ + ["\uA289", "\uA289"], /* YI SYLLABLE WOP */ + ["\uA28A", "\uA28A"], /* YI SYLLABLE WEX */ + ["\uA28B", "\uA28B"], /* YI SYLLABLE WE */ + ["\uA28C", "\uA28C"], /* YI SYLLABLE WEP */ + ["\uA28D", "\uA28D"], /* YI SYLLABLE ZIT */ + ["\uA28E", "\uA28E"], /* YI SYLLABLE ZIX */ + ["\uA28F", "\uA28F"], /* YI SYLLABLE ZI */ + ["\uA290", "\uA290"], /* YI SYLLABLE ZIP */ + ["\uA291", "\uA291"], /* YI SYLLABLE ZIEX */ + ["\uA292", "\uA292"], /* YI SYLLABLE ZIE */ + ["\uA293", "\uA293"], /* YI SYLLABLE ZIEP */ + ["\uA294", "\uA294"], /* YI SYLLABLE ZAT */ + ["\uA295", "\uA295"], /* YI SYLLABLE ZAX */ + ["\uA296", "\uA296"], /* YI SYLLABLE ZA */ + ["\uA297", "\uA297"], /* YI SYLLABLE ZAP */ + ["\uA298", "\uA298"], /* YI SYLLABLE ZUOX */ + ["\uA299", "\uA299"], /* YI SYLLABLE ZUO */ + ["\uA29A", "\uA29A"], /* YI SYLLABLE ZUOP */ + ["\uA29B", "\uA29B"], /* YI SYLLABLE ZOT */ + ["\uA29C", "\uA29C"], /* YI SYLLABLE ZOX */ + ["\uA29D", "\uA29D"], /* YI SYLLABLE ZO */ + ["\uA29E", "\uA29E"], /* YI SYLLABLE ZOP */ + ["\uA29F", "\uA29F"], /* YI SYLLABLE ZEX */ + ["\uA2A0", "\uA2A0"], /* YI SYLLABLE ZE */ + ["\uA2A1", "\uA2A1"], /* YI SYLLABLE ZEP */ + ["\uA2A2", "\uA2A2"], /* YI SYLLABLE ZUT */ + ["\uA2A3", "\uA2A3"], /* YI SYLLABLE ZUX */ + ["\uA2A4", "\uA2A4"], /* YI SYLLABLE ZU */ + ["\uA2A5", "\uA2A5"], /* YI SYLLABLE ZUP */ + ["\uA2A6", "\uA2A6"], /* YI SYLLABLE ZURX */ + ["\uA2A7", "\uA2A7"], /* YI SYLLABLE ZUR */ + ["\uA2A8", "\uA2A8"], /* YI SYLLABLE ZYT */ + ["\uA2A9", "\uA2A9"], /* YI SYLLABLE ZYX */ + ["\uA2AA", "\uA2AA"], /* YI SYLLABLE ZY */ + ["\uA2AB", "\uA2AB"], /* YI SYLLABLE ZYP */ + ["\uA2AC", "\uA2AC"], /* YI SYLLABLE ZYRX */ + ["\uA2AD", "\uA2AD"], /* YI SYLLABLE ZYR */ + ["\uA2AE", "\uA2AE"], /* YI SYLLABLE CIT */ + ["\uA2AF", "\uA2AF"], /* YI SYLLABLE CIX */ + ["\uA2B0", "\uA2B0"], /* YI SYLLABLE CI */ + ["\uA2B1", "\uA2B1"], /* YI SYLLABLE CIP */ + ["\uA2B2", "\uA2B2"], /* YI SYLLABLE CIET */ + ["\uA2B3", "\uA2B3"], /* YI SYLLABLE CIEX */ + ["\uA2B4", "\uA2B4"], /* YI SYLLABLE CIE */ + ["\uA2B5", "\uA2B5"], /* YI SYLLABLE CIEP */ + ["\uA2B6", "\uA2B6"], /* YI SYLLABLE CAT */ + ["\uA2B7", "\uA2B7"], /* YI SYLLABLE CAX */ + ["\uA2B8", "\uA2B8"], /* YI SYLLABLE CA */ + ["\uA2B9", "\uA2B9"], /* YI SYLLABLE CAP */ + ["\uA2BA", "\uA2BA"], /* YI SYLLABLE CUOX */ + ["\uA2BB", "\uA2BB"], /* YI SYLLABLE CUO */ + ["\uA2BC", "\uA2BC"], /* YI SYLLABLE CUOP */ + ["\uA2BD", "\uA2BD"], /* YI SYLLABLE COT */ + ["\uA2BE", "\uA2BE"], /* YI SYLLABLE COX */ + ["\uA2BF", "\uA2BF"], /* YI SYLLABLE CO */ + ["\uA2C0", "\uA2C0"], /* YI SYLLABLE COP */ + ["\uA2C1", "\uA2C1"], /* YI SYLLABLE CEX */ + ["\uA2C2", "\uA2C2"], /* YI SYLLABLE CE */ + ["\uA2C3", "\uA2C3"], /* YI SYLLABLE CEP */ + ["\uA2C4", "\uA2C4"], /* YI SYLLABLE CUT */ + ["\uA2C5", "\uA2C5"], /* YI SYLLABLE CUX */ + ["\uA2C6", "\uA2C6"], /* YI SYLLABLE CU */ + ["\uA2C7", "\uA2C7"], /* YI SYLLABLE CUP */ + ["\uA2C8", "\uA2C8"], /* YI SYLLABLE CURX */ + ["\uA2C9", "\uA2C9"], /* YI SYLLABLE CUR */ + ["\uA2CA", "\uA2CA"], /* YI SYLLABLE CYT */ + ["\uA2CB", "\uA2CB"], /* YI SYLLABLE CYX */ + ["\uA2CC", "\uA2CC"], /* YI SYLLABLE CY */ + ["\uA2CD", "\uA2CD"], /* YI SYLLABLE CYP */ + ["\uA2CE", "\uA2CE"], /* YI SYLLABLE CYRX */ + ["\uA2CF", "\uA2CF"], /* YI SYLLABLE CYR */ + ["\uA2D0", "\uA2D0"], /* YI SYLLABLE ZZIT */ + ["\uA2D1", "\uA2D1"], /* YI SYLLABLE ZZIX */ + ["\uA2D2", "\uA2D2"], /* YI SYLLABLE ZZI */ + ["\uA2D3", "\uA2D3"], /* YI SYLLABLE ZZIP */ + ["\uA2D4", "\uA2D4"], /* YI SYLLABLE ZZIET */ + ["\uA2D5", "\uA2D5"], /* YI SYLLABLE ZZIEX */ + ["\uA2D6", "\uA2D6"], /* YI SYLLABLE ZZIE */ + ["\uA2D7", "\uA2D7"], /* YI SYLLABLE ZZIEP */ + ["\uA2D8", "\uA2D8"], /* YI SYLLABLE ZZAT */ + ["\uA2D9", "\uA2D9"], /* YI SYLLABLE ZZAX */ + ["\uA2DA", "\uA2DA"], /* YI SYLLABLE ZZA */ + ["\uA2DB", "\uA2DB"], /* YI SYLLABLE ZZAP */ + ["\uA2DC", "\uA2DC"], /* YI SYLLABLE ZZOX */ + ["\uA2DD", "\uA2DD"], /* YI SYLLABLE ZZO */ + ["\uA2DE", "\uA2DE"], /* YI SYLLABLE ZZOP */ + ["\uA2DF", "\uA2DF"], /* YI SYLLABLE ZZEX */ + ["\uA2E0", "\uA2E0"], /* YI SYLLABLE ZZE */ + ["\uA2E1", "\uA2E1"], /* YI SYLLABLE ZZEP */ + ["\uA2E2", "\uA2E2"], /* YI SYLLABLE ZZUX */ + ["\uA2E3", "\uA2E3"], /* YI SYLLABLE ZZU */ + ["\uA2E4", "\uA2E4"], /* YI SYLLABLE ZZUP */ + ["\uA2E5", "\uA2E5"], /* YI SYLLABLE ZZURX */ + ["\uA2E6", "\uA2E6"], /* YI SYLLABLE ZZUR */ + ["\uA2E7", "\uA2E7"], /* YI SYLLABLE ZZYT */ + ["\uA2E8", "\uA2E8"], /* YI SYLLABLE ZZYX */ + ["\uA2E9", "\uA2E9"], /* YI SYLLABLE ZZY */ + ["\uA2EA", "\uA2EA"], /* YI SYLLABLE ZZYP */ + ["\uA2EB", "\uA2EB"], /* YI SYLLABLE ZZYRX */ + ["\uA2EC", "\uA2EC"], /* YI SYLLABLE ZZYR */ + ["\uA2ED", "\uA2ED"], /* YI SYLLABLE NZIT */ + ["\uA2EE", "\uA2EE"], /* YI SYLLABLE NZIX */ + ["\uA2EF", "\uA2EF"], /* YI SYLLABLE NZI */ + ["\uA2F0", "\uA2F0"], /* YI SYLLABLE NZIP */ + ["\uA2F1", "\uA2F1"], /* YI SYLLABLE NZIEX */ + ["\uA2F2", "\uA2F2"], /* YI SYLLABLE NZIE */ + ["\uA2F3", "\uA2F3"], /* YI SYLLABLE NZIEP */ + ["\uA2F4", "\uA2F4"], /* YI SYLLABLE NZAT */ + ["\uA2F5", "\uA2F5"], /* YI SYLLABLE NZAX */ + ["\uA2F6", "\uA2F6"], /* YI SYLLABLE NZA */ + ["\uA2F7", "\uA2F7"], /* YI SYLLABLE NZAP */ + ["\uA2F8", "\uA2F8"], /* YI SYLLABLE NZUOX */ + ["\uA2F9", "\uA2F9"], /* YI SYLLABLE NZUO */ + ["\uA2FA", "\uA2FA"], /* YI SYLLABLE NZOX */ + ["\uA2FB", "\uA2FB"], /* YI SYLLABLE NZOP */ + ["\uA2FC", "\uA2FC"], /* YI SYLLABLE NZEX */ + ["\uA2FD", "\uA2FD"], /* YI SYLLABLE NZE */ + ["\uA2FE", "\uA2FE"], /* YI SYLLABLE NZUX */ + ["\uA2FF", "\uA2FF"], /* YI SYLLABLE NZU */ + ["\uA300", "\uA300"], /* YI SYLLABLE NZUP */ + ["\uA301", "\uA301"], /* YI SYLLABLE NZURX */ + ["\uA302", "\uA302"], /* YI SYLLABLE NZUR */ + ["\uA303", "\uA303"], /* YI SYLLABLE NZYT */ + ["\uA304", "\uA304"], /* YI SYLLABLE NZYX */ + ["\uA305", "\uA305"], /* YI SYLLABLE NZY */ + ["\uA306", "\uA306"], /* YI SYLLABLE NZYP */ + ["\uA307", "\uA307"], /* YI SYLLABLE NZYRX */ + ["\uA308", "\uA308"], /* YI SYLLABLE NZYR */ + ["\uA309", "\uA309"], /* YI SYLLABLE SIT */ + ["\uA30A", "\uA30A"], /* YI SYLLABLE SIX */ + ["\uA30B", "\uA30B"], /* YI SYLLABLE SI */ + ["\uA30C", "\uA30C"], /* YI SYLLABLE SIP */ + ["\uA30D", "\uA30D"], /* YI SYLLABLE SIEX */ + ["\uA30E", "\uA30E"], /* YI SYLLABLE SIE */ + ["\uA30F", "\uA30F"], /* YI SYLLABLE SIEP */ + ["\uA310", "\uA310"], /* YI SYLLABLE SAT */ + ["\uA311", "\uA311"], /* YI SYLLABLE SAX */ + ["\uA312", "\uA312"], /* YI SYLLABLE SA */ + ["\uA313", "\uA313"], /* YI SYLLABLE SAP */ + ["\uA314", "\uA314"], /* YI SYLLABLE SUOX */ + ["\uA315", "\uA315"], /* YI SYLLABLE SUO */ + ["\uA316", "\uA316"], /* YI SYLLABLE SUOP */ + ["\uA317", "\uA317"], /* YI SYLLABLE SOT */ + ["\uA318", "\uA318"], /* YI SYLLABLE SOX */ + ["\uA319", "\uA319"], /* YI SYLLABLE SO */ + ["\uA31A", "\uA31A"], /* YI SYLLABLE SOP */ + ["\uA31B", "\uA31B"], /* YI SYLLABLE SEX */ + ["\uA31C", "\uA31C"], /* YI SYLLABLE SE */ + ["\uA31D", "\uA31D"], /* YI SYLLABLE SEP */ + ["\uA31E", "\uA31E"], /* YI SYLLABLE SUT */ + ["\uA31F", "\uA31F"], /* YI SYLLABLE SUX */ + ["\uA320", "\uA320"], /* YI SYLLABLE SU */ + ["\uA321", "\uA321"], /* YI SYLLABLE SUP */ + ["\uA322", "\uA322"], /* YI SYLLABLE SURX */ + ["\uA323", "\uA323"], /* YI SYLLABLE SUR */ + ["\uA324", "\uA324"], /* YI SYLLABLE SYT */ + ["\uA325", "\uA325"], /* YI SYLLABLE SYX */ + ["\uA326", "\uA326"], /* YI SYLLABLE SY */ + ["\uA327", "\uA327"], /* YI SYLLABLE SYP */ + ["\uA328", "\uA328"], /* YI SYLLABLE SYRX */ + ["\uA329", "\uA329"], /* YI SYLLABLE SYR */ + ["\uA32A", "\uA32A"], /* YI SYLLABLE SSIT */ + ["\uA32B", "\uA32B"], /* YI SYLLABLE SSIX */ + ["\uA32C", "\uA32C"], /* YI SYLLABLE SSI */ + ["\uA32D", "\uA32D"], /* YI SYLLABLE SSIP */ + ["\uA32E", "\uA32E"], /* YI SYLLABLE SSIEX */ + ["\uA32F", "\uA32F"], /* YI SYLLABLE SSIE */ + ["\uA330", "\uA330"], /* YI SYLLABLE SSIEP */ + ["\uA331", "\uA331"], /* YI SYLLABLE SSAT */ + ["\uA332", "\uA332"], /* YI SYLLABLE SSAX */ + ["\uA333", "\uA333"], /* YI SYLLABLE SSA */ + ["\uA334", "\uA334"], /* YI SYLLABLE SSAP */ + ["\uA335", "\uA335"], /* YI SYLLABLE SSOT */ + ["\uA336", "\uA336"], /* YI SYLLABLE SSOX */ + ["\uA337", "\uA337"], /* YI SYLLABLE SSO */ + ["\uA338", "\uA338"], /* YI SYLLABLE SSOP */ + ["\uA339", "\uA339"], /* YI SYLLABLE SSEX */ + ["\uA33A", "\uA33A"], /* YI SYLLABLE SSE */ + ["\uA33B", "\uA33B"], /* YI SYLLABLE SSEP */ + ["\uA33C", "\uA33C"], /* YI SYLLABLE SSUT */ + ["\uA33D", "\uA33D"], /* YI SYLLABLE SSUX */ + ["\uA33E", "\uA33E"], /* YI SYLLABLE SSU */ + ["\uA33F", "\uA33F"], /* YI SYLLABLE SSUP */ + ["\uA340", "\uA340"], /* YI SYLLABLE SSYT */ + ["\uA341", "\uA341"], /* YI SYLLABLE SSYX */ + ["\uA342", "\uA342"], /* YI SYLLABLE SSY */ + ["\uA343", "\uA343"], /* YI SYLLABLE SSYP */ + ["\uA344", "\uA344"], /* YI SYLLABLE SSYRX */ + ["\uA345", "\uA345"], /* YI SYLLABLE SSYR */ + ["\uA346", "\uA346"], /* YI SYLLABLE ZHAT */ + ["\uA347", "\uA347"], /* YI SYLLABLE ZHAX */ + ["\uA348", "\uA348"], /* YI SYLLABLE ZHA */ + ["\uA349", "\uA349"], /* YI SYLLABLE ZHAP */ + ["\uA34A", "\uA34A"], /* YI SYLLABLE ZHUOX */ + ["\uA34B", "\uA34B"], /* YI SYLLABLE ZHUO */ + ["\uA34C", "\uA34C"], /* YI SYLLABLE ZHUOP */ + ["\uA34D", "\uA34D"], /* YI SYLLABLE ZHOT */ + ["\uA34E", "\uA34E"], /* YI SYLLABLE ZHOX */ + ["\uA34F", "\uA34F"], /* YI SYLLABLE ZHO */ + ["\uA350", "\uA350"], /* YI SYLLABLE ZHOP */ + ["\uA351", "\uA351"], /* YI SYLLABLE ZHET */ + ["\uA352", "\uA352"], /* YI SYLLABLE ZHEX */ + ["\uA353", "\uA353"], /* YI SYLLABLE ZHE */ + ["\uA354", "\uA354"], /* YI SYLLABLE ZHEP */ + ["\uA355", "\uA355"], /* YI SYLLABLE ZHUT */ + ["\uA356", "\uA356"], /* YI SYLLABLE ZHUX */ + ["\uA357", "\uA357"], /* YI SYLLABLE ZHU */ + ["\uA358", "\uA358"], /* YI SYLLABLE ZHUP */ + ["\uA359", "\uA359"], /* YI SYLLABLE ZHURX */ + ["\uA35A", "\uA35A"], /* YI SYLLABLE ZHUR */ + ["\uA35B", "\uA35B"], /* YI SYLLABLE ZHYT */ + ["\uA35C", "\uA35C"], /* YI SYLLABLE ZHYX */ + ["\uA35D", "\uA35D"], /* YI SYLLABLE ZHY */ + ["\uA35E", "\uA35E"], /* YI SYLLABLE ZHYP */ + ["\uA35F", "\uA35F"], /* YI SYLLABLE ZHYRX */ + ["\uA360", "\uA360"], /* YI SYLLABLE ZHYR */ + ["\uA361", "\uA361"], /* YI SYLLABLE CHAT */ + ["\uA362", "\uA362"], /* YI SYLLABLE CHAX */ + ["\uA363", "\uA363"], /* YI SYLLABLE CHA */ + ["\uA364", "\uA364"], /* YI SYLLABLE CHAP */ + ["\uA365", "\uA365"], /* YI SYLLABLE CHUOT */ + ["\uA366", "\uA366"], /* YI SYLLABLE CHUOX */ + ["\uA367", "\uA367"], /* YI SYLLABLE CHUO */ + ["\uA368", "\uA368"], /* YI SYLLABLE CHUOP */ + ["\uA369", "\uA369"], /* YI SYLLABLE CHOT */ + ["\uA36A", "\uA36A"], /* YI SYLLABLE CHOX */ + ["\uA36B", "\uA36B"], /* YI SYLLABLE CHO */ + ["\uA36C", "\uA36C"], /* YI SYLLABLE CHOP */ + ["\uA36D", "\uA36D"], /* YI SYLLABLE CHET */ + ["\uA36E", "\uA36E"], /* YI SYLLABLE CHEX */ + ["\uA36F", "\uA36F"], /* YI SYLLABLE CHE */ + ["\uA370", "\uA370"], /* YI SYLLABLE CHEP */ + ["\uA371", "\uA371"], /* YI SYLLABLE CHUX */ + ["\uA372", "\uA372"], /* YI SYLLABLE CHU */ + ["\uA373", "\uA373"], /* YI SYLLABLE CHUP */ + ["\uA374", "\uA374"], /* YI SYLLABLE CHURX */ + ["\uA375", "\uA375"], /* YI SYLLABLE CHUR */ + ["\uA376", "\uA376"], /* YI SYLLABLE CHYT */ + ["\uA377", "\uA377"], /* YI SYLLABLE CHYX */ + ["\uA378", "\uA378"], /* YI SYLLABLE CHY */ + ["\uA379", "\uA379"], /* YI SYLLABLE CHYP */ + ["\uA37A", "\uA37A"], /* YI SYLLABLE CHYRX */ + ["\uA37B", "\uA37B"], /* YI SYLLABLE CHYR */ + ["\uA37C", "\uA37C"], /* YI SYLLABLE RRAX */ + ["\uA37D", "\uA37D"], /* YI SYLLABLE RRA */ + ["\uA37E", "\uA37E"], /* YI SYLLABLE RRUOX */ + ["\uA37F", "\uA37F"], /* YI SYLLABLE RRUO */ + ["\uA380", "\uA380"], /* YI SYLLABLE RROT */ + ["\uA381", "\uA381"], /* YI SYLLABLE RROX */ + ["\uA382", "\uA382"], /* YI SYLLABLE RRO */ + ["\uA383", "\uA383"], /* YI SYLLABLE RROP */ + ["\uA384", "\uA384"], /* YI SYLLABLE RRET */ + ["\uA385", "\uA385"], /* YI SYLLABLE RREX */ + ["\uA386", "\uA386"], /* YI SYLLABLE RRE */ + ["\uA387", "\uA387"], /* YI SYLLABLE RREP */ + ["\uA388", "\uA388"], /* YI SYLLABLE RRUT */ + ["\uA389", "\uA389"], /* YI SYLLABLE RRUX */ + ["\uA38A", "\uA38A"], /* YI SYLLABLE RRU */ + ["\uA38B", "\uA38B"], /* YI SYLLABLE RRUP */ + ["\uA38C", "\uA38C"], /* YI SYLLABLE RRURX */ + ["\uA38D", "\uA38D"], /* YI SYLLABLE RRUR */ + ["\uA38E", "\uA38E"], /* YI SYLLABLE RRYT */ + ["\uA38F", "\uA38F"], /* YI SYLLABLE RRYX */ + ["\uA390", "\uA390"], /* YI SYLLABLE RRY */ + ["\uA391", "\uA391"], /* YI SYLLABLE RRYP */ + ["\uA392", "\uA392"], /* YI SYLLABLE RRYRX */ + ["\uA393", "\uA393"], /* YI SYLLABLE RRYR */ + ["\uA394", "\uA394"], /* YI SYLLABLE NRAT */ + ["\uA395", "\uA395"], /* YI SYLLABLE NRAX */ + ["\uA396", "\uA396"], /* YI SYLLABLE NRA */ + ["\uA397", "\uA397"], /* YI SYLLABLE NRAP */ + ["\uA398", "\uA398"], /* YI SYLLABLE NROX */ + ["\uA399", "\uA399"], /* YI SYLLABLE NRO */ + ["\uA39A", "\uA39A"], /* YI SYLLABLE NROP */ + ["\uA39B", "\uA39B"], /* YI SYLLABLE NRET */ + ["\uA39C", "\uA39C"], /* YI SYLLABLE NREX */ + ["\uA39D", "\uA39D"], /* YI SYLLABLE NRE */ + ["\uA39E", "\uA39E"], /* YI SYLLABLE NREP */ + ["\uA39F", "\uA39F"], /* YI SYLLABLE NRUT */ + ["\uA3A0", "\uA3A0"], /* YI SYLLABLE NRUX */ + ["\uA3A1", "\uA3A1"], /* YI SYLLABLE NRU */ + ["\uA3A2", "\uA3A2"], /* YI SYLLABLE NRUP */ + ["\uA3A3", "\uA3A3"], /* YI SYLLABLE NRURX */ + ["\uA3A4", "\uA3A4"], /* YI SYLLABLE NRUR */ + ["\uA3A5", "\uA3A5"], /* YI SYLLABLE NRYT */ + ["\uA3A6", "\uA3A6"], /* YI SYLLABLE NRYX */ + ["\uA3A7", "\uA3A7"], /* YI SYLLABLE NRY */ + ["\uA3A8", "\uA3A8"], /* YI SYLLABLE NRYP */ + ["\uA3A9", "\uA3A9"], /* YI SYLLABLE NRYRX */ + ["\uA3AA", "\uA3AA"], /* YI SYLLABLE NRYR */ + ["\uA3AB", "\uA3AB"], /* YI SYLLABLE SHAT */ + ["\uA3AC", "\uA3AC"], /* YI SYLLABLE SHAX */ + ["\uA3AD", "\uA3AD"], /* YI SYLLABLE SHA */ + ["\uA3AE", "\uA3AE"], /* YI SYLLABLE SHAP */ + ["\uA3AF", "\uA3AF"], /* YI SYLLABLE SHUOX */ + ["\uA3B0", "\uA3B0"], /* YI SYLLABLE SHUO */ + ["\uA3B1", "\uA3B1"], /* YI SYLLABLE SHUOP */ + ["\uA3B2", "\uA3B2"], /* YI SYLLABLE SHOT */ + ["\uA3B3", "\uA3B3"], /* YI SYLLABLE SHOX */ + ["\uA3B4", "\uA3B4"], /* YI SYLLABLE SHO */ + ["\uA3B5", "\uA3B5"], /* YI SYLLABLE SHOP */ + ["\uA3B6", "\uA3B6"], /* YI SYLLABLE SHET */ + ["\uA3B7", "\uA3B7"], /* YI SYLLABLE SHEX */ + ["\uA3B8", "\uA3B8"], /* YI SYLLABLE SHE */ + ["\uA3B9", "\uA3B9"], /* YI SYLLABLE SHEP */ + ["\uA3BA", "\uA3BA"], /* YI SYLLABLE SHUT */ + ["\uA3BB", "\uA3BB"], /* YI SYLLABLE SHUX */ + ["\uA3BC", "\uA3BC"], /* YI SYLLABLE SHU */ + ["\uA3BD", "\uA3BD"], /* YI SYLLABLE SHUP */ + ["\uA3BE", "\uA3BE"], /* YI SYLLABLE SHURX */ + ["\uA3BF", "\uA3BF"], /* YI SYLLABLE SHUR */ + ["\uA3C0", "\uA3C0"], /* YI SYLLABLE SHYT */ + ["\uA3C1", "\uA3C1"], /* YI SYLLABLE SHYX */ + ["\uA3C2", "\uA3C2"], /* YI SYLLABLE SHY */ + ["\uA3C3", "\uA3C3"], /* YI SYLLABLE SHYP */ + ["\uA3C4", "\uA3C4"], /* YI SYLLABLE SHYRX */ + ["\uA3C5", "\uA3C5"], /* YI SYLLABLE SHYR */ + ["\uA3C6", "\uA3C6"], /* YI SYLLABLE RAT */ + ["\uA3C7", "\uA3C7"], /* YI SYLLABLE RAX */ + ["\uA3C8", "\uA3C8"], /* YI SYLLABLE RA */ + ["\uA3C9", "\uA3C9"], /* YI SYLLABLE RAP */ + ["\uA3CA", "\uA3CA"], /* YI SYLLABLE RUOX */ + ["\uA3CB", "\uA3CB"], /* YI SYLLABLE RUO */ + ["\uA3CC", "\uA3CC"], /* YI SYLLABLE RUOP */ + ["\uA3CD", "\uA3CD"], /* YI SYLLABLE ROT */ + ["\uA3CE", "\uA3CE"], /* YI SYLLABLE ROX */ + ["\uA3CF", "\uA3CF"], /* YI SYLLABLE RO */ + ["\uA3D0", "\uA3D0"], /* YI SYLLABLE ROP */ + ["\uA3D1", "\uA3D1"], /* YI SYLLABLE REX */ + ["\uA3D2", "\uA3D2"], /* YI SYLLABLE RE */ + ["\uA3D3", "\uA3D3"], /* YI SYLLABLE REP */ + ["\uA3D4", "\uA3D4"], /* YI SYLLABLE RUT */ + ["\uA3D5", "\uA3D5"], /* YI SYLLABLE RUX */ + ["\uA3D6", "\uA3D6"], /* YI SYLLABLE RU */ + ["\uA3D7", "\uA3D7"], /* YI SYLLABLE RUP */ + ["\uA3D8", "\uA3D8"], /* YI SYLLABLE RURX */ + ["\uA3D9", "\uA3D9"], /* YI SYLLABLE RUR */ + ["\uA3DA", "\uA3DA"], /* YI SYLLABLE RYT */ + ["\uA3DB", "\uA3DB"], /* YI SYLLABLE RYX */ + ["\uA3DC", "\uA3DC"], /* YI SYLLABLE RY */ + ["\uA3DD", "\uA3DD"], /* YI SYLLABLE RYP */ + ["\uA3DE", "\uA3DE"], /* YI SYLLABLE RYRX */ + ["\uA3DF", "\uA3DF"], /* YI SYLLABLE RYR */ + ["\uA3E0", "\uA3E0"], /* YI SYLLABLE JIT */ + ["\uA3E1", "\uA3E1"], /* YI SYLLABLE JIX */ + ["\uA3E2", "\uA3E2"], /* YI SYLLABLE JI */ + ["\uA3E3", "\uA3E3"], /* YI SYLLABLE JIP */ + ["\uA3E4", "\uA3E4"], /* YI SYLLABLE JIET */ + ["\uA3E5", "\uA3E5"], /* YI SYLLABLE JIEX */ + ["\uA3E6", "\uA3E6"], /* YI SYLLABLE JIE */ + ["\uA3E7", "\uA3E7"], /* YI SYLLABLE JIEP */ + ["\uA3E8", "\uA3E8"], /* YI SYLLABLE JUOT */ + ["\uA3E9", "\uA3E9"], /* YI SYLLABLE JUOX */ + ["\uA3EA", "\uA3EA"], /* YI SYLLABLE JUO */ + ["\uA3EB", "\uA3EB"], /* YI SYLLABLE JUOP */ + ["\uA3EC", "\uA3EC"], /* YI SYLLABLE JOT */ + ["\uA3ED", "\uA3ED"], /* YI SYLLABLE JOX */ + ["\uA3EE", "\uA3EE"], /* YI SYLLABLE JO */ + ["\uA3EF", "\uA3EF"], /* YI SYLLABLE JOP */ + ["\uA3F0", "\uA3F0"], /* YI SYLLABLE JUT */ + ["\uA3F1", "\uA3F1"], /* YI SYLLABLE JUX */ + ["\uA3F2", "\uA3F2"], /* YI SYLLABLE JU */ + ["\uA3F3", "\uA3F3"], /* YI SYLLABLE JUP */ + ["\uA3F4", "\uA3F4"], /* YI SYLLABLE JURX */ + ["\uA3F5", "\uA3F5"], /* YI SYLLABLE JUR */ + ["\uA3F6", "\uA3F6"], /* YI SYLLABLE JYT */ + ["\uA3F7", "\uA3F7"], /* YI SYLLABLE JYX */ + ["\uA3F8", "\uA3F8"], /* YI SYLLABLE JY */ + ["\uA3F9", "\uA3F9"], /* YI SYLLABLE JYP */ + ["\uA3FA", "\uA3FA"], /* YI SYLLABLE JYRX */ + ["\uA3FB", "\uA3FB"], /* YI SYLLABLE JYR */ + ["\uA3FC", "\uA3FC"], /* YI SYLLABLE QIT */ + ["\uA3FD", "\uA3FD"], /* YI SYLLABLE QIX */ + ["\uA3FE", "\uA3FE"], /* YI SYLLABLE QI */ + ["\uA3FF", "\uA3FF"], /* YI SYLLABLE QIP */ + ["\uA400", "\uA400"], /* YI SYLLABLE QIET */ + ["\uA401", "\uA401"], /* YI SYLLABLE QIEX */ + ["\uA402", "\uA402"], /* YI SYLLABLE QIE */ + ["\uA403", "\uA403"], /* YI SYLLABLE QIEP */ + ["\uA404", "\uA404"], /* YI SYLLABLE QUOT */ + ["\uA405", "\uA405"], /* YI SYLLABLE QUOX */ + ["\uA406", "\uA406"], /* YI SYLLABLE QUO */ + ["\uA407", "\uA407"], /* YI SYLLABLE QUOP */ + ["\uA408", "\uA408"], /* YI SYLLABLE QOT */ + ["\uA409", "\uA409"], /* YI SYLLABLE QOX */ + ["\uA40A", "\uA40A"], /* YI SYLLABLE QO */ + ["\uA40B", "\uA40B"], /* YI SYLLABLE QOP */ + ["\uA40C", "\uA40C"], /* YI SYLLABLE QUT */ + ["\uA40D", "\uA40D"], /* YI SYLLABLE QUX */ + ["\uA40E", "\uA40E"], /* YI SYLLABLE QU */ + ["\uA40F", "\uA40F"], /* YI SYLLABLE QUP */ + ["\uA410", "\uA410"], /* YI SYLLABLE QURX */ + ["\uA411", "\uA411"], /* YI SYLLABLE QUR */ + ["\uA412", "\uA412"], /* YI SYLLABLE QYT */ + ["\uA413", "\uA413"], /* YI SYLLABLE QYX */ + ["\uA414", "\uA414"], /* YI SYLLABLE QY */ + ["\uA415", "\uA415"], /* YI SYLLABLE QYP */ + ["\uA416", "\uA416"], /* YI SYLLABLE QYRX */ + ["\uA417", "\uA417"], /* YI SYLLABLE QYR */ + ["\uA418", "\uA418"], /* YI SYLLABLE JJIT */ + ["\uA419", "\uA419"], /* YI SYLLABLE JJIX */ + ["\uA41A", "\uA41A"], /* YI SYLLABLE JJI */ + ["\uA41B", "\uA41B"], /* YI SYLLABLE JJIP */ + ["\uA41C", "\uA41C"], /* YI SYLLABLE JJIET */ + ["\uA41D", "\uA41D"], /* YI SYLLABLE JJIEX */ + ["\uA41E", "\uA41E"], /* YI SYLLABLE JJIE */ + ["\uA41F", "\uA41F"], /* YI SYLLABLE JJIEP */ + ["\uA420", "\uA420"], /* YI SYLLABLE JJUOX */ + ["\uA421", "\uA421"], /* YI SYLLABLE JJUO */ + ["\uA422", "\uA422"], /* YI SYLLABLE JJUOP */ + ["\uA423", "\uA423"], /* YI SYLLABLE JJOT */ + ["\uA424", "\uA424"], /* YI SYLLABLE JJOX */ + ["\uA425", "\uA425"], /* YI SYLLABLE JJO */ + ["\uA426", "\uA426"], /* YI SYLLABLE JJOP */ + ["\uA427", "\uA427"], /* YI SYLLABLE JJUT */ + ["\uA428", "\uA428"], /* YI SYLLABLE JJUX */ + ["\uA429", "\uA429"], /* YI SYLLABLE JJU */ + ["\uA42A", "\uA42A"], /* YI SYLLABLE JJUP */ + ["\uA42B", "\uA42B"], /* YI SYLLABLE JJURX */ + ["\uA42C", "\uA42C"], /* YI SYLLABLE JJUR */ + ["\uA42D", "\uA42D"], /* YI SYLLABLE JJYT */ + ["\uA42E", "\uA42E"], /* YI SYLLABLE JJYX */ + ["\uA42F", "\uA42F"], /* YI SYLLABLE JJY */ + ["\uA430", "\uA430"], /* YI SYLLABLE JJYP */ + ["\uA431", "\uA431"], /* YI SYLLABLE NJIT */ + ["\uA432", "\uA432"], /* YI SYLLABLE NJIX */ + ["\uA433", "\uA433"], /* YI SYLLABLE NJI */ + ["\uA434", "\uA434"], /* YI SYLLABLE NJIP */ + ["\uA435", "\uA435"], /* YI SYLLABLE NJIET */ + ["\uA436", "\uA436"], /* YI SYLLABLE NJIEX */ + ["\uA437", "\uA437"], /* YI SYLLABLE NJIE */ + ["\uA438", "\uA438"], /* YI SYLLABLE NJIEP */ + ["\uA439", "\uA439"], /* YI SYLLABLE NJUOX */ + ["\uA43A", "\uA43A"], /* YI SYLLABLE NJUO */ + ["\uA43B", "\uA43B"], /* YI SYLLABLE NJOT */ + ["\uA43C", "\uA43C"], /* YI SYLLABLE NJOX */ + ["\uA43D", "\uA43D"], /* YI SYLLABLE NJO */ + ["\uA43E", "\uA43E"], /* YI SYLLABLE NJOP */ + ["\uA43F", "\uA43F"], /* YI SYLLABLE NJUX */ + ["\uA440", "\uA440"], /* YI SYLLABLE NJU */ + ["\uA441", "\uA441"], /* YI SYLLABLE NJUP */ + ["\uA442", "\uA442"], /* YI SYLLABLE NJURX */ + ["\uA443", "\uA443"], /* YI SYLLABLE NJUR */ + ["\uA444", "\uA444"], /* YI SYLLABLE NJYT */ + ["\uA445", "\uA445"], /* YI SYLLABLE NJYX */ + ["\uA446", "\uA446"], /* YI SYLLABLE NJY */ + ["\uA447", "\uA447"], /* YI SYLLABLE NJYP */ + ["\uA448", "\uA448"], /* YI SYLLABLE NJYRX */ + ["\uA449", "\uA449"], /* YI SYLLABLE NJYR */ + ["\uA44A", "\uA44A"], /* YI SYLLABLE NYIT */ + ["\uA44B", "\uA44B"], /* YI SYLLABLE NYIX */ + ["\uA44C", "\uA44C"], /* YI SYLLABLE NYI */ + ["\uA44D", "\uA44D"], /* YI SYLLABLE NYIP */ + ["\uA44E", "\uA44E"], /* YI SYLLABLE NYIET */ + ["\uA44F", "\uA44F"], /* YI SYLLABLE NYIEX */ + ["\uA450", "\uA450"], /* YI SYLLABLE NYIE */ + ["\uA451", "\uA451"], /* YI SYLLABLE NYIEP */ + ["\uA452", "\uA452"], /* YI SYLLABLE NYUOX */ + ["\uA453", "\uA453"], /* YI SYLLABLE NYUO */ + ["\uA454", "\uA454"], /* YI SYLLABLE NYUOP */ + ["\uA455", "\uA455"], /* YI SYLLABLE NYOT */ + ["\uA456", "\uA456"], /* YI SYLLABLE NYOX */ + ["\uA457", "\uA457"], /* YI SYLLABLE NYO */ + ["\uA458", "\uA458"], /* YI SYLLABLE NYOP */ + ["\uA459", "\uA459"], /* YI SYLLABLE NYUT */ + ["\uA45A", "\uA45A"], /* YI SYLLABLE NYUX */ + ["\uA45B", "\uA45B"], /* YI SYLLABLE NYU */ + ["\uA45C", "\uA45C"], /* YI SYLLABLE NYUP */ + ["\uA45D", "\uA45D"], /* YI SYLLABLE XIT */ + ["\uA45E", "\uA45E"], /* YI SYLLABLE XIX */ + ["\uA45F", "\uA45F"], /* YI SYLLABLE XI */ + ["\uA460", "\uA460"], /* YI SYLLABLE XIP */ + ["\uA461", "\uA461"], /* YI SYLLABLE XIET */ + ["\uA462", "\uA462"], /* YI SYLLABLE XIEX */ + ["\uA463", "\uA463"], /* YI SYLLABLE XIE */ + ["\uA464", "\uA464"], /* YI SYLLABLE XIEP */ + ["\uA465", "\uA465"], /* YI SYLLABLE XUOX */ + ["\uA466", "\uA466"], /* YI SYLLABLE XUO */ + ["\uA467", "\uA467"], /* YI SYLLABLE XOT */ + ["\uA468", "\uA468"], /* YI SYLLABLE XOX */ + ["\uA469", "\uA469"], /* YI SYLLABLE XO */ + ["\uA46A", "\uA46A"], /* YI SYLLABLE XOP */ + ["\uA46B", "\uA46B"], /* YI SYLLABLE XYT */ + ["\uA46C", "\uA46C"], /* YI SYLLABLE XYX */ + ["\uA46D", "\uA46D"], /* YI SYLLABLE XY */ + ["\uA46E", "\uA46E"], /* YI SYLLABLE XYP */ + ["\uA46F", "\uA46F"], /* YI SYLLABLE XYRX */ + ["\uA470", "\uA470"], /* YI SYLLABLE XYR */ + ["\uA471", "\uA471"], /* YI SYLLABLE YIT */ + ["\uA472", "\uA472"], /* YI SYLLABLE YIX */ + ["\uA473", "\uA473"], /* YI SYLLABLE YI */ + ["\uA474", "\uA474"], /* YI SYLLABLE YIP */ + ["\uA475", "\uA475"], /* YI SYLLABLE YIET */ + ["\uA476", "\uA476"], /* YI SYLLABLE YIEX */ + ["\uA477", "\uA477"], /* YI SYLLABLE YIE */ + ["\uA478", "\uA478"], /* YI SYLLABLE YIEP */ + ["\uA479", "\uA479"], /* YI SYLLABLE YUOT */ + ["\uA47A", "\uA47A"], /* YI SYLLABLE YUOX */ + ["\uA47B", "\uA47B"], /* YI SYLLABLE YUO */ + ["\uA47C", "\uA47C"], /* YI SYLLABLE YUOP */ + ["\uA47D", "\uA47D"], /* YI SYLLABLE YOT */ + ["\uA47E", "\uA47E"], /* YI SYLLABLE YOX */ + ["\uA47F", "\uA47F"], /* YI SYLLABLE YO */ + ["\uA480", "\uA480"], /* YI SYLLABLE YOP */ + ["\uA481", "\uA481"], /* YI SYLLABLE YUT */ + ["\uA482", "\uA482"], /* YI SYLLABLE YUX */ + ["\uA483", "\uA483"], /* YI SYLLABLE YU */ + ["\uA484", "\uA484"], /* YI SYLLABLE YUP */ + ["\uA485", "\uA485"], /* YI SYLLABLE YURX */ + ["\uA486", "\uA486"], /* YI SYLLABLE YUR */ + ["\uA487", "\uA487"], /* YI SYLLABLE YYT */ + ["\uA488", "\uA488"], /* YI SYLLABLE YYX */ + ["\uA489", "\uA489"], /* YI SYLLABLE YY */ + ["\uA48A", "\uA48A"], /* YI SYLLABLE YYP */ + ["\uA48B", "\uA48B"], /* YI SYLLABLE YYRX */ + ["\uA48C", "\uA48C"], /* YI SYLLABLE YYR */ + ["\uA48D", "\uA48D"], + ["\uA48E", "\uA48E"], + ["\uA48F", "\uA48F"], + ["\uA490", "\uA490"], /* YI RADICAL QOT */ + ["\uA491", "\uA491"], /* YI RADICAL LI */ + ["\uA492", "\uA492"], /* YI RADICAL KIT */ + ["\uA493", "\uA493"], /* YI RADICAL NYIP */ + ["\uA494", "\uA494"], /* YI RADICAL CYP */ + ["\uA495", "\uA495"], /* YI RADICAL SSI */ + ["\uA496", "\uA496"], /* YI RADICAL GGOP */ + ["\uA497", "\uA497"], /* YI RADICAL GEP */ + ["\uA498", "\uA498"], /* YI RADICAL MI */ + ["\uA499", "\uA499"], /* YI RADICAL HXIT */ + ["\uA49A", "\uA49A"], /* YI RADICAL LYR */ + ["\uA49B", "\uA49B"], /* YI RADICAL BBUT */ + ["\uA49C", "\uA49C"], /* YI RADICAL MOP */ + ["\uA49D", "\uA49D"], /* YI RADICAL YO */ + ["\uA49E", "\uA49E"], /* YI RADICAL PUT */ + ["\uA49F", "\uA49F"], /* YI RADICAL HXUO */ + ["\uA4A0", "\uA4A0"], /* YI RADICAL TAT */ + ["\uA4A1", "\uA4A1"], /* YI RADICAL GA */ + ["\uA4A2", "\uA4A2"], /* YI RADICAL ZUP */ + ["\uA4A3", "\uA4A3"], /* YI RADICAL CYT */ + ["\uA4A4", "\uA4A4"], /* YI RADICAL DDUR */ + ["\uA4A5", "\uA4A5"], /* YI RADICAL BUR */ + ["\uA4A6", "\uA4A6"], /* YI RADICAL GGUO */ + ["\uA4A7", "\uA4A7"], /* YI RADICAL NYOP */ + ["\uA4A8", "\uA4A8"], /* YI RADICAL TU */ + ["\uA4A9", "\uA4A9"], /* YI RADICAL OP */ + ["\uA4AA", "\uA4AA"], /* YI RADICAL JJUT */ + ["\uA4AB", "\uA4AB"], /* YI RADICAL ZOT */ + ["\uA4AC", "\uA4AC"], /* YI RADICAL PYT */ + ["\uA4AD", "\uA4AD"], /* YI RADICAL HMO */ + ["\uA4AE", "\uA4AE"], /* YI RADICAL YIT */ + ["\uA4AF", "\uA4AF"], /* YI RADICAL VUR */ + ["\uA4B0", "\uA4B0"], /* YI RADICAL SHY */ + ["\uA4B1", "\uA4B1"], /* YI RADICAL VEP */ + ["\uA4B2", "\uA4B2"], /* YI RADICAL ZA */ + ["\uA4B3", "\uA4B3"], /* YI RADICAL JO */ + ["\uA4B4", "\uA4B4"], /* YI RADICAL NZUP */ + ["\uA4B5", "\uA4B5"], /* YI RADICAL JJY */ + ["\uA4B6", "\uA4B6"], /* YI RADICAL GOT */ + ["\uA4B7", "\uA4B7"], /* YI RADICAL JJIE */ + ["\uA4B8", "\uA4B8"], /* YI RADICAL WO */ + ["\uA4B9", "\uA4B9"], /* YI RADICAL DU */ + ["\uA4BA", "\uA4BA"], /* YI RADICAL SHUR */ + ["\uA4BB", "\uA4BB"], /* YI RADICAL LIE */ + ["\uA4BC", "\uA4BC"], /* YI RADICAL CY */ + ["\uA4BD", "\uA4BD"], /* YI RADICAL CUOP */ + ["\uA4BE", "\uA4BE"], /* YI RADICAL CIP */ + ["\uA4BF", "\uA4BF"], /* YI RADICAL HXOP */ + ["\uA4C0", "\uA4C0"], /* YI RADICAL SHAT */ + ["\uA4C1", "\uA4C1"], /* YI RADICAL ZUR */ + ["\uA4C2", "\uA4C2"], /* YI RADICAL SHOP */ + ["\uA4C3", "\uA4C3"], /* YI RADICAL CHE */ + ["\uA4C4", "\uA4C4"], /* YI RADICAL ZZIET */ + ["\uA4C5", "\uA4C5"], /* YI RADICAL NBIE */ + ["\uA4C6", "\uA4C6"], /* YI RADICAL KE */ + ["\uA4C7", "\uA4C7"], + ["\uA4C8", "\uA4C8"], + ["\uA4C9", "\uA4C9"], + ["\uA4CA", "\uA4CA"], + ["\uA4CB", "\uA4CB"], + ["\uA4CC", "\uA4CC"], + ["\uA4CD", "\uA4CD"], + ["\uA4CE", "\uA4CE"], + ["\uA4CF", "\uA4CF"], + ["\uA4D0", "\uA4D0"], /* LISU LETTER BA */ + ["\uA4D1", "\uA4D1"], /* LISU LETTER PA */ + ["\uA4D2", "\uA4D2"], /* LISU LETTER PHA */ + ["\uA4D3", "\uA4D3"], /* LISU LETTER DA */ + ["\uA4D4", "\uA4D4"], /* LISU LETTER TA */ + ["\uA4D5", "\uA4D5"], /* LISU LETTER THA */ + ["\uA4D6", "\uA4D6"], /* LISU LETTER GA */ + ["\uA4D7", "\uA4D7"], /* LISU LETTER KA */ + ["\uA4D8", "\uA4D8"], /* LISU LETTER KHA */ + ["\uA4D9", "\uA4D9"], /* LISU LETTER JA */ + ["\uA4DA", "\uA4DA"], /* LISU LETTER CA */ + ["\uA4DB", "\uA4DB"], /* LISU LETTER CHA */ + ["\uA4DC", "\uA4DC"], /* LISU LETTER DZA */ + ["\uA4DD", "\uA4DD"], /* LISU LETTER TSA */ + ["\uA4DE", "\uA4DE"], /* LISU LETTER TSHA */ + ["\uA4DF", "\uA4DF"], /* LISU LETTER MA */ + ["\uA4E0", "\uA4E0"], /* LISU LETTER NA */ + ["\uA4E1", "\uA4E1"], /* LISU LETTER LA */ + ["\uA4E2", "\uA4E2"], /* LISU LETTER SA */ + ["\uA4E3", "\uA4E3"], /* LISU LETTER ZHA */ + ["\uA4E4", "\uA4E4"], /* LISU LETTER ZA */ + ["\uA4E5", "\uA4E5"], /* LISU LETTER NGA */ + ["\uA4E6", "\uA4E6"], /* LISU LETTER HA */ + ["\uA4E7", "\uA4E7"], /* LISU LETTER XA */ + ["\uA4E8", "\uA4E8"], /* LISU LETTER HHA */ + ["\uA4E9", "\uA4E9"], /* LISU LETTER FA */ + ["\uA4EA", "\uA4EA"], /* LISU LETTER WA */ + ["\uA4EB", "\uA4EB"], /* LISU LETTER SHA */ + ["\uA4EC", "\uA4EC"], /* LISU LETTER YA */ + ["\uA4ED", "\uA4ED"], /* LISU LETTER GHA */ + ["\uA4EE", "\uA4EE"], /* LISU LETTER A */ + ["\uA4EF", "\uA4EF"], /* LISU LETTER AE */ + ["\uA4F0", "\uA4F0"], /* LISU LETTER E */ + ["\uA4F1", "\uA4F1"], /* LISU LETTER EU */ + ["\uA4F2", "\uA4F2"], /* LISU LETTER I */ + ["\uA4F3", "\uA4F3"], /* LISU LETTER O */ + ["\uA4F4", "\uA4F4"], /* LISU LETTER U */ + ["\uA4F5", "\uA4F5"], /* LISU LETTER UE */ + ["\uA4F6", "\uA4F6"], /* LISU LETTER UH */ + ["\uA4F7", "\uA4F7"], /* LISU LETTER OE */ + ["\uA4F8", "\uA4F8"], /* LISU LETTER TONE MYA TI */ + ["\uA4F9", "\uA4F9"], /* LISU LETTER TONE NA PO */ + ["\uA4FA", "\uA4FA"], /* LISU LETTER TONE MYA CYA */ + ["\uA4FB", "\uA4FB"], /* LISU LETTER TONE MYA BO */ + ["\uA4FC", "\uA4FC"], /* LISU LETTER TONE MYA NA */ + ["\uA4FD", "\uA4FD"], /* LISU LETTER TONE MYA JEU */ + ["\uA4FE", "\uA4FE"], /* LISU PUNCTUATION COMMA */ + ["\uA4FF", "\uA4FF"], /* LISU PUNCTUATION FULL STOP */ + ["\uA500", "\uA500"], /* VAI SYLLABLE EE */ + ["\uA501", "\uA501"], /* VAI SYLLABLE EEN */ + ["\uA502", "\uA502"], /* VAI SYLLABLE HEE */ + ["\uA503", "\uA503"], /* VAI SYLLABLE WEE */ + ["\uA504", "\uA504"], /* VAI SYLLABLE WEEN */ + ["\uA505", "\uA505"], /* VAI SYLLABLE PEE */ + ["\uA506", "\uA506"], /* VAI SYLLABLE BHEE */ + ["\uA507", "\uA507"], /* VAI SYLLABLE BEE */ + ["\uA508", "\uA508"], /* VAI SYLLABLE MBEE */ + ["\uA509", "\uA509"], /* VAI SYLLABLE KPEE */ + ["\uA50A", "\uA50A"], /* VAI SYLLABLE MGBEE */ + ["\uA50B", "\uA50B"], /* VAI SYLLABLE GBEE */ + ["\uA50C", "\uA50C"], /* VAI SYLLABLE FEE */ + ["\uA50D", "\uA50D"], /* VAI SYLLABLE VEE */ + ["\uA50E", "\uA50E"], /* VAI SYLLABLE TEE */ + ["\uA50F", "\uA50F"], /* VAI SYLLABLE THEE */ + ["\uA510", "\uA510"], /* VAI SYLLABLE DHEE */ + ["\uA511", "\uA511"], /* VAI SYLLABLE DHHEE */ + ["\uA512", "\uA512"], /* VAI SYLLABLE LEE */ + ["\uA513", "\uA513"], /* VAI SYLLABLE REE */ + ["\uA514", "\uA514"], /* VAI SYLLABLE DEE */ + ["\uA515", "\uA515"], /* VAI SYLLABLE NDEE */ + ["\uA516", "\uA516"], /* VAI SYLLABLE SEE */ + ["\uA517", "\uA517"], /* VAI SYLLABLE SHEE */ + ["\uA518", "\uA518"], /* VAI SYLLABLE ZEE */ + ["\uA519", "\uA519"], /* VAI SYLLABLE ZHEE */ + ["\uA51A", "\uA51A"], /* VAI SYLLABLE CEE */ + ["\uA51B", "\uA51B"], /* VAI SYLLABLE JEE */ + ["\uA51C", "\uA51C"], /* VAI SYLLABLE NJEE */ + ["\uA51D", "\uA51D"], /* VAI SYLLABLE YEE */ + ["\uA51E", "\uA51E"], /* VAI SYLLABLE KEE */ + ["\uA51F", "\uA51F"], /* VAI SYLLABLE NGGEE */ + ["\uA520", "\uA520"], /* VAI SYLLABLE GEE */ + ["\uA521", "\uA521"], /* VAI SYLLABLE MEE */ + ["\uA522", "\uA522"], /* VAI SYLLABLE NEE */ + ["\uA523", "\uA523"], /* VAI SYLLABLE NYEE */ + ["\uA524", "\uA524"], /* VAI SYLLABLE I */ + ["\uA525", "\uA525"], /* VAI SYLLABLE IN */ + ["\uA526", "\uA526"], /* VAI SYLLABLE HI */ + ["\uA527", "\uA527"], /* VAI SYLLABLE HIN */ + ["\uA528", "\uA528"], /* VAI SYLLABLE WI */ + ["\uA529", "\uA529"], /* VAI SYLLABLE WIN */ + ["\uA52A", "\uA52A"], /* VAI SYLLABLE PI */ + ["\uA52B", "\uA52B"], /* VAI SYLLABLE BHI */ + ["\uA52C", "\uA52C"], /* VAI SYLLABLE BI */ + ["\uA52D", "\uA52D"], /* VAI SYLLABLE MBI */ + ["\uA52E", "\uA52E"], /* VAI SYLLABLE KPI */ + ["\uA52F", "\uA52F"], /* VAI SYLLABLE MGBI */ + ["\uA530", "\uA530"], /* VAI SYLLABLE GBI */ + ["\uA531", "\uA531"], /* VAI SYLLABLE FI */ + ["\uA532", "\uA532"], /* VAI SYLLABLE VI */ + ["\uA533", "\uA533"], /* VAI SYLLABLE TI */ + ["\uA534", "\uA534"], /* VAI SYLLABLE THI */ + ["\uA535", "\uA535"], /* VAI SYLLABLE DHI */ + ["\uA536", "\uA536"], /* VAI SYLLABLE DHHI */ + ["\uA537", "\uA537"], /* VAI SYLLABLE LI */ + ["\uA538", "\uA538"], /* VAI SYLLABLE RI */ + ["\uA539", "\uA539"], /* VAI SYLLABLE DI */ + ["\uA53A", "\uA53A"], /* VAI SYLLABLE NDI */ + ["\uA53B", "\uA53B"], /* VAI SYLLABLE SI */ + ["\uA53C", "\uA53C"], /* VAI SYLLABLE SHI */ + ["\uA53D", "\uA53D"], /* VAI SYLLABLE ZI */ + ["\uA53E", "\uA53E"], /* VAI SYLLABLE ZHI */ + ["\uA53F", "\uA53F"], /* VAI SYLLABLE CI */ + ["\uA540", "\uA540"], /* VAI SYLLABLE JI */ + ["\uA541", "\uA541"], /* VAI SYLLABLE NJI */ + ["\uA542", "\uA542"], /* VAI SYLLABLE YI */ + ["\uA543", "\uA543"], /* VAI SYLLABLE KI */ + ["\uA544", "\uA544"], /* VAI SYLLABLE NGGI */ + ["\uA545", "\uA545"], /* VAI SYLLABLE GI */ + ["\uA546", "\uA546"], /* VAI SYLLABLE MI */ + ["\uA547", "\uA547"], /* VAI SYLLABLE NI */ + ["\uA548", "\uA548"], /* VAI SYLLABLE NYI */ + ["\uA549", "\uA549"], /* VAI SYLLABLE A */ + ["\uA54A", "\uA54A"], /* VAI SYLLABLE AN */ + ["\uA54B", "\uA54B"], /* VAI SYLLABLE NGAN */ + ["\uA54C", "\uA54C"], /* VAI SYLLABLE HA */ + ["\uA54D", "\uA54D"], /* VAI SYLLABLE HAN */ + ["\uA54E", "\uA54E"], /* VAI SYLLABLE WA */ + ["\uA54F", "\uA54F"], /* VAI SYLLABLE WAN */ + ["\uA550", "\uA550"], /* VAI SYLLABLE PA */ + ["\uA551", "\uA551"], /* VAI SYLLABLE BHA */ + ["\uA552", "\uA552"], /* VAI SYLLABLE BA */ + ["\uA553", "\uA553"], /* VAI SYLLABLE MBA */ + ["\uA554", "\uA554"], /* VAI SYLLABLE KPA */ + ["\uA555", "\uA555"], /* VAI SYLLABLE KPAN */ + ["\uA556", "\uA556"], /* VAI SYLLABLE MGBA */ + ["\uA557", "\uA557"], /* VAI SYLLABLE GBA */ + ["\uA558", "\uA558"], /* VAI SYLLABLE FA */ + ["\uA559", "\uA559"], /* VAI SYLLABLE VA */ + ["\uA55A", "\uA55A"], /* VAI SYLLABLE TA */ + ["\uA55B", "\uA55B"], /* VAI SYLLABLE THA */ + ["\uA55C", "\uA55C"], /* VAI SYLLABLE DHA */ + ["\uA55D", "\uA55D"], /* VAI SYLLABLE DHHA */ + ["\uA55E", "\uA55E"], /* VAI SYLLABLE LA */ + ["\uA55F", "\uA55F"], /* VAI SYLLABLE RA */ + ["\uA560", "\uA560"], /* VAI SYLLABLE DA */ + ["\uA561", "\uA561"], /* VAI SYLLABLE NDA */ + ["\uA562", "\uA562"], /* VAI SYLLABLE SA */ + ["\uA563", "\uA563"], /* VAI SYLLABLE SHA */ + ["\uA564", "\uA564"], /* VAI SYLLABLE ZA */ + ["\uA565", "\uA565"], /* VAI SYLLABLE ZHA */ + ["\uA566", "\uA566"], /* VAI SYLLABLE CA */ + ["\uA567", "\uA567"], /* VAI SYLLABLE JA */ + ["\uA568", "\uA568"], /* VAI SYLLABLE NJA */ + ["\uA569", "\uA569"], /* VAI SYLLABLE YA */ + ["\uA56A", "\uA56A"], /* VAI SYLLABLE KA */ + ["\uA56B", "\uA56B"], /* VAI SYLLABLE KAN */ + ["\uA56C", "\uA56C"], /* VAI SYLLABLE NGGA */ + ["\uA56D", "\uA56D"], /* VAI SYLLABLE GA */ + ["\uA56E", "\uA56E"], /* VAI SYLLABLE MA */ + ["\uA56F", "\uA56F"], /* VAI SYLLABLE NA */ + ["\uA570", "\uA570"], /* VAI SYLLABLE NYA */ + ["\uA571", "\uA571"], /* VAI SYLLABLE OO */ + ["\uA572", "\uA572"], /* VAI SYLLABLE OON */ + ["\uA573", "\uA573"], /* VAI SYLLABLE HOO */ + ["\uA574", "\uA574"], /* VAI SYLLABLE WOO */ + ["\uA575", "\uA575"], /* VAI SYLLABLE WOON */ + ["\uA576", "\uA576"], /* VAI SYLLABLE POO */ + ["\uA577", "\uA577"], /* VAI SYLLABLE BHOO */ + ["\uA578", "\uA578"], /* VAI SYLLABLE BOO */ + ["\uA579", "\uA579"], /* VAI SYLLABLE MBOO */ + ["\uA57A", "\uA57A"], /* VAI SYLLABLE KPOO */ + ["\uA57B", "\uA57B"], /* VAI SYLLABLE MGBOO */ + ["\uA57C", "\uA57C"], /* VAI SYLLABLE GBOO */ + ["\uA57D", "\uA57D"], /* VAI SYLLABLE FOO */ + ["\uA57E", "\uA57E"], /* VAI SYLLABLE VOO */ + ["\uA57F", "\uA57F"], /* VAI SYLLABLE TOO */ + ["\uA580", "\uA580"], /* VAI SYLLABLE THOO */ + ["\uA581", "\uA581"], /* VAI SYLLABLE DHOO */ + ["\uA582", "\uA582"], /* VAI SYLLABLE DHHOO */ + ["\uA583", "\uA583"], /* VAI SYLLABLE LOO */ + ["\uA584", "\uA584"], /* VAI SYLLABLE ROO */ + ["\uA585", "\uA585"], /* VAI SYLLABLE DOO */ + ["\uA586", "\uA586"], /* VAI SYLLABLE NDOO */ + ["\uA587", "\uA587"], /* VAI SYLLABLE SOO */ + ["\uA588", "\uA588"], /* VAI SYLLABLE SHOO */ + ["\uA589", "\uA589"], /* VAI SYLLABLE ZOO */ + ["\uA58A", "\uA58A"], /* VAI SYLLABLE ZHOO */ + ["\uA58B", "\uA58B"], /* VAI SYLLABLE COO */ + ["\uA58C", "\uA58C"], /* VAI SYLLABLE JOO */ + ["\uA58D", "\uA58D"], /* VAI SYLLABLE NJOO */ + ["\uA58E", "\uA58E"], /* VAI SYLLABLE YOO */ + ["\uA58F", "\uA58F"], /* VAI SYLLABLE KOO */ + ["\uA590", "\uA590"], /* VAI SYLLABLE NGGOO */ + ["\uA591", "\uA591"], /* VAI SYLLABLE GOO */ + ["\uA592", "\uA592"], /* VAI SYLLABLE MOO */ + ["\uA593", "\uA593"], /* VAI SYLLABLE NOO */ + ["\uA594", "\uA594"], /* VAI SYLLABLE NYOO */ + ["\uA595", "\uA595"], /* VAI SYLLABLE U */ + ["\uA596", "\uA596"], /* VAI SYLLABLE UN */ + ["\uA597", "\uA597"], /* VAI SYLLABLE HU */ + ["\uA598", "\uA598"], /* VAI SYLLABLE HUN */ + ["\uA599", "\uA599"], /* VAI SYLLABLE WU */ + ["\uA59A", "\uA59A"], /* VAI SYLLABLE WUN */ + ["\uA59B", "\uA59B"], /* VAI SYLLABLE PU */ + ["\uA59C", "\uA59C"], /* VAI SYLLABLE BHU */ + ["\uA59D", "\uA59D"], /* VAI SYLLABLE BU */ + ["\uA59E", "\uA59E"], /* VAI SYLLABLE MBU */ + ["\uA59F", "\uA59F"], /* VAI SYLLABLE KPU */ + ["\uA5A0", "\uA5A0"], /* VAI SYLLABLE MGBU */ + ["\uA5A1", "\uA5A1"], /* VAI SYLLABLE GBU */ + ["\uA5A2", "\uA5A2"], /* VAI SYLLABLE FU */ + ["\uA5A3", "\uA5A3"], /* VAI SYLLABLE VU */ + ["\uA5A4", "\uA5A4"], /* VAI SYLLABLE TU */ + ["\uA5A5", "\uA5A5"], /* VAI SYLLABLE THU */ + ["\uA5A6", "\uA5A6"], /* VAI SYLLABLE DHU */ + ["\uA5A7", "\uA5A7"], /* VAI SYLLABLE DHHU */ + ["\uA5A8", "\uA5A8"], /* VAI SYLLABLE LU */ + ["\uA5A9", "\uA5A9"], /* VAI SYLLABLE RU */ + ["\uA5AA", "\uA5AA"], /* VAI SYLLABLE DU */ + ["\uA5AB", "\uA5AB"], /* VAI SYLLABLE NDU */ + ["\uA5AC", "\uA5AC"], /* VAI SYLLABLE SU */ + ["\uA5AD", "\uA5AD"], /* VAI SYLLABLE SHU */ + ["\uA5AE", "\uA5AE"], /* VAI SYLLABLE ZU */ + ["\uA5AF", "\uA5AF"], /* VAI SYLLABLE ZHU */ + ["\uA5B0", "\uA5B0"], /* VAI SYLLABLE CU */ + ["\uA5B1", "\uA5B1"], /* VAI SYLLABLE JU */ + ["\uA5B2", "\uA5B2"], /* VAI SYLLABLE NJU */ + ["\uA5B3", "\uA5B3"], /* VAI SYLLABLE YU */ + ["\uA5B4", "\uA5B4"], /* VAI SYLLABLE KU */ + ["\uA5B5", "\uA5B5"], /* VAI SYLLABLE NGGU */ + ["\uA5B6", "\uA5B6"], /* VAI SYLLABLE GU */ + ["\uA5B7", "\uA5B7"], /* VAI SYLLABLE MU */ + ["\uA5B8", "\uA5B8"], /* VAI SYLLABLE NU */ + ["\uA5B9", "\uA5B9"], /* VAI SYLLABLE NYU */ + ["\uA5BA", "\uA5BA"], /* VAI SYLLABLE O */ + ["\uA5BB", "\uA5BB"], /* VAI SYLLABLE ON */ + ["\uA5BC", "\uA5BC"], /* VAI SYLLABLE NGON */ + ["\uA5BD", "\uA5BD"], /* VAI SYLLABLE HO */ + ["\uA5BE", "\uA5BE"], /* VAI SYLLABLE HON */ + ["\uA5BF", "\uA5BF"], /* VAI SYLLABLE WO */ + ["\uA5C0", "\uA5C0"], /* VAI SYLLABLE WON */ + ["\uA5C1", "\uA5C1"], /* VAI SYLLABLE PO */ + ["\uA5C2", "\uA5C2"], /* VAI SYLLABLE BHO */ + ["\uA5C3", "\uA5C3"], /* VAI SYLLABLE BO */ + ["\uA5C4", "\uA5C4"], /* VAI SYLLABLE MBO */ + ["\uA5C5", "\uA5C5"], /* VAI SYLLABLE KPO */ + ["\uA5C6", "\uA5C6"], /* VAI SYLLABLE MGBO */ + ["\uA5C7", "\uA5C7"], /* VAI SYLLABLE GBO */ + ["\uA5C8", "\uA5C8"], /* VAI SYLLABLE GBON */ + ["\uA5C9", "\uA5C9"], /* VAI SYLLABLE FO */ + ["\uA5CA", "\uA5CA"], /* VAI SYLLABLE VO */ + ["\uA5CB", "\uA5CB"], /* VAI SYLLABLE TO */ + ["\uA5CC", "\uA5CC"], /* VAI SYLLABLE THO */ + ["\uA5CD", "\uA5CD"], /* VAI SYLLABLE DHO */ + ["\uA5CE", "\uA5CE"], /* VAI SYLLABLE DHHO */ + ["\uA5CF", "\uA5CF"], /* VAI SYLLABLE LO */ + ["\uA5D0", "\uA5D0"], /* VAI SYLLABLE RO */ + ["\uA5D1", "\uA5D1"], /* VAI SYLLABLE DO */ + ["\uA5D2", "\uA5D2"], /* VAI SYLLABLE NDO */ + ["\uA5D3", "\uA5D3"], /* VAI SYLLABLE SO */ + ["\uA5D4", "\uA5D4"], /* VAI SYLLABLE SHO */ + ["\uA5D5", "\uA5D5"], /* VAI SYLLABLE ZO */ + ["\uA5D6", "\uA5D6"], /* VAI SYLLABLE ZHO */ + ["\uA5D7", "\uA5D7"], /* VAI SYLLABLE CO */ + ["\uA5D8", "\uA5D8"], /* VAI SYLLABLE JO */ + ["\uA5D9", "\uA5D9"], /* VAI SYLLABLE NJO */ + ["\uA5DA", "\uA5DA"], /* VAI SYLLABLE YO */ + ["\uA5DB", "\uA5DB"], /* VAI SYLLABLE KO */ + ["\uA5DC", "\uA5DC"], /* VAI SYLLABLE NGGO */ + ["\uA5DD", "\uA5DD"], /* VAI SYLLABLE GO */ + ["\uA5DE", "\uA5DE"], /* VAI SYLLABLE MO */ + ["\uA5DF", "\uA5DF"], /* VAI SYLLABLE NO */ + ["\uA5E0", "\uA5E0"], /* VAI SYLLABLE NYO */ + ["\uA5E1", "\uA5E1"], /* VAI SYLLABLE E */ + ["\uA5E2", "\uA5E2"], /* VAI SYLLABLE EN */ + ["\uA5E3", "\uA5E3"], /* VAI SYLLABLE NGEN */ + ["\uA5E4", "\uA5E4"], /* VAI SYLLABLE HE */ + ["\uA5E5", "\uA5E5"], /* VAI SYLLABLE HEN */ + ["\uA5E6", "\uA5E6"], /* VAI SYLLABLE WE */ + ["\uA5E7", "\uA5E7"], /* VAI SYLLABLE WEN */ + ["\uA5E8", "\uA5E8"], /* VAI SYLLABLE PE */ + ["\uA5E9", "\uA5E9"], /* VAI SYLLABLE BHE */ + ["\uA5EA", "\uA5EA"], /* VAI SYLLABLE BE */ + ["\uA5EB", "\uA5EB"], /* VAI SYLLABLE MBE */ + ["\uA5EC", "\uA5EC"], /* VAI SYLLABLE KPE */ + ["\uA5ED", "\uA5ED"], /* VAI SYLLABLE KPEN */ + ["\uA5EE", "\uA5EE"], /* VAI SYLLABLE MGBE */ + ["\uA5EF", "\uA5EF"], /* VAI SYLLABLE GBE */ + ["\uA5F0", "\uA5F0"], /* VAI SYLLABLE GBEN */ + ["\uA5F1", "\uA5F1"], /* VAI SYLLABLE FE */ + ["\uA5F2", "\uA5F2"], /* VAI SYLLABLE VE */ + ["\uA5F3", "\uA5F3"], /* VAI SYLLABLE TE */ + ["\uA5F4", "\uA5F4"], /* VAI SYLLABLE THE */ + ["\uA5F5", "\uA5F5"], /* VAI SYLLABLE DHE */ + ["\uA5F6", "\uA5F6"], /* VAI SYLLABLE DHHE */ + ["\uA5F7", "\uA5F7"], /* VAI SYLLABLE LE */ + ["\uA5F8", "\uA5F8"], /* VAI SYLLABLE RE */ + ["\uA5F9", "\uA5F9"], /* VAI SYLLABLE DE */ + ["\uA5FA", "\uA5FA"], /* VAI SYLLABLE NDE */ + ["\uA5FB", "\uA5FB"], /* VAI SYLLABLE SE */ + ["\uA5FC", "\uA5FC"], /* VAI SYLLABLE SHE */ + ["\uA5FD", "\uA5FD"], /* VAI SYLLABLE ZE */ + ["\uA5FE", "\uA5FE"], /* VAI SYLLABLE ZHE */ + ["\uA5FF", "\uA5FF"], /* VAI SYLLABLE CE */ + ["\uA600", "\uA600"], /* VAI SYLLABLE JE */ + ["\uA601", "\uA601"], /* VAI SYLLABLE NJE */ + ["\uA602", "\uA602"], /* VAI SYLLABLE YE */ + ["\uA603", "\uA603"], /* VAI SYLLABLE KE */ + ["\uA604", "\uA604"], /* VAI SYLLABLE NGGE */ + ["\uA605", "\uA605"], /* VAI SYLLABLE NGGEN */ + ["\uA606", "\uA606"], /* VAI SYLLABLE GE */ + ["\uA607", "\uA607"], /* VAI SYLLABLE GEN */ + ["\uA608", "\uA608"], /* VAI SYLLABLE ME */ + ["\uA609", "\uA609"], /* VAI SYLLABLE NE */ + ["\uA60A", "\uA60A"], /* VAI SYLLABLE NYE */ + ["\uA60B", "\uA60B"], /* VAI SYLLABLE NG */ + ["\uA60C", "\uA60C"], /* VAI SYLLABLE LENGTHENER */ + ["\uA60D", "\uA60D"], /* VAI COMMA */ + ["\uA60E", "\uA60E"], /* VAI FULL STOP */ + ["\uA60F", "\uA60F"], /* VAI QUESTION MARK */ + ["\uA610", "\uA610"], /* VAI SYLLABLE NDOLE FA */ + ["\uA611", "\uA611"], /* VAI SYLLABLE NDOLE KA */ + ["\uA612", "\uA612"], /* VAI SYLLABLE NDOLE SOO */ + ["\uA613", "\uA613"], /* VAI SYMBOL FEENG */ + ["\uA614", "\uA614"], /* VAI SYMBOL KEENG */ + ["\uA615", "\uA615"], /* VAI SYMBOL TING */ + ["\uA616", "\uA616"], /* VAI SYMBOL NII */ + ["\uA617", "\uA617"], /* VAI SYMBOL BANG */ + ["\uA618", "\uA618"], /* VAI SYMBOL FAA */ + ["\uA619", "\uA619"], /* VAI SYMBOL TAA */ + ["\uA61A", "\uA61A"], /* VAI SYMBOL DANG */ + ["\uA61B", "\uA61B"], /* VAI SYMBOL DOONG */ + ["\uA61C", "\uA61C"], /* VAI SYMBOL KUNG */ + ["\uA61D", "\uA61D"], /* VAI SYMBOL TONG */ + ["\uA61E", "\uA61E"], /* VAI SYMBOL DO-O */ + ["\uA61F", "\uA61F"], /* VAI SYMBOL JONG */ + ["\uA620", "\uA620"], /* VAI DIGIT ZERO */ + ["\uA621", "\uA621"], /* VAI DIGIT ONE */ + ["\uA622", "\uA622"], /* VAI DIGIT TWO */ + ["\uA623", "\uA623"], /* VAI DIGIT THREE */ + ["\uA624", "\uA624"], /* VAI DIGIT FOUR */ + ["\uA625", "\uA625"], /* VAI DIGIT FIVE */ + ["\uA626", "\uA626"], /* VAI DIGIT SIX */ + ["\uA627", "\uA627"], /* VAI DIGIT SEVEN */ + ["\uA628", "\uA628"], /* VAI DIGIT EIGHT */ + ["\uA629", "\uA629"], /* VAI DIGIT NINE */ + ["\uA62A", "\uA62A"], /* VAI SYLLABLE NDOLE MA */ + ["\uA62B", "\uA62B"], /* VAI SYLLABLE NDOLE DO */ + ["\uA62C", "\uA62C"], + ["\uA62D", "\uA62D"], + ["\uA62E", "\uA62E"], + ["\uA62F", "\uA62F"], + ["\uA630", "\uA630"], + ["\uA631", "\uA631"], + ["\uA632", "\uA632"], + ["\uA633", "\uA633"], + ["\uA634", "\uA634"], + ["\uA635", "\uA635"], + ["\uA636", "\uA636"], + ["\uA637", "\uA637"], + ["\uA638", "\uA638"], + ["\uA639", "\uA639"], + ["\uA63A", "\uA63A"], + ["\uA63B", "\uA63B"], + ["\uA63C", "\uA63C"], + ["\uA63D", "\uA63D"], + ["\uA63E", "\uA63E"], + ["\uA63F", "\uA63F"], + ["\uA640", "\uA641"], /* CYRILLIC CAPITAL LETTER ZEMLYA */ + ["\uA640", "\uA641"], /* CYRILLIC SMALL LETTER ZEMLYA */ + ["\uA642", "\uA643"], /* CYRILLIC CAPITAL LETTER DZELO */ + ["\uA642", "\uA643"], /* CYRILLIC SMALL LETTER DZELO */ + ["\uA644", "\uA645"], /* CYRILLIC CAPITAL LETTER REVERSED DZE */ + ["\uA644", "\uA645"], /* CYRILLIC SMALL LETTER REVERSED DZE */ + ["\uA646", "\uA647"], /* CYRILLIC CAPITAL LETTER IOTA */ + ["\uA646", "\uA647"], /* CYRILLIC SMALL LETTER IOTA */ + ["\uA648", "\uA649"], /* CYRILLIC CAPITAL LETTER DJERV */ + ["\uA648", "\uA649"], /* CYRILLIC SMALL LETTER DJERV */ + ["\uA64A", "\uA64B"], /* CYRILLIC CAPITAL LETTER MONOGRAPH UK */ + ["\uA64A", "\uA64B"], /* CYRILLIC SMALL LETTER MONOGRAPH UK */ + ["\uA64C", "\uA64D"], /* CYRILLIC CAPITAL LETTER BROAD OMEGA */ + ["\uA64C", "\uA64D"], /* CYRILLIC SMALL LETTER BROAD OMEGA */ + ["\uA64E", "\uA64F"], /* CYRILLIC CAPITAL LETTER NEUTRAL YER */ + ["\uA64E", "\uA64F"], /* CYRILLIC SMALL LETTER NEUTRAL YER */ + ["\uA650", "\uA651"], /* CYRILLIC CAPITAL LETTER YERU WITH BACK YER */ + ["\uA650", "\uA651"], /* CYRILLIC SMALL LETTER YERU WITH BACK YER */ + ["\uA652", "\uA653"], /* CYRILLIC CAPITAL LETTER IOTIFIED YAT */ + ["\uA652", "\uA653"], /* CYRILLIC SMALL LETTER IOTIFIED YAT */ + ["\uA654", "\uA655"], /* CYRILLIC CAPITAL LETTER REVERSED YU */ + ["\uA654", "\uA655"], /* CYRILLIC SMALL LETTER REVERSED YU */ + ["\uA656", "\uA657"], /* CYRILLIC CAPITAL LETTER IOTIFIED A */ + ["\uA656", "\uA657"], /* CYRILLIC SMALL LETTER IOTIFIED A */ + ["\uA658", "\uA659"], /* CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */ + ["\uA658", "\uA659"], /* CYRILLIC SMALL LETTER CLOSED LITTLE YUS */ + ["\uA65A", "\uA65B"], /* CYRILLIC CAPITAL LETTER BLENDED YUS */ + ["\uA65A", "\uA65B"], /* CYRILLIC SMALL LETTER BLENDED YUS */ + ["\uA65C", "\uA65D"], /* CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */ + ["\uA65C", "\uA65D"], /* CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS */ + ["\uA65E", "\uA65F"], /* CYRILLIC CAPITAL LETTER YN */ + ["\uA65E", "\uA65F"], /* CYRILLIC SMALL LETTER YN */ + ["\uA660", "\uA661"], /* CYRILLIC CAPITAL LETTER REVERSED TSE */ + ["\uA660", "\uA661"], /* CYRILLIC SMALL LETTER REVERSED TSE */ + ["\uA662", "\uA663"], /* CYRILLIC CAPITAL LETTER SOFT DE */ + ["\uA662", "\uA663"], /* CYRILLIC SMALL LETTER SOFT DE */ + ["\uA664", "\uA665"], /* CYRILLIC CAPITAL LETTER SOFT EL */ + ["\uA664", "\uA665"], /* CYRILLIC SMALL LETTER SOFT EL */ + ["\uA666", "\uA667"], /* CYRILLIC CAPITAL LETTER SOFT EM */ + ["\uA666", "\uA667"], /* CYRILLIC SMALL LETTER SOFT EM */ + ["\uA668", "\uA669"], /* CYRILLIC CAPITAL LETTER MONOCULAR O */ + ["\uA668", "\uA669"], /* CYRILLIC SMALL LETTER MONOCULAR O */ + ["\uA66A", "\uA66B"], /* CYRILLIC CAPITAL LETTER BINOCULAR O */ + ["\uA66A", "\uA66B"], /* CYRILLIC SMALL LETTER BINOCULAR O */ + ["\uA66C", "\uA66D"], /* CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */ + ["\uA66C", "\uA66D"], /* CYRILLIC SMALL LETTER DOUBLE MONOCULAR O */ + ["\uA66E", "\uA66E"], /* CYRILLIC LETTER MULTIOCULAR O */ + ["\uA66F", "\uA66F"], /* COMBINING CYRILLIC VZMET */ + ["\uA670", "\uA670"], /* COMBINING CYRILLIC TEN MILLIONS SIGN */ + ["\uA671", "\uA671"], /* COMBINING CYRILLIC HUNDRED MILLIONS SIGN */ + ["\uA672", "\uA672"], /* COMBINING CYRILLIC THOUSAND MILLIONS SIGN */ + ["\uA673", "\uA673"], /* SLAVONIC ASTERISK */ + ["\uA674", "\uA674"], /* COMBINING CYRILLIC LETTER UKRAINIAN IE */ + ["\uA675", "\uA675"], /* COMBINING CYRILLIC LETTER I */ + ["\uA676", "\uA676"], /* COMBINING CYRILLIC LETTER YI */ + ["\uA677", "\uA677"], /* COMBINING CYRILLIC LETTER U */ + ["\uA678", "\uA678"], /* COMBINING CYRILLIC LETTER HARD SIGN */ + ["\uA679", "\uA679"], /* COMBINING CYRILLIC LETTER YERU */ + ["\uA67A", "\uA67A"], /* COMBINING CYRILLIC LETTER SOFT SIGN */ + ["\uA67B", "\uA67B"], /* COMBINING CYRILLIC LETTER OMEGA */ + ["\uA67C", "\uA67C"], /* COMBINING CYRILLIC KAVYKA */ + ["\uA67D", "\uA67D"], /* COMBINING CYRILLIC PAYEROK */ + ["\uA67E", "\uA67E"], /* CYRILLIC KAVYKA */ + ["\uA67F", "\uA67F"], /* CYRILLIC PAYEROK */ + ["\uA680", "\uA681"], /* CYRILLIC CAPITAL LETTER DWE */ + ["\uA680", "\uA681"], /* CYRILLIC SMALL LETTER DWE */ + ["\uA682", "\uA683"], /* CYRILLIC CAPITAL LETTER DZWE */ + ["\uA682", "\uA683"], /* CYRILLIC SMALL LETTER DZWE */ + ["\uA684", "\uA685"], /* CYRILLIC CAPITAL LETTER ZHWE */ + ["\uA684", "\uA685"], /* CYRILLIC SMALL LETTER ZHWE */ + ["\uA686", "\uA687"], /* CYRILLIC CAPITAL LETTER CCHE */ + ["\uA686", "\uA687"], /* CYRILLIC SMALL LETTER CCHE */ + ["\uA688", "\uA689"], /* CYRILLIC CAPITAL LETTER DZZE */ + ["\uA688", "\uA689"], /* CYRILLIC SMALL LETTER DZZE */ + ["\uA68A", "\uA68B"], /* CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */ + ["\uA68A", "\uA68B"], /* CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK */ + ["\uA68C", "\uA68D"], /* CYRILLIC CAPITAL LETTER TWE */ + ["\uA68C", "\uA68D"], /* CYRILLIC SMALL LETTER TWE */ + ["\uA68E", "\uA68F"], /* CYRILLIC CAPITAL LETTER TSWE */ + ["\uA68E", "\uA68F"], /* CYRILLIC SMALL LETTER TSWE */ + ["\uA690", "\uA691"], /* CYRILLIC CAPITAL LETTER TSSE */ + ["\uA690", "\uA691"], /* CYRILLIC SMALL LETTER TSSE */ + ["\uA692", "\uA693"], /* CYRILLIC CAPITAL LETTER TCHE */ + ["\uA692", "\uA693"], /* CYRILLIC SMALL LETTER TCHE */ + ["\uA694", "\uA695"], /* CYRILLIC CAPITAL LETTER HWE */ + ["\uA694", "\uA695"], /* CYRILLIC SMALL LETTER HWE */ + ["\uA696", "\uA697"], /* CYRILLIC CAPITAL LETTER SHWE */ + ["\uA696", "\uA697"], /* CYRILLIC SMALL LETTER SHWE */ + ["\uA698", "\uA699"], /* CYRILLIC CAPITAL LETTER DOUBLE O */ + ["\uA698", "\uA699"], /* CYRILLIC SMALL LETTER DOUBLE O */ + ["\uA69A", "\uA69B"], /* CYRILLIC CAPITAL LETTER CROSSED O */ + ["\uA69A", "\uA69B"], /* CYRILLIC SMALL LETTER CROSSED O */ + ["\uA69C", "\uA69C"], /* MODIFIER LETTER CYRILLIC HARD SIGN */ + ["\uA69D", "\uA69D"], /* MODIFIER LETTER CYRILLIC SOFT SIGN */ + ["\uA69E", "\uA69E"], /* COMBINING CYRILLIC LETTER EF */ + ["\uA69F", "\uA69F"], /* COMBINING CYRILLIC LETTER IOTIFIED E */ + ["\uA6A0", "\uA6A0"], /* BAMUM LETTER A */ + ["\uA6A1", "\uA6A1"], /* BAMUM LETTER KA */ + ["\uA6A2", "\uA6A2"], /* BAMUM LETTER U */ + ["\uA6A3", "\uA6A3"], /* BAMUM LETTER KU */ + ["\uA6A4", "\uA6A4"], /* BAMUM LETTER EE */ + ["\uA6A5", "\uA6A5"], /* BAMUM LETTER REE */ + ["\uA6A6", "\uA6A6"], /* BAMUM LETTER TAE */ + ["\uA6A7", "\uA6A7"], /* BAMUM LETTER O */ + ["\uA6A8", "\uA6A8"], /* BAMUM LETTER NYI */ + ["\uA6A9", "\uA6A9"], /* BAMUM LETTER I */ + ["\uA6AA", "\uA6AA"], /* BAMUM LETTER LA */ + ["\uA6AB", "\uA6AB"], /* BAMUM LETTER PA */ + ["\uA6AC", "\uA6AC"], /* BAMUM LETTER RII */ + ["\uA6AD", "\uA6AD"], /* BAMUM LETTER RIEE */ + ["\uA6AE", "\uA6AE"], /* BAMUM LETTER LEEEE */ + ["\uA6AF", "\uA6AF"], /* BAMUM LETTER MEEEE */ + ["\uA6B0", "\uA6B0"], /* BAMUM LETTER TAA */ + ["\uA6B1", "\uA6B1"], /* BAMUM LETTER NDAA */ + ["\uA6B2", "\uA6B2"], /* BAMUM LETTER NJAEM */ + ["\uA6B3", "\uA6B3"], /* BAMUM LETTER M */ + ["\uA6B4", "\uA6B4"], /* BAMUM LETTER SUU */ + ["\uA6B5", "\uA6B5"], /* BAMUM LETTER MU */ + ["\uA6B6", "\uA6B6"], /* BAMUM LETTER SHII */ + ["\uA6B7", "\uA6B7"], /* BAMUM LETTER SI */ + ["\uA6B8", "\uA6B8"], /* BAMUM LETTER SHEUX */ + ["\uA6B9", "\uA6B9"], /* BAMUM LETTER SEUX */ + ["\uA6BA", "\uA6BA"], /* BAMUM LETTER KYEE */ + ["\uA6BB", "\uA6BB"], /* BAMUM LETTER KET */ + ["\uA6BC", "\uA6BC"], /* BAMUM LETTER NUAE */ + ["\uA6BD", "\uA6BD"], /* BAMUM LETTER NU */ + ["\uA6BE", "\uA6BE"], /* BAMUM LETTER NJUAE */ + ["\uA6BF", "\uA6BF"], /* BAMUM LETTER YOQ */ + ["\uA6C0", "\uA6C0"], /* BAMUM LETTER SHU */ + ["\uA6C1", "\uA6C1"], /* BAMUM LETTER YUQ */ + ["\uA6C2", "\uA6C2"], /* BAMUM LETTER YA */ + ["\uA6C3", "\uA6C3"], /* BAMUM LETTER NSHA */ + ["\uA6C4", "\uA6C4"], /* BAMUM LETTER KEUX */ + ["\uA6C5", "\uA6C5"], /* BAMUM LETTER PEUX */ + ["\uA6C6", "\uA6C6"], /* BAMUM LETTER NJEE */ + ["\uA6C7", "\uA6C7"], /* BAMUM LETTER NTEE */ + ["\uA6C8", "\uA6C8"], /* BAMUM LETTER PUE */ + ["\uA6C9", "\uA6C9"], /* BAMUM LETTER WUE */ + ["\uA6CA", "\uA6CA"], /* BAMUM LETTER PEE */ + ["\uA6CB", "\uA6CB"], /* BAMUM LETTER FEE */ + ["\uA6CC", "\uA6CC"], /* BAMUM LETTER RU */ + ["\uA6CD", "\uA6CD"], /* BAMUM LETTER LU */ + ["\uA6CE", "\uA6CE"], /* BAMUM LETTER MI */ + ["\uA6CF", "\uA6CF"], /* BAMUM LETTER NI */ + ["\uA6D0", "\uA6D0"], /* BAMUM LETTER REUX */ + ["\uA6D1", "\uA6D1"], /* BAMUM LETTER RAE */ + ["\uA6D2", "\uA6D2"], /* BAMUM LETTER KEN */ + ["\uA6D3", "\uA6D3"], /* BAMUM LETTER NGKWAEN */ + ["\uA6D4", "\uA6D4"], /* BAMUM LETTER NGGA */ + ["\uA6D5", "\uA6D5"], /* BAMUM LETTER NGA */ + ["\uA6D6", "\uA6D6"], /* BAMUM LETTER SHO */ + ["\uA6D7", "\uA6D7"], /* BAMUM LETTER PUAE */ + ["\uA6D8", "\uA6D8"], /* BAMUM LETTER FU */ + ["\uA6D9", "\uA6D9"], /* BAMUM LETTER FOM */ + ["\uA6DA", "\uA6DA"], /* BAMUM LETTER WA */ + ["\uA6DB", "\uA6DB"], /* BAMUM LETTER NA */ + ["\uA6DC", "\uA6DC"], /* BAMUM LETTER LI */ + ["\uA6DD", "\uA6DD"], /* BAMUM LETTER PI */ + ["\uA6DE", "\uA6DE"], /* BAMUM LETTER LOQ */ + ["\uA6DF", "\uA6DF"], /* BAMUM LETTER KO */ + ["\uA6E0", "\uA6E0"], /* BAMUM LETTER MBEN */ + ["\uA6E1", "\uA6E1"], /* BAMUM LETTER REN */ + ["\uA6E2", "\uA6E2"], /* BAMUM LETTER MEN */ + ["\uA6E3", "\uA6E3"], /* BAMUM LETTER MA */ + ["\uA6E4", "\uA6E4"], /* BAMUM LETTER TI */ + ["\uA6E5", "\uA6E5"], /* BAMUM LETTER KI */ + ["\uA6E6", "\uA6E6"], /* BAMUM LETTER MO */ + ["\uA6E7", "\uA6E7"], /* BAMUM LETTER MBAA */ + ["\uA6E8", "\uA6E8"], /* BAMUM LETTER TET */ + ["\uA6E9", "\uA6E9"], /* BAMUM LETTER KPA */ + ["\uA6EA", "\uA6EA"], /* BAMUM LETTER TEN */ + ["\uA6EB", "\uA6EB"], /* BAMUM LETTER NTUU */ + ["\uA6EC", "\uA6EC"], /* BAMUM LETTER SAMBA */ + ["\uA6ED", "\uA6ED"], /* BAMUM LETTER FAAMAE */ + ["\uA6EE", "\uA6EE"], /* BAMUM LETTER KOVUU */ + ["\uA6EF", "\uA6EF"], /* BAMUM LETTER KOGHOM */ + ["\uA6F0", "\uA6F0"], /* BAMUM COMBINING MARK KOQNDON */ + ["\uA6F1", "\uA6F1"], /* BAMUM COMBINING MARK TUKWENTIS */ + ["\uA6F2", "\uA6F2"], /* BAMUM NJAEMLI */ + ["\uA6F3", "\uA6F3"], /* BAMUM FULL STOP */ + ["\uA6F4", "\uA6F4"], /* BAMUM COLON */ + ["\uA6F5", "\uA6F5"], /* BAMUM COMMA */ + ["\uA6F6", "\uA6F6"], /* BAMUM SEMICOLON */ + ["\uA6F7", "\uA6F7"], /* BAMUM QUESTION MARK */ + ["\uA6F8", "\uA6F8"], + ["\uA6F9", "\uA6F9"], + ["\uA6FA", "\uA6FA"], + ["\uA6FB", "\uA6FB"], + ["\uA6FC", "\uA6FC"], + ["\uA6FD", "\uA6FD"], + ["\uA6FE", "\uA6FE"], + ["\uA6FF", "\uA6FF"], + ["\uA700", "\uA700"], /* MODIFIER LETTER CHINESE TONE YIN PING */ + ["\uA701", "\uA701"], /* MODIFIER LETTER CHINESE TONE YANG PING */ + ["\uA702", "\uA702"], /* MODIFIER LETTER CHINESE TONE YIN SHANG */ + ["\uA703", "\uA703"], /* MODIFIER LETTER CHINESE TONE YANG SHANG */ + ["\uA704", "\uA704"], /* MODIFIER LETTER CHINESE TONE YIN QU */ + ["\uA705", "\uA705"], /* MODIFIER LETTER CHINESE TONE YANG QU */ + ["\uA706", "\uA706"], /* MODIFIER LETTER CHINESE TONE YIN RU */ + ["\uA707", "\uA707"], /* MODIFIER LETTER CHINESE TONE YANG RU */ + ["\uA708", "\uA708"], /* MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR */ + ["\uA709", "\uA709"], /* MODIFIER LETTER HIGH DOTTED TONE BAR */ + ["\uA70A", "\uA70A"], /* MODIFIER LETTER MID DOTTED TONE BAR */ + ["\uA70B", "\uA70B"], /* MODIFIER LETTER LOW DOTTED TONE BAR */ + ["\uA70C", "\uA70C"], /* MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR */ + ["\uA70D", "\uA70D"], /* MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR */ + ["\uA70E", "\uA70E"], /* MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR */ + ["\uA70F", "\uA70F"], /* MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR */ + ["\uA710", "\uA710"], /* MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR */ + ["\uA711", "\uA711"], /* MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR */ + ["\uA712", "\uA712"], /* MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR */ + ["\uA713", "\uA713"], /* MODIFIER LETTER HIGH LEFT-STEM TONE BAR */ + ["\uA714", "\uA714"], /* MODIFIER LETTER MID LEFT-STEM TONE BAR */ + ["\uA715", "\uA715"], /* MODIFIER LETTER LOW LEFT-STEM TONE BAR */ + ["\uA716", "\uA716"], /* MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR */ + ["\uA717", "\uA717"], /* MODIFIER LETTER DOT VERTICAL BAR */ + ["\uA718", "\uA718"], /* MODIFIER LETTER DOT SLASH */ + ["\uA719", "\uA719"], /* MODIFIER LETTER DOT HORIZONTAL BAR */ + ["\uA71A", "\uA71A"], /* MODIFIER LETTER LOWER RIGHT CORNER ANGLE */ + ["\uA71B", "\uA71B"], /* MODIFIER LETTER RAISED UP ARROW */ + ["\uA71C", "\uA71C"], /* MODIFIER LETTER RAISED DOWN ARROW */ + ["\uA71D", "\uA71D"], /* MODIFIER LETTER RAISED EXCLAMATION MARK */ + ["\uA71E", "\uA71E"], /* MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK */ + ["\uA71F", "\uA71F"], /* MODIFIER LETTER LOW INVERTED EXCLAMATION MARK */ + ["\uA720", "\uA720"], /* MODIFIER LETTER STRESS AND HIGH TONE */ + ["\uA721", "\uA721"], /* MODIFIER LETTER STRESS AND LOW TONE */ + ["\uA722", "\uA723"], /* LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */ + ["\uA722", "\uA723"], /* LATIN SMALL LETTER EGYPTOLOGICAL ALEF */ + ["\uA724", "\uA725"], /* LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */ + ["\uA724", "\uA725"], /* LATIN SMALL LETTER EGYPTOLOGICAL AIN */ + ["\uA726", "\uA727"], /* LATIN CAPITAL LETTER HENG */ + ["\uA726", "\uA727"], /* LATIN SMALL LETTER HENG */ + ["\uA728", "\uA729"], /* LATIN CAPITAL LETTER TZ */ + ["\uA728", "\uA729"], /* LATIN SMALL LETTER TZ */ + ["\uA72A", "\uA72B"], /* LATIN CAPITAL LETTER TRESILLO */ + ["\uA72A", "\uA72B"], /* LATIN SMALL LETTER TRESILLO */ + ["\uA72C", "\uA72D"], /* LATIN CAPITAL LETTER CUATRILLO */ + ["\uA72C", "\uA72D"], /* LATIN SMALL LETTER CUATRILLO */ + ["\uA72E", "\uA72F"], /* LATIN CAPITAL LETTER CUATRILLO WITH COMMA */ + ["\uA72E", "\uA72F"], /* LATIN SMALL LETTER CUATRILLO WITH COMMA */ + ["\uA730", "\uA730"], /* LATIN LETTER SMALL CAPITAL F */ + ["\uA731", "\uA731"], /* LATIN LETTER SMALL CAPITAL S */ + ["\uA732", "\uA733"], /* LATIN CAPITAL LETTER AA */ + ["\uA732", "\uA733"], /* LATIN SMALL LETTER AA */ + ["\uA734", "\uA735"], /* LATIN CAPITAL LETTER AO */ + ["\uA734", "\uA735"], /* LATIN SMALL LETTER AO */ + ["\uA736", "\uA737"], /* LATIN CAPITAL LETTER AU */ + ["\uA736", "\uA737"], /* LATIN SMALL LETTER AU */ + ["\uA738", "\uA739"], /* LATIN CAPITAL LETTER AV */ + ["\uA738", "\uA739"], /* LATIN SMALL LETTER AV */ + ["\uA73A", "\uA73B"], /* LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */ + ["\uA73A", "\uA73B"], /* LATIN SMALL LETTER AV WITH HORIZONTAL BAR */ + ["\uA73C", "\uA73D"], /* LATIN CAPITAL LETTER AY */ + ["\uA73C", "\uA73D"], /* LATIN SMALL LETTER AY */ + ["\uA73E", "\uA73F"], /* LATIN CAPITAL LETTER REVERSED C WITH DOT */ + ["\uA73E", "\uA73F"], /* LATIN SMALL LETTER REVERSED C WITH DOT */ + ["\uA740", "\uA741"], /* LATIN CAPITAL LETTER K WITH STROKE */ + ["\uA740", "\uA741"], /* LATIN SMALL LETTER K WITH STROKE */ + ["\uA742", "\uA743"], /* LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */ + ["\uA742", "\uA743"], /* LATIN SMALL LETTER K WITH DIAGONAL STROKE */ + ["\uA744", "\uA745"], /* LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */ + ["\uA744", "\uA745"], /* LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE */ + ["\uA746", "\uA747"], /* LATIN CAPITAL LETTER BROKEN L */ + ["\uA746", "\uA747"], /* LATIN SMALL LETTER BROKEN L */ + ["\uA748", "\uA749"], /* LATIN CAPITAL LETTER L WITH HIGH STROKE */ + ["\uA748", "\uA749"], /* LATIN SMALL LETTER L WITH HIGH STROKE */ + ["\uA74A", "\uA74B"], /* LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */ + ["\uA74A", "\uA74B"], /* LATIN SMALL LETTER O WITH LONG STROKE OVERLAY */ + ["\uA74C", "\uA74D"], /* LATIN CAPITAL LETTER O WITH LOOP */ + ["\uA74C", "\uA74D"], /* LATIN SMALL LETTER O WITH LOOP */ + ["\uA74E", "\uA74F"], /* LATIN CAPITAL LETTER OO */ + ["\uA74E", "\uA74F"], /* LATIN SMALL LETTER OO */ + ["\uA750", "\uA751"], /* LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */ + ["\uA750", "\uA751"], /* LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER */ + ["\uA752", "\uA753"], /* LATIN CAPITAL LETTER P WITH FLOURISH */ + ["\uA752", "\uA753"], /* LATIN SMALL LETTER P WITH FLOURISH */ + ["\uA754", "\uA755"], /* LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */ + ["\uA754", "\uA755"], /* LATIN SMALL LETTER P WITH SQUIRREL TAIL */ + ["\uA756", "\uA757"], /* LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */ + ["\uA756", "\uA757"], /* LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER */ + ["\uA758", "\uA759"], /* LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */ + ["\uA758", "\uA759"], /* LATIN SMALL LETTER Q WITH DIAGONAL STROKE */ + ["\uA75A", "\uA75B"], /* LATIN CAPITAL LETTER R ROTUNDA */ + ["\uA75A", "\uA75B"], /* LATIN SMALL LETTER R ROTUNDA */ + ["\uA75C", "\uA75D"], /* LATIN CAPITAL LETTER RUM ROTUNDA */ + ["\uA75C", "\uA75D"], /* LATIN SMALL LETTER RUM ROTUNDA */ + ["\uA75E", "\uA75F"], /* LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */ + ["\uA75E", "\uA75F"], /* LATIN SMALL LETTER V WITH DIAGONAL STROKE */ + ["\uA760", "\uA761"], /* LATIN CAPITAL LETTER VY */ + ["\uA760", "\uA761"], /* LATIN SMALL LETTER VY */ + ["\uA762", "\uA763"], /* LATIN CAPITAL LETTER VISIGOTHIC Z */ + ["\uA762", "\uA763"], /* LATIN SMALL LETTER VISIGOTHIC Z */ + ["\uA764", "\uA765"], /* LATIN CAPITAL LETTER THORN WITH STROKE */ + ["\uA764", "\uA765"], /* LATIN SMALL LETTER THORN WITH STROKE */ + ["\uA766", "\uA767"], /* LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */ + ["\uA766", "\uA767"], /* LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER */ + ["\uA768", "\uA769"], /* LATIN CAPITAL LETTER VEND */ + ["\uA768", "\uA769"], /* LATIN SMALL LETTER VEND */ + ["\uA76A", "\uA76B"], /* LATIN CAPITAL LETTER ET */ + ["\uA76A", "\uA76B"], /* LATIN SMALL LETTER ET */ + ["\uA76C", "\uA76D"], /* LATIN CAPITAL LETTER IS */ + ["\uA76C", "\uA76D"], /* LATIN SMALL LETTER IS */ + ["\uA76E", "\uA76F"], /* LATIN CAPITAL LETTER CON */ + ["\uA76E", "\uA76F"], /* LATIN SMALL LETTER CON */ + ["\uA770", "\uA770"], /* MODIFIER LETTER US */ + ["\uA771", "\uA771"], /* LATIN SMALL LETTER DUM */ + ["\uA772", "\uA772"], /* LATIN SMALL LETTER LUM */ + ["\uA773", "\uA773"], /* LATIN SMALL LETTER MUM */ + ["\uA774", "\uA774"], /* LATIN SMALL LETTER NUM */ + ["\uA775", "\uA775"], /* LATIN SMALL LETTER RUM */ + ["\uA776", "\uA776"], /* LATIN LETTER SMALL CAPITAL RUM */ + ["\uA777", "\uA777"], /* LATIN SMALL LETTER TUM */ + ["\uA778", "\uA778"], /* LATIN SMALL LETTER UM */ + ["\uA779", "\uA77A"], /* LATIN CAPITAL LETTER INSULAR D */ + ["\uA779", "\uA77A"], /* LATIN SMALL LETTER INSULAR D */ + ["\uA77B", "\uA77C"], /* LATIN CAPITAL LETTER INSULAR F */ + ["\uA77B", "\uA77C"], /* LATIN SMALL LETTER INSULAR F */ + ["\uA77D", "\u1D79"], /* LATIN CAPITAL LETTER INSULAR G */ + ["\uA77E", "\uA77F"], /* LATIN CAPITAL LETTER TURNED INSULAR G */ + ["\uA77E", "\uA77F"], /* LATIN SMALL LETTER TURNED INSULAR G */ + ["\uA780", "\uA781"], /* LATIN CAPITAL LETTER TURNED L */ + ["\uA780", "\uA781"], /* LATIN SMALL LETTER TURNED L */ + ["\uA782", "\uA783"], /* LATIN CAPITAL LETTER INSULAR R */ + ["\uA782", "\uA783"], /* LATIN SMALL LETTER INSULAR R */ + ["\uA784", "\uA785"], /* LATIN CAPITAL LETTER INSULAR S */ + ["\uA784", "\uA785"], /* LATIN SMALL LETTER INSULAR S */ + ["\uA786", "\uA787"], /* LATIN CAPITAL LETTER INSULAR T */ + ["\uA786", "\uA787"], /* LATIN SMALL LETTER INSULAR T */ + ["\uA788", "\uA788"], /* MODIFIER LETTER LOW CIRCUMFLEX ACCENT */ + ["\uA789", "\uA789"], /* MODIFIER LETTER COLON */ + ["\uA78A", "\uA78A"], /* MODIFIER LETTER SHORT EQUALS SIGN */ + ["\uA78B", "\uA78C"], /* LATIN CAPITAL LETTER SALTILLO */ + ["\uA78B", "\uA78C"], /* LATIN SMALL LETTER SALTILLO */ + ["\uA78D", "\u0265"], /* LATIN CAPITAL LETTER TURNED H */ + ["\uA78E", "\uA78E"], /* LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT */ + ["\uA78F", "\uA78F"], /* LATIN LETTER SINOLOGICAL DOT */ + ["\uA790", "\uA791"], /* LATIN CAPITAL LETTER N WITH DESCENDER */ + ["\uA790", "\uA791"], /* LATIN SMALL LETTER N WITH DESCENDER */ + ["\uA792", "\uA793"], /* LATIN CAPITAL LETTER C WITH BAR */ + ["\uA792", "\uA793"], /* LATIN SMALL LETTER C WITH BAR */ + ["\uA7C4", "\uA794"], /* LATIN SMALL LETTER C WITH PALATAL HOOK */ + ["\uA795", "\uA795"], /* LATIN SMALL LETTER H WITH PALATAL HOOK */ + ["\uA796", "\uA797"], /* LATIN CAPITAL LETTER B WITH FLOURISH */ + ["\uA796", "\uA797"], /* LATIN SMALL LETTER B WITH FLOURISH */ + ["\uA798", "\uA799"], /* LATIN CAPITAL LETTER F WITH STROKE */ + ["\uA798", "\uA799"], /* LATIN SMALL LETTER F WITH STROKE */ + ["\uA79A", "\uA79B"], /* LATIN CAPITAL LETTER VOLAPUK AE */ + ["\uA79A", "\uA79B"], /* LATIN SMALL LETTER VOLAPUK AE */ + ["\uA79C", "\uA79D"], /* LATIN CAPITAL LETTER VOLAPUK OE */ + ["\uA79C", "\uA79D"], /* LATIN SMALL LETTER VOLAPUK OE */ + ["\uA79E", "\uA79F"], /* LATIN CAPITAL LETTER VOLAPUK UE */ + ["\uA79E", "\uA79F"], /* LATIN SMALL LETTER VOLAPUK UE */ + ["\uA7A0", "\uA7A1"], /* LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */ + ["\uA7A0", "\uA7A1"], /* LATIN SMALL LETTER G WITH OBLIQUE STROKE */ + ["\uA7A2", "\uA7A3"], /* LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */ + ["\uA7A2", "\uA7A3"], /* LATIN SMALL LETTER K WITH OBLIQUE STROKE */ + ["\uA7A4", "\uA7A5"], /* LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */ + ["\uA7A4", "\uA7A5"], /* LATIN SMALL LETTER N WITH OBLIQUE STROKE */ + ["\uA7A6", "\uA7A7"], /* LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */ + ["\uA7A6", "\uA7A7"], /* LATIN SMALL LETTER R WITH OBLIQUE STROKE */ + ["\uA7A8", "\uA7A9"], /* LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */ + ["\uA7A8", "\uA7A9"], /* LATIN SMALL LETTER S WITH OBLIQUE STROKE */ + ["\uA7AA", "\u0266"], /* LATIN CAPITAL LETTER H WITH HOOK */ + ["\uA7AB", "\u025C"], /* LATIN CAPITAL LETTER REVERSED OPEN E */ + ["\uA7AC", "\u0261"], /* LATIN CAPITAL LETTER SCRIPT G */ + ["\uA7AD", "\u026C"], /* LATIN CAPITAL LETTER L WITH BELT */ + ["\uA7AE", "\u026A"], /* LATIN CAPITAL LETTER SMALL CAPITAL I */ + ["\uA7AF", "\uA7AF"], /* LATIN LETTER SMALL CAPITAL Q */ + ["\uA7B0", "\u029E"], /* LATIN CAPITAL LETTER TURNED K */ + ["\uA7B1", "\u0287"], /* LATIN CAPITAL LETTER TURNED T */ + ["\uA7B2", "\u029D"], /* LATIN CAPITAL LETTER J WITH CROSSED-TAIL */ + ["\uA7B3", "\uAB53"], /* LATIN CAPITAL LETTER CHI */ + ["\uA7B4", "\uA7B5"], /* LATIN CAPITAL LETTER BETA */ + ["\uA7B4", "\uA7B5"], /* LATIN SMALL LETTER BETA */ + ["\uA7B6", "\uA7B7"], /* LATIN CAPITAL LETTER OMEGA */ + ["\uA7B6", "\uA7B7"], /* LATIN SMALL LETTER OMEGA */ + ["\uA7B8", "\uA7B9"], /* LATIN CAPITAL LETTER U WITH STROKE */ + ["\uA7B8", "\uA7B9"], /* LATIN SMALL LETTER U WITH STROKE */ + ["\uA7BA", "\uA7BB"], /* LATIN CAPITAL LETTER GLOTTAL A */ + ["\uA7BA", "\uA7BB"], /* LATIN SMALL LETTER GLOTTAL A */ + ["\uA7BC", "\uA7BD"], /* LATIN CAPITAL LETTER GLOTTAL I */ + ["\uA7BC", "\uA7BD"], /* LATIN SMALL LETTER GLOTTAL I */ + ["\uA7BE", "\uA7BF"], /* LATIN CAPITAL LETTER GLOTTAL U */ + ["\uA7BE", "\uA7BF"], /* LATIN SMALL LETTER GLOTTAL U */ + ["\uA7C0", "\uA7C1"], /* LATIN CAPITAL LETTER OLD POLISH O */ + ["\uA7C0", "\uA7C1"], /* LATIN SMALL LETTER OLD POLISH O */ + ["\uA7C2", "\uA7C3"], /* LATIN CAPITAL LETTER ANGLICANA W */ + ["\uA7C2", "\uA7C3"], /* LATIN SMALL LETTER ANGLICANA W */ + ["\uA7C4", "\uA794"], /* LATIN CAPITAL LETTER C WITH PALATAL HOOK */ + ["\uA7C5", "\u0282"], /* LATIN CAPITAL LETTER S WITH HOOK */ + ["\uA7C6", "\u1D8E"], /* LATIN CAPITAL LETTER Z WITH PALATAL HOOK */ + ["\uA7C7", "\uA7C8"], /* LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY */ + ["\uA7C7", "\uA7C8"], /* LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY */ + ["\uA7C9", "\uA7CA"], /* LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY */ + ["\uA7C9", "\uA7CA"], /* LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY */ + ["\uA7CB", "\uA7CB"], + ["\uA7CC", "\uA7CC"], + ["\uA7CD", "\uA7CD"], + ["\uA7CE", "\uA7CE"], + ["\uA7CF", "\uA7CF"], + ["\uA7D0", "\uA7D1"], /* LATIN CAPITAL LETTER CLOSED INSULAR G */ + ["\uA7D0", "\uA7D1"], /* LATIN SMALL LETTER CLOSED INSULAR G */ + ["\uA7D2", "\uA7D2"], + ["\uA7D3", "\uA7D3"], /* LATIN SMALL LETTER DOUBLE THORN */ + ["\uA7D4", "\uA7D4"], + ["\uA7D5", "\uA7D5"], /* LATIN SMALL LETTER DOUBLE WYNN */ + ["\uA7D6", "\uA7D7"], /* LATIN CAPITAL LETTER MIDDLE SCOTS S */ + ["\uA7D6", "\uA7D7"], /* LATIN SMALL LETTER MIDDLE SCOTS S */ + ["\uA7D8", "\uA7D9"], /* LATIN CAPITAL LETTER SIGMOID S */ + ["\uA7D8", "\uA7D9"], /* LATIN SMALL LETTER SIGMOID S */ + ["\uA7DA", "\uA7DA"], + ["\uA7DB", "\uA7DB"], + ["\uA7DC", "\uA7DC"], + ["\uA7DD", "\uA7DD"], + ["\uA7DE", "\uA7DE"], + ["\uA7DF", "\uA7DF"], + ["\uA7E0", "\uA7E0"], + ["\uA7E1", "\uA7E1"], + ["\uA7E2", "\uA7E2"], + ["\uA7E3", "\uA7E3"], + ["\uA7E4", "\uA7E4"], + ["\uA7E5", "\uA7E5"], + ["\uA7E6", "\uA7E6"], + ["\uA7E7", "\uA7E7"], + ["\uA7E8", "\uA7E8"], + ["\uA7E9", "\uA7E9"], + ["\uA7EA", "\uA7EA"], + ["\uA7EB", "\uA7EB"], + ["\uA7EC", "\uA7EC"], + ["\uA7ED", "\uA7ED"], + ["\uA7EE", "\uA7EE"], + ["\uA7EF", "\uA7EF"], + ["\uA7F0", "\uA7F0"], + ["\uA7F1", "\uA7F1"], + ["\uA7F2", "\uA7F2"], /* MODIFIER LETTER CAPITAL C */ + ["\uA7F3", "\uA7F3"], /* MODIFIER LETTER CAPITAL F */ + ["\uA7F4", "\uA7F4"], /* MODIFIER LETTER CAPITAL Q */ + ["\uA7F5", "\uA7F6"], /* LATIN CAPITAL LETTER REVERSED HALF H */ + ["\uA7F5", "\uA7F6"], /* LATIN SMALL LETTER REVERSED HALF H */ + ["\uA7F7", "\uA7F7"], /* LATIN EPIGRAPHIC LETTER SIDEWAYS I */ + ["\uA7F8", "\uA7F8"], /* MODIFIER LETTER CAPITAL H WITH STROKE */ + ["\uA7F9", "\uA7F9"], /* MODIFIER LETTER SMALL LIGATURE OE */ + ["\uA7FA", "\uA7FA"], /* LATIN LETTER SMALL CAPITAL TURNED M */ + ["\uA7FB", "\uA7FB"], /* LATIN EPIGRAPHIC LETTER REVERSED F */ + ["\uA7FC", "\uA7FC"], /* LATIN EPIGRAPHIC LETTER REVERSED P */ + ["\uA7FD", "\uA7FD"], /* LATIN EPIGRAPHIC LETTER INVERTED M */ + ["\uA7FE", "\uA7FE"], /* LATIN EPIGRAPHIC LETTER I LONGA */ + ["\uA7FF", "\uA7FF"], /* LATIN EPIGRAPHIC LETTER ARCHAIC M */ + ["\uA800", "\uA800"], /* SYLOTI NAGRI LETTER A */ + ["\uA801", "\uA801"], /* SYLOTI NAGRI LETTER I */ + ["\uA802", "\uA802"], /* SYLOTI NAGRI SIGN DVISVARA */ + ["\uA803", "\uA803"], /* SYLOTI NAGRI LETTER U */ + ["\uA804", "\uA804"], /* SYLOTI NAGRI LETTER E */ + ["\uA805", "\uA805"], /* SYLOTI NAGRI LETTER O */ + ["\uA806", "\uA806"], /* SYLOTI NAGRI SIGN HASANTA */ + ["\uA807", "\uA807"], /* SYLOTI NAGRI LETTER KO */ + ["\uA808", "\uA808"], /* SYLOTI NAGRI LETTER KHO */ + ["\uA809", "\uA809"], /* SYLOTI NAGRI LETTER GO */ + ["\uA80A", "\uA80A"], /* SYLOTI NAGRI LETTER GHO */ + ["\uA80B", "\uA80B"], /* SYLOTI NAGRI SIGN ANUSVARA */ + ["\uA80C", "\uA80C"], /* SYLOTI NAGRI LETTER CO */ + ["\uA80D", "\uA80D"], /* SYLOTI NAGRI LETTER CHO */ + ["\uA80E", "\uA80E"], /* SYLOTI NAGRI LETTER JO */ + ["\uA80F", "\uA80F"], /* SYLOTI NAGRI LETTER JHO */ + ["\uA810", "\uA810"], /* SYLOTI NAGRI LETTER TTO */ + ["\uA811", "\uA811"], /* SYLOTI NAGRI LETTER TTHO */ + ["\uA812", "\uA812"], /* SYLOTI NAGRI LETTER DDO */ + ["\uA813", "\uA813"], /* SYLOTI NAGRI LETTER DDHO */ + ["\uA814", "\uA814"], /* SYLOTI NAGRI LETTER TO */ + ["\uA815", "\uA815"], /* SYLOTI NAGRI LETTER THO */ + ["\uA816", "\uA816"], /* SYLOTI NAGRI LETTER DO */ + ["\uA817", "\uA817"], /* SYLOTI NAGRI LETTER DHO */ + ["\uA818", "\uA818"], /* SYLOTI NAGRI LETTER NO */ + ["\uA819", "\uA819"], /* SYLOTI NAGRI LETTER PO */ + ["\uA81A", "\uA81A"], /* SYLOTI NAGRI LETTER PHO */ + ["\uA81B", "\uA81B"], /* SYLOTI NAGRI LETTER BO */ + ["\uA81C", "\uA81C"], /* SYLOTI NAGRI LETTER BHO */ + ["\uA81D", "\uA81D"], /* SYLOTI NAGRI LETTER MO */ + ["\uA81E", "\uA81E"], /* SYLOTI NAGRI LETTER RO */ + ["\uA81F", "\uA81F"], /* SYLOTI NAGRI LETTER LO */ + ["\uA820", "\uA820"], /* SYLOTI NAGRI LETTER RRO */ + ["\uA821", "\uA821"], /* SYLOTI NAGRI LETTER SO */ + ["\uA822", "\uA822"], /* SYLOTI NAGRI LETTER HO */ + ["\uA823", "\uA823"], /* SYLOTI NAGRI VOWEL SIGN A */ + ["\uA824", "\uA824"], /* SYLOTI NAGRI VOWEL SIGN I */ + ["\uA825", "\uA825"], /* SYLOTI NAGRI VOWEL SIGN U */ + ["\uA826", "\uA826"], /* SYLOTI NAGRI VOWEL SIGN E */ + ["\uA827", "\uA827"], /* SYLOTI NAGRI VOWEL SIGN OO */ + ["\uA828", "\uA828"], /* SYLOTI NAGRI POETRY MARK-1 */ + ["\uA829", "\uA829"], /* SYLOTI NAGRI POETRY MARK-2 */ + ["\uA82A", "\uA82A"], /* SYLOTI NAGRI POETRY MARK-3 */ + ["\uA82B", "\uA82B"], /* SYLOTI NAGRI POETRY MARK-4 */ + ["\uA82C", "\uA82C"], /* SYLOTI NAGRI SIGN ALTERNATE HASANTA */ + ["\uA82D", "\uA82D"], + ["\uA82E", "\uA82E"], + ["\uA82F", "\uA82F"], + ["\uA830", "\uA830"], /* NORTH INDIC FRACTION ONE QUARTER */ + ["\uA831", "\uA831"], /* NORTH INDIC FRACTION ONE HALF */ + ["\uA832", "\uA832"], /* NORTH INDIC FRACTION THREE QUARTERS */ + ["\uA833", "\uA833"], /* NORTH INDIC FRACTION ONE SIXTEENTH */ + ["\uA834", "\uA834"], /* NORTH INDIC FRACTION ONE EIGHTH */ + ["\uA835", "\uA835"], /* NORTH INDIC FRACTION THREE SIXTEENTHS */ + ["\uA836", "\uA836"], /* NORTH INDIC QUARTER MARK */ + ["\uA837", "\uA837"], /* NORTH INDIC PLACEHOLDER MARK */ + ["\uA838", "\uA838"], /* NORTH INDIC RUPEE MARK */ + ["\uA839", "\uA839"], /* NORTH INDIC QUANTITY MARK */ + ["\uA83A", "\uA83A"], + ["\uA83B", "\uA83B"], + ["\uA83C", "\uA83C"], + ["\uA83D", "\uA83D"], + ["\uA83E", "\uA83E"], + ["\uA83F", "\uA83F"], + ["\uA840", "\uA840"], /* PHAGS-PA LETTER KA */ + ["\uA841", "\uA841"], /* PHAGS-PA LETTER KHA */ + ["\uA842", "\uA842"], /* PHAGS-PA LETTER GA */ + ["\uA843", "\uA843"], /* PHAGS-PA LETTER NGA */ + ["\uA844", "\uA844"], /* PHAGS-PA LETTER CA */ + ["\uA845", "\uA845"], /* PHAGS-PA LETTER CHA */ + ["\uA846", "\uA846"], /* PHAGS-PA LETTER JA */ + ["\uA847", "\uA847"], /* PHAGS-PA LETTER NYA */ + ["\uA848", "\uA848"], /* PHAGS-PA LETTER TA */ + ["\uA849", "\uA849"], /* PHAGS-PA LETTER THA */ + ["\uA84A", "\uA84A"], /* PHAGS-PA LETTER DA */ + ["\uA84B", "\uA84B"], /* PHAGS-PA LETTER NA */ + ["\uA84C", "\uA84C"], /* PHAGS-PA LETTER PA */ + ["\uA84D", "\uA84D"], /* PHAGS-PA LETTER PHA */ + ["\uA84E", "\uA84E"], /* PHAGS-PA LETTER BA */ + ["\uA84F", "\uA84F"], /* PHAGS-PA LETTER MA */ + ["\uA850", "\uA850"], /* PHAGS-PA LETTER TSA */ + ["\uA851", "\uA851"], /* PHAGS-PA LETTER TSHA */ + ["\uA852", "\uA852"], /* PHAGS-PA LETTER DZA */ + ["\uA853", "\uA853"], /* PHAGS-PA LETTER WA */ + ["\uA854", "\uA854"], /* PHAGS-PA LETTER ZHA */ + ["\uA855", "\uA855"], /* PHAGS-PA LETTER ZA */ + ["\uA856", "\uA856"], /* PHAGS-PA LETTER SMALL A */ + ["\uA857", "\uA857"], /* PHAGS-PA LETTER YA */ + ["\uA858", "\uA858"], /* PHAGS-PA LETTER RA */ + ["\uA859", "\uA859"], /* PHAGS-PA LETTER LA */ + ["\uA85A", "\uA85A"], /* PHAGS-PA LETTER SHA */ + ["\uA85B", "\uA85B"], /* PHAGS-PA LETTER SA */ + ["\uA85C", "\uA85C"], /* PHAGS-PA LETTER HA */ + ["\uA85D", "\uA85D"], /* PHAGS-PA LETTER A */ + ["\uA85E", "\uA85E"], /* PHAGS-PA LETTER I */ + ["\uA85F", "\uA85F"], /* PHAGS-PA LETTER U */ + ["\uA860", "\uA860"], /* PHAGS-PA LETTER E */ + ["\uA861", "\uA861"], /* PHAGS-PA LETTER O */ + ["\uA862", "\uA862"], /* PHAGS-PA LETTER QA */ + ["\uA863", "\uA863"], /* PHAGS-PA LETTER XA */ + ["\uA864", "\uA864"], /* PHAGS-PA LETTER FA */ + ["\uA865", "\uA865"], /* PHAGS-PA LETTER GGA */ + ["\uA866", "\uA866"], /* PHAGS-PA LETTER EE */ + ["\uA867", "\uA867"], /* PHAGS-PA SUBJOINED LETTER WA */ + ["\uA868", "\uA868"], /* PHAGS-PA SUBJOINED LETTER YA */ + ["\uA869", "\uA869"], /* PHAGS-PA LETTER TTA */ + ["\uA86A", "\uA86A"], /* PHAGS-PA LETTER TTHA */ + ["\uA86B", "\uA86B"], /* PHAGS-PA LETTER DDA */ + ["\uA86C", "\uA86C"], /* PHAGS-PA LETTER NNA */ + ["\uA86D", "\uA86D"], /* PHAGS-PA LETTER ALTERNATE YA */ + ["\uA86E", "\uA86E"], /* PHAGS-PA LETTER VOICELESS SHA */ + ["\uA86F", "\uA86F"], /* PHAGS-PA LETTER VOICED HA */ + ["\uA870", "\uA870"], /* PHAGS-PA LETTER ASPIRATED FA */ + ["\uA871", "\uA871"], /* PHAGS-PA SUBJOINED LETTER RA */ + ["\uA872", "\uA872"], /* PHAGS-PA SUPERFIXED LETTER RA */ + ["\uA873", "\uA873"], /* PHAGS-PA LETTER CANDRABINDU */ + ["\uA874", "\uA874"], /* PHAGS-PA SINGLE HEAD MARK */ + ["\uA875", "\uA875"], /* PHAGS-PA DOUBLE HEAD MARK */ + ["\uA876", "\uA876"], /* PHAGS-PA MARK SHAD */ + ["\uA877", "\uA877"], /* PHAGS-PA MARK DOUBLE SHAD */ + ["\uA878", "\uA878"], + ["\uA879", "\uA879"], + ["\uA87A", "\uA87A"], + ["\uA87B", "\uA87B"], + ["\uA87C", "\uA87C"], + ["\uA87D", "\uA87D"], + ["\uA87E", "\uA87E"], + ["\uA87F", "\uA87F"], + ["\uA880", "\uA880"], /* SAURASHTRA SIGN ANUSVARA */ + ["\uA881", "\uA881"], /* SAURASHTRA SIGN VISARGA */ + ["\uA882", "\uA882"], /* SAURASHTRA LETTER A */ + ["\uA883", "\uA883"], /* SAURASHTRA LETTER AA */ + ["\uA884", "\uA884"], /* SAURASHTRA LETTER I */ + ["\uA885", "\uA885"], /* SAURASHTRA LETTER II */ + ["\uA886", "\uA886"], /* SAURASHTRA LETTER U */ + ["\uA887", "\uA887"], /* SAURASHTRA LETTER UU */ + ["\uA888", "\uA888"], /* SAURASHTRA LETTER VOCALIC R */ + ["\uA889", "\uA889"], /* SAURASHTRA LETTER VOCALIC RR */ + ["\uA88A", "\uA88A"], /* SAURASHTRA LETTER VOCALIC L */ + ["\uA88B", "\uA88B"], /* SAURASHTRA LETTER VOCALIC LL */ + ["\uA88C", "\uA88C"], /* SAURASHTRA LETTER E */ + ["\uA88D", "\uA88D"], /* SAURASHTRA LETTER EE */ + ["\uA88E", "\uA88E"], /* SAURASHTRA LETTER AI */ + ["\uA88F", "\uA88F"], /* SAURASHTRA LETTER O */ + ["\uA890", "\uA890"], /* SAURASHTRA LETTER OO */ + ["\uA891", "\uA891"], /* SAURASHTRA LETTER AU */ + ["\uA892", "\uA892"], /* SAURASHTRA LETTER KA */ + ["\uA893", "\uA893"], /* SAURASHTRA LETTER KHA */ + ["\uA894", "\uA894"], /* SAURASHTRA LETTER GA */ + ["\uA895", "\uA895"], /* SAURASHTRA LETTER GHA */ + ["\uA896", "\uA896"], /* SAURASHTRA LETTER NGA */ + ["\uA897", "\uA897"], /* SAURASHTRA LETTER CA */ + ["\uA898", "\uA898"], /* SAURASHTRA LETTER CHA */ + ["\uA899", "\uA899"], /* SAURASHTRA LETTER JA */ + ["\uA89A", "\uA89A"], /* SAURASHTRA LETTER JHA */ + ["\uA89B", "\uA89B"], /* SAURASHTRA LETTER NYA */ + ["\uA89C", "\uA89C"], /* SAURASHTRA LETTER TTA */ + ["\uA89D", "\uA89D"], /* SAURASHTRA LETTER TTHA */ + ["\uA89E", "\uA89E"], /* SAURASHTRA LETTER DDA */ + ["\uA89F", "\uA89F"], /* SAURASHTRA LETTER DDHA */ + ["\uA8A0", "\uA8A0"], /* SAURASHTRA LETTER NNA */ + ["\uA8A1", "\uA8A1"], /* SAURASHTRA LETTER TA */ + ["\uA8A2", "\uA8A2"], /* SAURASHTRA LETTER THA */ + ["\uA8A3", "\uA8A3"], /* SAURASHTRA LETTER DA */ + ["\uA8A4", "\uA8A4"], /* SAURASHTRA LETTER DHA */ + ["\uA8A5", "\uA8A5"], /* SAURASHTRA LETTER NA */ + ["\uA8A6", "\uA8A6"], /* SAURASHTRA LETTER PA */ + ["\uA8A7", "\uA8A7"], /* SAURASHTRA LETTER PHA */ + ["\uA8A8", "\uA8A8"], /* SAURASHTRA LETTER BA */ + ["\uA8A9", "\uA8A9"], /* SAURASHTRA LETTER BHA */ + ["\uA8AA", "\uA8AA"], /* SAURASHTRA LETTER MA */ + ["\uA8AB", "\uA8AB"], /* SAURASHTRA LETTER YA */ + ["\uA8AC", "\uA8AC"], /* SAURASHTRA LETTER RA */ + ["\uA8AD", "\uA8AD"], /* SAURASHTRA LETTER LA */ + ["\uA8AE", "\uA8AE"], /* SAURASHTRA LETTER VA */ + ["\uA8AF", "\uA8AF"], /* SAURASHTRA LETTER SHA */ + ["\uA8B0", "\uA8B0"], /* SAURASHTRA LETTER SSA */ + ["\uA8B1", "\uA8B1"], /* SAURASHTRA LETTER SA */ + ["\uA8B2", "\uA8B2"], /* SAURASHTRA LETTER HA */ + ["\uA8B3", "\uA8B3"], /* SAURASHTRA LETTER LLA */ + ["\uA8B4", "\uA8B4"], /* SAURASHTRA CONSONANT SIGN HAARU */ + ["\uA8B5", "\uA8B5"], /* SAURASHTRA VOWEL SIGN AA */ + ["\uA8B6", "\uA8B6"], /* SAURASHTRA VOWEL SIGN I */ + ["\uA8B7", "\uA8B7"], /* SAURASHTRA VOWEL SIGN II */ + ["\uA8B8", "\uA8B8"], /* SAURASHTRA VOWEL SIGN U */ + ["\uA8B9", "\uA8B9"], /* SAURASHTRA VOWEL SIGN UU */ + ["\uA8BA", "\uA8BA"], /* SAURASHTRA VOWEL SIGN VOCALIC R */ + ["\uA8BB", "\uA8BB"], /* SAURASHTRA VOWEL SIGN VOCALIC RR */ + ["\uA8BC", "\uA8BC"], /* SAURASHTRA VOWEL SIGN VOCALIC L */ + ["\uA8BD", "\uA8BD"], /* SAURASHTRA VOWEL SIGN VOCALIC LL */ + ["\uA8BE", "\uA8BE"], /* SAURASHTRA VOWEL SIGN E */ + ["\uA8BF", "\uA8BF"], /* SAURASHTRA VOWEL SIGN EE */ + ["\uA8C0", "\uA8C0"], /* SAURASHTRA VOWEL SIGN AI */ + ["\uA8C1", "\uA8C1"], /* SAURASHTRA VOWEL SIGN O */ + ["\uA8C2", "\uA8C2"], /* SAURASHTRA VOWEL SIGN OO */ + ["\uA8C3", "\uA8C3"], /* SAURASHTRA VOWEL SIGN AU */ + ["\uA8C4", "\uA8C4"], /* SAURASHTRA SIGN VIRAMA */ + ["\uA8C5", "\uA8C5"], /* SAURASHTRA SIGN CANDRABINDU */ + ["\uA8C6", "\uA8C6"], + ["\uA8C7", "\uA8C7"], + ["\uA8C8", "\uA8C8"], + ["\uA8C9", "\uA8C9"], + ["\uA8CA", "\uA8CA"], + ["\uA8CB", "\uA8CB"], + ["\uA8CC", "\uA8CC"], + ["\uA8CD", "\uA8CD"], + ["\uA8CE", "\uA8CE"], /* SAURASHTRA DANDA */ + ["\uA8CF", "\uA8CF"], /* SAURASHTRA DOUBLE DANDA */ + ["\uA8D0", "\uA8D0"], /* SAURASHTRA DIGIT ZERO */ + ["\uA8D1", "\uA8D1"], /* SAURASHTRA DIGIT ONE */ + ["\uA8D2", "\uA8D2"], /* SAURASHTRA DIGIT TWO */ + ["\uA8D3", "\uA8D3"], /* SAURASHTRA DIGIT THREE */ + ["\uA8D4", "\uA8D4"], /* SAURASHTRA DIGIT FOUR */ + ["\uA8D5", "\uA8D5"], /* SAURASHTRA DIGIT FIVE */ + ["\uA8D6", "\uA8D6"], /* SAURASHTRA DIGIT SIX */ + ["\uA8D7", "\uA8D7"], /* SAURASHTRA DIGIT SEVEN */ + ["\uA8D8", "\uA8D8"], /* SAURASHTRA DIGIT EIGHT */ + ["\uA8D9", "\uA8D9"], /* SAURASHTRA DIGIT NINE */ + ["\uA8DA", "\uA8DA"], + ["\uA8DB", "\uA8DB"], + ["\uA8DC", "\uA8DC"], + ["\uA8DD", "\uA8DD"], + ["\uA8DE", "\uA8DE"], + ["\uA8DF", "\uA8DF"], + ["\uA8E0", "\uA8E0"], /* COMBINING DEVANAGARI DIGIT ZERO */ + ["\uA8E1", "\uA8E1"], /* COMBINING DEVANAGARI DIGIT ONE */ + ["\uA8E2", "\uA8E2"], /* COMBINING DEVANAGARI DIGIT TWO */ + ["\uA8E3", "\uA8E3"], /* COMBINING DEVANAGARI DIGIT THREE */ + ["\uA8E4", "\uA8E4"], /* COMBINING DEVANAGARI DIGIT FOUR */ + ["\uA8E5", "\uA8E5"], /* COMBINING DEVANAGARI DIGIT FIVE */ + ["\uA8E6", "\uA8E6"], /* COMBINING DEVANAGARI DIGIT SIX */ + ["\uA8E7", "\uA8E7"], /* COMBINING DEVANAGARI DIGIT SEVEN */ + ["\uA8E8", "\uA8E8"], /* COMBINING DEVANAGARI DIGIT EIGHT */ + ["\uA8E9", "\uA8E9"], /* COMBINING DEVANAGARI DIGIT NINE */ + ["\uA8EA", "\uA8EA"], /* COMBINING DEVANAGARI LETTER A */ + ["\uA8EB", "\uA8EB"], /* COMBINING DEVANAGARI LETTER U */ + ["\uA8EC", "\uA8EC"], /* COMBINING DEVANAGARI LETTER KA */ + ["\uA8ED", "\uA8ED"], /* COMBINING DEVANAGARI LETTER NA */ + ["\uA8EE", "\uA8EE"], /* COMBINING DEVANAGARI LETTER PA */ + ["\uA8EF", "\uA8EF"], /* COMBINING DEVANAGARI LETTER RA */ + ["\uA8F0", "\uA8F0"], /* COMBINING DEVANAGARI LETTER VI */ + ["\uA8F1", "\uA8F1"], /* COMBINING DEVANAGARI SIGN AVAGRAHA */ + ["\uA8F2", "\uA8F2"], /* DEVANAGARI SIGN SPACING CANDRABINDU */ + ["\uA8F3", "\uA8F3"], /* DEVANAGARI SIGN CANDRABINDU VIRAMA */ + ["\uA8F4", "\uA8F4"], /* DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA */ + ["\uA8F5", "\uA8F5"], /* DEVANAGARI SIGN CANDRABINDU TWO */ + ["\uA8F6", "\uA8F6"], /* DEVANAGARI SIGN CANDRABINDU THREE */ + ["\uA8F7", "\uA8F7"], /* DEVANAGARI SIGN CANDRABINDU AVAGRAHA */ + ["\uA8F8", "\uA8F8"], /* DEVANAGARI SIGN PUSHPIKA */ + ["\uA8F9", "\uA8F9"], /* DEVANAGARI GAP FILLER */ + ["\uA8FA", "\uA8FA"], /* DEVANAGARI CARET */ + ["\uA8FB", "\uA8FB"], /* DEVANAGARI HEADSTROKE */ + ["\uA8FC", "\uA8FC"], /* DEVANAGARI SIGN SIDDHAM */ + ["\uA8FD", "\uA8FD"], /* DEVANAGARI JAIN OM */ + ["\uA8FE", "\uA8FE"], /* DEVANAGARI LETTER AY */ + ["\uA8FF", "\uA8FF"], /* DEVANAGARI VOWEL SIGN AY */ + ["\uA900", "\uA900"], /* KAYAH LI DIGIT ZERO */ + ["\uA901", "\uA901"], /* KAYAH LI DIGIT ONE */ + ["\uA902", "\uA902"], /* KAYAH LI DIGIT TWO */ + ["\uA903", "\uA903"], /* KAYAH LI DIGIT THREE */ + ["\uA904", "\uA904"], /* KAYAH LI DIGIT FOUR */ + ["\uA905", "\uA905"], /* KAYAH LI DIGIT FIVE */ + ["\uA906", "\uA906"], /* KAYAH LI DIGIT SIX */ + ["\uA907", "\uA907"], /* KAYAH LI DIGIT SEVEN */ + ["\uA908", "\uA908"], /* KAYAH LI DIGIT EIGHT */ + ["\uA909", "\uA909"], /* KAYAH LI DIGIT NINE */ + ["\uA90A", "\uA90A"], /* KAYAH LI LETTER KA */ + ["\uA90B", "\uA90B"], /* KAYAH LI LETTER KHA */ + ["\uA90C", "\uA90C"], /* KAYAH LI LETTER GA */ + ["\uA90D", "\uA90D"], /* KAYAH LI LETTER NGA */ + ["\uA90E", "\uA90E"], /* KAYAH LI LETTER SA */ + ["\uA90F", "\uA90F"], /* KAYAH LI LETTER SHA */ + ["\uA910", "\uA910"], /* KAYAH LI LETTER ZA */ + ["\uA911", "\uA911"], /* KAYAH LI LETTER NYA */ + ["\uA912", "\uA912"], /* KAYAH LI LETTER TA */ + ["\uA913", "\uA913"], /* KAYAH LI LETTER HTA */ + ["\uA914", "\uA914"], /* KAYAH LI LETTER NA */ + ["\uA915", "\uA915"], /* KAYAH LI LETTER PA */ + ["\uA916", "\uA916"], /* KAYAH LI LETTER PHA */ + ["\uA917", "\uA917"], /* KAYAH LI LETTER MA */ + ["\uA918", "\uA918"], /* KAYAH LI LETTER DA */ + ["\uA919", "\uA919"], /* KAYAH LI LETTER BA */ + ["\uA91A", "\uA91A"], /* KAYAH LI LETTER RA */ + ["\uA91B", "\uA91B"], /* KAYAH LI LETTER YA */ + ["\uA91C", "\uA91C"], /* KAYAH LI LETTER LA */ + ["\uA91D", "\uA91D"], /* KAYAH LI LETTER WA */ + ["\uA91E", "\uA91E"], /* KAYAH LI LETTER THA */ + ["\uA91F", "\uA91F"], /* KAYAH LI LETTER HA */ + ["\uA920", "\uA920"], /* KAYAH LI LETTER VA */ + ["\uA921", "\uA921"], /* KAYAH LI LETTER CA */ + ["\uA922", "\uA922"], /* KAYAH LI LETTER A */ + ["\uA923", "\uA923"], /* KAYAH LI LETTER OE */ + ["\uA924", "\uA924"], /* KAYAH LI LETTER I */ + ["\uA925", "\uA925"], /* KAYAH LI LETTER OO */ + ["\uA926", "\uA926"], /* KAYAH LI VOWEL UE */ + ["\uA927", "\uA927"], /* KAYAH LI VOWEL E */ + ["\uA928", "\uA928"], /* KAYAH LI VOWEL U */ + ["\uA929", "\uA929"], /* KAYAH LI VOWEL EE */ + ["\uA92A", "\uA92A"], /* KAYAH LI VOWEL O */ + ["\uA92B", "\uA92B"], /* KAYAH LI TONE PLOPHU */ + ["\uA92C", "\uA92C"], /* KAYAH LI TONE CALYA */ + ["\uA92D", "\uA92D"], /* KAYAH LI TONE CALYA PLOPHU */ + ["\uA92E", "\uA92E"], /* KAYAH LI SIGN CWI */ + ["\uA92F", "\uA92F"], /* KAYAH LI SIGN SHYA */ + ["\uA930", "\uA930"], /* REJANG LETTER KA */ + ["\uA931", "\uA931"], /* REJANG LETTER GA */ + ["\uA932", "\uA932"], /* REJANG LETTER NGA */ + ["\uA933", "\uA933"], /* REJANG LETTER TA */ + ["\uA934", "\uA934"], /* REJANG LETTER DA */ + ["\uA935", "\uA935"], /* REJANG LETTER NA */ + ["\uA936", "\uA936"], /* REJANG LETTER PA */ + ["\uA937", "\uA937"], /* REJANG LETTER BA */ + ["\uA938", "\uA938"], /* REJANG LETTER MA */ + ["\uA939", "\uA939"], /* REJANG LETTER CA */ + ["\uA93A", "\uA93A"], /* REJANG LETTER JA */ + ["\uA93B", "\uA93B"], /* REJANG LETTER NYA */ + ["\uA93C", "\uA93C"], /* REJANG LETTER SA */ + ["\uA93D", "\uA93D"], /* REJANG LETTER RA */ + ["\uA93E", "\uA93E"], /* REJANG LETTER LA */ + ["\uA93F", "\uA93F"], /* REJANG LETTER YA */ + ["\uA940", "\uA940"], /* REJANG LETTER WA */ + ["\uA941", "\uA941"], /* REJANG LETTER HA */ + ["\uA942", "\uA942"], /* REJANG LETTER MBA */ + ["\uA943", "\uA943"], /* REJANG LETTER NGGA */ + ["\uA944", "\uA944"], /* REJANG LETTER NDA */ + ["\uA945", "\uA945"], /* REJANG LETTER NYJA */ + ["\uA946", "\uA946"], /* REJANG LETTER A */ + ["\uA947", "\uA947"], /* REJANG VOWEL SIGN I */ + ["\uA948", "\uA948"], /* REJANG VOWEL SIGN U */ + ["\uA949", "\uA949"], /* REJANG VOWEL SIGN E */ + ["\uA94A", "\uA94A"], /* REJANG VOWEL SIGN AI */ + ["\uA94B", "\uA94B"], /* REJANG VOWEL SIGN O */ + ["\uA94C", "\uA94C"], /* REJANG VOWEL SIGN AU */ + ["\uA94D", "\uA94D"], /* REJANG VOWEL SIGN EU */ + ["\uA94E", "\uA94E"], /* REJANG VOWEL SIGN EA */ + ["\uA94F", "\uA94F"], /* REJANG CONSONANT SIGN NG */ + ["\uA950", "\uA950"], /* REJANG CONSONANT SIGN N */ + ["\uA951", "\uA951"], /* REJANG CONSONANT SIGN R */ + ["\uA952", "\uA952"], /* REJANG CONSONANT SIGN H */ + ["\uA953", "\uA953"], /* REJANG VIRAMA */ + ["\uA954", "\uA954"], + ["\uA955", "\uA955"], + ["\uA956", "\uA956"], + ["\uA957", "\uA957"], + ["\uA958", "\uA958"], + ["\uA959", "\uA959"], + ["\uA95A", "\uA95A"], + ["\uA95B", "\uA95B"], + ["\uA95C", "\uA95C"], + ["\uA95D", "\uA95D"], + ["\uA95E", "\uA95E"], + ["\uA95F", "\uA95F"], /* REJANG SECTION MARK */ + ["\uA960", "\uA960"], /* HANGUL CHOSEONG TIKEUT-MIEUM */ + ["\uA961", "\uA961"], /* HANGUL CHOSEONG TIKEUT-PIEUP */ + ["\uA962", "\uA962"], /* HANGUL CHOSEONG TIKEUT-SIOS */ + ["\uA963", "\uA963"], /* HANGUL CHOSEONG TIKEUT-CIEUC */ + ["\uA964", "\uA964"], /* HANGUL CHOSEONG RIEUL-KIYEOK */ + ["\uA965", "\uA965"], /* HANGUL CHOSEONG RIEUL-SSANGKIYEOK */ + ["\uA966", "\uA966"], /* HANGUL CHOSEONG RIEUL-TIKEUT */ + ["\uA967", "\uA967"], /* HANGUL CHOSEONG RIEUL-SSANGTIKEUT */ + ["\uA968", "\uA968"], /* HANGUL CHOSEONG RIEUL-MIEUM */ + ["\uA969", "\uA969"], /* HANGUL CHOSEONG RIEUL-PIEUP */ + ["\uA96A", "\uA96A"], /* HANGUL CHOSEONG RIEUL-SSANGPIEUP */ + ["\uA96B", "\uA96B"], /* HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP */ + ["\uA96C", "\uA96C"], /* HANGUL CHOSEONG RIEUL-SIOS */ + ["\uA96D", "\uA96D"], /* HANGUL CHOSEONG RIEUL-CIEUC */ + ["\uA96E", "\uA96E"], /* HANGUL CHOSEONG RIEUL-KHIEUKH */ + ["\uA96F", "\uA96F"], /* HANGUL CHOSEONG MIEUM-KIYEOK */ + ["\uA970", "\uA970"], /* HANGUL CHOSEONG MIEUM-TIKEUT */ + ["\uA971", "\uA971"], /* HANGUL CHOSEONG MIEUM-SIOS */ + ["\uA972", "\uA972"], /* HANGUL CHOSEONG PIEUP-SIOS-THIEUTH */ + ["\uA973", "\uA973"], /* HANGUL CHOSEONG PIEUP-KHIEUKH */ + ["\uA974", "\uA974"], /* HANGUL CHOSEONG PIEUP-HIEUH */ + ["\uA975", "\uA975"], /* HANGUL CHOSEONG SSANGSIOS-PIEUP */ + ["\uA976", "\uA976"], /* HANGUL CHOSEONG IEUNG-RIEUL */ + ["\uA977", "\uA977"], /* HANGUL CHOSEONG IEUNG-HIEUH */ + ["\uA978", "\uA978"], /* HANGUL CHOSEONG SSANGCIEUC-HIEUH */ + ["\uA979", "\uA979"], /* HANGUL CHOSEONG SSANGTHIEUTH */ + ["\uA97A", "\uA97A"], /* HANGUL CHOSEONG PHIEUPH-HIEUH */ + ["\uA97B", "\uA97B"], /* HANGUL CHOSEONG HIEUH-SIOS */ + ["\uA97C", "\uA97C"], /* HANGUL CHOSEONG SSANGYEORINHIEUH */ + ["\uA97D", "\uA97D"], + ["\uA97E", "\uA97E"], + ["\uA97F", "\uA97F"], + ["\uA980", "\uA980"], /* JAVANESE SIGN PANYANGGA */ + ["\uA981", "\uA981"], /* JAVANESE SIGN CECAK */ + ["\uA982", "\uA982"], /* JAVANESE SIGN LAYAR */ + ["\uA983", "\uA983"], /* JAVANESE SIGN WIGNYAN */ + ["\uA984", "\uA984"], /* JAVANESE LETTER A */ + ["\uA985", "\uA985"], /* JAVANESE LETTER I KAWI */ + ["\uA986", "\uA986"], /* JAVANESE LETTER I */ + ["\uA987", "\uA987"], /* JAVANESE LETTER II */ + ["\uA988", "\uA988"], /* JAVANESE LETTER U */ + ["\uA989", "\uA989"], /* JAVANESE LETTER PA CEREK */ + ["\uA98A", "\uA98A"], /* JAVANESE LETTER NGA LELET */ + ["\uA98B", "\uA98B"], /* JAVANESE LETTER NGA LELET RASWADI */ + ["\uA98C", "\uA98C"], /* JAVANESE LETTER E */ + ["\uA98D", "\uA98D"], /* JAVANESE LETTER AI */ + ["\uA98E", "\uA98E"], /* JAVANESE LETTER O */ + ["\uA98F", "\uA98F"], /* JAVANESE LETTER KA */ + ["\uA990", "\uA990"], /* JAVANESE LETTER KA SASAK */ + ["\uA991", "\uA991"], /* JAVANESE LETTER KA MURDA */ + ["\uA992", "\uA992"], /* JAVANESE LETTER GA */ + ["\uA993", "\uA993"], /* JAVANESE LETTER GA MURDA */ + ["\uA994", "\uA994"], /* JAVANESE LETTER NGA */ + ["\uA995", "\uA995"], /* JAVANESE LETTER CA */ + ["\uA996", "\uA996"], /* JAVANESE LETTER CA MURDA */ + ["\uA997", "\uA997"], /* JAVANESE LETTER JA */ + ["\uA998", "\uA998"], /* JAVANESE LETTER NYA MURDA */ + ["\uA999", "\uA999"], /* JAVANESE LETTER JA MAHAPRANA */ + ["\uA99A", "\uA99A"], /* JAVANESE LETTER NYA */ + ["\uA99B", "\uA99B"], /* JAVANESE LETTER TTA */ + ["\uA99C", "\uA99C"], /* JAVANESE LETTER TTA MAHAPRANA */ + ["\uA99D", "\uA99D"], /* JAVANESE LETTER DDA */ + ["\uA99E", "\uA99E"], /* JAVANESE LETTER DDA MAHAPRANA */ + ["\uA99F", "\uA99F"], /* JAVANESE LETTER NA MURDA */ + ["\uA9A0", "\uA9A0"], /* JAVANESE LETTER TA */ + ["\uA9A1", "\uA9A1"], /* JAVANESE LETTER TA MURDA */ + ["\uA9A2", "\uA9A2"], /* JAVANESE LETTER DA */ + ["\uA9A3", "\uA9A3"], /* JAVANESE LETTER DA MAHAPRANA */ + ["\uA9A4", "\uA9A4"], /* JAVANESE LETTER NA */ + ["\uA9A5", "\uA9A5"], /* JAVANESE LETTER PA */ + ["\uA9A6", "\uA9A6"], /* JAVANESE LETTER PA MURDA */ + ["\uA9A7", "\uA9A7"], /* JAVANESE LETTER BA */ + ["\uA9A8", "\uA9A8"], /* JAVANESE LETTER BA MURDA */ + ["\uA9A9", "\uA9A9"], /* JAVANESE LETTER MA */ + ["\uA9AA", "\uA9AA"], /* JAVANESE LETTER YA */ + ["\uA9AB", "\uA9AB"], /* JAVANESE LETTER RA */ + ["\uA9AC", "\uA9AC"], /* JAVANESE LETTER RA AGUNG */ + ["\uA9AD", "\uA9AD"], /* JAVANESE LETTER LA */ + ["\uA9AE", "\uA9AE"], /* JAVANESE LETTER WA */ + ["\uA9AF", "\uA9AF"], /* JAVANESE LETTER SA MURDA */ + ["\uA9B0", "\uA9B0"], /* JAVANESE LETTER SA MAHAPRANA */ + ["\uA9B1", "\uA9B1"], /* JAVANESE LETTER SA */ + ["\uA9B2", "\uA9B2"], /* JAVANESE LETTER HA */ + ["\uA9B3", "\uA9B3"], /* JAVANESE SIGN CECAK TELU */ + ["\uA9B4", "\uA9B4"], /* JAVANESE VOWEL SIGN TARUNG */ + ["\uA9B5", "\uA9B5"], /* JAVANESE VOWEL SIGN TOLONG */ + ["\uA9B6", "\uA9B6"], /* JAVANESE VOWEL SIGN WULU */ + ["\uA9B7", "\uA9B7"], /* JAVANESE VOWEL SIGN WULU MELIK */ + ["\uA9B8", "\uA9B8"], /* JAVANESE VOWEL SIGN SUKU */ + ["\uA9B9", "\uA9B9"], /* JAVANESE VOWEL SIGN SUKU MENDUT */ + ["\uA9BA", "\uA9BA"], /* JAVANESE VOWEL SIGN TALING */ + ["\uA9BB", "\uA9BB"], /* JAVANESE VOWEL SIGN DIRGA MURE */ + ["\uA9BC", "\uA9BC"], /* JAVANESE VOWEL SIGN PEPET */ + ["\uA9BD", "\uA9BD"], /* JAVANESE CONSONANT SIGN KERET */ + ["\uA9BE", "\uA9BE"], /* JAVANESE CONSONANT SIGN PENGKAL */ + ["\uA9BF", "\uA9BF"], /* JAVANESE CONSONANT SIGN CAKRA */ + ["\uA9C0", "\uA9C0"], /* JAVANESE PANGKON */ + ["\uA9C1", "\uA9C1"], /* JAVANESE LEFT RERENGGAN */ + ["\uA9C2", "\uA9C2"], /* JAVANESE RIGHT RERENGGAN */ + ["\uA9C3", "\uA9C3"], /* JAVANESE PADA ANDAP */ + ["\uA9C4", "\uA9C4"], /* JAVANESE PADA MADYA */ + ["\uA9C5", "\uA9C5"], /* JAVANESE PADA LUHUR */ + ["\uA9C6", "\uA9C6"], /* JAVANESE PADA WINDU */ + ["\uA9C7", "\uA9C7"], /* JAVANESE PADA PANGKAT */ + ["\uA9C8", "\uA9C8"], /* JAVANESE PADA LINGSA */ + ["\uA9C9", "\uA9C9"], /* JAVANESE PADA LUNGSI */ + ["\uA9CA", "\uA9CA"], /* JAVANESE PADA ADEG */ + ["\uA9CB", "\uA9CB"], /* JAVANESE PADA ADEG ADEG */ + ["\uA9CC", "\uA9CC"], /* JAVANESE PADA PISELEH */ + ["\uA9CD", "\uA9CD"], /* JAVANESE TURNED PADA PISELEH */ + ["\uA9CE", "\uA9CE"], + ["\uA9CF", "\uA9CF"], /* JAVANESE PANGRANGKEP */ + ["\uA9D0", "\uA9D0"], /* JAVANESE DIGIT ZERO */ + ["\uA9D1", "\uA9D1"], /* JAVANESE DIGIT ONE */ + ["\uA9D2", "\uA9D2"], /* JAVANESE DIGIT TWO */ + ["\uA9D3", "\uA9D3"], /* JAVANESE DIGIT THREE */ + ["\uA9D4", "\uA9D4"], /* JAVANESE DIGIT FOUR */ + ["\uA9D5", "\uA9D5"], /* JAVANESE DIGIT FIVE */ + ["\uA9D6", "\uA9D6"], /* JAVANESE DIGIT SIX */ + ["\uA9D7", "\uA9D7"], /* JAVANESE DIGIT SEVEN */ + ["\uA9D8", "\uA9D8"], /* JAVANESE DIGIT EIGHT */ + ["\uA9D9", "\uA9D9"], /* JAVANESE DIGIT NINE */ + ["\uA9DA", "\uA9DA"], + ["\uA9DB", "\uA9DB"], + ["\uA9DC", "\uA9DC"], + ["\uA9DD", "\uA9DD"], + ["\uA9DE", "\uA9DE"], /* JAVANESE PADA TIRTA TUMETES */ + ["\uA9DF", "\uA9DF"], /* JAVANESE PADA ISEN-ISEN */ + ["\uA9E0", "\uA9E0"], /* MYANMAR LETTER SHAN GHA */ + ["\uA9E1", "\uA9E1"], /* MYANMAR LETTER SHAN CHA */ + ["\uA9E2", "\uA9E2"], /* MYANMAR LETTER SHAN JHA */ + ["\uA9E3", "\uA9E3"], /* MYANMAR LETTER SHAN NNA */ + ["\uA9E4", "\uA9E4"], /* MYANMAR LETTER SHAN BHA */ + ["\uA9E5", "\uA9E5"], /* MYANMAR SIGN SHAN SAW */ + ["\uA9E6", "\uA9E6"], /* MYANMAR MODIFIER LETTER SHAN REDUPLICATION */ + ["\uA9E7", "\uA9E7"], /* MYANMAR LETTER TAI LAING NYA */ + ["\uA9E8", "\uA9E8"], /* MYANMAR LETTER TAI LAING FA */ + ["\uA9E9", "\uA9E9"], /* MYANMAR LETTER TAI LAING GA */ + ["\uA9EA", "\uA9EA"], /* MYANMAR LETTER TAI LAING GHA */ + ["\uA9EB", "\uA9EB"], /* MYANMAR LETTER TAI LAING JA */ + ["\uA9EC", "\uA9EC"], /* MYANMAR LETTER TAI LAING JHA */ + ["\uA9ED", "\uA9ED"], /* MYANMAR LETTER TAI LAING DDA */ + ["\uA9EE", "\uA9EE"], /* MYANMAR LETTER TAI LAING DDHA */ + ["\uA9EF", "\uA9EF"], /* MYANMAR LETTER TAI LAING NNA */ + ["\uA9F0", "\uA9F0"], /* MYANMAR TAI LAING DIGIT ZERO */ + ["\uA9F1", "\uA9F1"], /* MYANMAR TAI LAING DIGIT ONE */ + ["\uA9F2", "\uA9F2"], /* MYANMAR TAI LAING DIGIT TWO */ + ["\uA9F3", "\uA9F3"], /* MYANMAR TAI LAING DIGIT THREE */ + ["\uA9F4", "\uA9F4"], /* MYANMAR TAI LAING DIGIT FOUR */ + ["\uA9F5", "\uA9F5"], /* MYANMAR TAI LAING DIGIT FIVE */ + ["\uA9F6", "\uA9F6"], /* MYANMAR TAI LAING DIGIT SIX */ + ["\uA9F7", "\uA9F7"], /* MYANMAR TAI LAING DIGIT SEVEN */ + ["\uA9F8", "\uA9F8"], /* MYANMAR TAI LAING DIGIT EIGHT */ + ["\uA9F9", "\uA9F9"], /* MYANMAR TAI LAING DIGIT NINE */ + ["\uA9FA", "\uA9FA"], /* MYANMAR LETTER TAI LAING LLA */ + ["\uA9FB", "\uA9FB"], /* MYANMAR LETTER TAI LAING DA */ + ["\uA9FC", "\uA9FC"], /* MYANMAR LETTER TAI LAING DHA */ + ["\uA9FD", "\uA9FD"], /* MYANMAR LETTER TAI LAING BA */ + ["\uA9FE", "\uA9FE"], /* MYANMAR LETTER TAI LAING BHA */ + ["\uA9FF", "\uA9FF"], + ["\uAA00", "\uAA00"], /* CHAM LETTER A */ + ["\uAA01", "\uAA01"], /* CHAM LETTER I */ + ["\uAA02", "\uAA02"], /* CHAM LETTER U */ + ["\uAA03", "\uAA03"], /* CHAM LETTER E */ + ["\uAA04", "\uAA04"], /* CHAM LETTER AI */ + ["\uAA05", "\uAA05"], /* CHAM LETTER O */ + ["\uAA06", "\uAA06"], /* CHAM LETTER KA */ + ["\uAA07", "\uAA07"], /* CHAM LETTER KHA */ + ["\uAA08", "\uAA08"], /* CHAM LETTER GA */ + ["\uAA09", "\uAA09"], /* CHAM LETTER GHA */ + ["\uAA0A", "\uAA0A"], /* CHAM LETTER NGUE */ + ["\uAA0B", "\uAA0B"], /* CHAM LETTER NGA */ + ["\uAA0C", "\uAA0C"], /* CHAM LETTER CHA */ + ["\uAA0D", "\uAA0D"], /* CHAM LETTER CHHA */ + ["\uAA0E", "\uAA0E"], /* CHAM LETTER JA */ + ["\uAA0F", "\uAA0F"], /* CHAM LETTER JHA */ + ["\uAA10", "\uAA10"], /* CHAM LETTER NHUE */ + ["\uAA11", "\uAA11"], /* CHAM LETTER NHA */ + ["\uAA12", "\uAA12"], /* CHAM LETTER NHJA */ + ["\uAA13", "\uAA13"], /* CHAM LETTER TA */ + ["\uAA14", "\uAA14"], /* CHAM LETTER THA */ + ["\uAA15", "\uAA15"], /* CHAM LETTER DA */ + ["\uAA16", "\uAA16"], /* CHAM LETTER DHA */ + ["\uAA17", "\uAA17"], /* CHAM LETTER NUE */ + ["\uAA18", "\uAA18"], /* CHAM LETTER NA */ + ["\uAA19", "\uAA19"], /* CHAM LETTER DDA */ + ["\uAA1A", "\uAA1A"], /* CHAM LETTER PA */ + ["\uAA1B", "\uAA1B"], /* CHAM LETTER PPA */ + ["\uAA1C", "\uAA1C"], /* CHAM LETTER PHA */ + ["\uAA1D", "\uAA1D"], /* CHAM LETTER BA */ + ["\uAA1E", "\uAA1E"], /* CHAM LETTER BHA */ + ["\uAA1F", "\uAA1F"], /* CHAM LETTER MUE */ + ["\uAA20", "\uAA20"], /* CHAM LETTER MA */ + ["\uAA21", "\uAA21"], /* CHAM LETTER BBA */ + ["\uAA22", "\uAA22"], /* CHAM LETTER YA */ + ["\uAA23", "\uAA23"], /* CHAM LETTER RA */ + ["\uAA24", "\uAA24"], /* CHAM LETTER LA */ + ["\uAA25", "\uAA25"], /* CHAM LETTER VA */ + ["\uAA26", "\uAA26"], /* CHAM LETTER SSA */ + ["\uAA27", "\uAA27"], /* CHAM LETTER SA */ + ["\uAA28", "\uAA28"], /* CHAM LETTER HA */ + ["\uAA29", "\uAA29"], /* CHAM VOWEL SIGN AA */ + ["\uAA2A", "\uAA2A"], /* CHAM VOWEL SIGN I */ + ["\uAA2B", "\uAA2B"], /* CHAM VOWEL SIGN II */ + ["\uAA2C", "\uAA2C"], /* CHAM VOWEL SIGN EI */ + ["\uAA2D", "\uAA2D"], /* CHAM VOWEL SIGN U */ + ["\uAA2E", "\uAA2E"], /* CHAM VOWEL SIGN OE */ + ["\uAA2F", "\uAA2F"], /* CHAM VOWEL SIGN O */ + ["\uAA30", "\uAA30"], /* CHAM VOWEL SIGN AI */ + ["\uAA31", "\uAA31"], /* CHAM VOWEL SIGN AU */ + ["\uAA32", "\uAA32"], /* CHAM VOWEL SIGN UE */ + ["\uAA33", "\uAA33"], /* CHAM CONSONANT SIGN YA */ + ["\uAA34", "\uAA34"], /* CHAM CONSONANT SIGN RA */ + ["\uAA35", "\uAA35"], /* CHAM CONSONANT SIGN LA */ + ["\uAA36", "\uAA36"], /* CHAM CONSONANT SIGN WA */ + ["\uAA37", "\uAA37"], + ["\uAA38", "\uAA38"], + ["\uAA39", "\uAA39"], + ["\uAA3A", "\uAA3A"], + ["\uAA3B", "\uAA3B"], + ["\uAA3C", "\uAA3C"], + ["\uAA3D", "\uAA3D"], + ["\uAA3E", "\uAA3E"], + ["\uAA3F", "\uAA3F"], + ["\uAA40", "\uAA40"], /* CHAM LETTER FINAL K */ + ["\uAA41", "\uAA41"], /* CHAM LETTER FINAL G */ + ["\uAA42", "\uAA42"], /* CHAM LETTER FINAL NG */ + ["\uAA43", "\uAA43"], /* CHAM CONSONANT SIGN FINAL NG */ + ["\uAA44", "\uAA44"], /* CHAM LETTER FINAL CH */ + ["\uAA45", "\uAA45"], /* CHAM LETTER FINAL T */ + ["\uAA46", "\uAA46"], /* CHAM LETTER FINAL N */ + ["\uAA47", "\uAA47"], /* CHAM LETTER FINAL P */ + ["\uAA48", "\uAA48"], /* CHAM LETTER FINAL Y */ + ["\uAA49", "\uAA49"], /* CHAM LETTER FINAL R */ + ["\uAA4A", "\uAA4A"], /* CHAM LETTER FINAL L */ + ["\uAA4B", "\uAA4B"], /* CHAM LETTER FINAL SS */ + ["\uAA4C", "\uAA4C"], /* CHAM CONSONANT SIGN FINAL M */ + ["\uAA4D", "\uAA4D"], /* CHAM CONSONANT SIGN FINAL H */ + ["\uAA4E", "\uAA4E"], + ["\uAA4F", "\uAA4F"], + ["\uAA50", "\uAA50"], /* CHAM DIGIT ZERO */ + ["\uAA51", "\uAA51"], /* CHAM DIGIT ONE */ + ["\uAA52", "\uAA52"], /* CHAM DIGIT TWO */ + ["\uAA53", "\uAA53"], /* CHAM DIGIT THREE */ + ["\uAA54", "\uAA54"], /* CHAM DIGIT FOUR */ + ["\uAA55", "\uAA55"], /* CHAM DIGIT FIVE */ + ["\uAA56", "\uAA56"], /* CHAM DIGIT SIX */ + ["\uAA57", "\uAA57"], /* CHAM DIGIT SEVEN */ + ["\uAA58", "\uAA58"], /* CHAM DIGIT EIGHT */ + ["\uAA59", "\uAA59"], /* CHAM DIGIT NINE */ + ["\uAA5A", "\uAA5A"], + ["\uAA5B", "\uAA5B"], + ["\uAA5C", "\uAA5C"], /* CHAM PUNCTUATION SPIRAL */ + ["\uAA5D", "\uAA5D"], /* CHAM PUNCTUATION DANDA */ + ["\uAA5E", "\uAA5E"], /* CHAM PUNCTUATION DOUBLE DANDA */ + ["\uAA5F", "\uAA5F"], /* CHAM PUNCTUATION TRIPLE DANDA */ + ["\uAA60", "\uAA60"], /* MYANMAR LETTER KHAMTI GA */ + ["\uAA61", "\uAA61"], /* MYANMAR LETTER KHAMTI CA */ + ["\uAA62", "\uAA62"], /* MYANMAR LETTER KHAMTI CHA */ + ["\uAA63", "\uAA63"], /* MYANMAR LETTER KHAMTI JA */ + ["\uAA64", "\uAA64"], /* MYANMAR LETTER KHAMTI JHA */ + ["\uAA65", "\uAA65"], /* MYANMAR LETTER KHAMTI NYA */ + ["\uAA66", "\uAA66"], /* MYANMAR LETTER KHAMTI TTA */ + ["\uAA67", "\uAA67"], /* MYANMAR LETTER KHAMTI TTHA */ + ["\uAA68", "\uAA68"], /* MYANMAR LETTER KHAMTI DDA */ + ["\uAA69", "\uAA69"], /* MYANMAR LETTER KHAMTI DDHA */ + ["\uAA6A", "\uAA6A"], /* MYANMAR LETTER KHAMTI DHA */ + ["\uAA6B", "\uAA6B"], /* MYANMAR LETTER KHAMTI NA */ + ["\uAA6C", "\uAA6C"], /* MYANMAR LETTER KHAMTI SA */ + ["\uAA6D", "\uAA6D"], /* MYANMAR LETTER KHAMTI HA */ + ["\uAA6E", "\uAA6E"], /* MYANMAR LETTER KHAMTI HHA */ + ["\uAA6F", "\uAA6F"], /* MYANMAR LETTER KHAMTI FA */ + ["\uAA70", "\uAA70"], /* MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION */ + ["\uAA71", "\uAA71"], /* MYANMAR LETTER KHAMTI XA */ + ["\uAA72", "\uAA72"], /* MYANMAR LETTER KHAMTI ZA */ + ["\uAA73", "\uAA73"], /* MYANMAR LETTER KHAMTI RA */ + ["\uAA74", "\uAA74"], /* MYANMAR LOGOGRAM KHAMTI OAY */ + ["\uAA75", "\uAA75"], /* MYANMAR LOGOGRAM KHAMTI QN */ + ["\uAA76", "\uAA76"], /* MYANMAR LOGOGRAM KHAMTI HM */ + ["\uAA77", "\uAA77"], /* MYANMAR SYMBOL AITON EXCLAMATION */ + ["\uAA78", "\uAA78"], /* MYANMAR SYMBOL AITON ONE */ + ["\uAA79", "\uAA79"], /* MYANMAR SYMBOL AITON TWO */ + ["\uAA7A", "\uAA7A"], /* MYANMAR LETTER AITON RA */ + ["\uAA7B", "\uAA7B"], /* MYANMAR SIGN PAO KAREN TONE */ + ["\uAA7C", "\uAA7C"], /* MYANMAR SIGN TAI LAING TONE-2 */ + ["\uAA7D", "\uAA7D"], /* MYANMAR SIGN TAI LAING TONE-5 */ + ["\uAA7E", "\uAA7E"], /* MYANMAR LETTER SHWE PALAUNG CHA */ + ["\uAA7F", "\uAA7F"], /* MYANMAR LETTER SHWE PALAUNG SHA */ + ["\uAA80", "\uAA80"], /* TAI VIET LETTER LOW KO */ + ["\uAA81", "\uAA81"], /* TAI VIET LETTER HIGH KO */ + ["\uAA82", "\uAA82"], /* TAI VIET LETTER LOW KHO */ + ["\uAA83", "\uAA83"], /* TAI VIET LETTER HIGH KHO */ + ["\uAA84", "\uAA84"], /* TAI VIET LETTER LOW KHHO */ + ["\uAA85", "\uAA85"], /* TAI VIET LETTER HIGH KHHO */ + ["\uAA86", "\uAA86"], /* TAI VIET LETTER LOW GO */ + ["\uAA87", "\uAA87"], /* TAI VIET LETTER HIGH GO */ + ["\uAA88", "\uAA88"], /* TAI VIET LETTER LOW NGO */ + ["\uAA89", "\uAA89"], /* TAI VIET LETTER HIGH NGO */ + ["\uAA8A", "\uAA8A"], /* TAI VIET LETTER LOW CO */ + ["\uAA8B", "\uAA8B"], /* TAI VIET LETTER HIGH CO */ + ["\uAA8C", "\uAA8C"], /* TAI VIET LETTER LOW CHO */ + ["\uAA8D", "\uAA8D"], /* TAI VIET LETTER HIGH CHO */ + ["\uAA8E", "\uAA8E"], /* TAI VIET LETTER LOW SO */ + ["\uAA8F", "\uAA8F"], /* TAI VIET LETTER HIGH SO */ + ["\uAA90", "\uAA90"], /* TAI VIET LETTER LOW NYO */ + ["\uAA91", "\uAA91"], /* TAI VIET LETTER HIGH NYO */ + ["\uAA92", "\uAA92"], /* TAI VIET LETTER LOW DO */ + ["\uAA93", "\uAA93"], /* TAI VIET LETTER HIGH DO */ + ["\uAA94", "\uAA94"], /* TAI VIET LETTER LOW TO */ + ["\uAA95", "\uAA95"], /* TAI VIET LETTER HIGH TO */ + ["\uAA96", "\uAA96"], /* TAI VIET LETTER LOW THO */ + ["\uAA97", "\uAA97"], /* TAI VIET LETTER HIGH THO */ + ["\uAA98", "\uAA98"], /* TAI VIET LETTER LOW NO */ + ["\uAA99", "\uAA99"], /* TAI VIET LETTER HIGH NO */ + ["\uAA9A", "\uAA9A"], /* TAI VIET LETTER LOW BO */ + ["\uAA9B", "\uAA9B"], /* TAI VIET LETTER HIGH BO */ + ["\uAA9C", "\uAA9C"], /* TAI VIET LETTER LOW PO */ + ["\uAA9D", "\uAA9D"], /* TAI VIET LETTER HIGH PO */ + ["\uAA9E", "\uAA9E"], /* TAI VIET LETTER LOW PHO */ + ["\uAA9F", "\uAA9F"], /* TAI VIET LETTER HIGH PHO */ + ["\uAAA0", "\uAAA0"], /* TAI VIET LETTER LOW FO */ + ["\uAAA1", "\uAAA1"], /* TAI VIET LETTER HIGH FO */ + ["\uAAA2", "\uAAA2"], /* TAI VIET LETTER LOW MO */ + ["\uAAA3", "\uAAA3"], /* TAI VIET LETTER HIGH MO */ + ["\uAAA4", "\uAAA4"], /* TAI VIET LETTER LOW YO */ + ["\uAAA5", "\uAAA5"], /* TAI VIET LETTER HIGH YO */ + ["\uAAA6", "\uAAA6"], /* TAI VIET LETTER LOW RO */ + ["\uAAA7", "\uAAA7"], /* TAI VIET LETTER HIGH RO */ + ["\uAAA8", "\uAAA8"], /* TAI VIET LETTER LOW LO */ + ["\uAAA9", "\uAAA9"], /* TAI VIET LETTER HIGH LO */ + ["\uAAAA", "\uAAAA"], /* TAI VIET LETTER LOW VO */ + ["\uAAAB", "\uAAAB"], /* TAI VIET LETTER HIGH VO */ + ["\uAAAC", "\uAAAC"], /* TAI VIET LETTER LOW HO */ + ["\uAAAD", "\uAAAD"], /* TAI VIET LETTER HIGH HO */ + ["\uAAAE", "\uAAAE"], /* TAI VIET LETTER LOW O */ + ["\uAAAF", "\uAAAF"], /* TAI VIET LETTER HIGH O */ + ["\uAAB0", "\uAAB0"], /* TAI VIET MAI KANG */ + ["\uAAB1", "\uAAB1"], /* TAI VIET VOWEL AA */ + ["\uAAB2", "\uAAB2"], /* TAI VIET VOWEL I */ + ["\uAAB3", "\uAAB3"], /* TAI VIET VOWEL UE */ + ["\uAAB4", "\uAAB4"], /* TAI VIET VOWEL U */ + ["\uAAB5", "\uAAB5"], /* TAI VIET VOWEL E */ + ["\uAAB6", "\uAAB6"], /* TAI VIET VOWEL O */ + ["\uAAB7", "\uAAB7"], /* TAI VIET MAI KHIT */ + ["\uAAB8", "\uAAB8"], /* TAI VIET VOWEL IA */ + ["\uAAB9", "\uAAB9"], /* TAI VIET VOWEL UEA */ + ["\uAABA", "\uAABA"], /* TAI VIET VOWEL UA */ + ["\uAABB", "\uAABB"], /* TAI VIET VOWEL AUE */ + ["\uAABC", "\uAABC"], /* TAI VIET VOWEL AY */ + ["\uAABD", "\uAABD"], /* TAI VIET VOWEL AN */ + ["\uAABE", "\uAABE"], /* TAI VIET VOWEL AM */ + ["\uAABF", "\uAABF"], /* TAI VIET TONE MAI EK */ + ["\uAAC0", "\uAAC0"], /* TAI VIET TONE MAI NUENG */ + ["\uAAC1", "\uAAC1"], /* TAI VIET TONE MAI THO */ + ["\uAAC2", "\uAAC2"], /* TAI VIET TONE MAI SONG */ + ["\uAAC3", "\uAAC3"], + ["\uAAC4", "\uAAC4"], + ["\uAAC5", "\uAAC5"], + ["\uAAC6", "\uAAC6"], + ["\uAAC7", "\uAAC7"], + ["\uAAC8", "\uAAC8"], + ["\uAAC9", "\uAAC9"], + ["\uAACA", "\uAACA"], + ["\uAACB", "\uAACB"], + ["\uAACC", "\uAACC"], + ["\uAACD", "\uAACD"], + ["\uAACE", "\uAACE"], + ["\uAACF", "\uAACF"], + ["\uAAD0", "\uAAD0"], + ["\uAAD1", "\uAAD1"], + ["\uAAD2", "\uAAD2"], + ["\uAAD3", "\uAAD3"], + ["\uAAD4", "\uAAD4"], + ["\uAAD5", "\uAAD5"], + ["\uAAD6", "\uAAD6"], + ["\uAAD7", "\uAAD7"], + ["\uAAD8", "\uAAD8"], + ["\uAAD9", "\uAAD9"], + ["\uAADA", "\uAADA"], + ["\uAADB", "\uAADB"], /* TAI VIET SYMBOL KON */ + ["\uAADC", "\uAADC"], /* TAI VIET SYMBOL NUENG */ + ["\uAADD", "\uAADD"], /* TAI VIET SYMBOL SAM */ + ["\uAADE", "\uAADE"], /* TAI VIET SYMBOL HO HOI */ + ["\uAADF", "\uAADF"], /* TAI VIET SYMBOL KOI KOI */ + ["\uAAE0", "\uAAE0"], /* MEETEI MAYEK LETTER E */ + ["\uAAE1", "\uAAE1"], /* MEETEI MAYEK LETTER O */ + ["\uAAE2", "\uAAE2"], /* MEETEI MAYEK LETTER CHA */ + ["\uAAE3", "\uAAE3"], /* MEETEI MAYEK LETTER NYA */ + ["\uAAE4", "\uAAE4"], /* MEETEI MAYEK LETTER TTA */ + ["\uAAE5", "\uAAE5"], /* MEETEI MAYEK LETTER TTHA */ + ["\uAAE6", "\uAAE6"], /* MEETEI MAYEK LETTER DDA */ + ["\uAAE7", "\uAAE7"], /* MEETEI MAYEK LETTER DDHA */ + ["\uAAE8", "\uAAE8"], /* MEETEI MAYEK LETTER NNA */ + ["\uAAE9", "\uAAE9"], /* MEETEI MAYEK LETTER SHA */ + ["\uAAEA", "\uAAEA"], /* MEETEI MAYEK LETTER SSA */ + ["\uAAEB", "\uAAEB"], /* MEETEI MAYEK VOWEL SIGN II */ + ["\uAAEC", "\uAAEC"], /* MEETEI MAYEK VOWEL SIGN UU */ + ["\uAAED", "\uAAED"], /* MEETEI MAYEK VOWEL SIGN AAI */ + ["\uAAEE", "\uAAEE"], /* MEETEI MAYEK VOWEL SIGN AU */ + ["\uAAEF", "\uAAEF"], /* MEETEI MAYEK VOWEL SIGN AAU */ + ["\uAAF0", "\uAAF0"], /* MEETEI MAYEK CHEIKHAN */ + ["\uAAF1", "\uAAF1"], /* MEETEI MAYEK AHANG KHUDAM */ + ["\uAAF2", "\uAAF2"], /* MEETEI MAYEK ANJI */ + ["\uAAF3", "\uAAF3"], /* MEETEI MAYEK SYLLABLE REPETITION MARK */ + ["\uAAF4", "\uAAF4"], /* MEETEI MAYEK WORD REPETITION MARK */ + ["\uAAF5", "\uAAF5"], /* MEETEI MAYEK VOWEL SIGN VISARGA */ + ["\uAAF6", "\uAAF6"], /* MEETEI MAYEK VIRAMA */ + ["\uAAF7", "\uAAF7"], + ["\uAAF8", "\uAAF8"], + ["\uAAF9", "\uAAF9"], + ["\uAAFA", "\uAAFA"], + ["\uAAFB", "\uAAFB"], + ["\uAAFC", "\uAAFC"], + ["\uAAFD", "\uAAFD"], + ["\uAAFE", "\uAAFE"], + ["\uAAFF", "\uAAFF"], + ["\uAB00", "\uAB00"], + ["\uAB01", "\uAB01"], /* ETHIOPIC SYLLABLE TTHU */ + ["\uAB02", "\uAB02"], /* ETHIOPIC SYLLABLE TTHI */ + ["\uAB03", "\uAB03"], /* ETHIOPIC SYLLABLE TTHAA */ + ["\uAB04", "\uAB04"], /* ETHIOPIC SYLLABLE TTHEE */ + ["\uAB05", "\uAB05"], /* ETHIOPIC SYLLABLE TTHE */ + ["\uAB06", "\uAB06"], /* ETHIOPIC SYLLABLE TTHO */ + ["\uAB07", "\uAB07"], + ["\uAB08", "\uAB08"], + ["\uAB09", "\uAB09"], /* ETHIOPIC SYLLABLE DDHU */ + ["\uAB0A", "\uAB0A"], /* ETHIOPIC SYLLABLE DDHI */ + ["\uAB0B", "\uAB0B"], /* ETHIOPIC SYLLABLE DDHAA */ + ["\uAB0C", "\uAB0C"], /* ETHIOPIC SYLLABLE DDHEE */ + ["\uAB0D", "\uAB0D"], /* ETHIOPIC SYLLABLE DDHE */ + ["\uAB0E", "\uAB0E"], /* ETHIOPIC SYLLABLE DDHO */ + ["\uAB0F", "\uAB0F"], + ["\uAB10", "\uAB10"], + ["\uAB11", "\uAB11"], /* ETHIOPIC SYLLABLE DZU */ + ["\uAB12", "\uAB12"], /* ETHIOPIC SYLLABLE DZI */ + ["\uAB13", "\uAB13"], /* ETHIOPIC SYLLABLE DZAA */ + ["\uAB14", "\uAB14"], /* ETHIOPIC SYLLABLE DZEE */ + ["\uAB15", "\uAB15"], /* ETHIOPIC SYLLABLE DZE */ + ["\uAB16", "\uAB16"], /* ETHIOPIC SYLLABLE DZO */ + ["\uAB17", "\uAB17"], + ["\uAB18", "\uAB18"], + ["\uAB19", "\uAB19"], + ["\uAB1A", "\uAB1A"], + ["\uAB1B", "\uAB1B"], + ["\uAB1C", "\uAB1C"], + ["\uAB1D", "\uAB1D"], + ["\uAB1E", "\uAB1E"], + ["\uAB1F", "\uAB1F"], + ["\uAB20", "\uAB20"], /* ETHIOPIC SYLLABLE CCHHA */ + ["\uAB21", "\uAB21"], /* ETHIOPIC SYLLABLE CCHHU */ + ["\uAB22", "\uAB22"], /* ETHIOPIC SYLLABLE CCHHI */ + ["\uAB23", "\uAB23"], /* ETHIOPIC SYLLABLE CCHHAA */ + ["\uAB24", "\uAB24"], /* ETHIOPIC SYLLABLE CCHHEE */ + ["\uAB25", "\uAB25"], /* ETHIOPIC SYLLABLE CCHHE */ + ["\uAB26", "\uAB26"], /* ETHIOPIC SYLLABLE CCHHO */ + ["\uAB27", "\uAB27"], + ["\uAB28", "\uAB28"], /* ETHIOPIC SYLLABLE BBA */ + ["\uAB29", "\uAB29"], /* ETHIOPIC SYLLABLE BBU */ + ["\uAB2A", "\uAB2A"], /* ETHIOPIC SYLLABLE BBI */ + ["\uAB2B", "\uAB2B"], /* ETHIOPIC SYLLABLE BBAA */ + ["\uAB2C", "\uAB2C"], /* ETHIOPIC SYLLABLE BBEE */ + ["\uAB2D", "\uAB2D"], /* ETHIOPIC SYLLABLE BBE */ + ["\uAB2E", "\uAB2E"], /* ETHIOPIC SYLLABLE BBO */ + ["\uAB2F", "\uAB2F"], + ["\uAB30", "\uAB30"], /* LATIN SMALL LETTER BARRED ALPHA */ + ["\uAB31", "\uAB31"], /* LATIN SMALL LETTER A REVERSED-SCHWA */ + ["\uAB32", "\uAB32"], /* LATIN SMALL LETTER BLACKLETTER E */ + ["\uAB33", "\uAB33"], /* LATIN SMALL LETTER BARRED E */ + ["\uAB34", "\uAB34"], /* LATIN SMALL LETTER E WITH FLOURISH */ + ["\uAB35", "\uAB35"], /* LATIN SMALL LETTER LENIS F */ + ["\uAB36", "\uAB36"], /* LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL */ + ["\uAB37", "\uAB37"], /* LATIN SMALL LETTER L WITH INVERTED LAZY S */ + ["\uAB38", "\uAB38"], /* LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE */ + ["\uAB39", "\uAB39"], /* LATIN SMALL LETTER L WITH MIDDLE RING */ + ["\uAB3A", "\uAB3A"], /* LATIN SMALL LETTER M WITH CROSSED-TAIL */ + ["\uAB3B", "\uAB3B"], /* LATIN SMALL LETTER N WITH CROSSED-TAIL */ + ["\uAB3C", "\uAB3C"], /* LATIN SMALL LETTER ENG WITH CROSSED-TAIL */ + ["\uAB3D", "\uAB3D"], /* LATIN SMALL LETTER BLACKLETTER O */ + ["\uAB3E", "\uAB3E"], /* LATIN SMALL LETTER BLACKLETTER O WITH STROKE */ + ["\uAB3F", "\uAB3F"], /* LATIN SMALL LETTER OPEN O WITH STROKE */ + ["\uAB40", "\uAB40"], /* LATIN SMALL LETTER INVERTED OE */ + ["\uAB41", "\uAB41"], /* LATIN SMALL LETTER TURNED OE WITH STROKE */ + ["\uAB42", "\uAB42"], /* LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE */ + ["\uAB43", "\uAB43"], /* LATIN SMALL LETTER TURNED O OPEN-O */ + ["\uAB44", "\uAB44"], /* LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE */ + ["\uAB45", "\uAB45"], /* LATIN SMALL LETTER STIRRUP R */ + ["\uAB46", "\uAB46"], /* LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG */ + ["\uAB47", "\uAB47"], /* LATIN SMALL LETTER R WITHOUT HANDLE */ + ["\uAB48", "\uAB48"], /* LATIN SMALL LETTER DOUBLE R */ + ["\uAB49", "\uAB49"], /* LATIN SMALL LETTER R WITH CROSSED-TAIL */ + ["\uAB4A", "\uAB4A"], /* LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL */ + ["\uAB4B", "\uAB4B"], /* LATIN SMALL LETTER SCRIPT R */ + ["\uAB4C", "\uAB4C"], /* LATIN SMALL LETTER SCRIPT R WITH RING */ + ["\uAB4D", "\uAB4D"], /* LATIN SMALL LETTER BASELINE ESH */ + ["\uAB4E", "\uAB4E"], /* LATIN SMALL LETTER U WITH SHORT RIGHT LEG */ + ["\uAB4F", "\uAB4F"], /* LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG */ + ["\uAB50", "\uAB50"], /* LATIN SMALL LETTER UI */ + ["\uAB51", "\uAB51"], /* LATIN SMALL LETTER TURNED UI */ + ["\uAB52", "\uAB52"], /* LATIN SMALL LETTER U WITH LEFT HOOK */ + ["\uA7B3", "\uAB53"], /* LATIN SMALL LETTER CHI */ + ["\uAB54", "\uAB54"], /* LATIN SMALL LETTER CHI WITH LOW RIGHT RING */ + ["\uAB55", "\uAB55"], /* LATIN SMALL LETTER CHI WITH LOW LEFT SERIF */ + ["\uAB56", "\uAB56"], /* LATIN SMALL LETTER X WITH LOW RIGHT RING */ + ["\uAB57", "\uAB57"], /* LATIN SMALL LETTER X WITH LONG LEFT LEG */ + ["\uAB58", "\uAB58"], /* LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING */ + ["\uAB59", "\uAB59"], /* LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF */ + ["\uAB5A", "\uAB5A"], /* LATIN SMALL LETTER Y WITH SHORT RIGHT LEG */ + ["\uAB5B", "\uAB5B"], /* MODIFIER BREVE WITH INVERTED BREVE */ + ["\uAB5C", "\uAB5C"], /* MODIFIER LETTER SMALL HENG */ + ["\uAB5D", "\uAB5D"], /* MODIFIER LETTER SMALL L WITH INVERTED LAZY S */ + ["\uAB5E", "\uAB5E"], /* MODIFIER LETTER SMALL L WITH MIDDLE TILDE */ + ["\uAB5F", "\uAB5F"], /* MODIFIER LETTER SMALL U WITH LEFT HOOK */ + ["\uAB60", "\uAB60"], /* LATIN SMALL LETTER SAKHA YAT */ + ["\uAB61", "\uAB61"], /* LATIN SMALL LETTER IOTIFIED E */ + ["\uAB62", "\uAB62"], /* LATIN SMALL LETTER OPEN OE */ + ["\uAB63", "\uAB63"], /* LATIN SMALL LETTER UO */ + ["\uAB64", "\uAB64"], /* LATIN SMALL LETTER INVERTED ALPHA */ + ["\uAB65", "\uAB65"], /* GREEK LETTER SMALL CAPITAL OMEGA */ + ["\uAB66", "\uAB66"], /* LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK */ + ["\uAB67", "\uAB67"], /* LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK */ + ["\uAB68", "\uAB68"], /* LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE */ + ["\uAB69", "\uAB69"], /* MODIFIER LETTER SMALL TURNED W */ + ["\uAB6A", "\uAB6A"], /* MODIFIER LETTER LEFT TACK */ + ["\uAB6B", "\uAB6B"], /* MODIFIER LETTER RIGHT TACK */ + ["\uAB6C", "\uAB6C"], + ["\uAB6D", "\uAB6D"], + ["\uAB6E", "\uAB6E"], + ["\uAB6F", "\uAB6F"], + ["\u13A0", "\uAB70"], /* CHEROKEE SMALL LETTER A */ + ["\u13A1", "\uAB71"], /* CHEROKEE SMALL LETTER E */ + ["\u13A2", "\uAB72"], /* CHEROKEE SMALL LETTER I */ + ["\u13A3", "\uAB73"], /* CHEROKEE SMALL LETTER O */ + ["\u13A4", "\uAB74"], /* CHEROKEE SMALL LETTER U */ + ["\u13A5", "\uAB75"], /* CHEROKEE SMALL LETTER V */ + ["\u13A6", "\uAB76"], /* CHEROKEE SMALL LETTER GA */ + ["\u13A7", "\uAB77"], /* CHEROKEE SMALL LETTER KA */ + ["\u13A8", "\uAB78"], /* CHEROKEE SMALL LETTER GE */ + ["\u13A9", "\uAB79"], /* CHEROKEE SMALL LETTER GI */ + ["\u13AA", "\uAB7A"], /* CHEROKEE SMALL LETTER GO */ + ["\u13AB", "\uAB7B"], /* CHEROKEE SMALL LETTER GU */ + ["\u13AC", "\uAB7C"], /* CHEROKEE SMALL LETTER GV */ + ["\u13AD", "\uAB7D"], /* CHEROKEE SMALL LETTER HA */ + ["\u13AE", "\uAB7E"], /* CHEROKEE SMALL LETTER HE */ + ["\u13AF", "\uAB7F"], /* CHEROKEE SMALL LETTER HI */ + ["\u13B0", "\uAB80"], /* CHEROKEE SMALL LETTER HO */ + ["\u13B1", "\uAB81"], /* CHEROKEE SMALL LETTER HU */ + ["\u13B2", "\uAB82"], /* CHEROKEE SMALL LETTER HV */ + ["\u13B3", "\uAB83"], /* CHEROKEE SMALL LETTER LA */ + ["\u13B4", "\uAB84"], /* CHEROKEE SMALL LETTER LE */ + ["\u13B5", "\uAB85"], /* CHEROKEE SMALL LETTER LI */ + ["\u13B6", "\uAB86"], /* CHEROKEE SMALL LETTER LO */ + ["\u13B7", "\uAB87"], /* CHEROKEE SMALL LETTER LU */ + ["\u13B8", "\uAB88"], /* CHEROKEE SMALL LETTER LV */ + ["\u13B9", "\uAB89"], /* CHEROKEE SMALL LETTER MA */ + ["\u13BA", "\uAB8A"], /* CHEROKEE SMALL LETTER ME */ + ["\u13BB", "\uAB8B"], /* CHEROKEE SMALL LETTER MI */ + ["\u13BC", "\uAB8C"], /* CHEROKEE SMALL LETTER MO */ + ["\u13BD", "\uAB8D"], /* CHEROKEE SMALL LETTER MU */ + ["\u13BE", "\uAB8E"], /* CHEROKEE SMALL LETTER NA */ + ["\u13BF", "\uAB8F"], /* CHEROKEE SMALL LETTER HNA */ + ["\u13C0", "\uAB90"], /* CHEROKEE SMALL LETTER NAH */ + ["\u13C1", "\uAB91"], /* CHEROKEE SMALL LETTER NE */ + ["\u13C2", "\uAB92"], /* CHEROKEE SMALL LETTER NI */ + ["\u13C3", "\uAB93"], /* CHEROKEE SMALL LETTER NO */ + ["\u13C4", "\uAB94"], /* CHEROKEE SMALL LETTER NU */ + ["\u13C5", "\uAB95"], /* CHEROKEE SMALL LETTER NV */ + ["\u13C6", "\uAB96"], /* CHEROKEE SMALL LETTER QUA */ + ["\u13C7", "\uAB97"], /* CHEROKEE SMALL LETTER QUE */ + ["\u13C8", "\uAB98"], /* CHEROKEE SMALL LETTER QUI */ + ["\u13C9", "\uAB99"], /* CHEROKEE SMALL LETTER QUO */ + ["\u13CA", "\uAB9A"], /* CHEROKEE SMALL LETTER QUU */ + ["\u13CB", "\uAB9B"], /* CHEROKEE SMALL LETTER QUV */ + ["\u13CC", "\uAB9C"], /* CHEROKEE SMALL LETTER SA */ + ["\u13CD", "\uAB9D"], /* CHEROKEE SMALL LETTER S */ + ["\u13CE", "\uAB9E"], /* CHEROKEE SMALL LETTER SE */ + ["\u13CF", "\uAB9F"], /* CHEROKEE SMALL LETTER SI */ + ["\u13D0", "\uABA0"], /* CHEROKEE SMALL LETTER SO */ + ["\u13D1", "\uABA1"], /* CHEROKEE SMALL LETTER SU */ + ["\u13D2", "\uABA2"], /* CHEROKEE SMALL LETTER SV */ + ["\u13D3", "\uABA3"], /* CHEROKEE SMALL LETTER DA */ + ["\u13D4", "\uABA4"], /* CHEROKEE SMALL LETTER TA */ + ["\u13D5", "\uABA5"], /* CHEROKEE SMALL LETTER DE */ + ["\u13D6", "\uABA6"], /* CHEROKEE SMALL LETTER TE */ + ["\u13D7", "\uABA7"], /* CHEROKEE SMALL LETTER DI */ + ["\u13D8", "\uABA8"], /* CHEROKEE SMALL LETTER TI */ + ["\u13D9", "\uABA9"], /* CHEROKEE SMALL LETTER DO */ + ["\u13DA", "\uABAA"], /* CHEROKEE SMALL LETTER DU */ + ["\u13DB", "\uABAB"], /* CHEROKEE SMALL LETTER DV */ + ["\u13DC", "\uABAC"], /* CHEROKEE SMALL LETTER DLA */ + ["\u13DD", "\uABAD"], /* CHEROKEE SMALL LETTER TLA */ + ["\u13DE", "\uABAE"], /* CHEROKEE SMALL LETTER TLE */ + ["\u13DF", "\uABAF"], /* CHEROKEE SMALL LETTER TLI */ + ["\u13E0", "\uABB0"], /* CHEROKEE SMALL LETTER TLO */ + ["\u13E1", "\uABB1"], /* CHEROKEE SMALL LETTER TLU */ + ["\u13E2", "\uABB2"], /* CHEROKEE SMALL LETTER TLV */ + ["\u13E3", "\uABB3"], /* CHEROKEE SMALL LETTER TSA */ + ["\u13E4", "\uABB4"], /* CHEROKEE SMALL LETTER TSE */ + ["\u13E5", "\uABB5"], /* CHEROKEE SMALL LETTER TSI */ + ["\u13E6", "\uABB6"], /* CHEROKEE SMALL LETTER TSO */ + ["\u13E7", "\uABB7"], /* CHEROKEE SMALL LETTER TSU */ + ["\u13E8", "\uABB8"], /* CHEROKEE SMALL LETTER TSV */ + ["\u13E9", "\uABB9"], /* CHEROKEE SMALL LETTER WA */ + ["\u13EA", "\uABBA"], /* CHEROKEE SMALL LETTER WE */ + ["\u13EB", "\uABBB"], /* CHEROKEE SMALL LETTER WI */ + ["\u13EC", "\uABBC"], /* CHEROKEE SMALL LETTER WO */ + ["\u13ED", "\uABBD"], /* CHEROKEE SMALL LETTER WU */ + ["\u13EE", "\uABBE"], /* CHEROKEE SMALL LETTER WV */ + ["\u13EF", "\uABBF"], /* CHEROKEE SMALL LETTER YA */ + ["\uABC0", "\uABC0"], /* MEETEI MAYEK LETTER KOK */ + ["\uABC1", "\uABC1"], /* MEETEI MAYEK LETTER SAM */ + ["\uABC2", "\uABC2"], /* MEETEI MAYEK LETTER LAI */ + ["\uABC3", "\uABC3"], /* MEETEI MAYEK LETTER MIT */ + ["\uABC4", "\uABC4"], /* MEETEI MAYEK LETTER PA */ + ["\uABC5", "\uABC5"], /* MEETEI MAYEK LETTER NA */ + ["\uABC6", "\uABC6"], /* MEETEI MAYEK LETTER CHIL */ + ["\uABC7", "\uABC7"], /* MEETEI MAYEK LETTER TIL */ + ["\uABC8", "\uABC8"], /* MEETEI MAYEK LETTER KHOU */ + ["\uABC9", "\uABC9"], /* MEETEI MAYEK LETTER NGOU */ + ["\uABCA", "\uABCA"], /* MEETEI MAYEK LETTER THOU */ + ["\uABCB", "\uABCB"], /* MEETEI MAYEK LETTER WAI */ + ["\uABCC", "\uABCC"], /* MEETEI MAYEK LETTER YANG */ + ["\uABCD", "\uABCD"], /* MEETEI MAYEK LETTER HUK */ + ["\uABCE", "\uABCE"], /* MEETEI MAYEK LETTER UN */ + ["\uABCF", "\uABCF"], /* MEETEI MAYEK LETTER I */ + ["\uABD0", "\uABD0"], /* MEETEI MAYEK LETTER PHAM */ + ["\uABD1", "\uABD1"], /* MEETEI MAYEK LETTER ATIYA */ + ["\uABD2", "\uABD2"], /* MEETEI MAYEK LETTER GOK */ + ["\uABD3", "\uABD3"], /* MEETEI MAYEK LETTER JHAM */ + ["\uABD4", "\uABD4"], /* MEETEI MAYEK LETTER RAI */ + ["\uABD5", "\uABD5"], /* MEETEI MAYEK LETTER BA */ + ["\uABD6", "\uABD6"], /* MEETEI MAYEK LETTER JIL */ + ["\uABD7", "\uABD7"], /* MEETEI MAYEK LETTER DIL */ + ["\uABD8", "\uABD8"], /* MEETEI MAYEK LETTER GHOU */ + ["\uABD9", "\uABD9"], /* MEETEI MAYEK LETTER DHOU */ + ["\uABDA", "\uABDA"], /* MEETEI MAYEK LETTER BHAM */ + ["\uABDB", "\uABDB"], /* MEETEI MAYEK LETTER KOK LONSUM */ + ["\uABDC", "\uABDC"], /* MEETEI MAYEK LETTER LAI LONSUM */ + ["\uABDD", "\uABDD"], /* MEETEI MAYEK LETTER MIT LONSUM */ + ["\uABDE", "\uABDE"], /* MEETEI MAYEK LETTER PA LONSUM */ + ["\uABDF", "\uABDF"], /* MEETEI MAYEK LETTER NA LONSUM */ + ["\uABE0", "\uABE0"], /* MEETEI MAYEK LETTER TIL LONSUM */ + ["\uABE1", "\uABE1"], /* MEETEI MAYEK LETTER NGOU LONSUM */ + ["\uABE2", "\uABE2"], /* MEETEI MAYEK LETTER I LONSUM */ + ["\uABE3", "\uABE3"], /* MEETEI MAYEK VOWEL SIGN ONAP */ + ["\uABE4", "\uABE4"], /* MEETEI MAYEK VOWEL SIGN INAP */ + ["\uABE5", "\uABE5"], /* MEETEI MAYEK VOWEL SIGN ANAP */ + ["\uABE6", "\uABE6"], /* MEETEI MAYEK VOWEL SIGN YENAP */ + ["\uABE7", "\uABE7"], /* MEETEI MAYEK VOWEL SIGN SOUNAP */ + ["\uABE8", "\uABE8"], /* MEETEI MAYEK VOWEL SIGN UNAP */ + ["\uABE9", "\uABE9"], /* MEETEI MAYEK VOWEL SIGN CHEINAP */ + ["\uABEA", "\uABEA"], /* MEETEI MAYEK VOWEL SIGN NUNG */ + ["\uABEB", "\uABEB"], /* MEETEI MAYEK CHEIKHEI */ + ["\uABEC", "\uABEC"], /* MEETEI MAYEK LUM IYEK */ + ["\uABED", "\uABED"], /* MEETEI MAYEK APUN IYEK */ + ["\uABEE", "\uABEE"], + ["\uABEF", "\uABEF"], + ["\uABF0", "\uABF0"], /* MEETEI MAYEK DIGIT ZERO */ + ["\uABF1", "\uABF1"], /* MEETEI MAYEK DIGIT ONE */ + ["\uABF2", "\uABF2"], /* MEETEI MAYEK DIGIT TWO */ + ["\uABF3", "\uABF3"], /* MEETEI MAYEK DIGIT THREE */ + ["\uABF4", "\uABF4"], /* MEETEI MAYEK DIGIT FOUR */ + ["\uABF5", "\uABF5"], /* MEETEI MAYEK DIGIT FIVE */ + ["\uABF6", "\uABF6"], /* MEETEI MAYEK DIGIT SIX */ + ["\uABF7", "\uABF7"], /* MEETEI MAYEK DIGIT SEVEN */ + ["\uABF8", "\uABF8"], /* MEETEI MAYEK DIGIT EIGHT */ + ["\uABF9", "\uABF9"], /* MEETEI MAYEK DIGIT NINE */ + ["\uABFA", "\uABFA"], + ["\uABFB", "\uABFB"], + ["\uABFC", "\uABFC"], + ["\uABFD", "\uABFD"], + ["\uABFE", "\uABFE"], + ["\uABFF", "\uABFF"], + ["\uAC00", "\uAC00"], /* Hangul Syllable */ + ["\uAC01", "\uAC01"], /* Hangul Syllable */ + ["\uAC02", "\uAC02"], /* Hangul Syllable */ + ["\uAC03", "\uAC03"], /* Hangul Syllable */ + ["\uAC04", "\uAC04"], /* Hangul Syllable */ + ["\uAC05", "\uAC05"], /* Hangul Syllable */ + ["\uAC06", "\uAC06"], /* Hangul Syllable */ + ["\uAC07", "\uAC07"], /* Hangul Syllable */ + ["\uAC08", "\uAC08"], /* Hangul Syllable */ + ["\uAC09", "\uAC09"], /* Hangul Syllable */ + ["\uAC0A", "\uAC0A"], /* Hangul Syllable */ + ["\uAC0B", "\uAC0B"], /* Hangul Syllable */ + ["\uAC0C", "\uAC0C"], /* Hangul Syllable */ + ["\uAC0D", "\uAC0D"], /* Hangul Syllable */ + ["\uAC0E", "\uAC0E"], /* Hangul Syllable */ + ["\uAC0F", "\uAC0F"], /* Hangul Syllable */ + ["\uAC10", "\uAC10"], /* Hangul Syllable */ + ["\uAC11", "\uAC11"], /* Hangul Syllable */ + ["\uAC12", "\uAC12"], /* Hangul Syllable */ + ["\uAC13", "\uAC13"], /* Hangul Syllable */ + ["\uAC14", "\uAC14"], /* Hangul Syllable */ + ["\uAC15", "\uAC15"], /* Hangul Syllable */ + ["\uAC16", "\uAC16"], /* Hangul Syllable */ + ["\uAC17", "\uAC17"], /* Hangul Syllable */ + ["\uAC18", "\uAC18"], /* Hangul Syllable */ + ["\uAC19", "\uAC19"], /* Hangul Syllable */ + ["\uAC1A", "\uAC1A"], /* Hangul Syllable */ + ["\uAC1B", "\uAC1B"], /* Hangul Syllable */ + ["\uAC1C", "\uAC1C"], /* Hangul Syllable */ + ["\uAC1D", "\uAC1D"], /* Hangul Syllable */ + ["\uAC1E", "\uAC1E"], /* Hangul Syllable */ + ["\uAC1F", "\uAC1F"], /* Hangul Syllable */ + ["\uAC20", "\uAC20"], /* Hangul Syllable */ + ["\uAC21", "\uAC21"], /* Hangul Syllable */ + ["\uAC22", "\uAC22"], /* Hangul Syllable */ + ["\uAC23", "\uAC23"], /* Hangul Syllable */ + ["\uAC24", "\uAC24"], /* Hangul Syllable */ + ["\uAC25", "\uAC25"], /* Hangul Syllable */ + ["\uAC26", "\uAC26"], /* Hangul Syllable */ + ["\uAC27", "\uAC27"], /* Hangul Syllable */ + ["\uAC28", "\uAC28"], /* Hangul Syllable */ + ["\uAC29", "\uAC29"], /* Hangul Syllable */ + ["\uAC2A", "\uAC2A"], /* Hangul Syllable */ + ["\uAC2B", "\uAC2B"], /* Hangul Syllable */ + ["\uAC2C", "\uAC2C"], /* Hangul Syllable */ + ["\uAC2D", "\uAC2D"], /* Hangul Syllable */ + ["\uAC2E", "\uAC2E"], /* Hangul Syllable */ + ["\uAC2F", "\uAC2F"], /* Hangul Syllable */ + ["\uAC30", "\uAC30"], /* Hangul Syllable */ + ["\uAC31", "\uAC31"], /* Hangul Syllable */ + ["\uAC32", "\uAC32"], /* Hangul Syllable */ + ["\uAC33", "\uAC33"], /* Hangul Syllable */ + ["\uAC34", "\uAC34"], /* Hangul Syllable */ + ["\uAC35", "\uAC35"], /* Hangul Syllable */ + ["\uAC36", "\uAC36"], /* Hangul Syllable */ + ["\uAC37", "\uAC37"], /* Hangul Syllable */ + ["\uAC38", "\uAC38"], /* Hangul Syllable */ + ["\uAC39", "\uAC39"], /* Hangul Syllable */ + ["\uAC3A", "\uAC3A"], /* Hangul Syllable */ + ["\uAC3B", "\uAC3B"], /* Hangul Syllable */ + ["\uAC3C", "\uAC3C"], /* Hangul Syllable */ + ["\uAC3D", "\uAC3D"], /* Hangul Syllable */ + ["\uAC3E", "\uAC3E"], /* Hangul Syllable */ + ["\uAC3F", "\uAC3F"], /* Hangul Syllable */ + ["\uAC40", "\uAC40"], /* Hangul Syllable */ + ["\uAC41", "\uAC41"], /* Hangul Syllable */ + ["\uAC42", "\uAC42"], /* Hangul Syllable */ + ["\uAC43", "\uAC43"], /* Hangul Syllable */ + ["\uAC44", "\uAC44"], /* Hangul Syllable */ + ["\uAC45", "\uAC45"], /* Hangul Syllable */ + ["\uAC46", "\uAC46"], /* Hangul Syllable */ + ["\uAC47", "\uAC47"], /* Hangul Syllable */ + ["\uAC48", "\uAC48"], /* Hangul Syllable */ + ["\uAC49", "\uAC49"], /* Hangul Syllable */ + ["\uAC4A", "\uAC4A"], /* Hangul Syllable */ + ["\uAC4B", "\uAC4B"], /* Hangul Syllable */ + ["\uAC4C", "\uAC4C"], /* Hangul Syllable */ + ["\uAC4D", "\uAC4D"], /* Hangul Syllable */ + ["\uAC4E", "\uAC4E"], /* Hangul Syllable */ + ["\uAC4F", "\uAC4F"], /* Hangul Syllable */ + ["\uAC50", "\uAC50"], /* Hangul Syllable */ + ["\uAC51", "\uAC51"], /* Hangul Syllable */ + ["\uAC52", "\uAC52"], /* Hangul Syllable */ + ["\uAC53", "\uAC53"], /* Hangul Syllable */ + ["\uAC54", "\uAC54"], /* Hangul Syllable */ + ["\uAC55", "\uAC55"], /* Hangul Syllable */ + ["\uAC56", "\uAC56"], /* Hangul Syllable */ + ["\uAC57", "\uAC57"], /* Hangul Syllable */ + ["\uAC58", "\uAC58"], /* Hangul Syllable */ + ["\uAC59", "\uAC59"], /* Hangul Syllable */ + ["\uAC5A", "\uAC5A"], /* Hangul Syllable */ + ["\uAC5B", "\uAC5B"], /* Hangul Syllable */ + ["\uAC5C", "\uAC5C"], /* Hangul Syllable */ + ["\uAC5D", "\uAC5D"], /* Hangul Syllable */ + ["\uAC5E", "\uAC5E"], /* Hangul Syllable */ + ["\uAC5F", "\uAC5F"], /* Hangul Syllable */ + ["\uAC60", "\uAC60"], /* Hangul Syllable */ + ["\uAC61", "\uAC61"], /* Hangul Syllable */ + ["\uAC62", "\uAC62"], /* Hangul Syllable */ + ["\uAC63", "\uAC63"], /* Hangul Syllable */ + ["\uAC64", "\uAC64"], /* Hangul Syllable */ + ["\uAC65", "\uAC65"], /* Hangul Syllable */ + ["\uAC66", "\uAC66"], /* Hangul Syllable */ + ["\uAC67", "\uAC67"], /* Hangul Syllable */ + ["\uAC68", "\uAC68"], /* Hangul Syllable */ + ["\uAC69", "\uAC69"], /* Hangul Syllable */ + ["\uAC6A", "\uAC6A"], /* Hangul Syllable */ + ["\uAC6B", "\uAC6B"], /* Hangul Syllable */ + ["\uAC6C", "\uAC6C"], /* Hangul Syllable */ + ["\uAC6D", "\uAC6D"], /* Hangul Syllable */ + ["\uAC6E", "\uAC6E"], /* Hangul Syllable */ + ["\uAC6F", "\uAC6F"], /* Hangul Syllable */ + ["\uAC70", "\uAC70"], /* Hangul Syllable */ + ["\uAC71", "\uAC71"], /* Hangul Syllable */ + ["\uAC72", "\uAC72"], /* Hangul Syllable */ + ["\uAC73", "\uAC73"], /* Hangul Syllable */ + ["\uAC74", "\uAC74"], /* Hangul Syllable */ + ["\uAC75", "\uAC75"], /* Hangul Syllable */ + ["\uAC76", "\uAC76"], /* Hangul Syllable */ + ["\uAC77", "\uAC77"], /* Hangul Syllable */ + ["\uAC78", "\uAC78"], /* Hangul Syllable */ + ["\uAC79", "\uAC79"], /* Hangul Syllable */ + ["\uAC7A", "\uAC7A"], /* Hangul Syllable */ + ["\uAC7B", "\uAC7B"], /* Hangul Syllable */ + ["\uAC7C", "\uAC7C"], /* Hangul Syllable */ + ["\uAC7D", "\uAC7D"], /* Hangul Syllable */ + ["\uAC7E", "\uAC7E"], /* Hangul Syllable */ + ["\uAC7F", "\uAC7F"], /* Hangul Syllable */ + ["\uAC80", "\uAC80"], /* Hangul Syllable */ + ["\uAC81", "\uAC81"], /* Hangul Syllable */ + ["\uAC82", "\uAC82"], /* Hangul Syllable */ + ["\uAC83", "\uAC83"], /* Hangul Syllable */ + ["\uAC84", "\uAC84"], /* Hangul Syllable */ + ["\uAC85", "\uAC85"], /* Hangul Syllable */ + ["\uAC86", "\uAC86"], /* Hangul Syllable */ + ["\uAC87", "\uAC87"], /* Hangul Syllable */ + ["\uAC88", "\uAC88"], /* Hangul Syllable */ + ["\uAC89", "\uAC89"], /* Hangul Syllable */ + ["\uAC8A", "\uAC8A"], /* Hangul Syllable */ + ["\uAC8B", "\uAC8B"], /* Hangul Syllable */ + ["\uAC8C", "\uAC8C"], /* Hangul Syllable */ + ["\uAC8D", "\uAC8D"], /* Hangul Syllable */ + ["\uAC8E", "\uAC8E"], /* Hangul Syllable */ + ["\uAC8F", "\uAC8F"], /* Hangul Syllable */ + ["\uAC90", "\uAC90"], /* Hangul Syllable */ + ["\uAC91", "\uAC91"], /* Hangul Syllable */ + ["\uAC92", "\uAC92"], /* Hangul Syllable */ + ["\uAC93", "\uAC93"], /* Hangul Syllable */ + ["\uAC94", "\uAC94"], /* Hangul Syllable */ + ["\uAC95", "\uAC95"], /* Hangul Syllable */ + ["\uAC96", "\uAC96"], /* Hangul Syllable */ + ["\uAC97", "\uAC97"], /* Hangul Syllable */ + ["\uAC98", "\uAC98"], /* Hangul Syllable */ + ["\uAC99", "\uAC99"], /* Hangul Syllable */ + ["\uAC9A", "\uAC9A"], /* Hangul Syllable */ + ["\uAC9B", "\uAC9B"], /* Hangul Syllable */ + ["\uAC9C", "\uAC9C"], /* Hangul Syllable */ + ["\uAC9D", "\uAC9D"], /* Hangul Syllable */ + ["\uAC9E", "\uAC9E"], /* Hangul Syllable */ + ["\uAC9F", "\uAC9F"], /* Hangul Syllable */ + ["\uACA0", "\uACA0"], /* Hangul Syllable */ + ["\uACA1", "\uACA1"], /* Hangul Syllable */ + ["\uACA2", "\uACA2"], /* Hangul Syllable */ + ["\uACA3", "\uACA3"], /* Hangul Syllable */ + ["\uACA4", "\uACA4"], /* Hangul Syllable */ + ["\uACA5", "\uACA5"], /* Hangul Syllable */ + ["\uACA6", "\uACA6"], /* Hangul Syllable */ + ["\uACA7", "\uACA7"], /* Hangul Syllable */ + ["\uACA8", "\uACA8"], /* Hangul Syllable */ + ["\uACA9", "\uACA9"], /* Hangul Syllable */ + ["\uACAA", "\uACAA"], /* Hangul Syllable */ + ["\uACAB", "\uACAB"], /* Hangul Syllable */ + ["\uACAC", "\uACAC"], /* Hangul Syllable */ + ["\uACAD", "\uACAD"], /* Hangul Syllable */ + ["\uACAE", "\uACAE"], /* Hangul Syllable */ + ["\uACAF", "\uACAF"], /* Hangul Syllable */ + ["\uACB0", "\uACB0"], /* Hangul Syllable */ + ["\uACB1", "\uACB1"], /* Hangul Syllable */ + ["\uACB2", "\uACB2"], /* Hangul Syllable */ + ["\uACB3", "\uACB3"], /* Hangul Syllable */ + ["\uACB4", "\uACB4"], /* Hangul Syllable */ + ["\uACB5", "\uACB5"], /* Hangul Syllable */ + ["\uACB6", "\uACB6"], /* Hangul Syllable */ + ["\uACB7", "\uACB7"], /* Hangul Syllable */ + ["\uACB8", "\uACB8"], /* Hangul Syllable */ + ["\uACB9", "\uACB9"], /* Hangul Syllable */ + ["\uACBA", "\uACBA"], /* Hangul Syllable */ + ["\uACBB", "\uACBB"], /* Hangul Syllable */ + ["\uACBC", "\uACBC"], /* Hangul Syllable */ + ["\uACBD", "\uACBD"], /* Hangul Syllable */ + ["\uACBE", "\uACBE"], /* Hangul Syllable */ + ["\uACBF", "\uACBF"], /* Hangul Syllable */ + ["\uACC0", "\uACC0"], /* Hangul Syllable */ + ["\uACC1", "\uACC1"], /* Hangul Syllable */ + ["\uACC2", "\uACC2"], /* Hangul Syllable */ + ["\uACC3", "\uACC3"], /* Hangul Syllable */ + ["\uACC4", "\uACC4"], /* Hangul Syllable */ + ["\uACC5", "\uACC5"], /* Hangul Syllable */ + ["\uACC6", "\uACC6"], /* Hangul Syllable */ + ["\uACC7", "\uACC7"], /* Hangul Syllable */ + ["\uACC8", "\uACC8"], /* Hangul Syllable */ + ["\uACC9", "\uACC9"], /* Hangul Syllable */ + ["\uACCA", "\uACCA"], /* Hangul Syllable */ + ["\uACCB", "\uACCB"], /* Hangul Syllable */ + ["\uACCC", "\uACCC"], /* Hangul Syllable */ + ["\uACCD", "\uACCD"], /* Hangul Syllable */ + ["\uACCE", "\uACCE"], /* Hangul Syllable */ + ["\uACCF", "\uACCF"], /* Hangul Syllable */ + ["\uACD0", "\uACD0"], /* Hangul Syllable */ + ["\uACD1", "\uACD1"], /* Hangul Syllable */ + ["\uACD2", "\uACD2"], /* Hangul Syllable */ + ["\uACD3", "\uACD3"], /* Hangul Syllable */ + ["\uACD4", "\uACD4"], /* Hangul Syllable */ + ["\uACD5", "\uACD5"], /* Hangul Syllable */ + ["\uACD6", "\uACD6"], /* Hangul Syllable */ + ["\uACD7", "\uACD7"], /* Hangul Syllable */ + ["\uACD8", "\uACD8"], /* Hangul Syllable */ + ["\uACD9", "\uACD9"], /* Hangul Syllable */ + ["\uACDA", "\uACDA"], /* Hangul Syllable */ + ["\uACDB", "\uACDB"], /* Hangul Syllable */ + ["\uACDC", "\uACDC"], /* Hangul Syllable */ + ["\uACDD", "\uACDD"], /* Hangul Syllable */ + ["\uACDE", "\uACDE"], /* Hangul Syllable */ + ["\uACDF", "\uACDF"], /* Hangul Syllable */ + ["\uACE0", "\uACE0"], /* Hangul Syllable */ + ["\uACE1", "\uACE1"], /* Hangul Syllable */ + ["\uACE2", "\uACE2"], /* Hangul Syllable */ + ["\uACE3", "\uACE3"], /* Hangul Syllable */ + ["\uACE4", "\uACE4"], /* Hangul Syllable */ + ["\uACE5", "\uACE5"], /* Hangul Syllable */ + ["\uACE6", "\uACE6"], /* Hangul Syllable */ + ["\uACE7", "\uACE7"], /* Hangul Syllable */ + ["\uACE8", "\uACE8"], /* Hangul Syllable */ + ["\uACE9", "\uACE9"], /* Hangul Syllable */ + ["\uACEA", "\uACEA"], /* Hangul Syllable */ + ["\uACEB", "\uACEB"], /* Hangul Syllable */ + ["\uACEC", "\uACEC"], /* Hangul Syllable */ + ["\uACED", "\uACED"], /* Hangul Syllable */ + ["\uACEE", "\uACEE"], /* Hangul Syllable */ + ["\uACEF", "\uACEF"], /* Hangul Syllable */ + ["\uACF0", "\uACF0"], /* Hangul Syllable */ + ["\uACF1", "\uACF1"], /* Hangul Syllable */ + ["\uACF2", "\uACF2"], /* Hangul Syllable */ + ["\uACF3", "\uACF3"], /* Hangul Syllable */ + ["\uACF4", "\uACF4"], /* Hangul Syllable */ + ["\uACF5", "\uACF5"], /* Hangul Syllable */ + ["\uACF6", "\uACF6"], /* Hangul Syllable */ + ["\uACF7", "\uACF7"], /* Hangul Syllable */ + ["\uACF8", "\uACF8"], /* Hangul Syllable */ + ["\uACF9", "\uACF9"], /* Hangul Syllable */ + ["\uACFA", "\uACFA"], /* Hangul Syllable */ + ["\uACFB", "\uACFB"], /* Hangul Syllable */ + ["\uACFC", "\uACFC"], /* Hangul Syllable */ + ["\uACFD", "\uACFD"], /* Hangul Syllable */ + ["\uACFE", "\uACFE"], /* Hangul Syllable */ + ["\uACFF", "\uACFF"], /* Hangul Syllable */ + ["\uAD00", "\uAD00"], /* Hangul Syllable */ + ["\uAD01", "\uAD01"], /* Hangul Syllable */ + ["\uAD02", "\uAD02"], /* Hangul Syllable */ + ["\uAD03", "\uAD03"], /* Hangul Syllable */ + ["\uAD04", "\uAD04"], /* Hangul Syllable */ + ["\uAD05", "\uAD05"], /* Hangul Syllable */ + ["\uAD06", "\uAD06"], /* Hangul Syllable */ + ["\uAD07", "\uAD07"], /* Hangul Syllable */ + ["\uAD08", "\uAD08"], /* Hangul Syllable */ + ["\uAD09", "\uAD09"], /* Hangul Syllable */ + ["\uAD0A", "\uAD0A"], /* Hangul Syllable */ + ["\uAD0B", "\uAD0B"], /* Hangul Syllable */ + ["\uAD0C", "\uAD0C"], /* Hangul Syllable */ + ["\uAD0D", "\uAD0D"], /* Hangul Syllable */ + ["\uAD0E", "\uAD0E"], /* Hangul Syllable */ + ["\uAD0F", "\uAD0F"], /* Hangul Syllable */ + ["\uAD10", "\uAD10"], /* Hangul Syllable */ + ["\uAD11", "\uAD11"], /* Hangul Syllable */ + ["\uAD12", "\uAD12"], /* Hangul Syllable */ + ["\uAD13", "\uAD13"], /* Hangul Syllable */ + ["\uAD14", "\uAD14"], /* Hangul Syllable */ + ["\uAD15", "\uAD15"], /* Hangul Syllable */ + ["\uAD16", "\uAD16"], /* Hangul Syllable */ + ["\uAD17", "\uAD17"], /* Hangul Syllable */ + ["\uAD18", "\uAD18"], /* Hangul Syllable */ + ["\uAD19", "\uAD19"], /* Hangul Syllable */ + ["\uAD1A", "\uAD1A"], /* Hangul Syllable */ + ["\uAD1B", "\uAD1B"], /* Hangul Syllable */ + ["\uAD1C", "\uAD1C"], /* Hangul Syllable */ + ["\uAD1D", "\uAD1D"], /* Hangul Syllable */ + ["\uAD1E", "\uAD1E"], /* Hangul Syllable */ + ["\uAD1F", "\uAD1F"], /* Hangul Syllable */ + ["\uAD20", "\uAD20"], /* Hangul Syllable */ + ["\uAD21", "\uAD21"], /* Hangul Syllable */ + ["\uAD22", "\uAD22"], /* Hangul Syllable */ + ["\uAD23", "\uAD23"], /* Hangul Syllable */ + ["\uAD24", "\uAD24"], /* Hangul Syllable */ + ["\uAD25", "\uAD25"], /* Hangul Syllable */ + ["\uAD26", "\uAD26"], /* Hangul Syllable */ + ["\uAD27", "\uAD27"], /* Hangul Syllable */ + ["\uAD28", "\uAD28"], /* Hangul Syllable */ + ["\uAD29", "\uAD29"], /* Hangul Syllable */ + ["\uAD2A", "\uAD2A"], /* Hangul Syllable */ + ["\uAD2B", "\uAD2B"], /* Hangul Syllable */ + ["\uAD2C", "\uAD2C"], /* Hangul Syllable */ + ["\uAD2D", "\uAD2D"], /* Hangul Syllable */ + ["\uAD2E", "\uAD2E"], /* Hangul Syllable */ + ["\uAD2F", "\uAD2F"], /* Hangul Syllable */ + ["\uAD30", "\uAD30"], /* Hangul Syllable */ + ["\uAD31", "\uAD31"], /* Hangul Syllable */ + ["\uAD32", "\uAD32"], /* Hangul Syllable */ + ["\uAD33", "\uAD33"], /* Hangul Syllable */ + ["\uAD34", "\uAD34"], /* Hangul Syllable */ + ["\uAD35", "\uAD35"], /* Hangul Syllable */ + ["\uAD36", "\uAD36"], /* Hangul Syllable */ + ["\uAD37", "\uAD37"], /* Hangul Syllable */ + ["\uAD38", "\uAD38"], /* Hangul Syllable */ + ["\uAD39", "\uAD39"], /* Hangul Syllable */ + ["\uAD3A", "\uAD3A"], /* Hangul Syllable */ + ["\uAD3B", "\uAD3B"], /* Hangul Syllable */ + ["\uAD3C", "\uAD3C"], /* Hangul Syllable */ + ["\uAD3D", "\uAD3D"], /* Hangul Syllable */ + ["\uAD3E", "\uAD3E"], /* Hangul Syllable */ + ["\uAD3F", "\uAD3F"], /* Hangul Syllable */ + ["\uAD40", "\uAD40"], /* Hangul Syllable */ + ["\uAD41", "\uAD41"], /* Hangul Syllable */ + ["\uAD42", "\uAD42"], /* Hangul Syllable */ + ["\uAD43", "\uAD43"], /* Hangul Syllable */ + ["\uAD44", "\uAD44"], /* Hangul Syllable */ + ["\uAD45", "\uAD45"], /* Hangul Syllable */ + ["\uAD46", "\uAD46"], /* Hangul Syllable */ + ["\uAD47", "\uAD47"], /* Hangul Syllable */ + ["\uAD48", "\uAD48"], /* Hangul Syllable */ + ["\uAD49", "\uAD49"], /* Hangul Syllable */ + ["\uAD4A", "\uAD4A"], /* Hangul Syllable */ + ["\uAD4B", "\uAD4B"], /* Hangul Syllable */ + ["\uAD4C", "\uAD4C"], /* Hangul Syllable */ + ["\uAD4D", "\uAD4D"], /* Hangul Syllable */ + ["\uAD4E", "\uAD4E"], /* Hangul Syllable */ + ["\uAD4F", "\uAD4F"], /* Hangul Syllable */ + ["\uAD50", "\uAD50"], /* Hangul Syllable */ + ["\uAD51", "\uAD51"], /* Hangul Syllable */ + ["\uAD52", "\uAD52"], /* Hangul Syllable */ + ["\uAD53", "\uAD53"], /* Hangul Syllable */ + ["\uAD54", "\uAD54"], /* Hangul Syllable */ + ["\uAD55", "\uAD55"], /* Hangul Syllable */ + ["\uAD56", "\uAD56"], /* Hangul Syllable */ + ["\uAD57", "\uAD57"], /* Hangul Syllable */ + ["\uAD58", "\uAD58"], /* Hangul Syllable */ + ["\uAD59", "\uAD59"], /* Hangul Syllable */ + ["\uAD5A", "\uAD5A"], /* Hangul Syllable */ + ["\uAD5B", "\uAD5B"], /* Hangul Syllable */ + ["\uAD5C", "\uAD5C"], /* Hangul Syllable */ + ["\uAD5D", "\uAD5D"], /* Hangul Syllable */ + ["\uAD5E", "\uAD5E"], /* Hangul Syllable */ + ["\uAD5F", "\uAD5F"], /* Hangul Syllable */ + ["\uAD60", "\uAD60"], /* Hangul Syllable */ + ["\uAD61", "\uAD61"], /* Hangul Syllable */ + ["\uAD62", "\uAD62"], /* Hangul Syllable */ + ["\uAD63", "\uAD63"], /* Hangul Syllable */ + ["\uAD64", "\uAD64"], /* Hangul Syllable */ + ["\uAD65", "\uAD65"], /* Hangul Syllable */ + ["\uAD66", "\uAD66"], /* Hangul Syllable */ + ["\uAD67", "\uAD67"], /* Hangul Syllable */ + ["\uAD68", "\uAD68"], /* Hangul Syllable */ + ["\uAD69", "\uAD69"], /* Hangul Syllable */ + ["\uAD6A", "\uAD6A"], /* Hangul Syllable */ + ["\uAD6B", "\uAD6B"], /* Hangul Syllable */ + ["\uAD6C", "\uAD6C"], /* Hangul Syllable */ + ["\uAD6D", "\uAD6D"], /* Hangul Syllable */ + ["\uAD6E", "\uAD6E"], /* Hangul Syllable */ + ["\uAD6F", "\uAD6F"], /* Hangul Syllable */ + ["\uAD70", "\uAD70"], /* Hangul Syllable */ + ["\uAD71", "\uAD71"], /* Hangul Syllable */ + ["\uAD72", "\uAD72"], /* Hangul Syllable */ + ["\uAD73", "\uAD73"], /* Hangul Syllable */ + ["\uAD74", "\uAD74"], /* Hangul Syllable */ + ["\uAD75", "\uAD75"], /* Hangul Syllable */ + ["\uAD76", "\uAD76"], /* Hangul Syllable */ + ["\uAD77", "\uAD77"], /* Hangul Syllable */ + ["\uAD78", "\uAD78"], /* Hangul Syllable */ + ["\uAD79", "\uAD79"], /* Hangul Syllable */ + ["\uAD7A", "\uAD7A"], /* Hangul Syllable */ + ["\uAD7B", "\uAD7B"], /* Hangul Syllable */ + ["\uAD7C", "\uAD7C"], /* Hangul Syllable */ + ["\uAD7D", "\uAD7D"], /* Hangul Syllable */ + ["\uAD7E", "\uAD7E"], /* Hangul Syllable */ + ["\uAD7F", "\uAD7F"], /* Hangul Syllable */ + ["\uAD80", "\uAD80"], /* Hangul Syllable */ + ["\uAD81", "\uAD81"], /* Hangul Syllable */ + ["\uAD82", "\uAD82"], /* Hangul Syllable */ + ["\uAD83", "\uAD83"], /* Hangul Syllable */ + ["\uAD84", "\uAD84"], /* Hangul Syllable */ + ["\uAD85", "\uAD85"], /* Hangul Syllable */ + ["\uAD86", "\uAD86"], /* Hangul Syllable */ + ["\uAD87", "\uAD87"], /* Hangul Syllable */ + ["\uAD88", "\uAD88"], /* Hangul Syllable */ + ["\uAD89", "\uAD89"], /* Hangul Syllable */ + ["\uAD8A", "\uAD8A"], /* Hangul Syllable */ + ["\uAD8B", "\uAD8B"], /* Hangul Syllable */ + ["\uAD8C", "\uAD8C"], /* Hangul Syllable */ + ["\uAD8D", "\uAD8D"], /* Hangul Syllable */ + ["\uAD8E", "\uAD8E"], /* Hangul Syllable */ + ["\uAD8F", "\uAD8F"], /* Hangul Syllable */ + ["\uAD90", "\uAD90"], /* Hangul Syllable */ + ["\uAD91", "\uAD91"], /* Hangul Syllable */ + ["\uAD92", "\uAD92"], /* Hangul Syllable */ + ["\uAD93", "\uAD93"], /* Hangul Syllable */ + ["\uAD94", "\uAD94"], /* Hangul Syllable */ + ["\uAD95", "\uAD95"], /* Hangul Syllable */ + ["\uAD96", "\uAD96"], /* Hangul Syllable */ + ["\uAD97", "\uAD97"], /* Hangul Syllable */ + ["\uAD98", "\uAD98"], /* Hangul Syllable */ + ["\uAD99", "\uAD99"], /* Hangul Syllable */ + ["\uAD9A", "\uAD9A"], /* Hangul Syllable */ + ["\uAD9B", "\uAD9B"], /* Hangul Syllable */ + ["\uAD9C", "\uAD9C"], /* Hangul Syllable */ + ["\uAD9D", "\uAD9D"], /* Hangul Syllable */ + ["\uAD9E", "\uAD9E"], /* Hangul Syllable */ + ["\uAD9F", "\uAD9F"], /* Hangul Syllable */ + ["\uADA0", "\uADA0"], /* Hangul Syllable */ + ["\uADA1", "\uADA1"], /* Hangul Syllable */ + ["\uADA2", "\uADA2"], /* Hangul Syllable */ + ["\uADA3", "\uADA3"], /* Hangul Syllable */ + ["\uADA4", "\uADA4"], /* Hangul Syllable */ + ["\uADA5", "\uADA5"], /* Hangul Syllable */ + ["\uADA6", "\uADA6"], /* Hangul Syllable */ + ["\uADA7", "\uADA7"], /* Hangul Syllable */ + ["\uADA8", "\uADA8"], /* Hangul Syllable */ + ["\uADA9", "\uADA9"], /* Hangul Syllable */ + ["\uADAA", "\uADAA"], /* Hangul Syllable */ + ["\uADAB", "\uADAB"], /* Hangul Syllable */ + ["\uADAC", "\uADAC"], /* Hangul Syllable */ + ["\uADAD", "\uADAD"], /* Hangul Syllable */ + ["\uADAE", "\uADAE"], /* Hangul Syllable */ + ["\uADAF", "\uADAF"], /* Hangul Syllable */ + ["\uADB0", "\uADB0"], /* Hangul Syllable */ + ["\uADB1", "\uADB1"], /* Hangul Syllable */ + ["\uADB2", "\uADB2"], /* Hangul Syllable */ + ["\uADB3", "\uADB3"], /* Hangul Syllable */ + ["\uADB4", "\uADB4"], /* Hangul Syllable */ + ["\uADB5", "\uADB5"], /* Hangul Syllable */ + ["\uADB6", "\uADB6"], /* Hangul Syllable */ + ["\uADB7", "\uADB7"], /* Hangul Syllable */ + ["\uADB8", "\uADB8"], /* Hangul Syllable */ + ["\uADB9", "\uADB9"], /* Hangul Syllable */ + ["\uADBA", "\uADBA"], /* Hangul Syllable */ + ["\uADBB", "\uADBB"], /* Hangul Syllable */ + ["\uADBC", "\uADBC"], /* Hangul Syllable */ + ["\uADBD", "\uADBD"], /* Hangul Syllable */ + ["\uADBE", "\uADBE"], /* Hangul Syllable */ + ["\uADBF", "\uADBF"], /* Hangul Syllable */ + ["\uADC0", "\uADC0"], /* Hangul Syllable */ + ["\uADC1", "\uADC1"], /* Hangul Syllable */ + ["\uADC2", "\uADC2"], /* Hangul Syllable */ + ["\uADC3", "\uADC3"], /* Hangul Syllable */ + ["\uADC4", "\uADC4"], /* Hangul Syllable */ + ["\uADC5", "\uADC5"], /* Hangul Syllable */ + ["\uADC6", "\uADC6"], /* Hangul Syllable */ + ["\uADC7", "\uADC7"], /* Hangul Syllable */ + ["\uADC8", "\uADC8"], /* Hangul Syllable */ + ["\uADC9", "\uADC9"], /* Hangul Syllable */ + ["\uADCA", "\uADCA"], /* Hangul Syllable */ + ["\uADCB", "\uADCB"], /* Hangul Syllable */ + ["\uADCC", "\uADCC"], /* Hangul Syllable */ + ["\uADCD", "\uADCD"], /* Hangul Syllable */ + ["\uADCE", "\uADCE"], /* Hangul Syllable */ + ["\uADCF", "\uADCF"], /* Hangul Syllable */ + ["\uADD0", "\uADD0"], /* Hangul Syllable */ + ["\uADD1", "\uADD1"], /* Hangul Syllable */ + ["\uADD2", "\uADD2"], /* Hangul Syllable */ + ["\uADD3", "\uADD3"], /* Hangul Syllable */ + ["\uADD4", "\uADD4"], /* Hangul Syllable */ + ["\uADD5", "\uADD5"], /* Hangul Syllable */ + ["\uADD6", "\uADD6"], /* Hangul Syllable */ + ["\uADD7", "\uADD7"], /* Hangul Syllable */ + ["\uADD8", "\uADD8"], /* Hangul Syllable */ + ["\uADD9", "\uADD9"], /* Hangul Syllable */ + ["\uADDA", "\uADDA"], /* Hangul Syllable */ + ["\uADDB", "\uADDB"], /* Hangul Syllable */ + ["\uADDC", "\uADDC"], /* Hangul Syllable */ + ["\uADDD", "\uADDD"], /* Hangul Syllable */ + ["\uADDE", "\uADDE"], /* Hangul Syllable */ + ["\uADDF", "\uADDF"], /* Hangul Syllable */ + ["\uADE0", "\uADE0"], /* Hangul Syllable */ + ["\uADE1", "\uADE1"], /* Hangul Syllable */ + ["\uADE2", "\uADE2"], /* Hangul Syllable */ + ["\uADE3", "\uADE3"], /* Hangul Syllable */ + ["\uADE4", "\uADE4"], /* Hangul Syllable */ + ["\uADE5", "\uADE5"], /* Hangul Syllable */ + ["\uADE6", "\uADE6"], /* Hangul Syllable */ + ["\uADE7", "\uADE7"], /* Hangul Syllable */ + ["\uADE8", "\uADE8"], /* Hangul Syllable */ + ["\uADE9", "\uADE9"], /* Hangul Syllable */ + ["\uADEA", "\uADEA"], /* Hangul Syllable */ + ["\uADEB", "\uADEB"], /* Hangul Syllable */ + ["\uADEC", "\uADEC"], /* Hangul Syllable */ + ["\uADED", "\uADED"], /* Hangul Syllable */ + ["\uADEE", "\uADEE"], /* Hangul Syllable */ + ["\uADEF", "\uADEF"], /* Hangul Syllable */ + ["\uADF0", "\uADF0"], /* Hangul Syllable */ + ["\uADF1", "\uADF1"], /* Hangul Syllable */ + ["\uADF2", "\uADF2"], /* Hangul Syllable */ + ["\uADF3", "\uADF3"], /* Hangul Syllable */ + ["\uADF4", "\uADF4"], /* Hangul Syllable */ + ["\uADF5", "\uADF5"], /* Hangul Syllable */ + ["\uADF6", "\uADF6"], /* Hangul Syllable */ + ["\uADF7", "\uADF7"], /* Hangul Syllable */ + ["\uADF8", "\uADF8"], /* Hangul Syllable */ + ["\uADF9", "\uADF9"], /* Hangul Syllable */ + ["\uADFA", "\uADFA"], /* Hangul Syllable */ + ["\uADFB", "\uADFB"], /* Hangul Syllable */ + ["\uADFC", "\uADFC"], /* Hangul Syllable */ + ["\uADFD", "\uADFD"], /* Hangul Syllable */ + ["\uADFE", "\uADFE"], /* Hangul Syllable */ + ["\uADFF", "\uADFF"], /* Hangul Syllable */ + ["\uAE00", "\uAE00"], /* Hangul Syllable */ + ["\uAE01", "\uAE01"], /* Hangul Syllable */ + ["\uAE02", "\uAE02"], /* Hangul Syllable */ + ["\uAE03", "\uAE03"], /* Hangul Syllable */ + ["\uAE04", "\uAE04"], /* Hangul Syllable */ + ["\uAE05", "\uAE05"], /* Hangul Syllable */ + ["\uAE06", "\uAE06"], /* Hangul Syllable */ + ["\uAE07", "\uAE07"], /* Hangul Syllable */ + ["\uAE08", "\uAE08"], /* Hangul Syllable */ + ["\uAE09", "\uAE09"], /* Hangul Syllable */ + ["\uAE0A", "\uAE0A"], /* Hangul Syllable */ + ["\uAE0B", "\uAE0B"], /* Hangul Syllable */ + ["\uAE0C", "\uAE0C"], /* Hangul Syllable */ + ["\uAE0D", "\uAE0D"], /* Hangul Syllable */ + ["\uAE0E", "\uAE0E"], /* Hangul Syllable */ + ["\uAE0F", "\uAE0F"], /* Hangul Syllable */ + ["\uAE10", "\uAE10"], /* Hangul Syllable */ + ["\uAE11", "\uAE11"], /* Hangul Syllable */ + ["\uAE12", "\uAE12"], /* Hangul Syllable */ + ["\uAE13", "\uAE13"], /* Hangul Syllable */ + ["\uAE14", "\uAE14"], /* Hangul Syllable */ + ["\uAE15", "\uAE15"], /* Hangul Syllable */ + ["\uAE16", "\uAE16"], /* Hangul Syllable */ + ["\uAE17", "\uAE17"], /* Hangul Syllable */ + ["\uAE18", "\uAE18"], /* Hangul Syllable */ + ["\uAE19", "\uAE19"], /* Hangul Syllable */ + ["\uAE1A", "\uAE1A"], /* Hangul Syllable */ + ["\uAE1B", "\uAE1B"], /* Hangul Syllable */ + ["\uAE1C", "\uAE1C"], /* Hangul Syllable */ + ["\uAE1D", "\uAE1D"], /* Hangul Syllable */ + ["\uAE1E", "\uAE1E"], /* Hangul Syllable */ + ["\uAE1F", "\uAE1F"], /* Hangul Syllable */ + ["\uAE20", "\uAE20"], /* Hangul Syllable */ + ["\uAE21", "\uAE21"], /* Hangul Syllable */ + ["\uAE22", "\uAE22"], /* Hangul Syllable */ + ["\uAE23", "\uAE23"], /* Hangul Syllable */ + ["\uAE24", "\uAE24"], /* Hangul Syllable */ + ["\uAE25", "\uAE25"], /* Hangul Syllable */ + ["\uAE26", "\uAE26"], /* Hangul Syllable */ + ["\uAE27", "\uAE27"], /* Hangul Syllable */ + ["\uAE28", "\uAE28"], /* Hangul Syllable */ + ["\uAE29", "\uAE29"], /* Hangul Syllable */ + ["\uAE2A", "\uAE2A"], /* Hangul Syllable */ + ["\uAE2B", "\uAE2B"], /* Hangul Syllable */ + ["\uAE2C", "\uAE2C"], /* Hangul Syllable */ + ["\uAE2D", "\uAE2D"], /* Hangul Syllable */ + ["\uAE2E", "\uAE2E"], /* Hangul Syllable */ + ["\uAE2F", "\uAE2F"], /* Hangul Syllable */ + ["\uAE30", "\uAE30"], /* Hangul Syllable */ + ["\uAE31", "\uAE31"], /* Hangul Syllable */ + ["\uAE32", "\uAE32"], /* Hangul Syllable */ + ["\uAE33", "\uAE33"], /* Hangul Syllable */ + ["\uAE34", "\uAE34"], /* Hangul Syllable */ + ["\uAE35", "\uAE35"], /* Hangul Syllable */ + ["\uAE36", "\uAE36"], /* Hangul Syllable */ + ["\uAE37", "\uAE37"], /* Hangul Syllable */ + ["\uAE38", "\uAE38"], /* Hangul Syllable */ + ["\uAE39", "\uAE39"], /* Hangul Syllable */ + ["\uAE3A", "\uAE3A"], /* Hangul Syllable */ + ["\uAE3B", "\uAE3B"], /* Hangul Syllable */ + ["\uAE3C", "\uAE3C"], /* Hangul Syllable */ + ["\uAE3D", "\uAE3D"], /* Hangul Syllable */ + ["\uAE3E", "\uAE3E"], /* Hangul Syllable */ + ["\uAE3F", "\uAE3F"], /* Hangul Syllable */ + ["\uAE40", "\uAE40"], /* Hangul Syllable */ + ["\uAE41", "\uAE41"], /* Hangul Syllable */ + ["\uAE42", "\uAE42"], /* Hangul Syllable */ + ["\uAE43", "\uAE43"], /* Hangul Syllable */ + ["\uAE44", "\uAE44"], /* Hangul Syllable */ + ["\uAE45", "\uAE45"], /* Hangul Syllable */ + ["\uAE46", "\uAE46"], /* Hangul Syllable */ + ["\uAE47", "\uAE47"], /* Hangul Syllable */ + ["\uAE48", "\uAE48"], /* Hangul Syllable */ + ["\uAE49", "\uAE49"], /* Hangul Syllable */ + ["\uAE4A", "\uAE4A"], /* Hangul Syllable */ + ["\uAE4B", "\uAE4B"], /* Hangul Syllable */ + ["\uAE4C", "\uAE4C"], /* Hangul Syllable */ + ["\uAE4D", "\uAE4D"], /* Hangul Syllable */ + ["\uAE4E", "\uAE4E"], /* Hangul Syllable */ + ["\uAE4F", "\uAE4F"], /* Hangul Syllable */ + ["\uAE50", "\uAE50"], /* Hangul Syllable */ + ["\uAE51", "\uAE51"], /* Hangul Syllable */ + ["\uAE52", "\uAE52"], /* Hangul Syllable */ + ["\uAE53", "\uAE53"], /* Hangul Syllable */ + ["\uAE54", "\uAE54"], /* Hangul Syllable */ + ["\uAE55", "\uAE55"], /* Hangul Syllable */ + ["\uAE56", "\uAE56"], /* Hangul Syllable */ + ["\uAE57", "\uAE57"], /* Hangul Syllable */ + ["\uAE58", "\uAE58"], /* Hangul Syllable */ + ["\uAE59", "\uAE59"], /* Hangul Syllable */ + ["\uAE5A", "\uAE5A"], /* Hangul Syllable */ + ["\uAE5B", "\uAE5B"], /* Hangul Syllable */ + ["\uAE5C", "\uAE5C"], /* Hangul Syllable */ + ["\uAE5D", "\uAE5D"], /* Hangul Syllable */ + ["\uAE5E", "\uAE5E"], /* Hangul Syllable */ + ["\uAE5F", "\uAE5F"], /* Hangul Syllable */ + ["\uAE60", "\uAE60"], /* Hangul Syllable */ + ["\uAE61", "\uAE61"], /* Hangul Syllable */ + ["\uAE62", "\uAE62"], /* Hangul Syllable */ + ["\uAE63", "\uAE63"], /* Hangul Syllable */ + ["\uAE64", "\uAE64"], /* Hangul Syllable */ + ["\uAE65", "\uAE65"], /* Hangul Syllable */ + ["\uAE66", "\uAE66"], /* Hangul Syllable */ + ["\uAE67", "\uAE67"], /* Hangul Syllable */ + ["\uAE68", "\uAE68"], /* Hangul Syllable */ + ["\uAE69", "\uAE69"], /* Hangul Syllable */ + ["\uAE6A", "\uAE6A"], /* Hangul Syllable */ + ["\uAE6B", "\uAE6B"], /* Hangul Syllable */ + ["\uAE6C", "\uAE6C"], /* Hangul Syllable */ + ["\uAE6D", "\uAE6D"], /* Hangul Syllable */ + ["\uAE6E", "\uAE6E"], /* Hangul Syllable */ + ["\uAE6F", "\uAE6F"], /* Hangul Syllable */ + ["\uAE70", "\uAE70"], /* Hangul Syllable */ + ["\uAE71", "\uAE71"], /* Hangul Syllable */ + ["\uAE72", "\uAE72"], /* Hangul Syllable */ + ["\uAE73", "\uAE73"], /* Hangul Syllable */ + ["\uAE74", "\uAE74"], /* Hangul Syllable */ + ["\uAE75", "\uAE75"], /* Hangul Syllable */ + ["\uAE76", "\uAE76"], /* Hangul Syllable */ + ["\uAE77", "\uAE77"], /* Hangul Syllable */ + ["\uAE78", "\uAE78"], /* Hangul Syllable */ + ["\uAE79", "\uAE79"], /* Hangul Syllable */ + ["\uAE7A", "\uAE7A"], /* Hangul Syllable */ + ["\uAE7B", "\uAE7B"], /* Hangul Syllable */ + ["\uAE7C", "\uAE7C"], /* Hangul Syllable */ + ["\uAE7D", "\uAE7D"], /* Hangul Syllable */ + ["\uAE7E", "\uAE7E"], /* Hangul Syllable */ + ["\uAE7F", "\uAE7F"], /* Hangul Syllable */ + ["\uAE80", "\uAE80"], /* Hangul Syllable */ + ["\uAE81", "\uAE81"], /* Hangul Syllable */ + ["\uAE82", "\uAE82"], /* Hangul Syllable */ + ["\uAE83", "\uAE83"], /* Hangul Syllable */ + ["\uAE84", "\uAE84"], /* Hangul Syllable */ + ["\uAE85", "\uAE85"], /* Hangul Syllable */ + ["\uAE86", "\uAE86"], /* Hangul Syllable */ + ["\uAE87", "\uAE87"], /* Hangul Syllable */ + ["\uAE88", "\uAE88"], /* Hangul Syllable */ + ["\uAE89", "\uAE89"], /* Hangul Syllable */ + ["\uAE8A", "\uAE8A"], /* Hangul Syllable */ + ["\uAE8B", "\uAE8B"], /* Hangul Syllable */ + ["\uAE8C", "\uAE8C"], /* Hangul Syllable */ + ["\uAE8D", "\uAE8D"], /* Hangul Syllable */ + ["\uAE8E", "\uAE8E"], /* Hangul Syllable */ + ["\uAE8F", "\uAE8F"], /* Hangul Syllable */ + ["\uAE90", "\uAE90"], /* Hangul Syllable */ + ["\uAE91", "\uAE91"], /* Hangul Syllable */ + ["\uAE92", "\uAE92"], /* Hangul Syllable */ + ["\uAE93", "\uAE93"], /* Hangul Syllable */ + ["\uAE94", "\uAE94"], /* Hangul Syllable */ + ["\uAE95", "\uAE95"], /* Hangul Syllable */ + ["\uAE96", "\uAE96"], /* Hangul Syllable */ + ["\uAE97", "\uAE97"], /* Hangul Syllable */ + ["\uAE98", "\uAE98"], /* Hangul Syllable */ + ["\uAE99", "\uAE99"], /* Hangul Syllable */ + ["\uAE9A", "\uAE9A"], /* Hangul Syllable */ + ["\uAE9B", "\uAE9B"], /* Hangul Syllable */ + ["\uAE9C", "\uAE9C"], /* Hangul Syllable */ + ["\uAE9D", "\uAE9D"], /* Hangul Syllable */ + ["\uAE9E", "\uAE9E"], /* Hangul Syllable */ + ["\uAE9F", "\uAE9F"], /* Hangul Syllable */ + ["\uAEA0", "\uAEA0"], /* Hangul Syllable */ + ["\uAEA1", "\uAEA1"], /* Hangul Syllable */ + ["\uAEA2", "\uAEA2"], /* Hangul Syllable */ + ["\uAEA3", "\uAEA3"], /* Hangul Syllable */ + ["\uAEA4", "\uAEA4"], /* Hangul Syllable */ + ["\uAEA5", "\uAEA5"], /* Hangul Syllable */ + ["\uAEA6", "\uAEA6"], /* Hangul Syllable */ + ["\uAEA7", "\uAEA7"], /* Hangul Syllable */ + ["\uAEA8", "\uAEA8"], /* Hangul Syllable */ + ["\uAEA9", "\uAEA9"], /* Hangul Syllable */ + ["\uAEAA", "\uAEAA"], /* Hangul Syllable */ + ["\uAEAB", "\uAEAB"], /* Hangul Syllable */ + ["\uAEAC", "\uAEAC"], /* Hangul Syllable */ + ["\uAEAD", "\uAEAD"], /* Hangul Syllable */ + ["\uAEAE", "\uAEAE"], /* Hangul Syllable */ + ["\uAEAF", "\uAEAF"], /* Hangul Syllable */ + ["\uAEB0", "\uAEB0"], /* Hangul Syllable */ + ["\uAEB1", "\uAEB1"], /* Hangul Syllable */ + ["\uAEB2", "\uAEB2"], /* Hangul Syllable */ + ["\uAEB3", "\uAEB3"], /* Hangul Syllable */ + ["\uAEB4", "\uAEB4"], /* Hangul Syllable */ + ["\uAEB5", "\uAEB5"], /* Hangul Syllable */ + ["\uAEB6", "\uAEB6"], /* Hangul Syllable */ + ["\uAEB7", "\uAEB7"], /* Hangul Syllable */ + ["\uAEB8", "\uAEB8"], /* Hangul Syllable */ + ["\uAEB9", "\uAEB9"], /* Hangul Syllable */ + ["\uAEBA", "\uAEBA"], /* Hangul Syllable */ + ["\uAEBB", "\uAEBB"], /* Hangul Syllable */ + ["\uAEBC", "\uAEBC"], /* Hangul Syllable */ + ["\uAEBD", "\uAEBD"], /* Hangul Syllable */ + ["\uAEBE", "\uAEBE"], /* Hangul Syllable */ + ["\uAEBF", "\uAEBF"], /* Hangul Syllable */ + ["\uAEC0", "\uAEC0"], /* Hangul Syllable */ + ["\uAEC1", "\uAEC1"], /* Hangul Syllable */ + ["\uAEC2", "\uAEC2"], /* Hangul Syllable */ + ["\uAEC3", "\uAEC3"], /* Hangul Syllable */ + ["\uAEC4", "\uAEC4"], /* Hangul Syllable */ + ["\uAEC5", "\uAEC5"], /* Hangul Syllable */ + ["\uAEC6", "\uAEC6"], /* Hangul Syllable */ + ["\uAEC7", "\uAEC7"], /* Hangul Syllable */ + ["\uAEC8", "\uAEC8"], /* Hangul Syllable */ + ["\uAEC9", "\uAEC9"], /* Hangul Syllable */ + ["\uAECA", "\uAECA"], /* Hangul Syllable */ + ["\uAECB", "\uAECB"], /* Hangul Syllable */ + ["\uAECC", "\uAECC"], /* Hangul Syllable */ + ["\uAECD", "\uAECD"], /* Hangul Syllable */ + ["\uAECE", "\uAECE"], /* Hangul Syllable */ + ["\uAECF", "\uAECF"], /* Hangul Syllable */ + ["\uAED0", "\uAED0"], /* Hangul Syllable */ + ["\uAED1", "\uAED1"], /* Hangul Syllable */ + ["\uAED2", "\uAED2"], /* Hangul Syllable */ + ["\uAED3", "\uAED3"], /* Hangul Syllable */ + ["\uAED4", "\uAED4"], /* Hangul Syllable */ + ["\uAED5", "\uAED5"], /* Hangul Syllable */ + ["\uAED6", "\uAED6"], /* Hangul Syllable */ + ["\uAED7", "\uAED7"], /* Hangul Syllable */ + ["\uAED8", "\uAED8"], /* Hangul Syllable */ + ["\uAED9", "\uAED9"], /* Hangul Syllable */ + ["\uAEDA", "\uAEDA"], /* Hangul Syllable */ + ["\uAEDB", "\uAEDB"], /* Hangul Syllable */ + ["\uAEDC", "\uAEDC"], /* Hangul Syllable */ + ["\uAEDD", "\uAEDD"], /* Hangul Syllable */ + ["\uAEDE", "\uAEDE"], /* Hangul Syllable */ + ["\uAEDF", "\uAEDF"], /* Hangul Syllable */ + ["\uAEE0", "\uAEE0"], /* Hangul Syllable */ + ["\uAEE1", "\uAEE1"], /* Hangul Syllable */ + ["\uAEE2", "\uAEE2"], /* Hangul Syllable */ + ["\uAEE3", "\uAEE3"], /* Hangul Syllable */ + ["\uAEE4", "\uAEE4"], /* Hangul Syllable */ + ["\uAEE5", "\uAEE5"], /* Hangul Syllable */ + ["\uAEE6", "\uAEE6"], /* Hangul Syllable */ + ["\uAEE7", "\uAEE7"], /* Hangul Syllable */ + ["\uAEE8", "\uAEE8"], /* Hangul Syllable */ + ["\uAEE9", "\uAEE9"], /* Hangul Syllable */ + ["\uAEEA", "\uAEEA"], /* Hangul Syllable */ + ["\uAEEB", "\uAEEB"], /* Hangul Syllable */ + ["\uAEEC", "\uAEEC"], /* Hangul Syllable */ + ["\uAEED", "\uAEED"], /* Hangul Syllable */ + ["\uAEEE", "\uAEEE"], /* Hangul Syllable */ + ["\uAEEF", "\uAEEF"], /* Hangul Syllable */ + ["\uAEF0", "\uAEF0"], /* Hangul Syllable */ + ["\uAEF1", "\uAEF1"], /* Hangul Syllable */ + ["\uAEF2", "\uAEF2"], /* Hangul Syllable */ + ["\uAEF3", "\uAEF3"], /* Hangul Syllable */ + ["\uAEF4", "\uAEF4"], /* Hangul Syllable */ + ["\uAEF5", "\uAEF5"], /* Hangul Syllable */ + ["\uAEF6", "\uAEF6"], /* Hangul Syllable */ + ["\uAEF7", "\uAEF7"], /* Hangul Syllable */ + ["\uAEF8", "\uAEF8"], /* Hangul Syllable */ + ["\uAEF9", "\uAEF9"], /* Hangul Syllable */ + ["\uAEFA", "\uAEFA"], /* Hangul Syllable */ + ["\uAEFB", "\uAEFB"], /* Hangul Syllable */ + ["\uAEFC", "\uAEFC"], /* Hangul Syllable */ + ["\uAEFD", "\uAEFD"], /* Hangul Syllable */ + ["\uAEFE", "\uAEFE"], /* Hangul Syllable */ + ["\uAEFF", "\uAEFF"], /* Hangul Syllable */ + ["\uAF00", "\uAF00"], /* Hangul Syllable */ + ["\uAF01", "\uAF01"], /* Hangul Syllable */ + ["\uAF02", "\uAF02"], /* Hangul Syllable */ + ["\uAF03", "\uAF03"], /* Hangul Syllable */ + ["\uAF04", "\uAF04"], /* Hangul Syllable */ + ["\uAF05", "\uAF05"], /* Hangul Syllable */ + ["\uAF06", "\uAF06"], /* Hangul Syllable */ + ["\uAF07", "\uAF07"], /* Hangul Syllable */ + ["\uAF08", "\uAF08"], /* Hangul Syllable */ + ["\uAF09", "\uAF09"], /* Hangul Syllable */ + ["\uAF0A", "\uAF0A"], /* Hangul Syllable */ + ["\uAF0B", "\uAF0B"], /* Hangul Syllable */ + ["\uAF0C", "\uAF0C"], /* Hangul Syllable */ + ["\uAF0D", "\uAF0D"], /* Hangul Syllable */ + ["\uAF0E", "\uAF0E"], /* Hangul Syllable */ + ["\uAF0F", "\uAF0F"], /* Hangul Syllable */ + ["\uAF10", "\uAF10"], /* Hangul Syllable */ + ["\uAF11", "\uAF11"], /* Hangul Syllable */ + ["\uAF12", "\uAF12"], /* Hangul Syllable */ + ["\uAF13", "\uAF13"], /* Hangul Syllable */ + ["\uAF14", "\uAF14"], /* Hangul Syllable */ + ["\uAF15", "\uAF15"], /* Hangul Syllable */ + ["\uAF16", "\uAF16"], /* Hangul Syllable */ + ["\uAF17", "\uAF17"], /* Hangul Syllable */ + ["\uAF18", "\uAF18"], /* Hangul Syllable */ + ["\uAF19", "\uAF19"], /* Hangul Syllable */ + ["\uAF1A", "\uAF1A"], /* Hangul Syllable */ + ["\uAF1B", "\uAF1B"], /* Hangul Syllable */ + ["\uAF1C", "\uAF1C"], /* Hangul Syllable */ + ["\uAF1D", "\uAF1D"], /* Hangul Syllable */ + ["\uAF1E", "\uAF1E"], /* Hangul Syllable */ + ["\uAF1F", "\uAF1F"], /* Hangul Syllable */ + ["\uAF20", "\uAF20"], /* Hangul Syllable */ + ["\uAF21", "\uAF21"], /* Hangul Syllable */ + ["\uAF22", "\uAF22"], /* Hangul Syllable */ + ["\uAF23", "\uAF23"], /* Hangul Syllable */ + ["\uAF24", "\uAF24"], /* Hangul Syllable */ + ["\uAF25", "\uAF25"], /* Hangul Syllable */ + ["\uAF26", "\uAF26"], /* Hangul Syllable */ + ["\uAF27", "\uAF27"], /* Hangul Syllable */ + ["\uAF28", "\uAF28"], /* Hangul Syllable */ + ["\uAF29", "\uAF29"], /* Hangul Syllable */ + ["\uAF2A", "\uAF2A"], /* Hangul Syllable */ + ["\uAF2B", "\uAF2B"], /* Hangul Syllable */ + ["\uAF2C", "\uAF2C"], /* Hangul Syllable */ + ["\uAF2D", "\uAF2D"], /* Hangul Syllable */ + ["\uAF2E", "\uAF2E"], /* Hangul Syllable */ + ["\uAF2F", "\uAF2F"], /* Hangul Syllable */ + ["\uAF30", "\uAF30"], /* Hangul Syllable */ + ["\uAF31", "\uAF31"], /* Hangul Syllable */ + ["\uAF32", "\uAF32"], /* Hangul Syllable */ + ["\uAF33", "\uAF33"], /* Hangul Syllable */ + ["\uAF34", "\uAF34"], /* Hangul Syllable */ + ["\uAF35", "\uAF35"], /* Hangul Syllable */ + ["\uAF36", "\uAF36"], /* Hangul Syllable */ + ["\uAF37", "\uAF37"], /* Hangul Syllable */ + ["\uAF38", "\uAF38"], /* Hangul Syllable */ + ["\uAF39", "\uAF39"], /* Hangul Syllable */ + ["\uAF3A", "\uAF3A"], /* Hangul Syllable */ + ["\uAF3B", "\uAF3B"], /* Hangul Syllable */ + ["\uAF3C", "\uAF3C"], /* Hangul Syllable */ + ["\uAF3D", "\uAF3D"], /* Hangul Syllable */ + ["\uAF3E", "\uAF3E"], /* Hangul Syllable */ + ["\uAF3F", "\uAF3F"], /* Hangul Syllable */ + ["\uAF40", "\uAF40"], /* Hangul Syllable */ + ["\uAF41", "\uAF41"], /* Hangul Syllable */ + ["\uAF42", "\uAF42"], /* Hangul Syllable */ + ["\uAF43", "\uAF43"], /* Hangul Syllable */ + ["\uAF44", "\uAF44"], /* Hangul Syllable */ + ["\uAF45", "\uAF45"], /* Hangul Syllable */ + ["\uAF46", "\uAF46"], /* Hangul Syllable */ + ["\uAF47", "\uAF47"], /* Hangul Syllable */ + ["\uAF48", "\uAF48"], /* Hangul Syllable */ + ["\uAF49", "\uAF49"], /* Hangul Syllable */ + ["\uAF4A", "\uAF4A"], /* Hangul Syllable */ + ["\uAF4B", "\uAF4B"], /* Hangul Syllable */ + ["\uAF4C", "\uAF4C"], /* Hangul Syllable */ + ["\uAF4D", "\uAF4D"], /* Hangul Syllable */ + ["\uAF4E", "\uAF4E"], /* Hangul Syllable */ + ["\uAF4F", "\uAF4F"], /* Hangul Syllable */ + ["\uAF50", "\uAF50"], /* Hangul Syllable */ + ["\uAF51", "\uAF51"], /* Hangul Syllable */ + ["\uAF52", "\uAF52"], /* Hangul Syllable */ + ["\uAF53", "\uAF53"], /* Hangul Syllable */ + ["\uAF54", "\uAF54"], /* Hangul Syllable */ + ["\uAF55", "\uAF55"], /* Hangul Syllable */ + ["\uAF56", "\uAF56"], /* Hangul Syllable */ + ["\uAF57", "\uAF57"], /* Hangul Syllable */ + ["\uAF58", "\uAF58"], /* Hangul Syllable */ + ["\uAF59", "\uAF59"], /* Hangul Syllable */ + ["\uAF5A", "\uAF5A"], /* Hangul Syllable */ + ["\uAF5B", "\uAF5B"], /* Hangul Syllable */ + ["\uAF5C", "\uAF5C"], /* Hangul Syllable */ + ["\uAF5D", "\uAF5D"], /* Hangul Syllable */ + ["\uAF5E", "\uAF5E"], /* Hangul Syllable */ + ["\uAF5F", "\uAF5F"], /* Hangul Syllable */ + ["\uAF60", "\uAF60"], /* Hangul Syllable */ + ["\uAF61", "\uAF61"], /* Hangul Syllable */ + ["\uAF62", "\uAF62"], /* Hangul Syllable */ + ["\uAF63", "\uAF63"], /* Hangul Syllable */ + ["\uAF64", "\uAF64"], /* Hangul Syllable */ + ["\uAF65", "\uAF65"], /* Hangul Syllable */ + ["\uAF66", "\uAF66"], /* Hangul Syllable */ + ["\uAF67", "\uAF67"], /* Hangul Syllable */ + ["\uAF68", "\uAF68"], /* Hangul Syllable */ + ["\uAF69", "\uAF69"], /* Hangul Syllable */ + ["\uAF6A", "\uAF6A"], /* Hangul Syllable */ + ["\uAF6B", "\uAF6B"], /* Hangul Syllable */ + ["\uAF6C", "\uAF6C"], /* Hangul Syllable */ + ["\uAF6D", "\uAF6D"], /* Hangul Syllable */ + ["\uAF6E", "\uAF6E"], /* Hangul Syllable */ + ["\uAF6F", "\uAF6F"], /* Hangul Syllable */ + ["\uAF70", "\uAF70"], /* Hangul Syllable */ + ["\uAF71", "\uAF71"], /* Hangul Syllable */ + ["\uAF72", "\uAF72"], /* Hangul Syllable */ + ["\uAF73", "\uAF73"], /* Hangul Syllable */ + ["\uAF74", "\uAF74"], /* Hangul Syllable */ + ["\uAF75", "\uAF75"], /* Hangul Syllable */ + ["\uAF76", "\uAF76"], /* Hangul Syllable */ + ["\uAF77", "\uAF77"], /* Hangul Syllable */ + ["\uAF78", "\uAF78"], /* Hangul Syllable */ + ["\uAF79", "\uAF79"], /* Hangul Syllable */ + ["\uAF7A", "\uAF7A"], /* Hangul Syllable */ + ["\uAF7B", "\uAF7B"], /* Hangul Syllable */ + ["\uAF7C", "\uAF7C"], /* Hangul Syllable */ + ["\uAF7D", "\uAF7D"], /* Hangul Syllable */ + ["\uAF7E", "\uAF7E"], /* Hangul Syllable */ + ["\uAF7F", "\uAF7F"], /* Hangul Syllable */ + ["\uAF80", "\uAF80"], /* Hangul Syllable */ + ["\uAF81", "\uAF81"], /* Hangul Syllable */ + ["\uAF82", "\uAF82"], /* Hangul Syllable */ + ["\uAF83", "\uAF83"], /* Hangul Syllable */ + ["\uAF84", "\uAF84"], /* Hangul Syllable */ + ["\uAF85", "\uAF85"], /* Hangul Syllable */ + ["\uAF86", "\uAF86"], /* Hangul Syllable */ + ["\uAF87", "\uAF87"], /* Hangul Syllable */ + ["\uAF88", "\uAF88"], /* Hangul Syllable */ + ["\uAF89", "\uAF89"], /* Hangul Syllable */ + ["\uAF8A", "\uAF8A"], /* Hangul Syllable */ + ["\uAF8B", "\uAF8B"], /* Hangul Syllable */ + ["\uAF8C", "\uAF8C"], /* Hangul Syllable */ + ["\uAF8D", "\uAF8D"], /* Hangul Syllable */ + ["\uAF8E", "\uAF8E"], /* Hangul Syllable */ + ["\uAF8F", "\uAF8F"], /* Hangul Syllable */ + ["\uAF90", "\uAF90"], /* Hangul Syllable */ + ["\uAF91", "\uAF91"], /* Hangul Syllable */ + ["\uAF92", "\uAF92"], /* Hangul Syllable */ + ["\uAF93", "\uAF93"], /* Hangul Syllable */ + ["\uAF94", "\uAF94"], /* Hangul Syllable */ + ["\uAF95", "\uAF95"], /* Hangul Syllable */ + ["\uAF96", "\uAF96"], /* Hangul Syllable */ + ["\uAF97", "\uAF97"], /* Hangul Syllable */ + ["\uAF98", "\uAF98"], /* Hangul Syllable */ + ["\uAF99", "\uAF99"], /* Hangul Syllable */ + ["\uAF9A", "\uAF9A"], /* Hangul Syllable */ + ["\uAF9B", "\uAF9B"], /* Hangul Syllable */ + ["\uAF9C", "\uAF9C"], /* Hangul Syllable */ + ["\uAF9D", "\uAF9D"], /* Hangul Syllable */ + ["\uAF9E", "\uAF9E"], /* Hangul Syllable */ + ["\uAF9F", "\uAF9F"], /* Hangul Syllable */ + ["\uAFA0", "\uAFA0"], /* Hangul Syllable */ + ["\uAFA1", "\uAFA1"], /* Hangul Syllable */ + ["\uAFA2", "\uAFA2"], /* Hangul Syllable */ + ["\uAFA3", "\uAFA3"], /* Hangul Syllable */ + ["\uAFA4", "\uAFA4"], /* Hangul Syllable */ + ["\uAFA5", "\uAFA5"], /* Hangul Syllable */ + ["\uAFA6", "\uAFA6"], /* Hangul Syllable */ + ["\uAFA7", "\uAFA7"], /* Hangul Syllable */ + ["\uAFA8", "\uAFA8"], /* Hangul Syllable */ + ["\uAFA9", "\uAFA9"], /* Hangul Syllable */ + ["\uAFAA", "\uAFAA"], /* Hangul Syllable */ + ["\uAFAB", "\uAFAB"], /* Hangul Syllable */ + ["\uAFAC", "\uAFAC"], /* Hangul Syllable */ + ["\uAFAD", "\uAFAD"], /* Hangul Syllable */ + ["\uAFAE", "\uAFAE"], /* Hangul Syllable */ + ["\uAFAF", "\uAFAF"], /* Hangul Syllable */ + ["\uAFB0", "\uAFB0"], /* Hangul Syllable */ + ["\uAFB1", "\uAFB1"], /* Hangul Syllable */ + ["\uAFB2", "\uAFB2"], /* Hangul Syllable */ + ["\uAFB3", "\uAFB3"], /* Hangul Syllable */ + ["\uAFB4", "\uAFB4"], /* Hangul Syllable */ + ["\uAFB5", "\uAFB5"], /* Hangul Syllable */ + ["\uAFB6", "\uAFB6"], /* Hangul Syllable */ + ["\uAFB7", "\uAFB7"], /* Hangul Syllable */ + ["\uAFB8", "\uAFB8"], /* Hangul Syllable */ + ["\uAFB9", "\uAFB9"], /* Hangul Syllable */ + ["\uAFBA", "\uAFBA"], /* Hangul Syllable */ + ["\uAFBB", "\uAFBB"], /* Hangul Syllable */ + ["\uAFBC", "\uAFBC"], /* Hangul Syllable */ + ["\uAFBD", "\uAFBD"], /* Hangul Syllable */ + ["\uAFBE", "\uAFBE"], /* Hangul Syllable */ + ["\uAFBF", "\uAFBF"], /* Hangul Syllable */ + ["\uAFC0", "\uAFC0"], /* Hangul Syllable */ + ["\uAFC1", "\uAFC1"], /* Hangul Syllable */ + ["\uAFC2", "\uAFC2"], /* Hangul Syllable */ + ["\uAFC3", "\uAFC3"], /* Hangul Syllable */ + ["\uAFC4", "\uAFC4"], /* Hangul Syllable */ + ["\uAFC5", "\uAFC5"], /* Hangul Syllable */ + ["\uAFC6", "\uAFC6"], /* Hangul Syllable */ + ["\uAFC7", "\uAFC7"], /* Hangul Syllable */ + ["\uAFC8", "\uAFC8"], /* Hangul Syllable */ + ["\uAFC9", "\uAFC9"], /* Hangul Syllable */ + ["\uAFCA", "\uAFCA"], /* Hangul Syllable */ + ["\uAFCB", "\uAFCB"], /* Hangul Syllable */ + ["\uAFCC", "\uAFCC"], /* Hangul Syllable */ + ["\uAFCD", "\uAFCD"], /* Hangul Syllable */ + ["\uAFCE", "\uAFCE"], /* Hangul Syllable */ + ["\uAFCF", "\uAFCF"], /* Hangul Syllable */ + ["\uAFD0", "\uAFD0"], /* Hangul Syllable */ + ["\uAFD1", "\uAFD1"], /* Hangul Syllable */ + ["\uAFD2", "\uAFD2"], /* Hangul Syllable */ + ["\uAFD3", "\uAFD3"], /* Hangul Syllable */ + ["\uAFD4", "\uAFD4"], /* Hangul Syllable */ + ["\uAFD5", "\uAFD5"], /* Hangul Syllable */ + ["\uAFD6", "\uAFD6"], /* Hangul Syllable */ + ["\uAFD7", "\uAFD7"], /* Hangul Syllable */ + ["\uAFD8", "\uAFD8"], /* Hangul Syllable */ + ["\uAFD9", "\uAFD9"], /* Hangul Syllable */ + ["\uAFDA", "\uAFDA"], /* Hangul Syllable */ + ["\uAFDB", "\uAFDB"], /* Hangul Syllable */ + ["\uAFDC", "\uAFDC"], /* Hangul Syllable */ + ["\uAFDD", "\uAFDD"], /* Hangul Syllable */ + ["\uAFDE", "\uAFDE"], /* Hangul Syllable */ + ["\uAFDF", "\uAFDF"], /* Hangul Syllable */ + ["\uAFE0", "\uAFE0"], /* Hangul Syllable */ + ["\uAFE1", "\uAFE1"], /* Hangul Syllable */ + ["\uAFE2", "\uAFE2"], /* Hangul Syllable */ + ["\uAFE3", "\uAFE3"], /* Hangul Syllable */ + ["\uAFE4", "\uAFE4"], /* Hangul Syllable */ + ["\uAFE5", "\uAFE5"], /* Hangul Syllable */ + ["\uAFE6", "\uAFE6"], /* Hangul Syllable */ + ["\uAFE7", "\uAFE7"], /* Hangul Syllable */ + ["\uAFE8", "\uAFE8"], /* Hangul Syllable */ + ["\uAFE9", "\uAFE9"], /* Hangul Syllable */ + ["\uAFEA", "\uAFEA"], /* Hangul Syllable */ + ["\uAFEB", "\uAFEB"], /* Hangul Syllable */ + ["\uAFEC", "\uAFEC"], /* Hangul Syllable */ + ["\uAFED", "\uAFED"], /* Hangul Syllable */ + ["\uAFEE", "\uAFEE"], /* Hangul Syllable */ + ["\uAFEF", "\uAFEF"], /* Hangul Syllable */ + ["\uAFF0", "\uAFF0"], /* Hangul Syllable */ + ["\uAFF1", "\uAFF1"], /* Hangul Syllable */ + ["\uAFF2", "\uAFF2"], /* Hangul Syllable */ + ["\uAFF3", "\uAFF3"], /* Hangul Syllable */ + ["\uAFF4", "\uAFF4"], /* Hangul Syllable */ + ["\uAFF5", "\uAFF5"], /* Hangul Syllable */ + ["\uAFF6", "\uAFF6"], /* Hangul Syllable */ + ["\uAFF7", "\uAFF7"], /* Hangul Syllable */ + ["\uAFF8", "\uAFF8"], /* Hangul Syllable */ + ["\uAFF9", "\uAFF9"], /* Hangul Syllable */ + ["\uAFFA", "\uAFFA"], /* Hangul Syllable */ + ["\uAFFB", "\uAFFB"], /* Hangul Syllable */ + ["\uAFFC", "\uAFFC"], /* Hangul Syllable */ + ["\uAFFD", "\uAFFD"], /* Hangul Syllable */ + ["\uAFFE", "\uAFFE"], /* Hangul Syllable */ + ["\uAFFF", "\uAFFF"], /* Hangul Syllable */ + ["\uB000", "\uB000"], /* Hangul Syllable */ + ["\uB001", "\uB001"], /* Hangul Syllable */ + ["\uB002", "\uB002"], /* Hangul Syllable */ + ["\uB003", "\uB003"], /* Hangul Syllable */ + ["\uB004", "\uB004"], /* Hangul Syllable */ + ["\uB005", "\uB005"], /* Hangul Syllable */ + ["\uB006", "\uB006"], /* Hangul Syllable */ + ["\uB007", "\uB007"], /* Hangul Syllable */ + ["\uB008", "\uB008"], /* Hangul Syllable */ + ["\uB009", "\uB009"], /* Hangul Syllable */ + ["\uB00A", "\uB00A"], /* Hangul Syllable */ + ["\uB00B", "\uB00B"], /* Hangul Syllable */ + ["\uB00C", "\uB00C"], /* Hangul Syllable */ + ["\uB00D", "\uB00D"], /* Hangul Syllable */ + ["\uB00E", "\uB00E"], /* Hangul Syllable */ + ["\uB00F", "\uB00F"], /* Hangul Syllable */ + ["\uB010", "\uB010"], /* Hangul Syllable */ + ["\uB011", "\uB011"], /* Hangul Syllable */ + ["\uB012", "\uB012"], /* Hangul Syllable */ + ["\uB013", "\uB013"], /* Hangul Syllable */ + ["\uB014", "\uB014"], /* Hangul Syllable */ + ["\uB015", "\uB015"], /* Hangul Syllable */ + ["\uB016", "\uB016"], /* Hangul Syllable */ + ["\uB017", "\uB017"], /* Hangul Syllable */ + ["\uB018", "\uB018"], /* Hangul Syllable */ + ["\uB019", "\uB019"], /* Hangul Syllable */ + ["\uB01A", "\uB01A"], /* Hangul Syllable */ + ["\uB01B", "\uB01B"], /* Hangul Syllable */ + ["\uB01C", "\uB01C"], /* Hangul Syllable */ + ["\uB01D", "\uB01D"], /* Hangul Syllable */ + ["\uB01E", "\uB01E"], /* Hangul Syllable */ + ["\uB01F", "\uB01F"], /* Hangul Syllable */ + ["\uB020", "\uB020"], /* Hangul Syllable */ + ["\uB021", "\uB021"], /* Hangul Syllable */ + ["\uB022", "\uB022"], /* Hangul Syllable */ + ["\uB023", "\uB023"], /* Hangul Syllable */ + ["\uB024", "\uB024"], /* Hangul Syllable */ + ["\uB025", "\uB025"], /* Hangul Syllable */ + ["\uB026", "\uB026"], /* Hangul Syllable */ + ["\uB027", "\uB027"], /* Hangul Syllable */ + ["\uB028", "\uB028"], /* Hangul Syllable */ + ["\uB029", "\uB029"], /* Hangul Syllable */ + ["\uB02A", "\uB02A"], /* Hangul Syllable */ + ["\uB02B", "\uB02B"], /* Hangul Syllable */ + ["\uB02C", "\uB02C"], /* Hangul Syllable */ + ["\uB02D", "\uB02D"], /* Hangul Syllable */ + ["\uB02E", "\uB02E"], /* Hangul Syllable */ + ["\uB02F", "\uB02F"], /* Hangul Syllable */ + ["\uB030", "\uB030"], /* Hangul Syllable */ + ["\uB031", "\uB031"], /* Hangul Syllable */ + ["\uB032", "\uB032"], /* Hangul Syllable */ + ["\uB033", "\uB033"], /* Hangul Syllable */ + ["\uB034", "\uB034"], /* Hangul Syllable */ + ["\uB035", "\uB035"], /* Hangul Syllable */ + ["\uB036", "\uB036"], /* Hangul Syllable */ + ["\uB037", "\uB037"], /* Hangul Syllable */ + ["\uB038", "\uB038"], /* Hangul Syllable */ + ["\uB039", "\uB039"], /* Hangul Syllable */ + ["\uB03A", "\uB03A"], /* Hangul Syllable */ + ["\uB03B", "\uB03B"], /* Hangul Syllable */ + ["\uB03C", "\uB03C"], /* Hangul Syllable */ + ["\uB03D", "\uB03D"], /* Hangul Syllable */ + ["\uB03E", "\uB03E"], /* Hangul Syllable */ + ["\uB03F", "\uB03F"], /* Hangul Syllable */ + ["\uB040", "\uB040"], /* Hangul Syllable */ + ["\uB041", "\uB041"], /* Hangul Syllable */ + ["\uB042", "\uB042"], /* Hangul Syllable */ + ["\uB043", "\uB043"], /* Hangul Syllable */ + ["\uB044", "\uB044"], /* Hangul Syllable */ + ["\uB045", "\uB045"], /* Hangul Syllable */ + ["\uB046", "\uB046"], /* Hangul Syllable */ + ["\uB047", "\uB047"], /* Hangul Syllable */ + ["\uB048", "\uB048"], /* Hangul Syllable */ + ["\uB049", "\uB049"], /* Hangul Syllable */ + ["\uB04A", "\uB04A"], /* Hangul Syllable */ + ["\uB04B", "\uB04B"], /* Hangul Syllable */ + ["\uB04C", "\uB04C"], /* Hangul Syllable */ + ["\uB04D", "\uB04D"], /* Hangul Syllable */ + ["\uB04E", "\uB04E"], /* Hangul Syllable */ + ["\uB04F", "\uB04F"], /* Hangul Syllable */ + ["\uB050", "\uB050"], /* Hangul Syllable */ + ["\uB051", "\uB051"], /* Hangul Syllable */ + ["\uB052", "\uB052"], /* Hangul Syllable */ + ["\uB053", "\uB053"], /* Hangul Syllable */ + ["\uB054", "\uB054"], /* Hangul Syllable */ + ["\uB055", "\uB055"], /* Hangul Syllable */ + ["\uB056", "\uB056"], /* Hangul Syllable */ + ["\uB057", "\uB057"], /* Hangul Syllable */ + ["\uB058", "\uB058"], /* Hangul Syllable */ + ["\uB059", "\uB059"], /* Hangul Syllable */ + ["\uB05A", "\uB05A"], /* Hangul Syllable */ + ["\uB05B", "\uB05B"], /* Hangul Syllable */ + ["\uB05C", "\uB05C"], /* Hangul Syllable */ + ["\uB05D", "\uB05D"], /* Hangul Syllable */ + ["\uB05E", "\uB05E"], /* Hangul Syllable */ + ["\uB05F", "\uB05F"], /* Hangul Syllable */ + ["\uB060", "\uB060"], /* Hangul Syllable */ + ["\uB061", "\uB061"], /* Hangul Syllable */ + ["\uB062", "\uB062"], /* Hangul Syllable */ + ["\uB063", "\uB063"], /* Hangul Syllable */ + ["\uB064", "\uB064"], /* Hangul Syllable */ + ["\uB065", "\uB065"], /* Hangul Syllable */ + ["\uB066", "\uB066"], /* Hangul Syllable */ + ["\uB067", "\uB067"], /* Hangul Syllable */ + ["\uB068", "\uB068"], /* Hangul Syllable */ + ["\uB069", "\uB069"], /* Hangul Syllable */ + ["\uB06A", "\uB06A"], /* Hangul Syllable */ + ["\uB06B", "\uB06B"], /* Hangul Syllable */ + ["\uB06C", "\uB06C"], /* Hangul Syllable */ + ["\uB06D", "\uB06D"], /* Hangul Syllable */ + ["\uB06E", "\uB06E"], /* Hangul Syllable */ + ["\uB06F", "\uB06F"], /* Hangul Syllable */ + ["\uB070", "\uB070"], /* Hangul Syllable */ + ["\uB071", "\uB071"], /* Hangul Syllable */ + ["\uB072", "\uB072"], /* Hangul Syllable */ + ["\uB073", "\uB073"], /* Hangul Syllable */ + ["\uB074", "\uB074"], /* Hangul Syllable */ + ["\uB075", "\uB075"], /* Hangul Syllable */ + ["\uB076", "\uB076"], /* Hangul Syllable */ + ["\uB077", "\uB077"], /* Hangul Syllable */ + ["\uB078", "\uB078"], /* Hangul Syllable */ + ["\uB079", "\uB079"], /* Hangul Syllable */ + ["\uB07A", "\uB07A"], /* Hangul Syllable */ + ["\uB07B", "\uB07B"], /* Hangul Syllable */ + ["\uB07C", "\uB07C"], /* Hangul Syllable */ + ["\uB07D", "\uB07D"], /* Hangul Syllable */ + ["\uB07E", "\uB07E"], /* Hangul Syllable */ + ["\uB07F", "\uB07F"], /* Hangul Syllable */ + ["\uB080", "\uB080"], /* Hangul Syllable */ + ["\uB081", "\uB081"], /* Hangul Syllable */ + ["\uB082", "\uB082"], /* Hangul Syllable */ + ["\uB083", "\uB083"], /* Hangul Syllable */ + ["\uB084", "\uB084"], /* Hangul Syllable */ + ["\uB085", "\uB085"], /* Hangul Syllable */ + ["\uB086", "\uB086"], /* Hangul Syllable */ + ["\uB087", "\uB087"], /* Hangul Syllable */ + ["\uB088", "\uB088"], /* Hangul Syllable */ + ["\uB089", "\uB089"], /* Hangul Syllable */ + ["\uB08A", "\uB08A"], /* Hangul Syllable */ + ["\uB08B", "\uB08B"], /* Hangul Syllable */ + ["\uB08C", "\uB08C"], /* Hangul Syllable */ + ["\uB08D", "\uB08D"], /* Hangul Syllable */ + ["\uB08E", "\uB08E"], /* Hangul Syllable */ + ["\uB08F", "\uB08F"], /* Hangul Syllable */ + ["\uB090", "\uB090"], /* Hangul Syllable */ + ["\uB091", "\uB091"], /* Hangul Syllable */ + ["\uB092", "\uB092"], /* Hangul Syllable */ + ["\uB093", "\uB093"], /* Hangul Syllable */ + ["\uB094", "\uB094"], /* Hangul Syllable */ + ["\uB095", "\uB095"], /* Hangul Syllable */ + ["\uB096", "\uB096"], /* Hangul Syllable */ + ["\uB097", "\uB097"], /* Hangul Syllable */ + ["\uB098", "\uB098"], /* Hangul Syllable */ + ["\uB099", "\uB099"], /* Hangul Syllable */ + ["\uB09A", "\uB09A"], /* Hangul Syllable */ + ["\uB09B", "\uB09B"], /* Hangul Syllable */ + ["\uB09C", "\uB09C"], /* Hangul Syllable */ + ["\uB09D", "\uB09D"], /* Hangul Syllable */ + ["\uB09E", "\uB09E"], /* Hangul Syllable */ + ["\uB09F", "\uB09F"], /* Hangul Syllable */ + ["\uB0A0", "\uB0A0"], /* Hangul Syllable */ + ["\uB0A1", "\uB0A1"], /* Hangul Syllable */ + ["\uB0A2", "\uB0A2"], /* Hangul Syllable */ + ["\uB0A3", "\uB0A3"], /* Hangul Syllable */ + ["\uB0A4", "\uB0A4"], /* Hangul Syllable */ + ["\uB0A5", "\uB0A5"], /* Hangul Syllable */ + ["\uB0A6", "\uB0A6"], /* Hangul Syllable */ + ["\uB0A7", "\uB0A7"], /* Hangul Syllable */ + ["\uB0A8", "\uB0A8"], /* Hangul Syllable */ + ["\uB0A9", "\uB0A9"], /* Hangul Syllable */ + ["\uB0AA", "\uB0AA"], /* Hangul Syllable */ + ["\uB0AB", "\uB0AB"], /* Hangul Syllable */ + ["\uB0AC", "\uB0AC"], /* Hangul Syllable */ + ["\uB0AD", "\uB0AD"], /* Hangul Syllable */ + ["\uB0AE", "\uB0AE"], /* Hangul Syllable */ + ["\uB0AF", "\uB0AF"], /* Hangul Syllable */ + ["\uB0B0", "\uB0B0"], /* Hangul Syllable */ + ["\uB0B1", "\uB0B1"], /* Hangul Syllable */ + ["\uB0B2", "\uB0B2"], /* Hangul Syllable */ + ["\uB0B3", "\uB0B3"], /* Hangul Syllable */ + ["\uB0B4", "\uB0B4"], /* Hangul Syllable */ + ["\uB0B5", "\uB0B5"], /* Hangul Syllable */ + ["\uB0B6", "\uB0B6"], /* Hangul Syllable */ + ["\uB0B7", "\uB0B7"], /* Hangul Syllable */ + ["\uB0B8", "\uB0B8"], /* Hangul Syllable */ + ["\uB0B9", "\uB0B9"], /* Hangul Syllable */ + ["\uB0BA", "\uB0BA"], /* Hangul Syllable */ + ["\uB0BB", "\uB0BB"], /* Hangul Syllable */ + ["\uB0BC", "\uB0BC"], /* Hangul Syllable */ + ["\uB0BD", "\uB0BD"], /* Hangul Syllable */ + ["\uB0BE", "\uB0BE"], /* Hangul Syllable */ + ["\uB0BF", "\uB0BF"], /* Hangul Syllable */ + ["\uB0C0", "\uB0C0"], /* Hangul Syllable */ + ["\uB0C1", "\uB0C1"], /* Hangul Syllable */ + ["\uB0C2", "\uB0C2"], /* Hangul Syllable */ + ["\uB0C3", "\uB0C3"], /* Hangul Syllable */ + ["\uB0C4", "\uB0C4"], /* Hangul Syllable */ + ["\uB0C5", "\uB0C5"], /* Hangul Syllable */ + ["\uB0C6", "\uB0C6"], /* Hangul Syllable */ + ["\uB0C7", "\uB0C7"], /* Hangul Syllable */ + ["\uB0C8", "\uB0C8"], /* Hangul Syllable */ + ["\uB0C9", "\uB0C9"], /* Hangul Syllable */ + ["\uB0CA", "\uB0CA"], /* Hangul Syllable */ + ["\uB0CB", "\uB0CB"], /* Hangul Syllable */ + ["\uB0CC", "\uB0CC"], /* Hangul Syllable */ + ["\uB0CD", "\uB0CD"], /* Hangul Syllable */ + ["\uB0CE", "\uB0CE"], /* Hangul Syllable */ + ["\uB0CF", "\uB0CF"], /* Hangul Syllable */ + ["\uB0D0", "\uB0D0"], /* Hangul Syllable */ + ["\uB0D1", "\uB0D1"], /* Hangul Syllable */ + ["\uB0D2", "\uB0D2"], /* Hangul Syllable */ + ["\uB0D3", "\uB0D3"], /* Hangul Syllable */ + ["\uB0D4", "\uB0D4"], /* Hangul Syllable */ + ["\uB0D5", "\uB0D5"], /* Hangul Syllable */ + ["\uB0D6", "\uB0D6"], /* Hangul Syllable */ + ["\uB0D7", "\uB0D7"], /* Hangul Syllable */ + ["\uB0D8", "\uB0D8"], /* Hangul Syllable */ + ["\uB0D9", "\uB0D9"], /* Hangul Syllable */ + ["\uB0DA", "\uB0DA"], /* Hangul Syllable */ + ["\uB0DB", "\uB0DB"], /* Hangul Syllable */ + ["\uB0DC", "\uB0DC"], /* Hangul Syllable */ + ["\uB0DD", "\uB0DD"], /* Hangul Syllable */ + ["\uB0DE", "\uB0DE"], /* Hangul Syllable */ + ["\uB0DF", "\uB0DF"], /* Hangul Syllable */ + ["\uB0E0", "\uB0E0"], /* Hangul Syllable */ + ["\uB0E1", "\uB0E1"], /* Hangul Syllable */ + ["\uB0E2", "\uB0E2"], /* Hangul Syllable */ + ["\uB0E3", "\uB0E3"], /* Hangul Syllable */ + ["\uB0E4", "\uB0E4"], /* Hangul Syllable */ + ["\uB0E5", "\uB0E5"], /* Hangul Syllable */ + ["\uB0E6", "\uB0E6"], /* Hangul Syllable */ + ["\uB0E7", "\uB0E7"], /* Hangul Syllable */ + ["\uB0E8", "\uB0E8"], /* Hangul Syllable */ + ["\uB0E9", "\uB0E9"], /* Hangul Syllable */ + ["\uB0EA", "\uB0EA"], /* Hangul Syllable */ + ["\uB0EB", "\uB0EB"], /* Hangul Syllable */ + ["\uB0EC", "\uB0EC"], /* Hangul Syllable */ + ["\uB0ED", "\uB0ED"], /* Hangul Syllable */ + ["\uB0EE", "\uB0EE"], /* Hangul Syllable */ + ["\uB0EF", "\uB0EF"], /* Hangul Syllable */ + ["\uB0F0", "\uB0F0"], /* Hangul Syllable */ + ["\uB0F1", "\uB0F1"], /* Hangul Syllable */ + ["\uB0F2", "\uB0F2"], /* Hangul Syllable */ + ["\uB0F3", "\uB0F3"], /* Hangul Syllable */ + ["\uB0F4", "\uB0F4"], /* Hangul Syllable */ + ["\uB0F5", "\uB0F5"], /* Hangul Syllable */ + ["\uB0F6", "\uB0F6"], /* Hangul Syllable */ + ["\uB0F7", "\uB0F7"], /* Hangul Syllable */ + ["\uB0F8", "\uB0F8"], /* Hangul Syllable */ + ["\uB0F9", "\uB0F9"], /* Hangul Syllable */ + ["\uB0FA", "\uB0FA"], /* Hangul Syllable */ + ["\uB0FB", "\uB0FB"], /* Hangul Syllable */ + ["\uB0FC", "\uB0FC"], /* Hangul Syllable */ + ["\uB0FD", "\uB0FD"], /* Hangul Syllable */ + ["\uB0FE", "\uB0FE"], /* Hangul Syllable */ + ["\uB0FF", "\uB0FF"], /* Hangul Syllable */ + ["\uB100", "\uB100"], /* Hangul Syllable */ + ["\uB101", "\uB101"], /* Hangul Syllable */ + ["\uB102", "\uB102"], /* Hangul Syllable */ + ["\uB103", "\uB103"], /* Hangul Syllable */ + ["\uB104", "\uB104"], /* Hangul Syllable */ + ["\uB105", "\uB105"], /* Hangul Syllable */ + ["\uB106", "\uB106"], /* Hangul Syllable */ + ["\uB107", "\uB107"], /* Hangul Syllable */ + ["\uB108", "\uB108"], /* Hangul Syllable */ + ["\uB109", "\uB109"], /* Hangul Syllable */ + ["\uB10A", "\uB10A"], /* Hangul Syllable */ + ["\uB10B", "\uB10B"], /* Hangul Syllable */ + ["\uB10C", "\uB10C"], /* Hangul Syllable */ + ["\uB10D", "\uB10D"], /* Hangul Syllable */ + ["\uB10E", "\uB10E"], /* Hangul Syllable */ + ["\uB10F", "\uB10F"], /* Hangul Syllable */ + ["\uB110", "\uB110"], /* Hangul Syllable */ + ["\uB111", "\uB111"], /* Hangul Syllable */ + ["\uB112", "\uB112"], /* Hangul Syllable */ + ["\uB113", "\uB113"], /* Hangul Syllable */ + ["\uB114", "\uB114"], /* Hangul Syllable */ + ["\uB115", "\uB115"], /* Hangul Syllable */ + ["\uB116", "\uB116"], /* Hangul Syllable */ + ["\uB117", "\uB117"], /* Hangul Syllable */ + ["\uB118", "\uB118"], /* Hangul Syllable */ + ["\uB119", "\uB119"], /* Hangul Syllable */ + ["\uB11A", "\uB11A"], /* Hangul Syllable */ + ["\uB11B", "\uB11B"], /* Hangul Syllable */ + ["\uB11C", "\uB11C"], /* Hangul Syllable */ + ["\uB11D", "\uB11D"], /* Hangul Syllable */ + ["\uB11E", "\uB11E"], /* Hangul Syllable */ + ["\uB11F", "\uB11F"], /* Hangul Syllable */ + ["\uB120", "\uB120"], /* Hangul Syllable */ + ["\uB121", "\uB121"], /* Hangul Syllable */ + ["\uB122", "\uB122"], /* Hangul Syllable */ + ["\uB123", "\uB123"], /* Hangul Syllable */ + ["\uB124", "\uB124"], /* Hangul Syllable */ + ["\uB125", "\uB125"], /* Hangul Syllable */ + ["\uB126", "\uB126"], /* Hangul Syllable */ + ["\uB127", "\uB127"], /* Hangul Syllable */ + ["\uB128", "\uB128"], /* Hangul Syllable */ + ["\uB129", "\uB129"], /* Hangul Syllable */ + ["\uB12A", "\uB12A"], /* Hangul Syllable */ + ["\uB12B", "\uB12B"], /* Hangul Syllable */ + ["\uB12C", "\uB12C"], /* Hangul Syllable */ + ["\uB12D", "\uB12D"], /* Hangul Syllable */ + ["\uB12E", "\uB12E"], /* Hangul Syllable */ + ["\uB12F", "\uB12F"], /* Hangul Syllable */ + ["\uB130", "\uB130"], /* Hangul Syllable */ + ["\uB131", "\uB131"], /* Hangul Syllable */ + ["\uB132", "\uB132"], /* Hangul Syllable */ + ["\uB133", "\uB133"], /* Hangul Syllable */ + ["\uB134", "\uB134"], /* Hangul Syllable */ + ["\uB135", "\uB135"], /* Hangul Syllable */ + ["\uB136", "\uB136"], /* Hangul Syllable */ + ["\uB137", "\uB137"], /* Hangul Syllable */ + ["\uB138", "\uB138"], /* Hangul Syllable */ + ["\uB139", "\uB139"], /* Hangul Syllable */ + ["\uB13A", "\uB13A"], /* Hangul Syllable */ + ["\uB13B", "\uB13B"], /* Hangul Syllable */ + ["\uB13C", "\uB13C"], /* Hangul Syllable */ + ["\uB13D", "\uB13D"], /* Hangul Syllable */ + ["\uB13E", "\uB13E"], /* Hangul Syllable */ + ["\uB13F", "\uB13F"], /* Hangul Syllable */ + ["\uB140", "\uB140"], /* Hangul Syllable */ + ["\uB141", "\uB141"], /* Hangul Syllable */ + ["\uB142", "\uB142"], /* Hangul Syllable */ + ["\uB143", "\uB143"], /* Hangul Syllable */ + ["\uB144", "\uB144"], /* Hangul Syllable */ + ["\uB145", "\uB145"], /* Hangul Syllable */ + ["\uB146", "\uB146"], /* Hangul Syllable */ + ["\uB147", "\uB147"], /* Hangul Syllable */ + ["\uB148", "\uB148"], /* Hangul Syllable */ + ["\uB149", "\uB149"], /* Hangul Syllable */ + ["\uB14A", "\uB14A"], /* Hangul Syllable */ + ["\uB14B", "\uB14B"], /* Hangul Syllable */ + ["\uB14C", "\uB14C"], /* Hangul Syllable */ + ["\uB14D", "\uB14D"], /* Hangul Syllable */ + ["\uB14E", "\uB14E"], /* Hangul Syllable */ + ["\uB14F", "\uB14F"], /* Hangul Syllable */ + ["\uB150", "\uB150"], /* Hangul Syllable */ + ["\uB151", "\uB151"], /* Hangul Syllable */ + ["\uB152", "\uB152"], /* Hangul Syllable */ + ["\uB153", "\uB153"], /* Hangul Syllable */ + ["\uB154", "\uB154"], /* Hangul Syllable */ + ["\uB155", "\uB155"], /* Hangul Syllable */ + ["\uB156", "\uB156"], /* Hangul Syllable */ + ["\uB157", "\uB157"], /* Hangul Syllable */ + ["\uB158", "\uB158"], /* Hangul Syllable */ + ["\uB159", "\uB159"], /* Hangul Syllable */ + ["\uB15A", "\uB15A"], /* Hangul Syllable */ + ["\uB15B", "\uB15B"], /* Hangul Syllable */ + ["\uB15C", "\uB15C"], /* Hangul Syllable */ + ["\uB15D", "\uB15D"], /* Hangul Syllable */ + ["\uB15E", "\uB15E"], /* Hangul Syllable */ + ["\uB15F", "\uB15F"], /* Hangul Syllable */ + ["\uB160", "\uB160"], /* Hangul Syllable */ + ["\uB161", "\uB161"], /* Hangul Syllable */ + ["\uB162", "\uB162"], /* Hangul Syllable */ + ["\uB163", "\uB163"], /* Hangul Syllable */ + ["\uB164", "\uB164"], /* Hangul Syllable */ + ["\uB165", "\uB165"], /* Hangul Syllable */ + ["\uB166", "\uB166"], /* Hangul Syllable */ + ["\uB167", "\uB167"], /* Hangul Syllable */ + ["\uB168", "\uB168"], /* Hangul Syllable */ + ["\uB169", "\uB169"], /* Hangul Syllable */ + ["\uB16A", "\uB16A"], /* Hangul Syllable */ + ["\uB16B", "\uB16B"], /* Hangul Syllable */ + ["\uB16C", "\uB16C"], /* Hangul Syllable */ + ["\uB16D", "\uB16D"], /* Hangul Syllable */ + ["\uB16E", "\uB16E"], /* Hangul Syllable */ + ["\uB16F", "\uB16F"], /* Hangul Syllable */ + ["\uB170", "\uB170"], /* Hangul Syllable */ + ["\uB171", "\uB171"], /* Hangul Syllable */ + ["\uB172", "\uB172"], /* Hangul Syllable */ + ["\uB173", "\uB173"], /* Hangul Syllable */ + ["\uB174", "\uB174"], /* Hangul Syllable */ + ["\uB175", "\uB175"], /* Hangul Syllable */ + ["\uB176", "\uB176"], /* Hangul Syllable */ + ["\uB177", "\uB177"], /* Hangul Syllable */ + ["\uB178", "\uB178"], /* Hangul Syllable */ + ["\uB179", "\uB179"], /* Hangul Syllable */ + ["\uB17A", "\uB17A"], /* Hangul Syllable */ + ["\uB17B", "\uB17B"], /* Hangul Syllable */ + ["\uB17C", "\uB17C"], /* Hangul Syllable */ + ["\uB17D", "\uB17D"], /* Hangul Syllable */ + ["\uB17E", "\uB17E"], /* Hangul Syllable */ + ["\uB17F", "\uB17F"], /* Hangul Syllable */ + ["\uB180", "\uB180"], /* Hangul Syllable */ + ["\uB181", "\uB181"], /* Hangul Syllable */ + ["\uB182", "\uB182"], /* Hangul Syllable */ + ["\uB183", "\uB183"], /* Hangul Syllable */ + ["\uB184", "\uB184"], /* Hangul Syllable */ + ["\uB185", "\uB185"], /* Hangul Syllable */ + ["\uB186", "\uB186"], /* Hangul Syllable */ + ["\uB187", "\uB187"], /* Hangul Syllable */ + ["\uB188", "\uB188"], /* Hangul Syllable */ + ["\uB189", "\uB189"], /* Hangul Syllable */ + ["\uB18A", "\uB18A"], /* Hangul Syllable */ + ["\uB18B", "\uB18B"], /* Hangul Syllable */ + ["\uB18C", "\uB18C"], /* Hangul Syllable */ + ["\uB18D", "\uB18D"], /* Hangul Syllable */ + ["\uB18E", "\uB18E"], /* Hangul Syllable */ + ["\uB18F", "\uB18F"], /* Hangul Syllable */ + ["\uB190", "\uB190"], /* Hangul Syllable */ + ["\uB191", "\uB191"], /* Hangul Syllable */ + ["\uB192", "\uB192"], /* Hangul Syllable */ + ["\uB193", "\uB193"], /* Hangul Syllable */ + ["\uB194", "\uB194"], /* Hangul Syllable */ + ["\uB195", "\uB195"], /* Hangul Syllable */ + ["\uB196", "\uB196"], /* Hangul Syllable */ + ["\uB197", "\uB197"], /* Hangul Syllable */ + ["\uB198", "\uB198"], /* Hangul Syllable */ + ["\uB199", "\uB199"], /* Hangul Syllable */ + ["\uB19A", "\uB19A"], /* Hangul Syllable */ + ["\uB19B", "\uB19B"], /* Hangul Syllable */ + ["\uB19C", "\uB19C"], /* Hangul Syllable */ + ["\uB19D", "\uB19D"], /* Hangul Syllable */ + ["\uB19E", "\uB19E"], /* Hangul Syllable */ + ["\uB19F", "\uB19F"], /* Hangul Syllable */ + ["\uB1A0", "\uB1A0"], /* Hangul Syllable */ + ["\uB1A1", "\uB1A1"], /* Hangul Syllable */ + ["\uB1A2", "\uB1A2"], /* Hangul Syllable */ + ["\uB1A3", "\uB1A3"], /* Hangul Syllable */ + ["\uB1A4", "\uB1A4"], /* Hangul Syllable */ + ["\uB1A5", "\uB1A5"], /* Hangul Syllable */ + ["\uB1A6", "\uB1A6"], /* Hangul Syllable */ + ["\uB1A7", "\uB1A7"], /* Hangul Syllable */ + ["\uB1A8", "\uB1A8"], /* Hangul Syllable */ + ["\uB1A9", "\uB1A9"], /* Hangul Syllable */ + ["\uB1AA", "\uB1AA"], /* Hangul Syllable */ + ["\uB1AB", "\uB1AB"], /* Hangul Syllable */ + ["\uB1AC", "\uB1AC"], /* Hangul Syllable */ + ["\uB1AD", "\uB1AD"], /* Hangul Syllable */ + ["\uB1AE", "\uB1AE"], /* Hangul Syllable */ + ["\uB1AF", "\uB1AF"], /* Hangul Syllable */ + ["\uB1B0", "\uB1B0"], /* Hangul Syllable */ + ["\uB1B1", "\uB1B1"], /* Hangul Syllable */ + ["\uB1B2", "\uB1B2"], /* Hangul Syllable */ + ["\uB1B3", "\uB1B3"], /* Hangul Syllable */ + ["\uB1B4", "\uB1B4"], /* Hangul Syllable */ + ["\uB1B5", "\uB1B5"], /* Hangul Syllable */ + ["\uB1B6", "\uB1B6"], /* Hangul Syllable */ + ["\uB1B7", "\uB1B7"], /* Hangul Syllable */ + ["\uB1B8", "\uB1B8"], /* Hangul Syllable */ + ["\uB1B9", "\uB1B9"], /* Hangul Syllable */ + ["\uB1BA", "\uB1BA"], /* Hangul Syllable */ + ["\uB1BB", "\uB1BB"], /* Hangul Syllable */ + ["\uB1BC", "\uB1BC"], /* Hangul Syllable */ + ["\uB1BD", "\uB1BD"], /* Hangul Syllable */ + ["\uB1BE", "\uB1BE"], /* Hangul Syllable */ + ["\uB1BF", "\uB1BF"], /* Hangul Syllable */ + ["\uB1C0", "\uB1C0"], /* Hangul Syllable */ + ["\uB1C1", "\uB1C1"], /* Hangul Syllable */ + ["\uB1C2", "\uB1C2"], /* Hangul Syllable */ + ["\uB1C3", "\uB1C3"], /* Hangul Syllable */ + ["\uB1C4", "\uB1C4"], /* Hangul Syllable */ + ["\uB1C5", "\uB1C5"], /* Hangul Syllable */ + ["\uB1C6", "\uB1C6"], /* Hangul Syllable */ + ["\uB1C7", "\uB1C7"], /* Hangul Syllable */ + ["\uB1C8", "\uB1C8"], /* Hangul Syllable */ + ["\uB1C9", "\uB1C9"], /* Hangul Syllable */ + ["\uB1CA", "\uB1CA"], /* Hangul Syllable */ + ["\uB1CB", "\uB1CB"], /* Hangul Syllable */ + ["\uB1CC", "\uB1CC"], /* Hangul Syllable */ + ["\uB1CD", "\uB1CD"], /* Hangul Syllable */ + ["\uB1CE", "\uB1CE"], /* Hangul Syllable */ + ["\uB1CF", "\uB1CF"], /* Hangul Syllable */ + ["\uB1D0", "\uB1D0"], /* Hangul Syllable */ + ["\uB1D1", "\uB1D1"], /* Hangul Syllable */ + ["\uB1D2", "\uB1D2"], /* Hangul Syllable */ + ["\uB1D3", "\uB1D3"], /* Hangul Syllable */ + ["\uB1D4", "\uB1D4"], /* Hangul Syllable */ + ["\uB1D5", "\uB1D5"], /* Hangul Syllable */ + ["\uB1D6", "\uB1D6"], /* Hangul Syllable */ + ["\uB1D7", "\uB1D7"], /* Hangul Syllable */ + ["\uB1D8", "\uB1D8"], /* Hangul Syllable */ + ["\uB1D9", "\uB1D9"], /* Hangul Syllable */ + ["\uB1DA", "\uB1DA"], /* Hangul Syllable */ + ["\uB1DB", "\uB1DB"], /* Hangul Syllable */ + ["\uB1DC", "\uB1DC"], /* Hangul Syllable */ + ["\uB1DD", "\uB1DD"], /* Hangul Syllable */ + ["\uB1DE", "\uB1DE"], /* Hangul Syllable */ + ["\uB1DF", "\uB1DF"], /* Hangul Syllable */ + ["\uB1E0", "\uB1E0"], /* Hangul Syllable */ + ["\uB1E1", "\uB1E1"], /* Hangul Syllable */ + ["\uB1E2", "\uB1E2"], /* Hangul Syllable */ + ["\uB1E3", "\uB1E3"], /* Hangul Syllable */ + ["\uB1E4", "\uB1E4"], /* Hangul Syllable */ + ["\uB1E5", "\uB1E5"], /* Hangul Syllable */ + ["\uB1E6", "\uB1E6"], /* Hangul Syllable */ + ["\uB1E7", "\uB1E7"], /* Hangul Syllable */ + ["\uB1E8", "\uB1E8"], /* Hangul Syllable */ + ["\uB1E9", "\uB1E9"], /* Hangul Syllable */ + ["\uB1EA", "\uB1EA"], /* Hangul Syllable */ + ["\uB1EB", "\uB1EB"], /* Hangul Syllable */ + ["\uB1EC", "\uB1EC"], /* Hangul Syllable */ + ["\uB1ED", "\uB1ED"], /* Hangul Syllable */ + ["\uB1EE", "\uB1EE"], /* Hangul Syllable */ + ["\uB1EF", "\uB1EF"], /* Hangul Syllable */ + ["\uB1F0", "\uB1F0"], /* Hangul Syllable */ + ["\uB1F1", "\uB1F1"], /* Hangul Syllable */ + ["\uB1F2", "\uB1F2"], /* Hangul Syllable */ + ["\uB1F3", "\uB1F3"], /* Hangul Syllable */ + ["\uB1F4", "\uB1F4"], /* Hangul Syllable */ + ["\uB1F5", "\uB1F5"], /* Hangul Syllable */ + ["\uB1F6", "\uB1F6"], /* Hangul Syllable */ + ["\uB1F7", "\uB1F7"], /* Hangul Syllable */ + ["\uB1F8", "\uB1F8"], /* Hangul Syllable */ + ["\uB1F9", "\uB1F9"], /* Hangul Syllable */ + ["\uB1FA", "\uB1FA"], /* Hangul Syllable */ + ["\uB1FB", "\uB1FB"], /* Hangul Syllable */ + ["\uB1FC", "\uB1FC"], /* Hangul Syllable */ + ["\uB1FD", "\uB1FD"], /* Hangul Syllable */ + ["\uB1FE", "\uB1FE"], /* Hangul Syllable */ + ["\uB1FF", "\uB1FF"], /* Hangul Syllable */ + ["\uB200", "\uB200"], /* Hangul Syllable */ + ["\uB201", "\uB201"], /* Hangul Syllable */ + ["\uB202", "\uB202"], /* Hangul Syllable */ + ["\uB203", "\uB203"], /* Hangul Syllable */ + ["\uB204", "\uB204"], /* Hangul Syllable */ + ["\uB205", "\uB205"], /* Hangul Syllable */ + ["\uB206", "\uB206"], /* Hangul Syllable */ + ["\uB207", "\uB207"], /* Hangul Syllable */ + ["\uB208", "\uB208"], /* Hangul Syllable */ + ["\uB209", "\uB209"], /* Hangul Syllable */ + ["\uB20A", "\uB20A"], /* Hangul Syllable */ + ["\uB20B", "\uB20B"], /* Hangul Syllable */ + ["\uB20C", "\uB20C"], /* Hangul Syllable */ + ["\uB20D", "\uB20D"], /* Hangul Syllable */ + ["\uB20E", "\uB20E"], /* Hangul Syllable */ + ["\uB20F", "\uB20F"], /* Hangul Syllable */ + ["\uB210", "\uB210"], /* Hangul Syllable */ + ["\uB211", "\uB211"], /* Hangul Syllable */ + ["\uB212", "\uB212"], /* Hangul Syllable */ + ["\uB213", "\uB213"], /* Hangul Syllable */ + ["\uB214", "\uB214"], /* Hangul Syllable */ + ["\uB215", "\uB215"], /* Hangul Syllable */ + ["\uB216", "\uB216"], /* Hangul Syllable */ + ["\uB217", "\uB217"], /* Hangul Syllable */ + ["\uB218", "\uB218"], /* Hangul Syllable */ + ["\uB219", "\uB219"], /* Hangul Syllable */ + ["\uB21A", "\uB21A"], /* Hangul Syllable */ + ["\uB21B", "\uB21B"], /* Hangul Syllable */ + ["\uB21C", "\uB21C"], /* Hangul Syllable */ + ["\uB21D", "\uB21D"], /* Hangul Syllable */ + ["\uB21E", "\uB21E"], /* Hangul Syllable */ + ["\uB21F", "\uB21F"], /* Hangul Syllable */ + ["\uB220", "\uB220"], /* Hangul Syllable */ + ["\uB221", "\uB221"], /* Hangul Syllable */ + ["\uB222", "\uB222"], /* Hangul Syllable */ + ["\uB223", "\uB223"], /* Hangul Syllable */ + ["\uB224", "\uB224"], /* Hangul Syllable */ + ["\uB225", "\uB225"], /* Hangul Syllable */ + ["\uB226", "\uB226"], /* Hangul Syllable */ + ["\uB227", "\uB227"], /* Hangul Syllable */ + ["\uB228", "\uB228"], /* Hangul Syllable */ + ["\uB229", "\uB229"], /* Hangul Syllable */ + ["\uB22A", "\uB22A"], /* Hangul Syllable */ + ["\uB22B", "\uB22B"], /* Hangul Syllable */ + ["\uB22C", "\uB22C"], /* Hangul Syllable */ + ["\uB22D", "\uB22D"], /* Hangul Syllable */ + ["\uB22E", "\uB22E"], /* Hangul Syllable */ + ["\uB22F", "\uB22F"], /* Hangul Syllable */ + ["\uB230", "\uB230"], /* Hangul Syllable */ + ["\uB231", "\uB231"], /* Hangul Syllable */ + ["\uB232", "\uB232"], /* Hangul Syllable */ + ["\uB233", "\uB233"], /* Hangul Syllable */ + ["\uB234", "\uB234"], /* Hangul Syllable */ + ["\uB235", "\uB235"], /* Hangul Syllable */ + ["\uB236", "\uB236"], /* Hangul Syllable */ + ["\uB237", "\uB237"], /* Hangul Syllable */ + ["\uB238", "\uB238"], /* Hangul Syllable */ + ["\uB239", "\uB239"], /* Hangul Syllable */ + ["\uB23A", "\uB23A"], /* Hangul Syllable */ + ["\uB23B", "\uB23B"], /* Hangul Syllable */ + ["\uB23C", "\uB23C"], /* Hangul Syllable */ + ["\uB23D", "\uB23D"], /* Hangul Syllable */ + ["\uB23E", "\uB23E"], /* Hangul Syllable */ + ["\uB23F", "\uB23F"], /* Hangul Syllable */ + ["\uB240", "\uB240"], /* Hangul Syllable */ + ["\uB241", "\uB241"], /* Hangul Syllable */ + ["\uB242", "\uB242"], /* Hangul Syllable */ + ["\uB243", "\uB243"], /* Hangul Syllable */ + ["\uB244", "\uB244"], /* Hangul Syllable */ + ["\uB245", "\uB245"], /* Hangul Syllable */ + ["\uB246", "\uB246"], /* Hangul Syllable */ + ["\uB247", "\uB247"], /* Hangul Syllable */ + ["\uB248", "\uB248"], /* Hangul Syllable */ + ["\uB249", "\uB249"], /* Hangul Syllable */ + ["\uB24A", "\uB24A"], /* Hangul Syllable */ + ["\uB24B", "\uB24B"], /* Hangul Syllable */ + ["\uB24C", "\uB24C"], /* Hangul Syllable */ + ["\uB24D", "\uB24D"], /* Hangul Syllable */ + ["\uB24E", "\uB24E"], /* Hangul Syllable */ + ["\uB24F", "\uB24F"], /* Hangul Syllable */ + ["\uB250", "\uB250"], /* Hangul Syllable */ + ["\uB251", "\uB251"], /* Hangul Syllable */ + ["\uB252", "\uB252"], /* Hangul Syllable */ + ["\uB253", "\uB253"], /* Hangul Syllable */ + ["\uB254", "\uB254"], /* Hangul Syllable */ + ["\uB255", "\uB255"], /* Hangul Syllable */ + ["\uB256", "\uB256"], /* Hangul Syllable */ + ["\uB257", "\uB257"], /* Hangul Syllable */ + ["\uB258", "\uB258"], /* Hangul Syllable */ + ["\uB259", "\uB259"], /* Hangul Syllable */ + ["\uB25A", "\uB25A"], /* Hangul Syllable */ + ["\uB25B", "\uB25B"], /* Hangul Syllable */ + ["\uB25C", "\uB25C"], /* Hangul Syllable */ + ["\uB25D", "\uB25D"], /* Hangul Syllable */ + ["\uB25E", "\uB25E"], /* Hangul Syllable */ + ["\uB25F", "\uB25F"], /* Hangul Syllable */ + ["\uB260", "\uB260"], /* Hangul Syllable */ + ["\uB261", "\uB261"], /* Hangul Syllable */ + ["\uB262", "\uB262"], /* Hangul Syllable */ + ["\uB263", "\uB263"], /* Hangul Syllable */ + ["\uB264", "\uB264"], /* Hangul Syllable */ + ["\uB265", "\uB265"], /* Hangul Syllable */ + ["\uB266", "\uB266"], /* Hangul Syllable */ + ["\uB267", "\uB267"], /* Hangul Syllable */ + ["\uB268", "\uB268"], /* Hangul Syllable */ + ["\uB269", "\uB269"], /* Hangul Syllable */ + ["\uB26A", "\uB26A"], /* Hangul Syllable */ + ["\uB26B", "\uB26B"], /* Hangul Syllable */ + ["\uB26C", "\uB26C"], /* Hangul Syllable */ + ["\uB26D", "\uB26D"], /* Hangul Syllable */ + ["\uB26E", "\uB26E"], /* Hangul Syllable */ + ["\uB26F", "\uB26F"], /* Hangul Syllable */ + ["\uB270", "\uB270"], /* Hangul Syllable */ + ["\uB271", "\uB271"], /* Hangul Syllable */ + ["\uB272", "\uB272"], /* Hangul Syllable */ + ["\uB273", "\uB273"], /* Hangul Syllable */ + ["\uB274", "\uB274"], /* Hangul Syllable */ + ["\uB275", "\uB275"], /* Hangul Syllable */ + ["\uB276", "\uB276"], /* Hangul Syllable */ + ["\uB277", "\uB277"], /* Hangul Syllable */ + ["\uB278", "\uB278"], /* Hangul Syllable */ + ["\uB279", "\uB279"], /* Hangul Syllable */ + ["\uB27A", "\uB27A"], /* Hangul Syllable */ + ["\uB27B", "\uB27B"], /* Hangul Syllable */ + ["\uB27C", "\uB27C"], /* Hangul Syllable */ + ["\uB27D", "\uB27D"], /* Hangul Syllable */ + ["\uB27E", "\uB27E"], /* Hangul Syllable */ + ["\uB27F", "\uB27F"], /* Hangul Syllable */ + ["\uB280", "\uB280"], /* Hangul Syllable */ + ["\uB281", "\uB281"], /* Hangul Syllable */ + ["\uB282", "\uB282"], /* Hangul Syllable */ + ["\uB283", "\uB283"], /* Hangul Syllable */ + ["\uB284", "\uB284"], /* Hangul Syllable */ + ["\uB285", "\uB285"], /* Hangul Syllable */ + ["\uB286", "\uB286"], /* Hangul Syllable */ + ["\uB287", "\uB287"], /* Hangul Syllable */ + ["\uB288", "\uB288"], /* Hangul Syllable */ + ["\uB289", "\uB289"], /* Hangul Syllable */ + ["\uB28A", "\uB28A"], /* Hangul Syllable */ + ["\uB28B", "\uB28B"], /* Hangul Syllable */ + ["\uB28C", "\uB28C"], /* Hangul Syllable */ + ["\uB28D", "\uB28D"], /* Hangul Syllable */ + ["\uB28E", "\uB28E"], /* Hangul Syllable */ + ["\uB28F", "\uB28F"], /* Hangul Syllable */ + ["\uB290", "\uB290"], /* Hangul Syllable */ + ["\uB291", "\uB291"], /* Hangul Syllable */ + ["\uB292", "\uB292"], /* Hangul Syllable */ + ["\uB293", "\uB293"], /* Hangul Syllable */ + ["\uB294", "\uB294"], /* Hangul Syllable */ + ["\uB295", "\uB295"], /* Hangul Syllable */ + ["\uB296", "\uB296"], /* Hangul Syllable */ + ["\uB297", "\uB297"], /* Hangul Syllable */ + ["\uB298", "\uB298"], /* Hangul Syllable */ + ["\uB299", "\uB299"], /* Hangul Syllable */ + ["\uB29A", "\uB29A"], /* Hangul Syllable */ + ["\uB29B", "\uB29B"], /* Hangul Syllable */ + ["\uB29C", "\uB29C"], /* Hangul Syllable */ + ["\uB29D", "\uB29D"], /* Hangul Syllable */ + ["\uB29E", "\uB29E"], /* Hangul Syllable */ + ["\uB29F", "\uB29F"], /* Hangul Syllable */ + ["\uB2A0", "\uB2A0"], /* Hangul Syllable */ + ["\uB2A1", "\uB2A1"], /* Hangul Syllable */ + ["\uB2A2", "\uB2A2"], /* Hangul Syllable */ + ["\uB2A3", "\uB2A3"], /* Hangul Syllable */ + ["\uB2A4", "\uB2A4"], /* Hangul Syllable */ + ["\uB2A5", "\uB2A5"], /* Hangul Syllable */ + ["\uB2A6", "\uB2A6"], /* Hangul Syllable */ + ["\uB2A7", "\uB2A7"], /* Hangul Syllable */ + ["\uB2A8", "\uB2A8"], /* Hangul Syllable */ + ["\uB2A9", "\uB2A9"], /* Hangul Syllable */ + ["\uB2AA", "\uB2AA"], /* Hangul Syllable */ + ["\uB2AB", "\uB2AB"], /* Hangul Syllable */ + ["\uB2AC", "\uB2AC"], /* Hangul Syllable */ + ["\uB2AD", "\uB2AD"], /* Hangul Syllable */ + ["\uB2AE", "\uB2AE"], /* Hangul Syllable */ + ["\uB2AF", "\uB2AF"], /* Hangul Syllable */ + ["\uB2B0", "\uB2B0"], /* Hangul Syllable */ + ["\uB2B1", "\uB2B1"], /* Hangul Syllable */ + ["\uB2B2", "\uB2B2"], /* Hangul Syllable */ + ["\uB2B3", "\uB2B3"], /* Hangul Syllable */ + ["\uB2B4", "\uB2B4"], /* Hangul Syllable */ + ["\uB2B5", "\uB2B5"], /* Hangul Syllable */ + ["\uB2B6", "\uB2B6"], /* Hangul Syllable */ + ["\uB2B7", "\uB2B7"], /* Hangul Syllable */ + ["\uB2B8", "\uB2B8"], /* Hangul Syllable */ + ["\uB2B9", "\uB2B9"], /* Hangul Syllable */ + ["\uB2BA", "\uB2BA"], /* Hangul Syllable */ + ["\uB2BB", "\uB2BB"], /* Hangul Syllable */ + ["\uB2BC", "\uB2BC"], /* Hangul Syllable */ + ["\uB2BD", "\uB2BD"], /* Hangul Syllable */ + ["\uB2BE", "\uB2BE"], /* Hangul Syllable */ + ["\uB2BF", "\uB2BF"], /* Hangul Syllable */ + ["\uB2C0", "\uB2C0"], /* Hangul Syllable */ + ["\uB2C1", "\uB2C1"], /* Hangul Syllable */ + ["\uB2C2", "\uB2C2"], /* Hangul Syllable */ + ["\uB2C3", "\uB2C3"], /* Hangul Syllable */ + ["\uB2C4", "\uB2C4"], /* Hangul Syllable */ + ["\uB2C5", "\uB2C5"], /* Hangul Syllable */ + ["\uB2C6", "\uB2C6"], /* Hangul Syllable */ + ["\uB2C7", "\uB2C7"], /* Hangul Syllable */ + ["\uB2C8", "\uB2C8"], /* Hangul Syllable */ + ["\uB2C9", "\uB2C9"], /* Hangul Syllable */ + ["\uB2CA", "\uB2CA"], /* Hangul Syllable */ + ["\uB2CB", "\uB2CB"], /* Hangul Syllable */ + ["\uB2CC", "\uB2CC"], /* Hangul Syllable */ + ["\uB2CD", "\uB2CD"], /* Hangul Syllable */ + ["\uB2CE", "\uB2CE"], /* Hangul Syllable */ + ["\uB2CF", "\uB2CF"], /* Hangul Syllable */ + ["\uB2D0", "\uB2D0"], /* Hangul Syllable */ + ["\uB2D1", "\uB2D1"], /* Hangul Syllable */ + ["\uB2D2", "\uB2D2"], /* Hangul Syllable */ + ["\uB2D3", "\uB2D3"], /* Hangul Syllable */ + ["\uB2D4", "\uB2D4"], /* Hangul Syllable */ + ["\uB2D5", "\uB2D5"], /* Hangul Syllable */ + ["\uB2D6", "\uB2D6"], /* Hangul Syllable */ + ["\uB2D7", "\uB2D7"], /* Hangul Syllable */ + ["\uB2D8", "\uB2D8"], /* Hangul Syllable */ + ["\uB2D9", "\uB2D9"], /* Hangul Syllable */ + ["\uB2DA", "\uB2DA"], /* Hangul Syllable */ + ["\uB2DB", "\uB2DB"], /* Hangul Syllable */ + ["\uB2DC", "\uB2DC"], /* Hangul Syllable */ + ["\uB2DD", "\uB2DD"], /* Hangul Syllable */ + ["\uB2DE", "\uB2DE"], /* Hangul Syllable */ + ["\uB2DF", "\uB2DF"], /* Hangul Syllable */ + ["\uB2E0", "\uB2E0"], /* Hangul Syllable */ + ["\uB2E1", "\uB2E1"], /* Hangul Syllable */ + ["\uB2E2", "\uB2E2"], /* Hangul Syllable */ + ["\uB2E3", "\uB2E3"], /* Hangul Syllable */ + ["\uB2E4", "\uB2E4"], /* Hangul Syllable */ + ["\uB2E5", "\uB2E5"], /* Hangul Syllable */ + ["\uB2E6", "\uB2E6"], /* Hangul Syllable */ + ["\uB2E7", "\uB2E7"], /* Hangul Syllable */ + ["\uB2E8", "\uB2E8"], /* Hangul Syllable */ + ["\uB2E9", "\uB2E9"], /* Hangul Syllable */ + ["\uB2EA", "\uB2EA"], /* Hangul Syllable */ + ["\uB2EB", "\uB2EB"], /* Hangul Syllable */ + ["\uB2EC", "\uB2EC"], /* Hangul Syllable */ + ["\uB2ED", "\uB2ED"], /* Hangul Syllable */ + ["\uB2EE", "\uB2EE"], /* Hangul Syllable */ + ["\uB2EF", "\uB2EF"], /* Hangul Syllable */ + ["\uB2F0", "\uB2F0"], /* Hangul Syllable */ + ["\uB2F1", "\uB2F1"], /* Hangul Syllable */ + ["\uB2F2", "\uB2F2"], /* Hangul Syllable */ + ["\uB2F3", "\uB2F3"], /* Hangul Syllable */ + ["\uB2F4", "\uB2F4"], /* Hangul Syllable */ + ["\uB2F5", "\uB2F5"], /* Hangul Syllable */ + ["\uB2F6", "\uB2F6"], /* Hangul Syllable */ + ["\uB2F7", "\uB2F7"], /* Hangul Syllable */ + ["\uB2F8", "\uB2F8"], /* Hangul Syllable */ + ["\uB2F9", "\uB2F9"], /* Hangul Syllable */ + ["\uB2FA", "\uB2FA"], /* Hangul Syllable */ + ["\uB2FB", "\uB2FB"], /* Hangul Syllable */ + ["\uB2FC", "\uB2FC"], /* Hangul Syllable */ + ["\uB2FD", "\uB2FD"], /* Hangul Syllable */ + ["\uB2FE", "\uB2FE"], /* Hangul Syllable */ + ["\uB2FF", "\uB2FF"], /* Hangul Syllable */ + ["\uB300", "\uB300"], /* Hangul Syllable */ + ["\uB301", "\uB301"], /* Hangul Syllable */ + ["\uB302", "\uB302"], /* Hangul Syllable */ + ["\uB303", "\uB303"], /* Hangul Syllable */ + ["\uB304", "\uB304"], /* Hangul Syllable */ + ["\uB305", "\uB305"], /* Hangul Syllable */ + ["\uB306", "\uB306"], /* Hangul Syllable */ + ["\uB307", "\uB307"], /* Hangul Syllable */ + ["\uB308", "\uB308"], /* Hangul Syllable */ + ["\uB309", "\uB309"], /* Hangul Syllable */ + ["\uB30A", "\uB30A"], /* Hangul Syllable */ + ["\uB30B", "\uB30B"], /* Hangul Syllable */ + ["\uB30C", "\uB30C"], /* Hangul Syllable */ + ["\uB30D", "\uB30D"], /* Hangul Syllable */ + ["\uB30E", "\uB30E"], /* Hangul Syllable */ + ["\uB30F", "\uB30F"], /* Hangul Syllable */ + ["\uB310", "\uB310"], /* Hangul Syllable */ + ["\uB311", "\uB311"], /* Hangul Syllable */ + ["\uB312", "\uB312"], /* Hangul Syllable */ + ["\uB313", "\uB313"], /* Hangul Syllable */ + ["\uB314", "\uB314"], /* Hangul Syllable */ + ["\uB315", "\uB315"], /* Hangul Syllable */ + ["\uB316", "\uB316"], /* Hangul Syllable */ + ["\uB317", "\uB317"], /* Hangul Syllable */ + ["\uB318", "\uB318"], /* Hangul Syllable */ + ["\uB319", "\uB319"], /* Hangul Syllable */ + ["\uB31A", "\uB31A"], /* Hangul Syllable */ + ["\uB31B", "\uB31B"], /* Hangul Syllable */ + ["\uB31C", "\uB31C"], /* Hangul Syllable */ + ["\uB31D", "\uB31D"], /* Hangul Syllable */ + ["\uB31E", "\uB31E"], /* Hangul Syllable */ + ["\uB31F", "\uB31F"], /* Hangul Syllable */ + ["\uB320", "\uB320"], /* Hangul Syllable */ + ["\uB321", "\uB321"], /* Hangul Syllable */ + ["\uB322", "\uB322"], /* Hangul Syllable */ + ["\uB323", "\uB323"], /* Hangul Syllable */ + ["\uB324", "\uB324"], /* Hangul Syllable */ + ["\uB325", "\uB325"], /* Hangul Syllable */ + ["\uB326", "\uB326"], /* Hangul Syllable */ + ["\uB327", "\uB327"], /* Hangul Syllable */ + ["\uB328", "\uB328"], /* Hangul Syllable */ + ["\uB329", "\uB329"], /* Hangul Syllable */ + ["\uB32A", "\uB32A"], /* Hangul Syllable */ + ["\uB32B", "\uB32B"], /* Hangul Syllable */ + ["\uB32C", "\uB32C"], /* Hangul Syllable */ + ["\uB32D", "\uB32D"], /* Hangul Syllable */ + ["\uB32E", "\uB32E"], /* Hangul Syllable */ + ["\uB32F", "\uB32F"], /* Hangul Syllable */ + ["\uB330", "\uB330"], /* Hangul Syllable */ + ["\uB331", "\uB331"], /* Hangul Syllable */ + ["\uB332", "\uB332"], /* Hangul Syllable */ + ["\uB333", "\uB333"], /* Hangul Syllable */ + ["\uB334", "\uB334"], /* Hangul Syllable */ + ["\uB335", "\uB335"], /* Hangul Syllable */ + ["\uB336", "\uB336"], /* Hangul Syllable */ + ["\uB337", "\uB337"], /* Hangul Syllable */ + ["\uB338", "\uB338"], /* Hangul Syllable */ + ["\uB339", "\uB339"], /* Hangul Syllable */ + ["\uB33A", "\uB33A"], /* Hangul Syllable */ + ["\uB33B", "\uB33B"], /* Hangul Syllable */ + ["\uB33C", "\uB33C"], /* Hangul Syllable */ + ["\uB33D", "\uB33D"], /* Hangul Syllable */ + ["\uB33E", "\uB33E"], /* Hangul Syllable */ + ["\uB33F", "\uB33F"], /* Hangul Syllable */ + ["\uB340", "\uB340"], /* Hangul Syllable */ + ["\uB341", "\uB341"], /* Hangul Syllable */ + ["\uB342", "\uB342"], /* Hangul Syllable */ + ["\uB343", "\uB343"], /* Hangul Syllable */ + ["\uB344", "\uB344"], /* Hangul Syllable */ + ["\uB345", "\uB345"], /* Hangul Syllable */ + ["\uB346", "\uB346"], /* Hangul Syllable */ + ["\uB347", "\uB347"], /* Hangul Syllable */ + ["\uB348", "\uB348"], /* Hangul Syllable */ + ["\uB349", "\uB349"], /* Hangul Syllable */ + ["\uB34A", "\uB34A"], /* Hangul Syllable */ + ["\uB34B", "\uB34B"], /* Hangul Syllable */ + ["\uB34C", "\uB34C"], /* Hangul Syllable */ + ["\uB34D", "\uB34D"], /* Hangul Syllable */ + ["\uB34E", "\uB34E"], /* Hangul Syllable */ + ["\uB34F", "\uB34F"], /* Hangul Syllable */ + ["\uB350", "\uB350"], /* Hangul Syllable */ + ["\uB351", "\uB351"], /* Hangul Syllable */ + ["\uB352", "\uB352"], /* Hangul Syllable */ + ["\uB353", "\uB353"], /* Hangul Syllable */ + ["\uB354", "\uB354"], /* Hangul Syllable */ + ["\uB355", "\uB355"], /* Hangul Syllable */ + ["\uB356", "\uB356"], /* Hangul Syllable */ + ["\uB357", "\uB357"], /* Hangul Syllable */ + ["\uB358", "\uB358"], /* Hangul Syllable */ + ["\uB359", "\uB359"], /* Hangul Syllable */ + ["\uB35A", "\uB35A"], /* Hangul Syllable */ + ["\uB35B", "\uB35B"], /* Hangul Syllable */ + ["\uB35C", "\uB35C"], /* Hangul Syllable */ + ["\uB35D", "\uB35D"], /* Hangul Syllable */ + ["\uB35E", "\uB35E"], /* Hangul Syllable */ + ["\uB35F", "\uB35F"], /* Hangul Syllable */ + ["\uB360", "\uB360"], /* Hangul Syllable */ + ["\uB361", "\uB361"], /* Hangul Syllable */ + ["\uB362", "\uB362"], /* Hangul Syllable */ + ["\uB363", "\uB363"], /* Hangul Syllable */ + ["\uB364", "\uB364"], /* Hangul Syllable */ + ["\uB365", "\uB365"], /* Hangul Syllable */ + ["\uB366", "\uB366"], /* Hangul Syllable */ + ["\uB367", "\uB367"], /* Hangul Syllable */ + ["\uB368", "\uB368"], /* Hangul Syllable */ + ["\uB369", "\uB369"], /* Hangul Syllable */ + ["\uB36A", "\uB36A"], /* Hangul Syllable */ + ["\uB36B", "\uB36B"], /* Hangul Syllable */ + ["\uB36C", "\uB36C"], /* Hangul Syllable */ + ["\uB36D", "\uB36D"], /* Hangul Syllable */ + ["\uB36E", "\uB36E"], /* Hangul Syllable */ + ["\uB36F", "\uB36F"], /* Hangul Syllable */ + ["\uB370", "\uB370"], /* Hangul Syllable */ + ["\uB371", "\uB371"], /* Hangul Syllable */ + ["\uB372", "\uB372"], /* Hangul Syllable */ + ["\uB373", "\uB373"], /* Hangul Syllable */ + ["\uB374", "\uB374"], /* Hangul Syllable */ + ["\uB375", "\uB375"], /* Hangul Syllable */ + ["\uB376", "\uB376"], /* Hangul Syllable */ + ["\uB377", "\uB377"], /* Hangul Syllable */ + ["\uB378", "\uB378"], /* Hangul Syllable */ + ["\uB379", "\uB379"], /* Hangul Syllable */ + ["\uB37A", "\uB37A"], /* Hangul Syllable */ + ["\uB37B", "\uB37B"], /* Hangul Syllable */ + ["\uB37C", "\uB37C"], /* Hangul Syllable */ + ["\uB37D", "\uB37D"], /* Hangul Syllable */ + ["\uB37E", "\uB37E"], /* Hangul Syllable */ + ["\uB37F", "\uB37F"], /* Hangul Syllable */ + ["\uB380", "\uB380"], /* Hangul Syllable */ + ["\uB381", "\uB381"], /* Hangul Syllable */ + ["\uB382", "\uB382"], /* Hangul Syllable */ + ["\uB383", "\uB383"], /* Hangul Syllable */ + ["\uB384", "\uB384"], /* Hangul Syllable */ + ["\uB385", "\uB385"], /* Hangul Syllable */ + ["\uB386", "\uB386"], /* Hangul Syllable */ + ["\uB387", "\uB387"], /* Hangul Syllable */ + ["\uB388", "\uB388"], /* Hangul Syllable */ + ["\uB389", "\uB389"], /* Hangul Syllable */ + ["\uB38A", "\uB38A"], /* Hangul Syllable */ + ["\uB38B", "\uB38B"], /* Hangul Syllable */ + ["\uB38C", "\uB38C"], /* Hangul Syllable */ + ["\uB38D", "\uB38D"], /* Hangul Syllable */ + ["\uB38E", "\uB38E"], /* Hangul Syllable */ + ["\uB38F", "\uB38F"], /* Hangul Syllable */ + ["\uB390", "\uB390"], /* Hangul Syllable */ + ["\uB391", "\uB391"], /* Hangul Syllable */ + ["\uB392", "\uB392"], /* Hangul Syllable */ + ["\uB393", "\uB393"], /* Hangul Syllable */ + ["\uB394", "\uB394"], /* Hangul Syllable */ + ["\uB395", "\uB395"], /* Hangul Syllable */ + ["\uB396", "\uB396"], /* Hangul Syllable */ + ["\uB397", "\uB397"], /* Hangul Syllable */ + ["\uB398", "\uB398"], /* Hangul Syllable */ + ["\uB399", "\uB399"], /* Hangul Syllable */ + ["\uB39A", "\uB39A"], /* Hangul Syllable */ + ["\uB39B", "\uB39B"], /* Hangul Syllable */ + ["\uB39C", "\uB39C"], /* Hangul Syllable */ + ["\uB39D", "\uB39D"], /* Hangul Syllable */ + ["\uB39E", "\uB39E"], /* Hangul Syllable */ + ["\uB39F", "\uB39F"], /* Hangul Syllable */ + ["\uB3A0", "\uB3A0"], /* Hangul Syllable */ + ["\uB3A1", "\uB3A1"], /* Hangul Syllable */ + ["\uB3A2", "\uB3A2"], /* Hangul Syllable */ + ["\uB3A3", "\uB3A3"], /* Hangul Syllable */ + ["\uB3A4", "\uB3A4"], /* Hangul Syllable */ + ["\uB3A5", "\uB3A5"], /* Hangul Syllable */ + ["\uB3A6", "\uB3A6"], /* Hangul Syllable */ + ["\uB3A7", "\uB3A7"], /* Hangul Syllable */ + ["\uB3A8", "\uB3A8"], /* Hangul Syllable */ + ["\uB3A9", "\uB3A9"], /* Hangul Syllable */ + ["\uB3AA", "\uB3AA"], /* Hangul Syllable */ + ["\uB3AB", "\uB3AB"], /* Hangul Syllable */ + ["\uB3AC", "\uB3AC"], /* Hangul Syllable */ + ["\uB3AD", "\uB3AD"], /* Hangul Syllable */ + ["\uB3AE", "\uB3AE"], /* Hangul Syllable */ + ["\uB3AF", "\uB3AF"], /* Hangul Syllable */ + ["\uB3B0", "\uB3B0"], /* Hangul Syllable */ + ["\uB3B1", "\uB3B1"], /* Hangul Syllable */ + ["\uB3B2", "\uB3B2"], /* Hangul Syllable */ + ["\uB3B3", "\uB3B3"], /* Hangul Syllable */ + ["\uB3B4", "\uB3B4"], /* Hangul Syllable */ + ["\uB3B5", "\uB3B5"], /* Hangul Syllable */ + ["\uB3B6", "\uB3B6"], /* Hangul Syllable */ + ["\uB3B7", "\uB3B7"], /* Hangul Syllable */ + ["\uB3B8", "\uB3B8"], /* Hangul Syllable */ + ["\uB3B9", "\uB3B9"], /* Hangul Syllable */ + ["\uB3BA", "\uB3BA"], /* Hangul Syllable */ + ["\uB3BB", "\uB3BB"], /* Hangul Syllable */ + ["\uB3BC", "\uB3BC"], /* Hangul Syllable */ + ["\uB3BD", "\uB3BD"], /* Hangul Syllable */ + ["\uB3BE", "\uB3BE"], /* Hangul Syllable */ + ["\uB3BF", "\uB3BF"], /* Hangul Syllable */ + ["\uB3C0", "\uB3C0"], /* Hangul Syllable */ + ["\uB3C1", "\uB3C1"], /* Hangul Syllable */ + ["\uB3C2", "\uB3C2"], /* Hangul Syllable */ + ["\uB3C3", "\uB3C3"], /* Hangul Syllable */ + ["\uB3C4", "\uB3C4"], /* Hangul Syllable */ + ["\uB3C5", "\uB3C5"], /* Hangul Syllable */ + ["\uB3C6", "\uB3C6"], /* Hangul Syllable */ + ["\uB3C7", "\uB3C7"], /* Hangul Syllable */ + ["\uB3C8", "\uB3C8"], /* Hangul Syllable */ + ["\uB3C9", "\uB3C9"], /* Hangul Syllable */ + ["\uB3CA", "\uB3CA"], /* Hangul Syllable */ + ["\uB3CB", "\uB3CB"], /* Hangul Syllable */ + ["\uB3CC", "\uB3CC"], /* Hangul Syllable */ + ["\uB3CD", "\uB3CD"], /* Hangul Syllable */ + ["\uB3CE", "\uB3CE"], /* Hangul Syllable */ + ["\uB3CF", "\uB3CF"], /* Hangul Syllable */ + ["\uB3D0", "\uB3D0"], /* Hangul Syllable */ + ["\uB3D1", "\uB3D1"], /* Hangul Syllable */ + ["\uB3D2", "\uB3D2"], /* Hangul Syllable */ + ["\uB3D3", "\uB3D3"], /* Hangul Syllable */ + ["\uB3D4", "\uB3D4"], /* Hangul Syllable */ + ["\uB3D5", "\uB3D5"], /* Hangul Syllable */ + ["\uB3D6", "\uB3D6"], /* Hangul Syllable */ + ["\uB3D7", "\uB3D7"], /* Hangul Syllable */ + ["\uB3D8", "\uB3D8"], /* Hangul Syllable */ + ["\uB3D9", "\uB3D9"], /* Hangul Syllable */ + ["\uB3DA", "\uB3DA"], /* Hangul Syllable */ + ["\uB3DB", "\uB3DB"], /* Hangul Syllable */ + ["\uB3DC", "\uB3DC"], /* Hangul Syllable */ + ["\uB3DD", "\uB3DD"], /* Hangul Syllable */ + ["\uB3DE", "\uB3DE"], /* Hangul Syllable */ + ["\uB3DF", "\uB3DF"], /* Hangul Syllable */ + ["\uB3E0", "\uB3E0"], /* Hangul Syllable */ + ["\uB3E1", "\uB3E1"], /* Hangul Syllable */ + ["\uB3E2", "\uB3E2"], /* Hangul Syllable */ + ["\uB3E3", "\uB3E3"], /* Hangul Syllable */ + ["\uB3E4", "\uB3E4"], /* Hangul Syllable */ + ["\uB3E5", "\uB3E5"], /* Hangul Syllable */ + ["\uB3E6", "\uB3E6"], /* Hangul Syllable */ + ["\uB3E7", "\uB3E7"], /* Hangul Syllable */ + ["\uB3E8", "\uB3E8"], /* Hangul Syllable */ + ["\uB3E9", "\uB3E9"], /* Hangul Syllable */ + ["\uB3EA", "\uB3EA"], /* Hangul Syllable */ + ["\uB3EB", "\uB3EB"], /* Hangul Syllable */ + ["\uB3EC", "\uB3EC"], /* Hangul Syllable */ + ["\uB3ED", "\uB3ED"], /* Hangul Syllable */ + ["\uB3EE", "\uB3EE"], /* Hangul Syllable */ + ["\uB3EF", "\uB3EF"], /* Hangul Syllable */ + ["\uB3F0", "\uB3F0"], /* Hangul Syllable */ + ["\uB3F1", "\uB3F1"], /* Hangul Syllable */ + ["\uB3F2", "\uB3F2"], /* Hangul Syllable */ + ["\uB3F3", "\uB3F3"], /* Hangul Syllable */ + ["\uB3F4", "\uB3F4"], /* Hangul Syllable */ + ["\uB3F5", "\uB3F5"], /* Hangul Syllable */ + ["\uB3F6", "\uB3F6"], /* Hangul Syllable */ + ["\uB3F7", "\uB3F7"], /* Hangul Syllable */ + ["\uB3F8", "\uB3F8"], /* Hangul Syllable */ + ["\uB3F9", "\uB3F9"], /* Hangul Syllable */ + ["\uB3FA", "\uB3FA"], /* Hangul Syllable */ + ["\uB3FB", "\uB3FB"], /* Hangul Syllable */ + ["\uB3FC", "\uB3FC"], /* Hangul Syllable */ + ["\uB3FD", "\uB3FD"], /* Hangul Syllable */ + ["\uB3FE", "\uB3FE"], /* Hangul Syllable */ + ["\uB3FF", "\uB3FF"], /* Hangul Syllable */ + ["\uB400", "\uB400"], /* Hangul Syllable */ + ["\uB401", "\uB401"], /* Hangul Syllable */ + ["\uB402", "\uB402"], /* Hangul Syllable */ + ["\uB403", "\uB403"], /* Hangul Syllable */ + ["\uB404", "\uB404"], /* Hangul Syllable */ + ["\uB405", "\uB405"], /* Hangul Syllable */ + ["\uB406", "\uB406"], /* Hangul Syllable */ + ["\uB407", "\uB407"], /* Hangul Syllable */ + ["\uB408", "\uB408"], /* Hangul Syllable */ + ["\uB409", "\uB409"], /* Hangul Syllable */ + ["\uB40A", "\uB40A"], /* Hangul Syllable */ + ["\uB40B", "\uB40B"], /* Hangul Syllable */ + ["\uB40C", "\uB40C"], /* Hangul Syllable */ + ["\uB40D", "\uB40D"], /* Hangul Syllable */ + ["\uB40E", "\uB40E"], /* Hangul Syllable */ + ["\uB40F", "\uB40F"], /* Hangul Syllable */ + ["\uB410", "\uB410"], /* Hangul Syllable */ + ["\uB411", "\uB411"], /* Hangul Syllable */ + ["\uB412", "\uB412"], /* Hangul Syllable */ + ["\uB413", "\uB413"], /* Hangul Syllable */ + ["\uB414", "\uB414"], /* Hangul Syllable */ + ["\uB415", "\uB415"], /* Hangul Syllable */ + ["\uB416", "\uB416"], /* Hangul Syllable */ + ["\uB417", "\uB417"], /* Hangul Syllable */ + ["\uB418", "\uB418"], /* Hangul Syllable */ + ["\uB419", "\uB419"], /* Hangul Syllable */ + ["\uB41A", "\uB41A"], /* Hangul Syllable */ + ["\uB41B", "\uB41B"], /* Hangul Syllable */ + ["\uB41C", "\uB41C"], /* Hangul Syllable */ + ["\uB41D", "\uB41D"], /* Hangul Syllable */ + ["\uB41E", "\uB41E"], /* Hangul Syllable */ + ["\uB41F", "\uB41F"], /* Hangul Syllable */ + ["\uB420", "\uB420"], /* Hangul Syllable */ + ["\uB421", "\uB421"], /* Hangul Syllable */ + ["\uB422", "\uB422"], /* Hangul Syllable */ + ["\uB423", "\uB423"], /* Hangul Syllable */ + ["\uB424", "\uB424"], /* Hangul Syllable */ + ["\uB425", "\uB425"], /* Hangul Syllable */ + ["\uB426", "\uB426"], /* Hangul Syllable */ + ["\uB427", "\uB427"], /* Hangul Syllable */ + ["\uB428", "\uB428"], /* Hangul Syllable */ + ["\uB429", "\uB429"], /* Hangul Syllable */ + ["\uB42A", "\uB42A"], /* Hangul Syllable */ + ["\uB42B", "\uB42B"], /* Hangul Syllable */ + ["\uB42C", "\uB42C"], /* Hangul Syllable */ + ["\uB42D", "\uB42D"], /* Hangul Syllable */ + ["\uB42E", "\uB42E"], /* Hangul Syllable */ + ["\uB42F", "\uB42F"], /* Hangul Syllable */ + ["\uB430", "\uB430"], /* Hangul Syllable */ + ["\uB431", "\uB431"], /* Hangul Syllable */ + ["\uB432", "\uB432"], /* Hangul Syllable */ + ["\uB433", "\uB433"], /* Hangul Syllable */ + ["\uB434", "\uB434"], /* Hangul Syllable */ + ["\uB435", "\uB435"], /* Hangul Syllable */ + ["\uB436", "\uB436"], /* Hangul Syllable */ + ["\uB437", "\uB437"], /* Hangul Syllable */ + ["\uB438", "\uB438"], /* Hangul Syllable */ + ["\uB439", "\uB439"], /* Hangul Syllable */ + ["\uB43A", "\uB43A"], /* Hangul Syllable */ + ["\uB43B", "\uB43B"], /* Hangul Syllable */ + ["\uB43C", "\uB43C"], /* Hangul Syllable */ + ["\uB43D", "\uB43D"], /* Hangul Syllable */ + ["\uB43E", "\uB43E"], /* Hangul Syllable */ + ["\uB43F", "\uB43F"], /* Hangul Syllable */ + ["\uB440", "\uB440"], /* Hangul Syllable */ + ["\uB441", "\uB441"], /* Hangul Syllable */ + ["\uB442", "\uB442"], /* Hangul Syllable */ + ["\uB443", "\uB443"], /* Hangul Syllable */ + ["\uB444", "\uB444"], /* Hangul Syllable */ + ["\uB445", "\uB445"], /* Hangul Syllable */ + ["\uB446", "\uB446"], /* Hangul Syllable */ + ["\uB447", "\uB447"], /* Hangul Syllable */ + ["\uB448", "\uB448"], /* Hangul Syllable */ + ["\uB449", "\uB449"], /* Hangul Syllable */ + ["\uB44A", "\uB44A"], /* Hangul Syllable */ + ["\uB44B", "\uB44B"], /* Hangul Syllable */ + ["\uB44C", "\uB44C"], /* Hangul Syllable */ + ["\uB44D", "\uB44D"], /* Hangul Syllable */ + ["\uB44E", "\uB44E"], /* Hangul Syllable */ + ["\uB44F", "\uB44F"], /* Hangul Syllable */ + ["\uB450", "\uB450"], /* Hangul Syllable */ + ["\uB451", "\uB451"], /* Hangul Syllable */ + ["\uB452", "\uB452"], /* Hangul Syllable */ + ["\uB453", "\uB453"], /* Hangul Syllable */ + ["\uB454", "\uB454"], /* Hangul Syllable */ + ["\uB455", "\uB455"], /* Hangul Syllable */ + ["\uB456", "\uB456"], /* Hangul Syllable */ + ["\uB457", "\uB457"], /* Hangul Syllable */ + ["\uB458", "\uB458"], /* Hangul Syllable */ + ["\uB459", "\uB459"], /* Hangul Syllable */ + ["\uB45A", "\uB45A"], /* Hangul Syllable */ + ["\uB45B", "\uB45B"], /* Hangul Syllable */ + ["\uB45C", "\uB45C"], /* Hangul Syllable */ + ["\uB45D", "\uB45D"], /* Hangul Syllable */ + ["\uB45E", "\uB45E"], /* Hangul Syllable */ + ["\uB45F", "\uB45F"], /* Hangul Syllable */ + ["\uB460", "\uB460"], /* Hangul Syllable */ + ["\uB461", "\uB461"], /* Hangul Syllable */ + ["\uB462", "\uB462"], /* Hangul Syllable */ + ["\uB463", "\uB463"], /* Hangul Syllable */ + ["\uB464", "\uB464"], /* Hangul Syllable */ + ["\uB465", "\uB465"], /* Hangul Syllable */ + ["\uB466", "\uB466"], /* Hangul Syllable */ + ["\uB467", "\uB467"], /* Hangul Syllable */ + ["\uB468", "\uB468"], /* Hangul Syllable */ + ["\uB469", "\uB469"], /* Hangul Syllable */ + ["\uB46A", "\uB46A"], /* Hangul Syllable */ + ["\uB46B", "\uB46B"], /* Hangul Syllable */ + ["\uB46C", "\uB46C"], /* Hangul Syllable */ + ["\uB46D", "\uB46D"], /* Hangul Syllable */ + ["\uB46E", "\uB46E"], /* Hangul Syllable */ + ["\uB46F", "\uB46F"], /* Hangul Syllable */ + ["\uB470", "\uB470"], /* Hangul Syllable */ + ["\uB471", "\uB471"], /* Hangul Syllable */ + ["\uB472", "\uB472"], /* Hangul Syllable */ + ["\uB473", "\uB473"], /* Hangul Syllable */ + ["\uB474", "\uB474"], /* Hangul Syllable */ + ["\uB475", "\uB475"], /* Hangul Syllable */ + ["\uB476", "\uB476"], /* Hangul Syllable */ + ["\uB477", "\uB477"], /* Hangul Syllable */ + ["\uB478", "\uB478"], /* Hangul Syllable */ + ["\uB479", "\uB479"], /* Hangul Syllable */ + ["\uB47A", "\uB47A"], /* Hangul Syllable */ + ["\uB47B", "\uB47B"], /* Hangul Syllable */ + ["\uB47C", "\uB47C"], /* Hangul Syllable */ + ["\uB47D", "\uB47D"], /* Hangul Syllable */ + ["\uB47E", "\uB47E"], /* Hangul Syllable */ + ["\uB47F", "\uB47F"], /* Hangul Syllable */ + ["\uB480", "\uB480"], /* Hangul Syllable */ + ["\uB481", "\uB481"], /* Hangul Syllable */ + ["\uB482", "\uB482"], /* Hangul Syllable */ + ["\uB483", "\uB483"], /* Hangul Syllable */ + ["\uB484", "\uB484"], /* Hangul Syllable */ + ["\uB485", "\uB485"], /* Hangul Syllable */ + ["\uB486", "\uB486"], /* Hangul Syllable */ + ["\uB487", "\uB487"], /* Hangul Syllable */ + ["\uB488", "\uB488"], /* Hangul Syllable */ + ["\uB489", "\uB489"], /* Hangul Syllable */ + ["\uB48A", "\uB48A"], /* Hangul Syllable */ + ["\uB48B", "\uB48B"], /* Hangul Syllable */ + ["\uB48C", "\uB48C"], /* Hangul Syllable */ + ["\uB48D", "\uB48D"], /* Hangul Syllable */ + ["\uB48E", "\uB48E"], /* Hangul Syllable */ + ["\uB48F", "\uB48F"], /* Hangul Syllable */ + ["\uB490", "\uB490"], /* Hangul Syllable */ + ["\uB491", "\uB491"], /* Hangul Syllable */ + ["\uB492", "\uB492"], /* Hangul Syllable */ + ["\uB493", "\uB493"], /* Hangul Syllable */ + ["\uB494", "\uB494"], /* Hangul Syllable */ + ["\uB495", "\uB495"], /* Hangul Syllable */ + ["\uB496", "\uB496"], /* Hangul Syllable */ + ["\uB497", "\uB497"], /* Hangul Syllable */ + ["\uB498", "\uB498"], /* Hangul Syllable */ + ["\uB499", "\uB499"], /* Hangul Syllable */ + ["\uB49A", "\uB49A"], /* Hangul Syllable */ + ["\uB49B", "\uB49B"], /* Hangul Syllable */ + ["\uB49C", "\uB49C"], /* Hangul Syllable */ + ["\uB49D", "\uB49D"], /* Hangul Syllable */ + ["\uB49E", "\uB49E"], /* Hangul Syllable */ + ["\uB49F", "\uB49F"], /* Hangul Syllable */ + ["\uB4A0", "\uB4A0"], /* Hangul Syllable */ + ["\uB4A1", "\uB4A1"], /* Hangul Syllable */ + ["\uB4A2", "\uB4A2"], /* Hangul Syllable */ + ["\uB4A3", "\uB4A3"], /* Hangul Syllable */ + ["\uB4A4", "\uB4A4"], /* Hangul Syllable */ + ["\uB4A5", "\uB4A5"], /* Hangul Syllable */ + ["\uB4A6", "\uB4A6"], /* Hangul Syllable */ + ["\uB4A7", "\uB4A7"], /* Hangul Syllable */ + ["\uB4A8", "\uB4A8"], /* Hangul Syllable */ + ["\uB4A9", "\uB4A9"], /* Hangul Syllable */ + ["\uB4AA", "\uB4AA"], /* Hangul Syllable */ + ["\uB4AB", "\uB4AB"], /* Hangul Syllable */ + ["\uB4AC", "\uB4AC"], /* Hangul Syllable */ + ["\uB4AD", "\uB4AD"], /* Hangul Syllable */ + ["\uB4AE", "\uB4AE"], /* Hangul Syllable */ + ["\uB4AF", "\uB4AF"], /* Hangul Syllable */ + ["\uB4B0", "\uB4B0"], /* Hangul Syllable */ + ["\uB4B1", "\uB4B1"], /* Hangul Syllable */ + ["\uB4B2", "\uB4B2"], /* Hangul Syllable */ + ["\uB4B3", "\uB4B3"], /* Hangul Syllable */ + ["\uB4B4", "\uB4B4"], /* Hangul Syllable */ + ["\uB4B5", "\uB4B5"], /* Hangul Syllable */ + ["\uB4B6", "\uB4B6"], /* Hangul Syllable */ + ["\uB4B7", "\uB4B7"], /* Hangul Syllable */ + ["\uB4B8", "\uB4B8"], /* Hangul Syllable */ + ["\uB4B9", "\uB4B9"], /* Hangul Syllable */ + ["\uB4BA", "\uB4BA"], /* Hangul Syllable */ + ["\uB4BB", "\uB4BB"], /* Hangul Syllable */ + ["\uB4BC", "\uB4BC"], /* Hangul Syllable */ + ["\uB4BD", "\uB4BD"], /* Hangul Syllable */ + ["\uB4BE", "\uB4BE"], /* Hangul Syllable */ + ["\uB4BF", "\uB4BF"], /* Hangul Syllable */ + ["\uB4C0", "\uB4C0"], /* Hangul Syllable */ + ["\uB4C1", "\uB4C1"], /* Hangul Syllable */ + ["\uB4C2", "\uB4C2"], /* Hangul Syllable */ + ["\uB4C3", "\uB4C3"], /* Hangul Syllable */ + ["\uB4C4", "\uB4C4"], /* Hangul Syllable */ + ["\uB4C5", "\uB4C5"], /* Hangul Syllable */ + ["\uB4C6", "\uB4C6"], /* Hangul Syllable */ + ["\uB4C7", "\uB4C7"], /* Hangul Syllable */ + ["\uB4C8", "\uB4C8"], /* Hangul Syllable */ + ["\uB4C9", "\uB4C9"], /* Hangul Syllable */ + ["\uB4CA", "\uB4CA"], /* Hangul Syllable */ + ["\uB4CB", "\uB4CB"], /* Hangul Syllable */ + ["\uB4CC", "\uB4CC"], /* Hangul Syllable */ + ["\uB4CD", "\uB4CD"], /* Hangul Syllable */ + ["\uB4CE", "\uB4CE"], /* Hangul Syllable */ + ["\uB4CF", "\uB4CF"], /* Hangul Syllable */ + ["\uB4D0", "\uB4D0"], /* Hangul Syllable */ + ["\uB4D1", "\uB4D1"], /* Hangul Syllable */ + ["\uB4D2", "\uB4D2"], /* Hangul Syllable */ + ["\uB4D3", "\uB4D3"], /* Hangul Syllable */ + ["\uB4D4", "\uB4D4"], /* Hangul Syllable */ + ["\uB4D5", "\uB4D5"], /* Hangul Syllable */ + ["\uB4D6", "\uB4D6"], /* Hangul Syllable */ + ["\uB4D7", "\uB4D7"], /* Hangul Syllable */ + ["\uB4D8", "\uB4D8"], /* Hangul Syllable */ + ["\uB4D9", "\uB4D9"], /* Hangul Syllable */ + ["\uB4DA", "\uB4DA"], /* Hangul Syllable */ + ["\uB4DB", "\uB4DB"], /* Hangul Syllable */ + ["\uB4DC", "\uB4DC"], /* Hangul Syllable */ + ["\uB4DD", "\uB4DD"], /* Hangul Syllable */ + ["\uB4DE", "\uB4DE"], /* Hangul Syllable */ + ["\uB4DF", "\uB4DF"], /* Hangul Syllable */ + ["\uB4E0", "\uB4E0"], /* Hangul Syllable */ + ["\uB4E1", "\uB4E1"], /* Hangul Syllable */ + ["\uB4E2", "\uB4E2"], /* Hangul Syllable */ + ["\uB4E3", "\uB4E3"], /* Hangul Syllable */ + ["\uB4E4", "\uB4E4"], /* Hangul Syllable */ + ["\uB4E5", "\uB4E5"], /* Hangul Syllable */ + ["\uB4E6", "\uB4E6"], /* Hangul Syllable */ + ["\uB4E7", "\uB4E7"], /* Hangul Syllable */ + ["\uB4E8", "\uB4E8"], /* Hangul Syllable */ + ["\uB4E9", "\uB4E9"], /* Hangul Syllable */ + ["\uB4EA", "\uB4EA"], /* Hangul Syllable */ + ["\uB4EB", "\uB4EB"], /* Hangul Syllable */ + ["\uB4EC", "\uB4EC"], /* Hangul Syllable */ + ["\uB4ED", "\uB4ED"], /* Hangul Syllable */ + ["\uB4EE", "\uB4EE"], /* Hangul Syllable */ + ["\uB4EF", "\uB4EF"], /* Hangul Syllable */ + ["\uB4F0", "\uB4F0"], /* Hangul Syllable */ + ["\uB4F1", "\uB4F1"], /* Hangul Syllable */ + ["\uB4F2", "\uB4F2"], /* Hangul Syllable */ + ["\uB4F3", "\uB4F3"], /* Hangul Syllable */ + ["\uB4F4", "\uB4F4"], /* Hangul Syllable */ + ["\uB4F5", "\uB4F5"], /* Hangul Syllable */ + ["\uB4F6", "\uB4F6"], /* Hangul Syllable */ + ["\uB4F7", "\uB4F7"], /* Hangul Syllable */ + ["\uB4F8", "\uB4F8"], /* Hangul Syllable */ + ["\uB4F9", "\uB4F9"], /* Hangul Syllable */ + ["\uB4FA", "\uB4FA"], /* Hangul Syllable */ + ["\uB4FB", "\uB4FB"], /* Hangul Syllable */ + ["\uB4FC", "\uB4FC"], /* Hangul Syllable */ + ["\uB4FD", "\uB4FD"], /* Hangul Syllable */ + ["\uB4FE", "\uB4FE"], /* Hangul Syllable */ + ["\uB4FF", "\uB4FF"], /* Hangul Syllable */ + ["\uB500", "\uB500"], /* Hangul Syllable */ + ["\uB501", "\uB501"], /* Hangul Syllable */ + ["\uB502", "\uB502"], /* Hangul Syllable */ + ["\uB503", "\uB503"], /* Hangul Syllable */ + ["\uB504", "\uB504"], /* Hangul Syllable */ + ["\uB505", "\uB505"], /* Hangul Syllable */ + ["\uB506", "\uB506"], /* Hangul Syllable */ + ["\uB507", "\uB507"], /* Hangul Syllable */ + ["\uB508", "\uB508"], /* Hangul Syllable */ + ["\uB509", "\uB509"], /* Hangul Syllable */ + ["\uB50A", "\uB50A"], /* Hangul Syllable */ + ["\uB50B", "\uB50B"], /* Hangul Syllable */ + ["\uB50C", "\uB50C"], /* Hangul Syllable */ + ["\uB50D", "\uB50D"], /* Hangul Syllable */ + ["\uB50E", "\uB50E"], /* Hangul Syllable */ + ["\uB50F", "\uB50F"], /* Hangul Syllable */ + ["\uB510", "\uB510"], /* Hangul Syllable */ + ["\uB511", "\uB511"], /* Hangul Syllable */ + ["\uB512", "\uB512"], /* Hangul Syllable */ + ["\uB513", "\uB513"], /* Hangul Syllable */ + ["\uB514", "\uB514"], /* Hangul Syllable */ + ["\uB515", "\uB515"], /* Hangul Syllable */ + ["\uB516", "\uB516"], /* Hangul Syllable */ + ["\uB517", "\uB517"], /* Hangul Syllable */ + ["\uB518", "\uB518"], /* Hangul Syllable */ + ["\uB519", "\uB519"], /* Hangul Syllable */ + ["\uB51A", "\uB51A"], /* Hangul Syllable */ + ["\uB51B", "\uB51B"], /* Hangul Syllable */ + ["\uB51C", "\uB51C"], /* Hangul Syllable */ + ["\uB51D", "\uB51D"], /* Hangul Syllable */ + ["\uB51E", "\uB51E"], /* Hangul Syllable */ + ["\uB51F", "\uB51F"], /* Hangul Syllable */ + ["\uB520", "\uB520"], /* Hangul Syllable */ + ["\uB521", "\uB521"], /* Hangul Syllable */ + ["\uB522", "\uB522"], /* Hangul Syllable */ + ["\uB523", "\uB523"], /* Hangul Syllable */ + ["\uB524", "\uB524"], /* Hangul Syllable */ + ["\uB525", "\uB525"], /* Hangul Syllable */ + ["\uB526", "\uB526"], /* Hangul Syllable */ + ["\uB527", "\uB527"], /* Hangul Syllable */ + ["\uB528", "\uB528"], /* Hangul Syllable */ + ["\uB529", "\uB529"], /* Hangul Syllable */ + ["\uB52A", "\uB52A"], /* Hangul Syllable */ + ["\uB52B", "\uB52B"], /* Hangul Syllable */ + ["\uB52C", "\uB52C"], /* Hangul Syllable */ + ["\uB52D", "\uB52D"], /* Hangul Syllable */ + ["\uB52E", "\uB52E"], /* Hangul Syllable */ + ["\uB52F", "\uB52F"], /* Hangul Syllable */ + ["\uB530", "\uB530"], /* Hangul Syllable */ + ["\uB531", "\uB531"], /* Hangul Syllable */ + ["\uB532", "\uB532"], /* Hangul Syllable */ + ["\uB533", "\uB533"], /* Hangul Syllable */ + ["\uB534", "\uB534"], /* Hangul Syllable */ + ["\uB535", "\uB535"], /* Hangul Syllable */ + ["\uB536", "\uB536"], /* Hangul Syllable */ + ["\uB537", "\uB537"], /* Hangul Syllable */ + ["\uB538", "\uB538"], /* Hangul Syllable */ + ["\uB539", "\uB539"], /* Hangul Syllable */ + ["\uB53A", "\uB53A"], /* Hangul Syllable */ + ["\uB53B", "\uB53B"], /* Hangul Syllable */ + ["\uB53C", "\uB53C"], /* Hangul Syllable */ + ["\uB53D", "\uB53D"], /* Hangul Syllable */ + ["\uB53E", "\uB53E"], /* Hangul Syllable */ + ["\uB53F", "\uB53F"], /* Hangul Syllable */ + ["\uB540", "\uB540"], /* Hangul Syllable */ + ["\uB541", "\uB541"], /* Hangul Syllable */ + ["\uB542", "\uB542"], /* Hangul Syllable */ + ["\uB543", "\uB543"], /* Hangul Syllable */ + ["\uB544", "\uB544"], /* Hangul Syllable */ + ["\uB545", "\uB545"], /* Hangul Syllable */ + ["\uB546", "\uB546"], /* Hangul Syllable */ + ["\uB547", "\uB547"], /* Hangul Syllable */ + ["\uB548", "\uB548"], /* Hangul Syllable */ + ["\uB549", "\uB549"], /* Hangul Syllable */ + ["\uB54A", "\uB54A"], /* Hangul Syllable */ + ["\uB54B", "\uB54B"], /* Hangul Syllable */ + ["\uB54C", "\uB54C"], /* Hangul Syllable */ + ["\uB54D", "\uB54D"], /* Hangul Syllable */ + ["\uB54E", "\uB54E"], /* Hangul Syllable */ + ["\uB54F", "\uB54F"], /* Hangul Syllable */ + ["\uB550", "\uB550"], /* Hangul Syllable */ + ["\uB551", "\uB551"], /* Hangul Syllable */ + ["\uB552", "\uB552"], /* Hangul Syllable */ + ["\uB553", "\uB553"], /* Hangul Syllable */ + ["\uB554", "\uB554"], /* Hangul Syllable */ + ["\uB555", "\uB555"], /* Hangul Syllable */ + ["\uB556", "\uB556"], /* Hangul Syllable */ + ["\uB557", "\uB557"], /* Hangul Syllable */ + ["\uB558", "\uB558"], /* Hangul Syllable */ + ["\uB559", "\uB559"], /* Hangul Syllable */ + ["\uB55A", "\uB55A"], /* Hangul Syllable */ + ["\uB55B", "\uB55B"], /* Hangul Syllable */ + ["\uB55C", "\uB55C"], /* Hangul Syllable */ + ["\uB55D", "\uB55D"], /* Hangul Syllable */ + ["\uB55E", "\uB55E"], /* Hangul Syllable */ + ["\uB55F", "\uB55F"], /* Hangul Syllable */ + ["\uB560", "\uB560"], /* Hangul Syllable */ + ["\uB561", "\uB561"], /* Hangul Syllable */ + ["\uB562", "\uB562"], /* Hangul Syllable */ + ["\uB563", "\uB563"], /* Hangul Syllable */ + ["\uB564", "\uB564"], /* Hangul Syllable */ + ["\uB565", "\uB565"], /* Hangul Syllable */ + ["\uB566", "\uB566"], /* Hangul Syllable */ + ["\uB567", "\uB567"], /* Hangul Syllable */ + ["\uB568", "\uB568"], /* Hangul Syllable */ + ["\uB569", "\uB569"], /* Hangul Syllable */ + ["\uB56A", "\uB56A"], /* Hangul Syllable */ + ["\uB56B", "\uB56B"], /* Hangul Syllable */ + ["\uB56C", "\uB56C"], /* Hangul Syllable */ + ["\uB56D", "\uB56D"], /* Hangul Syllable */ + ["\uB56E", "\uB56E"], /* Hangul Syllable */ + ["\uB56F", "\uB56F"], /* Hangul Syllable */ + ["\uB570", "\uB570"], /* Hangul Syllable */ + ["\uB571", "\uB571"], /* Hangul Syllable */ + ["\uB572", "\uB572"], /* Hangul Syllable */ + ["\uB573", "\uB573"], /* Hangul Syllable */ + ["\uB574", "\uB574"], /* Hangul Syllable */ + ["\uB575", "\uB575"], /* Hangul Syllable */ + ["\uB576", "\uB576"], /* Hangul Syllable */ + ["\uB577", "\uB577"], /* Hangul Syllable */ + ["\uB578", "\uB578"], /* Hangul Syllable */ + ["\uB579", "\uB579"], /* Hangul Syllable */ + ["\uB57A", "\uB57A"], /* Hangul Syllable */ + ["\uB57B", "\uB57B"], /* Hangul Syllable */ + ["\uB57C", "\uB57C"], /* Hangul Syllable */ + ["\uB57D", "\uB57D"], /* Hangul Syllable */ + ["\uB57E", "\uB57E"], /* Hangul Syllable */ + ["\uB57F", "\uB57F"], /* Hangul Syllable */ + ["\uB580", "\uB580"], /* Hangul Syllable */ + ["\uB581", "\uB581"], /* Hangul Syllable */ + ["\uB582", "\uB582"], /* Hangul Syllable */ + ["\uB583", "\uB583"], /* Hangul Syllable */ + ["\uB584", "\uB584"], /* Hangul Syllable */ + ["\uB585", "\uB585"], /* Hangul Syllable */ + ["\uB586", "\uB586"], /* Hangul Syllable */ + ["\uB587", "\uB587"], /* Hangul Syllable */ + ["\uB588", "\uB588"], /* Hangul Syllable */ + ["\uB589", "\uB589"], /* Hangul Syllable */ + ["\uB58A", "\uB58A"], /* Hangul Syllable */ + ["\uB58B", "\uB58B"], /* Hangul Syllable */ + ["\uB58C", "\uB58C"], /* Hangul Syllable */ + ["\uB58D", "\uB58D"], /* Hangul Syllable */ + ["\uB58E", "\uB58E"], /* Hangul Syllable */ + ["\uB58F", "\uB58F"], /* Hangul Syllable */ + ["\uB590", "\uB590"], /* Hangul Syllable */ + ["\uB591", "\uB591"], /* Hangul Syllable */ + ["\uB592", "\uB592"], /* Hangul Syllable */ + ["\uB593", "\uB593"], /* Hangul Syllable */ + ["\uB594", "\uB594"], /* Hangul Syllable */ + ["\uB595", "\uB595"], /* Hangul Syllable */ + ["\uB596", "\uB596"], /* Hangul Syllable */ + ["\uB597", "\uB597"], /* Hangul Syllable */ + ["\uB598", "\uB598"], /* Hangul Syllable */ + ["\uB599", "\uB599"], /* Hangul Syllable */ + ["\uB59A", "\uB59A"], /* Hangul Syllable */ + ["\uB59B", "\uB59B"], /* Hangul Syllable */ + ["\uB59C", "\uB59C"], /* Hangul Syllable */ + ["\uB59D", "\uB59D"], /* Hangul Syllable */ + ["\uB59E", "\uB59E"], /* Hangul Syllable */ + ["\uB59F", "\uB59F"], /* Hangul Syllable */ + ["\uB5A0", "\uB5A0"], /* Hangul Syllable */ + ["\uB5A1", "\uB5A1"], /* Hangul Syllable */ + ["\uB5A2", "\uB5A2"], /* Hangul Syllable */ + ["\uB5A3", "\uB5A3"], /* Hangul Syllable */ + ["\uB5A4", "\uB5A4"], /* Hangul Syllable */ + ["\uB5A5", "\uB5A5"], /* Hangul Syllable */ + ["\uB5A6", "\uB5A6"], /* Hangul Syllable */ + ["\uB5A7", "\uB5A7"], /* Hangul Syllable */ + ["\uB5A8", "\uB5A8"], /* Hangul Syllable */ + ["\uB5A9", "\uB5A9"], /* Hangul Syllable */ + ["\uB5AA", "\uB5AA"], /* Hangul Syllable */ + ["\uB5AB", "\uB5AB"], /* Hangul Syllable */ + ["\uB5AC", "\uB5AC"], /* Hangul Syllable */ + ["\uB5AD", "\uB5AD"], /* Hangul Syllable */ + ["\uB5AE", "\uB5AE"], /* Hangul Syllable */ + ["\uB5AF", "\uB5AF"], /* Hangul Syllable */ + ["\uB5B0", "\uB5B0"], /* Hangul Syllable */ + ["\uB5B1", "\uB5B1"], /* Hangul Syllable */ + ["\uB5B2", "\uB5B2"], /* Hangul Syllable */ + ["\uB5B3", "\uB5B3"], /* Hangul Syllable */ + ["\uB5B4", "\uB5B4"], /* Hangul Syllable */ + ["\uB5B5", "\uB5B5"], /* Hangul Syllable */ + ["\uB5B6", "\uB5B6"], /* Hangul Syllable */ + ["\uB5B7", "\uB5B7"], /* Hangul Syllable */ + ["\uB5B8", "\uB5B8"], /* Hangul Syllable */ + ["\uB5B9", "\uB5B9"], /* Hangul Syllable */ + ["\uB5BA", "\uB5BA"], /* Hangul Syllable */ + ["\uB5BB", "\uB5BB"], /* Hangul Syllable */ + ["\uB5BC", "\uB5BC"], /* Hangul Syllable */ + ["\uB5BD", "\uB5BD"], /* Hangul Syllable */ + ["\uB5BE", "\uB5BE"], /* Hangul Syllable */ + ["\uB5BF", "\uB5BF"], /* Hangul Syllable */ + ["\uB5C0", "\uB5C0"], /* Hangul Syllable */ + ["\uB5C1", "\uB5C1"], /* Hangul Syllable */ + ["\uB5C2", "\uB5C2"], /* Hangul Syllable */ + ["\uB5C3", "\uB5C3"], /* Hangul Syllable */ + ["\uB5C4", "\uB5C4"], /* Hangul Syllable */ + ["\uB5C5", "\uB5C5"], /* Hangul Syllable */ + ["\uB5C6", "\uB5C6"], /* Hangul Syllable */ + ["\uB5C7", "\uB5C7"], /* Hangul Syllable */ + ["\uB5C8", "\uB5C8"], /* Hangul Syllable */ + ["\uB5C9", "\uB5C9"], /* Hangul Syllable */ + ["\uB5CA", "\uB5CA"], /* Hangul Syllable */ + ["\uB5CB", "\uB5CB"], /* Hangul Syllable */ + ["\uB5CC", "\uB5CC"], /* Hangul Syllable */ + ["\uB5CD", "\uB5CD"], /* Hangul Syllable */ + ["\uB5CE", "\uB5CE"], /* Hangul Syllable */ + ["\uB5CF", "\uB5CF"], /* Hangul Syllable */ + ["\uB5D0", "\uB5D0"], /* Hangul Syllable */ + ["\uB5D1", "\uB5D1"], /* Hangul Syllable */ + ["\uB5D2", "\uB5D2"], /* Hangul Syllable */ + ["\uB5D3", "\uB5D3"], /* Hangul Syllable */ + ["\uB5D4", "\uB5D4"], /* Hangul Syllable */ + ["\uB5D5", "\uB5D5"], /* Hangul Syllable */ + ["\uB5D6", "\uB5D6"], /* Hangul Syllable */ + ["\uB5D7", "\uB5D7"], /* Hangul Syllable */ + ["\uB5D8", "\uB5D8"], /* Hangul Syllable */ + ["\uB5D9", "\uB5D9"], /* Hangul Syllable */ + ["\uB5DA", "\uB5DA"], /* Hangul Syllable */ + ["\uB5DB", "\uB5DB"], /* Hangul Syllable */ + ["\uB5DC", "\uB5DC"], /* Hangul Syllable */ + ["\uB5DD", "\uB5DD"], /* Hangul Syllable */ + ["\uB5DE", "\uB5DE"], /* Hangul Syllable */ + ["\uB5DF", "\uB5DF"], /* Hangul Syllable */ + ["\uB5E0", "\uB5E0"], /* Hangul Syllable */ + ["\uB5E1", "\uB5E1"], /* Hangul Syllable */ + ["\uB5E2", "\uB5E2"], /* Hangul Syllable */ + ["\uB5E3", "\uB5E3"], /* Hangul Syllable */ + ["\uB5E4", "\uB5E4"], /* Hangul Syllable */ + ["\uB5E5", "\uB5E5"], /* Hangul Syllable */ + ["\uB5E6", "\uB5E6"], /* Hangul Syllable */ + ["\uB5E7", "\uB5E7"], /* Hangul Syllable */ + ["\uB5E8", "\uB5E8"], /* Hangul Syllable */ + ["\uB5E9", "\uB5E9"], /* Hangul Syllable */ + ["\uB5EA", "\uB5EA"], /* Hangul Syllable */ + ["\uB5EB", "\uB5EB"], /* Hangul Syllable */ + ["\uB5EC", "\uB5EC"], /* Hangul Syllable */ + ["\uB5ED", "\uB5ED"], /* Hangul Syllable */ + ["\uB5EE", "\uB5EE"], /* Hangul Syllable */ + ["\uB5EF", "\uB5EF"], /* Hangul Syllable */ + ["\uB5F0", "\uB5F0"], /* Hangul Syllable */ + ["\uB5F1", "\uB5F1"], /* Hangul Syllable */ + ["\uB5F2", "\uB5F2"], /* Hangul Syllable */ + ["\uB5F3", "\uB5F3"], /* Hangul Syllable */ + ["\uB5F4", "\uB5F4"], /* Hangul Syllable */ + ["\uB5F5", "\uB5F5"], /* Hangul Syllable */ + ["\uB5F6", "\uB5F6"], /* Hangul Syllable */ + ["\uB5F7", "\uB5F7"], /* Hangul Syllable */ + ["\uB5F8", "\uB5F8"], /* Hangul Syllable */ + ["\uB5F9", "\uB5F9"], /* Hangul Syllable */ + ["\uB5FA", "\uB5FA"], /* Hangul Syllable */ + ["\uB5FB", "\uB5FB"], /* Hangul Syllable */ + ["\uB5FC", "\uB5FC"], /* Hangul Syllable */ + ["\uB5FD", "\uB5FD"], /* Hangul Syllable */ + ["\uB5FE", "\uB5FE"], /* Hangul Syllable */ + ["\uB5FF", "\uB5FF"], /* Hangul Syllable */ + ["\uB600", "\uB600"], /* Hangul Syllable */ + ["\uB601", "\uB601"], /* Hangul Syllable */ + ["\uB602", "\uB602"], /* Hangul Syllable */ + ["\uB603", "\uB603"], /* Hangul Syllable */ + ["\uB604", "\uB604"], /* Hangul Syllable */ + ["\uB605", "\uB605"], /* Hangul Syllable */ + ["\uB606", "\uB606"], /* Hangul Syllable */ + ["\uB607", "\uB607"], /* Hangul Syllable */ + ["\uB608", "\uB608"], /* Hangul Syllable */ + ["\uB609", "\uB609"], /* Hangul Syllable */ + ["\uB60A", "\uB60A"], /* Hangul Syllable */ + ["\uB60B", "\uB60B"], /* Hangul Syllable */ + ["\uB60C", "\uB60C"], /* Hangul Syllable */ + ["\uB60D", "\uB60D"], /* Hangul Syllable */ + ["\uB60E", "\uB60E"], /* Hangul Syllable */ + ["\uB60F", "\uB60F"], /* Hangul Syllable */ + ["\uB610", "\uB610"], /* Hangul Syllable */ + ["\uB611", "\uB611"], /* Hangul Syllable */ + ["\uB612", "\uB612"], /* Hangul Syllable */ + ["\uB613", "\uB613"], /* Hangul Syllable */ + ["\uB614", "\uB614"], /* Hangul Syllable */ + ["\uB615", "\uB615"], /* Hangul Syllable */ + ["\uB616", "\uB616"], /* Hangul Syllable */ + ["\uB617", "\uB617"], /* Hangul Syllable */ + ["\uB618", "\uB618"], /* Hangul Syllable */ + ["\uB619", "\uB619"], /* Hangul Syllable */ + ["\uB61A", "\uB61A"], /* Hangul Syllable */ + ["\uB61B", "\uB61B"], /* Hangul Syllable */ + ["\uB61C", "\uB61C"], /* Hangul Syllable */ + ["\uB61D", "\uB61D"], /* Hangul Syllable */ + ["\uB61E", "\uB61E"], /* Hangul Syllable */ + ["\uB61F", "\uB61F"], /* Hangul Syllable */ + ["\uB620", "\uB620"], /* Hangul Syllable */ + ["\uB621", "\uB621"], /* Hangul Syllable */ + ["\uB622", "\uB622"], /* Hangul Syllable */ + ["\uB623", "\uB623"], /* Hangul Syllable */ + ["\uB624", "\uB624"], /* Hangul Syllable */ + ["\uB625", "\uB625"], /* Hangul Syllable */ + ["\uB626", "\uB626"], /* Hangul Syllable */ + ["\uB627", "\uB627"], /* Hangul Syllable */ + ["\uB628", "\uB628"], /* Hangul Syllable */ + ["\uB629", "\uB629"], /* Hangul Syllable */ + ["\uB62A", "\uB62A"], /* Hangul Syllable */ + ["\uB62B", "\uB62B"], /* Hangul Syllable */ + ["\uB62C", "\uB62C"], /* Hangul Syllable */ + ["\uB62D", "\uB62D"], /* Hangul Syllable */ + ["\uB62E", "\uB62E"], /* Hangul Syllable */ + ["\uB62F", "\uB62F"], /* Hangul Syllable */ + ["\uB630", "\uB630"], /* Hangul Syllable */ + ["\uB631", "\uB631"], /* Hangul Syllable */ + ["\uB632", "\uB632"], /* Hangul Syllable */ + ["\uB633", "\uB633"], /* Hangul Syllable */ + ["\uB634", "\uB634"], /* Hangul Syllable */ + ["\uB635", "\uB635"], /* Hangul Syllable */ + ["\uB636", "\uB636"], /* Hangul Syllable */ + ["\uB637", "\uB637"], /* Hangul Syllable */ + ["\uB638", "\uB638"], /* Hangul Syllable */ + ["\uB639", "\uB639"], /* Hangul Syllable */ + ["\uB63A", "\uB63A"], /* Hangul Syllable */ + ["\uB63B", "\uB63B"], /* Hangul Syllable */ + ["\uB63C", "\uB63C"], /* Hangul Syllable */ + ["\uB63D", "\uB63D"], /* Hangul Syllable */ + ["\uB63E", "\uB63E"], /* Hangul Syllable */ + ["\uB63F", "\uB63F"], /* Hangul Syllable */ + ["\uB640", "\uB640"], /* Hangul Syllable */ + ["\uB641", "\uB641"], /* Hangul Syllable */ + ["\uB642", "\uB642"], /* Hangul Syllable */ + ["\uB643", "\uB643"], /* Hangul Syllable */ + ["\uB644", "\uB644"], /* Hangul Syllable */ + ["\uB645", "\uB645"], /* Hangul Syllable */ + ["\uB646", "\uB646"], /* Hangul Syllable */ + ["\uB647", "\uB647"], /* Hangul Syllable */ + ["\uB648", "\uB648"], /* Hangul Syllable */ + ["\uB649", "\uB649"], /* Hangul Syllable */ + ["\uB64A", "\uB64A"], /* Hangul Syllable */ + ["\uB64B", "\uB64B"], /* Hangul Syllable */ + ["\uB64C", "\uB64C"], /* Hangul Syllable */ + ["\uB64D", "\uB64D"], /* Hangul Syllable */ + ["\uB64E", "\uB64E"], /* Hangul Syllable */ + ["\uB64F", "\uB64F"], /* Hangul Syllable */ + ["\uB650", "\uB650"], /* Hangul Syllable */ + ["\uB651", "\uB651"], /* Hangul Syllable */ + ["\uB652", "\uB652"], /* Hangul Syllable */ + ["\uB653", "\uB653"], /* Hangul Syllable */ + ["\uB654", "\uB654"], /* Hangul Syllable */ + ["\uB655", "\uB655"], /* Hangul Syllable */ + ["\uB656", "\uB656"], /* Hangul Syllable */ + ["\uB657", "\uB657"], /* Hangul Syllable */ + ["\uB658", "\uB658"], /* Hangul Syllable */ + ["\uB659", "\uB659"], /* Hangul Syllable */ + ["\uB65A", "\uB65A"], /* Hangul Syllable */ + ["\uB65B", "\uB65B"], /* Hangul Syllable */ + ["\uB65C", "\uB65C"], /* Hangul Syllable */ + ["\uB65D", "\uB65D"], /* Hangul Syllable */ + ["\uB65E", "\uB65E"], /* Hangul Syllable */ + ["\uB65F", "\uB65F"], /* Hangul Syllable */ + ["\uB660", "\uB660"], /* Hangul Syllable */ + ["\uB661", "\uB661"], /* Hangul Syllable */ + ["\uB662", "\uB662"], /* Hangul Syllable */ + ["\uB663", "\uB663"], /* Hangul Syllable */ + ["\uB664", "\uB664"], /* Hangul Syllable */ + ["\uB665", "\uB665"], /* Hangul Syllable */ + ["\uB666", "\uB666"], /* Hangul Syllable */ + ["\uB667", "\uB667"], /* Hangul Syllable */ + ["\uB668", "\uB668"], /* Hangul Syllable */ + ["\uB669", "\uB669"], /* Hangul Syllable */ + ["\uB66A", "\uB66A"], /* Hangul Syllable */ + ["\uB66B", "\uB66B"], /* Hangul Syllable */ + ["\uB66C", "\uB66C"], /* Hangul Syllable */ + ["\uB66D", "\uB66D"], /* Hangul Syllable */ + ["\uB66E", "\uB66E"], /* Hangul Syllable */ + ["\uB66F", "\uB66F"], /* Hangul Syllable */ + ["\uB670", "\uB670"], /* Hangul Syllable */ + ["\uB671", "\uB671"], /* Hangul Syllable */ + ["\uB672", "\uB672"], /* Hangul Syllable */ + ["\uB673", "\uB673"], /* Hangul Syllable */ + ["\uB674", "\uB674"], /* Hangul Syllable */ + ["\uB675", "\uB675"], /* Hangul Syllable */ + ["\uB676", "\uB676"], /* Hangul Syllable */ + ["\uB677", "\uB677"], /* Hangul Syllable */ + ["\uB678", "\uB678"], /* Hangul Syllable */ + ["\uB679", "\uB679"], /* Hangul Syllable */ + ["\uB67A", "\uB67A"], /* Hangul Syllable */ + ["\uB67B", "\uB67B"], /* Hangul Syllable */ + ["\uB67C", "\uB67C"], /* Hangul Syllable */ + ["\uB67D", "\uB67D"], /* Hangul Syllable */ + ["\uB67E", "\uB67E"], /* Hangul Syllable */ + ["\uB67F", "\uB67F"], /* Hangul Syllable */ + ["\uB680", "\uB680"], /* Hangul Syllable */ + ["\uB681", "\uB681"], /* Hangul Syllable */ + ["\uB682", "\uB682"], /* Hangul Syllable */ + ["\uB683", "\uB683"], /* Hangul Syllable */ + ["\uB684", "\uB684"], /* Hangul Syllable */ + ["\uB685", "\uB685"], /* Hangul Syllable */ + ["\uB686", "\uB686"], /* Hangul Syllable */ + ["\uB687", "\uB687"], /* Hangul Syllable */ + ["\uB688", "\uB688"], /* Hangul Syllable */ + ["\uB689", "\uB689"], /* Hangul Syllable */ + ["\uB68A", "\uB68A"], /* Hangul Syllable */ + ["\uB68B", "\uB68B"], /* Hangul Syllable */ + ["\uB68C", "\uB68C"], /* Hangul Syllable */ + ["\uB68D", "\uB68D"], /* Hangul Syllable */ + ["\uB68E", "\uB68E"], /* Hangul Syllable */ + ["\uB68F", "\uB68F"], /* Hangul Syllable */ + ["\uB690", "\uB690"], /* Hangul Syllable */ + ["\uB691", "\uB691"], /* Hangul Syllable */ + ["\uB692", "\uB692"], /* Hangul Syllable */ + ["\uB693", "\uB693"], /* Hangul Syllable */ + ["\uB694", "\uB694"], /* Hangul Syllable */ + ["\uB695", "\uB695"], /* Hangul Syllable */ + ["\uB696", "\uB696"], /* Hangul Syllable */ + ["\uB697", "\uB697"], /* Hangul Syllable */ + ["\uB698", "\uB698"], /* Hangul Syllable */ + ["\uB699", "\uB699"], /* Hangul Syllable */ + ["\uB69A", "\uB69A"], /* Hangul Syllable */ + ["\uB69B", "\uB69B"], /* Hangul Syllable */ + ["\uB69C", "\uB69C"], /* Hangul Syllable */ + ["\uB69D", "\uB69D"], /* Hangul Syllable */ + ["\uB69E", "\uB69E"], /* Hangul Syllable */ + ["\uB69F", "\uB69F"], /* Hangul Syllable */ + ["\uB6A0", "\uB6A0"], /* Hangul Syllable */ + ["\uB6A1", "\uB6A1"], /* Hangul Syllable */ + ["\uB6A2", "\uB6A2"], /* Hangul Syllable */ + ["\uB6A3", "\uB6A3"], /* Hangul Syllable */ + ["\uB6A4", "\uB6A4"], /* Hangul Syllable */ + ["\uB6A5", "\uB6A5"], /* Hangul Syllable */ + ["\uB6A6", "\uB6A6"], /* Hangul Syllable */ + ["\uB6A7", "\uB6A7"], /* Hangul Syllable */ + ["\uB6A8", "\uB6A8"], /* Hangul Syllable */ + ["\uB6A9", "\uB6A9"], /* Hangul Syllable */ + ["\uB6AA", "\uB6AA"], /* Hangul Syllable */ + ["\uB6AB", "\uB6AB"], /* Hangul Syllable */ + ["\uB6AC", "\uB6AC"], /* Hangul Syllable */ + ["\uB6AD", "\uB6AD"], /* Hangul Syllable */ + ["\uB6AE", "\uB6AE"], /* Hangul Syllable */ + ["\uB6AF", "\uB6AF"], /* Hangul Syllable */ + ["\uB6B0", "\uB6B0"], /* Hangul Syllable */ + ["\uB6B1", "\uB6B1"], /* Hangul Syllable */ + ["\uB6B2", "\uB6B2"], /* Hangul Syllable */ + ["\uB6B3", "\uB6B3"], /* Hangul Syllable */ + ["\uB6B4", "\uB6B4"], /* Hangul Syllable */ + ["\uB6B5", "\uB6B5"], /* Hangul Syllable */ + ["\uB6B6", "\uB6B6"], /* Hangul Syllable */ + ["\uB6B7", "\uB6B7"], /* Hangul Syllable */ + ["\uB6B8", "\uB6B8"], /* Hangul Syllable */ + ["\uB6B9", "\uB6B9"], /* Hangul Syllable */ + ["\uB6BA", "\uB6BA"], /* Hangul Syllable */ + ["\uB6BB", "\uB6BB"], /* Hangul Syllable */ + ["\uB6BC", "\uB6BC"], /* Hangul Syllable */ + ["\uB6BD", "\uB6BD"], /* Hangul Syllable */ + ["\uB6BE", "\uB6BE"], /* Hangul Syllable */ + ["\uB6BF", "\uB6BF"], /* Hangul Syllable */ + ["\uB6C0", "\uB6C0"], /* Hangul Syllable */ + ["\uB6C1", "\uB6C1"], /* Hangul Syllable */ + ["\uB6C2", "\uB6C2"], /* Hangul Syllable */ + ["\uB6C3", "\uB6C3"], /* Hangul Syllable */ + ["\uB6C4", "\uB6C4"], /* Hangul Syllable */ + ["\uB6C5", "\uB6C5"], /* Hangul Syllable */ + ["\uB6C6", "\uB6C6"], /* Hangul Syllable */ + ["\uB6C7", "\uB6C7"], /* Hangul Syllable */ + ["\uB6C8", "\uB6C8"], /* Hangul Syllable */ + ["\uB6C9", "\uB6C9"], /* Hangul Syllable */ + ["\uB6CA", "\uB6CA"], /* Hangul Syllable */ + ["\uB6CB", "\uB6CB"], /* Hangul Syllable */ + ["\uB6CC", "\uB6CC"], /* Hangul Syllable */ + ["\uB6CD", "\uB6CD"], /* Hangul Syllable */ + ["\uB6CE", "\uB6CE"], /* Hangul Syllable */ + ["\uB6CF", "\uB6CF"], /* Hangul Syllable */ + ["\uB6D0", "\uB6D0"], /* Hangul Syllable */ + ["\uB6D1", "\uB6D1"], /* Hangul Syllable */ + ["\uB6D2", "\uB6D2"], /* Hangul Syllable */ + ["\uB6D3", "\uB6D3"], /* Hangul Syllable */ + ["\uB6D4", "\uB6D4"], /* Hangul Syllable */ + ["\uB6D5", "\uB6D5"], /* Hangul Syllable */ + ["\uB6D6", "\uB6D6"], /* Hangul Syllable */ + ["\uB6D7", "\uB6D7"], /* Hangul Syllable */ + ["\uB6D8", "\uB6D8"], /* Hangul Syllable */ + ["\uB6D9", "\uB6D9"], /* Hangul Syllable */ + ["\uB6DA", "\uB6DA"], /* Hangul Syllable */ + ["\uB6DB", "\uB6DB"], /* Hangul Syllable */ + ["\uB6DC", "\uB6DC"], /* Hangul Syllable */ + ["\uB6DD", "\uB6DD"], /* Hangul Syllable */ + ["\uB6DE", "\uB6DE"], /* Hangul Syllable */ + ["\uB6DF", "\uB6DF"], /* Hangul Syllable */ + ["\uB6E0", "\uB6E0"], /* Hangul Syllable */ + ["\uB6E1", "\uB6E1"], /* Hangul Syllable */ + ["\uB6E2", "\uB6E2"], /* Hangul Syllable */ + ["\uB6E3", "\uB6E3"], /* Hangul Syllable */ + ["\uB6E4", "\uB6E4"], /* Hangul Syllable */ + ["\uB6E5", "\uB6E5"], /* Hangul Syllable */ + ["\uB6E6", "\uB6E6"], /* Hangul Syllable */ + ["\uB6E7", "\uB6E7"], /* Hangul Syllable */ + ["\uB6E8", "\uB6E8"], /* Hangul Syllable */ + ["\uB6E9", "\uB6E9"], /* Hangul Syllable */ + ["\uB6EA", "\uB6EA"], /* Hangul Syllable */ + ["\uB6EB", "\uB6EB"], /* Hangul Syllable */ + ["\uB6EC", "\uB6EC"], /* Hangul Syllable */ + ["\uB6ED", "\uB6ED"], /* Hangul Syllable */ + ["\uB6EE", "\uB6EE"], /* Hangul Syllable */ + ["\uB6EF", "\uB6EF"], /* Hangul Syllable */ + ["\uB6F0", "\uB6F0"], /* Hangul Syllable */ + ["\uB6F1", "\uB6F1"], /* Hangul Syllable */ + ["\uB6F2", "\uB6F2"], /* Hangul Syllable */ + ["\uB6F3", "\uB6F3"], /* Hangul Syllable */ + ["\uB6F4", "\uB6F4"], /* Hangul Syllable */ + ["\uB6F5", "\uB6F5"], /* Hangul Syllable */ + ["\uB6F6", "\uB6F6"], /* Hangul Syllable */ + ["\uB6F7", "\uB6F7"], /* Hangul Syllable */ + ["\uB6F8", "\uB6F8"], /* Hangul Syllable */ + ["\uB6F9", "\uB6F9"], /* Hangul Syllable */ + ["\uB6FA", "\uB6FA"], /* Hangul Syllable */ + ["\uB6FB", "\uB6FB"], /* Hangul Syllable */ + ["\uB6FC", "\uB6FC"], /* Hangul Syllable */ + ["\uB6FD", "\uB6FD"], /* Hangul Syllable */ + ["\uB6FE", "\uB6FE"], /* Hangul Syllable */ + ["\uB6FF", "\uB6FF"], /* Hangul Syllable */ + ["\uB700", "\uB700"], /* Hangul Syllable */ + ["\uB701", "\uB701"], /* Hangul Syllable */ + ["\uB702", "\uB702"], /* Hangul Syllable */ + ["\uB703", "\uB703"], /* Hangul Syllable */ + ["\uB704", "\uB704"], /* Hangul Syllable */ + ["\uB705", "\uB705"], /* Hangul Syllable */ + ["\uB706", "\uB706"], /* Hangul Syllable */ + ["\uB707", "\uB707"], /* Hangul Syllable */ + ["\uB708", "\uB708"], /* Hangul Syllable */ + ["\uB709", "\uB709"], /* Hangul Syllable */ + ["\uB70A", "\uB70A"], /* Hangul Syllable */ + ["\uB70B", "\uB70B"], /* Hangul Syllable */ + ["\uB70C", "\uB70C"], /* Hangul Syllable */ + ["\uB70D", "\uB70D"], /* Hangul Syllable */ + ["\uB70E", "\uB70E"], /* Hangul Syllable */ + ["\uB70F", "\uB70F"], /* Hangul Syllable */ + ["\uB710", "\uB710"], /* Hangul Syllable */ + ["\uB711", "\uB711"], /* Hangul Syllable */ + ["\uB712", "\uB712"], /* Hangul Syllable */ + ["\uB713", "\uB713"], /* Hangul Syllable */ + ["\uB714", "\uB714"], /* Hangul Syllable */ + ["\uB715", "\uB715"], /* Hangul Syllable */ + ["\uB716", "\uB716"], /* Hangul Syllable */ + ["\uB717", "\uB717"], /* Hangul Syllable */ + ["\uB718", "\uB718"], /* Hangul Syllable */ + ["\uB719", "\uB719"], /* Hangul Syllable */ + ["\uB71A", "\uB71A"], /* Hangul Syllable */ + ["\uB71B", "\uB71B"], /* Hangul Syllable */ + ["\uB71C", "\uB71C"], /* Hangul Syllable */ + ["\uB71D", "\uB71D"], /* Hangul Syllable */ + ["\uB71E", "\uB71E"], /* Hangul Syllable */ + ["\uB71F", "\uB71F"], /* Hangul Syllable */ + ["\uB720", "\uB720"], /* Hangul Syllable */ + ["\uB721", "\uB721"], /* Hangul Syllable */ + ["\uB722", "\uB722"], /* Hangul Syllable */ + ["\uB723", "\uB723"], /* Hangul Syllable */ + ["\uB724", "\uB724"], /* Hangul Syllable */ + ["\uB725", "\uB725"], /* Hangul Syllable */ + ["\uB726", "\uB726"], /* Hangul Syllable */ + ["\uB727", "\uB727"], /* Hangul Syllable */ + ["\uB728", "\uB728"], /* Hangul Syllable */ + ["\uB729", "\uB729"], /* Hangul Syllable */ + ["\uB72A", "\uB72A"], /* Hangul Syllable */ + ["\uB72B", "\uB72B"], /* Hangul Syllable */ + ["\uB72C", "\uB72C"], /* Hangul Syllable */ + ["\uB72D", "\uB72D"], /* Hangul Syllable */ + ["\uB72E", "\uB72E"], /* Hangul Syllable */ + ["\uB72F", "\uB72F"], /* Hangul Syllable */ + ["\uB730", "\uB730"], /* Hangul Syllable */ + ["\uB731", "\uB731"], /* Hangul Syllable */ + ["\uB732", "\uB732"], /* Hangul Syllable */ + ["\uB733", "\uB733"], /* Hangul Syllable */ + ["\uB734", "\uB734"], /* Hangul Syllable */ + ["\uB735", "\uB735"], /* Hangul Syllable */ + ["\uB736", "\uB736"], /* Hangul Syllable */ + ["\uB737", "\uB737"], /* Hangul Syllable */ + ["\uB738", "\uB738"], /* Hangul Syllable */ + ["\uB739", "\uB739"], /* Hangul Syllable */ + ["\uB73A", "\uB73A"], /* Hangul Syllable */ + ["\uB73B", "\uB73B"], /* Hangul Syllable */ + ["\uB73C", "\uB73C"], /* Hangul Syllable */ + ["\uB73D", "\uB73D"], /* Hangul Syllable */ + ["\uB73E", "\uB73E"], /* Hangul Syllable */ + ["\uB73F", "\uB73F"], /* Hangul Syllable */ + ["\uB740", "\uB740"], /* Hangul Syllable */ + ["\uB741", "\uB741"], /* Hangul Syllable */ + ["\uB742", "\uB742"], /* Hangul Syllable */ + ["\uB743", "\uB743"], /* Hangul Syllable */ + ["\uB744", "\uB744"], /* Hangul Syllable */ + ["\uB745", "\uB745"], /* Hangul Syllable */ + ["\uB746", "\uB746"], /* Hangul Syllable */ + ["\uB747", "\uB747"], /* Hangul Syllable */ + ["\uB748", "\uB748"], /* Hangul Syllable */ + ["\uB749", "\uB749"], /* Hangul Syllable */ + ["\uB74A", "\uB74A"], /* Hangul Syllable */ + ["\uB74B", "\uB74B"], /* Hangul Syllable */ + ["\uB74C", "\uB74C"], /* Hangul Syllable */ + ["\uB74D", "\uB74D"], /* Hangul Syllable */ + ["\uB74E", "\uB74E"], /* Hangul Syllable */ + ["\uB74F", "\uB74F"], /* Hangul Syllable */ + ["\uB750", "\uB750"], /* Hangul Syllable */ + ["\uB751", "\uB751"], /* Hangul Syllable */ + ["\uB752", "\uB752"], /* Hangul Syllable */ + ["\uB753", "\uB753"], /* Hangul Syllable */ + ["\uB754", "\uB754"], /* Hangul Syllable */ + ["\uB755", "\uB755"], /* Hangul Syllable */ + ["\uB756", "\uB756"], /* Hangul Syllable */ + ["\uB757", "\uB757"], /* Hangul Syllable */ + ["\uB758", "\uB758"], /* Hangul Syllable */ + ["\uB759", "\uB759"], /* Hangul Syllable */ + ["\uB75A", "\uB75A"], /* Hangul Syllable */ + ["\uB75B", "\uB75B"], /* Hangul Syllable */ + ["\uB75C", "\uB75C"], /* Hangul Syllable */ + ["\uB75D", "\uB75D"], /* Hangul Syllable */ + ["\uB75E", "\uB75E"], /* Hangul Syllable */ + ["\uB75F", "\uB75F"], /* Hangul Syllable */ + ["\uB760", "\uB760"], /* Hangul Syllable */ + ["\uB761", "\uB761"], /* Hangul Syllable */ + ["\uB762", "\uB762"], /* Hangul Syllable */ + ["\uB763", "\uB763"], /* Hangul Syllable */ + ["\uB764", "\uB764"], /* Hangul Syllable */ + ["\uB765", "\uB765"], /* Hangul Syllable */ + ["\uB766", "\uB766"], /* Hangul Syllable */ + ["\uB767", "\uB767"], /* Hangul Syllable */ + ["\uB768", "\uB768"], /* Hangul Syllable */ + ["\uB769", "\uB769"], /* Hangul Syllable */ + ["\uB76A", "\uB76A"], /* Hangul Syllable */ + ["\uB76B", "\uB76B"], /* Hangul Syllable */ + ["\uB76C", "\uB76C"], /* Hangul Syllable */ + ["\uB76D", "\uB76D"], /* Hangul Syllable */ + ["\uB76E", "\uB76E"], /* Hangul Syllable */ + ["\uB76F", "\uB76F"], /* Hangul Syllable */ + ["\uB770", "\uB770"], /* Hangul Syllable */ + ["\uB771", "\uB771"], /* Hangul Syllable */ + ["\uB772", "\uB772"], /* Hangul Syllable */ + ["\uB773", "\uB773"], /* Hangul Syllable */ + ["\uB774", "\uB774"], /* Hangul Syllable */ + ["\uB775", "\uB775"], /* Hangul Syllable */ + ["\uB776", "\uB776"], /* Hangul Syllable */ + ["\uB777", "\uB777"], /* Hangul Syllable */ + ["\uB778", "\uB778"], /* Hangul Syllable */ + ["\uB779", "\uB779"], /* Hangul Syllable */ + ["\uB77A", "\uB77A"], /* Hangul Syllable */ + ["\uB77B", "\uB77B"], /* Hangul Syllable */ + ["\uB77C", "\uB77C"], /* Hangul Syllable */ + ["\uB77D", "\uB77D"], /* Hangul Syllable */ + ["\uB77E", "\uB77E"], /* Hangul Syllable */ + ["\uB77F", "\uB77F"], /* Hangul Syllable */ + ["\uB780", "\uB780"], /* Hangul Syllable */ + ["\uB781", "\uB781"], /* Hangul Syllable */ + ["\uB782", "\uB782"], /* Hangul Syllable */ + ["\uB783", "\uB783"], /* Hangul Syllable */ + ["\uB784", "\uB784"], /* Hangul Syllable */ + ["\uB785", "\uB785"], /* Hangul Syllable */ + ["\uB786", "\uB786"], /* Hangul Syllable */ + ["\uB787", "\uB787"], /* Hangul Syllable */ + ["\uB788", "\uB788"], /* Hangul Syllable */ + ["\uB789", "\uB789"], /* Hangul Syllable */ + ["\uB78A", "\uB78A"], /* Hangul Syllable */ + ["\uB78B", "\uB78B"], /* Hangul Syllable */ + ["\uB78C", "\uB78C"], /* Hangul Syllable */ + ["\uB78D", "\uB78D"], /* Hangul Syllable */ + ["\uB78E", "\uB78E"], /* Hangul Syllable */ + ["\uB78F", "\uB78F"], /* Hangul Syllable */ + ["\uB790", "\uB790"], /* Hangul Syllable */ + ["\uB791", "\uB791"], /* Hangul Syllable */ + ["\uB792", "\uB792"], /* Hangul Syllable */ + ["\uB793", "\uB793"], /* Hangul Syllable */ + ["\uB794", "\uB794"], /* Hangul Syllable */ + ["\uB795", "\uB795"], /* Hangul Syllable */ + ["\uB796", "\uB796"], /* Hangul Syllable */ + ["\uB797", "\uB797"], /* Hangul Syllable */ + ["\uB798", "\uB798"], /* Hangul Syllable */ + ["\uB799", "\uB799"], /* Hangul Syllable */ + ["\uB79A", "\uB79A"], /* Hangul Syllable */ + ["\uB79B", "\uB79B"], /* Hangul Syllable */ + ["\uB79C", "\uB79C"], /* Hangul Syllable */ + ["\uB79D", "\uB79D"], /* Hangul Syllable */ + ["\uB79E", "\uB79E"], /* Hangul Syllable */ + ["\uB79F", "\uB79F"], /* Hangul Syllable */ + ["\uB7A0", "\uB7A0"], /* Hangul Syllable */ + ["\uB7A1", "\uB7A1"], /* Hangul Syllable */ + ["\uB7A2", "\uB7A2"], /* Hangul Syllable */ + ["\uB7A3", "\uB7A3"], /* Hangul Syllable */ + ["\uB7A4", "\uB7A4"], /* Hangul Syllable */ + ["\uB7A5", "\uB7A5"], /* Hangul Syllable */ + ["\uB7A6", "\uB7A6"], /* Hangul Syllable */ + ["\uB7A7", "\uB7A7"], /* Hangul Syllable */ + ["\uB7A8", "\uB7A8"], /* Hangul Syllable */ + ["\uB7A9", "\uB7A9"], /* Hangul Syllable */ + ["\uB7AA", "\uB7AA"], /* Hangul Syllable */ + ["\uB7AB", "\uB7AB"], /* Hangul Syllable */ + ["\uB7AC", "\uB7AC"], /* Hangul Syllable */ + ["\uB7AD", "\uB7AD"], /* Hangul Syllable */ + ["\uB7AE", "\uB7AE"], /* Hangul Syllable */ + ["\uB7AF", "\uB7AF"], /* Hangul Syllable */ + ["\uB7B0", "\uB7B0"], /* Hangul Syllable */ + ["\uB7B1", "\uB7B1"], /* Hangul Syllable */ + ["\uB7B2", "\uB7B2"], /* Hangul Syllable */ + ["\uB7B3", "\uB7B3"], /* Hangul Syllable */ + ["\uB7B4", "\uB7B4"], /* Hangul Syllable */ + ["\uB7B5", "\uB7B5"], /* Hangul Syllable */ + ["\uB7B6", "\uB7B6"], /* Hangul Syllable */ + ["\uB7B7", "\uB7B7"], /* Hangul Syllable */ + ["\uB7B8", "\uB7B8"], /* Hangul Syllable */ + ["\uB7B9", "\uB7B9"], /* Hangul Syllable */ + ["\uB7BA", "\uB7BA"], /* Hangul Syllable */ + ["\uB7BB", "\uB7BB"], /* Hangul Syllable */ + ["\uB7BC", "\uB7BC"], /* Hangul Syllable */ + ["\uB7BD", "\uB7BD"], /* Hangul Syllable */ + ["\uB7BE", "\uB7BE"], /* Hangul Syllable */ + ["\uB7BF", "\uB7BF"], /* Hangul Syllable */ + ["\uB7C0", "\uB7C0"], /* Hangul Syllable */ + ["\uB7C1", "\uB7C1"], /* Hangul Syllable */ + ["\uB7C2", "\uB7C2"], /* Hangul Syllable */ + ["\uB7C3", "\uB7C3"], /* Hangul Syllable */ + ["\uB7C4", "\uB7C4"], /* Hangul Syllable */ + ["\uB7C5", "\uB7C5"], /* Hangul Syllable */ + ["\uB7C6", "\uB7C6"], /* Hangul Syllable */ + ["\uB7C7", "\uB7C7"], /* Hangul Syllable */ + ["\uB7C8", "\uB7C8"], /* Hangul Syllable */ + ["\uB7C9", "\uB7C9"], /* Hangul Syllable */ + ["\uB7CA", "\uB7CA"], /* Hangul Syllable */ + ["\uB7CB", "\uB7CB"], /* Hangul Syllable */ + ["\uB7CC", "\uB7CC"], /* Hangul Syllable */ + ["\uB7CD", "\uB7CD"], /* Hangul Syllable */ + ["\uB7CE", "\uB7CE"], /* Hangul Syllable */ + ["\uB7CF", "\uB7CF"], /* Hangul Syllable */ + ["\uB7D0", "\uB7D0"], /* Hangul Syllable */ + ["\uB7D1", "\uB7D1"], /* Hangul Syllable */ + ["\uB7D2", "\uB7D2"], /* Hangul Syllable */ + ["\uB7D3", "\uB7D3"], /* Hangul Syllable */ + ["\uB7D4", "\uB7D4"], /* Hangul Syllable */ + ["\uB7D5", "\uB7D5"], /* Hangul Syllable */ + ["\uB7D6", "\uB7D6"], /* Hangul Syllable */ + ["\uB7D7", "\uB7D7"], /* Hangul Syllable */ + ["\uB7D8", "\uB7D8"], /* Hangul Syllable */ + ["\uB7D9", "\uB7D9"], /* Hangul Syllable */ + ["\uB7DA", "\uB7DA"], /* Hangul Syllable */ + ["\uB7DB", "\uB7DB"], /* Hangul Syllable */ + ["\uB7DC", "\uB7DC"], /* Hangul Syllable */ + ["\uB7DD", "\uB7DD"], /* Hangul Syllable */ + ["\uB7DE", "\uB7DE"], /* Hangul Syllable */ + ["\uB7DF", "\uB7DF"], /* Hangul Syllable */ + ["\uB7E0", "\uB7E0"], /* Hangul Syllable */ + ["\uB7E1", "\uB7E1"], /* Hangul Syllable */ + ["\uB7E2", "\uB7E2"], /* Hangul Syllable */ + ["\uB7E3", "\uB7E3"], /* Hangul Syllable */ + ["\uB7E4", "\uB7E4"], /* Hangul Syllable */ + ["\uB7E5", "\uB7E5"], /* Hangul Syllable */ + ["\uB7E6", "\uB7E6"], /* Hangul Syllable */ + ["\uB7E7", "\uB7E7"], /* Hangul Syllable */ + ["\uB7E8", "\uB7E8"], /* Hangul Syllable */ + ["\uB7E9", "\uB7E9"], /* Hangul Syllable */ + ["\uB7EA", "\uB7EA"], /* Hangul Syllable */ + ["\uB7EB", "\uB7EB"], /* Hangul Syllable */ + ["\uB7EC", "\uB7EC"], /* Hangul Syllable */ + ["\uB7ED", "\uB7ED"], /* Hangul Syllable */ + ["\uB7EE", "\uB7EE"], /* Hangul Syllable */ + ["\uB7EF", "\uB7EF"], /* Hangul Syllable */ + ["\uB7F0", "\uB7F0"], /* Hangul Syllable */ + ["\uB7F1", "\uB7F1"], /* Hangul Syllable */ + ["\uB7F2", "\uB7F2"], /* Hangul Syllable */ + ["\uB7F3", "\uB7F3"], /* Hangul Syllable */ + ["\uB7F4", "\uB7F4"], /* Hangul Syllable */ + ["\uB7F5", "\uB7F5"], /* Hangul Syllable */ + ["\uB7F6", "\uB7F6"], /* Hangul Syllable */ + ["\uB7F7", "\uB7F7"], /* Hangul Syllable */ + ["\uB7F8", "\uB7F8"], /* Hangul Syllable */ + ["\uB7F9", "\uB7F9"], /* Hangul Syllable */ + ["\uB7FA", "\uB7FA"], /* Hangul Syllable */ + ["\uB7FB", "\uB7FB"], /* Hangul Syllable */ + ["\uB7FC", "\uB7FC"], /* Hangul Syllable */ + ["\uB7FD", "\uB7FD"], /* Hangul Syllable */ + ["\uB7FE", "\uB7FE"], /* Hangul Syllable */ + ["\uB7FF", "\uB7FF"], /* Hangul Syllable */ + ["\uB800", "\uB800"], /* Hangul Syllable */ + ["\uB801", "\uB801"], /* Hangul Syllable */ + ["\uB802", "\uB802"], /* Hangul Syllable */ + ["\uB803", "\uB803"], /* Hangul Syllable */ + ["\uB804", "\uB804"], /* Hangul Syllable */ + ["\uB805", "\uB805"], /* Hangul Syllable */ + ["\uB806", "\uB806"], /* Hangul Syllable */ + ["\uB807", "\uB807"], /* Hangul Syllable */ + ["\uB808", "\uB808"], /* Hangul Syllable */ + ["\uB809", "\uB809"], /* Hangul Syllable */ + ["\uB80A", "\uB80A"], /* Hangul Syllable */ + ["\uB80B", "\uB80B"], /* Hangul Syllable */ + ["\uB80C", "\uB80C"], /* Hangul Syllable */ + ["\uB80D", "\uB80D"], /* Hangul Syllable */ + ["\uB80E", "\uB80E"], /* Hangul Syllable */ + ["\uB80F", "\uB80F"], /* Hangul Syllable */ + ["\uB810", "\uB810"], /* Hangul Syllable */ + ["\uB811", "\uB811"], /* Hangul Syllable */ + ["\uB812", "\uB812"], /* Hangul Syllable */ + ["\uB813", "\uB813"], /* Hangul Syllable */ + ["\uB814", "\uB814"], /* Hangul Syllable */ + ["\uB815", "\uB815"], /* Hangul Syllable */ + ["\uB816", "\uB816"], /* Hangul Syllable */ + ["\uB817", "\uB817"], /* Hangul Syllable */ + ["\uB818", "\uB818"], /* Hangul Syllable */ + ["\uB819", "\uB819"], /* Hangul Syllable */ + ["\uB81A", "\uB81A"], /* Hangul Syllable */ + ["\uB81B", "\uB81B"], /* Hangul Syllable */ + ["\uB81C", "\uB81C"], /* Hangul Syllable */ + ["\uB81D", "\uB81D"], /* Hangul Syllable */ + ["\uB81E", "\uB81E"], /* Hangul Syllable */ + ["\uB81F", "\uB81F"], /* Hangul Syllable */ + ["\uB820", "\uB820"], /* Hangul Syllable */ + ["\uB821", "\uB821"], /* Hangul Syllable */ + ["\uB822", "\uB822"], /* Hangul Syllable */ + ["\uB823", "\uB823"], /* Hangul Syllable */ + ["\uB824", "\uB824"], /* Hangul Syllable */ + ["\uB825", "\uB825"], /* Hangul Syllable */ + ["\uB826", "\uB826"], /* Hangul Syllable */ + ["\uB827", "\uB827"], /* Hangul Syllable */ + ["\uB828", "\uB828"], /* Hangul Syllable */ + ["\uB829", "\uB829"], /* Hangul Syllable */ + ["\uB82A", "\uB82A"], /* Hangul Syllable */ + ["\uB82B", "\uB82B"], /* Hangul Syllable */ + ["\uB82C", "\uB82C"], /* Hangul Syllable */ + ["\uB82D", "\uB82D"], /* Hangul Syllable */ + ["\uB82E", "\uB82E"], /* Hangul Syllable */ + ["\uB82F", "\uB82F"], /* Hangul Syllable */ + ["\uB830", "\uB830"], /* Hangul Syllable */ + ["\uB831", "\uB831"], /* Hangul Syllable */ + ["\uB832", "\uB832"], /* Hangul Syllable */ + ["\uB833", "\uB833"], /* Hangul Syllable */ + ["\uB834", "\uB834"], /* Hangul Syllable */ + ["\uB835", "\uB835"], /* Hangul Syllable */ + ["\uB836", "\uB836"], /* Hangul Syllable */ + ["\uB837", "\uB837"], /* Hangul Syllable */ + ["\uB838", "\uB838"], /* Hangul Syllable */ + ["\uB839", "\uB839"], /* Hangul Syllable */ + ["\uB83A", "\uB83A"], /* Hangul Syllable */ + ["\uB83B", "\uB83B"], /* Hangul Syllable */ + ["\uB83C", "\uB83C"], /* Hangul Syllable */ + ["\uB83D", "\uB83D"], /* Hangul Syllable */ + ["\uB83E", "\uB83E"], /* Hangul Syllable */ + ["\uB83F", "\uB83F"], /* Hangul Syllable */ + ["\uB840", "\uB840"], /* Hangul Syllable */ + ["\uB841", "\uB841"], /* Hangul Syllable */ + ["\uB842", "\uB842"], /* Hangul Syllable */ + ["\uB843", "\uB843"], /* Hangul Syllable */ + ["\uB844", "\uB844"], /* Hangul Syllable */ + ["\uB845", "\uB845"], /* Hangul Syllable */ + ["\uB846", "\uB846"], /* Hangul Syllable */ + ["\uB847", "\uB847"], /* Hangul Syllable */ + ["\uB848", "\uB848"], /* Hangul Syllable */ + ["\uB849", "\uB849"], /* Hangul Syllable */ + ["\uB84A", "\uB84A"], /* Hangul Syllable */ + ["\uB84B", "\uB84B"], /* Hangul Syllable */ + ["\uB84C", "\uB84C"], /* Hangul Syllable */ + ["\uB84D", "\uB84D"], /* Hangul Syllable */ + ["\uB84E", "\uB84E"], /* Hangul Syllable */ + ["\uB84F", "\uB84F"], /* Hangul Syllable */ + ["\uB850", "\uB850"], /* Hangul Syllable */ + ["\uB851", "\uB851"], /* Hangul Syllable */ + ["\uB852", "\uB852"], /* Hangul Syllable */ + ["\uB853", "\uB853"], /* Hangul Syllable */ + ["\uB854", "\uB854"], /* Hangul Syllable */ + ["\uB855", "\uB855"], /* Hangul Syllable */ + ["\uB856", "\uB856"], /* Hangul Syllable */ + ["\uB857", "\uB857"], /* Hangul Syllable */ + ["\uB858", "\uB858"], /* Hangul Syllable */ + ["\uB859", "\uB859"], /* Hangul Syllable */ + ["\uB85A", "\uB85A"], /* Hangul Syllable */ + ["\uB85B", "\uB85B"], /* Hangul Syllable */ + ["\uB85C", "\uB85C"], /* Hangul Syllable */ + ["\uB85D", "\uB85D"], /* Hangul Syllable */ + ["\uB85E", "\uB85E"], /* Hangul Syllable */ + ["\uB85F", "\uB85F"], /* Hangul Syllable */ + ["\uB860", "\uB860"], /* Hangul Syllable */ + ["\uB861", "\uB861"], /* Hangul Syllable */ + ["\uB862", "\uB862"], /* Hangul Syllable */ + ["\uB863", "\uB863"], /* Hangul Syllable */ + ["\uB864", "\uB864"], /* Hangul Syllable */ + ["\uB865", "\uB865"], /* Hangul Syllable */ + ["\uB866", "\uB866"], /* Hangul Syllable */ + ["\uB867", "\uB867"], /* Hangul Syllable */ + ["\uB868", "\uB868"], /* Hangul Syllable */ + ["\uB869", "\uB869"], /* Hangul Syllable */ + ["\uB86A", "\uB86A"], /* Hangul Syllable */ + ["\uB86B", "\uB86B"], /* Hangul Syllable */ + ["\uB86C", "\uB86C"], /* Hangul Syllable */ + ["\uB86D", "\uB86D"], /* Hangul Syllable */ + ["\uB86E", "\uB86E"], /* Hangul Syllable */ + ["\uB86F", "\uB86F"], /* Hangul Syllable */ + ["\uB870", "\uB870"], /* Hangul Syllable */ + ["\uB871", "\uB871"], /* Hangul Syllable */ + ["\uB872", "\uB872"], /* Hangul Syllable */ + ["\uB873", "\uB873"], /* Hangul Syllable */ + ["\uB874", "\uB874"], /* Hangul Syllable */ + ["\uB875", "\uB875"], /* Hangul Syllable */ + ["\uB876", "\uB876"], /* Hangul Syllable */ + ["\uB877", "\uB877"], /* Hangul Syllable */ + ["\uB878", "\uB878"], /* Hangul Syllable */ + ["\uB879", "\uB879"], /* Hangul Syllable */ + ["\uB87A", "\uB87A"], /* Hangul Syllable */ + ["\uB87B", "\uB87B"], /* Hangul Syllable */ + ["\uB87C", "\uB87C"], /* Hangul Syllable */ + ["\uB87D", "\uB87D"], /* Hangul Syllable */ + ["\uB87E", "\uB87E"], /* Hangul Syllable */ + ["\uB87F", "\uB87F"], /* Hangul Syllable */ + ["\uB880", "\uB880"], /* Hangul Syllable */ + ["\uB881", "\uB881"], /* Hangul Syllable */ + ["\uB882", "\uB882"], /* Hangul Syllable */ + ["\uB883", "\uB883"], /* Hangul Syllable */ + ["\uB884", "\uB884"], /* Hangul Syllable */ + ["\uB885", "\uB885"], /* Hangul Syllable */ + ["\uB886", "\uB886"], /* Hangul Syllable */ + ["\uB887", "\uB887"], /* Hangul Syllable */ + ["\uB888", "\uB888"], /* Hangul Syllable */ + ["\uB889", "\uB889"], /* Hangul Syllable */ + ["\uB88A", "\uB88A"], /* Hangul Syllable */ + ["\uB88B", "\uB88B"], /* Hangul Syllable */ + ["\uB88C", "\uB88C"], /* Hangul Syllable */ + ["\uB88D", "\uB88D"], /* Hangul Syllable */ + ["\uB88E", "\uB88E"], /* Hangul Syllable */ + ["\uB88F", "\uB88F"], /* Hangul Syllable */ + ["\uB890", "\uB890"], /* Hangul Syllable */ + ["\uB891", "\uB891"], /* Hangul Syllable */ + ["\uB892", "\uB892"], /* Hangul Syllable */ + ["\uB893", "\uB893"], /* Hangul Syllable */ + ["\uB894", "\uB894"], /* Hangul Syllable */ + ["\uB895", "\uB895"], /* Hangul Syllable */ + ["\uB896", "\uB896"], /* Hangul Syllable */ + ["\uB897", "\uB897"], /* Hangul Syllable */ + ["\uB898", "\uB898"], /* Hangul Syllable */ + ["\uB899", "\uB899"], /* Hangul Syllable */ + ["\uB89A", "\uB89A"], /* Hangul Syllable */ + ["\uB89B", "\uB89B"], /* Hangul Syllable */ + ["\uB89C", "\uB89C"], /* Hangul Syllable */ + ["\uB89D", "\uB89D"], /* Hangul Syllable */ + ["\uB89E", "\uB89E"], /* Hangul Syllable */ + ["\uB89F", "\uB89F"], /* Hangul Syllable */ + ["\uB8A0", "\uB8A0"], /* Hangul Syllable */ + ["\uB8A1", "\uB8A1"], /* Hangul Syllable */ + ["\uB8A2", "\uB8A2"], /* Hangul Syllable */ + ["\uB8A3", "\uB8A3"], /* Hangul Syllable */ + ["\uB8A4", "\uB8A4"], /* Hangul Syllable */ + ["\uB8A5", "\uB8A5"], /* Hangul Syllable */ + ["\uB8A6", "\uB8A6"], /* Hangul Syllable */ + ["\uB8A7", "\uB8A7"], /* Hangul Syllable */ + ["\uB8A8", "\uB8A8"], /* Hangul Syllable */ + ["\uB8A9", "\uB8A9"], /* Hangul Syllable */ + ["\uB8AA", "\uB8AA"], /* Hangul Syllable */ + ["\uB8AB", "\uB8AB"], /* Hangul Syllable */ + ["\uB8AC", "\uB8AC"], /* Hangul Syllable */ + ["\uB8AD", "\uB8AD"], /* Hangul Syllable */ + ["\uB8AE", "\uB8AE"], /* Hangul Syllable */ + ["\uB8AF", "\uB8AF"], /* Hangul Syllable */ + ["\uB8B0", "\uB8B0"], /* Hangul Syllable */ + ["\uB8B1", "\uB8B1"], /* Hangul Syllable */ + ["\uB8B2", "\uB8B2"], /* Hangul Syllable */ + ["\uB8B3", "\uB8B3"], /* Hangul Syllable */ + ["\uB8B4", "\uB8B4"], /* Hangul Syllable */ + ["\uB8B5", "\uB8B5"], /* Hangul Syllable */ + ["\uB8B6", "\uB8B6"], /* Hangul Syllable */ + ["\uB8B7", "\uB8B7"], /* Hangul Syllable */ + ["\uB8B8", "\uB8B8"], /* Hangul Syllable */ + ["\uB8B9", "\uB8B9"], /* Hangul Syllable */ + ["\uB8BA", "\uB8BA"], /* Hangul Syllable */ + ["\uB8BB", "\uB8BB"], /* Hangul Syllable */ + ["\uB8BC", "\uB8BC"], /* Hangul Syllable */ + ["\uB8BD", "\uB8BD"], /* Hangul Syllable */ + ["\uB8BE", "\uB8BE"], /* Hangul Syllable */ + ["\uB8BF", "\uB8BF"], /* Hangul Syllable */ + ["\uB8C0", "\uB8C0"], /* Hangul Syllable */ + ["\uB8C1", "\uB8C1"], /* Hangul Syllable */ + ["\uB8C2", "\uB8C2"], /* Hangul Syllable */ + ["\uB8C3", "\uB8C3"], /* Hangul Syllable */ + ["\uB8C4", "\uB8C4"], /* Hangul Syllable */ + ["\uB8C5", "\uB8C5"], /* Hangul Syllable */ + ["\uB8C6", "\uB8C6"], /* Hangul Syllable */ + ["\uB8C7", "\uB8C7"], /* Hangul Syllable */ + ["\uB8C8", "\uB8C8"], /* Hangul Syllable */ + ["\uB8C9", "\uB8C9"], /* Hangul Syllable */ + ["\uB8CA", "\uB8CA"], /* Hangul Syllable */ + ["\uB8CB", "\uB8CB"], /* Hangul Syllable */ + ["\uB8CC", "\uB8CC"], /* Hangul Syllable */ + ["\uB8CD", "\uB8CD"], /* Hangul Syllable */ + ["\uB8CE", "\uB8CE"], /* Hangul Syllable */ + ["\uB8CF", "\uB8CF"], /* Hangul Syllable */ + ["\uB8D0", "\uB8D0"], /* Hangul Syllable */ + ["\uB8D1", "\uB8D1"], /* Hangul Syllable */ + ["\uB8D2", "\uB8D2"], /* Hangul Syllable */ + ["\uB8D3", "\uB8D3"], /* Hangul Syllable */ + ["\uB8D4", "\uB8D4"], /* Hangul Syllable */ + ["\uB8D5", "\uB8D5"], /* Hangul Syllable */ + ["\uB8D6", "\uB8D6"], /* Hangul Syllable */ + ["\uB8D7", "\uB8D7"], /* Hangul Syllable */ + ["\uB8D8", "\uB8D8"], /* Hangul Syllable */ + ["\uB8D9", "\uB8D9"], /* Hangul Syllable */ + ["\uB8DA", "\uB8DA"], /* Hangul Syllable */ + ["\uB8DB", "\uB8DB"], /* Hangul Syllable */ + ["\uB8DC", "\uB8DC"], /* Hangul Syllable */ + ["\uB8DD", "\uB8DD"], /* Hangul Syllable */ + ["\uB8DE", "\uB8DE"], /* Hangul Syllable */ + ["\uB8DF", "\uB8DF"], /* Hangul Syllable */ + ["\uB8E0", "\uB8E0"], /* Hangul Syllable */ + ["\uB8E1", "\uB8E1"], /* Hangul Syllable */ + ["\uB8E2", "\uB8E2"], /* Hangul Syllable */ + ["\uB8E3", "\uB8E3"], /* Hangul Syllable */ + ["\uB8E4", "\uB8E4"], /* Hangul Syllable */ + ["\uB8E5", "\uB8E5"], /* Hangul Syllable */ + ["\uB8E6", "\uB8E6"], /* Hangul Syllable */ + ["\uB8E7", "\uB8E7"], /* Hangul Syllable */ + ["\uB8E8", "\uB8E8"], /* Hangul Syllable */ + ["\uB8E9", "\uB8E9"], /* Hangul Syllable */ + ["\uB8EA", "\uB8EA"], /* Hangul Syllable */ + ["\uB8EB", "\uB8EB"], /* Hangul Syllable */ + ["\uB8EC", "\uB8EC"], /* Hangul Syllable */ + ["\uB8ED", "\uB8ED"], /* Hangul Syllable */ + ["\uB8EE", "\uB8EE"], /* Hangul Syllable */ + ["\uB8EF", "\uB8EF"], /* Hangul Syllable */ + ["\uB8F0", "\uB8F0"], /* Hangul Syllable */ + ["\uB8F1", "\uB8F1"], /* Hangul Syllable */ + ["\uB8F2", "\uB8F2"], /* Hangul Syllable */ + ["\uB8F3", "\uB8F3"], /* Hangul Syllable */ + ["\uB8F4", "\uB8F4"], /* Hangul Syllable */ + ["\uB8F5", "\uB8F5"], /* Hangul Syllable */ + ["\uB8F6", "\uB8F6"], /* Hangul Syllable */ + ["\uB8F7", "\uB8F7"], /* Hangul Syllable */ + ["\uB8F8", "\uB8F8"], /* Hangul Syllable */ + ["\uB8F9", "\uB8F9"], /* Hangul Syllable */ + ["\uB8FA", "\uB8FA"], /* Hangul Syllable */ + ["\uB8FB", "\uB8FB"], /* Hangul Syllable */ + ["\uB8FC", "\uB8FC"], /* Hangul Syllable */ + ["\uB8FD", "\uB8FD"], /* Hangul Syllable */ + ["\uB8FE", "\uB8FE"], /* Hangul Syllable */ + ["\uB8FF", "\uB8FF"], /* Hangul Syllable */ + ["\uB900", "\uB900"], /* Hangul Syllable */ + ["\uB901", "\uB901"], /* Hangul Syllable */ + ["\uB902", "\uB902"], /* Hangul Syllable */ + ["\uB903", "\uB903"], /* Hangul Syllable */ + ["\uB904", "\uB904"], /* Hangul Syllable */ + ["\uB905", "\uB905"], /* Hangul Syllable */ + ["\uB906", "\uB906"], /* Hangul Syllable */ + ["\uB907", "\uB907"], /* Hangul Syllable */ + ["\uB908", "\uB908"], /* Hangul Syllable */ + ["\uB909", "\uB909"], /* Hangul Syllable */ + ["\uB90A", "\uB90A"], /* Hangul Syllable */ + ["\uB90B", "\uB90B"], /* Hangul Syllable */ + ["\uB90C", "\uB90C"], /* Hangul Syllable */ + ["\uB90D", "\uB90D"], /* Hangul Syllable */ + ["\uB90E", "\uB90E"], /* Hangul Syllable */ + ["\uB90F", "\uB90F"], /* Hangul Syllable */ + ["\uB910", "\uB910"], /* Hangul Syllable */ + ["\uB911", "\uB911"], /* Hangul Syllable */ + ["\uB912", "\uB912"], /* Hangul Syllable */ + ["\uB913", "\uB913"], /* Hangul Syllable */ + ["\uB914", "\uB914"], /* Hangul Syllable */ + ["\uB915", "\uB915"], /* Hangul Syllable */ + ["\uB916", "\uB916"], /* Hangul Syllable */ + ["\uB917", "\uB917"], /* Hangul Syllable */ + ["\uB918", "\uB918"], /* Hangul Syllable */ + ["\uB919", "\uB919"], /* Hangul Syllable */ + ["\uB91A", "\uB91A"], /* Hangul Syllable */ + ["\uB91B", "\uB91B"], /* Hangul Syllable */ + ["\uB91C", "\uB91C"], /* Hangul Syllable */ + ["\uB91D", "\uB91D"], /* Hangul Syllable */ + ["\uB91E", "\uB91E"], /* Hangul Syllable */ + ["\uB91F", "\uB91F"], /* Hangul Syllable */ + ["\uB920", "\uB920"], /* Hangul Syllable */ + ["\uB921", "\uB921"], /* Hangul Syllable */ + ["\uB922", "\uB922"], /* Hangul Syllable */ + ["\uB923", "\uB923"], /* Hangul Syllable */ + ["\uB924", "\uB924"], /* Hangul Syllable */ + ["\uB925", "\uB925"], /* Hangul Syllable */ + ["\uB926", "\uB926"], /* Hangul Syllable */ + ["\uB927", "\uB927"], /* Hangul Syllable */ + ["\uB928", "\uB928"], /* Hangul Syllable */ + ["\uB929", "\uB929"], /* Hangul Syllable */ + ["\uB92A", "\uB92A"], /* Hangul Syllable */ + ["\uB92B", "\uB92B"], /* Hangul Syllable */ + ["\uB92C", "\uB92C"], /* Hangul Syllable */ + ["\uB92D", "\uB92D"], /* Hangul Syllable */ + ["\uB92E", "\uB92E"], /* Hangul Syllable */ + ["\uB92F", "\uB92F"], /* Hangul Syllable */ + ["\uB930", "\uB930"], /* Hangul Syllable */ + ["\uB931", "\uB931"], /* Hangul Syllable */ + ["\uB932", "\uB932"], /* Hangul Syllable */ + ["\uB933", "\uB933"], /* Hangul Syllable */ + ["\uB934", "\uB934"], /* Hangul Syllable */ + ["\uB935", "\uB935"], /* Hangul Syllable */ + ["\uB936", "\uB936"], /* Hangul Syllable */ + ["\uB937", "\uB937"], /* Hangul Syllable */ + ["\uB938", "\uB938"], /* Hangul Syllable */ + ["\uB939", "\uB939"], /* Hangul Syllable */ + ["\uB93A", "\uB93A"], /* Hangul Syllable */ + ["\uB93B", "\uB93B"], /* Hangul Syllable */ + ["\uB93C", "\uB93C"], /* Hangul Syllable */ + ["\uB93D", "\uB93D"], /* Hangul Syllable */ + ["\uB93E", "\uB93E"], /* Hangul Syllable */ + ["\uB93F", "\uB93F"], /* Hangul Syllable */ + ["\uB940", "\uB940"], /* Hangul Syllable */ + ["\uB941", "\uB941"], /* Hangul Syllable */ + ["\uB942", "\uB942"], /* Hangul Syllable */ + ["\uB943", "\uB943"], /* Hangul Syllable */ + ["\uB944", "\uB944"], /* Hangul Syllable */ + ["\uB945", "\uB945"], /* Hangul Syllable */ + ["\uB946", "\uB946"], /* Hangul Syllable */ + ["\uB947", "\uB947"], /* Hangul Syllable */ + ["\uB948", "\uB948"], /* Hangul Syllable */ + ["\uB949", "\uB949"], /* Hangul Syllable */ + ["\uB94A", "\uB94A"], /* Hangul Syllable */ + ["\uB94B", "\uB94B"], /* Hangul Syllable */ + ["\uB94C", "\uB94C"], /* Hangul Syllable */ + ["\uB94D", "\uB94D"], /* Hangul Syllable */ + ["\uB94E", "\uB94E"], /* Hangul Syllable */ + ["\uB94F", "\uB94F"], /* Hangul Syllable */ + ["\uB950", "\uB950"], /* Hangul Syllable */ + ["\uB951", "\uB951"], /* Hangul Syllable */ + ["\uB952", "\uB952"], /* Hangul Syllable */ + ["\uB953", "\uB953"], /* Hangul Syllable */ + ["\uB954", "\uB954"], /* Hangul Syllable */ + ["\uB955", "\uB955"], /* Hangul Syllable */ + ["\uB956", "\uB956"], /* Hangul Syllable */ + ["\uB957", "\uB957"], /* Hangul Syllable */ + ["\uB958", "\uB958"], /* Hangul Syllable */ + ["\uB959", "\uB959"], /* Hangul Syllable */ + ["\uB95A", "\uB95A"], /* Hangul Syllable */ + ["\uB95B", "\uB95B"], /* Hangul Syllable */ + ["\uB95C", "\uB95C"], /* Hangul Syllable */ + ["\uB95D", "\uB95D"], /* Hangul Syllable */ + ["\uB95E", "\uB95E"], /* Hangul Syllable */ + ["\uB95F", "\uB95F"], /* Hangul Syllable */ + ["\uB960", "\uB960"], /* Hangul Syllable */ + ["\uB961", "\uB961"], /* Hangul Syllable */ + ["\uB962", "\uB962"], /* Hangul Syllable */ + ["\uB963", "\uB963"], /* Hangul Syllable */ + ["\uB964", "\uB964"], /* Hangul Syllable */ + ["\uB965", "\uB965"], /* Hangul Syllable */ + ["\uB966", "\uB966"], /* Hangul Syllable */ + ["\uB967", "\uB967"], /* Hangul Syllable */ + ["\uB968", "\uB968"], /* Hangul Syllable */ + ["\uB969", "\uB969"], /* Hangul Syllable */ + ["\uB96A", "\uB96A"], /* Hangul Syllable */ + ["\uB96B", "\uB96B"], /* Hangul Syllable */ + ["\uB96C", "\uB96C"], /* Hangul Syllable */ + ["\uB96D", "\uB96D"], /* Hangul Syllable */ + ["\uB96E", "\uB96E"], /* Hangul Syllable */ + ["\uB96F", "\uB96F"], /* Hangul Syllable */ + ["\uB970", "\uB970"], /* Hangul Syllable */ + ["\uB971", "\uB971"], /* Hangul Syllable */ + ["\uB972", "\uB972"], /* Hangul Syllable */ + ["\uB973", "\uB973"], /* Hangul Syllable */ + ["\uB974", "\uB974"], /* Hangul Syllable */ + ["\uB975", "\uB975"], /* Hangul Syllable */ + ["\uB976", "\uB976"], /* Hangul Syllable */ + ["\uB977", "\uB977"], /* Hangul Syllable */ + ["\uB978", "\uB978"], /* Hangul Syllable */ + ["\uB979", "\uB979"], /* Hangul Syllable */ + ["\uB97A", "\uB97A"], /* Hangul Syllable */ + ["\uB97B", "\uB97B"], /* Hangul Syllable */ + ["\uB97C", "\uB97C"], /* Hangul Syllable */ + ["\uB97D", "\uB97D"], /* Hangul Syllable */ + ["\uB97E", "\uB97E"], /* Hangul Syllable */ + ["\uB97F", "\uB97F"], /* Hangul Syllable */ + ["\uB980", "\uB980"], /* Hangul Syllable */ + ["\uB981", "\uB981"], /* Hangul Syllable */ + ["\uB982", "\uB982"], /* Hangul Syllable */ + ["\uB983", "\uB983"], /* Hangul Syllable */ + ["\uB984", "\uB984"], /* Hangul Syllable */ + ["\uB985", "\uB985"], /* Hangul Syllable */ + ["\uB986", "\uB986"], /* Hangul Syllable */ + ["\uB987", "\uB987"], /* Hangul Syllable */ + ["\uB988", "\uB988"], /* Hangul Syllable */ + ["\uB989", "\uB989"], /* Hangul Syllable */ + ["\uB98A", "\uB98A"], /* Hangul Syllable */ + ["\uB98B", "\uB98B"], /* Hangul Syllable */ + ["\uB98C", "\uB98C"], /* Hangul Syllable */ + ["\uB98D", "\uB98D"], /* Hangul Syllable */ + ["\uB98E", "\uB98E"], /* Hangul Syllable */ + ["\uB98F", "\uB98F"], /* Hangul Syllable */ + ["\uB990", "\uB990"], /* Hangul Syllable */ + ["\uB991", "\uB991"], /* Hangul Syllable */ + ["\uB992", "\uB992"], /* Hangul Syllable */ + ["\uB993", "\uB993"], /* Hangul Syllable */ + ["\uB994", "\uB994"], /* Hangul Syllable */ + ["\uB995", "\uB995"], /* Hangul Syllable */ + ["\uB996", "\uB996"], /* Hangul Syllable */ + ["\uB997", "\uB997"], /* Hangul Syllable */ + ["\uB998", "\uB998"], /* Hangul Syllable */ + ["\uB999", "\uB999"], /* Hangul Syllable */ + ["\uB99A", "\uB99A"], /* Hangul Syllable */ + ["\uB99B", "\uB99B"], /* Hangul Syllable */ + ["\uB99C", "\uB99C"], /* Hangul Syllable */ + ["\uB99D", "\uB99D"], /* Hangul Syllable */ + ["\uB99E", "\uB99E"], /* Hangul Syllable */ + ["\uB99F", "\uB99F"], /* Hangul Syllable */ + ["\uB9A0", "\uB9A0"], /* Hangul Syllable */ + ["\uB9A1", "\uB9A1"], /* Hangul Syllable */ + ["\uB9A2", "\uB9A2"], /* Hangul Syllable */ + ["\uB9A3", "\uB9A3"], /* Hangul Syllable */ + ["\uB9A4", "\uB9A4"], /* Hangul Syllable */ + ["\uB9A5", "\uB9A5"], /* Hangul Syllable */ + ["\uB9A6", "\uB9A6"], /* Hangul Syllable */ + ["\uB9A7", "\uB9A7"], /* Hangul Syllable */ + ["\uB9A8", "\uB9A8"], /* Hangul Syllable */ + ["\uB9A9", "\uB9A9"], /* Hangul Syllable */ + ["\uB9AA", "\uB9AA"], /* Hangul Syllable */ + ["\uB9AB", "\uB9AB"], /* Hangul Syllable */ + ["\uB9AC", "\uB9AC"], /* Hangul Syllable */ + ["\uB9AD", "\uB9AD"], /* Hangul Syllable */ + ["\uB9AE", "\uB9AE"], /* Hangul Syllable */ + ["\uB9AF", "\uB9AF"], /* Hangul Syllable */ + ["\uB9B0", "\uB9B0"], /* Hangul Syllable */ + ["\uB9B1", "\uB9B1"], /* Hangul Syllable */ + ["\uB9B2", "\uB9B2"], /* Hangul Syllable */ + ["\uB9B3", "\uB9B3"], /* Hangul Syllable */ + ["\uB9B4", "\uB9B4"], /* Hangul Syllable */ + ["\uB9B5", "\uB9B5"], /* Hangul Syllable */ + ["\uB9B6", "\uB9B6"], /* Hangul Syllable */ + ["\uB9B7", "\uB9B7"], /* Hangul Syllable */ + ["\uB9B8", "\uB9B8"], /* Hangul Syllable */ + ["\uB9B9", "\uB9B9"], /* Hangul Syllable */ + ["\uB9BA", "\uB9BA"], /* Hangul Syllable */ + ["\uB9BB", "\uB9BB"], /* Hangul Syllable */ + ["\uB9BC", "\uB9BC"], /* Hangul Syllable */ + ["\uB9BD", "\uB9BD"], /* Hangul Syllable */ + ["\uB9BE", "\uB9BE"], /* Hangul Syllable */ + ["\uB9BF", "\uB9BF"], /* Hangul Syllable */ + ["\uB9C0", "\uB9C0"], /* Hangul Syllable */ + ["\uB9C1", "\uB9C1"], /* Hangul Syllable */ + ["\uB9C2", "\uB9C2"], /* Hangul Syllable */ + ["\uB9C3", "\uB9C3"], /* Hangul Syllable */ + ["\uB9C4", "\uB9C4"], /* Hangul Syllable */ + ["\uB9C5", "\uB9C5"], /* Hangul Syllable */ + ["\uB9C6", "\uB9C6"], /* Hangul Syllable */ + ["\uB9C7", "\uB9C7"], /* Hangul Syllable */ + ["\uB9C8", "\uB9C8"], /* Hangul Syllable */ + ["\uB9C9", "\uB9C9"], /* Hangul Syllable */ + ["\uB9CA", "\uB9CA"], /* Hangul Syllable */ + ["\uB9CB", "\uB9CB"], /* Hangul Syllable */ + ["\uB9CC", "\uB9CC"], /* Hangul Syllable */ + ["\uB9CD", "\uB9CD"], /* Hangul Syllable */ + ["\uB9CE", "\uB9CE"], /* Hangul Syllable */ + ["\uB9CF", "\uB9CF"], /* Hangul Syllable */ + ["\uB9D0", "\uB9D0"], /* Hangul Syllable */ + ["\uB9D1", "\uB9D1"], /* Hangul Syllable */ + ["\uB9D2", "\uB9D2"], /* Hangul Syllable */ + ["\uB9D3", "\uB9D3"], /* Hangul Syllable */ + ["\uB9D4", "\uB9D4"], /* Hangul Syllable */ + ["\uB9D5", "\uB9D5"], /* Hangul Syllable */ + ["\uB9D6", "\uB9D6"], /* Hangul Syllable */ + ["\uB9D7", "\uB9D7"], /* Hangul Syllable */ + ["\uB9D8", "\uB9D8"], /* Hangul Syllable */ + ["\uB9D9", "\uB9D9"], /* Hangul Syllable */ + ["\uB9DA", "\uB9DA"], /* Hangul Syllable */ + ["\uB9DB", "\uB9DB"], /* Hangul Syllable */ + ["\uB9DC", "\uB9DC"], /* Hangul Syllable */ + ["\uB9DD", "\uB9DD"], /* Hangul Syllable */ + ["\uB9DE", "\uB9DE"], /* Hangul Syllable */ + ["\uB9DF", "\uB9DF"], /* Hangul Syllable */ + ["\uB9E0", "\uB9E0"], /* Hangul Syllable */ + ["\uB9E1", "\uB9E1"], /* Hangul Syllable */ + ["\uB9E2", "\uB9E2"], /* Hangul Syllable */ + ["\uB9E3", "\uB9E3"], /* Hangul Syllable */ + ["\uB9E4", "\uB9E4"], /* Hangul Syllable */ + ["\uB9E5", "\uB9E5"], /* Hangul Syllable */ + ["\uB9E6", "\uB9E6"], /* Hangul Syllable */ + ["\uB9E7", "\uB9E7"], /* Hangul Syllable */ + ["\uB9E8", "\uB9E8"], /* Hangul Syllable */ + ["\uB9E9", "\uB9E9"], /* Hangul Syllable */ + ["\uB9EA", "\uB9EA"], /* Hangul Syllable */ + ["\uB9EB", "\uB9EB"], /* Hangul Syllable */ + ["\uB9EC", "\uB9EC"], /* Hangul Syllable */ + ["\uB9ED", "\uB9ED"], /* Hangul Syllable */ + ["\uB9EE", "\uB9EE"], /* Hangul Syllable */ + ["\uB9EF", "\uB9EF"], /* Hangul Syllable */ + ["\uB9F0", "\uB9F0"], /* Hangul Syllable */ + ["\uB9F1", "\uB9F1"], /* Hangul Syllable */ + ["\uB9F2", "\uB9F2"], /* Hangul Syllable */ + ["\uB9F3", "\uB9F3"], /* Hangul Syllable */ + ["\uB9F4", "\uB9F4"], /* Hangul Syllable */ + ["\uB9F5", "\uB9F5"], /* Hangul Syllable */ + ["\uB9F6", "\uB9F6"], /* Hangul Syllable */ + ["\uB9F7", "\uB9F7"], /* Hangul Syllable */ + ["\uB9F8", "\uB9F8"], /* Hangul Syllable */ + ["\uB9F9", "\uB9F9"], /* Hangul Syllable */ + ["\uB9FA", "\uB9FA"], /* Hangul Syllable */ + ["\uB9FB", "\uB9FB"], /* Hangul Syllable */ + ["\uB9FC", "\uB9FC"], /* Hangul Syllable */ + ["\uB9FD", "\uB9FD"], /* Hangul Syllable */ + ["\uB9FE", "\uB9FE"], /* Hangul Syllable */ + ["\uB9FF", "\uB9FF"], /* Hangul Syllable */ + ["\uBA00", "\uBA00"], /* Hangul Syllable */ + ["\uBA01", "\uBA01"], /* Hangul Syllable */ + ["\uBA02", "\uBA02"], /* Hangul Syllable */ + ["\uBA03", "\uBA03"], /* Hangul Syllable */ + ["\uBA04", "\uBA04"], /* Hangul Syllable */ + ["\uBA05", "\uBA05"], /* Hangul Syllable */ + ["\uBA06", "\uBA06"], /* Hangul Syllable */ + ["\uBA07", "\uBA07"], /* Hangul Syllable */ + ["\uBA08", "\uBA08"], /* Hangul Syllable */ + ["\uBA09", "\uBA09"], /* Hangul Syllable */ + ["\uBA0A", "\uBA0A"], /* Hangul Syllable */ + ["\uBA0B", "\uBA0B"], /* Hangul Syllable */ + ["\uBA0C", "\uBA0C"], /* Hangul Syllable */ + ["\uBA0D", "\uBA0D"], /* Hangul Syllable */ + ["\uBA0E", "\uBA0E"], /* Hangul Syllable */ + ["\uBA0F", "\uBA0F"], /* Hangul Syllable */ + ["\uBA10", "\uBA10"], /* Hangul Syllable */ + ["\uBA11", "\uBA11"], /* Hangul Syllable */ + ["\uBA12", "\uBA12"], /* Hangul Syllable */ + ["\uBA13", "\uBA13"], /* Hangul Syllable */ + ["\uBA14", "\uBA14"], /* Hangul Syllable */ + ["\uBA15", "\uBA15"], /* Hangul Syllable */ + ["\uBA16", "\uBA16"], /* Hangul Syllable */ + ["\uBA17", "\uBA17"], /* Hangul Syllable */ + ["\uBA18", "\uBA18"], /* Hangul Syllable */ + ["\uBA19", "\uBA19"], /* Hangul Syllable */ + ["\uBA1A", "\uBA1A"], /* Hangul Syllable */ + ["\uBA1B", "\uBA1B"], /* Hangul Syllable */ + ["\uBA1C", "\uBA1C"], /* Hangul Syllable */ + ["\uBA1D", "\uBA1D"], /* Hangul Syllable */ + ["\uBA1E", "\uBA1E"], /* Hangul Syllable */ + ["\uBA1F", "\uBA1F"], /* Hangul Syllable */ + ["\uBA20", "\uBA20"], /* Hangul Syllable */ + ["\uBA21", "\uBA21"], /* Hangul Syllable */ + ["\uBA22", "\uBA22"], /* Hangul Syllable */ + ["\uBA23", "\uBA23"], /* Hangul Syllable */ + ["\uBA24", "\uBA24"], /* Hangul Syllable */ + ["\uBA25", "\uBA25"], /* Hangul Syllable */ + ["\uBA26", "\uBA26"], /* Hangul Syllable */ + ["\uBA27", "\uBA27"], /* Hangul Syllable */ + ["\uBA28", "\uBA28"], /* Hangul Syllable */ + ["\uBA29", "\uBA29"], /* Hangul Syllable */ + ["\uBA2A", "\uBA2A"], /* Hangul Syllable */ + ["\uBA2B", "\uBA2B"], /* Hangul Syllable */ + ["\uBA2C", "\uBA2C"], /* Hangul Syllable */ + ["\uBA2D", "\uBA2D"], /* Hangul Syllable */ + ["\uBA2E", "\uBA2E"], /* Hangul Syllable */ + ["\uBA2F", "\uBA2F"], /* Hangul Syllable */ + ["\uBA30", "\uBA30"], /* Hangul Syllable */ + ["\uBA31", "\uBA31"], /* Hangul Syllable */ + ["\uBA32", "\uBA32"], /* Hangul Syllable */ + ["\uBA33", "\uBA33"], /* Hangul Syllable */ + ["\uBA34", "\uBA34"], /* Hangul Syllable */ + ["\uBA35", "\uBA35"], /* Hangul Syllable */ + ["\uBA36", "\uBA36"], /* Hangul Syllable */ + ["\uBA37", "\uBA37"], /* Hangul Syllable */ + ["\uBA38", "\uBA38"], /* Hangul Syllable */ + ["\uBA39", "\uBA39"], /* Hangul Syllable */ + ["\uBA3A", "\uBA3A"], /* Hangul Syllable */ + ["\uBA3B", "\uBA3B"], /* Hangul Syllable */ + ["\uBA3C", "\uBA3C"], /* Hangul Syllable */ + ["\uBA3D", "\uBA3D"], /* Hangul Syllable */ + ["\uBA3E", "\uBA3E"], /* Hangul Syllable */ + ["\uBA3F", "\uBA3F"], /* Hangul Syllable */ + ["\uBA40", "\uBA40"], /* Hangul Syllable */ + ["\uBA41", "\uBA41"], /* Hangul Syllable */ + ["\uBA42", "\uBA42"], /* Hangul Syllable */ + ["\uBA43", "\uBA43"], /* Hangul Syllable */ + ["\uBA44", "\uBA44"], /* Hangul Syllable */ + ["\uBA45", "\uBA45"], /* Hangul Syllable */ + ["\uBA46", "\uBA46"], /* Hangul Syllable */ + ["\uBA47", "\uBA47"], /* Hangul Syllable */ + ["\uBA48", "\uBA48"], /* Hangul Syllable */ + ["\uBA49", "\uBA49"], /* Hangul Syllable */ + ["\uBA4A", "\uBA4A"], /* Hangul Syllable */ + ["\uBA4B", "\uBA4B"], /* Hangul Syllable */ + ["\uBA4C", "\uBA4C"], /* Hangul Syllable */ + ["\uBA4D", "\uBA4D"], /* Hangul Syllable */ + ["\uBA4E", "\uBA4E"], /* Hangul Syllable */ + ["\uBA4F", "\uBA4F"], /* Hangul Syllable */ + ["\uBA50", "\uBA50"], /* Hangul Syllable */ + ["\uBA51", "\uBA51"], /* Hangul Syllable */ + ["\uBA52", "\uBA52"], /* Hangul Syllable */ + ["\uBA53", "\uBA53"], /* Hangul Syllable */ + ["\uBA54", "\uBA54"], /* Hangul Syllable */ + ["\uBA55", "\uBA55"], /* Hangul Syllable */ + ["\uBA56", "\uBA56"], /* Hangul Syllable */ + ["\uBA57", "\uBA57"], /* Hangul Syllable */ + ["\uBA58", "\uBA58"], /* Hangul Syllable */ + ["\uBA59", "\uBA59"], /* Hangul Syllable */ + ["\uBA5A", "\uBA5A"], /* Hangul Syllable */ + ["\uBA5B", "\uBA5B"], /* Hangul Syllable */ + ["\uBA5C", "\uBA5C"], /* Hangul Syllable */ + ["\uBA5D", "\uBA5D"], /* Hangul Syllable */ + ["\uBA5E", "\uBA5E"], /* Hangul Syllable */ + ["\uBA5F", "\uBA5F"], /* Hangul Syllable */ + ["\uBA60", "\uBA60"], /* Hangul Syllable */ + ["\uBA61", "\uBA61"], /* Hangul Syllable */ + ["\uBA62", "\uBA62"], /* Hangul Syllable */ + ["\uBA63", "\uBA63"], /* Hangul Syllable */ + ["\uBA64", "\uBA64"], /* Hangul Syllable */ + ["\uBA65", "\uBA65"], /* Hangul Syllable */ + ["\uBA66", "\uBA66"], /* Hangul Syllable */ + ["\uBA67", "\uBA67"], /* Hangul Syllable */ + ["\uBA68", "\uBA68"], /* Hangul Syllable */ + ["\uBA69", "\uBA69"], /* Hangul Syllable */ + ["\uBA6A", "\uBA6A"], /* Hangul Syllable */ + ["\uBA6B", "\uBA6B"], /* Hangul Syllable */ + ["\uBA6C", "\uBA6C"], /* Hangul Syllable */ + ["\uBA6D", "\uBA6D"], /* Hangul Syllable */ + ["\uBA6E", "\uBA6E"], /* Hangul Syllable */ + ["\uBA6F", "\uBA6F"], /* Hangul Syllable */ + ["\uBA70", "\uBA70"], /* Hangul Syllable */ + ["\uBA71", "\uBA71"], /* Hangul Syllable */ + ["\uBA72", "\uBA72"], /* Hangul Syllable */ + ["\uBA73", "\uBA73"], /* Hangul Syllable */ + ["\uBA74", "\uBA74"], /* Hangul Syllable */ + ["\uBA75", "\uBA75"], /* Hangul Syllable */ + ["\uBA76", "\uBA76"], /* Hangul Syllable */ + ["\uBA77", "\uBA77"], /* Hangul Syllable */ + ["\uBA78", "\uBA78"], /* Hangul Syllable */ + ["\uBA79", "\uBA79"], /* Hangul Syllable */ + ["\uBA7A", "\uBA7A"], /* Hangul Syllable */ + ["\uBA7B", "\uBA7B"], /* Hangul Syllable */ + ["\uBA7C", "\uBA7C"], /* Hangul Syllable */ + ["\uBA7D", "\uBA7D"], /* Hangul Syllable */ + ["\uBA7E", "\uBA7E"], /* Hangul Syllable */ + ["\uBA7F", "\uBA7F"], /* Hangul Syllable */ + ["\uBA80", "\uBA80"], /* Hangul Syllable */ + ["\uBA81", "\uBA81"], /* Hangul Syllable */ + ["\uBA82", "\uBA82"], /* Hangul Syllable */ + ["\uBA83", "\uBA83"], /* Hangul Syllable */ + ["\uBA84", "\uBA84"], /* Hangul Syllable */ + ["\uBA85", "\uBA85"], /* Hangul Syllable */ + ["\uBA86", "\uBA86"], /* Hangul Syllable */ + ["\uBA87", "\uBA87"], /* Hangul Syllable */ + ["\uBA88", "\uBA88"], /* Hangul Syllable */ + ["\uBA89", "\uBA89"], /* Hangul Syllable */ + ["\uBA8A", "\uBA8A"], /* Hangul Syllable */ + ["\uBA8B", "\uBA8B"], /* Hangul Syllable */ + ["\uBA8C", "\uBA8C"], /* Hangul Syllable */ + ["\uBA8D", "\uBA8D"], /* Hangul Syllable */ + ["\uBA8E", "\uBA8E"], /* Hangul Syllable */ + ["\uBA8F", "\uBA8F"], /* Hangul Syllable */ + ["\uBA90", "\uBA90"], /* Hangul Syllable */ + ["\uBA91", "\uBA91"], /* Hangul Syllable */ + ["\uBA92", "\uBA92"], /* Hangul Syllable */ + ["\uBA93", "\uBA93"], /* Hangul Syllable */ + ["\uBA94", "\uBA94"], /* Hangul Syllable */ + ["\uBA95", "\uBA95"], /* Hangul Syllable */ + ["\uBA96", "\uBA96"], /* Hangul Syllable */ + ["\uBA97", "\uBA97"], /* Hangul Syllable */ + ["\uBA98", "\uBA98"], /* Hangul Syllable */ + ["\uBA99", "\uBA99"], /* Hangul Syllable */ + ["\uBA9A", "\uBA9A"], /* Hangul Syllable */ + ["\uBA9B", "\uBA9B"], /* Hangul Syllable */ + ["\uBA9C", "\uBA9C"], /* Hangul Syllable */ + ["\uBA9D", "\uBA9D"], /* Hangul Syllable */ + ["\uBA9E", "\uBA9E"], /* Hangul Syllable */ + ["\uBA9F", "\uBA9F"], /* Hangul Syllable */ + ["\uBAA0", "\uBAA0"], /* Hangul Syllable */ + ["\uBAA1", "\uBAA1"], /* Hangul Syllable */ + ["\uBAA2", "\uBAA2"], /* Hangul Syllable */ + ["\uBAA3", "\uBAA3"], /* Hangul Syllable */ + ["\uBAA4", "\uBAA4"], /* Hangul Syllable */ + ["\uBAA5", "\uBAA5"], /* Hangul Syllable */ + ["\uBAA6", "\uBAA6"], /* Hangul Syllable */ + ["\uBAA7", "\uBAA7"], /* Hangul Syllable */ + ["\uBAA8", "\uBAA8"], /* Hangul Syllable */ + ["\uBAA9", "\uBAA9"], /* Hangul Syllable */ + ["\uBAAA", "\uBAAA"], /* Hangul Syllable */ + ["\uBAAB", "\uBAAB"], /* Hangul Syllable */ + ["\uBAAC", "\uBAAC"], /* Hangul Syllable */ + ["\uBAAD", "\uBAAD"], /* Hangul Syllable */ + ["\uBAAE", "\uBAAE"], /* Hangul Syllable */ + ["\uBAAF", "\uBAAF"], /* Hangul Syllable */ + ["\uBAB0", "\uBAB0"], /* Hangul Syllable */ + ["\uBAB1", "\uBAB1"], /* Hangul Syllable */ + ["\uBAB2", "\uBAB2"], /* Hangul Syllable */ + ["\uBAB3", "\uBAB3"], /* Hangul Syllable */ + ["\uBAB4", "\uBAB4"], /* Hangul Syllable */ + ["\uBAB5", "\uBAB5"], /* Hangul Syllable */ + ["\uBAB6", "\uBAB6"], /* Hangul Syllable */ + ["\uBAB7", "\uBAB7"], /* Hangul Syllable */ + ["\uBAB8", "\uBAB8"], /* Hangul Syllable */ + ["\uBAB9", "\uBAB9"], /* Hangul Syllable */ + ["\uBABA", "\uBABA"], /* Hangul Syllable */ + ["\uBABB", "\uBABB"], /* Hangul Syllable */ + ["\uBABC", "\uBABC"], /* Hangul Syllable */ + ["\uBABD", "\uBABD"], /* Hangul Syllable */ + ["\uBABE", "\uBABE"], /* Hangul Syllable */ + ["\uBABF", "\uBABF"], /* Hangul Syllable */ + ["\uBAC0", "\uBAC0"], /* Hangul Syllable */ + ["\uBAC1", "\uBAC1"], /* Hangul Syllable */ + ["\uBAC2", "\uBAC2"], /* Hangul Syllable */ + ["\uBAC3", "\uBAC3"], /* Hangul Syllable */ + ["\uBAC4", "\uBAC4"], /* Hangul Syllable */ + ["\uBAC5", "\uBAC5"], /* Hangul Syllable */ + ["\uBAC6", "\uBAC6"], /* Hangul Syllable */ + ["\uBAC7", "\uBAC7"], /* Hangul Syllable */ + ["\uBAC8", "\uBAC8"], /* Hangul Syllable */ + ["\uBAC9", "\uBAC9"], /* Hangul Syllable */ + ["\uBACA", "\uBACA"], /* Hangul Syllable */ + ["\uBACB", "\uBACB"], /* Hangul Syllable */ + ["\uBACC", "\uBACC"], /* Hangul Syllable */ + ["\uBACD", "\uBACD"], /* Hangul Syllable */ + ["\uBACE", "\uBACE"], /* Hangul Syllable */ + ["\uBACF", "\uBACF"], /* Hangul Syllable */ + ["\uBAD0", "\uBAD0"], /* Hangul Syllable */ + ["\uBAD1", "\uBAD1"], /* Hangul Syllable */ + ["\uBAD2", "\uBAD2"], /* Hangul Syllable */ + ["\uBAD3", "\uBAD3"], /* Hangul Syllable */ + ["\uBAD4", "\uBAD4"], /* Hangul Syllable */ + ["\uBAD5", "\uBAD5"], /* Hangul Syllable */ + ["\uBAD6", "\uBAD6"], /* Hangul Syllable */ + ["\uBAD7", "\uBAD7"], /* Hangul Syllable */ + ["\uBAD8", "\uBAD8"], /* Hangul Syllable */ + ["\uBAD9", "\uBAD9"], /* Hangul Syllable */ + ["\uBADA", "\uBADA"], /* Hangul Syllable */ + ["\uBADB", "\uBADB"], /* Hangul Syllable */ + ["\uBADC", "\uBADC"], /* Hangul Syllable */ + ["\uBADD", "\uBADD"], /* Hangul Syllable */ + ["\uBADE", "\uBADE"], /* Hangul Syllable */ + ["\uBADF", "\uBADF"], /* Hangul Syllable */ + ["\uBAE0", "\uBAE0"], /* Hangul Syllable */ + ["\uBAE1", "\uBAE1"], /* Hangul Syllable */ + ["\uBAE2", "\uBAE2"], /* Hangul Syllable */ + ["\uBAE3", "\uBAE3"], /* Hangul Syllable */ + ["\uBAE4", "\uBAE4"], /* Hangul Syllable */ + ["\uBAE5", "\uBAE5"], /* Hangul Syllable */ + ["\uBAE6", "\uBAE6"], /* Hangul Syllable */ + ["\uBAE7", "\uBAE7"], /* Hangul Syllable */ + ["\uBAE8", "\uBAE8"], /* Hangul Syllable */ + ["\uBAE9", "\uBAE9"], /* Hangul Syllable */ + ["\uBAEA", "\uBAEA"], /* Hangul Syllable */ + ["\uBAEB", "\uBAEB"], /* Hangul Syllable */ + ["\uBAEC", "\uBAEC"], /* Hangul Syllable */ + ["\uBAED", "\uBAED"], /* Hangul Syllable */ + ["\uBAEE", "\uBAEE"], /* Hangul Syllable */ + ["\uBAEF", "\uBAEF"], /* Hangul Syllable */ + ["\uBAF0", "\uBAF0"], /* Hangul Syllable */ + ["\uBAF1", "\uBAF1"], /* Hangul Syllable */ + ["\uBAF2", "\uBAF2"], /* Hangul Syllable */ + ["\uBAF3", "\uBAF3"], /* Hangul Syllable */ + ["\uBAF4", "\uBAF4"], /* Hangul Syllable */ + ["\uBAF5", "\uBAF5"], /* Hangul Syllable */ + ["\uBAF6", "\uBAF6"], /* Hangul Syllable */ + ["\uBAF7", "\uBAF7"], /* Hangul Syllable */ + ["\uBAF8", "\uBAF8"], /* Hangul Syllable */ + ["\uBAF9", "\uBAF9"], /* Hangul Syllable */ + ["\uBAFA", "\uBAFA"], /* Hangul Syllable */ + ["\uBAFB", "\uBAFB"], /* Hangul Syllable */ + ["\uBAFC", "\uBAFC"], /* Hangul Syllable */ + ["\uBAFD", "\uBAFD"], /* Hangul Syllable */ + ["\uBAFE", "\uBAFE"], /* Hangul Syllable */ + ["\uBAFF", "\uBAFF"], /* Hangul Syllable */ + ["\uBB00", "\uBB00"], /* Hangul Syllable */ + ["\uBB01", "\uBB01"], /* Hangul Syllable */ + ["\uBB02", "\uBB02"], /* Hangul Syllable */ + ["\uBB03", "\uBB03"], /* Hangul Syllable */ + ["\uBB04", "\uBB04"], /* Hangul Syllable */ + ["\uBB05", "\uBB05"], /* Hangul Syllable */ + ["\uBB06", "\uBB06"], /* Hangul Syllable */ + ["\uBB07", "\uBB07"], /* Hangul Syllable */ + ["\uBB08", "\uBB08"], /* Hangul Syllable */ + ["\uBB09", "\uBB09"], /* Hangul Syllable */ + ["\uBB0A", "\uBB0A"], /* Hangul Syllable */ + ["\uBB0B", "\uBB0B"], /* Hangul Syllable */ + ["\uBB0C", "\uBB0C"], /* Hangul Syllable */ + ["\uBB0D", "\uBB0D"], /* Hangul Syllable */ + ["\uBB0E", "\uBB0E"], /* Hangul Syllable */ + ["\uBB0F", "\uBB0F"], /* Hangul Syllable */ + ["\uBB10", "\uBB10"], /* Hangul Syllable */ + ["\uBB11", "\uBB11"], /* Hangul Syllable */ + ["\uBB12", "\uBB12"], /* Hangul Syllable */ + ["\uBB13", "\uBB13"], /* Hangul Syllable */ + ["\uBB14", "\uBB14"], /* Hangul Syllable */ + ["\uBB15", "\uBB15"], /* Hangul Syllable */ + ["\uBB16", "\uBB16"], /* Hangul Syllable */ + ["\uBB17", "\uBB17"], /* Hangul Syllable */ + ["\uBB18", "\uBB18"], /* Hangul Syllable */ + ["\uBB19", "\uBB19"], /* Hangul Syllable */ + ["\uBB1A", "\uBB1A"], /* Hangul Syllable */ + ["\uBB1B", "\uBB1B"], /* Hangul Syllable */ + ["\uBB1C", "\uBB1C"], /* Hangul Syllable */ + ["\uBB1D", "\uBB1D"], /* Hangul Syllable */ + ["\uBB1E", "\uBB1E"], /* Hangul Syllable */ + ["\uBB1F", "\uBB1F"], /* Hangul Syllable */ + ["\uBB20", "\uBB20"], /* Hangul Syllable */ + ["\uBB21", "\uBB21"], /* Hangul Syllable */ + ["\uBB22", "\uBB22"], /* Hangul Syllable */ + ["\uBB23", "\uBB23"], /* Hangul Syllable */ + ["\uBB24", "\uBB24"], /* Hangul Syllable */ + ["\uBB25", "\uBB25"], /* Hangul Syllable */ + ["\uBB26", "\uBB26"], /* Hangul Syllable */ + ["\uBB27", "\uBB27"], /* Hangul Syllable */ + ["\uBB28", "\uBB28"], /* Hangul Syllable */ + ["\uBB29", "\uBB29"], /* Hangul Syllable */ + ["\uBB2A", "\uBB2A"], /* Hangul Syllable */ + ["\uBB2B", "\uBB2B"], /* Hangul Syllable */ + ["\uBB2C", "\uBB2C"], /* Hangul Syllable */ + ["\uBB2D", "\uBB2D"], /* Hangul Syllable */ + ["\uBB2E", "\uBB2E"], /* Hangul Syllable */ + ["\uBB2F", "\uBB2F"], /* Hangul Syllable */ + ["\uBB30", "\uBB30"], /* Hangul Syllable */ + ["\uBB31", "\uBB31"], /* Hangul Syllable */ + ["\uBB32", "\uBB32"], /* Hangul Syllable */ + ["\uBB33", "\uBB33"], /* Hangul Syllable */ + ["\uBB34", "\uBB34"], /* Hangul Syllable */ + ["\uBB35", "\uBB35"], /* Hangul Syllable */ + ["\uBB36", "\uBB36"], /* Hangul Syllable */ + ["\uBB37", "\uBB37"], /* Hangul Syllable */ + ["\uBB38", "\uBB38"], /* Hangul Syllable */ + ["\uBB39", "\uBB39"], /* Hangul Syllable */ + ["\uBB3A", "\uBB3A"], /* Hangul Syllable */ + ["\uBB3B", "\uBB3B"], /* Hangul Syllable */ + ["\uBB3C", "\uBB3C"], /* Hangul Syllable */ + ["\uBB3D", "\uBB3D"], /* Hangul Syllable */ + ["\uBB3E", "\uBB3E"], /* Hangul Syllable */ + ["\uBB3F", "\uBB3F"], /* Hangul Syllable */ + ["\uBB40", "\uBB40"], /* Hangul Syllable */ + ["\uBB41", "\uBB41"], /* Hangul Syllable */ + ["\uBB42", "\uBB42"], /* Hangul Syllable */ + ["\uBB43", "\uBB43"], /* Hangul Syllable */ + ["\uBB44", "\uBB44"], /* Hangul Syllable */ + ["\uBB45", "\uBB45"], /* Hangul Syllable */ + ["\uBB46", "\uBB46"], /* Hangul Syllable */ + ["\uBB47", "\uBB47"], /* Hangul Syllable */ + ["\uBB48", "\uBB48"], /* Hangul Syllable */ + ["\uBB49", "\uBB49"], /* Hangul Syllable */ + ["\uBB4A", "\uBB4A"], /* Hangul Syllable */ + ["\uBB4B", "\uBB4B"], /* Hangul Syllable */ + ["\uBB4C", "\uBB4C"], /* Hangul Syllable */ + ["\uBB4D", "\uBB4D"], /* Hangul Syllable */ + ["\uBB4E", "\uBB4E"], /* Hangul Syllable */ + ["\uBB4F", "\uBB4F"], /* Hangul Syllable */ + ["\uBB50", "\uBB50"], /* Hangul Syllable */ + ["\uBB51", "\uBB51"], /* Hangul Syllable */ + ["\uBB52", "\uBB52"], /* Hangul Syllable */ + ["\uBB53", "\uBB53"], /* Hangul Syllable */ + ["\uBB54", "\uBB54"], /* Hangul Syllable */ + ["\uBB55", "\uBB55"], /* Hangul Syllable */ + ["\uBB56", "\uBB56"], /* Hangul Syllable */ + ["\uBB57", "\uBB57"], /* Hangul Syllable */ + ["\uBB58", "\uBB58"], /* Hangul Syllable */ + ["\uBB59", "\uBB59"], /* Hangul Syllable */ + ["\uBB5A", "\uBB5A"], /* Hangul Syllable */ + ["\uBB5B", "\uBB5B"], /* Hangul Syllable */ + ["\uBB5C", "\uBB5C"], /* Hangul Syllable */ + ["\uBB5D", "\uBB5D"], /* Hangul Syllable */ + ["\uBB5E", "\uBB5E"], /* Hangul Syllable */ + ["\uBB5F", "\uBB5F"], /* Hangul Syllable */ + ["\uBB60", "\uBB60"], /* Hangul Syllable */ + ["\uBB61", "\uBB61"], /* Hangul Syllable */ + ["\uBB62", "\uBB62"], /* Hangul Syllable */ + ["\uBB63", "\uBB63"], /* Hangul Syllable */ + ["\uBB64", "\uBB64"], /* Hangul Syllable */ + ["\uBB65", "\uBB65"], /* Hangul Syllable */ + ["\uBB66", "\uBB66"], /* Hangul Syllable */ + ["\uBB67", "\uBB67"], /* Hangul Syllable */ + ["\uBB68", "\uBB68"], /* Hangul Syllable */ + ["\uBB69", "\uBB69"], /* Hangul Syllable */ + ["\uBB6A", "\uBB6A"], /* Hangul Syllable */ + ["\uBB6B", "\uBB6B"], /* Hangul Syllable */ + ["\uBB6C", "\uBB6C"], /* Hangul Syllable */ + ["\uBB6D", "\uBB6D"], /* Hangul Syllable */ + ["\uBB6E", "\uBB6E"], /* Hangul Syllable */ + ["\uBB6F", "\uBB6F"], /* Hangul Syllable */ + ["\uBB70", "\uBB70"], /* Hangul Syllable */ + ["\uBB71", "\uBB71"], /* Hangul Syllable */ + ["\uBB72", "\uBB72"], /* Hangul Syllable */ + ["\uBB73", "\uBB73"], /* Hangul Syllable */ + ["\uBB74", "\uBB74"], /* Hangul Syllable */ + ["\uBB75", "\uBB75"], /* Hangul Syllable */ + ["\uBB76", "\uBB76"], /* Hangul Syllable */ + ["\uBB77", "\uBB77"], /* Hangul Syllable */ + ["\uBB78", "\uBB78"], /* Hangul Syllable */ + ["\uBB79", "\uBB79"], /* Hangul Syllable */ + ["\uBB7A", "\uBB7A"], /* Hangul Syllable */ + ["\uBB7B", "\uBB7B"], /* Hangul Syllable */ + ["\uBB7C", "\uBB7C"], /* Hangul Syllable */ + ["\uBB7D", "\uBB7D"], /* Hangul Syllable */ + ["\uBB7E", "\uBB7E"], /* Hangul Syllable */ + ["\uBB7F", "\uBB7F"], /* Hangul Syllable */ + ["\uBB80", "\uBB80"], /* Hangul Syllable */ + ["\uBB81", "\uBB81"], /* Hangul Syllable */ + ["\uBB82", "\uBB82"], /* Hangul Syllable */ + ["\uBB83", "\uBB83"], /* Hangul Syllable */ + ["\uBB84", "\uBB84"], /* Hangul Syllable */ + ["\uBB85", "\uBB85"], /* Hangul Syllable */ + ["\uBB86", "\uBB86"], /* Hangul Syllable */ + ["\uBB87", "\uBB87"], /* Hangul Syllable */ + ["\uBB88", "\uBB88"], /* Hangul Syllable */ + ["\uBB89", "\uBB89"], /* Hangul Syllable */ + ["\uBB8A", "\uBB8A"], /* Hangul Syllable */ + ["\uBB8B", "\uBB8B"], /* Hangul Syllable */ + ["\uBB8C", "\uBB8C"], /* Hangul Syllable */ + ["\uBB8D", "\uBB8D"], /* Hangul Syllable */ + ["\uBB8E", "\uBB8E"], /* Hangul Syllable */ + ["\uBB8F", "\uBB8F"], /* Hangul Syllable */ + ["\uBB90", "\uBB90"], /* Hangul Syllable */ + ["\uBB91", "\uBB91"], /* Hangul Syllable */ + ["\uBB92", "\uBB92"], /* Hangul Syllable */ + ["\uBB93", "\uBB93"], /* Hangul Syllable */ + ["\uBB94", "\uBB94"], /* Hangul Syllable */ + ["\uBB95", "\uBB95"], /* Hangul Syllable */ + ["\uBB96", "\uBB96"], /* Hangul Syllable */ + ["\uBB97", "\uBB97"], /* Hangul Syllable */ + ["\uBB98", "\uBB98"], /* Hangul Syllable */ + ["\uBB99", "\uBB99"], /* Hangul Syllable */ + ["\uBB9A", "\uBB9A"], /* Hangul Syllable */ + ["\uBB9B", "\uBB9B"], /* Hangul Syllable */ + ["\uBB9C", "\uBB9C"], /* Hangul Syllable */ + ["\uBB9D", "\uBB9D"], /* Hangul Syllable */ + ["\uBB9E", "\uBB9E"], /* Hangul Syllable */ + ["\uBB9F", "\uBB9F"], /* Hangul Syllable */ + ["\uBBA0", "\uBBA0"], /* Hangul Syllable */ + ["\uBBA1", "\uBBA1"], /* Hangul Syllable */ + ["\uBBA2", "\uBBA2"], /* Hangul Syllable */ + ["\uBBA3", "\uBBA3"], /* Hangul Syllable */ + ["\uBBA4", "\uBBA4"], /* Hangul Syllable */ + ["\uBBA5", "\uBBA5"], /* Hangul Syllable */ + ["\uBBA6", "\uBBA6"], /* Hangul Syllable */ + ["\uBBA7", "\uBBA7"], /* Hangul Syllable */ + ["\uBBA8", "\uBBA8"], /* Hangul Syllable */ + ["\uBBA9", "\uBBA9"], /* Hangul Syllable */ + ["\uBBAA", "\uBBAA"], /* Hangul Syllable */ + ["\uBBAB", "\uBBAB"], /* Hangul Syllable */ + ["\uBBAC", "\uBBAC"], /* Hangul Syllable */ + ["\uBBAD", "\uBBAD"], /* Hangul Syllable */ + ["\uBBAE", "\uBBAE"], /* Hangul Syllable */ + ["\uBBAF", "\uBBAF"], /* Hangul Syllable */ + ["\uBBB0", "\uBBB0"], /* Hangul Syllable */ + ["\uBBB1", "\uBBB1"], /* Hangul Syllable */ + ["\uBBB2", "\uBBB2"], /* Hangul Syllable */ + ["\uBBB3", "\uBBB3"], /* Hangul Syllable */ + ["\uBBB4", "\uBBB4"], /* Hangul Syllable */ + ["\uBBB5", "\uBBB5"], /* Hangul Syllable */ + ["\uBBB6", "\uBBB6"], /* Hangul Syllable */ + ["\uBBB7", "\uBBB7"], /* Hangul Syllable */ + ["\uBBB8", "\uBBB8"], /* Hangul Syllable */ + ["\uBBB9", "\uBBB9"], /* Hangul Syllable */ + ["\uBBBA", "\uBBBA"], /* Hangul Syllable */ + ["\uBBBB", "\uBBBB"], /* Hangul Syllable */ + ["\uBBBC", "\uBBBC"], /* Hangul Syllable */ + ["\uBBBD", "\uBBBD"], /* Hangul Syllable */ + ["\uBBBE", "\uBBBE"], /* Hangul Syllable */ + ["\uBBBF", "\uBBBF"], /* Hangul Syllable */ + ["\uBBC0", "\uBBC0"], /* Hangul Syllable */ + ["\uBBC1", "\uBBC1"], /* Hangul Syllable */ + ["\uBBC2", "\uBBC2"], /* Hangul Syllable */ + ["\uBBC3", "\uBBC3"], /* Hangul Syllable */ + ["\uBBC4", "\uBBC4"], /* Hangul Syllable */ + ["\uBBC5", "\uBBC5"], /* Hangul Syllable */ + ["\uBBC6", "\uBBC6"], /* Hangul Syllable */ + ["\uBBC7", "\uBBC7"], /* Hangul Syllable */ + ["\uBBC8", "\uBBC8"], /* Hangul Syllable */ + ["\uBBC9", "\uBBC9"], /* Hangul Syllable */ + ["\uBBCA", "\uBBCA"], /* Hangul Syllable */ + ["\uBBCB", "\uBBCB"], /* Hangul Syllable */ + ["\uBBCC", "\uBBCC"], /* Hangul Syllable */ + ["\uBBCD", "\uBBCD"], /* Hangul Syllable */ + ["\uBBCE", "\uBBCE"], /* Hangul Syllable */ + ["\uBBCF", "\uBBCF"], /* Hangul Syllable */ + ["\uBBD0", "\uBBD0"], /* Hangul Syllable */ + ["\uBBD1", "\uBBD1"], /* Hangul Syllable */ + ["\uBBD2", "\uBBD2"], /* Hangul Syllable */ + ["\uBBD3", "\uBBD3"], /* Hangul Syllable */ + ["\uBBD4", "\uBBD4"], /* Hangul Syllable */ + ["\uBBD5", "\uBBD5"], /* Hangul Syllable */ + ["\uBBD6", "\uBBD6"], /* Hangul Syllable */ + ["\uBBD7", "\uBBD7"], /* Hangul Syllable */ + ["\uBBD8", "\uBBD8"], /* Hangul Syllable */ + ["\uBBD9", "\uBBD9"], /* Hangul Syllable */ + ["\uBBDA", "\uBBDA"], /* Hangul Syllable */ + ["\uBBDB", "\uBBDB"], /* Hangul Syllable */ + ["\uBBDC", "\uBBDC"], /* Hangul Syllable */ + ["\uBBDD", "\uBBDD"], /* Hangul Syllable */ + ["\uBBDE", "\uBBDE"], /* Hangul Syllable */ + ["\uBBDF", "\uBBDF"], /* Hangul Syllable */ + ["\uBBE0", "\uBBE0"], /* Hangul Syllable */ + ["\uBBE1", "\uBBE1"], /* Hangul Syllable */ + ["\uBBE2", "\uBBE2"], /* Hangul Syllable */ + ["\uBBE3", "\uBBE3"], /* Hangul Syllable */ + ["\uBBE4", "\uBBE4"], /* Hangul Syllable */ + ["\uBBE5", "\uBBE5"], /* Hangul Syllable */ + ["\uBBE6", "\uBBE6"], /* Hangul Syllable */ + ["\uBBE7", "\uBBE7"], /* Hangul Syllable */ + ["\uBBE8", "\uBBE8"], /* Hangul Syllable */ + ["\uBBE9", "\uBBE9"], /* Hangul Syllable */ + ["\uBBEA", "\uBBEA"], /* Hangul Syllable */ + ["\uBBEB", "\uBBEB"], /* Hangul Syllable */ + ["\uBBEC", "\uBBEC"], /* Hangul Syllable */ + ["\uBBED", "\uBBED"], /* Hangul Syllable */ + ["\uBBEE", "\uBBEE"], /* Hangul Syllable */ + ["\uBBEF", "\uBBEF"], /* Hangul Syllable */ + ["\uBBF0", "\uBBF0"], /* Hangul Syllable */ + ["\uBBF1", "\uBBF1"], /* Hangul Syllable */ + ["\uBBF2", "\uBBF2"], /* Hangul Syllable */ + ["\uBBF3", "\uBBF3"], /* Hangul Syllable */ + ["\uBBF4", "\uBBF4"], /* Hangul Syllable */ + ["\uBBF5", "\uBBF5"], /* Hangul Syllable */ + ["\uBBF6", "\uBBF6"], /* Hangul Syllable */ + ["\uBBF7", "\uBBF7"], /* Hangul Syllable */ + ["\uBBF8", "\uBBF8"], /* Hangul Syllable */ + ["\uBBF9", "\uBBF9"], /* Hangul Syllable */ + ["\uBBFA", "\uBBFA"], /* Hangul Syllable */ + ["\uBBFB", "\uBBFB"], /* Hangul Syllable */ + ["\uBBFC", "\uBBFC"], /* Hangul Syllable */ + ["\uBBFD", "\uBBFD"], /* Hangul Syllable */ + ["\uBBFE", "\uBBFE"], /* Hangul Syllable */ + ["\uBBFF", "\uBBFF"], /* Hangul Syllable */ + ["\uBC00", "\uBC00"], /* Hangul Syllable */ + ["\uBC01", "\uBC01"], /* Hangul Syllable */ + ["\uBC02", "\uBC02"], /* Hangul Syllable */ + ["\uBC03", "\uBC03"], /* Hangul Syllable */ + ["\uBC04", "\uBC04"], /* Hangul Syllable */ + ["\uBC05", "\uBC05"], /* Hangul Syllable */ + ["\uBC06", "\uBC06"], /* Hangul Syllable */ + ["\uBC07", "\uBC07"], /* Hangul Syllable */ + ["\uBC08", "\uBC08"], /* Hangul Syllable */ + ["\uBC09", "\uBC09"], /* Hangul Syllable */ + ["\uBC0A", "\uBC0A"], /* Hangul Syllable */ + ["\uBC0B", "\uBC0B"], /* Hangul Syllable */ + ["\uBC0C", "\uBC0C"], /* Hangul Syllable */ + ["\uBC0D", "\uBC0D"], /* Hangul Syllable */ + ["\uBC0E", "\uBC0E"], /* Hangul Syllable */ + ["\uBC0F", "\uBC0F"], /* Hangul Syllable */ + ["\uBC10", "\uBC10"], /* Hangul Syllable */ + ["\uBC11", "\uBC11"], /* Hangul Syllable */ + ["\uBC12", "\uBC12"], /* Hangul Syllable */ + ["\uBC13", "\uBC13"], /* Hangul Syllable */ + ["\uBC14", "\uBC14"], /* Hangul Syllable */ + ["\uBC15", "\uBC15"], /* Hangul Syllable */ + ["\uBC16", "\uBC16"], /* Hangul Syllable */ + ["\uBC17", "\uBC17"], /* Hangul Syllable */ + ["\uBC18", "\uBC18"], /* Hangul Syllable */ + ["\uBC19", "\uBC19"], /* Hangul Syllable */ + ["\uBC1A", "\uBC1A"], /* Hangul Syllable */ + ["\uBC1B", "\uBC1B"], /* Hangul Syllable */ + ["\uBC1C", "\uBC1C"], /* Hangul Syllable */ + ["\uBC1D", "\uBC1D"], /* Hangul Syllable */ + ["\uBC1E", "\uBC1E"], /* Hangul Syllable */ + ["\uBC1F", "\uBC1F"], /* Hangul Syllable */ + ["\uBC20", "\uBC20"], /* Hangul Syllable */ + ["\uBC21", "\uBC21"], /* Hangul Syllable */ + ["\uBC22", "\uBC22"], /* Hangul Syllable */ + ["\uBC23", "\uBC23"], /* Hangul Syllable */ + ["\uBC24", "\uBC24"], /* Hangul Syllable */ + ["\uBC25", "\uBC25"], /* Hangul Syllable */ + ["\uBC26", "\uBC26"], /* Hangul Syllable */ + ["\uBC27", "\uBC27"], /* Hangul Syllable */ + ["\uBC28", "\uBC28"], /* Hangul Syllable */ + ["\uBC29", "\uBC29"], /* Hangul Syllable */ + ["\uBC2A", "\uBC2A"], /* Hangul Syllable */ + ["\uBC2B", "\uBC2B"], /* Hangul Syllable */ + ["\uBC2C", "\uBC2C"], /* Hangul Syllable */ + ["\uBC2D", "\uBC2D"], /* Hangul Syllable */ + ["\uBC2E", "\uBC2E"], /* Hangul Syllable */ + ["\uBC2F", "\uBC2F"], /* Hangul Syllable */ + ["\uBC30", "\uBC30"], /* Hangul Syllable */ + ["\uBC31", "\uBC31"], /* Hangul Syllable */ + ["\uBC32", "\uBC32"], /* Hangul Syllable */ + ["\uBC33", "\uBC33"], /* Hangul Syllable */ + ["\uBC34", "\uBC34"], /* Hangul Syllable */ + ["\uBC35", "\uBC35"], /* Hangul Syllable */ + ["\uBC36", "\uBC36"], /* Hangul Syllable */ + ["\uBC37", "\uBC37"], /* Hangul Syllable */ + ["\uBC38", "\uBC38"], /* Hangul Syllable */ + ["\uBC39", "\uBC39"], /* Hangul Syllable */ + ["\uBC3A", "\uBC3A"], /* Hangul Syllable */ + ["\uBC3B", "\uBC3B"], /* Hangul Syllable */ + ["\uBC3C", "\uBC3C"], /* Hangul Syllable */ + ["\uBC3D", "\uBC3D"], /* Hangul Syllable */ + ["\uBC3E", "\uBC3E"], /* Hangul Syllable */ + ["\uBC3F", "\uBC3F"], /* Hangul Syllable */ + ["\uBC40", "\uBC40"], /* Hangul Syllable */ + ["\uBC41", "\uBC41"], /* Hangul Syllable */ + ["\uBC42", "\uBC42"], /* Hangul Syllable */ + ["\uBC43", "\uBC43"], /* Hangul Syllable */ + ["\uBC44", "\uBC44"], /* Hangul Syllable */ + ["\uBC45", "\uBC45"], /* Hangul Syllable */ + ["\uBC46", "\uBC46"], /* Hangul Syllable */ + ["\uBC47", "\uBC47"], /* Hangul Syllable */ + ["\uBC48", "\uBC48"], /* Hangul Syllable */ + ["\uBC49", "\uBC49"], /* Hangul Syllable */ + ["\uBC4A", "\uBC4A"], /* Hangul Syllable */ + ["\uBC4B", "\uBC4B"], /* Hangul Syllable */ + ["\uBC4C", "\uBC4C"], /* Hangul Syllable */ + ["\uBC4D", "\uBC4D"], /* Hangul Syllable */ + ["\uBC4E", "\uBC4E"], /* Hangul Syllable */ + ["\uBC4F", "\uBC4F"], /* Hangul Syllable */ + ["\uBC50", "\uBC50"], /* Hangul Syllable */ + ["\uBC51", "\uBC51"], /* Hangul Syllable */ + ["\uBC52", "\uBC52"], /* Hangul Syllable */ + ["\uBC53", "\uBC53"], /* Hangul Syllable */ + ["\uBC54", "\uBC54"], /* Hangul Syllable */ + ["\uBC55", "\uBC55"], /* Hangul Syllable */ + ["\uBC56", "\uBC56"], /* Hangul Syllable */ + ["\uBC57", "\uBC57"], /* Hangul Syllable */ + ["\uBC58", "\uBC58"], /* Hangul Syllable */ + ["\uBC59", "\uBC59"], /* Hangul Syllable */ + ["\uBC5A", "\uBC5A"], /* Hangul Syllable */ + ["\uBC5B", "\uBC5B"], /* Hangul Syllable */ + ["\uBC5C", "\uBC5C"], /* Hangul Syllable */ + ["\uBC5D", "\uBC5D"], /* Hangul Syllable */ + ["\uBC5E", "\uBC5E"], /* Hangul Syllable */ + ["\uBC5F", "\uBC5F"], /* Hangul Syllable */ + ["\uBC60", "\uBC60"], /* Hangul Syllable */ + ["\uBC61", "\uBC61"], /* Hangul Syllable */ + ["\uBC62", "\uBC62"], /* Hangul Syllable */ + ["\uBC63", "\uBC63"], /* Hangul Syllable */ + ["\uBC64", "\uBC64"], /* Hangul Syllable */ + ["\uBC65", "\uBC65"], /* Hangul Syllable */ + ["\uBC66", "\uBC66"], /* Hangul Syllable */ + ["\uBC67", "\uBC67"], /* Hangul Syllable */ + ["\uBC68", "\uBC68"], /* Hangul Syllable */ + ["\uBC69", "\uBC69"], /* Hangul Syllable */ + ["\uBC6A", "\uBC6A"], /* Hangul Syllable */ + ["\uBC6B", "\uBC6B"], /* Hangul Syllable */ + ["\uBC6C", "\uBC6C"], /* Hangul Syllable */ + ["\uBC6D", "\uBC6D"], /* Hangul Syllable */ + ["\uBC6E", "\uBC6E"], /* Hangul Syllable */ + ["\uBC6F", "\uBC6F"], /* Hangul Syllable */ + ["\uBC70", "\uBC70"], /* Hangul Syllable */ + ["\uBC71", "\uBC71"], /* Hangul Syllable */ + ["\uBC72", "\uBC72"], /* Hangul Syllable */ + ["\uBC73", "\uBC73"], /* Hangul Syllable */ + ["\uBC74", "\uBC74"], /* Hangul Syllable */ + ["\uBC75", "\uBC75"], /* Hangul Syllable */ + ["\uBC76", "\uBC76"], /* Hangul Syllable */ + ["\uBC77", "\uBC77"], /* Hangul Syllable */ + ["\uBC78", "\uBC78"], /* Hangul Syllable */ + ["\uBC79", "\uBC79"], /* Hangul Syllable */ + ["\uBC7A", "\uBC7A"], /* Hangul Syllable */ + ["\uBC7B", "\uBC7B"], /* Hangul Syllable */ + ["\uBC7C", "\uBC7C"], /* Hangul Syllable */ + ["\uBC7D", "\uBC7D"], /* Hangul Syllable */ + ["\uBC7E", "\uBC7E"], /* Hangul Syllable */ + ["\uBC7F", "\uBC7F"], /* Hangul Syllable */ + ["\uBC80", "\uBC80"], /* Hangul Syllable */ + ["\uBC81", "\uBC81"], /* Hangul Syllable */ + ["\uBC82", "\uBC82"], /* Hangul Syllable */ + ["\uBC83", "\uBC83"], /* Hangul Syllable */ + ["\uBC84", "\uBC84"], /* Hangul Syllable */ + ["\uBC85", "\uBC85"], /* Hangul Syllable */ + ["\uBC86", "\uBC86"], /* Hangul Syllable */ + ["\uBC87", "\uBC87"], /* Hangul Syllable */ + ["\uBC88", "\uBC88"], /* Hangul Syllable */ + ["\uBC89", "\uBC89"], /* Hangul Syllable */ + ["\uBC8A", "\uBC8A"], /* Hangul Syllable */ + ["\uBC8B", "\uBC8B"], /* Hangul Syllable */ + ["\uBC8C", "\uBC8C"], /* Hangul Syllable */ + ["\uBC8D", "\uBC8D"], /* Hangul Syllable */ + ["\uBC8E", "\uBC8E"], /* Hangul Syllable */ + ["\uBC8F", "\uBC8F"], /* Hangul Syllable */ + ["\uBC90", "\uBC90"], /* Hangul Syllable */ + ["\uBC91", "\uBC91"], /* Hangul Syllable */ + ["\uBC92", "\uBC92"], /* Hangul Syllable */ + ["\uBC93", "\uBC93"], /* Hangul Syllable */ + ["\uBC94", "\uBC94"], /* Hangul Syllable */ + ["\uBC95", "\uBC95"], /* Hangul Syllable */ + ["\uBC96", "\uBC96"], /* Hangul Syllable */ + ["\uBC97", "\uBC97"], /* Hangul Syllable */ + ["\uBC98", "\uBC98"], /* Hangul Syllable */ + ["\uBC99", "\uBC99"], /* Hangul Syllable */ + ["\uBC9A", "\uBC9A"], /* Hangul Syllable */ + ["\uBC9B", "\uBC9B"], /* Hangul Syllable */ + ["\uBC9C", "\uBC9C"], /* Hangul Syllable */ + ["\uBC9D", "\uBC9D"], /* Hangul Syllable */ + ["\uBC9E", "\uBC9E"], /* Hangul Syllable */ + ["\uBC9F", "\uBC9F"], /* Hangul Syllable */ + ["\uBCA0", "\uBCA0"], /* Hangul Syllable */ + ["\uBCA1", "\uBCA1"], /* Hangul Syllable */ + ["\uBCA2", "\uBCA2"], /* Hangul Syllable */ + ["\uBCA3", "\uBCA3"], /* Hangul Syllable */ + ["\uBCA4", "\uBCA4"], /* Hangul Syllable */ + ["\uBCA5", "\uBCA5"], /* Hangul Syllable */ + ["\uBCA6", "\uBCA6"], /* Hangul Syllable */ + ["\uBCA7", "\uBCA7"], /* Hangul Syllable */ + ["\uBCA8", "\uBCA8"], /* Hangul Syllable */ + ["\uBCA9", "\uBCA9"], /* Hangul Syllable */ + ["\uBCAA", "\uBCAA"], /* Hangul Syllable */ + ["\uBCAB", "\uBCAB"], /* Hangul Syllable */ + ["\uBCAC", "\uBCAC"], /* Hangul Syllable */ + ["\uBCAD", "\uBCAD"], /* Hangul Syllable */ + ["\uBCAE", "\uBCAE"], /* Hangul Syllable */ + ["\uBCAF", "\uBCAF"], /* Hangul Syllable */ + ["\uBCB0", "\uBCB0"], /* Hangul Syllable */ + ["\uBCB1", "\uBCB1"], /* Hangul Syllable */ + ["\uBCB2", "\uBCB2"], /* Hangul Syllable */ + ["\uBCB3", "\uBCB3"], /* Hangul Syllable */ + ["\uBCB4", "\uBCB4"], /* Hangul Syllable */ + ["\uBCB5", "\uBCB5"], /* Hangul Syllable */ + ["\uBCB6", "\uBCB6"], /* Hangul Syllable */ + ["\uBCB7", "\uBCB7"], /* Hangul Syllable */ + ["\uBCB8", "\uBCB8"], /* Hangul Syllable */ + ["\uBCB9", "\uBCB9"], /* Hangul Syllable */ + ["\uBCBA", "\uBCBA"], /* Hangul Syllable */ + ["\uBCBB", "\uBCBB"], /* Hangul Syllable */ + ["\uBCBC", "\uBCBC"], /* Hangul Syllable */ + ["\uBCBD", "\uBCBD"], /* Hangul Syllable */ + ["\uBCBE", "\uBCBE"], /* Hangul Syllable */ + ["\uBCBF", "\uBCBF"], /* Hangul Syllable */ + ["\uBCC0", "\uBCC0"], /* Hangul Syllable */ + ["\uBCC1", "\uBCC1"], /* Hangul Syllable */ + ["\uBCC2", "\uBCC2"], /* Hangul Syllable */ + ["\uBCC3", "\uBCC3"], /* Hangul Syllable */ + ["\uBCC4", "\uBCC4"], /* Hangul Syllable */ + ["\uBCC5", "\uBCC5"], /* Hangul Syllable */ + ["\uBCC6", "\uBCC6"], /* Hangul Syllable */ + ["\uBCC7", "\uBCC7"], /* Hangul Syllable */ + ["\uBCC8", "\uBCC8"], /* Hangul Syllable */ + ["\uBCC9", "\uBCC9"], /* Hangul Syllable */ + ["\uBCCA", "\uBCCA"], /* Hangul Syllable */ + ["\uBCCB", "\uBCCB"], /* Hangul Syllable */ + ["\uBCCC", "\uBCCC"], /* Hangul Syllable */ + ["\uBCCD", "\uBCCD"], /* Hangul Syllable */ + ["\uBCCE", "\uBCCE"], /* Hangul Syllable */ + ["\uBCCF", "\uBCCF"], /* Hangul Syllable */ + ["\uBCD0", "\uBCD0"], /* Hangul Syllable */ + ["\uBCD1", "\uBCD1"], /* Hangul Syllable */ + ["\uBCD2", "\uBCD2"], /* Hangul Syllable */ + ["\uBCD3", "\uBCD3"], /* Hangul Syllable */ + ["\uBCD4", "\uBCD4"], /* Hangul Syllable */ + ["\uBCD5", "\uBCD5"], /* Hangul Syllable */ + ["\uBCD6", "\uBCD6"], /* Hangul Syllable */ + ["\uBCD7", "\uBCD7"], /* Hangul Syllable */ + ["\uBCD8", "\uBCD8"], /* Hangul Syllable */ + ["\uBCD9", "\uBCD9"], /* Hangul Syllable */ + ["\uBCDA", "\uBCDA"], /* Hangul Syllable */ + ["\uBCDB", "\uBCDB"], /* Hangul Syllable */ + ["\uBCDC", "\uBCDC"], /* Hangul Syllable */ + ["\uBCDD", "\uBCDD"], /* Hangul Syllable */ + ["\uBCDE", "\uBCDE"], /* Hangul Syllable */ + ["\uBCDF", "\uBCDF"], /* Hangul Syllable */ + ["\uBCE0", "\uBCE0"], /* Hangul Syllable */ + ["\uBCE1", "\uBCE1"], /* Hangul Syllable */ + ["\uBCE2", "\uBCE2"], /* Hangul Syllable */ + ["\uBCE3", "\uBCE3"], /* Hangul Syllable */ + ["\uBCE4", "\uBCE4"], /* Hangul Syllable */ + ["\uBCE5", "\uBCE5"], /* Hangul Syllable */ + ["\uBCE6", "\uBCE6"], /* Hangul Syllable */ + ["\uBCE7", "\uBCE7"], /* Hangul Syllable */ + ["\uBCE8", "\uBCE8"], /* Hangul Syllable */ + ["\uBCE9", "\uBCE9"], /* Hangul Syllable */ + ["\uBCEA", "\uBCEA"], /* Hangul Syllable */ + ["\uBCEB", "\uBCEB"], /* Hangul Syllable */ + ["\uBCEC", "\uBCEC"], /* Hangul Syllable */ + ["\uBCED", "\uBCED"], /* Hangul Syllable */ + ["\uBCEE", "\uBCEE"], /* Hangul Syllable */ + ["\uBCEF", "\uBCEF"], /* Hangul Syllable */ + ["\uBCF0", "\uBCF0"], /* Hangul Syllable */ + ["\uBCF1", "\uBCF1"], /* Hangul Syllable */ + ["\uBCF2", "\uBCF2"], /* Hangul Syllable */ + ["\uBCF3", "\uBCF3"], /* Hangul Syllable */ + ["\uBCF4", "\uBCF4"], /* Hangul Syllable */ + ["\uBCF5", "\uBCF5"], /* Hangul Syllable */ + ["\uBCF6", "\uBCF6"], /* Hangul Syllable */ + ["\uBCF7", "\uBCF7"], /* Hangul Syllable */ + ["\uBCF8", "\uBCF8"], /* Hangul Syllable */ + ["\uBCF9", "\uBCF9"], /* Hangul Syllable */ + ["\uBCFA", "\uBCFA"], /* Hangul Syllable */ + ["\uBCFB", "\uBCFB"], /* Hangul Syllable */ + ["\uBCFC", "\uBCFC"], /* Hangul Syllable */ + ["\uBCFD", "\uBCFD"], /* Hangul Syllable */ + ["\uBCFE", "\uBCFE"], /* Hangul Syllable */ + ["\uBCFF", "\uBCFF"], /* Hangul Syllable */ + ["\uBD00", "\uBD00"], /* Hangul Syllable */ + ["\uBD01", "\uBD01"], /* Hangul Syllable */ + ["\uBD02", "\uBD02"], /* Hangul Syllable */ + ["\uBD03", "\uBD03"], /* Hangul Syllable */ + ["\uBD04", "\uBD04"], /* Hangul Syllable */ + ["\uBD05", "\uBD05"], /* Hangul Syllable */ + ["\uBD06", "\uBD06"], /* Hangul Syllable */ + ["\uBD07", "\uBD07"], /* Hangul Syllable */ + ["\uBD08", "\uBD08"], /* Hangul Syllable */ + ["\uBD09", "\uBD09"], /* Hangul Syllable */ + ["\uBD0A", "\uBD0A"], /* Hangul Syllable */ + ["\uBD0B", "\uBD0B"], /* Hangul Syllable */ + ["\uBD0C", "\uBD0C"], /* Hangul Syllable */ + ["\uBD0D", "\uBD0D"], /* Hangul Syllable */ + ["\uBD0E", "\uBD0E"], /* Hangul Syllable */ + ["\uBD0F", "\uBD0F"], /* Hangul Syllable */ + ["\uBD10", "\uBD10"], /* Hangul Syllable */ + ["\uBD11", "\uBD11"], /* Hangul Syllable */ + ["\uBD12", "\uBD12"], /* Hangul Syllable */ + ["\uBD13", "\uBD13"], /* Hangul Syllable */ + ["\uBD14", "\uBD14"], /* Hangul Syllable */ + ["\uBD15", "\uBD15"], /* Hangul Syllable */ + ["\uBD16", "\uBD16"], /* Hangul Syllable */ + ["\uBD17", "\uBD17"], /* Hangul Syllable */ + ["\uBD18", "\uBD18"], /* Hangul Syllable */ + ["\uBD19", "\uBD19"], /* Hangul Syllable */ + ["\uBD1A", "\uBD1A"], /* Hangul Syllable */ + ["\uBD1B", "\uBD1B"], /* Hangul Syllable */ + ["\uBD1C", "\uBD1C"], /* Hangul Syllable */ + ["\uBD1D", "\uBD1D"], /* Hangul Syllable */ + ["\uBD1E", "\uBD1E"], /* Hangul Syllable */ + ["\uBD1F", "\uBD1F"], /* Hangul Syllable */ + ["\uBD20", "\uBD20"], /* Hangul Syllable */ + ["\uBD21", "\uBD21"], /* Hangul Syllable */ + ["\uBD22", "\uBD22"], /* Hangul Syllable */ + ["\uBD23", "\uBD23"], /* Hangul Syllable */ + ["\uBD24", "\uBD24"], /* Hangul Syllable */ + ["\uBD25", "\uBD25"], /* Hangul Syllable */ + ["\uBD26", "\uBD26"], /* Hangul Syllable */ + ["\uBD27", "\uBD27"], /* Hangul Syllable */ + ["\uBD28", "\uBD28"], /* Hangul Syllable */ + ["\uBD29", "\uBD29"], /* Hangul Syllable */ + ["\uBD2A", "\uBD2A"], /* Hangul Syllable */ + ["\uBD2B", "\uBD2B"], /* Hangul Syllable */ + ["\uBD2C", "\uBD2C"], /* Hangul Syllable */ + ["\uBD2D", "\uBD2D"], /* Hangul Syllable */ + ["\uBD2E", "\uBD2E"], /* Hangul Syllable */ + ["\uBD2F", "\uBD2F"], /* Hangul Syllable */ + ["\uBD30", "\uBD30"], /* Hangul Syllable */ + ["\uBD31", "\uBD31"], /* Hangul Syllable */ + ["\uBD32", "\uBD32"], /* Hangul Syllable */ + ["\uBD33", "\uBD33"], /* Hangul Syllable */ + ["\uBD34", "\uBD34"], /* Hangul Syllable */ + ["\uBD35", "\uBD35"], /* Hangul Syllable */ + ["\uBD36", "\uBD36"], /* Hangul Syllable */ + ["\uBD37", "\uBD37"], /* Hangul Syllable */ + ["\uBD38", "\uBD38"], /* Hangul Syllable */ + ["\uBD39", "\uBD39"], /* Hangul Syllable */ + ["\uBD3A", "\uBD3A"], /* Hangul Syllable */ + ["\uBD3B", "\uBD3B"], /* Hangul Syllable */ + ["\uBD3C", "\uBD3C"], /* Hangul Syllable */ + ["\uBD3D", "\uBD3D"], /* Hangul Syllable */ + ["\uBD3E", "\uBD3E"], /* Hangul Syllable */ + ["\uBD3F", "\uBD3F"], /* Hangul Syllable */ + ["\uBD40", "\uBD40"], /* Hangul Syllable */ + ["\uBD41", "\uBD41"], /* Hangul Syllable */ + ["\uBD42", "\uBD42"], /* Hangul Syllable */ + ["\uBD43", "\uBD43"], /* Hangul Syllable */ + ["\uBD44", "\uBD44"], /* Hangul Syllable */ + ["\uBD45", "\uBD45"], /* Hangul Syllable */ + ["\uBD46", "\uBD46"], /* Hangul Syllable */ + ["\uBD47", "\uBD47"], /* Hangul Syllable */ + ["\uBD48", "\uBD48"], /* Hangul Syllable */ + ["\uBD49", "\uBD49"], /* Hangul Syllable */ + ["\uBD4A", "\uBD4A"], /* Hangul Syllable */ + ["\uBD4B", "\uBD4B"], /* Hangul Syllable */ + ["\uBD4C", "\uBD4C"], /* Hangul Syllable */ + ["\uBD4D", "\uBD4D"], /* Hangul Syllable */ + ["\uBD4E", "\uBD4E"], /* Hangul Syllable */ + ["\uBD4F", "\uBD4F"], /* Hangul Syllable */ + ["\uBD50", "\uBD50"], /* Hangul Syllable */ + ["\uBD51", "\uBD51"], /* Hangul Syllable */ + ["\uBD52", "\uBD52"], /* Hangul Syllable */ + ["\uBD53", "\uBD53"], /* Hangul Syllable */ + ["\uBD54", "\uBD54"], /* Hangul Syllable */ + ["\uBD55", "\uBD55"], /* Hangul Syllable */ + ["\uBD56", "\uBD56"], /* Hangul Syllable */ + ["\uBD57", "\uBD57"], /* Hangul Syllable */ + ["\uBD58", "\uBD58"], /* Hangul Syllable */ + ["\uBD59", "\uBD59"], /* Hangul Syllable */ + ["\uBD5A", "\uBD5A"], /* Hangul Syllable */ + ["\uBD5B", "\uBD5B"], /* Hangul Syllable */ + ["\uBD5C", "\uBD5C"], /* Hangul Syllable */ + ["\uBD5D", "\uBD5D"], /* Hangul Syllable */ + ["\uBD5E", "\uBD5E"], /* Hangul Syllable */ + ["\uBD5F", "\uBD5F"], /* Hangul Syllable */ + ["\uBD60", "\uBD60"], /* Hangul Syllable */ + ["\uBD61", "\uBD61"], /* Hangul Syllable */ + ["\uBD62", "\uBD62"], /* Hangul Syllable */ + ["\uBD63", "\uBD63"], /* Hangul Syllable */ + ["\uBD64", "\uBD64"], /* Hangul Syllable */ + ["\uBD65", "\uBD65"], /* Hangul Syllable */ + ["\uBD66", "\uBD66"], /* Hangul Syllable */ + ["\uBD67", "\uBD67"], /* Hangul Syllable */ + ["\uBD68", "\uBD68"], /* Hangul Syllable */ + ["\uBD69", "\uBD69"], /* Hangul Syllable */ + ["\uBD6A", "\uBD6A"], /* Hangul Syllable */ + ["\uBD6B", "\uBD6B"], /* Hangul Syllable */ + ["\uBD6C", "\uBD6C"], /* Hangul Syllable */ + ["\uBD6D", "\uBD6D"], /* Hangul Syllable */ + ["\uBD6E", "\uBD6E"], /* Hangul Syllable */ + ["\uBD6F", "\uBD6F"], /* Hangul Syllable */ + ["\uBD70", "\uBD70"], /* Hangul Syllable */ + ["\uBD71", "\uBD71"], /* Hangul Syllable */ + ["\uBD72", "\uBD72"], /* Hangul Syllable */ + ["\uBD73", "\uBD73"], /* Hangul Syllable */ + ["\uBD74", "\uBD74"], /* Hangul Syllable */ + ["\uBD75", "\uBD75"], /* Hangul Syllable */ + ["\uBD76", "\uBD76"], /* Hangul Syllable */ + ["\uBD77", "\uBD77"], /* Hangul Syllable */ + ["\uBD78", "\uBD78"], /* Hangul Syllable */ + ["\uBD79", "\uBD79"], /* Hangul Syllable */ + ["\uBD7A", "\uBD7A"], /* Hangul Syllable */ + ["\uBD7B", "\uBD7B"], /* Hangul Syllable */ + ["\uBD7C", "\uBD7C"], /* Hangul Syllable */ + ["\uBD7D", "\uBD7D"], /* Hangul Syllable */ + ["\uBD7E", "\uBD7E"], /* Hangul Syllable */ + ["\uBD7F", "\uBD7F"], /* Hangul Syllable */ + ["\uBD80", "\uBD80"], /* Hangul Syllable */ + ["\uBD81", "\uBD81"], /* Hangul Syllable */ + ["\uBD82", "\uBD82"], /* Hangul Syllable */ + ["\uBD83", "\uBD83"], /* Hangul Syllable */ + ["\uBD84", "\uBD84"], /* Hangul Syllable */ + ["\uBD85", "\uBD85"], /* Hangul Syllable */ + ["\uBD86", "\uBD86"], /* Hangul Syllable */ + ["\uBD87", "\uBD87"], /* Hangul Syllable */ + ["\uBD88", "\uBD88"], /* Hangul Syllable */ + ["\uBD89", "\uBD89"], /* Hangul Syllable */ + ["\uBD8A", "\uBD8A"], /* Hangul Syllable */ + ["\uBD8B", "\uBD8B"], /* Hangul Syllable */ + ["\uBD8C", "\uBD8C"], /* Hangul Syllable */ + ["\uBD8D", "\uBD8D"], /* Hangul Syllable */ + ["\uBD8E", "\uBD8E"], /* Hangul Syllable */ + ["\uBD8F", "\uBD8F"], /* Hangul Syllable */ + ["\uBD90", "\uBD90"], /* Hangul Syllable */ + ["\uBD91", "\uBD91"], /* Hangul Syllable */ + ["\uBD92", "\uBD92"], /* Hangul Syllable */ + ["\uBD93", "\uBD93"], /* Hangul Syllable */ + ["\uBD94", "\uBD94"], /* Hangul Syllable */ + ["\uBD95", "\uBD95"], /* Hangul Syllable */ + ["\uBD96", "\uBD96"], /* Hangul Syllable */ + ["\uBD97", "\uBD97"], /* Hangul Syllable */ + ["\uBD98", "\uBD98"], /* Hangul Syllable */ + ["\uBD99", "\uBD99"], /* Hangul Syllable */ + ["\uBD9A", "\uBD9A"], /* Hangul Syllable */ + ["\uBD9B", "\uBD9B"], /* Hangul Syllable */ + ["\uBD9C", "\uBD9C"], /* Hangul Syllable */ + ["\uBD9D", "\uBD9D"], /* Hangul Syllable */ + ["\uBD9E", "\uBD9E"], /* Hangul Syllable */ + ["\uBD9F", "\uBD9F"], /* Hangul Syllable */ + ["\uBDA0", "\uBDA0"], /* Hangul Syllable */ + ["\uBDA1", "\uBDA1"], /* Hangul Syllable */ + ["\uBDA2", "\uBDA2"], /* Hangul Syllable */ + ["\uBDA3", "\uBDA3"], /* Hangul Syllable */ + ["\uBDA4", "\uBDA4"], /* Hangul Syllable */ + ["\uBDA5", "\uBDA5"], /* Hangul Syllable */ + ["\uBDA6", "\uBDA6"], /* Hangul Syllable */ + ["\uBDA7", "\uBDA7"], /* Hangul Syllable */ + ["\uBDA8", "\uBDA8"], /* Hangul Syllable */ + ["\uBDA9", "\uBDA9"], /* Hangul Syllable */ + ["\uBDAA", "\uBDAA"], /* Hangul Syllable */ + ["\uBDAB", "\uBDAB"], /* Hangul Syllable */ + ["\uBDAC", "\uBDAC"], /* Hangul Syllable */ + ["\uBDAD", "\uBDAD"], /* Hangul Syllable */ + ["\uBDAE", "\uBDAE"], /* Hangul Syllable */ + ["\uBDAF", "\uBDAF"], /* Hangul Syllable */ + ["\uBDB0", "\uBDB0"], /* Hangul Syllable */ + ["\uBDB1", "\uBDB1"], /* Hangul Syllable */ + ["\uBDB2", "\uBDB2"], /* Hangul Syllable */ + ["\uBDB3", "\uBDB3"], /* Hangul Syllable */ + ["\uBDB4", "\uBDB4"], /* Hangul Syllable */ + ["\uBDB5", "\uBDB5"], /* Hangul Syllable */ + ["\uBDB6", "\uBDB6"], /* Hangul Syllable */ + ["\uBDB7", "\uBDB7"], /* Hangul Syllable */ + ["\uBDB8", "\uBDB8"], /* Hangul Syllable */ + ["\uBDB9", "\uBDB9"], /* Hangul Syllable */ + ["\uBDBA", "\uBDBA"], /* Hangul Syllable */ + ["\uBDBB", "\uBDBB"], /* Hangul Syllable */ + ["\uBDBC", "\uBDBC"], /* Hangul Syllable */ + ["\uBDBD", "\uBDBD"], /* Hangul Syllable */ + ["\uBDBE", "\uBDBE"], /* Hangul Syllable */ + ["\uBDBF", "\uBDBF"], /* Hangul Syllable */ + ["\uBDC0", "\uBDC0"], /* Hangul Syllable */ + ["\uBDC1", "\uBDC1"], /* Hangul Syllable */ + ["\uBDC2", "\uBDC2"], /* Hangul Syllable */ + ["\uBDC3", "\uBDC3"], /* Hangul Syllable */ + ["\uBDC4", "\uBDC4"], /* Hangul Syllable */ + ["\uBDC5", "\uBDC5"], /* Hangul Syllable */ + ["\uBDC6", "\uBDC6"], /* Hangul Syllable */ + ["\uBDC7", "\uBDC7"], /* Hangul Syllable */ + ["\uBDC8", "\uBDC8"], /* Hangul Syllable */ + ["\uBDC9", "\uBDC9"], /* Hangul Syllable */ + ["\uBDCA", "\uBDCA"], /* Hangul Syllable */ + ["\uBDCB", "\uBDCB"], /* Hangul Syllable */ + ["\uBDCC", "\uBDCC"], /* Hangul Syllable */ + ["\uBDCD", "\uBDCD"], /* Hangul Syllable */ + ["\uBDCE", "\uBDCE"], /* Hangul Syllable */ + ["\uBDCF", "\uBDCF"], /* Hangul Syllable */ + ["\uBDD0", "\uBDD0"], /* Hangul Syllable */ + ["\uBDD1", "\uBDD1"], /* Hangul Syllable */ + ["\uBDD2", "\uBDD2"], /* Hangul Syllable */ + ["\uBDD3", "\uBDD3"], /* Hangul Syllable */ + ["\uBDD4", "\uBDD4"], /* Hangul Syllable */ + ["\uBDD5", "\uBDD5"], /* Hangul Syllable */ + ["\uBDD6", "\uBDD6"], /* Hangul Syllable */ + ["\uBDD7", "\uBDD7"], /* Hangul Syllable */ + ["\uBDD8", "\uBDD8"], /* Hangul Syllable */ + ["\uBDD9", "\uBDD9"], /* Hangul Syllable */ + ["\uBDDA", "\uBDDA"], /* Hangul Syllable */ + ["\uBDDB", "\uBDDB"], /* Hangul Syllable */ + ["\uBDDC", "\uBDDC"], /* Hangul Syllable */ + ["\uBDDD", "\uBDDD"], /* Hangul Syllable */ + ["\uBDDE", "\uBDDE"], /* Hangul Syllable */ + ["\uBDDF", "\uBDDF"], /* Hangul Syllable */ + ["\uBDE0", "\uBDE0"], /* Hangul Syllable */ + ["\uBDE1", "\uBDE1"], /* Hangul Syllable */ + ["\uBDE2", "\uBDE2"], /* Hangul Syllable */ + ["\uBDE3", "\uBDE3"], /* Hangul Syllable */ + ["\uBDE4", "\uBDE4"], /* Hangul Syllable */ + ["\uBDE5", "\uBDE5"], /* Hangul Syllable */ + ["\uBDE6", "\uBDE6"], /* Hangul Syllable */ + ["\uBDE7", "\uBDE7"], /* Hangul Syllable */ + ["\uBDE8", "\uBDE8"], /* Hangul Syllable */ + ["\uBDE9", "\uBDE9"], /* Hangul Syllable */ + ["\uBDEA", "\uBDEA"], /* Hangul Syllable */ + ["\uBDEB", "\uBDEB"], /* Hangul Syllable */ + ["\uBDEC", "\uBDEC"], /* Hangul Syllable */ + ["\uBDED", "\uBDED"], /* Hangul Syllable */ + ["\uBDEE", "\uBDEE"], /* Hangul Syllable */ + ["\uBDEF", "\uBDEF"], /* Hangul Syllable */ + ["\uBDF0", "\uBDF0"], /* Hangul Syllable */ + ["\uBDF1", "\uBDF1"], /* Hangul Syllable */ + ["\uBDF2", "\uBDF2"], /* Hangul Syllable */ + ["\uBDF3", "\uBDF3"], /* Hangul Syllable */ + ["\uBDF4", "\uBDF4"], /* Hangul Syllable */ + ["\uBDF5", "\uBDF5"], /* Hangul Syllable */ + ["\uBDF6", "\uBDF6"], /* Hangul Syllable */ + ["\uBDF7", "\uBDF7"], /* Hangul Syllable */ + ["\uBDF8", "\uBDF8"], /* Hangul Syllable */ + ["\uBDF9", "\uBDF9"], /* Hangul Syllable */ + ["\uBDFA", "\uBDFA"], /* Hangul Syllable */ + ["\uBDFB", "\uBDFB"], /* Hangul Syllable */ + ["\uBDFC", "\uBDFC"], /* Hangul Syllable */ + ["\uBDFD", "\uBDFD"], /* Hangul Syllable */ + ["\uBDFE", "\uBDFE"], /* Hangul Syllable */ + ["\uBDFF", "\uBDFF"], /* Hangul Syllable */ + ["\uBE00", "\uBE00"], /* Hangul Syllable */ + ["\uBE01", "\uBE01"], /* Hangul Syllable */ + ["\uBE02", "\uBE02"], /* Hangul Syllable */ + ["\uBE03", "\uBE03"], /* Hangul Syllable */ + ["\uBE04", "\uBE04"], /* Hangul Syllable */ + ["\uBE05", "\uBE05"], /* Hangul Syllable */ + ["\uBE06", "\uBE06"], /* Hangul Syllable */ + ["\uBE07", "\uBE07"], /* Hangul Syllable */ + ["\uBE08", "\uBE08"], /* Hangul Syllable */ + ["\uBE09", "\uBE09"], /* Hangul Syllable */ + ["\uBE0A", "\uBE0A"], /* Hangul Syllable */ + ["\uBE0B", "\uBE0B"], /* Hangul Syllable */ + ["\uBE0C", "\uBE0C"], /* Hangul Syllable */ + ["\uBE0D", "\uBE0D"], /* Hangul Syllable */ + ["\uBE0E", "\uBE0E"], /* Hangul Syllable */ + ["\uBE0F", "\uBE0F"], /* Hangul Syllable */ + ["\uBE10", "\uBE10"], /* Hangul Syllable */ + ["\uBE11", "\uBE11"], /* Hangul Syllable */ + ["\uBE12", "\uBE12"], /* Hangul Syllable */ + ["\uBE13", "\uBE13"], /* Hangul Syllable */ + ["\uBE14", "\uBE14"], /* Hangul Syllable */ + ["\uBE15", "\uBE15"], /* Hangul Syllable */ + ["\uBE16", "\uBE16"], /* Hangul Syllable */ + ["\uBE17", "\uBE17"], /* Hangul Syllable */ + ["\uBE18", "\uBE18"], /* Hangul Syllable */ + ["\uBE19", "\uBE19"], /* Hangul Syllable */ + ["\uBE1A", "\uBE1A"], /* Hangul Syllable */ + ["\uBE1B", "\uBE1B"], /* Hangul Syllable */ + ["\uBE1C", "\uBE1C"], /* Hangul Syllable */ + ["\uBE1D", "\uBE1D"], /* Hangul Syllable */ + ["\uBE1E", "\uBE1E"], /* Hangul Syllable */ + ["\uBE1F", "\uBE1F"], /* Hangul Syllable */ + ["\uBE20", "\uBE20"], /* Hangul Syllable */ + ["\uBE21", "\uBE21"], /* Hangul Syllable */ + ["\uBE22", "\uBE22"], /* Hangul Syllable */ + ["\uBE23", "\uBE23"], /* Hangul Syllable */ + ["\uBE24", "\uBE24"], /* Hangul Syllable */ + ["\uBE25", "\uBE25"], /* Hangul Syllable */ + ["\uBE26", "\uBE26"], /* Hangul Syllable */ + ["\uBE27", "\uBE27"], /* Hangul Syllable */ + ["\uBE28", "\uBE28"], /* Hangul Syllable */ + ["\uBE29", "\uBE29"], /* Hangul Syllable */ + ["\uBE2A", "\uBE2A"], /* Hangul Syllable */ + ["\uBE2B", "\uBE2B"], /* Hangul Syllable */ + ["\uBE2C", "\uBE2C"], /* Hangul Syllable */ + ["\uBE2D", "\uBE2D"], /* Hangul Syllable */ + ["\uBE2E", "\uBE2E"], /* Hangul Syllable */ + ["\uBE2F", "\uBE2F"], /* Hangul Syllable */ + ["\uBE30", "\uBE30"], /* Hangul Syllable */ + ["\uBE31", "\uBE31"], /* Hangul Syllable */ + ["\uBE32", "\uBE32"], /* Hangul Syllable */ + ["\uBE33", "\uBE33"], /* Hangul Syllable */ + ["\uBE34", "\uBE34"], /* Hangul Syllable */ + ["\uBE35", "\uBE35"], /* Hangul Syllable */ + ["\uBE36", "\uBE36"], /* Hangul Syllable */ + ["\uBE37", "\uBE37"], /* Hangul Syllable */ + ["\uBE38", "\uBE38"], /* Hangul Syllable */ + ["\uBE39", "\uBE39"], /* Hangul Syllable */ + ["\uBE3A", "\uBE3A"], /* Hangul Syllable */ + ["\uBE3B", "\uBE3B"], /* Hangul Syllable */ + ["\uBE3C", "\uBE3C"], /* Hangul Syllable */ + ["\uBE3D", "\uBE3D"], /* Hangul Syllable */ + ["\uBE3E", "\uBE3E"], /* Hangul Syllable */ + ["\uBE3F", "\uBE3F"], /* Hangul Syllable */ + ["\uBE40", "\uBE40"], /* Hangul Syllable */ + ["\uBE41", "\uBE41"], /* Hangul Syllable */ + ["\uBE42", "\uBE42"], /* Hangul Syllable */ + ["\uBE43", "\uBE43"], /* Hangul Syllable */ + ["\uBE44", "\uBE44"], /* Hangul Syllable */ + ["\uBE45", "\uBE45"], /* Hangul Syllable */ + ["\uBE46", "\uBE46"], /* Hangul Syllable */ + ["\uBE47", "\uBE47"], /* Hangul Syllable */ + ["\uBE48", "\uBE48"], /* Hangul Syllable */ + ["\uBE49", "\uBE49"], /* Hangul Syllable */ + ["\uBE4A", "\uBE4A"], /* Hangul Syllable */ + ["\uBE4B", "\uBE4B"], /* Hangul Syllable */ + ["\uBE4C", "\uBE4C"], /* Hangul Syllable */ + ["\uBE4D", "\uBE4D"], /* Hangul Syllable */ + ["\uBE4E", "\uBE4E"], /* Hangul Syllable */ + ["\uBE4F", "\uBE4F"], /* Hangul Syllable */ + ["\uBE50", "\uBE50"], /* Hangul Syllable */ + ["\uBE51", "\uBE51"], /* Hangul Syllable */ + ["\uBE52", "\uBE52"], /* Hangul Syllable */ + ["\uBE53", "\uBE53"], /* Hangul Syllable */ + ["\uBE54", "\uBE54"], /* Hangul Syllable */ + ["\uBE55", "\uBE55"], /* Hangul Syllable */ + ["\uBE56", "\uBE56"], /* Hangul Syllable */ + ["\uBE57", "\uBE57"], /* Hangul Syllable */ + ["\uBE58", "\uBE58"], /* Hangul Syllable */ + ["\uBE59", "\uBE59"], /* Hangul Syllable */ + ["\uBE5A", "\uBE5A"], /* Hangul Syllable */ + ["\uBE5B", "\uBE5B"], /* Hangul Syllable */ + ["\uBE5C", "\uBE5C"], /* Hangul Syllable */ + ["\uBE5D", "\uBE5D"], /* Hangul Syllable */ + ["\uBE5E", "\uBE5E"], /* Hangul Syllable */ + ["\uBE5F", "\uBE5F"], /* Hangul Syllable */ + ["\uBE60", "\uBE60"], /* Hangul Syllable */ + ["\uBE61", "\uBE61"], /* Hangul Syllable */ + ["\uBE62", "\uBE62"], /* Hangul Syllable */ + ["\uBE63", "\uBE63"], /* Hangul Syllable */ + ["\uBE64", "\uBE64"], /* Hangul Syllable */ + ["\uBE65", "\uBE65"], /* Hangul Syllable */ + ["\uBE66", "\uBE66"], /* Hangul Syllable */ + ["\uBE67", "\uBE67"], /* Hangul Syllable */ + ["\uBE68", "\uBE68"], /* Hangul Syllable */ + ["\uBE69", "\uBE69"], /* Hangul Syllable */ + ["\uBE6A", "\uBE6A"], /* Hangul Syllable */ + ["\uBE6B", "\uBE6B"], /* Hangul Syllable */ + ["\uBE6C", "\uBE6C"], /* Hangul Syllable */ + ["\uBE6D", "\uBE6D"], /* Hangul Syllable */ + ["\uBE6E", "\uBE6E"], /* Hangul Syllable */ + ["\uBE6F", "\uBE6F"], /* Hangul Syllable */ + ["\uBE70", "\uBE70"], /* Hangul Syllable */ + ["\uBE71", "\uBE71"], /* Hangul Syllable */ + ["\uBE72", "\uBE72"], /* Hangul Syllable */ + ["\uBE73", "\uBE73"], /* Hangul Syllable */ + ["\uBE74", "\uBE74"], /* Hangul Syllable */ + ["\uBE75", "\uBE75"], /* Hangul Syllable */ + ["\uBE76", "\uBE76"], /* Hangul Syllable */ + ["\uBE77", "\uBE77"], /* Hangul Syllable */ + ["\uBE78", "\uBE78"], /* Hangul Syllable */ + ["\uBE79", "\uBE79"], /* Hangul Syllable */ + ["\uBE7A", "\uBE7A"], /* Hangul Syllable */ + ["\uBE7B", "\uBE7B"], /* Hangul Syllable */ + ["\uBE7C", "\uBE7C"], /* Hangul Syllable */ + ["\uBE7D", "\uBE7D"], /* Hangul Syllable */ + ["\uBE7E", "\uBE7E"], /* Hangul Syllable */ + ["\uBE7F", "\uBE7F"], /* Hangul Syllable */ + ["\uBE80", "\uBE80"], /* Hangul Syllable */ + ["\uBE81", "\uBE81"], /* Hangul Syllable */ + ["\uBE82", "\uBE82"], /* Hangul Syllable */ + ["\uBE83", "\uBE83"], /* Hangul Syllable */ + ["\uBE84", "\uBE84"], /* Hangul Syllable */ + ["\uBE85", "\uBE85"], /* Hangul Syllable */ + ["\uBE86", "\uBE86"], /* Hangul Syllable */ + ["\uBE87", "\uBE87"], /* Hangul Syllable */ + ["\uBE88", "\uBE88"], /* Hangul Syllable */ + ["\uBE89", "\uBE89"], /* Hangul Syllable */ + ["\uBE8A", "\uBE8A"], /* Hangul Syllable */ + ["\uBE8B", "\uBE8B"], /* Hangul Syllable */ + ["\uBE8C", "\uBE8C"], /* Hangul Syllable */ + ["\uBE8D", "\uBE8D"], /* Hangul Syllable */ + ["\uBE8E", "\uBE8E"], /* Hangul Syllable */ + ["\uBE8F", "\uBE8F"], /* Hangul Syllable */ + ["\uBE90", "\uBE90"], /* Hangul Syllable */ + ["\uBE91", "\uBE91"], /* Hangul Syllable */ + ["\uBE92", "\uBE92"], /* Hangul Syllable */ + ["\uBE93", "\uBE93"], /* Hangul Syllable */ + ["\uBE94", "\uBE94"], /* Hangul Syllable */ + ["\uBE95", "\uBE95"], /* Hangul Syllable */ + ["\uBE96", "\uBE96"], /* Hangul Syllable */ + ["\uBE97", "\uBE97"], /* Hangul Syllable */ + ["\uBE98", "\uBE98"], /* Hangul Syllable */ + ["\uBE99", "\uBE99"], /* Hangul Syllable */ + ["\uBE9A", "\uBE9A"], /* Hangul Syllable */ + ["\uBE9B", "\uBE9B"], /* Hangul Syllable */ + ["\uBE9C", "\uBE9C"], /* Hangul Syllable */ + ["\uBE9D", "\uBE9D"], /* Hangul Syllable */ + ["\uBE9E", "\uBE9E"], /* Hangul Syllable */ + ["\uBE9F", "\uBE9F"], /* Hangul Syllable */ + ["\uBEA0", "\uBEA0"], /* Hangul Syllable */ + ["\uBEA1", "\uBEA1"], /* Hangul Syllable */ + ["\uBEA2", "\uBEA2"], /* Hangul Syllable */ + ["\uBEA3", "\uBEA3"], /* Hangul Syllable */ + ["\uBEA4", "\uBEA4"], /* Hangul Syllable */ + ["\uBEA5", "\uBEA5"], /* Hangul Syllable */ + ["\uBEA6", "\uBEA6"], /* Hangul Syllable */ + ["\uBEA7", "\uBEA7"], /* Hangul Syllable */ + ["\uBEA8", "\uBEA8"], /* Hangul Syllable */ + ["\uBEA9", "\uBEA9"], /* Hangul Syllable */ + ["\uBEAA", "\uBEAA"], /* Hangul Syllable */ + ["\uBEAB", "\uBEAB"], /* Hangul Syllable */ + ["\uBEAC", "\uBEAC"], /* Hangul Syllable */ + ["\uBEAD", "\uBEAD"], /* Hangul Syllable */ + ["\uBEAE", "\uBEAE"], /* Hangul Syllable */ + ["\uBEAF", "\uBEAF"], /* Hangul Syllable */ + ["\uBEB0", "\uBEB0"], /* Hangul Syllable */ + ["\uBEB1", "\uBEB1"], /* Hangul Syllable */ + ["\uBEB2", "\uBEB2"], /* Hangul Syllable */ + ["\uBEB3", "\uBEB3"], /* Hangul Syllable */ + ["\uBEB4", "\uBEB4"], /* Hangul Syllable */ + ["\uBEB5", "\uBEB5"], /* Hangul Syllable */ + ["\uBEB6", "\uBEB6"], /* Hangul Syllable */ + ["\uBEB7", "\uBEB7"], /* Hangul Syllable */ + ["\uBEB8", "\uBEB8"], /* Hangul Syllable */ + ["\uBEB9", "\uBEB9"], /* Hangul Syllable */ + ["\uBEBA", "\uBEBA"], /* Hangul Syllable */ + ["\uBEBB", "\uBEBB"], /* Hangul Syllable */ + ["\uBEBC", "\uBEBC"], /* Hangul Syllable */ + ["\uBEBD", "\uBEBD"], /* Hangul Syllable */ + ["\uBEBE", "\uBEBE"], /* Hangul Syllable */ + ["\uBEBF", "\uBEBF"], /* Hangul Syllable */ + ["\uBEC0", "\uBEC0"], /* Hangul Syllable */ + ["\uBEC1", "\uBEC1"], /* Hangul Syllable */ + ["\uBEC2", "\uBEC2"], /* Hangul Syllable */ + ["\uBEC3", "\uBEC3"], /* Hangul Syllable */ + ["\uBEC4", "\uBEC4"], /* Hangul Syllable */ + ["\uBEC5", "\uBEC5"], /* Hangul Syllable */ + ["\uBEC6", "\uBEC6"], /* Hangul Syllable */ + ["\uBEC7", "\uBEC7"], /* Hangul Syllable */ + ["\uBEC8", "\uBEC8"], /* Hangul Syllable */ + ["\uBEC9", "\uBEC9"], /* Hangul Syllable */ + ["\uBECA", "\uBECA"], /* Hangul Syllable */ + ["\uBECB", "\uBECB"], /* Hangul Syllable */ + ["\uBECC", "\uBECC"], /* Hangul Syllable */ + ["\uBECD", "\uBECD"], /* Hangul Syllable */ + ["\uBECE", "\uBECE"], /* Hangul Syllable */ + ["\uBECF", "\uBECF"], /* Hangul Syllable */ + ["\uBED0", "\uBED0"], /* Hangul Syllable */ + ["\uBED1", "\uBED1"], /* Hangul Syllable */ + ["\uBED2", "\uBED2"], /* Hangul Syllable */ + ["\uBED3", "\uBED3"], /* Hangul Syllable */ + ["\uBED4", "\uBED4"], /* Hangul Syllable */ + ["\uBED5", "\uBED5"], /* Hangul Syllable */ + ["\uBED6", "\uBED6"], /* Hangul Syllable */ + ["\uBED7", "\uBED7"], /* Hangul Syllable */ + ["\uBED8", "\uBED8"], /* Hangul Syllable */ + ["\uBED9", "\uBED9"], /* Hangul Syllable */ + ["\uBEDA", "\uBEDA"], /* Hangul Syllable */ + ["\uBEDB", "\uBEDB"], /* Hangul Syllable */ + ["\uBEDC", "\uBEDC"], /* Hangul Syllable */ + ["\uBEDD", "\uBEDD"], /* Hangul Syllable */ + ["\uBEDE", "\uBEDE"], /* Hangul Syllable */ + ["\uBEDF", "\uBEDF"], /* Hangul Syllable */ + ["\uBEE0", "\uBEE0"], /* Hangul Syllable */ + ["\uBEE1", "\uBEE1"], /* Hangul Syllable */ + ["\uBEE2", "\uBEE2"], /* Hangul Syllable */ + ["\uBEE3", "\uBEE3"], /* Hangul Syllable */ + ["\uBEE4", "\uBEE4"], /* Hangul Syllable */ + ["\uBEE5", "\uBEE5"], /* Hangul Syllable */ + ["\uBEE6", "\uBEE6"], /* Hangul Syllable */ + ["\uBEE7", "\uBEE7"], /* Hangul Syllable */ + ["\uBEE8", "\uBEE8"], /* Hangul Syllable */ + ["\uBEE9", "\uBEE9"], /* Hangul Syllable */ + ["\uBEEA", "\uBEEA"], /* Hangul Syllable */ + ["\uBEEB", "\uBEEB"], /* Hangul Syllable */ + ["\uBEEC", "\uBEEC"], /* Hangul Syllable */ + ["\uBEED", "\uBEED"], /* Hangul Syllable */ + ["\uBEEE", "\uBEEE"], /* Hangul Syllable */ + ["\uBEEF", "\uBEEF"], /* Hangul Syllable */ + ["\uBEF0", "\uBEF0"], /* Hangul Syllable */ + ["\uBEF1", "\uBEF1"], /* Hangul Syllable */ + ["\uBEF2", "\uBEF2"], /* Hangul Syllable */ + ["\uBEF3", "\uBEF3"], /* Hangul Syllable */ + ["\uBEF4", "\uBEF4"], /* Hangul Syllable */ + ["\uBEF5", "\uBEF5"], /* Hangul Syllable */ + ["\uBEF6", "\uBEF6"], /* Hangul Syllable */ + ["\uBEF7", "\uBEF7"], /* Hangul Syllable */ + ["\uBEF8", "\uBEF8"], /* Hangul Syllable */ + ["\uBEF9", "\uBEF9"], /* Hangul Syllable */ + ["\uBEFA", "\uBEFA"], /* Hangul Syllable */ + ["\uBEFB", "\uBEFB"], /* Hangul Syllable */ + ["\uBEFC", "\uBEFC"], /* Hangul Syllable */ + ["\uBEFD", "\uBEFD"], /* Hangul Syllable */ + ["\uBEFE", "\uBEFE"], /* Hangul Syllable */ + ["\uBEFF", "\uBEFF"], /* Hangul Syllable */ + ["\uBF00", "\uBF00"], /* Hangul Syllable */ + ["\uBF01", "\uBF01"], /* Hangul Syllable */ + ["\uBF02", "\uBF02"], /* Hangul Syllable */ + ["\uBF03", "\uBF03"], /* Hangul Syllable */ + ["\uBF04", "\uBF04"], /* Hangul Syllable */ + ["\uBF05", "\uBF05"], /* Hangul Syllable */ + ["\uBF06", "\uBF06"], /* Hangul Syllable */ + ["\uBF07", "\uBF07"], /* Hangul Syllable */ + ["\uBF08", "\uBF08"], /* Hangul Syllable */ + ["\uBF09", "\uBF09"], /* Hangul Syllable */ + ["\uBF0A", "\uBF0A"], /* Hangul Syllable */ + ["\uBF0B", "\uBF0B"], /* Hangul Syllable */ + ["\uBF0C", "\uBF0C"], /* Hangul Syllable */ + ["\uBF0D", "\uBF0D"], /* Hangul Syllable */ + ["\uBF0E", "\uBF0E"], /* Hangul Syllable */ + ["\uBF0F", "\uBF0F"], /* Hangul Syllable */ + ["\uBF10", "\uBF10"], /* Hangul Syllable */ + ["\uBF11", "\uBF11"], /* Hangul Syllable */ + ["\uBF12", "\uBF12"], /* Hangul Syllable */ + ["\uBF13", "\uBF13"], /* Hangul Syllable */ + ["\uBF14", "\uBF14"], /* Hangul Syllable */ + ["\uBF15", "\uBF15"], /* Hangul Syllable */ + ["\uBF16", "\uBF16"], /* Hangul Syllable */ + ["\uBF17", "\uBF17"], /* Hangul Syllable */ + ["\uBF18", "\uBF18"], /* Hangul Syllable */ + ["\uBF19", "\uBF19"], /* Hangul Syllable */ + ["\uBF1A", "\uBF1A"], /* Hangul Syllable */ + ["\uBF1B", "\uBF1B"], /* Hangul Syllable */ + ["\uBF1C", "\uBF1C"], /* Hangul Syllable */ + ["\uBF1D", "\uBF1D"], /* Hangul Syllable */ + ["\uBF1E", "\uBF1E"], /* Hangul Syllable */ + ["\uBF1F", "\uBF1F"], /* Hangul Syllable */ + ["\uBF20", "\uBF20"], /* Hangul Syllable */ + ["\uBF21", "\uBF21"], /* Hangul Syllable */ + ["\uBF22", "\uBF22"], /* Hangul Syllable */ + ["\uBF23", "\uBF23"], /* Hangul Syllable */ + ["\uBF24", "\uBF24"], /* Hangul Syllable */ + ["\uBF25", "\uBF25"], /* Hangul Syllable */ + ["\uBF26", "\uBF26"], /* Hangul Syllable */ + ["\uBF27", "\uBF27"], /* Hangul Syllable */ + ["\uBF28", "\uBF28"], /* Hangul Syllable */ + ["\uBF29", "\uBF29"], /* Hangul Syllable */ + ["\uBF2A", "\uBF2A"], /* Hangul Syllable */ + ["\uBF2B", "\uBF2B"], /* Hangul Syllable */ + ["\uBF2C", "\uBF2C"], /* Hangul Syllable */ + ["\uBF2D", "\uBF2D"], /* Hangul Syllable */ + ["\uBF2E", "\uBF2E"], /* Hangul Syllable */ + ["\uBF2F", "\uBF2F"], /* Hangul Syllable */ + ["\uBF30", "\uBF30"], /* Hangul Syllable */ + ["\uBF31", "\uBF31"], /* Hangul Syllable */ + ["\uBF32", "\uBF32"], /* Hangul Syllable */ + ["\uBF33", "\uBF33"], /* Hangul Syllable */ + ["\uBF34", "\uBF34"], /* Hangul Syllable */ + ["\uBF35", "\uBF35"], /* Hangul Syllable */ + ["\uBF36", "\uBF36"], /* Hangul Syllable */ + ["\uBF37", "\uBF37"], /* Hangul Syllable */ + ["\uBF38", "\uBF38"], /* Hangul Syllable */ + ["\uBF39", "\uBF39"], /* Hangul Syllable */ + ["\uBF3A", "\uBF3A"], /* Hangul Syllable */ + ["\uBF3B", "\uBF3B"], /* Hangul Syllable */ + ["\uBF3C", "\uBF3C"], /* Hangul Syllable */ + ["\uBF3D", "\uBF3D"], /* Hangul Syllable */ + ["\uBF3E", "\uBF3E"], /* Hangul Syllable */ + ["\uBF3F", "\uBF3F"], /* Hangul Syllable */ + ["\uBF40", "\uBF40"], /* Hangul Syllable */ + ["\uBF41", "\uBF41"], /* Hangul Syllable */ + ["\uBF42", "\uBF42"], /* Hangul Syllable */ + ["\uBF43", "\uBF43"], /* Hangul Syllable */ + ["\uBF44", "\uBF44"], /* Hangul Syllable */ + ["\uBF45", "\uBF45"], /* Hangul Syllable */ + ["\uBF46", "\uBF46"], /* Hangul Syllable */ + ["\uBF47", "\uBF47"], /* Hangul Syllable */ + ["\uBF48", "\uBF48"], /* Hangul Syllable */ + ["\uBF49", "\uBF49"], /* Hangul Syllable */ + ["\uBF4A", "\uBF4A"], /* Hangul Syllable */ + ["\uBF4B", "\uBF4B"], /* Hangul Syllable */ + ["\uBF4C", "\uBF4C"], /* Hangul Syllable */ + ["\uBF4D", "\uBF4D"], /* Hangul Syllable */ + ["\uBF4E", "\uBF4E"], /* Hangul Syllable */ + ["\uBF4F", "\uBF4F"], /* Hangul Syllable */ + ["\uBF50", "\uBF50"], /* Hangul Syllable */ + ["\uBF51", "\uBF51"], /* Hangul Syllable */ + ["\uBF52", "\uBF52"], /* Hangul Syllable */ + ["\uBF53", "\uBF53"], /* Hangul Syllable */ + ["\uBF54", "\uBF54"], /* Hangul Syllable */ + ["\uBF55", "\uBF55"], /* Hangul Syllable */ + ["\uBF56", "\uBF56"], /* Hangul Syllable */ + ["\uBF57", "\uBF57"], /* Hangul Syllable */ + ["\uBF58", "\uBF58"], /* Hangul Syllable */ + ["\uBF59", "\uBF59"], /* Hangul Syllable */ + ["\uBF5A", "\uBF5A"], /* Hangul Syllable */ + ["\uBF5B", "\uBF5B"], /* Hangul Syllable */ + ["\uBF5C", "\uBF5C"], /* Hangul Syllable */ + ["\uBF5D", "\uBF5D"], /* Hangul Syllable */ + ["\uBF5E", "\uBF5E"], /* Hangul Syllable */ + ["\uBF5F", "\uBF5F"], /* Hangul Syllable */ + ["\uBF60", "\uBF60"], /* Hangul Syllable */ + ["\uBF61", "\uBF61"], /* Hangul Syllable */ + ["\uBF62", "\uBF62"], /* Hangul Syllable */ + ["\uBF63", "\uBF63"], /* Hangul Syllable */ + ["\uBF64", "\uBF64"], /* Hangul Syllable */ + ["\uBF65", "\uBF65"], /* Hangul Syllable */ + ["\uBF66", "\uBF66"], /* Hangul Syllable */ + ["\uBF67", "\uBF67"], /* Hangul Syllable */ + ["\uBF68", "\uBF68"], /* Hangul Syllable */ + ["\uBF69", "\uBF69"], /* Hangul Syllable */ + ["\uBF6A", "\uBF6A"], /* Hangul Syllable */ + ["\uBF6B", "\uBF6B"], /* Hangul Syllable */ + ["\uBF6C", "\uBF6C"], /* Hangul Syllable */ + ["\uBF6D", "\uBF6D"], /* Hangul Syllable */ + ["\uBF6E", "\uBF6E"], /* Hangul Syllable */ + ["\uBF6F", "\uBF6F"], /* Hangul Syllable */ + ["\uBF70", "\uBF70"], /* Hangul Syllable */ + ["\uBF71", "\uBF71"], /* Hangul Syllable */ + ["\uBF72", "\uBF72"], /* Hangul Syllable */ + ["\uBF73", "\uBF73"], /* Hangul Syllable */ + ["\uBF74", "\uBF74"], /* Hangul Syllable */ + ["\uBF75", "\uBF75"], /* Hangul Syllable */ + ["\uBF76", "\uBF76"], /* Hangul Syllable */ + ["\uBF77", "\uBF77"], /* Hangul Syllable */ + ["\uBF78", "\uBF78"], /* Hangul Syllable */ + ["\uBF79", "\uBF79"], /* Hangul Syllable */ + ["\uBF7A", "\uBF7A"], /* Hangul Syllable */ + ["\uBF7B", "\uBF7B"], /* Hangul Syllable */ + ["\uBF7C", "\uBF7C"], /* Hangul Syllable */ + ["\uBF7D", "\uBF7D"], /* Hangul Syllable */ + ["\uBF7E", "\uBF7E"], /* Hangul Syllable */ + ["\uBF7F", "\uBF7F"], /* Hangul Syllable */ + ["\uBF80", "\uBF80"], /* Hangul Syllable */ + ["\uBF81", "\uBF81"], /* Hangul Syllable */ + ["\uBF82", "\uBF82"], /* Hangul Syllable */ + ["\uBF83", "\uBF83"], /* Hangul Syllable */ + ["\uBF84", "\uBF84"], /* Hangul Syllable */ + ["\uBF85", "\uBF85"], /* Hangul Syllable */ + ["\uBF86", "\uBF86"], /* Hangul Syllable */ + ["\uBF87", "\uBF87"], /* Hangul Syllable */ + ["\uBF88", "\uBF88"], /* Hangul Syllable */ + ["\uBF89", "\uBF89"], /* Hangul Syllable */ + ["\uBF8A", "\uBF8A"], /* Hangul Syllable */ + ["\uBF8B", "\uBF8B"], /* Hangul Syllable */ + ["\uBF8C", "\uBF8C"], /* Hangul Syllable */ + ["\uBF8D", "\uBF8D"], /* Hangul Syllable */ + ["\uBF8E", "\uBF8E"], /* Hangul Syllable */ + ["\uBF8F", "\uBF8F"], /* Hangul Syllable */ + ["\uBF90", "\uBF90"], /* Hangul Syllable */ + ["\uBF91", "\uBF91"], /* Hangul Syllable */ + ["\uBF92", "\uBF92"], /* Hangul Syllable */ + ["\uBF93", "\uBF93"], /* Hangul Syllable */ + ["\uBF94", "\uBF94"], /* Hangul Syllable */ + ["\uBF95", "\uBF95"], /* Hangul Syllable */ + ["\uBF96", "\uBF96"], /* Hangul Syllable */ + ["\uBF97", "\uBF97"], /* Hangul Syllable */ + ["\uBF98", "\uBF98"], /* Hangul Syllable */ + ["\uBF99", "\uBF99"], /* Hangul Syllable */ + ["\uBF9A", "\uBF9A"], /* Hangul Syllable */ + ["\uBF9B", "\uBF9B"], /* Hangul Syllable */ + ["\uBF9C", "\uBF9C"], /* Hangul Syllable */ + ["\uBF9D", "\uBF9D"], /* Hangul Syllable */ + ["\uBF9E", "\uBF9E"], /* Hangul Syllable */ + ["\uBF9F", "\uBF9F"], /* Hangul Syllable */ + ["\uBFA0", "\uBFA0"], /* Hangul Syllable */ + ["\uBFA1", "\uBFA1"], /* Hangul Syllable */ + ["\uBFA2", "\uBFA2"], /* Hangul Syllable */ + ["\uBFA3", "\uBFA3"], /* Hangul Syllable */ + ["\uBFA4", "\uBFA4"], /* Hangul Syllable */ + ["\uBFA5", "\uBFA5"], /* Hangul Syllable */ + ["\uBFA6", "\uBFA6"], /* Hangul Syllable */ + ["\uBFA7", "\uBFA7"], /* Hangul Syllable */ + ["\uBFA8", "\uBFA8"], /* Hangul Syllable */ + ["\uBFA9", "\uBFA9"], /* Hangul Syllable */ + ["\uBFAA", "\uBFAA"], /* Hangul Syllable */ + ["\uBFAB", "\uBFAB"], /* Hangul Syllable */ + ["\uBFAC", "\uBFAC"], /* Hangul Syllable */ + ["\uBFAD", "\uBFAD"], /* Hangul Syllable */ + ["\uBFAE", "\uBFAE"], /* Hangul Syllable */ + ["\uBFAF", "\uBFAF"], /* Hangul Syllable */ + ["\uBFB0", "\uBFB0"], /* Hangul Syllable */ + ["\uBFB1", "\uBFB1"], /* Hangul Syllable */ + ["\uBFB2", "\uBFB2"], /* Hangul Syllable */ + ["\uBFB3", "\uBFB3"], /* Hangul Syllable */ + ["\uBFB4", "\uBFB4"], /* Hangul Syllable */ + ["\uBFB5", "\uBFB5"], /* Hangul Syllable */ + ["\uBFB6", "\uBFB6"], /* Hangul Syllable */ + ["\uBFB7", "\uBFB7"], /* Hangul Syllable */ + ["\uBFB8", "\uBFB8"], /* Hangul Syllable */ + ["\uBFB9", "\uBFB9"], /* Hangul Syllable */ + ["\uBFBA", "\uBFBA"], /* Hangul Syllable */ + ["\uBFBB", "\uBFBB"], /* Hangul Syllable */ + ["\uBFBC", "\uBFBC"], /* Hangul Syllable */ + ["\uBFBD", "\uBFBD"], /* Hangul Syllable */ + ["\uBFBE", "\uBFBE"], /* Hangul Syllable */ + ["\uBFBF", "\uBFBF"], /* Hangul Syllable */ + ["\uBFC0", "\uBFC0"], /* Hangul Syllable */ + ["\uBFC1", "\uBFC1"], /* Hangul Syllable */ + ["\uBFC2", "\uBFC2"], /* Hangul Syllable */ + ["\uBFC3", "\uBFC3"], /* Hangul Syllable */ + ["\uBFC4", "\uBFC4"], /* Hangul Syllable */ + ["\uBFC5", "\uBFC5"], /* Hangul Syllable */ + ["\uBFC6", "\uBFC6"], /* Hangul Syllable */ + ["\uBFC7", "\uBFC7"], /* Hangul Syllable */ + ["\uBFC8", "\uBFC8"], /* Hangul Syllable */ + ["\uBFC9", "\uBFC9"], /* Hangul Syllable */ + ["\uBFCA", "\uBFCA"], /* Hangul Syllable */ + ["\uBFCB", "\uBFCB"], /* Hangul Syllable */ + ["\uBFCC", "\uBFCC"], /* Hangul Syllable */ + ["\uBFCD", "\uBFCD"], /* Hangul Syllable */ + ["\uBFCE", "\uBFCE"], /* Hangul Syllable */ + ["\uBFCF", "\uBFCF"], /* Hangul Syllable */ + ["\uBFD0", "\uBFD0"], /* Hangul Syllable */ + ["\uBFD1", "\uBFD1"], /* Hangul Syllable */ + ["\uBFD2", "\uBFD2"], /* Hangul Syllable */ + ["\uBFD3", "\uBFD3"], /* Hangul Syllable */ + ["\uBFD4", "\uBFD4"], /* Hangul Syllable */ + ["\uBFD5", "\uBFD5"], /* Hangul Syllable */ + ["\uBFD6", "\uBFD6"], /* Hangul Syllable */ + ["\uBFD7", "\uBFD7"], /* Hangul Syllable */ + ["\uBFD8", "\uBFD8"], /* Hangul Syllable */ + ["\uBFD9", "\uBFD9"], /* Hangul Syllable */ + ["\uBFDA", "\uBFDA"], /* Hangul Syllable */ + ["\uBFDB", "\uBFDB"], /* Hangul Syllable */ + ["\uBFDC", "\uBFDC"], /* Hangul Syllable */ + ["\uBFDD", "\uBFDD"], /* Hangul Syllable */ + ["\uBFDE", "\uBFDE"], /* Hangul Syllable */ + ["\uBFDF", "\uBFDF"], /* Hangul Syllable */ + ["\uBFE0", "\uBFE0"], /* Hangul Syllable */ + ["\uBFE1", "\uBFE1"], /* Hangul Syllable */ + ["\uBFE2", "\uBFE2"], /* Hangul Syllable */ + ["\uBFE3", "\uBFE3"], /* Hangul Syllable */ + ["\uBFE4", "\uBFE4"], /* Hangul Syllable */ + ["\uBFE5", "\uBFE5"], /* Hangul Syllable */ + ["\uBFE6", "\uBFE6"], /* Hangul Syllable */ + ["\uBFE7", "\uBFE7"], /* Hangul Syllable */ + ["\uBFE8", "\uBFE8"], /* Hangul Syllable */ + ["\uBFE9", "\uBFE9"], /* Hangul Syllable */ + ["\uBFEA", "\uBFEA"], /* Hangul Syllable */ + ["\uBFEB", "\uBFEB"], /* Hangul Syllable */ + ["\uBFEC", "\uBFEC"], /* Hangul Syllable */ + ["\uBFED", "\uBFED"], /* Hangul Syllable */ + ["\uBFEE", "\uBFEE"], /* Hangul Syllable */ + ["\uBFEF", "\uBFEF"], /* Hangul Syllable */ + ["\uBFF0", "\uBFF0"], /* Hangul Syllable */ + ["\uBFF1", "\uBFF1"], /* Hangul Syllable */ + ["\uBFF2", "\uBFF2"], /* Hangul Syllable */ + ["\uBFF3", "\uBFF3"], /* Hangul Syllable */ + ["\uBFF4", "\uBFF4"], /* Hangul Syllable */ + ["\uBFF5", "\uBFF5"], /* Hangul Syllable */ + ["\uBFF6", "\uBFF6"], /* Hangul Syllable */ + ["\uBFF7", "\uBFF7"], /* Hangul Syllable */ + ["\uBFF8", "\uBFF8"], /* Hangul Syllable */ + ["\uBFF9", "\uBFF9"], /* Hangul Syllable */ + ["\uBFFA", "\uBFFA"], /* Hangul Syllable */ + ["\uBFFB", "\uBFFB"], /* Hangul Syllable */ + ["\uBFFC", "\uBFFC"], /* Hangul Syllable */ + ["\uBFFD", "\uBFFD"], /* Hangul Syllable */ + ["\uBFFE", "\uBFFE"], /* Hangul Syllable */ + ["\uBFFF", "\uBFFF"], /* Hangul Syllable */ + ["\uC000", "\uC000"], /* Hangul Syllable */ + ["\uC001", "\uC001"], /* Hangul Syllable */ + ["\uC002", "\uC002"], /* Hangul Syllable */ + ["\uC003", "\uC003"], /* Hangul Syllable */ + ["\uC004", "\uC004"], /* Hangul Syllable */ + ["\uC005", "\uC005"], /* Hangul Syllable */ + ["\uC006", "\uC006"], /* Hangul Syllable */ + ["\uC007", "\uC007"], /* Hangul Syllable */ + ["\uC008", "\uC008"], /* Hangul Syllable */ + ["\uC009", "\uC009"], /* Hangul Syllable */ + ["\uC00A", "\uC00A"], /* Hangul Syllable */ + ["\uC00B", "\uC00B"], /* Hangul Syllable */ + ["\uC00C", "\uC00C"], /* Hangul Syllable */ + ["\uC00D", "\uC00D"], /* Hangul Syllable */ + ["\uC00E", "\uC00E"], /* Hangul Syllable */ + ["\uC00F", "\uC00F"], /* Hangul Syllable */ + ["\uC010", "\uC010"], /* Hangul Syllable */ + ["\uC011", "\uC011"], /* Hangul Syllable */ + ["\uC012", "\uC012"], /* Hangul Syllable */ + ["\uC013", "\uC013"], /* Hangul Syllable */ + ["\uC014", "\uC014"], /* Hangul Syllable */ + ["\uC015", "\uC015"], /* Hangul Syllable */ + ["\uC016", "\uC016"], /* Hangul Syllable */ + ["\uC017", "\uC017"], /* Hangul Syllable */ + ["\uC018", "\uC018"], /* Hangul Syllable */ + ["\uC019", "\uC019"], /* Hangul Syllable */ + ["\uC01A", "\uC01A"], /* Hangul Syllable */ + ["\uC01B", "\uC01B"], /* Hangul Syllable */ + ["\uC01C", "\uC01C"], /* Hangul Syllable */ + ["\uC01D", "\uC01D"], /* Hangul Syllable */ + ["\uC01E", "\uC01E"], /* Hangul Syllable */ + ["\uC01F", "\uC01F"], /* Hangul Syllable */ + ["\uC020", "\uC020"], /* Hangul Syllable */ + ["\uC021", "\uC021"], /* Hangul Syllable */ + ["\uC022", "\uC022"], /* Hangul Syllable */ + ["\uC023", "\uC023"], /* Hangul Syllable */ + ["\uC024", "\uC024"], /* Hangul Syllable */ + ["\uC025", "\uC025"], /* Hangul Syllable */ + ["\uC026", "\uC026"], /* Hangul Syllable */ + ["\uC027", "\uC027"], /* Hangul Syllable */ + ["\uC028", "\uC028"], /* Hangul Syllable */ + ["\uC029", "\uC029"], /* Hangul Syllable */ + ["\uC02A", "\uC02A"], /* Hangul Syllable */ + ["\uC02B", "\uC02B"], /* Hangul Syllable */ + ["\uC02C", "\uC02C"], /* Hangul Syllable */ + ["\uC02D", "\uC02D"], /* Hangul Syllable */ + ["\uC02E", "\uC02E"], /* Hangul Syllable */ + ["\uC02F", "\uC02F"], /* Hangul Syllable */ + ["\uC030", "\uC030"], /* Hangul Syllable */ + ["\uC031", "\uC031"], /* Hangul Syllable */ + ["\uC032", "\uC032"], /* Hangul Syllable */ + ["\uC033", "\uC033"], /* Hangul Syllable */ + ["\uC034", "\uC034"], /* Hangul Syllable */ + ["\uC035", "\uC035"], /* Hangul Syllable */ + ["\uC036", "\uC036"], /* Hangul Syllable */ + ["\uC037", "\uC037"], /* Hangul Syllable */ + ["\uC038", "\uC038"], /* Hangul Syllable */ + ["\uC039", "\uC039"], /* Hangul Syllable */ + ["\uC03A", "\uC03A"], /* Hangul Syllable */ + ["\uC03B", "\uC03B"], /* Hangul Syllable */ + ["\uC03C", "\uC03C"], /* Hangul Syllable */ + ["\uC03D", "\uC03D"], /* Hangul Syllable */ + ["\uC03E", "\uC03E"], /* Hangul Syllable */ + ["\uC03F", "\uC03F"], /* Hangul Syllable */ + ["\uC040", "\uC040"], /* Hangul Syllable */ + ["\uC041", "\uC041"], /* Hangul Syllable */ + ["\uC042", "\uC042"], /* Hangul Syllable */ + ["\uC043", "\uC043"], /* Hangul Syllable */ + ["\uC044", "\uC044"], /* Hangul Syllable */ + ["\uC045", "\uC045"], /* Hangul Syllable */ + ["\uC046", "\uC046"], /* Hangul Syllable */ + ["\uC047", "\uC047"], /* Hangul Syllable */ + ["\uC048", "\uC048"], /* Hangul Syllable */ + ["\uC049", "\uC049"], /* Hangul Syllable */ + ["\uC04A", "\uC04A"], /* Hangul Syllable */ + ["\uC04B", "\uC04B"], /* Hangul Syllable */ + ["\uC04C", "\uC04C"], /* Hangul Syllable */ + ["\uC04D", "\uC04D"], /* Hangul Syllable */ + ["\uC04E", "\uC04E"], /* Hangul Syllable */ + ["\uC04F", "\uC04F"], /* Hangul Syllable */ + ["\uC050", "\uC050"], /* Hangul Syllable */ + ["\uC051", "\uC051"], /* Hangul Syllable */ + ["\uC052", "\uC052"], /* Hangul Syllable */ + ["\uC053", "\uC053"], /* Hangul Syllable */ + ["\uC054", "\uC054"], /* Hangul Syllable */ + ["\uC055", "\uC055"], /* Hangul Syllable */ + ["\uC056", "\uC056"], /* Hangul Syllable */ + ["\uC057", "\uC057"], /* Hangul Syllable */ + ["\uC058", "\uC058"], /* Hangul Syllable */ + ["\uC059", "\uC059"], /* Hangul Syllable */ + ["\uC05A", "\uC05A"], /* Hangul Syllable */ + ["\uC05B", "\uC05B"], /* Hangul Syllable */ + ["\uC05C", "\uC05C"], /* Hangul Syllable */ + ["\uC05D", "\uC05D"], /* Hangul Syllable */ + ["\uC05E", "\uC05E"], /* Hangul Syllable */ + ["\uC05F", "\uC05F"], /* Hangul Syllable */ + ["\uC060", "\uC060"], /* Hangul Syllable */ + ["\uC061", "\uC061"], /* Hangul Syllable */ + ["\uC062", "\uC062"], /* Hangul Syllable */ + ["\uC063", "\uC063"], /* Hangul Syllable */ + ["\uC064", "\uC064"], /* Hangul Syllable */ + ["\uC065", "\uC065"], /* Hangul Syllable */ + ["\uC066", "\uC066"], /* Hangul Syllable */ + ["\uC067", "\uC067"], /* Hangul Syllable */ + ["\uC068", "\uC068"], /* Hangul Syllable */ + ["\uC069", "\uC069"], /* Hangul Syllable */ + ["\uC06A", "\uC06A"], /* Hangul Syllable */ + ["\uC06B", "\uC06B"], /* Hangul Syllable */ + ["\uC06C", "\uC06C"], /* Hangul Syllable */ + ["\uC06D", "\uC06D"], /* Hangul Syllable */ + ["\uC06E", "\uC06E"], /* Hangul Syllable */ + ["\uC06F", "\uC06F"], /* Hangul Syllable */ + ["\uC070", "\uC070"], /* Hangul Syllable */ + ["\uC071", "\uC071"], /* Hangul Syllable */ + ["\uC072", "\uC072"], /* Hangul Syllable */ + ["\uC073", "\uC073"], /* Hangul Syllable */ + ["\uC074", "\uC074"], /* Hangul Syllable */ + ["\uC075", "\uC075"], /* Hangul Syllable */ + ["\uC076", "\uC076"], /* Hangul Syllable */ + ["\uC077", "\uC077"], /* Hangul Syllable */ + ["\uC078", "\uC078"], /* Hangul Syllable */ + ["\uC079", "\uC079"], /* Hangul Syllable */ + ["\uC07A", "\uC07A"], /* Hangul Syllable */ + ["\uC07B", "\uC07B"], /* Hangul Syllable */ + ["\uC07C", "\uC07C"], /* Hangul Syllable */ + ["\uC07D", "\uC07D"], /* Hangul Syllable */ + ["\uC07E", "\uC07E"], /* Hangul Syllable */ + ["\uC07F", "\uC07F"], /* Hangul Syllable */ + ["\uC080", "\uC080"], /* Hangul Syllable */ + ["\uC081", "\uC081"], /* Hangul Syllable */ + ["\uC082", "\uC082"], /* Hangul Syllable */ + ["\uC083", "\uC083"], /* Hangul Syllable */ + ["\uC084", "\uC084"], /* Hangul Syllable */ + ["\uC085", "\uC085"], /* Hangul Syllable */ + ["\uC086", "\uC086"], /* Hangul Syllable */ + ["\uC087", "\uC087"], /* Hangul Syllable */ + ["\uC088", "\uC088"], /* Hangul Syllable */ + ["\uC089", "\uC089"], /* Hangul Syllable */ + ["\uC08A", "\uC08A"], /* Hangul Syllable */ + ["\uC08B", "\uC08B"], /* Hangul Syllable */ + ["\uC08C", "\uC08C"], /* Hangul Syllable */ + ["\uC08D", "\uC08D"], /* Hangul Syllable */ + ["\uC08E", "\uC08E"], /* Hangul Syllable */ + ["\uC08F", "\uC08F"], /* Hangul Syllable */ + ["\uC090", "\uC090"], /* Hangul Syllable */ + ["\uC091", "\uC091"], /* Hangul Syllable */ + ["\uC092", "\uC092"], /* Hangul Syllable */ + ["\uC093", "\uC093"], /* Hangul Syllable */ + ["\uC094", "\uC094"], /* Hangul Syllable */ + ["\uC095", "\uC095"], /* Hangul Syllable */ + ["\uC096", "\uC096"], /* Hangul Syllable */ + ["\uC097", "\uC097"], /* Hangul Syllable */ + ["\uC098", "\uC098"], /* Hangul Syllable */ + ["\uC099", "\uC099"], /* Hangul Syllable */ + ["\uC09A", "\uC09A"], /* Hangul Syllable */ + ["\uC09B", "\uC09B"], /* Hangul Syllable */ + ["\uC09C", "\uC09C"], /* Hangul Syllable */ + ["\uC09D", "\uC09D"], /* Hangul Syllable */ + ["\uC09E", "\uC09E"], /* Hangul Syllable */ + ["\uC09F", "\uC09F"], /* Hangul Syllable */ + ["\uC0A0", "\uC0A0"], /* Hangul Syllable */ + ["\uC0A1", "\uC0A1"], /* Hangul Syllable */ + ["\uC0A2", "\uC0A2"], /* Hangul Syllable */ + ["\uC0A3", "\uC0A3"], /* Hangul Syllable */ + ["\uC0A4", "\uC0A4"], /* Hangul Syllable */ + ["\uC0A5", "\uC0A5"], /* Hangul Syllable */ + ["\uC0A6", "\uC0A6"], /* Hangul Syllable */ + ["\uC0A7", "\uC0A7"], /* Hangul Syllable */ + ["\uC0A8", "\uC0A8"], /* Hangul Syllable */ + ["\uC0A9", "\uC0A9"], /* Hangul Syllable */ + ["\uC0AA", "\uC0AA"], /* Hangul Syllable */ + ["\uC0AB", "\uC0AB"], /* Hangul Syllable */ + ["\uC0AC", "\uC0AC"], /* Hangul Syllable */ + ["\uC0AD", "\uC0AD"], /* Hangul Syllable */ + ["\uC0AE", "\uC0AE"], /* Hangul Syllable */ + ["\uC0AF", "\uC0AF"], /* Hangul Syllable */ + ["\uC0B0", "\uC0B0"], /* Hangul Syllable */ + ["\uC0B1", "\uC0B1"], /* Hangul Syllable */ + ["\uC0B2", "\uC0B2"], /* Hangul Syllable */ + ["\uC0B3", "\uC0B3"], /* Hangul Syllable */ + ["\uC0B4", "\uC0B4"], /* Hangul Syllable */ + ["\uC0B5", "\uC0B5"], /* Hangul Syllable */ + ["\uC0B6", "\uC0B6"], /* Hangul Syllable */ + ["\uC0B7", "\uC0B7"], /* Hangul Syllable */ + ["\uC0B8", "\uC0B8"], /* Hangul Syllable */ + ["\uC0B9", "\uC0B9"], /* Hangul Syllable */ + ["\uC0BA", "\uC0BA"], /* Hangul Syllable */ + ["\uC0BB", "\uC0BB"], /* Hangul Syllable */ + ["\uC0BC", "\uC0BC"], /* Hangul Syllable */ + ["\uC0BD", "\uC0BD"], /* Hangul Syllable */ + ["\uC0BE", "\uC0BE"], /* Hangul Syllable */ + ["\uC0BF", "\uC0BF"], /* Hangul Syllable */ + ["\uC0C0", "\uC0C0"], /* Hangul Syllable */ + ["\uC0C1", "\uC0C1"], /* Hangul Syllable */ + ["\uC0C2", "\uC0C2"], /* Hangul Syllable */ + ["\uC0C3", "\uC0C3"], /* Hangul Syllable */ + ["\uC0C4", "\uC0C4"], /* Hangul Syllable */ + ["\uC0C5", "\uC0C5"], /* Hangul Syllable */ + ["\uC0C6", "\uC0C6"], /* Hangul Syllable */ + ["\uC0C7", "\uC0C7"], /* Hangul Syllable */ + ["\uC0C8", "\uC0C8"], /* Hangul Syllable */ + ["\uC0C9", "\uC0C9"], /* Hangul Syllable */ + ["\uC0CA", "\uC0CA"], /* Hangul Syllable */ + ["\uC0CB", "\uC0CB"], /* Hangul Syllable */ + ["\uC0CC", "\uC0CC"], /* Hangul Syllable */ + ["\uC0CD", "\uC0CD"], /* Hangul Syllable */ + ["\uC0CE", "\uC0CE"], /* Hangul Syllable */ + ["\uC0CF", "\uC0CF"], /* Hangul Syllable */ + ["\uC0D0", "\uC0D0"], /* Hangul Syllable */ + ["\uC0D1", "\uC0D1"], /* Hangul Syllable */ + ["\uC0D2", "\uC0D2"], /* Hangul Syllable */ + ["\uC0D3", "\uC0D3"], /* Hangul Syllable */ + ["\uC0D4", "\uC0D4"], /* Hangul Syllable */ + ["\uC0D5", "\uC0D5"], /* Hangul Syllable */ + ["\uC0D6", "\uC0D6"], /* Hangul Syllable */ + ["\uC0D7", "\uC0D7"], /* Hangul Syllable */ + ["\uC0D8", "\uC0D8"], /* Hangul Syllable */ + ["\uC0D9", "\uC0D9"], /* Hangul Syllable */ + ["\uC0DA", "\uC0DA"], /* Hangul Syllable */ + ["\uC0DB", "\uC0DB"], /* Hangul Syllable */ + ["\uC0DC", "\uC0DC"], /* Hangul Syllable */ + ["\uC0DD", "\uC0DD"], /* Hangul Syllable */ + ["\uC0DE", "\uC0DE"], /* Hangul Syllable */ + ["\uC0DF", "\uC0DF"], /* Hangul Syllable */ + ["\uC0E0", "\uC0E0"], /* Hangul Syllable */ + ["\uC0E1", "\uC0E1"], /* Hangul Syllable */ + ["\uC0E2", "\uC0E2"], /* Hangul Syllable */ + ["\uC0E3", "\uC0E3"], /* Hangul Syllable */ + ["\uC0E4", "\uC0E4"], /* Hangul Syllable */ + ["\uC0E5", "\uC0E5"], /* Hangul Syllable */ + ["\uC0E6", "\uC0E6"], /* Hangul Syllable */ + ["\uC0E7", "\uC0E7"], /* Hangul Syllable */ + ["\uC0E8", "\uC0E8"], /* Hangul Syllable */ + ["\uC0E9", "\uC0E9"], /* Hangul Syllable */ + ["\uC0EA", "\uC0EA"], /* Hangul Syllable */ + ["\uC0EB", "\uC0EB"], /* Hangul Syllable */ + ["\uC0EC", "\uC0EC"], /* Hangul Syllable */ + ["\uC0ED", "\uC0ED"], /* Hangul Syllable */ + ["\uC0EE", "\uC0EE"], /* Hangul Syllable */ + ["\uC0EF", "\uC0EF"], /* Hangul Syllable */ + ["\uC0F0", "\uC0F0"], /* Hangul Syllable */ + ["\uC0F1", "\uC0F1"], /* Hangul Syllable */ + ["\uC0F2", "\uC0F2"], /* Hangul Syllable */ + ["\uC0F3", "\uC0F3"], /* Hangul Syllable */ + ["\uC0F4", "\uC0F4"], /* Hangul Syllable */ + ["\uC0F5", "\uC0F5"], /* Hangul Syllable */ + ["\uC0F6", "\uC0F6"], /* Hangul Syllable */ + ["\uC0F7", "\uC0F7"], /* Hangul Syllable */ + ["\uC0F8", "\uC0F8"], /* Hangul Syllable */ + ["\uC0F9", "\uC0F9"], /* Hangul Syllable */ + ["\uC0FA", "\uC0FA"], /* Hangul Syllable */ + ["\uC0FB", "\uC0FB"], /* Hangul Syllable */ + ["\uC0FC", "\uC0FC"], /* Hangul Syllable */ + ["\uC0FD", "\uC0FD"], /* Hangul Syllable */ + ["\uC0FE", "\uC0FE"], /* Hangul Syllable */ + ["\uC0FF", "\uC0FF"], /* Hangul Syllable */ + ["\uC100", "\uC100"], /* Hangul Syllable */ + ["\uC101", "\uC101"], /* Hangul Syllable */ + ["\uC102", "\uC102"], /* Hangul Syllable */ + ["\uC103", "\uC103"], /* Hangul Syllable */ + ["\uC104", "\uC104"], /* Hangul Syllable */ + ["\uC105", "\uC105"], /* Hangul Syllable */ + ["\uC106", "\uC106"], /* Hangul Syllable */ + ["\uC107", "\uC107"], /* Hangul Syllable */ + ["\uC108", "\uC108"], /* Hangul Syllable */ + ["\uC109", "\uC109"], /* Hangul Syllable */ + ["\uC10A", "\uC10A"], /* Hangul Syllable */ + ["\uC10B", "\uC10B"], /* Hangul Syllable */ + ["\uC10C", "\uC10C"], /* Hangul Syllable */ + ["\uC10D", "\uC10D"], /* Hangul Syllable */ + ["\uC10E", "\uC10E"], /* Hangul Syllable */ + ["\uC10F", "\uC10F"], /* Hangul Syllable */ + ["\uC110", "\uC110"], /* Hangul Syllable */ + ["\uC111", "\uC111"], /* Hangul Syllable */ + ["\uC112", "\uC112"], /* Hangul Syllable */ + ["\uC113", "\uC113"], /* Hangul Syllable */ + ["\uC114", "\uC114"], /* Hangul Syllable */ + ["\uC115", "\uC115"], /* Hangul Syllable */ + ["\uC116", "\uC116"], /* Hangul Syllable */ + ["\uC117", "\uC117"], /* Hangul Syllable */ + ["\uC118", "\uC118"], /* Hangul Syllable */ + ["\uC119", "\uC119"], /* Hangul Syllable */ + ["\uC11A", "\uC11A"], /* Hangul Syllable */ + ["\uC11B", "\uC11B"], /* Hangul Syllable */ + ["\uC11C", "\uC11C"], /* Hangul Syllable */ + ["\uC11D", "\uC11D"], /* Hangul Syllable */ + ["\uC11E", "\uC11E"], /* Hangul Syllable */ + ["\uC11F", "\uC11F"], /* Hangul Syllable */ + ["\uC120", "\uC120"], /* Hangul Syllable */ + ["\uC121", "\uC121"], /* Hangul Syllable */ + ["\uC122", "\uC122"], /* Hangul Syllable */ + ["\uC123", "\uC123"], /* Hangul Syllable */ + ["\uC124", "\uC124"], /* Hangul Syllable */ + ["\uC125", "\uC125"], /* Hangul Syllable */ + ["\uC126", "\uC126"], /* Hangul Syllable */ + ["\uC127", "\uC127"], /* Hangul Syllable */ + ["\uC128", "\uC128"], /* Hangul Syllable */ + ["\uC129", "\uC129"], /* Hangul Syllable */ + ["\uC12A", "\uC12A"], /* Hangul Syllable */ + ["\uC12B", "\uC12B"], /* Hangul Syllable */ + ["\uC12C", "\uC12C"], /* Hangul Syllable */ + ["\uC12D", "\uC12D"], /* Hangul Syllable */ + ["\uC12E", "\uC12E"], /* Hangul Syllable */ + ["\uC12F", "\uC12F"], /* Hangul Syllable */ + ["\uC130", "\uC130"], /* Hangul Syllable */ + ["\uC131", "\uC131"], /* Hangul Syllable */ + ["\uC132", "\uC132"], /* Hangul Syllable */ + ["\uC133", "\uC133"], /* Hangul Syllable */ + ["\uC134", "\uC134"], /* Hangul Syllable */ + ["\uC135", "\uC135"], /* Hangul Syllable */ + ["\uC136", "\uC136"], /* Hangul Syllable */ + ["\uC137", "\uC137"], /* Hangul Syllable */ + ["\uC138", "\uC138"], /* Hangul Syllable */ + ["\uC139", "\uC139"], /* Hangul Syllable */ + ["\uC13A", "\uC13A"], /* Hangul Syllable */ + ["\uC13B", "\uC13B"], /* Hangul Syllable */ + ["\uC13C", "\uC13C"], /* Hangul Syllable */ + ["\uC13D", "\uC13D"], /* Hangul Syllable */ + ["\uC13E", "\uC13E"], /* Hangul Syllable */ + ["\uC13F", "\uC13F"], /* Hangul Syllable */ + ["\uC140", "\uC140"], /* Hangul Syllable */ + ["\uC141", "\uC141"], /* Hangul Syllable */ + ["\uC142", "\uC142"], /* Hangul Syllable */ + ["\uC143", "\uC143"], /* Hangul Syllable */ + ["\uC144", "\uC144"], /* Hangul Syllable */ + ["\uC145", "\uC145"], /* Hangul Syllable */ + ["\uC146", "\uC146"], /* Hangul Syllable */ + ["\uC147", "\uC147"], /* Hangul Syllable */ + ["\uC148", "\uC148"], /* Hangul Syllable */ + ["\uC149", "\uC149"], /* Hangul Syllable */ + ["\uC14A", "\uC14A"], /* Hangul Syllable */ + ["\uC14B", "\uC14B"], /* Hangul Syllable */ + ["\uC14C", "\uC14C"], /* Hangul Syllable */ + ["\uC14D", "\uC14D"], /* Hangul Syllable */ + ["\uC14E", "\uC14E"], /* Hangul Syllable */ + ["\uC14F", "\uC14F"], /* Hangul Syllable */ + ["\uC150", "\uC150"], /* Hangul Syllable */ + ["\uC151", "\uC151"], /* Hangul Syllable */ + ["\uC152", "\uC152"], /* Hangul Syllable */ + ["\uC153", "\uC153"], /* Hangul Syllable */ + ["\uC154", "\uC154"], /* Hangul Syllable */ + ["\uC155", "\uC155"], /* Hangul Syllable */ + ["\uC156", "\uC156"], /* Hangul Syllable */ + ["\uC157", "\uC157"], /* Hangul Syllable */ + ["\uC158", "\uC158"], /* Hangul Syllable */ + ["\uC159", "\uC159"], /* Hangul Syllable */ + ["\uC15A", "\uC15A"], /* Hangul Syllable */ + ["\uC15B", "\uC15B"], /* Hangul Syllable */ + ["\uC15C", "\uC15C"], /* Hangul Syllable */ + ["\uC15D", "\uC15D"], /* Hangul Syllable */ + ["\uC15E", "\uC15E"], /* Hangul Syllable */ + ["\uC15F", "\uC15F"], /* Hangul Syllable */ + ["\uC160", "\uC160"], /* Hangul Syllable */ + ["\uC161", "\uC161"], /* Hangul Syllable */ + ["\uC162", "\uC162"], /* Hangul Syllable */ + ["\uC163", "\uC163"], /* Hangul Syllable */ + ["\uC164", "\uC164"], /* Hangul Syllable */ + ["\uC165", "\uC165"], /* Hangul Syllable */ + ["\uC166", "\uC166"], /* Hangul Syllable */ + ["\uC167", "\uC167"], /* Hangul Syllable */ + ["\uC168", "\uC168"], /* Hangul Syllable */ + ["\uC169", "\uC169"], /* Hangul Syllable */ + ["\uC16A", "\uC16A"], /* Hangul Syllable */ + ["\uC16B", "\uC16B"], /* Hangul Syllable */ + ["\uC16C", "\uC16C"], /* Hangul Syllable */ + ["\uC16D", "\uC16D"], /* Hangul Syllable */ + ["\uC16E", "\uC16E"], /* Hangul Syllable */ + ["\uC16F", "\uC16F"], /* Hangul Syllable */ + ["\uC170", "\uC170"], /* Hangul Syllable */ + ["\uC171", "\uC171"], /* Hangul Syllable */ + ["\uC172", "\uC172"], /* Hangul Syllable */ + ["\uC173", "\uC173"], /* Hangul Syllable */ + ["\uC174", "\uC174"], /* Hangul Syllable */ + ["\uC175", "\uC175"], /* Hangul Syllable */ + ["\uC176", "\uC176"], /* Hangul Syllable */ + ["\uC177", "\uC177"], /* Hangul Syllable */ + ["\uC178", "\uC178"], /* Hangul Syllable */ + ["\uC179", "\uC179"], /* Hangul Syllable */ + ["\uC17A", "\uC17A"], /* Hangul Syllable */ + ["\uC17B", "\uC17B"], /* Hangul Syllable */ + ["\uC17C", "\uC17C"], /* Hangul Syllable */ + ["\uC17D", "\uC17D"], /* Hangul Syllable */ + ["\uC17E", "\uC17E"], /* Hangul Syllable */ + ["\uC17F", "\uC17F"], /* Hangul Syllable */ + ["\uC180", "\uC180"], /* Hangul Syllable */ + ["\uC181", "\uC181"], /* Hangul Syllable */ + ["\uC182", "\uC182"], /* Hangul Syllable */ + ["\uC183", "\uC183"], /* Hangul Syllable */ + ["\uC184", "\uC184"], /* Hangul Syllable */ + ["\uC185", "\uC185"], /* Hangul Syllable */ + ["\uC186", "\uC186"], /* Hangul Syllable */ + ["\uC187", "\uC187"], /* Hangul Syllable */ + ["\uC188", "\uC188"], /* Hangul Syllable */ + ["\uC189", "\uC189"], /* Hangul Syllable */ + ["\uC18A", "\uC18A"], /* Hangul Syllable */ + ["\uC18B", "\uC18B"], /* Hangul Syllable */ + ["\uC18C", "\uC18C"], /* Hangul Syllable */ + ["\uC18D", "\uC18D"], /* Hangul Syllable */ + ["\uC18E", "\uC18E"], /* Hangul Syllable */ + ["\uC18F", "\uC18F"], /* Hangul Syllable */ + ["\uC190", "\uC190"], /* Hangul Syllable */ + ["\uC191", "\uC191"], /* Hangul Syllable */ + ["\uC192", "\uC192"], /* Hangul Syllable */ + ["\uC193", "\uC193"], /* Hangul Syllable */ + ["\uC194", "\uC194"], /* Hangul Syllable */ + ["\uC195", "\uC195"], /* Hangul Syllable */ + ["\uC196", "\uC196"], /* Hangul Syllable */ + ["\uC197", "\uC197"], /* Hangul Syllable */ + ["\uC198", "\uC198"], /* Hangul Syllable */ + ["\uC199", "\uC199"], /* Hangul Syllable */ + ["\uC19A", "\uC19A"], /* Hangul Syllable */ + ["\uC19B", "\uC19B"], /* Hangul Syllable */ + ["\uC19C", "\uC19C"], /* Hangul Syllable */ + ["\uC19D", "\uC19D"], /* Hangul Syllable */ + ["\uC19E", "\uC19E"], /* Hangul Syllable */ + ["\uC19F", "\uC19F"], /* Hangul Syllable */ + ["\uC1A0", "\uC1A0"], /* Hangul Syllable */ + ["\uC1A1", "\uC1A1"], /* Hangul Syllable */ + ["\uC1A2", "\uC1A2"], /* Hangul Syllable */ + ["\uC1A3", "\uC1A3"], /* Hangul Syllable */ + ["\uC1A4", "\uC1A4"], /* Hangul Syllable */ + ["\uC1A5", "\uC1A5"], /* Hangul Syllable */ + ["\uC1A6", "\uC1A6"], /* Hangul Syllable */ + ["\uC1A7", "\uC1A7"], /* Hangul Syllable */ + ["\uC1A8", "\uC1A8"], /* Hangul Syllable */ + ["\uC1A9", "\uC1A9"], /* Hangul Syllable */ + ["\uC1AA", "\uC1AA"], /* Hangul Syllable */ + ["\uC1AB", "\uC1AB"], /* Hangul Syllable */ + ["\uC1AC", "\uC1AC"], /* Hangul Syllable */ + ["\uC1AD", "\uC1AD"], /* Hangul Syllable */ + ["\uC1AE", "\uC1AE"], /* Hangul Syllable */ + ["\uC1AF", "\uC1AF"], /* Hangul Syllable */ + ["\uC1B0", "\uC1B0"], /* Hangul Syllable */ + ["\uC1B1", "\uC1B1"], /* Hangul Syllable */ + ["\uC1B2", "\uC1B2"], /* Hangul Syllable */ + ["\uC1B3", "\uC1B3"], /* Hangul Syllable */ + ["\uC1B4", "\uC1B4"], /* Hangul Syllable */ + ["\uC1B5", "\uC1B5"], /* Hangul Syllable */ + ["\uC1B6", "\uC1B6"], /* Hangul Syllable */ + ["\uC1B7", "\uC1B7"], /* Hangul Syllable */ + ["\uC1B8", "\uC1B8"], /* Hangul Syllable */ + ["\uC1B9", "\uC1B9"], /* Hangul Syllable */ + ["\uC1BA", "\uC1BA"], /* Hangul Syllable */ + ["\uC1BB", "\uC1BB"], /* Hangul Syllable */ + ["\uC1BC", "\uC1BC"], /* Hangul Syllable */ + ["\uC1BD", "\uC1BD"], /* Hangul Syllable */ + ["\uC1BE", "\uC1BE"], /* Hangul Syllable */ + ["\uC1BF", "\uC1BF"], /* Hangul Syllable */ + ["\uC1C0", "\uC1C0"], /* Hangul Syllable */ + ["\uC1C1", "\uC1C1"], /* Hangul Syllable */ + ["\uC1C2", "\uC1C2"], /* Hangul Syllable */ + ["\uC1C3", "\uC1C3"], /* Hangul Syllable */ + ["\uC1C4", "\uC1C4"], /* Hangul Syllable */ + ["\uC1C5", "\uC1C5"], /* Hangul Syllable */ + ["\uC1C6", "\uC1C6"], /* Hangul Syllable */ + ["\uC1C7", "\uC1C7"], /* Hangul Syllable */ + ["\uC1C8", "\uC1C8"], /* Hangul Syllable */ + ["\uC1C9", "\uC1C9"], /* Hangul Syllable */ + ["\uC1CA", "\uC1CA"], /* Hangul Syllable */ + ["\uC1CB", "\uC1CB"], /* Hangul Syllable */ + ["\uC1CC", "\uC1CC"], /* Hangul Syllable */ + ["\uC1CD", "\uC1CD"], /* Hangul Syllable */ + ["\uC1CE", "\uC1CE"], /* Hangul Syllable */ + ["\uC1CF", "\uC1CF"], /* Hangul Syllable */ + ["\uC1D0", "\uC1D0"], /* Hangul Syllable */ + ["\uC1D1", "\uC1D1"], /* Hangul Syllable */ + ["\uC1D2", "\uC1D2"], /* Hangul Syllable */ + ["\uC1D3", "\uC1D3"], /* Hangul Syllable */ + ["\uC1D4", "\uC1D4"], /* Hangul Syllable */ + ["\uC1D5", "\uC1D5"], /* Hangul Syllable */ + ["\uC1D6", "\uC1D6"], /* Hangul Syllable */ + ["\uC1D7", "\uC1D7"], /* Hangul Syllable */ + ["\uC1D8", "\uC1D8"], /* Hangul Syllable */ + ["\uC1D9", "\uC1D9"], /* Hangul Syllable */ + ["\uC1DA", "\uC1DA"], /* Hangul Syllable */ + ["\uC1DB", "\uC1DB"], /* Hangul Syllable */ + ["\uC1DC", "\uC1DC"], /* Hangul Syllable */ + ["\uC1DD", "\uC1DD"], /* Hangul Syllable */ + ["\uC1DE", "\uC1DE"], /* Hangul Syllable */ + ["\uC1DF", "\uC1DF"], /* Hangul Syllable */ + ["\uC1E0", "\uC1E0"], /* Hangul Syllable */ + ["\uC1E1", "\uC1E1"], /* Hangul Syllable */ + ["\uC1E2", "\uC1E2"], /* Hangul Syllable */ + ["\uC1E3", "\uC1E3"], /* Hangul Syllable */ + ["\uC1E4", "\uC1E4"], /* Hangul Syllable */ + ["\uC1E5", "\uC1E5"], /* Hangul Syllable */ + ["\uC1E6", "\uC1E6"], /* Hangul Syllable */ + ["\uC1E7", "\uC1E7"], /* Hangul Syllable */ + ["\uC1E8", "\uC1E8"], /* Hangul Syllable */ + ["\uC1E9", "\uC1E9"], /* Hangul Syllable */ + ["\uC1EA", "\uC1EA"], /* Hangul Syllable */ + ["\uC1EB", "\uC1EB"], /* Hangul Syllable */ + ["\uC1EC", "\uC1EC"], /* Hangul Syllable */ + ["\uC1ED", "\uC1ED"], /* Hangul Syllable */ + ["\uC1EE", "\uC1EE"], /* Hangul Syllable */ + ["\uC1EF", "\uC1EF"], /* Hangul Syllable */ + ["\uC1F0", "\uC1F0"], /* Hangul Syllable */ + ["\uC1F1", "\uC1F1"], /* Hangul Syllable */ + ["\uC1F2", "\uC1F2"], /* Hangul Syllable */ + ["\uC1F3", "\uC1F3"], /* Hangul Syllable */ + ["\uC1F4", "\uC1F4"], /* Hangul Syllable */ + ["\uC1F5", "\uC1F5"], /* Hangul Syllable */ + ["\uC1F6", "\uC1F6"], /* Hangul Syllable */ + ["\uC1F7", "\uC1F7"], /* Hangul Syllable */ + ["\uC1F8", "\uC1F8"], /* Hangul Syllable */ + ["\uC1F9", "\uC1F9"], /* Hangul Syllable */ + ["\uC1FA", "\uC1FA"], /* Hangul Syllable */ + ["\uC1FB", "\uC1FB"], /* Hangul Syllable */ + ["\uC1FC", "\uC1FC"], /* Hangul Syllable */ + ["\uC1FD", "\uC1FD"], /* Hangul Syllable */ + ["\uC1FE", "\uC1FE"], /* Hangul Syllable */ + ["\uC1FF", "\uC1FF"], /* Hangul Syllable */ + ["\uC200", "\uC200"], /* Hangul Syllable */ + ["\uC201", "\uC201"], /* Hangul Syllable */ + ["\uC202", "\uC202"], /* Hangul Syllable */ + ["\uC203", "\uC203"], /* Hangul Syllable */ + ["\uC204", "\uC204"], /* Hangul Syllable */ + ["\uC205", "\uC205"], /* Hangul Syllable */ + ["\uC206", "\uC206"], /* Hangul Syllable */ + ["\uC207", "\uC207"], /* Hangul Syllable */ + ["\uC208", "\uC208"], /* Hangul Syllable */ + ["\uC209", "\uC209"], /* Hangul Syllable */ + ["\uC20A", "\uC20A"], /* Hangul Syllable */ + ["\uC20B", "\uC20B"], /* Hangul Syllable */ + ["\uC20C", "\uC20C"], /* Hangul Syllable */ + ["\uC20D", "\uC20D"], /* Hangul Syllable */ + ["\uC20E", "\uC20E"], /* Hangul Syllable */ + ["\uC20F", "\uC20F"], /* Hangul Syllable */ + ["\uC210", "\uC210"], /* Hangul Syllable */ + ["\uC211", "\uC211"], /* Hangul Syllable */ + ["\uC212", "\uC212"], /* Hangul Syllable */ + ["\uC213", "\uC213"], /* Hangul Syllable */ + ["\uC214", "\uC214"], /* Hangul Syllable */ + ["\uC215", "\uC215"], /* Hangul Syllable */ + ["\uC216", "\uC216"], /* Hangul Syllable */ + ["\uC217", "\uC217"], /* Hangul Syllable */ + ["\uC218", "\uC218"], /* Hangul Syllable */ + ["\uC219", "\uC219"], /* Hangul Syllable */ + ["\uC21A", "\uC21A"], /* Hangul Syllable */ + ["\uC21B", "\uC21B"], /* Hangul Syllable */ + ["\uC21C", "\uC21C"], /* Hangul Syllable */ + ["\uC21D", "\uC21D"], /* Hangul Syllable */ + ["\uC21E", "\uC21E"], /* Hangul Syllable */ + ["\uC21F", "\uC21F"], /* Hangul Syllable */ + ["\uC220", "\uC220"], /* Hangul Syllable */ + ["\uC221", "\uC221"], /* Hangul Syllable */ + ["\uC222", "\uC222"], /* Hangul Syllable */ + ["\uC223", "\uC223"], /* Hangul Syllable */ + ["\uC224", "\uC224"], /* Hangul Syllable */ + ["\uC225", "\uC225"], /* Hangul Syllable */ + ["\uC226", "\uC226"], /* Hangul Syllable */ + ["\uC227", "\uC227"], /* Hangul Syllable */ + ["\uC228", "\uC228"], /* Hangul Syllable */ + ["\uC229", "\uC229"], /* Hangul Syllable */ + ["\uC22A", "\uC22A"], /* Hangul Syllable */ + ["\uC22B", "\uC22B"], /* Hangul Syllable */ + ["\uC22C", "\uC22C"], /* Hangul Syllable */ + ["\uC22D", "\uC22D"], /* Hangul Syllable */ + ["\uC22E", "\uC22E"], /* Hangul Syllable */ + ["\uC22F", "\uC22F"], /* Hangul Syllable */ + ["\uC230", "\uC230"], /* Hangul Syllable */ + ["\uC231", "\uC231"], /* Hangul Syllable */ + ["\uC232", "\uC232"], /* Hangul Syllable */ + ["\uC233", "\uC233"], /* Hangul Syllable */ + ["\uC234", "\uC234"], /* Hangul Syllable */ + ["\uC235", "\uC235"], /* Hangul Syllable */ + ["\uC236", "\uC236"], /* Hangul Syllable */ + ["\uC237", "\uC237"], /* Hangul Syllable */ + ["\uC238", "\uC238"], /* Hangul Syllable */ + ["\uC239", "\uC239"], /* Hangul Syllable */ + ["\uC23A", "\uC23A"], /* Hangul Syllable */ + ["\uC23B", "\uC23B"], /* Hangul Syllable */ + ["\uC23C", "\uC23C"], /* Hangul Syllable */ + ["\uC23D", "\uC23D"], /* Hangul Syllable */ + ["\uC23E", "\uC23E"], /* Hangul Syllable */ + ["\uC23F", "\uC23F"], /* Hangul Syllable */ + ["\uC240", "\uC240"], /* Hangul Syllable */ + ["\uC241", "\uC241"], /* Hangul Syllable */ + ["\uC242", "\uC242"], /* Hangul Syllable */ + ["\uC243", "\uC243"], /* Hangul Syllable */ + ["\uC244", "\uC244"], /* Hangul Syllable */ + ["\uC245", "\uC245"], /* Hangul Syllable */ + ["\uC246", "\uC246"], /* Hangul Syllable */ + ["\uC247", "\uC247"], /* Hangul Syllable */ + ["\uC248", "\uC248"], /* Hangul Syllable */ + ["\uC249", "\uC249"], /* Hangul Syllable */ + ["\uC24A", "\uC24A"], /* Hangul Syllable */ + ["\uC24B", "\uC24B"], /* Hangul Syllable */ + ["\uC24C", "\uC24C"], /* Hangul Syllable */ + ["\uC24D", "\uC24D"], /* Hangul Syllable */ + ["\uC24E", "\uC24E"], /* Hangul Syllable */ + ["\uC24F", "\uC24F"], /* Hangul Syllable */ + ["\uC250", "\uC250"], /* Hangul Syllable */ + ["\uC251", "\uC251"], /* Hangul Syllable */ + ["\uC252", "\uC252"], /* Hangul Syllable */ + ["\uC253", "\uC253"], /* Hangul Syllable */ + ["\uC254", "\uC254"], /* Hangul Syllable */ + ["\uC255", "\uC255"], /* Hangul Syllable */ + ["\uC256", "\uC256"], /* Hangul Syllable */ + ["\uC257", "\uC257"], /* Hangul Syllable */ + ["\uC258", "\uC258"], /* Hangul Syllable */ + ["\uC259", "\uC259"], /* Hangul Syllable */ + ["\uC25A", "\uC25A"], /* Hangul Syllable */ + ["\uC25B", "\uC25B"], /* Hangul Syllable */ + ["\uC25C", "\uC25C"], /* Hangul Syllable */ + ["\uC25D", "\uC25D"], /* Hangul Syllable */ + ["\uC25E", "\uC25E"], /* Hangul Syllable */ + ["\uC25F", "\uC25F"], /* Hangul Syllable */ + ["\uC260", "\uC260"], /* Hangul Syllable */ + ["\uC261", "\uC261"], /* Hangul Syllable */ + ["\uC262", "\uC262"], /* Hangul Syllable */ + ["\uC263", "\uC263"], /* Hangul Syllable */ + ["\uC264", "\uC264"], /* Hangul Syllable */ + ["\uC265", "\uC265"], /* Hangul Syllable */ + ["\uC266", "\uC266"], /* Hangul Syllable */ + ["\uC267", "\uC267"], /* Hangul Syllable */ + ["\uC268", "\uC268"], /* Hangul Syllable */ + ["\uC269", "\uC269"], /* Hangul Syllable */ + ["\uC26A", "\uC26A"], /* Hangul Syllable */ + ["\uC26B", "\uC26B"], /* Hangul Syllable */ + ["\uC26C", "\uC26C"], /* Hangul Syllable */ + ["\uC26D", "\uC26D"], /* Hangul Syllable */ + ["\uC26E", "\uC26E"], /* Hangul Syllable */ + ["\uC26F", "\uC26F"], /* Hangul Syllable */ + ["\uC270", "\uC270"], /* Hangul Syllable */ + ["\uC271", "\uC271"], /* Hangul Syllable */ + ["\uC272", "\uC272"], /* Hangul Syllable */ + ["\uC273", "\uC273"], /* Hangul Syllable */ + ["\uC274", "\uC274"], /* Hangul Syllable */ + ["\uC275", "\uC275"], /* Hangul Syllable */ + ["\uC276", "\uC276"], /* Hangul Syllable */ + ["\uC277", "\uC277"], /* Hangul Syllable */ + ["\uC278", "\uC278"], /* Hangul Syllable */ + ["\uC279", "\uC279"], /* Hangul Syllable */ + ["\uC27A", "\uC27A"], /* Hangul Syllable */ + ["\uC27B", "\uC27B"], /* Hangul Syllable */ + ["\uC27C", "\uC27C"], /* Hangul Syllable */ + ["\uC27D", "\uC27D"], /* Hangul Syllable */ + ["\uC27E", "\uC27E"], /* Hangul Syllable */ + ["\uC27F", "\uC27F"], /* Hangul Syllable */ + ["\uC280", "\uC280"], /* Hangul Syllable */ + ["\uC281", "\uC281"], /* Hangul Syllable */ + ["\uC282", "\uC282"], /* Hangul Syllable */ + ["\uC283", "\uC283"], /* Hangul Syllable */ + ["\uC284", "\uC284"], /* Hangul Syllable */ + ["\uC285", "\uC285"], /* Hangul Syllable */ + ["\uC286", "\uC286"], /* Hangul Syllable */ + ["\uC287", "\uC287"], /* Hangul Syllable */ + ["\uC288", "\uC288"], /* Hangul Syllable */ + ["\uC289", "\uC289"], /* Hangul Syllable */ + ["\uC28A", "\uC28A"], /* Hangul Syllable */ + ["\uC28B", "\uC28B"], /* Hangul Syllable */ + ["\uC28C", "\uC28C"], /* Hangul Syllable */ + ["\uC28D", "\uC28D"], /* Hangul Syllable */ + ["\uC28E", "\uC28E"], /* Hangul Syllable */ + ["\uC28F", "\uC28F"], /* Hangul Syllable */ + ["\uC290", "\uC290"], /* Hangul Syllable */ + ["\uC291", "\uC291"], /* Hangul Syllable */ + ["\uC292", "\uC292"], /* Hangul Syllable */ + ["\uC293", "\uC293"], /* Hangul Syllable */ + ["\uC294", "\uC294"], /* Hangul Syllable */ + ["\uC295", "\uC295"], /* Hangul Syllable */ + ["\uC296", "\uC296"], /* Hangul Syllable */ + ["\uC297", "\uC297"], /* Hangul Syllable */ + ["\uC298", "\uC298"], /* Hangul Syllable */ + ["\uC299", "\uC299"], /* Hangul Syllable */ + ["\uC29A", "\uC29A"], /* Hangul Syllable */ + ["\uC29B", "\uC29B"], /* Hangul Syllable */ + ["\uC29C", "\uC29C"], /* Hangul Syllable */ + ["\uC29D", "\uC29D"], /* Hangul Syllable */ + ["\uC29E", "\uC29E"], /* Hangul Syllable */ + ["\uC29F", "\uC29F"], /* Hangul Syllable */ + ["\uC2A0", "\uC2A0"], /* Hangul Syllable */ + ["\uC2A1", "\uC2A1"], /* Hangul Syllable */ + ["\uC2A2", "\uC2A2"], /* Hangul Syllable */ + ["\uC2A3", "\uC2A3"], /* Hangul Syllable */ + ["\uC2A4", "\uC2A4"], /* Hangul Syllable */ + ["\uC2A5", "\uC2A5"], /* Hangul Syllable */ + ["\uC2A6", "\uC2A6"], /* Hangul Syllable */ + ["\uC2A7", "\uC2A7"], /* Hangul Syllable */ + ["\uC2A8", "\uC2A8"], /* Hangul Syllable */ + ["\uC2A9", "\uC2A9"], /* Hangul Syllable */ + ["\uC2AA", "\uC2AA"], /* Hangul Syllable */ + ["\uC2AB", "\uC2AB"], /* Hangul Syllable */ + ["\uC2AC", "\uC2AC"], /* Hangul Syllable */ + ["\uC2AD", "\uC2AD"], /* Hangul Syllable */ + ["\uC2AE", "\uC2AE"], /* Hangul Syllable */ + ["\uC2AF", "\uC2AF"], /* Hangul Syllable */ + ["\uC2B0", "\uC2B0"], /* Hangul Syllable */ + ["\uC2B1", "\uC2B1"], /* Hangul Syllable */ + ["\uC2B2", "\uC2B2"], /* Hangul Syllable */ + ["\uC2B3", "\uC2B3"], /* Hangul Syllable */ + ["\uC2B4", "\uC2B4"], /* Hangul Syllable */ + ["\uC2B5", "\uC2B5"], /* Hangul Syllable */ + ["\uC2B6", "\uC2B6"], /* Hangul Syllable */ + ["\uC2B7", "\uC2B7"], /* Hangul Syllable */ + ["\uC2B8", "\uC2B8"], /* Hangul Syllable */ + ["\uC2B9", "\uC2B9"], /* Hangul Syllable */ + ["\uC2BA", "\uC2BA"], /* Hangul Syllable */ + ["\uC2BB", "\uC2BB"], /* Hangul Syllable */ + ["\uC2BC", "\uC2BC"], /* Hangul Syllable */ + ["\uC2BD", "\uC2BD"], /* Hangul Syllable */ + ["\uC2BE", "\uC2BE"], /* Hangul Syllable */ + ["\uC2BF", "\uC2BF"], /* Hangul Syllable */ + ["\uC2C0", "\uC2C0"], /* Hangul Syllable */ + ["\uC2C1", "\uC2C1"], /* Hangul Syllable */ + ["\uC2C2", "\uC2C2"], /* Hangul Syllable */ + ["\uC2C3", "\uC2C3"], /* Hangul Syllable */ + ["\uC2C4", "\uC2C4"], /* Hangul Syllable */ + ["\uC2C5", "\uC2C5"], /* Hangul Syllable */ + ["\uC2C6", "\uC2C6"], /* Hangul Syllable */ + ["\uC2C7", "\uC2C7"], /* Hangul Syllable */ + ["\uC2C8", "\uC2C8"], /* Hangul Syllable */ + ["\uC2C9", "\uC2C9"], /* Hangul Syllable */ + ["\uC2CA", "\uC2CA"], /* Hangul Syllable */ + ["\uC2CB", "\uC2CB"], /* Hangul Syllable */ + ["\uC2CC", "\uC2CC"], /* Hangul Syllable */ + ["\uC2CD", "\uC2CD"], /* Hangul Syllable */ + ["\uC2CE", "\uC2CE"], /* Hangul Syllable */ + ["\uC2CF", "\uC2CF"], /* Hangul Syllable */ + ["\uC2D0", "\uC2D0"], /* Hangul Syllable */ + ["\uC2D1", "\uC2D1"], /* Hangul Syllable */ + ["\uC2D2", "\uC2D2"], /* Hangul Syllable */ + ["\uC2D3", "\uC2D3"], /* Hangul Syllable */ + ["\uC2D4", "\uC2D4"], /* Hangul Syllable */ + ["\uC2D5", "\uC2D5"], /* Hangul Syllable */ + ["\uC2D6", "\uC2D6"], /* Hangul Syllable */ + ["\uC2D7", "\uC2D7"], /* Hangul Syllable */ + ["\uC2D8", "\uC2D8"], /* Hangul Syllable */ + ["\uC2D9", "\uC2D9"], /* Hangul Syllable */ + ["\uC2DA", "\uC2DA"], /* Hangul Syllable */ + ["\uC2DB", "\uC2DB"], /* Hangul Syllable */ + ["\uC2DC", "\uC2DC"], /* Hangul Syllable */ + ["\uC2DD", "\uC2DD"], /* Hangul Syllable */ + ["\uC2DE", "\uC2DE"], /* Hangul Syllable */ + ["\uC2DF", "\uC2DF"], /* Hangul Syllable */ + ["\uC2E0", "\uC2E0"], /* Hangul Syllable */ + ["\uC2E1", "\uC2E1"], /* Hangul Syllable */ + ["\uC2E2", "\uC2E2"], /* Hangul Syllable */ + ["\uC2E3", "\uC2E3"], /* Hangul Syllable */ + ["\uC2E4", "\uC2E4"], /* Hangul Syllable */ + ["\uC2E5", "\uC2E5"], /* Hangul Syllable */ + ["\uC2E6", "\uC2E6"], /* Hangul Syllable */ + ["\uC2E7", "\uC2E7"], /* Hangul Syllable */ + ["\uC2E8", "\uC2E8"], /* Hangul Syllable */ + ["\uC2E9", "\uC2E9"], /* Hangul Syllable */ + ["\uC2EA", "\uC2EA"], /* Hangul Syllable */ + ["\uC2EB", "\uC2EB"], /* Hangul Syllable */ + ["\uC2EC", "\uC2EC"], /* Hangul Syllable */ + ["\uC2ED", "\uC2ED"], /* Hangul Syllable */ + ["\uC2EE", "\uC2EE"], /* Hangul Syllable */ + ["\uC2EF", "\uC2EF"], /* Hangul Syllable */ + ["\uC2F0", "\uC2F0"], /* Hangul Syllable */ + ["\uC2F1", "\uC2F1"], /* Hangul Syllable */ + ["\uC2F2", "\uC2F2"], /* Hangul Syllable */ + ["\uC2F3", "\uC2F3"], /* Hangul Syllable */ + ["\uC2F4", "\uC2F4"], /* Hangul Syllable */ + ["\uC2F5", "\uC2F5"], /* Hangul Syllable */ + ["\uC2F6", "\uC2F6"], /* Hangul Syllable */ + ["\uC2F7", "\uC2F7"], /* Hangul Syllable */ + ["\uC2F8", "\uC2F8"], /* Hangul Syllable */ + ["\uC2F9", "\uC2F9"], /* Hangul Syllable */ + ["\uC2FA", "\uC2FA"], /* Hangul Syllable */ + ["\uC2FB", "\uC2FB"], /* Hangul Syllable */ + ["\uC2FC", "\uC2FC"], /* Hangul Syllable */ + ["\uC2FD", "\uC2FD"], /* Hangul Syllable */ + ["\uC2FE", "\uC2FE"], /* Hangul Syllable */ + ["\uC2FF", "\uC2FF"], /* Hangul Syllable */ + ["\uC300", "\uC300"], /* Hangul Syllable */ + ["\uC301", "\uC301"], /* Hangul Syllable */ + ["\uC302", "\uC302"], /* Hangul Syllable */ + ["\uC303", "\uC303"], /* Hangul Syllable */ + ["\uC304", "\uC304"], /* Hangul Syllable */ + ["\uC305", "\uC305"], /* Hangul Syllable */ + ["\uC306", "\uC306"], /* Hangul Syllable */ + ["\uC307", "\uC307"], /* Hangul Syllable */ + ["\uC308", "\uC308"], /* Hangul Syllable */ + ["\uC309", "\uC309"], /* Hangul Syllable */ + ["\uC30A", "\uC30A"], /* Hangul Syllable */ + ["\uC30B", "\uC30B"], /* Hangul Syllable */ + ["\uC30C", "\uC30C"], /* Hangul Syllable */ + ["\uC30D", "\uC30D"], /* Hangul Syllable */ + ["\uC30E", "\uC30E"], /* Hangul Syllable */ + ["\uC30F", "\uC30F"], /* Hangul Syllable */ + ["\uC310", "\uC310"], /* Hangul Syllable */ + ["\uC311", "\uC311"], /* Hangul Syllable */ + ["\uC312", "\uC312"], /* Hangul Syllable */ + ["\uC313", "\uC313"], /* Hangul Syllable */ + ["\uC314", "\uC314"], /* Hangul Syllable */ + ["\uC315", "\uC315"], /* Hangul Syllable */ + ["\uC316", "\uC316"], /* Hangul Syllable */ + ["\uC317", "\uC317"], /* Hangul Syllable */ + ["\uC318", "\uC318"], /* Hangul Syllable */ + ["\uC319", "\uC319"], /* Hangul Syllable */ + ["\uC31A", "\uC31A"], /* Hangul Syllable */ + ["\uC31B", "\uC31B"], /* Hangul Syllable */ + ["\uC31C", "\uC31C"], /* Hangul Syllable */ + ["\uC31D", "\uC31D"], /* Hangul Syllable */ + ["\uC31E", "\uC31E"], /* Hangul Syllable */ + ["\uC31F", "\uC31F"], /* Hangul Syllable */ + ["\uC320", "\uC320"], /* Hangul Syllable */ + ["\uC321", "\uC321"], /* Hangul Syllable */ + ["\uC322", "\uC322"], /* Hangul Syllable */ + ["\uC323", "\uC323"], /* Hangul Syllable */ + ["\uC324", "\uC324"], /* Hangul Syllable */ + ["\uC325", "\uC325"], /* Hangul Syllable */ + ["\uC326", "\uC326"], /* Hangul Syllable */ + ["\uC327", "\uC327"], /* Hangul Syllable */ + ["\uC328", "\uC328"], /* Hangul Syllable */ + ["\uC329", "\uC329"], /* Hangul Syllable */ + ["\uC32A", "\uC32A"], /* Hangul Syllable */ + ["\uC32B", "\uC32B"], /* Hangul Syllable */ + ["\uC32C", "\uC32C"], /* Hangul Syllable */ + ["\uC32D", "\uC32D"], /* Hangul Syllable */ + ["\uC32E", "\uC32E"], /* Hangul Syllable */ + ["\uC32F", "\uC32F"], /* Hangul Syllable */ + ["\uC330", "\uC330"], /* Hangul Syllable */ + ["\uC331", "\uC331"], /* Hangul Syllable */ + ["\uC332", "\uC332"], /* Hangul Syllable */ + ["\uC333", "\uC333"], /* Hangul Syllable */ + ["\uC334", "\uC334"], /* Hangul Syllable */ + ["\uC335", "\uC335"], /* Hangul Syllable */ + ["\uC336", "\uC336"], /* Hangul Syllable */ + ["\uC337", "\uC337"], /* Hangul Syllable */ + ["\uC338", "\uC338"], /* Hangul Syllable */ + ["\uC339", "\uC339"], /* Hangul Syllable */ + ["\uC33A", "\uC33A"], /* Hangul Syllable */ + ["\uC33B", "\uC33B"], /* Hangul Syllable */ + ["\uC33C", "\uC33C"], /* Hangul Syllable */ + ["\uC33D", "\uC33D"], /* Hangul Syllable */ + ["\uC33E", "\uC33E"], /* Hangul Syllable */ + ["\uC33F", "\uC33F"], /* Hangul Syllable */ + ["\uC340", "\uC340"], /* Hangul Syllable */ + ["\uC341", "\uC341"], /* Hangul Syllable */ + ["\uC342", "\uC342"], /* Hangul Syllable */ + ["\uC343", "\uC343"], /* Hangul Syllable */ + ["\uC344", "\uC344"], /* Hangul Syllable */ + ["\uC345", "\uC345"], /* Hangul Syllable */ + ["\uC346", "\uC346"], /* Hangul Syllable */ + ["\uC347", "\uC347"], /* Hangul Syllable */ + ["\uC348", "\uC348"], /* Hangul Syllable */ + ["\uC349", "\uC349"], /* Hangul Syllable */ + ["\uC34A", "\uC34A"], /* Hangul Syllable */ + ["\uC34B", "\uC34B"], /* Hangul Syllable */ + ["\uC34C", "\uC34C"], /* Hangul Syllable */ + ["\uC34D", "\uC34D"], /* Hangul Syllable */ + ["\uC34E", "\uC34E"], /* Hangul Syllable */ + ["\uC34F", "\uC34F"], /* Hangul Syllable */ + ["\uC350", "\uC350"], /* Hangul Syllable */ + ["\uC351", "\uC351"], /* Hangul Syllable */ + ["\uC352", "\uC352"], /* Hangul Syllable */ + ["\uC353", "\uC353"], /* Hangul Syllable */ + ["\uC354", "\uC354"], /* Hangul Syllable */ + ["\uC355", "\uC355"], /* Hangul Syllable */ + ["\uC356", "\uC356"], /* Hangul Syllable */ + ["\uC357", "\uC357"], /* Hangul Syllable */ + ["\uC358", "\uC358"], /* Hangul Syllable */ + ["\uC359", "\uC359"], /* Hangul Syllable */ + ["\uC35A", "\uC35A"], /* Hangul Syllable */ + ["\uC35B", "\uC35B"], /* Hangul Syllable */ + ["\uC35C", "\uC35C"], /* Hangul Syllable */ + ["\uC35D", "\uC35D"], /* Hangul Syllable */ + ["\uC35E", "\uC35E"], /* Hangul Syllable */ + ["\uC35F", "\uC35F"], /* Hangul Syllable */ + ["\uC360", "\uC360"], /* Hangul Syllable */ + ["\uC361", "\uC361"], /* Hangul Syllable */ + ["\uC362", "\uC362"], /* Hangul Syllable */ + ["\uC363", "\uC363"], /* Hangul Syllable */ + ["\uC364", "\uC364"], /* Hangul Syllable */ + ["\uC365", "\uC365"], /* Hangul Syllable */ + ["\uC366", "\uC366"], /* Hangul Syllable */ + ["\uC367", "\uC367"], /* Hangul Syllable */ + ["\uC368", "\uC368"], /* Hangul Syllable */ + ["\uC369", "\uC369"], /* Hangul Syllable */ + ["\uC36A", "\uC36A"], /* Hangul Syllable */ + ["\uC36B", "\uC36B"], /* Hangul Syllable */ + ["\uC36C", "\uC36C"], /* Hangul Syllable */ + ["\uC36D", "\uC36D"], /* Hangul Syllable */ + ["\uC36E", "\uC36E"], /* Hangul Syllable */ + ["\uC36F", "\uC36F"], /* Hangul Syllable */ + ["\uC370", "\uC370"], /* Hangul Syllable */ + ["\uC371", "\uC371"], /* Hangul Syllable */ + ["\uC372", "\uC372"], /* Hangul Syllable */ + ["\uC373", "\uC373"], /* Hangul Syllable */ + ["\uC374", "\uC374"], /* Hangul Syllable */ + ["\uC375", "\uC375"], /* Hangul Syllable */ + ["\uC376", "\uC376"], /* Hangul Syllable */ + ["\uC377", "\uC377"], /* Hangul Syllable */ + ["\uC378", "\uC378"], /* Hangul Syllable */ + ["\uC379", "\uC379"], /* Hangul Syllable */ + ["\uC37A", "\uC37A"], /* Hangul Syllable */ + ["\uC37B", "\uC37B"], /* Hangul Syllable */ + ["\uC37C", "\uC37C"], /* Hangul Syllable */ + ["\uC37D", "\uC37D"], /* Hangul Syllable */ + ["\uC37E", "\uC37E"], /* Hangul Syllable */ + ["\uC37F", "\uC37F"], /* Hangul Syllable */ + ["\uC380", "\uC380"], /* Hangul Syllable */ + ["\uC381", "\uC381"], /* Hangul Syllable */ + ["\uC382", "\uC382"], /* Hangul Syllable */ + ["\uC383", "\uC383"], /* Hangul Syllable */ + ["\uC384", "\uC384"], /* Hangul Syllable */ + ["\uC385", "\uC385"], /* Hangul Syllable */ + ["\uC386", "\uC386"], /* Hangul Syllable */ + ["\uC387", "\uC387"], /* Hangul Syllable */ + ["\uC388", "\uC388"], /* Hangul Syllable */ + ["\uC389", "\uC389"], /* Hangul Syllable */ + ["\uC38A", "\uC38A"], /* Hangul Syllable */ + ["\uC38B", "\uC38B"], /* Hangul Syllable */ + ["\uC38C", "\uC38C"], /* Hangul Syllable */ + ["\uC38D", "\uC38D"], /* Hangul Syllable */ + ["\uC38E", "\uC38E"], /* Hangul Syllable */ + ["\uC38F", "\uC38F"], /* Hangul Syllable */ + ["\uC390", "\uC390"], /* Hangul Syllable */ + ["\uC391", "\uC391"], /* Hangul Syllable */ + ["\uC392", "\uC392"], /* Hangul Syllable */ + ["\uC393", "\uC393"], /* Hangul Syllable */ + ["\uC394", "\uC394"], /* Hangul Syllable */ + ["\uC395", "\uC395"], /* Hangul Syllable */ + ["\uC396", "\uC396"], /* Hangul Syllable */ + ["\uC397", "\uC397"], /* Hangul Syllable */ + ["\uC398", "\uC398"], /* Hangul Syllable */ + ["\uC399", "\uC399"], /* Hangul Syllable */ + ["\uC39A", "\uC39A"], /* Hangul Syllable */ + ["\uC39B", "\uC39B"], /* Hangul Syllable */ + ["\uC39C", "\uC39C"], /* Hangul Syllable */ + ["\uC39D", "\uC39D"], /* Hangul Syllable */ + ["\uC39E", "\uC39E"], /* Hangul Syllable */ + ["\uC39F", "\uC39F"], /* Hangul Syllable */ + ["\uC3A0", "\uC3A0"], /* Hangul Syllable */ + ["\uC3A1", "\uC3A1"], /* Hangul Syllable */ + ["\uC3A2", "\uC3A2"], /* Hangul Syllable */ + ["\uC3A3", "\uC3A3"], /* Hangul Syllable */ + ["\uC3A4", "\uC3A4"], /* Hangul Syllable */ + ["\uC3A5", "\uC3A5"], /* Hangul Syllable */ + ["\uC3A6", "\uC3A6"], /* Hangul Syllable */ + ["\uC3A7", "\uC3A7"], /* Hangul Syllable */ + ["\uC3A8", "\uC3A8"], /* Hangul Syllable */ + ["\uC3A9", "\uC3A9"], /* Hangul Syllable */ + ["\uC3AA", "\uC3AA"], /* Hangul Syllable */ + ["\uC3AB", "\uC3AB"], /* Hangul Syllable */ + ["\uC3AC", "\uC3AC"], /* Hangul Syllable */ + ["\uC3AD", "\uC3AD"], /* Hangul Syllable */ + ["\uC3AE", "\uC3AE"], /* Hangul Syllable */ + ["\uC3AF", "\uC3AF"], /* Hangul Syllable */ + ["\uC3B0", "\uC3B0"], /* Hangul Syllable */ + ["\uC3B1", "\uC3B1"], /* Hangul Syllable */ + ["\uC3B2", "\uC3B2"], /* Hangul Syllable */ + ["\uC3B3", "\uC3B3"], /* Hangul Syllable */ + ["\uC3B4", "\uC3B4"], /* Hangul Syllable */ + ["\uC3B5", "\uC3B5"], /* Hangul Syllable */ + ["\uC3B6", "\uC3B6"], /* Hangul Syllable */ + ["\uC3B7", "\uC3B7"], /* Hangul Syllable */ + ["\uC3B8", "\uC3B8"], /* Hangul Syllable */ + ["\uC3B9", "\uC3B9"], /* Hangul Syllable */ + ["\uC3BA", "\uC3BA"], /* Hangul Syllable */ + ["\uC3BB", "\uC3BB"], /* Hangul Syllable */ + ["\uC3BC", "\uC3BC"], /* Hangul Syllable */ + ["\uC3BD", "\uC3BD"], /* Hangul Syllable */ + ["\uC3BE", "\uC3BE"], /* Hangul Syllable */ + ["\uC3BF", "\uC3BF"], /* Hangul Syllable */ + ["\uC3C0", "\uC3C0"], /* Hangul Syllable */ + ["\uC3C1", "\uC3C1"], /* Hangul Syllable */ + ["\uC3C2", "\uC3C2"], /* Hangul Syllable */ + ["\uC3C3", "\uC3C3"], /* Hangul Syllable */ + ["\uC3C4", "\uC3C4"], /* Hangul Syllable */ + ["\uC3C5", "\uC3C5"], /* Hangul Syllable */ + ["\uC3C6", "\uC3C6"], /* Hangul Syllable */ + ["\uC3C7", "\uC3C7"], /* Hangul Syllable */ + ["\uC3C8", "\uC3C8"], /* Hangul Syllable */ + ["\uC3C9", "\uC3C9"], /* Hangul Syllable */ + ["\uC3CA", "\uC3CA"], /* Hangul Syllable */ + ["\uC3CB", "\uC3CB"], /* Hangul Syllable */ + ["\uC3CC", "\uC3CC"], /* Hangul Syllable */ + ["\uC3CD", "\uC3CD"], /* Hangul Syllable */ + ["\uC3CE", "\uC3CE"], /* Hangul Syllable */ + ["\uC3CF", "\uC3CF"], /* Hangul Syllable */ + ["\uC3D0", "\uC3D0"], /* Hangul Syllable */ + ["\uC3D1", "\uC3D1"], /* Hangul Syllable */ + ["\uC3D2", "\uC3D2"], /* Hangul Syllable */ + ["\uC3D3", "\uC3D3"], /* Hangul Syllable */ + ["\uC3D4", "\uC3D4"], /* Hangul Syllable */ + ["\uC3D5", "\uC3D5"], /* Hangul Syllable */ + ["\uC3D6", "\uC3D6"], /* Hangul Syllable */ + ["\uC3D7", "\uC3D7"], /* Hangul Syllable */ + ["\uC3D8", "\uC3D8"], /* Hangul Syllable */ + ["\uC3D9", "\uC3D9"], /* Hangul Syllable */ + ["\uC3DA", "\uC3DA"], /* Hangul Syllable */ + ["\uC3DB", "\uC3DB"], /* Hangul Syllable */ + ["\uC3DC", "\uC3DC"], /* Hangul Syllable */ + ["\uC3DD", "\uC3DD"], /* Hangul Syllable */ + ["\uC3DE", "\uC3DE"], /* Hangul Syllable */ + ["\uC3DF", "\uC3DF"], /* Hangul Syllable */ + ["\uC3E0", "\uC3E0"], /* Hangul Syllable */ + ["\uC3E1", "\uC3E1"], /* Hangul Syllable */ + ["\uC3E2", "\uC3E2"], /* Hangul Syllable */ + ["\uC3E3", "\uC3E3"], /* Hangul Syllable */ + ["\uC3E4", "\uC3E4"], /* Hangul Syllable */ + ["\uC3E5", "\uC3E5"], /* Hangul Syllable */ + ["\uC3E6", "\uC3E6"], /* Hangul Syllable */ + ["\uC3E7", "\uC3E7"], /* Hangul Syllable */ + ["\uC3E8", "\uC3E8"], /* Hangul Syllable */ + ["\uC3E9", "\uC3E9"], /* Hangul Syllable */ + ["\uC3EA", "\uC3EA"], /* Hangul Syllable */ + ["\uC3EB", "\uC3EB"], /* Hangul Syllable */ + ["\uC3EC", "\uC3EC"], /* Hangul Syllable */ + ["\uC3ED", "\uC3ED"], /* Hangul Syllable */ + ["\uC3EE", "\uC3EE"], /* Hangul Syllable */ + ["\uC3EF", "\uC3EF"], /* Hangul Syllable */ + ["\uC3F0", "\uC3F0"], /* Hangul Syllable */ + ["\uC3F1", "\uC3F1"], /* Hangul Syllable */ + ["\uC3F2", "\uC3F2"], /* Hangul Syllable */ + ["\uC3F3", "\uC3F3"], /* Hangul Syllable */ + ["\uC3F4", "\uC3F4"], /* Hangul Syllable */ + ["\uC3F5", "\uC3F5"], /* Hangul Syllable */ + ["\uC3F6", "\uC3F6"], /* Hangul Syllable */ + ["\uC3F7", "\uC3F7"], /* Hangul Syllable */ + ["\uC3F8", "\uC3F8"], /* Hangul Syllable */ + ["\uC3F9", "\uC3F9"], /* Hangul Syllable */ + ["\uC3FA", "\uC3FA"], /* Hangul Syllable */ + ["\uC3FB", "\uC3FB"], /* Hangul Syllable */ + ["\uC3FC", "\uC3FC"], /* Hangul Syllable */ + ["\uC3FD", "\uC3FD"], /* Hangul Syllable */ + ["\uC3FE", "\uC3FE"], /* Hangul Syllable */ + ["\uC3FF", "\uC3FF"], /* Hangul Syllable */ + ["\uC400", "\uC400"], /* Hangul Syllable */ + ["\uC401", "\uC401"], /* Hangul Syllable */ + ["\uC402", "\uC402"], /* Hangul Syllable */ + ["\uC403", "\uC403"], /* Hangul Syllable */ + ["\uC404", "\uC404"], /* Hangul Syllable */ + ["\uC405", "\uC405"], /* Hangul Syllable */ + ["\uC406", "\uC406"], /* Hangul Syllable */ + ["\uC407", "\uC407"], /* Hangul Syllable */ + ["\uC408", "\uC408"], /* Hangul Syllable */ + ["\uC409", "\uC409"], /* Hangul Syllable */ + ["\uC40A", "\uC40A"], /* Hangul Syllable */ + ["\uC40B", "\uC40B"], /* Hangul Syllable */ + ["\uC40C", "\uC40C"], /* Hangul Syllable */ + ["\uC40D", "\uC40D"], /* Hangul Syllable */ + ["\uC40E", "\uC40E"], /* Hangul Syllable */ + ["\uC40F", "\uC40F"], /* Hangul Syllable */ + ["\uC410", "\uC410"], /* Hangul Syllable */ + ["\uC411", "\uC411"], /* Hangul Syllable */ + ["\uC412", "\uC412"], /* Hangul Syllable */ + ["\uC413", "\uC413"], /* Hangul Syllable */ + ["\uC414", "\uC414"], /* Hangul Syllable */ + ["\uC415", "\uC415"], /* Hangul Syllable */ + ["\uC416", "\uC416"], /* Hangul Syllable */ + ["\uC417", "\uC417"], /* Hangul Syllable */ + ["\uC418", "\uC418"], /* Hangul Syllable */ + ["\uC419", "\uC419"], /* Hangul Syllable */ + ["\uC41A", "\uC41A"], /* Hangul Syllable */ + ["\uC41B", "\uC41B"], /* Hangul Syllable */ + ["\uC41C", "\uC41C"], /* Hangul Syllable */ + ["\uC41D", "\uC41D"], /* Hangul Syllable */ + ["\uC41E", "\uC41E"], /* Hangul Syllable */ + ["\uC41F", "\uC41F"], /* Hangul Syllable */ + ["\uC420", "\uC420"], /* Hangul Syllable */ + ["\uC421", "\uC421"], /* Hangul Syllable */ + ["\uC422", "\uC422"], /* Hangul Syllable */ + ["\uC423", "\uC423"], /* Hangul Syllable */ + ["\uC424", "\uC424"], /* Hangul Syllable */ + ["\uC425", "\uC425"], /* Hangul Syllable */ + ["\uC426", "\uC426"], /* Hangul Syllable */ + ["\uC427", "\uC427"], /* Hangul Syllable */ + ["\uC428", "\uC428"], /* Hangul Syllable */ + ["\uC429", "\uC429"], /* Hangul Syllable */ + ["\uC42A", "\uC42A"], /* Hangul Syllable */ + ["\uC42B", "\uC42B"], /* Hangul Syllable */ + ["\uC42C", "\uC42C"], /* Hangul Syllable */ + ["\uC42D", "\uC42D"], /* Hangul Syllable */ + ["\uC42E", "\uC42E"], /* Hangul Syllable */ + ["\uC42F", "\uC42F"], /* Hangul Syllable */ + ["\uC430", "\uC430"], /* Hangul Syllable */ + ["\uC431", "\uC431"], /* Hangul Syllable */ + ["\uC432", "\uC432"], /* Hangul Syllable */ + ["\uC433", "\uC433"], /* Hangul Syllable */ + ["\uC434", "\uC434"], /* Hangul Syllable */ + ["\uC435", "\uC435"], /* Hangul Syllable */ + ["\uC436", "\uC436"], /* Hangul Syllable */ + ["\uC437", "\uC437"], /* Hangul Syllable */ + ["\uC438", "\uC438"], /* Hangul Syllable */ + ["\uC439", "\uC439"], /* Hangul Syllable */ + ["\uC43A", "\uC43A"], /* Hangul Syllable */ + ["\uC43B", "\uC43B"], /* Hangul Syllable */ + ["\uC43C", "\uC43C"], /* Hangul Syllable */ + ["\uC43D", "\uC43D"], /* Hangul Syllable */ + ["\uC43E", "\uC43E"], /* Hangul Syllable */ + ["\uC43F", "\uC43F"], /* Hangul Syllable */ + ["\uC440", "\uC440"], /* Hangul Syllable */ + ["\uC441", "\uC441"], /* Hangul Syllable */ + ["\uC442", "\uC442"], /* Hangul Syllable */ + ["\uC443", "\uC443"], /* Hangul Syllable */ + ["\uC444", "\uC444"], /* Hangul Syllable */ + ["\uC445", "\uC445"], /* Hangul Syllable */ + ["\uC446", "\uC446"], /* Hangul Syllable */ + ["\uC447", "\uC447"], /* Hangul Syllable */ + ["\uC448", "\uC448"], /* Hangul Syllable */ + ["\uC449", "\uC449"], /* Hangul Syllable */ + ["\uC44A", "\uC44A"], /* Hangul Syllable */ + ["\uC44B", "\uC44B"], /* Hangul Syllable */ + ["\uC44C", "\uC44C"], /* Hangul Syllable */ + ["\uC44D", "\uC44D"], /* Hangul Syllable */ + ["\uC44E", "\uC44E"], /* Hangul Syllable */ + ["\uC44F", "\uC44F"], /* Hangul Syllable */ + ["\uC450", "\uC450"], /* Hangul Syllable */ + ["\uC451", "\uC451"], /* Hangul Syllable */ + ["\uC452", "\uC452"], /* Hangul Syllable */ + ["\uC453", "\uC453"], /* Hangul Syllable */ + ["\uC454", "\uC454"], /* Hangul Syllable */ + ["\uC455", "\uC455"], /* Hangul Syllable */ + ["\uC456", "\uC456"], /* Hangul Syllable */ + ["\uC457", "\uC457"], /* Hangul Syllable */ + ["\uC458", "\uC458"], /* Hangul Syllable */ + ["\uC459", "\uC459"], /* Hangul Syllable */ + ["\uC45A", "\uC45A"], /* Hangul Syllable */ + ["\uC45B", "\uC45B"], /* Hangul Syllable */ + ["\uC45C", "\uC45C"], /* Hangul Syllable */ + ["\uC45D", "\uC45D"], /* Hangul Syllable */ + ["\uC45E", "\uC45E"], /* Hangul Syllable */ + ["\uC45F", "\uC45F"], /* Hangul Syllable */ + ["\uC460", "\uC460"], /* Hangul Syllable */ + ["\uC461", "\uC461"], /* Hangul Syllable */ + ["\uC462", "\uC462"], /* Hangul Syllable */ + ["\uC463", "\uC463"], /* Hangul Syllable */ + ["\uC464", "\uC464"], /* Hangul Syllable */ + ["\uC465", "\uC465"], /* Hangul Syllable */ + ["\uC466", "\uC466"], /* Hangul Syllable */ + ["\uC467", "\uC467"], /* Hangul Syllable */ + ["\uC468", "\uC468"], /* Hangul Syllable */ + ["\uC469", "\uC469"], /* Hangul Syllable */ + ["\uC46A", "\uC46A"], /* Hangul Syllable */ + ["\uC46B", "\uC46B"], /* Hangul Syllable */ + ["\uC46C", "\uC46C"], /* Hangul Syllable */ + ["\uC46D", "\uC46D"], /* Hangul Syllable */ + ["\uC46E", "\uC46E"], /* Hangul Syllable */ + ["\uC46F", "\uC46F"], /* Hangul Syllable */ + ["\uC470", "\uC470"], /* Hangul Syllable */ + ["\uC471", "\uC471"], /* Hangul Syllable */ + ["\uC472", "\uC472"], /* Hangul Syllable */ + ["\uC473", "\uC473"], /* Hangul Syllable */ + ["\uC474", "\uC474"], /* Hangul Syllable */ + ["\uC475", "\uC475"], /* Hangul Syllable */ + ["\uC476", "\uC476"], /* Hangul Syllable */ + ["\uC477", "\uC477"], /* Hangul Syllable */ + ["\uC478", "\uC478"], /* Hangul Syllable */ + ["\uC479", "\uC479"], /* Hangul Syllable */ + ["\uC47A", "\uC47A"], /* Hangul Syllable */ + ["\uC47B", "\uC47B"], /* Hangul Syllable */ + ["\uC47C", "\uC47C"], /* Hangul Syllable */ + ["\uC47D", "\uC47D"], /* Hangul Syllable */ + ["\uC47E", "\uC47E"], /* Hangul Syllable */ + ["\uC47F", "\uC47F"], /* Hangul Syllable */ + ["\uC480", "\uC480"], /* Hangul Syllable */ + ["\uC481", "\uC481"], /* Hangul Syllable */ + ["\uC482", "\uC482"], /* Hangul Syllable */ + ["\uC483", "\uC483"], /* Hangul Syllable */ + ["\uC484", "\uC484"], /* Hangul Syllable */ + ["\uC485", "\uC485"], /* Hangul Syllable */ + ["\uC486", "\uC486"], /* Hangul Syllable */ + ["\uC487", "\uC487"], /* Hangul Syllable */ + ["\uC488", "\uC488"], /* Hangul Syllable */ + ["\uC489", "\uC489"], /* Hangul Syllable */ + ["\uC48A", "\uC48A"], /* Hangul Syllable */ + ["\uC48B", "\uC48B"], /* Hangul Syllable */ + ["\uC48C", "\uC48C"], /* Hangul Syllable */ + ["\uC48D", "\uC48D"], /* Hangul Syllable */ + ["\uC48E", "\uC48E"], /* Hangul Syllable */ + ["\uC48F", "\uC48F"], /* Hangul Syllable */ + ["\uC490", "\uC490"], /* Hangul Syllable */ + ["\uC491", "\uC491"], /* Hangul Syllable */ + ["\uC492", "\uC492"], /* Hangul Syllable */ + ["\uC493", "\uC493"], /* Hangul Syllable */ + ["\uC494", "\uC494"], /* Hangul Syllable */ + ["\uC495", "\uC495"], /* Hangul Syllable */ + ["\uC496", "\uC496"], /* Hangul Syllable */ + ["\uC497", "\uC497"], /* Hangul Syllable */ + ["\uC498", "\uC498"], /* Hangul Syllable */ + ["\uC499", "\uC499"], /* Hangul Syllable */ + ["\uC49A", "\uC49A"], /* Hangul Syllable */ + ["\uC49B", "\uC49B"], /* Hangul Syllable */ + ["\uC49C", "\uC49C"], /* Hangul Syllable */ + ["\uC49D", "\uC49D"], /* Hangul Syllable */ + ["\uC49E", "\uC49E"], /* Hangul Syllable */ + ["\uC49F", "\uC49F"], /* Hangul Syllable */ + ["\uC4A0", "\uC4A0"], /* Hangul Syllable */ + ["\uC4A1", "\uC4A1"], /* Hangul Syllable */ + ["\uC4A2", "\uC4A2"], /* Hangul Syllable */ + ["\uC4A3", "\uC4A3"], /* Hangul Syllable */ + ["\uC4A4", "\uC4A4"], /* Hangul Syllable */ + ["\uC4A5", "\uC4A5"], /* Hangul Syllable */ + ["\uC4A6", "\uC4A6"], /* Hangul Syllable */ + ["\uC4A7", "\uC4A7"], /* Hangul Syllable */ + ["\uC4A8", "\uC4A8"], /* Hangul Syllable */ + ["\uC4A9", "\uC4A9"], /* Hangul Syllable */ + ["\uC4AA", "\uC4AA"], /* Hangul Syllable */ + ["\uC4AB", "\uC4AB"], /* Hangul Syllable */ + ["\uC4AC", "\uC4AC"], /* Hangul Syllable */ + ["\uC4AD", "\uC4AD"], /* Hangul Syllable */ + ["\uC4AE", "\uC4AE"], /* Hangul Syllable */ + ["\uC4AF", "\uC4AF"], /* Hangul Syllable */ + ["\uC4B0", "\uC4B0"], /* Hangul Syllable */ + ["\uC4B1", "\uC4B1"], /* Hangul Syllable */ + ["\uC4B2", "\uC4B2"], /* Hangul Syllable */ + ["\uC4B3", "\uC4B3"], /* Hangul Syllable */ + ["\uC4B4", "\uC4B4"], /* Hangul Syllable */ + ["\uC4B5", "\uC4B5"], /* Hangul Syllable */ + ["\uC4B6", "\uC4B6"], /* Hangul Syllable */ + ["\uC4B7", "\uC4B7"], /* Hangul Syllable */ + ["\uC4B8", "\uC4B8"], /* Hangul Syllable */ + ["\uC4B9", "\uC4B9"], /* Hangul Syllable */ + ["\uC4BA", "\uC4BA"], /* Hangul Syllable */ + ["\uC4BB", "\uC4BB"], /* Hangul Syllable */ + ["\uC4BC", "\uC4BC"], /* Hangul Syllable */ + ["\uC4BD", "\uC4BD"], /* Hangul Syllable */ + ["\uC4BE", "\uC4BE"], /* Hangul Syllable */ + ["\uC4BF", "\uC4BF"], /* Hangul Syllable */ + ["\uC4C0", "\uC4C0"], /* Hangul Syllable */ + ["\uC4C1", "\uC4C1"], /* Hangul Syllable */ + ["\uC4C2", "\uC4C2"], /* Hangul Syllable */ + ["\uC4C3", "\uC4C3"], /* Hangul Syllable */ + ["\uC4C4", "\uC4C4"], /* Hangul Syllable */ + ["\uC4C5", "\uC4C5"], /* Hangul Syllable */ + ["\uC4C6", "\uC4C6"], /* Hangul Syllable */ + ["\uC4C7", "\uC4C7"], /* Hangul Syllable */ + ["\uC4C8", "\uC4C8"], /* Hangul Syllable */ + ["\uC4C9", "\uC4C9"], /* Hangul Syllable */ + ["\uC4CA", "\uC4CA"], /* Hangul Syllable */ + ["\uC4CB", "\uC4CB"], /* Hangul Syllable */ + ["\uC4CC", "\uC4CC"], /* Hangul Syllable */ + ["\uC4CD", "\uC4CD"], /* Hangul Syllable */ + ["\uC4CE", "\uC4CE"], /* Hangul Syllable */ + ["\uC4CF", "\uC4CF"], /* Hangul Syllable */ + ["\uC4D0", "\uC4D0"], /* Hangul Syllable */ + ["\uC4D1", "\uC4D1"], /* Hangul Syllable */ + ["\uC4D2", "\uC4D2"], /* Hangul Syllable */ + ["\uC4D3", "\uC4D3"], /* Hangul Syllable */ + ["\uC4D4", "\uC4D4"], /* Hangul Syllable */ + ["\uC4D5", "\uC4D5"], /* Hangul Syllable */ + ["\uC4D6", "\uC4D6"], /* Hangul Syllable */ + ["\uC4D7", "\uC4D7"], /* Hangul Syllable */ + ["\uC4D8", "\uC4D8"], /* Hangul Syllable */ + ["\uC4D9", "\uC4D9"], /* Hangul Syllable */ + ["\uC4DA", "\uC4DA"], /* Hangul Syllable */ + ["\uC4DB", "\uC4DB"], /* Hangul Syllable */ + ["\uC4DC", "\uC4DC"], /* Hangul Syllable */ + ["\uC4DD", "\uC4DD"], /* Hangul Syllable */ + ["\uC4DE", "\uC4DE"], /* Hangul Syllable */ + ["\uC4DF", "\uC4DF"], /* Hangul Syllable */ + ["\uC4E0", "\uC4E0"], /* Hangul Syllable */ + ["\uC4E1", "\uC4E1"], /* Hangul Syllable */ + ["\uC4E2", "\uC4E2"], /* Hangul Syllable */ + ["\uC4E3", "\uC4E3"], /* Hangul Syllable */ + ["\uC4E4", "\uC4E4"], /* Hangul Syllable */ + ["\uC4E5", "\uC4E5"], /* Hangul Syllable */ + ["\uC4E6", "\uC4E6"], /* Hangul Syllable */ + ["\uC4E7", "\uC4E7"], /* Hangul Syllable */ + ["\uC4E8", "\uC4E8"], /* Hangul Syllable */ + ["\uC4E9", "\uC4E9"], /* Hangul Syllable */ + ["\uC4EA", "\uC4EA"], /* Hangul Syllable */ + ["\uC4EB", "\uC4EB"], /* Hangul Syllable */ + ["\uC4EC", "\uC4EC"], /* Hangul Syllable */ + ["\uC4ED", "\uC4ED"], /* Hangul Syllable */ + ["\uC4EE", "\uC4EE"], /* Hangul Syllable */ + ["\uC4EF", "\uC4EF"], /* Hangul Syllable */ + ["\uC4F0", "\uC4F0"], /* Hangul Syllable */ + ["\uC4F1", "\uC4F1"], /* Hangul Syllable */ + ["\uC4F2", "\uC4F2"], /* Hangul Syllable */ + ["\uC4F3", "\uC4F3"], /* Hangul Syllable */ + ["\uC4F4", "\uC4F4"], /* Hangul Syllable */ + ["\uC4F5", "\uC4F5"], /* Hangul Syllable */ + ["\uC4F6", "\uC4F6"], /* Hangul Syllable */ + ["\uC4F7", "\uC4F7"], /* Hangul Syllable */ + ["\uC4F8", "\uC4F8"], /* Hangul Syllable */ + ["\uC4F9", "\uC4F9"], /* Hangul Syllable */ + ["\uC4FA", "\uC4FA"], /* Hangul Syllable */ + ["\uC4FB", "\uC4FB"], /* Hangul Syllable */ + ["\uC4FC", "\uC4FC"], /* Hangul Syllable */ + ["\uC4FD", "\uC4FD"], /* Hangul Syllable */ + ["\uC4FE", "\uC4FE"], /* Hangul Syllable */ + ["\uC4FF", "\uC4FF"], /* Hangul Syllable */ + ["\uC500", "\uC500"], /* Hangul Syllable */ + ["\uC501", "\uC501"], /* Hangul Syllable */ + ["\uC502", "\uC502"], /* Hangul Syllable */ + ["\uC503", "\uC503"], /* Hangul Syllable */ + ["\uC504", "\uC504"], /* Hangul Syllable */ + ["\uC505", "\uC505"], /* Hangul Syllable */ + ["\uC506", "\uC506"], /* Hangul Syllable */ + ["\uC507", "\uC507"], /* Hangul Syllable */ + ["\uC508", "\uC508"], /* Hangul Syllable */ + ["\uC509", "\uC509"], /* Hangul Syllable */ + ["\uC50A", "\uC50A"], /* Hangul Syllable */ + ["\uC50B", "\uC50B"], /* Hangul Syllable */ + ["\uC50C", "\uC50C"], /* Hangul Syllable */ + ["\uC50D", "\uC50D"], /* Hangul Syllable */ + ["\uC50E", "\uC50E"], /* Hangul Syllable */ + ["\uC50F", "\uC50F"], /* Hangul Syllable */ + ["\uC510", "\uC510"], /* Hangul Syllable */ + ["\uC511", "\uC511"], /* Hangul Syllable */ + ["\uC512", "\uC512"], /* Hangul Syllable */ + ["\uC513", "\uC513"], /* Hangul Syllable */ + ["\uC514", "\uC514"], /* Hangul Syllable */ + ["\uC515", "\uC515"], /* Hangul Syllable */ + ["\uC516", "\uC516"], /* Hangul Syllable */ + ["\uC517", "\uC517"], /* Hangul Syllable */ + ["\uC518", "\uC518"], /* Hangul Syllable */ + ["\uC519", "\uC519"], /* Hangul Syllable */ + ["\uC51A", "\uC51A"], /* Hangul Syllable */ + ["\uC51B", "\uC51B"], /* Hangul Syllable */ + ["\uC51C", "\uC51C"], /* Hangul Syllable */ + ["\uC51D", "\uC51D"], /* Hangul Syllable */ + ["\uC51E", "\uC51E"], /* Hangul Syllable */ + ["\uC51F", "\uC51F"], /* Hangul Syllable */ + ["\uC520", "\uC520"], /* Hangul Syllable */ + ["\uC521", "\uC521"], /* Hangul Syllable */ + ["\uC522", "\uC522"], /* Hangul Syllable */ + ["\uC523", "\uC523"], /* Hangul Syllable */ + ["\uC524", "\uC524"], /* Hangul Syllable */ + ["\uC525", "\uC525"], /* Hangul Syllable */ + ["\uC526", "\uC526"], /* Hangul Syllable */ + ["\uC527", "\uC527"], /* Hangul Syllable */ + ["\uC528", "\uC528"], /* Hangul Syllable */ + ["\uC529", "\uC529"], /* Hangul Syllable */ + ["\uC52A", "\uC52A"], /* Hangul Syllable */ + ["\uC52B", "\uC52B"], /* Hangul Syllable */ + ["\uC52C", "\uC52C"], /* Hangul Syllable */ + ["\uC52D", "\uC52D"], /* Hangul Syllable */ + ["\uC52E", "\uC52E"], /* Hangul Syllable */ + ["\uC52F", "\uC52F"], /* Hangul Syllable */ + ["\uC530", "\uC530"], /* Hangul Syllable */ + ["\uC531", "\uC531"], /* Hangul Syllable */ + ["\uC532", "\uC532"], /* Hangul Syllable */ + ["\uC533", "\uC533"], /* Hangul Syllable */ + ["\uC534", "\uC534"], /* Hangul Syllable */ + ["\uC535", "\uC535"], /* Hangul Syllable */ + ["\uC536", "\uC536"], /* Hangul Syllable */ + ["\uC537", "\uC537"], /* Hangul Syllable */ + ["\uC538", "\uC538"], /* Hangul Syllable */ + ["\uC539", "\uC539"], /* Hangul Syllable */ + ["\uC53A", "\uC53A"], /* Hangul Syllable */ + ["\uC53B", "\uC53B"], /* Hangul Syllable */ + ["\uC53C", "\uC53C"], /* Hangul Syllable */ + ["\uC53D", "\uC53D"], /* Hangul Syllable */ + ["\uC53E", "\uC53E"], /* Hangul Syllable */ + ["\uC53F", "\uC53F"], /* Hangul Syllable */ + ["\uC540", "\uC540"], /* Hangul Syllable */ + ["\uC541", "\uC541"], /* Hangul Syllable */ + ["\uC542", "\uC542"], /* Hangul Syllable */ + ["\uC543", "\uC543"], /* Hangul Syllable */ + ["\uC544", "\uC544"], /* Hangul Syllable */ + ["\uC545", "\uC545"], /* Hangul Syllable */ + ["\uC546", "\uC546"], /* Hangul Syllable */ + ["\uC547", "\uC547"], /* Hangul Syllable */ + ["\uC548", "\uC548"], /* Hangul Syllable */ + ["\uC549", "\uC549"], /* Hangul Syllable */ + ["\uC54A", "\uC54A"], /* Hangul Syllable */ + ["\uC54B", "\uC54B"], /* Hangul Syllable */ + ["\uC54C", "\uC54C"], /* Hangul Syllable */ + ["\uC54D", "\uC54D"], /* Hangul Syllable */ + ["\uC54E", "\uC54E"], /* Hangul Syllable */ + ["\uC54F", "\uC54F"], /* Hangul Syllable */ + ["\uC550", "\uC550"], /* Hangul Syllable */ + ["\uC551", "\uC551"], /* Hangul Syllable */ + ["\uC552", "\uC552"], /* Hangul Syllable */ + ["\uC553", "\uC553"], /* Hangul Syllable */ + ["\uC554", "\uC554"], /* Hangul Syllable */ + ["\uC555", "\uC555"], /* Hangul Syllable */ + ["\uC556", "\uC556"], /* Hangul Syllable */ + ["\uC557", "\uC557"], /* Hangul Syllable */ + ["\uC558", "\uC558"], /* Hangul Syllable */ + ["\uC559", "\uC559"], /* Hangul Syllable */ + ["\uC55A", "\uC55A"], /* Hangul Syllable */ + ["\uC55B", "\uC55B"], /* Hangul Syllable */ + ["\uC55C", "\uC55C"], /* Hangul Syllable */ + ["\uC55D", "\uC55D"], /* Hangul Syllable */ + ["\uC55E", "\uC55E"], /* Hangul Syllable */ + ["\uC55F", "\uC55F"], /* Hangul Syllable */ + ["\uC560", "\uC560"], /* Hangul Syllable */ + ["\uC561", "\uC561"], /* Hangul Syllable */ + ["\uC562", "\uC562"], /* Hangul Syllable */ + ["\uC563", "\uC563"], /* Hangul Syllable */ + ["\uC564", "\uC564"], /* Hangul Syllable */ + ["\uC565", "\uC565"], /* Hangul Syllable */ + ["\uC566", "\uC566"], /* Hangul Syllable */ + ["\uC567", "\uC567"], /* Hangul Syllable */ + ["\uC568", "\uC568"], /* Hangul Syllable */ + ["\uC569", "\uC569"], /* Hangul Syllable */ + ["\uC56A", "\uC56A"], /* Hangul Syllable */ + ["\uC56B", "\uC56B"], /* Hangul Syllable */ + ["\uC56C", "\uC56C"], /* Hangul Syllable */ + ["\uC56D", "\uC56D"], /* Hangul Syllable */ + ["\uC56E", "\uC56E"], /* Hangul Syllable */ + ["\uC56F", "\uC56F"], /* Hangul Syllable */ + ["\uC570", "\uC570"], /* Hangul Syllable */ + ["\uC571", "\uC571"], /* Hangul Syllable */ + ["\uC572", "\uC572"], /* Hangul Syllable */ + ["\uC573", "\uC573"], /* Hangul Syllable */ + ["\uC574", "\uC574"], /* Hangul Syllable */ + ["\uC575", "\uC575"], /* Hangul Syllable */ + ["\uC576", "\uC576"], /* Hangul Syllable */ + ["\uC577", "\uC577"], /* Hangul Syllable */ + ["\uC578", "\uC578"], /* Hangul Syllable */ + ["\uC579", "\uC579"], /* Hangul Syllable */ + ["\uC57A", "\uC57A"], /* Hangul Syllable */ + ["\uC57B", "\uC57B"], /* Hangul Syllable */ + ["\uC57C", "\uC57C"], /* Hangul Syllable */ + ["\uC57D", "\uC57D"], /* Hangul Syllable */ + ["\uC57E", "\uC57E"], /* Hangul Syllable */ + ["\uC57F", "\uC57F"], /* Hangul Syllable */ + ["\uC580", "\uC580"], /* Hangul Syllable */ + ["\uC581", "\uC581"], /* Hangul Syllable */ + ["\uC582", "\uC582"], /* Hangul Syllable */ + ["\uC583", "\uC583"], /* Hangul Syllable */ + ["\uC584", "\uC584"], /* Hangul Syllable */ + ["\uC585", "\uC585"], /* Hangul Syllable */ + ["\uC586", "\uC586"], /* Hangul Syllable */ + ["\uC587", "\uC587"], /* Hangul Syllable */ + ["\uC588", "\uC588"], /* Hangul Syllable */ + ["\uC589", "\uC589"], /* Hangul Syllable */ + ["\uC58A", "\uC58A"], /* Hangul Syllable */ + ["\uC58B", "\uC58B"], /* Hangul Syllable */ + ["\uC58C", "\uC58C"], /* Hangul Syllable */ + ["\uC58D", "\uC58D"], /* Hangul Syllable */ + ["\uC58E", "\uC58E"], /* Hangul Syllable */ + ["\uC58F", "\uC58F"], /* Hangul Syllable */ + ["\uC590", "\uC590"], /* Hangul Syllable */ + ["\uC591", "\uC591"], /* Hangul Syllable */ + ["\uC592", "\uC592"], /* Hangul Syllable */ + ["\uC593", "\uC593"], /* Hangul Syllable */ + ["\uC594", "\uC594"], /* Hangul Syllable */ + ["\uC595", "\uC595"], /* Hangul Syllable */ + ["\uC596", "\uC596"], /* Hangul Syllable */ + ["\uC597", "\uC597"], /* Hangul Syllable */ + ["\uC598", "\uC598"], /* Hangul Syllable */ + ["\uC599", "\uC599"], /* Hangul Syllable */ + ["\uC59A", "\uC59A"], /* Hangul Syllable */ + ["\uC59B", "\uC59B"], /* Hangul Syllable */ + ["\uC59C", "\uC59C"], /* Hangul Syllable */ + ["\uC59D", "\uC59D"], /* Hangul Syllable */ + ["\uC59E", "\uC59E"], /* Hangul Syllable */ + ["\uC59F", "\uC59F"], /* Hangul Syllable */ + ["\uC5A0", "\uC5A0"], /* Hangul Syllable */ + ["\uC5A1", "\uC5A1"], /* Hangul Syllable */ + ["\uC5A2", "\uC5A2"], /* Hangul Syllable */ + ["\uC5A3", "\uC5A3"], /* Hangul Syllable */ + ["\uC5A4", "\uC5A4"], /* Hangul Syllable */ + ["\uC5A5", "\uC5A5"], /* Hangul Syllable */ + ["\uC5A6", "\uC5A6"], /* Hangul Syllable */ + ["\uC5A7", "\uC5A7"], /* Hangul Syllable */ + ["\uC5A8", "\uC5A8"], /* Hangul Syllable */ + ["\uC5A9", "\uC5A9"], /* Hangul Syllable */ + ["\uC5AA", "\uC5AA"], /* Hangul Syllable */ + ["\uC5AB", "\uC5AB"], /* Hangul Syllable */ + ["\uC5AC", "\uC5AC"], /* Hangul Syllable */ + ["\uC5AD", "\uC5AD"], /* Hangul Syllable */ + ["\uC5AE", "\uC5AE"], /* Hangul Syllable */ + ["\uC5AF", "\uC5AF"], /* Hangul Syllable */ + ["\uC5B0", "\uC5B0"], /* Hangul Syllable */ + ["\uC5B1", "\uC5B1"], /* Hangul Syllable */ + ["\uC5B2", "\uC5B2"], /* Hangul Syllable */ + ["\uC5B3", "\uC5B3"], /* Hangul Syllable */ + ["\uC5B4", "\uC5B4"], /* Hangul Syllable */ + ["\uC5B5", "\uC5B5"], /* Hangul Syllable */ + ["\uC5B6", "\uC5B6"], /* Hangul Syllable */ + ["\uC5B7", "\uC5B7"], /* Hangul Syllable */ + ["\uC5B8", "\uC5B8"], /* Hangul Syllable */ + ["\uC5B9", "\uC5B9"], /* Hangul Syllable */ + ["\uC5BA", "\uC5BA"], /* Hangul Syllable */ + ["\uC5BB", "\uC5BB"], /* Hangul Syllable */ + ["\uC5BC", "\uC5BC"], /* Hangul Syllable */ + ["\uC5BD", "\uC5BD"], /* Hangul Syllable */ + ["\uC5BE", "\uC5BE"], /* Hangul Syllable */ + ["\uC5BF", "\uC5BF"], /* Hangul Syllable */ + ["\uC5C0", "\uC5C0"], /* Hangul Syllable */ + ["\uC5C1", "\uC5C1"], /* Hangul Syllable */ + ["\uC5C2", "\uC5C2"], /* Hangul Syllable */ + ["\uC5C3", "\uC5C3"], /* Hangul Syllable */ + ["\uC5C4", "\uC5C4"], /* Hangul Syllable */ + ["\uC5C5", "\uC5C5"], /* Hangul Syllable */ + ["\uC5C6", "\uC5C6"], /* Hangul Syllable */ + ["\uC5C7", "\uC5C7"], /* Hangul Syllable */ + ["\uC5C8", "\uC5C8"], /* Hangul Syllable */ + ["\uC5C9", "\uC5C9"], /* Hangul Syllable */ + ["\uC5CA", "\uC5CA"], /* Hangul Syllable */ + ["\uC5CB", "\uC5CB"], /* Hangul Syllable */ + ["\uC5CC", "\uC5CC"], /* Hangul Syllable */ + ["\uC5CD", "\uC5CD"], /* Hangul Syllable */ + ["\uC5CE", "\uC5CE"], /* Hangul Syllable */ + ["\uC5CF", "\uC5CF"], /* Hangul Syllable */ + ["\uC5D0", "\uC5D0"], /* Hangul Syllable */ + ["\uC5D1", "\uC5D1"], /* Hangul Syllable */ + ["\uC5D2", "\uC5D2"], /* Hangul Syllable */ + ["\uC5D3", "\uC5D3"], /* Hangul Syllable */ + ["\uC5D4", "\uC5D4"], /* Hangul Syllable */ + ["\uC5D5", "\uC5D5"], /* Hangul Syllable */ + ["\uC5D6", "\uC5D6"], /* Hangul Syllable */ + ["\uC5D7", "\uC5D7"], /* Hangul Syllable */ + ["\uC5D8", "\uC5D8"], /* Hangul Syllable */ + ["\uC5D9", "\uC5D9"], /* Hangul Syllable */ + ["\uC5DA", "\uC5DA"], /* Hangul Syllable */ + ["\uC5DB", "\uC5DB"], /* Hangul Syllable */ + ["\uC5DC", "\uC5DC"], /* Hangul Syllable */ + ["\uC5DD", "\uC5DD"], /* Hangul Syllable */ + ["\uC5DE", "\uC5DE"], /* Hangul Syllable */ + ["\uC5DF", "\uC5DF"], /* Hangul Syllable */ + ["\uC5E0", "\uC5E0"], /* Hangul Syllable */ + ["\uC5E1", "\uC5E1"], /* Hangul Syllable */ + ["\uC5E2", "\uC5E2"], /* Hangul Syllable */ + ["\uC5E3", "\uC5E3"], /* Hangul Syllable */ + ["\uC5E4", "\uC5E4"], /* Hangul Syllable */ + ["\uC5E5", "\uC5E5"], /* Hangul Syllable */ + ["\uC5E6", "\uC5E6"], /* Hangul Syllable */ + ["\uC5E7", "\uC5E7"], /* Hangul Syllable */ + ["\uC5E8", "\uC5E8"], /* Hangul Syllable */ + ["\uC5E9", "\uC5E9"], /* Hangul Syllable */ + ["\uC5EA", "\uC5EA"], /* Hangul Syllable */ + ["\uC5EB", "\uC5EB"], /* Hangul Syllable */ + ["\uC5EC", "\uC5EC"], /* Hangul Syllable */ + ["\uC5ED", "\uC5ED"], /* Hangul Syllable */ + ["\uC5EE", "\uC5EE"], /* Hangul Syllable */ + ["\uC5EF", "\uC5EF"], /* Hangul Syllable */ + ["\uC5F0", "\uC5F0"], /* Hangul Syllable */ + ["\uC5F1", "\uC5F1"], /* Hangul Syllable */ + ["\uC5F2", "\uC5F2"], /* Hangul Syllable */ + ["\uC5F3", "\uC5F3"], /* Hangul Syllable */ + ["\uC5F4", "\uC5F4"], /* Hangul Syllable */ + ["\uC5F5", "\uC5F5"], /* Hangul Syllable */ + ["\uC5F6", "\uC5F6"], /* Hangul Syllable */ + ["\uC5F7", "\uC5F7"], /* Hangul Syllable */ + ["\uC5F8", "\uC5F8"], /* Hangul Syllable */ + ["\uC5F9", "\uC5F9"], /* Hangul Syllable */ + ["\uC5FA", "\uC5FA"], /* Hangul Syllable */ + ["\uC5FB", "\uC5FB"], /* Hangul Syllable */ + ["\uC5FC", "\uC5FC"], /* Hangul Syllable */ + ["\uC5FD", "\uC5FD"], /* Hangul Syllable */ + ["\uC5FE", "\uC5FE"], /* Hangul Syllable */ + ["\uC5FF", "\uC5FF"], /* Hangul Syllable */ + ["\uC600", "\uC600"], /* Hangul Syllable */ + ["\uC601", "\uC601"], /* Hangul Syllable */ + ["\uC602", "\uC602"], /* Hangul Syllable */ + ["\uC603", "\uC603"], /* Hangul Syllable */ + ["\uC604", "\uC604"], /* Hangul Syllable */ + ["\uC605", "\uC605"], /* Hangul Syllable */ + ["\uC606", "\uC606"], /* Hangul Syllable */ + ["\uC607", "\uC607"], /* Hangul Syllable */ + ["\uC608", "\uC608"], /* Hangul Syllable */ + ["\uC609", "\uC609"], /* Hangul Syllable */ + ["\uC60A", "\uC60A"], /* Hangul Syllable */ + ["\uC60B", "\uC60B"], /* Hangul Syllable */ + ["\uC60C", "\uC60C"], /* Hangul Syllable */ + ["\uC60D", "\uC60D"], /* Hangul Syllable */ + ["\uC60E", "\uC60E"], /* Hangul Syllable */ + ["\uC60F", "\uC60F"], /* Hangul Syllable */ + ["\uC610", "\uC610"], /* Hangul Syllable */ + ["\uC611", "\uC611"], /* Hangul Syllable */ + ["\uC612", "\uC612"], /* Hangul Syllable */ + ["\uC613", "\uC613"], /* Hangul Syllable */ + ["\uC614", "\uC614"], /* Hangul Syllable */ + ["\uC615", "\uC615"], /* Hangul Syllable */ + ["\uC616", "\uC616"], /* Hangul Syllable */ + ["\uC617", "\uC617"], /* Hangul Syllable */ + ["\uC618", "\uC618"], /* Hangul Syllable */ + ["\uC619", "\uC619"], /* Hangul Syllable */ + ["\uC61A", "\uC61A"], /* Hangul Syllable */ + ["\uC61B", "\uC61B"], /* Hangul Syllable */ + ["\uC61C", "\uC61C"], /* Hangul Syllable */ + ["\uC61D", "\uC61D"], /* Hangul Syllable */ + ["\uC61E", "\uC61E"], /* Hangul Syllable */ + ["\uC61F", "\uC61F"], /* Hangul Syllable */ + ["\uC620", "\uC620"], /* Hangul Syllable */ + ["\uC621", "\uC621"], /* Hangul Syllable */ + ["\uC622", "\uC622"], /* Hangul Syllable */ + ["\uC623", "\uC623"], /* Hangul Syllable */ + ["\uC624", "\uC624"], /* Hangul Syllable */ + ["\uC625", "\uC625"], /* Hangul Syllable */ + ["\uC626", "\uC626"], /* Hangul Syllable */ + ["\uC627", "\uC627"], /* Hangul Syllable */ + ["\uC628", "\uC628"], /* Hangul Syllable */ + ["\uC629", "\uC629"], /* Hangul Syllable */ + ["\uC62A", "\uC62A"], /* Hangul Syllable */ + ["\uC62B", "\uC62B"], /* Hangul Syllable */ + ["\uC62C", "\uC62C"], /* Hangul Syllable */ + ["\uC62D", "\uC62D"], /* Hangul Syllable */ + ["\uC62E", "\uC62E"], /* Hangul Syllable */ + ["\uC62F", "\uC62F"], /* Hangul Syllable */ + ["\uC630", "\uC630"], /* Hangul Syllable */ + ["\uC631", "\uC631"], /* Hangul Syllable */ + ["\uC632", "\uC632"], /* Hangul Syllable */ + ["\uC633", "\uC633"], /* Hangul Syllable */ + ["\uC634", "\uC634"], /* Hangul Syllable */ + ["\uC635", "\uC635"], /* Hangul Syllable */ + ["\uC636", "\uC636"], /* Hangul Syllable */ + ["\uC637", "\uC637"], /* Hangul Syllable */ + ["\uC638", "\uC638"], /* Hangul Syllable */ + ["\uC639", "\uC639"], /* Hangul Syllable */ + ["\uC63A", "\uC63A"], /* Hangul Syllable */ + ["\uC63B", "\uC63B"], /* Hangul Syllable */ + ["\uC63C", "\uC63C"], /* Hangul Syllable */ + ["\uC63D", "\uC63D"], /* Hangul Syllable */ + ["\uC63E", "\uC63E"], /* Hangul Syllable */ + ["\uC63F", "\uC63F"], /* Hangul Syllable */ + ["\uC640", "\uC640"], /* Hangul Syllable */ + ["\uC641", "\uC641"], /* Hangul Syllable */ + ["\uC642", "\uC642"], /* Hangul Syllable */ + ["\uC643", "\uC643"], /* Hangul Syllable */ + ["\uC644", "\uC644"], /* Hangul Syllable */ + ["\uC645", "\uC645"], /* Hangul Syllable */ + ["\uC646", "\uC646"], /* Hangul Syllable */ + ["\uC647", "\uC647"], /* Hangul Syllable */ + ["\uC648", "\uC648"], /* Hangul Syllable */ + ["\uC649", "\uC649"], /* Hangul Syllable */ + ["\uC64A", "\uC64A"], /* Hangul Syllable */ + ["\uC64B", "\uC64B"], /* Hangul Syllable */ + ["\uC64C", "\uC64C"], /* Hangul Syllable */ + ["\uC64D", "\uC64D"], /* Hangul Syllable */ + ["\uC64E", "\uC64E"], /* Hangul Syllable */ + ["\uC64F", "\uC64F"], /* Hangul Syllable */ + ["\uC650", "\uC650"], /* Hangul Syllable */ + ["\uC651", "\uC651"], /* Hangul Syllable */ + ["\uC652", "\uC652"], /* Hangul Syllable */ + ["\uC653", "\uC653"], /* Hangul Syllable */ + ["\uC654", "\uC654"], /* Hangul Syllable */ + ["\uC655", "\uC655"], /* Hangul Syllable */ + ["\uC656", "\uC656"], /* Hangul Syllable */ + ["\uC657", "\uC657"], /* Hangul Syllable */ + ["\uC658", "\uC658"], /* Hangul Syllable */ + ["\uC659", "\uC659"], /* Hangul Syllable */ + ["\uC65A", "\uC65A"], /* Hangul Syllable */ + ["\uC65B", "\uC65B"], /* Hangul Syllable */ + ["\uC65C", "\uC65C"], /* Hangul Syllable */ + ["\uC65D", "\uC65D"], /* Hangul Syllable */ + ["\uC65E", "\uC65E"], /* Hangul Syllable */ + ["\uC65F", "\uC65F"], /* Hangul Syllable */ + ["\uC660", "\uC660"], /* Hangul Syllable */ + ["\uC661", "\uC661"], /* Hangul Syllable */ + ["\uC662", "\uC662"], /* Hangul Syllable */ + ["\uC663", "\uC663"], /* Hangul Syllable */ + ["\uC664", "\uC664"], /* Hangul Syllable */ + ["\uC665", "\uC665"], /* Hangul Syllable */ + ["\uC666", "\uC666"], /* Hangul Syllable */ + ["\uC667", "\uC667"], /* Hangul Syllable */ + ["\uC668", "\uC668"], /* Hangul Syllable */ + ["\uC669", "\uC669"], /* Hangul Syllable */ + ["\uC66A", "\uC66A"], /* Hangul Syllable */ + ["\uC66B", "\uC66B"], /* Hangul Syllable */ + ["\uC66C", "\uC66C"], /* Hangul Syllable */ + ["\uC66D", "\uC66D"], /* Hangul Syllable */ + ["\uC66E", "\uC66E"], /* Hangul Syllable */ + ["\uC66F", "\uC66F"], /* Hangul Syllable */ + ["\uC670", "\uC670"], /* Hangul Syllable */ + ["\uC671", "\uC671"], /* Hangul Syllable */ + ["\uC672", "\uC672"], /* Hangul Syllable */ + ["\uC673", "\uC673"], /* Hangul Syllable */ + ["\uC674", "\uC674"], /* Hangul Syllable */ + ["\uC675", "\uC675"], /* Hangul Syllable */ + ["\uC676", "\uC676"], /* Hangul Syllable */ + ["\uC677", "\uC677"], /* Hangul Syllable */ + ["\uC678", "\uC678"], /* Hangul Syllable */ + ["\uC679", "\uC679"], /* Hangul Syllable */ + ["\uC67A", "\uC67A"], /* Hangul Syllable */ + ["\uC67B", "\uC67B"], /* Hangul Syllable */ + ["\uC67C", "\uC67C"], /* Hangul Syllable */ + ["\uC67D", "\uC67D"], /* Hangul Syllable */ + ["\uC67E", "\uC67E"], /* Hangul Syllable */ + ["\uC67F", "\uC67F"], /* Hangul Syllable */ + ["\uC680", "\uC680"], /* Hangul Syllable */ + ["\uC681", "\uC681"], /* Hangul Syllable */ + ["\uC682", "\uC682"], /* Hangul Syllable */ + ["\uC683", "\uC683"], /* Hangul Syllable */ + ["\uC684", "\uC684"], /* Hangul Syllable */ + ["\uC685", "\uC685"], /* Hangul Syllable */ + ["\uC686", "\uC686"], /* Hangul Syllable */ + ["\uC687", "\uC687"], /* Hangul Syllable */ + ["\uC688", "\uC688"], /* Hangul Syllable */ + ["\uC689", "\uC689"], /* Hangul Syllable */ + ["\uC68A", "\uC68A"], /* Hangul Syllable */ + ["\uC68B", "\uC68B"], /* Hangul Syllable */ + ["\uC68C", "\uC68C"], /* Hangul Syllable */ + ["\uC68D", "\uC68D"], /* Hangul Syllable */ + ["\uC68E", "\uC68E"], /* Hangul Syllable */ + ["\uC68F", "\uC68F"], /* Hangul Syllable */ + ["\uC690", "\uC690"], /* Hangul Syllable */ + ["\uC691", "\uC691"], /* Hangul Syllable */ + ["\uC692", "\uC692"], /* Hangul Syllable */ + ["\uC693", "\uC693"], /* Hangul Syllable */ + ["\uC694", "\uC694"], /* Hangul Syllable */ + ["\uC695", "\uC695"], /* Hangul Syllable */ + ["\uC696", "\uC696"], /* Hangul Syllable */ + ["\uC697", "\uC697"], /* Hangul Syllable */ + ["\uC698", "\uC698"], /* Hangul Syllable */ + ["\uC699", "\uC699"], /* Hangul Syllable */ + ["\uC69A", "\uC69A"], /* Hangul Syllable */ + ["\uC69B", "\uC69B"], /* Hangul Syllable */ + ["\uC69C", "\uC69C"], /* Hangul Syllable */ + ["\uC69D", "\uC69D"], /* Hangul Syllable */ + ["\uC69E", "\uC69E"], /* Hangul Syllable */ + ["\uC69F", "\uC69F"], /* Hangul Syllable */ + ["\uC6A0", "\uC6A0"], /* Hangul Syllable */ + ["\uC6A1", "\uC6A1"], /* Hangul Syllable */ + ["\uC6A2", "\uC6A2"], /* Hangul Syllable */ + ["\uC6A3", "\uC6A3"], /* Hangul Syllable */ + ["\uC6A4", "\uC6A4"], /* Hangul Syllable */ + ["\uC6A5", "\uC6A5"], /* Hangul Syllable */ + ["\uC6A6", "\uC6A6"], /* Hangul Syllable */ + ["\uC6A7", "\uC6A7"], /* Hangul Syllable */ + ["\uC6A8", "\uC6A8"], /* Hangul Syllable */ + ["\uC6A9", "\uC6A9"], /* Hangul Syllable */ + ["\uC6AA", "\uC6AA"], /* Hangul Syllable */ + ["\uC6AB", "\uC6AB"], /* Hangul Syllable */ + ["\uC6AC", "\uC6AC"], /* Hangul Syllable */ + ["\uC6AD", "\uC6AD"], /* Hangul Syllable */ + ["\uC6AE", "\uC6AE"], /* Hangul Syllable */ + ["\uC6AF", "\uC6AF"], /* Hangul Syllable */ + ["\uC6B0", "\uC6B0"], /* Hangul Syllable */ + ["\uC6B1", "\uC6B1"], /* Hangul Syllable */ + ["\uC6B2", "\uC6B2"], /* Hangul Syllable */ + ["\uC6B3", "\uC6B3"], /* Hangul Syllable */ + ["\uC6B4", "\uC6B4"], /* Hangul Syllable */ + ["\uC6B5", "\uC6B5"], /* Hangul Syllable */ + ["\uC6B6", "\uC6B6"], /* Hangul Syllable */ + ["\uC6B7", "\uC6B7"], /* Hangul Syllable */ + ["\uC6B8", "\uC6B8"], /* Hangul Syllable */ + ["\uC6B9", "\uC6B9"], /* Hangul Syllable */ + ["\uC6BA", "\uC6BA"], /* Hangul Syllable */ + ["\uC6BB", "\uC6BB"], /* Hangul Syllable */ + ["\uC6BC", "\uC6BC"], /* Hangul Syllable */ + ["\uC6BD", "\uC6BD"], /* Hangul Syllable */ + ["\uC6BE", "\uC6BE"], /* Hangul Syllable */ + ["\uC6BF", "\uC6BF"], /* Hangul Syllable */ + ["\uC6C0", "\uC6C0"], /* Hangul Syllable */ + ["\uC6C1", "\uC6C1"], /* Hangul Syllable */ + ["\uC6C2", "\uC6C2"], /* Hangul Syllable */ + ["\uC6C3", "\uC6C3"], /* Hangul Syllable */ + ["\uC6C4", "\uC6C4"], /* Hangul Syllable */ + ["\uC6C5", "\uC6C5"], /* Hangul Syllable */ + ["\uC6C6", "\uC6C6"], /* Hangul Syllable */ + ["\uC6C7", "\uC6C7"], /* Hangul Syllable */ + ["\uC6C8", "\uC6C8"], /* Hangul Syllable */ + ["\uC6C9", "\uC6C9"], /* Hangul Syllable */ + ["\uC6CA", "\uC6CA"], /* Hangul Syllable */ + ["\uC6CB", "\uC6CB"], /* Hangul Syllable */ + ["\uC6CC", "\uC6CC"], /* Hangul Syllable */ + ["\uC6CD", "\uC6CD"], /* Hangul Syllable */ + ["\uC6CE", "\uC6CE"], /* Hangul Syllable */ + ["\uC6CF", "\uC6CF"], /* Hangul Syllable */ + ["\uC6D0", "\uC6D0"], /* Hangul Syllable */ + ["\uC6D1", "\uC6D1"], /* Hangul Syllable */ + ["\uC6D2", "\uC6D2"], /* Hangul Syllable */ + ["\uC6D3", "\uC6D3"], /* Hangul Syllable */ + ["\uC6D4", "\uC6D4"], /* Hangul Syllable */ + ["\uC6D5", "\uC6D5"], /* Hangul Syllable */ + ["\uC6D6", "\uC6D6"], /* Hangul Syllable */ + ["\uC6D7", "\uC6D7"], /* Hangul Syllable */ + ["\uC6D8", "\uC6D8"], /* Hangul Syllable */ + ["\uC6D9", "\uC6D9"], /* Hangul Syllable */ + ["\uC6DA", "\uC6DA"], /* Hangul Syllable */ + ["\uC6DB", "\uC6DB"], /* Hangul Syllable */ + ["\uC6DC", "\uC6DC"], /* Hangul Syllable */ + ["\uC6DD", "\uC6DD"], /* Hangul Syllable */ + ["\uC6DE", "\uC6DE"], /* Hangul Syllable */ + ["\uC6DF", "\uC6DF"], /* Hangul Syllable */ + ["\uC6E0", "\uC6E0"], /* Hangul Syllable */ + ["\uC6E1", "\uC6E1"], /* Hangul Syllable */ + ["\uC6E2", "\uC6E2"], /* Hangul Syllable */ + ["\uC6E3", "\uC6E3"], /* Hangul Syllable */ + ["\uC6E4", "\uC6E4"], /* Hangul Syllable */ + ["\uC6E5", "\uC6E5"], /* Hangul Syllable */ + ["\uC6E6", "\uC6E6"], /* Hangul Syllable */ + ["\uC6E7", "\uC6E7"], /* Hangul Syllable */ + ["\uC6E8", "\uC6E8"], /* Hangul Syllable */ + ["\uC6E9", "\uC6E9"], /* Hangul Syllable */ + ["\uC6EA", "\uC6EA"], /* Hangul Syllable */ + ["\uC6EB", "\uC6EB"], /* Hangul Syllable */ + ["\uC6EC", "\uC6EC"], /* Hangul Syllable */ + ["\uC6ED", "\uC6ED"], /* Hangul Syllable */ + ["\uC6EE", "\uC6EE"], /* Hangul Syllable */ + ["\uC6EF", "\uC6EF"], /* Hangul Syllable */ + ["\uC6F0", "\uC6F0"], /* Hangul Syllable */ + ["\uC6F1", "\uC6F1"], /* Hangul Syllable */ + ["\uC6F2", "\uC6F2"], /* Hangul Syllable */ + ["\uC6F3", "\uC6F3"], /* Hangul Syllable */ + ["\uC6F4", "\uC6F4"], /* Hangul Syllable */ + ["\uC6F5", "\uC6F5"], /* Hangul Syllable */ + ["\uC6F6", "\uC6F6"], /* Hangul Syllable */ + ["\uC6F7", "\uC6F7"], /* Hangul Syllable */ + ["\uC6F8", "\uC6F8"], /* Hangul Syllable */ + ["\uC6F9", "\uC6F9"], /* Hangul Syllable */ + ["\uC6FA", "\uC6FA"], /* Hangul Syllable */ + ["\uC6FB", "\uC6FB"], /* Hangul Syllable */ + ["\uC6FC", "\uC6FC"], /* Hangul Syllable */ + ["\uC6FD", "\uC6FD"], /* Hangul Syllable */ + ["\uC6FE", "\uC6FE"], /* Hangul Syllable */ + ["\uC6FF", "\uC6FF"], /* Hangul Syllable */ + ["\uC700", "\uC700"], /* Hangul Syllable */ + ["\uC701", "\uC701"], /* Hangul Syllable */ + ["\uC702", "\uC702"], /* Hangul Syllable */ + ["\uC703", "\uC703"], /* Hangul Syllable */ + ["\uC704", "\uC704"], /* Hangul Syllable */ + ["\uC705", "\uC705"], /* Hangul Syllable */ + ["\uC706", "\uC706"], /* Hangul Syllable */ + ["\uC707", "\uC707"], /* Hangul Syllable */ + ["\uC708", "\uC708"], /* Hangul Syllable */ + ["\uC709", "\uC709"], /* Hangul Syllable */ + ["\uC70A", "\uC70A"], /* Hangul Syllable */ + ["\uC70B", "\uC70B"], /* Hangul Syllable */ + ["\uC70C", "\uC70C"], /* Hangul Syllable */ + ["\uC70D", "\uC70D"], /* Hangul Syllable */ + ["\uC70E", "\uC70E"], /* Hangul Syllable */ + ["\uC70F", "\uC70F"], /* Hangul Syllable */ + ["\uC710", "\uC710"], /* Hangul Syllable */ + ["\uC711", "\uC711"], /* Hangul Syllable */ + ["\uC712", "\uC712"], /* Hangul Syllable */ + ["\uC713", "\uC713"], /* Hangul Syllable */ + ["\uC714", "\uC714"], /* Hangul Syllable */ + ["\uC715", "\uC715"], /* Hangul Syllable */ + ["\uC716", "\uC716"], /* Hangul Syllable */ + ["\uC717", "\uC717"], /* Hangul Syllable */ + ["\uC718", "\uC718"], /* Hangul Syllable */ + ["\uC719", "\uC719"], /* Hangul Syllable */ + ["\uC71A", "\uC71A"], /* Hangul Syllable */ + ["\uC71B", "\uC71B"], /* Hangul Syllable */ + ["\uC71C", "\uC71C"], /* Hangul Syllable */ + ["\uC71D", "\uC71D"], /* Hangul Syllable */ + ["\uC71E", "\uC71E"], /* Hangul Syllable */ + ["\uC71F", "\uC71F"], /* Hangul Syllable */ + ["\uC720", "\uC720"], /* Hangul Syllable */ + ["\uC721", "\uC721"], /* Hangul Syllable */ + ["\uC722", "\uC722"], /* Hangul Syllable */ + ["\uC723", "\uC723"], /* Hangul Syllable */ + ["\uC724", "\uC724"], /* Hangul Syllable */ + ["\uC725", "\uC725"], /* Hangul Syllable */ + ["\uC726", "\uC726"], /* Hangul Syllable */ + ["\uC727", "\uC727"], /* Hangul Syllable */ + ["\uC728", "\uC728"], /* Hangul Syllable */ + ["\uC729", "\uC729"], /* Hangul Syllable */ + ["\uC72A", "\uC72A"], /* Hangul Syllable */ + ["\uC72B", "\uC72B"], /* Hangul Syllable */ + ["\uC72C", "\uC72C"], /* Hangul Syllable */ + ["\uC72D", "\uC72D"], /* Hangul Syllable */ + ["\uC72E", "\uC72E"], /* Hangul Syllable */ + ["\uC72F", "\uC72F"], /* Hangul Syllable */ + ["\uC730", "\uC730"], /* Hangul Syllable */ + ["\uC731", "\uC731"], /* Hangul Syllable */ + ["\uC732", "\uC732"], /* Hangul Syllable */ + ["\uC733", "\uC733"], /* Hangul Syllable */ + ["\uC734", "\uC734"], /* Hangul Syllable */ + ["\uC735", "\uC735"], /* Hangul Syllable */ + ["\uC736", "\uC736"], /* Hangul Syllable */ + ["\uC737", "\uC737"], /* Hangul Syllable */ + ["\uC738", "\uC738"], /* Hangul Syllable */ + ["\uC739", "\uC739"], /* Hangul Syllable */ + ["\uC73A", "\uC73A"], /* Hangul Syllable */ + ["\uC73B", "\uC73B"], /* Hangul Syllable */ + ["\uC73C", "\uC73C"], /* Hangul Syllable */ + ["\uC73D", "\uC73D"], /* Hangul Syllable */ + ["\uC73E", "\uC73E"], /* Hangul Syllable */ + ["\uC73F", "\uC73F"], /* Hangul Syllable */ + ["\uC740", "\uC740"], /* Hangul Syllable */ + ["\uC741", "\uC741"], /* Hangul Syllable */ + ["\uC742", "\uC742"], /* Hangul Syllable */ + ["\uC743", "\uC743"], /* Hangul Syllable */ + ["\uC744", "\uC744"], /* Hangul Syllable */ + ["\uC745", "\uC745"], /* Hangul Syllable */ + ["\uC746", "\uC746"], /* Hangul Syllable */ + ["\uC747", "\uC747"], /* Hangul Syllable */ + ["\uC748", "\uC748"], /* Hangul Syllable */ + ["\uC749", "\uC749"], /* Hangul Syllable */ + ["\uC74A", "\uC74A"], /* Hangul Syllable */ + ["\uC74B", "\uC74B"], /* Hangul Syllable */ + ["\uC74C", "\uC74C"], /* Hangul Syllable */ + ["\uC74D", "\uC74D"], /* Hangul Syllable */ + ["\uC74E", "\uC74E"], /* Hangul Syllable */ + ["\uC74F", "\uC74F"], /* Hangul Syllable */ + ["\uC750", "\uC750"], /* Hangul Syllable */ + ["\uC751", "\uC751"], /* Hangul Syllable */ + ["\uC752", "\uC752"], /* Hangul Syllable */ + ["\uC753", "\uC753"], /* Hangul Syllable */ + ["\uC754", "\uC754"], /* Hangul Syllable */ + ["\uC755", "\uC755"], /* Hangul Syllable */ + ["\uC756", "\uC756"], /* Hangul Syllable */ + ["\uC757", "\uC757"], /* Hangul Syllable */ + ["\uC758", "\uC758"], /* Hangul Syllable */ + ["\uC759", "\uC759"], /* Hangul Syllable */ + ["\uC75A", "\uC75A"], /* Hangul Syllable */ + ["\uC75B", "\uC75B"], /* Hangul Syllable */ + ["\uC75C", "\uC75C"], /* Hangul Syllable */ + ["\uC75D", "\uC75D"], /* Hangul Syllable */ + ["\uC75E", "\uC75E"], /* Hangul Syllable */ + ["\uC75F", "\uC75F"], /* Hangul Syllable */ + ["\uC760", "\uC760"], /* Hangul Syllable */ + ["\uC761", "\uC761"], /* Hangul Syllable */ + ["\uC762", "\uC762"], /* Hangul Syllable */ + ["\uC763", "\uC763"], /* Hangul Syllable */ + ["\uC764", "\uC764"], /* Hangul Syllable */ + ["\uC765", "\uC765"], /* Hangul Syllable */ + ["\uC766", "\uC766"], /* Hangul Syllable */ + ["\uC767", "\uC767"], /* Hangul Syllable */ + ["\uC768", "\uC768"], /* Hangul Syllable */ + ["\uC769", "\uC769"], /* Hangul Syllable */ + ["\uC76A", "\uC76A"], /* Hangul Syllable */ + ["\uC76B", "\uC76B"], /* Hangul Syllable */ + ["\uC76C", "\uC76C"], /* Hangul Syllable */ + ["\uC76D", "\uC76D"], /* Hangul Syllable */ + ["\uC76E", "\uC76E"], /* Hangul Syllable */ + ["\uC76F", "\uC76F"], /* Hangul Syllable */ + ["\uC770", "\uC770"], /* Hangul Syllable */ + ["\uC771", "\uC771"], /* Hangul Syllable */ + ["\uC772", "\uC772"], /* Hangul Syllable */ + ["\uC773", "\uC773"], /* Hangul Syllable */ + ["\uC774", "\uC774"], /* Hangul Syllable */ + ["\uC775", "\uC775"], /* Hangul Syllable */ + ["\uC776", "\uC776"], /* Hangul Syllable */ + ["\uC777", "\uC777"], /* Hangul Syllable */ + ["\uC778", "\uC778"], /* Hangul Syllable */ + ["\uC779", "\uC779"], /* Hangul Syllable */ + ["\uC77A", "\uC77A"], /* Hangul Syllable */ + ["\uC77B", "\uC77B"], /* Hangul Syllable */ + ["\uC77C", "\uC77C"], /* Hangul Syllable */ + ["\uC77D", "\uC77D"], /* Hangul Syllable */ + ["\uC77E", "\uC77E"], /* Hangul Syllable */ + ["\uC77F", "\uC77F"], /* Hangul Syllable */ + ["\uC780", "\uC780"], /* Hangul Syllable */ + ["\uC781", "\uC781"], /* Hangul Syllable */ + ["\uC782", "\uC782"], /* Hangul Syllable */ + ["\uC783", "\uC783"], /* Hangul Syllable */ + ["\uC784", "\uC784"], /* Hangul Syllable */ + ["\uC785", "\uC785"], /* Hangul Syllable */ + ["\uC786", "\uC786"], /* Hangul Syllable */ + ["\uC787", "\uC787"], /* Hangul Syllable */ + ["\uC788", "\uC788"], /* Hangul Syllable */ + ["\uC789", "\uC789"], /* Hangul Syllable */ + ["\uC78A", "\uC78A"], /* Hangul Syllable */ + ["\uC78B", "\uC78B"], /* Hangul Syllable */ + ["\uC78C", "\uC78C"], /* Hangul Syllable */ + ["\uC78D", "\uC78D"], /* Hangul Syllable */ + ["\uC78E", "\uC78E"], /* Hangul Syllable */ + ["\uC78F", "\uC78F"], /* Hangul Syllable */ + ["\uC790", "\uC790"], /* Hangul Syllable */ + ["\uC791", "\uC791"], /* Hangul Syllable */ + ["\uC792", "\uC792"], /* Hangul Syllable */ + ["\uC793", "\uC793"], /* Hangul Syllable */ + ["\uC794", "\uC794"], /* Hangul Syllable */ + ["\uC795", "\uC795"], /* Hangul Syllable */ + ["\uC796", "\uC796"], /* Hangul Syllable */ + ["\uC797", "\uC797"], /* Hangul Syllable */ + ["\uC798", "\uC798"], /* Hangul Syllable */ + ["\uC799", "\uC799"], /* Hangul Syllable */ + ["\uC79A", "\uC79A"], /* Hangul Syllable */ + ["\uC79B", "\uC79B"], /* Hangul Syllable */ + ["\uC79C", "\uC79C"], /* Hangul Syllable */ + ["\uC79D", "\uC79D"], /* Hangul Syllable */ + ["\uC79E", "\uC79E"], /* Hangul Syllable */ + ["\uC79F", "\uC79F"], /* Hangul Syllable */ + ["\uC7A0", "\uC7A0"], /* Hangul Syllable */ + ["\uC7A1", "\uC7A1"], /* Hangul Syllable */ + ["\uC7A2", "\uC7A2"], /* Hangul Syllable */ + ["\uC7A3", "\uC7A3"], /* Hangul Syllable */ + ["\uC7A4", "\uC7A4"], /* Hangul Syllable */ + ["\uC7A5", "\uC7A5"], /* Hangul Syllable */ + ["\uC7A6", "\uC7A6"], /* Hangul Syllable */ + ["\uC7A7", "\uC7A7"], /* Hangul Syllable */ + ["\uC7A8", "\uC7A8"], /* Hangul Syllable */ + ["\uC7A9", "\uC7A9"], /* Hangul Syllable */ + ["\uC7AA", "\uC7AA"], /* Hangul Syllable */ + ["\uC7AB", "\uC7AB"], /* Hangul Syllable */ + ["\uC7AC", "\uC7AC"], /* Hangul Syllable */ + ["\uC7AD", "\uC7AD"], /* Hangul Syllable */ + ["\uC7AE", "\uC7AE"], /* Hangul Syllable */ + ["\uC7AF", "\uC7AF"], /* Hangul Syllable */ + ["\uC7B0", "\uC7B0"], /* Hangul Syllable */ + ["\uC7B1", "\uC7B1"], /* Hangul Syllable */ + ["\uC7B2", "\uC7B2"], /* Hangul Syllable */ + ["\uC7B3", "\uC7B3"], /* Hangul Syllable */ + ["\uC7B4", "\uC7B4"], /* Hangul Syllable */ + ["\uC7B5", "\uC7B5"], /* Hangul Syllable */ + ["\uC7B6", "\uC7B6"], /* Hangul Syllable */ + ["\uC7B7", "\uC7B7"], /* Hangul Syllable */ + ["\uC7B8", "\uC7B8"], /* Hangul Syllable */ + ["\uC7B9", "\uC7B9"], /* Hangul Syllable */ + ["\uC7BA", "\uC7BA"], /* Hangul Syllable */ + ["\uC7BB", "\uC7BB"], /* Hangul Syllable */ + ["\uC7BC", "\uC7BC"], /* Hangul Syllable */ + ["\uC7BD", "\uC7BD"], /* Hangul Syllable */ + ["\uC7BE", "\uC7BE"], /* Hangul Syllable */ + ["\uC7BF", "\uC7BF"], /* Hangul Syllable */ + ["\uC7C0", "\uC7C0"], /* Hangul Syllable */ + ["\uC7C1", "\uC7C1"], /* Hangul Syllable */ + ["\uC7C2", "\uC7C2"], /* Hangul Syllable */ + ["\uC7C3", "\uC7C3"], /* Hangul Syllable */ + ["\uC7C4", "\uC7C4"], /* Hangul Syllable */ + ["\uC7C5", "\uC7C5"], /* Hangul Syllable */ + ["\uC7C6", "\uC7C6"], /* Hangul Syllable */ + ["\uC7C7", "\uC7C7"], /* Hangul Syllable */ + ["\uC7C8", "\uC7C8"], /* Hangul Syllable */ + ["\uC7C9", "\uC7C9"], /* Hangul Syllable */ + ["\uC7CA", "\uC7CA"], /* Hangul Syllable */ + ["\uC7CB", "\uC7CB"], /* Hangul Syllable */ + ["\uC7CC", "\uC7CC"], /* Hangul Syllable */ + ["\uC7CD", "\uC7CD"], /* Hangul Syllable */ + ["\uC7CE", "\uC7CE"], /* Hangul Syllable */ + ["\uC7CF", "\uC7CF"], /* Hangul Syllable */ + ["\uC7D0", "\uC7D0"], /* Hangul Syllable */ + ["\uC7D1", "\uC7D1"], /* Hangul Syllable */ + ["\uC7D2", "\uC7D2"], /* Hangul Syllable */ + ["\uC7D3", "\uC7D3"], /* Hangul Syllable */ + ["\uC7D4", "\uC7D4"], /* Hangul Syllable */ + ["\uC7D5", "\uC7D5"], /* Hangul Syllable */ + ["\uC7D6", "\uC7D6"], /* Hangul Syllable */ + ["\uC7D7", "\uC7D7"], /* Hangul Syllable */ + ["\uC7D8", "\uC7D8"], /* Hangul Syllable */ + ["\uC7D9", "\uC7D9"], /* Hangul Syllable */ + ["\uC7DA", "\uC7DA"], /* Hangul Syllable */ + ["\uC7DB", "\uC7DB"], /* Hangul Syllable */ + ["\uC7DC", "\uC7DC"], /* Hangul Syllable */ + ["\uC7DD", "\uC7DD"], /* Hangul Syllable */ + ["\uC7DE", "\uC7DE"], /* Hangul Syllable */ + ["\uC7DF", "\uC7DF"], /* Hangul Syllable */ + ["\uC7E0", "\uC7E0"], /* Hangul Syllable */ + ["\uC7E1", "\uC7E1"], /* Hangul Syllable */ + ["\uC7E2", "\uC7E2"], /* Hangul Syllable */ + ["\uC7E3", "\uC7E3"], /* Hangul Syllable */ + ["\uC7E4", "\uC7E4"], /* Hangul Syllable */ + ["\uC7E5", "\uC7E5"], /* Hangul Syllable */ + ["\uC7E6", "\uC7E6"], /* Hangul Syllable */ + ["\uC7E7", "\uC7E7"], /* Hangul Syllable */ + ["\uC7E8", "\uC7E8"], /* Hangul Syllable */ + ["\uC7E9", "\uC7E9"], /* Hangul Syllable */ + ["\uC7EA", "\uC7EA"], /* Hangul Syllable */ + ["\uC7EB", "\uC7EB"], /* Hangul Syllable */ + ["\uC7EC", "\uC7EC"], /* Hangul Syllable */ + ["\uC7ED", "\uC7ED"], /* Hangul Syllable */ + ["\uC7EE", "\uC7EE"], /* Hangul Syllable */ + ["\uC7EF", "\uC7EF"], /* Hangul Syllable */ + ["\uC7F0", "\uC7F0"], /* Hangul Syllable */ + ["\uC7F1", "\uC7F1"], /* Hangul Syllable */ + ["\uC7F2", "\uC7F2"], /* Hangul Syllable */ + ["\uC7F3", "\uC7F3"], /* Hangul Syllable */ + ["\uC7F4", "\uC7F4"], /* Hangul Syllable */ + ["\uC7F5", "\uC7F5"], /* Hangul Syllable */ + ["\uC7F6", "\uC7F6"], /* Hangul Syllable */ + ["\uC7F7", "\uC7F7"], /* Hangul Syllable */ + ["\uC7F8", "\uC7F8"], /* Hangul Syllable */ + ["\uC7F9", "\uC7F9"], /* Hangul Syllable */ + ["\uC7FA", "\uC7FA"], /* Hangul Syllable */ + ["\uC7FB", "\uC7FB"], /* Hangul Syllable */ + ["\uC7FC", "\uC7FC"], /* Hangul Syllable */ + ["\uC7FD", "\uC7FD"], /* Hangul Syllable */ + ["\uC7FE", "\uC7FE"], /* Hangul Syllable */ + ["\uC7FF", "\uC7FF"], /* Hangul Syllable */ + ["\uC800", "\uC800"], /* Hangul Syllable */ + ["\uC801", "\uC801"], /* Hangul Syllable */ + ["\uC802", "\uC802"], /* Hangul Syllable */ + ["\uC803", "\uC803"], /* Hangul Syllable */ + ["\uC804", "\uC804"], /* Hangul Syllable */ + ["\uC805", "\uC805"], /* Hangul Syllable */ + ["\uC806", "\uC806"], /* Hangul Syllable */ + ["\uC807", "\uC807"], /* Hangul Syllable */ + ["\uC808", "\uC808"], /* Hangul Syllable */ + ["\uC809", "\uC809"], /* Hangul Syllable */ + ["\uC80A", "\uC80A"], /* Hangul Syllable */ + ["\uC80B", "\uC80B"], /* Hangul Syllable */ + ["\uC80C", "\uC80C"], /* Hangul Syllable */ + ["\uC80D", "\uC80D"], /* Hangul Syllable */ + ["\uC80E", "\uC80E"], /* Hangul Syllable */ + ["\uC80F", "\uC80F"], /* Hangul Syllable */ + ["\uC810", "\uC810"], /* Hangul Syllable */ + ["\uC811", "\uC811"], /* Hangul Syllable */ + ["\uC812", "\uC812"], /* Hangul Syllable */ + ["\uC813", "\uC813"], /* Hangul Syllable */ + ["\uC814", "\uC814"], /* Hangul Syllable */ + ["\uC815", "\uC815"], /* Hangul Syllable */ + ["\uC816", "\uC816"], /* Hangul Syllable */ + ["\uC817", "\uC817"], /* Hangul Syllable */ + ["\uC818", "\uC818"], /* Hangul Syllable */ + ["\uC819", "\uC819"], /* Hangul Syllable */ + ["\uC81A", "\uC81A"], /* Hangul Syllable */ + ["\uC81B", "\uC81B"], /* Hangul Syllable */ + ["\uC81C", "\uC81C"], /* Hangul Syllable */ + ["\uC81D", "\uC81D"], /* Hangul Syllable */ + ["\uC81E", "\uC81E"], /* Hangul Syllable */ + ["\uC81F", "\uC81F"], /* Hangul Syllable */ + ["\uC820", "\uC820"], /* Hangul Syllable */ + ["\uC821", "\uC821"], /* Hangul Syllable */ + ["\uC822", "\uC822"], /* Hangul Syllable */ + ["\uC823", "\uC823"], /* Hangul Syllable */ + ["\uC824", "\uC824"], /* Hangul Syllable */ + ["\uC825", "\uC825"], /* Hangul Syllable */ + ["\uC826", "\uC826"], /* Hangul Syllable */ + ["\uC827", "\uC827"], /* Hangul Syllable */ + ["\uC828", "\uC828"], /* Hangul Syllable */ + ["\uC829", "\uC829"], /* Hangul Syllable */ + ["\uC82A", "\uC82A"], /* Hangul Syllable */ + ["\uC82B", "\uC82B"], /* Hangul Syllable */ + ["\uC82C", "\uC82C"], /* Hangul Syllable */ + ["\uC82D", "\uC82D"], /* Hangul Syllable */ + ["\uC82E", "\uC82E"], /* Hangul Syllable */ + ["\uC82F", "\uC82F"], /* Hangul Syllable */ + ["\uC830", "\uC830"], /* Hangul Syllable */ + ["\uC831", "\uC831"], /* Hangul Syllable */ + ["\uC832", "\uC832"], /* Hangul Syllable */ + ["\uC833", "\uC833"], /* Hangul Syllable */ + ["\uC834", "\uC834"], /* Hangul Syllable */ + ["\uC835", "\uC835"], /* Hangul Syllable */ + ["\uC836", "\uC836"], /* Hangul Syllable */ + ["\uC837", "\uC837"], /* Hangul Syllable */ + ["\uC838", "\uC838"], /* Hangul Syllable */ + ["\uC839", "\uC839"], /* Hangul Syllable */ + ["\uC83A", "\uC83A"], /* Hangul Syllable */ + ["\uC83B", "\uC83B"], /* Hangul Syllable */ + ["\uC83C", "\uC83C"], /* Hangul Syllable */ + ["\uC83D", "\uC83D"], /* Hangul Syllable */ + ["\uC83E", "\uC83E"], /* Hangul Syllable */ + ["\uC83F", "\uC83F"], /* Hangul Syllable */ + ["\uC840", "\uC840"], /* Hangul Syllable */ + ["\uC841", "\uC841"], /* Hangul Syllable */ + ["\uC842", "\uC842"], /* Hangul Syllable */ + ["\uC843", "\uC843"], /* Hangul Syllable */ + ["\uC844", "\uC844"], /* Hangul Syllable */ + ["\uC845", "\uC845"], /* Hangul Syllable */ + ["\uC846", "\uC846"], /* Hangul Syllable */ + ["\uC847", "\uC847"], /* Hangul Syllable */ + ["\uC848", "\uC848"], /* Hangul Syllable */ + ["\uC849", "\uC849"], /* Hangul Syllable */ + ["\uC84A", "\uC84A"], /* Hangul Syllable */ + ["\uC84B", "\uC84B"], /* Hangul Syllable */ + ["\uC84C", "\uC84C"], /* Hangul Syllable */ + ["\uC84D", "\uC84D"], /* Hangul Syllable */ + ["\uC84E", "\uC84E"], /* Hangul Syllable */ + ["\uC84F", "\uC84F"], /* Hangul Syllable */ + ["\uC850", "\uC850"], /* Hangul Syllable */ + ["\uC851", "\uC851"], /* Hangul Syllable */ + ["\uC852", "\uC852"], /* Hangul Syllable */ + ["\uC853", "\uC853"], /* Hangul Syllable */ + ["\uC854", "\uC854"], /* Hangul Syllable */ + ["\uC855", "\uC855"], /* Hangul Syllable */ + ["\uC856", "\uC856"], /* Hangul Syllable */ + ["\uC857", "\uC857"], /* Hangul Syllable */ + ["\uC858", "\uC858"], /* Hangul Syllable */ + ["\uC859", "\uC859"], /* Hangul Syllable */ + ["\uC85A", "\uC85A"], /* Hangul Syllable */ + ["\uC85B", "\uC85B"], /* Hangul Syllable */ + ["\uC85C", "\uC85C"], /* Hangul Syllable */ + ["\uC85D", "\uC85D"], /* Hangul Syllable */ + ["\uC85E", "\uC85E"], /* Hangul Syllable */ + ["\uC85F", "\uC85F"], /* Hangul Syllable */ + ["\uC860", "\uC860"], /* Hangul Syllable */ + ["\uC861", "\uC861"], /* Hangul Syllable */ + ["\uC862", "\uC862"], /* Hangul Syllable */ + ["\uC863", "\uC863"], /* Hangul Syllable */ + ["\uC864", "\uC864"], /* Hangul Syllable */ + ["\uC865", "\uC865"], /* Hangul Syllable */ + ["\uC866", "\uC866"], /* Hangul Syllable */ + ["\uC867", "\uC867"], /* Hangul Syllable */ + ["\uC868", "\uC868"], /* Hangul Syllable */ + ["\uC869", "\uC869"], /* Hangul Syllable */ + ["\uC86A", "\uC86A"], /* Hangul Syllable */ + ["\uC86B", "\uC86B"], /* Hangul Syllable */ + ["\uC86C", "\uC86C"], /* Hangul Syllable */ + ["\uC86D", "\uC86D"], /* Hangul Syllable */ + ["\uC86E", "\uC86E"], /* Hangul Syllable */ + ["\uC86F", "\uC86F"], /* Hangul Syllable */ + ["\uC870", "\uC870"], /* Hangul Syllable */ + ["\uC871", "\uC871"], /* Hangul Syllable */ + ["\uC872", "\uC872"], /* Hangul Syllable */ + ["\uC873", "\uC873"], /* Hangul Syllable */ + ["\uC874", "\uC874"], /* Hangul Syllable */ + ["\uC875", "\uC875"], /* Hangul Syllable */ + ["\uC876", "\uC876"], /* Hangul Syllable */ + ["\uC877", "\uC877"], /* Hangul Syllable */ + ["\uC878", "\uC878"], /* Hangul Syllable */ + ["\uC879", "\uC879"], /* Hangul Syllable */ + ["\uC87A", "\uC87A"], /* Hangul Syllable */ + ["\uC87B", "\uC87B"], /* Hangul Syllable */ + ["\uC87C", "\uC87C"], /* Hangul Syllable */ + ["\uC87D", "\uC87D"], /* Hangul Syllable */ + ["\uC87E", "\uC87E"], /* Hangul Syllable */ + ["\uC87F", "\uC87F"], /* Hangul Syllable */ + ["\uC880", "\uC880"], /* Hangul Syllable */ + ["\uC881", "\uC881"], /* Hangul Syllable */ + ["\uC882", "\uC882"], /* Hangul Syllable */ + ["\uC883", "\uC883"], /* Hangul Syllable */ + ["\uC884", "\uC884"], /* Hangul Syllable */ + ["\uC885", "\uC885"], /* Hangul Syllable */ + ["\uC886", "\uC886"], /* Hangul Syllable */ + ["\uC887", "\uC887"], /* Hangul Syllable */ + ["\uC888", "\uC888"], /* Hangul Syllable */ + ["\uC889", "\uC889"], /* Hangul Syllable */ + ["\uC88A", "\uC88A"], /* Hangul Syllable */ + ["\uC88B", "\uC88B"], /* Hangul Syllable */ + ["\uC88C", "\uC88C"], /* Hangul Syllable */ + ["\uC88D", "\uC88D"], /* Hangul Syllable */ + ["\uC88E", "\uC88E"], /* Hangul Syllable */ + ["\uC88F", "\uC88F"], /* Hangul Syllable */ + ["\uC890", "\uC890"], /* Hangul Syllable */ + ["\uC891", "\uC891"], /* Hangul Syllable */ + ["\uC892", "\uC892"], /* Hangul Syllable */ + ["\uC893", "\uC893"], /* Hangul Syllable */ + ["\uC894", "\uC894"], /* Hangul Syllable */ + ["\uC895", "\uC895"], /* Hangul Syllable */ + ["\uC896", "\uC896"], /* Hangul Syllable */ + ["\uC897", "\uC897"], /* Hangul Syllable */ + ["\uC898", "\uC898"], /* Hangul Syllable */ + ["\uC899", "\uC899"], /* Hangul Syllable */ + ["\uC89A", "\uC89A"], /* Hangul Syllable */ + ["\uC89B", "\uC89B"], /* Hangul Syllable */ + ["\uC89C", "\uC89C"], /* Hangul Syllable */ + ["\uC89D", "\uC89D"], /* Hangul Syllable */ + ["\uC89E", "\uC89E"], /* Hangul Syllable */ + ["\uC89F", "\uC89F"], /* Hangul Syllable */ + ["\uC8A0", "\uC8A0"], /* Hangul Syllable */ + ["\uC8A1", "\uC8A1"], /* Hangul Syllable */ + ["\uC8A2", "\uC8A2"], /* Hangul Syllable */ + ["\uC8A3", "\uC8A3"], /* Hangul Syllable */ + ["\uC8A4", "\uC8A4"], /* Hangul Syllable */ + ["\uC8A5", "\uC8A5"], /* Hangul Syllable */ + ["\uC8A6", "\uC8A6"], /* Hangul Syllable */ + ["\uC8A7", "\uC8A7"], /* Hangul Syllable */ + ["\uC8A8", "\uC8A8"], /* Hangul Syllable */ + ["\uC8A9", "\uC8A9"], /* Hangul Syllable */ + ["\uC8AA", "\uC8AA"], /* Hangul Syllable */ + ["\uC8AB", "\uC8AB"], /* Hangul Syllable */ + ["\uC8AC", "\uC8AC"], /* Hangul Syllable */ + ["\uC8AD", "\uC8AD"], /* Hangul Syllable */ + ["\uC8AE", "\uC8AE"], /* Hangul Syllable */ + ["\uC8AF", "\uC8AF"], /* Hangul Syllable */ + ["\uC8B0", "\uC8B0"], /* Hangul Syllable */ + ["\uC8B1", "\uC8B1"], /* Hangul Syllable */ + ["\uC8B2", "\uC8B2"], /* Hangul Syllable */ + ["\uC8B3", "\uC8B3"], /* Hangul Syllable */ + ["\uC8B4", "\uC8B4"], /* Hangul Syllable */ + ["\uC8B5", "\uC8B5"], /* Hangul Syllable */ + ["\uC8B6", "\uC8B6"], /* Hangul Syllable */ + ["\uC8B7", "\uC8B7"], /* Hangul Syllable */ + ["\uC8B8", "\uC8B8"], /* Hangul Syllable */ + ["\uC8B9", "\uC8B9"], /* Hangul Syllable */ + ["\uC8BA", "\uC8BA"], /* Hangul Syllable */ + ["\uC8BB", "\uC8BB"], /* Hangul Syllable */ + ["\uC8BC", "\uC8BC"], /* Hangul Syllable */ + ["\uC8BD", "\uC8BD"], /* Hangul Syllable */ + ["\uC8BE", "\uC8BE"], /* Hangul Syllable */ + ["\uC8BF", "\uC8BF"], /* Hangul Syllable */ + ["\uC8C0", "\uC8C0"], /* Hangul Syllable */ + ["\uC8C1", "\uC8C1"], /* Hangul Syllable */ + ["\uC8C2", "\uC8C2"], /* Hangul Syllable */ + ["\uC8C3", "\uC8C3"], /* Hangul Syllable */ + ["\uC8C4", "\uC8C4"], /* Hangul Syllable */ + ["\uC8C5", "\uC8C5"], /* Hangul Syllable */ + ["\uC8C6", "\uC8C6"], /* Hangul Syllable */ + ["\uC8C7", "\uC8C7"], /* Hangul Syllable */ + ["\uC8C8", "\uC8C8"], /* Hangul Syllable */ + ["\uC8C9", "\uC8C9"], /* Hangul Syllable */ + ["\uC8CA", "\uC8CA"], /* Hangul Syllable */ + ["\uC8CB", "\uC8CB"], /* Hangul Syllable */ + ["\uC8CC", "\uC8CC"], /* Hangul Syllable */ + ["\uC8CD", "\uC8CD"], /* Hangul Syllable */ + ["\uC8CE", "\uC8CE"], /* Hangul Syllable */ + ["\uC8CF", "\uC8CF"], /* Hangul Syllable */ + ["\uC8D0", "\uC8D0"], /* Hangul Syllable */ + ["\uC8D1", "\uC8D1"], /* Hangul Syllable */ + ["\uC8D2", "\uC8D2"], /* Hangul Syllable */ + ["\uC8D3", "\uC8D3"], /* Hangul Syllable */ + ["\uC8D4", "\uC8D4"], /* Hangul Syllable */ + ["\uC8D5", "\uC8D5"], /* Hangul Syllable */ + ["\uC8D6", "\uC8D6"], /* Hangul Syllable */ + ["\uC8D7", "\uC8D7"], /* Hangul Syllable */ + ["\uC8D8", "\uC8D8"], /* Hangul Syllable */ + ["\uC8D9", "\uC8D9"], /* Hangul Syllable */ + ["\uC8DA", "\uC8DA"], /* Hangul Syllable */ + ["\uC8DB", "\uC8DB"], /* Hangul Syllable */ + ["\uC8DC", "\uC8DC"], /* Hangul Syllable */ + ["\uC8DD", "\uC8DD"], /* Hangul Syllable */ + ["\uC8DE", "\uC8DE"], /* Hangul Syllable */ + ["\uC8DF", "\uC8DF"], /* Hangul Syllable */ + ["\uC8E0", "\uC8E0"], /* Hangul Syllable */ + ["\uC8E1", "\uC8E1"], /* Hangul Syllable */ + ["\uC8E2", "\uC8E2"], /* Hangul Syllable */ + ["\uC8E3", "\uC8E3"], /* Hangul Syllable */ + ["\uC8E4", "\uC8E4"], /* Hangul Syllable */ + ["\uC8E5", "\uC8E5"], /* Hangul Syllable */ + ["\uC8E6", "\uC8E6"], /* Hangul Syllable */ + ["\uC8E7", "\uC8E7"], /* Hangul Syllable */ + ["\uC8E8", "\uC8E8"], /* Hangul Syllable */ + ["\uC8E9", "\uC8E9"], /* Hangul Syllable */ + ["\uC8EA", "\uC8EA"], /* Hangul Syllable */ + ["\uC8EB", "\uC8EB"], /* Hangul Syllable */ + ["\uC8EC", "\uC8EC"], /* Hangul Syllable */ + ["\uC8ED", "\uC8ED"], /* Hangul Syllable */ + ["\uC8EE", "\uC8EE"], /* Hangul Syllable */ + ["\uC8EF", "\uC8EF"], /* Hangul Syllable */ + ["\uC8F0", "\uC8F0"], /* Hangul Syllable */ + ["\uC8F1", "\uC8F1"], /* Hangul Syllable */ + ["\uC8F2", "\uC8F2"], /* Hangul Syllable */ + ["\uC8F3", "\uC8F3"], /* Hangul Syllable */ + ["\uC8F4", "\uC8F4"], /* Hangul Syllable */ + ["\uC8F5", "\uC8F5"], /* Hangul Syllable */ + ["\uC8F6", "\uC8F6"], /* Hangul Syllable */ + ["\uC8F7", "\uC8F7"], /* Hangul Syllable */ + ["\uC8F8", "\uC8F8"], /* Hangul Syllable */ + ["\uC8F9", "\uC8F9"], /* Hangul Syllable */ + ["\uC8FA", "\uC8FA"], /* Hangul Syllable */ + ["\uC8FB", "\uC8FB"], /* Hangul Syllable */ + ["\uC8FC", "\uC8FC"], /* Hangul Syllable */ + ["\uC8FD", "\uC8FD"], /* Hangul Syllable */ + ["\uC8FE", "\uC8FE"], /* Hangul Syllable */ + ["\uC8FF", "\uC8FF"], /* Hangul Syllable */ + ["\uC900", "\uC900"], /* Hangul Syllable */ + ["\uC901", "\uC901"], /* Hangul Syllable */ + ["\uC902", "\uC902"], /* Hangul Syllable */ + ["\uC903", "\uC903"], /* Hangul Syllable */ + ["\uC904", "\uC904"], /* Hangul Syllable */ + ["\uC905", "\uC905"], /* Hangul Syllable */ + ["\uC906", "\uC906"], /* Hangul Syllable */ + ["\uC907", "\uC907"], /* Hangul Syllable */ + ["\uC908", "\uC908"], /* Hangul Syllable */ + ["\uC909", "\uC909"], /* Hangul Syllable */ + ["\uC90A", "\uC90A"], /* Hangul Syllable */ + ["\uC90B", "\uC90B"], /* Hangul Syllable */ + ["\uC90C", "\uC90C"], /* Hangul Syllable */ + ["\uC90D", "\uC90D"], /* Hangul Syllable */ + ["\uC90E", "\uC90E"], /* Hangul Syllable */ + ["\uC90F", "\uC90F"], /* Hangul Syllable */ + ["\uC910", "\uC910"], /* Hangul Syllable */ + ["\uC911", "\uC911"], /* Hangul Syllable */ + ["\uC912", "\uC912"], /* Hangul Syllable */ + ["\uC913", "\uC913"], /* Hangul Syllable */ + ["\uC914", "\uC914"], /* Hangul Syllable */ + ["\uC915", "\uC915"], /* Hangul Syllable */ + ["\uC916", "\uC916"], /* Hangul Syllable */ + ["\uC917", "\uC917"], /* Hangul Syllable */ + ["\uC918", "\uC918"], /* Hangul Syllable */ + ["\uC919", "\uC919"], /* Hangul Syllable */ + ["\uC91A", "\uC91A"], /* Hangul Syllable */ + ["\uC91B", "\uC91B"], /* Hangul Syllable */ + ["\uC91C", "\uC91C"], /* Hangul Syllable */ + ["\uC91D", "\uC91D"], /* Hangul Syllable */ + ["\uC91E", "\uC91E"], /* Hangul Syllable */ + ["\uC91F", "\uC91F"], /* Hangul Syllable */ + ["\uC920", "\uC920"], /* Hangul Syllable */ + ["\uC921", "\uC921"], /* Hangul Syllable */ + ["\uC922", "\uC922"], /* Hangul Syllable */ + ["\uC923", "\uC923"], /* Hangul Syllable */ + ["\uC924", "\uC924"], /* Hangul Syllable */ + ["\uC925", "\uC925"], /* Hangul Syllable */ + ["\uC926", "\uC926"], /* Hangul Syllable */ + ["\uC927", "\uC927"], /* Hangul Syllable */ + ["\uC928", "\uC928"], /* Hangul Syllable */ + ["\uC929", "\uC929"], /* Hangul Syllable */ + ["\uC92A", "\uC92A"], /* Hangul Syllable */ + ["\uC92B", "\uC92B"], /* Hangul Syllable */ + ["\uC92C", "\uC92C"], /* Hangul Syllable */ + ["\uC92D", "\uC92D"], /* Hangul Syllable */ + ["\uC92E", "\uC92E"], /* Hangul Syllable */ + ["\uC92F", "\uC92F"], /* Hangul Syllable */ + ["\uC930", "\uC930"], /* Hangul Syllable */ + ["\uC931", "\uC931"], /* Hangul Syllable */ + ["\uC932", "\uC932"], /* Hangul Syllable */ + ["\uC933", "\uC933"], /* Hangul Syllable */ + ["\uC934", "\uC934"], /* Hangul Syllable */ + ["\uC935", "\uC935"], /* Hangul Syllable */ + ["\uC936", "\uC936"], /* Hangul Syllable */ + ["\uC937", "\uC937"], /* Hangul Syllable */ + ["\uC938", "\uC938"], /* Hangul Syllable */ + ["\uC939", "\uC939"], /* Hangul Syllable */ + ["\uC93A", "\uC93A"], /* Hangul Syllable */ + ["\uC93B", "\uC93B"], /* Hangul Syllable */ + ["\uC93C", "\uC93C"], /* Hangul Syllable */ + ["\uC93D", "\uC93D"], /* Hangul Syllable */ + ["\uC93E", "\uC93E"], /* Hangul Syllable */ + ["\uC93F", "\uC93F"], /* Hangul Syllable */ + ["\uC940", "\uC940"], /* Hangul Syllable */ + ["\uC941", "\uC941"], /* Hangul Syllable */ + ["\uC942", "\uC942"], /* Hangul Syllable */ + ["\uC943", "\uC943"], /* Hangul Syllable */ + ["\uC944", "\uC944"], /* Hangul Syllable */ + ["\uC945", "\uC945"], /* Hangul Syllable */ + ["\uC946", "\uC946"], /* Hangul Syllable */ + ["\uC947", "\uC947"], /* Hangul Syllable */ + ["\uC948", "\uC948"], /* Hangul Syllable */ + ["\uC949", "\uC949"], /* Hangul Syllable */ + ["\uC94A", "\uC94A"], /* Hangul Syllable */ + ["\uC94B", "\uC94B"], /* Hangul Syllable */ + ["\uC94C", "\uC94C"], /* Hangul Syllable */ + ["\uC94D", "\uC94D"], /* Hangul Syllable */ + ["\uC94E", "\uC94E"], /* Hangul Syllable */ + ["\uC94F", "\uC94F"], /* Hangul Syllable */ + ["\uC950", "\uC950"], /* Hangul Syllable */ + ["\uC951", "\uC951"], /* Hangul Syllable */ + ["\uC952", "\uC952"], /* Hangul Syllable */ + ["\uC953", "\uC953"], /* Hangul Syllable */ + ["\uC954", "\uC954"], /* Hangul Syllable */ + ["\uC955", "\uC955"], /* Hangul Syllable */ + ["\uC956", "\uC956"], /* Hangul Syllable */ + ["\uC957", "\uC957"], /* Hangul Syllable */ + ["\uC958", "\uC958"], /* Hangul Syllable */ + ["\uC959", "\uC959"], /* Hangul Syllable */ + ["\uC95A", "\uC95A"], /* Hangul Syllable */ + ["\uC95B", "\uC95B"], /* Hangul Syllable */ + ["\uC95C", "\uC95C"], /* Hangul Syllable */ + ["\uC95D", "\uC95D"], /* Hangul Syllable */ + ["\uC95E", "\uC95E"], /* Hangul Syllable */ + ["\uC95F", "\uC95F"], /* Hangul Syllable */ + ["\uC960", "\uC960"], /* Hangul Syllable */ + ["\uC961", "\uC961"], /* Hangul Syllable */ + ["\uC962", "\uC962"], /* Hangul Syllable */ + ["\uC963", "\uC963"], /* Hangul Syllable */ + ["\uC964", "\uC964"], /* Hangul Syllable */ + ["\uC965", "\uC965"], /* Hangul Syllable */ + ["\uC966", "\uC966"], /* Hangul Syllable */ + ["\uC967", "\uC967"], /* Hangul Syllable */ + ["\uC968", "\uC968"], /* Hangul Syllable */ + ["\uC969", "\uC969"], /* Hangul Syllable */ + ["\uC96A", "\uC96A"], /* Hangul Syllable */ + ["\uC96B", "\uC96B"], /* Hangul Syllable */ + ["\uC96C", "\uC96C"], /* Hangul Syllable */ + ["\uC96D", "\uC96D"], /* Hangul Syllable */ + ["\uC96E", "\uC96E"], /* Hangul Syllable */ + ["\uC96F", "\uC96F"], /* Hangul Syllable */ + ["\uC970", "\uC970"], /* Hangul Syllable */ + ["\uC971", "\uC971"], /* Hangul Syllable */ + ["\uC972", "\uC972"], /* Hangul Syllable */ + ["\uC973", "\uC973"], /* Hangul Syllable */ + ["\uC974", "\uC974"], /* Hangul Syllable */ + ["\uC975", "\uC975"], /* Hangul Syllable */ + ["\uC976", "\uC976"], /* Hangul Syllable */ + ["\uC977", "\uC977"], /* Hangul Syllable */ + ["\uC978", "\uC978"], /* Hangul Syllable */ + ["\uC979", "\uC979"], /* Hangul Syllable */ + ["\uC97A", "\uC97A"], /* Hangul Syllable */ + ["\uC97B", "\uC97B"], /* Hangul Syllable */ + ["\uC97C", "\uC97C"], /* Hangul Syllable */ + ["\uC97D", "\uC97D"], /* Hangul Syllable */ + ["\uC97E", "\uC97E"], /* Hangul Syllable */ + ["\uC97F", "\uC97F"], /* Hangul Syllable */ + ["\uC980", "\uC980"], /* Hangul Syllable */ + ["\uC981", "\uC981"], /* Hangul Syllable */ + ["\uC982", "\uC982"], /* Hangul Syllable */ + ["\uC983", "\uC983"], /* Hangul Syllable */ + ["\uC984", "\uC984"], /* Hangul Syllable */ + ["\uC985", "\uC985"], /* Hangul Syllable */ + ["\uC986", "\uC986"], /* Hangul Syllable */ + ["\uC987", "\uC987"], /* Hangul Syllable */ + ["\uC988", "\uC988"], /* Hangul Syllable */ + ["\uC989", "\uC989"], /* Hangul Syllable */ + ["\uC98A", "\uC98A"], /* Hangul Syllable */ + ["\uC98B", "\uC98B"], /* Hangul Syllable */ + ["\uC98C", "\uC98C"], /* Hangul Syllable */ + ["\uC98D", "\uC98D"], /* Hangul Syllable */ + ["\uC98E", "\uC98E"], /* Hangul Syllable */ + ["\uC98F", "\uC98F"], /* Hangul Syllable */ + ["\uC990", "\uC990"], /* Hangul Syllable */ + ["\uC991", "\uC991"], /* Hangul Syllable */ + ["\uC992", "\uC992"], /* Hangul Syllable */ + ["\uC993", "\uC993"], /* Hangul Syllable */ + ["\uC994", "\uC994"], /* Hangul Syllable */ + ["\uC995", "\uC995"], /* Hangul Syllable */ + ["\uC996", "\uC996"], /* Hangul Syllable */ + ["\uC997", "\uC997"], /* Hangul Syllable */ + ["\uC998", "\uC998"], /* Hangul Syllable */ + ["\uC999", "\uC999"], /* Hangul Syllable */ + ["\uC99A", "\uC99A"], /* Hangul Syllable */ + ["\uC99B", "\uC99B"], /* Hangul Syllable */ + ["\uC99C", "\uC99C"], /* Hangul Syllable */ + ["\uC99D", "\uC99D"], /* Hangul Syllable */ + ["\uC99E", "\uC99E"], /* Hangul Syllable */ + ["\uC99F", "\uC99F"], /* Hangul Syllable */ + ["\uC9A0", "\uC9A0"], /* Hangul Syllable */ + ["\uC9A1", "\uC9A1"], /* Hangul Syllable */ + ["\uC9A2", "\uC9A2"], /* Hangul Syllable */ + ["\uC9A3", "\uC9A3"], /* Hangul Syllable */ + ["\uC9A4", "\uC9A4"], /* Hangul Syllable */ + ["\uC9A5", "\uC9A5"], /* Hangul Syllable */ + ["\uC9A6", "\uC9A6"], /* Hangul Syllable */ + ["\uC9A7", "\uC9A7"], /* Hangul Syllable */ + ["\uC9A8", "\uC9A8"], /* Hangul Syllable */ + ["\uC9A9", "\uC9A9"], /* Hangul Syllable */ + ["\uC9AA", "\uC9AA"], /* Hangul Syllable */ + ["\uC9AB", "\uC9AB"], /* Hangul Syllable */ + ["\uC9AC", "\uC9AC"], /* Hangul Syllable */ + ["\uC9AD", "\uC9AD"], /* Hangul Syllable */ + ["\uC9AE", "\uC9AE"], /* Hangul Syllable */ + ["\uC9AF", "\uC9AF"], /* Hangul Syllable */ + ["\uC9B0", "\uC9B0"], /* Hangul Syllable */ + ["\uC9B1", "\uC9B1"], /* Hangul Syllable */ + ["\uC9B2", "\uC9B2"], /* Hangul Syllable */ + ["\uC9B3", "\uC9B3"], /* Hangul Syllable */ + ["\uC9B4", "\uC9B4"], /* Hangul Syllable */ + ["\uC9B5", "\uC9B5"], /* Hangul Syllable */ + ["\uC9B6", "\uC9B6"], /* Hangul Syllable */ + ["\uC9B7", "\uC9B7"], /* Hangul Syllable */ + ["\uC9B8", "\uC9B8"], /* Hangul Syllable */ + ["\uC9B9", "\uC9B9"], /* Hangul Syllable */ + ["\uC9BA", "\uC9BA"], /* Hangul Syllable */ + ["\uC9BB", "\uC9BB"], /* Hangul Syllable */ + ["\uC9BC", "\uC9BC"], /* Hangul Syllable */ + ["\uC9BD", "\uC9BD"], /* Hangul Syllable */ + ["\uC9BE", "\uC9BE"], /* Hangul Syllable */ + ["\uC9BF", "\uC9BF"], /* Hangul Syllable */ + ["\uC9C0", "\uC9C0"], /* Hangul Syllable */ + ["\uC9C1", "\uC9C1"], /* Hangul Syllable */ + ["\uC9C2", "\uC9C2"], /* Hangul Syllable */ + ["\uC9C3", "\uC9C3"], /* Hangul Syllable */ + ["\uC9C4", "\uC9C4"], /* Hangul Syllable */ + ["\uC9C5", "\uC9C5"], /* Hangul Syllable */ + ["\uC9C6", "\uC9C6"], /* Hangul Syllable */ + ["\uC9C7", "\uC9C7"], /* Hangul Syllable */ + ["\uC9C8", "\uC9C8"], /* Hangul Syllable */ + ["\uC9C9", "\uC9C9"], /* Hangul Syllable */ + ["\uC9CA", "\uC9CA"], /* Hangul Syllable */ + ["\uC9CB", "\uC9CB"], /* Hangul Syllable */ + ["\uC9CC", "\uC9CC"], /* Hangul Syllable */ + ["\uC9CD", "\uC9CD"], /* Hangul Syllable */ + ["\uC9CE", "\uC9CE"], /* Hangul Syllable */ + ["\uC9CF", "\uC9CF"], /* Hangul Syllable */ + ["\uC9D0", "\uC9D0"], /* Hangul Syllable */ + ["\uC9D1", "\uC9D1"], /* Hangul Syllable */ + ["\uC9D2", "\uC9D2"], /* Hangul Syllable */ + ["\uC9D3", "\uC9D3"], /* Hangul Syllable */ + ["\uC9D4", "\uC9D4"], /* Hangul Syllable */ + ["\uC9D5", "\uC9D5"], /* Hangul Syllable */ + ["\uC9D6", "\uC9D6"], /* Hangul Syllable */ + ["\uC9D7", "\uC9D7"], /* Hangul Syllable */ + ["\uC9D8", "\uC9D8"], /* Hangul Syllable */ + ["\uC9D9", "\uC9D9"], /* Hangul Syllable */ + ["\uC9DA", "\uC9DA"], /* Hangul Syllable */ + ["\uC9DB", "\uC9DB"], /* Hangul Syllable */ + ["\uC9DC", "\uC9DC"], /* Hangul Syllable */ + ["\uC9DD", "\uC9DD"], /* Hangul Syllable */ + ["\uC9DE", "\uC9DE"], /* Hangul Syllable */ + ["\uC9DF", "\uC9DF"], /* Hangul Syllable */ + ["\uC9E0", "\uC9E0"], /* Hangul Syllable */ + ["\uC9E1", "\uC9E1"], /* Hangul Syllable */ + ["\uC9E2", "\uC9E2"], /* Hangul Syllable */ + ["\uC9E3", "\uC9E3"], /* Hangul Syllable */ + ["\uC9E4", "\uC9E4"], /* Hangul Syllable */ + ["\uC9E5", "\uC9E5"], /* Hangul Syllable */ + ["\uC9E6", "\uC9E6"], /* Hangul Syllable */ + ["\uC9E7", "\uC9E7"], /* Hangul Syllable */ + ["\uC9E8", "\uC9E8"], /* Hangul Syllable */ + ["\uC9E9", "\uC9E9"], /* Hangul Syllable */ + ["\uC9EA", "\uC9EA"], /* Hangul Syllable */ + ["\uC9EB", "\uC9EB"], /* Hangul Syllable */ + ["\uC9EC", "\uC9EC"], /* Hangul Syllable */ + ["\uC9ED", "\uC9ED"], /* Hangul Syllable */ + ["\uC9EE", "\uC9EE"], /* Hangul Syllable */ + ["\uC9EF", "\uC9EF"], /* Hangul Syllable */ + ["\uC9F0", "\uC9F0"], /* Hangul Syllable */ + ["\uC9F1", "\uC9F1"], /* Hangul Syllable */ + ["\uC9F2", "\uC9F2"], /* Hangul Syllable */ + ["\uC9F3", "\uC9F3"], /* Hangul Syllable */ + ["\uC9F4", "\uC9F4"], /* Hangul Syllable */ + ["\uC9F5", "\uC9F5"], /* Hangul Syllable */ + ["\uC9F6", "\uC9F6"], /* Hangul Syllable */ + ["\uC9F7", "\uC9F7"], /* Hangul Syllable */ + ["\uC9F8", "\uC9F8"], /* Hangul Syllable */ + ["\uC9F9", "\uC9F9"], /* Hangul Syllable */ + ["\uC9FA", "\uC9FA"], /* Hangul Syllable */ + ["\uC9FB", "\uC9FB"], /* Hangul Syllable */ + ["\uC9FC", "\uC9FC"], /* Hangul Syllable */ + ["\uC9FD", "\uC9FD"], /* Hangul Syllable */ + ["\uC9FE", "\uC9FE"], /* Hangul Syllable */ + ["\uC9FF", "\uC9FF"], /* Hangul Syllable */ + ["\uCA00", "\uCA00"], /* Hangul Syllable */ + ["\uCA01", "\uCA01"], /* Hangul Syllable */ + ["\uCA02", "\uCA02"], /* Hangul Syllable */ + ["\uCA03", "\uCA03"], /* Hangul Syllable */ + ["\uCA04", "\uCA04"], /* Hangul Syllable */ + ["\uCA05", "\uCA05"], /* Hangul Syllable */ + ["\uCA06", "\uCA06"], /* Hangul Syllable */ + ["\uCA07", "\uCA07"], /* Hangul Syllable */ + ["\uCA08", "\uCA08"], /* Hangul Syllable */ + ["\uCA09", "\uCA09"], /* Hangul Syllable */ + ["\uCA0A", "\uCA0A"], /* Hangul Syllable */ + ["\uCA0B", "\uCA0B"], /* Hangul Syllable */ + ["\uCA0C", "\uCA0C"], /* Hangul Syllable */ + ["\uCA0D", "\uCA0D"], /* Hangul Syllable */ + ["\uCA0E", "\uCA0E"], /* Hangul Syllable */ + ["\uCA0F", "\uCA0F"], /* Hangul Syllable */ + ["\uCA10", "\uCA10"], /* Hangul Syllable */ + ["\uCA11", "\uCA11"], /* Hangul Syllable */ + ["\uCA12", "\uCA12"], /* Hangul Syllable */ + ["\uCA13", "\uCA13"], /* Hangul Syllable */ + ["\uCA14", "\uCA14"], /* Hangul Syllable */ + ["\uCA15", "\uCA15"], /* Hangul Syllable */ + ["\uCA16", "\uCA16"], /* Hangul Syllable */ + ["\uCA17", "\uCA17"], /* Hangul Syllable */ + ["\uCA18", "\uCA18"], /* Hangul Syllable */ + ["\uCA19", "\uCA19"], /* Hangul Syllable */ + ["\uCA1A", "\uCA1A"], /* Hangul Syllable */ + ["\uCA1B", "\uCA1B"], /* Hangul Syllable */ + ["\uCA1C", "\uCA1C"], /* Hangul Syllable */ + ["\uCA1D", "\uCA1D"], /* Hangul Syllable */ + ["\uCA1E", "\uCA1E"], /* Hangul Syllable */ + ["\uCA1F", "\uCA1F"], /* Hangul Syllable */ + ["\uCA20", "\uCA20"], /* Hangul Syllable */ + ["\uCA21", "\uCA21"], /* Hangul Syllable */ + ["\uCA22", "\uCA22"], /* Hangul Syllable */ + ["\uCA23", "\uCA23"], /* Hangul Syllable */ + ["\uCA24", "\uCA24"], /* Hangul Syllable */ + ["\uCA25", "\uCA25"], /* Hangul Syllable */ + ["\uCA26", "\uCA26"], /* Hangul Syllable */ + ["\uCA27", "\uCA27"], /* Hangul Syllable */ + ["\uCA28", "\uCA28"], /* Hangul Syllable */ + ["\uCA29", "\uCA29"], /* Hangul Syllable */ + ["\uCA2A", "\uCA2A"], /* Hangul Syllable */ + ["\uCA2B", "\uCA2B"], /* Hangul Syllable */ + ["\uCA2C", "\uCA2C"], /* Hangul Syllable */ + ["\uCA2D", "\uCA2D"], /* Hangul Syllable */ + ["\uCA2E", "\uCA2E"], /* Hangul Syllable */ + ["\uCA2F", "\uCA2F"], /* Hangul Syllable */ + ["\uCA30", "\uCA30"], /* Hangul Syllable */ + ["\uCA31", "\uCA31"], /* Hangul Syllable */ + ["\uCA32", "\uCA32"], /* Hangul Syllable */ + ["\uCA33", "\uCA33"], /* Hangul Syllable */ + ["\uCA34", "\uCA34"], /* Hangul Syllable */ + ["\uCA35", "\uCA35"], /* Hangul Syllable */ + ["\uCA36", "\uCA36"], /* Hangul Syllable */ + ["\uCA37", "\uCA37"], /* Hangul Syllable */ + ["\uCA38", "\uCA38"], /* Hangul Syllable */ + ["\uCA39", "\uCA39"], /* Hangul Syllable */ + ["\uCA3A", "\uCA3A"], /* Hangul Syllable */ + ["\uCA3B", "\uCA3B"], /* Hangul Syllable */ + ["\uCA3C", "\uCA3C"], /* Hangul Syllable */ + ["\uCA3D", "\uCA3D"], /* Hangul Syllable */ + ["\uCA3E", "\uCA3E"], /* Hangul Syllable */ + ["\uCA3F", "\uCA3F"], /* Hangul Syllable */ + ["\uCA40", "\uCA40"], /* Hangul Syllable */ + ["\uCA41", "\uCA41"], /* Hangul Syllable */ + ["\uCA42", "\uCA42"], /* Hangul Syllable */ + ["\uCA43", "\uCA43"], /* Hangul Syllable */ + ["\uCA44", "\uCA44"], /* Hangul Syllable */ + ["\uCA45", "\uCA45"], /* Hangul Syllable */ + ["\uCA46", "\uCA46"], /* Hangul Syllable */ + ["\uCA47", "\uCA47"], /* Hangul Syllable */ + ["\uCA48", "\uCA48"], /* Hangul Syllable */ + ["\uCA49", "\uCA49"], /* Hangul Syllable */ + ["\uCA4A", "\uCA4A"], /* Hangul Syllable */ + ["\uCA4B", "\uCA4B"], /* Hangul Syllable */ + ["\uCA4C", "\uCA4C"], /* Hangul Syllable */ + ["\uCA4D", "\uCA4D"], /* Hangul Syllable */ + ["\uCA4E", "\uCA4E"], /* Hangul Syllable */ + ["\uCA4F", "\uCA4F"], /* Hangul Syllable */ + ["\uCA50", "\uCA50"], /* Hangul Syllable */ + ["\uCA51", "\uCA51"], /* Hangul Syllable */ + ["\uCA52", "\uCA52"], /* Hangul Syllable */ + ["\uCA53", "\uCA53"], /* Hangul Syllable */ + ["\uCA54", "\uCA54"], /* Hangul Syllable */ + ["\uCA55", "\uCA55"], /* Hangul Syllable */ + ["\uCA56", "\uCA56"], /* Hangul Syllable */ + ["\uCA57", "\uCA57"], /* Hangul Syllable */ + ["\uCA58", "\uCA58"], /* Hangul Syllable */ + ["\uCA59", "\uCA59"], /* Hangul Syllable */ + ["\uCA5A", "\uCA5A"], /* Hangul Syllable */ + ["\uCA5B", "\uCA5B"], /* Hangul Syllable */ + ["\uCA5C", "\uCA5C"], /* Hangul Syllable */ + ["\uCA5D", "\uCA5D"], /* Hangul Syllable */ + ["\uCA5E", "\uCA5E"], /* Hangul Syllable */ + ["\uCA5F", "\uCA5F"], /* Hangul Syllable */ + ["\uCA60", "\uCA60"], /* Hangul Syllable */ + ["\uCA61", "\uCA61"], /* Hangul Syllable */ + ["\uCA62", "\uCA62"], /* Hangul Syllable */ + ["\uCA63", "\uCA63"], /* Hangul Syllable */ + ["\uCA64", "\uCA64"], /* Hangul Syllable */ + ["\uCA65", "\uCA65"], /* Hangul Syllable */ + ["\uCA66", "\uCA66"], /* Hangul Syllable */ + ["\uCA67", "\uCA67"], /* Hangul Syllable */ + ["\uCA68", "\uCA68"], /* Hangul Syllable */ + ["\uCA69", "\uCA69"], /* Hangul Syllable */ + ["\uCA6A", "\uCA6A"], /* Hangul Syllable */ + ["\uCA6B", "\uCA6B"], /* Hangul Syllable */ + ["\uCA6C", "\uCA6C"], /* Hangul Syllable */ + ["\uCA6D", "\uCA6D"], /* Hangul Syllable */ + ["\uCA6E", "\uCA6E"], /* Hangul Syllable */ + ["\uCA6F", "\uCA6F"], /* Hangul Syllable */ + ["\uCA70", "\uCA70"], /* Hangul Syllable */ + ["\uCA71", "\uCA71"], /* Hangul Syllable */ + ["\uCA72", "\uCA72"], /* Hangul Syllable */ + ["\uCA73", "\uCA73"], /* Hangul Syllable */ + ["\uCA74", "\uCA74"], /* Hangul Syllable */ + ["\uCA75", "\uCA75"], /* Hangul Syllable */ + ["\uCA76", "\uCA76"], /* Hangul Syllable */ + ["\uCA77", "\uCA77"], /* Hangul Syllable */ + ["\uCA78", "\uCA78"], /* Hangul Syllable */ + ["\uCA79", "\uCA79"], /* Hangul Syllable */ + ["\uCA7A", "\uCA7A"], /* Hangul Syllable */ + ["\uCA7B", "\uCA7B"], /* Hangul Syllable */ + ["\uCA7C", "\uCA7C"], /* Hangul Syllable */ + ["\uCA7D", "\uCA7D"], /* Hangul Syllable */ + ["\uCA7E", "\uCA7E"], /* Hangul Syllable */ + ["\uCA7F", "\uCA7F"], /* Hangul Syllable */ + ["\uCA80", "\uCA80"], /* Hangul Syllable */ + ["\uCA81", "\uCA81"], /* Hangul Syllable */ + ["\uCA82", "\uCA82"], /* Hangul Syllable */ + ["\uCA83", "\uCA83"], /* Hangul Syllable */ + ["\uCA84", "\uCA84"], /* Hangul Syllable */ + ["\uCA85", "\uCA85"], /* Hangul Syllable */ + ["\uCA86", "\uCA86"], /* Hangul Syllable */ + ["\uCA87", "\uCA87"], /* Hangul Syllable */ + ["\uCA88", "\uCA88"], /* Hangul Syllable */ + ["\uCA89", "\uCA89"], /* Hangul Syllable */ + ["\uCA8A", "\uCA8A"], /* Hangul Syllable */ + ["\uCA8B", "\uCA8B"], /* Hangul Syllable */ + ["\uCA8C", "\uCA8C"], /* Hangul Syllable */ + ["\uCA8D", "\uCA8D"], /* Hangul Syllable */ + ["\uCA8E", "\uCA8E"], /* Hangul Syllable */ + ["\uCA8F", "\uCA8F"], /* Hangul Syllable */ + ["\uCA90", "\uCA90"], /* Hangul Syllable */ + ["\uCA91", "\uCA91"], /* Hangul Syllable */ + ["\uCA92", "\uCA92"], /* Hangul Syllable */ + ["\uCA93", "\uCA93"], /* Hangul Syllable */ + ["\uCA94", "\uCA94"], /* Hangul Syllable */ + ["\uCA95", "\uCA95"], /* Hangul Syllable */ + ["\uCA96", "\uCA96"], /* Hangul Syllable */ + ["\uCA97", "\uCA97"], /* Hangul Syllable */ + ["\uCA98", "\uCA98"], /* Hangul Syllable */ + ["\uCA99", "\uCA99"], /* Hangul Syllable */ + ["\uCA9A", "\uCA9A"], /* Hangul Syllable */ + ["\uCA9B", "\uCA9B"], /* Hangul Syllable */ + ["\uCA9C", "\uCA9C"], /* Hangul Syllable */ + ["\uCA9D", "\uCA9D"], /* Hangul Syllable */ + ["\uCA9E", "\uCA9E"], /* Hangul Syllable */ + ["\uCA9F", "\uCA9F"], /* Hangul Syllable */ + ["\uCAA0", "\uCAA0"], /* Hangul Syllable */ + ["\uCAA1", "\uCAA1"], /* Hangul Syllable */ + ["\uCAA2", "\uCAA2"], /* Hangul Syllable */ + ["\uCAA3", "\uCAA3"], /* Hangul Syllable */ + ["\uCAA4", "\uCAA4"], /* Hangul Syllable */ + ["\uCAA5", "\uCAA5"], /* Hangul Syllable */ + ["\uCAA6", "\uCAA6"], /* Hangul Syllable */ + ["\uCAA7", "\uCAA7"], /* Hangul Syllable */ + ["\uCAA8", "\uCAA8"], /* Hangul Syllable */ + ["\uCAA9", "\uCAA9"], /* Hangul Syllable */ + ["\uCAAA", "\uCAAA"], /* Hangul Syllable */ + ["\uCAAB", "\uCAAB"], /* Hangul Syllable */ + ["\uCAAC", "\uCAAC"], /* Hangul Syllable */ + ["\uCAAD", "\uCAAD"], /* Hangul Syllable */ + ["\uCAAE", "\uCAAE"], /* Hangul Syllable */ + ["\uCAAF", "\uCAAF"], /* Hangul Syllable */ + ["\uCAB0", "\uCAB0"], /* Hangul Syllable */ + ["\uCAB1", "\uCAB1"], /* Hangul Syllable */ + ["\uCAB2", "\uCAB2"], /* Hangul Syllable */ + ["\uCAB3", "\uCAB3"], /* Hangul Syllable */ + ["\uCAB4", "\uCAB4"], /* Hangul Syllable */ + ["\uCAB5", "\uCAB5"], /* Hangul Syllable */ + ["\uCAB6", "\uCAB6"], /* Hangul Syllable */ + ["\uCAB7", "\uCAB7"], /* Hangul Syllable */ + ["\uCAB8", "\uCAB8"], /* Hangul Syllable */ + ["\uCAB9", "\uCAB9"], /* Hangul Syllable */ + ["\uCABA", "\uCABA"], /* Hangul Syllable */ + ["\uCABB", "\uCABB"], /* Hangul Syllable */ + ["\uCABC", "\uCABC"], /* Hangul Syllable */ + ["\uCABD", "\uCABD"], /* Hangul Syllable */ + ["\uCABE", "\uCABE"], /* Hangul Syllable */ + ["\uCABF", "\uCABF"], /* Hangul Syllable */ + ["\uCAC0", "\uCAC0"], /* Hangul Syllable */ + ["\uCAC1", "\uCAC1"], /* Hangul Syllable */ + ["\uCAC2", "\uCAC2"], /* Hangul Syllable */ + ["\uCAC3", "\uCAC3"], /* Hangul Syllable */ + ["\uCAC4", "\uCAC4"], /* Hangul Syllable */ + ["\uCAC5", "\uCAC5"], /* Hangul Syllable */ + ["\uCAC6", "\uCAC6"], /* Hangul Syllable */ + ["\uCAC7", "\uCAC7"], /* Hangul Syllable */ + ["\uCAC8", "\uCAC8"], /* Hangul Syllable */ + ["\uCAC9", "\uCAC9"], /* Hangul Syllable */ + ["\uCACA", "\uCACA"], /* Hangul Syllable */ + ["\uCACB", "\uCACB"], /* Hangul Syllable */ + ["\uCACC", "\uCACC"], /* Hangul Syllable */ + ["\uCACD", "\uCACD"], /* Hangul Syllable */ + ["\uCACE", "\uCACE"], /* Hangul Syllable */ + ["\uCACF", "\uCACF"], /* Hangul Syllable */ + ["\uCAD0", "\uCAD0"], /* Hangul Syllable */ + ["\uCAD1", "\uCAD1"], /* Hangul Syllable */ + ["\uCAD2", "\uCAD2"], /* Hangul Syllable */ + ["\uCAD3", "\uCAD3"], /* Hangul Syllable */ + ["\uCAD4", "\uCAD4"], /* Hangul Syllable */ + ["\uCAD5", "\uCAD5"], /* Hangul Syllable */ + ["\uCAD6", "\uCAD6"], /* Hangul Syllable */ + ["\uCAD7", "\uCAD7"], /* Hangul Syllable */ + ["\uCAD8", "\uCAD8"], /* Hangul Syllable */ + ["\uCAD9", "\uCAD9"], /* Hangul Syllable */ + ["\uCADA", "\uCADA"], /* Hangul Syllable */ + ["\uCADB", "\uCADB"], /* Hangul Syllable */ + ["\uCADC", "\uCADC"], /* Hangul Syllable */ + ["\uCADD", "\uCADD"], /* Hangul Syllable */ + ["\uCADE", "\uCADE"], /* Hangul Syllable */ + ["\uCADF", "\uCADF"], /* Hangul Syllable */ + ["\uCAE0", "\uCAE0"], /* Hangul Syllable */ + ["\uCAE1", "\uCAE1"], /* Hangul Syllable */ + ["\uCAE2", "\uCAE2"], /* Hangul Syllable */ + ["\uCAE3", "\uCAE3"], /* Hangul Syllable */ + ["\uCAE4", "\uCAE4"], /* Hangul Syllable */ + ["\uCAE5", "\uCAE5"], /* Hangul Syllable */ + ["\uCAE6", "\uCAE6"], /* Hangul Syllable */ + ["\uCAE7", "\uCAE7"], /* Hangul Syllable */ + ["\uCAE8", "\uCAE8"], /* Hangul Syllable */ + ["\uCAE9", "\uCAE9"], /* Hangul Syllable */ + ["\uCAEA", "\uCAEA"], /* Hangul Syllable */ + ["\uCAEB", "\uCAEB"], /* Hangul Syllable */ + ["\uCAEC", "\uCAEC"], /* Hangul Syllable */ + ["\uCAED", "\uCAED"], /* Hangul Syllable */ + ["\uCAEE", "\uCAEE"], /* Hangul Syllable */ + ["\uCAEF", "\uCAEF"], /* Hangul Syllable */ + ["\uCAF0", "\uCAF0"], /* Hangul Syllable */ + ["\uCAF1", "\uCAF1"], /* Hangul Syllable */ + ["\uCAF2", "\uCAF2"], /* Hangul Syllable */ + ["\uCAF3", "\uCAF3"], /* Hangul Syllable */ + ["\uCAF4", "\uCAF4"], /* Hangul Syllable */ + ["\uCAF5", "\uCAF5"], /* Hangul Syllable */ + ["\uCAF6", "\uCAF6"], /* Hangul Syllable */ + ["\uCAF7", "\uCAF7"], /* Hangul Syllable */ + ["\uCAF8", "\uCAF8"], /* Hangul Syllable */ + ["\uCAF9", "\uCAF9"], /* Hangul Syllable */ + ["\uCAFA", "\uCAFA"], /* Hangul Syllable */ + ["\uCAFB", "\uCAFB"], /* Hangul Syllable */ + ["\uCAFC", "\uCAFC"], /* Hangul Syllable */ + ["\uCAFD", "\uCAFD"], /* Hangul Syllable */ + ["\uCAFE", "\uCAFE"], /* Hangul Syllable */ + ["\uCAFF", "\uCAFF"], /* Hangul Syllable */ + ["\uCB00", "\uCB00"], /* Hangul Syllable */ + ["\uCB01", "\uCB01"], /* Hangul Syllable */ + ["\uCB02", "\uCB02"], /* Hangul Syllable */ + ["\uCB03", "\uCB03"], /* Hangul Syllable */ + ["\uCB04", "\uCB04"], /* Hangul Syllable */ + ["\uCB05", "\uCB05"], /* Hangul Syllable */ + ["\uCB06", "\uCB06"], /* Hangul Syllable */ + ["\uCB07", "\uCB07"], /* Hangul Syllable */ + ["\uCB08", "\uCB08"], /* Hangul Syllable */ + ["\uCB09", "\uCB09"], /* Hangul Syllable */ + ["\uCB0A", "\uCB0A"], /* Hangul Syllable */ + ["\uCB0B", "\uCB0B"], /* Hangul Syllable */ + ["\uCB0C", "\uCB0C"], /* Hangul Syllable */ + ["\uCB0D", "\uCB0D"], /* Hangul Syllable */ + ["\uCB0E", "\uCB0E"], /* Hangul Syllable */ + ["\uCB0F", "\uCB0F"], /* Hangul Syllable */ + ["\uCB10", "\uCB10"], /* Hangul Syllable */ + ["\uCB11", "\uCB11"], /* Hangul Syllable */ + ["\uCB12", "\uCB12"], /* Hangul Syllable */ + ["\uCB13", "\uCB13"], /* Hangul Syllable */ + ["\uCB14", "\uCB14"], /* Hangul Syllable */ + ["\uCB15", "\uCB15"], /* Hangul Syllable */ + ["\uCB16", "\uCB16"], /* Hangul Syllable */ + ["\uCB17", "\uCB17"], /* Hangul Syllable */ + ["\uCB18", "\uCB18"], /* Hangul Syllable */ + ["\uCB19", "\uCB19"], /* Hangul Syllable */ + ["\uCB1A", "\uCB1A"], /* Hangul Syllable */ + ["\uCB1B", "\uCB1B"], /* Hangul Syllable */ + ["\uCB1C", "\uCB1C"], /* Hangul Syllable */ + ["\uCB1D", "\uCB1D"], /* Hangul Syllable */ + ["\uCB1E", "\uCB1E"], /* Hangul Syllable */ + ["\uCB1F", "\uCB1F"], /* Hangul Syllable */ + ["\uCB20", "\uCB20"], /* Hangul Syllable */ + ["\uCB21", "\uCB21"], /* Hangul Syllable */ + ["\uCB22", "\uCB22"], /* Hangul Syllable */ + ["\uCB23", "\uCB23"], /* Hangul Syllable */ + ["\uCB24", "\uCB24"], /* Hangul Syllable */ + ["\uCB25", "\uCB25"], /* Hangul Syllable */ + ["\uCB26", "\uCB26"], /* Hangul Syllable */ + ["\uCB27", "\uCB27"], /* Hangul Syllable */ + ["\uCB28", "\uCB28"], /* Hangul Syllable */ + ["\uCB29", "\uCB29"], /* Hangul Syllable */ + ["\uCB2A", "\uCB2A"], /* Hangul Syllable */ + ["\uCB2B", "\uCB2B"], /* Hangul Syllable */ + ["\uCB2C", "\uCB2C"], /* Hangul Syllable */ + ["\uCB2D", "\uCB2D"], /* Hangul Syllable */ + ["\uCB2E", "\uCB2E"], /* Hangul Syllable */ + ["\uCB2F", "\uCB2F"], /* Hangul Syllable */ + ["\uCB30", "\uCB30"], /* Hangul Syllable */ + ["\uCB31", "\uCB31"], /* Hangul Syllable */ + ["\uCB32", "\uCB32"], /* Hangul Syllable */ + ["\uCB33", "\uCB33"], /* Hangul Syllable */ + ["\uCB34", "\uCB34"], /* Hangul Syllable */ + ["\uCB35", "\uCB35"], /* Hangul Syllable */ + ["\uCB36", "\uCB36"], /* Hangul Syllable */ + ["\uCB37", "\uCB37"], /* Hangul Syllable */ + ["\uCB38", "\uCB38"], /* Hangul Syllable */ + ["\uCB39", "\uCB39"], /* Hangul Syllable */ + ["\uCB3A", "\uCB3A"], /* Hangul Syllable */ + ["\uCB3B", "\uCB3B"], /* Hangul Syllable */ + ["\uCB3C", "\uCB3C"], /* Hangul Syllable */ + ["\uCB3D", "\uCB3D"], /* Hangul Syllable */ + ["\uCB3E", "\uCB3E"], /* Hangul Syllable */ + ["\uCB3F", "\uCB3F"], /* Hangul Syllable */ + ["\uCB40", "\uCB40"], /* Hangul Syllable */ + ["\uCB41", "\uCB41"], /* Hangul Syllable */ + ["\uCB42", "\uCB42"], /* Hangul Syllable */ + ["\uCB43", "\uCB43"], /* Hangul Syllable */ + ["\uCB44", "\uCB44"], /* Hangul Syllable */ + ["\uCB45", "\uCB45"], /* Hangul Syllable */ + ["\uCB46", "\uCB46"], /* Hangul Syllable */ + ["\uCB47", "\uCB47"], /* Hangul Syllable */ + ["\uCB48", "\uCB48"], /* Hangul Syllable */ + ["\uCB49", "\uCB49"], /* Hangul Syllable */ + ["\uCB4A", "\uCB4A"], /* Hangul Syllable */ + ["\uCB4B", "\uCB4B"], /* Hangul Syllable */ + ["\uCB4C", "\uCB4C"], /* Hangul Syllable */ + ["\uCB4D", "\uCB4D"], /* Hangul Syllable */ + ["\uCB4E", "\uCB4E"], /* Hangul Syllable */ + ["\uCB4F", "\uCB4F"], /* Hangul Syllable */ + ["\uCB50", "\uCB50"], /* Hangul Syllable */ + ["\uCB51", "\uCB51"], /* Hangul Syllable */ + ["\uCB52", "\uCB52"], /* Hangul Syllable */ + ["\uCB53", "\uCB53"], /* Hangul Syllable */ + ["\uCB54", "\uCB54"], /* Hangul Syllable */ + ["\uCB55", "\uCB55"], /* Hangul Syllable */ + ["\uCB56", "\uCB56"], /* Hangul Syllable */ + ["\uCB57", "\uCB57"], /* Hangul Syllable */ + ["\uCB58", "\uCB58"], /* Hangul Syllable */ + ["\uCB59", "\uCB59"], /* Hangul Syllable */ + ["\uCB5A", "\uCB5A"], /* Hangul Syllable */ + ["\uCB5B", "\uCB5B"], /* Hangul Syllable */ + ["\uCB5C", "\uCB5C"], /* Hangul Syllable */ + ["\uCB5D", "\uCB5D"], /* Hangul Syllable */ + ["\uCB5E", "\uCB5E"], /* Hangul Syllable */ + ["\uCB5F", "\uCB5F"], /* Hangul Syllable */ + ["\uCB60", "\uCB60"], /* Hangul Syllable */ + ["\uCB61", "\uCB61"], /* Hangul Syllable */ + ["\uCB62", "\uCB62"], /* Hangul Syllable */ + ["\uCB63", "\uCB63"], /* Hangul Syllable */ + ["\uCB64", "\uCB64"], /* Hangul Syllable */ + ["\uCB65", "\uCB65"], /* Hangul Syllable */ + ["\uCB66", "\uCB66"], /* Hangul Syllable */ + ["\uCB67", "\uCB67"], /* Hangul Syllable */ + ["\uCB68", "\uCB68"], /* Hangul Syllable */ + ["\uCB69", "\uCB69"], /* Hangul Syllable */ + ["\uCB6A", "\uCB6A"], /* Hangul Syllable */ + ["\uCB6B", "\uCB6B"], /* Hangul Syllable */ + ["\uCB6C", "\uCB6C"], /* Hangul Syllable */ + ["\uCB6D", "\uCB6D"], /* Hangul Syllable */ + ["\uCB6E", "\uCB6E"], /* Hangul Syllable */ + ["\uCB6F", "\uCB6F"], /* Hangul Syllable */ + ["\uCB70", "\uCB70"], /* Hangul Syllable */ + ["\uCB71", "\uCB71"], /* Hangul Syllable */ + ["\uCB72", "\uCB72"], /* Hangul Syllable */ + ["\uCB73", "\uCB73"], /* Hangul Syllable */ + ["\uCB74", "\uCB74"], /* Hangul Syllable */ + ["\uCB75", "\uCB75"], /* Hangul Syllable */ + ["\uCB76", "\uCB76"], /* Hangul Syllable */ + ["\uCB77", "\uCB77"], /* Hangul Syllable */ + ["\uCB78", "\uCB78"], /* Hangul Syllable */ + ["\uCB79", "\uCB79"], /* Hangul Syllable */ + ["\uCB7A", "\uCB7A"], /* Hangul Syllable */ + ["\uCB7B", "\uCB7B"], /* Hangul Syllable */ + ["\uCB7C", "\uCB7C"], /* Hangul Syllable */ + ["\uCB7D", "\uCB7D"], /* Hangul Syllable */ + ["\uCB7E", "\uCB7E"], /* Hangul Syllable */ + ["\uCB7F", "\uCB7F"], /* Hangul Syllable */ + ["\uCB80", "\uCB80"], /* Hangul Syllable */ + ["\uCB81", "\uCB81"], /* Hangul Syllable */ + ["\uCB82", "\uCB82"], /* Hangul Syllable */ + ["\uCB83", "\uCB83"], /* Hangul Syllable */ + ["\uCB84", "\uCB84"], /* Hangul Syllable */ + ["\uCB85", "\uCB85"], /* Hangul Syllable */ + ["\uCB86", "\uCB86"], /* Hangul Syllable */ + ["\uCB87", "\uCB87"], /* Hangul Syllable */ + ["\uCB88", "\uCB88"], /* Hangul Syllable */ + ["\uCB89", "\uCB89"], /* Hangul Syllable */ + ["\uCB8A", "\uCB8A"], /* Hangul Syllable */ + ["\uCB8B", "\uCB8B"], /* Hangul Syllable */ + ["\uCB8C", "\uCB8C"], /* Hangul Syllable */ + ["\uCB8D", "\uCB8D"], /* Hangul Syllable */ + ["\uCB8E", "\uCB8E"], /* Hangul Syllable */ + ["\uCB8F", "\uCB8F"], /* Hangul Syllable */ + ["\uCB90", "\uCB90"], /* Hangul Syllable */ + ["\uCB91", "\uCB91"], /* Hangul Syllable */ + ["\uCB92", "\uCB92"], /* Hangul Syllable */ + ["\uCB93", "\uCB93"], /* Hangul Syllable */ + ["\uCB94", "\uCB94"], /* Hangul Syllable */ + ["\uCB95", "\uCB95"], /* Hangul Syllable */ + ["\uCB96", "\uCB96"], /* Hangul Syllable */ + ["\uCB97", "\uCB97"], /* Hangul Syllable */ + ["\uCB98", "\uCB98"], /* Hangul Syllable */ + ["\uCB99", "\uCB99"], /* Hangul Syllable */ + ["\uCB9A", "\uCB9A"], /* Hangul Syllable */ + ["\uCB9B", "\uCB9B"], /* Hangul Syllable */ + ["\uCB9C", "\uCB9C"], /* Hangul Syllable */ + ["\uCB9D", "\uCB9D"], /* Hangul Syllable */ + ["\uCB9E", "\uCB9E"], /* Hangul Syllable */ + ["\uCB9F", "\uCB9F"], /* Hangul Syllable */ + ["\uCBA0", "\uCBA0"], /* Hangul Syllable */ + ["\uCBA1", "\uCBA1"], /* Hangul Syllable */ + ["\uCBA2", "\uCBA2"], /* Hangul Syllable */ + ["\uCBA3", "\uCBA3"], /* Hangul Syllable */ + ["\uCBA4", "\uCBA4"], /* Hangul Syllable */ + ["\uCBA5", "\uCBA5"], /* Hangul Syllable */ + ["\uCBA6", "\uCBA6"], /* Hangul Syllable */ + ["\uCBA7", "\uCBA7"], /* Hangul Syllable */ + ["\uCBA8", "\uCBA8"], /* Hangul Syllable */ + ["\uCBA9", "\uCBA9"], /* Hangul Syllable */ + ["\uCBAA", "\uCBAA"], /* Hangul Syllable */ + ["\uCBAB", "\uCBAB"], /* Hangul Syllable */ + ["\uCBAC", "\uCBAC"], /* Hangul Syllable */ + ["\uCBAD", "\uCBAD"], /* Hangul Syllable */ + ["\uCBAE", "\uCBAE"], /* Hangul Syllable */ + ["\uCBAF", "\uCBAF"], /* Hangul Syllable */ + ["\uCBB0", "\uCBB0"], /* Hangul Syllable */ + ["\uCBB1", "\uCBB1"], /* Hangul Syllable */ + ["\uCBB2", "\uCBB2"], /* Hangul Syllable */ + ["\uCBB3", "\uCBB3"], /* Hangul Syllable */ + ["\uCBB4", "\uCBB4"], /* Hangul Syllable */ + ["\uCBB5", "\uCBB5"], /* Hangul Syllable */ + ["\uCBB6", "\uCBB6"], /* Hangul Syllable */ + ["\uCBB7", "\uCBB7"], /* Hangul Syllable */ + ["\uCBB8", "\uCBB8"], /* Hangul Syllable */ + ["\uCBB9", "\uCBB9"], /* Hangul Syllable */ + ["\uCBBA", "\uCBBA"], /* Hangul Syllable */ + ["\uCBBB", "\uCBBB"], /* Hangul Syllable */ + ["\uCBBC", "\uCBBC"], /* Hangul Syllable */ + ["\uCBBD", "\uCBBD"], /* Hangul Syllable */ + ["\uCBBE", "\uCBBE"], /* Hangul Syllable */ + ["\uCBBF", "\uCBBF"], /* Hangul Syllable */ + ["\uCBC0", "\uCBC0"], /* Hangul Syllable */ + ["\uCBC1", "\uCBC1"], /* Hangul Syllable */ + ["\uCBC2", "\uCBC2"], /* Hangul Syllable */ + ["\uCBC3", "\uCBC3"], /* Hangul Syllable */ + ["\uCBC4", "\uCBC4"], /* Hangul Syllable */ + ["\uCBC5", "\uCBC5"], /* Hangul Syllable */ + ["\uCBC6", "\uCBC6"], /* Hangul Syllable */ + ["\uCBC7", "\uCBC7"], /* Hangul Syllable */ + ["\uCBC8", "\uCBC8"], /* Hangul Syllable */ + ["\uCBC9", "\uCBC9"], /* Hangul Syllable */ + ["\uCBCA", "\uCBCA"], /* Hangul Syllable */ + ["\uCBCB", "\uCBCB"], /* Hangul Syllable */ + ["\uCBCC", "\uCBCC"], /* Hangul Syllable */ + ["\uCBCD", "\uCBCD"], /* Hangul Syllable */ + ["\uCBCE", "\uCBCE"], /* Hangul Syllable */ + ["\uCBCF", "\uCBCF"], /* Hangul Syllable */ + ["\uCBD0", "\uCBD0"], /* Hangul Syllable */ + ["\uCBD1", "\uCBD1"], /* Hangul Syllable */ + ["\uCBD2", "\uCBD2"], /* Hangul Syllable */ + ["\uCBD3", "\uCBD3"], /* Hangul Syllable */ + ["\uCBD4", "\uCBD4"], /* Hangul Syllable */ + ["\uCBD5", "\uCBD5"], /* Hangul Syllable */ + ["\uCBD6", "\uCBD6"], /* Hangul Syllable */ + ["\uCBD7", "\uCBD7"], /* Hangul Syllable */ + ["\uCBD8", "\uCBD8"], /* Hangul Syllable */ + ["\uCBD9", "\uCBD9"], /* Hangul Syllable */ + ["\uCBDA", "\uCBDA"], /* Hangul Syllable */ + ["\uCBDB", "\uCBDB"], /* Hangul Syllable */ + ["\uCBDC", "\uCBDC"], /* Hangul Syllable */ + ["\uCBDD", "\uCBDD"], /* Hangul Syllable */ + ["\uCBDE", "\uCBDE"], /* Hangul Syllable */ + ["\uCBDF", "\uCBDF"], /* Hangul Syllable */ + ["\uCBE0", "\uCBE0"], /* Hangul Syllable */ + ["\uCBE1", "\uCBE1"], /* Hangul Syllable */ + ["\uCBE2", "\uCBE2"], /* Hangul Syllable */ + ["\uCBE3", "\uCBE3"], /* Hangul Syllable */ + ["\uCBE4", "\uCBE4"], /* Hangul Syllable */ + ["\uCBE5", "\uCBE5"], /* Hangul Syllable */ + ["\uCBE6", "\uCBE6"], /* Hangul Syllable */ + ["\uCBE7", "\uCBE7"], /* Hangul Syllable */ + ["\uCBE8", "\uCBE8"], /* Hangul Syllable */ + ["\uCBE9", "\uCBE9"], /* Hangul Syllable */ + ["\uCBEA", "\uCBEA"], /* Hangul Syllable */ + ["\uCBEB", "\uCBEB"], /* Hangul Syllable */ + ["\uCBEC", "\uCBEC"], /* Hangul Syllable */ + ["\uCBED", "\uCBED"], /* Hangul Syllable */ + ["\uCBEE", "\uCBEE"], /* Hangul Syllable */ + ["\uCBEF", "\uCBEF"], /* Hangul Syllable */ + ["\uCBF0", "\uCBF0"], /* Hangul Syllable */ + ["\uCBF1", "\uCBF1"], /* Hangul Syllable */ + ["\uCBF2", "\uCBF2"], /* Hangul Syllable */ + ["\uCBF3", "\uCBF3"], /* Hangul Syllable */ + ["\uCBF4", "\uCBF4"], /* Hangul Syllable */ + ["\uCBF5", "\uCBF5"], /* Hangul Syllable */ + ["\uCBF6", "\uCBF6"], /* Hangul Syllable */ + ["\uCBF7", "\uCBF7"], /* Hangul Syllable */ + ["\uCBF8", "\uCBF8"], /* Hangul Syllable */ + ["\uCBF9", "\uCBF9"], /* Hangul Syllable */ + ["\uCBFA", "\uCBFA"], /* Hangul Syllable */ + ["\uCBFB", "\uCBFB"], /* Hangul Syllable */ + ["\uCBFC", "\uCBFC"], /* Hangul Syllable */ + ["\uCBFD", "\uCBFD"], /* Hangul Syllable */ + ["\uCBFE", "\uCBFE"], /* Hangul Syllable */ + ["\uCBFF", "\uCBFF"], /* Hangul Syllable */ + ["\uCC00", "\uCC00"], /* Hangul Syllable */ + ["\uCC01", "\uCC01"], /* Hangul Syllable */ + ["\uCC02", "\uCC02"], /* Hangul Syllable */ + ["\uCC03", "\uCC03"], /* Hangul Syllable */ + ["\uCC04", "\uCC04"], /* Hangul Syllable */ + ["\uCC05", "\uCC05"], /* Hangul Syllable */ + ["\uCC06", "\uCC06"], /* Hangul Syllable */ + ["\uCC07", "\uCC07"], /* Hangul Syllable */ + ["\uCC08", "\uCC08"], /* Hangul Syllable */ + ["\uCC09", "\uCC09"], /* Hangul Syllable */ + ["\uCC0A", "\uCC0A"], /* Hangul Syllable */ + ["\uCC0B", "\uCC0B"], /* Hangul Syllable */ + ["\uCC0C", "\uCC0C"], /* Hangul Syllable */ + ["\uCC0D", "\uCC0D"], /* Hangul Syllable */ + ["\uCC0E", "\uCC0E"], /* Hangul Syllable */ + ["\uCC0F", "\uCC0F"], /* Hangul Syllable */ + ["\uCC10", "\uCC10"], /* Hangul Syllable */ + ["\uCC11", "\uCC11"], /* Hangul Syllable */ + ["\uCC12", "\uCC12"], /* Hangul Syllable */ + ["\uCC13", "\uCC13"], /* Hangul Syllable */ + ["\uCC14", "\uCC14"], /* Hangul Syllable */ + ["\uCC15", "\uCC15"], /* Hangul Syllable */ + ["\uCC16", "\uCC16"], /* Hangul Syllable */ + ["\uCC17", "\uCC17"], /* Hangul Syllable */ + ["\uCC18", "\uCC18"], /* Hangul Syllable */ + ["\uCC19", "\uCC19"], /* Hangul Syllable */ + ["\uCC1A", "\uCC1A"], /* Hangul Syllable */ + ["\uCC1B", "\uCC1B"], /* Hangul Syllable */ + ["\uCC1C", "\uCC1C"], /* Hangul Syllable */ + ["\uCC1D", "\uCC1D"], /* Hangul Syllable */ + ["\uCC1E", "\uCC1E"], /* Hangul Syllable */ + ["\uCC1F", "\uCC1F"], /* Hangul Syllable */ + ["\uCC20", "\uCC20"], /* Hangul Syllable */ + ["\uCC21", "\uCC21"], /* Hangul Syllable */ + ["\uCC22", "\uCC22"], /* Hangul Syllable */ + ["\uCC23", "\uCC23"], /* Hangul Syllable */ + ["\uCC24", "\uCC24"], /* Hangul Syllable */ + ["\uCC25", "\uCC25"], /* Hangul Syllable */ + ["\uCC26", "\uCC26"], /* Hangul Syllable */ + ["\uCC27", "\uCC27"], /* Hangul Syllable */ + ["\uCC28", "\uCC28"], /* Hangul Syllable */ + ["\uCC29", "\uCC29"], /* Hangul Syllable */ + ["\uCC2A", "\uCC2A"], /* Hangul Syllable */ + ["\uCC2B", "\uCC2B"], /* Hangul Syllable */ + ["\uCC2C", "\uCC2C"], /* Hangul Syllable */ + ["\uCC2D", "\uCC2D"], /* Hangul Syllable */ + ["\uCC2E", "\uCC2E"], /* Hangul Syllable */ + ["\uCC2F", "\uCC2F"], /* Hangul Syllable */ + ["\uCC30", "\uCC30"], /* Hangul Syllable */ + ["\uCC31", "\uCC31"], /* Hangul Syllable */ + ["\uCC32", "\uCC32"], /* Hangul Syllable */ + ["\uCC33", "\uCC33"], /* Hangul Syllable */ + ["\uCC34", "\uCC34"], /* Hangul Syllable */ + ["\uCC35", "\uCC35"], /* Hangul Syllable */ + ["\uCC36", "\uCC36"], /* Hangul Syllable */ + ["\uCC37", "\uCC37"], /* Hangul Syllable */ + ["\uCC38", "\uCC38"], /* Hangul Syllable */ + ["\uCC39", "\uCC39"], /* Hangul Syllable */ + ["\uCC3A", "\uCC3A"], /* Hangul Syllable */ + ["\uCC3B", "\uCC3B"], /* Hangul Syllable */ + ["\uCC3C", "\uCC3C"], /* Hangul Syllable */ + ["\uCC3D", "\uCC3D"], /* Hangul Syllable */ + ["\uCC3E", "\uCC3E"], /* Hangul Syllable */ + ["\uCC3F", "\uCC3F"], /* Hangul Syllable */ + ["\uCC40", "\uCC40"], /* Hangul Syllable */ + ["\uCC41", "\uCC41"], /* Hangul Syllable */ + ["\uCC42", "\uCC42"], /* Hangul Syllable */ + ["\uCC43", "\uCC43"], /* Hangul Syllable */ + ["\uCC44", "\uCC44"], /* Hangul Syllable */ + ["\uCC45", "\uCC45"], /* Hangul Syllable */ + ["\uCC46", "\uCC46"], /* Hangul Syllable */ + ["\uCC47", "\uCC47"], /* Hangul Syllable */ + ["\uCC48", "\uCC48"], /* Hangul Syllable */ + ["\uCC49", "\uCC49"], /* Hangul Syllable */ + ["\uCC4A", "\uCC4A"], /* Hangul Syllable */ + ["\uCC4B", "\uCC4B"], /* Hangul Syllable */ + ["\uCC4C", "\uCC4C"], /* Hangul Syllable */ + ["\uCC4D", "\uCC4D"], /* Hangul Syllable */ + ["\uCC4E", "\uCC4E"], /* Hangul Syllable */ + ["\uCC4F", "\uCC4F"], /* Hangul Syllable */ + ["\uCC50", "\uCC50"], /* Hangul Syllable */ + ["\uCC51", "\uCC51"], /* Hangul Syllable */ + ["\uCC52", "\uCC52"], /* Hangul Syllable */ + ["\uCC53", "\uCC53"], /* Hangul Syllable */ + ["\uCC54", "\uCC54"], /* Hangul Syllable */ + ["\uCC55", "\uCC55"], /* Hangul Syllable */ + ["\uCC56", "\uCC56"], /* Hangul Syllable */ + ["\uCC57", "\uCC57"], /* Hangul Syllable */ + ["\uCC58", "\uCC58"], /* Hangul Syllable */ + ["\uCC59", "\uCC59"], /* Hangul Syllable */ + ["\uCC5A", "\uCC5A"], /* Hangul Syllable */ + ["\uCC5B", "\uCC5B"], /* Hangul Syllable */ + ["\uCC5C", "\uCC5C"], /* Hangul Syllable */ + ["\uCC5D", "\uCC5D"], /* Hangul Syllable */ + ["\uCC5E", "\uCC5E"], /* Hangul Syllable */ + ["\uCC5F", "\uCC5F"], /* Hangul Syllable */ + ["\uCC60", "\uCC60"], /* Hangul Syllable */ + ["\uCC61", "\uCC61"], /* Hangul Syllable */ + ["\uCC62", "\uCC62"], /* Hangul Syllable */ + ["\uCC63", "\uCC63"], /* Hangul Syllable */ + ["\uCC64", "\uCC64"], /* Hangul Syllable */ + ["\uCC65", "\uCC65"], /* Hangul Syllable */ + ["\uCC66", "\uCC66"], /* Hangul Syllable */ + ["\uCC67", "\uCC67"], /* Hangul Syllable */ + ["\uCC68", "\uCC68"], /* Hangul Syllable */ + ["\uCC69", "\uCC69"], /* Hangul Syllable */ + ["\uCC6A", "\uCC6A"], /* Hangul Syllable */ + ["\uCC6B", "\uCC6B"], /* Hangul Syllable */ + ["\uCC6C", "\uCC6C"], /* Hangul Syllable */ + ["\uCC6D", "\uCC6D"], /* Hangul Syllable */ + ["\uCC6E", "\uCC6E"], /* Hangul Syllable */ + ["\uCC6F", "\uCC6F"], /* Hangul Syllable */ + ["\uCC70", "\uCC70"], /* Hangul Syllable */ + ["\uCC71", "\uCC71"], /* Hangul Syllable */ + ["\uCC72", "\uCC72"], /* Hangul Syllable */ + ["\uCC73", "\uCC73"], /* Hangul Syllable */ + ["\uCC74", "\uCC74"], /* Hangul Syllable */ + ["\uCC75", "\uCC75"], /* Hangul Syllable */ + ["\uCC76", "\uCC76"], /* Hangul Syllable */ + ["\uCC77", "\uCC77"], /* Hangul Syllable */ + ["\uCC78", "\uCC78"], /* Hangul Syllable */ + ["\uCC79", "\uCC79"], /* Hangul Syllable */ + ["\uCC7A", "\uCC7A"], /* Hangul Syllable */ + ["\uCC7B", "\uCC7B"], /* Hangul Syllable */ + ["\uCC7C", "\uCC7C"], /* Hangul Syllable */ + ["\uCC7D", "\uCC7D"], /* Hangul Syllable */ + ["\uCC7E", "\uCC7E"], /* Hangul Syllable */ + ["\uCC7F", "\uCC7F"], /* Hangul Syllable */ + ["\uCC80", "\uCC80"], /* Hangul Syllable */ + ["\uCC81", "\uCC81"], /* Hangul Syllable */ + ["\uCC82", "\uCC82"], /* Hangul Syllable */ + ["\uCC83", "\uCC83"], /* Hangul Syllable */ + ["\uCC84", "\uCC84"], /* Hangul Syllable */ + ["\uCC85", "\uCC85"], /* Hangul Syllable */ + ["\uCC86", "\uCC86"], /* Hangul Syllable */ + ["\uCC87", "\uCC87"], /* Hangul Syllable */ + ["\uCC88", "\uCC88"], /* Hangul Syllable */ + ["\uCC89", "\uCC89"], /* Hangul Syllable */ + ["\uCC8A", "\uCC8A"], /* Hangul Syllable */ + ["\uCC8B", "\uCC8B"], /* Hangul Syllable */ + ["\uCC8C", "\uCC8C"], /* Hangul Syllable */ + ["\uCC8D", "\uCC8D"], /* Hangul Syllable */ + ["\uCC8E", "\uCC8E"], /* Hangul Syllable */ + ["\uCC8F", "\uCC8F"], /* Hangul Syllable */ + ["\uCC90", "\uCC90"], /* Hangul Syllable */ + ["\uCC91", "\uCC91"], /* Hangul Syllable */ + ["\uCC92", "\uCC92"], /* Hangul Syllable */ + ["\uCC93", "\uCC93"], /* Hangul Syllable */ + ["\uCC94", "\uCC94"], /* Hangul Syllable */ + ["\uCC95", "\uCC95"], /* Hangul Syllable */ + ["\uCC96", "\uCC96"], /* Hangul Syllable */ + ["\uCC97", "\uCC97"], /* Hangul Syllable */ + ["\uCC98", "\uCC98"], /* Hangul Syllable */ + ["\uCC99", "\uCC99"], /* Hangul Syllable */ + ["\uCC9A", "\uCC9A"], /* Hangul Syllable */ + ["\uCC9B", "\uCC9B"], /* Hangul Syllable */ + ["\uCC9C", "\uCC9C"], /* Hangul Syllable */ + ["\uCC9D", "\uCC9D"], /* Hangul Syllable */ + ["\uCC9E", "\uCC9E"], /* Hangul Syllable */ + ["\uCC9F", "\uCC9F"], /* Hangul Syllable */ + ["\uCCA0", "\uCCA0"], /* Hangul Syllable */ + ["\uCCA1", "\uCCA1"], /* Hangul Syllable */ + ["\uCCA2", "\uCCA2"], /* Hangul Syllable */ + ["\uCCA3", "\uCCA3"], /* Hangul Syllable */ + ["\uCCA4", "\uCCA4"], /* Hangul Syllable */ + ["\uCCA5", "\uCCA5"], /* Hangul Syllable */ + ["\uCCA6", "\uCCA6"], /* Hangul Syllable */ + ["\uCCA7", "\uCCA7"], /* Hangul Syllable */ + ["\uCCA8", "\uCCA8"], /* Hangul Syllable */ + ["\uCCA9", "\uCCA9"], /* Hangul Syllable */ + ["\uCCAA", "\uCCAA"], /* Hangul Syllable */ + ["\uCCAB", "\uCCAB"], /* Hangul Syllable */ + ["\uCCAC", "\uCCAC"], /* Hangul Syllable */ + ["\uCCAD", "\uCCAD"], /* Hangul Syllable */ + ["\uCCAE", "\uCCAE"], /* Hangul Syllable */ + ["\uCCAF", "\uCCAF"], /* Hangul Syllable */ + ["\uCCB0", "\uCCB0"], /* Hangul Syllable */ + ["\uCCB1", "\uCCB1"], /* Hangul Syllable */ + ["\uCCB2", "\uCCB2"], /* Hangul Syllable */ + ["\uCCB3", "\uCCB3"], /* Hangul Syllable */ + ["\uCCB4", "\uCCB4"], /* Hangul Syllable */ + ["\uCCB5", "\uCCB5"], /* Hangul Syllable */ + ["\uCCB6", "\uCCB6"], /* Hangul Syllable */ + ["\uCCB7", "\uCCB7"], /* Hangul Syllable */ + ["\uCCB8", "\uCCB8"], /* Hangul Syllable */ + ["\uCCB9", "\uCCB9"], /* Hangul Syllable */ + ["\uCCBA", "\uCCBA"], /* Hangul Syllable */ + ["\uCCBB", "\uCCBB"], /* Hangul Syllable */ + ["\uCCBC", "\uCCBC"], /* Hangul Syllable */ + ["\uCCBD", "\uCCBD"], /* Hangul Syllable */ + ["\uCCBE", "\uCCBE"], /* Hangul Syllable */ + ["\uCCBF", "\uCCBF"], /* Hangul Syllable */ + ["\uCCC0", "\uCCC0"], /* Hangul Syllable */ + ["\uCCC1", "\uCCC1"], /* Hangul Syllable */ + ["\uCCC2", "\uCCC2"], /* Hangul Syllable */ + ["\uCCC3", "\uCCC3"], /* Hangul Syllable */ + ["\uCCC4", "\uCCC4"], /* Hangul Syllable */ + ["\uCCC5", "\uCCC5"], /* Hangul Syllable */ + ["\uCCC6", "\uCCC6"], /* Hangul Syllable */ + ["\uCCC7", "\uCCC7"], /* Hangul Syllable */ + ["\uCCC8", "\uCCC8"], /* Hangul Syllable */ + ["\uCCC9", "\uCCC9"], /* Hangul Syllable */ + ["\uCCCA", "\uCCCA"], /* Hangul Syllable */ + ["\uCCCB", "\uCCCB"], /* Hangul Syllable */ + ["\uCCCC", "\uCCCC"], /* Hangul Syllable */ + ["\uCCCD", "\uCCCD"], /* Hangul Syllable */ + ["\uCCCE", "\uCCCE"], /* Hangul Syllable */ + ["\uCCCF", "\uCCCF"], /* Hangul Syllable */ + ["\uCCD0", "\uCCD0"], /* Hangul Syllable */ + ["\uCCD1", "\uCCD1"], /* Hangul Syllable */ + ["\uCCD2", "\uCCD2"], /* Hangul Syllable */ + ["\uCCD3", "\uCCD3"], /* Hangul Syllable */ + ["\uCCD4", "\uCCD4"], /* Hangul Syllable */ + ["\uCCD5", "\uCCD5"], /* Hangul Syllable */ + ["\uCCD6", "\uCCD6"], /* Hangul Syllable */ + ["\uCCD7", "\uCCD7"], /* Hangul Syllable */ + ["\uCCD8", "\uCCD8"], /* Hangul Syllable */ + ["\uCCD9", "\uCCD9"], /* Hangul Syllable */ + ["\uCCDA", "\uCCDA"], /* Hangul Syllable */ + ["\uCCDB", "\uCCDB"], /* Hangul Syllable */ + ["\uCCDC", "\uCCDC"], /* Hangul Syllable */ + ["\uCCDD", "\uCCDD"], /* Hangul Syllable */ + ["\uCCDE", "\uCCDE"], /* Hangul Syllable */ + ["\uCCDF", "\uCCDF"], /* Hangul Syllable */ + ["\uCCE0", "\uCCE0"], /* Hangul Syllable */ + ["\uCCE1", "\uCCE1"], /* Hangul Syllable */ + ["\uCCE2", "\uCCE2"], /* Hangul Syllable */ + ["\uCCE3", "\uCCE3"], /* Hangul Syllable */ + ["\uCCE4", "\uCCE4"], /* Hangul Syllable */ + ["\uCCE5", "\uCCE5"], /* Hangul Syllable */ + ["\uCCE6", "\uCCE6"], /* Hangul Syllable */ + ["\uCCE7", "\uCCE7"], /* Hangul Syllable */ + ["\uCCE8", "\uCCE8"], /* Hangul Syllable */ + ["\uCCE9", "\uCCE9"], /* Hangul Syllable */ + ["\uCCEA", "\uCCEA"], /* Hangul Syllable */ + ["\uCCEB", "\uCCEB"], /* Hangul Syllable */ + ["\uCCEC", "\uCCEC"], /* Hangul Syllable */ + ["\uCCED", "\uCCED"], /* Hangul Syllable */ + ["\uCCEE", "\uCCEE"], /* Hangul Syllable */ + ["\uCCEF", "\uCCEF"], /* Hangul Syllable */ + ["\uCCF0", "\uCCF0"], /* Hangul Syllable */ + ["\uCCF1", "\uCCF1"], /* Hangul Syllable */ + ["\uCCF2", "\uCCF2"], /* Hangul Syllable */ + ["\uCCF3", "\uCCF3"], /* Hangul Syllable */ + ["\uCCF4", "\uCCF4"], /* Hangul Syllable */ + ["\uCCF5", "\uCCF5"], /* Hangul Syllable */ + ["\uCCF6", "\uCCF6"], /* Hangul Syllable */ + ["\uCCF7", "\uCCF7"], /* Hangul Syllable */ + ["\uCCF8", "\uCCF8"], /* Hangul Syllable */ + ["\uCCF9", "\uCCF9"], /* Hangul Syllable */ + ["\uCCFA", "\uCCFA"], /* Hangul Syllable */ + ["\uCCFB", "\uCCFB"], /* Hangul Syllable */ + ["\uCCFC", "\uCCFC"], /* Hangul Syllable */ + ["\uCCFD", "\uCCFD"], /* Hangul Syllable */ + ["\uCCFE", "\uCCFE"], /* Hangul Syllable */ + ["\uCCFF", "\uCCFF"], /* Hangul Syllable */ + ["\uCD00", "\uCD00"], /* Hangul Syllable */ + ["\uCD01", "\uCD01"], /* Hangul Syllable */ + ["\uCD02", "\uCD02"], /* Hangul Syllable */ + ["\uCD03", "\uCD03"], /* Hangul Syllable */ + ["\uCD04", "\uCD04"], /* Hangul Syllable */ + ["\uCD05", "\uCD05"], /* Hangul Syllable */ + ["\uCD06", "\uCD06"], /* Hangul Syllable */ + ["\uCD07", "\uCD07"], /* Hangul Syllable */ + ["\uCD08", "\uCD08"], /* Hangul Syllable */ + ["\uCD09", "\uCD09"], /* Hangul Syllable */ + ["\uCD0A", "\uCD0A"], /* Hangul Syllable */ + ["\uCD0B", "\uCD0B"], /* Hangul Syllable */ + ["\uCD0C", "\uCD0C"], /* Hangul Syllable */ + ["\uCD0D", "\uCD0D"], /* Hangul Syllable */ + ["\uCD0E", "\uCD0E"], /* Hangul Syllable */ + ["\uCD0F", "\uCD0F"], /* Hangul Syllable */ + ["\uCD10", "\uCD10"], /* Hangul Syllable */ + ["\uCD11", "\uCD11"], /* Hangul Syllable */ + ["\uCD12", "\uCD12"], /* Hangul Syllable */ + ["\uCD13", "\uCD13"], /* Hangul Syllable */ + ["\uCD14", "\uCD14"], /* Hangul Syllable */ + ["\uCD15", "\uCD15"], /* Hangul Syllable */ + ["\uCD16", "\uCD16"], /* Hangul Syllable */ + ["\uCD17", "\uCD17"], /* Hangul Syllable */ + ["\uCD18", "\uCD18"], /* Hangul Syllable */ + ["\uCD19", "\uCD19"], /* Hangul Syllable */ + ["\uCD1A", "\uCD1A"], /* Hangul Syllable */ + ["\uCD1B", "\uCD1B"], /* Hangul Syllable */ + ["\uCD1C", "\uCD1C"], /* Hangul Syllable */ + ["\uCD1D", "\uCD1D"], /* Hangul Syllable */ + ["\uCD1E", "\uCD1E"], /* Hangul Syllable */ + ["\uCD1F", "\uCD1F"], /* Hangul Syllable */ + ["\uCD20", "\uCD20"], /* Hangul Syllable */ + ["\uCD21", "\uCD21"], /* Hangul Syllable */ + ["\uCD22", "\uCD22"], /* Hangul Syllable */ + ["\uCD23", "\uCD23"], /* Hangul Syllable */ + ["\uCD24", "\uCD24"], /* Hangul Syllable */ + ["\uCD25", "\uCD25"], /* Hangul Syllable */ + ["\uCD26", "\uCD26"], /* Hangul Syllable */ + ["\uCD27", "\uCD27"], /* Hangul Syllable */ + ["\uCD28", "\uCD28"], /* Hangul Syllable */ + ["\uCD29", "\uCD29"], /* Hangul Syllable */ + ["\uCD2A", "\uCD2A"], /* Hangul Syllable */ + ["\uCD2B", "\uCD2B"], /* Hangul Syllable */ + ["\uCD2C", "\uCD2C"], /* Hangul Syllable */ + ["\uCD2D", "\uCD2D"], /* Hangul Syllable */ + ["\uCD2E", "\uCD2E"], /* Hangul Syllable */ + ["\uCD2F", "\uCD2F"], /* Hangul Syllable */ + ["\uCD30", "\uCD30"], /* Hangul Syllable */ + ["\uCD31", "\uCD31"], /* Hangul Syllable */ + ["\uCD32", "\uCD32"], /* Hangul Syllable */ + ["\uCD33", "\uCD33"], /* Hangul Syllable */ + ["\uCD34", "\uCD34"], /* Hangul Syllable */ + ["\uCD35", "\uCD35"], /* Hangul Syllable */ + ["\uCD36", "\uCD36"], /* Hangul Syllable */ + ["\uCD37", "\uCD37"], /* Hangul Syllable */ + ["\uCD38", "\uCD38"], /* Hangul Syllable */ + ["\uCD39", "\uCD39"], /* Hangul Syllable */ + ["\uCD3A", "\uCD3A"], /* Hangul Syllable */ + ["\uCD3B", "\uCD3B"], /* Hangul Syllable */ + ["\uCD3C", "\uCD3C"], /* Hangul Syllable */ + ["\uCD3D", "\uCD3D"], /* Hangul Syllable */ + ["\uCD3E", "\uCD3E"], /* Hangul Syllable */ + ["\uCD3F", "\uCD3F"], /* Hangul Syllable */ + ["\uCD40", "\uCD40"], /* Hangul Syllable */ + ["\uCD41", "\uCD41"], /* Hangul Syllable */ + ["\uCD42", "\uCD42"], /* Hangul Syllable */ + ["\uCD43", "\uCD43"], /* Hangul Syllable */ + ["\uCD44", "\uCD44"], /* Hangul Syllable */ + ["\uCD45", "\uCD45"], /* Hangul Syllable */ + ["\uCD46", "\uCD46"], /* Hangul Syllable */ + ["\uCD47", "\uCD47"], /* Hangul Syllable */ + ["\uCD48", "\uCD48"], /* Hangul Syllable */ + ["\uCD49", "\uCD49"], /* Hangul Syllable */ + ["\uCD4A", "\uCD4A"], /* Hangul Syllable */ + ["\uCD4B", "\uCD4B"], /* Hangul Syllable */ + ["\uCD4C", "\uCD4C"], /* Hangul Syllable */ + ["\uCD4D", "\uCD4D"], /* Hangul Syllable */ + ["\uCD4E", "\uCD4E"], /* Hangul Syllable */ + ["\uCD4F", "\uCD4F"], /* Hangul Syllable */ + ["\uCD50", "\uCD50"], /* Hangul Syllable */ + ["\uCD51", "\uCD51"], /* Hangul Syllable */ + ["\uCD52", "\uCD52"], /* Hangul Syllable */ + ["\uCD53", "\uCD53"], /* Hangul Syllable */ + ["\uCD54", "\uCD54"], /* Hangul Syllable */ + ["\uCD55", "\uCD55"], /* Hangul Syllable */ + ["\uCD56", "\uCD56"], /* Hangul Syllable */ + ["\uCD57", "\uCD57"], /* Hangul Syllable */ + ["\uCD58", "\uCD58"], /* Hangul Syllable */ + ["\uCD59", "\uCD59"], /* Hangul Syllable */ + ["\uCD5A", "\uCD5A"], /* Hangul Syllable */ + ["\uCD5B", "\uCD5B"], /* Hangul Syllable */ + ["\uCD5C", "\uCD5C"], /* Hangul Syllable */ + ["\uCD5D", "\uCD5D"], /* Hangul Syllable */ + ["\uCD5E", "\uCD5E"], /* Hangul Syllable */ + ["\uCD5F", "\uCD5F"], /* Hangul Syllable */ + ["\uCD60", "\uCD60"], /* Hangul Syllable */ + ["\uCD61", "\uCD61"], /* Hangul Syllable */ + ["\uCD62", "\uCD62"], /* Hangul Syllable */ + ["\uCD63", "\uCD63"], /* Hangul Syllable */ + ["\uCD64", "\uCD64"], /* Hangul Syllable */ + ["\uCD65", "\uCD65"], /* Hangul Syllable */ + ["\uCD66", "\uCD66"], /* Hangul Syllable */ + ["\uCD67", "\uCD67"], /* Hangul Syllable */ + ["\uCD68", "\uCD68"], /* Hangul Syllable */ + ["\uCD69", "\uCD69"], /* Hangul Syllable */ + ["\uCD6A", "\uCD6A"], /* Hangul Syllable */ + ["\uCD6B", "\uCD6B"], /* Hangul Syllable */ + ["\uCD6C", "\uCD6C"], /* Hangul Syllable */ + ["\uCD6D", "\uCD6D"], /* Hangul Syllable */ + ["\uCD6E", "\uCD6E"], /* Hangul Syllable */ + ["\uCD6F", "\uCD6F"], /* Hangul Syllable */ + ["\uCD70", "\uCD70"], /* Hangul Syllable */ + ["\uCD71", "\uCD71"], /* Hangul Syllable */ + ["\uCD72", "\uCD72"], /* Hangul Syllable */ + ["\uCD73", "\uCD73"], /* Hangul Syllable */ + ["\uCD74", "\uCD74"], /* Hangul Syllable */ + ["\uCD75", "\uCD75"], /* Hangul Syllable */ + ["\uCD76", "\uCD76"], /* Hangul Syllable */ + ["\uCD77", "\uCD77"], /* Hangul Syllable */ + ["\uCD78", "\uCD78"], /* Hangul Syllable */ + ["\uCD79", "\uCD79"], /* Hangul Syllable */ + ["\uCD7A", "\uCD7A"], /* Hangul Syllable */ + ["\uCD7B", "\uCD7B"], /* Hangul Syllable */ + ["\uCD7C", "\uCD7C"], /* Hangul Syllable */ + ["\uCD7D", "\uCD7D"], /* Hangul Syllable */ + ["\uCD7E", "\uCD7E"], /* Hangul Syllable */ + ["\uCD7F", "\uCD7F"], /* Hangul Syllable */ + ["\uCD80", "\uCD80"], /* Hangul Syllable */ + ["\uCD81", "\uCD81"], /* Hangul Syllable */ + ["\uCD82", "\uCD82"], /* Hangul Syllable */ + ["\uCD83", "\uCD83"], /* Hangul Syllable */ + ["\uCD84", "\uCD84"], /* Hangul Syllable */ + ["\uCD85", "\uCD85"], /* Hangul Syllable */ + ["\uCD86", "\uCD86"], /* Hangul Syllable */ + ["\uCD87", "\uCD87"], /* Hangul Syllable */ + ["\uCD88", "\uCD88"], /* Hangul Syllable */ + ["\uCD89", "\uCD89"], /* Hangul Syllable */ + ["\uCD8A", "\uCD8A"], /* Hangul Syllable */ + ["\uCD8B", "\uCD8B"], /* Hangul Syllable */ + ["\uCD8C", "\uCD8C"], /* Hangul Syllable */ + ["\uCD8D", "\uCD8D"], /* Hangul Syllable */ + ["\uCD8E", "\uCD8E"], /* Hangul Syllable */ + ["\uCD8F", "\uCD8F"], /* Hangul Syllable */ + ["\uCD90", "\uCD90"], /* Hangul Syllable */ + ["\uCD91", "\uCD91"], /* Hangul Syllable */ + ["\uCD92", "\uCD92"], /* Hangul Syllable */ + ["\uCD93", "\uCD93"], /* Hangul Syllable */ + ["\uCD94", "\uCD94"], /* Hangul Syllable */ + ["\uCD95", "\uCD95"], /* Hangul Syllable */ + ["\uCD96", "\uCD96"], /* Hangul Syllable */ + ["\uCD97", "\uCD97"], /* Hangul Syllable */ + ["\uCD98", "\uCD98"], /* Hangul Syllable */ + ["\uCD99", "\uCD99"], /* Hangul Syllable */ + ["\uCD9A", "\uCD9A"], /* Hangul Syllable */ + ["\uCD9B", "\uCD9B"], /* Hangul Syllable */ + ["\uCD9C", "\uCD9C"], /* Hangul Syllable */ + ["\uCD9D", "\uCD9D"], /* Hangul Syllable */ + ["\uCD9E", "\uCD9E"], /* Hangul Syllable */ + ["\uCD9F", "\uCD9F"], /* Hangul Syllable */ + ["\uCDA0", "\uCDA0"], /* Hangul Syllable */ + ["\uCDA1", "\uCDA1"], /* Hangul Syllable */ + ["\uCDA2", "\uCDA2"], /* Hangul Syllable */ + ["\uCDA3", "\uCDA3"], /* Hangul Syllable */ + ["\uCDA4", "\uCDA4"], /* Hangul Syllable */ + ["\uCDA5", "\uCDA5"], /* Hangul Syllable */ + ["\uCDA6", "\uCDA6"], /* Hangul Syllable */ + ["\uCDA7", "\uCDA7"], /* Hangul Syllable */ + ["\uCDA8", "\uCDA8"], /* Hangul Syllable */ + ["\uCDA9", "\uCDA9"], /* Hangul Syllable */ + ["\uCDAA", "\uCDAA"], /* Hangul Syllable */ + ["\uCDAB", "\uCDAB"], /* Hangul Syllable */ + ["\uCDAC", "\uCDAC"], /* Hangul Syllable */ + ["\uCDAD", "\uCDAD"], /* Hangul Syllable */ + ["\uCDAE", "\uCDAE"], /* Hangul Syllable */ + ["\uCDAF", "\uCDAF"], /* Hangul Syllable */ + ["\uCDB0", "\uCDB0"], /* Hangul Syllable */ + ["\uCDB1", "\uCDB1"], /* Hangul Syllable */ + ["\uCDB2", "\uCDB2"], /* Hangul Syllable */ + ["\uCDB3", "\uCDB3"], /* Hangul Syllable */ + ["\uCDB4", "\uCDB4"], /* Hangul Syllable */ + ["\uCDB5", "\uCDB5"], /* Hangul Syllable */ + ["\uCDB6", "\uCDB6"], /* Hangul Syllable */ + ["\uCDB7", "\uCDB7"], /* Hangul Syllable */ + ["\uCDB8", "\uCDB8"], /* Hangul Syllable */ + ["\uCDB9", "\uCDB9"], /* Hangul Syllable */ + ["\uCDBA", "\uCDBA"], /* Hangul Syllable */ + ["\uCDBB", "\uCDBB"], /* Hangul Syllable */ + ["\uCDBC", "\uCDBC"], /* Hangul Syllable */ + ["\uCDBD", "\uCDBD"], /* Hangul Syllable */ + ["\uCDBE", "\uCDBE"], /* Hangul Syllable */ + ["\uCDBF", "\uCDBF"], /* Hangul Syllable */ + ["\uCDC0", "\uCDC0"], /* Hangul Syllable */ + ["\uCDC1", "\uCDC1"], /* Hangul Syllable */ + ["\uCDC2", "\uCDC2"], /* Hangul Syllable */ + ["\uCDC3", "\uCDC3"], /* Hangul Syllable */ + ["\uCDC4", "\uCDC4"], /* Hangul Syllable */ + ["\uCDC5", "\uCDC5"], /* Hangul Syllable */ + ["\uCDC6", "\uCDC6"], /* Hangul Syllable */ + ["\uCDC7", "\uCDC7"], /* Hangul Syllable */ + ["\uCDC8", "\uCDC8"], /* Hangul Syllable */ + ["\uCDC9", "\uCDC9"], /* Hangul Syllable */ + ["\uCDCA", "\uCDCA"], /* Hangul Syllable */ + ["\uCDCB", "\uCDCB"], /* Hangul Syllable */ + ["\uCDCC", "\uCDCC"], /* Hangul Syllable */ + ["\uCDCD", "\uCDCD"], /* Hangul Syllable */ + ["\uCDCE", "\uCDCE"], /* Hangul Syllable */ + ["\uCDCF", "\uCDCF"], /* Hangul Syllable */ + ["\uCDD0", "\uCDD0"], /* Hangul Syllable */ + ["\uCDD1", "\uCDD1"], /* Hangul Syllable */ + ["\uCDD2", "\uCDD2"], /* Hangul Syllable */ + ["\uCDD3", "\uCDD3"], /* Hangul Syllable */ + ["\uCDD4", "\uCDD4"], /* Hangul Syllable */ + ["\uCDD5", "\uCDD5"], /* Hangul Syllable */ + ["\uCDD6", "\uCDD6"], /* Hangul Syllable */ + ["\uCDD7", "\uCDD7"], /* Hangul Syllable */ + ["\uCDD8", "\uCDD8"], /* Hangul Syllable */ + ["\uCDD9", "\uCDD9"], /* Hangul Syllable */ + ["\uCDDA", "\uCDDA"], /* Hangul Syllable */ + ["\uCDDB", "\uCDDB"], /* Hangul Syllable */ + ["\uCDDC", "\uCDDC"], /* Hangul Syllable */ + ["\uCDDD", "\uCDDD"], /* Hangul Syllable */ + ["\uCDDE", "\uCDDE"], /* Hangul Syllable */ + ["\uCDDF", "\uCDDF"], /* Hangul Syllable */ + ["\uCDE0", "\uCDE0"], /* Hangul Syllable */ + ["\uCDE1", "\uCDE1"], /* Hangul Syllable */ + ["\uCDE2", "\uCDE2"], /* Hangul Syllable */ + ["\uCDE3", "\uCDE3"], /* Hangul Syllable */ + ["\uCDE4", "\uCDE4"], /* Hangul Syllable */ + ["\uCDE5", "\uCDE5"], /* Hangul Syllable */ + ["\uCDE6", "\uCDE6"], /* Hangul Syllable */ + ["\uCDE7", "\uCDE7"], /* Hangul Syllable */ + ["\uCDE8", "\uCDE8"], /* Hangul Syllable */ + ["\uCDE9", "\uCDE9"], /* Hangul Syllable */ + ["\uCDEA", "\uCDEA"], /* Hangul Syllable */ + ["\uCDEB", "\uCDEB"], /* Hangul Syllable */ + ["\uCDEC", "\uCDEC"], /* Hangul Syllable */ + ["\uCDED", "\uCDED"], /* Hangul Syllable */ + ["\uCDEE", "\uCDEE"], /* Hangul Syllable */ + ["\uCDEF", "\uCDEF"], /* Hangul Syllable */ + ["\uCDF0", "\uCDF0"], /* Hangul Syllable */ + ["\uCDF1", "\uCDF1"], /* Hangul Syllable */ + ["\uCDF2", "\uCDF2"], /* Hangul Syllable */ + ["\uCDF3", "\uCDF3"], /* Hangul Syllable */ + ["\uCDF4", "\uCDF4"], /* Hangul Syllable */ + ["\uCDF5", "\uCDF5"], /* Hangul Syllable */ + ["\uCDF6", "\uCDF6"], /* Hangul Syllable */ + ["\uCDF7", "\uCDF7"], /* Hangul Syllable */ + ["\uCDF8", "\uCDF8"], /* Hangul Syllable */ + ["\uCDF9", "\uCDF9"], /* Hangul Syllable */ + ["\uCDFA", "\uCDFA"], /* Hangul Syllable */ + ["\uCDFB", "\uCDFB"], /* Hangul Syllable */ + ["\uCDFC", "\uCDFC"], /* Hangul Syllable */ + ["\uCDFD", "\uCDFD"], /* Hangul Syllable */ + ["\uCDFE", "\uCDFE"], /* Hangul Syllable */ + ["\uCDFF", "\uCDFF"], /* Hangul Syllable */ + ["\uCE00", "\uCE00"], /* Hangul Syllable */ + ["\uCE01", "\uCE01"], /* Hangul Syllable */ + ["\uCE02", "\uCE02"], /* Hangul Syllable */ + ["\uCE03", "\uCE03"], /* Hangul Syllable */ + ["\uCE04", "\uCE04"], /* Hangul Syllable */ + ["\uCE05", "\uCE05"], /* Hangul Syllable */ + ["\uCE06", "\uCE06"], /* Hangul Syllable */ + ["\uCE07", "\uCE07"], /* Hangul Syllable */ + ["\uCE08", "\uCE08"], /* Hangul Syllable */ + ["\uCE09", "\uCE09"], /* Hangul Syllable */ + ["\uCE0A", "\uCE0A"], /* Hangul Syllable */ + ["\uCE0B", "\uCE0B"], /* Hangul Syllable */ + ["\uCE0C", "\uCE0C"], /* Hangul Syllable */ + ["\uCE0D", "\uCE0D"], /* Hangul Syllable */ + ["\uCE0E", "\uCE0E"], /* Hangul Syllable */ + ["\uCE0F", "\uCE0F"], /* Hangul Syllable */ + ["\uCE10", "\uCE10"], /* Hangul Syllable */ + ["\uCE11", "\uCE11"], /* Hangul Syllable */ + ["\uCE12", "\uCE12"], /* Hangul Syllable */ + ["\uCE13", "\uCE13"], /* Hangul Syllable */ + ["\uCE14", "\uCE14"], /* Hangul Syllable */ + ["\uCE15", "\uCE15"], /* Hangul Syllable */ + ["\uCE16", "\uCE16"], /* Hangul Syllable */ + ["\uCE17", "\uCE17"], /* Hangul Syllable */ + ["\uCE18", "\uCE18"], /* Hangul Syllable */ + ["\uCE19", "\uCE19"], /* Hangul Syllable */ + ["\uCE1A", "\uCE1A"], /* Hangul Syllable */ + ["\uCE1B", "\uCE1B"], /* Hangul Syllable */ + ["\uCE1C", "\uCE1C"], /* Hangul Syllable */ + ["\uCE1D", "\uCE1D"], /* Hangul Syllable */ + ["\uCE1E", "\uCE1E"], /* Hangul Syllable */ + ["\uCE1F", "\uCE1F"], /* Hangul Syllable */ + ["\uCE20", "\uCE20"], /* Hangul Syllable */ + ["\uCE21", "\uCE21"], /* Hangul Syllable */ + ["\uCE22", "\uCE22"], /* Hangul Syllable */ + ["\uCE23", "\uCE23"], /* Hangul Syllable */ + ["\uCE24", "\uCE24"], /* Hangul Syllable */ + ["\uCE25", "\uCE25"], /* Hangul Syllable */ + ["\uCE26", "\uCE26"], /* Hangul Syllable */ + ["\uCE27", "\uCE27"], /* Hangul Syllable */ + ["\uCE28", "\uCE28"], /* Hangul Syllable */ + ["\uCE29", "\uCE29"], /* Hangul Syllable */ + ["\uCE2A", "\uCE2A"], /* Hangul Syllable */ + ["\uCE2B", "\uCE2B"], /* Hangul Syllable */ + ["\uCE2C", "\uCE2C"], /* Hangul Syllable */ + ["\uCE2D", "\uCE2D"], /* Hangul Syllable */ + ["\uCE2E", "\uCE2E"], /* Hangul Syllable */ + ["\uCE2F", "\uCE2F"], /* Hangul Syllable */ + ["\uCE30", "\uCE30"], /* Hangul Syllable */ + ["\uCE31", "\uCE31"], /* Hangul Syllable */ + ["\uCE32", "\uCE32"], /* Hangul Syllable */ + ["\uCE33", "\uCE33"], /* Hangul Syllable */ + ["\uCE34", "\uCE34"], /* Hangul Syllable */ + ["\uCE35", "\uCE35"], /* Hangul Syllable */ + ["\uCE36", "\uCE36"], /* Hangul Syllable */ + ["\uCE37", "\uCE37"], /* Hangul Syllable */ + ["\uCE38", "\uCE38"], /* Hangul Syllable */ + ["\uCE39", "\uCE39"], /* Hangul Syllable */ + ["\uCE3A", "\uCE3A"], /* Hangul Syllable */ + ["\uCE3B", "\uCE3B"], /* Hangul Syllable */ + ["\uCE3C", "\uCE3C"], /* Hangul Syllable */ + ["\uCE3D", "\uCE3D"], /* Hangul Syllable */ + ["\uCE3E", "\uCE3E"], /* Hangul Syllable */ + ["\uCE3F", "\uCE3F"], /* Hangul Syllable */ + ["\uCE40", "\uCE40"], /* Hangul Syllable */ + ["\uCE41", "\uCE41"], /* Hangul Syllable */ + ["\uCE42", "\uCE42"], /* Hangul Syllable */ + ["\uCE43", "\uCE43"], /* Hangul Syllable */ + ["\uCE44", "\uCE44"], /* Hangul Syllable */ + ["\uCE45", "\uCE45"], /* Hangul Syllable */ + ["\uCE46", "\uCE46"], /* Hangul Syllable */ + ["\uCE47", "\uCE47"], /* Hangul Syllable */ + ["\uCE48", "\uCE48"], /* Hangul Syllable */ + ["\uCE49", "\uCE49"], /* Hangul Syllable */ + ["\uCE4A", "\uCE4A"], /* Hangul Syllable */ + ["\uCE4B", "\uCE4B"], /* Hangul Syllable */ + ["\uCE4C", "\uCE4C"], /* Hangul Syllable */ + ["\uCE4D", "\uCE4D"], /* Hangul Syllable */ + ["\uCE4E", "\uCE4E"], /* Hangul Syllable */ + ["\uCE4F", "\uCE4F"], /* Hangul Syllable */ + ["\uCE50", "\uCE50"], /* Hangul Syllable */ + ["\uCE51", "\uCE51"], /* Hangul Syllable */ + ["\uCE52", "\uCE52"], /* Hangul Syllable */ + ["\uCE53", "\uCE53"], /* Hangul Syllable */ + ["\uCE54", "\uCE54"], /* Hangul Syllable */ + ["\uCE55", "\uCE55"], /* Hangul Syllable */ + ["\uCE56", "\uCE56"], /* Hangul Syllable */ + ["\uCE57", "\uCE57"], /* Hangul Syllable */ + ["\uCE58", "\uCE58"], /* Hangul Syllable */ + ["\uCE59", "\uCE59"], /* Hangul Syllable */ + ["\uCE5A", "\uCE5A"], /* Hangul Syllable */ + ["\uCE5B", "\uCE5B"], /* Hangul Syllable */ + ["\uCE5C", "\uCE5C"], /* Hangul Syllable */ + ["\uCE5D", "\uCE5D"], /* Hangul Syllable */ + ["\uCE5E", "\uCE5E"], /* Hangul Syllable */ + ["\uCE5F", "\uCE5F"], /* Hangul Syllable */ + ["\uCE60", "\uCE60"], /* Hangul Syllable */ + ["\uCE61", "\uCE61"], /* Hangul Syllable */ + ["\uCE62", "\uCE62"], /* Hangul Syllable */ + ["\uCE63", "\uCE63"], /* Hangul Syllable */ + ["\uCE64", "\uCE64"], /* Hangul Syllable */ + ["\uCE65", "\uCE65"], /* Hangul Syllable */ + ["\uCE66", "\uCE66"], /* Hangul Syllable */ + ["\uCE67", "\uCE67"], /* Hangul Syllable */ + ["\uCE68", "\uCE68"], /* Hangul Syllable */ + ["\uCE69", "\uCE69"], /* Hangul Syllable */ + ["\uCE6A", "\uCE6A"], /* Hangul Syllable */ + ["\uCE6B", "\uCE6B"], /* Hangul Syllable */ + ["\uCE6C", "\uCE6C"], /* Hangul Syllable */ + ["\uCE6D", "\uCE6D"], /* Hangul Syllable */ + ["\uCE6E", "\uCE6E"], /* Hangul Syllable */ + ["\uCE6F", "\uCE6F"], /* Hangul Syllable */ + ["\uCE70", "\uCE70"], /* Hangul Syllable */ + ["\uCE71", "\uCE71"], /* Hangul Syllable */ + ["\uCE72", "\uCE72"], /* Hangul Syllable */ + ["\uCE73", "\uCE73"], /* Hangul Syllable */ + ["\uCE74", "\uCE74"], /* Hangul Syllable */ + ["\uCE75", "\uCE75"], /* Hangul Syllable */ + ["\uCE76", "\uCE76"], /* Hangul Syllable */ + ["\uCE77", "\uCE77"], /* Hangul Syllable */ + ["\uCE78", "\uCE78"], /* Hangul Syllable */ + ["\uCE79", "\uCE79"], /* Hangul Syllable */ + ["\uCE7A", "\uCE7A"], /* Hangul Syllable */ + ["\uCE7B", "\uCE7B"], /* Hangul Syllable */ + ["\uCE7C", "\uCE7C"], /* Hangul Syllable */ + ["\uCE7D", "\uCE7D"], /* Hangul Syllable */ + ["\uCE7E", "\uCE7E"], /* Hangul Syllable */ + ["\uCE7F", "\uCE7F"], /* Hangul Syllable */ + ["\uCE80", "\uCE80"], /* Hangul Syllable */ + ["\uCE81", "\uCE81"], /* Hangul Syllable */ + ["\uCE82", "\uCE82"], /* Hangul Syllable */ + ["\uCE83", "\uCE83"], /* Hangul Syllable */ + ["\uCE84", "\uCE84"], /* Hangul Syllable */ + ["\uCE85", "\uCE85"], /* Hangul Syllable */ + ["\uCE86", "\uCE86"], /* Hangul Syllable */ + ["\uCE87", "\uCE87"], /* Hangul Syllable */ + ["\uCE88", "\uCE88"], /* Hangul Syllable */ + ["\uCE89", "\uCE89"], /* Hangul Syllable */ + ["\uCE8A", "\uCE8A"], /* Hangul Syllable */ + ["\uCE8B", "\uCE8B"], /* Hangul Syllable */ + ["\uCE8C", "\uCE8C"], /* Hangul Syllable */ + ["\uCE8D", "\uCE8D"], /* Hangul Syllable */ + ["\uCE8E", "\uCE8E"], /* Hangul Syllable */ + ["\uCE8F", "\uCE8F"], /* Hangul Syllable */ + ["\uCE90", "\uCE90"], /* Hangul Syllable */ + ["\uCE91", "\uCE91"], /* Hangul Syllable */ + ["\uCE92", "\uCE92"], /* Hangul Syllable */ + ["\uCE93", "\uCE93"], /* Hangul Syllable */ + ["\uCE94", "\uCE94"], /* Hangul Syllable */ + ["\uCE95", "\uCE95"], /* Hangul Syllable */ + ["\uCE96", "\uCE96"], /* Hangul Syllable */ + ["\uCE97", "\uCE97"], /* Hangul Syllable */ + ["\uCE98", "\uCE98"], /* Hangul Syllable */ + ["\uCE99", "\uCE99"], /* Hangul Syllable */ + ["\uCE9A", "\uCE9A"], /* Hangul Syllable */ + ["\uCE9B", "\uCE9B"], /* Hangul Syllable */ + ["\uCE9C", "\uCE9C"], /* Hangul Syllable */ + ["\uCE9D", "\uCE9D"], /* Hangul Syllable */ + ["\uCE9E", "\uCE9E"], /* Hangul Syllable */ + ["\uCE9F", "\uCE9F"], /* Hangul Syllable */ + ["\uCEA0", "\uCEA0"], /* Hangul Syllable */ + ["\uCEA1", "\uCEA1"], /* Hangul Syllable */ + ["\uCEA2", "\uCEA2"], /* Hangul Syllable */ + ["\uCEA3", "\uCEA3"], /* Hangul Syllable */ + ["\uCEA4", "\uCEA4"], /* Hangul Syllable */ + ["\uCEA5", "\uCEA5"], /* Hangul Syllable */ + ["\uCEA6", "\uCEA6"], /* Hangul Syllable */ + ["\uCEA7", "\uCEA7"], /* Hangul Syllable */ + ["\uCEA8", "\uCEA8"], /* Hangul Syllable */ + ["\uCEA9", "\uCEA9"], /* Hangul Syllable */ + ["\uCEAA", "\uCEAA"], /* Hangul Syllable */ + ["\uCEAB", "\uCEAB"], /* Hangul Syllable */ + ["\uCEAC", "\uCEAC"], /* Hangul Syllable */ + ["\uCEAD", "\uCEAD"], /* Hangul Syllable */ + ["\uCEAE", "\uCEAE"], /* Hangul Syllable */ + ["\uCEAF", "\uCEAF"], /* Hangul Syllable */ + ["\uCEB0", "\uCEB0"], /* Hangul Syllable */ + ["\uCEB1", "\uCEB1"], /* Hangul Syllable */ + ["\uCEB2", "\uCEB2"], /* Hangul Syllable */ + ["\uCEB3", "\uCEB3"], /* Hangul Syllable */ + ["\uCEB4", "\uCEB4"], /* Hangul Syllable */ + ["\uCEB5", "\uCEB5"], /* Hangul Syllable */ + ["\uCEB6", "\uCEB6"], /* Hangul Syllable */ + ["\uCEB7", "\uCEB7"], /* Hangul Syllable */ + ["\uCEB8", "\uCEB8"], /* Hangul Syllable */ + ["\uCEB9", "\uCEB9"], /* Hangul Syllable */ + ["\uCEBA", "\uCEBA"], /* Hangul Syllable */ + ["\uCEBB", "\uCEBB"], /* Hangul Syllable */ + ["\uCEBC", "\uCEBC"], /* Hangul Syllable */ + ["\uCEBD", "\uCEBD"], /* Hangul Syllable */ + ["\uCEBE", "\uCEBE"], /* Hangul Syllable */ + ["\uCEBF", "\uCEBF"], /* Hangul Syllable */ + ["\uCEC0", "\uCEC0"], /* Hangul Syllable */ + ["\uCEC1", "\uCEC1"], /* Hangul Syllable */ + ["\uCEC2", "\uCEC2"], /* Hangul Syllable */ + ["\uCEC3", "\uCEC3"], /* Hangul Syllable */ + ["\uCEC4", "\uCEC4"], /* Hangul Syllable */ + ["\uCEC5", "\uCEC5"], /* Hangul Syllable */ + ["\uCEC6", "\uCEC6"], /* Hangul Syllable */ + ["\uCEC7", "\uCEC7"], /* Hangul Syllable */ + ["\uCEC8", "\uCEC8"], /* Hangul Syllable */ + ["\uCEC9", "\uCEC9"], /* Hangul Syllable */ + ["\uCECA", "\uCECA"], /* Hangul Syllable */ + ["\uCECB", "\uCECB"], /* Hangul Syllable */ + ["\uCECC", "\uCECC"], /* Hangul Syllable */ + ["\uCECD", "\uCECD"], /* Hangul Syllable */ + ["\uCECE", "\uCECE"], /* Hangul Syllable */ + ["\uCECF", "\uCECF"], /* Hangul Syllable */ + ["\uCED0", "\uCED0"], /* Hangul Syllable */ + ["\uCED1", "\uCED1"], /* Hangul Syllable */ + ["\uCED2", "\uCED2"], /* Hangul Syllable */ + ["\uCED3", "\uCED3"], /* Hangul Syllable */ + ["\uCED4", "\uCED4"], /* Hangul Syllable */ + ["\uCED5", "\uCED5"], /* Hangul Syllable */ + ["\uCED6", "\uCED6"], /* Hangul Syllable */ + ["\uCED7", "\uCED7"], /* Hangul Syllable */ + ["\uCED8", "\uCED8"], /* Hangul Syllable */ + ["\uCED9", "\uCED9"], /* Hangul Syllable */ + ["\uCEDA", "\uCEDA"], /* Hangul Syllable */ + ["\uCEDB", "\uCEDB"], /* Hangul Syllable */ + ["\uCEDC", "\uCEDC"], /* Hangul Syllable */ + ["\uCEDD", "\uCEDD"], /* Hangul Syllable */ + ["\uCEDE", "\uCEDE"], /* Hangul Syllable */ + ["\uCEDF", "\uCEDF"], /* Hangul Syllable */ + ["\uCEE0", "\uCEE0"], /* Hangul Syllable */ + ["\uCEE1", "\uCEE1"], /* Hangul Syllable */ + ["\uCEE2", "\uCEE2"], /* Hangul Syllable */ + ["\uCEE3", "\uCEE3"], /* Hangul Syllable */ + ["\uCEE4", "\uCEE4"], /* Hangul Syllable */ + ["\uCEE5", "\uCEE5"], /* Hangul Syllable */ + ["\uCEE6", "\uCEE6"], /* Hangul Syllable */ + ["\uCEE7", "\uCEE7"], /* Hangul Syllable */ + ["\uCEE8", "\uCEE8"], /* Hangul Syllable */ + ["\uCEE9", "\uCEE9"], /* Hangul Syllable */ + ["\uCEEA", "\uCEEA"], /* Hangul Syllable */ + ["\uCEEB", "\uCEEB"], /* Hangul Syllable */ + ["\uCEEC", "\uCEEC"], /* Hangul Syllable */ + ["\uCEED", "\uCEED"], /* Hangul Syllable */ + ["\uCEEE", "\uCEEE"], /* Hangul Syllable */ + ["\uCEEF", "\uCEEF"], /* Hangul Syllable */ + ["\uCEF0", "\uCEF0"], /* Hangul Syllable */ + ["\uCEF1", "\uCEF1"], /* Hangul Syllable */ + ["\uCEF2", "\uCEF2"], /* Hangul Syllable */ + ["\uCEF3", "\uCEF3"], /* Hangul Syllable */ + ["\uCEF4", "\uCEF4"], /* Hangul Syllable */ + ["\uCEF5", "\uCEF5"], /* Hangul Syllable */ + ["\uCEF6", "\uCEF6"], /* Hangul Syllable */ + ["\uCEF7", "\uCEF7"], /* Hangul Syllable */ + ["\uCEF8", "\uCEF8"], /* Hangul Syllable */ + ["\uCEF9", "\uCEF9"], /* Hangul Syllable */ + ["\uCEFA", "\uCEFA"], /* Hangul Syllable */ + ["\uCEFB", "\uCEFB"], /* Hangul Syllable */ + ["\uCEFC", "\uCEFC"], /* Hangul Syllable */ + ["\uCEFD", "\uCEFD"], /* Hangul Syllable */ + ["\uCEFE", "\uCEFE"], /* Hangul Syllable */ + ["\uCEFF", "\uCEFF"], /* Hangul Syllable */ + ["\uCF00", "\uCF00"], /* Hangul Syllable */ + ["\uCF01", "\uCF01"], /* Hangul Syllable */ + ["\uCF02", "\uCF02"], /* Hangul Syllable */ + ["\uCF03", "\uCF03"], /* Hangul Syllable */ + ["\uCF04", "\uCF04"], /* Hangul Syllable */ + ["\uCF05", "\uCF05"], /* Hangul Syllable */ + ["\uCF06", "\uCF06"], /* Hangul Syllable */ + ["\uCF07", "\uCF07"], /* Hangul Syllable */ + ["\uCF08", "\uCF08"], /* Hangul Syllable */ + ["\uCF09", "\uCF09"], /* Hangul Syllable */ + ["\uCF0A", "\uCF0A"], /* Hangul Syllable */ + ["\uCF0B", "\uCF0B"], /* Hangul Syllable */ + ["\uCF0C", "\uCF0C"], /* Hangul Syllable */ + ["\uCF0D", "\uCF0D"], /* Hangul Syllable */ + ["\uCF0E", "\uCF0E"], /* Hangul Syllable */ + ["\uCF0F", "\uCF0F"], /* Hangul Syllable */ + ["\uCF10", "\uCF10"], /* Hangul Syllable */ + ["\uCF11", "\uCF11"], /* Hangul Syllable */ + ["\uCF12", "\uCF12"], /* Hangul Syllable */ + ["\uCF13", "\uCF13"], /* Hangul Syllable */ + ["\uCF14", "\uCF14"], /* Hangul Syllable */ + ["\uCF15", "\uCF15"], /* Hangul Syllable */ + ["\uCF16", "\uCF16"], /* Hangul Syllable */ + ["\uCF17", "\uCF17"], /* Hangul Syllable */ + ["\uCF18", "\uCF18"], /* Hangul Syllable */ + ["\uCF19", "\uCF19"], /* Hangul Syllable */ + ["\uCF1A", "\uCF1A"], /* Hangul Syllable */ + ["\uCF1B", "\uCF1B"], /* Hangul Syllable */ + ["\uCF1C", "\uCF1C"], /* Hangul Syllable */ + ["\uCF1D", "\uCF1D"], /* Hangul Syllable */ + ["\uCF1E", "\uCF1E"], /* Hangul Syllable */ + ["\uCF1F", "\uCF1F"], /* Hangul Syllable */ + ["\uCF20", "\uCF20"], /* Hangul Syllable */ + ["\uCF21", "\uCF21"], /* Hangul Syllable */ + ["\uCF22", "\uCF22"], /* Hangul Syllable */ + ["\uCF23", "\uCF23"], /* Hangul Syllable */ + ["\uCF24", "\uCF24"], /* Hangul Syllable */ + ["\uCF25", "\uCF25"], /* Hangul Syllable */ + ["\uCF26", "\uCF26"], /* Hangul Syllable */ + ["\uCF27", "\uCF27"], /* Hangul Syllable */ + ["\uCF28", "\uCF28"], /* Hangul Syllable */ + ["\uCF29", "\uCF29"], /* Hangul Syllable */ + ["\uCF2A", "\uCF2A"], /* Hangul Syllable */ + ["\uCF2B", "\uCF2B"], /* Hangul Syllable */ + ["\uCF2C", "\uCF2C"], /* Hangul Syllable */ + ["\uCF2D", "\uCF2D"], /* Hangul Syllable */ + ["\uCF2E", "\uCF2E"], /* Hangul Syllable */ + ["\uCF2F", "\uCF2F"], /* Hangul Syllable */ + ["\uCF30", "\uCF30"], /* Hangul Syllable */ + ["\uCF31", "\uCF31"], /* Hangul Syllable */ + ["\uCF32", "\uCF32"], /* Hangul Syllable */ + ["\uCF33", "\uCF33"], /* Hangul Syllable */ + ["\uCF34", "\uCF34"], /* Hangul Syllable */ + ["\uCF35", "\uCF35"], /* Hangul Syllable */ + ["\uCF36", "\uCF36"], /* Hangul Syllable */ + ["\uCF37", "\uCF37"], /* Hangul Syllable */ + ["\uCF38", "\uCF38"], /* Hangul Syllable */ + ["\uCF39", "\uCF39"], /* Hangul Syllable */ + ["\uCF3A", "\uCF3A"], /* Hangul Syllable */ + ["\uCF3B", "\uCF3B"], /* Hangul Syllable */ + ["\uCF3C", "\uCF3C"], /* Hangul Syllable */ + ["\uCF3D", "\uCF3D"], /* Hangul Syllable */ + ["\uCF3E", "\uCF3E"], /* Hangul Syllable */ + ["\uCF3F", "\uCF3F"], /* Hangul Syllable */ + ["\uCF40", "\uCF40"], /* Hangul Syllable */ + ["\uCF41", "\uCF41"], /* Hangul Syllable */ + ["\uCF42", "\uCF42"], /* Hangul Syllable */ + ["\uCF43", "\uCF43"], /* Hangul Syllable */ + ["\uCF44", "\uCF44"], /* Hangul Syllable */ + ["\uCF45", "\uCF45"], /* Hangul Syllable */ + ["\uCF46", "\uCF46"], /* Hangul Syllable */ + ["\uCF47", "\uCF47"], /* Hangul Syllable */ + ["\uCF48", "\uCF48"], /* Hangul Syllable */ + ["\uCF49", "\uCF49"], /* Hangul Syllable */ + ["\uCF4A", "\uCF4A"], /* Hangul Syllable */ + ["\uCF4B", "\uCF4B"], /* Hangul Syllable */ + ["\uCF4C", "\uCF4C"], /* Hangul Syllable */ + ["\uCF4D", "\uCF4D"], /* Hangul Syllable */ + ["\uCF4E", "\uCF4E"], /* Hangul Syllable */ + ["\uCF4F", "\uCF4F"], /* Hangul Syllable */ + ["\uCF50", "\uCF50"], /* Hangul Syllable */ + ["\uCF51", "\uCF51"], /* Hangul Syllable */ + ["\uCF52", "\uCF52"], /* Hangul Syllable */ + ["\uCF53", "\uCF53"], /* Hangul Syllable */ + ["\uCF54", "\uCF54"], /* Hangul Syllable */ + ["\uCF55", "\uCF55"], /* Hangul Syllable */ + ["\uCF56", "\uCF56"], /* Hangul Syllable */ + ["\uCF57", "\uCF57"], /* Hangul Syllable */ + ["\uCF58", "\uCF58"], /* Hangul Syllable */ + ["\uCF59", "\uCF59"], /* Hangul Syllable */ + ["\uCF5A", "\uCF5A"], /* Hangul Syllable */ + ["\uCF5B", "\uCF5B"], /* Hangul Syllable */ + ["\uCF5C", "\uCF5C"], /* Hangul Syllable */ + ["\uCF5D", "\uCF5D"], /* Hangul Syllable */ + ["\uCF5E", "\uCF5E"], /* Hangul Syllable */ + ["\uCF5F", "\uCF5F"], /* Hangul Syllable */ + ["\uCF60", "\uCF60"], /* Hangul Syllable */ + ["\uCF61", "\uCF61"], /* Hangul Syllable */ + ["\uCF62", "\uCF62"], /* Hangul Syllable */ + ["\uCF63", "\uCF63"], /* Hangul Syllable */ + ["\uCF64", "\uCF64"], /* Hangul Syllable */ + ["\uCF65", "\uCF65"], /* Hangul Syllable */ + ["\uCF66", "\uCF66"], /* Hangul Syllable */ + ["\uCF67", "\uCF67"], /* Hangul Syllable */ + ["\uCF68", "\uCF68"], /* Hangul Syllable */ + ["\uCF69", "\uCF69"], /* Hangul Syllable */ + ["\uCF6A", "\uCF6A"], /* Hangul Syllable */ + ["\uCF6B", "\uCF6B"], /* Hangul Syllable */ + ["\uCF6C", "\uCF6C"], /* Hangul Syllable */ + ["\uCF6D", "\uCF6D"], /* Hangul Syllable */ + ["\uCF6E", "\uCF6E"], /* Hangul Syllable */ + ["\uCF6F", "\uCF6F"], /* Hangul Syllable */ + ["\uCF70", "\uCF70"], /* Hangul Syllable */ + ["\uCF71", "\uCF71"], /* Hangul Syllable */ + ["\uCF72", "\uCF72"], /* Hangul Syllable */ + ["\uCF73", "\uCF73"], /* Hangul Syllable */ + ["\uCF74", "\uCF74"], /* Hangul Syllable */ + ["\uCF75", "\uCF75"], /* Hangul Syllable */ + ["\uCF76", "\uCF76"], /* Hangul Syllable */ + ["\uCF77", "\uCF77"], /* Hangul Syllable */ + ["\uCF78", "\uCF78"], /* Hangul Syllable */ + ["\uCF79", "\uCF79"], /* Hangul Syllable */ + ["\uCF7A", "\uCF7A"], /* Hangul Syllable */ + ["\uCF7B", "\uCF7B"], /* Hangul Syllable */ + ["\uCF7C", "\uCF7C"], /* Hangul Syllable */ + ["\uCF7D", "\uCF7D"], /* Hangul Syllable */ + ["\uCF7E", "\uCF7E"], /* Hangul Syllable */ + ["\uCF7F", "\uCF7F"], /* Hangul Syllable */ + ["\uCF80", "\uCF80"], /* Hangul Syllable */ + ["\uCF81", "\uCF81"], /* Hangul Syllable */ + ["\uCF82", "\uCF82"], /* Hangul Syllable */ + ["\uCF83", "\uCF83"], /* Hangul Syllable */ + ["\uCF84", "\uCF84"], /* Hangul Syllable */ + ["\uCF85", "\uCF85"], /* Hangul Syllable */ + ["\uCF86", "\uCF86"], /* Hangul Syllable */ + ["\uCF87", "\uCF87"], /* Hangul Syllable */ + ["\uCF88", "\uCF88"], /* Hangul Syllable */ + ["\uCF89", "\uCF89"], /* Hangul Syllable */ + ["\uCF8A", "\uCF8A"], /* Hangul Syllable */ + ["\uCF8B", "\uCF8B"], /* Hangul Syllable */ + ["\uCF8C", "\uCF8C"], /* Hangul Syllable */ + ["\uCF8D", "\uCF8D"], /* Hangul Syllable */ + ["\uCF8E", "\uCF8E"], /* Hangul Syllable */ + ["\uCF8F", "\uCF8F"], /* Hangul Syllable */ + ["\uCF90", "\uCF90"], /* Hangul Syllable */ + ["\uCF91", "\uCF91"], /* Hangul Syllable */ + ["\uCF92", "\uCF92"], /* Hangul Syllable */ + ["\uCF93", "\uCF93"], /* Hangul Syllable */ + ["\uCF94", "\uCF94"], /* Hangul Syllable */ + ["\uCF95", "\uCF95"], /* Hangul Syllable */ + ["\uCF96", "\uCF96"], /* Hangul Syllable */ + ["\uCF97", "\uCF97"], /* Hangul Syllable */ + ["\uCF98", "\uCF98"], /* Hangul Syllable */ + ["\uCF99", "\uCF99"], /* Hangul Syllable */ + ["\uCF9A", "\uCF9A"], /* Hangul Syllable */ + ["\uCF9B", "\uCF9B"], /* Hangul Syllable */ + ["\uCF9C", "\uCF9C"], /* Hangul Syllable */ + ["\uCF9D", "\uCF9D"], /* Hangul Syllable */ + ["\uCF9E", "\uCF9E"], /* Hangul Syllable */ + ["\uCF9F", "\uCF9F"], /* Hangul Syllable */ + ["\uCFA0", "\uCFA0"], /* Hangul Syllable */ + ["\uCFA1", "\uCFA1"], /* Hangul Syllable */ + ["\uCFA2", "\uCFA2"], /* Hangul Syllable */ + ["\uCFA3", "\uCFA3"], /* Hangul Syllable */ + ["\uCFA4", "\uCFA4"], /* Hangul Syllable */ + ["\uCFA5", "\uCFA5"], /* Hangul Syllable */ + ["\uCFA6", "\uCFA6"], /* Hangul Syllable */ + ["\uCFA7", "\uCFA7"], /* Hangul Syllable */ + ["\uCFA8", "\uCFA8"], /* Hangul Syllable */ + ["\uCFA9", "\uCFA9"], /* Hangul Syllable */ + ["\uCFAA", "\uCFAA"], /* Hangul Syllable */ + ["\uCFAB", "\uCFAB"], /* Hangul Syllable */ + ["\uCFAC", "\uCFAC"], /* Hangul Syllable */ + ["\uCFAD", "\uCFAD"], /* Hangul Syllable */ + ["\uCFAE", "\uCFAE"], /* Hangul Syllable */ + ["\uCFAF", "\uCFAF"], /* Hangul Syllable */ + ["\uCFB0", "\uCFB0"], /* Hangul Syllable */ + ["\uCFB1", "\uCFB1"], /* Hangul Syllable */ + ["\uCFB2", "\uCFB2"], /* Hangul Syllable */ + ["\uCFB3", "\uCFB3"], /* Hangul Syllable */ + ["\uCFB4", "\uCFB4"], /* Hangul Syllable */ + ["\uCFB5", "\uCFB5"], /* Hangul Syllable */ + ["\uCFB6", "\uCFB6"], /* Hangul Syllable */ + ["\uCFB7", "\uCFB7"], /* Hangul Syllable */ + ["\uCFB8", "\uCFB8"], /* Hangul Syllable */ + ["\uCFB9", "\uCFB9"], /* Hangul Syllable */ + ["\uCFBA", "\uCFBA"], /* Hangul Syllable */ + ["\uCFBB", "\uCFBB"], /* Hangul Syllable */ + ["\uCFBC", "\uCFBC"], /* Hangul Syllable */ + ["\uCFBD", "\uCFBD"], /* Hangul Syllable */ + ["\uCFBE", "\uCFBE"], /* Hangul Syllable */ + ["\uCFBF", "\uCFBF"], /* Hangul Syllable */ + ["\uCFC0", "\uCFC0"], /* Hangul Syllable */ + ["\uCFC1", "\uCFC1"], /* Hangul Syllable */ + ["\uCFC2", "\uCFC2"], /* Hangul Syllable */ + ["\uCFC3", "\uCFC3"], /* Hangul Syllable */ + ["\uCFC4", "\uCFC4"], /* Hangul Syllable */ + ["\uCFC5", "\uCFC5"], /* Hangul Syllable */ + ["\uCFC6", "\uCFC6"], /* Hangul Syllable */ + ["\uCFC7", "\uCFC7"], /* Hangul Syllable */ + ["\uCFC8", "\uCFC8"], /* Hangul Syllable */ + ["\uCFC9", "\uCFC9"], /* Hangul Syllable */ + ["\uCFCA", "\uCFCA"], /* Hangul Syllable */ + ["\uCFCB", "\uCFCB"], /* Hangul Syllable */ + ["\uCFCC", "\uCFCC"], /* Hangul Syllable */ + ["\uCFCD", "\uCFCD"], /* Hangul Syllable */ + ["\uCFCE", "\uCFCE"], /* Hangul Syllable */ + ["\uCFCF", "\uCFCF"], /* Hangul Syllable */ + ["\uCFD0", "\uCFD0"], /* Hangul Syllable */ + ["\uCFD1", "\uCFD1"], /* Hangul Syllable */ + ["\uCFD2", "\uCFD2"], /* Hangul Syllable */ + ["\uCFD3", "\uCFD3"], /* Hangul Syllable */ + ["\uCFD4", "\uCFD4"], /* Hangul Syllable */ + ["\uCFD5", "\uCFD5"], /* Hangul Syllable */ + ["\uCFD6", "\uCFD6"], /* Hangul Syllable */ + ["\uCFD7", "\uCFD7"], /* Hangul Syllable */ + ["\uCFD8", "\uCFD8"], /* Hangul Syllable */ + ["\uCFD9", "\uCFD9"], /* Hangul Syllable */ + ["\uCFDA", "\uCFDA"], /* Hangul Syllable */ + ["\uCFDB", "\uCFDB"], /* Hangul Syllable */ + ["\uCFDC", "\uCFDC"], /* Hangul Syllable */ + ["\uCFDD", "\uCFDD"], /* Hangul Syllable */ + ["\uCFDE", "\uCFDE"], /* Hangul Syllable */ + ["\uCFDF", "\uCFDF"], /* Hangul Syllable */ + ["\uCFE0", "\uCFE0"], /* Hangul Syllable */ + ["\uCFE1", "\uCFE1"], /* Hangul Syllable */ + ["\uCFE2", "\uCFE2"], /* Hangul Syllable */ + ["\uCFE3", "\uCFE3"], /* Hangul Syllable */ + ["\uCFE4", "\uCFE4"], /* Hangul Syllable */ + ["\uCFE5", "\uCFE5"], /* Hangul Syllable */ + ["\uCFE6", "\uCFE6"], /* Hangul Syllable */ + ["\uCFE7", "\uCFE7"], /* Hangul Syllable */ + ["\uCFE8", "\uCFE8"], /* Hangul Syllable */ + ["\uCFE9", "\uCFE9"], /* Hangul Syllable */ + ["\uCFEA", "\uCFEA"], /* Hangul Syllable */ + ["\uCFEB", "\uCFEB"], /* Hangul Syllable */ + ["\uCFEC", "\uCFEC"], /* Hangul Syllable */ + ["\uCFED", "\uCFED"], /* Hangul Syllable */ + ["\uCFEE", "\uCFEE"], /* Hangul Syllable */ + ["\uCFEF", "\uCFEF"], /* Hangul Syllable */ + ["\uCFF0", "\uCFF0"], /* Hangul Syllable */ + ["\uCFF1", "\uCFF1"], /* Hangul Syllable */ + ["\uCFF2", "\uCFF2"], /* Hangul Syllable */ + ["\uCFF3", "\uCFF3"], /* Hangul Syllable */ + ["\uCFF4", "\uCFF4"], /* Hangul Syllable */ + ["\uCFF5", "\uCFF5"], /* Hangul Syllable */ + ["\uCFF6", "\uCFF6"], /* Hangul Syllable */ + ["\uCFF7", "\uCFF7"], /* Hangul Syllable */ + ["\uCFF8", "\uCFF8"], /* Hangul Syllable */ + ["\uCFF9", "\uCFF9"], /* Hangul Syllable */ + ["\uCFFA", "\uCFFA"], /* Hangul Syllable */ + ["\uCFFB", "\uCFFB"], /* Hangul Syllable */ + ["\uCFFC", "\uCFFC"], /* Hangul Syllable */ + ["\uCFFD", "\uCFFD"], /* Hangul Syllable */ + ["\uCFFE", "\uCFFE"], /* Hangul Syllable */ + ["\uCFFF", "\uCFFF"], /* Hangul Syllable */ + ["\uD000", "\uD000"], /* Hangul Syllable */ + ["\uD001", "\uD001"], /* Hangul Syllable */ + ["\uD002", "\uD002"], /* Hangul Syllable */ + ["\uD003", "\uD003"], /* Hangul Syllable */ + ["\uD004", "\uD004"], /* Hangul Syllable */ + ["\uD005", "\uD005"], /* Hangul Syllable */ + ["\uD006", "\uD006"], /* Hangul Syllable */ + ["\uD007", "\uD007"], /* Hangul Syllable */ + ["\uD008", "\uD008"], /* Hangul Syllable */ + ["\uD009", "\uD009"], /* Hangul Syllable */ + ["\uD00A", "\uD00A"], /* Hangul Syllable */ + ["\uD00B", "\uD00B"], /* Hangul Syllable */ + ["\uD00C", "\uD00C"], /* Hangul Syllable */ + ["\uD00D", "\uD00D"], /* Hangul Syllable */ + ["\uD00E", "\uD00E"], /* Hangul Syllable */ + ["\uD00F", "\uD00F"], /* Hangul Syllable */ + ["\uD010", "\uD010"], /* Hangul Syllable */ + ["\uD011", "\uD011"], /* Hangul Syllable */ + ["\uD012", "\uD012"], /* Hangul Syllable */ + ["\uD013", "\uD013"], /* Hangul Syllable */ + ["\uD014", "\uD014"], /* Hangul Syllable */ + ["\uD015", "\uD015"], /* Hangul Syllable */ + ["\uD016", "\uD016"], /* Hangul Syllable */ + ["\uD017", "\uD017"], /* Hangul Syllable */ + ["\uD018", "\uD018"], /* Hangul Syllable */ + ["\uD019", "\uD019"], /* Hangul Syllable */ + ["\uD01A", "\uD01A"], /* Hangul Syllable */ + ["\uD01B", "\uD01B"], /* Hangul Syllable */ + ["\uD01C", "\uD01C"], /* Hangul Syllable */ + ["\uD01D", "\uD01D"], /* Hangul Syllable */ + ["\uD01E", "\uD01E"], /* Hangul Syllable */ + ["\uD01F", "\uD01F"], /* Hangul Syllable */ + ["\uD020", "\uD020"], /* Hangul Syllable */ + ["\uD021", "\uD021"], /* Hangul Syllable */ + ["\uD022", "\uD022"], /* Hangul Syllable */ + ["\uD023", "\uD023"], /* Hangul Syllable */ + ["\uD024", "\uD024"], /* Hangul Syllable */ + ["\uD025", "\uD025"], /* Hangul Syllable */ + ["\uD026", "\uD026"], /* Hangul Syllable */ + ["\uD027", "\uD027"], /* Hangul Syllable */ + ["\uD028", "\uD028"], /* Hangul Syllable */ + ["\uD029", "\uD029"], /* Hangul Syllable */ + ["\uD02A", "\uD02A"], /* Hangul Syllable */ + ["\uD02B", "\uD02B"], /* Hangul Syllable */ + ["\uD02C", "\uD02C"], /* Hangul Syllable */ + ["\uD02D", "\uD02D"], /* Hangul Syllable */ + ["\uD02E", "\uD02E"], /* Hangul Syllable */ + ["\uD02F", "\uD02F"], /* Hangul Syllable */ + ["\uD030", "\uD030"], /* Hangul Syllable */ + ["\uD031", "\uD031"], /* Hangul Syllable */ + ["\uD032", "\uD032"], /* Hangul Syllable */ + ["\uD033", "\uD033"], /* Hangul Syllable */ + ["\uD034", "\uD034"], /* Hangul Syllable */ + ["\uD035", "\uD035"], /* Hangul Syllable */ + ["\uD036", "\uD036"], /* Hangul Syllable */ + ["\uD037", "\uD037"], /* Hangul Syllable */ + ["\uD038", "\uD038"], /* Hangul Syllable */ + ["\uD039", "\uD039"], /* Hangul Syllable */ + ["\uD03A", "\uD03A"], /* Hangul Syllable */ + ["\uD03B", "\uD03B"], /* Hangul Syllable */ + ["\uD03C", "\uD03C"], /* Hangul Syllable */ + ["\uD03D", "\uD03D"], /* Hangul Syllable */ + ["\uD03E", "\uD03E"], /* Hangul Syllable */ + ["\uD03F", "\uD03F"], /* Hangul Syllable */ + ["\uD040", "\uD040"], /* Hangul Syllable */ + ["\uD041", "\uD041"], /* Hangul Syllable */ + ["\uD042", "\uD042"], /* Hangul Syllable */ + ["\uD043", "\uD043"], /* Hangul Syllable */ + ["\uD044", "\uD044"], /* Hangul Syllable */ + ["\uD045", "\uD045"], /* Hangul Syllable */ + ["\uD046", "\uD046"], /* Hangul Syllable */ + ["\uD047", "\uD047"], /* Hangul Syllable */ + ["\uD048", "\uD048"], /* Hangul Syllable */ + ["\uD049", "\uD049"], /* Hangul Syllable */ + ["\uD04A", "\uD04A"], /* Hangul Syllable */ + ["\uD04B", "\uD04B"], /* Hangul Syllable */ + ["\uD04C", "\uD04C"], /* Hangul Syllable */ + ["\uD04D", "\uD04D"], /* Hangul Syllable */ + ["\uD04E", "\uD04E"], /* Hangul Syllable */ + ["\uD04F", "\uD04F"], /* Hangul Syllable */ + ["\uD050", "\uD050"], /* Hangul Syllable */ + ["\uD051", "\uD051"], /* Hangul Syllable */ + ["\uD052", "\uD052"], /* Hangul Syllable */ + ["\uD053", "\uD053"], /* Hangul Syllable */ + ["\uD054", "\uD054"], /* Hangul Syllable */ + ["\uD055", "\uD055"], /* Hangul Syllable */ + ["\uD056", "\uD056"], /* Hangul Syllable */ + ["\uD057", "\uD057"], /* Hangul Syllable */ + ["\uD058", "\uD058"], /* Hangul Syllable */ + ["\uD059", "\uD059"], /* Hangul Syllable */ + ["\uD05A", "\uD05A"], /* Hangul Syllable */ + ["\uD05B", "\uD05B"], /* Hangul Syllable */ + ["\uD05C", "\uD05C"], /* Hangul Syllable */ + ["\uD05D", "\uD05D"], /* Hangul Syllable */ + ["\uD05E", "\uD05E"], /* Hangul Syllable */ + ["\uD05F", "\uD05F"], /* Hangul Syllable */ + ["\uD060", "\uD060"], /* Hangul Syllable */ + ["\uD061", "\uD061"], /* Hangul Syllable */ + ["\uD062", "\uD062"], /* Hangul Syllable */ + ["\uD063", "\uD063"], /* Hangul Syllable */ + ["\uD064", "\uD064"], /* Hangul Syllable */ + ["\uD065", "\uD065"], /* Hangul Syllable */ + ["\uD066", "\uD066"], /* Hangul Syllable */ + ["\uD067", "\uD067"], /* Hangul Syllable */ + ["\uD068", "\uD068"], /* Hangul Syllable */ + ["\uD069", "\uD069"], /* Hangul Syllable */ + ["\uD06A", "\uD06A"], /* Hangul Syllable */ + ["\uD06B", "\uD06B"], /* Hangul Syllable */ + ["\uD06C", "\uD06C"], /* Hangul Syllable */ + ["\uD06D", "\uD06D"], /* Hangul Syllable */ + ["\uD06E", "\uD06E"], /* Hangul Syllable */ + ["\uD06F", "\uD06F"], /* Hangul Syllable */ + ["\uD070", "\uD070"], /* Hangul Syllable */ + ["\uD071", "\uD071"], /* Hangul Syllable */ + ["\uD072", "\uD072"], /* Hangul Syllable */ + ["\uD073", "\uD073"], /* Hangul Syllable */ + ["\uD074", "\uD074"], /* Hangul Syllable */ + ["\uD075", "\uD075"], /* Hangul Syllable */ + ["\uD076", "\uD076"], /* Hangul Syllable */ + ["\uD077", "\uD077"], /* Hangul Syllable */ + ["\uD078", "\uD078"], /* Hangul Syllable */ + ["\uD079", "\uD079"], /* Hangul Syllable */ + ["\uD07A", "\uD07A"], /* Hangul Syllable */ + ["\uD07B", "\uD07B"], /* Hangul Syllable */ + ["\uD07C", "\uD07C"], /* Hangul Syllable */ + ["\uD07D", "\uD07D"], /* Hangul Syllable */ + ["\uD07E", "\uD07E"], /* Hangul Syllable */ + ["\uD07F", "\uD07F"], /* Hangul Syllable */ + ["\uD080", "\uD080"], /* Hangul Syllable */ + ["\uD081", "\uD081"], /* Hangul Syllable */ + ["\uD082", "\uD082"], /* Hangul Syllable */ + ["\uD083", "\uD083"], /* Hangul Syllable */ + ["\uD084", "\uD084"], /* Hangul Syllable */ + ["\uD085", "\uD085"], /* Hangul Syllable */ + ["\uD086", "\uD086"], /* Hangul Syllable */ + ["\uD087", "\uD087"], /* Hangul Syllable */ + ["\uD088", "\uD088"], /* Hangul Syllable */ + ["\uD089", "\uD089"], /* Hangul Syllable */ + ["\uD08A", "\uD08A"], /* Hangul Syllable */ + ["\uD08B", "\uD08B"], /* Hangul Syllable */ + ["\uD08C", "\uD08C"], /* Hangul Syllable */ + ["\uD08D", "\uD08D"], /* Hangul Syllable */ + ["\uD08E", "\uD08E"], /* Hangul Syllable */ + ["\uD08F", "\uD08F"], /* Hangul Syllable */ + ["\uD090", "\uD090"], /* Hangul Syllable */ + ["\uD091", "\uD091"], /* Hangul Syllable */ + ["\uD092", "\uD092"], /* Hangul Syllable */ + ["\uD093", "\uD093"], /* Hangul Syllable */ + ["\uD094", "\uD094"], /* Hangul Syllable */ + ["\uD095", "\uD095"], /* Hangul Syllable */ + ["\uD096", "\uD096"], /* Hangul Syllable */ + ["\uD097", "\uD097"], /* Hangul Syllable */ + ["\uD098", "\uD098"], /* Hangul Syllable */ + ["\uD099", "\uD099"], /* Hangul Syllable */ + ["\uD09A", "\uD09A"], /* Hangul Syllable */ + ["\uD09B", "\uD09B"], /* Hangul Syllable */ + ["\uD09C", "\uD09C"], /* Hangul Syllable */ + ["\uD09D", "\uD09D"], /* Hangul Syllable */ + ["\uD09E", "\uD09E"], /* Hangul Syllable */ + ["\uD09F", "\uD09F"], /* Hangul Syllable */ + ["\uD0A0", "\uD0A0"], /* Hangul Syllable */ + ["\uD0A1", "\uD0A1"], /* Hangul Syllable */ + ["\uD0A2", "\uD0A2"], /* Hangul Syllable */ + ["\uD0A3", "\uD0A3"], /* Hangul Syllable */ + ["\uD0A4", "\uD0A4"], /* Hangul Syllable */ + ["\uD0A5", "\uD0A5"], /* Hangul Syllable */ + ["\uD0A6", "\uD0A6"], /* Hangul Syllable */ + ["\uD0A7", "\uD0A7"], /* Hangul Syllable */ + ["\uD0A8", "\uD0A8"], /* Hangul Syllable */ + ["\uD0A9", "\uD0A9"], /* Hangul Syllable */ + ["\uD0AA", "\uD0AA"], /* Hangul Syllable */ + ["\uD0AB", "\uD0AB"], /* Hangul Syllable */ + ["\uD0AC", "\uD0AC"], /* Hangul Syllable */ + ["\uD0AD", "\uD0AD"], /* Hangul Syllable */ + ["\uD0AE", "\uD0AE"], /* Hangul Syllable */ + ["\uD0AF", "\uD0AF"], /* Hangul Syllable */ + ["\uD0B0", "\uD0B0"], /* Hangul Syllable */ + ["\uD0B1", "\uD0B1"], /* Hangul Syllable */ + ["\uD0B2", "\uD0B2"], /* Hangul Syllable */ + ["\uD0B3", "\uD0B3"], /* Hangul Syllable */ + ["\uD0B4", "\uD0B4"], /* Hangul Syllable */ + ["\uD0B5", "\uD0B5"], /* Hangul Syllable */ + ["\uD0B6", "\uD0B6"], /* Hangul Syllable */ + ["\uD0B7", "\uD0B7"], /* Hangul Syllable */ + ["\uD0B8", "\uD0B8"], /* Hangul Syllable */ + ["\uD0B9", "\uD0B9"], /* Hangul Syllable */ + ["\uD0BA", "\uD0BA"], /* Hangul Syllable */ + ["\uD0BB", "\uD0BB"], /* Hangul Syllable */ + ["\uD0BC", "\uD0BC"], /* Hangul Syllable */ + ["\uD0BD", "\uD0BD"], /* Hangul Syllable */ + ["\uD0BE", "\uD0BE"], /* Hangul Syllable */ + ["\uD0BF", "\uD0BF"], /* Hangul Syllable */ + ["\uD0C0", "\uD0C0"], /* Hangul Syllable */ + ["\uD0C1", "\uD0C1"], /* Hangul Syllable */ + ["\uD0C2", "\uD0C2"], /* Hangul Syllable */ + ["\uD0C3", "\uD0C3"], /* Hangul Syllable */ + ["\uD0C4", "\uD0C4"], /* Hangul Syllable */ + ["\uD0C5", "\uD0C5"], /* Hangul Syllable */ + ["\uD0C6", "\uD0C6"], /* Hangul Syllable */ + ["\uD0C7", "\uD0C7"], /* Hangul Syllable */ + ["\uD0C8", "\uD0C8"], /* Hangul Syllable */ + ["\uD0C9", "\uD0C9"], /* Hangul Syllable */ + ["\uD0CA", "\uD0CA"], /* Hangul Syllable */ + ["\uD0CB", "\uD0CB"], /* Hangul Syllable */ + ["\uD0CC", "\uD0CC"], /* Hangul Syllable */ + ["\uD0CD", "\uD0CD"], /* Hangul Syllable */ + ["\uD0CE", "\uD0CE"], /* Hangul Syllable */ + ["\uD0CF", "\uD0CF"], /* Hangul Syllable */ + ["\uD0D0", "\uD0D0"], /* Hangul Syllable */ + ["\uD0D1", "\uD0D1"], /* Hangul Syllable */ + ["\uD0D2", "\uD0D2"], /* Hangul Syllable */ + ["\uD0D3", "\uD0D3"], /* Hangul Syllable */ + ["\uD0D4", "\uD0D4"], /* Hangul Syllable */ + ["\uD0D5", "\uD0D5"], /* Hangul Syllable */ + ["\uD0D6", "\uD0D6"], /* Hangul Syllable */ + ["\uD0D7", "\uD0D7"], /* Hangul Syllable */ + ["\uD0D8", "\uD0D8"], /* Hangul Syllable */ + ["\uD0D9", "\uD0D9"], /* Hangul Syllable */ + ["\uD0DA", "\uD0DA"], /* Hangul Syllable */ + ["\uD0DB", "\uD0DB"], /* Hangul Syllable */ + ["\uD0DC", "\uD0DC"], /* Hangul Syllable */ + ["\uD0DD", "\uD0DD"], /* Hangul Syllable */ + ["\uD0DE", "\uD0DE"], /* Hangul Syllable */ + ["\uD0DF", "\uD0DF"], /* Hangul Syllable */ + ["\uD0E0", "\uD0E0"], /* Hangul Syllable */ + ["\uD0E1", "\uD0E1"], /* Hangul Syllable */ + ["\uD0E2", "\uD0E2"], /* Hangul Syllable */ + ["\uD0E3", "\uD0E3"], /* Hangul Syllable */ + ["\uD0E4", "\uD0E4"], /* Hangul Syllable */ + ["\uD0E5", "\uD0E5"], /* Hangul Syllable */ + ["\uD0E6", "\uD0E6"], /* Hangul Syllable */ + ["\uD0E7", "\uD0E7"], /* Hangul Syllable */ + ["\uD0E8", "\uD0E8"], /* Hangul Syllable */ + ["\uD0E9", "\uD0E9"], /* Hangul Syllable */ + ["\uD0EA", "\uD0EA"], /* Hangul Syllable */ + ["\uD0EB", "\uD0EB"], /* Hangul Syllable */ + ["\uD0EC", "\uD0EC"], /* Hangul Syllable */ + ["\uD0ED", "\uD0ED"], /* Hangul Syllable */ + ["\uD0EE", "\uD0EE"], /* Hangul Syllable */ + ["\uD0EF", "\uD0EF"], /* Hangul Syllable */ + ["\uD0F0", "\uD0F0"], /* Hangul Syllable */ + ["\uD0F1", "\uD0F1"], /* Hangul Syllable */ + ["\uD0F2", "\uD0F2"], /* Hangul Syllable */ + ["\uD0F3", "\uD0F3"], /* Hangul Syllable */ + ["\uD0F4", "\uD0F4"], /* Hangul Syllable */ + ["\uD0F5", "\uD0F5"], /* Hangul Syllable */ + ["\uD0F6", "\uD0F6"], /* Hangul Syllable */ + ["\uD0F7", "\uD0F7"], /* Hangul Syllable */ + ["\uD0F8", "\uD0F8"], /* Hangul Syllable */ + ["\uD0F9", "\uD0F9"], /* Hangul Syllable */ + ["\uD0FA", "\uD0FA"], /* Hangul Syllable */ + ["\uD0FB", "\uD0FB"], /* Hangul Syllable */ + ["\uD0FC", "\uD0FC"], /* Hangul Syllable */ + ["\uD0FD", "\uD0FD"], /* Hangul Syllable */ + ["\uD0FE", "\uD0FE"], /* Hangul Syllable */ + ["\uD0FF", "\uD0FF"], /* Hangul Syllable */ + ["\uD100", "\uD100"], /* Hangul Syllable */ + ["\uD101", "\uD101"], /* Hangul Syllable */ + ["\uD102", "\uD102"], /* Hangul Syllable */ + ["\uD103", "\uD103"], /* Hangul Syllable */ + ["\uD104", "\uD104"], /* Hangul Syllable */ + ["\uD105", "\uD105"], /* Hangul Syllable */ + ["\uD106", "\uD106"], /* Hangul Syllable */ + ["\uD107", "\uD107"], /* Hangul Syllable */ + ["\uD108", "\uD108"], /* Hangul Syllable */ + ["\uD109", "\uD109"], /* Hangul Syllable */ + ["\uD10A", "\uD10A"], /* Hangul Syllable */ + ["\uD10B", "\uD10B"], /* Hangul Syllable */ + ["\uD10C", "\uD10C"], /* Hangul Syllable */ + ["\uD10D", "\uD10D"], /* Hangul Syllable */ + ["\uD10E", "\uD10E"], /* Hangul Syllable */ + ["\uD10F", "\uD10F"], /* Hangul Syllable */ + ["\uD110", "\uD110"], /* Hangul Syllable */ + ["\uD111", "\uD111"], /* Hangul Syllable */ + ["\uD112", "\uD112"], /* Hangul Syllable */ + ["\uD113", "\uD113"], /* Hangul Syllable */ + ["\uD114", "\uD114"], /* Hangul Syllable */ + ["\uD115", "\uD115"], /* Hangul Syllable */ + ["\uD116", "\uD116"], /* Hangul Syllable */ + ["\uD117", "\uD117"], /* Hangul Syllable */ + ["\uD118", "\uD118"], /* Hangul Syllable */ + ["\uD119", "\uD119"], /* Hangul Syllable */ + ["\uD11A", "\uD11A"], /* Hangul Syllable */ + ["\uD11B", "\uD11B"], /* Hangul Syllable */ + ["\uD11C", "\uD11C"], /* Hangul Syllable */ + ["\uD11D", "\uD11D"], /* Hangul Syllable */ + ["\uD11E", "\uD11E"], /* Hangul Syllable */ + ["\uD11F", "\uD11F"], /* Hangul Syllable */ + ["\uD120", "\uD120"], /* Hangul Syllable */ + ["\uD121", "\uD121"], /* Hangul Syllable */ + ["\uD122", "\uD122"], /* Hangul Syllable */ + ["\uD123", "\uD123"], /* Hangul Syllable */ + ["\uD124", "\uD124"], /* Hangul Syllable */ + ["\uD125", "\uD125"], /* Hangul Syllable */ + ["\uD126", "\uD126"], /* Hangul Syllable */ + ["\uD127", "\uD127"], /* Hangul Syllable */ + ["\uD128", "\uD128"], /* Hangul Syllable */ + ["\uD129", "\uD129"], /* Hangul Syllable */ + ["\uD12A", "\uD12A"], /* Hangul Syllable */ + ["\uD12B", "\uD12B"], /* Hangul Syllable */ + ["\uD12C", "\uD12C"], /* Hangul Syllable */ + ["\uD12D", "\uD12D"], /* Hangul Syllable */ + ["\uD12E", "\uD12E"], /* Hangul Syllable */ + ["\uD12F", "\uD12F"], /* Hangul Syllable */ + ["\uD130", "\uD130"], /* Hangul Syllable */ + ["\uD131", "\uD131"], /* Hangul Syllable */ + ["\uD132", "\uD132"], /* Hangul Syllable */ + ["\uD133", "\uD133"], /* Hangul Syllable */ + ["\uD134", "\uD134"], /* Hangul Syllable */ + ["\uD135", "\uD135"], /* Hangul Syllable */ + ["\uD136", "\uD136"], /* Hangul Syllable */ + ["\uD137", "\uD137"], /* Hangul Syllable */ + ["\uD138", "\uD138"], /* Hangul Syllable */ + ["\uD139", "\uD139"], /* Hangul Syllable */ + ["\uD13A", "\uD13A"], /* Hangul Syllable */ + ["\uD13B", "\uD13B"], /* Hangul Syllable */ + ["\uD13C", "\uD13C"], /* Hangul Syllable */ + ["\uD13D", "\uD13D"], /* Hangul Syllable */ + ["\uD13E", "\uD13E"], /* Hangul Syllable */ + ["\uD13F", "\uD13F"], /* Hangul Syllable */ + ["\uD140", "\uD140"], /* Hangul Syllable */ + ["\uD141", "\uD141"], /* Hangul Syllable */ + ["\uD142", "\uD142"], /* Hangul Syllable */ + ["\uD143", "\uD143"], /* Hangul Syllable */ + ["\uD144", "\uD144"], /* Hangul Syllable */ + ["\uD145", "\uD145"], /* Hangul Syllable */ + ["\uD146", "\uD146"], /* Hangul Syllable */ + ["\uD147", "\uD147"], /* Hangul Syllable */ + ["\uD148", "\uD148"], /* Hangul Syllable */ + ["\uD149", "\uD149"], /* Hangul Syllable */ + ["\uD14A", "\uD14A"], /* Hangul Syllable */ + ["\uD14B", "\uD14B"], /* Hangul Syllable */ + ["\uD14C", "\uD14C"], /* Hangul Syllable */ + ["\uD14D", "\uD14D"], /* Hangul Syllable */ + ["\uD14E", "\uD14E"], /* Hangul Syllable */ + ["\uD14F", "\uD14F"], /* Hangul Syllable */ + ["\uD150", "\uD150"], /* Hangul Syllable */ + ["\uD151", "\uD151"], /* Hangul Syllable */ + ["\uD152", "\uD152"], /* Hangul Syllable */ + ["\uD153", "\uD153"], /* Hangul Syllable */ + ["\uD154", "\uD154"], /* Hangul Syllable */ + ["\uD155", "\uD155"], /* Hangul Syllable */ + ["\uD156", "\uD156"], /* Hangul Syllable */ + ["\uD157", "\uD157"], /* Hangul Syllable */ + ["\uD158", "\uD158"], /* Hangul Syllable */ + ["\uD159", "\uD159"], /* Hangul Syllable */ + ["\uD15A", "\uD15A"], /* Hangul Syllable */ + ["\uD15B", "\uD15B"], /* Hangul Syllable */ + ["\uD15C", "\uD15C"], /* Hangul Syllable */ + ["\uD15D", "\uD15D"], /* Hangul Syllable */ + ["\uD15E", "\uD15E"], /* Hangul Syllable */ + ["\uD15F", "\uD15F"], /* Hangul Syllable */ + ["\uD160", "\uD160"], /* Hangul Syllable */ + ["\uD161", "\uD161"], /* Hangul Syllable */ + ["\uD162", "\uD162"], /* Hangul Syllable */ + ["\uD163", "\uD163"], /* Hangul Syllable */ + ["\uD164", "\uD164"], /* Hangul Syllable */ + ["\uD165", "\uD165"], /* Hangul Syllable */ + ["\uD166", "\uD166"], /* Hangul Syllable */ + ["\uD167", "\uD167"], /* Hangul Syllable */ + ["\uD168", "\uD168"], /* Hangul Syllable */ + ["\uD169", "\uD169"], /* Hangul Syllable */ + ["\uD16A", "\uD16A"], /* Hangul Syllable */ + ["\uD16B", "\uD16B"], /* Hangul Syllable */ + ["\uD16C", "\uD16C"], /* Hangul Syllable */ + ["\uD16D", "\uD16D"], /* Hangul Syllable */ + ["\uD16E", "\uD16E"], /* Hangul Syllable */ + ["\uD16F", "\uD16F"], /* Hangul Syllable */ + ["\uD170", "\uD170"], /* Hangul Syllable */ + ["\uD171", "\uD171"], /* Hangul Syllable */ + ["\uD172", "\uD172"], /* Hangul Syllable */ + ["\uD173", "\uD173"], /* Hangul Syllable */ + ["\uD174", "\uD174"], /* Hangul Syllable */ + ["\uD175", "\uD175"], /* Hangul Syllable */ + ["\uD176", "\uD176"], /* Hangul Syllable */ + ["\uD177", "\uD177"], /* Hangul Syllable */ + ["\uD178", "\uD178"], /* Hangul Syllable */ + ["\uD179", "\uD179"], /* Hangul Syllable */ + ["\uD17A", "\uD17A"], /* Hangul Syllable */ + ["\uD17B", "\uD17B"], /* Hangul Syllable */ + ["\uD17C", "\uD17C"], /* Hangul Syllable */ + ["\uD17D", "\uD17D"], /* Hangul Syllable */ + ["\uD17E", "\uD17E"], /* Hangul Syllable */ + ["\uD17F", "\uD17F"], /* Hangul Syllable */ + ["\uD180", "\uD180"], /* Hangul Syllable */ + ["\uD181", "\uD181"], /* Hangul Syllable */ + ["\uD182", "\uD182"], /* Hangul Syllable */ + ["\uD183", "\uD183"], /* Hangul Syllable */ + ["\uD184", "\uD184"], /* Hangul Syllable */ + ["\uD185", "\uD185"], /* Hangul Syllable */ + ["\uD186", "\uD186"], /* Hangul Syllable */ + ["\uD187", "\uD187"], /* Hangul Syllable */ + ["\uD188", "\uD188"], /* Hangul Syllable */ + ["\uD189", "\uD189"], /* Hangul Syllable */ + ["\uD18A", "\uD18A"], /* Hangul Syllable */ + ["\uD18B", "\uD18B"], /* Hangul Syllable */ + ["\uD18C", "\uD18C"], /* Hangul Syllable */ + ["\uD18D", "\uD18D"], /* Hangul Syllable */ + ["\uD18E", "\uD18E"], /* Hangul Syllable */ + ["\uD18F", "\uD18F"], /* Hangul Syllable */ + ["\uD190", "\uD190"], /* Hangul Syllable */ + ["\uD191", "\uD191"], /* Hangul Syllable */ + ["\uD192", "\uD192"], /* Hangul Syllable */ + ["\uD193", "\uD193"], /* Hangul Syllable */ + ["\uD194", "\uD194"], /* Hangul Syllable */ + ["\uD195", "\uD195"], /* Hangul Syllable */ + ["\uD196", "\uD196"], /* Hangul Syllable */ + ["\uD197", "\uD197"], /* Hangul Syllable */ + ["\uD198", "\uD198"], /* Hangul Syllable */ + ["\uD199", "\uD199"], /* Hangul Syllable */ + ["\uD19A", "\uD19A"], /* Hangul Syllable */ + ["\uD19B", "\uD19B"], /* Hangul Syllable */ + ["\uD19C", "\uD19C"], /* Hangul Syllable */ + ["\uD19D", "\uD19D"], /* Hangul Syllable */ + ["\uD19E", "\uD19E"], /* Hangul Syllable */ + ["\uD19F", "\uD19F"], /* Hangul Syllable */ + ["\uD1A0", "\uD1A0"], /* Hangul Syllable */ + ["\uD1A1", "\uD1A1"], /* Hangul Syllable */ + ["\uD1A2", "\uD1A2"], /* Hangul Syllable */ + ["\uD1A3", "\uD1A3"], /* Hangul Syllable */ + ["\uD1A4", "\uD1A4"], /* Hangul Syllable */ + ["\uD1A5", "\uD1A5"], /* Hangul Syllable */ + ["\uD1A6", "\uD1A6"], /* Hangul Syllable */ + ["\uD1A7", "\uD1A7"], /* Hangul Syllable */ + ["\uD1A8", "\uD1A8"], /* Hangul Syllable */ + ["\uD1A9", "\uD1A9"], /* Hangul Syllable */ + ["\uD1AA", "\uD1AA"], /* Hangul Syllable */ + ["\uD1AB", "\uD1AB"], /* Hangul Syllable */ + ["\uD1AC", "\uD1AC"], /* Hangul Syllable */ + ["\uD1AD", "\uD1AD"], /* Hangul Syllable */ + ["\uD1AE", "\uD1AE"], /* Hangul Syllable */ + ["\uD1AF", "\uD1AF"], /* Hangul Syllable */ + ["\uD1B0", "\uD1B0"], /* Hangul Syllable */ + ["\uD1B1", "\uD1B1"], /* Hangul Syllable */ + ["\uD1B2", "\uD1B2"], /* Hangul Syllable */ + ["\uD1B3", "\uD1B3"], /* Hangul Syllable */ + ["\uD1B4", "\uD1B4"], /* Hangul Syllable */ + ["\uD1B5", "\uD1B5"], /* Hangul Syllable */ + ["\uD1B6", "\uD1B6"], /* Hangul Syllable */ + ["\uD1B7", "\uD1B7"], /* Hangul Syllable */ + ["\uD1B8", "\uD1B8"], /* Hangul Syllable */ + ["\uD1B9", "\uD1B9"], /* Hangul Syllable */ + ["\uD1BA", "\uD1BA"], /* Hangul Syllable */ + ["\uD1BB", "\uD1BB"], /* Hangul Syllable */ + ["\uD1BC", "\uD1BC"], /* Hangul Syllable */ + ["\uD1BD", "\uD1BD"], /* Hangul Syllable */ + ["\uD1BE", "\uD1BE"], /* Hangul Syllable */ + ["\uD1BF", "\uD1BF"], /* Hangul Syllable */ + ["\uD1C0", "\uD1C0"], /* Hangul Syllable */ + ["\uD1C1", "\uD1C1"], /* Hangul Syllable */ + ["\uD1C2", "\uD1C2"], /* Hangul Syllable */ + ["\uD1C3", "\uD1C3"], /* Hangul Syllable */ + ["\uD1C4", "\uD1C4"], /* Hangul Syllable */ + ["\uD1C5", "\uD1C5"], /* Hangul Syllable */ + ["\uD1C6", "\uD1C6"], /* Hangul Syllable */ + ["\uD1C7", "\uD1C7"], /* Hangul Syllable */ + ["\uD1C8", "\uD1C8"], /* Hangul Syllable */ + ["\uD1C9", "\uD1C9"], /* Hangul Syllable */ + ["\uD1CA", "\uD1CA"], /* Hangul Syllable */ + ["\uD1CB", "\uD1CB"], /* Hangul Syllable */ + ["\uD1CC", "\uD1CC"], /* Hangul Syllable */ + ["\uD1CD", "\uD1CD"], /* Hangul Syllable */ + ["\uD1CE", "\uD1CE"], /* Hangul Syllable */ + ["\uD1CF", "\uD1CF"], /* Hangul Syllable */ + ["\uD1D0", "\uD1D0"], /* Hangul Syllable */ + ["\uD1D1", "\uD1D1"], /* Hangul Syllable */ + ["\uD1D2", "\uD1D2"], /* Hangul Syllable */ + ["\uD1D3", "\uD1D3"], /* Hangul Syllable */ + ["\uD1D4", "\uD1D4"], /* Hangul Syllable */ + ["\uD1D5", "\uD1D5"], /* Hangul Syllable */ + ["\uD1D6", "\uD1D6"], /* Hangul Syllable */ + ["\uD1D7", "\uD1D7"], /* Hangul Syllable */ + ["\uD1D8", "\uD1D8"], /* Hangul Syllable */ + ["\uD1D9", "\uD1D9"], /* Hangul Syllable */ + ["\uD1DA", "\uD1DA"], /* Hangul Syllable */ + ["\uD1DB", "\uD1DB"], /* Hangul Syllable */ + ["\uD1DC", "\uD1DC"], /* Hangul Syllable */ + ["\uD1DD", "\uD1DD"], /* Hangul Syllable */ + ["\uD1DE", "\uD1DE"], /* Hangul Syllable */ + ["\uD1DF", "\uD1DF"], /* Hangul Syllable */ + ["\uD1E0", "\uD1E0"], /* Hangul Syllable */ + ["\uD1E1", "\uD1E1"], /* Hangul Syllable */ + ["\uD1E2", "\uD1E2"], /* Hangul Syllable */ + ["\uD1E3", "\uD1E3"], /* Hangul Syllable */ + ["\uD1E4", "\uD1E4"], /* Hangul Syllable */ + ["\uD1E5", "\uD1E5"], /* Hangul Syllable */ + ["\uD1E6", "\uD1E6"], /* Hangul Syllable */ + ["\uD1E7", "\uD1E7"], /* Hangul Syllable */ + ["\uD1E8", "\uD1E8"], /* Hangul Syllable */ + ["\uD1E9", "\uD1E9"], /* Hangul Syllable */ + ["\uD1EA", "\uD1EA"], /* Hangul Syllable */ + ["\uD1EB", "\uD1EB"], /* Hangul Syllable */ + ["\uD1EC", "\uD1EC"], /* Hangul Syllable */ + ["\uD1ED", "\uD1ED"], /* Hangul Syllable */ + ["\uD1EE", "\uD1EE"], /* Hangul Syllable */ + ["\uD1EF", "\uD1EF"], /* Hangul Syllable */ + ["\uD1F0", "\uD1F0"], /* Hangul Syllable */ + ["\uD1F1", "\uD1F1"], /* Hangul Syllable */ + ["\uD1F2", "\uD1F2"], /* Hangul Syllable */ + ["\uD1F3", "\uD1F3"], /* Hangul Syllable */ + ["\uD1F4", "\uD1F4"], /* Hangul Syllable */ + ["\uD1F5", "\uD1F5"], /* Hangul Syllable */ + ["\uD1F6", "\uD1F6"], /* Hangul Syllable */ + ["\uD1F7", "\uD1F7"], /* Hangul Syllable */ + ["\uD1F8", "\uD1F8"], /* Hangul Syllable */ + ["\uD1F9", "\uD1F9"], /* Hangul Syllable */ + ["\uD1FA", "\uD1FA"], /* Hangul Syllable */ + ["\uD1FB", "\uD1FB"], /* Hangul Syllable */ + ["\uD1FC", "\uD1FC"], /* Hangul Syllable */ + ["\uD1FD", "\uD1FD"], /* Hangul Syllable */ + ["\uD1FE", "\uD1FE"], /* Hangul Syllable */ + ["\uD1FF", "\uD1FF"], /* Hangul Syllable */ + ["\uD200", "\uD200"], /* Hangul Syllable */ + ["\uD201", "\uD201"], /* Hangul Syllable */ + ["\uD202", "\uD202"], /* Hangul Syllable */ + ["\uD203", "\uD203"], /* Hangul Syllable */ + ["\uD204", "\uD204"], /* Hangul Syllable */ + ["\uD205", "\uD205"], /* Hangul Syllable */ + ["\uD206", "\uD206"], /* Hangul Syllable */ + ["\uD207", "\uD207"], /* Hangul Syllable */ + ["\uD208", "\uD208"], /* Hangul Syllable */ + ["\uD209", "\uD209"], /* Hangul Syllable */ + ["\uD20A", "\uD20A"], /* Hangul Syllable */ + ["\uD20B", "\uD20B"], /* Hangul Syllable */ + ["\uD20C", "\uD20C"], /* Hangul Syllable */ + ["\uD20D", "\uD20D"], /* Hangul Syllable */ + ["\uD20E", "\uD20E"], /* Hangul Syllable */ + ["\uD20F", "\uD20F"], /* Hangul Syllable */ + ["\uD210", "\uD210"], /* Hangul Syllable */ + ["\uD211", "\uD211"], /* Hangul Syllable */ + ["\uD212", "\uD212"], /* Hangul Syllable */ + ["\uD213", "\uD213"], /* Hangul Syllable */ + ["\uD214", "\uD214"], /* Hangul Syllable */ + ["\uD215", "\uD215"], /* Hangul Syllable */ + ["\uD216", "\uD216"], /* Hangul Syllable */ + ["\uD217", "\uD217"], /* Hangul Syllable */ + ["\uD218", "\uD218"], /* Hangul Syllable */ + ["\uD219", "\uD219"], /* Hangul Syllable */ + ["\uD21A", "\uD21A"], /* Hangul Syllable */ + ["\uD21B", "\uD21B"], /* Hangul Syllable */ + ["\uD21C", "\uD21C"], /* Hangul Syllable */ + ["\uD21D", "\uD21D"], /* Hangul Syllable */ + ["\uD21E", "\uD21E"], /* Hangul Syllable */ + ["\uD21F", "\uD21F"], /* Hangul Syllable */ + ["\uD220", "\uD220"], /* Hangul Syllable */ + ["\uD221", "\uD221"], /* Hangul Syllable */ + ["\uD222", "\uD222"], /* Hangul Syllable */ + ["\uD223", "\uD223"], /* Hangul Syllable */ + ["\uD224", "\uD224"], /* Hangul Syllable */ + ["\uD225", "\uD225"], /* Hangul Syllable */ + ["\uD226", "\uD226"], /* Hangul Syllable */ + ["\uD227", "\uD227"], /* Hangul Syllable */ + ["\uD228", "\uD228"], /* Hangul Syllable */ + ["\uD229", "\uD229"], /* Hangul Syllable */ + ["\uD22A", "\uD22A"], /* Hangul Syllable */ + ["\uD22B", "\uD22B"], /* Hangul Syllable */ + ["\uD22C", "\uD22C"], /* Hangul Syllable */ + ["\uD22D", "\uD22D"], /* Hangul Syllable */ + ["\uD22E", "\uD22E"], /* Hangul Syllable */ + ["\uD22F", "\uD22F"], /* Hangul Syllable */ + ["\uD230", "\uD230"], /* Hangul Syllable */ + ["\uD231", "\uD231"], /* Hangul Syllable */ + ["\uD232", "\uD232"], /* Hangul Syllable */ + ["\uD233", "\uD233"], /* Hangul Syllable */ + ["\uD234", "\uD234"], /* Hangul Syllable */ + ["\uD235", "\uD235"], /* Hangul Syllable */ + ["\uD236", "\uD236"], /* Hangul Syllable */ + ["\uD237", "\uD237"], /* Hangul Syllable */ + ["\uD238", "\uD238"], /* Hangul Syllable */ + ["\uD239", "\uD239"], /* Hangul Syllable */ + ["\uD23A", "\uD23A"], /* Hangul Syllable */ + ["\uD23B", "\uD23B"], /* Hangul Syllable */ + ["\uD23C", "\uD23C"], /* Hangul Syllable */ + ["\uD23D", "\uD23D"], /* Hangul Syllable */ + ["\uD23E", "\uD23E"], /* Hangul Syllable */ + ["\uD23F", "\uD23F"], /* Hangul Syllable */ + ["\uD240", "\uD240"], /* Hangul Syllable */ + ["\uD241", "\uD241"], /* Hangul Syllable */ + ["\uD242", "\uD242"], /* Hangul Syllable */ + ["\uD243", "\uD243"], /* Hangul Syllable */ + ["\uD244", "\uD244"], /* Hangul Syllable */ + ["\uD245", "\uD245"], /* Hangul Syllable */ + ["\uD246", "\uD246"], /* Hangul Syllable */ + ["\uD247", "\uD247"], /* Hangul Syllable */ + ["\uD248", "\uD248"], /* Hangul Syllable */ + ["\uD249", "\uD249"], /* Hangul Syllable */ + ["\uD24A", "\uD24A"], /* Hangul Syllable */ + ["\uD24B", "\uD24B"], /* Hangul Syllable */ + ["\uD24C", "\uD24C"], /* Hangul Syllable */ + ["\uD24D", "\uD24D"], /* Hangul Syllable */ + ["\uD24E", "\uD24E"], /* Hangul Syllable */ + ["\uD24F", "\uD24F"], /* Hangul Syllable */ + ["\uD250", "\uD250"], /* Hangul Syllable */ + ["\uD251", "\uD251"], /* Hangul Syllable */ + ["\uD252", "\uD252"], /* Hangul Syllable */ + ["\uD253", "\uD253"], /* Hangul Syllable */ + ["\uD254", "\uD254"], /* Hangul Syllable */ + ["\uD255", "\uD255"], /* Hangul Syllable */ + ["\uD256", "\uD256"], /* Hangul Syllable */ + ["\uD257", "\uD257"], /* Hangul Syllable */ + ["\uD258", "\uD258"], /* Hangul Syllable */ + ["\uD259", "\uD259"], /* Hangul Syllable */ + ["\uD25A", "\uD25A"], /* Hangul Syllable */ + ["\uD25B", "\uD25B"], /* Hangul Syllable */ + ["\uD25C", "\uD25C"], /* Hangul Syllable */ + ["\uD25D", "\uD25D"], /* Hangul Syllable */ + ["\uD25E", "\uD25E"], /* Hangul Syllable */ + ["\uD25F", "\uD25F"], /* Hangul Syllable */ + ["\uD260", "\uD260"], /* Hangul Syllable */ + ["\uD261", "\uD261"], /* Hangul Syllable */ + ["\uD262", "\uD262"], /* Hangul Syllable */ + ["\uD263", "\uD263"], /* Hangul Syllable */ + ["\uD264", "\uD264"], /* Hangul Syllable */ + ["\uD265", "\uD265"], /* Hangul Syllable */ + ["\uD266", "\uD266"], /* Hangul Syllable */ + ["\uD267", "\uD267"], /* Hangul Syllable */ + ["\uD268", "\uD268"], /* Hangul Syllable */ + ["\uD269", "\uD269"], /* Hangul Syllable */ + ["\uD26A", "\uD26A"], /* Hangul Syllable */ + ["\uD26B", "\uD26B"], /* Hangul Syllable */ + ["\uD26C", "\uD26C"], /* Hangul Syllable */ + ["\uD26D", "\uD26D"], /* Hangul Syllable */ + ["\uD26E", "\uD26E"], /* Hangul Syllable */ + ["\uD26F", "\uD26F"], /* Hangul Syllable */ + ["\uD270", "\uD270"], /* Hangul Syllable */ + ["\uD271", "\uD271"], /* Hangul Syllable */ + ["\uD272", "\uD272"], /* Hangul Syllable */ + ["\uD273", "\uD273"], /* Hangul Syllable */ + ["\uD274", "\uD274"], /* Hangul Syllable */ + ["\uD275", "\uD275"], /* Hangul Syllable */ + ["\uD276", "\uD276"], /* Hangul Syllable */ + ["\uD277", "\uD277"], /* Hangul Syllable */ + ["\uD278", "\uD278"], /* Hangul Syllable */ + ["\uD279", "\uD279"], /* Hangul Syllable */ + ["\uD27A", "\uD27A"], /* Hangul Syllable */ + ["\uD27B", "\uD27B"], /* Hangul Syllable */ + ["\uD27C", "\uD27C"], /* Hangul Syllable */ + ["\uD27D", "\uD27D"], /* Hangul Syllable */ + ["\uD27E", "\uD27E"], /* Hangul Syllable */ + ["\uD27F", "\uD27F"], /* Hangul Syllable */ + ["\uD280", "\uD280"], /* Hangul Syllable */ + ["\uD281", "\uD281"], /* Hangul Syllable */ + ["\uD282", "\uD282"], /* Hangul Syllable */ + ["\uD283", "\uD283"], /* Hangul Syllable */ + ["\uD284", "\uD284"], /* Hangul Syllable */ + ["\uD285", "\uD285"], /* Hangul Syllable */ + ["\uD286", "\uD286"], /* Hangul Syllable */ + ["\uD287", "\uD287"], /* Hangul Syllable */ + ["\uD288", "\uD288"], /* Hangul Syllable */ + ["\uD289", "\uD289"], /* Hangul Syllable */ + ["\uD28A", "\uD28A"], /* Hangul Syllable */ + ["\uD28B", "\uD28B"], /* Hangul Syllable */ + ["\uD28C", "\uD28C"], /* Hangul Syllable */ + ["\uD28D", "\uD28D"], /* Hangul Syllable */ + ["\uD28E", "\uD28E"], /* Hangul Syllable */ + ["\uD28F", "\uD28F"], /* Hangul Syllable */ + ["\uD290", "\uD290"], /* Hangul Syllable */ + ["\uD291", "\uD291"], /* Hangul Syllable */ + ["\uD292", "\uD292"], /* Hangul Syllable */ + ["\uD293", "\uD293"], /* Hangul Syllable */ + ["\uD294", "\uD294"], /* Hangul Syllable */ + ["\uD295", "\uD295"], /* Hangul Syllable */ + ["\uD296", "\uD296"], /* Hangul Syllable */ + ["\uD297", "\uD297"], /* Hangul Syllable */ + ["\uD298", "\uD298"], /* Hangul Syllable */ + ["\uD299", "\uD299"], /* Hangul Syllable */ + ["\uD29A", "\uD29A"], /* Hangul Syllable */ + ["\uD29B", "\uD29B"], /* Hangul Syllable */ + ["\uD29C", "\uD29C"], /* Hangul Syllable */ + ["\uD29D", "\uD29D"], /* Hangul Syllable */ + ["\uD29E", "\uD29E"], /* Hangul Syllable */ + ["\uD29F", "\uD29F"], /* Hangul Syllable */ + ["\uD2A0", "\uD2A0"], /* Hangul Syllable */ + ["\uD2A1", "\uD2A1"], /* Hangul Syllable */ + ["\uD2A2", "\uD2A2"], /* Hangul Syllable */ + ["\uD2A3", "\uD2A3"], /* Hangul Syllable */ + ["\uD2A4", "\uD2A4"], /* Hangul Syllable */ + ["\uD2A5", "\uD2A5"], /* Hangul Syllable */ + ["\uD2A6", "\uD2A6"], /* Hangul Syllable */ + ["\uD2A7", "\uD2A7"], /* Hangul Syllable */ + ["\uD2A8", "\uD2A8"], /* Hangul Syllable */ + ["\uD2A9", "\uD2A9"], /* Hangul Syllable */ + ["\uD2AA", "\uD2AA"], /* Hangul Syllable */ + ["\uD2AB", "\uD2AB"], /* Hangul Syllable */ + ["\uD2AC", "\uD2AC"], /* Hangul Syllable */ + ["\uD2AD", "\uD2AD"], /* Hangul Syllable */ + ["\uD2AE", "\uD2AE"], /* Hangul Syllable */ + ["\uD2AF", "\uD2AF"], /* Hangul Syllable */ + ["\uD2B0", "\uD2B0"], /* Hangul Syllable */ + ["\uD2B1", "\uD2B1"], /* Hangul Syllable */ + ["\uD2B2", "\uD2B2"], /* Hangul Syllable */ + ["\uD2B3", "\uD2B3"], /* Hangul Syllable */ + ["\uD2B4", "\uD2B4"], /* Hangul Syllable */ + ["\uD2B5", "\uD2B5"], /* Hangul Syllable */ + ["\uD2B6", "\uD2B6"], /* Hangul Syllable */ + ["\uD2B7", "\uD2B7"], /* Hangul Syllable */ + ["\uD2B8", "\uD2B8"], /* Hangul Syllable */ + ["\uD2B9", "\uD2B9"], /* Hangul Syllable */ + ["\uD2BA", "\uD2BA"], /* Hangul Syllable */ + ["\uD2BB", "\uD2BB"], /* Hangul Syllable */ + ["\uD2BC", "\uD2BC"], /* Hangul Syllable */ + ["\uD2BD", "\uD2BD"], /* Hangul Syllable */ + ["\uD2BE", "\uD2BE"], /* Hangul Syllable */ + ["\uD2BF", "\uD2BF"], /* Hangul Syllable */ + ["\uD2C0", "\uD2C0"], /* Hangul Syllable */ + ["\uD2C1", "\uD2C1"], /* Hangul Syllable */ + ["\uD2C2", "\uD2C2"], /* Hangul Syllable */ + ["\uD2C3", "\uD2C3"], /* Hangul Syllable */ + ["\uD2C4", "\uD2C4"], /* Hangul Syllable */ + ["\uD2C5", "\uD2C5"], /* Hangul Syllable */ + ["\uD2C6", "\uD2C6"], /* Hangul Syllable */ + ["\uD2C7", "\uD2C7"], /* Hangul Syllable */ + ["\uD2C8", "\uD2C8"], /* Hangul Syllable */ + ["\uD2C9", "\uD2C9"], /* Hangul Syllable */ + ["\uD2CA", "\uD2CA"], /* Hangul Syllable */ + ["\uD2CB", "\uD2CB"], /* Hangul Syllable */ + ["\uD2CC", "\uD2CC"], /* Hangul Syllable */ + ["\uD2CD", "\uD2CD"], /* Hangul Syllable */ + ["\uD2CE", "\uD2CE"], /* Hangul Syllable */ + ["\uD2CF", "\uD2CF"], /* Hangul Syllable */ + ["\uD2D0", "\uD2D0"], /* Hangul Syllable */ + ["\uD2D1", "\uD2D1"], /* Hangul Syllable */ + ["\uD2D2", "\uD2D2"], /* Hangul Syllable */ + ["\uD2D3", "\uD2D3"], /* Hangul Syllable */ + ["\uD2D4", "\uD2D4"], /* Hangul Syllable */ + ["\uD2D5", "\uD2D5"], /* Hangul Syllable */ + ["\uD2D6", "\uD2D6"], /* Hangul Syllable */ + ["\uD2D7", "\uD2D7"], /* Hangul Syllable */ + ["\uD2D8", "\uD2D8"], /* Hangul Syllable */ + ["\uD2D9", "\uD2D9"], /* Hangul Syllable */ + ["\uD2DA", "\uD2DA"], /* Hangul Syllable */ + ["\uD2DB", "\uD2DB"], /* Hangul Syllable */ + ["\uD2DC", "\uD2DC"], /* Hangul Syllable */ + ["\uD2DD", "\uD2DD"], /* Hangul Syllable */ + ["\uD2DE", "\uD2DE"], /* Hangul Syllable */ + ["\uD2DF", "\uD2DF"], /* Hangul Syllable */ + ["\uD2E0", "\uD2E0"], /* Hangul Syllable */ + ["\uD2E1", "\uD2E1"], /* Hangul Syllable */ + ["\uD2E2", "\uD2E2"], /* Hangul Syllable */ + ["\uD2E3", "\uD2E3"], /* Hangul Syllable */ + ["\uD2E4", "\uD2E4"], /* Hangul Syllable */ + ["\uD2E5", "\uD2E5"], /* Hangul Syllable */ + ["\uD2E6", "\uD2E6"], /* Hangul Syllable */ + ["\uD2E7", "\uD2E7"], /* Hangul Syllable */ + ["\uD2E8", "\uD2E8"], /* Hangul Syllable */ + ["\uD2E9", "\uD2E9"], /* Hangul Syllable */ + ["\uD2EA", "\uD2EA"], /* Hangul Syllable */ + ["\uD2EB", "\uD2EB"], /* Hangul Syllable */ + ["\uD2EC", "\uD2EC"], /* Hangul Syllable */ + ["\uD2ED", "\uD2ED"], /* Hangul Syllable */ + ["\uD2EE", "\uD2EE"], /* Hangul Syllable */ + ["\uD2EF", "\uD2EF"], /* Hangul Syllable */ + ["\uD2F0", "\uD2F0"], /* Hangul Syllable */ + ["\uD2F1", "\uD2F1"], /* Hangul Syllable */ + ["\uD2F2", "\uD2F2"], /* Hangul Syllable */ + ["\uD2F3", "\uD2F3"], /* Hangul Syllable */ + ["\uD2F4", "\uD2F4"], /* Hangul Syllable */ + ["\uD2F5", "\uD2F5"], /* Hangul Syllable */ + ["\uD2F6", "\uD2F6"], /* Hangul Syllable */ + ["\uD2F7", "\uD2F7"], /* Hangul Syllable */ + ["\uD2F8", "\uD2F8"], /* Hangul Syllable */ + ["\uD2F9", "\uD2F9"], /* Hangul Syllable */ + ["\uD2FA", "\uD2FA"], /* Hangul Syllable */ + ["\uD2FB", "\uD2FB"], /* Hangul Syllable */ + ["\uD2FC", "\uD2FC"], /* Hangul Syllable */ + ["\uD2FD", "\uD2FD"], /* Hangul Syllable */ + ["\uD2FE", "\uD2FE"], /* Hangul Syllable */ + ["\uD2FF", "\uD2FF"], /* Hangul Syllable */ + ["\uD300", "\uD300"], /* Hangul Syllable */ + ["\uD301", "\uD301"], /* Hangul Syllable */ + ["\uD302", "\uD302"], /* Hangul Syllable */ + ["\uD303", "\uD303"], /* Hangul Syllable */ + ["\uD304", "\uD304"], /* Hangul Syllable */ + ["\uD305", "\uD305"], /* Hangul Syllable */ + ["\uD306", "\uD306"], /* Hangul Syllable */ + ["\uD307", "\uD307"], /* Hangul Syllable */ + ["\uD308", "\uD308"], /* Hangul Syllable */ + ["\uD309", "\uD309"], /* Hangul Syllable */ + ["\uD30A", "\uD30A"], /* Hangul Syllable */ + ["\uD30B", "\uD30B"], /* Hangul Syllable */ + ["\uD30C", "\uD30C"], /* Hangul Syllable */ + ["\uD30D", "\uD30D"], /* Hangul Syllable */ + ["\uD30E", "\uD30E"], /* Hangul Syllable */ + ["\uD30F", "\uD30F"], /* Hangul Syllable */ + ["\uD310", "\uD310"], /* Hangul Syllable */ + ["\uD311", "\uD311"], /* Hangul Syllable */ + ["\uD312", "\uD312"], /* Hangul Syllable */ + ["\uD313", "\uD313"], /* Hangul Syllable */ + ["\uD314", "\uD314"], /* Hangul Syllable */ + ["\uD315", "\uD315"], /* Hangul Syllable */ + ["\uD316", "\uD316"], /* Hangul Syllable */ + ["\uD317", "\uD317"], /* Hangul Syllable */ + ["\uD318", "\uD318"], /* Hangul Syllable */ + ["\uD319", "\uD319"], /* Hangul Syllable */ + ["\uD31A", "\uD31A"], /* Hangul Syllable */ + ["\uD31B", "\uD31B"], /* Hangul Syllable */ + ["\uD31C", "\uD31C"], /* Hangul Syllable */ + ["\uD31D", "\uD31D"], /* Hangul Syllable */ + ["\uD31E", "\uD31E"], /* Hangul Syllable */ + ["\uD31F", "\uD31F"], /* Hangul Syllable */ + ["\uD320", "\uD320"], /* Hangul Syllable */ + ["\uD321", "\uD321"], /* Hangul Syllable */ + ["\uD322", "\uD322"], /* Hangul Syllable */ + ["\uD323", "\uD323"], /* Hangul Syllable */ + ["\uD324", "\uD324"], /* Hangul Syllable */ + ["\uD325", "\uD325"], /* Hangul Syllable */ + ["\uD326", "\uD326"], /* Hangul Syllable */ + ["\uD327", "\uD327"], /* Hangul Syllable */ + ["\uD328", "\uD328"], /* Hangul Syllable */ + ["\uD329", "\uD329"], /* Hangul Syllable */ + ["\uD32A", "\uD32A"], /* Hangul Syllable */ + ["\uD32B", "\uD32B"], /* Hangul Syllable */ + ["\uD32C", "\uD32C"], /* Hangul Syllable */ + ["\uD32D", "\uD32D"], /* Hangul Syllable */ + ["\uD32E", "\uD32E"], /* Hangul Syllable */ + ["\uD32F", "\uD32F"], /* Hangul Syllable */ + ["\uD330", "\uD330"], /* Hangul Syllable */ + ["\uD331", "\uD331"], /* Hangul Syllable */ + ["\uD332", "\uD332"], /* Hangul Syllable */ + ["\uD333", "\uD333"], /* Hangul Syllable */ + ["\uD334", "\uD334"], /* Hangul Syllable */ + ["\uD335", "\uD335"], /* Hangul Syllable */ + ["\uD336", "\uD336"], /* Hangul Syllable */ + ["\uD337", "\uD337"], /* Hangul Syllable */ + ["\uD338", "\uD338"], /* Hangul Syllable */ + ["\uD339", "\uD339"], /* Hangul Syllable */ + ["\uD33A", "\uD33A"], /* Hangul Syllable */ + ["\uD33B", "\uD33B"], /* Hangul Syllable */ + ["\uD33C", "\uD33C"], /* Hangul Syllable */ + ["\uD33D", "\uD33D"], /* Hangul Syllable */ + ["\uD33E", "\uD33E"], /* Hangul Syllable */ + ["\uD33F", "\uD33F"], /* Hangul Syllable */ + ["\uD340", "\uD340"], /* Hangul Syllable */ + ["\uD341", "\uD341"], /* Hangul Syllable */ + ["\uD342", "\uD342"], /* Hangul Syllable */ + ["\uD343", "\uD343"], /* Hangul Syllable */ + ["\uD344", "\uD344"], /* Hangul Syllable */ + ["\uD345", "\uD345"], /* Hangul Syllable */ + ["\uD346", "\uD346"], /* Hangul Syllable */ + ["\uD347", "\uD347"], /* Hangul Syllable */ + ["\uD348", "\uD348"], /* Hangul Syllable */ + ["\uD349", "\uD349"], /* Hangul Syllable */ + ["\uD34A", "\uD34A"], /* Hangul Syllable */ + ["\uD34B", "\uD34B"], /* Hangul Syllable */ + ["\uD34C", "\uD34C"], /* Hangul Syllable */ + ["\uD34D", "\uD34D"], /* Hangul Syllable */ + ["\uD34E", "\uD34E"], /* Hangul Syllable */ + ["\uD34F", "\uD34F"], /* Hangul Syllable */ + ["\uD350", "\uD350"], /* Hangul Syllable */ + ["\uD351", "\uD351"], /* Hangul Syllable */ + ["\uD352", "\uD352"], /* Hangul Syllable */ + ["\uD353", "\uD353"], /* Hangul Syllable */ + ["\uD354", "\uD354"], /* Hangul Syllable */ + ["\uD355", "\uD355"], /* Hangul Syllable */ + ["\uD356", "\uD356"], /* Hangul Syllable */ + ["\uD357", "\uD357"], /* Hangul Syllable */ + ["\uD358", "\uD358"], /* Hangul Syllable */ + ["\uD359", "\uD359"], /* Hangul Syllable */ + ["\uD35A", "\uD35A"], /* Hangul Syllable */ + ["\uD35B", "\uD35B"], /* Hangul Syllable */ + ["\uD35C", "\uD35C"], /* Hangul Syllable */ + ["\uD35D", "\uD35D"], /* Hangul Syllable */ + ["\uD35E", "\uD35E"], /* Hangul Syllable */ + ["\uD35F", "\uD35F"], /* Hangul Syllable */ + ["\uD360", "\uD360"], /* Hangul Syllable */ + ["\uD361", "\uD361"], /* Hangul Syllable */ + ["\uD362", "\uD362"], /* Hangul Syllable */ + ["\uD363", "\uD363"], /* Hangul Syllable */ + ["\uD364", "\uD364"], /* Hangul Syllable */ + ["\uD365", "\uD365"], /* Hangul Syllable */ + ["\uD366", "\uD366"], /* Hangul Syllable */ + ["\uD367", "\uD367"], /* Hangul Syllable */ + ["\uD368", "\uD368"], /* Hangul Syllable */ + ["\uD369", "\uD369"], /* Hangul Syllable */ + ["\uD36A", "\uD36A"], /* Hangul Syllable */ + ["\uD36B", "\uD36B"], /* Hangul Syllable */ + ["\uD36C", "\uD36C"], /* Hangul Syllable */ + ["\uD36D", "\uD36D"], /* Hangul Syllable */ + ["\uD36E", "\uD36E"], /* Hangul Syllable */ + ["\uD36F", "\uD36F"], /* Hangul Syllable */ + ["\uD370", "\uD370"], /* Hangul Syllable */ + ["\uD371", "\uD371"], /* Hangul Syllable */ + ["\uD372", "\uD372"], /* Hangul Syllable */ + ["\uD373", "\uD373"], /* Hangul Syllable */ + ["\uD374", "\uD374"], /* Hangul Syllable */ + ["\uD375", "\uD375"], /* Hangul Syllable */ + ["\uD376", "\uD376"], /* Hangul Syllable */ + ["\uD377", "\uD377"], /* Hangul Syllable */ + ["\uD378", "\uD378"], /* Hangul Syllable */ + ["\uD379", "\uD379"], /* Hangul Syllable */ + ["\uD37A", "\uD37A"], /* Hangul Syllable */ + ["\uD37B", "\uD37B"], /* Hangul Syllable */ + ["\uD37C", "\uD37C"], /* Hangul Syllable */ + ["\uD37D", "\uD37D"], /* Hangul Syllable */ + ["\uD37E", "\uD37E"], /* Hangul Syllable */ + ["\uD37F", "\uD37F"], /* Hangul Syllable */ + ["\uD380", "\uD380"], /* Hangul Syllable */ + ["\uD381", "\uD381"], /* Hangul Syllable */ + ["\uD382", "\uD382"], /* Hangul Syllable */ + ["\uD383", "\uD383"], /* Hangul Syllable */ + ["\uD384", "\uD384"], /* Hangul Syllable */ + ["\uD385", "\uD385"], /* Hangul Syllable */ + ["\uD386", "\uD386"], /* Hangul Syllable */ + ["\uD387", "\uD387"], /* Hangul Syllable */ + ["\uD388", "\uD388"], /* Hangul Syllable */ + ["\uD389", "\uD389"], /* Hangul Syllable */ + ["\uD38A", "\uD38A"], /* Hangul Syllable */ + ["\uD38B", "\uD38B"], /* Hangul Syllable */ + ["\uD38C", "\uD38C"], /* Hangul Syllable */ + ["\uD38D", "\uD38D"], /* Hangul Syllable */ + ["\uD38E", "\uD38E"], /* Hangul Syllable */ + ["\uD38F", "\uD38F"], /* Hangul Syllable */ + ["\uD390", "\uD390"], /* Hangul Syllable */ + ["\uD391", "\uD391"], /* Hangul Syllable */ + ["\uD392", "\uD392"], /* Hangul Syllable */ + ["\uD393", "\uD393"], /* Hangul Syllable */ + ["\uD394", "\uD394"], /* Hangul Syllable */ + ["\uD395", "\uD395"], /* Hangul Syllable */ + ["\uD396", "\uD396"], /* Hangul Syllable */ + ["\uD397", "\uD397"], /* Hangul Syllable */ + ["\uD398", "\uD398"], /* Hangul Syllable */ + ["\uD399", "\uD399"], /* Hangul Syllable */ + ["\uD39A", "\uD39A"], /* Hangul Syllable */ + ["\uD39B", "\uD39B"], /* Hangul Syllable */ + ["\uD39C", "\uD39C"], /* Hangul Syllable */ + ["\uD39D", "\uD39D"], /* Hangul Syllable */ + ["\uD39E", "\uD39E"], /* Hangul Syllable */ + ["\uD39F", "\uD39F"], /* Hangul Syllable */ + ["\uD3A0", "\uD3A0"], /* Hangul Syllable */ + ["\uD3A1", "\uD3A1"], /* Hangul Syllable */ + ["\uD3A2", "\uD3A2"], /* Hangul Syllable */ + ["\uD3A3", "\uD3A3"], /* Hangul Syllable */ + ["\uD3A4", "\uD3A4"], /* Hangul Syllable */ + ["\uD3A5", "\uD3A5"], /* Hangul Syllable */ + ["\uD3A6", "\uD3A6"], /* Hangul Syllable */ + ["\uD3A7", "\uD3A7"], /* Hangul Syllable */ + ["\uD3A8", "\uD3A8"], /* Hangul Syllable */ + ["\uD3A9", "\uD3A9"], /* Hangul Syllable */ + ["\uD3AA", "\uD3AA"], /* Hangul Syllable */ + ["\uD3AB", "\uD3AB"], /* Hangul Syllable */ + ["\uD3AC", "\uD3AC"], /* Hangul Syllable */ + ["\uD3AD", "\uD3AD"], /* Hangul Syllable */ + ["\uD3AE", "\uD3AE"], /* Hangul Syllable */ + ["\uD3AF", "\uD3AF"], /* Hangul Syllable */ + ["\uD3B0", "\uD3B0"], /* Hangul Syllable */ + ["\uD3B1", "\uD3B1"], /* Hangul Syllable */ + ["\uD3B2", "\uD3B2"], /* Hangul Syllable */ + ["\uD3B3", "\uD3B3"], /* Hangul Syllable */ + ["\uD3B4", "\uD3B4"], /* Hangul Syllable */ + ["\uD3B5", "\uD3B5"], /* Hangul Syllable */ + ["\uD3B6", "\uD3B6"], /* Hangul Syllable */ + ["\uD3B7", "\uD3B7"], /* Hangul Syllable */ + ["\uD3B8", "\uD3B8"], /* Hangul Syllable */ + ["\uD3B9", "\uD3B9"], /* Hangul Syllable */ + ["\uD3BA", "\uD3BA"], /* Hangul Syllable */ + ["\uD3BB", "\uD3BB"], /* Hangul Syllable */ + ["\uD3BC", "\uD3BC"], /* Hangul Syllable */ + ["\uD3BD", "\uD3BD"], /* Hangul Syllable */ + ["\uD3BE", "\uD3BE"], /* Hangul Syllable */ + ["\uD3BF", "\uD3BF"], /* Hangul Syllable */ + ["\uD3C0", "\uD3C0"], /* Hangul Syllable */ + ["\uD3C1", "\uD3C1"], /* Hangul Syllable */ + ["\uD3C2", "\uD3C2"], /* Hangul Syllable */ + ["\uD3C3", "\uD3C3"], /* Hangul Syllable */ + ["\uD3C4", "\uD3C4"], /* Hangul Syllable */ + ["\uD3C5", "\uD3C5"], /* Hangul Syllable */ + ["\uD3C6", "\uD3C6"], /* Hangul Syllable */ + ["\uD3C7", "\uD3C7"], /* Hangul Syllable */ + ["\uD3C8", "\uD3C8"], /* Hangul Syllable */ + ["\uD3C9", "\uD3C9"], /* Hangul Syllable */ + ["\uD3CA", "\uD3CA"], /* Hangul Syllable */ + ["\uD3CB", "\uD3CB"], /* Hangul Syllable */ + ["\uD3CC", "\uD3CC"], /* Hangul Syllable */ + ["\uD3CD", "\uD3CD"], /* Hangul Syllable */ + ["\uD3CE", "\uD3CE"], /* Hangul Syllable */ + ["\uD3CF", "\uD3CF"], /* Hangul Syllable */ + ["\uD3D0", "\uD3D0"], /* Hangul Syllable */ + ["\uD3D1", "\uD3D1"], /* Hangul Syllable */ + ["\uD3D2", "\uD3D2"], /* Hangul Syllable */ + ["\uD3D3", "\uD3D3"], /* Hangul Syllable */ + ["\uD3D4", "\uD3D4"], /* Hangul Syllable */ + ["\uD3D5", "\uD3D5"], /* Hangul Syllable */ + ["\uD3D6", "\uD3D6"], /* Hangul Syllable */ + ["\uD3D7", "\uD3D7"], /* Hangul Syllable */ + ["\uD3D8", "\uD3D8"], /* Hangul Syllable */ + ["\uD3D9", "\uD3D9"], /* Hangul Syllable */ + ["\uD3DA", "\uD3DA"], /* Hangul Syllable */ + ["\uD3DB", "\uD3DB"], /* Hangul Syllable */ + ["\uD3DC", "\uD3DC"], /* Hangul Syllable */ + ["\uD3DD", "\uD3DD"], /* Hangul Syllable */ + ["\uD3DE", "\uD3DE"], /* Hangul Syllable */ + ["\uD3DF", "\uD3DF"], /* Hangul Syllable */ + ["\uD3E0", "\uD3E0"], /* Hangul Syllable */ + ["\uD3E1", "\uD3E1"], /* Hangul Syllable */ + ["\uD3E2", "\uD3E2"], /* Hangul Syllable */ + ["\uD3E3", "\uD3E3"], /* Hangul Syllable */ + ["\uD3E4", "\uD3E4"], /* Hangul Syllable */ + ["\uD3E5", "\uD3E5"], /* Hangul Syllable */ + ["\uD3E6", "\uD3E6"], /* Hangul Syllable */ + ["\uD3E7", "\uD3E7"], /* Hangul Syllable */ + ["\uD3E8", "\uD3E8"], /* Hangul Syllable */ + ["\uD3E9", "\uD3E9"], /* Hangul Syllable */ + ["\uD3EA", "\uD3EA"], /* Hangul Syllable */ + ["\uD3EB", "\uD3EB"], /* Hangul Syllable */ + ["\uD3EC", "\uD3EC"], /* Hangul Syllable */ + ["\uD3ED", "\uD3ED"], /* Hangul Syllable */ + ["\uD3EE", "\uD3EE"], /* Hangul Syllable */ + ["\uD3EF", "\uD3EF"], /* Hangul Syllable */ + ["\uD3F0", "\uD3F0"], /* Hangul Syllable */ + ["\uD3F1", "\uD3F1"], /* Hangul Syllable */ + ["\uD3F2", "\uD3F2"], /* Hangul Syllable */ + ["\uD3F3", "\uD3F3"], /* Hangul Syllable */ + ["\uD3F4", "\uD3F4"], /* Hangul Syllable */ + ["\uD3F5", "\uD3F5"], /* Hangul Syllable */ + ["\uD3F6", "\uD3F6"], /* Hangul Syllable */ + ["\uD3F7", "\uD3F7"], /* Hangul Syllable */ + ["\uD3F8", "\uD3F8"], /* Hangul Syllable */ + ["\uD3F9", "\uD3F9"], /* Hangul Syllable */ + ["\uD3FA", "\uD3FA"], /* Hangul Syllable */ + ["\uD3FB", "\uD3FB"], /* Hangul Syllable */ + ["\uD3FC", "\uD3FC"], /* Hangul Syllable */ + ["\uD3FD", "\uD3FD"], /* Hangul Syllable */ + ["\uD3FE", "\uD3FE"], /* Hangul Syllable */ + ["\uD3FF", "\uD3FF"], /* Hangul Syllable */ + ["\uD400", "\uD400"], /* Hangul Syllable */ + ["\uD401", "\uD401"], /* Hangul Syllable */ + ["\uD402", "\uD402"], /* Hangul Syllable */ + ["\uD403", "\uD403"], /* Hangul Syllable */ + ["\uD404", "\uD404"], /* Hangul Syllable */ + ["\uD405", "\uD405"], /* Hangul Syllable */ + ["\uD406", "\uD406"], /* Hangul Syllable */ + ["\uD407", "\uD407"], /* Hangul Syllable */ + ["\uD408", "\uD408"], /* Hangul Syllable */ + ["\uD409", "\uD409"], /* Hangul Syllable */ + ["\uD40A", "\uD40A"], /* Hangul Syllable */ + ["\uD40B", "\uD40B"], /* Hangul Syllable */ + ["\uD40C", "\uD40C"], /* Hangul Syllable */ + ["\uD40D", "\uD40D"], /* Hangul Syllable */ + ["\uD40E", "\uD40E"], /* Hangul Syllable */ + ["\uD40F", "\uD40F"], /* Hangul Syllable */ + ["\uD410", "\uD410"], /* Hangul Syllable */ + ["\uD411", "\uD411"], /* Hangul Syllable */ + ["\uD412", "\uD412"], /* Hangul Syllable */ + ["\uD413", "\uD413"], /* Hangul Syllable */ + ["\uD414", "\uD414"], /* Hangul Syllable */ + ["\uD415", "\uD415"], /* Hangul Syllable */ + ["\uD416", "\uD416"], /* Hangul Syllable */ + ["\uD417", "\uD417"], /* Hangul Syllable */ + ["\uD418", "\uD418"], /* Hangul Syllable */ + ["\uD419", "\uD419"], /* Hangul Syllable */ + ["\uD41A", "\uD41A"], /* Hangul Syllable */ + ["\uD41B", "\uD41B"], /* Hangul Syllable */ + ["\uD41C", "\uD41C"], /* Hangul Syllable */ + ["\uD41D", "\uD41D"], /* Hangul Syllable */ + ["\uD41E", "\uD41E"], /* Hangul Syllable */ + ["\uD41F", "\uD41F"], /* Hangul Syllable */ + ["\uD420", "\uD420"], /* Hangul Syllable */ + ["\uD421", "\uD421"], /* Hangul Syllable */ + ["\uD422", "\uD422"], /* Hangul Syllable */ + ["\uD423", "\uD423"], /* Hangul Syllable */ + ["\uD424", "\uD424"], /* Hangul Syllable */ + ["\uD425", "\uD425"], /* Hangul Syllable */ + ["\uD426", "\uD426"], /* Hangul Syllable */ + ["\uD427", "\uD427"], /* Hangul Syllable */ + ["\uD428", "\uD428"], /* Hangul Syllable */ + ["\uD429", "\uD429"], /* Hangul Syllable */ + ["\uD42A", "\uD42A"], /* Hangul Syllable */ + ["\uD42B", "\uD42B"], /* Hangul Syllable */ + ["\uD42C", "\uD42C"], /* Hangul Syllable */ + ["\uD42D", "\uD42D"], /* Hangul Syllable */ + ["\uD42E", "\uD42E"], /* Hangul Syllable */ + ["\uD42F", "\uD42F"], /* Hangul Syllable */ + ["\uD430", "\uD430"], /* Hangul Syllable */ + ["\uD431", "\uD431"], /* Hangul Syllable */ + ["\uD432", "\uD432"], /* Hangul Syllable */ + ["\uD433", "\uD433"], /* Hangul Syllable */ + ["\uD434", "\uD434"], /* Hangul Syllable */ + ["\uD435", "\uD435"], /* Hangul Syllable */ + ["\uD436", "\uD436"], /* Hangul Syllable */ + ["\uD437", "\uD437"], /* Hangul Syllable */ + ["\uD438", "\uD438"], /* Hangul Syllable */ + ["\uD439", "\uD439"], /* Hangul Syllable */ + ["\uD43A", "\uD43A"], /* Hangul Syllable */ + ["\uD43B", "\uD43B"], /* Hangul Syllable */ + ["\uD43C", "\uD43C"], /* Hangul Syllable */ + ["\uD43D", "\uD43D"], /* Hangul Syllable */ + ["\uD43E", "\uD43E"], /* Hangul Syllable */ + ["\uD43F", "\uD43F"], /* Hangul Syllable */ + ["\uD440", "\uD440"], /* Hangul Syllable */ + ["\uD441", "\uD441"], /* Hangul Syllable */ + ["\uD442", "\uD442"], /* Hangul Syllable */ + ["\uD443", "\uD443"], /* Hangul Syllable */ + ["\uD444", "\uD444"], /* Hangul Syllable */ + ["\uD445", "\uD445"], /* Hangul Syllable */ + ["\uD446", "\uD446"], /* Hangul Syllable */ + ["\uD447", "\uD447"], /* Hangul Syllable */ + ["\uD448", "\uD448"], /* Hangul Syllable */ + ["\uD449", "\uD449"], /* Hangul Syllable */ + ["\uD44A", "\uD44A"], /* Hangul Syllable */ + ["\uD44B", "\uD44B"], /* Hangul Syllable */ + ["\uD44C", "\uD44C"], /* Hangul Syllable */ + ["\uD44D", "\uD44D"], /* Hangul Syllable */ + ["\uD44E", "\uD44E"], /* Hangul Syllable */ + ["\uD44F", "\uD44F"], /* Hangul Syllable */ + ["\uD450", "\uD450"], /* Hangul Syllable */ + ["\uD451", "\uD451"], /* Hangul Syllable */ + ["\uD452", "\uD452"], /* Hangul Syllable */ + ["\uD453", "\uD453"], /* Hangul Syllable */ + ["\uD454", "\uD454"], /* Hangul Syllable */ + ["\uD455", "\uD455"], /* Hangul Syllable */ + ["\uD456", "\uD456"], /* Hangul Syllable */ + ["\uD457", "\uD457"], /* Hangul Syllable */ + ["\uD458", "\uD458"], /* Hangul Syllable */ + ["\uD459", "\uD459"], /* Hangul Syllable */ + ["\uD45A", "\uD45A"], /* Hangul Syllable */ + ["\uD45B", "\uD45B"], /* Hangul Syllable */ + ["\uD45C", "\uD45C"], /* Hangul Syllable */ + ["\uD45D", "\uD45D"], /* Hangul Syllable */ + ["\uD45E", "\uD45E"], /* Hangul Syllable */ + ["\uD45F", "\uD45F"], /* Hangul Syllable */ + ["\uD460", "\uD460"], /* Hangul Syllable */ + ["\uD461", "\uD461"], /* Hangul Syllable */ + ["\uD462", "\uD462"], /* Hangul Syllable */ + ["\uD463", "\uD463"], /* Hangul Syllable */ + ["\uD464", "\uD464"], /* Hangul Syllable */ + ["\uD465", "\uD465"], /* Hangul Syllable */ + ["\uD466", "\uD466"], /* Hangul Syllable */ + ["\uD467", "\uD467"], /* Hangul Syllable */ + ["\uD468", "\uD468"], /* Hangul Syllable */ + ["\uD469", "\uD469"], /* Hangul Syllable */ + ["\uD46A", "\uD46A"], /* Hangul Syllable */ + ["\uD46B", "\uD46B"], /* Hangul Syllable */ + ["\uD46C", "\uD46C"], /* Hangul Syllable */ + ["\uD46D", "\uD46D"], /* Hangul Syllable */ + ["\uD46E", "\uD46E"], /* Hangul Syllable */ + ["\uD46F", "\uD46F"], /* Hangul Syllable */ + ["\uD470", "\uD470"], /* Hangul Syllable */ + ["\uD471", "\uD471"], /* Hangul Syllable */ + ["\uD472", "\uD472"], /* Hangul Syllable */ + ["\uD473", "\uD473"], /* Hangul Syllable */ + ["\uD474", "\uD474"], /* Hangul Syllable */ + ["\uD475", "\uD475"], /* Hangul Syllable */ + ["\uD476", "\uD476"], /* Hangul Syllable */ + ["\uD477", "\uD477"], /* Hangul Syllable */ + ["\uD478", "\uD478"], /* Hangul Syllable */ + ["\uD479", "\uD479"], /* Hangul Syllable */ + ["\uD47A", "\uD47A"], /* Hangul Syllable */ + ["\uD47B", "\uD47B"], /* Hangul Syllable */ + ["\uD47C", "\uD47C"], /* Hangul Syllable */ + ["\uD47D", "\uD47D"], /* Hangul Syllable */ + ["\uD47E", "\uD47E"], /* Hangul Syllable */ + ["\uD47F", "\uD47F"], /* Hangul Syllable */ + ["\uD480", "\uD480"], /* Hangul Syllable */ + ["\uD481", "\uD481"], /* Hangul Syllable */ + ["\uD482", "\uD482"], /* Hangul Syllable */ + ["\uD483", "\uD483"], /* Hangul Syllable */ + ["\uD484", "\uD484"], /* Hangul Syllable */ + ["\uD485", "\uD485"], /* Hangul Syllable */ + ["\uD486", "\uD486"], /* Hangul Syllable */ + ["\uD487", "\uD487"], /* Hangul Syllable */ + ["\uD488", "\uD488"], /* Hangul Syllable */ + ["\uD489", "\uD489"], /* Hangul Syllable */ + ["\uD48A", "\uD48A"], /* Hangul Syllable */ + ["\uD48B", "\uD48B"], /* Hangul Syllable */ + ["\uD48C", "\uD48C"], /* Hangul Syllable */ + ["\uD48D", "\uD48D"], /* Hangul Syllable */ + ["\uD48E", "\uD48E"], /* Hangul Syllable */ + ["\uD48F", "\uD48F"], /* Hangul Syllable */ + ["\uD490", "\uD490"], /* Hangul Syllable */ + ["\uD491", "\uD491"], /* Hangul Syllable */ + ["\uD492", "\uD492"], /* Hangul Syllable */ + ["\uD493", "\uD493"], /* Hangul Syllable */ + ["\uD494", "\uD494"], /* Hangul Syllable */ + ["\uD495", "\uD495"], /* Hangul Syllable */ + ["\uD496", "\uD496"], /* Hangul Syllable */ + ["\uD497", "\uD497"], /* Hangul Syllable */ + ["\uD498", "\uD498"], /* Hangul Syllable */ + ["\uD499", "\uD499"], /* Hangul Syllable */ + ["\uD49A", "\uD49A"], /* Hangul Syllable */ + ["\uD49B", "\uD49B"], /* Hangul Syllable */ + ["\uD49C", "\uD49C"], /* Hangul Syllable */ + ["\uD49D", "\uD49D"], /* Hangul Syllable */ + ["\uD49E", "\uD49E"], /* Hangul Syllable */ + ["\uD49F", "\uD49F"], /* Hangul Syllable */ + ["\uD4A0", "\uD4A0"], /* Hangul Syllable */ + ["\uD4A1", "\uD4A1"], /* Hangul Syllable */ + ["\uD4A2", "\uD4A2"], /* Hangul Syllable */ + ["\uD4A3", "\uD4A3"], /* Hangul Syllable */ + ["\uD4A4", "\uD4A4"], /* Hangul Syllable */ + ["\uD4A5", "\uD4A5"], /* Hangul Syllable */ + ["\uD4A6", "\uD4A6"], /* Hangul Syllable */ + ["\uD4A7", "\uD4A7"], /* Hangul Syllable */ + ["\uD4A8", "\uD4A8"], /* Hangul Syllable */ + ["\uD4A9", "\uD4A9"], /* Hangul Syllable */ + ["\uD4AA", "\uD4AA"], /* Hangul Syllable */ + ["\uD4AB", "\uD4AB"], /* Hangul Syllable */ + ["\uD4AC", "\uD4AC"], /* Hangul Syllable */ + ["\uD4AD", "\uD4AD"], /* Hangul Syllable */ + ["\uD4AE", "\uD4AE"], /* Hangul Syllable */ + ["\uD4AF", "\uD4AF"], /* Hangul Syllable */ + ["\uD4B0", "\uD4B0"], /* Hangul Syllable */ + ["\uD4B1", "\uD4B1"], /* Hangul Syllable */ + ["\uD4B2", "\uD4B2"], /* Hangul Syllable */ + ["\uD4B3", "\uD4B3"], /* Hangul Syllable */ + ["\uD4B4", "\uD4B4"], /* Hangul Syllable */ + ["\uD4B5", "\uD4B5"], /* Hangul Syllable */ + ["\uD4B6", "\uD4B6"], /* Hangul Syllable */ + ["\uD4B7", "\uD4B7"], /* Hangul Syllable */ + ["\uD4B8", "\uD4B8"], /* Hangul Syllable */ + ["\uD4B9", "\uD4B9"], /* Hangul Syllable */ + ["\uD4BA", "\uD4BA"], /* Hangul Syllable */ + ["\uD4BB", "\uD4BB"], /* Hangul Syllable */ + ["\uD4BC", "\uD4BC"], /* Hangul Syllable */ + ["\uD4BD", "\uD4BD"], /* Hangul Syllable */ + ["\uD4BE", "\uD4BE"], /* Hangul Syllable */ + ["\uD4BF", "\uD4BF"], /* Hangul Syllable */ + ["\uD4C0", "\uD4C0"], /* Hangul Syllable */ + ["\uD4C1", "\uD4C1"], /* Hangul Syllable */ + ["\uD4C2", "\uD4C2"], /* Hangul Syllable */ + ["\uD4C3", "\uD4C3"], /* Hangul Syllable */ + ["\uD4C4", "\uD4C4"], /* Hangul Syllable */ + ["\uD4C5", "\uD4C5"], /* Hangul Syllable */ + ["\uD4C6", "\uD4C6"], /* Hangul Syllable */ + ["\uD4C7", "\uD4C7"], /* Hangul Syllable */ + ["\uD4C8", "\uD4C8"], /* Hangul Syllable */ + ["\uD4C9", "\uD4C9"], /* Hangul Syllable */ + ["\uD4CA", "\uD4CA"], /* Hangul Syllable */ + ["\uD4CB", "\uD4CB"], /* Hangul Syllable */ + ["\uD4CC", "\uD4CC"], /* Hangul Syllable */ + ["\uD4CD", "\uD4CD"], /* Hangul Syllable */ + ["\uD4CE", "\uD4CE"], /* Hangul Syllable */ + ["\uD4CF", "\uD4CF"], /* Hangul Syllable */ + ["\uD4D0", "\uD4D0"], /* Hangul Syllable */ + ["\uD4D1", "\uD4D1"], /* Hangul Syllable */ + ["\uD4D2", "\uD4D2"], /* Hangul Syllable */ + ["\uD4D3", "\uD4D3"], /* Hangul Syllable */ + ["\uD4D4", "\uD4D4"], /* Hangul Syllable */ + ["\uD4D5", "\uD4D5"], /* Hangul Syllable */ + ["\uD4D6", "\uD4D6"], /* Hangul Syllable */ + ["\uD4D7", "\uD4D7"], /* Hangul Syllable */ + ["\uD4D8", "\uD4D8"], /* Hangul Syllable */ + ["\uD4D9", "\uD4D9"], /* Hangul Syllable */ + ["\uD4DA", "\uD4DA"], /* Hangul Syllable */ + ["\uD4DB", "\uD4DB"], /* Hangul Syllable */ + ["\uD4DC", "\uD4DC"], /* Hangul Syllable */ + ["\uD4DD", "\uD4DD"], /* Hangul Syllable */ + ["\uD4DE", "\uD4DE"], /* Hangul Syllable */ + ["\uD4DF", "\uD4DF"], /* Hangul Syllable */ + ["\uD4E0", "\uD4E0"], /* Hangul Syllable */ + ["\uD4E1", "\uD4E1"], /* Hangul Syllable */ + ["\uD4E2", "\uD4E2"], /* Hangul Syllable */ + ["\uD4E3", "\uD4E3"], /* Hangul Syllable */ + ["\uD4E4", "\uD4E4"], /* Hangul Syllable */ + ["\uD4E5", "\uD4E5"], /* Hangul Syllable */ + ["\uD4E6", "\uD4E6"], /* Hangul Syllable */ + ["\uD4E7", "\uD4E7"], /* Hangul Syllable */ + ["\uD4E8", "\uD4E8"], /* Hangul Syllable */ + ["\uD4E9", "\uD4E9"], /* Hangul Syllable */ + ["\uD4EA", "\uD4EA"], /* Hangul Syllable */ + ["\uD4EB", "\uD4EB"], /* Hangul Syllable */ + ["\uD4EC", "\uD4EC"], /* Hangul Syllable */ + ["\uD4ED", "\uD4ED"], /* Hangul Syllable */ + ["\uD4EE", "\uD4EE"], /* Hangul Syllable */ + ["\uD4EF", "\uD4EF"], /* Hangul Syllable */ + ["\uD4F0", "\uD4F0"], /* Hangul Syllable */ + ["\uD4F1", "\uD4F1"], /* Hangul Syllable */ + ["\uD4F2", "\uD4F2"], /* Hangul Syllable */ + ["\uD4F3", "\uD4F3"], /* Hangul Syllable */ + ["\uD4F4", "\uD4F4"], /* Hangul Syllable */ + ["\uD4F5", "\uD4F5"], /* Hangul Syllable */ + ["\uD4F6", "\uD4F6"], /* Hangul Syllable */ + ["\uD4F7", "\uD4F7"], /* Hangul Syllable */ + ["\uD4F8", "\uD4F8"], /* Hangul Syllable */ + ["\uD4F9", "\uD4F9"], /* Hangul Syllable */ + ["\uD4FA", "\uD4FA"], /* Hangul Syllable */ + ["\uD4FB", "\uD4FB"], /* Hangul Syllable */ + ["\uD4FC", "\uD4FC"], /* Hangul Syllable */ + ["\uD4FD", "\uD4FD"], /* Hangul Syllable */ + ["\uD4FE", "\uD4FE"], /* Hangul Syllable */ + ["\uD4FF", "\uD4FF"], /* Hangul Syllable */ + ["\uD500", "\uD500"], /* Hangul Syllable */ + ["\uD501", "\uD501"], /* Hangul Syllable */ + ["\uD502", "\uD502"], /* Hangul Syllable */ + ["\uD503", "\uD503"], /* Hangul Syllable */ + ["\uD504", "\uD504"], /* Hangul Syllable */ + ["\uD505", "\uD505"], /* Hangul Syllable */ + ["\uD506", "\uD506"], /* Hangul Syllable */ + ["\uD507", "\uD507"], /* Hangul Syllable */ + ["\uD508", "\uD508"], /* Hangul Syllable */ + ["\uD509", "\uD509"], /* Hangul Syllable */ + ["\uD50A", "\uD50A"], /* Hangul Syllable */ + ["\uD50B", "\uD50B"], /* Hangul Syllable */ + ["\uD50C", "\uD50C"], /* Hangul Syllable */ + ["\uD50D", "\uD50D"], /* Hangul Syllable */ + ["\uD50E", "\uD50E"], /* Hangul Syllable */ + ["\uD50F", "\uD50F"], /* Hangul Syllable */ + ["\uD510", "\uD510"], /* Hangul Syllable */ + ["\uD511", "\uD511"], /* Hangul Syllable */ + ["\uD512", "\uD512"], /* Hangul Syllable */ + ["\uD513", "\uD513"], /* Hangul Syllable */ + ["\uD514", "\uD514"], /* Hangul Syllable */ + ["\uD515", "\uD515"], /* Hangul Syllable */ + ["\uD516", "\uD516"], /* Hangul Syllable */ + ["\uD517", "\uD517"], /* Hangul Syllable */ + ["\uD518", "\uD518"], /* Hangul Syllable */ + ["\uD519", "\uD519"], /* Hangul Syllable */ + ["\uD51A", "\uD51A"], /* Hangul Syllable */ + ["\uD51B", "\uD51B"], /* Hangul Syllable */ + ["\uD51C", "\uD51C"], /* Hangul Syllable */ + ["\uD51D", "\uD51D"], /* Hangul Syllable */ + ["\uD51E", "\uD51E"], /* Hangul Syllable */ + ["\uD51F", "\uD51F"], /* Hangul Syllable */ + ["\uD520", "\uD520"], /* Hangul Syllable */ + ["\uD521", "\uD521"], /* Hangul Syllable */ + ["\uD522", "\uD522"], /* Hangul Syllable */ + ["\uD523", "\uD523"], /* Hangul Syllable */ + ["\uD524", "\uD524"], /* Hangul Syllable */ + ["\uD525", "\uD525"], /* Hangul Syllable */ + ["\uD526", "\uD526"], /* Hangul Syllable */ + ["\uD527", "\uD527"], /* Hangul Syllable */ + ["\uD528", "\uD528"], /* Hangul Syllable */ + ["\uD529", "\uD529"], /* Hangul Syllable */ + ["\uD52A", "\uD52A"], /* Hangul Syllable */ + ["\uD52B", "\uD52B"], /* Hangul Syllable */ + ["\uD52C", "\uD52C"], /* Hangul Syllable */ + ["\uD52D", "\uD52D"], /* Hangul Syllable */ + ["\uD52E", "\uD52E"], /* Hangul Syllable */ + ["\uD52F", "\uD52F"], /* Hangul Syllable */ + ["\uD530", "\uD530"], /* Hangul Syllable */ + ["\uD531", "\uD531"], /* Hangul Syllable */ + ["\uD532", "\uD532"], /* Hangul Syllable */ + ["\uD533", "\uD533"], /* Hangul Syllable */ + ["\uD534", "\uD534"], /* Hangul Syllable */ + ["\uD535", "\uD535"], /* Hangul Syllable */ + ["\uD536", "\uD536"], /* Hangul Syllable */ + ["\uD537", "\uD537"], /* Hangul Syllable */ + ["\uD538", "\uD538"], /* Hangul Syllable */ + ["\uD539", "\uD539"], /* Hangul Syllable */ + ["\uD53A", "\uD53A"], /* Hangul Syllable */ + ["\uD53B", "\uD53B"], /* Hangul Syllable */ + ["\uD53C", "\uD53C"], /* Hangul Syllable */ + ["\uD53D", "\uD53D"], /* Hangul Syllable */ + ["\uD53E", "\uD53E"], /* Hangul Syllable */ + ["\uD53F", "\uD53F"], /* Hangul Syllable */ + ["\uD540", "\uD540"], /* Hangul Syllable */ + ["\uD541", "\uD541"], /* Hangul Syllable */ + ["\uD542", "\uD542"], /* Hangul Syllable */ + ["\uD543", "\uD543"], /* Hangul Syllable */ + ["\uD544", "\uD544"], /* Hangul Syllable */ + ["\uD545", "\uD545"], /* Hangul Syllable */ + ["\uD546", "\uD546"], /* Hangul Syllable */ + ["\uD547", "\uD547"], /* Hangul Syllable */ + ["\uD548", "\uD548"], /* Hangul Syllable */ + ["\uD549", "\uD549"], /* Hangul Syllable */ + ["\uD54A", "\uD54A"], /* Hangul Syllable */ + ["\uD54B", "\uD54B"], /* Hangul Syllable */ + ["\uD54C", "\uD54C"], /* Hangul Syllable */ + ["\uD54D", "\uD54D"], /* Hangul Syllable */ + ["\uD54E", "\uD54E"], /* Hangul Syllable */ + ["\uD54F", "\uD54F"], /* Hangul Syllable */ + ["\uD550", "\uD550"], /* Hangul Syllable */ + ["\uD551", "\uD551"], /* Hangul Syllable */ + ["\uD552", "\uD552"], /* Hangul Syllable */ + ["\uD553", "\uD553"], /* Hangul Syllable */ + ["\uD554", "\uD554"], /* Hangul Syllable */ + ["\uD555", "\uD555"], /* Hangul Syllable */ + ["\uD556", "\uD556"], /* Hangul Syllable */ + ["\uD557", "\uD557"], /* Hangul Syllable */ + ["\uD558", "\uD558"], /* Hangul Syllable */ + ["\uD559", "\uD559"], /* Hangul Syllable */ + ["\uD55A", "\uD55A"], /* Hangul Syllable */ + ["\uD55B", "\uD55B"], /* Hangul Syllable */ + ["\uD55C", "\uD55C"], /* Hangul Syllable */ + ["\uD55D", "\uD55D"], /* Hangul Syllable */ + ["\uD55E", "\uD55E"], /* Hangul Syllable */ + ["\uD55F", "\uD55F"], /* Hangul Syllable */ + ["\uD560", "\uD560"], /* Hangul Syllable */ + ["\uD561", "\uD561"], /* Hangul Syllable */ + ["\uD562", "\uD562"], /* Hangul Syllable */ + ["\uD563", "\uD563"], /* Hangul Syllable */ + ["\uD564", "\uD564"], /* Hangul Syllable */ + ["\uD565", "\uD565"], /* Hangul Syllable */ + ["\uD566", "\uD566"], /* Hangul Syllable */ + ["\uD567", "\uD567"], /* Hangul Syllable */ + ["\uD568", "\uD568"], /* Hangul Syllable */ + ["\uD569", "\uD569"], /* Hangul Syllable */ + ["\uD56A", "\uD56A"], /* Hangul Syllable */ + ["\uD56B", "\uD56B"], /* Hangul Syllable */ + ["\uD56C", "\uD56C"], /* Hangul Syllable */ + ["\uD56D", "\uD56D"], /* Hangul Syllable */ + ["\uD56E", "\uD56E"], /* Hangul Syllable */ + ["\uD56F", "\uD56F"], /* Hangul Syllable */ + ["\uD570", "\uD570"], /* Hangul Syllable */ + ["\uD571", "\uD571"], /* Hangul Syllable */ + ["\uD572", "\uD572"], /* Hangul Syllable */ + ["\uD573", "\uD573"], /* Hangul Syllable */ + ["\uD574", "\uD574"], /* Hangul Syllable */ + ["\uD575", "\uD575"], /* Hangul Syllable */ + ["\uD576", "\uD576"], /* Hangul Syllable */ + ["\uD577", "\uD577"], /* Hangul Syllable */ + ["\uD578", "\uD578"], /* Hangul Syllable */ + ["\uD579", "\uD579"], /* Hangul Syllable */ + ["\uD57A", "\uD57A"], /* Hangul Syllable */ + ["\uD57B", "\uD57B"], /* Hangul Syllable */ + ["\uD57C", "\uD57C"], /* Hangul Syllable */ + ["\uD57D", "\uD57D"], /* Hangul Syllable */ + ["\uD57E", "\uD57E"], /* Hangul Syllable */ + ["\uD57F", "\uD57F"], /* Hangul Syllable */ + ["\uD580", "\uD580"], /* Hangul Syllable */ + ["\uD581", "\uD581"], /* Hangul Syllable */ + ["\uD582", "\uD582"], /* Hangul Syllable */ + ["\uD583", "\uD583"], /* Hangul Syllable */ + ["\uD584", "\uD584"], /* Hangul Syllable */ + ["\uD585", "\uD585"], /* Hangul Syllable */ + ["\uD586", "\uD586"], /* Hangul Syllable */ + ["\uD587", "\uD587"], /* Hangul Syllable */ + ["\uD588", "\uD588"], /* Hangul Syllable */ + ["\uD589", "\uD589"], /* Hangul Syllable */ + ["\uD58A", "\uD58A"], /* Hangul Syllable */ + ["\uD58B", "\uD58B"], /* Hangul Syllable */ + ["\uD58C", "\uD58C"], /* Hangul Syllable */ + ["\uD58D", "\uD58D"], /* Hangul Syllable */ + ["\uD58E", "\uD58E"], /* Hangul Syllable */ + ["\uD58F", "\uD58F"], /* Hangul Syllable */ + ["\uD590", "\uD590"], /* Hangul Syllable */ + ["\uD591", "\uD591"], /* Hangul Syllable */ + ["\uD592", "\uD592"], /* Hangul Syllable */ + ["\uD593", "\uD593"], /* Hangul Syllable */ + ["\uD594", "\uD594"], /* Hangul Syllable */ + ["\uD595", "\uD595"], /* Hangul Syllable */ + ["\uD596", "\uD596"], /* Hangul Syllable */ + ["\uD597", "\uD597"], /* Hangul Syllable */ + ["\uD598", "\uD598"], /* Hangul Syllable */ + ["\uD599", "\uD599"], /* Hangul Syllable */ + ["\uD59A", "\uD59A"], /* Hangul Syllable */ + ["\uD59B", "\uD59B"], /* Hangul Syllable */ + ["\uD59C", "\uD59C"], /* Hangul Syllable */ + ["\uD59D", "\uD59D"], /* Hangul Syllable */ + ["\uD59E", "\uD59E"], /* Hangul Syllable */ + ["\uD59F", "\uD59F"], /* Hangul Syllable */ + ["\uD5A0", "\uD5A0"], /* Hangul Syllable */ + ["\uD5A1", "\uD5A1"], /* Hangul Syllable */ + ["\uD5A2", "\uD5A2"], /* Hangul Syllable */ + ["\uD5A3", "\uD5A3"], /* Hangul Syllable */ + ["\uD5A4", "\uD5A4"], /* Hangul Syllable */ + ["\uD5A5", "\uD5A5"], /* Hangul Syllable */ + ["\uD5A6", "\uD5A6"], /* Hangul Syllable */ + ["\uD5A7", "\uD5A7"], /* Hangul Syllable */ + ["\uD5A8", "\uD5A8"], /* Hangul Syllable */ + ["\uD5A9", "\uD5A9"], /* Hangul Syllable */ + ["\uD5AA", "\uD5AA"], /* Hangul Syllable */ + ["\uD5AB", "\uD5AB"], /* Hangul Syllable */ + ["\uD5AC", "\uD5AC"], /* Hangul Syllable */ + ["\uD5AD", "\uD5AD"], /* Hangul Syllable */ + ["\uD5AE", "\uD5AE"], /* Hangul Syllable */ + ["\uD5AF", "\uD5AF"], /* Hangul Syllable */ + ["\uD5B0", "\uD5B0"], /* Hangul Syllable */ + ["\uD5B1", "\uD5B1"], /* Hangul Syllable */ + ["\uD5B2", "\uD5B2"], /* Hangul Syllable */ + ["\uD5B3", "\uD5B3"], /* Hangul Syllable */ + ["\uD5B4", "\uD5B4"], /* Hangul Syllable */ + ["\uD5B5", "\uD5B5"], /* Hangul Syllable */ + ["\uD5B6", "\uD5B6"], /* Hangul Syllable */ + ["\uD5B7", "\uD5B7"], /* Hangul Syllable */ + ["\uD5B8", "\uD5B8"], /* Hangul Syllable */ + ["\uD5B9", "\uD5B9"], /* Hangul Syllable */ + ["\uD5BA", "\uD5BA"], /* Hangul Syllable */ + ["\uD5BB", "\uD5BB"], /* Hangul Syllable */ + ["\uD5BC", "\uD5BC"], /* Hangul Syllable */ + ["\uD5BD", "\uD5BD"], /* Hangul Syllable */ + ["\uD5BE", "\uD5BE"], /* Hangul Syllable */ + ["\uD5BF", "\uD5BF"], /* Hangul Syllable */ + ["\uD5C0", "\uD5C0"], /* Hangul Syllable */ + ["\uD5C1", "\uD5C1"], /* Hangul Syllable */ + ["\uD5C2", "\uD5C2"], /* Hangul Syllable */ + ["\uD5C3", "\uD5C3"], /* Hangul Syllable */ + ["\uD5C4", "\uD5C4"], /* Hangul Syllable */ + ["\uD5C5", "\uD5C5"], /* Hangul Syllable */ + ["\uD5C6", "\uD5C6"], /* Hangul Syllable */ + ["\uD5C7", "\uD5C7"], /* Hangul Syllable */ + ["\uD5C8", "\uD5C8"], /* Hangul Syllable */ + ["\uD5C9", "\uD5C9"], /* Hangul Syllable */ + ["\uD5CA", "\uD5CA"], /* Hangul Syllable */ + ["\uD5CB", "\uD5CB"], /* Hangul Syllable */ + ["\uD5CC", "\uD5CC"], /* Hangul Syllable */ + ["\uD5CD", "\uD5CD"], /* Hangul Syllable */ + ["\uD5CE", "\uD5CE"], /* Hangul Syllable */ + ["\uD5CF", "\uD5CF"], /* Hangul Syllable */ + ["\uD5D0", "\uD5D0"], /* Hangul Syllable */ + ["\uD5D1", "\uD5D1"], /* Hangul Syllable */ + ["\uD5D2", "\uD5D2"], /* Hangul Syllable */ + ["\uD5D3", "\uD5D3"], /* Hangul Syllable */ + ["\uD5D4", "\uD5D4"], /* Hangul Syllable */ + ["\uD5D5", "\uD5D5"], /* Hangul Syllable */ + ["\uD5D6", "\uD5D6"], /* Hangul Syllable */ + ["\uD5D7", "\uD5D7"], /* Hangul Syllable */ + ["\uD5D8", "\uD5D8"], /* Hangul Syllable */ + ["\uD5D9", "\uD5D9"], /* Hangul Syllable */ + ["\uD5DA", "\uD5DA"], /* Hangul Syllable */ + ["\uD5DB", "\uD5DB"], /* Hangul Syllable */ + ["\uD5DC", "\uD5DC"], /* Hangul Syllable */ + ["\uD5DD", "\uD5DD"], /* Hangul Syllable */ + ["\uD5DE", "\uD5DE"], /* Hangul Syllable */ + ["\uD5DF", "\uD5DF"], /* Hangul Syllable */ + ["\uD5E0", "\uD5E0"], /* Hangul Syllable */ + ["\uD5E1", "\uD5E1"], /* Hangul Syllable */ + ["\uD5E2", "\uD5E2"], /* Hangul Syllable */ + ["\uD5E3", "\uD5E3"], /* Hangul Syllable */ + ["\uD5E4", "\uD5E4"], /* Hangul Syllable */ + ["\uD5E5", "\uD5E5"], /* Hangul Syllable */ + ["\uD5E6", "\uD5E6"], /* Hangul Syllable */ + ["\uD5E7", "\uD5E7"], /* Hangul Syllable */ + ["\uD5E8", "\uD5E8"], /* Hangul Syllable */ + ["\uD5E9", "\uD5E9"], /* Hangul Syllable */ + ["\uD5EA", "\uD5EA"], /* Hangul Syllable */ + ["\uD5EB", "\uD5EB"], /* Hangul Syllable */ + ["\uD5EC", "\uD5EC"], /* Hangul Syllable */ + ["\uD5ED", "\uD5ED"], /* Hangul Syllable */ + ["\uD5EE", "\uD5EE"], /* Hangul Syllable */ + ["\uD5EF", "\uD5EF"], /* Hangul Syllable */ + ["\uD5F0", "\uD5F0"], /* Hangul Syllable */ + ["\uD5F1", "\uD5F1"], /* Hangul Syllable */ + ["\uD5F2", "\uD5F2"], /* Hangul Syllable */ + ["\uD5F3", "\uD5F3"], /* Hangul Syllable */ + ["\uD5F4", "\uD5F4"], /* Hangul Syllable */ + ["\uD5F5", "\uD5F5"], /* Hangul Syllable */ + ["\uD5F6", "\uD5F6"], /* Hangul Syllable */ + ["\uD5F7", "\uD5F7"], /* Hangul Syllable */ + ["\uD5F8", "\uD5F8"], /* Hangul Syllable */ + ["\uD5F9", "\uD5F9"], /* Hangul Syllable */ + ["\uD5FA", "\uD5FA"], /* Hangul Syllable */ + ["\uD5FB", "\uD5FB"], /* Hangul Syllable */ + ["\uD5FC", "\uD5FC"], /* Hangul Syllable */ + ["\uD5FD", "\uD5FD"], /* Hangul Syllable */ + ["\uD5FE", "\uD5FE"], /* Hangul Syllable */ + ["\uD5FF", "\uD5FF"], /* Hangul Syllable */ + ["\uD600", "\uD600"], /* Hangul Syllable */ + ["\uD601", "\uD601"], /* Hangul Syllable */ + ["\uD602", "\uD602"], /* Hangul Syllable */ + ["\uD603", "\uD603"], /* Hangul Syllable */ + ["\uD604", "\uD604"], /* Hangul Syllable */ + ["\uD605", "\uD605"], /* Hangul Syllable */ + ["\uD606", "\uD606"], /* Hangul Syllable */ + ["\uD607", "\uD607"], /* Hangul Syllable */ + ["\uD608", "\uD608"], /* Hangul Syllable */ + ["\uD609", "\uD609"], /* Hangul Syllable */ + ["\uD60A", "\uD60A"], /* Hangul Syllable */ + ["\uD60B", "\uD60B"], /* Hangul Syllable */ + ["\uD60C", "\uD60C"], /* Hangul Syllable */ + ["\uD60D", "\uD60D"], /* Hangul Syllable */ + ["\uD60E", "\uD60E"], /* Hangul Syllable */ + ["\uD60F", "\uD60F"], /* Hangul Syllable */ + ["\uD610", "\uD610"], /* Hangul Syllable */ + ["\uD611", "\uD611"], /* Hangul Syllable */ + ["\uD612", "\uD612"], /* Hangul Syllable */ + ["\uD613", "\uD613"], /* Hangul Syllable */ + ["\uD614", "\uD614"], /* Hangul Syllable */ + ["\uD615", "\uD615"], /* Hangul Syllable */ + ["\uD616", "\uD616"], /* Hangul Syllable */ + ["\uD617", "\uD617"], /* Hangul Syllable */ + ["\uD618", "\uD618"], /* Hangul Syllable */ + ["\uD619", "\uD619"], /* Hangul Syllable */ + ["\uD61A", "\uD61A"], /* Hangul Syllable */ + ["\uD61B", "\uD61B"], /* Hangul Syllable */ + ["\uD61C", "\uD61C"], /* Hangul Syllable */ + ["\uD61D", "\uD61D"], /* Hangul Syllable */ + ["\uD61E", "\uD61E"], /* Hangul Syllable */ + ["\uD61F", "\uD61F"], /* Hangul Syllable */ + ["\uD620", "\uD620"], /* Hangul Syllable */ + ["\uD621", "\uD621"], /* Hangul Syllable */ + ["\uD622", "\uD622"], /* Hangul Syllable */ + ["\uD623", "\uD623"], /* Hangul Syllable */ + ["\uD624", "\uD624"], /* Hangul Syllable */ + ["\uD625", "\uD625"], /* Hangul Syllable */ + ["\uD626", "\uD626"], /* Hangul Syllable */ + ["\uD627", "\uD627"], /* Hangul Syllable */ + ["\uD628", "\uD628"], /* Hangul Syllable */ + ["\uD629", "\uD629"], /* Hangul Syllable */ + ["\uD62A", "\uD62A"], /* Hangul Syllable */ + ["\uD62B", "\uD62B"], /* Hangul Syllable */ + ["\uD62C", "\uD62C"], /* Hangul Syllable */ + ["\uD62D", "\uD62D"], /* Hangul Syllable */ + ["\uD62E", "\uD62E"], /* Hangul Syllable */ + ["\uD62F", "\uD62F"], /* Hangul Syllable */ + ["\uD630", "\uD630"], /* Hangul Syllable */ + ["\uD631", "\uD631"], /* Hangul Syllable */ + ["\uD632", "\uD632"], /* Hangul Syllable */ + ["\uD633", "\uD633"], /* Hangul Syllable */ + ["\uD634", "\uD634"], /* Hangul Syllable */ + ["\uD635", "\uD635"], /* Hangul Syllable */ + ["\uD636", "\uD636"], /* Hangul Syllable */ + ["\uD637", "\uD637"], /* Hangul Syllable */ + ["\uD638", "\uD638"], /* Hangul Syllable */ + ["\uD639", "\uD639"], /* Hangul Syllable */ + ["\uD63A", "\uD63A"], /* Hangul Syllable */ + ["\uD63B", "\uD63B"], /* Hangul Syllable */ + ["\uD63C", "\uD63C"], /* Hangul Syllable */ + ["\uD63D", "\uD63D"], /* Hangul Syllable */ + ["\uD63E", "\uD63E"], /* Hangul Syllable */ + ["\uD63F", "\uD63F"], /* Hangul Syllable */ + ["\uD640", "\uD640"], /* Hangul Syllable */ + ["\uD641", "\uD641"], /* Hangul Syllable */ + ["\uD642", "\uD642"], /* Hangul Syllable */ + ["\uD643", "\uD643"], /* Hangul Syllable */ + ["\uD644", "\uD644"], /* Hangul Syllable */ + ["\uD645", "\uD645"], /* Hangul Syllable */ + ["\uD646", "\uD646"], /* Hangul Syllable */ + ["\uD647", "\uD647"], /* Hangul Syllable */ + ["\uD648", "\uD648"], /* Hangul Syllable */ + ["\uD649", "\uD649"], /* Hangul Syllable */ + ["\uD64A", "\uD64A"], /* Hangul Syllable */ + ["\uD64B", "\uD64B"], /* Hangul Syllable */ + ["\uD64C", "\uD64C"], /* Hangul Syllable */ + ["\uD64D", "\uD64D"], /* Hangul Syllable */ + ["\uD64E", "\uD64E"], /* Hangul Syllable */ + ["\uD64F", "\uD64F"], /* Hangul Syllable */ + ["\uD650", "\uD650"], /* Hangul Syllable */ + ["\uD651", "\uD651"], /* Hangul Syllable */ + ["\uD652", "\uD652"], /* Hangul Syllable */ + ["\uD653", "\uD653"], /* Hangul Syllable */ + ["\uD654", "\uD654"], /* Hangul Syllable */ + ["\uD655", "\uD655"], /* Hangul Syllable */ + ["\uD656", "\uD656"], /* Hangul Syllable */ + ["\uD657", "\uD657"], /* Hangul Syllable */ + ["\uD658", "\uD658"], /* Hangul Syllable */ + ["\uD659", "\uD659"], /* Hangul Syllable */ + ["\uD65A", "\uD65A"], /* Hangul Syllable */ + ["\uD65B", "\uD65B"], /* Hangul Syllable */ + ["\uD65C", "\uD65C"], /* Hangul Syllable */ + ["\uD65D", "\uD65D"], /* Hangul Syllable */ + ["\uD65E", "\uD65E"], /* Hangul Syllable */ + ["\uD65F", "\uD65F"], /* Hangul Syllable */ + ["\uD660", "\uD660"], /* Hangul Syllable */ + ["\uD661", "\uD661"], /* Hangul Syllable */ + ["\uD662", "\uD662"], /* Hangul Syllable */ + ["\uD663", "\uD663"], /* Hangul Syllable */ + ["\uD664", "\uD664"], /* Hangul Syllable */ + ["\uD665", "\uD665"], /* Hangul Syllable */ + ["\uD666", "\uD666"], /* Hangul Syllable */ + ["\uD667", "\uD667"], /* Hangul Syllable */ + ["\uD668", "\uD668"], /* Hangul Syllable */ + ["\uD669", "\uD669"], /* Hangul Syllable */ + ["\uD66A", "\uD66A"], /* Hangul Syllable */ + ["\uD66B", "\uD66B"], /* Hangul Syllable */ + ["\uD66C", "\uD66C"], /* Hangul Syllable */ + ["\uD66D", "\uD66D"], /* Hangul Syllable */ + ["\uD66E", "\uD66E"], /* Hangul Syllable */ + ["\uD66F", "\uD66F"], /* Hangul Syllable */ + ["\uD670", "\uD670"], /* Hangul Syllable */ + ["\uD671", "\uD671"], /* Hangul Syllable */ + ["\uD672", "\uD672"], /* Hangul Syllable */ + ["\uD673", "\uD673"], /* Hangul Syllable */ + ["\uD674", "\uD674"], /* Hangul Syllable */ + ["\uD675", "\uD675"], /* Hangul Syllable */ + ["\uD676", "\uD676"], /* Hangul Syllable */ + ["\uD677", "\uD677"], /* Hangul Syllable */ + ["\uD678", "\uD678"], /* Hangul Syllable */ + ["\uD679", "\uD679"], /* Hangul Syllable */ + ["\uD67A", "\uD67A"], /* Hangul Syllable */ + ["\uD67B", "\uD67B"], /* Hangul Syllable */ + ["\uD67C", "\uD67C"], /* Hangul Syllable */ + ["\uD67D", "\uD67D"], /* Hangul Syllable */ + ["\uD67E", "\uD67E"], /* Hangul Syllable */ + ["\uD67F", "\uD67F"], /* Hangul Syllable */ + ["\uD680", "\uD680"], /* Hangul Syllable */ + ["\uD681", "\uD681"], /* Hangul Syllable */ + ["\uD682", "\uD682"], /* Hangul Syllable */ + ["\uD683", "\uD683"], /* Hangul Syllable */ + ["\uD684", "\uD684"], /* Hangul Syllable */ + ["\uD685", "\uD685"], /* Hangul Syllable */ + ["\uD686", "\uD686"], /* Hangul Syllable */ + ["\uD687", "\uD687"], /* Hangul Syllable */ + ["\uD688", "\uD688"], /* Hangul Syllable */ + ["\uD689", "\uD689"], /* Hangul Syllable */ + ["\uD68A", "\uD68A"], /* Hangul Syllable */ + ["\uD68B", "\uD68B"], /* Hangul Syllable */ + ["\uD68C", "\uD68C"], /* Hangul Syllable */ + ["\uD68D", "\uD68D"], /* Hangul Syllable */ + ["\uD68E", "\uD68E"], /* Hangul Syllable */ + ["\uD68F", "\uD68F"], /* Hangul Syllable */ + ["\uD690", "\uD690"], /* Hangul Syllable */ + ["\uD691", "\uD691"], /* Hangul Syllable */ + ["\uD692", "\uD692"], /* Hangul Syllable */ + ["\uD693", "\uD693"], /* Hangul Syllable */ + ["\uD694", "\uD694"], /* Hangul Syllable */ + ["\uD695", "\uD695"], /* Hangul Syllable */ + ["\uD696", "\uD696"], /* Hangul Syllable */ + ["\uD697", "\uD697"], /* Hangul Syllable */ + ["\uD698", "\uD698"], /* Hangul Syllable */ + ["\uD699", "\uD699"], /* Hangul Syllable */ + ["\uD69A", "\uD69A"], /* Hangul Syllable */ + ["\uD69B", "\uD69B"], /* Hangul Syllable */ + ["\uD69C", "\uD69C"], /* Hangul Syllable */ + ["\uD69D", "\uD69D"], /* Hangul Syllable */ + ["\uD69E", "\uD69E"], /* Hangul Syllable */ + ["\uD69F", "\uD69F"], /* Hangul Syllable */ + ["\uD6A0", "\uD6A0"], /* Hangul Syllable */ + ["\uD6A1", "\uD6A1"], /* Hangul Syllable */ + ["\uD6A2", "\uD6A2"], /* Hangul Syllable */ + ["\uD6A3", "\uD6A3"], /* Hangul Syllable */ + ["\uD6A4", "\uD6A4"], /* Hangul Syllable */ + ["\uD6A5", "\uD6A5"], /* Hangul Syllable */ + ["\uD6A6", "\uD6A6"], /* Hangul Syllable */ + ["\uD6A7", "\uD6A7"], /* Hangul Syllable */ + ["\uD6A8", "\uD6A8"], /* Hangul Syllable */ + ["\uD6A9", "\uD6A9"], /* Hangul Syllable */ + ["\uD6AA", "\uD6AA"], /* Hangul Syllable */ + ["\uD6AB", "\uD6AB"], /* Hangul Syllable */ + ["\uD6AC", "\uD6AC"], /* Hangul Syllable */ + ["\uD6AD", "\uD6AD"], /* Hangul Syllable */ + ["\uD6AE", "\uD6AE"], /* Hangul Syllable */ + ["\uD6AF", "\uD6AF"], /* Hangul Syllable */ + ["\uD6B0", "\uD6B0"], /* Hangul Syllable */ + ["\uD6B1", "\uD6B1"], /* Hangul Syllable */ + ["\uD6B2", "\uD6B2"], /* Hangul Syllable */ + ["\uD6B3", "\uD6B3"], /* Hangul Syllable */ + ["\uD6B4", "\uD6B4"], /* Hangul Syllable */ + ["\uD6B5", "\uD6B5"], /* Hangul Syllable */ + ["\uD6B6", "\uD6B6"], /* Hangul Syllable */ + ["\uD6B7", "\uD6B7"], /* Hangul Syllable */ + ["\uD6B8", "\uD6B8"], /* Hangul Syllable */ + ["\uD6B9", "\uD6B9"], /* Hangul Syllable */ + ["\uD6BA", "\uD6BA"], /* Hangul Syllable */ + ["\uD6BB", "\uD6BB"], /* Hangul Syllable */ + ["\uD6BC", "\uD6BC"], /* Hangul Syllable */ + ["\uD6BD", "\uD6BD"], /* Hangul Syllable */ + ["\uD6BE", "\uD6BE"], /* Hangul Syllable */ + ["\uD6BF", "\uD6BF"], /* Hangul Syllable */ + ["\uD6C0", "\uD6C0"], /* Hangul Syllable */ + ["\uD6C1", "\uD6C1"], /* Hangul Syllable */ + ["\uD6C2", "\uD6C2"], /* Hangul Syllable */ + ["\uD6C3", "\uD6C3"], /* Hangul Syllable */ + ["\uD6C4", "\uD6C4"], /* Hangul Syllable */ + ["\uD6C5", "\uD6C5"], /* Hangul Syllable */ + ["\uD6C6", "\uD6C6"], /* Hangul Syllable */ + ["\uD6C7", "\uD6C7"], /* Hangul Syllable */ + ["\uD6C8", "\uD6C8"], /* Hangul Syllable */ + ["\uD6C9", "\uD6C9"], /* Hangul Syllable */ + ["\uD6CA", "\uD6CA"], /* Hangul Syllable */ + ["\uD6CB", "\uD6CB"], /* Hangul Syllable */ + ["\uD6CC", "\uD6CC"], /* Hangul Syllable */ + ["\uD6CD", "\uD6CD"], /* Hangul Syllable */ + ["\uD6CE", "\uD6CE"], /* Hangul Syllable */ + ["\uD6CF", "\uD6CF"], /* Hangul Syllable */ + ["\uD6D0", "\uD6D0"], /* Hangul Syllable */ + ["\uD6D1", "\uD6D1"], /* Hangul Syllable */ + ["\uD6D2", "\uD6D2"], /* Hangul Syllable */ + ["\uD6D3", "\uD6D3"], /* Hangul Syllable */ + ["\uD6D4", "\uD6D4"], /* Hangul Syllable */ + ["\uD6D5", "\uD6D5"], /* Hangul Syllable */ + ["\uD6D6", "\uD6D6"], /* Hangul Syllable */ + ["\uD6D7", "\uD6D7"], /* Hangul Syllable */ + ["\uD6D8", "\uD6D8"], /* Hangul Syllable */ + ["\uD6D9", "\uD6D9"], /* Hangul Syllable */ + ["\uD6DA", "\uD6DA"], /* Hangul Syllable */ + ["\uD6DB", "\uD6DB"], /* Hangul Syllable */ + ["\uD6DC", "\uD6DC"], /* Hangul Syllable */ + ["\uD6DD", "\uD6DD"], /* Hangul Syllable */ + ["\uD6DE", "\uD6DE"], /* Hangul Syllable */ + ["\uD6DF", "\uD6DF"], /* Hangul Syllable */ + ["\uD6E0", "\uD6E0"], /* Hangul Syllable */ + ["\uD6E1", "\uD6E1"], /* Hangul Syllable */ + ["\uD6E2", "\uD6E2"], /* Hangul Syllable */ + ["\uD6E3", "\uD6E3"], /* Hangul Syllable */ + ["\uD6E4", "\uD6E4"], /* Hangul Syllable */ + ["\uD6E5", "\uD6E5"], /* Hangul Syllable */ + ["\uD6E6", "\uD6E6"], /* Hangul Syllable */ + ["\uD6E7", "\uD6E7"], /* Hangul Syllable */ + ["\uD6E8", "\uD6E8"], /* Hangul Syllable */ + ["\uD6E9", "\uD6E9"], /* Hangul Syllable */ + ["\uD6EA", "\uD6EA"], /* Hangul Syllable */ + ["\uD6EB", "\uD6EB"], /* Hangul Syllable */ + ["\uD6EC", "\uD6EC"], /* Hangul Syllable */ + ["\uD6ED", "\uD6ED"], /* Hangul Syllable */ + ["\uD6EE", "\uD6EE"], /* Hangul Syllable */ + ["\uD6EF", "\uD6EF"], /* Hangul Syllable */ + ["\uD6F0", "\uD6F0"], /* Hangul Syllable */ + ["\uD6F1", "\uD6F1"], /* Hangul Syllable */ + ["\uD6F2", "\uD6F2"], /* Hangul Syllable */ + ["\uD6F3", "\uD6F3"], /* Hangul Syllable */ + ["\uD6F4", "\uD6F4"], /* Hangul Syllable */ + ["\uD6F5", "\uD6F5"], /* Hangul Syllable */ + ["\uD6F6", "\uD6F6"], /* Hangul Syllable */ + ["\uD6F7", "\uD6F7"], /* Hangul Syllable */ + ["\uD6F8", "\uD6F8"], /* Hangul Syllable */ + ["\uD6F9", "\uD6F9"], /* Hangul Syllable */ + ["\uD6FA", "\uD6FA"], /* Hangul Syllable */ + ["\uD6FB", "\uD6FB"], /* Hangul Syllable */ + ["\uD6FC", "\uD6FC"], /* Hangul Syllable */ + ["\uD6FD", "\uD6FD"], /* Hangul Syllable */ + ["\uD6FE", "\uD6FE"], /* Hangul Syllable */ + ["\uD6FF", "\uD6FF"], /* Hangul Syllable */ + ["\uD700", "\uD700"], /* Hangul Syllable */ + ["\uD701", "\uD701"], /* Hangul Syllable */ + ["\uD702", "\uD702"], /* Hangul Syllable */ + ["\uD703", "\uD703"], /* Hangul Syllable */ + ["\uD704", "\uD704"], /* Hangul Syllable */ + ["\uD705", "\uD705"], /* Hangul Syllable */ + ["\uD706", "\uD706"], /* Hangul Syllable */ + ["\uD707", "\uD707"], /* Hangul Syllable */ + ["\uD708", "\uD708"], /* Hangul Syllable */ + ["\uD709", "\uD709"], /* Hangul Syllable */ + ["\uD70A", "\uD70A"], /* Hangul Syllable */ + ["\uD70B", "\uD70B"], /* Hangul Syllable */ + ["\uD70C", "\uD70C"], /* Hangul Syllable */ + ["\uD70D", "\uD70D"], /* Hangul Syllable */ + ["\uD70E", "\uD70E"], /* Hangul Syllable */ + ["\uD70F", "\uD70F"], /* Hangul Syllable */ + ["\uD710", "\uD710"], /* Hangul Syllable */ + ["\uD711", "\uD711"], /* Hangul Syllable */ + ["\uD712", "\uD712"], /* Hangul Syllable */ + ["\uD713", "\uD713"], /* Hangul Syllable */ + ["\uD714", "\uD714"], /* Hangul Syllable */ + ["\uD715", "\uD715"], /* Hangul Syllable */ + ["\uD716", "\uD716"], /* Hangul Syllable */ + ["\uD717", "\uD717"], /* Hangul Syllable */ + ["\uD718", "\uD718"], /* Hangul Syllable */ + ["\uD719", "\uD719"], /* Hangul Syllable */ + ["\uD71A", "\uD71A"], /* Hangul Syllable */ + ["\uD71B", "\uD71B"], /* Hangul Syllable */ + ["\uD71C", "\uD71C"], /* Hangul Syllable */ + ["\uD71D", "\uD71D"], /* Hangul Syllable */ + ["\uD71E", "\uD71E"], /* Hangul Syllable */ + ["\uD71F", "\uD71F"], /* Hangul Syllable */ + ["\uD720", "\uD720"], /* Hangul Syllable */ + ["\uD721", "\uD721"], /* Hangul Syllable */ + ["\uD722", "\uD722"], /* Hangul Syllable */ + ["\uD723", "\uD723"], /* Hangul Syllable */ + ["\uD724", "\uD724"], /* Hangul Syllable */ + ["\uD725", "\uD725"], /* Hangul Syllable */ + ["\uD726", "\uD726"], /* Hangul Syllable */ + ["\uD727", "\uD727"], /* Hangul Syllable */ + ["\uD728", "\uD728"], /* Hangul Syllable */ + ["\uD729", "\uD729"], /* Hangul Syllable */ + ["\uD72A", "\uD72A"], /* Hangul Syllable */ + ["\uD72B", "\uD72B"], /* Hangul Syllable */ + ["\uD72C", "\uD72C"], /* Hangul Syllable */ + ["\uD72D", "\uD72D"], /* Hangul Syllable */ + ["\uD72E", "\uD72E"], /* Hangul Syllable */ + ["\uD72F", "\uD72F"], /* Hangul Syllable */ + ["\uD730", "\uD730"], /* Hangul Syllable */ + ["\uD731", "\uD731"], /* Hangul Syllable */ + ["\uD732", "\uD732"], /* Hangul Syllable */ + ["\uD733", "\uD733"], /* Hangul Syllable */ + ["\uD734", "\uD734"], /* Hangul Syllable */ + ["\uD735", "\uD735"], /* Hangul Syllable */ + ["\uD736", "\uD736"], /* Hangul Syllable */ + ["\uD737", "\uD737"], /* Hangul Syllable */ + ["\uD738", "\uD738"], /* Hangul Syllable */ + ["\uD739", "\uD739"], /* Hangul Syllable */ + ["\uD73A", "\uD73A"], /* Hangul Syllable */ + ["\uD73B", "\uD73B"], /* Hangul Syllable */ + ["\uD73C", "\uD73C"], /* Hangul Syllable */ + ["\uD73D", "\uD73D"], /* Hangul Syllable */ + ["\uD73E", "\uD73E"], /* Hangul Syllable */ + ["\uD73F", "\uD73F"], /* Hangul Syllable */ + ["\uD740", "\uD740"], /* Hangul Syllable */ + ["\uD741", "\uD741"], /* Hangul Syllable */ + ["\uD742", "\uD742"], /* Hangul Syllable */ + ["\uD743", "\uD743"], /* Hangul Syllable */ + ["\uD744", "\uD744"], /* Hangul Syllable */ + ["\uD745", "\uD745"], /* Hangul Syllable */ + ["\uD746", "\uD746"], /* Hangul Syllable */ + ["\uD747", "\uD747"], /* Hangul Syllable */ + ["\uD748", "\uD748"], /* Hangul Syllable */ + ["\uD749", "\uD749"], /* Hangul Syllable */ + ["\uD74A", "\uD74A"], /* Hangul Syllable */ + ["\uD74B", "\uD74B"], /* Hangul Syllable */ + ["\uD74C", "\uD74C"], /* Hangul Syllable */ + ["\uD74D", "\uD74D"], /* Hangul Syllable */ + ["\uD74E", "\uD74E"], /* Hangul Syllable */ + ["\uD74F", "\uD74F"], /* Hangul Syllable */ + ["\uD750", "\uD750"], /* Hangul Syllable */ + ["\uD751", "\uD751"], /* Hangul Syllable */ + ["\uD752", "\uD752"], /* Hangul Syllable */ + ["\uD753", "\uD753"], /* Hangul Syllable */ + ["\uD754", "\uD754"], /* Hangul Syllable */ + ["\uD755", "\uD755"], /* Hangul Syllable */ + ["\uD756", "\uD756"], /* Hangul Syllable */ + ["\uD757", "\uD757"], /* Hangul Syllable */ + ["\uD758", "\uD758"], /* Hangul Syllable */ + ["\uD759", "\uD759"], /* Hangul Syllable */ + ["\uD75A", "\uD75A"], /* Hangul Syllable */ + ["\uD75B", "\uD75B"], /* Hangul Syllable */ + ["\uD75C", "\uD75C"], /* Hangul Syllable */ + ["\uD75D", "\uD75D"], /* Hangul Syllable */ + ["\uD75E", "\uD75E"], /* Hangul Syllable */ + ["\uD75F", "\uD75F"], /* Hangul Syllable */ + ["\uD760", "\uD760"], /* Hangul Syllable */ + ["\uD761", "\uD761"], /* Hangul Syllable */ + ["\uD762", "\uD762"], /* Hangul Syllable */ + ["\uD763", "\uD763"], /* Hangul Syllable */ + ["\uD764", "\uD764"], /* Hangul Syllable */ + ["\uD765", "\uD765"], /* Hangul Syllable */ + ["\uD766", "\uD766"], /* Hangul Syllable */ + ["\uD767", "\uD767"], /* Hangul Syllable */ + ["\uD768", "\uD768"], /* Hangul Syllable */ + ["\uD769", "\uD769"], /* Hangul Syllable */ + ["\uD76A", "\uD76A"], /* Hangul Syllable */ + ["\uD76B", "\uD76B"], /* Hangul Syllable */ + ["\uD76C", "\uD76C"], /* Hangul Syllable */ + ["\uD76D", "\uD76D"], /* Hangul Syllable */ + ["\uD76E", "\uD76E"], /* Hangul Syllable */ + ["\uD76F", "\uD76F"], /* Hangul Syllable */ + ["\uD770", "\uD770"], /* Hangul Syllable */ + ["\uD771", "\uD771"], /* Hangul Syllable */ + ["\uD772", "\uD772"], /* Hangul Syllable */ + ["\uD773", "\uD773"], /* Hangul Syllable */ + ["\uD774", "\uD774"], /* Hangul Syllable */ + ["\uD775", "\uD775"], /* Hangul Syllable */ + ["\uD776", "\uD776"], /* Hangul Syllable */ + ["\uD777", "\uD777"], /* Hangul Syllable */ + ["\uD778", "\uD778"], /* Hangul Syllable */ + ["\uD779", "\uD779"], /* Hangul Syllable */ + ["\uD77A", "\uD77A"], /* Hangul Syllable */ + ["\uD77B", "\uD77B"], /* Hangul Syllable */ + ["\uD77C", "\uD77C"], /* Hangul Syllable */ + ["\uD77D", "\uD77D"], /* Hangul Syllable */ + ["\uD77E", "\uD77E"], /* Hangul Syllable */ + ["\uD77F", "\uD77F"], /* Hangul Syllable */ + ["\uD780", "\uD780"], /* Hangul Syllable */ + ["\uD781", "\uD781"], /* Hangul Syllable */ + ["\uD782", "\uD782"], /* Hangul Syllable */ + ["\uD783", "\uD783"], /* Hangul Syllable */ + ["\uD784", "\uD784"], /* Hangul Syllable */ + ["\uD785", "\uD785"], /* Hangul Syllable */ + ["\uD786", "\uD786"], /* Hangul Syllable */ + ["\uD787", "\uD787"], /* Hangul Syllable */ + ["\uD788", "\uD788"], /* Hangul Syllable */ + ["\uD789", "\uD789"], /* Hangul Syllable */ + ["\uD78A", "\uD78A"], /* Hangul Syllable */ + ["\uD78B", "\uD78B"], /* Hangul Syllable */ + ["\uD78C", "\uD78C"], /* Hangul Syllable */ + ["\uD78D", "\uD78D"], /* Hangul Syllable */ + ["\uD78E", "\uD78E"], /* Hangul Syllable */ + ["\uD78F", "\uD78F"], /* Hangul Syllable */ + ["\uD790", "\uD790"], /* Hangul Syllable */ + ["\uD791", "\uD791"], /* Hangul Syllable */ + ["\uD792", "\uD792"], /* Hangul Syllable */ + ["\uD793", "\uD793"], /* Hangul Syllable */ + ["\uD794", "\uD794"], /* Hangul Syllable */ + ["\uD795", "\uD795"], /* Hangul Syllable */ + ["\uD796", "\uD796"], /* Hangul Syllable */ + ["\uD797", "\uD797"], /* Hangul Syllable */ + ["\uD798", "\uD798"], /* Hangul Syllable */ + ["\uD799", "\uD799"], /* Hangul Syllable */ + ["\uD79A", "\uD79A"], /* Hangul Syllable */ + ["\uD79B", "\uD79B"], /* Hangul Syllable */ + ["\uD79C", "\uD79C"], /* Hangul Syllable */ + ["\uD79D", "\uD79D"], /* Hangul Syllable */ + ["\uD79E", "\uD79E"], /* Hangul Syllable */ + ["\uD79F", "\uD79F"], /* Hangul Syllable */ + ["\uD7A0", "\uD7A0"], /* Hangul Syllable */ + ["\uD7A1", "\uD7A1"], /* Hangul Syllable */ + ["\uD7A2", "\uD7A2"], /* Hangul Syllable */ + ["\uD7A3", "\uD7A3"], /* Hangul Syllable */ + ["\uD7A4", "\uD7A4"], + ["\uD7A5", "\uD7A5"], + ["\uD7A6", "\uD7A6"], + ["\uD7A7", "\uD7A7"], + ["\uD7A8", "\uD7A8"], + ["\uD7A9", "\uD7A9"], + ["\uD7AA", "\uD7AA"], + ["\uD7AB", "\uD7AB"], + ["\uD7AC", "\uD7AC"], + ["\uD7AD", "\uD7AD"], + ["\uD7AE", "\uD7AE"], + ["\uD7AF", "\uD7AF"], + ["\uD7B0", "\uD7B0"], /* HANGUL JUNGSEONG O-YEO */ + ["\uD7B1", "\uD7B1"], /* HANGUL JUNGSEONG O-O-I */ + ["\uD7B2", "\uD7B2"], /* HANGUL JUNGSEONG YO-A */ + ["\uD7B3", "\uD7B3"], /* HANGUL JUNGSEONG YO-AE */ + ["\uD7B4", "\uD7B4"], /* HANGUL JUNGSEONG YO-EO */ + ["\uD7B5", "\uD7B5"], /* HANGUL JUNGSEONG U-YEO */ + ["\uD7B6", "\uD7B6"], /* HANGUL JUNGSEONG U-I-I */ + ["\uD7B7", "\uD7B7"], /* HANGUL JUNGSEONG YU-AE */ + ["\uD7B8", "\uD7B8"], /* HANGUL JUNGSEONG YU-O */ + ["\uD7B9", "\uD7B9"], /* HANGUL JUNGSEONG EU-A */ + ["\uD7BA", "\uD7BA"], /* HANGUL JUNGSEONG EU-EO */ + ["\uD7BB", "\uD7BB"], /* HANGUL JUNGSEONG EU-E */ + ["\uD7BC", "\uD7BC"], /* HANGUL JUNGSEONG EU-O */ + ["\uD7BD", "\uD7BD"], /* HANGUL JUNGSEONG I-YA-O */ + ["\uD7BE", "\uD7BE"], /* HANGUL JUNGSEONG I-YAE */ + ["\uD7BF", "\uD7BF"], /* HANGUL JUNGSEONG I-YEO */ + ["\uD7C0", "\uD7C0"], /* HANGUL JUNGSEONG I-YE */ + ["\uD7C1", "\uD7C1"], /* HANGUL JUNGSEONG I-O-I */ + ["\uD7C2", "\uD7C2"], /* HANGUL JUNGSEONG I-YO */ + ["\uD7C3", "\uD7C3"], /* HANGUL JUNGSEONG I-YU */ + ["\uD7C4", "\uD7C4"], /* HANGUL JUNGSEONG I-I */ + ["\uD7C5", "\uD7C5"], /* HANGUL JUNGSEONG ARAEA-A */ + ["\uD7C6", "\uD7C6"], /* HANGUL JUNGSEONG ARAEA-E */ + ["\uD7C7", "\uD7C7"], + ["\uD7C8", "\uD7C8"], + ["\uD7C9", "\uD7C9"], + ["\uD7CA", "\uD7CA"], + ["\uD7CB", "\uD7CB"], /* HANGUL JONGSEONG NIEUN-RIEUL */ + ["\uD7CC", "\uD7CC"], /* HANGUL JONGSEONG NIEUN-CHIEUCH */ + ["\uD7CD", "\uD7CD"], /* HANGUL JONGSEONG SSANGTIKEUT */ + ["\uD7CE", "\uD7CE"], /* HANGUL JONGSEONG SSANGTIKEUT-PIEUP */ + ["\uD7CF", "\uD7CF"], /* HANGUL JONGSEONG TIKEUT-PIEUP */ + ["\uD7D0", "\uD7D0"], /* HANGUL JONGSEONG TIKEUT-SIOS */ + ["\uD7D1", "\uD7D1"], /* HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK */ + ["\uD7D2", "\uD7D2"], /* HANGUL JONGSEONG TIKEUT-CIEUC */ + ["\uD7D3", "\uD7D3"], /* HANGUL JONGSEONG TIKEUT-CHIEUCH */ + ["\uD7D4", "\uD7D4"], /* HANGUL JONGSEONG TIKEUT-THIEUTH */ + ["\uD7D5", "\uD7D5"], /* HANGUL JONGSEONG RIEUL-SSANGKIYEOK */ + ["\uD7D6", "\uD7D6"], /* HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH */ + ["\uD7D7", "\uD7D7"], /* HANGUL JONGSEONG SSANGRIEUL-KHIEUKH */ + ["\uD7D8", "\uD7D8"], /* HANGUL JONGSEONG RIEUL-MIEUM-HIEUH */ + ["\uD7D9", "\uD7D9"], /* HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT */ + ["\uD7DA", "\uD7DA"], /* HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH */ + ["\uD7DB", "\uD7DB"], /* HANGUL JONGSEONG RIEUL-YESIEUNG */ + ["\uD7DC", "\uD7DC"], /* HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH */ + ["\uD7DD", "\uD7DD"], /* HANGUL JONGSEONG KAPYEOUNRIEUL */ + ["\uD7DE", "\uD7DE"], /* HANGUL JONGSEONG MIEUM-NIEUN */ + ["\uD7DF", "\uD7DF"], /* HANGUL JONGSEONG MIEUM-SSANGNIEUN */ + ["\uD7E0", "\uD7E0"], /* HANGUL JONGSEONG SSANGMIEUM */ + ["\uD7E1", "\uD7E1"], /* HANGUL JONGSEONG MIEUM-PIEUP-SIOS */ + ["\uD7E2", "\uD7E2"], /* HANGUL JONGSEONG MIEUM-CIEUC */ + ["\uD7E3", "\uD7E3"], /* HANGUL JONGSEONG PIEUP-TIKEUT */ + ["\uD7E4", "\uD7E4"], /* HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH */ + ["\uD7E5", "\uD7E5"], /* HANGUL JONGSEONG PIEUP-MIEUM */ + ["\uD7E6", "\uD7E6"], /* HANGUL JONGSEONG SSANGPIEUP */ + ["\uD7E7", "\uD7E7"], /* HANGUL JONGSEONG PIEUP-SIOS-TIKEUT */ + ["\uD7E8", "\uD7E8"], /* HANGUL JONGSEONG PIEUP-CIEUC */ + ["\uD7E9", "\uD7E9"], /* HANGUL JONGSEONG PIEUP-CHIEUCH */ + ["\uD7EA", "\uD7EA"], /* HANGUL JONGSEONG SIOS-MIEUM */ + ["\uD7EB", "\uD7EB"], /* HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP */ + ["\uD7EC", "\uD7EC"], /* HANGUL JONGSEONG SSANGSIOS-KIYEOK */ + ["\uD7ED", "\uD7ED"], /* HANGUL JONGSEONG SSANGSIOS-TIKEUT */ + ["\uD7EE", "\uD7EE"], /* HANGUL JONGSEONG SIOS-PANSIOS */ + ["\uD7EF", "\uD7EF"], /* HANGUL JONGSEONG SIOS-CIEUC */ + ["\uD7F0", "\uD7F0"], /* HANGUL JONGSEONG SIOS-CHIEUCH */ + ["\uD7F1", "\uD7F1"], /* HANGUL JONGSEONG SIOS-THIEUTH */ + ["\uD7F2", "\uD7F2"], /* HANGUL JONGSEONG SIOS-HIEUH */ + ["\uD7F3", "\uD7F3"], /* HANGUL JONGSEONG PANSIOS-PIEUP */ + ["\uD7F4", "\uD7F4"], /* HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP */ + ["\uD7F5", "\uD7F5"], /* HANGUL JONGSEONG YESIEUNG-MIEUM */ + ["\uD7F6", "\uD7F6"], /* HANGUL JONGSEONG YESIEUNG-HIEUH */ + ["\uD7F7", "\uD7F7"], /* HANGUL JONGSEONG CIEUC-PIEUP */ + ["\uD7F8", "\uD7F8"], /* HANGUL JONGSEONG CIEUC-SSANGPIEUP */ + ["\uD7F9", "\uD7F9"], /* HANGUL JONGSEONG SSANGCIEUC */ + ["\uD7FA", "\uD7FA"], /* HANGUL JONGSEONG PHIEUPH-SIOS */ + ["\uD7FB", "\uD7FB"], /* HANGUL JONGSEONG PHIEUPH-THIEUTH */ + ["\uD7FC", "\uD7FC"], + ["\uD7FD", "\uD7FD"], + ["\uD7FE", "\uD7FE"], + ["\uD7FF", "\uD7FF"], + ["\uD800", "\uD800"], /* Non Private Use High Surrogate */ + ["\uD801", "\uD801"], /* Non Private Use High Surrogate */ + ["\uD802", "\uD802"], /* Non Private Use High Surrogate */ + ["\uD803", "\uD803"], /* Non Private Use High Surrogate */ + ["\uD804", "\uD804"], /* Non Private Use High Surrogate */ + ["\uD805", "\uD805"], /* Non Private Use High Surrogate */ + ["\uD806", "\uD806"], /* Non Private Use High Surrogate */ + ["\uD807", "\uD807"], /* Non Private Use High Surrogate */ + ["\uD808", "\uD808"], /* Non Private Use High Surrogate */ + ["\uD809", "\uD809"], /* Non Private Use High Surrogate */ + ["\uD80A", "\uD80A"], /* Non Private Use High Surrogate */ + ["\uD80B", "\uD80B"], /* Non Private Use High Surrogate */ + ["\uD80C", "\uD80C"], /* Non Private Use High Surrogate */ + ["\uD80D", "\uD80D"], /* Non Private Use High Surrogate */ + ["\uD80E", "\uD80E"], /* Non Private Use High Surrogate */ + ["\uD80F", "\uD80F"], /* Non Private Use High Surrogate */ + ["\uD810", "\uD810"], /* Non Private Use High Surrogate */ + ["\uD811", "\uD811"], /* Non Private Use High Surrogate */ + ["\uD812", "\uD812"], /* Non Private Use High Surrogate */ + ["\uD813", "\uD813"], /* Non Private Use High Surrogate */ + ["\uD814", "\uD814"], /* Non Private Use High Surrogate */ + ["\uD815", "\uD815"], /* Non Private Use High Surrogate */ + ["\uD816", "\uD816"], /* Non Private Use High Surrogate */ + ["\uD817", "\uD817"], /* Non Private Use High Surrogate */ + ["\uD818", "\uD818"], /* Non Private Use High Surrogate */ + ["\uD819", "\uD819"], /* Non Private Use High Surrogate */ + ["\uD81A", "\uD81A"], /* Non Private Use High Surrogate */ + ["\uD81B", "\uD81B"], /* Non Private Use High Surrogate */ + ["\uD81C", "\uD81C"], /* Non Private Use High Surrogate */ + ["\uD81D", "\uD81D"], /* Non Private Use High Surrogate */ + ["\uD81E", "\uD81E"], /* Non Private Use High Surrogate */ + ["\uD81F", "\uD81F"], /* Non Private Use High Surrogate */ + ["\uD820", "\uD820"], /* Non Private Use High Surrogate */ + ["\uD821", "\uD821"], /* Non Private Use High Surrogate */ + ["\uD822", "\uD822"], /* Non Private Use High Surrogate */ + ["\uD823", "\uD823"], /* Non Private Use High Surrogate */ + ["\uD824", "\uD824"], /* Non Private Use High Surrogate */ + ["\uD825", "\uD825"], /* Non Private Use High Surrogate */ + ["\uD826", "\uD826"], /* Non Private Use High Surrogate */ + ["\uD827", "\uD827"], /* Non Private Use High Surrogate */ + ["\uD828", "\uD828"], /* Non Private Use High Surrogate */ + ["\uD829", "\uD829"], /* Non Private Use High Surrogate */ + ["\uD82A", "\uD82A"], /* Non Private Use High Surrogate */ + ["\uD82B", "\uD82B"], /* Non Private Use High Surrogate */ + ["\uD82C", "\uD82C"], /* Non Private Use High Surrogate */ + ["\uD82D", "\uD82D"], /* Non Private Use High Surrogate */ + ["\uD82E", "\uD82E"], /* Non Private Use High Surrogate */ + ["\uD82F", "\uD82F"], /* Non Private Use High Surrogate */ + ["\uD830", "\uD830"], /* Non Private Use High Surrogate */ + ["\uD831", "\uD831"], /* Non Private Use High Surrogate */ + ["\uD832", "\uD832"], /* Non Private Use High Surrogate */ + ["\uD833", "\uD833"], /* Non Private Use High Surrogate */ + ["\uD834", "\uD834"], /* Non Private Use High Surrogate */ + ["\uD835", "\uD835"], /* Non Private Use High Surrogate */ + ["\uD836", "\uD836"], /* Non Private Use High Surrogate */ + ["\uD837", "\uD837"], /* Non Private Use High Surrogate */ + ["\uD838", "\uD838"], /* Non Private Use High Surrogate */ + ["\uD839", "\uD839"], /* Non Private Use High Surrogate */ + ["\uD83A", "\uD83A"], /* Non Private Use High Surrogate */ + ["\uD83B", "\uD83B"], /* Non Private Use High Surrogate */ + ["\uD83C", "\uD83C"], /* Non Private Use High Surrogate */ + ["\uD83D", "\uD83D"], /* Non Private Use High Surrogate */ + ["\uD83E", "\uD83E"], /* Non Private Use High Surrogate */ + ["\uD83F", "\uD83F"], /* Non Private Use High Surrogate */ + ["\uD840", "\uD840"], /* Non Private Use High Surrogate */ + ["\uD841", "\uD841"], /* Non Private Use High Surrogate */ + ["\uD842", "\uD842"], /* Non Private Use High Surrogate */ + ["\uD843", "\uD843"], /* Non Private Use High Surrogate */ + ["\uD844", "\uD844"], /* Non Private Use High Surrogate */ + ["\uD845", "\uD845"], /* Non Private Use High Surrogate */ + ["\uD846", "\uD846"], /* Non Private Use High Surrogate */ + ["\uD847", "\uD847"], /* Non Private Use High Surrogate */ + ["\uD848", "\uD848"], /* Non Private Use High Surrogate */ + ["\uD849", "\uD849"], /* Non Private Use High Surrogate */ + ["\uD84A", "\uD84A"], /* Non Private Use High Surrogate */ + ["\uD84B", "\uD84B"], /* Non Private Use High Surrogate */ + ["\uD84C", "\uD84C"], /* Non Private Use High Surrogate */ + ["\uD84D", "\uD84D"], /* Non Private Use High Surrogate */ + ["\uD84E", "\uD84E"], /* Non Private Use High Surrogate */ + ["\uD84F", "\uD84F"], /* Non Private Use High Surrogate */ + ["\uD850", "\uD850"], /* Non Private Use High Surrogate */ + ["\uD851", "\uD851"], /* Non Private Use High Surrogate */ + ["\uD852", "\uD852"], /* Non Private Use High Surrogate */ + ["\uD853", "\uD853"], /* Non Private Use High Surrogate */ + ["\uD854", "\uD854"], /* Non Private Use High Surrogate */ + ["\uD855", "\uD855"], /* Non Private Use High Surrogate */ + ["\uD856", "\uD856"], /* Non Private Use High Surrogate */ + ["\uD857", "\uD857"], /* Non Private Use High Surrogate */ + ["\uD858", "\uD858"], /* Non Private Use High Surrogate */ + ["\uD859", "\uD859"], /* Non Private Use High Surrogate */ + ["\uD85A", "\uD85A"], /* Non Private Use High Surrogate */ + ["\uD85B", "\uD85B"], /* Non Private Use High Surrogate */ + ["\uD85C", "\uD85C"], /* Non Private Use High Surrogate */ + ["\uD85D", "\uD85D"], /* Non Private Use High Surrogate */ + ["\uD85E", "\uD85E"], /* Non Private Use High Surrogate */ + ["\uD85F", "\uD85F"], /* Non Private Use High Surrogate */ + ["\uD860", "\uD860"], /* Non Private Use High Surrogate */ + ["\uD861", "\uD861"], /* Non Private Use High Surrogate */ + ["\uD862", "\uD862"], /* Non Private Use High Surrogate */ + ["\uD863", "\uD863"], /* Non Private Use High Surrogate */ + ["\uD864", "\uD864"], /* Non Private Use High Surrogate */ + ["\uD865", "\uD865"], /* Non Private Use High Surrogate */ + ["\uD866", "\uD866"], /* Non Private Use High Surrogate */ + ["\uD867", "\uD867"], /* Non Private Use High Surrogate */ + ["\uD868", "\uD868"], /* Non Private Use High Surrogate */ + ["\uD869", "\uD869"], /* Non Private Use High Surrogate */ + ["\uD86A", "\uD86A"], /* Non Private Use High Surrogate */ + ["\uD86B", "\uD86B"], /* Non Private Use High Surrogate */ + ["\uD86C", "\uD86C"], /* Non Private Use High Surrogate */ + ["\uD86D", "\uD86D"], /* Non Private Use High Surrogate */ + ["\uD86E", "\uD86E"], /* Non Private Use High Surrogate */ + ["\uD86F", "\uD86F"], /* Non Private Use High Surrogate */ + ["\uD870", "\uD870"], /* Non Private Use High Surrogate */ + ["\uD871", "\uD871"], /* Non Private Use High Surrogate */ + ["\uD872", "\uD872"], /* Non Private Use High Surrogate */ + ["\uD873", "\uD873"], /* Non Private Use High Surrogate */ + ["\uD874", "\uD874"], /* Non Private Use High Surrogate */ + ["\uD875", "\uD875"], /* Non Private Use High Surrogate */ + ["\uD876", "\uD876"], /* Non Private Use High Surrogate */ + ["\uD877", "\uD877"], /* Non Private Use High Surrogate */ + ["\uD878", "\uD878"], /* Non Private Use High Surrogate */ + ["\uD879", "\uD879"], /* Non Private Use High Surrogate */ + ["\uD87A", "\uD87A"], /* Non Private Use High Surrogate */ + ["\uD87B", "\uD87B"], /* Non Private Use High Surrogate */ + ["\uD87C", "\uD87C"], /* Non Private Use High Surrogate */ + ["\uD87D", "\uD87D"], /* Non Private Use High Surrogate */ + ["\uD87E", "\uD87E"], /* Non Private Use High Surrogate */ + ["\uD87F", "\uD87F"], /* Non Private Use High Surrogate */ + ["\uD880", "\uD880"], /* Non Private Use High Surrogate */ + ["\uD881", "\uD881"], /* Non Private Use High Surrogate */ + ["\uD882", "\uD882"], /* Non Private Use High Surrogate */ + ["\uD883", "\uD883"], /* Non Private Use High Surrogate */ + ["\uD884", "\uD884"], /* Non Private Use High Surrogate */ + ["\uD885", "\uD885"], /* Non Private Use High Surrogate */ + ["\uD886", "\uD886"], /* Non Private Use High Surrogate */ + ["\uD887", "\uD887"], /* Non Private Use High Surrogate */ + ["\uD888", "\uD888"], /* Non Private Use High Surrogate */ + ["\uD889", "\uD889"], /* Non Private Use High Surrogate */ + ["\uD88A", "\uD88A"], /* Non Private Use High Surrogate */ + ["\uD88B", "\uD88B"], /* Non Private Use High Surrogate */ + ["\uD88C", "\uD88C"], /* Non Private Use High Surrogate */ + ["\uD88D", "\uD88D"], /* Non Private Use High Surrogate */ + ["\uD88E", "\uD88E"], /* Non Private Use High Surrogate */ + ["\uD88F", "\uD88F"], /* Non Private Use High Surrogate */ + ["\uD890", "\uD890"], /* Non Private Use High Surrogate */ + ["\uD891", "\uD891"], /* Non Private Use High Surrogate */ + ["\uD892", "\uD892"], /* Non Private Use High Surrogate */ + ["\uD893", "\uD893"], /* Non Private Use High Surrogate */ + ["\uD894", "\uD894"], /* Non Private Use High Surrogate */ + ["\uD895", "\uD895"], /* Non Private Use High Surrogate */ + ["\uD896", "\uD896"], /* Non Private Use High Surrogate */ + ["\uD897", "\uD897"], /* Non Private Use High Surrogate */ + ["\uD898", "\uD898"], /* Non Private Use High Surrogate */ + ["\uD899", "\uD899"], /* Non Private Use High Surrogate */ + ["\uD89A", "\uD89A"], /* Non Private Use High Surrogate */ + ["\uD89B", "\uD89B"], /* Non Private Use High Surrogate */ + ["\uD89C", "\uD89C"], /* Non Private Use High Surrogate */ + ["\uD89D", "\uD89D"], /* Non Private Use High Surrogate */ + ["\uD89E", "\uD89E"], /* Non Private Use High Surrogate */ + ["\uD89F", "\uD89F"], /* Non Private Use High Surrogate */ + ["\uD8A0", "\uD8A0"], /* Non Private Use High Surrogate */ + ["\uD8A1", "\uD8A1"], /* Non Private Use High Surrogate */ + ["\uD8A2", "\uD8A2"], /* Non Private Use High Surrogate */ + ["\uD8A3", "\uD8A3"], /* Non Private Use High Surrogate */ + ["\uD8A4", "\uD8A4"], /* Non Private Use High Surrogate */ + ["\uD8A5", "\uD8A5"], /* Non Private Use High Surrogate */ + ["\uD8A6", "\uD8A6"], /* Non Private Use High Surrogate */ + ["\uD8A7", "\uD8A7"], /* Non Private Use High Surrogate */ + ["\uD8A8", "\uD8A8"], /* Non Private Use High Surrogate */ + ["\uD8A9", "\uD8A9"], /* Non Private Use High Surrogate */ + ["\uD8AA", "\uD8AA"], /* Non Private Use High Surrogate */ + ["\uD8AB", "\uD8AB"], /* Non Private Use High Surrogate */ + ["\uD8AC", "\uD8AC"], /* Non Private Use High Surrogate */ + ["\uD8AD", "\uD8AD"], /* Non Private Use High Surrogate */ + ["\uD8AE", "\uD8AE"], /* Non Private Use High Surrogate */ + ["\uD8AF", "\uD8AF"], /* Non Private Use High Surrogate */ + ["\uD8B0", "\uD8B0"], /* Non Private Use High Surrogate */ + ["\uD8B1", "\uD8B1"], /* Non Private Use High Surrogate */ + ["\uD8B2", "\uD8B2"], /* Non Private Use High Surrogate */ + ["\uD8B3", "\uD8B3"], /* Non Private Use High Surrogate */ + ["\uD8B4", "\uD8B4"], /* Non Private Use High Surrogate */ + ["\uD8B5", "\uD8B5"], /* Non Private Use High Surrogate */ + ["\uD8B6", "\uD8B6"], /* Non Private Use High Surrogate */ + ["\uD8B7", "\uD8B7"], /* Non Private Use High Surrogate */ + ["\uD8B8", "\uD8B8"], /* Non Private Use High Surrogate */ + ["\uD8B9", "\uD8B9"], /* Non Private Use High Surrogate */ + ["\uD8BA", "\uD8BA"], /* Non Private Use High Surrogate */ + ["\uD8BB", "\uD8BB"], /* Non Private Use High Surrogate */ + ["\uD8BC", "\uD8BC"], /* Non Private Use High Surrogate */ + ["\uD8BD", "\uD8BD"], /* Non Private Use High Surrogate */ + ["\uD8BE", "\uD8BE"], /* Non Private Use High Surrogate */ + ["\uD8BF", "\uD8BF"], /* Non Private Use High Surrogate */ + ["\uD8C0", "\uD8C0"], /* Non Private Use High Surrogate */ + ["\uD8C1", "\uD8C1"], /* Non Private Use High Surrogate */ + ["\uD8C2", "\uD8C2"], /* Non Private Use High Surrogate */ + ["\uD8C3", "\uD8C3"], /* Non Private Use High Surrogate */ + ["\uD8C4", "\uD8C4"], /* Non Private Use High Surrogate */ + ["\uD8C5", "\uD8C5"], /* Non Private Use High Surrogate */ + ["\uD8C6", "\uD8C6"], /* Non Private Use High Surrogate */ + ["\uD8C7", "\uD8C7"], /* Non Private Use High Surrogate */ + ["\uD8C8", "\uD8C8"], /* Non Private Use High Surrogate */ + ["\uD8C9", "\uD8C9"], /* Non Private Use High Surrogate */ + ["\uD8CA", "\uD8CA"], /* Non Private Use High Surrogate */ + ["\uD8CB", "\uD8CB"], /* Non Private Use High Surrogate */ + ["\uD8CC", "\uD8CC"], /* Non Private Use High Surrogate */ + ["\uD8CD", "\uD8CD"], /* Non Private Use High Surrogate */ + ["\uD8CE", "\uD8CE"], /* Non Private Use High Surrogate */ + ["\uD8CF", "\uD8CF"], /* Non Private Use High Surrogate */ + ["\uD8D0", "\uD8D0"], /* Non Private Use High Surrogate */ + ["\uD8D1", "\uD8D1"], /* Non Private Use High Surrogate */ + ["\uD8D2", "\uD8D2"], /* Non Private Use High Surrogate */ + ["\uD8D3", "\uD8D3"], /* Non Private Use High Surrogate */ + ["\uD8D4", "\uD8D4"], /* Non Private Use High Surrogate */ + ["\uD8D5", "\uD8D5"], /* Non Private Use High Surrogate */ + ["\uD8D6", "\uD8D6"], /* Non Private Use High Surrogate */ + ["\uD8D7", "\uD8D7"], /* Non Private Use High Surrogate */ + ["\uD8D8", "\uD8D8"], /* Non Private Use High Surrogate */ + ["\uD8D9", "\uD8D9"], /* Non Private Use High Surrogate */ + ["\uD8DA", "\uD8DA"], /* Non Private Use High Surrogate */ + ["\uD8DB", "\uD8DB"], /* Non Private Use High Surrogate */ + ["\uD8DC", "\uD8DC"], /* Non Private Use High Surrogate */ + ["\uD8DD", "\uD8DD"], /* Non Private Use High Surrogate */ + ["\uD8DE", "\uD8DE"], /* Non Private Use High Surrogate */ + ["\uD8DF", "\uD8DF"], /* Non Private Use High Surrogate */ + ["\uD8E0", "\uD8E0"], /* Non Private Use High Surrogate */ + ["\uD8E1", "\uD8E1"], /* Non Private Use High Surrogate */ + ["\uD8E2", "\uD8E2"], /* Non Private Use High Surrogate */ + ["\uD8E3", "\uD8E3"], /* Non Private Use High Surrogate */ + ["\uD8E4", "\uD8E4"], /* Non Private Use High Surrogate */ + ["\uD8E5", "\uD8E5"], /* Non Private Use High Surrogate */ + ["\uD8E6", "\uD8E6"], /* Non Private Use High Surrogate */ + ["\uD8E7", "\uD8E7"], /* Non Private Use High Surrogate */ + ["\uD8E8", "\uD8E8"], /* Non Private Use High Surrogate */ + ["\uD8E9", "\uD8E9"], /* Non Private Use High Surrogate */ + ["\uD8EA", "\uD8EA"], /* Non Private Use High Surrogate */ + ["\uD8EB", "\uD8EB"], /* Non Private Use High Surrogate */ + ["\uD8EC", "\uD8EC"], /* Non Private Use High Surrogate */ + ["\uD8ED", "\uD8ED"], /* Non Private Use High Surrogate */ + ["\uD8EE", "\uD8EE"], /* Non Private Use High Surrogate */ + ["\uD8EF", "\uD8EF"], /* Non Private Use High Surrogate */ + ["\uD8F0", "\uD8F0"], /* Non Private Use High Surrogate */ + ["\uD8F1", "\uD8F1"], /* Non Private Use High Surrogate */ + ["\uD8F2", "\uD8F2"], /* Non Private Use High Surrogate */ + ["\uD8F3", "\uD8F3"], /* Non Private Use High Surrogate */ + ["\uD8F4", "\uD8F4"], /* Non Private Use High Surrogate */ + ["\uD8F5", "\uD8F5"], /* Non Private Use High Surrogate */ + ["\uD8F6", "\uD8F6"], /* Non Private Use High Surrogate */ + ["\uD8F7", "\uD8F7"], /* Non Private Use High Surrogate */ + ["\uD8F8", "\uD8F8"], /* Non Private Use High Surrogate */ + ["\uD8F9", "\uD8F9"], /* Non Private Use High Surrogate */ + ["\uD8FA", "\uD8FA"], /* Non Private Use High Surrogate */ + ["\uD8FB", "\uD8FB"], /* Non Private Use High Surrogate */ + ["\uD8FC", "\uD8FC"], /* Non Private Use High Surrogate */ + ["\uD8FD", "\uD8FD"], /* Non Private Use High Surrogate */ + ["\uD8FE", "\uD8FE"], /* Non Private Use High Surrogate */ + ["\uD8FF", "\uD8FF"], /* Non Private Use High Surrogate */ + ["\uD900", "\uD900"], /* Non Private Use High Surrogate */ + ["\uD901", "\uD901"], /* Non Private Use High Surrogate */ + ["\uD902", "\uD902"], /* Non Private Use High Surrogate */ + ["\uD903", "\uD903"], /* Non Private Use High Surrogate */ + ["\uD904", "\uD904"], /* Non Private Use High Surrogate */ + ["\uD905", "\uD905"], /* Non Private Use High Surrogate */ + ["\uD906", "\uD906"], /* Non Private Use High Surrogate */ + ["\uD907", "\uD907"], /* Non Private Use High Surrogate */ + ["\uD908", "\uD908"], /* Non Private Use High Surrogate */ + ["\uD909", "\uD909"], /* Non Private Use High Surrogate */ + ["\uD90A", "\uD90A"], /* Non Private Use High Surrogate */ + ["\uD90B", "\uD90B"], /* Non Private Use High Surrogate */ + ["\uD90C", "\uD90C"], /* Non Private Use High Surrogate */ + ["\uD90D", "\uD90D"], /* Non Private Use High Surrogate */ + ["\uD90E", "\uD90E"], /* Non Private Use High Surrogate */ + ["\uD90F", "\uD90F"], /* Non Private Use High Surrogate */ + ["\uD910", "\uD910"], /* Non Private Use High Surrogate */ + ["\uD911", "\uD911"], /* Non Private Use High Surrogate */ + ["\uD912", "\uD912"], /* Non Private Use High Surrogate */ + ["\uD913", "\uD913"], /* Non Private Use High Surrogate */ + ["\uD914", "\uD914"], /* Non Private Use High Surrogate */ + ["\uD915", "\uD915"], /* Non Private Use High Surrogate */ + ["\uD916", "\uD916"], /* Non Private Use High Surrogate */ + ["\uD917", "\uD917"], /* Non Private Use High Surrogate */ + ["\uD918", "\uD918"], /* Non Private Use High Surrogate */ + ["\uD919", "\uD919"], /* Non Private Use High Surrogate */ + ["\uD91A", "\uD91A"], /* Non Private Use High Surrogate */ + ["\uD91B", "\uD91B"], /* Non Private Use High Surrogate */ + ["\uD91C", "\uD91C"], /* Non Private Use High Surrogate */ + ["\uD91D", "\uD91D"], /* Non Private Use High Surrogate */ + ["\uD91E", "\uD91E"], /* Non Private Use High Surrogate */ + ["\uD91F", "\uD91F"], /* Non Private Use High Surrogate */ + ["\uD920", "\uD920"], /* Non Private Use High Surrogate */ + ["\uD921", "\uD921"], /* Non Private Use High Surrogate */ + ["\uD922", "\uD922"], /* Non Private Use High Surrogate */ + ["\uD923", "\uD923"], /* Non Private Use High Surrogate */ + ["\uD924", "\uD924"], /* Non Private Use High Surrogate */ + ["\uD925", "\uD925"], /* Non Private Use High Surrogate */ + ["\uD926", "\uD926"], /* Non Private Use High Surrogate */ + ["\uD927", "\uD927"], /* Non Private Use High Surrogate */ + ["\uD928", "\uD928"], /* Non Private Use High Surrogate */ + ["\uD929", "\uD929"], /* Non Private Use High Surrogate */ + ["\uD92A", "\uD92A"], /* Non Private Use High Surrogate */ + ["\uD92B", "\uD92B"], /* Non Private Use High Surrogate */ + ["\uD92C", "\uD92C"], /* Non Private Use High Surrogate */ + ["\uD92D", "\uD92D"], /* Non Private Use High Surrogate */ + ["\uD92E", "\uD92E"], /* Non Private Use High Surrogate */ + ["\uD92F", "\uD92F"], /* Non Private Use High Surrogate */ + ["\uD930", "\uD930"], /* Non Private Use High Surrogate */ + ["\uD931", "\uD931"], /* Non Private Use High Surrogate */ + ["\uD932", "\uD932"], /* Non Private Use High Surrogate */ + ["\uD933", "\uD933"], /* Non Private Use High Surrogate */ + ["\uD934", "\uD934"], /* Non Private Use High Surrogate */ + ["\uD935", "\uD935"], /* Non Private Use High Surrogate */ + ["\uD936", "\uD936"], /* Non Private Use High Surrogate */ + ["\uD937", "\uD937"], /* Non Private Use High Surrogate */ + ["\uD938", "\uD938"], /* Non Private Use High Surrogate */ + ["\uD939", "\uD939"], /* Non Private Use High Surrogate */ + ["\uD93A", "\uD93A"], /* Non Private Use High Surrogate */ + ["\uD93B", "\uD93B"], /* Non Private Use High Surrogate */ + ["\uD93C", "\uD93C"], /* Non Private Use High Surrogate */ + ["\uD93D", "\uD93D"], /* Non Private Use High Surrogate */ + ["\uD93E", "\uD93E"], /* Non Private Use High Surrogate */ + ["\uD93F", "\uD93F"], /* Non Private Use High Surrogate */ + ["\uD940", "\uD940"], /* Non Private Use High Surrogate */ + ["\uD941", "\uD941"], /* Non Private Use High Surrogate */ + ["\uD942", "\uD942"], /* Non Private Use High Surrogate */ + ["\uD943", "\uD943"], /* Non Private Use High Surrogate */ + ["\uD944", "\uD944"], /* Non Private Use High Surrogate */ + ["\uD945", "\uD945"], /* Non Private Use High Surrogate */ + ["\uD946", "\uD946"], /* Non Private Use High Surrogate */ + ["\uD947", "\uD947"], /* Non Private Use High Surrogate */ + ["\uD948", "\uD948"], /* Non Private Use High Surrogate */ + ["\uD949", "\uD949"], /* Non Private Use High Surrogate */ + ["\uD94A", "\uD94A"], /* Non Private Use High Surrogate */ + ["\uD94B", "\uD94B"], /* Non Private Use High Surrogate */ + ["\uD94C", "\uD94C"], /* Non Private Use High Surrogate */ + ["\uD94D", "\uD94D"], /* Non Private Use High Surrogate */ + ["\uD94E", "\uD94E"], /* Non Private Use High Surrogate */ + ["\uD94F", "\uD94F"], /* Non Private Use High Surrogate */ + ["\uD950", "\uD950"], /* Non Private Use High Surrogate */ + ["\uD951", "\uD951"], /* Non Private Use High Surrogate */ + ["\uD952", "\uD952"], /* Non Private Use High Surrogate */ + ["\uD953", "\uD953"], /* Non Private Use High Surrogate */ + ["\uD954", "\uD954"], /* Non Private Use High Surrogate */ + ["\uD955", "\uD955"], /* Non Private Use High Surrogate */ + ["\uD956", "\uD956"], /* Non Private Use High Surrogate */ + ["\uD957", "\uD957"], /* Non Private Use High Surrogate */ + ["\uD958", "\uD958"], /* Non Private Use High Surrogate */ + ["\uD959", "\uD959"], /* Non Private Use High Surrogate */ + ["\uD95A", "\uD95A"], /* Non Private Use High Surrogate */ + ["\uD95B", "\uD95B"], /* Non Private Use High Surrogate */ + ["\uD95C", "\uD95C"], /* Non Private Use High Surrogate */ + ["\uD95D", "\uD95D"], /* Non Private Use High Surrogate */ + ["\uD95E", "\uD95E"], /* Non Private Use High Surrogate */ + ["\uD95F", "\uD95F"], /* Non Private Use High Surrogate */ + ["\uD960", "\uD960"], /* Non Private Use High Surrogate */ + ["\uD961", "\uD961"], /* Non Private Use High Surrogate */ + ["\uD962", "\uD962"], /* Non Private Use High Surrogate */ + ["\uD963", "\uD963"], /* Non Private Use High Surrogate */ + ["\uD964", "\uD964"], /* Non Private Use High Surrogate */ + ["\uD965", "\uD965"], /* Non Private Use High Surrogate */ + ["\uD966", "\uD966"], /* Non Private Use High Surrogate */ + ["\uD967", "\uD967"], /* Non Private Use High Surrogate */ + ["\uD968", "\uD968"], /* Non Private Use High Surrogate */ + ["\uD969", "\uD969"], /* Non Private Use High Surrogate */ + ["\uD96A", "\uD96A"], /* Non Private Use High Surrogate */ + ["\uD96B", "\uD96B"], /* Non Private Use High Surrogate */ + ["\uD96C", "\uD96C"], /* Non Private Use High Surrogate */ + ["\uD96D", "\uD96D"], /* Non Private Use High Surrogate */ + ["\uD96E", "\uD96E"], /* Non Private Use High Surrogate */ + ["\uD96F", "\uD96F"], /* Non Private Use High Surrogate */ + ["\uD970", "\uD970"], /* Non Private Use High Surrogate */ + ["\uD971", "\uD971"], /* Non Private Use High Surrogate */ + ["\uD972", "\uD972"], /* Non Private Use High Surrogate */ + ["\uD973", "\uD973"], /* Non Private Use High Surrogate */ + ["\uD974", "\uD974"], /* Non Private Use High Surrogate */ + ["\uD975", "\uD975"], /* Non Private Use High Surrogate */ + ["\uD976", "\uD976"], /* Non Private Use High Surrogate */ + ["\uD977", "\uD977"], /* Non Private Use High Surrogate */ + ["\uD978", "\uD978"], /* Non Private Use High Surrogate */ + ["\uD979", "\uD979"], /* Non Private Use High Surrogate */ + ["\uD97A", "\uD97A"], /* Non Private Use High Surrogate */ + ["\uD97B", "\uD97B"], /* Non Private Use High Surrogate */ + ["\uD97C", "\uD97C"], /* Non Private Use High Surrogate */ + ["\uD97D", "\uD97D"], /* Non Private Use High Surrogate */ + ["\uD97E", "\uD97E"], /* Non Private Use High Surrogate */ + ["\uD97F", "\uD97F"], /* Non Private Use High Surrogate */ + ["\uD980", "\uD980"], /* Non Private Use High Surrogate */ + ["\uD981", "\uD981"], /* Non Private Use High Surrogate */ + ["\uD982", "\uD982"], /* Non Private Use High Surrogate */ + ["\uD983", "\uD983"], /* Non Private Use High Surrogate */ + ["\uD984", "\uD984"], /* Non Private Use High Surrogate */ + ["\uD985", "\uD985"], /* Non Private Use High Surrogate */ + ["\uD986", "\uD986"], /* Non Private Use High Surrogate */ + ["\uD987", "\uD987"], /* Non Private Use High Surrogate */ + ["\uD988", "\uD988"], /* Non Private Use High Surrogate */ + ["\uD989", "\uD989"], /* Non Private Use High Surrogate */ + ["\uD98A", "\uD98A"], /* Non Private Use High Surrogate */ + ["\uD98B", "\uD98B"], /* Non Private Use High Surrogate */ + ["\uD98C", "\uD98C"], /* Non Private Use High Surrogate */ + ["\uD98D", "\uD98D"], /* Non Private Use High Surrogate */ + ["\uD98E", "\uD98E"], /* Non Private Use High Surrogate */ + ["\uD98F", "\uD98F"], /* Non Private Use High Surrogate */ + ["\uD990", "\uD990"], /* Non Private Use High Surrogate */ + ["\uD991", "\uD991"], /* Non Private Use High Surrogate */ + ["\uD992", "\uD992"], /* Non Private Use High Surrogate */ + ["\uD993", "\uD993"], /* Non Private Use High Surrogate */ + ["\uD994", "\uD994"], /* Non Private Use High Surrogate */ + ["\uD995", "\uD995"], /* Non Private Use High Surrogate */ + ["\uD996", "\uD996"], /* Non Private Use High Surrogate */ + ["\uD997", "\uD997"], /* Non Private Use High Surrogate */ + ["\uD998", "\uD998"], /* Non Private Use High Surrogate */ + ["\uD999", "\uD999"], /* Non Private Use High Surrogate */ + ["\uD99A", "\uD99A"], /* Non Private Use High Surrogate */ + ["\uD99B", "\uD99B"], /* Non Private Use High Surrogate */ + ["\uD99C", "\uD99C"], /* Non Private Use High Surrogate */ + ["\uD99D", "\uD99D"], /* Non Private Use High Surrogate */ + ["\uD99E", "\uD99E"], /* Non Private Use High Surrogate */ + ["\uD99F", "\uD99F"], /* Non Private Use High Surrogate */ + ["\uD9A0", "\uD9A0"], /* Non Private Use High Surrogate */ + ["\uD9A1", "\uD9A1"], /* Non Private Use High Surrogate */ + ["\uD9A2", "\uD9A2"], /* Non Private Use High Surrogate */ + ["\uD9A3", "\uD9A3"], /* Non Private Use High Surrogate */ + ["\uD9A4", "\uD9A4"], /* Non Private Use High Surrogate */ + ["\uD9A5", "\uD9A5"], /* Non Private Use High Surrogate */ + ["\uD9A6", "\uD9A6"], /* Non Private Use High Surrogate */ + ["\uD9A7", "\uD9A7"], /* Non Private Use High Surrogate */ + ["\uD9A8", "\uD9A8"], /* Non Private Use High Surrogate */ + ["\uD9A9", "\uD9A9"], /* Non Private Use High Surrogate */ + ["\uD9AA", "\uD9AA"], /* Non Private Use High Surrogate */ + ["\uD9AB", "\uD9AB"], /* Non Private Use High Surrogate */ + ["\uD9AC", "\uD9AC"], /* Non Private Use High Surrogate */ + ["\uD9AD", "\uD9AD"], /* Non Private Use High Surrogate */ + ["\uD9AE", "\uD9AE"], /* Non Private Use High Surrogate */ + ["\uD9AF", "\uD9AF"], /* Non Private Use High Surrogate */ + ["\uD9B0", "\uD9B0"], /* Non Private Use High Surrogate */ + ["\uD9B1", "\uD9B1"], /* Non Private Use High Surrogate */ + ["\uD9B2", "\uD9B2"], /* Non Private Use High Surrogate */ + ["\uD9B3", "\uD9B3"], /* Non Private Use High Surrogate */ + ["\uD9B4", "\uD9B4"], /* Non Private Use High Surrogate */ + ["\uD9B5", "\uD9B5"], /* Non Private Use High Surrogate */ + ["\uD9B6", "\uD9B6"], /* Non Private Use High Surrogate */ + ["\uD9B7", "\uD9B7"], /* Non Private Use High Surrogate */ + ["\uD9B8", "\uD9B8"], /* Non Private Use High Surrogate */ + ["\uD9B9", "\uD9B9"], /* Non Private Use High Surrogate */ + ["\uD9BA", "\uD9BA"], /* Non Private Use High Surrogate */ + ["\uD9BB", "\uD9BB"], /* Non Private Use High Surrogate */ + ["\uD9BC", "\uD9BC"], /* Non Private Use High Surrogate */ + ["\uD9BD", "\uD9BD"], /* Non Private Use High Surrogate */ + ["\uD9BE", "\uD9BE"], /* Non Private Use High Surrogate */ + ["\uD9BF", "\uD9BF"], /* Non Private Use High Surrogate */ + ["\uD9C0", "\uD9C0"], /* Non Private Use High Surrogate */ + ["\uD9C1", "\uD9C1"], /* Non Private Use High Surrogate */ + ["\uD9C2", "\uD9C2"], /* Non Private Use High Surrogate */ + ["\uD9C3", "\uD9C3"], /* Non Private Use High Surrogate */ + ["\uD9C4", "\uD9C4"], /* Non Private Use High Surrogate */ + ["\uD9C5", "\uD9C5"], /* Non Private Use High Surrogate */ + ["\uD9C6", "\uD9C6"], /* Non Private Use High Surrogate */ + ["\uD9C7", "\uD9C7"], /* Non Private Use High Surrogate */ + ["\uD9C8", "\uD9C8"], /* Non Private Use High Surrogate */ + ["\uD9C9", "\uD9C9"], /* Non Private Use High Surrogate */ + ["\uD9CA", "\uD9CA"], /* Non Private Use High Surrogate */ + ["\uD9CB", "\uD9CB"], /* Non Private Use High Surrogate */ + ["\uD9CC", "\uD9CC"], /* Non Private Use High Surrogate */ + ["\uD9CD", "\uD9CD"], /* Non Private Use High Surrogate */ + ["\uD9CE", "\uD9CE"], /* Non Private Use High Surrogate */ + ["\uD9CF", "\uD9CF"], /* Non Private Use High Surrogate */ + ["\uD9D0", "\uD9D0"], /* Non Private Use High Surrogate */ + ["\uD9D1", "\uD9D1"], /* Non Private Use High Surrogate */ + ["\uD9D2", "\uD9D2"], /* Non Private Use High Surrogate */ + ["\uD9D3", "\uD9D3"], /* Non Private Use High Surrogate */ + ["\uD9D4", "\uD9D4"], /* Non Private Use High Surrogate */ + ["\uD9D5", "\uD9D5"], /* Non Private Use High Surrogate */ + ["\uD9D6", "\uD9D6"], /* Non Private Use High Surrogate */ + ["\uD9D7", "\uD9D7"], /* Non Private Use High Surrogate */ + ["\uD9D8", "\uD9D8"], /* Non Private Use High Surrogate */ + ["\uD9D9", "\uD9D9"], /* Non Private Use High Surrogate */ + ["\uD9DA", "\uD9DA"], /* Non Private Use High Surrogate */ + ["\uD9DB", "\uD9DB"], /* Non Private Use High Surrogate */ + ["\uD9DC", "\uD9DC"], /* Non Private Use High Surrogate */ + ["\uD9DD", "\uD9DD"], /* Non Private Use High Surrogate */ + ["\uD9DE", "\uD9DE"], /* Non Private Use High Surrogate */ + ["\uD9DF", "\uD9DF"], /* Non Private Use High Surrogate */ + ["\uD9E0", "\uD9E0"], /* Non Private Use High Surrogate */ + ["\uD9E1", "\uD9E1"], /* Non Private Use High Surrogate */ + ["\uD9E2", "\uD9E2"], /* Non Private Use High Surrogate */ + ["\uD9E3", "\uD9E3"], /* Non Private Use High Surrogate */ + ["\uD9E4", "\uD9E4"], /* Non Private Use High Surrogate */ + ["\uD9E5", "\uD9E5"], /* Non Private Use High Surrogate */ + ["\uD9E6", "\uD9E6"], /* Non Private Use High Surrogate */ + ["\uD9E7", "\uD9E7"], /* Non Private Use High Surrogate */ + ["\uD9E8", "\uD9E8"], /* Non Private Use High Surrogate */ + ["\uD9E9", "\uD9E9"], /* Non Private Use High Surrogate */ + ["\uD9EA", "\uD9EA"], /* Non Private Use High Surrogate */ + ["\uD9EB", "\uD9EB"], /* Non Private Use High Surrogate */ + ["\uD9EC", "\uD9EC"], /* Non Private Use High Surrogate */ + ["\uD9ED", "\uD9ED"], /* Non Private Use High Surrogate */ + ["\uD9EE", "\uD9EE"], /* Non Private Use High Surrogate */ + ["\uD9EF", "\uD9EF"], /* Non Private Use High Surrogate */ + ["\uD9F0", "\uD9F0"], /* Non Private Use High Surrogate */ + ["\uD9F1", "\uD9F1"], /* Non Private Use High Surrogate */ + ["\uD9F2", "\uD9F2"], /* Non Private Use High Surrogate */ + ["\uD9F3", "\uD9F3"], /* Non Private Use High Surrogate */ + ["\uD9F4", "\uD9F4"], /* Non Private Use High Surrogate */ + ["\uD9F5", "\uD9F5"], /* Non Private Use High Surrogate */ + ["\uD9F6", "\uD9F6"], /* Non Private Use High Surrogate */ + ["\uD9F7", "\uD9F7"], /* Non Private Use High Surrogate */ + ["\uD9F8", "\uD9F8"], /* Non Private Use High Surrogate */ + ["\uD9F9", "\uD9F9"], /* Non Private Use High Surrogate */ + ["\uD9FA", "\uD9FA"], /* Non Private Use High Surrogate */ + ["\uD9FB", "\uD9FB"], /* Non Private Use High Surrogate */ + ["\uD9FC", "\uD9FC"], /* Non Private Use High Surrogate */ + ["\uD9FD", "\uD9FD"], /* Non Private Use High Surrogate */ + ["\uD9FE", "\uD9FE"], /* Non Private Use High Surrogate */ + ["\uD9FF", "\uD9FF"], /* Non Private Use High Surrogate */ + ["\uDA00", "\uDA00"], /* Non Private Use High Surrogate */ + ["\uDA01", "\uDA01"], /* Non Private Use High Surrogate */ + ["\uDA02", "\uDA02"], /* Non Private Use High Surrogate */ + ["\uDA03", "\uDA03"], /* Non Private Use High Surrogate */ + ["\uDA04", "\uDA04"], /* Non Private Use High Surrogate */ + ["\uDA05", "\uDA05"], /* Non Private Use High Surrogate */ + ["\uDA06", "\uDA06"], /* Non Private Use High Surrogate */ + ["\uDA07", "\uDA07"], /* Non Private Use High Surrogate */ + ["\uDA08", "\uDA08"], /* Non Private Use High Surrogate */ + ["\uDA09", "\uDA09"], /* Non Private Use High Surrogate */ + ["\uDA0A", "\uDA0A"], /* Non Private Use High Surrogate */ + ["\uDA0B", "\uDA0B"], /* Non Private Use High Surrogate */ + ["\uDA0C", "\uDA0C"], /* Non Private Use High Surrogate */ + ["\uDA0D", "\uDA0D"], /* Non Private Use High Surrogate */ + ["\uDA0E", "\uDA0E"], /* Non Private Use High Surrogate */ + ["\uDA0F", "\uDA0F"], /* Non Private Use High Surrogate */ + ["\uDA10", "\uDA10"], /* Non Private Use High Surrogate */ + ["\uDA11", "\uDA11"], /* Non Private Use High Surrogate */ + ["\uDA12", "\uDA12"], /* Non Private Use High Surrogate */ + ["\uDA13", "\uDA13"], /* Non Private Use High Surrogate */ + ["\uDA14", "\uDA14"], /* Non Private Use High Surrogate */ + ["\uDA15", "\uDA15"], /* Non Private Use High Surrogate */ + ["\uDA16", "\uDA16"], /* Non Private Use High Surrogate */ + ["\uDA17", "\uDA17"], /* Non Private Use High Surrogate */ + ["\uDA18", "\uDA18"], /* Non Private Use High Surrogate */ + ["\uDA19", "\uDA19"], /* Non Private Use High Surrogate */ + ["\uDA1A", "\uDA1A"], /* Non Private Use High Surrogate */ + ["\uDA1B", "\uDA1B"], /* Non Private Use High Surrogate */ + ["\uDA1C", "\uDA1C"], /* Non Private Use High Surrogate */ + ["\uDA1D", "\uDA1D"], /* Non Private Use High Surrogate */ + ["\uDA1E", "\uDA1E"], /* Non Private Use High Surrogate */ + ["\uDA1F", "\uDA1F"], /* Non Private Use High Surrogate */ + ["\uDA20", "\uDA20"], /* Non Private Use High Surrogate */ + ["\uDA21", "\uDA21"], /* Non Private Use High Surrogate */ + ["\uDA22", "\uDA22"], /* Non Private Use High Surrogate */ + ["\uDA23", "\uDA23"], /* Non Private Use High Surrogate */ + ["\uDA24", "\uDA24"], /* Non Private Use High Surrogate */ + ["\uDA25", "\uDA25"], /* Non Private Use High Surrogate */ + ["\uDA26", "\uDA26"], /* Non Private Use High Surrogate */ + ["\uDA27", "\uDA27"], /* Non Private Use High Surrogate */ + ["\uDA28", "\uDA28"], /* Non Private Use High Surrogate */ + ["\uDA29", "\uDA29"], /* Non Private Use High Surrogate */ + ["\uDA2A", "\uDA2A"], /* Non Private Use High Surrogate */ + ["\uDA2B", "\uDA2B"], /* Non Private Use High Surrogate */ + ["\uDA2C", "\uDA2C"], /* Non Private Use High Surrogate */ + ["\uDA2D", "\uDA2D"], /* Non Private Use High Surrogate */ + ["\uDA2E", "\uDA2E"], /* Non Private Use High Surrogate */ + ["\uDA2F", "\uDA2F"], /* Non Private Use High Surrogate */ + ["\uDA30", "\uDA30"], /* Non Private Use High Surrogate */ + ["\uDA31", "\uDA31"], /* Non Private Use High Surrogate */ + ["\uDA32", "\uDA32"], /* Non Private Use High Surrogate */ + ["\uDA33", "\uDA33"], /* Non Private Use High Surrogate */ + ["\uDA34", "\uDA34"], /* Non Private Use High Surrogate */ + ["\uDA35", "\uDA35"], /* Non Private Use High Surrogate */ + ["\uDA36", "\uDA36"], /* Non Private Use High Surrogate */ + ["\uDA37", "\uDA37"], /* Non Private Use High Surrogate */ + ["\uDA38", "\uDA38"], /* Non Private Use High Surrogate */ + ["\uDA39", "\uDA39"], /* Non Private Use High Surrogate */ + ["\uDA3A", "\uDA3A"], /* Non Private Use High Surrogate */ + ["\uDA3B", "\uDA3B"], /* Non Private Use High Surrogate */ + ["\uDA3C", "\uDA3C"], /* Non Private Use High Surrogate */ + ["\uDA3D", "\uDA3D"], /* Non Private Use High Surrogate */ + ["\uDA3E", "\uDA3E"], /* Non Private Use High Surrogate */ + ["\uDA3F", "\uDA3F"], /* Non Private Use High Surrogate */ + ["\uDA40", "\uDA40"], /* Non Private Use High Surrogate */ + ["\uDA41", "\uDA41"], /* Non Private Use High Surrogate */ + ["\uDA42", "\uDA42"], /* Non Private Use High Surrogate */ + ["\uDA43", "\uDA43"], /* Non Private Use High Surrogate */ + ["\uDA44", "\uDA44"], /* Non Private Use High Surrogate */ + ["\uDA45", "\uDA45"], /* Non Private Use High Surrogate */ + ["\uDA46", "\uDA46"], /* Non Private Use High Surrogate */ + ["\uDA47", "\uDA47"], /* Non Private Use High Surrogate */ + ["\uDA48", "\uDA48"], /* Non Private Use High Surrogate */ + ["\uDA49", "\uDA49"], /* Non Private Use High Surrogate */ + ["\uDA4A", "\uDA4A"], /* Non Private Use High Surrogate */ + ["\uDA4B", "\uDA4B"], /* Non Private Use High Surrogate */ + ["\uDA4C", "\uDA4C"], /* Non Private Use High Surrogate */ + ["\uDA4D", "\uDA4D"], /* Non Private Use High Surrogate */ + ["\uDA4E", "\uDA4E"], /* Non Private Use High Surrogate */ + ["\uDA4F", "\uDA4F"], /* Non Private Use High Surrogate */ + ["\uDA50", "\uDA50"], /* Non Private Use High Surrogate */ + ["\uDA51", "\uDA51"], /* Non Private Use High Surrogate */ + ["\uDA52", "\uDA52"], /* Non Private Use High Surrogate */ + ["\uDA53", "\uDA53"], /* Non Private Use High Surrogate */ + ["\uDA54", "\uDA54"], /* Non Private Use High Surrogate */ + ["\uDA55", "\uDA55"], /* Non Private Use High Surrogate */ + ["\uDA56", "\uDA56"], /* Non Private Use High Surrogate */ + ["\uDA57", "\uDA57"], /* Non Private Use High Surrogate */ + ["\uDA58", "\uDA58"], /* Non Private Use High Surrogate */ + ["\uDA59", "\uDA59"], /* Non Private Use High Surrogate */ + ["\uDA5A", "\uDA5A"], /* Non Private Use High Surrogate */ + ["\uDA5B", "\uDA5B"], /* Non Private Use High Surrogate */ + ["\uDA5C", "\uDA5C"], /* Non Private Use High Surrogate */ + ["\uDA5D", "\uDA5D"], /* Non Private Use High Surrogate */ + ["\uDA5E", "\uDA5E"], /* Non Private Use High Surrogate */ + ["\uDA5F", "\uDA5F"], /* Non Private Use High Surrogate */ + ["\uDA60", "\uDA60"], /* Non Private Use High Surrogate */ + ["\uDA61", "\uDA61"], /* Non Private Use High Surrogate */ + ["\uDA62", "\uDA62"], /* Non Private Use High Surrogate */ + ["\uDA63", "\uDA63"], /* Non Private Use High Surrogate */ + ["\uDA64", "\uDA64"], /* Non Private Use High Surrogate */ + ["\uDA65", "\uDA65"], /* Non Private Use High Surrogate */ + ["\uDA66", "\uDA66"], /* Non Private Use High Surrogate */ + ["\uDA67", "\uDA67"], /* Non Private Use High Surrogate */ + ["\uDA68", "\uDA68"], /* Non Private Use High Surrogate */ + ["\uDA69", "\uDA69"], /* Non Private Use High Surrogate */ + ["\uDA6A", "\uDA6A"], /* Non Private Use High Surrogate */ + ["\uDA6B", "\uDA6B"], /* Non Private Use High Surrogate */ + ["\uDA6C", "\uDA6C"], /* Non Private Use High Surrogate */ + ["\uDA6D", "\uDA6D"], /* Non Private Use High Surrogate */ + ["\uDA6E", "\uDA6E"], /* Non Private Use High Surrogate */ + ["\uDA6F", "\uDA6F"], /* Non Private Use High Surrogate */ + ["\uDA70", "\uDA70"], /* Non Private Use High Surrogate */ + ["\uDA71", "\uDA71"], /* Non Private Use High Surrogate */ + ["\uDA72", "\uDA72"], /* Non Private Use High Surrogate */ + ["\uDA73", "\uDA73"], /* Non Private Use High Surrogate */ + ["\uDA74", "\uDA74"], /* Non Private Use High Surrogate */ + ["\uDA75", "\uDA75"], /* Non Private Use High Surrogate */ + ["\uDA76", "\uDA76"], /* Non Private Use High Surrogate */ + ["\uDA77", "\uDA77"], /* Non Private Use High Surrogate */ + ["\uDA78", "\uDA78"], /* Non Private Use High Surrogate */ + ["\uDA79", "\uDA79"], /* Non Private Use High Surrogate */ + ["\uDA7A", "\uDA7A"], /* Non Private Use High Surrogate */ + ["\uDA7B", "\uDA7B"], /* Non Private Use High Surrogate */ + ["\uDA7C", "\uDA7C"], /* Non Private Use High Surrogate */ + ["\uDA7D", "\uDA7D"], /* Non Private Use High Surrogate */ + ["\uDA7E", "\uDA7E"], /* Non Private Use High Surrogate */ + ["\uDA7F", "\uDA7F"], /* Non Private Use High Surrogate */ + ["\uDA80", "\uDA80"], /* Non Private Use High Surrogate */ + ["\uDA81", "\uDA81"], /* Non Private Use High Surrogate */ + ["\uDA82", "\uDA82"], /* Non Private Use High Surrogate */ + ["\uDA83", "\uDA83"], /* Non Private Use High Surrogate */ + ["\uDA84", "\uDA84"], /* Non Private Use High Surrogate */ + ["\uDA85", "\uDA85"], /* Non Private Use High Surrogate */ + ["\uDA86", "\uDA86"], /* Non Private Use High Surrogate */ + ["\uDA87", "\uDA87"], /* Non Private Use High Surrogate */ + ["\uDA88", "\uDA88"], /* Non Private Use High Surrogate */ + ["\uDA89", "\uDA89"], /* Non Private Use High Surrogate */ + ["\uDA8A", "\uDA8A"], /* Non Private Use High Surrogate */ + ["\uDA8B", "\uDA8B"], /* Non Private Use High Surrogate */ + ["\uDA8C", "\uDA8C"], /* Non Private Use High Surrogate */ + ["\uDA8D", "\uDA8D"], /* Non Private Use High Surrogate */ + ["\uDA8E", "\uDA8E"], /* Non Private Use High Surrogate */ + ["\uDA8F", "\uDA8F"], /* Non Private Use High Surrogate */ + ["\uDA90", "\uDA90"], /* Non Private Use High Surrogate */ + ["\uDA91", "\uDA91"], /* Non Private Use High Surrogate */ + ["\uDA92", "\uDA92"], /* Non Private Use High Surrogate */ + ["\uDA93", "\uDA93"], /* Non Private Use High Surrogate */ + ["\uDA94", "\uDA94"], /* Non Private Use High Surrogate */ + ["\uDA95", "\uDA95"], /* Non Private Use High Surrogate */ + ["\uDA96", "\uDA96"], /* Non Private Use High Surrogate */ + ["\uDA97", "\uDA97"], /* Non Private Use High Surrogate */ + ["\uDA98", "\uDA98"], /* Non Private Use High Surrogate */ + ["\uDA99", "\uDA99"], /* Non Private Use High Surrogate */ + ["\uDA9A", "\uDA9A"], /* Non Private Use High Surrogate */ + ["\uDA9B", "\uDA9B"], /* Non Private Use High Surrogate */ + ["\uDA9C", "\uDA9C"], /* Non Private Use High Surrogate */ + ["\uDA9D", "\uDA9D"], /* Non Private Use High Surrogate */ + ["\uDA9E", "\uDA9E"], /* Non Private Use High Surrogate */ + ["\uDA9F", "\uDA9F"], /* Non Private Use High Surrogate */ + ["\uDAA0", "\uDAA0"], /* Non Private Use High Surrogate */ + ["\uDAA1", "\uDAA1"], /* Non Private Use High Surrogate */ + ["\uDAA2", "\uDAA2"], /* Non Private Use High Surrogate */ + ["\uDAA3", "\uDAA3"], /* Non Private Use High Surrogate */ + ["\uDAA4", "\uDAA4"], /* Non Private Use High Surrogate */ + ["\uDAA5", "\uDAA5"], /* Non Private Use High Surrogate */ + ["\uDAA6", "\uDAA6"], /* Non Private Use High Surrogate */ + ["\uDAA7", "\uDAA7"], /* Non Private Use High Surrogate */ + ["\uDAA8", "\uDAA8"], /* Non Private Use High Surrogate */ + ["\uDAA9", "\uDAA9"], /* Non Private Use High Surrogate */ + ["\uDAAA", "\uDAAA"], /* Non Private Use High Surrogate */ + ["\uDAAB", "\uDAAB"], /* Non Private Use High Surrogate */ + ["\uDAAC", "\uDAAC"], /* Non Private Use High Surrogate */ + ["\uDAAD", "\uDAAD"], /* Non Private Use High Surrogate */ + ["\uDAAE", "\uDAAE"], /* Non Private Use High Surrogate */ + ["\uDAAF", "\uDAAF"], /* Non Private Use High Surrogate */ + ["\uDAB0", "\uDAB0"], /* Non Private Use High Surrogate */ + ["\uDAB1", "\uDAB1"], /* Non Private Use High Surrogate */ + ["\uDAB2", "\uDAB2"], /* Non Private Use High Surrogate */ + ["\uDAB3", "\uDAB3"], /* Non Private Use High Surrogate */ + ["\uDAB4", "\uDAB4"], /* Non Private Use High Surrogate */ + ["\uDAB5", "\uDAB5"], /* Non Private Use High Surrogate */ + ["\uDAB6", "\uDAB6"], /* Non Private Use High Surrogate */ + ["\uDAB7", "\uDAB7"], /* Non Private Use High Surrogate */ + ["\uDAB8", "\uDAB8"], /* Non Private Use High Surrogate */ + ["\uDAB9", "\uDAB9"], /* Non Private Use High Surrogate */ + ["\uDABA", "\uDABA"], /* Non Private Use High Surrogate */ + ["\uDABB", "\uDABB"], /* Non Private Use High Surrogate */ + ["\uDABC", "\uDABC"], /* Non Private Use High Surrogate */ + ["\uDABD", "\uDABD"], /* Non Private Use High Surrogate */ + ["\uDABE", "\uDABE"], /* Non Private Use High Surrogate */ + ["\uDABF", "\uDABF"], /* Non Private Use High Surrogate */ + ["\uDAC0", "\uDAC0"], /* Non Private Use High Surrogate */ + ["\uDAC1", "\uDAC1"], /* Non Private Use High Surrogate */ + ["\uDAC2", "\uDAC2"], /* Non Private Use High Surrogate */ + ["\uDAC3", "\uDAC3"], /* Non Private Use High Surrogate */ + ["\uDAC4", "\uDAC4"], /* Non Private Use High Surrogate */ + ["\uDAC5", "\uDAC5"], /* Non Private Use High Surrogate */ + ["\uDAC6", "\uDAC6"], /* Non Private Use High Surrogate */ + ["\uDAC7", "\uDAC7"], /* Non Private Use High Surrogate */ + ["\uDAC8", "\uDAC8"], /* Non Private Use High Surrogate */ + ["\uDAC9", "\uDAC9"], /* Non Private Use High Surrogate */ + ["\uDACA", "\uDACA"], /* Non Private Use High Surrogate */ + ["\uDACB", "\uDACB"], /* Non Private Use High Surrogate */ + ["\uDACC", "\uDACC"], /* Non Private Use High Surrogate */ + ["\uDACD", "\uDACD"], /* Non Private Use High Surrogate */ + ["\uDACE", "\uDACE"], /* Non Private Use High Surrogate */ + ["\uDACF", "\uDACF"], /* Non Private Use High Surrogate */ + ["\uDAD0", "\uDAD0"], /* Non Private Use High Surrogate */ + ["\uDAD1", "\uDAD1"], /* Non Private Use High Surrogate */ + ["\uDAD2", "\uDAD2"], /* Non Private Use High Surrogate */ + ["\uDAD3", "\uDAD3"], /* Non Private Use High Surrogate */ + ["\uDAD4", "\uDAD4"], /* Non Private Use High Surrogate */ + ["\uDAD5", "\uDAD5"], /* Non Private Use High Surrogate */ + ["\uDAD6", "\uDAD6"], /* Non Private Use High Surrogate */ + ["\uDAD7", "\uDAD7"], /* Non Private Use High Surrogate */ + ["\uDAD8", "\uDAD8"], /* Non Private Use High Surrogate */ + ["\uDAD9", "\uDAD9"], /* Non Private Use High Surrogate */ + ["\uDADA", "\uDADA"], /* Non Private Use High Surrogate */ + ["\uDADB", "\uDADB"], /* Non Private Use High Surrogate */ + ["\uDADC", "\uDADC"], /* Non Private Use High Surrogate */ + ["\uDADD", "\uDADD"], /* Non Private Use High Surrogate */ + ["\uDADE", "\uDADE"], /* Non Private Use High Surrogate */ + ["\uDADF", "\uDADF"], /* Non Private Use High Surrogate */ + ["\uDAE0", "\uDAE0"], /* Non Private Use High Surrogate */ + ["\uDAE1", "\uDAE1"], /* Non Private Use High Surrogate */ + ["\uDAE2", "\uDAE2"], /* Non Private Use High Surrogate */ + ["\uDAE3", "\uDAE3"], /* Non Private Use High Surrogate */ + ["\uDAE4", "\uDAE4"], /* Non Private Use High Surrogate */ + ["\uDAE5", "\uDAE5"], /* Non Private Use High Surrogate */ + ["\uDAE6", "\uDAE6"], /* Non Private Use High Surrogate */ + ["\uDAE7", "\uDAE7"], /* Non Private Use High Surrogate */ + ["\uDAE8", "\uDAE8"], /* Non Private Use High Surrogate */ + ["\uDAE9", "\uDAE9"], /* Non Private Use High Surrogate */ + ["\uDAEA", "\uDAEA"], /* Non Private Use High Surrogate */ + ["\uDAEB", "\uDAEB"], /* Non Private Use High Surrogate */ + ["\uDAEC", "\uDAEC"], /* Non Private Use High Surrogate */ + ["\uDAED", "\uDAED"], /* Non Private Use High Surrogate */ + ["\uDAEE", "\uDAEE"], /* Non Private Use High Surrogate */ + ["\uDAEF", "\uDAEF"], /* Non Private Use High Surrogate */ + ["\uDAF0", "\uDAF0"], /* Non Private Use High Surrogate */ + ["\uDAF1", "\uDAF1"], /* Non Private Use High Surrogate */ + ["\uDAF2", "\uDAF2"], /* Non Private Use High Surrogate */ + ["\uDAF3", "\uDAF3"], /* Non Private Use High Surrogate */ + ["\uDAF4", "\uDAF4"], /* Non Private Use High Surrogate */ + ["\uDAF5", "\uDAF5"], /* Non Private Use High Surrogate */ + ["\uDAF6", "\uDAF6"], /* Non Private Use High Surrogate */ + ["\uDAF7", "\uDAF7"], /* Non Private Use High Surrogate */ + ["\uDAF8", "\uDAF8"], /* Non Private Use High Surrogate */ + ["\uDAF9", "\uDAF9"], /* Non Private Use High Surrogate */ + ["\uDAFA", "\uDAFA"], /* Non Private Use High Surrogate */ + ["\uDAFB", "\uDAFB"], /* Non Private Use High Surrogate */ + ["\uDAFC", "\uDAFC"], /* Non Private Use High Surrogate */ + ["\uDAFD", "\uDAFD"], /* Non Private Use High Surrogate */ + ["\uDAFE", "\uDAFE"], /* Non Private Use High Surrogate */ + ["\uDAFF", "\uDAFF"], /* Non Private Use High Surrogate */ + ["\uDB00", "\uDB00"], /* Non Private Use High Surrogate */ + ["\uDB01", "\uDB01"], /* Non Private Use High Surrogate */ + ["\uDB02", "\uDB02"], /* Non Private Use High Surrogate */ + ["\uDB03", "\uDB03"], /* Non Private Use High Surrogate */ + ["\uDB04", "\uDB04"], /* Non Private Use High Surrogate */ + ["\uDB05", "\uDB05"], /* Non Private Use High Surrogate */ + ["\uDB06", "\uDB06"], /* Non Private Use High Surrogate */ + ["\uDB07", "\uDB07"], /* Non Private Use High Surrogate */ + ["\uDB08", "\uDB08"], /* Non Private Use High Surrogate */ + ["\uDB09", "\uDB09"], /* Non Private Use High Surrogate */ + ["\uDB0A", "\uDB0A"], /* Non Private Use High Surrogate */ + ["\uDB0B", "\uDB0B"], /* Non Private Use High Surrogate */ + ["\uDB0C", "\uDB0C"], /* Non Private Use High Surrogate */ + ["\uDB0D", "\uDB0D"], /* Non Private Use High Surrogate */ + ["\uDB0E", "\uDB0E"], /* Non Private Use High Surrogate */ + ["\uDB0F", "\uDB0F"], /* Non Private Use High Surrogate */ + ["\uDB10", "\uDB10"], /* Non Private Use High Surrogate */ + ["\uDB11", "\uDB11"], /* Non Private Use High Surrogate */ + ["\uDB12", "\uDB12"], /* Non Private Use High Surrogate */ + ["\uDB13", "\uDB13"], /* Non Private Use High Surrogate */ + ["\uDB14", "\uDB14"], /* Non Private Use High Surrogate */ + ["\uDB15", "\uDB15"], /* Non Private Use High Surrogate */ + ["\uDB16", "\uDB16"], /* Non Private Use High Surrogate */ + ["\uDB17", "\uDB17"], /* Non Private Use High Surrogate */ + ["\uDB18", "\uDB18"], /* Non Private Use High Surrogate */ + ["\uDB19", "\uDB19"], /* Non Private Use High Surrogate */ + ["\uDB1A", "\uDB1A"], /* Non Private Use High Surrogate */ + ["\uDB1B", "\uDB1B"], /* Non Private Use High Surrogate */ + ["\uDB1C", "\uDB1C"], /* Non Private Use High Surrogate */ + ["\uDB1D", "\uDB1D"], /* Non Private Use High Surrogate */ + ["\uDB1E", "\uDB1E"], /* Non Private Use High Surrogate */ + ["\uDB1F", "\uDB1F"], /* Non Private Use High Surrogate */ + ["\uDB20", "\uDB20"], /* Non Private Use High Surrogate */ + ["\uDB21", "\uDB21"], /* Non Private Use High Surrogate */ + ["\uDB22", "\uDB22"], /* Non Private Use High Surrogate */ + ["\uDB23", "\uDB23"], /* Non Private Use High Surrogate */ + ["\uDB24", "\uDB24"], /* Non Private Use High Surrogate */ + ["\uDB25", "\uDB25"], /* Non Private Use High Surrogate */ + ["\uDB26", "\uDB26"], /* Non Private Use High Surrogate */ + ["\uDB27", "\uDB27"], /* Non Private Use High Surrogate */ + ["\uDB28", "\uDB28"], /* Non Private Use High Surrogate */ + ["\uDB29", "\uDB29"], /* Non Private Use High Surrogate */ + ["\uDB2A", "\uDB2A"], /* Non Private Use High Surrogate */ + ["\uDB2B", "\uDB2B"], /* Non Private Use High Surrogate */ + ["\uDB2C", "\uDB2C"], /* Non Private Use High Surrogate */ + ["\uDB2D", "\uDB2D"], /* Non Private Use High Surrogate */ + ["\uDB2E", "\uDB2E"], /* Non Private Use High Surrogate */ + ["\uDB2F", "\uDB2F"], /* Non Private Use High Surrogate */ + ["\uDB30", "\uDB30"], /* Non Private Use High Surrogate */ + ["\uDB31", "\uDB31"], /* Non Private Use High Surrogate */ + ["\uDB32", "\uDB32"], /* Non Private Use High Surrogate */ + ["\uDB33", "\uDB33"], /* Non Private Use High Surrogate */ + ["\uDB34", "\uDB34"], /* Non Private Use High Surrogate */ + ["\uDB35", "\uDB35"], /* Non Private Use High Surrogate */ + ["\uDB36", "\uDB36"], /* Non Private Use High Surrogate */ + ["\uDB37", "\uDB37"], /* Non Private Use High Surrogate */ + ["\uDB38", "\uDB38"], /* Non Private Use High Surrogate */ + ["\uDB39", "\uDB39"], /* Non Private Use High Surrogate */ + ["\uDB3A", "\uDB3A"], /* Non Private Use High Surrogate */ + ["\uDB3B", "\uDB3B"], /* Non Private Use High Surrogate */ + ["\uDB3C", "\uDB3C"], /* Non Private Use High Surrogate */ + ["\uDB3D", "\uDB3D"], /* Non Private Use High Surrogate */ + ["\uDB3E", "\uDB3E"], /* Non Private Use High Surrogate */ + ["\uDB3F", "\uDB3F"], /* Non Private Use High Surrogate */ + ["\uDB40", "\uDB40"], /* Non Private Use High Surrogate */ + ["\uDB41", "\uDB41"], /* Non Private Use High Surrogate */ + ["\uDB42", "\uDB42"], /* Non Private Use High Surrogate */ + ["\uDB43", "\uDB43"], /* Non Private Use High Surrogate */ + ["\uDB44", "\uDB44"], /* Non Private Use High Surrogate */ + ["\uDB45", "\uDB45"], /* Non Private Use High Surrogate */ + ["\uDB46", "\uDB46"], /* Non Private Use High Surrogate */ + ["\uDB47", "\uDB47"], /* Non Private Use High Surrogate */ + ["\uDB48", "\uDB48"], /* Non Private Use High Surrogate */ + ["\uDB49", "\uDB49"], /* Non Private Use High Surrogate */ + ["\uDB4A", "\uDB4A"], /* Non Private Use High Surrogate */ + ["\uDB4B", "\uDB4B"], /* Non Private Use High Surrogate */ + ["\uDB4C", "\uDB4C"], /* Non Private Use High Surrogate */ + ["\uDB4D", "\uDB4D"], /* Non Private Use High Surrogate */ + ["\uDB4E", "\uDB4E"], /* Non Private Use High Surrogate */ + ["\uDB4F", "\uDB4F"], /* Non Private Use High Surrogate */ + ["\uDB50", "\uDB50"], /* Non Private Use High Surrogate */ + ["\uDB51", "\uDB51"], /* Non Private Use High Surrogate */ + ["\uDB52", "\uDB52"], /* Non Private Use High Surrogate */ + ["\uDB53", "\uDB53"], /* Non Private Use High Surrogate */ + ["\uDB54", "\uDB54"], /* Non Private Use High Surrogate */ + ["\uDB55", "\uDB55"], /* Non Private Use High Surrogate */ + ["\uDB56", "\uDB56"], /* Non Private Use High Surrogate */ + ["\uDB57", "\uDB57"], /* Non Private Use High Surrogate */ + ["\uDB58", "\uDB58"], /* Non Private Use High Surrogate */ + ["\uDB59", "\uDB59"], /* Non Private Use High Surrogate */ + ["\uDB5A", "\uDB5A"], /* Non Private Use High Surrogate */ + ["\uDB5B", "\uDB5B"], /* Non Private Use High Surrogate */ + ["\uDB5C", "\uDB5C"], /* Non Private Use High Surrogate */ + ["\uDB5D", "\uDB5D"], /* Non Private Use High Surrogate */ + ["\uDB5E", "\uDB5E"], /* Non Private Use High Surrogate */ + ["\uDB5F", "\uDB5F"], /* Non Private Use High Surrogate */ + ["\uDB60", "\uDB60"], /* Non Private Use High Surrogate */ + ["\uDB61", "\uDB61"], /* Non Private Use High Surrogate */ + ["\uDB62", "\uDB62"], /* Non Private Use High Surrogate */ + ["\uDB63", "\uDB63"], /* Non Private Use High Surrogate */ + ["\uDB64", "\uDB64"], /* Non Private Use High Surrogate */ + ["\uDB65", "\uDB65"], /* Non Private Use High Surrogate */ + ["\uDB66", "\uDB66"], /* Non Private Use High Surrogate */ + ["\uDB67", "\uDB67"], /* Non Private Use High Surrogate */ + ["\uDB68", "\uDB68"], /* Non Private Use High Surrogate */ + ["\uDB69", "\uDB69"], /* Non Private Use High Surrogate */ + ["\uDB6A", "\uDB6A"], /* Non Private Use High Surrogate */ + ["\uDB6B", "\uDB6B"], /* Non Private Use High Surrogate */ + ["\uDB6C", "\uDB6C"], /* Non Private Use High Surrogate */ + ["\uDB6D", "\uDB6D"], /* Non Private Use High Surrogate */ + ["\uDB6E", "\uDB6E"], /* Non Private Use High Surrogate */ + ["\uDB6F", "\uDB6F"], /* Non Private Use High Surrogate */ + ["\uDB70", "\uDB70"], /* Non Private Use High Surrogate */ + ["\uDB71", "\uDB71"], /* Non Private Use High Surrogate */ + ["\uDB72", "\uDB72"], /* Non Private Use High Surrogate */ + ["\uDB73", "\uDB73"], /* Non Private Use High Surrogate */ + ["\uDB74", "\uDB74"], /* Non Private Use High Surrogate */ + ["\uDB75", "\uDB75"], /* Non Private Use High Surrogate */ + ["\uDB76", "\uDB76"], /* Non Private Use High Surrogate */ + ["\uDB77", "\uDB77"], /* Non Private Use High Surrogate */ + ["\uDB78", "\uDB78"], /* Non Private Use High Surrogate */ + ["\uDB79", "\uDB79"], /* Non Private Use High Surrogate */ + ["\uDB7A", "\uDB7A"], /* Non Private Use High Surrogate */ + ["\uDB7B", "\uDB7B"], /* Non Private Use High Surrogate */ + ["\uDB7C", "\uDB7C"], /* Non Private Use High Surrogate */ + ["\uDB7D", "\uDB7D"], /* Non Private Use High Surrogate */ + ["\uDB7E", "\uDB7E"], /* Non Private Use High Surrogate */ + ["\uDB7F", "\uDB7F"], /* Non Private Use High Surrogate */ + ["\uDB80", "\uDB80"], /* Private Use High Surrogate */ + ["\uDB81", "\uDB81"], /* Private Use High Surrogate */ + ["\uDB82", "\uDB82"], /* Private Use High Surrogate */ + ["\uDB83", "\uDB83"], /* Private Use High Surrogate */ + ["\uDB84", "\uDB84"], /* Private Use High Surrogate */ + ["\uDB85", "\uDB85"], /* Private Use High Surrogate */ + ["\uDB86", "\uDB86"], /* Private Use High Surrogate */ + ["\uDB87", "\uDB87"], /* Private Use High Surrogate */ + ["\uDB88", "\uDB88"], /* Private Use High Surrogate */ + ["\uDB89", "\uDB89"], /* Private Use High Surrogate */ + ["\uDB8A", "\uDB8A"], /* Private Use High Surrogate */ + ["\uDB8B", "\uDB8B"], /* Private Use High Surrogate */ + ["\uDB8C", "\uDB8C"], /* Private Use High Surrogate */ + ["\uDB8D", "\uDB8D"], /* Private Use High Surrogate */ + ["\uDB8E", "\uDB8E"], /* Private Use High Surrogate */ + ["\uDB8F", "\uDB8F"], /* Private Use High Surrogate */ + ["\uDB90", "\uDB90"], /* Private Use High Surrogate */ + ["\uDB91", "\uDB91"], /* Private Use High Surrogate */ + ["\uDB92", "\uDB92"], /* Private Use High Surrogate */ + ["\uDB93", "\uDB93"], /* Private Use High Surrogate */ + ["\uDB94", "\uDB94"], /* Private Use High Surrogate */ + ["\uDB95", "\uDB95"], /* Private Use High Surrogate */ + ["\uDB96", "\uDB96"], /* Private Use High Surrogate */ + ["\uDB97", "\uDB97"], /* Private Use High Surrogate */ + ["\uDB98", "\uDB98"], /* Private Use High Surrogate */ + ["\uDB99", "\uDB99"], /* Private Use High Surrogate */ + ["\uDB9A", "\uDB9A"], /* Private Use High Surrogate */ + ["\uDB9B", "\uDB9B"], /* Private Use High Surrogate */ + ["\uDB9C", "\uDB9C"], /* Private Use High Surrogate */ + ["\uDB9D", "\uDB9D"], /* Private Use High Surrogate */ + ["\uDB9E", "\uDB9E"], /* Private Use High Surrogate */ + ["\uDB9F", "\uDB9F"], /* Private Use High Surrogate */ + ["\uDBA0", "\uDBA0"], /* Private Use High Surrogate */ + ["\uDBA1", "\uDBA1"], /* Private Use High Surrogate */ + ["\uDBA2", "\uDBA2"], /* Private Use High Surrogate */ + ["\uDBA3", "\uDBA3"], /* Private Use High Surrogate */ + ["\uDBA4", "\uDBA4"], /* Private Use High Surrogate */ + ["\uDBA5", "\uDBA5"], /* Private Use High Surrogate */ + ["\uDBA6", "\uDBA6"], /* Private Use High Surrogate */ + ["\uDBA7", "\uDBA7"], /* Private Use High Surrogate */ + ["\uDBA8", "\uDBA8"], /* Private Use High Surrogate */ + ["\uDBA9", "\uDBA9"], /* Private Use High Surrogate */ + ["\uDBAA", "\uDBAA"], /* Private Use High Surrogate */ + ["\uDBAB", "\uDBAB"], /* Private Use High Surrogate */ + ["\uDBAC", "\uDBAC"], /* Private Use High Surrogate */ + ["\uDBAD", "\uDBAD"], /* Private Use High Surrogate */ + ["\uDBAE", "\uDBAE"], /* Private Use High Surrogate */ + ["\uDBAF", "\uDBAF"], /* Private Use High Surrogate */ + ["\uDBB0", "\uDBB0"], /* Private Use High Surrogate */ + ["\uDBB1", "\uDBB1"], /* Private Use High Surrogate */ + ["\uDBB2", "\uDBB2"], /* Private Use High Surrogate */ + ["\uDBB3", "\uDBB3"], /* Private Use High Surrogate */ + ["\uDBB4", "\uDBB4"], /* Private Use High Surrogate */ + ["\uDBB5", "\uDBB5"], /* Private Use High Surrogate */ + ["\uDBB6", "\uDBB6"], /* Private Use High Surrogate */ + ["\uDBB7", "\uDBB7"], /* Private Use High Surrogate */ + ["\uDBB8", "\uDBB8"], /* Private Use High Surrogate */ + ["\uDBB9", "\uDBB9"], /* Private Use High Surrogate */ + ["\uDBBA", "\uDBBA"], /* Private Use High Surrogate */ + ["\uDBBB", "\uDBBB"], /* Private Use High Surrogate */ + ["\uDBBC", "\uDBBC"], /* Private Use High Surrogate */ + ["\uDBBD", "\uDBBD"], /* Private Use High Surrogate */ + ["\uDBBE", "\uDBBE"], /* Private Use High Surrogate */ + ["\uDBBF", "\uDBBF"], /* Private Use High Surrogate */ + ["\uDBC0", "\uDBC0"], /* Private Use High Surrogate */ + ["\uDBC1", "\uDBC1"], /* Private Use High Surrogate */ + ["\uDBC2", "\uDBC2"], /* Private Use High Surrogate */ + ["\uDBC3", "\uDBC3"], /* Private Use High Surrogate */ + ["\uDBC4", "\uDBC4"], /* Private Use High Surrogate */ + ["\uDBC5", "\uDBC5"], /* Private Use High Surrogate */ + ["\uDBC6", "\uDBC6"], /* Private Use High Surrogate */ + ["\uDBC7", "\uDBC7"], /* Private Use High Surrogate */ + ["\uDBC8", "\uDBC8"], /* Private Use High Surrogate */ + ["\uDBC9", "\uDBC9"], /* Private Use High Surrogate */ + ["\uDBCA", "\uDBCA"], /* Private Use High Surrogate */ + ["\uDBCB", "\uDBCB"], /* Private Use High Surrogate */ + ["\uDBCC", "\uDBCC"], /* Private Use High Surrogate */ + ["\uDBCD", "\uDBCD"], /* Private Use High Surrogate */ + ["\uDBCE", "\uDBCE"], /* Private Use High Surrogate */ + ["\uDBCF", "\uDBCF"], /* Private Use High Surrogate */ + ["\uDBD0", "\uDBD0"], /* Private Use High Surrogate */ + ["\uDBD1", "\uDBD1"], /* Private Use High Surrogate */ + ["\uDBD2", "\uDBD2"], /* Private Use High Surrogate */ + ["\uDBD3", "\uDBD3"], /* Private Use High Surrogate */ + ["\uDBD4", "\uDBD4"], /* Private Use High Surrogate */ + ["\uDBD5", "\uDBD5"], /* Private Use High Surrogate */ + ["\uDBD6", "\uDBD6"], /* Private Use High Surrogate */ + ["\uDBD7", "\uDBD7"], /* Private Use High Surrogate */ + ["\uDBD8", "\uDBD8"], /* Private Use High Surrogate */ + ["\uDBD9", "\uDBD9"], /* Private Use High Surrogate */ + ["\uDBDA", "\uDBDA"], /* Private Use High Surrogate */ + ["\uDBDB", "\uDBDB"], /* Private Use High Surrogate */ + ["\uDBDC", "\uDBDC"], /* Private Use High Surrogate */ + ["\uDBDD", "\uDBDD"], /* Private Use High Surrogate */ + ["\uDBDE", "\uDBDE"], /* Private Use High Surrogate */ + ["\uDBDF", "\uDBDF"], /* Private Use High Surrogate */ + ["\uDBE0", "\uDBE0"], /* Private Use High Surrogate */ + ["\uDBE1", "\uDBE1"], /* Private Use High Surrogate */ + ["\uDBE2", "\uDBE2"], /* Private Use High Surrogate */ + ["\uDBE3", "\uDBE3"], /* Private Use High Surrogate */ + ["\uDBE4", "\uDBE4"], /* Private Use High Surrogate */ + ["\uDBE5", "\uDBE5"], /* Private Use High Surrogate */ + ["\uDBE6", "\uDBE6"], /* Private Use High Surrogate */ + ["\uDBE7", "\uDBE7"], /* Private Use High Surrogate */ + ["\uDBE8", "\uDBE8"], /* Private Use High Surrogate */ + ["\uDBE9", "\uDBE9"], /* Private Use High Surrogate */ + ["\uDBEA", "\uDBEA"], /* Private Use High Surrogate */ + ["\uDBEB", "\uDBEB"], /* Private Use High Surrogate */ + ["\uDBEC", "\uDBEC"], /* Private Use High Surrogate */ + ["\uDBED", "\uDBED"], /* Private Use High Surrogate */ + ["\uDBEE", "\uDBEE"], /* Private Use High Surrogate */ + ["\uDBEF", "\uDBEF"], /* Private Use High Surrogate */ + ["\uDBF0", "\uDBF0"], /* Private Use High Surrogate */ + ["\uDBF1", "\uDBF1"], /* Private Use High Surrogate */ + ["\uDBF2", "\uDBF2"], /* Private Use High Surrogate */ + ["\uDBF3", "\uDBF3"], /* Private Use High Surrogate */ + ["\uDBF4", "\uDBF4"], /* Private Use High Surrogate */ + ["\uDBF5", "\uDBF5"], /* Private Use High Surrogate */ + ["\uDBF6", "\uDBF6"], /* Private Use High Surrogate */ + ["\uDBF7", "\uDBF7"], /* Private Use High Surrogate */ + ["\uDBF8", "\uDBF8"], /* Private Use High Surrogate */ + ["\uDBF9", "\uDBF9"], /* Private Use High Surrogate */ + ["\uDBFA", "\uDBFA"], /* Private Use High Surrogate */ + ["\uDBFB", "\uDBFB"], /* Private Use High Surrogate */ + ["\uDBFC", "\uDBFC"], /* Private Use High Surrogate */ + ["\uDBFD", "\uDBFD"], /* Private Use High Surrogate */ + ["\uDBFE", "\uDBFE"], /* Private Use High Surrogate */ + ["\uDBFF", "\uDBFF"], /* Private Use High Surrogate */ + ["\uDC00", "\uDC00"], /* Low Surrogate */ + ["\uDC01", "\uDC01"], /* Low Surrogate */ + ["\uDC02", "\uDC02"], /* Low Surrogate */ + ["\uDC03", "\uDC03"], /* Low Surrogate */ + ["\uDC04", "\uDC04"], /* Low Surrogate */ + ["\uDC05", "\uDC05"], /* Low Surrogate */ + ["\uDC06", "\uDC06"], /* Low Surrogate */ + ["\uDC07", "\uDC07"], /* Low Surrogate */ + ["\uDC08", "\uDC08"], /* Low Surrogate */ + ["\uDC09", "\uDC09"], /* Low Surrogate */ + ["\uDC0A", "\uDC0A"], /* Low Surrogate */ + ["\uDC0B", "\uDC0B"], /* Low Surrogate */ + ["\uDC0C", "\uDC0C"], /* Low Surrogate */ + ["\uDC0D", "\uDC0D"], /* Low Surrogate */ + ["\uDC0E", "\uDC0E"], /* Low Surrogate */ + ["\uDC0F", "\uDC0F"], /* Low Surrogate */ + ["\uDC10", "\uDC10"], /* Low Surrogate */ + ["\uDC11", "\uDC11"], /* Low Surrogate */ + ["\uDC12", "\uDC12"], /* Low Surrogate */ + ["\uDC13", "\uDC13"], /* Low Surrogate */ + ["\uDC14", "\uDC14"], /* Low Surrogate */ + ["\uDC15", "\uDC15"], /* Low Surrogate */ + ["\uDC16", "\uDC16"], /* Low Surrogate */ + ["\uDC17", "\uDC17"], /* Low Surrogate */ + ["\uDC18", "\uDC18"], /* Low Surrogate */ + ["\uDC19", "\uDC19"], /* Low Surrogate */ + ["\uDC1A", "\uDC1A"], /* Low Surrogate */ + ["\uDC1B", "\uDC1B"], /* Low Surrogate */ + ["\uDC1C", "\uDC1C"], /* Low Surrogate */ + ["\uDC1D", "\uDC1D"], /* Low Surrogate */ + ["\uDC1E", "\uDC1E"], /* Low Surrogate */ + ["\uDC1F", "\uDC1F"], /* Low Surrogate */ + ["\uDC20", "\uDC20"], /* Low Surrogate */ + ["\uDC21", "\uDC21"], /* Low Surrogate */ + ["\uDC22", "\uDC22"], /* Low Surrogate */ + ["\uDC23", "\uDC23"], /* Low Surrogate */ + ["\uDC24", "\uDC24"], /* Low Surrogate */ + ["\uDC25", "\uDC25"], /* Low Surrogate */ + ["\uDC26", "\uDC26"], /* Low Surrogate */ + ["\uDC27", "\uDC27"], /* Low Surrogate */ + ["\uDC28", "\uDC28"], /* Low Surrogate */ + ["\uDC29", "\uDC29"], /* Low Surrogate */ + ["\uDC2A", "\uDC2A"], /* Low Surrogate */ + ["\uDC2B", "\uDC2B"], /* Low Surrogate */ + ["\uDC2C", "\uDC2C"], /* Low Surrogate */ + ["\uDC2D", "\uDC2D"], /* Low Surrogate */ + ["\uDC2E", "\uDC2E"], /* Low Surrogate */ + ["\uDC2F", "\uDC2F"], /* Low Surrogate */ + ["\uDC30", "\uDC30"], /* Low Surrogate */ + ["\uDC31", "\uDC31"], /* Low Surrogate */ + ["\uDC32", "\uDC32"], /* Low Surrogate */ + ["\uDC33", "\uDC33"], /* Low Surrogate */ + ["\uDC34", "\uDC34"], /* Low Surrogate */ + ["\uDC35", "\uDC35"], /* Low Surrogate */ + ["\uDC36", "\uDC36"], /* Low Surrogate */ + ["\uDC37", "\uDC37"], /* Low Surrogate */ + ["\uDC38", "\uDC38"], /* Low Surrogate */ + ["\uDC39", "\uDC39"], /* Low Surrogate */ + ["\uDC3A", "\uDC3A"], /* Low Surrogate */ + ["\uDC3B", "\uDC3B"], /* Low Surrogate */ + ["\uDC3C", "\uDC3C"], /* Low Surrogate */ + ["\uDC3D", "\uDC3D"], /* Low Surrogate */ + ["\uDC3E", "\uDC3E"], /* Low Surrogate */ + ["\uDC3F", "\uDC3F"], /* Low Surrogate */ + ["\uDC40", "\uDC40"], /* Low Surrogate */ + ["\uDC41", "\uDC41"], /* Low Surrogate */ + ["\uDC42", "\uDC42"], /* Low Surrogate */ + ["\uDC43", "\uDC43"], /* Low Surrogate */ + ["\uDC44", "\uDC44"], /* Low Surrogate */ + ["\uDC45", "\uDC45"], /* Low Surrogate */ + ["\uDC46", "\uDC46"], /* Low Surrogate */ + ["\uDC47", "\uDC47"], /* Low Surrogate */ + ["\uDC48", "\uDC48"], /* Low Surrogate */ + ["\uDC49", "\uDC49"], /* Low Surrogate */ + ["\uDC4A", "\uDC4A"], /* Low Surrogate */ + ["\uDC4B", "\uDC4B"], /* Low Surrogate */ + ["\uDC4C", "\uDC4C"], /* Low Surrogate */ + ["\uDC4D", "\uDC4D"], /* Low Surrogate */ + ["\uDC4E", "\uDC4E"], /* Low Surrogate */ + ["\uDC4F", "\uDC4F"], /* Low Surrogate */ + ["\uDC50", "\uDC50"], /* Low Surrogate */ + ["\uDC51", "\uDC51"], /* Low Surrogate */ + ["\uDC52", "\uDC52"], /* Low Surrogate */ + ["\uDC53", "\uDC53"], /* Low Surrogate */ + ["\uDC54", "\uDC54"], /* Low Surrogate */ + ["\uDC55", "\uDC55"], /* Low Surrogate */ + ["\uDC56", "\uDC56"], /* Low Surrogate */ + ["\uDC57", "\uDC57"], /* Low Surrogate */ + ["\uDC58", "\uDC58"], /* Low Surrogate */ + ["\uDC59", "\uDC59"], /* Low Surrogate */ + ["\uDC5A", "\uDC5A"], /* Low Surrogate */ + ["\uDC5B", "\uDC5B"], /* Low Surrogate */ + ["\uDC5C", "\uDC5C"], /* Low Surrogate */ + ["\uDC5D", "\uDC5D"], /* Low Surrogate */ + ["\uDC5E", "\uDC5E"], /* Low Surrogate */ + ["\uDC5F", "\uDC5F"], /* Low Surrogate */ + ["\uDC60", "\uDC60"], /* Low Surrogate */ + ["\uDC61", "\uDC61"], /* Low Surrogate */ + ["\uDC62", "\uDC62"], /* Low Surrogate */ + ["\uDC63", "\uDC63"], /* Low Surrogate */ + ["\uDC64", "\uDC64"], /* Low Surrogate */ + ["\uDC65", "\uDC65"], /* Low Surrogate */ + ["\uDC66", "\uDC66"], /* Low Surrogate */ + ["\uDC67", "\uDC67"], /* Low Surrogate */ + ["\uDC68", "\uDC68"], /* Low Surrogate */ + ["\uDC69", "\uDC69"], /* Low Surrogate */ + ["\uDC6A", "\uDC6A"], /* Low Surrogate */ + ["\uDC6B", "\uDC6B"], /* Low Surrogate */ + ["\uDC6C", "\uDC6C"], /* Low Surrogate */ + ["\uDC6D", "\uDC6D"], /* Low Surrogate */ + ["\uDC6E", "\uDC6E"], /* Low Surrogate */ + ["\uDC6F", "\uDC6F"], /* Low Surrogate */ + ["\uDC70", "\uDC70"], /* Low Surrogate */ + ["\uDC71", "\uDC71"], /* Low Surrogate */ + ["\uDC72", "\uDC72"], /* Low Surrogate */ + ["\uDC73", "\uDC73"], /* Low Surrogate */ + ["\uDC74", "\uDC74"], /* Low Surrogate */ + ["\uDC75", "\uDC75"], /* Low Surrogate */ + ["\uDC76", "\uDC76"], /* Low Surrogate */ + ["\uDC77", "\uDC77"], /* Low Surrogate */ + ["\uDC78", "\uDC78"], /* Low Surrogate */ + ["\uDC79", "\uDC79"], /* Low Surrogate */ + ["\uDC7A", "\uDC7A"], /* Low Surrogate */ + ["\uDC7B", "\uDC7B"], /* Low Surrogate */ + ["\uDC7C", "\uDC7C"], /* Low Surrogate */ + ["\uDC7D", "\uDC7D"], /* Low Surrogate */ + ["\uDC7E", "\uDC7E"], /* Low Surrogate */ + ["\uDC7F", "\uDC7F"], /* Low Surrogate */ + ["\uDC80", "\uDC80"], /* Low Surrogate */ + ["\uDC81", "\uDC81"], /* Low Surrogate */ + ["\uDC82", "\uDC82"], /* Low Surrogate */ + ["\uDC83", "\uDC83"], /* Low Surrogate */ + ["\uDC84", "\uDC84"], /* Low Surrogate */ + ["\uDC85", "\uDC85"], /* Low Surrogate */ + ["\uDC86", "\uDC86"], /* Low Surrogate */ + ["\uDC87", "\uDC87"], /* Low Surrogate */ + ["\uDC88", "\uDC88"], /* Low Surrogate */ + ["\uDC89", "\uDC89"], /* Low Surrogate */ + ["\uDC8A", "\uDC8A"], /* Low Surrogate */ + ["\uDC8B", "\uDC8B"], /* Low Surrogate */ + ["\uDC8C", "\uDC8C"], /* Low Surrogate */ + ["\uDC8D", "\uDC8D"], /* Low Surrogate */ + ["\uDC8E", "\uDC8E"], /* Low Surrogate */ + ["\uDC8F", "\uDC8F"], /* Low Surrogate */ + ["\uDC90", "\uDC90"], /* Low Surrogate */ + ["\uDC91", "\uDC91"], /* Low Surrogate */ + ["\uDC92", "\uDC92"], /* Low Surrogate */ + ["\uDC93", "\uDC93"], /* Low Surrogate */ + ["\uDC94", "\uDC94"], /* Low Surrogate */ + ["\uDC95", "\uDC95"], /* Low Surrogate */ + ["\uDC96", "\uDC96"], /* Low Surrogate */ + ["\uDC97", "\uDC97"], /* Low Surrogate */ + ["\uDC98", "\uDC98"], /* Low Surrogate */ + ["\uDC99", "\uDC99"], /* Low Surrogate */ + ["\uDC9A", "\uDC9A"], /* Low Surrogate */ + ["\uDC9B", "\uDC9B"], /* Low Surrogate */ + ["\uDC9C", "\uDC9C"], /* Low Surrogate */ + ["\uDC9D", "\uDC9D"], /* Low Surrogate */ + ["\uDC9E", "\uDC9E"], /* Low Surrogate */ + ["\uDC9F", "\uDC9F"], /* Low Surrogate */ + ["\uDCA0", "\uDCA0"], /* Low Surrogate */ + ["\uDCA1", "\uDCA1"], /* Low Surrogate */ + ["\uDCA2", "\uDCA2"], /* Low Surrogate */ + ["\uDCA3", "\uDCA3"], /* Low Surrogate */ + ["\uDCA4", "\uDCA4"], /* Low Surrogate */ + ["\uDCA5", "\uDCA5"], /* Low Surrogate */ + ["\uDCA6", "\uDCA6"], /* Low Surrogate */ + ["\uDCA7", "\uDCA7"], /* Low Surrogate */ + ["\uDCA8", "\uDCA8"], /* Low Surrogate */ + ["\uDCA9", "\uDCA9"], /* Low Surrogate */ + ["\uDCAA", "\uDCAA"], /* Low Surrogate */ + ["\uDCAB", "\uDCAB"], /* Low Surrogate */ + ["\uDCAC", "\uDCAC"], /* Low Surrogate */ + ["\uDCAD", "\uDCAD"], /* Low Surrogate */ + ["\uDCAE", "\uDCAE"], /* Low Surrogate */ + ["\uDCAF", "\uDCAF"], /* Low Surrogate */ + ["\uDCB0", "\uDCB0"], /* Low Surrogate */ + ["\uDCB1", "\uDCB1"], /* Low Surrogate */ + ["\uDCB2", "\uDCB2"], /* Low Surrogate */ + ["\uDCB3", "\uDCB3"], /* Low Surrogate */ + ["\uDCB4", "\uDCB4"], /* Low Surrogate */ + ["\uDCB5", "\uDCB5"], /* Low Surrogate */ + ["\uDCB6", "\uDCB6"], /* Low Surrogate */ + ["\uDCB7", "\uDCB7"], /* Low Surrogate */ + ["\uDCB8", "\uDCB8"], /* Low Surrogate */ + ["\uDCB9", "\uDCB9"], /* Low Surrogate */ + ["\uDCBA", "\uDCBA"], /* Low Surrogate */ + ["\uDCBB", "\uDCBB"], /* Low Surrogate */ + ["\uDCBC", "\uDCBC"], /* Low Surrogate */ + ["\uDCBD", "\uDCBD"], /* Low Surrogate */ + ["\uDCBE", "\uDCBE"], /* Low Surrogate */ + ["\uDCBF", "\uDCBF"], /* Low Surrogate */ + ["\uDCC0", "\uDCC0"], /* Low Surrogate */ + ["\uDCC1", "\uDCC1"], /* Low Surrogate */ + ["\uDCC2", "\uDCC2"], /* Low Surrogate */ + ["\uDCC3", "\uDCC3"], /* Low Surrogate */ + ["\uDCC4", "\uDCC4"], /* Low Surrogate */ + ["\uDCC5", "\uDCC5"], /* Low Surrogate */ + ["\uDCC6", "\uDCC6"], /* Low Surrogate */ + ["\uDCC7", "\uDCC7"], /* Low Surrogate */ + ["\uDCC8", "\uDCC8"], /* Low Surrogate */ + ["\uDCC9", "\uDCC9"], /* Low Surrogate */ + ["\uDCCA", "\uDCCA"], /* Low Surrogate */ + ["\uDCCB", "\uDCCB"], /* Low Surrogate */ + ["\uDCCC", "\uDCCC"], /* Low Surrogate */ + ["\uDCCD", "\uDCCD"], /* Low Surrogate */ + ["\uDCCE", "\uDCCE"], /* Low Surrogate */ + ["\uDCCF", "\uDCCF"], /* Low Surrogate */ + ["\uDCD0", "\uDCD0"], /* Low Surrogate */ + ["\uDCD1", "\uDCD1"], /* Low Surrogate */ + ["\uDCD2", "\uDCD2"], /* Low Surrogate */ + ["\uDCD3", "\uDCD3"], /* Low Surrogate */ + ["\uDCD4", "\uDCD4"], /* Low Surrogate */ + ["\uDCD5", "\uDCD5"], /* Low Surrogate */ + ["\uDCD6", "\uDCD6"], /* Low Surrogate */ + ["\uDCD7", "\uDCD7"], /* Low Surrogate */ + ["\uDCD8", "\uDCD8"], /* Low Surrogate */ + ["\uDCD9", "\uDCD9"], /* Low Surrogate */ + ["\uDCDA", "\uDCDA"], /* Low Surrogate */ + ["\uDCDB", "\uDCDB"], /* Low Surrogate */ + ["\uDCDC", "\uDCDC"], /* Low Surrogate */ + ["\uDCDD", "\uDCDD"], /* Low Surrogate */ + ["\uDCDE", "\uDCDE"], /* Low Surrogate */ + ["\uDCDF", "\uDCDF"], /* Low Surrogate */ + ["\uDCE0", "\uDCE0"], /* Low Surrogate */ + ["\uDCE1", "\uDCE1"], /* Low Surrogate */ + ["\uDCE2", "\uDCE2"], /* Low Surrogate */ + ["\uDCE3", "\uDCE3"], /* Low Surrogate */ + ["\uDCE4", "\uDCE4"], /* Low Surrogate */ + ["\uDCE5", "\uDCE5"], /* Low Surrogate */ + ["\uDCE6", "\uDCE6"], /* Low Surrogate */ + ["\uDCE7", "\uDCE7"], /* Low Surrogate */ + ["\uDCE8", "\uDCE8"], /* Low Surrogate */ + ["\uDCE9", "\uDCE9"], /* Low Surrogate */ + ["\uDCEA", "\uDCEA"], /* Low Surrogate */ + ["\uDCEB", "\uDCEB"], /* Low Surrogate */ + ["\uDCEC", "\uDCEC"], /* Low Surrogate */ + ["\uDCED", "\uDCED"], /* Low Surrogate */ + ["\uDCEE", "\uDCEE"], /* Low Surrogate */ + ["\uDCEF", "\uDCEF"], /* Low Surrogate */ + ["\uDCF0", "\uDCF0"], /* Low Surrogate */ + ["\uDCF1", "\uDCF1"], /* Low Surrogate */ + ["\uDCF2", "\uDCF2"], /* Low Surrogate */ + ["\uDCF3", "\uDCF3"], /* Low Surrogate */ + ["\uDCF4", "\uDCF4"], /* Low Surrogate */ + ["\uDCF5", "\uDCF5"], /* Low Surrogate */ + ["\uDCF6", "\uDCF6"], /* Low Surrogate */ + ["\uDCF7", "\uDCF7"], /* Low Surrogate */ + ["\uDCF8", "\uDCF8"], /* Low Surrogate */ + ["\uDCF9", "\uDCF9"], /* Low Surrogate */ + ["\uDCFA", "\uDCFA"], /* Low Surrogate */ + ["\uDCFB", "\uDCFB"], /* Low Surrogate */ + ["\uDCFC", "\uDCFC"], /* Low Surrogate */ + ["\uDCFD", "\uDCFD"], /* Low Surrogate */ + ["\uDCFE", "\uDCFE"], /* Low Surrogate */ + ["\uDCFF", "\uDCFF"], /* Low Surrogate */ + ["\uDD00", "\uDD00"], /* Low Surrogate */ + ["\uDD01", "\uDD01"], /* Low Surrogate */ + ["\uDD02", "\uDD02"], /* Low Surrogate */ + ["\uDD03", "\uDD03"], /* Low Surrogate */ + ["\uDD04", "\uDD04"], /* Low Surrogate */ + ["\uDD05", "\uDD05"], /* Low Surrogate */ + ["\uDD06", "\uDD06"], /* Low Surrogate */ + ["\uDD07", "\uDD07"], /* Low Surrogate */ + ["\uDD08", "\uDD08"], /* Low Surrogate */ + ["\uDD09", "\uDD09"], /* Low Surrogate */ + ["\uDD0A", "\uDD0A"], /* Low Surrogate */ + ["\uDD0B", "\uDD0B"], /* Low Surrogate */ + ["\uDD0C", "\uDD0C"], /* Low Surrogate */ + ["\uDD0D", "\uDD0D"], /* Low Surrogate */ + ["\uDD0E", "\uDD0E"], /* Low Surrogate */ + ["\uDD0F", "\uDD0F"], /* Low Surrogate */ + ["\uDD10", "\uDD10"], /* Low Surrogate */ + ["\uDD11", "\uDD11"], /* Low Surrogate */ + ["\uDD12", "\uDD12"], /* Low Surrogate */ + ["\uDD13", "\uDD13"], /* Low Surrogate */ + ["\uDD14", "\uDD14"], /* Low Surrogate */ + ["\uDD15", "\uDD15"], /* Low Surrogate */ + ["\uDD16", "\uDD16"], /* Low Surrogate */ + ["\uDD17", "\uDD17"], /* Low Surrogate */ + ["\uDD18", "\uDD18"], /* Low Surrogate */ + ["\uDD19", "\uDD19"], /* Low Surrogate */ + ["\uDD1A", "\uDD1A"], /* Low Surrogate */ + ["\uDD1B", "\uDD1B"], /* Low Surrogate */ + ["\uDD1C", "\uDD1C"], /* Low Surrogate */ + ["\uDD1D", "\uDD1D"], /* Low Surrogate */ + ["\uDD1E", "\uDD1E"], /* Low Surrogate */ + ["\uDD1F", "\uDD1F"], /* Low Surrogate */ + ["\uDD20", "\uDD20"], /* Low Surrogate */ + ["\uDD21", "\uDD21"], /* Low Surrogate */ + ["\uDD22", "\uDD22"], /* Low Surrogate */ + ["\uDD23", "\uDD23"], /* Low Surrogate */ + ["\uDD24", "\uDD24"], /* Low Surrogate */ + ["\uDD25", "\uDD25"], /* Low Surrogate */ + ["\uDD26", "\uDD26"], /* Low Surrogate */ + ["\uDD27", "\uDD27"], /* Low Surrogate */ + ["\uDD28", "\uDD28"], /* Low Surrogate */ + ["\uDD29", "\uDD29"], /* Low Surrogate */ + ["\uDD2A", "\uDD2A"], /* Low Surrogate */ + ["\uDD2B", "\uDD2B"], /* Low Surrogate */ + ["\uDD2C", "\uDD2C"], /* Low Surrogate */ + ["\uDD2D", "\uDD2D"], /* Low Surrogate */ + ["\uDD2E", "\uDD2E"], /* Low Surrogate */ + ["\uDD2F", "\uDD2F"], /* Low Surrogate */ + ["\uDD30", "\uDD30"], /* Low Surrogate */ + ["\uDD31", "\uDD31"], /* Low Surrogate */ + ["\uDD32", "\uDD32"], /* Low Surrogate */ + ["\uDD33", "\uDD33"], /* Low Surrogate */ + ["\uDD34", "\uDD34"], /* Low Surrogate */ + ["\uDD35", "\uDD35"], /* Low Surrogate */ + ["\uDD36", "\uDD36"], /* Low Surrogate */ + ["\uDD37", "\uDD37"], /* Low Surrogate */ + ["\uDD38", "\uDD38"], /* Low Surrogate */ + ["\uDD39", "\uDD39"], /* Low Surrogate */ + ["\uDD3A", "\uDD3A"], /* Low Surrogate */ + ["\uDD3B", "\uDD3B"], /* Low Surrogate */ + ["\uDD3C", "\uDD3C"], /* Low Surrogate */ + ["\uDD3D", "\uDD3D"], /* Low Surrogate */ + ["\uDD3E", "\uDD3E"], /* Low Surrogate */ + ["\uDD3F", "\uDD3F"], /* Low Surrogate */ + ["\uDD40", "\uDD40"], /* Low Surrogate */ + ["\uDD41", "\uDD41"], /* Low Surrogate */ + ["\uDD42", "\uDD42"], /* Low Surrogate */ + ["\uDD43", "\uDD43"], /* Low Surrogate */ + ["\uDD44", "\uDD44"], /* Low Surrogate */ + ["\uDD45", "\uDD45"], /* Low Surrogate */ + ["\uDD46", "\uDD46"], /* Low Surrogate */ + ["\uDD47", "\uDD47"], /* Low Surrogate */ + ["\uDD48", "\uDD48"], /* Low Surrogate */ + ["\uDD49", "\uDD49"], /* Low Surrogate */ + ["\uDD4A", "\uDD4A"], /* Low Surrogate */ + ["\uDD4B", "\uDD4B"], /* Low Surrogate */ + ["\uDD4C", "\uDD4C"], /* Low Surrogate */ + ["\uDD4D", "\uDD4D"], /* Low Surrogate */ + ["\uDD4E", "\uDD4E"], /* Low Surrogate */ + ["\uDD4F", "\uDD4F"], /* Low Surrogate */ + ["\uDD50", "\uDD50"], /* Low Surrogate */ + ["\uDD51", "\uDD51"], /* Low Surrogate */ + ["\uDD52", "\uDD52"], /* Low Surrogate */ + ["\uDD53", "\uDD53"], /* Low Surrogate */ + ["\uDD54", "\uDD54"], /* Low Surrogate */ + ["\uDD55", "\uDD55"], /* Low Surrogate */ + ["\uDD56", "\uDD56"], /* Low Surrogate */ + ["\uDD57", "\uDD57"], /* Low Surrogate */ + ["\uDD58", "\uDD58"], /* Low Surrogate */ + ["\uDD59", "\uDD59"], /* Low Surrogate */ + ["\uDD5A", "\uDD5A"], /* Low Surrogate */ + ["\uDD5B", "\uDD5B"], /* Low Surrogate */ + ["\uDD5C", "\uDD5C"], /* Low Surrogate */ + ["\uDD5D", "\uDD5D"], /* Low Surrogate */ + ["\uDD5E", "\uDD5E"], /* Low Surrogate */ + ["\uDD5F", "\uDD5F"], /* Low Surrogate */ + ["\uDD60", "\uDD60"], /* Low Surrogate */ + ["\uDD61", "\uDD61"], /* Low Surrogate */ + ["\uDD62", "\uDD62"], /* Low Surrogate */ + ["\uDD63", "\uDD63"], /* Low Surrogate */ + ["\uDD64", "\uDD64"], /* Low Surrogate */ + ["\uDD65", "\uDD65"], /* Low Surrogate */ + ["\uDD66", "\uDD66"], /* Low Surrogate */ + ["\uDD67", "\uDD67"], /* Low Surrogate */ + ["\uDD68", "\uDD68"], /* Low Surrogate */ + ["\uDD69", "\uDD69"], /* Low Surrogate */ + ["\uDD6A", "\uDD6A"], /* Low Surrogate */ + ["\uDD6B", "\uDD6B"], /* Low Surrogate */ + ["\uDD6C", "\uDD6C"], /* Low Surrogate */ + ["\uDD6D", "\uDD6D"], /* Low Surrogate */ + ["\uDD6E", "\uDD6E"], /* Low Surrogate */ + ["\uDD6F", "\uDD6F"], /* Low Surrogate */ + ["\uDD70", "\uDD70"], /* Low Surrogate */ + ["\uDD71", "\uDD71"], /* Low Surrogate */ + ["\uDD72", "\uDD72"], /* Low Surrogate */ + ["\uDD73", "\uDD73"], /* Low Surrogate */ + ["\uDD74", "\uDD74"], /* Low Surrogate */ + ["\uDD75", "\uDD75"], /* Low Surrogate */ + ["\uDD76", "\uDD76"], /* Low Surrogate */ + ["\uDD77", "\uDD77"], /* Low Surrogate */ + ["\uDD78", "\uDD78"], /* Low Surrogate */ + ["\uDD79", "\uDD79"], /* Low Surrogate */ + ["\uDD7A", "\uDD7A"], /* Low Surrogate */ + ["\uDD7B", "\uDD7B"], /* Low Surrogate */ + ["\uDD7C", "\uDD7C"], /* Low Surrogate */ + ["\uDD7D", "\uDD7D"], /* Low Surrogate */ + ["\uDD7E", "\uDD7E"], /* Low Surrogate */ + ["\uDD7F", "\uDD7F"], /* Low Surrogate */ + ["\uDD80", "\uDD80"], /* Low Surrogate */ + ["\uDD81", "\uDD81"], /* Low Surrogate */ + ["\uDD82", "\uDD82"], /* Low Surrogate */ + ["\uDD83", "\uDD83"], /* Low Surrogate */ + ["\uDD84", "\uDD84"], /* Low Surrogate */ + ["\uDD85", "\uDD85"], /* Low Surrogate */ + ["\uDD86", "\uDD86"], /* Low Surrogate */ + ["\uDD87", "\uDD87"], /* Low Surrogate */ + ["\uDD88", "\uDD88"], /* Low Surrogate */ + ["\uDD89", "\uDD89"], /* Low Surrogate */ + ["\uDD8A", "\uDD8A"], /* Low Surrogate */ + ["\uDD8B", "\uDD8B"], /* Low Surrogate */ + ["\uDD8C", "\uDD8C"], /* Low Surrogate */ + ["\uDD8D", "\uDD8D"], /* Low Surrogate */ + ["\uDD8E", "\uDD8E"], /* Low Surrogate */ + ["\uDD8F", "\uDD8F"], /* Low Surrogate */ + ["\uDD90", "\uDD90"], /* Low Surrogate */ + ["\uDD91", "\uDD91"], /* Low Surrogate */ + ["\uDD92", "\uDD92"], /* Low Surrogate */ + ["\uDD93", "\uDD93"], /* Low Surrogate */ + ["\uDD94", "\uDD94"], /* Low Surrogate */ + ["\uDD95", "\uDD95"], /* Low Surrogate */ + ["\uDD96", "\uDD96"], /* Low Surrogate */ + ["\uDD97", "\uDD97"], /* Low Surrogate */ + ["\uDD98", "\uDD98"], /* Low Surrogate */ + ["\uDD99", "\uDD99"], /* Low Surrogate */ + ["\uDD9A", "\uDD9A"], /* Low Surrogate */ + ["\uDD9B", "\uDD9B"], /* Low Surrogate */ + ["\uDD9C", "\uDD9C"], /* Low Surrogate */ + ["\uDD9D", "\uDD9D"], /* Low Surrogate */ + ["\uDD9E", "\uDD9E"], /* Low Surrogate */ + ["\uDD9F", "\uDD9F"], /* Low Surrogate */ + ["\uDDA0", "\uDDA0"], /* Low Surrogate */ + ["\uDDA1", "\uDDA1"], /* Low Surrogate */ + ["\uDDA2", "\uDDA2"], /* Low Surrogate */ + ["\uDDA3", "\uDDA3"], /* Low Surrogate */ + ["\uDDA4", "\uDDA4"], /* Low Surrogate */ + ["\uDDA5", "\uDDA5"], /* Low Surrogate */ + ["\uDDA6", "\uDDA6"], /* Low Surrogate */ + ["\uDDA7", "\uDDA7"], /* Low Surrogate */ + ["\uDDA8", "\uDDA8"], /* Low Surrogate */ + ["\uDDA9", "\uDDA9"], /* Low Surrogate */ + ["\uDDAA", "\uDDAA"], /* Low Surrogate */ + ["\uDDAB", "\uDDAB"], /* Low Surrogate */ + ["\uDDAC", "\uDDAC"], /* Low Surrogate */ + ["\uDDAD", "\uDDAD"], /* Low Surrogate */ + ["\uDDAE", "\uDDAE"], /* Low Surrogate */ + ["\uDDAF", "\uDDAF"], /* Low Surrogate */ + ["\uDDB0", "\uDDB0"], /* Low Surrogate */ + ["\uDDB1", "\uDDB1"], /* Low Surrogate */ + ["\uDDB2", "\uDDB2"], /* Low Surrogate */ + ["\uDDB3", "\uDDB3"], /* Low Surrogate */ + ["\uDDB4", "\uDDB4"], /* Low Surrogate */ + ["\uDDB5", "\uDDB5"], /* Low Surrogate */ + ["\uDDB6", "\uDDB6"], /* Low Surrogate */ + ["\uDDB7", "\uDDB7"], /* Low Surrogate */ + ["\uDDB8", "\uDDB8"], /* Low Surrogate */ + ["\uDDB9", "\uDDB9"], /* Low Surrogate */ + ["\uDDBA", "\uDDBA"], /* Low Surrogate */ + ["\uDDBB", "\uDDBB"], /* Low Surrogate */ + ["\uDDBC", "\uDDBC"], /* Low Surrogate */ + ["\uDDBD", "\uDDBD"], /* Low Surrogate */ + ["\uDDBE", "\uDDBE"], /* Low Surrogate */ + ["\uDDBF", "\uDDBF"], /* Low Surrogate */ + ["\uDDC0", "\uDDC0"], /* Low Surrogate */ + ["\uDDC1", "\uDDC1"], /* Low Surrogate */ + ["\uDDC2", "\uDDC2"], /* Low Surrogate */ + ["\uDDC3", "\uDDC3"], /* Low Surrogate */ + ["\uDDC4", "\uDDC4"], /* Low Surrogate */ + ["\uDDC5", "\uDDC5"], /* Low Surrogate */ + ["\uDDC6", "\uDDC6"], /* Low Surrogate */ + ["\uDDC7", "\uDDC7"], /* Low Surrogate */ + ["\uDDC8", "\uDDC8"], /* Low Surrogate */ + ["\uDDC9", "\uDDC9"], /* Low Surrogate */ + ["\uDDCA", "\uDDCA"], /* Low Surrogate */ + ["\uDDCB", "\uDDCB"], /* Low Surrogate */ + ["\uDDCC", "\uDDCC"], /* Low Surrogate */ + ["\uDDCD", "\uDDCD"], /* Low Surrogate */ + ["\uDDCE", "\uDDCE"], /* Low Surrogate */ + ["\uDDCF", "\uDDCF"], /* Low Surrogate */ + ["\uDDD0", "\uDDD0"], /* Low Surrogate */ + ["\uDDD1", "\uDDD1"], /* Low Surrogate */ + ["\uDDD2", "\uDDD2"], /* Low Surrogate */ + ["\uDDD3", "\uDDD3"], /* Low Surrogate */ + ["\uDDD4", "\uDDD4"], /* Low Surrogate */ + ["\uDDD5", "\uDDD5"], /* Low Surrogate */ + ["\uDDD6", "\uDDD6"], /* Low Surrogate */ + ["\uDDD7", "\uDDD7"], /* Low Surrogate */ + ["\uDDD8", "\uDDD8"], /* Low Surrogate */ + ["\uDDD9", "\uDDD9"], /* Low Surrogate */ + ["\uDDDA", "\uDDDA"], /* Low Surrogate */ + ["\uDDDB", "\uDDDB"], /* Low Surrogate */ + ["\uDDDC", "\uDDDC"], /* Low Surrogate */ + ["\uDDDD", "\uDDDD"], /* Low Surrogate */ + ["\uDDDE", "\uDDDE"], /* Low Surrogate */ + ["\uDDDF", "\uDDDF"], /* Low Surrogate */ + ["\uDDE0", "\uDDE0"], /* Low Surrogate */ + ["\uDDE1", "\uDDE1"], /* Low Surrogate */ + ["\uDDE2", "\uDDE2"], /* Low Surrogate */ + ["\uDDE3", "\uDDE3"], /* Low Surrogate */ + ["\uDDE4", "\uDDE4"], /* Low Surrogate */ + ["\uDDE5", "\uDDE5"], /* Low Surrogate */ + ["\uDDE6", "\uDDE6"], /* Low Surrogate */ + ["\uDDE7", "\uDDE7"], /* Low Surrogate */ + ["\uDDE8", "\uDDE8"], /* Low Surrogate */ + ["\uDDE9", "\uDDE9"], /* Low Surrogate */ + ["\uDDEA", "\uDDEA"], /* Low Surrogate */ + ["\uDDEB", "\uDDEB"], /* Low Surrogate */ + ["\uDDEC", "\uDDEC"], /* Low Surrogate */ + ["\uDDED", "\uDDED"], /* Low Surrogate */ + ["\uDDEE", "\uDDEE"], /* Low Surrogate */ + ["\uDDEF", "\uDDEF"], /* Low Surrogate */ + ["\uDDF0", "\uDDF0"], /* Low Surrogate */ + ["\uDDF1", "\uDDF1"], /* Low Surrogate */ + ["\uDDF2", "\uDDF2"], /* Low Surrogate */ + ["\uDDF3", "\uDDF3"], /* Low Surrogate */ + ["\uDDF4", "\uDDF4"], /* Low Surrogate */ + ["\uDDF5", "\uDDF5"], /* Low Surrogate */ + ["\uDDF6", "\uDDF6"], /* Low Surrogate */ + ["\uDDF7", "\uDDF7"], /* Low Surrogate */ + ["\uDDF8", "\uDDF8"], /* Low Surrogate */ + ["\uDDF9", "\uDDF9"], /* Low Surrogate */ + ["\uDDFA", "\uDDFA"], /* Low Surrogate */ + ["\uDDFB", "\uDDFB"], /* Low Surrogate */ + ["\uDDFC", "\uDDFC"], /* Low Surrogate */ + ["\uDDFD", "\uDDFD"], /* Low Surrogate */ + ["\uDDFE", "\uDDFE"], /* Low Surrogate */ + ["\uDDFF", "\uDDFF"], /* Low Surrogate */ + ["\uDE00", "\uDE00"], /* Low Surrogate */ + ["\uDE01", "\uDE01"], /* Low Surrogate */ + ["\uDE02", "\uDE02"], /* Low Surrogate */ + ["\uDE03", "\uDE03"], /* Low Surrogate */ + ["\uDE04", "\uDE04"], /* Low Surrogate */ + ["\uDE05", "\uDE05"], /* Low Surrogate */ + ["\uDE06", "\uDE06"], /* Low Surrogate */ + ["\uDE07", "\uDE07"], /* Low Surrogate */ + ["\uDE08", "\uDE08"], /* Low Surrogate */ + ["\uDE09", "\uDE09"], /* Low Surrogate */ + ["\uDE0A", "\uDE0A"], /* Low Surrogate */ + ["\uDE0B", "\uDE0B"], /* Low Surrogate */ + ["\uDE0C", "\uDE0C"], /* Low Surrogate */ + ["\uDE0D", "\uDE0D"], /* Low Surrogate */ + ["\uDE0E", "\uDE0E"], /* Low Surrogate */ + ["\uDE0F", "\uDE0F"], /* Low Surrogate */ + ["\uDE10", "\uDE10"], /* Low Surrogate */ + ["\uDE11", "\uDE11"], /* Low Surrogate */ + ["\uDE12", "\uDE12"], /* Low Surrogate */ + ["\uDE13", "\uDE13"], /* Low Surrogate */ + ["\uDE14", "\uDE14"], /* Low Surrogate */ + ["\uDE15", "\uDE15"], /* Low Surrogate */ + ["\uDE16", "\uDE16"], /* Low Surrogate */ + ["\uDE17", "\uDE17"], /* Low Surrogate */ + ["\uDE18", "\uDE18"], /* Low Surrogate */ + ["\uDE19", "\uDE19"], /* Low Surrogate */ + ["\uDE1A", "\uDE1A"], /* Low Surrogate */ + ["\uDE1B", "\uDE1B"], /* Low Surrogate */ + ["\uDE1C", "\uDE1C"], /* Low Surrogate */ + ["\uDE1D", "\uDE1D"], /* Low Surrogate */ + ["\uDE1E", "\uDE1E"], /* Low Surrogate */ + ["\uDE1F", "\uDE1F"], /* Low Surrogate */ + ["\uDE20", "\uDE20"], /* Low Surrogate */ + ["\uDE21", "\uDE21"], /* Low Surrogate */ + ["\uDE22", "\uDE22"], /* Low Surrogate */ + ["\uDE23", "\uDE23"], /* Low Surrogate */ + ["\uDE24", "\uDE24"], /* Low Surrogate */ + ["\uDE25", "\uDE25"], /* Low Surrogate */ + ["\uDE26", "\uDE26"], /* Low Surrogate */ + ["\uDE27", "\uDE27"], /* Low Surrogate */ + ["\uDE28", "\uDE28"], /* Low Surrogate */ + ["\uDE29", "\uDE29"], /* Low Surrogate */ + ["\uDE2A", "\uDE2A"], /* Low Surrogate */ + ["\uDE2B", "\uDE2B"], /* Low Surrogate */ + ["\uDE2C", "\uDE2C"], /* Low Surrogate */ + ["\uDE2D", "\uDE2D"], /* Low Surrogate */ + ["\uDE2E", "\uDE2E"], /* Low Surrogate */ + ["\uDE2F", "\uDE2F"], /* Low Surrogate */ + ["\uDE30", "\uDE30"], /* Low Surrogate */ + ["\uDE31", "\uDE31"], /* Low Surrogate */ + ["\uDE32", "\uDE32"], /* Low Surrogate */ + ["\uDE33", "\uDE33"], /* Low Surrogate */ + ["\uDE34", "\uDE34"], /* Low Surrogate */ + ["\uDE35", "\uDE35"], /* Low Surrogate */ + ["\uDE36", "\uDE36"], /* Low Surrogate */ + ["\uDE37", "\uDE37"], /* Low Surrogate */ + ["\uDE38", "\uDE38"], /* Low Surrogate */ + ["\uDE39", "\uDE39"], /* Low Surrogate */ + ["\uDE3A", "\uDE3A"], /* Low Surrogate */ + ["\uDE3B", "\uDE3B"], /* Low Surrogate */ + ["\uDE3C", "\uDE3C"], /* Low Surrogate */ + ["\uDE3D", "\uDE3D"], /* Low Surrogate */ + ["\uDE3E", "\uDE3E"], /* Low Surrogate */ + ["\uDE3F", "\uDE3F"], /* Low Surrogate */ + ["\uDE40", "\uDE40"], /* Low Surrogate */ + ["\uDE41", "\uDE41"], /* Low Surrogate */ + ["\uDE42", "\uDE42"], /* Low Surrogate */ + ["\uDE43", "\uDE43"], /* Low Surrogate */ + ["\uDE44", "\uDE44"], /* Low Surrogate */ + ["\uDE45", "\uDE45"], /* Low Surrogate */ + ["\uDE46", "\uDE46"], /* Low Surrogate */ + ["\uDE47", "\uDE47"], /* Low Surrogate */ + ["\uDE48", "\uDE48"], /* Low Surrogate */ + ["\uDE49", "\uDE49"], /* Low Surrogate */ + ["\uDE4A", "\uDE4A"], /* Low Surrogate */ + ["\uDE4B", "\uDE4B"], /* Low Surrogate */ + ["\uDE4C", "\uDE4C"], /* Low Surrogate */ + ["\uDE4D", "\uDE4D"], /* Low Surrogate */ + ["\uDE4E", "\uDE4E"], /* Low Surrogate */ + ["\uDE4F", "\uDE4F"], /* Low Surrogate */ + ["\uDE50", "\uDE50"], /* Low Surrogate */ + ["\uDE51", "\uDE51"], /* Low Surrogate */ + ["\uDE52", "\uDE52"], /* Low Surrogate */ + ["\uDE53", "\uDE53"], /* Low Surrogate */ + ["\uDE54", "\uDE54"], /* Low Surrogate */ + ["\uDE55", "\uDE55"], /* Low Surrogate */ + ["\uDE56", "\uDE56"], /* Low Surrogate */ + ["\uDE57", "\uDE57"], /* Low Surrogate */ + ["\uDE58", "\uDE58"], /* Low Surrogate */ + ["\uDE59", "\uDE59"], /* Low Surrogate */ + ["\uDE5A", "\uDE5A"], /* Low Surrogate */ + ["\uDE5B", "\uDE5B"], /* Low Surrogate */ + ["\uDE5C", "\uDE5C"], /* Low Surrogate */ + ["\uDE5D", "\uDE5D"], /* Low Surrogate */ + ["\uDE5E", "\uDE5E"], /* Low Surrogate */ + ["\uDE5F", "\uDE5F"], /* Low Surrogate */ + ["\uDE60", "\uDE60"], /* Low Surrogate */ + ["\uDE61", "\uDE61"], /* Low Surrogate */ + ["\uDE62", "\uDE62"], /* Low Surrogate */ + ["\uDE63", "\uDE63"], /* Low Surrogate */ + ["\uDE64", "\uDE64"], /* Low Surrogate */ + ["\uDE65", "\uDE65"], /* Low Surrogate */ + ["\uDE66", "\uDE66"], /* Low Surrogate */ + ["\uDE67", "\uDE67"], /* Low Surrogate */ + ["\uDE68", "\uDE68"], /* Low Surrogate */ + ["\uDE69", "\uDE69"], /* Low Surrogate */ + ["\uDE6A", "\uDE6A"], /* Low Surrogate */ + ["\uDE6B", "\uDE6B"], /* Low Surrogate */ + ["\uDE6C", "\uDE6C"], /* Low Surrogate */ + ["\uDE6D", "\uDE6D"], /* Low Surrogate */ + ["\uDE6E", "\uDE6E"], /* Low Surrogate */ + ["\uDE6F", "\uDE6F"], /* Low Surrogate */ + ["\uDE70", "\uDE70"], /* Low Surrogate */ + ["\uDE71", "\uDE71"], /* Low Surrogate */ + ["\uDE72", "\uDE72"], /* Low Surrogate */ + ["\uDE73", "\uDE73"], /* Low Surrogate */ + ["\uDE74", "\uDE74"], /* Low Surrogate */ + ["\uDE75", "\uDE75"], /* Low Surrogate */ + ["\uDE76", "\uDE76"], /* Low Surrogate */ + ["\uDE77", "\uDE77"], /* Low Surrogate */ + ["\uDE78", "\uDE78"], /* Low Surrogate */ + ["\uDE79", "\uDE79"], /* Low Surrogate */ + ["\uDE7A", "\uDE7A"], /* Low Surrogate */ + ["\uDE7B", "\uDE7B"], /* Low Surrogate */ + ["\uDE7C", "\uDE7C"], /* Low Surrogate */ + ["\uDE7D", "\uDE7D"], /* Low Surrogate */ + ["\uDE7E", "\uDE7E"], /* Low Surrogate */ + ["\uDE7F", "\uDE7F"], /* Low Surrogate */ + ["\uDE80", "\uDE80"], /* Low Surrogate */ + ["\uDE81", "\uDE81"], /* Low Surrogate */ + ["\uDE82", "\uDE82"], /* Low Surrogate */ + ["\uDE83", "\uDE83"], /* Low Surrogate */ + ["\uDE84", "\uDE84"], /* Low Surrogate */ + ["\uDE85", "\uDE85"], /* Low Surrogate */ + ["\uDE86", "\uDE86"], /* Low Surrogate */ + ["\uDE87", "\uDE87"], /* Low Surrogate */ + ["\uDE88", "\uDE88"], /* Low Surrogate */ + ["\uDE89", "\uDE89"], /* Low Surrogate */ + ["\uDE8A", "\uDE8A"], /* Low Surrogate */ + ["\uDE8B", "\uDE8B"], /* Low Surrogate */ + ["\uDE8C", "\uDE8C"], /* Low Surrogate */ + ["\uDE8D", "\uDE8D"], /* Low Surrogate */ + ["\uDE8E", "\uDE8E"], /* Low Surrogate */ + ["\uDE8F", "\uDE8F"], /* Low Surrogate */ + ["\uDE90", "\uDE90"], /* Low Surrogate */ + ["\uDE91", "\uDE91"], /* Low Surrogate */ + ["\uDE92", "\uDE92"], /* Low Surrogate */ + ["\uDE93", "\uDE93"], /* Low Surrogate */ + ["\uDE94", "\uDE94"], /* Low Surrogate */ + ["\uDE95", "\uDE95"], /* Low Surrogate */ + ["\uDE96", "\uDE96"], /* Low Surrogate */ + ["\uDE97", "\uDE97"], /* Low Surrogate */ + ["\uDE98", "\uDE98"], /* Low Surrogate */ + ["\uDE99", "\uDE99"], /* Low Surrogate */ + ["\uDE9A", "\uDE9A"], /* Low Surrogate */ + ["\uDE9B", "\uDE9B"], /* Low Surrogate */ + ["\uDE9C", "\uDE9C"], /* Low Surrogate */ + ["\uDE9D", "\uDE9D"], /* Low Surrogate */ + ["\uDE9E", "\uDE9E"], /* Low Surrogate */ + ["\uDE9F", "\uDE9F"], /* Low Surrogate */ + ["\uDEA0", "\uDEA0"], /* Low Surrogate */ + ["\uDEA1", "\uDEA1"], /* Low Surrogate */ + ["\uDEA2", "\uDEA2"], /* Low Surrogate */ + ["\uDEA3", "\uDEA3"], /* Low Surrogate */ + ["\uDEA4", "\uDEA4"], /* Low Surrogate */ + ["\uDEA5", "\uDEA5"], /* Low Surrogate */ + ["\uDEA6", "\uDEA6"], /* Low Surrogate */ + ["\uDEA7", "\uDEA7"], /* Low Surrogate */ + ["\uDEA8", "\uDEA8"], /* Low Surrogate */ + ["\uDEA9", "\uDEA9"], /* Low Surrogate */ + ["\uDEAA", "\uDEAA"], /* Low Surrogate */ + ["\uDEAB", "\uDEAB"], /* Low Surrogate */ + ["\uDEAC", "\uDEAC"], /* Low Surrogate */ + ["\uDEAD", "\uDEAD"], /* Low Surrogate */ + ["\uDEAE", "\uDEAE"], /* Low Surrogate */ + ["\uDEAF", "\uDEAF"], /* Low Surrogate */ + ["\uDEB0", "\uDEB0"], /* Low Surrogate */ + ["\uDEB1", "\uDEB1"], /* Low Surrogate */ + ["\uDEB2", "\uDEB2"], /* Low Surrogate */ + ["\uDEB3", "\uDEB3"], /* Low Surrogate */ + ["\uDEB4", "\uDEB4"], /* Low Surrogate */ + ["\uDEB5", "\uDEB5"], /* Low Surrogate */ + ["\uDEB6", "\uDEB6"], /* Low Surrogate */ + ["\uDEB7", "\uDEB7"], /* Low Surrogate */ + ["\uDEB8", "\uDEB8"], /* Low Surrogate */ + ["\uDEB9", "\uDEB9"], /* Low Surrogate */ + ["\uDEBA", "\uDEBA"], /* Low Surrogate */ + ["\uDEBB", "\uDEBB"], /* Low Surrogate */ + ["\uDEBC", "\uDEBC"], /* Low Surrogate */ + ["\uDEBD", "\uDEBD"], /* Low Surrogate */ + ["\uDEBE", "\uDEBE"], /* Low Surrogate */ + ["\uDEBF", "\uDEBF"], /* Low Surrogate */ + ["\uDEC0", "\uDEC0"], /* Low Surrogate */ + ["\uDEC1", "\uDEC1"], /* Low Surrogate */ + ["\uDEC2", "\uDEC2"], /* Low Surrogate */ + ["\uDEC3", "\uDEC3"], /* Low Surrogate */ + ["\uDEC4", "\uDEC4"], /* Low Surrogate */ + ["\uDEC5", "\uDEC5"], /* Low Surrogate */ + ["\uDEC6", "\uDEC6"], /* Low Surrogate */ + ["\uDEC7", "\uDEC7"], /* Low Surrogate */ + ["\uDEC8", "\uDEC8"], /* Low Surrogate */ + ["\uDEC9", "\uDEC9"], /* Low Surrogate */ + ["\uDECA", "\uDECA"], /* Low Surrogate */ + ["\uDECB", "\uDECB"], /* Low Surrogate */ + ["\uDECC", "\uDECC"], /* Low Surrogate */ + ["\uDECD", "\uDECD"], /* Low Surrogate */ + ["\uDECE", "\uDECE"], /* Low Surrogate */ + ["\uDECF", "\uDECF"], /* Low Surrogate */ + ["\uDED0", "\uDED0"], /* Low Surrogate */ + ["\uDED1", "\uDED1"], /* Low Surrogate */ + ["\uDED2", "\uDED2"], /* Low Surrogate */ + ["\uDED3", "\uDED3"], /* Low Surrogate */ + ["\uDED4", "\uDED4"], /* Low Surrogate */ + ["\uDED5", "\uDED5"], /* Low Surrogate */ + ["\uDED6", "\uDED6"], /* Low Surrogate */ + ["\uDED7", "\uDED7"], /* Low Surrogate */ + ["\uDED8", "\uDED8"], /* Low Surrogate */ + ["\uDED9", "\uDED9"], /* Low Surrogate */ + ["\uDEDA", "\uDEDA"], /* Low Surrogate */ + ["\uDEDB", "\uDEDB"], /* Low Surrogate */ + ["\uDEDC", "\uDEDC"], /* Low Surrogate */ + ["\uDEDD", "\uDEDD"], /* Low Surrogate */ + ["\uDEDE", "\uDEDE"], /* Low Surrogate */ + ["\uDEDF", "\uDEDF"], /* Low Surrogate */ + ["\uDEE0", "\uDEE0"], /* Low Surrogate */ + ["\uDEE1", "\uDEE1"], /* Low Surrogate */ + ["\uDEE2", "\uDEE2"], /* Low Surrogate */ + ["\uDEE3", "\uDEE3"], /* Low Surrogate */ + ["\uDEE4", "\uDEE4"], /* Low Surrogate */ + ["\uDEE5", "\uDEE5"], /* Low Surrogate */ + ["\uDEE6", "\uDEE6"], /* Low Surrogate */ + ["\uDEE7", "\uDEE7"], /* Low Surrogate */ + ["\uDEE8", "\uDEE8"], /* Low Surrogate */ + ["\uDEE9", "\uDEE9"], /* Low Surrogate */ + ["\uDEEA", "\uDEEA"], /* Low Surrogate */ + ["\uDEEB", "\uDEEB"], /* Low Surrogate */ + ["\uDEEC", "\uDEEC"], /* Low Surrogate */ + ["\uDEED", "\uDEED"], /* Low Surrogate */ + ["\uDEEE", "\uDEEE"], /* Low Surrogate */ + ["\uDEEF", "\uDEEF"], /* Low Surrogate */ + ["\uDEF0", "\uDEF0"], /* Low Surrogate */ + ["\uDEF1", "\uDEF1"], /* Low Surrogate */ + ["\uDEF2", "\uDEF2"], /* Low Surrogate */ + ["\uDEF3", "\uDEF3"], /* Low Surrogate */ + ["\uDEF4", "\uDEF4"], /* Low Surrogate */ + ["\uDEF5", "\uDEF5"], /* Low Surrogate */ + ["\uDEF6", "\uDEF6"], /* Low Surrogate */ + ["\uDEF7", "\uDEF7"], /* Low Surrogate */ + ["\uDEF8", "\uDEF8"], /* Low Surrogate */ + ["\uDEF9", "\uDEF9"], /* Low Surrogate */ + ["\uDEFA", "\uDEFA"], /* Low Surrogate */ + ["\uDEFB", "\uDEFB"], /* Low Surrogate */ + ["\uDEFC", "\uDEFC"], /* Low Surrogate */ + ["\uDEFD", "\uDEFD"], /* Low Surrogate */ + ["\uDEFE", "\uDEFE"], /* Low Surrogate */ + ["\uDEFF", "\uDEFF"], /* Low Surrogate */ + ["\uDF00", "\uDF00"], /* Low Surrogate */ + ["\uDF01", "\uDF01"], /* Low Surrogate */ + ["\uDF02", "\uDF02"], /* Low Surrogate */ + ["\uDF03", "\uDF03"], /* Low Surrogate */ + ["\uDF04", "\uDF04"], /* Low Surrogate */ + ["\uDF05", "\uDF05"], /* Low Surrogate */ + ["\uDF06", "\uDF06"], /* Low Surrogate */ + ["\uDF07", "\uDF07"], /* Low Surrogate */ + ["\uDF08", "\uDF08"], /* Low Surrogate */ + ["\uDF09", "\uDF09"], /* Low Surrogate */ + ["\uDF0A", "\uDF0A"], /* Low Surrogate */ + ["\uDF0B", "\uDF0B"], /* Low Surrogate */ + ["\uDF0C", "\uDF0C"], /* Low Surrogate */ + ["\uDF0D", "\uDF0D"], /* Low Surrogate */ + ["\uDF0E", "\uDF0E"], /* Low Surrogate */ + ["\uDF0F", "\uDF0F"], /* Low Surrogate */ + ["\uDF10", "\uDF10"], /* Low Surrogate */ + ["\uDF11", "\uDF11"], /* Low Surrogate */ + ["\uDF12", "\uDF12"], /* Low Surrogate */ + ["\uDF13", "\uDF13"], /* Low Surrogate */ + ["\uDF14", "\uDF14"], /* Low Surrogate */ + ["\uDF15", "\uDF15"], /* Low Surrogate */ + ["\uDF16", "\uDF16"], /* Low Surrogate */ + ["\uDF17", "\uDF17"], /* Low Surrogate */ + ["\uDF18", "\uDF18"], /* Low Surrogate */ + ["\uDF19", "\uDF19"], /* Low Surrogate */ + ["\uDF1A", "\uDF1A"], /* Low Surrogate */ + ["\uDF1B", "\uDF1B"], /* Low Surrogate */ + ["\uDF1C", "\uDF1C"], /* Low Surrogate */ + ["\uDF1D", "\uDF1D"], /* Low Surrogate */ + ["\uDF1E", "\uDF1E"], /* Low Surrogate */ + ["\uDF1F", "\uDF1F"], /* Low Surrogate */ + ["\uDF20", "\uDF20"], /* Low Surrogate */ + ["\uDF21", "\uDF21"], /* Low Surrogate */ + ["\uDF22", "\uDF22"], /* Low Surrogate */ + ["\uDF23", "\uDF23"], /* Low Surrogate */ + ["\uDF24", "\uDF24"], /* Low Surrogate */ + ["\uDF25", "\uDF25"], /* Low Surrogate */ + ["\uDF26", "\uDF26"], /* Low Surrogate */ + ["\uDF27", "\uDF27"], /* Low Surrogate */ + ["\uDF28", "\uDF28"], /* Low Surrogate */ + ["\uDF29", "\uDF29"], /* Low Surrogate */ + ["\uDF2A", "\uDF2A"], /* Low Surrogate */ + ["\uDF2B", "\uDF2B"], /* Low Surrogate */ + ["\uDF2C", "\uDF2C"], /* Low Surrogate */ + ["\uDF2D", "\uDF2D"], /* Low Surrogate */ + ["\uDF2E", "\uDF2E"], /* Low Surrogate */ + ["\uDF2F", "\uDF2F"], /* Low Surrogate */ + ["\uDF30", "\uDF30"], /* Low Surrogate */ + ["\uDF31", "\uDF31"], /* Low Surrogate */ + ["\uDF32", "\uDF32"], /* Low Surrogate */ + ["\uDF33", "\uDF33"], /* Low Surrogate */ + ["\uDF34", "\uDF34"], /* Low Surrogate */ + ["\uDF35", "\uDF35"], /* Low Surrogate */ + ["\uDF36", "\uDF36"], /* Low Surrogate */ + ["\uDF37", "\uDF37"], /* Low Surrogate */ + ["\uDF38", "\uDF38"], /* Low Surrogate */ + ["\uDF39", "\uDF39"], /* Low Surrogate */ + ["\uDF3A", "\uDF3A"], /* Low Surrogate */ + ["\uDF3B", "\uDF3B"], /* Low Surrogate */ + ["\uDF3C", "\uDF3C"], /* Low Surrogate */ + ["\uDF3D", "\uDF3D"], /* Low Surrogate */ + ["\uDF3E", "\uDF3E"], /* Low Surrogate */ + ["\uDF3F", "\uDF3F"], /* Low Surrogate */ + ["\uDF40", "\uDF40"], /* Low Surrogate */ + ["\uDF41", "\uDF41"], /* Low Surrogate */ + ["\uDF42", "\uDF42"], /* Low Surrogate */ + ["\uDF43", "\uDF43"], /* Low Surrogate */ + ["\uDF44", "\uDF44"], /* Low Surrogate */ + ["\uDF45", "\uDF45"], /* Low Surrogate */ + ["\uDF46", "\uDF46"], /* Low Surrogate */ + ["\uDF47", "\uDF47"], /* Low Surrogate */ + ["\uDF48", "\uDF48"], /* Low Surrogate */ + ["\uDF49", "\uDF49"], /* Low Surrogate */ + ["\uDF4A", "\uDF4A"], /* Low Surrogate */ + ["\uDF4B", "\uDF4B"], /* Low Surrogate */ + ["\uDF4C", "\uDF4C"], /* Low Surrogate */ + ["\uDF4D", "\uDF4D"], /* Low Surrogate */ + ["\uDF4E", "\uDF4E"], /* Low Surrogate */ + ["\uDF4F", "\uDF4F"], /* Low Surrogate */ + ["\uDF50", "\uDF50"], /* Low Surrogate */ + ["\uDF51", "\uDF51"], /* Low Surrogate */ + ["\uDF52", "\uDF52"], /* Low Surrogate */ + ["\uDF53", "\uDF53"], /* Low Surrogate */ + ["\uDF54", "\uDF54"], /* Low Surrogate */ + ["\uDF55", "\uDF55"], /* Low Surrogate */ + ["\uDF56", "\uDF56"], /* Low Surrogate */ + ["\uDF57", "\uDF57"], /* Low Surrogate */ + ["\uDF58", "\uDF58"], /* Low Surrogate */ + ["\uDF59", "\uDF59"], /* Low Surrogate */ + ["\uDF5A", "\uDF5A"], /* Low Surrogate */ + ["\uDF5B", "\uDF5B"], /* Low Surrogate */ + ["\uDF5C", "\uDF5C"], /* Low Surrogate */ + ["\uDF5D", "\uDF5D"], /* Low Surrogate */ + ["\uDF5E", "\uDF5E"], /* Low Surrogate */ + ["\uDF5F", "\uDF5F"], /* Low Surrogate */ + ["\uDF60", "\uDF60"], /* Low Surrogate */ + ["\uDF61", "\uDF61"], /* Low Surrogate */ + ["\uDF62", "\uDF62"], /* Low Surrogate */ + ["\uDF63", "\uDF63"], /* Low Surrogate */ + ["\uDF64", "\uDF64"], /* Low Surrogate */ + ["\uDF65", "\uDF65"], /* Low Surrogate */ + ["\uDF66", "\uDF66"], /* Low Surrogate */ + ["\uDF67", "\uDF67"], /* Low Surrogate */ + ["\uDF68", "\uDF68"], /* Low Surrogate */ + ["\uDF69", "\uDF69"], /* Low Surrogate */ + ["\uDF6A", "\uDF6A"], /* Low Surrogate */ + ["\uDF6B", "\uDF6B"], /* Low Surrogate */ + ["\uDF6C", "\uDF6C"], /* Low Surrogate */ + ["\uDF6D", "\uDF6D"], /* Low Surrogate */ + ["\uDF6E", "\uDF6E"], /* Low Surrogate */ + ["\uDF6F", "\uDF6F"], /* Low Surrogate */ + ["\uDF70", "\uDF70"], /* Low Surrogate */ + ["\uDF71", "\uDF71"], /* Low Surrogate */ + ["\uDF72", "\uDF72"], /* Low Surrogate */ + ["\uDF73", "\uDF73"], /* Low Surrogate */ + ["\uDF74", "\uDF74"], /* Low Surrogate */ + ["\uDF75", "\uDF75"], /* Low Surrogate */ + ["\uDF76", "\uDF76"], /* Low Surrogate */ + ["\uDF77", "\uDF77"], /* Low Surrogate */ + ["\uDF78", "\uDF78"], /* Low Surrogate */ + ["\uDF79", "\uDF79"], /* Low Surrogate */ + ["\uDF7A", "\uDF7A"], /* Low Surrogate */ + ["\uDF7B", "\uDF7B"], /* Low Surrogate */ + ["\uDF7C", "\uDF7C"], /* Low Surrogate */ + ["\uDF7D", "\uDF7D"], /* Low Surrogate */ + ["\uDF7E", "\uDF7E"], /* Low Surrogate */ + ["\uDF7F", "\uDF7F"], /* Low Surrogate */ + ["\uDF80", "\uDF80"], /* Low Surrogate */ + ["\uDF81", "\uDF81"], /* Low Surrogate */ + ["\uDF82", "\uDF82"], /* Low Surrogate */ + ["\uDF83", "\uDF83"], /* Low Surrogate */ + ["\uDF84", "\uDF84"], /* Low Surrogate */ + ["\uDF85", "\uDF85"], /* Low Surrogate */ + ["\uDF86", "\uDF86"], /* Low Surrogate */ + ["\uDF87", "\uDF87"], /* Low Surrogate */ + ["\uDF88", "\uDF88"], /* Low Surrogate */ + ["\uDF89", "\uDF89"], /* Low Surrogate */ + ["\uDF8A", "\uDF8A"], /* Low Surrogate */ + ["\uDF8B", "\uDF8B"], /* Low Surrogate */ + ["\uDF8C", "\uDF8C"], /* Low Surrogate */ + ["\uDF8D", "\uDF8D"], /* Low Surrogate */ + ["\uDF8E", "\uDF8E"], /* Low Surrogate */ + ["\uDF8F", "\uDF8F"], /* Low Surrogate */ + ["\uDF90", "\uDF90"], /* Low Surrogate */ + ["\uDF91", "\uDF91"], /* Low Surrogate */ + ["\uDF92", "\uDF92"], /* Low Surrogate */ + ["\uDF93", "\uDF93"], /* Low Surrogate */ + ["\uDF94", "\uDF94"], /* Low Surrogate */ + ["\uDF95", "\uDF95"], /* Low Surrogate */ + ["\uDF96", "\uDF96"], /* Low Surrogate */ + ["\uDF97", "\uDF97"], /* Low Surrogate */ + ["\uDF98", "\uDF98"], /* Low Surrogate */ + ["\uDF99", "\uDF99"], /* Low Surrogate */ + ["\uDF9A", "\uDF9A"], /* Low Surrogate */ + ["\uDF9B", "\uDF9B"], /* Low Surrogate */ + ["\uDF9C", "\uDF9C"], /* Low Surrogate */ + ["\uDF9D", "\uDF9D"], /* Low Surrogate */ + ["\uDF9E", "\uDF9E"], /* Low Surrogate */ + ["\uDF9F", "\uDF9F"], /* Low Surrogate */ + ["\uDFA0", "\uDFA0"], /* Low Surrogate */ + ["\uDFA1", "\uDFA1"], /* Low Surrogate */ + ["\uDFA2", "\uDFA2"], /* Low Surrogate */ + ["\uDFA3", "\uDFA3"], /* Low Surrogate */ + ["\uDFA4", "\uDFA4"], /* Low Surrogate */ + ["\uDFA5", "\uDFA5"], /* Low Surrogate */ + ["\uDFA6", "\uDFA6"], /* Low Surrogate */ + ["\uDFA7", "\uDFA7"], /* Low Surrogate */ + ["\uDFA8", "\uDFA8"], /* Low Surrogate */ + ["\uDFA9", "\uDFA9"], /* Low Surrogate */ + ["\uDFAA", "\uDFAA"], /* Low Surrogate */ + ["\uDFAB", "\uDFAB"], /* Low Surrogate */ + ["\uDFAC", "\uDFAC"], /* Low Surrogate */ + ["\uDFAD", "\uDFAD"], /* Low Surrogate */ + ["\uDFAE", "\uDFAE"], /* Low Surrogate */ + ["\uDFAF", "\uDFAF"], /* Low Surrogate */ + ["\uDFB0", "\uDFB0"], /* Low Surrogate */ + ["\uDFB1", "\uDFB1"], /* Low Surrogate */ + ["\uDFB2", "\uDFB2"], /* Low Surrogate */ + ["\uDFB3", "\uDFB3"], /* Low Surrogate */ + ["\uDFB4", "\uDFB4"], /* Low Surrogate */ + ["\uDFB5", "\uDFB5"], /* Low Surrogate */ + ["\uDFB6", "\uDFB6"], /* Low Surrogate */ + ["\uDFB7", "\uDFB7"], /* Low Surrogate */ + ["\uDFB8", "\uDFB8"], /* Low Surrogate */ + ["\uDFB9", "\uDFB9"], /* Low Surrogate */ + ["\uDFBA", "\uDFBA"], /* Low Surrogate */ + ["\uDFBB", "\uDFBB"], /* Low Surrogate */ + ["\uDFBC", "\uDFBC"], /* Low Surrogate */ + ["\uDFBD", "\uDFBD"], /* Low Surrogate */ + ["\uDFBE", "\uDFBE"], /* Low Surrogate */ + ["\uDFBF", "\uDFBF"], /* Low Surrogate */ + ["\uDFC0", "\uDFC0"], /* Low Surrogate */ + ["\uDFC1", "\uDFC1"], /* Low Surrogate */ + ["\uDFC2", "\uDFC2"], /* Low Surrogate */ + ["\uDFC3", "\uDFC3"], /* Low Surrogate */ + ["\uDFC4", "\uDFC4"], /* Low Surrogate */ + ["\uDFC5", "\uDFC5"], /* Low Surrogate */ + ["\uDFC6", "\uDFC6"], /* Low Surrogate */ + ["\uDFC7", "\uDFC7"], /* Low Surrogate */ + ["\uDFC8", "\uDFC8"], /* Low Surrogate */ + ["\uDFC9", "\uDFC9"], /* Low Surrogate */ + ["\uDFCA", "\uDFCA"], /* Low Surrogate */ + ["\uDFCB", "\uDFCB"], /* Low Surrogate */ + ["\uDFCC", "\uDFCC"], /* Low Surrogate */ + ["\uDFCD", "\uDFCD"], /* Low Surrogate */ + ["\uDFCE", "\uDFCE"], /* Low Surrogate */ + ["\uDFCF", "\uDFCF"], /* Low Surrogate */ + ["\uDFD0", "\uDFD0"], /* Low Surrogate */ + ["\uDFD1", "\uDFD1"], /* Low Surrogate */ + ["\uDFD2", "\uDFD2"], /* Low Surrogate */ + ["\uDFD3", "\uDFD3"], /* Low Surrogate */ + ["\uDFD4", "\uDFD4"], /* Low Surrogate */ + ["\uDFD5", "\uDFD5"], /* Low Surrogate */ + ["\uDFD6", "\uDFD6"], /* Low Surrogate */ + ["\uDFD7", "\uDFD7"], /* Low Surrogate */ + ["\uDFD8", "\uDFD8"], /* Low Surrogate */ + ["\uDFD9", "\uDFD9"], /* Low Surrogate */ + ["\uDFDA", "\uDFDA"], /* Low Surrogate */ + ["\uDFDB", "\uDFDB"], /* Low Surrogate */ + ["\uDFDC", "\uDFDC"], /* Low Surrogate */ + ["\uDFDD", "\uDFDD"], /* Low Surrogate */ + ["\uDFDE", "\uDFDE"], /* Low Surrogate */ + ["\uDFDF", "\uDFDF"], /* Low Surrogate */ + ["\uDFE0", "\uDFE0"], /* Low Surrogate */ + ["\uDFE1", "\uDFE1"], /* Low Surrogate */ + ["\uDFE2", "\uDFE2"], /* Low Surrogate */ + ["\uDFE3", "\uDFE3"], /* Low Surrogate */ + ["\uDFE4", "\uDFE4"], /* Low Surrogate */ + ["\uDFE5", "\uDFE5"], /* Low Surrogate */ + ["\uDFE6", "\uDFE6"], /* Low Surrogate */ + ["\uDFE7", "\uDFE7"], /* Low Surrogate */ + ["\uDFE8", "\uDFE8"], /* Low Surrogate */ + ["\uDFE9", "\uDFE9"], /* Low Surrogate */ + ["\uDFEA", "\uDFEA"], /* Low Surrogate */ + ["\uDFEB", "\uDFEB"], /* Low Surrogate */ + ["\uDFEC", "\uDFEC"], /* Low Surrogate */ + ["\uDFED", "\uDFED"], /* Low Surrogate */ + ["\uDFEE", "\uDFEE"], /* Low Surrogate */ + ["\uDFEF", "\uDFEF"], /* Low Surrogate */ + ["\uDFF0", "\uDFF0"], /* Low Surrogate */ + ["\uDFF1", "\uDFF1"], /* Low Surrogate */ + ["\uDFF2", "\uDFF2"], /* Low Surrogate */ + ["\uDFF3", "\uDFF3"], /* Low Surrogate */ + ["\uDFF4", "\uDFF4"], /* Low Surrogate */ + ["\uDFF5", "\uDFF5"], /* Low Surrogate */ + ["\uDFF6", "\uDFF6"], /* Low Surrogate */ + ["\uDFF7", "\uDFF7"], /* Low Surrogate */ + ["\uDFF8", "\uDFF8"], /* Low Surrogate */ + ["\uDFF9", "\uDFF9"], /* Low Surrogate */ + ["\uDFFA", "\uDFFA"], /* Low Surrogate */ + ["\uDFFB", "\uDFFB"], /* Low Surrogate */ + ["\uDFFC", "\uDFFC"], /* Low Surrogate */ + ["\uDFFD", "\uDFFD"], /* Low Surrogate */ + ["\uDFFE", "\uDFFE"], /* Low Surrogate */ + ["\uDFFF", "\uDFFF"], /* Low Surrogate */ + ["\uE000", "\uE000"], /* Private Use */ + ["\uE001", "\uE001"], /* Private Use */ + ["\uE002", "\uE002"], /* Private Use */ + ["\uE003", "\uE003"], /* Private Use */ + ["\uE004", "\uE004"], /* Private Use */ + ["\uE005", "\uE005"], /* Private Use */ + ["\uE006", "\uE006"], /* Private Use */ + ["\uE007", "\uE007"], /* Private Use */ + ["\uE008", "\uE008"], /* Private Use */ + ["\uE009", "\uE009"], /* Private Use */ + ["\uE00A", "\uE00A"], /* Private Use */ + ["\uE00B", "\uE00B"], /* Private Use */ + ["\uE00C", "\uE00C"], /* Private Use */ + ["\uE00D", "\uE00D"], /* Private Use */ + ["\uE00E", "\uE00E"], /* Private Use */ + ["\uE00F", "\uE00F"], /* Private Use */ + ["\uE010", "\uE010"], /* Private Use */ + ["\uE011", "\uE011"], /* Private Use */ + ["\uE012", "\uE012"], /* Private Use */ + ["\uE013", "\uE013"], /* Private Use */ + ["\uE014", "\uE014"], /* Private Use */ + ["\uE015", "\uE015"], /* Private Use */ + ["\uE016", "\uE016"], /* Private Use */ + ["\uE017", "\uE017"], /* Private Use */ + ["\uE018", "\uE018"], /* Private Use */ + ["\uE019", "\uE019"], /* Private Use */ + ["\uE01A", "\uE01A"], /* Private Use */ + ["\uE01B", "\uE01B"], /* Private Use */ + ["\uE01C", "\uE01C"], /* Private Use */ + ["\uE01D", "\uE01D"], /* Private Use */ + ["\uE01E", "\uE01E"], /* Private Use */ + ["\uE01F", "\uE01F"], /* Private Use */ + ["\uE020", "\uE020"], /* Private Use */ + ["\uE021", "\uE021"], /* Private Use */ + ["\uE022", "\uE022"], /* Private Use */ + ["\uE023", "\uE023"], /* Private Use */ + ["\uE024", "\uE024"], /* Private Use */ + ["\uE025", "\uE025"], /* Private Use */ + ["\uE026", "\uE026"], /* Private Use */ + ["\uE027", "\uE027"], /* Private Use */ + ["\uE028", "\uE028"], /* Private Use */ + ["\uE029", "\uE029"], /* Private Use */ + ["\uE02A", "\uE02A"], /* Private Use */ + ["\uE02B", "\uE02B"], /* Private Use */ + ["\uE02C", "\uE02C"], /* Private Use */ + ["\uE02D", "\uE02D"], /* Private Use */ + ["\uE02E", "\uE02E"], /* Private Use */ + ["\uE02F", "\uE02F"], /* Private Use */ + ["\uE030", "\uE030"], /* Private Use */ + ["\uE031", "\uE031"], /* Private Use */ + ["\uE032", "\uE032"], /* Private Use */ + ["\uE033", "\uE033"], /* Private Use */ + ["\uE034", "\uE034"], /* Private Use */ + ["\uE035", "\uE035"], /* Private Use */ + ["\uE036", "\uE036"], /* Private Use */ + ["\uE037", "\uE037"], /* Private Use */ + ["\uE038", "\uE038"], /* Private Use */ + ["\uE039", "\uE039"], /* Private Use */ + ["\uE03A", "\uE03A"], /* Private Use */ + ["\uE03B", "\uE03B"], /* Private Use */ + ["\uE03C", "\uE03C"], /* Private Use */ + ["\uE03D", "\uE03D"], /* Private Use */ + ["\uE03E", "\uE03E"], /* Private Use */ + ["\uE03F", "\uE03F"], /* Private Use */ + ["\uE040", "\uE040"], /* Private Use */ + ["\uE041", "\uE041"], /* Private Use */ + ["\uE042", "\uE042"], /* Private Use */ + ["\uE043", "\uE043"], /* Private Use */ + ["\uE044", "\uE044"], /* Private Use */ + ["\uE045", "\uE045"], /* Private Use */ + ["\uE046", "\uE046"], /* Private Use */ + ["\uE047", "\uE047"], /* Private Use */ + ["\uE048", "\uE048"], /* Private Use */ + ["\uE049", "\uE049"], /* Private Use */ + ["\uE04A", "\uE04A"], /* Private Use */ + ["\uE04B", "\uE04B"], /* Private Use */ + ["\uE04C", "\uE04C"], /* Private Use */ + ["\uE04D", "\uE04D"], /* Private Use */ + ["\uE04E", "\uE04E"], /* Private Use */ + ["\uE04F", "\uE04F"], /* Private Use */ + ["\uE050", "\uE050"], /* Private Use */ + ["\uE051", "\uE051"], /* Private Use */ + ["\uE052", "\uE052"], /* Private Use */ + ["\uE053", "\uE053"], /* Private Use */ + ["\uE054", "\uE054"], /* Private Use */ + ["\uE055", "\uE055"], /* Private Use */ + ["\uE056", "\uE056"], /* Private Use */ + ["\uE057", "\uE057"], /* Private Use */ + ["\uE058", "\uE058"], /* Private Use */ + ["\uE059", "\uE059"], /* Private Use */ + ["\uE05A", "\uE05A"], /* Private Use */ + ["\uE05B", "\uE05B"], /* Private Use */ + ["\uE05C", "\uE05C"], /* Private Use */ + ["\uE05D", "\uE05D"], /* Private Use */ + ["\uE05E", "\uE05E"], /* Private Use */ + ["\uE05F", "\uE05F"], /* Private Use */ + ["\uE060", "\uE060"], /* Private Use */ + ["\uE061", "\uE061"], /* Private Use */ + ["\uE062", "\uE062"], /* Private Use */ + ["\uE063", "\uE063"], /* Private Use */ + ["\uE064", "\uE064"], /* Private Use */ + ["\uE065", "\uE065"], /* Private Use */ + ["\uE066", "\uE066"], /* Private Use */ + ["\uE067", "\uE067"], /* Private Use */ + ["\uE068", "\uE068"], /* Private Use */ + ["\uE069", "\uE069"], /* Private Use */ + ["\uE06A", "\uE06A"], /* Private Use */ + ["\uE06B", "\uE06B"], /* Private Use */ + ["\uE06C", "\uE06C"], /* Private Use */ + ["\uE06D", "\uE06D"], /* Private Use */ + ["\uE06E", "\uE06E"], /* Private Use */ + ["\uE06F", "\uE06F"], /* Private Use */ + ["\uE070", "\uE070"], /* Private Use */ + ["\uE071", "\uE071"], /* Private Use */ + ["\uE072", "\uE072"], /* Private Use */ + ["\uE073", "\uE073"], /* Private Use */ + ["\uE074", "\uE074"], /* Private Use */ + ["\uE075", "\uE075"], /* Private Use */ + ["\uE076", "\uE076"], /* Private Use */ + ["\uE077", "\uE077"], /* Private Use */ + ["\uE078", "\uE078"], /* Private Use */ + ["\uE079", "\uE079"], /* Private Use */ + ["\uE07A", "\uE07A"], /* Private Use */ + ["\uE07B", "\uE07B"], /* Private Use */ + ["\uE07C", "\uE07C"], /* Private Use */ + ["\uE07D", "\uE07D"], /* Private Use */ + ["\uE07E", "\uE07E"], /* Private Use */ + ["\uE07F", "\uE07F"], /* Private Use */ + ["\uE080", "\uE080"], /* Private Use */ + ["\uE081", "\uE081"], /* Private Use */ + ["\uE082", "\uE082"], /* Private Use */ + ["\uE083", "\uE083"], /* Private Use */ + ["\uE084", "\uE084"], /* Private Use */ + ["\uE085", "\uE085"], /* Private Use */ + ["\uE086", "\uE086"], /* Private Use */ + ["\uE087", "\uE087"], /* Private Use */ + ["\uE088", "\uE088"], /* Private Use */ + ["\uE089", "\uE089"], /* Private Use */ + ["\uE08A", "\uE08A"], /* Private Use */ + ["\uE08B", "\uE08B"], /* Private Use */ + ["\uE08C", "\uE08C"], /* Private Use */ + ["\uE08D", "\uE08D"], /* Private Use */ + ["\uE08E", "\uE08E"], /* Private Use */ + ["\uE08F", "\uE08F"], /* Private Use */ + ["\uE090", "\uE090"], /* Private Use */ + ["\uE091", "\uE091"], /* Private Use */ + ["\uE092", "\uE092"], /* Private Use */ + ["\uE093", "\uE093"], /* Private Use */ + ["\uE094", "\uE094"], /* Private Use */ + ["\uE095", "\uE095"], /* Private Use */ + ["\uE096", "\uE096"], /* Private Use */ + ["\uE097", "\uE097"], /* Private Use */ + ["\uE098", "\uE098"], /* Private Use */ + ["\uE099", "\uE099"], /* Private Use */ + ["\uE09A", "\uE09A"], /* Private Use */ + ["\uE09B", "\uE09B"], /* Private Use */ + ["\uE09C", "\uE09C"], /* Private Use */ + ["\uE09D", "\uE09D"], /* Private Use */ + ["\uE09E", "\uE09E"], /* Private Use */ + ["\uE09F", "\uE09F"], /* Private Use */ + ["\uE0A0", "\uE0A0"], /* Private Use */ + ["\uE0A1", "\uE0A1"], /* Private Use */ + ["\uE0A2", "\uE0A2"], /* Private Use */ + ["\uE0A3", "\uE0A3"], /* Private Use */ + ["\uE0A4", "\uE0A4"], /* Private Use */ + ["\uE0A5", "\uE0A5"], /* Private Use */ + ["\uE0A6", "\uE0A6"], /* Private Use */ + ["\uE0A7", "\uE0A7"], /* Private Use */ + ["\uE0A8", "\uE0A8"], /* Private Use */ + ["\uE0A9", "\uE0A9"], /* Private Use */ + ["\uE0AA", "\uE0AA"], /* Private Use */ + ["\uE0AB", "\uE0AB"], /* Private Use */ + ["\uE0AC", "\uE0AC"], /* Private Use */ + ["\uE0AD", "\uE0AD"], /* Private Use */ + ["\uE0AE", "\uE0AE"], /* Private Use */ + ["\uE0AF", "\uE0AF"], /* Private Use */ + ["\uE0B0", "\uE0B0"], /* Private Use */ + ["\uE0B1", "\uE0B1"], /* Private Use */ + ["\uE0B2", "\uE0B2"], /* Private Use */ + ["\uE0B3", "\uE0B3"], /* Private Use */ + ["\uE0B4", "\uE0B4"], /* Private Use */ + ["\uE0B5", "\uE0B5"], /* Private Use */ + ["\uE0B6", "\uE0B6"], /* Private Use */ + ["\uE0B7", "\uE0B7"], /* Private Use */ + ["\uE0B8", "\uE0B8"], /* Private Use */ + ["\uE0B9", "\uE0B9"], /* Private Use */ + ["\uE0BA", "\uE0BA"], /* Private Use */ + ["\uE0BB", "\uE0BB"], /* Private Use */ + ["\uE0BC", "\uE0BC"], /* Private Use */ + ["\uE0BD", "\uE0BD"], /* Private Use */ + ["\uE0BE", "\uE0BE"], /* Private Use */ + ["\uE0BF", "\uE0BF"], /* Private Use */ + ["\uE0C0", "\uE0C0"], /* Private Use */ + ["\uE0C1", "\uE0C1"], /* Private Use */ + ["\uE0C2", "\uE0C2"], /* Private Use */ + ["\uE0C3", "\uE0C3"], /* Private Use */ + ["\uE0C4", "\uE0C4"], /* Private Use */ + ["\uE0C5", "\uE0C5"], /* Private Use */ + ["\uE0C6", "\uE0C6"], /* Private Use */ + ["\uE0C7", "\uE0C7"], /* Private Use */ + ["\uE0C8", "\uE0C8"], /* Private Use */ + ["\uE0C9", "\uE0C9"], /* Private Use */ + ["\uE0CA", "\uE0CA"], /* Private Use */ + ["\uE0CB", "\uE0CB"], /* Private Use */ + ["\uE0CC", "\uE0CC"], /* Private Use */ + ["\uE0CD", "\uE0CD"], /* Private Use */ + ["\uE0CE", "\uE0CE"], /* Private Use */ + ["\uE0CF", "\uE0CF"], /* Private Use */ + ["\uE0D0", "\uE0D0"], /* Private Use */ + ["\uE0D1", "\uE0D1"], /* Private Use */ + ["\uE0D2", "\uE0D2"], /* Private Use */ + ["\uE0D3", "\uE0D3"], /* Private Use */ + ["\uE0D4", "\uE0D4"], /* Private Use */ + ["\uE0D5", "\uE0D5"], /* Private Use */ + ["\uE0D6", "\uE0D6"], /* Private Use */ + ["\uE0D7", "\uE0D7"], /* Private Use */ + ["\uE0D8", "\uE0D8"], /* Private Use */ + ["\uE0D9", "\uE0D9"], /* Private Use */ + ["\uE0DA", "\uE0DA"], /* Private Use */ + ["\uE0DB", "\uE0DB"], /* Private Use */ + ["\uE0DC", "\uE0DC"], /* Private Use */ + ["\uE0DD", "\uE0DD"], /* Private Use */ + ["\uE0DE", "\uE0DE"], /* Private Use */ + ["\uE0DF", "\uE0DF"], /* Private Use */ + ["\uE0E0", "\uE0E0"], /* Private Use */ + ["\uE0E1", "\uE0E1"], /* Private Use */ + ["\uE0E2", "\uE0E2"], /* Private Use */ + ["\uE0E3", "\uE0E3"], /* Private Use */ + ["\uE0E4", "\uE0E4"], /* Private Use */ + ["\uE0E5", "\uE0E5"], /* Private Use */ + ["\uE0E6", "\uE0E6"], /* Private Use */ + ["\uE0E7", "\uE0E7"], /* Private Use */ + ["\uE0E8", "\uE0E8"], /* Private Use */ + ["\uE0E9", "\uE0E9"], /* Private Use */ + ["\uE0EA", "\uE0EA"], /* Private Use */ + ["\uE0EB", "\uE0EB"], /* Private Use */ + ["\uE0EC", "\uE0EC"], /* Private Use */ + ["\uE0ED", "\uE0ED"], /* Private Use */ + ["\uE0EE", "\uE0EE"], /* Private Use */ + ["\uE0EF", "\uE0EF"], /* Private Use */ + ["\uE0F0", "\uE0F0"], /* Private Use */ + ["\uE0F1", "\uE0F1"], /* Private Use */ + ["\uE0F2", "\uE0F2"], /* Private Use */ + ["\uE0F3", "\uE0F3"], /* Private Use */ + ["\uE0F4", "\uE0F4"], /* Private Use */ + ["\uE0F5", "\uE0F5"], /* Private Use */ + ["\uE0F6", "\uE0F6"], /* Private Use */ + ["\uE0F7", "\uE0F7"], /* Private Use */ + ["\uE0F8", "\uE0F8"], /* Private Use */ + ["\uE0F9", "\uE0F9"], /* Private Use */ + ["\uE0FA", "\uE0FA"], /* Private Use */ + ["\uE0FB", "\uE0FB"], /* Private Use */ + ["\uE0FC", "\uE0FC"], /* Private Use */ + ["\uE0FD", "\uE0FD"], /* Private Use */ + ["\uE0FE", "\uE0FE"], /* Private Use */ + ["\uE0FF", "\uE0FF"], /* Private Use */ + ["\uE100", "\uE100"], /* Private Use */ + ["\uE101", "\uE101"], /* Private Use */ + ["\uE102", "\uE102"], /* Private Use */ + ["\uE103", "\uE103"], /* Private Use */ + ["\uE104", "\uE104"], /* Private Use */ + ["\uE105", "\uE105"], /* Private Use */ + ["\uE106", "\uE106"], /* Private Use */ + ["\uE107", "\uE107"], /* Private Use */ + ["\uE108", "\uE108"], /* Private Use */ + ["\uE109", "\uE109"], /* Private Use */ + ["\uE10A", "\uE10A"], /* Private Use */ + ["\uE10B", "\uE10B"], /* Private Use */ + ["\uE10C", "\uE10C"], /* Private Use */ + ["\uE10D", "\uE10D"], /* Private Use */ + ["\uE10E", "\uE10E"], /* Private Use */ + ["\uE10F", "\uE10F"], /* Private Use */ + ["\uE110", "\uE110"], /* Private Use */ + ["\uE111", "\uE111"], /* Private Use */ + ["\uE112", "\uE112"], /* Private Use */ + ["\uE113", "\uE113"], /* Private Use */ + ["\uE114", "\uE114"], /* Private Use */ + ["\uE115", "\uE115"], /* Private Use */ + ["\uE116", "\uE116"], /* Private Use */ + ["\uE117", "\uE117"], /* Private Use */ + ["\uE118", "\uE118"], /* Private Use */ + ["\uE119", "\uE119"], /* Private Use */ + ["\uE11A", "\uE11A"], /* Private Use */ + ["\uE11B", "\uE11B"], /* Private Use */ + ["\uE11C", "\uE11C"], /* Private Use */ + ["\uE11D", "\uE11D"], /* Private Use */ + ["\uE11E", "\uE11E"], /* Private Use */ + ["\uE11F", "\uE11F"], /* Private Use */ + ["\uE120", "\uE120"], /* Private Use */ + ["\uE121", "\uE121"], /* Private Use */ + ["\uE122", "\uE122"], /* Private Use */ + ["\uE123", "\uE123"], /* Private Use */ + ["\uE124", "\uE124"], /* Private Use */ + ["\uE125", "\uE125"], /* Private Use */ + ["\uE126", "\uE126"], /* Private Use */ + ["\uE127", "\uE127"], /* Private Use */ + ["\uE128", "\uE128"], /* Private Use */ + ["\uE129", "\uE129"], /* Private Use */ + ["\uE12A", "\uE12A"], /* Private Use */ + ["\uE12B", "\uE12B"], /* Private Use */ + ["\uE12C", "\uE12C"], /* Private Use */ + ["\uE12D", "\uE12D"], /* Private Use */ + ["\uE12E", "\uE12E"], /* Private Use */ + ["\uE12F", "\uE12F"], /* Private Use */ + ["\uE130", "\uE130"], /* Private Use */ + ["\uE131", "\uE131"], /* Private Use */ + ["\uE132", "\uE132"], /* Private Use */ + ["\uE133", "\uE133"], /* Private Use */ + ["\uE134", "\uE134"], /* Private Use */ + ["\uE135", "\uE135"], /* Private Use */ + ["\uE136", "\uE136"], /* Private Use */ + ["\uE137", "\uE137"], /* Private Use */ + ["\uE138", "\uE138"], /* Private Use */ + ["\uE139", "\uE139"], /* Private Use */ + ["\uE13A", "\uE13A"], /* Private Use */ + ["\uE13B", "\uE13B"], /* Private Use */ + ["\uE13C", "\uE13C"], /* Private Use */ + ["\uE13D", "\uE13D"], /* Private Use */ + ["\uE13E", "\uE13E"], /* Private Use */ + ["\uE13F", "\uE13F"], /* Private Use */ + ["\uE140", "\uE140"], /* Private Use */ + ["\uE141", "\uE141"], /* Private Use */ + ["\uE142", "\uE142"], /* Private Use */ + ["\uE143", "\uE143"], /* Private Use */ + ["\uE144", "\uE144"], /* Private Use */ + ["\uE145", "\uE145"], /* Private Use */ + ["\uE146", "\uE146"], /* Private Use */ + ["\uE147", "\uE147"], /* Private Use */ + ["\uE148", "\uE148"], /* Private Use */ + ["\uE149", "\uE149"], /* Private Use */ + ["\uE14A", "\uE14A"], /* Private Use */ + ["\uE14B", "\uE14B"], /* Private Use */ + ["\uE14C", "\uE14C"], /* Private Use */ + ["\uE14D", "\uE14D"], /* Private Use */ + ["\uE14E", "\uE14E"], /* Private Use */ + ["\uE14F", "\uE14F"], /* Private Use */ + ["\uE150", "\uE150"], /* Private Use */ + ["\uE151", "\uE151"], /* Private Use */ + ["\uE152", "\uE152"], /* Private Use */ + ["\uE153", "\uE153"], /* Private Use */ + ["\uE154", "\uE154"], /* Private Use */ + ["\uE155", "\uE155"], /* Private Use */ + ["\uE156", "\uE156"], /* Private Use */ + ["\uE157", "\uE157"], /* Private Use */ + ["\uE158", "\uE158"], /* Private Use */ + ["\uE159", "\uE159"], /* Private Use */ + ["\uE15A", "\uE15A"], /* Private Use */ + ["\uE15B", "\uE15B"], /* Private Use */ + ["\uE15C", "\uE15C"], /* Private Use */ + ["\uE15D", "\uE15D"], /* Private Use */ + ["\uE15E", "\uE15E"], /* Private Use */ + ["\uE15F", "\uE15F"], /* Private Use */ + ["\uE160", "\uE160"], /* Private Use */ + ["\uE161", "\uE161"], /* Private Use */ + ["\uE162", "\uE162"], /* Private Use */ + ["\uE163", "\uE163"], /* Private Use */ + ["\uE164", "\uE164"], /* Private Use */ + ["\uE165", "\uE165"], /* Private Use */ + ["\uE166", "\uE166"], /* Private Use */ + ["\uE167", "\uE167"], /* Private Use */ + ["\uE168", "\uE168"], /* Private Use */ + ["\uE169", "\uE169"], /* Private Use */ + ["\uE16A", "\uE16A"], /* Private Use */ + ["\uE16B", "\uE16B"], /* Private Use */ + ["\uE16C", "\uE16C"], /* Private Use */ + ["\uE16D", "\uE16D"], /* Private Use */ + ["\uE16E", "\uE16E"], /* Private Use */ + ["\uE16F", "\uE16F"], /* Private Use */ + ["\uE170", "\uE170"], /* Private Use */ + ["\uE171", "\uE171"], /* Private Use */ + ["\uE172", "\uE172"], /* Private Use */ + ["\uE173", "\uE173"], /* Private Use */ + ["\uE174", "\uE174"], /* Private Use */ + ["\uE175", "\uE175"], /* Private Use */ + ["\uE176", "\uE176"], /* Private Use */ + ["\uE177", "\uE177"], /* Private Use */ + ["\uE178", "\uE178"], /* Private Use */ + ["\uE179", "\uE179"], /* Private Use */ + ["\uE17A", "\uE17A"], /* Private Use */ + ["\uE17B", "\uE17B"], /* Private Use */ + ["\uE17C", "\uE17C"], /* Private Use */ + ["\uE17D", "\uE17D"], /* Private Use */ + ["\uE17E", "\uE17E"], /* Private Use */ + ["\uE17F", "\uE17F"], /* Private Use */ + ["\uE180", "\uE180"], /* Private Use */ + ["\uE181", "\uE181"], /* Private Use */ + ["\uE182", "\uE182"], /* Private Use */ + ["\uE183", "\uE183"], /* Private Use */ + ["\uE184", "\uE184"], /* Private Use */ + ["\uE185", "\uE185"], /* Private Use */ + ["\uE186", "\uE186"], /* Private Use */ + ["\uE187", "\uE187"], /* Private Use */ + ["\uE188", "\uE188"], /* Private Use */ + ["\uE189", "\uE189"], /* Private Use */ + ["\uE18A", "\uE18A"], /* Private Use */ + ["\uE18B", "\uE18B"], /* Private Use */ + ["\uE18C", "\uE18C"], /* Private Use */ + ["\uE18D", "\uE18D"], /* Private Use */ + ["\uE18E", "\uE18E"], /* Private Use */ + ["\uE18F", "\uE18F"], /* Private Use */ + ["\uE190", "\uE190"], /* Private Use */ + ["\uE191", "\uE191"], /* Private Use */ + ["\uE192", "\uE192"], /* Private Use */ + ["\uE193", "\uE193"], /* Private Use */ + ["\uE194", "\uE194"], /* Private Use */ + ["\uE195", "\uE195"], /* Private Use */ + ["\uE196", "\uE196"], /* Private Use */ + ["\uE197", "\uE197"], /* Private Use */ + ["\uE198", "\uE198"], /* Private Use */ + ["\uE199", "\uE199"], /* Private Use */ + ["\uE19A", "\uE19A"], /* Private Use */ + ["\uE19B", "\uE19B"], /* Private Use */ + ["\uE19C", "\uE19C"], /* Private Use */ + ["\uE19D", "\uE19D"], /* Private Use */ + ["\uE19E", "\uE19E"], /* Private Use */ + ["\uE19F", "\uE19F"], /* Private Use */ + ["\uE1A0", "\uE1A0"], /* Private Use */ + ["\uE1A1", "\uE1A1"], /* Private Use */ + ["\uE1A2", "\uE1A2"], /* Private Use */ + ["\uE1A3", "\uE1A3"], /* Private Use */ + ["\uE1A4", "\uE1A4"], /* Private Use */ + ["\uE1A5", "\uE1A5"], /* Private Use */ + ["\uE1A6", "\uE1A6"], /* Private Use */ + ["\uE1A7", "\uE1A7"], /* Private Use */ + ["\uE1A8", "\uE1A8"], /* Private Use */ + ["\uE1A9", "\uE1A9"], /* Private Use */ + ["\uE1AA", "\uE1AA"], /* Private Use */ + ["\uE1AB", "\uE1AB"], /* Private Use */ + ["\uE1AC", "\uE1AC"], /* Private Use */ + ["\uE1AD", "\uE1AD"], /* Private Use */ + ["\uE1AE", "\uE1AE"], /* Private Use */ + ["\uE1AF", "\uE1AF"], /* Private Use */ + ["\uE1B0", "\uE1B0"], /* Private Use */ + ["\uE1B1", "\uE1B1"], /* Private Use */ + ["\uE1B2", "\uE1B2"], /* Private Use */ + ["\uE1B3", "\uE1B3"], /* Private Use */ + ["\uE1B4", "\uE1B4"], /* Private Use */ + ["\uE1B5", "\uE1B5"], /* Private Use */ + ["\uE1B6", "\uE1B6"], /* Private Use */ + ["\uE1B7", "\uE1B7"], /* Private Use */ + ["\uE1B8", "\uE1B8"], /* Private Use */ + ["\uE1B9", "\uE1B9"], /* Private Use */ + ["\uE1BA", "\uE1BA"], /* Private Use */ + ["\uE1BB", "\uE1BB"], /* Private Use */ + ["\uE1BC", "\uE1BC"], /* Private Use */ + ["\uE1BD", "\uE1BD"], /* Private Use */ + ["\uE1BE", "\uE1BE"], /* Private Use */ + ["\uE1BF", "\uE1BF"], /* Private Use */ + ["\uE1C0", "\uE1C0"], /* Private Use */ + ["\uE1C1", "\uE1C1"], /* Private Use */ + ["\uE1C2", "\uE1C2"], /* Private Use */ + ["\uE1C3", "\uE1C3"], /* Private Use */ + ["\uE1C4", "\uE1C4"], /* Private Use */ + ["\uE1C5", "\uE1C5"], /* Private Use */ + ["\uE1C6", "\uE1C6"], /* Private Use */ + ["\uE1C7", "\uE1C7"], /* Private Use */ + ["\uE1C8", "\uE1C8"], /* Private Use */ + ["\uE1C9", "\uE1C9"], /* Private Use */ + ["\uE1CA", "\uE1CA"], /* Private Use */ + ["\uE1CB", "\uE1CB"], /* Private Use */ + ["\uE1CC", "\uE1CC"], /* Private Use */ + ["\uE1CD", "\uE1CD"], /* Private Use */ + ["\uE1CE", "\uE1CE"], /* Private Use */ + ["\uE1CF", "\uE1CF"], /* Private Use */ + ["\uE1D0", "\uE1D0"], /* Private Use */ + ["\uE1D1", "\uE1D1"], /* Private Use */ + ["\uE1D2", "\uE1D2"], /* Private Use */ + ["\uE1D3", "\uE1D3"], /* Private Use */ + ["\uE1D4", "\uE1D4"], /* Private Use */ + ["\uE1D5", "\uE1D5"], /* Private Use */ + ["\uE1D6", "\uE1D6"], /* Private Use */ + ["\uE1D7", "\uE1D7"], /* Private Use */ + ["\uE1D8", "\uE1D8"], /* Private Use */ + ["\uE1D9", "\uE1D9"], /* Private Use */ + ["\uE1DA", "\uE1DA"], /* Private Use */ + ["\uE1DB", "\uE1DB"], /* Private Use */ + ["\uE1DC", "\uE1DC"], /* Private Use */ + ["\uE1DD", "\uE1DD"], /* Private Use */ + ["\uE1DE", "\uE1DE"], /* Private Use */ + ["\uE1DF", "\uE1DF"], /* Private Use */ + ["\uE1E0", "\uE1E0"], /* Private Use */ + ["\uE1E1", "\uE1E1"], /* Private Use */ + ["\uE1E2", "\uE1E2"], /* Private Use */ + ["\uE1E3", "\uE1E3"], /* Private Use */ + ["\uE1E4", "\uE1E4"], /* Private Use */ + ["\uE1E5", "\uE1E5"], /* Private Use */ + ["\uE1E6", "\uE1E6"], /* Private Use */ + ["\uE1E7", "\uE1E7"], /* Private Use */ + ["\uE1E8", "\uE1E8"], /* Private Use */ + ["\uE1E9", "\uE1E9"], /* Private Use */ + ["\uE1EA", "\uE1EA"], /* Private Use */ + ["\uE1EB", "\uE1EB"], /* Private Use */ + ["\uE1EC", "\uE1EC"], /* Private Use */ + ["\uE1ED", "\uE1ED"], /* Private Use */ + ["\uE1EE", "\uE1EE"], /* Private Use */ + ["\uE1EF", "\uE1EF"], /* Private Use */ + ["\uE1F0", "\uE1F0"], /* Private Use */ + ["\uE1F1", "\uE1F1"], /* Private Use */ + ["\uE1F2", "\uE1F2"], /* Private Use */ + ["\uE1F3", "\uE1F3"], /* Private Use */ + ["\uE1F4", "\uE1F4"], /* Private Use */ + ["\uE1F5", "\uE1F5"], /* Private Use */ + ["\uE1F6", "\uE1F6"], /* Private Use */ + ["\uE1F7", "\uE1F7"], /* Private Use */ + ["\uE1F8", "\uE1F8"], /* Private Use */ + ["\uE1F9", "\uE1F9"], /* Private Use */ + ["\uE1FA", "\uE1FA"], /* Private Use */ + ["\uE1FB", "\uE1FB"], /* Private Use */ + ["\uE1FC", "\uE1FC"], /* Private Use */ + ["\uE1FD", "\uE1FD"], /* Private Use */ + ["\uE1FE", "\uE1FE"], /* Private Use */ + ["\uE1FF", "\uE1FF"], /* Private Use */ + ["\uE200", "\uE200"], /* Private Use */ + ["\uE201", "\uE201"], /* Private Use */ + ["\uE202", "\uE202"], /* Private Use */ + ["\uE203", "\uE203"], /* Private Use */ + ["\uE204", "\uE204"], /* Private Use */ + ["\uE205", "\uE205"], /* Private Use */ + ["\uE206", "\uE206"], /* Private Use */ + ["\uE207", "\uE207"], /* Private Use */ + ["\uE208", "\uE208"], /* Private Use */ + ["\uE209", "\uE209"], /* Private Use */ + ["\uE20A", "\uE20A"], /* Private Use */ + ["\uE20B", "\uE20B"], /* Private Use */ + ["\uE20C", "\uE20C"], /* Private Use */ + ["\uE20D", "\uE20D"], /* Private Use */ + ["\uE20E", "\uE20E"], /* Private Use */ + ["\uE20F", "\uE20F"], /* Private Use */ + ["\uE210", "\uE210"], /* Private Use */ + ["\uE211", "\uE211"], /* Private Use */ + ["\uE212", "\uE212"], /* Private Use */ + ["\uE213", "\uE213"], /* Private Use */ + ["\uE214", "\uE214"], /* Private Use */ + ["\uE215", "\uE215"], /* Private Use */ + ["\uE216", "\uE216"], /* Private Use */ + ["\uE217", "\uE217"], /* Private Use */ + ["\uE218", "\uE218"], /* Private Use */ + ["\uE219", "\uE219"], /* Private Use */ + ["\uE21A", "\uE21A"], /* Private Use */ + ["\uE21B", "\uE21B"], /* Private Use */ + ["\uE21C", "\uE21C"], /* Private Use */ + ["\uE21D", "\uE21D"], /* Private Use */ + ["\uE21E", "\uE21E"], /* Private Use */ + ["\uE21F", "\uE21F"], /* Private Use */ + ["\uE220", "\uE220"], /* Private Use */ + ["\uE221", "\uE221"], /* Private Use */ + ["\uE222", "\uE222"], /* Private Use */ + ["\uE223", "\uE223"], /* Private Use */ + ["\uE224", "\uE224"], /* Private Use */ + ["\uE225", "\uE225"], /* Private Use */ + ["\uE226", "\uE226"], /* Private Use */ + ["\uE227", "\uE227"], /* Private Use */ + ["\uE228", "\uE228"], /* Private Use */ + ["\uE229", "\uE229"], /* Private Use */ + ["\uE22A", "\uE22A"], /* Private Use */ + ["\uE22B", "\uE22B"], /* Private Use */ + ["\uE22C", "\uE22C"], /* Private Use */ + ["\uE22D", "\uE22D"], /* Private Use */ + ["\uE22E", "\uE22E"], /* Private Use */ + ["\uE22F", "\uE22F"], /* Private Use */ + ["\uE230", "\uE230"], /* Private Use */ + ["\uE231", "\uE231"], /* Private Use */ + ["\uE232", "\uE232"], /* Private Use */ + ["\uE233", "\uE233"], /* Private Use */ + ["\uE234", "\uE234"], /* Private Use */ + ["\uE235", "\uE235"], /* Private Use */ + ["\uE236", "\uE236"], /* Private Use */ + ["\uE237", "\uE237"], /* Private Use */ + ["\uE238", "\uE238"], /* Private Use */ + ["\uE239", "\uE239"], /* Private Use */ + ["\uE23A", "\uE23A"], /* Private Use */ + ["\uE23B", "\uE23B"], /* Private Use */ + ["\uE23C", "\uE23C"], /* Private Use */ + ["\uE23D", "\uE23D"], /* Private Use */ + ["\uE23E", "\uE23E"], /* Private Use */ + ["\uE23F", "\uE23F"], /* Private Use */ + ["\uE240", "\uE240"], /* Private Use */ + ["\uE241", "\uE241"], /* Private Use */ + ["\uE242", "\uE242"], /* Private Use */ + ["\uE243", "\uE243"], /* Private Use */ + ["\uE244", "\uE244"], /* Private Use */ + ["\uE245", "\uE245"], /* Private Use */ + ["\uE246", "\uE246"], /* Private Use */ + ["\uE247", "\uE247"], /* Private Use */ + ["\uE248", "\uE248"], /* Private Use */ + ["\uE249", "\uE249"], /* Private Use */ + ["\uE24A", "\uE24A"], /* Private Use */ + ["\uE24B", "\uE24B"], /* Private Use */ + ["\uE24C", "\uE24C"], /* Private Use */ + ["\uE24D", "\uE24D"], /* Private Use */ + ["\uE24E", "\uE24E"], /* Private Use */ + ["\uE24F", "\uE24F"], /* Private Use */ + ["\uE250", "\uE250"], /* Private Use */ + ["\uE251", "\uE251"], /* Private Use */ + ["\uE252", "\uE252"], /* Private Use */ + ["\uE253", "\uE253"], /* Private Use */ + ["\uE254", "\uE254"], /* Private Use */ + ["\uE255", "\uE255"], /* Private Use */ + ["\uE256", "\uE256"], /* Private Use */ + ["\uE257", "\uE257"], /* Private Use */ + ["\uE258", "\uE258"], /* Private Use */ + ["\uE259", "\uE259"], /* Private Use */ + ["\uE25A", "\uE25A"], /* Private Use */ + ["\uE25B", "\uE25B"], /* Private Use */ + ["\uE25C", "\uE25C"], /* Private Use */ + ["\uE25D", "\uE25D"], /* Private Use */ + ["\uE25E", "\uE25E"], /* Private Use */ + ["\uE25F", "\uE25F"], /* Private Use */ + ["\uE260", "\uE260"], /* Private Use */ + ["\uE261", "\uE261"], /* Private Use */ + ["\uE262", "\uE262"], /* Private Use */ + ["\uE263", "\uE263"], /* Private Use */ + ["\uE264", "\uE264"], /* Private Use */ + ["\uE265", "\uE265"], /* Private Use */ + ["\uE266", "\uE266"], /* Private Use */ + ["\uE267", "\uE267"], /* Private Use */ + ["\uE268", "\uE268"], /* Private Use */ + ["\uE269", "\uE269"], /* Private Use */ + ["\uE26A", "\uE26A"], /* Private Use */ + ["\uE26B", "\uE26B"], /* Private Use */ + ["\uE26C", "\uE26C"], /* Private Use */ + ["\uE26D", "\uE26D"], /* Private Use */ + ["\uE26E", "\uE26E"], /* Private Use */ + ["\uE26F", "\uE26F"], /* Private Use */ + ["\uE270", "\uE270"], /* Private Use */ + ["\uE271", "\uE271"], /* Private Use */ + ["\uE272", "\uE272"], /* Private Use */ + ["\uE273", "\uE273"], /* Private Use */ + ["\uE274", "\uE274"], /* Private Use */ + ["\uE275", "\uE275"], /* Private Use */ + ["\uE276", "\uE276"], /* Private Use */ + ["\uE277", "\uE277"], /* Private Use */ + ["\uE278", "\uE278"], /* Private Use */ + ["\uE279", "\uE279"], /* Private Use */ + ["\uE27A", "\uE27A"], /* Private Use */ + ["\uE27B", "\uE27B"], /* Private Use */ + ["\uE27C", "\uE27C"], /* Private Use */ + ["\uE27D", "\uE27D"], /* Private Use */ + ["\uE27E", "\uE27E"], /* Private Use */ + ["\uE27F", "\uE27F"], /* Private Use */ + ["\uE280", "\uE280"], /* Private Use */ + ["\uE281", "\uE281"], /* Private Use */ + ["\uE282", "\uE282"], /* Private Use */ + ["\uE283", "\uE283"], /* Private Use */ + ["\uE284", "\uE284"], /* Private Use */ + ["\uE285", "\uE285"], /* Private Use */ + ["\uE286", "\uE286"], /* Private Use */ + ["\uE287", "\uE287"], /* Private Use */ + ["\uE288", "\uE288"], /* Private Use */ + ["\uE289", "\uE289"], /* Private Use */ + ["\uE28A", "\uE28A"], /* Private Use */ + ["\uE28B", "\uE28B"], /* Private Use */ + ["\uE28C", "\uE28C"], /* Private Use */ + ["\uE28D", "\uE28D"], /* Private Use */ + ["\uE28E", "\uE28E"], /* Private Use */ + ["\uE28F", "\uE28F"], /* Private Use */ + ["\uE290", "\uE290"], /* Private Use */ + ["\uE291", "\uE291"], /* Private Use */ + ["\uE292", "\uE292"], /* Private Use */ + ["\uE293", "\uE293"], /* Private Use */ + ["\uE294", "\uE294"], /* Private Use */ + ["\uE295", "\uE295"], /* Private Use */ + ["\uE296", "\uE296"], /* Private Use */ + ["\uE297", "\uE297"], /* Private Use */ + ["\uE298", "\uE298"], /* Private Use */ + ["\uE299", "\uE299"], /* Private Use */ + ["\uE29A", "\uE29A"], /* Private Use */ + ["\uE29B", "\uE29B"], /* Private Use */ + ["\uE29C", "\uE29C"], /* Private Use */ + ["\uE29D", "\uE29D"], /* Private Use */ + ["\uE29E", "\uE29E"], /* Private Use */ + ["\uE29F", "\uE29F"], /* Private Use */ + ["\uE2A0", "\uE2A0"], /* Private Use */ + ["\uE2A1", "\uE2A1"], /* Private Use */ + ["\uE2A2", "\uE2A2"], /* Private Use */ + ["\uE2A3", "\uE2A3"], /* Private Use */ + ["\uE2A4", "\uE2A4"], /* Private Use */ + ["\uE2A5", "\uE2A5"], /* Private Use */ + ["\uE2A6", "\uE2A6"], /* Private Use */ + ["\uE2A7", "\uE2A7"], /* Private Use */ + ["\uE2A8", "\uE2A8"], /* Private Use */ + ["\uE2A9", "\uE2A9"], /* Private Use */ + ["\uE2AA", "\uE2AA"], /* Private Use */ + ["\uE2AB", "\uE2AB"], /* Private Use */ + ["\uE2AC", "\uE2AC"], /* Private Use */ + ["\uE2AD", "\uE2AD"], /* Private Use */ + ["\uE2AE", "\uE2AE"], /* Private Use */ + ["\uE2AF", "\uE2AF"], /* Private Use */ + ["\uE2B0", "\uE2B0"], /* Private Use */ + ["\uE2B1", "\uE2B1"], /* Private Use */ + ["\uE2B2", "\uE2B2"], /* Private Use */ + ["\uE2B3", "\uE2B3"], /* Private Use */ + ["\uE2B4", "\uE2B4"], /* Private Use */ + ["\uE2B5", "\uE2B5"], /* Private Use */ + ["\uE2B6", "\uE2B6"], /* Private Use */ + ["\uE2B7", "\uE2B7"], /* Private Use */ + ["\uE2B8", "\uE2B8"], /* Private Use */ + ["\uE2B9", "\uE2B9"], /* Private Use */ + ["\uE2BA", "\uE2BA"], /* Private Use */ + ["\uE2BB", "\uE2BB"], /* Private Use */ + ["\uE2BC", "\uE2BC"], /* Private Use */ + ["\uE2BD", "\uE2BD"], /* Private Use */ + ["\uE2BE", "\uE2BE"], /* Private Use */ + ["\uE2BF", "\uE2BF"], /* Private Use */ + ["\uE2C0", "\uE2C0"], /* Private Use */ + ["\uE2C1", "\uE2C1"], /* Private Use */ + ["\uE2C2", "\uE2C2"], /* Private Use */ + ["\uE2C3", "\uE2C3"], /* Private Use */ + ["\uE2C4", "\uE2C4"], /* Private Use */ + ["\uE2C5", "\uE2C5"], /* Private Use */ + ["\uE2C6", "\uE2C6"], /* Private Use */ + ["\uE2C7", "\uE2C7"], /* Private Use */ + ["\uE2C8", "\uE2C8"], /* Private Use */ + ["\uE2C9", "\uE2C9"], /* Private Use */ + ["\uE2CA", "\uE2CA"], /* Private Use */ + ["\uE2CB", "\uE2CB"], /* Private Use */ + ["\uE2CC", "\uE2CC"], /* Private Use */ + ["\uE2CD", "\uE2CD"], /* Private Use */ + ["\uE2CE", "\uE2CE"], /* Private Use */ + ["\uE2CF", "\uE2CF"], /* Private Use */ + ["\uE2D0", "\uE2D0"], /* Private Use */ + ["\uE2D1", "\uE2D1"], /* Private Use */ + ["\uE2D2", "\uE2D2"], /* Private Use */ + ["\uE2D3", "\uE2D3"], /* Private Use */ + ["\uE2D4", "\uE2D4"], /* Private Use */ + ["\uE2D5", "\uE2D5"], /* Private Use */ + ["\uE2D6", "\uE2D6"], /* Private Use */ + ["\uE2D7", "\uE2D7"], /* Private Use */ + ["\uE2D8", "\uE2D8"], /* Private Use */ + ["\uE2D9", "\uE2D9"], /* Private Use */ + ["\uE2DA", "\uE2DA"], /* Private Use */ + ["\uE2DB", "\uE2DB"], /* Private Use */ + ["\uE2DC", "\uE2DC"], /* Private Use */ + ["\uE2DD", "\uE2DD"], /* Private Use */ + ["\uE2DE", "\uE2DE"], /* Private Use */ + ["\uE2DF", "\uE2DF"], /* Private Use */ + ["\uE2E0", "\uE2E0"], /* Private Use */ + ["\uE2E1", "\uE2E1"], /* Private Use */ + ["\uE2E2", "\uE2E2"], /* Private Use */ + ["\uE2E3", "\uE2E3"], /* Private Use */ + ["\uE2E4", "\uE2E4"], /* Private Use */ + ["\uE2E5", "\uE2E5"], /* Private Use */ + ["\uE2E6", "\uE2E6"], /* Private Use */ + ["\uE2E7", "\uE2E7"], /* Private Use */ + ["\uE2E8", "\uE2E8"], /* Private Use */ + ["\uE2E9", "\uE2E9"], /* Private Use */ + ["\uE2EA", "\uE2EA"], /* Private Use */ + ["\uE2EB", "\uE2EB"], /* Private Use */ + ["\uE2EC", "\uE2EC"], /* Private Use */ + ["\uE2ED", "\uE2ED"], /* Private Use */ + ["\uE2EE", "\uE2EE"], /* Private Use */ + ["\uE2EF", "\uE2EF"], /* Private Use */ + ["\uE2F0", "\uE2F0"], /* Private Use */ + ["\uE2F1", "\uE2F1"], /* Private Use */ + ["\uE2F2", "\uE2F2"], /* Private Use */ + ["\uE2F3", "\uE2F3"], /* Private Use */ + ["\uE2F4", "\uE2F4"], /* Private Use */ + ["\uE2F5", "\uE2F5"], /* Private Use */ + ["\uE2F6", "\uE2F6"], /* Private Use */ + ["\uE2F7", "\uE2F7"], /* Private Use */ + ["\uE2F8", "\uE2F8"], /* Private Use */ + ["\uE2F9", "\uE2F9"], /* Private Use */ + ["\uE2FA", "\uE2FA"], /* Private Use */ + ["\uE2FB", "\uE2FB"], /* Private Use */ + ["\uE2FC", "\uE2FC"], /* Private Use */ + ["\uE2FD", "\uE2FD"], /* Private Use */ + ["\uE2FE", "\uE2FE"], /* Private Use */ + ["\uE2FF", "\uE2FF"], /* Private Use */ + ["\uE300", "\uE300"], /* Private Use */ + ["\uE301", "\uE301"], /* Private Use */ + ["\uE302", "\uE302"], /* Private Use */ + ["\uE303", "\uE303"], /* Private Use */ + ["\uE304", "\uE304"], /* Private Use */ + ["\uE305", "\uE305"], /* Private Use */ + ["\uE306", "\uE306"], /* Private Use */ + ["\uE307", "\uE307"], /* Private Use */ + ["\uE308", "\uE308"], /* Private Use */ + ["\uE309", "\uE309"], /* Private Use */ + ["\uE30A", "\uE30A"], /* Private Use */ + ["\uE30B", "\uE30B"], /* Private Use */ + ["\uE30C", "\uE30C"], /* Private Use */ + ["\uE30D", "\uE30D"], /* Private Use */ + ["\uE30E", "\uE30E"], /* Private Use */ + ["\uE30F", "\uE30F"], /* Private Use */ + ["\uE310", "\uE310"], /* Private Use */ + ["\uE311", "\uE311"], /* Private Use */ + ["\uE312", "\uE312"], /* Private Use */ + ["\uE313", "\uE313"], /* Private Use */ + ["\uE314", "\uE314"], /* Private Use */ + ["\uE315", "\uE315"], /* Private Use */ + ["\uE316", "\uE316"], /* Private Use */ + ["\uE317", "\uE317"], /* Private Use */ + ["\uE318", "\uE318"], /* Private Use */ + ["\uE319", "\uE319"], /* Private Use */ + ["\uE31A", "\uE31A"], /* Private Use */ + ["\uE31B", "\uE31B"], /* Private Use */ + ["\uE31C", "\uE31C"], /* Private Use */ + ["\uE31D", "\uE31D"], /* Private Use */ + ["\uE31E", "\uE31E"], /* Private Use */ + ["\uE31F", "\uE31F"], /* Private Use */ + ["\uE320", "\uE320"], /* Private Use */ + ["\uE321", "\uE321"], /* Private Use */ + ["\uE322", "\uE322"], /* Private Use */ + ["\uE323", "\uE323"], /* Private Use */ + ["\uE324", "\uE324"], /* Private Use */ + ["\uE325", "\uE325"], /* Private Use */ + ["\uE326", "\uE326"], /* Private Use */ + ["\uE327", "\uE327"], /* Private Use */ + ["\uE328", "\uE328"], /* Private Use */ + ["\uE329", "\uE329"], /* Private Use */ + ["\uE32A", "\uE32A"], /* Private Use */ + ["\uE32B", "\uE32B"], /* Private Use */ + ["\uE32C", "\uE32C"], /* Private Use */ + ["\uE32D", "\uE32D"], /* Private Use */ + ["\uE32E", "\uE32E"], /* Private Use */ + ["\uE32F", "\uE32F"], /* Private Use */ + ["\uE330", "\uE330"], /* Private Use */ + ["\uE331", "\uE331"], /* Private Use */ + ["\uE332", "\uE332"], /* Private Use */ + ["\uE333", "\uE333"], /* Private Use */ + ["\uE334", "\uE334"], /* Private Use */ + ["\uE335", "\uE335"], /* Private Use */ + ["\uE336", "\uE336"], /* Private Use */ + ["\uE337", "\uE337"], /* Private Use */ + ["\uE338", "\uE338"], /* Private Use */ + ["\uE339", "\uE339"], /* Private Use */ + ["\uE33A", "\uE33A"], /* Private Use */ + ["\uE33B", "\uE33B"], /* Private Use */ + ["\uE33C", "\uE33C"], /* Private Use */ + ["\uE33D", "\uE33D"], /* Private Use */ + ["\uE33E", "\uE33E"], /* Private Use */ + ["\uE33F", "\uE33F"], /* Private Use */ + ["\uE340", "\uE340"], /* Private Use */ + ["\uE341", "\uE341"], /* Private Use */ + ["\uE342", "\uE342"], /* Private Use */ + ["\uE343", "\uE343"], /* Private Use */ + ["\uE344", "\uE344"], /* Private Use */ + ["\uE345", "\uE345"], /* Private Use */ + ["\uE346", "\uE346"], /* Private Use */ + ["\uE347", "\uE347"], /* Private Use */ + ["\uE348", "\uE348"], /* Private Use */ + ["\uE349", "\uE349"], /* Private Use */ + ["\uE34A", "\uE34A"], /* Private Use */ + ["\uE34B", "\uE34B"], /* Private Use */ + ["\uE34C", "\uE34C"], /* Private Use */ + ["\uE34D", "\uE34D"], /* Private Use */ + ["\uE34E", "\uE34E"], /* Private Use */ + ["\uE34F", "\uE34F"], /* Private Use */ + ["\uE350", "\uE350"], /* Private Use */ + ["\uE351", "\uE351"], /* Private Use */ + ["\uE352", "\uE352"], /* Private Use */ + ["\uE353", "\uE353"], /* Private Use */ + ["\uE354", "\uE354"], /* Private Use */ + ["\uE355", "\uE355"], /* Private Use */ + ["\uE356", "\uE356"], /* Private Use */ + ["\uE357", "\uE357"], /* Private Use */ + ["\uE358", "\uE358"], /* Private Use */ + ["\uE359", "\uE359"], /* Private Use */ + ["\uE35A", "\uE35A"], /* Private Use */ + ["\uE35B", "\uE35B"], /* Private Use */ + ["\uE35C", "\uE35C"], /* Private Use */ + ["\uE35D", "\uE35D"], /* Private Use */ + ["\uE35E", "\uE35E"], /* Private Use */ + ["\uE35F", "\uE35F"], /* Private Use */ + ["\uE360", "\uE360"], /* Private Use */ + ["\uE361", "\uE361"], /* Private Use */ + ["\uE362", "\uE362"], /* Private Use */ + ["\uE363", "\uE363"], /* Private Use */ + ["\uE364", "\uE364"], /* Private Use */ + ["\uE365", "\uE365"], /* Private Use */ + ["\uE366", "\uE366"], /* Private Use */ + ["\uE367", "\uE367"], /* Private Use */ + ["\uE368", "\uE368"], /* Private Use */ + ["\uE369", "\uE369"], /* Private Use */ + ["\uE36A", "\uE36A"], /* Private Use */ + ["\uE36B", "\uE36B"], /* Private Use */ + ["\uE36C", "\uE36C"], /* Private Use */ + ["\uE36D", "\uE36D"], /* Private Use */ + ["\uE36E", "\uE36E"], /* Private Use */ + ["\uE36F", "\uE36F"], /* Private Use */ + ["\uE370", "\uE370"], /* Private Use */ + ["\uE371", "\uE371"], /* Private Use */ + ["\uE372", "\uE372"], /* Private Use */ + ["\uE373", "\uE373"], /* Private Use */ + ["\uE374", "\uE374"], /* Private Use */ + ["\uE375", "\uE375"], /* Private Use */ + ["\uE376", "\uE376"], /* Private Use */ + ["\uE377", "\uE377"], /* Private Use */ + ["\uE378", "\uE378"], /* Private Use */ + ["\uE379", "\uE379"], /* Private Use */ + ["\uE37A", "\uE37A"], /* Private Use */ + ["\uE37B", "\uE37B"], /* Private Use */ + ["\uE37C", "\uE37C"], /* Private Use */ + ["\uE37D", "\uE37D"], /* Private Use */ + ["\uE37E", "\uE37E"], /* Private Use */ + ["\uE37F", "\uE37F"], /* Private Use */ + ["\uE380", "\uE380"], /* Private Use */ + ["\uE381", "\uE381"], /* Private Use */ + ["\uE382", "\uE382"], /* Private Use */ + ["\uE383", "\uE383"], /* Private Use */ + ["\uE384", "\uE384"], /* Private Use */ + ["\uE385", "\uE385"], /* Private Use */ + ["\uE386", "\uE386"], /* Private Use */ + ["\uE387", "\uE387"], /* Private Use */ + ["\uE388", "\uE388"], /* Private Use */ + ["\uE389", "\uE389"], /* Private Use */ + ["\uE38A", "\uE38A"], /* Private Use */ + ["\uE38B", "\uE38B"], /* Private Use */ + ["\uE38C", "\uE38C"], /* Private Use */ + ["\uE38D", "\uE38D"], /* Private Use */ + ["\uE38E", "\uE38E"], /* Private Use */ + ["\uE38F", "\uE38F"], /* Private Use */ + ["\uE390", "\uE390"], /* Private Use */ + ["\uE391", "\uE391"], /* Private Use */ + ["\uE392", "\uE392"], /* Private Use */ + ["\uE393", "\uE393"], /* Private Use */ + ["\uE394", "\uE394"], /* Private Use */ + ["\uE395", "\uE395"], /* Private Use */ + ["\uE396", "\uE396"], /* Private Use */ + ["\uE397", "\uE397"], /* Private Use */ + ["\uE398", "\uE398"], /* Private Use */ + ["\uE399", "\uE399"], /* Private Use */ + ["\uE39A", "\uE39A"], /* Private Use */ + ["\uE39B", "\uE39B"], /* Private Use */ + ["\uE39C", "\uE39C"], /* Private Use */ + ["\uE39D", "\uE39D"], /* Private Use */ + ["\uE39E", "\uE39E"], /* Private Use */ + ["\uE39F", "\uE39F"], /* Private Use */ + ["\uE3A0", "\uE3A0"], /* Private Use */ + ["\uE3A1", "\uE3A1"], /* Private Use */ + ["\uE3A2", "\uE3A2"], /* Private Use */ + ["\uE3A3", "\uE3A3"], /* Private Use */ + ["\uE3A4", "\uE3A4"], /* Private Use */ + ["\uE3A5", "\uE3A5"], /* Private Use */ + ["\uE3A6", "\uE3A6"], /* Private Use */ + ["\uE3A7", "\uE3A7"], /* Private Use */ + ["\uE3A8", "\uE3A8"], /* Private Use */ + ["\uE3A9", "\uE3A9"], /* Private Use */ + ["\uE3AA", "\uE3AA"], /* Private Use */ + ["\uE3AB", "\uE3AB"], /* Private Use */ + ["\uE3AC", "\uE3AC"], /* Private Use */ + ["\uE3AD", "\uE3AD"], /* Private Use */ + ["\uE3AE", "\uE3AE"], /* Private Use */ + ["\uE3AF", "\uE3AF"], /* Private Use */ + ["\uE3B0", "\uE3B0"], /* Private Use */ + ["\uE3B1", "\uE3B1"], /* Private Use */ + ["\uE3B2", "\uE3B2"], /* Private Use */ + ["\uE3B3", "\uE3B3"], /* Private Use */ + ["\uE3B4", "\uE3B4"], /* Private Use */ + ["\uE3B5", "\uE3B5"], /* Private Use */ + ["\uE3B6", "\uE3B6"], /* Private Use */ + ["\uE3B7", "\uE3B7"], /* Private Use */ + ["\uE3B8", "\uE3B8"], /* Private Use */ + ["\uE3B9", "\uE3B9"], /* Private Use */ + ["\uE3BA", "\uE3BA"], /* Private Use */ + ["\uE3BB", "\uE3BB"], /* Private Use */ + ["\uE3BC", "\uE3BC"], /* Private Use */ + ["\uE3BD", "\uE3BD"], /* Private Use */ + ["\uE3BE", "\uE3BE"], /* Private Use */ + ["\uE3BF", "\uE3BF"], /* Private Use */ + ["\uE3C0", "\uE3C0"], /* Private Use */ + ["\uE3C1", "\uE3C1"], /* Private Use */ + ["\uE3C2", "\uE3C2"], /* Private Use */ + ["\uE3C3", "\uE3C3"], /* Private Use */ + ["\uE3C4", "\uE3C4"], /* Private Use */ + ["\uE3C5", "\uE3C5"], /* Private Use */ + ["\uE3C6", "\uE3C6"], /* Private Use */ + ["\uE3C7", "\uE3C7"], /* Private Use */ + ["\uE3C8", "\uE3C8"], /* Private Use */ + ["\uE3C9", "\uE3C9"], /* Private Use */ + ["\uE3CA", "\uE3CA"], /* Private Use */ + ["\uE3CB", "\uE3CB"], /* Private Use */ + ["\uE3CC", "\uE3CC"], /* Private Use */ + ["\uE3CD", "\uE3CD"], /* Private Use */ + ["\uE3CE", "\uE3CE"], /* Private Use */ + ["\uE3CF", "\uE3CF"], /* Private Use */ + ["\uE3D0", "\uE3D0"], /* Private Use */ + ["\uE3D1", "\uE3D1"], /* Private Use */ + ["\uE3D2", "\uE3D2"], /* Private Use */ + ["\uE3D3", "\uE3D3"], /* Private Use */ + ["\uE3D4", "\uE3D4"], /* Private Use */ + ["\uE3D5", "\uE3D5"], /* Private Use */ + ["\uE3D6", "\uE3D6"], /* Private Use */ + ["\uE3D7", "\uE3D7"], /* Private Use */ + ["\uE3D8", "\uE3D8"], /* Private Use */ + ["\uE3D9", "\uE3D9"], /* Private Use */ + ["\uE3DA", "\uE3DA"], /* Private Use */ + ["\uE3DB", "\uE3DB"], /* Private Use */ + ["\uE3DC", "\uE3DC"], /* Private Use */ + ["\uE3DD", "\uE3DD"], /* Private Use */ + ["\uE3DE", "\uE3DE"], /* Private Use */ + ["\uE3DF", "\uE3DF"], /* Private Use */ + ["\uE3E0", "\uE3E0"], /* Private Use */ + ["\uE3E1", "\uE3E1"], /* Private Use */ + ["\uE3E2", "\uE3E2"], /* Private Use */ + ["\uE3E3", "\uE3E3"], /* Private Use */ + ["\uE3E4", "\uE3E4"], /* Private Use */ + ["\uE3E5", "\uE3E5"], /* Private Use */ + ["\uE3E6", "\uE3E6"], /* Private Use */ + ["\uE3E7", "\uE3E7"], /* Private Use */ + ["\uE3E8", "\uE3E8"], /* Private Use */ + ["\uE3E9", "\uE3E9"], /* Private Use */ + ["\uE3EA", "\uE3EA"], /* Private Use */ + ["\uE3EB", "\uE3EB"], /* Private Use */ + ["\uE3EC", "\uE3EC"], /* Private Use */ + ["\uE3ED", "\uE3ED"], /* Private Use */ + ["\uE3EE", "\uE3EE"], /* Private Use */ + ["\uE3EF", "\uE3EF"], /* Private Use */ + ["\uE3F0", "\uE3F0"], /* Private Use */ + ["\uE3F1", "\uE3F1"], /* Private Use */ + ["\uE3F2", "\uE3F2"], /* Private Use */ + ["\uE3F3", "\uE3F3"], /* Private Use */ + ["\uE3F4", "\uE3F4"], /* Private Use */ + ["\uE3F5", "\uE3F5"], /* Private Use */ + ["\uE3F6", "\uE3F6"], /* Private Use */ + ["\uE3F7", "\uE3F7"], /* Private Use */ + ["\uE3F8", "\uE3F8"], /* Private Use */ + ["\uE3F9", "\uE3F9"], /* Private Use */ + ["\uE3FA", "\uE3FA"], /* Private Use */ + ["\uE3FB", "\uE3FB"], /* Private Use */ + ["\uE3FC", "\uE3FC"], /* Private Use */ + ["\uE3FD", "\uE3FD"], /* Private Use */ + ["\uE3FE", "\uE3FE"], /* Private Use */ + ["\uE3FF", "\uE3FF"], /* Private Use */ + ["\uE400", "\uE400"], /* Private Use */ + ["\uE401", "\uE401"], /* Private Use */ + ["\uE402", "\uE402"], /* Private Use */ + ["\uE403", "\uE403"], /* Private Use */ + ["\uE404", "\uE404"], /* Private Use */ + ["\uE405", "\uE405"], /* Private Use */ + ["\uE406", "\uE406"], /* Private Use */ + ["\uE407", "\uE407"], /* Private Use */ + ["\uE408", "\uE408"], /* Private Use */ + ["\uE409", "\uE409"], /* Private Use */ + ["\uE40A", "\uE40A"], /* Private Use */ + ["\uE40B", "\uE40B"], /* Private Use */ + ["\uE40C", "\uE40C"], /* Private Use */ + ["\uE40D", "\uE40D"], /* Private Use */ + ["\uE40E", "\uE40E"], /* Private Use */ + ["\uE40F", "\uE40F"], /* Private Use */ + ["\uE410", "\uE410"], /* Private Use */ + ["\uE411", "\uE411"], /* Private Use */ + ["\uE412", "\uE412"], /* Private Use */ + ["\uE413", "\uE413"], /* Private Use */ + ["\uE414", "\uE414"], /* Private Use */ + ["\uE415", "\uE415"], /* Private Use */ + ["\uE416", "\uE416"], /* Private Use */ + ["\uE417", "\uE417"], /* Private Use */ + ["\uE418", "\uE418"], /* Private Use */ + ["\uE419", "\uE419"], /* Private Use */ + ["\uE41A", "\uE41A"], /* Private Use */ + ["\uE41B", "\uE41B"], /* Private Use */ + ["\uE41C", "\uE41C"], /* Private Use */ + ["\uE41D", "\uE41D"], /* Private Use */ + ["\uE41E", "\uE41E"], /* Private Use */ + ["\uE41F", "\uE41F"], /* Private Use */ + ["\uE420", "\uE420"], /* Private Use */ + ["\uE421", "\uE421"], /* Private Use */ + ["\uE422", "\uE422"], /* Private Use */ + ["\uE423", "\uE423"], /* Private Use */ + ["\uE424", "\uE424"], /* Private Use */ + ["\uE425", "\uE425"], /* Private Use */ + ["\uE426", "\uE426"], /* Private Use */ + ["\uE427", "\uE427"], /* Private Use */ + ["\uE428", "\uE428"], /* Private Use */ + ["\uE429", "\uE429"], /* Private Use */ + ["\uE42A", "\uE42A"], /* Private Use */ + ["\uE42B", "\uE42B"], /* Private Use */ + ["\uE42C", "\uE42C"], /* Private Use */ + ["\uE42D", "\uE42D"], /* Private Use */ + ["\uE42E", "\uE42E"], /* Private Use */ + ["\uE42F", "\uE42F"], /* Private Use */ + ["\uE430", "\uE430"], /* Private Use */ + ["\uE431", "\uE431"], /* Private Use */ + ["\uE432", "\uE432"], /* Private Use */ + ["\uE433", "\uE433"], /* Private Use */ + ["\uE434", "\uE434"], /* Private Use */ + ["\uE435", "\uE435"], /* Private Use */ + ["\uE436", "\uE436"], /* Private Use */ + ["\uE437", "\uE437"], /* Private Use */ + ["\uE438", "\uE438"], /* Private Use */ + ["\uE439", "\uE439"], /* Private Use */ + ["\uE43A", "\uE43A"], /* Private Use */ + ["\uE43B", "\uE43B"], /* Private Use */ + ["\uE43C", "\uE43C"], /* Private Use */ + ["\uE43D", "\uE43D"], /* Private Use */ + ["\uE43E", "\uE43E"], /* Private Use */ + ["\uE43F", "\uE43F"], /* Private Use */ + ["\uE440", "\uE440"], /* Private Use */ + ["\uE441", "\uE441"], /* Private Use */ + ["\uE442", "\uE442"], /* Private Use */ + ["\uE443", "\uE443"], /* Private Use */ + ["\uE444", "\uE444"], /* Private Use */ + ["\uE445", "\uE445"], /* Private Use */ + ["\uE446", "\uE446"], /* Private Use */ + ["\uE447", "\uE447"], /* Private Use */ + ["\uE448", "\uE448"], /* Private Use */ + ["\uE449", "\uE449"], /* Private Use */ + ["\uE44A", "\uE44A"], /* Private Use */ + ["\uE44B", "\uE44B"], /* Private Use */ + ["\uE44C", "\uE44C"], /* Private Use */ + ["\uE44D", "\uE44D"], /* Private Use */ + ["\uE44E", "\uE44E"], /* Private Use */ + ["\uE44F", "\uE44F"], /* Private Use */ + ["\uE450", "\uE450"], /* Private Use */ + ["\uE451", "\uE451"], /* Private Use */ + ["\uE452", "\uE452"], /* Private Use */ + ["\uE453", "\uE453"], /* Private Use */ + ["\uE454", "\uE454"], /* Private Use */ + ["\uE455", "\uE455"], /* Private Use */ + ["\uE456", "\uE456"], /* Private Use */ + ["\uE457", "\uE457"], /* Private Use */ + ["\uE458", "\uE458"], /* Private Use */ + ["\uE459", "\uE459"], /* Private Use */ + ["\uE45A", "\uE45A"], /* Private Use */ + ["\uE45B", "\uE45B"], /* Private Use */ + ["\uE45C", "\uE45C"], /* Private Use */ + ["\uE45D", "\uE45D"], /* Private Use */ + ["\uE45E", "\uE45E"], /* Private Use */ + ["\uE45F", "\uE45F"], /* Private Use */ + ["\uE460", "\uE460"], /* Private Use */ + ["\uE461", "\uE461"], /* Private Use */ + ["\uE462", "\uE462"], /* Private Use */ + ["\uE463", "\uE463"], /* Private Use */ + ["\uE464", "\uE464"], /* Private Use */ + ["\uE465", "\uE465"], /* Private Use */ + ["\uE466", "\uE466"], /* Private Use */ + ["\uE467", "\uE467"], /* Private Use */ + ["\uE468", "\uE468"], /* Private Use */ + ["\uE469", "\uE469"], /* Private Use */ + ["\uE46A", "\uE46A"], /* Private Use */ + ["\uE46B", "\uE46B"], /* Private Use */ + ["\uE46C", "\uE46C"], /* Private Use */ + ["\uE46D", "\uE46D"], /* Private Use */ + ["\uE46E", "\uE46E"], /* Private Use */ + ["\uE46F", "\uE46F"], /* Private Use */ + ["\uE470", "\uE470"], /* Private Use */ + ["\uE471", "\uE471"], /* Private Use */ + ["\uE472", "\uE472"], /* Private Use */ + ["\uE473", "\uE473"], /* Private Use */ + ["\uE474", "\uE474"], /* Private Use */ + ["\uE475", "\uE475"], /* Private Use */ + ["\uE476", "\uE476"], /* Private Use */ + ["\uE477", "\uE477"], /* Private Use */ + ["\uE478", "\uE478"], /* Private Use */ + ["\uE479", "\uE479"], /* Private Use */ + ["\uE47A", "\uE47A"], /* Private Use */ + ["\uE47B", "\uE47B"], /* Private Use */ + ["\uE47C", "\uE47C"], /* Private Use */ + ["\uE47D", "\uE47D"], /* Private Use */ + ["\uE47E", "\uE47E"], /* Private Use */ + ["\uE47F", "\uE47F"], /* Private Use */ + ["\uE480", "\uE480"], /* Private Use */ + ["\uE481", "\uE481"], /* Private Use */ + ["\uE482", "\uE482"], /* Private Use */ + ["\uE483", "\uE483"], /* Private Use */ + ["\uE484", "\uE484"], /* Private Use */ + ["\uE485", "\uE485"], /* Private Use */ + ["\uE486", "\uE486"], /* Private Use */ + ["\uE487", "\uE487"], /* Private Use */ + ["\uE488", "\uE488"], /* Private Use */ + ["\uE489", "\uE489"], /* Private Use */ + ["\uE48A", "\uE48A"], /* Private Use */ + ["\uE48B", "\uE48B"], /* Private Use */ + ["\uE48C", "\uE48C"], /* Private Use */ + ["\uE48D", "\uE48D"], /* Private Use */ + ["\uE48E", "\uE48E"], /* Private Use */ + ["\uE48F", "\uE48F"], /* Private Use */ + ["\uE490", "\uE490"], /* Private Use */ + ["\uE491", "\uE491"], /* Private Use */ + ["\uE492", "\uE492"], /* Private Use */ + ["\uE493", "\uE493"], /* Private Use */ + ["\uE494", "\uE494"], /* Private Use */ + ["\uE495", "\uE495"], /* Private Use */ + ["\uE496", "\uE496"], /* Private Use */ + ["\uE497", "\uE497"], /* Private Use */ + ["\uE498", "\uE498"], /* Private Use */ + ["\uE499", "\uE499"], /* Private Use */ + ["\uE49A", "\uE49A"], /* Private Use */ + ["\uE49B", "\uE49B"], /* Private Use */ + ["\uE49C", "\uE49C"], /* Private Use */ + ["\uE49D", "\uE49D"], /* Private Use */ + ["\uE49E", "\uE49E"], /* Private Use */ + ["\uE49F", "\uE49F"], /* Private Use */ + ["\uE4A0", "\uE4A0"], /* Private Use */ + ["\uE4A1", "\uE4A1"], /* Private Use */ + ["\uE4A2", "\uE4A2"], /* Private Use */ + ["\uE4A3", "\uE4A3"], /* Private Use */ + ["\uE4A4", "\uE4A4"], /* Private Use */ + ["\uE4A5", "\uE4A5"], /* Private Use */ + ["\uE4A6", "\uE4A6"], /* Private Use */ + ["\uE4A7", "\uE4A7"], /* Private Use */ + ["\uE4A8", "\uE4A8"], /* Private Use */ + ["\uE4A9", "\uE4A9"], /* Private Use */ + ["\uE4AA", "\uE4AA"], /* Private Use */ + ["\uE4AB", "\uE4AB"], /* Private Use */ + ["\uE4AC", "\uE4AC"], /* Private Use */ + ["\uE4AD", "\uE4AD"], /* Private Use */ + ["\uE4AE", "\uE4AE"], /* Private Use */ + ["\uE4AF", "\uE4AF"], /* Private Use */ + ["\uE4B0", "\uE4B0"], /* Private Use */ + ["\uE4B1", "\uE4B1"], /* Private Use */ + ["\uE4B2", "\uE4B2"], /* Private Use */ + ["\uE4B3", "\uE4B3"], /* Private Use */ + ["\uE4B4", "\uE4B4"], /* Private Use */ + ["\uE4B5", "\uE4B5"], /* Private Use */ + ["\uE4B6", "\uE4B6"], /* Private Use */ + ["\uE4B7", "\uE4B7"], /* Private Use */ + ["\uE4B8", "\uE4B8"], /* Private Use */ + ["\uE4B9", "\uE4B9"], /* Private Use */ + ["\uE4BA", "\uE4BA"], /* Private Use */ + ["\uE4BB", "\uE4BB"], /* Private Use */ + ["\uE4BC", "\uE4BC"], /* Private Use */ + ["\uE4BD", "\uE4BD"], /* Private Use */ + ["\uE4BE", "\uE4BE"], /* Private Use */ + ["\uE4BF", "\uE4BF"], /* Private Use */ + ["\uE4C0", "\uE4C0"], /* Private Use */ + ["\uE4C1", "\uE4C1"], /* Private Use */ + ["\uE4C2", "\uE4C2"], /* Private Use */ + ["\uE4C3", "\uE4C3"], /* Private Use */ + ["\uE4C4", "\uE4C4"], /* Private Use */ + ["\uE4C5", "\uE4C5"], /* Private Use */ + ["\uE4C6", "\uE4C6"], /* Private Use */ + ["\uE4C7", "\uE4C7"], /* Private Use */ + ["\uE4C8", "\uE4C8"], /* Private Use */ + ["\uE4C9", "\uE4C9"], /* Private Use */ + ["\uE4CA", "\uE4CA"], /* Private Use */ + ["\uE4CB", "\uE4CB"], /* Private Use */ + ["\uE4CC", "\uE4CC"], /* Private Use */ + ["\uE4CD", "\uE4CD"], /* Private Use */ + ["\uE4CE", "\uE4CE"], /* Private Use */ + ["\uE4CF", "\uE4CF"], /* Private Use */ + ["\uE4D0", "\uE4D0"], /* Private Use */ + ["\uE4D1", "\uE4D1"], /* Private Use */ + ["\uE4D2", "\uE4D2"], /* Private Use */ + ["\uE4D3", "\uE4D3"], /* Private Use */ + ["\uE4D4", "\uE4D4"], /* Private Use */ + ["\uE4D5", "\uE4D5"], /* Private Use */ + ["\uE4D6", "\uE4D6"], /* Private Use */ + ["\uE4D7", "\uE4D7"], /* Private Use */ + ["\uE4D8", "\uE4D8"], /* Private Use */ + ["\uE4D9", "\uE4D9"], /* Private Use */ + ["\uE4DA", "\uE4DA"], /* Private Use */ + ["\uE4DB", "\uE4DB"], /* Private Use */ + ["\uE4DC", "\uE4DC"], /* Private Use */ + ["\uE4DD", "\uE4DD"], /* Private Use */ + ["\uE4DE", "\uE4DE"], /* Private Use */ + ["\uE4DF", "\uE4DF"], /* Private Use */ + ["\uE4E0", "\uE4E0"], /* Private Use */ + ["\uE4E1", "\uE4E1"], /* Private Use */ + ["\uE4E2", "\uE4E2"], /* Private Use */ + ["\uE4E3", "\uE4E3"], /* Private Use */ + ["\uE4E4", "\uE4E4"], /* Private Use */ + ["\uE4E5", "\uE4E5"], /* Private Use */ + ["\uE4E6", "\uE4E6"], /* Private Use */ + ["\uE4E7", "\uE4E7"], /* Private Use */ + ["\uE4E8", "\uE4E8"], /* Private Use */ + ["\uE4E9", "\uE4E9"], /* Private Use */ + ["\uE4EA", "\uE4EA"], /* Private Use */ + ["\uE4EB", "\uE4EB"], /* Private Use */ + ["\uE4EC", "\uE4EC"], /* Private Use */ + ["\uE4ED", "\uE4ED"], /* Private Use */ + ["\uE4EE", "\uE4EE"], /* Private Use */ + ["\uE4EF", "\uE4EF"], /* Private Use */ + ["\uE4F0", "\uE4F0"], /* Private Use */ + ["\uE4F1", "\uE4F1"], /* Private Use */ + ["\uE4F2", "\uE4F2"], /* Private Use */ + ["\uE4F3", "\uE4F3"], /* Private Use */ + ["\uE4F4", "\uE4F4"], /* Private Use */ + ["\uE4F5", "\uE4F5"], /* Private Use */ + ["\uE4F6", "\uE4F6"], /* Private Use */ + ["\uE4F7", "\uE4F7"], /* Private Use */ + ["\uE4F8", "\uE4F8"], /* Private Use */ + ["\uE4F9", "\uE4F9"], /* Private Use */ + ["\uE4FA", "\uE4FA"], /* Private Use */ + ["\uE4FB", "\uE4FB"], /* Private Use */ + ["\uE4FC", "\uE4FC"], /* Private Use */ + ["\uE4FD", "\uE4FD"], /* Private Use */ + ["\uE4FE", "\uE4FE"], /* Private Use */ + ["\uE4FF", "\uE4FF"], /* Private Use */ + ["\uE500", "\uE500"], /* Private Use */ + ["\uE501", "\uE501"], /* Private Use */ + ["\uE502", "\uE502"], /* Private Use */ + ["\uE503", "\uE503"], /* Private Use */ + ["\uE504", "\uE504"], /* Private Use */ + ["\uE505", "\uE505"], /* Private Use */ + ["\uE506", "\uE506"], /* Private Use */ + ["\uE507", "\uE507"], /* Private Use */ + ["\uE508", "\uE508"], /* Private Use */ + ["\uE509", "\uE509"], /* Private Use */ + ["\uE50A", "\uE50A"], /* Private Use */ + ["\uE50B", "\uE50B"], /* Private Use */ + ["\uE50C", "\uE50C"], /* Private Use */ + ["\uE50D", "\uE50D"], /* Private Use */ + ["\uE50E", "\uE50E"], /* Private Use */ + ["\uE50F", "\uE50F"], /* Private Use */ + ["\uE510", "\uE510"], /* Private Use */ + ["\uE511", "\uE511"], /* Private Use */ + ["\uE512", "\uE512"], /* Private Use */ + ["\uE513", "\uE513"], /* Private Use */ + ["\uE514", "\uE514"], /* Private Use */ + ["\uE515", "\uE515"], /* Private Use */ + ["\uE516", "\uE516"], /* Private Use */ + ["\uE517", "\uE517"], /* Private Use */ + ["\uE518", "\uE518"], /* Private Use */ + ["\uE519", "\uE519"], /* Private Use */ + ["\uE51A", "\uE51A"], /* Private Use */ + ["\uE51B", "\uE51B"], /* Private Use */ + ["\uE51C", "\uE51C"], /* Private Use */ + ["\uE51D", "\uE51D"], /* Private Use */ + ["\uE51E", "\uE51E"], /* Private Use */ + ["\uE51F", "\uE51F"], /* Private Use */ + ["\uE520", "\uE520"], /* Private Use */ + ["\uE521", "\uE521"], /* Private Use */ + ["\uE522", "\uE522"], /* Private Use */ + ["\uE523", "\uE523"], /* Private Use */ + ["\uE524", "\uE524"], /* Private Use */ + ["\uE525", "\uE525"], /* Private Use */ + ["\uE526", "\uE526"], /* Private Use */ + ["\uE527", "\uE527"], /* Private Use */ + ["\uE528", "\uE528"], /* Private Use */ + ["\uE529", "\uE529"], /* Private Use */ + ["\uE52A", "\uE52A"], /* Private Use */ + ["\uE52B", "\uE52B"], /* Private Use */ + ["\uE52C", "\uE52C"], /* Private Use */ + ["\uE52D", "\uE52D"], /* Private Use */ + ["\uE52E", "\uE52E"], /* Private Use */ + ["\uE52F", "\uE52F"], /* Private Use */ + ["\uE530", "\uE530"], /* Private Use */ + ["\uE531", "\uE531"], /* Private Use */ + ["\uE532", "\uE532"], /* Private Use */ + ["\uE533", "\uE533"], /* Private Use */ + ["\uE534", "\uE534"], /* Private Use */ + ["\uE535", "\uE535"], /* Private Use */ + ["\uE536", "\uE536"], /* Private Use */ + ["\uE537", "\uE537"], /* Private Use */ + ["\uE538", "\uE538"], /* Private Use */ + ["\uE539", "\uE539"], /* Private Use */ + ["\uE53A", "\uE53A"], /* Private Use */ + ["\uE53B", "\uE53B"], /* Private Use */ + ["\uE53C", "\uE53C"], /* Private Use */ + ["\uE53D", "\uE53D"], /* Private Use */ + ["\uE53E", "\uE53E"], /* Private Use */ + ["\uE53F", "\uE53F"], /* Private Use */ + ["\uE540", "\uE540"], /* Private Use */ + ["\uE541", "\uE541"], /* Private Use */ + ["\uE542", "\uE542"], /* Private Use */ + ["\uE543", "\uE543"], /* Private Use */ + ["\uE544", "\uE544"], /* Private Use */ + ["\uE545", "\uE545"], /* Private Use */ + ["\uE546", "\uE546"], /* Private Use */ + ["\uE547", "\uE547"], /* Private Use */ + ["\uE548", "\uE548"], /* Private Use */ + ["\uE549", "\uE549"], /* Private Use */ + ["\uE54A", "\uE54A"], /* Private Use */ + ["\uE54B", "\uE54B"], /* Private Use */ + ["\uE54C", "\uE54C"], /* Private Use */ + ["\uE54D", "\uE54D"], /* Private Use */ + ["\uE54E", "\uE54E"], /* Private Use */ + ["\uE54F", "\uE54F"], /* Private Use */ + ["\uE550", "\uE550"], /* Private Use */ + ["\uE551", "\uE551"], /* Private Use */ + ["\uE552", "\uE552"], /* Private Use */ + ["\uE553", "\uE553"], /* Private Use */ + ["\uE554", "\uE554"], /* Private Use */ + ["\uE555", "\uE555"], /* Private Use */ + ["\uE556", "\uE556"], /* Private Use */ + ["\uE557", "\uE557"], /* Private Use */ + ["\uE558", "\uE558"], /* Private Use */ + ["\uE559", "\uE559"], /* Private Use */ + ["\uE55A", "\uE55A"], /* Private Use */ + ["\uE55B", "\uE55B"], /* Private Use */ + ["\uE55C", "\uE55C"], /* Private Use */ + ["\uE55D", "\uE55D"], /* Private Use */ + ["\uE55E", "\uE55E"], /* Private Use */ + ["\uE55F", "\uE55F"], /* Private Use */ + ["\uE560", "\uE560"], /* Private Use */ + ["\uE561", "\uE561"], /* Private Use */ + ["\uE562", "\uE562"], /* Private Use */ + ["\uE563", "\uE563"], /* Private Use */ + ["\uE564", "\uE564"], /* Private Use */ + ["\uE565", "\uE565"], /* Private Use */ + ["\uE566", "\uE566"], /* Private Use */ + ["\uE567", "\uE567"], /* Private Use */ + ["\uE568", "\uE568"], /* Private Use */ + ["\uE569", "\uE569"], /* Private Use */ + ["\uE56A", "\uE56A"], /* Private Use */ + ["\uE56B", "\uE56B"], /* Private Use */ + ["\uE56C", "\uE56C"], /* Private Use */ + ["\uE56D", "\uE56D"], /* Private Use */ + ["\uE56E", "\uE56E"], /* Private Use */ + ["\uE56F", "\uE56F"], /* Private Use */ + ["\uE570", "\uE570"], /* Private Use */ + ["\uE571", "\uE571"], /* Private Use */ + ["\uE572", "\uE572"], /* Private Use */ + ["\uE573", "\uE573"], /* Private Use */ + ["\uE574", "\uE574"], /* Private Use */ + ["\uE575", "\uE575"], /* Private Use */ + ["\uE576", "\uE576"], /* Private Use */ + ["\uE577", "\uE577"], /* Private Use */ + ["\uE578", "\uE578"], /* Private Use */ + ["\uE579", "\uE579"], /* Private Use */ + ["\uE57A", "\uE57A"], /* Private Use */ + ["\uE57B", "\uE57B"], /* Private Use */ + ["\uE57C", "\uE57C"], /* Private Use */ + ["\uE57D", "\uE57D"], /* Private Use */ + ["\uE57E", "\uE57E"], /* Private Use */ + ["\uE57F", "\uE57F"], /* Private Use */ + ["\uE580", "\uE580"], /* Private Use */ + ["\uE581", "\uE581"], /* Private Use */ + ["\uE582", "\uE582"], /* Private Use */ + ["\uE583", "\uE583"], /* Private Use */ + ["\uE584", "\uE584"], /* Private Use */ + ["\uE585", "\uE585"], /* Private Use */ + ["\uE586", "\uE586"], /* Private Use */ + ["\uE587", "\uE587"], /* Private Use */ + ["\uE588", "\uE588"], /* Private Use */ + ["\uE589", "\uE589"], /* Private Use */ + ["\uE58A", "\uE58A"], /* Private Use */ + ["\uE58B", "\uE58B"], /* Private Use */ + ["\uE58C", "\uE58C"], /* Private Use */ + ["\uE58D", "\uE58D"], /* Private Use */ + ["\uE58E", "\uE58E"], /* Private Use */ + ["\uE58F", "\uE58F"], /* Private Use */ + ["\uE590", "\uE590"], /* Private Use */ + ["\uE591", "\uE591"], /* Private Use */ + ["\uE592", "\uE592"], /* Private Use */ + ["\uE593", "\uE593"], /* Private Use */ + ["\uE594", "\uE594"], /* Private Use */ + ["\uE595", "\uE595"], /* Private Use */ + ["\uE596", "\uE596"], /* Private Use */ + ["\uE597", "\uE597"], /* Private Use */ + ["\uE598", "\uE598"], /* Private Use */ + ["\uE599", "\uE599"], /* Private Use */ + ["\uE59A", "\uE59A"], /* Private Use */ + ["\uE59B", "\uE59B"], /* Private Use */ + ["\uE59C", "\uE59C"], /* Private Use */ + ["\uE59D", "\uE59D"], /* Private Use */ + ["\uE59E", "\uE59E"], /* Private Use */ + ["\uE59F", "\uE59F"], /* Private Use */ + ["\uE5A0", "\uE5A0"], /* Private Use */ + ["\uE5A1", "\uE5A1"], /* Private Use */ + ["\uE5A2", "\uE5A2"], /* Private Use */ + ["\uE5A3", "\uE5A3"], /* Private Use */ + ["\uE5A4", "\uE5A4"], /* Private Use */ + ["\uE5A5", "\uE5A5"], /* Private Use */ + ["\uE5A6", "\uE5A6"], /* Private Use */ + ["\uE5A7", "\uE5A7"], /* Private Use */ + ["\uE5A8", "\uE5A8"], /* Private Use */ + ["\uE5A9", "\uE5A9"], /* Private Use */ + ["\uE5AA", "\uE5AA"], /* Private Use */ + ["\uE5AB", "\uE5AB"], /* Private Use */ + ["\uE5AC", "\uE5AC"], /* Private Use */ + ["\uE5AD", "\uE5AD"], /* Private Use */ + ["\uE5AE", "\uE5AE"], /* Private Use */ + ["\uE5AF", "\uE5AF"], /* Private Use */ + ["\uE5B0", "\uE5B0"], /* Private Use */ + ["\uE5B1", "\uE5B1"], /* Private Use */ + ["\uE5B2", "\uE5B2"], /* Private Use */ + ["\uE5B3", "\uE5B3"], /* Private Use */ + ["\uE5B4", "\uE5B4"], /* Private Use */ + ["\uE5B5", "\uE5B5"], /* Private Use */ + ["\uE5B6", "\uE5B6"], /* Private Use */ + ["\uE5B7", "\uE5B7"], /* Private Use */ + ["\uE5B8", "\uE5B8"], /* Private Use */ + ["\uE5B9", "\uE5B9"], /* Private Use */ + ["\uE5BA", "\uE5BA"], /* Private Use */ + ["\uE5BB", "\uE5BB"], /* Private Use */ + ["\uE5BC", "\uE5BC"], /* Private Use */ + ["\uE5BD", "\uE5BD"], /* Private Use */ + ["\uE5BE", "\uE5BE"], /* Private Use */ + ["\uE5BF", "\uE5BF"], /* Private Use */ + ["\uE5C0", "\uE5C0"], /* Private Use */ + ["\uE5C1", "\uE5C1"], /* Private Use */ + ["\uE5C2", "\uE5C2"], /* Private Use */ + ["\uE5C3", "\uE5C3"], /* Private Use */ + ["\uE5C4", "\uE5C4"], /* Private Use */ + ["\uE5C5", "\uE5C5"], /* Private Use */ + ["\uE5C6", "\uE5C6"], /* Private Use */ + ["\uE5C7", "\uE5C7"], /* Private Use */ + ["\uE5C8", "\uE5C8"], /* Private Use */ + ["\uE5C9", "\uE5C9"], /* Private Use */ + ["\uE5CA", "\uE5CA"], /* Private Use */ + ["\uE5CB", "\uE5CB"], /* Private Use */ + ["\uE5CC", "\uE5CC"], /* Private Use */ + ["\uE5CD", "\uE5CD"], /* Private Use */ + ["\uE5CE", "\uE5CE"], /* Private Use */ + ["\uE5CF", "\uE5CF"], /* Private Use */ + ["\uE5D0", "\uE5D0"], /* Private Use */ + ["\uE5D1", "\uE5D1"], /* Private Use */ + ["\uE5D2", "\uE5D2"], /* Private Use */ + ["\uE5D3", "\uE5D3"], /* Private Use */ + ["\uE5D4", "\uE5D4"], /* Private Use */ + ["\uE5D5", "\uE5D5"], /* Private Use */ + ["\uE5D6", "\uE5D6"], /* Private Use */ + ["\uE5D7", "\uE5D7"], /* Private Use */ + ["\uE5D8", "\uE5D8"], /* Private Use */ + ["\uE5D9", "\uE5D9"], /* Private Use */ + ["\uE5DA", "\uE5DA"], /* Private Use */ + ["\uE5DB", "\uE5DB"], /* Private Use */ + ["\uE5DC", "\uE5DC"], /* Private Use */ + ["\uE5DD", "\uE5DD"], /* Private Use */ + ["\uE5DE", "\uE5DE"], /* Private Use */ + ["\uE5DF", "\uE5DF"], /* Private Use */ + ["\uE5E0", "\uE5E0"], /* Private Use */ + ["\uE5E1", "\uE5E1"], /* Private Use */ + ["\uE5E2", "\uE5E2"], /* Private Use */ + ["\uE5E3", "\uE5E3"], /* Private Use */ + ["\uE5E4", "\uE5E4"], /* Private Use */ + ["\uE5E5", "\uE5E5"], /* Private Use */ + ["\uE5E6", "\uE5E6"], /* Private Use */ + ["\uE5E7", "\uE5E7"], /* Private Use */ + ["\uE5E8", "\uE5E8"], /* Private Use */ + ["\uE5E9", "\uE5E9"], /* Private Use */ + ["\uE5EA", "\uE5EA"], /* Private Use */ + ["\uE5EB", "\uE5EB"], /* Private Use */ + ["\uE5EC", "\uE5EC"], /* Private Use */ + ["\uE5ED", "\uE5ED"], /* Private Use */ + ["\uE5EE", "\uE5EE"], /* Private Use */ + ["\uE5EF", "\uE5EF"], /* Private Use */ + ["\uE5F0", "\uE5F0"], /* Private Use */ + ["\uE5F1", "\uE5F1"], /* Private Use */ + ["\uE5F2", "\uE5F2"], /* Private Use */ + ["\uE5F3", "\uE5F3"], /* Private Use */ + ["\uE5F4", "\uE5F4"], /* Private Use */ + ["\uE5F5", "\uE5F5"], /* Private Use */ + ["\uE5F6", "\uE5F6"], /* Private Use */ + ["\uE5F7", "\uE5F7"], /* Private Use */ + ["\uE5F8", "\uE5F8"], /* Private Use */ + ["\uE5F9", "\uE5F9"], /* Private Use */ + ["\uE5FA", "\uE5FA"], /* Private Use */ + ["\uE5FB", "\uE5FB"], /* Private Use */ + ["\uE5FC", "\uE5FC"], /* Private Use */ + ["\uE5FD", "\uE5FD"], /* Private Use */ + ["\uE5FE", "\uE5FE"], /* Private Use */ + ["\uE5FF", "\uE5FF"], /* Private Use */ + ["\uE600", "\uE600"], /* Private Use */ + ["\uE601", "\uE601"], /* Private Use */ + ["\uE602", "\uE602"], /* Private Use */ + ["\uE603", "\uE603"], /* Private Use */ + ["\uE604", "\uE604"], /* Private Use */ + ["\uE605", "\uE605"], /* Private Use */ + ["\uE606", "\uE606"], /* Private Use */ + ["\uE607", "\uE607"], /* Private Use */ + ["\uE608", "\uE608"], /* Private Use */ + ["\uE609", "\uE609"], /* Private Use */ + ["\uE60A", "\uE60A"], /* Private Use */ + ["\uE60B", "\uE60B"], /* Private Use */ + ["\uE60C", "\uE60C"], /* Private Use */ + ["\uE60D", "\uE60D"], /* Private Use */ + ["\uE60E", "\uE60E"], /* Private Use */ + ["\uE60F", "\uE60F"], /* Private Use */ + ["\uE610", "\uE610"], /* Private Use */ + ["\uE611", "\uE611"], /* Private Use */ + ["\uE612", "\uE612"], /* Private Use */ + ["\uE613", "\uE613"], /* Private Use */ + ["\uE614", "\uE614"], /* Private Use */ + ["\uE615", "\uE615"], /* Private Use */ + ["\uE616", "\uE616"], /* Private Use */ + ["\uE617", "\uE617"], /* Private Use */ + ["\uE618", "\uE618"], /* Private Use */ + ["\uE619", "\uE619"], /* Private Use */ + ["\uE61A", "\uE61A"], /* Private Use */ + ["\uE61B", "\uE61B"], /* Private Use */ + ["\uE61C", "\uE61C"], /* Private Use */ + ["\uE61D", "\uE61D"], /* Private Use */ + ["\uE61E", "\uE61E"], /* Private Use */ + ["\uE61F", "\uE61F"], /* Private Use */ + ["\uE620", "\uE620"], /* Private Use */ + ["\uE621", "\uE621"], /* Private Use */ + ["\uE622", "\uE622"], /* Private Use */ + ["\uE623", "\uE623"], /* Private Use */ + ["\uE624", "\uE624"], /* Private Use */ + ["\uE625", "\uE625"], /* Private Use */ + ["\uE626", "\uE626"], /* Private Use */ + ["\uE627", "\uE627"], /* Private Use */ + ["\uE628", "\uE628"], /* Private Use */ + ["\uE629", "\uE629"], /* Private Use */ + ["\uE62A", "\uE62A"], /* Private Use */ + ["\uE62B", "\uE62B"], /* Private Use */ + ["\uE62C", "\uE62C"], /* Private Use */ + ["\uE62D", "\uE62D"], /* Private Use */ + ["\uE62E", "\uE62E"], /* Private Use */ + ["\uE62F", "\uE62F"], /* Private Use */ + ["\uE630", "\uE630"], /* Private Use */ + ["\uE631", "\uE631"], /* Private Use */ + ["\uE632", "\uE632"], /* Private Use */ + ["\uE633", "\uE633"], /* Private Use */ + ["\uE634", "\uE634"], /* Private Use */ + ["\uE635", "\uE635"], /* Private Use */ + ["\uE636", "\uE636"], /* Private Use */ + ["\uE637", "\uE637"], /* Private Use */ + ["\uE638", "\uE638"], /* Private Use */ + ["\uE639", "\uE639"], /* Private Use */ + ["\uE63A", "\uE63A"], /* Private Use */ + ["\uE63B", "\uE63B"], /* Private Use */ + ["\uE63C", "\uE63C"], /* Private Use */ + ["\uE63D", "\uE63D"], /* Private Use */ + ["\uE63E", "\uE63E"], /* Private Use */ + ["\uE63F", "\uE63F"], /* Private Use */ + ["\uE640", "\uE640"], /* Private Use */ + ["\uE641", "\uE641"], /* Private Use */ + ["\uE642", "\uE642"], /* Private Use */ + ["\uE643", "\uE643"], /* Private Use */ + ["\uE644", "\uE644"], /* Private Use */ + ["\uE645", "\uE645"], /* Private Use */ + ["\uE646", "\uE646"], /* Private Use */ + ["\uE647", "\uE647"], /* Private Use */ + ["\uE648", "\uE648"], /* Private Use */ + ["\uE649", "\uE649"], /* Private Use */ + ["\uE64A", "\uE64A"], /* Private Use */ + ["\uE64B", "\uE64B"], /* Private Use */ + ["\uE64C", "\uE64C"], /* Private Use */ + ["\uE64D", "\uE64D"], /* Private Use */ + ["\uE64E", "\uE64E"], /* Private Use */ + ["\uE64F", "\uE64F"], /* Private Use */ + ["\uE650", "\uE650"], /* Private Use */ + ["\uE651", "\uE651"], /* Private Use */ + ["\uE652", "\uE652"], /* Private Use */ + ["\uE653", "\uE653"], /* Private Use */ + ["\uE654", "\uE654"], /* Private Use */ + ["\uE655", "\uE655"], /* Private Use */ + ["\uE656", "\uE656"], /* Private Use */ + ["\uE657", "\uE657"], /* Private Use */ + ["\uE658", "\uE658"], /* Private Use */ + ["\uE659", "\uE659"], /* Private Use */ + ["\uE65A", "\uE65A"], /* Private Use */ + ["\uE65B", "\uE65B"], /* Private Use */ + ["\uE65C", "\uE65C"], /* Private Use */ + ["\uE65D", "\uE65D"], /* Private Use */ + ["\uE65E", "\uE65E"], /* Private Use */ + ["\uE65F", "\uE65F"], /* Private Use */ + ["\uE660", "\uE660"], /* Private Use */ + ["\uE661", "\uE661"], /* Private Use */ + ["\uE662", "\uE662"], /* Private Use */ + ["\uE663", "\uE663"], /* Private Use */ + ["\uE664", "\uE664"], /* Private Use */ + ["\uE665", "\uE665"], /* Private Use */ + ["\uE666", "\uE666"], /* Private Use */ + ["\uE667", "\uE667"], /* Private Use */ + ["\uE668", "\uE668"], /* Private Use */ + ["\uE669", "\uE669"], /* Private Use */ + ["\uE66A", "\uE66A"], /* Private Use */ + ["\uE66B", "\uE66B"], /* Private Use */ + ["\uE66C", "\uE66C"], /* Private Use */ + ["\uE66D", "\uE66D"], /* Private Use */ + ["\uE66E", "\uE66E"], /* Private Use */ + ["\uE66F", "\uE66F"], /* Private Use */ + ["\uE670", "\uE670"], /* Private Use */ + ["\uE671", "\uE671"], /* Private Use */ + ["\uE672", "\uE672"], /* Private Use */ + ["\uE673", "\uE673"], /* Private Use */ + ["\uE674", "\uE674"], /* Private Use */ + ["\uE675", "\uE675"], /* Private Use */ + ["\uE676", "\uE676"], /* Private Use */ + ["\uE677", "\uE677"], /* Private Use */ + ["\uE678", "\uE678"], /* Private Use */ + ["\uE679", "\uE679"], /* Private Use */ + ["\uE67A", "\uE67A"], /* Private Use */ + ["\uE67B", "\uE67B"], /* Private Use */ + ["\uE67C", "\uE67C"], /* Private Use */ + ["\uE67D", "\uE67D"], /* Private Use */ + ["\uE67E", "\uE67E"], /* Private Use */ + ["\uE67F", "\uE67F"], /* Private Use */ + ["\uE680", "\uE680"], /* Private Use */ + ["\uE681", "\uE681"], /* Private Use */ + ["\uE682", "\uE682"], /* Private Use */ + ["\uE683", "\uE683"], /* Private Use */ + ["\uE684", "\uE684"], /* Private Use */ + ["\uE685", "\uE685"], /* Private Use */ + ["\uE686", "\uE686"], /* Private Use */ + ["\uE687", "\uE687"], /* Private Use */ + ["\uE688", "\uE688"], /* Private Use */ + ["\uE689", "\uE689"], /* Private Use */ + ["\uE68A", "\uE68A"], /* Private Use */ + ["\uE68B", "\uE68B"], /* Private Use */ + ["\uE68C", "\uE68C"], /* Private Use */ + ["\uE68D", "\uE68D"], /* Private Use */ + ["\uE68E", "\uE68E"], /* Private Use */ + ["\uE68F", "\uE68F"], /* Private Use */ + ["\uE690", "\uE690"], /* Private Use */ + ["\uE691", "\uE691"], /* Private Use */ + ["\uE692", "\uE692"], /* Private Use */ + ["\uE693", "\uE693"], /* Private Use */ + ["\uE694", "\uE694"], /* Private Use */ + ["\uE695", "\uE695"], /* Private Use */ + ["\uE696", "\uE696"], /* Private Use */ + ["\uE697", "\uE697"], /* Private Use */ + ["\uE698", "\uE698"], /* Private Use */ + ["\uE699", "\uE699"], /* Private Use */ + ["\uE69A", "\uE69A"], /* Private Use */ + ["\uE69B", "\uE69B"], /* Private Use */ + ["\uE69C", "\uE69C"], /* Private Use */ + ["\uE69D", "\uE69D"], /* Private Use */ + ["\uE69E", "\uE69E"], /* Private Use */ + ["\uE69F", "\uE69F"], /* Private Use */ + ["\uE6A0", "\uE6A0"], /* Private Use */ + ["\uE6A1", "\uE6A1"], /* Private Use */ + ["\uE6A2", "\uE6A2"], /* Private Use */ + ["\uE6A3", "\uE6A3"], /* Private Use */ + ["\uE6A4", "\uE6A4"], /* Private Use */ + ["\uE6A5", "\uE6A5"], /* Private Use */ + ["\uE6A6", "\uE6A6"], /* Private Use */ + ["\uE6A7", "\uE6A7"], /* Private Use */ + ["\uE6A8", "\uE6A8"], /* Private Use */ + ["\uE6A9", "\uE6A9"], /* Private Use */ + ["\uE6AA", "\uE6AA"], /* Private Use */ + ["\uE6AB", "\uE6AB"], /* Private Use */ + ["\uE6AC", "\uE6AC"], /* Private Use */ + ["\uE6AD", "\uE6AD"], /* Private Use */ + ["\uE6AE", "\uE6AE"], /* Private Use */ + ["\uE6AF", "\uE6AF"], /* Private Use */ + ["\uE6B0", "\uE6B0"], /* Private Use */ + ["\uE6B1", "\uE6B1"], /* Private Use */ + ["\uE6B2", "\uE6B2"], /* Private Use */ + ["\uE6B3", "\uE6B3"], /* Private Use */ + ["\uE6B4", "\uE6B4"], /* Private Use */ + ["\uE6B5", "\uE6B5"], /* Private Use */ + ["\uE6B6", "\uE6B6"], /* Private Use */ + ["\uE6B7", "\uE6B7"], /* Private Use */ + ["\uE6B8", "\uE6B8"], /* Private Use */ + ["\uE6B9", "\uE6B9"], /* Private Use */ + ["\uE6BA", "\uE6BA"], /* Private Use */ + ["\uE6BB", "\uE6BB"], /* Private Use */ + ["\uE6BC", "\uE6BC"], /* Private Use */ + ["\uE6BD", "\uE6BD"], /* Private Use */ + ["\uE6BE", "\uE6BE"], /* Private Use */ + ["\uE6BF", "\uE6BF"], /* Private Use */ + ["\uE6C0", "\uE6C0"], /* Private Use */ + ["\uE6C1", "\uE6C1"], /* Private Use */ + ["\uE6C2", "\uE6C2"], /* Private Use */ + ["\uE6C3", "\uE6C3"], /* Private Use */ + ["\uE6C4", "\uE6C4"], /* Private Use */ + ["\uE6C5", "\uE6C5"], /* Private Use */ + ["\uE6C6", "\uE6C6"], /* Private Use */ + ["\uE6C7", "\uE6C7"], /* Private Use */ + ["\uE6C8", "\uE6C8"], /* Private Use */ + ["\uE6C9", "\uE6C9"], /* Private Use */ + ["\uE6CA", "\uE6CA"], /* Private Use */ + ["\uE6CB", "\uE6CB"], /* Private Use */ + ["\uE6CC", "\uE6CC"], /* Private Use */ + ["\uE6CD", "\uE6CD"], /* Private Use */ + ["\uE6CE", "\uE6CE"], /* Private Use */ + ["\uE6CF", "\uE6CF"], /* Private Use */ + ["\uE6D0", "\uE6D0"], /* Private Use */ + ["\uE6D1", "\uE6D1"], /* Private Use */ + ["\uE6D2", "\uE6D2"], /* Private Use */ + ["\uE6D3", "\uE6D3"], /* Private Use */ + ["\uE6D4", "\uE6D4"], /* Private Use */ + ["\uE6D5", "\uE6D5"], /* Private Use */ + ["\uE6D6", "\uE6D6"], /* Private Use */ + ["\uE6D7", "\uE6D7"], /* Private Use */ + ["\uE6D8", "\uE6D8"], /* Private Use */ + ["\uE6D9", "\uE6D9"], /* Private Use */ + ["\uE6DA", "\uE6DA"], /* Private Use */ + ["\uE6DB", "\uE6DB"], /* Private Use */ + ["\uE6DC", "\uE6DC"], /* Private Use */ + ["\uE6DD", "\uE6DD"], /* Private Use */ + ["\uE6DE", "\uE6DE"], /* Private Use */ + ["\uE6DF", "\uE6DF"], /* Private Use */ + ["\uE6E0", "\uE6E0"], /* Private Use */ + ["\uE6E1", "\uE6E1"], /* Private Use */ + ["\uE6E2", "\uE6E2"], /* Private Use */ + ["\uE6E3", "\uE6E3"], /* Private Use */ + ["\uE6E4", "\uE6E4"], /* Private Use */ + ["\uE6E5", "\uE6E5"], /* Private Use */ + ["\uE6E6", "\uE6E6"], /* Private Use */ + ["\uE6E7", "\uE6E7"], /* Private Use */ + ["\uE6E8", "\uE6E8"], /* Private Use */ + ["\uE6E9", "\uE6E9"], /* Private Use */ + ["\uE6EA", "\uE6EA"], /* Private Use */ + ["\uE6EB", "\uE6EB"], /* Private Use */ + ["\uE6EC", "\uE6EC"], /* Private Use */ + ["\uE6ED", "\uE6ED"], /* Private Use */ + ["\uE6EE", "\uE6EE"], /* Private Use */ + ["\uE6EF", "\uE6EF"], /* Private Use */ + ["\uE6F0", "\uE6F0"], /* Private Use */ + ["\uE6F1", "\uE6F1"], /* Private Use */ + ["\uE6F2", "\uE6F2"], /* Private Use */ + ["\uE6F3", "\uE6F3"], /* Private Use */ + ["\uE6F4", "\uE6F4"], /* Private Use */ + ["\uE6F5", "\uE6F5"], /* Private Use */ + ["\uE6F6", "\uE6F6"], /* Private Use */ + ["\uE6F7", "\uE6F7"], /* Private Use */ + ["\uE6F8", "\uE6F8"], /* Private Use */ + ["\uE6F9", "\uE6F9"], /* Private Use */ + ["\uE6FA", "\uE6FA"], /* Private Use */ + ["\uE6FB", "\uE6FB"], /* Private Use */ + ["\uE6FC", "\uE6FC"], /* Private Use */ + ["\uE6FD", "\uE6FD"], /* Private Use */ + ["\uE6FE", "\uE6FE"], /* Private Use */ + ["\uE6FF", "\uE6FF"], /* Private Use */ + ["\uE700", "\uE700"], /* Private Use */ + ["\uE701", "\uE701"], /* Private Use */ + ["\uE702", "\uE702"], /* Private Use */ + ["\uE703", "\uE703"], /* Private Use */ + ["\uE704", "\uE704"], /* Private Use */ + ["\uE705", "\uE705"], /* Private Use */ + ["\uE706", "\uE706"], /* Private Use */ + ["\uE707", "\uE707"], /* Private Use */ + ["\uE708", "\uE708"], /* Private Use */ + ["\uE709", "\uE709"], /* Private Use */ + ["\uE70A", "\uE70A"], /* Private Use */ + ["\uE70B", "\uE70B"], /* Private Use */ + ["\uE70C", "\uE70C"], /* Private Use */ + ["\uE70D", "\uE70D"], /* Private Use */ + ["\uE70E", "\uE70E"], /* Private Use */ + ["\uE70F", "\uE70F"], /* Private Use */ + ["\uE710", "\uE710"], /* Private Use */ + ["\uE711", "\uE711"], /* Private Use */ + ["\uE712", "\uE712"], /* Private Use */ + ["\uE713", "\uE713"], /* Private Use */ + ["\uE714", "\uE714"], /* Private Use */ + ["\uE715", "\uE715"], /* Private Use */ + ["\uE716", "\uE716"], /* Private Use */ + ["\uE717", "\uE717"], /* Private Use */ + ["\uE718", "\uE718"], /* Private Use */ + ["\uE719", "\uE719"], /* Private Use */ + ["\uE71A", "\uE71A"], /* Private Use */ + ["\uE71B", "\uE71B"], /* Private Use */ + ["\uE71C", "\uE71C"], /* Private Use */ + ["\uE71D", "\uE71D"], /* Private Use */ + ["\uE71E", "\uE71E"], /* Private Use */ + ["\uE71F", "\uE71F"], /* Private Use */ + ["\uE720", "\uE720"], /* Private Use */ + ["\uE721", "\uE721"], /* Private Use */ + ["\uE722", "\uE722"], /* Private Use */ + ["\uE723", "\uE723"], /* Private Use */ + ["\uE724", "\uE724"], /* Private Use */ + ["\uE725", "\uE725"], /* Private Use */ + ["\uE726", "\uE726"], /* Private Use */ + ["\uE727", "\uE727"], /* Private Use */ + ["\uE728", "\uE728"], /* Private Use */ + ["\uE729", "\uE729"], /* Private Use */ + ["\uE72A", "\uE72A"], /* Private Use */ + ["\uE72B", "\uE72B"], /* Private Use */ + ["\uE72C", "\uE72C"], /* Private Use */ + ["\uE72D", "\uE72D"], /* Private Use */ + ["\uE72E", "\uE72E"], /* Private Use */ + ["\uE72F", "\uE72F"], /* Private Use */ + ["\uE730", "\uE730"], /* Private Use */ + ["\uE731", "\uE731"], /* Private Use */ + ["\uE732", "\uE732"], /* Private Use */ + ["\uE733", "\uE733"], /* Private Use */ + ["\uE734", "\uE734"], /* Private Use */ + ["\uE735", "\uE735"], /* Private Use */ + ["\uE736", "\uE736"], /* Private Use */ + ["\uE737", "\uE737"], /* Private Use */ + ["\uE738", "\uE738"], /* Private Use */ + ["\uE739", "\uE739"], /* Private Use */ + ["\uE73A", "\uE73A"], /* Private Use */ + ["\uE73B", "\uE73B"], /* Private Use */ + ["\uE73C", "\uE73C"], /* Private Use */ + ["\uE73D", "\uE73D"], /* Private Use */ + ["\uE73E", "\uE73E"], /* Private Use */ + ["\uE73F", "\uE73F"], /* Private Use */ + ["\uE740", "\uE740"], /* Private Use */ + ["\uE741", "\uE741"], /* Private Use */ + ["\uE742", "\uE742"], /* Private Use */ + ["\uE743", "\uE743"], /* Private Use */ + ["\uE744", "\uE744"], /* Private Use */ + ["\uE745", "\uE745"], /* Private Use */ + ["\uE746", "\uE746"], /* Private Use */ + ["\uE747", "\uE747"], /* Private Use */ + ["\uE748", "\uE748"], /* Private Use */ + ["\uE749", "\uE749"], /* Private Use */ + ["\uE74A", "\uE74A"], /* Private Use */ + ["\uE74B", "\uE74B"], /* Private Use */ + ["\uE74C", "\uE74C"], /* Private Use */ + ["\uE74D", "\uE74D"], /* Private Use */ + ["\uE74E", "\uE74E"], /* Private Use */ + ["\uE74F", "\uE74F"], /* Private Use */ + ["\uE750", "\uE750"], /* Private Use */ + ["\uE751", "\uE751"], /* Private Use */ + ["\uE752", "\uE752"], /* Private Use */ + ["\uE753", "\uE753"], /* Private Use */ + ["\uE754", "\uE754"], /* Private Use */ + ["\uE755", "\uE755"], /* Private Use */ + ["\uE756", "\uE756"], /* Private Use */ + ["\uE757", "\uE757"], /* Private Use */ + ["\uE758", "\uE758"], /* Private Use */ + ["\uE759", "\uE759"], /* Private Use */ + ["\uE75A", "\uE75A"], /* Private Use */ + ["\uE75B", "\uE75B"], /* Private Use */ + ["\uE75C", "\uE75C"], /* Private Use */ + ["\uE75D", "\uE75D"], /* Private Use */ + ["\uE75E", "\uE75E"], /* Private Use */ + ["\uE75F", "\uE75F"], /* Private Use */ + ["\uE760", "\uE760"], /* Private Use */ + ["\uE761", "\uE761"], /* Private Use */ + ["\uE762", "\uE762"], /* Private Use */ + ["\uE763", "\uE763"], /* Private Use */ + ["\uE764", "\uE764"], /* Private Use */ + ["\uE765", "\uE765"], /* Private Use */ + ["\uE766", "\uE766"], /* Private Use */ + ["\uE767", "\uE767"], /* Private Use */ + ["\uE768", "\uE768"], /* Private Use */ + ["\uE769", "\uE769"], /* Private Use */ + ["\uE76A", "\uE76A"], /* Private Use */ + ["\uE76B", "\uE76B"], /* Private Use */ + ["\uE76C", "\uE76C"], /* Private Use */ + ["\uE76D", "\uE76D"], /* Private Use */ + ["\uE76E", "\uE76E"], /* Private Use */ + ["\uE76F", "\uE76F"], /* Private Use */ + ["\uE770", "\uE770"], /* Private Use */ + ["\uE771", "\uE771"], /* Private Use */ + ["\uE772", "\uE772"], /* Private Use */ + ["\uE773", "\uE773"], /* Private Use */ + ["\uE774", "\uE774"], /* Private Use */ + ["\uE775", "\uE775"], /* Private Use */ + ["\uE776", "\uE776"], /* Private Use */ + ["\uE777", "\uE777"], /* Private Use */ + ["\uE778", "\uE778"], /* Private Use */ + ["\uE779", "\uE779"], /* Private Use */ + ["\uE77A", "\uE77A"], /* Private Use */ + ["\uE77B", "\uE77B"], /* Private Use */ + ["\uE77C", "\uE77C"], /* Private Use */ + ["\uE77D", "\uE77D"], /* Private Use */ + ["\uE77E", "\uE77E"], /* Private Use */ + ["\uE77F", "\uE77F"], /* Private Use */ + ["\uE780", "\uE780"], /* Private Use */ + ["\uE781", "\uE781"], /* Private Use */ + ["\uE782", "\uE782"], /* Private Use */ + ["\uE783", "\uE783"], /* Private Use */ + ["\uE784", "\uE784"], /* Private Use */ + ["\uE785", "\uE785"], /* Private Use */ + ["\uE786", "\uE786"], /* Private Use */ + ["\uE787", "\uE787"], /* Private Use */ + ["\uE788", "\uE788"], /* Private Use */ + ["\uE789", "\uE789"], /* Private Use */ + ["\uE78A", "\uE78A"], /* Private Use */ + ["\uE78B", "\uE78B"], /* Private Use */ + ["\uE78C", "\uE78C"], /* Private Use */ + ["\uE78D", "\uE78D"], /* Private Use */ + ["\uE78E", "\uE78E"], /* Private Use */ + ["\uE78F", "\uE78F"], /* Private Use */ + ["\uE790", "\uE790"], /* Private Use */ + ["\uE791", "\uE791"], /* Private Use */ + ["\uE792", "\uE792"], /* Private Use */ + ["\uE793", "\uE793"], /* Private Use */ + ["\uE794", "\uE794"], /* Private Use */ + ["\uE795", "\uE795"], /* Private Use */ + ["\uE796", "\uE796"], /* Private Use */ + ["\uE797", "\uE797"], /* Private Use */ + ["\uE798", "\uE798"], /* Private Use */ + ["\uE799", "\uE799"], /* Private Use */ + ["\uE79A", "\uE79A"], /* Private Use */ + ["\uE79B", "\uE79B"], /* Private Use */ + ["\uE79C", "\uE79C"], /* Private Use */ + ["\uE79D", "\uE79D"], /* Private Use */ + ["\uE79E", "\uE79E"], /* Private Use */ + ["\uE79F", "\uE79F"], /* Private Use */ + ["\uE7A0", "\uE7A0"], /* Private Use */ + ["\uE7A1", "\uE7A1"], /* Private Use */ + ["\uE7A2", "\uE7A2"], /* Private Use */ + ["\uE7A3", "\uE7A3"], /* Private Use */ + ["\uE7A4", "\uE7A4"], /* Private Use */ + ["\uE7A5", "\uE7A5"], /* Private Use */ + ["\uE7A6", "\uE7A6"], /* Private Use */ + ["\uE7A7", "\uE7A7"], /* Private Use */ + ["\uE7A8", "\uE7A8"], /* Private Use */ + ["\uE7A9", "\uE7A9"], /* Private Use */ + ["\uE7AA", "\uE7AA"], /* Private Use */ + ["\uE7AB", "\uE7AB"], /* Private Use */ + ["\uE7AC", "\uE7AC"], /* Private Use */ + ["\uE7AD", "\uE7AD"], /* Private Use */ + ["\uE7AE", "\uE7AE"], /* Private Use */ + ["\uE7AF", "\uE7AF"], /* Private Use */ + ["\uE7B0", "\uE7B0"], /* Private Use */ + ["\uE7B1", "\uE7B1"], /* Private Use */ + ["\uE7B2", "\uE7B2"], /* Private Use */ + ["\uE7B3", "\uE7B3"], /* Private Use */ + ["\uE7B4", "\uE7B4"], /* Private Use */ + ["\uE7B5", "\uE7B5"], /* Private Use */ + ["\uE7B6", "\uE7B6"], /* Private Use */ + ["\uE7B7", "\uE7B7"], /* Private Use */ + ["\uE7B8", "\uE7B8"], /* Private Use */ + ["\uE7B9", "\uE7B9"], /* Private Use */ + ["\uE7BA", "\uE7BA"], /* Private Use */ + ["\uE7BB", "\uE7BB"], /* Private Use */ + ["\uE7BC", "\uE7BC"], /* Private Use */ + ["\uE7BD", "\uE7BD"], /* Private Use */ + ["\uE7BE", "\uE7BE"], /* Private Use */ + ["\uE7BF", "\uE7BF"], /* Private Use */ + ["\uE7C0", "\uE7C0"], /* Private Use */ + ["\uE7C1", "\uE7C1"], /* Private Use */ + ["\uE7C2", "\uE7C2"], /* Private Use */ + ["\uE7C3", "\uE7C3"], /* Private Use */ + ["\uE7C4", "\uE7C4"], /* Private Use */ + ["\uE7C5", "\uE7C5"], /* Private Use */ + ["\uE7C6", "\uE7C6"], /* Private Use */ + ["\uE7C7", "\uE7C7"], /* Private Use */ + ["\uE7C8", "\uE7C8"], /* Private Use */ + ["\uE7C9", "\uE7C9"], /* Private Use */ + ["\uE7CA", "\uE7CA"], /* Private Use */ + ["\uE7CB", "\uE7CB"], /* Private Use */ + ["\uE7CC", "\uE7CC"], /* Private Use */ + ["\uE7CD", "\uE7CD"], /* Private Use */ + ["\uE7CE", "\uE7CE"], /* Private Use */ + ["\uE7CF", "\uE7CF"], /* Private Use */ + ["\uE7D0", "\uE7D0"], /* Private Use */ + ["\uE7D1", "\uE7D1"], /* Private Use */ + ["\uE7D2", "\uE7D2"], /* Private Use */ + ["\uE7D3", "\uE7D3"], /* Private Use */ + ["\uE7D4", "\uE7D4"], /* Private Use */ + ["\uE7D5", "\uE7D5"], /* Private Use */ + ["\uE7D6", "\uE7D6"], /* Private Use */ + ["\uE7D7", "\uE7D7"], /* Private Use */ + ["\uE7D8", "\uE7D8"], /* Private Use */ + ["\uE7D9", "\uE7D9"], /* Private Use */ + ["\uE7DA", "\uE7DA"], /* Private Use */ + ["\uE7DB", "\uE7DB"], /* Private Use */ + ["\uE7DC", "\uE7DC"], /* Private Use */ + ["\uE7DD", "\uE7DD"], /* Private Use */ + ["\uE7DE", "\uE7DE"], /* Private Use */ + ["\uE7DF", "\uE7DF"], /* Private Use */ + ["\uE7E0", "\uE7E0"], /* Private Use */ + ["\uE7E1", "\uE7E1"], /* Private Use */ + ["\uE7E2", "\uE7E2"], /* Private Use */ + ["\uE7E3", "\uE7E3"], /* Private Use */ + ["\uE7E4", "\uE7E4"], /* Private Use */ + ["\uE7E5", "\uE7E5"], /* Private Use */ + ["\uE7E6", "\uE7E6"], /* Private Use */ + ["\uE7E7", "\uE7E7"], /* Private Use */ + ["\uE7E8", "\uE7E8"], /* Private Use */ + ["\uE7E9", "\uE7E9"], /* Private Use */ + ["\uE7EA", "\uE7EA"], /* Private Use */ + ["\uE7EB", "\uE7EB"], /* Private Use */ + ["\uE7EC", "\uE7EC"], /* Private Use */ + ["\uE7ED", "\uE7ED"], /* Private Use */ + ["\uE7EE", "\uE7EE"], /* Private Use */ + ["\uE7EF", "\uE7EF"], /* Private Use */ + ["\uE7F0", "\uE7F0"], /* Private Use */ + ["\uE7F1", "\uE7F1"], /* Private Use */ + ["\uE7F2", "\uE7F2"], /* Private Use */ + ["\uE7F3", "\uE7F3"], /* Private Use */ + ["\uE7F4", "\uE7F4"], /* Private Use */ + ["\uE7F5", "\uE7F5"], /* Private Use */ + ["\uE7F6", "\uE7F6"], /* Private Use */ + ["\uE7F7", "\uE7F7"], /* Private Use */ + ["\uE7F8", "\uE7F8"], /* Private Use */ + ["\uE7F9", "\uE7F9"], /* Private Use */ + ["\uE7FA", "\uE7FA"], /* Private Use */ + ["\uE7FB", "\uE7FB"], /* Private Use */ + ["\uE7FC", "\uE7FC"], /* Private Use */ + ["\uE7FD", "\uE7FD"], /* Private Use */ + ["\uE7FE", "\uE7FE"], /* Private Use */ + ["\uE7FF", "\uE7FF"], /* Private Use */ + ["\uE800", "\uE800"], /* Private Use */ + ["\uE801", "\uE801"], /* Private Use */ + ["\uE802", "\uE802"], /* Private Use */ + ["\uE803", "\uE803"], /* Private Use */ + ["\uE804", "\uE804"], /* Private Use */ + ["\uE805", "\uE805"], /* Private Use */ + ["\uE806", "\uE806"], /* Private Use */ + ["\uE807", "\uE807"], /* Private Use */ + ["\uE808", "\uE808"], /* Private Use */ + ["\uE809", "\uE809"], /* Private Use */ + ["\uE80A", "\uE80A"], /* Private Use */ + ["\uE80B", "\uE80B"], /* Private Use */ + ["\uE80C", "\uE80C"], /* Private Use */ + ["\uE80D", "\uE80D"], /* Private Use */ + ["\uE80E", "\uE80E"], /* Private Use */ + ["\uE80F", "\uE80F"], /* Private Use */ + ["\uE810", "\uE810"], /* Private Use */ + ["\uE811", "\uE811"], /* Private Use */ + ["\uE812", "\uE812"], /* Private Use */ + ["\uE813", "\uE813"], /* Private Use */ + ["\uE814", "\uE814"], /* Private Use */ + ["\uE815", "\uE815"], /* Private Use */ + ["\uE816", "\uE816"], /* Private Use */ + ["\uE817", "\uE817"], /* Private Use */ + ["\uE818", "\uE818"], /* Private Use */ + ["\uE819", "\uE819"], /* Private Use */ + ["\uE81A", "\uE81A"], /* Private Use */ + ["\uE81B", "\uE81B"], /* Private Use */ + ["\uE81C", "\uE81C"], /* Private Use */ + ["\uE81D", "\uE81D"], /* Private Use */ + ["\uE81E", "\uE81E"], /* Private Use */ + ["\uE81F", "\uE81F"], /* Private Use */ + ["\uE820", "\uE820"], /* Private Use */ + ["\uE821", "\uE821"], /* Private Use */ + ["\uE822", "\uE822"], /* Private Use */ + ["\uE823", "\uE823"], /* Private Use */ + ["\uE824", "\uE824"], /* Private Use */ + ["\uE825", "\uE825"], /* Private Use */ + ["\uE826", "\uE826"], /* Private Use */ + ["\uE827", "\uE827"], /* Private Use */ + ["\uE828", "\uE828"], /* Private Use */ + ["\uE829", "\uE829"], /* Private Use */ + ["\uE82A", "\uE82A"], /* Private Use */ + ["\uE82B", "\uE82B"], /* Private Use */ + ["\uE82C", "\uE82C"], /* Private Use */ + ["\uE82D", "\uE82D"], /* Private Use */ + ["\uE82E", "\uE82E"], /* Private Use */ + ["\uE82F", "\uE82F"], /* Private Use */ + ["\uE830", "\uE830"], /* Private Use */ + ["\uE831", "\uE831"], /* Private Use */ + ["\uE832", "\uE832"], /* Private Use */ + ["\uE833", "\uE833"], /* Private Use */ + ["\uE834", "\uE834"], /* Private Use */ + ["\uE835", "\uE835"], /* Private Use */ + ["\uE836", "\uE836"], /* Private Use */ + ["\uE837", "\uE837"], /* Private Use */ + ["\uE838", "\uE838"], /* Private Use */ + ["\uE839", "\uE839"], /* Private Use */ + ["\uE83A", "\uE83A"], /* Private Use */ + ["\uE83B", "\uE83B"], /* Private Use */ + ["\uE83C", "\uE83C"], /* Private Use */ + ["\uE83D", "\uE83D"], /* Private Use */ + ["\uE83E", "\uE83E"], /* Private Use */ + ["\uE83F", "\uE83F"], /* Private Use */ + ["\uE840", "\uE840"], /* Private Use */ + ["\uE841", "\uE841"], /* Private Use */ + ["\uE842", "\uE842"], /* Private Use */ + ["\uE843", "\uE843"], /* Private Use */ + ["\uE844", "\uE844"], /* Private Use */ + ["\uE845", "\uE845"], /* Private Use */ + ["\uE846", "\uE846"], /* Private Use */ + ["\uE847", "\uE847"], /* Private Use */ + ["\uE848", "\uE848"], /* Private Use */ + ["\uE849", "\uE849"], /* Private Use */ + ["\uE84A", "\uE84A"], /* Private Use */ + ["\uE84B", "\uE84B"], /* Private Use */ + ["\uE84C", "\uE84C"], /* Private Use */ + ["\uE84D", "\uE84D"], /* Private Use */ + ["\uE84E", "\uE84E"], /* Private Use */ + ["\uE84F", "\uE84F"], /* Private Use */ + ["\uE850", "\uE850"], /* Private Use */ + ["\uE851", "\uE851"], /* Private Use */ + ["\uE852", "\uE852"], /* Private Use */ + ["\uE853", "\uE853"], /* Private Use */ + ["\uE854", "\uE854"], /* Private Use */ + ["\uE855", "\uE855"], /* Private Use */ + ["\uE856", "\uE856"], /* Private Use */ + ["\uE857", "\uE857"], /* Private Use */ + ["\uE858", "\uE858"], /* Private Use */ + ["\uE859", "\uE859"], /* Private Use */ + ["\uE85A", "\uE85A"], /* Private Use */ + ["\uE85B", "\uE85B"], /* Private Use */ + ["\uE85C", "\uE85C"], /* Private Use */ + ["\uE85D", "\uE85D"], /* Private Use */ + ["\uE85E", "\uE85E"], /* Private Use */ + ["\uE85F", "\uE85F"], /* Private Use */ + ["\uE860", "\uE860"], /* Private Use */ + ["\uE861", "\uE861"], /* Private Use */ + ["\uE862", "\uE862"], /* Private Use */ + ["\uE863", "\uE863"], /* Private Use */ + ["\uE864", "\uE864"], /* Private Use */ + ["\uE865", "\uE865"], /* Private Use */ + ["\uE866", "\uE866"], /* Private Use */ + ["\uE867", "\uE867"], /* Private Use */ + ["\uE868", "\uE868"], /* Private Use */ + ["\uE869", "\uE869"], /* Private Use */ + ["\uE86A", "\uE86A"], /* Private Use */ + ["\uE86B", "\uE86B"], /* Private Use */ + ["\uE86C", "\uE86C"], /* Private Use */ + ["\uE86D", "\uE86D"], /* Private Use */ + ["\uE86E", "\uE86E"], /* Private Use */ + ["\uE86F", "\uE86F"], /* Private Use */ + ["\uE870", "\uE870"], /* Private Use */ + ["\uE871", "\uE871"], /* Private Use */ + ["\uE872", "\uE872"], /* Private Use */ + ["\uE873", "\uE873"], /* Private Use */ + ["\uE874", "\uE874"], /* Private Use */ + ["\uE875", "\uE875"], /* Private Use */ + ["\uE876", "\uE876"], /* Private Use */ + ["\uE877", "\uE877"], /* Private Use */ + ["\uE878", "\uE878"], /* Private Use */ + ["\uE879", "\uE879"], /* Private Use */ + ["\uE87A", "\uE87A"], /* Private Use */ + ["\uE87B", "\uE87B"], /* Private Use */ + ["\uE87C", "\uE87C"], /* Private Use */ + ["\uE87D", "\uE87D"], /* Private Use */ + ["\uE87E", "\uE87E"], /* Private Use */ + ["\uE87F", "\uE87F"], /* Private Use */ + ["\uE880", "\uE880"], /* Private Use */ + ["\uE881", "\uE881"], /* Private Use */ + ["\uE882", "\uE882"], /* Private Use */ + ["\uE883", "\uE883"], /* Private Use */ + ["\uE884", "\uE884"], /* Private Use */ + ["\uE885", "\uE885"], /* Private Use */ + ["\uE886", "\uE886"], /* Private Use */ + ["\uE887", "\uE887"], /* Private Use */ + ["\uE888", "\uE888"], /* Private Use */ + ["\uE889", "\uE889"], /* Private Use */ + ["\uE88A", "\uE88A"], /* Private Use */ + ["\uE88B", "\uE88B"], /* Private Use */ + ["\uE88C", "\uE88C"], /* Private Use */ + ["\uE88D", "\uE88D"], /* Private Use */ + ["\uE88E", "\uE88E"], /* Private Use */ + ["\uE88F", "\uE88F"], /* Private Use */ + ["\uE890", "\uE890"], /* Private Use */ + ["\uE891", "\uE891"], /* Private Use */ + ["\uE892", "\uE892"], /* Private Use */ + ["\uE893", "\uE893"], /* Private Use */ + ["\uE894", "\uE894"], /* Private Use */ + ["\uE895", "\uE895"], /* Private Use */ + ["\uE896", "\uE896"], /* Private Use */ + ["\uE897", "\uE897"], /* Private Use */ + ["\uE898", "\uE898"], /* Private Use */ + ["\uE899", "\uE899"], /* Private Use */ + ["\uE89A", "\uE89A"], /* Private Use */ + ["\uE89B", "\uE89B"], /* Private Use */ + ["\uE89C", "\uE89C"], /* Private Use */ + ["\uE89D", "\uE89D"], /* Private Use */ + ["\uE89E", "\uE89E"], /* Private Use */ + ["\uE89F", "\uE89F"], /* Private Use */ + ["\uE8A0", "\uE8A0"], /* Private Use */ + ["\uE8A1", "\uE8A1"], /* Private Use */ + ["\uE8A2", "\uE8A2"], /* Private Use */ + ["\uE8A3", "\uE8A3"], /* Private Use */ + ["\uE8A4", "\uE8A4"], /* Private Use */ + ["\uE8A5", "\uE8A5"], /* Private Use */ + ["\uE8A6", "\uE8A6"], /* Private Use */ + ["\uE8A7", "\uE8A7"], /* Private Use */ + ["\uE8A8", "\uE8A8"], /* Private Use */ + ["\uE8A9", "\uE8A9"], /* Private Use */ + ["\uE8AA", "\uE8AA"], /* Private Use */ + ["\uE8AB", "\uE8AB"], /* Private Use */ + ["\uE8AC", "\uE8AC"], /* Private Use */ + ["\uE8AD", "\uE8AD"], /* Private Use */ + ["\uE8AE", "\uE8AE"], /* Private Use */ + ["\uE8AF", "\uE8AF"], /* Private Use */ + ["\uE8B0", "\uE8B0"], /* Private Use */ + ["\uE8B1", "\uE8B1"], /* Private Use */ + ["\uE8B2", "\uE8B2"], /* Private Use */ + ["\uE8B3", "\uE8B3"], /* Private Use */ + ["\uE8B4", "\uE8B4"], /* Private Use */ + ["\uE8B5", "\uE8B5"], /* Private Use */ + ["\uE8B6", "\uE8B6"], /* Private Use */ + ["\uE8B7", "\uE8B7"], /* Private Use */ + ["\uE8B8", "\uE8B8"], /* Private Use */ + ["\uE8B9", "\uE8B9"], /* Private Use */ + ["\uE8BA", "\uE8BA"], /* Private Use */ + ["\uE8BB", "\uE8BB"], /* Private Use */ + ["\uE8BC", "\uE8BC"], /* Private Use */ + ["\uE8BD", "\uE8BD"], /* Private Use */ + ["\uE8BE", "\uE8BE"], /* Private Use */ + ["\uE8BF", "\uE8BF"], /* Private Use */ + ["\uE8C0", "\uE8C0"], /* Private Use */ + ["\uE8C1", "\uE8C1"], /* Private Use */ + ["\uE8C2", "\uE8C2"], /* Private Use */ + ["\uE8C3", "\uE8C3"], /* Private Use */ + ["\uE8C4", "\uE8C4"], /* Private Use */ + ["\uE8C5", "\uE8C5"], /* Private Use */ + ["\uE8C6", "\uE8C6"], /* Private Use */ + ["\uE8C7", "\uE8C7"], /* Private Use */ + ["\uE8C8", "\uE8C8"], /* Private Use */ + ["\uE8C9", "\uE8C9"], /* Private Use */ + ["\uE8CA", "\uE8CA"], /* Private Use */ + ["\uE8CB", "\uE8CB"], /* Private Use */ + ["\uE8CC", "\uE8CC"], /* Private Use */ + ["\uE8CD", "\uE8CD"], /* Private Use */ + ["\uE8CE", "\uE8CE"], /* Private Use */ + ["\uE8CF", "\uE8CF"], /* Private Use */ + ["\uE8D0", "\uE8D0"], /* Private Use */ + ["\uE8D1", "\uE8D1"], /* Private Use */ + ["\uE8D2", "\uE8D2"], /* Private Use */ + ["\uE8D3", "\uE8D3"], /* Private Use */ + ["\uE8D4", "\uE8D4"], /* Private Use */ + ["\uE8D5", "\uE8D5"], /* Private Use */ + ["\uE8D6", "\uE8D6"], /* Private Use */ + ["\uE8D7", "\uE8D7"], /* Private Use */ + ["\uE8D8", "\uE8D8"], /* Private Use */ + ["\uE8D9", "\uE8D9"], /* Private Use */ + ["\uE8DA", "\uE8DA"], /* Private Use */ + ["\uE8DB", "\uE8DB"], /* Private Use */ + ["\uE8DC", "\uE8DC"], /* Private Use */ + ["\uE8DD", "\uE8DD"], /* Private Use */ + ["\uE8DE", "\uE8DE"], /* Private Use */ + ["\uE8DF", "\uE8DF"], /* Private Use */ + ["\uE8E0", "\uE8E0"], /* Private Use */ + ["\uE8E1", "\uE8E1"], /* Private Use */ + ["\uE8E2", "\uE8E2"], /* Private Use */ + ["\uE8E3", "\uE8E3"], /* Private Use */ + ["\uE8E4", "\uE8E4"], /* Private Use */ + ["\uE8E5", "\uE8E5"], /* Private Use */ + ["\uE8E6", "\uE8E6"], /* Private Use */ + ["\uE8E7", "\uE8E7"], /* Private Use */ + ["\uE8E8", "\uE8E8"], /* Private Use */ + ["\uE8E9", "\uE8E9"], /* Private Use */ + ["\uE8EA", "\uE8EA"], /* Private Use */ + ["\uE8EB", "\uE8EB"], /* Private Use */ + ["\uE8EC", "\uE8EC"], /* Private Use */ + ["\uE8ED", "\uE8ED"], /* Private Use */ + ["\uE8EE", "\uE8EE"], /* Private Use */ + ["\uE8EF", "\uE8EF"], /* Private Use */ + ["\uE8F0", "\uE8F0"], /* Private Use */ + ["\uE8F1", "\uE8F1"], /* Private Use */ + ["\uE8F2", "\uE8F2"], /* Private Use */ + ["\uE8F3", "\uE8F3"], /* Private Use */ + ["\uE8F4", "\uE8F4"], /* Private Use */ + ["\uE8F5", "\uE8F5"], /* Private Use */ + ["\uE8F6", "\uE8F6"], /* Private Use */ + ["\uE8F7", "\uE8F7"], /* Private Use */ + ["\uE8F8", "\uE8F8"], /* Private Use */ + ["\uE8F9", "\uE8F9"], /* Private Use */ + ["\uE8FA", "\uE8FA"], /* Private Use */ + ["\uE8FB", "\uE8FB"], /* Private Use */ + ["\uE8FC", "\uE8FC"], /* Private Use */ + ["\uE8FD", "\uE8FD"], /* Private Use */ + ["\uE8FE", "\uE8FE"], /* Private Use */ + ["\uE8FF", "\uE8FF"], /* Private Use */ + ["\uE900", "\uE900"], /* Private Use */ + ["\uE901", "\uE901"], /* Private Use */ + ["\uE902", "\uE902"], /* Private Use */ + ["\uE903", "\uE903"], /* Private Use */ + ["\uE904", "\uE904"], /* Private Use */ + ["\uE905", "\uE905"], /* Private Use */ + ["\uE906", "\uE906"], /* Private Use */ + ["\uE907", "\uE907"], /* Private Use */ + ["\uE908", "\uE908"], /* Private Use */ + ["\uE909", "\uE909"], /* Private Use */ + ["\uE90A", "\uE90A"], /* Private Use */ + ["\uE90B", "\uE90B"], /* Private Use */ + ["\uE90C", "\uE90C"], /* Private Use */ + ["\uE90D", "\uE90D"], /* Private Use */ + ["\uE90E", "\uE90E"], /* Private Use */ + ["\uE90F", "\uE90F"], /* Private Use */ + ["\uE910", "\uE910"], /* Private Use */ + ["\uE911", "\uE911"], /* Private Use */ + ["\uE912", "\uE912"], /* Private Use */ + ["\uE913", "\uE913"], /* Private Use */ + ["\uE914", "\uE914"], /* Private Use */ + ["\uE915", "\uE915"], /* Private Use */ + ["\uE916", "\uE916"], /* Private Use */ + ["\uE917", "\uE917"], /* Private Use */ + ["\uE918", "\uE918"], /* Private Use */ + ["\uE919", "\uE919"], /* Private Use */ + ["\uE91A", "\uE91A"], /* Private Use */ + ["\uE91B", "\uE91B"], /* Private Use */ + ["\uE91C", "\uE91C"], /* Private Use */ + ["\uE91D", "\uE91D"], /* Private Use */ + ["\uE91E", "\uE91E"], /* Private Use */ + ["\uE91F", "\uE91F"], /* Private Use */ + ["\uE920", "\uE920"], /* Private Use */ + ["\uE921", "\uE921"], /* Private Use */ + ["\uE922", "\uE922"], /* Private Use */ + ["\uE923", "\uE923"], /* Private Use */ + ["\uE924", "\uE924"], /* Private Use */ + ["\uE925", "\uE925"], /* Private Use */ + ["\uE926", "\uE926"], /* Private Use */ + ["\uE927", "\uE927"], /* Private Use */ + ["\uE928", "\uE928"], /* Private Use */ + ["\uE929", "\uE929"], /* Private Use */ + ["\uE92A", "\uE92A"], /* Private Use */ + ["\uE92B", "\uE92B"], /* Private Use */ + ["\uE92C", "\uE92C"], /* Private Use */ + ["\uE92D", "\uE92D"], /* Private Use */ + ["\uE92E", "\uE92E"], /* Private Use */ + ["\uE92F", "\uE92F"], /* Private Use */ + ["\uE930", "\uE930"], /* Private Use */ + ["\uE931", "\uE931"], /* Private Use */ + ["\uE932", "\uE932"], /* Private Use */ + ["\uE933", "\uE933"], /* Private Use */ + ["\uE934", "\uE934"], /* Private Use */ + ["\uE935", "\uE935"], /* Private Use */ + ["\uE936", "\uE936"], /* Private Use */ + ["\uE937", "\uE937"], /* Private Use */ + ["\uE938", "\uE938"], /* Private Use */ + ["\uE939", "\uE939"], /* Private Use */ + ["\uE93A", "\uE93A"], /* Private Use */ + ["\uE93B", "\uE93B"], /* Private Use */ + ["\uE93C", "\uE93C"], /* Private Use */ + ["\uE93D", "\uE93D"], /* Private Use */ + ["\uE93E", "\uE93E"], /* Private Use */ + ["\uE93F", "\uE93F"], /* Private Use */ + ["\uE940", "\uE940"], /* Private Use */ + ["\uE941", "\uE941"], /* Private Use */ + ["\uE942", "\uE942"], /* Private Use */ + ["\uE943", "\uE943"], /* Private Use */ + ["\uE944", "\uE944"], /* Private Use */ + ["\uE945", "\uE945"], /* Private Use */ + ["\uE946", "\uE946"], /* Private Use */ + ["\uE947", "\uE947"], /* Private Use */ + ["\uE948", "\uE948"], /* Private Use */ + ["\uE949", "\uE949"], /* Private Use */ + ["\uE94A", "\uE94A"], /* Private Use */ + ["\uE94B", "\uE94B"], /* Private Use */ + ["\uE94C", "\uE94C"], /* Private Use */ + ["\uE94D", "\uE94D"], /* Private Use */ + ["\uE94E", "\uE94E"], /* Private Use */ + ["\uE94F", "\uE94F"], /* Private Use */ + ["\uE950", "\uE950"], /* Private Use */ + ["\uE951", "\uE951"], /* Private Use */ + ["\uE952", "\uE952"], /* Private Use */ + ["\uE953", "\uE953"], /* Private Use */ + ["\uE954", "\uE954"], /* Private Use */ + ["\uE955", "\uE955"], /* Private Use */ + ["\uE956", "\uE956"], /* Private Use */ + ["\uE957", "\uE957"], /* Private Use */ + ["\uE958", "\uE958"], /* Private Use */ + ["\uE959", "\uE959"], /* Private Use */ + ["\uE95A", "\uE95A"], /* Private Use */ + ["\uE95B", "\uE95B"], /* Private Use */ + ["\uE95C", "\uE95C"], /* Private Use */ + ["\uE95D", "\uE95D"], /* Private Use */ + ["\uE95E", "\uE95E"], /* Private Use */ + ["\uE95F", "\uE95F"], /* Private Use */ + ["\uE960", "\uE960"], /* Private Use */ + ["\uE961", "\uE961"], /* Private Use */ + ["\uE962", "\uE962"], /* Private Use */ + ["\uE963", "\uE963"], /* Private Use */ + ["\uE964", "\uE964"], /* Private Use */ + ["\uE965", "\uE965"], /* Private Use */ + ["\uE966", "\uE966"], /* Private Use */ + ["\uE967", "\uE967"], /* Private Use */ + ["\uE968", "\uE968"], /* Private Use */ + ["\uE969", "\uE969"], /* Private Use */ + ["\uE96A", "\uE96A"], /* Private Use */ + ["\uE96B", "\uE96B"], /* Private Use */ + ["\uE96C", "\uE96C"], /* Private Use */ + ["\uE96D", "\uE96D"], /* Private Use */ + ["\uE96E", "\uE96E"], /* Private Use */ + ["\uE96F", "\uE96F"], /* Private Use */ + ["\uE970", "\uE970"], /* Private Use */ + ["\uE971", "\uE971"], /* Private Use */ + ["\uE972", "\uE972"], /* Private Use */ + ["\uE973", "\uE973"], /* Private Use */ + ["\uE974", "\uE974"], /* Private Use */ + ["\uE975", "\uE975"], /* Private Use */ + ["\uE976", "\uE976"], /* Private Use */ + ["\uE977", "\uE977"], /* Private Use */ + ["\uE978", "\uE978"], /* Private Use */ + ["\uE979", "\uE979"], /* Private Use */ + ["\uE97A", "\uE97A"], /* Private Use */ + ["\uE97B", "\uE97B"], /* Private Use */ + ["\uE97C", "\uE97C"], /* Private Use */ + ["\uE97D", "\uE97D"], /* Private Use */ + ["\uE97E", "\uE97E"], /* Private Use */ + ["\uE97F", "\uE97F"], /* Private Use */ + ["\uE980", "\uE980"], /* Private Use */ + ["\uE981", "\uE981"], /* Private Use */ + ["\uE982", "\uE982"], /* Private Use */ + ["\uE983", "\uE983"], /* Private Use */ + ["\uE984", "\uE984"], /* Private Use */ + ["\uE985", "\uE985"], /* Private Use */ + ["\uE986", "\uE986"], /* Private Use */ + ["\uE987", "\uE987"], /* Private Use */ + ["\uE988", "\uE988"], /* Private Use */ + ["\uE989", "\uE989"], /* Private Use */ + ["\uE98A", "\uE98A"], /* Private Use */ + ["\uE98B", "\uE98B"], /* Private Use */ + ["\uE98C", "\uE98C"], /* Private Use */ + ["\uE98D", "\uE98D"], /* Private Use */ + ["\uE98E", "\uE98E"], /* Private Use */ + ["\uE98F", "\uE98F"], /* Private Use */ + ["\uE990", "\uE990"], /* Private Use */ + ["\uE991", "\uE991"], /* Private Use */ + ["\uE992", "\uE992"], /* Private Use */ + ["\uE993", "\uE993"], /* Private Use */ + ["\uE994", "\uE994"], /* Private Use */ + ["\uE995", "\uE995"], /* Private Use */ + ["\uE996", "\uE996"], /* Private Use */ + ["\uE997", "\uE997"], /* Private Use */ + ["\uE998", "\uE998"], /* Private Use */ + ["\uE999", "\uE999"], /* Private Use */ + ["\uE99A", "\uE99A"], /* Private Use */ + ["\uE99B", "\uE99B"], /* Private Use */ + ["\uE99C", "\uE99C"], /* Private Use */ + ["\uE99D", "\uE99D"], /* Private Use */ + ["\uE99E", "\uE99E"], /* Private Use */ + ["\uE99F", "\uE99F"], /* Private Use */ + ["\uE9A0", "\uE9A0"], /* Private Use */ + ["\uE9A1", "\uE9A1"], /* Private Use */ + ["\uE9A2", "\uE9A2"], /* Private Use */ + ["\uE9A3", "\uE9A3"], /* Private Use */ + ["\uE9A4", "\uE9A4"], /* Private Use */ + ["\uE9A5", "\uE9A5"], /* Private Use */ + ["\uE9A6", "\uE9A6"], /* Private Use */ + ["\uE9A7", "\uE9A7"], /* Private Use */ + ["\uE9A8", "\uE9A8"], /* Private Use */ + ["\uE9A9", "\uE9A9"], /* Private Use */ + ["\uE9AA", "\uE9AA"], /* Private Use */ + ["\uE9AB", "\uE9AB"], /* Private Use */ + ["\uE9AC", "\uE9AC"], /* Private Use */ + ["\uE9AD", "\uE9AD"], /* Private Use */ + ["\uE9AE", "\uE9AE"], /* Private Use */ + ["\uE9AF", "\uE9AF"], /* Private Use */ + ["\uE9B0", "\uE9B0"], /* Private Use */ + ["\uE9B1", "\uE9B1"], /* Private Use */ + ["\uE9B2", "\uE9B2"], /* Private Use */ + ["\uE9B3", "\uE9B3"], /* Private Use */ + ["\uE9B4", "\uE9B4"], /* Private Use */ + ["\uE9B5", "\uE9B5"], /* Private Use */ + ["\uE9B6", "\uE9B6"], /* Private Use */ + ["\uE9B7", "\uE9B7"], /* Private Use */ + ["\uE9B8", "\uE9B8"], /* Private Use */ + ["\uE9B9", "\uE9B9"], /* Private Use */ + ["\uE9BA", "\uE9BA"], /* Private Use */ + ["\uE9BB", "\uE9BB"], /* Private Use */ + ["\uE9BC", "\uE9BC"], /* Private Use */ + ["\uE9BD", "\uE9BD"], /* Private Use */ + ["\uE9BE", "\uE9BE"], /* Private Use */ + ["\uE9BF", "\uE9BF"], /* Private Use */ + ["\uE9C0", "\uE9C0"], /* Private Use */ + ["\uE9C1", "\uE9C1"], /* Private Use */ + ["\uE9C2", "\uE9C2"], /* Private Use */ + ["\uE9C3", "\uE9C3"], /* Private Use */ + ["\uE9C4", "\uE9C4"], /* Private Use */ + ["\uE9C5", "\uE9C5"], /* Private Use */ + ["\uE9C6", "\uE9C6"], /* Private Use */ + ["\uE9C7", "\uE9C7"], /* Private Use */ + ["\uE9C8", "\uE9C8"], /* Private Use */ + ["\uE9C9", "\uE9C9"], /* Private Use */ + ["\uE9CA", "\uE9CA"], /* Private Use */ + ["\uE9CB", "\uE9CB"], /* Private Use */ + ["\uE9CC", "\uE9CC"], /* Private Use */ + ["\uE9CD", "\uE9CD"], /* Private Use */ + ["\uE9CE", "\uE9CE"], /* Private Use */ + ["\uE9CF", "\uE9CF"], /* Private Use */ + ["\uE9D0", "\uE9D0"], /* Private Use */ + ["\uE9D1", "\uE9D1"], /* Private Use */ + ["\uE9D2", "\uE9D2"], /* Private Use */ + ["\uE9D3", "\uE9D3"], /* Private Use */ + ["\uE9D4", "\uE9D4"], /* Private Use */ + ["\uE9D5", "\uE9D5"], /* Private Use */ + ["\uE9D6", "\uE9D6"], /* Private Use */ + ["\uE9D7", "\uE9D7"], /* Private Use */ + ["\uE9D8", "\uE9D8"], /* Private Use */ + ["\uE9D9", "\uE9D9"], /* Private Use */ + ["\uE9DA", "\uE9DA"], /* Private Use */ + ["\uE9DB", "\uE9DB"], /* Private Use */ + ["\uE9DC", "\uE9DC"], /* Private Use */ + ["\uE9DD", "\uE9DD"], /* Private Use */ + ["\uE9DE", "\uE9DE"], /* Private Use */ + ["\uE9DF", "\uE9DF"], /* Private Use */ + ["\uE9E0", "\uE9E0"], /* Private Use */ + ["\uE9E1", "\uE9E1"], /* Private Use */ + ["\uE9E2", "\uE9E2"], /* Private Use */ + ["\uE9E3", "\uE9E3"], /* Private Use */ + ["\uE9E4", "\uE9E4"], /* Private Use */ + ["\uE9E5", "\uE9E5"], /* Private Use */ + ["\uE9E6", "\uE9E6"], /* Private Use */ + ["\uE9E7", "\uE9E7"], /* Private Use */ + ["\uE9E8", "\uE9E8"], /* Private Use */ + ["\uE9E9", "\uE9E9"], /* Private Use */ + ["\uE9EA", "\uE9EA"], /* Private Use */ + ["\uE9EB", "\uE9EB"], /* Private Use */ + ["\uE9EC", "\uE9EC"], /* Private Use */ + ["\uE9ED", "\uE9ED"], /* Private Use */ + ["\uE9EE", "\uE9EE"], /* Private Use */ + ["\uE9EF", "\uE9EF"], /* Private Use */ + ["\uE9F0", "\uE9F0"], /* Private Use */ + ["\uE9F1", "\uE9F1"], /* Private Use */ + ["\uE9F2", "\uE9F2"], /* Private Use */ + ["\uE9F3", "\uE9F3"], /* Private Use */ + ["\uE9F4", "\uE9F4"], /* Private Use */ + ["\uE9F5", "\uE9F5"], /* Private Use */ + ["\uE9F6", "\uE9F6"], /* Private Use */ + ["\uE9F7", "\uE9F7"], /* Private Use */ + ["\uE9F8", "\uE9F8"], /* Private Use */ + ["\uE9F9", "\uE9F9"], /* Private Use */ + ["\uE9FA", "\uE9FA"], /* Private Use */ + ["\uE9FB", "\uE9FB"], /* Private Use */ + ["\uE9FC", "\uE9FC"], /* Private Use */ + ["\uE9FD", "\uE9FD"], /* Private Use */ + ["\uE9FE", "\uE9FE"], /* Private Use */ + ["\uE9FF", "\uE9FF"], /* Private Use */ + ["\uEA00", "\uEA00"], /* Private Use */ + ["\uEA01", "\uEA01"], /* Private Use */ + ["\uEA02", "\uEA02"], /* Private Use */ + ["\uEA03", "\uEA03"], /* Private Use */ + ["\uEA04", "\uEA04"], /* Private Use */ + ["\uEA05", "\uEA05"], /* Private Use */ + ["\uEA06", "\uEA06"], /* Private Use */ + ["\uEA07", "\uEA07"], /* Private Use */ + ["\uEA08", "\uEA08"], /* Private Use */ + ["\uEA09", "\uEA09"], /* Private Use */ + ["\uEA0A", "\uEA0A"], /* Private Use */ + ["\uEA0B", "\uEA0B"], /* Private Use */ + ["\uEA0C", "\uEA0C"], /* Private Use */ + ["\uEA0D", "\uEA0D"], /* Private Use */ + ["\uEA0E", "\uEA0E"], /* Private Use */ + ["\uEA0F", "\uEA0F"], /* Private Use */ + ["\uEA10", "\uEA10"], /* Private Use */ + ["\uEA11", "\uEA11"], /* Private Use */ + ["\uEA12", "\uEA12"], /* Private Use */ + ["\uEA13", "\uEA13"], /* Private Use */ + ["\uEA14", "\uEA14"], /* Private Use */ + ["\uEA15", "\uEA15"], /* Private Use */ + ["\uEA16", "\uEA16"], /* Private Use */ + ["\uEA17", "\uEA17"], /* Private Use */ + ["\uEA18", "\uEA18"], /* Private Use */ + ["\uEA19", "\uEA19"], /* Private Use */ + ["\uEA1A", "\uEA1A"], /* Private Use */ + ["\uEA1B", "\uEA1B"], /* Private Use */ + ["\uEA1C", "\uEA1C"], /* Private Use */ + ["\uEA1D", "\uEA1D"], /* Private Use */ + ["\uEA1E", "\uEA1E"], /* Private Use */ + ["\uEA1F", "\uEA1F"], /* Private Use */ + ["\uEA20", "\uEA20"], /* Private Use */ + ["\uEA21", "\uEA21"], /* Private Use */ + ["\uEA22", "\uEA22"], /* Private Use */ + ["\uEA23", "\uEA23"], /* Private Use */ + ["\uEA24", "\uEA24"], /* Private Use */ + ["\uEA25", "\uEA25"], /* Private Use */ + ["\uEA26", "\uEA26"], /* Private Use */ + ["\uEA27", "\uEA27"], /* Private Use */ + ["\uEA28", "\uEA28"], /* Private Use */ + ["\uEA29", "\uEA29"], /* Private Use */ + ["\uEA2A", "\uEA2A"], /* Private Use */ + ["\uEA2B", "\uEA2B"], /* Private Use */ + ["\uEA2C", "\uEA2C"], /* Private Use */ + ["\uEA2D", "\uEA2D"], /* Private Use */ + ["\uEA2E", "\uEA2E"], /* Private Use */ + ["\uEA2F", "\uEA2F"], /* Private Use */ + ["\uEA30", "\uEA30"], /* Private Use */ + ["\uEA31", "\uEA31"], /* Private Use */ + ["\uEA32", "\uEA32"], /* Private Use */ + ["\uEA33", "\uEA33"], /* Private Use */ + ["\uEA34", "\uEA34"], /* Private Use */ + ["\uEA35", "\uEA35"], /* Private Use */ + ["\uEA36", "\uEA36"], /* Private Use */ + ["\uEA37", "\uEA37"], /* Private Use */ + ["\uEA38", "\uEA38"], /* Private Use */ + ["\uEA39", "\uEA39"], /* Private Use */ + ["\uEA3A", "\uEA3A"], /* Private Use */ + ["\uEA3B", "\uEA3B"], /* Private Use */ + ["\uEA3C", "\uEA3C"], /* Private Use */ + ["\uEA3D", "\uEA3D"], /* Private Use */ + ["\uEA3E", "\uEA3E"], /* Private Use */ + ["\uEA3F", "\uEA3F"], /* Private Use */ + ["\uEA40", "\uEA40"], /* Private Use */ + ["\uEA41", "\uEA41"], /* Private Use */ + ["\uEA42", "\uEA42"], /* Private Use */ + ["\uEA43", "\uEA43"], /* Private Use */ + ["\uEA44", "\uEA44"], /* Private Use */ + ["\uEA45", "\uEA45"], /* Private Use */ + ["\uEA46", "\uEA46"], /* Private Use */ + ["\uEA47", "\uEA47"], /* Private Use */ + ["\uEA48", "\uEA48"], /* Private Use */ + ["\uEA49", "\uEA49"], /* Private Use */ + ["\uEA4A", "\uEA4A"], /* Private Use */ + ["\uEA4B", "\uEA4B"], /* Private Use */ + ["\uEA4C", "\uEA4C"], /* Private Use */ + ["\uEA4D", "\uEA4D"], /* Private Use */ + ["\uEA4E", "\uEA4E"], /* Private Use */ + ["\uEA4F", "\uEA4F"], /* Private Use */ + ["\uEA50", "\uEA50"], /* Private Use */ + ["\uEA51", "\uEA51"], /* Private Use */ + ["\uEA52", "\uEA52"], /* Private Use */ + ["\uEA53", "\uEA53"], /* Private Use */ + ["\uEA54", "\uEA54"], /* Private Use */ + ["\uEA55", "\uEA55"], /* Private Use */ + ["\uEA56", "\uEA56"], /* Private Use */ + ["\uEA57", "\uEA57"], /* Private Use */ + ["\uEA58", "\uEA58"], /* Private Use */ + ["\uEA59", "\uEA59"], /* Private Use */ + ["\uEA5A", "\uEA5A"], /* Private Use */ + ["\uEA5B", "\uEA5B"], /* Private Use */ + ["\uEA5C", "\uEA5C"], /* Private Use */ + ["\uEA5D", "\uEA5D"], /* Private Use */ + ["\uEA5E", "\uEA5E"], /* Private Use */ + ["\uEA5F", "\uEA5F"], /* Private Use */ + ["\uEA60", "\uEA60"], /* Private Use */ + ["\uEA61", "\uEA61"], /* Private Use */ + ["\uEA62", "\uEA62"], /* Private Use */ + ["\uEA63", "\uEA63"], /* Private Use */ + ["\uEA64", "\uEA64"], /* Private Use */ + ["\uEA65", "\uEA65"], /* Private Use */ + ["\uEA66", "\uEA66"], /* Private Use */ + ["\uEA67", "\uEA67"], /* Private Use */ + ["\uEA68", "\uEA68"], /* Private Use */ + ["\uEA69", "\uEA69"], /* Private Use */ + ["\uEA6A", "\uEA6A"], /* Private Use */ + ["\uEA6B", "\uEA6B"], /* Private Use */ + ["\uEA6C", "\uEA6C"], /* Private Use */ + ["\uEA6D", "\uEA6D"], /* Private Use */ + ["\uEA6E", "\uEA6E"], /* Private Use */ + ["\uEA6F", "\uEA6F"], /* Private Use */ + ["\uEA70", "\uEA70"], /* Private Use */ + ["\uEA71", "\uEA71"], /* Private Use */ + ["\uEA72", "\uEA72"], /* Private Use */ + ["\uEA73", "\uEA73"], /* Private Use */ + ["\uEA74", "\uEA74"], /* Private Use */ + ["\uEA75", "\uEA75"], /* Private Use */ + ["\uEA76", "\uEA76"], /* Private Use */ + ["\uEA77", "\uEA77"], /* Private Use */ + ["\uEA78", "\uEA78"], /* Private Use */ + ["\uEA79", "\uEA79"], /* Private Use */ + ["\uEA7A", "\uEA7A"], /* Private Use */ + ["\uEA7B", "\uEA7B"], /* Private Use */ + ["\uEA7C", "\uEA7C"], /* Private Use */ + ["\uEA7D", "\uEA7D"], /* Private Use */ + ["\uEA7E", "\uEA7E"], /* Private Use */ + ["\uEA7F", "\uEA7F"], /* Private Use */ + ["\uEA80", "\uEA80"], /* Private Use */ + ["\uEA81", "\uEA81"], /* Private Use */ + ["\uEA82", "\uEA82"], /* Private Use */ + ["\uEA83", "\uEA83"], /* Private Use */ + ["\uEA84", "\uEA84"], /* Private Use */ + ["\uEA85", "\uEA85"], /* Private Use */ + ["\uEA86", "\uEA86"], /* Private Use */ + ["\uEA87", "\uEA87"], /* Private Use */ + ["\uEA88", "\uEA88"], /* Private Use */ + ["\uEA89", "\uEA89"], /* Private Use */ + ["\uEA8A", "\uEA8A"], /* Private Use */ + ["\uEA8B", "\uEA8B"], /* Private Use */ + ["\uEA8C", "\uEA8C"], /* Private Use */ + ["\uEA8D", "\uEA8D"], /* Private Use */ + ["\uEA8E", "\uEA8E"], /* Private Use */ + ["\uEA8F", "\uEA8F"], /* Private Use */ + ["\uEA90", "\uEA90"], /* Private Use */ + ["\uEA91", "\uEA91"], /* Private Use */ + ["\uEA92", "\uEA92"], /* Private Use */ + ["\uEA93", "\uEA93"], /* Private Use */ + ["\uEA94", "\uEA94"], /* Private Use */ + ["\uEA95", "\uEA95"], /* Private Use */ + ["\uEA96", "\uEA96"], /* Private Use */ + ["\uEA97", "\uEA97"], /* Private Use */ + ["\uEA98", "\uEA98"], /* Private Use */ + ["\uEA99", "\uEA99"], /* Private Use */ + ["\uEA9A", "\uEA9A"], /* Private Use */ + ["\uEA9B", "\uEA9B"], /* Private Use */ + ["\uEA9C", "\uEA9C"], /* Private Use */ + ["\uEA9D", "\uEA9D"], /* Private Use */ + ["\uEA9E", "\uEA9E"], /* Private Use */ + ["\uEA9F", "\uEA9F"], /* Private Use */ + ["\uEAA0", "\uEAA0"], /* Private Use */ + ["\uEAA1", "\uEAA1"], /* Private Use */ + ["\uEAA2", "\uEAA2"], /* Private Use */ + ["\uEAA3", "\uEAA3"], /* Private Use */ + ["\uEAA4", "\uEAA4"], /* Private Use */ + ["\uEAA5", "\uEAA5"], /* Private Use */ + ["\uEAA6", "\uEAA6"], /* Private Use */ + ["\uEAA7", "\uEAA7"], /* Private Use */ + ["\uEAA8", "\uEAA8"], /* Private Use */ + ["\uEAA9", "\uEAA9"], /* Private Use */ + ["\uEAAA", "\uEAAA"], /* Private Use */ + ["\uEAAB", "\uEAAB"], /* Private Use */ + ["\uEAAC", "\uEAAC"], /* Private Use */ + ["\uEAAD", "\uEAAD"], /* Private Use */ + ["\uEAAE", "\uEAAE"], /* Private Use */ + ["\uEAAF", "\uEAAF"], /* Private Use */ + ["\uEAB0", "\uEAB0"], /* Private Use */ + ["\uEAB1", "\uEAB1"], /* Private Use */ + ["\uEAB2", "\uEAB2"], /* Private Use */ + ["\uEAB3", "\uEAB3"], /* Private Use */ + ["\uEAB4", "\uEAB4"], /* Private Use */ + ["\uEAB5", "\uEAB5"], /* Private Use */ + ["\uEAB6", "\uEAB6"], /* Private Use */ + ["\uEAB7", "\uEAB7"], /* Private Use */ + ["\uEAB8", "\uEAB8"], /* Private Use */ + ["\uEAB9", "\uEAB9"], /* Private Use */ + ["\uEABA", "\uEABA"], /* Private Use */ + ["\uEABB", "\uEABB"], /* Private Use */ + ["\uEABC", "\uEABC"], /* Private Use */ + ["\uEABD", "\uEABD"], /* Private Use */ + ["\uEABE", "\uEABE"], /* Private Use */ + ["\uEABF", "\uEABF"], /* Private Use */ + ["\uEAC0", "\uEAC0"], /* Private Use */ + ["\uEAC1", "\uEAC1"], /* Private Use */ + ["\uEAC2", "\uEAC2"], /* Private Use */ + ["\uEAC3", "\uEAC3"], /* Private Use */ + ["\uEAC4", "\uEAC4"], /* Private Use */ + ["\uEAC5", "\uEAC5"], /* Private Use */ + ["\uEAC6", "\uEAC6"], /* Private Use */ + ["\uEAC7", "\uEAC7"], /* Private Use */ + ["\uEAC8", "\uEAC8"], /* Private Use */ + ["\uEAC9", "\uEAC9"], /* Private Use */ + ["\uEACA", "\uEACA"], /* Private Use */ + ["\uEACB", "\uEACB"], /* Private Use */ + ["\uEACC", "\uEACC"], /* Private Use */ + ["\uEACD", "\uEACD"], /* Private Use */ + ["\uEACE", "\uEACE"], /* Private Use */ + ["\uEACF", "\uEACF"], /* Private Use */ + ["\uEAD0", "\uEAD0"], /* Private Use */ + ["\uEAD1", "\uEAD1"], /* Private Use */ + ["\uEAD2", "\uEAD2"], /* Private Use */ + ["\uEAD3", "\uEAD3"], /* Private Use */ + ["\uEAD4", "\uEAD4"], /* Private Use */ + ["\uEAD5", "\uEAD5"], /* Private Use */ + ["\uEAD6", "\uEAD6"], /* Private Use */ + ["\uEAD7", "\uEAD7"], /* Private Use */ + ["\uEAD8", "\uEAD8"], /* Private Use */ + ["\uEAD9", "\uEAD9"], /* Private Use */ + ["\uEADA", "\uEADA"], /* Private Use */ + ["\uEADB", "\uEADB"], /* Private Use */ + ["\uEADC", "\uEADC"], /* Private Use */ + ["\uEADD", "\uEADD"], /* Private Use */ + ["\uEADE", "\uEADE"], /* Private Use */ + ["\uEADF", "\uEADF"], /* Private Use */ + ["\uEAE0", "\uEAE0"], /* Private Use */ + ["\uEAE1", "\uEAE1"], /* Private Use */ + ["\uEAE2", "\uEAE2"], /* Private Use */ + ["\uEAE3", "\uEAE3"], /* Private Use */ + ["\uEAE4", "\uEAE4"], /* Private Use */ + ["\uEAE5", "\uEAE5"], /* Private Use */ + ["\uEAE6", "\uEAE6"], /* Private Use */ + ["\uEAE7", "\uEAE7"], /* Private Use */ + ["\uEAE8", "\uEAE8"], /* Private Use */ + ["\uEAE9", "\uEAE9"], /* Private Use */ + ["\uEAEA", "\uEAEA"], /* Private Use */ + ["\uEAEB", "\uEAEB"], /* Private Use */ + ["\uEAEC", "\uEAEC"], /* Private Use */ + ["\uEAED", "\uEAED"], /* Private Use */ + ["\uEAEE", "\uEAEE"], /* Private Use */ + ["\uEAEF", "\uEAEF"], /* Private Use */ + ["\uEAF0", "\uEAF0"], /* Private Use */ + ["\uEAF1", "\uEAF1"], /* Private Use */ + ["\uEAF2", "\uEAF2"], /* Private Use */ + ["\uEAF3", "\uEAF3"], /* Private Use */ + ["\uEAF4", "\uEAF4"], /* Private Use */ + ["\uEAF5", "\uEAF5"], /* Private Use */ + ["\uEAF6", "\uEAF6"], /* Private Use */ + ["\uEAF7", "\uEAF7"], /* Private Use */ + ["\uEAF8", "\uEAF8"], /* Private Use */ + ["\uEAF9", "\uEAF9"], /* Private Use */ + ["\uEAFA", "\uEAFA"], /* Private Use */ + ["\uEAFB", "\uEAFB"], /* Private Use */ + ["\uEAFC", "\uEAFC"], /* Private Use */ + ["\uEAFD", "\uEAFD"], /* Private Use */ + ["\uEAFE", "\uEAFE"], /* Private Use */ + ["\uEAFF", "\uEAFF"], /* Private Use */ + ["\uEB00", "\uEB00"], /* Private Use */ + ["\uEB01", "\uEB01"], /* Private Use */ + ["\uEB02", "\uEB02"], /* Private Use */ + ["\uEB03", "\uEB03"], /* Private Use */ + ["\uEB04", "\uEB04"], /* Private Use */ + ["\uEB05", "\uEB05"], /* Private Use */ + ["\uEB06", "\uEB06"], /* Private Use */ + ["\uEB07", "\uEB07"], /* Private Use */ + ["\uEB08", "\uEB08"], /* Private Use */ + ["\uEB09", "\uEB09"], /* Private Use */ + ["\uEB0A", "\uEB0A"], /* Private Use */ + ["\uEB0B", "\uEB0B"], /* Private Use */ + ["\uEB0C", "\uEB0C"], /* Private Use */ + ["\uEB0D", "\uEB0D"], /* Private Use */ + ["\uEB0E", "\uEB0E"], /* Private Use */ + ["\uEB0F", "\uEB0F"], /* Private Use */ + ["\uEB10", "\uEB10"], /* Private Use */ + ["\uEB11", "\uEB11"], /* Private Use */ + ["\uEB12", "\uEB12"], /* Private Use */ + ["\uEB13", "\uEB13"], /* Private Use */ + ["\uEB14", "\uEB14"], /* Private Use */ + ["\uEB15", "\uEB15"], /* Private Use */ + ["\uEB16", "\uEB16"], /* Private Use */ + ["\uEB17", "\uEB17"], /* Private Use */ + ["\uEB18", "\uEB18"], /* Private Use */ + ["\uEB19", "\uEB19"], /* Private Use */ + ["\uEB1A", "\uEB1A"], /* Private Use */ + ["\uEB1B", "\uEB1B"], /* Private Use */ + ["\uEB1C", "\uEB1C"], /* Private Use */ + ["\uEB1D", "\uEB1D"], /* Private Use */ + ["\uEB1E", "\uEB1E"], /* Private Use */ + ["\uEB1F", "\uEB1F"], /* Private Use */ + ["\uEB20", "\uEB20"], /* Private Use */ + ["\uEB21", "\uEB21"], /* Private Use */ + ["\uEB22", "\uEB22"], /* Private Use */ + ["\uEB23", "\uEB23"], /* Private Use */ + ["\uEB24", "\uEB24"], /* Private Use */ + ["\uEB25", "\uEB25"], /* Private Use */ + ["\uEB26", "\uEB26"], /* Private Use */ + ["\uEB27", "\uEB27"], /* Private Use */ + ["\uEB28", "\uEB28"], /* Private Use */ + ["\uEB29", "\uEB29"], /* Private Use */ + ["\uEB2A", "\uEB2A"], /* Private Use */ + ["\uEB2B", "\uEB2B"], /* Private Use */ + ["\uEB2C", "\uEB2C"], /* Private Use */ + ["\uEB2D", "\uEB2D"], /* Private Use */ + ["\uEB2E", "\uEB2E"], /* Private Use */ + ["\uEB2F", "\uEB2F"], /* Private Use */ + ["\uEB30", "\uEB30"], /* Private Use */ + ["\uEB31", "\uEB31"], /* Private Use */ + ["\uEB32", "\uEB32"], /* Private Use */ + ["\uEB33", "\uEB33"], /* Private Use */ + ["\uEB34", "\uEB34"], /* Private Use */ + ["\uEB35", "\uEB35"], /* Private Use */ + ["\uEB36", "\uEB36"], /* Private Use */ + ["\uEB37", "\uEB37"], /* Private Use */ + ["\uEB38", "\uEB38"], /* Private Use */ + ["\uEB39", "\uEB39"], /* Private Use */ + ["\uEB3A", "\uEB3A"], /* Private Use */ + ["\uEB3B", "\uEB3B"], /* Private Use */ + ["\uEB3C", "\uEB3C"], /* Private Use */ + ["\uEB3D", "\uEB3D"], /* Private Use */ + ["\uEB3E", "\uEB3E"], /* Private Use */ + ["\uEB3F", "\uEB3F"], /* Private Use */ + ["\uEB40", "\uEB40"], /* Private Use */ + ["\uEB41", "\uEB41"], /* Private Use */ + ["\uEB42", "\uEB42"], /* Private Use */ + ["\uEB43", "\uEB43"], /* Private Use */ + ["\uEB44", "\uEB44"], /* Private Use */ + ["\uEB45", "\uEB45"], /* Private Use */ + ["\uEB46", "\uEB46"], /* Private Use */ + ["\uEB47", "\uEB47"], /* Private Use */ + ["\uEB48", "\uEB48"], /* Private Use */ + ["\uEB49", "\uEB49"], /* Private Use */ + ["\uEB4A", "\uEB4A"], /* Private Use */ + ["\uEB4B", "\uEB4B"], /* Private Use */ + ["\uEB4C", "\uEB4C"], /* Private Use */ + ["\uEB4D", "\uEB4D"], /* Private Use */ + ["\uEB4E", "\uEB4E"], /* Private Use */ + ["\uEB4F", "\uEB4F"], /* Private Use */ + ["\uEB50", "\uEB50"], /* Private Use */ + ["\uEB51", "\uEB51"], /* Private Use */ + ["\uEB52", "\uEB52"], /* Private Use */ + ["\uEB53", "\uEB53"], /* Private Use */ + ["\uEB54", "\uEB54"], /* Private Use */ + ["\uEB55", "\uEB55"], /* Private Use */ + ["\uEB56", "\uEB56"], /* Private Use */ + ["\uEB57", "\uEB57"], /* Private Use */ + ["\uEB58", "\uEB58"], /* Private Use */ + ["\uEB59", "\uEB59"], /* Private Use */ + ["\uEB5A", "\uEB5A"], /* Private Use */ + ["\uEB5B", "\uEB5B"], /* Private Use */ + ["\uEB5C", "\uEB5C"], /* Private Use */ + ["\uEB5D", "\uEB5D"], /* Private Use */ + ["\uEB5E", "\uEB5E"], /* Private Use */ + ["\uEB5F", "\uEB5F"], /* Private Use */ + ["\uEB60", "\uEB60"], /* Private Use */ + ["\uEB61", "\uEB61"], /* Private Use */ + ["\uEB62", "\uEB62"], /* Private Use */ + ["\uEB63", "\uEB63"], /* Private Use */ + ["\uEB64", "\uEB64"], /* Private Use */ + ["\uEB65", "\uEB65"], /* Private Use */ + ["\uEB66", "\uEB66"], /* Private Use */ + ["\uEB67", "\uEB67"], /* Private Use */ + ["\uEB68", "\uEB68"], /* Private Use */ + ["\uEB69", "\uEB69"], /* Private Use */ + ["\uEB6A", "\uEB6A"], /* Private Use */ + ["\uEB6B", "\uEB6B"], /* Private Use */ + ["\uEB6C", "\uEB6C"], /* Private Use */ + ["\uEB6D", "\uEB6D"], /* Private Use */ + ["\uEB6E", "\uEB6E"], /* Private Use */ + ["\uEB6F", "\uEB6F"], /* Private Use */ + ["\uEB70", "\uEB70"], /* Private Use */ + ["\uEB71", "\uEB71"], /* Private Use */ + ["\uEB72", "\uEB72"], /* Private Use */ + ["\uEB73", "\uEB73"], /* Private Use */ + ["\uEB74", "\uEB74"], /* Private Use */ + ["\uEB75", "\uEB75"], /* Private Use */ + ["\uEB76", "\uEB76"], /* Private Use */ + ["\uEB77", "\uEB77"], /* Private Use */ + ["\uEB78", "\uEB78"], /* Private Use */ + ["\uEB79", "\uEB79"], /* Private Use */ + ["\uEB7A", "\uEB7A"], /* Private Use */ + ["\uEB7B", "\uEB7B"], /* Private Use */ + ["\uEB7C", "\uEB7C"], /* Private Use */ + ["\uEB7D", "\uEB7D"], /* Private Use */ + ["\uEB7E", "\uEB7E"], /* Private Use */ + ["\uEB7F", "\uEB7F"], /* Private Use */ + ["\uEB80", "\uEB80"], /* Private Use */ + ["\uEB81", "\uEB81"], /* Private Use */ + ["\uEB82", "\uEB82"], /* Private Use */ + ["\uEB83", "\uEB83"], /* Private Use */ + ["\uEB84", "\uEB84"], /* Private Use */ + ["\uEB85", "\uEB85"], /* Private Use */ + ["\uEB86", "\uEB86"], /* Private Use */ + ["\uEB87", "\uEB87"], /* Private Use */ + ["\uEB88", "\uEB88"], /* Private Use */ + ["\uEB89", "\uEB89"], /* Private Use */ + ["\uEB8A", "\uEB8A"], /* Private Use */ + ["\uEB8B", "\uEB8B"], /* Private Use */ + ["\uEB8C", "\uEB8C"], /* Private Use */ + ["\uEB8D", "\uEB8D"], /* Private Use */ + ["\uEB8E", "\uEB8E"], /* Private Use */ + ["\uEB8F", "\uEB8F"], /* Private Use */ + ["\uEB90", "\uEB90"], /* Private Use */ + ["\uEB91", "\uEB91"], /* Private Use */ + ["\uEB92", "\uEB92"], /* Private Use */ + ["\uEB93", "\uEB93"], /* Private Use */ + ["\uEB94", "\uEB94"], /* Private Use */ + ["\uEB95", "\uEB95"], /* Private Use */ + ["\uEB96", "\uEB96"], /* Private Use */ + ["\uEB97", "\uEB97"], /* Private Use */ + ["\uEB98", "\uEB98"], /* Private Use */ + ["\uEB99", "\uEB99"], /* Private Use */ + ["\uEB9A", "\uEB9A"], /* Private Use */ + ["\uEB9B", "\uEB9B"], /* Private Use */ + ["\uEB9C", "\uEB9C"], /* Private Use */ + ["\uEB9D", "\uEB9D"], /* Private Use */ + ["\uEB9E", "\uEB9E"], /* Private Use */ + ["\uEB9F", "\uEB9F"], /* Private Use */ + ["\uEBA0", "\uEBA0"], /* Private Use */ + ["\uEBA1", "\uEBA1"], /* Private Use */ + ["\uEBA2", "\uEBA2"], /* Private Use */ + ["\uEBA3", "\uEBA3"], /* Private Use */ + ["\uEBA4", "\uEBA4"], /* Private Use */ + ["\uEBA5", "\uEBA5"], /* Private Use */ + ["\uEBA6", "\uEBA6"], /* Private Use */ + ["\uEBA7", "\uEBA7"], /* Private Use */ + ["\uEBA8", "\uEBA8"], /* Private Use */ + ["\uEBA9", "\uEBA9"], /* Private Use */ + ["\uEBAA", "\uEBAA"], /* Private Use */ + ["\uEBAB", "\uEBAB"], /* Private Use */ + ["\uEBAC", "\uEBAC"], /* Private Use */ + ["\uEBAD", "\uEBAD"], /* Private Use */ + ["\uEBAE", "\uEBAE"], /* Private Use */ + ["\uEBAF", "\uEBAF"], /* Private Use */ + ["\uEBB0", "\uEBB0"], /* Private Use */ + ["\uEBB1", "\uEBB1"], /* Private Use */ + ["\uEBB2", "\uEBB2"], /* Private Use */ + ["\uEBB3", "\uEBB3"], /* Private Use */ + ["\uEBB4", "\uEBB4"], /* Private Use */ + ["\uEBB5", "\uEBB5"], /* Private Use */ + ["\uEBB6", "\uEBB6"], /* Private Use */ + ["\uEBB7", "\uEBB7"], /* Private Use */ + ["\uEBB8", "\uEBB8"], /* Private Use */ + ["\uEBB9", "\uEBB9"], /* Private Use */ + ["\uEBBA", "\uEBBA"], /* Private Use */ + ["\uEBBB", "\uEBBB"], /* Private Use */ + ["\uEBBC", "\uEBBC"], /* Private Use */ + ["\uEBBD", "\uEBBD"], /* Private Use */ + ["\uEBBE", "\uEBBE"], /* Private Use */ + ["\uEBBF", "\uEBBF"], /* Private Use */ + ["\uEBC0", "\uEBC0"], /* Private Use */ + ["\uEBC1", "\uEBC1"], /* Private Use */ + ["\uEBC2", "\uEBC2"], /* Private Use */ + ["\uEBC3", "\uEBC3"], /* Private Use */ + ["\uEBC4", "\uEBC4"], /* Private Use */ + ["\uEBC5", "\uEBC5"], /* Private Use */ + ["\uEBC6", "\uEBC6"], /* Private Use */ + ["\uEBC7", "\uEBC7"], /* Private Use */ + ["\uEBC8", "\uEBC8"], /* Private Use */ + ["\uEBC9", "\uEBC9"], /* Private Use */ + ["\uEBCA", "\uEBCA"], /* Private Use */ + ["\uEBCB", "\uEBCB"], /* Private Use */ + ["\uEBCC", "\uEBCC"], /* Private Use */ + ["\uEBCD", "\uEBCD"], /* Private Use */ + ["\uEBCE", "\uEBCE"], /* Private Use */ + ["\uEBCF", "\uEBCF"], /* Private Use */ + ["\uEBD0", "\uEBD0"], /* Private Use */ + ["\uEBD1", "\uEBD1"], /* Private Use */ + ["\uEBD2", "\uEBD2"], /* Private Use */ + ["\uEBD3", "\uEBD3"], /* Private Use */ + ["\uEBD4", "\uEBD4"], /* Private Use */ + ["\uEBD5", "\uEBD5"], /* Private Use */ + ["\uEBD6", "\uEBD6"], /* Private Use */ + ["\uEBD7", "\uEBD7"], /* Private Use */ + ["\uEBD8", "\uEBD8"], /* Private Use */ + ["\uEBD9", "\uEBD9"], /* Private Use */ + ["\uEBDA", "\uEBDA"], /* Private Use */ + ["\uEBDB", "\uEBDB"], /* Private Use */ + ["\uEBDC", "\uEBDC"], /* Private Use */ + ["\uEBDD", "\uEBDD"], /* Private Use */ + ["\uEBDE", "\uEBDE"], /* Private Use */ + ["\uEBDF", "\uEBDF"], /* Private Use */ + ["\uEBE0", "\uEBE0"], /* Private Use */ + ["\uEBE1", "\uEBE1"], /* Private Use */ + ["\uEBE2", "\uEBE2"], /* Private Use */ + ["\uEBE3", "\uEBE3"], /* Private Use */ + ["\uEBE4", "\uEBE4"], /* Private Use */ + ["\uEBE5", "\uEBE5"], /* Private Use */ + ["\uEBE6", "\uEBE6"], /* Private Use */ + ["\uEBE7", "\uEBE7"], /* Private Use */ + ["\uEBE8", "\uEBE8"], /* Private Use */ + ["\uEBE9", "\uEBE9"], /* Private Use */ + ["\uEBEA", "\uEBEA"], /* Private Use */ + ["\uEBEB", "\uEBEB"], /* Private Use */ + ["\uEBEC", "\uEBEC"], /* Private Use */ + ["\uEBED", "\uEBED"], /* Private Use */ + ["\uEBEE", "\uEBEE"], /* Private Use */ + ["\uEBEF", "\uEBEF"], /* Private Use */ + ["\uEBF0", "\uEBF0"], /* Private Use */ + ["\uEBF1", "\uEBF1"], /* Private Use */ + ["\uEBF2", "\uEBF2"], /* Private Use */ + ["\uEBF3", "\uEBF3"], /* Private Use */ + ["\uEBF4", "\uEBF4"], /* Private Use */ + ["\uEBF5", "\uEBF5"], /* Private Use */ + ["\uEBF6", "\uEBF6"], /* Private Use */ + ["\uEBF7", "\uEBF7"], /* Private Use */ + ["\uEBF8", "\uEBF8"], /* Private Use */ + ["\uEBF9", "\uEBF9"], /* Private Use */ + ["\uEBFA", "\uEBFA"], /* Private Use */ + ["\uEBFB", "\uEBFB"], /* Private Use */ + ["\uEBFC", "\uEBFC"], /* Private Use */ + ["\uEBFD", "\uEBFD"], /* Private Use */ + ["\uEBFE", "\uEBFE"], /* Private Use */ + ["\uEBFF", "\uEBFF"], /* Private Use */ + ["\uEC00", "\uEC00"], /* Private Use */ + ["\uEC01", "\uEC01"], /* Private Use */ + ["\uEC02", "\uEC02"], /* Private Use */ + ["\uEC03", "\uEC03"], /* Private Use */ + ["\uEC04", "\uEC04"], /* Private Use */ + ["\uEC05", "\uEC05"], /* Private Use */ + ["\uEC06", "\uEC06"], /* Private Use */ + ["\uEC07", "\uEC07"], /* Private Use */ + ["\uEC08", "\uEC08"], /* Private Use */ + ["\uEC09", "\uEC09"], /* Private Use */ + ["\uEC0A", "\uEC0A"], /* Private Use */ + ["\uEC0B", "\uEC0B"], /* Private Use */ + ["\uEC0C", "\uEC0C"], /* Private Use */ + ["\uEC0D", "\uEC0D"], /* Private Use */ + ["\uEC0E", "\uEC0E"], /* Private Use */ + ["\uEC0F", "\uEC0F"], /* Private Use */ + ["\uEC10", "\uEC10"], /* Private Use */ + ["\uEC11", "\uEC11"], /* Private Use */ + ["\uEC12", "\uEC12"], /* Private Use */ + ["\uEC13", "\uEC13"], /* Private Use */ + ["\uEC14", "\uEC14"], /* Private Use */ + ["\uEC15", "\uEC15"], /* Private Use */ + ["\uEC16", "\uEC16"], /* Private Use */ + ["\uEC17", "\uEC17"], /* Private Use */ + ["\uEC18", "\uEC18"], /* Private Use */ + ["\uEC19", "\uEC19"], /* Private Use */ + ["\uEC1A", "\uEC1A"], /* Private Use */ + ["\uEC1B", "\uEC1B"], /* Private Use */ + ["\uEC1C", "\uEC1C"], /* Private Use */ + ["\uEC1D", "\uEC1D"], /* Private Use */ + ["\uEC1E", "\uEC1E"], /* Private Use */ + ["\uEC1F", "\uEC1F"], /* Private Use */ + ["\uEC20", "\uEC20"], /* Private Use */ + ["\uEC21", "\uEC21"], /* Private Use */ + ["\uEC22", "\uEC22"], /* Private Use */ + ["\uEC23", "\uEC23"], /* Private Use */ + ["\uEC24", "\uEC24"], /* Private Use */ + ["\uEC25", "\uEC25"], /* Private Use */ + ["\uEC26", "\uEC26"], /* Private Use */ + ["\uEC27", "\uEC27"], /* Private Use */ + ["\uEC28", "\uEC28"], /* Private Use */ + ["\uEC29", "\uEC29"], /* Private Use */ + ["\uEC2A", "\uEC2A"], /* Private Use */ + ["\uEC2B", "\uEC2B"], /* Private Use */ + ["\uEC2C", "\uEC2C"], /* Private Use */ + ["\uEC2D", "\uEC2D"], /* Private Use */ + ["\uEC2E", "\uEC2E"], /* Private Use */ + ["\uEC2F", "\uEC2F"], /* Private Use */ + ["\uEC30", "\uEC30"], /* Private Use */ + ["\uEC31", "\uEC31"], /* Private Use */ + ["\uEC32", "\uEC32"], /* Private Use */ + ["\uEC33", "\uEC33"], /* Private Use */ + ["\uEC34", "\uEC34"], /* Private Use */ + ["\uEC35", "\uEC35"], /* Private Use */ + ["\uEC36", "\uEC36"], /* Private Use */ + ["\uEC37", "\uEC37"], /* Private Use */ + ["\uEC38", "\uEC38"], /* Private Use */ + ["\uEC39", "\uEC39"], /* Private Use */ + ["\uEC3A", "\uEC3A"], /* Private Use */ + ["\uEC3B", "\uEC3B"], /* Private Use */ + ["\uEC3C", "\uEC3C"], /* Private Use */ + ["\uEC3D", "\uEC3D"], /* Private Use */ + ["\uEC3E", "\uEC3E"], /* Private Use */ + ["\uEC3F", "\uEC3F"], /* Private Use */ + ["\uEC40", "\uEC40"], /* Private Use */ + ["\uEC41", "\uEC41"], /* Private Use */ + ["\uEC42", "\uEC42"], /* Private Use */ + ["\uEC43", "\uEC43"], /* Private Use */ + ["\uEC44", "\uEC44"], /* Private Use */ + ["\uEC45", "\uEC45"], /* Private Use */ + ["\uEC46", "\uEC46"], /* Private Use */ + ["\uEC47", "\uEC47"], /* Private Use */ + ["\uEC48", "\uEC48"], /* Private Use */ + ["\uEC49", "\uEC49"], /* Private Use */ + ["\uEC4A", "\uEC4A"], /* Private Use */ + ["\uEC4B", "\uEC4B"], /* Private Use */ + ["\uEC4C", "\uEC4C"], /* Private Use */ + ["\uEC4D", "\uEC4D"], /* Private Use */ + ["\uEC4E", "\uEC4E"], /* Private Use */ + ["\uEC4F", "\uEC4F"], /* Private Use */ + ["\uEC50", "\uEC50"], /* Private Use */ + ["\uEC51", "\uEC51"], /* Private Use */ + ["\uEC52", "\uEC52"], /* Private Use */ + ["\uEC53", "\uEC53"], /* Private Use */ + ["\uEC54", "\uEC54"], /* Private Use */ + ["\uEC55", "\uEC55"], /* Private Use */ + ["\uEC56", "\uEC56"], /* Private Use */ + ["\uEC57", "\uEC57"], /* Private Use */ + ["\uEC58", "\uEC58"], /* Private Use */ + ["\uEC59", "\uEC59"], /* Private Use */ + ["\uEC5A", "\uEC5A"], /* Private Use */ + ["\uEC5B", "\uEC5B"], /* Private Use */ + ["\uEC5C", "\uEC5C"], /* Private Use */ + ["\uEC5D", "\uEC5D"], /* Private Use */ + ["\uEC5E", "\uEC5E"], /* Private Use */ + ["\uEC5F", "\uEC5F"], /* Private Use */ + ["\uEC60", "\uEC60"], /* Private Use */ + ["\uEC61", "\uEC61"], /* Private Use */ + ["\uEC62", "\uEC62"], /* Private Use */ + ["\uEC63", "\uEC63"], /* Private Use */ + ["\uEC64", "\uEC64"], /* Private Use */ + ["\uEC65", "\uEC65"], /* Private Use */ + ["\uEC66", "\uEC66"], /* Private Use */ + ["\uEC67", "\uEC67"], /* Private Use */ + ["\uEC68", "\uEC68"], /* Private Use */ + ["\uEC69", "\uEC69"], /* Private Use */ + ["\uEC6A", "\uEC6A"], /* Private Use */ + ["\uEC6B", "\uEC6B"], /* Private Use */ + ["\uEC6C", "\uEC6C"], /* Private Use */ + ["\uEC6D", "\uEC6D"], /* Private Use */ + ["\uEC6E", "\uEC6E"], /* Private Use */ + ["\uEC6F", "\uEC6F"], /* Private Use */ + ["\uEC70", "\uEC70"], /* Private Use */ + ["\uEC71", "\uEC71"], /* Private Use */ + ["\uEC72", "\uEC72"], /* Private Use */ + ["\uEC73", "\uEC73"], /* Private Use */ + ["\uEC74", "\uEC74"], /* Private Use */ + ["\uEC75", "\uEC75"], /* Private Use */ + ["\uEC76", "\uEC76"], /* Private Use */ + ["\uEC77", "\uEC77"], /* Private Use */ + ["\uEC78", "\uEC78"], /* Private Use */ + ["\uEC79", "\uEC79"], /* Private Use */ + ["\uEC7A", "\uEC7A"], /* Private Use */ + ["\uEC7B", "\uEC7B"], /* Private Use */ + ["\uEC7C", "\uEC7C"], /* Private Use */ + ["\uEC7D", "\uEC7D"], /* Private Use */ + ["\uEC7E", "\uEC7E"], /* Private Use */ + ["\uEC7F", "\uEC7F"], /* Private Use */ + ["\uEC80", "\uEC80"], /* Private Use */ + ["\uEC81", "\uEC81"], /* Private Use */ + ["\uEC82", "\uEC82"], /* Private Use */ + ["\uEC83", "\uEC83"], /* Private Use */ + ["\uEC84", "\uEC84"], /* Private Use */ + ["\uEC85", "\uEC85"], /* Private Use */ + ["\uEC86", "\uEC86"], /* Private Use */ + ["\uEC87", "\uEC87"], /* Private Use */ + ["\uEC88", "\uEC88"], /* Private Use */ + ["\uEC89", "\uEC89"], /* Private Use */ + ["\uEC8A", "\uEC8A"], /* Private Use */ + ["\uEC8B", "\uEC8B"], /* Private Use */ + ["\uEC8C", "\uEC8C"], /* Private Use */ + ["\uEC8D", "\uEC8D"], /* Private Use */ + ["\uEC8E", "\uEC8E"], /* Private Use */ + ["\uEC8F", "\uEC8F"], /* Private Use */ + ["\uEC90", "\uEC90"], /* Private Use */ + ["\uEC91", "\uEC91"], /* Private Use */ + ["\uEC92", "\uEC92"], /* Private Use */ + ["\uEC93", "\uEC93"], /* Private Use */ + ["\uEC94", "\uEC94"], /* Private Use */ + ["\uEC95", "\uEC95"], /* Private Use */ + ["\uEC96", "\uEC96"], /* Private Use */ + ["\uEC97", "\uEC97"], /* Private Use */ + ["\uEC98", "\uEC98"], /* Private Use */ + ["\uEC99", "\uEC99"], /* Private Use */ + ["\uEC9A", "\uEC9A"], /* Private Use */ + ["\uEC9B", "\uEC9B"], /* Private Use */ + ["\uEC9C", "\uEC9C"], /* Private Use */ + ["\uEC9D", "\uEC9D"], /* Private Use */ + ["\uEC9E", "\uEC9E"], /* Private Use */ + ["\uEC9F", "\uEC9F"], /* Private Use */ + ["\uECA0", "\uECA0"], /* Private Use */ + ["\uECA1", "\uECA1"], /* Private Use */ + ["\uECA2", "\uECA2"], /* Private Use */ + ["\uECA3", "\uECA3"], /* Private Use */ + ["\uECA4", "\uECA4"], /* Private Use */ + ["\uECA5", "\uECA5"], /* Private Use */ + ["\uECA6", "\uECA6"], /* Private Use */ + ["\uECA7", "\uECA7"], /* Private Use */ + ["\uECA8", "\uECA8"], /* Private Use */ + ["\uECA9", "\uECA9"], /* Private Use */ + ["\uECAA", "\uECAA"], /* Private Use */ + ["\uECAB", "\uECAB"], /* Private Use */ + ["\uECAC", "\uECAC"], /* Private Use */ + ["\uECAD", "\uECAD"], /* Private Use */ + ["\uECAE", "\uECAE"], /* Private Use */ + ["\uECAF", "\uECAF"], /* Private Use */ + ["\uECB0", "\uECB0"], /* Private Use */ + ["\uECB1", "\uECB1"], /* Private Use */ + ["\uECB2", "\uECB2"], /* Private Use */ + ["\uECB3", "\uECB3"], /* Private Use */ + ["\uECB4", "\uECB4"], /* Private Use */ + ["\uECB5", "\uECB5"], /* Private Use */ + ["\uECB6", "\uECB6"], /* Private Use */ + ["\uECB7", "\uECB7"], /* Private Use */ + ["\uECB8", "\uECB8"], /* Private Use */ + ["\uECB9", "\uECB9"], /* Private Use */ + ["\uECBA", "\uECBA"], /* Private Use */ + ["\uECBB", "\uECBB"], /* Private Use */ + ["\uECBC", "\uECBC"], /* Private Use */ + ["\uECBD", "\uECBD"], /* Private Use */ + ["\uECBE", "\uECBE"], /* Private Use */ + ["\uECBF", "\uECBF"], /* Private Use */ + ["\uECC0", "\uECC0"], /* Private Use */ + ["\uECC1", "\uECC1"], /* Private Use */ + ["\uECC2", "\uECC2"], /* Private Use */ + ["\uECC3", "\uECC3"], /* Private Use */ + ["\uECC4", "\uECC4"], /* Private Use */ + ["\uECC5", "\uECC5"], /* Private Use */ + ["\uECC6", "\uECC6"], /* Private Use */ + ["\uECC7", "\uECC7"], /* Private Use */ + ["\uECC8", "\uECC8"], /* Private Use */ + ["\uECC9", "\uECC9"], /* Private Use */ + ["\uECCA", "\uECCA"], /* Private Use */ + ["\uECCB", "\uECCB"], /* Private Use */ + ["\uECCC", "\uECCC"], /* Private Use */ + ["\uECCD", "\uECCD"], /* Private Use */ + ["\uECCE", "\uECCE"], /* Private Use */ + ["\uECCF", "\uECCF"], /* Private Use */ + ["\uECD0", "\uECD0"], /* Private Use */ + ["\uECD1", "\uECD1"], /* Private Use */ + ["\uECD2", "\uECD2"], /* Private Use */ + ["\uECD3", "\uECD3"], /* Private Use */ + ["\uECD4", "\uECD4"], /* Private Use */ + ["\uECD5", "\uECD5"], /* Private Use */ + ["\uECD6", "\uECD6"], /* Private Use */ + ["\uECD7", "\uECD7"], /* Private Use */ + ["\uECD8", "\uECD8"], /* Private Use */ + ["\uECD9", "\uECD9"], /* Private Use */ + ["\uECDA", "\uECDA"], /* Private Use */ + ["\uECDB", "\uECDB"], /* Private Use */ + ["\uECDC", "\uECDC"], /* Private Use */ + ["\uECDD", "\uECDD"], /* Private Use */ + ["\uECDE", "\uECDE"], /* Private Use */ + ["\uECDF", "\uECDF"], /* Private Use */ + ["\uECE0", "\uECE0"], /* Private Use */ + ["\uECE1", "\uECE1"], /* Private Use */ + ["\uECE2", "\uECE2"], /* Private Use */ + ["\uECE3", "\uECE3"], /* Private Use */ + ["\uECE4", "\uECE4"], /* Private Use */ + ["\uECE5", "\uECE5"], /* Private Use */ + ["\uECE6", "\uECE6"], /* Private Use */ + ["\uECE7", "\uECE7"], /* Private Use */ + ["\uECE8", "\uECE8"], /* Private Use */ + ["\uECE9", "\uECE9"], /* Private Use */ + ["\uECEA", "\uECEA"], /* Private Use */ + ["\uECEB", "\uECEB"], /* Private Use */ + ["\uECEC", "\uECEC"], /* Private Use */ + ["\uECED", "\uECED"], /* Private Use */ + ["\uECEE", "\uECEE"], /* Private Use */ + ["\uECEF", "\uECEF"], /* Private Use */ + ["\uECF0", "\uECF0"], /* Private Use */ + ["\uECF1", "\uECF1"], /* Private Use */ + ["\uECF2", "\uECF2"], /* Private Use */ + ["\uECF3", "\uECF3"], /* Private Use */ + ["\uECF4", "\uECF4"], /* Private Use */ + ["\uECF5", "\uECF5"], /* Private Use */ + ["\uECF6", "\uECF6"], /* Private Use */ + ["\uECF7", "\uECF7"], /* Private Use */ + ["\uECF8", "\uECF8"], /* Private Use */ + ["\uECF9", "\uECF9"], /* Private Use */ + ["\uECFA", "\uECFA"], /* Private Use */ + ["\uECFB", "\uECFB"], /* Private Use */ + ["\uECFC", "\uECFC"], /* Private Use */ + ["\uECFD", "\uECFD"], /* Private Use */ + ["\uECFE", "\uECFE"], /* Private Use */ + ["\uECFF", "\uECFF"], /* Private Use */ + ["\uED00", "\uED00"], /* Private Use */ + ["\uED01", "\uED01"], /* Private Use */ + ["\uED02", "\uED02"], /* Private Use */ + ["\uED03", "\uED03"], /* Private Use */ + ["\uED04", "\uED04"], /* Private Use */ + ["\uED05", "\uED05"], /* Private Use */ + ["\uED06", "\uED06"], /* Private Use */ + ["\uED07", "\uED07"], /* Private Use */ + ["\uED08", "\uED08"], /* Private Use */ + ["\uED09", "\uED09"], /* Private Use */ + ["\uED0A", "\uED0A"], /* Private Use */ + ["\uED0B", "\uED0B"], /* Private Use */ + ["\uED0C", "\uED0C"], /* Private Use */ + ["\uED0D", "\uED0D"], /* Private Use */ + ["\uED0E", "\uED0E"], /* Private Use */ + ["\uED0F", "\uED0F"], /* Private Use */ + ["\uED10", "\uED10"], /* Private Use */ + ["\uED11", "\uED11"], /* Private Use */ + ["\uED12", "\uED12"], /* Private Use */ + ["\uED13", "\uED13"], /* Private Use */ + ["\uED14", "\uED14"], /* Private Use */ + ["\uED15", "\uED15"], /* Private Use */ + ["\uED16", "\uED16"], /* Private Use */ + ["\uED17", "\uED17"], /* Private Use */ + ["\uED18", "\uED18"], /* Private Use */ + ["\uED19", "\uED19"], /* Private Use */ + ["\uED1A", "\uED1A"], /* Private Use */ + ["\uED1B", "\uED1B"], /* Private Use */ + ["\uED1C", "\uED1C"], /* Private Use */ + ["\uED1D", "\uED1D"], /* Private Use */ + ["\uED1E", "\uED1E"], /* Private Use */ + ["\uED1F", "\uED1F"], /* Private Use */ + ["\uED20", "\uED20"], /* Private Use */ + ["\uED21", "\uED21"], /* Private Use */ + ["\uED22", "\uED22"], /* Private Use */ + ["\uED23", "\uED23"], /* Private Use */ + ["\uED24", "\uED24"], /* Private Use */ + ["\uED25", "\uED25"], /* Private Use */ + ["\uED26", "\uED26"], /* Private Use */ + ["\uED27", "\uED27"], /* Private Use */ + ["\uED28", "\uED28"], /* Private Use */ + ["\uED29", "\uED29"], /* Private Use */ + ["\uED2A", "\uED2A"], /* Private Use */ + ["\uED2B", "\uED2B"], /* Private Use */ + ["\uED2C", "\uED2C"], /* Private Use */ + ["\uED2D", "\uED2D"], /* Private Use */ + ["\uED2E", "\uED2E"], /* Private Use */ + ["\uED2F", "\uED2F"], /* Private Use */ + ["\uED30", "\uED30"], /* Private Use */ + ["\uED31", "\uED31"], /* Private Use */ + ["\uED32", "\uED32"], /* Private Use */ + ["\uED33", "\uED33"], /* Private Use */ + ["\uED34", "\uED34"], /* Private Use */ + ["\uED35", "\uED35"], /* Private Use */ + ["\uED36", "\uED36"], /* Private Use */ + ["\uED37", "\uED37"], /* Private Use */ + ["\uED38", "\uED38"], /* Private Use */ + ["\uED39", "\uED39"], /* Private Use */ + ["\uED3A", "\uED3A"], /* Private Use */ + ["\uED3B", "\uED3B"], /* Private Use */ + ["\uED3C", "\uED3C"], /* Private Use */ + ["\uED3D", "\uED3D"], /* Private Use */ + ["\uED3E", "\uED3E"], /* Private Use */ + ["\uED3F", "\uED3F"], /* Private Use */ + ["\uED40", "\uED40"], /* Private Use */ + ["\uED41", "\uED41"], /* Private Use */ + ["\uED42", "\uED42"], /* Private Use */ + ["\uED43", "\uED43"], /* Private Use */ + ["\uED44", "\uED44"], /* Private Use */ + ["\uED45", "\uED45"], /* Private Use */ + ["\uED46", "\uED46"], /* Private Use */ + ["\uED47", "\uED47"], /* Private Use */ + ["\uED48", "\uED48"], /* Private Use */ + ["\uED49", "\uED49"], /* Private Use */ + ["\uED4A", "\uED4A"], /* Private Use */ + ["\uED4B", "\uED4B"], /* Private Use */ + ["\uED4C", "\uED4C"], /* Private Use */ + ["\uED4D", "\uED4D"], /* Private Use */ + ["\uED4E", "\uED4E"], /* Private Use */ + ["\uED4F", "\uED4F"], /* Private Use */ + ["\uED50", "\uED50"], /* Private Use */ + ["\uED51", "\uED51"], /* Private Use */ + ["\uED52", "\uED52"], /* Private Use */ + ["\uED53", "\uED53"], /* Private Use */ + ["\uED54", "\uED54"], /* Private Use */ + ["\uED55", "\uED55"], /* Private Use */ + ["\uED56", "\uED56"], /* Private Use */ + ["\uED57", "\uED57"], /* Private Use */ + ["\uED58", "\uED58"], /* Private Use */ + ["\uED59", "\uED59"], /* Private Use */ + ["\uED5A", "\uED5A"], /* Private Use */ + ["\uED5B", "\uED5B"], /* Private Use */ + ["\uED5C", "\uED5C"], /* Private Use */ + ["\uED5D", "\uED5D"], /* Private Use */ + ["\uED5E", "\uED5E"], /* Private Use */ + ["\uED5F", "\uED5F"], /* Private Use */ + ["\uED60", "\uED60"], /* Private Use */ + ["\uED61", "\uED61"], /* Private Use */ + ["\uED62", "\uED62"], /* Private Use */ + ["\uED63", "\uED63"], /* Private Use */ + ["\uED64", "\uED64"], /* Private Use */ + ["\uED65", "\uED65"], /* Private Use */ + ["\uED66", "\uED66"], /* Private Use */ + ["\uED67", "\uED67"], /* Private Use */ + ["\uED68", "\uED68"], /* Private Use */ + ["\uED69", "\uED69"], /* Private Use */ + ["\uED6A", "\uED6A"], /* Private Use */ + ["\uED6B", "\uED6B"], /* Private Use */ + ["\uED6C", "\uED6C"], /* Private Use */ + ["\uED6D", "\uED6D"], /* Private Use */ + ["\uED6E", "\uED6E"], /* Private Use */ + ["\uED6F", "\uED6F"], /* Private Use */ + ["\uED70", "\uED70"], /* Private Use */ + ["\uED71", "\uED71"], /* Private Use */ + ["\uED72", "\uED72"], /* Private Use */ + ["\uED73", "\uED73"], /* Private Use */ + ["\uED74", "\uED74"], /* Private Use */ + ["\uED75", "\uED75"], /* Private Use */ + ["\uED76", "\uED76"], /* Private Use */ + ["\uED77", "\uED77"], /* Private Use */ + ["\uED78", "\uED78"], /* Private Use */ + ["\uED79", "\uED79"], /* Private Use */ + ["\uED7A", "\uED7A"], /* Private Use */ + ["\uED7B", "\uED7B"], /* Private Use */ + ["\uED7C", "\uED7C"], /* Private Use */ + ["\uED7D", "\uED7D"], /* Private Use */ + ["\uED7E", "\uED7E"], /* Private Use */ + ["\uED7F", "\uED7F"], /* Private Use */ + ["\uED80", "\uED80"], /* Private Use */ + ["\uED81", "\uED81"], /* Private Use */ + ["\uED82", "\uED82"], /* Private Use */ + ["\uED83", "\uED83"], /* Private Use */ + ["\uED84", "\uED84"], /* Private Use */ + ["\uED85", "\uED85"], /* Private Use */ + ["\uED86", "\uED86"], /* Private Use */ + ["\uED87", "\uED87"], /* Private Use */ + ["\uED88", "\uED88"], /* Private Use */ + ["\uED89", "\uED89"], /* Private Use */ + ["\uED8A", "\uED8A"], /* Private Use */ + ["\uED8B", "\uED8B"], /* Private Use */ + ["\uED8C", "\uED8C"], /* Private Use */ + ["\uED8D", "\uED8D"], /* Private Use */ + ["\uED8E", "\uED8E"], /* Private Use */ + ["\uED8F", "\uED8F"], /* Private Use */ + ["\uED90", "\uED90"], /* Private Use */ + ["\uED91", "\uED91"], /* Private Use */ + ["\uED92", "\uED92"], /* Private Use */ + ["\uED93", "\uED93"], /* Private Use */ + ["\uED94", "\uED94"], /* Private Use */ + ["\uED95", "\uED95"], /* Private Use */ + ["\uED96", "\uED96"], /* Private Use */ + ["\uED97", "\uED97"], /* Private Use */ + ["\uED98", "\uED98"], /* Private Use */ + ["\uED99", "\uED99"], /* Private Use */ + ["\uED9A", "\uED9A"], /* Private Use */ + ["\uED9B", "\uED9B"], /* Private Use */ + ["\uED9C", "\uED9C"], /* Private Use */ + ["\uED9D", "\uED9D"], /* Private Use */ + ["\uED9E", "\uED9E"], /* Private Use */ + ["\uED9F", "\uED9F"], /* Private Use */ + ["\uEDA0", "\uEDA0"], /* Private Use */ + ["\uEDA1", "\uEDA1"], /* Private Use */ + ["\uEDA2", "\uEDA2"], /* Private Use */ + ["\uEDA3", "\uEDA3"], /* Private Use */ + ["\uEDA4", "\uEDA4"], /* Private Use */ + ["\uEDA5", "\uEDA5"], /* Private Use */ + ["\uEDA6", "\uEDA6"], /* Private Use */ + ["\uEDA7", "\uEDA7"], /* Private Use */ + ["\uEDA8", "\uEDA8"], /* Private Use */ + ["\uEDA9", "\uEDA9"], /* Private Use */ + ["\uEDAA", "\uEDAA"], /* Private Use */ + ["\uEDAB", "\uEDAB"], /* Private Use */ + ["\uEDAC", "\uEDAC"], /* Private Use */ + ["\uEDAD", "\uEDAD"], /* Private Use */ + ["\uEDAE", "\uEDAE"], /* Private Use */ + ["\uEDAF", "\uEDAF"], /* Private Use */ + ["\uEDB0", "\uEDB0"], /* Private Use */ + ["\uEDB1", "\uEDB1"], /* Private Use */ + ["\uEDB2", "\uEDB2"], /* Private Use */ + ["\uEDB3", "\uEDB3"], /* Private Use */ + ["\uEDB4", "\uEDB4"], /* Private Use */ + ["\uEDB5", "\uEDB5"], /* Private Use */ + ["\uEDB6", "\uEDB6"], /* Private Use */ + ["\uEDB7", "\uEDB7"], /* Private Use */ + ["\uEDB8", "\uEDB8"], /* Private Use */ + ["\uEDB9", "\uEDB9"], /* Private Use */ + ["\uEDBA", "\uEDBA"], /* Private Use */ + ["\uEDBB", "\uEDBB"], /* Private Use */ + ["\uEDBC", "\uEDBC"], /* Private Use */ + ["\uEDBD", "\uEDBD"], /* Private Use */ + ["\uEDBE", "\uEDBE"], /* Private Use */ + ["\uEDBF", "\uEDBF"], /* Private Use */ + ["\uEDC0", "\uEDC0"], /* Private Use */ + ["\uEDC1", "\uEDC1"], /* Private Use */ + ["\uEDC2", "\uEDC2"], /* Private Use */ + ["\uEDC3", "\uEDC3"], /* Private Use */ + ["\uEDC4", "\uEDC4"], /* Private Use */ + ["\uEDC5", "\uEDC5"], /* Private Use */ + ["\uEDC6", "\uEDC6"], /* Private Use */ + ["\uEDC7", "\uEDC7"], /* Private Use */ + ["\uEDC8", "\uEDC8"], /* Private Use */ + ["\uEDC9", "\uEDC9"], /* Private Use */ + ["\uEDCA", "\uEDCA"], /* Private Use */ + ["\uEDCB", "\uEDCB"], /* Private Use */ + ["\uEDCC", "\uEDCC"], /* Private Use */ + ["\uEDCD", "\uEDCD"], /* Private Use */ + ["\uEDCE", "\uEDCE"], /* Private Use */ + ["\uEDCF", "\uEDCF"], /* Private Use */ + ["\uEDD0", "\uEDD0"], /* Private Use */ + ["\uEDD1", "\uEDD1"], /* Private Use */ + ["\uEDD2", "\uEDD2"], /* Private Use */ + ["\uEDD3", "\uEDD3"], /* Private Use */ + ["\uEDD4", "\uEDD4"], /* Private Use */ + ["\uEDD5", "\uEDD5"], /* Private Use */ + ["\uEDD6", "\uEDD6"], /* Private Use */ + ["\uEDD7", "\uEDD7"], /* Private Use */ + ["\uEDD8", "\uEDD8"], /* Private Use */ + ["\uEDD9", "\uEDD9"], /* Private Use */ + ["\uEDDA", "\uEDDA"], /* Private Use */ + ["\uEDDB", "\uEDDB"], /* Private Use */ + ["\uEDDC", "\uEDDC"], /* Private Use */ + ["\uEDDD", "\uEDDD"], /* Private Use */ + ["\uEDDE", "\uEDDE"], /* Private Use */ + ["\uEDDF", "\uEDDF"], /* Private Use */ + ["\uEDE0", "\uEDE0"], /* Private Use */ + ["\uEDE1", "\uEDE1"], /* Private Use */ + ["\uEDE2", "\uEDE2"], /* Private Use */ + ["\uEDE3", "\uEDE3"], /* Private Use */ + ["\uEDE4", "\uEDE4"], /* Private Use */ + ["\uEDE5", "\uEDE5"], /* Private Use */ + ["\uEDE6", "\uEDE6"], /* Private Use */ + ["\uEDE7", "\uEDE7"], /* Private Use */ + ["\uEDE8", "\uEDE8"], /* Private Use */ + ["\uEDE9", "\uEDE9"], /* Private Use */ + ["\uEDEA", "\uEDEA"], /* Private Use */ + ["\uEDEB", "\uEDEB"], /* Private Use */ + ["\uEDEC", "\uEDEC"], /* Private Use */ + ["\uEDED", "\uEDED"], /* Private Use */ + ["\uEDEE", "\uEDEE"], /* Private Use */ + ["\uEDEF", "\uEDEF"], /* Private Use */ + ["\uEDF0", "\uEDF0"], /* Private Use */ + ["\uEDF1", "\uEDF1"], /* Private Use */ + ["\uEDF2", "\uEDF2"], /* Private Use */ + ["\uEDF3", "\uEDF3"], /* Private Use */ + ["\uEDF4", "\uEDF4"], /* Private Use */ + ["\uEDF5", "\uEDF5"], /* Private Use */ + ["\uEDF6", "\uEDF6"], /* Private Use */ + ["\uEDF7", "\uEDF7"], /* Private Use */ + ["\uEDF8", "\uEDF8"], /* Private Use */ + ["\uEDF9", "\uEDF9"], /* Private Use */ + ["\uEDFA", "\uEDFA"], /* Private Use */ + ["\uEDFB", "\uEDFB"], /* Private Use */ + ["\uEDFC", "\uEDFC"], /* Private Use */ + ["\uEDFD", "\uEDFD"], /* Private Use */ + ["\uEDFE", "\uEDFE"], /* Private Use */ + ["\uEDFF", "\uEDFF"], /* Private Use */ + ["\uEE00", "\uEE00"], /* Private Use */ + ["\uEE01", "\uEE01"], /* Private Use */ + ["\uEE02", "\uEE02"], /* Private Use */ + ["\uEE03", "\uEE03"], /* Private Use */ + ["\uEE04", "\uEE04"], /* Private Use */ + ["\uEE05", "\uEE05"], /* Private Use */ + ["\uEE06", "\uEE06"], /* Private Use */ + ["\uEE07", "\uEE07"], /* Private Use */ + ["\uEE08", "\uEE08"], /* Private Use */ + ["\uEE09", "\uEE09"], /* Private Use */ + ["\uEE0A", "\uEE0A"], /* Private Use */ + ["\uEE0B", "\uEE0B"], /* Private Use */ + ["\uEE0C", "\uEE0C"], /* Private Use */ + ["\uEE0D", "\uEE0D"], /* Private Use */ + ["\uEE0E", "\uEE0E"], /* Private Use */ + ["\uEE0F", "\uEE0F"], /* Private Use */ + ["\uEE10", "\uEE10"], /* Private Use */ + ["\uEE11", "\uEE11"], /* Private Use */ + ["\uEE12", "\uEE12"], /* Private Use */ + ["\uEE13", "\uEE13"], /* Private Use */ + ["\uEE14", "\uEE14"], /* Private Use */ + ["\uEE15", "\uEE15"], /* Private Use */ + ["\uEE16", "\uEE16"], /* Private Use */ + ["\uEE17", "\uEE17"], /* Private Use */ + ["\uEE18", "\uEE18"], /* Private Use */ + ["\uEE19", "\uEE19"], /* Private Use */ + ["\uEE1A", "\uEE1A"], /* Private Use */ + ["\uEE1B", "\uEE1B"], /* Private Use */ + ["\uEE1C", "\uEE1C"], /* Private Use */ + ["\uEE1D", "\uEE1D"], /* Private Use */ + ["\uEE1E", "\uEE1E"], /* Private Use */ + ["\uEE1F", "\uEE1F"], /* Private Use */ + ["\uEE20", "\uEE20"], /* Private Use */ + ["\uEE21", "\uEE21"], /* Private Use */ + ["\uEE22", "\uEE22"], /* Private Use */ + ["\uEE23", "\uEE23"], /* Private Use */ + ["\uEE24", "\uEE24"], /* Private Use */ + ["\uEE25", "\uEE25"], /* Private Use */ + ["\uEE26", "\uEE26"], /* Private Use */ + ["\uEE27", "\uEE27"], /* Private Use */ + ["\uEE28", "\uEE28"], /* Private Use */ + ["\uEE29", "\uEE29"], /* Private Use */ + ["\uEE2A", "\uEE2A"], /* Private Use */ + ["\uEE2B", "\uEE2B"], /* Private Use */ + ["\uEE2C", "\uEE2C"], /* Private Use */ + ["\uEE2D", "\uEE2D"], /* Private Use */ + ["\uEE2E", "\uEE2E"], /* Private Use */ + ["\uEE2F", "\uEE2F"], /* Private Use */ + ["\uEE30", "\uEE30"], /* Private Use */ + ["\uEE31", "\uEE31"], /* Private Use */ + ["\uEE32", "\uEE32"], /* Private Use */ + ["\uEE33", "\uEE33"], /* Private Use */ + ["\uEE34", "\uEE34"], /* Private Use */ + ["\uEE35", "\uEE35"], /* Private Use */ + ["\uEE36", "\uEE36"], /* Private Use */ + ["\uEE37", "\uEE37"], /* Private Use */ + ["\uEE38", "\uEE38"], /* Private Use */ + ["\uEE39", "\uEE39"], /* Private Use */ + ["\uEE3A", "\uEE3A"], /* Private Use */ + ["\uEE3B", "\uEE3B"], /* Private Use */ + ["\uEE3C", "\uEE3C"], /* Private Use */ + ["\uEE3D", "\uEE3D"], /* Private Use */ + ["\uEE3E", "\uEE3E"], /* Private Use */ + ["\uEE3F", "\uEE3F"], /* Private Use */ + ["\uEE40", "\uEE40"], /* Private Use */ + ["\uEE41", "\uEE41"], /* Private Use */ + ["\uEE42", "\uEE42"], /* Private Use */ + ["\uEE43", "\uEE43"], /* Private Use */ + ["\uEE44", "\uEE44"], /* Private Use */ + ["\uEE45", "\uEE45"], /* Private Use */ + ["\uEE46", "\uEE46"], /* Private Use */ + ["\uEE47", "\uEE47"], /* Private Use */ + ["\uEE48", "\uEE48"], /* Private Use */ + ["\uEE49", "\uEE49"], /* Private Use */ + ["\uEE4A", "\uEE4A"], /* Private Use */ + ["\uEE4B", "\uEE4B"], /* Private Use */ + ["\uEE4C", "\uEE4C"], /* Private Use */ + ["\uEE4D", "\uEE4D"], /* Private Use */ + ["\uEE4E", "\uEE4E"], /* Private Use */ + ["\uEE4F", "\uEE4F"], /* Private Use */ + ["\uEE50", "\uEE50"], /* Private Use */ + ["\uEE51", "\uEE51"], /* Private Use */ + ["\uEE52", "\uEE52"], /* Private Use */ + ["\uEE53", "\uEE53"], /* Private Use */ + ["\uEE54", "\uEE54"], /* Private Use */ + ["\uEE55", "\uEE55"], /* Private Use */ + ["\uEE56", "\uEE56"], /* Private Use */ + ["\uEE57", "\uEE57"], /* Private Use */ + ["\uEE58", "\uEE58"], /* Private Use */ + ["\uEE59", "\uEE59"], /* Private Use */ + ["\uEE5A", "\uEE5A"], /* Private Use */ + ["\uEE5B", "\uEE5B"], /* Private Use */ + ["\uEE5C", "\uEE5C"], /* Private Use */ + ["\uEE5D", "\uEE5D"], /* Private Use */ + ["\uEE5E", "\uEE5E"], /* Private Use */ + ["\uEE5F", "\uEE5F"], /* Private Use */ + ["\uEE60", "\uEE60"], /* Private Use */ + ["\uEE61", "\uEE61"], /* Private Use */ + ["\uEE62", "\uEE62"], /* Private Use */ + ["\uEE63", "\uEE63"], /* Private Use */ + ["\uEE64", "\uEE64"], /* Private Use */ + ["\uEE65", "\uEE65"], /* Private Use */ + ["\uEE66", "\uEE66"], /* Private Use */ + ["\uEE67", "\uEE67"], /* Private Use */ + ["\uEE68", "\uEE68"], /* Private Use */ + ["\uEE69", "\uEE69"], /* Private Use */ + ["\uEE6A", "\uEE6A"], /* Private Use */ + ["\uEE6B", "\uEE6B"], /* Private Use */ + ["\uEE6C", "\uEE6C"], /* Private Use */ + ["\uEE6D", "\uEE6D"], /* Private Use */ + ["\uEE6E", "\uEE6E"], /* Private Use */ + ["\uEE6F", "\uEE6F"], /* Private Use */ + ["\uEE70", "\uEE70"], /* Private Use */ + ["\uEE71", "\uEE71"], /* Private Use */ + ["\uEE72", "\uEE72"], /* Private Use */ + ["\uEE73", "\uEE73"], /* Private Use */ + ["\uEE74", "\uEE74"], /* Private Use */ + ["\uEE75", "\uEE75"], /* Private Use */ + ["\uEE76", "\uEE76"], /* Private Use */ + ["\uEE77", "\uEE77"], /* Private Use */ + ["\uEE78", "\uEE78"], /* Private Use */ + ["\uEE79", "\uEE79"], /* Private Use */ + ["\uEE7A", "\uEE7A"], /* Private Use */ + ["\uEE7B", "\uEE7B"], /* Private Use */ + ["\uEE7C", "\uEE7C"], /* Private Use */ + ["\uEE7D", "\uEE7D"], /* Private Use */ + ["\uEE7E", "\uEE7E"], /* Private Use */ + ["\uEE7F", "\uEE7F"], /* Private Use */ + ["\uEE80", "\uEE80"], /* Private Use */ + ["\uEE81", "\uEE81"], /* Private Use */ + ["\uEE82", "\uEE82"], /* Private Use */ + ["\uEE83", "\uEE83"], /* Private Use */ + ["\uEE84", "\uEE84"], /* Private Use */ + ["\uEE85", "\uEE85"], /* Private Use */ + ["\uEE86", "\uEE86"], /* Private Use */ + ["\uEE87", "\uEE87"], /* Private Use */ + ["\uEE88", "\uEE88"], /* Private Use */ + ["\uEE89", "\uEE89"], /* Private Use */ + ["\uEE8A", "\uEE8A"], /* Private Use */ + ["\uEE8B", "\uEE8B"], /* Private Use */ + ["\uEE8C", "\uEE8C"], /* Private Use */ + ["\uEE8D", "\uEE8D"], /* Private Use */ + ["\uEE8E", "\uEE8E"], /* Private Use */ + ["\uEE8F", "\uEE8F"], /* Private Use */ + ["\uEE90", "\uEE90"], /* Private Use */ + ["\uEE91", "\uEE91"], /* Private Use */ + ["\uEE92", "\uEE92"], /* Private Use */ + ["\uEE93", "\uEE93"], /* Private Use */ + ["\uEE94", "\uEE94"], /* Private Use */ + ["\uEE95", "\uEE95"], /* Private Use */ + ["\uEE96", "\uEE96"], /* Private Use */ + ["\uEE97", "\uEE97"], /* Private Use */ + ["\uEE98", "\uEE98"], /* Private Use */ + ["\uEE99", "\uEE99"], /* Private Use */ + ["\uEE9A", "\uEE9A"], /* Private Use */ + ["\uEE9B", "\uEE9B"], /* Private Use */ + ["\uEE9C", "\uEE9C"], /* Private Use */ + ["\uEE9D", "\uEE9D"], /* Private Use */ + ["\uEE9E", "\uEE9E"], /* Private Use */ + ["\uEE9F", "\uEE9F"], /* Private Use */ + ["\uEEA0", "\uEEA0"], /* Private Use */ + ["\uEEA1", "\uEEA1"], /* Private Use */ + ["\uEEA2", "\uEEA2"], /* Private Use */ + ["\uEEA3", "\uEEA3"], /* Private Use */ + ["\uEEA4", "\uEEA4"], /* Private Use */ + ["\uEEA5", "\uEEA5"], /* Private Use */ + ["\uEEA6", "\uEEA6"], /* Private Use */ + ["\uEEA7", "\uEEA7"], /* Private Use */ + ["\uEEA8", "\uEEA8"], /* Private Use */ + ["\uEEA9", "\uEEA9"], /* Private Use */ + ["\uEEAA", "\uEEAA"], /* Private Use */ + ["\uEEAB", "\uEEAB"], /* Private Use */ + ["\uEEAC", "\uEEAC"], /* Private Use */ + ["\uEEAD", "\uEEAD"], /* Private Use */ + ["\uEEAE", "\uEEAE"], /* Private Use */ + ["\uEEAF", "\uEEAF"], /* Private Use */ + ["\uEEB0", "\uEEB0"], /* Private Use */ + ["\uEEB1", "\uEEB1"], /* Private Use */ + ["\uEEB2", "\uEEB2"], /* Private Use */ + ["\uEEB3", "\uEEB3"], /* Private Use */ + ["\uEEB4", "\uEEB4"], /* Private Use */ + ["\uEEB5", "\uEEB5"], /* Private Use */ + ["\uEEB6", "\uEEB6"], /* Private Use */ + ["\uEEB7", "\uEEB7"], /* Private Use */ + ["\uEEB8", "\uEEB8"], /* Private Use */ + ["\uEEB9", "\uEEB9"], /* Private Use */ + ["\uEEBA", "\uEEBA"], /* Private Use */ + ["\uEEBB", "\uEEBB"], /* Private Use */ + ["\uEEBC", "\uEEBC"], /* Private Use */ + ["\uEEBD", "\uEEBD"], /* Private Use */ + ["\uEEBE", "\uEEBE"], /* Private Use */ + ["\uEEBF", "\uEEBF"], /* Private Use */ + ["\uEEC0", "\uEEC0"], /* Private Use */ + ["\uEEC1", "\uEEC1"], /* Private Use */ + ["\uEEC2", "\uEEC2"], /* Private Use */ + ["\uEEC3", "\uEEC3"], /* Private Use */ + ["\uEEC4", "\uEEC4"], /* Private Use */ + ["\uEEC5", "\uEEC5"], /* Private Use */ + ["\uEEC6", "\uEEC6"], /* Private Use */ + ["\uEEC7", "\uEEC7"], /* Private Use */ + ["\uEEC8", "\uEEC8"], /* Private Use */ + ["\uEEC9", "\uEEC9"], /* Private Use */ + ["\uEECA", "\uEECA"], /* Private Use */ + ["\uEECB", "\uEECB"], /* Private Use */ + ["\uEECC", "\uEECC"], /* Private Use */ + ["\uEECD", "\uEECD"], /* Private Use */ + ["\uEECE", "\uEECE"], /* Private Use */ + ["\uEECF", "\uEECF"], /* Private Use */ + ["\uEED0", "\uEED0"], /* Private Use */ + ["\uEED1", "\uEED1"], /* Private Use */ + ["\uEED2", "\uEED2"], /* Private Use */ + ["\uEED3", "\uEED3"], /* Private Use */ + ["\uEED4", "\uEED4"], /* Private Use */ + ["\uEED5", "\uEED5"], /* Private Use */ + ["\uEED6", "\uEED6"], /* Private Use */ + ["\uEED7", "\uEED7"], /* Private Use */ + ["\uEED8", "\uEED8"], /* Private Use */ + ["\uEED9", "\uEED9"], /* Private Use */ + ["\uEEDA", "\uEEDA"], /* Private Use */ + ["\uEEDB", "\uEEDB"], /* Private Use */ + ["\uEEDC", "\uEEDC"], /* Private Use */ + ["\uEEDD", "\uEEDD"], /* Private Use */ + ["\uEEDE", "\uEEDE"], /* Private Use */ + ["\uEEDF", "\uEEDF"], /* Private Use */ + ["\uEEE0", "\uEEE0"], /* Private Use */ + ["\uEEE1", "\uEEE1"], /* Private Use */ + ["\uEEE2", "\uEEE2"], /* Private Use */ + ["\uEEE3", "\uEEE3"], /* Private Use */ + ["\uEEE4", "\uEEE4"], /* Private Use */ + ["\uEEE5", "\uEEE5"], /* Private Use */ + ["\uEEE6", "\uEEE6"], /* Private Use */ + ["\uEEE7", "\uEEE7"], /* Private Use */ + ["\uEEE8", "\uEEE8"], /* Private Use */ + ["\uEEE9", "\uEEE9"], /* Private Use */ + ["\uEEEA", "\uEEEA"], /* Private Use */ + ["\uEEEB", "\uEEEB"], /* Private Use */ + ["\uEEEC", "\uEEEC"], /* Private Use */ + ["\uEEED", "\uEEED"], /* Private Use */ + ["\uEEEE", "\uEEEE"], /* Private Use */ + ["\uEEEF", "\uEEEF"], /* Private Use */ + ["\uEEF0", "\uEEF0"], /* Private Use */ + ["\uEEF1", "\uEEF1"], /* Private Use */ + ["\uEEF2", "\uEEF2"], /* Private Use */ + ["\uEEF3", "\uEEF3"], /* Private Use */ + ["\uEEF4", "\uEEF4"], /* Private Use */ + ["\uEEF5", "\uEEF5"], /* Private Use */ + ["\uEEF6", "\uEEF6"], /* Private Use */ + ["\uEEF7", "\uEEF7"], /* Private Use */ + ["\uEEF8", "\uEEF8"], /* Private Use */ + ["\uEEF9", "\uEEF9"], /* Private Use */ + ["\uEEFA", "\uEEFA"], /* Private Use */ + ["\uEEFB", "\uEEFB"], /* Private Use */ + ["\uEEFC", "\uEEFC"], /* Private Use */ + ["\uEEFD", "\uEEFD"], /* Private Use */ + ["\uEEFE", "\uEEFE"], /* Private Use */ + ["\uEEFF", "\uEEFF"], /* Private Use */ + ["\uEF00", "\uEF00"], /* Private Use */ + ["\uEF01", "\uEF01"], /* Private Use */ + ["\uEF02", "\uEF02"], /* Private Use */ + ["\uEF03", "\uEF03"], /* Private Use */ + ["\uEF04", "\uEF04"], /* Private Use */ + ["\uEF05", "\uEF05"], /* Private Use */ + ["\uEF06", "\uEF06"], /* Private Use */ + ["\uEF07", "\uEF07"], /* Private Use */ + ["\uEF08", "\uEF08"], /* Private Use */ + ["\uEF09", "\uEF09"], /* Private Use */ + ["\uEF0A", "\uEF0A"], /* Private Use */ + ["\uEF0B", "\uEF0B"], /* Private Use */ + ["\uEF0C", "\uEF0C"], /* Private Use */ + ["\uEF0D", "\uEF0D"], /* Private Use */ + ["\uEF0E", "\uEF0E"], /* Private Use */ + ["\uEF0F", "\uEF0F"], /* Private Use */ + ["\uEF10", "\uEF10"], /* Private Use */ + ["\uEF11", "\uEF11"], /* Private Use */ + ["\uEF12", "\uEF12"], /* Private Use */ + ["\uEF13", "\uEF13"], /* Private Use */ + ["\uEF14", "\uEF14"], /* Private Use */ + ["\uEF15", "\uEF15"], /* Private Use */ + ["\uEF16", "\uEF16"], /* Private Use */ + ["\uEF17", "\uEF17"], /* Private Use */ + ["\uEF18", "\uEF18"], /* Private Use */ + ["\uEF19", "\uEF19"], /* Private Use */ + ["\uEF1A", "\uEF1A"], /* Private Use */ + ["\uEF1B", "\uEF1B"], /* Private Use */ + ["\uEF1C", "\uEF1C"], /* Private Use */ + ["\uEF1D", "\uEF1D"], /* Private Use */ + ["\uEF1E", "\uEF1E"], /* Private Use */ + ["\uEF1F", "\uEF1F"], /* Private Use */ + ["\uEF20", "\uEF20"], /* Private Use */ + ["\uEF21", "\uEF21"], /* Private Use */ + ["\uEF22", "\uEF22"], /* Private Use */ + ["\uEF23", "\uEF23"], /* Private Use */ + ["\uEF24", "\uEF24"], /* Private Use */ + ["\uEF25", "\uEF25"], /* Private Use */ + ["\uEF26", "\uEF26"], /* Private Use */ + ["\uEF27", "\uEF27"], /* Private Use */ + ["\uEF28", "\uEF28"], /* Private Use */ + ["\uEF29", "\uEF29"], /* Private Use */ + ["\uEF2A", "\uEF2A"], /* Private Use */ + ["\uEF2B", "\uEF2B"], /* Private Use */ + ["\uEF2C", "\uEF2C"], /* Private Use */ + ["\uEF2D", "\uEF2D"], /* Private Use */ + ["\uEF2E", "\uEF2E"], /* Private Use */ + ["\uEF2F", "\uEF2F"], /* Private Use */ + ["\uEF30", "\uEF30"], /* Private Use */ + ["\uEF31", "\uEF31"], /* Private Use */ + ["\uEF32", "\uEF32"], /* Private Use */ + ["\uEF33", "\uEF33"], /* Private Use */ + ["\uEF34", "\uEF34"], /* Private Use */ + ["\uEF35", "\uEF35"], /* Private Use */ + ["\uEF36", "\uEF36"], /* Private Use */ + ["\uEF37", "\uEF37"], /* Private Use */ + ["\uEF38", "\uEF38"], /* Private Use */ + ["\uEF39", "\uEF39"], /* Private Use */ + ["\uEF3A", "\uEF3A"], /* Private Use */ + ["\uEF3B", "\uEF3B"], /* Private Use */ + ["\uEF3C", "\uEF3C"], /* Private Use */ + ["\uEF3D", "\uEF3D"], /* Private Use */ + ["\uEF3E", "\uEF3E"], /* Private Use */ + ["\uEF3F", "\uEF3F"], /* Private Use */ + ["\uEF40", "\uEF40"], /* Private Use */ + ["\uEF41", "\uEF41"], /* Private Use */ + ["\uEF42", "\uEF42"], /* Private Use */ + ["\uEF43", "\uEF43"], /* Private Use */ + ["\uEF44", "\uEF44"], /* Private Use */ + ["\uEF45", "\uEF45"], /* Private Use */ + ["\uEF46", "\uEF46"], /* Private Use */ + ["\uEF47", "\uEF47"], /* Private Use */ + ["\uEF48", "\uEF48"], /* Private Use */ + ["\uEF49", "\uEF49"], /* Private Use */ + ["\uEF4A", "\uEF4A"], /* Private Use */ + ["\uEF4B", "\uEF4B"], /* Private Use */ + ["\uEF4C", "\uEF4C"], /* Private Use */ + ["\uEF4D", "\uEF4D"], /* Private Use */ + ["\uEF4E", "\uEF4E"], /* Private Use */ + ["\uEF4F", "\uEF4F"], /* Private Use */ + ["\uEF50", "\uEF50"], /* Private Use */ + ["\uEF51", "\uEF51"], /* Private Use */ + ["\uEF52", "\uEF52"], /* Private Use */ + ["\uEF53", "\uEF53"], /* Private Use */ + ["\uEF54", "\uEF54"], /* Private Use */ + ["\uEF55", "\uEF55"], /* Private Use */ + ["\uEF56", "\uEF56"], /* Private Use */ + ["\uEF57", "\uEF57"], /* Private Use */ + ["\uEF58", "\uEF58"], /* Private Use */ + ["\uEF59", "\uEF59"], /* Private Use */ + ["\uEF5A", "\uEF5A"], /* Private Use */ + ["\uEF5B", "\uEF5B"], /* Private Use */ + ["\uEF5C", "\uEF5C"], /* Private Use */ + ["\uEF5D", "\uEF5D"], /* Private Use */ + ["\uEF5E", "\uEF5E"], /* Private Use */ + ["\uEF5F", "\uEF5F"], /* Private Use */ + ["\uEF60", "\uEF60"], /* Private Use */ + ["\uEF61", "\uEF61"], /* Private Use */ + ["\uEF62", "\uEF62"], /* Private Use */ + ["\uEF63", "\uEF63"], /* Private Use */ + ["\uEF64", "\uEF64"], /* Private Use */ + ["\uEF65", "\uEF65"], /* Private Use */ + ["\uEF66", "\uEF66"], /* Private Use */ + ["\uEF67", "\uEF67"], /* Private Use */ + ["\uEF68", "\uEF68"], /* Private Use */ + ["\uEF69", "\uEF69"], /* Private Use */ + ["\uEF6A", "\uEF6A"], /* Private Use */ + ["\uEF6B", "\uEF6B"], /* Private Use */ + ["\uEF6C", "\uEF6C"], /* Private Use */ + ["\uEF6D", "\uEF6D"], /* Private Use */ + ["\uEF6E", "\uEF6E"], /* Private Use */ + ["\uEF6F", "\uEF6F"], /* Private Use */ + ["\uEF70", "\uEF70"], /* Private Use */ + ["\uEF71", "\uEF71"], /* Private Use */ + ["\uEF72", "\uEF72"], /* Private Use */ + ["\uEF73", "\uEF73"], /* Private Use */ + ["\uEF74", "\uEF74"], /* Private Use */ + ["\uEF75", "\uEF75"], /* Private Use */ + ["\uEF76", "\uEF76"], /* Private Use */ + ["\uEF77", "\uEF77"], /* Private Use */ + ["\uEF78", "\uEF78"], /* Private Use */ + ["\uEF79", "\uEF79"], /* Private Use */ + ["\uEF7A", "\uEF7A"], /* Private Use */ + ["\uEF7B", "\uEF7B"], /* Private Use */ + ["\uEF7C", "\uEF7C"], /* Private Use */ + ["\uEF7D", "\uEF7D"], /* Private Use */ + ["\uEF7E", "\uEF7E"], /* Private Use */ + ["\uEF7F", "\uEF7F"], /* Private Use */ + ["\uEF80", "\uEF80"], /* Private Use */ + ["\uEF81", "\uEF81"], /* Private Use */ + ["\uEF82", "\uEF82"], /* Private Use */ + ["\uEF83", "\uEF83"], /* Private Use */ + ["\uEF84", "\uEF84"], /* Private Use */ + ["\uEF85", "\uEF85"], /* Private Use */ + ["\uEF86", "\uEF86"], /* Private Use */ + ["\uEF87", "\uEF87"], /* Private Use */ + ["\uEF88", "\uEF88"], /* Private Use */ + ["\uEF89", "\uEF89"], /* Private Use */ + ["\uEF8A", "\uEF8A"], /* Private Use */ + ["\uEF8B", "\uEF8B"], /* Private Use */ + ["\uEF8C", "\uEF8C"], /* Private Use */ + ["\uEF8D", "\uEF8D"], /* Private Use */ + ["\uEF8E", "\uEF8E"], /* Private Use */ + ["\uEF8F", "\uEF8F"], /* Private Use */ + ["\uEF90", "\uEF90"], /* Private Use */ + ["\uEF91", "\uEF91"], /* Private Use */ + ["\uEF92", "\uEF92"], /* Private Use */ + ["\uEF93", "\uEF93"], /* Private Use */ + ["\uEF94", "\uEF94"], /* Private Use */ + ["\uEF95", "\uEF95"], /* Private Use */ + ["\uEF96", "\uEF96"], /* Private Use */ + ["\uEF97", "\uEF97"], /* Private Use */ + ["\uEF98", "\uEF98"], /* Private Use */ + ["\uEF99", "\uEF99"], /* Private Use */ + ["\uEF9A", "\uEF9A"], /* Private Use */ + ["\uEF9B", "\uEF9B"], /* Private Use */ + ["\uEF9C", "\uEF9C"], /* Private Use */ + ["\uEF9D", "\uEF9D"], /* Private Use */ + ["\uEF9E", "\uEF9E"], /* Private Use */ + ["\uEF9F", "\uEF9F"], /* Private Use */ + ["\uEFA0", "\uEFA0"], /* Private Use */ + ["\uEFA1", "\uEFA1"], /* Private Use */ + ["\uEFA2", "\uEFA2"], /* Private Use */ + ["\uEFA3", "\uEFA3"], /* Private Use */ + ["\uEFA4", "\uEFA4"], /* Private Use */ + ["\uEFA5", "\uEFA5"], /* Private Use */ + ["\uEFA6", "\uEFA6"], /* Private Use */ + ["\uEFA7", "\uEFA7"], /* Private Use */ + ["\uEFA8", "\uEFA8"], /* Private Use */ + ["\uEFA9", "\uEFA9"], /* Private Use */ + ["\uEFAA", "\uEFAA"], /* Private Use */ + ["\uEFAB", "\uEFAB"], /* Private Use */ + ["\uEFAC", "\uEFAC"], /* Private Use */ + ["\uEFAD", "\uEFAD"], /* Private Use */ + ["\uEFAE", "\uEFAE"], /* Private Use */ + ["\uEFAF", "\uEFAF"], /* Private Use */ + ["\uEFB0", "\uEFB0"], /* Private Use */ + ["\uEFB1", "\uEFB1"], /* Private Use */ + ["\uEFB2", "\uEFB2"], /* Private Use */ + ["\uEFB3", "\uEFB3"], /* Private Use */ + ["\uEFB4", "\uEFB4"], /* Private Use */ + ["\uEFB5", "\uEFB5"], /* Private Use */ + ["\uEFB6", "\uEFB6"], /* Private Use */ + ["\uEFB7", "\uEFB7"], /* Private Use */ + ["\uEFB8", "\uEFB8"], /* Private Use */ + ["\uEFB9", "\uEFB9"], /* Private Use */ + ["\uEFBA", "\uEFBA"], /* Private Use */ + ["\uEFBB", "\uEFBB"], /* Private Use */ + ["\uEFBC", "\uEFBC"], /* Private Use */ + ["\uEFBD", "\uEFBD"], /* Private Use */ + ["\uEFBE", "\uEFBE"], /* Private Use */ + ["\uEFBF", "\uEFBF"], /* Private Use */ + ["\uEFC0", "\uEFC0"], /* Private Use */ + ["\uEFC1", "\uEFC1"], /* Private Use */ + ["\uEFC2", "\uEFC2"], /* Private Use */ + ["\uEFC3", "\uEFC3"], /* Private Use */ + ["\uEFC4", "\uEFC4"], /* Private Use */ + ["\uEFC5", "\uEFC5"], /* Private Use */ + ["\uEFC6", "\uEFC6"], /* Private Use */ + ["\uEFC7", "\uEFC7"], /* Private Use */ + ["\uEFC8", "\uEFC8"], /* Private Use */ + ["\uEFC9", "\uEFC9"], /* Private Use */ + ["\uEFCA", "\uEFCA"], /* Private Use */ + ["\uEFCB", "\uEFCB"], /* Private Use */ + ["\uEFCC", "\uEFCC"], /* Private Use */ + ["\uEFCD", "\uEFCD"], /* Private Use */ + ["\uEFCE", "\uEFCE"], /* Private Use */ + ["\uEFCF", "\uEFCF"], /* Private Use */ + ["\uEFD0", "\uEFD0"], /* Private Use */ + ["\uEFD1", "\uEFD1"], /* Private Use */ + ["\uEFD2", "\uEFD2"], /* Private Use */ + ["\uEFD3", "\uEFD3"], /* Private Use */ + ["\uEFD4", "\uEFD4"], /* Private Use */ + ["\uEFD5", "\uEFD5"], /* Private Use */ + ["\uEFD6", "\uEFD6"], /* Private Use */ + ["\uEFD7", "\uEFD7"], /* Private Use */ + ["\uEFD8", "\uEFD8"], /* Private Use */ + ["\uEFD9", "\uEFD9"], /* Private Use */ + ["\uEFDA", "\uEFDA"], /* Private Use */ + ["\uEFDB", "\uEFDB"], /* Private Use */ + ["\uEFDC", "\uEFDC"], /* Private Use */ + ["\uEFDD", "\uEFDD"], /* Private Use */ + ["\uEFDE", "\uEFDE"], /* Private Use */ + ["\uEFDF", "\uEFDF"], /* Private Use */ + ["\uEFE0", "\uEFE0"], /* Private Use */ + ["\uEFE1", "\uEFE1"], /* Private Use */ + ["\uEFE2", "\uEFE2"], /* Private Use */ + ["\uEFE3", "\uEFE3"], /* Private Use */ + ["\uEFE4", "\uEFE4"], /* Private Use */ + ["\uEFE5", "\uEFE5"], /* Private Use */ + ["\uEFE6", "\uEFE6"], /* Private Use */ + ["\uEFE7", "\uEFE7"], /* Private Use */ + ["\uEFE8", "\uEFE8"], /* Private Use */ + ["\uEFE9", "\uEFE9"], /* Private Use */ + ["\uEFEA", "\uEFEA"], /* Private Use */ + ["\uEFEB", "\uEFEB"], /* Private Use */ + ["\uEFEC", "\uEFEC"], /* Private Use */ + ["\uEFED", "\uEFED"], /* Private Use */ + ["\uEFEE", "\uEFEE"], /* Private Use */ + ["\uEFEF", "\uEFEF"], /* Private Use */ + ["\uEFF0", "\uEFF0"], /* Private Use */ + ["\uEFF1", "\uEFF1"], /* Private Use */ + ["\uEFF2", "\uEFF2"], /* Private Use */ + ["\uEFF3", "\uEFF3"], /* Private Use */ + ["\uEFF4", "\uEFF4"], /* Private Use */ + ["\uEFF5", "\uEFF5"], /* Private Use */ + ["\uEFF6", "\uEFF6"], /* Private Use */ + ["\uEFF7", "\uEFF7"], /* Private Use */ + ["\uEFF8", "\uEFF8"], /* Private Use */ + ["\uEFF9", "\uEFF9"], /* Private Use */ + ["\uEFFA", "\uEFFA"], /* Private Use */ + ["\uEFFB", "\uEFFB"], /* Private Use */ + ["\uEFFC", "\uEFFC"], /* Private Use */ + ["\uEFFD", "\uEFFD"], /* Private Use */ + ["\uEFFE", "\uEFFE"], /* Private Use */ + ["\uEFFF", "\uEFFF"], /* Private Use */ + ["\uF000", "\uF000"], /* Private Use */ + ["\uF001", "\uF001"], /* Private Use */ + ["\uF002", "\uF002"], /* Private Use */ + ["\uF003", "\uF003"], /* Private Use */ + ["\uF004", "\uF004"], /* Private Use */ + ["\uF005", "\uF005"], /* Private Use */ + ["\uF006", "\uF006"], /* Private Use */ + ["\uF007", "\uF007"], /* Private Use */ + ["\uF008", "\uF008"], /* Private Use */ + ["\uF009", "\uF009"], /* Private Use */ + ["\uF00A", "\uF00A"], /* Private Use */ + ["\uF00B", "\uF00B"], /* Private Use */ + ["\uF00C", "\uF00C"], /* Private Use */ + ["\uF00D", "\uF00D"], /* Private Use */ + ["\uF00E", "\uF00E"], /* Private Use */ + ["\uF00F", "\uF00F"], /* Private Use */ + ["\uF010", "\uF010"], /* Private Use */ + ["\uF011", "\uF011"], /* Private Use */ + ["\uF012", "\uF012"], /* Private Use */ + ["\uF013", "\uF013"], /* Private Use */ + ["\uF014", "\uF014"], /* Private Use */ + ["\uF015", "\uF015"], /* Private Use */ + ["\uF016", "\uF016"], /* Private Use */ + ["\uF017", "\uF017"], /* Private Use */ + ["\uF018", "\uF018"], /* Private Use */ + ["\uF019", "\uF019"], /* Private Use */ + ["\uF01A", "\uF01A"], /* Private Use */ + ["\uF01B", "\uF01B"], /* Private Use */ + ["\uF01C", "\uF01C"], /* Private Use */ + ["\uF01D", "\uF01D"], /* Private Use */ + ["\uF01E", "\uF01E"], /* Private Use */ + ["\uF01F", "\uF01F"], /* Private Use */ + ["\uF020", "\uF020"], /* Private Use */ + ["\uF021", "\uF021"], /* Private Use */ + ["\uF022", "\uF022"], /* Private Use */ + ["\uF023", "\uF023"], /* Private Use */ + ["\uF024", "\uF024"], /* Private Use */ + ["\uF025", "\uF025"], /* Private Use */ + ["\uF026", "\uF026"], /* Private Use */ + ["\uF027", "\uF027"], /* Private Use */ + ["\uF028", "\uF028"], /* Private Use */ + ["\uF029", "\uF029"], /* Private Use */ + ["\uF02A", "\uF02A"], /* Private Use */ + ["\uF02B", "\uF02B"], /* Private Use */ + ["\uF02C", "\uF02C"], /* Private Use */ + ["\uF02D", "\uF02D"], /* Private Use */ + ["\uF02E", "\uF02E"], /* Private Use */ + ["\uF02F", "\uF02F"], /* Private Use */ + ["\uF030", "\uF030"], /* Private Use */ + ["\uF031", "\uF031"], /* Private Use */ + ["\uF032", "\uF032"], /* Private Use */ + ["\uF033", "\uF033"], /* Private Use */ + ["\uF034", "\uF034"], /* Private Use */ + ["\uF035", "\uF035"], /* Private Use */ + ["\uF036", "\uF036"], /* Private Use */ + ["\uF037", "\uF037"], /* Private Use */ + ["\uF038", "\uF038"], /* Private Use */ + ["\uF039", "\uF039"], /* Private Use */ + ["\uF03A", "\uF03A"], /* Private Use */ + ["\uF03B", "\uF03B"], /* Private Use */ + ["\uF03C", "\uF03C"], /* Private Use */ + ["\uF03D", "\uF03D"], /* Private Use */ + ["\uF03E", "\uF03E"], /* Private Use */ + ["\uF03F", "\uF03F"], /* Private Use */ + ["\uF040", "\uF040"], /* Private Use */ + ["\uF041", "\uF041"], /* Private Use */ + ["\uF042", "\uF042"], /* Private Use */ + ["\uF043", "\uF043"], /* Private Use */ + ["\uF044", "\uF044"], /* Private Use */ + ["\uF045", "\uF045"], /* Private Use */ + ["\uF046", "\uF046"], /* Private Use */ + ["\uF047", "\uF047"], /* Private Use */ + ["\uF048", "\uF048"], /* Private Use */ + ["\uF049", "\uF049"], /* Private Use */ + ["\uF04A", "\uF04A"], /* Private Use */ + ["\uF04B", "\uF04B"], /* Private Use */ + ["\uF04C", "\uF04C"], /* Private Use */ + ["\uF04D", "\uF04D"], /* Private Use */ + ["\uF04E", "\uF04E"], /* Private Use */ + ["\uF04F", "\uF04F"], /* Private Use */ + ["\uF050", "\uF050"], /* Private Use */ + ["\uF051", "\uF051"], /* Private Use */ + ["\uF052", "\uF052"], /* Private Use */ + ["\uF053", "\uF053"], /* Private Use */ + ["\uF054", "\uF054"], /* Private Use */ + ["\uF055", "\uF055"], /* Private Use */ + ["\uF056", "\uF056"], /* Private Use */ + ["\uF057", "\uF057"], /* Private Use */ + ["\uF058", "\uF058"], /* Private Use */ + ["\uF059", "\uF059"], /* Private Use */ + ["\uF05A", "\uF05A"], /* Private Use */ + ["\uF05B", "\uF05B"], /* Private Use */ + ["\uF05C", "\uF05C"], /* Private Use */ + ["\uF05D", "\uF05D"], /* Private Use */ + ["\uF05E", "\uF05E"], /* Private Use */ + ["\uF05F", "\uF05F"], /* Private Use */ + ["\uF060", "\uF060"], /* Private Use */ + ["\uF061", "\uF061"], /* Private Use */ + ["\uF062", "\uF062"], /* Private Use */ + ["\uF063", "\uF063"], /* Private Use */ + ["\uF064", "\uF064"], /* Private Use */ + ["\uF065", "\uF065"], /* Private Use */ + ["\uF066", "\uF066"], /* Private Use */ + ["\uF067", "\uF067"], /* Private Use */ + ["\uF068", "\uF068"], /* Private Use */ + ["\uF069", "\uF069"], /* Private Use */ + ["\uF06A", "\uF06A"], /* Private Use */ + ["\uF06B", "\uF06B"], /* Private Use */ + ["\uF06C", "\uF06C"], /* Private Use */ + ["\uF06D", "\uF06D"], /* Private Use */ + ["\uF06E", "\uF06E"], /* Private Use */ + ["\uF06F", "\uF06F"], /* Private Use */ + ["\uF070", "\uF070"], /* Private Use */ + ["\uF071", "\uF071"], /* Private Use */ + ["\uF072", "\uF072"], /* Private Use */ + ["\uF073", "\uF073"], /* Private Use */ + ["\uF074", "\uF074"], /* Private Use */ + ["\uF075", "\uF075"], /* Private Use */ + ["\uF076", "\uF076"], /* Private Use */ + ["\uF077", "\uF077"], /* Private Use */ + ["\uF078", "\uF078"], /* Private Use */ + ["\uF079", "\uF079"], /* Private Use */ + ["\uF07A", "\uF07A"], /* Private Use */ + ["\uF07B", "\uF07B"], /* Private Use */ + ["\uF07C", "\uF07C"], /* Private Use */ + ["\uF07D", "\uF07D"], /* Private Use */ + ["\uF07E", "\uF07E"], /* Private Use */ + ["\uF07F", "\uF07F"], /* Private Use */ + ["\uF080", "\uF080"], /* Private Use */ + ["\uF081", "\uF081"], /* Private Use */ + ["\uF082", "\uF082"], /* Private Use */ + ["\uF083", "\uF083"], /* Private Use */ + ["\uF084", "\uF084"], /* Private Use */ + ["\uF085", "\uF085"], /* Private Use */ + ["\uF086", "\uF086"], /* Private Use */ + ["\uF087", "\uF087"], /* Private Use */ + ["\uF088", "\uF088"], /* Private Use */ + ["\uF089", "\uF089"], /* Private Use */ + ["\uF08A", "\uF08A"], /* Private Use */ + ["\uF08B", "\uF08B"], /* Private Use */ + ["\uF08C", "\uF08C"], /* Private Use */ + ["\uF08D", "\uF08D"], /* Private Use */ + ["\uF08E", "\uF08E"], /* Private Use */ + ["\uF08F", "\uF08F"], /* Private Use */ + ["\uF090", "\uF090"], /* Private Use */ + ["\uF091", "\uF091"], /* Private Use */ + ["\uF092", "\uF092"], /* Private Use */ + ["\uF093", "\uF093"], /* Private Use */ + ["\uF094", "\uF094"], /* Private Use */ + ["\uF095", "\uF095"], /* Private Use */ + ["\uF096", "\uF096"], /* Private Use */ + ["\uF097", "\uF097"], /* Private Use */ + ["\uF098", "\uF098"], /* Private Use */ + ["\uF099", "\uF099"], /* Private Use */ + ["\uF09A", "\uF09A"], /* Private Use */ + ["\uF09B", "\uF09B"], /* Private Use */ + ["\uF09C", "\uF09C"], /* Private Use */ + ["\uF09D", "\uF09D"], /* Private Use */ + ["\uF09E", "\uF09E"], /* Private Use */ + ["\uF09F", "\uF09F"], /* Private Use */ + ["\uF0A0", "\uF0A0"], /* Private Use */ + ["\uF0A1", "\uF0A1"], /* Private Use */ + ["\uF0A2", "\uF0A2"], /* Private Use */ + ["\uF0A3", "\uF0A3"], /* Private Use */ + ["\uF0A4", "\uF0A4"], /* Private Use */ + ["\uF0A5", "\uF0A5"], /* Private Use */ + ["\uF0A6", "\uF0A6"], /* Private Use */ + ["\uF0A7", "\uF0A7"], /* Private Use */ + ["\uF0A8", "\uF0A8"], /* Private Use */ + ["\uF0A9", "\uF0A9"], /* Private Use */ + ["\uF0AA", "\uF0AA"], /* Private Use */ + ["\uF0AB", "\uF0AB"], /* Private Use */ + ["\uF0AC", "\uF0AC"], /* Private Use */ + ["\uF0AD", "\uF0AD"], /* Private Use */ + ["\uF0AE", "\uF0AE"], /* Private Use */ + ["\uF0AF", "\uF0AF"], /* Private Use */ + ["\uF0B0", "\uF0B0"], /* Private Use */ + ["\uF0B1", "\uF0B1"], /* Private Use */ + ["\uF0B2", "\uF0B2"], /* Private Use */ + ["\uF0B3", "\uF0B3"], /* Private Use */ + ["\uF0B4", "\uF0B4"], /* Private Use */ + ["\uF0B5", "\uF0B5"], /* Private Use */ + ["\uF0B6", "\uF0B6"], /* Private Use */ + ["\uF0B7", "\uF0B7"], /* Private Use */ + ["\uF0B8", "\uF0B8"], /* Private Use */ + ["\uF0B9", "\uF0B9"], /* Private Use */ + ["\uF0BA", "\uF0BA"], /* Private Use */ + ["\uF0BB", "\uF0BB"], /* Private Use */ + ["\uF0BC", "\uF0BC"], /* Private Use */ + ["\uF0BD", "\uF0BD"], /* Private Use */ + ["\uF0BE", "\uF0BE"], /* Private Use */ + ["\uF0BF", "\uF0BF"], /* Private Use */ + ["\uF0C0", "\uF0C0"], /* Private Use */ + ["\uF0C1", "\uF0C1"], /* Private Use */ + ["\uF0C2", "\uF0C2"], /* Private Use */ + ["\uF0C3", "\uF0C3"], /* Private Use */ + ["\uF0C4", "\uF0C4"], /* Private Use */ + ["\uF0C5", "\uF0C5"], /* Private Use */ + ["\uF0C6", "\uF0C6"], /* Private Use */ + ["\uF0C7", "\uF0C7"], /* Private Use */ + ["\uF0C8", "\uF0C8"], /* Private Use */ + ["\uF0C9", "\uF0C9"], /* Private Use */ + ["\uF0CA", "\uF0CA"], /* Private Use */ + ["\uF0CB", "\uF0CB"], /* Private Use */ + ["\uF0CC", "\uF0CC"], /* Private Use */ + ["\uF0CD", "\uF0CD"], /* Private Use */ + ["\uF0CE", "\uF0CE"], /* Private Use */ + ["\uF0CF", "\uF0CF"], /* Private Use */ + ["\uF0D0", "\uF0D0"], /* Private Use */ + ["\uF0D1", "\uF0D1"], /* Private Use */ + ["\uF0D2", "\uF0D2"], /* Private Use */ + ["\uF0D3", "\uF0D3"], /* Private Use */ + ["\uF0D4", "\uF0D4"], /* Private Use */ + ["\uF0D5", "\uF0D5"], /* Private Use */ + ["\uF0D6", "\uF0D6"], /* Private Use */ + ["\uF0D7", "\uF0D7"], /* Private Use */ + ["\uF0D8", "\uF0D8"], /* Private Use */ + ["\uF0D9", "\uF0D9"], /* Private Use */ + ["\uF0DA", "\uF0DA"], /* Private Use */ + ["\uF0DB", "\uF0DB"], /* Private Use */ + ["\uF0DC", "\uF0DC"], /* Private Use */ + ["\uF0DD", "\uF0DD"], /* Private Use */ + ["\uF0DE", "\uF0DE"], /* Private Use */ + ["\uF0DF", "\uF0DF"], /* Private Use */ + ["\uF0E0", "\uF0E0"], /* Private Use */ + ["\uF0E1", "\uF0E1"], /* Private Use */ + ["\uF0E2", "\uF0E2"], /* Private Use */ + ["\uF0E3", "\uF0E3"], /* Private Use */ + ["\uF0E4", "\uF0E4"], /* Private Use */ + ["\uF0E5", "\uF0E5"], /* Private Use */ + ["\uF0E6", "\uF0E6"], /* Private Use */ + ["\uF0E7", "\uF0E7"], /* Private Use */ + ["\uF0E8", "\uF0E8"], /* Private Use */ + ["\uF0E9", "\uF0E9"], /* Private Use */ + ["\uF0EA", "\uF0EA"], /* Private Use */ + ["\uF0EB", "\uF0EB"], /* Private Use */ + ["\uF0EC", "\uF0EC"], /* Private Use */ + ["\uF0ED", "\uF0ED"], /* Private Use */ + ["\uF0EE", "\uF0EE"], /* Private Use */ + ["\uF0EF", "\uF0EF"], /* Private Use */ + ["\uF0F0", "\uF0F0"], /* Private Use */ + ["\uF0F1", "\uF0F1"], /* Private Use */ + ["\uF0F2", "\uF0F2"], /* Private Use */ + ["\uF0F3", "\uF0F3"], /* Private Use */ + ["\uF0F4", "\uF0F4"], /* Private Use */ + ["\uF0F5", "\uF0F5"], /* Private Use */ + ["\uF0F6", "\uF0F6"], /* Private Use */ + ["\uF0F7", "\uF0F7"], /* Private Use */ + ["\uF0F8", "\uF0F8"], /* Private Use */ + ["\uF0F9", "\uF0F9"], /* Private Use */ + ["\uF0FA", "\uF0FA"], /* Private Use */ + ["\uF0FB", "\uF0FB"], /* Private Use */ + ["\uF0FC", "\uF0FC"], /* Private Use */ + ["\uF0FD", "\uF0FD"], /* Private Use */ + ["\uF0FE", "\uF0FE"], /* Private Use */ + ["\uF0FF", "\uF0FF"], /* Private Use */ + ["\uF100", "\uF100"], /* Private Use */ + ["\uF101", "\uF101"], /* Private Use */ + ["\uF102", "\uF102"], /* Private Use */ + ["\uF103", "\uF103"], /* Private Use */ + ["\uF104", "\uF104"], /* Private Use */ + ["\uF105", "\uF105"], /* Private Use */ + ["\uF106", "\uF106"], /* Private Use */ + ["\uF107", "\uF107"], /* Private Use */ + ["\uF108", "\uF108"], /* Private Use */ + ["\uF109", "\uF109"], /* Private Use */ + ["\uF10A", "\uF10A"], /* Private Use */ + ["\uF10B", "\uF10B"], /* Private Use */ + ["\uF10C", "\uF10C"], /* Private Use */ + ["\uF10D", "\uF10D"], /* Private Use */ + ["\uF10E", "\uF10E"], /* Private Use */ + ["\uF10F", "\uF10F"], /* Private Use */ + ["\uF110", "\uF110"], /* Private Use */ + ["\uF111", "\uF111"], /* Private Use */ + ["\uF112", "\uF112"], /* Private Use */ + ["\uF113", "\uF113"], /* Private Use */ + ["\uF114", "\uF114"], /* Private Use */ + ["\uF115", "\uF115"], /* Private Use */ + ["\uF116", "\uF116"], /* Private Use */ + ["\uF117", "\uF117"], /* Private Use */ + ["\uF118", "\uF118"], /* Private Use */ + ["\uF119", "\uF119"], /* Private Use */ + ["\uF11A", "\uF11A"], /* Private Use */ + ["\uF11B", "\uF11B"], /* Private Use */ + ["\uF11C", "\uF11C"], /* Private Use */ + ["\uF11D", "\uF11D"], /* Private Use */ + ["\uF11E", "\uF11E"], /* Private Use */ + ["\uF11F", "\uF11F"], /* Private Use */ + ["\uF120", "\uF120"], /* Private Use */ + ["\uF121", "\uF121"], /* Private Use */ + ["\uF122", "\uF122"], /* Private Use */ + ["\uF123", "\uF123"], /* Private Use */ + ["\uF124", "\uF124"], /* Private Use */ + ["\uF125", "\uF125"], /* Private Use */ + ["\uF126", "\uF126"], /* Private Use */ + ["\uF127", "\uF127"], /* Private Use */ + ["\uF128", "\uF128"], /* Private Use */ + ["\uF129", "\uF129"], /* Private Use */ + ["\uF12A", "\uF12A"], /* Private Use */ + ["\uF12B", "\uF12B"], /* Private Use */ + ["\uF12C", "\uF12C"], /* Private Use */ + ["\uF12D", "\uF12D"], /* Private Use */ + ["\uF12E", "\uF12E"], /* Private Use */ + ["\uF12F", "\uF12F"], /* Private Use */ + ["\uF130", "\uF130"], /* Private Use */ + ["\uF131", "\uF131"], /* Private Use */ + ["\uF132", "\uF132"], /* Private Use */ + ["\uF133", "\uF133"], /* Private Use */ + ["\uF134", "\uF134"], /* Private Use */ + ["\uF135", "\uF135"], /* Private Use */ + ["\uF136", "\uF136"], /* Private Use */ + ["\uF137", "\uF137"], /* Private Use */ + ["\uF138", "\uF138"], /* Private Use */ + ["\uF139", "\uF139"], /* Private Use */ + ["\uF13A", "\uF13A"], /* Private Use */ + ["\uF13B", "\uF13B"], /* Private Use */ + ["\uF13C", "\uF13C"], /* Private Use */ + ["\uF13D", "\uF13D"], /* Private Use */ + ["\uF13E", "\uF13E"], /* Private Use */ + ["\uF13F", "\uF13F"], /* Private Use */ + ["\uF140", "\uF140"], /* Private Use */ + ["\uF141", "\uF141"], /* Private Use */ + ["\uF142", "\uF142"], /* Private Use */ + ["\uF143", "\uF143"], /* Private Use */ + ["\uF144", "\uF144"], /* Private Use */ + ["\uF145", "\uF145"], /* Private Use */ + ["\uF146", "\uF146"], /* Private Use */ + ["\uF147", "\uF147"], /* Private Use */ + ["\uF148", "\uF148"], /* Private Use */ + ["\uF149", "\uF149"], /* Private Use */ + ["\uF14A", "\uF14A"], /* Private Use */ + ["\uF14B", "\uF14B"], /* Private Use */ + ["\uF14C", "\uF14C"], /* Private Use */ + ["\uF14D", "\uF14D"], /* Private Use */ + ["\uF14E", "\uF14E"], /* Private Use */ + ["\uF14F", "\uF14F"], /* Private Use */ + ["\uF150", "\uF150"], /* Private Use */ + ["\uF151", "\uF151"], /* Private Use */ + ["\uF152", "\uF152"], /* Private Use */ + ["\uF153", "\uF153"], /* Private Use */ + ["\uF154", "\uF154"], /* Private Use */ + ["\uF155", "\uF155"], /* Private Use */ + ["\uF156", "\uF156"], /* Private Use */ + ["\uF157", "\uF157"], /* Private Use */ + ["\uF158", "\uF158"], /* Private Use */ + ["\uF159", "\uF159"], /* Private Use */ + ["\uF15A", "\uF15A"], /* Private Use */ + ["\uF15B", "\uF15B"], /* Private Use */ + ["\uF15C", "\uF15C"], /* Private Use */ + ["\uF15D", "\uF15D"], /* Private Use */ + ["\uF15E", "\uF15E"], /* Private Use */ + ["\uF15F", "\uF15F"], /* Private Use */ + ["\uF160", "\uF160"], /* Private Use */ + ["\uF161", "\uF161"], /* Private Use */ + ["\uF162", "\uF162"], /* Private Use */ + ["\uF163", "\uF163"], /* Private Use */ + ["\uF164", "\uF164"], /* Private Use */ + ["\uF165", "\uF165"], /* Private Use */ + ["\uF166", "\uF166"], /* Private Use */ + ["\uF167", "\uF167"], /* Private Use */ + ["\uF168", "\uF168"], /* Private Use */ + ["\uF169", "\uF169"], /* Private Use */ + ["\uF16A", "\uF16A"], /* Private Use */ + ["\uF16B", "\uF16B"], /* Private Use */ + ["\uF16C", "\uF16C"], /* Private Use */ + ["\uF16D", "\uF16D"], /* Private Use */ + ["\uF16E", "\uF16E"], /* Private Use */ + ["\uF16F", "\uF16F"], /* Private Use */ + ["\uF170", "\uF170"], /* Private Use */ + ["\uF171", "\uF171"], /* Private Use */ + ["\uF172", "\uF172"], /* Private Use */ + ["\uF173", "\uF173"], /* Private Use */ + ["\uF174", "\uF174"], /* Private Use */ + ["\uF175", "\uF175"], /* Private Use */ + ["\uF176", "\uF176"], /* Private Use */ + ["\uF177", "\uF177"], /* Private Use */ + ["\uF178", "\uF178"], /* Private Use */ + ["\uF179", "\uF179"], /* Private Use */ + ["\uF17A", "\uF17A"], /* Private Use */ + ["\uF17B", "\uF17B"], /* Private Use */ + ["\uF17C", "\uF17C"], /* Private Use */ + ["\uF17D", "\uF17D"], /* Private Use */ + ["\uF17E", "\uF17E"], /* Private Use */ + ["\uF17F", "\uF17F"], /* Private Use */ + ["\uF180", "\uF180"], /* Private Use */ + ["\uF181", "\uF181"], /* Private Use */ + ["\uF182", "\uF182"], /* Private Use */ + ["\uF183", "\uF183"], /* Private Use */ + ["\uF184", "\uF184"], /* Private Use */ + ["\uF185", "\uF185"], /* Private Use */ + ["\uF186", "\uF186"], /* Private Use */ + ["\uF187", "\uF187"], /* Private Use */ + ["\uF188", "\uF188"], /* Private Use */ + ["\uF189", "\uF189"], /* Private Use */ + ["\uF18A", "\uF18A"], /* Private Use */ + ["\uF18B", "\uF18B"], /* Private Use */ + ["\uF18C", "\uF18C"], /* Private Use */ + ["\uF18D", "\uF18D"], /* Private Use */ + ["\uF18E", "\uF18E"], /* Private Use */ + ["\uF18F", "\uF18F"], /* Private Use */ + ["\uF190", "\uF190"], /* Private Use */ + ["\uF191", "\uF191"], /* Private Use */ + ["\uF192", "\uF192"], /* Private Use */ + ["\uF193", "\uF193"], /* Private Use */ + ["\uF194", "\uF194"], /* Private Use */ + ["\uF195", "\uF195"], /* Private Use */ + ["\uF196", "\uF196"], /* Private Use */ + ["\uF197", "\uF197"], /* Private Use */ + ["\uF198", "\uF198"], /* Private Use */ + ["\uF199", "\uF199"], /* Private Use */ + ["\uF19A", "\uF19A"], /* Private Use */ + ["\uF19B", "\uF19B"], /* Private Use */ + ["\uF19C", "\uF19C"], /* Private Use */ + ["\uF19D", "\uF19D"], /* Private Use */ + ["\uF19E", "\uF19E"], /* Private Use */ + ["\uF19F", "\uF19F"], /* Private Use */ + ["\uF1A0", "\uF1A0"], /* Private Use */ + ["\uF1A1", "\uF1A1"], /* Private Use */ + ["\uF1A2", "\uF1A2"], /* Private Use */ + ["\uF1A3", "\uF1A3"], /* Private Use */ + ["\uF1A4", "\uF1A4"], /* Private Use */ + ["\uF1A5", "\uF1A5"], /* Private Use */ + ["\uF1A6", "\uF1A6"], /* Private Use */ + ["\uF1A7", "\uF1A7"], /* Private Use */ + ["\uF1A8", "\uF1A8"], /* Private Use */ + ["\uF1A9", "\uF1A9"], /* Private Use */ + ["\uF1AA", "\uF1AA"], /* Private Use */ + ["\uF1AB", "\uF1AB"], /* Private Use */ + ["\uF1AC", "\uF1AC"], /* Private Use */ + ["\uF1AD", "\uF1AD"], /* Private Use */ + ["\uF1AE", "\uF1AE"], /* Private Use */ + ["\uF1AF", "\uF1AF"], /* Private Use */ + ["\uF1B0", "\uF1B0"], /* Private Use */ + ["\uF1B1", "\uF1B1"], /* Private Use */ + ["\uF1B2", "\uF1B2"], /* Private Use */ + ["\uF1B3", "\uF1B3"], /* Private Use */ + ["\uF1B4", "\uF1B4"], /* Private Use */ + ["\uF1B5", "\uF1B5"], /* Private Use */ + ["\uF1B6", "\uF1B6"], /* Private Use */ + ["\uF1B7", "\uF1B7"], /* Private Use */ + ["\uF1B8", "\uF1B8"], /* Private Use */ + ["\uF1B9", "\uF1B9"], /* Private Use */ + ["\uF1BA", "\uF1BA"], /* Private Use */ + ["\uF1BB", "\uF1BB"], /* Private Use */ + ["\uF1BC", "\uF1BC"], /* Private Use */ + ["\uF1BD", "\uF1BD"], /* Private Use */ + ["\uF1BE", "\uF1BE"], /* Private Use */ + ["\uF1BF", "\uF1BF"], /* Private Use */ + ["\uF1C0", "\uF1C0"], /* Private Use */ + ["\uF1C1", "\uF1C1"], /* Private Use */ + ["\uF1C2", "\uF1C2"], /* Private Use */ + ["\uF1C3", "\uF1C3"], /* Private Use */ + ["\uF1C4", "\uF1C4"], /* Private Use */ + ["\uF1C5", "\uF1C5"], /* Private Use */ + ["\uF1C6", "\uF1C6"], /* Private Use */ + ["\uF1C7", "\uF1C7"], /* Private Use */ + ["\uF1C8", "\uF1C8"], /* Private Use */ + ["\uF1C9", "\uF1C9"], /* Private Use */ + ["\uF1CA", "\uF1CA"], /* Private Use */ + ["\uF1CB", "\uF1CB"], /* Private Use */ + ["\uF1CC", "\uF1CC"], /* Private Use */ + ["\uF1CD", "\uF1CD"], /* Private Use */ + ["\uF1CE", "\uF1CE"], /* Private Use */ + ["\uF1CF", "\uF1CF"], /* Private Use */ + ["\uF1D0", "\uF1D0"], /* Private Use */ + ["\uF1D1", "\uF1D1"], /* Private Use */ + ["\uF1D2", "\uF1D2"], /* Private Use */ + ["\uF1D3", "\uF1D3"], /* Private Use */ + ["\uF1D4", "\uF1D4"], /* Private Use */ + ["\uF1D5", "\uF1D5"], /* Private Use */ + ["\uF1D6", "\uF1D6"], /* Private Use */ + ["\uF1D7", "\uF1D7"], /* Private Use */ + ["\uF1D8", "\uF1D8"], /* Private Use */ + ["\uF1D9", "\uF1D9"], /* Private Use */ + ["\uF1DA", "\uF1DA"], /* Private Use */ + ["\uF1DB", "\uF1DB"], /* Private Use */ + ["\uF1DC", "\uF1DC"], /* Private Use */ + ["\uF1DD", "\uF1DD"], /* Private Use */ + ["\uF1DE", "\uF1DE"], /* Private Use */ + ["\uF1DF", "\uF1DF"], /* Private Use */ + ["\uF1E0", "\uF1E0"], /* Private Use */ + ["\uF1E1", "\uF1E1"], /* Private Use */ + ["\uF1E2", "\uF1E2"], /* Private Use */ + ["\uF1E3", "\uF1E3"], /* Private Use */ + ["\uF1E4", "\uF1E4"], /* Private Use */ + ["\uF1E5", "\uF1E5"], /* Private Use */ + ["\uF1E6", "\uF1E6"], /* Private Use */ + ["\uF1E7", "\uF1E7"], /* Private Use */ + ["\uF1E8", "\uF1E8"], /* Private Use */ + ["\uF1E9", "\uF1E9"], /* Private Use */ + ["\uF1EA", "\uF1EA"], /* Private Use */ + ["\uF1EB", "\uF1EB"], /* Private Use */ + ["\uF1EC", "\uF1EC"], /* Private Use */ + ["\uF1ED", "\uF1ED"], /* Private Use */ + ["\uF1EE", "\uF1EE"], /* Private Use */ + ["\uF1EF", "\uF1EF"], /* Private Use */ + ["\uF1F0", "\uF1F0"], /* Private Use */ + ["\uF1F1", "\uF1F1"], /* Private Use */ + ["\uF1F2", "\uF1F2"], /* Private Use */ + ["\uF1F3", "\uF1F3"], /* Private Use */ + ["\uF1F4", "\uF1F4"], /* Private Use */ + ["\uF1F5", "\uF1F5"], /* Private Use */ + ["\uF1F6", "\uF1F6"], /* Private Use */ + ["\uF1F7", "\uF1F7"], /* Private Use */ + ["\uF1F8", "\uF1F8"], /* Private Use */ + ["\uF1F9", "\uF1F9"], /* Private Use */ + ["\uF1FA", "\uF1FA"], /* Private Use */ + ["\uF1FB", "\uF1FB"], /* Private Use */ + ["\uF1FC", "\uF1FC"], /* Private Use */ + ["\uF1FD", "\uF1FD"], /* Private Use */ + ["\uF1FE", "\uF1FE"], /* Private Use */ + ["\uF1FF", "\uF1FF"], /* Private Use */ + ["\uF200", "\uF200"], /* Private Use */ + ["\uF201", "\uF201"], /* Private Use */ + ["\uF202", "\uF202"], /* Private Use */ + ["\uF203", "\uF203"], /* Private Use */ + ["\uF204", "\uF204"], /* Private Use */ + ["\uF205", "\uF205"], /* Private Use */ + ["\uF206", "\uF206"], /* Private Use */ + ["\uF207", "\uF207"], /* Private Use */ + ["\uF208", "\uF208"], /* Private Use */ + ["\uF209", "\uF209"], /* Private Use */ + ["\uF20A", "\uF20A"], /* Private Use */ + ["\uF20B", "\uF20B"], /* Private Use */ + ["\uF20C", "\uF20C"], /* Private Use */ + ["\uF20D", "\uF20D"], /* Private Use */ + ["\uF20E", "\uF20E"], /* Private Use */ + ["\uF20F", "\uF20F"], /* Private Use */ + ["\uF210", "\uF210"], /* Private Use */ + ["\uF211", "\uF211"], /* Private Use */ + ["\uF212", "\uF212"], /* Private Use */ + ["\uF213", "\uF213"], /* Private Use */ + ["\uF214", "\uF214"], /* Private Use */ + ["\uF215", "\uF215"], /* Private Use */ + ["\uF216", "\uF216"], /* Private Use */ + ["\uF217", "\uF217"], /* Private Use */ + ["\uF218", "\uF218"], /* Private Use */ + ["\uF219", "\uF219"], /* Private Use */ + ["\uF21A", "\uF21A"], /* Private Use */ + ["\uF21B", "\uF21B"], /* Private Use */ + ["\uF21C", "\uF21C"], /* Private Use */ + ["\uF21D", "\uF21D"], /* Private Use */ + ["\uF21E", "\uF21E"], /* Private Use */ + ["\uF21F", "\uF21F"], /* Private Use */ + ["\uF220", "\uF220"], /* Private Use */ + ["\uF221", "\uF221"], /* Private Use */ + ["\uF222", "\uF222"], /* Private Use */ + ["\uF223", "\uF223"], /* Private Use */ + ["\uF224", "\uF224"], /* Private Use */ + ["\uF225", "\uF225"], /* Private Use */ + ["\uF226", "\uF226"], /* Private Use */ + ["\uF227", "\uF227"], /* Private Use */ + ["\uF228", "\uF228"], /* Private Use */ + ["\uF229", "\uF229"], /* Private Use */ + ["\uF22A", "\uF22A"], /* Private Use */ + ["\uF22B", "\uF22B"], /* Private Use */ + ["\uF22C", "\uF22C"], /* Private Use */ + ["\uF22D", "\uF22D"], /* Private Use */ + ["\uF22E", "\uF22E"], /* Private Use */ + ["\uF22F", "\uF22F"], /* Private Use */ + ["\uF230", "\uF230"], /* Private Use */ + ["\uF231", "\uF231"], /* Private Use */ + ["\uF232", "\uF232"], /* Private Use */ + ["\uF233", "\uF233"], /* Private Use */ + ["\uF234", "\uF234"], /* Private Use */ + ["\uF235", "\uF235"], /* Private Use */ + ["\uF236", "\uF236"], /* Private Use */ + ["\uF237", "\uF237"], /* Private Use */ + ["\uF238", "\uF238"], /* Private Use */ + ["\uF239", "\uF239"], /* Private Use */ + ["\uF23A", "\uF23A"], /* Private Use */ + ["\uF23B", "\uF23B"], /* Private Use */ + ["\uF23C", "\uF23C"], /* Private Use */ + ["\uF23D", "\uF23D"], /* Private Use */ + ["\uF23E", "\uF23E"], /* Private Use */ + ["\uF23F", "\uF23F"], /* Private Use */ + ["\uF240", "\uF240"], /* Private Use */ + ["\uF241", "\uF241"], /* Private Use */ + ["\uF242", "\uF242"], /* Private Use */ + ["\uF243", "\uF243"], /* Private Use */ + ["\uF244", "\uF244"], /* Private Use */ + ["\uF245", "\uF245"], /* Private Use */ + ["\uF246", "\uF246"], /* Private Use */ + ["\uF247", "\uF247"], /* Private Use */ + ["\uF248", "\uF248"], /* Private Use */ + ["\uF249", "\uF249"], /* Private Use */ + ["\uF24A", "\uF24A"], /* Private Use */ + ["\uF24B", "\uF24B"], /* Private Use */ + ["\uF24C", "\uF24C"], /* Private Use */ + ["\uF24D", "\uF24D"], /* Private Use */ + ["\uF24E", "\uF24E"], /* Private Use */ + ["\uF24F", "\uF24F"], /* Private Use */ + ["\uF250", "\uF250"], /* Private Use */ + ["\uF251", "\uF251"], /* Private Use */ + ["\uF252", "\uF252"], /* Private Use */ + ["\uF253", "\uF253"], /* Private Use */ + ["\uF254", "\uF254"], /* Private Use */ + ["\uF255", "\uF255"], /* Private Use */ + ["\uF256", "\uF256"], /* Private Use */ + ["\uF257", "\uF257"], /* Private Use */ + ["\uF258", "\uF258"], /* Private Use */ + ["\uF259", "\uF259"], /* Private Use */ + ["\uF25A", "\uF25A"], /* Private Use */ + ["\uF25B", "\uF25B"], /* Private Use */ + ["\uF25C", "\uF25C"], /* Private Use */ + ["\uF25D", "\uF25D"], /* Private Use */ + ["\uF25E", "\uF25E"], /* Private Use */ + ["\uF25F", "\uF25F"], /* Private Use */ + ["\uF260", "\uF260"], /* Private Use */ + ["\uF261", "\uF261"], /* Private Use */ + ["\uF262", "\uF262"], /* Private Use */ + ["\uF263", "\uF263"], /* Private Use */ + ["\uF264", "\uF264"], /* Private Use */ + ["\uF265", "\uF265"], /* Private Use */ + ["\uF266", "\uF266"], /* Private Use */ + ["\uF267", "\uF267"], /* Private Use */ + ["\uF268", "\uF268"], /* Private Use */ + ["\uF269", "\uF269"], /* Private Use */ + ["\uF26A", "\uF26A"], /* Private Use */ + ["\uF26B", "\uF26B"], /* Private Use */ + ["\uF26C", "\uF26C"], /* Private Use */ + ["\uF26D", "\uF26D"], /* Private Use */ + ["\uF26E", "\uF26E"], /* Private Use */ + ["\uF26F", "\uF26F"], /* Private Use */ + ["\uF270", "\uF270"], /* Private Use */ + ["\uF271", "\uF271"], /* Private Use */ + ["\uF272", "\uF272"], /* Private Use */ + ["\uF273", "\uF273"], /* Private Use */ + ["\uF274", "\uF274"], /* Private Use */ + ["\uF275", "\uF275"], /* Private Use */ + ["\uF276", "\uF276"], /* Private Use */ + ["\uF277", "\uF277"], /* Private Use */ + ["\uF278", "\uF278"], /* Private Use */ + ["\uF279", "\uF279"], /* Private Use */ + ["\uF27A", "\uF27A"], /* Private Use */ + ["\uF27B", "\uF27B"], /* Private Use */ + ["\uF27C", "\uF27C"], /* Private Use */ + ["\uF27D", "\uF27D"], /* Private Use */ + ["\uF27E", "\uF27E"], /* Private Use */ + ["\uF27F", "\uF27F"], /* Private Use */ + ["\uF280", "\uF280"], /* Private Use */ + ["\uF281", "\uF281"], /* Private Use */ + ["\uF282", "\uF282"], /* Private Use */ + ["\uF283", "\uF283"], /* Private Use */ + ["\uF284", "\uF284"], /* Private Use */ + ["\uF285", "\uF285"], /* Private Use */ + ["\uF286", "\uF286"], /* Private Use */ + ["\uF287", "\uF287"], /* Private Use */ + ["\uF288", "\uF288"], /* Private Use */ + ["\uF289", "\uF289"], /* Private Use */ + ["\uF28A", "\uF28A"], /* Private Use */ + ["\uF28B", "\uF28B"], /* Private Use */ + ["\uF28C", "\uF28C"], /* Private Use */ + ["\uF28D", "\uF28D"], /* Private Use */ + ["\uF28E", "\uF28E"], /* Private Use */ + ["\uF28F", "\uF28F"], /* Private Use */ + ["\uF290", "\uF290"], /* Private Use */ + ["\uF291", "\uF291"], /* Private Use */ + ["\uF292", "\uF292"], /* Private Use */ + ["\uF293", "\uF293"], /* Private Use */ + ["\uF294", "\uF294"], /* Private Use */ + ["\uF295", "\uF295"], /* Private Use */ + ["\uF296", "\uF296"], /* Private Use */ + ["\uF297", "\uF297"], /* Private Use */ + ["\uF298", "\uF298"], /* Private Use */ + ["\uF299", "\uF299"], /* Private Use */ + ["\uF29A", "\uF29A"], /* Private Use */ + ["\uF29B", "\uF29B"], /* Private Use */ + ["\uF29C", "\uF29C"], /* Private Use */ + ["\uF29D", "\uF29D"], /* Private Use */ + ["\uF29E", "\uF29E"], /* Private Use */ + ["\uF29F", "\uF29F"], /* Private Use */ + ["\uF2A0", "\uF2A0"], /* Private Use */ + ["\uF2A1", "\uF2A1"], /* Private Use */ + ["\uF2A2", "\uF2A2"], /* Private Use */ + ["\uF2A3", "\uF2A3"], /* Private Use */ + ["\uF2A4", "\uF2A4"], /* Private Use */ + ["\uF2A5", "\uF2A5"], /* Private Use */ + ["\uF2A6", "\uF2A6"], /* Private Use */ + ["\uF2A7", "\uF2A7"], /* Private Use */ + ["\uF2A8", "\uF2A8"], /* Private Use */ + ["\uF2A9", "\uF2A9"], /* Private Use */ + ["\uF2AA", "\uF2AA"], /* Private Use */ + ["\uF2AB", "\uF2AB"], /* Private Use */ + ["\uF2AC", "\uF2AC"], /* Private Use */ + ["\uF2AD", "\uF2AD"], /* Private Use */ + ["\uF2AE", "\uF2AE"], /* Private Use */ + ["\uF2AF", "\uF2AF"], /* Private Use */ + ["\uF2B0", "\uF2B0"], /* Private Use */ + ["\uF2B1", "\uF2B1"], /* Private Use */ + ["\uF2B2", "\uF2B2"], /* Private Use */ + ["\uF2B3", "\uF2B3"], /* Private Use */ + ["\uF2B4", "\uF2B4"], /* Private Use */ + ["\uF2B5", "\uF2B5"], /* Private Use */ + ["\uF2B6", "\uF2B6"], /* Private Use */ + ["\uF2B7", "\uF2B7"], /* Private Use */ + ["\uF2B8", "\uF2B8"], /* Private Use */ + ["\uF2B9", "\uF2B9"], /* Private Use */ + ["\uF2BA", "\uF2BA"], /* Private Use */ + ["\uF2BB", "\uF2BB"], /* Private Use */ + ["\uF2BC", "\uF2BC"], /* Private Use */ + ["\uF2BD", "\uF2BD"], /* Private Use */ + ["\uF2BE", "\uF2BE"], /* Private Use */ + ["\uF2BF", "\uF2BF"], /* Private Use */ + ["\uF2C0", "\uF2C0"], /* Private Use */ + ["\uF2C1", "\uF2C1"], /* Private Use */ + ["\uF2C2", "\uF2C2"], /* Private Use */ + ["\uF2C3", "\uF2C3"], /* Private Use */ + ["\uF2C4", "\uF2C4"], /* Private Use */ + ["\uF2C5", "\uF2C5"], /* Private Use */ + ["\uF2C6", "\uF2C6"], /* Private Use */ + ["\uF2C7", "\uF2C7"], /* Private Use */ + ["\uF2C8", "\uF2C8"], /* Private Use */ + ["\uF2C9", "\uF2C9"], /* Private Use */ + ["\uF2CA", "\uF2CA"], /* Private Use */ + ["\uF2CB", "\uF2CB"], /* Private Use */ + ["\uF2CC", "\uF2CC"], /* Private Use */ + ["\uF2CD", "\uF2CD"], /* Private Use */ + ["\uF2CE", "\uF2CE"], /* Private Use */ + ["\uF2CF", "\uF2CF"], /* Private Use */ + ["\uF2D0", "\uF2D0"], /* Private Use */ + ["\uF2D1", "\uF2D1"], /* Private Use */ + ["\uF2D2", "\uF2D2"], /* Private Use */ + ["\uF2D3", "\uF2D3"], /* Private Use */ + ["\uF2D4", "\uF2D4"], /* Private Use */ + ["\uF2D5", "\uF2D5"], /* Private Use */ + ["\uF2D6", "\uF2D6"], /* Private Use */ + ["\uF2D7", "\uF2D7"], /* Private Use */ + ["\uF2D8", "\uF2D8"], /* Private Use */ + ["\uF2D9", "\uF2D9"], /* Private Use */ + ["\uF2DA", "\uF2DA"], /* Private Use */ + ["\uF2DB", "\uF2DB"], /* Private Use */ + ["\uF2DC", "\uF2DC"], /* Private Use */ + ["\uF2DD", "\uF2DD"], /* Private Use */ + ["\uF2DE", "\uF2DE"], /* Private Use */ + ["\uF2DF", "\uF2DF"], /* Private Use */ + ["\uF2E0", "\uF2E0"], /* Private Use */ + ["\uF2E1", "\uF2E1"], /* Private Use */ + ["\uF2E2", "\uF2E2"], /* Private Use */ + ["\uF2E3", "\uF2E3"], /* Private Use */ + ["\uF2E4", "\uF2E4"], /* Private Use */ + ["\uF2E5", "\uF2E5"], /* Private Use */ + ["\uF2E6", "\uF2E6"], /* Private Use */ + ["\uF2E7", "\uF2E7"], /* Private Use */ + ["\uF2E8", "\uF2E8"], /* Private Use */ + ["\uF2E9", "\uF2E9"], /* Private Use */ + ["\uF2EA", "\uF2EA"], /* Private Use */ + ["\uF2EB", "\uF2EB"], /* Private Use */ + ["\uF2EC", "\uF2EC"], /* Private Use */ + ["\uF2ED", "\uF2ED"], /* Private Use */ + ["\uF2EE", "\uF2EE"], /* Private Use */ + ["\uF2EF", "\uF2EF"], /* Private Use */ + ["\uF2F0", "\uF2F0"], /* Private Use */ + ["\uF2F1", "\uF2F1"], /* Private Use */ + ["\uF2F2", "\uF2F2"], /* Private Use */ + ["\uF2F3", "\uF2F3"], /* Private Use */ + ["\uF2F4", "\uF2F4"], /* Private Use */ + ["\uF2F5", "\uF2F5"], /* Private Use */ + ["\uF2F6", "\uF2F6"], /* Private Use */ + ["\uF2F7", "\uF2F7"], /* Private Use */ + ["\uF2F8", "\uF2F8"], /* Private Use */ + ["\uF2F9", "\uF2F9"], /* Private Use */ + ["\uF2FA", "\uF2FA"], /* Private Use */ + ["\uF2FB", "\uF2FB"], /* Private Use */ + ["\uF2FC", "\uF2FC"], /* Private Use */ + ["\uF2FD", "\uF2FD"], /* Private Use */ + ["\uF2FE", "\uF2FE"], /* Private Use */ + ["\uF2FF", "\uF2FF"], /* Private Use */ + ["\uF300", "\uF300"], /* Private Use */ + ["\uF301", "\uF301"], /* Private Use */ + ["\uF302", "\uF302"], /* Private Use */ + ["\uF303", "\uF303"], /* Private Use */ + ["\uF304", "\uF304"], /* Private Use */ + ["\uF305", "\uF305"], /* Private Use */ + ["\uF306", "\uF306"], /* Private Use */ + ["\uF307", "\uF307"], /* Private Use */ + ["\uF308", "\uF308"], /* Private Use */ + ["\uF309", "\uF309"], /* Private Use */ + ["\uF30A", "\uF30A"], /* Private Use */ + ["\uF30B", "\uF30B"], /* Private Use */ + ["\uF30C", "\uF30C"], /* Private Use */ + ["\uF30D", "\uF30D"], /* Private Use */ + ["\uF30E", "\uF30E"], /* Private Use */ + ["\uF30F", "\uF30F"], /* Private Use */ + ["\uF310", "\uF310"], /* Private Use */ + ["\uF311", "\uF311"], /* Private Use */ + ["\uF312", "\uF312"], /* Private Use */ + ["\uF313", "\uF313"], /* Private Use */ + ["\uF314", "\uF314"], /* Private Use */ + ["\uF315", "\uF315"], /* Private Use */ + ["\uF316", "\uF316"], /* Private Use */ + ["\uF317", "\uF317"], /* Private Use */ + ["\uF318", "\uF318"], /* Private Use */ + ["\uF319", "\uF319"], /* Private Use */ + ["\uF31A", "\uF31A"], /* Private Use */ + ["\uF31B", "\uF31B"], /* Private Use */ + ["\uF31C", "\uF31C"], /* Private Use */ + ["\uF31D", "\uF31D"], /* Private Use */ + ["\uF31E", "\uF31E"], /* Private Use */ + ["\uF31F", "\uF31F"], /* Private Use */ + ["\uF320", "\uF320"], /* Private Use */ + ["\uF321", "\uF321"], /* Private Use */ + ["\uF322", "\uF322"], /* Private Use */ + ["\uF323", "\uF323"], /* Private Use */ + ["\uF324", "\uF324"], /* Private Use */ + ["\uF325", "\uF325"], /* Private Use */ + ["\uF326", "\uF326"], /* Private Use */ + ["\uF327", "\uF327"], /* Private Use */ + ["\uF328", "\uF328"], /* Private Use */ + ["\uF329", "\uF329"], /* Private Use */ + ["\uF32A", "\uF32A"], /* Private Use */ + ["\uF32B", "\uF32B"], /* Private Use */ + ["\uF32C", "\uF32C"], /* Private Use */ + ["\uF32D", "\uF32D"], /* Private Use */ + ["\uF32E", "\uF32E"], /* Private Use */ + ["\uF32F", "\uF32F"], /* Private Use */ + ["\uF330", "\uF330"], /* Private Use */ + ["\uF331", "\uF331"], /* Private Use */ + ["\uF332", "\uF332"], /* Private Use */ + ["\uF333", "\uF333"], /* Private Use */ + ["\uF334", "\uF334"], /* Private Use */ + ["\uF335", "\uF335"], /* Private Use */ + ["\uF336", "\uF336"], /* Private Use */ + ["\uF337", "\uF337"], /* Private Use */ + ["\uF338", "\uF338"], /* Private Use */ + ["\uF339", "\uF339"], /* Private Use */ + ["\uF33A", "\uF33A"], /* Private Use */ + ["\uF33B", "\uF33B"], /* Private Use */ + ["\uF33C", "\uF33C"], /* Private Use */ + ["\uF33D", "\uF33D"], /* Private Use */ + ["\uF33E", "\uF33E"], /* Private Use */ + ["\uF33F", "\uF33F"], /* Private Use */ + ["\uF340", "\uF340"], /* Private Use */ + ["\uF341", "\uF341"], /* Private Use */ + ["\uF342", "\uF342"], /* Private Use */ + ["\uF343", "\uF343"], /* Private Use */ + ["\uF344", "\uF344"], /* Private Use */ + ["\uF345", "\uF345"], /* Private Use */ + ["\uF346", "\uF346"], /* Private Use */ + ["\uF347", "\uF347"], /* Private Use */ + ["\uF348", "\uF348"], /* Private Use */ + ["\uF349", "\uF349"], /* Private Use */ + ["\uF34A", "\uF34A"], /* Private Use */ + ["\uF34B", "\uF34B"], /* Private Use */ + ["\uF34C", "\uF34C"], /* Private Use */ + ["\uF34D", "\uF34D"], /* Private Use */ + ["\uF34E", "\uF34E"], /* Private Use */ + ["\uF34F", "\uF34F"], /* Private Use */ + ["\uF350", "\uF350"], /* Private Use */ + ["\uF351", "\uF351"], /* Private Use */ + ["\uF352", "\uF352"], /* Private Use */ + ["\uF353", "\uF353"], /* Private Use */ + ["\uF354", "\uF354"], /* Private Use */ + ["\uF355", "\uF355"], /* Private Use */ + ["\uF356", "\uF356"], /* Private Use */ + ["\uF357", "\uF357"], /* Private Use */ + ["\uF358", "\uF358"], /* Private Use */ + ["\uF359", "\uF359"], /* Private Use */ + ["\uF35A", "\uF35A"], /* Private Use */ + ["\uF35B", "\uF35B"], /* Private Use */ + ["\uF35C", "\uF35C"], /* Private Use */ + ["\uF35D", "\uF35D"], /* Private Use */ + ["\uF35E", "\uF35E"], /* Private Use */ + ["\uF35F", "\uF35F"], /* Private Use */ + ["\uF360", "\uF360"], /* Private Use */ + ["\uF361", "\uF361"], /* Private Use */ + ["\uF362", "\uF362"], /* Private Use */ + ["\uF363", "\uF363"], /* Private Use */ + ["\uF364", "\uF364"], /* Private Use */ + ["\uF365", "\uF365"], /* Private Use */ + ["\uF366", "\uF366"], /* Private Use */ + ["\uF367", "\uF367"], /* Private Use */ + ["\uF368", "\uF368"], /* Private Use */ + ["\uF369", "\uF369"], /* Private Use */ + ["\uF36A", "\uF36A"], /* Private Use */ + ["\uF36B", "\uF36B"], /* Private Use */ + ["\uF36C", "\uF36C"], /* Private Use */ + ["\uF36D", "\uF36D"], /* Private Use */ + ["\uF36E", "\uF36E"], /* Private Use */ + ["\uF36F", "\uF36F"], /* Private Use */ + ["\uF370", "\uF370"], /* Private Use */ + ["\uF371", "\uF371"], /* Private Use */ + ["\uF372", "\uF372"], /* Private Use */ + ["\uF373", "\uF373"], /* Private Use */ + ["\uF374", "\uF374"], /* Private Use */ + ["\uF375", "\uF375"], /* Private Use */ + ["\uF376", "\uF376"], /* Private Use */ + ["\uF377", "\uF377"], /* Private Use */ + ["\uF378", "\uF378"], /* Private Use */ + ["\uF379", "\uF379"], /* Private Use */ + ["\uF37A", "\uF37A"], /* Private Use */ + ["\uF37B", "\uF37B"], /* Private Use */ + ["\uF37C", "\uF37C"], /* Private Use */ + ["\uF37D", "\uF37D"], /* Private Use */ + ["\uF37E", "\uF37E"], /* Private Use */ + ["\uF37F", "\uF37F"], /* Private Use */ + ["\uF380", "\uF380"], /* Private Use */ + ["\uF381", "\uF381"], /* Private Use */ + ["\uF382", "\uF382"], /* Private Use */ + ["\uF383", "\uF383"], /* Private Use */ + ["\uF384", "\uF384"], /* Private Use */ + ["\uF385", "\uF385"], /* Private Use */ + ["\uF386", "\uF386"], /* Private Use */ + ["\uF387", "\uF387"], /* Private Use */ + ["\uF388", "\uF388"], /* Private Use */ + ["\uF389", "\uF389"], /* Private Use */ + ["\uF38A", "\uF38A"], /* Private Use */ + ["\uF38B", "\uF38B"], /* Private Use */ + ["\uF38C", "\uF38C"], /* Private Use */ + ["\uF38D", "\uF38D"], /* Private Use */ + ["\uF38E", "\uF38E"], /* Private Use */ + ["\uF38F", "\uF38F"], /* Private Use */ + ["\uF390", "\uF390"], /* Private Use */ + ["\uF391", "\uF391"], /* Private Use */ + ["\uF392", "\uF392"], /* Private Use */ + ["\uF393", "\uF393"], /* Private Use */ + ["\uF394", "\uF394"], /* Private Use */ + ["\uF395", "\uF395"], /* Private Use */ + ["\uF396", "\uF396"], /* Private Use */ + ["\uF397", "\uF397"], /* Private Use */ + ["\uF398", "\uF398"], /* Private Use */ + ["\uF399", "\uF399"], /* Private Use */ + ["\uF39A", "\uF39A"], /* Private Use */ + ["\uF39B", "\uF39B"], /* Private Use */ + ["\uF39C", "\uF39C"], /* Private Use */ + ["\uF39D", "\uF39D"], /* Private Use */ + ["\uF39E", "\uF39E"], /* Private Use */ + ["\uF39F", "\uF39F"], /* Private Use */ + ["\uF3A0", "\uF3A0"], /* Private Use */ + ["\uF3A1", "\uF3A1"], /* Private Use */ + ["\uF3A2", "\uF3A2"], /* Private Use */ + ["\uF3A3", "\uF3A3"], /* Private Use */ + ["\uF3A4", "\uF3A4"], /* Private Use */ + ["\uF3A5", "\uF3A5"], /* Private Use */ + ["\uF3A6", "\uF3A6"], /* Private Use */ + ["\uF3A7", "\uF3A7"], /* Private Use */ + ["\uF3A8", "\uF3A8"], /* Private Use */ + ["\uF3A9", "\uF3A9"], /* Private Use */ + ["\uF3AA", "\uF3AA"], /* Private Use */ + ["\uF3AB", "\uF3AB"], /* Private Use */ + ["\uF3AC", "\uF3AC"], /* Private Use */ + ["\uF3AD", "\uF3AD"], /* Private Use */ + ["\uF3AE", "\uF3AE"], /* Private Use */ + ["\uF3AF", "\uF3AF"], /* Private Use */ + ["\uF3B0", "\uF3B0"], /* Private Use */ + ["\uF3B1", "\uF3B1"], /* Private Use */ + ["\uF3B2", "\uF3B2"], /* Private Use */ + ["\uF3B3", "\uF3B3"], /* Private Use */ + ["\uF3B4", "\uF3B4"], /* Private Use */ + ["\uF3B5", "\uF3B5"], /* Private Use */ + ["\uF3B6", "\uF3B6"], /* Private Use */ + ["\uF3B7", "\uF3B7"], /* Private Use */ + ["\uF3B8", "\uF3B8"], /* Private Use */ + ["\uF3B9", "\uF3B9"], /* Private Use */ + ["\uF3BA", "\uF3BA"], /* Private Use */ + ["\uF3BB", "\uF3BB"], /* Private Use */ + ["\uF3BC", "\uF3BC"], /* Private Use */ + ["\uF3BD", "\uF3BD"], /* Private Use */ + ["\uF3BE", "\uF3BE"], /* Private Use */ + ["\uF3BF", "\uF3BF"], /* Private Use */ + ["\uF3C0", "\uF3C0"], /* Private Use */ + ["\uF3C1", "\uF3C1"], /* Private Use */ + ["\uF3C2", "\uF3C2"], /* Private Use */ + ["\uF3C3", "\uF3C3"], /* Private Use */ + ["\uF3C4", "\uF3C4"], /* Private Use */ + ["\uF3C5", "\uF3C5"], /* Private Use */ + ["\uF3C6", "\uF3C6"], /* Private Use */ + ["\uF3C7", "\uF3C7"], /* Private Use */ + ["\uF3C8", "\uF3C8"], /* Private Use */ + ["\uF3C9", "\uF3C9"], /* Private Use */ + ["\uF3CA", "\uF3CA"], /* Private Use */ + ["\uF3CB", "\uF3CB"], /* Private Use */ + ["\uF3CC", "\uF3CC"], /* Private Use */ + ["\uF3CD", "\uF3CD"], /* Private Use */ + ["\uF3CE", "\uF3CE"], /* Private Use */ + ["\uF3CF", "\uF3CF"], /* Private Use */ + ["\uF3D0", "\uF3D0"], /* Private Use */ + ["\uF3D1", "\uF3D1"], /* Private Use */ + ["\uF3D2", "\uF3D2"], /* Private Use */ + ["\uF3D3", "\uF3D3"], /* Private Use */ + ["\uF3D4", "\uF3D4"], /* Private Use */ + ["\uF3D5", "\uF3D5"], /* Private Use */ + ["\uF3D6", "\uF3D6"], /* Private Use */ + ["\uF3D7", "\uF3D7"], /* Private Use */ + ["\uF3D8", "\uF3D8"], /* Private Use */ + ["\uF3D9", "\uF3D9"], /* Private Use */ + ["\uF3DA", "\uF3DA"], /* Private Use */ + ["\uF3DB", "\uF3DB"], /* Private Use */ + ["\uF3DC", "\uF3DC"], /* Private Use */ + ["\uF3DD", "\uF3DD"], /* Private Use */ + ["\uF3DE", "\uF3DE"], /* Private Use */ + ["\uF3DF", "\uF3DF"], /* Private Use */ + ["\uF3E0", "\uF3E0"], /* Private Use */ + ["\uF3E1", "\uF3E1"], /* Private Use */ + ["\uF3E2", "\uF3E2"], /* Private Use */ + ["\uF3E3", "\uF3E3"], /* Private Use */ + ["\uF3E4", "\uF3E4"], /* Private Use */ + ["\uF3E5", "\uF3E5"], /* Private Use */ + ["\uF3E6", "\uF3E6"], /* Private Use */ + ["\uF3E7", "\uF3E7"], /* Private Use */ + ["\uF3E8", "\uF3E8"], /* Private Use */ + ["\uF3E9", "\uF3E9"], /* Private Use */ + ["\uF3EA", "\uF3EA"], /* Private Use */ + ["\uF3EB", "\uF3EB"], /* Private Use */ + ["\uF3EC", "\uF3EC"], /* Private Use */ + ["\uF3ED", "\uF3ED"], /* Private Use */ + ["\uF3EE", "\uF3EE"], /* Private Use */ + ["\uF3EF", "\uF3EF"], /* Private Use */ + ["\uF3F0", "\uF3F0"], /* Private Use */ + ["\uF3F1", "\uF3F1"], /* Private Use */ + ["\uF3F2", "\uF3F2"], /* Private Use */ + ["\uF3F3", "\uF3F3"], /* Private Use */ + ["\uF3F4", "\uF3F4"], /* Private Use */ + ["\uF3F5", "\uF3F5"], /* Private Use */ + ["\uF3F6", "\uF3F6"], /* Private Use */ + ["\uF3F7", "\uF3F7"], /* Private Use */ + ["\uF3F8", "\uF3F8"], /* Private Use */ + ["\uF3F9", "\uF3F9"], /* Private Use */ + ["\uF3FA", "\uF3FA"], /* Private Use */ + ["\uF3FB", "\uF3FB"], /* Private Use */ + ["\uF3FC", "\uF3FC"], /* Private Use */ + ["\uF3FD", "\uF3FD"], /* Private Use */ + ["\uF3FE", "\uF3FE"], /* Private Use */ + ["\uF3FF", "\uF3FF"], /* Private Use */ + ["\uF400", "\uF400"], /* Private Use */ + ["\uF401", "\uF401"], /* Private Use */ + ["\uF402", "\uF402"], /* Private Use */ + ["\uF403", "\uF403"], /* Private Use */ + ["\uF404", "\uF404"], /* Private Use */ + ["\uF405", "\uF405"], /* Private Use */ + ["\uF406", "\uF406"], /* Private Use */ + ["\uF407", "\uF407"], /* Private Use */ + ["\uF408", "\uF408"], /* Private Use */ + ["\uF409", "\uF409"], /* Private Use */ + ["\uF40A", "\uF40A"], /* Private Use */ + ["\uF40B", "\uF40B"], /* Private Use */ + ["\uF40C", "\uF40C"], /* Private Use */ + ["\uF40D", "\uF40D"], /* Private Use */ + ["\uF40E", "\uF40E"], /* Private Use */ + ["\uF40F", "\uF40F"], /* Private Use */ + ["\uF410", "\uF410"], /* Private Use */ + ["\uF411", "\uF411"], /* Private Use */ + ["\uF412", "\uF412"], /* Private Use */ + ["\uF413", "\uF413"], /* Private Use */ + ["\uF414", "\uF414"], /* Private Use */ + ["\uF415", "\uF415"], /* Private Use */ + ["\uF416", "\uF416"], /* Private Use */ + ["\uF417", "\uF417"], /* Private Use */ + ["\uF418", "\uF418"], /* Private Use */ + ["\uF419", "\uF419"], /* Private Use */ + ["\uF41A", "\uF41A"], /* Private Use */ + ["\uF41B", "\uF41B"], /* Private Use */ + ["\uF41C", "\uF41C"], /* Private Use */ + ["\uF41D", "\uF41D"], /* Private Use */ + ["\uF41E", "\uF41E"], /* Private Use */ + ["\uF41F", "\uF41F"], /* Private Use */ + ["\uF420", "\uF420"], /* Private Use */ + ["\uF421", "\uF421"], /* Private Use */ + ["\uF422", "\uF422"], /* Private Use */ + ["\uF423", "\uF423"], /* Private Use */ + ["\uF424", "\uF424"], /* Private Use */ + ["\uF425", "\uF425"], /* Private Use */ + ["\uF426", "\uF426"], /* Private Use */ + ["\uF427", "\uF427"], /* Private Use */ + ["\uF428", "\uF428"], /* Private Use */ + ["\uF429", "\uF429"], /* Private Use */ + ["\uF42A", "\uF42A"], /* Private Use */ + ["\uF42B", "\uF42B"], /* Private Use */ + ["\uF42C", "\uF42C"], /* Private Use */ + ["\uF42D", "\uF42D"], /* Private Use */ + ["\uF42E", "\uF42E"], /* Private Use */ + ["\uF42F", "\uF42F"], /* Private Use */ + ["\uF430", "\uF430"], /* Private Use */ + ["\uF431", "\uF431"], /* Private Use */ + ["\uF432", "\uF432"], /* Private Use */ + ["\uF433", "\uF433"], /* Private Use */ + ["\uF434", "\uF434"], /* Private Use */ + ["\uF435", "\uF435"], /* Private Use */ + ["\uF436", "\uF436"], /* Private Use */ + ["\uF437", "\uF437"], /* Private Use */ + ["\uF438", "\uF438"], /* Private Use */ + ["\uF439", "\uF439"], /* Private Use */ + ["\uF43A", "\uF43A"], /* Private Use */ + ["\uF43B", "\uF43B"], /* Private Use */ + ["\uF43C", "\uF43C"], /* Private Use */ + ["\uF43D", "\uF43D"], /* Private Use */ + ["\uF43E", "\uF43E"], /* Private Use */ + ["\uF43F", "\uF43F"], /* Private Use */ + ["\uF440", "\uF440"], /* Private Use */ + ["\uF441", "\uF441"], /* Private Use */ + ["\uF442", "\uF442"], /* Private Use */ + ["\uF443", "\uF443"], /* Private Use */ + ["\uF444", "\uF444"], /* Private Use */ + ["\uF445", "\uF445"], /* Private Use */ + ["\uF446", "\uF446"], /* Private Use */ + ["\uF447", "\uF447"], /* Private Use */ + ["\uF448", "\uF448"], /* Private Use */ + ["\uF449", "\uF449"], /* Private Use */ + ["\uF44A", "\uF44A"], /* Private Use */ + ["\uF44B", "\uF44B"], /* Private Use */ + ["\uF44C", "\uF44C"], /* Private Use */ + ["\uF44D", "\uF44D"], /* Private Use */ + ["\uF44E", "\uF44E"], /* Private Use */ + ["\uF44F", "\uF44F"], /* Private Use */ + ["\uF450", "\uF450"], /* Private Use */ + ["\uF451", "\uF451"], /* Private Use */ + ["\uF452", "\uF452"], /* Private Use */ + ["\uF453", "\uF453"], /* Private Use */ + ["\uF454", "\uF454"], /* Private Use */ + ["\uF455", "\uF455"], /* Private Use */ + ["\uF456", "\uF456"], /* Private Use */ + ["\uF457", "\uF457"], /* Private Use */ + ["\uF458", "\uF458"], /* Private Use */ + ["\uF459", "\uF459"], /* Private Use */ + ["\uF45A", "\uF45A"], /* Private Use */ + ["\uF45B", "\uF45B"], /* Private Use */ + ["\uF45C", "\uF45C"], /* Private Use */ + ["\uF45D", "\uF45D"], /* Private Use */ + ["\uF45E", "\uF45E"], /* Private Use */ + ["\uF45F", "\uF45F"], /* Private Use */ + ["\uF460", "\uF460"], /* Private Use */ + ["\uF461", "\uF461"], /* Private Use */ + ["\uF462", "\uF462"], /* Private Use */ + ["\uF463", "\uF463"], /* Private Use */ + ["\uF464", "\uF464"], /* Private Use */ + ["\uF465", "\uF465"], /* Private Use */ + ["\uF466", "\uF466"], /* Private Use */ + ["\uF467", "\uF467"], /* Private Use */ + ["\uF468", "\uF468"], /* Private Use */ + ["\uF469", "\uF469"], /* Private Use */ + ["\uF46A", "\uF46A"], /* Private Use */ + ["\uF46B", "\uF46B"], /* Private Use */ + ["\uF46C", "\uF46C"], /* Private Use */ + ["\uF46D", "\uF46D"], /* Private Use */ + ["\uF46E", "\uF46E"], /* Private Use */ + ["\uF46F", "\uF46F"], /* Private Use */ + ["\uF470", "\uF470"], /* Private Use */ + ["\uF471", "\uF471"], /* Private Use */ + ["\uF472", "\uF472"], /* Private Use */ + ["\uF473", "\uF473"], /* Private Use */ + ["\uF474", "\uF474"], /* Private Use */ + ["\uF475", "\uF475"], /* Private Use */ + ["\uF476", "\uF476"], /* Private Use */ + ["\uF477", "\uF477"], /* Private Use */ + ["\uF478", "\uF478"], /* Private Use */ + ["\uF479", "\uF479"], /* Private Use */ + ["\uF47A", "\uF47A"], /* Private Use */ + ["\uF47B", "\uF47B"], /* Private Use */ + ["\uF47C", "\uF47C"], /* Private Use */ + ["\uF47D", "\uF47D"], /* Private Use */ + ["\uF47E", "\uF47E"], /* Private Use */ + ["\uF47F", "\uF47F"], /* Private Use */ + ["\uF480", "\uF480"], /* Private Use */ + ["\uF481", "\uF481"], /* Private Use */ + ["\uF482", "\uF482"], /* Private Use */ + ["\uF483", "\uF483"], /* Private Use */ + ["\uF484", "\uF484"], /* Private Use */ + ["\uF485", "\uF485"], /* Private Use */ + ["\uF486", "\uF486"], /* Private Use */ + ["\uF487", "\uF487"], /* Private Use */ + ["\uF488", "\uF488"], /* Private Use */ + ["\uF489", "\uF489"], /* Private Use */ + ["\uF48A", "\uF48A"], /* Private Use */ + ["\uF48B", "\uF48B"], /* Private Use */ + ["\uF48C", "\uF48C"], /* Private Use */ + ["\uF48D", "\uF48D"], /* Private Use */ + ["\uF48E", "\uF48E"], /* Private Use */ + ["\uF48F", "\uF48F"], /* Private Use */ + ["\uF490", "\uF490"], /* Private Use */ + ["\uF491", "\uF491"], /* Private Use */ + ["\uF492", "\uF492"], /* Private Use */ + ["\uF493", "\uF493"], /* Private Use */ + ["\uF494", "\uF494"], /* Private Use */ + ["\uF495", "\uF495"], /* Private Use */ + ["\uF496", "\uF496"], /* Private Use */ + ["\uF497", "\uF497"], /* Private Use */ + ["\uF498", "\uF498"], /* Private Use */ + ["\uF499", "\uF499"], /* Private Use */ + ["\uF49A", "\uF49A"], /* Private Use */ + ["\uF49B", "\uF49B"], /* Private Use */ + ["\uF49C", "\uF49C"], /* Private Use */ + ["\uF49D", "\uF49D"], /* Private Use */ + ["\uF49E", "\uF49E"], /* Private Use */ + ["\uF49F", "\uF49F"], /* Private Use */ + ["\uF4A0", "\uF4A0"], /* Private Use */ + ["\uF4A1", "\uF4A1"], /* Private Use */ + ["\uF4A2", "\uF4A2"], /* Private Use */ + ["\uF4A3", "\uF4A3"], /* Private Use */ + ["\uF4A4", "\uF4A4"], /* Private Use */ + ["\uF4A5", "\uF4A5"], /* Private Use */ + ["\uF4A6", "\uF4A6"], /* Private Use */ + ["\uF4A7", "\uF4A7"], /* Private Use */ + ["\uF4A8", "\uF4A8"], /* Private Use */ + ["\uF4A9", "\uF4A9"], /* Private Use */ + ["\uF4AA", "\uF4AA"], /* Private Use */ + ["\uF4AB", "\uF4AB"], /* Private Use */ + ["\uF4AC", "\uF4AC"], /* Private Use */ + ["\uF4AD", "\uF4AD"], /* Private Use */ + ["\uF4AE", "\uF4AE"], /* Private Use */ + ["\uF4AF", "\uF4AF"], /* Private Use */ + ["\uF4B0", "\uF4B0"], /* Private Use */ + ["\uF4B1", "\uF4B1"], /* Private Use */ + ["\uF4B2", "\uF4B2"], /* Private Use */ + ["\uF4B3", "\uF4B3"], /* Private Use */ + ["\uF4B4", "\uF4B4"], /* Private Use */ + ["\uF4B5", "\uF4B5"], /* Private Use */ + ["\uF4B6", "\uF4B6"], /* Private Use */ + ["\uF4B7", "\uF4B7"], /* Private Use */ + ["\uF4B8", "\uF4B8"], /* Private Use */ + ["\uF4B9", "\uF4B9"], /* Private Use */ + ["\uF4BA", "\uF4BA"], /* Private Use */ + ["\uF4BB", "\uF4BB"], /* Private Use */ + ["\uF4BC", "\uF4BC"], /* Private Use */ + ["\uF4BD", "\uF4BD"], /* Private Use */ + ["\uF4BE", "\uF4BE"], /* Private Use */ + ["\uF4BF", "\uF4BF"], /* Private Use */ + ["\uF4C0", "\uF4C0"], /* Private Use */ + ["\uF4C1", "\uF4C1"], /* Private Use */ + ["\uF4C2", "\uF4C2"], /* Private Use */ + ["\uF4C3", "\uF4C3"], /* Private Use */ + ["\uF4C4", "\uF4C4"], /* Private Use */ + ["\uF4C5", "\uF4C5"], /* Private Use */ + ["\uF4C6", "\uF4C6"], /* Private Use */ + ["\uF4C7", "\uF4C7"], /* Private Use */ + ["\uF4C8", "\uF4C8"], /* Private Use */ + ["\uF4C9", "\uF4C9"], /* Private Use */ + ["\uF4CA", "\uF4CA"], /* Private Use */ + ["\uF4CB", "\uF4CB"], /* Private Use */ + ["\uF4CC", "\uF4CC"], /* Private Use */ + ["\uF4CD", "\uF4CD"], /* Private Use */ + ["\uF4CE", "\uF4CE"], /* Private Use */ + ["\uF4CF", "\uF4CF"], /* Private Use */ + ["\uF4D0", "\uF4D0"], /* Private Use */ + ["\uF4D1", "\uF4D1"], /* Private Use */ + ["\uF4D2", "\uF4D2"], /* Private Use */ + ["\uF4D3", "\uF4D3"], /* Private Use */ + ["\uF4D4", "\uF4D4"], /* Private Use */ + ["\uF4D5", "\uF4D5"], /* Private Use */ + ["\uF4D6", "\uF4D6"], /* Private Use */ + ["\uF4D7", "\uF4D7"], /* Private Use */ + ["\uF4D8", "\uF4D8"], /* Private Use */ + ["\uF4D9", "\uF4D9"], /* Private Use */ + ["\uF4DA", "\uF4DA"], /* Private Use */ + ["\uF4DB", "\uF4DB"], /* Private Use */ + ["\uF4DC", "\uF4DC"], /* Private Use */ + ["\uF4DD", "\uF4DD"], /* Private Use */ + ["\uF4DE", "\uF4DE"], /* Private Use */ + ["\uF4DF", "\uF4DF"], /* Private Use */ + ["\uF4E0", "\uF4E0"], /* Private Use */ + ["\uF4E1", "\uF4E1"], /* Private Use */ + ["\uF4E2", "\uF4E2"], /* Private Use */ + ["\uF4E3", "\uF4E3"], /* Private Use */ + ["\uF4E4", "\uF4E4"], /* Private Use */ + ["\uF4E5", "\uF4E5"], /* Private Use */ + ["\uF4E6", "\uF4E6"], /* Private Use */ + ["\uF4E7", "\uF4E7"], /* Private Use */ + ["\uF4E8", "\uF4E8"], /* Private Use */ + ["\uF4E9", "\uF4E9"], /* Private Use */ + ["\uF4EA", "\uF4EA"], /* Private Use */ + ["\uF4EB", "\uF4EB"], /* Private Use */ + ["\uF4EC", "\uF4EC"], /* Private Use */ + ["\uF4ED", "\uF4ED"], /* Private Use */ + ["\uF4EE", "\uF4EE"], /* Private Use */ + ["\uF4EF", "\uF4EF"], /* Private Use */ + ["\uF4F0", "\uF4F0"], /* Private Use */ + ["\uF4F1", "\uF4F1"], /* Private Use */ + ["\uF4F2", "\uF4F2"], /* Private Use */ + ["\uF4F3", "\uF4F3"], /* Private Use */ + ["\uF4F4", "\uF4F4"], /* Private Use */ + ["\uF4F5", "\uF4F5"], /* Private Use */ + ["\uF4F6", "\uF4F6"], /* Private Use */ + ["\uF4F7", "\uF4F7"], /* Private Use */ + ["\uF4F8", "\uF4F8"], /* Private Use */ + ["\uF4F9", "\uF4F9"], /* Private Use */ + ["\uF4FA", "\uF4FA"], /* Private Use */ + ["\uF4FB", "\uF4FB"], /* Private Use */ + ["\uF4FC", "\uF4FC"], /* Private Use */ + ["\uF4FD", "\uF4FD"], /* Private Use */ + ["\uF4FE", "\uF4FE"], /* Private Use */ + ["\uF4FF", "\uF4FF"], /* Private Use */ + ["\uF500", "\uF500"], /* Private Use */ + ["\uF501", "\uF501"], /* Private Use */ + ["\uF502", "\uF502"], /* Private Use */ + ["\uF503", "\uF503"], /* Private Use */ + ["\uF504", "\uF504"], /* Private Use */ + ["\uF505", "\uF505"], /* Private Use */ + ["\uF506", "\uF506"], /* Private Use */ + ["\uF507", "\uF507"], /* Private Use */ + ["\uF508", "\uF508"], /* Private Use */ + ["\uF509", "\uF509"], /* Private Use */ + ["\uF50A", "\uF50A"], /* Private Use */ + ["\uF50B", "\uF50B"], /* Private Use */ + ["\uF50C", "\uF50C"], /* Private Use */ + ["\uF50D", "\uF50D"], /* Private Use */ + ["\uF50E", "\uF50E"], /* Private Use */ + ["\uF50F", "\uF50F"], /* Private Use */ + ["\uF510", "\uF510"], /* Private Use */ + ["\uF511", "\uF511"], /* Private Use */ + ["\uF512", "\uF512"], /* Private Use */ + ["\uF513", "\uF513"], /* Private Use */ + ["\uF514", "\uF514"], /* Private Use */ + ["\uF515", "\uF515"], /* Private Use */ + ["\uF516", "\uF516"], /* Private Use */ + ["\uF517", "\uF517"], /* Private Use */ + ["\uF518", "\uF518"], /* Private Use */ + ["\uF519", "\uF519"], /* Private Use */ + ["\uF51A", "\uF51A"], /* Private Use */ + ["\uF51B", "\uF51B"], /* Private Use */ + ["\uF51C", "\uF51C"], /* Private Use */ + ["\uF51D", "\uF51D"], /* Private Use */ + ["\uF51E", "\uF51E"], /* Private Use */ + ["\uF51F", "\uF51F"], /* Private Use */ + ["\uF520", "\uF520"], /* Private Use */ + ["\uF521", "\uF521"], /* Private Use */ + ["\uF522", "\uF522"], /* Private Use */ + ["\uF523", "\uF523"], /* Private Use */ + ["\uF524", "\uF524"], /* Private Use */ + ["\uF525", "\uF525"], /* Private Use */ + ["\uF526", "\uF526"], /* Private Use */ + ["\uF527", "\uF527"], /* Private Use */ + ["\uF528", "\uF528"], /* Private Use */ + ["\uF529", "\uF529"], /* Private Use */ + ["\uF52A", "\uF52A"], /* Private Use */ + ["\uF52B", "\uF52B"], /* Private Use */ + ["\uF52C", "\uF52C"], /* Private Use */ + ["\uF52D", "\uF52D"], /* Private Use */ + ["\uF52E", "\uF52E"], /* Private Use */ + ["\uF52F", "\uF52F"], /* Private Use */ + ["\uF530", "\uF530"], /* Private Use */ + ["\uF531", "\uF531"], /* Private Use */ + ["\uF532", "\uF532"], /* Private Use */ + ["\uF533", "\uF533"], /* Private Use */ + ["\uF534", "\uF534"], /* Private Use */ + ["\uF535", "\uF535"], /* Private Use */ + ["\uF536", "\uF536"], /* Private Use */ + ["\uF537", "\uF537"], /* Private Use */ + ["\uF538", "\uF538"], /* Private Use */ + ["\uF539", "\uF539"], /* Private Use */ + ["\uF53A", "\uF53A"], /* Private Use */ + ["\uF53B", "\uF53B"], /* Private Use */ + ["\uF53C", "\uF53C"], /* Private Use */ + ["\uF53D", "\uF53D"], /* Private Use */ + ["\uF53E", "\uF53E"], /* Private Use */ + ["\uF53F", "\uF53F"], /* Private Use */ + ["\uF540", "\uF540"], /* Private Use */ + ["\uF541", "\uF541"], /* Private Use */ + ["\uF542", "\uF542"], /* Private Use */ + ["\uF543", "\uF543"], /* Private Use */ + ["\uF544", "\uF544"], /* Private Use */ + ["\uF545", "\uF545"], /* Private Use */ + ["\uF546", "\uF546"], /* Private Use */ + ["\uF547", "\uF547"], /* Private Use */ + ["\uF548", "\uF548"], /* Private Use */ + ["\uF549", "\uF549"], /* Private Use */ + ["\uF54A", "\uF54A"], /* Private Use */ + ["\uF54B", "\uF54B"], /* Private Use */ + ["\uF54C", "\uF54C"], /* Private Use */ + ["\uF54D", "\uF54D"], /* Private Use */ + ["\uF54E", "\uF54E"], /* Private Use */ + ["\uF54F", "\uF54F"], /* Private Use */ + ["\uF550", "\uF550"], /* Private Use */ + ["\uF551", "\uF551"], /* Private Use */ + ["\uF552", "\uF552"], /* Private Use */ + ["\uF553", "\uF553"], /* Private Use */ + ["\uF554", "\uF554"], /* Private Use */ + ["\uF555", "\uF555"], /* Private Use */ + ["\uF556", "\uF556"], /* Private Use */ + ["\uF557", "\uF557"], /* Private Use */ + ["\uF558", "\uF558"], /* Private Use */ + ["\uF559", "\uF559"], /* Private Use */ + ["\uF55A", "\uF55A"], /* Private Use */ + ["\uF55B", "\uF55B"], /* Private Use */ + ["\uF55C", "\uF55C"], /* Private Use */ + ["\uF55D", "\uF55D"], /* Private Use */ + ["\uF55E", "\uF55E"], /* Private Use */ + ["\uF55F", "\uF55F"], /* Private Use */ + ["\uF560", "\uF560"], /* Private Use */ + ["\uF561", "\uF561"], /* Private Use */ + ["\uF562", "\uF562"], /* Private Use */ + ["\uF563", "\uF563"], /* Private Use */ + ["\uF564", "\uF564"], /* Private Use */ + ["\uF565", "\uF565"], /* Private Use */ + ["\uF566", "\uF566"], /* Private Use */ + ["\uF567", "\uF567"], /* Private Use */ + ["\uF568", "\uF568"], /* Private Use */ + ["\uF569", "\uF569"], /* Private Use */ + ["\uF56A", "\uF56A"], /* Private Use */ + ["\uF56B", "\uF56B"], /* Private Use */ + ["\uF56C", "\uF56C"], /* Private Use */ + ["\uF56D", "\uF56D"], /* Private Use */ + ["\uF56E", "\uF56E"], /* Private Use */ + ["\uF56F", "\uF56F"], /* Private Use */ + ["\uF570", "\uF570"], /* Private Use */ + ["\uF571", "\uF571"], /* Private Use */ + ["\uF572", "\uF572"], /* Private Use */ + ["\uF573", "\uF573"], /* Private Use */ + ["\uF574", "\uF574"], /* Private Use */ + ["\uF575", "\uF575"], /* Private Use */ + ["\uF576", "\uF576"], /* Private Use */ + ["\uF577", "\uF577"], /* Private Use */ + ["\uF578", "\uF578"], /* Private Use */ + ["\uF579", "\uF579"], /* Private Use */ + ["\uF57A", "\uF57A"], /* Private Use */ + ["\uF57B", "\uF57B"], /* Private Use */ + ["\uF57C", "\uF57C"], /* Private Use */ + ["\uF57D", "\uF57D"], /* Private Use */ + ["\uF57E", "\uF57E"], /* Private Use */ + ["\uF57F", "\uF57F"], /* Private Use */ + ["\uF580", "\uF580"], /* Private Use */ + ["\uF581", "\uF581"], /* Private Use */ + ["\uF582", "\uF582"], /* Private Use */ + ["\uF583", "\uF583"], /* Private Use */ + ["\uF584", "\uF584"], /* Private Use */ + ["\uF585", "\uF585"], /* Private Use */ + ["\uF586", "\uF586"], /* Private Use */ + ["\uF587", "\uF587"], /* Private Use */ + ["\uF588", "\uF588"], /* Private Use */ + ["\uF589", "\uF589"], /* Private Use */ + ["\uF58A", "\uF58A"], /* Private Use */ + ["\uF58B", "\uF58B"], /* Private Use */ + ["\uF58C", "\uF58C"], /* Private Use */ + ["\uF58D", "\uF58D"], /* Private Use */ + ["\uF58E", "\uF58E"], /* Private Use */ + ["\uF58F", "\uF58F"], /* Private Use */ + ["\uF590", "\uF590"], /* Private Use */ + ["\uF591", "\uF591"], /* Private Use */ + ["\uF592", "\uF592"], /* Private Use */ + ["\uF593", "\uF593"], /* Private Use */ + ["\uF594", "\uF594"], /* Private Use */ + ["\uF595", "\uF595"], /* Private Use */ + ["\uF596", "\uF596"], /* Private Use */ + ["\uF597", "\uF597"], /* Private Use */ + ["\uF598", "\uF598"], /* Private Use */ + ["\uF599", "\uF599"], /* Private Use */ + ["\uF59A", "\uF59A"], /* Private Use */ + ["\uF59B", "\uF59B"], /* Private Use */ + ["\uF59C", "\uF59C"], /* Private Use */ + ["\uF59D", "\uF59D"], /* Private Use */ + ["\uF59E", "\uF59E"], /* Private Use */ + ["\uF59F", "\uF59F"], /* Private Use */ + ["\uF5A0", "\uF5A0"], /* Private Use */ + ["\uF5A1", "\uF5A1"], /* Private Use */ + ["\uF5A2", "\uF5A2"], /* Private Use */ + ["\uF5A3", "\uF5A3"], /* Private Use */ + ["\uF5A4", "\uF5A4"], /* Private Use */ + ["\uF5A5", "\uF5A5"], /* Private Use */ + ["\uF5A6", "\uF5A6"], /* Private Use */ + ["\uF5A7", "\uF5A7"], /* Private Use */ + ["\uF5A8", "\uF5A8"], /* Private Use */ + ["\uF5A9", "\uF5A9"], /* Private Use */ + ["\uF5AA", "\uF5AA"], /* Private Use */ + ["\uF5AB", "\uF5AB"], /* Private Use */ + ["\uF5AC", "\uF5AC"], /* Private Use */ + ["\uF5AD", "\uF5AD"], /* Private Use */ + ["\uF5AE", "\uF5AE"], /* Private Use */ + ["\uF5AF", "\uF5AF"], /* Private Use */ + ["\uF5B0", "\uF5B0"], /* Private Use */ + ["\uF5B1", "\uF5B1"], /* Private Use */ + ["\uF5B2", "\uF5B2"], /* Private Use */ + ["\uF5B3", "\uF5B3"], /* Private Use */ + ["\uF5B4", "\uF5B4"], /* Private Use */ + ["\uF5B5", "\uF5B5"], /* Private Use */ + ["\uF5B6", "\uF5B6"], /* Private Use */ + ["\uF5B7", "\uF5B7"], /* Private Use */ + ["\uF5B8", "\uF5B8"], /* Private Use */ + ["\uF5B9", "\uF5B9"], /* Private Use */ + ["\uF5BA", "\uF5BA"], /* Private Use */ + ["\uF5BB", "\uF5BB"], /* Private Use */ + ["\uF5BC", "\uF5BC"], /* Private Use */ + ["\uF5BD", "\uF5BD"], /* Private Use */ + ["\uF5BE", "\uF5BE"], /* Private Use */ + ["\uF5BF", "\uF5BF"], /* Private Use */ + ["\uF5C0", "\uF5C0"], /* Private Use */ + ["\uF5C1", "\uF5C1"], /* Private Use */ + ["\uF5C2", "\uF5C2"], /* Private Use */ + ["\uF5C3", "\uF5C3"], /* Private Use */ + ["\uF5C4", "\uF5C4"], /* Private Use */ + ["\uF5C5", "\uF5C5"], /* Private Use */ + ["\uF5C6", "\uF5C6"], /* Private Use */ + ["\uF5C7", "\uF5C7"], /* Private Use */ + ["\uF5C8", "\uF5C8"], /* Private Use */ + ["\uF5C9", "\uF5C9"], /* Private Use */ + ["\uF5CA", "\uF5CA"], /* Private Use */ + ["\uF5CB", "\uF5CB"], /* Private Use */ + ["\uF5CC", "\uF5CC"], /* Private Use */ + ["\uF5CD", "\uF5CD"], /* Private Use */ + ["\uF5CE", "\uF5CE"], /* Private Use */ + ["\uF5CF", "\uF5CF"], /* Private Use */ + ["\uF5D0", "\uF5D0"], /* Private Use */ + ["\uF5D1", "\uF5D1"], /* Private Use */ + ["\uF5D2", "\uF5D2"], /* Private Use */ + ["\uF5D3", "\uF5D3"], /* Private Use */ + ["\uF5D4", "\uF5D4"], /* Private Use */ + ["\uF5D5", "\uF5D5"], /* Private Use */ + ["\uF5D6", "\uF5D6"], /* Private Use */ + ["\uF5D7", "\uF5D7"], /* Private Use */ + ["\uF5D8", "\uF5D8"], /* Private Use */ + ["\uF5D9", "\uF5D9"], /* Private Use */ + ["\uF5DA", "\uF5DA"], /* Private Use */ + ["\uF5DB", "\uF5DB"], /* Private Use */ + ["\uF5DC", "\uF5DC"], /* Private Use */ + ["\uF5DD", "\uF5DD"], /* Private Use */ + ["\uF5DE", "\uF5DE"], /* Private Use */ + ["\uF5DF", "\uF5DF"], /* Private Use */ + ["\uF5E0", "\uF5E0"], /* Private Use */ + ["\uF5E1", "\uF5E1"], /* Private Use */ + ["\uF5E2", "\uF5E2"], /* Private Use */ + ["\uF5E3", "\uF5E3"], /* Private Use */ + ["\uF5E4", "\uF5E4"], /* Private Use */ + ["\uF5E5", "\uF5E5"], /* Private Use */ + ["\uF5E6", "\uF5E6"], /* Private Use */ + ["\uF5E7", "\uF5E7"], /* Private Use */ + ["\uF5E8", "\uF5E8"], /* Private Use */ + ["\uF5E9", "\uF5E9"], /* Private Use */ + ["\uF5EA", "\uF5EA"], /* Private Use */ + ["\uF5EB", "\uF5EB"], /* Private Use */ + ["\uF5EC", "\uF5EC"], /* Private Use */ + ["\uF5ED", "\uF5ED"], /* Private Use */ + ["\uF5EE", "\uF5EE"], /* Private Use */ + ["\uF5EF", "\uF5EF"], /* Private Use */ + ["\uF5F0", "\uF5F0"], /* Private Use */ + ["\uF5F1", "\uF5F1"], /* Private Use */ + ["\uF5F2", "\uF5F2"], /* Private Use */ + ["\uF5F3", "\uF5F3"], /* Private Use */ + ["\uF5F4", "\uF5F4"], /* Private Use */ + ["\uF5F5", "\uF5F5"], /* Private Use */ + ["\uF5F6", "\uF5F6"], /* Private Use */ + ["\uF5F7", "\uF5F7"], /* Private Use */ + ["\uF5F8", "\uF5F8"], /* Private Use */ + ["\uF5F9", "\uF5F9"], /* Private Use */ + ["\uF5FA", "\uF5FA"], /* Private Use */ + ["\uF5FB", "\uF5FB"], /* Private Use */ + ["\uF5FC", "\uF5FC"], /* Private Use */ + ["\uF5FD", "\uF5FD"], /* Private Use */ + ["\uF5FE", "\uF5FE"], /* Private Use */ + ["\uF5FF", "\uF5FF"], /* Private Use */ + ["\uF600", "\uF600"], /* Private Use */ + ["\uF601", "\uF601"], /* Private Use */ + ["\uF602", "\uF602"], /* Private Use */ + ["\uF603", "\uF603"], /* Private Use */ + ["\uF604", "\uF604"], /* Private Use */ + ["\uF605", "\uF605"], /* Private Use */ + ["\uF606", "\uF606"], /* Private Use */ + ["\uF607", "\uF607"], /* Private Use */ + ["\uF608", "\uF608"], /* Private Use */ + ["\uF609", "\uF609"], /* Private Use */ + ["\uF60A", "\uF60A"], /* Private Use */ + ["\uF60B", "\uF60B"], /* Private Use */ + ["\uF60C", "\uF60C"], /* Private Use */ + ["\uF60D", "\uF60D"], /* Private Use */ + ["\uF60E", "\uF60E"], /* Private Use */ + ["\uF60F", "\uF60F"], /* Private Use */ + ["\uF610", "\uF610"], /* Private Use */ + ["\uF611", "\uF611"], /* Private Use */ + ["\uF612", "\uF612"], /* Private Use */ + ["\uF613", "\uF613"], /* Private Use */ + ["\uF614", "\uF614"], /* Private Use */ + ["\uF615", "\uF615"], /* Private Use */ + ["\uF616", "\uF616"], /* Private Use */ + ["\uF617", "\uF617"], /* Private Use */ + ["\uF618", "\uF618"], /* Private Use */ + ["\uF619", "\uF619"], /* Private Use */ + ["\uF61A", "\uF61A"], /* Private Use */ + ["\uF61B", "\uF61B"], /* Private Use */ + ["\uF61C", "\uF61C"], /* Private Use */ + ["\uF61D", "\uF61D"], /* Private Use */ + ["\uF61E", "\uF61E"], /* Private Use */ + ["\uF61F", "\uF61F"], /* Private Use */ + ["\uF620", "\uF620"], /* Private Use */ + ["\uF621", "\uF621"], /* Private Use */ + ["\uF622", "\uF622"], /* Private Use */ + ["\uF623", "\uF623"], /* Private Use */ + ["\uF624", "\uF624"], /* Private Use */ + ["\uF625", "\uF625"], /* Private Use */ + ["\uF626", "\uF626"], /* Private Use */ + ["\uF627", "\uF627"], /* Private Use */ + ["\uF628", "\uF628"], /* Private Use */ + ["\uF629", "\uF629"], /* Private Use */ + ["\uF62A", "\uF62A"], /* Private Use */ + ["\uF62B", "\uF62B"], /* Private Use */ + ["\uF62C", "\uF62C"], /* Private Use */ + ["\uF62D", "\uF62D"], /* Private Use */ + ["\uF62E", "\uF62E"], /* Private Use */ + ["\uF62F", "\uF62F"], /* Private Use */ + ["\uF630", "\uF630"], /* Private Use */ + ["\uF631", "\uF631"], /* Private Use */ + ["\uF632", "\uF632"], /* Private Use */ + ["\uF633", "\uF633"], /* Private Use */ + ["\uF634", "\uF634"], /* Private Use */ + ["\uF635", "\uF635"], /* Private Use */ + ["\uF636", "\uF636"], /* Private Use */ + ["\uF637", "\uF637"], /* Private Use */ + ["\uF638", "\uF638"], /* Private Use */ + ["\uF639", "\uF639"], /* Private Use */ + ["\uF63A", "\uF63A"], /* Private Use */ + ["\uF63B", "\uF63B"], /* Private Use */ + ["\uF63C", "\uF63C"], /* Private Use */ + ["\uF63D", "\uF63D"], /* Private Use */ + ["\uF63E", "\uF63E"], /* Private Use */ + ["\uF63F", "\uF63F"], /* Private Use */ + ["\uF640", "\uF640"], /* Private Use */ + ["\uF641", "\uF641"], /* Private Use */ + ["\uF642", "\uF642"], /* Private Use */ + ["\uF643", "\uF643"], /* Private Use */ + ["\uF644", "\uF644"], /* Private Use */ + ["\uF645", "\uF645"], /* Private Use */ + ["\uF646", "\uF646"], /* Private Use */ + ["\uF647", "\uF647"], /* Private Use */ + ["\uF648", "\uF648"], /* Private Use */ + ["\uF649", "\uF649"], /* Private Use */ + ["\uF64A", "\uF64A"], /* Private Use */ + ["\uF64B", "\uF64B"], /* Private Use */ + ["\uF64C", "\uF64C"], /* Private Use */ + ["\uF64D", "\uF64D"], /* Private Use */ + ["\uF64E", "\uF64E"], /* Private Use */ + ["\uF64F", "\uF64F"], /* Private Use */ + ["\uF650", "\uF650"], /* Private Use */ + ["\uF651", "\uF651"], /* Private Use */ + ["\uF652", "\uF652"], /* Private Use */ + ["\uF653", "\uF653"], /* Private Use */ + ["\uF654", "\uF654"], /* Private Use */ + ["\uF655", "\uF655"], /* Private Use */ + ["\uF656", "\uF656"], /* Private Use */ + ["\uF657", "\uF657"], /* Private Use */ + ["\uF658", "\uF658"], /* Private Use */ + ["\uF659", "\uF659"], /* Private Use */ + ["\uF65A", "\uF65A"], /* Private Use */ + ["\uF65B", "\uF65B"], /* Private Use */ + ["\uF65C", "\uF65C"], /* Private Use */ + ["\uF65D", "\uF65D"], /* Private Use */ + ["\uF65E", "\uF65E"], /* Private Use */ + ["\uF65F", "\uF65F"], /* Private Use */ + ["\uF660", "\uF660"], /* Private Use */ + ["\uF661", "\uF661"], /* Private Use */ + ["\uF662", "\uF662"], /* Private Use */ + ["\uF663", "\uF663"], /* Private Use */ + ["\uF664", "\uF664"], /* Private Use */ + ["\uF665", "\uF665"], /* Private Use */ + ["\uF666", "\uF666"], /* Private Use */ + ["\uF667", "\uF667"], /* Private Use */ + ["\uF668", "\uF668"], /* Private Use */ + ["\uF669", "\uF669"], /* Private Use */ + ["\uF66A", "\uF66A"], /* Private Use */ + ["\uF66B", "\uF66B"], /* Private Use */ + ["\uF66C", "\uF66C"], /* Private Use */ + ["\uF66D", "\uF66D"], /* Private Use */ + ["\uF66E", "\uF66E"], /* Private Use */ + ["\uF66F", "\uF66F"], /* Private Use */ + ["\uF670", "\uF670"], /* Private Use */ + ["\uF671", "\uF671"], /* Private Use */ + ["\uF672", "\uF672"], /* Private Use */ + ["\uF673", "\uF673"], /* Private Use */ + ["\uF674", "\uF674"], /* Private Use */ + ["\uF675", "\uF675"], /* Private Use */ + ["\uF676", "\uF676"], /* Private Use */ + ["\uF677", "\uF677"], /* Private Use */ + ["\uF678", "\uF678"], /* Private Use */ + ["\uF679", "\uF679"], /* Private Use */ + ["\uF67A", "\uF67A"], /* Private Use */ + ["\uF67B", "\uF67B"], /* Private Use */ + ["\uF67C", "\uF67C"], /* Private Use */ + ["\uF67D", "\uF67D"], /* Private Use */ + ["\uF67E", "\uF67E"], /* Private Use */ + ["\uF67F", "\uF67F"], /* Private Use */ + ["\uF680", "\uF680"], /* Private Use */ + ["\uF681", "\uF681"], /* Private Use */ + ["\uF682", "\uF682"], /* Private Use */ + ["\uF683", "\uF683"], /* Private Use */ + ["\uF684", "\uF684"], /* Private Use */ + ["\uF685", "\uF685"], /* Private Use */ + ["\uF686", "\uF686"], /* Private Use */ + ["\uF687", "\uF687"], /* Private Use */ + ["\uF688", "\uF688"], /* Private Use */ + ["\uF689", "\uF689"], /* Private Use */ + ["\uF68A", "\uF68A"], /* Private Use */ + ["\uF68B", "\uF68B"], /* Private Use */ + ["\uF68C", "\uF68C"], /* Private Use */ + ["\uF68D", "\uF68D"], /* Private Use */ + ["\uF68E", "\uF68E"], /* Private Use */ + ["\uF68F", "\uF68F"], /* Private Use */ + ["\uF690", "\uF690"], /* Private Use */ + ["\uF691", "\uF691"], /* Private Use */ + ["\uF692", "\uF692"], /* Private Use */ + ["\uF693", "\uF693"], /* Private Use */ + ["\uF694", "\uF694"], /* Private Use */ + ["\uF695", "\uF695"], /* Private Use */ + ["\uF696", "\uF696"], /* Private Use */ + ["\uF697", "\uF697"], /* Private Use */ + ["\uF698", "\uF698"], /* Private Use */ + ["\uF699", "\uF699"], /* Private Use */ + ["\uF69A", "\uF69A"], /* Private Use */ + ["\uF69B", "\uF69B"], /* Private Use */ + ["\uF69C", "\uF69C"], /* Private Use */ + ["\uF69D", "\uF69D"], /* Private Use */ + ["\uF69E", "\uF69E"], /* Private Use */ + ["\uF69F", "\uF69F"], /* Private Use */ + ["\uF6A0", "\uF6A0"], /* Private Use */ + ["\uF6A1", "\uF6A1"], /* Private Use */ + ["\uF6A2", "\uF6A2"], /* Private Use */ + ["\uF6A3", "\uF6A3"], /* Private Use */ + ["\uF6A4", "\uF6A4"], /* Private Use */ + ["\uF6A5", "\uF6A5"], /* Private Use */ + ["\uF6A6", "\uF6A6"], /* Private Use */ + ["\uF6A7", "\uF6A7"], /* Private Use */ + ["\uF6A8", "\uF6A8"], /* Private Use */ + ["\uF6A9", "\uF6A9"], /* Private Use */ + ["\uF6AA", "\uF6AA"], /* Private Use */ + ["\uF6AB", "\uF6AB"], /* Private Use */ + ["\uF6AC", "\uF6AC"], /* Private Use */ + ["\uF6AD", "\uF6AD"], /* Private Use */ + ["\uF6AE", "\uF6AE"], /* Private Use */ + ["\uF6AF", "\uF6AF"], /* Private Use */ + ["\uF6B0", "\uF6B0"], /* Private Use */ + ["\uF6B1", "\uF6B1"], /* Private Use */ + ["\uF6B2", "\uF6B2"], /* Private Use */ + ["\uF6B3", "\uF6B3"], /* Private Use */ + ["\uF6B4", "\uF6B4"], /* Private Use */ + ["\uF6B5", "\uF6B5"], /* Private Use */ + ["\uF6B6", "\uF6B6"], /* Private Use */ + ["\uF6B7", "\uF6B7"], /* Private Use */ + ["\uF6B8", "\uF6B8"], /* Private Use */ + ["\uF6B9", "\uF6B9"], /* Private Use */ + ["\uF6BA", "\uF6BA"], /* Private Use */ + ["\uF6BB", "\uF6BB"], /* Private Use */ + ["\uF6BC", "\uF6BC"], /* Private Use */ + ["\uF6BD", "\uF6BD"], /* Private Use */ + ["\uF6BE", "\uF6BE"], /* Private Use */ + ["\uF6BF", "\uF6BF"], /* Private Use */ + ["\uF6C0", "\uF6C0"], /* Private Use */ + ["\uF6C1", "\uF6C1"], /* Private Use */ + ["\uF6C2", "\uF6C2"], /* Private Use */ + ["\uF6C3", "\uF6C3"], /* Private Use */ + ["\uF6C4", "\uF6C4"], /* Private Use */ + ["\uF6C5", "\uF6C5"], /* Private Use */ + ["\uF6C6", "\uF6C6"], /* Private Use */ + ["\uF6C7", "\uF6C7"], /* Private Use */ + ["\uF6C8", "\uF6C8"], /* Private Use */ + ["\uF6C9", "\uF6C9"], /* Private Use */ + ["\uF6CA", "\uF6CA"], /* Private Use */ + ["\uF6CB", "\uF6CB"], /* Private Use */ + ["\uF6CC", "\uF6CC"], /* Private Use */ + ["\uF6CD", "\uF6CD"], /* Private Use */ + ["\uF6CE", "\uF6CE"], /* Private Use */ + ["\uF6CF", "\uF6CF"], /* Private Use */ + ["\uF6D0", "\uF6D0"], /* Private Use */ + ["\uF6D1", "\uF6D1"], /* Private Use */ + ["\uF6D2", "\uF6D2"], /* Private Use */ + ["\uF6D3", "\uF6D3"], /* Private Use */ + ["\uF6D4", "\uF6D4"], /* Private Use */ + ["\uF6D5", "\uF6D5"], /* Private Use */ + ["\uF6D6", "\uF6D6"], /* Private Use */ + ["\uF6D7", "\uF6D7"], /* Private Use */ + ["\uF6D8", "\uF6D8"], /* Private Use */ + ["\uF6D9", "\uF6D9"], /* Private Use */ + ["\uF6DA", "\uF6DA"], /* Private Use */ + ["\uF6DB", "\uF6DB"], /* Private Use */ + ["\uF6DC", "\uF6DC"], /* Private Use */ + ["\uF6DD", "\uF6DD"], /* Private Use */ + ["\uF6DE", "\uF6DE"], /* Private Use */ + ["\uF6DF", "\uF6DF"], /* Private Use */ + ["\uF6E0", "\uF6E0"], /* Private Use */ + ["\uF6E1", "\uF6E1"], /* Private Use */ + ["\uF6E2", "\uF6E2"], /* Private Use */ + ["\uF6E3", "\uF6E3"], /* Private Use */ + ["\uF6E4", "\uF6E4"], /* Private Use */ + ["\uF6E5", "\uF6E5"], /* Private Use */ + ["\uF6E6", "\uF6E6"], /* Private Use */ + ["\uF6E7", "\uF6E7"], /* Private Use */ + ["\uF6E8", "\uF6E8"], /* Private Use */ + ["\uF6E9", "\uF6E9"], /* Private Use */ + ["\uF6EA", "\uF6EA"], /* Private Use */ + ["\uF6EB", "\uF6EB"], /* Private Use */ + ["\uF6EC", "\uF6EC"], /* Private Use */ + ["\uF6ED", "\uF6ED"], /* Private Use */ + ["\uF6EE", "\uF6EE"], /* Private Use */ + ["\uF6EF", "\uF6EF"], /* Private Use */ + ["\uF6F0", "\uF6F0"], /* Private Use */ + ["\uF6F1", "\uF6F1"], /* Private Use */ + ["\uF6F2", "\uF6F2"], /* Private Use */ + ["\uF6F3", "\uF6F3"], /* Private Use */ + ["\uF6F4", "\uF6F4"], /* Private Use */ + ["\uF6F5", "\uF6F5"], /* Private Use */ + ["\uF6F6", "\uF6F6"], /* Private Use */ + ["\uF6F7", "\uF6F7"], /* Private Use */ + ["\uF6F8", "\uF6F8"], /* Private Use */ + ["\uF6F9", "\uF6F9"], /* Private Use */ + ["\uF6FA", "\uF6FA"], /* Private Use */ + ["\uF6FB", "\uF6FB"], /* Private Use */ + ["\uF6FC", "\uF6FC"], /* Private Use */ + ["\uF6FD", "\uF6FD"], /* Private Use */ + ["\uF6FE", "\uF6FE"], /* Private Use */ + ["\uF6FF", "\uF6FF"], /* Private Use */ + ["\uF700", "\uF700"], /* Private Use */ + ["\uF701", "\uF701"], /* Private Use */ + ["\uF702", "\uF702"], /* Private Use */ + ["\uF703", "\uF703"], /* Private Use */ + ["\uF704", "\uF704"], /* Private Use */ + ["\uF705", "\uF705"], /* Private Use */ + ["\uF706", "\uF706"], /* Private Use */ + ["\uF707", "\uF707"], /* Private Use */ + ["\uF708", "\uF708"], /* Private Use */ + ["\uF709", "\uF709"], /* Private Use */ + ["\uF70A", "\uF70A"], /* Private Use */ + ["\uF70B", "\uF70B"], /* Private Use */ + ["\uF70C", "\uF70C"], /* Private Use */ + ["\uF70D", "\uF70D"], /* Private Use */ + ["\uF70E", "\uF70E"], /* Private Use */ + ["\uF70F", "\uF70F"], /* Private Use */ + ["\uF710", "\uF710"], /* Private Use */ + ["\uF711", "\uF711"], /* Private Use */ + ["\uF712", "\uF712"], /* Private Use */ + ["\uF713", "\uF713"], /* Private Use */ + ["\uF714", "\uF714"], /* Private Use */ + ["\uF715", "\uF715"], /* Private Use */ + ["\uF716", "\uF716"], /* Private Use */ + ["\uF717", "\uF717"], /* Private Use */ + ["\uF718", "\uF718"], /* Private Use */ + ["\uF719", "\uF719"], /* Private Use */ + ["\uF71A", "\uF71A"], /* Private Use */ + ["\uF71B", "\uF71B"], /* Private Use */ + ["\uF71C", "\uF71C"], /* Private Use */ + ["\uF71D", "\uF71D"], /* Private Use */ + ["\uF71E", "\uF71E"], /* Private Use */ + ["\uF71F", "\uF71F"], /* Private Use */ + ["\uF720", "\uF720"], /* Private Use */ + ["\uF721", "\uF721"], /* Private Use */ + ["\uF722", "\uF722"], /* Private Use */ + ["\uF723", "\uF723"], /* Private Use */ + ["\uF724", "\uF724"], /* Private Use */ + ["\uF725", "\uF725"], /* Private Use */ + ["\uF726", "\uF726"], /* Private Use */ + ["\uF727", "\uF727"], /* Private Use */ + ["\uF728", "\uF728"], /* Private Use */ + ["\uF729", "\uF729"], /* Private Use */ + ["\uF72A", "\uF72A"], /* Private Use */ + ["\uF72B", "\uF72B"], /* Private Use */ + ["\uF72C", "\uF72C"], /* Private Use */ + ["\uF72D", "\uF72D"], /* Private Use */ + ["\uF72E", "\uF72E"], /* Private Use */ + ["\uF72F", "\uF72F"], /* Private Use */ + ["\uF730", "\uF730"], /* Private Use */ + ["\uF731", "\uF731"], /* Private Use */ + ["\uF732", "\uF732"], /* Private Use */ + ["\uF733", "\uF733"], /* Private Use */ + ["\uF734", "\uF734"], /* Private Use */ + ["\uF735", "\uF735"], /* Private Use */ + ["\uF736", "\uF736"], /* Private Use */ + ["\uF737", "\uF737"], /* Private Use */ + ["\uF738", "\uF738"], /* Private Use */ + ["\uF739", "\uF739"], /* Private Use */ + ["\uF73A", "\uF73A"], /* Private Use */ + ["\uF73B", "\uF73B"], /* Private Use */ + ["\uF73C", "\uF73C"], /* Private Use */ + ["\uF73D", "\uF73D"], /* Private Use */ + ["\uF73E", "\uF73E"], /* Private Use */ + ["\uF73F", "\uF73F"], /* Private Use */ + ["\uF740", "\uF740"], /* Private Use */ + ["\uF741", "\uF741"], /* Private Use */ + ["\uF742", "\uF742"], /* Private Use */ + ["\uF743", "\uF743"], /* Private Use */ + ["\uF744", "\uF744"], /* Private Use */ + ["\uF745", "\uF745"], /* Private Use */ + ["\uF746", "\uF746"], /* Private Use */ + ["\uF747", "\uF747"], /* Private Use */ + ["\uF748", "\uF748"], /* Private Use */ + ["\uF749", "\uF749"], /* Private Use */ + ["\uF74A", "\uF74A"], /* Private Use */ + ["\uF74B", "\uF74B"], /* Private Use */ + ["\uF74C", "\uF74C"], /* Private Use */ + ["\uF74D", "\uF74D"], /* Private Use */ + ["\uF74E", "\uF74E"], /* Private Use */ + ["\uF74F", "\uF74F"], /* Private Use */ + ["\uF750", "\uF750"], /* Private Use */ + ["\uF751", "\uF751"], /* Private Use */ + ["\uF752", "\uF752"], /* Private Use */ + ["\uF753", "\uF753"], /* Private Use */ + ["\uF754", "\uF754"], /* Private Use */ + ["\uF755", "\uF755"], /* Private Use */ + ["\uF756", "\uF756"], /* Private Use */ + ["\uF757", "\uF757"], /* Private Use */ + ["\uF758", "\uF758"], /* Private Use */ + ["\uF759", "\uF759"], /* Private Use */ + ["\uF75A", "\uF75A"], /* Private Use */ + ["\uF75B", "\uF75B"], /* Private Use */ + ["\uF75C", "\uF75C"], /* Private Use */ + ["\uF75D", "\uF75D"], /* Private Use */ + ["\uF75E", "\uF75E"], /* Private Use */ + ["\uF75F", "\uF75F"], /* Private Use */ + ["\uF760", "\uF760"], /* Private Use */ + ["\uF761", "\uF761"], /* Private Use */ + ["\uF762", "\uF762"], /* Private Use */ + ["\uF763", "\uF763"], /* Private Use */ + ["\uF764", "\uF764"], /* Private Use */ + ["\uF765", "\uF765"], /* Private Use */ + ["\uF766", "\uF766"], /* Private Use */ + ["\uF767", "\uF767"], /* Private Use */ + ["\uF768", "\uF768"], /* Private Use */ + ["\uF769", "\uF769"], /* Private Use */ + ["\uF76A", "\uF76A"], /* Private Use */ + ["\uF76B", "\uF76B"], /* Private Use */ + ["\uF76C", "\uF76C"], /* Private Use */ + ["\uF76D", "\uF76D"], /* Private Use */ + ["\uF76E", "\uF76E"], /* Private Use */ + ["\uF76F", "\uF76F"], /* Private Use */ + ["\uF770", "\uF770"], /* Private Use */ + ["\uF771", "\uF771"], /* Private Use */ + ["\uF772", "\uF772"], /* Private Use */ + ["\uF773", "\uF773"], /* Private Use */ + ["\uF774", "\uF774"], /* Private Use */ + ["\uF775", "\uF775"], /* Private Use */ + ["\uF776", "\uF776"], /* Private Use */ + ["\uF777", "\uF777"], /* Private Use */ + ["\uF778", "\uF778"], /* Private Use */ + ["\uF779", "\uF779"], /* Private Use */ + ["\uF77A", "\uF77A"], /* Private Use */ + ["\uF77B", "\uF77B"], /* Private Use */ + ["\uF77C", "\uF77C"], /* Private Use */ + ["\uF77D", "\uF77D"], /* Private Use */ + ["\uF77E", "\uF77E"], /* Private Use */ + ["\uF77F", "\uF77F"], /* Private Use */ + ["\uF780", "\uF780"], /* Private Use */ + ["\uF781", "\uF781"], /* Private Use */ + ["\uF782", "\uF782"], /* Private Use */ + ["\uF783", "\uF783"], /* Private Use */ + ["\uF784", "\uF784"], /* Private Use */ + ["\uF785", "\uF785"], /* Private Use */ + ["\uF786", "\uF786"], /* Private Use */ + ["\uF787", "\uF787"], /* Private Use */ + ["\uF788", "\uF788"], /* Private Use */ + ["\uF789", "\uF789"], /* Private Use */ + ["\uF78A", "\uF78A"], /* Private Use */ + ["\uF78B", "\uF78B"], /* Private Use */ + ["\uF78C", "\uF78C"], /* Private Use */ + ["\uF78D", "\uF78D"], /* Private Use */ + ["\uF78E", "\uF78E"], /* Private Use */ + ["\uF78F", "\uF78F"], /* Private Use */ + ["\uF790", "\uF790"], /* Private Use */ + ["\uF791", "\uF791"], /* Private Use */ + ["\uF792", "\uF792"], /* Private Use */ + ["\uF793", "\uF793"], /* Private Use */ + ["\uF794", "\uF794"], /* Private Use */ + ["\uF795", "\uF795"], /* Private Use */ + ["\uF796", "\uF796"], /* Private Use */ + ["\uF797", "\uF797"], /* Private Use */ + ["\uF798", "\uF798"], /* Private Use */ + ["\uF799", "\uF799"], /* Private Use */ + ["\uF79A", "\uF79A"], /* Private Use */ + ["\uF79B", "\uF79B"], /* Private Use */ + ["\uF79C", "\uF79C"], /* Private Use */ + ["\uF79D", "\uF79D"], /* Private Use */ + ["\uF79E", "\uF79E"], /* Private Use */ + ["\uF79F", "\uF79F"], /* Private Use */ + ["\uF7A0", "\uF7A0"], /* Private Use */ + ["\uF7A1", "\uF7A1"], /* Private Use */ + ["\uF7A2", "\uF7A2"], /* Private Use */ + ["\uF7A3", "\uF7A3"], /* Private Use */ + ["\uF7A4", "\uF7A4"], /* Private Use */ + ["\uF7A5", "\uF7A5"], /* Private Use */ + ["\uF7A6", "\uF7A6"], /* Private Use */ + ["\uF7A7", "\uF7A7"], /* Private Use */ + ["\uF7A8", "\uF7A8"], /* Private Use */ + ["\uF7A9", "\uF7A9"], /* Private Use */ + ["\uF7AA", "\uF7AA"], /* Private Use */ + ["\uF7AB", "\uF7AB"], /* Private Use */ + ["\uF7AC", "\uF7AC"], /* Private Use */ + ["\uF7AD", "\uF7AD"], /* Private Use */ + ["\uF7AE", "\uF7AE"], /* Private Use */ + ["\uF7AF", "\uF7AF"], /* Private Use */ + ["\uF7B0", "\uF7B0"], /* Private Use */ + ["\uF7B1", "\uF7B1"], /* Private Use */ + ["\uF7B2", "\uF7B2"], /* Private Use */ + ["\uF7B3", "\uF7B3"], /* Private Use */ + ["\uF7B4", "\uF7B4"], /* Private Use */ + ["\uF7B5", "\uF7B5"], /* Private Use */ + ["\uF7B6", "\uF7B6"], /* Private Use */ + ["\uF7B7", "\uF7B7"], /* Private Use */ + ["\uF7B8", "\uF7B8"], /* Private Use */ + ["\uF7B9", "\uF7B9"], /* Private Use */ + ["\uF7BA", "\uF7BA"], /* Private Use */ + ["\uF7BB", "\uF7BB"], /* Private Use */ + ["\uF7BC", "\uF7BC"], /* Private Use */ + ["\uF7BD", "\uF7BD"], /* Private Use */ + ["\uF7BE", "\uF7BE"], /* Private Use */ + ["\uF7BF", "\uF7BF"], /* Private Use */ + ["\uF7C0", "\uF7C0"], /* Private Use */ + ["\uF7C1", "\uF7C1"], /* Private Use */ + ["\uF7C2", "\uF7C2"], /* Private Use */ + ["\uF7C3", "\uF7C3"], /* Private Use */ + ["\uF7C4", "\uF7C4"], /* Private Use */ + ["\uF7C5", "\uF7C5"], /* Private Use */ + ["\uF7C6", "\uF7C6"], /* Private Use */ + ["\uF7C7", "\uF7C7"], /* Private Use */ + ["\uF7C8", "\uF7C8"], /* Private Use */ + ["\uF7C9", "\uF7C9"], /* Private Use */ + ["\uF7CA", "\uF7CA"], /* Private Use */ + ["\uF7CB", "\uF7CB"], /* Private Use */ + ["\uF7CC", "\uF7CC"], /* Private Use */ + ["\uF7CD", "\uF7CD"], /* Private Use */ + ["\uF7CE", "\uF7CE"], /* Private Use */ + ["\uF7CF", "\uF7CF"], /* Private Use */ + ["\uF7D0", "\uF7D0"], /* Private Use */ + ["\uF7D1", "\uF7D1"], /* Private Use */ + ["\uF7D2", "\uF7D2"], /* Private Use */ + ["\uF7D3", "\uF7D3"], /* Private Use */ + ["\uF7D4", "\uF7D4"], /* Private Use */ + ["\uF7D5", "\uF7D5"], /* Private Use */ + ["\uF7D6", "\uF7D6"], /* Private Use */ + ["\uF7D7", "\uF7D7"], /* Private Use */ + ["\uF7D8", "\uF7D8"], /* Private Use */ + ["\uF7D9", "\uF7D9"], /* Private Use */ + ["\uF7DA", "\uF7DA"], /* Private Use */ + ["\uF7DB", "\uF7DB"], /* Private Use */ + ["\uF7DC", "\uF7DC"], /* Private Use */ + ["\uF7DD", "\uF7DD"], /* Private Use */ + ["\uF7DE", "\uF7DE"], /* Private Use */ + ["\uF7DF", "\uF7DF"], /* Private Use */ + ["\uF7E0", "\uF7E0"], /* Private Use */ + ["\uF7E1", "\uF7E1"], /* Private Use */ + ["\uF7E2", "\uF7E2"], /* Private Use */ + ["\uF7E3", "\uF7E3"], /* Private Use */ + ["\uF7E4", "\uF7E4"], /* Private Use */ + ["\uF7E5", "\uF7E5"], /* Private Use */ + ["\uF7E6", "\uF7E6"], /* Private Use */ + ["\uF7E7", "\uF7E7"], /* Private Use */ + ["\uF7E8", "\uF7E8"], /* Private Use */ + ["\uF7E9", "\uF7E9"], /* Private Use */ + ["\uF7EA", "\uF7EA"], /* Private Use */ + ["\uF7EB", "\uF7EB"], /* Private Use */ + ["\uF7EC", "\uF7EC"], /* Private Use */ + ["\uF7ED", "\uF7ED"], /* Private Use */ + ["\uF7EE", "\uF7EE"], /* Private Use */ + ["\uF7EF", "\uF7EF"], /* Private Use */ + ["\uF7F0", "\uF7F0"], /* Private Use */ + ["\uF7F1", "\uF7F1"], /* Private Use */ + ["\uF7F2", "\uF7F2"], /* Private Use */ + ["\uF7F3", "\uF7F3"], /* Private Use */ + ["\uF7F4", "\uF7F4"], /* Private Use */ + ["\uF7F5", "\uF7F5"], /* Private Use */ + ["\uF7F6", "\uF7F6"], /* Private Use */ + ["\uF7F7", "\uF7F7"], /* Private Use */ + ["\uF7F8", "\uF7F8"], /* Private Use */ + ["\uF7F9", "\uF7F9"], /* Private Use */ + ["\uF7FA", "\uF7FA"], /* Private Use */ + ["\uF7FB", "\uF7FB"], /* Private Use */ + ["\uF7FC", "\uF7FC"], /* Private Use */ + ["\uF7FD", "\uF7FD"], /* Private Use */ + ["\uF7FE", "\uF7FE"], /* Private Use */ + ["\uF7FF", "\uF7FF"], /* Private Use */ + ["\uF800", "\uF800"], /* Private Use */ + ["\uF801", "\uF801"], /* Private Use */ + ["\uF802", "\uF802"], /* Private Use */ + ["\uF803", "\uF803"], /* Private Use */ + ["\uF804", "\uF804"], /* Private Use */ + ["\uF805", "\uF805"], /* Private Use */ + ["\uF806", "\uF806"], /* Private Use */ + ["\uF807", "\uF807"], /* Private Use */ + ["\uF808", "\uF808"], /* Private Use */ + ["\uF809", "\uF809"], /* Private Use */ + ["\uF80A", "\uF80A"], /* Private Use */ + ["\uF80B", "\uF80B"], /* Private Use */ + ["\uF80C", "\uF80C"], /* Private Use */ + ["\uF80D", "\uF80D"], /* Private Use */ + ["\uF80E", "\uF80E"], /* Private Use */ + ["\uF80F", "\uF80F"], /* Private Use */ + ["\uF810", "\uF810"], /* Private Use */ + ["\uF811", "\uF811"], /* Private Use */ + ["\uF812", "\uF812"], /* Private Use */ + ["\uF813", "\uF813"], /* Private Use */ + ["\uF814", "\uF814"], /* Private Use */ + ["\uF815", "\uF815"], /* Private Use */ + ["\uF816", "\uF816"], /* Private Use */ + ["\uF817", "\uF817"], /* Private Use */ + ["\uF818", "\uF818"], /* Private Use */ + ["\uF819", "\uF819"], /* Private Use */ + ["\uF81A", "\uF81A"], /* Private Use */ + ["\uF81B", "\uF81B"], /* Private Use */ + ["\uF81C", "\uF81C"], /* Private Use */ + ["\uF81D", "\uF81D"], /* Private Use */ + ["\uF81E", "\uF81E"], /* Private Use */ + ["\uF81F", "\uF81F"], /* Private Use */ + ["\uF820", "\uF820"], /* Private Use */ + ["\uF821", "\uF821"], /* Private Use */ + ["\uF822", "\uF822"], /* Private Use */ + ["\uF823", "\uF823"], /* Private Use */ + ["\uF824", "\uF824"], /* Private Use */ + ["\uF825", "\uF825"], /* Private Use */ + ["\uF826", "\uF826"], /* Private Use */ + ["\uF827", "\uF827"], /* Private Use */ + ["\uF828", "\uF828"], /* Private Use */ + ["\uF829", "\uF829"], /* Private Use */ + ["\uF82A", "\uF82A"], /* Private Use */ + ["\uF82B", "\uF82B"], /* Private Use */ + ["\uF82C", "\uF82C"], /* Private Use */ + ["\uF82D", "\uF82D"], /* Private Use */ + ["\uF82E", "\uF82E"], /* Private Use */ + ["\uF82F", "\uF82F"], /* Private Use */ + ["\uF830", "\uF830"], /* Private Use */ + ["\uF831", "\uF831"], /* Private Use */ + ["\uF832", "\uF832"], /* Private Use */ + ["\uF833", "\uF833"], /* Private Use */ + ["\uF834", "\uF834"], /* Private Use */ + ["\uF835", "\uF835"], /* Private Use */ + ["\uF836", "\uF836"], /* Private Use */ + ["\uF837", "\uF837"], /* Private Use */ + ["\uF838", "\uF838"], /* Private Use */ + ["\uF839", "\uF839"], /* Private Use */ + ["\uF83A", "\uF83A"], /* Private Use */ + ["\uF83B", "\uF83B"], /* Private Use */ + ["\uF83C", "\uF83C"], /* Private Use */ + ["\uF83D", "\uF83D"], /* Private Use */ + ["\uF83E", "\uF83E"], /* Private Use */ + ["\uF83F", "\uF83F"], /* Private Use */ + ["\uF840", "\uF840"], /* Private Use */ + ["\uF841", "\uF841"], /* Private Use */ + ["\uF842", "\uF842"], /* Private Use */ + ["\uF843", "\uF843"], /* Private Use */ + ["\uF844", "\uF844"], /* Private Use */ + ["\uF845", "\uF845"], /* Private Use */ + ["\uF846", "\uF846"], /* Private Use */ + ["\uF847", "\uF847"], /* Private Use */ + ["\uF848", "\uF848"], /* Private Use */ + ["\uF849", "\uF849"], /* Private Use */ + ["\uF84A", "\uF84A"], /* Private Use */ + ["\uF84B", "\uF84B"], /* Private Use */ + ["\uF84C", "\uF84C"], /* Private Use */ + ["\uF84D", "\uF84D"], /* Private Use */ + ["\uF84E", "\uF84E"], /* Private Use */ + ["\uF84F", "\uF84F"], /* Private Use */ + ["\uF850", "\uF850"], /* Private Use */ + ["\uF851", "\uF851"], /* Private Use */ + ["\uF852", "\uF852"], /* Private Use */ + ["\uF853", "\uF853"], /* Private Use */ + ["\uF854", "\uF854"], /* Private Use */ + ["\uF855", "\uF855"], /* Private Use */ + ["\uF856", "\uF856"], /* Private Use */ + ["\uF857", "\uF857"], /* Private Use */ + ["\uF858", "\uF858"], /* Private Use */ + ["\uF859", "\uF859"], /* Private Use */ + ["\uF85A", "\uF85A"], /* Private Use */ + ["\uF85B", "\uF85B"], /* Private Use */ + ["\uF85C", "\uF85C"], /* Private Use */ + ["\uF85D", "\uF85D"], /* Private Use */ + ["\uF85E", "\uF85E"], /* Private Use */ + ["\uF85F", "\uF85F"], /* Private Use */ + ["\uF860", "\uF860"], /* Private Use */ + ["\uF861", "\uF861"], /* Private Use */ + ["\uF862", "\uF862"], /* Private Use */ + ["\uF863", "\uF863"], /* Private Use */ + ["\uF864", "\uF864"], /* Private Use */ + ["\uF865", "\uF865"], /* Private Use */ + ["\uF866", "\uF866"], /* Private Use */ + ["\uF867", "\uF867"], /* Private Use */ + ["\uF868", "\uF868"], /* Private Use */ + ["\uF869", "\uF869"], /* Private Use */ + ["\uF86A", "\uF86A"], /* Private Use */ + ["\uF86B", "\uF86B"], /* Private Use */ + ["\uF86C", "\uF86C"], /* Private Use */ + ["\uF86D", "\uF86D"], /* Private Use */ + ["\uF86E", "\uF86E"], /* Private Use */ + ["\uF86F", "\uF86F"], /* Private Use */ + ["\uF870", "\uF870"], /* Private Use */ + ["\uF871", "\uF871"], /* Private Use */ + ["\uF872", "\uF872"], /* Private Use */ + ["\uF873", "\uF873"], /* Private Use */ + ["\uF874", "\uF874"], /* Private Use */ + ["\uF875", "\uF875"], /* Private Use */ + ["\uF876", "\uF876"], /* Private Use */ + ["\uF877", "\uF877"], /* Private Use */ + ["\uF878", "\uF878"], /* Private Use */ + ["\uF879", "\uF879"], /* Private Use */ + ["\uF87A", "\uF87A"], /* Private Use */ + ["\uF87B", "\uF87B"], /* Private Use */ + ["\uF87C", "\uF87C"], /* Private Use */ + ["\uF87D", "\uF87D"], /* Private Use */ + ["\uF87E", "\uF87E"], /* Private Use */ + ["\uF87F", "\uF87F"], /* Private Use */ + ["\uF880", "\uF880"], /* Private Use */ + ["\uF881", "\uF881"], /* Private Use */ + ["\uF882", "\uF882"], /* Private Use */ + ["\uF883", "\uF883"], /* Private Use */ + ["\uF884", "\uF884"], /* Private Use */ + ["\uF885", "\uF885"], /* Private Use */ + ["\uF886", "\uF886"], /* Private Use */ + ["\uF887", "\uF887"], /* Private Use */ + ["\uF888", "\uF888"], /* Private Use */ + ["\uF889", "\uF889"], /* Private Use */ + ["\uF88A", "\uF88A"], /* Private Use */ + ["\uF88B", "\uF88B"], /* Private Use */ + ["\uF88C", "\uF88C"], /* Private Use */ + ["\uF88D", "\uF88D"], /* Private Use */ + ["\uF88E", "\uF88E"], /* Private Use */ + ["\uF88F", "\uF88F"], /* Private Use */ + ["\uF890", "\uF890"], /* Private Use */ + ["\uF891", "\uF891"], /* Private Use */ + ["\uF892", "\uF892"], /* Private Use */ + ["\uF893", "\uF893"], /* Private Use */ + ["\uF894", "\uF894"], /* Private Use */ + ["\uF895", "\uF895"], /* Private Use */ + ["\uF896", "\uF896"], /* Private Use */ + ["\uF897", "\uF897"], /* Private Use */ + ["\uF898", "\uF898"], /* Private Use */ + ["\uF899", "\uF899"], /* Private Use */ + ["\uF89A", "\uF89A"], /* Private Use */ + ["\uF89B", "\uF89B"], /* Private Use */ + ["\uF89C", "\uF89C"], /* Private Use */ + ["\uF89D", "\uF89D"], /* Private Use */ + ["\uF89E", "\uF89E"], /* Private Use */ + ["\uF89F", "\uF89F"], /* Private Use */ + ["\uF8A0", "\uF8A0"], /* Private Use */ + ["\uF8A1", "\uF8A1"], /* Private Use */ + ["\uF8A2", "\uF8A2"], /* Private Use */ + ["\uF8A3", "\uF8A3"], /* Private Use */ + ["\uF8A4", "\uF8A4"], /* Private Use */ + ["\uF8A5", "\uF8A5"], /* Private Use */ + ["\uF8A6", "\uF8A6"], /* Private Use */ + ["\uF8A7", "\uF8A7"], /* Private Use */ + ["\uF8A8", "\uF8A8"], /* Private Use */ + ["\uF8A9", "\uF8A9"], /* Private Use */ + ["\uF8AA", "\uF8AA"], /* Private Use */ + ["\uF8AB", "\uF8AB"], /* Private Use */ + ["\uF8AC", "\uF8AC"], /* Private Use */ + ["\uF8AD", "\uF8AD"], /* Private Use */ + ["\uF8AE", "\uF8AE"], /* Private Use */ + ["\uF8AF", "\uF8AF"], /* Private Use */ + ["\uF8B0", "\uF8B0"], /* Private Use */ + ["\uF8B1", "\uF8B1"], /* Private Use */ + ["\uF8B2", "\uF8B2"], /* Private Use */ + ["\uF8B3", "\uF8B3"], /* Private Use */ + ["\uF8B4", "\uF8B4"], /* Private Use */ + ["\uF8B5", "\uF8B5"], /* Private Use */ + ["\uF8B6", "\uF8B6"], /* Private Use */ + ["\uF8B7", "\uF8B7"], /* Private Use */ + ["\uF8B8", "\uF8B8"], /* Private Use */ + ["\uF8B9", "\uF8B9"], /* Private Use */ + ["\uF8BA", "\uF8BA"], /* Private Use */ + ["\uF8BB", "\uF8BB"], /* Private Use */ + ["\uF8BC", "\uF8BC"], /* Private Use */ + ["\uF8BD", "\uF8BD"], /* Private Use */ + ["\uF8BE", "\uF8BE"], /* Private Use */ + ["\uF8BF", "\uF8BF"], /* Private Use */ + ["\uF8C0", "\uF8C0"], /* Private Use */ + ["\uF8C1", "\uF8C1"], /* Private Use */ + ["\uF8C2", "\uF8C2"], /* Private Use */ + ["\uF8C3", "\uF8C3"], /* Private Use */ + ["\uF8C4", "\uF8C4"], /* Private Use */ + ["\uF8C5", "\uF8C5"], /* Private Use */ + ["\uF8C6", "\uF8C6"], /* Private Use */ + ["\uF8C7", "\uF8C7"], /* Private Use */ + ["\uF8C8", "\uF8C8"], /* Private Use */ + ["\uF8C9", "\uF8C9"], /* Private Use */ + ["\uF8CA", "\uF8CA"], /* Private Use */ + ["\uF8CB", "\uF8CB"], /* Private Use */ + ["\uF8CC", "\uF8CC"], /* Private Use */ + ["\uF8CD", "\uF8CD"], /* Private Use */ + ["\uF8CE", "\uF8CE"], /* Private Use */ + ["\uF8CF", "\uF8CF"], /* Private Use */ + ["\uF8D0", "\uF8D0"], /* Private Use */ + ["\uF8D1", "\uF8D1"], /* Private Use */ + ["\uF8D2", "\uF8D2"], /* Private Use */ + ["\uF8D3", "\uF8D3"], /* Private Use */ + ["\uF8D4", "\uF8D4"], /* Private Use */ + ["\uF8D5", "\uF8D5"], /* Private Use */ + ["\uF8D6", "\uF8D6"], /* Private Use */ + ["\uF8D7", "\uF8D7"], /* Private Use */ + ["\uF8D8", "\uF8D8"], /* Private Use */ + ["\uF8D9", "\uF8D9"], /* Private Use */ + ["\uF8DA", "\uF8DA"], /* Private Use */ + ["\uF8DB", "\uF8DB"], /* Private Use */ + ["\uF8DC", "\uF8DC"], /* Private Use */ + ["\uF8DD", "\uF8DD"], /* Private Use */ + ["\uF8DE", "\uF8DE"], /* Private Use */ + ["\uF8DF", "\uF8DF"], /* Private Use */ + ["\uF8E0", "\uF8E0"], /* Private Use */ + ["\uF8E1", "\uF8E1"], /* Private Use */ + ["\uF8E2", "\uF8E2"], /* Private Use */ + ["\uF8E3", "\uF8E3"], /* Private Use */ + ["\uF8E4", "\uF8E4"], /* Private Use */ + ["\uF8E5", "\uF8E5"], /* Private Use */ + ["\uF8E6", "\uF8E6"], /* Private Use */ + ["\uF8E7", "\uF8E7"], /* Private Use */ + ["\uF8E8", "\uF8E8"], /* Private Use */ + ["\uF8E9", "\uF8E9"], /* Private Use */ + ["\uF8EA", "\uF8EA"], /* Private Use */ + ["\uF8EB", "\uF8EB"], /* Private Use */ + ["\uF8EC", "\uF8EC"], /* Private Use */ + ["\uF8ED", "\uF8ED"], /* Private Use */ + ["\uF8EE", "\uF8EE"], /* Private Use */ + ["\uF8EF", "\uF8EF"], /* Private Use */ + ["\uF8F0", "\uF8F0"], /* Private Use */ + ["\uF8F1", "\uF8F1"], /* Private Use */ + ["\uF8F2", "\uF8F2"], /* Private Use */ + ["\uF8F3", "\uF8F3"], /* Private Use */ + ["\uF8F4", "\uF8F4"], /* Private Use */ + ["\uF8F5", "\uF8F5"], /* Private Use */ + ["\uF8F6", "\uF8F6"], /* Private Use */ + ["\uF8F7", "\uF8F7"], /* Private Use */ + ["\uF8F8", "\uF8F8"], /* Private Use */ + ["\uF8F9", "\uF8F9"], /* Private Use */ + ["\uF8FA", "\uF8FA"], /* Private Use */ + ["\uF8FB", "\uF8FB"], /* Private Use */ + ["\uF8FC", "\uF8FC"], /* Private Use */ + ["\uF8FD", "\uF8FD"], /* Private Use */ + ["\uF8FE", "\uF8FE"], /* Private Use */ + ["\uF8FF", "\uF8FF"], /* Private Use */ + ["\uF900", "\uF900"], /* CJK COMPATIBILITY IDEOGRAPH-F900 */ + ["\uF901", "\uF901"], /* CJK COMPATIBILITY IDEOGRAPH-F901 */ + ["\uF902", "\uF902"], /* CJK COMPATIBILITY IDEOGRAPH-F902 */ + ["\uF903", "\uF903"], /* CJK COMPATIBILITY IDEOGRAPH-F903 */ + ["\uF904", "\uF904"], /* CJK COMPATIBILITY IDEOGRAPH-F904 */ + ["\uF905", "\uF905"], /* CJK COMPATIBILITY IDEOGRAPH-F905 */ + ["\uF906", "\uF906"], /* CJK COMPATIBILITY IDEOGRAPH-F906 */ + ["\uF907", "\uF907"], /* CJK COMPATIBILITY IDEOGRAPH-F907 */ + ["\uF908", "\uF908"], /* CJK COMPATIBILITY IDEOGRAPH-F908 */ + ["\uF909", "\uF909"], /* CJK COMPATIBILITY IDEOGRAPH-F909 */ + ["\uF90A", "\uF90A"], /* CJK COMPATIBILITY IDEOGRAPH-F90A */ + ["\uF90B", "\uF90B"], /* CJK COMPATIBILITY IDEOGRAPH-F90B */ + ["\uF90C", "\uF90C"], /* CJK COMPATIBILITY IDEOGRAPH-F90C */ + ["\uF90D", "\uF90D"], /* CJK COMPATIBILITY IDEOGRAPH-F90D */ + ["\uF90E", "\uF90E"], /* CJK COMPATIBILITY IDEOGRAPH-F90E */ + ["\uF90F", "\uF90F"], /* CJK COMPATIBILITY IDEOGRAPH-F90F */ + ["\uF910", "\uF910"], /* CJK COMPATIBILITY IDEOGRAPH-F910 */ + ["\uF911", "\uF911"], /* CJK COMPATIBILITY IDEOGRAPH-F911 */ + ["\uF912", "\uF912"], /* CJK COMPATIBILITY IDEOGRAPH-F912 */ + ["\uF913", "\uF913"], /* CJK COMPATIBILITY IDEOGRAPH-F913 */ + ["\uF914", "\uF914"], /* CJK COMPATIBILITY IDEOGRAPH-F914 */ + ["\uF915", "\uF915"], /* CJK COMPATIBILITY IDEOGRAPH-F915 */ + ["\uF916", "\uF916"], /* CJK COMPATIBILITY IDEOGRAPH-F916 */ + ["\uF917", "\uF917"], /* CJK COMPATIBILITY IDEOGRAPH-F917 */ + ["\uF918", "\uF918"], /* CJK COMPATIBILITY IDEOGRAPH-F918 */ + ["\uF919", "\uF919"], /* CJK COMPATIBILITY IDEOGRAPH-F919 */ + ["\uF91A", "\uF91A"], /* CJK COMPATIBILITY IDEOGRAPH-F91A */ + ["\uF91B", "\uF91B"], /* CJK COMPATIBILITY IDEOGRAPH-F91B */ + ["\uF91C", "\uF91C"], /* CJK COMPATIBILITY IDEOGRAPH-F91C */ + ["\uF91D", "\uF91D"], /* CJK COMPATIBILITY IDEOGRAPH-F91D */ + ["\uF91E", "\uF91E"], /* CJK COMPATIBILITY IDEOGRAPH-F91E */ + ["\uF91F", "\uF91F"], /* CJK COMPATIBILITY IDEOGRAPH-F91F */ + ["\uF920", "\uF920"], /* CJK COMPATIBILITY IDEOGRAPH-F920 */ + ["\uF921", "\uF921"], /* CJK COMPATIBILITY IDEOGRAPH-F921 */ + ["\uF922", "\uF922"], /* CJK COMPATIBILITY IDEOGRAPH-F922 */ + ["\uF923", "\uF923"], /* CJK COMPATIBILITY IDEOGRAPH-F923 */ + ["\uF924", "\uF924"], /* CJK COMPATIBILITY IDEOGRAPH-F924 */ + ["\uF925", "\uF925"], /* CJK COMPATIBILITY IDEOGRAPH-F925 */ + ["\uF926", "\uF926"], /* CJK COMPATIBILITY IDEOGRAPH-F926 */ + ["\uF927", "\uF927"], /* CJK COMPATIBILITY IDEOGRAPH-F927 */ + ["\uF928", "\uF928"], /* CJK COMPATIBILITY IDEOGRAPH-F928 */ + ["\uF929", "\uF929"], /* CJK COMPATIBILITY IDEOGRAPH-F929 */ + ["\uF92A", "\uF92A"], /* CJK COMPATIBILITY IDEOGRAPH-F92A */ + ["\uF92B", "\uF92B"], /* CJK COMPATIBILITY IDEOGRAPH-F92B */ + ["\uF92C", "\uF92C"], /* CJK COMPATIBILITY IDEOGRAPH-F92C */ + ["\uF92D", "\uF92D"], /* CJK COMPATIBILITY IDEOGRAPH-F92D */ + ["\uF92E", "\uF92E"], /* CJK COMPATIBILITY IDEOGRAPH-F92E */ + ["\uF92F", "\uF92F"], /* CJK COMPATIBILITY IDEOGRAPH-F92F */ + ["\uF930", "\uF930"], /* CJK COMPATIBILITY IDEOGRAPH-F930 */ + ["\uF931", "\uF931"], /* CJK COMPATIBILITY IDEOGRAPH-F931 */ + ["\uF932", "\uF932"], /* CJK COMPATIBILITY IDEOGRAPH-F932 */ + ["\uF933", "\uF933"], /* CJK COMPATIBILITY IDEOGRAPH-F933 */ + ["\uF934", "\uF934"], /* CJK COMPATIBILITY IDEOGRAPH-F934 */ + ["\uF935", "\uF935"], /* CJK COMPATIBILITY IDEOGRAPH-F935 */ + ["\uF936", "\uF936"], /* CJK COMPATIBILITY IDEOGRAPH-F936 */ + ["\uF937", "\uF937"], /* CJK COMPATIBILITY IDEOGRAPH-F937 */ + ["\uF938", "\uF938"], /* CJK COMPATIBILITY IDEOGRAPH-F938 */ + ["\uF939", "\uF939"], /* CJK COMPATIBILITY IDEOGRAPH-F939 */ + ["\uF93A", "\uF93A"], /* CJK COMPATIBILITY IDEOGRAPH-F93A */ + ["\uF93B", "\uF93B"], /* CJK COMPATIBILITY IDEOGRAPH-F93B */ + ["\uF93C", "\uF93C"], /* CJK COMPATIBILITY IDEOGRAPH-F93C */ + ["\uF93D", "\uF93D"], /* CJK COMPATIBILITY IDEOGRAPH-F93D */ + ["\uF93E", "\uF93E"], /* CJK COMPATIBILITY IDEOGRAPH-F93E */ + ["\uF93F", "\uF93F"], /* CJK COMPATIBILITY IDEOGRAPH-F93F */ + ["\uF940", "\uF940"], /* CJK COMPATIBILITY IDEOGRAPH-F940 */ + ["\uF941", "\uF941"], /* CJK COMPATIBILITY IDEOGRAPH-F941 */ + ["\uF942", "\uF942"], /* CJK COMPATIBILITY IDEOGRAPH-F942 */ + ["\uF943", "\uF943"], /* CJK COMPATIBILITY IDEOGRAPH-F943 */ + ["\uF944", "\uF944"], /* CJK COMPATIBILITY IDEOGRAPH-F944 */ + ["\uF945", "\uF945"], /* CJK COMPATIBILITY IDEOGRAPH-F945 */ + ["\uF946", "\uF946"], /* CJK COMPATIBILITY IDEOGRAPH-F946 */ + ["\uF947", "\uF947"], /* CJK COMPATIBILITY IDEOGRAPH-F947 */ + ["\uF948", "\uF948"], /* CJK COMPATIBILITY IDEOGRAPH-F948 */ + ["\uF949", "\uF949"], /* CJK COMPATIBILITY IDEOGRAPH-F949 */ + ["\uF94A", "\uF94A"], /* CJK COMPATIBILITY IDEOGRAPH-F94A */ + ["\uF94B", "\uF94B"], /* CJK COMPATIBILITY IDEOGRAPH-F94B */ + ["\uF94C", "\uF94C"], /* CJK COMPATIBILITY IDEOGRAPH-F94C */ + ["\uF94D", "\uF94D"], /* CJK COMPATIBILITY IDEOGRAPH-F94D */ + ["\uF94E", "\uF94E"], /* CJK COMPATIBILITY IDEOGRAPH-F94E */ + ["\uF94F", "\uF94F"], /* CJK COMPATIBILITY IDEOGRAPH-F94F */ + ["\uF950", "\uF950"], /* CJK COMPATIBILITY IDEOGRAPH-F950 */ + ["\uF951", "\uF951"], /* CJK COMPATIBILITY IDEOGRAPH-F951 */ + ["\uF952", "\uF952"], /* CJK COMPATIBILITY IDEOGRAPH-F952 */ + ["\uF953", "\uF953"], /* CJK COMPATIBILITY IDEOGRAPH-F953 */ + ["\uF954", "\uF954"], /* CJK COMPATIBILITY IDEOGRAPH-F954 */ + ["\uF955", "\uF955"], /* CJK COMPATIBILITY IDEOGRAPH-F955 */ + ["\uF956", "\uF956"], /* CJK COMPATIBILITY IDEOGRAPH-F956 */ + ["\uF957", "\uF957"], /* CJK COMPATIBILITY IDEOGRAPH-F957 */ + ["\uF958", "\uF958"], /* CJK COMPATIBILITY IDEOGRAPH-F958 */ + ["\uF959", "\uF959"], /* CJK COMPATIBILITY IDEOGRAPH-F959 */ + ["\uF95A", "\uF95A"], /* CJK COMPATIBILITY IDEOGRAPH-F95A */ + ["\uF95B", "\uF95B"], /* CJK COMPATIBILITY IDEOGRAPH-F95B */ + ["\uF95C", "\uF95C"], /* CJK COMPATIBILITY IDEOGRAPH-F95C */ + ["\uF95D", "\uF95D"], /* CJK COMPATIBILITY IDEOGRAPH-F95D */ + ["\uF95E", "\uF95E"], /* CJK COMPATIBILITY IDEOGRAPH-F95E */ + ["\uF95F", "\uF95F"], /* CJK COMPATIBILITY IDEOGRAPH-F95F */ + ["\uF960", "\uF960"], /* CJK COMPATIBILITY IDEOGRAPH-F960 */ + ["\uF961", "\uF961"], /* CJK COMPATIBILITY IDEOGRAPH-F961 */ + ["\uF962", "\uF962"], /* CJK COMPATIBILITY IDEOGRAPH-F962 */ + ["\uF963", "\uF963"], /* CJK COMPATIBILITY IDEOGRAPH-F963 */ + ["\uF964", "\uF964"], /* CJK COMPATIBILITY IDEOGRAPH-F964 */ + ["\uF965", "\uF965"], /* CJK COMPATIBILITY IDEOGRAPH-F965 */ + ["\uF966", "\uF966"], /* CJK COMPATIBILITY IDEOGRAPH-F966 */ + ["\uF967", "\uF967"], /* CJK COMPATIBILITY IDEOGRAPH-F967 */ + ["\uF968", "\uF968"], /* CJK COMPATIBILITY IDEOGRAPH-F968 */ + ["\uF969", "\uF969"], /* CJK COMPATIBILITY IDEOGRAPH-F969 */ + ["\uF96A", "\uF96A"], /* CJK COMPATIBILITY IDEOGRAPH-F96A */ + ["\uF96B", "\uF96B"], /* CJK COMPATIBILITY IDEOGRAPH-F96B */ + ["\uF96C", "\uF96C"], /* CJK COMPATIBILITY IDEOGRAPH-F96C */ + ["\uF96D", "\uF96D"], /* CJK COMPATIBILITY IDEOGRAPH-F96D */ + ["\uF96E", "\uF96E"], /* CJK COMPATIBILITY IDEOGRAPH-F96E */ + ["\uF96F", "\uF96F"], /* CJK COMPATIBILITY IDEOGRAPH-F96F */ + ["\uF970", "\uF970"], /* CJK COMPATIBILITY IDEOGRAPH-F970 */ + ["\uF971", "\uF971"], /* CJK COMPATIBILITY IDEOGRAPH-F971 */ + ["\uF972", "\uF972"], /* CJK COMPATIBILITY IDEOGRAPH-F972 */ + ["\uF973", "\uF973"], /* CJK COMPATIBILITY IDEOGRAPH-F973 */ + ["\uF974", "\uF974"], /* CJK COMPATIBILITY IDEOGRAPH-F974 */ + ["\uF975", "\uF975"], /* CJK COMPATIBILITY IDEOGRAPH-F975 */ + ["\uF976", "\uF976"], /* CJK COMPATIBILITY IDEOGRAPH-F976 */ + ["\uF977", "\uF977"], /* CJK COMPATIBILITY IDEOGRAPH-F977 */ + ["\uF978", "\uF978"], /* CJK COMPATIBILITY IDEOGRAPH-F978 */ + ["\uF979", "\uF979"], /* CJK COMPATIBILITY IDEOGRAPH-F979 */ + ["\uF97A", "\uF97A"], /* CJK COMPATIBILITY IDEOGRAPH-F97A */ + ["\uF97B", "\uF97B"], /* CJK COMPATIBILITY IDEOGRAPH-F97B */ + ["\uF97C", "\uF97C"], /* CJK COMPATIBILITY IDEOGRAPH-F97C */ + ["\uF97D", "\uF97D"], /* CJK COMPATIBILITY IDEOGRAPH-F97D */ + ["\uF97E", "\uF97E"], /* CJK COMPATIBILITY IDEOGRAPH-F97E */ + ["\uF97F", "\uF97F"], /* CJK COMPATIBILITY IDEOGRAPH-F97F */ + ["\uF980", "\uF980"], /* CJK COMPATIBILITY IDEOGRAPH-F980 */ + ["\uF981", "\uF981"], /* CJK COMPATIBILITY IDEOGRAPH-F981 */ + ["\uF982", "\uF982"], /* CJK COMPATIBILITY IDEOGRAPH-F982 */ + ["\uF983", "\uF983"], /* CJK COMPATIBILITY IDEOGRAPH-F983 */ + ["\uF984", "\uF984"], /* CJK COMPATIBILITY IDEOGRAPH-F984 */ + ["\uF985", "\uF985"], /* CJK COMPATIBILITY IDEOGRAPH-F985 */ + ["\uF986", "\uF986"], /* CJK COMPATIBILITY IDEOGRAPH-F986 */ + ["\uF987", "\uF987"], /* CJK COMPATIBILITY IDEOGRAPH-F987 */ + ["\uF988", "\uF988"], /* CJK COMPATIBILITY IDEOGRAPH-F988 */ + ["\uF989", "\uF989"], /* CJK COMPATIBILITY IDEOGRAPH-F989 */ + ["\uF98A", "\uF98A"], /* CJK COMPATIBILITY IDEOGRAPH-F98A */ + ["\uF98B", "\uF98B"], /* CJK COMPATIBILITY IDEOGRAPH-F98B */ + ["\uF98C", "\uF98C"], /* CJK COMPATIBILITY IDEOGRAPH-F98C */ + ["\uF98D", "\uF98D"], /* CJK COMPATIBILITY IDEOGRAPH-F98D */ + ["\uF98E", "\uF98E"], /* CJK COMPATIBILITY IDEOGRAPH-F98E */ + ["\uF98F", "\uF98F"], /* CJK COMPATIBILITY IDEOGRAPH-F98F */ + ["\uF990", "\uF990"], /* CJK COMPATIBILITY IDEOGRAPH-F990 */ + ["\uF991", "\uF991"], /* CJK COMPATIBILITY IDEOGRAPH-F991 */ + ["\uF992", "\uF992"], /* CJK COMPATIBILITY IDEOGRAPH-F992 */ + ["\uF993", "\uF993"], /* CJK COMPATIBILITY IDEOGRAPH-F993 */ + ["\uF994", "\uF994"], /* CJK COMPATIBILITY IDEOGRAPH-F994 */ + ["\uF995", "\uF995"], /* CJK COMPATIBILITY IDEOGRAPH-F995 */ + ["\uF996", "\uF996"], /* CJK COMPATIBILITY IDEOGRAPH-F996 */ + ["\uF997", "\uF997"], /* CJK COMPATIBILITY IDEOGRAPH-F997 */ + ["\uF998", "\uF998"], /* CJK COMPATIBILITY IDEOGRAPH-F998 */ + ["\uF999", "\uF999"], /* CJK COMPATIBILITY IDEOGRAPH-F999 */ + ["\uF99A", "\uF99A"], /* CJK COMPATIBILITY IDEOGRAPH-F99A */ + ["\uF99B", "\uF99B"], /* CJK COMPATIBILITY IDEOGRAPH-F99B */ + ["\uF99C", "\uF99C"], /* CJK COMPATIBILITY IDEOGRAPH-F99C */ + ["\uF99D", "\uF99D"], /* CJK COMPATIBILITY IDEOGRAPH-F99D */ + ["\uF99E", "\uF99E"], /* CJK COMPATIBILITY IDEOGRAPH-F99E */ + ["\uF99F", "\uF99F"], /* CJK COMPATIBILITY IDEOGRAPH-F99F */ + ["\uF9A0", "\uF9A0"], /* CJK COMPATIBILITY IDEOGRAPH-F9A0 */ + ["\uF9A1", "\uF9A1"], /* CJK COMPATIBILITY IDEOGRAPH-F9A1 */ + ["\uF9A2", "\uF9A2"], /* CJK COMPATIBILITY IDEOGRAPH-F9A2 */ + ["\uF9A3", "\uF9A3"], /* CJK COMPATIBILITY IDEOGRAPH-F9A3 */ + ["\uF9A4", "\uF9A4"], /* CJK COMPATIBILITY IDEOGRAPH-F9A4 */ + ["\uF9A5", "\uF9A5"], /* CJK COMPATIBILITY IDEOGRAPH-F9A5 */ + ["\uF9A6", "\uF9A6"], /* CJK COMPATIBILITY IDEOGRAPH-F9A6 */ + ["\uF9A7", "\uF9A7"], /* CJK COMPATIBILITY IDEOGRAPH-F9A7 */ + ["\uF9A8", "\uF9A8"], /* CJK COMPATIBILITY IDEOGRAPH-F9A8 */ + ["\uF9A9", "\uF9A9"], /* CJK COMPATIBILITY IDEOGRAPH-F9A9 */ + ["\uF9AA", "\uF9AA"], /* CJK COMPATIBILITY IDEOGRAPH-F9AA */ + ["\uF9AB", "\uF9AB"], /* CJK COMPATIBILITY IDEOGRAPH-F9AB */ + ["\uF9AC", "\uF9AC"], /* CJK COMPATIBILITY IDEOGRAPH-F9AC */ + ["\uF9AD", "\uF9AD"], /* CJK COMPATIBILITY IDEOGRAPH-F9AD */ + ["\uF9AE", "\uF9AE"], /* CJK COMPATIBILITY IDEOGRAPH-F9AE */ + ["\uF9AF", "\uF9AF"], /* CJK COMPATIBILITY IDEOGRAPH-F9AF */ + ["\uF9B0", "\uF9B0"], /* CJK COMPATIBILITY IDEOGRAPH-F9B0 */ + ["\uF9B1", "\uF9B1"], /* CJK COMPATIBILITY IDEOGRAPH-F9B1 */ + ["\uF9B2", "\uF9B2"], /* CJK COMPATIBILITY IDEOGRAPH-F9B2 */ + ["\uF9B3", "\uF9B3"], /* CJK COMPATIBILITY IDEOGRAPH-F9B3 */ + ["\uF9B4", "\uF9B4"], /* CJK COMPATIBILITY IDEOGRAPH-F9B4 */ + ["\uF9B5", "\uF9B5"], /* CJK COMPATIBILITY IDEOGRAPH-F9B5 */ + ["\uF9B6", "\uF9B6"], /* CJK COMPATIBILITY IDEOGRAPH-F9B6 */ + ["\uF9B7", "\uF9B7"], /* CJK COMPATIBILITY IDEOGRAPH-F9B7 */ + ["\uF9B8", "\uF9B8"], /* CJK COMPATIBILITY IDEOGRAPH-F9B8 */ + ["\uF9B9", "\uF9B9"], /* CJK COMPATIBILITY IDEOGRAPH-F9B9 */ + ["\uF9BA", "\uF9BA"], /* CJK COMPATIBILITY IDEOGRAPH-F9BA */ + ["\uF9BB", "\uF9BB"], /* CJK COMPATIBILITY IDEOGRAPH-F9BB */ + ["\uF9BC", "\uF9BC"], /* CJK COMPATIBILITY IDEOGRAPH-F9BC */ + ["\uF9BD", "\uF9BD"], /* CJK COMPATIBILITY IDEOGRAPH-F9BD */ + ["\uF9BE", "\uF9BE"], /* CJK COMPATIBILITY IDEOGRAPH-F9BE */ + ["\uF9BF", "\uF9BF"], /* CJK COMPATIBILITY IDEOGRAPH-F9BF */ + ["\uF9C0", "\uF9C0"], /* CJK COMPATIBILITY IDEOGRAPH-F9C0 */ + ["\uF9C1", "\uF9C1"], /* CJK COMPATIBILITY IDEOGRAPH-F9C1 */ + ["\uF9C2", "\uF9C2"], /* CJK COMPATIBILITY IDEOGRAPH-F9C2 */ + ["\uF9C3", "\uF9C3"], /* CJK COMPATIBILITY IDEOGRAPH-F9C3 */ + ["\uF9C4", "\uF9C4"], /* CJK COMPATIBILITY IDEOGRAPH-F9C4 */ + ["\uF9C5", "\uF9C5"], /* CJK COMPATIBILITY IDEOGRAPH-F9C5 */ + ["\uF9C6", "\uF9C6"], /* CJK COMPATIBILITY IDEOGRAPH-F9C6 */ + ["\uF9C7", "\uF9C7"], /* CJK COMPATIBILITY IDEOGRAPH-F9C7 */ + ["\uF9C8", "\uF9C8"], /* CJK COMPATIBILITY IDEOGRAPH-F9C8 */ + ["\uF9C9", "\uF9C9"], /* CJK COMPATIBILITY IDEOGRAPH-F9C9 */ + ["\uF9CA", "\uF9CA"], /* CJK COMPATIBILITY IDEOGRAPH-F9CA */ + ["\uF9CB", "\uF9CB"], /* CJK COMPATIBILITY IDEOGRAPH-F9CB */ + ["\uF9CC", "\uF9CC"], /* CJK COMPATIBILITY IDEOGRAPH-F9CC */ + ["\uF9CD", "\uF9CD"], /* CJK COMPATIBILITY IDEOGRAPH-F9CD */ + ["\uF9CE", "\uF9CE"], /* CJK COMPATIBILITY IDEOGRAPH-F9CE */ + ["\uF9CF", "\uF9CF"], /* CJK COMPATIBILITY IDEOGRAPH-F9CF */ + ["\uF9D0", "\uF9D0"], /* CJK COMPATIBILITY IDEOGRAPH-F9D0 */ + ["\uF9D1", "\uF9D1"], /* CJK COMPATIBILITY IDEOGRAPH-F9D1 */ + ["\uF9D2", "\uF9D2"], /* CJK COMPATIBILITY IDEOGRAPH-F9D2 */ + ["\uF9D3", "\uF9D3"], /* CJK COMPATIBILITY IDEOGRAPH-F9D3 */ + ["\uF9D4", "\uF9D4"], /* CJK COMPATIBILITY IDEOGRAPH-F9D4 */ + ["\uF9D5", "\uF9D5"], /* CJK COMPATIBILITY IDEOGRAPH-F9D5 */ + ["\uF9D6", "\uF9D6"], /* CJK COMPATIBILITY IDEOGRAPH-F9D6 */ + ["\uF9D7", "\uF9D7"], /* CJK COMPATIBILITY IDEOGRAPH-F9D7 */ + ["\uF9D8", "\uF9D8"], /* CJK COMPATIBILITY IDEOGRAPH-F9D8 */ + ["\uF9D9", "\uF9D9"], /* CJK COMPATIBILITY IDEOGRAPH-F9D9 */ + ["\uF9DA", "\uF9DA"], /* CJK COMPATIBILITY IDEOGRAPH-F9DA */ + ["\uF9DB", "\uF9DB"], /* CJK COMPATIBILITY IDEOGRAPH-F9DB */ + ["\uF9DC", "\uF9DC"], /* CJK COMPATIBILITY IDEOGRAPH-F9DC */ + ["\uF9DD", "\uF9DD"], /* CJK COMPATIBILITY IDEOGRAPH-F9DD */ + ["\uF9DE", "\uF9DE"], /* CJK COMPATIBILITY IDEOGRAPH-F9DE */ + ["\uF9DF", "\uF9DF"], /* CJK COMPATIBILITY IDEOGRAPH-F9DF */ + ["\uF9E0", "\uF9E0"], /* CJK COMPATIBILITY IDEOGRAPH-F9E0 */ + ["\uF9E1", "\uF9E1"], /* CJK COMPATIBILITY IDEOGRAPH-F9E1 */ + ["\uF9E2", "\uF9E2"], /* CJK COMPATIBILITY IDEOGRAPH-F9E2 */ + ["\uF9E3", "\uF9E3"], /* CJK COMPATIBILITY IDEOGRAPH-F9E3 */ + ["\uF9E4", "\uF9E4"], /* CJK COMPATIBILITY IDEOGRAPH-F9E4 */ + ["\uF9E5", "\uF9E5"], /* CJK COMPATIBILITY IDEOGRAPH-F9E5 */ + ["\uF9E6", "\uF9E6"], /* CJK COMPATIBILITY IDEOGRAPH-F9E6 */ + ["\uF9E7", "\uF9E7"], /* CJK COMPATIBILITY IDEOGRAPH-F9E7 */ + ["\uF9E8", "\uF9E8"], /* CJK COMPATIBILITY IDEOGRAPH-F9E8 */ + ["\uF9E9", "\uF9E9"], /* CJK COMPATIBILITY IDEOGRAPH-F9E9 */ + ["\uF9EA", "\uF9EA"], /* CJK COMPATIBILITY IDEOGRAPH-F9EA */ + ["\uF9EB", "\uF9EB"], /* CJK COMPATIBILITY IDEOGRAPH-F9EB */ + ["\uF9EC", "\uF9EC"], /* CJK COMPATIBILITY IDEOGRAPH-F9EC */ + ["\uF9ED", "\uF9ED"], /* CJK COMPATIBILITY IDEOGRAPH-F9ED */ + ["\uF9EE", "\uF9EE"], /* CJK COMPATIBILITY IDEOGRAPH-F9EE */ + ["\uF9EF", "\uF9EF"], /* CJK COMPATIBILITY IDEOGRAPH-F9EF */ + ["\uF9F0", "\uF9F0"], /* CJK COMPATIBILITY IDEOGRAPH-F9F0 */ + ["\uF9F1", "\uF9F1"], /* CJK COMPATIBILITY IDEOGRAPH-F9F1 */ + ["\uF9F2", "\uF9F2"], /* CJK COMPATIBILITY IDEOGRAPH-F9F2 */ + ["\uF9F3", "\uF9F3"], /* CJK COMPATIBILITY IDEOGRAPH-F9F3 */ + ["\uF9F4", "\uF9F4"], /* CJK COMPATIBILITY IDEOGRAPH-F9F4 */ + ["\uF9F5", "\uF9F5"], /* CJK COMPATIBILITY IDEOGRAPH-F9F5 */ + ["\uF9F6", "\uF9F6"], /* CJK COMPATIBILITY IDEOGRAPH-F9F6 */ + ["\uF9F7", "\uF9F7"], /* CJK COMPATIBILITY IDEOGRAPH-F9F7 */ + ["\uF9F8", "\uF9F8"], /* CJK COMPATIBILITY IDEOGRAPH-F9F8 */ + ["\uF9F9", "\uF9F9"], /* CJK COMPATIBILITY IDEOGRAPH-F9F9 */ + ["\uF9FA", "\uF9FA"], /* CJK COMPATIBILITY IDEOGRAPH-F9FA */ + ["\uF9FB", "\uF9FB"], /* CJK COMPATIBILITY IDEOGRAPH-F9FB */ + ["\uF9FC", "\uF9FC"], /* CJK COMPATIBILITY IDEOGRAPH-F9FC */ + ["\uF9FD", "\uF9FD"], /* CJK COMPATIBILITY IDEOGRAPH-F9FD */ + ["\uF9FE", "\uF9FE"], /* CJK COMPATIBILITY IDEOGRAPH-F9FE */ + ["\uF9FF", "\uF9FF"], /* CJK COMPATIBILITY IDEOGRAPH-F9FF */ + ["\uFA00", "\uFA00"], /* CJK COMPATIBILITY IDEOGRAPH-FA00 */ + ["\uFA01", "\uFA01"], /* CJK COMPATIBILITY IDEOGRAPH-FA01 */ + ["\uFA02", "\uFA02"], /* CJK COMPATIBILITY IDEOGRAPH-FA02 */ + ["\uFA03", "\uFA03"], /* CJK COMPATIBILITY IDEOGRAPH-FA03 */ + ["\uFA04", "\uFA04"], /* CJK COMPATIBILITY IDEOGRAPH-FA04 */ + ["\uFA05", "\uFA05"], /* CJK COMPATIBILITY IDEOGRAPH-FA05 */ + ["\uFA06", "\uFA06"], /* CJK COMPATIBILITY IDEOGRAPH-FA06 */ + ["\uFA07", "\uFA07"], /* CJK COMPATIBILITY IDEOGRAPH-FA07 */ + ["\uFA08", "\uFA08"], /* CJK COMPATIBILITY IDEOGRAPH-FA08 */ + ["\uFA09", "\uFA09"], /* CJK COMPATIBILITY IDEOGRAPH-FA09 */ + ["\uFA0A", "\uFA0A"], /* CJK COMPATIBILITY IDEOGRAPH-FA0A */ + ["\uFA0B", "\uFA0B"], /* CJK COMPATIBILITY IDEOGRAPH-FA0B */ + ["\uFA0C", "\uFA0C"], /* CJK COMPATIBILITY IDEOGRAPH-FA0C */ + ["\uFA0D", "\uFA0D"], /* CJK COMPATIBILITY IDEOGRAPH-FA0D */ + ["\uFA0E", "\uFA0E"], /* CJK COMPATIBILITY IDEOGRAPH-FA0E */ + ["\uFA0F", "\uFA0F"], /* CJK COMPATIBILITY IDEOGRAPH-FA0F */ + ["\uFA10", "\uFA10"], /* CJK COMPATIBILITY IDEOGRAPH-FA10 */ + ["\uFA11", "\uFA11"], /* CJK COMPATIBILITY IDEOGRAPH-FA11 */ + ["\uFA12", "\uFA12"], /* CJK COMPATIBILITY IDEOGRAPH-FA12 */ + ["\uFA13", "\uFA13"], /* CJK COMPATIBILITY IDEOGRAPH-FA13 */ + ["\uFA14", "\uFA14"], /* CJK COMPATIBILITY IDEOGRAPH-FA14 */ + ["\uFA15", "\uFA15"], /* CJK COMPATIBILITY IDEOGRAPH-FA15 */ + ["\uFA16", "\uFA16"], /* CJK COMPATIBILITY IDEOGRAPH-FA16 */ + ["\uFA17", "\uFA17"], /* CJK COMPATIBILITY IDEOGRAPH-FA17 */ + ["\uFA18", "\uFA18"], /* CJK COMPATIBILITY IDEOGRAPH-FA18 */ + ["\uFA19", "\uFA19"], /* CJK COMPATIBILITY IDEOGRAPH-FA19 */ + ["\uFA1A", "\uFA1A"], /* CJK COMPATIBILITY IDEOGRAPH-FA1A */ + ["\uFA1B", "\uFA1B"], /* CJK COMPATIBILITY IDEOGRAPH-FA1B */ + ["\uFA1C", "\uFA1C"], /* CJK COMPATIBILITY IDEOGRAPH-FA1C */ + ["\uFA1D", "\uFA1D"], /* CJK COMPATIBILITY IDEOGRAPH-FA1D */ + ["\uFA1E", "\uFA1E"], /* CJK COMPATIBILITY IDEOGRAPH-FA1E */ + ["\uFA1F", "\uFA1F"], /* CJK COMPATIBILITY IDEOGRAPH-FA1F */ + ["\uFA20", "\uFA20"], /* CJK COMPATIBILITY IDEOGRAPH-FA20 */ + ["\uFA21", "\uFA21"], /* CJK COMPATIBILITY IDEOGRAPH-FA21 */ + ["\uFA22", "\uFA22"], /* CJK COMPATIBILITY IDEOGRAPH-FA22 */ + ["\uFA23", "\uFA23"], /* CJK COMPATIBILITY IDEOGRAPH-FA23 */ + ["\uFA24", "\uFA24"], /* CJK COMPATIBILITY IDEOGRAPH-FA24 */ + ["\uFA25", "\uFA25"], /* CJK COMPATIBILITY IDEOGRAPH-FA25 */ + ["\uFA26", "\uFA26"], /* CJK COMPATIBILITY IDEOGRAPH-FA26 */ + ["\uFA27", "\uFA27"], /* CJK COMPATIBILITY IDEOGRAPH-FA27 */ + ["\uFA28", "\uFA28"], /* CJK COMPATIBILITY IDEOGRAPH-FA28 */ + ["\uFA29", "\uFA29"], /* CJK COMPATIBILITY IDEOGRAPH-FA29 */ + ["\uFA2A", "\uFA2A"], /* CJK COMPATIBILITY IDEOGRAPH-FA2A */ + ["\uFA2B", "\uFA2B"], /* CJK COMPATIBILITY IDEOGRAPH-FA2B */ + ["\uFA2C", "\uFA2C"], /* CJK COMPATIBILITY IDEOGRAPH-FA2C */ + ["\uFA2D", "\uFA2D"], /* CJK COMPATIBILITY IDEOGRAPH-FA2D */ + ["\uFA2E", "\uFA2E"], /* CJK COMPATIBILITY IDEOGRAPH-FA2E */ + ["\uFA2F", "\uFA2F"], /* CJK COMPATIBILITY IDEOGRAPH-FA2F */ + ["\uFA30", "\uFA30"], /* CJK COMPATIBILITY IDEOGRAPH-FA30 */ + ["\uFA31", "\uFA31"], /* CJK COMPATIBILITY IDEOGRAPH-FA31 */ + ["\uFA32", "\uFA32"], /* CJK COMPATIBILITY IDEOGRAPH-FA32 */ + ["\uFA33", "\uFA33"], /* CJK COMPATIBILITY IDEOGRAPH-FA33 */ + ["\uFA34", "\uFA34"], /* CJK COMPATIBILITY IDEOGRAPH-FA34 */ + ["\uFA35", "\uFA35"], /* CJK COMPATIBILITY IDEOGRAPH-FA35 */ + ["\uFA36", "\uFA36"], /* CJK COMPATIBILITY IDEOGRAPH-FA36 */ + ["\uFA37", "\uFA37"], /* CJK COMPATIBILITY IDEOGRAPH-FA37 */ + ["\uFA38", "\uFA38"], /* CJK COMPATIBILITY IDEOGRAPH-FA38 */ + ["\uFA39", "\uFA39"], /* CJK COMPATIBILITY IDEOGRAPH-FA39 */ + ["\uFA3A", "\uFA3A"], /* CJK COMPATIBILITY IDEOGRAPH-FA3A */ + ["\uFA3B", "\uFA3B"], /* CJK COMPATIBILITY IDEOGRAPH-FA3B */ + ["\uFA3C", "\uFA3C"], /* CJK COMPATIBILITY IDEOGRAPH-FA3C */ + ["\uFA3D", "\uFA3D"], /* CJK COMPATIBILITY IDEOGRAPH-FA3D */ + ["\uFA3E", "\uFA3E"], /* CJK COMPATIBILITY IDEOGRAPH-FA3E */ + ["\uFA3F", "\uFA3F"], /* CJK COMPATIBILITY IDEOGRAPH-FA3F */ + ["\uFA40", "\uFA40"], /* CJK COMPATIBILITY IDEOGRAPH-FA40 */ + ["\uFA41", "\uFA41"], /* CJK COMPATIBILITY IDEOGRAPH-FA41 */ + ["\uFA42", "\uFA42"], /* CJK COMPATIBILITY IDEOGRAPH-FA42 */ + ["\uFA43", "\uFA43"], /* CJK COMPATIBILITY IDEOGRAPH-FA43 */ + ["\uFA44", "\uFA44"], /* CJK COMPATIBILITY IDEOGRAPH-FA44 */ + ["\uFA45", "\uFA45"], /* CJK COMPATIBILITY IDEOGRAPH-FA45 */ + ["\uFA46", "\uFA46"], /* CJK COMPATIBILITY IDEOGRAPH-FA46 */ + ["\uFA47", "\uFA47"], /* CJK COMPATIBILITY IDEOGRAPH-FA47 */ + ["\uFA48", "\uFA48"], /* CJK COMPATIBILITY IDEOGRAPH-FA48 */ + ["\uFA49", "\uFA49"], /* CJK COMPATIBILITY IDEOGRAPH-FA49 */ + ["\uFA4A", "\uFA4A"], /* CJK COMPATIBILITY IDEOGRAPH-FA4A */ + ["\uFA4B", "\uFA4B"], /* CJK COMPATIBILITY IDEOGRAPH-FA4B */ + ["\uFA4C", "\uFA4C"], /* CJK COMPATIBILITY IDEOGRAPH-FA4C */ + ["\uFA4D", "\uFA4D"], /* CJK COMPATIBILITY IDEOGRAPH-FA4D */ + ["\uFA4E", "\uFA4E"], /* CJK COMPATIBILITY IDEOGRAPH-FA4E */ + ["\uFA4F", "\uFA4F"], /* CJK COMPATIBILITY IDEOGRAPH-FA4F */ + ["\uFA50", "\uFA50"], /* CJK COMPATIBILITY IDEOGRAPH-FA50 */ + ["\uFA51", "\uFA51"], /* CJK COMPATIBILITY IDEOGRAPH-FA51 */ + ["\uFA52", "\uFA52"], /* CJK COMPATIBILITY IDEOGRAPH-FA52 */ + ["\uFA53", "\uFA53"], /* CJK COMPATIBILITY IDEOGRAPH-FA53 */ + ["\uFA54", "\uFA54"], /* CJK COMPATIBILITY IDEOGRAPH-FA54 */ + ["\uFA55", "\uFA55"], /* CJK COMPATIBILITY IDEOGRAPH-FA55 */ + ["\uFA56", "\uFA56"], /* CJK COMPATIBILITY IDEOGRAPH-FA56 */ + ["\uFA57", "\uFA57"], /* CJK COMPATIBILITY IDEOGRAPH-FA57 */ + ["\uFA58", "\uFA58"], /* CJK COMPATIBILITY IDEOGRAPH-FA58 */ + ["\uFA59", "\uFA59"], /* CJK COMPATIBILITY IDEOGRAPH-FA59 */ + ["\uFA5A", "\uFA5A"], /* CJK COMPATIBILITY IDEOGRAPH-FA5A */ + ["\uFA5B", "\uFA5B"], /* CJK COMPATIBILITY IDEOGRAPH-FA5B */ + ["\uFA5C", "\uFA5C"], /* CJK COMPATIBILITY IDEOGRAPH-FA5C */ + ["\uFA5D", "\uFA5D"], /* CJK COMPATIBILITY IDEOGRAPH-FA5D */ + ["\uFA5E", "\uFA5E"], /* CJK COMPATIBILITY IDEOGRAPH-FA5E */ + ["\uFA5F", "\uFA5F"], /* CJK COMPATIBILITY IDEOGRAPH-FA5F */ + ["\uFA60", "\uFA60"], /* CJK COMPATIBILITY IDEOGRAPH-FA60 */ + ["\uFA61", "\uFA61"], /* CJK COMPATIBILITY IDEOGRAPH-FA61 */ + ["\uFA62", "\uFA62"], /* CJK COMPATIBILITY IDEOGRAPH-FA62 */ + ["\uFA63", "\uFA63"], /* CJK COMPATIBILITY IDEOGRAPH-FA63 */ + ["\uFA64", "\uFA64"], /* CJK COMPATIBILITY IDEOGRAPH-FA64 */ + ["\uFA65", "\uFA65"], /* CJK COMPATIBILITY IDEOGRAPH-FA65 */ + ["\uFA66", "\uFA66"], /* CJK COMPATIBILITY IDEOGRAPH-FA66 */ + ["\uFA67", "\uFA67"], /* CJK COMPATIBILITY IDEOGRAPH-FA67 */ + ["\uFA68", "\uFA68"], /* CJK COMPATIBILITY IDEOGRAPH-FA68 */ + ["\uFA69", "\uFA69"], /* CJK COMPATIBILITY IDEOGRAPH-FA69 */ + ["\uFA6A", "\uFA6A"], /* CJK COMPATIBILITY IDEOGRAPH-FA6A */ + ["\uFA6B", "\uFA6B"], /* CJK COMPATIBILITY IDEOGRAPH-FA6B */ + ["\uFA6C", "\uFA6C"], /* CJK COMPATIBILITY IDEOGRAPH-FA6C */ + ["\uFA6D", "\uFA6D"], /* CJK COMPATIBILITY IDEOGRAPH-FA6D */ + ["\uFA6E", "\uFA6E"], + ["\uFA6F", "\uFA6F"], + ["\uFA70", "\uFA70"], /* CJK COMPATIBILITY IDEOGRAPH-FA70 */ + ["\uFA71", "\uFA71"], /* CJK COMPATIBILITY IDEOGRAPH-FA71 */ + ["\uFA72", "\uFA72"], /* CJK COMPATIBILITY IDEOGRAPH-FA72 */ + ["\uFA73", "\uFA73"], /* CJK COMPATIBILITY IDEOGRAPH-FA73 */ + ["\uFA74", "\uFA74"], /* CJK COMPATIBILITY IDEOGRAPH-FA74 */ + ["\uFA75", "\uFA75"], /* CJK COMPATIBILITY IDEOGRAPH-FA75 */ + ["\uFA76", "\uFA76"], /* CJK COMPATIBILITY IDEOGRAPH-FA76 */ + ["\uFA77", "\uFA77"], /* CJK COMPATIBILITY IDEOGRAPH-FA77 */ + ["\uFA78", "\uFA78"], /* CJK COMPATIBILITY IDEOGRAPH-FA78 */ + ["\uFA79", "\uFA79"], /* CJK COMPATIBILITY IDEOGRAPH-FA79 */ + ["\uFA7A", "\uFA7A"], /* CJK COMPATIBILITY IDEOGRAPH-FA7A */ + ["\uFA7B", "\uFA7B"], /* CJK COMPATIBILITY IDEOGRAPH-FA7B */ + ["\uFA7C", "\uFA7C"], /* CJK COMPATIBILITY IDEOGRAPH-FA7C */ + ["\uFA7D", "\uFA7D"], /* CJK COMPATIBILITY IDEOGRAPH-FA7D */ + ["\uFA7E", "\uFA7E"], /* CJK COMPATIBILITY IDEOGRAPH-FA7E */ + ["\uFA7F", "\uFA7F"], /* CJK COMPATIBILITY IDEOGRAPH-FA7F */ + ["\uFA80", "\uFA80"], /* CJK COMPATIBILITY IDEOGRAPH-FA80 */ + ["\uFA81", "\uFA81"], /* CJK COMPATIBILITY IDEOGRAPH-FA81 */ + ["\uFA82", "\uFA82"], /* CJK COMPATIBILITY IDEOGRAPH-FA82 */ + ["\uFA83", "\uFA83"], /* CJK COMPATIBILITY IDEOGRAPH-FA83 */ + ["\uFA84", "\uFA84"], /* CJK COMPATIBILITY IDEOGRAPH-FA84 */ + ["\uFA85", "\uFA85"], /* CJK COMPATIBILITY IDEOGRAPH-FA85 */ + ["\uFA86", "\uFA86"], /* CJK COMPATIBILITY IDEOGRAPH-FA86 */ + ["\uFA87", "\uFA87"], /* CJK COMPATIBILITY IDEOGRAPH-FA87 */ + ["\uFA88", "\uFA88"], /* CJK COMPATIBILITY IDEOGRAPH-FA88 */ + ["\uFA89", "\uFA89"], /* CJK COMPATIBILITY IDEOGRAPH-FA89 */ + ["\uFA8A", "\uFA8A"], /* CJK COMPATIBILITY IDEOGRAPH-FA8A */ + ["\uFA8B", "\uFA8B"], /* CJK COMPATIBILITY IDEOGRAPH-FA8B */ + ["\uFA8C", "\uFA8C"], /* CJK COMPATIBILITY IDEOGRAPH-FA8C */ + ["\uFA8D", "\uFA8D"], /* CJK COMPATIBILITY IDEOGRAPH-FA8D */ + ["\uFA8E", "\uFA8E"], /* CJK COMPATIBILITY IDEOGRAPH-FA8E */ + ["\uFA8F", "\uFA8F"], /* CJK COMPATIBILITY IDEOGRAPH-FA8F */ + ["\uFA90", "\uFA90"], /* CJK COMPATIBILITY IDEOGRAPH-FA90 */ + ["\uFA91", "\uFA91"], /* CJK COMPATIBILITY IDEOGRAPH-FA91 */ + ["\uFA92", "\uFA92"], /* CJK COMPATIBILITY IDEOGRAPH-FA92 */ + ["\uFA93", "\uFA93"], /* CJK COMPATIBILITY IDEOGRAPH-FA93 */ + ["\uFA94", "\uFA94"], /* CJK COMPATIBILITY IDEOGRAPH-FA94 */ + ["\uFA95", "\uFA95"], /* CJK COMPATIBILITY IDEOGRAPH-FA95 */ + ["\uFA96", "\uFA96"], /* CJK COMPATIBILITY IDEOGRAPH-FA96 */ + ["\uFA97", "\uFA97"], /* CJK COMPATIBILITY IDEOGRAPH-FA97 */ + ["\uFA98", "\uFA98"], /* CJK COMPATIBILITY IDEOGRAPH-FA98 */ + ["\uFA99", "\uFA99"], /* CJK COMPATIBILITY IDEOGRAPH-FA99 */ + ["\uFA9A", "\uFA9A"], /* CJK COMPATIBILITY IDEOGRAPH-FA9A */ + ["\uFA9B", "\uFA9B"], /* CJK COMPATIBILITY IDEOGRAPH-FA9B */ + ["\uFA9C", "\uFA9C"], /* CJK COMPATIBILITY IDEOGRAPH-FA9C */ + ["\uFA9D", "\uFA9D"], /* CJK COMPATIBILITY IDEOGRAPH-FA9D */ + ["\uFA9E", "\uFA9E"], /* CJK COMPATIBILITY IDEOGRAPH-FA9E */ + ["\uFA9F", "\uFA9F"], /* CJK COMPATIBILITY IDEOGRAPH-FA9F */ + ["\uFAA0", "\uFAA0"], /* CJK COMPATIBILITY IDEOGRAPH-FAA0 */ + ["\uFAA1", "\uFAA1"], /* CJK COMPATIBILITY IDEOGRAPH-FAA1 */ + ["\uFAA2", "\uFAA2"], /* CJK COMPATIBILITY IDEOGRAPH-FAA2 */ + ["\uFAA3", "\uFAA3"], /* CJK COMPATIBILITY IDEOGRAPH-FAA3 */ + ["\uFAA4", "\uFAA4"], /* CJK COMPATIBILITY IDEOGRAPH-FAA4 */ + ["\uFAA5", "\uFAA5"], /* CJK COMPATIBILITY IDEOGRAPH-FAA5 */ + ["\uFAA6", "\uFAA6"], /* CJK COMPATIBILITY IDEOGRAPH-FAA6 */ + ["\uFAA7", "\uFAA7"], /* CJK COMPATIBILITY IDEOGRAPH-FAA7 */ + ["\uFAA8", "\uFAA8"], /* CJK COMPATIBILITY IDEOGRAPH-FAA8 */ + ["\uFAA9", "\uFAA9"], /* CJK COMPATIBILITY IDEOGRAPH-FAA9 */ + ["\uFAAA", "\uFAAA"], /* CJK COMPATIBILITY IDEOGRAPH-FAAA */ + ["\uFAAB", "\uFAAB"], /* CJK COMPATIBILITY IDEOGRAPH-FAAB */ + ["\uFAAC", "\uFAAC"], /* CJK COMPATIBILITY IDEOGRAPH-FAAC */ + ["\uFAAD", "\uFAAD"], /* CJK COMPATIBILITY IDEOGRAPH-FAAD */ + ["\uFAAE", "\uFAAE"], /* CJK COMPATIBILITY IDEOGRAPH-FAAE */ + ["\uFAAF", "\uFAAF"], /* CJK COMPATIBILITY IDEOGRAPH-FAAF */ + ["\uFAB0", "\uFAB0"], /* CJK COMPATIBILITY IDEOGRAPH-FAB0 */ + ["\uFAB1", "\uFAB1"], /* CJK COMPATIBILITY IDEOGRAPH-FAB1 */ + ["\uFAB2", "\uFAB2"], /* CJK COMPATIBILITY IDEOGRAPH-FAB2 */ + ["\uFAB3", "\uFAB3"], /* CJK COMPATIBILITY IDEOGRAPH-FAB3 */ + ["\uFAB4", "\uFAB4"], /* CJK COMPATIBILITY IDEOGRAPH-FAB4 */ + ["\uFAB5", "\uFAB5"], /* CJK COMPATIBILITY IDEOGRAPH-FAB5 */ + ["\uFAB6", "\uFAB6"], /* CJK COMPATIBILITY IDEOGRAPH-FAB6 */ + ["\uFAB7", "\uFAB7"], /* CJK COMPATIBILITY IDEOGRAPH-FAB7 */ + ["\uFAB8", "\uFAB8"], /* CJK COMPATIBILITY IDEOGRAPH-FAB8 */ + ["\uFAB9", "\uFAB9"], /* CJK COMPATIBILITY IDEOGRAPH-FAB9 */ + ["\uFABA", "\uFABA"], /* CJK COMPATIBILITY IDEOGRAPH-FABA */ + ["\uFABB", "\uFABB"], /* CJK COMPATIBILITY IDEOGRAPH-FABB */ + ["\uFABC", "\uFABC"], /* CJK COMPATIBILITY IDEOGRAPH-FABC */ + ["\uFABD", "\uFABD"], /* CJK COMPATIBILITY IDEOGRAPH-FABD */ + ["\uFABE", "\uFABE"], /* CJK COMPATIBILITY IDEOGRAPH-FABE */ + ["\uFABF", "\uFABF"], /* CJK COMPATIBILITY IDEOGRAPH-FABF */ + ["\uFAC0", "\uFAC0"], /* CJK COMPATIBILITY IDEOGRAPH-FAC0 */ + ["\uFAC1", "\uFAC1"], /* CJK COMPATIBILITY IDEOGRAPH-FAC1 */ + ["\uFAC2", "\uFAC2"], /* CJK COMPATIBILITY IDEOGRAPH-FAC2 */ + ["\uFAC3", "\uFAC3"], /* CJK COMPATIBILITY IDEOGRAPH-FAC3 */ + ["\uFAC4", "\uFAC4"], /* CJK COMPATIBILITY IDEOGRAPH-FAC4 */ + ["\uFAC5", "\uFAC5"], /* CJK COMPATIBILITY IDEOGRAPH-FAC5 */ + ["\uFAC6", "\uFAC6"], /* CJK COMPATIBILITY IDEOGRAPH-FAC6 */ + ["\uFAC7", "\uFAC7"], /* CJK COMPATIBILITY IDEOGRAPH-FAC7 */ + ["\uFAC8", "\uFAC8"], /* CJK COMPATIBILITY IDEOGRAPH-FAC8 */ + ["\uFAC9", "\uFAC9"], /* CJK COMPATIBILITY IDEOGRAPH-FAC9 */ + ["\uFACA", "\uFACA"], /* CJK COMPATIBILITY IDEOGRAPH-FACA */ + ["\uFACB", "\uFACB"], /* CJK COMPATIBILITY IDEOGRAPH-FACB */ + ["\uFACC", "\uFACC"], /* CJK COMPATIBILITY IDEOGRAPH-FACC */ + ["\uFACD", "\uFACD"], /* CJK COMPATIBILITY IDEOGRAPH-FACD */ + ["\uFACE", "\uFACE"], /* CJK COMPATIBILITY IDEOGRAPH-FACE */ + ["\uFACF", "\uFACF"], /* CJK COMPATIBILITY IDEOGRAPH-FACF */ + ["\uFAD0", "\uFAD0"], /* CJK COMPATIBILITY IDEOGRAPH-FAD0 */ + ["\uFAD1", "\uFAD1"], /* CJK COMPATIBILITY IDEOGRAPH-FAD1 */ + ["\uFAD2", "\uFAD2"], /* CJK COMPATIBILITY IDEOGRAPH-FAD2 */ + ["\uFAD3", "\uFAD3"], /* CJK COMPATIBILITY IDEOGRAPH-FAD3 */ + ["\uFAD4", "\uFAD4"], /* CJK COMPATIBILITY IDEOGRAPH-FAD4 */ + ["\uFAD5", "\uFAD5"], /* CJK COMPATIBILITY IDEOGRAPH-FAD5 */ + ["\uFAD6", "\uFAD6"], /* CJK COMPATIBILITY IDEOGRAPH-FAD6 */ + ["\uFAD7", "\uFAD7"], /* CJK COMPATIBILITY IDEOGRAPH-FAD7 */ + ["\uFAD8", "\uFAD8"], /* CJK COMPATIBILITY IDEOGRAPH-FAD8 */ + ["\uFAD9", "\uFAD9"], /* CJK COMPATIBILITY IDEOGRAPH-FAD9 */ + ["\uFADA", "\uFADA"], + ["\uFADB", "\uFADB"], + ["\uFADC", "\uFADC"], + ["\uFADD", "\uFADD"], + ["\uFADE", "\uFADE"], + ["\uFADF", "\uFADF"], + ["\uFAE0", "\uFAE0"], + ["\uFAE1", "\uFAE1"], + ["\uFAE2", "\uFAE2"], + ["\uFAE3", "\uFAE3"], + ["\uFAE4", "\uFAE4"], + ["\uFAE5", "\uFAE5"], + ["\uFAE6", "\uFAE6"], + ["\uFAE7", "\uFAE7"], + ["\uFAE8", "\uFAE8"], + ["\uFAE9", "\uFAE9"], + ["\uFAEA", "\uFAEA"], + ["\uFAEB", "\uFAEB"], + ["\uFAEC", "\uFAEC"], + ["\uFAED", "\uFAED"], + ["\uFAEE", "\uFAEE"], + ["\uFAEF", "\uFAEF"], + ["\uFAF0", "\uFAF0"], + ["\uFAF1", "\uFAF1"], + ["\uFAF2", "\uFAF2"], + ["\uFAF3", "\uFAF3"], + ["\uFAF4", "\uFAF4"], + ["\uFAF5", "\uFAF5"], + ["\uFAF6", "\uFAF6"], + ["\uFAF7", "\uFAF7"], + ["\uFAF8", "\uFAF8"], + ["\uFAF9", "\uFAF9"], + ["\uFAFA", "\uFAFA"], + ["\uFAFB", "\uFAFB"], + ["\uFAFC", "\uFAFC"], + ["\uFAFD", "\uFAFD"], + ["\uFAFE", "\uFAFE"], + ["\uFAFF", "\uFAFF"], + ["\u0046\u0046", "\uFB00"], /* LATIN SMALL LIGATURE FF */ + ["\u0046\u0049", "\uFB01"], /* LATIN SMALL LIGATURE FI */ + ["\u0046\u004C", "\uFB02"], /* LATIN SMALL LIGATURE FL */ + ["\u0046\u0046\u0049", "\uFB03"], /* LATIN SMALL LIGATURE FFI */ + ["\u0046\u0046\u004C", "\uFB04"], /* LATIN SMALL LIGATURE FFL */ + ["\u0053\u0054", "\uFB05"], /* LATIN SMALL LIGATURE LONG S T */ + ["\u0053\u0054", "\uFB06"], /* LATIN SMALL LIGATURE ST */ + ["\uFB07", "\uFB07"], + ["\uFB08", "\uFB08"], + ["\uFB09", "\uFB09"], + ["\uFB0A", "\uFB0A"], + ["\uFB0B", "\uFB0B"], + ["\uFB0C", "\uFB0C"], + ["\uFB0D", "\uFB0D"], + ["\uFB0E", "\uFB0E"], + ["\uFB0F", "\uFB0F"], + ["\uFB10", "\uFB10"], + ["\uFB11", "\uFB11"], + ["\uFB12", "\uFB12"], + ["\u0544\u0546", "\uFB13"], /* ARMENIAN SMALL LIGATURE MEN NOW */ + ["\u0544\u0535", "\uFB14"], /* ARMENIAN SMALL LIGATURE MEN ECH */ + ["\u0544\u053B", "\uFB15"], /* ARMENIAN SMALL LIGATURE MEN INI */ + ["\u054E\u0546", "\uFB16"], /* ARMENIAN SMALL LIGATURE VEW NOW */ + ["\u0544\u053D", "\uFB17"], /* ARMENIAN SMALL LIGATURE MEN XEH */ + ["\uFB18", "\uFB18"], + ["\uFB19", "\uFB19"], + ["\uFB1A", "\uFB1A"], + ["\uFB1B", "\uFB1B"], + ["\uFB1C", "\uFB1C"], + ["\uFB1D", "\uFB1D"], /* HEBREW LETTER YOD WITH HIRIQ */ + ["\uFB1E", "\uFB1E"], /* HEBREW POINT JUDEO-SPANISH VARIKA (HEBREW POINT VARIKA) */ + ["\uFB1F", "\uFB1F"], /* HEBREW LIGATURE YIDDISH YOD YOD PATAH */ + ["\uFB20", "\uFB20"], /* HEBREW LETTER ALTERNATIVE AYIN */ + ["\uFB21", "\uFB21"], /* HEBREW LETTER WIDE ALEF */ + ["\uFB22", "\uFB22"], /* HEBREW LETTER WIDE DALET */ + ["\uFB23", "\uFB23"], /* HEBREW LETTER WIDE HE */ + ["\uFB24", "\uFB24"], /* HEBREW LETTER WIDE KAF */ + ["\uFB25", "\uFB25"], /* HEBREW LETTER WIDE LAMED */ + ["\uFB26", "\uFB26"], /* HEBREW LETTER WIDE FINAL MEM */ + ["\uFB27", "\uFB27"], /* HEBREW LETTER WIDE RESH */ + ["\uFB28", "\uFB28"], /* HEBREW LETTER WIDE TAV */ + ["\uFB29", "\uFB29"], /* HEBREW LETTER ALTERNATIVE PLUS SIGN */ + ["\uFB2A", "\uFB2A"], /* HEBREW LETTER SHIN WITH SHIN DOT */ + ["\uFB2B", "\uFB2B"], /* HEBREW LETTER SHIN WITH SIN DOT */ + ["\uFB2C", "\uFB2C"], /* HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT */ + ["\uFB2D", "\uFB2D"], /* HEBREW LETTER SHIN WITH DAGESH AND SIN DOT */ + ["\uFB2E", "\uFB2E"], /* HEBREW LETTER ALEF WITH PATAH */ + ["\uFB2F", "\uFB2F"], /* HEBREW LETTER ALEF WITH QAMATS */ + ["\uFB30", "\uFB30"], /* HEBREW LETTER ALEF WITH MAPIQ */ + ["\uFB31", "\uFB31"], /* HEBREW LETTER BET WITH DAGESH */ + ["\uFB32", "\uFB32"], /* HEBREW LETTER GIMEL WITH DAGESH */ + ["\uFB33", "\uFB33"], /* HEBREW LETTER DALET WITH DAGESH */ + ["\uFB34", "\uFB34"], /* HEBREW LETTER HE WITH MAPIQ */ + ["\uFB35", "\uFB35"], /* HEBREW LETTER VAV WITH DAGESH */ + ["\uFB36", "\uFB36"], /* HEBREW LETTER ZAYIN WITH DAGESH */ + ["\uFB37", "\uFB37"], + ["\uFB38", "\uFB38"], /* HEBREW LETTER TET WITH DAGESH */ + ["\uFB39", "\uFB39"], /* HEBREW LETTER YOD WITH DAGESH */ + ["\uFB3A", "\uFB3A"], /* HEBREW LETTER FINAL KAF WITH DAGESH */ + ["\uFB3B", "\uFB3B"], /* HEBREW LETTER KAF WITH DAGESH */ + ["\uFB3C", "\uFB3C"], /* HEBREW LETTER LAMED WITH DAGESH */ + ["\uFB3D", "\uFB3D"], + ["\uFB3E", "\uFB3E"], /* HEBREW LETTER MEM WITH DAGESH */ + ["\uFB3F", "\uFB3F"], + ["\uFB40", "\uFB40"], /* HEBREW LETTER NUN WITH DAGESH */ + ["\uFB41", "\uFB41"], /* HEBREW LETTER SAMEKH WITH DAGESH */ + ["\uFB42", "\uFB42"], + ["\uFB43", "\uFB43"], /* HEBREW LETTER FINAL PE WITH DAGESH */ + ["\uFB44", "\uFB44"], /* HEBREW LETTER PE WITH DAGESH */ + ["\uFB45", "\uFB45"], + ["\uFB46", "\uFB46"], /* HEBREW LETTER TSADI WITH DAGESH */ + ["\uFB47", "\uFB47"], /* HEBREW LETTER QOF WITH DAGESH */ + ["\uFB48", "\uFB48"], /* HEBREW LETTER RESH WITH DAGESH */ + ["\uFB49", "\uFB49"], /* HEBREW LETTER SHIN WITH DAGESH */ + ["\uFB4A", "\uFB4A"], /* HEBREW LETTER TAV WITH DAGESH */ + ["\uFB4B", "\uFB4B"], /* HEBREW LETTER VAV WITH HOLAM */ + ["\uFB4C", "\uFB4C"], /* HEBREW LETTER BET WITH RAFE */ + ["\uFB4D", "\uFB4D"], /* HEBREW LETTER KAF WITH RAFE */ + ["\uFB4E", "\uFB4E"], /* HEBREW LETTER PE WITH RAFE */ + ["\uFB4F", "\uFB4F"], /* HEBREW LIGATURE ALEF LAMED */ + ["\uFB50", "\uFB50"], /* ARABIC LETTER ALEF WASLA ISOLATED FORM */ + ["\uFB51", "\uFB51"], /* ARABIC LETTER ALEF WASLA FINAL FORM */ + ["\uFB52", "\uFB52"], /* ARABIC LETTER BEEH ISOLATED FORM */ + ["\uFB53", "\uFB53"], /* ARABIC LETTER BEEH FINAL FORM */ + ["\uFB54", "\uFB54"], /* ARABIC LETTER BEEH INITIAL FORM */ + ["\uFB55", "\uFB55"], /* ARABIC LETTER BEEH MEDIAL FORM */ + ["\uFB56", "\uFB56"], /* ARABIC LETTER PEH ISOLATED FORM */ + ["\uFB57", "\uFB57"], /* ARABIC LETTER PEH FINAL FORM */ + ["\uFB58", "\uFB58"], /* ARABIC LETTER PEH INITIAL FORM */ + ["\uFB59", "\uFB59"], /* ARABIC LETTER PEH MEDIAL FORM */ + ["\uFB5A", "\uFB5A"], /* ARABIC LETTER BEHEH ISOLATED FORM */ + ["\uFB5B", "\uFB5B"], /* ARABIC LETTER BEHEH FINAL FORM */ + ["\uFB5C", "\uFB5C"], /* ARABIC LETTER BEHEH INITIAL FORM */ + ["\uFB5D", "\uFB5D"], /* ARABIC LETTER BEHEH MEDIAL FORM */ + ["\uFB5E", "\uFB5E"], /* ARABIC LETTER TTEHEH ISOLATED FORM */ + ["\uFB5F", "\uFB5F"], /* ARABIC LETTER TTEHEH FINAL FORM */ + ["\uFB60", "\uFB60"], /* ARABIC LETTER TTEHEH INITIAL FORM */ + ["\uFB61", "\uFB61"], /* ARABIC LETTER TTEHEH MEDIAL FORM */ + ["\uFB62", "\uFB62"], /* ARABIC LETTER TEHEH ISOLATED FORM */ + ["\uFB63", "\uFB63"], /* ARABIC LETTER TEHEH FINAL FORM */ + ["\uFB64", "\uFB64"], /* ARABIC LETTER TEHEH INITIAL FORM */ + ["\uFB65", "\uFB65"], /* ARABIC LETTER TEHEH MEDIAL FORM */ + ["\uFB66", "\uFB66"], /* ARABIC LETTER TTEH ISOLATED FORM */ + ["\uFB67", "\uFB67"], /* ARABIC LETTER TTEH FINAL FORM */ + ["\uFB68", "\uFB68"], /* ARABIC LETTER TTEH INITIAL FORM */ + ["\uFB69", "\uFB69"], /* ARABIC LETTER TTEH MEDIAL FORM */ + ["\uFB6A", "\uFB6A"], /* ARABIC LETTER VEH ISOLATED FORM */ + ["\uFB6B", "\uFB6B"], /* ARABIC LETTER VEH FINAL FORM */ + ["\uFB6C", "\uFB6C"], /* ARABIC LETTER VEH INITIAL FORM */ + ["\uFB6D", "\uFB6D"], /* ARABIC LETTER VEH MEDIAL FORM */ + ["\uFB6E", "\uFB6E"], /* ARABIC LETTER PEHEH ISOLATED FORM */ + ["\uFB6F", "\uFB6F"], /* ARABIC LETTER PEHEH FINAL FORM */ + ["\uFB70", "\uFB70"], /* ARABIC LETTER PEHEH INITIAL FORM */ + ["\uFB71", "\uFB71"], /* ARABIC LETTER PEHEH MEDIAL FORM */ + ["\uFB72", "\uFB72"], /* ARABIC LETTER DYEH ISOLATED FORM */ + ["\uFB73", "\uFB73"], /* ARABIC LETTER DYEH FINAL FORM */ + ["\uFB74", "\uFB74"], /* ARABIC LETTER DYEH INITIAL FORM */ + ["\uFB75", "\uFB75"], /* ARABIC LETTER DYEH MEDIAL FORM */ + ["\uFB76", "\uFB76"], /* ARABIC LETTER NYEH ISOLATED FORM */ + ["\uFB77", "\uFB77"], /* ARABIC LETTER NYEH FINAL FORM */ + ["\uFB78", "\uFB78"], /* ARABIC LETTER NYEH INITIAL FORM */ + ["\uFB79", "\uFB79"], /* ARABIC LETTER NYEH MEDIAL FORM */ + ["\uFB7A", "\uFB7A"], /* ARABIC LETTER TCHEH ISOLATED FORM */ + ["\uFB7B", "\uFB7B"], /* ARABIC LETTER TCHEH FINAL FORM */ + ["\uFB7C", "\uFB7C"], /* ARABIC LETTER TCHEH INITIAL FORM */ + ["\uFB7D", "\uFB7D"], /* ARABIC LETTER TCHEH MEDIAL FORM */ + ["\uFB7E", "\uFB7E"], /* ARABIC LETTER TCHEHEH ISOLATED FORM */ + ["\uFB7F", "\uFB7F"], /* ARABIC LETTER TCHEHEH FINAL FORM */ + ["\uFB80", "\uFB80"], /* ARABIC LETTER TCHEHEH INITIAL FORM */ + ["\uFB81", "\uFB81"], /* ARABIC LETTER TCHEHEH MEDIAL FORM */ + ["\uFB82", "\uFB82"], /* ARABIC LETTER DDAHAL ISOLATED FORM */ + ["\uFB83", "\uFB83"], /* ARABIC LETTER DDAHAL FINAL FORM */ + ["\uFB84", "\uFB84"], /* ARABIC LETTER DAHAL ISOLATED FORM */ + ["\uFB85", "\uFB85"], /* ARABIC LETTER DAHAL FINAL FORM */ + ["\uFB86", "\uFB86"], /* ARABIC LETTER DUL ISOLATED FORM */ + ["\uFB87", "\uFB87"], /* ARABIC LETTER DUL FINAL FORM */ + ["\uFB88", "\uFB88"], /* ARABIC LETTER DDAL ISOLATED FORM */ + ["\uFB89", "\uFB89"], /* ARABIC LETTER DDAL FINAL FORM */ + ["\uFB8A", "\uFB8A"], /* ARABIC LETTER JEH ISOLATED FORM */ + ["\uFB8B", "\uFB8B"], /* ARABIC LETTER JEH FINAL FORM */ + ["\uFB8C", "\uFB8C"], /* ARABIC LETTER RREH ISOLATED FORM */ + ["\uFB8D", "\uFB8D"], /* ARABIC LETTER RREH FINAL FORM */ + ["\uFB8E", "\uFB8E"], /* ARABIC LETTER KEHEH ISOLATED FORM */ + ["\uFB8F", "\uFB8F"], /* ARABIC LETTER KEHEH FINAL FORM */ + ["\uFB90", "\uFB90"], /* ARABIC LETTER KEHEH INITIAL FORM */ + ["\uFB91", "\uFB91"], /* ARABIC LETTER KEHEH MEDIAL FORM */ + ["\uFB92", "\uFB92"], /* ARABIC LETTER GAF ISOLATED FORM */ + ["\uFB93", "\uFB93"], /* ARABIC LETTER GAF FINAL FORM */ + ["\uFB94", "\uFB94"], /* ARABIC LETTER GAF INITIAL FORM */ + ["\uFB95", "\uFB95"], /* ARABIC LETTER GAF MEDIAL FORM */ + ["\uFB96", "\uFB96"], /* ARABIC LETTER GUEH ISOLATED FORM */ + ["\uFB97", "\uFB97"], /* ARABIC LETTER GUEH FINAL FORM */ + ["\uFB98", "\uFB98"], /* ARABIC LETTER GUEH INITIAL FORM */ + ["\uFB99", "\uFB99"], /* ARABIC LETTER GUEH MEDIAL FORM */ + ["\uFB9A", "\uFB9A"], /* ARABIC LETTER NGOEH ISOLATED FORM */ + ["\uFB9B", "\uFB9B"], /* ARABIC LETTER NGOEH FINAL FORM */ + ["\uFB9C", "\uFB9C"], /* ARABIC LETTER NGOEH INITIAL FORM */ + ["\uFB9D", "\uFB9D"], /* ARABIC LETTER NGOEH MEDIAL FORM */ + ["\uFB9E", "\uFB9E"], /* ARABIC LETTER NOON GHUNNA ISOLATED FORM */ + ["\uFB9F", "\uFB9F"], /* ARABIC LETTER NOON GHUNNA FINAL FORM */ + ["\uFBA0", "\uFBA0"], /* ARABIC LETTER RNOON ISOLATED FORM */ + ["\uFBA1", "\uFBA1"], /* ARABIC LETTER RNOON FINAL FORM */ + ["\uFBA2", "\uFBA2"], /* ARABIC LETTER RNOON INITIAL FORM */ + ["\uFBA3", "\uFBA3"], /* ARABIC LETTER RNOON MEDIAL FORM */ + ["\uFBA4", "\uFBA4"], /* ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM */ + ["\uFBA5", "\uFBA5"], /* ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM */ + ["\uFBA6", "\uFBA6"], /* ARABIC LETTER HEH GOAL ISOLATED FORM */ + ["\uFBA7", "\uFBA7"], /* ARABIC LETTER HEH GOAL FINAL FORM */ + ["\uFBA8", "\uFBA8"], /* ARABIC LETTER HEH GOAL INITIAL FORM */ + ["\uFBA9", "\uFBA9"], /* ARABIC LETTER HEH GOAL MEDIAL FORM */ + ["\uFBAA", "\uFBAA"], /* ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM */ + ["\uFBAB", "\uFBAB"], /* ARABIC LETTER HEH DOACHASHMEE FINAL FORM */ + ["\uFBAC", "\uFBAC"], /* ARABIC LETTER HEH DOACHASHMEE INITIAL FORM */ + ["\uFBAD", "\uFBAD"], /* ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM */ + ["\uFBAE", "\uFBAE"], /* ARABIC LETTER YEH BARREE ISOLATED FORM */ + ["\uFBAF", "\uFBAF"], /* ARABIC LETTER YEH BARREE FINAL FORM */ + ["\uFBB0", "\uFBB0"], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM */ + ["\uFBB1", "\uFBB1"], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM */ + ["\uFBB2", "\uFBB2"], /* ARABIC SYMBOL DOT ABOVE */ + ["\uFBB3", "\uFBB3"], /* ARABIC SYMBOL DOT BELOW */ + ["\uFBB4", "\uFBB4"], /* ARABIC SYMBOL TWO DOTS ABOVE */ + ["\uFBB5", "\uFBB5"], /* ARABIC SYMBOL TWO DOTS BELOW */ + ["\uFBB6", "\uFBB6"], /* ARABIC SYMBOL THREE DOTS ABOVE */ + ["\uFBB7", "\uFBB7"], /* ARABIC SYMBOL THREE DOTS BELOW */ + ["\uFBB8", "\uFBB8"], /* ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE */ + ["\uFBB9", "\uFBB9"], /* ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW */ + ["\uFBBA", "\uFBBA"], /* ARABIC SYMBOL FOUR DOTS ABOVE */ + ["\uFBBB", "\uFBBB"], /* ARABIC SYMBOL FOUR DOTS BELOW */ + ["\uFBBC", "\uFBBC"], /* ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW */ + ["\uFBBD", "\uFBBD"], /* ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE */ + ["\uFBBE", "\uFBBE"], /* ARABIC SYMBOL TWO DOTS VERTICALLY BELOW */ + ["\uFBBF", "\uFBBF"], /* ARABIC SYMBOL RING */ + ["\uFBC0", "\uFBC0"], /* ARABIC SYMBOL SMALL TAH ABOVE */ + ["\uFBC1", "\uFBC1"], /* ARABIC SYMBOL SMALL TAH BELOW */ + ["\uFBC2", "\uFBC2"], /* ARABIC SYMBOL WASLA ABOVE */ + ["\uFBC3", "\uFBC3"], + ["\uFBC4", "\uFBC4"], + ["\uFBC5", "\uFBC5"], + ["\uFBC6", "\uFBC6"], + ["\uFBC7", "\uFBC7"], + ["\uFBC8", "\uFBC8"], + ["\uFBC9", "\uFBC9"], + ["\uFBCA", "\uFBCA"], + ["\uFBCB", "\uFBCB"], + ["\uFBCC", "\uFBCC"], + ["\uFBCD", "\uFBCD"], + ["\uFBCE", "\uFBCE"], + ["\uFBCF", "\uFBCF"], + ["\uFBD0", "\uFBD0"], + ["\uFBD1", "\uFBD1"], + ["\uFBD2", "\uFBD2"], + ["\uFBD3", "\uFBD3"], /* ARABIC LETTER NG ISOLATED FORM */ + ["\uFBD4", "\uFBD4"], /* ARABIC LETTER NG FINAL FORM */ + ["\uFBD5", "\uFBD5"], /* ARABIC LETTER NG INITIAL FORM */ + ["\uFBD6", "\uFBD6"], /* ARABIC LETTER NG MEDIAL FORM */ + ["\uFBD7", "\uFBD7"], /* ARABIC LETTER U ISOLATED FORM */ + ["\uFBD8", "\uFBD8"], /* ARABIC LETTER U FINAL FORM */ + ["\uFBD9", "\uFBD9"], /* ARABIC LETTER OE ISOLATED FORM */ + ["\uFBDA", "\uFBDA"], /* ARABIC LETTER OE FINAL FORM */ + ["\uFBDB", "\uFBDB"], /* ARABIC LETTER YU ISOLATED FORM */ + ["\uFBDC", "\uFBDC"], /* ARABIC LETTER YU FINAL FORM */ + ["\uFBDD", "\uFBDD"], /* ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */ + ["\uFBDE", "\uFBDE"], /* ARABIC LETTER VE ISOLATED FORM */ + ["\uFBDF", "\uFBDF"], /* ARABIC LETTER VE FINAL FORM */ + ["\uFBE0", "\uFBE0"], /* ARABIC LETTER KIRGHIZ OE ISOLATED FORM */ + ["\uFBE1", "\uFBE1"], /* ARABIC LETTER KIRGHIZ OE FINAL FORM */ + ["\uFBE2", "\uFBE2"], /* ARABIC LETTER KIRGHIZ YU ISOLATED FORM */ + ["\uFBE3", "\uFBE3"], /* ARABIC LETTER KIRGHIZ YU FINAL FORM */ + ["\uFBE4", "\uFBE4"], /* ARABIC LETTER E ISOLATED FORM */ + ["\uFBE5", "\uFBE5"], /* ARABIC LETTER E FINAL FORM */ + ["\uFBE6", "\uFBE6"], /* ARABIC LETTER E INITIAL FORM */ + ["\uFBE7", "\uFBE7"], /* ARABIC LETTER E MEDIAL FORM */ + ["\uFBE8", "\uFBE8"], /* ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM */ + ["\uFBE9", "\uFBE9"], /* ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM */ + ["\uFBEA", "\uFBEA"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM */ + ["\uFBEB", "\uFBEB"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM */ + ["\uFBEC", "\uFBEC"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM */ + ["\uFBED", "\uFBED"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM */ + ["\uFBEE", "\uFBEE"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM */ + ["\uFBEF", "\uFBEF"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM */ + ["\uFBF0", "\uFBF0"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM */ + ["\uFBF1", "\uFBF1"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM */ + ["\uFBF2", "\uFBF2"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM */ + ["\uFBF3", "\uFBF3"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM */ + ["\uFBF4", "\uFBF4"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM */ + ["\uFBF5", "\uFBF5"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM */ + ["\uFBF6", "\uFBF6"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM */ + ["\uFBF7", "\uFBF7"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM */ + ["\uFBF8", "\uFBF8"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM */ + ["\uFBF9", "\uFBF9"], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFBFA", "\uFBFA"], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM */ + ["\uFBFB", "\uFBFB"], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM */ + ["\uFBFC", "\uFBFC"], /* ARABIC LETTER FARSI YEH ISOLATED FORM */ + ["\uFBFD", "\uFBFD"], /* ARABIC LETTER FARSI YEH FINAL FORM */ + ["\uFBFE", "\uFBFE"], /* ARABIC LETTER FARSI YEH INITIAL FORM */ + ["\uFBFF", "\uFBFF"], /* ARABIC LETTER FARSI YEH MEDIAL FORM */ + ["\uFC00", "\uFC00"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM */ + ["\uFC01", "\uFC01"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM */ + ["\uFC02", "\uFC02"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM */ + ["\uFC03", "\uFC03"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC04", "\uFC04"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM */ + ["\uFC05", "\uFC05"], /* ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM */ + ["\uFC06", "\uFC06"], /* ARABIC LIGATURE BEH WITH HAH ISOLATED FORM */ + ["\uFC07", "\uFC07"], /* ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM */ + ["\uFC08", "\uFC08"], /* ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM */ + ["\uFC09", "\uFC09"], /* ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC0A", "\uFC0A"], /* ARABIC LIGATURE BEH WITH YEH ISOLATED FORM */ + ["\uFC0B", "\uFC0B"], /* ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM */ + ["\uFC0C", "\uFC0C"], /* ARABIC LIGATURE TEH WITH HAH ISOLATED FORM */ + ["\uFC0D", "\uFC0D"], /* ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM */ + ["\uFC0E", "\uFC0E"], /* ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM */ + ["\uFC0F", "\uFC0F"], /* ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC10", "\uFC10"], /* ARABIC LIGATURE TEH WITH YEH ISOLATED FORM */ + ["\uFC11", "\uFC11"], /* ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM */ + ["\uFC12", "\uFC12"], /* ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM */ + ["\uFC13", "\uFC13"], /* ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC14", "\uFC14"], /* ARABIC LIGATURE THEH WITH YEH ISOLATED FORM */ + ["\uFC15", "\uFC15"], /* ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM */ + ["\uFC16", "\uFC16"], /* ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM */ + ["\uFC17", "\uFC17"], /* ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM */ + ["\uFC18", "\uFC18"], /* ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM */ + ["\uFC19", "\uFC19"], /* ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM */ + ["\uFC1A", "\uFC1A"], /* ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM */ + ["\uFC1B", "\uFC1B"], /* ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM */ + ["\uFC1C", "\uFC1C"], /* ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM */ + ["\uFC1D", "\uFC1D"], /* ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM */ + ["\uFC1E", "\uFC1E"], /* ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM */ + ["\uFC1F", "\uFC1F"], /* ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM */ + ["\uFC20", "\uFC20"], /* ARABIC LIGATURE SAD WITH HAH ISOLATED FORM */ + ["\uFC21", "\uFC21"], /* ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM */ + ["\uFC22", "\uFC22"], /* ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM */ + ["\uFC23", "\uFC23"], /* ARABIC LIGATURE DAD WITH HAH ISOLATED FORM */ + ["\uFC24", "\uFC24"], /* ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM */ + ["\uFC25", "\uFC25"], /* ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM */ + ["\uFC26", "\uFC26"], /* ARABIC LIGATURE TAH WITH HAH ISOLATED FORM */ + ["\uFC27", "\uFC27"], /* ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM */ + ["\uFC28", "\uFC28"], /* ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM */ + ["\uFC29", "\uFC29"], /* ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM */ + ["\uFC2A", "\uFC2A"], /* ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM */ + ["\uFC2B", "\uFC2B"], /* ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM */ + ["\uFC2C", "\uFC2C"], /* ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM */ + ["\uFC2D", "\uFC2D"], /* ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM */ + ["\uFC2E", "\uFC2E"], /* ARABIC LIGATURE FEH WITH HAH ISOLATED FORM */ + ["\uFC2F", "\uFC2F"], /* ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM */ + ["\uFC30", "\uFC30"], /* ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM */ + ["\uFC31", "\uFC31"], /* ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC32", "\uFC32"], /* ARABIC LIGATURE FEH WITH YEH ISOLATED FORM */ + ["\uFC33", "\uFC33"], /* ARABIC LIGATURE QAF WITH HAH ISOLATED FORM */ + ["\uFC34", "\uFC34"], /* ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM */ + ["\uFC35", "\uFC35"], /* ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC36", "\uFC36"], /* ARABIC LIGATURE QAF WITH YEH ISOLATED FORM */ + ["\uFC37", "\uFC37"], /* ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM */ + ["\uFC38", "\uFC38"], /* ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM */ + ["\uFC39", "\uFC39"], /* ARABIC LIGATURE KAF WITH HAH ISOLATED FORM */ + ["\uFC3A", "\uFC3A"], /* ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM */ + ["\uFC3B", "\uFC3B"], /* ARABIC LIGATURE KAF WITH LAM ISOLATED FORM */ + ["\uFC3C", "\uFC3C"], /* ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM */ + ["\uFC3D", "\uFC3D"], /* ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC3E", "\uFC3E"], /* ARABIC LIGATURE KAF WITH YEH ISOLATED FORM */ + ["\uFC3F", "\uFC3F"], /* ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM */ + ["\uFC40", "\uFC40"], /* ARABIC LIGATURE LAM WITH HAH ISOLATED FORM */ + ["\uFC41", "\uFC41"], /* ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM */ + ["\uFC42", "\uFC42"], /* ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM */ + ["\uFC43", "\uFC43"], /* ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC44", "\uFC44"], /* ARABIC LIGATURE LAM WITH YEH ISOLATED FORM */ + ["\uFC45", "\uFC45"], /* ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM */ + ["\uFC46", "\uFC46"], /* ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM */ + ["\uFC47", "\uFC47"], /* ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM */ + ["\uFC48", "\uFC48"], /* ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM */ + ["\uFC49", "\uFC49"], /* ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC4A", "\uFC4A"], /* ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM */ + ["\uFC4B", "\uFC4B"], /* ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM */ + ["\uFC4C", "\uFC4C"], /* ARABIC LIGATURE NOON WITH HAH ISOLATED FORM */ + ["\uFC4D", "\uFC4D"], /* ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM */ + ["\uFC4E", "\uFC4E"], /* ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM */ + ["\uFC4F", "\uFC4F"], /* ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC50", "\uFC50"], /* ARABIC LIGATURE NOON WITH YEH ISOLATED FORM */ + ["\uFC51", "\uFC51"], /* ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM */ + ["\uFC52", "\uFC52"], /* ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM */ + ["\uFC53", "\uFC53"], /* ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC54", "\uFC54"], /* ARABIC LIGATURE HEH WITH YEH ISOLATED FORM */ + ["\uFC55", "\uFC55"], /* ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM */ + ["\uFC56", "\uFC56"], /* ARABIC LIGATURE YEH WITH HAH ISOLATED FORM */ + ["\uFC57", "\uFC57"], /* ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM */ + ["\uFC58", "\uFC58"], /* ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM */ + ["\uFC59", "\uFC59"], /* ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFC5A", "\uFC5A"], /* ARABIC LIGATURE YEH WITH YEH ISOLATED FORM */ + ["\uFC5B", "\uFC5B"], /* ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM */ + ["\uFC5C", "\uFC5C"], /* ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM */ + ["\uFC5D", "\uFC5D"], /* ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM */ + ["\uFC5E", "\uFC5E"], /* ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM */ + ["\uFC5F", "\uFC5F"], /* ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM */ + ["\uFC60", "\uFC60"], /* ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM */ + ["\uFC61", "\uFC61"], /* ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM */ + ["\uFC62", "\uFC62"], /* ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM */ + ["\uFC63", "\uFC63"], /* ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM */ + ["\uFC64", "\uFC64"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM */ + ["\uFC65", "\uFC65"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM */ + ["\uFC66", "\uFC66"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM */ + ["\uFC67", "\uFC67"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM */ + ["\uFC68", "\uFC68"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM */ + ["\uFC69", "\uFC69"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM */ + ["\uFC6A", "\uFC6A"], /* ARABIC LIGATURE BEH WITH REH FINAL FORM */ + ["\uFC6B", "\uFC6B"], /* ARABIC LIGATURE BEH WITH ZAIN FINAL FORM */ + ["\uFC6C", "\uFC6C"], /* ARABIC LIGATURE BEH WITH MEEM FINAL FORM */ + ["\uFC6D", "\uFC6D"], /* ARABIC LIGATURE BEH WITH NOON FINAL FORM */ + ["\uFC6E", "\uFC6E"], /* ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM */ + ["\uFC6F", "\uFC6F"], /* ARABIC LIGATURE BEH WITH YEH FINAL FORM */ + ["\uFC70", "\uFC70"], /* ARABIC LIGATURE TEH WITH REH FINAL FORM */ + ["\uFC71", "\uFC71"], /* ARABIC LIGATURE TEH WITH ZAIN FINAL FORM */ + ["\uFC72", "\uFC72"], /* ARABIC LIGATURE TEH WITH MEEM FINAL FORM */ + ["\uFC73", "\uFC73"], /* ARABIC LIGATURE TEH WITH NOON FINAL FORM */ + ["\uFC74", "\uFC74"], /* ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM */ + ["\uFC75", "\uFC75"], /* ARABIC LIGATURE TEH WITH YEH FINAL FORM */ + ["\uFC76", "\uFC76"], /* ARABIC LIGATURE THEH WITH REH FINAL FORM */ + ["\uFC77", "\uFC77"], /* ARABIC LIGATURE THEH WITH ZAIN FINAL FORM */ + ["\uFC78", "\uFC78"], /* ARABIC LIGATURE THEH WITH MEEM FINAL FORM */ + ["\uFC79", "\uFC79"], /* ARABIC LIGATURE THEH WITH NOON FINAL FORM */ + ["\uFC7A", "\uFC7A"], /* ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM */ + ["\uFC7B", "\uFC7B"], /* ARABIC LIGATURE THEH WITH YEH FINAL FORM */ + ["\uFC7C", "\uFC7C"], /* ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM */ + ["\uFC7D", "\uFC7D"], /* ARABIC LIGATURE FEH WITH YEH FINAL FORM */ + ["\uFC7E", "\uFC7E"], /* ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM */ + ["\uFC7F", "\uFC7F"], /* ARABIC LIGATURE QAF WITH YEH FINAL FORM */ + ["\uFC80", "\uFC80"], /* ARABIC LIGATURE KAF WITH ALEF FINAL FORM */ + ["\uFC81", "\uFC81"], /* ARABIC LIGATURE KAF WITH LAM FINAL FORM */ + ["\uFC82", "\uFC82"], /* ARABIC LIGATURE KAF WITH MEEM FINAL FORM */ + ["\uFC83", "\uFC83"], /* ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM */ + ["\uFC84", "\uFC84"], /* ARABIC LIGATURE KAF WITH YEH FINAL FORM */ + ["\uFC85", "\uFC85"], /* ARABIC LIGATURE LAM WITH MEEM FINAL FORM */ + ["\uFC86", "\uFC86"], /* ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM */ + ["\uFC87", "\uFC87"], /* ARABIC LIGATURE LAM WITH YEH FINAL FORM */ + ["\uFC88", "\uFC88"], /* ARABIC LIGATURE MEEM WITH ALEF FINAL FORM */ + ["\uFC89", "\uFC89"], /* ARABIC LIGATURE MEEM WITH MEEM FINAL FORM */ + ["\uFC8A", "\uFC8A"], /* ARABIC LIGATURE NOON WITH REH FINAL FORM */ + ["\uFC8B", "\uFC8B"], /* ARABIC LIGATURE NOON WITH ZAIN FINAL FORM */ + ["\uFC8C", "\uFC8C"], /* ARABIC LIGATURE NOON WITH MEEM FINAL FORM */ + ["\uFC8D", "\uFC8D"], /* ARABIC LIGATURE NOON WITH NOON FINAL FORM */ + ["\uFC8E", "\uFC8E"], /* ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM */ + ["\uFC8F", "\uFC8F"], /* ARABIC LIGATURE NOON WITH YEH FINAL FORM */ + ["\uFC90", "\uFC90"], /* ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM */ + ["\uFC91", "\uFC91"], /* ARABIC LIGATURE YEH WITH REH FINAL FORM */ + ["\uFC92", "\uFC92"], /* ARABIC LIGATURE YEH WITH ZAIN FINAL FORM */ + ["\uFC93", "\uFC93"], /* ARABIC LIGATURE YEH WITH MEEM FINAL FORM */ + ["\uFC94", "\uFC94"], /* ARABIC LIGATURE YEH WITH NOON FINAL FORM */ + ["\uFC95", "\uFC95"], /* ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM */ + ["\uFC96", "\uFC96"], /* ARABIC LIGATURE YEH WITH YEH FINAL FORM */ + ["\uFC97", "\uFC97"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM */ + ["\uFC98", "\uFC98"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM */ + ["\uFC99", "\uFC99"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM */ + ["\uFC9A", "\uFC9A"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM */ + ["\uFC9B", "\uFC9B"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM */ + ["\uFC9C", "\uFC9C"], /* ARABIC LIGATURE BEH WITH JEEM INITIAL FORM */ + ["\uFC9D", "\uFC9D"], /* ARABIC LIGATURE BEH WITH HAH INITIAL FORM */ + ["\uFC9E", "\uFC9E"], /* ARABIC LIGATURE BEH WITH KHAH INITIAL FORM */ + ["\uFC9F", "\uFC9F"], /* ARABIC LIGATURE BEH WITH MEEM INITIAL FORM */ + ["\uFCA0", "\uFCA0"], /* ARABIC LIGATURE BEH WITH HEH INITIAL FORM */ + ["\uFCA1", "\uFCA1"], /* ARABIC LIGATURE TEH WITH JEEM INITIAL FORM */ + ["\uFCA2", "\uFCA2"], /* ARABIC LIGATURE TEH WITH HAH INITIAL FORM */ + ["\uFCA3", "\uFCA3"], /* ARABIC LIGATURE TEH WITH KHAH INITIAL FORM */ + ["\uFCA4", "\uFCA4"], /* ARABIC LIGATURE TEH WITH MEEM INITIAL FORM */ + ["\uFCA5", "\uFCA5"], /* ARABIC LIGATURE TEH WITH HEH INITIAL FORM */ + ["\uFCA6", "\uFCA6"], /* ARABIC LIGATURE THEH WITH MEEM INITIAL FORM */ + ["\uFCA7", "\uFCA7"], /* ARABIC LIGATURE JEEM WITH HAH INITIAL FORM */ + ["\uFCA8", "\uFCA8"], /* ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM */ + ["\uFCA9", "\uFCA9"], /* ARABIC LIGATURE HAH WITH JEEM INITIAL FORM */ + ["\uFCAA", "\uFCAA"], /* ARABIC LIGATURE HAH WITH MEEM INITIAL FORM */ + ["\uFCAB", "\uFCAB"], /* ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM */ + ["\uFCAC", "\uFCAC"], /* ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM */ + ["\uFCAD", "\uFCAD"], /* ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM */ + ["\uFCAE", "\uFCAE"], /* ARABIC LIGATURE SEEN WITH HAH INITIAL FORM */ + ["\uFCAF", "\uFCAF"], /* ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM */ + ["\uFCB0", "\uFCB0"], /* ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM */ + ["\uFCB1", "\uFCB1"], /* ARABIC LIGATURE SAD WITH HAH INITIAL FORM */ + ["\uFCB2", "\uFCB2"], /* ARABIC LIGATURE SAD WITH KHAH INITIAL FORM */ + ["\uFCB3", "\uFCB3"], /* ARABIC LIGATURE SAD WITH MEEM INITIAL FORM */ + ["\uFCB4", "\uFCB4"], /* ARABIC LIGATURE DAD WITH JEEM INITIAL FORM */ + ["\uFCB5", "\uFCB5"], /* ARABIC LIGATURE DAD WITH HAH INITIAL FORM */ + ["\uFCB6", "\uFCB6"], /* ARABIC LIGATURE DAD WITH KHAH INITIAL FORM */ + ["\uFCB7", "\uFCB7"], /* ARABIC LIGATURE DAD WITH MEEM INITIAL FORM */ + ["\uFCB8", "\uFCB8"], /* ARABIC LIGATURE TAH WITH HAH INITIAL FORM */ + ["\uFCB9", "\uFCB9"], /* ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM */ + ["\uFCBA", "\uFCBA"], /* ARABIC LIGATURE AIN WITH JEEM INITIAL FORM */ + ["\uFCBB", "\uFCBB"], /* ARABIC LIGATURE AIN WITH MEEM INITIAL FORM */ + ["\uFCBC", "\uFCBC"], /* ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM */ + ["\uFCBD", "\uFCBD"], /* ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM */ + ["\uFCBE", "\uFCBE"], /* ARABIC LIGATURE FEH WITH JEEM INITIAL FORM */ + ["\uFCBF", "\uFCBF"], /* ARABIC LIGATURE FEH WITH HAH INITIAL FORM */ + ["\uFCC0", "\uFCC0"], /* ARABIC LIGATURE FEH WITH KHAH INITIAL FORM */ + ["\uFCC1", "\uFCC1"], /* ARABIC LIGATURE FEH WITH MEEM INITIAL FORM */ + ["\uFCC2", "\uFCC2"], /* ARABIC LIGATURE QAF WITH HAH INITIAL FORM */ + ["\uFCC3", "\uFCC3"], /* ARABIC LIGATURE QAF WITH MEEM INITIAL FORM */ + ["\uFCC4", "\uFCC4"], /* ARABIC LIGATURE KAF WITH JEEM INITIAL FORM */ + ["\uFCC5", "\uFCC5"], /* ARABIC LIGATURE KAF WITH HAH INITIAL FORM */ + ["\uFCC6", "\uFCC6"], /* ARABIC LIGATURE KAF WITH KHAH INITIAL FORM */ + ["\uFCC7", "\uFCC7"], /* ARABIC LIGATURE KAF WITH LAM INITIAL FORM */ + ["\uFCC8", "\uFCC8"], /* ARABIC LIGATURE KAF WITH MEEM INITIAL FORM */ + ["\uFCC9", "\uFCC9"], /* ARABIC LIGATURE LAM WITH JEEM INITIAL FORM */ + ["\uFCCA", "\uFCCA"], /* ARABIC LIGATURE LAM WITH HAH INITIAL FORM */ + ["\uFCCB", "\uFCCB"], /* ARABIC LIGATURE LAM WITH KHAH INITIAL FORM */ + ["\uFCCC", "\uFCCC"], /* ARABIC LIGATURE LAM WITH MEEM INITIAL FORM */ + ["\uFCCD", "\uFCCD"], /* ARABIC LIGATURE LAM WITH HEH INITIAL FORM */ + ["\uFCCE", "\uFCCE"], /* ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM */ + ["\uFCCF", "\uFCCF"], /* ARABIC LIGATURE MEEM WITH HAH INITIAL FORM */ + ["\uFCD0", "\uFCD0"], /* ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM */ + ["\uFCD1", "\uFCD1"], /* ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM */ + ["\uFCD2", "\uFCD2"], /* ARABIC LIGATURE NOON WITH JEEM INITIAL FORM */ + ["\uFCD3", "\uFCD3"], /* ARABIC LIGATURE NOON WITH HAH INITIAL FORM */ + ["\uFCD4", "\uFCD4"], /* ARABIC LIGATURE NOON WITH KHAH INITIAL FORM */ + ["\uFCD5", "\uFCD5"], /* ARABIC LIGATURE NOON WITH MEEM INITIAL FORM */ + ["\uFCD6", "\uFCD6"], /* ARABIC LIGATURE NOON WITH HEH INITIAL FORM */ + ["\uFCD7", "\uFCD7"], /* ARABIC LIGATURE HEH WITH JEEM INITIAL FORM */ + ["\uFCD8", "\uFCD8"], /* ARABIC LIGATURE HEH WITH MEEM INITIAL FORM */ + ["\uFCD9", "\uFCD9"], /* ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM */ + ["\uFCDA", "\uFCDA"], /* ARABIC LIGATURE YEH WITH JEEM INITIAL FORM */ + ["\uFCDB", "\uFCDB"], /* ARABIC LIGATURE YEH WITH HAH INITIAL FORM */ + ["\uFCDC", "\uFCDC"], /* ARABIC LIGATURE YEH WITH KHAH INITIAL FORM */ + ["\uFCDD", "\uFCDD"], /* ARABIC LIGATURE YEH WITH MEEM INITIAL FORM */ + ["\uFCDE", "\uFCDE"], /* ARABIC LIGATURE YEH WITH HEH INITIAL FORM */ + ["\uFCDF", "\uFCDF"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM */ + ["\uFCE0", "\uFCE0"], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM */ + ["\uFCE1", "\uFCE1"], /* ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM */ + ["\uFCE2", "\uFCE2"], /* ARABIC LIGATURE BEH WITH HEH MEDIAL FORM */ + ["\uFCE3", "\uFCE3"], /* ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM */ + ["\uFCE4", "\uFCE4"], /* ARABIC LIGATURE TEH WITH HEH MEDIAL FORM */ + ["\uFCE5", "\uFCE5"], /* ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM */ + ["\uFCE6", "\uFCE6"], /* ARABIC LIGATURE THEH WITH HEH MEDIAL FORM */ + ["\uFCE7", "\uFCE7"], /* ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM */ + ["\uFCE8", "\uFCE8"], /* ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM */ + ["\uFCE9", "\uFCE9"], /* ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM */ + ["\uFCEA", "\uFCEA"], /* ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM */ + ["\uFCEB", "\uFCEB"], /* ARABIC LIGATURE KAF WITH LAM MEDIAL FORM */ + ["\uFCEC", "\uFCEC"], /* ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM */ + ["\uFCED", "\uFCED"], /* ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM */ + ["\uFCEE", "\uFCEE"], /* ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM */ + ["\uFCEF", "\uFCEF"], /* ARABIC LIGATURE NOON WITH HEH MEDIAL FORM */ + ["\uFCF0", "\uFCF0"], /* ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM */ + ["\uFCF1", "\uFCF1"], /* ARABIC LIGATURE YEH WITH HEH MEDIAL FORM */ + ["\uFCF2", "\uFCF2"], /* ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM */ + ["\uFCF3", "\uFCF3"], /* ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM */ + ["\uFCF4", "\uFCF4"], /* ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM */ + ["\uFCF5", "\uFCF5"], /* ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFCF6", "\uFCF6"], /* ARABIC LIGATURE TAH WITH YEH ISOLATED FORM */ + ["\uFCF7", "\uFCF7"], /* ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFCF8", "\uFCF8"], /* ARABIC LIGATURE AIN WITH YEH ISOLATED FORM */ + ["\uFCF9", "\uFCF9"], /* ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFCFA", "\uFCFA"], /* ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM */ + ["\uFCFB", "\uFCFB"], /* ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFCFC", "\uFCFC"], /* ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM */ + ["\uFCFD", "\uFCFD"], /* ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFCFE", "\uFCFE"], /* ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM */ + ["\uFCFF", "\uFCFF"], /* ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFD00", "\uFD00"], /* ARABIC LIGATURE HAH WITH YEH ISOLATED FORM */ + ["\uFD01", "\uFD01"], /* ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFD02", "\uFD02"], /* ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM */ + ["\uFD03", "\uFD03"], /* ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFD04", "\uFD04"], /* ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM */ + ["\uFD05", "\uFD05"], /* ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFD06", "\uFD06"], /* ARABIC LIGATURE SAD WITH YEH ISOLATED FORM */ + ["\uFD07", "\uFD07"], /* ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM */ + ["\uFD08", "\uFD08"], /* ARABIC LIGATURE DAD WITH YEH ISOLATED FORM */ + ["\uFD09", "\uFD09"], /* ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM */ + ["\uFD0A", "\uFD0A"], /* ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM */ + ["\uFD0B", "\uFD0B"], /* ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM */ + ["\uFD0C", "\uFD0C"], /* ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM */ + ["\uFD0D", "\uFD0D"], /* ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM */ + ["\uFD0E", "\uFD0E"], /* ARABIC LIGATURE SEEN WITH REH ISOLATED FORM */ + ["\uFD0F", "\uFD0F"], /* ARABIC LIGATURE SAD WITH REH ISOLATED FORM */ + ["\uFD10", "\uFD10"], /* ARABIC LIGATURE DAD WITH REH ISOLATED FORM */ + ["\uFD11", "\uFD11"], /* ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFD12", "\uFD12"], /* ARABIC LIGATURE TAH WITH YEH FINAL FORM */ + ["\uFD13", "\uFD13"], /* ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM */ + ["\uFD14", "\uFD14"], /* ARABIC LIGATURE AIN WITH YEH FINAL FORM */ + ["\uFD15", "\uFD15"], /* ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM */ + ["\uFD16", "\uFD16"], /* ARABIC LIGATURE GHAIN WITH YEH FINAL FORM */ + ["\uFD17", "\uFD17"], /* ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM */ + ["\uFD18", "\uFD18"], /* ARABIC LIGATURE SEEN WITH YEH FINAL FORM */ + ["\uFD19", "\uFD19"], /* ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM */ + ["\uFD1A", "\uFD1A"], /* ARABIC LIGATURE SHEEN WITH YEH FINAL FORM */ + ["\uFD1B", "\uFD1B"], /* ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFD1C", "\uFD1C"], /* ARABIC LIGATURE HAH WITH YEH FINAL FORM */ + ["\uFD1D", "\uFD1D"], /* ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFD1E", "\uFD1E"], /* ARABIC LIGATURE JEEM WITH YEH FINAL FORM */ + ["\uFD1F", "\uFD1F"], /* ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFD20", "\uFD20"], /* ARABIC LIGATURE KHAH WITH YEH FINAL FORM */ + ["\uFD21", "\uFD21"], /* ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM */ + ["\uFD22", "\uFD22"], /* ARABIC LIGATURE SAD WITH YEH FINAL FORM */ + ["\uFD23", "\uFD23"], /* ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM */ + ["\uFD24", "\uFD24"], /* ARABIC LIGATURE DAD WITH YEH FINAL FORM */ + ["\uFD25", "\uFD25"], /* ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM */ + ["\uFD26", "\uFD26"], /* ARABIC LIGATURE SHEEN WITH HAH FINAL FORM */ + ["\uFD27", "\uFD27"], /* ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM */ + ["\uFD28", "\uFD28"], /* ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM */ + ["\uFD29", "\uFD29"], /* ARABIC LIGATURE SHEEN WITH REH FINAL FORM */ + ["\uFD2A", "\uFD2A"], /* ARABIC LIGATURE SEEN WITH REH FINAL FORM */ + ["\uFD2B", "\uFD2B"], /* ARABIC LIGATURE SAD WITH REH FINAL FORM */ + ["\uFD2C", "\uFD2C"], /* ARABIC LIGATURE DAD WITH REH FINAL FORM */ + ["\uFD2D", "\uFD2D"], /* ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM */ + ["\uFD2E", "\uFD2E"], /* ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM */ + ["\uFD2F", "\uFD2F"], /* ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM */ + ["\uFD30", "\uFD30"], /* ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM */ + ["\uFD31", "\uFD31"], /* ARABIC LIGATURE SEEN WITH HEH INITIAL FORM */ + ["\uFD32", "\uFD32"], /* ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM */ + ["\uFD33", "\uFD33"], /* ARABIC LIGATURE TAH WITH MEEM INITIAL FORM */ + ["\uFD34", "\uFD34"], /* ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM */ + ["\uFD35", "\uFD35"], /* ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM */ + ["\uFD36", "\uFD36"], /* ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM */ + ["\uFD37", "\uFD37"], /* ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM */ + ["\uFD38", "\uFD38"], /* ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM */ + ["\uFD39", "\uFD39"], /* ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM */ + ["\uFD3A", "\uFD3A"], /* ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM */ + ["\uFD3B", "\uFD3B"], /* ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM */ + ["\uFD3C", "\uFD3C"], /* ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM */ + ["\uFD3D", "\uFD3D"], /* ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM */ + ["\uFD3E", "\uFD3E"], /* ORNATE LEFT PARENTHESIS */ + ["\uFD3F", "\uFD3F"], /* ORNATE RIGHT PARENTHESIS */ + ["\uFD40", "\uFD40"], /* ARABIC LIGATURE RAHIMAHU ALLAAH */ + ["\uFD41", "\uFD41"], /* ARABIC LIGATURE RADI ALLAAHU ANH */ + ["\uFD42", "\uFD42"], /* ARABIC LIGATURE RADI ALLAAHU ANHAA */ + ["\uFD43", "\uFD43"], /* ARABIC LIGATURE RADI ALLAAHU ANHUM */ + ["\uFD44", "\uFD44"], /* ARABIC LIGATURE RADI ALLAAHU ANHUMAA */ + ["\uFD45", "\uFD45"], /* ARABIC LIGATURE RADI ALLAAHU ANHUNNA */ + ["\uFD46", "\uFD46"], /* ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH */ + ["\uFD47", "\uFD47"], /* ARABIC LIGATURE ALAYHI AS-SALAAM */ + ["\uFD48", "\uFD48"], /* ARABIC LIGATURE ALAYHIM AS-SALAAM */ + ["\uFD49", "\uFD49"], /* ARABIC LIGATURE ALAYHIMAA AS-SALAAM */ + ["\uFD4A", "\uFD4A"], /* ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM */ + ["\uFD4B", "\uFD4B"], /* ARABIC LIGATURE QUDDISA SIRRAH */ + ["\uFD4C", "\uFD4C"], /* ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM */ + ["\uFD4D", "\uFD4D"], /* ARABIC LIGATURE ALAYHAA AS-SALAAM */ + ["\uFD4E", "\uFD4E"], /* ARABIC LIGATURE TABAARAKA WA-TAAALAA */ + ["\uFD4F", "\uFD4F"], /* ARABIC LIGATURE RAHIMAHUM ALLAAH */ + ["\uFD50", "\uFD50"], /* ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM */ + ["\uFD51", "\uFD51"], /* ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM */ + ["\uFD52", "\uFD52"], /* ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM */ + ["\uFD53", "\uFD53"], /* ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM */ + ["\uFD54", "\uFD54"], /* ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM */ + ["\uFD55", "\uFD55"], /* ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM */ + ["\uFD56", "\uFD56"], /* ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM */ + ["\uFD57", "\uFD57"], /* ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM */ + ["\uFD58", "\uFD58"], /* ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM */ + ["\uFD59", "\uFD59"], /* ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM */ + ["\uFD5A", "\uFD5A"], /* ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM */ + ["\uFD5B", "\uFD5B"], /* ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFD5C", "\uFD5C"], /* ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM */ + ["\uFD5D", "\uFD5D"], /* ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM */ + ["\uFD5E", "\uFD5E"], /* ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFD5F", "\uFD5F"], /* ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM */ + ["\uFD60", "\uFD60"], /* ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM */ + ["\uFD61", "\uFD61"], /* ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM */ + ["\uFD62", "\uFD62"], /* ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM */ + ["\uFD63", "\uFD63"], /* ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFD64", "\uFD64"], /* ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM */ + ["\uFD65", "\uFD65"], /* ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM */ + ["\uFD66", "\uFD66"], /* ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM */ + ["\uFD67", "\uFD67"], /* ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM */ + ["\uFD68", "\uFD68"], /* ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM */ + ["\uFD69", "\uFD69"], /* ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM */ + ["\uFD6A", "\uFD6A"], /* ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM */ + ["\uFD6B", "\uFD6B"], /* ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM */ + ["\uFD6C", "\uFD6C"], /* ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM */ + ["\uFD6D", "\uFD6D"], /* ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFD6E", "\uFD6E"], /* ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFD6F", "\uFD6F"], /* ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM */ + ["\uFD70", "\uFD70"], /* ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM */ + ["\uFD71", "\uFD71"], /* ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM */ + ["\uFD72", "\uFD72"], /* ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM */ + ["\uFD73", "\uFD73"], /* ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFD74", "\uFD74"], /* ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM */ + ["\uFD75", "\uFD75"], /* ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM */ + ["\uFD76", "\uFD76"], /* ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM */ + ["\uFD77", "\uFD77"], /* ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFD78", "\uFD78"], /* ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFD79", "\uFD79"], /* ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM */ + ["\uFD7A", "\uFD7A"], /* ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM */ + ["\uFD7B", "\uFD7B"], /* ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFD7C", "\uFD7C"], /* ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM */ + ["\uFD7D", "\uFD7D"], /* ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM */ + ["\uFD7E", "\uFD7E"], /* ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM */ + ["\uFD7F", "\uFD7F"], /* ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM */ + ["\uFD80", "\uFD80"], /* ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM */ + ["\uFD81", "\uFD81"], /* ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM */ + ["\uFD82", "\uFD82"], /* ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFD83", "\uFD83"], /* ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM */ + ["\uFD84", "\uFD84"], /* ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM */ + ["\uFD85", "\uFD85"], /* ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM */ + ["\uFD86", "\uFD86"], /* ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM */ + ["\uFD87", "\uFD87"], /* ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM */ + ["\uFD88", "\uFD88"], /* ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM */ + ["\uFD89", "\uFD89"], /* ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM */ + ["\uFD8A", "\uFD8A"], /* ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM */ + ["\uFD8B", "\uFD8B"], /* ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM */ + ["\uFD8C", "\uFD8C"], /* ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM */ + ["\uFD8D", "\uFD8D"], /* ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM */ + ["\uFD8E", "\uFD8E"], /* ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM */ + ["\uFD8F", "\uFD8F"], /* ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM */ + ["\uFD90", "\uFD90"], + ["\uFD91", "\uFD91"], + ["\uFD92", "\uFD92"], /* ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM */ + ["\uFD93", "\uFD93"], /* ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM */ + ["\uFD94", "\uFD94"], /* ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFD95", "\uFD95"], /* ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM */ + ["\uFD96", "\uFD96"], /* ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFD97", "\uFD97"], /* ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM */ + ["\uFD98", "\uFD98"], /* ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM */ + ["\uFD99", "\uFD99"], /* ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFD9A", "\uFD9A"], /* ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM */ + ["\uFD9B", "\uFD9B"], /* ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFD9C", "\uFD9C"], /* ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM */ + ["\uFD9D", "\uFD9D"], /* ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFD9E", "\uFD9E"], /* ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM */ + ["\uFD9F", "\uFD9F"], /* ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM */ + ["\uFDA0", "\uFDA0"], /* ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFDA1", "\uFDA1"], /* ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM */ + ["\uFDA2", "\uFDA2"], /* ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFDA3", "\uFDA3"], /* ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM */ + ["\uFDA4", "\uFDA4"], /* ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFDA5", "\uFDA5"], /* ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM */ + ["\uFDA6", "\uFDA6"], /* ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFDA7", "\uFDA7"], /* ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + ["\uFDA8", "\uFDA8"], /* ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM */ + ["\uFDA9", "\uFDA9"], /* ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM */ + ["\uFDAA", "\uFDAA"], /* ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM */ + ["\uFDAB", "\uFDAB"], /* ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM */ + ["\uFDAC", "\uFDAC"], /* ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM */ + ["\uFDAD", "\uFDAD"], /* ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM */ + ["\uFDAE", "\uFDAE"], /* ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM */ + ["\uFDAF", "\uFDAF"], /* ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM */ + ["\uFDB0", "\uFDB0"], /* ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM */ + ["\uFDB1", "\uFDB1"], /* ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM */ + ["\uFDB2", "\uFDB2"], /* ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM */ + ["\uFDB3", "\uFDB3"], /* ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM */ + ["\uFDB4", "\uFDB4"], /* ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM */ + ["\uFDB5", "\uFDB5"], /* ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM */ + ["\uFDB6", "\uFDB6"], /* ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM */ + ["\uFDB7", "\uFDB7"], /* ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM */ + ["\uFDB8", "\uFDB8"], /* ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM */ + ["\uFDB9", "\uFDB9"], /* ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM */ + ["\uFDBA", "\uFDBA"], /* ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM */ + ["\uFDBB", "\uFDBB"], /* ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM */ + ["\uFDBC", "\uFDBC"], /* ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM */ + ["\uFDBD", "\uFDBD"], /* ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM */ + ["\uFDBE", "\uFDBE"], /* ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM */ + ["\uFDBF", "\uFDBF"], /* ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM */ + ["\uFDC0", "\uFDC0"], /* ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM */ + ["\uFDC1", "\uFDC1"], /* ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM */ + ["\uFDC2", "\uFDC2"], /* ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM */ + ["\uFDC3", "\uFDC3"], /* ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFDC4", "\uFDC4"], /* ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM */ + ["\uFDC5", "\uFDC5"], /* ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM */ + ["\uFDC6", "\uFDC6"], /* ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM */ + ["\uFDC7", "\uFDC7"], /* ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM */ + ["\uFDC8", "\uFDC8"], + ["\uFDC9", "\uFDC9"], + ["\uFDCA", "\uFDCA"], + ["\uFDCB", "\uFDCB"], + ["\uFDCC", "\uFDCC"], + ["\uFDCD", "\uFDCD"], + ["\uFDCE", "\uFDCE"], + ["\uFDCF", "\uFDCF"], /* ARABIC LIGATURE SALAAMUHU ALAYNAA */ + ["\uFDD0", "\uFDD0"], + ["\uFDD1", "\uFDD1"], + ["\uFDD2", "\uFDD2"], + ["\uFDD3", "\uFDD3"], + ["\uFDD4", "\uFDD4"], + ["\uFDD5", "\uFDD5"], + ["\uFDD6", "\uFDD6"], + ["\uFDD7", "\uFDD7"], + ["\uFDD8", "\uFDD8"], + ["\uFDD9", "\uFDD9"], + ["\uFDDA", "\uFDDA"], + ["\uFDDB", "\uFDDB"], + ["\uFDDC", "\uFDDC"], + ["\uFDDD", "\uFDDD"], + ["\uFDDE", "\uFDDE"], + ["\uFDDF", "\uFDDF"], + ["\uFDE0", "\uFDE0"], + ["\uFDE1", "\uFDE1"], + ["\uFDE2", "\uFDE2"], + ["\uFDE3", "\uFDE3"], + ["\uFDE4", "\uFDE4"], + ["\uFDE5", "\uFDE5"], + ["\uFDE6", "\uFDE6"], + ["\uFDE7", "\uFDE7"], + ["\uFDE8", "\uFDE8"], + ["\uFDE9", "\uFDE9"], + ["\uFDEA", "\uFDEA"], + ["\uFDEB", "\uFDEB"], + ["\uFDEC", "\uFDEC"], + ["\uFDED", "\uFDED"], + ["\uFDEE", "\uFDEE"], + ["\uFDEF", "\uFDEF"], + ["\uFDF0", "\uFDF0"], /* ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM */ + ["\uFDF1", "\uFDF1"], /* ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM */ + ["\uFDF2", "\uFDF2"], /* ARABIC LIGATURE ALLAH ISOLATED FORM */ + ["\uFDF3", "\uFDF3"], /* ARABIC LIGATURE AKBAR ISOLATED FORM */ + ["\uFDF4", "\uFDF4"], /* ARABIC LIGATURE MOHAMMAD ISOLATED FORM */ + ["\uFDF5", "\uFDF5"], /* ARABIC LIGATURE SALAM ISOLATED FORM */ + ["\uFDF6", "\uFDF6"], /* ARABIC LIGATURE RASOUL ISOLATED FORM */ + ["\uFDF7", "\uFDF7"], /* ARABIC LIGATURE ALAYHE ISOLATED FORM */ + ["\uFDF8", "\uFDF8"], /* ARABIC LIGATURE WASALLAM ISOLATED FORM */ + ["\uFDF9", "\uFDF9"], /* ARABIC LIGATURE SALLA ISOLATED FORM */ + ["\uFDFA", "\uFDFA"], /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM (ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM) */ + ["\uFDFB", "\uFDFB"], /* ARABIC LIGATURE JALLAJALALOUHOU (ARABIC LETTER JALLAJALALOUHOU) */ + ["\uFDFC", "\uFDFC"], /* RIAL SIGN */ + ["\uFDFD", "\uFDFD"], /* ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM */ + ["\uFDFE", "\uFDFE"], /* ARABIC LIGATURE SUBHAANAHU WA TAAALAA */ + ["\uFDFF", "\uFDFF"], /* ARABIC LIGATURE AZZA WA JALL */ + ["\uFE00", "\uFE00"], /* VARIATION SELECTOR-1 */ + ["\uFE01", "\uFE01"], /* VARIATION SELECTOR-2 */ + ["\uFE02", "\uFE02"], /* VARIATION SELECTOR-3 */ + ["\uFE03", "\uFE03"], /* VARIATION SELECTOR-4 */ + ["\uFE04", "\uFE04"], /* VARIATION SELECTOR-5 */ + ["\uFE05", "\uFE05"], /* VARIATION SELECTOR-6 */ + ["\uFE06", "\uFE06"], /* VARIATION SELECTOR-7 */ + ["\uFE07", "\uFE07"], /* VARIATION SELECTOR-8 */ + ["\uFE08", "\uFE08"], /* VARIATION SELECTOR-9 */ + ["\uFE09", "\uFE09"], /* VARIATION SELECTOR-10 */ + ["\uFE0A", "\uFE0A"], /* VARIATION SELECTOR-11 */ + ["\uFE0B", "\uFE0B"], /* VARIATION SELECTOR-12 */ + ["\uFE0C", "\uFE0C"], /* VARIATION SELECTOR-13 */ + ["\uFE0D", "\uFE0D"], /* VARIATION SELECTOR-14 */ + ["\uFE0E", "\uFE0E"], /* VARIATION SELECTOR-15 */ + ["\uFE0F", "\uFE0F"], /* VARIATION SELECTOR-16 */ + ["\uFE10", "\uFE10"], /* PRESENTATION FORM FOR VERTICAL COMMA */ + ["\uFE11", "\uFE11"], /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA */ + ["\uFE12", "\uFE12"], /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP */ + ["\uFE13", "\uFE13"], /* PRESENTATION FORM FOR VERTICAL COLON */ + ["\uFE14", "\uFE14"], /* PRESENTATION FORM FOR VERTICAL SEMICOLON */ + ["\uFE15", "\uFE15"], /* PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK */ + ["\uFE16", "\uFE16"], /* PRESENTATION FORM FOR VERTICAL QUESTION MARK */ + ["\uFE17", "\uFE17"], /* PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET */ + ["\uFE18", "\uFE18"], /* PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET */ + ["\uFE19", "\uFE19"], /* PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS */ + ["\uFE1A", "\uFE1A"], + ["\uFE1B", "\uFE1B"], + ["\uFE1C", "\uFE1C"], + ["\uFE1D", "\uFE1D"], + ["\uFE1E", "\uFE1E"], + ["\uFE1F", "\uFE1F"], + ["\uFE20", "\uFE20"], /* COMBINING LIGATURE LEFT HALF */ + ["\uFE21", "\uFE21"], /* COMBINING LIGATURE RIGHT HALF */ + ["\uFE22", "\uFE22"], /* COMBINING DOUBLE TILDE LEFT HALF */ + ["\uFE23", "\uFE23"], /* COMBINING DOUBLE TILDE RIGHT HALF */ + ["\uFE24", "\uFE24"], /* COMBINING MACRON LEFT HALF */ + ["\uFE25", "\uFE25"], /* COMBINING MACRON RIGHT HALF */ + ["\uFE26", "\uFE26"], /* COMBINING CONJOINING MACRON */ + ["\uFE27", "\uFE27"], /* COMBINING LIGATURE LEFT HALF BELOW */ + ["\uFE28", "\uFE28"], /* COMBINING LIGATURE RIGHT HALF BELOW */ + ["\uFE29", "\uFE29"], /* COMBINING TILDE LEFT HALF BELOW */ + ["\uFE2A", "\uFE2A"], /* COMBINING TILDE RIGHT HALF BELOW */ + ["\uFE2B", "\uFE2B"], /* COMBINING MACRON LEFT HALF BELOW */ + ["\uFE2C", "\uFE2C"], /* COMBINING MACRON RIGHT HALF BELOW */ + ["\uFE2D", "\uFE2D"], /* COMBINING CONJOINING MACRON BELOW */ + ["\uFE2E", "\uFE2E"], /* COMBINING CYRILLIC TITLO LEFT HALF */ + ["\uFE2F", "\uFE2F"], /* COMBINING CYRILLIC TITLO RIGHT HALF */ + ["\uFE30", "\uFE30"], /* PRESENTATION FORM FOR VERTICAL TWO DOT LEADER (GLYPH FOR VERTICAL TWO DOT LEADER) */ + ["\uFE31", "\uFE31"], /* PRESENTATION FORM FOR VERTICAL EM DASH (GLYPH FOR VERTICAL EM DASH) */ + ["\uFE32", "\uFE32"], /* PRESENTATION FORM FOR VERTICAL EN DASH (GLYPH FOR VERTICAL EN DASH) */ + ["\uFE33", "\uFE33"], /* PRESENTATION FORM FOR VERTICAL LOW LINE (GLYPH FOR VERTICAL SPACING UNDERSCORE) */ + ["\uFE34", "\uFE34"], /* PRESENTATION FORM FOR VERTICAL WAVY LOW LINE (GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE) */ + ["\uFE35", "\uFE35"], /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS (GLYPH FOR VERTICAL OPENING PARENTHESIS) */ + ["\uFE36", "\uFE36"], /* PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS (GLYPH FOR VERTICAL CLOSING PARENTHESIS) */ + ["\uFE37", "\uFE37"], /* PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET (GLYPH FOR VERTICAL OPENING CURLY BRACKET) */ + ["\uFE38", "\uFE38"], /* PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET (GLYPH FOR VERTICAL CLOSING CURLY BRACKET) */ + ["\uFE39", "\uFE39"], /* PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET (GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET) */ + ["\uFE3A", "\uFE3A"], /* PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET (GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET) */ + ["\uFE3B", "\uFE3B"], /* PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET (GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET) */ + ["\uFE3C", "\uFE3C"], /* PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET (GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET) */ + ["\uFE3D", "\uFE3D"], /* PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET (GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET) */ + ["\uFE3E", "\uFE3E"], /* PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET (GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET) */ + ["\uFE3F", "\uFE3F"], /* PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET (GLYPH FOR VERTICAL OPENING ANGLE BRACKET) */ + ["\uFE40", "\uFE40"], /* PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET (GLYPH FOR VERTICAL CLOSING ANGLE BRACKET) */ + ["\uFE41", "\uFE41"], /* PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET (GLYPH FOR VERTICAL OPENING CORNER BRACKET) */ + ["\uFE42", "\uFE42"], /* PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET (GLYPH FOR VERTICAL CLOSING CORNER BRACKET) */ + ["\uFE43", "\uFE43"], /* PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET (GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET) */ + ["\uFE44", "\uFE44"], /* PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET (GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET) */ + ["\uFE45", "\uFE45"], /* SESAME DOT */ + ["\uFE46", "\uFE46"], /* WHITE SESAME DOT */ + ["\uFE47", "\uFE47"], /* PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET */ + ["\uFE48", "\uFE48"], /* PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET */ + ["\uFE49", "\uFE49"], /* DASHED OVERLINE (SPACING DASHED OVERSCORE) */ + ["\uFE4A", "\uFE4A"], /* CENTRELINE OVERLINE (SPACING CENTERLINE OVERSCORE) */ + ["\uFE4B", "\uFE4B"], /* WAVY OVERLINE (SPACING WAVY OVERSCORE) */ + ["\uFE4C", "\uFE4C"], /* DOUBLE WAVY OVERLINE (SPACING DOUBLE WAVY OVERSCORE) */ + ["\uFE4D", "\uFE4D"], /* DASHED LOW LINE (SPACING DASHED UNDERSCORE) */ + ["\uFE4E", "\uFE4E"], /* CENTRELINE LOW LINE (SPACING CENTERLINE UNDERSCORE) */ + ["\uFE4F", "\uFE4F"], /* WAVY LOW LINE (SPACING WAVY UNDERSCORE) */ + ["\uFE50", "\uFE50"], /* SMALL COMMA */ + ["\uFE51", "\uFE51"], /* SMALL IDEOGRAPHIC COMMA */ + ["\uFE52", "\uFE52"], /* SMALL FULL STOP (SMALL PERIOD) */ + ["\uFE53", "\uFE53"], + ["\uFE54", "\uFE54"], /* SMALL SEMICOLON */ + ["\uFE55", "\uFE55"], /* SMALL COLON */ + ["\uFE56", "\uFE56"], /* SMALL QUESTION MARK */ + ["\uFE57", "\uFE57"], /* SMALL EXCLAMATION MARK */ + ["\uFE58", "\uFE58"], /* SMALL EM DASH */ + ["\uFE59", "\uFE59"], /* SMALL LEFT PARENTHESIS (SMALL OPENING PARENTHESIS) */ + ["\uFE5A", "\uFE5A"], /* SMALL RIGHT PARENTHESIS (SMALL CLOSING PARENTHESIS) */ + ["\uFE5B", "\uFE5B"], /* SMALL LEFT CURLY BRACKET (SMALL OPENING CURLY BRACKET) */ + ["\uFE5C", "\uFE5C"], /* SMALL RIGHT CURLY BRACKET (SMALL CLOSING CURLY BRACKET) */ + ["\uFE5D", "\uFE5D"], /* SMALL LEFT TORTOISE SHELL BRACKET (SMALL OPENING TORTOISE SHELL BRACKET) */ + ["\uFE5E", "\uFE5E"], /* SMALL RIGHT TORTOISE SHELL BRACKET (SMALL CLOSING TORTOISE SHELL BRACKET) */ + ["\uFE5F", "\uFE5F"], /* SMALL NUMBER SIGN */ + ["\uFE60", "\uFE60"], /* SMALL AMPERSAND */ + ["\uFE61", "\uFE61"], /* SMALL ASTERISK */ + ["\uFE62", "\uFE62"], /* SMALL PLUS SIGN */ + ["\uFE63", "\uFE63"], /* SMALL HYPHEN-MINUS */ + ["\uFE64", "\uFE64"], /* SMALL LESS-THAN SIGN */ + ["\uFE65", "\uFE65"], /* SMALL GREATER-THAN SIGN */ + ["\uFE66", "\uFE66"], /* SMALL EQUALS SIGN */ + ["\uFE67", "\uFE67"], + ["\uFE68", "\uFE68"], /* SMALL REVERSE SOLIDUS (SMALL BACKSLASH) */ + ["\uFE69", "\uFE69"], /* SMALL DOLLAR SIGN */ + ["\uFE6A", "\uFE6A"], /* SMALL PERCENT SIGN */ + ["\uFE6B", "\uFE6B"], /* SMALL COMMERCIAL AT */ + ["\uFE6C", "\uFE6C"], + ["\uFE6D", "\uFE6D"], + ["\uFE6E", "\uFE6E"], + ["\uFE6F", "\uFE6F"], + ["\uFE70", "\uFE70"], /* ARABIC FATHATAN ISOLATED FORM (ARABIC SPACING FATHATAN) */ + ["\uFE71", "\uFE71"], /* ARABIC TATWEEL WITH FATHATAN ABOVE (ARABIC FATHATAN ON TATWEEL) */ + ["\uFE72", "\uFE72"], /* ARABIC DAMMATAN ISOLATED FORM (ARABIC SPACING DAMMATAN) */ + ["\uFE73", "\uFE73"], /* ARABIC TAIL FRAGMENT */ + ["\uFE74", "\uFE74"], /* ARABIC KASRATAN ISOLATED FORM (ARABIC SPACING KASRATAN) */ + ["\uFE75", "\uFE75"], + ["\uFE76", "\uFE76"], /* ARABIC FATHA ISOLATED FORM (ARABIC SPACING FATHAH) */ + ["\uFE77", "\uFE77"], /* ARABIC FATHA MEDIAL FORM (ARABIC FATHAH ON TATWEEL) */ + ["\uFE78", "\uFE78"], /* ARABIC DAMMA ISOLATED FORM (ARABIC SPACING DAMMAH) */ + ["\uFE79", "\uFE79"], /* ARABIC DAMMA MEDIAL FORM (ARABIC DAMMAH ON TATWEEL) */ + ["\uFE7A", "\uFE7A"], /* ARABIC KASRA ISOLATED FORM (ARABIC SPACING KASRAH) */ + ["\uFE7B", "\uFE7B"], /* ARABIC KASRA MEDIAL FORM (ARABIC KASRAH ON TATWEEL) */ + ["\uFE7C", "\uFE7C"], /* ARABIC SHADDA ISOLATED FORM (ARABIC SPACING SHADDAH) */ + ["\uFE7D", "\uFE7D"], /* ARABIC SHADDA MEDIAL FORM (ARABIC SHADDAH ON TATWEEL) */ + ["\uFE7E", "\uFE7E"], /* ARABIC SUKUN ISOLATED FORM (ARABIC SPACING SUKUN) */ + ["\uFE7F", "\uFE7F"], /* ARABIC SUKUN MEDIAL FORM (ARABIC SUKUN ON TATWEEL) */ + ["\uFE80", "\uFE80"], /* ARABIC LETTER HAMZA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH) */ + ["\uFE81", "\uFE81"], /* ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF) */ + ["\uFE82", "\uFE82"], /* ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC MADDAH ON ALEF) */ + ["\uFE83", "\uFE83"], /* ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF) */ + ["\uFE84", "\uFE84"], /* ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON ALEF) */ + ["\uFE85", "\uFE85"], /* ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW) */ + ["\uFE86", "\uFE86"], /* ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON WAW) */ + ["\uFE87", "\uFE87"], /* ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF) */ + ["\uFE88", "\uFE88"], /* ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF) */ + ["\uFE89", "\uFE89"], /* ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON YA) */ + ["\uFE8A", "\uFE8A"], /* ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON YA) */ + ["\uFE8B", "\uFE8B"], /* ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM (GLYPH FOR INITIAL ARABIC HAMZAH ON YA) */ + ["\uFE8C", "\uFE8C"], /* ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HAMZAH ON YA) */ + ["\uFE8D", "\uFE8D"], /* ARABIC LETTER ALEF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ALEF) */ + ["\uFE8E", "\uFE8E"], /* ARABIC LETTER ALEF FINAL FORM (GLYPH FOR FINAL ARABIC ALEF) */ + ["\uFE8F", "\uFE8F"], /* ARABIC LETTER BEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC BAA) */ + ["\uFE90", "\uFE90"], /* ARABIC LETTER BEH FINAL FORM (GLYPH FOR FINAL ARABIC BAA) */ + ["\uFE91", "\uFE91"], /* ARABIC LETTER BEH INITIAL FORM (GLYPH FOR INITIAL ARABIC BAA) */ + ["\uFE92", "\uFE92"], /* ARABIC LETTER BEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC BAA) */ + ["\uFE93", "\uFE93"], /* ARABIC LETTER TEH MARBUTA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAA MARBUTAH) */ + ["\uFE94", "\uFE94"], /* ARABIC LETTER TEH MARBUTA FINAL FORM (GLYPH FOR FINAL ARABIC TAA MARBUTAH) */ + ["\uFE95", "\uFE95"], /* ARABIC LETTER TEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAA) */ + ["\uFE96", "\uFE96"], /* ARABIC LETTER TEH FINAL FORM (GLYPH FOR FINAL ARABIC TAA) */ + ["\uFE97", "\uFE97"], /* ARABIC LETTER TEH INITIAL FORM (GLYPH FOR INITIAL ARABIC TAA) */ + ["\uFE98", "\uFE98"], /* ARABIC LETTER TEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC TAA) */ + ["\uFE99", "\uFE99"], /* ARABIC LETTER THEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC THAA) */ + ["\uFE9A", "\uFE9A"], /* ARABIC LETTER THEH FINAL FORM (GLYPH FOR FINAL ARABIC THAA) */ + ["\uFE9B", "\uFE9B"], /* ARABIC LETTER THEH INITIAL FORM (GLYPH FOR INITIAL ARABIC THAA) */ + ["\uFE9C", "\uFE9C"], /* ARABIC LETTER THEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC THAA) */ + ["\uFE9D", "\uFE9D"], /* ARABIC LETTER JEEM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC JEEM) */ + ["\uFE9E", "\uFE9E"], /* ARABIC LETTER JEEM FINAL FORM (GLYPH FOR FINAL ARABIC JEEM) */ + ["\uFE9F", "\uFE9F"], /* ARABIC LETTER JEEM INITIAL FORM (GLYPH FOR INITIAL ARABIC JEEM) */ + ["\uFEA0", "\uFEA0"], /* ARABIC LETTER JEEM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC JEEM) */ + ["\uFEA1", "\uFEA1"], /* ARABIC LETTER HAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAA) */ + ["\uFEA2", "\uFEA2"], /* ARABIC LETTER HAH FINAL FORM (GLYPH FOR FINAL ARABIC HAA) */ + ["\uFEA3", "\uFEA3"], /* ARABIC LETTER HAH INITIAL FORM (GLYPH FOR INITIAL ARABIC HAA) */ + ["\uFEA4", "\uFEA4"], /* ARABIC LETTER HAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HAA) */ + ["\uFEA5", "\uFEA5"], /* ARABIC LETTER KHAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC KHAA) */ + ["\uFEA6", "\uFEA6"], /* ARABIC LETTER KHAH FINAL FORM (GLYPH FOR FINAL ARABIC KHAA) */ + ["\uFEA7", "\uFEA7"], /* ARABIC LETTER KHAH INITIAL FORM (GLYPH FOR INITIAL ARABIC KHAA) */ + ["\uFEA8", "\uFEA8"], /* ARABIC LETTER KHAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC KHAA) */ + ["\uFEA9", "\uFEA9"], /* ARABIC LETTER DAL ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DAL) */ + ["\uFEAA", "\uFEAA"], /* ARABIC LETTER DAL FINAL FORM (GLYPH FOR FINAL ARABIC DAL) */ + ["\uFEAB", "\uFEAB"], /* ARABIC LETTER THAL ISOLATED FORM (GLYPH FOR ISOLATE ARABIC THAL) */ + ["\uFEAC", "\uFEAC"], /* ARABIC LETTER THAL FINAL FORM (GLYPH FOR FINAL ARABIC THAL) */ + ["\uFEAD", "\uFEAD"], /* ARABIC LETTER REH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC RA) */ + ["\uFEAE", "\uFEAE"], /* ARABIC LETTER REH FINAL FORM (GLYPH FOR FINAL ARABIC RA) */ + ["\uFEAF", "\uFEAF"], /* ARABIC LETTER ZAIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ZAIN) */ + ["\uFEB0", "\uFEB0"], /* ARABIC LETTER ZAIN FINAL FORM (GLYPH FOR FINAL ARABIC ZAIN) */ + ["\uFEB1", "\uFEB1"], /* ARABIC LETTER SEEN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SEEN) */ + ["\uFEB2", "\uFEB2"], /* ARABIC LETTER SEEN FINAL FORM (GLYPH FOR FINAL ARABIC SEEN) */ + ["\uFEB3", "\uFEB3"], /* ARABIC LETTER SEEN INITIAL FORM (GLYPH FOR INITIAL ARABIC SEEN) */ + ["\uFEB4", "\uFEB4"], /* ARABIC LETTER SEEN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SEEN) */ + ["\uFEB5", "\uFEB5"], /* ARABIC LETTER SHEEN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SHEEN) */ + ["\uFEB6", "\uFEB6"], /* ARABIC LETTER SHEEN FINAL FORM (GLYPH FOR FINAL ARABIC SHEEN) */ + ["\uFEB7", "\uFEB7"], /* ARABIC LETTER SHEEN INITIAL FORM (GLYPH FOR INITIAL ARABIC SHEEN) */ + ["\uFEB8", "\uFEB8"], /* ARABIC LETTER SHEEN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SHEEN) */ + ["\uFEB9", "\uFEB9"], /* ARABIC LETTER SAD ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SAD) */ + ["\uFEBA", "\uFEBA"], /* ARABIC LETTER SAD FINAL FORM (GLYPH FOR FINAL ARABIC SAD) */ + ["\uFEBB", "\uFEBB"], /* ARABIC LETTER SAD INITIAL FORM (GLYPH FOR INITIAL ARABIC SAD) */ + ["\uFEBC", "\uFEBC"], /* ARABIC LETTER SAD MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SAD) */ + ["\uFEBD", "\uFEBD"], /* ARABIC LETTER DAD ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DAD) */ + ["\uFEBE", "\uFEBE"], /* ARABIC LETTER DAD FINAL FORM (GLYPH FOR FINAL ARABIC DAD) */ + ["\uFEBF", "\uFEBF"], /* ARABIC LETTER DAD INITIAL FORM (GLYPH FOR INITIAL ARABIC DAD) */ + ["\uFEC0", "\uFEC0"], /* ARABIC LETTER DAD MEDIAL FORM (GLYPH FOR MEDIAL ARABIC DAD) */ + ["\uFEC1", "\uFEC1"], /* ARABIC LETTER TAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAH) */ + ["\uFEC2", "\uFEC2"], /* ARABIC LETTER TAH FINAL FORM (GLYPH FOR FINAL ARABIC TAH) */ + ["\uFEC3", "\uFEC3"], /* ARABIC LETTER TAH INITIAL FORM (GLYPH FOR INITIAL ARABIC TAH) */ + ["\uFEC4", "\uFEC4"], /* ARABIC LETTER TAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC TAH) */ + ["\uFEC5", "\uFEC5"], /* ARABIC LETTER ZAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DHAH) */ + ["\uFEC6", "\uFEC6"], /* ARABIC LETTER ZAH FINAL FORM (GLYPH FOR FINAL ARABIC DHAH) */ + ["\uFEC7", "\uFEC7"], /* ARABIC LETTER ZAH INITIAL FORM (GLYPH FOR INITIAL ARABIC DHAH) */ + ["\uFEC8", "\uFEC8"], /* ARABIC LETTER ZAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC DHAH) */ + ["\uFEC9", "\uFEC9"], /* ARABIC LETTER AIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC AIN) */ + ["\uFECA", "\uFECA"], /* ARABIC LETTER AIN FINAL FORM (GLYPH FOR FINAL ARABIC AIN) */ + ["\uFECB", "\uFECB"], /* ARABIC LETTER AIN INITIAL FORM (GLYPH FOR INITIAL ARABIC AIN) */ + ["\uFECC", "\uFECC"], /* ARABIC LETTER AIN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC AIN) */ + ["\uFECD", "\uFECD"], /* ARABIC LETTER GHAIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC GHAIN) */ + ["\uFECE", "\uFECE"], /* ARABIC LETTER GHAIN FINAL FORM (GLYPH FOR FINAL ARABIC GHAIN) */ + ["\uFECF", "\uFECF"], /* ARABIC LETTER GHAIN INITIAL FORM (GLYPH FOR INITIAL ARABIC GHAIN) */ + ["\uFED0", "\uFED0"], /* ARABIC LETTER GHAIN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC GHAIN) */ + ["\uFED1", "\uFED1"], /* ARABIC LETTER FEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC FA) */ + ["\uFED2", "\uFED2"], /* ARABIC LETTER FEH FINAL FORM (GLYPH FOR FINAL ARABIC FA) */ + ["\uFED3", "\uFED3"], /* ARABIC LETTER FEH INITIAL FORM (GLYPH FOR INITIAL ARABIC FA) */ + ["\uFED4", "\uFED4"], /* ARABIC LETTER FEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC FA) */ + ["\uFED5", "\uFED5"], /* ARABIC LETTER QAF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC QAF) */ + ["\uFED6", "\uFED6"], /* ARABIC LETTER QAF FINAL FORM (GLYPH FOR FINAL ARABIC QAF) */ + ["\uFED7", "\uFED7"], /* ARABIC LETTER QAF INITIAL FORM (GLYPH FOR INITIAL ARABIC QAF) */ + ["\uFED8", "\uFED8"], /* ARABIC LETTER QAF MEDIAL FORM (GLYPH FOR MEDIAL ARABIC QAF) */ + ["\uFED9", "\uFED9"], /* ARABIC LETTER KAF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC CAF) */ + ["\uFEDA", "\uFEDA"], /* ARABIC LETTER KAF FINAL FORM (GLYPH FOR FINAL ARABIC CAF) */ + ["\uFEDB", "\uFEDB"], /* ARABIC LETTER KAF INITIAL FORM (GLYPH FOR INITIAL ARABIC CAF) */ + ["\uFEDC", "\uFEDC"], /* ARABIC LETTER KAF MEDIAL FORM (GLYPH FOR MEDIAL ARABIC CAF) */ + ["\uFEDD", "\uFEDD"], /* ARABIC LETTER LAM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC LAM) */ + ["\uFEDE", "\uFEDE"], /* ARABIC LETTER LAM FINAL FORM (GLYPH FOR FINAL ARABIC LAM) */ + ["\uFEDF", "\uFEDF"], /* ARABIC LETTER LAM INITIAL FORM (GLYPH FOR INITIAL ARABIC LAM) */ + ["\uFEE0", "\uFEE0"], /* ARABIC LETTER LAM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC LAM) */ + ["\uFEE1", "\uFEE1"], /* ARABIC LETTER MEEM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MEEM) */ + ["\uFEE2", "\uFEE2"], /* ARABIC LETTER MEEM FINAL FORM (GLYPH FOR FINAL ARABIC MEEM) */ + ["\uFEE3", "\uFEE3"], /* ARABIC LETTER MEEM INITIAL FORM (GLYPH FOR INITIAL ARABIC MEEM) */ + ["\uFEE4", "\uFEE4"], /* ARABIC LETTER MEEM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC MEEM) */ + ["\uFEE5", "\uFEE5"], /* ARABIC LETTER NOON ISOLATED FORM (GLYPH FOR ISOLATE ARABIC NOON) */ + ["\uFEE6", "\uFEE6"], /* ARABIC LETTER NOON FINAL FORM (GLYPH FOR FINAL ARABIC NOON) */ + ["\uFEE7", "\uFEE7"], /* ARABIC LETTER NOON INITIAL FORM (GLYPH FOR INITIAL ARABIC NOON) */ + ["\uFEE8", "\uFEE8"], /* ARABIC LETTER NOON MEDIAL FORM (GLYPH FOR MEDIAL ARABIC NOON) */ + ["\uFEE9", "\uFEE9"], /* ARABIC LETTER HEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HA) */ + ["\uFEEA", "\uFEEA"], /* ARABIC LETTER HEH FINAL FORM (GLYPH FOR FINAL ARABIC HA) */ + ["\uFEEB", "\uFEEB"], /* ARABIC LETTER HEH INITIAL FORM (GLYPH FOR INITIAL ARABIC HA) */ + ["\uFEEC", "\uFEEC"], /* ARABIC LETTER HEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HA) */ + ["\uFEED", "\uFEED"], /* ARABIC LETTER WAW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC WAW) */ + ["\uFEEE", "\uFEEE"], /* ARABIC LETTER WAW FINAL FORM (GLYPH FOR FINAL ARABIC WAW) */ + ["\uFEEF", "\uFEEF"], /* ARABIC LETTER ALEF MAKSURA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH) */ + ["\uFEF0", "\uFEF0"], /* ARABIC LETTER ALEF MAKSURA FINAL FORM (GLYPH FOR FINAL ARABIC ALEF MAQSURAH) */ + ["\uFEF1", "\uFEF1"], /* ARABIC LETTER YEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC YA) */ + ["\uFEF2", "\uFEF2"], /* ARABIC LETTER YEH FINAL FORM (GLYPH FOR FINAL ARABIC YA) */ + ["\uFEF3", "\uFEF3"], /* ARABIC LETTER YEH INITIAL FORM (GLYPH FOR INITIAL ARABIC YA) */ + ["\uFEF4", "\uFEF4"], /* ARABIC LETTER YEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC YA) */ + ["\uFEF5", "\uFEF5"], /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF) */ + ["\uFEF6", "\uFEF6"], /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF) */ + ["\uFEF7", "\uFEF7"], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF) */ + ["\uFEF8", "\uFEF8"], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF) */ + ["\uFEF9", "\uFEF9"], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF) */ + ["\uFEFA", "\uFEFA"], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF) */ + ["\uFEFB", "\uFEFB"], /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF) */ + ["\uFEFC", "\uFEFC"], /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM (GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF) */ + ["\uFEFD", "\uFEFD"], + ["\uFEFE", "\uFEFE"], + ["\uFEFF", "\uFEFF"], /* ZERO WIDTH NO-BREAK SPACE (BYTE ORDER MARK) */ + ["\uFF00", "\uFF00"], + ["\uFF01", "\uFF01"], /* FULLWIDTH EXCLAMATION MARK */ + ["\uFF02", "\uFF02"], /* FULLWIDTH QUOTATION MARK */ + ["\uFF03", "\uFF03"], /* FULLWIDTH NUMBER SIGN */ + ["\uFF04", "\uFF04"], /* FULLWIDTH DOLLAR SIGN */ + ["\uFF05", "\uFF05"], /* FULLWIDTH PERCENT SIGN */ + ["\uFF06", "\uFF06"], /* FULLWIDTH AMPERSAND */ + ["\uFF07", "\uFF07"], /* FULLWIDTH APOSTROPHE */ + ["\uFF08", "\uFF08"], /* FULLWIDTH LEFT PARENTHESIS (FULLWIDTH OPENING PARENTHESIS) */ + ["\uFF09", "\uFF09"], /* FULLWIDTH RIGHT PARENTHESIS (FULLWIDTH CLOSING PARENTHESIS) */ + ["\uFF0A", "\uFF0A"], /* FULLWIDTH ASTERISK */ + ["\uFF0B", "\uFF0B"], /* FULLWIDTH PLUS SIGN */ + ["\uFF0C", "\uFF0C"], /* FULLWIDTH COMMA */ + ["\uFF0D", "\uFF0D"], /* FULLWIDTH HYPHEN-MINUS */ + ["\uFF0E", "\uFF0E"], /* FULLWIDTH FULL STOP (FULLWIDTH PERIOD) */ + ["\uFF0F", "\uFF0F"], /* FULLWIDTH SOLIDUS (FULLWIDTH SLASH) */ + ["\uFF10", "\uFF10"], /* FULLWIDTH DIGIT ZERO */ + ["\uFF11", "\uFF11"], /* FULLWIDTH DIGIT ONE */ + ["\uFF12", "\uFF12"], /* FULLWIDTH DIGIT TWO */ + ["\uFF13", "\uFF13"], /* FULLWIDTH DIGIT THREE */ + ["\uFF14", "\uFF14"], /* FULLWIDTH DIGIT FOUR */ + ["\uFF15", "\uFF15"], /* FULLWIDTH DIGIT FIVE */ + ["\uFF16", "\uFF16"], /* FULLWIDTH DIGIT SIX */ + ["\uFF17", "\uFF17"], /* FULLWIDTH DIGIT SEVEN */ + ["\uFF18", "\uFF18"], /* FULLWIDTH DIGIT EIGHT */ + ["\uFF19", "\uFF19"], /* FULLWIDTH DIGIT NINE */ + ["\uFF1A", "\uFF1A"], /* FULLWIDTH COLON */ + ["\uFF1B", "\uFF1B"], /* FULLWIDTH SEMICOLON */ + ["\uFF1C", "\uFF1C"], /* FULLWIDTH LESS-THAN SIGN */ + ["\uFF1D", "\uFF1D"], /* FULLWIDTH EQUALS SIGN */ + ["\uFF1E", "\uFF1E"], /* FULLWIDTH GREATER-THAN SIGN */ + ["\uFF1F", "\uFF1F"], /* FULLWIDTH QUESTION MARK */ + ["\uFF20", "\uFF20"], /* FULLWIDTH COMMERCIAL AT */ + ["\uFF21", "\uFF41"], /* FULLWIDTH LATIN CAPITAL LETTER A */ + ["\uFF22", "\uFF42"], /* FULLWIDTH LATIN CAPITAL LETTER B */ + ["\uFF23", "\uFF43"], /* FULLWIDTH LATIN CAPITAL LETTER C */ + ["\uFF24", "\uFF44"], /* FULLWIDTH LATIN CAPITAL LETTER D */ + ["\uFF25", "\uFF45"], /* FULLWIDTH LATIN CAPITAL LETTER E */ + ["\uFF26", "\uFF46"], /* FULLWIDTH LATIN CAPITAL LETTER F */ + ["\uFF27", "\uFF47"], /* FULLWIDTH LATIN CAPITAL LETTER G */ + ["\uFF28", "\uFF48"], /* FULLWIDTH LATIN CAPITAL LETTER H */ + ["\uFF29", "\uFF49"], /* FULLWIDTH LATIN CAPITAL LETTER I */ + ["\uFF2A", "\uFF4A"], /* FULLWIDTH LATIN CAPITAL LETTER J */ + ["\uFF2B", "\uFF4B"], /* FULLWIDTH LATIN CAPITAL LETTER K */ + ["\uFF2C", "\uFF4C"], /* FULLWIDTH LATIN CAPITAL LETTER L */ + ["\uFF2D", "\uFF4D"], /* FULLWIDTH LATIN CAPITAL LETTER M */ + ["\uFF2E", "\uFF4E"], /* FULLWIDTH LATIN CAPITAL LETTER N */ + ["\uFF2F", "\uFF4F"], /* FULLWIDTH LATIN CAPITAL LETTER O */ + ["\uFF30", "\uFF50"], /* FULLWIDTH LATIN CAPITAL LETTER P */ + ["\uFF31", "\uFF51"], /* FULLWIDTH LATIN CAPITAL LETTER Q */ + ["\uFF32", "\uFF52"], /* FULLWIDTH LATIN CAPITAL LETTER R */ + ["\uFF33", "\uFF53"], /* FULLWIDTH LATIN CAPITAL LETTER S */ + ["\uFF34", "\uFF54"], /* FULLWIDTH LATIN CAPITAL LETTER T */ + ["\uFF35", "\uFF55"], /* FULLWIDTH LATIN CAPITAL LETTER U */ + ["\uFF36", "\uFF56"], /* FULLWIDTH LATIN CAPITAL LETTER V */ + ["\uFF37", "\uFF57"], /* FULLWIDTH LATIN CAPITAL LETTER W */ + ["\uFF38", "\uFF58"], /* FULLWIDTH LATIN CAPITAL LETTER X */ + ["\uFF39", "\uFF59"], /* FULLWIDTH LATIN CAPITAL LETTER Y */ + ["\uFF3A", "\uFF5A"], /* FULLWIDTH LATIN CAPITAL LETTER Z */ + ["\uFF3B", "\uFF3B"], /* FULLWIDTH LEFT SQUARE BRACKET (FULLWIDTH OPENING SQUARE BRACKET) */ + ["\uFF3C", "\uFF3C"], /* FULLWIDTH REVERSE SOLIDUS (FULLWIDTH BACKSLASH) */ + ["\uFF3D", "\uFF3D"], /* FULLWIDTH RIGHT SQUARE BRACKET (FULLWIDTH CLOSING SQUARE BRACKET) */ + ["\uFF3E", "\uFF3E"], /* FULLWIDTH CIRCUMFLEX ACCENT (FULLWIDTH SPACING CIRCUMFLEX) */ + ["\uFF3F", "\uFF3F"], /* FULLWIDTH LOW LINE (FULLWIDTH SPACING UNDERSCORE) */ + ["\uFF40", "\uFF40"], /* FULLWIDTH GRAVE ACCENT (FULLWIDTH SPACING GRAVE) */ + ["\uFF21", "\uFF41"], /* FULLWIDTH LATIN SMALL LETTER A */ + ["\uFF22", "\uFF42"], /* FULLWIDTH LATIN SMALL LETTER B */ + ["\uFF23", "\uFF43"], /* FULLWIDTH LATIN SMALL LETTER C */ + ["\uFF24", "\uFF44"], /* FULLWIDTH LATIN SMALL LETTER D */ + ["\uFF25", "\uFF45"], /* FULLWIDTH LATIN SMALL LETTER E */ + ["\uFF26", "\uFF46"], /* FULLWIDTH LATIN SMALL LETTER F */ + ["\uFF27", "\uFF47"], /* FULLWIDTH LATIN SMALL LETTER G */ + ["\uFF28", "\uFF48"], /* FULLWIDTH LATIN SMALL LETTER H */ + ["\uFF29", "\uFF49"], /* FULLWIDTH LATIN SMALL LETTER I */ + ["\uFF2A", "\uFF4A"], /* FULLWIDTH LATIN SMALL LETTER J */ + ["\uFF2B", "\uFF4B"], /* FULLWIDTH LATIN SMALL LETTER K */ + ["\uFF2C", "\uFF4C"], /* FULLWIDTH LATIN SMALL LETTER L */ + ["\uFF2D", "\uFF4D"], /* FULLWIDTH LATIN SMALL LETTER M */ + ["\uFF2E", "\uFF4E"], /* FULLWIDTH LATIN SMALL LETTER N */ + ["\uFF2F", "\uFF4F"], /* FULLWIDTH LATIN SMALL LETTER O */ + ["\uFF30", "\uFF50"], /* FULLWIDTH LATIN SMALL LETTER P */ + ["\uFF31", "\uFF51"], /* FULLWIDTH LATIN SMALL LETTER Q */ + ["\uFF32", "\uFF52"], /* FULLWIDTH LATIN SMALL LETTER R */ + ["\uFF33", "\uFF53"], /* FULLWIDTH LATIN SMALL LETTER S */ + ["\uFF34", "\uFF54"], /* FULLWIDTH LATIN SMALL LETTER T */ + ["\uFF35", "\uFF55"], /* FULLWIDTH LATIN SMALL LETTER U */ + ["\uFF36", "\uFF56"], /* FULLWIDTH LATIN SMALL LETTER V */ + ["\uFF37", "\uFF57"], /* FULLWIDTH LATIN SMALL LETTER W */ + ["\uFF38", "\uFF58"], /* FULLWIDTH LATIN SMALL LETTER X */ + ["\uFF39", "\uFF59"], /* FULLWIDTH LATIN SMALL LETTER Y */ + ["\uFF3A", "\uFF5A"], /* FULLWIDTH LATIN SMALL LETTER Z */ + ["\uFF5B", "\uFF5B"], /* FULLWIDTH LEFT CURLY BRACKET (FULLWIDTH OPENING CURLY BRACKET) */ + ["\uFF5C", "\uFF5C"], /* FULLWIDTH VERTICAL LINE (FULLWIDTH VERTICAL BAR) */ + ["\uFF5D", "\uFF5D"], /* FULLWIDTH RIGHT CURLY BRACKET (FULLWIDTH CLOSING CURLY BRACKET) */ + ["\uFF5E", "\uFF5E"], /* FULLWIDTH TILDE (FULLWIDTH SPACING TILDE) */ + ["\uFF5F", "\uFF5F"], /* FULLWIDTH LEFT WHITE PARENTHESIS */ + ["\uFF60", "\uFF60"], /* FULLWIDTH RIGHT WHITE PARENTHESIS */ + ["\uFF61", "\uFF61"], /* HALFWIDTH IDEOGRAPHIC FULL STOP (HALFWIDTH IDEOGRAPHIC PERIOD) */ + ["\uFF62", "\uFF62"], /* HALFWIDTH LEFT CORNER BRACKET (HALFWIDTH OPENING CORNER BRACKET) */ + ["\uFF63", "\uFF63"], /* HALFWIDTH RIGHT CORNER BRACKET (HALFWIDTH CLOSING CORNER BRACKET) */ + ["\uFF64", "\uFF64"], /* HALFWIDTH IDEOGRAPHIC COMMA */ + ["\uFF65", "\uFF65"], /* HALFWIDTH KATAKANA MIDDLE DOT */ + ["\uFF66", "\uFF66"], /* HALFWIDTH KATAKANA LETTER WO */ + ["\uFF67", "\uFF67"], /* HALFWIDTH KATAKANA LETTER SMALL A */ + ["\uFF68", "\uFF68"], /* HALFWIDTH KATAKANA LETTER SMALL I */ + ["\uFF69", "\uFF69"], /* HALFWIDTH KATAKANA LETTER SMALL U */ + ["\uFF6A", "\uFF6A"], /* HALFWIDTH KATAKANA LETTER SMALL E */ + ["\uFF6B", "\uFF6B"], /* HALFWIDTH KATAKANA LETTER SMALL O */ + ["\uFF6C", "\uFF6C"], /* HALFWIDTH KATAKANA LETTER SMALL YA */ + ["\uFF6D", "\uFF6D"], /* HALFWIDTH KATAKANA LETTER SMALL YU */ + ["\uFF6E", "\uFF6E"], /* HALFWIDTH KATAKANA LETTER SMALL YO */ + ["\uFF6F", "\uFF6F"], /* HALFWIDTH KATAKANA LETTER SMALL TU */ + ["\uFF70", "\uFF70"], /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + ["\uFF71", "\uFF71"], /* HALFWIDTH KATAKANA LETTER A */ + ["\uFF72", "\uFF72"], /* HALFWIDTH KATAKANA LETTER I */ + ["\uFF73", "\uFF73"], /* HALFWIDTH KATAKANA LETTER U */ + ["\uFF74", "\uFF74"], /* HALFWIDTH KATAKANA LETTER E */ + ["\uFF75", "\uFF75"], /* HALFWIDTH KATAKANA LETTER O */ + ["\uFF76", "\uFF76"], /* HALFWIDTH KATAKANA LETTER KA */ + ["\uFF77", "\uFF77"], /* HALFWIDTH KATAKANA LETTER KI */ + ["\uFF78", "\uFF78"], /* HALFWIDTH KATAKANA LETTER KU */ + ["\uFF79", "\uFF79"], /* HALFWIDTH KATAKANA LETTER KE */ + ["\uFF7A", "\uFF7A"], /* HALFWIDTH KATAKANA LETTER KO */ + ["\uFF7B", "\uFF7B"], /* HALFWIDTH KATAKANA LETTER SA */ + ["\uFF7C", "\uFF7C"], /* HALFWIDTH KATAKANA LETTER SI */ + ["\uFF7D", "\uFF7D"], /* HALFWIDTH KATAKANA LETTER SU */ + ["\uFF7E", "\uFF7E"], /* HALFWIDTH KATAKANA LETTER SE */ + ["\uFF7F", "\uFF7F"], /* HALFWIDTH KATAKANA LETTER SO */ + ["\uFF80", "\uFF80"], /* HALFWIDTH KATAKANA LETTER TA */ + ["\uFF81", "\uFF81"], /* HALFWIDTH KATAKANA LETTER TI */ + ["\uFF82", "\uFF82"], /* HALFWIDTH KATAKANA LETTER TU */ + ["\uFF83", "\uFF83"], /* HALFWIDTH KATAKANA LETTER TE */ + ["\uFF84", "\uFF84"], /* HALFWIDTH KATAKANA LETTER TO */ + ["\uFF85", "\uFF85"], /* HALFWIDTH KATAKANA LETTER NA */ + ["\uFF86", "\uFF86"], /* HALFWIDTH KATAKANA LETTER NI */ + ["\uFF87", "\uFF87"], /* HALFWIDTH KATAKANA LETTER NU */ + ["\uFF88", "\uFF88"], /* HALFWIDTH KATAKANA LETTER NE */ + ["\uFF89", "\uFF89"], /* HALFWIDTH KATAKANA LETTER NO */ + ["\uFF8A", "\uFF8A"], /* HALFWIDTH KATAKANA LETTER HA */ + ["\uFF8B", "\uFF8B"], /* HALFWIDTH KATAKANA LETTER HI */ + ["\uFF8C", "\uFF8C"], /* HALFWIDTH KATAKANA LETTER HU */ + ["\uFF8D", "\uFF8D"], /* HALFWIDTH KATAKANA LETTER HE */ + ["\uFF8E", "\uFF8E"], /* HALFWIDTH KATAKANA LETTER HO */ + ["\uFF8F", "\uFF8F"], /* HALFWIDTH KATAKANA LETTER MA */ + ["\uFF90", "\uFF90"], /* HALFWIDTH KATAKANA LETTER MI */ + ["\uFF91", "\uFF91"], /* HALFWIDTH KATAKANA LETTER MU */ + ["\uFF92", "\uFF92"], /* HALFWIDTH KATAKANA LETTER ME */ + ["\uFF93", "\uFF93"], /* HALFWIDTH KATAKANA LETTER MO */ + ["\uFF94", "\uFF94"], /* HALFWIDTH KATAKANA LETTER YA */ + ["\uFF95", "\uFF95"], /* HALFWIDTH KATAKANA LETTER YU */ + ["\uFF96", "\uFF96"], /* HALFWIDTH KATAKANA LETTER YO */ + ["\uFF97", "\uFF97"], /* HALFWIDTH KATAKANA LETTER RA */ + ["\uFF98", "\uFF98"], /* HALFWIDTH KATAKANA LETTER RI */ + ["\uFF99", "\uFF99"], /* HALFWIDTH KATAKANA LETTER RU */ + ["\uFF9A", "\uFF9A"], /* HALFWIDTH KATAKANA LETTER RE */ + ["\uFF9B", "\uFF9B"], /* HALFWIDTH KATAKANA LETTER RO */ + ["\uFF9C", "\uFF9C"], /* HALFWIDTH KATAKANA LETTER WA */ + ["\uFF9D", "\uFF9D"], /* HALFWIDTH KATAKANA LETTER N */ + ["\uFF9E", "\uFF9E"], /* HALFWIDTH KATAKANA VOICED SOUND MARK */ + ["\uFF9F", "\uFF9F"], /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */ + ["\uFFA0", "\uFFA0"], /* HALFWIDTH HANGUL FILLER (HALFWIDTH HANGUL CAE OM) */ + ["\uFFA1", "\uFFA1"], /* HALFWIDTH HANGUL LETTER KIYEOK (HALFWIDTH HANGUL LETTER GIYEOG) */ + ["\uFFA2", "\uFFA2"], /* HALFWIDTH HANGUL LETTER SSANGKIYEOK (HALFWIDTH HANGUL LETTER SSANG GIYEOG) */ + ["\uFFA3", "\uFFA3"], /* HALFWIDTH HANGUL LETTER KIYEOK-SIOS (HALFWIDTH HANGUL LETTER GIYEOG SIOS) */ + ["\uFFA4", "\uFFA4"], /* HALFWIDTH HANGUL LETTER NIEUN */ + ["\uFFA5", "\uFFA5"], /* HALFWIDTH HANGUL LETTER NIEUN-CIEUC (HALFWIDTH HANGUL LETTER NIEUN JIEUJ) */ + ["\uFFA6", "\uFFA6"], /* HALFWIDTH HANGUL LETTER NIEUN-HIEUH (HALFWIDTH HANGUL LETTER NIEUN HIEUH) */ + ["\uFFA7", "\uFFA7"], /* HALFWIDTH HANGUL LETTER TIKEUT (HALFWIDTH HANGUL LETTER DIGEUD) */ + ["\uFFA8", "\uFFA8"], /* HALFWIDTH HANGUL LETTER SSANGTIKEUT (HALFWIDTH HANGUL LETTER SSANG DIGEUD) */ + ["\uFFA9", "\uFFA9"], /* HALFWIDTH HANGUL LETTER RIEUL (HALFWIDTH HANGUL LETTER LIEUL) */ + ["\uFFAA", "\uFFAA"], /* HALFWIDTH HANGUL LETTER RIEUL-KIYEOK (HALFWIDTH HANGUL LETTER LIEUL GIYEOG) */ + ["\uFFAB", "\uFFAB"], /* HALFWIDTH HANGUL LETTER RIEUL-MIEUM (HALFWIDTH HANGUL LETTER LIEUL MIEUM) */ + ["\uFFAC", "\uFFAC"], /* HALFWIDTH HANGUL LETTER RIEUL-PIEUP (HALFWIDTH HANGUL LETTER LIEUL BIEUB) */ + ["\uFFAD", "\uFFAD"], /* HALFWIDTH HANGUL LETTER RIEUL-SIOS (HALFWIDTH HANGUL LETTER LIEUL SIOS) */ + ["\uFFAE", "\uFFAE"], /* HALFWIDTH HANGUL LETTER RIEUL-THIEUTH (HALFWIDTH HANGUL LETTER LIEUL TIEUT) */ + ["\uFFAF", "\uFFAF"], /* HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH (HALFWIDTH HANGUL LETTER LIEUL PIEUP) */ + ["\uFFB0", "\uFFB0"], /* HALFWIDTH HANGUL LETTER RIEUL-HIEUH (HALFWIDTH HANGUL LETTER LIEUL HIEUH) */ + ["\uFFB1", "\uFFB1"], /* HALFWIDTH HANGUL LETTER MIEUM */ + ["\uFFB2", "\uFFB2"], /* HALFWIDTH HANGUL LETTER PIEUP (HALFWIDTH HANGUL LETTER BIEUB) */ + ["\uFFB3", "\uFFB3"], /* HALFWIDTH HANGUL LETTER SSANGPIEUP (HALFWIDTH HANGUL LETTER SSANG BIEUB) */ + ["\uFFB4", "\uFFB4"], /* HALFWIDTH HANGUL LETTER PIEUP-SIOS (HALFWIDTH HANGUL LETTER BIEUB SIOS) */ + ["\uFFB5", "\uFFB5"], /* HALFWIDTH HANGUL LETTER SIOS */ + ["\uFFB6", "\uFFB6"], /* HALFWIDTH HANGUL LETTER SSANGSIOS (HALFWIDTH HANGUL LETTER SSANG SIOS) */ + ["\uFFB7", "\uFFB7"], /* HALFWIDTH HANGUL LETTER IEUNG */ + ["\uFFB8", "\uFFB8"], /* HALFWIDTH HANGUL LETTER CIEUC (HALFWIDTH HANGUL LETTER JIEUJ) */ + ["\uFFB9", "\uFFB9"], /* HALFWIDTH HANGUL LETTER SSANGCIEUC (HALFWIDTH HANGUL LETTER SSANG JIEUJ) */ + ["\uFFBA", "\uFFBA"], /* HALFWIDTH HANGUL LETTER CHIEUCH (HALFWIDTH HANGUL LETTER CIEUC) */ + ["\uFFBB", "\uFFBB"], /* HALFWIDTH HANGUL LETTER KHIEUKH (HALFWIDTH HANGUL LETTER KIYEOK) */ + ["\uFFBC", "\uFFBC"], /* HALFWIDTH HANGUL LETTER THIEUTH (HALFWIDTH HANGUL LETTER TIEUT) */ + ["\uFFBD", "\uFFBD"], /* HALFWIDTH HANGUL LETTER PHIEUPH (HALFWIDTH HANGUL LETTER PIEUP) */ + ["\uFFBE", "\uFFBE"], /* HALFWIDTH HANGUL LETTER HIEUH */ + ["\uFFBF", "\uFFBF"], + ["\uFFC0", "\uFFC0"], + ["\uFFC1", "\uFFC1"], + ["\uFFC2", "\uFFC2"], /* HALFWIDTH HANGUL LETTER A */ + ["\uFFC3", "\uFFC3"], /* HALFWIDTH HANGUL LETTER AE */ + ["\uFFC4", "\uFFC4"], /* HALFWIDTH HANGUL LETTER YA */ + ["\uFFC5", "\uFFC5"], /* HALFWIDTH HANGUL LETTER YAE */ + ["\uFFC6", "\uFFC6"], /* HALFWIDTH HANGUL LETTER EO */ + ["\uFFC7", "\uFFC7"], /* HALFWIDTH HANGUL LETTER E */ + ["\uFFC8", "\uFFC8"], + ["\uFFC9", "\uFFC9"], + ["\uFFCA", "\uFFCA"], /* HALFWIDTH HANGUL LETTER YEO */ + ["\uFFCB", "\uFFCB"], /* HALFWIDTH HANGUL LETTER YE */ + ["\uFFCC", "\uFFCC"], /* HALFWIDTH HANGUL LETTER O */ + ["\uFFCD", "\uFFCD"], /* HALFWIDTH HANGUL LETTER WA */ + ["\uFFCE", "\uFFCE"], /* HALFWIDTH HANGUL LETTER WAE */ + ["\uFFCF", "\uFFCF"], /* HALFWIDTH HANGUL LETTER OE */ + ["\uFFD0", "\uFFD0"], + ["\uFFD1", "\uFFD1"], + ["\uFFD2", "\uFFD2"], /* HALFWIDTH HANGUL LETTER YO */ + ["\uFFD3", "\uFFD3"], /* HALFWIDTH HANGUL LETTER U */ + ["\uFFD4", "\uFFD4"], /* HALFWIDTH HANGUL LETTER WEO */ + ["\uFFD5", "\uFFD5"], /* HALFWIDTH HANGUL LETTER WE */ + ["\uFFD6", "\uFFD6"], /* HALFWIDTH HANGUL LETTER WI */ + ["\uFFD7", "\uFFD7"], /* HALFWIDTH HANGUL LETTER YU */ + ["\uFFD8", "\uFFD8"], + ["\uFFD9", "\uFFD9"], + ["\uFFDA", "\uFFDA"], /* HALFWIDTH HANGUL LETTER EU */ + ["\uFFDB", "\uFFDB"], /* HALFWIDTH HANGUL LETTER YI */ + ["\uFFDC", "\uFFDC"], /* HALFWIDTH HANGUL LETTER I */ + ["\uFFDD", "\uFFDD"], + ["\uFFDE", "\uFFDE"], + ["\uFFDF", "\uFFDF"], + ["\uFFE0", "\uFFE0"], /* FULLWIDTH CENT SIGN */ + ["\uFFE1", "\uFFE1"], /* FULLWIDTH POUND SIGN */ + ["\uFFE2", "\uFFE2"], /* FULLWIDTH NOT SIGN */ + ["\uFFE3", "\uFFE3"], /* FULLWIDTH MACRON (FULLWIDTH SPACING MACRON) */ + ["\uFFE4", "\uFFE4"], /* FULLWIDTH BROKEN BAR (FULLWIDTH BROKEN VERTICAL BAR) */ + ["\uFFE5", "\uFFE5"], /* FULLWIDTH YEN SIGN */ + ["\uFFE6", "\uFFE6"], /* FULLWIDTH WON SIGN */ + ["\uFFE7", "\uFFE7"], + ["\uFFE8", "\uFFE8"], /* HALFWIDTH FORMS LIGHT VERTICAL */ + ["\uFFE9", "\uFFE9"], /* HALFWIDTH LEFTWARDS ARROW */ + ["\uFFEA", "\uFFEA"], /* HALFWIDTH UPWARDS ARROW */ + ["\uFFEB", "\uFFEB"], /* HALFWIDTH RIGHTWARDS ARROW */ + ["\uFFEC", "\uFFEC"], /* HALFWIDTH DOWNWARDS ARROW */ + ["\uFFED", "\uFFED"], /* HALFWIDTH BLACK SQUARE */ + ["\uFFEE", "\uFFEE"], /* HALFWIDTH WHITE CIRCLE */ + ["\uFFEF", "\uFFEF"], + ["\uFFF0", "\uFFF0"], + ["\uFFF1", "\uFFF1"], + ["\uFFF2", "\uFFF2"], + ["\uFFF3", "\uFFF3"], + ["\uFFF4", "\uFFF4"], + ["\uFFF5", "\uFFF5"], + ["\uFFF6", "\uFFF6"], + ["\uFFF7", "\uFFF7"], + ["\uFFF8", "\uFFF8"], + ["\uFFF9", "\uFFF9"], /* INTERLINEAR ANNOTATION ANCHOR */ + ["\uFFFA", "\uFFFA"], /* INTERLINEAR ANNOTATION SEPARATOR */ + ["\uFFFB", "\uFFFB"], /* INTERLINEAR ANNOTATION TERMINATOR */ + ["\uFFFC", "\uFFFC"], /* OBJECT REPLACEMENT CHARACTER */ + ["\uFFFD", "\uFFFD"], /* REPLACEMENT CHARACTER */ + ["\uFFFE", "\uFFFE"], + ["\uFFFF", "\uFFFF"], +]; + +assert.sameValue(mapping.length, 0x10000); +for (var i = 0; i <= 0xffff; i++) { + var char = String.fromCharCode(i); + var info = mapping[i]; + + assert.sameValue(char.toUpperCase(), info[0]); + assert.sameValue(char.toLowerCase(), info[1]); +} + diff --git a/test/staging/sm/String/thisv-error.js b/test/staging/sm/String/thisv-error.js new file mode 100644 index 0000000000..8c3d1622fb --- /dev/null +++ b/test/staging/sm/String/thisv-error.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function testName(thisv) { + var failures = [ + // Not a function + "length", + // TODO: Different implementation + "toString", + "toSource", + "valueOf", + // Aliases + "trimLeft", + "trimRight", + ] + + var keys = Object.getOwnPropertyNames(String.prototype); + for (var key of keys) { + if (key === "constructor") { + assert.sameValue(String.prototype[key].call(thisv), ""); + } else if (failures.includes(key)) { + assertThrowsInstanceOf(() => String.prototype[key].call(thisv), TypeError, key); + } else { + var expected = `String.prototype.${key} called on incompatible ${thisv}`; + assertThrowsInstanceOfWithMessage(() => String.prototype[key].call(thisv), TypeError, expected, key) + } + } +} +testName(null); +testName(undefined); + +// On-off test for Symbol.iterator +function testIterator(thisv) { + assertThrowsInstanceOfWithMessage(() => String.prototype[Symbol.iterator].call(thisv), TypeError, + `String.prototype[Symbol.iterator] called on incompatible ${thisv}`); +} +testIterator(null); +testIterator(undefined); + diff --git a/test/staging/sm/String/two-length-nonlatin-indexOf.js b/test/staging/sm/String/two-length-nonlatin-indexOf.js new file mode 100644 index 0000000000..2b96d68edf --- /dev/null +++ b/test/staging/sm/String/two-length-nonlatin-indexOf.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1801690; +var summary = "indexOf function doesn't work correctly with polish letters"; + +// Prior to this bug being fixed, this would return 0. This is because 'ł' +// truncates to the same 8-bit number as 'B'. We had a guard on the first +// character, but there was a hole in our logic specifically for the +// second character of the needle string. +assert.sameValue("AB".indexOf("Ał"), -1); + diff --git a/test/staging/sm/String/unicode-braced.js b/test/staging/sm/String/unicode-braced.js new file mode 100644 index 0000000000..ba085d8853 --- /dev/null +++ b/test/staging/sm/String/unicode-braced.js @@ -0,0 +1,73 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-String-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 320500; +var summary = 'Add \\u{xxxxxx} string literals'; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue("\u{0}", String.fromCodePoint(0x0)); +assert.sameValue("\u{1}", String.fromCodePoint(0x1)); +assert.sameValue("\u{10}", String.fromCodePoint(0x10)); +assert.sameValue("\u{100}", String.fromCodePoint(0x100)); +assert.sameValue("\u{1000}", String.fromCodePoint(0x1000)); +assert.sameValue("\u{D7FF}", String.fromCodePoint(0xD7FF)); +assert.sameValue("\u{D800}", String.fromCodePoint(0xD800)); +assert.sameValue("\u{DBFF}", String.fromCodePoint(0xDBFF)); +assert.sameValue("\u{DC00}", String.fromCodePoint(0xDC00)); +assert.sameValue("\u{DFFF}", String.fromCodePoint(0xDFFF)); +assert.sameValue("\u{E000}", String.fromCodePoint(0xE000)); +assert.sameValue("\u{10000}", String.fromCodePoint(0x10000)); +assert.sameValue("\u{100000}", String.fromCodePoint(0x100000)); +assert.sameValue("\u{10FFFF}", String.fromCodePoint(0x10FFFF)); +assert.sameValue("\u{10ffff}", String.fromCodePoint(0x10FFFF)); + +assert.sameValue("A\u{1}\u{10}B\u{100}\u{1000}\u{10000}C\u{100000}", + "A" + + String.fromCodePoint(0x1) + + String.fromCodePoint(0x10) + + "B" + + String.fromCodePoint(0x100) + + String.fromCodePoint(0x1000) + + String.fromCodePoint(0x10000) + + "C" + + String.fromCodePoint(0x100000)); + +assert.sameValue('\u{10ffff}', String.fromCodePoint(0x10FFFF)); +assert.sameValue(`\u{10ffff}`, String.fromCodePoint(0x10FFFF)); +assert.sameValue(`\u{10ffff}${""}`, String.fromCodePoint(0x10FFFF)); +assert.sameValue(`${""}\u{10ffff}`, String.fromCodePoint(0x10FFFF)); +assert.sameValue(`${""}\u{10ffff}${""}`, String.fromCodePoint(0x10FFFF)); + +assert.sameValue("\u{00}", String.fromCodePoint(0x0)); +assert.sameValue("\u{00000000000000000}", String.fromCodePoint(0x0)); +assert.sameValue("\u{00000000000001000}", String.fromCodePoint(0x1000)); + +assert.sameValue(eval(`"\\u{${"0".repeat(Math.pow(2, 24)) + "1234"}}"`), String.fromCodePoint(0x1234)); + +assert.sameValue("\U{0}", "U{0}"); + +assertThrowsInstanceOf(() => eval(`"\\u{-1}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{0.0}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{G}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{{"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{110000}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{00110000}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{100000000000000000000000000000}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{ FFFF}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{FFFF }"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{FF FF}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{F F F F}"`), SyntaxError); +assertThrowsInstanceOf(() => eval(`"\\u{100000001}"`), SyntaxError); + diff --git a/test/staging/sm/Symbol/as-base-value.js b/test/staging/sm/Symbol/as-base-value.js new file mode 100644 index 0000000000..4004274c4f --- /dev/null +++ b/test/staging/sm/Symbol/as-base-value.js @@ -0,0 +1,95 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Like other primitives, symbols can be treated as objects, using object-like +// syntax: `symbol.prop` or `symbol[key]`. +// +// In ECMAScript spec jargon, this creates a Reference whose base value is a +// primitive Symbol value. + +var symbols = [ + Symbol(), + Symbol("ponies"), + Symbol.for("sym"), + Symbol.iterator +]; + +// Test accessor property, used below. +var gets, sets; +Object.defineProperty(Symbol.prototype, "prop", { + get: function () { + "use strict"; + gets++; + assert.sameValue(typeof this, "symbol"); + assert.sameValue(this, sym); + return "got"; + }, + set: function (v) { + "use strict"; + sets++; + assert.sameValue(typeof this, "symbol"); + assert.sameValue(this, sym); + assert.sameValue(v, "newvalue"); + } +}); + +for (var sym of symbols) { + assert.sameValue(sym.constructor, Symbol); + + // method on Object.prototype + assert.sameValue(sym.hasOwnProperty("constructor"), false); + assert.sameValue(sym.toLocaleString(), sym.toString()); // once .toString() exists + + // custom method monkeypatched onto Symbol.prototype + Symbol.prototype.nonStrictMethod = function (arg) { + assert.sameValue(arg, "ok"); + assert.sameValue(this instanceof Symbol, true); + assert.sameValue(this.valueOf(), sym); + return 13; + }; + assert.sameValue(sym.nonStrictMethod("ok"), 13); + + // the same, but strict mode + Symbol.prototype.strictMethod = function (arg) { + "use strict"; + assert.sameValue(arg, "ok2"); + assert.sameValue(this, sym); + return 14; + }; + assert.sameValue(sym.strictMethod("ok2"), 14); + + // getter/setter on Symbol.prototype + gets = 0; + sets = 0; + var propname = "prop"; + + assert.sameValue(sym.prop, "got"); + assert.sameValue(gets, 1); + assert.sameValue(sym[propname], "got"); + assert.sameValue(gets, 2); + + assert.sameValue(sym.prop = "newvalue", "newvalue"); + assert.sameValue(sets, 1); + assert.sameValue(sym[propname] = "newvalue", "newvalue"); + assert.sameValue(sets, 2); + + // non-existent property + assert.sameValue(sym.noSuchProp, undefined); + var noSuchPropName = "nonesuch"; + assert.sameValue(sym[noSuchPropName], undefined); + + // non-existent method + assertThrowsInstanceOf(() => sym.noSuchProp(), TypeError); + assertThrowsInstanceOf(() => sym[noSuchPropName](), TypeError); +} + diff --git a/test/staging/sm/Symbol/comparisons.js b/test/staging/sm/Symbol/comparisons.js new file mode 100644 index 0000000000..f0073a117e --- /dev/null +++ b/test/staging/sm/Symbol/comparisons.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var symbols = [ + Symbol(), + Symbol("0"), + Symbol.for("snowman"), + Symbol.iterator +]; + +var values = [ + undefined, null, 0, 3.14, -0, NaN, "", "alphabet", Symbol("0"), + {}, [] +]; + +for (var comparator of ["==", "!=", "===", "!=="]) { + var f = Function("a, b", "return a " + comparator + " b;"); + var expected = (comparator[0] == '!'); + for (var a of symbols) { + for (var b of values) + assert.sameValue(f(a, b), expected); + } +} + +for (var comparator of ["<", "<=", ">", ">="]) { + var f = Function("a, b", "return a " + comparator + " b;"); + for (var a of symbols) { + for (var b of values) + assertThrowsInstanceOf(() => f(a, b), TypeError); + } +} + diff --git a/test/staging/sm/Symbol/constructor.js b/test/staging/sm/Symbol/constructor.js new file mode 100644 index 0000000000..1a3c152c35 --- /dev/null +++ b/test/staging/sm/Symbol/constructor.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Symbol(symbol) throws a TypeError. +var sym = Symbol(); +assertThrowsInstanceOf(() => Symbol(sym), TypeError); + +// Symbol(undefined) is equivalent to Symbol(). +assert.sameValue(Symbol(undefined).toString(), "Symbol()"); + +// Otherwise, Symbol(v) means Symbol(ToString(v)). +assert.sameValue(Symbol(7).toString(), "Symbol(7)"); +assert.sameValue(Symbol(true).toString(), "Symbol(true)"); +assert.sameValue(Symbol(null).toString(), "Symbol(null)"); +assert.sameValue(Symbol([1, 2]).toString(), "Symbol(1,2)"); +var symobj = Object(sym); +assertThrowsInstanceOf(() => Symbol(symobj), TypeError); + +var hits = 0; +var obj = { + toString: function () { + hits++; + return "ponies"; + } +}; +assert.sameValue(Symbol(obj).toString(), "Symbol(ponies)"); +assert.sameValue(hits, 1); + +assert.sameValue(Object.getPrototypeOf(Symbol.prototype), Object.prototype); + +// Symbol.prototype is not itself a Symbol object. +assertThrowsInstanceOf(() => Symbol.prototype.valueOf(), TypeError); + diff --git a/test/staging/sm/Symbol/conversions.js b/test/staging/sm/Symbol/conversions.js new file mode 100644 index 0000000000..7cc4bb6753 --- /dev/null +++ b/test/staging/sm/Symbol/conversions.js @@ -0,0 +1,98 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Section numbers cite ES6 rev 24 (2014 April 27). + +var symbols = [ + Symbol(), + Symbol("one"), + Symbol.for("two"), + Symbol.iterator +]; + +function testSymbolConversions(sym) { + // 7.1.2 ToBoolean + assert.sameValue(Boolean(sym), true); + assert.sameValue(!sym, false); + assert.sameValue(sym || 13, sym); + assert.sameValue(sym && 13, 13); + + // 7.1.3 ToNumber + assertThrowsInstanceOf(() => +sym, TypeError); + assertThrowsInstanceOf(() => sym | 0, TypeError); + + // 7.1.12 ToString + assertThrowsInstanceOf(() => "" + sym, TypeError); + assertThrowsInstanceOf(() => sym + "", TypeError); + assertThrowsInstanceOf(() => "" + [1, 2, sym], TypeError); + assertThrowsInstanceOf(() => ["simple", "thimble", sym].join(), TypeError); + + // 21.1.1.1 String() + assert.sameValue(String(sym), sym.toString()); + + // 21.1.1.2 new String() + assertThrowsInstanceOf(() => new String(sym), TypeError); + + // 7.1.13 ToObject + var obj = Object(sym); + assert.sameValue(typeof obj, "object"); + assert.sameValue(Object.prototype.toString.call(obj), "[object Symbol]"); + assert.sameValue(Object.getPrototypeOf(obj), Symbol.prototype); + assert.sameValue(Object.getOwnPropertyNames(obj).length, 0); + assert.sameValue(Object(sym) === Object(sym), false); // new object each time + var f = function () { return this; }; + assert.sameValue(f.call(sym) === f.call(sym), false); // new object each time +} + + +for (var sym of symbols) { + testSymbolConversions(sym); + + // 7.1.1 ToPrimitive + var symobj = Object(sym); + assertThrowsInstanceOf(() => Number(symobj), TypeError); + assertThrowsInstanceOf(() => String(symobj), TypeError); + assertThrowsInstanceOf(() => symobj < 0, TypeError); + assertThrowsInstanceOf(() => 0 < symobj, TypeError); + assertThrowsInstanceOf(() => symobj + 1, TypeError); + assertThrowsInstanceOf(() => "" + symobj, TypeError); + assert.sameValue(sym == symobj, true); + assert.sameValue(sym === symobj, false); + assert.sameValue(symobj == 0, false); + assert.sameValue(0 != symobj, true); + + // 7.1.12 ToString + assertThrowsInstanceOf(() => String(Object(sym)), TypeError); +} + +// Deleting Symbol.prototype[@@toPrimitive] does not change the behavior of +// conversions from a symbol to other types. +delete Symbol.prototype[Symbol.toPrimitive]; +assert.sameValue(Symbol.toPrimitive in Symbol.prototype, false); +testSymbolConversions(symbols[0]); + +// It does change the behavior of ToPrimitive on Symbol objects, though. +// It causes the default algorithm (OrdinaryToPrimitive) to be used. +var VALUEOF_CALLED = 117.25; +Symbol.prototype.valueOf = function () { return VALUEOF_CALLED; }; +Symbol.prototype.toString = function () { return "toString called"; }; +for (var sym of symbols) { + var symobj = Object(sym); + assert.sameValue(Number(symobj), VALUEOF_CALLED); + assert.sameValue(String(symobj), "toString called"); + assert.sameValue(symobj < 0, VALUEOF_CALLED < 0); + assert.sameValue(0 < symobj, 0 < VALUEOF_CALLED); + assert.sameValue(symobj + 1, VALUEOF_CALLED + 1); + assert.sameValue("" + symobj, "" + VALUEOF_CALLED); + assert.sameValue(symobj == 0, false); + assert.sameValue(0 != symobj, true); +} + diff --git a/test/staging/sm/Symbol/enumeration-order.js b/test/staging/sm/Symbol/enumeration-order.js new file mode 100644 index 0000000000..2c477c4a56 --- /dev/null +++ b/test/staging/sm/Symbol/enumeration-order.js @@ -0,0 +1,48 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Symbols follow all other property keys in the result list. +var log; +function LoggingProxy() { + return new Proxy({}, { + defineProperty: (t, key, desc) => { + log.push(key); + return true; + } + }); +} + +var keys = [ + "before", + Symbol(), + "during", + Symbol.for("during"), + Symbol.iterator, + "after" +]; +var descs = {}; +for (var k of keys) + descs[k] = {configurable: true, value: 0}; + +function test(descsObj) { + log = []; + Object.defineProperties(LoggingProxy(), descs); + assert.sameValue(log.length, keys.length); + assert.deepEqual(log.map(k => typeof k), ["string", "string", "string", "symbol", "symbol", "symbol"]); + for (var key of keys) + assert.sameValue(log.indexOf(key) !== -1, true); +} + +test(descs); +test(new Proxy(descs, {})); + diff --git a/test/staging/sm/Symbol/enumeration.js b/test/staging/sm/Symbol/enumeration.js new file mode 100644 index 0000000000..82b83dfa0f --- /dev/null +++ b/test/staging/sm/Symbol/enumeration.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// for-in loops skip properties with symbol keys, even enumerable properties. +var obj = {}; +obj[Symbol.for("moon")] = "sun"; +obj[Symbol("asleep")] = "awake"; +obj[Symbol.iterator] = "List"; +for (var x in obj) + throw "FAIL: " + String(x); + +// This includes inherited properties. +var obj2 = Object.create(obj); +for (var x in obj2) + throw "FAIL: " + String(x); + +// The same goes for proxies. +var p = new Proxy(obj, {}); +for (var x in p) + throw "FAIL: " + String(x); +var p2 = new Proxy(obj2, {}); +for (var x in p2) + throw "FAIL: " + String(x); + +// Object.keys() and .getOwnPropertyNames() also skip symbols. +assert.sameValue(Object.keys(obj).length, 0); +assert.sameValue(Object.keys(p).length, 0); +assert.sameValue(Object.keys(obj2).length, 0); +assert.sameValue(Object.keys(p2).length, 0); +assert.sameValue(Object.getOwnPropertyNames(obj).length, 0); +assert.sameValue(Object.getOwnPropertyNames(p).length, 0); +assert.sameValue(Object.getOwnPropertyNames(obj2).length, 0); +assert.sameValue(Object.getOwnPropertyNames(p2).length, 0); + +// Test interaction of Object.keys(), proxies, and symbol property keys. +var log = []; +var h = { + ownKeys: (t) => { + log.push("ownKeys"); + return ["a", "0", Symbol.for("moon"), Symbol("asleep"), Symbol.iterator]; + }, + getOwnPropertyDescriptor: (t, key) => { + log.push("gopd", key); + return {configurable: true, enumerable: true, value: 0, writable: true}; + } +}; +p = new Proxy({}, h); +assert.deepEqual(Object.keys(p), ["a", "0"]); +assert.deepEqual(log, ["ownKeys", "gopd", "a", "gopd", "0"]); + diff --git a/test/staging/sm/Symbol/equality.js b/test/staging/sm/Symbol/equality.js new file mode 100644 index 0000000000..1831d43beb --- /dev/null +++ b/test/staging/sm/Symbol/equality.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Symbol.for returns the same symbol whenever the same argument is passed. +assert.sameValue(Symbol.for("q") === Symbol.for("q"), true); + +// Several distinct Symbol values. +var symbols = [ + Symbol(), + Symbol("Symbol.iterator"), + Symbol("Symbol.iterator"), // distinct new symbol with the same description + Symbol.for("Symbol.iterator"), + Symbol.iterator +]; + +// Distinct symbols are never equal to each other, even if they have the same +// description. +for (var i = 0; i < symbols.length; i++) { + for (var j = i; j < symbols.length; j++) { + var expected = (i === j); + assert.sameValue(symbols[i] == symbols[j], expected); + assert.sameValue(symbols[i] != symbols[j], !expected); + assert.sameValue(symbols[i] === symbols[j], expected); + assert.sameValue(symbols[i] !== symbols[j], !expected); + assert.sameValue(Object.is(symbols[i], symbols[j]), expected); + } +} + diff --git a/test/staging/sm/Symbol/errors.js b/test/staging/sm/Symbol/errors.js new file mode 100644 index 0000000000..e5a786686a --- /dev/null +++ b/test/staging/sm/Symbol/errors.js @@ -0,0 +1,25 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Section numbers cite ES6 rev 24 (2014 April 27). + +var sym = Symbol(); + +// 7.2.2 IsCallable +assertThrowsInstanceOf(() => sym(), TypeError); +assertThrowsInstanceOf(() => Function.prototype.call.call(sym), TypeError); + +// 7.2.5 IsConstructor +assertThrowsInstanceOf(() => new sym(), TypeError); +assertThrowsInstanceOf(() => new Symbol(), TypeError); + diff --git a/test/staging/sm/Symbol/for-in-order.js b/test/staging/sm/Symbol/for-in-order.js new file mode 100644 index 0000000000..6f7274f703 --- /dev/null +++ b/test/staging/sm/Symbol/for-in-order.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// ES6 does not specify enumeration order, but implementations mostly retain +// property insertion order -- and must, for web compatibility. This test checks +// that symbol-keyed properties do not interfere with that order. + +var obj = {}; +obj[Symbol("moon")] = 0; +obj.x = 1; +obj[Symbol.for("y")] = 2 +obj.y = 3; +obj[Symbol.iterator] = function* () { yield 4; }; +obj.z = 5; +Object.prototype[Symbol.for("comet")] = 6; + +var keys = []; +for (var k in obj) + keys.push(k); +assert.deepEqual(keys, ["x", "y", "z"]); +assert.deepEqual(Object.keys(obj), ["x", "y", "z"]); + +// Test with more properties. +for (var i = 0; i < 1000; i++) + obj[Symbol(i)] = i; +obj.w = 1000; +keys = [] +for (var k in obj) + keys.push(k); +assert.deepEqual(keys, ["x", "y", "z", "w"]); + diff --git a/test/staging/sm/Symbol/for.js b/test/staging/sm/Symbol/for.js new file mode 100644 index 0000000000..2718a1cf48 --- /dev/null +++ b/test/staging/sm/Symbol/for.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Symbol.for called twice with the same argument returns the same symbol. +assert.sameValue(Symbol.for("ponies"), Symbol.for("ponies")); + +// Called twice with equal strings: still the same result. +var one = Array(64+1).join("x"); +var two = Array(8+1).join(Array(8+1).join("x")); +assert.sameValue(Symbol.for(one), Symbol.for(two)); + +// Symbols created by calling Symbol() are not in the symbol registry. +var sym = Symbol("123"); +assert.sameValue(Symbol.for("123") !== sym, true); + +// Empty string is fine. +assert.sameValue(typeof Symbol.for(""), "symbol"); + +// Primitive arguments. +assert.sameValue(Symbol.for(3), Symbol.for("3")); +assert.sameValue(Symbol.for(null), Symbol.for("null")); +assert.sameValue(Symbol.for(undefined), Symbol.for("undefined")); +assert.sameValue(Symbol.for(), Symbol.for("undefined")); + +// Symbol.for ignores the 'this' value. +var foo = Symbol.for("foo") +assert.sameValue(Symbol.for.call(String, "foo"), foo); +assert.sameValue(Symbol.for.call(3.14, "foo"), foo); + diff --git a/test/staging/sm/Symbol/json-stringify-keys.js b/test/staging/sm/Symbol/json-stringify-keys.js new file mode 100644 index 0000000000..aa9b08e666 --- /dev/null +++ b/test/staging/sm/Symbol/json-stringify-keys.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// JSON.stringify ignores symbol-keyed properties, even enumerable ones. + +var obj = {a: 1}; +obj[Symbol.for("ponies")] = {toJSON: function () { throw "fit"; }}; +obj[Symbol.iterator] = {toJSON: function () { throw "fit"; }}; +assert.sameValue(JSON.stringify(obj), '{"a":1}'); + +var replacer = function (k, v) { + if (typeof k === "symbol") + throw "fit"; + return v; +}; +assert.sameValue(JSON.stringify(obj, replacer), '{"a":1}'); + diff --git a/test/staging/sm/Symbol/json-stringify-values.js b/test/staging/sm/Symbol/json-stringify-values.js new file mode 100644 index 0000000000..045d951a3c --- /dev/null +++ b/test/staging/sm/Symbol/json-stringify-values.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// To JSON.stringify, symbols are the same as undefined. + +var symbols = [ + Symbol(), + Symbol.for("ponies"), + Symbol.iterator +]; + +for (var sym of symbols) { + assert.sameValue(JSON.stringify(sym), undefined); + assert.sameValue(JSON.stringify([sym]), "[null]"); + + // JSON.stringify skips symbol-valued properties! + assert.sameValue(JSON.stringify({x: sym}), '{}'); + + // However such properties are passed to the replacerFunction if any. + var replacer = function (key, val) { + assert.sameValue(typeof this, "object"); + if (typeof val === "symbol") { + assert.sameValue(val, sym); + return "ding"; + } + return val; + }; + assert.sameValue(JSON.stringify(sym, replacer), '"ding"'); + assert.sameValue(JSON.stringify({x: sym}, replacer), '{"x":"ding"}'); +} + diff --git a/test/staging/sm/Symbol/keyFor.js b/test/staging/sm/Symbol/keyFor.js new file mode 100644 index 0000000000..4ec9a3159c --- /dev/null +++ b/test/staging/sm/Symbol/keyFor.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Symbol.keyFor(Symbol.for("moon")), "moon"); +assert.sameValue(Symbol.keyFor(Symbol.for("")), ""); +assert.sameValue(Symbol.keyFor(Symbol("moon")), undefined); +assert.sameValue(Symbol.keyFor(Symbol.iterator), undefined); + +assertThrowsInstanceOf(() => Symbol.keyFor(), TypeError); +assertThrowsInstanceOf(() => Symbol.keyFor(Object(Symbol("moon"))), TypeError); + +assert.sameValue(Symbol.keyFor.length, 1); + diff --git a/test/staging/sm/Symbol/property-accessor.js b/test/staging/sm/Symbol/property-accessor.js new file mode 100644 index 0000000000..c05b1bcdb6 --- /dev/null +++ b/test/staging/sm/Symbol/property-accessor.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var obj = {}; +var sym = Symbol(); + +var gets = 0; +var sets = []; +Object.defineProperty(obj, sym, { + get: function () { return ++gets; }, + set: function (v) { sets.push(v); } +}); + +// getter +for (var i = 1; i < 9; i++) + assert.sameValue(obj[sym], i); + +// setter +var expected = []; +for (var i = 0; i < 9; i++) { + assert.sameValue(obj[sym] = i, i); + expected.push(i); +} +assert.deepEqual(sets, expected); + +// increment operator +gets = 0; +sets = []; +assert.sameValue(obj[sym]++, 1); +assert.deepEqual(sets, [2]); + +// assignment +gets = 0; +sets = []; +assert.sameValue(obj[sym] *= 12, 12); +assert.deepEqual(sets, [12]); + diff --git a/test/staging/sm/Symbol/property-basics.js b/test/staging/sm/Symbol/property-basics.js new file mode 100644 index 0000000000..8531678516 --- /dev/null +++ b/test/staging/sm/Symbol/property-basics.js @@ -0,0 +1,52 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var symbols = [ + Symbol(), + Symbol("one"), + Symbol.for("two"), + Symbol.iterator, + Object(Symbol()) +]; + +for (var sym of symbols) { + var obj = {}; + + // access a nonexistent property + assert.sameValue(sym in obj, false); + assert.sameValue(obj.hasOwnProperty(sym), false); + assert.sameValue(obj[sym], undefined); + assert.sameValue(typeof obj[sym], "undefined"); + assert.sameValue(Object.getOwnPropertyDescriptor(obj, sym), undefined); + + // assign, then try accessing again + obj[sym] = "ok"; + assert.sameValue(sym in obj, true); + assert.sameValue(obj.hasOwnProperty(sym), true); + assert.sameValue(obj[sym], "ok"); + assert.deepEqual(Object.getOwnPropertyDescriptor(obj, sym), { + value: "ok", + writable: true, + enumerable: true, + configurable: true + }); + + // assign again, observe value is overwritten + obj[sym] = 12; + assert.sameValue(obj[sym], 12); + + // increment + assert.sameValue(obj[sym]++, 12); + assert.sameValue(obj[sym], 13); +} + diff --git a/test/staging/sm/Symbol/property-inheritance.js b/test/staging/sm/Symbol/property-inheritance.js new file mode 100644 index 0000000000..e1a87c1db6 --- /dev/null +++ b/test/staging/sm/Symbol/property-inheritance.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var sym = Symbol.for("hello"); +function F() {} +var f = new F(); + +// inherited data property +F.prototype[sym] = "world"; +assert.sameValue(sym in f, true); +assert.sameValue(f.hasOwnProperty(sym), false); +assert.sameValue(f[sym], "world"); + +// shadowing assignment +f[sym] = "kitty"; +assert.sameValue(f[sym], "kitty"); +assert.sameValue(F.prototype[sym], "world"); + +// deletion, revealing previously shadowed property +assert.sameValue(delete f[sym], true); +assert.sameValue(f.hasOwnProperty(sym), false); +assert.sameValue(f[sym], "world"); + +// inherited accessor property +var value = undefined; +Object.defineProperty(F.prototype, sym, { + configurable: true, + get: function () { return 23; }, + set: function (v) { value = v; } +}); +assert.sameValue(sym in f, true); +assert.sameValue(f.hasOwnProperty(sym), false); +assert.sameValue(f[sym], 23); +f[sym] = "gravity"; +assert.sameValue(value, "gravity"); + +// inherited accessor property with no setter +Object.defineProperty(F.prototype, sym, { + set: undefined +}); +assertThrowsInstanceOf(function () { "use strict"; f[sym] = 0; }, TypeError); + +// deeply inherited accessor property +var g = Object.create(f); +for (var i = 0; i < 100; i++) + g = Object.create(g); +assert.sameValue(g[sym], 23); + diff --git a/test/staging/sm/Symbol/property-nonwritable.js b/test/staging/sm/Symbol/property-nonwritable.js new file mode 100644 index 0000000000..835ce6140d --- /dev/null +++ b/test/staging/sm/Symbol/property-nonwritable.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var sym = Symbol.for("moon"); +function checkNotWritable(obj) { + // In sloppy mode, assigning to a nonwritable property silently fails. + obj[sym] = "portals"; + assert.sameValue(obj[sym], "cheese"); + + // In strict mode code, it throws. + assertThrowsInstanceOf(function () { "use strict"; obj[sym] = "robots"; }, TypeError); + assert.sameValue(obj[sym], "cheese"); +} + +var x = {}; +Object.defineProperty(x, sym, { + configurable: true, + enumerable: true, + value: "cheese", + writable: false +}); + +checkNotWritable(x); + +// Assignment can't shadow inherited nonwritable properties either. +var y = Object.create(x); +checkNotWritable(y); +checkNotWritable(Object.create(y)); + diff --git a/test/staging/sm/Symbol/property-reflection.js b/test/staging/sm/Symbol/property-reflection.js new file mode 100644 index 0000000000..ee0477a94d --- /dev/null +++ b/test/staging/sm/Symbol/property-reflection.js @@ -0,0 +1,144 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Basic tests for standard Object APIs interacting with symbols. + +// Object.defineProperty +function F() {} +var f = new F; +Object.defineProperty(f, Symbol.for("name"), { + configurable: true, + value: "eff" +}); +assert.sameValue("name" in f, false); +assert.sameValue("Symbol(name)" in f, false); +assert.sameValue(Symbol.for("name") in f, true); +assert.sameValue(f[Symbol.for("name")], "eff"); + +// Object.defineProperties +function D() {} +var descs = new D; +var s1 = Symbol("s1"); +var hits = 0; +descs[s1] = { + get: () => hits++, + set: undefined, + enumerable: true, + configurable: true +}; +var s2 = Symbol("s2"); +descs[s2] = { + value: {}, + writable: true, + enumerable: false, + configurable: true +}; +var s3 = Symbol("s3"); +D.prototype[s3] = {value: "FAIL"}; +assert.sameValue(Object.defineProperties(f, descs), f); +assert.sameValue(s1 in f, true); +assert.sameValue(f[s1], 0); +assert.sameValue(hits, 1); +assert.sameValue(s2 in f, true); +assert.sameValue(f[s2], descs[s2].value); +assert.sameValue(s3 in f, false); + +// Object.create +var n = Object.create({}, descs); +assert.sameValue(s1 in n, true); +assert.sameValue(n[s1], 1); +assert.sameValue(hits, 2); +assert.sameValue(s2 in n, true); +assert.sameValue(n[s2], descs[s2].value); +assert.sameValue(s3 in n, false); + +// Object.getOwnPropertyDescriptor +var desc = Object.getOwnPropertyDescriptor(n, s1); +assert.deepEqual(desc, descs[s1]); +assert.sameValue(desc.get, descs[s1].get); +desc = Object.getOwnPropertyDescriptor(n, s2); +assert.deepEqual(desc, descs[s2]); +assert.sameValue(desc.value, descs[s2].value); + +// Object.prototype.hasOwnProperty +assert.sameValue(descs.hasOwnProperty(s1), true); +assert.sameValue(descs.hasOwnProperty(s2), true); +assert.sameValue(descs.hasOwnProperty(s3), false); +assert.sameValue([].hasOwnProperty(Symbol.iterator), false); +assert.sameValue(Array.prototype.hasOwnProperty(Symbol.iterator), true); + +// Object.prototype.propertyIsEnumerable +assert.sameValue(n.propertyIsEnumerable(s1), true); +assert.sameValue(n.propertyIsEnumerable(s2), false); +assert.sameValue(n.propertyIsEnumerable(s3), false); // no such property +assert.sameValue(D.prototype.propertyIsEnumerable(s3), true); +assert.sameValue(descs.propertyIsEnumerable(s3), false); // inherited properties are not considered + +// Object.preventExtensions +var obj = {}; +obj[s1] = 1; +assert.sameValue(Object.preventExtensions(obj), obj); +assertThrowsInstanceOf(function () { "use strict"; obj[s2] = 2; }, TypeError); +obj[s2] = 2; // still no effect +assert.sameValue(s2 in obj, false); + +// Object.isSealed, Object.isFrozen +assert.sameValue(Object.isSealed(obj), false); +assert.sameValue(Object.isFrozen(obj), false); +assert.sameValue(delete obj[s1], true); +assert.sameValue(Object.isSealed(obj), true); +assert.sameValue(Object.isFrozen(obj), true); + +obj = {}; +obj[s1] = 1; +Object.preventExtensions(obj); +Object.defineProperty(obj, s1, {configurable: false}); // still writable +assert.sameValue(Object.isSealed(obj), true); +assert.sameValue(Object.isFrozen(obj), false); +obj[s1] = 2; +assert.sameValue(obj[s1], 2); +Object.defineProperty(obj, s1, {writable: false}); +assert.sameValue(Object.isFrozen(obj), true); + +// Object.seal, Object.freeze +var obj = {}; +obj[s1] = 1; +Object.seal(obj); +desc = Object.getOwnPropertyDescriptor(obj, s1); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.writable, true); +Object.freeze(obj); +assert.sameValue(Object.getOwnPropertyDescriptor(obj, s1).writable, false); + +// Object.setPrototypeOf purges caches for symbol-keyed properties. +var proto = {}; +proto[s1] = 1; +Object.defineProperty(proto, s2, { + get: () => 2, + set: v => undefined +}); +var obj = Object.create(proto); +var last1, last2; +var N = 9; +for (var i = 0; i < N; i++) { + last1 = obj[s1]; + last2 = obj[s2]; + obj[s2] = "marker"; + if (i === N - 2) + Object.setPrototypeOf(obj, {}); +} +assert.sameValue(last1, undefined); +assert.sameValue(last2, undefined); +assert.sameValue(obj.hasOwnProperty(s2), true); +assert.sameValue(obj[s2], "marker"); + diff --git a/test/staging/sm/Symbol/realms.js b/test/staging/sm/Symbol/realms.js new file mode 100644 index 0000000000..ae9743739c --- /dev/null +++ b/test/staging/sm/Symbol/realms.js @@ -0,0 +1,44 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Symbols can be shared across realms. + +if (typeof Reflect !== "undefined" && typeof Reflect.Realm === "function") { + throw new Error("Congratulations on implementing Reflect.Realm! " + + "Please update this test to use it."); +} +if (typeof createNewGlobal === "function") { + var g = createNewGlobal(); + var gj = g.eval("jones = Symbol('jones')"); + assert.sameValue(typeof gj, "symbol"); + assert.sameValue(g.jones, g.jones); + assert.sameValue(gj, g.jones); + assert.sameValue(gj !== Symbol("jones"), true); + + // A symbol can be round-tripped to another realm and back; + // the result is the original symbol. + var smith = Symbol("smith"); + g.smith = smith; // put smith into the realm + assert.sameValue(g.smith, smith); // pull it back out + + // Spot-check that non-generic methods can be applied to symbols and Symbol + // objects from other realms. + assert.sameValue(Symbol.prototype.toString.call(gj), "Symbol(jones)"); + assert.sameValue(Symbol.prototype.toString.call(g.eval("Object(Symbol('brown'))")), + "Symbol(brown)"); + + // Symbol.for functions share a symbol registry across all realms. + assert.sameValue(g.Symbol.for("ponies"), Symbol.for("ponies")); + assert.sameValue(g.eval("Symbol.for('rainbows')"), Symbol.for("rainbows")); +} + diff --git a/test/staging/sm/Symbol/species.js b/test/staging/sm/Symbol/species.js new file mode 100644 index 0000000000..2647ad63ac --- /dev/null +++ b/test/staging/sm/Symbol/species.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1131043; +var summary = "Implement @@species getter for builtin types"; + +print(BUGNUMBER + ": " + summary); + +var TypedArray = Object.getPrototypeOf(Int8Array); + +for (var C of [Array, Map, Set, RegExp, + Int8Array, Uint8Array, Uint8ClampedArray, + Int16Array, Uint16Array, Int32Array, Uint32Array, + Float32Array, Float64Array, + ArrayBuffer]) { + assert.sameValue(C[Symbol.species], C); +} + +for (C of [Array, Map, Set, RegExp, + TypedArray, + ArrayBuffer]) { + var desc = Object.getOwnPropertyDescriptor(C, Symbol.species); + assert.deepEqual(Object.keys(desc).sort(), ["configurable", "enumerable", "get", "set"]); + assert.sameValue(desc.set, undefined); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + assert.sameValue(desc.get.apply(null), null); + assert.sameValue(desc.get.apply(undefined), undefined); + assert.sameValue(desc.get.apply(42), 42); +} + diff --git a/test/staging/sm/Symbol/surfaces.js b/test/staging/sm/Symbol/surfaces.js new file mode 100644 index 0000000000..dd1c486339 --- /dev/null +++ b/test/staging/sm/Symbol/surfaces.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test superficial properties of the Symbol constructor and prototype. + +var desc = Object.getOwnPropertyDescriptor(this, "Symbol"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, true); +assert.sameValue(typeof Symbol, "function"); +assert.sameValue(Symbol.length, 0); + +desc = Object.getOwnPropertyDescriptor(Symbol, "prototype"); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, false); + +assert.sameValue(Symbol.prototype.constructor, Symbol); +desc = Object.getOwnPropertyDescriptor(Symbol.prototype, "constructor"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, true); + +desc = Object.getOwnPropertyDescriptor(Symbol, "iterator"); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, false); + +assert.sameValue(Symbol.for.length, 1); +assert.sameValue(Symbol.prototype.toString.length, 0); +assert.sameValue(Symbol.prototype.valueOf.length, 0); + diff --git a/test/staging/sm/Symbol/symbol-object-not-unboxed-for-value-to-id.js b/test/staging/sm/Symbol/symbol-object-not-unboxed-for-value-to-id.js new file mode 100644 index 0000000000..0d54770a05 --- /dev/null +++ b/test/staging/sm/Symbol/symbol-object-not-unboxed-for-value-to-id.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Create a symbol and a wrapper for it. +var s = Symbol(); +var so = Object(s); + +// Create a symbol-valued property key using |s|. +var o = {[s]: 0}; + +// The default Symbol.prototype[@@toPrimitive] will unbox the symbol object as needed. +assert.sameValue(o.propertyIsEnumerable(so), true); +assert.sameValue(o.hasOwnProperty(so), true); + +// After redefining Symbol.prototype[@@toPrimitive], any calls to the ToPropertyKey +// abstract operation will no longer unbox the symbol object. +Object.defineProperty(Symbol.prototype, Symbol.toPrimitive, { + value: function() { + return "foo"; + } +}); + +// |o| doesn't have a string-valued property named "foo". +assert.sameValue(o.propertyIsEnumerable(so), false); +assert.sameValue(o.hasOwnProperty(so), false); + +o.foo = 123; + +// After |o.foo| was added, both calls should return true again. +assert.sameValue(o.propertyIsEnumerable(so), true); +assert.sameValue(o.hasOwnProperty(so), true); + diff --git a/test/staging/sm/Symbol/toPrimitive-undefined-or-null.js b/test/staging/sm/Symbol/toPrimitive-undefined-or-null.js new file mode 100644 index 0000000000..c458338a5b --- /dev/null +++ b/test/staging/sm/Symbol/toPrimitive-undefined-or-null.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (let method of [undefined, null]) { + let obj = { + [Symbol.toPrimitive]: method, + toString: () => "pass", + }; + assert.sameValue("" + obj, "pass"); +} + +for (let method of [true, false, 0, 123, "", "abc", Symbol(), {}]) { + let obj = { + [Symbol.toPrimitive]: method, + toString: () => "pass", + }; + assertThrowsInstanceOf(() => "" + obj, TypeError); +} + diff --git a/test/staging/sm/Symbol/toPrimitive.js b/test/staging/sm/Symbol/toPrimitive.js new file mode 100644 index 0000000000..c005043eca --- /dev/null +++ b/test/staging/sm/Symbol/toPrimitive.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// ES6 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) + +// This method gets the primitive symbol from a Symbol wrapper object. +var sym = Symbol.for("truth") +var obj = Object(sym); +assert.sameValue(obj[Symbol.toPrimitive]("default"), sym); + +// The hint argument is ignored. +assert.sameValue(obj[Symbol.toPrimitive]("number"), sym); +assert.sameValue(obj[Symbol.toPrimitive]("string"), sym); +assert.sameValue(obj[Symbol.toPrimitive](), sym); +assert.sameValue(obj[Symbol.toPrimitive](Math.atan2), sym); + +// The this value can also be a primitive symbol. +assert.sameValue(sym[Symbol.toPrimitive](), sym); + +// Or a wrapper to a Symbol object in another compartment. +var obj2 = createNewGlobal().Object(sym); +assert.sameValue(obj2[Symbol.toPrimitive]("default"), sym); + +// Otherwise a TypeError is thrown. +var symbolToPrimitive = Symbol.prototype[Symbol.toPrimitive]; +var nonSymbols = [ + undefined, null, true, 13, NaN, "justice", {}, [sym], + symbolToPrimitive, + new Proxy(obj, {}) +]; +for (var value of nonSymbols) { + assertThrowsInstanceOf(() => symbolToPrimitive.call(value, "string"), TypeError); +} + +// Surface features: +assert.sameValue(symbolToPrimitive.name, "[Symbol.toPrimitive]"); +var desc = Object.getOwnPropertyDescriptor(Symbol.prototype, Symbol.toPrimitive); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.writable, false); + diff --git a/test/staging/sm/Symbol/toString.js b/test/staging/sm/Symbol/toString.js new file mode 100644 index 0000000000..2ca6539855 --- /dev/null +++ b/test/staging/sm/Symbol/toString.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var cases = [ + {sym: Symbol(), str: "Symbol()"}, + {sym: Symbol("ok"), str: "Symbol(ok)"}, + {sym: Symbol("\0"), str: "Symbol(\0)"}, + {sym: Symbol.iterator, str: "Symbol(Symbol.iterator)"}, + {sym: Symbol.for("dummies"), str: "Symbol(dummies)"} +]; + +// Symbol.prototype.toString works on both primitive symbols and Symbol +// objects. +for (var test of cases) { + assert.sameValue(test.sym.toString(), test.str); + assert.sameValue(Object(test.sym).toString(), test.str); +} + +// Any other value throws. +var nonsymbols = [ + undefined, null, "not-ok", new String("still-not-ok"), {}, [] +]; +for (var nonsym of nonsymbols) + assertThrowsInstanceOf(() => Symbol.prototype.toString.call(nonsym), TypeError); + diff --git a/test/staging/sm/Symbol/toStringTag.js b/test/staging/sm/Symbol/toStringTag.js new file mode 100644 index 0000000000..4b8c0ab280 --- /dev/null +++ b/test/staging/sm/Symbol/toStringTag.js @@ -0,0 +1,164 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// ES6 19.1.3.6 Object.prototype.toString ( ) +function testToString() { + var tests = [ + [undefined, "[object Undefined]"], + [null, "[object Null]"], + [[], "[object Array]"], + [new String("abc"), "[object String]"], + [(function () {return arguments;})(), "[object Arguments]"], + [(function () {"use strict"; return arguments;})(), "[object Arguments]"], + [function() {}, "[object Function]"], + [new Error("abc"), "[object Error]"], + [true, "[object Boolean]"], + [5, "[object Number]"], + [new Date(), "[object Date]"], + [/regexp/, "[object RegExp]"], + [{[Symbol.toStringTag]: "abc"}, "[object abc]"], + [Object.create(JSON), "[object JSON]"], + [Object.create(new Number), "[object Object]"], + [Object.create(new Number, {[Symbol.toStringTag]: {value: "abc"}}), "[object abc]"], + [(function() { var x = new Number(); x[Symbol.toStringTag] = "abc"; return x; })(), "[object abc]"], + [[], "[object Array]"] + ]; + + // Testing if the values are obtained the right way. + for (let [value, expected] of tests) { + let result = Object.prototype.toString.call(value); + assert.sameValue(result, expected); + } +} +testToString(); + +function testProxy() { + var count = 0; + var metaHandler = new Proxy({}, { + get(target, property, receiver) { + assert.sameValue(property, "get"); + + return function(target, property, receiver) { + assert.sameValue(property, Symbol.toStringTag); + count++; + return undefined; + } + } + }); + + assert.sameValue(Object.prototype.toString.call(new Proxy({}, metaHandler)), "[object Object]") + assert.sameValue(Object.prototype.toString.call(new Proxy(new Date, metaHandler)), "[object Object]") + assert.sameValue(Object.prototype.toString.call(new Proxy([], metaHandler)), "[object Array]") + assert.sameValue(Object.prototype.toString.call(new Proxy(function() {}, metaHandler)), "[object Function]") + var {proxy, revoke} = Proxy.revocable({}, metaHandler); + revoke(); + assertThrowsInstanceOf(() => Object.prototype.toString.call(proxy), TypeError); + + assert.sameValue(count, 4); +} +testProxy(); + +// Tests the passed objects toStringTag values and ensures it's +// desc is writable: false, enumerable: false, configurable: true +function testDefault(object, expected) { + let desc = Object.getOwnPropertyDescriptor(object, Symbol.toStringTag); + assert.sameValue(desc.value, expected); + assert.sameValue(desc.writable, false); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); +} + +// ES6 19.4.3.5 Symbol.prototype [ @@toStringTag ] +testDefault(Symbol.prototype, "Symbol"); + +// ES6 20.2.1.9 Math [ @@toStringTag ] +testDefault(Math, "Math"); + +// ES6 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ] +testDefault(""[Symbol.iterator]().__proto__, "String Iterator") + +// ES6 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ] +testDefault([][Symbol.iterator]().__proto__, "Array Iterator") + +// ES6 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ] +function testTypedArray() { + let ta = (new Uint8Array(0)).__proto__.__proto__; + let desc = Object.getOwnPropertyDescriptor(ta, Symbol.toStringTag); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + assert.sameValue(desc.set, undefined); + + let get = desc.get; + assert.sameValue(get.name, "get [Symbol.toStringTag]"); + assert.sameValue(get.call(3.14), undefined); + assert.sameValue(get.call({}), undefined); + assert.sameValue(get.call(ta), undefined); + + let types = [ + Int8Array, + Uint8Array, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array + ]; + + for (let type of types) { + let array = new type(0); + assert.sameValue(get.call(array), type.name); + assert.sameValue(Object.prototype.toString.call(array), `[object ${type.name}]`); + } +} +testTypedArray(); + +// ES6 23.1.3.13 Map.prototype [ @@toStringTag ] +testDefault(Map.prototype, "Map"); + +// ES6 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ] +testDefault(new Map()[Symbol.iterator]().__proto__, "Map Iterator") + +// ES6 23.2.3.12 Set.prototype [ @@toStringTag ] +testDefault(Set.prototype, "Set"); + +// ES6 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ] +testDefault(new Set()[Symbol.iterator]().__proto__, "Set Iterator") + +// ES6 23.3.3.6 WeakMap.prototype [ @@toStringTag ] +testDefault(WeakMap.prototype, "WeakMap"); + +// ES6 23.4.3.5 WeakSet.prototype [ @@toStringTag ] +testDefault(WeakSet.prototype, "WeakSet"); + +// ES6 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ] +testDefault(ArrayBuffer.prototype, "ArrayBuffer"); + +// ES6 24.2.4.21 DataView.prototype[ @@toStringTag ] +testDefault(DataView.prototype, "DataView"); + +// ES6 24.3.3 JSON [ @@toStringTag ] +testDefault(JSON, "JSON"); + +// ES6 25.2.3.3 GeneratorFunction.prototype [ @@toStringTag ] +testDefault(function* () {}.constructor.prototype, "GeneratorFunction"); + +// ES6 25.3.1.5 Generator.prototype [ @@toStringTag ] +testDefault(function* () {}().__proto__.__proto__, "Generator"); + +// ES6 25.4.5.4 Promise.prototype [ @@toStringTag ] +testDefault(Promise.prototype, "Promise"); + +// AsyncFunction.prototype [ @@toStringTag ] +testDefault(async function() {}.constructor.prototype, "AsyncFunction"); + diff --git a/test/staging/sm/Symbol/typed-arrays.js b/test/staging/sm/Symbol/typed-arrays.js new file mode 100644 index 0000000000..2d450d255c --- /dev/null +++ b/test/staging/sm/Symbol/typed-arrays.js @@ -0,0 +1,25 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Symbol-to-number type conversions involving typed arrays. + +for (var T of [Uint8Array, Uint8ClampedArray, Int16Array, Float32Array]) { + // Typed array constructors convert symbols using ToNumber(), which throws. + assertThrowsInstanceOf(() => new T([Symbol("a")]), TypeError); + + // Assignment does the same. + var arr = new T([1]); + assertThrowsInstanceOf(() => { arr[0] = Symbol.iterator; }, TypeError); + assert.sameValue(arr[0], 1); +} + diff --git a/test/staging/sm/Symbol/typeof.js b/test/staging/sm/Symbol/typeof.js new file mode 100644 index 0000000000..9016df7c55 --- /dev/null +++ b/test/staging/sm/Symbol/typeof.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(typeof Symbol(), "symbol"); +assert.sameValue(typeof Symbol("ponies"), "symbol"); +assert.sameValue(typeof Symbol.for("ponies"), "symbol"); + +assert.sameValue(typeof Object(Symbol()), "object"); + diff --git a/test/staging/sm/Symbol/valueOf.js b/test/staging/sm/Symbol/valueOf.js new file mode 100644 index 0000000000..c330fa7910 --- /dev/null +++ b/test/staging/sm/Symbol/valueOf.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var symbols = [ + Symbol(), + Symbol("ok"), + Symbol.for("dummies"), + Symbol.iterator +]; + +for (var sym of symbols) { + assert.sameValue(sym.valueOf(), sym); + assert.sameValue(Object(sym).valueOf(), sym); +} + +// Any other value throws. +var nonsymbols = [undefined, null, NaN, {}, Symbol.prototype]; +for (var nonsym of nonsymbols) + assertThrowsInstanceOf(() => Symbol.prototype.valueOf.call(nonsym), TypeError); + diff --git a/test/staging/sm/Symbol/well-known.js b/test/staging/sm/Symbol/well-known.js new file mode 100644 index 0000000000..66fbae10c7 --- /dev/null +++ b/test/staging/sm/Symbol/well-known.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var names = [ + "isConcatSpreadable", + "iterator", + "match", + "replace", + "search", + "species", + "hasInstance", + "split", + "toPrimitive", + "unscopables", + "asyncIterator" +]; + +for (var name of names) { + // Well-known symbols exist. + assert.sameValue(typeof Symbol[name], "symbol"); + + // They are never in the registry. + assert.sameValue(Symbol[name] !== Symbol.for("Symbol." + name), true); + + // They are shared across realms. + if (typeof Realm === 'function') + throw new Error("please update this test to use Realms"); + if (typeof createNewGlobal === 'function') { + var g = createNewGlobal(); + assert.sameValue(Symbol[name], g.Symbol[name]); + } + + // Descriptor is all false. + var desc = Object.getOwnPropertyDescriptor(Symbol, name); + assert.sameValue(typeof desc.value, "symbol"); + assert.sameValue(desc.writable, false); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, false); +} + diff --git a/test/staging/sm/Temporal/Calendar/compare-to-datetimeformat.js b/test/staging/sm/Temporal/Calendar/compare-to-datetimeformat.js new file mode 100644 index 0000000000..010c2aeec1 --- /dev/null +++ b/test/staging/sm/Temporal/Calendar/compare-to-datetimeformat.js @@ -0,0 +1,127 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Test we get consistent results for Temporal and Intl.DateTimeFormat, even +// though the former uses ICU4X, whereas the latter uses ICU4C for calendrical +// computations. + +// Map Hebrew months from English name to their corresponding month number. +const hebrewMonths = { + Tishri: 1, + Heshvan: 2, + Kislev: 3, + Tevet: 4, + Shevat: 5, + "Adar I": 6, + Adar: 6, + "Adar II": 7, + Nisan: [7, 8], + Iyar: [8, 9], + Sivan: [9, 10], + Tamuz: [10, 11], + Av: [11, 12], + Elul: [12, 13], +}; + +function toFields(dtf, date, calendar, timeZone) { + let {epochMilliseconds} = date.withCalendar("iso8601").toZonedDateTime(timeZone); + let parts = dtf.formatToParts(epochMilliseconds); + + let monthPart = parts.find(({type}) => type === "month"); + let dayPart = parts.find(({type}) => type === "day"); + + assert.sameValue(monthPart !== undefined, true); + assert.sameValue(dayPart !== undefined, true); + + let month = parseInt(monthPart.value, 10); + let day = parseInt(dayPart.value, 10); + + // Workaround for . + if (!Number.isInteger(month) && calendar === "hebrew") { + assert.sameValue(Object.hasOwn(hebrewMonths, monthPart.value), true, `month = ${monthPart.value}`); + + let hebrewMonth = hebrewMonths[monthPart.value]; + if (Array.isArray(hebrewMonth)) { + month = hebrewMonth[Number(date.inLeapYear)]; + } else { + month = hebrewMonth; + } + } + + assert.sameValue(Number.isInteger(month), true, `month = ${monthPart.value}`); + assert.sameValue(Number.isInteger(day), true, `day = ${dayPart.value}`); + + return {month, day}; +} + +// All supported calendars have at most 31 days per month. +const maximumDaysPerMonth = 31; + +const timeZone = "UTC"; + +for (let calendar of Intl.supportedValuesOf("calendar")) { + // Lunar calendars. ICU4C and ICU4X appear to use different algorithms. + if (calendar === "chinese") continue; + if (calendar === "dangi") continue; + + // Observational lunar calendars. ICU4C and ICU4X use different algorithms. + if (calendar === "islamic") continue; + if (calendar === "islamic-rgsa") continue; + + // ICU4C returns 29, but ICU4X correctly returns 30. + // + // Temporal.PlainDate.from({year: 2046, month:10, day:30}).withCalendar("hebrew").day + if (calendar === "hebrew") continue; + + // ICU4C returns 29, but ICU4X returns 30. + // + // Temporal.PlainDate.from({year: 2006, month:7, day:25}).withCalendar("islamic-umalqura").day + if (calendar === "islamic-umalqura") continue; + + // ICU4C returns 30, but ICU4X returns 31. + // + // Temporal.PlainDate.from({year: 2025, month:4, day:19}).withCalendar("persian").day + if (calendar === "persian") continue; + + // Calendars "buddhist", "japanese", and "roc" use Julian calendar arithmetic + // before the Gregorian change date October 15, 1582. + // + // https://unicode-org.atlassian.net/jira/software/c/projects/ICU/issues/ICU-22412 + // + // if (calendar === "buddhist") continue; + // if (calendar === "japanese") continue; + // if (calendar === "roc") continue; + + let dtf = new Intl.DateTimeFormat("en", { + calendar, + timeZone, + month: "numeric", + day: "numeric", + }); + + // Test near past and near future. + for (let y = 2050; y >= 1950; --y) { + let isoYear = Temporal.PlainDate.from({year: y, month: 1, day: 1}); + let {year, monthsInYear} = isoYear.withCalendar(calendar); + + for (let month = 1; month <= monthsInYear; ++month) { + let date = Temporal.PlainDate.from({calendar, year, month, day: maximumDaysPerMonth}); + let fields = toFields(dtf, date, calendar, timeZone); + + assert.sameValue(fields.month, date.month, `date = ${date}`); + assert.sameValue(fields.day, date.day, `date = ${date}`); + } + } +} + diff --git a/test/staging/sm/Temporal/PlainDate/from-constrain-hebrew.js b/test/staging/sm/Temporal/PlainDate/from-constrain-hebrew.js new file mode 100644 index 0000000000..35f61ef335 --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/from-constrain-hebrew.js @@ -0,0 +1,191 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +const months = [ + { + name: "Tishrei", + month: [1], + monthCode: "M01", + days: [30], + }, + { + name: "Cheshvan", + month: [2], + monthCode: "M02", + days: [29, 30], // Rosh Hashanah postponement rules + }, + { + name: "Kislev", + month: [3], + monthCode: "M03", + days: [29, 30], // Rosh Hashanah postponement rules + }, + { + name: "Tevet", + month: [4], + monthCode: "M04", + days: [29], + }, + { + name: "Shevat", + month: [5], + monthCode: "M05", + days: [30], + }, + { + name: "Adar I", + month: [6], + monthCode: "M05L", + days: [30], + }, + { + name: "Adar", // Adar II + month: [6, 7], + monthCode: "M06", + days: [29], + }, + { + name: "Nisan", + month: [7, 8], + monthCode: "M07", + days: [30], + }, + { + name: "Iyar", + month: [8, 9], + monthCode: "M08", + days: [29], + }, + { + name: "Sivan", + month: [9, 10], + monthCode: "M09", + days: [30], + }, + { + name: "Tammuz", + month: [10, 11], + monthCode: "M10", + days: [29], + }, + { + name: "Av", + month: [11, 12], + monthCode: "M11", + days: [30], + }, + { + name: "Elul", + month: [12, 13], + monthCode: "M12", + days: [29], + }, +]; + +// Test non-leap years. +for (let {month: [month], monthCode, days} of months) { + // Year 1 isn't a leap year. + const year = 1; + + // Skip over leap months. + if (monthCode.endsWith("L")) { + continue; + } + + let startOfMonth = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + month, + day: 1, + }); + + assert.sameValue(startOfMonth.year, year); + assert.sameValue(startOfMonth.month, month); + assert.sameValue(startOfMonth.monthCode, monthCode); + assert.sameValue(startOfMonth.day, 1); + + let endOfMonth = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + month, + day: days[0], + }); + + assert.sameValue(endOfMonth.year, year); + assert.sameValue(endOfMonth.month, month); + assert.sameValue(endOfMonth.monthCode, monthCode); + assert.sameValue(endOfMonth.day, days[0]); +} + +// Test leap years. +for (let {month: [nonLeapMonth, month = nonLeapMonth], monthCode, days} of months) { + // Year 3 is a leap year. + const year = 3; + + let startOfMonth = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + month, + day: 1, + }); + + assert.sameValue(startOfMonth.year, year); + assert.sameValue(startOfMonth.month, month); + assert.sameValue(startOfMonth.monthCode, monthCode); + assert.sameValue(startOfMonth.day, 1); + + let endOfMonth = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + month, + day: days[0], + }); + + assert.sameValue(endOfMonth.year, year); + assert.sameValue(endOfMonth.month, month); + assert.sameValue(endOfMonth.monthCode, monthCode); + assert.sameValue(endOfMonth.day, days[0]); +} + +// Rosh Hashanah postponement +{ + // Days in Cheshvan and Kislev for years 0..10. + const daysPerMonth = { + Cheshvan: [ + 29, 30, 30, 29, 29, 30, 30, 29, 29, 30, 29, + ], + Kislev: [ + 30, 30, 30, 29, 30, 30, 30, 30, 29, 30, 30, + ], + }; + + for (let year = 0; year < daysPerMonth.Cheshvan.length; ++year) { + let endOfCheshvan = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + monthCode: "M02", + day: 30, + }); + assert.sameValue(endOfCheshvan.day, daysPerMonth.Cheshvan[year]); + + let endOfKislev = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + monthCode: "M03", + day: 30, + }); + assert.sameValue(endOfKislev.day, daysPerMonth.Kislev[year]); + } +} + diff --git a/test/staging/sm/Temporal/PlainDate/from-constrain-japanese.js b/test/staging/sm/Temporal/PlainDate/from-constrain-japanese.js new file mode 100644 index 0000000000..f5ec2fe723 --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/from-constrain-japanese.js @@ -0,0 +1,246 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +const eras = [ + { + name: "meiji", + start: "1868-09-08", + end: "1912-07-29", + }, + { + name: "taisho", + start: "1912-07-30", + end: "1926-12-24", + }, + { + name: "showa", + start: "1926-12-25", + end: "1989-01-07", + }, + { + name: "heisei", + start: "1989-01-08", + end: "2019-04-30", + }, + { + name: "reiwa", + start: "2019-05-01", + end: undefined, + }, +]; + +for (let {name: era, start, end} of eras) { + let eraStart = Temporal.PlainDate.from(start); + let eraEnd = end && Temporal.PlainDate.from(end); + + // Months before start of era. + for (let month = 1; month < eraStart.month; ++month) { + for (let day = 1; day <= 32; ++day) { + let monthCode = "M" + String(month).padStart(2, "0"); + + let dateWithMonth = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + month, + day, + }); + + let dateWithMonthCode = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + monthCode, + day, + }); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), start); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), start); + } + } + + // Days before start of era. + for (let day = 1; day < eraStart.day; ++day) { + let dateWithMonth = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + month: eraStart.month, + day, + }); + + let dateWithMonthCode = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + monthCode: eraStart.monthCode, + day, + }); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), start); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), start); + } + + // After start of era. + for (let day = eraStart.day; day <= 32; ++day) { + let dateWithMonth = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + month: eraStart.month, + day, + }); + + let dateWithMonthCode = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + monthCode: eraStart.monthCode, + day, + }); + + let expected = Temporal.PlainDate.from({ + year: eraStart.year, + monthCode: eraStart.monthCode, + day, + }).toString(); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); + } + + // Months after start of era. + for (let month = eraStart.month + 1; month <= 12; ++month) { + for (let day = 1; day <= 32; ++day) { + let monthCode = "M" + String(month).padStart(2, "0"); + + let dateWithMonth = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + month, + day, + }); + + let dateWithMonthCode = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 1, + monthCode, + day, + }); + + let expected = Temporal.PlainDate.from({ + year: eraStart.year, + monthCode: monthCode, + day, + }).toString(); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), expected); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), expected); + } + } + + if (end) { + let lastEraYear = (eraEnd.year - eraStart.year) + 1; + + // After end of era. + for (let day = 31; day <= 32; ++day) { + let date = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: 100, + monthCode: "M12", + day, + }); + assert.sameValue(date.toString({calendarName: "never"}), end); + } + + // Days after end of era. + for (let day = eraEnd.day + 1; day <= 32; ++day) { + let dateWithMonth = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: lastEraYear, + month: eraEnd.month, + day, + }); + + let dateWithMonthCode = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: lastEraYear, + monthCode: eraEnd.monthCode, + day, + }); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), end); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), end); + } + + // Months after end of era. + for (let month = eraEnd.month + 1; month <= 12; ++month) { + for (let day = 1; day <= 32; ++day) { + let monthCode = "M" + String(month).padStart(2, "0"); + + let dateWithMonth = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: lastEraYear, + month, + day, + }); + + let dateWithMonthCode = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: lastEraYear, + monthCode, + day, + }); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), end); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), end); + } + } + + // Year after end of era. + let yearAfterLastEraYear = lastEraYear + 1; + for (let month = 1; month <= 12; ++month) { + for (let day = 1; day <= 31; ++day) { + let monthCode = "M" + String(month).padStart(2, "0"); + + let dateWithMonth = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: yearAfterLastEraYear, + month, + day, + }); + + let dateWithMonthCode = Temporal.PlainDate.from({ + calendar: "japanese", + era, + eraYear: yearAfterLastEraYear, + monthCode, + day, + }); + + assert.sameValue(dateWithMonth.toString({calendarName: "never"}), end, `era=${era}, eraYear=${yearAfterLastEraYear}, month=${month}, day=${day}`); + assert.sameValue(dateWithMonthCode.toString({calendarName: "never"}), end, `era=${era}, eraYear=${yearAfterLastEraYear}, monthCode=${monthCode}, day=${day}`); + } + } + } +} + diff --git a/test/staging/sm/Temporal/PlainDate/from-hebrew-keviah.js b/test/staging/sm/Temporal/PlainDate/from-hebrew-keviah.js new file mode 100644 index 0000000000..8a061bbe60 --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/from-hebrew-keviah.js @@ -0,0 +1,72 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Ensure kevi'ah is correct. +// +// https://en.wikipedia.org/wiki/Hebrew_calendar#Keviah + +function KeviahSymbol(year) { + let startOfYear = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + monthCode: "M01", + day: 1, + }); + + let firstDayOfPesach = Temporal.PlainDate.from({ + calendar: "hebrew", + year, + monthCode: "M07", + day: 15, + }); + + let yearSymbol = { + 353: "D", // deficient + 354: "R", // regular + 355: "C", // complete + + 383: "D", // deficient, leap year + 384: "R", // regular, leap year + 385: "C", // complete, leap year + }; + + // Week starts on Sunday. + let daySymbol = date => (date.dayOfWeek % 7) + 1; + + let {daysInYear} = startOfYear; + assert.sameValue(daysInYear in yearSymbol, true); + + return `${daySymbol(startOfYear)}${yearSymbol[daysInYear]}${daySymbol(firstDayOfPesach)}`; +} + +const validKeviahSymbols = new Set([ + "2D3", "2C5", "2D5", "2C7", + "3R5", "3R7", + "5R7", "5C1", "5D1", "5C3", + "7D1", "7C3", "7D3", "7C5" +]); + +// Modern years. +for (let year = 5700; year <= 5800; ++year) { + let sym = KeviahSymbol(year); + assert.sameValue(validKeviahSymbols.has(sym), true, `${year} -> ${sym}`); +} + +// Things start to break when year is 3760 or earlier. +// Temporal.PlainDate.from({calendar:"hebrew", year:3760, monthCode:"M01", day:1}).withCalendar("iso8601").year == -1 +// +// Temporal.PlainDate.from({calendar:"hebrew", year:3760, monthCode:"M01", day:1}).dayOfWeek returns 7 (Sunday), but should be 6 (Saturday). +// +// https://github.com/unicode-org/icu4x/issues/4893 + diff --git a/test/staging/sm/Temporal/PlainDate/from-islamic-umalqura.js b/test/staging/sm/Temporal/PlainDate/from-islamic-umalqura.js new file mode 100644 index 0000000000..205bf1bc03 --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/from-islamic-umalqura.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// https://github.com/unicode-org/icu4x/issues/4914 +if (0) { + let date = Temporal.PlainDate.from({ + calendar: "islamic-umalqura", + year: -6823, + monthCode: "M01", + day: 1, + }); + assert.sameValue(date.day, 1); +} + diff --git a/test/staging/sm/Temporal/PlainDate/withCalendar.js b/test/staging/sm/Temporal/PlainDate/withCalendar.js new file mode 100644 index 0000000000..c806522f7c --- /dev/null +++ b/test/staging/sm/Temporal/PlainDate/withCalendar.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Lunisolar/lunar calendars can't accurately predict celestial orbits for dates +// far into the past/future. +// +// https://github.com/unicode-org/icu4x/issues/4917 +// https://github.com/tc39/proposal-temporal/issues/2869 +const calendarsNotSupportingLargeDates = new Set([ + "chinese", + "dangi", + "islamic", + "islamic-rgsa", + "islamic-umalqura", +]); + +const minDate = new Temporal.PlainDate(-271821, 4, 19); +const maxDate = new Temporal.PlainDate(275760, 9, 13); + +for (let calendar of Intl.supportedValuesOf("calendar")) { + // Skip this calendar when large dates are unsupported to avoid hitting + // assertions in ICU4X code. + if (calendarsNotSupportingLargeDates.has(calendar)) { + continue; + } + + let min = minDate.withCalendar(calendar); + let max = maxDate.withCalendar(calendar); + + assert.sameValue(min.year < max.year, true); +} + diff --git a/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-common.js b/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-common.js new file mode 100644 index 0000000000..772a7c513e --- /dev/null +++ b/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-common.js @@ -0,0 +1,70 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Temporal-PlainMonthDay-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Common leap months should find a result not too far into the past. +// +// Month -> ISO year +// +// M01L +// M02L 1765 +// M03L 1955 +// M04L 1944 +// M05L 1952 +// M06L 1941 +// M07L 1938 +// M08L 1718 +// M09L +// M10L +// M11L +// M12L +// +// M02L and M08L with 29 days is common, but with 30 is actually rather uncommon. +// +// See also "The Mathematics of the Chinese Calendar", Table 21 [1] for a +// distribution of leap months. +// +// [1] https://www.xirugu.com/CHI500/Dates_Time/Chinesecalender.pdf + +const monthCodes = [ + // M01L is an uncommon leap month. + "M02L", + "M03L", + "M04L", + "M05L", + "M06L", + "M07L", + "M08L", + // M09L..M12L are uncommon leap months. +]; + +const calendar = "chinese"; + +// Months can have up to 30 days. +const day = 30; + +for (let monthCode of monthCodes) { + let pmd = Temporal.PlainMonthDay.from({calendar, monthCode, day}); + assert.sameValue(pmd.monthCode, monthCode); + assert.sameValue(pmd.day, day); + + let constrain = Temporal.PlainMonthDay.from({calendar, monthCode, day: day + 1}, {overflow: "constrain"}); + assert.sameValue(constrain.monthCode, monthCode); + assert.sameValue(constrain.day, day); + assertSameISOFields(constrain, pmd); + + assertThrowsInstanceOf(() => { + Temporal.PlainMonthDay.from({calendar, monthCode, day: day + 1}, {overflow: "reject"}); + }, RangeError); +} + diff --git a/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js b/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js new file mode 100644 index 0000000000..65d7ce94da --- /dev/null +++ b/test/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js @@ -0,0 +1,82 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Temporal-PlainMonthDay-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Uncommon leap month with 30 days can be far into the past. Computing the +// results can take its time, therefore the test is marked as "slow". +// +// Month -> ISO year +// +// M01L 1461 +// M02L +// M03L +// M04L +// M05L +// M06L +// M07L +// M08L +// M09L -6482 +// M10L -4633 +// M11L -2172 +// M12L -179 +// +// See also "The Mathematics of the Chinese Calendar", Table 21 [1] for a +// distribution of leap months. +// +// [1] https://www.xirugu.com/CHI500/Dates_Time/Chinesecalender.pdf + +const monthCodes = [ + "M01L", + // M02L..M08L are common leap months. + "M09L", + "M10L", + "M11L", + "M12L", +]; + +function assertSameISOFields(actual, expected) { + let actualFields = actual.getISOFields(); + let expectedFields = expected.getISOFields(); + + assert.sameValue(typeof actualFields.isoYear, "number"); + assert.sameValue(typeof actualFields.isoMonth, "number"); + assert.sameValue(typeof actualFields.isoDay, "number"); + + assert.sameValue(actualFields.isoMonth > 0, true); + assert.sameValue(actualFields.isoDay > 0, true); + + assert.sameValue(actualFields.isoYear, expectedFields.isoYear); + assert.sameValue(actualFields.isoMonth, expectedFields.isoMonth); + assert.sameValue(actualFields.isoDay, expectedFields.isoDay); +} + +const calendar = "chinese"; + +// Months can have up to 30 days. +const day = 30; + +for (let monthCode of monthCodes) { + let pmd = Temporal.PlainMonthDay.from({calendar, monthCode, day}); + assert.sameValue(pmd.monthCode, monthCode); + assert.sameValue(pmd.day, day); + + let constrain = Temporal.PlainMonthDay.from({calendar, monthCode, day: day + 1}, {overflow: "constrain"}); + assert.sameValue(constrain.monthCode, monthCode); + assert.sameValue(constrain.day, day); + assertSameISOFields(constrain, pmd); + + assertThrowsInstanceOf(() => { + Temporal.PlainMonthDay.from({calendar, monthCode, day: day + 1}, {overflow: "reject"}); + }, RangeError); +} + diff --git a/test/staging/sm/Temporal/PlainMonthDay/from-chinese.js b/test/staging/sm/Temporal/PlainMonthDay/from-chinese.js new file mode 100644 index 0000000000..eb3b23a77d --- /dev/null +++ b/test/staging/sm/Temporal/PlainMonthDay/from-chinese.js @@ -0,0 +1,66 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Temporal-PlainMonthDay-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Non-leap month should find a result in years around 1972. +// +// Month -> ISO year +// +// M01 1970 +// M02 1972 +// M03 1966 +// M04 1970 +// M05 1972 +// M06 1971 +// M07 1972 +// M08 1971 +// M09 1972 +// M10 1972 +// M11 1970 +// M12 1972 + +const monthCodes = [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12", +]; + +const calendar = "chinese"; + +// Months can have up to 30 days. +const day = 30; + +for (let monthCode of monthCodes) { + let pmd = Temporal.PlainMonthDay.from({calendar, monthCode, day}); + assert.sameValue(pmd.monthCode, monthCode); + assert.sameValue(pmd.day, day); + + let constrain = Temporal.PlainMonthDay.from({calendar, monthCode, day: day + 1}, {overflow: "constrain"}); + assert.sameValue(constrain.monthCode, monthCode); + assert.sameValue(constrain.day, day); + assertSameISOFields(constrain, pmd); + + assertThrowsInstanceOf(() => { + Temporal.PlainMonthDay.from({calendar, monthCode, day: day + 1}, {overflow: "reject"}); + }, RangeError); +} + diff --git a/test/staging/sm/Temporal/PlainMonthDay/from-coptic.js b/test/staging/sm/Temporal/PlainMonthDay/from-coptic.js new file mode 100644 index 0000000000..3d4889580b --- /dev/null +++ b/test/staging/sm/Temporal/PlainMonthDay/from-coptic.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Temporal-PlainMonthDay-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Input which has to skip the first two candidates when starting the search from +// December 31, 1972. +// +// Note: December 31, 1972 is year 1689 in the coptic calendar. +// +// 1. First candidate 1689-M13-05 ("1973-09-10[u-ca=coptic]") is after December 31, 1972. +// 2. Second candidate 1688-M13-05 ("1972-09-10[u-ca=coptic]") is before December 31, 1972, +// but day doesn't match. +// 3. Third candidate 1687-M13-06 ("1971-09-11[u-ca=coptic]") is a full match. +{ + let pmd = Temporal.PlainMonthDay.from({ + calendar: "coptic", + monthCode: "M13", + day: 7, + }); + assert.sameValue(pmd.monthCode, "M13"); + assert.sameValue(pmd.day, 6); + + let fields = ISOFields(pmd); + assert.sameValue(fields.calendar, "coptic"); + assert.sameValue(fields.isoYear, 1971); + assert.sameValue(fields.isoMonth, 9); + assert.sameValue(fields.isoDay, 11); +} + diff --git a/test/staging/sm/Temporal/PlainMonthDay/from-gregory.js b/test/staging/sm/Temporal/PlainMonthDay/from-gregory.js new file mode 100644 index 0000000000..f5427e17a0 --- /dev/null +++ b/test/staging/sm/Temporal/PlainMonthDay/from-gregory.js @@ -0,0 +1,78 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Temporal-PlainMonthDay-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +// Equivalent monthCode and month are resolved to the same PlainMonthDay. +{ + let withMonthCode = Temporal.PlainMonthDay.from({ + calendar: "gregory", + year: 2023, + monthCode: "M02", + day: 30, + }); + + let withMonth = Temporal.PlainMonthDay.from({ + calendar: "gregory", + year: 2023, + month: 2, + day: 30, + }); + + assert.sameValue(withMonthCode.equals(withMonth), true); +} + +// Inconsistent eraYear and year are ignored when monthCode is present. +{ + let pmd = Temporal.PlainMonthDay.from({ + calendar: "gregory", + era: "ce", + eraYear: 2024, + year: 2023, + monthCode: "M01", + day: 1, + }); + + let expected = Temporal.PlainMonthDay.from({ + calendar: "gregory", + monthCode: "M01", + day: 1, + }); + + assert.sameValue(pmd.equals(expected), true); +} + +// eraYear and year must be consistent when month is present. +{ + let fields = { + calendar: "gregory", + era: "ce", + eraYear: 2024, + year: 2023, + month: 1, + day: 1, + }; + assertThrowsInstanceOf(() => Temporal.PlainMonthDay.from(fields), RangeError); +} + +// monthCode and month must be consistent. +{ + let fields = { + calendar: "gregory", + year: 2024, + monthCode: "M01", + month: 2, + day: 1, + }; + assertThrowsInstanceOf(() => Temporal.PlainMonthDay.from(fields), RangeError); +} + diff --git a/test/staging/sm/Temporal/PlainMonthDay/result-not-after-1972-dec-31.js b/test/staging/sm/Temporal/PlainMonthDay/result-not-after-1972-dec-31.js new file mode 100644 index 0000000000..41322b0fb3 --- /dev/null +++ b/test/staging/sm/Temporal/PlainMonthDay/result-not-after-1972-dec-31.js @@ -0,0 +1,85 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-Temporal-PlainMonthDay-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +features: +- Temporal +description: | + pending +esid: pending +---*/ + +const monthCodes = [ + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12", + + // Short epagomenal month. + "M13", + + // Leap months. + "M01L", + "M02L", + "M03L", + "M04L", + "M05L", + "M06L", + "M07L", + "M08L", + "M09L", + "M10L", + "M11L", + "M12L", +]; + +// Chinese and Dangi are excluded to avoid unnecessary slow-downs, see also +// from-chinese*.js tests. +const calendars = [ + "buddhist", + // "chinese", + "coptic", + // "dangi", + "ethiopic", + "ethioaa", + "gregory", + "hebrew", + "indian", + // Islamic calendars are broken in ICU4X 1.5. + // https://github.com/unicode-org/icu4x/issues/5069 + // "islamic", + "islamic-civil", + // "islamic-rgsa", + "islamic-tbla", + // "islamic-umalqura", + "japanese", + "persian", + "roc", +]; + +for (let calendar of calendars) { + const day = 31; + for (let monthCode of monthCodes) { + let pmd; + try { + pmd = Temporal.PlainMonthDay.from({calendar, monthCode, day}); + } catch { + continue; + } + assert.sameValue(pmd.monthCode, monthCode); + assert.sameValue(pmd.day <= day, true); + assert.sameValue(ISOFields(pmd).isoYear <= 1972, true); + } +} + diff --git a/test/staging/sm/TypedArray/Tconstructor-fromTypedArray-byteLength.js b/test/staging/sm/TypedArray/Tconstructor-fromTypedArray-byteLength.js new file mode 100644 index 0000000000..0cf478a8ab --- /dev/null +++ b/test/staging/sm/TypedArray/Tconstructor-fromTypedArray-byteLength.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var g = createNewGlobal(); + +var arr = [1, 2, 3]; +for (var constructor of anyTypedArrayConstructors) { + var tarr = new constructor(arr); + for (var constructor2 of anyTypedArrayConstructors) { + var copied = new constructor2(tarr); + assert.sameValue(copied.buffer.byteLength, arr.length * constructor2.BYTES_PER_ELEMENT); + + g.tarr = tarr; + copied = g.eval(`new ${constructor2.name}(tarr);`); + assert.sameValue(copied.buffer.byteLength, arr.length * constructor2.BYTES_PER_ELEMENT); + } +} + diff --git a/test/staging/sm/TypedArray/at.js b/test/staging/sm/TypedArray/at.js new file mode 100644 index 0000000000..a76def85d5 --- /dev/null +++ b/test/staging/sm/TypedArray/at.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.at.length, 1); + + assert.sameValue(new constructor([0]).at(0), 0); + assert.sameValue(new constructor([0]).at(-1), 0); + + assert.sameValue(new constructor([]).at(0), undefined); + assert.sameValue(new constructor([]).at(-1), undefined); + assert.sameValue(new constructor([]).at(1), undefined); + + assert.sameValue(new constructor([0, 1]).at(0), 0); + assert.sameValue(new constructor([0, 1]).at(1), 1); + assert.sameValue(new constructor([0, 1]).at(-2), 0); + assert.sameValue(new constructor([0, 1]).at(-1), 1); + + assert.sameValue(new constructor([0, 1]).at(2), undefined); + assert.sameValue(new constructor([0, 1]).at(-3), undefined); + assert.sameValue(new constructor([0, 1]).at(-4), undefined); + assert.sameValue(new constructor([0, 1]).at(Infinity), undefined); + assert.sameValue(new constructor([0, 1]).at(-Infinity), undefined); + assert.sameValue(new constructor([0, 1]).at(NaN), 0); // ToInteger(NaN) = 0 + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var at = createNewGlobal()[constructor.name].prototype.at; + assert.sameValue(at.call(new constructor([1, 2, 3]), 2), 3); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.at.call(invalidReceiver); + }, TypeError, "Assert that 'at' fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).at(1), 2); +} + diff --git a/test/staging/sm/TypedArray/bug1526838.js b/test/staging/sm/TypedArray/bug1526838.js new file mode 100644 index 0000000000..a30cce5aa6 --- /dev/null +++ b/test/staging/sm/TypedArray/bug1526838.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const testArray = [1n]; +for (const constructor of anyTypedArrayConstructors) { + assertThrowsInstanceOf(() => new constructor(testArray), TypeError); + assertThrowsInstanceOf(() => new constructor(testArray.values()), TypeError); +} + diff --git a/test/staging/sm/TypedArray/constructor-ArrayBuffer-species-wrap.js b/test/staging/sm/TypedArray/constructor-ArrayBuffer-species-wrap.js new file mode 100644 index 0000000000..85d956db43 --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-ArrayBuffer-species-wrap.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +let g = createNewGlobal(); + +// Both TypedArray and ArrayBuffer from different global. +for (let ctor of typedArrayConstructors) { + let a = g.eval(`new ${ctor.name}([1, 2, 3, 4, 5]);`); + for (let ctor2 of typedArrayConstructors) { + let b = new ctor2(a); + assert.sameValue(Object.getPrototypeOf(b).constructor, ctor2); + assert.sameValue(Object.getPrototypeOf(b.buffer).constructor, ArrayBuffer); + } +} + +// Only ArrayBuffer from different global. +let origSpecies = Object.getOwnPropertyDescriptor(ArrayBuffer, Symbol.species); +let modSpecies = { + get() { + throw new Error("unexpected @@species access"); + } +}; +for (let ctor of typedArrayConstructors) { + let a = new ctor([1, 2, 3, 4, 5]); + for (let ctor2 of typedArrayConstructors) { + Object.defineProperty(ArrayBuffer, Symbol.species, modSpecies); + let b = new ctor2(a); + Object.defineProperty(ArrayBuffer, Symbol.species, origSpecies); + assert.sameValue(Object.getPrototypeOf(b).constructor, ctor2); + assert.sameValue(Object.getPrototypeOf(b.buffer).constructor, ArrayBuffer); + } +} + +// Only TypedArray from different global. +g.otherArrayBuffer = ArrayBuffer; +g.eval(` +var origSpecies = Object.getOwnPropertyDescriptor(ArrayBuffer, Symbol.species); +var modSpecies = { + get() { + throw new Error("unexpected @@species access"); + } +}; +`); +for (let ctor of typedArrayConstructors) { + let a = g.eval(`new ${ctor.name}([1, 2, 3, 4, 5]);`); + for (let ctor2 of typedArrayConstructors) { + g.eval(`Object.defineProperty(ArrayBuffer, Symbol.species, modSpecies);`); + let b = new ctor2(a); + g.eval(`Object.defineProperty(ArrayBuffer, Symbol.species, origSpecies);`); + assert.sameValue(Object.getPrototypeOf(b).constructor, ctor2); + assert.sameValue(Object.getPrototypeOf(b.buffer).constructor, ArrayBuffer); + } +} + diff --git a/test/staging/sm/TypedArray/constructor-ArrayBuffer-species.js b/test/staging/sm/TypedArray/constructor-ArrayBuffer-species.js new file mode 100644 index 0000000000..1086f444cb --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-ArrayBuffer-species.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (let ctor of typedArrayConstructors) { + let arr = new ctor([1, 2, 3, 4, 5, 6, 7, 8]); + + arr.buffer.constructor = { + get [Symbol.species]() { + throw new Error("unexpected @@species access"); + } + }; + + for (let ctor2 of typedArrayConstructors) { + let arr2 = new ctor2(arr); + + assert.sameValue(Object.getPrototypeOf(arr2.buffer), ArrayBuffer.prototype); + assert.sameValue(arr2.buffer.constructor, ArrayBuffer); + } +} + diff --git a/test/staging/sm/TypedArray/constructor-buffer-sequence.js b/test/staging/sm/TypedArray/constructor-buffer-sequence.js new file mode 100644 index 0000000000..e272c75f66 --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-buffer-sequence.js @@ -0,0 +1,239 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// 22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] ) + +// Ensure the various error conditions are tested in the correct order. + +const otherGlobal = createNewGlobal(); + +function* createBuffers(lengths = [0, 8]) { + for (let length of lengths) { + let buffer = new ArrayBuffer(length); + yield {buffer, detach: () => $262.detachArrayBuffer(buffer)}; + } + + for (let length of lengths) { + let buffer = new otherGlobal.ArrayBuffer(length); + yield {buffer, detach: () => otherGlobal.$262.detachArrayBuffer(buffer)}; + } +} + +const poisonedValue = new Proxy({}, new Proxy({}, { + get() { + // Throws an exception when any proxy trap is invoked. + throw new Error("Poisoned Value"); + } +})); + +class ExpectedError extends Error { } + +function ConstructorWithThrowingPrototype(detach) { + return Object.defineProperty(function(){}.bind(null), "prototype", { + get() { + if (detach) + detach(); + throw new ExpectedError(); + } + }); +} + +function ValueThrowing(detach) { + return { + valueOf() { + if (detach) + detach(); + throw new ExpectedError(); + } + }; +} + +function ValueReturning(value, detach) { + return { + valueOf() { + if (detach) + detach(); + return value; + } + }; +} + +// Ensure step 4 |AllocateTypedArray| is executed before step 6 |ToIndex(byteOffset)|. +for (let {buffer} of createBuffers()) { + let constructor = ConstructorWithThrowingPrototype(); + + assertThrowsInstanceOf(() => + Reflect.construct(Int32Array, [buffer, poisonedValue, 0], constructor), ExpectedError); +} + +// Ensure step 4 |AllocateTypedArray| is executed before step 9 |IsDetachedBuffer(buffer)|. +for (let {buffer, detach} of createBuffers()) { + let constructor = ConstructorWithThrowingPrototype(); + + detach(); + assertThrowsInstanceOf(() => + Reflect.construct(Int32Array, [buffer, 0, 0], constructor), ExpectedError); +} + +// Ensure step 4 |AllocateTypedArray| is executed before step 9 |IsDetachedBuffer(buffer)|. +// - Variant: Detach buffer dynamically. +for (let {buffer, detach} of createBuffers()) { + let constructor = ConstructorWithThrowingPrototype(detach); + + assertThrowsInstanceOf(() => + Reflect.construct(Int32Array, [buffer, 0, 0], constructor), ExpectedError); +} + +// Ensure step 4 |AllocateTypedArray| is executed before step 8.a |ToIndex(length)|. +for (let {buffer} of createBuffers()) { + let constructor = ConstructorWithThrowingPrototype(); + + assertThrowsInstanceOf(() => + Reflect.construct(Int32Array, [buffer, 0, poisonedValue], constructor), ExpectedError); +} + +// Ensure step 6 |ToIndex(byteOffset)| is executed before step 9 |IsDetachedBuffer(buffer)|. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = ValueThrowing(); + + detach(); + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, 0), ExpectedError); +} + +// Ensure step 6 |ToIndex(byteOffset)| is executed before step 9 |IsDetachedBuffer(buffer)|. +// - Variant: Detach buffer dynamically. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = ValueThrowing(detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, 0), ExpectedError); +} + +// Ensure step 6 |ToIndex(byteOffset)| is executed before step 8.a |ToIndex(length)|. +for (let {buffer} of createBuffers()) { + let byteOffset = ValueThrowing(); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, poisonedValue), ExpectedError); +} + +// Ensure step 7 |offset modulo elementSize ≠ 0| is executed before step 9 |IsDetachedBuffer(buffer)|. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = 1; + + detach(); + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, 0), RangeError); +} + +// Ensure step 7 |offset modulo elementSize ≠ 0| is executed before step 9 |IsDetachedBuffer(buffer)|. +// - Variant: Detach buffer dynamically. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = ValueReturning(1, detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, 0), RangeError); +} + +// Ensure step 7 |offset modulo elementSize ≠ 0| is executed before step 8.a |ToIndex(length)|. +for (let {buffer} of createBuffers()) { + assertThrowsInstanceOf(() => new Int32Array(buffer, 1, poisonedValue), RangeError); +} + +// Ensure step 8.a |ToIndex(length)| is executed before step 9 |IsDetachedBuffer(buffer)|. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = 0; + let length = ValueThrowing(); + + detach(); + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, length), ExpectedError); +} + +// Ensure step 8.a |ToIndex(length)| is executed before step 9 |IsDetachedBuffer(buffer)|. +// - Variant: Detach buffer dynamically (1). +for (let {buffer, detach} of createBuffers()) { + let byteOffset = ValueReturning(0, detach); + let length = ValueThrowing(); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, length), ExpectedError); +} + +// Ensure step 8.a |ToIndex(length)| is executed before step 9 |IsDetachedBuffer(buffer)|. +// - Variant: Detach buffer dynamically (2). +for (let {buffer, detach} of createBuffers()) { + let byteOffset = 0; + let length = ValueThrowing(detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, length), ExpectedError); +} + +// Ensure step 9 |IsDetachedBuffer(buffer)| is executed before step 11.a |bufferByteLength modulo elementSize ≠ 0|. +for (let {buffer, detach} of createBuffers([1, 9])) { + let byteOffset = 0; + + detach(); + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset), TypeError); +} + +// Ensure step 9 |IsDetachedBuffer(buffer)| is executed before step 11.a |bufferByteLength modulo elementSize ≠ 0|. +// - Variant: Detach buffer dynamically. +for (let {buffer, detach} of createBuffers([1, 9])) { + let byteOffset = ValueReturning(0, detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset), TypeError); +} + +// Ensure step 9 |IsDetachedBuffer(buffer)| is executed before step 11.c |newByteLength < 0|. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = 64; + + detach(); + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset), TypeError); +} + +// Ensure step 9 |IsDetachedBuffer(buffer)| is executed before step 11.c |newByteLength < 0|. +// - Variant: Detach buffer dynamically. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = ValueReturning(64, detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset), TypeError); +} + +// Ensure step 9 |IsDetachedBuffer(buffer)| is executed before step 12.b |offset+newByteLength > bufferByteLength|. +// - Case A: The given byteOffset is too large. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = 64; + let length = ValueReturning(0, detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, length), TypeError); +} + +// Ensure step 9 |IsDetachedBuffer(buffer)| is executed before step 12.b |offset+newByteLength > bufferByteLength|. +// - Case B: The given length is too large. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = 0; + let length = ValueReturning(64, detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, length), TypeError); +} + +// Ensure we handle the case when ToIndex(byteOffset) detaches the array buffer. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = ValueReturning(0, detach); + let length = 0; + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, length), TypeError); +} + +// Ensure we handle the case when ToIndex(length) detaches the array buffer. +for (let {buffer, detach} of createBuffers()) { + let byteOffset = 0; + let length = ValueReturning(0, detach); + + assertThrowsInstanceOf(() => new Int32Array(buffer, byteOffset, length), TypeError); +} + diff --git a/test/staging/sm/TypedArray/constructor-byteoffsets-bounds.js b/test/staging/sm/TypedArray/constructor-byteoffsets-bounds.js new file mode 100644 index 0000000000..eab0f0c0a0 --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-byteoffsets-bounds.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// 22.2.4.5 TypedArray ( buffer [ , byteOffset [ , length ] ] ) + +// Test bound checks around for |byteOffset| and |length| arguments. + +const ab = new ArrayBuffer(0); + +for (let TA of typedArrayConstructors) { + // Test bound checks around INT32_MAX for |byteOffset| argument. + assertThrowsInstanceOf(() => new TA(ab, 2**31 - TA.BYTES_PER_ELEMENT), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**31 - 1), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**31), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**31 + 1), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**31 + TA.BYTES_PER_ELEMENT), RangeError); + + // Test bound checks around UINT32_MAX for |byteOffset| argument. + assertThrowsInstanceOf(() => new TA(ab, 2**32 - TA.BYTES_PER_ELEMENT), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**32 - 1), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**32), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**32 + 1), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 2**32 + TA.BYTES_PER_ELEMENT), RangeError); + + // Test bound checks around INT32_MAX for |length| argument. + assertThrowsInstanceOf(() => new TA(ab, 0, 2**31 - 1), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 0, 2**31), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 0, 2**31 + 1), RangeError); + + // Test bound checks around UINT32_MAX for |length| argument. + assertThrowsInstanceOf(() => new TA(ab, 0, 2**32 - 1), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 0, 2**32), RangeError); + assertThrowsInstanceOf(() => new TA(ab, 0, 2**32 + 1), RangeError); +} + diff --git a/test/staging/sm/TypedArray/constructor-iterator-primitive.js b/test/staging/sm/TypedArray/constructor-iterator-primitive.js new file mode 100644 index 0000000000..0767e86327 --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-iterator-primitive.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1021835; +var summary = "Returning non-object from @@iterator should throw"; + +print(BUGNUMBER + ": " + summary); + +let primitives = [ + 1, + true, + undefined, + null, + "foo", + Symbol.iterator +]; + +for (let ctor of typedArrayConstructors) { + for (let primitive of primitives) { + let arg = { + [Symbol.iterator]() { + return primitive; + } + }; + assertThrowsInstanceOf(() => { + new ctor(arg); + }, TypeError); + } +} + diff --git a/test/staging/sm/TypedArray/constructor-non-detached.js b/test/staging/sm/TypedArray/constructor-non-detached.js new file mode 100644 index 0000000000..90a91c799d --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-non-detached.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of typedArrayConstructors) { + var buf = new constructor(); + $262.detachArrayBuffer(buf.buffer); + assertThrowsInstanceOf(() => new constructor(buf), TypeError); + + var buffer = new ArrayBuffer(); + $262.detachArrayBuffer(buffer); + assertThrowsInstanceOf(() => new constructor(buffer), TypeError); +} + + diff --git a/test/staging/sm/TypedArray/constructor-not-callable.js b/test/staging/sm/TypedArray/constructor-not-callable.js new file mode 100644 index 0000000000..b1847f75e5 --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-not-callable.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assertThrowsInstanceOf(() => constructor(), TypeError); + assertThrowsInstanceOf(() => constructor(1), TypeError); + assertThrowsInstanceOf(() => constructor.call(null), TypeError); + assertThrowsInstanceOf(() => constructor.apply(null, []), TypeError); + assertThrowsInstanceOf(() => Reflect.apply(constructor, null, []), TypeError); +} + diff --git a/test/staging/sm/TypedArray/constructor-typedarray-species-other-global.js b/test/staging/sm/TypedArray/constructor-typedarray-species-other-global.js new file mode 100644 index 0000000000..e134db16bd --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-typedarray-species-other-global.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// 22.2.4.3 TypedArray ( typedArray ) + +// Test [[Prototype]] of newly created typed array and its array buffer, and +// ensure they are both created in the correct global. + +const thisGlobal = this; +const otherGlobal = createNewGlobal(); + +const typedArrays = [otherGlobal.eval("new Int32Array(0)")]; + +if (this.SharedArrayBuffer) { + typedArrays.push(otherGlobal.eval("new Int32Array(new SharedArrayBuffer(0))")); +} + +for (let typedArray of typedArrays) { + // Ensure the "constructor" property isn't accessed. + Object.defineProperty(typedArray.buffer, "constructor", { + get() { + throw new Error("constructor property accessed"); + } + }); + + for (let ctor of typedArrayConstructors) { + let newTypedArray = new ctor(typedArray); + + assert.sameValue(Object.getPrototypeOf(newTypedArray), ctor.prototype); + assert.sameValue(Object.getPrototypeOf(newTypedArray.buffer), ArrayBuffer.prototype); + assert.sameValue(newTypedArray.buffer.constructor, ArrayBuffer); + } +} + diff --git a/test/staging/sm/TypedArray/constructor-undefined-args.js b/test/staging/sm/TypedArray/constructor-undefined-args.js new file mode 100644 index 0000000000..53c591dc58 --- /dev/null +++ b/test/staging/sm/TypedArray/constructor-undefined-args.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Bug 1040402 + +var ab = new ArrayBuffer(16); + +assert.sameValue(new Int32Array(ab).length, 4); +assert.sameValue(new Int32Array(ab, undefined).length, 4); +assert.sameValue(new Int32Array(ab, undefined, undefined).length, 4); +assert.sameValue(new Int32Array(ab, 0).length, 4); +assert.sameValue(new Int32Array(ab, 0, undefined).length, 4); +assert.sameValue(new Int32Array(ab, 4).length, 3); +assert.sameValue(new Int32Array(ab, 4, undefined).length, 3); + diff --git a/test/staging/sm/TypedArray/constructor_bad-args.js b/test/staging/sm/TypedArray/constructor_bad-args.js new file mode 100644 index 0000000000..eae56e9d0a --- /dev/null +++ b/test/staging/sm/TypedArray/constructor_bad-args.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Bug 1227207 + +var AB = new ArrayBuffer(12); // Length divides 4 +var BC = new ArrayBuffer(14); // Length does not divide 4 + +assertThrowsInstanceOf(() => new Int32Array(AB, -1), RangeError); // 22.2.4.5 #8 +assertThrowsInstanceOf(() => new Int32Array(AB, 2), RangeError); // 22.2.4.5 #10 +assertThrowsInstanceOf(() => new Int32Array(BC), RangeError); // 22.2.4.5 #13.a +assertThrowsInstanceOf(() => new Int32Array(AB, 16), RangeError); // 22.2.4.5 #13.c +assertThrowsInstanceOf(() => new Int32Array(AB, 0, 4), RangeError); // 22.2.4.5 #14.c + diff --git a/test/staging/sm/TypedArray/detached-array-buffer-checks.js b/test/staging/sm/TypedArray/detached-array-buffer-checks.js new file mode 100644 index 0000000000..84e39bf219 --- /dev/null +++ b/test/staging/sm/TypedArray/detached-array-buffer-checks.js @@ -0,0 +1,116 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Nearly every %TypedArray%.prototype method should throw a TypeError when called +// atop a detached array buffer. Here we check verify that this holds true for +// all relevant functions. +let buffer = new ArrayBuffer(32); +let array = new Int32Array(buffer); +$262.detachArrayBuffer(buffer); + +// A nice poisoned callable to ensure that we fail on a detached buffer check +// before a method attempts to do anything with its arguments. +var POISON = (function() { + var internalTarget = {}; + var throwForAllTraps = + new Proxy(internalTarget, { get(target, prop, receiver) { + assert.sameValue(target, internalTarget); + assert.sameValue(receiver, throwForAllTraps); + throw "FAIL: " + prop + " trap invoked"; + }}); + return new Proxy(throwForAllTraps, throwForAllTraps); +}); + + +assertThrowsInstanceOf(() => { + array.copyWithin(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.entries(); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.fill(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.filter(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.find(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.findIndex(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.forEach(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.indexOf(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.includes(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.join(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.keys(); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.lastIndexOf(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.map(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.reduce(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.reduceRight(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.reverse(); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.slice(POISON, POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.some(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.values(); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.every(POISON); +}, TypeError); + +assertThrowsInstanceOf(() => { + array.sort(POISON); +}, TypeError); + diff --git a/test/staging/sm/TypedArray/element-setting-converts-using-ToNumber.js b/test/staging/sm/TypedArray/element-setting-converts-using-ToNumber.js new file mode 100644 index 0000000000..434da306c3 --- /dev/null +++ b/test/staging/sm/TypedArray/element-setting-converts-using-ToNumber.js @@ -0,0 +1,96 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'element-setting-converts-using-ToNumber.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 985733; +var summary = + "Typed array element-setting should convert to target type using ToNumber " + "followed by an element-type-specific truncation function"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +anyTypedArrayConstructors.forEach(function(TypedArray) { + var ta = new TypedArray(1); + assert.sameValue(ta[0], 0); + + var count = 0; + function setToObject() + { + for (var i = 0; i < 1e4; i++) + { + assert.sameValue(count, i); + ta[0] = { valueOf: function() { count++; return 17; } }; + } + } + setToObject(); + assert.sameValue(count, 1e4); + assert.sameValue(ta[0], 17); + + function setToString() + { + for (var i = 0; i < 2e4; i++) + ta[0] = "17.0000000000000000000000000000000000000000000000000000001"; + } + setToString(); + assert.sameValue(ta[0], 17); + + count = 0; + var arrayConstructed = + new TypedArray([{ valueOf: function() { count++; return 17; } }, + "17.0000000000000000000000000000000000000000000000000001"]); + assert.sameValue(count, 1); + assert.sameValue(arrayConstructed[0], 17); + assert.sameValue(arrayConstructed[1], 17); + + count = 0; + var arraySet = new TypedArray(5); + arraySet.set({ 0: 17, + 1: "17.000000000000000000000000000000000000000000000000000", + get 2() { + return { valueOf: undefined, + toString: function() { count++; return 42; } }; + }, + get 3() { return true; }, + set 3(v) { throw "FAIL"; }, + 4: { valueOf: function() { count++; return 127; } }, + length: 5 }); + assert.sameValue(count, 2); + assert.sameValue(arraySet[0], 17); + assert.sameValue(arraySet[1], 17); + assert.sameValue(arraySet[2], 42); + assert.sameValue(arraySet[3], 1); + assert.sameValue(arraySet[4], 127); + + var bigLen = 1e4; + var big = new TypedArray(bigLen); + function initBig() + { + for (var i = 0; i < bigLen; i++) + big[i] = (i % 2) ? 3 : { valueOf: function() { return 3; } }; + } + initBig(); + for (var i = 0; i < bigLen; i++) + { + assert.sameValue(big[i], 3, + "(" + Object.prototype.toString.call(big) + ")"); + } +}); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/TypedArray/entries.js b/test/staging/sm/TypedArray/entries.js new file mode 100644 index 0000000000..2fa0f61fa9 --- /dev/null +++ b/test/staging/sm/TypedArray/entries.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.entries.length, 0); + assert.sameValue(constructor.prototype.entries.name, "entries"); + + assert.deepEqual([...new constructor(0).entries()], []); + assert.deepEqual([...new constructor(1).entries()], [[0, 0]]); + assert.deepEqual([...new constructor(2).entries()], [[0, 0], [1, 0]]); + assert.deepEqual([...new constructor([15]).entries()], [[0, 15]]); + + var arr = new constructor([1, 2, 3]); + var iterator = arr.entries(); + assert.deepEqual(iterator.next(), {value: [0, 1], done: false}); + assert.deepEqual(iterator.next(), {value: [1, 2], done: false}); + assert.deepEqual(iterator.next(), {value: [2, 3], done: false}); + assert.deepEqual(iterator.next(), {value: undefined, done: true}); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var otherGlobal = createNewGlobal(); + var entries = otherGlobal[constructor.name].prototype.entries; + assert.deepEqual([...entries.call(new constructor(2))], + [new otherGlobal.Array(0, 0), new otherGlobal.Array(1, 0)]); + arr = new (createNewGlobal()[constructor.name])(2); + assert.sameValue([...constructor.prototype.entries.call(arr)].toString(), "0,0,1,0"); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.entries.call(invalidReceiver); + }, TypeError, "Assert that entries fails if this value is not a TypedArray"); + }); +} + diff --git a/test/staging/sm/TypedArray/every-and-some.js b/test/staging/sm/TypedArray/every-and-some.js new file mode 100644 index 0000000000..2159405355 --- /dev/null +++ b/test/staging/sm/TypedArray/every-and-some.js @@ -0,0 +1,258 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for TypedArray#every. +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.every.length, 1); + + // Basic tests. + assert.sameValue(new constructor([1, 3, 5]).every(v => v % 2), true); + assert.sameValue(new constructor([1, 3, 5]).every(v => v > 2), false); + assert.sameValue(new constructor(10).every(v => v === 0), true); + assert.sameValue(new constructor().every(v => v > 1), true); + + var arr = new constructor([1, 2, 3, 4, 5]); + var sum = 0; + var count = 0; + assert.sameValue(arr.every((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + return v < 3; + }), false); + assert.sameValue(sum, 6); + assert.sameValue(count, 3); + + // Tests for `thisArg` argument. + function assertThisArg(thisArg, thisValue) { + // In sloppy mode, `this` could be global object or a wrapper of `thisArg`. + assert.sameValue(arr.every(function() { + assert.deepEqual(this, thisValue); + return true; + }, thisArg), true); + + // In strict mode, `this` strictly equals `thisArg`. + assert.sameValue(arr.every(function() { + "use strict"; + assert.deepEqual(this, thisArg); + return true; + }, thisArg), true); + + // Passing `thisArg` has no effect if callback is an arrow function. + var self = this; + assert.sameValue(arr.every(() => { + assert.sameValue(this, self); + return true; + }, thisArg), true); + } + assertThisArg([1, 2, 3], [1, 2, 3]); + assertThisArg(Object, Object); + assertThisArg(1, Object(1)); + assertThisArg("1", Object("1")); + assertThisArg(false, Object(false)); + assertThisArg(undefined, this); + assertThisArg(null, this); + + // Throw an exception in the callback. + var sum = 0; + var count = 0; + var thrown = false; + try { + arr.every((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + if (v === 3) { + throw "every"; + } + return true + }) + } catch(e) { + assert.sameValue(e, "every"); + thrown = true; + } + assert.sameValue(thrown, true); + assert.sameValue(sum, 6); + assert.sameValue(count, 3); + + // There is no callback or callback is not a function. + assertThrowsInstanceOf(() => { + arr.every(); + }, TypeError); + var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./]; + invalidCallbacks.forEach(callback => { + assertThrowsInstanceOf(() => { + arr.every(callback); + }, TypeError); + }) + + // Callback is a generator. + arr.every(function*(){ + throw "This line will not be executed"; + }); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var every = createNewGlobal()[constructor.name].prototype.every; + var sum = 0; + assert.sameValue(every.call(new constructor([1, 2, 3]), v => sum += v), true); + assert.sameValue(sum, 6); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.every.call(invalidReceiver, () => true); + }, TypeError, "Assert that every fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).every(() => true), true); +} + +for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) { + assert.sameValue(new constructor([undefined, , NaN]).every(v => Object.is(v, NaN)), true); +} + +// Tests for TypedArray#some. +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.some.length, 1); + + // Basic tests. + assert.sameValue(new constructor([1, 2, 3]).some(v => v % 2), true); + assert.sameValue(new constructor([0, 2, 4]).some(v => v % 2), false); + assert.sameValue(new constructor([1, 3, 5]).some(v => v > 2), true); + assert.sameValue(new constructor([1, 3, 5]).some(v => v < 0), false); + assert.sameValue(new constructor(10).some(v => v !== 0), false); + assert.sameValue(new constructor().some(v => v > 1), false); + + var arr = new constructor([1, 2, 3, 4, 5]); + var sum = 0; + var count = 0; + assert.sameValue(arr.some((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + return v > 2; + }), true); + assert.sameValue(sum, 6); + assert.sameValue(count, 3); + + // Tests for `thisArg` argument. + function assertThisArg(thisArg, thisValue) { + // In sloppy mode, `this` could be global object or a wrapper of `thisArg`. + assert.sameValue(arr.some(function() { + assert.deepEqual(this, thisValue); + return false; + }, thisArg), false); + + // In strict mode, `this` strictly equals `thisArg`. + assert.sameValue(arr.some(function() { + "use strict"; + assert.deepEqual(this, thisArg); + return false; + }, thisArg), false); + + // Passing `thisArg` has no effect if callback is an arrow function. + var self = this; + assert.sameValue(arr.some(() => { + assert.sameValue(this, self); + return false; + }, thisArg), false); + } + assertThisArg([1, 2, 3], [1, 2, 3]); + assertThisArg(Object, Object); + assertThisArg(1, Object(1)); + assertThisArg("1", Object("1")); + assertThisArg(false, Object(false)); + assertThisArg(undefined, this); + assertThisArg(null, this); + + // Throw an exception in the callback. + var sum = 0; + var count = 0; + var thrown = false; + try { + arr.some((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + if (v === 3) { + throw "some"; + } + return false + }) + } catch(e) { + assert.sameValue(e, "some"); + thrown = true; + } + assert.sameValue(thrown, true); + assert.sameValue(sum, 6); + assert.sameValue(count, 3); + + // There is no callback or callback is not a function. + assertThrowsInstanceOf(() => { + arr.some(); + }, TypeError); + var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./]; + invalidCallbacks.forEach(callback => { + assertThrowsInstanceOf(() => { + arr.some(callback); + }, TypeError); + }) + + // Callback is a generator. + arr.some(function*(){ + throw "This line will not be executed"; + }); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var some = createNewGlobal()[constructor.name].prototype.some; + var sum = 0; + assert.sameValue(some.call(new constructor([1, 2, 3]), v => { + sum += v; + return false; + }), false); + assert.sameValue(sum, 6); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.some.call(invalidReceiver, () => true); + }, TypeError, "Assert that some fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).some(() => false), false); +} + +for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) { + assert.sameValue(new constructor([undefined, , NaN]).some(v => v === v), false); +} + diff --git a/test/staging/sm/TypedArray/fill-detached.js b/test/staging/sm/TypedArray/fill-detached.js new file mode 100644 index 0000000000..0f965e1625 --- /dev/null +++ b/test/staging/sm/TypedArray/fill-detached.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure %TypedArray%.prototype.fill checks for detached buffers. + +function DetachArrayBufferValue(buffer, value) { + return { + valueOf() { + $262.detachArrayBuffer(buffer); + return value; + } + }; +} + +function DetachTypedArrayValue(ta, value) { + return { + valueOf() { + $262.detachArrayBuffer(ta.buffer); + return value; + } + }; +} + +// Test when ArrayBuffer is already reified. +for (let length of [0, 1, 10, 4096]) { + let ta = new Int32Array(length); + let value = DetachArrayBufferValue(ta.buffer, 123); + assertThrowsInstanceOf(() => ta.fill(value), TypeError); +} + +// Test when ArrayBuffer is reified during the fill() call. +for (let length of [0, 1, 10, 4096]) { + let ta = new Int32Array(length); + let value = DetachTypedArrayValue(ta, 123); + assertThrowsInstanceOf(() => ta.fill(value), TypeError); +} + diff --git a/test/staging/sm/TypedArray/fill.js b/test/staging/sm/TypedArray/fill.js new file mode 100644 index 0000000000..0529caa47d --- /dev/null +++ b/test/staging/sm/TypedArray/fill.js @@ -0,0 +1,74 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.deepEqual(constructor.prototype.fill.length, 1); + + assert.deepEqual(new constructor([]).fill(1), new constructor([])); + assert.deepEqual(new constructor([1,1,1]).fill(2), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 1), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 1, 2), new constructor([1,2,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, -2), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, -2, -1), new constructor([1,2,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, undefined), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, undefined, undefined), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 1, undefined), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, undefined, 1), new constructor([2,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 2, 1), new constructor([1,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, -1, 1), new constructor([1,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, -2, 1), new constructor([1,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 1, -2), new constructor([1,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0.1), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0.9), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 1.1), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0.1, 0.9), new constructor([1,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0.1, 1.9), new constructor([2,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0.1, 1.9), new constructor([2,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, -0), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0, -0), new constructor([1,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, NaN), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0, NaN), new constructor([1,1,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, false), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, true), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, "0"), new constructor([2,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, "1"), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, "-2"), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, "-2", "-1"), new constructor([1,2,1])); + assert.deepEqual(new constructor([1,1,1]).fill(2, {valueOf: ()=>1}), new constructor([1,2,2])); + assert.deepEqual(new constructor([1,1,1]).fill(2, 0, {valueOf: ()=>1}), new constructor([2,1,1])); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var fill = createNewGlobal()[constructor.name].prototype.fill; + assert.deepEqual(fill.call(new constructor([3, 2, 1]), 2), new constructor([2, 2, 2])); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.fill.call(invalidReceiver, 1); + }, TypeError); + }); + + // Test that the length getter is never called. + Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).fill(1); +} + +for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) { + assert.deepEqual(new constructor([0, 0]).fill(NaN), new constructor([NaN, NaN])); +} + diff --git a/test/staging/sm/TypedArray/filter-species.js b/test/staging/sm/TypedArray/filter-species.js new file mode 100644 index 0000000000..2b68d3e0b0 --- /dev/null +++ b/test/staging/sm/TypedArray/filter-species.js @@ -0,0 +1,65 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test(constructor, constructor2, from=[1, 2, 3, 4, 5], to=[2, 4]) { + var modifiedConstructor = new constructor(from); + modifiedConstructor.constructor = constructor2; + assert.deepEqual(modifiedConstructor.filter(x => x % 2 == 0), new constructor2(to)); + var modifiedSpecies = new constructor(from); + modifiedSpecies.constructor = { [Symbol.species]: constructor2 }; + assert.deepEqual(modifiedSpecies.filter(x => x % 2 == 0), new constructor2(to)); +} + +// same size, same sign + +test(Int8Array, Uint8Array); +test(Int8Array, Uint8ClampedArray); + +test(Uint8Array, Int8Array); +test(Uint8Array, Uint8ClampedArray); + +test(Uint8ClampedArray, Int8Array); +test(Uint8ClampedArray, Uint8Array); + +test(Int16Array, Uint16Array); +test(Uint16Array, Int16Array); + +test(Int32Array, Uint32Array); +test(Uint32Array, Int32Array); + +// same size, different sign + +test(Int8Array, Uint8Array, [-1, -2, -3, -4, -5], [0xFE, 0xFC]); +test(Int8Array, Uint8ClampedArray, [-1, -2, -3, -4, -5], [0, 0]); + +test(Uint8Array, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4]); +test(Uint8ClampedArray, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4]); + +test(Int16Array, Uint16Array, [-1, -2, -3, -4, -5], [0xFFFE, 0xFFFC]); +test(Uint16Array, Int16Array, [0xFFFF, 0xFFFE, 0xFFFD, 0xFFFC, 0xFFFB], [-2, -4]); + +test(Int32Array, Uint32Array, [-1, -2, -3, -4, -5], [0xFFFFFFFE, 0xFFFFFFFC]); +test(Uint32Array, Int32Array, [0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFC, 0xFFFFFFFB], [-2, -4]); + +// different size + +test(Uint8Array, Uint16Array); +test(Uint16Array, Uint8Array); + +test(Uint8Array, Uint32Array); +test(Uint32Array, Uint8Array); + +test(Uint16Array, Uint32Array); +test(Uint32Array, Uint16Array); + +test(Float32Array, Float64Array); +test(Float64Array, Float32Array); + diff --git a/test/staging/sm/TypedArray/find-and-findIndex.js b/test/staging/sm/TypedArray/find-and-findIndex.js new file mode 100644 index 0000000000..5e7a3a7866 --- /dev/null +++ b/test/staging/sm/TypedArray/find-and-findIndex.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1078975; +var summary = "Implement %TypedArray%.prototype.{find, findIndex}"; +print(BUGNUMBER + ": " + summary); + +const methods = ["find", "findIndex"]; + +anyTypedArrayConstructors.forEach(constructor => { + methods.forEach(method => { + var arr = new constructor([0, 1, 2, 3, 4, 5]); + // test that this.length is never called + Object.defineProperty(arr, "length", { + get() { + throw new Error("length accessor called"); + } + }); + assert.sameValue(arr[method].length, 1); + assert.sameValue(arr[method](v => v === 3), 3); + assert.sameValue(arr[method](v => v === 6), method === "find" ? undefined : -1); + + var thisValues = [undefined, null, true, 1, "foo", [], {}]; + if (typeof Symbol == "function") + thisValues.push(Symbol()); + + thisValues.forEach(thisArg => + assertThrowsInstanceOf(() => arr[method].call(thisArg, () => true), TypeError) + ); + + assertThrowsInstanceOf(() => arr[method](), TypeError); + assertThrowsInstanceOf(() => arr[method](1), TypeError); + }); +}); + +anyTypedArrayConstructors.filter(isFloatConstructor).forEach(constructor => { + var arr = new constructor([-0, 0, 1, 5, NaN, 6]); + assert.sameValue(arr.find(v => Number.isNaN(v)), NaN); + assert.sameValue(arr.findIndex(v => Number.isNaN(v)), 4); + + assert.sameValue(arr.find(v => Object.is(v, 0)), 0); + assert.sameValue(arr.findIndex(v => Object.is(v, 0)), 1); + + assert.sameValue(arr.find(v => Object.is(v, -0)), -0); + assert.sameValue(arr.findIndex(v => Object.is(v, -0)), 0); +}) + + diff --git a/test/staging/sm/TypedArray/findLast-and-findLastIndex.js b/test/staging/sm/TypedArray/findLast-and-findLastIndex.js new file mode 100644 index 0000000000..c02d00c8fc --- /dev/null +++ b/test/staging/sm/TypedArray/findLast-and-findLastIndex.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1704385; +var summary = "Implement %TypedArray%.prototype.{findLast, findLastIndex}"; +print(BUGNUMBER + ": " + summary); + +const methods = ["findLast", "findLastIndex"]; + +anyTypedArrayConstructors.forEach(constructor => { + methods.forEach(method => { + var arr = new constructor([0, 1, 2, 3, 4, 5]); + // test that this.length is never called + Object.defineProperty(arr, "length", { + get() { + throw new Error("length accessor called"); + } + }); + assert.sameValue(arr[method].length, 1); + assert.sameValue(arr[method](v => v === 3), 3); + assert.sameValue(arr[method](v => v === 6), method === "findLast" ? undefined : -1); + + var thisValues = [undefined, null, true, 1, "foo", [], {}]; + if (typeof Symbol == "function") + thisValues.push(Symbol()); + + thisValues.forEach(thisArg => + assertThrowsInstanceOf(() => arr[method].call(thisArg, () => true), TypeError) + ); + + assertThrowsInstanceOf(() => arr[method](), TypeError); + assertThrowsInstanceOf(() => arr[method](1), TypeError); + }); +}); + +anyTypedArrayConstructors.filter(isFloatConstructor).forEach(constructor => { + var arr = new constructor([-0, 0, 1, 5, NaN, 6]); + assert.sameValue(arr.findLast(v => Number.isNaN(v)), NaN); + assert.sameValue(arr.findLastIndex(v => Number.isNaN(v)), 4); + + assert.sameValue(arr.findLast(v => Object.is(v, 0)), 0); + assert.sameValue(arr.findLastIndex(v => Object.is(v, 0)), 1); + + assert.sameValue(arr.findLast(v => Object.is(v, -0)), -0); + assert.sameValue(arr.findLastIndex(v => Object.is(v, -0)), 0); +}) + + diff --git a/test/staging/sm/TypedArray/forEach.js b/test/staging/sm/TypedArray/forEach.js new file mode 100644 index 0000000000..0b54003a8e --- /dev/null +++ b/test/staging/sm/TypedArray/forEach.js @@ -0,0 +1,102 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for TypedArray#forEach +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.forEach.length, 1); + + var arr = new constructor([1, 2, 3, 4, 5]); + // Tests for `thisArg` argument. + function assertThisArg(thisArg, thisValue) { + // In sloppy mode, `this` could be global object or a wrapper of `thisArg`. + arr.forEach(function() { + assert.deepEqual(this, thisValue); + return false; + }, thisArg); + + // In strict mode, `this` strictly equals `thisArg`. + arr.forEach(function() { + "use strict"; + assert.deepEqual(this, thisArg); + return false; + }, thisArg); + + // Passing `thisArg` has no effect if callback is an arrow function. + var self = this; + arr.forEach(() => { + assert.sameValue(this, self); + return false; + }, thisArg); + } + assertThisArg([1, 2, 3], [1, 2, 3]); + assertThisArg(Object, Object); + assertThisArg(1, Object(1)); + assertThisArg("1", Object("1")); + assertThisArg(false, Object(false)); + assertThisArg(undefined, this); + assertThisArg(null, this); + + // Throw an exception in the callback. + var sum = 0; + var count = 0; + var thrown = false; + try { + assert.sameValue(arr.forEach((v) => { + count++; + sum += v; + if (v === 3) { + throw "forEach"; + } + }), undefined) + } catch(e) { + assert.sameValue(e, "forEach"); + thrown = true; + } + assert.sameValue(thrown, true); + assert.sameValue(sum, 6); + assert.sameValue(count, 3); + + // There is no callback or callback is not a function. + assertThrowsInstanceOf(() => { + arr.forEach(); + }, TypeError); + var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./]; + invalidCallbacks.forEach(callback => { + assertThrowsInstanceOf(() => { + arr.forEach(callback); + }, TypeError); + }) + + // Callback is a generator. + arr.forEach(function*(){ + throw "This line will not be executed"; + }); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var forEach = createNewGlobal()[constructor.name].prototype.forEach; + var sum = 0; + forEach.call(new constructor([1, 2, 3]), v => { + sum += v; + }); + assert.sameValue(sum, 6); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.forEach.call(invalidReceiver, () => true); + }, TypeError, "Assert that some fails if this value is not a TypedArray"); + }); +} + diff --git a/test/staging/sm/TypedArray/from_basics.js b/test/staging/sm/TypedArray/from_basics.js new file mode 100644 index 0000000000..d27558270f --- /dev/null +++ b/test/staging/sm/TypedArray/from_basics.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + // 'from' method is identical for all typed array constructors. + assert.sameValue(anyTypedArrayConstructors[0].from === constructor.from, true); + + // %TypedArray%.from copies arrays. + var src = new constructor([1, 2, 3]), copy = constructor.from(src); + assert.sameValue(copy === src, false); + assert.sameValue(copy instanceof constructor, true); + assert.deepEqual(copy, src); + + // Non-element properties are not copied. + var a = new constructor([0, 1]); + a.name = "lisa"; + assert.deepEqual(constructor.from(a), new constructor([0, 1])); + + // %TypedArray%.from can copy non-iterable objects, if they're array-like. + src = {0: 0, 1: 1, length: 2}; + copy = constructor.from(src); + assert.sameValue(copy instanceof constructor, true); + assert.deepEqual(copy, new constructor([0, 1])); + + // Properties past the .length are not copied. + src = {0: "0", 1: "1", 2: "two", 9: "nine", name: "lisa", length: 2}; + assert.deepEqual(constructor.from(src), new constructor([0, 1])); + + // If an object has neither an @@iterator method nor .length, + // then it's treated as zero-length. + assert.deepEqual(constructor.from({}), new constructor()); + + // Primitives will be coerced to primitive wrapper first. + assert.deepEqual(constructor.from(1), new constructor()); + assert.deepEqual(constructor.from("123"), new constructor([1, 2, 3])); + assert.deepEqual(constructor.from(true), new constructor()); + assert.deepEqual(constructor.from(Symbol()), new constructor()); + + // Source object property order doesn't matter. + src = {length: 2, 1: "1", 0: "0"}; + assert.deepEqual(constructor.from(src), new constructor([0, 1])); +} + diff --git a/test/staging/sm/TypedArray/from_constructor.js b/test/staging/sm/TypedArray/from_constructor.js new file mode 100644 index 0000000000..35415f4c45 --- /dev/null +++ b/test/staging/sm/TypedArray/from_constructor.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + // Note %TypedArray%.from(iterable) calls 'this' with an argument whose value is + // `[...iterable].length`, while Array.from(iterable) doesn't pass any argument. + constructor.from.call(function(len){ + assert.sameValue(len, 3); + return new constructor(len); + }, Array(3)); + + // If the 'this' value passed to %TypedArray.from is not a constructor, + // then an exception is thrown, while Array.from will use Array as it's constructor. + var arr = [3, 4, 5]; + var nonconstructors = [ + {}, Math, Object.getPrototypeOf, undefined, 17, + () => ({}) // arrow functions are not constructors + ]; + for (var v of nonconstructors) { + assertThrowsInstanceOf(() => { + constructor.from.call(v, arr); + }, TypeError); + } + + // %TypedArray%.from does not get confused if global constructors for typed arrays + // are replaced with another constructor. + function NotArray(...rest) { + return new constructor(...rest); + } + var RealArray = constructor; + NotArray.from = constructor.from; + this[constructor.name] = NotArray; + assert.sameValue(RealArray.from([1]) instanceof RealArray, true); + assert.sameValue(NotArray.from([1]) instanceof RealArray, true); + this[constructor.name] = RealArray; +} + diff --git a/test/staging/sm/TypedArray/from_errors.js b/test/staging/sm/TypedArray/from_errors.js new file mode 100644 index 0000000000..52cd523b06 --- /dev/null +++ b/test/staging/sm/TypedArray/from_errors.js @@ -0,0 +1,85 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + // %TypedArray%.from throws if the argument is undefined or null. + assertThrowsInstanceOf(() => constructor.from(), TypeError); + assertThrowsInstanceOf(() => constructor.from(undefined), TypeError); + assertThrowsInstanceOf(() => constructor.from(null), TypeError); + + // Unlike Array.from, %TypedArray%.from doesn't get or set the length property. + function ObjectWithThrowingLengthGetterSetter(...rest) { + var ta = new constructor(...rest); + Object.defineProperty(ta, "length", { + configurable: true, + get() { throw new RangeError("getter!"); }, + set() { throw new RangeError("setter!"); } + }); + return ta; + } + ObjectWithThrowingLengthGetterSetter.from = constructor.from; + assert.sameValue(ObjectWithThrowingLengthGetterSetter.from([123])[0], 123); + + // %TypedArray%.from throws if mapfn is neither callable nor undefined. + assertThrowsInstanceOf(() => constructor.from([3, 4, 5], {}), TypeError); + assertThrowsInstanceOf(() => constructor.from([3, 4, 5], "also not a function"), TypeError); + assertThrowsInstanceOf(() => constructor.from([3, 4, 5], null), TypeError); + + // Even if the function would not have been called. + assertThrowsInstanceOf(() => constructor.from([], JSON), TypeError); + + // If mapfn is not undefined and not callable, the error happens before anything else. + // Before calling the constructor, before touching the arrayLike. + var log = ""; + var obj; + function C(...rest) { + log += "C"; + obj = new constructor(...rest); + return obj; + } + var p = new Proxy({}, { + has: function () { log += "1"; }, + get: function () { log += "2"; }, + getOwnPropertyDescriptor: function () { log += "3"; } + }); + assertThrowsInstanceOf(() => constructor.from.call(C, p, {}), TypeError); + assert.sameValue(log, ""); + + // If mapfn throws, the new object has already been created. + var arrayish = { + get length() { log += "l"; return 1; }, + get 0() { log += "0"; return "q"; } + }; + log = ""; + var exc = {surprise: "ponies"}; + assertThrowsValue(() => constructor.from.call(C, arrayish, () => { throw exc; }), exc); + assert.sameValue(log, "lC0"); + assert.sameValue(obj instanceof constructor, true); + + // It's a TypeError if the @@iterator property is a primitive (except null and undefined). + for (var primitive of ["foo", 17, Symbol(), true]) { + assertThrowsInstanceOf(() => constructor.from({[Symbol.iterator] : primitive}), TypeError); + } + assert.deepEqual(constructor.from({[Symbol.iterator]: null}), new constructor()); + assert.deepEqual(constructor.from({[Symbol.iterator]: undefined}), new constructor()); + + // It's a TypeError if the iterator's .next() method returns a primitive. + for (var primitive of [undefined, null, "foo", 17, Symbol(), true]) { + assertThrowsInstanceOf( + () => constructor.from({ + [Symbol.iterator]() { + return {next() { return primitive; }}; + } + }), + TypeError); + } +} + diff --git a/test/staging/sm/TypedArray/from_iterable.js b/test/staging/sm/TypedArray/from_iterable.js new file mode 100644 index 0000000000..2fee3f4a2c --- /dev/null +++ b/test/staging/sm/TypedArray/from_iterable.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + // %TypedArray%.from works on arguments objects. + (function () { + assert.deepEqual(constructor.from(arguments), new constructor(["0", "1", undefined])); + })("0", "1", undefined); + + // If an object has both .length and [@@iterator] properties, [@@iterator] is used. + var a = ['0', '1', '2', '3', '4']; + a[Symbol.iterator] = function* () { + for (var i = 5; i--; ) + yield this[i]; + }; + + var log = ''; + function f(x) { + log += x; + return x + x; + } + + var b = constructor.from(a, f); + assert.deepEqual(b, new constructor(['44', '33', '22', '11', '00'])); + assert.sameValue(log, '43210'); + + // In fact, if [@@iterator] is present, .length isn't queried at all. + var pa = new Proxy(a, { + has: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (has)"); + return id in target; + }, + get: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (get)"); + return target[id]; + }, + getOwnPropertyDescriptor: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (getOwnPropertyDescriptor)"); + return Object.getOwnPropertyDescriptor(target, id) + } + }); + log = ""; + b = constructor.from(pa, f); + assert.deepEqual(b, new constructor(['44', '33', '22', '11', '00'])); + assert.sameValue(log, '43210'); +} + diff --git a/test/staging/sm/TypedArray/from_mapping.js b/test/staging/sm/TypedArray/from_mapping.js new file mode 100644 index 0000000000..b68bbb6522 --- /dev/null +++ b/test/staging/sm/TypedArray/from_mapping.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + // If the mapfn argument to %TypedArray%.from is undefined, don't map. + assert.deepEqual(constructor.from([3, 4, 5], undefined), new constructor([3, 4, 5])); + assert.deepEqual(constructor.from([4, 5, 6], undefined, Math), new constructor([4, 5, 6])); + + // mapfn is called with two arguments: value and index. + var log = []; + function f(...args) { + log.push(args); + return log.length; + } + assert.deepEqual(constructor.from(['a', 'e', 'i', 'o', 'u'], f), new constructor([1, 2, 3, 4, 5])); + assert.deepEqual(log, [['a', 0], ['e', 1], ['i', 2], ['o', 3], ['u', 4]]); + + // If the object to be copied is non-iterable, mapfn is still called with two + // arguments. + log = []; + assert.deepEqual(constructor.from({0: "zero", 1: "one", length: 2}, f), new constructor([1, 2])); + assert.deepEqual(log, [["zero", 0], ["one", 1]]); + + // If the object to be copied is iterable and the constructor is not Array, + // mapfn is still called with two arguments. + log = []; + function C(...rest) { + return new constructor(...rest); + } + C.from = constructor.from; + var c = new C(2); + c[0] = 1; + c[1] = 2; + assert.deepEqual(C.from(["zero", "one"], f), c); + assert.deepEqual(log, [["zero", 0], ["one", 1]]); + + // The mapfn is called even if the value to be mapped is undefined. + assert.deepEqual(constructor.from([0, 1, , 3], String), new constructor(["0", "1", "undefined", "3"])); + var arraylike = {length: 4, "0": 0, "1": 1, "3": 3}; + assert.deepEqual(constructor.from(arraylike, String), new constructor(["0", "1", "undefined", "3"])); +} + +// %TypedArray%.from(obj, map) is not exactly the same as %TypedArray%.from(obj).map(mapFn). +assert.deepEqual(Int8Array.from([150], v => v / 2), new Int8Array([75])); +assert.deepEqual(Int8Array.from([150]).map(v => v / 2), new Int8Array([-53])); + diff --git a/test/staging/sm/TypedArray/from_realms.js b/test/staging/sm/TypedArray/from_realms.js new file mode 100644 index 0000000000..3617fdcec6 --- /dev/null +++ b/test/staging/sm/TypedArray/from_realms.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + if (typeof createNewGlobal !== 'function') + break; + + // G[constructor.name].from, where G is any global, produces an array whose prototype + // is G[constructor.name].prototype. + var g = createNewGlobal(); + var ga = g[constructor.name].from([1, 2, 3]); + assert.sameValue(ga instanceof g[constructor.name], true); + + // %TypedArray%.from can be applied to a constructor from another realm. + var p = constructor.from.call(g[constructor.name], [1, 2, 3]); + assert.sameValue(p instanceof g[constructor.name], true); + var q = g[constructor.name].from.call(constructor, [3, 4, 5]); + assert.sameValue(q instanceof constructor, true); + + // The default 'this' value received by a non-strict mapping function is + // that function's global, not %TypedArray%.from's global or the caller's global. + var h = createNewGlobal(), result = undefined; + h.mainGlobal = this; + h.eval("function f() { mainGlobal.result = this; }"); + g[constructor.name].from.call(constructor, [5, 6, 7], h.f); + // (Give each global in the test a name, for better error messages. But use + // globalName, because window.name is complicated.) + this.globalName = "main"; + g.globalName = "g"; + h.globalName = "h"; + assert.sameValue(result.globalName, "h"); +} + diff --git a/test/staging/sm/TypedArray/from_string.js b/test/staging/sm/TypedArray/from_string.js new file mode 100644 index 0000000000..4777792126 --- /dev/null +++ b/test/staging/sm/TypedArray/from_string.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// %TypedArray%.from called on Array should also handle strings correctly. +var from = Int8Array.from.bind(Uint32Array); +var toCodePoint = s => s.codePointAt(0); + +// %TypedArray%.from on a string iterates over the string. +assert.compareArray(from("test string", toCodePoint), + ['t', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g'].map(toCodePoint)); + +// %TypedArray%.from on a string handles surrogate pairs correctly. +var gclef = "\uD834\uDD1E"; // U+1D11E MUSICAL SYMBOL G CLEF +assert.compareArray(from(gclef, toCodePoint), [gclef].map(toCodePoint)); +assert.compareArray(from(gclef + " G", toCodePoint), [gclef, " ", "G"].map(toCodePoint)); + +// %TypedArray%.from on a string calls the @@iterator method. +String.prototype[Symbol.iterator] = function* () { yield 1; yield 2; }; +assert.compareArray(from("anything"), [1, 2]); + +// If the iterator method is deleted, Strings are still arraylike. +delete String.prototype[Symbol.iterator]; +assert.compareArray(from("works", toCodePoint), ['w', 'o', 'r', 'k', 's'].map(toCodePoint)); +assert.compareArray(from(gclef, toCodePoint), ['\uD834', '\uDD1E'].map(toCodePoint)); + diff --git a/test/staging/sm/TypedArray/from_surfaces.js b/test/staging/sm/TypedArray/from_surfaces.js new file mode 100644 index 0000000000..07bd61cb50 --- /dev/null +++ b/test/staging/sm/TypedArray/from_surfaces.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + // Check superficial features of %TypeArray%.from. + var desc = Object.getOwnPropertyDescriptor(constructor.__proto__, "from"); + assert.sameValue(desc.configurable, true); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.writable, true); + assert.sameValue(constructor.from.length, 1); + assertThrowsInstanceOf(() => new constructor.from(), TypeError); // not a constructor +} + diff --git a/test/staging/sm/TypedArray/from_this.js b/test/staging/sm/TypedArray/from_this.js new file mode 100644 index 0000000000..0e47ea7e38 --- /dev/null +++ b/test/staging/sm/TypedArray/from_this.js @@ -0,0 +1,68 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + // The third argument to %TypedArray%.from is passed as the 'this' value to the + // mapping function. + var hits = 0, obj = {}; + function f(x) { + assert.sameValue(this, obj); + hits++; + } + constructor.from(["a", "b", "c"], f, obj); + assert.sameValue(hits, 3); + + // Without an argument, undefined is passed... + hits = 0; + function gs(x) { + "use strict"; + assert.sameValue(this, undefined); + hits++; + } + constructor.from("def", gs); + assert.sameValue(hits, 3); + + // ...and if the mapping function is non-strict, that means the global is + // passed. + var global = this; + hits = 0; + function g(x) { + assert.sameValue(this, global); + hits++; + } + constructor.from("ghi", g); + assert.sameValue(hits, 3); + + // A primitive value can be passed. + for (var v of [0, "str", undefined]) { + hits = 0; + var mapfn = function h(x) { + "use strict"; + assert.sameValue(this, v); + hits++; + }; + constructor.from("pq", mapfn, v); + assert.sameValue(hits, 2); + } + + // ...and if the mapping function is non-strict, primitive values will + // be wrapped to objects. + for (var v of [0, "str", true]) { + hits = 0; + var mapfn = function h(x) { + assert.deepEqual(this, Object(v)); + hits++; + }; + constructor.from("pq", mapfn, v); + assert.sameValue(hits, 2); + } +} + diff --git a/test/staging/sm/TypedArray/from_typedarray_fastpath_detached.js b/test/staging/sm/TypedArray/from_typedarray_fastpath_detached.js new file mode 100644 index 0000000000..a9c48505d7 --- /dev/null +++ b/test/staging/sm/TypedArray/from_typedarray_fastpath_detached.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure the fast-path when TypedArray.from is called with a TypedArray still +// checks for detached buffers. + +var ta = new Int32Array(4); +$262.detachArrayBuffer(ta.buffer); + +assertThrowsInstanceOf(() => Int32Array.from(ta), TypeError); + diff --git a/test/staging/sm/TypedArray/getter-name.js b/test/staging/sm/TypedArray/getter-name.js new file mode 100644 index 0000000000..c6e95b2500 --- /dev/null +++ b/test/staging/sm/TypedArray/getter-name.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180290; +var summary = 'TypedArray getters should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +let TypedArray = Object.getPrototypeOf(Float32Array.prototype).constructor; + +assert.sameValue(Object.getOwnPropertyDescriptor(TypedArray, Symbol.species).get.name, "get [Symbol.species]"); +assert.sameValue(Object.getOwnPropertyDescriptor(TypedArray.prototype, "buffer").get.name, "get buffer"); +assert.sameValue(Object.getOwnPropertyDescriptor(TypedArray.prototype, "byteLength").get.name, "get byteLength"); +assert.sameValue(Object.getOwnPropertyDescriptor(TypedArray.prototype, "byteOffset").get.name, "get byteOffset"); +assert.sameValue(Object.getOwnPropertyDescriptor(TypedArray.prototype, "length").get.name, "get length"); +assert.sameValue(Object.getOwnPropertyDescriptor(TypedArray.prototype, Symbol.toStringTag).get.name, "get [Symbol.toStringTag]"); + diff --git a/test/staging/sm/TypedArray/has-property-op.js b/test/staging/sm/TypedArray/has-property-op.js new file mode 100644 index 0000000000..80c399f1b8 --- /dev/null +++ b/test/staging/sm/TypedArray/has-property-op.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + var obj = new constructor(5); + + for (var i = 0; i < obj.length; i++) + assert.sameValue(i in obj, true); + + for (var v of [20, 300, -1, 5, -10, Math.pow(2, 32) - 1, -Math.pow(2, 32)]) + assert.sameValue(v in obj, false); + + // Don't inherit elements + obj.__proto__[50] = "hello"; + assert.sameValue(obj.__proto__[50], "hello"); + assert.sameValue(50 in obj, false); + + // Do inherit normal properties + obj.__proto__.a = "world"; + assert.sameValue(obj.__proto__.a, "world"); + assert.sameValue("a" in obj, true); +} + diff --git a/test/staging/sm/TypedArray/includes.js b/test/staging/sm/TypedArray/includes.js new file mode 100644 index 0000000000..724beae029 --- /dev/null +++ b/test/staging/sm/TypedArray/includes.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.includes.length, 1); + + assert.sameValue(new constructor([1, 2, 3]).includes(1), true); + assert.sameValue(new constructor([1, 2, 3]).includes(2), true); + assert.sameValue(new constructor([1, 2, 3]).includes(3), true); + assert.sameValue(new constructor([1, 2, 3]).includes(2, 1), true); + assert.sameValue(new constructor([1, 2, 3]).includes(2, -2), true); + assert.sameValue(new constructor([1, 2, 3]).includes(2, -100), true); + + assert.sameValue(new constructor([1, 2, 3]).includes("2"), false); + assert.sameValue(new constructor([1, 2, 3]).includes(2, 2), false); + assert.sameValue(new constructor([1, 2, 3]).includes(2, -1), false); + assert.sameValue(new constructor([1, 2, 3]).includes(2, 100), false); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var includes = createNewGlobal()[constructor.name].prototype.includes; + assert.sameValue(includes.call(new constructor([1, 2, 3]), 2), true); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.includes.call(invalidReceiver); + }, TypeError, "Assert that reverse fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).includes(2), true); +} + diff --git a/test/staging/sm/TypedArray/indexOf-and-lastIndexOf.js b/test/staging/sm/TypedArray/indexOf-and-lastIndexOf.js new file mode 100644 index 0000000000..4b2b11a58f --- /dev/null +++ b/test/staging/sm/TypedArray/indexOf-and-lastIndexOf.js @@ -0,0 +1,138 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for TypedArray#indexOf. +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.indexOf.length, 1); + + // Works with one argument. + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(0), -1); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(1), 0); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(5), 4); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(6), -1); + assert.sameValue(new constructor([1, 2, 1, 2, 1]).indexOf(1), 0); + + if (isFloatConstructor(constructor)) { + assert.sameValue(new constructor([NaN, 0, -0]).indexOf(NaN), -1); + assert.sameValue(new constructor([NaN, 0, -0]).indexOf(0), 1); + assert.sameValue(new constructor([NaN, 0, -0]).indexOf(-0), 1); + } else { + // [NaN, 0, -0] will be coerced to [0, 0, 0] + assert.sameValue(new constructor([NaN, 0, -0]).indexOf(NaN), -1); + assert.sameValue(new constructor([NaN, 0, -0]).indexOf(0), 0); + assert.sameValue(new constructor([NaN, 0, -0]).indexOf(-0), 0); + } + + // Works with two arguments. + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(1, 1), -1); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(1, -100), 0); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(3, 100), -1); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).indexOf(5, -1), 4); + assert.sameValue(new constructor([1, 2, 1, 2, 1]).indexOf(1, 2), 2); + assert.sameValue(new constructor([1, 2, 1, 2, 1]).indexOf(1, -2), 4); + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.indexOf.call(invalidReceiver); + }, TypeError, "Assert that indexOf fails if this value is not a TypedArray"); + }); + + // test that this.length is never called + assert.sameValue(Object.defineProperty(new constructor([0, 1, 2, 3, 5]), "length", { + get() { + throw new Error("length accessor called"); + } + }).indexOf(1), 1); +} + +for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) { + if (constructor.BYTES_PER_ELEMENT === 2) { + assert.sameValue(new constructor([.1, .2, .3]).indexOf(.2), -1); + assert.sameValue(new constructor([.1, .2, .3]).indexOf(Math.f16round(.2)), 1); + } else if (constructor.BYTES_PER_ELEMENT === 4) { + assert.sameValue(new constructor([.1, .2, .3]).indexOf(.2), -1); + assert.sameValue(new constructor([.1, .2, .3]).indexOf(Math.fround(.2)), 1); + } else { + assert.sameValue(constructor.BYTES_PER_ELEMENT, 8); + assert.sameValue(new constructor([.1, .2, .3]).indexOf(.2), 1); + } +} + +// Tests for TypedArray#lastIndexOf. +for (var constructor of anyTypedArrayConstructors) { + + assert.sameValue(constructor.prototype.lastIndexOf.length, 1); + + // Works with one arguments. + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(0), -1); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(1), 0); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(5), 4); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(6), -1); + assert.sameValue(new constructor([1, 2, 1, 2, 1]).lastIndexOf(1), 4); + + if (isFloatConstructor(constructor)) { + assert.sameValue(new constructor([NaN, 0, -0]).lastIndexOf(NaN), -1); + assert.sameValue(new constructor([NaN, 0, -0]).lastIndexOf(0), 2); + assert.sameValue(new constructor([NaN, 0, -0]).lastIndexOf(-0), 2); + } else { + // [NaN, 0, -0] will be coerced to [0, 0, 0]. + assert.sameValue(new constructor([NaN, 0, -0]).lastIndexOf(NaN), -1); + assert.sameValue(new constructor([NaN, 0, -0]).lastIndexOf(0), 2); + assert.sameValue(new constructor([NaN, 0, -0]).lastIndexOf(-0), 2); + } + + // Works with two arguments. + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(1, 1), 0); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(1, -100), -1); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(3, 100), 2); + assert.sameValue(new constructor([1, 2, 3, 4, 5]).lastIndexOf(5, -1), 4); + assert.sameValue(new constructor([1, 2, 1, 2, 1]).lastIndexOf(1, 2), 2); + assert.sameValue(new constructor([1, 2, 1, 2, 1]).lastIndexOf(1, -2), 2); + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.lastIndexOf.call(invalidReceiver); + }, TypeError, "Assert that lastIndexOf fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(new constructor([0, 1, 2, 3, 5]), "length", { + get() { + throw new Error("length accessor called"); + } + }).lastIndexOf(1), 1); + + // Starts search at last index when fromIndex parameter is absent. + assert.sameValue(new constructor([10, 20, 10]).lastIndexOf(10), 2); + + // Starts search at first index when fromIndex parameter is undefined. + assert.sameValue(new constructor([10, 20, 10]).lastIndexOf(10, undefined), 0); +} + +for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) { + if (constructor.BYTES_PER_ELEMENT === 2) { + assert.sameValue(new constructor([.1, .2, .3]).lastIndexOf(.2), -1); + assert.sameValue(new constructor([.1, .2, .3]).lastIndexOf(Math.f16round(.2)), 1); + } else if (constructor.BYTES_PER_ELEMENT === 4) { + assert.sameValue(new constructor([.1, .2, .3]).lastIndexOf(.2), -1); + assert.sameValue(new constructor([.1, .2, .3]).lastIndexOf(Math.fround(.2)), 1); + } else { + assert.sameValue(constructor.BYTES_PER_ELEMENT, 8); + assert.sameValue(new constructor([.1, .2, .3]).lastIndexOf(.2), 1); + } +} + diff --git a/test/staging/sm/TypedArray/indexOf-never-returns-negative-zero.js b/test/staging/sm/TypedArray/indexOf-never-returns-negative-zero.js new file mode 100644 index 0000000000..df0b739db7 --- /dev/null +++ b/test/staging/sm/TypedArray/indexOf-never-returns-negative-zero.js @@ -0,0 +1,16 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var ta = new Uint8Array(1); +ta[0] = 17; + +assert.sameValue(ta.indexOf(17, -0), +0); + diff --git a/test/staging/sm/TypedArray/iterator-next-with-detached.js b/test/staging/sm/TypedArray/iterator-next-with-detached.js new file mode 100644 index 0000000000..6dcbcf1d88 --- /dev/null +++ b/test/staging/sm/TypedArray/iterator-next-with-detached.js @@ -0,0 +1,82 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function checkResult(actual, expected) +{ + assert.sameValue(actual.value, expected.value); + assert.sameValue(actual.done, expected.done); +} + +if (typeof $262.detachArrayBuffer === "function" && typeof createNewGlobal === "function") +{ + var iteratorFunction = Uint8Array.prototype[Symbol.iterator]; + + + var thisGlobal = this; + var otherGlobal = createNewGlobal(); + + var thisNext = new Uint8Array()[Symbol.iterator]().next + + for (const constructor of typedArrayConstructors) + { + assert.sameValue(new constructor()[Symbol.iterator]().next, thisNext); + + var globals = + [ + [thisGlobal, thisGlobal], + [thisGlobal, otherGlobal], + [otherGlobal, otherGlobal], + [otherGlobal, thisGlobal], + ]; + + for (const [arrayGlobal, bufferGlobal] of globals) + { + var arr, buffer, iterator; + + function arrayBufferIterator() + { + var byteLength = 2 * constructor.BYTES_PER_ELEMENT; + var buf = new bufferGlobal.ArrayBuffer(byteLength); + var tarray = new arrayGlobal[constructor.name](buf); + + tarray[0] = 1; + tarray[1] = 2; + + return [tarray, buf, Reflect.apply(iteratorFunction, tarray, [])]; + } + + [arr, buffer, iterator] = arrayBufferIterator(); + checkResult(thisNext.call(iterator), {value: 1, done: false}); + checkResult(thisNext.call(iterator), {value: 2, done: false}); + checkResult(thisNext.call(iterator), {value: undefined, done: true}); + + // Test an exhausted iterator. + bufferGlobal.$262.detachArrayBuffer(buffer); + checkResult(thisNext.call(iterator), {value: undefined, done: true}); + + // Test an all-but-exhausted iterator. + [arr, buffer, iterator] = arrayBufferIterator(); + checkResult(thisNext.call(iterator), {value: 1, done: false}); + checkResult(thisNext.call(iterator), {value: 2, done: false}); + + bufferGlobal.$262.detachArrayBuffer(buffer); + assertThrowsInstanceOf(() => thisNext.call(iterator), TypeError); + + // Test an unexhausted iterator. + [arr, buffer, iterator] = arrayBufferIterator(); + checkResult(thisNext.call(iterator), {value: 1, done: false}); + + bufferGlobal.$262.detachArrayBuffer(buffer); + assertThrowsInstanceOf(() => thisNext.call(iterator), TypeError); + } + } +} + diff --git a/test/staging/sm/TypedArray/iterator.js b/test/staging/sm/TypedArray/iterator.js new file mode 100644 index 0000000000..eb9b3c28be --- /dev/null +++ b/test/staging/sm/TypedArray/iterator.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that we're using [[ArrayLength]] to determine the number of +// values to produce instead of the length property. + +function testIterationCount(iterator, expectedLength) { + for (let i = 0; i < expectedLength; i++) + assert.sameValue(iterator.next().done, false); + assert.sameValue(iterator.next().done, true); +} + +let i8Array = new Int8Array(4); +Object.defineProperty(i8Array, "length", {value: 0}); +let i8Iterator = i8Array[Symbol.iterator](); +testIterationCount(i8Iterator, 4); + +// Veryify that the length property isn't even touched +i8Array = new Int8Array(); +Object.defineProperty(i8Array, "length", { + get() { + throw TypeError; + } +}); +i8Iterator = i8Array[Symbol.iterator](); +testIterationCount(i8Iterator, 0); + +// Verify that it works for set as well +i8Array = new Uint8Array(1); +// Try setting a high length which would trigger failure +Object.defineProperty(i8Array, "length", {value: 15}); +// Works if the fake length is ignored +(new Uint8Array(4)).set(i8Array, 3); + +// Ensure that it works across globals +let g2 = createNewGlobal(); + +i8Array = new Int8Array(8); +Object.defineProperty(i8Array, "length", {value: 0}); +let iterator = i8Array[Symbol.iterator](); +iterator.next = g2.Array.prototype[Symbol.iterator]().next; +testIterationCount(iterator, 8); + diff --git a/test/staging/sm/TypedArray/join.js b/test/staging/sm/TypedArray/join.js new file mode 100644 index 0000000000..c557c972f8 --- /dev/null +++ b/test/staging/sm/TypedArray/join.js @@ -0,0 +1,57 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.join.length, 1); + + assert.sameValue(new constructor([1, 2, 3]).join(), "1,2,3"); + assert.sameValue(new constructor([1, 2, 3]).join(undefined), "1,2,3"); + assert.sameValue(new constructor([1, 2, 3]).join(null), "1null2null3"); + assert.sameValue(new constructor([1, 2, 3]).join(""), "123"); + assert.sameValue(new constructor([1, 2, 3]).join("+"), "1+2+3"); + assert.sameValue(new constructor([1, 2, 3]).join(.1), "10.120.13"); + assert.sameValue(new constructor([1, 2, 3]).join({toString(){return "foo"}}), "1foo2foo3"); + assert.sameValue(new constructor([1]).join("-"), "1"); + assert.sameValue(new constructor().join(), ""); + assert.sameValue(new constructor().join("*"), ""); + assert.sameValue(new constructor(1).join(), "0"); + assert.sameValue(new constructor(3).join(), "0,0,0"); + + assertThrowsInstanceOf(() => new constructor().join({toString(){throw new TypeError}}), TypeError); + assertThrowsInstanceOf(() => new constructor().join(Symbol()), TypeError); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var join = createNewGlobal()[constructor.name].prototype.join; + assert.sameValue(join.call(new constructor([1, 2, 3]), "\t"), "1\t2\t3"); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.join.call(invalidReceiver); + }, TypeError, "Assert that join fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).join("\0"), "1\0002\0003"); +} + +for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) { + assert.deepEqual(new constructor([null, , NaN]).join(), "0,NaN,NaN"); +} + diff --git a/test/staging/sm/TypedArray/keys.js b/test/staging/sm/TypedArray/keys.js new file mode 100644 index 0000000000..9600c61d54 --- /dev/null +++ b/test/staging/sm/TypedArray/keys.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.keys.length, 0); + assert.sameValue(constructor.prototype.keys.name, "keys"); + + assert.deepEqual([...new constructor(0).keys()], []); + assert.deepEqual([...new constructor(1).keys()], [0]); + assert.deepEqual([...new constructor(2).keys()], [0, 1]); + assert.deepEqual([...new constructor([15]).keys()], [0]); + + var arr = new constructor([1, 2, 3]); + var iterator = arr.keys(); + assert.deepEqual(iterator.next(), {value: 0, done: false}); + assert.deepEqual(iterator.next(), {value: 1, done: false}); + assert.deepEqual(iterator.next(), {value: 2, done: false}); + assert.deepEqual(iterator.next(), {value: undefined, done: true}); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var keys = createNewGlobal()[constructor.name].prototype.keys; + assert.deepEqual([...keys.call(new constructor(2))], [0, 1]); + arr = new (createNewGlobal()[constructor.name])(2); + assert.sameValue([...constructor.prototype.keys.call(arr)].toString(), "0,1"); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.keys.call(invalidReceiver); + }, TypeError, "Assert that keys fails if this value is not a TypedArray"); + }); +} + diff --git a/test/staging/sm/TypedArray/lastIndexOf-never-returns-negative-zero.js b/test/staging/sm/TypedArray/lastIndexOf-never-returns-negative-zero.js new file mode 100644 index 0000000000..763afd0c6e --- /dev/null +++ b/test/staging/sm/TypedArray/lastIndexOf-never-returns-negative-zero.js @@ -0,0 +1,16 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var ta = new Uint8Array(1); +ta[0] = 17; + +assert.sameValue(ta.lastIndexOf(17, -0), +0); + diff --git a/test/staging/sm/TypedArray/map-and-filter.js b/test/staging/sm/TypedArray/map-and-filter.js new file mode 100644 index 0000000000..a20b9594a3 --- /dev/null +++ b/test/staging/sm/TypedArray/map-and-filter.js @@ -0,0 +1,283 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for TypedArray#map. +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.map.length, 1); + + // Basic tests. + assert.compareArray(new constructor([1, 3, 5]).map(v => v * 2), new constructor([2,6,10])); + assert.compareArray(new constructor([-1, 13, 5]).map(v => v - 2), new constructor([-3, 11, 3])); + assert.compareArray(new constructor(10).map(v => v), new constructor(10)); + assert.compareArray(new constructor().map(v => v + 1), new constructor); + assert.compareArray(new constructor([1,2,3]).map(v => v), new constructor([1,2,3])); + + var arr = new constructor([1, 2, 3, 4, 5]); + var sum = 0; + var count = 0; + assert.compareArray(arr.map((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + return v; + }), arr); + assert.sameValue(sum, 15); + assert.sameValue(count, 5); + + // Test that changing elements that have been visited does not affect the result. + var changeArr = new constructor([1,2,3,4,5]); + assert.compareArray(arr.map((v,k) => { + changeArr[k] = v + 1; + return v; + }), new constructor([1,2,3,4,5])); + + // Tests for `thisArg` argument. + function assertThisArg(thisArg, thisValue) { + // In sloppy mode, `this` could be global object or a wrapper of `thisArg`. + assert.compareArray(arr.map(function(v) { + assert.deepEqual(this, thisValue); + return v; + }, thisArg), arr); + + // In strict mode, `this` strictly equals `thisArg`. + assert.compareArray(arr.map(function(v) { + "use strict"; + assert.deepEqual(this, thisArg); + return v; + }, thisArg), arr); + + // Passing `thisArg` has no effect if callback is an arrow function. + var self = this; + assert.compareArray(arr.map((v) => { + assert.sameValue(this, self); + return v; + }, thisArg), arr); + } + assertThisArg([1, 2, 3], [1, 2, 3]); + assertThisArg(Object, Object); + assertThisArg(1, Object(1)); + assertThisArg("1", Object("1")); + assertThisArg(false, Object(false)); + assertThisArg(undefined, this); + assertThisArg(null, this); + + // Throw an exception in the callback. + var sum = 0; + var count = 0; + var thrown = false; + try { + arr.map((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + if (v === 3) { + throw "map"; + } + return v; + }) + } catch(e) { + assert.sameValue(e, "map"); + thrown = true; + } + assert.sameValue(thrown, true); + assert.sameValue(sum, 6); + assert.sameValue(count, 3); + + // There is no callback or callback is not a function. + assertThrowsInstanceOf(() => { + arr.map(); + }, TypeError); + var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./]; + invalidCallbacks.forEach(callback => { + assertThrowsInstanceOf(() => { + arr.map(callback); + }, TypeError); + }) + + // Callback is a generator. + arr.map(function*(){ + throw "This line will not be executed"; + }); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var map = createNewGlobal()[constructor.name].prototype.map; + var sum = 0; + assert.compareArray(map.call(new constructor([1, 2, 3]), v => sum += v), new constructor([1,3,6])); + assert.sameValue(sum, 6); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.filter.call(invalidReceiver, () => true); + }, TypeError, "Assert that map fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.compareArray(Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).map((b) => b), new constructor([1,2,3])); +} + +// Test For TypedArray#filter. +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.filter.length, 1) + + // Basic tests. + assert.compareArray(new constructor([1,2,3]).filter(x => x == x), new constructor([1,2,3])); + assert.compareArray(new constructor([1,2,3,4]).filter(x => x % 2 == 0), new constructor([2,4])); + assert.compareArray(new constructor([1,2,3,4,5]).filter(x => x < 4), new constructor([1,2,3])); + assert.compareArray(new constructor().filter(x => x * 2 == 4), new constructor()); + + var arr = new constructor([1,2,3,4,5]); + var sum = 0; + var count = 0; + assert.compareArray(arr.filter((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + return (v < 4); + }), new constructor([1,2,3])); + assert.sameValue(sum, 15); + assert.sameValue(count, 5); + + // Test that changing elements that have been visited does not affect the result. + var changeArr = new constructor([1,2,3,4,5]); + assert.compareArray(arr.filter((v,k) => { + changeArr[k] = v + 1; + return true; + }), new constructor([1,2,3,4,5])); + + // Tests for `thisArg` argument. + function assertThisArg(thisArg, thisValue) { + // In sloppy mode, `this` could be global object or a wrapper of `thisArg`. + assert.compareArray(arr.filter(function(v) { + assert.deepEqual(this, thisValue); + return v; + }, thisArg), arr); + + // In strict mode, `this` strictly equals `thisArg`. + assert.compareArray(arr.filter(function(v) { + "use strict"; + assert.deepEqual(this, thisArg); + return v; + }, thisArg), arr); + + // Passing `thisArg` has no effect if callback is an arrow function. + var self = this; + assert.compareArray(arr.filter((v) => { + assert.sameValue(this, self); + return v; + }, thisArg), arr); + } + assertThisArg([1, 2, 3], [1, 2, 3]); + assertThisArg(Object, Object); + assertThisArg(1, Object(1)); + assertThisArg("1", Object("1")); + assertThisArg(false, Object(false)); + assertThisArg(undefined, this); + assertThisArg(null, this); + + // Throw an exception in the callback. + var sum = 0; + var count = 0; + var thrown = false; + try { + arr.filter((v, k, o) => { + count++; + sum += v; + assert.sameValue(k, v - 1); + assert.sameValue(o, arr); + if (v === 3) { + throw "filter"; + } + return v; + }) + } catch(e) { + assert.sameValue(e, "filter"); + thrown = true; + } + assert.sameValue(thrown, true); + assert.sameValue(sum, 6); + assert.sameValue(count, 3); + + // There is no callback or callback is not a function. + assertThrowsInstanceOf(() => { + arr.filter(); + }, TypeError); + var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./]; + invalidCallbacks.forEach(callback => { + assertThrowsInstanceOf(() => { + arr.filter(callback); + }, TypeError); + }) + + // Callback is a generator. + arr.filter(function*(){ + throw "This line will not be executed"; + }); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var filter = createNewGlobal()[constructor.name].prototype.filter; + var sum = 0; + assert.compareArray(filter.call(new constructor([1, 2, 3]), v => {sum += v; return true}), + new constructor([1,2,3])); + assert.sameValue(sum, 6); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.filter.call(invalidReceiver, () => true); + }, TypeError, "Assert that filter fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.compareArray(Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).filter((b) => true), new constructor([1,2,3])); +} + +// Test that changing Array.prototype[Symbol.iterator] does not affect the +// behaviour of filter. See https://bugzilla.mozilla.org/show_bug.cgi?id=1121936#c18 +// for more details. + +var arr = new Uint16Array([1,2,3]); + +// save +var old = Array.prototype[Symbol.iterator]; + +Array.prototype[Symbol.iterator] = () => { throw new Error("unreachable"); }; +assert.compareArray(arr.filter(v => true), arr); + +// restore +Array.prototype[Symbol.iterator] = old; + +// Test that defining accessors on Array.prototype doesn't affect the behaviour +// of filter. See https://bugzilla.mozilla.org/show_bug.cgi?id=1121936#c18 +// for more details. +Object.defineProperty(Array.prototype, 0, {configurable: true, get: function() { return 1; }, set: function() { this.b = 1; }}); +assert.compareArray(new Uint16Array([1,2,3]).filter(v => true), new Uint16Array([1,2,3])); +delete Array.prototype[0]; + diff --git a/test/staging/sm/TypedArray/map-species.js b/test/staging/sm/TypedArray/map-species.js new file mode 100644 index 0000000000..c63e93d487 --- /dev/null +++ b/test/staging/sm/TypedArray/map-species.js @@ -0,0 +1,65 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test(constructor, constructor2, from=[1, 2, 3, 4, 5], to=[2, 4, 6, 8, 10]) { + var modifiedConstructor = new constructor(from); + modifiedConstructor.constructor = constructor2; + assert.deepEqual(modifiedConstructor.map(x => x * 2), new constructor2(to)); + var modifiedSpecies = new constructor(from); + modifiedSpecies.constructor = { [Symbol.species]: constructor2 }; + assert.deepEqual(modifiedSpecies.map(x => x * 2), new constructor2(to)); +} + +// same size, same sign + +test(Int8Array, Uint8Array); +test(Int8Array, Uint8ClampedArray); + +test(Uint8Array, Int8Array); +test(Uint8Array, Uint8ClampedArray); + +test(Uint8ClampedArray, Int8Array); +test(Uint8ClampedArray, Uint8Array); + +test(Int16Array, Uint16Array); +test(Uint16Array, Int16Array); + +test(Int32Array, Uint32Array); +test(Uint32Array, Int32Array); + +// same size, different sign + +test(Int8Array, Uint8Array, [-1, -2, -3, -4, -5], [0xFE, 0xFC, 0xFA, 0xF8, 0xF6]); +test(Int8Array, Uint8ClampedArray, [-1, -2, -3, -4, -5], [0, 0, 0, 0, 0]); + +test(Uint8Array, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4, -6, -8, -10]); +test(Uint8ClampedArray, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-2, -4, -6, -8, -10]); + +test(Int16Array, Uint16Array, [-1, -2, -3, -4, -5], [0xFFFE, 0xFFFC, 0xFFFA, 0xFFF8, 0xFFF6]); +test(Uint16Array, Int16Array, [0xFFFF, 0xFFFE, 0xFFFD, 0xFFFC, 0xFFFB], [-2, -4, -6, -8, -10]); + +test(Int32Array, Uint32Array, [-1, -2, -3, -4, -5], [0xFFFFFFFE, 0xFFFFFFFC, 0xFFFFFFFA, 0xFFFFFFF8, 0xFFFFFFF6]); +test(Uint32Array, Int32Array, [0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFC, 0xFFFFFFFB], [-2, -4, -6, -8, -10]); + +// different size + +test(Uint8Array, Uint16Array); +test(Uint16Array, Uint8Array); + +test(Uint8Array, Uint32Array); +test(Uint32Array, Uint8Array); + +test(Uint16Array, Uint32Array); +test(Uint32Array, Uint16Array); + +test(Float32Array, Float64Array); +test(Float64Array, Float32Array); + diff --git a/test/staging/sm/TypedArray/object-defineproperty.js b/test/staging/sm/TypedArray/object-defineproperty.js new file mode 100644 index 0000000000..bafaf65698 --- /dev/null +++ b/test/staging/sm/TypedArray/object-defineproperty.js @@ -0,0 +1,78 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var obj = new Int32Array(2); +obj[0] = 100; + +var throws = [ + // Disallow accessors + {get: undefined}, + {set: undefined}, + {get: undefined, set: undefined}, + {get: function() {}}, + {set: function() {}}, + {get: function() {}, set: function() {}}, + + {configurable: false}, + {enumerable: false}, + {writable: false}, + + {configurable: false, writable: true}, + {enumerable: false, configurable: false}, + + {configurable: false, value: 15} +]; + +for (var desc of throws) { + assertThrowsInstanceOf(function() { Object.defineProperty(obj, 0, desc); }, TypeError); + assertThrowsInstanceOf(function() { Object.defineProperties(obj, {0: desc}); }, TypeError); +} + +Object.defineProperty(obj, 0, {}); +Object.defineProperty(obj, 0, {configurable: true}); +Object.defineProperty(obj, 0, {enumerable: true}); +Object.defineProperty(obj, 0, {writable: true}); + +assert.sameValue(obj[0], 100); + +Object.defineProperty(obj, 0, {configurable: true, value: 15}); +assert.sameValue(obj[0], 15); +Object.defineProperty(obj, 0, {enumerable: true, value: 16}); +assert.sameValue(obj[0], 16); +Object.defineProperty(obj, 0, {writable: true, value: 17}); +assert.sameValue(obj[0], 17); +Object.defineProperty(obj, 0, {value: 18}); +assert.sameValue(obj[0], 18); + +var desc = Object.getOwnPropertyDescriptor(obj, 0); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.value, 18); +assert.sameValue('get' in desc, false); +assert.sameValue('set' in desc, false); + +Object.defineProperties(obj, {0: {value: 20}, 1: {value: 42}}); +assert.sameValue(obj[0], 20); +assert.sameValue(obj[1], 42); + +anyTypedArrayConstructors.forEach(constructor => { + var obj = new constructor(4); + obj[0] = 100; + obj[1] = 200; + + for (var v of [20, 300, -10, Math.pow(2, 32), -Math.pow(2, 32), NaN]) { + Object.defineProperty(obj, 0, {value: v}); + obj[1] = v; + assert.sameValue(obj[0], obj[1]); + } +}); + diff --git a/test/staging/sm/TypedArray/of.js b/test/staging/sm/TypedArray/of.js new file mode 100644 index 0000000000..065acbfb5f --- /dev/null +++ b/test/staging/sm/TypedArray/of.js @@ -0,0 +1,101 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.of.length, 0); + + assert.deepEqual(Object.getOwnPropertyDescriptor(constructor.__proto__, "of"), { + value: constructor.of, + writable: true, + enumerable: false, + configurable: true + }); + + // Basic tests. + assert.sameValue(constructor.of().constructor, constructor); + assert.sameValue(constructor.of() instanceof constructor, true); + assert.deepEqual(constructor.of(10), new constructor([10])); + assert.deepEqual(constructor.of(1, 2, 3), new constructor([1, 2, 3])); + assert.deepEqual(constructor.of("1", "2", "3"), new constructor([1, 2, 3])); + + // This method can't be transplanted to other constructors. + assertThrowsInstanceOf(() => constructor.of.call(Array), TypeError); + assertThrowsInstanceOf(() => constructor.of.call(Array, 1, 2, 3), TypeError); + + var hits = 0; + assert.deepEqual(constructor.of.call(function(len) { + assert.sameValue(arguments.length, 1); + assert.sameValue(len, 3); + hits++; + return new constructor(len); + }, 10, 20, 30), new constructor([10, 20, 30])); + assert.sameValue(hits, 1); + + // Behavior across compartments. + if (typeof createNewGlobal === "function") { + var newC = createNewGlobal()[constructor.name]; + assert.sameValue(newC.of() instanceof newC, true); + assert.sameValue(newC.of() instanceof constructor, false); + assert.sameValue(newC.of.call(constructor) instanceof constructor, true); + } + + // Throws if `this` isn't a constructor. + var invalidConstructors = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + constructor.of, () => {}]; + invalidConstructors.forEach(C => { + assertThrowsInstanceOf(() => { + constructor.of.call(C); + }, TypeError); + }); + + // Throw if `this` is a method definition or a getter/setter function. + assertThrowsInstanceOf(() => { + constructor.of.call({method() {}}.method); + }, TypeError); + assertThrowsInstanceOf(() => { + constructor.of.call(Object.getOwnPropertyDescriptor({get getter() {}}, "getter").get); + }, TypeError); + + // Generators are not legal constructors. + assertThrowsInstanceOf(() => { + constructor.of.call(function*(len) { + return len; + }, "a") + }, TypeError); + + // An exception might be thrown in a strict assignment to the new object's indexed properties. + assertThrowsInstanceOf(() => { + constructor.of.call(function() { + return {get 0() {}}; + }, "a"); + }, TypeError); + + assertThrowsInstanceOf(() => { + constructor.of.call(function() { + return Object("1"); + }, "a"); + }, TypeError); + + assertThrowsInstanceOf(() => { + constructor.of.call(function() { + return Object.create({ + set 0(v) { + throw new TypeError; + } + }); + }, "a"); + }, TypeError); +} + +for (let constructor of anyTypedArrayConstructors.filter(isFloatConstructor)) { + assert.deepEqual(constructor.of(0.1, null, undefined, NaN), new constructor([0.1, 0, NaN, NaN])); +} + diff --git a/test/staging/sm/TypedArray/prototype-constructor-identity.js b/test/staging/sm/TypedArray/prototype-constructor-identity.js new file mode 100644 index 0000000000..0babb8498f --- /dev/null +++ b/test/staging/sm/TypedArray/prototype-constructor-identity.js @@ -0,0 +1,68 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var gTestfile = 'prototype-constructor-identity.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 896116; +var summary = + "Typed array prototypes/constructors should be largely empty, inheriting " + "most functionality from %TypedArray% and %TypedArray%.prototype"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var TypedArray = Object.getPrototypeOf(Int8Array); + +assert.sameValue(TypedArray !== Function.prototype, true, + "%TypedArray% should be in constructors' [[Prototype]] chains"); +assert.sameValue(Object.getPrototypeOf(TypedArray), Function.prototype, + "%TypedArray%.prototype should inherit from Function.prototype"); + +assert.sameValue(TypedArray.prototype.constructor, TypedArray, + "bad %TypedArray%.prototype.constructor"); + +// Check a few different functions we implement are here, as a sanity check. +var typedArrayProps = Object.getOwnPropertyNames(TypedArray.prototype); +assert.sameValue(typedArrayProps.indexOf("copyWithin") >= 0, true); +assert.sameValue(typedArrayProps.indexOf("subarray") >= 0, true); +assert.sameValue(typedArrayProps.indexOf("set") >= 0, true); + +anyTypedArrayConstructors.forEach(function(ctor) { + assert.sameValue(Object.getPrototypeOf(ctor), TypedArray); + + var proto = ctor.prototype; + + // Inherited functions aren't present. + var props = Object.getOwnPropertyNames(proto).sort(); + assert.sameValue(props[0], "BYTES_PER_ELEMENT"); + assert.sameValue(props[1], "constructor"); + if (ctor === Uint8Array) { + assert.sameValue(props.length, 6); + } else { + assert.sameValue(props.length, 2); + } + + // The inheritance chain should be set up properly. + assert.sameValue(Object.getPrototypeOf(proto), TypedArray.prototype, + "prototype should inherit from %TypedArray%.prototype"); +}); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/TypedArray/reduce-and-reduceRight.js b/test/staging/sm/TypedArray/reduce-and-reduceRight.js new file mode 100644 index 0000000000..0c39652593 --- /dev/null +++ b/test/staging/sm/TypedArray/reduce-and-reduceRight.js @@ -0,0 +1,197 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for TypedArray#reduce. +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.reduce.length, 1); + + // Basic tests. + var arr = new constructor([1, 2, 3, 4, 5]); + + assert.sameValue(arr.reduce((previous, current) => previous + current), 15); + assert.sameValue(arr.reduce((previous, current) => current - previous), 3); + + var count = 0; + var sum = 0; + assert.sameValue(arr.reduce((previous, current, index, array) => { + count++; + sum += current; + assert.sameValue(current - 1, index); + assert.sameValue(current, arr[index]); + assert.sameValue(array, arr); + return previous * current; + }), 120); + assert.sameValue(count, 4); + assert.sameValue(sum, 14); + + // Tests for `initialValue` argument. + assert.sameValue(arr.reduce((previous, current) => previous + current, -15), 0); + assert.sameValue(arr.reduce((previous, current) => previous + current, ""), "12345"); + assert.deepEqual(arr.reduce((previous, current) => previous.concat(current), []), [1, 2, 3, 4, 5]); + + // Tests for `this` value. + var global = this; + arr.reduce(function(){ + assert.sameValue(this, global); + }); + arr.reduce(function(){ + "use strict"; + assert.sameValue(this, undefined); + }); + arr.reduce(() => assert.sameValue(this, global)); + + // Throw an exception in the callback. + var count = 0; + var sum = 0; + assertThrowsInstanceOf(() => { + arr.reduce((previous, current, index, array) => { + count++; + sum += current; + if (index === 3) { + throw TypeError("reduce"); + } + }) + }, TypeError); + assert.sameValue(count, 3); + assert.sameValue(sum, 9); + + // There is no callback or callback is not a function. + assertThrowsInstanceOf(() => { + arr.reduce(); + }, TypeError); + var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./]; + invalidCallbacks.forEach(callback => { + assertThrowsInstanceOf(() => { + arr.reduce(callback); + }, TypeError); + }) + + // Callback is a generator. + arr.reduce(function*(){ + throw "This line will not be executed"; + }); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var reduce = createNewGlobal()[constructor.name].prototype.reduce; + assert.sameValue(reduce.call(arr, (previous, current) => Math.min(previous, current)), 1); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(3), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.reduce.call(invalidReceiver, () => {}); + }, TypeError, "Assert that reduce fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(arr, "length", { + get() { + throw new Error("length accessor called"); + } + }).reduce((previous, current) => Math.max(previous, current)), 5); +} + +// Tests for TypedArray#reduceRight. +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.reduceRight.length, 1); + + // Basic tests. + var arr = new constructor([1, 2, 3, 4, 5]); + + assert.sameValue(arr.reduceRight((previous, current) => previous + current), 15); + assert.sameValue(arr.reduceRight((previous, current) => current - previous), 3); + + var count = 0; + var sum = 0; + assert.sameValue(arr.reduceRight((previous, current, index, array) => { + count++; + sum += current; + assert.sameValue(current - 1, index); + assert.sameValue(current, arr[index]); + assert.sameValue(array, arr); + return previous * current; + }), 120); + assert.sameValue(count, 4); + assert.sameValue(sum, 10); + + // Tests for `initialValue` argument. + assert.sameValue(arr.reduceRight((previous, current) => previous + current, -15), 0); + assert.sameValue(arr.reduceRight((previous, current) => previous + current, ""), "54321"); + assert.deepEqual(arr.reduceRight((previous, current) => previous.concat(current), []), [5, 4, 3, 2, 1]); + + // Tests for `this` value. + var global = this; + arr.reduceRight(function(){ + assert.sameValue(this, global); + }); + arr.reduceRight(function(){ + "use strict"; + assert.sameValue(this, undefined); + }); + arr.reduceRight(() => assert.sameValue(this, global)); + + // Throw an exception in the callback. + var count = 0; + var sum = 0; + assertThrowsInstanceOf(() => { + arr.reduceRight((previous, current, index, array) => { + count++; + sum += current; + if (index === 1) { + throw TypeError("reduceRight"); + } + }) + }, TypeError); + assert.sameValue(count, 3); + assert.sameValue(sum, 9); + + // There is no callback or callback is not a function. + assertThrowsInstanceOf(() => { + arr.reduceRight(); + }, TypeError); + var invalidCallbacks = [undefined, null, 1, false, "", Symbol(), [], {}, /./]; + invalidCallbacks.forEach(callback => { + assertThrowsInstanceOf(() => { + arr.reduceRight(callback); + }, TypeError); + }) + + // Callback is a generator. + arr.reduceRight(function*(){ + throw "This line will not be executed"; + }); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var reduceRight = createNewGlobal()[constructor.name].prototype.reduceRight; + assert.sameValue(reduceRight.call(arr, (previous, current) => Math.min(previous, current)), 1); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(3), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.reduceRight.call(invalidReceiver, () => {}); + }, TypeError, "Assert that reduceRight fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + assert.sameValue(Object.defineProperty(arr, "length", { + get() { + throw new Error("length accessor called"); + } + }).reduceRight((previous, current) => Math.max(previous, current)), 5); +} + diff --git a/test/staging/sm/TypedArray/reverse.js b/test/staging/sm/TypedArray/reverse.js new file mode 100644 index 0000000000..dca65068bf --- /dev/null +++ b/test/staging/sm/TypedArray/reverse.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.deepEqual(constructor.prototype.reverse.length, 0); + + assert.deepEqual(new constructor().reverse(), new constructor()); + assert.deepEqual(new constructor(10).reverse(), new constructor(10)); + assert.deepEqual(new constructor([]).reverse(), new constructor([])); + assert.deepEqual(new constructor([1]).reverse(), new constructor([1])); + assert.deepEqual(new constructor([1, 2]).reverse(), new constructor([2, 1])); + assert.deepEqual(new constructor([1, 2, 3]).reverse(), new constructor([3, 2, 1])); + assert.deepEqual(new constructor([1, 2, 3, 4]).reverse(), new constructor([4, 3, 2, 1])); + assert.deepEqual(new constructor([1, 2, 3, 4, 5]).reverse(), new constructor([5, 4, 3, 2, 1])); + assert.deepEqual(new constructor([.1, .2, .3]).reverse(), new constructor([.3, .2, .1])); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var reverse = createNewGlobal()[constructor.name].prototype.reverse; + assert.deepEqual(reverse.call(new constructor([3, 2, 1])), new constructor([1, 2, 3])); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.reverse.call(invalidReceiver); + }, TypeError, "Assert that reverse fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).reverse(); +} + diff --git a/test/staging/sm/TypedArray/seal-and-freeze.js b/test/staging/sm/TypedArray/seal-and-freeze.js new file mode 100644 index 0000000000..6ae64d3147 --- /dev/null +++ b/test/staging/sm/TypedArray/seal-and-freeze.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +// Seal +assert.sameValue(Object.isSealed(new Int32Array(2)), false); +assert.sameValue(Object.isSealed(new Int32Array(0)), false); + +var array = new Int32Array(0); +Object.preventExtensions(array); +assert.sameValue(Object.isSealed(array), true); + +// Non-empty typed arrays can never be sealed, because the elements stay configurable. +array = new Int32Array(1); +array.b = "test"; +Object.preventExtensions(array); +assert.sameValue(Object.isSealed(array), false); +Object.defineProperty(array, "b", {configurable: false}); +assert.sameValue(Object.isSealed(array), false); + +array = new Int32Array(2); +array.b = "test"; +assertThrowsInstanceOf(() => Object.seal(array), TypeError); +assert.sameValue(Object.isSealed(array), false); +assertThrowsInstanceOf(() => array.c = 15, TypeError); + +// Freeze +assert.sameValue(Object.isFrozen(new Int32Array(2)), false); +assert.sameValue(Object.isFrozen(new Int32Array(0)), false); + +// Empty non-extensible typed-array is trivially frozen +var array = new Int32Array(0); +Object.preventExtensions(array); +assert.sameValue(Object.isFrozen(array), true); + +array = new Int32Array(0); +array.b = "test"; +assert.sameValue(Object.isFrozen(array), false); +Object.preventExtensions(array); +assert.sameValue(Object.isFrozen(array), false); +Object.defineProperty(array, "b", {configurable: false, writable: false}); +assert.sameValue(Object.isFrozen(array), true); + +// Non-empty typed arrays can never be frozen, because the elements stay writable +array = new Int32Array(1); +assertThrowsInstanceOf(() => Object.freeze(array), TypeError); +assert.sameValue(Object.isExtensible(array), false); +assert.sameValue(Object.isFrozen(array), false); + diff --git a/test/staging/sm/TypedArray/set-detached-bigint.js b/test/staging/sm/TypedArray/set-detached-bigint.js new file mode 100644 index 0000000000..77ea76233c --- /dev/null +++ b/test/staging/sm/TypedArray/set-detached-bigint.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let ta = new BigInt64Array(10); + +let obj = { + get length() { + $262.detachArrayBuffer(ta.buffer); + return 1; + }, + 0: { + valueOf() { + return "huzzah!"; + } + }, +}; + +// Throws a SyntaxError, because "huzzah!" can't be parsed as a BigInt. +assertThrowsInstanceOf(() => ta.set(obj), SyntaxError); + diff --git a/test/staging/sm/TypedArray/set-detached.js b/test/staging/sm/TypedArray/set-detached.js new file mode 100644 index 0000000000..550a59fcb3 --- /dev/null +++ b/test/staging/sm/TypedArray/set-detached.js @@ -0,0 +1,274 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for detached ArrayBuffer checks in %TypedArray%.prototype.set(array|typedArray, offset). + +function* createTypedArrays(lengths = [0, 1, 4, 4096]) { + for (let length of lengths) { + let buffer = new ArrayBuffer(length * Int32Array.BYTES_PER_ELEMENT); + let typedArray = new Int32Array(buffer); + + yield {typedArray, buffer}; + } +} + +if (typeof $262.detachArrayBuffer === "function") { + class ExpectedError extends Error {} + + // No detached check on function entry. + for (let {typedArray, buffer} of createTypedArrays()) { + $262.detachArrayBuffer(buffer); + + assertThrowsInstanceOf(() => typedArray.set(null, { + valueOf() { + throw new ExpectedError(); + } + }), ExpectedError); + } + + // Check for detached buffer after calling ToInteger(offset). Test with: + // - valid offset, + // - too large offset, + // - and negative offset. + for (let [offset, error] of [[0, TypeError], [1000000, TypeError], [-1, RangeError]]) { + for (let source of [[], [0], new Int32Array(0), new Int32Array(1)]) { + for (let {typedArray, buffer} of createTypedArrays()) { + assertThrowsInstanceOf(() => typedArray.set(source, { + valueOf() { + $262.detachArrayBuffer(buffer); + return offset; + } + }), error); + } + } + } + + // Tests when called with detached typed array as source. + for (let {typedArray} of createTypedArrays()) { + for (let {typedArray: source, buffer: sourceBuffer} of createTypedArrays()) { + $262.detachArrayBuffer(sourceBuffer); + + assertThrowsInstanceOf(() => typedArray.set(source, { + valueOf() { + throw new ExpectedError(); + } + }), ExpectedError); + } + } + + // Check when detaching source buffer in ToInteger(offset). Test with: + // - valid offset, + // - too large offset, + // - and negative offset. + for (let [offset, error] of [[0, TypeError], [1000000, TypeError], [-1, RangeError]]) { + for (let {typedArray} of createTypedArrays()) { + for (let {typedArray: source, buffer: sourceBuffer} of createTypedArrays()) { + assertThrowsInstanceOf(() => typedArray.set(source, { + valueOf() { + $262.detachArrayBuffer(sourceBuffer); + return offset; + } + }), error); + } + } + } + + // Test when target and source use the same underlying buffer and + // ToInteger(offset) detaches the buffer. Test with: + // - same typed array, + // - different typed array, but same element type, + // - and different element type. + for (let src of [ta => ta, ta => new Int32Array(ta.buffer), ta => new Float32Array(ta.buffer)]) { + for (let {typedArray, buffer} of createTypedArrays()) { + let source = src(typedArray); + assertThrowsInstanceOf(() => typedArray.set(source, { + valueOf() { + $262.detachArrayBuffer(buffer); + return 0; + } + }), TypeError); + } + } + + // Test when Get(src, "length") detaches the buffer, but srcLength is 0. + // Also use different offsets to ensure bounds checks use the typed array's + // length value from before detaching the buffer. + for (let offset of [() => 0, ta => Math.min(1, ta.length), ta => Math.max(0, ta.length - 1)]) { + for (let {typedArray, buffer} of createTypedArrays()) { + let source = { + get length() { + $262.detachArrayBuffer(buffer); + return 0; + } + }; + typedArray.set(source, offset(typedArray)); + } + } + + // Test when ToLength(Get(src, "length")) detaches the buffer, but + // srcLength is 0. Also use different offsets to ensure bounds checks use + // the typed array's length value from before detaching the buffer. + for (let offset of [() => 0, ta => Math.min(1, ta.length), ta => Math.max(0, ta.length - 1)]) { + for (let {typedArray, buffer} of createTypedArrays()) { + let source = { + length: { + valueOf() { + $262.detachArrayBuffer(buffer); + return 0; + } + } + }; + typedArray.set(source, offset(typedArray)); + } + } + + // Test no TypeError is thrown when the typed array is detached and + // srcLength > 0. + for (let {typedArray, buffer} of createTypedArrays()) { + let source = { + length: { + valueOf() { + $262.detachArrayBuffer(buffer); + return 1; + } + } + }; + if (typedArray.length === 0) { + assertThrowsInstanceOf(() => typedArray.set(source), RangeError); + } else { + typedArray.set(source); + } + } + + // Same as above, but with side-effect when executing Get(src, "0"). + for (let {typedArray, buffer} of createTypedArrays()) { + let source = { + get 0() { + throw new ExpectedError(); + }, + length: { + valueOf() { + $262.detachArrayBuffer(buffer); + return 1; + } + } + }; + let err = typedArray.length === 0 ? RangeError : ExpectedError; + assertThrowsInstanceOf(() => typedArray.set(source), err); + } + + // Same as above, but with side-effect when executing ToNumber(Get(src, "0")). + for (let {typedArray, buffer} of createTypedArrays()) { + let source = { + get 0() { + return { + valueOf() { + throw new ExpectedError(); + } + }; + }, + length: { + valueOf() { + $262.detachArrayBuffer(buffer); + return 1; + } + } + }; + let err = typedArray.length === 0 ? RangeError : ExpectedError; + assertThrowsInstanceOf(() => typedArray.set(source), err); + } + + // Side-effects when getting the source elements detach the buffer. + for (let {typedArray, buffer} of createTypedArrays()) { + let source = Object.defineProperties([], { + 0: { + get() { + $262.detachArrayBuffer(buffer); + return 1; + } + } + }); + if (typedArray.length === 0) { + assertThrowsInstanceOf(() => typedArray.set(source), RangeError); + } else { + typedArray.set(source); + } + } + + // Side-effects when getting the source elements detach the buffer. Also + // ensure other elements are accessed. + for (let {typedArray, buffer} of createTypedArrays()) { + let accessed = false; + let source = Object.defineProperties([], { + 0: { + get() { + $262.detachArrayBuffer(buffer); + return 1; + } + }, + 1: { + get() { + assert.sameValue(accessed, false); + accessed = true; + return 2; + } + } + }); + if (typedArray.length <= 1) { + assertThrowsInstanceOf(() => typedArray.set(source), RangeError); + } else { + assert.sameValue(accessed, false); + typedArray.set(source); + assert.sameValue(accessed, true); + } + } + + // Side-effects when converting the source elements detach the buffer. + for (let {typedArray, buffer} of createTypedArrays()) { + let source = [{ + valueOf() { + $262.detachArrayBuffer(buffer); + return 1; + } + }]; + if (typedArray.length === 0) { + assertThrowsInstanceOf(() => typedArray.set(source), RangeError); + } else { + typedArray.set(source); + } + } + + // Side-effects when converting the source elements detach the buffer. Also + // ensure other elements are accessed. + for (let {typedArray, buffer} of createTypedArrays()) { + let accessed = false; + let source = [{ + valueOf() { + $262.detachArrayBuffer(buffer); + return 1; + } + }, { + valueOf() { + assert.sameValue(accessed, false); + accessed = true; + return 2; + } + }]; + if (typedArray.length <= 1) { + assertThrowsInstanceOf(() => typedArray.set(source), RangeError); + } else { + assert.sameValue(accessed, false); + typedArray.set(source); + assert.sameValue(accessed, true); + } + } +} + diff --git a/test/staging/sm/TypedArray/set-negative-offset.js b/test/staging/sm/TypedArray/set-negative-offset.js new file mode 100644 index 0000000000..fde5fe5727 --- /dev/null +++ b/test/staging/sm/TypedArray/set-negative-offset.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var gTestfile = "set-negative-offset.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1140752; +var summary = + "%TypedArray%.prototype.set must throw a RangeError when passed a negative " + + "offset"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + new Uint8Array().set([], -1); + throw new Error("didn't throw at all"); +} +catch (e) +{ + assert.sameValue(e instanceof RangeError, true, + "expected RangeError, instead got: " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/TypedArray/set-same-buffer-different-source-target-types.js b/test/staging/sm/TypedArray/set-same-buffer-different-source-target-types.js new file mode 100644 index 0000000000..57a231c7e9 --- /dev/null +++ b/test/staging/sm/TypedArray/set-same-buffer-different-source-target-types.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var gTestfile = "set-same-buffer-different-source-target-types.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 896116; +var summary = + "When setting a typed array from an overlapping typed array of different " + + "element type, copy the source elements into properly-sized temporary " + + "memory, and properly copy them into the target without overflow (of " + + "either source *or* target) when finished"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// smallest 2**n triggering segfaults in a pre-patch build locally, then +// quadrupled in case the boundary ever changes, or is different in some other +// memory-allocating implementation +var srclen = 65536; + +var ta = new Uint8Array(srclen * Float64Array.BYTES_PER_ELEMENT); +var ta2 = new Float64Array(ta.buffer, 0, srclen); +ta.set(ta2); + +// This test mostly exists to check for no crash above, but it's worth testing +// for no uninitialized memory (in case of buffer overflow) being copied into +// the array, too. +for (var i = 0, len = ta.length; i < len; i++) + assert.sameValue(ta[i], 0, "zero-bits double should convert to zero"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/TypedArray/set-tointeger.js b/test/staging/sm/TypedArray/set-tointeger.js new file mode 100644 index 0000000000..642fe5004d --- /dev/null +++ b/test/staging/sm/TypedArray/set-tointeger.js @@ -0,0 +1,104 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test ToInteger conversion in %TypedArray%.prototype.set(array|typedArray, offset). + +let ta = new Int32Array(4); + +// %TypedArray%.prototype.set has two different implementations for typed array +// and non-typed array arguments. Test with both input types. +let emptySources = [[], new Int32Array(0)]; +let nonEmptySource = [[0], new Int32Array(1)]; +let sources = [...emptySources, ...nonEmptySource]; + +// Test when ToInteger(offset) is in (-1, 4). +let validOffsets = [ + // Values in [+0, 4). + 0, + 0.1, + 3, + 3.9, + + // Values in (-1, -0]. + -0, + -0.1, + -0.9, + + NaN, + + // Also include some non-number values. + undefined, + null, + true, + "", + "3", + " 1\t\n", + "some string", + {valueOf() { return 2; }}, +]; + +for (let offset of validOffsets) { + for (let source of sources) { + ta.set(source, offset); + } +} + +// Test when ToInteger(offset) isn't in (-1, 4). +let invalidOffsets = [ + // Values exceeding the typed array's length. + 5, + 2147483647, + 2147483648, + 2147483649, + 4294967295, + 4294967296, + 4294967297, + Infinity, + + // Negative values. + -1, + -1.1, + -2147483647, + -2147483648, + -2147483649, + -4294967295, + -4294967296, + -4294967297, + -Infinity, + + // Also include some non-number values. + "8", + "Infinity", + " Infinity ", + {valueOf() { return 10; }}, +]; + +for (let offset of invalidOffsets) { + for (let source of sources) { + assertThrowsInstanceOf(() => ta.set(source, offset), RangeError); + } +} + +// Test when ToInteger(offset) is in [4, 5). +for (let source of emptySources) { + ta.set(source, 4); + ta.set(source, 4.9); +} +for (let source of nonEmptySource) { + assertThrowsInstanceOf(() => ta.set(source, 4), RangeError); + assertThrowsInstanceOf(() => ta.set(source, 4.9), RangeError); +} + +// ToInteger(symbol value) throws a TypeError. +for (let source of sources) { + assertThrowsInstanceOf(() => ta.set(source, Symbol()), TypeError); +} + diff --git a/test/staging/sm/TypedArray/set-toobject.js b/test/staging/sm/TypedArray/set-toobject.js new file mode 100644 index 0000000000..e854e669d7 --- /dev/null +++ b/test/staging/sm/TypedArray/set-toobject.js @@ -0,0 +1,62 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test ToObject in %TypedArray%.prototype.set(array|typedArray, offset). + +let ta = new Int32Array(4); + +for (let nullOrUndefined of [null, undefined]) { + // ToObject(array) throws a TypeError when |array| is null or undefined. + assertThrowsInstanceOf(() => ta.set(nullOrUndefined), TypeError); + + // ToInteger(offset) is called before ToObject(array). + class ExpectedError extends Error {} + assertThrowsInstanceOf(() => ta.set(nullOrUndefined, { + valueOf() { + throw new ExpectedError(); + } + }), ExpectedError); +} + +// Ensure ta is still initialized with zeros. +assert.compareArray(ta, [0, 0, 0, 0]); + +// %TypedArray%.prototype.set can be called with a string primitive values. +ta.set(""); +assert.compareArray(ta, [0, 0, 0, 0]); + +ta.set("123"); +assert.compareArray(ta, [1, 2, 3, 0]); + +// Throws a RangeError if the length is too large. +assertThrowsInstanceOf(() => ta.set("456789"), RangeError); +assert.compareArray(ta, [1, 2, 3, 0]); + +// When called with other primitive values the typed array contents don't +// change since ToObject().length is zero, i.e. the source object is +// treated the same as an empty array. +for (let value of [true, false, 0, NaN, 123, Infinity, Symbol()]) { + ta.set(value); + assert.compareArray(ta, [1, 2, 3, 0]); +} + +// Repeat test from above when the primitive wrapper prototype has been changed +// to include "length" and an indexed property. +Number.prototype.length = 4; +Number.prototype[3] = -1; +try { + ta.set(456); + assert.compareArray(ta, [0, 0, 0, -1]); +} finally { + delete Number.prototype.length; + delete Number.prototype[3]; +} + diff --git a/test/staging/sm/TypedArray/set-with-receiver.js b/test/staging/sm/TypedArray/set-with-receiver.js new file mode 100644 index 0000000000..b76d282ec2 --- /dev/null +++ b/test/staging/sm/TypedArray/set-with-receiver.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + var receiver = {}; + + var ta = new constructor(1); + assert.sameValue(Reflect.set(ta, 0, 47, receiver), true); + assert.sameValue(ta[0], 0); + assert.sameValue(receiver[0], 47); + + // Out-of-bounds + assert.sameValue(Reflect.set(ta, 10, 47, receiver), true); + assert.sameValue(ta[10], undefined); + assert.sameValue(receiver[10], undefined); + assert.sameValue(Object.hasOwn(receiver, 10), false); + + // Detached + if (typeof $262.detachArrayBuffer === "function" && + !isSharedConstructor(constructor)) + { + $262.detachArrayBuffer(ta.buffer) + + assert.sameValue(ta[0], undefined); + assert.sameValue(Reflect.set(ta, 0, 42, receiver), true); + assert.sameValue(ta[0], undefined); + assert.sameValue(receiver[0], 47); + } +} + diff --git a/test/staging/sm/TypedArray/set-wrapped.js b/test/staging/sm/TypedArray/set-wrapped.js new file mode 100644 index 0000000000..bfcb35e671 --- /dev/null +++ b/test/staging/sm/TypedArray/set-wrapped.js @@ -0,0 +1,90 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test %TypedArray%.prototype.set(typedArray, offset) when called with wrapped +// typed array. + +if (typeof createNewGlobal === "function") { + var otherGlobal = createNewGlobal(); + + function taintLengthProperty(obj) { + Object.defineProperty(obj, "length", { + get() { + assert.sameValue(true, false); + } + }); + } + + for (var TA of anyTypedArrayConstructors) { + var target = new TA(4); + var source = new otherGlobal[TA.name]([10, 20]); + + // Ensure "length" getter accessor isn't called. + taintLengthProperty(source); + + assert.compareArray(target, [0, 0, 0, 0]); + target.set(source, 1); + assert.compareArray(target, [0, 10, 20, 0]); + } + + // Detachment checks are also applied correctly for wrapped typed arrays. + if (typeof $262.detachArrayBuffer === "function") { + // Create typed array from different global (explicit constructor call). + for (var TA of typedArrayConstructors) { + var target = new TA(4); + var source = new otherGlobal[TA.name](1); + taintLengthProperty(source); + + // Called with wrapped typed array, array buffer already detached. + otherGlobal.$262.detachArrayBuffer(source.buffer); + assertThrowsInstanceOf(() => target.set(source), TypeError); + + var source = new otherGlobal[TA.name](1); + taintLengthProperty(source); + + // Called with wrapped typed array, array buffer detached when + // processing offset parameter. + var offset = { + valueOf() { + otherGlobal.$262.detachArrayBuffer(source.buffer); + return 0; + } + }; + assertThrowsInstanceOf(() => target.set(source, offset), TypeError); + } + + // Create typed array from different global (implictly created when + // ArrayBuffer is a CCW). + for (var TA of typedArrayConstructors) { + var target = new TA(4); + var source = new TA(new otherGlobal.ArrayBuffer(1 * TA.BYTES_PER_ELEMENT)); + taintLengthProperty(source); + + // Called with wrapped typed array, array buffer already detached. + otherGlobal.$262.detachArrayBuffer(source.buffer); + assertThrowsInstanceOf(() => target.set(source), TypeError); + + var source = new TA(new otherGlobal.ArrayBuffer(1 * TA.BYTES_PER_ELEMENT)); + taintLengthProperty(source); + + // Called with wrapped typed array, array buffer detached when + // processing offset parameter. + var offset = { + valueOf() { + otherGlobal.$262.detachArrayBuffer(source.buffer); + return 0; + } + }; + assertThrowsInstanceOf(() => target.set(source, offset), TypeError); + } + } +} + diff --git a/test/staging/sm/TypedArray/set.js b/test/staging/sm/TypedArray/set.js new file mode 100644 index 0000000000..4e2bb24989 --- /dev/null +++ b/test/staging/sm/TypedArray/set.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype); + +// %TypedArrayPrototype% has an own "set" function property. +assert.sameValue(TypedArrayPrototype.hasOwnProperty("set"), true); +assert.sameValue(typeof TypedArrayPrototype.set, "function"); + +// The concrete TypedArray prototypes do not have an own "set" property. +assert.sameValue(anyTypedArrayConstructors.every(c => !c.hasOwnProperty("set")), true); + +assert.deepEqual(Object.getOwnPropertyDescriptor(TypedArrayPrototype, "set"), { + value: TypedArrayPrototype.set, + writable: true, + enumerable: false, + configurable: true, +}); + +assert.sameValue(TypedArrayPrototype.set.name, "set"); +assert.sameValue(TypedArrayPrototype.set.length, 1); + diff --git a/test/staging/sm/TypedArray/slice-bitwise-same.js b/test/staging/sm/TypedArray/slice-bitwise-same.js new file mode 100644 index 0000000000..f37150df1a --- /dev/null +++ b/test/staging/sm/TypedArray/slice-bitwise-same.js @@ -0,0 +1,116 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Copies bytes bit-wise if source and target type are the same. +// Only detectable when using floating point typed arrays. +const float32Constructors = anyTypedArrayConstructors.filter(isFloatConstructor) + .filter(c => c.BYTES_PER_ELEMENT === 4); +const float64Constructors = anyTypedArrayConstructors.filter(isFloatConstructor) + .filter(c => c.BYTES_PER_ELEMENT === 8); + +// Also test with cross-compartment typed arrays. +const otherGlobal = createNewGlobal(); +float32Constructors.push(otherGlobal.Float32Array); +float64Constructors.push(otherGlobal.Float64Array); + +function* p(xs, ys) { + for (let x of xs) { + for (let y of ys) { + yield [x, y]; + } + } +} + +const isLittleEndian = new Uint8Array(new Uint16Array([1]).buffer)[0] !== 0; + +function geti64(i32, i) { + return [i32[2 * i + isLittleEndian], i32[2 * i + !isLittleEndian]]; +} + +function seti64(i32, i, [hi, lo]) { + i32[i * 2 + isLittleEndian] = hi; + i32[i * 2 + !isLittleEndian] = lo; +} + +const NaNs = { + Float32: [ + 0x7F800001|0, // smallest SNaN + 0x7FBFFFFF|0, // largest SNaN + 0x7FC00000|0, // smallest QNaN + 0x7FFFFFFF|0, // largest QNaN + 0xFF800001|0, // smallest SNaN, sign-bit set + 0xFFBFFFFF|0, // largest SNaN, sign-bit set + 0xFFC00000|0, // smallest QNaN, sign-bit set + 0xFFFFFFFF|0, // largest QNaN, sign-bit set + ], + Float64: [ + [0x7FF00000|0, 0x00000001|0], // smallest SNaN + [0x7FF7FFFF|0, 0xFFFFFFFF|0], // largest SNaN + [0x7FF80000|0, 0x00000000|0], // smallest QNaN + [0x7FFFFFFF|0, 0xFFFFFFFF|0], // largest QNaN + [0xFFF00000|0, 0x00000001|0], // smallest SNaN, sign-bit set + [0xFFF7FFFF|0, 0xFFFFFFFF|0], // largest SNaN, sign-bit set + [0xFFF80000|0, 0x00000000|0], // smallest QNaN, sign-bit set + [0xFFFFFFFF|0, 0xFFFFFFFF|0], // largest QNaN, sign-bit set + ], +}; + +const cNaN = { + Float32: new Int32Array(new Float32Array([NaN]).buffer)[0], + Float64: geti64(new Int32Array(new Float64Array([NaN]).buffer), 0), +}; + +// Float32 -> Float32 +for (let [sourceConstructor, targetConstructor] of p(float32Constructors, float32Constructors)) { + let len = NaNs.Float32.length; + let f32 = new sourceConstructor(len); + let i32 = new Int32Array(f32.buffer); + f32.constructor = targetConstructor; + + for (let i = 0; i < len; ++i) { + i32[i] = NaNs.Float32[i]; + } + + let rf32 = f32.slice(0); + let ri32 = new Int32Array(rf32.buffer); + + assert.sameValue(rf32.length, len); + assert.sameValue(ri32.length, len); + + // Same bits. + for (let i = 0; i < len; ++i) { + assert.sameValue(ri32[i], NaNs.Float32[i]); + } +} + +// Float64 -> Float64 +for (let [sourceConstructor, targetConstructor] of p(float64Constructors, float64Constructors)) { + let len = NaNs.Float64.length; + let f64 = new sourceConstructor(len); + let i32 = new Int32Array(f64.buffer); + f64.constructor = targetConstructor; + + for (let i = 0; i < len; ++i) { + seti64(i32, i, NaNs.Float64[i]); + } + + let rf64 = f64.slice(0); + let ri32 = new Int32Array(rf64.buffer); + + assert.sameValue(rf64.length, len); + assert.sameValue(ri32.length, 2 * len); + + // Same bits. + for (let i = 0; i < len; ++i) { + assert.compareArray(geti64(ri32, i), NaNs.Float64[i]); + } +} + diff --git a/test/staging/sm/TypedArray/slice-conversion.js b/test/staging/sm/TypedArray/slice-conversion.js new file mode 100644 index 0000000000..2452f2e4bb --- /dev/null +++ b/test/staging/sm/TypedArray/slice-conversion.js @@ -0,0 +1,524 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test conversions to different element types. +let tests = [ + /* Int8Array */ + { + from: Int8Array, + to: Int8Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, -128, -127, -1, 0, 1, 127, -128, -127], + }, + { + from: Int8Array, + to: Uint8Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, 128, 129, 255, 0, 1, 127, 128, 129], + }, + { + from: Int8Array, + to: Uint8ClampedArray, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, 0, 0, 0, 0, 1, 127, 0, 0], + }, + { + from: Int8Array, + to: Int16Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, -128, -127, -1, 0, 1, 127, -128, -127], + }, + { + from: Int8Array, + to: Uint16Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, 65408, 65409, 65535, 0, 1, 127, 65408, 65409], + }, + { + from: Int8Array, + to: Int32Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, -128, -127, -1, 0, 1, 127, -128, -127], + }, + { + from: Int8Array, + to: Uint32Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, 4294967168, 4294967169, 4294967295, 0, 1, 127, 4294967168, 4294967169], + }, + { + from: Int8Array, + to: Float32Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, -128, -127, -1, 0, 1, 127, -128, -127], + }, + { + from: Int8Array, + to: Float64Array, + values: [-129, -128, -127, -1, 0, 1, 127, 128, 129], + expected: [127, -128, -127, -1, 0, 1, 127, -128, -127], + }, + + /* Uint8Array */ + { + from: Uint8Array, + to: Int8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, -128, -127, -2, -1, 0], + }, + { + from: Uint8Array, + to: Uint8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + { + from: Uint8Array, + to: Uint8ClampedArray, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + { + from: Uint8Array, + to: Int16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + { + from: Uint8Array, + to: Uint16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + { + from: Uint8Array, + to: Int32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + { + from: Uint8Array, + to: Uint32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + { + from: Uint8Array, + to: Float32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + { + from: Uint8Array, + to: Float64Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 0], + }, + + /* Uint8ClampedArray */ + { + from: Uint8ClampedArray, + to: Int8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, -128, -127, -2, -1, -1], + }, + { + from: Uint8ClampedArray, + to: Uint8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + { + from: Uint8ClampedArray, + to: Uint8ClampedArray, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + { + from: Uint8ClampedArray, + to: Int16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + { + from: Uint8ClampedArray, + to: Uint16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + { + from: Uint8ClampedArray, + to: Int32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + { + from: Uint8ClampedArray, + to: Uint32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + { + from: Uint8ClampedArray, + to: Float32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + { + from: Uint8ClampedArray, + to: Float64Array, + values: [0, 1, 127, 128, 129, 254, 255, 256], + expected: [0, 1, 127, 128, 129, 254, 255, 255], + }, + + /* Int16Array */ + { + from: Int16Array, + to: Int8Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [-1, 0, 1, 127, -128, -127, -1, 0, 1, 127, -128, -127, -1, 0, 1], + }, + { + from: Int16Array, + to: Uint8Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [255, 0, 1, 127, 128, 129, 255, 0, 1, 127, 128, 129, 255, 0, 1], + }, + { + from: Int16Array, + to: Uint8ClampedArray, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [255, 0, 0, 0, 0, 0, 0, 0, 1, 127, 128, 129, 255, 0, 0], + }, + { + from: Int16Array, + to: Int16Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [32767, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, -32768, -32767], + }, + { + from: Int16Array, + to: Uint16Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [32767, 32768, 32769, 65407, 65408, 65409, 65535, 0, 1, 127, 128, 129, 32767, 32768, 32769], + }, + { + from: Int16Array, + to: Int32Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [32767, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, -32768, -32767], + }, + { + from: Int16Array, + to: Uint32Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [32767, 4294934528, 4294934529, 4294967167, 4294967168, 4294967169, 4294967295, 0, 1, 127, 128, 129, 32767, 4294934528, 4294934529], + }, + { + from: Int16Array, + to: Float32Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [32767, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, -32768, -32767], + }, + { + from: Int16Array, + to: Float64Array, + values: [-32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769], + expected: [32767, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, -32768, -32767], + }, + + /* Uint16Array */ + { + from: Uint16Array, + to: Int8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, -128, -127, -2, -1, 0, -1, 0, 1, -2, -1, 0], + }, + { + from: Uint16Array, + to: Uint8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 0, 255, 0, 1, 254, 255, 0], + }, + { + from: Uint16Array, + to: Uint8ClampedArray, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 255, 255, 255, 255, 255, 255, 0], + }, + { + from: Uint16Array, + to: Int16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, -32768, -32767, -2, -1, 0], + }, + { + from: Uint16Array, + to: Uint16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 0], + }, + { + from: Uint16Array, + to: Int32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 0], + }, + { + from: Uint16Array, + to: Uint32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 0], + }, + { + from: Uint16Array, + to: Float32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 0], + }, + { + from: Uint16Array, + to: Float64Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 0], + }, + + /* Int32Array */ + { + from: Int32Array, + to: Int8Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [-1, 0, 1, -1, 0, 1, 127, -128, -127, -1, 0, 1, 127, -128, -127, -1, 0, 1, -1, 0, 1], + }, + { + from: Int32Array, + to: Uint8Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [255, 0, 1, 255, 0, 1, 127, 128, 129, 255, 0, 1, 127, 128, 129, 255, 0, 1, 255, 0, 1], + }, + { + from: Int32Array, + to: Uint8ClampedArray, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 127, 128, 129, 255, 255, 255, 255, 0, 0], + }, + { + from: Int32Array, + to: Int16Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [-1, 0, 1, 32767, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, -32768, -32767, -1, 0, 1], + }, + { + from: Int32Array, + to: Uint16Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [65535, 0, 1, 32767, 32768, 32769, 65407, 65408, 65409, 65535, 0, 1, 127, 128, 129, 32767, 32768, 32769, 65535, 0, 1], + }, + { + from: Int32Array, + to: Int32Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [2147483647, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, -2147483648, -2147483647], + }, + { + from: Int32Array, + to: Uint32Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [2147483647, 2147483648, 2147483649, 4294934527, 4294934528, 4294934529, 4294967167, 4294967168, 4294967169, 4294967295, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + }, + { + from: Int32Array, + to: Float32Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [2147483648, -2147483648, -2147483648, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483648, -2147483648, -2147483648], + }, + { + from: Int32Array, + to: Float64Array, + values: [-2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649], + expected: [2147483647, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, 0, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, -2147483648, -2147483647], + }, + + /* Uint32Array */ + { + from: Uint32Array, + to: Int8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, -128, -127, -2, -1, 0, -1, 0, 1, -2, -1, 0, -1, 0, 1, -2, -1, 0], + }, + { + from: Uint32Array, + to: Uint8Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 0, 255, 0, 1, 254, 255, 0, 255, 0, 1, 254, 255, 0], + }, + { + from: Uint32Array, + to: Uint8ClampedArray, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0], + }, + { + from: Uint32Array, + to: Int16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, -32768, -32767, -2, -1, 0, -1, 0, 1, -2, -1, 0], + }, + { + from: Uint32Array, + to: Uint16Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 0, 65535, 0, 1, 65534, 65535, 0], + }, + { + from: Uint32Array, + to: Int32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, -2147483648, -2147483647, -2, -1, 0], + }, + { + from: Uint32Array, + to: Uint32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 0], + }, + { + from: Uint32Array, + to: Float32Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483648, 2147483648, 2147483648, 4294967296, 4294967296, 0], + }, + { + from: Uint32Array, + to: Float64Array, + values: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 4294967296], + expected: [0, 1, 127, 128, 129, 254, 255, 256, 32767, 32768, 32769, 65534, 65535, 65536, 2147483647, 2147483648, 2147483649, 4294967294, 4294967295, 0], + }, + + /* Float32Array */ + { + from: Float32Array, + to: Int8Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 0, 0, 0, -1, 0, 1, 127, -128, -127, -1, -1, -1, -1, 0, 0, 1, 1, 1, 1, 127, -128, -127, -1, 0, 1, 0, 0, 0, 0, 0], + }, + { + from: Float32Array, + to: Uint8Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 0, 0, 0, 255, 0, 1, 127, 128, 129, 255, 255, 255, 255, 0, 0, 1, 1, 1, 1, 127, 128, 129, 255, 0, 1, 0, 0, 0, 0, 0], + }, + { + from: Float32Array, + to: Uint8ClampedArray, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 127, 128, 129, 255, 255, 255, 255, 255, 255, 255, 0], + }, + { + from: Float32Array, + to: Int16Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 0, 0, 0, 32767, -32768, -32767, -129, -128, -127, -1, -1, -1, -1, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, -32768, -32767, 0, 0, 0, 0, 0], + }, + { + from: Float32Array, + to: Uint16Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 0, 0, 0, 32767, 32768, 32769, 65407, 65408, 65409, 65535, 65535, 65535, 65535, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, 32768, 32769, 0, 0, 0, 0, 0], + }, + { + from: Float32Array, + to: Int32Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, -2147483648, -2147483648, -2147483648, -32769, -32768, -32767, -129, -128, -127, -1, -1, -1, -1, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, 32768, 32769, -2147483648, -2147483648, -2147483648, 0, 0], + }, + { + from: Float32Array, + to: Uint32Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 2147483648, 2147483648, 2147483648, 4294934527, 4294934528, 4294934529, 4294967167, 4294967168, 4294967169, 4294967295, 4294967295, 4294967295, 4294967295, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, 32768, 32769, 2147483648, 2147483648, 2147483648, 0, 0], + }, + { + from: Float32Array, + to: Float32Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [-Infinity, -2147483648, -2147483648, -2147483648, -32769, -32768, -32767, -129, -128, -127, -1.600000023841858, -1.5, -1.399999976158142, -1, -0, 0, 1, 1.399999976158142, 1.5, 1.600000023841858, 127, 128, 129, 32767, 32768, 32769, 2147483648, 2147483648, 2147483648, Infinity, NaN], + }, + { + from: Float32Array, + to: Float64Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [-Infinity, -2147483648, -2147483648, -2147483648, -32769, -32768, -32767, -129, -128, -127, -1.600000023841858, -1.5, -1.399999976158142, -1, -0, 0, 1, 1.399999976158142, 1.5, 1.600000023841858, 127, 128, 129, 32767, 32768, 32769, 2147483648, 2147483648, 2147483648, Infinity, NaN], + }, + + /* Float64Array */ + { + from: Float64Array, + to: Int8Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, -1, 0, 1, -1, 0, 1, 127, -128, -127, -1, -1, -1, -1, 0, 0, 1, 1, 1, 1, 127, -128, -127, -1, 0, 1, -1, 0, 1, 0, 0], + }, + { + from: Float64Array, + to: Uint8Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 255, 0, 1, 255, 0, 1, 127, 128, 129, 255, 255, 255, 255, 0, 0, 1, 1, 1, 1, 127, 128, 129, 255, 0, 1, 255, 0, 1, 0, 0], + }, + { + from: Float64Array, + to: Uint8ClampedArray, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 127, 128, 129, 255, 255, 255, 255, 255, 255, 255, 0], + }, + { + from: Float64Array, + to: Int16Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, -1, 0, 1, 32767, -32768, -32767, -129, -128, -127, -1, -1, -1, -1, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, -32768, -32767, -1, 0, 1, 0, 0], + }, + { + from: Float64Array, + to: Uint16Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 65535, 0, 1, 32767, 32768, 32769, 65407, 65408, 65409, 65535, 65535, 65535, 65535, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, 32768, 32769, 65535, 0, 1, 0, 0], + }, + { + from: Float64Array, + to: Int32Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 2147483647, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1, -1, -1, -1, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, -2147483648, -2147483647, 0, 0], + }, + { + from: Float64Array, + to: Uint32Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [0, 2147483647, 2147483648, 2147483649, 4294934527, 4294934528, 4294934529, 4294967167, 4294967168, 4294967169, 4294967295, 4294967295, 4294967295, 4294967295, 0, 0, 1, 1, 1, 1, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, 0, 0], + }, + { + from: Float64Array, + to: Float32Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [-Infinity, -2147483648, -2147483648, -2147483648, -32769, -32768, -32767, -129, -128, -127, -1.600000023841858, -1.5, -1.399999976158142, -1, -0, 0, 1, 1.399999976158142, 1.5, 1.600000023841858, 127, 128, 129, 32767, 32768, 32769, 2147483648, 2147483648, 2147483648, Infinity, NaN], + }, + { + from: Float64Array, + to: Float64Array, + values: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + expected: [-Infinity, -2147483649, -2147483648, -2147483647, -32769, -32768, -32767, -129, -128, -127, -1.6, -1.5, -1.4, -1, -0, 0, 1, 1.4, 1.5, 1.6, 127, 128, 129, 32767, 32768, 32769, 2147483647, 2147483648, 2147483649, Infinity, NaN], + }, +]; + +for (let {from, to, values, expected} of tests) { + let ta = new from(values); + ta.constructor = to; + assert.compareArray(ta.slice(0), expected, `${from.name} -> ${to.name}`); +} + diff --git a/test/staging/sm/TypedArray/slice-detached.js b/test/staging/sm/TypedArray/slice-detached.js new file mode 100644 index 0000000000..b132f62af0 --- /dev/null +++ b/test/staging/sm/TypedArray/slice-detached.js @@ -0,0 +1,112 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests for detached ArrayBuffer checks in %TypedArray%.prototype.slice ( start, end ). + +function* createTypedArrays(lengths = [0, 1, 4, 4096]) { + // Test with eagerly created ArrayBuffer. + for (let length of lengths) { + let buffer = new ArrayBuffer(length * Int32Array.BYTES_PER_ELEMENT); + let typedArray = new Int32Array(buffer); + + yield {typedArray, length, buffer() { return buffer; }}; + } + + // Test with lazily created ArrayBuffer. + for (let length of lengths) { + let typedArray = new Int32Array(length); + + yield {typedArray, length, buffer() { return typedArray.buffer; }}; + } +} + +if (typeof $262.detachArrayBuffer === "function") { + // ArrayBuffer is detached when entering slice(). + for (let {typedArray, buffer} of createTypedArrays()) { + $262.detachArrayBuffer(buffer()); + assertThrowsInstanceOf(() => { + typedArray.slice(0); + }, TypeError, "ArrayBuffer is detached on function entry"); + } + + // ArrayBuffer is detached when computing ToInteger(start). + for (let {typedArray, length, buffer} of createTypedArrays()) { + let detached = false; + let start = { + valueOf() { + assert.sameValue(detached, false); + $262.detachArrayBuffer(buffer()); + assert.sameValue(detached, false); + detached = true; + return 0; + } + }; + + // Doesn't throw an error when no bytes are copied. + if (length === 0) { + typedArray.slice(start); + } else { + assertThrowsInstanceOf(() => { + typedArray.slice(start); + }, TypeError, "ArrayBuffer is detached in ToInteger(start)"); + } + assert.sameValue(detached, true, "$262.detachArrayBuffer was called"); + } + + // ArrayBuffer is detached when computing ToInteger(end). + for (let {typedArray, length, buffer} of createTypedArrays()) { + let detached = false; + let end = { + valueOf() { + assert.sameValue(detached, false); + $262.detachArrayBuffer(buffer()); + assert.sameValue(detached, false); + detached = true; + return length; + } + }; + + // Doesn't throw an error when no bytes are copied. + if (length === 0) { + typedArray.slice(0, end); + } else { + assertThrowsInstanceOf(() => { + typedArray.slice(0, end); + }, TypeError, "ArrayBuffer is detached in ToInteger(end)"); + } + assert.sameValue(detached, true, "$262.detachArrayBuffer was called"); + } + + // ArrayBuffer is detached in species constructor. + for (let {typedArray, length, buffer} of createTypedArrays()) { + let detached = false; + typedArray.constructor = { + [Symbol.species]: function(...args) { + assert.sameValue(detached, false); + $262.detachArrayBuffer(buffer()); + assert.sameValue(detached, false); + detached = true; + return new Int32Array(...args); + } + }; + + // Doesn't throw an error when no bytes are copied. + if (length === 0) { + typedArray.slice(0); + } else { + assertThrowsInstanceOf(() => { + typedArray.slice(0); + }, TypeError, "ArrayBuffer is detached in TypedArraySpeciesCreate(...)"); + } + assert.sameValue(detached, true, "$262.detachArrayBuffer was called"); + } +} + diff --git a/test/staging/sm/TypedArray/slice-memcpy.js b/test/staging/sm/TypedArray/slice-memcpy.js new file mode 100644 index 0000000000..55bbb6ab5b --- /dev/null +++ b/test/staging/sm/TypedArray/slice-memcpy.js @@ -0,0 +1,93 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const otherGlobal = createNewGlobal(); + +// Create with new ArrayBuffer and offset. +for (var constructor of typedArrayConstructors) { + const elementSize = constructor.BYTES_PER_ELEMENT; + let ab = new constructor(10).map((v, i) => i).buffer; + let ta = new constructor(ab, 2 * elementSize, 6); + ta.constructor = { + [Symbol.species]: function(len) { + return new constructor(new ArrayBuffer((len + 4) * elementSize), 4 * elementSize); + } + }; + let tb = ta.slice(0); + + assert.compareArray(ta, [2, 3, 4, 5, 6, 7]); + assert.compareArray(tb, [2, 3, 4, 5, 6, 7]); +} + +// Source and target arrays use the same ArrayBuffer, target range before source range. +for (var constructor of typedArrayConstructors) { + const elementSize = constructor.BYTES_PER_ELEMENT; + let ab = new constructor(10).map((v, i) => i).buffer; + let ta = new constructor(ab, 2 * elementSize, 6); + ta.constructor = { + [Symbol.species]: function(len) { + return new constructor(ab, 0, len); + } + }; + let tb = ta.slice(0); + + assert.compareArray(ta, [4, 5, 6, 7, 6, 7]); + assert.compareArray(tb, [2, 3, 4, 5, 6, 7]); + assert.compareArray(new constructor(ab), [2, 3, 4, 5, 6, 7, 6, 7, 8, 9]); +} + +// Source and target arrays use the same ArrayBuffer, target range after source range. +for (var constructor of typedArrayConstructors) { + const elementSize = constructor.BYTES_PER_ELEMENT; + let ab = new constructor(10).map((v, i) => i + 1).buffer; + let ta = new constructor(ab, 0, 6); + ta.constructor = { + [Symbol.species]: function(len) { + return new constructor(ab, 2 * elementSize, len); + } + }; + let tb = ta.slice(0); + + assert.compareArray(ta, [1, 2, 1, 2, 1, 2]); + assert.compareArray(tb, [1, 2, 1, 2, 1, 2]); + assert.compareArray(new constructor(ab), [1, 2, 1, 2, 1, 2, 1, 2, 9, 10]); +} + +// Tricky: Same as above, but with SharedArrayBuffer and different compartments. +if (this.setSharedObject && this.SharedArrayBuffer) { + for (var constructor of typedArrayConstructors) { + const elementSize = constructor.BYTES_PER_ELEMENT; + let ts = new constructor(new SharedArrayBuffer(10 * elementSize)); + for (let i = 0; i < ts.length; i++) { + ts[i] = i + 1; + } + let ab = ts.buffer; + let ta = new constructor(ab, 0, 6); + ta.constructor = { + [Symbol.species]: function(len) { + setSharedObject(ab); + try { + return otherGlobal.eval(` + new ${constructor.name}(getSharedObject(), ${2 * elementSize}, ${len}); + `); + } finally { + setSharedObject(null); + } + } + }; + let tb = ta.slice(0); + + assert.compareArray(ta, [1, 2, 1, 2, 1, 2]); + assert.compareArray(tb, [1, 2, 1, 2, 1, 2]); + assert.compareArray(new constructor(ab), [1, 2, 1, 2, 1, 2, 1, 2, 9, 10]); + } +} + diff --git a/test/staging/sm/TypedArray/slice-species.js b/test/staging/sm/TypedArray/slice-species.js new file mode 100644 index 0000000000..7f460325d4 --- /dev/null +++ b/test/staging/sm/TypedArray/slice-species.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of typedArrayConstructors) { + // Basic tests for our SpeciesConstructor implementation. + var undefConstructor = new constructor(2); + undefConstructor.constructor = undefined; + assert.deepEqual(undefConstructor.slice(1), new constructor(1)); + + assertThrowsInstanceOf(() => { + var strConstructor = new constructor; + strConstructor.constructor = "not a constructor"; + strConstructor.slice(123); + }, TypeError, "Assert that we have an invalid constructor"); + + // If obj.constructor[@@species] is undefined or null then the default + // constructor is used. + var mathConstructor = new constructor(8); + mathConstructor.constructor = Math.sin; + assert.deepEqual(mathConstructor.slice(4), new constructor(4)); + + var undefSpecies = new constructor(2); + undefSpecies.constructor = { [Symbol.species]: undefined }; + assert.deepEqual(undefSpecies.slice(1), new constructor(1)); + + var nullSpecies = new constructor(2); + nullSpecies.constructor = { [Symbol.species]: null }; + assert.deepEqual(nullSpecies.slice(1), new constructor(1)); + + // If obj.constructor[@@species] is different constructor, it should be + // used. + for (var constructor2 of typedArrayConstructors) { + var modifiedConstructor = new constructor(2); + modifiedConstructor.constructor = constructor2; + assert.deepEqual(modifiedConstructor.slice(1), new constructor2(1)); + + var modifiedSpecies = new constructor(2); + modifiedSpecies.constructor = { [Symbol.species]: constructor2 }; + assert.deepEqual(modifiedSpecies.slice(1), new constructor2(1)); + } + + // If obj.constructor[@@species] is neither undefined nor null, and it's + // not a constructor, TypeError should be thrown. + assertThrowsInstanceOf(() => { + var strSpecies = new constructor; + strSpecies.constructor = { [Symbol.species]: "not a constructor" }; + strSpecies.slice(123); + }, TypeError); +} + diff --git a/test/staging/sm/TypedArray/slice.js b/test/staging/sm/TypedArray/slice.js new file mode 100644 index 0000000000..56a3c6a0aa --- /dev/null +++ b/test/staging/sm/TypedArray/slice.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.slice.length, 2); + + assert.compareArray(new constructor().slice(0), new constructor()); + assert.compareArray(new constructor().slice(0, 4), new constructor()); + assert.compareArray(new constructor(10).slice(0, 2), new constructor(2)); + + assert.compareArray(new constructor([1, 2]).slice(1), new constructor([2])); + assert.compareArray(new constructor([1, 2]).slice(0), new constructor([1, 2])); + assert.compareArray(new constructor([1, 2, 3]).slice(-1), new constructor([3])); + assert.compareArray(new constructor([1, 2, 3, 4]).slice(-3, -1), new constructor([2, 3])); + assert.compareArray(new constructor([.1, .2]).slice(0), new constructor([.1, .2])); + + assert.compareArray(new constructor([1, 2]).slice(-3), new constructor([1, 2])); + assert.compareArray(new constructor([1, 2]).slice(0, -3), new constructor()); + assert.compareArray(new constructor([1, 2]).slice(4), new constructor()); + assert.compareArray(new constructor([1, 2]).slice(1, 5), new constructor([2])); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var slice = createNewGlobal()[constructor.name].prototype.slice; + assert.compareArray(slice.call(new constructor([3, 2, 1]), 1), + new constructor([2, 1])); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.slice.call(invalidReceiver, 0); + }, TypeError, "Assert that slice fails if this value is not a TypedArray"); + }); + + // Test that the length getter is never called. + Object.defineProperty(new constructor([1, 2, 3]), "length", { + get() { + throw new Error("length accessor called"); + } + }).slice(2); +} + diff --git a/test/staging/sm/TypedArray/sort-negative-nan.js b/test/staging/sm/TypedArray/sort-negative-nan.js new file mode 100644 index 0000000000..a29a324088 --- /dev/null +++ b/test/staging/sm/TypedArray/sort-negative-nan.js @@ -0,0 +1,141 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test with all floating point typed arrays. +const floatConstructors = anyTypedArrayConstructors.filter(isFloatConstructor); + +// Also test with cross-compartment wrapped typed arrays. +if (typeof createNewGlobal === "function") { + const otherGlobal = createNewGlobal(); + floatConstructors.push(otherGlobal.Float16Array); + floatConstructors.push(otherGlobal.Float32Array); + floatConstructors.push(otherGlobal.Float64Array); +} + +function* prod(xs, ys) { + for (let x of xs) { + for (let y of ys) { + yield [x, y]; + } + } +} + +const isLittleEndian = new Uint8Array(new Uint16Array([1]).buffer)[0] !== 0; + +function seti16(i16, i, v) { + i16[i] = v; +} + +function seti32(i16, i, [hi, lo]) { + i16[i * 2 + isLittleEndian] = hi; + i16[i * 2 + !isLittleEndian] = lo; +} + +function seti64(i16, i, [hi, hiMid, loMid, lo]) { + if (isLittleEndian) { + i16[i * 4] = lo; + i16[i * 4 + 1] = loMid; + i16[i * 4 + 2] = hiMid; + i16[i * 4 + 3] = hi; + } else { + i16[i * 4 + 3] = lo; + i16[i * 4 + 2] = loMid; + i16[i * 4 + 1] = hiMid; + i16[i * 4] = hi; + } +} + +const setInt = { + Float16: seti16, + Float32: seti32, + Float64: seti64, +}; + +const NaNs = { + Float16: [ + 0x7C01|0, // smallest SNaN + 0x7DFF|0, // largest SNaN + 0x7E01|0, // smallest QNaN + 0x7FFF|0, // largest QNaN + 0xFC01|0, // smallest SNaN, sign-bit set + 0xFDFF|0, // largest SNaN, sign-bit set + 0xFE01|0, // smallest QNaN, sign-bit set + 0xFFFF|0, // largest QNaN, sign-bit set + ], + Float32: [ + [0x7F80|0, 0x0001|0], // smallest SNaN + [0x7FBF|0, 0xFFFF|0], // largest SNaN + [0x7FC0|0, 0x0000|0], // smallest QNaN + [0x7FFF|0, 0xFFFF|0], // largest QNaN + [0xFF80|0, 0x0001|0], // smallest SNaN, sign-bit set + [0xFFBF|0, 0xFFFF|0], // largest SNaN, sign-bit set + [0xFFC0|0, 0x0000|0], // smallest QNaN, sign-bit set + [0xFFFF|0, 0xFFFF|0], // largest QNaN, sign-bit set + ], + Float64: [ + [0x7FF0|0, 0x0000|0, 0x0000|0, 0x0001|0], // smallest SNaN + [0x7FF7|0, 0xFFFF|0, 0xFFFF|0, 0xFFFF|0], // largest SNaN + [0x7FF8|0, 0x0000|0, 0x0000|0, 0x0000|0], // smallest QNaN + [0x7FFF|0, 0xFFFF|0, 0xFFFF|0, 0xFFFF|0], // largest QNaN + [0xFFF0|0, 0x0000|0, 0x0000|0, 0x0001|0], // smallest SNaN, sign-bit set + [0xFFF7|0, 0xFFFF|0, 0xFFFF|0, 0xFFFF|0], // largest SNaN, sign-bit set + [0xFFF8|0, 0x0000|0, 0x0000|0, 0x0000|0], // smallest QNaN, sign-bit set + [0xFFFF|0, 0xFFFF|0, 0xFFFF|0, 0xFFFF|0], // largest QNaN, sign-bit set + ], +}; + +// %TypedArray%.prototype.sort +const TypedArraySort = Int32Array.prototype.sort; + +// Test with small and large typed arrays. +const typedArrayLengths = [16, 4096]; + +for (const [TA, taLength] of prod(floatConstructors, typedArrayLengths)) { + let type = TA.name.slice(0, -"Array".length); + let nansLength = NaNs[type].length; + let fta = new TA(taLength); + let i16 = new Int16Array(fta.buffer); + + // Add NaNs in various representations at the start of the typed array. + for (let i = 0; i < nansLength; ++i) { + setInt[type](i16, i, NaNs[type][i]); + } + + // Also add two non-NaN values for testing. + fta[nansLength] = 123; + fta[nansLength + 1] = -456; + + // Sort the array and validate sort() sorted all elements correctly. + TypedArraySort.call(fta); + + // |-456| should be sorted to the start. + assert.sameValue(fta[0], -456); + + // Followed by a bunch of zeros, + const zeroOffset = 1; + const zeroCount = taLength - nansLength - 2; + for (let i = 0; i < zeroCount; ++i) { + assert.sameValue(fta[zeroOffset + i], 0, `At offset: ${zeroOffset + i}`); + } + + // and then |123|. + assert.sameValue(fta[zeroOffset + zeroCount], 123); + + // And finally the NaNs. + const nanOffset = zeroCount + 2; + for (let i = 0; i < nansLength; ++i) { + // We don't assert a specific NaN value is present, because this is + // not required by the spec and we don't provide any guarantees NaN + // values are either unchanged or canonicalized in sort(). + assert.sameValue(fta[nanOffset + i], NaN, `At offset: ${nanOffset + i}`); + } +} + diff --git a/test/staging/sm/TypedArray/sort-non-function.js b/test/staging/sm/TypedArray/sort-non-function.js new file mode 100644 index 0000000000..74953d1bde --- /dev/null +++ b/test/staging/sm/TypedArray/sort-non-function.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// %TypedArray%.prototype.sort throws if the comparator is neither undefined nor +// a callable object. + +// Use a zero length typed array, so we can provide any kind of callable object +// without worrying that the function is actually a valid comparator function. +const typedArray = new Int32Array(0); + +// Throws if the comparator is neither undefined nor callable. +for (let invalidComparator of [null, 0, true, Symbol(), {}, []]) { + assertThrowsInstanceOf(() => typedArray.sort(invalidComparator), TypeError); +} + +// Doesn't throw if the comparator is undefined or a callable object. +for (let validComparator of [undefined, () => {}, Math.max, class {}, new Proxy(function(){}, {})]) { + typedArray.sort(validComparator); +} + +// Also doesn't throw if no comparator was provided at all. +typedArray.sort(); + diff --git a/test/staging/sm/TypedArray/sort_byteoffset.js b/test/staging/sm/TypedArray/sort_byteoffset.js new file mode 100644 index 0000000000..cfa4e191f8 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_byteoffset.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that when sorting TypedArrays we don't +// ignore byte offsets (bug 1290579). + +var sortFunctions = [Int32Array.prototype.sort]; + +// Also test with cross-compartment wrapped typed arrays. +if (typeof createNewGlobal === "function") { + var otherGlobal = createNewGlobal(); + sortFunctions.push(createNewGlobal().Int32Array.prototype.sort); +} + +// The bug manifests itself only with Float arrays, +// but checking everything here just for sanity. + +for (var ctor of anyTypedArrayConstructors) { + var ab = new ArrayBuffer(1025 * ctor.BYTES_PER_ELEMENT); + var ta = new ctor(ab, ctor.BYTES_PER_ELEMENT, 1024); + + // |testArray[0]| shouldn't be modified when sort() is called below. + var testArray = new ctor(ab, 0, 1); + testArray[0] = 1; + + for (var sortFn of sortFunctions) { + sortFn.call(ta); + assert.sameValue(testArray[0], 1); + } +} + diff --git a/test/staging/sm/TypedArray/sort_comparators.js b/test/staging/sm/TypedArray/sort_comparators.js new file mode 100644 index 0000000000..c4e0afd064 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_comparators.js @@ -0,0 +1,41 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that sorts finish even if a comparator adds items +// Note: the array is not expected to be properly sorted. +let outsideArray = new Int32Array([1, 99, 2]); +function addingComparator(x, y) { + if (x == 99 || y == 99) { + outsideArray[0] = 101; + outsideArray[outsideArray.length - 1] = 102; + } + return x - y; +} +outsideArray.sort(addingComparator); +assert.sameValue(outsideArray.every(x => [1, 2, 99, 101, 102].includes(x)), true); + +// Ensure that sorts finish even if a comparator calls sort again +// Note: the array is not expected to be properly sorted. +outsideArray = new Int32Array([1, 99, 2]); +function recursiveComparator(x, y) { + outsideArray.sort(); + return x - y; +} +outsideArray.sort(recursiveComparator); +assert.sameValue(outsideArray.every(x => outsideArray.includes(x)), true) + +// Ensure that NaN's returned from custom comparators behave as / are converted +// to +0s. +let nanComparatorData = [2112, 42, 1111, 34]; +let nanComparatorArray = new Int32Array(nanComparatorData); +nanComparatorArray.sort((x, y) => NaN); +assert.sameValue(nanComparatorData.every(x => nanComparatorArray.includes(x)), true); + diff --git a/test/staging/sm/TypedArray/sort_compare_nan.js b/test/staging/sm/TypedArray/sort_compare_nan.js new file mode 100644 index 0000000000..5d68c451c1 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_compare_nan.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Returning zero from the sort comparator... +let ta = new Int32Array([0, 1]).sort(() => 0); +assert.sameValue(ta[0], 0); +assert.sameValue(ta[1], 1); + +// ... should give the same result as returning NaN. +let tb = new Int32Array([0, 1]).sort(() => NaN); +assert.sameValue(tb[0], 0); +assert.sameValue(tb[1], 1); + diff --git a/test/staging/sm/TypedArray/sort_errors.js b/test/staging/sm/TypedArray/sort_errors.js new file mode 100644 index 0000000000..559b9ba91c --- /dev/null +++ b/test/staging/sm/TypedArray/sort_errors.js @@ -0,0 +1,96 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that TypedArrays throw when attempting to sort a detached ArrayBuffer +if (typeof $262.detachArrayBuffer === "function") { + assertThrowsInstanceOf(() => { + let buffer = new ArrayBuffer(32); + let array = new Int32Array(buffer); + $262.detachArrayBuffer(buffer); + array.sort(); + }, TypeError); +} + +// Ensure detaching buffer in comparator doesn't throw an error. +if (typeof $262.detachArrayBuffer === "function") { + let detached = false; + let ta = new Int32Array(3); + ta.sort(function(a, b) { + if (!detached) { + detached = true; + $262.detachArrayBuffer(ta.buffer); + } + return a - b; + }); + assert.sameValue(detached, true); +} + +// Ensure detachment check doesn't choke on wrapped typed array. +if (typeof createNewGlobal === "function") { + let ta = new Int32Array(3); + let otherGlobal = createNewGlobal(); + otherGlobal.Int32Array.prototype.sort.call(ta, function(a, b) { + return a - b; + }); +} + +// Ensure detaching buffer in comparator doesn't throw an error when the typed array is wrapped. +if (typeof createNewGlobal === "function" && typeof $262.detachArrayBuffer === "function") { + let detached = false; + let ta = new Int32Array(3); + let otherGlobal = createNewGlobal(); + otherGlobal.Int32Array.prototype.sort.call(ta, function(a,b) { + if (!detached) { + detached = true; + $262.detachArrayBuffer(ta.buffer); + } + return a - b; + }); + assert.sameValue(detached, true); +} + +// Ensure that TypedArray.prototype.sort will not sort non-TypedArrays +assertThrowsInstanceOf(() => { + let array = [4, 3, 2, 1]; + Int32Array.prototype.sort.call(array); +}, TypeError); + +assertThrowsInstanceOf(() => { + Int32Array.prototype.sort.call({a: 1, b: 2}); +}, TypeError); + +assertThrowsInstanceOf(() => { + Int32Array.prototype.sort.call(Int32Array.prototype); +}, TypeError); + +assertThrowsInstanceOf(() => { + let buf = new ArrayBuffer(32); + Int32Array.prototype.sort.call(buf); +}, TypeError); + +// Ensure that comparator errors are propagataed +function badComparator(x, y) { + if (x == 99 && y == 99) + throw new TypeError; + return x - y; +} + +assertThrowsInstanceOf(() => { + let array = new Uint8Array([99, 99, 99, 99]); + array.sort(badComparator); +}, TypeError); + +assertThrowsInstanceOf(() => { + let array = new Uint8Array([1, 99, 2, 99]); + array.sort(badComparator); +}, TypeError); + + diff --git a/test/staging/sm/TypedArray/sort_globals.js b/test/staging/sm/TypedArray/sort_globals.js new file mode 100644 index 0000000000..963da895a8 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_globals.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// TypedArray.prototype.sort should work across globals +let g2 = createNewGlobal(); +assert.compareArray( + Int32Array.prototype.sort.call(new g2.Int32Array([3, 2, 1])), + new Int32Array([1, 2, 3]) +); + diff --git a/test/staging/sm/TypedArray/sort_large_countingsort.js b/test/staging/sm/TypedArray/sort_large_countingsort.js new file mode 100644 index 0000000000..b0b1b79d75 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_large_countingsort.js @@ -0,0 +1,59 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Counting sort instead of radix sort is only used for large two-byte typed arrays. +const TwoByteTypedArrays = anyTypedArrayConstructors.filter(ta => ta.BYTES_PER_ELEMENT === 2); + +// The typed array must be large enough to prefer counting sort instead of +// radix sort. +// +// The exact condition is: 65536 * (sizeof(size_t) / sizeof(T)) - constant. +// +// Where `sizeof(T) == 2` and `sizeof(size_t)` is either 4 (32-bit) or 8 (64-bit). +// Use `sizeof(size_t) == 8` which works on both 32- and 64-bit targets. +const LARGE_LENGTH = 65536 * 4; + +for (let TA of TwoByteTypedArrays) { + // Create a large enough typed array. + let ta = new TA(LARGE_LENGTH); + + // Fill the typed array with the smallest value depending on its type. + let smallest = isFloatConstructor(TA) ? -Infinity : + isUnsignedConstructor(TA) ? 0 : -32768; + ta.fill(smallest); + + // Write the sample values into the middle of the typed array, so we can + // easily determine if the sort operation worked correctly. + const offset = 100_000; + + // Write all possible values into the array. Use the unsigned representation + // to ensure all possible byte patterns are used. + let unsigned = new Uint16Array(ta.buffer); + for (let i = 0; i < 65536; ++i) { + unsigned[offset + i] = i; + } + + // Sort the typed array. + ta.sort(); + + // The smallest value is moved to the start. These are exactly 1 + 65536 * 3 + // elements. + for (let i = 0; i <= 65536 * 3; ++i) { + assert.sameValue(ta[i], smallest); + } + + // The last 65536 elements are sorted in order. + for (let i = 65536 * 3; i < ta.length - 1; ++i) { + // Not `ta[i] < ta[i + 1]` in order to handle NaN values correctly. + assert.sameValue(!(ta[i] > ta[i + 1]), true); + } +} + diff --git a/test/staging/sm/TypedArray/sort_modifications.js b/test/staging/sm/TypedArray/sort_modifications.js new file mode 100644 index 0000000000..c9c917a1ea --- /dev/null +++ b/test/staging/sm/TypedArray/sort_modifications.js @@ -0,0 +1,82 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const TAConstructors = [ + Int8Array, + Uint8Array, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Uint8ClampedArray, + Float32Array, + Float64Array, + BigInt64Array, + BigUint64Array, +].concat(this.Float16Array ?? []); + +// Use different size classes to catch any implementation-specific +// optimisations. +const sizes = [ + 4, 8, 64, 128, 1024 +]; + +function ToNumeric(TA) { + if (TA === BigInt64Array || TA === BigUint64Array) { + return BigInt; + } + return Number; +} + +function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : 0; +} + +function descending(a, b) { + return -ascending(a, b); +} + +for (let TA of TAConstructors) { + let toNumeric = ToNumeric(TA); + for (let size of sizes) { + let sorted = new TA(size); + + // Fill with |1..size| and then sort to account for wrap-arounds. + for (let i = 0; i < size; ++i) { + sorted[i] = toNumeric(i + 1); + } + sorted.sort(); + + // Create a copy in descending order. + let ta = new TA(sorted); + ta.sort(descending); + + // Sort the copy in ascending order and on the first call reset all + // elements to zero. + let called = false; + ta.sort(function(a, b) { + if (!called) { + called = true; + ta.fill(toNumeric(0)); + } + return ascending(a, b); + }); + + // Ensure the comparator function was called. + assert.sameValue(called, true); + + // All elements should be sorted correctly. No elements should be zero. + for (let i = 0; i < size; ++i) { + assert.sameValue(ta[i], sorted[i], `${TA.name} at index ${i} for size ${size}`); + } + } +} + diff --git a/test/staging/sm/TypedArray/sort_small.js b/test/staging/sm/TypedArray/sort_small.js new file mode 100644 index 0000000000..99e2838830 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_small.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const testCases = { + // Pre-sorted test data, it's important that these arrays remain in ascending order. + [Int8Array.name]: [[-128, 127]], + [Int16Array.name]: [[-32768, -999, 1942, 32767]], + [Int32Array.name]: [[-2147483648, -320000, -244000, 2147483647]], + [Uint8Array.name]: [[255]], + [Uint16Array.name]: [[0, 65535, 65535]], + [Uint32Array.name]: [[0, 987632, 4294967295]], + [Uint8ClampedArray.name]: [[255]], + + // Test the behavior in the default comparator as described in 22.2.3.26. + // The spec boils down to, -0s come before +0s, and NaNs always come last. + // Float Arrays are used because all other types convert -0 and NaN to +0. + [Float16Array.name]: [ + [-2147483647, -2147483646.99, -0, 0, 2147483646.99, NaN], + [1/undefined, NaN, Number.NaN] + ], + [Float32Array.name]: [ + [-2147483647, -2147483646.99, -0, 0, 2147483646.99, NaN], + [1/undefined, NaN, Number.NaN] + ], + [Float64Array.name]: [ + [-2147483646.99, -0, 0, 4147483646.99, NaN], + [1/undefined, NaN, Number.NaN] + ], +}; + +// Sort every possible permutation of an arrays +function sortAllPermutations(dataType, testData) { + let reference = new dataType(testData); + for (let permutation of Permutations(testData)) + assert.deepEqual((new dataType(permutation)).sort(), reference); +} + +for (let constructor of sharedTypedArrayConstructors) { + for (let data of testCases[constructor.name]) { + sortAllPermutations(constructor, data); + } +} + diff --git a/test/staging/sm/TypedArray/sort_snans.js b/test/staging/sm/TypedArray/sort_snans.js new file mode 100644 index 0000000000..8ddf7e96ce --- /dev/null +++ b/test/staging/sm/TypedArray/sort_snans.js @@ -0,0 +1,88 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that signaling NaN's don't cause problems while sorting + +function getNaNArray(length) { + let a = []; + for (let i = 0; i < length; i++) + a.push(NaN); + return a; +} + +// Test every skipNth value in some range n, where start <= n <= end +// and start/stop should be 32-bit integers with bit patterns that +// form Float32 NaNs. +function testFloat32NaNRanges(start, end) { + let skipN = 10e3; + + // sample the space of possible NaNs to save time + let sampleSize = Math.floor((end - start)/ skipN); + + let NaNArray = new Float32Array(getNaNArray(sampleSize)); + let buffer = new ArrayBuffer(4 * sampleSize); + let uintView = new Uint32Array(buffer); + let floatView = new Float32Array(buffer); + + uintView[0] = start; + for (let i = 1; i < sampleSize; i++) { + uintView[i] = uintView[0] + (i * skipN); + } + + floatView.sort(); + assert.deepEqual(floatView, NaNArray); +} + +// Test every skipNth value in some range n, where start <= n <= end +// and startHi, startLow and endHi, endLow should be 32-bit integers which, +// when combined (Hi + Low), form Float64 NaNs. +function testFloat64NaNRanges(startHi, startLow, endHi, endLow) { + + // Swap on big endian platforms + if (new Uint32Array(new Uint8Array([1,2,3,4]).buffer)[0] === 0x01020304) { + [startHi, startLow] = [startLow, startHi]; + [endHi, endLow] = [endLow, endHi]; + } + + let skipN = 10e6; + + let sampleSizeHi = Math.floor((endHi - startHi)/skipN); + let sampleSizeLow = Math.floor((endLow - startLow)/skipN); + + let NaNArray = new Float64Array(getNaNArray(sampleSizeHi + sampleSizeLow)); + let buffer = new ArrayBuffer(8 * (sampleSizeHi + sampleSizeLow)); + let uintView = new Uint32Array(buffer); + let floatView = new Float64Array(buffer); + + // Fill in all of the low bits first. + for (let i = 0; i <= sampleSizeLow; i++) { + uintView[i * 2] = startLow + (i * skipN); + uintView[(i * 2) + 1] = startHi; + } + + // Then the high bits. + for (let i = sampleSizeLow; i <= sampleSizeLow + sampleSizeHi; i++) { + uintView[i * 2] = endLow; + uintView[(i * 2) + 1] = startHi + ((i - sampleSizeLow) * skipN); + } + + floatView.sort(); + assert.deepEqual(floatView, NaNArray); +} + +// Float32 Signaling NaN ranges +testFloat32NaNRanges(0x7F800001, 0x7FBFFFFF); +testFloat32NaNRanges(0xFF800001, 0xFFBFFFFF); + +// Float64 Signaling NaN ranges +testFloat64NaNRanges(0x7FF00000, 0x00000001, 0x7FF7FFFF, 0xFFFFFFFF); +testFloat64NaNRanges(0xFFF00000, 0x00000001, 0xFFF7FFFF, 0xFFFFFFFF); + diff --git a/test/staging/sm/TypedArray/sort_sorted.js b/test/staging/sm/TypedArray/sort_sorted.js new file mode 100644 index 0000000000..a7c6fe96a3 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_sorted.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function SortedAscending(length) { + var array = new Int32Array(length); + for (var i = 0; i < length; ++i) + array[i] = i + 1; + + array.sort((x, y) => x - y); + + for (var i = 0; i < length; ++i) + assert.sameValue(i + 1, array[i], `Mismatch at index=${i}, length=${length}`); +} + +for (var i = 0; i < 256; ++i) + SortedAscending(i); + +function SortedDescending(length) { + var array = new Int32Array(length); + for (var i = 0; i < length; ++i) + array[i] = length - i; + + array.sort((x, y) => x - y); + + for (var i = 0; i < length; ++i) + assert.sameValue(i + 1, array[i], `Mismatch at index=${i}, length=${length}`); +} + +for (var i = 0; i < 256; ++i) + SortedDescending(i); + diff --git a/test/staging/sm/TypedArray/sort_stable.js b/test/staging/sm/TypedArray/sort_stable.js new file mode 100644 index 0000000000..56e2c39386 --- /dev/null +++ b/test/staging/sm/TypedArray/sort_stable.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test with different lengths to cover the case when InsertionSort is resp. +// is not called. +for (let i = 2; i <= 10; ++i) { + let length = 2 ** i; + let ta = new Int8Array(length); + + ta[0] = 2; + ta[1] = 1; + ta[2] = 0; + + for (let i = 3; i < length; ++i) { + ta[i] = 4; + } + + ta.sort((a, b) => (a/4|0) - (b/4|0)); + + assert.sameValue(ta[0], 2); + assert.sameValue(ta[1], 1); + assert.sameValue(ta[2], 0); +} + diff --git a/test/staging/sm/TypedArray/sorting_buffer_access.js b/test/staging/sm/TypedArray/sorting_buffer_access.js new file mode 100644 index 0000000000..1ce18eb522 --- /dev/null +++ b/test/staging/sm/TypedArray/sorting_buffer_access.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that when sorting arrays of size greater than 128, which +// calls RadixSort under the hood, we don't access the 'buffer' +// property of the typed array directly. + + +// The buggy behavior in the RadixSort is only exposed when we use +// float arrays, but checking everything just to be sure. +for (var ctor of anyTypedArrayConstructors) { + var testArray = new ctor(1024); + Object.defineProperty(testArray, "buffer", { get() { throw new Error("FAIL: Buffer accessed directly"); } }); + testArray.sort(); +} + diff --git a/test/staging/sm/TypedArray/subarray-species.js b/test/staging/sm/TypedArray/subarray-species.js new file mode 100644 index 0000000000..96e6afc4fc --- /dev/null +++ b/test/staging/sm/TypedArray/subarray-species.js @@ -0,0 +1,71 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test(constructor, constructor2, from=[1, 2, 3, 4, 5], to=[3, 4], begin=2, end=4) { + var modifiedConstructor = new constructor(from); + modifiedConstructor.constructor = constructor2; + assert.deepEqual(modifiedConstructor.subarray(begin, end), new constructor2(to)); + var modifiedSpecies = new constructor(from); + modifiedSpecies.constructor = { [Symbol.species]: constructor2 }; + assert.deepEqual(modifiedSpecies.subarray(begin, end), new constructor2(to)); +} + +// same size, same sign + +test(Int8Array, Uint8Array); +test(Int8Array, Uint8ClampedArray); + +test(Uint8Array, Int8Array); +test(Uint8Array, Uint8ClampedArray); + +test(Uint8ClampedArray, Int8Array); +test(Uint8ClampedArray, Uint8Array); + +test(Int16Array, Uint16Array); +test(Uint16Array, Int16Array); + +test(Int32Array, Uint32Array); +test(Uint32Array, Int32Array); + +// same size, different sign + +test(Int8Array, Uint8Array, [-1, -2, -3, -4, -5], [0xFD, 0xFC]); +test(Int8Array, Uint8ClampedArray, [-1, -2, -3, -4, -5], [0xFD, 0xFC]); + +test(Uint8Array, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-3, -4]); +test(Uint8ClampedArray, Int8Array, [0xFF, 0xFE, 0xFD, 0xFC, 0xFB], [-3, -4]); + +test(Int16Array, Uint16Array, [-1, -2, -3, -4, -5], [0xFFFD, 0xFFFC]); +test(Uint16Array, Int16Array, [0xFFFF, 0xFFFE, 0xFFFD, 0xFFFC, 0xFFFB], [-3, -4]); + +test(Int32Array, Uint32Array, [-1, -2, -3, -4, -5], [0xFFFFFFFD, 0xFFFFFFFC]); +test(Uint32Array, Int32Array, [0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFD, 0xFFFFFFFC, 0xFFFFFFFB], [-3, -4]); + +// different size + +// To avoid handling endian, use ArrayBuffer as an argument. +var a = new Int8Array([0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0, + 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, + 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, + 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x0F]); + +test(Uint8Array, Uint16Array, a.buffer, a.slice(2, 6).buffer); +test(Uint16Array, Uint8Array, a.buffer, a.slice(4, 6).buffer); + +test(Uint8Array, Uint32Array, a.buffer, a.slice(4, 12).buffer, 4, 6); +test(Uint32Array, Uint8Array, a.buffer, a.slice(8, 10).buffer); + +test(Uint16Array, Uint32Array, a.buffer, a.slice(4, 12).buffer); +test(Uint32Array, Uint16Array, a.buffer, a.slice(8, 12).buffer); + +test(Float32Array, Float64Array, a.buffer, a.slice(8, 24).buffer); +test(Float64Array, Float32Array, a.buffer, a.slice(16, 24).buffer); + diff --git a/test/staging/sm/TypedArray/subarray.js b/test/staging/sm/TypedArray/subarray.js new file mode 100644 index 0000000000..fb0ab881d3 --- /dev/null +++ b/test/staging/sm/TypedArray/subarray.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Bug 1291003 +if (typeof $262.detachArrayBuffer === "function") { + for (let constructor of typedArrayConstructors) { + const elementSize = constructor.BYTES_PER_ELEMENT; + + let targetOffset; + let buffer = new ArrayBuffer(2 * elementSize); + let typedArray = new constructor(buffer, 1 * elementSize, 1); + typedArray.constructor = { + [Symbol.species]: function(ab, offset, length) { + targetOffset = offset; + return new constructor(1); + } + }; + + let beginIndex = { + valueOf() { + $262.detachArrayBuffer(buffer); + return 0; + } + }; + typedArray.subarray(beginIndex); + + assert.sameValue(targetOffset, 1 * elementSize); + } +} + diff --git a/test/staging/sm/TypedArray/test-integrity-level-detached.js b/test/staging/sm/TypedArray/test-integrity-level-detached.js new file mode 100644 index 0000000000..b4cc8e0216 --- /dev/null +++ b/test/staging/sm/TypedArray/test-integrity-level-detached.js @@ -0,0 +1,85 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const EMPTY = 0; +const INLINE_STORAGE = 10; +const NON_INLINE_STORAGE = 1024; + +class DetachedInt32Array extends Int32Array { + constructor(...args) { + super(...args); + $262.detachArrayBuffer(this.buffer); + } +} + +// Empty typed arrays can be sealed. +{ + let ta = new DetachedInt32Array(EMPTY); + Object.seal(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Non-empty typed arrays can be sealed, but calling TestIntegrityLevel will +// throw on detached typed arrays. +for (let length of [INLINE_STORAGE, NON_INLINE_STORAGE]) { + let ta = new DetachedInt32Array(length); + Object.seal(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Empty typed arrays can be frozen. +{ + let ta = new DetachedInt32Array(EMPTY); + Object.freeze(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Non-empty typed arrays cannot be frozen. +for (let length of [INLINE_STORAGE, NON_INLINE_STORAGE]) { + let ta = new DetachedInt32Array(length); + Object.freeze(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Non-extensible empty typed arrays are sealed and frozen. +{ + let ta = new DetachedInt32Array(EMPTY); + Object.preventExtensions(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Calling TestIntegrityLevel will throw on detached typed arrays with non-zero +// length. +for (let length of [INLINE_STORAGE, NON_INLINE_STORAGE]) { + let ta = new DetachedInt32Array(length); + Object.preventExtensions(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + + diff --git a/test/staging/sm/TypedArray/test-integrity-level.js b/test/staging/sm/TypedArray/test-integrity-level.js new file mode 100644 index 0000000000..b9a8178057 --- /dev/null +++ b/test/staging/sm/TypedArray/test-integrity-level.js @@ -0,0 +1,76 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const EMPTY = 0; +const INLINE_STORAGE = 10; +const NON_INLINE_STORAGE = 1024; + +// Empty typed arrays can be sealed. +{ + let ta = new Int32Array(EMPTY); + Object.seal(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Non-empty typed arrays cannot be sealed. +for (let length of [INLINE_STORAGE, NON_INLINE_STORAGE]) { + let ta = new Int32Array(length); + assertThrowsInstanceOf(() => Object.seal(ta), TypeError); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), false); + assert.sameValue(Object.isFrozen(ta), false); +} + +// Empty typed arrays can be frozen. +{ + let ta = new Int32Array(EMPTY); + Object.freeze(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Non-empty typed arrays cannot be frozen. +for (let length of [INLINE_STORAGE, NON_INLINE_STORAGE]) { + let ta = new Int32Array(length); + assertThrowsInstanceOf(() => Object.freeze(ta), TypeError); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), false); + assert.sameValue(Object.isFrozen(ta), false); +} + +// Non-extensible empty typed arrays are sealed and frozen. +{ + let ta = new Int32Array(EMPTY); + Object.preventExtensions(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), true); + assert.sameValue(Object.isFrozen(ta), true); +} + +// Non-extensible non-empty typed arrays are neither sealed nor frozen. +for (let length of [INLINE_STORAGE, NON_INLINE_STORAGE]) { + let ta = new Int32Array(length); + Object.preventExtensions(ta); + + assert.sameValue(Object.isExtensible(ta), false); + assert.sameValue(Object.isSealed(ta), false); + assert.sameValue(Object.isFrozen(ta), false); +} + + diff --git a/test/staging/sm/TypedArray/toLocaleString-detached.js b/test/staging/sm/TypedArray/toLocaleString-detached.js new file mode 100644 index 0000000000..708d8b1b23 --- /dev/null +++ b/test/staging/sm/TypedArray/toLocaleString-detached.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof $262.detachArrayBuffer === "function") { + const originalNumberToLocaleString = Number.prototype.toLocaleString; + + // Throws if array buffer is detached. + for (let constructor of typedArrayConstructors) { + let typedArray = new constructor(42); + $262.detachArrayBuffer(typedArray.buffer); + assertThrowsInstanceOf(() => typedArray.toLocaleString(), TypeError); + } + + // Doesn't throw a TypeError if detached in Number.prototype.toLocaleString. + for (let constructor of typedArrayConstructors) { + Number.prototype.toLocaleString = function() { + "use strict"; + if (!detached) { + $262.detachArrayBuffer(typedArray.buffer); + detached = true; + } + return this; + }; + + // No error for single element arrays. + let detached = false; + let typedArray = new constructor(1); + assert.sameValue(typedArray.toLocaleString(), "0"); + assert.sameValue(detached, true); + + // And no error if more than one element is present. + detached = false; + typedArray = new constructor(2); + assert.sameValue(typedArray.toLocaleString(), "0,"); + assert.sameValue(detached, true); + } + Number.prototype.toLocaleString = originalNumberToLocaleString; +} + diff --git a/test/staging/sm/TypedArray/toLocaleString-nointl.js b/test/staging/sm/TypedArray/toLocaleString-nointl.js new file mode 100644 index 0000000000..c412a26f1d --- /dev/null +++ b/test/staging/sm/TypedArray/toLocaleString-nointl.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof Intl !== "object") { + const localeSep = [,,].toLocaleString(); + + const originalNumberToLocaleString = Number.prototype.toLocaleString; + + // Ensure no arguments are passed to the array elements. + for (let constructor of anyTypedArrayConstructors) { + Number.prototype.toLocaleString = function() { + assert.sameValue(arguments.length, 0); + return "pass"; + }; + + // Single element case. + assert.sameValue(new constructor(1).toLocaleString(), "pass"); + + // More than one element. + assert.sameValue(new constructor(2).toLocaleString(), "pass" + localeSep + "pass"); + } + Number.prototype.toLocaleString = originalNumberToLocaleString; + + // Ensure no arguments are passed to the array elements even if supplied. + for (let constructor of anyTypedArrayConstructors) { + Number.prototype.toLocaleString = function() { + assert.sameValue(arguments.length, 0); + return "pass"; + }; + let locales = {}; + let options = {}; + + // Single element case. + assert.sameValue(new constructor(1).toLocaleString(locales, options), "pass"); + + // More than one element. + assert.sameValue(new constructor(2).toLocaleString(locales, options), "pass" + localeSep + "pass"); + } + Number.prototype.toLocaleString = originalNumberToLocaleString; +} + diff --git a/test/staging/sm/TypedArray/toLocaleString.js b/test/staging/sm/TypedArray/toLocaleString.js new file mode 100644 index 0000000000..5769f0eb5f --- /dev/null +++ b/test/staging/sm/TypedArray/toLocaleString.js @@ -0,0 +1,89 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype); + +// %TypedArrayPrototype% has an own "toLocaleString" function property. +assert.sameValue(TypedArrayPrototype.hasOwnProperty("toLocaleString"), true); +assert.sameValue(typeof TypedArrayPrototype.toLocaleString, "function"); + +// The initial value of %TypedArrayPrototype%.toLocaleString is not Array.prototype.toLocaleString. +assert.sameValue(TypedArrayPrototype.toLocaleString === Array.prototype.toLocaleString, false); + +// The concrete TypedArray prototypes do not have an own "toLocaleString" property. +assert.sameValue(anyTypedArrayConstructors.every(c => !c.hasOwnProperty("toLocaleString")), true); + +assert.deepEqual(Object.getOwnPropertyDescriptor(TypedArrayPrototype, "toLocaleString"), { + value: TypedArrayPrototype.toLocaleString, + writable: true, + enumerable: false, + configurable: true, +}); + +assert.sameValue(TypedArrayPrototype.toLocaleString.name, "toLocaleString"); +assert.sameValue(TypedArrayPrototype.toLocaleString.length, 0); + +// It's not a generic method. +assertThrowsInstanceOf(() => TypedArrayPrototype.toLocaleString.call(), TypeError); +for (let invalid of [void 0, null, {}, [], function(){}, true, 0, "", Symbol()]) { + assertThrowsInstanceOf(() => TypedArrayPrototype.toLocaleString.call(invalid), TypeError); +} + +const localeOne = 1..toLocaleString(), + localeTwo = 2..toLocaleString(), + localeSep = [,,].toLocaleString(); + +for (let constructor of anyTypedArrayConstructors) { + assert.sameValue(new constructor([]).toLocaleString(), ""); + assert.sameValue(new constructor([1]).toLocaleString(), localeOne); + assert.sameValue(new constructor([1, 2]).toLocaleString(), localeOne + localeSep + localeTwo); +} + +const originalNumberToLocaleString = Number.prototype.toLocaleString; + +// Calls Number.prototype.toLocaleString on each element. +for (let constructor of anyTypedArrayConstructors) { + Number.prototype.toLocaleString = function() { + "use strict"; + + // Ensure this-value is not boxed. + assert.sameValue(typeof this, "number"); + + // Test ToString is applied. + return { + valueOf: () => { + throw new Error("valueOf called"); + }, + toString: () => { + return this + 10; + } + }; + }; + let typedArray = new constructor([1, 2]); + assert.sameValue(typedArray.toLocaleString(), "11" + localeSep + "12"); +} +Number.prototype.toLocaleString = originalNumberToLocaleString; + +// Calls Number.prototype.toLocaleString from the current Realm. +const otherGlobal = createNewGlobal(); +for (let constructor of anyTypedArrayConstructors) { + Number.prototype.toLocaleString = function() { + "use strict"; + called = true; + return this; + }; + let typedArray = new otherGlobal[constructor.name]([1]); + let called = false; + assert.sameValue(TypedArrayPrototype.toLocaleString.call(typedArray), "1"); + assert.sameValue(called, true); +} +Number.prototype.toLocaleString = originalNumberToLocaleString; + diff --git a/test/staging/sm/TypedArray/toReversed-detached.js b/test/staging/sm/TypedArray/toReversed-detached.js new file mode 100644 index 0000000000..44ac0b2fb5 --- /dev/null +++ b/test/staging/sm/TypedArray/toReversed-detached.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var ta = new Int32Array([3, 2, 1]); + +$262.detachArrayBuffer(ta.buffer); + +assertThrowsInstanceOf(() => ta.toReversed(), TypeError); + diff --git a/test/staging/sm/TypedArray/toSorted-detached.js b/test/staging/sm/TypedArray/toSorted-detached.js new file mode 100644 index 0000000000..afc8656bef --- /dev/null +++ b/test/staging/sm/TypedArray/toSorted-detached.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var ta = new Int32Array([3, 2, 1]); + +$262.detachArrayBuffer(ta.buffer); + +assertThrowsInstanceOf(() => ta.toSorted(), TypeError); + diff --git a/test/staging/sm/TypedArray/toString.js b/test/staging/sm/TypedArray/toString.js new file mode 100644 index 0000000000..8cd82aed2d --- /dev/null +++ b/test/staging/sm/TypedArray/toString.js @@ -0,0 +1,82 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype); + +// %TypedArrayPrototype% has an own "toString" property. +assert.sameValue(TypedArrayPrototype.hasOwnProperty("toString"), true); + +// The initial value of %TypedArrayPrototype%.toString is Array.prototype.toString. +assert.sameValue(TypedArrayPrototype.toString, Array.prototype.toString); + +// The concrete TypedArray prototypes do not have an own "toString" property. +assert.sameValue(anyTypedArrayConstructors.every(c => !c.hasOwnProperty("toString")), true); + +assert.deepEqual(Object.getOwnPropertyDescriptor(TypedArrayPrototype, "toString"), { + value: TypedArrayPrototype.toString, + writable: true, + enumerable: false, + configurable: true, +}); + +for (let constructor of anyTypedArrayConstructors) { + assert.sameValue(new constructor([]).toString(), ""); + assert.sameValue(new constructor([1]).toString(), "1"); + assert.sameValue(new constructor([1, 2]).toString(), "1,2"); +} + +const testCases = { + [Int8Array.name]: { + array: [-1, 2, -3, 4, NaN], + expected: "-1,2,-3,4,0", + }, + [Int16Array.name]: { + array: [-1, 2, -3, 4, NaN], + expected: "-1,2,-3,4,0", + }, + [Int32Array.name]: { + array: [-1, 2, -3, 4, NaN], + expected: "-1,2,-3,4,0", + }, + [Uint8Array.name]: { + array: [255, 2, 3, 4, NaN], + expected: "255,2,3,4,0", + }, + [Uint16Array.name]: { + array: [-1, 2, 3, 4, NaN], + expected: "65535,2,3,4,0", + }, + [Uint32Array.name]: { + array: [-1, 2, 3, 4, NaN], + expected: "4294967295,2,3,4,0", + }, + [Uint8ClampedArray.name]: { + array: [255, 256, 2, 3, 4, NaN], + expected: "255,255,2,3,4,0", + }, + [Float16Array.name]: { + array: [-0, 0, 0.5, -0.5, NaN, Infinity, -Infinity], + expected: "0,0,0.5,-0.5,NaN,Infinity,-Infinity", + }, + [Float32Array.name]: { + array: [-0, 0, 0.5, -0.5, NaN, Infinity, -Infinity], + expected: "0,0,0.5,-0.5,NaN,Infinity,-Infinity", + }, + [Float64Array.name]: { + array: [-0, 0, 0.5, -0.5, NaN, Infinity, -Infinity], + expected: "0,0,0.5,-0.5,NaN,Infinity,-Infinity", + }, +}; +for (let constructor of anyTypedArrayConstructors) { + let {array, expected} = testCases[constructor.name]; + assert.sameValue(new constructor(array).toString(), expected); +} + diff --git a/test/staging/sm/TypedArray/toStringTag-cross-compartment.js b/test/staging/sm/TypedArray/toStringTag-cross-compartment.js new file mode 100644 index 0000000000..0c253b678e --- /dev/null +++ b/test/staging/sm/TypedArray/toStringTag-cross-compartment.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype); +const {get: toStringTag} = Object.getOwnPropertyDescriptor(TypedArrayPrototype, Symbol.toStringTag); + +const otherGlobal = createNewGlobal(); + +for (let constructor of anyTypedArrayConstructors) { + let ta = new otherGlobal[constructor.name](0); + assert.sameValue(toStringTag.call(ta), constructor.name); +} + diff --git a/test/staging/sm/TypedArray/uint8clamped-constructor.js b/test/staging/sm/TypedArray/uint8clamped-constructor.js new file mode 100644 index 0000000000..809ddb3c92 --- /dev/null +++ b/test/staging/sm/TypedArray/uint8clamped-constructor.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var v of [-300, 255.6, 300, 3.5, -3.9]) { + var a = new Uint8ClampedArray([v]); + var b = new Uint8ClampedArray(1); + b[0] = v; + + assert.sameValue(a[0], b[0]); +} + diff --git a/test/staging/sm/TypedArray/values.js b/test/staging/sm/TypedArray/values.js new file mode 100644 index 0000000000..76f0cbc124 --- /dev/null +++ b/test/staging/sm/TypedArray/values.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var constructor of anyTypedArrayConstructors) { + assert.sameValue(constructor.prototype.values.length, 0); + assert.sameValue(constructor.prototype.values.name, "values"); + assert.sameValue(constructor.prototype.values, constructor.prototype[Symbol.iterator]); + + assert.deepEqual([...new constructor(0).values()], []); + assert.deepEqual([...new constructor(1).values()], [0]); + assert.deepEqual([...new constructor(2).values()], [0, 0]); + assert.deepEqual([...new constructor([15]).values()], [15]); + + var arr = new constructor([1, 2, 3]); + var iterator = arr.values(); + assert.deepEqual(iterator.next(), {value: 1, done: false}); + assert.deepEqual(iterator.next(), {value: 2, done: false}); + assert.deepEqual(iterator.next(), {value: 3, done: false}); + assert.deepEqual(iterator.next(), {value: undefined, done: true}); + + // Called from other globals. + if (typeof createNewGlobal === "function") { + var values = createNewGlobal()[constructor.name].prototype.values; + assert.deepEqual([...values.call(new constructor([42, 36]))], [42, 36]); + arr = new (createNewGlobal()[constructor.name])([42, 36]); + assert.sameValue([...constructor.prototype.values.call(arr)].toString(), "42,36"); + } + + // Throws if `this` isn't a TypedArray. + var invalidReceivers = [undefined, null, 1, false, "", Symbol(), [], {}, /./, + new Proxy(new constructor(), {})]; + invalidReceivers.forEach(invalidReceiver => { + assertThrowsInstanceOf(() => { + constructor.prototype.values.call(invalidReceiver); + }, TypeError, "Assert that values fails if this value is not a TypedArray"); + }); +} + diff --git a/test/staging/sm/TypedArray/with-detached.js b/test/staging/sm/TypedArray/with-detached.js new file mode 100644 index 0000000000..bf1ebcd843 --- /dev/null +++ b/test/staging/sm/TypedArray/with-detached.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var ta = new Int32Array([3, 2, 1]); + +$262.detachArrayBuffer(ta.buffer); + +assertThrowsInstanceOf(() => ta.with(0, 0), TypeError); + diff --git a/test/staging/sm/TypedArray/with.js b/test/staging/sm/TypedArray/with.js new file mode 100644 index 0000000000..17ed98fa82 --- /dev/null +++ b/test/staging/sm/TypedArray/with.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +class Err {} + +const indices = [ + -Infinity, -10, -0.5, -0, 0, 0.5, 10, Infinity, NaN +]; + +let value = { + valueOf() { + throw new Err; + } +}; + +let ta = new Int32Array(5); +for (let index of indices) { + assertThrowsInstanceOf(() => ta.with(index, value), Err); +} + +for (let index of indices) { + let ta = new Int32Array(5); + + let value = { + valueOf() { + $262.detachArrayBuffer(ta.buffer); + return 0; + } + }; + + assertThrowsInstanceOf(() => ta.with(index, value), RangeError); +} + diff --git a/test/staging/sm/TypedArray/write-out-of-bounds-tonumber.js b/test/staging/sm/TypedArray/write-out-of-bounds-tonumber.js new file mode 100644 index 0000000000..1c0450bed5 --- /dev/null +++ b/test/staging/sm/TypedArray/write-out-of-bounds-tonumber.js @@ -0,0 +1,69 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-TypedArray-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// ToNumber(value) is executed for OOB writes when using a direct assignment. +function plainSet() { + var callCount = 0; + var value = { + valueOf() { + callCount++; + return 1; + } + }; + + var N = 100; + var ta = new Int32Array(0); + for (var i = 0; i < N; ++i) + ta[0] = value + + assert.sameValue(callCount, N); +} +for (var i = 0; i < 2; ++i) plainSet(); + +// ToNumber(value) is executed for OOB writes when using Reflect.set(...). +function reflectSet() { + var callCount = 0; + var value = { + valueOf() { + callCount++; + return 1; + } + }; + + var N = 100; + var ta = new Int32Array(0); + for (var i = 0; i < N; ++i) + assert.sameValue(Reflect.set(ta, 0, value), true); + + assert.sameValue(callCount, N); +} +for (var i = 0; i < 2; ++i) reflectSet(); + +// ToNumber(value) is not executed for OOB writes when using Reflect.defineProperty(...). +function defineProp() { + var callCount = 0; + var value = { + valueOf() { + callCount++; + return 1; + } + }; + var desc = {value, writable: true, enumerable: true, configurable: true}; + + var N = 100; + var ta = new Int32Array(0); + for (var i = 0; i < N; ++i) + assert.sameValue(Reflect.defineProperty(ta, 0, desc), false); + + assert.sameValue(callCount, 0); +} +for (var i = 0; i < 2; ++i) defineProp(); + diff --git a/test/staging/sm/WeakMap/symbols.js b/test/staging/sm/WeakMap/symbols.js new file mode 100644 index 0000000000..5dbfbd42ad --- /dev/null +++ b/test/staging/sm/WeakMap/symbols.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + requires shell-options +description: | + pending +esid: pending +---*/ +var m = new WeakMap; +var sym = Symbol(); +m.set(sym, 0); +assert.sameValue(m.get(sym), 0); + +// sym1 will be registered in global Symbol registry hence cannot be used as a +// key in WeakMap. +var sym1 = Symbol.for("testKey"); +assertThrowsInstanceOf(() => m.set(sym1, 1), TypeError); + +// Well-known symbols can be used as weakmap keys. +var sym2 = Symbol.hasInstance; +m.set(sym2, 2); +assert.sameValue(m.get(sym2), 2); + diff --git a/test/staging/sm/argumentsLengthOpt.js b/test/staging/sm/argumentsLengthOpt.js new file mode 100644 index 0000000000..efe8f9948f --- /dev/null +++ b/test/staging/sm/argumentsLengthOpt.js @@ -0,0 +1,96 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test cases for arguments.length optimization. + +function f1() { + return arguments.length; +} + +function f2(a, b, c) { + return arguments.length; +} + +// arrow functions don't have their own arguments, and so capture the enclosing +// scope. +function f3(a, b, c, d) { + return (() => arguments.length)(); +} + +// Test a function which mutates arguments.length +function f4(a, b, c, d) { + arguments.length = 42; + return arguments.length; +} + +// Manually read out arguments; should disable the length opt +function f5() { + for (var i = 0; i < arguments.length; i++) { + if (arguments[i] == 10) { return true } + } + return false; +} + +function f6() { + function inner() { + return arguments.length; + } + return inner(1, 2, 3); +} + +// edge cases of the arguments bindings: +function f7() { + var arguments = 42; + return arguments; +} + +function f8() { + var arguments = [1, 2]; + return arguments.length; +} + +function f9() { + eval("arguments.length = 42"); + return arguments.length; +} + +function test() { + assert.sameValue(f1(), 0); + assert.sameValue(f1(1), 1); + assert.sameValue(f1(1, 2), 2); + assert.sameValue(f1(1, 2, 3), 3); + + assert.sameValue(f2(), 0); + assert.sameValue(f2(1, 2, 3), 3); + + assert.sameValue(f3(), 0); + assert.sameValue(f3(1, 2, 3), 3); + + assert.sameValue(f4(), 42); + assert.sameValue(f4(1, 2, 3), 42); + + assert.sameValue(f5(), false); + assert.sameValue(f5(1, 2, 3, 10), true); + assert.sameValue(f5(1, 2, 3, 10, 20), true); + assert.sameValue(f5(1, 2, 3, 9, 20, 30), false); + + assert.sameValue(f6(), 3) + assert.sameValue(f6(1, 2, 3, 4), 3) + + assert.sameValue(f7(), 42); + + assert.sameValue(f8(), 2); + + assert.sameValue(f9(), 42); +} + +test(); + diff --git a/test/staging/sm/async-functions/async-contains-unicode-escape.js b/test/staging/sm/async-functions/async-contains-unicode-escape.js new file mode 100644 index 0000000000..c2f5740006 --- /dev/null +++ b/test/staging/sm/async-functions/async-contains-unicode-escape.js @@ -0,0 +1,63 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1315815; +var summary = "async/await containing escapes"; + +print(BUGNUMBER + ": " + summary); + +// Using "eval" as the argument name is fugly, but it means evals below are +// *direct* evals, and so their effects in the unescaped case won't extend +// past each separate |test| call (as would happen if we used a different name +// that made each eval into an indirect eval, affecting code in the global +// scope). +function test(code, eval) +{ + var unescaped = code.replace("###", "async"); + var escaped = code.replace("###", "\\u0061"); + + assertThrowsInstanceOf(() => eval(escaped), SyntaxError); + eval(unescaped); +} + +test("### function f() {}", eval); +test("var x = ### function f() {}", eval); +test("### x => {};", eval); +test("var x = ### x => {}", eval); +test("### () => {};", eval); +test("var x = ### () => {}", eval); +test("### (y) => {};", eval); +test("var x = ### (y) => {}", eval); +test("({ ### x() {} })", eval); +test("var x = ### function f() {}", eval); + +if (typeof parseModule === "function") + test("export default ### function f() {}", parseModule); + +assertThrowsInstanceOf(() => eval("async await => 1;"), + SyntaxError); +assertThrowsInstanceOf(() => eval("async aw\\u0061it => 1;"), + SyntaxError); + +var async = 0; +assert.sameValue(\u0061sync, 0); + +var obj = { \u0061sync() { return 1; } }; +assert.sameValue(obj.async(), 1); + +async = function() { return 42; }; + +var z = async(obj); +assert.sameValue(z, 42); + +var w = async(obj)=>{}; +assert.sameValue(typeof w, "function"); + diff --git a/test/staging/sm/async-functions/async-function-declaration-in-modules.js b/test/staging/sm/async-functions/async-function-declaration-in-modules.js new file mode 100644 index 0000000000..145bd112f5 --- /dev/null +++ b/test/staging/sm/async-functions/async-function-declaration-in-modules.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +description: | + pending +esid: pending +---*/ + +async function f() { + return "success"; +} + +var AsyncFunction = (async function(){}).constructor; + +assert.sameValue(f instanceof AsyncFunction, true); + +f().then(v => { + assert.sameValue("success", v); +}); diff --git a/test/staging/sm/async-functions/async-property-name-error.js b/test/staging/sm/async-functions/async-property-name-error.js new file mode 100644 index 0000000000..03fe0f0ed8 --- /dev/null +++ b/test/staging/sm/async-functions/async-property-name-error.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertSyntaxError(code) { + assertThrowsInstanceOf(() => { Function(code); }, SyntaxError, "Function:" + code); + assertThrowsInstanceOf(() => { eval(code); }, SyntaxError, "eval:" + code); + var ieval = eval; + assertThrowsInstanceOf(() => { ieval(code); }, SyntaxError, "indirect eval:" + code); +} + +assertSyntaxError(`({async async: 0})`); +assertSyntaxError(`({async async})`); +assertSyntaxError(`({async async, })`); +assertSyntaxError(`({async async = 0} = {})`); + +for (let decl of ["var", "let", "const"]) { + assertSyntaxError(`${decl} {async async: a} = {}`); + assertSyntaxError(`${decl} {async async} = {}`); + assertSyntaxError(`${decl} {async async, } = {}`); + assertSyntaxError(`${decl} {async async = 0} = {}`); +} + diff --git a/test/staging/sm/async-functions/await-error.js b/test/staging/sm/async-functions/await-error.js new file mode 100644 index 0000000000..2d8981847a --- /dev/null +++ b/test/staging/sm/async-functions/await-error.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1317153; +var summary = "await outside of async function should provide better error"; + +print(BUGNUMBER + ": " + summary); + +let caught = false; +try { + eval("await 10"); +} catch(e) { + assert.sameValue(e.message.includes("await is only valid in"), true); + caught = true; +} +assert.sameValue(caught, true); + diff --git a/test/staging/sm/async-functions/await-in-arrow-parameters.js b/test/staging/sm/async-functions/await-in-arrow-parameters.js new file mode 100644 index 0000000000..706cc493ee --- /dev/null +++ b/test/staging/sm/async-functions/await-in-arrow-parameters.js @@ -0,0 +1,103 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var ieval = eval; +var AsyncFunction = async function(){}.constructor; + +var functionContext = { + Function: { + constructor: Function, + toSourceBody: code => `function f() { ${code} }`, + toSourceParameter: code => `function f(x = ${code}) { }`, + }, + AsyncFunction: { + constructor: AsyncFunction, + toSourceBody: code => `async function f() { ${code} }`, + toSourceParameter: code => `async function f(x = ${code}) { }`, + }, +}; + +function assertSyntaxError(kind, code) { + var {constructor, toSourceBody, toSourceParameter} = functionContext[kind]; + var body = toSourceBody(code); + var parameter = toSourceParameter(code); + + assertThrowsInstanceOf(() => { constructor(code); }, SyntaxError, constructor.name + ":" + code); + assertThrowsInstanceOf(() => { constructor(`x = ${code}`, ""); }, SyntaxError, constructor.name + ":" + code); + + assertThrowsInstanceOf(() => { eval(body); }, SyntaxError, "eval:" + body); + assertThrowsInstanceOf(() => { ieval(body); }, SyntaxError, "indirect eval:" + body); + + assertThrowsInstanceOf(() => { eval(parameter); }, SyntaxError, "eval:" + parameter); + assertThrowsInstanceOf(() => { ieval(parameter); }, SyntaxError, "indirect eval:" + parameter); +} + +function assertNoSyntaxError(kind, code) { + var {constructor, toSourceBody, toSourceParameter} = functionContext[kind]; + var body = toSourceBody(code); + var parameter = toSourceParameter(code); + + constructor(code); + constructor(`x = ${code}`, ""); + + eval(body); + ieval(body); + + eval(parameter); + ieval(parameter); +} + +function assertSyntaxErrorAsync(code) { + assertNoSyntaxError("Function", code); + assertSyntaxError("AsyncFunction", code); +} + +function assertSyntaxErrorBoth(code) { + assertSyntaxError("Function", code); + assertSyntaxError("AsyncFunction", code); +} + + +// Bug 1353691 +// |await| expression is invalid in arrow functions in async-context. +// |await/r/g| first parses as |AwaitExpression RegularExpressionLiteral|, when reparsing the +// arrow function, it is parsed as |IdentRef DIV IdentRef DIV IdentRef|. We need to ensure in this +// case, that we still treat |await| as a keyword and hence throw a SyntaxError. +assertSyntaxErrorAsync("(a = await/r/g) => {}"); +assertSyntaxErrorBoth("async(a = await/r/g) => {}"); + +// Also applies when nesting arrow functions. +assertSyntaxErrorAsync("(a = (b = await/r/g) => {}) => {}"); +assertSyntaxErrorBoth("async(a = (b = await/r/g) => {}) => {}"); +assertSyntaxErrorBoth("(a = async(b = await/r/g) => {}) => {}"); +assertSyntaxErrorBoth("async(a = async(b = await/r/g) => {}) => {}"); + + +// Bug 1355860 +// |await| cannot be used as rest-binding parameter in arrow functions in async-context. +assertSyntaxErrorAsync("(...await) => {}"); +assertSyntaxErrorBoth("async(...await) => {}"); + +assertSyntaxErrorAsync("(a, ...await) => {}"); +assertSyntaxErrorBoth("async(a, ...await) => {}"); + +// Also test nested arrow functions. +assertSyntaxErrorAsync("(a = (...await) => {}) => {}"); +assertSyntaxErrorBoth("(a = async(...await) => {}) => {}"); +assertSyntaxErrorBoth("async(a = (...await) => {}) => {}"); +assertSyntaxErrorBoth("async(a = async(...await) => {}) => {}"); + +assertSyntaxErrorAsync("(a = (b, ...await) => {}) => {}"); +assertSyntaxErrorBoth("(a = async(b, ...await) => {}) => {}"); +assertSyntaxErrorBoth("async(a = (b, ...await) => {}) => {}"); +assertSyntaxErrorBoth("async(a = async(b, ...await) => {}) => {}"); + + diff --git a/test/staging/sm/async-functions/await-in-parameters-of-async-func.js b/test/staging/sm/async-functions/await-in-parameters-of-async-func.js new file mode 100644 index 0000000000..ab0d5c0525 --- /dev/null +++ b/test/staging/sm/async-functions/await-in-parameters-of-async-func.js @@ -0,0 +1,72 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1478910; +var summary = 'JSMSG_AWAIT_IN_PARAMETER error for incomplete await expr in async function/generator parameter'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + let testAwaitInDefaultExprOfAsyncFunc = (code) => { + assertThrowsInstanceOf(() => eval(code), SyntaxError, "await expression can't be used in parameter"); + }; + + let testNoException = (code) => { + assert.sameValue(completesNormally(code), true); + }; + + // https://www.ecma-international.org/ecma-262/9.0/ + + // Async Generator Function Definitions : AsyncGeneratorDeclaration & AsyncGeneratorExpression + // async function* f() {} + // f = async function*() {} + testAwaitInDefaultExprOfAsyncFunc("async function* f(a = await) {}"); + testAwaitInDefaultExprOfAsyncFunc("let f = async function*(a = await) {}"); + + testAwaitInDefaultExprOfAsyncFunc("function f(a = async function*(a = await) {}) {}"); + testAwaitInDefaultExprOfAsyncFunc("function f() { a = async function*(a = await) {}; }"); + + testAwaitInDefaultExprOfAsyncFunc("async function* f() { a = async function*(a = await) {}; }"); + testNoException("async function* f() { let a = function(a = await) {}; }"); + + testNoException("async function* f(a = async function*() { await 1; }) {}"); + + // Async Function Definitions : AsyncFunctionDeclaration & AsyncFunctionExpression + // async function f() {} + // f = async function() {} + testAwaitInDefaultExprOfAsyncFunc("async function f(a = await) {}"); + testAwaitInDefaultExprOfAsyncFunc("let f = async function(a = await) {}"); + + testAwaitInDefaultExprOfAsyncFunc("function f(a = async function(a = await) {}) {}"); + testAwaitInDefaultExprOfAsyncFunc("function f() { a = async function(a = await) {}; }"); + + testAwaitInDefaultExprOfAsyncFunc("async function f() { a = async function(a = await) {}; }"); + testNoException("async function f() { let a = function(a = await) {}; }"); + + testNoException("async function f(a = async function() { await 1; }) {}"); + + // Async Arrow Function Definitions : AsyncArrowFunction + // async () => {} + testAwaitInDefaultExprOfAsyncFunc("async (a = await) => {}"); + + testNoException("async (a = async () => { await 1; }) => {}"); + +} diff --git a/test/staging/sm/async-functions/constructor.js b/test/staging/sm/async-functions/constructor.js new file mode 100644 index 0000000000..673c748204 --- /dev/null +++ b/test/staging/sm/async-functions/constructor.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1185106; +var summary = "async function constructor and prototype"; + +print(BUGNUMBER + ": " + summary); + +var f1 = async function() {}; + +var AsyncFunction = f1.constructor; +var AsyncFunctionPrototype = AsyncFunction.prototype; + +assert.sameValue(AsyncFunction.name, "AsyncFunction"); +assert.sameValue(AsyncFunction.length, 1); +assert.sameValue(Object.getPrototypeOf(async function() {}), AsyncFunctionPrototype); + +assert.sameValue(AsyncFunctionPrototype.constructor, AsyncFunction); + +var f2 = AsyncFunction("await 1"); +assert.sameValue(f2.constructor, AsyncFunction); +assert.sameValue(f2.length, 0); +assert.sameValue(Object.getPrototypeOf(f2), AsyncFunctionPrototype); + +var f3 = new AsyncFunction("await 1"); +assert.sameValue(f3.constructor, AsyncFunction); +assert.sameValue(f3.length, 0); +assert.sameValue(Object.getPrototypeOf(f3), AsyncFunctionPrototype); + +var f4 = AsyncFunction("a", "b", "c", "await 1"); +assert.sameValue(f4.constructor, AsyncFunction); +assert.sameValue(f4.length, 3); +assert.sameValue(Object.getPrototypeOf(f4), AsyncFunctionPrototype); + diff --git a/test/staging/sm/async-functions/create-function-parse-before-getprototype.js b/test/staging/sm/async-functions/create-function-parse-before-getprototype.js new file mode 100644 index 0000000000..e117470d39 --- /dev/null +++ b/test/staging/sm/async-functions/create-function-parse-before-getprototype.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var getProtoCalled = false; + +var newTarget = Object.defineProperty(function(){}.bind(), "prototype", { + get() { + getProtoCalled = true; + return null; + } +}); + +var AsyncFunction = async function(){}.constructor; + +assertThrowsInstanceOf(() => { + Reflect.construct(AsyncFunction, ["@error"], newTarget); +}, SyntaxError); + +assert.sameValue(getProtoCalled, false); + diff --git a/test/staging/sm/async-functions/inner-caller.js b/test/staging/sm/async-functions/inner-caller.js new file mode 100644 index 0000000000..e8924d4c38 --- /dev/null +++ b/test/staging/sm/async-functions/inner-caller.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function g() { + return g.caller; +} + +(async function f() { + var inner = g(); + assert.sameValue(inner, null); +})(); + +(async function f() { + "use strict"; + var inner = g(); + assert.sameValue(inner, null); +})(); + diff --git a/test/staging/sm/async-functions/length.js b/test/staging/sm/async-functions/length.js new file mode 100644 index 0000000000..c6ab8ae06b --- /dev/null +++ b/test/staging/sm/async-functions/length.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1185106; +var summary = "async function length"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(async function() {}.length, 0); +assert.sameValue(async function(a) {}.length, 1); +assert.sameValue(async function(a, b, c) {}.length, 3); +assert.sameValue(async function(a, b, c, ...d) {}.length, 3); + diff --git a/test/staging/sm/async-functions/no-expression-closure.js b/test/staging/sm/async-functions/no-expression-closure.js new file mode 100644 index 0000000000..82e5f3d9fd --- /dev/null +++ b/test/staging/sm/async-functions/no-expression-closure.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertSyntaxError(code) { + assertThrowsInstanceOf(function () { Function(code); }, SyntaxError, "Function:" + code); + assertThrowsInstanceOf(function () { eval(code); }, SyntaxError, "eval:" + code); + var ieval = eval; + assertThrowsInstanceOf(function () { ieval(code); }, SyntaxError, "indirect eval:" + code); +} + +// AsyncFunction statement +assertSyntaxError(`async function f() 0`); + +// AsyncFunction expression +assertSyntaxError(`void async function() 0`); +assertSyntaxError(`void async function f() 0`); + + diff --git a/test/staging/sm/async-functions/property.js b/test/staging/sm/async-functions/property.js new file mode 100644 index 0000000000..0598c74805 --- /dev/null +++ b/test/staging/sm/async-functions/property.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1185106; +var summary = "async name token in property and object destructuring pattern"; + +print(BUGNUMBER + ": " + summary); + +{ + let a = { async: 10 }; + assert.sameValue(a.async, 10); +} + +{ + let a = { async() {} }; + assert.sameValue(a.async instanceof Function, true); + assert.sameValue(a.async.name, "async"); +} + +{ + let async = 11; + let a = { async }; + assert.sameValue(a.async, 11); +} + +{ + let { async } = { async: 12 }; + assert.sameValue(async, 12); +} + +{ + let { async = 13 } = {}; + assert.sameValue(async, 13); +} + +{ + let { async: a = 14 } = {}; + assert.sameValue(a, 14); +} + +{ + let { async, other } = { async: 15, other: 16 }; + assert.sameValue(async, 15); + assert.sameValue(other, 16); + + let a = { async, other }; + assert.sameValue(a.async, 15); + assert.sameValue(a.other, 16); +} + diff --git a/test/staging/sm/async-functions/toString.js b/test/staging/sm/async-functions/toString.js new file mode 100644 index 0000000000..6fd7700d58 --- /dev/null +++ b/test/staging/sm/async-functions/toString.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1185106; +var summary = "async function toString"; + +print(BUGNUMBER + ": " + summary); + +async function f1(a, b, c) { await a; } + +assert.sameValue(f1.toString(), + "async function f1(a, b, c) { await a; }"); + +assert.sameValue(async function (a, b, c) { await a; }.toString(), + "async function (a, b, c) { await a; }"); + +assert.sameValue((async (a, b, c) => await a).toString(), + "async (a, b, c) => await a"); + +assert.sameValue((async (a, b, c) => { await a; }).toString(), + "async (a, b, c) => { await a; }"); + +assert.sameValue({ async foo(a, b, c) { await a; } }.foo.toString(), + "async foo(a, b, c) { await a; }"); + diff --git a/test/staging/sm/class/boundFunctionSubclassing.js b/test/staging/sm/class/boundFunctionSubclassing.js new file mode 100644 index 0000000000..950adcf26c --- /dev/null +++ b/test/staging/sm/class/boundFunctionSubclassing.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class func extends Function { } +let inst = new func("x", "return this.bar + x"); + +// First, ensure that we get sane prototype chains for the bound instance +let bound = inst.bind({bar: 3}, 4); +assert.sameValue(bound instanceof func, true); +assert.sameValue(bound(), 7); + +// Check the corner case for Function.prototype.bind where the function has +// a null [[Prototype]] +Object.setPrototypeOf(inst, null); +bound = Function.prototype.bind.call(inst, {bar:1}, 3); +assert.sameValue(Object.getPrototypeOf(bound), null); +assert.sameValue(bound(), 4); + +// Check that we actually pass the proper new.target when calling super() +function toBind() { } + +var boundArgs = []; +for (let i = 0; i < 5; i++) { + boundArgs.push(i); + let bound = toBind.bind(undefined, ...boundArgs); + + // We have to wire it up by hand to allow us to use a bound function + // as a superclass, but it's doable. + bound.prototype = {}; + class test extends bound { }; + let passedArgs = []; + for (let j = 0; j < 15; j++) { + passedArgs.push(j); + assert.sameValue(Object.getPrototypeOf(new test(...passedArgs)), test.prototype); + } +} + + diff --git a/test/staging/sm/class/bytecodePatternMatching.js b/test/staging/sm/class/bytecodePatternMatching.js new file mode 100644 index 0000000000..ca9167825a --- /dev/null +++ b/test/staging/sm/class/bytecodePatternMatching.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Constructors can't be called so we can't pattern match +// them in replace and sort. +function a() { + var b = {a: "A"}; + + class X { + constructor(a) { + return b[a] + } + }; + + assertThrowsInstanceOf(() => "a".replace(/a/, X), TypeError); +} + +function b() { + class X { + constructor(x, y) { + return x - y; + } + } + + assertThrowsInstanceOf(() => [1, 2, 3].sort(X), TypeError); +} + +a(); +b(); + diff --git a/test/staging/sm/class/classConstructorNoCall.js b/test/staging/sm/class/classConstructorNoCall.js new file mode 100644 index 0000000000..dc93587327 --- /dev/null +++ b/test/staging/sm/class/classConstructorNoCall.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Class constructors don't have a [[Call]] +class Foo { + constructor() { } +} + +assertThrowsInstanceOf(Foo, TypeError); + +class Bar extends Foo { + constructor() { } +} + +assertThrowsInstanceOf(Bar, TypeError); + +assertThrowsInstanceOf(class { constructor() { } }, TypeError); +assertThrowsInstanceOf(class extends Foo { constructor() { } }, TypeError); + +assertThrowsInstanceOf(class foo { constructor() { } }, TypeError); +assertThrowsInstanceOf(class foo extends Foo { constructor() { } }, TypeError); + diff --git a/test/staging/sm/class/classHeritage.js b/test/staging/sm/class/classHeritage.js new file mode 100644 index 0000000000..bf56bf3d44 --- /dev/null +++ b/test/staging/sm/class/classHeritage.js @@ -0,0 +1,106 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// It's an error to have a non-constructor as your heritage +assertThrowsInstanceOf(() => eval(`class a extends Math.sin { + constructor() { } + }`), TypeError); +assertThrowsInstanceOf(() => eval(`(class a extends Math.sin { + constructor() { } + })`), TypeError); + +// Unless it's null, in which case it works like a normal class, except that +// the prototype object does not inherit from Object.prototype. +class basic { + constructor() { } +} +class nullExtends extends null { + constructor() { } +} +var nullExtendsExpr = class extends null { constructor() { } }; + +assert.sameValue(Object.getPrototypeOf(basic), Function.prototype); +assert.sameValue(Object.getPrototypeOf(basic.prototype), Object.prototype); + +for (let extension of [nullExtends, nullExtendsExpr]) { + assert.sameValue(Object.getPrototypeOf(extension), Function.prototype); + assert.sameValue(Object.getPrototypeOf(extension.prototype), null); +} + +var baseMethodCalled; +var staticMethodCalled; +var overrideCalled; +class base { + constructor() { }; + method() { baseMethodCalled = true; } + static staticMethod() { staticMethodCalled = true; } + override() { overrideCalled = "base" } +} +class derived extends base { + constructor() { super(); }; + override() { overrideCalled = "derived"; } +} +var derivedExpr = class extends base { + constructor() { super(); }; + override() { overrideCalled = "derived"; } +}; + +// Make sure we get the right object layouts. +for (let extension of [derived, derivedExpr]) { + baseMethodCalled = false; + staticMethodCalled = false; + overrideCalled = ""; + // Make sure we get the right object layouts. + assert.sameValue(Object.getPrototypeOf(extension), base); + assert.sameValue(Object.getPrototypeOf(extension.prototype), base.prototype); + + // We do inherit the methods, right? + (new extension()).method(); + assert.sameValue(baseMethodCalled, true); + + // But we can still override them? + (new extension()).override(); + assert.sameValue(overrideCalled, "derived"); + + // What about the statics? + extension.staticMethod(); + assert.sameValue(staticMethodCalled, true); +} + +// Gotta extend an object, or null. +function nope() { + class Foo extends "Bar" { + constructor() { } + } +} +function nopeExpr() { + (class extends "Bar" { + constructor() { } + }); +} +assertThrowsInstanceOf(nope, TypeError); +assertThrowsInstanceOf(nopeExpr, TypeError); + +// The .prototype of the extension must be an object, or null. +nope.prototype = "not really, no"; +function stillNo() { + class Foo extends nope { + constructor() { } + } +} +function stillNoExpr() { + (class extends nope { + constructor() { } + }); +} +assertThrowsInstanceOf(stillNo, TypeError); +assertThrowsInstanceOf(stillNoExpr, TypeError); + diff --git a/test/staging/sm/class/className.js b/test/staging/sm/class/className.js new file mode 100644 index 0000000000..6e8b89d058 --- /dev/null +++ b/test/staging/sm/class/className.js @@ -0,0 +1,257 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function testName(C, name, hasValue, hasGetter, hasSetter, isFunction=false) { + if (isFunction) { + assert.sameValue(typeof C.name, "function"); + } else { + assert.sameValue(C.name, name); + } + + var desc = Object.getOwnPropertyDescriptor(C, "name"); + if (!hasValue && !hasGetter && !hasSetter) { + assert.sameValue(desc, undefined); + return; + } + + if (hasValue) { + assert.sameValue("value" in desc, true); + if (isFunction) { + assert.sameValue(typeof desc.value, "function"); + } else { + assert.sameValue(desc.value, name); + } + // FIXME: Methods defined in classes should not be enumerable + // (bug 1144630). + // assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + + assert.sameValue("get" in desc, false); + assert.sameValue("set" in desc, false); + + return; + } + + assert.sameValue("value" in desc, false); + + if (hasGetter) { + assert.sameValue("get" in desc, true); + assert.sameValue(desc.get(), name); + // assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + } else { + assert.sameValue("get" in desc, true); + assert.sameValue(desc.get, undefined); + // assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + } + + if (hasSetter) { + assert.sameValue("set" in desc, true); + assert.sameValue(typeof desc.set, "function"); + // assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + } else { + assert.sameValue("set" in desc, true); + assert.sameValue(desc.set, undefined); + // assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, true); + } +} + +// ---- declaration --- + +class Decl { + constructor() {} +} +testName(Decl, "Decl", true, false, false); + +class DeclWithFunc { + constructor() {} + static name() {} +} +testName(DeclWithFunc, "DeclWithFunc", true, false, false, true); + +class DeclWithGetter { + constructor() {} + static get name() { return "base"; } +} +testName(DeclWithGetter, "base", false, true, false); + +class DeclWithSetter { + constructor() {} + static set name(v) {} +} +testName(DeclWithSetter, undefined, false, false, true); + +class DeclWithGetterSetter { + constructor() {} + static get name() { return "base"; } + static set name(v) {} +} +testName(DeclWithGetterSetter, "base", false, true, true); + +function prop() { + return "name"; +} +class DeclWithComputed { + constructor() {} + static get [prop()]() { return "base"; } +} +testName(DeclWithGetterSetter, "base", false, true, true); + +class ExtendedDecl1 extends Decl { + constructor() {} +} +testName(ExtendedDecl1, "ExtendedDecl1", true, false, false); +delete ExtendedDecl1.name; +testName(ExtendedDecl1, "Decl", false, false, false); + +class ExtendedDecl2 extends DeclWithGetterSetter { + constructor() {} + static get name() { return "extend"; } +} +testName(ExtendedDecl2, "extend", false, true, false); +delete ExtendedDecl2.name; +testName(ExtendedDecl2, "base", false, false, false); + +class ExtendedDecl3 extends DeclWithGetterSetter { + constructor() {} + static set name(v) {} +} +testName(ExtendedDecl3, undefined, false, false, true); +delete ExtendedDecl3.name; +testName(ExtendedDecl3, "base", false, false, false); + +// ---- expression --- + +let Expr = class Expr { + constructor() {} +}; +testName(Expr, "Expr", true, false, false); + +let ExprWithGetter = class ExprWithGetter { + constructor() {} + static get name() { return "base"; } +}; +testName(ExprWithGetter, "base", false, true, false); + +let ExprWithSetter = class ExprWithSetter { + constructor() {} + static set name(v) {} +}; +testName(ExprWithSetter, undefined, false, false, true); + +let ExprWithGetterSetter = class ExprWithGetterSetter { + constructor() {} + static get name() { return "base"; } + static set name(v) {} +}; +testName(ExprWithGetterSetter, "base", false, true, true); + + +let ExtendedExpr1 = class ExtendedExpr1 extends Expr { + constructor() {} +}; +testName(ExtendedExpr1, "ExtendedExpr1", true, false, false); +delete ExtendedExpr1.name; +testName(ExtendedExpr1, "Expr", false, false, false); + +let ExtendedExpr2 = class ExtendedExpr2 extends ExprWithGetterSetter { + constructor() {} + static get name() { return "extend"; } +}; +testName(ExtendedExpr2, "extend", false, true, false); +delete ExtendedExpr2.name; +testName(ExtendedExpr2, "base", false, false, false); + +let ExtendedExpr3 = class ExtendedExpr3 extends ExprWithGetterSetter { + constructor() {} + static set name(v) {} +}; +testName(ExtendedExpr3, undefined, false, false, true); +delete ExtendedExpr3.name; +testName(ExtendedExpr3, "base", false, false, false); + +// ---- anonymous ---- + +// Anonymous class expressions use the empty string as the default name property. +// Use property assignment to avoid setting name property. +let tmp = {}; +let Anon = tmp.value = class { + constructor() {} +}; +testName(Anon, "", true, false, false); + +let AnonDefault = tmp.value = class { }; +testName(AnonDefault, "", true, false, false); + +let AnonWithGetter = tmp.value = class { + constructor() {} + static get name() { return "base"; } +}; +testName(AnonWithGetter, "base", false, true, false); + +let AnonWithSetter = tmp.value = class { + constructor() {} + static set name(v) {} +}; +testName(AnonWithSetter, undefined, false, false, true); + +let AnonWithGetterSetter = tmp.value = class { + constructor() {} + static get name() { return "base"; } + static set name(v) {} +}; +testName(AnonWithGetterSetter, "base", false, true, true); + + +let ExtendedAnon1 = tmp.value = class extends Anon { + constructor() {} +}; +testName(ExtendedAnon1, "", true, false, false); + +let ExtendedAnonDefault = tmp.value = class extends Anon { }; +testName(ExtendedAnonDefault, "", true, false, false); + +let ExtendedAnon2 = tmp.value = class extends AnonWithGetterSetter { + constructor() {} + static get name() { return "extend"; } +}; +testName(ExtendedAnon2, "extend", false, true, false); +delete ExtendedAnon2.name; +testName(ExtendedAnon2, "base", false, false, false); + +let ExtendedAnon3 = tmp.value = class extends AnonWithGetterSetter { + constructor() {} + static set name(v) {} +}; +testName(ExtendedAnon3, undefined, false, false, true); +delete ExtendedAnon3.name; +testName(ExtendedAnon3, "base", false, false, false); + +// ---- mixed ---- + +let ExtendedExpr4 = class ExtendedExpr4 extends Anon { + constructor() {} +} +testName(ExtendedExpr4, "ExtendedExpr4", true, false, false); +delete ExtendedExpr4.name; +testName(ExtendedExpr4, "", false, false, false); + +let ExtendedExpr5 = class ExtendedExpr5 extends AnonWithGetterSetter { + constructor() {} + static get name() { return "extend"; } +} +testName(ExtendedExpr5, "extend", false, true, false); +delete ExtendedExpr5.name; +testName(ExtendedExpr5, "base", false, false, false); + diff --git a/test/staging/sm/class/classPrototype.js b/test/staging/sm/class/classPrototype.js new file mode 100644 index 0000000000..41706a3b3d --- /dev/null +++ b/test/staging/sm/class/classPrototype.js @@ -0,0 +1,74 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// The prototype of a class is a non-writable, non-configurable, non-enumerable data property. +class a { constructor() { } } +let b = class { constructor() { } }; +for (let test of [a,b]) { + var protoDesc = Object.getOwnPropertyDescriptor(test, "prototype"); + assert.sameValue(protoDesc.writable, false); + assert.sameValue(protoDesc.configurable, false); + assert.sameValue(protoDesc.enumerable, false); + + var prototype = protoDesc.value; + assert.sameValue(typeof prototype, "object"); + assert.sameValue(Object.getPrototypeOf(prototype), Object.prototype); + assert.sameValue(Object.isExtensible(prototype), true); + + var desiredPrototype = {}; + Object.defineProperty(desiredPrototype, "constructor", { writable: true, + configurable: true, + enumerable: false, + value: test }); + assert.deepEqual(prototype, desiredPrototype); +} + +// As such, it should by a TypeError to try and overwrite "prototype" with a +// static member. The only way to try is with a computed property name; the rest +// are early errors. +assertThrowsInstanceOf(() => eval(` + class a { + constructor() { }; + static ["prototype"]() { } + } + `), TypeError); +assertThrowsInstanceOf(() => eval(` + class a { + constructor() { }; + static get ["prototype"]() { } + } + `), TypeError); +assertThrowsInstanceOf(() => eval(` + class a { + constructor() { }; + static set ["prototype"](x) { } + } + `), TypeError); + +assertThrowsInstanceOf(() => eval(`( + class a { + constructor() { }; + static ["prototype"]() { } + } + )`), TypeError); +assertThrowsInstanceOf(() => eval(`( + class a { + constructor() { }; + static get ["prototype"]() { } + } + )`), TypeError); +assertThrowsInstanceOf(() => eval(`( + class a { + constructor() { }; + static set ["prototype"](x) { } + } + )`), TypeError); + diff --git a/test/staging/sm/class/compPropDestr.js b/test/staging/sm/class/compPropDestr.js new file mode 100644 index 0000000000..02299f32f7 --- /dev/null +++ b/test/staging/sm/class/compPropDestr.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 924688; +var summary = 'Computed Property Names'; + +print(BUGNUMBER + ": " + summary); + +var key = "z"; +var { [key]: foo } = { z: "bar" }; +assert.sameValue(foo, "bar"); + diff --git a/test/staging/sm/class/compPropNames.js b/test/staging/sm/class/compPropNames.js new file mode 100644 index 0000000000..ab9474d884 --- /dev/null +++ b/test/staging/sm/class/compPropNames.js @@ -0,0 +1,252 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 924688; +var summary = 'Computed Property Names'; + +print(BUGNUMBER + ": " + summary); + +// Function definitions. +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e instanceof SyntaxError) { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + + +// Tests begin. + +assertThrowsInstanceOf(function() { var a = {[field1]: "a", [field2]: "b"}; }, ReferenceError); + +assertThrowsInstanceOf(function() { + field1 = 1; + var a = {[field1]: "a", [field2]: "b"}; + }, ReferenceError); + +var f1 = 1; +var f2 = 2; +var a = {[f1]: "a", [f2]: "b"}; +assert.sameValue(a[1], "a"); +assert.sameValue(a[2], "b"); + +var a = {[f1]: "a", f2: "b"}; +assert.sameValue(a[1], "a"); +assert.sameValue(a.f2, "b"); + +var a = {["f1"]: "a", [++f2]: "b"}; +assert.sameValue(a.f1, "a"); +assert.sameValue(a[3], "b"); + +var a = {["f1"]: "a", f2: "b"}; +assert.sameValue(a.f1, "a"); +assert.sameValue(a.f2, "b"); + + +var i = 0; +var a = { + ["foo" + ++i]: i, + ["foo" + ++i]: i, + ["foo" + ++i]: i +}; +assert.sameValue(a.foo1, 1); +assert.sameValue(a.foo2, 2); +assert.sameValue(a.foo3, 3); + +var expr = "abc"; +syntaxError("({["); +syntaxError("({[expr"); +syntaxError("({[expr]"); +syntaxError("({[expr]})"); +syntaxError("({[expr] 0})"); +syntaxError("({[expr], 0})"); +syntaxError("[[expr]: 0]"); +syntaxError("({[expr]: name: 0})"); +syntaxError("({[1, 2]: 3})"); // because '1,2' is an Expression but not an AssignmentExpression +syntaxError("({[1;]: 1})"); // and not an ExpressionStatement +syntaxError("({[if (0) 0;]})"); // much less a Statement +syntaxError("function f() { {[x]: 1} }"); // that's not even an ObjectLiteral +syntaxError("function f() { [x]: 1 }"); // or that +syntaxError('a = {[f1@]: "a", [f2]: "b"}'); // unexpected symbol at end of AssignmentExpression +try { JSON.parse('{["a"]:4}'); } catch(e) { + if (!(e instanceof SyntaxError)) throw new Error('Expected syntax error'); +} + +// Property characteristics. +a = { ["b"] : 4 }; +b = Object.getOwnPropertyDescriptor(a, "b"); +assert.sameValue(b.configurable, true); +assert.sameValue(b.enumerable, true); +assert.sameValue(b.writable, true); +assert.sameValue(b.value, 4); + +// Setter and getter are not hit. +Object.defineProperty(Object.prototype, "x", { set: function (x) { throw "FAIL"; }, + get: function (x) { throw "FAIL"; } }); +var a = {["x"]: 0}; +assert.sameValue(a.x, 0); + +a = {["x"]: 1, ["x"]: 2}; +assert.sameValue(a.x, 2); +a = {x: 1, ["x"]: 2}; +assert.sameValue(a.x, 2); +a = {["x"]: 1, x: 2}; +assert.sameValue(a.x, 2); + +// Symbols +var unique_sym = Symbol("1"), registered_sym = Symbol.for("2"); +a = { [unique_sym] : 2, [registered_sym] : 3 }; +assert.sameValue(a[unique_sym], 2); +assert.sameValue(a[registered_sym], 3); + +// Same expression can be run several times to build objects with different property names. +a = []; +for (var i = 0; i < 3; i++) { + a[i] = {["foo" + i]: i}; +} +assert.sameValue(a[0].foo0, 0); +assert.sameValue(a[1].foo1, 1); +assert.sameValue(a[2].foo2, 2); + +// Following are stored in object's elements rather than slots. +var i = 0; +a = { [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i +} +for (var i = 1; i < 9; i++) + assert.sameValue(a[i], i); +syntaxError("a.1"); +syntaxError("a.2"); +syntaxError("a.3"); +syntaxError("a.4"); +syntaxError("a.5"); +syntaxError("a.6"); +syntaxError("a.7"); +syntaxError("a.8"); + +// Adding a single large index. +var i = 0; +a = { [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [3000] : 2999 +} +for (var i = 1; i < 9; i++) + assert.sameValue(a[i], i); +assert.sameValue(a[3000], 2999); + +// Defining several properties using eval. +var code = "({"; +for (i = 0; i < 1000; i++) + code += "['foo' + " + i + "]: 'ok', " +code += "['bar']: 'ok'});"; +var obj = eval(code); +for (i = 0; i < 1000; i++) + assert.sameValue(obj["foo" + i], "ok"); +assert.sameValue(obj["bar"], "ok"); + +// Can yield in a computed property name which is in a generator. +function* g() { + var a = { [yield 1]: 2, [yield 2]: 3}; + return a; +} + +var it = g(); +var next = it.next(); +assert.sameValue(next.done, false); +assert.sameValue(next.value, 1); +next = it.next("hello"); +assert.sameValue(next.done, false); +assert.sameValue(next.value, 2); +next = it.next("world"); +assert.sameValue(next.done, true); +assert.sameValue(next.value.hello, 2); +assert.sameValue(next.value.world, 3); + +// get and set. +expr = "abc"; +syntaxError("({get ["); +syntaxError("({get [expr()"); +syntaxError("({get [expr]()"); +syntaxError("({get [expr]()})"); +syntaxError("({get [expr] 0 ()})"); +syntaxError("({get [expr], 0(})"); +syntaxError("[get [expr]: 0()]"); +syntaxError("({get [expr](: name: 0})"); +syntaxError("({get [1, 2](): 3})"); +syntaxError("({get [1;](): 1})"); +syntaxError("({get [if (0) 0;](){}})"); +syntaxError("({set [(a)"); +syntaxError("({set [expr(a)"); +syntaxError("({set [expr](a){}"); +syntaxError("({set [expr]}(a)"); +syntaxError("({set [expr](a), 0})"); +syntaxError("[set [expr](a): 0]"); +syntaxError("({set [expr](a): name: 0})"); +syntaxError("({set [1, 2](a) {return 3;}})"); +syntaxError("({set [1;](a) {return 1}})"); +syntaxError("({set [if (0) 0;](a){}})"); +syntaxError("function f() { {get [x](): 1} }"); +syntaxError("function f() { get [x](): 1 }"); +syntaxError("function f() { {set [x](a): 1} }"); +syntaxError("function f() { set [x](a): 1 }"); +f1 = "abc"; +syntaxError('a = {get [f1@](){}, set [f1](a){}}'); // unexpected symbol at end of AssignmentExpression +syntaxError('a = {get@ [f1](){}, set [f1](a){}}'); // unexpected symbol after get +syntaxError('a = {get [f1](){}, set@ [f1](a){}}'); // unexpected symbol after set + +expr = "hey"; +a = {get [expr]() { return 3; }, set[expr](v) { throw 2; }}; +assert.sameValue(a.hey, 3); +assertThrowsValue(() => { a.hey = 5; }, 2); + +// Symbols with duplicate get and set. +expr = Symbol("hey"); +a = {get [expr]() { return 3; }, set[expr](v) { throw 2; }, + set [expr] (w) { throw 4; }, get[expr](){return 5; }}; +assert.sameValue(a[expr], 5); +assertThrowsValue(() => { a[expr] = 7; }, 4); + +// expressions with side effects are called in the right order +log = ""; +obj = { + "a": log += 'a', + get [log += 'b']() {}, + [log += 'c']: log += 'd', + set [log += 'e'](a) {} +}; +assert.sameValue(log, "abcde"); + +// assignment expressions, objects and regex in computed names +obj = { + get [a = "hey"]() { return 1; }, + get [a = {b : 4}.b]() { return 2; }, + set [/x/.source](a) { throw 3; } +} +assert.sameValue(obj.hey, 1); +assert.sameValue(obj[4], 2); +assertThrowsValue(() => { obj.x = 7; }, 3); + diff --git a/test/staging/sm/class/constructorCalled.js b/test/staging/sm/class/constructorCalled.js new file mode 100644 index 0000000000..85c1db84ab --- /dev/null +++ b/test/staging/sm/class/constructorCalled.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// The constructor specified should get called, regardless of order, or +// other distractions + +var called = false; +class a { constructor(x) { assert.sameValue(x, 4); called = true } } +new a(4); +assert.sameValue(called, true); + +called = false; +var aExpr = class { constructor(x) { assert.sameValue(x, 4); called = true } }; +new aExpr(4); +assert.sameValue(called, true); + +called = false; +class b { constructor() { called = true } method() { } } +new b(); +assert.sameValue(called, true); + +called = false; +var bExpr = class { constructor() { called = true } method() { } }; +new bExpr(); +assert.sameValue(called, true); + +called = false; +class c { method() { } constructor() { called = true; } } +new c(); +assert.sameValue(called, true); + +called = false; +var cExpr = class { method() { } constructor() { called = true; } } +new cExpr(); +assert.sameValue(called, true); + +called = false; +class d { ["constructor"]() { throw new Error("NO"); } constructor() { called = true; } } +new d(); +assert.sameValue(called, true); + +called = false; +var dExpr = class { ["constructor"]() { throw new Error("NO"); } constructor() { called = true; } } +new dExpr(); +assert.sameValue(called, true); + diff --git a/test/staging/sm/class/defaultConstructorBase.js b/test/staging/sm/class/defaultConstructorBase.js new file mode 100644 index 0000000000..9cef313813 --- /dev/null +++ b/test/staging/sm/class/defaultConstructorBase.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + method() { return 1; } + *gen() { return 2; } + static sMethod() { return 3; } + get answer() { return 42; } +} + +// Having a default constructor should work, and also not make you lose +// everything for no good reason + +assert.sameValue(Object.getPrototypeOf(new base()), base.prototype); +assert.sameValue(new base().method(), 1); +assert.sameValue(new base().gen().next().value, 2); +assert.sameValue(base.sMethod(), 3); +assert.sameValue(new base().answer, 42); + diff --git a/test/staging/sm/class/defaultConstructorDerivedSpread.js b/test/staging/sm/class/defaultConstructorDerivedSpread.js new file mode 100644 index 0000000000..2a2c277c60 --- /dev/null +++ b/test/staging/sm/class/defaultConstructorDerivedSpread.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Make sure that the default derived class constructor has the required spread semantics. + * + * Test credit André Bargull + */ + +// changed default derived class +// constructors to no longer execute the spread iteration protocol. +Array.prototype[Symbol.iterator] = function*() { + throw new Error("unexpected call"); +}; + +class Base { + constructor(a, b) { + assert.sameValue(a, 1); + assert.sameValue(b, 2); + } +}; +class Derived extends Base {}; + +new Derived(1, 2); + diff --git a/test/staging/sm/class/defaultConstructorNotCallable.js b/test/staging/sm/class/defaultConstructorNotCallable.js new file mode 100644 index 0000000000..def49a57f1 --- /dev/null +++ b/test/staging/sm/class/defaultConstructorNotCallable.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class badBase {} +assertThrowsInstanceOf(badBase, TypeError); + +class badSub extends (class {}) {} +assertThrowsInstanceOf(badSub, TypeError); + diff --git a/test/staging/sm/class/derivedConstructorArrowEvalBinding.js b/test/staging/sm/class/derivedConstructorArrowEvalBinding.js new file mode 100644 index 0000000000..992bb66a49 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorArrowEvalBinding.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure it doesn't matter when we make the arrow function +new class extends class { } { + constructor() { + let arrow = () => this; + assertThrowsInstanceOf(arrow, ReferenceError); + super(); + assert.sameValue(arrow(), this); + } +}(); + diff --git a/test/staging/sm/class/derivedConstructorArrowEvalClosed.js b/test/staging/sm/class/derivedConstructorArrowEvalClosed.js new file mode 100644 index 0000000000..67fab9157a --- /dev/null +++ b/test/staging/sm/class/derivedConstructorArrowEvalClosed.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +new class extends class { } { + constructor() { + let a1 = () => this; + let a2 = (() => super()); + assertThrowsInstanceOf(a1, ReferenceError); + assert.sameValue(a2(), a1()); + } +}(); + diff --git a/test/staging/sm/class/derivedConstructorArrowEvalEscape.js b/test/staging/sm/class/derivedConstructorArrowEvalEscape.js new file mode 100644 index 0000000000..e9e5d9b60d --- /dev/null +++ b/test/staging/sm/class/derivedConstructorArrowEvalEscape.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let arrow; + +class foo extends class { } { + constructor() { + arrow = () => this; + super(); + } +} + +assert.sameValue(new foo(), arrow()); + diff --git a/test/staging/sm/class/derivedConstructorArrowEvalEscapeUninitialized.js b/test/staging/sm/class/derivedConstructorArrowEvalEscapeUninitialized.js new file mode 100644 index 0000000000..3295acfe7d --- /dev/null +++ b/test/staging/sm/class/derivedConstructorArrowEvalEscapeUninitialized.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let superArrow; +let thisArrow; + +let thisStash; + +class base { + constructor() { + // We run this constructor twice as part of the double init check + if (!thisStash) + thisStash = {prop:45}; + return thisStash; + } +} + +class foo extends base { + constructor() { + superArrow = (()=>super()); + thisArrow = ()=>this; + } +} + +// Populate the arrow function saves. Since we never invoke super(), we throw +assertThrowsInstanceOf(()=>new foo(), ReferenceError); + +// No |this| binding in the closure, yet +assertThrowsInstanceOf(thisArrow, ReferenceError); + +// call super() +superArrow(); + +// Can't call it twice +assertThrowsInstanceOf(superArrow, ReferenceError); + +// Oh look, |this| is populated, now. +assert.sameValue(thisArrow(), thisStash); + diff --git a/test/staging/sm/class/derivedConstructorArrowEvalGetThis.js b/test/staging/sm/class/derivedConstructorArrowEvalGetThis.js new file mode 100644 index 0000000000..dfcf569f19 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorArrowEvalGetThis.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +new class extends class { } { + constructor() { + super(); + assert.sameValue(this, (()=>this)()); + assert.sameValue(this, eval("this")); + } +}(); + diff --git a/test/staging/sm/class/derivedConstructorArrowEvalNestedSuperCall.js b/test/staging/sm/class/derivedConstructorArrowEvalNestedSuperCall.js new file mode 100644 index 0000000000..74f5234283 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorArrowEvalNestedSuperCall.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +new class extends class { } { + constructor() { + (()=>eval("super()"))(); + assert.sameValue(this, eval("this")); + assert.sameValue(this, (()=>this)()); + } +}(); + +new class extends class { } { + constructor() { + (()=>(()=>super())())(); + assert.sameValue(this, eval("this")); + assert.sameValue(this, (()=>this)()); + } +}(); + +new class extends class { } { + constructor() { + eval("(()=>super())()"); + assert.sameValue(this, eval("this")); + assert.sameValue(this, (()=>this)()); + } +}(); + +new class extends class { } { + constructor() { + eval("eval('super()')"); + assert.sameValue(this, eval("this")); + assert.sameValue(this, (()=>this)()); + } +}(); + diff --git a/test/staging/sm/class/derivedConstructorArrowEvalSuperCall.js b/test/staging/sm/class/derivedConstructorArrowEvalSuperCall.js new file mode 100644 index 0000000000..755145ba44 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorArrowEvalSuperCall.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +new class extends class { } { + constructor() { + assert.sameValue(eval("super(); this"), this); + assert.sameValue(this, eval("this")); + assert.sameValue(this, (()=>this)()); + } +}(); + +new class extends class { } { + constructor() { + (()=>super())(); + assert.sameValue(this, eval("this")); + assert.sameValue(this, (()=>this)()); + } +}(); + diff --git a/test/staging/sm/class/derivedConstructorInlining.js b/test/staging/sm/class/derivedConstructorInlining.js new file mode 100644 index 0000000000..054110c69f --- /dev/null +++ b/test/staging/sm/class/derivedConstructorInlining.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Since we (for now!) can't emit jitcode for derived class statements. Make +// sure we can correctly invoke derived class constructors. + +class foo extends null { + constructor() { + // Anything that tests |this| should throw, so just let it run off the + // end. + } +} + +function intermediate() { + new foo(); +} + +for (let i = 0; i < 1100; i++) + assertThrownErrorContains(intermediate, "this"); + diff --git a/test/staging/sm/class/derivedConstructorName.js b/test/staging/sm/class/derivedConstructorName.js new file mode 100644 index 0000000000..e9f9347dd7 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorName.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class A { + constructor() { } +} + +class B extends A { } + +var b = new B(); +assert.sameValue(b.constructor.name, "B"); + diff --git a/test/staging/sm/class/derivedConstructorReturnPrimitive.js b/test/staging/sm/class/derivedConstructorReturnPrimitive.js new file mode 100644 index 0000000000..091416604e --- /dev/null +++ b/test/staging/sm/class/derivedConstructorReturnPrimitive.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo extends null { + constructor() { + // Returning a primitive is a TypeError in derived constructors. This + // ensures that super() can take the return value directly, without + // checking it. Use |null| here, as a tricky check to make sure we + // didn't lump it in with the object check, somehow. + return null; + } +} + +for (let i = 0; i < 1100; i++) + assertThrownErrorContains(() => new foo(), "return"); + diff --git a/test/staging/sm/class/derivedConstructorTDZExplicitThis.js b/test/staging/sm/class/derivedConstructorTDZExplicitThis.js new file mode 100644 index 0000000000..4aed295553 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorTDZExplicitThis.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo extends null { + constructor() { + this; + assert.sameValue(false, true); + } +} + +for (let i = 0; i < 1100; i++) + assertThrownErrorContains(() => new foo(), "this"); + diff --git a/test/staging/sm/class/derivedConstructorTDZOffEdge.js b/test/staging/sm/class/derivedConstructorTDZOffEdge.js new file mode 100644 index 0000000000..75555bf7ab --- /dev/null +++ b/test/staging/sm/class/derivedConstructorTDZOffEdge.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo extends null { + constructor() { + // Let it fall off the edge and throw. + } +} + +for (let i = 0; i < 1100; i++) + assertThrownErrorContains(() => new foo(), "this"); + diff --git a/test/staging/sm/class/derivedConstructorTDZReturnAliasedTry.js b/test/staging/sm/class/derivedConstructorTDZReturnAliasedTry.js new file mode 100644 index 0000000000..a5547189c4 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorTDZReturnAliasedTry.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base {} +class derived extends base { + constructor() { + try { + (function() { p1(eval()) }()) + } catch (e) { + return + } + } +} +assertThrowsInstanceOf(()=>new derived(), ReferenceError); + diff --git a/test/staging/sm/class/derivedConstructorTDZReturnObject.js b/test/staging/sm/class/derivedConstructorTDZReturnObject.js new file mode 100644 index 0000000000..6508c24c25 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorTDZReturnObject.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo extends null { + constructor() { + // If you return an object, we don't care that |this| went + // uninitialized + return {}; + } +} + +for (let i = 0; i < 1100; i++) + new foo(); + diff --git a/test/staging/sm/class/derivedConstructorTDZReturnTry.js b/test/staging/sm/class/derivedConstructorTDZReturnTry.js new file mode 100644 index 0000000000..22bfb8d47e --- /dev/null +++ b/test/staging/sm/class/derivedConstructorTDZReturnTry.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base {} +class derived extends base { + constructor() { + try { + return; + } catch (e) { + try { + return; + } catch (e) {} + } + } +} +assertThrowsInstanceOf(() => new derived, ReferenceError); + diff --git a/test/staging/sm/class/derivedConstructorTDZReturnUndefined.js b/test/staging/sm/class/derivedConstructorTDZReturnUndefined.js new file mode 100644 index 0000000000..4791024fe1 --- /dev/null +++ b/test/staging/sm/class/derivedConstructorTDZReturnUndefined.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo extends null { + constructor() { + // Explicit returns of undefined should act the same as falling off the + // end of the function. That is to say, they should throw. + return undefined; + } +} + +for (let i = 0; i < 1100; i++) + assertThrownErrorContains(() => new foo(), "this"); + diff --git a/test/staging/sm/class/extendBuiltinConstructors.js b/test/staging/sm/class/extendBuiltinConstructors.js new file mode 100644 index 0000000000..855e1e99e2 --- /dev/null +++ b/test/staging/sm/class/extendBuiltinConstructors.js @@ -0,0 +1,119 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function testBuiltinInstanceIsInstanceOf(instance, builtin, class_) { + assert.sameValue(instance instanceof class_, true); + assert.sameValue(instance instanceof builtin, true); + + if (builtin === Array) + assert.sameValue(Array.isArray(instance), true); +} + +function testBuiltinInstance(builtin, ...args) { + class sub extends builtin { + constructor(...args) { + super(...args); + this.called = true; + } + } + + let instance = new sub(...args); + assert.sameValue(instance.called, true); + testBuiltinInstanceIsInstanceOf(instance, builtin, sub); +} + +function testBuiltinMultipleSubclasses(builtin, ...args) { + function f(obj, prop) { + assert.sameValue(obj.prop, prop); + } + + class sub1 extends builtin { }; + class sub2 extends builtin { }; + + const prop1 = "A"; + const prop2 = "B"; + + sub1.prototype.prop = prop1; + sub2.prototype.prop = prop2; + + let instance1 = new sub1(...args); + let instance2 = new sub2(...args); + + // Also make sure we get the properties we want with a default constructor + testBuiltinInstanceIsInstanceOf(instance1, builtin, sub1); + + for (let i = 0; i < 10; i++) { + f(instance1, prop1); + f(instance2, prop2); + } +} + +function testBuiltin(builtin, ...args) { + testBuiltinInstance(builtin, ...args); + testBuiltinMultipleSubclasses(builtin, ...args); +} + +function testBuiltinTypedArrays() { + let typedArrays = [Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array]; + + for (let array of typedArrays) { + testBuiltin(array); + testBuiltin(array, 5); + testBuiltin(array, new array()); + testBuiltin(array, new ArrayBuffer()); + } +} + +testBuiltin(Function); +testBuiltin(Object); +testBuiltin(Boolean); +testBuiltin(Error); +testBuiltin(EvalError); +testBuiltin(RangeError); +testBuiltin(ReferenceError); +testBuiltin(SyntaxError); +testBuiltin(TypeError); +testBuiltin(URIError); +testBuiltin(Number); +testBuiltin(Date); +testBuiltin(Date, 5); +testBuiltin(Date, 5, 10); +testBuiltin(RegExp); +testBuiltin(RegExp, /Regexp Argument/); +testBuiltin(RegExp, "String Argument"); +testBuiltin(Map); +testBuiltin(Set); +testBuiltin(WeakMap); +testBuiltin(WeakSet); +testBuiltin(ArrayBuffer); +testBuiltinTypedArrays(); +testBuiltin(DataView, new ArrayBuffer()); +testBuiltin(DataView, new (createNewGlobal().ArrayBuffer)()); +testBuiltin(String); +testBuiltin(Array); +testBuiltin(Array, 15); +testBuiltin(Array, 3.0); +testBuiltin(Array, "non-length one-arg"); +testBuiltin(Array, 5, 10, 15, "these are elements"); +// More Promise subclassing tests can be found in non262/Promise/promise-subclassing.js +testBuiltin(Promise, _=>{}); + +if (this.SharedArrayBuffer) + testBuiltin(SharedArrayBuffer); + diff --git a/test/staging/sm/class/fields-instance-class-name-binding-eval.js b/test/staging/sm/class/fields-instance-class-name-binding-eval.js new file mode 100644 index 0000000000..643719a2b5 --- /dev/null +++ b/test/staging/sm/class/fields-instance-class-name-binding-eval.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Instance field initialisers can access the inner name binding for class definitions. +{ + class C { + field = eval("C"); + } + assert.sameValue(new C().field, C); +} +{ + let C = class Inner { + field = eval("Inner"); + }; + assert.sameValue(new C().field, C); +} + +// Instance field initialiser expressions always resolve the inner name binding. +{ + class C { + field = () => eval("C"); + } + assert.sameValue(new C().field(), C); + + const D = C; + C = null; + + assert.sameValue(new D().field(), D); +} +{ + let C = class Inner { + field = () => eval("Inner"); + } + assert.sameValue(new C().field(), C); + + const D = C; + C = null; + + assert.sameValue(new D().field(), D); +} + diff --git a/test/staging/sm/class/fields-instance-class-name-binding.js b/test/staging/sm/class/fields-instance-class-name-binding.js new file mode 100644 index 0000000000..0fc07f1bb0 --- /dev/null +++ b/test/staging/sm/class/fields-instance-class-name-binding.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Instance field initialisers can access the inner name binding for class definitions. +{ + class C { + field = C; + } + assert.sameValue(new C().field, C); +} +{ + let C = class Inner { + field = Inner; + }; + assert.sameValue(new C().field, C); +} + +// Instance field initialiser expressions always resolve the inner name binding. +{ + class C { + field = () => C; + } + assert.sameValue(new C().field(), C); + + const D = C; + C = null; + + assert.sameValue(new D().field(), D); +} +{ + let C = class Inner { + field = () => Inner; + } + assert.sameValue(new C().field(), C); + + const D = C; + C = null; + + assert.sameValue(new D().field(), D); +} + diff --git a/test/staging/sm/class/fields-static-class-name-binding-eval.js b/test/staging/sm/class/fields-static-class-name-binding-eval.js new file mode 100644 index 0000000000..50582ce56b --- /dev/null +++ b/test/staging/sm/class/fields-static-class-name-binding-eval.js @@ -0,0 +1,68 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Static field initialisers can access the inner name binding for class definitions. +{ + class C { + static field = eval("C"); + } + assert.sameValue(C.field, C); +} +{ + let C = class Inner { + static field = eval("Inner"); + }; + assert.sameValue(C.field, C); +} + +// Static field initialisers can't access the outer name binding for class expressions +// before it has been initialised. +{ + assertThrowsInstanceOf(() => { + let C = class { + static field = eval("C"); + }; + }, ReferenceError); +} + +// Static field initialisers can access the outer name binding for class expressions after +// the binding has been initialised +{ + let C = class { + static field = () => eval("C"); + }; + assert.sameValue(C.field(), C); +} + +// Static field initialiser expressions always resolve the inner name binding. +{ + class C { + static field = () => eval("C"); + } + assert.sameValue(C.field(), C); + + const D = C; + C = null; + + assert.sameValue(D.field(), D); +} +{ + let C = class Inner { + static field = () => eval("Inner"); + } + assert.sameValue(C.field(), C); + + const D = C; + C = null; + + assert.sameValue(D.field(), D); +} + diff --git a/test/staging/sm/class/fields-static-class-name-binding.js b/test/staging/sm/class/fields-static-class-name-binding.js new file mode 100644 index 0000000000..094aa87bfc --- /dev/null +++ b/test/staging/sm/class/fields-static-class-name-binding.js @@ -0,0 +1,68 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Static field initialisers can access the inner name binding for class definitions. +{ + class C { + static field = C; + } + assert.sameValue(C.field, C); +} +{ + let C = class Inner { + static field = Inner; + }; + assert.sameValue(C.field, C); +} + +// Static field initialisers can't access the outer name binding for class expressions +// before it has been initialised. +{ + assertThrowsInstanceOf(() => { + let C = class { + static field = C; + }; + }, ReferenceError); +} + +// Static field initialisers can access the outer name binding for class expressions after +// the binding has been initialised +{ + let C = class { + static field = () => C; + }; + assert.sameValue(C.field(), C); +} + +// Static field initialiser expressions always resolve the inner name binding. +{ + class C { + static field = () => C; + } + assert.sameValue(C.field(), C); + + const D = C; + C = null; + + assert.sameValue(D.field(), D); +} +{ + let C = class Inner { + static field = () => Inner; + } + assert.sameValue(C.field(), C); + + const D = C; + C = null; + + assert.sameValue(D.field(), D); +} + diff --git a/test/staging/sm/class/geterNoExprClosure.js b/test/staging/sm/class/geterNoExprClosure.js new file mode 100644 index 0000000000..2c447c27bf --- /dev/null +++ b/test/staging/sm/class/geterNoExprClosure.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// getter/setter with expression closure is allowed only in object literal. + +assertThrowsInstanceOf(() => eval(` + class foo { + constructor() {} + + get a() 1 + } +`), SyntaxError); + +assertThrowsInstanceOf(() => eval(` + class foo { + constructor() {} + + set a(v) 1 + } +`), SyntaxError); + diff --git a/test/staging/sm/class/innerBinding.js b/test/staging/sm/class/innerBinding.js new file mode 100644 index 0000000000..ea0e4707a7 --- /dev/null +++ b/test/staging/sm/class/innerBinding.js @@ -0,0 +1,95 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Named class definitions should create an immutable inner binding. +// Since all code in classes is in strict mode, attempts to mutate it +// should throw. +class Foof { constructor() { }; tryBreak() { Foof = 4; } } +for (let result of [Foof, class Bar { constructor() { }; tryBreak() { Bar = 4; } }]) + assertThrowsInstanceOf(() => new result().tryBreak(), TypeError); + +{ + class foo { constructor() { }; tryBreak() { foo = 4; } } + for (let result of [foo, class Bar { constructor() { }; tryBreak() { Bar = 4 } }]) + assertThrowsInstanceOf(() => new result().tryBreak(), TypeError); +} + +// TDZ applies to inner bindings +assertThrowsInstanceOf(()=>eval(`class Bar { + constructor() { }; + [Bar] () { }; + }`), ReferenceError); + +assertThrowsInstanceOf(()=>eval(`(class Bar { + constructor() { }; + [Bar] () { }; + })`), ReferenceError); + +// There's no magic "inner binding" global +{ + class Foo { + constructor() { }; + test() { + class Bar { + constructor() { } + test() { return Foo === Bar } + } + return new Bar().test(); + } + } + assert.sameValue(new Foo().test(), false); + assert.sameValue(new class foo { + constructor() { }; + test() { + return new class bar { + constructor() { } + test() { return foo === bar } + }().test(); + } + }().test(), false); +} + +// Inner bindings are shadowable +{ + class Foo { + constructor() { } + test(Foo) { return Foo; } + } + assert.sameValue(new Foo().test(4), 4); + assert.sameValue(new class foo { + constructor() { }; + test(foo) { return foo } + }().test(4), 4); +} + +// Inner bindings in expressions should shadow even existing names. +class Foo { constructor() { } static method() { throw new Error("NO!"); } } +assert.sameValue(new class Foo { + constructor() { }; + static method() { return 4; }; + test() { return Foo.method(); } + }().test(), 4); + +// The outer binding is distinct from the inner one +{ + let orig_X; + + class X { + constructor() { } + f() { assert.sameValue(X, orig_X); } + } + + orig_X = X; + X = 13; + assert.sameValue(X, 13); + new orig_X().f(); +} + diff --git a/test/staging/sm/class/methDefn.js b/test/staging/sm/class/methDefn.js new file mode 100644 index 0000000000..4629e936fb --- /dev/null +++ b/test/staging/sm/class/methDefn.js @@ -0,0 +1,213 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 924672; +var summary = 'Method Definitions' + +print(BUGNUMBER + ": " + summary); + +// Function definitions. +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e instanceof SyntaxError) { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + + +// Tests begin. + +syntaxError("{a(){}}"); +syntaxError("b = {a("); +syntaxError("b = {a)"); +syntaxError("b = {a(}"); +syntaxError("b = {a)}"); +syntaxError("b = {a()"); +syntaxError("b = {a()}"); +syntaxError("b = {a(){}"); +syntaxError("b = {a){}"); +syntaxError("b = {a}}"); +syntaxError("b = {a{}}"); +syntaxError("b = {a({}}"); +syntaxError("b = {a@(){}}"); +syntaxError("b = {a() => 0}"); +syntaxError("b = {a() void 0}"); +syntaxError("b = {a() 1}"); +syntaxError("b = {a() false}"); + +b = {a(){return 5;}}; +assert.sameValue(b.a(), 5); + +b = {a(){return "hey";}}; +assert.sameValue(b.a(), "hey"); + +b = {a(){return arguments;}}; +assert.sameValue(b.a().length, 0); + +b = {a(c){return arguments;}}; +assert.sameValue(b.a().length, 0); + +b = {a(c){return arguments;}}; +assert.sameValue(b.a(1).length, 1); + +b = {a(c){return arguments;}}; +assert.sameValue(b.a(1)[0], 1); + +b = {a(c,d){return arguments;}}; +assert.sameValue(b.a(1,2).length, 2); + +b = {a(c,d){return arguments;}}; +assert.sameValue(b.a(1,2)[0], 1); + +b = {a(c,d){return arguments;}}; +assert.sameValue(b.a(1,2)[1], 2); + +// Methods along with other properties. +syntaxError("b = {,a(){}}"); +syntaxError("b = {@,a(){}}"); +syntaxError("b = {a(){},@}"); +syntaxError("b = {a : 5 , (){}}"); +syntaxError("b = {a : 5@ , a(){}}"); +syntaxError("b = {a : , a(){}}"); +syntaxError("b = {a : 5, a()}}"); +syntaxError("b = {a : 5, a({}}"); +syntaxError("b = {a : 5, a){}}"); +syntaxError("b = {a : 5, a(){}"); +var c = "d"; +b = { a : 5, + [c] : "hey", + e() {return 6;}, + get f() {return 7;}, + set f(g) {this.h = 9;} +} +assert.sameValue(b.a, 5); +assert.sameValue(b.d, "hey"); +assert.sameValue(b.e(), 6); +assert.sameValue(b.f, 7); +assert.sameValue(b.h !== 9, true); +b.f = 15; +assert.sameValue(b.h, 9); + + +var i = 0; +var a = { + foo0 : function (){return 0;}, + ["foo" + ++i](){return 1;}, + ["foo" + ++i](){return 2;}, + ["foo" + ++i](){return 3;}, + foo4(){return 4;} +}; +assert.sameValue(a.foo0(), 0); +assert.sameValue(a.foo1(), 1); +assert.sameValue(a.foo2(), 2); +assert.sameValue(a.foo3(), 3); +assert.sameValue(a.foo4(), 4); + +// Symbols. +var unique_sym = Symbol("1"), registered_sym = Symbol.for("2"); +a = { [unique_sym](){return 2;}, [registered_sym](){return 3;} }; +assert.sameValue(a[unique_sym](), 2); +assert.sameValue(a[registered_sym](), 3); + +// Method characteristics. +a = { b(){ return 4;} }; +b = Object.getOwnPropertyDescriptor(a, "b"); +assert.sameValue(b.configurable, true); +assert.sameValue(b.enumerable, true); +assert.sameValue(b.writable, true); +assert.sameValue(b.value(), 4); + +// prototype property +assert.sameValue(a.b.prototype, undefined); +assert.sameValue(a.b.hasOwnProperty("prototype"), false); + +// Defining several methods using eval. +var code = "({"; +for (i = 0; i < 1000; i++) + code += "['foo' + " + i + "]() {return 'ok';}, " +code += "['bar']() {return 'all ok'}});"; +var obj = eval(code); +for (i = 0; i < 1000; i++) + assert.sameValue(obj["foo" + i](), "ok"); +assert.sameValue(obj["bar"](), "all ok"); + +// this +var obj = { + a : "hey", + meth(){return this.a;} +} +assert.sameValue(obj.meth(), "hey"); + +// Inheritance +var obj2 = Object.create(obj); +assert.sameValue(obj2.meth(), "hey"); + +var obj = { + a() { + return "hey"; + } +} +assert.sameValue(obj.a.call(), "hey"); + +// Duplicates +var obj = { + meth : 3, + meth() { return 4; }, + meth() { return 5; } +} +assert.sameValue(obj.meth(), 5); + +var obj = { + meth() { return 4; }, + meth() { return 5; }, + meth : 3 +} +assert.sameValue(obj.meth, 3); +assertThrowsInstanceOf(function() {obj.meth();}, TypeError); + +// Strict mode +a = {b(c){"use strict";return c;}}; +assert.sameValue(a.b(1), 1); +a = {["b"](c){"use strict";return c;}}; +assert.sameValue(a.b(1), 1); + +// Allow strict-reserved names as methods in objects. +// (Bug 1124362) +a = { static() { return 4; } }; +assert.sameValue(a.static(), 4); + +a = { get static() { return 4; } }; +assert.sameValue(a.static, 4); + +a = { set static(x) { assert.sameValue(x, 4); } }; +a.static = 4; + +function testStrictMode() { + "use strict"; + var obj = { static() { return 4; } }; + assert.sameValue(obj.static(), 4); + + obj = { get static() { return 4; } }; + assert.sameValue(obj.static, 4); + + obj = { set static(x) { assert.sameValue(x, 4); } }; + obj.static = 4; +} +testStrictMode(); + +// Tests provided by benvie in the bug to distinguish from ES5 desugar. +assert.sameValue(({ method() {} }).method.name, "method"); +assertThrowsInstanceOf(function() {({ method() { method() } }).method() }, ReferenceError); + diff --git a/test/staging/sm/class/methDefnGen.js b/test/staging/sm/class/methDefnGen.js new file mode 100644 index 0000000000..771ada50ec --- /dev/null +++ b/test/staging/sm/class/methDefnGen.js @@ -0,0 +1,92 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 924672; +var summary = 'Method Definitions - Generators' + +print(BUGNUMBER + ": " + summary); + +// Function definitions. +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e instanceof SyntaxError) { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + + +// Tests begin. + +syntaxError("{*a(){}}"); +syntaxError("b = {*(){}"); +syntaxError("b = {*{}"); +syntaxError("b = {*){}"); +syntaxError("b = {*({}"); +syntaxError("b = {*(){"); +syntaxError("b = {*()}"); +syntaxError("b = {*a("); +syntaxError("b = {*a)"); +syntaxError("b = {*a(}"); +syntaxError("b = {*a)}"); +syntaxError("b = {*a()"); +syntaxError("b = {*a()}"); +syntaxError("b = {*a(){}"); +syntaxError("b = {*a){}"); +syntaxError("b = {*a}}"); +syntaxError("b = {*a{}}"); +syntaxError("b = {*a({}}"); +syntaxError("b = {*a@(){}}"); +syntaxError("b = {*@(){}}"); +syntaxError("b = {*get a(){}}"); +syntaxError("b = {get *a(){}}"); +syntaxError("b = {get a*(){}}"); +syntaxError("b = {*set a(c){}}"); +syntaxError("b = {set *a(c){}}"); +syntaxError("b = {set a*(c){}}"); +syntaxError("b = {*a : 1}"); +syntaxError("b = {a* : 1}"); +syntaxError("b = {a :* 1}"); +syntaxError("b = {a*(){}}"); + +// Generator methods. +b = { * g() { + var a = { [yield 1]: 2, [yield 2]: 3}; + return a; +} } +var it = b.g(); +var next = it.next(); +assert.sameValue(next.done, false); +assert.sameValue(next.value, 1); +next = it.next("hello"); +assert.sameValue(next.done, false); +assert.sameValue(next.value, 2); +next = it.next("world"); +assert.sameValue(next.done, true); +assert.sameValue(next.value.hello, 2); +assert.sameValue(next.value.world, 3); + +// prototype property +assert.sameValue(b.g.hasOwnProperty("prototype"), true); + +// Strict mode +a = {*b(c){"use strict";yield c;}}; +assert.sameValue(a.b(1).next().value, 1); +a = {*["b"](c){"use strict";return c;}}; +assert.sameValue(a.b(1).next().value, 1); + +// Generators should not have [[Construct]] +a = {*g() { yield 1; }} +assertThrowsInstanceOf(() => { new a.g }, TypeError); + diff --git a/test/staging/sm/class/methodInstallation.js b/test/staging/sm/class/methodInstallation.js new file mode 100644 index 0000000000..3601b5e946 --- /dev/null +++ b/test/staging/sm/class/methodInstallation.js @@ -0,0 +1,110 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Do the things we write in classes actually appear as they are supposed to? + +var methodCalled; +var getterCalled; +var setterCalled; +var constructorCalled; +var staticMethodCalled; +var staticGetterCalled; +var staticSetterCalled; +class testClass { + constructor() { constructorCalled = true; } + __proto__() { methodCalled = true } + get getter() { getterCalled = true; } + set setter(x) { setterCalled = true; } + static staticMethod() { staticMethodCalled = true; } + static get staticGetter() { staticGetterCalled = true; } + static set staticSetter(x) { staticSetterCalled = true; } + *[Symbol.iterator]() { yield "cow"; yield "pig"; } +} + +for (let a of [testClass, + class { + constructor() { constructorCalled = true; } + __proto__() { methodCalled = true } + get getter() { getterCalled = true; } + set setter(x) { setterCalled = true; } + static staticMethod() { staticMethodCalled = true; } + static get staticGetter() { staticGetterCalled = true; } + static set staticSetter(x) { staticSetterCalled = true; } + *[Symbol.iterator]() { yield "cow"; yield "pig"; } + }]) { + + methodCalled = false; + getterCalled = false; + setterCalled = false; + constructorCalled = false; + staticMethodCalled = false; + staticGetterCalled = false; + staticSetterCalled = false; + + var aConstDesc = Object.getOwnPropertyDescriptor(a.prototype, "constructor"); + assert.sameValue(aConstDesc.writable, true); + assert.sameValue(aConstDesc.configurable, true); + assert.sameValue(aConstDesc.enumerable, false); + new aConstDesc.value(); + assert.sameValue(constructorCalled, true); + + // __proto__ is just an identifier for classes. No prototype changes are made. + assert.sameValue(Object.getPrototypeOf(a.prototype), Object.prototype); + var aMethDesc = Object.getOwnPropertyDescriptor(a.prototype, "__proto__"); + assert.sameValue(aMethDesc.writable, true); + assert.sameValue(aMethDesc.configurable, true); + assert.sameValue(aMethDesc.enumerable, false); + aMethDesc.value(); + assert.sameValue(methodCalled, true); + + var aGetDesc = Object.getOwnPropertyDescriptor(a.prototype, "getter"); + assert.sameValue(aGetDesc.configurable, true); + assert.sameValue(aGetDesc.enumerable, false); + aGetDesc.get(); + assertThrowsInstanceOf(() => new aGetDesc.get, TypeError); + assert.sameValue(getterCalled, true); + + var aSetDesc = Object.getOwnPropertyDescriptor(a.prototype, "setter"); + assert.sameValue(aSetDesc.configurable, true); + assert.sameValue(aSetDesc.enumerable, false); + aSetDesc.set(); + assertThrowsInstanceOf(() => new aSetDesc.set, TypeError); + assert.sameValue(setterCalled, true); + assert.deepEqual(aSetDesc, Object.getOwnPropertyDescriptor(a.prototype, "setter")); + + assert.sameValue(Object.getOwnPropertyDescriptor(new a(), "staticMethod"), undefined); + var aStaticMethDesc = Object.getOwnPropertyDescriptor(a, "staticMethod"); + assert.sameValue(aStaticMethDesc.configurable, true); + assert.sameValue(aStaticMethDesc.enumerable, false); + assert.sameValue(aStaticMethDesc.writable, true); + aStaticMethDesc.value(); + assertThrowsInstanceOf(() => new aStaticMethDesc.value, TypeError); + assert.sameValue(staticMethodCalled, true); + + assert.sameValue(Object.getOwnPropertyDescriptor(new a(), "staticGetter"), undefined); + var aStaticGetDesc = Object.getOwnPropertyDescriptor(a, "staticGetter"); + assert.sameValue(aStaticGetDesc.configurable, true); + assert.sameValue(aStaticGetDesc.enumerable, false); + aStaticGetDesc.get(); + assertThrowsInstanceOf(() => new aStaticGetDesc.get, TypeError); + assert.sameValue(staticGetterCalled, true); + + assert.sameValue(Object.getOwnPropertyDescriptor(new a(), "staticSetter"), undefined); + var aStaticSetDesc = Object.getOwnPropertyDescriptor(a, "staticSetter"); + assert.sameValue(aStaticSetDesc.configurable, true); + assert.sameValue(aStaticSetDesc.enumerable, false); + aStaticSetDesc.set(); + assertThrowsInstanceOf(() => new aStaticSetDesc.set, TypeError); + assert.sameValue(staticSetterCalled, true); + + assert.sameValue([...new a()].join(), "cow,pig"); +} + diff --git a/test/staging/sm/class/methodName.js b/test/staging/sm/class/methodName.js new file mode 100644 index 0000000000..f031132a79 --- /dev/null +++ b/test/staging/sm/class/methodName.js @@ -0,0 +1,50 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class TestClass { + get getter() { } + set setter(x) { } + method() { } + + static get staticGetter() { } + static set staticSetter(x) { } + static staticMethod() { } + + get 1() { } + set 2(v) { } + 3() { } + + static get 4() { } + static set 5(x) { } + static 6() { } +} + +function name(obj, property, get) { + let desc = Object.getOwnPropertyDescriptor(obj, property); + return (get ? desc.get : desc.set).name; +} + +assert.sameValue(name(TestClass.prototype, "getter", true), "get getter"); +assert.sameValue(name(TestClass.prototype, "setter", false), "set setter"); +assert.sameValue(TestClass.prototype.method.name, "method"); + +assert.sameValue(name(TestClass, "staticGetter", true), "get staticGetter"); +assert.sameValue(name(TestClass, "staticSetter", false), "set staticSetter"); +assert.sameValue(TestClass.staticMethod.name, "staticMethod"); + +assert.sameValue(name(TestClass.prototype, "1", true), "get 1"); +assert.sameValue(name(TestClass.prototype, "2", false), "set 2"); +assert.sameValue(TestClass.prototype[3].name, "3"); + +assert.sameValue(name(TestClass, "4", true), "get 4"); +assert.sameValue(name(TestClass, "5", false), "set 5"); +assert.sameValue(TestClass[6].name, "6"); + diff --git a/test/staging/sm/class/methodOverwrites.js b/test/staging/sm/class/methodOverwrites.js new file mode 100644 index 0000000000..db5f9baf78 --- /dev/null +++ b/test/staging/sm/class/methodOverwrites.js @@ -0,0 +1,89 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that we can overwrite methods when more tha one is present. +{ + var result = 0; + // Regardless of order, the constructor is overridden by any CPN, because it's + // processed seperately. + class a { ["constructor"]() { result += 1; }; constructor() { result += 2; } } + var aInst = new a(); + assert.sameValue(result, 2); + aInst.constructor(); + assert.sameValue(result, 3); + + class b { constructor() { result += 2; } ["constructor"]() { result += 1; }; } + var bInst = new b(); + assert.sameValue(result, 5); + bInst.constructor(); + assert.sameValue(result, 6); + + class c { constructor() { } method() { result += 1 } get method() { result += 2 } } + new c().method; + assert.sameValue(result, 8); + + class d { constructor() { } get method() { result += 1 } method() { result += 2 } } + new d().method(); + assert.sameValue(result, 10); + + // getters and setter should not overwrite each other, but merge cleanly. + class e { constructor() { } get method() { result += 1 } set method(x) { } } + new e().method; + assert.sameValue(result, 11); + + class f { constructor() { } + set method(x) { throw "NO"; } + method() { throw "NO" } + get method() { return new Function("result += 1"); } + } + new f().method(); + assert.sameValue(result, 12); +} + +// Try again with expressions. +{ + var result = 0; + // Regardless of order, the constructor is overridden by any CPN, because it's + // processed seperately. + let a = class { ["constructor"]() { result += 1; }; constructor() { result += 2; } }; + var aInst = new a(); + assert.sameValue(result, 2); + aInst.constructor(); + assert.sameValue(result, 3); + + let b = class { constructor() { result += 2; } ["constructor"]() { result += 1; }; }; + var bInst = new b(); + assert.sameValue(result, 5); + bInst.constructor(); + assert.sameValue(result, 6); + + let c = class { constructor() { } method() { result += 1 } get method() { result += 2 } }; + new c().method; + assert.sameValue(result, 8); + + let d = class { constructor() { } get method() { result += 1 } method() { result += 2 } }; + new d().method(); + assert.sameValue(result, 10); + + // getters and setter should not overwrite each other, but merge cleanly. + let e = class { constructor() { } get method() { result += 1 } set method(x) { } }; + new e().method; + assert.sameValue(result, 11); + + let f = class { constructor() { } + set method(x) { throw "NO"; } + method() { throw "NO" } + get method() { return new Function("result += 1"); } + }; + new f().method(); + assert.sameValue(result, 12); +} + diff --git a/test/staging/sm/class/methodsPrototype.js b/test/staging/sm/class/methodsPrototype.js new file mode 100644 index 0000000000..5957ead8ca --- /dev/null +++ b/test/staging/sm/class/methodsPrototype.js @@ -0,0 +1,48 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class TestClass { + constructor() { } + method() { } + get getter() { } + set setter(x) { } + *generator() { } + static staticMethod() { } + static get staticGetter() { } + static set staticSetter(x) { } + static *staticGenerator() { } +} + +var test = new TestClass(); + +var hasPrototype = [ + test.constructor, + test.generator, + TestClass.staticGenerator +] + +for (var fun of hasPrototype) { + assert.sameValue(fun.hasOwnProperty('prototype'), true); +} + +var hasNoPrototype = [ + test.method, + Object.getOwnPropertyDescriptor(test.__proto__, 'getter').get, + Object.getOwnPropertyDescriptor(test.__proto__, 'setter').set, + TestClass.staticMethod, + Object.getOwnPropertyDescriptor(TestClass, 'staticGetter').get, + Object.getOwnPropertyDescriptor(TestClass, 'staticSetter').set, +] + +for (var fun of hasNoPrototype) { + assert.sameValue(fun.hasOwnProperty('prototype'), false); +} + diff --git a/test/staging/sm/class/newTargetArgumentsIntact.js b/test/staging/sm/class/newTargetArgumentsIntact.js new file mode 100644 index 0000000000..397da5d0fb --- /dev/null +++ b/test/staging/sm/class/newTargetArgumentsIntact.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Since we put new.target at the end of the arguments vector, ensrue that it +// doesn't interact with the arguments object + +var argsContent; + +function argsWithNewTarget(foo) { + assert.sameValue(arguments.length, argsContent.length); + for (let i = 0; i < arguments.length; i++) + assert.sameValue(arguments[i], argsContent[i]); + let nt = new.target; + + // Assigning to the arguments object shouldn't infect new.target, either + arguments[arguments.length] = 42; + assert.sameValue(new.target, nt); +} + +// Test constructing invocations, with under and overflow +argsContent = []; +for (let i = 0; i < 100; i++) + new argsWithNewTarget(); + +argsContent = [1]; +for (let i = 0; i < 100; i++) + new argsWithNewTarget(1); + +argsContent = [1,2,3]; +for (let i = 0; i < 100; i++) + new argsWithNewTarget(1, 2, 3); + +// Test spreadnew as well. +argsContent = []; +for (let i = 0; i < 100; i++) + new argsWithNewTarget(...[]); + +argsContent = [1]; +for (let i = 0; i < 100; i++) + new argsWithNewTarget(...[1]); + +argsContent = [1,2,3]; +for (let i = 0; i < 100; i++) + new argsWithNewTarget(...[1,2,3]); + diff --git a/test/staging/sm/class/newTargetArrow.js b/test/staging/sm/class/newTargetArrow.js new file mode 100644 index 0000000000..6987b57b8f --- /dev/null +++ b/test/staging/sm/class/newTargetArrow.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// new.target is valid in any arrow function not in a global context. +new Function('(() => new.target)()'); + +// It's also good inside eval, but not global eval +assertThrowsInstanceOf(() => eval('() => new.target'), SyntaxError); + +function assertNewTarget(expected) { + assert.sameValue((()=>new.target)(), expected); + assert.sameValue(eval('()=>new.target')(), expected); + + // Make sure that arrow functions can escape their original context and + // still get the right answer. + return (() => new.target); +} + +const ITERATIONS = 550; +for (let i = 0; i < ITERATIONS; i++) + assert.sameValue(assertNewTarget(undefined)(), undefined); + +for (let i = 0; i < ITERATIONS; i++) + assert.sameValue(new assertNewTarget(assertNewTarget)(), assertNewTarget); + diff --git a/test/staging/sm/class/newTargetBound.js b/test/staging/sm/class/newTargetBound.js new file mode 100644 index 0000000000..f227ee1b74 --- /dev/null +++ b/test/staging/sm/class/newTargetBound.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function boundTarget(expected) { + assert.sameValue(new.target, expected); +} + +let bound = boundTarget.bind(undefined); + +const TEST_ITERATIONS = 550; + +for (let i = 0; i < TEST_ITERATIONS; i++) + bound(undefined); + +for (let i = 0; i < TEST_ITERATIONS; i++) + new bound(boundTarget); + diff --git a/test/staging/sm/class/newTargetCCW.js b/test/staging/sm/class/newTargetCCW.js new file mode 100644 index 0000000000..98c6370287 --- /dev/null +++ b/test/staging/sm/class/newTargetCCW.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure we wrap the new target on CCW construct calls. +var g = createNewGlobal(); + +let f = g.eval('(function (expected) { this.accept = new.target === expected; })'); + +for (let i = 0; i < 1100; i++) + assert.sameValue(new f(f).accept, true); + diff --git a/test/staging/sm/class/newTargetDVG.js b/test/staging/sm/class/newTargetDVG.js new file mode 100644 index 0000000000..dcf78dd3ae --- /dev/null +++ b/test/staging/sm/class/newTargetDVG.js @@ -0,0 +1,16 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function thunk() { + new.target(); +} +assertThrownErrorContains(thunk, "new.target"); + diff --git a/test/staging/sm/class/newTargetDefaults.js b/test/staging/sm/class/newTargetDefaults.js new file mode 100644 index 0000000000..84de0695cf --- /dev/null +++ b/test/staging/sm/class/newTargetDefaults.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Check that new.target works properly in defaults. + +function check(expected, actual = new.target) { assert.sameValue(actual, expected); } +new check(check); +check(undefined); + +let evaldCheck = eval("(" + check.toString() + ")"); +new evaldCheck(evaldCheck); +evaldCheck(undefined); + +function testInFunction() { + function checkInFunction(expected, actual = new.target) { assert.sameValue(actual, expected); } + new checkInFunction(checkInFunction); + checkInFunction(undefined); + + let evaldCheckInFunction = eval("(" + checkInFunction.toString() + ")"); + new evaldCheckInFunction(evaldCheckInFunction); + evaldCheckInFunction(undefined); +} + +testInFunction(); +new testInFunction(); + diff --git a/test/staging/sm/class/newTargetDirectInvoke.js b/test/staging/sm/class/newTargetDirectInvoke.js new file mode 100644 index 0000000000..a6023cd7ea --- /dev/null +++ b/test/staging/sm/class/newTargetDirectInvoke.js @@ -0,0 +1,59 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// new.target is valid inside Function() invocations +var func = new Function("new.target"); + +// Note that this will also test new.target in ion inlines. When the toplevel +// script is compiled, assertNewTarget will be inlined. +function assertNewTarget(expected, unused) { assert.sameValue(new.target, expected); } + +// Test non-constructing invocations, with arg underflow, overflow, and correct +// numbers +for (let i = 0; i < 100; i++) + assertNewTarget(undefined, null); + +for (let i = 0; i < 100; i++) + assertNewTarget(undefined); + +for (let i = 0; i < 100; i++) + assertNewTarget(undefined, null, 1); + +// Test spread-call +for (let i = 0; i < 100; i++) + assertNewTarget(...[undefined]); + +for (let i = 0; i < 100; i++) + assertNewTarget(...[undefined, null]); + +for (let i = 0; i < 100; i++) + assertNewTarget(...[undefined, null, 1]); + +// Test constructing invocations, again with under and overflow +for (let i = 0; i < 100; i++) + new assertNewTarget(assertNewTarget, null); + +for (let i = 0; i < 100; i++) + new assertNewTarget(assertNewTarget); + +for (let i = 0; i < 100; i++) + new assertNewTarget(assertNewTarget, null, 1); + +// Test spreadnew as well. +for (let i = 0; i < 100; i++) + new assertNewTarget(...[assertNewTarget]); + +for (let i = 0; i < 100; i++) + new assertNewTarget(...[assertNewTarget, null]); + +for (let i = 0; i < 100; i++) + new assertNewTarget(...[assertNewTarget, null, 1]); + diff --git a/test/staging/sm/class/newTargetEval.js b/test/staging/sm/class/newTargetEval.js new file mode 100644 index 0000000000..26b649f616 --- /dev/null +++ b/test/staging/sm/class/newTargetEval.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Eval of new.target is invalid outside functions. +try { + eval('new.target'); + assert.sameValue(false, true); +} catch (e) { + if (!(e instanceof SyntaxError)) + throw e; +} + +// new.target is invalid inside eval inside top-level arrow functions +assertThrowsInstanceOf(() => eval('new.target'), SyntaxError); + +// new.target is invalid inside indirect eval. +let ieval = eval; +try { + (function () { return ieval('new.target'); })(); + assert.sameValue(false, true); +} catch (e) { + if (!(e instanceof SyntaxError)) + throw e; +} + +function assertNewTarget(expected) { + assert.sameValue(eval('new.target'), expected); + assert.sameValue((()=>eval('new.target'))(), expected); + + // Also test nestings "by induction" + assert.sameValue(eval('eval("new.target")'), expected); + assert.sameValue(eval("eval('eval(`new.target`)')"), expected); +} + +const ITERATIONS = 550; +for (let i = 0; i < ITERATIONS; i++) + assertNewTarget(undefined); + +for (let i = 0; i < ITERATIONS; i++) + new assertNewTarget(assertNewTarget); + diff --git a/test/staging/sm/class/newTargetGenerators.js b/test/staging/sm/class/newTargetGenerators.js new file mode 100644 index 0000000000..07aadf3f63 --- /dev/null +++ b/test/staging/sm/class/newTargetGenerators.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function *generatorNewTarget(expected) { + assert.sameValue(new.target, expected); + assert.sameValue(eval('new.target'), expected); + assert.sameValue((() => new.target)(), expected); + yield (() => new.target); +} + +const ITERATIONS = 25; + +for (let i = 0; i < ITERATIONS; i++) + assert.sameValue(generatorNewTarget(undefined).next().value(), undefined); + diff --git a/test/staging/sm/class/newTargetMethods.js b/test/staging/sm/class/newTargetMethods.js new file mode 100644 index 0000000000..4af7f32242 --- /dev/null +++ b/test/staging/sm/class/newTargetMethods.js @@ -0,0 +1,60 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Just like newTargetDirectInvoke, except to prove it works in functions +// defined with method syntax as well. Note that methods, getters, and setters +// are not constructible. + +let ol = { + olTest(arg) { assert.sameValue(arg, 4); assert.sameValue(new.target, undefined); }, + get ol() { assert.sameValue(new.target, undefined); }, + set ol(arg) { assert.sameValue(arg, 4); assert.sameValue(new.target, undefined); } +} + +class cl { + constructor() { assert.sameValue(new.target, cl); } + clTest(arg) { assert.sameValue(arg, 4); assert.sameValue(new.target, undefined); } + get cl() { assert.sameValue(new.target, undefined); } + set cl(arg) { assert.sameValue(arg, 4); assert.sameValue(new.target, undefined); } + + static staticclTest(arg) { assert.sameValue(arg, 4); assert.sameValue(new.target, undefined); } + static get staticcl() { assert.sameValue(new.target, undefined); } + static set staticcl(arg) { assert.sameValue(arg, 4); assert.sameValue(new.target, undefined); } +} + +const TEST_ITERATIONS = 150; + +for (let i = 0; i < TEST_ITERATIONS; i++) + ol.olTest(4); +for (let i = 0; i < TEST_ITERATIONS; i++) + ol.ol; +for (let i = 0; i < TEST_ITERATIONS; i++) + ol.ol = 4; + +for (let i = 0; i < TEST_ITERATIONS; i++) + cl.staticclTest(4); +for (let i = 0; i < TEST_ITERATIONS; i++) + cl.staticcl; +for (let i = 0; i < TEST_ITERATIONS; i++) + cl.staticcl = 4; + +for (let i = 0; i < TEST_ITERATIONS; i++) + new cl(); + +let clInst = new cl(); + +for (let i = 0; i < TEST_ITERATIONS; i++) + clInst.clTest(4); +for (let i = 0; i < TEST_ITERATIONS; i++) + clInst.cl; +for (let i = 0; i < TEST_ITERATIONS; i++) + clInst.cl = 4; + diff --git a/test/staging/sm/class/newTargetNonFunction.js b/test/staging/sm/class/newTargetNonFunction.js new file mode 100644 index 0000000000..fbfb9ab8d4 --- /dev/null +++ b/test/staging/sm/class/newTargetNonFunction.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure that we can plumb new.target, even if the results are going to +// throw. + +assertThrowsInstanceOf(() => new ""(...Array()), TypeError); + +assertThrowsInstanceOf(() => new ""(), TypeError); +assertThrowsInstanceOf(() => new ""(1), TypeError); + diff --git a/test/staging/sm/class/newTargetProxyNative.js b/test/staging/sm/class/newTargetProxyNative.js new file mode 100644 index 0000000000..514fb39be6 --- /dev/null +++ b/test/staging/sm/class/newTargetProxyNative.js @@ -0,0 +1,14 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var proxyToArray = new Proxy(Array, {}); +new proxyToArray(); + diff --git a/test/staging/sm/class/parenExprToString.js b/test/staging/sm/class/parenExprToString.js new file mode 100644 index 0000000000..697a82eb79 --- /dev/null +++ b/test/staging/sm/class/parenExprToString.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that parenthesized class expressions don't get their toString offsets +// messed up. + +assert.sameValue((class {}).toString(), "class {}"); +assert.sameValue(((class {})).toString(), "class {}"); + diff --git a/test/staging/sm/class/staticConstructor.js b/test/staging/sm/class/staticConstructor.js new file mode 100644 index 0000000000..94e9608369 --- /dev/null +++ b/test/staging/sm/class/staticConstructor.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class testBasic { + constructor() { } + static constructor() { } +} + +class testWithExtends extends null { + constructor() { }; + static constructor() { }; +} + +class testOrder { + static constructor() { }; + constructor() { }; +} + +class testOrderWithExtends extends null { + static constructor() { }; + constructor() { }; +} + diff --git a/test/staging/sm/class/staticMethods.js b/test/staging/sm/class/staticMethods.js new file mode 100644 index 0000000000..4385b85757 --- /dev/null +++ b/test/staging/sm/class/staticMethods.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// basic static method test +class X { + static count() { return ++this.hits; } + constructor() { } +} +X.hits = 0; +assert.sameValue(X.count(), 1); + +// A static method is just a function. +assert.sameValue(X.count instanceof Function, true); +assert.sameValue(X.count.length, 0); +assert.sameValue(X.count.bind({hits: 77})(), 78); + diff --git a/test/staging/sm/class/strictExecution.js b/test/staging/sm/class/strictExecution.js new file mode 100644 index 0000000000..450043364a --- /dev/null +++ b/test/staging/sm/class/strictExecution.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Classes are always strict mode. Check computed property names and heritage +// expressions as well. + +class a { constructor() { Object.preventExtensions({}).prop = 0; } } +assertThrowsInstanceOf(() => new a(), TypeError); +var aExpr = class { constructor() { Object.preventExtensions().prop = 0; } }; +assertThrowsInstanceOf(() => new aExpr(), TypeError); + +function shouldThrowCPN() { + class b { + [Object.preventExtensions({}).prop = 4]() { } + constructor() { } + } +} +function shouldThrowCPNExpr() { + var b = class { + [Object.preventExtensions({}).prop = 4]() { } + constructor() { } + }; +} +assertThrowsInstanceOf(shouldThrowCPN, TypeError); +assertThrowsInstanceOf(shouldThrowCPNExpr, TypeError); + +function shouldThrowHeritage() { + class b extends (Object.preventExtensions({}).prop = 4) { + constructor() { } + } +} +function shouldThrowHeritageExpr() { + var b = class extends (Object.preventExtensions({}).prop = 4) { + constructor() { } + }; +} +assertThrowsInstanceOf(shouldThrowHeritage, TypeError); +assertThrowsInstanceOf(shouldThrowHeritageExpr, TypeError); + diff --git a/test/staging/sm/class/stringConstructor.js b/test/staging/sm/class/stringConstructor.js new file mode 100644 index 0000000000..84399f76d3 --- /dev/null +++ b/test/staging/sm/class/stringConstructor.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class A { + "constructor"() { return {}; } +} +assert.sameValue(new A() instanceof A, false); + +class B extends class { } { + "constructor"() { return {}; } +} +assert.sameValue(new B() instanceof B, false); + diff --git a/test/staging/sm/class/subclassedArrayUnboxed.js b/test/staging/sm/class/subclassedArrayUnboxed.js new file mode 100644 index 0000000000..5600e023a9 --- /dev/null +++ b/test/staging/sm/class/subclassedArrayUnboxed.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo extends Array { } + +function testArrs(arrs) { + for (let arr of arrs) { + assert.sameValue(Object.getPrototypeOf(arr), foo.prototype); + } +} + +var arrs = []; +for (var i = 0; i < 25; i++) + arrs.push(new foo(1)); + +testArrs(arrs); + +arrs[0].nonIndexedProp = "uhoh"; + +arrs.push(new foo(1)); + +testArrs(arrs); + diff --git a/test/staging/sm/class/superCallBadDynamicSuperClass.js b/test/staging/sm/class/superCallBadDynamicSuperClass.js new file mode 100644 index 0000000000..16ae69f70d --- /dev/null +++ b/test/staging/sm/class/superCallBadDynamicSuperClass.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { constructor() { } } + +class inst extends base { constructor() { super(); } } +Object.setPrototypeOf(inst, Math.sin); +assertThrowsInstanceOf(() => new inst(), TypeError); + +class defaultInst extends base { } +Object.setPrototypeOf(inst, Math.sin); +assertThrowsInstanceOf(() => new inst(), TypeError); + diff --git a/test/staging/sm/class/superCallBadNewTargetPrototype.js b/test/staging/sm/class/superCallBadNewTargetPrototype.js new file mode 100644 index 0000000000..631f49b710 --- /dev/null +++ b/test/staging/sm/class/superCallBadNewTargetPrototype.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { constructor() { } } + +// lies and the lying liars who tell them +function lies() { } +lies.prototype = 4; + +assertThrowsInstanceOf(()=>Reflect.consruct(base, [], lies), TypeError); + +// lie a slightly different way +function get(target, property, receiver) { + if (property === "prototype") + return 42; + return Reflect.get(target, property, receiver); +} + +class inst extends base { + constructor() { super(); } +} +assertThrowsInstanceOf(()=>new new Proxy(inst, {get})(), TypeError); + +class defaultInst extends base {} +assertThrowsInstanceOf(()=>new new Proxy(defaultInst, {get})(), TypeError); + diff --git a/test/staging/sm/class/superCallBaseInvoked.js b/test/staging/sm/class/superCallBaseInvoked.js new file mode 100644 index 0000000000..69703584af --- /dev/null +++ b/test/staging/sm/class/superCallBaseInvoked.js @@ -0,0 +1,64 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function testBase(base) { + class instance extends base { + constructor(inst, one) { + super(inst, one); + } + } + + let inst = new instance(instance, 1); + assert.sameValue(Object.getPrototypeOf(inst), instance.prototype); + assert.sameValue(inst.calledBase, true); + + class defaultInstance extends base { } + let defInst = new defaultInstance(defaultInstance, 1); + assert.sameValue(Object.getPrototypeOf(defInst), defaultInstance.prototype); + assert.sameValue(defInst.calledBase, true); +} + +class base { + // Base class must be [[Construct]]ed, as you cannot [[Call]] a class + // constructor + constructor(nt, one) { + assert.sameValue(new.target, nt); + + // Check argument ordering + assert.sameValue(one, 1); + this.calledBase = true; + } +} + +testBase(base); +testBase(class extends base { + constructor(nt, one) { + // Every step of the way, new.target and args should be right + assert.sameValue(new.target, nt); + assert.sameValue(one, 1); + super(nt, one); + } + }); +function baseFunc(nt, one) { + assert.sameValue(new.target, nt); + assert.sameValue(one, 1); + this.calledBase = true; +} + +testBase(baseFunc); + +let handler = {}; +let p = new Proxy(baseFunc, handler); +testBase(p); + +handler.construct = (target, args, nt) => Reflect.construct(target, args, nt); +testBase(p); + diff --git a/test/staging/sm/class/superCallIllegal.js b/test/staging/sm/class/superCallIllegal.js new file mode 100644 index 0000000000..20b7c9a60a --- /dev/null +++ b/test/staging/sm/class/superCallIllegal.js @@ -0,0 +1,16 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// super() invalid outside derived class constructors, including in dynamic +// functions and eval +assertThrowsInstanceOf(() => new Function("super();"), SyntaxError); +assertThrowsInstanceOf(() => eval("super()"), SyntaxError); + diff --git a/test/staging/sm/class/superCallInvalidBase.js b/test/staging/sm/class/superCallInvalidBase.js new file mode 100644 index 0000000000..6a24db01d5 --- /dev/null +++ b/test/staging/sm/class/superCallInvalidBase.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class instance extends null { + constructor() { super(); } +} + +assertThrowsInstanceOf(() => new instance(), TypeError); +assertThrowsInstanceOf(() => new class extends null { }(), TypeError); + diff --git a/test/staging/sm/class/superCallOrder.js b/test/staging/sm/class/superCallOrder.js new file mode 100644 index 0000000000..c60fd03b1c --- /dev/null +++ b/test/staging/sm/class/superCallOrder.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function base() { } + +class beforeSwizzle extends base { + constructor() { + super(Object.setPrototypeOf(beforeSwizzle, null)); + } +} + +new beforeSwizzle(); + +function MyError() {} + +// Again, testing both dynamic prototype dispatch, and that we verify the function +// is a constructor after evaluating args +class beforeThrow extends base { + constructor() { + function thrower() { throw new MyError(); } + super(thrower()); + } +} + +Object.setPrototypeOf(beforeThrow, Math.sin); + +// Won't throw that Math.sin is not a constructor before evaluating the args +assertThrowsInstanceOf(() => new beforeThrow(), MyError); + diff --git a/test/staging/sm/class/superCallProperBase.js b/test/staging/sm/class/superCallProperBase.js new file mode 100644 index 0000000000..cdb6cee9db --- /dev/null +++ b/test/staging/sm/class/superCallProperBase.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base1 { + constructor() { + this.base = 1; + } +} + +class base2 { + constructor() { + this.base = 2; + } +} + +class inst extends base1 { + constructor() { + super(); + } +} + +assert.sameValue(new inst().base, 1); + +Object.setPrototypeOf(inst, base2); + +assert.sameValue(new inst().base, 2); + +// Still works with default constructor + +class defaultInst extends base1 { } + +assert.sameValue(new defaultInst().base, 1); +Object.setPrototypeOf(defaultInst, base2); +assert.sameValue(new defaultInst().base, 2); + diff --git a/test/staging/sm/class/superCallSpreadCall.js b/test/staging/sm/class/superCallSpreadCall.js new file mode 100644 index 0000000000..370e334ebb --- /dev/null +++ b/test/staging/sm/class/superCallSpreadCall.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + constructor(a, b, c) { + assert.sameValue(a, 1); + assert.sameValue(b, 2); + assert.sameValue(c, 3); + this.calledBase = true; + } +} + +class doTest extends base { + constructor(arr) { + super(...arr); + } +} + +assert.sameValue(new doTest([1,2,3]).calledBase, true); + +class testRest extends base { + constructor(...args) { + super(...args); + } +} + +assert.sameValue(new testRest(1,2,3).calledBase, true); + diff --git a/test/staging/sm/class/superCallThisInit.js b/test/staging/sm/class/superCallThisInit.js new file mode 100644 index 0000000000..eb304f830e --- /dev/null +++ b/test/staging/sm/class/superCallThisInit.js @@ -0,0 +1,57 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function base() { this.prop = 42; } + +class testInitialize extends base { + constructor() { + // A poor man's assertThrowsInstanceOf, as arrow functions are currently + // disabled in this context + try { + this; + throw new Error(); + } catch (e) { + if (!(e instanceof ReferenceError)) + throw e; + } + super(); + assert.sameValue(this.prop, 42); + } +} +assert.sameValue(new testInitialize().prop, 42); + +// super() twice is a no-go. +class willThrow extends base { + constructor() { + super(); + super(); + } +} +assertThrowsInstanceOf(()=>new willThrow(), ReferenceError); + +// This is determined at runtime, not the syntax level. +class willStillThrow extends base { + constructor() { + for (let i = 0; i < 3; i++) { + super(); + } + } +} +assertThrowsInstanceOf(()=>new willStillThrow(), ReferenceError); + +class canCatchThrow extends base { + constructor() { + super(); + try { super(); } catch(e) { } + } +} +assert.sameValue(new canCatchThrow().prop, 42); + diff --git a/test/staging/sm/class/superElemDelete.js b/test/staging/sm/class/superElemDelete.js new file mode 100644 index 0000000000..b89caaeb41 --- /dev/null +++ b/test/staging/sm/class/superElemDelete.js @@ -0,0 +1,65 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure we get the proper side effects. +// |delete super[expr]| applies ToPropertyKey on |expr| before throwing. + +class base { + constructor() { } +} + +class derived extends base { + constructor() { super(); } + testDeleteElem() { + let sideEffect = 0; + let key = { + toString() { + sideEffect++; + return ""; + } + }; + assertThrowsInstanceOf(() => delete super[key], ReferenceError); + assert.sameValue(sideEffect, 0); + } +} + +class derivedTestDeleteElem extends base { + constructor() { + let sideEffect = 0; + let key = { + toString() { + sideEffect++; + return ""; + } + }; + + assertThrowsInstanceOf(() => delete super[key], ReferenceError); + assert.sameValue(sideEffect, 0); + + super(); + + assertThrowsInstanceOf(() => delete super[key], ReferenceError); + assert.sameValue(sideEffect, 0); + + Object.setPrototypeOf(derivedTestDeleteElem.prototype, null); + + assertThrowsInstanceOf(() => delete super[key], ReferenceError); + assert.sameValue(sideEffect, 0); + + return {}; + } +} + +var d = new derived(); +d.testDeleteElem(); + +new derivedTestDeleteElem(); + diff --git a/test/staging/sm/class/superPropBasicCalls.js b/test/staging/sm/class/superPropBasicCalls.js new file mode 100644 index 0000000000..d3f908602d --- /dev/null +++ b/test/staging/sm/class/superPropBasicCalls.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Super property (and calls) works in non-extending classes and object +// litterals. +class toStringTest { + constructor() { + // Install a property to make it plausible that it's the same this + this.foo = "rhinoceros"; + } + + test() { + assert.sameValue(super.toString(), super["toString"]()); + assert.sameValue(super.toString(), this.toString()); + } +} + +new toStringTest().test(); + +let toStrOL = { + test() { + assert.sameValue(super.toString(), super["toString"]()); + assert.sameValue(super.toString(), this.toString()); + } +} + +toStrOL.test(); + diff --git a/test/staging/sm/class/superPropBasicChain.js b/test/staging/sm/class/superPropBasicChain.js new file mode 100644 index 0000000000..3e2be6218b --- /dev/null +++ b/test/staging/sm/class/superPropBasicChain.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var o = { + access() { + super.foo.bar; + } +}; + +// Delazify +assertThrowsInstanceOf(o.access, TypeError); + diff --git a/test/staging/sm/class/superPropBasicGetter.js b/test/staging/sm/class/superPropBasicGetter.js new file mode 100644 index 0000000000..957c3e3771 --- /dev/null +++ b/test/staging/sm/class/superPropBasicGetter.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + constructor() {} + + getValue() { + return this._prop; + } + + setValue(v) { + this._prop = v; + } +} + +class derived extends base { + constructor() { super(); } + + get a() { return super.getValue(); } + set a(v) { super.setValue(v); } + + get b() { return eval('super.getValue()'); } + set b(v) { eval('super.setValue(v);'); } + + test() { + this.a = 15; + assert.sameValue(this.a, 15); + + assert.sameValue(this.b, 15); + this.b = 30; + assert.sameValue(this.b, 30); + } +} + +var derivedInstance = new derived(); +derivedInstance.test(); + diff --git a/test/staging/sm/class/superPropBasicNew.js b/test/staging/sm/class/superPropBasicNew.js new file mode 100644 index 0000000000..e7edb72aa9 --- /dev/null +++ b/test/staging/sm/class/superPropBasicNew.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class Base { + constructor() {} +} +class Mid extends Base { + constructor() { super(); } + f() { return new super.constructor(); } +} +class Derived extends Mid { + constructor() { super(); } +} + +let d = new Derived(); +var df = d.f(); +assert.sameValue(df.constructor, Base); + diff --git a/test/staging/sm/class/superPropChains.js b/test/staging/sm/class/superPropChains.js new file mode 100644 index 0000000000..577ec21fa4 --- /dev/null +++ b/test/staging/sm/class/superPropChains.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// First, let's test the trivial. A chain of three works. +class base { + constructor() { } + testChain() { + this.baseCalled = true; + } +} + +class middle extends base { + constructor() { super(); } + testChain() { + this.middleCalled = true; + super.testChain(); + } +} + +class derived extends middle { + constructor() { super(); } + testChain() { + super.testChain(); + assert.sameValue(this.middleCalled, true); + assert.sameValue(this.baseCalled, true); + } +} + +new derived().testChain(); + +// Super even chains in a wellbehaved fashion with normal functions. +function bootlegMiddle() { } +bootlegMiddle.prototype = middle.prototype; + +new class extends bootlegMiddle { + constructor() { super(); } + testChain() { + super.testChain(); + assert.sameValue(this.middleCalled, true); + assert.sameValue(this.baseCalled, true); + } + }().testChain(); + +// Now let's try out some "long" chains +base.prototype.x = "yeehaw"; + +let chain = class extends base { constructor() { super(); } } + +const CHAIN_LENGTH = 100; +for (let i = 0; i < CHAIN_LENGTH; i++) + chain = class extends chain { constructor() { super(); } } + +// Now we poke the chain +let inst = new chain(); +inst.testChain(); +assert.sameValue(inst.baseCalled, true); + +assert.sameValue(inst.x, "yeehaw"); + diff --git a/test/staging/sm/class/superPropDVG.js b/test/staging/sm/class/superPropDVG.js new file mode 100644 index 0000000000..b1c57c420a --- /dev/null +++ b/test/staging/sm/class/superPropDVG.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Super property accesses should play nice with the pretty printer. +class testNonExistent { + constructor() { + super["prop"](); + } +} +// Should fold to super.prop +assertThrownErrorContains(() => new testNonExistent(), 'super.prop'); + +var ol = { testNonExistent() { super.prop(); } }; +assertThrownErrorContains(() => ol.testNonExistent(), "super.prop"); + +var olElem = { testNonExistent() { var prop = "prop"; super[prop](); } }; +assertThrownErrorContains(() => olElem.testNonExistent(), "super[prop]"); + diff --git a/test/staging/sm/class/superPropDelete.js b/test/staging/sm/class/superPropDelete.js new file mode 100644 index 0000000000..5882f6e8da --- /dev/null +++ b/test/staging/sm/class/superPropDelete.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Make sure we get the proper side effects. +// |delete super.prop| and |delete super[expr]| throw universally. + +class base { + constructor() { } +} + +class derived extends base { + constructor() { super(); } + testDeleteProp() { delete super.prop; } + testDeleteElem() { + let sideEffect = 0; + assertThrowsInstanceOf(() => delete super[sideEffect = 1], ReferenceError); + assert.sameValue(sideEffect, 1); + } +} + +var d = new derived(); +assertThrowsInstanceOf(() => d.testDeleteProp(), ReferenceError); +d.testDeleteElem(); + +// |delete super.x| does not delete anything before throwing. +var thing1 = { + go() { delete super.toString; } +}; +let saved = Object.prototype.toString; +assertThrowsInstanceOf(() => thing1.go(), ReferenceError); +assert.sameValue(Object.prototype.toString, saved); + +// |delete super.x| does not tell the prototype to delete anything, when it's a proxy. +var thing2 = { + go() { delete super.prop; } +}; +Object.setPrototypeOf(thing2, new Proxy({}, { + deleteProperty(x) { throw "FAIL"; } +})); +assertThrowsInstanceOf(() => thing2.go(), ReferenceError); + +class derivedTestDeleteProp extends base { + constructor() { + // The deletion error is a reference error, even after munging the prototype + // chain. + Object.setPrototypeOf(derivedTestDeleteProp.prototype, null); + + assertThrowsInstanceOf(() => delete super.prop, ReferenceError); + + super(); + + assertThrowsInstanceOf(() => delete super.prop, ReferenceError); + + return {}; + } +} + +new derivedTestDeleteProp(); + diff --git a/test/staging/sm/class/superPropDerivedCalls.js b/test/staging/sm/class/superPropDerivedCalls.js new file mode 100644 index 0000000000..66862a65f7 --- /dev/null +++ b/test/staging/sm/class/superPropDerivedCalls.js @@ -0,0 +1,86 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let derivedInstance; + +class base { + constructor() { } + method(a, b, c) { + assert.sameValue(this, derivedInstance); + this.methodCalled = true; + assert.sameValue(a, 1); + assert.sameValue(b, 2); + assert.sameValue(c, 3); + } + + get prop() { + assert.sameValue(this, derivedInstance); + this.getterCalled = true; + return this._prop; + } + + set prop(val) { + assert.sameValue(this, derivedInstance); + this.setterCalled = true; + this._prop = val; + } +} + +class derived extends base { + constructor() { super(); } + + // |super| actually checks the chain, not |this| + method() { throw "FAIL"; } + get prop() { throw "FAIL"; } + set prop(v) { throw "FAIL"; } + + test() { + this.reset(); + // While we're here. Let's check on super spread calls... + let spread = [1,2,3]; + super.method(...spread); + super.prop++; + this.asserts(); + } + + testInEval() { + this.reset(); + eval("super.method(1,2,3); super.prop++"); + this.asserts(); + } + + testInArrow() { + this.reset(); + (() => (super.method(1,2,3), super.prop++))(); + this.asserts(); + } + + reset() { + this._prop = 0; + this.methodCalled = false; + this.setterCalled = false; + this.getterCalled = false; + } + + asserts() { + assert.sameValue(this.methodCalled, true); + assert.sameValue(this.getterCalled, true); + assert.sameValue(this.setterCalled, true); + assert.sameValue(this._prop, 1); + } + +} + +derivedInstance = new derived(); +derivedInstance.test(); +derivedInstance.testInEval(); +derivedInstance.testInArrow(); + diff --git a/test/staging/sm/class/superPropDestructuring.js b/test/staging/sm/class/superPropDestructuring.js new file mode 100644 index 0000000000..27c7262715 --- /dev/null +++ b/test/staging/sm/class/superPropDestructuring.js @@ -0,0 +1,52 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + constructor() { } +} + +let seenValues; +Object.defineProperty(base.prototype, "minutes", + { + set(x) { + assert.sameValue(x, 525600); + seenValues.push(x); + } + }); +Object.defineProperty(base.prototype, "intendent", + { + set(x) { + assert.sameValue(x, "Fred"); + seenValues.push(x) + } + }); + +const testArr = [525600, "Fred"]; +class derived extends base { + constructor() { super(); } + prepForTest() { seenValues = []; } + testAsserts() { assert.deepEqual(seenValues, testArr); } + testProps() { + this.prepForTest(); + [super.minutes, super.intendent] = testArr; + this.testAsserts(); + } + testElems() { + this.prepForTest(); + [super["minutes"], super["intendent"]] = testArr; + this.testAsserts(); + } +} + +let d = new derived(); +d.testProps(); +d.testElems(); + diff --git a/test/staging/sm/class/superPropEvalInsideArrow.js b/test/staging/sm/class/superPropEvalInsideArrow.js new file mode 100644 index 0000000000..659eba197f --- /dev/null +++ b/test/staging/sm/class/superPropEvalInsideArrow.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo { + constructor() { } + + method() { + return (() => eval('super.toString')); + } +} +assert.sameValue(new foo().method()(), Object.prototype.toString); + diff --git a/test/staging/sm/class/superPropEvalInsideNested.js b/test/staging/sm/class/superPropEvalInsideNested.js new file mode 100644 index 0000000000..cb8ea16669 --- /dev/null +++ b/test/staging/sm/class/superPropEvalInsideNested.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// It's invalid to eval super.prop inside a nested non-method, even if it +// appears inside a method definition +assertThrowsInstanceOf(() => +({ + method() { + (function () { + eval('super.toString'); + })(); + } +}).method(), SyntaxError); + diff --git a/test/staging/sm/class/superPropFor.js b/test/staging/sm/class/superPropFor.js new file mode 100644 index 0000000000..40ab4bf413 --- /dev/null +++ b/test/staging/sm/class/superPropFor.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class testForIn { + constructor() { + let hits = 0; + for (super.prop in { prop1: 1, prop2: 2 }) + hits++; + assert.sameValue(this.prop, "prop2"); + assert.sameValue(hits, 2); + } +} + +new testForIn(); + + +({ + testForOf() { + let hits = 0; + for (super["prop"] of [1, 2]) + hits++; + assert.sameValue(this.prop, 2); + assert.sameValue(hits, 2); + } +}).testForOf(); + diff --git a/test/staging/sm/class/superPropHeavyweightArrow.js b/test/staging/sm/class/superPropHeavyweightArrow.js new file mode 100644 index 0000000000..7f59efa9f9 --- /dev/null +++ b/test/staging/sm/class/superPropHeavyweightArrow.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class foo { + constructor() { } + + method() { + return (() => (eval(''), super.toString)); + } +} + +assert.sameValue(new foo().method()(), Object.prototype.toString); + diff --git a/test/staging/sm/class/superPropHomeObject.js b/test/staging/sm/class/superPropHomeObject.js new file mode 100644 index 0000000000..0141d6386e --- /dev/null +++ b/test/staging/sm/class/superPropHomeObject.js @@ -0,0 +1,70 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This is super weird. A super property reference in the spec contains two +// things. The first is the object to do the lookup on, the super base. This +// should be unchanged, no matter what's going on: I can move the method to +// another object. I can pull it out as its own function. I can put it on my +// head and run around the front yard. No changes. The other half, the |this| +// for invoked calls, is the this at the time of referencing the property, which +// means it's gonna vary wildly as stuff gets moved around. + +class base { + constructor() { } + test(expectedThis) { assert.sameValue(this, expectedThis); } +} + +class derived extends base { + constructor() { super(); } + test(expected) { super.test(expected); } + testArrow() { return (() => super.test(this)); } + ["testCPN"](expected) { super.test(expected); } +} + +let derivedInstance = new derived(); +derivedInstance.test(derivedInstance); +derivedInstance.testCPN(derivedInstance); + +let obj = { test: derivedInstance.test }; +obj.test(obj); + +// Classes are strict, so primitives are not boxed/turned into globals +let testSolo = derivedInstance.test; +testSolo(undefined); + +let anotherObject = { }; +derivedInstance.test.call(anotherObject, anotherObject); + +let strThis = "this is not an object!"; +derivedInstance.test.call(strThis, strThis); + +// You can take the arrow function out of the super, ... or something like that +let arrowTest = derivedInstance.testArrow(); +arrowTest(); + +// There's no magic "super script index" per code location. +class base1 { + constructor() { } + test() { return "llama"; } +} +class base2 { + constructor() { } + test() { return "alpaca"; } +} + +let animals = []; +for (let exprBase of [base1, base2]) + new class extends exprBase { + constructor() { super(); } + test() { animals.push(super["test"]()); } + }().test(); +assert.deepEqual(animals, ["llama", "alpaca"]); + diff --git a/test/staging/sm/class/superPropIncDecElem.js b/test/staging/sm/class/superPropIncDecElem.js new file mode 100644 index 0000000000..b24cb58d67 --- /dev/null +++ b/test/staging/sm/class/superPropIncDecElem.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// #1 +function base() { } + +base.prototype = { + test() { + --super[1]; + } +} + +var d = new base(); +d.test(); + +// #2 +class test2 { + test() { + super[1]++; + } +} + +var d = new test2(); +d.test() + diff --git a/test/staging/sm/class/superPropLazyInnerFunction.js b/test/staging/sm/class/superPropLazyInnerFunction.js new file mode 100644 index 0000000000..f04f40a612 --- /dev/null +++ b/test/staging/sm/class/superPropLazyInnerFunction.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +testcase(); +function testcase() { + var tokenCodes = { + get try() { + try { + super.actual(); + } catch (e) {} + } + }; + var arr = [ + 'try', + ]; + for (var i = 0; i < arr.length; i++) { + if (tokenCodes[arr[i]] !== i) {}; + } +} + diff --git a/test/staging/sm/class/superPropNoOverwriting.js b/test/staging/sm/class/superPropNoOverwriting.js new file mode 100644 index 0000000000..6b70e8f07a --- /dev/null +++ b/test/staging/sm/class/superPropNoOverwriting.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class X { + constructor() { + Object.defineProperty(this, "prop1", { + configurable: true, + writable: false, + value: 1 + }); + + Object.defineProperty(this, "prop2", { + configurable: true, + get: function() { return 15; } + }); + + Object.defineProperty(this, "prop3", { + configurable: true, + set: function(a) { } + }); + + Object.defineProperty(this, "prop4", { + configurable: true, + get: function() { return 20; }, + set: function(a) { } + }); + } + + f1() { + super.prop1 = 2; + } + + f2() { + super.prop2 = 3; + } + + f3() { + super.prop3 = 4; + } + + f4() { + super.prop4 = 5; + } +} + +var x = new X(); + +assertThrowsInstanceOf(() => x.f1(), TypeError); +assert.sameValue(x.prop1, 1); + +assertThrowsInstanceOf(() => x.f2(), TypeError); +assert.sameValue(x.prop2, 15); + +assertThrowsInstanceOf(() => x.f3(), TypeError); +assert.sameValue(x.prop3, undefined); + +assertThrowsInstanceOf(() => x.f4(), TypeError); +assert.sameValue(x.prop4, 20); + diff --git a/test/staging/sm/class/superPropOrdering.js b/test/staging/sm/class/superPropOrdering.js new file mode 100644 index 0000000000..d1f27f14fa --- /dev/null +++ b/test/staging/sm/class/superPropOrdering.js @@ -0,0 +1,102 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + constructor() { } + method() { this.methodCalled++; } +} + +class derived extends base { + constructor() { super(); this.methodCalled = 0; } + + // Test orderings of various evaluations relative to the superbase + + // Unlike in regular element evaluation, the propVal is evaluated before + // checking the starting object ([[HomeObject]].[[Prototype]]) + testElem() { super[ruin()]; } + + // The starting object for looking up super.method is determined before + // ruin() is called. + testProp() { super.method(ruin()); } + + // The entire super.method property lookup has concluded before the args + // are evaluated + testPropCallDeleted() { super.method(()=>delete base.prototype.method); } + + // The starting object for looking up super["prop"] is determined before + // ruin() is called. + testElemAssign() { super["prop"] = ruin(); } + + // Test the normal assignment gotchas + testAssignElemPropValChange() { + let x = "prop1"; + super[x] = (()=>(x = "prop2", 0))(); + assert.sameValue(this.prop1, 0); + assert.sameValue(this.prop2, undefined); + } + + testAssignProp() { + Object.defineProperty(base.prototype, "piggy", + { + configurable: true, + set() { throw "WEE WEE WEE WEE"; } + }); + + // The property lookup is noted, but not actually evaluated, until the + // right hand side is. Please don't make the piggy cry. + super.piggy = (() => delete base.prototype.piggy)(); + } + testCompoundAssignProp() { + let getterCalled = false; + Object.defineProperty(base.prototype, "horse", + { + configurable: true, + get() { getterCalled = true; return "Of course"; }, + set() { throw "NO!"; } + }); + super.horse += (()=>(delete base.prototype.horse, ", of course!"))(); + assert.sameValue(getterCalled, true); + + // So, is a horse a horse? + assert.sameValue(this.horse, "Of course, of course!"); + } +} + +function ruin() { + Object.setPrototypeOf(derived.prototype, null); + return 5; +} + +function reset() { + Object.setPrototypeOf(derived.prototype, base.prototype); +} + +let instance = new derived(); +assertThrowsInstanceOf(() => instance.testElem(), TypeError); +reset(); + +instance.testProp(); +assert.sameValue(instance.methodCalled, 1); +reset(); + +instance.testPropCallDeleted(); +assert.sameValue(instance.methodCalled, 2); + +instance.testElemAssign(); +assert.sameValue(instance.prop, 5); +reset(); + +instance.testAssignElemPropValChange(); + +instance.testAssignProp(); + +instance.testCompoundAssignProp(); + diff --git a/test/staging/sm/class/superPropProtoChanges.js b/test/staging/sm/class/superPropProtoChanges.js new file mode 100644 index 0000000000..6e27608589 --- /dev/null +++ b/test/staging/sm/class/superPropProtoChanges.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + constructor() { } + test() { + return false; + } +} + +let standin = { test() { return true; } }; + +class derived extends base { + constructor() { super(); } + test() { + assert.sameValue(super.test(), false); + Object.setPrototypeOf(derived.prototype, standin); + assert.sameValue(super["test"](), true); + } +} + +new derived().test(); + diff --git a/test/staging/sm/class/superPropProxies.js b/test/staging/sm/class/superPropProxies.js new file mode 100644 index 0000000000..048a84647d --- /dev/null +++ b/test/staging/sm/class/superPropProxies.js @@ -0,0 +1,92 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + constructor() { } +} + +let midStaticHandler = { }; + +// We shouldn't use the |this.called| strategy here, since we have proxies +// snooping property accesses. +let getterCalled, setterCalled; + +class mid extends new Proxy(base, midStaticHandler) { + constructor() { super(); } + testSuperInProxy() { + super.prop = "looking"; + assert.sameValue(setterCalled, true); + assert.sameValue(super.prop, "found"); + assert.sameValue(getterCalled, true); + } +} + +class child extends mid { + constructor() { super(); } + static testStaticLookups() { + // This funtion is called more than once. + this.called = false; + super.prop; + assert.sameValue(this.called, true); + } +} + +let midInstance = new mid(); + +// Make sure proxies are searched properly on the prototype chain +let baseHandler = { + get(target, p, receiver) { + assert.sameValue(receiver, midInstance); + getterCalled = true; + return "found"; + }, + + set(t,p,val,receiver) { + assert.sameValue(receiver, midInstance); + assert.sameValue(val, "looking"); + setterCalled = true; + return true; + } +} +Object.setPrototypeOf(base.prototype, new Proxy(Object.prototype, baseHandler)); + +// make sure subclasses are not searched on static or super lookups. +let childHandler = { + get() { throw "NO!"; }, + set() { throw "NO!"; } +} +Object.setPrototypeOf(child.prototype, new Proxy(mid.prototype, childHandler)); + +midInstance.testSuperInProxy(); + +// Don't do this earlier to avoid the lookup of .prototype during class creation +function midGet(target, p, receiver) { + assert.sameValue(receiver, child); + receiver.called = true; +} +midStaticHandler.get = midGet; + +child.testStaticLookups(); + +// Hey does super work in a proxy? +assert.sameValue(new Proxy(({ method() { return super.hasOwnProperty("method"); } }), {}).method(), true); + +// What about a CCW? +var g = createNewGlobal(); +var wrappedSuper = g.eval("({ method() { return super.hasOwnProperty('method'); } })"); +assert.sameValue(wrappedSuper.method(), true); + +// With a CCW on the proto chain? +var wrappedBase = g.eval("({ method() { return this.__secretProp__; } })"); +var unwrappedDerived = { __secretProp__: 42, method() { return super.method(); } } +Object.setPrototypeOf(unwrappedDerived, wrappedBase); +assert.sameValue(unwrappedDerived.method(), 42); + diff --git a/test/staging/sm/class/superPropSkips.js b/test/staging/sm/class/superPropSkips.js new file mode 100644 index 0000000000..77b4913a46 --- /dev/null +++ b/test/staging/sm/class/superPropSkips.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure that super lookups and sets skip over properties on the |this| object. +// That is, super lookups start with the superclass, not the current class. + +// The whole point: an empty superclass +class base { + constructor() { } +} + +class derived extends base { + constructor() { super(); this.prop = "flamingo"; } + + toString() { throw "No!"; } + + testSkipGet() { + assert.sameValue(super.prop, undefined); + } + + testSkipDerivedOverrides() { + assert.sameValue(super["toString"](), Object.prototype.toString.call(this)); + } + + testSkipSet() { + // since there's no prop on the chain, we should set the data property + // on the receiver, |this| + super.prop = "rat"; + assert.sameValue(this.prop, "rat"); + + // Since the receiver is the instance, we can overwrite inherited + // properties of the instance, even non-writable ones, as they could be + // skipped in the super lookup. + assert.sameValue(this.nonWritableProp, "pony"); + super.nonWritableProp = "bear"; + assert.sameValue(this.nonWritableProp, "bear"); + } +} + +Object.defineProperty(derived.prototype, "nonWritableProp", { writable: false, value: "pony" }); + +let instance = new derived(); +instance.testSkipGet(); +instance.testSkipDerivedOverrides(); +instance.testSkipSet(); + diff --git a/test/staging/sm/class/superPropStatics.js b/test/staging/sm/class/superPropStatics.js new file mode 100644 index 0000000000..33a9433f69 --- /dev/null +++ b/test/staging/sm/class/superPropStatics.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class base { + constructor() { } + static found() { + this.foundCalled = true; + } + static get accessor() { + assert.sameValue(this, derived); + return 45; + } + notFound() { } +} + +class derived extends base { + constructor() { } + + static found() { throw "NO!"; } + static get accessor() { throw "NO!"; } + + static test() { + assert.sameValue(super["notFound"], undefined); + super.found(); + + // foundCalled is set on |derived| specifically. + let calledDesc = Object.getOwnPropertyDescriptor(derived, "foundCalled"); + assert.sameValue(calledDesc.value, true); + + assert.sameValue(super.accessor, 45); + } +} + +derived.test(); + diff --git a/test/staging/sm/class/superPropStrictAssign.js b/test/staging/sm/class/superPropStrictAssign.js new file mode 100644 index 0000000000..eefa1c033c --- /dev/null +++ b/test/staging/sm/class/superPropStrictAssign.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// While |super| is common in classes, it also works in object litterals, +// where there is no guarantee of strict mode. Check that we do not somehow +// get strict mode semantics when they were not called for + +// |undefined|, writable: false +Object.defineProperty(Object.prototype, "prop", { writable: false }); + +class strictAssignmentTest { + constructor() { + // Strict mode. Throws. + super.prop = 14; + } +} + +assertThrowsInstanceOf(()=>new strictAssignmentTest(), TypeError); + +// Non-strict. Silent failure. +({ test() { super.prop = 14; } }).test(); + +assert.sameValue(Object.prototype.prop, undefined); + diff --git a/test/staging/sm/class/superThisStrictNoBoxing.js b/test/staging/sm/class/superThisStrictNoBoxing.js new file mode 100644 index 0000000000..95b5548f5c --- /dev/null +++ b/test/staging/sm/class/superThisStrictNoBoxing.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +class C { + get prop_this() { return this; } +} + +var g_prop_this = 'prop_this'; +class D extends C { + super_prop() { return super.prop_this; } + super_elem() { return super[g_prop_this]; } +} + +var barsym = Symbol("bar"); + +// Test that primitive |this| values are not boxed, and undefined/null are not +// globals for super.property. +assert.sameValue(new D().super_prop.call(3), 3); +assert.sameValue(new D().super_prop.call("foo"), "foo"); +assert.sameValue(new D().super_prop.call(true), true); +assert.sameValue(new D().super_prop.call(barsym), barsym); +assert.sameValue(new D().super_prop.call(null), null); +assert.sameValue(new D().super_prop.call(undefined), undefined); + +// Ditto for super[elem] +assert.sameValue(new D().super_elem.call(3), 3); +assert.sameValue(new D().super_elem.call("foo"), "foo"); +assert.sameValue(new D().super_elem.call(true), true); +assert.sameValue(new D().super_elem.call(barsym), barsym); +assert.sameValue(new D().super_elem.call(null), null); +assert.sameValue(new D().super_elem.call(undefined), undefined); + diff --git a/test/staging/sm/class/uninitializedThisError.js b/test/staging/sm/class/uninitializedThisError.js new file mode 100644 index 0000000000..5e21069cfc --- /dev/null +++ b/test/staging/sm/class/uninitializedThisError.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function checkErr(f) { + assertThrowsInstanceOfWithMessage(f, ReferenceError, + "must call super constructor before using 'this' in derived class constructor"); +} +class TestNormal extends class {} { + constructor() { this; } +} +checkErr(() => new TestNormal()); + +class TestEval extends class {} { + constructor() { eval("this") } +} +checkErr(() => new TestEval()); + +class TestNestedEval extends class {} { + constructor() { eval("eval('this')") } +} +checkErr(() => new TestNestedEval()); + +checkErr(() => { + new class extends class {} { + constructor() { eval("this") } + } +}); + +class TestArrow extends class {} { + constructor() { (() => this)(); } +} +checkErr(() => new TestArrow()); + +class TestArrowEval extends class {} { + constructor() { (() => eval("this"))(); } +} +checkErr(() => new TestArrowEval()); + +class TestEvalArrow extends class {} { + constructor() { eval("(() => this)()"); } +} +checkErr(() => new TestEvalArrow()); + +class TestTypeOf extends class {} { + constructor() { eval("typeof this"); } +} +checkErr(() => new TestTypeOf()); + diff --git a/test/staging/sm/destructuring/array-default-class.js b/test/staging/sm/destructuring/array-default-class.js new file mode 100644 index 0000000000..e3beb95585 --- /dev/null +++ b/test/staging/sm/destructuring/array-default-class.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1322314; +var summary = "Function in computed property in class expression in array destructuring default"; + +print(BUGNUMBER + ": " + summary); + +function* g([ + a = class E { + [ (function() { return "foo"; })() ]() { + return 10; + } + } +]) { + yield a; +} + +let C = [...g([])][0]; +let x = new C(); +assert.sameValue(x.foo(), 10); + +C = [...g([undefined])][0]; +x = new C(); +assert.sameValue(x.foo(), 10); + diff --git a/test/staging/sm/destructuring/array-iterator-close.js b/test/staging/sm/destructuring/array-iterator-close.js new file mode 100644 index 0000000000..c7c19bfc2b --- /dev/null +++ b/test/staging/sm/destructuring/array-iterator-close.js @@ -0,0 +1,102 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests that IteratorClose is called in array destructuring patterns. + +function test() { + var returnCalled = 0; + var returnCalledExpected = 0; + var iterable = {}; + + // empty [] calls IteratorClose regardless of "done" on the result. + iterable[Symbol.iterator] = makeIterator({ + next: function() { + return { done: true }; + }, + ret: function() { + returnCalled++; + return {}; + } + }); + var [] = iterable; + assert.sameValue(returnCalled, ++returnCalledExpected); + + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return {}; + } + }); + var [] = iterable; + assert.sameValue(returnCalled, ++returnCalledExpected); + + // Non-empty destructuring calls IteratorClose if iterator is not done by + // the end of destructuring. + var [a,b] = iterable; + assert.sameValue(returnCalled, ++returnCalledExpected); + var [c,] = iterable; + assert.sameValue(returnCalled, ++returnCalledExpected); + + // throw in lhs ref calls IteratorClose + function throwlhs() { + throw "in lhs"; + } + assertThrowsValue(function() { + 0, [...{}[throwlhs()]] = iterable; + }, "in lhs"); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // throw in lhs ref calls IteratorClose with falsy "done". + iterable[Symbol.iterator] = makeIterator({ + next: function() { + // "done" is undefined. + return {}; + }, + ret: function() { + returnCalled++; + return {}; + } + }); + assertThrowsValue(function() { + 0, [...{}[throwlhs()]] = iterable; + }, "in lhs"); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // throw in iter.next doesn't call IteratorClose + iterable[Symbol.iterator] = makeIterator({ + next: function() { + throw "in next"; + }, + ret: function() { + returnCalled++; + return {}; + } + }); + assertThrowsValue(function() { + var [d] = iterable; + }, "in next"); + assert.sameValue(returnCalled, returnCalledExpected); + + // "return" must return an Object. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return 42; + } + }); + assertThrowsInstanceOf(function() { + var [] = iterable; + }, TypeError); + assert.sameValue(returnCalled, ++returnCalledExpected); +} + +test(); + diff --git a/test/staging/sm/destructuring/bug1396261.js b/test/staging/sm/destructuring/bug1396261.js new file mode 100644 index 0000000000..d7b3d0367a --- /dev/null +++ b/test/staging/sm/destructuring/bug1396261.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure array or object literals with trailing property accessors are not +// treated as nested destructuring patterns in assignment destructuring +// contexts. + +// Array destructuring with normal element. +[{a: 0}.x] = []; +[[0].x] = []; + +// Array destructuring with spread element. +[...{a: 0}.x] = []; +[...[0].x] = []; + +// Object destructuring with normal property. +({a: {b: 0}.x} = {}); +({a: [0].x} = {}); + +// Object destructuring with spread property. +({...{b: 0}.x} = {}); +({...[0].x} = {}); + +// Object literal with initializer shorthand in destructuring context. +assertThrowsInstanceOf(() => Function(`[{a = 0}.x] = [];`), SyntaxError); +assertThrowsInstanceOf(() => Function(`[...{a = 0}.x] = [];`), SyntaxError); +assertThrowsInstanceOf(() => Function(`({a: {b = 0}.x} = {});`), SyntaxError); +assertThrowsInstanceOf(() => Function(`({...{b = 0}.x} = {});`), SyntaxError); + +// Object destructuring with "eval" or "arguments" shorthand in strict mode. +(function() { + "use strict"; + + // Ensure "eval" resp. "arguments" is not treated as an assignment. + [{eval}.x] = []; + [...{eval}.x] = []; + ({a: {eval}.x} = {}); + ({...{eval}.x} = {}); + + [{arguments}.x] = []; + [...{arguments}.x] = []; + ({a: {arguments}.x} = {}); + ({...{arguments}.x} = {}); +})(); + diff --git a/test/staging/sm/destructuring/constant-folding.js b/test/staging/sm/destructuring/constant-folding.js new file mode 100644 index 0000000000..d81456a1a3 --- /dev/null +++ b/test/staging/sm/destructuring/constant-folding.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertSyntaxError(code) { + assertThrowsInstanceOf(function () { Function(code); }, SyntaxError, "Function:" + code); + assertThrowsInstanceOf(function () { eval(code); }, SyntaxError, "eval:" + code); + var ieval = eval; + assertThrowsInstanceOf(function () { ieval(code); }, SyntaxError, "indirect eval:" + code); +} + +// |true && a| is constant-folded to |a|, ensure the destructuring assignment +// validation takes place before constant-folding. +for (let prefix of ["null,", "var", "let", "const"]) { + assertSyntaxError(`${prefix} [true && a] = [];`); + assertSyntaxError(`${prefix} {p: true && a} = {};`); +} + diff --git a/test/staging/sm/destructuring/iterator-primitive.js b/test/staging/sm/destructuring/iterator-primitive.js new file mode 100644 index 0000000000..0bf1f43d45 --- /dev/null +++ b/test/staging/sm/destructuring/iterator-primitive.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1021835; +var summary = "Returning non-object from @@iterator should throw"; + +print(BUGNUMBER + ": " + summary); + +let primitives = [ + 1, + true, + undefined, + null, + "foo", + Symbol.iterator +]; + +function f([]) { +} + +for (let primitive of primitives) { + let obj = { + [Symbol.iterator]() { + return primitive; + } + }; + assertThrowsInstanceOf(() => { + let [] = obj; + }, TypeError); + assertThrowsInstanceOf(() => { + [] = obj; + }, TypeError); + assertThrowsInstanceOf(() => { + f(obj); + }, TypeError); +} + diff --git a/test/staging/sm/destructuring/order-super.js b/test/staging/sm/destructuring/order-super.js new file mode 100644 index 0000000000..947896d2ac --- /dev/null +++ b/test/staging/sm/destructuring/order-super.js @@ -0,0 +1,710 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1204028; +var summary = "Destructuring should evaluate lhs reference before rhs in super property"; + +if (typeof assert.sameValue === "undefined") { + assert.sameValue = function(a, b) { + if (a !== b) + throw new Error(`expected ${b}, got ${a}\n${new Error().stack}`); + }; +} + +print(BUGNUMBER + ": " + summary); + +let logs = []; +function log(x) { + logs.push(x); +} + +let unwrapMap = new Map(); +function unwrap(maybeWrapped) { + if (unwrapMap.has(maybeWrapped)) + return unwrapMap.get(maybeWrapped); + return maybeWrapped; +} +function ToString(name) { + if (name == Symbol.iterator) + return "@@iterator"; + return String(name); +} +function logger(obj, prefix=[]) { + let wrapped = new Proxy(obj, { + get(that, name) { + if (name == "return") { + // FIXME: Bug 1147371. + // We ignore IteratorClose for now. + return obj[name]; + } + + let names = prefix.concat(ToString(name)); + log("rhs get " + names.join("::")); + let v = obj[name]; + if (typeof v === "object" || typeof v === "function") + return logger(v, names); + return v; + }, + apply(that, thisArg, args) { + let names = prefix.slice(); + log("rhs call " + names.join("::")); + let v = obj.apply(unwrap(thisArg), args); + if (typeof v === "object" || typeof v === "function") { + names[names.length - 1] += "()"; + return logger(v, names); + } + return v; + } + }); + unwrapMap.set(wrapped, obj); + return wrapped; +} + +class C1 { + constructor() { + this.clear(); + } + clear() { + this.values = {}; + } +} +for (let name of [ + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", + "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", + "0", "1", "length" +]) { + Object.defineProperty(C1.prototype, name, { + set: function(value) { + log("lhs set " + name); + this.values[name] = value; + } + }); +} +class C2 extends C1 { + constructor() { + super(); + + let clear = () => { + logs = []; + this.clear(); + }; + + // Array. + + clear(); + [ + super.a + ] = logger(["A"]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + ].join(",")); + assert.sameValue(this.values.a, "A"); + + clear(); + [ + super[ (log("lhs before name a"), "a") ] + ] = logger(["A"]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before name a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + ].join(",")); + assert.sameValue(this.values.a, "A"); + + // Array rest. + + clear(); + [ + ...super.a + ] = logger(["A", "B", "C"]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "lhs set a", + ].join(",")); + assert.sameValue(this.values.a.join(","), "A,B,C"); + + clear(); + [ + ...super[ (log("lhs before name a"), "a") ] + ] = logger(["A", "B", "C"]);; + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before name a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "lhs set a", + ].join(",")); + assert.sameValue(this.values.a.join(","), "A,B,C"); + + // Array combined. + + clear(); + [ + super.a, + super[ (log("lhs before name b"), "b") ], + ...super[ (log("lhs before name c"), "c") ] + ] = logger(["A", "B", "C"]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + + "lhs before name b", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set b", + + "lhs before name c", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "lhs set c", + ].join(",")); + assert.sameValue(this.values.a, "A"); + assert.sameValue(this.values.b, "B"); + assert.sameValue(this.values.c.join(","), "C"); + + // Object. + + clear(); + ({ + a: super.a + } = logger({a: "A"})); + assert.sameValue(logs.join(","), + [ + "rhs get a", + "lhs set a", + ].join(",")); + assert.sameValue(this.values.a, "A"); + + clear(); + ({ + a: super[ (log("lhs before name a"), "a") ] + } = logger({a: "A"})); + assert.sameValue(logs.join(","), + [ + "lhs before name a", + "rhs get a", + "lhs set a", + ].join(",")); + assert.sameValue(this.values.a, "A"); + + // Object combined. + + clear(); + ({ + a: super.a, + b: super[ (log("lhs before name b"), "b") ] + } = logger({a: "A", b: "B"})); + assert.sameValue(logs.join(","), + [ + "rhs get a", + "lhs set a", + + "lhs before name b", + "rhs get b", + "lhs set b", + ].join(",")); + assert.sameValue(this.values.a, "A"); + assert.sameValue(this.values.b, "B"); + + // == Nested == + + // Array -> Array + + clear(); + [ + [ + super[ (log("lhs before name a"), "a") ], + ...super[ (log("lhs before name b"), "b") ] + ] + ] = logger([["A", "B"]]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before name a", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set a", + + "lhs before name b", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "lhs set b", + ].join(",")); + assert.sameValue(this.values.a, "A"); + assert.sameValue(this.values.b.length, 1); + assert.sameValue(this.values.b[0], "B"); + + // Array rest -> Array + + clear(); + [ + ...[ + super[ (log("lhs before name a"), "a") ], + ...super[ (log("lhs before name b"), "b") ] + ] + ] = logger(["A", "B"]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + + "lhs before name a", + "lhs set a", + + "lhs before name b", + "lhs set b", + ].join(",")); + assert.sameValue(this.values.a, "A"); + assert.sameValue(this.values.b.join(","), "B"); + + // Array -> Object + clear(); + [ + { + a: super[ (log("lhs before name a"), "a") ] + } + ] = logger([{a: "A"}]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + + "lhs before name a", + "rhs get @@iterator()::next()::value::a", + "lhs set a", + ].join(",")); + assert.sameValue(this.values.a, "A"); + + // Array rest -> Object + clear(); + [ + ...{ + 0: super[ (log("lhs before name 0"), "0") ], + 1: super[ (log("lhs before name 1"), "1") ], + length: super[ (log("lhs before name length"), "length") ], + } + ] = logger(["A", "B"]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + + "lhs before name 0", + "lhs set 0", + + "lhs before name 1", + "lhs set 1", + + "lhs before name length", + "lhs set length", + ].join(",")); + assert.sameValue(this.values["0"], "A"); + assert.sameValue(this.values["1"], "B"); + assert.sameValue(this.values.length, 2); + + // Object -> Array + clear(); + ({ + a: [ + super[ (log("lhs before name b"), "b") ] + ] + } = logger({a: ["B"]})); + assert.sameValue(logs.join(","), + [ + "rhs get a", + "rhs get a::@@iterator", + "rhs call a::@@iterator", + "rhs get a::@@iterator()::next", + + "lhs before name b", + "rhs call a::@@iterator()::next", + "rhs get a::@@iterator()::next()::done", + "rhs get a::@@iterator()::next()::value", + "lhs set b", + ].join(",")); + assert.sameValue(this.values.b, "B"); + + // Object -> Object + clear(); + ({ + a: { + b: super[ (log("lhs before name b"), "b") ] + } + } = logger({a: {b: "B"}})); + assert.sameValue(logs.join(","), + [ + "rhs get a", + "lhs before name b", + "rhs get a::b", + "lhs set b", + ].join(",")); + assert.sameValue(this.values.b, "B"); + + // All combined + + clear(); + [ + super[ (log("lhs before name a"), "a") ], + [ + super[ (log("lhs before name b"), "b") ], + { + c: super[ (log("lhs before name c"), "c") ], + d: { + e: super[ (log("lhs before name e"), "e") ], + f: [ + super[ (log("lhs before name g"), "g") ] + ] + } + } + ], + { + h: super[ (log("lhs before name h"), "h") ], + i: [ + super[ (log("lhs before name j"), "j") ], + { + k: [ + super[ (log("lhs before name l"), "l") ] + ] + } + ] + }, + ...[ + super[ (log("lhs before name m"), "m") ], + [ + super[ (log("lhs before name n"), "n") ], + { + o: super[ (log("lhs before name o"), "o") ], + p: { + q: super[ (log("lhs before name q"), "q") ], + r: [ + super[ (log("lhs before name s"), "s") ] + ] + } + } + ], + ...{ + 0: super[ (log("lhs before name t"), "t") ], + 1: [ + super[ (log("lhs before name u"), "u") ], + { + v: super[ (log("lhs before name v"), "v") ], + w: { + x: super[ (log("lhs before name x"), "x") ], + y: [ + super[ (log("lhs before name z"), "z") ] + ] + } + } + ], + length: super[ (log("lhs before name length"), "length") ], + } + ] + ] = logger(["A", + ["B", {c: "C", d: {e: "E", f: ["G"]}}], + {h: "H", i: ["J", {k: ["L"]}]}, + "M", + ["N", {o: "O", p: {q: "Q", r: ["S"]}}], + "T", ["U", {v: "V", w: {x: "X", y: ["Z"]}}]]); + assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before name a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before name b", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set b", + + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + + "lhs before name c", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::c", + "lhs set c", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d", + + "lhs before name e", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::e", + "lhs set e", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next", + + "lhs before name g", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next()::value", + "lhs set g", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + + "lhs before name h", + "rhs get @@iterator()::next()::value::h", + "lhs set h", + + "rhs get @@iterator()::next()::value::i", + "rhs get @@iterator()::next()::value::i::@@iterator", + "rhs call @@iterator()::next()::value::i::@@iterator", + "rhs get @@iterator()::next()::value::i::@@iterator()::next", + + "lhs before name j", + "rhs call @@iterator()::next()::value::i::@@iterator()::next", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value", + "lhs set j", + + "rhs call @@iterator()::next()::value::i::@@iterator()::next", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value", + + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator", + "rhs call @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next", + + "lhs before name l", + "rhs call @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next()::value", + "lhs set l", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + + "lhs before name m", + "lhs set m", + + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before name n", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set n", + + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + + "lhs before name o", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::o", + "lhs set o", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p", + + "lhs before name q", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::q", + "lhs set q", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next", + + "lhs before name s", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next()::value", + "lhs set s", + + "lhs before name t", + "lhs set t", + + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before name u", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set u", + + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + + "lhs before name v", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::v", + "lhs set v", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w", + + "lhs before name x", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::x", + "lhs set x", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next", + + "lhs before name z", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next()::value", + "lhs set z", + + "lhs before name length", + "lhs set length", + ].join(",")); + assert.sameValue(this.values.a, "A"); + assert.sameValue(this.values.b, "B"); + assert.sameValue(this.values.c, "C"); + assert.sameValue(this.values.e, "E"); + assert.sameValue(this.values.g, "G"); + assert.sameValue(this.values.h, "H"); + assert.sameValue(this.values.j, "J"); + assert.sameValue(this.values.l, "L"); + assert.sameValue(this.values.m, "M"); + assert.sameValue(this.values.n, "N"); + assert.sameValue(this.values.o, "O"); + assert.sameValue(this.values.q, "Q"); + assert.sameValue(this.values.s, "S"); + assert.sameValue(this.values.t, "T"); + assert.sameValue(this.values.u, "U"); + assert.sameValue(this.values.v, "V"); + assert.sameValue(this.values.x, "X"); + assert.sameValue(this.values.z, "Z"); + assert.sameValue(this.values.length, 2); + } +} + +new C2(); + diff --git a/test/staging/sm/destructuring/order.js b/test/staging/sm/destructuring/order.js new file mode 100644 index 0000000000..f56dcb2831 --- /dev/null +++ b/test/staging/sm/destructuring/order.js @@ -0,0 +1,728 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1204028; +var summary = "Destructuring should evaluate lhs reference before rhs"; + +print(BUGNUMBER + ": " + summary); + +let storage = { + clear() { + this.values = {}; + } +}; +storage.clear(); +let obj = new Proxy(storage, { + set(that, name, value) { + log("lhs set " + name); + storage.values[name] = value; + } +}); + +let logs = []; +function log(x) { + logs.push(x); +} + +function clear() { + logs = []; + storage.clear(); +} + +let unwrapMap = new Map(); +function unwrap(maybeWrapped) { + if (unwrapMap.has(maybeWrapped)) + return unwrapMap.get(maybeWrapped); + return maybeWrapped; +} +function ToString(name) { + if (name == Symbol.iterator) + return "@@iterator"; + return String(name); +} +function logger(obj, prefix=[]) { + let wrapped = new Proxy(obj, { + get(that, name) { + if (name == "return") { + // FIXME: Bug 1147371. + // We ignore IteratorClose for now. + return obj[name]; + } + + let names = prefix.concat(ToString(name)); + log("rhs get " + names.join("::")); + let v = obj[name]; + if (typeof v === "object" || typeof v === "function") + return logger(v, names); + return v; + }, + apply(that, thisArg, args) { + let names = prefix.slice(); + log("rhs call " + names.join("::")); + let v = obj.apply(unwrap(thisArg), args); + if (typeof v === "object" || typeof v === "function") { + names[names.length - 1] += "()"; + return logger(v, names); + } + return v; + } + }); + unwrapMap.set(wrapped, obj); + return wrapped; +} + +// Array. + +clear(); +[ + ( log("lhs before obj a"), obj ).a +] = logger(["A"]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before obj a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + ].join(",")); +assert.sameValue(storage.values.a, "A"); + +clear(); +[ + ( log("lhs before obj a"), obj )[ (log("lhs before name a"), "a") ] +] = logger(["A"]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before obj a", + "lhs before name a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + ].join(",")); +assert.sameValue(storage.values.a, "A"); + +// Array rest. + +clear(); +[ + ...( log("lhs before obj a"), obj ).a +] = logger(["A", "B", "C"]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before obj a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "lhs set a", + ].join(",")); +assert.sameValue(storage.values.a.join(","), "A,B,C"); + +clear(); +[ + ...( log("lhs before obj a"), obj )[ (log("lhs before name a"), "a") ] +] = logger(["A", "B", "C"]);; +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before obj a", + "lhs before name a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "lhs set a", + ].join(",")); +assert.sameValue(storage.values.a.join(","), "A,B,C"); + +// Array combined. + +clear(); +[ + ( log("lhs before obj a"), obj ).a, + ( log("lhs before obj b"), obj )[ (log("lhs before name b"), "b") ], + ...( log("lhs before obj c"), obj )[ (log("lhs before name c"), "c") ] +] = logger(["A", "B", "C"]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before obj a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + + "lhs before obj b", + "lhs before name b", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set b", + + "lhs before obj c", + "lhs before name c", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "lhs set c", + ].join(",")); +assert.sameValue(storage.values.a, "A"); +assert.sameValue(storage.values.b, "B"); +assert.sameValue(storage.values.c.join(","), "C"); + +// Object. + +clear(); +({ + a: ( log("lhs before obj a"), obj ).a +} = logger({a: "A"})); +assert.sameValue(logs.join(","), + [ + "lhs before obj a", + "rhs get a", + "lhs set a", + ].join(",")); +assert.sameValue(storage.values.a, "A"); + +clear(); +({ + a: ( log("lhs before obj a"), obj )[ (log("lhs before name a"), "a") ] +} = logger({a: "A"})); +assert.sameValue(logs.join(","), + [ + "lhs before obj a", + "lhs before name a", + "rhs get a", + "lhs set a", + ].join(",")); +assert.sameValue(storage.values.a, "A"); + +// Object combined. + +clear(); +({ + a: ( log("lhs before obj a"), obj ).a, + b: ( log("lhs before obj b"), obj )[ (log("lhs before name b"), "b") ] +} = logger({a: "A", b: "B"})); +assert.sameValue(logs.join(","), + [ + "lhs before obj a", + "rhs get a", + "lhs set a", + + "lhs before obj b", + "lhs before name b", + "rhs get b", + "lhs set b", + ].join(",")); +assert.sameValue(storage.values.a, "A"); +assert.sameValue(storage.values.b, "B"); + +// == Nested == + +// Array -> Array + +clear(); +[ + [ + ( log("lhs before obj a"), obj )[ (log("lhs before name a"), "a") ], + ...( log("lhs before obj b"), obj )[ (log("lhs before name b"), "b") ] + ] +] = logger([["A", "B"]]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before obj a", + "lhs before name a", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set a", + + "lhs before obj b", + "lhs before name b", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "lhs set b", + ].join(",")); +assert.sameValue(storage.values.a, "A"); +assert.sameValue(storage.values.b.length, 1); +assert.sameValue(storage.values.b[0], "B"); + +// Array rest -> Array + +clear(); +[ + ...[ + ( log("lhs before obj a"), obj )[ (log("lhs before name a"), "a") ], + ...( log("lhs before obj b"), obj )[ (log("lhs before name b"), "b") ] + ] +] = logger(["A", "B"]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + + "lhs before obj a", + "lhs before name a", + "lhs set a", + + "lhs before obj b", + "lhs before name b", + "lhs set b", + ].join(",")); +assert.sameValue(storage.values.a, "A"); +assert.sameValue(storage.values.b.join(","), "B"); + +// Array -> Object +clear(); +[ + { + a: ( log("lhs before obj a"), obj )[ (log("lhs before name a"), "a") ] + } +] = logger([{a: "A"}]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + + "lhs before obj a", + "lhs before name a", + "rhs get @@iterator()::next()::value::a", + "lhs set a", + ].join(",")); +assert.sameValue(storage.values.a, "A"); + +// Array rest -> Object +clear(); +[ + ...{ + 0: ( log("lhs before obj 0"), obj )[ (log("lhs before name 0"), "0") ], + 1: ( log("lhs before obj 1"), obj )[ (log("lhs before name 1"), "1") ], + length: ( log("lhs before obj length"), obj )[ (log("lhs before name length"), "length") ], + } +] = logger(["A", "B"]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + + "lhs before obj 0", + "lhs before name 0", + "lhs set 0", + + "lhs before obj 1", + "lhs before name 1", + "lhs set 1", + + "lhs before obj length", + "lhs before name length", + "lhs set length", + ].join(",")); +assert.sameValue(storage.values["0"], "A"); +assert.sameValue(storage.values["1"], "B"); +assert.sameValue(storage.values.length, 2); + +// Object -> Array +clear(); +({ + a: [ + ( log("lhs before obj b"), obj )[ (log("lhs before name b"), "b") ] + ] +} = logger({a: ["B"]})); +assert.sameValue(logs.join(","), + [ + "rhs get a", + "rhs get a::@@iterator", + "rhs call a::@@iterator", + "rhs get a::@@iterator()::next", + + "lhs before obj b", + "lhs before name b", + "rhs call a::@@iterator()::next", + "rhs get a::@@iterator()::next()::done", + "rhs get a::@@iterator()::next()::value", + "lhs set b", + ].join(",")); +assert.sameValue(storage.values.b, "B"); + +// Object -> Object +clear(); +({ + a: { + b: ( log("lhs before obj b"), obj )[ (log("lhs before name b"), "b") ] + } +} = logger({a: {b: "B"}})); +assert.sameValue(logs.join(","), + [ + "rhs get a", + "lhs before obj b", + "lhs before name b", + "rhs get a::b", + "lhs set b", + ].join(",")); +assert.sameValue(storage.values.b, "B"); + +// All combined + +clear(); +[ + ( log("lhs before obj a"), obj )[ (log("lhs before name a"), "a") ], + [ + ( log("lhs before obj b"), obj )[ (log("lhs before name b"), "b") ], + { + c: ( log("lhs before obj c"), obj )[ (log("lhs before name c"), "c") ], + d: { + e: ( log("lhs before obj e"), obj )[ (log("lhs before name e"), "e") ], + f: [ + ( log("lhs before obj g"), obj )[ (log("lhs before name g"), "g") ] + ] + } + } + ], + { + h: ( log("lhs before obj h"), obj )[ (log("lhs before name h"), "h") ], + i: [ + ( log("lhs before obj j"), obj )[ (log("lhs before name j"), "j") ], + { + k: [ + ( log("lhs before obj l"), obj )[ (log("lhs before name l"), "l") ] + ] + } + ] + }, + ...[ + ( log("lhs before obj m"), obj )[ (log("lhs before name m"), "m") ], + [ + ( log("lhs before obj n"), obj )[ (log("lhs before name n"), "n") ], + { + o: ( log("lhs before obj o"), obj )[ (log("lhs before name o"), "o") ], + p: { + q: ( log("lhs before obj q"), obj )[ (log("lhs before name q"), "q") ], + r: [ + ( log("lhs before obj s"), obj )[ (log("lhs before name s"), "s") ] + ] + } + } + ], + ...{ + 0: ( log("lhs before obj t"), obj )[ (log("lhs before name t"), "t") ], + 1: [ + ( log("lhs before obj u"), obj )[ (log("lhs before name u"), "u") ], + { + v: ( log("lhs before obj v"), obj )[ (log("lhs before name v"), "v") ], + w: { + x: ( log("lhs before obj x"), obj )[ (log("lhs before name x"), "x") ], + y: [ + ( log("lhs before obj z"), obj )[ (log("lhs before name z"), "z") ] + ] + } + } + ], + length: ( log("lhs before obj length"), obj )[ (log("lhs before name length"), "length") ], + } + ] +] = logger(["A", + ["B", {c: "C", d: {e: "E", f: ["G"]}}], + {h: "H", i: ["J", {k: ["L"]}]}, + "M", + ["N", {o: "O", p: {q: "Q", r: ["S"]}}], + "T", ["U", {v: "V", w: {x: "X", y: ["Z"]}}]]); +assert.sameValue(logs.join(","), + [ + "rhs get @@iterator", + "rhs call @@iterator", + "rhs get @@iterator()::next", + + "lhs before obj a", + "lhs before name a", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "lhs set a", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before obj b", + "lhs before name b", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set b", + + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + + "lhs before obj c", + "lhs before name c", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::c", + "lhs set c", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d", + + "lhs before obj e", + "lhs before name e", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::e", + "lhs set e", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next", + + "lhs before obj g", + "lhs before name g", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::d::f::@@iterator()::next()::value", + "lhs set g", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + + "lhs before obj h", + "lhs before name h", + "rhs get @@iterator()::next()::value::h", + "lhs set h", + + "rhs get @@iterator()::next()::value::i", + "rhs get @@iterator()::next()::value::i::@@iterator", + "rhs call @@iterator()::next()::value::i::@@iterator", + "rhs get @@iterator()::next()::value::i::@@iterator()::next", + + "lhs before obj j", + "lhs before name j", + "rhs call @@iterator()::next()::value::i::@@iterator()::next", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value", + "lhs set j", + + "rhs call @@iterator()::next()::value::i::@@iterator()::next", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value", + + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator", + "rhs call @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next", + + "lhs before obj l", + "lhs before name l", + "rhs call @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::i::@@iterator()::next()::value::k::@@iterator()::next()::value", + "lhs set l", + + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + "rhs get @@iterator()::next()::value", + "rhs call @@iterator()::next", + "rhs get @@iterator()::next()::done", + + "lhs before obj m", + "lhs before name m", + "lhs set m", + + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before obj n", + "lhs before name n", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set n", + + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + + "lhs before obj o", + "lhs before name o", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::o", + "lhs set o", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p", + + "lhs before obj q", + "lhs before name q", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::q", + "lhs set q", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next", + + "lhs before obj s", + "lhs before name s", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::p::r::@@iterator()::next()::value", + "lhs set s", + + "lhs before obj t", + "lhs before name t", + "lhs set t", + + "rhs get @@iterator()::next()::value::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next", + + "lhs before obj u", + "lhs before name u", + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + "lhs set u", + + "rhs call @@iterator()::next()::value::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value", + + "lhs before obj v", + "lhs before name v", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::v", + "lhs set v", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w", + + "lhs before obj x", + "lhs before name x", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::x", + "lhs set x", + + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next", + + "lhs before obj z", + "lhs before name z", + "rhs call @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next()::done", + "rhs get @@iterator()::next()::value::@@iterator()::next()::value::w::y::@@iterator()::next()::value", + "lhs set z", + + "lhs before obj length", + "lhs before name length", + "lhs set length", + ].join(",")); +assert.sameValue(storage.values.a, "A"); +assert.sameValue(storage.values.b, "B"); +assert.sameValue(storage.values.c, "C"); +assert.sameValue(storage.values.e, "E"); +assert.sameValue(storage.values.g, "G"); +assert.sameValue(storage.values.h, "H"); +assert.sameValue(storage.values.j, "J"); +assert.sameValue(storage.values.l, "L"); +assert.sameValue(storage.values.m, "M"); +assert.sameValue(storage.values.n, "N"); +assert.sameValue(storage.values.o, "O"); +assert.sameValue(storage.values.q, "Q"); +assert.sameValue(storage.values.s, "S"); +assert.sameValue(storage.values.t, "T"); +assert.sameValue(storage.values.u, "U"); +assert.sameValue(storage.values.v, "V"); +assert.sameValue(storage.values.x, "X"); +assert.sameValue(storage.values.z, "Z"); +assert.sameValue(storage.values.length, 2); + diff --git a/test/staging/sm/eval/exhaustive-fun-normalcaller-direct-normalcode.js b/test/staging/sm/eval/exhaustive-fun-normalcaller-direct-normalcode.js new file mode 100644 index 0000000000..bdb30819d7 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-normalcaller-direct-normalcode.js @@ -0,0 +1,215 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 4); +assert.sameValue(resultsX.global1, 17); + +assert.sameValue(resultsX.inner2, 7); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 17); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 9); +assert.sameValue(resultsX.global3, 17); + +assert.sameValue(resultsX.del, false); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 9); +assert.sameValue(resultsX.global4, 17); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 23); +assert.sameValue(resultsX.global5, 17); + + +function testY() +{ + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 5); +assert.sameValue(resultsY.global1, 42); + +assert.sameValue(resultsY.inner2, 8); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 42); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 2); +assert.sameValue(resultsY.global3, 42); + +assert.sameValue(resultsY.del, true); + +assert.sameValue(resultsY.inner4, 42); +assert.sameValue(resultsY.local4, 42); +assert.sameValue(resultsY.global4, 42); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 71); +assert.sameValue(resultsY.global5, 71); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-fun-normalcaller-direct-strictcode.js b/test/staging/sm/eval/exhaustive-fun-normalcaller-direct-strictcode.js new file mode 100644 index 0000000000..55fd18518d --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-normalcaller-direct-strictcode.js @@ -0,0 +1,217 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 2); +assert.sameValue(resultsX.global1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 17); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); +assert.sameValue(resultsX.global3, 17); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); +assert.sameValue(resultsX.global4, 17); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); +assert.sameValue(resultsX.global5, 17); + + +function testY() +{ + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 42); +assert.sameValue(resultsY.global1, 42); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 8); +assert.sameValue(resultsY.global3, 8); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 8); +assert.sameValue(resultsY.global4, 8); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 8); +assert.sameValue(resultsY.global5, 8); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-fun-normalcaller-indirect-normalcode.js b/test/staging/sm/eval/exhaustive-fun-normalcaller-indirect-normalcode.js new file mode 100644 index 0000000000..0ff8f4d2e8 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-normalcaller-indirect-normalcode.js @@ -0,0 +1,215 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 2); +assert.sameValue(resultsX.global1, 4); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 4); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); +assert.sameValue(resultsX.global3, 9); + +assert.sameValue(resultsX.del, false); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); +assert.sameValue(resultsX.global4, 9); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); +assert.sameValue(resultsX.global5, 23); + + +function testY() +{ + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 5); +assert.sameValue(resultsY.global1, 5); + +assert.sameValue(resultsY.inner2, 8); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 2); +assert.sameValue(resultsY.global3, 2); + +assert.sameValue(resultsY.del, false); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 2); +assert.sameValue(resultsY.global4, 2); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 71); +assert.sameValue(resultsY.global5, 71); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-fun-normalcaller-indirect-strictcode.js b/test/staging/sm/eval/exhaustive-fun-normalcaller-indirect-strictcode.js new file mode 100644 index 0000000000..8dd5cb7cf8 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-normalcaller-indirect-strictcode.js @@ -0,0 +1,217 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 2); +assert.sameValue(resultsX.global1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 17); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); +assert.sameValue(resultsX.global3, 17); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); +assert.sameValue(resultsX.global4, 17); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); +assert.sameValue(resultsX.global5, 17); + + +function testY() +{ + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 42); +assert.sameValue(resultsY.global1, 42); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 8); +assert.sameValue(resultsY.global3, 8); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 8); +assert.sameValue(resultsY.global4, 8); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 8); +assert.sameValue(resultsY.global5, 8); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-fun-strictcaller-direct-normalcode.js b/test/staging/sm/eval/exhaustive-fun-strictcaller-direct-normalcode.js new file mode 100644 index 0000000000..801fe08101 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-strictcaller-direct-normalcode.js @@ -0,0 +1,219 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 2); +assert.sameValue(resultsX.global1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 17); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); +assert.sameValue(resultsX.global3, 17); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); +assert.sameValue(resultsX.global4, 17); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); +assert.sameValue(resultsX.global5, 17); + + +function testY() +{ + "use strict"; + + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 42); +assert.sameValue(resultsY.global1, 42); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 8); +assert.sameValue(resultsY.global3, 8); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 8); +assert.sameValue(resultsY.global4, 8); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 8); +assert.sameValue(resultsY.global5, 8); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-fun-strictcaller-direct-strictcode.js b/test/staging/sm/eval/exhaustive-fun-strictcaller-direct-strictcode.js new file mode 100644 index 0000000000..4fb0f8a624 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-strictcaller-direct-strictcode.js @@ -0,0 +1,221 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 2); +assert.sameValue(resultsX.global1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 17); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); +assert.sameValue(resultsX.global3, 17); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); +assert.sameValue(resultsX.global4, 17); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); +assert.sameValue(resultsX.global5, 17); + + +function testY() +{ + "use strict"; + + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 42); +assert.sameValue(resultsY.global1, 42); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 8); +assert.sameValue(resultsY.global3, 8); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 8); +assert.sameValue(resultsY.global4, 8); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 8); +assert.sameValue(resultsY.global5, 8); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-fun-strictcaller-indirect-normalcode.js b/test/staging/sm/eval/exhaustive-fun-strictcaller-indirect-normalcode.js new file mode 100644 index 0000000000..5aa5a2c160 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-strictcaller-indirect-normalcode.js @@ -0,0 +1,219 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 2); +assert.sameValue(resultsX.global1, 4); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 4); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); +assert.sameValue(resultsX.global3, 9); + +assert.sameValue(resultsX.del, false); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); +assert.sameValue(resultsX.global4, 9); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); +assert.sameValue(resultsX.global5, 23); + + +function testY() +{ + "use strict"; + + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 5); +assert.sameValue(resultsY.global1, 5); + +assert.sameValue(resultsY.inner2, 8); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 2); +assert.sameValue(resultsY.global3, 2); + +assert.sameValue(resultsY.del, false); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 2); +assert.sameValue(resultsY.global4, 2); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 71); +assert.sameValue(resultsY.global5, 71); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-fun-strictcaller-indirect-strictcode.js b/test/staging/sm/eval/exhaustive-fun-strictcaller-indirect-strictcode.js new file mode 100644 index 0000000000..3ff983d3db --- /dev/null +++ b/test/staging/sm/eval/exhaustive-fun-strictcaller-indirect-strictcode.js @@ -0,0 +1,221 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assert.sameValue(resultsX.local0, 2); +assert.sameValue(resultsX.global0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 2); +assert.sameValue(resultsX.global1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); +assert.sameValue(resultsX.global2, 17); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); +assert.sameValue(resultsX.global3, 17); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); +assert.sameValue(resultsX.global4, 17); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); +assert.sameValue(resultsX.global5, 17); + + +function testY() +{ + "use strict"; + + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assert.sameValue(resultsY.local0, 42); +assert.sameValue(resultsY.global0, 42); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 42); +assert.sameValue(resultsY.global1, 42); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, 8); +assert.sameValue(resultsY.global2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 8); +assert.sameValue(resultsY.global3, 8); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 8); +assert.sameValue(resultsY.global4, 8); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 8); +assert.sameValue(resultsY.global5, 8); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-normalcaller-direct-normalcode.js b/test/staging/sm/eval/exhaustive-global-normalcaller-direct-normalcode.js new file mode 100644 index 0000000000..273c2ba711 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-normalcaller-direct-normalcode.js @@ -0,0 +1,179 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 4); + +assert.sameValue(resultsX.inner2, 7); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 9); + +assert.sameValue(resultsX.del, false); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 9); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 23); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +var local1 = y; + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 5); + +assert.sameValue(resultsY.inner2, 8); +assert.sameValue(resultsY.local2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 2); + +assert.sameValue(resultsY.del, true); + +assert.sameValue(resultsY.inner4, "ReferenceError"); +assert.sameValue(resultsY.local4, "ReferenceError"); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 71); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-normalcaller-direct-strictcode.js b/test/staging/sm/eval/exhaustive-global-normalcaller-direct-strictcode.js new file mode 100644 index 0000000000..358f13b558 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-normalcaller-direct-strictcode.js @@ -0,0 +1,181 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, "ReferenceError"); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 8); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 8); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 8); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-normalcaller-indirect-normalcode.js b/test/staging/sm/eval/exhaustive-global-normalcaller-indirect-normalcode.js new file mode 100644 index 0000000000..af05ce0124 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-normalcaller-indirect-normalcode.js @@ -0,0 +1,179 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 4); + +assert.sameValue(resultsX.inner2, 7); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 9); + +assert.sameValue(resultsX.del, false); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 9); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 23); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +var local1 = y; + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 5); + +assert.sameValue(resultsY.inner2, 8); +assert.sameValue(resultsY.local2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 2); + +assert.sameValue(resultsY.del, true); + +assert.sameValue(resultsY.inner4, "ReferenceError"); +assert.sameValue(resultsY.local4, "ReferenceError"); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 71); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-normalcaller-indirect-strictcode.js b/test/staging/sm/eval/exhaustive-global-normalcaller-indirect-strictcode.js new file mode 100644 index 0000000000..1531a2ffa7 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-normalcaller-indirect-strictcode.js @@ -0,0 +1,181 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, "ReferenceError"); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 8); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, 8); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 8); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-strictcaller-direct-normalcode.js b/test/staging/sm/eval/exhaustive-global-strictcaller-direct-normalcode.js new file mode 100644 index 0000000000..a1d53da8bc --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-strictcaller-direct-normalcode.js @@ -0,0 +1,181 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +try { y = 8; } catch (e) { assert.sameValue(e.name, "ReferenceError"); } +var inner2 = f("get"); +try { var local2 = y; } catch (e) { local2 = e.name; } + +f("set1"); +var inner3 = f("get"); +try { var local3 = y; } catch (e) { local3 = e.name; } + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, "ReferenceError"); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, "ReferenceError"); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, "ReferenceError"); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, "ReferenceError"); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, "ReferenceError"); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-strictcaller-direct-strictcode.js b/test/staging/sm/eval/exhaustive-global-strictcaller-direct-strictcode.js new file mode 100644 index 0000000000..be57c19f64 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-strictcaller-direct-strictcode.js @@ -0,0 +1,183 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +try { y = 8; } catch (e) { assert.sameValue(e.name, "ReferenceError"); } +var inner2 = f("get"); +try { var local2 = y; } catch (e) { local2 = e.name; } + +f("set1"); +var inner3 = f("get"); +try { var local3 = y; } catch (e) { local3 = e.name; } + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, "ReferenceError"); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, "ReferenceError"); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, "ReferenceError"); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, "ReferenceError"); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, "ReferenceError"); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-strictcaller-indirect-normalcode.js b/test/staging/sm/eval/exhaustive-global-strictcaller-indirect-normalcode.js new file mode 100644 index 0000000000..ecb37a50b8 --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-strictcaller-indirect-normalcode.js @@ -0,0 +1,181 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 4); + +assert.sameValue(resultsX.inner2, 7); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 9); + +assert.sameValue(resultsX.del, false); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 9); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 23); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +var local1 = y; + +try { y = 8; } catch (e) { assert.sameValue(e.name, "ReferenceError"); } +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, 5); + +assert.sameValue(resultsY.inner2, 8); +assert.sameValue(resultsY.local2, 8); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, 2); + +assert.sameValue(resultsY.del, true); + +assert.sameValue(resultsY.inner4, "ReferenceError"); +assert.sameValue(resultsY.local4, "ReferenceError"); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, 71); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/exhaustive-global-strictcaller-indirect-strictcode.js b/test/staging/sm/eval/exhaustive-global-strictcaller-indirect-strictcode.js new file mode 100644 index 0000000000..d5a42962ea --- /dev/null +++ b/test/staging/sm/eval/exhaustive-global-strictcaller-indirect-strictcode.js @@ -0,0 +1,183 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsX.local0, 17); + +assert.sameValue(resultsX.inner1, 4); +assert.sameValue(resultsX.local1, 17); + +assert.sameValue(resultsX.inner2, 4); +assert.sameValue(resultsX.local2, 7); + +assert.sameValue(resultsX.inner3, 9); +assert.sameValue(resultsX.local3, 7); + +assert.sameValue(resultsX.del, "SyntaxError"); + +assert.sameValue(resultsX.inner4, 9); +assert.sameValue(resultsX.local4, 7); + +assert.sameValue(resultsX.inner5, 23); +assert.sameValue(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +try { y = 8; } catch (e) { assert.sameValue(e.name, "ReferenceError"); } +var inner2 = f("get"); +try { var local2 = y; } catch (e) { local2 = e.name; } + +f("set1"); +var inner3 = f("get"); +try { var local3 = y; } catch (e) { local3 = e.name; } + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assert.sameValue(resultsY.local0, "ReferenceError"); + +assert.sameValue(resultsY.inner1, 5); +assert.sameValue(resultsY.local1, "ReferenceError"); + +assert.sameValue(resultsY.inner2, 5); +assert.sameValue(resultsY.local2, "ReferenceError"); + +assert.sameValue(resultsY.inner3, 2); +assert.sameValue(resultsY.local3, "ReferenceError"); + +assert.sameValue(resultsY.del, "SyntaxError"); + +assert.sameValue(resultsY.inner4, 2); +assert.sameValue(resultsY.local4, "ReferenceError"); + +assert.sameValue(resultsY.inner5, 71); +assert.sameValue(resultsY.local5, "ReferenceError"); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/line-terminator-paragraph-terminator.js b/test/staging/sm/eval/line-terminator-paragraph-terminator.js new file mode 100644 index 0000000000..1511044500 --- /dev/null +++ b/test/staging/sm/eval/line-terminator-paragraph-terminator.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 657367; +var summary = + "eval via the JSON parser should parse strings containing U+2028/U+2029 " + + "(as of , that is)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(eval('("\u2028")'), "\u2028"); +assert.sameValue(eval('("\u2029")'), "\u2029"); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/eval/redeclared-arguments-in-param-expression-eval.js b/test/staging/sm/eval/redeclared-arguments-in-param-expression-eval.js new file mode 100644 index 0000000000..93b6c60e44 --- /dev/null +++ b/test/staging/sm/eval/redeclared-arguments-in-param-expression-eval.js @@ -0,0 +1,96 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure there's no predefined |arguments| binding. +assert.sameValue("arguments" in this, false); + +// Declare |arguments| when no pre-existing (and explicit) |arguments| bindings are present. +function f1(p = eval("var arguments")) {} +assertThrowsInstanceOf(f1, SyntaxError); + +// Declare |arguments| when the function body contains an |arguments| var-binding. +function f2(p = eval("var arguments")) { + var arguments; +} +assertThrowsInstanceOf(f2, SyntaxError); + +// Declare |arguments| when the function body contains an |arguments| function declaration. +// +// doesn't create the +// implicit |arguments| binding when no parameter expressions are present. This case +// may be special-cased in implementations and therefore should be tested specifically. +function f3(p = eval("var arguments")) { + function arguments() {} +} +assertThrowsInstanceOf(f3, SyntaxError); + +// Declare |arguments| when the function body contains an |arguments| lexical binding. +// +// doesn't create the +// implicit |arguments| binding when no parameter expressions are present. This case +// may be special-cased in implementations and therefore should be tested specifically. +function f4(p = eval("var arguments")) { + let arguments; +} +assertThrowsInstanceOf(f4, SyntaxError); + +// Declare |arguments| when a following parameter is named |arguments|. +function f5(p = eval("var arguments"), arguments) {} +assertThrowsInstanceOf(f5, SyntaxError); + +// Declare |arguments| when a preceding parameter is named |arguments|. +function f6(arguments, p = eval("var arguments")) {} +assertThrowsInstanceOf(f6, SyntaxError); + + +// Repeat the same kind of tests for arrow function. + +// Declare |arguments| when no pre-existing |arguments| bindings are present. +var a1 = (p = eval("var arguments = 'param'")) => { + assert.sameValue(arguments, "param"); +}; +a1(); + +// Declare |arguments| when the function body contains an |arguments| var-binding. +var a2 = (p = eval("var arguments = 'param'"), q = () => arguments) => { + var arguments = "local"; + assert.sameValue(arguments, "local"); + assert.sameValue(q(), "param"); +}; +a2(); + +// Declare |arguments| when the function body contains an |arguments| function declaration. +var a3 = (p = eval("var arguments = 'param'"), q = () => arguments) => { + function arguments() {} + assert.sameValue(typeof arguments, "function"); + assert.sameValue(q(), "param"); +}; +a3(); + +// Declare |arguments| when the function body contains an |arguments| lexical binding. +var a4 = (p = eval("var arguments = 'param'"), q = () => arguments) => { + let arguments = "local"; + assert.sameValue(arguments, "local"); + assert.sameValue(q(), "param"); +}; +a4(); + +// Declare |arguments| when a following parameter is named |arguments|. +var a5 = (p = eval("var arguments"), arguments) => {}; +assertThrowsInstanceOf(a5, SyntaxError); + +// Declare |arguments| when a preceding parameter is named |arguments|. +var a6 = (arguments, p = eval("var arguments")) => {}; +assertThrowsInstanceOf(a6, SyntaxError); + +// None of the direct eval calls introduced a global |arguments| binding. +assert.sameValue("arguments" in this, false); + diff --git a/test/staging/sm/eval/regress-531682.js b/test/staging/sm/eval/regress-531682.js new file mode 100644 index 0000000000..c099538cee --- /dev/null +++ b/test/staging/sm/eval/regress-531682.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 531682; +var summary = 'Checking proper wrapping of scope in eval(source, scope)'; +var actual; +var expect; + +//----------------------------------------------------------------------------- +var x = 0; + +test(); +//----------------------------------------------------------------------------- + +function scope1() { + eval('var x = 1;'); + return function() { return x; } +} + +function test() { + printBugNumber(BUGNUMBER); + printStatus (summary); + + // The scope chain in eval should be just scope1() and the global object. + actual = eval('x', scope1()); + expect = 0; + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/eval/undeclared-name-in-nested-strict-eval.js b/test/staging/sm/eval/undeclared-name-in-nested-strict-eval.js new file mode 100644 index 0000000000..7f420d4c0d --- /dev/null +++ b/test/staging/sm/eval/undeclared-name-in-nested-strict-eval.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = + "Verify that we don't optimize free names to gnames in eval code that's " + + "global, when the name refers to a binding introduced by a strict mode " + + "eval frame"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = "global"; +assert.sameValue(eval('var x = "eval"; eval("x")'), "eval"); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/expressions/11.1.5-01.js b/test/staging/sm/expressions/11.1.5-01.js new file mode 100644 index 0000000000..07ce6b480f --- /dev/null +++ b/test/staging/sm/expressions/11.1.5-01.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 520696; +var summary = + 'Implement support for string literals as names for properties defined ' + + 'using ES5 get/set syntax'; + +print(BUGNUMBER + ": " + summary); + + +var o; + +o = { get "a b c"() { return 17; } }; +assert.sameValue("get" in Object.getOwnPropertyDescriptor(o, "a b c"), true); + +o = eval('({ get "a b c"() { return 17; } })'); +assert.sameValue("get" in Object.getOwnPropertyDescriptor(o, "a b c"), true); + +var f = eval("(function literalInside() { return { set 'c d e'(q) { } }; })"); +f = function literalInside() { return { set 'c d e'(q) { } }; }; + +function checkO() +{ + assert.sameValue(3.141592654 in o, true, "fractional-named property isn't in object"); + assert.sameValue(10000 in o, true, "exponential-named property is in object"); + assert.sameValue(0xdeadbeef in o, true, "hex-named property is in object"); + assert.sameValue("Infinity" in o, true, "numeric index stringified correctly"); +} + +o = eval('({ 3.141592654: "pi", 1e4: 17, 0xdeadbeef: "hex", 1e3000: "Infinity" })'); +checkO(); +o = { 3.141592654: "pi", 1e4: 17, 0xdeadbeef: "hex", 1e3000: "Infinity" }; +checkO(); + diff --git a/test/staging/sm/expressions/ToPropertyKey-symbols.js b/test/staging/sm/expressions/ToPropertyKey-symbols.js new file mode 100644 index 0000000000..8512436f3b --- /dev/null +++ b/test/staging/sm/expressions/ToPropertyKey-symbols.js @@ -0,0 +1,100 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var symbols = [ + Symbol(), Symbol("iterator"), Symbol.for("iterator"), Symbol.iterator +]; + +for (var sym of symbols) { + var key = { + toString() { return sym; } + }; + + // Test that ToPropertyKey can return a symbol in each of the following + // contexts. + + // Computed property names. + var obj = {[key]: 13}; + var found = Reflect.ownKeys(obj); + assert.sameValue(found.length, 1); + assert.sameValue(found[0], sym); + + // Computed accessor property names. + var obj2 = { + get [key]() { return "got"; }, + set [key](v) { this.v = v; } + }; + assert.sameValue(obj2[sym], "got"); + obj2[sym] = 33; + assert.sameValue(obj2.v, 33); + + // Getting and setting properties. + assert.sameValue(obj[key], 13); + obj[key] = 19; + assert.sameValue(obj[sym], 19); + (function () { "use strict"; obj[key] = 20; })(); + assert.sameValue(obj[sym], 20); + obj[key]++; + assert.sameValue(obj[sym], 21); + + // Getting properties of primitive values. + Number.prototype[sym] = "success"; + assert.sameValue(Math.PI[key], "success"); + delete Number.prototype[sym]; + + // Getting a super property. + class X { + [sym]() { return "X"; } + } + class Y extends X { + [sym]() { return super[key]() + "Y"; } + } + var y = new Y(); + assert.sameValue(y[sym](), "XY"); + + // Setting a super property. + class Z { + set [sym](v) { + this.self = this; + this.value = v; + } + } + class W extends Z { + set [sym](v) { + this.isW = true; + super[key] = v; + } + } + var w = new W(); + w[key] = "ok"; + assert.sameValue(w.self, w); + assert.sameValue(w.value, "ok"); + assert.sameValue(w.isW, true); + + // Deleting properties. + obj = {[sym]: 1}; + assert.sameValue(delete obj[key], true); + assert.sameValue(sym in obj, false); + + // LHS of `in` expressions. + assert.sameValue(key in {iterator: 0}, false); + assert.sameValue(key in {[sym]: 0}, true); + + // Methods of Object and Object.prototype + obj = {}; + Object.defineProperty(obj, key, {value: "ok", enumerable: true}); + assert.sameValue(obj[sym], "ok"); + assert.sameValue(obj.hasOwnProperty(key), true); + assert.sameValue(obj.propertyIsEnumerable(key), true); + var desc = Object.getOwnPropertyDescriptor(obj, key); + assert.sameValue(desc.value, "ok"); +} + diff --git a/test/staging/sm/expressions/binary-literals.js b/test/staging/sm/expressions/binary-literals.js new file mode 100644 index 0000000000..6447910ade --- /dev/null +++ b/test/staging/sm/expressions/binary-literals.js @@ -0,0 +1,122 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 894026; +var summary = "Implement ES6 binary literals"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var chars = ['b', 'B']; + +for (var i = 0; i < 2; i++) +{ + if (i === 2) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i); + throw "didn't throw"; + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + ", " + + "got " + e); + } + }); + continue; + } + + for (var j = 0; j < 2; j++) + { + if (j === 2) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j); + throw "didn't throw"; + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + ", " + + "got " + e); + } + }); + continue; + } + + for (var k = 0; k < 2; k++) + { + if (k === 2) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j + k); + throw "didn't throw"; + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + k + ", " + + "got " + e); + } + }); + continue; + } + + chars.forEach(function(v) + { + assert.sameValue(eval('0' + v + i + j + k), i * 4 + j * 2 + k); + }); + } + } +} + +chars.forEach(function(v) +{ + try + { + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + ", got " + e); + } +}); + +// Off-by-one check: '/' immediately precedes '0'. +assert.sameValue(0b110/1, 6); +assert.sameValue(0B10110/1, 22); + +function strict() +{ + "use strict"; + return 0b11010101; +} +assert.sameValue(strict(), 128 + 64 + 16 + 4 + 1); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/computed-property-side-effects.js b/test/staging/sm/expressions/computed-property-side-effects.js new file mode 100644 index 0000000000..7736c372c7 --- /dev/null +++ b/test/staging/sm/expressions/computed-property-side-effects.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1199695; +var summary = + "Computed property names must be considered as always effectful even when " + + "the name expression isn't effectful, because calling ToPropertyKey on " + + "some non-effectful expressions has user-modifiable behavior"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +RegExp.prototype.toString = () => { throw 42; }; +assertThrowsValue(function() { + ({ [/regex/]: 0 }); // ToPropertyKey(/regex/) throws 42 +}, 42); + +function Q() { + ({ [new.target]: 0 }); // new.target will be Q, ToPropertyKey(Q) throws 17 +} +Q.toString = () => { throw 17; }; +assertThrowsValue(function() { + new Q; +}, 17); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/constant-folded-labeled-statement.js b/test/staging/sm/expressions/constant-folded-labeled-statement.js new file mode 100644 index 0000000000..e1bb4db5bf --- /dev/null +++ b/test/staging/sm/expressions/constant-folded-labeled-statement.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1499448; +var summary = "Constant folder should fold labeled statements"; + +print(BUGNUMBER + ": " + summary); + +if (typeof disassemble === "function") { + var code = disassemble(() => { x: 2+2; }); + + if (typeof assert.sameValue === "function") + assert.sameValue(true, /Int8 4/.test(code)); +} + diff --git a/test/staging/sm/expressions/delete-constant-folded-and-or.js b/test/staging/sm/expressions/delete-constant-folded-and-or.js new file mode 100644 index 0000000000..c607680893 --- /dev/null +++ b/test/staging/sm/expressions/delete-constant-folded-and-or.js @@ -0,0 +1,48 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1183400; +var summary = + "Deletion of a && or || expression that constant-folds to a name must not " + + "attempt to delete the name"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +Object.defineProperty(this, "nonconfigurable", { value: 42 }); +assert.sameValue(nonconfigurable, 42); + +assert.sameValue(delete nonconfigurable, false); +assert.sameValue(delete (true && nonconfigurable), true); + +function nested() +{ + assert.sameValue(delete nonconfigurable, false); + assert.sameValue(delete (true && nonconfigurable), true); +} +nested(); + +function nestedStrict() +{ + "use strict"; + assert.sameValue(delete (true && nonconfigurable), true); +} +nestedStrict(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/delete-name-parenthesized-early-error-strict-mode.js b/test/staging/sm/expressions/delete-name-parenthesized-early-error-strict-mode.js new file mode 100644 index 0000000000..239faba254 --- /dev/null +++ b/test/staging/sm/expressions/delete-name-parenthesized-early-error-strict-mode.js @@ -0,0 +1,83 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1111101; +var summary = + "delete (foo), delete ((foo)), and so on are strict mode early errors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function checkSyntaxError(code) +{ + function helper(maker) + { + var earlyError = false; + try + { + var f = maker(code); + + var error = "no early error, created a function with code <" + code + ">"; + try + { + f(); + error += ", and the function can be called without error"; + } + catch (e) + { + error +=", and calling the function throws " + e; + } + + throw new Error(error); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "expected syntax error, got " + e); + } + } + + helper(Function); + helper(eval); +} + +checkSyntaxError("function f() { 'use strict'; delete escape; } f();"); +checkSyntaxError("function f() { 'use strict'; delete escape; }"); +checkSyntaxError("function f() { 'use strict'; delete (escape); } f();"); +checkSyntaxError("function f() { 'use strict'; delete (escape); }"); +checkSyntaxError("function f() { 'use strict'; delete ((escape)); } f();"); +checkSyntaxError("function f() { 'use strict'; delete ((escape)); }"); + +// Meanwhile, non-strict all of these should work + +function checkFine(code) +{ + Function(code); + (1, eval)(code); // indirect, to be consistent w/above +} + +checkFine("function f() { delete escape; } f();"); +checkFine("function f() { delete escape; }"); +checkFine("function f() { delete (escape); } f();"); +checkFine("function f() { delete (escape); }"); +checkFine("function f() { delete ((escape)); } f();"); +checkFine("function f() { delete ((escape)); }"); + + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/destructuring-array-default-call.js b/test/staging/sm/expressions/destructuring-array-default-call.js new file mode 100644 index 0000000000..4990b9c89f --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-default-call.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "Array destructuring with various default values in various context - call/new expression"; + +print(BUGNUMBER + ": " + summary); + +testDestructuringArrayDefault("func()"); +testDestructuringArrayDefault("new func()"); + diff --git a/test/staging/sm/expressions/destructuring-array-default-class.js b/test/staging/sm/expressions/destructuring-array-default-class.js new file mode 100644 index 0000000000..145349a8c6 --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-default-class.js @@ -0,0 +1,81 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "Array destructuring with various default values in various context - class expression and super/new.target"; + +print(BUGNUMBER + ": " + summary); + +testDestructuringArrayDefault(`class E { + constructor() {} + method() {} + get v() {} + set v(_) {} + static method() {} + static get v() {} + static set v(_) {} +}`); + +testDestructuringArrayDefault(`class E extends C { + constructor() {} + method() {} + get v() {} + set v(_) {} + static method() {} + static get v() {} + static set v(_) {} +}`); + +var opt = { + no_plain: true, + no_func: true, + no_func_arg: true, + no_gen: true, + no_gen_arg: true, + no_ctor: true, + no_method: true, + no_pre_super: true, + no_comp: true, + + no_derived_ctor: false, +}; +testDestructuringArrayDefault("super()", opt); + +opt = { + no_plain: true, + no_func: true, + no_func_arg: true, + no_gen: true, + no_gen_arg: true, + no_ctor: true, + no_comp: true, + + no_derived_ctor: false, + no_method: false, + no_pre_super: false, +}; +testDestructuringArrayDefault("super.foo()", opt); + +opt = { + no_plain: true, + + no_func: false, + no_func_arg: false, + no_gen: false, + no_gen_arg: false, + no_ctor: false, + no_derived_ctor: false, + no_method: false, + no_pre_super: false, + no_comp: false, +}; +testDestructuringArrayDefault("new.target", opt); + diff --git a/test/staging/sm/expressions/destructuring-array-default-function-nested.js b/test/staging/sm/expressions/destructuring-array-default-function-nested.js new file mode 100644 index 0000000000..428dbb4f94 --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-default-function-nested.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "Array destructuring with various default values in various context - function expression with nested objects"; + +print(BUGNUMBER + ": " + summary); + +testDestructuringArrayDefault("function f() { return { f() {}, *g() {}, r: /a/ }; }"); +testDestructuringArrayDefault("function* g() { return { f() {}, *g() {}, r: /b/ }; }"); +testDestructuringArrayDefault("() => { return { f() {}, *g() {}, r: /c/ }; }"); + diff --git a/test/staging/sm/expressions/destructuring-array-default-function.js b/test/staging/sm/expressions/destructuring-array-default-function.js new file mode 100644 index 0000000000..28d2e9649e --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-default-function.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "Array destructuring with various default values in various context - function expression"; + +print(BUGNUMBER + ": " + summary); + +testDestructuringArrayDefault("function f() {}"); +testDestructuringArrayDefault("function* g() {}"); +testDestructuringArrayDefault("() => {}"); + diff --git a/test/staging/sm/expressions/destructuring-array-default-simple.js b/test/staging/sm/expressions/destructuring-array-default-simple.js new file mode 100644 index 0000000000..f6c988ea79 --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-default-simple.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "Array destructuring with various default values in various context - simple literal"; + +print(BUGNUMBER + ": " + summary); + +testDestructuringArrayDefault("'foo'"); +testDestructuringArrayDefault("`foo`"); +testDestructuringArrayDefault("func`foo`"); + +testDestructuringArrayDefault("/foo/"); + +testDestructuringArrayDefault("{}"); +testDestructuringArrayDefault("[]"); + diff --git a/test/staging/sm/expressions/destructuring-array-default-yield.js b/test/staging/sm/expressions/destructuring-array-default-yield.js new file mode 100644 index 0000000000..7c337de775 --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-default-yield.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "Array destructuring with various default values in various context - yield expression"; + +print(BUGNUMBER + ": " + summary); + +var opt = { + no_plain: true, + no_func: true, + no_func_arg: true, + no_gen_arg: true, + no_ctor: true, + no_derived_ctor: true, + no_method: true, + no_pre_super: true, + no_comp: true, + + no_gen: false, +}; +testDestructuringArrayDefault("yield 1", opt); + diff --git a/test/staging/sm/expressions/destructuring-array-done.js b/test/staging/sm/expressions/destructuring-array-done.js new file mode 100644 index 0000000000..bb7ae48bd3 --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-done.js @@ -0,0 +1,328 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "iterator.next() should not be called when after iterator completes"; + +print(BUGNUMBER + ": " + summary); + +var log; +function reset() { + log = ""; +} +var obj = new Proxy({}, { + set(that, name, value) { + var v; + if (value instanceof Function || value instanceof RegExp) + v = value.toString(); + else + v = JSON.stringify(value); + log += "set:" + name + "=" + v + ","; + } +}); +function createIterable(n) { + return { + i: 0, + [Symbol.iterator]() { + return this; + }, + next() { + log += "next,"; + this.i++; + if (this.i <= n) + return {value: this.i, done: false}; + return {value: 0, done: true}; + } + }; +} + +// Simple pattern. + +reset(); +[obj.a, obj.b, obj.c] = createIterable(0); +assert.sameValue(log, + "next," + + "set:a=undefined," + + "set:b=undefined," + + "set:c=undefined,"); + +reset(); +[obj.a, obj.b, obj.c] = createIterable(1); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=undefined," + + "set:c=undefined,"); + +reset(); +[obj.a, obj.b, obj.c] = createIterable(2); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=2," + + "next," + + "set:c=undefined,"); + +reset(); +[obj.a, obj.b, obj.c] = createIterable(3); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=2," + + "next," + + "set:c=3,"); + +// Elision. + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(0); +assert.sameValue(log, + "next," + + "set:a=undefined," + + "set:b=undefined," + + "set:c=undefined,"); + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(1); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=undefined," + + "set:c=undefined,"); + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(2); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "next," + + "set:b=undefined," + + "set:c=undefined,"); + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(3); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "next," + + "set:b=3," + + "next," + + "set:c=undefined,"); + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(4); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "next," + + "set:b=3," + + "next," + + "next," + + "set:c=undefined,"); + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(5); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "next," + + "set:b=3," + + "next," + + "next," + + "next," + + "set:c=undefined,"); + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(6); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "next," + + "set:b=3," + + "next," + + "next," + + "next," + + "set:c=6," + + "next,"); + +reset(); +[obj.a, , obj.b, , , obj.c, ,] = createIterable(7); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "next," + + "set:b=3," + + "next," + + "next," + + "next," + + "set:c=6," + + "next,"); + +// Rest. + +reset(); +[...obj.r] = createIterable(0); +assert.sameValue(log, + "next," + + "set:r=[],"); + +reset(); +[...obj.r] = createIterable(1); +assert.sameValue(log, + "next," + + "next," + + "set:r=[1],"); + +reset(); +[obj.a, ...obj.r] = createIterable(0); +assert.sameValue(log, + "next," + + "set:a=undefined," + + "set:r=[],"); + +reset(); +[obj.a, ...obj.r] = createIterable(1); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:r=[],"); + +reset(); +[obj.a, ...obj.r] = createIterable(2); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "next," + + "set:r=[2],"); + +reset(); +[obj.a, obj.b, ...obj.r] = createIterable(0); +assert.sameValue(log, + "next," + + "set:a=undefined," + + "set:b=undefined," + + "set:r=[],"); + +reset(); +[obj.a, obj.b, ...obj.r] = createIterable(1); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=undefined," + + "set:r=[],"); + +reset(); +[obj.a, obj.b, ...obj.r] = createIterable(2); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=2," + + "next," + + "set:r=[],"); + +reset(); +[obj.a, obj.b, ...obj.r] = createIterable(3); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=2," + + "next," + + "next," + + "set:r=[3],"); + +// Rest and elision. + +reset(); +[, ...obj.r] = createIterable(0); +assert.sameValue(log, + "next," + + "set:r=[],"); + +reset(); +[, ...obj.r] = createIterable(1); +assert.sameValue(log, + "next," + + "next," + + "set:r=[],"); + +reset(); +[, ...obj.r] = createIterable(2); +assert.sameValue(log, + "next," + + "next," + + "next," + + "set:r=[2],"); + +reset(); +[obj.a, obj.b, , ...obj.r] = createIterable(0); +assert.sameValue(log, + "next," + + "set:a=undefined," + + "set:b=undefined," + + "set:r=[],"); + +reset(); +[obj.a, obj.b, , ...obj.r] = createIterable(1); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=undefined," + + "set:r=[],"); + +reset(); +[obj.a, obj.b, , ...obj.r] = createIterable(2); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=2," + + "next," + + "set:r=[],"); + +reset(); +[obj.a, obj.b, , ...obj.r] = createIterable(3); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=2," + + "next," + + "next," + + "set:r=[],"); + +reset(); +[obj.a, obj.b, , ...obj.r] = createIterable(4); +assert.sameValue(log, + "next," + + "set:a=1," + + "next," + + "set:b=2," + + "next," + + "next," + + "next," + + "set:r=[4],"); + diff --git a/test/staging/sm/expressions/destructuring-array-lexical.js b/test/staging/sm/expressions/destructuring-array-lexical.js new file mode 100644 index 0000000000..fca645039f --- /dev/null +++ b/test/staging/sm/expressions/destructuring-array-lexical.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1184922; +var summary = "Array destructuring with accessing uninitialized lexical binding."; + +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => { let y = [y] = []; }, + ReferenceError); +assertThrowsInstanceOf(() => { let y = [y] = [,]; }, + ReferenceError); + diff --git a/test/staging/sm/expressions/destructuring-object-__proto__-1.js b/test/staging/sm/expressions/destructuring-object-__proto__-1.js new file mode 100644 index 0000000000..fc0f4ae74e --- /dev/null +++ b/test/staging/sm/expressions/destructuring-object-__proto__-1.js @@ -0,0 +1,91 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test __proto__ is destructuring binding initialization. + +// __proto__ shorthand, no default. +{ + let {__proto__} = {}; + assert.sameValue(__proto__, Object.prototype); +} + +// __proto__ shorthand, with default. +{ + let {__proto__ = 0} = {}; + assert.sameValue(__proto__, Object.prototype); +} + +{ + let {__proto__ = 0} = Object.create(null); + assert.sameValue(__proto__, 0); +} + +// __proto__ keyed, no default. +{ + let {__proto__: p} = {}; + assert.sameValue(p, Object.prototype); +} + +// __proto__ keyed, with default. +{ + let {__proto__: p = 0} = {}; + assert.sameValue(p, Object.prototype); +} + +// __proto__ keyed, with default. +{ + let {__proto__: p = 0} = Object.create(null); + assert.sameValue(p, 0); +} + +// Repeat the cases from above, but this time with a rest property. + +// __proto__ shorthand, no default. +{ + let {__proto__, ...rest} = {}; + assert.sameValue(__proto__, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ shorthand, with default. +{ + let {__proto__ = 0, ...rest} = {}; + assert.sameValue(__proto__, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +{ + let {__proto__ = 0, ...rest} = Object.create(null); + assert.sameValue(__proto__, 0); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ keyed, no default. +{ + let {__proto__: p, ...rest} = {}; + assert.sameValue(p, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ keyed, with default. +{ + let {__proto__: p = 0, ...rest} = {}; + assert.sameValue(p, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ keyed, with default. +{ + let {__proto__: p = 0, ...rest} = Object.create(null); + assert.sameValue(p, 0); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + diff --git a/test/staging/sm/expressions/destructuring-object-__proto__-2.js b/test/staging/sm/expressions/destructuring-object-__proto__-2.js new file mode 100644 index 0000000000..394b3ad123 --- /dev/null +++ b/test/staging/sm/expressions/destructuring-object-__proto__-2.js @@ -0,0 +1,103 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test __proto__ is destructuring assignment. + +// __proto__ shorthand, no default. +{ + let __proto__; + ({__proto__} = {}); + assert.sameValue(__proto__, Object.prototype); +} + +// __proto__ shorthand, with default. +{ + let __proto__; + ({__proto__ = 0} = {}); + assert.sameValue(__proto__, Object.prototype); +} + +{ + let __proto__; + ({__proto__ = 0} = Object.create(null)); + assert.sameValue(__proto__, 0); +} + +// __proto__ keyed, no default. +{ + let p; + ({__proto__: p} = {}); + assert.sameValue(p, Object.prototype); +} + +// __proto__ keyed, with default. +{ + let p; + ({__proto__: p = 0} = {}); + assert.sameValue(p, Object.prototype); +} + +// __proto__ keyed, with default. +{ + let p; + ({__proto__: p = 0} = Object.create(null)); + assert.sameValue(p, 0); +} + +// Repeat the cases from above, but this time with a rest property. + +// __proto__ shorthand, no default. +{ + let __proto__, rest; + ({__proto__, ...rest} = {}); + assert.sameValue(__proto__, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ shorthand, with default. +{ + let __proto__, rest; + ({__proto__ = 0, ...rest} = {}); + assert.sameValue(__proto__, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +{ + let __proto__, rest; + ({__proto__ = 0, ...rest} = Object.create(null)); + assert.sameValue(__proto__, 0); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ keyed, no default. +{ + let p, rest; + ({__proto__: p, ...rest} = {}); + assert.sameValue(p, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ keyed, with default. +{ + let p, rest; + ({__proto__: p = 0, ...rest} = {}); + assert.sameValue(p, Object.prototype); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + +// __proto__ keyed, with default. +{ + let p, rest; + ({__proto__: p = 0, ...rest} = Object.create(null)); + assert.sameValue(p, 0); + assert.sameValue(Reflect.ownKeys(rest).length, 0); +} + diff --git a/test/staging/sm/expressions/destructuring-pattern-parenthesized.js b/test/staging/sm/expressions/destructuring-pattern-parenthesized.js new file mode 100644 index 0000000000..45e3b757e5 --- /dev/null +++ b/test/staging/sm/expressions/destructuring-pattern-parenthesized.js @@ -0,0 +1,144 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1146136; +var summary = + 'Parenthesized "destructuring patterns" are not usable as destructuring ' + + 'patterns'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Don't pollute the top-level script with eval references. +var savedEval = this[String.fromCharCode(101, 118, 97, 108)]; + +function checkError(code, nonstrictErr, strictErr) +{ + function helper(exec, prefix, err) + { + var fullCode = prefix + code; + try + { + var f = exec(fullCode); + + var error = + "no early error, parsed code <" + fullCode + "> using " + exec.name; + if (typeof f === "function") + { + try + { + f(); + error += ", and the function can be called without error"; + } + catch (e) + { + error +=", and calling the function throws " + e; + } + } + + throw new Error(error); + } + catch (e) + { + assert.sameValue(e instanceof err, true, + "expected " + err.name + ", got " + e + " " + + "for code <" + fullCode + "> when parsed using " + exec.name); + } + } + + helper(Function, "", nonstrictErr); + helper(Function, "'use strict'; ", strictErr); + helper(savedEval, "", nonstrictErr); + helper(savedEval, "'use strict'; ", strictErr); +} + +// Parenthesized destructuring patterns don't trigger grammar refinement, so we +// get the usual SyntaxError for an invalid assignment target, per +// 12.14.1 second bullet. +checkError("var a, b; ([a, b]) = [1, 2];", SyntaxError, SyntaxError); +checkError("var a, b; ({a, b}) = { a: 1, b: 2 };", SyntaxError, SyntaxError); + +// *Nested* parenthesized destructuring patterns, on the other hand, do trigger +// grammar refinement. But subtargets in a destructuring pattern must be +// either object/array literals that match the destructuring pattern refinement +// *or* valid simple assignment targets (or such things with a default, with the +// entire subtarget unparenthesized: |a = 3| is fine, |(a) = 3| is fine for +// destructuring in an expression, |(a = 3)| is forbidden). Parenthesized +// object/array patterns are neither. And so 12.14.5.1 third bullet requires an +// early SyntaxError. +checkError("var a, b; ({ a: ({ b: b }) } = { a: { b: 42 } });", SyntaxError, SyntaxError); +checkError("var a, b; ({ a: { b: (b = 7) } } = { a: {} });", SyntaxError, SyntaxError); +checkError("var a, b; ({ a: ([b]) } = { a: [42] });", SyntaxError, SyntaxError); +checkError("var a, b; [(a = 5)] = [1];", SyntaxError, SyntaxError); +checkError("var a, b; ({ a: (b = 7)} = { b: 1 });", SyntaxError, SyntaxError); + +Function("var a, b; [(a), b] = [1, 2];")(); +Function("var a, b; [(a) = 5, b] = [1, 2];")(); +Function("var a, b; [(arguments), b] = [1, 2];")(); +Function("var a, b; [(arguments) = 5, b] = [1, 2];")(); +Function("var a, b; [(eval), b] = [1, 2];")(); +Function("var a, b; [(eval) = 5, b] = [1, 2];")(); + +var repair = {}, demolition = {}; + +Function("var a, b; [(repair.man), b] = [1, 2];")(); +Function("var a, b; [(demolition['man']) = 'motel', b] = [1, 2];")(); +Function("var a, b; [(demolition['man' + {}]) = 'motel', b] = [1, 2];")(); // evade constant-folding + +function classesEnabled() +{ + try + { + new Function("class B { constructor() { } }; class D extends B { constructor() { super(); } }"); + return true; + } + catch (e) { + if (!(e instanceof SyntaxError)) + throw e; + return false; + } +} + +if (classesEnabled()) +{ + Function("var a, b; var obj = { x() { [(super.man), b] = [1, 2]; } };")(); + Function("var a, b; var obj = { x() { [(super[8]) = 'motel', b] = [1, 2]; } };")(); + Function("var a, b; var obj = { x() { [(super[8 + {}]) = 'motel', b] = [1, 2]; } };")(); // evade constant-folding +} + +// As noted above, when the assignment element has an initializer, the +// assignment element must not be parenthesized. +checkError("var a, b; [(repair.man = 17)] = [1];", SyntaxError, SyntaxError); +checkError("var a, b; [(demolition['man'] = 'motel')] = [1, 2];", SyntaxError, SyntaxError); +checkError("var a, b; [(demolition['man' + {}] = 'motel')] = [1];", SyntaxError, SyntaxError); // evade constant-folding +if (classesEnabled()) +{ + checkError("var a, b; var obj = { x() { [(super.man = 5)] = [1]; } };", SyntaxError, SyntaxError); + checkError("var a, b; var obj = { x() { [(super[8] = 'motel')] = [1]; } };", SyntaxError, SyntaxError); + checkError("var a, b; var obj = { x() { [(super[8 + {}] = 'motel')] = [1]; } };", SyntaxError, SyntaxError); // evade constant-folding +} + +checkError("var a, b; [f() = 'ohai', b] = [1, 2];", SyntaxError, SyntaxError); +checkError("var a, b; [(f()) = 'kthxbai', b] = [1, 2];", SyntaxError, SyntaxError); + +Function("var a, b; ({ a: (a), b} = { a: 1, b: 2 });")(); +Function("var a, b; ({ a: (a) = 5, b} = { a: 1, b: 2 });")(); + + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/exponentiation-unparenthesised-unary.js b/test/staging/sm/expressions/exponentiation-unparenthesised-unary.js new file mode 100644 index 0000000000..66a19466cc --- /dev/null +++ b/test/staging/sm/expressions/exponentiation-unparenthesised-unary.js @@ -0,0 +1,115 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const AsyncFunction = async function(){}.constructor; + +function assertNoError(f, msg) { + try { + f(); + } catch (e) { + assert.sameValue(true, false, `${msg}: ${e}`); + } +} + +function assertSyntaxError(code) { + assertThrowsInstanceOf(function () { Function(code); }, SyntaxError, "Function:" + code); + assertThrowsInstanceOf(function () { AsyncFunction(code); }, SyntaxError, "AsyncFunction:" + code); +} + +function assertNoSyntaxError(code) { + assertNoError(function () { Function(code); }, "Function:" + code); + assertNoError(function () { AsyncFunction(code); }, "AsyncFunction:" + code); +} + +function assertNoSyntaxErrorAsyncContext(code) { + assertNoError(function () { AsyncFunction(code); }, "AsyncFunction:" + code); +} + +const invalidTestCases = [ + // UnaryExpression : delete UnaryExpression + // + // Test all possible `delete` expression kinds. + "delete a ** 0", + "delete a.prop ** 0", + "delete a[0] ** 0", + "delete a?.prop ** 0", + "delete 0 ** 0", + + // UnaryExpression : void UnaryExpression + "void a ** 0", + + // UnaryExpression : typeof UnaryExpression + // + // Test all possible `typeof` expression kinds. + "typeof a ** 0", + "typeof 0 ** 0", + + // UnaryExpression : + UnaryExpression + "+a ** 0", + + // UnaryExpression : - UnaryExpression + "-a ** 0", + + // UnaryExpression : ~ UnaryExpression + "~a ** 0", + + // UnaryExpression : ! UnaryExpression + "!a ** 0", + + // UnaryExpression : AwaitExpression + "await a ** 0", +]; + +for (let source of invalidTestCases) { + assertSyntaxError(source); +} + +const validTestCases = [ + // UnaryExpression : delete UnaryExpression + "(delete a) ** 0", + "(delete a.prop) ** 0", + "(delete a[0]) ** 0", + "(delete a?.prop) ** 0", + "(delete 0) ** 0", + + // UnaryExpression : void UnaryExpression + "(void a) ** 0", + + // UnaryExpression : typeof UnaryExpression + "(typeof a) ** 0", + "(typeof 0) ** 0", + + // UnaryExpression : + UnaryExpression + "(+a) ** 0", + + // UnaryExpression : - UnaryExpression + "(-a) ** 0", + + // UnaryExpression : ~ UnaryExpression + "(~a) ** 0", + + // UnaryExpression : ! UnaryExpression + "(!a) ** 0", +]; + +for (let source of validTestCases) { + assertNoSyntaxError(source); +} + +const validTestCasesAsync = [ + // UnaryExpression : AwaitExpression + "(await a) ** 0", +]; + +for (let source of validTestCasesAsync) { + assertNoSyntaxErrorAsyncContext(source); +} + diff --git a/test/staging/sm/expressions/inNotObjectError.js b/test/staging/sm/expressions/inNotObjectError.js new file mode 100644 index 0000000000..fc1b733b67 --- /dev/null +++ b/test/staging/sm/expressions/inNotObjectError.js @@ -0,0 +1,54 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1352429; +var summary = 'Error message should provide enough infomation for use of in operator'; + +print(BUGNUMBER + ": " + summary); + +function checkErr(substr, str, messageSubstr, messageStr) { + assertThrowsInstanceOfWithMessageCheck( + () => substr in str, + TypeError, + message => + message.includes(messageSubstr) && + message.includes(messageStr) && + message.length < 100, + `"${substr}" in "${str}"` + ); +} + +// These test cases check if long string is omitted properly. +checkErr('subString', 'base', 'subString', 'base'); +checkErr('this is subString', 'base', 'this is subStrin...', 'base'); +checkErr('subString', 'this is baseString', 'subString', 'this is baseStri...'); +checkErr('this is subString', 'this is base', 'this is subStrin...', 'this is base'); +checkErr('HEAD' + 'subString'.repeat(30000), 'HEAD' + 'base'.repeat(30000), 'HEADsubStringsub...', 'HEADbasebasebase...'); + +// These test cases check if it does not crash and throws appropriate error. +assertThrowsInstanceOf(() => { 1 in 'hello' }, TypeError); +assertThrowsInstanceOf(() => { 'hello' in 1 }, TypeError); +assertThrowsInstanceOf(() => { 'hello' in null }, TypeError); +assertThrowsInstanceOf(() => { null in 'hello' }, TypeError); +assertThrowsInstanceOf(() => { null in null }, TypeError); +assertThrowsInstanceOf(() => { 'hello' in true }, TypeError); +assertThrowsInstanceOf(() => { false in 1.1 }, TypeError); +assertThrowsInstanceOf(() => { Symbol.iterator in undefined }, TypeError); +assertThrowsInstanceOf(() => { [] in undefined }, TypeError); +assertThrowsInstanceOf(() => { /a/ in 'hello' }, TypeError); +var str = 'hello'; +assertThrowsInstanceOf(() => { str in 'hello' }, TypeError); +class A {}; +assertThrowsInstanceOf(() => { new A() in undefined }, TypeError); +var a = new A(); +a.b = 1.1; +assertThrowsInstanceOf(() => { a.b in 1.1 }, TypeError); + diff --git a/test/staging/sm/expressions/named-accessor-function.js b/test/staging/sm/expressions/named-accessor-function.js new file mode 100644 index 0000000000..10519efd18 --- /dev/null +++ b/test/staging/sm/expressions/named-accessor-function.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Contributor: +// Jeff Walden + +//----------------------------------------------------------------------------- +var BUGNUMBER = 999999; +var summary = '{ get x y() { } } is not valid getter syntax'; + +print(BUGNUMBER + ": " + summary); + +var BAD_CODE = ["({ get x y() { } })", "({ set x y(v) { } })"]; + +for (var i = 0, sz = BAD_CODE.length; i < sz; i++) +{ + var code = BAD_CODE[i]; + + var err = "no exception"; + try + { + eval(code); + } + catch (e) + { + err = e; + } + if (!(err instanceof SyntaxError)) + { + assert.sameValue(true, false, + "bad or no exception thrown for eval(" + code + "): " + err); + } + + err = "no exception"; + try + { + new Function(code); + } + catch (e) + { + err = e; + } + if (!(err instanceof SyntaxError)) + { + assert.sameValue(true, false, + "bad or no exception thrown for Function(" + code + "): " + err); + } +} + diff --git a/test/staging/sm/expressions/nested-delete-name-in-evalcode.js b/test/staging/sm/expressions/nested-delete-name-in-evalcode.js new file mode 100644 index 0000000000..af6917ec9f --- /dev/null +++ b/test/staging/sm/expressions/nested-delete-name-in-evalcode.js @@ -0,0 +1,170 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 616294; +var summary = + "|delete x| inside a function in eval code, where that eval code includes " + + "|var x| at top level, actually does delete the binding for x"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var f; + +function testOuterVar() +{ + return eval("var x; (function() { return delete x; })"); +} + +f = testOuterVar(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testOuterFunction() +{ + return eval("function x() { } (function() { return delete x; })"); +} + +f = testOuterFunction(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testOuterForVar() +{ + return eval("for (var x; false; ); (function() { return delete x; })"); +} + +f = testOuterForVar(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testOuterForInVar() +{ + return eval("for (var x in {}); (function() { return delete x; })"); +} + +f = testOuterForInVar(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testOuterNestedVar() +{ + return eval("for (var q = 0; q < 5; q++) { var x; } (function() { return delete x; })"); +} + +f = testOuterNestedVar(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testOuterNestedConditionalVar() +{ + return eval("for (var q = 0; q < 5; q++) { if (false) { var x; } } (function() { return delete x; })"); +} + +f = testOuterNestedConditionalVar(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testVarInWith() +{ + return eval("with ({}) { var x; } (function() { return delete x; })"); +} + +f = testVarInWith(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testForVarInWith() +{ + return eval("with ({}) { for (var x = 0; x < 5; x++); } (function() { return delete x; })"); +} + +f = testForVarInWith(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testForInVarInWith() +{ + return eval("with ({}) { for (var x in {}); } (function() { return delete x; })"); +} + +f = testForInVarInWith(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testUnknown() +{ + return eval("nameToDelete = 17; (function() { return delete nameToDelete; })"); +} + +f = testUnknown(); + +assert.sameValue(f(), true); // configurable global property, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testArgumentShadow() +{ + return eval("var x; (function(x) { return delete x; })"); +} + +f = testArgumentShadow(); + +assert.sameValue(f(), false); // non-configurable argument => false + + +function testArgument() +{ + return eval("(function(x) { return delete x; })"); +} + +f = testArgument(); + +assert.sameValue(f(), false); // non-configurable argument => false + + +function testFunctionLocal() +{ + return eval("(function() { var x; return delete x; })"); +} + +f = testFunctionLocal(); + +assert.sameValue(f(), false); // defined by function code => not configurable => false + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/expressions/nullish-coalescing.js b/test/staging/sm/expressions/nullish-coalescing.js new file mode 100644 index 0000000000..d52238631b --- /dev/null +++ b/test/staging/sm/expressions/nullish-coalescing.js @@ -0,0 +1,122 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1566141; +var summary = "Implement the Nullish Coalescing operator (??) proposal"; + +print(BUGNUMBER + ": " + summary); + +// These tests are originally from webkit. +// webkit specifics have been removed and a test for `document.all` has +// been added. +function shouldBe(actual, expected) { + if (actual !== expected) + throw new Error(`expected ${expected} but got ${actual}`); +} + +function shouldNotThrow(script) { + eval(script); +} + +function shouldThrowSyntaxError(script) { + let error; + try { + eval(script); + } catch (e) { + error = e; + } + + if (!(error instanceof SyntaxError)) + throw new Error('Expected SyntaxError!'); +} + +function testBasicCases() { + shouldBe(undefined ?? 3, 3); + shouldBe(null ?? 3, 3); + shouldBe(true ?? 3, true); + shouldBe(false ?? 3, false); + shouldBe(0 ?? 3, 0); + shouldBe(1 ?? 3, 1); + shouldBe('' ?? 3, ''); + shouldBe('hi' ?? 3, 'hi'); + shouldBe(({} ?? 3) instanceof Object, true); + shouldBe(({ x: 'hi' } ?? 3).x, 'hi'); + shouldBe(([] ?? 3) instanceof Array, true); + shouldBe((['hi'] ?? 3)[0], 'hi'); + // test document.all, which has odd behavior + shouldBe(typeof(createIsHTMLDDA() ?? 3), "undefined"); +} + +for (let i = 0; i < 1e5; i++) + testBasicCases(); + +shouldBe(1 | null ?? 3, 1); +shouldBe(1 ^ null ?? 3, 1); +shouldBe(1 & null ?? 3, 0); +shouldBe(3 == null ?? 3, false); +shouldBe(3 != null ?? 3, true); +shouldBe(3 === null ?? 3, false); +shouldBe(3 !== null ?? 3, true); +shouldBe(1 < null ?? 3, false); +shouldBe(1 > null ?? 3, true); +shouldBe(1 <= null ?? 3, false); +shouldBe(1 >= null ?? 3, true); +shouldBe(1 << null ?? 3, 1); +shouldBe(1 >> null ?? 3, 1); +shouldBe(1 >>> null ?? 3, 1); +shouldBe(1 + null ?? 3, 1); +shouldBe(1 - null ?? 3, 1); +shouldBe(1 * null ?? 3, 0); +shouldBe(1 / null ?? 3, Infinity); +shouldBe(isNaN(1 % null ?? 3), true); +shouldBe(1 ** null ?? 3, 1); +shouldBe((void 0) ?? 3, 3); + +const obj = { + count: 0, + get x() { this.count++; return 'x'; } +}; +false ?? obj.x; +shouldBe(obj.count, 0); +null ?? obj.x; +shouldBe(obj.count, 1); +obj.x ?? obj.x; +shouldBe(obj.count, 2); + +shouldThrowSyntaxError('0 || 1 ?? 2'); +shouldThrowSyntaxError('0 && 1 ?? 2'); +shouldThrowSyntaxError('0 ?? 1 || 2'); +shouldThrowSyntaxError('0 ?? 1 && 2'); +shouldNotThrow('(0 || 1) ?? 2'); +shouldNotThrow('0 || (1 ?? 2)'); +shouldNotThrow('(0 && 1) ?? 2'); +shouldNotThrow('0 && (1 ?? 2)'); +shouldNotThrow('(0 ?? 1) || 2'); +shouldNotThrow('0 ?? (1 || 2)'); +shouldNotThrow('(0 ?? 1) && 2'); +shouldNotThrow('0 ?? (1 && 2)'); + +shouldNotThrow('0 || 1 && 2 | 3 ^ 4 & 5 == 6 != 7 === 8 !== 9 < 0 > 1 <= 2 >= 3 << 4 >> 5 >>> 6 + 7 - 8 * 9 / 0 % 1 ** 2'); +shouldThrowSyntaxError('0 || 1 && 2 | 3 ^ 4 & 5 == 6 != 7 === 8 !== 9 < 0 > 1 <= 2 >= 3 << 4 >> 5 >>> 6 + 7 - 8 * 9 / 0 % 1 ** 2 ?? 3'); +shouldThrowSyntaxError('3 ?? 2 ** 1 % 0 / 9 * 8 - 7 + 6 >>> 5 >> 4 << 3 >= 2 <= 1 > 0 < 9 !== 8 === 7 != 6 == 5 & 4 ^ 3 | 2 && 1 || 0'); + +shouldBe(null?.x ?? 3, 3); +shouldBe(({})?.x ?? 3, 3); +shouldBe(({ x: 0 })?.x ?? 3, 0); +shouldBe(null?.() ?? 3, 3); +shouldBe((() => 0)?.() ?? 3, 0); +shouldBe(({ x: 0 })?.[null?.a ?? 'x'] ?? 3, 0); +shouldBe((() => 0)?.(null?.a ?? 'x') ?? 3, 0); + +print("Tests complete"); + diff --git a/test/staging/sm/expressions/object-literal-__proto__.js b/test/staging/sm/expressions/object-literal-__proto__.js new file mode 100644 index 0000000000..97fc6e4211 --- /dev/null +++ b/test/staging/sm/expressions/object-literal-__proto__.js @@ -0,0 +1,274 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1061853; +var summary = + "__proto__ in object literals in non-__proto__:v contexts doesn't modify " + + "[[Prototype]]"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function hasOwn(obj, prop) +{ + return Object.getOwnPropertyDescriptor(obj, prop) !== undefined; +} + +var objectStart = "{ "; +var objectEnd = " }"; + +var members = + { + nullProto: "__proto__: null", + functionProtoProto: "__proto__: Function.prototype", + computedNull: "['__proto__']: null", + method: "__proto__() {}", + computedMethod: "['__proto__']() {}", + generatorMethod: "*__proto__() {}", + computedGenerator: "*['__proto__']() {}", + shorthand: "__proto__", + getter: "get __proto__() { return 42; }", + getterComputed: "get ['__proto__']() { return 42; }", + setter: "set __proto__(v) { }", + setterComputed: "set ['__proto__'](v) { }", + }; + +function isProtoMutation(key) +{ + return key === "nullProto" || key === "functionProtoProto"; +} + +function isGetter(key) +{ + return key === "getter" || key === "getterComputed"; +} + +function isSetter(key) +{ + return key === "setter" || key === "setterComputed"; +} + +function isData(key) +{ + return !isProtoMutation(key) && !isGetter(key) && !isSetter(key); +} + +var __proto__ = "string value"; + +function typeOfProto(key) +{ + if (key === "computedNull") + return "object"; + if (key === "method" || key === "computedMethod" || + key === "computedGenerator" || key === "generatorMethod") + { + return "function"; + } + if (key === "getter" || key === "getterComputed") + return "number"; + assert.sameValue(key, "shorthand", "bug in test!"); + return "string"; +} + +for (var first in members) +{ + var fcode = "return " + objectStart + members[first] + objectEnd; + var f = Function(fcode); + var oneProp = f(); + + if (first === "nullProto") + { + assert.sameValue(Object.getPrototypeOf(oneProp), null); + assert.sameValue(hasOwn(oneProp, "__proto__"), false); + } + else if (first === "functionProtoProto") + { + assert.sameValue(Object.getPrototypeOf(oneProp), Function.prototype); + assert.sameValue(hasOwn(oneProp, "__proto__"), false); + } + else if (isSetter(first)) + { + assert.sameValue(Object.getPrototypeOf(oneProp), Object.prototype); + assert.sameValue(hasOwn(oneProp, "__proto__"), true); + assert.sameValue(typeof Object.getOwnPropertyDescriptor(oneProp, "__proto__").set, + "function"); + } + else + { + assert.sameValue(Object.getPrototypeOf(oneProp), Object.prototype); + assert.sameValue(hasOwn(oneProp, "__proto__"), true); + assert.sameValue(typeof oneProp.__proto__, typeOfProto(first)); + } + + for (var second in members) + { + try + { + var gcode = "return " + objectStart + members[first] + ", " + + members[second] + objectEnd; + var g = Function(gcode); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "__proto__ member conflicts should be syntax errors, got " + e); + assert.sameValue(+(first === "nullProto" || first === "functionProtoProto") + + +(second === "nullProto" || second === "functionProtoProto") > 1, + true, + "unexpected conflict between members: " + first + ", " + second); + continue; + } + + var twoProps = g(); + + if (first === "nullProto" || second === "nullProto") + assert.sameValue(Object.getPrototypeOf(twoProps), null); + else if (first === "functionProtoProto" || second === "functionProtoProto") + assert.sameValue(Object.getPrototypeOf(twoProps), Function.prototype); + else + assert.sameValue(Object.getPrototypeOf(twoProps), Object.prototype); + + if (isSetter(second)) + { + assert.sameValue(hasOwn(twoProps, "__proto__"), true); + assert.sameValue(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get, + isGetter(first) ? "function" : "undefined"); + } + else if (!isProtoMutation(second)) + { + assert.sameValue(hasOwn(twoProps, "__proto__"), true); + assert.sameValue(typeof twoProps.__proto__, typeOfProto(second)); + if (isGetter(second)) + { + assert.sameValue(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get, + "function"); + assert.sameValue(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").set, + isSetter(first) ? "function" : "undefined"); + } + } + else if (isSetter(first)) + { + assert.sameValue(hasOwn(twoProps, "__proto__"), true); + assert.sameValue(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").set, + "function"); + assert.sameValue(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get, + "undefined"); + } + else if (!isProtoMutation(first)) + { + assert.sameValue(hasOwn(twoProps, "__proto__"), true); + assert.sameValue(typeof twoProps.__proto__, typeOfProto(first)); + } + else + { + assert.sameValue(true, false, "should be unreachable: " + first + ", " + second); + } + + for (var third in members) + { + try + { + var hcode = "return " + objectStart + members[first] + ", " + + members[second] + ", " + + members[third] + objectEnd; + var h = Function(hcode); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "__proto__ member conflicts should be syntax errors, got " + e); + assert.sameValue(+(first === "nullProto" || first === "functionProtoProto") + + +(second === "nullProto" || second === "functionProtoProto") + + +(third === "nullProto" || third === "functionProtoProto") > 1, + true, + "unexpected conflict among members: " + + first + ", " + second + ", " + third); + continue; + } + + var threeProps = h(); + + if (first === "nullProto" || second === "nullProto" || + third === "nullProto") + { + assert.sameValue(Object.getPrototypeOf(threeProps), null); + } + else if (first === "functionProtoProto" || + second === "functionProtoProto" || + third === "functionProtoProto") + { + assert.sameValue(Object.getPrototypeOf(threeProps), Function.prototype); + } + else + { + assert.sameValue(Object.getPrototypeOf(threeProps), Object.prototype); + } + + if (isSetter(third)) + { + assert.sameValue(hasOwn(threeProps, "__proto__"), true); + assert.sameValue(typeof Object.getOwnPropertyDescriptor(threeProps, "__proto__").get, + isGetter(second) || (!isData(second) && isGetter(first)) + ? "function" + : "undefined", + "\n" + hcode); + } + else if (!isProtoMutation(third)) + { + assert.sameValue(hasOwn(threeProps, "__proto__"), true); + assert.sameValue(typeof threeProps.__proto__, typeOfProto(third), first + ", " + second + ", " + third); + if (isGetter(third)) + { + var desc = Object.getOwnPropertyDescriptor(threeProps, "__proto__"); + assert.sameValue(typeof desc.get, "function"); + assert.sameValue(typeof desc.set, + isSetter(second) || (!isData(second) && isSetter(first)) + ? "function" + : "undefined"); + } + } + else if (isSetter(second)) + { + assert.sameValue(hasOwn(threeProps, "__proto__"), true); + assert.sameValue(typeof Object.getOwnPropertyDescriptor(threeProps, "__proto__").get, + isGetter(first) ? "function" : "undefined"); + } + else if (!isProtoMutation(second)) + { + assert.sameValue(hasOwn(threeProps, "__proto__"), true); + assert.sameValue(typeof threeProps.__proto__, typeOfProto(second)); + if (isGetter(second)) + { + var desc = Object.getOwnPropertyDescriptor(threeProps, "__proto__"); + assert.sameValue(typeof desc.get, "function"); + assert.sameValue(typeof desc.set, + isSetter(first) ? "function" : "undefined"); + } + } + else + { + assert.sameValue(true, false, + "should be unreachable: " + + first + ", " + second + ", " + third); + } + } + } +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/object-literal-accessor-arguments.js b/test/staging/sm/expressions/object-literal-accessor-arguments.js new file mode 100644 index 0000000000..0c70f572fc --- /dev/null +++ b/test/staging/sm/expressions/object-literal-accessor-arguments.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'object-literal-accessor-arguments.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 536472; +var summary = + 'ES5: { get x(v) { } } and { set x(v, v2) { } } should be syntax errors'; + +print(BUGNUMBER + ": " + summary); + +//----------------------------------------------------------------------------- + +function expectSyntaxError(s) +{ + try + { + eval(s); + throw new Error("no error thrown"); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "expected syntax error parsing '" + s + "', got: " + e); + } +} + +expectSyntaxError("({ get x(a) { } })"); +expectSyntaxError("({ get x(a, a) { } })"); +expectSyntaxError("({ get x(a, b) { } })"); +expectSyntaxError("({ get x(a, a, b) { } })"); +expectSyntaxError("({ get x(a, b, c) { } })"); + +expectSyntaxError("({ set x() { } })"); +expectSyntaxError("({ set x(a, a) { } })"); +expectSyntaxError("({ set x(a, b) { } })"); +expectSyntaxError("({ set x(a, a, b) { } })"); +expectSyntaxError("({ set x(a, b, c) { } })"); + +//----------------------------------------------------------------------------- + diff --git a/test/staging/sm/expressions/object-literal-accessor-property-name.js b/test/staging/sm/expressions/object-literal-accessor-property-name.js new file mode 100644 index 0000000000..4592ec059f --- /dev/null +++ b/test/staging/sm/expressions/object-literal-accessor-property-name.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'object-literal-accessor-property-name.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 715682; +var summary = + "Permit numbers and strings containing numbers as accessor property names"; +print(BUGNUMBER + ": " + summary); + +//----------------------------------------------------------------------------- + +({ get "0"() { } }); +({ get 0() { } }); +({ get 0.0() { } }); +({ get 0.() { } }); +({ get 1.() { } }); +({ get 5.2322341234123() { } }); + +({ set "0"(q) { } }); +({ set 0(q) { } }); +({ set 0.0(q) { } }); +({ set 0.(q) { } }); +({ set 1.(q) { } }); +({ set 5.2322341234123(q) { } }); + +//----------------------------------------------------------------------------- + diff --git a/test/staging/sm/expressions/object-literal-computed-property-evaluation.js b/test/staging/sm/expressions/object-literal-computed-property-evaluation.js new file mode 100644 index 0000000000..b64c548936 --- /dev/null +++ b/test/staging/sm/expressions/object-literal-computed-property-evaluation.js @@ -0,0 +1,45 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1199546; +var summary = + "Convert computed property name expressions to property key before " + + "evaluating the property's value"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = "foo"; +var convertsToS = { toString() { return s; } }; + +var o = { + [convertsToS]: // after ToPropertyKey becomes "foo" + (function() { + s = 'bar'; + return 'abc'; // so we have "foo": "bar" for the first property + })(), + + [convertsToS]: // |s| was set above to "bar", so after ToPropertyKey, "bar" + 'efg' // so we have "bar": "efg" for the second property +}; + +assert.sameValue(o.foo, "abc"); +assert.sameValue(o.bar, "efg"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/octal-literals.js b/test/staging/sm/expressions/octal-literals.js new file mode 100644 index 0000000000..4dee273ec5 --- /dev/null +++ b/test/staging/sm/expressions/octal-literals.js @@ -0,0 +1,110 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 894026; +var summary = "Implement ES6 octal literals"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var chars = ['o', 'O']; + +for (var i = 0; i < 8; i++) +{ + if (i === 8) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i); + throw "didn't throw"; + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + ", " + + "got " + e); + } + }); + continue; + } + + for (var j = 0; j < 8; j++) + { + if (j === 8) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j); + throw "didn't throw"; + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + ", " + + "got " + e); + } + }); + continue; + } + + for (var k = 0; k < 8; k++) + { + if (k === 8) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j + k); + throw "didn't throw"; + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + k + ", " + + "got " + e); + } + }); + continue; + } + + chars.forEach(function(v) + { + assert.sameValue(eval('0' + v + i + j + k), i * 64 + j * 8 + k); + }); + } + } +} + +// Off-by-one check: '/' immediately precedes '0'. +assert.sameValue(0o110/2, 36); +assert.sameValue(0O644/2, 210); + +function strict() +{ + "use strict"; + return 0o755; +} +assert.sameValue(strict(), 7 * 64 + 5 * 8 + 5); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/optional-chain-class-heritage.js b/test/staging/sm/expressions/optional-chain-class-heritage.js new file mode 100644 index 0000000000..b71b6acb07 --- /dev/null +++ b/test/staging/sm/expressions/optional-chain-class-heritage.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Optional expression can be part of a class heritage expression. + +var a = {b: null}; + +class C extends a?.b {} + +assert.sameValue(Object.getPrototypeOf(C.prototype), null); + diff --git a/test/staging/sm/expressions/optional-chain-first-expression.js b/test/staging/sm/expressions/optional-chain-first-expression.js new file mode 100644 index 0000000000..3802551bd0 --- /dev/null +++ b/test/staging/sm/expressions/optional-chain-first-expression.js @@ -0,0 +1,101 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Verify bytecode emitter accepts all valid optional chain first expressions. + +const expressions = [ + // https://tc39.es/ecma262/#sec-primary-expression + "this", + "ident", + "null", + "true", + "false", + "123", + "123n", + "'str'", + "[]", + "{}", + "function(){}", + "class{}", + "function*(){}", + "async function(){}", + "async function*(){}", + "/a/", + "`str`", + "(a + b)", + + // https://tc39.es/ecma262/#sec-left-hand-side-expressions + "a[b]", + "a.b", + "a``", + "super[a]", + "super.a", + "new.target", + "import.meta", + "new C()", + "new C", + "f()", + "super()", + "a?.b", + "a?.[b]", + "a?.()", + "a?.``", +]; + +function tryParse(s, f = Function) { + try { f(s); } catch {} +} + +function tryRun(s, f = Function) { + try { f(s)(); } catch {} +} + +for (let expr of expressions) { + // Evaluate in an expression context. + tryRun(`void (${expr}?.());`); + tryRun(`void (${expr}?.p());`); + + // Also try parenthesized. + tryRun(`void ((${expr})?.());`); + tryRun(`void ((${expr})?.p());`); +} + +function inClassConstructor(s) { + return `class C { constructor() { ${s} } }`; +} + +for (let expr of ["super[a]", "super.a", "super()"]) { + // Evaluate in an expression context. + tryRun(inClassConstructor(`void (${expr}?.());`)); + tryRun(inClassConstructor(`void (${expr}?.p());`)); + + // Also try parenthesized. + tryRun(inClassConstructor(`void ((${expr})?.());`)); + tryRun(inClassConstructor(`void ((${expr})?.p());`)); +} + +if (typeof parseModule === "function") { + const expressions = [ + "import.meta", + "import('')", + ]; + + for (let expr of expressions) { + // Evaluate in an expression context. + tryParse(`void (${expr}?.());`, parseModule); + tryParse(`void (${expr}?.p());`, parseModule); + + // Also try parenthesized. + tryParse(`void ((${expr})?.());`, parseModule); + tryParse(`void ((${expr})?.p());`, parseModule); + } +} + diff --git a/test/staging/sm/expressions/optional-chain-super-elem.js b/test/staging/sm/expressions/optional-chain-super-elem.js new file mode 100644 index 0000000000..9b17500a6a --- /dev/null +++ b/test/staging/sm/expressions/optional-chain-super-elem.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Don't assert. + +var obj = { + m() { + super[0]?.a + } +}; + +obj.m(); + diff --git a/test/staging/sm/expressions/optional-chain-tdz.js b/test/staging/sm/expressions/optional-chain-tdz.js new file mode 100644 index 0000000000..fd5ba02d3a --- /dev/null +++ b/test/staging/sm/expressions/optional-chain-tdz.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test TDZ for optional chaining. + +// TDZ for lexical |let| bindings with optional chaining. +{ + assertThrowsInstanceOf(() => { + const Null = null; + Null?.[b]; + b = 0; + let b; + }, ReferenceError); + + assertThrowsInstanceOf(() => { + const Null = null; + Null?.[b](); + b = 0; + let b; + }, ReferenceError); + + assertThrowsInstanceOf(() => { + const Null = null; + delete Null?.[b]; + b = 0; + let b; + }, ReferenceError); +} + diff --git a/test/staging/sm/expressions/optional-chain.js b/test/staging/sm/expressions/optional-chain.js new file mode 100644 index 0000000000..c5688ac7ee --- /dev/null +++ b/test/staging/sm/expressions/optional-chain.js @@ -0,0 +1,244 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1566143; +var summary = "Implement the Optional Chain operator (?.) proposal"; + +print(BUGNUMBER + ": " + summary); + +// These tests are originally from webkit. +// webkit specifics have been removed and error messages have been updated. +function shouldBe(actual, expected) { + if (actual !== expected) + throw new Error(`expected ${expected} but got ${actual}`); +} + +function shouldThrowSyntaxError(script) { + assertThrowsInstanceOf(() => eval(script), SyntaxError); +} + +function shouldNotThrowSyntaxError(script) { + let error; + try { + eval(script); + } catch (e) { + error = e; + } + + if ((error instanceof SyntaxError)) + throw new Error('Unxpected SyntaxError!'); +} + +function shouldThrowTypeError(func, messagePrefix) { + assertThrowsInstanceOfWithMessageContains(func, TypeError, messagePrefix); +} + +function shouldThrowReferenceError(script) { + assertThrowsInstanceOf(() => eval(script), ReferenceError); +} + +function testBasicSuccessCases() { + shouldBe(undefined?.valueOf(), undefined); + shouldBe(null?.valueOf(), undefined); + shouldBe(true?.valueOf(), true); + shouldBe(false?.valueOf(), false); + shouldBe(0?.valueOf(), 0); + shouldBe(1?.valueOf(), 1); + shouldBe(''?.valueOf(), ''); + shouldBe('hi'?.valueOf(), 'hi'); + shouldBe(({})?.constructor, Object); + shouldBe(({ x: 'hi' })?.x, 'hi'); + shouldBe([]?.length, 0); + shouldBe(['hi']?.length, 1); + + shouldBe(undefined?.['valueOf'](), undefined); + shouldBe(null?.['valueOf'](), undefined); + shouldBe(true?.['valueOf'](), true); + shouldBe(false?.['valueOf'](), false); + shouldBe(0?.['valueOf'](), 0); + shouldBe(1?.['valueOf'](), 1); + shouldBe(''?.['valueOf'](), ''); + shouldBe('hi'?.['valueOf'](), 'hi'); + shouldBe(({})?.['constructor'], Object); + shouldBe(({ x: 'hi' })?.['x'], 'hi'); + shouldBe([]?.['length'], 0); + shouldBe(['hi']?.[0], 'hi'); + + shouldBe(undefined?.(), undefined); + shouldBe(null?.(), undefined); + shouldBe((() => 3)?.(), 3); +} + +function testBasicFailureCases() { + shouldThrowTypeError(() => true?.(), 'true is not a function'); + shouldThrowTypeError(() => false?.(), 'false is not a function'); + shouldThrowTypeError(() => 0?.(), '0 is not a function'); + shouldThrowTypeError(() => 1?.(), '1 is not a function'); + shouldThrowTypeError(() => ''?.(), '"" is not a function'); + shouldThrowTypeError(() => 'hi'?.(), '"hi" is not a function'); + shouldThrowTypeError(() => ({})?.(), '({}) is not a function'); + shouldThrowTypeError(() => ({ x: 'hi' })?.(), '({x:"hi"}) is not a function'); + shouldThrowTypeError(() => []?.(), '[] is not a function'); + shouldThrowTypeError(() => ['hi']?.(), '[...] is not a function'); +} + +testBasicSuccessCases(); + +testBasicFailureCases(); + +shouldThrowTypeError(() => ({})?.i(), '(intermediate value).i is not a function'); +shouldBe(({}).i?.(), undefined); +shouldBe(({})?.i?.(), undefined); +shouldThrowTypeError(() => ({})?.['i'](), '(intermediate value)["i"] is not a function'); +shouldBe(({})['i']?.(), undefined); +shouldBe(({})?.['i']?.(), undefined); + +shouldThrowTypeError(() => ({})?.a['b'], '(intermediate value).a is undefined'); +shouldBe(({})?.a?.['b'], undefined); +shouldBe(null?.a['b']().c, undefined); +shouldThrowTypeError(() => ({})?.['a'].b, '(intermediate value)["a"] is undefined'); +shouldBe(({})?.['a']?.b, undefined); +shouldBe(null?.['a'].b()['c'], undefined); +shouldBe(null?.()().a['b'], undefined); + +const o0 = { a: { b() { return this._b.bind(this); }, _b() { return this.__b; }, __b: { c: 42 } } }; +shouldBe(o0?.a?.['b']?.()?.()?.c, 42); +shouldBe(o0?.i?.['j']?.()?.()?.k, undefined); +shouldBe((o0.a?._b)?.().c, 42); +shouldBe((o0.a?._b)().c, 42); +shouldBe((o0.a?.b?.())?.().c, 42); +shouldBe((o0.a?.['b']?.())?.().c, 42); + +shouldBe(({ undefined: 3 })?.[null?.a], 3); +shouldBe((() => 3)?.(null?.a), 3); + +const o1 = { count: 0, get x() { this.count++; return () => {}; } }; +o1.x?.y; +shouldBe(o1.count, 1); +o1.x?.['y']; +shouldBe(o1.count, 2); +o1.x?.(); +shouldBe(o1.count, 3); +null?.(o1.x); +shouldBe(o1.count, 3); + +shouldBe(delete undefined?.foo, true); +shouldBe(delete null?.foo, true); +shouldBe(delete undefined?.['foo'], true); +shouldBe(delete null?.['foo'], true); +shouldBe(delete undefined?.(), true); +shouldBe(delete null?.(), true); +shouldBe(delete ({}).a?.b?.b, true); +shouldBe(delete ({a : {b: undefined}}).a?.b?.b, true); +shouldBe(delete ({a : {b: undefined}}).a?.["b"]?.["b"], true); + +const o2 = { x: 0, y: 0, z() {} }; +shouldBe(delete o2?.x, true); +shouldBe(o2.x, undefined); +shouldBe(o2.y, 0); +shouldBe(delete o2?.x, true); +shouldBe(delete o2?.['y'], true); +shouldBe(o2.y, undefined); +shouldBe(delete o2?.['y'], true); +shouldBe(delete o2.z?.(), true); + +function greet(name) { return `hey, ${name}${this.suffix ?? '.'}`; } +shouldBe(eval?.('greet("world")'), 'hey, world.'); +shouldBe(greet?.call({ suffix: '!' }, 'world'), 'hey, world!'); +shouldBe(greet.call?.({ suffix: '!' }, 'world'), 'hey, world!'); +shouldBe(null?.call({ suffix: '!' }, 'world'), undefined); +shouldBe(({}).call?.({ suffix: '!' }, 'world'), undefined); +shouldBe(greet?.apply({ suffix: '?' }, ['world']), 'hey, world?'); +shouldBe(greet.apply?.({ suffix: '?' }, ['world']), 'hey, world?'); +shouldBe(null?.apply({ suffix: '?' }, ['world']), undefined); +shouldBe(({}).apply?.({ suffix: '?' }, ['world']), undefined); +shouldThrowSyntaxError('class C {} class D extends C { foo() { return super?.bar; } }'); +shouldThrowSyntaxError('class C {} class D extends C { foo() { return super?.["bar"]; } }'); +shouldThrowSyntaxError('class C {} class D extends C { constructor() { super?.(); } }'); +shouldThrowSyntaxError('const o = { C: class {} }; new o?.C();') +shouldThrowSyntaxError('const o = { C: class {} }; new o?.["C"]();') +shouldThrowSyntaxError('class C {} new C?.();') +shouldThrowSyntaxError('function foo() { new?.target; }'); +shouldThrowSyntaxError('function tag() {} tag?.``;'); +shouldThrowSyntaxError('const o = { tag() {} }; o?.tag``;'); +shouldThrowReferenceError('`${G}`?.r'); + +// NOT an optional chain +shouldBe(false?.4:5, 5); + +// Special case: binary operators that follow a binary expression +shouldThrowReferenceError('(0 || 1 << x)?.$'); +shouldThrowReferenceError('(0 || 1 >> x)?.$'); +shouldThrowReferenceError('(0 || 1 >>> x)?.$'); +shouldThrowReferenceError('(0 || 1 + x)?.$'); +shouldThrowReferenceError('(0 || 1 - x)?.$'); +shouldThrowReferenceError('(0 || 1 % x)?.$'); +shouldThrowReferenceError('(0 || 1 / x)?.$'); +shouldThrowReferenceError('(0 || 1 == x)?.$'); +shouldThrowReferenceError('(0 || 1 != x)?.$'); +shouldThrowReferenceError('(0 || 1 !== x)?.$'); +shouldThrowReferenceError('(0 || 1 === x)?.$'); +shouldThrowReferenceError('(0 || 1 <= x)?.$'); +shouldThrowReferenceError('(0 || 1 >= x)?.$'); +shouldThrowReferenceError('(0 || 1 ** x)?.$'); +shouldThrowReferenceError('(0 || 1 | x)?.$'); +shouldThrowReferenceError('(0 || 1 & x)?.$'); +shouldThrowReferenceError('(0 || 1 instanceof x)?.$'); +shouldThrowReferenceError('(0 || "foo" in x)?.$'); + +function testSideEffectCountFunction() { + let count = 0; + let a = { + b: { + c: { + d: () => { + count++; + return a; + } + } + } + } + + a.b.c.d?.()?.b?.c?.d + + shouldBe(count, 1); +} + +function testSideEffectCountGetters() { + let count = 0; + let a = { + get b() { + count++; + return { c: {} }; + } + } + + a.b?.c?.d; + shouldBe(count, 1); + a.b?.c?.d; + shouldBe(count, 2); +} + +testSideEffectCountFunction(); +testSideEffectCountGetters(); + +// stress test SM +shouldBe(({a : {b: undefined}}).a.b?.()()(), undefined); +shouldBe(({a : {b: undefined}}).a.b?.()?.()(), undefined); +shouldBe(({a : {b: () => undefined}}).a.b?.()?.(), undefined); +shouldThrowTypeError(() => delete ({a : {b: undefined}}).a?.b.b.c, '(intermediate value).a.b is undefined'); +shouldBe(delete ({a : {b: undefined}}).a?.["b"]?.["b"], true); +shouldBe(delete undefined ?.x[y+1], true); +shouldThrowTypeError(() => (({a : {b: () => undefined}}).a.b?.())(), 'undefined is not a function'); +shouldThrowTypeError(() => (delete[1]?.r[delete[1]?.r1]), "[...].r is undefined"); +shouldThrowTypeError(() => (delete[1]?.r[[1]?.r1]), "[...].r is undefined"); + +print("Tests complete"); diff --git a/test/staging/sm/expressions/primitive-this-boxing-behavior.js b/test/staging/sm/expressions/primitive-this-boxing-behavior.js new file mode 100644 index 0000000000..6f661573a2 --- /dev/null +++ b/test/staging/sm/expressions/primitive-this-boxing-behavior.js @@ -0,0 +1,113 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 732669; +var summary = "Primitive values don't box correctly"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var t; +function returnThis() { return this; } + +// Boolean + +Boolean.prototype.method = returnThis; +t = true.method(); +assert.sameValue(t !== Boolean.prototype, true); +assert.sameValue(t.toString(), "true"); + +Object.defineProperty(Boolean.prototype, "property", { get: returnThis, configurable: true }); +t = false.property; +assert.sameValue(t !== Boolean.prototype, true); +assert.sameValue(t.toString(), "false"); + +delete Boolean.prototype.method; +delete Boolean.prototype.property; + + +// Number + +Number.prototype.method = returnThis; +t = 5..method(); +assert.sameValue(t !== Number.prototype, true); +assert.sameValue(t.toString(), "5"); + +Object.defineProperty(Number.prototype, "property", { get: returnThis, configurable: true }); +t = 17..property; +assert.sameValue(t !== Number.prototype, true); +assert.sameValue(t.toString(), "17"); + +delete Number.prototype.method; +delete Number.prototype.property; + + +// String + +String.prototype.method = returnThis; +t = "foo".method(); +assert.sameValue(t !== String.prototype, true); +assert.sameValue(t.toString(), "foo"); + +Object.defineProperty(String.prototype, "property", { get: returnThis, configurable: true }); +t = "bar".property; +assert.sameValue(t !== String.prototype, true); +assert.sameValue(t.toString(), "bar"); + +delete String.prototype.method; +delete String.prototype.property; + + +// Object + +Object.prototype.method = returnThis; + +t = true.method(); +assert.sameValue(t !== Object.prototype, true); +assert.sameValue(t !== Boolean.prototype, true); +assert.sameValue(t.toString(), "true"); + +t = 42..method(); +assert.sameValue(t !== Object.prototype, true); +assert.sameValue(t !== Number.prototype, true); +assert.sameValue(t.toString(), "42"); + +t = "foo".method(); +assert.sameValue(t !== Object.prototype, true); +assert.sameValue(t !== String.prototype, true); +assert.sameValue(t.toString(), "foo"); + +Object.defineProperty(Object.prototype, "property", { get: returnThis, configurable: true }); + +t = false.property; +assert.sameValue(t !== Object.prototype, true); +assert.sameValue(t !== Boolean.prototype, true); +assert.sameValue(t.toString(), "false"); + +t = 8675309..property; +assert.sameValue(t !== Object.prototype, true); +assert.sameValue(t !== Number.prototype, true); +assert.sameValue(t.toString(), "8675309"); + +t = "bar".property; +assert.sameValue(t !== Object.prototype, true); +assert.sameValue(t !== String.prototype, true); +assert.sameValue(t.toString(), "bar"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/expressions/short-circuit-compound-assignment-anon-fns.js b/test/staging/sm/expressions/short-circuit-compound-assignment-anon-fns.js new file mode 100644 index 0000000000..d42c3f841f --- /dev/null +++ b/test/staging/sm/expressions/short-circuit-compound-assignment-anon-fns.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// NamedEvaluation applies to short-circuit assignment. + +{ + let a; + a ??= function(){}; + assert.sameValue(a.name, "a"); +} + +{ + let a = false; + a ||= function(){}; + assert.sameValue(a.name, "a"); +} + +{ + let a = true; + a &&= function(){}; + assert.sameValue(a.name, "a"); +} + +// No name assignments for parenthesised left-hand sides. + +{ + let a; + (a) ??= function(){}; + assert.sameValue(a.name, ""); +} + +{ + let a = false; + (a) ||= function(){}; + assert.sameValue(a.name, ""); +} + +{ + let a = true; + (a) &&= function(){}; + assert.sameValue(a.name, ""); +} + diff --git a/test/staging/sm/expressions/short-circuit-compound-assignment-const.js b/test/staging/sm/expressions/short-circuit-compound-assignment-const.js new file mode 100644 index 0000000000..24189883cf --- /dev/null +++ b/test/staging/sm/expressions/short-circuit-compound-assignment-const.js @@ -0,0 +1,99 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test assignment to const and function name bindings. The latter is kind of a +// const binding, but only throws in strict mode. + +function notEvaluated() { + throw new Error("should not be evaluated"); +} + +// AndAssignExpr with const lexical binding. +{ + const a = false; + a &&= notEvaluated(); + assert.sameValue(a, false); + + const b = true; + assertThrowsInstanceOf(() => { b &&= 1; }, TypeError); + assert.sameValue(b, true); +} + +// AndAssignExpr with function name binding. +{ + let f = function fn() { + fn &&= true; + assert.sameValue(fn, f); + }; + f(); + + let g = function fn() { + "use strict"; + assertThrowsInstanceOf(() => { fn &&= 1; }, TypeError); + assert.sameValue(fn, g); + }; + g(); +} + +// OrAssignExpr with const lexical binding. +{ + const a = true; + a ||= notEvaluated(); + assert.sameValue(a, true); + + const b = false; + assertThrowsInstanceOf(() => { b ||= 0; }, TypeError); + assert.sameValue(b, false); +} + +// OrAssignExpr with function name binding. +{ + let f = function fn() { + fn ||= notEvaluated(); + assert.sameValue(fn, f); + }; + f(); + + let g = function fn() { + "use strict"; + fn ||= notEvaluated(); + assert.sameValue(fn, g); + }; + g(); +} + +// CoalesceAssignExpr with const lexical binding. +{ + const a = true; + a ??= notEvaluated(); + assert.sameValue(a, true); + + const b = null; + assertThrowsInstanceOf(() => { b ??= 0; }, TypeError); + assert.sameValue(b, null); +} + +// CoalesceAssignExpr with function name binding. +{ + let f = function fn() { + fn ??= notEvaluated(); + assert.sameValue(fn, f); + }; + f(); + + let g = function fn() { + "use strict"; + fn ??= notEvaluated(); + assert.sameValue(fn, g); + }; + g(); +} + diff --git a/test/staging/sm/expressions/short-circuit-compound-assignment-property-key-evaluation.js b/test/staging/sm/expressions/short-circuit-compound-assignment-property-key-evaluation.js new file mode 100644 index 0000000000..fa8ba16fe7 --- /dev/null +++ b/test/staging/sm/expressions/short-circuit-compound-assignment-property-key-evaluation.js @@ -0,0 +1,77 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that property keys are only evaluated once. + +class PropertyKey { + constructor(key) { + this.key = key; + this.count = 0; + } + + toString() { + this.count++; + return this.key; + } + + valueOf() { + throw new Error("unexpected valueOf call"); + } +} + +// AndAssignExpr +{ + let obj = {p: true}; + let pk = new PropertyKey("p"); + + obj[pk] &&= false; + + assert.sameValue(obj.p, false); + assert.sameValue(pk.count, 1); + + obj[pk] &&= true; + + assert.sameValue(obj.p, false); + assert.sameValue(pk.count, 2); +} + +// OrAssignExpr +{ + let obj = {p: false}; + let pk = new PropertyKey("p"); + + obj[pk] ||= true; + + assert.sameValue(obj.p, true); + assert.sameValue(pk.count, 1); + + obj[pk] ||= false; + + assert.sameValue(obj.p, true); + assert.sameValue(pk.count, 2); +} + +// CoalesceAssignExpr +{ + let obj = {p: null}; + let pk = new PropertyKey("p"); + + obj[pk] ??= true; + + assert.sameValue(obj.p, true); + assert.sameValue(pk.count, 1); + + obj[pk] ??= false; + + assert.sameValue(obj.p, true); + assert.sameValue(pk.count, 2); +} + diff --git a/test/staging/sm/expressions/short-circuit-compound-assignment-tdz.js b/test/staging/sm/expressions/short-circuit-compound-assignment-tdz.js new file mode 100644 index 0000000000..fb58200158 --- /dev/null +++ b/test/staging/sm/expressions/short-circuit-compound-assignment-tdz.js @@ -0,0 +1,65 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test TDZ for short-circuit compound assignments. + +// TDZ for lexical |let| bindings. +{ + assertThrowsInstanceOf(() => { let a = (a &&= 0); }, ReferenceError); + assertThrowsInstanceOf(() => { let a = (a ||= 0); }, ReferenceError); + assertThrowsInstanceOf(() => { let a = (a ??= 0); }, ReferenceError); +} + +// TDZ for lexical |const| bindings. +{ + assertThrowsInstanceOf(() => { const a = (a &&= 0); }, ReferenceError); + assertThrowsInstanceOf(() => { const a = (a ||= 0); }, ReferenceError); + assertThrowsInstanceOf(() => { const a = (a ??= 0); }, ReferenceError); +} + +// TDZ for parameter expressions. +{ + assertThrowsInstanceOf((a = (b &&= 0), b) => {}, ReferenceError); + assertThrowsInstanceOf((a = (b ||= 0), b) => {}, ReferenceError); + assertThrowsInstanceOf((a = (b ??= 0), b) => {}, ReferenceError); +} + +// TDZ for |class| bindings. +{ + assertThrowsInstanceOf(() => { class a extends (a &&= 0) {} }, ReferenceError); + assertThrowsInstanceOf(() => { class a extends (a ||= 0) {} }, ReferenceError); + assertThrowsInstanceOf(() => { class a extends (a ??= 0) {} }, ReferenceError); +} + +// TDZ for lexical |let| bindings with conditional assignment. +{ + assertThrowsInstanceOf(() => { + const False = false; + False &&= b; + b = 2; + let b; + }, ReferenceError); + + assertThrowsInstanceOf(() => { + const True = true; + True ||= b; + b = 2; + let b; + }, ReferenceError); + + assertThrowsInstanceOf(() => { + const NonNull = {}; + NonNull ??= b; + b = 2; + let b; + }, ReferenceError); +} + diff --git a/test/staging/sm/expressions/short-circuit-compound-assignment.js b/test/staging/sm/expressions/short-circuit-compound-assignment.js new file mode 100644 index 0000000000..413fdea049 --- /dev/null +++ b/test/staging/sm/expressions/short-circuit-compound-assignment.js @@ -0,0 +1,274 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +const testCasesAnd = []; +const testCasesOr = []; +const testCasesCoalesce = []; + + +// Assignment to a global variable (JSOp::SetGName). +var globalVar; + +function testAnd_GlobalVar(init, value) { + globalVar = init; + return [(globalVar &&= value), globalVar]; +} +testCasesAnd.push(testAnd_GlobalVar); + +function testOr_GlobalVar(init, value) { + globalVar = init; + return [(globalVar ||= value), globalVar]; +} +testCasesOr.push(testOr_GlobalVar); + +function testCoalesce_GlobalVar(init, value) { + globalVar = init; + return [(globalVar ??= value), globalVar]; +} +testCasesCoalesce.push(testCoalesce_GlobalVar); + + +// Assignment to a local variable (JSOp::SetLocal). +function testAnd_LocalVar(init, value) { + let v = init; + return [(v &&= value), v]; +} +testCasesAnd.push(testAnd_LocalVar); + +function testOr_LocalVar(init, value) { + let v = init; + return [(v ||= value), v]; +} +testCasesOr.push(testOr_LocalVar); + +function testCoalesce_LocalVar(init, value) { + let v = init; + return [(v ??= value), v]; +} +testCasesCoalesce.push(testCoalesce_LocalVar); + + +// Assignment to a parameter (JSOp::SetArg). +function testAnd_Arg(init, value) { + function f(v) { + return [(v &&= value), v]; + } + return f(init); +} +testCasesAnd.push(testAnd_Arg); + +function testOr_Arg(init, value) { + function f(v) { + return [(v ||= value), v]; + } + return f(init); +} +testCasesOr.push(testOr_Arg); + +function testCoalesce_Arg(init, value) { + function f(v) { + return [(v ??= value), v]; + } + return f(init); +} +testCasesCoalesce.push(testCoalesce_Arg); + + +// Assignment to a closed over variable (JSOp::SetAliasedVar). +function testAnd_ClosedOver(init, value) { + let v = init; + function f() { + return (v &&= value); + } + return [f(), v]; +} +testCasesAnd.push(testAnd_ClosedOver); + +function testOr_ClosedOver(init, value) { + let v = init; + function f() { + return (v ||= value); + } + return [f(), v]; +} +testCasesOr.push(testOr_ClosedOver); + +function testCoalesce_ClosedOver(init, value) { + let v = init; + function f() { + return (v ??= value); + } + return [f(), v]; +} +testCasesCoalesce.push(testCoalesce_ClosedOver); + + +// Assignment to a dynamic name (JSOp::SetName). +function testAnd_DynamicName(init, value) { + eval("var v = init;"); + return [(v &&= value), v]; +} +testCasesAnd.push(testAnd_DynamicName); + +function testOr_DynamicName(init, value) { + eval("var v = init;"); + return [(v ||= value), v]; +} +testCasesOr.push(testOr_DynamicName); + +function testCoalesce_DynamicName(init, value) { + eval("var v = init;"); + return [(v ??= value), v]; +} +testCasesCoalesce.push(testCoalesce_DynamicName); + + +// Assignment to a property. +function testAnd_Property(init, value) { + let obj = {p: init}; + return [(obj.p &&= value), obj.p]; +} +testCasesAnd.push(testAnd_Property); + +function testOr_Property(init, value) { + let obj = {p: init}; + return [(obj.p ||= value), obj.p]; +} +testCasesOr.push(testOr_Property); + +function testCoalesce_Property(init, value) { + let obj = {p: init}; + return [(obj.p ??= value), obj.p]; +} +testCasesCoalesce.push(testCoalesce_Property); + + +// Assignment to a super property. +function testAnd_SuperProperty(init, value) { + let proto = {p: init}; + let obj = {__proto__: proto, m() { return (super.p &&= value); }}; + return [obj.m(), obj.p]; +} +testCasesAnd.push(testAnd_SuperProperty); + +function testOr_SuperProperty(init, value) { + let proto = {p: init}; + let obj = {__proto__: proto, m() { return (super.p ||= value); }}; + return [obj.m(), obj.p]; +} +testCasesOr.push(testOr_SuperProperty); + +function testCoalesce_SuperProperty(init, value) { + let proto = {p: init}; + let obj = {__proto__: proto, m() { return (super.p ??= value); }}; + return [obj.m(), obj.p]; +} +testCasesCoalesce.push(testCoalesce_SuperProperty); + + +// Assignment to an element. +function testAnd_Element(init, value) { + let p = 123; + let obj = {[p]: init}; + return [(obj[p] &&= value), obj[p]]; +} +testCasesAnd.push(testAnd_Element); + +function testOr_Element(init, value) { + let p = 123; + let obj = {[p]: init}; + return [(obj[p] ||= value), obj[p]]; +} +testCasesOr.push(testOr_Element); + +function testCoalesce_Element(init, value) { + let p = 123; + let obj = {[p]: init}; + return [(obj[p] ??= value), obj[p]]; +} +testCasesCoalesce.push(testCoalesce_Element); + + +// Assignment to a super element. +function testAnd_SuperElement(init, value) { + let p = 123; + let proto = {[p]: init}; + let obj = {__proto__: proto, m() { return (super[p] &&= value); }}; + return [obj.m(), obj[p]]; +} +testCasesAnd.push(testAnd_SuperElement); + +function testOr_SuperElement(init, value) { + let p = 123; + let proto = {[p]: init}; + let obj = {__proto__: proto, m() { return (super[p] ||= value); }}; + return [obj.m(), obj[p]]; +} +testCasesOr.push(testOr_SuperElement); + +function testCoalesce_SuperElement(init, value) { + let p = 123; + let proto = {[p]: init}; + let obj = {__proto__: proto, m() { return (super[p] ??= value); }}; + return [obj.m(), obj[p]]; +} +testCasesCoalesce.push(testCoalesce_SuperElement); + + +// Run the actual tests. + +function runTest(testCases, init, value, expected) { + for (let f of testCases) { + let [result, newValue] = f(init, value); + + assert.sameValue(result, expected); + assert.sameValue(newValue, expected); + } +} + +function testAnd(init, value) { + const expected = init ? value : init; + runTest(testCasesAnd, init, value, expected); +} + +function testOr(init, value) { + const expected = !init ? value : init; + runTest(testCasesOr, init, value, expected); +} + +function testCoalesce(init, value) { + const expected = init === undefined || init === null ? value : init; + runTest(testCasesCoalesce, init, value, expected); +} + + +// Repeat a number of times to ensure JITs can kick in, too. +for (let i = 0; i < 50; ++i) { + for (let thruthy of [true, 123, 123n, "hi", [], Symbol()]) { + testAnd(thruthy, "pass"); + testOr(thruthy, "fail"); + testCoalesce(thruthy, "fail"); + } + + for (let falsy of [false, 0, NaN, 0n, ""]) { + testAnd(falsy, "fail"); + testOr(falsy, "pass"); + testCoalesce(falsy, "fail"); + } + + for (let nullOrUndefined of [null, undefined]) { + testAnd(nullOrUndefined, "fail"); + testOr(nullOrUndefined, "pass"); + testCoalesce(nullOrUndefined, "pass"); + } +} + + diff --git a/test/staging/sm/expressions/string-literal-escape-sequences.js b/test/staging/sm/expressions/string-literal-escape-sequences.js new file mode 100644 index 0000000000..733495be53 --- /dev/null +++ b/test/staging/sm/expressions/string-literal-escape-sequences.js @@ -0,0 +1,153 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 663300; +var summary = + "\\u and \\x must be followed by the appropriate number of hex digits or " + + "else it is a syntax error"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectSyntaxError(str) +{ + try + { + eval(str); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "no syntax error evaluating " + str); + } +} + +expectSyntaxError('"\\x"'); +expectSyntaxError('"\\x0"'); +expectSyntaxError('"\\x1"'); +expectSyntaxError('"\\x2"'); +expectSyntaxError('"\\x3"'); +expectSyntaxError('"\\x4"'); +expectSyntaxError('"\\x5"'); +expectSyntaxError('"\\x6"'); +expectSyntaxError('"\\x7"'); +expectSyntaxError('"\\x8"'); +expectSyntaxError('"\\x9"'); +expectSyntaxError('"\\xA"'); +expectSyntaxError('"\\xB"'); +expectSyntaxError('"\\xC"'); +expectSyntaxError('"\\xD"'); +expectSyntaxError('"\\xE"'); +expectSyntaxError('"\\xF"'); +expectSyntaxError('"\\xG"'); +expectSyntaxError('"\\x0G"'); +expectSyntaxError('"\\x1G"'); +expectSyntaxError('"\\x2G"'); +expectSyntaxError('"\\x3G"'); +expectSyntaxError('"\\x4G"'); +expectSyntaxError('"\\x5G"'); +expectSyntaxError('"\\x6G"'); +expectSyntaxError('"\\x7G"'); +expectSyntaxError('"\\x8G"'); +expectSyntaxError('"\\x9G"'); +expectSyntaxError('"\\xAG"'); +expectSyntaxError('"\\xBG"'); +expectSyntaxError('"\\xCG"'); +expectSyntaxError('"\\xDG"'); +expectSyntaxError('"\\xEG"'); +expectSyntaxError('"\\xFG"'); +expectSyntaxError('"\\xGG"'); + +expectSyntaxError('"\\u"'); +expectSyntaxError('"\\u0"'); +expectSyntaxError('"\\u1"'); +expectSyntaxError('"\\u2"'); +expectSyntaxError('"\\u3"'); +expectSyntaxError('"\\u4"'); +expectSyntaxError('"\\u5"'); +expectSyntaxError('"\\u6"'); +expectSyntaxError('"\\u7"'); +expectSyntaxError('"\\u8"'); +expectSyntaxError('"\\u9"'); +expectSyntaxError('"\\uA"'); +expectSyntaxError('"\\uB"'); +expectSyntaxError('"\\uC"'); +expectSyntaxError('"\\uD"'); +expectSyntaxError('"\\uE"'); +expectSyntaxError('"\\uF"'); +expectSyntaxError('"\\uG"'); +expectSyntaxError('"\\u00"'); +expectSyntaxError('"\\u11"'); +expectSyntaxError('"\\u22"'); +expectSyntaxError('"\\u33"'); +expectSyntaxError('"\\u44"'); +expectSyntaxError('"\\u55"'); +expectSyntaxError('"\\u66"'); +expectSyntaxError('"\\u77"'); +expectSyntaxError('"\\u88"'); +expectSyntaxError('"\\u99"'); +expectSyntaxError('"\\uAA"'); +expectSyntaxError('"\\uBB"'); +expectSyntaxError('"\\uCC"'); +expectSyntaxError('"\\uDD"'); +expectSyntaxError('"\\uEE"'); +expectSyntaxError('"\\uFF"'); +expectSyntaxError('"\\uGG"'); +expectSyntaxError('"\\u000"'); +expectSyntaxError('"\\u111"'); +expectSyntaxError('"\\u222"'); +expectSyntaxError('"\\u333"'); +expectSyntaxError('"\\u444"'); +expectSyntaxError('"\\u555"'); +expectSyntaxError('"\\u666"'); +expectSyntaxError('"\\u777"'); +expectSyntaxError('"\\u888"'); +expectSyntaxError('"\\u999"'); +expectSyntaxError('"\\uAAA"'); +expectSyntaxError('"\\uBBB"'); +expectSyntaxError('"\\uCCC"'); +expectSyntaxError('"\\uDDD"'); +expectSyntaxError('"\\uEEE"'); +expectSyntaxError('"\\uFFF"'); +expectSyntaxError('"\\uGGG"'); +expectSyntaxError('"\\u000G"'); +expectSyntaxError('"\\u111G"'); +expectSyntaxError('"\\u222G"'); +expectSyntaxError('"\\u333G"'); +expectSyntaxError('"\\u444G"'); +expectSyntaxError('"\\u555G"'); +expectSyntaxError('"\\u666G"'); +expectSyntaxError('"\\u777G"'); +expectSyntaxError('"\\u888G"'); +expectSyntaxError('"\\u999G"'); +expectSyntaxError('"\\uAAAG"'); +expectSyntaxError('"\\uBBBG"'); +expectSyntaxError('"\\uCCCG"'); +expectSyntaxError('"\\uDDDG"'); +expectSyntaxError('"\\uEEEG"'); +expectSyntaxError('"\\uFFFG"'); +expectSyntaxError('"\\uGGGG"'); + +assert.sameValue(eval('"a\\\rb"'), "ab"); +assert.sameValue(eval('"a\\\nb"'), "ab"); +assert.sameValue(eval('"a\\\r\nb"'), "ab"); +assert.sameValue(eval('"a\\\u2028b"'), "ab"); +assert.sameValue(eval('"a\\\u2029b"'), "ab"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/expressions/tagged-template-constant-folding.js b/test/staging/sm/expressions/tagged-template-constant-folding.js new file mode 100644 index 0000000000..d3dab1ec3f --- /dev/null +++ b/test/staging/sm/expressions/tagged-template-constant-folding.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-expressions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1182373; +var summary = + "Don't let constant-folding in the MemberExpression part of a tagged " + + "template cause an incorrect |this| be passed to the callee"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var prop = "global"; + +var obj = { prop: "obj", f: function() { return this.prop; } }; + +assert.sameValue(obj.f``, "obj"); +assert.sameValue((true ? obj.f : null)``, "global"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/8.12.5-01.js b/test/staging/sm/extensions/8.12.5-01.js new file mode 100644 index 0000000000..fe6e219377 --- /dev/null +++ b/test/staging/sm/extensions/8.12.5-01.js @@ -0,0 +1,74 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 523846; +var summary = + "Assignments to a property that has a getter but not a setter should not " + + "throw a TypeError per ES5 (at least not until strict mode is supported)"; +var actual = "Early failure"; +var expect = "No errors"; + + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var o = { get p() { return "a"; } }; + +function test1() +{ + o.p = "b"; // strict-mode violation here + assert.sameValue(o.p, "a"); +} + +function test2() +{ + function T() {} + T.prototype = o; + y = new T(); + y.p = "b"; // strict-mode violation here + assert.sameValue(y.p, "a"); +} + + +var errors = []; +try +{ + try + { + test1(); + } + catch (e) + { + errors.push(e); + } + + try + { + test2(); + } + catch (e) + { + errors.push(e); + } +} +catch (e) +{ + errors.push("Unexpected error: " + e); +} +finally +{ + actual = errors.length > 0 ? errors.join(", ") : "No errors"; +} + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/extensions/ArrayBuffer-slice-arguments-detaching.js b/test/staging/sm/extensions/ArrayBuffer-slice-arguments-detaching.js new file mode 100644 index 0000000000..698303c08d --- /dev/null +++ b/test/staging/sm/extensions/ArrayBuffer-slice-arguments-detaching.js @@ -0,0 +1,85 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "ArrayBuffer-slice-arguments-detaching.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "ArrayBuffer.prototype.slice shouldn't misbehave horribly if " + + "index-argument conversion detaches the ArrayBuffer being sliced"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testStart() +{ + var ab = new ArrayBuffer(0x1000); + + var start = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + gc(); + return 0x800; + } + }; + + var ok = false; + try + { + ab.slice(start); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "start weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for start weirdness"); +} +testStart(); + +function testEnd() +{ + var ab = new ArrayBuffer(0x1000); + + var end = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + gc(); + return 0x1000; + } + }; + + var ok = false; + try + { + ab.slice(0x800, end); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "byteLength weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for byteLength weirdness"); +} +testEnd(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/DataView-construct-arguments-detaching.js b/test/staging/sm/extensions/DataView-construct-arguments-detaching.js new file mode 100644 index 0000000000..a5f9d93a64 --- /dev/null +++ b/test/staging/sm/extensions/DataView-construct-arguments-detaching.js @@ -0,0 +1,85 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "DataView-construct-arguments-detaching.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "new DataView(...) shouldn't misbehave horribly if index-argument " + + "conversion detaches the ArrayBuffer to be viewed"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testByteOffset() +{ + var ab = new ArrayBuffer(0x1000); + + var start = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + gc(); + return 0x800; + } + }; + + var ok = false; + try + { + new DataView(ab, start); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "byteOffset weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for byteOffset weirdness"); +} +testByteOffset(); + +function testByteLength() +{ + var ab = new ArrayBuffer(0x1000); + + var len = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + gc(); + return 0x800; + } + }; + + var ok = false; + try + { + new DataView(ab, 0x800, len); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "byteLength weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for byteLength weirdness"); +} +testByteLength(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/DataView-set-arguments-detaching.js b/test/staging/sm/extensions/DataView-set-arguments-detaching.js new file mode 100644 index 0000000000..f44775b359 --- /dev/null +++ b/test/staging/sm/extensions/DataView-set-arguments-detaching.js @@ -0,0 +1,89 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "DataView-set-arguments-detaching.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "DataView.prototype.set* methods shouldn't misbehave horribly if " + + "index-argument conversion detaches the ArrayBuffer being modified"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testIndex() +{ + var ab = new ArrayBuffer(0x1000); + + var dv = new DataView(ab); + + var start = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + gc(); + return 0xFFF; + } + }; + + var ok = false; + try + { + dv.setUint8(start, 0x42); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "should have thrown"); + assert.sameValue(ab.byteLength, 0, "should have been detached correctly"); +} +testIndex(); + +function testValue() +{ + var ab = new ArrayBuffer(0x100000); + + var dv = new DataView(ab); + + var value = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + gc(); + return 0x42; + } + }; + + var ok = false; + try + { + dv.setUint8(0xFFFFF, value); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "should have thrown"); + assert.sameValue(ab.byteLength, 0, "should have been detached correctly"); +} +testValue(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/RegExp-error-message-skip-selfhosted-frames.js b/test/staging/sm/extensions/RegExp-error-message-skip-selfhosted-frames.js new file mode 100644 index 0000000000..64278cfdfc --- /dev/null +++ b/test/staging/sm/extensions/RegExp-error-message-skip-selfhosted-frames.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (let name of ["test", Symbol.match, Symbol.replace, Symbol.search]) { + let methodName = typeof name === "symbol" ? `[${name.description}]` : name; + assertThrowsInstanceOfWithMessage( + () => RegExp.prototype[name].call({}), + TypeError, + `${methodName} method called on incompatible Object`); +} + diff --git a/test/staging/sm/extensions/String-match-flags.js b/test/staging/sm/extensions/String-match-flags.js new file mode 100644 index 0000000000..fd300bd702 --- /dev/null +++ b/test/staging/sm/extensions/String-match-flags.js @@ -0,0 +1,36 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1263139; +var summary = "String.prototype.match with non-string non-standard flags argument."; + +print(BUGNUMBER + ": " + summary); + +var called; +var flags = { + toString() { + called = true; + return ""; + } +}; + +called = false; +"a".match("a", flags); +assert.sameValue(called, false); + +called = false; +"a".search("a", flags); +assert.sameValue(called, false); + +called = false; +"a".replace("a", "b", flags); +assert.sameValue(called, false); + diff --git a/test/staging/sm/extensions/TypedArray-set-object-funky-length-detaches.js b/test/staging/sm/extensions/TypedArray-set-object-funky-length-detaches.js new file mode 100644 index 0000000000..5e81a4d8dc --- /dev/null +++ b/test/staging/sm/extensions/TypedArray-set-object-funky-length-detaches.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "set-object-funky-length-detaches.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "%TypedArray%.prototype.set(object w/funky length property, offset) " + + "shouldn't misbehave if the funky length property detaches this typed " + + "array's buffer"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var ctors = [Int8Array, Uint8Array, Uint8ClampedArray, + Int16Array, Uint16Array, + Int32Array, Uint32Array, + Float32Array, Float64Array]; +ctors.forEach(function(TypedArray) { + var buf = new ArrayBuffer(512 * 1024); + var ta = new TypedArray(buf); + + var arraylike = + { + 0: 17, + 1: 42, + 2: 3, + 3: 99, + 4: 37, + 5: 9, + 6: 72, + 7: 31, + 8: 22, + 9: 0, + get length() + { + $262.detachArrayBuffer(buf); + return 10; + } + }; + + ta.set(arraylike, 0x1234); +}); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/TypedArray-subarray-arguments-detaching.js b/test/staging/sm/extensions/TypedArray-subarray-arguments-detaching.js new file mode 100644 index 0000000000..e91070d473 --- /dev/null +++ b/test/staging/sm/extensions/TypedArray-subarray-arguments-detaching.js @@ -0,0 +1,116 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "TypedArray-subarray-arguments-detaching.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "%TypedArray.prototype.subarray shouldn't misbehave horribly if " + + "index-argument conversion detaches the underlying ArrayBuffer"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testBegin() +{ + var ab = new ArrayBuffer(0x1000); + + var begin = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + return 0x800; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.subarray(begin); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "start weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for start weirdness"); +} +testBegin(); + +function testBeginWithEnd() +{ + var ab = new ArrayBuffer(0x1000); + + var begin = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + return 0x800; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.subarray(begin, 0x1000); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "start weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for start weirdness"); +} +testBeginWithEnd(); + +function testEnd() +{ + var ab = new ArrayBuffer(0x1000); + + var end = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + return 0x1000; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.subarray(0x800, end); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "start weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for start weirdness"); +} +testEnd(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/__proto__.js b/test/staging/sm/extensions/__proto__.js new file mode 100644 index 0000000000..c9f7f9177f --- /dev/null +++ b/test/staging/sm/extensions/__proto__.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = '__proto__.js'; +var BUGNUMBER = 770344; +var summary = "__proto__ as accessor"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var protoDesc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); +assert.sameValue(protoDesc !== null, true); +assert.sameValue(typeof protoDesc, "object"); +assert.sameValue(protoDesc.hasOwnProperty("get"), true); +assert.sameValue(protoDesc.hasOwnProperty("set"), true); +assert.sameValue(protoDesc.hasOwnProperty("enumerable"), true); +assert.sameValue(protoDesc.hasOwnProperty("configurable"), true); +assert.sameValue(protoDesc.hasOwnProperty("value"), false); +assert.sameValue(protoDesc.hasOwnProperty("writable"), false); + +assert.sameValue(protoDesc.configurable, true); +assert.sameValue(protoDesc.enumerable, false); +assert.sameValue(typeof protoDesc.get, "function", protoDesc.get + ""); +assert.sameValue(typeof protoDesc.set, "function", protoDesc.set + ""); + +assert.sameValue(delete Object.prototype.__proto__, true); +assert.sameValue(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"), + undefined); + +var obj = {}; +obj.__proto__ = 5; +assert.sameValue(Object.getPrototypeOf(obj), Object.prototype); +assert.sameValue(obj.hasOwnProperty("__proto__"), true); + +var desc = Object.getOwnPropertyDescriptor(obj, "__proto__"); +assert.sameValue(desc !== null, true); +assert.sameValue(typeof desc, "object"); +assert.sameValue(desc.value, 5); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, true); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/arguments-property-access-in-function.js b/test/staging/sm/extensions/arguments-property-access-in-function.js new file mode 100644 index 0000000000..1ae6d2d9b9 --- /dev/null +++ b/test/staging/sm/extensions/arguments-property-access-in-function.js @@ -0,0 +1,61 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 721322; +var summary = + 'f.arguments must trigger an arguments object in non-strict mode functions'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + test: function() + { + var args = obj.test.arguments; + assert.sameValue(args !== null, true); + assert.sameValue(args[0], 5); + assert.sameValue(args[1], undefined); + assert.sameValue(args.length, 2); + } + }; +obj.test(5, undefined); + +var sobj = + { + test: function() + { + "use strict"; + + try + { + var args = sobj.test.arguments; + throw new Error("access to arguments property of strict mode " + + "function didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "should have thrown TypeError, instead got: " + e); + } + } + }; +sobj.test(5, undefined); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/array-inherited-__proto__.js b/test/staging/sm/extensions/array-inherited-__proto__.js new file mode 100644 index 0000000000..166786fcf4 --- /dev/null +++ b/test/staging/sm/extensions/array-inherited-__proto__.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'array-inherited-__proto__.js'; +var BUGNUMBER = 769041; +var summary = + "The [[Prototype]] of an object whose prototype chain contains an array " + + "isn't that array's [[Prototype]]"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +assert.sameValue(Array.isArray(arr), true); +var objWithArrPrototype = Object.create(arr); +assert.sameValue(!Array.isArray(objWithArrPrototype), true); +assert.sameValue(objWithArrPrototype.__proto__, arr); +var objWithArrGrandPrototype = Object.create(objWithArrPrototype); +assert.sameValue(!Array.isArray(objWithArrGrandPrototype), true); +assert.sameValue(objWithArrGrandPrototype.__proto__, objWithArrPrototype); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/array-length-protochange.js b/test/staging/sm/extensions/array-length-protochange.js new file mode 100644 index 0000000000..e4965fa67b --- /dev/null +++ b/test/staging/sm/extensions/array-length-protochange.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 548671; +var summary = + "Don't use a shared-permanent inherited property to implement " + + "[].length or (function(){}).length"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var a = [1, 2, 3]; +a.__proto__ = null; +assert.sameValue("length" in a, true, "length should be own property of array"); +assert.sameValue(Object.hasOwnProperty.call(a, "length"), true, + "length should be own property of array"); +assert.sameValue(a.length, 3, "array length should be 3"); + +var a = [], b = []; +b.__proto__ = a; +assert.sameValue(b.hasOwnProperty("length"), true, + "length should be own property of array"); +b.length = 42; +assert.sameValue(b.length, 42, "should have mutated b's (own) length"); +assert.sameValue(a.length, 0, "should not have mutated a's (own) length"); + + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/array-pop-proxy.js b/test/staging/sm/extensions/array-pop-proxy.js new file mode 100644 index 0000000000..87959ed531 --- /dev/null +++ b/test/staging/sm/extensions/array-pop-proxy.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'array-pop-proxy.js'; +var BUGNUMBER = 858381; +var summary = "Behavior of [].pop on proxies"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var p = new Proxy([0, 1, 2], {}); +Array.prototype.pop.call(p); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/arraybuffer-prototype.js b/test/staging/sm/extensions/arraybuffer-prototype.js new file mode 100644 index 0000000000..6e8c28a13a --- /dev/null +++ b/test/staging/sm/extensions/arraybuffer-prototype.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 665961; +var summary = + "ArrayBuffer cannot access properties defined on the prototype chain."; +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +ArrayBuffer.prototype.prop = "on prototype"; +var b = new ArrayBuffer([]); +assert.sameValue(b.prop, "on prototype"); + +var c = new ArrayBuffer([]); +assert.sameValue(c.prop, "on prototype"); +c.prop = "direct"; +assert.sameValue(c.prop, "direct"); + +assert.sameValue(ArrayBuffer.prototype.prop, "on prototype"); +assert.sameValue(new ArrayBuffer([]).prop, "on prototype"); + +assert.sameValue(c.nonexistent, undefined); + diff --git a/test/staging/sm/extensions/bug472534.js b/test/staging/sm/extensions/bug472534.js new file mode 100644 index 0000000000..3821e18ea3 --- /dev/null +++ b/test/staging/sm/extensions/bug472534.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function monthNames () { + return [ + /jan(uar(y)?)?/, 0, + /feb(ruar(y)?)?/, 1, + /m\u00e4r|mar|m\u00e4rz|maerz|march/, 2, + /apr(il)?/, 3, + /ma(i|y)/, 4, + /jun(i|o|e)?/, 5, + /jul(i|y)?/, 6, + /aug(ust)?/, 7, + /sep((t)?(ember))?/, 8, + /o(c|k)t(ober)?/, 9, + /nov(ember)?/, 10, + /de(c|z)(ember)?/, 11 + ]; +}; + +var actual = ''; +var expected = '(jan(uar(y)?)?)|(feb(ruar(y)?)?)|(m\\u00e4r|mar|m\\u00e4rz|maerz|march)|(apr(il)?)|(ma(i|y))|(jun(i|o|e)?)|(jul(i|y)?)|(aug(ust)?)|(sep((t)?(ember))?)|(o(c|k)t(ober)?)|(nov(ember)?)|(de(c|z)(ember)?)'; +var mn = monthNames(); +for (var i = 0; i < mn.length; ++i) { + if (actual) + actual += '|'; + actual += '(' + mn[i++].source + ')'; +} + +assert.sameValue(actual, expected); + diff --git a/test/staging/sm/extensions/builtin-function-arguments-caller.js b/test/staging/sm/extensions/builtin-function-arguments-caller.js new file mode 100644 index 0000000000..dc1314a283 --- /dev/null +++ b/test/staging/sm/extensions/builtin-function-arguments-caller.js @@ -0,0 +1,65 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'builtin-function-arguments-caller.js'; +var BUGNUMBER = 929642; +var summary = + "Built-in functions defined in ECMAScript pick up arguments/caller " + + "properties from Function.prototype"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectNoProperty(obj, prop) +{ + var desc = Object.getOwnPropertyDescriptor(obj, prop); + assert.sameValue(desc, undefined, + "should be no '" + prop + "' property on " + obj); +} + +// Test a builtin that's native. +expectNoProperty(Object, "arguments"); +expectNoProperty(Object, "caller"); + +// Also test a builtin that's self-hosted. +expectNoProperty(Array.prototype.indexOf, "arguments"); +expectNoProperty(Array.prototype.indexOf, "caller"); + +// Test the Function construct for good measure, because it's so intricately +// invovled in bootstrapping. +expectNoProperty(Function, "arguments"); +expectNoProperty(Function, "caller"); + +var argsDesc = Object.getOwnPropertyDescriptor(Function.prototype, "arguments"); +var callerDesc = Object.getOwnPropertyDescriptor(Function.prototype, "caller"); + +var argsGet = argsDesc.get, argsSet = argsDesc.set; + +expectNoProperty(argsGet, "arguments"); +expectNoProperty(argsGet, "caller"); +expectNoProperty(argsSet, "arguments"); +expectNoProperty(argsSet, "caller"); + +var callerGet = callerDesc.get, callerSet = callerDesc.set; + +expectNoProperty(callerGet, "arguments"); +expectNoProperty(callerGet, "caller"); +expectNoProperty(callerSet, "arguments"); +expectNoProperty(callerSet, "caller"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/censor-strict-caller.js b/test/staging/sm/extensions/censor-strict-caller.js new file mode 100644 index 0000000000..bb242a9338 --- /dev/null +++ b/test/staging/sm/extensions/censor-strict-caller.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +function nonstrict() { return nonstrict.caller; } +function strict() { "use strict"; return nonstrict(); } + +assert.sameValue(strict(), null); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/clone-v1-typed-array-data.dat b/test/staging/sm/extensions/clone-v1-typed-array-data.dat new file mode 100644 index 0000000000..9ced341009 --- /dev/null +++ b/test/staging/sm/extensions/clone-v1-typed-array-data.dat @@ -0,0 +1,32 @@ +var captured = []; +captured[0] = serialize(0); captured[0].clonebuffer = String.fromCharCode(0, 0, 0, 0, 9, 0, 255, 255); +captured[1] = serialize(0); captured[1].clonebuffer = String.fromCharCode(7, 0, 0, 0, 9, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0); +captured[2] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[3] = serialize(0); captured[3].clonebuffer = String.fromCharCode(0, 0, 0, 0, 0, 1, 255, 255); +captured[4] = serialize(0); captured[4].clonebuffer = String.fromCharCode(100, 0, 0, 0, 0, 1, 255, 255, 1, 7, 49, 87, 97, 167, 145, 247, 193, 71, 241, 151, 33, 231, 81, 55, 129, 135, 177, 216, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +captured[5] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[6] = serialize(0); captured[6].clonebuffer = String.fromCharCode(0, 0, 0, 0, 1, 1, 255, 255); +captured[7] = serialize(0); captured[7].clonebuffer = String.fromCharCode(100, 0, 0, 0, 1, 1, 255, 255, 1, 7, 49, 87, 97, 167, 145, 247, 193, 71, 241, 151, 33, 231, 81, 55, 129, 135, 177, 216, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +captured[8] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[9] = serialize(0); captured[9].clonebuffer = String.fromCharCode(0, 0, 0, 0, 2, 1, 255, 255); +captured[10] = serialize(0); captured[10].clonebuffer = String.fromCharCode(100, 0, 0, 0, 2, 1, 255, 255, 1, 0, 7, 0, 49, 0, 87, 1, 97, 9, 167, 65, 145, 203, 247, 144, 193, 246, 71, 191, 241, 58, 151, 156, 33, 72, 231, 248, 81, 206, 55, 164, 129, 125, 135, 110, 177, 5, 216, 39, 224, 22, 0, 160, 0, 96, 0, 160, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +captured[11] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[12] = serialize(0); captured[12].clonebuffer = String.fromCharCode(0, 0, 0, 0, 3, 1, 255, 255); +captured[13] = serialize(0); captured[13].clonebuffer = String.fromCharCode(100, 0, 0, 0, 3, 1, 255, 255, 1, 0, 7, 0, 49, 0, 87, 1, 97, 9, 167, 65, 145, 203, 247, 144, 193, 246, 71, 191, 241, 58, 151, 156, 33, 72, 231, 248, 81, 206, 55, 164, 129, 125, 135, 110, 177, 5, 216, 39, 224, 22, 0, 160, 0, 96, 0, 160, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +captured[14] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[15] = serialize(0); captured[15].clonebuffer = String.fromCharCode(0, 0, 0, 0, 4, 1, 255, 255); +captured[16] = serialize(0); captured[16].clonebuffer = String.fromCharCode(100, 0, 0, 0, 4, 1, 255, 255, 1, 0, 0, 0, 7, 0, 0, 0, 49, 0, 0, 0, 87, 1, 0, 0, 97, 9, 0, 0, 167, 65, 0, 0, 145, 203, 1, 0, 247, 144, 12, 0, 193, 246, 87, 0, 71, 191, 103, 2, 241, 58, 214, 16, 151, 156, 219, 117, 33, 72, 1, 57, 231, 248, 8, 143, 81, 206, 62, 233, 55, 164, 183, 96, 129, 125, 5, 165, 135, 110, 38, 131, 177, 5, 13, 150, 216, 39, 91, 26, 224, 22, 126, 184, 0, 160, 114, 11, 0, 96, 34, 80, 0, 160, 240, 48, 0, 128, 148, 86, 0, 0, 16, 94, 0, 0, 112, 146, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +captured[17] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[18] = serialize(0); captured[18].clonebuffer = String.fromCharCode(0, 0, 0, 0, 5, 1, 255, 255); +captured[19] = serialize(0); captured[19].clonebuffer = String.fromCharCode(100, 0, 0, 0, 5, 1, 255, 255, 1, 0, 0, 0, 7, 0, 0, 0, 49, 0, 0, 0, 87, 1, 0, 0, 97, 9, 0, 0, 167, 65, 0, 0, 145, 203, 1, 0, 247, 144, 12, 0, 193, 246, 87, 0, 71, 191, 103, 2, 241, 58, 214, 16, 151, 156, 219, 117, 33, 72, 1, 57, 231, 248, 8, 143, 81, 206, 62, 233, 55, 164, 183, 96, 129, 125, 5, 165, 135, 110, 38, 131, 177, 5, 13, 150, 216, 39, 91, 26, 224, 22, 126, 184, 0, 160, 114, 11, 0, 96, 34, 80, 0, 160, 240, 48, 0, 128, 148, 86, 0, 0, 16, 94, 0, 0, 112, 146, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +captured[20] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[21] = serialize(0); captured[21].clonebuffer = String.fromCharCode(0, 0, 0, 0, 6, 1, 255, 255); +captured[22] = serialize(0); captured[22].clonebuffer = String.fromCharCode(100, 0, 0, 0, 6, 1, 255, 255, 0, 0, 128, 63, 0, 0, 224, 64, 0, 0, 68, 66, 0, 128, 171, 67, 0, 16, 22, 69, 0, 78, 131, 70, 128, 200, 229, 71, 112, 15, 73, 73, 130, 237, 175, 74, 210, 239, 25, 76, 216, 177, 134, 77, 57, 183, 235, 78, 82, 64, 78, 80, 72, 120, 180, 81, 63, 233, 29, 83, 23, 44, 138, 84, 40, 205, 241, 85, 131, 147, 83, 87, 19, 33, 185, 88, 240, 252, 33, 90, 82, 189, 141, 91, 80, 11, 248, 92, 230, 9, 89, 94, 169, 232, 189, 95, 148, 43, 38, 97, 34, 102, 145, 98, 187, 114, 254, 99, 100, 164, 94, 101, 215, 207, 194, 102, 220, 117, 42, 104, 33, 39, 149, 105, 61, 130, 2, 107, 234, 99, 100, 108, 109, 215, 199, 109, 127, 220, 46, 111, 239, 0, 153, 112, 209, 224, 5, 114, 110, 73, 106, 115, 65, 0, 205, 116, 57, 96, 51, 118, 49, 244, 156, 119, 171, 85, 9, 121, 236, 85, 112, 122, 46, 75, 210, 123, 200, 1, 56, 125, 143, 1, 161, 126, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 128, 127, 0, 0, 192, 127); +captured[23] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[24] = serialize(0); captured[24].clonebuffer = String.fromCharCode(0, 0, 0, 0, 7, 1, 255, 255); +captured[25] = serialize(0); captured[25].clonebuffer = String.fromCharCode(100, 0, 0, 0, 7, 1, 255, 255, 0, 0, 0, 0, 0, 0, 240, 63, 0, 0, 0, 0, 0, 0, 28, 64, 0, 0, 0, 0, 0, 128, 72, 64, 0, 0, 0, 0, 0, 112, 117, 64, 0, 0, 0, 0, 0, 194, 162, 64, 0, 0, 0, 0, 192, 105, 208, 64, 0, 0, 0, 0, 16, 185, 252, 64, 0, 0, 0, 0, 238, 33, 41, 65, 0, 0, 0, 64, 176, 253, 85, 65, 0, 0, 0, 56, 250, 61, 131, 65, 0, 0, 0, 241, 58, 214, 176, 65, 0, 0, 192, 37, 231, 118, 221, 65, 0, 0, 8, 65, 10, 200, 9, 66, 0, 0, 231, 248, 8, 143, 54, 66, 0, 32, 202, 217, 39, 189, 99, 66, 0, 220, 144, 222, 130, 69, 145, 66, 0, 129, 125, 5, 165, 57, 190, 66, 224, 208, 205, 100, 112, 114, 234, 66, 196, 22, 52, 88, 34, 36, 23, 67, 236, 147, 45, 13, 158, 63, 68, 67, 110, 225, 135, 75, 170, 183, 113, 67, 128, 202, 45, 4, 106, 1, 159, 67, 48, 17, 168, 195, 60, 33, 203, 67, 10, 15, 51, 43, 21, 189, 247, 67, 41, 173, 204, 133, 114, 197, 36, 68, 132, 23, 19, 53, 196, 44, 82, 68, 39, 105, 225, 92, 87, 206, 127, 68, 2, 60, 69, 113, 140, 212, 171, 68, 130, 148, 28, 227, 250, 89, 216, 68, 242, 1, 185, 134, 187, 78, 5, 69, 180, 225, 225, 21, 228, 164, 50, 69, 126, 165, 37, 147, 71, 80, 96, 69, 156, 225, 129, 65, 125, 140, 140, 69, 104, 165, 81, 153, 237, 250, 184, 69, 187, 112, 39, 230, 143, 219, 229, 69, 164, 130, 98, 233, 29, 32, 19, 70, 80, 50, 54, 44, 26, 188, 64, 70, 12, 216, 94, 205, 45, 73, 109, 70, 10, 253, 178, 19, 8, 160, 153, 70, 105, 157, 60, 17, 7, 108, 198, 70, 188, 9, 21, 47, 134, 158, 243, 70, 132, 104, 50, 105, 181, 42, 33, 71, 231, 54, 24, 120, 189, 10, 78, 71, 10, 48, 21, 201, 101, 73, 122, 71, 9, 138, 242, 15, 57, 0, 167, 71, 200, 56, 244, 237, 49, 32, 212, 71, 175, 177, 53, 176, 43, 156, 1, 72, 242, 246, 93, 116, 76, 209, 46, 72, 20, 56, 210, 229, 34, 247, 90, 72, 18, 241, 23, 137, 62, 152, 135, 72, 240, 242, 244, 183, 54, 165, 180, 72, 146, 84, 246, 224, 143, 16, 226, 72, 0, 20, 175, 201, 251, 156, 15, 73, 128, 49, 121, 80, 92, 169, 59, 73, 80, 11, 106, 198, 48, 52, 104, 73, 230, 201, 156, 173, 170, 45, 149, 73, 169, 48, 233, 87, 245, 135, 194, 73, 148, 10, 236, 172, 246, 54, 240, 73, 131, 18, 157, 174, 47, 96, 28, 74, 51, 112, 201, 184, 41, 212, 72, 74, 45, 66, 176, 129, 164, 185, 117, 74, 231, 57, 122, 241, 111, 2, 163, 74, 170, 242, 74, 243, 33, 162, 208, 74, 170, 40, 195, 105, 187, 27, 253, 74, 149, 195, 138, 252, 67, 120, 41, 75, 34, 107, 249, 124, 59, 73, 86, 75, 190, 61, 90, 13, 20, 128, 131, 75, 6, 246, 174, 139, 17, 16, 177, 75, 138, 46, 114, 180, 30, 220, 221, 75, 185, 232, 227, 221, 154, 32, 10, 76, 162, 107, 39, 130, 135, 220, 54, 76, 46, 126, 226, 145, 246, 0, 100, 76, 104, 46, 166, 191, 215, 128, 145, 76, 54, 209, 98, 143, 121, 161, 190, 76, 15, 119, 118, 93, 74, 205, 234, 76, 45, 168, 199, 17, 161, 115, 23, 77, 39, 179, 142, 239, 44, 133, 68, 77, 194, 220, 156, 81, 135, 244, 113, 77, 84, 130, 210, 206, 236, 107, 159, 77, 10, 50, 248, 52, 111, 126, 203, 77, 201, 43, 89, 78, 161, 14, 248, 77, 80, 6, 142, 36, 205, 12, 37, 78, 134, 69, 252, 127, 51, 107, 82, 78, 213, 188, 252, 15, 205, 29, 128, 78, 117, 74, 250, 219, 38, 52, 172, 78, 38, 1, 123, 0, 162, 173, 216, 78, 1, 161, 107, 192, 237, 151, 5, 79, 225, 44, 94, 8, 240, 228, 50, 79, 69, 103, 82, 7, 82, 136, 96, 79, 185, 52, 208, 140, 143, 238, 140, 79, 34, 46, 54, 155, 189, 80, 185, 79, 94, 104, 207, 231, 165, 38, 230, 79, 82, 123, 213, 42, 209, 97, 19, 80, 232, 203, 122, 5, 151, 245, 64, 80, 214, 228, 150, 73, 200, 173, 109, 80, 59, 8, 100, 64, 15, 248, 153, 80, 52, 135, 87, 88, 13, 185, 198, 80, 78, 150, 76, 173, 235, 225, 243, 80, 132, 3, 163, 55, 174, 101, 33, 81, 0, 0, 0, 0, 0, 0, 248, 127); +captured[26] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[27] = serialize(0); captured[27].clonebuffer = String.fromCharCode(0, 0, 0, 0, 8, 1, 255, 255); +captured[28] = serialize(0); captured[28].clonebuffer = String.fromCharCode(100, 0, 0, 0, 8, 1, 255, 255, 1, 7, 49, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0); +captured[29] = (new TypeError("unsupported type for structured data", "js1_8_5/extensions/clone-v1-typed-array.js", 19)); +captured[30] = serialize(0); captured[30].clonebuffer = String.fromCharCode(0, 0, 0, 0, 7, 0, 255, 255, 0, 0, 0, 0, 3, 0, 255, 255, 3, 0, 0, 0, 0, 1, 255, 255, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 255, 255, 3, 0, 0, 0, 0, 1, 255, 255, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255); diff --git a/test/staging/sm/extensions/cross-global-eval-is-indirect.js b/test/staging/sm/extensions/cross-global-eval-is-indirect.js new file mode 100644 index 0000000000..65f95e6f51 --- /dev/null +++ b/test/staging/sm/extensions/cross-global-eval-is-indirect.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + needs newGlobal() +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 608473; +var summary = + '|var eval = otherWindow.eval; eval(...)| should behave like indirectly ' + + 'calling that eval from a script in that other window'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var originalEval = eval; +var res; + +function f() +{ + return [this, eval("this")]; +} + +var otherGlobalSameCompartment = createNewGlobal("same-compartment"); + +eval = otherGlobalSameCompartment.eval; +res = new f(); +assert.sameValue(res[0] !== res[1], true); +assert.sameValue(res[0] !== this, true); +assert.sameValue(res[0] instanceof f, true); +assert.sameValue(res[1], otherGlobalSameCompartment); + +res = f(); +assert.sameValue(res[0] !== res[1], true); +assert.sameValue(res[0], this); +assert.sameValue(res[1], otherGlobalSameCompartment); + +var otherGlobalDifferentCompartment = createNewGlobal(); + +eval = otherGlobalDifferentCompartment.eval; +res = new f(); +assert.sameValue(res[0] !== res[1], true); +assert.sameValue(res[0] !== this, true); +assert.sameValue(res[0] instanceof f, true); +assert.sameValue(res[1], otherGlobalDifferentCompartment); + +res = f(); +assert.sameValue(res[0] !== res[1], true); +assert.sameValue(res[0], this); +assert.sameValue(res[1], otherGlobalDifferentCompartment); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/dataview.js b/test/staging/sm/extensions/dataview.js new file mode 100644 index 0000000000..a55a8891d7 --- /dev/null +++ b/test/staging/sm/extensions/dataview.js @@ -0,0 +1,1662 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//------------------------------------------------------------------------------ +var BUGNUMBER = 575688; +var summary = 'DataView tests'; + +function test(sharedMem) { + function die(message, uplevel) { + var e = new Error(message); + var frame = e.stack.split("\n")[uplevel]; + print(message + " at " + frame.split("@")[1]); + print("Stack:\n" + e.stack); + throw(e); + } + + function checkThrow(fun, type) { + var thrown = false; + try { + fun(); + } catch (x) { + thrown = x; + } + + if (!thrown) { + die('no exception thrown, expected ' + type.name, 2); + } else if (!(thrown instanceof type)) { + die('expected ' + type.name + ', got ' + thrown, 2); + } + } + + function checkThrowTODO(fun, type) { + var thrown = false; + try { + fun(); + } catch (x) { + thrown = x; + } + + if (!thrown) { + print('(TODO) no exception thrown, expected ' + type.name); + } else if (!(thrown instanceof type)) { + print('(TODO) expected ' + type.name + ', got ' + thrown); + } else { + print('test unexpectedly passed: expected ' + type.name + ' exception'); + } + } + + function bufferize(u8array) { + if (!sharedMem) + return u8array.buffer; + + let v = new Uint8Array(new SharedArrayBuffer(u8array.buffer.byteLength)); + v.set(u8array); + + // Sanity checking + assert.sameValue(v.buffer instanceof SharedArrayBuffer, true); + assert.sameValue(v.buffer.byteLength, u8array.buffer.byteLength); + assert.sameValue(u8array[0], v[0]); + + return v.buffer; + } + + printBugNumber(BUGNUMBER); + printStatus(summary); + + // testConstructor + buffer = bufferize(new Uint8Array([1, 2])); + checkThrow(() => new DataView(buffer, 0, 3), RangeError); + checkThrow(() => new DataView(buffer, 1, 2), RangeError); + checkThrow(() => new DataView(buffer, 2, 1), RangeError); + checkThrow(() => new DataView(buffer, 2147483649, 0), RangeError); + checkThrow(() => new DataView(buffer, 0, 2147483649), RangeError); + checkThrow(() => new DataView(), TypeError); + checkThrow(() => new DataView(Object.create(new ArrayBuffer(5))), TypeError); + + // testGetMethods + + // testIntegerGets(start=0, length=16) + var data1 = [0,1,2,3,0x64,0x65,0x66,0x67,0x80,0x81,0x82,0x83,252,253,254,255]; + var data1_r = data1.slice().reverse(); + var buffer1 = bufferize(new Uint8Array(data1)); + var view1 = new DataView(buffer1, 0, 16); + view = view1; + assert.sameValue(view.getInt8(0), 0); + assert.sameValue(view.getInt8(8), -128); + assert.sameValue(view.getInt8(15), -1); + assert.sameValue(view.getUint8(0), 0); + assert.sameValue(view.getUint8(8), 128); + assert.sameValue(view.getUint8(15), 255); + // Little endian. + assert.sameValue(view.getInt16(0, true), 256); + assert.sameValue(view.getInt16(5, true), 0x6665); + assert.sameValue(view.getInt16(9, true), -32127); + assert.sameValue(view.getInt16(14, true), -2); + // Big endian. + assert.sameValue(view.getInt16(0), 1); + assert.sameValue(view.getInt16(5), 0x6566); + assert.sameValue(view.getInt16(9), -32382); + assert.sameValue(view.getInt16(14), -257); + // Little endian. + assert.sameValue(view.getUint16(0, true), 256); + assert.sameValue(view.getUint16(5, true), 0x6665); + assert.sameValue(view.getUint16(9, true), 0x8281); + assert.sameValue(view.getUint16(14, true), 0xfffe); + // Big endian. + assert.sameValue(view.getUint16(0), 1); + assert.sameValue(view.getUint16(5), 0x6566); + assert.sameValue(view.getUint16(9), 0x8182); + assert.sameValue(view.getUint16(14), 0xfeff); + // Little endian. + assert.sameValue(view.getInt32(0, true), 0x3020100); + assert.sameValue(view.getInt32(3, true), 0x66656403); + assert.sameValue(view.getInt32(6, true), -2122291354); + assert.sameValue(view.getInt32(9, true), -58490239); + assert.sameValue(view.getInt32(12, true), -66052); + // Big endian. + assert.sameValue(view.getInt32(0), 0x10203); + assert.sameValue(view.getInt32(3), 0x3646566); + assert.sameValue(view.getInt32(6), 0x66678081); + assert.sameValue(view.getInt32(9), -2122152964); + assert.sameValue(view.getInt32(12), -50462977); + // Little endian. + assert.sameValue(view.getUint32(0, true), 0x3020100); + assert.sameValue(view.getUint32(3, true), 0x66656403); + assert.sameValue(view.getUint32(6, true), 0x81806766); + assert.sameValue(view.getUint32(9, true), 0xfc838281); + assert.sameValue(view.getUint32(12, true), 0xfffefdfc); + // Big endian. + assert.sameValue(view.getUint32(0), 0x10203); + assert.sameValue(view.getUint32(3), 0x3646566); + assert.sameValue(view.getUint32(6), 0x66678081); + assert.sameValue(view.getUint32(9), 0x818283fc); + assert.sameValue(view.getUint32(12), 0xfcfdfeff); + + // testFloatGets(start=0) + + // testFloatGet expected=10 + // Little endian + var data2 = [0,0,32,65]; + var data2_r = data2.slice().reverse(); + var buffer2 = bufferize(new Uint8Array(data2)); + view = new DataView(buffer2, 0, 4); + assert.sameValue(view.getFloat32(0, true), 10); + var buffer2_pad3 = bufferize(new Uint8Array(Array(3).concat(data2))); + view = new DataView(buffer2_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, true), 10); + var buffer2_pad7 = bufferize(new Uint8Array(Array(7).concat(data2))); + view = new DataView(buffer2_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, true), 10); + var buffer2_pad10 = bufferize(new Uint8Array(Array(10).concat(data2))); + view = new DataView(buffer2_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, true), 10); + // Big endian. + var buffer2_r = bufferize(new Uint8Array(data2_r)); + view = new DataView(buffer2_r, 0, 4); + assert.sameValue(view.getFloat32(0, false), 10); + var buffer2_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data2_r))); + view = new DataView(buffer2_r_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, false), 10); + var buffer2_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data2_r))); + view = new DataView(buffer2_r_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, false), 10); + var buffer2_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data2_r))); + view = new DataView(buffer2_r_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, false), 10); + + // testFloatGet expected=1.2300000190734863 + // Little endian + var data3 = [164,112,157,63]; + var data3_r = data3.slice().reverse(); + var buffer3 = bufferize(new Uint8Array(data3)); + view = new DataView(buffer3, 0, 4); + assert.sameValue(view.getFloat32(0, true), 1.2300000190734863); + var buffer3_pad3 = bufferize(new Uint8Array(Array(3).concat(data3))); + view = new DataView(buffer3_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, true), 1.2300000190734863); + var buffer3_pad7 = bufferize(new Uint8Array(Array(7).concat(data3))); + view = new DataView(buffer3_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, true), 1.2300000190734863); + var buffer3_pad10 = bufferize(new Uint8Array(Array(10).concat(data3))); + view = new DataView(buffer3_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, true), 1.2300000190734863); + // Big endian. + var buffer3_r = bufferize(new Uint8Array(data3_r)); + view = new DataView(buffer3_r, 0, 4); + assert.sameValue(view.getFloat32(0, false), 1.2300000190734863); + var buffer3_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data3_r))); + view = new DataView(buffer3_r_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, false), 1.2300000190734863); + var buffer3_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data3_r))); + view = new DataView(buffer3_r_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, false), 1.2300000190734863); + var buffer3_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data3_r))); + view = new DataView(buffer3_r_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, false), 1.2300000190734863); + + // testFloatGet expected=-45621.37109375 + // Little endian + var data4 = [95,53,50,199]; + var data4_r = data4.slice().reverse(); + var buffer4 = bufferize(new Uint8Array(data4)); + view = new DataView(buffer4, 0, 4); + assert.sameValue(view.getFloat32(0, true), -45621.37109375); + var buffer4_pad3 = bufferize(new Uint8Array(Array(3).concat(data4))); + view = new DataView(buffer4_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, true), -45621.37109375); + var buffer4_pad7 = bufferize(new Uint8Array(Array(7).concat(data4))); + view = new DataView(buffer4_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, true), -45621.37109375); + var buffer4_pad10 = bufferize(new Uint8Array(Array(10).concat(data4))); + view = new DataView(buffer4_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, true), -45621.37109375); + // Big endian. + var buffer4_r = bufferize(new Uint8Array(data4_r)); + view = new DataView(buffer4_r, 0, 4); + assert.sameValue(view.getFloat32(0, false), -45621.37109375); + var buffer4_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data4_r))); + view = new DataView(buffer4_r_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, false), -45621.37109375); + var buffer4_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data4_r))); + view = new DataView(buffer4_r_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, false), -45621.37109375); + var buffer4_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data4_r))); + view = new DataView(buffer4_r_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, false), -45621.37109375); + + // testFloatGet expected=NaN + // Little endian + var data5 = [255,255,255,127]; + var data5_r = data5.slice().reverse(); + var buffer5 = bufferize(new Uint8Array(data5)); + view = new DataView(buffer5, 0, 4); + assert.sameValue(view.getFloat32(0, true), NaN); + var buffer5_pad3 = bufferize(new Uint8Array(Array(3).concat(data5))); + view = new DataView(buffer5_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, true), NaN); + var buffer5_pad7 = bufferize(new Uint8Array(Array(7).concat(data5))); + view = new DataView(buffer5_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, true), NaN); + var buffer5_pad10 = bufferize(new Uint8Array(Array(10).concat(data5))); + view = new DataView(buffer5_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, true), NaN); + // Big endian. + var buffer5_r = bufferize(new Uint8Array(data5_r)); + view = new DataView(buffer5_r, 0, 4); + assert.sameValue(view.getFloat32(0, false), NaN); + var buffer5_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data5_r))); + view = new DataView(buffer5_r_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, false), NaN); + var buffer5_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data5_r))); + view = new DataView(buffer5_r_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, false), NaN); + var buffer5_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data5_r))); + view = new DataView(buffer5_r_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, false), NaN); + + // testFloatGet expected=NaN + // Little endian + var data6 = [255,255,255,255]; + var data6_r = data6.slice().reverse(); + var buffer6 = bufferize(new Uint8Array(data6)); + view = new DataView(buffer6, 0, 4); + assert.sameValue(view.getFloat32(0, true), NaN); + var buffer6_pad3 = bufferize(new Uint8Array(Array(3).concat(data6))); + view = new DataView(buffer6_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, true), NaN); + var buffer6_pad7 = bufferize(new Uint8Array(Array(7).concat(data6))); + view = new DataView(buffer6_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, true), NaN); + var buffer6_pad10 = bufferize(new Uint8Array(Array(10).concat(data6))); + view = new DataView(buffer6_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, true), NaN); + // Big endian. + var buffer6_r = bufferize(new Uint8Array(data6_r)); + view = new DataView(buffer6_r, 0, 4); + assert.sameValue(view.getFloat32(0, false), NaN); + var buffer6_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data6_r))); + view = new DataView(buffer6_r_pad3, 0, 7); + assert.sameValue(view.getFloat32(3, false), NaN); + var buffer6_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data6_r))); + view = new DataView(buffer6_r_pad7, 0, 11); + assert.sameValue(view.getFloat32(7, false), NaN); + var buffer6_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data6_r))); + view = new DataView(buffer6_r_pad10, 0, 14); + assert.sameValue(view.getFloat32(10, false), NaN); + + // testFloatGet expected=10 + // Little endian + var data7 = [0,0,0,0,0,0,36,64]; + var data7_r = data7.slice().reverse(); + var buffer7 = bufferize(new Uint8Array(data7)); + view = new DataView(buffer7, 0, 8); + assert.sameValue(view.getFloat64(0, true), 10); + var buffer7_pad3 = bufferize(new Uint8Array(Array(3).concat(data7))); + view = new DataView(buffer7_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, true), 10); + var buffer7_pad7 = bufferize(new Uint8Array(Array(7).concat(data7))); + view = new DataView(buffer7_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, true), 10); + var buffer7_pad10 = bufferize(new Uint8Array(Array(10).concat(data7))); + view = new DataView(buffer7_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, true), 10); + // Big endian. + var buffer7_r = bufferize(new Uint8Array(data7_r)); + view = new DataView(buffer7_r, 0, 8); + assert.sameValue(view.getFloat64(0, false), 10); + var buffer7_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data7_r))); + view = new DataView(buffer7_r_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, false), 10); + var buffer7_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data7_r))); + view = new DataView(buffer7_r_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, false), 10); + var buffer7_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data7_r))); + view = new DataView(buffer7_r_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, false), 10); + + // testFloatGet expected=1.23 + // Little endian + var data8 = [174,71,225,122,20,174,243,63]; + var data8_r = data8.slice().reverse(); + var buffer8 = bufferize(new Uint8Array(data8)); + view = new DataView(buffer8, 0, 8); + assert.sameValue(view.getFloat64(0, true), 1.23); + var buffer8_pad3 = bufferize(new Uint8Array(Array(3).concat(data8))); + view = new DataView(buffer8_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, true), 1.23); + var buffer8_pad7 = bufferize(new Uint8Array(Array(7).concat(data8))); + view = new DataView(buffer8_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, true), 1.23); + var buffer8_pad10 = bufferize(new Uint8Array(Array(10).concat(data8))); + view = new DataView(buffer8_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, true), 1.23); + // Big endian. + var buffer8_r = bufferize(new Uint8Array(data8_r)); + view = new DataView(buffer8_r, 0, 8); + assert.sameValue(view.getFloat64(0, false), 1.23); + var buffer8_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data8_r))); + view = new DataView(buffer8_r_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, false), 1.23); + var buffer8_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data8_r))); + view = new DataView(buffer8_r_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, false), 1.23); + var buffer8_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data8_r))); + view = new DataView(buffer8_r_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, false), 1.23); + + // testFloatGet expected=-6213576.4839 + // Little endian + var data9 = [181,55,248,30,242,179,87,193]; + var data9_r = data9.slice().reverse(); + var buffer9 = bufferize(new Uint8Array(data9)); + view = new DataView(buffer9, 0, 8); + assert.sameValue(view.getFloat64(0, true), -6213576.4839); + var buffer9_pad3 = bufferize(new Uint8Array(Array(3).concat(data9))); + view = new DataView(buffer9_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, true), -6213576.4839); + var buffer9_pad7 = bufferize(new Uint8Array(Array(7).concat(data9))); + view = new DataView(buffer9_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, true), -6213576.4839); + var buffer9_pad10 = bufferize(new Uint8Array(Array(10).concat(data9))); + view = new DataView(buffer9_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, true), -6213576.4839); + // Big endian. + var buffer9_r = bufferize(new Uint8Array(data9_r)); + view = new DataView(buffer9_r, 0, 8); + assert.sameValue(view.getFloat64(0, false), -6213576.4839); + var buffer9_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data9_r))); + view = new DataView(buffer9_r_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, false), -6213576.4839); + var buffer9_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data9_r))); + view = new DataView(buffer9_r_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, false), -6213576.4839); + var buffer9_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data9_r))); + view = new DataView(buffer9_r_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, false), -6213576.4839); + + // testFloatGet expected=NaN + // Little endian + var data10 = [255,255,255,255,255,255,255,127]; + var data10_r = data10.slice().reverse(); + var buffer10 = bufferize(new Uint8Array(data10)); + view = new DataView(buffer10, 0, 8); + assert.sameValue(view.getFloat64(0, true), NaN); + var buffer10_pad3 = bufferize(new Uint8Array(Array(3).concat(data10))); + view = new DataView(buffer10_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, true), NaN); + var buffer10_pad7 = bufferize(new Uint8Array(Array(7).concat(data10))); + view = new DataView(buffer10_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, true), NaN); + var buffer10_pad10 = bufferize(new Uint8Array(Array(10).concat(data10))); + view = new DataView(buffer10_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, true), NaN); + // Big endian. + var buffer10_r = bufferize(new Uint8Array(data10_r)); + view = new DataView(buffer10_r, 0, 8); + assert.sameValue(view.getFloat64(0, false), NaN); + var buffer10_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data10_r))); + view = new DataView(buffer10_r_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, false), NaN); + var buffer10_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data10_r))); + view = new DataView(buffer10_r_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, false), NaN); + var buffer10_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data10_r))); + view = new DataView(buffer10_r_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, false), NaN); + + // testFloatGet expected=NaN + // Little endian + var data11 = [255,255,255,255,255,255,255,255]; + var data11_r = data11.slice().reverse(); + var buffer11 = bufferize(new Uint8Array(data11)); + view = new DataView(buffer11, 0, 8); + assert.sameValue(view.getFloat64(0, true), NaN); + var buffer11_pad3 = bufferize(new Uint8Array(Array(3).concat(data11))); + view = new DataView(buffer11_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, true), NaN); + var buffer11_pad7 = bufferize(new Uint8Array(Array(7).concat(data11))); + view = new DataView(buffer11_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, true), NaN); + var buffer11_pad10 = bufferize(new Uint8Array(Array(10).concat(data11))); + view = new DataView(buffer11_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, true), NaN); + // Big endian. + var buffer11_r = bufferize(new Uint8Array(data11_r)); + view = new DataView(buffer11_r, 0, 8); + assert.sameValue(view.getFloat64(0, false), NaN); + var buffer11_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data11_r))); + view = new DataView(buffer11_r_pad3, 0, 11); + assert.sameValue(view.getFloat64(3, false), NaN); + var buffer11_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data11_r))); + view = new DataView(buffer11_r_pad7, 0, 15); + assert.sameValue(view.getFloat64(7, false), NaN); + var buffer11_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data11_r))); + view = new DataView(buffer11_r_pad10, 0, 18); + assert.sameValue(view.getFloat64(10, false), NaN); + + // testIntegerGets(start=3, length=2) + var data12 = [31,32,33,0,1,2,3,100,101,102,103,128,129,130,131,252,253,254,255]; + var data12_r = data12.slice().reverse(); + var buffer12 = bufferize(new Uint8Array(data12)); + view = new DataView(buffer12, 3, 2); + assert.sameValue(view.getInt8(0), 0); + checkThrow(() => view.getInt8(8), RangeError); + checkThrow(() => view.getInt8(15), RangeError); + assert.sameValue(view.getUint8(0), 0); + checkThrow(() => view.getUint8(8), RangeError); + checkThrow(() => view.getUint8(15), RangeError); + // Little endian. + assert.sameValue(view.getInt16(0, true), 256); + checkThrow(() => view.getInt16(5, true), RangeError); + checkThrow(() => view.getInt16(9, true), RangeError); + checkThrow(() => view.getInt16(14, true), RangeError); + // Big endian. + assert.sameValue(view.getInt16(0), 1); + checkThrow(() => view.getInt16(5), RangeError); + checkThrow(() => view.getInt16(9), RangeError); + checkThrow(() => view.getInt16(14), RangeError); + // Little endian. + assert.sameValue(view.getUint16(0, true), 256); + checkThrow(() => view.getUint16(5, true), RangeError); + checkThrow(() => view.getUint16(9, true), RangeError); + checkThrow(() => view.getUint16(14, true), RangeError); + // Big endian. + assert.sameValue(view.getUint16(0), 1); + checkThrow(() => view.getUint16(5), RangeError); + checkThrow(() => view.getUint16(9), RangeError); + checkThrow(() => view.getUint16(14), RangeError); + // Little endian. + checkThrow(() => view.getInt32(0, true), RangeError); + checkThrow(() => view.getInt32(3, true), RangeError); + checkThrow(() => view.getInt32(6, true), RangeError); + checkThrow(() => view.getInt32(9, true), RangeError); + checkThrow(() => view.getInt32(12, true), RangeError); + // Big endian. + checkThrow(() => view.getInt32(0), RangeError); + checkThrow(() => view.getInt32(3), RangeError); + checkThrow(() => view.getInt32(6), RangeError); + checkThrow(() => view.getInt32(9), RangeError); + checkThrow(() => view.getInt32(12), RangeError); + // Little endian. + checkThrow(() => view.getUint32(0, true), RangeError); + checkThrow(() => view.getUint32(3, true), RangeError); + checkThrow(() => view.getUint32(6, true), RangeError); + checkThrow(() => view.getUint32(9, true), RangeError); + checkThrow(() => view.getUint32(12, true), RangeError); + // Big endian. + checkThrow(() => view.getUint32(0), RangeError); + checkThrow(() => view.getUint32(3), RangeError); + checkThrow(() => view.getUint32(6), RangeError); + checkThrow(() => view.getUint32(9), RangeError); + checkThrow(() => view.getUint32(12), RangeError); + + // testFloatGets(start=3) + + // testFloatGet expected=10 + // Little endian + view = new DataView(buffer2, 3, 1); + checkThrow(() => view.getFloat32(0, true), RangeError); + view = new DataView(buffer2_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, true), RangeError); + view = new DataView(buffer2_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, true), RangeError); + view = new DataView(buffer2_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, true), RangeError); + // Big endian. + view = new DataView(buffer2_r, 3, 1); + checkThrow(() => view.getFloat32(0, false), RangeError); + view = new DataView(buffer2_r_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, false), RangeError); + view = new DataView(buffer2_r_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, false), RangeError); + view = new DataView(buffer2_r_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, false), RangeError); + + // testFloatGet expected=1.2300000190734863 + // Little endian + view = new DataView(buffer3, 3, 1); + checkThrow(() => view.getFloat32(0, true), RangeError); + view = new DataView(buffer3_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, true), RangeError); + view = new DataView(buffer3_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, true), RangeError); + view = new DataView(buffer3_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, true), RangeError); + // Big endian. + view = new DataView(buffer3_r, 3, 1); + checkThrow(() => view.getFloat32(0, false), RangeError); + view = new DataView(buffer3_r_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, false), RangeError); + view = new DataView(buffer3_r_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, false), RangeError); + view = new DataView(buffer3_r_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, false), RangeError); + + // testFloatGet expected=-45621.37109375 + // Little endian + view = new DataView(buffer4, 3, 1); + checkThrow(() => view.getFloat32(0, true), RangeError); + view = new DataView(buffer4_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, true), RangeError); + view = new DataView(buffer4_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, true), RangeError); + view = new DataView(buffer4_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, true), RangeError); + // Big endian. + view = new DataView(buffer4_r, 3, 1); + checkThrow(() => view.getFloat32(0, false), RangeError); + view = new DataView(buffer4_r_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, false), RangeError); + view = new DataView(buffer4_r_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, false), RangeError); + view = new DataView(buffer4_r_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, false), RangeError); + + // testFloatGet expected=NaN + // Little endian + view = new DataView(buffer5, 3, 1); + checkThrow(() => view.getFloat32(0, true), RangeError); + view = new DataView(buffer5_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, true), RangeError); + view = new DataView(buffer5_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, true), RangeError); + view = new DataView(buffer5_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, true), RangeError); + // Big endian. + view = new DataView(buffer5_r, 3, 1); + checkThrow(() => view.getFloat32(0, false), RangeError); + view = new DataView(buffer5_r_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, false), RangeError); + view = new DataView(buffer5_r_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, false), RangeError); + view = new DataView(buffer5_r_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, false), RangeError); + + // testFloatGet expected=NaN + // Little endian + view = new DataView(buffer6, 3, 1); + checkThrow(() => view.getFloat32(0, true), RangeError); + view = new DataView(buffer6_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, true), RangeError); + view = new DataView(buffer6_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, true), RangeError); + view = new DataView(buffer6_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, true), RangeError); + // Big endian. + view = new DataView(buffer6_r, 3, 1); + checkThrow(() => view.getFloat32(0, false), RangeError); + view = new DataView(buffer6_r_pad3, 3, 4); + checkThrow(() => view.getFloat32(3, false), RangeError); + view = new DataView(buffer6_r_pad7, 3, 8); + checkThrow(() => view.getFloat32(7, false), RangeError); + view = new DataView(buffer6_r_pad10, 3, 11); + checkThrow(() => view.getFloat32(10, false), RangeError); + + // testFloatGet expected=10 + // Little endian + view = new DataView(buffer7, 3, 5); + checkThrow(() => view.getFloat64(0, true), RangeError); + view = new DataView(buffer7_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, true), RangeError); + view = new DataView(buffer7_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, true), RangeError); + view = new DataView(buffer7_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, true), RangeError); + // Big endian. + view = new DataView(buffer7_r, 3, 5); + checkThrow(() => view.getFloat64(0, false), RangeError); + view = new DataView(buffer7_r_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, false), RangeError); + view = new DataView(buffer7_r_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, false), RangeError); + view = new DataView(buffer7_r_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, false), RangeError); + + // testFloatGet expected=1.23 + // Little endian + view = new DataView(buffer8, 3, 5); + checkThrow(() => view.getFloat64(0, true), RangeError); + view = new DataView(buffer8_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, true), RangeError); + view = new DataView(buffer8_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, true), RangeError); + view = new DataView(buffer8_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, true), RangeError); + // Big endian. + view = new DataView(buffer8_r, 3, 5); + checkThrow(() => view.getFloat64(0, false), RangeError); + view = new DataView(buffer8_r_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, false), RangeError); + view = new DataView(buffer8_r_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, false), RangeError); + view = new DataView(buffer8_r_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, false), RangeError); + + // testFloatGet expected=-6213576.4839 + // Little endian + view = new DataView(buffer9, 3, 5); + checkThrow(() => view.getFloat64(0, true), RangeError); + view = new DataView(buffer9_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, true), RangeError); + view = new DataView(buffer9_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, true), RangeError); + view = new DataView(buffer9_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, true), RangeError); + // Big endian. + view = new DataView(buffer9_r, 3, 5); + checkThrow(() => view.getFloat64(0, false), RangeError); + view = new DataView(buffer9_r_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, false), RangeError); + view = new DataView(buffer9_r_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, false), RangeError); + view = new DataView(buffer9_r_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, false), RangeError); + + // testFloatGet expected=NaN + // Little endian + view = new DataView(buffer10, 3, 5); + checkThrow(() => view.getFloat64(0, true), RangeError); + view = new DataView(buffer10_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, true), RangeError); + view = new DataView(buffer10_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, true), RangeError); + view = new DataView(buffer10_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, true), RangeError); + // Big endian. + view = new DataView(buffer10_r, 3, 5); + checkThrow(() => view.getFloat64(0, false), RangeError); + view = new DataView(buffer10_r_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, false), RangeError); + view = new DataView(buffer10_r_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, false), RangeError); + view = new DataView(buffer10_r_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, false), RangeError); + + // testFloatGet expected=NaN + // Little endian + view = new DataView(buffer11, 3, 5); + checkThrow(() => view.getFloat64(0, true), RangeError); + view = new DataView(buffer11_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, true), RangeError); + view = new DataView(buffer11_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, true), RangeError); + view = new DataView(buffer11_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, true), RangeError); + // Big endian. + view = new DataView(buffer11_r, 3, 5); + checkThrow(() => view.getFloat64(0, false), RangeError); + view = new DataView(buffer11_r_pad3, 3, 8); + checkThrow(() => view.getFloat64(3, false), RangeError); + view = new DataView(buffer11_r_pad7, 3, 12); + checkThrow(() => view.getFloat64(7, false), RangeError); + view = new DataView(buffer11_r_pad10, 3, 15); + checkThrow(() => view.getFloat64(10, false), RangeError); + + // testGetNegativeIndexes + view = new DataView(buffer1, 0, 16); + checkThrow(() => view.getInt8(-1), RangeError); + checkThrow(() => view.getInt8(-2), RangeError); + checkThrow(() => view.getUint8(-1), RangeError); + checkThrow(() => view.getUint8(-2), RangeError); + checkThrow(() => view.getInt16(-1), RangeError); + checkThrow(() => view.getInt16(-2), RangeError); + checkThrow(() => view.getInt16(-3), RangeError); + checkThrow(() => view.getUint16(-1), RangeError); + checkThrow(() => view.getUint16(-2), RangeError); + checkThrow(() => view.getUint16(-3), RangeError); + checkThrow(() => view.getInt32(-1), RangeError); + checkThrow(() => view.getInt32(-3), RangeError); + checkThrow(() => view.getInt32(-5), RangeError); + checkThrow(() => view.getUint32(-1), RangeError); + checkThrow(() => view.getUint32(-3), RangeError); + checkThrow(() => view.getUint32(-5), RangeError); + view = new DataView(buffer7, 0, 8); + checkThrow(() => view.getFloat32(-1), RangeError); + checkThrow(() => view.getFloat32(-3), RangeError); + checkThrow(() => view.getFloat32(-5), RangeError); + checkThrow(() => view.getFloat64(-1), RangeError); + checkThrow(() => view.getFloat64(-5), RangeError); + checkThrow(() => view.getFloat64(-9), RangeError); + + // Too large for signed 32 bit integer index + checkThrow(() => view.getInt8(2147483648), RangeError); + checkThrow(() => view.getInt8(2147483649), RangeError); + checkThrow(() => view.getUint8(2147483648), RangeError); + checkThrow(() => view.getUint8(2147483649), RangeError); + checkThrow(() => view.getInt16(2147483648), RangeError); + checkThrow(() => view.getInt16(2147483649), RangeError); + checkThrow(() => view.getUint16(2147483648), RangeError); + checkThrow(() => view.getUint16(2147483649), RangeError); + checkThrow(() => view.getInt32(2147483648), RangeError); + checkThrow(() => view.getInt32(2147483649), RangeError); + checkThrow(() => view.getUint32(2147483648), RangeError); + checkThrow(() => view.getUint32(2147483649), RangeError); + checkThrow(() => view.getFloat32(2147483648), RangeError); + checkThrow(() => view.getFloat32(2147483649), RangeError); + checkThrow(() => view.getFloat64(2147483648), RangeError); + checkThrow(() => view.getFloat64(2147483649), RangeError); + + // Test for wrong type of |this| + checkThrow(() => view.getInt8.apply("dead", [0]), TypeError); + checkThrow(() => view.getUint8.apply("puppies", [0]), TypeError); + checkThrow(() => view.getInt16.apply("aren", [0]), TypeError); + checkThrow(() => view.getUint16.apply("t", [0]), TypeError); + checkThrow(() => view.getInt32.apply("much", [0]), TypeError); + checkThrow(() => view.getUint32.apply("fun", [0]), TypeError); + checkThrow(() => view.getFloat32.apply("(in", [0]), TypeError); + checkThrow(() => view.getFloat64.apply("bed)", [0]), TypeError); + checkThrow(() => view.setInt8.apply("dead", [0, 0]), TypeError); + checkThrow(() => view.setUint8.apply("puppies", [0, 0]), TypeError); + checkThrow(() => view.setInt16.apply("aren", [0, 0]), TypeError); + checkThrow(() => view.setUint16.apply("t", [0, 0]), TypeError); + checkThrow(() => view.setInt32.apply("much", [0, 0]), TypeError); + checkThrow(() => view.setUint32.apply("fun", [0, 0]), TypeError); + checkThrow(() => view.setFloat32.apply("(in", [0, 0]), TypeError); + checkThrow(() => view.setFloat64.apply("bed)", [0, 0]), TypeError); + + // testSetMethods + + // Test for set methods that work + + // testIntegerSets(start=0, length=16) + var data13 = [204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204]; + var data13_r = data13.slice().reverse(); + var buffer13 = bufferize(new Uint8Array(data13)); + view = new DataView(buffer13, 0, 16); + view.setInt8(0, 0); + assert.sameValue(view.getInt8(0), 0); + view.setInt8(8, -128); + assert.sameValue(view.getInt8(8), -128); + view.setInt8(15, -1); + assert.sameValue(view.getInt8(15), -1); + view.setUint8(0, 0); + assert.sameValue(view.getUint8(0), 0); + view.setUint8(8, 128); + assert.sameValue(view.getUint8(8), 128); + view.setUint8(15, 255); + assert.sameValue(view.getUint8(15), 255); + view.setInt16(0, 256, true); + assert.sameValue(view.getInt16(0, true), 256); + view.setInt16(5, 26213, true); + assert.sameValue(view.getInt16(5, true), 26213); + view.setInt16(9, -32127, true); + assert.sameValue(view.getInt16(9, true), -32127); + view.setInt16(14, -2, true); + assert.sameValue(view.getInt16(14, true), -2); + view.setInt16(0, 1); + assert.sameValue(view.getInt16(0), 1); + view.setInt16(5, 25958); + assert.sameValue(view.getInt16(5), 25958); + view.setInt16(9, -32382); + assert.sameValue(view.getInt16(9), -32382); + view.setInt16(14, -257); + assert.sameValue(view.getInt16(14), -257); + view.setUint16(0, 256, true); + assert.sameValue(view.getUint16(0, true), 256); + view.setUint16(5, 26213, true); + assert.sameValue(view.getUint16(5, true), 26213); + view.setUint16(9, 33409, true); + assert.sameValue(view.getUint16(9, true), 33409); + view.setUint16(14, 65534, true); + assert.sameValue(view.getUint16(14, true), 65534); + view.setUint16(0, 1); + assert.sameValue(view.getUint16(0), 1); + view.setUint16(5, 25958); + assert.sameValue(view.getUint16(5), 25958); + view.setUint16(9, 33154); + assert.sameValue(view.getUint16(9), 33154); + view.setUint16(14, 65279); + assert.sameValue(view.getUint16(14), 65279); + view.setInt32(0, 50462976, true); + assert.sameValue(view.getInt32(0, true), 50462976); + view.setInt32(3, 1717920771, true); + assert.sameValue(view.getInt32(3, true), 1717920771); + view.setInt32(6, -2122291354, true); + assert.sameValue(view.getInt32(6, true), -2122291354); + view.setInt32(9, -58490239, true); + assert.sameValue(view.getInt32(9, true), -58490239); + view.setInt32(12, -66052, true); + assert.sameValue(view.getInt32(12, true), -66052); + view.setInt32(0, 66051); + assert.sameValue(view.getInt32(0), 66051); + view.setInt32(3, 56911206); + assert.sameValue(view.getInt32(3), 56911206); + view.setInt32(6, 1718059137); + assert.sameValue(view.getInt32(6), 1718059137); + view.setInt32(9, -2122152964); + assert.sameValue(view.getInt32(9), -2122152964); + view.setInt32(12, -50462977); + assert.sameValue(view.getInt32(12), -50462977); + view.setUint32(0, 50462976, true); + assert.sameValue(view.getUint32(0, true), 50462976); + view.setUint32(3, 1717920771, true); + assert.sameValue(view.getUint32(3, true), 1717920771); + view.setUint32(6, 2172675942, true); + assert.sameValue(view.getUint32(6, true), 2172675942); + view.setUint32(9, 4236477057, true); + assert.sameValue(view.getUint32(9, true), 4236477057); + view.setUint32(12, 4294901244, true); + assert.sameValue(view.getUint32(12, true), 4294901244); + view.setUint32(0, 66051); + assert.sameValue(view.getUint32(0), 66051); + view.setUint32(3, 56911206); + assert.sameValue(view.getUint32(3), 56911206); + view.setUint32(6, 1718059137); + assert.sameValue(view.getUint32(6), 1718059137); + view.setUint32(9, 2172814332); + assert.sameValue(view.getUint32(9), 2172814332); + view.setUint32(12, 4244504319); + assert.sameValue(view.getUint32(12), 4244504319); + + // testFloatSets(start=undefined) + + // testFloatSet expected=10 + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat32(0, 10, true); + assert.sameValue(view.getFloat32(0, true), 10); + var buffer13_pad3 = bufferize(new Uint8Array(Array(3).concat(data13))); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat32(3, 10, true); + assert.sameValue(view.getFloat32(3, true), 10); + var buffer13_pad7 = bufferize(new Uint8Array(Array(7).concat(data13))); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat32(7, 10, true); + assert.sameValue(view.getFloat32(7, true), 10); + var buffer13_pad10 = bufferize(new Uint8Array(Array(10).concat(data13))); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat32(10, 10, true); + assert.sameValue(view.getFloat32(10, true), 10); + // Big endian. + var buffer13_r = bufferize(new Uint8Array(data13_r)); + view = new DataView(buffer13_r, 0, 16); + view.setFloat32(0, 10, false); + assert.sameValue(view.getFloat32(0, false), 10); + var buffer13_r_pad3 = bufferize(new Uint8Array(Array(3).concat(data13_r))); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat32(3, 10, false); + assert.sameValue(view.getFloat32(3, false), 10); + var buffer13_r_pad7 = bufferize(new Uint8Array(Array(7).concat(data13_r))); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat32(7, 10, false); + assert.sameValue(view.getFloat32(7, false), 10); + var buffer13_r_pad10 = bufferize(new Uint8Array(Array(10).concat(data13_r))); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat32(10, 10, false); + assert.sameValue(view.getFloat32(10, false), 10); + + // testFloatSet expected=1.2300000190734863 + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat32(0, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(0, true), 1.2300000190734863); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat32(3, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(3, true), 1.2300000190734863); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat32(7, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(7, true), 1.2300000190734863); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat32(10, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(10, true), 1.2300000190734863); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat32(0, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(0, false), 1.2300000190734863); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat32(3, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(3, false), 1.2300000190734863); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat32(7, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(7, false), 1.2300000190734863); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat32(10, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(10, false), 1.2300000190734863); + + // testFloatSet expected=-45621.37109375 + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat32(0, -45621.37109375, true); + assert.sameValue(view.getFloat32(0, true), -45621.37109375); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat32(3, -45621.37109375, true); + assert.sameValue(view.getFloat32(3, true), -45621.37109375); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat32(7, -45621.37109375, true); + assert.sameValue(view.getFloat32(7, true), -45621.37109375); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat32(10, -45621.37109375, true); + assert.sameValue(view.getFloat32(10, true), -45621.37109375); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat32(0, -45621.37109375, false); + assert.sameValue(view.getFloat32(0, false), -45621.37109375); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat32(3, -45621.37109375, false); + assert.sameValue(view.getFloat32(3, false), -45621.37109375); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat32(7, -45621.37109375, false); + assert.sameValue(view.getFloat32(7, false), -45621.37109375); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat32(10, -45621.37109375, false); + assert.sameValue(view.getFloat32(10, false), -45621.37109375); + + // testFloatSet expected=NaN + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat32(0, NaN, true); + assert.sameValue(view.getFloat32(0, true), NaN); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat32(3, NaN, true); + assert.sameValue(view.getFloat32(3, true), NaN); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat32(7, NaN, true); + assert.sameValue(view.getFloat32(7, true), NaN); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat32(10, NaN, true); + assert.sameValue(view.getFloat32(10, true), NaN); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat32(0, NaN, false); + assert.sameValue(view.getFloat32(0, false), NaN); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat32(3, NaN, false); + assert.sameValue(view.getFloat32(3, false), NaN); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat32(7, NaN, false); + assert.sameValue(view.getFloat32(7, false), NaN); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat32(10, NaN, false); + assert.sameValue(view.getFloat32(10, false), NaN); + + // testFloatSet expected=-NaN + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat32(0, -NaN, true); + assert.sameValue(view.getFloat32(0, true), -NaN); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat32(3, -NaN, true); + assert.sameValue(view.getFloat32(3, true), -NaN); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat32(7, -NaN, true); + assert.sameValue(view.getFloat32(7, true), -NaN); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat32(10, -NaN, true); + assert.sameValue(view.getFloat32(10, true), -NaN); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat32(0, -NaN, false); + assert.sameValue(view.getFloat32(0, false), -NaN); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat32(3, -NaN, false); + assert.sameValue(view.getFloat32(3, false), -NaN); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat32(7, -NaN, false); + assert.sameValue(view.getFloat32(7, false), -NaN); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat32(10, -NaN, false); + assert.sameValue(view.getFloat32(10, false), -NaN); + + // testFloatSet expected=10 + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat64(0, 10, true); + assert.sameValue(view.getFloat64(0, true), 10); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat64(3, 10, true); + assert.sameValue(view.getFloat64(3, true), 10); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat64(7, 10, true); + assert.sameValue(view.getFloat64(7, true), 10); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat64(10, 10, true); + assert.sameValue(view.getFloat64(10, true), 10); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat64(0, 10, false); + assert.sameValue(view.getFloat64(0, false), 10); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat64(3, 10, false); + assert.sameValue(view.getFloat64(3, false), 10); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat64(7, 10, false); + assert.sameValue(view.getFloat64(7, false), 10); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat64(10, 10, false); + assert.sameValue(view.getFloat64(10, false), 10); + + // testFloatSet expected=1.23 + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat64(0, 1.23, true); + assert.sameValue(view.getFloat64(0, true), 1.23); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat64(3, 1.23, true); + assert.sameValue(view.getFloat64(3, true), 1.23); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat64(7, 1.23, true); + assert.sameValue(view.getFloat64(7, true), 1.23); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat64(10, 1.23, true); + assert.sameValue(view.getFloat64(10, true), 1.23); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat64(0, 1.23, false); + assert.sameValue(view.getFloat64(0, false), 1.23); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat64(3, 1.23, false); + assert.sameValue(view.getFloat64(3, false), 1.23); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat64(7, 1.23, false); + assert.sameValue(view.getFloat64(7, false), 1.23); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat64(10, 1.23, false); + assert.sameValue(view.getFloat64(10, false), 1.23); + + // testFloatSet expected=-6213576.4839 + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat64(0, -6213576.4839, true); + assert.sameValue(view.getFloat64(0, true), -6213576.4839); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat64(3, -6213576.4839, true); + assert.sameValue(view.getFloat64(3, true), -6213576.4839); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat64(7, -6213576.4839, true); + assert.sameValue(view.getFloat64(7, true), -6213576.4839); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat64(10, -6213576.4839, true); + assert.sameValue(view.getFloat64(10, true), -6213576.4839); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat64(0, -6213576.4839, false); + assert.sameValue(view.getFloat64(0, false), -6213576.4839); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat64(3, -6213576.4839, false); + assert.sameValue(view.getFloat64(3, false), -6213576.4839); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat64(7, -6213576.4839, false); + assert.sameValue(view.getFloat64(7, false), -6213576.4839); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat64(10, -6213576.4839, false); + assert.sameValue(view.getFloat64(10, false), -6213576.4839); + + // testFloatSet expected=NaN + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat64(0, NaN, true); + assert.sameValue(view.getFloat64(0, true), NaN); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat64(3, NaN, true); + assert.sameValue(view.getFloat64(3, true), NaN); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat64(7, NaN, true); + assert.sameValue(view.getFloat64(7, true), NaN); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat64(10, NaN, true); + assert.sameValue(view.getFloat64(10, true), NaN); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat64(0, NaN, false); + assert.sameValue(view.getFloat64(0, false), NaN); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat64(3, NaN, false); + assert.sameValue(view.getFloat64(3, false), NaN); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat64(7, NaN, false); + assert.sameValue(view.getFloat64(7, false), NaN); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat64(10, NaN, false); + assert.sameValue(view.getFloat64(10, false), NaN); + + // testFloatSet expected=-NaN + // Little endian + view = new DataView(buffer13, 0, 16); + view.setFloat64(0, -NaN, true); + assert.sameValue(view.getFloat64(0, true), -NaN); + view = new DataView(buffer13_pad3, 0, 19); + view.setFloat64(3, -NaN, true); + assert.sameValue(view.getFloat64(3, true), -NaN); + view = new DataView(buffer13_pad7, 0, 23); + view.setFloat64(7, -NaN, true); + assert.sameValue(view.getFloat64(7, true), -NaN); + view = new DataView(buffer13_pad10, 0, 26); + view.setFloat64(10, -NaN, true); + assert.sameValue(view.getFloat64(10, true), -NaN); + // Big endian. + view = new DataView(buffer13_r, 0, 16); + view.setFloat64(0, -NaN, false); + assert.sameValue(view.getFloat64(0, false), -NaN); + view = new DataView(buffer13_r_pad3, 0, 19); + view.setFloat64(3, -NaN, false); + assert.sameValue(view.getFloat64(3, false), -NaN); + view = new DataView(buffer13_r_pad7, 0, 23); + view.setFloat64(7, -NaN, false); + assert.sameValue(view.getFloat64(7, false), -NaN); + view = new DataView(buffer13_r_pad10, 0, 26); + view.setFloat64(10, -NaN, false); + assert.sameValue(view.getFloat64(10, false), -NaN); + + // Test for set methods that might write beyond the range + + // testIntegerSets(start=3, length=2) + view = new DataView(buffer13, 3, 2); + view.setInt8(0, 0); + assert.sameValue(view.getInt8(0), 0); + checkThrow(() => view.setInt8(8, -128), RangeError); + checkThrow(() => view.setInt8(15, -1), RangeError); + view.setUint8(0, 0); + assert.sameValue(view.getUint8(0), 0); + checkThrow(() => view.setUint8(8, 128), RangeError); + checkThrow(() => view.setUint8(15, 255), RangeError); + view.setInt16(0, 256, true); + assert.sameValue(view.getInt16(0, true), 256); + checkThrow(() => view.setInt16(5, 26213, true), RangeError); + checkThrow(() => view.setInt16(9, -32127, true), RangeError); + checkThrow(() => view.setInt16(14, -2, true), RangeError); + view.setInt16(0, 1); + assert.sameValue(view.getInt16(0), 1); + checkThrow(() => view.setInt16(5, 25958), RangeError); + checkThrow(() => view.setInt16(9, -32382), RangeError); + checkThrow(() => view.setInt16(14, -257), RangeError); + view.setUint16(0, 256, true); + assert.sameValue(view.getUint16(0, true), 256); + checkThrow(() => view.setUint16(5, 26213, true), RangeError); + checkThrow(() => view.setUint16(9, 33409, true), RangeError); + checkThrow(() => view.setUint16(14, 65534, true), RangeError); + view.setUint16(0, 1); + assert.sameValue(view.getUint16(0), 1); + checkThrow(() => view.setUint16(5, 25958), RangeError); + checkThrow(() => view.setUint16(9, 33154), RangeError); + checkThrow(() => view.setUint16(14, 65279), RangeError); + checkThrow(() => view.setInt32(0, 50462976, true), RangeError); + checkThrow(() => view.setInt32(3, 1717920771, true), RangeError); + checkThrow(() => view.setInt32(6, -2122291354, true), RangeError); + checkThrow(() => view.setInt32(9, -58490239, true), RangeError); + checkThrow(() => view.setInt32(12, -66052, true), RangeError); + checkThrow(() => view.setInt32(0, 66051), RangeError); + checkThrow(() => view.setInt32(3, 56911206), RangeError); + checkThrow(() => view.setInt32(6, 1718059137), RangeError); + checkThrow(() => view.setInt32(9, -2122152964), RangeError); + checkThrow(() => view.setInt32(12, -50462977), RangeError); + checkThrow(() => view.setUint32(0, 50462976, true), RangeError); + checkThrow(() => view.setUint32(3, 1717920771, true), RangeError); + checkThrow(() => view.setUint32(6, 2172675942, true), RangeError); + checkThrow(() => view.setUint32(9, 4236477057, true), RangeError); + checkThrow(() => view.setUint32(12, 4294901244, true), RangeError); + checkThrow(() => view.setUint32(0, 66051), RangeError); + checkThrow(() => view.setUint32(3, 56911206), RangeError); + checkThrow(() => view.setUint32(6, 1718059137), RangeError); + checkThrow(() => view.setUint32(9, 2172814332), RangeError); + checkThrow(() => view.setUint32(12, 4244504319), RangeError); + + // testFloatSets(start=7) + + // testFloatSet expected=10 + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat32(0, 10, true); + assert.sameValue(view.getFloat32(0, true), 10); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat32(3, 10, true); + assert.sameValue(view.getFloat32(3, true), 10); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat32(7, 10, true); + assert.sameValue(view.getFloat32(7, true), 10); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat32(10, 10, true); + assert.sameValue(view.getFloat32(10, true), 10); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat32(0, 10, false); + assert.sameValue(view.getFloat32(0, false), 10); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat32(3, 10, false); + assert.sameValue(view.getFloat32(3, false), 10); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat32(7, 10, false); + assert.sameValue(view.getFloat32(7, false), 10); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat32(10, 10, false); + assert.sameValue(view.getFloat32(10, false), 10); + + // testFloatSet expected=1.2300000190734863 + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat32(0, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(0, true), 1.2300000190734863); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat32(3, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(3, true), 1.2300000190734863); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat32(7, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(7, true), 1.2300000190734863); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat32(10, 1.2300000190734863, true); + assert.sameValue(view.getFloat32(10, true), 1.2300000190734863); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat32(0, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(0, false), 1.2300000190734863); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat32(3, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(3, false), 1.2300000190734863); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat32(7, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(7, false), 1.2300000190734863); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat32(10, 1.2300000190734863, false); + assert.sameValue(view.getFloat32(10, false), 1.2300000190734863); + + // testFloatSet expected=-45621.37109375 + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat32(0, -45621.37109375, true); + assert.sameValue(view.getFloat32(0, true), -45621.37109375); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat32(3, -45621.37109375, true); + assert.sameValue(view.getFloat32(3, true), -45621.37109375); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat32(7, -45621.37109375, true); + assert.sameValue(view.getFloat32(7, true), -45621.37109375); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat32(10, -45621.37109375, true); + assert.sameValue(view.getFloat32(10, true), -45621.37109375); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat32(0, -45621.37109375, false); + assert.sameValue(view.getFloat32(0, false), -45621.37109375); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat32(3, -45621.37109375, false); + assert.sameValue(view.getFloat32(3, false), -45621.37109375); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat32(7, -45621.37109375, false); + assert.sameValue(view.getFloat32(7, false), -45621.37109375); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat32(10, -45621.37109375, false); + assert.sameValue(view.getFloat32(10, false), -45621.37109375); + + // testFloatSet expected=NaN + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat32(0, NaN, true); + assert.sameValue(view.getFloat32(0, true), NaN); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat32(3, NaN, true); + assert.sameValue(view.getFloat32(3, true), NaN); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat32(7, NaN, true); + assert.sameValue(view.getFloat32(7, true), NaN); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat32(10, NaN, true); + assert.sameValue(view.getFloat32(10, true), NaN); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat32(0, NaN, false); + assert.sameValue(view.getFloat32(0, false), NaN); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat32(3, NaN, false); + assert.sameValue(view.getFloat32(3, false), NaN); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat32(7, NaN, false); + assert.sameValue(view.getFloat32(7, false), NaN); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat32(10, NaN, false); + assert.sameValue(view.getFloat32(10, false), NaN); + + // testFloatSet expected=-NaN + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat32(0, -NaN, true); + assert.sameValue(view.getFloat32(0, true), -NaN); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat32(3, -NaN, true); + assert.sameValue(view.getFloat32(3, true), -NaN); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat32(7, -NaN, true); + assert.sameValue(view.getFloat32(7, true), -NaN); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat32(10, -NaN, true); + assert.sameValue(view.getFloat32(10, true), -NaN); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat32(0, -NaN, false); + assert.sameValue(view.getFloat32(0, false), -NaN); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat32(3, -NaN, false); + assert.sameValue(view.getFloat32(3, false), -NaN); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat32(7, -NaN, false); + assert.sameValue(view.getFloat32(7, false), -NaN); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat32(10, -NaN, false); + assert.sameValue(view.getFloat32(10, false), -NaN); + + // testFloatSet expected=10 + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat64(0, 10, true); + assert.sameValue(view.getFloat64(0, true), 10); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat64(3, 10, true); + assert.sameValue(view.getFloat64(3, true), 10); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat64(7, 10, true); + assert.sameValue(view.getFloat64(7, true), 10); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat64(10, 10, true); + assert.sameValue(view.getFloat64(10, true), 10); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat64(0, 10, false); + assert.sameValue(view.getFloat64(0, false), 10); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat64(3, 10, false); + assert.sameValue(view.getFloat64(3, false), 10); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat64(7, 10, false); + assert.sameValue(view.getFloat64(7, false), 10); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat64(10, 10, false); + assert.sameValue(view.getFloat64(10, false), 10); + + // testFloatSet expected=1.23 + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat64(0, 1.23, true); + assert.sameValue(view.getFloat64(0, true), 1.23); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat64(3, 1.23, true); + assert.sameValue(view.getFloat64(3, true), 1.23); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat64(7, 1.23, true); + assert.sameValue(view.getFloat64(7, true), 1.23); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat64(10, 1.23, true); + assert.sameValue(view.getFloat64(10, true), 1.23); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat64(0, 1.23, false); + assert.sameValue(view.getFloat64(0, false), 1.23); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat64(3, 1.23, false); + assert.sameValue(view.getFloat64(3, false), 1.23); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat64(7, 1.23, false); + assert.sameValue(view.getFloat64(7, false), 1.23); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat64(10, 1.23, false); + assert.sameValue(view.getFloat64(10, false), 1.23); + + // testFloatSet expected=-6213576.4839 + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat64(0, -6213576.4839, true); + assert.sameValue(view.getFloat64(0, true), -6213576.4839); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat64(3, -6213576.4839, true); + assert.sameValue(view.getFloat64(3, true), -6213576.4839); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat64(7, -6213576.4839, true); + assert.sameValue(view.getFloat64(7, true), -6213576.4839); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat64(10, -6213576.4839, true); + assert.sameValue(view.getFloat64(10, true), -6213576.4839); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat64(0, -6213576.4839, false); + assert.sameValue(view.getFloat64(0, false), -6213576.4839); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat64(3, -6213576.4839, false); + assert.sameValue(view.getFloat64(3, false), -6213576.4839); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat64(7, -6213576.4839, false); + assert.sameValue(view.getFloat64(7, false), -6213576.4839); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat64(10, -6213576.4839, false); + assert.sameValue(view.getFloat64(10, false), -6213576.4839); + + // testFloatSet expected=NaN + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat64(0, NaN, true); + assert.sameValue(view.getFloat64(0, true), NaN); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat64(3, NaN, true); + assert.sameValue(view.getFloat64(3, true), NaN); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat64(7, NaN, true); + assert.sameValue(view.getFloat64(7, true), NaN); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat64(10, NaN, true); + assert.sameValue(view.getFloat64(10, true), NaN); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat64(0, NaN, false); + assert.sameValue(view.getFloat64(0, false), NaN); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat64(3, NaN, false); + assert.sameValue(view.getFloat64(3, false), NaN); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat64(7, NaN, false); + assert.sameValue(view.getFloat64(7, false), NaN); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat64(10, NaN, false); + assert.sameValue(view.getFloat64(10, false), NaN); + + // testFloatSet expected=-NaN + // Little endian + view = new DataView(buffer13, 7, 9); + view.setFloat64(0, -NaN, true); + assert.sameValue(view.getFloat64(0, true), -NaN); + view = new DataView(buffer13_pad3, 7, 12); + view.setFloat64(3, -NaN, true); + assert.sameValue(view.getFloat64(3, true), -NaN); + view = new DataView(buffer13_pad7, 7, 16); + view.setFloat64(7, -NaN, true); + assert.sameValue(view.getFloat64(7, true), -NaN); + view = new DataView(buffer13_pad10, 7, 19); + view.setFloat64(10, -NaN, true); + assert.sameValue(view.getFloat64(10, true), -NaN); + // Big endian. + view = new DataView(buffer13_r, 7, 9); + view.setFloat64(0, -NaN, false); + assert.sameValue(view.getFloat64(0, false), -NaN); + view = new DataView(buffer13_r_pad3, 7, 12); + view.setFloat64(3, -NaN, false); + assert.sameValue(view.getFloat64(3, false), -NaN); + view = new DataView(buffer13_r_pad7, 7, 16); + view.setFloat64(7, -NaN, false); + assert.sameValue(view.getFloat64(7, false), -NaN); + view = new DataView(buffer13_r_pad10, 7, 19); + view.setFloat64(10, -NaN, false); + assert.sameValue(view.getFloat64(10, false), -NaN); + + // Test for set methods that write to negative index + + // testSetNegativeIndexes + view = new DataView(buffer1, 0, 16); + checkThrow(() => view.setInt8(-1, 0), RangeError); + checkThrow(() => view.setInt8(-2, 0), RangeError); + checkThrow(() => view.setUint8(-1, 0), RangeError); + checkThrow(() => view.setUint8(-2, 0), RangeError); + checkThrow(() => view.setInt16(-1, 0), RangeError); + checkThrow(() => view.setInt16(-2, 0), RangeError); + checkThrow(() => view.setInt16(-3, 0), RangeError); + checkThrow(() => view.setUint16(-1, 0), RangeError); + checkThrow(() => view.setUint16(-2, 0), RangeError); + checkThrow(() => view.setUint16(-3, 0), RangeError); + checkThrow(() => view.setInt32(-1, 0), RangeError); + checkThrow(() => view.setInt32(-3, 0), RangeError); + checkThrow(() => view.setInt32(-5, 0), RangeError); + checkThrow(() => view.setUint32(-1, 0), RangeError); + checkThrow(() => view.setUint32(-3, 0), RangeError); + checkThrow(() => view.setUint32(-5, 0), RangeError); + view = new DataView(buffer7, 0, 8); + checkThrow(() => view.setFloat32(-1, 0), RangeError); + checkThrow(() => view.setFloat32(-3, 0), RangeError); + checkThrow(() => view.setFloat32(-5, 0), RangeError); + checkThrow(() => view.setFloat64(-1, 0), RangeError); + checkThrow(() => view.setFloat64(-5, 0), RangeError); + checkThrow(() => view.setFloat64(-9, 0), RangeError); + + // Too large for signed 32 bit integer index + checkThrow(() => view.setInt8(2147483649, 1), RangeError); + checkThrow(() => view.setUint8(2147483649, 1), RangeError); + checkThrow(() => view.setInt16(2147483649, 1), RangeError); + checkThrow(() => view.setUint16(2147483649, 1), RangeError); + checkThrow(() => view.setInt32(2147483649, 1), RangeError); + checkThrow(() => view.setUint32(2147483649, 1), RangeError); + checkThrow(() => view.setFloat32(2147483649, 1), RangeError); + checkThrow(() => view.setFloat64(2147483649, 1), RangeError); + + // testAlignment + var intArray1 = [0, 1, 2, 3, 100, 101, 102, 103, 128, 129, 130, 131, 252, 253, 254, 255]; + view = new DataView(bufferize(new Uint8Array(intArray1)), 0); + assert.sameValue(view.getUint32(0, false), 0x00010203); + view = new DataView(bufferize(new Uint8Array(intArray1)), 1); + assert.sameValue(view.getUint32(0, false), 0x01020364); + view = new DataView(bufferize(new Uint8Array(intArray1)), 2); + assert.sameValue(view.getUint32(0, false), 0x02036465); + view = new DataView(bufferize(new Uint8Array(intArray1)), 3); + assert.sameValue(view.getUint32(0, false), 0x03646566); + view = new DataView(bufferize(new Uint8Array(intArray1)), 4); + assert.sameValue(view.getUint32(0, false), 0x64656667); + view = new DataView(bufferize(new Uint8Array(intArray1)), 5); + assert.sameValue(view.getUint32(0, false), 0x65666780); + view = new DataView(bufferize(new Uint8Array(intArray1)), 6); + assert.sameValue(view.getUint32(0, false), 0x66678081); + view = new DataView(bufferize(new Uint8Array(intArray1)), 7); + assert.sameValue(view.getUint32(0, false), 0x67808182); + + // Test for indexing into a DataView, which should not use the ArrayBuffer storage + view = new DataView(bufferize(new Uint8Array([1, 2]))); + assert.sameValue(view[0], undefined); + view[0] = 3; + assert.sameValue(view[0], 3); + assert.sameValue(view.getUint8(0), 1); + + // Test WebIDL-specific class and prototype class names + assert.sameValue(Object.prototype.toString.apply(new Uint8Array(0)), "[object Uint8Array]"); + assert.sameValue(Object.prototype.toString.apply(new Float32Array(0)), "[object Float32Array]"); + assert.sameValue(Object.prototype.toString.apply(new ArrayBuffer()), "[object ArrayBuffer]"); + assert.sameValue(Object.prototype.toString.apply(new DataView(view.buffer)), "[object DataView]"); + assert.sameValue(Object.prototype.toString.apply(DataView.prototype), "[object DataView]"); + + // get %TypedArray%.prototype[@@toStringTag] returns undefined thus + // Object.prototype.toString falls back to [object Object] + assert.sameValue(Object.prototype.toString.apply(Uint8Array.prototype), "[object Object]"); + assert.sameValue(Object.prototype.toString.apply(Float32Array.prototype), "[object Object]"); + var typedArrayPrototype = Object.getPrototypeOf(Float32Array.prototype); + assert.sameValue(Object.prototype.toString.apply(typedArrayPrototype), "[object Object]"); + + // Accessing DataView fields on DataView.prototype should crash + checkThrow(() => DataView.prototype.byteLength, TypeError); + checkThrow(() => DataView.prototype.byteOffset, TypeError); + checkThrow(() => DataView.prototype.buffer, TypeError); + + // Protos and proxies, oh my! + var alien = createNewGlobal(); + var alien_data = alien.eval('data = ' + JSON.stringify(data1)); + var alien_buffer = alien.eval(`buffer = new ${sharedMem ? 'Shared' : ''}ArrayBuffer(data.length)`); + alien.eval('new Uint8Array(buffer).set(data)'); + var alien_view = alien.eval('view = new DataView(buffer, 0, 16)'); + + // proto is view of buffer: should throw + var o = Object.create(view1); + checkThrow(() => o.getUint8(4), TypeError); // WebIDL 4.4.7: Operations + checkThrow(() => o.buffer, TypeError); // WebIDL 4.4.6: Attributes, section 2 + checkThrow(() => o.byteOffset, TypeError); + checkThrow(() => o.byteLength, TypeError); + + // proxy for view of buffer: should work + assert.sameValue(alien_view.buffer.byteLength > 0, true); + assert.sameValue(alien_view.getUint8(4), 100); + + // Bug 753996: when throwing an Error whose message contains the name of a + // function, the JS engine calls js_ValueToFunction to produce the function + // name to include in the message. js_ValueToFunction does not unwrap its + // argument. So if the function is actually a wrapper, then + // js_ValueToFunction will throw a TypeError ("X is not a function"). + // Confusingly, this TypeError uses the decompiler, which *will* unwrap the + // object to get the wrapped function name out, so the final error will + // look something like "SomeFunction() is not a function".) + var weirdo = Object.create(alien.eval("new Date")); + var e = null; + try { + weirdo.getTime(); + } catch (exc) { + e = exc; + } + if (!e) { + print("==== TODO but PASSED? ===="); + print("Bug 753996 unexpectedly passed"); + } + + // proto is proxy for view of buffer: should throw TypeError + // + // As of this writing, bug 753996 causes this to throw the *wrong* + // TypeError, and in fact it throws a (thisglobal).TypeError instead of + // alien.TypeError. + var av = Object.create(alien_view); + checkThrowTODO(() => av.getUint8(4), alien.TypeError); + checkThrowTODO(() => av.buffer, alien.TypeError); + + // view of object whose proto is buffer. This should not work per dherman. + // Note that DataView throws a TypeError while TypedArrays create a + // zero-length view. Odd though it seems, this is correct: TypedArrays have + // a constructor that takes a length argument; DataViews do not. So a + // TypedArray will do ToUint32 and end up passing a zero as the + // constructor's length argument. + buffer = Object.create(buffer1); + checkThrow(() => new DataView(buffer), TypeError); + + // view of proxy for buffer + av = new DataView(alien_buffer); + assert.sameValue(av.getUint8(4), 100); + assert.sameValue(Object.getPrototypeOf(av), DataView.prototype); + + // Bug 760904: call another compartment's constructor with an ArrayBuffer + // from this compartment. + var alien_constructor = alien.DataView; + var local_buffer = (new Int8Array(3)).buffer; + var foreign_exchange_student = new alien_constructor(local_buffer); + + // gc bug 787775 + var ab = new ArrayBuffer(4); + var dv = new DataView(ab); + dv = 1; + gc(); + + // Bug 1438569. + dv = new DataView(new ArrayBuffer(20 * 1024 * 1024)); + dv.setInt8(dv.byteLength - 10, 99); + assert.sameValue(dv.getInt8(dv.byteLength - 10), 99); + + // get/setFloat16 + dv = new DataView(new ArrayBuffer(4)); + if (DataView.prototype.getFloat16) { + dv.setInt16(0, 18688); + assert.sameValue(dv.getFloat16(0), 10); + dv.setFloat16(1, 10); + assert.sameValue(dv.getFloat16(1), 10); + assert.sameValue(dv.getInt16(1), 18688); + } + +} + +test(false); + +if (this.SharedArrayBuffer) + test(true); diff --git a/test/staging/sm/extensions/decompile-for-of.js b/test/staging/sm/extensions/decompile-for-of.js new file mode 100644 index 0000000000..3c19085fbc --- /dev/null +++ b/test/staging/sm/extensions/decompile-for-of.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// The decompiler can handle the implicit call to @@iterator in a for-of loop. + +var x; +function check(code, msg) { + assertThrowsInstanceOfWithMessage( + () => eval(code), + TypeError, + msg); +} + +x = {}; +check("for (var v of x) throw fit;", "x is not iterable"); +check("[...x]", "x is not iterable"); +check("Math.hypot(...x)", "x is not iterable"); + +x[Symbol.iterator] = "potato"; +check("for (var v of x) throw fit;", "x is not iterable"); + +x[Symbol.iterator] = {}; +check("for (var v of x) throw fit;", "x[Symbol.iterator] is not a function"); + diff --git a/test/staging/sm/extensions/destructure-accessor.js b/test/staging/sm/extensions/destructure-accessor.js new file mode 100644 index 0000000000..17bb4eeb49 --- /dev/null +++ b/test/staging/sm/extensions/destructure-accessor.js @@ -0,0 +1,84 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'destructure-accessor.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 536472; +var summary = + 'ES5: { get x(v) { } } and { set x(v, v2) { } } should be syntax errors'; + +print(BUGNUMBER + ": " + summary); + +//----------------------------------------------------------------------------- + +function expectOk(s) +{ + try + { + eval(s); + return; + } + catch (e) + { + assert.sameValue(true, false, + "expected no error parsing '" + "', got : " + e); + } +} + +function expectSyntaxError(s) +{ + try + { + eval(s); + throw new Error("no error thrown"); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "expected syntax error parsing '" + s + "', got: " + e); + } +} + +expectSyntaxError("({ get x([]) { } })"); +expectSyntaxError("({ get x({}) { } })"); +expectSyntaxError("({ get x(a, []) { } })"); +expectSyntaxError("({ get x(a, {}) { } })"); +expectSyntaxError("({ get x([], a) { } })"); +expectSyntaxError("({ get x({}, a) { } })"); +expectSyntaxError("({ get x([], a, []) { } })"); +expectSyntaxError("({ get x([], a, {}) { } })"); +expectSyntaxError("({ get x({}, a, []) { } })"); +expectSyntaxError("({ get x({}, a, {}) { } })"); + +expectOk("({ get x() { } })"); + + +expectSyntaxError("({ set x() { } })"); +expectSyntaxError("({ set x(a, []) { } })"); +expectSyntaxError("({ set x(a, b, c) { } })"); + +expectOk("({ set x([]) { } })"); +expectOk("({ set x({}) { } })"); +expectOk("({ set x([a]) { } })"); +expectOk("({ set x([a, b]) { } })"); +expectOk("({ set x([a,]) { } })"); +expectOk("({ set x([a, b,]) { } })"); +expectOk("({ set x([, b]) { } })"); +expectOk("({ set x([, b,]) { } })"); +expectOk("({ set x([, b, c]) { } })"); +expectOk("({ set x([, b, c,]) { } })"); +expectOk("({ set x({ a: a }) { } })"); +expectOk("({ set x({ a: a, b: b }) { } })"); + +//----------------------------------------------------------------------------- + diff --git a/test/staging/sm/extensions/destructuring-__proto__-shorthand-assignment-before-var.js b/test/staging/sm/extensions/destructuring-__proto__-shorthand-assignment-before-var.js new file mode 100644 index 0000000000..4677166536 --- /dev/null +++ b/test/staging/sm/extensions/destructuring-__proto__-shorthand-assignment-before-var.js @@ -0,0 +1,54 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'destructuring-__proto__-shorthand-assignment-before-var.js'; +var BUGNUMBER = 963641; +var summary = "{ __proto__ } should work as a destructuring assignment pattern"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +({ __proto__ } = objectWithProtoProperty(17)); +assert.sameValue(__proto__, 17); + +var { __proto__ } = objectWithProtoProperty(42); +assert.sameValue(__proto__, 42); + +function nested() +{ + ({ __proto__ } = objectWithProtoProperty(undefined)); + assert.sameValue(__proto__, undefined); + + var { __proto__ } = objectWithProtoProperty("fnord"); + assert.sameValue(__proto__, "fnord"); +} +nested(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/destructuring-__proto__-shorthand-assignment.js b/test/staging/sm/extensions/destructuring-__proto__-shorthand-assignment.js new file mode 100644 index 0000000000..2ffdbda7b9 --- /dev/null +++ b/test/staging/sm/extensions/destructuring-__proto__-shorthand-assignment.js @@ -0,0 +1,54 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'destructuring-__proto__-shorthand-assignment.js'; +var BUGNUMBER = 963641; +var summary = "{ __proto__ } should work as a destructuring assignment pattern"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +var { __proto__ } = objectWithProtoProperty(42); +assert.sameValue(__proto__, 42); + +({ __proto__ } = objectWithProtoProperty(17)); +assert.sameValue(__proto__, 17); + +function nested() +{ + var { __proto__ } = objectWithProtoProperty("fnord"); + assert.sameValue(__proto__, "fnord"); + + ({ __proto__ } = objectWithProtoProperty(undefined)); + assert.sameValue(__proto__, undefined); +} +nested(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/destructuring-__proto__-target-assignment.js b/test/staging/sm/extensions/destructuring-__proto__-target-assignment.js new file mode 100644 index 0000000000..dd6356139c --- /dev/null +++ b/test/staging/sm/extensions/destructuring-__proto__-target-assignment.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'destructuring-__proto__-target--assignment.js'; +var BUGNUMBER = 963641; +var summary = + "{ __proto__: target } should work as a destructuring assignment pattern"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +var { __proto__: target } = objectWithProtoProperty(null); +assert.sameValue(target, null); + +({ __proto__: target } = objectWithProtoProperty("aacchhorrt")); +assert.sameValue(target, "aacchhorrt"); + +function nested() +{ + var { __proto__: target } = objectWithProtoProperty(3.141592654); + assert.sameValue(target, 3.141592654); + + ({ __proto__: target } = objectWithProtoProperty(-0)); + assert.sameValue(target, -0); +} +nested(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/destructuring-for-inof-__proto__.js b/test/staging/sm/extensions/destructuring-for-inof-__proto__.js new file mode 100644 index 0000000000..06c4471a6f --- /dev/null +++ b/test/staging/sm/extensions/destructuring-for-inof-__proto__.js @@ -0,0 +1,90 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'destructuring-for-inof-__proto__.js'; +var BUGNUMBER = 963641; +var summary = + "__proto__ should work in destructuring patterns as the targets of " + + "for-in/for-of loops"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +function* objectWithProtoGenerator(v) +{ + yield objectWithProtoProperty(v); +} + +function* identityGenerator(v) +{ + yield v; +} + +for (var { __proto__: target } of objectWithProtoGenerator(null)) + assert.sameValue(target, null); + +for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt")) + assert.sameValue(target, "aacchhorrt"); + +for ({ __proto__: target } of identityGenerator(42)) + assert.sameValue(target, Number.prototype); + +for (var { __proto__: target } in { prop: "kneedle" }) + assert.sameValue(target, String.prototype); + +for ({ __proto__: target } in { prop: "snork" }) + assert.sameValue(target, String.prototype); + +for ({ __proto__: target } in { prop: "ohia" }) + assert.sameValue(target, String.prototype); + +function nested() +{ + for (var { __proto__: target } of objectWithProtoGenerator(null)) + assert.sameValue(target, null); + + for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt")) + assert.sameValue(target, "aacchhorrt"); + + for ({ __proto__: target } of identityGenerator(42)) + assert.sameValue(target, Number.prototype); + + for (var { __proto__: target } in { prop: "kneedle" }) + assert.sameValue(target, String.prototype); + + for ({ __proto__: target } in { prop: "snork" }) + assert.sameValue(target, String.prototype); + + for ({ __proto__: target } in { prop: "ohia" }) + assert.sameValue(target, String.prototype); +} +nested(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/element-setting-ToNumber-detaches.js b/test/staging/sm/extensions/element-setting-ToNumber-detaches.js new file mode 100644 index 0000000000..2e77588a47 --- /dev/null +++ b/test/staging/sm/extensions/element-setting-ToNumber-detaches.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; // make test fail when limitation below is fixed + +var gTestfile = 'element-setting-ToNumber-detaches.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1001547; +var summary = + "Don't assert assigning into memory detached while converting the value to " + + "assign into a number"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Technically per current spec the element-sets should throw in strict mode, +// but we just silently do nothing for now, somewhat due to limitations of our +// internal MOP (which can't easily say "try this special behavior, else fall +// back on normal logic"), somewhat because it's consistent with current +// behavior (as of this test's addition) for out-of-bounds sets. + +var ab = new ArrayBuffer(64); +var ta = new Uint32Array(ab); +ta[4] = { valueOf() { $262.detachArrayBuffer(ab); return 5; } }; + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/empty.txt b/test/staging/sm/extensions/empty.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/staging/sm/extensions/error-tostring-function.js b/test/staging/sm/extensions/error-tostring-function.js new file mode 100644 index 0000000000..c34bb04e24 --- /dev/null +++ b/test/staging/sm/extensions/error-tostring-function.js @@ -0,0 +1,52 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 894653; +var summary = + "Error.prototype.toString called on function objects should work as on any " + + "object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function ErrorToString(v) +{ + return Error.prototype.toString.call(v); +} + +// The name property of function objects isn't standardized, so this must be an +// extension-land test. + +assert.sameValue(ErrorToString(function f(){}), "f"); +assert.sameValue(ErrorToString(function g(){}), "g"); +assert.sameValue(ErrorToString(function(){}), ""); + +var fn1 = function() {}; +fn1.message = "ohai"; +assert.sameValue(ErrorToString(fn1), "fn1: ohai"); + +var fn2 = function blerch() {}; +fn2.message = "fnord"; +assert.sameValue(ErrorToString(fn2), "blerch: fnord"); + +var fn3 = function() {}; +fn3.message = ""; +assert.sameValue(ErrorToString(fn3), "fn3"); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/extensions/es5ish-defineGetter-defineSetter.js b/test/staging/sm/extensions/es5ish-defineGetter-defineSetter.js new file mode 100644 index 0000000000..6bd402da3b --- /dev/null +++ b/test/staging/sm/extensions/es5ish-defineGetter-defineSetter.js @@ -0,0 +1,288 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 715821; +var summary = "Implement __define[GS]etter__ using Object.defineProperty"; + +print(BUGNUMBER + ": " + summary); + +/************* + * UTILITIES * + *************/ + +function s(desc) +{ + if (typeof desc === "undefined") + return ""; + assert.sameValue(typeof desc, "object"); + assert.sameValue(desc !== null, true); + + var str = ", " + + " configurable: <" + desc.configurable + ">,"; + + if (desc.hasOwnProperty("value")) + { + return str + + " value: <" + desc.value + ">," + + " writable: <" + desc.writable + ">>"; + } + + return str + + " get: <" + desc.get + ">," + + " set: <" + desc.set + ">>"; +} + +function checkField(field, desc, expected) +{ + var present = desc.hasOwnProperty(field); + assert.sameValue(present, expected.hasOwnProperty(field), + field + " presence mismatch (got " + s(desc) + ", expected " + s(expected) + ")"); + if (present) + { + assert.sameValue(desc[field], expected[field], + field + " value mismatch (got " + s(desc) + ", expected " + s(expected) + ")"); + } +} + +function check(obj, prop, expected) +{ + var desc = Object.getOwnPropertyDescriptor(obj, prop); + assert.sameValue(typeof desc, typeof expected, + "type mismatch (got " + s(desc) + ", expected " + s(expected) + ")"); + + assert.sameValue(desc.hasOwnProperty("get"), desc.hasOwnProperty("set"), + "bad descriptor: " + s(desc)); + assert.sameValue(desc.hasOwnProperty("value"), desc.hasOwnProperty("writable"), + "bad descriptor: " + s(desc)); + + assert.sameValue(desc.hasOwnProperty("get"), !desc.hasOwnProperty("value"), + "bad descriptor: " + s(desc)); + + checkField("get", desc, expected); + checkField("set", desc, expected); + checkField("value", desc, expected); + checkField("writable", desc, expected); + checkField("enumerable", desc, expected); + checkField("configurable", desc, expected); +} + +function expectTypeError(f) +{ + try + { + f(); + throw new Error("no error thrown"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "wrong error thrown: got " + e + ", not a TypeError"); + } +} + +/************** + * BEGIN TEST * + **************/ + +// Adding a new getter, overwriting an existing one + +function g1() { } +var gobj = {}; +gobj.__defineGetter__("foo", g1); +check(gobj, "foo", { get: g1, set: undefined, enumerable: true, configurable: true }); + +function g2() { } +gobj.__defineGetter__("foo", g2); +check(gobj, "foo", { get: g2, set: undefined, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a new setter, overwriting an existing one + +function s1() { } +var sobj = {}; +sobj.__defineSetter__("bar", s1); +check(sobj, "bar", { get: undefined, set: s1, enumerable: true, configurable: true }); + +function s2() { } +sobj.__defineSetter__("bar", s2); +check(sobj, "bar", { get: undefined, set: s2, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a new getter, then adding a setter +// Changing an existing accessor's enumerability, then "null"-changing the accessor +// Changing an accessor's configurability, then "null"-changing and real-changing the accessor + +function g3() { } +var gsobj = {}; +gsobj.__defineGetter__("baz", g3); +check(gsobj, "baz", { get: g3, set: undefined, enumerable: true, configurable: true }); + +function s3() { } +gsobj.__defineSetter__("baz", s3); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true }); + +Object.defineProperty(gsobj, "baz", { enumerable: false }); +check(gsobj, "baz", { get: g3, set: s3, enumerable: false, configurable: true }); + +gsobj.__defineGetter__("baz", g3); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true }); + +Object.defineProperty(gsobj, "baz", { enumerable: false }); +check(gsobj, "baz", { get: g3, set: s3, enumerable: false, configurable: true }); + +gsobj.__defineSetter__("baz", s3); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true }); + +Object.defineProperty(gsobj, "baz", { configurable: false }); +expectTypeError(function() { gsobj.__defineSetter__("baz", s2); }); +expectTypeError(function() { gsobj.__defineSetter__("baz", s3); }); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a new setter, then adding a getter +// Changing an existing accessor's enumerability, then "null"-changing the accessor +// Changing an accessor's configurability, then "null"-changing and real-changing the accessor + +function s4() { } +var sgobj = {}; +sgobj.__defineSetter__("baz", s4); +check(sgobj, "baz", { get: undefined, set: s4, enumerable: true, configurable: true }); + +function g4() { } +sgobj.__defineGetter__("baz", g4); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true }); + +Object.defineProperty(sgobj, "baz", { enumerable: false }); +check(sgobj, "baz", { get: g4, set: s4, enumerable: false, configurable: true }); + +sgobj.__defineSetter__("baz", s4); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true }); + +Object.defineProperty(sgobj, "baz", { enumerable: false }); +check(sgobj, "baz", { get: g4, set: s4, enumerable: false, configurable: true }); + +sgobj.__defineSetter__("baz", s4); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true }); + +Object.defineProperty(sgobj, "baz", { configurable: false }); +expectTypeError(function() { sgobj.__defineGetter__("baz", g3); }); +expectTypeError(function() { sgobj.__defineSetter__("baz", s4); }); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a getter over a writable data property + +function g5() { } +var gover = { quux: 17 }; +check(gover, "quux", { value: 17, writable: true, enumerable: true, configurable: true }); + +gover.__defineGetter__("quux", g5); +check(gover, "quux", { get: g5, set: undefined, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a setter over a writable data property + +function s5() { } +var sover = { quux: 17 }; +check(sover, "quux", { value: 17, writable: true, enumerable: true, configurable: true }); + +sover.__defineSetter__("quux", s5); +check(sover, "quux", { get: undefined, set: s5, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a getter over a non-writable data property + +function g6() { } +var gnover = { eit: 17 }; +check(gnover, "eit", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(gnover, "eit", { writable: false }); +check(gnover, "eit", { value: 17, writable: false, enumerable: true, configurable: true }); + +gnover.__defineGetter__("eit", g6); +check(gnover, "eit", { get: g6, set: undefined, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a setter over a non-writable data property + +function s6() { } +var snover = { eit: 17 }; +check(snover, "eit", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(snover, "eit", { writable: false }); +check(snover, "eit", { value: 17, writable: false, enumerable: true, configurable: true }); + +snover.__defineSetter__("eit", s6); +check(snover, "eit", { get: undefined, set: s6, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a getter over a non-configurable, writable data property + +function g7() { } +var gncover = { moo: 17 }; +check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(gncover, "moo", { configurable: false }); +check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +expectTypeError(function() { gncover.__defineGetter__("moo", g7); }); +check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a setter over a non-configurable, writable data property + +function s7() { } +var sncover = { moo: 17 }; +check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(sncover, "moo", { configurable: false }); +check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +expectTypeError(function() { sncover.__defineSetter__("moo", s7); }); +check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a getter over a non-configurable, non-writable data property + +function g8() { } +var gncwover = { fwoosh: 17 }; +check(gncwover, "fwoosh", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(gncwover, "fwoosh", { writable: false, configurable: false }); +check(gncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +expectTypeError(function() { gncwover.__defineGetter__("fwoosh", g7); }); +check(gncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a setter over a non-configurable, non-writable data property + +function s8() { } +var sncwover = { fwoosh: 17 }; +check(sncwover, "fwoosh", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(sncwover, "fwoosh", { writable: false, configurable: false }); +check(sncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +expectTypeError(function() { sncwover.__defineSetter__("fwoosh", s7); }); +check(sncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/eval-native-callback-is-indirect.js b/test/staging/sm/extensions/eval-native-callback-is-indirect.js new file mode 100644 index 0000000000..0fdd03c487 --- /dev/null +++ b/test/staging/sm/extensions/eval-native-callback-is-indirect.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 604504; +var summary = "eval called from a native function is indirect"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var originalEval = eval; + +var global = this; +var directCheckCode = "this === global"; + +function testArrayGeneric() +{ + var global = "psych!"; + var eval = Array.map; + + var mapped = eval([directCheckCode], originalEval); + assert.sameValue(mapped[0], true); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/expression-closure-syntax.js b/test/staging/sm/extensions/expression-closure-syntax.js new file mode 100644 index 0000000000..63bfa2f823 --- /dev/null +++ b/test/staging/sm/extensions/expression-closure-syntax.js @@ -0,0 +1,70 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1416337; +var summary = + "Expression closure syntax is only permitted for functions that constitute " + + "entire AssignmentExpressions, not PrimaryExpressions that are themselves " + + "components of larger binary expressions"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +{ + function assertThrowsSyntaxError(code) + { + function testOne(replacement) + { + var x, rv; + try + { + rv = eval(code.replace("@@@", replacement)); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "should have thrown a SyntaxError, instead got: " + e); + return; + } + + assert.sameValue(true, false, "should have thrown, instead returned " + rv); + } + + testOne("function"); + testOne("async function"); + } + + assertThrowsSyntaxError("x = ++@@@() 1"); + assertThrowsSyntaxError("x = delete @@@() 1"); + assertThrowsSyntaxError("x = new @@@() 1"); + assertThrowsSyntaxError("x = void @@@() 1"); + assertThrowsSyntaxError("x = +@@@() 1"); + assertThrowsSyntaxError("x = 1 + @@@() 1"); + assertThrowsSyntaxError("x = null != @@@() 1"); + assertThrowsSyntaxError("x = null != @@@() 0 ? 1 : a => {}"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {} !== null"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}.toString"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}['toString']"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}``"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}()"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {}++"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {} || 0"); + assertThrowsSyntaxError("x = 0 || @@@() 0 ? 1 : a => {}"); + assertThrowsSyntaxError("x = @@@() 0 ? 1 : a => {} && true"); + assertThrowsSyntaxError("x = true && @@@() 0 ? 1 : a => {}"); +} + diff --git a/test/staging/sm/extensions/extension-methods-reject-null-undefined-this.js b/test/staging/sm/extensions/extension-methods-reject-null-undefined-this.js new file mode 100644 index 0000000000..b84462eb49 --- /dev/null +++ b/test/staging/sm/extensions/extension-methods-reject-null-undefined-this.js @@ -0,0 +1,109 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 619283; +var summary = + "ECMAScript built-in methods that immediately throw when |this| is " + + "|undefined| or |null| (due to CheckObjectCoercible, ToObject, or ToString)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// This test fills out for the non-standard methods which +// non262/misc/builtin-methods-reject-null-undefined-this.js declines to test. + +var ClassToMethodMap = + { + Object: ["toSource"], + Function: ["toSource"], + Array: ["toSource"], + String: ["toSource"], + Boolean: ["toSource"], + Number: ["toSource"], + Date: ["toSource"], + RegExp: ["toSource"], + Error: ["toSource"], + }; + +var badThisValues = [null, undefined]; + +function testMethod(Class, className, method) +{ + var expr; + + // Try out explicit this values + for (var i = 0, sz = badThisValues.length; i < sz; i++) + { + var badThis = badThisValues[i]; + + expr = className + ".prototype." + method + ".call(" + badThis + ")"; + try + { + Class.prototype[method].call(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + + expr = className + ".prototype." + method + ".apply(" + badThis + ")"; + try + { + Class.prototype[method].apply(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + } + + // ..and for good measure.. + + expr = "(0, " + className + ".prototype." + method + ")()" + try + { + // comma operator to call GetValue() on the method and de-Reference it + (0, Class.prototype[method])(); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } +} + +for (var className in ClassToMethodMap) +{ + var Class = this[className]; + + var methodNames = ClassToMethodMap[className]; + for (var i = 0, sz = methodNames.length; i < sz; i++) + { + var method = methodNames[i]; + testMethod(Class, className, method); + } +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/file-mapped-arraybuffers.txt b/test/staging/sm/extensions/file-mapped-arraybuffers.txt new file mode 100644 index 0000000000..4289a17b8f --- /dev/null +++ b/test/staging/sm/extensions/file-mapped-arraybuffers.txt @@ -0,0 +1 @@ +01234567abcdefghijkl \ No newline at end of file diff --git a/test/staging/sm/extensions/for-loop-with-lexical-declaration-and-nested-function-statement.js b/test/staging/sm/extensions/for-loop-with-lexical-declaration-and-nested-function-statement.js new file mode 100644 index 0000000000..d9d47a6202 --- /dev/null +++ b/test/staging/sm/extensions/for-loop-with-lexical-declaration-and-nested-function-statement.js @@ -0,0 +1,135 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = + "for-loop-with-lexical-declaration-and-nested-function-statement.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1149797; +var summary = + "Don't assert when freshening the scope chain for a for-loop whose head " + + "contains a lexical declaration, where the loop body might add more " + + "bindings at runtime"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (let x = 0; x < 9; ++x) { + function q1() {} +} + +{ + for (let x = 0; x < 9; ++x) { + function q2() {} + } +} + +function f1() +{ + for (let x = 0; x < 9; ++x) { + function q3() {} + } +} +f1(); + +function f2() +{ + { + for (let x = 0; x < 9; ++x) { + function q4() {} + } + } +} +f2(); + +for (let x = 0; x < 9; ++x) +{ + // deliberately inside a block statement + function q5() {} +} + +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + function q6() {} + } +} + +function g1() +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + function q7() {} + } +} +g1(); + +function g2() +{ + { + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + function q8() {} + } + } +} +g2(); + +for (let x = 0; x < 9; ++x) { + (function() { + eval("function q9() {}"); + })(); +} + +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + (function() { + eval("function q10() {}"); + })(); + } +} + +function h1() +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + (function() { + eval("function q11() {}"); + })(); + } +} +h1(); + +function h2() +{ + { + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + (function() { eval("function q12() {}"); })(); + } + } +} +h2(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/function-caller-skips-eval-frames.js b/test/staging/sm/extensions/function-caller-skips-eval-frames.js new file mode 100644 index 0000000000..c481577e6f --- /dev/null +++ b/test/staging/sm/extensions/function-caller-skips-eval-frames.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function innermost() { return arguments.callee.caller; } +function nest() { return eval("innermost();"); } +function nest2() { return nest(); } + +assert.sameValue(nest2(), nest); + +var innermost = function innermost() { return arguments.callee.caller.caller; }; + +assert.sameValue(nest2(), nest2); + +function nestTwice() { return eval("eval('innermost();');"); } +var nest = nestTwice; + +assert.sameValue(nest2(), nest2); + +function innermostEval() { return eval("arguments.callee.caller"); } +var innermost = innermostEval; + +assert.sameValue(nest2(), nestTwice); + +function innermostEvalTwice() { return eval('eval("arguments.callee.caller");'); } +var innermost = innermostEvalTwice; + +assert.sameValue(nest2(), nestTwice); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/function-properties.js b/test/staging/sm/extensions/function-properties.js new file mode 100644 index 0000000000..22d4b6fccd --- /dev/null +++ b/test/staging/sm/extensions/function-properties.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function foo() +{ + assert.sameValue(foo.arguments.length, 0); + assert.sameValue(foo.caller, null); +} + +assert.sameValue(foo.arguments, null); +assert.sameValue(foo.caller, null); +foo(); +assert.sameValue(foo.arguments, null); +assert.sameValue(foo.caller, null); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/getOwnPropertyNames-__proto__.js b/test/staging/sm/extensions/getOwnPropertyNames-__proto__.js new file mode 100644 index 0000000000..412294d731 --- /dev/null +++ b/test/staging/sm/extensions/getOwnPropertyNames-__proto__.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 837630; +var summary ='__proto__ should show up with O.getOwnPropertyNames(O.prototype)'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var keys = Object.getOwnPropertyNames(Object.prototype); +assert.sameValue(keys.indexOf("__proto__") >= 0, true, + "should have gotten __proto__ as a property of Object.prototype " + + "(got these properties: " + keys + ")"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/inc-dec-functioncall.js b/test/staging/sm/extensions/inc-dec-functioncall.js new file mode 100644 index 0000000000..5927a5095b --- /dev/null +++ b/test/staging/sm/extensions/inc-dec-functioncall.js @@ -0,0 +1,95 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 609756; +var summary = + "Perform ToNumber on the result of the |fun()| in |fun()++| before " + + "throwing"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var hadSideEffect; + +function f() +{ + return { valueOf: function() { hadSideEffect = true; return 0; } }; +} + +hadSideEffect = false; +assertThrowsInstanceOf(function() { f()++; }, ReferenceError); +assert.sameValue(hadSideEffect, true); + +hadSideEffect = false; +assertThrowsInstanceOf(function() { + for (var i = 0; i < 20; i++) + { + if (i > 18) + f()++; + } +}, ReferenceError); +assert.sameValue(hadSideEffect, true); + + +hadSideEffect = false; +assertThrowsInstanceOf(function() { f()--; }, ReferenceError); +assert.sameValue(hadSideEffect, true); + +hadSideEffect = false; +assertThrowsInstanceOf(function() { + for (var i = 0; i < 20; i++) + { + if (i > 18) + f()--; + } +}, ReferenceError); +assert.sameValue(hadSideEffect, true); + + +hadSideEffect = false; +assertThrowsInstanceOf(function() { ++f(); }, ReferenceError); +assert.sameValue(hadSideEffect, true); + +hadSideEffect = false; +assertThrowsInstanceOf(function() { + for (var i = 0; i < 20; i++) + { + if (i > 18) + ++f(); + } +}, ReferenceError); +assert.sameValue(hadSideEffect, true); + + +hadSideEffect = false; +assertThrowsInstanceOf(function() { --f(); }, ReferenceError); +assert.sameValue(hadSideEffect, true); + +hadSideEffect = false; +assertThrowsInstanceOf(function() { + for (var i = 0; i < 20; i++) + { + if (i > 18) + --f(); + } +}, ReferenceError); +assert.sameValue(hadSideEffect, true); + + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/keyword-unescaped-requirement.js b/test/staging/sm/extensions/keyword-unescaped-requirement.js new file mode 100644 index 0000000000..4bc62b9ea7 --- /dev/null +++ b/test/staging/sm/extensions/keyword-unescaped-requirement.js @@ -0,0 +1,48 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1204027; +var summary = + "Escape sequences aren't allowed in bolded grammar tokens (that is, in " + + "keywords, possibly contextual keywords)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var randomExtensions = + [ + "for \\u0065ach (var x in []);", + "for e\\u0061ch (var x in []);", + "[0 for \\u0065ach (var x in [])]", + "[0 for e\\u0061ch (var x in [])]", + "(0 for \\u0065ach (var x in []))", + "(0 for e\\u0061ch (var x in []))", + + // Soon to be not an extension, maybe... + "(for (x \\u006ff [1]) x)", + "(for (x o\\u0066 [1]) x)", + ]; + +for (var extension of randomExtensions) +{ + assertThrowsInstanceOf(() => Function(extension), SyntaxError, + "bad behavior for: " + extension); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/mutable-proto-special-form.js b/test/staging/sm/extensions/mutable-proto-special-form.js new file mode 100644 index 0000000000..3d4bfc0ea5 --- /dev/null +++ b/test/staging/sm/extensions/mutable-proto-special-form.js @@ -0,0 +1,98 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 948583; +var summary = + "Make __proto__ in object literals a special form not influenced by " + + "|Object.prototype|"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var passed = true; + +function performProtoTests(msg) +{ + print("Testing " + msg); + assert.sameValue(passed, true, "passed wrong at start of test set"); + + assert.sameValue(Object.getPrototypeOf({ __proto__: null }), null); + assert.sameValue(Object.getPrototypeOf({ __proto__: undefined }), Object.prototype); + assert.sameValue(Object.getPrototypeOf({ __proto__: 17 }), Object.prototype); + + var obj = {}; + assert.sameValue(Object.getPrototypeOf({ __proto__: obj }), obj); + + assert.sameValue(passed, true, "passed wrong at end of test set"); + print("Tests of " + msg + " passed!"); +} + +function poisonProto(obj) +{ + Object.defineProperty(obj, "__proto__", + { + configurable: true, + enumerable: true, + set: function(v) { passed = false; }, + }); +} + +performProtoTests("initial behavior"); + +var desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); +var setProto = desc.set; +delete Object.prototype.__proto__; + +performProtoTests("behavior after Object.prototype.__proto__ deletion"); + +Object.defineProperty(Object.prototype, "__proto__", + { + configurable: true, + enumerable: false, + set: function(v) { passed = false; }, + }); + +performProtoTests("behavior after making Object.prototype.__proto__ a " + + "custom setter"); + +Object.defineProperty(Object.prototype, "__proto__", { set: undefined }); + +performProtoTests("behavior after making Object.prototype.__proto__'s " + + "[[Set]] === undefined"); + +try +{ + var superProto = Object.create(null); + poisonProto(superProto); + setProto.call(Object.prototype, superProto); + + performProtoTests("behavior after mutating Object.prototype.[[Prototype]]"); + + // Note: The handler below will have to be updated to exempt a scriptable + // getPrototypeOf trap (to instead consult the target whose [[Prototype]] + // is safely non-recursive), if we ever implement one. + var death = new Proxy(Object.create(null), + new Proxy({}, { get: function() { passed = false; } })); + + setProto.call(Object.prototype, death); + + performProtoTests("behavior after making Object.prototype.[[Prototype]] a " + + "proxy that throws for any access"); +} +catch (e) {} + +print("Tests complete"); diff --git a/test/staging/sm/extensions/nested-delete-name-in-evalcode.js b/test/staging/sm/extensions/nested-delete-name-in-evalcode.js new file mode 100644 index 0000000000..95bc1c97ac --- /dev/null +++ b/test/staging/sm/extensions/nested-delete-name-in-evalcode.js @@ -0,0 +1,92 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 616294; +var summary = + "|delete x| inside a function in eval code, where that eval code includes " + + "|var x| at top level, actually does delete the binding for x"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var f; + +function testOuterLet() +{ + return eval("let x; (function() { return delete x; })"); +} + +f = testOuterLet(); + +assert.sameValue(f(), false); // can't delete lexical declarations => false + + +function testOuterForLet() +{ + return eval("for (let x; false; ); (function() { return delete x; })"); +} + +f = testOuterForLet(); + +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testOuterForInLet() +{ + return eval("for (let x in {}); (function() { return delete x; })"); +} + +f = testOuterForInLet(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // not there => true (only non-configurable => false) + + +function testOuterNestedVarInForLet() +{ + return eval("for (let q = 0; q < 5; q++) { var x; } (function() { return delete x; })"); +} + +f = testOuterNestedVarInForLet(); + +assert.sameValue(f(), true); // configurable, so remove => true +assert.sameValue(f(), true); // there => true + + +function testArgumentShadowLet() +{ + return eval("let x; (function(x) { return delete x; })"); +} + +f = testArgumentShadowLet(); + +assert.sameValue(f(), false); // non-configurable argument => false + + +function testFunctionLocal() +{ + return eval("(function() { let x; return delete x; })"); +} + +f = testFunctionLocal(); + +assert.sameValue(f(), false); // defined by function code => not configurable => false + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/new-cross-compartment.js b/test/staging/sm/extensions/new-cross-compartment.js new file mode 100644 index 0000000000..d3dfc95a88 --- /dev/null +++ b/test/staging/sm/extensions/new-cross-compartment.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1178653; +var summary = + "|new| on a cross-compartment wrapper to a non-constructor shouldn't assert"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var g = createNewGlobal(); + +var otherStr = new g.String("foo"); +assert.sameValue(otherStr instanceof g.String, true); +assert.sameValue(otherStr.valueOf(), "foo"); + +try +{ + var constructor = g.parseInt; + new constructor(); + throw new Error("no error thrown"); +} +catch (e) +{ + // NOTE: not |g.TypeError|, because |new| itself throws because + // |!IsConstructor(constructor)|. + assert.sameValue(e instanceof TypeError, true); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/new-parenthesization.js b/test/staging/sm/extensions/new-parenthesization.js new file mode 100644 index 0000000000..ae19953228 --- /dev/null +++ b/test/staging/sm/extensions/new-parenthesization.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 521456; +var summary = + 'Incorrect decompilation of new (eval(v)).s and new (f.apply(2)).s'; +printBugNumber(BUGNUMBER); +printStatus(summary); + +function foo(c) { return new (eval(c)).s; } +function bar(f) { var a = new (f.apply(2).s); return a; } + +assert.sameValue(bar.toString().search(/new\s+f/), -1); +assert.sameValue(foo.toString().search(/new\s+eval/), -1); + diff --git a/test/staging/sm/extensions/newer-type-functions-caller-arguments.js b/test/staging/sm/extensions/newer-type-functions-caller-arguments.js new file mode 100644 index 0000000000..fc80c8bce6 --- /dev/null +++ b/test/staging/sm/extensions/newer-type-functions-caller-arguments.js @@ -0,0 +1,103 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests that newer-type functions (i.e. anything not defined by regular function declarations and +// expressions) throw when accessing their 'arguments' and 'caller' properties. + +// 9.2.7 (AddRestrictedFunctionProperties) defines accessors on Function.prototype which throw on +// every 'get' and 'set' of 'caller' and 'arguments'. +// Additionally, 16.2 (Forbidden Extensions) forbids adding properties to all non-"legacy" function +// declarations and expressions. This creates the effect that all newer-style functions act like +// strict-mode functions when accessing their 'caller' and 'arguments' properties. + +const container = { + async asyncMethod() {}, + *genMethod() {}, + method() {}, + get getterMethod() {}, + set setterMethod(x) {}, +}; + +function* genDecl(){} +async function asyncDecl(){} +class classDecl {} +class extClassDecl extends Object {} +class classDeclExplicitCtor { constructor(){} } +class extClassDeclExplicitCtor extends Object { constructor(){} } + +const functions = [ + // Declarations + genDecl, + asyncDecl, + classDecl, + extClassDecl, + classDeclExplicitCtor, + extClassDeclExplicitCtor, + + // Expressions + async function(){}, + function*(){}, + () => {}, + async () => {}, + class {}, + class extends Object {}, + class { constructor(){} }, + class extends Object { constructor(){} }, + + // Methods + container.asyncMethod, + container.genMethod, + container.method, + Object.getOwnPropertyDescriptor(container, "getterMethod").get, + Object.getOwnPropertyDescriptor(container, "setterMethod").set, + + // Bound functions + function(){}.bind(), + + // Built-ins (native and self-hosted) + Function, + Function.prototype.bind, +]; + +const supportsAsyncGenerator = (function() { + try { + eval("async function* f(){}"); + return true; + } catch (e) { + return false; + } +})(); + +if (supportsAsyncGenerator) { +eval(` + async function* asyncGenDecl(){} + + functions.push(asyncGenDecl); + functions.push(async function*(){}); + functions.push({async* asyncGenerator(){}}.asyncGenerator); +`); +} + +functions.forEach(f => { + checkArgumentsAccess(f); + checkCallerAccess(f); +}); + +function checkArgumentsAccess(f) { + assertThrowsInstanceOf(() => f.arguments, TypeError, + `Expected 'arguments' property access to throw on ${f}`); +} + +function checkCallerAccess(f) { + assertThrowsInstanceOf(() => f.caller, TypeError, + `Expected 'caller' property access to throw on ${f}`); +} + diff --git a/test/staging/sm/extensions/proxy-array-target-length-definition.js b/test/staging/sm/extensions/proxy-array-target-length-definition.js new file mode 100644 index 0000000000..4234bccdd8 --- /dev/null +++ b/test/staging/sm/extensions/proxy-array-target-length-definition.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'proxy-array-target-length-definition.js'; +var BUGNUMBER = 905947; +var summary = + "Redefining an array's |length| property when redefining the |length| " + + "property on a proxy with an array as target"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +var p = new Proxy(arr, {}); + +function assertThrowsTypeError(f) +{ + try { + f(); + assert.sameValue(false, true, "Must have thrown"); + } catch (e) { + assert.sameValue(e instanceof TypeError, true, "Must have thrown TypeError"); + } +} + +// Redefining non-configurable length should throw a TypeError +assertThrowsTypeError(function () { Object.defineProperty(p, "length", { value: 17, configurable: true }); }); + +// Same here. +assertThrowsTypeError(function () { Object.defineProperty(p, "length", { value: 42, enumerable: true }); }); + +// Check the property went unchanged. +var pd = Object.getOwnPropertyDescriptor(p, "length"); +assert.sameValue(pd.value, 0); +assert.sameValue(pd.writable, true); +assert.sameValue(pd.enumerable, false); +assert.sameValue(pd.configurable, false); + +var ad = Object.getOwnPropertyDescriptor(arr, "length"); +assert.sameValue(ad.value, 0); +assert.sameValue(ad.writable, true); +assert.sameValue(ad.enumerable, false); +assert.sameValue(ad.configurable, false); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/proxy-enumeration.js b/test/staging/sm/extensions/proxy-enumeration.js new file mode 100644 index 0000000000..8b00ef7eab --- /dev/null +++ b/test/staging/sm/extensions/proxy-enumeration.js @@ -0,0 +1,14 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var list = Object.getOwnPropertyNames(this); +var found = list.indexOf("Proxy") != -1; +assert.sameValue(found, true) diff --git a/test/staging/sm/extensions/proxy-strict.js b/test/staging/sm/extensions/proxy-strict.js new file mode 100644 index 0000000000..5e65c4fee6 --- /dev/null +++ b/test/staging/sm/extensions/proxy-strict.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var s = "grape"; +function f() { "use strict"; return this; } +var p = new Proxy(f, {}); +String.prototype.p = p; +assert.sameValue(s.p(), "grape"); + diff --git a/test/staging/sm/extensions/quote-string-for-nul-character.js b/test/staging/sm/extensions/quote-string-for-nul-character.js new file mode 100644 index 0000000000..67a1e943a9 --- /dev/null +++ b/test/staging/sm/extensions/quote-string-for-nul-character.js @@ -0,0 +1,93 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ensure we properly quote strings which can contain the NUL character before +// returning them to the user to avoid cutting off any trailing characters. + +function assertStringIncludes(actual, expected) { + assert.sameValue(actual.includes(expected), true, `"${actual}" includes "${expected}"`); +} + +assertThrownErrorContains(() => "foo\0bar" in "asdf\0qwertz", "bar"); +assertThrownErrorContains(() => "foo\0bar" in "asdf\0qwertz", "qwertz"); + +if (this.Intl) { + assertThrownErrorContains(() => Intl.getCanonicalLocales("de\0Latn"), "Latn"); + + assertThrownErrorContains(() => Intl.Collator.supportedLocalesOf([], {localeMatcher:"lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.Collator("en", {localeMatcher: "lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.Collator("en", {usage: "sort\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.Collator("en", {caseFirst: "upper\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.Collator("en", {sensitivity: "base\0cookie"}), "cookie"); + + assertThrownErrorContains(() => Intl.DateTimeFormat.supportedLocalesOf([], {localeMatcher:"lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {localeMatcher: "lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {hourCycle: "h24\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {weekday: "narrow\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {era: "narrow\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {year: "2-digit\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {month: "2-digit\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {day: "2-digit\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {hour: "2-digit\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {minute: "2-digit\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {second: "2-digit\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {formatMatcher: "basic\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.DateTimeFormat("en", {timeZone: "UTC\0cookie"}), "cookie"); + + assertThrownErrorContains(() => Intl.NumberFormat.supportedLocalesOf([], {localeMatcher:"lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.NumberFormat("en", {localeMatcher: "lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.NumberFormat("en", {style: "decimal\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.NumberFormat("en", {currency: "USD\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.NumberFormat("en", {currencyDisplay: "code\0cookie"}), "cookie"); + + assertThrownErrorContains(() => Intl.PluralRules.supportedLocalesOf([], {localeMatcher:"lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.PluralRules("en", {localeMatcher: "lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.PluralRules("en", {type: "cardinal\0cookie"}), "cookie"); + + assertThrownErrorContains(() => Intl.RelativeTimeFormat.supportedLocalesOf([], {localeMatcher:"lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.RelativeTimeFormat("en", {localeMatcher: "lookup\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.RelativeTimeFormat("en", {style: "long\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.RelativeTimeFormat("en", {numeric: "auto\0cookie"}), "cookie"); + assertThrownErrorContains(() => new Intl.RelativeTimeFormat().format(1, "day\0cookie"), "cookie"); + + assertThrownErrorContains(() => new Intl.Locale("de\0keks"), "keks"); + assertThrownErrorContains(() => new Intl.Locale("de", {language: "it\0biscotto"}), "biscotto"); + assertThrownErrorContains(() => new Intl.Locale("th", {script: "Thai\0คุกกี้"}), "\\u0E04\\u0E38\\u0E01\\u0E01\\u0E35\\u0E49"); + assertThrownErrorContains(() => new Intl.Locale("en", {region: "GB\0biscuit"}), "biscuit"); + + assertThrownErrorContains(() => new Intl.Locale("und", {calendar: "gregory\0F1"}), "F1"); + assertThrownErrorContains(() => new Intl.Locale("und", {collation: "phonebk\0F2"}), "F2"); + assertThrownErrorContains(() => new Intl.Locale("und", {hourCycle: "h24\0F3"}), "F3"); + assertThrownErrorContains(() => new Intl.Locale("und", {caseFirst: "false\0F4"}), "F4"); + assertThrownErrorContains(() => new Intl.Locale("und", {numberingSystem: "arab\0F5"}), "F5"); +} + +// Shell and helper functions. + +assertThrownErrorContains(() => assert.sameValue(true, false, "foo\0bar"), "bar"); + +if (this.disassemble) { + assertStringIncludes(disassemble(Function("var re = /foo\0bar/")), "bar"); +} + +if (this.getBacktrace) { + const k = "asdf\0asdf"; + const o = {[k](a) { "use strict"; return getBacktrace({locals: true, args: true}); }}; + const r = o[k].call("foo\0bar", "baz\0faz"); + assertStringIncludes(r, "bar"); + assertStringIncludes(r, "faz"); +} + +// js/src/tests/browser.js provides its own |options| function, make sure we don't test that one. +if (this.options && typeof document === "undefined") { + assertThrownErrorContains(() => options("foo\0bar"), "bar"); +} + diff --git a/test/staging/sm/extensions/recursion.js b/test/staging/sm/extensions/recursion.js new file mode 100644 index 0000000000..2e60b28a5a --- /dev/null +++ b/test/staging/sm/extensions/recursion.js @@ -0,0 +1,63 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 622167; +var summary = 'Handle infinite recursion'; +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function eval() { eval(); } + +function DoWhile_3() +{ + eval(); +} + +try +{ + DoWhile_3(); +} +catch(e) { } + +var r; +function* f() +{ + r = arguments; + test(); + yield 170; +} + +function test() +{ + function foopy() + { + try + { + for (var i of f()); + } + catch (e) + { + gc(); + } + } + foopy(); +} +test(); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/regress-455380.js b/test/staging/sm/extensions/regress-455380.js new file mode 100644 index 0000000000..59e448e2d6 --- /dev/null +++ b/test/staging/sm/extensions/regress-455380.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 455380; +var summary = 'Do not assert with JIT: !lhs->isQuad() && !rhs->isQuad()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +const IS_TOKEN_ARRAY = + [0, 0, 0, 0, 0, 0, 0, 0, // 0 + 0, 0, 0, 0, 0, 0, 0, 0, // 8 + 0, 0, 0, 0, 0, 0, 0, 0, // 16 + 0, 0, 0, 0, 0, 0, 0, 0, // 24 + + 0, 1, 0, 1, 1, 1, 1, 1, // 32 + 0, 0, 1, 1, 0, 1, 1, 0, // 40 + 1, 1, 1, 1, 1, 1, 1, 1, // 48 + 1, 1, 0, 0, 0, 0, 0, 0, // 56 + + 0, 1, 1, 1, 1, 1, 1, 1, // 64 + 1, 1, 1, 1, 1, 1, 1, 1, // 72 + 1, 1, 1, 1, 1, 1, 1, 1, // 80 + 1, 1, 1, 0, 0, 0, 1, 1, // 88 + + 1, 1, 1, 1, 1, 1, 1, 1, // 96 + 1, 1, 1, 1, 1, 1, 1, 1, // 104 + 1, 1, 1, 1, 1, 1, 1, 1, // 112 + 1, 1, 1, 0, 1, 0, 1]; // 120 + +const headerUtils = { +normalizeFieldName: function(fieldName) +{ + if (fieldName == "") + throw "error: empty string"; + + for (var i = 0, sz = fieldName.length; i < sz; i++) + { + if (!IS_TOKEN_ARRAY[fieldName.charCodeAt(i)]) + { + throw (fieldName + " is not a valid header field name!"); + } + } + + return fieldName.toLowerCase(); +} +}; + +headerUtils.normalizeFieldName("Host"); + + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/extensions/regress-469625-01.js b/test/staging/sm/extensions/regress-469625-01.js new file mode 100644 index 0000000000..2188ee9f49 --- /dev/null +++ b/test/staging/sm/extensions/regress-469625-01.js @@ -0,0 +1,45 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 469625; +var summary = 'TM: Array prototype and expression closures'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'TypeError: [].__proto__ is not a function'; + + + Array.prototype.__proto__ = function () { return 3; }; + + try + { + [].__proto__(); + } + catch(ex) + { + print(actual = ex + ''); + } + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/extensions/regress-480579.js b/test/staging/sm/extensions/regress-480579.js new file mode 100644 index 0000000000..046a9ec5c8 --- /dev/null +++ b/test/staging/sm/extensions/regress-480579.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 480579; +var summary = 'Do not assert: pobj_ == obj2'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '12'; + + a = {x: 1}; + b = {__proto__: a}; + c = {__proto__: b}; + for (i = 0; i < 2; i++) { + print(actual += c.x); + b.x = 2; + } + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/extensions/regress-481516.js b/test/staging/sm/extensions/regress-481516.js new file mode 100644 index 0000000000..da0d48ab87 --- /dev/null +++ b/test/staging/sm/extensions/regress-481516.js @@ -0,0 +1,44 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 481516; +var summary = 'TM: pobj_ == obj2'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '1111222'; + + a = {x: 1}; + b = {__proto__: a}; + c = {__proto__: b}; + objs = [{__proto__: a}, {__proto__: a}, {__proto__: a}, b, {__proto__: a}, + {__proto__: a}]; + for (i = 0; i < 6; i++) { + print(actual += ""+c.x); + objs[i].x = 2; + } + print(actual += c.x); + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/extensions/regress-591450.js b/test/staging/sm/extensions/regress-591450.js new file mode 100644 index 0000000000..97f933c8fe --- /dev/null +++ b/test/staging/sm/extensions/regress-591450.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * This was causing the parser to assert at one point. Now it's not. Yay! + */ +function f(a,[x,y],b,[w,z],c) { function b() { } } + +assert.sameValue(0, 0, "don't crash"); diff --git a/test/staging/sm/extensions/regress-645160.js b/test/staging/sm/extensions/regress-645160.js new file mode 100644 index 0000000000..620756102e --- /dev/null +++ b/test/staging/sm/extensions/regress-645160.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function potatoMasher(obj, arg) { this.eval(arg); } +potatoMasher(this, "var s = Error().stack"); +assert.sameValue(/potatoMasher/.exec(s) instanceof Array, true); + diff --git a/test/staging/sm/extensions/regress-650753.js b/test/staging/sm/extensions/regress-650753.js new file mode 100644 index 0000000000..30b8013e74 --- /dev/null +++ b/test/staging/sm/extensions/regress-650753.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var x = {}, h = new WeakMap; +h.set(x, null); +gc(); + diff --git a/test/staging/sm/extensions/regress-bug629723.js b/test/staging/sm/extensions/regress-bug629723.js new file mode 100644 index 0000000000..49d91fbe22 --- /dev/null +++ b/test/staging/sm/extensions/regress-bug629723.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(foo) { + "use strict"; + foo.bar; +} + +var actual; +try { + f(); + actual = "no error"; +} catch (x) { + actual = (x instanceof TypeError) ? "type error" : "some other error"; + actual += (/use strict/.test(x)) ? " with directive" : " without directive"; +} + +assert.sameValue("type error without directive", actual, + "decompiled expressions in error messages should not include directive prologues"); diff --git a/test/staging/sm/extensions/reviver-mutates-holder-array-nonnative.js b/test/staging/sm/extensions/reviver-mutates-holder-array-nonnative.js new file mode 100644 index 0000000000..9e9dca4bff --- /dev/null +++ b/test/staging/sm/extensions/reviver-mutates-holder-array-nonnative.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 901380; +var summary = "Behavior when JSON.parse walks over a non-native object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var typedArray = null; + +var observedTypedArrayElementCount = 0; + +var arr = JSON.parse('[0, 1]', function(prop, v) { + if (prop === "0" && Array.isArray(this)) // exclude typedArray[0] + { + typedArray = new Int8Array(1); + this[1] = typedArray; + } + if (this instanceof Int8Array) + { + assert.sameValue(prop, "0"); + observedTypedArrayElementCount++; + } + return v; +}); + +assert.sameValue(arr[0], 0); +assert.sameValue(arr[1], typedArray); + +assert.sameValue(observedTypedArrayElementCount, 1); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/reviver-mutates-holder-array.js b/test/staging/sm/extensions/reviver-mutates-holder-array.js new file mode 100644 index 0000000000..69f2641179 --- /dev/null +++ b/test/staging/sm/extensions/reviver-mutates-holder-array.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 901351; +var summary = "Behavior when the JSON.parse reviver mutates the holder array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var proxyObj = null; + +var arr = JSON.parse('[0, 1]', function(prop, v) { + if (prop === "0") + { + proxyObj = new Proxy({ c: 17, d: 42 }, {}); + this[1] = proxyObj; + } + return v; +}); + +assert.sameValue(arr[0], 0); +assert.sameValue(arr[1], proxyObj); +assert.sameValue(arr[1].c, 17); +assert.sameValue(arr[1].d, 42); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/reviver-mutates-holder-object-nonnative.js b/test/staging/sm/extensions/reviver-mutates-holder-object-nonnative.js new file mode 100644 index 0000000000..9abc52b7b7 --- /dev/null +++ b/test/staging/sm/extensions/reviver-mutates-holder-object-nonnative.js @@ -0,0 +1,63 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 901380; +var summary = "Behavior when JSON.parse walks over a non-native object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// A little trickiness to account for the undefined-ness of property +// enumeration order. +var first = "unset"; + +var observedTypedArrayElementCount = 0; + +var typedArray = null; + +var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) { + if (first === "unset") + { + first = prop; + var second = (prop === "a") ? "b" : "a"; + typedArray = new Int8Array(1); + Object.defineProperty(this, second, { value: typedArray }); + } + if (this instanceof Int8Array) + { + assert.sameValue(prop, "0"); + observedTypedArrayElementCount++; + } + return v; +}); + +if (first === "a") +{ + assert.sameValue(obj.a, 0); + assert.sameValue(obj.b, typedArray); +} +else +{ + assert.sameValue(obj.a, typedArray); + assert.sameValue(obj.b, 1); +} + +assert.sameValue(observedTypedArrayElementCount, 1); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/reviver-mutates-holder-object.js b/test/staging/sm/extensions/reviver-mutates-holder-object.js new file mode 100644 index 0000000000..fd6bc8ac0d --- /dev/null +++ b/test/staging/sm/extensions/reviver-mutates-holder-object.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 901351; +var summary = "Behavior when the JSON.parse reviver mutates the holder object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// A little trickiness to account for the undefined-ness of property +// enumeration order. +var first = "unset"; + +var proxyObj = null; + +var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) { + if (first === "unset") + { + first = prop; + var second = (prop === "a") ? "b" : "a"; + + proxyObj = new Proxy({ c: 42, d: 17 }, {}); + Object.defineProperty(this, second, { value: proxyObj }); + } + return v; +}); + +if (first === "a") +{ + assert.sameValue(obj.a, 0); + assert.sameValue(obj.b, proxyObj); + assert.sameValue(obj.b.c, 42); + assert.sameValue(obj.b.d, 17); +} +else +{ + assert.sameValue(obj.a, proxyObj); + assert.sameValue(obj.a.c, 42); + assert.sameValue(obj.a.d, 17); + assert.sameValue(obj.b, 1); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/set-property-non-extensible.js b/test/staging/sm/extensions/set-property-non-extensible.js new file mode 100644 index 0000000000..46e933ae8b --- /dev/null +++ b/test/staging/sm/extensions/set-property-non-extensible.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + preventExtensions on global +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 600128; +var summary = + "Properly handle attempted addition of properties to non-extensible objects"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var o = Object.freeze({}); +for (var i = 0; i < 10; i++) + print(o.u = ""); + +Object.freeze(this); +for (let j = 0; j < 10; j++) + print(u = ""); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/shareddataview.js b/test/staging/sm/extensions/shareddataview.js new file mode 100644 index 0000000000..642a224795 --- /dev/null +++ b/test/staging/sm/extensions/shareddataview.js @@ -0,0 +1,48 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test DataView on SharedArrayBuffer. + +if (this.SharedArrayBuffer) { + +var sab = new SharedArrayBuffer(4096); +var dv = new DataView(sab); + +assert.sameValue(sab, dv.buffer); +assert.sameValue(dv.byteLength, sab.byteLength); +assert.sameValue(ArrayBuffer.isView(dv), true); + +var dv2 = new DataView(sab, 1075, 2048); + +assert.sameValue(sab, dv2.buffer); +assert.sameValue(dv2.byteLength, 2048); +assert.sameValue(dv2.byteOffset, 1075); +assert.sameValue(ArrayBuffer.isView(dv2), true); + +// Test that it is the same buffer memory for the two views + +dv.setInt8(1075, 37); +assert.sameValue(dv2.getInt8(0), 37); + +// Test that range checking works + +assertThrowsInstanceOf(() => dv.setInt32(4098, -1), RangeError); +assertThrowsInstanceOf(() => dv.setInt32(4094, -1), RangeError); +assertThrowsInstanceOf(() => dv.setInt32(-1, -1), RangeError); + +assertThrowsInstanceOf(() => dv2.setInt32(2080, -1), RangeError); +assertThrowsInstanceOf(() => dv2.setInt32(2046, -1), RangeError); +assertThrowsInstanceOf(() => dv2.setInt32(-1, -1), RangeError); + +} + diff --git a/test/staging/sm/extensions/sps-generators.js b/test/staging/sm/extensions/sps-generators.js new file mode 100644 index 0000000000..9146669401 --- /dev/null +++ b/test/staging/sm/extensions/sps-generators.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 822041; +var summary = "Live generators should not cache Gecko Profiler state"; + +print(BUGNUMBER + ": " + summary); + +function* gen() { + var x = yield turnoff(); + yield x; + yield 'bye'; +} + +function turnoff() { + print("Turning off profiler\n"); + disableGeckoProfiling(); + return 'hi'; +} + +for (var slowAsserts of [ true, false ]) { + // The slowAssertions setting is not expected to matter + if (slowAsserts) + enableGeckoProfilingWithSlowAssertions(); + else + enableGeckoProfiling(); + + g = gen(); + assert.sameValue(g.next().value, 'hi'); + assert.sameValue(g.next('gurgitating...').value, 'gurgitating...'); + for (var x of g) + assert.sameValue(x, 'bye'); +} + +// This is really a crashtest diff --git a/test/staging/sm/extensions/string-literal-getter-setter-decompilation.js b/test/staging/sm/extensions/string-literal-getter-setter-decompilation.js new file mode 100644 index 0000000000..ce2d9b7cdf --- /dev/null +++ b/test/staging/sm/extensions/string-literal-getter-setter-decompilation.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var f; +try +{ + f = eval("(function literalInside() { return { set 'c d e'(v) { } }; })"); +} +catch (e) +{ + assert.sameValue(true, false, + "string-literal property name in setter in object literal in " + + "function statement failed to parse: " + e); +} + +var fstr = "" + f; +assert.sameValue(fstr.indexOf("set") < fstr.indexOf("c d e"), true, + "should be using new-style syntax with string literal in place of " + + "property identifier"); +assert.sameValue(fstr.indexOf("setter") < 0, true, "using old-style syntax?"); + +var o = f(); +var ostr = "" + o; +assert.sameValue("c d e" in o, true, "missing the property?"); +assert.sameValue("set" in Object.getOwnPropertyDescriptor(o, "c d e"), true, + "'c d e' property not a setter?"); +// disabled because we still generate old-style syntax here (toSource +// decompilation is as yet unfixed) +// assert.sameValue(ostr.indexOf("set") < ostr.indexOf("c d e"), true, +// "should be using new-style syntax when getting the source of a " + +// "getter/setter while decompiling an object"); +// assert.sameValue(ostr.indexOf("setter") < 0, true, "using old-style syntax?"); + diff --git a/test/staging/sm/extensions/typedarray-copyWithin-arguments-detaching.js b/test/staging/sm/extensions/typedarray-copyWithin-arguments-detaching.js new file mode 100644 index 0000000000..82c4204f61 --- /dev/null +++ b/test/staging/sm/extensions/typedarray-copyWithin-arguments-detaching.js @@ -0,0 +1,116 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "typedarray-copyWithin-arguments-detaching.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "%TypedArray.prototype.copyWithin shouldn't misbehave horribly if " + + "index-argument conversion detaches the underlying ArrayBuffer"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testBegin() +{ + var ab = new ArrayBuffer(0x1000); + + var begin = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + return 0x800; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.copyWithin(0, begin, 0x1000); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "start weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for start weirdness"); +} +testBegin(); + +function testEnd() +{ + var ab = new ArrayBuffer(0x1000); + + var end = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + return 0x1000; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.copyWithin(0, 0x800, end); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "start weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for start weirdness"); +} +testEnd(); + +function testDest() +{ + var ab = new ArrayBuffer(0x1000); + + var dest = + { + valueOf: function() + { + $262.detachArrayBuffer(ab); + return 0; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.copyWithin(dest, 0x800, 0x1000); + } + catch (e) + { + ok = true; + } + assert.sameValue(ok, true, "start weirdness should have thrown"); + assert.sameValue(ab.byteLength, 0, "detaching should work for start weirdness"); +} +testDest(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/typedarray-set-detach.js b/test/staging/sm/extensions/typedarray-set-detach.js new file mode 100644 index 0000000000..39722d7804 --- /dev/null +++ b/test/staging/sm/extensions/typedarray-set-detach.js @@ -0,0 +1,52 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 983344; +var summary = + "Uint8Array.prototype.set issues when this array changes during setting"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var ab = new ArrayBuffer(200); +var a = new Uint8Array(ab); +var a_2 = new Uint8Array(10); + +var src = [ 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + 10, 20, 30, 40, + ]; +Object.defineProperty(src, 4, { + get: function () { + $262.detachArrayBuffer(ab); + gc(); + return 200; + } +}); + +a.set(src); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/extensions/typedarray-subarray-of-subarray.js b/test/staging/sm/extensions/typedarray-subarray-of-subarray.js new file mode 100644 index 0000000000..b51dad206d --- /dev/null +++ b/test/staging/sm/extensions/typedarray-subarray-of-subarray.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 637643; +var summary = + "new Int8Array([1, 2, 3]).subarray(1).subarray(1)[0] === 3"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var ta = new Int8Array([1, 2, 3]); +assert.sameValue(ta.length, 3); +assert.sameValue(ta[0], 1); +assert.sameValue(ta[1], 2); +assert.sameValue(ta[2], 3); + +var sa1 = ta.subarray(1); +assert.sameValue(sa1.length, 2); +assert.sameValue(sa1[0], 2); +assert.sameValue(sa1[1], 3); + +var sa2 = sa1.subarray(1); +assert.sameValue(sa2.length, 1); +assert.sameValue(sa2[0], 3); + +print("All tests passed!"); diff --git a/test/staging/sm/extensions/weakmap.js b/test/staging/sm/extensions/weakmap.js new file mode 100644 index 0000000000..797ac5896c --- /dev/null +++ b/test/staging/sm/extensions/weakmap.js @@ -0,0 +1,127 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-extensions-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 547941; +var summary = 'js weak maps'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + var TestPassCount = 0; + var TestFailCount = 0; + var TestTodoCount = 0; + + var TODO = 1; + + function check(fun, todo) { + var thrown = null; + var success = false; + try { + success = fun(); + } catch (x) { + thrown = x; + } + + if (thrown) + success = false; + + if (todo) { + TestTodoCount++; + + if (success) { + var ex = new Error; + print ("=== TODO but PASSED? ==="); + print (ex.stack); + print ("========================"); + } + + return; + } + + if (success) { + TestPassCount++; + } else { + TestFailCount++; + + var ex = new Error; + print ("=== FAILED ==="); + print (ex.stack); + if (thrown) { + print (" threw exception:"); + print (thrown); + } + print ("=============="); + } + } + + function checkThrows(fun, todo) { + let thrown = false; + try { + fun(); + } catch (x) { + thrown = true; + } + + check(() => thrown, todo); + } + + var key = {}; + var map = new WeakMap(); + + check(() => !map.has(key)); + check(() => map.delete(key) == false); + check(() => map.set(key, 42) === map); + check(() => map.get(key) == 42); + check(() => typeof map.get({}) == "undefined"); + check(() => map.get({}, "foo") == undefined); + + gc(); gc(); gc(); + + check(() => map.get(key) == 42); + check(() => map.delete(key) == true); + check(() => map.delete(key) == false); + check(() => map.delete({}) == false); + + check(() => typeof map.get(key) == "undefined"); + check(() => !map.has(key)); + check(() => map.delete(key) == false); + + var value = { }; + check(() => map.set(new Object(), value) === map); + gc(); gc(); gc(); + + check(() => map.has("non-object key") == false); + check(() => map.has() == false); + check(() => map.get("non-object key") == undefined); + check(() => map.get() == undefined); + check(() => map.delete("non-object key") == false); + check(() => map.delete() == false); + + check(() => map.set(key) === map); + check(() => map.get(key) == undefined); + + checkThrows(() => map.set("non-object key", value)); + + print ("done"); + + assert.sameValue(0, TestFailCount, "weak map tests"); +} diff --git a/test/staging/sm/fields/await-identifier-module-1.js b/test/staging/sm/fields/await-identifier-module-1.js new file mode 100644 index 0000000000..3f49917cb9 --- /dev/null +++ b/test/staging/sm/fields/await-identifier-module-1.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +negative: + phase: parse + type: SyntaxError +description: | + pending +esid: pending +---*/ + +async () => class { [await] = 1 }; +$DONOTEVALUATE(); diff --git a/test/staging/sm/fields/await-identifier-module-2.js b/test/staging/sm/fields/await-identifier-module-2.js new file mode 100644 index 0000000000..eaf4ce0c42 --- /dev/null +++ b/test/staging/sm/fields/await-identifier-module-2.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +negative: + phase: parse + type: SyntaxError +description: | + pending +esid: pending +---*/ + +async () => class { x = await }; +$DONOTEVALUATE(); diff --git a/test/staging/sm/fields/await-identifier-module-3.js b/test/staging/sm/fields/await-identifier-module-3.js new file mode 100644 index 0000000000..2cf7854476 --- /dev/null +++ b/test/staging/sm/fields/await-identifier-module-3.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +negative: + phase: parse + type: SyntaxError +description: | + pending +esid: pending +---*/ + +async () => class { x = await 1 }; +$DONOTEVALUATE(); diff --git a/test/staging/sm/fields/await-identifier-script.js b/test/staging/sm/fields/await-identifier-script.js new file mode 100644 index 0000000000..5cf66db5e9 --- /dev/null +++ b/test/staging/sm/fields/await-identifier-script.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var await = 1; + +async function getClass() { + return class { + x = await; + }; +} + +getClass().then(cl => { + assert.sameValue(new cl().x, 1); +}); + +assert.sameValue(raisesException(SyntaxError)(` +async () => class { [await] = 1 }; +`), true); + +assert.sameValue(raisesException(SyntaxError)(` + async () => class { x = await 1 }; +`), true); + diff --git a/test/staging/sm/fields/bug1587574.js b/test/staging/sm/fields/bug1587574.js new file mode 100644 index 0000000000..fdb97624ce --- /dev/null +++ b/test/staging/sm/fields/bug1587574.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Don't Crash +var testStr = ` +class C extends Object { + constructor() { + eval(\`a => b => { + class Q { f = 1; } // inhibits lazy parsing + super(); + }\`); + } +} +new C;` +assert.sameValue(raisesException(ReferenceError)(testStr), true); + diff --git a/test/staging/sm/fields/init-order.js b/test/staging/sm/fields/init-order.js new file mode 100644 index 0000000000..b2614d83d1 --- /dev/null +++ b/test/staging/sm/fields/init-order.js @@ -0,0 +1,34 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function g1() { + throw 10; +} + +function g2() { + throw 20; +} + +class A { + #x = "hello" + g1(); + constructor(o = g2()) { + } +}; + +var thrown; +try { + new A; +} catch (e) { + thrown = e; +} + +assert.sameValue(thrown, 10); + diff --git a/test/staging/sm/fields/numeric-fields.js b/test/staging/sm/fields/numeric-fields.js new file mode 100644 index 0000000000..587a816f14 --- /dev/null +++ b/test/staging/sm/fields/numeric-fields.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Number field names. +class C { + 128 = class {}; +} +assert.sameValue(new C()[128].name, "128"); + +// Bigint field names. +class D { + 128n = class {}; +} +assert.sameValue(new D()[128].name, "128"); + diff --git a/test/staging/sm/fields/scopes.js b/test/staging/sm/fields/scopes.js new file mode 100644 index 0000000000..3ec735c4e8 --- /dev/null +++ b/test/staging/sm/fields/scopes.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(function({ + k = class i { + [_ => i]() + {} + } +} = {}) { + var j = 0; +})() + diff --git a/test/staging/sm/fields/unimplemented.js b/test/staging/sm/fields/unimplemented.js new file mode 100644 index 0000000000..91c8383ed1 --- /dev/null +++ b/test/staging/sm/fields/unimplemented.js @@ -0,0 +1,66 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Field syntax doesn't crash the engine when fields are disabled. + +// Are fields enabled? +let fieldsEnabled = false; +try { + Function("class C { x; }"); + fieldsEnabled = true; +} catch (exc) { + assert.sameValue(exc instanceof SyntaxError, true); +} + +// If not, run these tests. (Many other tests cover actual behavior of the +// feature when enabled.) +if (!fieldsEnabled) { + let source = `class C { + x + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); + + source = `class C { + x = 0; + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); + + source = `class C { + 0 = 0; + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); + + source = `class C { + [0] = 0; + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); + + source = `class C { + "hi" = 0; + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); + + source = `class C { + "hi" = 0; + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); + + source = `class C { + d = function(){}; + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); + + source = `class C { + d = class D { x = 0; }; + }`; + assertThrowsInstanceOf(() => Function(source), SyntaxError); +} + diff --git a/test/staging/sm/generators/create-function-parse-before-getprototype.js b/test/staging/sm/generators/create-function-parse-before-getprototype.js new file mode 100644 index 0000000000..fd823b8083 --- /dev/null +++ b/test/staging/sm/generators/create-function-parse-before-getprototype.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var getProtoCalled = false; + +var newTarget = Object.defineProperty(function(){}.bind(), "prototype", { + get() { + getProtoCalled = true; + return null; + } +}); + +var Generator = function*(){}.constructor; + +assertThrowsInstanceOf(() => { + Reflect.construct(Generator, ["@error"], newTarget); +}, SyntaxError); + +assert.sameValue(getProtoCalled, false); + diff --git a/test/staging/sm/generators/delegating-yield-1.js b/test/staging/sm/generators/delegating-yield-1.js new file mode 100644 index 0000000000..3455324d6f --- /dev/null +++ b/test/staging/sm/generators/delegating-yield-1.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-objects.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js + +// Test that yield* re-yields received results without re-boxing. + +function results(results) { + var i = 0; + function next() { + return results[i++]; + } + var iter = { next: next } + var ret = {}; + ret[Symbol.iterator] = function () { return iter; } + return ret; +} + +function* yield_results(expected) { + return yield* results(expected); +} + +function collect_results(iterable) { + var ret = []; + var result; + var iter = iterable[Symbol.iterator](); + do { + result = iter.next(); + ret.push(result); + } while (!result.done); + return ret; +} + +// We have to put a full result for the end, because the return will re-box. +var expected = [{value: 1}, {value: 34, done: true}]; + +// Sanity check. +assert.deepEqual(expected, collect_results(results(expected))); +assert.deepEqual(expected, collect_results(yield_results(expected))); + diff --git a/test/staging/sm/generators/delegating-yield-10.js b/test/staging/sm/generators/delegating-yield-10.js new file mode 100644 index 0000000000..baf2eb0c20 --- /dev/null +++ b/test/staging/sm/generators/delegating-yield-10.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Errors accessing next, done, or value don't cause an exception to be +// thrown into the iterator of a yield*. + +function* g(n) { for (var i=0; i 0) { + yield n; + yield* countdown(--n); + } + return 34; +} + +function collect_results(iter) { + var ret = []; + var result; + do { + result = iter.next(); + ret.push(result); + } while (!result.done); + return ret; +} + +var expected = [ + // yield in countdown(3), n == 3 + {value: 3, done: false}, + // yield in yield* countdown(2), n == 2 + {value: 2, done: false}, + // yield in nested yield* countdown(1), n == 1 + {value: 1, done: false}, + // countdown(0) yields no values + // second go-through of countdown(2) loop, n == 1 + {value: 1, done: false}, + // second go-through of countdown(3) loop, n == 2 + {value: 2, done: false}, + // yield in yield* countdown(1), n == 1 + {value: 1, done: false}, + // third go-through of countdown(3) loop, n == 1 + {value: 1, done: false}, + // done + {value: 34, done: true} +]; + +assert.deepEqual(expected, collect_results(countdown(3))); + diff --git a/test/staging/sm/generators/delegating-yield-9.js b/test/staging/sm/generators/delegating-yield-9.js new file mode 100644 index 0000000000..5d69b168e6 --- /dev/null +++ b/test/staging/sm/generators/delegating-yield-9.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that yield* can appear in a loop, and inside yield. + +function* countdown(n) { + while (n > 0) { + yield (yield* countdown(--n)); + } + return 34; +} + +function collect_results(iter) { + var ret = []; + var result; + do { + result = iter.next(); + ret.push(result); + } while (!result.done); + return ret; +} + +var expected = [ + // Only 34 yielded from the "yield" and the last return make it out. + // Three yields in countdown(3), two in countdown(2), and one in + // countdown(1) (called twice). + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: true}, // final +]; + +assert.deepEqual(collect_results(countdown(3)), expected); + diff --git a/test/staging/sm/generators/gen-with-call-obj.js b/test/staging/sm/generators/gen-with-call-obj.js new file mode 100644 index 0000000000..878ed6f383 --- /dev/null +++ b/test/staging/sm/generators/gen-with-call-obj.js @@ -0,0 +1,46 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var foo; + +function* gen() { + var x = 0; + foo = function() { return x++; } + for (var i = 0; i < 10; ++i) + yield x++; +} + +var j = 0; +for (i of gen()) + assert.sameValue(i, j++); + +// now mess up the stack + +function f1(x) { + var a, b, c, d, e, f, g; + return x <= 0 ? 0 : f1(x-1); +} +f1(10); +function f2(x) { + var a = x, b = x; + return x <= 0 ? 0 : f2(x-1); +} +f2(10); + +// now observe gen's call object (which should have been put) + +gc(); +assert.sameValue(foo(), 10); +gc(); +assert.sameValue(foo(), 11); +gc(); +assert.sameValue(foo(), 12); + diff --git a/test/staging/sm/generators/iteration.js b/test/staging/sm/generators/iteration.js new file mode 100644 index 0000000000..06ee0b416f --- /dev/null +++ b/test/staging/sm/generators/iteration.js @@ -0,0 +1,583 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-objects.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js + +// Test aspects of the generator runtime. + + +var GeneratorFunction = (function*(){yield 1;}).constructor; + + +function TestGeneratorResultPrototype() { + function* g() { yield 1; } + var iter = g(); + assertIteratorNext(iter, 1); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); +} +TestGeneratorResultPrototype(); + +function TestGenerator(g, expected_values_for_next, + send_val, expected_values_for_send) { + function testNext(thunk) { + var iter = thunk(); + for (var i = 0; i < expected_values_for_next.length; i++) { + assertIteratorResult(iter.next(), expected_values_for_next[i], + i == expected_values_for_next.length - 1); + } + assertIteratorDone(iter, undefined); + } + function testSend(thunk) { + var iter = thunk(); + for (var i = 0; i < expected_values_for_send.length; i++) { + assertIteratorResult(iter.next(send_val), + expected_values_for_send[i], + i == expected_values_for_send.length - 1); + } + assertIteratorDone(iter, undefined); + } + function testThrow(thunk) { + for (var i = 0; i < expected_values_for_next.length; i++) { + var iter = thunk(); + for (var j = 0; j < i; j++) { + assertIteratorResult(iter.next(), + expected_values_for_next[j], + j == expected_values_for_next.length - 1); + } + var Sentinel = function () {} + assertThrowsInstanceOf(function () { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + } + + testNext(g); + testSend(g); + testThrow(g); + + testNext(function*() { return yield* g(); }); + testSend(function*() { return yield* g(); }); + testThrow(function*() { return yield* g(); }); + + if (g instanceof GeneratorFunction) { + testNext(function() { return g(); }); + testSend(function() { return g(); }); + testThrow(function() { return g(); }); + } +} + +TestGenerator(function* g1() { }, + [undefined], + "foo", + [undefined]); + +TestGenerator(function* g2() { yield 1; }, + [1, undefined], + "foo", + [1, undefined]); + +TestGenerator(function* g3() { yield 1; yield 2; }, + [1, 2, undefined], + "foo", + [1, 2, undefined]); + +TestGenerator(function* g4() { yield 1; yield 2; return 3; }, + [1, 2, 3], + "foo", + [1, 2, 3]); + +TestGenerator(function* g5() { return 1; }, + [1], + "foo", + [1]); + +TestGenerator(function* g6() { var x = yield 1; return x; }, + [1, undefined], + "foo", + [1, "foo"]); + +TestGenerator(function* g7() { var x = yield 1; yield 2; return x; }, + [1, 2, undefined], + "foo", + [1, 2, "foo"]); + +TestGenerator(function* g8() { for (var x = 0; x < 4; x++) { yield x; } }, + [0, 1, 2, 3, undefined], + "foo", + [0, 1, 2, 3, undefined]); + +// Generator with arguments. +TestGenerator( + function g9() { + return (function*(a, b, c, d) { + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// Too few arguments. +TestGenerator( + function g10() { + return (function*(a, b, c, d) { + yield a; yield b; yield c; yield d; + })("fee", "fi"); + }, + ["fee", "fi", undefined, undefined, undefined], + "foo", + ["fee", "fi", undefined, undefined, undefined]); + +// Too many arguments. +TestGenerator( + function g11() { + return (function*(a, b, c, d) { + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum", "I smell the blood of an Englishman"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// The arguments object. +TestGenerator( + function g12() { + return (function*(a, b, c, d) { + for (var i = 0; i < arguments.length; i++) { + yield arguments[i]; + } + })("fee", "fi", "fo", "fum", "I smell the blood of an Englishman"); + }, + ["fee", "fi", "fo", "fum", "I smell the blood of an Englishman", + undefined], + "foo", + ["fee", "fi", "fo", "fum", "I smell the blood of an Englishman", + undefined]); + +// Access to captured free variables. +TestGenerator( + function g13() { + return (function(a, b, c, d) { + return (function*() { + yield a; yield b; yield c; yield d; + })(); + })("fee", "fi", "fo", "fum"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// Abusing the arguments object. +TestGenerator( + function g14() { + return (function*(a, b, c, d) { + arguments[0] = "Be he live"; + arguments[1] = "or be he dead"; + arguments[2] = "I'll grind his bones"; + arguments[3] = "to make my bread"; + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum"); + }, + ["Be he live", "or be he dead", "I'll grind his bones", "to make my bread", + undefined], + "foo", + ["Be he live", "or be he dead", "I'll grind his bones", "to make my bread", + undefined]); + +// Abusing the arguments object: strict mode. +TestGenerator( + function g15() { + return (function*(a, b, c, d) { + "use strict"; + arguments[0] = "Be he live"; + arguments[1] = "or be he dead"; + arguments[2] = "I'll grind his bones"; + arguments[3] = "to make my bread"; + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// GC. +if (typeof gc == 'function') { + TestGenerator(function* g16() { yield "baz"; gc(); yield "qux"; }, + ["baz", "qux", undefined], + "foo", + ["baz", "qux", undefined]); +} + +// Receivers. +TestGenerator( + function g17() { + function* g() { yield this.x; yield this.y; } + var o = { start: g, x: 1, y: 2 }; + return o.start(); + }, + [1, 2, undefined], + "foo", + [1, 2, undefined]); + +// FIXME: Capture the generator object as "this" in new g(). Bug 907742. +// TestGenerator( +// function g18() { +// function* g() { yield this.x; yield this.y; } +// var iter = new g; +// iter.x = 1; +// iter.y = 2; +// return iter; +// }, +// [1, 2, undefined], +// "foo", +// [1, 2, undefined]); + +TestGenerator( + function* g19() { + var x = 1; + yield x; + with({x:2}) { yield x; } + yield x; + }, + [1, 2, 1, undefined], + "foo", + [1, 2, 1, undefined]); + +TestGenerator( + function* g20() { yield (1 + (yield 2) + 3); }, + [2, NaN, undefined], + "foo", + [2, "1foo3", undefined]); + +TestGenerator( + function* g21() { return (1 + (yield 2) + 3); }, + [2, NaN], + "foo", + [2, "1foo3"]); + +TestGenerator( + function* g22() { yield (1 + (yield 2) + 3); yield (4 + (yield 5) + 6); }, + [2, NaN, 5, NaN, undefined], + "foo", + [2, "1foo3", 5, "4foo6", undefined]); + +TestGenerator( + function* g23() { + return (yield (1 + (yield 2) + 3)) + (yield (4 + (yield 5) + 6)); + }, + [2, NaN, 5, NaN, NaN], + "foo", + [2, "1foo3", 5, "4foo6", "foofoo"]); + +// Rewind a try context with and without operands on the stack. +TestGenerator( + function* g24() { + try { + return (yield (1 + (yield 2) + 3)) + (yield (4 + (yield 5) + 6)); + } catch (e) { + throw e; + } + }, + [2, NaN, 5, NaN, NaN], + "foo", + [2, "1foo3", 5, "4foo6", "foofoo"]); + +// Yielding in a catch context, with and without operands on the stack. +TestGenerator( + function* g25() { + try { + throw (yield (1 + (yield 2) + 3)) + } catch (e) { + if (typeof e == 'object') throw e; + return e + (yield (4 + (yield 5) + 6)); + } + }, + [2, NaN, 5, NaN, NaN], + "foo", + [2, "1foo3", 5, "4foo6", "foofoo"]); + +// Generator function instances. +TestGenerator(GeneratorFunction(), + [undefined], + "foo", + [undefined]); + +TestGenerator(new GeneratorFunction(), + [undefined], + "foo", + [undefined]); + +TestGenerator(GeneratorFunction('yield 1;'), + [1, undefined], + "foo", + [1, undefined]); + +TestGenerator( + function() { return GeneratorFunction('x', 'y', 'yield x + y;')(1, 2) }, + [3, undefined], + "foo", + [3, undefined]); + +// Access to this with formal arguments. +TestGenerator( + function () { + return ({ x: 42, g: function* (a) { yield this.x } }).g(0); + }, + [42, undefined], + "foo", + [42, undefined]); + +function TestTryCatch(instantiate) { + function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } + function Sentinel() {} + + function Test1(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test1(instantiate(g)); + + function Test2(iter) { + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test2(instantiate(g)); + + function Test3(iter) { + assertIteratorNext(iter, 1); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test3(instantiate(g)); + + function Test4(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test4(instantiate(g)); + + function Test5(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + + } + Test5(instantiate(g)); + + function Test6(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test6(instantiate(g)); +} +TestTryCatch(function (g) { return g(); }); +TestTryCatch(function* (g) { return yield* g(); }); + +function TestTryFinally(instantiate) { + function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } + function Sentinel() {} + function Sentinel2() {} + + function Test1(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test1(instantiate(g)); + + function Test2(iter) { + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test2(instantiate(g)); + + function Test3(iter) { + assertIteratorNext(iter, 1); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test3(instantiate(g)); + + function Test4(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorResult(iter.throw(new Sentinel), 3, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel); + assertIteratorDone(iter, undefined); + + } + Test4(instantiate(g)); + + function Test5(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorResult(iter.throw(new Sentinel), 3, false); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel2); }, Sentinel2); + assertIteratorDone(iter, undefined); + } + Test5(instantiate(g)); + + function Test6(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test6(instantiate(g)); + + function Test7(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test7(instantiate(g)); +} +TestTryFinally(function (g) { return g(); }); +TestTryFinally(function* (g) { return yield* g(); }); + +function TestNestedTry(instantiate) { + function* g() { + try { + yield 1; + try { yield 2; } catch (e) { yield e; } + yield 3; + } finally { + yield 4; + } + yield 5; + } + function Sentinel() {} + function Sentinel2() {} + + function Test1(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertIteratorNext(iter, 5); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test1(instantiate(g)); + + function Test2(iter) { + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test2(instantiate(g)); + + function Test3(iter) { + assertIteratorNext(iter, 1); + assertIteratorResult(iter.throw(new Sentinel), 4, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test3(instantiate(g)); + + function Test4(iter) { + assertIteratorNext(iter, 1); + assertIteratorResult(iter.throw(new Sentinel), 4, false); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel2); }, Sentinel2); + assertIteratorDone(iter, undefined); + } + Test4(instantiate(g)); + + function Test5(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertIteratorNext(iter, 5); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + + } + Test5(instantiate(g)); + + function Test6(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorResult(iter.throw(new Sentinel2), 4, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel2); + assertIteratorDone(iter, undefined); + } + Test6(instantiate(g)); + + function Test7(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertIteratorResult(iter.throw(new Sentinel2), 4, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel2); + assertIteratorDone(iter, undefined); + + } + Test7(instantiate(g)); + + // That's probably enough. +} +TestNestedTry(function (g) { return g(); }); +TestNestedTry(function* (g) { return yield* g(); }); + +function TestRecursion() { + function TestNextRecursion() { + function* g() { yield iter.next(); } + var iter = g(); + return iter.next(); + } + function TestSendRecursion() { + function* g() { yield iter.next(42); } + var iter = g(); + return iter.next(); + } + function TestThrowRecursion() { + function* g() { yield iter.throw(1); } + var iter = g(); + return iter.next(); + } + assertThrowsInstanceOf(TestNextRecursion, TypeError); + assertThrowsInstanceOf(TestSendRecursion, TypeError); + assertThrowsInstanceOf(TestThrowRecursion, TypeError); +} +TestRecursion(); + diff --git a/test/staging/sm/generators/iterator-next-non-object.js b/test/staging/sm/generators/iterator-next-non-object.js new file mode 100644 index 0000000000..c29431a511 --- /dev/null +++ b/test/staging/sm/generators/iterator-next-non-object.js @@ -0,0 +1,73 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1016936; +var summary = "IteratorNext should throw if the value returned by iterator.next() is not an object."; + +print(BUGNUMBER + ": " + summary); + +var nonobjs = [ + null, + undefined, + 1, + true, + "a", + Symbol.iterator, +]; + +function createIterable(v) { + var iterable = {}; + iterable[Symbol.iterator] = function () { + return { + next: function () { + return v; + } + }; + }; + return iterable; +} + +function f() { +} + +for (var nonobj of nonobjs) { + var iterable = createIterable(nonobj); + + assertThrowsInstanceOf(() => [...iterable], TypeError); + assertThrowsInstanceOf(() => f(...iterable), TypeError); + + assertThrowsInstanceOf(() => { for (var x of iterable) {} }, TypeError); + + assertThrowsInstanceOf(() => { + var [a] = iterable; + }, TypeError); + assertThrowsInstanceOf(() => { + var [...a] = iterable; + }, TypeError); + + assertThrowsInstanceOf(() => Array.from(iterable), TypeError); + assertThrowsInstanceOf(() => new Map(iterable), TypeError); + assertThrowsInstanceOf(() => new Set(iterable), TypeError); + assertThrowsInstanceOf(() => new WeakMap(iterable), TypeError); + assertThrowsInstanceOf(() => new WeakSet(iterable), TypeError); + // FIXME: bug 1232266 + // assertThrowsInstanceOf(() => new Int8Array(iterable), TypeError); + assertThrowsInstanceOf(() => Int8Array.from(iterable), TypeError); + + assertThrowsInstanceOf(() => { + var g = function*() { + yield* iterable; + }; + var v = g(); + v.next(); + }, TypeError); +} + diff --git a/test/staging/sm/generators/objects.js b/test/staging/sm/generators/objects.js new file mode 100644 index 0000000000..8fb4022d06 --- /dev/null +++ b/test/staging/sm/generators/objects.js @@ -0,0 +1,58 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-objects.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js + +// Test aspects of the generator runtime. + +// Test the properties and prototype of a generator object. +function TestGeneratorObject() { + function* g() { yield 1; } + + var iter = g(); + assert.sameValue(Object.getPrototypeOf(iter), g.prototype); + assertTrue(iter instanceof g); + assert.sameValue(String(iter), "[object Generator]"); + assert.deepEqual(Object.getOwnPropertyNames(iter), []); + assertNotEq(g(), iter); +} +TestGeneratorObject(); + + +// Test the methods of generator objects. +function TestGeneratorObjectMethods() { + function* g() { yield 1; } + var iter = g(); + + assert.sameValue(iter.next.length, 1); + assert.sameValue(iter.return.length, 1); + assert.sameValue(iter.throw.length, 1); + + function TestNonGenerator(non_generator) { + assertThrowsInstanceOf(function() { iter.next.call(non_generator); }, TypeError); + assertThrowsInstanceOf(function() { iter.next.call(non_generator, 1); }, TypeError); + assertThrowsInstanceOf(function() { iter.return.call(non_generator, 1); }, TypeError); + assertThrowsInstanceOf(function() { iter.throw.call(non_generator, 1); }, TypeError); + assertThrowsInstanceOf(function() { iter.close.call(non_generator); }, TypeError); + } + + TestNonGenerator(1); + TestNonGenerator({}); + TestNonGenerator(function(){}); + TestNonGenerator(g); + TestNonGenerator(g.prototype); +} +TestGeneratorObjectMethods(); + + diff --git a/test/staging/sm/generators/regress-366941.js b/test/staging/sm/generators/regress-366941.js new file mode 100644 index 0000000000..d8a497230a --- /dev/null +++ b/test/staging/sm/generators/regress-366941.js @@ -0,0 +1,86 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366941; +var summary = 'Destructuring enumerations, iterations'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + var list1 = [[1,2],[3,4],[5,6]]; + var list2 = [[1,2,3],[4,5,6],[7,8,9]]; + + expect = '1,2;3,4;5,6;'; + actual = ''; + + for (var [foo, bar] of list1) { + actual += foo + "," + bar + ";"; + } + + assert.sameValue(expect, actual, summary + ': 1'); + + expect = '1,2,3;4,5,6;7,8,9;'; + actual = ''; + for (var [foo, bar, baz] of list2) { + actual += foo + "," + bar + "," + baz + ";"; + } + + assert.sameValue(expect, actual, summary + ': 2'); + + function* gen(list) { + for (var test of list) { + yield test; + } + } + + var iter1 = gen(list1); + + expect = '1,2;3,4;5,6;'; + actual = ''; + + for (var [foo, bar] of iter1) { + actual += foo + "," + bar + ";"; + } + + assert.sameValue(expect, actual, summary + ': 3'); + + // Before JS1.7's destructuring for…in was fixed to match JS1.8's, + // the expected result was a SyntaxError about the for…in loop's lhs. + var iter2 = gen(list2); + expect = '1,2,3;4,5,6;7,8,9;'; + actual = ''; + + try + { + eval('for (var [foo, bar, baz] of iter2) {' + + 'actual += foo + "," + bar + "," + baz + ";";' + + '}'); + } + catch(ex) + { + actual = ex + ''; + } + + assert.sameValue(expect, actual, summary + ': 4'); +} diff --git a/test/staging/sm/generators/return-finally.js b/test/staging/sm/generators/return-finally.js new file mode 100644 index 0000000000..06e82ec43f --- /dev/null +++ b/test/staging/sm/generators/return-finally.js @@ -0,0 +1,318 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1202134; +var summary = "Return value should not be overwritten by finally block with normal execution."; + +print(BUGNUMBER + ": " + summary); + +// ==== single ==== + +var f, g, v; +f = function*() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + } +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is return + try { + return 42; + } finally { + return 43; + } +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is throw + try { + return 42; + } finally { + throw 43; + } +}; +var caught = false; +g = f(); +try { + v = g.next(); +} catch (e) { + assert.sameValue(e, 43); + caught = true; +} +assert.sameValue(caught, true); + +f = function*() { + // F.[[type]] is break + do try { + return 42; + } finally { + break; + } while (false); + return 43; +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is break + L: try { + return 42; + } finally { + break L; + } + return 43; +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is continue + do try { + return 42; + } finally { + continue; + } while (false); + return 43; +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, true); + +// ==== nested ==== + +f = function*() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is break + do try { + return 43; + } finally { + break; + } while (0); + } +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is break + L: try { + return 43; + } finally { + break L; + } + } +} +g = f(); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is continue + do try { + return 43; + } finally { + continue; + } while (0); + } +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is normal + // B.[[type]] is normal + try { + // F.[[type]] is throw + try { + return 43; + } finally { + throw 9; + } + } catch (e) { + } + } +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is return + try { + return 41; + } finally { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + // F.[[type]] is break + do try { + return 43; + } finally { + break; + } while (0); + } + } +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +// ==== with yield ==== + +f = function*() { + // F.[[type]] is normal + // B.[[type]] is return + try { + return 42; + } finally { + yield 43; + } +}; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, false); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +// ==== throw() ==== + +f = function*() { + // F.[[type]] is throw + try { + return 42; + } finally { + yield 43; + } +}; +caught = false; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, false); +try { + v = g.throw(44); +} catch (e) { + assert.sameValue(e, 44); + caught = true; +} +assert.sameValue(caught, true); + +f = function*() { + // F.[[type]] is normal + try { + return 42; + } finally { + // F.[[type]] is normal + // B.[[type]] is throw + try { + yield 43; + } catch (e) { + } + } +}; +caught = false; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, false); +v = g.throw(44); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, true); + +// ==== return() ==== + +f = function*() { + // F.[[type]] is return + try { + return 42; + } finally { + yield 43; + } +}; +caught = false; +g = f(); +v = g.next(); +assert.sameValue(v.value, 43); +assert.sameValue(v.done, false); +v = g.return(44); +assert.sameValue(v.value, 44); +assert.sameValue(v.done, true); + +f = function*() { + // F.[[type]] is normal + // B.[[type]] is return + try { + yield 42; + } finally { + // F.[[type]] is continue + do try { + return 43; + } finally { + continue; + } while (0); + } +}; +caught = false; +g = f(); +v = g.next(); +assert.sameValue(v.value, 42); +assert.sameValue(v.done, false); +v = g.return(44); +assert.sameValue(v.value, 44); +assert.sameValue(v.done, true); + diff --git a/test/staging/sm/generators/runtime.js b/test/staging/sm/generators/runtime.js new file mode 100644 index 0000000000..203637de4e --- /dev/null +++ b/test/staging/sm/generators/runtime.js @@ -0,0 +1,141 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-runtime.js, available here: +// +// https://source.chromium.org/chromium/chromium/src/+/main:v8/test/mjsunit/es6/generators-runtime.js + +// Test aspects of the generator runtime. + +// See http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.19.3. + +function assertSyntaxError(str) { + assertThrowsInstanceOf(Function(str), SyntaxError); +} + + +function f() { "use strict"; } +function* g() { yield 1; } +var GeneratorFunctionPrototype = Object.getPrototypeOf(g); +var GeneratorFunction = GeneratorFunctionPrototype.constructor; +var GeneratorObjectPrototype = GeneratorFunctionPrototype.prototype; + + +// A generator function should have the same set of properties as any +// other function. +function TestGeneratorFunctionInstance() { + var f_own_property_names = Object.getOwnPropertyNames(f); + var g_own_property_names = Object.getOwnPropertyNames(g); + + f_own_property_names.sort(); + g_own_property_names.sort(); + + assert.deepEqual(f_own_property_names, g_own_property_names); + var i; + for (i = 0; i < f_own_property_names.length; i++) { + var prop = f_own_property_names[i]; + var f_desc = Object.getOwnPropertyDescriptor(f, prop); + var g_desc = Object.getOwnPropertyDescriptor(g, prop); + assert.sameValue(f_desc.configurable, g_desc.configurable, prop); + assert.sameValue(f_desc.writable, g_desc.writable, prop); + assert.sameValue(f_desc.enumerable, g_desc.enumerable, prop); + } +} +TestGeneratorFunctionInstance(); + + +// Generators have an additional object interposed in the chain between +// themselves and Function.prototype. +function TestGeneratorFunctionPrototype() { + // Sanity check. + assert.sameValue(Object.getPrototypeOf(f), Function.prototype); + assertNotEq(GeneratorFunctionPrototype, Function.prototype); + assert.sameValue(Object.getPrototypeOf(GeneratorFunctionPrototype), + Function.prototype); + assert.sameValue(Object.getPrototypeOf(function* () {}), + GeneratorFunctionPrototype); +} +TestGeneratorFunctionPrototype(); + + +// Functions that we associate with generator objects are actually defined by +// a common prototype. +function TestGeneratorObjectPrototype() { + // %GeneratorPrototype% must inherit from %IteratorPrototype%. + var iterProto = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); + assert.sameValue(Object.getPrototypeOf(GeneratorObjectPrototype), + iterProto); + assert.sameValue(Object.getPrototypeOf((function*(){yield 1}).prototype), + GeneratorObjectPrototype); + + var expected_property_names = ["next", "return", "throw", "constructor"]; + var found_property_names = + Object.getOwnPropertyNames(GeneratorObjectPrototype); + + expected_property_names.sort(); + found_property_names.sort(); + + assert.deepEqual(found_property_names, expected_property_names); + assert.deepEqual(Object.getOwnPropertySymbols(GeneratorObjectPrototype), [Symbol.toStringTag]); +} +TestGeneratorObjectPrototype(); + + +// This tests the object that would be called "GeneratorFunction", if it were +// like "Function". +function TestGeneratorFunction() { + assert.sameValue(GeneratorFunctionPrototype, GeneratorFunction.prototype); + assertTrue(g instanceof GeneratorFunction); + + assert.sameValue(Function, Object.getPrototypeOf(GeneratorFunction)); + assertTrue(g instanceof Function); + + assert.sameValue("function* g() { yield 1; }", g.toString()); + + // Not all functions are generators. + assertTrue(f instanceof Function); // Sanity check. + assertFalse(f instanceof GeneratorFunction); + + assertTrue((new GeneratorFunction()) instanceof GeneratorFunction); + assertTrue(GeneratorFunction() instanceof GeneratorFunction); + + assertTrue(GeneratorFunction('yield 1') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('return 1') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('a', 'yield a') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('a', 'return a') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('a', 'return a') instanceof GeneratorFunction); + assertSyntaxError("GeneratorFunction('yield', 'return yield')"); + assertTrue(GeneratorFunction('with (x) return foo;') instanceof GeneratorFunction); + assertSyntaxError("GeneratorFunction('\"use strict\"; with (x) return foo;')"); + + // Doesn't matter particularly what string gets serialized, as long + // as it contains "function*" and "yield 10". + assert.sameValue(GeneratorFunction('yield 10').toString(), + "function* anonymous(\n) {\nyield 10\n}"); +} +TestGeneratorFunction(); + + +function TestPerGeneratorPrototype() { + assertNotEq((function*(){}).prototype, (function*(){}).prototype); + assertNotEq((function*(){}).prototype, g.prototype); + assert.sameValue(typeof GeneratorFunctionPrototype, "object"); + assert.sameValue(g.prototype.__proto__.constructor, GeneratorFunctionPrototype, "object"); + assert.sameValue(Object.getPrototypeOf(g.prototype), GeneratorObjectPrototype); + assertFalse(g.prototype instanceof Function); + assert.sameValue(typeof (g.prototype), "object"); + + assert.deepEqual(Object.getOwnPropertyNames(g.prototype), []); +} +TestPerGeneratorPrototype(); + + diff --git a/test/staging/sm/generators/syntax.js b/test/staging/sm/generators/syntax.js new file mode 100644 index 0000000000..6391cc1054 --- /dev/null +++ b/test/staging/sm/generators/syntax.js @@ -0,0 +1,149 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-parsing.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-parsing.js + +function assertSyntaxError(str) { + var msg; + var evil = eval; + try { + // Non-direct eval. + evil(str); + } catch (exc) { + if (exc instanceof SyntaxError) + return; + msg = "Assertion failed: expected SyntaxError, got " + exc; + } + if (msg === undefined) + msg = "Assertion failed: expected SyntaxError, but no exception thrown"; + throw new Error(msg + " - " + str); +} + +// Yield statements. +function* g() { yield 3; yield 4; } + +// Yield expressions. +function* g() { (yield 3) + (yield 4); } + +// Yield without a RHS. +function* g() { yield; } +function* g() { yield } +function* g() { + yield +} +function* g() { (yield) } +function* g() { [yield] } +function* g() { {yield} } +function* g() { (yield), (yield) } +function* g() { yield; yield } +function* g() { (yield) ? yield : yield } +function* g() { + (yield) + ? yield + : yield +} + +// If yield has a RHS, it needs to start on the same line. The * in a +// yield* counts as starting the RHS. +function* g() { + yield * + foo +} +assertThrowsInstanceOf(() => Function("function* g() { yield\n* foo }"), SyntaxError); +assertIteratorNext(function*(){ + yield + 3 + }(), undefined) + +// A YieldExpression is not a LogicalORExpression. +assertThrowsInstanceOf(() => Function("function* g() { yield ? yield : yield }"), SyntaxError); + +// You can have a generator in strict mode. +function* g() { "use strict"; yield 3; yield 4; } + +// Generators can have return statements also, which internally parse to a kind +// of yield expression. +function* g() { yield 1; return; } +function* g() { yield 1; return 2; } +function* g() { yield 1; return 2; yield "dead"; } + +// Generator expression. +(function* () { yield 3; }); + +// Named generator expression. +(function* g() { yield 3; }); + +// Generators do not have to contain yield expressions. +function* g() { } + +// YieldExpressions can occur in the RHS of a YieldExpression. +function* g() { yield yield 1; } +function* g() { yield 3 + (yield 4); } + +// Generator definitions with a name of "yield" are not specifically ruled out +// by the spec, as the `yield' name is outside the generator itself. However, +// in strict-mode, "yield" is an invalid identifier. +function* yield() { (yield 3) + (yield 4); } +assertSyntaxError("function* yield() { 'use strict'; (yield 3) + (yield 4); }"); + +// In classic mode, yield is a normal identifier, outside of generators. +function yield(yield) { yield: yield (yield + yield (0)); } + +// Yield is always valid as a key in an object literal. +({ yield: 1 }); +function* g() { yield ({ yield: 1 }) } +function* g() { yield ({ get yield() { return 1; }}) } + +// Yield is a valid property name. +function* g(obj) { yield obj.yield; } + +// Checks that yield is a valid label in classic mode, but not valid in a strict +// mode or in generators. +function f() { yield: 1 } +assertSyntaxError("function f() { 'use strict'; yield: 1 }") +assertSyntaxError("function* g() { yield: 1 }") + +// Yield is only a keyword in the body of the generator, not in nested +// functions. +function* g() { function f(yield) { yield (yield + yield (0)); } } + +// Yield in a generator is not an identifier. +assertSyntaxError("function* g() { yield = 10; }"); + +// Yield binds very loosely, so this parses as "yield (3 + yield 4)", which is +// invalid. +assertSyntaxError("function* g() { yield 3 + yield 4; }"); + +// Yield is still a future-reserved-word in strict mode +assertSyntaxError("function f() { 'use strict'; var yield = 13; }"); + +// The name of the NFE isn't let-bound in F/G, so this is valid. +function f() { (function yield() {}); } +function* g() { (function yield() {}); } + +// The name of the NFE is let-bound in the function/generator expression, so this is invalid. +assertSyntaxError("function f() { (function* yield() {}); }"); +assertSyntaxError("function* g() { (function* yield() {}); }"); + +// The name of the declaration is let-bound in F, so this is valid. +function f() { function yield() {} } +function f() { function* yield() {} } + +// The name of the declaration is let-bound in G, so this is invalid. +assertSyntaxError("function* g() { function yield() {} }"); +assertSyntaxError("function* g() { function* yield() {} }"); + +// In generators, yield is invalid as a formal argument name. +assertSyntaxError("function* g(yield) { yield (10); }"); + diff --git a/test/staging/sm/generators/yield-error.js b/test/staging/sm/generators/yield-error.js new file mode 100644 index 0000000000..f321eb334b --- /dev/null +++ b/test/staging/sm/generators/yield-error.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1384299; +var summary = "yield outside of generators should provide better error"; + +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOfWithMessage( + () => eval("yield 10"), + SyntaxError, + "yield expression is only valid in generators"); + +assertThrowsInstanceOfWithMessage( + () => eval("yield 10"), + SyntaxError, + "yield expression is only valid in generators"); + +assertThrowsInstanceOfWithMessage( + () => eval("yield 10"), + SyntaxError, + "yield expression is only valid in generators"); + diff --git a/test/staging/sm/generators/yield-iterator-close.js b/test/staging/sm/generators/yield-iterator-close.js new file mode 100644 index 0000000000..0510cbf0c3 --- /dev/null +++ b/test/staging/sm/generators/yield-iterator-close.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that IteratorClose is called when a Generator is abruptly completed by +// Generator.return. + +var returnCalled = 0; +function* wrapNoThrow() { + let iter = { + [Symbol.iterator]() { + return this; + }, + next() { + return { value: 10, done: false }; + }, + return() { + returnCalled++; + return {}; + } + }; + for (const i of iter) { + yield i; + } +} + +// Breaking calls Generator.return, which causes the yield above to resume with +// an abrupt completion of kind "return", which then calls +// iter.return. +for (const i of wrapNoThrow()) { + break; +} +assert.sameValue(returnCalled, 1); + +function* wrapThrow() { + let iter = { + [Symbol.iterator]() { + return this; + }, + next() { + return { value: 10, done: false }; + }, + return() { + throw 42; + } + }; + for (const i of iter) { + yield i; + } +} + +// Breaking calls Generator.return, which, like above, calls iter.return. If +// iter.return throws, since the yield is resuming with an abrupt completion of +// kind "return", the newly thrown value takes precedence over returning. +assertThrowsValue(() => { + for (const i of wrapThrow()) { + break; + } +}, 42); + diff --git a/test/staging/sm/generators/yield-non-regexp.js b/test/staging/sm/generators/yield-non-regexp.js new file mode 100644 index 0000000000..1648674a00 --- /dev/null +++ b/test/staging/sm/generators/yield-non-regexp.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1099956; +var summary = + "The token next to yield should be tokenized as non-operand if yield is " + + "a valid name"; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var yield = 12, a = 3, b = 6, g = 2; +var yieldParsedAsIdentifier = false; + +yield /a; yieldParsedAsIdentifier = true; b/g; + +assert.sameValue(yieldParsedAsIdentifier, true); + diff --git a/test/staging/sm/generators/yield-star-iterator-close.js b/test/staging/sm/generators/yield-star-iterator-close.js new file mode 100644 index 0000000000..a77f3a1630 --- /dev/null +++ b/test/staging/sm/generators/yield-star-iterator-close.js @@ -0,0 +1,155 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests that the "return" method on iterators is called in yield* +// expressions. + +function test() { + var returnCalled = 0; + var returnCalledExpected = 0; + var nextCalled = 0; + var nextCalledExpected = 0; + var throwCalled = 0; + var throwCalledExpected = 0; + var iterable = {}; + iterable[Symbol.iterator] = makeIterator({ + next: function() { + nextCalled++; + return { done: false }; + }, + ret: function() { + returnCalled++; + return { done: true, value: "iter.return" }; + } + }); + + function* y() { + yield* iterable; + } + + // G.p.throw on an iterator without "throw" calls IteratorClose. + var g1 = y(); + g1.next(); + assertThrowsInstanceOf(function() { + g1.throw("foo"); + }, TypeError); + assert.sameValue(returnCalled, ++returnCalledExpected); + assert.sameValue(nextCalled, ++nextCalledExpected); + g1.next(); + assert.sameValue(nextCalled, nextCalledExpected); + + // G.p.return calls "return", and if the result.done is true, return the + // result. + var g2 = y(); + g2.next(); + var v2 = g2.return("test return"); + assert.sameValue(v2.done, true); + assert.sameValue(v2.value, "iter.return"); + assert.sameValue(returnCalled, ++returnCalledExpected); + assert.sameValue(nextCalled, ++nextCalledExpected); + g2.next(); + assert.sameValue(nextCalled, nextCalledExpected); + + // G.p.return calls "return", and if the result.done is false, continue + // yielding. + iterable[Symbol.iterator] = makeIterator({ + next: function() { + nextCalled++; + return { done: false }; + }, + ret: function() { + returnCalled++; + return { done: false, value: "iter.return" }; + } + }); + var g3 = y(); + g3.next(); + var v3 = g3.return("test return"); + assert.sameValue(v3.done, false); + assert.sameValue(v3.value, "iter.return"); + assert.sameValue(returnCalled, ++returnCalledExpected); + assert.sameValue(nextCalled, ++nextCalledExpected); + g3.next(); + assert.sameValue(nextCalled, ++nextCalledExpected); + + // G.p.return throwing does not re-call iter.return. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + throw "in iter.return"; + } + }); + var g4 = y(); + g4.next(); + assertThrowsValue(function() { + g4.return("in test"); + }, "in iter.return"); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // G.p.return expects iter.return to return an Object. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return 42; + } + }); + var g5 = y(); + g5.next(); + assertThrowsInstanceOf(function() { + g5.return("foo"); + }, TypeError); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // IteratorClose expects iter.return to return an Object. + var g6 = y(); + g6.next(); + assertThrowsInstanceOfWithMessageContains( + () => g6.throw("foo"), + TypeError, + "non-object" + ); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // G.p.return passes its argument to "return". + iterable[Symbol.iterator] = makeIterator({ + ret: function(x) { + assert.sameValue(x, "in test"); + returnCalled++; + return { done: true }; + } + }); + var g7 = y(); + g7.next(); + g7.return("in test"); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // If a throw method is present, do not call "return". + iterable[Symbol.iterator] = makeIterator({ + throw: function(e) { + throwCalled++; + throw e; + }, + ret: function(x) { + returnCalled++; + return { done: true }; + } + }); + var g8 = y(); + g8.next(); + assertThrowsValue(function() { + g8.throw("foo"); + }, "foo"); + assert.sameValue(throwCalled, ++throwCalledExpected); + assert.sameValue(returnCalled, returnCalledExpected); +} + +test(); + diff --git a/test/staging/sm/generators/yield-star-iterator-primitive.js b/test/staging/sm/generators/yield-star-iterator-primitive.js new file mode 100644 index 0000000000..5ddf443455 --- /dev/null +++ b/test/staging/sm/generators/yield-star-iterator-primitive.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1021835; +var summary = "Returning non-object from @@iterator should throw"; + +print(BUGNUMBER + ": " + summary); + +let primitives = [ + 1, + true, + undefined, + null, + "foo", + Symbol.iterator +]; + +for (let primitive of primitives) { + let obj = { + [Symbol.iterator]() { + return primitive; + } + }; + assertThrowsInstanceOf(() => { + function* g() { + yield* obj; + } + for (let x of g()) { + } + }, TypeError); +} + diff --git a/test/staging/sm/generators/yield-star-throw-htmldda.js b/test/staging/sm/generators/yield-star-throw-htmldda.js new file mode 100644 index 0000000000..1550d10158 --- /dev/null +++ b/test/staging/sm/generators/yield-star-throw-htmldda.js @@ -0,0 +1,39 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +features: +- IsHTMLDDA +includes: [sm/non262-generators-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function* g(iter) { + yield* iter; +} + +var calledReturn = false; + +var it = g({ + [Symbol.iterator]() { + return this; + }, + next() { + return {done: false}; + }, + throw: createIsHTMLDDA(), + return() { + calledReturn = true; + return {done: false}; + } +}); + +it.next(); + +assertThrowsInstanceOf(() => it.throw(""), TypeError); + +assert.sameValue(calledReturn, false); + diff --git a/test/staging/sm/global/adding-global-var-nonextensible-error.js b/test/staging/sm/global/adding-global-var-nonextensible-error.js new file mode 100644 index 0000000000..57c79c663d --- /dev/null +++ b/test/staging/sm/global/adding-global-var-nonextensible-error.js @@ -0,0 +1,44 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + preventExtensions on global +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 621432; +var summary = + "If a var statement can't create a global property because the global " + + "object isn't extensible, and an error is thrown while decompiling the " + + "global, don't assert"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var toSource = []; +Object.preventExtensions(this); + +try +{ + eval("var x;"); + throw new Error("no error thrown"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "expected TypeError, got: " + e); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/bug-320887.js b/test/staging/sm/global/bug-320887.js new file mode 100644 index 0000000000..572e98635d --- /dev/null +++ b/test/staging/sm/global/bug-320887.js @@ -0,0 +1,25 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// `var x` should not call the getter of an existing global property. + +var hit = 0; +Object.defineProperty(this, "x", { + get: function () { return ++hit; }, + configurable: true +}); +eval("var x;"); +assert.sameValue(hit, 0); + +// The declaration should not have redefined the global x, either. +assert.sameValue(x, 1); +assert.sameValue(x, 2); + diff --git a/test/staging/sm/global/bug660612.js b/test/staging/sm/global/bug660612.js new file mode 100644 index 0000000000..c200dfa4a8 --- /dev/null +++ b/test/staging/sm/global/bug660612.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +try { + decodeURIComponent('%ED%A0%80'); + assert.sameValue(true, false, "expected an URIError"); +} catch (e) { + assert.sameValue(e instanceof URIError, true); +} diff --git a/test/staging/sm/global/decodeURI-decodes-FFFE-FFFF.js b/test/staging/sm/global/decodeURI-decodes-FFFE-FFFF.js new file mode 100644 index 0000000000..f9b7bb6fa3 --- /dev/null +++ b/test/staging/sm/global/decodeURI-decodes-FFFE-FFFF.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 520095; +var summary = + "decodeURI{,Component} should return the specified character for " + + "'%EF%BF%BE' and '%EF%BF%BF', not return U+FFFD"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(decodeURI("%EF%BF%BE"), "\uFFFE"); +assert.sameValue(decodeURI("%EF%BF%BF"), "\uFFFF"); +assert.sameValue(decodeURIComponent("%EF%BF%BE"), "\uFFFE"); +assert.sameValue(decodeURIComponent("%EF%BF%BF"), "\uFFFF"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/delete-global-NaN-property.js b/test/staging/sm/global/delete-global-NaN-property.js new file mode 100644 index 0000000000..ca4ca04b95 --- /dev/null +++ b/test/staging/sm/global/delete-global-NaN-property.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict" + +//----------------------------------------------------------------------------- +var BUGNUMBER = 649570; +var summary = "|delete window.NaN| should throw a TypeError"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var g = this, v = false; +try +{ + delete this.NaN; + throw new Error("no exception thrown"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "Expected a TypeError, got: " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/global/direct-eval-but-not.js b/test/staging/sm/global/direct-eval-but-not.js new file mode 100644 index 0000000000..27c8b54a9d --- /dev/null +++ b/test/staging/sm/global/direct-eval-but-not.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 609256; +var summary = + "Don't crash doing a direct eval when eval doesn't resolve to an object " + + "(let alone the original eval function)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var eval = ""; +try +{ + eval(); + throw new Error("didn't throw?"); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/eval-01.js b/test/staging/sm/global/eval-01.js new file mode 100644 index 0000000000..33322a823b --- /dev/null +++ b/test/staging/sm/global/eval-01.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = 9; +var global = this; + +function test() { + var a = 0; + + // direct eval sees local a + assert.sameValue(eval('a+1'), 1); + assert.sameValue(eval('eval("a+1")'), 1); + + // indirect: using a name other than 'eval' + var foo = eval; + assert.sameValue(foo('a+1'), 10); + assert.sameValue(eval('foo("a+1")'), 10); // outer eval is direct, inner foo("a+1") is indirect + + // indirect: qualified method call + assert.sameValue(this.eval("a+1"), 10); + assert.sameValue(global.eval("a+1"), 10); + var obj = {foo: eval, eval: eval}; + assert.sameValue(obj.foo('a+1'), 10); + assert.sameValue(obj.eval('a+1'), 10); + var name = "eval"; + assert.sameValue(obj[name]('a+1'), 10); + assert.sameValue([eval][0]('a+1'), 10); + + // indirect: not called from a CallExpression at all + assert.sameValue(eval.call(undefined, 'a+1'), 10); + assert.sameValue(eval.call(global, 'a+1'), 10); + assert.sameValue(eval.apply(undefined, ['a+1']), 10); + assert.sameValue(eval.apply(global, ['a+1']), 10); + assert.sameValue(['a+1'].map(eval)[0], 10); +} + +test(); diff --git a/test/staging/sm/global/eval-02.js b/test/staging/sm/global/eval-02.js new file mode 100644 index 0000000000..ad06e925bc --- /dev/null +++ b/test/staging/sm/global/eval-02.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = 9; + +function directArg(eval, s) { + var a = 1; + return eval(s); +} + +function directVar(f, s) { + var eval = f; + var a = 1; + return eval(s); +} + +function directWith(obj, s) { + var f; + with (obj) { + f = function () { + var a = 1; + return eval(s); + }; + } + return f(); +} + +// direct eval, even though 'eval' is an argument +assert.sameValue(directArg(eval, 'a+1'), 2); + +// direct eval, even though 'eval' is a var +assert.sameValue(directVar(eval, 'a+1'), 2); + +// direct eval, even though 'eval' is found via a with block +assert.sameValue(directWith(this, 'a+1'), 2); +assert.sameValue(directWith({eval: eval, a: -1000}, 'a+1'), 2); + diff --git a/test/staging/sm/global/eval-in-strict-eval-in-normal-function.js b/test/staging/sm/global/eval-in-strict-eval-in-normal-function.js new file mode 100644 index 0000000000..3345c482ea --- /dev/null +++ b/test/staging/sm/global/eval-in-strict-eval-in-normal-function.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 620130; +var summary = + "Calls to eval with same code + varying strict mode of script containing " + + "eval == fail"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function t(code) { return eval(code); } + +assert.sameValue(t("'use strict'; try { eval('with (5) 17'); } catch (e) { 'threw'; }"), + "threw"); +assert.sameValue(t("try { eval('with (5) 17'); } catch (e) { 'threw'; }"), + 17); +assert.sameValue(t("'use strict'; try { eval('with (5) 17'); } catch (e) { 'threw'; }"), + "threw"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/eval-inside-with-is-direct.js b/test/staging/sm/global/eval-inside-with-is-direct.js new file mode 100644 index 0000000000..43257a474c --- /dev/null +++ b/test/staging/sm/global/eval-inside-with-is-direct.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 601307; +var summary = "with (...) eval(...) is a direct eval"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var t = "global"; +function test() +{ + var t = "local"; + with ({}) + return eval("t"); +} +assert.sameValue(test(), "local"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/eval-native-callback-is-indirect.js b/test/staging/sm/global/eval-native-callback-is-indirect.js new file mode 100644 index 0000000000..33ea31028c --- /dev/null +++ b/test/staging/sm/global/eval-native-callback-is-indirect.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 604504; +var summary = "eval called from a native function is indirect"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var originalEval = eval; + +var global = this; +var directCheckCode = "this === global"; + +function testBound() +{ + var global = "psych!"; + var eval = originalEval.bind(undefined, directCheckCode); + assert.sameValue(eval(), true); +} +testBound(); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/globalThis-enumeration.js b/test/staging/sm/global/globalThis-enumeration.js new file mode 100644 index 0000000000..e3422ddd0f --- /dev/null +++ b/test/staging/sm/global/globalThis-enumeration.js @@ -0,0 +1,15 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Object.getOwnPropertyNames(this).includes('globalThis'), true); + +if (typeof assert.sameValue === "function") { +} diff --git a/test/staging/sm/global/parenthesized-eval-is-direct.js b/test/staging/sm/global/parenthesized-eval-is-direct.js new file mode 100644 index 0000000000..c513059450 --- /dev/null +++ b/test/staging/sm/global/parenthesized-eval-is-direct.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +print("(eval)(...) is a direct eval, (1, eval)() isn't, etc."); + +/************** + * BEGIN TEST * + **************/ + +/* + * Justification: + * + * https://mail.mozilla.org/pipermail/es5-discuss/2010-October/003724.html + * + * Note also bug 537673. + */ + +var t = "global"; + +function group() +{ + var t = "local"; + return (eval)("t"); +} +assert.sameValue(group(), "local"); + +function groupAndComma() +{ + var t = "local"; + return (1, eval)("t"); +} +assert.sameValue(groupAndComma(), "global"); + +function groupAndTrueTernary() +{ + var t = "local"; + return (true ? eval : null)("t"); +} +assert.sameValue(groupAndTrueTernary(), "global"); + +function groupAndEmptyStringTernary() +{ + var t = "local"; + return ("" ? null : eval)("t"); +} +assert.sameValue(groupAndEmptyStringTernary(), "global"); + +function groupAndZeroTernary() +{ + var t = "local"; + return (0 ? null : eval)("t"); +} +assert.sameValue(groupAndZeroTernary(), "global"); + +function groupAndNaNTernary() +{ + var t = "local"; + return (0 / 0 ? null : eval)("t"); +} +assert.sameValue(groupAndNaNTernary(), "global"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/parseFloat-01.js b/test/staging/sm/global/parseFloat-01.js new file mode 100644 index 0000000000..41a6f416a5 --- /dev/null +++ b/test/staging/sm/global/parseFloat-01.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 613492; +var summary = "ES5 15.1.2.3 parseFloat(string)"; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(parseFloat("Infinity"), Infinity); +assert.sameValue(parseFloat("+Infinity"), Infinity); +assert.sameValue(parseFloat("-Infinity"), -Infinity); + +assert.sameValue(parseFloat("inf"), NaN); +assert.sameValue(parseFloat("Inf"), NaN); +assert.sameValue(parseFloat("infinity"), NaN); + +assert.sameValue(parseFloat("nan"), NaN); +assert.sameValue(parseFloat("NaN"), NaN); + +print("All tests passed!"); diff --git a/test/staging/sm/global/parseInt-01.js b/test/staging/sm/global/parseInt-01.js new file mode 100644 index 0000000000..5de98e91f0 --- /dev/null +++ b/test/staging/sm/global/parseInt-01.js @@ -0,0 +1,177 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 577536; +var summary = "ES5 15.1.2.2 parseInt(string, radix)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var str, radix; +var upvar; + +/* 1. Let inputString be ToString(string). */ + +assert.sameValue(parseInt({ toString: function() { return "17" } }, 10), 17); + +upvar = 0; +str = { get toString() { upvar++; return function() { upvar++; return "12345"; } } }; +assert.sameValue(parseInt(str, 10), 12345); +assert.sameValue(upvar, 2); + + +/* + * 2. Let S be a newly created substring of inputString consisting of the first + * character that is not a StrWhiteSpaceChar and all characters following + * that character. (In other words, remove leading white space.) + */ + +var ws = + ["\t", "\v", "\f", " ", "\xA0", "\uFEFF", + "\u2004", "\u3000", // a few Unicode whitespaces + "\r", "\n", "\u2028", "\u2029"]; + +str = "8675309"; +for (var i = 0, sz = ws.length; i < sz; i++) +{ + assert.sameValue(parseInt(ws[i] + str, 10), 8675309); + for (var j = 0, sz = ws.length; j < sz; j++) + { + assert.sameValue(parseInt(ws[i] + ws[j] + str, 10), 8675309, + ws[i].charCodeAt(0).toString(16) + ", " + + ws[j].charCodeAt(0).toString(16)); + } +} + + +/* + * 3. Let sign be 1. + * 4. If S is not empty and the first character of S is a minus sign -, let + * sign be −1. + */ +str = "5552368"; +assert.sameValue(parseInt("-" + str, 10), -parseInt(str, 10)); +assert.sameValue(parseInt(" -" + str, 10), -parseInt(str, 10)); +assert.sameValue(parseInt("-", 10), NaN); +assert.sameValue(parseInt("", 10), NaN); +assert.sameValue(parseInt("-0", 10), -0); + + +/* + * 5. If S is not empty and the first character of S is a plus sign + or a + * minus sign -, then remove the first character from S. + */ +assert.sameValue(parseInt("+12345", 10), 12345); +assert.sameValue(parseInt(" +12345", 10), 12345); +assert.sameValue(parseInt("-12345", 10), -12345); +assert.sameValue(parseInt(" -12345", 10), -12345); + + +/* + * 6. Let R = ToInt32(radix). + */ + +upvar = ""; +str = + { toString: function() { if (!upvar) upvar = "string"; return "42"; } }; +radix = + { toString: function() { if (!upvar) upvar = "radix"; return "10"; } }; + +assert.sameValue(parseInt(str, radix), 42); +assert.sameValue(upvar, "string"); + +assert.sameValue(parseInt("123", null), 123); +assert.sameValue(parseInt("123", undefined), 123); +assert.sameValue(parseInt("123", NaN), 123); +assert.sameValue(parseInt("123", -0), 123); +assert.sameValue(parseInt("10", 72057594037927950), 16); +assert.sameValue(parseInt("10", -4294967292), 4); +assert.sameValue(parseInt("0x10", 1e308), 16); +assert.sameValue(parseInt("10", 1e308), 10); +assert.sameValue(parseInt("10", { valueOf: function() { return 16; } }), 16); + + +/* + * 7. Let stripPrefix be true. + * 8. If R ≠ 0, then + * a. If R < 2 or R > 36, then return NaN. + * b. If R ≠ 16, let stripPrefix be false. + * 9. Else, R = 0 + * a. Let R = 10. + * 10. If stripPrefix is true, then + * a. If the length of S is at least 2 and the first two characters of S + * are either “0x” or “0X”, then remove the first two characters from S and + * let R = 16. + */ +var vs = ["1", "51", "917", "2343", "99963"]; +for (var i = 0, sz = vs.length; i < sz; i++) + assert.sameValue(parseInt(vs[i], 0), parseInt(vs[i], 10), "bad " + vs[i]); + +assert.sameValue(parseInt("0x10"), 16); +assert.sameValue(parseInt("0x10", 0), 16); +assert.sameValue(parseInt("0x10", 16), 16); +assert.sameValue(parseInt("0x10", 8), 0); +assert.sameValue(parseInt("-0x10", 16), -16); + +assert.sameValue(parseInt("5", 1), NaN); +assert.sameValue(parseInt("5", 37), NaN); +assert.sameValue(parseInt("5", { valueOf: function() { return -1; } }), NaN); + + +/* + * 11. If S contains any character that is not a radix-R digit, then let Z be + * the substring of S consisting of all characters before the first such + * character; otherwise, let Z be S. + * 12. If Z is empty, return NaN. + */ +assert.sameValue(parseInt(""), NaN); +assert.sameValue(parseInt("ohai"), NaN); +assert.sameValue(parseInt("0xohai"), NaN); +assert.sameValue(parseInt("-ohai"), NaN); +assert.sameValue(parseInt("+ohai"), NaN); +assert.sameValue(parseInt(" ohai"), NaN); + +assert.sameValue(parseInt("0xaohai"), 10); +assert.sameValue(parseInt("hohai", 18), 17); + + +/* + * 13. Let mathInt be the mathematical integer value that is represented by Z + * in radix-R notation, using the letters A-Z and a-z for digits with + * values 10 through 35. (However, if R is 10 and Z contains more than 20 + * significant digits, every significant digit after the 20th may be + * replaced by a 0 digit, at the option of the implementation; and if R is + * not 2, 4, 8, 10, 16, or 32, then mathInt may be an implementation- + * dependent approximation to the mathematical integer value that is + * represented by Z in radix-R notation.) + * 14. Let number be the Number value for mathInt. + * 15. Return sign × number. + */ +assert.sameValue(parseInt("ohai", 36), 1142154); +assert.sameValue(parseInt("0ohai", 36), 1142154); +assert.sameValue(parseInt("00ohai", 36), 1142154); +assert.sameValue(parseInt("A", 16), 10); +assert.sameValue(parseInt("0A", 16), 10); +assert.sameValue(parseInt("00A", 16), 10); +assert.sameValue(parseInt("A", 17), 10); +assert.sameValue(parseInt("0A", 17), 10); +assert.sameValue(parseInt("00A", 17), 10); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/global/parseInt-default-to-decimal.js b/test/staging/sm/global/parseInt-default-to-decimal.js new file mode 100644 index 0000000000..92fb4cc381 --- /dev/null +++ b/test/staging/sm/global/parseInt-default-to-decimal.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 583925; +var summary = + "parseInt should treat leading-zero inputs (with radix unspecified) as " + + "decimal, not octal (this changed in bug 786135)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(parseInt("08"), 8); +assert.sameValue(parseInt("09"), 9); +assert.sameValue(parseInt("014"), 14); + +function strictParseInt(s) { "use strict"; return parseInt(s); } + +assert.sameValue(strictParseInt("08"), 8); +assert.sameValue(strictParseInt("09"), 9); +assert.sameValue(strictParseInt("014"), 14); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-arguments.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-arguments.js new file mode 100644 index 0000000000..d73905883a --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-arguments.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that Annex B function interaction with 'arguments'. + +(function() { + assert.sameValue(typeof arguments, "object"); + { function arguments() {} } + assert.sameValue(typeof arguments, "function"); +})(); + diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-eval.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-eval.js new file mode 100644 index 0000000000..852df56873 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-eval.js @@ -0,0 +1,62 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var log = ""; + +function f() { + log += g(); + function g() { return "outer-g"; } + + var o = { g: function () { return "with-g"; } }; + with (o) { + // Annex B.3.3.3 says g should be set on the nearest VariableEnvironment, + // and so should not change o.g. + eval(`{ + function g() { return "eval-g"; } + }`); + } + + log += g(); + log += o.g(); +} + +f(); + +function h() { + eval(` + // Should return true, as var bindings introduced by eval are configurable. + log += (delete q); + { + function q() { log += "q"; } + // Should return false, as lexical bindings introduced by eval are not + // configurable. + log += (delete q); + } + `); + return q; +} + +h()(); + +function f2() { + // Should not throw, just simply not synthesize an Annex B var in the eval + // because there's an outer const. + eval("{ function a() {} }"); + const a = 1; +} + +function f3() { + // As above, but for let. + eval("{ function a() {} }"); + let a; +} + +assert.sameValue(log, "outer-geval-gwith-gtruefalseq"); diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-generators.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-generators.js new file mode 100644 index 0000000000..ecec0890f6 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-generators.js @@ -0,0 +1,35 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests by André Bargull + +// Annex B.3.3.1 +function f1() { + { function* g() {} } + assert.sameValue(typeof g, "undefined"); +} +f1(); + +// Annex B.3.3.2 +{ function* g() {} } +assert.sameValue(typeof g, "undefined"); + +// Annex B.3.3.3 +function f2() { + eval("{ function* g() {} }"); + assert.sameValue(typeof g, "undefined"); +} +f2(); + +// Annex B.3.3.3 +eval("{ function* g() {} }"); +assert.sameValue(typeof g, "undefined"); + diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-if.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-if.js new file mode 100644 index 0000000000..2cdeb5c0e6 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-if.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var log = ""; + +function f(x) { + if (x) + function g() { return "g0"; } + else + function g() { return "g1"; } + + log += g(); + + if (x) + function g() { return "g2"; } + else { + } + + log += g(); + + if (x) { + } else + function g() { return "g3"; } + + log += g(); + + if (x) + function g() { return "g4"; } + + log += g(); +} + +f(true); +f(false); + +try { + eval(` + if (1) + l: function foo() {} + `); +} catch (e) { + log += "e"; +} + +assert.sameValue(log, "g0g2g2g4g1g1g3g3e"); diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-label.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-label.js new file mode 100644 index 0000000000..f898e1baa6 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-label.js @@ -0,0 +1,53 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function expectSyntaxError(str) { + var threwSyntaxError; + try { + eval(str); + } catch (e) { + threwSyntaxError = e instanceof SyntaxError; + } + assert.sameValue(threwSyntaxError, true); + + try { + eval('"use strict";' + str); + } catch (e) { + threwSyntaxError = e instanceof SyntaxError; + } + assert.sameValue(threwSyntaxError, true); +} + +function expectSloppyPass(str) { + eval(str); + + try { + eval('"use strict";' + str); + } catch (e) { + threwSyntaxError = e instanceof SyntaxError; + } + assert.sameValue(threwSyntaxError, true); +} + +expectSloppyPass(`l: function f1() {}`); +expectSloppyPass(`l0: l: function f1() {}`); +expectSloppyPass(`{ f1(); l: function f1() {} }`); +expectSloppyPass(`{ f1(); l0: l: function f1() {} }`); +expectSloppyPass(`{ f1(); l: function f1() { return 42; } } assert.sameValue(f1(), 42);`); +expectSloppyPass(`eval("fe(); l: function fe() {}")`); +expectSyntaxError(`if (1) l: function f2() {}`); +expectSyntaxError(`if (1) {} else l: function f3() {}`); +expectSyntaxError(`do l: function f4() {} while (0)`); +expectSyntaxError(`while (0) l: function f5() {}`); +expectSyntaxError(`for (;;) l: function f6() {}`); +expectSloppyPass(`switch (1) { case 1: l: function f7() {} }`); +expectSloppyPass(`switch (1) { case 1: assert.sameValue(f8(), 'f8'); case 2: l: function f8() { return 'f8'; } } assert.sameValue(f8(), 'f8');`); + diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-notapplicable.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-notapplicable.js new file mode 100644 index 0000000000..828c832a1e --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-notapplicable.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that functions in block that do not exhibit Annex B do not override +// previous functions that do exhibit Annex B. + +function f() { + var outerX; + { function x() {1} outerX = x; } + { { function x() {2}; } let x; } + { let x; { function x() {3}; } } + assert.sameValue(x, outerX); +} +f(); + diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-parameter.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-parameter.js new file mode 100644 index 0000000000..f5f153f481 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-parameter.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Annex B.3.3.1 disallows Annex B lexical function behavior when redeclaring a +// parameter. + +(function(f) { + if (true) function f() { } + assert.sameValue(f, 123); +}(123)); + +(function(f) { + { function f() { } } + assert.sameValue(f, 123); +}(123)); + +(function(f = 123) { + assert.sameValue(f, 123); + { function f() { } } + assert.sameValue(f, 123); +}()); + diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-same-name.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-same-name.js new file mode 100644 index 0000000000..b4a91c5cbb --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-same-name.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +{ + function f() { return "inner"; } +} + +function f() { return "outer"; } + +assert.sameValue(f(), "inner"); diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-with.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-with.js new file mode 100644 index 0000000000..b8a4725830 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b-with.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var o = { f: "string-f" }; +with (o) { + var desc = Object.getOwnPropertyDescriptor(this, "f"); + assert.sameValue(desc.value, undefined); + assert.sameValue(desc.writable, true); + assert.sameValue(desc.enumerable, true); + assert.sameValue(desc.configurable, false); + function f() { + return "fun-f"; + } +} + +// Annex B explicitly assigns to the nearest VariableEnvironment, so the +// with-object "o" should have its property unchanged. +assert.sameValue(o.f, "string-f"); +assert.sameValue(f(), "fun-f"); + diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-annex-b.js b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b.js new file mode 100644 index 0000000000..05b11aa73a --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-annex-b.js @@ -0,0 +1,42 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var log = ""; + +log += typeof f; + +{ + log += f(); + + function f() { + return "f1"; + } +} + +log += f(); + +function g() { + log += typeof h; + + { + log += h(); + + function h() { + return "h1"; + } + } + + log += h(); +} + +g(); + +assert.sameValue(log, "undefinedf1f1undefinedh1h1"); diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js b/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js new file mode 100644 index 0000000000..843a956ee0 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-deprecated-redecl.js @@ -0,0 +1,88 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +{ + assert.sameValue(f(), 4); + function f() { return 3; } + assert.sameValue(f(), 4); + function f() { return 4; } + assert.sameValue(f(), 4); +} + +// Annex B still works. +assert.sameValue(f(), 4); + +// The same thing with labels. +{ + assert.sameValue(f(), 4); + function f() { return 3; } + assert.sameValue(f(), 4); + l: function f() { return 4; } + assert.sameValue(f(), 4); +} + +// Annex B still works. +assert.sameValue(f(), 4); + +function test() { + { + assert.sameValue(f(), 2); + function f() { return 1; } + assert.sameValue(f(), 2); + function f() { return 2; } + assert.sameValue(f(), 2); + } + + // Annex B still works. + assert.sameValue(f(), 2); +} + +test(); + +var log = ''; + +try { + // Strict mode still cannot redeclare. + eval(`"use strict"; + { + function f() { } + function f() { } + }`); +} catch (e) { + assert.sameValue(e instanceof SyntaxError, true); + log += 'e'; +} + +try { + // Redeclaring an explicitly 'let'-declared binding doesn't work. + eval(`{ + let x = 42; + function x() {} + }`); +} catch (e) { + assert.sameValue(e instanceof SyntaxError, true); + log += 'e'; +} + +try { + // Redeclaring an explicitly 'const'-declared binding doesn't work. + eval(`{ + const x = 42; + function x() {} + }`); +} catch (e) { + assert.sameValue(e instanceof SyntaxError, true); + log += 'e'; +} + +assert.sameValue(log, 'eee'); + +if ('assert.sameValue' in this) diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-hoisted-tdz.js b/test/staging/sm/lexical-environment/block-scoped-functions-hoisted-tdz.js new file mode 100644 index 0000000000..7dc9b7af85 --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-hoisted-tdz.js @@ -0,0 +1,40 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var log = ""; +try { + (function() { + { + let y = f(); + function f() { y; } + } + })() +} catch (e) { + log += e instanceof ReferenceError; +} + +try { + function f() { + switch (1) { + case 0: + let x; + case 1: + (function() { x; })(); + } + } + f(); +} catch (e) { + log += e instanceof ReferenceError; +} + +assert.sameValue(log, "truetrue"); + +if ("assert.sameValue" in this) diff --git a/test/staging/sm/lexical-environment/block-scoped-functions-strict.js b/test/staging/sm/lexical-environment/block-scoped-functions-strict.js new file mode 100644 index 0000000000..4f22db4bde --- /dev/null +++ b/test/staging/sm/lexical-environment/block-scoped-functions-strict.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict" + +var log = ""; + +function f() { + return "f0"; +} + +log += f(); + +{ + log += f(); + + function f() { + return "f1"; + } + + log += f(); +} + +log += f(); + +function g() { + function h() { + return "h0"; + } + + log += h(); + + { + log += h(); + + function h() { + return "h1"; + } + + log += h(); + } + + log += h(); +} + +g(); + +assert.sameValue(log, "f0f1f1f0h0h1h1h0"); diff --git a/test/staging/sm/lexical-environment/bug-1216623.js b/test/staging/sm/lexical-environment/bug-1216623.js new file mode 100644 index 0000000000..c32e40a518 --- /dev/null +++ b/test/staging/sm/lexical-environment/bug-1216623.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Scoping in the head of for(let;;) statements. + +let x = 0; +for (let i = 0, a = () => i; i < 4; i++) { + assert.sameValue(i, x++); + assert.sameValue(a(), 0); +} +assert.sameValue(x, 4); + +x = 11; +let q = 0; +for (let {[++q]: r} = [0, 11, 22], s = () => r; r < 13; r++) { + assert.sameValue(r, x++); + assert.sameValue(s(), 11); +} +assert.sameValue(x, 13); +assert.sameValue(q, 1); + diff --git a/test/staging/sm/lexical-environment/catch-body.js b/test/staging/sm/lexical-environment/catch-body.js new file mode 100644 index 0000000000..8421fbae84 --- /dev/null +++ b/test/staging/sm/lexical-environment/catch-body.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f() { + var probeParam, probeBlock; + let x = 'outside'; + + try { + throw []; + } catch ([_ = probeParam = function() { return x; }]) { + probeBlock = function() { return x; }; + let x = 'inside'; + } + + assert.sameValue(probeBlock(), 'inside'); + assert.sameValue(probeParam(), 'outside'); +} + +f(); + diff --git a/test/staging/sm/lexical-environment/const-declaration-in-for-loop.js b/test/staging/sm/lexical-environment/const-declaration-in-for-loop.js new file mode 100644 index 0000000000..fab1385263 --- /dev/null +++ b/test/staging/sm/lexical-environment/const-declaration-in-for-loop.js @@ -0,0 +1,93 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "const-declaration-in-for-loop.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1146644; +var summary = + "Don't crash compiling a non-body-level for-loop whose loop declaration is " + + "a const"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Don't attempt execution as a script if we can't properly emulate it. We +// could perhaps use eval, but eval, while also doing global execution, is its +// own can of messiness. Ongoing work on for-loop scoping for lexical +// declarations will likely make these tests redundant with other tests to be +// added, anyway, in the very short term. +var executeGlobalScript = typeof evaluate === "function" + ? evaluate + : function(s) {}; + +for (const a1 = 3; false; ) + continue; + +Function(`for (const a2 = 3; false; ) + continue; + `)(); + +if (true) +{ + for (const a3 = 3; false; ) + continue; +} + +Function(`if (true) + { + for (const a4 = 3; false; ) + continue; + }`)(); + +executeGlobalScript(`for (const a5 of []) + continue;`); + +Function(`for (const a6 of []) + continue;`)(); + +executeGlobalScript(`if (true) + { + for (const a7 of []) + continue; + }`); + +Function(`if (true) + { + for (const a8 of []) + continue; + }`)(); + +executeGlobalScript(`for (const a9 in {}) + continue;`); + +Function(`for (const a10 in {}) + continue;`)(); + +executeGlobalScript(`if (true) + { + for (const a11 in {}) + continue; + }`); + +Function(`if (true) + { + for (const a12 in {}) + continue; + }`)(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/lexical-environment/eval-has-lexical-environment.js b/test/staging/sm/lexical-environment/eval-has-lexical-environment.js new file mode 100644 index 0000000000..f3064932c8 --- /dev/null +++ b/test/staging/sm/lexical-environment/eval-has-lexical-environment.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "eval-has-lexical-environment.js" +//----------------------------------------------------------------------------- +var BUGNUMBER = 1193583; +var summary = + "Eval always has a lexical environment"; + +/************** + * BEGIN TEST * + **************/ + +eval(` +let foo = 42; +const kay = foo; +var bar = 84; +function f() { + return foo + kay; +} + `); + +(1, eval)(` +let foo2 = 42; +const kay2 = foo2; +`); + +// Lexical declarations should not have escaped eval. +assert.sameValue(typeof foo, "undefined"); +assert.sameValue(typeof kay, "undefined"); +assert.sameValue(typeof foo2, "undefined"); +assert.sameValue(typeof kay2, "undefined"); + +// Eval'd functions can close over lexical bindings. +assert.sameValue(f(), 84); + +// Var can escape direct eval. +assert.sameValue(bar, 84); + +print("Tests complete"); diff --git a/test/staging/sm/lexical-environment/for-loop-with-bindings-added-at-runtime.js b/test/staging/sm/lexical-environment/for-loop-with-bindings-added-at-runtime.js new file mode 100644 index 0000000000..f8ef0df6f5 --- /dev/null +++ b/test/staging/sm/lexical-environment/for-loop-with-bindings-added-at-runtime.js @@ -0,0 +1,130 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "for-loop-with-bindings-added-at-runtime.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1149797; +var summary = + "Don't assert when freshening the scope chain for a for-loop whose head " + + "contains a lexical declaration, where the loop body might add more " + + "bindings at runtime"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (let x = 0; x < 9; ++x) + eval("var y"); + +{ + for (let x = 0; x < 9; ++x) + eval("var y"); +} + +function f1() +{ + for (let x = 0; x < 9; ++x) + eval("var y"); +} +f1(); + +function f2() +{ + { + for (let x = 0; x < 9; ++x) + eval("var y"); + } +} +f2(); + +for (let x = 0; x < 9; ++x) +{ + // deliberately inside a block statement + eval("var y"); +} + +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + eval("var y"); + } +} + +function g1() +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + eval("var y"); + } +} +g1(); + +function g2() +{ + { + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + eval("var y"); + } + } +} +g2(); + +for (let x = 0; x < 9; ++x) { + (function() { + eval("var y"); + })(); +} + +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + (function() { + eval("var y"); + })(); + } +} + +function h1() +{ + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + (function() { + eval("var y"); + })(); + } +} +h1(); + +function h2() +{ + { + for (let x = 0; x < 9; ++x) + { + // deliberately inside a block statement + (function() { eval("var y"); })(); + } + } +} +h2(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/lexical-environment/for-loop.js b/test/staging/sm/lexical-environment/for-loop.js new file mode 100644 index 0000000000..fee0df10ec --- /dev/null +++ b/test/staging/sm/lexical-environment/for-loop.js @@ -0,0 +1,126 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "for-loop.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 985733; +var summary = + "ES6 for-loop semantics for for(;;) loops whose heads contain lexical " + "declarations"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function isError(code, type) +{ + try + { + Function(code); + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof type, true, + "unexpected error for `" + code + "`: got " + e); + } +} + +function isOK(code) +{ + Function(code); +} + +isError("for (const x; ; ) ;", SyntaxError); +isError("for (const x = 5, y; ; ) ;", SyntaxError); +isError("for (const [z]; ; ) ;", SyntaxError); +//isError("for (const [z, z]; ; ) ;", SyntaxError); +//isError("for (const [z, z] = [0, 1]; ; ) ;", SyntaxError); + +isOK("for (let x; ; ) ;"); +isOK("for (let x = 5, y; ; ) ;"); + +// I'm fairly sure this is supposed to work: the negative-lookahead rules in +// IterationStatement ensure that |for (let| *always* is a loop header starting +// with a lexical declaration. But I'm not 100% certain, so these tests might +// need to be fixed when we implement the negative-lookahead restrictions. +isOK("for (let [z] = [3]; ; ) ;"); +isError("for (let [z, z]; ; ) ;", SyntaxError); // because missing initializer + +isError("for (let [z, z] = [0, 1]; ; ) ;", SyntaxError); + +// A for-loop with lexical declarations, with a mixture of bindings that are and +// aren't aliased. (The mixture stress-tests any code that incorrectly assumes +// all bindings are aliased.) +var funcs = []; +for (let [i, j, k] = [0, 1, 2]; i < 10; i++) + funcs.push(() => i); + +assert.sameValue(funcs[0](), 0); +assert.sameValue(funcs[1](), 1); +assert.sameValue(funcs[2](), 2); +assert.sameValue(funcs[3](), 3); +assert.sameValue(funcs[4](), 4); +assert.sameValue(funcs[5](), 5); +assert.sameValue(funcs[6](), 6); +assert.sameValue(funcs[7](), 7); +assert.sameValue(funcs[8](), 8); +assert.sameValue(funcs[9](), 9); + +var outer = "OUTER V IGNORE"; +var save; +for (let outer = (save = function() { return outer; }); ; ) + break; +assert.sameValue(save(), save); + +var funcs = []; +function t(i, name, expect) +{ + assert.sameValue(funcs[i].name, name); + assert.sameValue(funcs[i](), expect); +} + +if (save() !== "OUTER V IGNORE") +{ + var v = "OUTER V IGNORE"; + var i = 0; + for (let v = (funcs.push(function init() { return v; }), + 0); + v = (funcs.push(function test() { return v; }), + v + 1); + v = (funcs.push(function incr() { return v; }), + v + 1)) + { + v = (funcs.push(function body() { return v; }), + v + 1); + i++; + if (i >= 3) + break; + } + t(0, "init", 0); + t(1, "test", 2); + t(2, "body", 2); + t(3, "incr", 5); + t(4, "test", 5); + t(5, "body", 5); + t(6, "incr", 8); + t(7, "test", 8); + t(8, "body", 8); + assert.sameValue(funcs.length, 9); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/lexical-environment/implicit-this-in-with.js b/test/staging/sm/lexical-environment/implicit-this-in-with.js new file mode 100644 index 0000000000..7658cda9f2 --- /dev/null +++ b/test/staging/sm/lexical-environment/implicit-this-in-with.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test that callees that resolve to bindings on the global object or the +// global lexical environment get an 'undefined' this inside with scopes. + +let g = function () { "use strict"; assert.sameValue(this, undefined); } +function f() { "use strict"; assert.sameValue(this, undefined); } + +with ({}) { + // f is resolved on the global object + f(); + // g is resolved on the global lexical environment + g(); +} + +f(); +g(); + diff --git a/test/staging/sm/lexical-environment/unscopables-basics.js b/test/staging/sm/lexical-environment/unscopables-basics.js new file mode 100644 index 0000000000..1544bc2ffc --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-basics.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Basics of @@unscopables support. + +// In with(obj), if obj[@@unscopables][id] is truthy, then the identifier id +// is not present as a binding in the with-block's scope. +var x = "global"; +with ({x: "with", [Symbol.unscopables]: {x: true}}) + assert.sameValue(x, "global"); + +// But if obj[@@unscopables][id] is false or not present, there is a binding. +with ({y: "with", z: "with", [Symbol.unscopables]: {y: false}}) { + assert.sameValue(y, "with"); + assert.sameValue(z, "with"); +} + +// ToBoolean(obj[@@unscopables][id]) determines whether there's a binding. +let someValues = [0, -0, NaN, "", undefined, null, "x", {}, []]; +for (let v of someValues) { + with ({x: "with", [Symbol.unscopables]: {x: v}}) + assert.sameValue(x, v ? "global" : "with"); +} + diff --git a/test/staging/sm/lexical-environment/unscopables-closures.js b/test/staging/sm/lexical-environment/unscopables-closures.js new file mode 100644 index 0000000000..efeae85a37 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-closures.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// @@unscopables continues to work after exiting the relevant `with` block, +// if the environment is captured by a closure. + +let env = { + x: 9000, + [Symbol.unscopables]: {x: true} +}; + +function make_adder(x) { + with (env) + return function (y) { return x + y; }; +} +assert.sameValue(make_adder(3)(10), 13); + +// Same test, but with a bunch of different parts for bad luck +let x = 500; +function make_adder_with_eval() { + with (env) + return eval('y => eval("x + y")'); +} +assert.sameValue(make_adder_with_eval()(10), 510); + diff --git a/test/staging/sm/lexical-environment/unscopables-const.js b/test/staging/sm/lexical-environment/unscopables-const.js new file mode 100644 index 0000000000..6ff2a4f93b --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-const.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// @@unscopables prevents a property from having any effect on assigning to a +// const binding (which is an error). + +const x = 1; +with ({x: 1, [Symbol.unscopables]: {x: true}}) + assertThrowsInstanceOf(() => {x = 2;}, TypeError); + diff --git a/test/staging/sm/lexical-environment/unscopables-delete.js b/test/staging/sm/lexical-environment/unscopables-delete.js new file mode 100644 index 0000000000..b26531a442 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-delete.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// If obj[@@unscopables][id], then `delete id` works across `with (obj)` scope. + +this.niche = 7; +let obj = { niche: 8, [Symbol.unscopables]: { niche: true } }; +with (obj) { + delete niche; +} + +assert.sameValue(obj.niche, 8); +assert.sameValue("niche" in this, false); + +// Same thing, but delete a variable introduced by sloppy direct eval. +this.niche = 9; +function f() { + eval("var niche = 10;"); + with (obj) { + assert.sameValue(niche, 10); + delete niche; + } + assert.sameValue(niche, 9); +} + +// Of course none of this affects a qualified delete. +assert.sameValue(delete this.niche, true); +assert.sameValue("niche" in this, false); + diff --git a/test/staging/sm/lexical-environment/unscopables-getters.js b/test/staging/sm/lexical-environment/unscopables-getters.js new file mode 100644 index 0000000000..ca6d482298 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-getters.js @@ -0,0 +1,51 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// @@unscopables checks can call getters. + +// The @@unscopables property itself can be a getter. +let hit1 = 0; +let x = "global x"; +let env1 = { + x: "env1.x", + get [Symbol.unscopables]() { + hit1++; + return {x: true}; + } +}; +with (env1) + assert.sameValue(x, "global x"); +assert.sameValue(hit1, 1); + +// It can throw; the exception is propagated out. +function Fit() {} +with ({x: 0, get [Symbol.unscopables]() { throw new Fit; }}) + assertThrowsInstanceOf(() => x, Fit); + +// Individual properties on the @@unscopables object can have getters. +let hit2 = 0; +let env2 = { + x: "env2.x", + [Symbol.unscopables]: { + get x() { + hit2++; + return true; + } + } +}; +with (env2) + assert.sameValue(x, "global x"); +assert.sameValue(hit2, 1); + +// And they can throw. +with ({x: 0, [Symbol.unscopables]: {get x() { throw new Fit; }}}) + assertThrowsInstanceOf(() => x, Fit); + diff --git a/test/staging/sm/lexical-environment/unscopables-global.js b/test/staging/sm/lexical-environment/unscopables-global.js new file mode 100644 index 0000000000..539548244b --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-global.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// @@unscopables does not affect the global environment. + +this.x = "global property x"; +let y = "global lexical y"; +this[Symbol.unscopables] = {x: true, y: true}; +assert.sameValue(x, "global property x"); +assert.sameValue(y, "global lexical y"); +assert.sameValue(eval("x"), "global property x"); +assert.sameValue(eval("y"), "global lexical y"); + +// But it does affect `with` statements targeting the global object. +{ + let x = "local x"; + with (this) + assert.sameValue(x, "local x"); +} + diff --git a/test/staging/sm/lexical-environment/unscopables-ignored.js b/test/staging/sm/lexical-environment/unscopables-ignored.js new file mode 100644 index 0000000000..7ee63fd81d --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-ignored.js @@ -0,0 +1,32 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// In these cases, @@unscopables should not be consulted. + +// Because obj has no properties `assert.sameValue` or `x`, +// obj[@@unscopables] is not checked here: +var obj = { + get [Symbol.unscopables]() { + throw "tried to read @@unscopables"; + } +}; +var x = 3; +with (obj) + assert.sameValue(x, 3); + +// If @@unscopables is present but not an object, it is ignored: +for (let nonObject of [undefined, null, "nothing", Symbol.for("moon")]) { + let y = 4; + let obj2 = {[Symbol.unscopables]: nonObject, y: 5}; + with (obj2) + assert.sameValue(y, 5); +} + diff --git a/test/staging/sm/lexical-environment/unscopables-miss.js b/test/staging/sm/lexical-environment/unscopables-miss.js new file mode 100644 index 0000000000..0d52bd6153 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-miss.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Trying to access a binding that doesn't exist due to @@unscopables +// is a ReferenceError. + +with ({x: 1, [Symbol.unscopables]: {x: true}}) + assertThrowsInstanceOf(() => x, ReferenceError); + diff --git a/test/staging/sm/lexical-environment/unscopables-mutation-frozen.js b/test/staging/sm/lexical-environment/unscopables-mutation-frozen.js new file mode 100644 index 0000000000..cca4b71bc8 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-mutation-frozen.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// When env[@@unscopables].x changes, bindings can appear even if env is inextensible. + +let x = "global"; +let unscopables = {x: true}; +let env = Object.create(null); +env[Symbol.unscopables] = unscopables; +env.x = "object"; +Object.freeze(env); + +for (let i = 0; i < 1004; i++) { + if (i === 1000) + unscopables.x = false; + with (env) { + assert.sameValue(x, i < 1000 ? "global" : "object"); + } +} + diff --git a/test/staging/sm/lexical-environment/unscopables-proto.js b/test/staging/sm/lexical-environment/unscopables-proto.js new file mode 100644 index 0000000000..cb20ee0023 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-proto.js @@ -0,0 +1,49 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// @@unscopables treats properties found on prototype chains the same as other +// properties. + +const x = "global x"; +const y = "global y"; + +// obj[@@unscopables].x works when obj.x is inherited via the prototype chain. +let proto = {x: "object x", y: "object y"}; +let env = Object.create(proto); +env[Symbol.unscopables] = {x: true, y: false}; +with (env) { + assert.sameValue(x, "global x"); + assert.sameValue(delete x, false); + assert.sameValue(y, "object y"); +} +assert.sameValue(env.x, "object x"); + +// @@unscopables works if is inherited via the prototype chain. +env = { + x: "object", + [Symbol.unscopables]: {x: true, y: true} +}; +for (let i = 0; i < 50; i++) + env = Object.create(env); +env.y = 1; +with (env) { + assert.sameValue(x, "global x"); + assert.sameValue(y, "global y"); +} + +// @@unscopables works if the obj[@@unscopables][id] property is inherited. +env = { + x: "object", + [Symbol.unscopables]: Object.create({x: true}) +}; +with (env) + assert.sameValue(x, "global x"); + diff --git a/test/staging/sm/lexical-environment/unscopables-proxy.js b/test/staging/sm/lexical-environment/unscopables-proxy.js new file mode 100644 index 0000000000..53b3e6c7f8 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-proxy.js @@ -0,0 +1,56 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Object operations are performed in the right order, as observed by proxies. + +let log = []; +function LoggingProxyHandlerWrapper(name, handler={}) { + return new Proxy(handler, { + get(t, id) { + let method = handler[id]; + return function (...args) { + log.push([name + "." + id, ...args.filter(v => typeof v !== "object")]); + if (method === undefined) + return Reflect[id].apply(null, args); + return method.apply(this, args); + }; + } + }); +} + +function LoggingProxy(name, target) { + return new Proxy(target, new LoggingProxyHandlerWrapper(name)); +} + +let proto = {x: 44}; +let proto_proxy = new LoggingProxy("proto", proto); +let unscopables = {x: true}; +let unscopables_proxy = new LoggingProxy("unscopables", {x: true}); +let env = Object.create(proto_proxy, { + [Symbol.unscopables]: { value: unscopables_proxy } +}); +let env_proxy = new LoggingProxy("env", env); + +let x = 11; +function f() { + with (env_proxy) + return x; +} + +assert.sameValue(f(), 11); + +assert.deepEqual(log, [ + ["env.has", "x"], + ["proto.has", "x"], + ["env.get", Symbol.unscopables], + ["unscopables.get", "x"] +]); + diff --git a/test/staging/sm/lexical-environment/unscopables-tdz.js b/test/staging/sm/lexical-environment/unscopables-tdz.js new file mode 100644 index 0000000000..ba98869788 --- /dev/null +++ b/test/staging/sm/lexical-environment/unscopables-tdz.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Accessing an uninitialized variable due to @@unscopables is still a ReferenceError. + +with ({x: 1, [Symbol.unscopables]: {x: true}}) + assertThrowsInstanceOf(() => x, ReferenceError); + +let x; + diff --git a/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js b/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js new file mode 100644 index 0000000000..0bb1f81e86 --- /dev/null +++ b/test/staging/sm/lexical-environment/var-in-catch-body-annex-b-eval.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests annex B.3.5 that introduces a var via direct eval. + +var x = "global-x"; +var log = ""; + +// Tests that direct eval works. +function g() { + try { throw 8; } catch (x) { + eval("var x = 42;"); + log += x; + } + x = "g"; + log += x; +} +g(); + +assert.sameValue(x, "global-x"); +assert.sameValue(log, "42g"); + +if ("assert.sameValue" in this) diff --git a/test/staging/sm/lexical-environment/with-global-ignores-global-let-variables.js b/test/staging/sm/lexical-environment/with-global-ignores-global-let-variables.js new file mode 100644 index 0000000000..f02d8b1958 --- /dev/null +++ b/test/staging/sm/lexical-environment/with-global-ignores-global-let-variables.js @@ -0,0 +1,25 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let v = "global-v"; + +function f(v, global) +{ + with (global) + return v; +} + +assert.sameValue(f("argument-v", this), "argument-v", + "let-var shouldn't appear in global for |with| purposes"); + +print("Tests complete"); diff --git a/test/staging/sm/literals/numeric/idstart-after-numeric.js b/test/staging/sm/literals/numeric/idstart-after-numeric.js new file mode 100644 index 0000000000..aad8633bd9 --- /dev/null +++ b/test/staging/sm/literals/numeric/idstart-after-numeric.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = '523401'; +var summary = 'numeric literal followed by an identifier'; + +var array = new Array(); +assertThrowsInstanceOf(() => eval("array[0for]"), SyntaxError); +assertThrowsInstanceOf(() => eval("array[1yield]"), SyntaxError); +assertThrowsInstanceOf(() => eval("array[2in []]"), SyntaxError); // "2 in []" is valid. +assert.sameValue(array[2 in []], undefined); +assert.sameValue(2 in [], false); +assertThrowsInstanceOf(() => eval("array[3in]"), SyntaxError); diff --git a/test/staging/sm/misc/bug1126318.js b/test/staging/sm/misc/bug1126318.js new file mode 100644 index 0000000000..646c9b54b5 --- /dev/null +++ b/test/staging/sm/misc/bug1126318.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof window === "undefined") + window = this; + +Object.defineProperty(window, "foo", { + get: function() { return 5; }, + configurable: true +}); + +for (var i = 0; i < 100; ++i) + assert.sameValue(window.foo, 5); + diff --git a/test/staging/sm/misc/builtin-methods-reject-null-undefined-this.js b/test/staging/sm/misc/builtin-methods-reject-null-undefined-this.js new file mode 100644 index 0000000000..b53ae04f36 --- /dev/null +++ b/test/staging/sm/misc/builtin-methods-reject-null-undefined-this.js @@ -0,0 +1,161 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 619283; +var summary = + "ECMAScript built-in methods that immediately throw when |this| is " + + "|undefined| or |null| (due to CheckObjectCoercible, ToObject, or ToString)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// We can't just exhaustively loop over everything because 1) method properties +// might be extensions with special |this| handling, and 2) some methods don't +// *quite* immediately throw a TypeError, first thing, if |this| is |undefined| +// or |null|, or their algorithms are very slightly ambiguous about whether they +// do. Why? Ipse-dixitism. *shrug* + +var ClassToMethodMap = + { + Object: [/* "toString" has special |this| handling */ + "toLocaleString", "valueOf", "hasOwnProperty", + /* + * "isPrototypeOf" has special |this| handling already tested in + * non262/Object/isPrototypeOf.js. + */ + /* + * "isPrototypeOf" has special |this| handling already tested in + * non262/Object/propertyIsEnumerable.js. + */ + "__defineGetter__", "__defineSetter__", + "__lookupGetter__", "__lookupSetter__", + ], + // Function methods often don't ToObject(this) as their very first step, + // and they're already stepwise well-tested such that manual tests here + // would be redundant. + Array: ["toString", "toLocaleString", "concat", "join", "pop", "push", + "reverse", "shift", "slice", "sort", "splice", "unshift", + "indexOf", "lastIndexOf", "every", "some", "forEach", "map", + "filter", "reduce", "reduceRight"], + String: ["toString", "valueOf", "charAt", "charCodeAt", "concat", + "indexOf", "lastIndexOf", "localeCompare", "match", "replace", + "search", "slice", "split", "substring", "toLowerCase", + "toLocaleLowerCase", "toUpperCase", "toLocaleUpperCase", "trim", + "bold", "italics", "fixed", "fontsize", + "fontcolor", "link", "anchor", "strike", "small", "big", "blink", + "sup", "sub", "substr", "trimLeft", "trimRight", + ], + Boolean: ["toString", "valueOf"], + Number: ["toString", "toLocaleString", "valueOf", + /* + * toFixed doesn't *immediately* test |this| for number or + * Number-ness, but because the ToInteger(void 0) which arguably + * precedes it in the toFixed algorithm won't throw in this test, + * we don't need to specially test it. + */ + "toFixed", + "toExponential", "toPrecision"], + Date: ["toDateString", "toTimeString", "toLocaleString", + "toLocaleDateString", "toLocaleTimeString", "valueOf", "getTime", + "getFullYear", "getUTCFullYear", "getMonth", "getUTCMonth", + "getDate", "getUTCDate", "getDay", "getUTCDay", "getHours", + "getUTCHours", "getMinutes", "getUTCMinutes", "getSeconds", + "getUTCSeconds", "getMilliseconds", "getUTCMilliseconds", + /* + * toFixed doesn't *immediately* test |this| for number or + * Number-ness, but because the TimeClip(ToNumber(void 0)) which + * arguably precedes it in the setTime algorithm won't throw in + * this test, we don't need to specially test it. + */ + "setTime", + "getTimezoneOffset", "setMilliseconds", "setUTCMilliseconds", + "setSeconds", "setUTCSeconds", "setMinutes", "setUTCMinutes", + "setHours", "setUTCHours", "setDate", "setUTCDate", "setMonth", + "setUTCMonth", "setFullYear", "setUTCFullYear", "toUTCString", + "toISOString", "toJSON", + "getYear", "setYear", "toGMTString"], + RegExp: ["exec", "test", "toString"], + Error: ["toString"], + }; + +var badThisValues = [null, undefined]; + +function testMethod(Class, className, method) +{ + var expr; + + // Try out explicit this values + for (var i = 0, sz = badThisValues.length; i < sz; i++) + { + var badThis = badThisValues[i]; + + expr = className + ".prototype." + method + ".call(" + badThis + ")"; + try + { + Class.prototype[method].call(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + + expr = className + ".prototype." + method + ".apply(" + badThis + ")"; + try + { + Class.prototype[method].apply(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + } + + // ..and for good measure.. + + expr = "(0, " + className + ".prototype." + method + ")()" + try + { + // comma operator to call GetValue() on the method and de-Reference it + (0, Class.prototype[method])(); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } +} + +for (var className in ClassToMethodMap) +{ + var Class = this[className]; + + var methodNames = ClassToMethodMap[className]; + for (var i = 0, sz = methodNames.length; i < sz; i++) + { + var method = methodNames[i]; + testMethod(Class, className, method); + } +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/misc/enumerate-undefined.js b/test/staging/sm/misc/enumerate-undefined.js new file mode 100644 index 0000000000..0b1707a45b --- /dev/null +++ b/test/staging/sm/misc/enumerate-undefined.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 547087; +var summary = 'JS_EnumerateStandardClasses uses wrong attributes for undefined'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (var p in this); + +assert.sameValue(Object.getOwnPropertyDescriptor(this, "undefined").writable, false); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/misc/error-undefined-message.js b/test/staging/sm/misc/error-undefined-message.js new file mode 100644 index 0000000000..69fed824a4 --- /dev/null +++ b/test/staging/sm/misc/error-undefined-message.js @@ -0,0 +1,16 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(new Error().hasOwnProperty('message'), false); +assert.sameValue(new Error(undefined).hasOwnProperty('message'), false); + diff --git a/test/staging/sm/misc/explicit-undefined-optional-argument.js b/test/staging/sm/misc/explicit-undefined-optional-argument.js new file mode 100644 index 0000000000..991d7539df --- /dev/null +++ b/test/staging/sm/misc/explicit-undefined-optional-argument.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 373118; +var summary = + 'Properly handle explicitly-undefined optional arguments to a bunch of ' + + 'functions'; + +print(BUGNUMBER + ": " + summary); + +//----------------------------------------------------------------------------- + +var a; + +a = "abc".slice(0, undefined); +assert.sameValue(a, "abc"); + +a = "abc".substr(0, undefined); +assert.sameValue(a, "abc"); + +a = "abc".substring(0, undefined); +assert.sameValue(a, "abc"); + +a = [1, 2, 3].slice(0, undefined); +assert.sameValue(a.join(), '1,2,3'); + +a = [1, 2, 3].sort(undefined); +assert.sameValue(a.join(), '1,2,3'); + +assert.sameValue((20).toString(undefined), '20'); + +//----------------------------------------------------------------------------- + diff --git a/test/staging/sm/misc/function-definition-eval.js b/test/staging/sm/misc/function-definition-eval.js new file mode 100644 index 0000000000..0d48c65dbf --- /dev/null +++ b/test/staging/sm/misc/function-definition-eval.js @@ -0,0 +1,353 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 577325; +var summary = 'Implement the ES5 algorithm for processing function statements'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var outer, desc; +var isInShell = !("Window" in this); + +/////////////////////////////////////////////////// +// Function definitions over accessor properties // +/////////////////////////////////////////////////// + +var getCalled, setCalled; + +// configurable properties get blown away + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc1", + { + get: function() { getCalled = true; throw "FAIL get 1"; }, + set: function(v) { setCalled = true; throw "FAIL set 1 " + v; }, + configurable: true, + enumerable: false + }); + +// does not throw +outer = undefined; +eval("function acc1() { throw 'FAIL redefined 1'; } outer = acc1;"); +assert.sameValue(getCalled, false); +assert.sameValue(setCalled, false); +assert.sameValue(typeof acc1, "function"); +assert.sameValue(acc1, outer); +desc = Object.getOwnPropertyDescriptor(this, "acc1"); +assert.sameValue(desc.value, acc1); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, true); + + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc2", + { + get: function() { getCalled = true; throw "FAIL get 2"; }, + set: function(v) { setCalled = true; throw "FAIL set 2 " + v; }, + configurable: true, + enumerable: true + }); + +// does not throw +outer = undefined; +eval("function acc2() { throw 'FAIL redefined 2'; } outer = acc2;"); +assert.sameValue(getCalled, false); +assert.sameValue(setCalled, false); +assert.sameValue(typeof acc2, "function"); +assert.sameValue(acc2, outer); +desc = Object.getOwnPropertyDescriptor(this, "acc2"); +assert.sameValue(desc.value, acc2); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, true); + + +// non-configurable properties produce a TypeError. We only test this in shell, +// since defining non-configurable properties on Window instances throws. +if (isInShell) { + getCalled = false, setCalled = false; + Object.defineProperty(this, "acc3", + { + get: function() { getCalled = true; throw "FAIL get 3"; }, + set: function(v) { setCalled = true; throw "FAIL set 3 " + v; }, + configurable: false, + enumerable: true + }); + + outer = undefined; + try + { + eval("function acc3() { throw 'FAIL redefined 3'; }; outer = acc3"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, enumerable accessor"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, enumerable accessor, must throw a TypeError " + + "per ES5+errata: " + e); + desc = Object.getOwnPropertyDescriptor(this, "acc3"); + assert.sameValue(typeof desc.get, "function"); + assert.sameValue(typeof desc.set, "function"); + assert.sameValue(desc.enumerable, true); + assert.sameValue(desc.configurable, false); + assert.sameValue(outer, undefined); + assert.sameValue(getCalled, false); + assert.sameValue(setCalled, false); + } + + + getCalled = false, setCalled = false; + Object.defineProperty(this, "acc4", + { + get: function() { getCalled = true; throw "FAIL get 4"; }, + set: function(v) { setCalled = true; throw "FAIL set 4 " + v; }, + configurable: false, + enumerable: false + }); + + outer = undefined; + try + { + eval("function acc4() { throw 'FAIL redefined 4'; }; outer = acc4"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable accessor"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable accessor, must throw a " + + "TypeError per ES5+errata: " + e); + desc = Object.getOwnPropertyDescriptor(this, "acc4"); + assert.sameValue(typeof desc.get, "function"); + assert.sameValue(typeof desc.set, "function"); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.configurable, false); + assert.sameValue(outer, undefined); + assert.sameValue(getCalled, false); + assert.sameValue(setCalled, false); + } +} + + +/////////////////////////////////////////////// +// Function definitions over data properties // +/////////////////////////////////////////////// + + +// configurable properties, regardless of other attributes, get blown away + +Object.defineProperty(this, "data1", + { + configurable: true, + enumerable: true, + writable: true, + value: "data1" + }); + +outer = undefined; +eval("function data1() { return 'data1 function'; } outer = data1;"); +assert.sameValue(typeof data1, "function"); +assert.sameValue(data1, outer); +desc = Object.getOwnPropertyDescriptor(this, "data1"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.value, data1); + + +Object.defineProperty(this, "data2", + { + configurable: true, + enumerable: true, + writable: false, + value: "data2" + }); + +outer = undefined; +eval("function data2() { return 'data2 function'; } outer = data2;"); +assert.sameValue(typeof data2, "function"); +assert.sameValue(data2, outer); +desc = Object.getOwnPropertyDescriptor(this, "data2"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.value, data2); + + +Object.defineProperty(this, "data3", + { + configurable: true, + enumerable: false, + writable: true, + value: "data3" + }); + +outer = undefined; +eval("function data3() { return 'data3 function'; } outer = data3;"); +assert.sameValue(typeof data3, "function"); +assert.sameValue(data3, outer); +desc = Object.getOwnPropertyDescriptor(this, "data3"); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.value, data3); + + +Object.defineProperty(this, "data4", + { + configurable: true, + enumerable: false, + writable: false, + value: "data4" + }); + +outer = undefined; +eval("function data4() { return 'data4 function'; } outer = data4;"); +assert.sameValue(typeof data4, "function"); +assert.sameValue(data4, outer); +desc = Object.getOwnPropertyDescriptor(this, "data4"); +assert.sameValue(desc.value, data4); +assert.sameValue(desc.writable, true); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, true); + + +// non-configurable data properties are trickier. Again, we test these only in shell. + +if (isInShell) { + Object.defineProperty(this, "data5", + { + configurable: false, + enumerable: true, + writable: true, + value: "data5" + }); + + outer = undefined; + eval("function data5() { return 'data5 function'; } outer = data5;"); + assert.sameValue(typeof data5, "function"); + assert.sameValue(data5, outer); + desc = Object.getOwnPropertyDescriptor(this, "data5"); + assert.sameValue(desc.configurable, false); + assert.sameValue(desc.enumerable, true); + assert.sameValue(desc.writable, true); + assert.sameValue(desc.value, data5); + + + Object.defineProperty(this, "data6", + { + configurable: false, + enumerable: true, + writable: false, + value: "data6" + }); + + outer = undefined; + try + { + eval("function data6() { return 'data6 function'; } outer = data6;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, enumerable, non-writable accessor"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, enumerable, non-writable data property, must " + + "throw a TypeError per ES5+errata: " + e); + assert.sameValue(data6, "data6"); + assert.sameValue(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data6"); + assert.sameValue(desc.configurable, false); + assert.sameValue(desc.enumerable, true); + assert.sameValue(desc.writable, false); + assert.sameValue(desc.value, "data6"); + } + + + Object.defineProperty(this, "data7", + { + configurable: false, + enumerable: false, + writable: true, + value: "data7" + }); + + outer = undefined; + try + { + eval("function data7() { return 'data7 function'; } outer = data7;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable, writable data" + + "property"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable, writable data property, must " + + "throw a TypeError per ES5+errata: " + e); + assert.sameValue(data7, "data7"); + assert.sameValue(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data7"); + assert.sameValue(desc.configurable, false); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.writable, true); + assert.sameValue(desc.value, "data7"); + } + + + Object.defineProperty(this, "data8", + { + configurable: false, + enumerable: false, + writable: false, + value: "data8" + }); + + outer = undefined; + try + { + eval("function data8() { return 'data8 function'; } outer = data8;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable, non-writable data" + + "property"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable, non-writable data property, " + + "must throw a TypeError per ES5+errata: " + e); + assert.sameValue(data8, "data8"); + assert.sameValue(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data8"); + assert.sameValue(desc.configurable, false); + assert.sameValue(desc.enumerable, false); + assert.sameValue(desc.writable, false); + assert.sameValue(desc.value, "data8"); + } +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/misc/future-reserved-words.js b/test/staging/sm/misc/future-reserved-words.js new file mode 100644 index 0000000000..a17ae7248e --- /dev/null +++ b/test/staging/sm/misc/future-reserved-words.js @@ -0,0 +1,498 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 497869; +var summary = "Implement FutureReservedWords per-spec"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var futureReservedWords = + [ + "class", + // "const", // Mozilla extension enabled even for versionless code + "enum", + "export", + "extends", + "import", + "super", + ]; + +var strictFutureReservedWords = + [ + "implements", + "interface", + "let", // enabled: this file doesn't execute as JS1.7 + "package", + "private", + "protected", + "public", + "static", + "yield", // enabled: this file doesn't execute as JS1.7 + ]; + +function testWord(word, expectNormal, expectStrict) +{ + var actual, status; + + // USE AS LHS FOR ASSIGNMENT + + actual = ""; + status = summary + ": " + word + ": normal assignment"; + try + { + eval(word + " = 'foo';"); + actual = "no error"; + } + catch(e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict assignment"; + try + { + eval("'use strict'; " + word + " = 'foo';"); + actual = "no error"; + } + catch(e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS DESTRUCTURING SHORTHAND + + actual = ""; + status = summary + ": " + word + ": destructuring shorthand"; + try + { + eval("({ " + word + " } = 'foo');"); + actual = "no error"; + } + catch(e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict destructuring shorthand"; + try + { + eval("'use strict'; ({ " + word + " } = 'foo');"); + actual = "no error"; + } + catch(e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE IN VARIABLE DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal var"; + try + { + eval("var " + word + ";"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict var"; + try + { + eval("'use strict'; var " + word + ";"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE IN FOR-IN VARIABLE DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal for-in var"; + try + { + eval("for (var " + word + " in {});"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict for-in var"; + try + { + eval("'use strict'; for (var " + word + " in {});"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS CATCH IDENTIFIER + + actual = ""; + status = summary + ": " + word + ": normal var"; + try + { + eval("try { } catch (" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict var"; + try + { + eval("'use strict'; try { } catch (" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS LABEL + + actual = ""; + status = summary + ": " + word + ": normal label"; + try + { + eval(word + ": while (false);"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict label"; + try + { + eval("'use strict'; " + word + ": while (false);"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS ARGUMENT NAME IN FUNCTION DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal function argument"; + try + { + eval("function foo(" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict function argument"; + try + { + eval("'use strict'; function foo(" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + actual = ""; + status = summary + ": " + word + ": function argument retroactively strict"; + try + { + eval("function foo(" + word + ") { 'use strict'; }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS ARGUMENT NAME IN FUNCTION EXPRESSION + + actual = ""; + status = summary + ": " + word + ": normal function expression argument"; + try + { + eval("var s = (function foo(" + word + ") { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict function expression argument"; + try + { + eval("'use strict'; var s = (function foo(" + word + ") { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + actual = ""; + status = summary + ": " + word + ": function expression argument retroactively strict"; + try + { + eval("var s = (function foo(" + word + ") { 'use strict'; });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS ARGUMENT NAME WITH FUNCTION CONSTRUCTOR + + actual = ""; + status = summary + ": " + word + ": argument with normal Function"; + try + { + Function(word, "return 17"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": argument with strict Function"; + try + { + Function(word, "'use strict'; return 17"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS ARGUMENT NAME IN PROPERTY SETTER + + actual = ""; + status = summary + ": " + word + ": normal property setter argument"; + try + { + eval("var o = { set x(" + word + ") { } };"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict property setter argument"; + try + { + eval("'use strict'; var o = { set x(" + word + ") { } };"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + actual = ""; + status = summary + ": " + word + ": property setter argument retroactively strict"; + try + { + eval("var o = { set x(" + word + ") { 'use strict'; } };"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS FUNCTION NAME IN FUNCTION DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal function name"; + try + { + eval("function " + word + "() { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict function name"; + try + { + eval("'use strict'; function " + word + "() { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + actual = ""; + status = summary + ": " + word + ": function name retroactively strict"; + try + { + eval("function " + word + "() { 'use strict'; }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + // USE AS FUNCTION NAME IN FUNCTION EXPRESSION + + actual = ""; + status = summary + ": " + word + ": normal function expression name"; + try + { + eval("var s = (function " + word + "() { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectNormal, status); + + actual = ""; + status = summary + ": " + word + ": strict function expression name"; + try + { + eval("'use strict'; var s = (function " + word + "() { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); + + actual = ""; + status = summary + ": " + word + ": function expression name retroactively strict"; + try + { + eval("var s = (function " + word + "() { 'use strict'; });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + assert.sameValue(actual, expectStrict, status); +} + +function testFutureReservedWord(word) +{ + testWord(word, "SyntaxError", "SyntaxError"); +} + +function testStrictFutureReservedWord(word) +{ + testWord(word, "no error", "SyntaxError"); +} + +futureReservedWords.forEach(testFutureReservedWord); +strictFutureReservedWords.forEach(testStrictFutureReservedWord); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/misc/getter-setter-outerize-this.js b/test/staging/sm/misc/getter-setter-outerize-this.js new file mode 100644 index 0000000000..fc76cfa2e9 --- /dev/null +++ b/test/staging/sm/misc/getter-setter-outerize-this.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof window === "undefined") { + // This test is meant to run in the browser, but it's easy to + // run it in the shell as well, even though it has no inner/outer + // windows. + window = this; +} + +var res = false; +Object.defineProperty(this, "foo", {configurable: true, + get: function() { return this === window; }, + set: function(v) { res = this === window; }}); + +(function() { + for (var i = 0; i < 3000; ++i) { + window.foo = i; + assert.sameValue(res, true, "setter"); + assert.sameValue(window.foo, true, "getter"); + } +})(); + diff --git a/test/staging/sm/misc/global-numeric-properties.js b/test/staging/sm/misc/global-numeric-properties.js new file mode 100644 index 0000000000..5d860c2d6d --- /dev/null +++ b/test/staging/sm/misc/global-numeric-properties.js @@ -0,0 +1,65 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 537863; +var summary = + 'undefined, Infinity, and NaN global properties should not be writable'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var desc, old, error; +var global = this; + +var names = ["NaN", "Infinity", "undefined"]; + +for (var i = 0; i < names.length; i++) +{ + var name = names[i]; + desc = Object.getOwnPropertyDescriptor(global, name); + assert.sameValue(desc !== undefined, true, name + " should be present"); + assert.sameValue(desc.enumerable, false, name + " should not be enumerable"); + assert.sameValue(desc.configurable, false, name + " should not be configurable"); + assert.sameValue(desc.writable, false, name + " should not be writable"); + + old = global[name]; + global[name] = 17; + assert.sameValue(global[name], old, name + " changed on setting?"); + + error = "before"; + try + { + throw new TypeError("SpiderMonkey doesn't currently implement " + + "strict-mode throwing when setting a readonly " + + "property, not running this bit of test for now; " + + "see bug 537873"); + + (function() { "use strict"; global[name] = 42; error = "didn't throw"; })(); + } + catch (e) + { + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; + } + assert.sameValue(error, "typeerror", "wrong strict mode error setting " + name); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/misc/line-paragraph-separator-parse-as-lineterminator.js b/test/staging/sm/misc/line-paragraph-separator-parse-as-lineterminator.js new file mode 100644 index 0000000000..8edddbaa0b --- /dev/null +++ b/test/staging/sm/misc/line-paragraph-separator-parse-as-lineterminator.js @@ -0,0 +1,57 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 663331; +var summary = + "U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR must match the " + + "LineTerminator production when parsing code"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var hidden = 17; +var assigned; + +assigned = 42; +assert.sameValue(eval('"use strict"; var hidden\u2028assigned = 5; typeof hidden'), + "undefined"); +assert.sameValue(assigned, 5); + +assigned = 42; +function t1() +{ + assert.sameValue(eval('var hidden\u2028assigned = 5; typeof hidden'), "undefined"); + assert.sameValue(assigned, 5); +} +t1(); + +assigned = 42; +assert.sameValue(eval('"use strict"; var hidden\u2029assigned = 5; typeof hidden'), + "undefined"); +assert.sameValue(assigned, 5); + +assigned = 42; +function t2() +{ + assert.sameValue(eval('var hidden\u2029assigned = 5; typeof hidden'), "undefined"); + assert.sameValue(assigned, 5); +} +t2(); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/misc/new-with-non-constructor.js b/test/staging/sm/misc/new-with-non-constructor.js new file mode 100644 index 0000000000..e8f2b5e34e --- /dev/null +++ b/test/staging/sm/misc/new-with-non-constructor.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function checkConstruct(thing) { + try { + new thing(); + assert.sameValue(0, 1, "not reached " + thing); + } catch (e) { + assert.sameValue(e.message.includes(" is not a constructor") || + e.message === "Function.prototype.toString called on incompatible object", true); + } +} + +var re = /aaa/ +checkConstruct(re); + +var boundFunctionPrototype = Function.prototype.bind(); +checkConstruct(boundFunctionPrototype); + +var boundBuiltin = Math.sin.bind(); +checkConstruct(boundBuiltin); + +var proxiedFunctionPrototype = new Proxy(Function.prototype, {}); +checkConstruct(proxiedFunctionPrototype); + +var proxiedBuiltin = new Proxy(parseInt, {}); +checkConstruct(proxiedBuiltin); + diff --git a/test/staging/sm/misc/redeclare-var-non-writable-property.js b/test/staging/sm/misc/redeclare-var-non-writable-property.js new file mode 100644 index 0000000000..7214924fe5 --- /dev/null +++ b/test/staging/sm/misc/redeclare-var-non-writable-property.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 539488; +var summary = + '|var| statements for existing, read-only/permanent properties should not ' + + 'be errors'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var undefined; + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/misc/regexp-functions-with-undefined.js b/test/staging/sm/misc/regexp-functions-with-undefined.js new file mode 100644 index 0000000000..61bdd5a8e4 --- /dev/null +++ b/test/staging/sm/misc/regexp-functions-with-undefined.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = /undefined/.exec(); +assert.sameValue(a[0], 'undefined'); +assert.sameValue(a.length, 1); + +a = /undefined/.exec(undefined); +assert.sameValue(a[0], 'undefined'); +assert.sameValue(a.length, 1); + +assert.sameValue(/undefined/.test(), true); +assert.sameValue(/undefined/.test(undefined), true); + +assert.sameValue(/aaaa/.exec(), null); +assert.sameValue(/aaaa/.exec(undefined), null); + +assert.sameValue(/aaaa/.test(), false); +assert.sameValue(/aaaa/.test(undefined), false); + + +assert.sameValue("undefined".search(), 0); +assert.sameValue("undefined".search(undefined), 0); +assert.sameValue("aaaa".search(), 0); +assert.sameValue("aaaa".search(undefined), 0); + +a = "undefined".match(); +assert.sameValue(a[0], ""); +assert.sameValue(a.length, 1); +a = "undefined".match(undefined); +assert.sameValue(a[0], ""); +assert.sameValue(a.length, 1); +a = "aaaa".match(); +assert.sameValue(a[0], ""); +assert.sameValue(a.length, 1); +a = "aaaa".match(undefined); +assert.sameValue(a[0], ""); +assert.sameValue(a.length, 1); + diff --git a/test/staging/sm/misc/syntax-error-end-of-for-head-part.js b/test/staging/sm/misc/syntax-error-end-of-for-head-part.js new file mode 100644 index 0000000000..b7ed3b0dc3 --- /dev/null +++ b/test/staging/sm/misc/syntax-error-end-of-for-head-part.js @@ -0,0 +1,57 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 672854; +var summary = + "Syntax errors at the end of |for| statement header parts shouldn't cause " + + "crashes"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function checkSyntaxError(str) +{ + try + { + var f = Function("for(w in\\"); + throw new Error("didn't throw, returned " + f); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "expected SyntaxError, got " + e); + } +} + +checkSyntaxError("for(var w in \\"); +checkSyntaxError("for(w in \\"); +checkSyntaxError("for(var w\\"); +checkSyntaxError("for(w\\"); +checkSyntaxError("for(var w;\\"); +checkSyntaxError("for(w;\\"); +checkSyntaxError("for(var w; w >\\"); +checkSyntaxError("for(w; w >\\"); +checkSyntaxError("for(var w; w > 3;\\"); +checkSyntaxError("for(w; w > 3;\\"); +checkSyntaxError("for(var w; w > 3; 5\\"); +checkSyntaxError("for(w; w > 3; 5\\"); +checkSyntaxError("for(var w; w > 3; 5foo"); +checkSyntaxError("for(w; w > 3; 5foo"); + +/******************************************************************************/ + +print("Tests complete!"); diff --git a/test/staging/sm/misc/unicode-escaped-keyword.js b/test/staging/sm/misc/unicode-escaped-keyword.js new file mode 100644 index 0000000000..7c52e38215 --- /dev/null +++ b/test/staging/sm/misc/unicode-escaped-keyword.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function throws(code) { + var type; + try { + eval(code); + } catch (ex) { + type = ex.name; + } + assert.sameValue(type, 'SyntaxError'); +} + +var s = '\\u0073'; +throws('var thi' + s); +throws('switch (' + s + 'witch) {}') +throws('var ' + s + 'witch'); + diff --git a/test/staging/sm/misc/unicode-identifier-1d17.js b/test/staging/sm/misc/unicode-identifier-1d17.js new file mode 100644 index 0000000000..ef1770de05 --- /dev/null +++ b/test/staging/sm/misc/unicode-identifier-1d17.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var o = {} +try { + eval('o.\\u1d17 = 42;'); +} +catch (e) { + assert.sameValue('should not fail', true); +} +assert.sameValue(o['\u1d17'], 42); + diff --git a/test/staging/sm/misc/unicode-identifier-82f1.js b/test/staging/sm/misc/unicode-identifier-82f1.js new file mode 100644 index 0000000000..6a17744ec0 --- /dev/null +++ b/test/staging/sm/misc/unicode-identifier-82f1.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var o = {} +try { + eval('o.\\u82f1 = 42;'); +} +catch (e) { + assert.sameValue('should not fail', true); +} +assert.sameValue(o['\u82f1'], 42); + diff --git a/test/staging/sm/misc/unwrapped-no-such-method.js b/test/staging/sm/misc/unwrapped-no-such-method.js new file mode 100644 index 0000000000..6d6ff47a3a --- /dev/null +++ b/test/staging/sm/misc/unwrapped-no-such-method.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Our __noSuchMethod__ handling should only be called when |this| is an object. + +var x = ""; +// Reached from interpreter's JSOP_CALLPROP, and js::mjit::ic::CallProp. +try { x.i(); } catch (ex) { } + +// Reached from interpreter's JSOP_CALLELEM, and js::mjit::stubs::CallElem. +try { x[x](); } catch (ex) { } + +// Reached from js::mjit::stubs::CallProp: +try { true.i(); } catch(ex) { } + diff --git a/test/staging/sm/module/await-restricted-nested.js b/test/staging/sm/module/await-restricted-nested.js new file mode 100644 index 0000000000..2375df8110 --- /dev/null +++ b/test/staging/sm/module/await-restricted-nested.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +negative: + phase: parse + type: SyntaxError +description: | + pending +esid: pending +---*/ + +// 'await' is always a keyword when parsing modules. +function f() { + await; +} +$DONOTEVALUATE(); diff --git a/test/staging/sm/module/bug1488117-empty_FIXTURE.js b/test/staging/sm/module/bug1488117-empty_FIXTURE.js new file mode 100644 index 0000000000..f348cfb5ce --- /dev/null +++ b/test/staging/sm/module/bug1488117-empty_FIXTURE.js @@ -0,0 +1,7 @@ +// |reftest| skip -- support file +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +// Intentionally left empty. diff --git a/test/staging/sm/module/bug1488117-import-namespace_FIXTURE.js b/test/staging/sm/module/bug1488117-import-namespace_FIXTURE.js new file mode 100644 index 0000000000..3ce216e05d --- /dev/null +++ b/test/staging/sm/module/bug1488117-import-namespace_FIXTURE.js @@ -0,0 +1,7 @@ +// |reftest| skip -- support file +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +import* as ns from "./bug1488117.js"; diff --git a/test/staging/sm/module/bug1488117.js b/test/staging/sm/module/bug1488117.js new file mode 100644 index 0000000000..179d0288e2 --- /dev/null +++ b/test/staging/sm/module/bug1488117.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +description: | + pending +esid: pending +---*/ + +// Load and instantiate "bug1488117-import-namespace_FIXTURE.js". +// "bug1488117-import-namespace_FIXTURE.js" contains an |import*| request for the current module, +// which triggers GetModuleNamespace for this module. GetModuleNamespace calls GetExportedNames on +// the current module, which in turn resolves and calls GetExportedNames on all |export*| entries. +// And that means HostResolveImportedModule is called for "bug1488117-empty_FIXTURE.js" before +// InnerModuleInstantiation for "bug1488117.js" has resolved that module file. + +import "./bug1488117-import-namespace_FIXTURE.js"; +export* from "./bug1488117-empty_FIXTURE.js"; + diff --git a/test/staging/sm/module/bug1693261-async.mjs b/test/staging/sm/module/bug1693261-async.mjs new file mode 100644 index 0000000000..bc345e0b4c --- /dev/null +++ b/test/staging/sm/module/bug1693261-async.mjs @@ -0,0 +1,7 @@ +// |reftest| skip -- support file +if (globalThis.testArray === undefined) { + globalThis.testArray = []; +} +globalThis.testArray.push("async 1"); +await 0; +globalThis.testArray.push("async 2"); diff --git a/test/staging/sm/module/bug1693261-c1.mjs b/test/staging/sm/module/bug1693261-c1.mjs new file mode 100644 index 0000000000..31f42d027e --- /dev/null +++ b/test/staging/sm/module/bug1693261-c1.mjs @@ -0,0 +1,6 @@ +// |reftest| skip -- support file +import "./bug1693261-async.mjs"; +if (globalThis.testArray === undefined) { + globalThis.testArray = []; +} +globalThis.testArray.push("c1"); diff --git a/test/staging/sm/module/bug1693261-c2.mjs b/test/staging/sm/module/bug1693261-c2.mjs new file mode 100644 index 0000000000..e5ceb3079d --- /dev/null +++ b/test/staging/sm/module/bug1693261-c2.mjs @@ -0,0 +1,6 @@ +// |reftest| skip -- support file +import "./bug1693261-async.mjs"; +if (globalThis.testArray === undefined) { + globalThis.testArray = []; +} +globalThis.testArray.push("c2"); diff --git a/test/staging/sm/module/bug1693261-x.mjs b/test/staging/sm/module/bug1693261-x.mjs new file mode 100644 index 0000000000..4c73867e58 --- /dev/null +++ b/test/staging/sm/module/bug1693261-x.mjs @@ -0,0 +1,6 @@ +// |reftest| skip -- support file +import "./bug1693261-c1.mjs"; +if (globalThis.testArray === undefined) { + globalThis.testArray = []; +} +globalThis.testArray.push("x"); diff --git a/test/staging/sm/module/duplicate-exported-names-in-single-export-declaration.js b/test/staging/sm/module/duplicate-exported-names-in-single-export-declaration.js new file mode 100644 index 0000000000..c93c54d52d --- /dev/null +++ b/test/staging/sm/module/duplicate-exported-names-in-single-export-declaration.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +negative: + phase: parse + type: SyntaxError +description: | + pending +esid: pending +---*/ + +const a = 1; + +export { a, a }; +$DONOTEVALUATE(); diff --git a/test/staging/sm/module/duplicate-exported-names-in-single-export-var-declaration.js b/test/staging/sm/module/duplicate-exported-names-in-single-export-var-declaration.js new file mode 100644 index 0000000000..d468b55ad5 --- /dev/null +++ b/test/staging/sm/module/duplicate-exported-names-in-single-export-var-declaration.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +negative: + phase: parse + type: SyntaxError +description: | + pending +esid: pending +---*/ + +export var a, a; +$DONOTEVALUATE(); diff --git a/test/staging/sm/module/module-export-name-star.js b/test/staging/sm/module/module-export-name-star.js new file mode 100644 index 0000000000..0934b6785d --- /dev/null +++ b/test/staging/sm/module/module-export-name-star.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- module +description: | + pending +esid: pending +---*/ + +var x = "ok"; + +export {x as "*"}; + +import {"*" as y} from "./module-export-name-star.js" + +assert.sameValue(y, "ok"); + diff --git a/test/staging/sm/object/15.2.3.12.js b/test/staging/sm/object/15.2.3.12.js new file mode 100644 index 0000000000..09eea3bf3e --- /dev/null +++ b/test/staging/sm/object/15.2.3.12.js @@ -0,0 +1,53 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Object.isFrozen */ + +assert.sameValue(Object.isFrozen({}), false); + +assert.sameValue(Object.isFrozen(Object.preventExtensions({})), true); + +var o = Object.defineProperty({}, 'x', { writable:true, configurable:true }); +Object.preventExtensions(o); +assert.sameValue(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:false, configurable:true }); +Object.preventExtensions(o); +assert.sameValue(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:true, configurable:false }); +Object.preventExtensions(o); +assert.sameValue(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:false, configurable:false }); +assert.sameValue(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:false, configurable:false }); +Object.preventExtensions(o); +assert.sameValue(Object.isFrozen(o), true); + +var o = Object.defineProperties({}, { x: { writable:true, configurable:true }, + y: { writable:false, configurable:false } }); +Object.preventExtensions(o); +assert.sameValue(Object.isFrozen(o), false); + +var o = Object.defineProperties({}, { x: { writable:false, configurable:false }, + y: { writable:true, configurable:true } }); +Object.preventExtensions(o); +assert.sameValue(Object.isFrozen(o), false); + +var o = Object.defineProperties({}, { x: { writable:true, configurable:true }, + y: { writable:true, configurable:true } }); +Object.preventExtensions(o); +assert.sameValue(Object.isFrozen(o), false); + diff --git a/test/staging/sm/object/15.2.3.14-01.js b/test/staging/sm/object/15.2.3.14-01.js new file mode 100644 index 0000000000..532234d5de --- /dev/null +++ b/test/staging/sm/object/15.2.3.14-01.js @@ -0,0 +1,100 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 307791; +var summary = 'ES5 Object.keys(O)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function arraysEqual(a1, a2) +{ + return a1.length === a2.length && + a1.every(function(v, i) { return v === a2[i]; }); +} + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(Object.keys.length, 1); + +var o, keys; + +o = { a: 3, b: 2 }; +keys = Object.keys(o); +assert.sameValue(arraysEqual(keys, ["a", "b"]), true, + "" + keys); + +o = { get a() { return 17; }, b: 2 }; +keys = Object.keys(o), +assert.sameValue(arraysEqual(keys, ["a", "b"]), true, + "" + keys); + +o = { __iterator__: function() { throw new Error("non-standard __iterator__ called?"); } }; +keys = Object.keys(o); +assert.sameValue(arraysEqual(keys, ["__iterator__"]), true, + "" + keys); + +o = { a: 1, b: 2 }; +delete o.a; +o.a = 3; +keys = Object.keys(o); +assert.sameValue(arraysEqual(keys, ["b", "a"]), true, + "" + keys); + +o = [0, 1, 2]; +keys = Object.keys(o); +assert.sameValue(arraysEqual(keys, ["0", "1", "2"]), true, + "" + keys); + +o = /./.exec("abc"); +keys = Object.keys(o); +assert.sameValue(arraysEqual(keys, ["0", "index", "input", "groups"]), true, + "" + keys); + +o = { a: 1, b: 2, c: 3 }; +delete o.b; +o.b = 5; +keys = Object.keys(o); +assert.sameValue(arraysEqual(keys, ["a", "c", "b"]), true, + "" + keys); + +function f() { } +f.prototype.p = 1; +o = new f(); +o.g = 1; +keys = Object.keys(o); +assert.sameValue(arraysEqual(keys, ["g"]), true, + "" + keys); + +if (typeof Namespace !== "undefined" && typeof QName !== "undefined") +{ + var o2 = {}; + var qn = new QName(new Namespace("foo"), "v"); + o2.f = 1; + o2[qn] = 3; + o2.baz = 4; + var keys2 = Object.keys(o2); + assert.sameValue(arraysEqual(keys2, ["f", "foo::v", "baz"]), true, + "" + keys2); +} + +/******************************************************************************/ + +assert.sameValue(expect, actual, "Object.keys"); + +printStatus("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.4-01.js b/test/staging/sm/object/15.2.3.4-01.js new file mode 100644 index 0000000000..a805186536 --- /dev/null +++ b/test/staging/sm/object/15.2.3.4-01.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = + 'Object.getOwnPropertyNames should play nicely with enumerator caching'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (var p in JSON); +var names = Object.getOwnPropertyNames(JSON); +assert.sameValue(names.length >= 2, true, + "wrong number of property names? [" + names + "]"); +assert.sameValue(names.indexOf("parse") >= 0, true); +assert.sameValue(names.indexOf("stringify") >= 0, true); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.4-02.js b/test/staging/sm/object/15.2.3.4-02.js new file mode 100644 index 0000000000..50b31c876d --- /dev/null +++ b/test/staging/sm/object/15.2.3.4-02.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = 'Object.getOwnPropertyNames: array objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var a, names, expected; + +function arraysEqual(a1, a2) +{ + return a1.length === a2.length && + a1.every(function(v, i) { return v === a2[i]; }); +} + + +a = [0, 1, 2]; + +names = Object.getOwnPropertyNames(a).sort(); +expected = ["0", "1", "2", "length"].sort(); + +a = [1, , , 7]; +a.p = 2; +Object.defineProperty(a, "q", { value: 42, enumerable: false }); + +names = Object.getOwnPropertyNames(a).sort(); +expected = ["0", "3", "p", "q", "length"].sort(); +assert.sameValue(arraysEqual(names, expected), true); + + +a = []; + +names = Object.getOwnPropertyNames(a).sort(); +expected = ["length"]; +assert.sameValue(arraysEqual(names, expected), true); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.4-03.js b/test/staging/sm/object/15.2.3.4-03.js new file mode 100644 index 0000000000..52c1662c28 --- /dev/null +++ b/test/staging/sm/object/15.2.3.4-03.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = 'Object.getOwnPropertyNames: function objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function two(a, b) { } + +assert.sameValue(Object.getOwnPropertyNames(two).indexOf("length") >= 0, true); + +var bound0 = Function.prototype.bind + ? two.bind("this") + : function two(a, b) { }; + +assert.sameValue(Object.getOwnPropertyNames(bound0).indexOf("length") >= 0, true); +assert.sameValue(bound0.length, 2); + +var bound1 = Function.prototype.bind + ? two.bind("this", 1) + : function one(a) { }; + +assert.sameValue(Object.getOwnPropertyNames(bound1).indexOf("length") >= 0, true); +assert.sameValue(bound1.length, 1); + +var bound2 = Function.prototype.bind + ? two.bind("this", 1, 2) + : function zero() { }; + +assert.sameValue(Object.getOwnPropertyNames(bound2).indexOf("length") >= 0, true); +assert.sameValue(bound2.length, 0); + +var bound3 = Function.prototype.bind + ? two.bind("this", 1, 2, 3) + : function zero() { }; + +assert.sameValue(Object.getOwnPropertyNames(bound3).indexOf("length") >= 0, true); +assert.sameValue(bound3.length, 0); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.4-04.js b/test/staging/sm/object/15.2.3.4-04.js new file mode 100644 index 0000000000..0ecf97abde --- /dev/null +++ b/test/staging/sm/object/15.2.3.4-04.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = 'Object.getOwnPropertyNames: regular expression objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var actual = Object.getOwnPropertyNames(/a/); +var expected = ["lastIndex"]; + +for (var i = 0; i < expected.length; i++) +{ + assert.sameValue(actual.indexOf(expected[i]) >= 0, true, + expected[i] + " should be a property name on a RegExp"); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.5-01.js b/test/staging/sm/object/15.2.3.5-01.js new file mode 100644 index 0000000000..8d544450f9 --- /dev/null +++ b/test/staging/sm/object/15.2.3.5-01.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 492840; +var summary = 'ES5 Object.create(O [, Properties])'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue("create" in Object, true); +assert.sameValue(Object.create.length, 2); + +var o, desc, props, proto; + +o = Object.create(null); +assert.sameValue(Object.getPrototypeOf(o), null, "bad null-proto"); + +o = Object.create(null, { a: { value: 17, enumerable: false } }); +assert.sameValue(Object.getPrototypeOf(o), null, "bad null-proto"); +assert.sameValue("a" in o, true); +desc = Object.getOwnPropertyDescriptor(o, "a"); +assert.sameValue(desc !== undefined, true, "no descriptor?"); +assert.sameValue(desc.value, 17); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.writable, false); + +props = Object.create({ bar: 15 }); +Object.defineProperty(props, "foo", { enumerable: false, value: 42 }); +proto = { baz: 12 }; +o = Object.create(proto, props); +assert.sameValue(Object.getPrototypeOf(o), proto); +assert.sameValue(Object.getOwnPropertyDescriptor(o, "foo"), undefined); +assert.sameValue("foo" in o, false); +assert.sameValue(Object.getOwnPropertyDescriptor(o, "bar"), undefined); +assert.sameValue("bar" in o, false); +assert.sameValue(Object.getOwnPropertyDescriptor(o, "baz"), undefined); +assert.sameValue(o.baz, 12); +assert.sameValue(o.hasOwnProperty("baz"), false); + +try { + var actual = + Object.create(Object.create({}, + { boom: { get: function() { return "base"; }}}), + { boom: { get: function() { return "overridden"; }}}).boom +} catch (e) { +} +assert.sameValue(actual, "overridden"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.6-define-over-method.js b/test/staging/sm/object/15.2.3.6-define-over-method.js new file mode 100644 index 0000000000..3b1d953f3e --- /dev/null +++ b/test/staging/sm/object/15.2.3.6-define-over-method.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 568786; +var summary = + 'Do not assert: !(attrs & (JSPROP_GETTER | JSPROP_SETTER)) with ' + + 'Object.defineProperty'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var o = { x: function(){} }; +Object.defineProperty(o, "x", { get: function(){} }); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.7-01.js b/test/staging/sm/object/15.2.3.7-01.js new file mode 100644 index 0000000000..4a97c76d1b --- /dev/null +++ b/test/staging/sm/object/15.2.3.7-01.js @@ -0,0 +1,143 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = 'ES5 Object.defineProperties(O, Properties)'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue("defineProperties" in Object, true); +assert.sameValue(Object.defineProperties.length, 2); + +var o, props, desc, passed; + +o = {}; +props = + { + a: { value: 17, enumerable: true, configurable: true, writable: true }, + b: { value: 42, enumerable: false, configurable: false, writable: false } + }; +Object.defineProperties(o, props); +assert.sameValue("a" in o, true); +assert.sameValue("b" in o, true); +desc = Object.getOwnPropertyDescriptor(o, "a"); +assert.sameValue(desc.value, 17); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, true); +assert.sameValue(desc.writable, true); +desc = Object.getOwnPropertyDescriptor(o, "b"); +assert.sameValue(desc.value, 42); +assert.sameValue(desc.enumerable, false); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.writable, false); + +props = + { + c: { value: NaN, enumerable: false, configurable: true, writable: true }, + b: { value: 44 } + }; +var error = "before"; +try +{ + Object.defineProperties(o, props); + error = "no exception thrown"; +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assert.sameValue(error, "typeerror", "didn't throw or threw wrongly"); +assert.sameValue("c" in o, true, "new property added"); +assert.sameValue(o.b, 42, "old property value preserved"); + +function Properties() { } +Properties.prototype = { b: { value: 42, enumerable: true } }; +props = new Properties(); +Object.defineProperty(props, "a", { enumerable: false }); +o = {}; +Object.defineProperties(o, props); +assert.sameValue("a" in o, false); +assert.sameValue(Object.getOwnPropertyDescriptor(o, "a"), undefined, + "Object.defineProperties(O, Properties) should only use enumerable " + + "properties on Properties"); +assert.sameValue("b" in o, false); +assert.sameValue(Object.getOwnPropertyDescriptor(o, "b"), undefined, + "Object.defineProperties(O, Properties) should only use enumerable " + + "properties directly on Properties"); + +Number.prototype.foo = { value: 17, enumerable: true }; +Boolean.prototype.bar = { value: 8675309, enumerable: true }; +String.prototype.quux = { value: "Are you HAPPY yet?", enumerable: true }; +o = {}; +Object.defineProperties(o, 5); // ToObject only throws for null/undefined +assert.sameValue("foo" in o, false, "foo is not an enumerable own property"); +Object.defineProperties(o, false); +assert.sameValue("bar" in o, false, "bar is not an enumerable own property"); +Object.defineProperties(o, ""); +assert.sameValue("quux" in o, false, "quux is not an enumerable own property"); + +error = "before"; +try +{ + Object.defineProperties(o, "1"); +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assert.sameValue(error, "typeerror", + "should throw on Properties == '1' due to '1'[0] not being a " + + "property descriptor"); + +error = "before"; +try +{ + Object.defineProperties(o, null); +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assert.sameValue(error, "typeerror", "should throw on Properties == null"); + +error = "before"; +try +{ + Object.defineProperties(o, undefined); +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assert.sameValue(error, "typeerror", "should throw on Properties == undefined"); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/15.2.3.9.js b/test/staging/sm/object/15.2.3.9.js new file mode 100644 index 0000000000..6613293895 --- /dev/null +++ b/test/staging/sm/object/15.2.3.9.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Object.freeze */ + +function getme() { return 42; }; +function setme(x) { }; + +var properties = { all: { value:1, writable:true, configurable:true, enumerable: true }, + readOnly: { value:2, writable:false, configurable:true, enumerable: true }, + nonConfig: { value:3, writable:true, configurable:false, enumerable: true }, + none: { value:4, writable:false, configurable:false, enumerable: true }, + getter: { get: getme, configurable:false, enumerable: true }, + setter: { set: setme, configurable:false, enumerable: true }, + getandset: { get: getme, set: setme, configurable:false, enumerable: true } + }; +var o = Object.defineProperties({}, properties); + +Object.freeze(o); + +function getPropertyOf(obj) { + return function (prop) { + return Object.getOwnPropertyDescriptor(obj, prop); + }; +}; + +assert.sameValue(deepEqual(Object.getOwnPropertyDescriptor(o, 'all'), + { value: 1, writable:false, enumerable:true, configurable:false }), + true); +assert.sameValue(deepEqual(Object.getOwnPropertyDescriptor(o, 'readOnly'), + { value: 2, writable:false, enumerable:true, configurable:false }), + true); +assert.sameValue(deepEqual(Object.getOwnPropertyDescriptor(o, 'nonConfig'), + { value: 3, writable:false, enumerable:true, configurable:false }), + true); +assert.sameValue(deepEqual(Object.getOwnPropertyDescriptor(o, 'none'), + { value: 4, writable:false, enumerable:true, configurable:false }), + true); +assert.sameValue(deepEqual(Object.getOwnPropertyDescriptor(o, 'getter'), + { get: getme, set: (void 0), enumerable:true, configurable:false }), + true); +assert.sameValue(deepEqual(Object.getOwnPropertyDescriptor(o, 'setter'), + { set: setme, get: (void 0), enumerable:true, configurable:false }), + true); +assert.sameValue(deepEqual(Object.getOwnPropertyDescriptor(o, 'getandset'), + { get: getme, set: setme, enumerable:true, configurable:false }), + true); + diff --git a/test/staging/sm/object/accessor-arguments-rest.js b/test/staging/sm/object/accessor-arguments-rest.js new file mode 100644 index 0000000000..b8dfe338c8 --- /dev/null +++ b/test/staging/sm/object/accessor-arguments-rest.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOf(() => eval("({ get x(...a) { } })"), SyntaxError); +assertThrowsInstanceOf(() => eval("({ get x(a, ...b) { } })"), SyntaxError); +assertThrowsInstanceOf(() => eval("({ get x([a], ...b) { } })"), SyntaxError); +assertThrowsInstanceOf(() => eval("({ get x({a}, ...b) { } })"), SyntaxError); +assertThrowsInstanceOf(() => eval("({ get x({a: A}, ...b) { } })"), SyntaxError); + +assertThrowsInstanceOf(() => eval("({ set x(...a) { } })"), SyntaxError); +assertThrowsInstanceOf(() => eval("({ set x(a, ...b) { } })"), SyntaxError); +assertThrowsInstanceOf(() => eval("({ set x([a], ...b) { } })"), SyntaxError); +assertThrowsInstanceOf(() => eval("({ set x({a: A}, ...b) { } })"), SyntaxError); + +({ get(...a) { } }); +({ get(a, ...b) { } }); +({ get([a], ...b) { } }); +({ get({a}, ...b) { } }); +({ get({a: A}, ...b) { } }); + +({ set(...a) { } }); +({ set(a, ...b) { } }); +({ set([a], ...b) { } }); +({ set({a: A}, ...b) { } }); + diff --git a/test/staging/sm/object/accessor-name.js b/test/staging/sm/object/accessor-name.js new file mode 100644 index 0000000000..c4d942380e --- /dev/null +++ b/test/staging/sm/object/accessor-name.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function name(obj, property, get) { + let desc = Object.getOwnPropertyDescriptor(obj, property); + return (get ? desc.get : desc.set).name; +} + +assert.sameValue(name({get a() {}}, "a", true), "get a"); +assert.sameValue(name({set a(v) {}}, "a", false), "set a"); + +assert.sameValue(name({get 123() {}}, "123", true), "get 123"); +assert.sameValue(name({set 123(v) {}}, "123", false), "set 123"); + +assert.sameValue(name({get case() {}}, "case", true), "get case"); +assert.sameValue(name({set case(v) {}}, "case", false), "set case"); + +assert.sameValue(name({get get() {}}, "get", true), "get get"); +assert.sameValue(name({set set(v) {}}, "set", false), "set set"); + +let o = {get a() { }, set a(v) {}}; +assert.sameValue(name(o, "a", true), "get a"); +assert.sameValue(name(o, "a", false), "set a"); + +o = {get 123() { }, set 123(v) {}} +assert.sameValue(name(o, "123", true), "get 123"); +assert.sameValue(name(o, "123", false), "set 123"); + +o = {get case() { }, set case(v) {}} +assert.sameValue(name(o, "case", true), "get case"); +assert.sameValue(name(o, "case", false), "set case"); + +assert.sameValue(name({get ["a"]() {}}, "a", true), "get a"); +assert.sameValue(name({get [123]() {}}, "123", true), "get 123"); +assert.sameValue(name({set ["a"](v) {}}, "a", false), "set a"); +assert.sameValue(name({set [123](v) {}}, "123", false), "set 123"); + diff --git a/test/staging/sm/object/accessor-non-constructor.js b/test/staging/sm/object/accessor-non-constructor.js new file mode 100644 index 0000000000..472cd44970 --- /dev/null +++ b/test/staging/sm/object/accessor-non-constructor.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var obj = { get a() { return 1; } }; +assertThrowsInstanceOf(() => { + new Object.getOwnPropertyDescriptor(obj, "a").get +}, TypeError); + +obj = { set a(b) { } }; +assertThrowsInstanceOf(() => { + new Object.getOwnPropertyDescriptor(obj, "a").set +}, TypeError); + +obj = { get a() { return 1; }, set a(b) { } }; +assertThrowsInstanceOf(() => { + new Object.getOwnPropertyDescriptor(obj, "a").get +}, TypeError); +assertThrowsInstanceOf(() => { + new Object.getOwnPropertyDescriptor(obj, "a").set +}, TypeError); + diff --git a/test/staging/sm/object/add-property-non-extensible.js b/test/staging/sm/object/add-property-non-extensible.js new file mode 100644 index 0000000000..2dcf3d14f1 --- /dev/null +++ b/test/staging/sm/object/add-property-non-extensible.js @@ -0,0 +1,122 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'add-property-non-extensible.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 602144; +var summary = + 'Properly method-compile attempted addition of properties to ' + + 'non-extensible objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// No property + +var o1 = {}; +for (var i = 0; i < 5; i++) + o1.a = 3; +assert.sameValue(o1.a, 3); + +var o2 = Object.preventExtensions({}); +for (var i = 0; i < 5; i++) + o2.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o2, "a"), undefined); + +var o3 = Object.seal({}); +for (var i = 0; i < 5; i++) + o3.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o3, "a"), undefined); + +var o4 = Object.freeze({}); +for (var i = 0; i < 5; i++) + o4.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o4, "a"), undefined); + + +// Has property + +var o5 = { a: 2 }; +for (var i = 0; i < 5; i++) + o5.a = 3; +assert.sameValue(o5.a, 3); + +var o6 = Object.preventExtensions({ a: 2 }); +for (var i = 0; i < 5; i++) + o6.a = 3; +assert.sameValue(o6.a, 3); + +var o7 = Object.seal({ a: 2 }); +for (var i = 0; i < 5; i++) + o7.a = 3; +assert.sameValue(o7.a, 3); + +var o8 = Object.freeze({ a: 2 }); +for (var i = 0; i < 5; i++) + o8.a = 3; +assert.sameValue(o8.a, 2); + + +// Extensible, hit up the prototype chain + +var o9 = Object.create({ a: 2 }); +for (var i = 0; i < 5; i++) + o9.a = 3; +assert.sameValue(o9.a, 3); + +var o10 = Object.create(Object.preventExtensions({ a: 2 })); +for (var i = 0; i < 5; i++) + o10.a = 3; +assert.sameValue(o10.a, 3); + +var o11 = Object.create(Object.seal({ a: 2 })); +for (var i = 0; i < 5; i++) + o11.a = 3; +assert.sameValue(o11.a, 3); + +var o12 = Object.create(Object.freeze({ a: 2 })); +for (var i = 0; i < 5; i++) + o12.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o12, "a"), undefined); + + +// Not extensible, hit up the prototype chain + +var o13 = Object.preventExtensions(Object.create({ a: 2 })); +for (var i = 0; i < 5; i++) + o13.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o13, "a"), undefined); + +var o14 = + Object.preventExtensions(Object.create(Object.preventExtensions({ a: 2 }))); +for (var i = 0; i < 5; i++) + o14.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o14, "a"), undefined); + +var o15 = Object.preventExtensions(Object.create(Object.seal({ a: 2 }))); +for (var i = 0; i < 5; i++) + o15.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o15, "a"), undefined); + +var o16 = Object.preventExtensions(Object.create(Object.freeze({ a: 2 }))); +for (var i = 0; i < 5; i++) + o16.a = 3; +assert.sameValue(Object.getOwnPropertyDescriptor(o16, "a"), undefined); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/bug-1150906.js b/test/staging/sm/object/bug-1150906.js new file mode 100644 index 0000000000..70b38a1d71 --- /dev/null +++ b/test/staging/sm/object/bug-1150906.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(x) { + Object.defineProperty(arguments, 0, { + get: function() {} + }); + return arguments; +} + +var obj = f(1); +assert.sameValue(obj[0], undefined); +assert.sameValue(Object.getOwnPropertyDescriptor(obj, 0).set, undefined); +assertThrowsInstanceOf(() => { "use strict"; obj[0] = 1; }, TypeError); + diff --git a/test/staging/sm/object/bug-1206700.js b/test/staging/sm/object/bug-1206700.js new file mode 100644 index 0000000000..935bd9534a --- /dev/null +++ b/test/staging/sm/object/bug-1206700.js @@ -0,0 +1,20 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var x = {}; +Reflect.set(x, "prop", 5, Object.prototype); +var y = {}; +Reflect.set(y, "prop", 6, Object.prototype); +assert.sameValue(x.hasOwnProperty("prop"), false); +assert.sameValue(y.hasOwnProperty("prop"), false); +assert.sameValue(Object.prototype.hasOwnProperty("prop"), true); +assert.sameValue(Object.prototype.prop, 6); + diff --git a/test/staging/sm/object/clear-dictionary-accessor-getset.js b/test/staging/sm/object/clear-dictionary-accessor-getset.js new file mode 100644 index 0000000000..71d1eb9f6b --- /dev/null +++ b/test/staging/sm/object/clear-dictionary-accessor-getset.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "clear-dictionary-accessor-getset.js"; +var BUGNUMBER = 1082662; +var summary = + "Properly handle GC of a dictionary accessor property whose [[Get]] or " + + "[[Set]] has been changed to |undefined|"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function test(field) +{ + var prop = "[[" + field[0].toUpperCase() + field.substring(1) + "]]"; + print("Testing for GC crashes after setting " + prop + " to undefined..."); + + function inner() + { + // Create an object with an accessor property. + var obj = { x: 42, get y() {}, set y(v) {} }; + + // 1) convert it to dictionary mode, in the process 2) creating a new + // version of that accessor property whose [[Get]] and [[Set]] are objects + // that trigger post barriers. + delete obj.x; + + var desc = {}; + desc[field] = undefined; + + // Overwrite [[field]] with undefined. Note #1 above is necessary so this + // is an actual *overwrite*, and not (possibly) a shape-tree fork that + // doesn't overwrite. + Object.defineProperty(obj, "y", desc); + + } + + inner(); + gc(); // In unfixed code, this crashes trying to mark a null [[field]]. +} + +test("get"); +test("set"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/object/defineGetter-defineSetter.js b/test/staging/sm/object/defineGetter-defineSetter.js new file mode 100644 index 0000000000..afa802af48 --- /dev/null +++ b/test/staging/sm/object/defineGetter-defineSetter.js @@ -0,0 +1,99 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let count = 0; +let verifyProxy = new Proxy({}, { + defineProperty(target, property, descriptor) { + assert.sameValue(property, "x"); + + assert.sameValue(descriptor.enumerable, true); + assert.sameValue(descriptor.configurable, true); + + if ("set" in descriptor) + assert.sameValue(descriptor.set, Object.prototype.__defineSetter__); + else + assert.sameValue(descriptor.get, Object.prototype.__defineGetter__); + + assert.sameValue(Object.keys(descriptor).length, 3); + + count++; + return true; + } +}); + +for (let define of [Object.prototype.__defineGetter__, Object.prototype.__defineSetter__]) { + // null/undefined |this| value + for (let thisv of [undefined, null]) + assertThrowsInstanceOf(() => define.call(thisv, "x", define), TypeError); + + // non-callable getter/setter + let nonCallable = [{}, [], new Proxy({}, {})]; + for (let value of nonCallable) + assertThrowsInstanceOf(() => define.call(verifyProxy, "x", value), TypeError); + + // ToPropertyKey + let key = { + [Symbol.toPrimitive](hint) { + assert.sameValue(hint, "string"); + // Throws, because non-primitive is returned + return {}; + }, + valueOf() { throw "wrongly invoked"; }, + toString() { throw "wrongly invoked"; } + }; + assertThrowsInstanceOf(() => define.call(verifyProxy, key, define), TypeError); + + key = { + [Symbol.toPrimitive](hint) { + assert.sameValue(hint, "string"); + return "x"; + }, + valueOf() { throw "wrongly invoked"; }, + toString() { throw "wrongly invoked"; } + } + define.call(verifyProxy, key, define); + + key = { + [Symbol.toPrimitive]: undefined, + + valueOf() { throw "wrongly invoked"; }, + toString() { return "x"; } + } + define.call(verifyProxy, key, define); + + // Bog standard call + define.call(verifyProxy, "x", define); + + let obj = {}; + define.call(obj, "x", define); + let descriptor = Object.getOwnPropertyDescriptor(obj, "x"); + + assert.sameValue(descriptor.enumerable, true); + assert.sameValue(descriptor.configurable, true); + + if (define == Object.prototype.__defineSetter__) { + assert.sameValue(descriptor.get, undefined); + assert.sameValue(descriptor.set, define); + } else { + assert.sameValue(descriptor.get, define); + assert.sameValue(descriptor.set, undefined); + } + + assert.sameValue(Object.keys(descriptor).length, 4); + + +} + +// Number of calls that should succeed +assert.sameValue(count, 6); + diff --git a/test/staging/sm/object/defineProperties-callable-accessor.js b/test/staging/sm/object/defineProperties-callable-accessor.js new file mode 100644 index 0000000000..da48a30c7c --- /dev/null +++ b/test/staging/sm/object/defineProperties-callable-accessor.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// ObjectDefineProperties with non callable accessor throws. +const descriptors = [ + {get: 1}, {set: 1}, + {get: []}, {set: []}, + {get: {}}, {set: {}}, + {get: new Number}, {set: new Number}, + + {get: 1, set: 1}, + {get: [], set: []}, + {get: {}, set: {}}, + {get: new Number, set: new Number}, +]; + +for (const descriptor of descriptors) { + assertThrowsInstanceOf(() => Object.create(null, {x: descriptor}), TypeError); + assertThrowsInstanceOf(() => Object.defineProperties({}, {x: descriptor}), TypeError); +} + diff --git a/test/staging/sm/object/defineProperties-order.js b/test/staging/sm/object/defineProperties-order.js new file mode 100644 index 0000000000..23892817a0 --- /dev/null +++ b/test/staging/sm/object/defineProperties-order.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Based on testcases provided by André Bargull + +let log = []; +let logger = new Proxy({}, { + get(target, key) { + log.push(key); + } +}); + +Object.create(null, new Proxy({a: {value: 0}, b: {value: 1}}, logger)); +assert.sameValue(log.join(), "ownKeys,getOwnPropertyDescriptor,get,getOwnPropertyDescriptor,get"); + +log = []; +Object.defineProperties({}, new Proxy({a: {value: 0}, b: {value: 1}}, logger)); +assert.sameValue(log.join(), "ownKeys,getOwnPropertyDescriptor,get,getOwnPropertyDescriptor,get"); + diff --git a/test/staging/sm/object/defineProperty-proxy.js b/test/staging/sm/object/defineProperty-proxy.js new file mode 100644 index 0000000000..5e71d47ca0 --- /dev/null +++ b/test/staging/sm/object/defineProperty-proxy.js @@ -0,0 +1,63 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test details of the implementation of ToPropertyDescriptor exposed to scripts +// thanks to scriptable proxies. + +// A LoggingProxy object logs certain operations performed on it. +var log = []; +function LoggingProxy(target) { + return new Proxy(target, { + has: function (t, id) { + log.push("has " + id); + return id in t; + }, + get: function (t, id) { + log.push("get " + id); + return t[id]; + } + }); +} + +// Tragically, we use separate code to implement Object.defineProperty on +// arrays and on proxies. So run the test three times. +var testSubjects = [ + {}, + [], + new Proxy({}, {}) +]; + +for (var obj of testSubjects) { + log = []; + + // Object.defineProperty is one public method that performs a + // ToPropertyDescriptor call. + Object.defineProperty(obj, "x", new LoggingProxy({ + enumerable: true, + configurable: true, + value: 3, + writable: true + })); + + // It should have performed exactly these operations on the proxy, in this + // order. See ES6 rev 24 (2014 April 27) 6.2.4.5 ToPropertyDescriptor. + assert.deepEqual(log, [ + "has enumerable", "get enumerable", + "has configurable", "get configurable", + "has value", "get value", + "has writable", "get writable", + "has get", + "has set" + ]); +} + diff --git a/test/staging/sm/object/duplProps.js b/test/staging/sm/object/duplProps.js new file mode 100644 index 0000000000..ea82719089 --- /dev/null +++ b/test/staging/sm/object/duplProps.js @@ -0,0 +1,126 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * ES6 allows duplicate property names in object literals, even in strict mode. + * These tests modify the tests in test262 to reflect this change. + */ + +// test262/ch11/11.1/11.1.5/11.1.5-4-4-a-1-s.js +a = function() { "use strict"; return { foo: 0, foo : 1 }}; +assert.sameValue(a().foo, 1); +a = function() { return { foo: 0, foo : 1 }}; +assert.sameValue(a().foo, 1); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-b-1.js +a = function() { "use strict"; return { foo : 1, get foo() { return 2; }}}; +assert.sameValue(a().foo, 2); +a = function() { return { foo : 1, get foo() { return 2;} }}; +assert.sameValue(a().foo, 2); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-c-1.js +a = function() { "use strict"; return { get foo() { return 2; }, foo : 1 }}; +assert.sameValue(a().foo, 1); +a = function() { return { get foo() { return 2; }, foo : 1 }}; +assert.sameValue(a().foo, 1); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-b-2.js +a = function() { "use strict"; return { foo : 1, set foo(a) { throw 2; }}}; +try { + a().foo = 5; + throw new Error("2 should be thrown here"); +} catch (e) { + if (e !== 2) + throw new Error("2 should be thrown here"); +} +a = function() { return { foo : 1, set foo(a) { throw 2;} }}; +try { + a().foo = 5; + throw new Error("2 should be thrown here"); +} catch (e) { + if (e !== 2) + throw new Error("2 should be thrown here"); +} + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-1.js +a = function() { "use strict"; return { get foo() { return 2; }, get foo() { return 3; } }}; +assert.sameValue(a().foo, 3); +a = function() { return { get foo() { return 2; }, get foo() { return 3; } }}; +assert.sameValue(a().foo, 3); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-c-2.js +a = function() { "use strict"; return { set foo(a) { throw 2; }, foo : 1 }}; +assert.sameValue(a().foo, 1); +a = function() { return { set foo(a) { throw 2; }, foo : 1 }}; +assert.sameValue(a().foo, 1); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-2.js +a = function() { "use strict"; return { set foo(a) { throw 2; }, set foo(a) { throw 3; }}}; +try { + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} +a = function() { return { set foo(a) { throw 2; }, set foo(a) { throw 3; }}}; +try { + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-3.js +a = function() { "use strict"; return { get foo() { return 2; }, set foo(a) { throw 3; }, + get foo() { return 4; }}}; +try { + assert.sameValue(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} +a = function() { return { get foo() { return 2; }, set foo(a) { throw 3; }, + get foo() { return 4; }}}; +try { + assert.sameValue(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-4.js +a = function() { "use strict"; return { set foo(a) { throw 2; }, get foo() { return 4; }, + set foo(a) { throw 3; }}}; +try { + assert.sameValue(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} +a = function() { return { set foo(a) { throw 2; }, get foo() { return 4; }, + set foo(a) { throw 3; }}}; +try { + assert.sameValue(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} + diff --git a/test/staging/sm/object/entries.js b/test/staging/sm/object/entries.js new file mode 100644 index 0000000000..ba06b8fe68 --- /dev/null +++ b/test/staging/sm/object/entries.js @@ -0,0 +1,100 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if ("entries" in Object) { + assert.sameValue(Object.entries.length, 1); + + var o, entries; + + o = { a: 3, b: 2 }; + entries = Object.entries(o); + assert.deepEqual(entries, [["a", 3], ["b", 2]]); + + o = { get a() { return 17; }, b: 2 }; + entries = Object.entries(o), + assert.deepEqual(entries, [["a", 17], ["b", 2]]); + + o = { __iterator__: function() { throw new Error("non-standard __iterator__ called?"); } }; + entries = Object.entries(o); + assert.deepEqual(entries, [["__iterator__", o.__iterator__]]); + + o = { a: 1, b: 2 }; + delete o.a; + o.a = 3; + entries = Object.entries(o); + assert.deepEqual(entries, [["b", 2], ["a", 3]]); + + o = [0, 1, 2]; + entries = Object.entries(o); + assert.deepEqual(entries, [["0", 0], ["1", 1], ["2", 2]]); + + o = /./.exec("abc"); + entries = Object.entries(o); + assert.deepEqual(entries, [["0", "a"], ["index", 0], ["input", "abc"], ["groups", undefined]]); + + o = { a: 1, b: 2, c: 3 }; + delete o.b; + o.b = 5; + entries = Object.entries(o); + assert.deepEqual(entries, [["a", 1], ["c", 3], ["b", 5]]); + + function f() { } + f.prototype.p = 1; + o = new f(); + o.g = 1; + entries = Object.entries(o); + assert.deepEqual(entries, [["g", 1]]); + + var o = {get a() {delete this.b; return 1}, b: 2, c: 3}; + entries = Object.entries(o); + assert.deepEqual(entries, [["a", 1], ["c", 3]]); + + assertThrowsInstanceOf(() => Object.entries(), TypeError); + assertThrowsInstanceOf(() => Object.entries(undefined), TypeError); + assertThrowsInstanceOf(() => Object.entries(null), TypeError); + + assert.deepEqual(Object.entries(1), []); + assert.deepEqual(Object.entries(true), []); + if (typeof Symbol === "function") + assert.deepEqual(Object.entries(Symbol("foo")), []); + + assert.deepEqual(Object.entries("foo"), [["0", "f"], ["1", "o"], ["2", "o"]]); + + entries = Object.entries({ + get a(){ + Object.defineProperty(this, "b", {enumerable: false}); + return "A"; + }, + b: "B" + }); + assert.deepEqual(entries, [["a", "A"]]); + + let ownKeysCallCount = 0; + let getOwnPropertyDescriptorCalls = []; + let target = { a: 1, b: 2, c: 3 }; + o = new Proxy(target, { + ownKeys() { + ownKeysCallCount++; + return ["c", "a"]; + }, + getOwnPropertyDescriptor(target, key) { + getOwnPropertyDescriptorCalls.push(key); + return Object.getOwnPropertyDescriptor(target, key); + } + }); + entries = Object.entries(o); + assert.sameValue(ownKeysCallCount, 1); + assert.deepEqual(entries, [["c", 3], ["a", 1]]); + assert.deepEqual(getOwnPropertyDescriptorCalls, ["c", "a"]); +} + diff --git a/test/staging/sm/object/extensibility-01.js b/test/staging/sm/object/extensibility-01.js new file mode 100644 index 0000000000..ab479d52cd --- /dev/null +++ b/test/staging/sm/object/extensibility-01.js @@ -0,0 +1,107 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = '15.2.3.10-01.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 492849; +var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function trySetProperty(o, p, v, strict) +{ + function strictSetProperty() + { + "use strict"; + o[p] = v; + } + + function setProperty() + { + o[p] = v; + } + + assert.sameValue(Object.prototype.hasOwnProperty.call(o, p), false); + + try + { + if (strict) + strictSetProperty(); + else + setProperty(); + if (o[p] === v) + return "set"; + if (p in o) + return "set-converted"; + return "swallowed"; + } + catch (e) + { + return "throw"; + } +} + +function tryDefineProperty(o, p, v) +{ + assert.sameValue(Object.prototype.hasOwnProperty.call(o, p), false); + + try + { + Object.defineProperty(o, p, { value: v }); + if (o[p] === v) + return "set"; + if (p in o) + return "set-converted"; + return "swallowed"; + } + catch (e) + { + return "throw"; + } +} + +assert.sameValue(typeof Object.preventExtensions, "function"); +assert.sameValue(Object.preventExtensions.length, 1); + +var slowArray = [1, 2, 3]; +slowArray.slow = 5; +var objs = + [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/]; + +for (var i = 0, sz = objs.length; i < sz; i++) +{ + var o = objs[i]; + assert.sameValue(Object.isExtensible(o), true, "object " + i + " not extensible?"); + + var o2 = Object.preventExtensions(o); + assert.sameValue(o, o2); + + assert.sameValue(Object.isExtensible(o), false, "object " + i + " is extensible?"); + + assert.sameValue(trySetProperty(o, "baz", 17, true), "throw", + "unexpected behavior for strict-mode property-addition to " + + "object " + i); + assert.sameValue(trySetProperty(o, "baz", 17, false), "swallowed", + "unexpected behavior for property-addition to object " + i); + + assert.sameValue(tryDefineProperty(o, "baz", 17), "throw", + "unexpected behavior for new property definition on object " + i); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/extensibility-02.js b/test/staging/sm/object/extensibility-02.js new file mode 100644 index 0000000000..2dbdb76b51 --- /dev/null +++ b/test/staging/sm/object/extensibility-02.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = '15.2.3.4-01.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 492849; +var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assert.sameValue(typeof Object.isExtensible, "function"); +assert.sameValue(Object.isExtensible.length, 1); + +var slowArray = [1, 2, 3]; +slowArray.slow = 5; +var objs = + [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/]; + +for (var i = 0, sz = objs.length; i < sz; i++) +{ + var o = objs[i]; + assert.sameValue(Object.isExtensible(o), true, "object " + i + " not extensible?"); + + var o2 = Object.preventExtensions(o); + assert.sameValue(o, o2); + + assert.sameValue(Object.isExtensible(o), false, "object " + i + " is extensible?"); +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/freeze-proxy.js b/test/staging/sm/object/freeze-proxy.js new file mode 100644 index 0000000000..5d2e5684ab --- /dev/null +++ b/test/staging/sm/object/freeze-proxy.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object = {}, handler = {}) { + var log = []; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + log.push(propertyKey); + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +// The order of operations is backwards when compared to ES6 draft rev 27 +// (2014 August 24), but see https://bugs.ecmascript.org/show_bug.cgi?id=3215 +// for an explanation on why the spec version is clearly wrong. + +var {proxy, log} = logProxy(); +Object.freeze(proxy); +assert.deepEqual(log, ["preventExtensions", "ownKeys"]); + +var {proxy, log} = logProxy(); +Object.freeze(Object.freeze(proxy)); +assert.deepEqual(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]); + diff --git a/test/staging/sm/object/freeze.js b/test/staging/sm/object/freeze.js new file mode 100644 index 0000000000..08f5f5675a --- /dev/null +++ b/test/staging/sm/object/freeze.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1076588; +var summary = "Object.freeze() should return its argument with no conversion when the argument is a primitive value"; + +print(BUGNUMBER + ": " + summary); +assert.sameValue(Object.freeze(), undefined); +assert.sameValue(Object.freeze(undefined), undefined); +assert.sameValue(Object.freeze(null), null); +assert.sameValue(Object.freeze(1), 1); +assert.sameValue(Object.freeze("foo"), "foo"); +assert.sameValue(Object.freeze(true), true); +if (typeof Symbol === "function") { + assert.sameValue(Object.freeze(Symbol.for("foo")), Symbol.for("foo")); +} + diff --git a/test/staging/sm/object/gOPD-vs-prototype-accessor.js b/test/staging/sm/object/gOPD-vs-prototype-accessor.js new file mode 100644 index 0000000000..78baeb7bc4 --- /dev/null +++ b/test/staging/sm/object/gOPD-vs-prototype-accessor.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(function testcase() { + var proto = {}; + Object.defineProperty(proto, "prop", {get: function () {return {};}, enumerable: true}); + var ConstructFun = function () {}; + ConstructFun.prototype = proto; + var child = new ConstructFun; + return Object.getOwnPropertyNames(child).indexOf('prop'); +}(), -1); + diff --git a/test/staging/sm/object/getOwnPropertyDescriptor.js b/test/staging/sm/object/getOwnPropertyDescriptor.js new file mode 100644 index 0000000000..1ae5f2937e --- /dev/null +++ b/test/staging/sm/object/getOwnPropertyDescriptor.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1079188; +var summary = "Coerce the argument passed to Object.getOwnPropertyDescriptor using ToObject"; +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(), TypeError); +assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(undefined), TypeError); +assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(null), TypeError); + +Object.getOwnPropertyDescriptor(1); +Object.getOwnPropertyDescriptor(true); +if (typeof Symbol === "function") { + Object.getOwnPropertyDescriptor(Symbol("foo")); +} + +assert.deepEqual(Object.getOwnPropertyDescriptor("foo", "length"), { + value: 3, + writable: false, + enumerable: false, + configurable: false +}); + +assert.deepEqual(Object.getOwnPropertyDescriptor("foo", 0), { + value: "f", + writable: false, + enumerable: true, + configurable: false +}); + diff --git a/test/staging/sm/object/getOwnPropertySymbols-proxy.js b/test/staging/sm/object/getOwnPropertySymbols-proxy.js new file mode 100644 index 0000000000..49c85c2000 --- /dev/null +++ b/test/staging/sm/object/getOwnPropertySymbols-proxy.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// getOwnPropertySymbols(proxy) calls the getOwnPropertyNames hook (only). + +var symbols = [Symbol(), Symbol("moon"), Symbol.for("sun"), Symbol.iterator]; +var hits = 0; + +function HandlerProxy() { + return new Proxy({}, { + get: function (t, key) { + if (key !== "ownKeys") + throw new Error("tried to access handler[" + String(key) + "]"); + hits++; + return t => symbols; + } + }); +} + +function OwnKeysProxy() { + return new Proxy({}, new HandlerProxy); +} + +assert.deepEqual(Object.getOwnPropertySymbols(new OwnKeysProxy), symbols); +assert.sameValue(hits, 1); + diff --git a/test/staging/sm/object/getOwnPropertySymbols.js b/test/staging/sm/object/getOwnPropertySymbols.js new file mode 100644 index 0000000000..bb40c08b67 --- /dev/null +++ b/test/staging/sm/object/getOwnPropertySymbols.js @@ -0,0 +1,54 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.deepEqual(Object.getOwnPropertySymbols({}), []); + +// String keys are ignored. +assert.sameValue(Object.getOwnPropertySymbols({a: 1, b: 2}).length, 0); +assert.sameValue(Object.getOwnPropertySymbols([0, 1, 2, 3]).length, 0); + +// Symbol keys are observed. +var iterable = {}; +Object.defineProperty(iterable, Symbol.iterator, { + value: () => [][Symbol.iterator]() +}); +assert.deepEqual(Object.getOwnPropertySymbols(iterable), [Symbol.iterator]); +assert.deepEqual(Object.getOwnPropertySymbols(new Proxy(iterable, {})), [Symbol.iterator]); + +// Test on an object with a thousand own properties. +var obj = {}; +for (var i = 0; i < 1000; i++) { + obj[Symbol.for("x" + i)] = 1; +} +assert.sameValue(Object.getOwnPropertyNames(obj).length, 0); +var symbols = Object.getOwnPropertySymbols(obj); +assert.sameValue(symbols.length, 1000); +assert.sameValue(symbols.indexOf(Symbol.for("x0")) !== -1, true); +assert.sameValue(symbols.indexOf(Symbol.for("x241")) !== -1, true); +assert.sameValue(symbols.indexOf(Symbol.for("x999")) !== -1, true); +assert.sameValue(Object.getOwnPropertySymbols(new Proxy(obj, {})).length, 1000); + +// The prototype chain is not consulted. +assert.sameValue(Object.getOwnPropertySymbols(Object.create(obj)).length, 0); +assert.sameValue(Object.getOwnPropertySymbols(new Proxy(Object.create(obj), {})).length, 0); + +// Primitives are coerced to objects; but there are never any symbol-keyed +// properties on the resulting wrapper objects. +assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(), TypeError); +assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(undefined), TypeError); +assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(null), TypeError); +for (var primitive of [true, 1, 3.14, "hello", Symbol()]) + assert.sameValue(Object.getOwnPropertySymbols(primitive).length, 0); + +assert.sameValue(Object.getOwnPropertySymbols.length, 1); + diff --git a/test/staging/sm/object/getPrototypeOf-array.js b/test/staging/sm/object/getPrototypeOf-array.js new file mode 100644 index 0000000000..f9b41f4096 --- /dev/null +++ b/test/staging/sm/object/getPrototypeOf-array.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'getPrototypeOf-array.js'; +var BUGNUMBER = 769041; +var summary = + "The [[Prototype]] of an object whose prototype chain contains an array " + + "isn't that array's [[Prototype]]"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +assert.sameValue(Array.isArray(arr), true); +var objWithArrPrototype = Object.create(arr); +assert.sameValue(!Array.isArray(objWithArrPrototype), true); +assert.sameValue(Object.getPrototypeOf(objWithArrPrototype), arr); +var objWithArrGrandPrototype = Object.create(objWithArrPrototype); +assert.sameValue(!Array.isArray(objWithArrGrandPrototype), true); +assert.sameValue(Object.getPrototypeOf(objWithArrGrandPrototype), objWithArrPrototype); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/object/getPrototypeOf.js b/test/staging/sm/object/getPrototypeOf.js new file mode 100644 index 0000000000..65f0cb91e3 --- /dev/null +++ b/test/staging/sm/object/getPrototypeOf.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1079090; +var summary = "Coerce the argument passed to Object.getPrototypeOf using ToObject"; +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => Object.getPrototypeOf(), TypeError); +assertThrowsInstanceOf(() => Object.getPrototypeOf(undefined), TypeError); +assertThrowsInstanceOf(() => Object.getPrototypeOf(null), TypeError); + +assert.sameValue(Object.getPrototypeOf(1), Number.prototype); +assert.sameValue(Object.getPrototypeOf(true), Boolean.prototype); +assert.sameValue(Object.getPrototypeOf("foo"), String.prototype); +if (typeof Symbol === "function") { + assert.sameValue(Object.getPrototypeOf(Symbol("foo")), Symbol.prototype); +} + diff --git a/test/staging/sm/object/getter-name.js b/test/staging/sm/object/getter-name.js new file mode 100644 index 0000000000..b421af6224 --- /dev/null +++ b/test/staging/sm/object/getter-name.js @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1180290; +var summary = 'Object accessors should have get prefix'; + +print(BUGNUMBER + ": " + summary); + +assert.sameValue(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").get.name, "get __proto__"); +assert.sameValue(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set.name, "set __proto__"); + diff --git a/test/staging/sm/object/hasOwn.js b/test/staging/sm/object/hasOwn.js new file mode 100644 index 0000000000..6e46a1f409 --- /dev/null +++ b/test/staging/sm/object/hasOwn.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Object.hasOwn({}, "any"), false); +assertThrowsInstanceOf(() => Object.hasOwn(null, "any"), TypeError); + +var x = { test: 'test value'} +var y = {} +var z = Object.create(x); + +assert.sameValue(Object.hasOwn(x, "test"), true); +assert.sameValue(Object.hasOwn(y, "test"), false); +assert.sameValue(Object.hasOwn(z, "test"), false); + diff --git a/test/staging/sm/object/isExtensible.js b/test/staging/sm/object/isExtensible.js new file mode 100644 index 0000000000..5e29987841 --- /dev/null +++ b/test/staging/sm/object/isExtensible.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1060873; +var summary = "Object.isExtensible() should return false when given primitive values as input"; + +print(BUGNUMBER + ": " + summary); +assert.sameValue(Object.isExtensible(), false); +assert.sameValue(Object.isExtensible(undefined), false); +assert.sameValue(Object.isExtensible(null), false); +assert.sameValue(Object.isExtensible(1), false); +assert.sameValue(Object.isExtensible("foo"), false); +assert.sameValue(Object.isExtensible(true), false); +if (typeof Symbol === "function") { + assert.sameValue(Object.isExtensible(Symbol()), false); +} + diff --git a/test/staging/sm/object/isFrozen.js b/test/staging/sm/object/isFrozen.js new file mode 100644 index 0000000000..6e50b768e6 --- /dev/null +++ b/test/staging/sm/object/isFrozen.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1071464; +var summary = "Object.isFrozen() should return true when given primitive values as input"; + +print(BUGNUMBER + ": " + summary); +assert.sameValue(Object.isFrozen(), true); +assert.sameValue(Object.isFrozen(undefined), true); +assert.sameValue(Object.isFrozen(null), true); +assert.sameValue(Object.isFrozen(1), true); +assert.sameValue(Object.isFrozen("foo"), true); +assert.sameValue(Object.isFrozen(true), true); +if (typeof Symbol === "function") { + assert.sameValue(Object.isFrozen(Symbol()), true); +} + diff --git a/test/staging/sm/object/isPrototypeOf.js b/test/staging/sm/object/isPrototypeOf.js new file mode 100644 index 0000000000..2346e86b2d --- /dev/null +++ b/test/staging/sm/object/isPrototypeOf.js @@ -0,0 +1,91 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'isPrototypeOf.js'; +var BUGNUMBER = 619283; +var summary = "Object.prototype.isPrototypeOf"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(fun) +{ + try + { + var r = fun(); + throw new Error("didn't throw TypeError, returned " + r); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "didn't throw TypeError, got: " + e); + } +} + +var isPrototypeOf = Object.prototype.isPrototypeOf; + +/* + * 1. If V is not an Object, return false. + */ +assert.sameValue(isPrototypeOf(), false); +assert.sameValue(isPrototypeOf(1), false); +assert.sameValue(isPrototypeOf(Number.MAX_VALUE), false); +assert.sameValue(isPrototypeOf(NaN), false); +assert.sameValue(isPrototypeOf(""), false); +assert.sameValue(isPrototypeOf("sesquicentennial"), false); +assert.sameValue(isPrototypeOf(true), false); +assert.sameValue(isPrototypeOf(false), false); +assert.sameValue(isPrototypeOf(0.72), false); +assert.sameValue(isPrototypeOf(undefined), false); +assert.sameValue(isPrototypeOf(null), false); + + +/* + * 2. Let O be the result of calling ToObject passing the this value as the + * argument. + */ +var protoGlobal = Object.create(this); +expectThrowTypeError(function() { isPrototypeOf.call(null, {}); }); +expectThrowTypeError(function() { isPrototypeOf.call(undefined, {}); }); +expectThrowTypeError(function() { isPrototypeOf({}); }); +expectThrowTypeError(function() { isPrototypeOf.call(null, protoGlobal); }); +expectThrowTypeError(function() { isPrototypeOf.call(undefined, protoGlobal); }); +expectThrowTypeError(function() { isPrototypeOf(protoGlobal); }); + + +/* + * 3. Repeat + */ + +/* + * 3a. Let V be the value of the [[Prototype]] internal property of V. + * 3b. If V is null, return false. + */ +assert.sameValue(Object.prototype.isPrototypeOf(Object.prototype), false); +assert.sameValue(String.prototype.isPrototypeOf({}), false); +assert.sameValue(Object.prototype.isPrototypeOf(Object.create(null)), false); + +/* 3c. If O and V refer to the same object, return true. */ +assert.sameValue(Object.prototype.isPrototypeOf({}), true); +assert.sameValue(this.isPrototypeOf(protoGlobal), true); +assert.sameValue(Object.prototype.isPrototypeOf({}), true); +assert.sameValue(Object.prototype.isPrototypeOf(new Number(17)), true); +assert.sameValue(Object.prototype.isPrototypeOf(function(){}), true); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/isSealed.js b/test/staging/sm/object/isSealed.js new file mode 100644 index 0000000000..e310e7e7bd --- /dev/null +++ b/test/staging/sm/object/isSealed.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1062860; +var summary = "Object.isSealed() should return true when given primitive values as input"; + +print(BUGNUMBER + ": " + summary); +assert.sameValue(Object.isSealed(), true); +assert.sameValue(Object.isSealed(undefined), true); +assert.sameValue(Object.isSealed(null), true); +assert.sameValue(Object.isSealed(1), true); +assert.sameValue(Object.isSealed("foo"), true); +assert.sameValue(Object.isSealed(true), true); +if (typeof Symbol === "function") { + assert.sameValue(Object.isSealed(Symbol()), true); +} + diff --git a/test/staging/sm/object/keys.js b/test/staging/sm/object/keys.js new file mode 100644 index 0000000000..3e7a6c8e63 --- /dev/null +++ b/test/staging/sm/object/keys.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1038545; +var summary = "Coerce the argument passed to Object.keys using ToObject"; +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => Object.keys(), TypeError); +assertThrowsInstanceOf(() => Object.keys(undefined), TypeError); +assertThrowsInstanceOf(() => Object.keys(null), TypeError); + +assert.deepEqual(Object.keys(1), []); +assert.deepEqual(Object.keys(true), []); +if (typeof Symbol === "function") { + assert.deepEqual(Object.keys(Symbol("foo")), []); +} + +assert.deepEqual(Object.keys("foo"), ["0", "1", "2"]); + diff --git a/test/staging/sm/object/method-non-constructor.js b/test/staging/sm/object/method-non-constructor.js new file mode 100644 index 0000000000..4132ed7a18 --- /dev/null +++ b/test/staging/sm/object/method-non-constructor.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var obj = { method() { } }; +assertThrowsInstanceOf(() => { + new obj.method; +}, TypeError); + +obj = { constructor() { } }; +assertThrowsInstanceOf(() => { + new obj.constructor; +}, TypeError); + diff --git a/test/staging/sm/object/mutation-prevention-methods.js b/test/staging/sm/object/mutation-prevention-methods.js new file mode 100644 index 0000000000..b0397ad012 --- /dev/null +++ b/test/staging/sm/object/mutation-prevention-methods.js @@ -0,0 +1,128 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'mutation-prevention-methods.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 492849; +var summary = 'Object.is{Sealed,Frozen}, Object.{seal,freeze}'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Empty object + +var o1 = {}; + +assert.sameValue(Object.isExtensible(o1), true); +assert.sameValue(Object.isSealed(o1), false); +assert.sameValue(Object.isFrozen(o1), false); + +Object.preventExtensions(o1); + +// An non-extensible empty object has no properties, so it is vacuously sealed +// and frozen. +assert.sameValue(Object.isExtensible(o1), false); +assert.sameValue(Object.isSealed(o1), true); +assert.sameValue(Object.isFrozen(o1), true); + + +// Object with a data property + +var o2 = { 1: 2 }; + +assert.sameValue(Object.isExtensible(o2), true); +assert.sameValue(Object.isSealed(o2), false); +assert.sameValue(Object.isFrozen(o2), false); + +Object.preventExtensions(o2); + +assert.sameValue(Object.isExtensible(o2), false); +assert.sameValue(Object.isSealed(o2), false); +assert.sameValue(Object.isFrozen(o2), false); + +Object.seal(o2); + +assert.sameValue(Object.isExtensible(o2), false); +assert.sameValue(Object.isSealed(o2), true); +assert.sameValue(Object.isFrozen(o2), false); + +assert.sameValue(o2[1], 2); + +var desc; + +desc = Object.getOwnPropertyDescriptor(o2, "1"); +assert.sameValue(typeof desc, "object"); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.value, 2); +assert.sameValue(desc.writable, true); + +o2[1] = 17; + +assert.sameValue(o2[1], 17); + +desc = Object.getOwnPropertyDescriptor(o2, "1"); +assert.sameValue(typeof desc, "object"); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.value, 17); +assert.sameValue(desc.writable, true); + +Object.freeze(o2); + +assert.sameValue(o2[1], 17); + +desc = Object.getOwnPropertyDescriptor(o2, "1"); +assert.sameValue(typeof desc, "object"); +assert.sameValue(desc.enumerable, true); +assert.sameValue(desc.configurable, false); +assert.sameValue(desc.value, 17); +assert.sameValue(desc.writable, false); + + +// Object with an accessor property + +var o3 = { get foo() { return 17; } }; + +assert.sameValue(Object.isExtensible(o3), true); +assert.sameValue(Object.isSealed(o3), false); +assert.sameValue(Object.isFrozen(o3), false); + +Object.preventExtensions(o3); + +assert.sameValue(Object.isExtensible(o3), false); +assert.sameValue(Object.isSealed(o3), false); +assert.sameValue(Object.isFrozen(o3), false); + +Object.seal(o3); + +// An accessor property in a sealed object is unchanged if that object is +// frozen, so a sealed object containing only accessor properties is also +// vacuously frozen. +assert.sameValue(Object.isExtensible(o3), false); +assert.sameValue(Object.isSealed(o3), true); +assert.sameValue(Object.isFrozen(o3), true); + +Object.freeze(o3); + +assert.sameValue(Object.isExtensible(o3), false); +assert.sameValue(Object.isSealed(o3), true); +assert.sameValue(Object.isFrozen(o3), true); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/object-create-with-primitive-second-arg.js b/test/staging/sm/object/object-create-with-primitive-second-arg.js new file mode 100644 index 0000000000..5c0836a9f7 --- /dev/null +++ b/test/staging/sm/object/object-create-with-primitive-second-arg.js @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +[1, "", true, Symbol(), undefined].forEach(props => { + assert.sameValue(Object.getPrototypeOf(Object.create(null, props)), null); +}); + +assertThrowsInstanceOf(() => Object.create(null, null), TypeError); + diff --git a/test/staging/sm/object/object-toString-01.js b/test/staging/sm/object/object-toString-01.js new file mode 100644 index 0000000000..f1143e8532 --- /dev/null +++ b/test/staging/sm/object/object-toString-01.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'object-toString-01.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 575522; +var summary = '({}).toString.call(null) == "[object Null]", ' + + '({}).toString.call(undefined) == "[object Undefined]", '; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var toString = Object.prototype.toString; + +assert.sameValue(toString.call(null), "[object Null]"); +assert.sameValue(toString.call(undefined), "[object Undefined]"); + +assert.sameValue(toString.call(true), "[object Boolean]"); +assert.sameValue(toString.call(false), "[object Boolean]"); + +assert.sameValue(toString.call(0), "[object Number]"); +assert.sameValue(toString.call(-0), "[object Number]"); +assert.sameValue(toString.call(1), "[object Number]"); +assert.sameValue(toString.call(-1), "[object Number]"); +assert.sameValue(toString.call(NaN), "[object Number]"); +assert.sameValue(toString.call(Infinity), "[object Number]"); +assert.sameValue(toString.call(-Infinity), "[object Number]"); + +assert.sameValue(toString.call("foopy"), "[object String]"); + +assert.sameValue(toString.call({}), "[object Object]"); + + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/preventExtensions-idempotent.js b/test/staging/sm/object/preventExtensions-idempotent.js new file mode 100644 index 0000000000..3ac4848ee6 --- /dev/null +++ b/test/staging/sm/object/preventExtensions-idempotent.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'preventExtensions-idempotent.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 599459; +var summary = 'Object.preventExtensions should be idempotent'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = {}; +assert.sameValue(Object.preventExtensions(obj), obj); +assert.sameValue(Object.isExtensible(obj), false); +assert.sameValue(Object.preventExtensions(obj), obj); +assert.sameValue(Object.isExtensible(obj), false); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/preventExtensions-proxy.js b/test/staging/sm/object/preventExtensions-proxy.js new file mode 100644 index 0000000000..10a42f5679 --- /dev/null +++ b/test/staging/sm/object/preventExtensions-proxy.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object = {}, handler = {}) { + var log = []; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + log.push(propertyKey); + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +var {proxy, log} = logProxy(); +Object.preventExtensions(proxy); +assert.deepEqual(log, ["preventExtensions"]); + +var {proxy, log} = logProxy(); +Object.preventExtensions(Object.preventExtensions(proxy)); +assert.deepEqual(log, ["preventExtensions", "preventExtensions"]); + diff --git a/test/staging/sm/object/preventExtensions.js b/test/staging/sm/object/preventExtensions.js new file mode 100644 index 0000000000..e261c68df0 --- /dev/null +++ b/test/staging/sm/object/preventExtensions.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1073446; +var summary = "Object.preventExtensions() should return its argument with no conversion when the argument is a primitive value"; + +print(BUGNUMBER + ": " + summary); +assert.sameValue(Object.preventExtensions(), undefined); +assert.sameValue(Object.preventExtensions(undefined), undefined); +assert.sameValue(Object.preventExtensions(null), null); +assert.sameValue(Object.preventExtensions(1), 1); +assert.sameValue(Object.preventExtensions("foo"), "foo"); +assert.sameValue(Object.preventExtensions(true), true); +if (typeof Symbol === "function") { + assert.sameValue(Object.preventExtensions(Symbol.for("foo")), Symbol.for("foo")); +} + diff --git a/test/staging/sm/object/property-descriptor-order.js b/test/staging/sm/object/property-descriptor-order.js new file mode 100644 index 0000000000..dc0a1f7322 --- /dev/null +++ b/test/staging/sm/object/property-descriptor-order.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({foo: 0}, "foo")); +assert.deepEqual(names, ["value", "writable", "enumerable", "configurable"]); + +names = Object.getOwnPropertyNames(Object.getOwnPropertyDescriptor({get foo(){}}, "foo")); +assert.deepEqual(names, ["get", "set", "enumerable", "configurable"]); + +var proxy = new Proxy({}, { + defineProperty(target, key, desc) { + var names = Object.getOwnPropertyNames(desc); + assert.deepEqual(names, ["set", "configurable"]); + return true; + } +}); + +Object.defineProperty(proxy, "foo", {configurable: true, set: function() {}}); + diff --git a/test/staging/sm/object/propertyIsEnumerable-proxy.js b/test/staging/sm/object/propertyIsEnumerable-proxy.js new file mode 100644 index 0000000000..c5b2ae3ee6 --- /dev/null +++ b/test/staging/sm/object/propertyIsEnumerable-proxy.js @@ -0,0 +1,69 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object) { + var log = []; + var handler = { + getOwnPropertyDescriptor(target, propertyKey) { + log.push(propertyKey); + return Object.getOwnPropertyDescriptor(target, propertyKey); + } + }; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + if (!(propertyKey in target)) { + throw new Error(`Unexpected call to trap: "${propertyKey}"`); + } + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +var properties = ["string-property"]; +if (typeof Symbol === 'function') + properties.push(Symbol("symbol-property")); + +for (var property of properties) { + // Test 1: property is not present on object + var {proxy, log} = logProxy({}); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assert.sameValue(result, false); + assert.deepEqual(log, [property]); + + // Test 2: property is present on object and enumerable + var {proxy, log} = logProxy({[property]: 0}); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assert.sameValue(result, true); + assert.deepEqual(log, [property]); + + // Test 3: property is present on object, but not enumerable + var {proxy, log} = logProxy(Object.defineProperty({[property]: 0}, property, {enumerable: false})); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assert.sameValue(result, false); + assert.deepEqual(log, [property]); + + // Test 4: property is present on prototype object + var {proxy, log} = logProxy(Object.create({[property]: 0})); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assert.sameValue(result, false); + assert.deepEqual(log, [property]); + + // Test 5: property is present on prototype object, prototype is proxy object + var {proxy, log} = logProxy({[property]: 0}); + var result = Object.prototype.propertyIsEnumerable.call(Object.create(proxy), property); + assert.sameValue(result, false); + assert.deepEqual(log, []); +} + diff --git a/test/staging/sm/object/propertyIsEnumerable.js b/test/staging/sm/object/propertyIsEnumerable.js new file mode 100644 index 0000000000..2ff4490bf5 --- /dev/null +++ b/test/staging/sm/object/propertyIsEnumerable.js @@ -0,0 +1,204 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'propertyIsEnumerable.js'; +var BUGNUMBER = 619283; +var summary = "Object.prototype.propertyIsEnumerable"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowError(errorCtor, fun) +{ + try + { + var r = fun(); + throw "didn't throw TypeError, returned " + r; + } + catch (e) + { + assert.sameValue(e instanceof errorCtor, true, + "didn't throw " + errorCtor.prototype.name + ", got: " + e); + } +} + +function expectThrowTypeError(fun) +{ + expectThrowError(TypeError, fun); +} + +function withToString(fun) +{ + return { toString: fun }; +} + +function withValueOf(fun) +{ + return { toString: null, valueOf: fun }; +} + +var propertyIsEnumerable = Object.prototype.propertyIsEnumerable; + +/* + * 1. Let P be ToString(V). + */ +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable(withToString(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { fahslkjdfhlkjdsl; })); +}); + +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable(withValueOf(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { fahslkjdfhlkjdsl; })); +}); + +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable(withToString(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { eval("}"); })); +}); + +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable(withValueOf(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { eval("}"); })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withToString(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { [].length = -1; })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withValueOf(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = -1; })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withToString(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { [].length = 0.7; })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withValueOf(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = 0.7; })); +}); + +/* + * 2. Let O be the result of calling ToObject passing the this value as the + * argument. + */ +expectThrowTypeError(function() { propertyIsEnumerable("s"); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, "s"); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, "s"); }); +expectThrowTypeError(function() { propertyIsEnumerable(true); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, true); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, true); }); +expectThrowTypeError(function() { propertyIsEnumerable(NaN); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, NaN); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, NaN); }); + +expectThrowTypeError(function() { propertyIsEnumerable({}); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, {}); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, {}); }); + +/* + * 3. Let desc be the result of calling the [[GetOwnProperty]] internal method + * of O passing P as the argument. + * 4. If desc is undefined, return false. + */ +assert.sameValue(propertyIsEnumerable.call({}, "valueOf"), false); +assert.sameValue(propertyIsEnumerable.call({}, "toString"), false); +assert.sameValue(propertyIsEnumerable.call("s", 1), false); +assert.sameValue(propertyIsEnumerable.call({}, "dsfiodjfs"), false); +assert.sameValue(propertyIsEnumerable.call(true, "toString"), false); +assert.sameValue(propertyIsEnumerable.call({}, "__proto__"), false); + +assert.sameValue(propertyIsEnumerable.call(Object, "getOwnPropertyDescriptor"), false); +assert.sameValue(propertyIsEnumerable.call(this, "expectThrowTypeError"), true); +assert.sameValue(propertyIsEnumerable.call("s", "length"), false); +assert.sameValue(propertyIsEnumerable.call("s", 0), true); +assert.sameValue(propertyIsEnumerable.call(Number, "MAX_VALUE"), false); +assert.sameValue(propertyIsEnumerable.call({ x: 9 }, "x"), true); +assert.sameValue(propertyIsEnumerable.call(function() { }, "prototype"), false); +assert.sameValue(propertyIsEnumerable.call(function() { }, "length"), false); +assert.sameValue(propertyIsEnumerable.call(function() { "use strict"; }, "caller"), false); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/proto-property-change-writability-set.js b/test/staging/sm/object/proto-property-change-writability-set.js new file mode 100644 index 0000000000..7dfe9a92e8 --- /dev/null +++ b/test/staging/sm/object/proto-property-change-writability-set.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 713944; +var summary = + "Don't assert anything about a shape from the property cache until it's " + + "known the cache entry matches"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var accDesc = { set: function() {} }; +var dataDesc = { value: 3 }; + +function f() +{ + propertyIsEnumerable = {}; +} +function g() +{ + propertyIsEnumerable = {}; +} + +Object.defineProperty(Object.prototype, "propertyIsEnumerable", accDesc); +f(); +Object.defineProperty(Object.prototype, "propertyIsEnumerable", dataDesc); +assert.sameValue(propertyIsEnumerable, 3); +f(); +assert.sameValue(propertyIsEnumerable, 3); +g(); +assert.sameValue(propertyIsEnumerable, 3); + + + +var a = { p1: 1, p2: 2 }; +var b = Object.create(a); +Object.defineProperty(a, "p1", {set: function () {}}); +for (var i = 0; i < 2; i++) +{ + b.p1 = {}; + Object.defineProperty(a, "p1", {value: 3}); +} +assert.sameValue(b.p1, 3); +assert.sameValue(a.p1, 3); + diff --git a/test/staging/sm/object/regress-459405.js b/test/staging/sm/object/regress-459405.js new file mode 100644 index 0000000000..ea4989eb63 --- /dev/null +++ b/test/staging/sm/object/regress-459405.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 459405; +var summary = 'Math is not ReadOnly'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'foo'; + + try + { + var Math = 'foo'; + actual = Math; + } + catch(ex) + { + actual = ex + ''; + } + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/object/seal-proxy.js b/test/staging/sm/object/seal-proxy.js new file mode 100644 index 0000000000..3673393590 --- /dev/null +++ b/test/staging/sm/object/seal-proxy.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object = {}, handler = {}) { + var log = []; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + log.push(propertyKey); + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +// The order of operations is backwards when compared to ES6 draft rev 27 +// (2014 August 24), but see https://bugs.ecmascript.org/show_bug.cgi?id=3215 +// for an explanation on why the spec version is clearly wrong. + +var {proxy, log} = logProxy(); +Object.seal(proxy); +assert.deepEqual(log, ["preventExtensions", "ownKeys"]); + +var {proxy, log} = logProxy(); +Object.seal(Object.seal(proxy)); +assert.deepEqual(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]); + diff --git a/test/staging/sm/object/seal.js b/test/staging/sm/object/seal.js new file mode 100644 index 0000000000..3f994612de --- /dev/null +++ b/test/staging/sm/object/seal.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1075294; +var summary = "Object.seal() should return its argument with no conversion when the argument is a primitive value"; + +print(BUGNUMBER + ": " + summary); +assert.sameValue(Object.seal(), undefined); +assert.sameValue(Object.seal(undefined), undefined); +assert.sameValue(Object.seal(null), null); +assert.sameValue(Object.seal(1), 1); +assert.sameValue(Object.seal("foo"), "foo"); +assert.sameValue(Object.seal(true), true); +if (typeof Symbol === "function") { + assert.sameValue(Object.seal(Symbol.for("foo")), Symbol.for("foo")); +} + diff --git a/test/staging/sm/object/setPrototypeOf-cross-realm-cycle.js b/test/staging/sm/object/setPrototypeOf-cross-realm-cycle.js new file mode 100644 index 0000000000..28c539be83 --- /dev/null +++ b/test/staging/sm/object/setPrototypeOf-cross-realm-cycle.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// The cycle check in 9.1.2 [[SetPrototypeOf]] prevents cross-realm cycles +// involving only ordinary objects. + +var gw = createNewGlobal(); + +var obj = {}; +var w = gw.Object.create(obj); +assertThrowsInstanceOf(() => Object.setPrototypeOf(obj, w), TypeError); +assertThrowsInstanceOf(() => gw.Object.setPrototypeOf(obj, w), gw.TypeError); + diff --git a/test/staging/sm/object/setPrototypeOf-same-value.js b/test/staging/sm/object/setPrototypeOf-same-value.js new file mode 100644 index 0000000000..c89f9db99d --- /dev/null +++ b/test/staging/sm/object/setPrototypeOf-same-value.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Setting a "new" prototype to the current [[Prototype]] value should never fail + +var x = {}, t = Object.create(x); +Object.preventExtensions(t); +// Should not fail, because it is the same [[Prototype]] value +Object.setPrototypeOf(t, x); + +// Object.prototype's [[Prototype]] is immutable, make sure we can still set null +Object.setPrototypeOf(Object.prototype, null); + diff --git a/test/staging/sm/object/toLocaleString-01.js b/test/staging/sm/object/toLocaleString-01.js new file mode 100644 index 0000000000..68475547db --- /dev/null +++ b/test/staging/sm/object/toLocaleString-01.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +flags: +- onlyStrict +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; + +Object.defineProperty(String.prototype, "toString", { + get() { + assert.sameValue(typeof this, "string"); + + return function() { return typeof this; }; + } +}) +assert.sameValue(Object.prototype.toLocaleString.call("test"), "string"); + diff --git a/test/staging/sm/object/toLocaleString.js b/test/staging/sm/object/toLocaleString.js new file mode 100644 index 0000000000..924f3bf2c6 --- /dev/null +++ b/test/staging/sm/object/toLocaleString.js @@ -0,0 +1,107 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'toLocaleString.js'; +var BUGNUMBER = 653789; +var summary = "Object.prototype.toLocaleString"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(fun) +{ + try + { + var r = fun(); + throw "didn't throw TypeError, returned " + r; + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "didn't throw TypeError, got: " + e); + } +} + +var toLocaleString = Object.prototype.toLocaleString; + +/* + * 1. Let O be the result of calling ToObject passing the this value as the + * argument. + */ +expectThrowTypeError(function() { toLocaleString.call(null); }); +expectThrowTypeError(function() { toLocaleString.call(undefined); }); +expectThrowTypeError(function() { toLocaleString.apply(null); }); +expectThrowTypeError(function() { toLocaleString.apply(undefined); }); + + +/* + * 2. Let toString be the result of calling the [[Get]] internal method of O + * passing "toString" as the argument. + */ +try +{ + toLocaleString.call({ get toString() { throw 17; } }); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e, 17); +} + + +/* 3. If IsCallable(toString) is false, throw a TypeError exception. */ +expectThrowTypeError(function() { toLocaleString.call({ toString: 12 }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: 0.3423423452352e9 }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: undefined }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: false }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: [] }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: {} }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: new String }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: new Number(7.7) }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: new Boolean(true) }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: JSON }); }); + +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 12 }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 0.3423423452352e9 }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: undefined }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: false }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: [] }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: {} }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new String }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Number(7.7) }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Boolean(true) }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: JSON }); }); + + +/* + * 4. Return the result of calling the [[Call]] internal method of toString + * passing O as the this value and no arguments. + */ +assert.sameValue(toLocaleString.call({ get toString() { return function() { return "foo"; } } }), + "foo"); + +var obj = { toString: function() { assert.sameValue(this, obj); assert.sameValue(arguments.length, 0); return 5; } }; +assert.sameValue(toLocaleString.call(obj), 5); + +assert.sameValue(toLocaleString.call({ toString: function() { return obj; } }), obj); + +assert.sameValue(toLocaleString.call({ toString: function() { return obj; }, + valueOf: function() { return "abc"; } }), + obj); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/toPrimitive-callers.js b/test/staging/sm/object/toPrimitive-callers.js new file mode 100644 index 0000000000..77520b581a --- /dev/null +++ b/test/staging/sm/object/toPrimitive-callers.js @@ -0,0 +1,67 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Check all the algorithms that call ToPrimitive. Confirm that they're passing +// the correct hint, per spec. + +var STRING = "xyzzy"; +var NUMBER = 42; + +function assertCallsToPrimitive(f, expectedHint, expectedResult) { + var hint = undefined; + var testObj = { + [Symbol.toPrimitive](h) { + assert.sameValue(hint, undefined); + hint = h; + return h === "number" ? NUMBER : STRING; + } + }; + var result = f(testObj); + assert.sameValue(hint, expectedHint, String(f)); + assert.sameValue(result, expectedResult, String(f)); +} + +// ToNumber +assertCallsToPrimitive(Number, "number", NUMBER); + +// ToString +assertCallsToPrimitive(String, "string", STRING); + +// ToPropertyKey +var obj = {[STRING]: "pass"}; +assertCallsToPrimitive(key => obj[key], "string", "pass"); + +// Abstract Relational Comparison +assertCallsToPrimitive(x => x >= 42, "number", true); +assertCallsToPrimitive(x => x > "42", "number", false); + +// Abstract Equality Comparison +assertCallsToPrimitive(x => x != STRING, "default", false); +assertCallsToPrimitive(x => STRING == x, "default", true); +assertCallsToPrimitive(x => x == NUMBER, "default", false); +assertCallsToPrimitive(x => NUMBER != x, "default", true); + +// Addition +assertCallsToPrimitive(x => 1 + x, "default", "1" + STRING); +assertCallsToPrimitive(x => "" + x, "default", STRING); + +// Date constructor +assertCallsToPrimitive(x => (new Date(x)).valueOf(), "default", Number(STRING)); + +// Date.prototype.toJSON +var expected = "a suffusion of yellow"; +function testJSON(x) { + x.toJSON = Date.prototype.toJSON; + x.toISOString = function () { return expected; }; + return JSON.stringify(x); +} +assertCallsToPrimitive(testJSON, "number", JSON.stringify(expected)); + diff --git a/test/staging/sm/object/toPrimitive.js b/test/staging/sm/object/toPrimitive.js new file mode 100644 index 0000000000..a100bc3093 --- /dev/null +++ b/test/staging/sm/object/toPrimitive.js @@ -0,0 +1,111 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [deepEqual.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// ES6 7.1.1 ToPrimitive(input [, PreferredType]) specifies a new extension +// point in the language. Objects can override the behavior of ToPrimitive +// somewhat by supporting the method obj[@@toPrimitive](hint). +// +// (Rationale: ES5 had a [[DefaultValue]] internal method, overridden only by +// Date objects. The change in ES6 is to make [[DefaultValue]] a plain old +// method. This allowed ES6 to eliminate the [[DefaultValue]] internal method, +// simplifying the meta-object protocol and thus proxies.) + +// obj[Symbol.toPrimitive]() is called whenever the ToPrimitive algorithm is invoked. +var expectedThis, expectedHint; +var obj = { + [Symbol.toPrimitive](hint, ...rest) { + assert.sameValue(this, expectedThis); + assert.sameValue(hint, expectedHint); + assert.sameValue(rest.length, 0); + return 2015; + } +}; +expectedThis = obj; +expectedHint = "string"; +assert.sameValue(String(obj), "2015"); +expectedHint = "number"; +assert.sameValue(Number(obj), 2015); + +// It is called even through proxies. +var proxy = new Proxy(obj, {}); +expectedThis = proxy; +expectedHint = "default"; +assert.sameValue("ES" + proxy, "ES2015"); + +// It is called even through additional proxies and the prototype chain. +proxy = new Proxy(Object.create(proxy), {}); +expectedThis = proxy; +expectedHint = "default"; +assert.sameValue("ES" + (proxy + 1), "ES2016"); + +// It is not called if the operand is already a primitive. +var ok = true; +for (var constructor of [Boolean, Number, String, Symbol]) { + constructor.prototype[Symbol.toPrimitive] = function () { + ok = false; + throw "FAIL"; + }; +} +assert.sameValue(Number(true), 1); +assert.sameValue(Number(77.7), 77.7); +assert.sameValue(Number("123"), 123); +assertThrowsInstanceOf(() => Number(Symbol.iterator), TypeError); +assert.sameValue(String(true), "true"); +assert.sameValue(String(77.7), "77.7"); +assert.sameValue(String("123"), "123"); +assert.sameValue(String(Symbol.iterator), "Symbol(Symbol.iterator)"); +assert.sameValue(ok, true); + +// Converting a primitive symbol to another primitive type throws even if you +// delete the @@toPrimitive method from Symbol.prototype. +delete Symbol.prototype[Symbol.toPrimitive]; +var sym = Symbol("ok"); +assertThrowsInstanceOf(() => `${sym}`, TypeError); +assertThrowsInstanceOf(() => Number(sym), TypeError); +assertThrowsInstanceOf(() => "" + sym, TypeError); + +// However, having deleted that method, converting a Symbol wrapper object does +// work: it calls Symbol.prototype.toString(). +obj = Object(sym); +assert.sameValue(String(obj), "Symbol(ok)"); +assert.sameValue(`${obj}`, "Symbol(ok)"); + +// Deleting valueOf as well makes numeric conversion also call toString(). +delete Symbol.prototype.valueOf; +delete Object.prototype.valueOf; +assert.sameValue(Number(obj), NaN); +Symbol.prototype.toString = function () { return "2060"; }; +assert.sameValue(Number(obj), 2060); + +// Deleting Date.prototype[Symbol.toPrimitive] changes the result of addition +// involving Date objects. +var d = new Date; +assert.sameValue(0 + d, 0 + d.toString()); +delete Date.prototype[Symbol.toPrimitive]; +assert.sameValue(0 + d, 0 + d.valueOf()); + +// If @@toPrimitive, .toString, and .valueOf are all missing, we get a +// particular sequence of property accesses, followed by a TypeError exception. +var log = []; +function doGet(target, propertyName, receiver) { + log.push(propertyName); +} +var handler = new Proxy({}, { + get(target, trapName, receiver) { + if (trapName !== "get") + throw `FAIL: system tried to access handler method: ${String(trapName)}`; + return doGet; + } +}); +proxy = new Proxy(Object.create(null), handler); +assertThrowsInstanceOf(() => proxy == 0, TypeError); +assert.deepEqual(log, [Symbol.toPrimitive, "valueOf", "toString"]); + diff --git a/test/staging/sm/object/vacuous-accessor-unqualified-name.js b/test/staging/sm/object/vacuous-accessor-unqualified-name.js new file mode 100644 index 0000000000..30eb00eec1 --- /dev/null +++ b/test/staging/sm/object/vacuous-accessor-unqualified-name.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'vacuous-accessor-unqualified-name.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 560216; +var summary = + "Using a name referring to a { get: undefined, set: undefined } descriptor " + + "shouldn't assert"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +Object.defineProperty(this, "x", { set: undefined, configurable: true }); +x; + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/object/values-entries-indexed.js b/test/staging/sm/object/values-entries-indexed.js new file mode 100644 index 0000000000..0f619dfb36 --- /dev/null +++ b/test/staging/sm/object/values-entries-indexed.js @@ -0,0 +1,80 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertSameEntries(actual, expected) { + assert.sameValue(actual.length, expected.length); + for (let i = 0; i < expected.length; ++i) + assert.compareArray(actual[i], expected[i]); +} + +// Test Object.keys/values/entries on objects with indexed properties. + +// Empty dense elements, test with array and plain object. +{ + let array = []; + assert.compareArray(Object.keys(array), []); + assert.compareArray(Object.values(array), []); + assertSameEntries(Object.entries(array), []); + + let object = {}; + assert.compareArray(Object.keys(object), []); + assert.compareArray(Object.values(object), []); + assertSameEntries(Object.entries(object), []); +} + +// Dense elements only, test with array and plain object. +{ + let array = [1, 2, 3]; + assert.compareArray(Object.keys(array), ["0", "1", "2"]); + assert.compareArray(Object.values(array), [1, 2, 3]); + assertSameEntries(Object.entries(array), [["0", 1], ["1", 2], ["2", 3]]); + + let object = {0: 4, 1: 5, 2: 6}; + assert.compareArray(Object.keys(object), ["0", "1", "2"]); + assert.compareArray(Object.values(object), [4, 5, 6]); + assertSameEntries(Object.entries(object), [["0", 4], ["1", 5], ["2", 6]]); +} + +// Extra indexed properties only, test with array and plain object. +{ + let array = []; + Object.defineProperty(array, 0, {configurable: true, enumerable: true, value: 123}); + + assert.compareArray(Object.keys(array), ["0"]); + assert.compareArray(Object.values(array), [123]); + assertSameEntries(Object.entries(array), [["0", 123]]); + + let object = []; + Object.defineProperty(object, 0, {configurable: true, enumerable: true, value: 123}); + + assert.compareArray(Object.keys(object), ["0"]); + assert.compareArray(Object.values(object), [123]); + assertSameEntries(Object.entries(object), [["0", 123]]); +} + +// Dense and extra indexed properties, test with array and plain object. +{ + let array = [1, 2, 3]; + Object.defineProperty(array, 0, {writable: false}); + + assert.compareArray(Object.keys(array), ["0", "1", "2"]); + assert.compareArray(Object.values(array), [1, 2, 3]); + assertSameEntries(Object.entries(array), [["0", 1], ["1", 2], ["2", 3]]); + + let object = {0: 4, 1: 5, 2: 6}; + Object.defineProperty(object, 0, {writable: false}); + + assert.compareArray(Object.keys(object), ["0", "1", "2"]); + assert.compareArray(Object.values(object), [4, 5, 6]); + assertSameEntries(Object.entries(object), [["0", 4], ["1", 5], ["2", 6]]); +} + + diff --git a/test/staging/sm/object/values-entries-lazy-props.js b/test/staging/sm/object/values-entries-lazy-props.js new file mode 100644 index 0000000000..11a4ad37b4 --- /dev/null +++ b/test/staging/sm/object/values-entries-lazy-props.js @@ -0,0 +1,102 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Return new objects for each test case. +function makeTestCases() { + // Call the resolve hook for arguments/string objects. + const resolveIndex = object => 0 in object; + + // Calls the resolve hook for functions. + const resolveFunction = object => "length" in object; + + const expected = array => ({ + keys: Object.keys(array), + values: Object.values(array), + entries: Object.entries(array), + }); + + return [ + // Mapped arguments objects. + { + object: function(){ return arguments; }(), + resolve: resolveIndex, + ...expected([]), + }, + { + object: function(x){ return arguments; }(1), + resolve: resolveIndex, + ...expected([1]), + }, + { + object: function(x, y, z){ return arguments; }(1, 2, 3), + resolve: resolveIndex, + ...expected([1, 2, 3]), + }, + + // Unmapped arguments objects. + { + object: function(){ "use strict"; return arguments; }(), + resolve: resolveIndex, + ...expected([]), + }, + { + object: function(x){ "use strict"; return arguments; }(1), + resolve: resolveIndex, + ...expected([1]), + }, + { + object: function(x, y, z){ "use strict"; return arguments; }(1, 2, 3), + resolve: resolveIndex, + ...expected([1, 2, 3]), + }, + + // String objects. + { object: new String(""), resolve: resolveIndex, ...expected([]), }, + { object: new String("a"), resolve: resolveIndex, ...expected(["a"]), }, + { object: new String("abc"), resolve: resolveIndex, ...expected(["a","b","c"]), }, + + // Function objects. + { object: function(){}, resolve: resolveFunction, ...expected([]), }, + ]; +} + +var assertWith = { + keys: assert.compareArray, + values: assert.compareArray, + entries(actual, expected) { + assert.sameValue(actual.length, expected.length); + for (let i = 0; i < expected.length; ++i) + assert.compareArray(actual[i], expected[i]); + } +}; + +// Test Object.keys/values/entries on objects with enumerate/resolve hooks. + +for (let method of ["keys", "values", "entries"]) { + let assert = assertWith[method]; + + // Call each method twice to test the case when + // - the enumerate hook wasn't yet called, + // - the enumerate hook was already called. + for (let {object, [method]: expected} of makeTestCases()) { + assert(Object[method](object), expected); + assert(Object[method](object), expected); + } + + // Test the case when enumerate wasn't yet called, but a property was already resolved. + for (let {object, resolve, [method]: expected} of makeTestCases()) { + resolve(object); // Call the resolve hook. + + assert(Object[method](object), expected); + assert(Object[method](object), expected); + } +} + diff --git a/test/staging/sm/object/values-entries-typedarray.js b/test/staging/sm/object/values-entries-typedarray.js new file mode 100644 index 0000000000..2e0c220e53 --- /dev/null +++ b/test/staging/sm/object/values-entries-typedarray.js @@ -0,0 +1,62 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [compareArray.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertSameEntries(actual, expected) { + assert.sameValue(actual.length, expected.length); + for (let i = 0; i < expected.length; ++i) + assert.compareArray(actual[i], expected[i]); +} + +function throwsTypeError(fn) { + try { + fn(); + } catch (e) { + assert.sameValue(e instanceof TypeError, true); + return true; + } + return false; +} + +// Non-standard: Accessing elements of detached array buffers should throw, but +// this is currently not implemented. +const ACCESS_ON_DETACHED_ARRAY_BUFFER_THROWS = (() => { + let ta = new Int32Array(10); + $262.detachArrayBuffer(ta.buffer); + let throws = throwsTypeError(() => ta[0]); + // Ensure [[Get]] and [[GetOwnProperty]] return consistent results. + assert.sameValue(throwsTypeError(() => Object.getOwnPropertyDescriptor(ta, 0)), throws); + return throws; +})(); + +function maybeThrowOnDetached(fn, returnValue) { + if (ACCESS_ON_DETACHED_ARRAY_BUFFER_THROWS) { + assertThrowsInstanceOf(fn, TypeError); + return returnValue; + } + return fn(); +} + +// Ensure Object.keys/values/entries work correctly on typed arrays. +for (let len of [0, 1, 10]) { + let array = new Array(len).fill(1); + let ta = new Int32Array(array); + + assert.compareArray(Object.keys(ta), Object.keys(array)); + assert.compareArray(Object.values(ta), Object.values(array)); + assertSameEntries(Object.entries(ta), Object.entries(array)); + + $262.detachArrayBuffer(ta.buffer); + + assert.compareArray(maybeThrowOnDetached(() => Object.keys(ta), []), []); + assert.compareArray(maybeThrowOnDetached(() => Object.values(ta), []), []); + assertSameEntries(maybeThrowOnDetached(() => Object.entries(ta), []), []); +} + diff --git a/test/staging/sm/object/values.js b/test/staging/sm/object/values.js new file mode 100644 index 0000000000..8387ecfaf0 --- /dev/null +++ b/test/staging/sm/object/values.js @@ -0,0 +1,100 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [compareArray.js, sm/non262-object-shell.js, sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if ("values" in Object) { + assert.sameValue(Object.values.length, 1); + + var o, values; + + o = { a: 3, b: 2 }; + values = Object.values(o); + assert.compareArray(values, [3, 2]); + + o = { get a() { return 17; }, b: 2 }; + values = Object.values(o), + assert.compareArray(values, [17, 2]); + + o = { __iterator__: function() { throw new Error("non-standard __iterator__ called?"); } }; + values = Object.values(o); + assert.compareArray(values, [o.__iterator__]); + + o = { a: 1, b: 2 }; + delete o.a; + o.a = 3; + values = Object.values(o); + assert.compareArray(values, [2, 3]); + + o = [0, 1, 2]; + values = Object.values(o); + assert.compareArray(values, [0, 1, 2]); + + o = /./.exec("abc"); + values = Object.values(o); + assert.compareArray(values, ["a", 0, "abc", undefined]); + + o = { a: 1, b: 2, c: 3 }; + delete o.b; + o.b = 5; + values = Object.values(o); + assert.compareArray(values, [1, 3, 5]); + + function f() { } + f.prototype.p = 1; + o = new f(); + o.g = 1; + values = Object.values(o); + assert.compareArray(values, [1]); + + var o = {get a() {delete this.b; return 1}, b: 2, c: 3}; + values = Object.values(o); + assert.compareArray(values, [1, 3]); + + assertThrowsInstanceOf(() => Object.values(), TypeError); + assertThrowsInstanceOf(() => Object.values(undefined), TypeError); + assertThrowsInstanceOf(() => Object.values(null), TypeError); + + assert.compareArray(Object.values(1), []); + assert.compareArray(Object.values(true), []); + if (typeof Symbol === "function") + assert.compareArray(Object.values(Symbol("foo")), []); + + assert.compareArray(Object.values("foo"), ["f", "o", "o"]); + + values = Object.values({ + get a(){ + Object.defineProperty(this, "b", {enumerable: false}); + return "A"; + }, + b: "B" + }); + assert.compareArray(values, ["A"]); + + let ownKeysCallCount = 0; + let getOwnPropertyDescriptorCalls = []; + let target = { a: 1, b: 2, c: 3 }; + o = new Proxy(target, { + ownKeys() { + ownKeysCallCount++; + return ["c", "a"]; + }, + getOwnPropertyDescriptor(target, key) { + getOwnPropertyDescriptorCalls.push(key); + return Object.getOwnPropertyDescriptor(target, key); + } + }); + values = Object.values(o); + assert.sameValue(ownKeysCallCount, 1); + assert.compareArray(values, [3, 1]); + assert.compareArray(getOwnPropertyDescriptorCalls, ["c", "a"]); +} + diff --git a/test/staging/sm/regress/regress-10278.js b/test/staging/sm/regress/regress-10278.js new file mode 100644 index 0000000000..df2f0adeea --- /dev/null +++ b/test/staging/sm/regress/regress-10278.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/** + * File Name: regress-10278.js + * Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=10278 + * Description: Function declarations do not need to be separated + * by semi-colon if they occur on the same line. + * Author: bob@bclary.com + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 10278; +var summary = 'Function declarations do not need to be separated by semi-colon'; +var actual; +var expect; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'pass'; + try + { + eval("function f(){}function g(){}"); + actual = "pass"; + printStatus('no exception thrown'); + } + catch ( e ) + { + actual = "fail"; + printStatus('exception ' + e.toString() + ' thrown'); + } + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-1383630.js b/test/staging/sm/regress/regress-1383630.js new file mode 100644 index 0000000000..a0b092bb03 --- /dev/null +++ b/test/staging/sm/regress/regress-1383630.js @@ -0,0 +1,812 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* These tests are not checking whether an exception is thrown or not for + * proxies: those tests should already exist in js/src/tests/non262/Proxy . + * We expect TypeErrors to be thrown in these tests, with a stringification + * of the error message showing whatever property name the error is being + * reported for. + * + * Beyond the presence of the property name, these tests do not care about the + * contents of the message. + * + * The reason for requiring the property name is simple: with ECMAScript + * proxies, it can be really hard to figure out what little assertion causes a + * TypeError in the first place. + */ +"use strict"; + +function assertThrowsTypeErrorIncludes(f, propStr, details) { + assertThrowsInstanceOfWithMessageCheck(f, TypeError, + message => message.includes(propStr) && (!details || message.includes(details))); +} + +const STR = "one", STR_NAME = `"one"`; +const SYM = Symbol("two"), SYM_NAME = `'Symbol("two")'`; + +function errorHasPropertyTests(test) { + assertThrowsTypeErrorIncludes(() => test(STR), STR_NAME); + assertThrowsTypeErrorIncludes(() => test(SYM), SYM_NAME); +} + +function errorHasPropertyTestsWithDetails(test) { + let [throwable, details] = test(STR); + assertThrowsTypeErrorIncludes(throwable, STR_NAME, details); + + [throwable, details] = test(SYM); + assertThrowsTypeErrorIncludes(throwable, SYM_NAME, details); +} + +// getOwnPropertyDescriptor + +function testGetOwnPropertyDescriptor_OBJORUNDEF(propName) { + // JSMSG_PROXY_GETOWN_OBJORUNDEF + const h = { + getOwnPropertyDescriptor: () => 2 + }; + + const t = {}; + const p = new Proxy(t, h); + + Reflect.getOwnPropertyDescriptor(p, propName); +} + +function testGetOwnPropertyDescriptor_NC_AS_NE(propName) { + // JSMSG_CANT_REPORT_NC_AS_NE + const h = { + getOwnPropertyDescriptor: () => undefined + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + Reflect.getOwnPropertyDescriptor(p, propName); +} + +function testGetOwnPropertyDescriptor_E_AS_NE(propName) { + // JSMSG_CANT_REPORT_E_AS_NE + const h = { + getOwnPropertyDescriptor: () => undefined, + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: true + }); + Reflect.preventExtensions(t); + const p = new Proxy(t, h); + + Reflect.getOwnPropertyDescriptor(p, propName); +} + +function testGetOwnPropertyDescriptor_NE_AS_NC(propName) { + // JSMSG_CANT_REPORT_NE_AS_NC + const h = { + getOwnPropertyDescriptor: function() { + return { + value: 1, + writable: true, + enumerable: true, + configurable: false + }; + } + }; + + const t = {}; + const p = new Proxy(t, h); + + Reflect.getOwnPropertyDescriptor(p, propName); +} + +function testGetOwnPropertyDescriptor_C_AS_NC(propName) { + // JSMSG_CANT_REPORT_C_AS_NC + const h = { + getOwnPropertyDescriptor: function() { + return { + value: 1, + writable: true, + enumerable: true, + configurable: false // here's the difference + }; + } + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: true + }); + + const p = new Proxy(t, h); + + Reflect.getOwnPropertyDescriptor(p, propName); +} + +function testGetOwnPropertyDescriptor_INVALID_NOT_EXTENSIBLE(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_NOT_EXTENSIBLE + const h = { + getOwnPropertyDescriptor: function() { + return { + value: 1, + writable: true, + enumerable: true, + configurable: true + }; + } + }; + + const t = {}; + Reflect.preventExtensions(t); + + const p = new Proxy(t, h); + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy can't report an extensible object as non-extensible"]; +} + +function testGetOwnPropertyDescriptor_INVALID_C_AS_NC(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_CANT_REPORT_NC_AS_C + const h = { + getOwnPropertyDescriptor: function() { + return { + value: 1, + writable: true, + enumerable: true, + configurable: true + }; + } + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: false + }); + + const p = new Proxy(t, h); + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy can't report an existing non-configurable property as configurable"]; +} + +function testGetOwnPropertyDescriptor_INVALID_ENUM_DIFFERENT_CURRENT(cEnumerable, propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_ENUM_DIFFERENT + const h = { + getOwnPropertyDescriptor: function() { + return { + value: 1, + writable: true, + enumerable: !cEnumerable, + configurable: false + }; + } + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: cEnumerable, + configurable: false + }); + + const p = new Proxy(t, h); + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy can't report a different 'enumerable' from target when target is not configurable"]; +} + +function testGetOwnPropertyDescriptor_INVALID_CURRENT_NC_DIFF_TYPE(cAccessor, propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_CURRENT_NC_DIFF_TYPE + const accDesc = { + get: () => 1, + enumerable: true, + configurable: false, + }; + const dataDesc = { + value: 1, + writable: true, + enumerable: true, + configurable: false + }; + + const h = { + getOwnPropertyDescriptor: () => { return (cAccessor ? dataDesc : accDesc); } + }; + + const t = {}; + Reflect.defineProperty(t, propName, cAccessor ? accDesc : dataDesc); + const p = new Proxy(t, h); + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy can't report a different descriptor type when target is not configurable"]; +} + +function testGetOwnPropertyDescriptor_INVALID_NW_AS_W(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_CANT_REPORT_NW_AS_W + const h = { + getOwnPropertyDescriptor: function() { + return { + value: 1, + writable: true, + enumerable: true, + configurable: false + }; + } + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 2, + writable: false, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy can't report a non-configurable, non-writable property as writable"]; +} + +function testGetOwnPropertyDescriptor_INVALID_DIFFERENT_VALUE(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_DIFFERENT_VALUE + const h = { + getOwnPropertyDescriptor: function() { + return { + value: 1, + writable: false, + enumerable: true, + configurable: false + }; + } + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 2, + writable: false, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy must report the same value for the non-writable, non-configurable property"]; +} + +function testGetOwnPropertyDescriptor_INVALID_SETTERS_DIFFERENT(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_SETTERS_DIFFERENT + const g = () => 1; + const h = { + getOwnPropertyDescriptor: function() { + return { + get: g, + set: () => 2, + enumerable: true, + configurable: false + }; + } + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + get: g, + set: () => 2, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy can't report different setters for a currently non-configurable property"]; +} + +function testGetOwnPropertyDescriptor_INVALID_GETTERS_DIFFERENT(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_GETTERS_DIFFERENT + const h = { + getOwnPropertyDescriptor: function() { + return { + get: () => 2, + enumerable: true, + configurable: false + }; + } + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + get: () => 2, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.getOwnPropertyDescriptor(p, propName); }, + "proxy can't report different getters for a currently non-configurable property"]; +} + +// defineProperty +function testDefineProperty_CANT_DEFINE_NEW(propName) { + // JSMSG_CANT_DEFINE_NEW + const h = { + defineProperty: () => true + }; + + const t = {}; + Reflect.preventExtensions(t); + + const p = new Proxy(t, h); + Reflect.defineProperty(p, propName, {}); +} + +function testDefineProperty_NE_AS_NC(propName) { + // JSMSG_CANT_DEFINE_NE_AS_NC + const h = { + defineProperty: () => true + }; + + const t = {}; + + const p = new Proxy(t, h); + Reflect.defineProperty(p, propName, { + value: 1, + enumerable: true, + writable: true, + configurable: false, + }); +} + +/* Reflect.defineProperty(proxy, propName, desc) cannot throw + * JSMSG_CANT_REPORT_INVALID with DETAILS_NOT_EXTENSIBLE. Here's why: + * + * To throw with DETAILS_NOT_EXTENSIBLE, current must be undefined and the + * target must not be extensible, inside ValidateAndApplyPropertyDescriptor. + * + * ValidateAndApplyPropertyDescriptor's current is also + * IsCompatiblePropertyDescriptor's current, and therefore also + * targetDesc in [[DefineOwnProperty]] for proxies at step 16b. + * + * BUT step 16 is not reached if targetDesc in [[DefineOwnProperty]] is + * undefined: instead step 15 is invoked. QED. + */ + +function testDefineProperty_INVALID_NC_AS_C(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_CANT_REPORT_NC_AS_C + const h = { + defineProperty: function() { + return true; + } + }; + + const newDesc = { + value: 1, + writable: true, + enumerable: true, + configurable: true + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: false + }); + + const p = new Proxy(t, h); + return [() => { Reflect.defineProperty(p, propName, newDesc); }, + "proxy can't report an existing non-configurable property as configurable"]; +} + +function testDefineProperty_INVALID_ENUM_DIFFERENT_CURRENT(cEnumerable, propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_ENUM_DIFFERENT + const h = { + defineProperty: function() { + return true; + } + }; + + const newDesc = { + value: 1, + writable: true, + enumerable: !cEnumerable, + configurable: false + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: cEnumerable, + configurable: false + }); + + const p = new Proxy(t, h); + return [() => { Reflect.defineProperty(p, propName, newDesc); }, + "proxy can't report a different 'enumerable' from target when target is not configurable"]; +} + +function testDefineProperty_INVALID_CURRENT_NC_DIFF_TYPE(cAccessor, propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_CURRENT_NC_DIFF_TYPE + const accDesc = { + get: () => 1, + enumerable: true, + configurable: false, + }; + const dataDesc = { + value: 1, + writable: true, + enumerable: true, + configurable: false + }; + + const h = { + defineProperty: () => true, + }; + + const t = {}; + Reflect.defineProperty(t, propName, cAccessor ? accDesc : dataDesc); + const p = new Proxy(t, h); + return [() => { Reflect.defineProperty(p, propName, cAccessor ? dataDesc : accDesc); }, + "proxy can't report a different descriptor type when target is not configurable"]; +} + +function testDefineProperty_INVALID_NW_AS_W(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_CANT_REPORT_NW_AS_W + const h = { + defineProperty: function() { + return true; + } + }; + + const newDesc = { + value: 1, + writable: true, + enumerable: true, + configurable: false + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 2, + writable: false, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.defineProperty(p, propName, newDesc); }, + "proxy can't report a non-configurable, non-writable property as writable"]; +} + +function testDefineProperty_INVALID_DIFFERENT_VALUE(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_DIFFERENT_VALUE + const h = { + defineProperty: function() { + return true; + } + }; + + const newDesc = { + value: 1, + writable: false, + enumerable: true, + configurable: false + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 2, + writable: false, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.defineProperty(p, propName, newDesc); }, + "proxy must report the same value for the non-writable, non-configurable property"]; +} + +function testDefineProperty_INVALID_SETTERS_DIFFERENT(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_SETTERS_DIFFERENT + const g = () => 1; + const h = { + defineProperty: function() { + return true; + } + }; + + const newDesc = { + get: g, + set: () => 2, + enumerable: true, + configurable: false + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + get: g, + set: () => 2, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.defineProperty(p, propName, newDesc); }, + "proxy can't report different setters for a currently non-configurable property"]; +} + +function testDefineProperty_INVALID_GETTERS_DIFFERENT(propName) { + // JSMSG_CANT_REPORT_INVALID, DETAILS_GETTERS_DIFFERENT + const h = { + defineProperty: function() { + return true; + } + }; + + const newDesc = { + get: () => 2, + enumerable: true, + configurable: false + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + get: () => 2, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + return [() => { Reflect.defineProperty(p, propName, newDesc); }, + "proxy can't report different getters for a currently non-configurable property"]; +} + +function testDefineProperty_INVALID_C_AS_NC(propName) { + const h = { + defineProperty: function() { + return true; + } + }; + + const newDesc = { + value: 1, + writable: true, + enumerable: true, + configurable: false + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: true + }); + const p = new Proxy(t, h); + + return [() => { Reflect.defineProperty(p, propName, newDesc); }, + "proxy can't define an existing configurable property as non-configurable"]; +} + +// ownKeys + +function testOwnKeys_CANT_SKIP_NC(propName) { + // JSMSG_CANT_SKIP_NC + const h = { + ownKeys: () => [] + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: false + }); + + const p = new Proxy(t, h); + + Reflect.ownKeys(p); +} + +function testOwnKeys_E_AS_NE(propName) { + // JSMSG_CANT_REPORT_E_AS_NE + const h = { + ownKeys: () => [] + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + configurable: true, + value: 1, + writable: true, + enumerable: true + }); + + Reflect.preventExtensions(t); + const p = new Proxy(t, h); + + Reflect.ownKeys(p); +} + +// has + +function testHas_NC_AS_NE(propName) { + // JSMSG_CANT_REPORT_NC_AS_NE + const h = { + has: () => undefined + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: false + }); + const p = new Proxy(t, h); + + Reflect.has(p, propName); +} + +function testHas_E_AS_NE(propName) { + // JSMSG_CANT_REPORT_E_AS_NE + const h = { + has: () => undefined + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: true, + enumerable: true, + configurable: true + }); + Reflect.preventExtensions(t); + const p = new Proxy(t, h); + + Reflect.has(p, propName); +} + +// get + +function testGet_SAME_VALUE(propName) { + const h = { + get: () => 2 + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: false, + enumerable: true, + configurable: false + }); + + const p = new Proxy(t, h); + Reflect.get(p, propName); +} + +function testGet_MUST_REPORT_UNDEFINED(propName) { + // JSMSG_MUST_REPORT_UNDEFINED + const h = { + get: () => 2 + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + set: () => { /* do nothing */}, + enumerable: true, + configurable: false + }); + + const p = new Proxy(t, h); + Reflect.get(p, propName); +} + +// set + +function testSet_CANT_SET_NW_NC(propName) { + // JSMSG_CANT_SET_NW_NC + const h = { + set: () => true, + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + value: 1, + writable: false, + enumerable: true, + configurable: false + }); + + const p = new Proxy(t, h); + Reflect.set(p, propName, 3); +} + +function testSet_WO_SETTER(propName) { + // JSMSG_MUST_REPORT_UNDEFINED + const h = { + set: () => true + }; + + const t = {}; + Reflect.defineProperty(t, propName, { + get: () => { /* do nothing */}, + enumerable: true, + configurable: false + }); + + const p = new Proxy(t, h); + Reflect.set(p, propName, 1); +} + +// test sequence + +[ + testGetOwnPropertyDescriptor_OBJORUNDEF, + testGetOwnPropertyDescriptor_NC_AS_NE, + testGetOwnPropertyDescriptor_E_AS_NE, + testGetOwnPropertyDescriptor_NE_AS_NC, + testGetOwnPropertyDescriptor_C_AS_NC, + + testDefineProperty_CANT_DEFINE_NEW, + testDefineProperty_NE_AS_NC, + + testOwnKeys_CANT_SKIP_NC, + testOwnKeys_E_AS_NE, + + testHas_NC_AS_NE, + testHas_E_AS_NE, + + testGet_SAME_VALUE, + testGet_MUST_REPORT_UNDEFINED, + + testSet_CANT_SET_NW_NC, + testSet_WO_SETTER, +].forEach(errorHasPropertyTests); + +[ + testGetOwnPropertyDescriptor_INVALID_NOT_EXTENSIBLE, + testGetOwnPropertyDescriptor_INVALID_C_AS_NC, + testGetOwnPropertyDescriptor_INVALID_ENUM_DIFFERENT_CURRENT.bind(null, true), + testGetOwnPropertyDescriptor_INVALID_ENUM_DIFFERENT_CURRENT.bind(null, false), + testGetOwnPropertyDescriptor_INVALID_CURRENT_NC_DIFF_TYPE.bind(null, true), + testGetOwnPropertyDescriptor_INVALID_CURRENT_NC_DIFF_TYPE.bind(null, false), + testGetOwnPropertyDescriptor_INVALID_NW_AS_W, + testGetOwnPropertyDescriptor_INVALID_DIFFERENT_VALUE, + testGetOwnPropertyDescriptor_INVALID_SETTERS_DIFFERENT, + testGetOwnPropertyDescriptor_INVALID_GETTERS_DIFFERENT, + + testDefineProperty_INVALID_NC_AS_C, + testDefineProperty_INVALID_ENUM_DIFFERENT_CURRENT.bind(null, true), + testDefineProperty_INVALID_ENUM_DIFFERENT_CURRENT.bind(null, false), + testDefineProperty_INVALID_CURRENT_NC_DIFF_TYPE.bind(null, true), + testDefineProperty_INVALID_CURRENT_NC_DIFF_TYPE.bind(null, false), + testDefineProperty_INVALID_NW_AS_W, + testDefineProperty_INVALID_DIFFERENT_VALUE, + testDefineProperty_INVALID_SETTERS_DIFFERENT, + testDefineProperty_INVALID_GETTERS_DIFFERENT, + testDefineProperty_INVALID_C_AS_NC, +].forEach(errorHasPropertyTestsWithDetails); + diff --git a/test/staging/sm/regress/regress-1507322-deep-weakmap.js b/test/staging/sm/regress/regress-1507322-deep-weakmap.js new file mode 100644 index 0000000000..aa7e3a309e --- /dev/null +++ b/test/staging/sm/regress/regress-1507322-deep-weakmap.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function TestGC2(m) { + var head = new Object; + for (key = head, i = 0; i < 99999; i++, key = m.get(key)) { + m.set(key, new Object); + } + gc(); + for (key = head; key != undefined; key = m.get(key)) {} +} +TestGC2(new WeakMap); + +assert.sameValue(true, true, "deep weakmaps"); diff --git a/test/staging/sm/regress/regress-162392.js b/test/staging/sm/regress/regress-162392.js new file mode 100644 index 0000000000..8c1015ce5f --- /dev/null +++ b/test/staging/sm/regress/regress-162392.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +//----------------------------------------------------------------------------- +// SUMMARY: 10.1.8 Arguments Object length + +var BUGNUMBER = 162392; +var summary = 'eval("arguments").length == 0 when no arguments specified'; +var actual = noargslength(); +var expect = 0; + +function noargslength() +{ + return eval('arguments').length; +} + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-306794.js b/test/staging/sm/regress/regress-306794.js new file mode 100644 index 0000000000..f06fa143d2 --- /dev/null +++ b/test/staging/sm/regress/regress-306794.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 306794; +var summary = 'Do not assert: parsing foo getter'; +var actual = 'No Assertion'; +var expect = 'No Assertion'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('getter\n'); +} +catch(e) +{ +} + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/regress/regress-325925.js b/test/staging/sm/regress/regress-325925.js new file mode 100644 index 0000000000..07c4ca3627 --- /dev/null +++ b/test/staging/sm/regress/regress-325925.js @@ -0,0 +1,25 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 325925; +var summary = 'Do not Assert: c <= cs->length in AddCharacterToCharSet'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/[\cA]/.exec('\x01'); + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/regress/regress-373843.js b/test/staging/sm/regress/regress-373843.js new file mode 100644 index 0000000000..50652a8f81 --- /dev/null +++ b/test/staging/sm/regress/regress-373843.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof disassemble != 'undefined') +{ + var func = disassemble(function() { return "c\\d"; }) + + // The disassembled function will contain a bytecode "string" with the content of the string next to it. + // Check if that string isn't over-escaped i.e. \\ isn't escaped to \\\\ . + assert.sameValue(func.indexOf("\\\\\\\\"), -1) +} + diff --git a/test/staging/sm/regress/regress-383682.js b/test/staging/sm/regress/regress-383682.js new file mode 100644 index 0000000000..85e6d398f0 --- /dev/null +++ b/test/staging/sm/regress/regress-383682.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 383682; +var summary = 'eval is too dynamic'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(s) { + return this.eval(s); + } + + expect = 'PASS'; + f("function g() { return('PASS'); }"); + actual = g(); + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-383902.js b/test/staging/sm/regress/regress-383902.js new file mode 100644 index 0000000000..7e4da00972 --- /dev/null +++ b/test/staging/sm/regress/regress-383902.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var c = 0; + +function f(a) { + const b = a; + try { + eval('"use strict"; b = 1 + a; c = 1'); + assert.sameValue(0, 1); + } catch (e) { + assert.sameValue(e.name, 'TypeError'); + assert.sameValue(0, c); + assert.sameValue(a, b); + } +} + +var w = 42; +f(w); + +c = 2; +try { + eval('"use strict"; function g(x) { const y = x; y = 1 + x; } c = 3'); +} catch (e) { + assert.sameValue(0, 1); +} + +c = 4; +try { + eval('"use strict"; const z = w; z = 1 + w; c = 5'); + assert.sameValue(0, 1); +} catch (e) { + assert.sameValue(e.name, 'TypeError'); + assert.sameValue(4, c); + assert.sameValue('z' in this, false); +} + diff --git a/test/staging/sm/regress/regress-410852.js b/test/staging/sm/regress/regress-410852.js new file mode 100644 index 0000000000..a8a64ffdd9 --- /dev/null +++ b/test/staging/sm/regress/regress-410852.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 410852; +var summary = 'Valgrind errors in jsemit.cpp'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('Note: You must run this test under valgrind to determine if it passes'); + + try + { + eval('function(){if(t)'); + } + catch(ex) + { + assert.sameValue(ex instanceof SyntaxError, true, "wrong error: " + ex); + } + +} diff --git a/test/staging/sm/regress/regress-428366.js b/test/staging/sm/regress/regress-428366.js new file mode 100644 index 0000000000..3bb976fb47 --- /dev/null +++ b/test/staging/sm/regress/regress-428366.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 428366; +var summary = 'Do not assert deleting eval 16 times'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.__proto__.x = eval; +for (i = 0; i < 16; ++i) delete eval; +(function w() { x = 1; })(); + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/regress/regress-441477-01.js b/test/staging/sm/regress/regress-441477-01.js new file mode 100644 index 0000000000..ab817de3c9 --- /dev/null +++ b/test/staging/sm/regress/regress-441477-01.js @@ -0,0 +1,45 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 441477-01; +var summary = ''; +var actual = 'No Exception'; +var expect = 'No Exception'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + for (i = 0; i < 5;) + { + if (i > 5) + throw "bad"; + i++; + continue; + } + } + catch(ex) + { + actual = ex + ''; + } + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-449627.js b/test/staging/sm/regress/regress-449627.js new file mode 100644 index 0000000000..40efa99a9c --- /dev/null +++ b/test/staging/sm/regress/regress-449627.js @@ -0,0 +1,120 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 449627; +var summary = 'Crash with JIT in js_FillPropertyCache'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +/************************ BROWSER DETECT (http://www.quirksmode.org/js/detect.html) ************************/ + +if (typeof navigator == 'undefined') +{ + navigator = { + userAgent: "Firefox", + vendor: "Mozilla", + platform: "Mac" + }; +} + +global = this; + +var BrowserDetect = { + init: function _init() + { + this.browser=this.searchString(this.dataBrowser) || "An unknown browser"; + + this.OS= this.searchString(this.dataOS)||"an unknown OS"; + }, + searchString: function _searchString(a) + { + for(var i=0; i < a.length; i++) + { + var b=a[i].string; + var c=a[i].prop; + this.versionSearchString=a[i].versionSearch||a[i].identity; + if(b) + { + if(b.indexOf(a[i].subString)!=-1) + return a[i].identity; + } + else if(c) + return a[i].identity; + } + }, + + searchVersion:function _searchVersion(a) + { + var b=a.indexOf(this.versionSearchString); + if(b==-1) + return; + return parseFloat(a.substring(b+this.versionSearchString.length+1)); + }, + + dataBrowser:[ + { + string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb" + }, + { + string:navigator.vendor,subString:"Apple",identity:"Safari" + }, + { + prop:global.opera,identity:"Opera" + }, + { + string:navigator.vendor,subString:"iCab",identity:"iCab" + }, + { + string:navigator.vendor,subString:"KDE",identity:"Konqueror" + }, + { + string:navigator.userAgent,subString:"Firefox",identity:"Firefox" + }, + { + string:navigator.vendor,subString:"Camino",identity:"Camino" + }, + { + string:navigator.userAgent,subString:"Netscape",identity:"Netscape" + }, + { + string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE" + }, + { + string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv" + }, + { + string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla" + } + ], + dataOS:[ + { + string:navigator.platform,subString:"Win",identity:"Windows" + }, + { + string:navigator.platform,subString:"Mac",identity:"Mac" + }, + { + string:navigator.platform,subString:"Linux",identity:"Linux" + } + ] + }; + +BrowserDetect.init(); + + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/regress/regress-449666.js b/test/staging/sm/regress/regress-449666.js new file mode 100644 index 0000000000..10c1460690 --- /dev/null +++ b/test/staging/sm/regress/regress-449666.js @@ -0,0 +1,68 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 449666; +var summary = 'Do not assert: JSSTRING_IS_FLAT(str_)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + var global; + + + if (typeof window == 'undefined') { + global = this; + } + else { + global = window; + } + + if (!global['g']) { + global['g'] = {}; + } + + if (!global['g']['l']) { + global['g']['l'] = {}; + (function() { + function k(a,b){ + var c=a.split(/\./); + var d=global; + for(var e=0;evector[i]) == 0 +// at ../jsopcode.cpp:2791 +// +// when decompiling the eval code, which is: +// +// main: +// 00000: 10 getupvar 0 +// 00003: 10 getprop "y" +// 00006: 10 popv +// 00007: 10 stop + try + { + function f() { var x; eval("x.y"); } + f(); + } + catch(ex) + { + } + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-452498-053.js b/test/staging/sm/regress/regress-452498-053.js new file mode 100644 index 0000000000..d5bd6234ac --- /dev/null +++ b/test/staging/sm/regress/regress-452498-053.js @@ -0,0 +1,83 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 452498; +var summary = 'TM: upvar2 regression tests'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + +// ------- Comment #53 From Jason Orendorff + +// Assertion failure: (slot) < (uint32_t)(obj)->dslots[-1] +// at ../jsobj.cpp:5559 +// On the last line of BindLet, we have +// JS_SetReservedSlot(cx, blockObj, index, PRIVATE_TO_JSVAL(pn)); +// but this uses reserved slots as though they were unlimited. +// blockObj only has 2. + { let a=0, b=1, c=2; } + +// In RecycleTree at ../jsparse.cpp:315, we hit +// MOZ_CRASH("RecycleUseDefKids"); +// pn->pn_type is TOK_UNARYOP +// pn->pn_op is JSOP_XMLNAME +// pn->pn_defn is 1 +// pn->pn_used is 1 + try + { + true; 0; + } + catch(ex) + { + } +// Calls LinkUseToDef with pn->pn_defn == 1. +// +// If you say "var x;" first, then run this case, it gets further, +// crashing in NoteLValue like the first case in comment 52. +// + try + { + for (var [x] in y) var x; + } + catch(ex) + { + } +// Assertion failure: !pn2->pn_defn, at ../jsparse.h:461 +// Another case where some optimization is going on. + try + { + if (true && foo) ; + } + catch(ex) + { + } +// Assertion failure: scope->object == ctor +// in js_FastNewObject at ../jsbuiltins.cpp:237 +// +// With the patch, we're new-ing a different function each time, and the +// .prototype property is missing. +// + for (var z = 0; z < 3; z++) { (new function(){}); } + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-452498-079.js b/test/staging/sm/regress/regress-452498-079.js new file mode 100644 index 0000000000..eae8a2feae --- /dev/null +++ b/test/staging/sm/regress/regress-452498-079.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 452498; +var summary = 'TM: upvar2 regression tests'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + +// ------- Comment #79 From Jason Orendorff + + x; var x; function x() { return 0; } + +// Assertion failure: !(pn->pn_dflags & flag), at ../jsparse.h:635 + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-459085.js b/test/staging/sm/regress/regress-459085.js new file mode 100644 index 0000000000..8cb4499f7d --- /dev/null +++ b/test/staging/sm/regress/regress-459085.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 459085; +var summary = 'Do not assert with JIT: Should not move data from GPR to XMM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var m = new Number(3); + function foo() { for (var i=0; i<20;i++) m.toString(); } + foo(); + + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-469625-02.js b/test/staging/sm/regress/regress-469625-02.js new file mode 100644 index 0000000000..4e580f33cb --- /dev/null +++ b/test/staging/sm/regress/regress-469625-02.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 469625; +var summary = 'group assignment with rhs containing holes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'y'; + + Array.prototype[1] = 'y'; + var [x, y, z] = ['x', , 'z']; + + actual = y; + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-469625-03.js b/test/staging/sm/regress/regress-469625-03.js new file mode 100644 index 0000000000..41fcb69c21 --- /dev/null +++ b/test/staging/sm/regress/regress-469625-03.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 469625; +var summary = 'Do not assert: script->objectsOffset != 0'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(x) { + var [a, b, [c0, c1]] = [x, x, x]; + } + assertThrowsInstanceOfWithMessageCheck( + () => f(null), + TypeError, + message => /.*\[\.\.\.\]\[Symbol.iterator\]\(\)\.next\(\)\.value is null/.exec(message) !== null + ); +} + diff --git a/test/staging/sm/regress/regress-469758.js b/test/staging/sm/regress/regress-469758.js new file mode 100644 index 0000000000..9cf6810b66 --- /dev/null +++ b/test/staging/sm/regress/regress-469758.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOfWithMessageCheck( + () => { + {let i=1} + {let j=1; [][j][2]} + }, + TypeError, + message => message.endsWith("[][j] is undefined")); + diff --git a/test/staging/sm/regress/regress-470758-01.js b/test/staging/sm/regress/regress-470758-01.js new file mode 100644 index 0000000000..98fdda3a21 --- /dev/null +++ b/test/staging/sm/regress/regress-470758-01.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 470758; +var summary = 'Do not crash with eval upvars'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { var k; eval("for (var k in {});") })() + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-470758-02.js b/test/staging/sm/regress/regress-470758-02.js new file mode 100644 index 0000000000..4fea73c0bb --- /dev/null +++ b/test/staging/sm/regress/regress-470758-02.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 470758; +var summary = 'Promote evald initializer into upvar'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 5; + + (function(){var x;eval("for (x = 0; x < 5; x++);");print(actual = x);})(); + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-499524.js b/test/staging/sm/regress/regress-499524.js new file mode 100644 index 0000000000..b56e8336a3 --- /dev/null +++ b/test/staging/sm/regress/regress-499524.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function isSyntaxError(code) { + try { + eval(code); + return false; + } catch (exception) { + if (SyntaxError.prototype.isPrototypeOf(exception)) + return true; + throw exception; + }; +}; + +/* + * Duplicate parameter names must be tolerated (as per ES3), unless + * the parameter list uses destructuring, in which case we claim the + * user has opted in to a modicum of sanity, and we forbid duplicate + * parameter names. + */ +assert.sameValue(isSyntaxError("function f(x,x){}"), false); + +assert.sameValue(isSyntaxError("function f(x,[x]){})"), true); +assert.sameValue(isSyntaxError("function f(x,{y:x}){})"), true); +assert.sameValue(isSyntaxError("function f(x,{x}){})"), true); + +assert.sameValue(isSyntaxError("function f([x],x){})"), true); +assert.sameValue(isSyntaxError("function f({y:x},x){})"), true); +assert.sameValue(isSyntaxError("function f({x},x){})"), true); + +assert.sameValue(isSyntaxError("function f([x,x]){}"), true); +assert.sameValue(isSyntaxError("function f({x,x}){}"), true); +assert.sameValue(isSyntaxError("function f({y:x,z:x}){}"), true); + +assert.sameValue(isSyntaxError("function f(x,x,[y]){}"), true); +assert.sameValue(isSyntaxError("function f(x,x,{y}){}"), true); +assert.sameValue(isSyntaxError("function f([y],x,x){}"), true); +assert.sameValue(isSyntaxError("function f({y},x,x){}"), true); + +assert.sameValue(isSyntaxError("function f(a,b,c,d,e,f,g,h,b,[y]){}"), true); +assert.sameValue(isSyntaxError("function f([y],a,b,c,d,e,f,g,h,a){}"), true); +assert.sameValue(isSyntaxError("function f([a],b,c,d,e,f,g,h,i,a){}"), true); +assert.sameValue(isSyntaxError("function f(a,b,c,d,e,f,g,h,i,[a]){}"), true); +assert.sameValue(isSyntaxError("function f(a,b,c,d,e,f,g,h,i,[a]){}"), true); + diff --git a/test/staging/sm/regress/regress-500528.js b/test/staging/sm/regress/regress-500528.js new file mode 100644 index 0000000000..7d47e7a14e --- /dev/null +++ b/test/staging/sm/regress/regress-500528.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// This test appeared in bug 497789 comment 78. + +var a = {x: 'a'}, + b1 = Object.create(a), + c1 = Object.create(b1), + b2 = Object.create(a), + c2 = Object.create(b2); + +b2.x = 'b'; // foreshadowing a.x + +var s = ''; +for (var obj of [c1, c2]) + s += obj.x; +assert.sameValue(s, 'ab'); + +assert.sameValue(0, 0, "Property cache soundness: objects with the same shape but different prototypes."); diff --git a/test/staging/sm/regress/regress-503860.js b/test/staging/sm/regress/regress-503860.js new file mode 100644 index 0000000000..3ee147ed99 --- /dev/null +++ b/test/staging/sm/regress/regress-503860.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 503860; +var summary = "Don't shadow a readonly or setter proto-property"; +var expect = "PASS"; +var actual = "FAIL"; +var a = {y: 1}; + +function B(){} +B.prototype.__defineSetter__('x', function setx(val) { actual = expect; }); +var b = new B; +b.y = 1; + +var arr = [a, b]; // same shape prior to bug 497789 fix +for (var obj of arr) + obj.x = 2; // should call b's setter but doesn't + +assert.sameValue(expect, actual, summary); diff --git a/test/staging/sm/regress/regress-530879.js b/test/staging/sm/regress/regress-530879.js new file mode 100644 index 0000000000..5e48987440 --- /dev/null +++ b/test/staging/sm/regress/regress-530879.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function* f(a, b, c, d) { + yield arguments.length; +} +assert.sameValue(0, f().next().value, "bug 530879"); diff --git a/test/staging/sm/regress/regress-541255-3.js b/test/staging/sm/regress/regress-541255-3.js new file mode 100644 index 0000000000..608ea0ed74 --- /dev/null +++ b/test/staging/sm/regress/regress-541255-3.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(y) { + eval("{ let z=2, w=y; (function () { w.p = 7; })(); }"); +} +var x = {}; +f(x); +assert.sameValue(x.p, 7); diff --git a/test/staging/sm/regress/regress-541455.js b/test/staging/sm/regress/regress-541455.js new file mode 100644 index 0000000000..92855491d9 --- /dev/null +++ b/test/staging/sm/regress/regress-541455.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(x) { return eval('"mumble"; x + 42'); } + +var expect = true; +var actual = ('' + f).indexOf("mumble") >= 0; + +assert.sameValue(expect, actual, "unknown directive in eval code wrongly dropped"); diff --git a/test/staging/sm/regress/regress-551763-0.js b/test/staging/sm/regress/regress-551763-0.js new file mode 100644 index 0000000000..f319ce67bc --- /dev/null +++ b/test/staging/sm/regress/regress-551763-0.js @@ -0,0 +1,38 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(function() { + var o = {'arguments': 42}; + with (o) { // Definitely forces heavyweight. + // Note syntax is not a property access. + assert.sameValue(delete arguments, true, + "arguments property deletion within with block"); + } + assert.sameValue('arguments' in o, false, + "property deletion observable"); +})(); + +(function() { + var o = {'arguments': 42}; + delete o.arguments; + assert.sameValue('arguments' in o, false, + "arguments property deletion with property access syntax"); +})(); + +(function() { + var arguments = 42; // Forces heavyweight. + assert.sameValue(delete arguments, false, + "arguments variable"); +})(); + +(function() { + assert.sameValue(delete arguments, false, "arguments object"); +})(); diff --git a/test/staging/sm/regress/regress-551763-1.js b/test/staging/sm/regress/regress-551763-1.js new file mode 100644 index 0000000000..a09a22a6df --- /dev/null +++ b/test/staging/sm/regress/regress-551763-1.js @@ -0,0 +1,15 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Check we can delete arguments in the global space. */ +arguments = 42; +assert.sameValue(delete arguments, true, "arguments defined as global"); + diff --git a/test/staging/sm/regress/regress-551763-2.js b/test/staging/sm/regress/regress-551763-2.js new file mode 100644 index 0000000000..305774e3a4 --- /dev/null +++ b/test/staging/sm/regress/regress-551763-2.js @@ -0,0 +1,14 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Check we can't delete a var-declared arguments in global space. */ +var arguments = 42; +assert.sameValue(delete arguments, false, "arguments defined as global variable"); diff --git a/test/staging/sm/regress/regress-552432.js b/test/staging/sm/regress/regress-552432.js new file mode 100644 index 0000000000..a843c7f4f7 --- /dev/null +++ b/test/staging/sm/regress/regress-552432.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(function (y) { + arguments.y = 2; + var x = Object.create(arguments); + x[0] = 3; + assert.sameValue(x[0], 3); + assert.sameValue(x.y, 2); + assert.sameValue(y, 1); +})(1); + diff --git a/test/staging/sm/regress/regress-553778.js b/test/staging/sm/regress/regress-553778.js new file mode 100644 index 0000000000..28838e1561 --- /dev/null +++ b/test/staging/sm/regress/regress-553778.js @@ -0,0 +1,26 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * This should compile without triggering the following assertion: + * + * Assertion failure: cg->fun->u.i.skipmin <= skip, at ../jsemit.cpp:2346 + */ + +function f() { + function g() { + function h() { + g; x; + } + var [x] = []; + } +} + diff --git a/test/staging/sm/regress/regress-554955-1.js b/test/staging/sm/regress/regress-554955-1.js new file mode 100644 index 0000000000..81a3a4d0e2 --- /dev/null +++ b/test/staging/sm/regress/regress-554955-1.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(s) { + eval(s); + return function(a) { + var d; + { + let c = 3; + d = function() { a; }; // force Block object to be cloned + with({}) {}; // repel JägerMonkey + return b; // lookup occurs in scope of Block + } + }; +} + +var b = 1; +var g1 = f(""); +var g2 = f("var b = 2;"); + +/* Call the lambda once, caching a reference to the global b. */ +g1(0); + +/* + * If this call sees the above cache entry, then it will erroneously use the + * global b. + */ +assert.sameValue(g2(0), 2); + diff --git a/test/staging/sm/regress/regress-554955-2.js b/test/staging/sm/regress/regress-554955-2.js new file mode 100644 index 0000000000..8a3c01bca1 --- /dev/null +++ b/test/staging/sm/regress/regress-554955-2.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(s) { + eval(s); + return function(a) { + with({}) {}; // repel JägerMonkey + eval(a); + return b; + }; +} + +var b = 1; +var g1 = f(""); +var g2 = f("var b = 2;"); + +/* Call the lambda once, caching a reference to the global b. */ +g1(''); + +/* + * If this call sees the above cache entry, then it will erroneously use + * the global b. + */ +assert.sameValue(g2(''), 2); + diff --git a/test/staging/sm/regress/regress-554955-3.js b/test/staging/sm/regress/regress-554955-3.js new file mode 100644 index 0000000000..f9d7d7d837 --- /dev/null +++ b/test/staging/sm/regress/regress-554955-3.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(s) { + eval(s); + return function(a) { + with({}) {}; // repel JägerMonkey + eval(a); + { + let c = 3; + return b; + }; + }; +} + +var b = 1; +var g1 = f(""); +var g2 = f("var b = 2;"); + +/* Call the lambda once, caching a reference to the global b. */ +g1(''); + +/* + * If this call sees the above cache entry, then it will erroneously use the + * global b. + */ +assert.sameValue(g2(''), 2); + diff --git a/test/staging/sm/regress/regress-554955-4.js b/test/staging/sm/regress/regress-554955-4.js new file mode 100644 index 0000000000..22951161ce --- /dev/null +++ b/test/staging/sm/regress/regress-554955-4.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f() { + return function(a) { + // This eval must take place before the block is cloned, when the + // call object is still not marked as a delegate. The scope chain + // purge for the JSOP_DEFVAR will not change the global's shape, + // and the property cache entry will remain valid. + eval(a); + { + let c = 3; + // This eval forces the block to be cloned, so its shape gets + // used as the property cache key shape. + eval(''); + return b; + }; + }; +} + +var b = 1; +var g1 = f(); +var g2 = f(); + +/* Call the lambda once, caching a reference to the global b. */ +g1(''); + +/* + * If this call sees the above cache entry, then it will erroneously use the + * global b. + */ +assert.sameValue(g2('var b=2'), 2); + diff --git a/test/staging/sm/regress/regress-554955-5.js b/test/staging/sm/regress/regress-554955-5.js new file mode 100644 index 0000000000..f07b1145e2 --- /dev/null +++ b/test/staging/sm/regress/regress-554955-5.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(s) { + if (s) { + function b() { } + } + return function(a) { + eval(a); + return b; + }; +} + +var b = 1; +var g1 = f(false); +var g2 = f(true); + +/* Call the lambda once, caching a reference to the global b. */ +g1(''); + +/* + * If this call sees the above cache entry, then it will erroneously use the + * global b. + */ +assert.sameValue(typeof g2(''), "function"); + diff --git a/test/staging/sm/regress/regress-554955-6.js b/test/staging/sm/regress/regress-554955-6.js new file mode 100644 index 0000000000..5ab1afa000 --- /dev/null +++ b/test/staging/sm/regress/regress-554955-6.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var v="global"; +function f(a) { + // This eval could extend f's call object. However, the call object has + // not yet been marked as a delegate at this point, so no scope chain + // purge takes place when it is extended. + eval(a); + { + let b=3; + // This eval causes the cloned block object to be added to the + // scope chain. The block needs a unique shape: its parent call + // could acquire bindings for anything without affecting the global + // object's shape, so it's up to the block's shape to mismatch all + // property cache entries for prior blocks. + eval(""); + return v; + }; +} + +// Call the function once, to cache a reference to the global v from within +// f's lexical block. +assert.sameValue("global", f("")); + +// Call the function again, adding a binding to the call, and ensure that +// we do not see any property cache entry created by the previous reference +// that would direct us to the global definition. +assert.sameValue("local", f("var v='local'")); + +// Similarly,but with a doubly-nested block; make sure everyone gets marked. +function f2(a) { + eval(a); + { + let b=3; + { + let c=4; + eval(""); + return v; + }; + }; +} + +assert.sameValue("global", f2("")); +assert.sameValue("local", f2("var v='local'")); + diff --git a/test/staging/sm/regress/regress-559402-1.js b/test/staging/sm/regress/regress-559402-1.js new file mode 100644 index 0000000000..166f607445 --- /dev/null +++ b/test/staging/sm/regress/regress-559402-1.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = "No error"; +var actual = expect; + +try { + eval('function foo() { "use strict"; }'); +} catch (e) { + actual = '' + e; +} + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-559402-2.js b/test/staging/sm/regress/regress-559402-2.js new file mode 100644 index 0000000000..cd441afd9f --- /dev/null +++ b/test/staging/sm/regress/regress-559402-2.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = undefined; +var actual = (function foo() { "bogus"; })(); + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-559438.js b/test/staging/sm/regress/regress-559438.js new file mode 100644 index 0000000000..b1dd236c12 --- /dev/null +++ b/test/staging/sm/regress/regress-559438.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(x) { return 1 + "" + (x + 1); } +assert.sameValue("12", f(1), ""); +var g = eval("(" + f + ")"); +assert.sameValue("12", g(1), ""); diff --git a/test/staging/sm/regress/regress-560998-1.js b/test/staging/sm/regress/regress-560998-1.js new file mode 100644 index 0000000000..4ce25f3c45 --- /dev/null +++ b/test/staging/sm/regress/regress-560998-1.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (let j = 0; j < 4; ++j) { + function g() { j; } + g(); +} + diff --git a/test/staging/sm/regress/regress-560998-2.js b/test/staging/sm/regress/regress-560998-2.js new file mode 100644 index 0000000000..c20790f2d3 --- /dev/null +++ b/test/staging/sm/regress/regress-560998-2.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var x = {}; +for (var i = 0; i < 2; i++) { + Object.defineProperty(x, "y", {configurable: true, value: function () {}}); + x.y(); +} diff --git a/test/staging/sm/regress/regress-561031.js b/test/staging/sm/regress/regress-561031.js new file mode 100644 index 0000000000..30a596cff6 --- /dev/null +++ b/test/staging/sm/regress/regress-561031.js @@ -0,0 +1,1836 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try {} catch(e) {} +try { + if (2 == 0) { } else { []; } +} catch (e) {} diff --git a/test/staging/sm/regress/regress-563221.js b/test/staging/sm/regress/regress-563221.js new file mode 100644 index 0000000000..972fc47ff8 --- /dev/null +++ b/test/staging/sm/regress/regress-563221.js @@ -0,0 +1,16 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +"" + eval("(function () { if (x) ; else if (y) n(); else { " + Array(10000).join("e;") + " } });"); + +if (this.assert.sameValue) diff --git a/test/staging/sm/regress/regress-567152.js b/test/staging/sm/regress/regress-567152.js new file mode 100644 index 0000000000..57ed816f93 --- /dev/null +++ b/test/staging/sm/regress/regress-567152.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function c(a) { + this.f = function () { a; }; +} +c(0); // set both BRANDED and GENERIC bits in global scope +Object.defineProperty(this, "f", {configurable: true, enumerable: true, value: 3}); + diff --git a/test/staging/sm/regress/regress-569306.js b/test/staging/sm/regress/regress-569306.js new file mode 100644 index 0000000000..e812772267 --- /dev/null +++ b/test/staging/sm/regress/regress-569306.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f() {} +var g = new Function(); +delete Function; +function h() {} + +assert.sameValue(f.__proto__, g.__proto__); +assert.sameValue(g.__proto__, h.__proto__); +assert.sameValue(false, "Function" in this); + +assert.sameValue("ok", "ok", "bug 569306"); diff --git a/test/staging/sm/regress/regress-571014.js b/test/staging/sm/regress/regress-571014.js new file mode 100644 index 0000000000..58d0cad2b5 --- /dev/null +++ b/test/staging/sm/regress/regress-571014.js @@ -0,0 +1,43 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var F, o; + +F = function () {}; +F.prototype = new ArrayBuffer(1); +o = new F(); +try { + o.byteLength; +} catch (ex) { + // o is not a platform object + assert.sameValue(ex instanceof TypeError, true); +} + +o = {}; +o.__proto__ = new Int32Array(1); +try { + o.buffer.byteLength; +} catch (ex) { + // o is not a platform object + assert.sameValue(ex instanceof TypeError, true); +} + +F = function () {}; +F.prototype = new Int32Array(1); +o = new F(); +try { + o.slice(0, 1); + reportFailure("Expected an exception!"); +} catch (ex) { +} + +assert.sameValue("ok", "ok", "bug 571014"); diff --git a/test/staging/sm/regress/regress-573875.js b/test/staging/sm/regress/regress-573875.js new file mode 100644 index 0000000000..47014e5831 --- /dev/null +++ b/test/staging/sm/regress/regress-573875.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var o = {__iterator__:null, a:1, b:2, c:3} +var expect = '__iterator__,a,b,c,'; +var actual = ''; + +try { + for (var i in o) + actual += i + ','; +} catch (e) { + actual = '' + e; + if (/invalid __iterator__ value/.test(actual) || + /null is not a function/.test(actual)) { + expect = actual; + } +} + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-577648-1.js b/test/staging/sm/regress/regress-577648-1.js new file mode 100644 index 0000000000..f1d93d639c --- /dev/null +++ b/test/staging/sm/regress/regress-577648-1.js @@ -0,0 +1,95 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var count = 0; + +function testCaller(obj) { + switch (++count) { + case 1: + case 2: + /* + * The first two times, obj is objA. The first time, we reference + * arguments.callee.caller before obj.go, so the caller getter must + * force the joined function object in the stack frame to cross the + * method read barrier. The second time, obj.go has been cloned and + * it should match the new frame's callee from the get-go. + */ + assert.sameValue(obj, objA); + break; + + case 3: { + assert.sameValue(obj, objB); + + /* + * Store another clone of the joined function object before obj.go has + * been read, but after it has been invoked via objB.go(objB). + * + * In this case, arguments.callee.caller must not lie and return what + * is currently stored in objB.go, since that function object (objA.go) + * was cloned earlier, when count was 1, and it is not the function + * object that was truly invoked. + * + * But since the invocation of objB.go(objB) did not clone go, and the + * following assignment overwrote the invoked value, leaving the only + * reference to the joined function object for go in the stack frame's + * callee (argv[-2]) member, the arguments.callee.caller reference must + * clone a function object for the callee, store it as the callee, and + * return it here. + * + * It won't equal obj.go, but (implementation detail) it should have + * the same proto as obj.go + */ + obj.go = objA.go; + + let caller = arguments.callee.caller; + let obj_go = obj.go; + return caller != obj_go && caller.__proto__ == obj_go.__proto__; + } + + case 4: { + assert.sameValue(obj, objC); + + let save = obj.go; + delete obj.go; + return arguments.callee.caller == save; + } + + case 5: { + assert.sameValue(obj, objD); + + let read = obj.go; + break; + } + } + + return arguments.callee.caller == obj.go; +} + +function make() { + return { + go: function(obj) { + return testCaller(obj); + } + }; +} + +var objA = make(), + objB = make(), + objC = make(), + objD = make(); + +assert.sameValue(true, objA.go(objA), "1"); +assert.sameValue(true, objA.go(objA), "2"); +assert.sameValue(true, objB.go(objB), "3"); +assert.sameValue(true, objC.go(objC), "4"); +assert.sameValue(true, objD.go(objD), "5"); diff --git a/test/staging/sm/regress/regress-577648-2.js b/test/staging/sm/regress/regress-577648-2.js new file mode 100644 index 0000000000..2439772337 --- /dev/null +++ b/test/staging/sm/regress/regress-577648-2.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var o = { f: function() { return o.g(); }, g: function() { return arguments.callee.caller; } }; +var c = o.f(); +var i = 'f'; +var d = o[i](); + +assert.sameValue(true, c === o.f && d === o.f(), ""); diff --git a/test/staging/sm/regress/regress-580544.js b/test/staging/sm/regress/regress-580544.js new file mode 100644 index 0000000000..176f162163 --- /dev/null +++ b/test/staging/sm/regress/regress-580544.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'regress-580544.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 580544; +var summary = 'Do not assert: new (this.prototype = this)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + try { + new (this.prototype = this); + } catch (e) { + } + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-583429.js b/test/staging/sm/regress/regress-583429.js new file mode 100644 index 0000000000..40745b6d70 --- /dev/null +++ b/test/staging/sm/regress/regress-583429.js @@ -0,0 +1,16 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(Object.getOwnPropertyNames(Array.prototype).indexOf("length") >= 0, true); + +assert.sameValue("ok", "ok", "bug 583429"); diff --git a/test/staging/sm/regress/regress-584355.js b/test/staging/sm/regress/regress-584355.js new file mode 100644 index 0000000000..57d896ea74 --- /dev/null +++ b/test/staging/sm/regress/regress-584355.js @@ -0,0 +1,18 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var actual; +var expect = "function f () { ff (); }"; +function fun() { + (new Function ("function ff () { actual = '' + ff. caller; } function f () { ff (); } f ();")) (); +} +fun(); +assert.sameValue(expect, actual, ""); diff --git a/test/staging/sm/regress/regress-586482-1.js b/test/staging/sm/regress/regress-586482-1.js new file mode 100644 index 0000000000..d7740900fd --- /dev/null +++ b/test/staging/sm/regress/regress-586482-1.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = true; +var actual; + +var checkCaller = function(me) { + var caller = arguments.callee.caller; + var callerIsMethod = (caller === me['doThing']); + actual = callerIsMethod; +}; + +var MyObj = function() { +}; + +MyObj.prototype.doThing = function() { + checkCaller(this); +}; + +(new MyObj()).doThing(); + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-586482-2.js b/test/staging/sm/regress/regress-586482-2.js new file mode 100644 index 0000000000..aab0298b39 --- /dev/null +++ b/test/staging/sm/regress/regress-586482-2.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = true; +var actual; + +var checkCaller = function(me) { + var caller = arguments.callee.caller; + var callerIsMethod = (caller === me['doThing']); + actual = callerIsMethod; +}; + +Object.prototype.doThing = function() { + checkCaller(this); +}; + +["dense"].doThing(); + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-586482-3.js b/test/staging/sm/regress/regress-586482-3.js new file mode 100644 index 0000000000..104168969b --- /dev/null +++ b/test/staging/sm/regress/regress-586482-3.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = true; +var actual; + +var checkCaller = function(me) { + var f = me['doThing']; + delete MyObj.prototype['doThing']; + var caller = arguments.callee.caller; + var callerIsMethod = (f === caller); + actual = callerIsMethod; +}; + +var MyObj = function() { +}; + +MyObj.prototype.doThing = function() { + checkCaller(this); +}; + +(new MyObj()).doThing(); + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-586482-4.js b/test/staging/sm/regress/regress-586482-4.js new file mode 100644 index 0000000000..fc7a7f7684 --- /dev/null +++ b/test/staging/sm/regress/regress-586482-4.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect, actual; + +var obj = { + f: function() { + expect = this.g; + actual = arguments.callee.caller; + print("Ok"); + } +}; + +var obj2 = { __proto__: obj, g: function() { this.f(); }}; + +var obj3 = { __proto__: obj2, h: function() { this.g(); }}; + +var obj4 = { __proto__: obj3 } + +obj4.h(); + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-586482-5.js b/test/staging/sm/regress/regress-586482-5.js new file mode 100644 index 0000000000..06235e3a71 --- /dev/null +++ b/test/staging/sm/regress/regress-586482-5.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function check() { + obj2.__proto__ = null; + return arguments.callee.caller; +} + +var obj = { f: function() { check(); }}; + +var obj2 = { __proto__: obj }; + +obj2.f(); + diff --git a/test/staging/sm/regress/regress-588339.js b/test/staging/sm/regress/regress-588339.js new file mode 100644 index 0000000000..c4dd16f207 --- /dev/null +++ b/test/staging/sm/regress/regress-588339.js @@ -0,0 +1,15 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +({}) +eval("{}") + +/* Watch for crash. */ diff --git a/test/staging/sm/regress/regress-591897.js b/test/staging/sm/regress/regress-591897.js new file mode 100644 index 0000000000..36e82b24d8 --- /dev/null +++ b/test/staging/sm/regress/regress-591897.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = 42; +var actual = (function({ + x: [w] +}, +x) { + with({}) {return w;} +})({x:[42]}); + +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-592202-3.js b/test/staging/sm/regress/regress-592202-3.js new file mode 100644 index 0000000000..3897fda228 --- /dev/null +++ b/test/staging/sm/regress/regress-592202-3.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +test(); + +function test() +{ + var counter = 0; + function f(x,y) { + try + { + throw 42; + } + catch(e2) + { + foo(function(){ return x; }| "9.2" && 5 || counter && e); + ++counter; + } + } + + f(2, 1); +} + +function foo(bar) { return ""+bar; } + diff --git a/test/staging/sm/regress/regress-592202-4.js b/test/staging/sm/regress/regress-592202-4.js new file mode 100644 index 0000000000..13d0dbefa5 --- /dev/null +++ b/test/staging/sm/regress/regress-592202-4.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function p() { } + +function test() +{ + var counter = 0; + + function f(x) { + try + { + throw 42; + } + catch(e) + { + assert.sameValue(counter, 0); + p(function(){x;}); + counter = 1; + } + } + + f(2); + assert.sameValue(counter, 1); +} + +test(); + diff --git a/test/staging/sm/regress/regress-592556-c35.js b/test/staging/sm/regress/regress-592556-c35.js new file mode 100644 index 0000000000..845e098e79 --- /dev/null +++ b/test/staging/sm/regress/regress-592556-c35.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +var obj = {a: 0, b: 1, c: 2}; +delete obj.b; // switch to dictionary mode +Object.defineProperty(obj, 'g', + {get: function () { return -1; }, configurable: true}); +for (var i = 3; i < 20; i++) + obj['x' + i] = i; // get property table +for (var i = 3; i < 20; i++) + delete obj['x' + i]; // add to freelist +delete obj.g; // must update lastProp->freeslot, to avoid assertion + +// extra junk to try to hit the assertion, if freeslot is not updated +gc(); +obj.d = 3; +obj.e = 4; + diff --git a/test/staging/sm/regress/regress-593256.js b/test/staging/sm/regress/regress-593256.js new file mode 100644 index 0000000000..204da46bd9 --- /dev/null +++ b/test/staging/sm/regress/regress-593256.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +eval("\ + (function(){for(d in[0,Number]) {\ + this.__defineGetter__(\"\",function(){}),\ + [(this.__defineGetter__(\"x\",Math.pow))]\ + }})\ +")() +delete gc +eval("\ + (function() {\ + for(e in this.__defineSetter__(\"x\",function(){})){}\ + })\ +")() +delete gc + +assert.sameValue(true, true, "don't crash"); diff --git a/test/staging/sm/regress/regress-595365-1.js b/test/staging/sm/regress/regress-595365-1.js new file mode 100644 index 0000000000..049c1b9c25 --- /dev/null +++ b/test/staging/sm/regress/regress-595365-1.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * NB: this test hardcodes the value of MAX_PROPERTY_TREE_HEIGHT. + */ +var i = 0; +function add0to64(o) { + o.p00 = ++i;o.p01 = ++i;o.p02 = ++i;o.p03 = ++i;o.p04 = ++i;o.p05 = ++i;o.p06 = ++i;o.p07 = ++i; + o.p10 = ++i;o.p11 = ++i;o.p12 = ++i;o.p13 = ++i;o.p14 = ++i;o.p15 = ++i;o.p16 = ++i;o.p17 = ++i; + o.p20 = ++i;o.p21 = ++i;o.p22 = ++i;o.p23 = ++i;o.p24 = ++i;o.p25 = ++i;o.p26 = ++i;o.p27 = ++i; + o.p30 = ++i;o.p31 = ++i;o.p32 = ++i;o.p33 = ++i;o.p34 = ++i;o.p35 = ++i;o.p36 = ++i;o.p37 = ++i; + o.p40 = ++i;o.p41 = ++i;o.p42 = ++i;o.p43 = ++i;o.p44 = ++i;o.p45 = ++i;o.p46 = ++i;o.p47 = ++i; + o.p50 = ++i;o.p51 = ++i;o.p52 = ++i;o.p53 = ++i;o.p54 = ++i;o.p55 = ++i;o.p56 = ++i;o.p57 = ++i; + o.p60 = ++i;o.p61 = ++i;o.p62 = ++i;o.p63 = ++i;o.p64 = ++i;o.p65 = ++i;o.p66 = ++i;o.p67 = ++i; + o.p70 = ++i;o.p71 = ++i;o.p72 = ++i;o.p73 = ++i;o.p74 = ++i;o.p75 = ++i;o.p76 = ++i;o.p77 = ++i; + o.p100 = ++i; + return o; +} +function add65th(o) { + o.p101 = ++i; +} +var o = add0to64({}); +add65th(o); +delete o.p101; +add65th(o); + +assert.sameValue(true, true, "don't crash"); diff --git a/test/staging/sm/regress/regress-596103.js b/test/staging/sm/regress/regress-596103.js new file mode 100644 index 0000000000..51ed963220 --- /dev/null +++ b/test/staging/sm/regress/regress-596103.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for (var u = 0; u < 3; ++u) { + var y = []; + Object.create(y); + gc(); + y.t = 3; + gc(); +} + diff --git a/test/staging/sm/regress/regress-596805-1.js b/test/staging/sm/regress/regress-596805-1.js new file mode 100644 index 0000000000..6a0bb39426 --- /dev/null +++ b/test/staging/sm/regress/regress-596805-1.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var f = function(){}; +for (var y in f); +f.j = 0; +Object.defineProperty(f, "k", ({configurable: true})); +delete f.j; +Object.defineProperty(f, "k", ({get: function() {}})); + diff --git a/test/staging/sm/regress/regress-596805-2.js b/test/staging/sm/regress/regress-596805-2.js new file mode 100644 index 0000000000..c0a3d3107a --- /dev/null +++ b/test/staging/sm/regress/regress-596805-2.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +for(let c of [0, 0, 0, 0, 0]) { + try { (function() { + this.c = this; + this.e = arguments; + Object.defineProperty(this, "d", { + get: Math.pow, + configurable: true + }); + delete this.e; + delete this.c; + Object.defineProperty(this, "d", { + writable: true + }); + if (Math.tan( - 1)) { + Object.defineProperty(this, {}); + } + } (c)); + } catch(e) {} +} + diff --git a/test/staging/sm/regress/regress-597945-1.js b/test/staging/sm/regress/regress-597945-1.js new file mode 100644 index 0000000000..3df91fdb32 --- /dev/null +++ b/test/staging/sm/regress/regress-597945-1.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var arguments; + +function b(foo) { + delete foo.d + delete foo.w + foo.d = true + foo.w = Object + delete Object.defineProperty(foo, "d", ({ + set: Math.w + })); {} +} +for(e of [arguments, arguments]) { + try { + b(e)('') + } catch (e) {} +} + diff --git a/test/staging/sm/regress/regress-597945-2.js b/test/staging/sm/regress/regress-597945-2.js new file mode 100644 index 0000000000..e95833ffbc --- /dev/null +++ b/test/staging/sm/regress/regress-597945-2.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = {d: true, w: true}; +Object.defineProperty(a, "d", {set: undefined}); +delete a.d; +delete a.w; +a.d = true; + diff --git a/test/staging/sm/regress/regress-598176.js b/test/staging/sm/regress/regress-598176.js new file mode 100644 index 0000000000..10c50a0dc7 --- /dev/null +++ b/test/staging/sm/regress/regress-598176.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function make() { + var r = {}; + r.desc = {get: function() {}}; + r.a = Object.defineProperty({}, "prop", r.desc); + r.info = Object.getOwnPropertyDescriptor(r.a, "prop"); + return r; +} + +r1 = make(); +assert.sameValue(r1.desc.get, r1.info.get); + +// Distinct evaluations of an object literal make distinct methods. +r2 = make(); +assert.sameValue(r1.desc.get === r2.desc.get, false); + +r1.info.get.foo = 42; + +assert.sameValue(r1.desc.get.hasOwnProperty('foo'), !r2.desc.get.hasOwnProperty('foo')); +assert.sameValue(r1.info.get.hasOwnProperty('foo'), !r2.info.get.hasOwnProperty('foo')); + diff --git a/test/staging/sm/regress/regress-600067.js b/test/staging/sm/regress/regress-600067.js new file mode 100644 index 0000000000..a294f64caf --- /dev/null +++ b/test/staging/sm/regress/regress-600067.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * NB: this test hardcodes for the value of PropertyTable::HASH_THRESHOLD (6). + */ + +function s(e) { + var a, b, c, d; + function e() { } +} + +assert.sameValue(0, 0, "don't crash"); diff --git a/test/staging/sm/regress/regress-601399.js b/test/staging/sm/regress/regress-601399.js new file mode 100644 index 0000000000..89b62f59d3 --- /dev/null +++ b/test/staging/sm/regress/regress-601399.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Test courtesy of Olov Lassus . + +function keys(o) { + var a = []; + for (var key in o) { + a.push(key); + } + return a; +} + +var obj = { + 'a': function() {}, 'b': function() {}, 'c': function() {} +}; +var orig_order = keys(obj).toString(); +var tmp = obj["b"]; +var read_order = keys(obj).toString(); + +assert.sameValue(orig_order, read_order, + "property enumeration order should not change after reading a method value"); diff --git a/test/staging/sm/regress/regress-602621.js b/test/staging/sm/regress/regress-602621.js new file mode 100644 index 0000000000..bd7e1ea1e9 --- /dev/null +++ b/test/staging/sm/regress/regress-602621.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test(arg) { + eval(arg); + { + function arguments() { return 1; } + } + return arguments; +} + +assert.sameValue("function", typeof test("42"), "function sub-statement must override arguments"); diff --git a/test/staging/sm/regress/regress-609617.js b/test/staging/sm/regress/regress-609617.js new file mode 100644 index 0000000000..7fad7a9c9b --- /dev/null +++ b/test/staging/sm/regress/regress-609617.js @@ -0,0 +1,81 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var actual; +var expect = "pass"; + +var x = "fail"; +function f() { + var x = "pass"; + delete(eval("actual = x")); +} +f(); +assert.sameValue(actual, expect); + +function g() { return 1 } +function h() { function g() { throw 2; } eval('g()')++; } + +assertThrowsValue(h, 2); + +var lhs_prefix = ["", "++", "--", "", "", "[", "[y, " ]; +var lhs_suffix = [" = 'no'", "", "", "++", "--", ", y] = [3, 4]", "] = [5, 6]"]; + +for (var i = 0; i < lhs_prefix.length; i++) { + var expected; + if (/\[/.test(lhs_prefix[i])) { + expected = "invalid destructuring target"; + } else { + /* + * NB: JSOP_SETCALL throws only JSMSG_ASSIGN_TO_CALL, it does not + * specialize for ++ and -- as the compiler's error reporting does. See + * the next section's forked assert.sameValue code. + */ + expected = "cannot assign to function call"; + } + assertThrownErrorContains( + () => eval(lhs_prefix[i] + "eval('x')" + lhs_suffix[i]), + expected); +} + +/* Now test for strict mode rejecting any SETCALL variant at compile time. */ +for (var i = 0; i < lhs_prefix.length; i++) { + var expected; + if (/\+\+|\-\-/.test(lhs_prefix[i] || lhs_suffix[i])) + expected = "invalid increment/decrement operand"; + else if (/\[/.test(lhs_prefix[i])) + expected = "invalid destructuring target"; + else + expected = "invalid assignment left-hand side"; + assertThrownErrorContains( + () => eval("(function () { 'use strict'; " + lhs_prefix[i] + "foo('x')" + lhs_suffix[i] + "; })"), + expected); +} + +/* + * The useless delete is optimized away, but the SETCALL must not be. It's not + * an early error, though. + */ +var fooArg; +function foo(arg) { fooArg = arg; } +assertThrownErrorContains( + () => eval("delete (foo('x') = 42);"), + "cannot assign to function call"); +assert.sameValue(fooArg, 'x'); + +/* Delete of a call expression is not an error at all, even in strict mode. */ +function g() { + "use strict"; + assert.sameValue(delete Object(), true); +} +g(); + diff --git a/test/staging/sm/regress/regress-610026.js b/test/staging/sm/regress/regress-610026.js new file mode 100644 index 0000000000..592ab1f496 --- /dev/null +++ b/test/staging/sm/regress/regress-610026.js @@ -0,0 +1,54 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = "pass"; +var actual; + +// Scripts used to be limited to 2**20 blocks, but no longer since the frontend +// rewrite. The exact limit-testing here should all pass now, not pass for +// 2**20 - 1 and fail for 2**20. +var s = "{}"; +for (var i = 0; i < 21; i++) + s += s; + +try { + eval(s); + actual = "pass"; +} catch (e) { + actual = "fail: " + e; +} + +assert.sameValue(actual, expect); + +s += s.slice(0, -4); + +try { + eval(s); + actual = "pass"; +} catch (e) { + actual = "fail: " + e; +} + +assert.sameValue(actual, expect); + +s += "{}"; + +try { + eval(s); + actual = "pass"; +} catch (e) { + actual = "fail: " + e; +} + +assert.sameValue(actual, expect); + diff --git a/test/staging/sm/regress/regress-617405-1.js b/test/staging/sm/regress/regress-617405-1.js new file mode 100644 index 0000000000..12fc67f17d --- /dev/null +++ b/test/staging/sm/regress/regress-617405-1.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function C(){} +C.prototype = 1; +assert.sameValue(Object.getOwnPropertyDescriptor(C, "prototype").configurable, false); + diff --git a/test/staging/sm/regress/regress-617405-2.js b/test/staging/sm/regress/regress-617405-2.js new file mode 100644 index 0000000000..122d33d3f8 --- /dev/null +++ b/test/staging/sm/regress/regress-617405-2.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function C(){} +C.prototype = 1; +try { + Object.defineProperty(C, "prototype", {get: function() { throw 0; }}); + actual = "no exception"; +} catch (exc) { + actual = exc.name; +} +new C; // don't assert +assert.sameValue(actual, "TypeError"); diff --git a/test/staging/sm/regress/regress-618572.js b/test/staging/sm/regress/regress-618572.js new file mode 100644 index 0000000000..cd7250fb6e --- /dev/null +++ b/test/staging/sm/regress/regress-618572.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 618572; +var summary = 'Do not assert when ungetting a Unicode char sequence'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'SyntaxError'; + + try + { + eval("var a\\0021 = 3;"); + } + catch(ex) + { + actual = ex.constructor.name; + } + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/regress/regress-619003-1.js b/test/staging/sm/regress/regress-619003-1.js new file mode 100644 index 0000000000..3f3aa45562 --- /dev/null +++ b/test/staging/sm/regress/regress-619003-1.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = []; + +// Test up to 200 to cover tunables such as js::PropertyTree::MAX_HEIGHT. +for (var i = 0; i < 200; i++) { + a.push("b" + i); + assertThrowsInstanceOfWithMessage( + () => eval("(function ([" + a.join("],[") + "],a,a){})"), + SyntaxError, + 'duplicate argument names not allowed in this context'); +} diff --git a/test/staging/sm/regress/regress-619003-2.js b/test/staging/sm/regress/regress-619003-2.js new file mode 100644 index 0000000000..293d030f1b --- /dev/null +++ b/test/staging/sm/regress/regress-619003-2.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = "global"; +var actual = expect; +function f([actual]) { } +f(["local"]); +assert.sameValue(expect, actual, "ok"); diff --git a/test/staging/sm/regress/regress-624547.js b/test/staging/sm/regress/regress-624547.js new file mode 100644 index 0000000000..3e988aeec0 --- /dev/null +++ b/test/staging/sm/regress/regress-624547.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f(x) { + delete arguments[0]; + for(var i=0; i<20; i++) { + arguments[0] !== undefined; + } +} + +/* Don't crash. */ +f(1); + diff --git a/test/staging/sm/regress/regress-624968.js b/test/staging/sm/regress/regress-624968.js new file mode 100644 index 0000000000..aa13f15ea2 --- /dev/null +++ b/test/staging/sm/regress/regress-624968.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +try { + new {prototype: TypeError.prototype}; +} catch (e) {} + diff --git a/test/staging/sm/regress/regress-626436.js b/test/staging/sm/regress/regress-626436.js new file mode 100644 index 0000000000..106df5718d --- /dev/null +++ b/test/staging/sm/regress/regress-626436.js @@ -0,0 +1,15 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(1 ? 2 : delete(0 ? 0 : {})).x; + diff --git a/test/staging/sm/regress/regress-633741.js b/test/staging/sm/regress/regress-633741.js new file mode 100644 index 0000000000..565d098a48 --- /dev/null +++ b/test/staging/sm/regress/regress-633741.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +info: | + preventExtensions on global +description: | + pending +esid: pending +---*/ +Object.preventExtensions(this); +delete Function; + +try { + /* Don't assert. */ + Object.getOwnPropertyNames(this); +} catch(e) { + assert.sameValue(true, false, "this shouldn't have thrown"); +} diff --git a/test/staging/sm/regress/regress-634210-1.js b/test/staging/sm/regress/regress-634210-1.js new file mode 100644 index 0000000000..1a445c3802 --- /dev/null +++ b/test/staging/sm/regress/regress-634210-1.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f() {} +f.p = function() {}; +Object.freeze(f); +f.p; + diff --git a/test/staging/sm/regress/regress-634210-2.js b/test/staging/sm/regress/regress-634210-2.js new file mode 100644 index 0000000000..c5bd5a87fd --- /dev/null +++ b/test/staging/sm/regress/regress-634210-2.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = []; +for (var i = 0; i < 2; i++) { + a[i] = {m: function () {}}; + Object.defineProperty(a[i], "m", {writable: false}); +} +assert.sameValue(a[0].m === a[1].m, false); + diff --git a/test/staging/sm/regress/regress-634210-3.js b/test/staging/sm/regress/regress-634210-3.js new file mode 100644 index 0000000000..4ae4721cf8 --- /dev/null +++ b/test/staging/sm/regress/regress-634210-3.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var a = []; +for (var i = 0; i < 2; i++) { + a[i] = {m: function () {}}; + Object.defineProperty(a[i], "m", {configurable: false}); +} +assert.sameValue(a[0].m === a[1].m, false); + diff --git a/test/staging/sm/regress/regress-634210-4.js b/test/staging/sm/regress/regress-634210-4.js new file mode 100644 index 0000000000..ac7a7e092e --- /dev/null +++ b/test/staging/sm/regress/regress-634210-4.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function outer() { + function f() {} + f.p = function() {}; + Object.seal(f); + return f.p; +} + +var m1 = outer(); +var m2 = outer(); +assert.sameValue(m1 === m2, false); + +m1.foo = "hi"; +assert.sameValue(m2.foo, undefined); + diff --git a/test/staging/sm/regress/regress-636364.js b/test/staging/sm/regress/regress-636364.js new file mode 100644 index 0000000000..77349f5be0 --- /dev/null +++ b/test/staging/sm/regress/regress-636364.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof createNewGlobal == 'function') { + var gsame = createNewGlobal('same-compartment'); + + gsame.eval("function f() { return this; }"); + f = gsame.f; + assert.sameValue(f(), gsame); + + gsame.eval("function g() { 'use strict'; return this; }"); + g = gsame.g; + assert.sameValue(g(), undefined); + + var gnew = createNewGlobal(); + + gnew.eval("function f() { return this; }"); + f = gnew.f; + assert.sameValue(f(), gnew); + + gnew.eval("function g() { 'use strict'; return this; }"); + g = gnew.g; + assert.sameValue(g(), undefined); +} + diff --git a/test/staging/sm/regress/regress-640075.js b/test/staging/sm/regress/regress-640075.js new file mode 100644 index 0000000000..0a70dc8dc3 --- /dev/null +++ b/test/staging/sm/regress/regress-640075.js @@ -0,0 +1,19 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +flags: +- onlyStrict +includes: [sm/non262-shell.js, sm/non262.js] +description: | + pending +esid: pending +---*/ +"use strict"; +assertThrowsInstanceOf( + () => eval("(function() { eval(); function eval() {} })"), + SyntaxError +) + diff --git a/test/staging/sm/regress/regress-642247.js b/test/staging/sm/regress/regress-642247.js new file mode 100644 index 0000000000..c295054e92 --- /dev/null +++ b/test/staging/sm/regress/regress-642247.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +if (typeof timeout == "function") { + assert.sameValue(typeof timeout(), "number"); + assert.sameValue(typeof timeout(1), "undefined"); +} + diff --git a/test/staging/sm/regress/regress-643222.js b/test/staging/sm/regress/regress-643222.js new file mode 100644 index 0000000000..19494665b7 --- /dev/null +++ b/test/staging/sm/regress/regress-643222.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* This shouldn't trigger an assertion. */ +(function () { + eval("var x=delete(x)") +})(); + diff --git a/test/staging/sm/regress/regress-646820-1.js b/test/staging/sm/regress/regress-646820-1.js new file mode 100644 index 0000000000..d8a90e365f --- /dev/null +++ b/test/staging/sm/regress/regress-646820-1.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(function () { + var [x, y] = [1, function () { return x; }]; + assert.sameValue(y(), 1); +})(); + diff --git a/test/staging/sm/regress/regress-646820-2.js b/test/staging/sm/regress/regress-646820-2.js new file mode 100644 index 0000000000..db16515ee1 --- /dev/null +++ b/test/staging/sm/regress/regress-646820-2.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(function () { + var obj = {prop: 1}; + var [x, {prop: y}] = [function () { return y; }, obj]; + assert.sameValue(y, 1); + assert.sameValue(x(), 1); +})(); + diff --git a/test/staging/sm/regress/regress-646820-3.js b/test/staging/sm/regress/regress-646820-3.js new file mode 100644 index 0000000000..39c19e33c2 --- /dev/null +++ b/test/staging/sm/regress/regress-646820-3.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +(function () { + var [x, y] = [function () { return y; }, 13]; + assert.sameValue(x(), 13); +})(); + diff --git a/test/staging/sm/regress/regress-665355.js b/test/staging/sm/regress/regress-665355.js new file mode 100644 index 0000000000..3cefac3010 --- /dev/null +++ b/test/staging/sm/regress/regress-665355.js @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var x = new ArrayBuffer(2); + +var test = function(newProto) { +try { + x.__proto__ = newProto; + return false; +} catch(e) { + return true; +} +} + +// assert cycle doesn't work +assert.sameValue(test(x), true); + +// works +assert.sameValue(test({}), false); +assert.sameValue(test(null), false); + diff --git a/test/staging/sm/regress/regress-672892.js b/test/staging/sm/regress/regress-672892.js new file mode 100644 index 0000000000..2d5470673d --- /dev/null +++ b/test/staging/sm/regress/regress-672892.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +with (0) + for (var b in 0) // don't assert in parser + ; + diff --git a/test/staging/sm/regress/regress-672893.js b/test/staging/sm/regress/regress-672893.js new file mode 100644 index 0000000000..78a4865469 --- /dev/null +++ b/test/staging/sm/regress/regress-672893.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function f() { + return function () { return function () { return function () { + return function () { return function () { return function () { + return function () { return function () { return function () { + return function () { return function () { return function () { + return function () { return function () { return function (a) { + var v = a; + assert.sameValue(v, 42); + return function() { return v; }; + }; }; }; }; }; }; }; }; }; }; }; }; }; }; }; +}; + +assert.sameValue(f()()()()()()()()()()()()()()()(42)(), 42); + diff --git a/test/staging/sm/regress/regress-694306.js b/test/staging/sm/regress/regress-694306.js new file mode 100644 index 0000000000..9f6bf0f0bf --- /dev/null +++ b/test/staging/sm/regress/regress-694306.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var x; +try { + eval("var {if} = {'if': 1};"); +} catch (exc) { + x = exc; +} +assert.sameValue(x instanceof SyntaxError, true); +assert.sameValue("if" in this, false); + +x = undefined; +try { + Function("var {if} = {'if': 1};"); +} catch (exc) { + x = exc; +} +assert.sameValue(x instanceof SyntaxError, true); + diff --git a/test/staging/sm/regress/regress-698028-1.js b/test/staging/sm/regress/regress-698028-1.js new file mode 100644 index 0000000000..ca1a189e8f --- /dev/null +++ b/test/staging/sm/regress/regress-698028-1.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +{ + let x00, x01, x02, x03, x04, x05, x06, x07, x08, x09, x0a, x0b, x0c, x0d, x0e, x0f, + x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x1a, x1b, x1c, x1d, x1e, x1f, + x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x2a, x2b, x2c, x2d, x2e, x2f, + x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x3a, x3b, x3c, x3d, x3e, x3f, + x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x4a, x4b, x4c, x4d, x4e, x4f, + x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x5a, x5b, x5c, x5d, x5e, x5f, + x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x6a, x6b, x6c, x6d, x6e, x6f, + x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x7a, x7b, x7c, x7d, x7e, x7f, + x80, x81, x82, x83, x84, x85, x86, x87, x88, x89, x8a, x8b, x8c, x8d, x8e, x8f, + x90, x91, x92, x93, x94, x95, x96, x97, x98, x99, x9a, x9b, x9c, x9d, x9e, x9f, + xa0, xa1, xa2, xa3, xa4, xa5, xa6, xa7, xa8, xa9, xaa, xab, xac, xad, xae, xaf, + xb0, xb1, xb2, xb3, xb4, xb5, xb6, xb7, xb8, xb9, xba, xbb, xbc, xbd, xbe, xbf, + xc0, xc1, xc2, xc3, xc4, xc5, xc6, xc7, xc8, xc9, xca, xcb, xcc, xcd, xce, xcf, + xd0, xd1, xd2, xd3, xd4, xd5, xd6, xd7, xd8, xd9, xda, xdb, xdc, xdd, xde, xdf, + xe0, xe1, xe2, xe3, xe4, xe5, xe6, xe7, xe8, xe9, xea, xeb, xec, xed, xee, xef, + xf0, xf1, xf2, xf3, xf4, xf5, xf6, xf7, xf8, xf9, xfa, xfb, xfc, xfd, xfe, xff; + eval(""); +} + diff --git a/test/staging/sm/regress/regress-699682.js b/test/staging/sm/regress/regress-699682.js new file mode 100644 index 0000000000..f96ba5f306 --- /dev/null +++ b/test/staging/sm/regress/regress-699682.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Don't assert trying to parse any of these. +var a = ["({''})", + "({''} = {})", + "var {''};", + "var {'', a} = {a: 0};", + "var {'bad'};", + "({'bad'} = {bad: 0});", + "var {'if'};", + "function f({''}) {}", + "function f({a, 'bad', c}) {}"]; + +var x; +for (var i = 0; i < a.length; i++) { + x = undefined; + try { + eval(a[i]); + } catch (exc) { + x = exc; + } + assert.sameValue(x instanceof SyntaxError, true); +} +assert.sameValue("" in this, false); +assert.sameValue("bad" in this, false); +assert.sameValue("if" in this, false); + diff --git a/test/staging/sm/regress/regress-810525.js b/test/staging/sm/regress/regress-810525.js new file mode 100644 index 0000000000..141e8466ab --- /dev/null +++ b/test/staging/sm/regress/regress-810525.js @@ -0,0 +1,29 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var expect = ''; +var actual = ''; + +function test(s) { + assertThrowsInstanceOfWithMessageCheck( + () => eval(s), + Error, + message => message.indexOf('(intermediate value)') === -1, + `error message for ${s} should not contain '(intermediate value)'`); +} + +test("({p:1, q:2}).m()"); +test("[].m()"); +test("[1,2,3].m()"); +test("/hi/.m()"); + diff --git a/test/staging/sm/statements/arrow-function-at-end-of-for-statement-head.js b/test/staging/sm/statements/arrow-function-at-end-of-for-statement-head.js new file mode 100644 index 0000000000..3708127018 --- /dev/null +++ b/test/staging/sm/statements/arrow-function-at-end-of-for-statement-head.js @@ -0,0 +1,71 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var gTestfile = "arrow-function-in-for-statement-head.js"; +var BUGNUMBER = 1302994; +var summary = + "Don't assert when an arrow function occurs at the end of a declaration " + + "init-component of a for(;;) loop head"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function f1() +{ + for (var x = a => b; false; false) + {} +} +f1(); + +function f2() +{ + for (var x = a => b, y = c => d; false; false) + {} +} +f2(); + +function f3() +{ + for (var x = a => {}; false; false) + {} +} +f3(); + +function f4() +{ + for (var x = a => {}, y = b => {}; false; false) + {} +} +f4(); + +function g1() +{ + for (a => b; false; false) + {} +} +g1(); + +function g2() +{ + for (a => {}; false; false) + {} +} +g2(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/arrow-function-in-for-statement-head.js b/test/staging/sm/statements/arrow-function-in-for-statement-head.js new file mode 100644 index 0000000000..c39e58112a --- /dev/null +++ b/test/staging/sm/statements/arrow-function-in-for-statement-head.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var gTestfile = "arrow-function-in-for-statement-head.js"; +var BUGNUMBER = 1163851; +var summary = + "|for (x => 0 in 1;;) break;| must be a syntax error per ES6, not an " + + "elaborate nop"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + Function("for (x => 0 in 1;;) break;"); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, + "expected syntax error, got " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/for-in-with-declaration.js b/test/staging/sm/statements/for-in-with-declaration.js new file mode 100644 index 0000000000..1b5ee31313 --- /dev/null +++ b/test/staging/sm/statements/for-in-with-declaration.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var gTestfile = "for-in-with-declaration.js"; +var BUGNUMBER = 1163851; +var summary = + "Declarations in for-in loop heads must not contain |in|-expression " + + "initializers"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertThrowsInstanceOf(() => Function("for (var x = 3 in {}; ; ) break;"), SyntaxError); +assertThrowsInstanceOf(() => Function("for (var x, y = 3 in {}; ; ) break;"), SyntaxError); +assertThrowsInstanceOf(() => Function("for (var x = 5, y = 3 in {}; ; ) break;"), SyntaxError); +assertThrowsInstanceOf(() => Function("for (const x = 3 in {}; ; ) break;"), SyntaxError); +assertThrowsInstanceOf(() => Function("for (const x = 5, y = 3 in {}; ; ) break;"), SyntaxError); +assertThrowsInstanceOf(() => Function("for (let x = 3 in {}; ; ) break;"), SyntaxError); +assertThrowsInstanceOf(() => Function("for (let x, y = 3 in {}; ; ) break;"), SyntaxError); +assertThrowsInstanceOf(() => Function("for (let x = 2, y = 3 in {}; ; ) break;"), SyntaxError); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/for-in-with-gc-and-unvisited-deletion.js b/test/staging/sm/statements/for-in-with-gc-and-unvisited-deletion.js new file mode 100644 index 0000000000..16aa5620de --- /dev/null +++ b/test/staging/sm/statements/for-in-with-gc-and-unvisited-deletion.js @@ -0,0 +1,83 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var gTestfile = "for-in-with-gc-and-unvisited-deletion.js"; +var BUGNUMBER = 1462939; +var summary = + "Don't mishandle deletion of a property from the internal iterator " + + "created for a for-in loop, when a gc occurs just after it"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testOneDeletion() +{ + var o = { + p: 1, + r: 3, + s: 4, + }; + + for (var i in o) + { + gc(); + delete o.s; + } +} +testOneDeletion(); + +function testTwoDeletions() +{ + var o = { + p: 1, + r: 3, + s: 4, + t: 5, + }; + + for (var i in o) + { + gc(); + delete o.t; + delete o.s; + } +} +testTwoDeletions(); + +function testThreeDeletions() +{ + var o = { + p: 1, + r: 3, + s: 4, + t: 5, + x: 7, + }; + + for (var i in o) + { + gc(); + delete o.x; + delete o.t; + delete o.s; + } +} +testThreeDeletions(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/for-inof-finally.js b/test/staging/sm/statements/for-inof-finally.js new file mode 100644 index 0000000000..9e2e270cc8 --- /dev/null +++ b/test/staging/sm/statements/for-inof-finally.js @@ -0,0 +1,87 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1332881; +var summary = + "Leaving for-in and try should handle stack value in correct order"; + +print(BUGNUMBER + ": " + summary); + +var called = 0; +function reset() { + called = 0; +} +var obj = { + [Symbol.iterator]() { + return { + next() { + return { value: 10, done: false }; + }, + return() { + called++; + return {}; + } + }; + } +}; + +var a = (function () { + for (var x in [0]) { + try {} finally { + return 11; + } + } +})(); +assert.sameValue(a, 11); + +reset(); +var b = (function () { + for (var x of obj) { + try {} finally { + return 12; + } + } +})(); +assert.sameValue(called, 1); +assert.sameValue(b, 12); + +reset(); +var c = (function () { + for (var x in [0]) { + for (var y of obj) { + try {} finally { + return 13; + } + } + } +})(); +assert.sameValue(called, 1); +assert.sameValue(c, 13); + +reset(); +var d = (function () { + for (var x in [0]) { + for (var y of obj) { + try {} finally { + for (var z in [0]) { + for (var w of obj) { + try {} finally { + return 14; + } + } + } + } + } + } +})(); +assert.sameValue(called, 2); +assert.sameValue(d, 14); + diff --git a/test/staging/sm/statements/for-inof-loop-const-declaration.js b/test/staging/sm/statements/for-inof-loop-const-declaration.js new file mode 100644 index 0000000000..d555562009 --- /dev/null +++ b/test/staging/sm/statements/for-inof-loop-const-declaration.js @@ -0,0 +1,99 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "for-inof-loop-const-declaration.js"; +var BUGNUMBER = 1278150; +var summary = "Support const declarations in for-of loop heads"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var count; + +count = 0; +for (const x in "abcdef") +{ + assert.sameValue(x, "" + count++); + + try + { + x = 3; + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "didn't get a TypeError, instead got: " + e); + } +} + +count = 0; +for (const x of "012345") +{ + assert.sameValue(x, "" + count++); + + try + { + x = 3; + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "didn't get a TypeError, instead got: " + e); + } +} + +count = 0; +for (const { length, 0: c } in "abcdef") +{ + assert.sameValue(length, 1); + assert.sameValue(c, "" + count++); + + + try + { + length = 1; + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "didn't get a TypeError, instead got: " + e); + } +} + +count = 0; +for (const { length, 0: c } of "012345") +{ + assert.sameValue(length, 1); + assert.sameValue(c, "" + count++); + + try + { + c = 42; + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof TypeError, true, + "didn't get a TypeError, instead got: " + e); + } +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/for-inof-name-iteration-expression-contains-index-string.js b/test/staging/sm/statements/for-inof-name-iteration-expression-contains-index-string.js new file mode 100644 index 0000000000..72802484fc --- /dev/null +++ b/test/staging/sm/statements/for-inof-name-iteration-expression-contains-index-string.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var gTestfile = "for-inof-name-iteration-expression-contains-index-string.js"; +var BUGNUMBER = 1235640; +var summary = + "Don't assert parsing a for-in/of loop whose target is a name, where the " + + "expression being iterated over contains a string containing an index"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function f() +{ + var x; + for (x in "9") + continue; + assert.sameValue(x, "0"); +} + +f(); + +function g() +{ + "use strict"; + var x = "unset"; + for (x in arguments) + continue; + assert.sameValue(x, "unset"); +} + +g(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/for-loop-declaration-contains-computed-name.js b/test/staging/sm/statements/for-loop-declaration-contains-computed-name.js new file mode 100644 index 0000000000..ca575be9f2 --- /dev/null +++ b/test/staging/sm/statements/for-loop-declaration-contains-computed-name.js @@ -0,0 +1,53 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "for-loop-declaration-contains-computed-name.js"; +var BUGNUMBER = 1233767; +var summary = + "Support computed property names in destructuring declarations in " + + "for-in/of loop heads"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var count; + +count = 0; +for (var { [5]: x, [x]: y } of [{ 5: 42, 42: "hi" }, { 5: 17, 17: 'fnord' }]) +{ + if (count === 0) { + assert.sameValue(x, 42); + assert.sameValue(y, "hi"); + } else { + assert.sameValue(x, 17); + assert.sameValue(y, "fnord"); + } + + count++; +} + +count = 0; +for (var { length: x, [x - 1]: y } in "foo") +{ + assert.sameValue(x, 1); + assert.sameValue("" + count, y); + + count++; +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/for-loop-declaration-contains-initializer.js b/test/staging/sm/statements/for-loop-declaration-contains-initializer.js new file mode 100644 index 0000000000..e09850e797 --- /dev/null +++ b/test/staging/sm/statements/for-loop-declaration-contains-initializer.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "for-loop-declaration-contains-computed-name.js"; +var BUGNUMBER = 1233767; +var summary = + "Support initializer defaults in destructuring declarations in for-in/of " + + "loop heads"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var count; +var expr; + +expr = [{ z: 42, 42: "hi" }, { 7: 'fnord' }]; +count = 0; +for (var { z: x = 7, [x]: y = 3 } of expr) +{ + if (count === 0) { + assert.sameValue(x, 42); + assert.sameValue(y, "hi"); + } else { + assert.sameValue(x, 7); + assert.sameValue(y, "fnord"); + } + + count++; +} + +count = 0; +for (var { length: x, [x - 1 + count]: y = "psych" } in "foo") +{ + assert.sameValue(x, 1); + assert.sameValue(y, count === 0 ? "0" : "psych"); + + count++; +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/for-of-iterator-close-throw.js b/test/staging/sm/statements/for-of-iterator-close-throw.js new file mode 100644 index 0000000000..c5fe8a1add --- /dev/null +++ b/test/staging/sm/statements/for-of-iterator-close-throw.js @@ -0,0 +1,44 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function test() { + var returnCalled = 0; + var returnCalledExpected = 0; + var catchEntered = 0; + var finallyEntered = 0; + var finallyEnteredExpected = 0; + var iterable = {}; + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + throw 42; + } + }); + + // inner try cannot catch IteratorClose throwing + assertThrowsValue(function() { + for (var x of iterable) { + try { + return; + } catch (e) { + catchEntered++; + } finally { + finallyEntered++; + } + } + }, 42); + assert.sameValue(returnCalled, ++returnCalledExpected); + assert.sameValue(catchEntered, 0); + assert.sameValue(finallyEntered, ++finallyEnteredExpected); +} + +test(); + diff --git a/test/staging/sm/statements/for-of-iterator-close.js b/test/staging/sm/statements/for-of-iterator-close.js new file mode 100644 index 0000000000..3aefd1f2ce --- /dev/null +++ b/test/staging/sm/statements/for-of-iterator-close.js @@ -0,0 +1,111 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Tests that IteratorReturn is called when a for-of loop has an abrupt +// completion value during non-iterator code. + +function test() { + var returnCalled = 0; + var returnCalledExpected = 0; + var iterable = {}; + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return {}; + } + }); + + // break calls iter.return + for (var x of iterable) + break; + assert.sameValue(returnCalled, ++returnCalledExpected); + + // throw in body calls iter.return + assertThrowsValue(function() { + for (var x of iterable) + throw "in body"; + }, "in body"); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // throw in lhs ref calls iter.return + function throwlhs() { + throw "in lhs"; + } + assertThrowsValue(function() { + for ((throwlhs()) of iterable) + continue; + }, "in lhs"); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // throw in iter.return doesn't re-call iter.return + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + throw "in iter.return"; + } + }); + assertThrowsValue(function() { + for (var x of iterable) + break; + }, "in iter.return"); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // throw in iter.next doesn't call IteratorClose + iterable[Symbol.iterator] = makeIterator({ + next: function() { + throw "in next"; + } + }); + assertThrowsValue(function() { + for (var x of iterable) + break; + }, "in next"); + assert.sameValue(returnCalled, returnCalledExpected); + + // "return" must return an Object. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return 42; + } + }); + assertThrowsInstanceOf(function() { + for (var x of iterable) + break; + }, TypeError); + assert.sameValue(returnCalled, ++returnCalledExpected); + + // continue doesn't call iter.return for the loop it's continuing + var i = 0; + iterable[Symbol.iterator] = makeIterator({ + next: function() { + return { done: i++ > 5 }; + }, + ret: function() { + returnCalled++; + return {}; + } + }); + for (var x of iterable) + continue; + assert.sameValue(returnCalled, returnCalledExpected); + + // continue does call iter.return for loops it skips + i = 0; + L: do { + for (var x of iterable) + continue L; + } while (false); + assert.sameValue(returnCalled, ++returnCalledExpected); +} + +test(); + diff --git a/test/staging/sm/statements/for-of-iterator-primitive.js b/test/staging/sm/statements/for-of-iterator-primitive.js new file mode 100644 index 0000000000..41fe1e76cb --- /dev/null +++ b/test/staging/sm/statements/for-of-iterator-primitive.js @@ -0,0 +1,37 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 1021835; +var summary = "Returning non-object from @@iterator should throw"; + +print(BUGNUMBER + ": " + summary); + +let primitives = [ + 1, + true, + undefined, + null, + "foo", + Symbol.iterator +]; + +for (let primitive of primitives) { + let obj = { + [Symbol.iterator]() { + return primitive; + } + }; + assertThrowsInstanceOf(() => { + for (let x of obj) { + } + }, TypeError); +} + diff --git a/test/staging/sm/statements/for-of-var-with-initializer.js b/test/staging/sm/statements/for-of-var-with-initializer.js new file mode 100644 index 0000000000..05f49b2c20 --- /dev/null +++ b/test/staging/sm/statements/for-of-var-with-initializer.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = "for-of-var-with-initializer.js"; +var BUGNUMBER = 1164741; +var summary = "Don't assert parsing |for (var x = 3 of 42);|"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + Function("for (var x = 3 of 42);"); + throw new Error("didn't throw"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, + "expected syntax error, got: " + e); +} + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/if-constant-folding.js b/test/staging/sm/statements/if-constant-folding.js new file mode 100644 index 0000000000..80a2c08d61 --- /dev/null +++ b/test/staging/sm/statements/if-constant-folding.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var gTestfile = "if-constant-folding.js"; +var BUGNUMBER = 1183400; +var summary = + "Don't crash constant-folding an |if| governed by a truthy constant, whose " + + "alternative statement is another |if|"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Perform |if| constant folding correctly when the condition is constantly +// truthy and the alternative statement is another |if|. +if (true) +{ + assert.sameValue(true, true, "sanity"); +} +else if (42) +{ + assert.sameValue(false, true, "not reached"); + assert.sameValue(true, false, "also not reached"); +} + + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/statements/property-reference-self-assignment.js b/test/staging/sm/statements/property-reference-self-assignment.js new file mode 100644 index 0000000000..020eb92307 --- /dev/null +++ b/test/staging/sm/statements/property-reference-self-assignment.js @@ -0,0 +1,47 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var hits = 0; + +var p = { toString() { hits++; return "prop" } }; +var obj = { foo: 1 }; + + +var ops = [["obj[p]++", 2], + ["++obj[p]", 2], + ["--obj[p]", 0], + ["obj[p]--", 0], + ["obj[p] += 2", 3], + ["obj[p] -= 2", -1], + ["obj[p] *= 2", 2], + ["obj[p] /= 2", 0.5], + ["obj[p] %= 2", 1], + ["obj[p] >>>= 2", 0], + ["obj[p] >>= 2", 0], + ["obj[p] <<= 2", 4], + ["obj[p] |= 2", 3], + ["obj[p] ^= 2", 3], + ["obj[p] &= 2", 0]]; + +var testHits = 0; +for (let op of ops) { + // Seed the value for each test. + obj.prop = 1; + + // Do the operation. + eval(op[0]); + assert.sameValue(obj.prop, op[1], `value for ${op[0]}`); + + // We should always call toString once, for each operation. + testHits++; + assert.sameValue(hits, testHits, `toString calls for ${op[0]}`); +} + diff --git a/test/staging/sm/statements/regress-642975.js b/test/staging/sm/statements/regress-642975.js new file mode 100644 index 0000000000..f3ea298696 --- /dev/null +++ b/test/staging/sm/statements/regress-642975.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var x = 0; +var y = 1; +var g = 1; + +var expect = "y"; +var actual; + +try { + eval("y: while (x) break\n/y/g.exec('y')"); + actual = RegExp.lastMatch; +} catch (e) { + actual = '' + e; +} +assert.sameValue(actual, expect); + +try { + eval("y: while (x) continue\n/y/g.exec('y')"); + actual = RegExp.lastMatch; +} catch (e) { + actual = '' + e; +} +assert.sameValue(actual, expect); + diff --git a/test/staging/sm/statements/try-completion.js b/test/staging/sm/statements/try-completion.js new file mode 100644 index 0000000000..f631a03c0f --- /dev/null +++ b/test/staging/sm/statements/try-completion.js @@ -0,0 +1,491 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BUGNUMBER = 819125; +var summary = "try block should return try value if finally returned normally"; + +print(BUGNUMBER + ": " + summary); + +function expectTryValue(code, isUndefined) { + assert.sameValue(eval(code), isUndefined ? undefined : 'try'); +} + +function expectCatchValue(code, isUndefined) { + assert.sameValue(eval(code), isUndefined ? undefined : 'catch'); +} + +function expectFinallyValue(code, isUndefined) { + assert.sameValue(eval(code), isUndefined ? undefined : 'finally'); +} + +// ==== finally: normal ==== + +// try: normal +// finally: normal +expectTryValue(` +try { + 'try'; +} finally { + 'finally'; +} +`); + +// try: normal without value +// finally: normal +expectTryValue(` +try { +} finally { + 'finally'; +} +`, true); + +// try: break +// finally: normal +expectTryValue(` +while (true) { + try { + 'try'; + break; + } finally { + 'finally'; + } +} +`); + +// try: break without value +// finally: normal +expectTryValue(` +while (true) { + try { + break; + } finally { + 'finally'; + } +} +`, true); + +// try: continue +// finally: normal +expectTryValue(` +do { + try { + 'try'; + continue; + } finally { + 'finally'; + } +} while (false); +`); + +// try: continue without value +// finally: normal +expectTryValue(` +do { + try { + continue; + } finally { + 'finally'; + } +} while (false); +`, true); + +// try: throw +// catch: normal +// finally: normal +expectCatchValue(` +try { + 'try'; + throw 'exception'; +} catch (e) { + 'catch'; +} finally { + 'finally'; +} +`); + +// try: throw +// catch: normal +// finally: normal +expectCatchValue(` +try { + 'try'; + throw 'exception'; +} catch (e) { + 'catch'; +} finally { + 'finally'; +} +`); + +// try: throw +// catch: normal without value +// finally: normal +expectCatchValue(` +try { + 'try'; + throw 'exception'; +} catch (e) { +} finally { + 'finally'; +} +`, true); + +// try: throw +// catch: normal without value +// finally: normal +expectCatchValue(` +try { + 'try'; + throw 'exception'; +} catch (e) { +} finally { + 'finally'; +} +`, true); + +// try: throw +// catch: break +// finally: normal +expectCatchValue(` +while (true) { + try { + 'try'; + throw 'exception'; + } catch (e) { + 'catch'; + break; + } finally { + 'finally'; + } +} +`); + +// try: throw +// catch: break without value +// finally: normal +expectCatchValue(` +while (true) { + try { + 'try'; + throw 'exception'; + } catch (e) { + break; + } finally { + 'finally'; + } +} +`, true); + +// try: throw +// catch: continue +// finally: normal +expectCatchValue(` +do { + try { + 'try'; + throw 'exception'; + } catch (e) { + 'catch'; + continue; + } finally { + 'finally'; + } +} while (false); +`); + +// try: throw +// catch: continue without value +// finally: normal +expectCatchValue(` +do { + try { + 'try'; + throw 'exception'; + } catch (e) { + continue; + } finally { + 'finally'; + } +} while (false); +`, true); + +// ==== finally: break ==== + +// try: normal +// finally: break +expectFinallyValue(` +while (true) { + try { + 'try'; + } finally { + 'finally'; + break; + } +} +`); + +// try: normal +// finally: break without value +expectFinallyValue(` +while (true) { + try { + 'try'; + } finally { + break; + } +} +`, true); + +// try: break +// finally: break +expectFinallyValue(` +while (true) { + try { + 'try'; + break; + } finally { + 'finally'; + break; + } +} +`); + +// try: break +// finally: break without value +expectFinallyValue(` +while (true) { + try { + 'try'; + break; + } finally { + break; + } +} +`, true); + +// try: continue +// finally: break +expectFinallyValue(` +do { + try { + 'try'; + continue; + } finally { + 'finally'; + break; + } +} while (false); +`); + +// try: continue +// finally: break without value +expectFinallyValue(` +do { + try { + 'try'; + continue; + } finally { + break; + } +} while (false); +`, true); + +// try: throw +// catch: normal +// finally: break +expectFinallyValue(` +while (true) { + try { + 'try'; + throw 'exception'; + } catch (e) { + 'catch'; + } finally { + 'finally'; + break; + } +} +`, false); + +// try: throw +// catch: normal +// finally: break without value +expectFinallyValue(` +while (true) { + try { + 'try'; + throw 'exception'; + } catch (e) { + 'catch'; + } finally { + break; + } +} +`, true); + +// ==== finally: continue ==== + +// try: normal +// finally: continue +expectFinallyValue(` +do { + try { + 'try'; + } finally { + 'finally'; + continue; + } +} while (false); +`); + +// try: normal +// finally: continue without value +expectFinallyValue(` +do { + try { + 'try'; + } finally { + continue; + } +} while (false); +`, true); + +// try: break +// finally: continue +expectFinallyValue(` +do { + try { + 'try'; + break; + } finally { + 'finally'; + continue; + } +} while (false); +`); + +// try: break +// finally: continue without value +expectFinallyValue(` +do { + try { + 'try'; + break; + } finally { + continue; + } +} while (false); +`, true); + +// try: continue +// finally: continue +expectFinallyValue(` +do { + try { + 'try'; + continue; + } finally { + 'finally'; + continue; + } +} while (false); +`); + +// try: continue +// finally: continue without value +expectFinallyValue(` +do { + try { + 'try'; + continue; + } finally { + continue; + } +} while (false); +`, true); + +// ==== without finally ==== + +// try: throw +// catch: normal +expectCatchValue(` +try { + 'try'; + throw 'exception'; +} catch (e) { + 'catch'; +} +`); + +// try: throw +// catch: normal without value +expectCatchValue(` +try { + 'try'; + throw 'exception'; +} catch (e) { +} +`, true); + +// try: throw +// catch: break +expectCatchValue(` +while (true) { + try { + 'try'; + throw 'exception'; + } catch (e) { + 'catch'; + break; + } +} +`); + +// try: throw +// catch: break without value +expectCatchValue(` +while (true) { + try { + 'try'; + throw 'exception'; + } catch (e) { + break; + } +} +`, true); + +// try: throw +// catch: continue +expectCatchValue(` +do { + try { + 'try'; + throw 'exception'; + } catch (e) { + 'catch'; + continue; + } +} while (false); +`); + +// try: throw +// catch: continue without value +expectCatchValue(` +do { + try { + 'try'; + throw 'exception'; + } catch (e) { + continue; + } +} while (false); +`, true); + diff --git a/test/staging/sm/strict/10.4.2.js b/test/staging/sm/strict/10.4.2.js new file mode 100644 index 0000000000..9b15aeb998 --- /dev/null +++ b/test/staging/sm/strict/10.4.2.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Direct calls to eval should inherit the strictness of the calling code. */ +assert.sameValue(testLenientAndStrict("eval('010')", + completesNormally, + raisesException(SyntaxError)), + true); + +/* + * Directives in the eval code itself should always override a direct + * caller's strictness. + */ +assert.sameValue(testLenientAndStrict("eval('\"use strict\"; 010')", + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); + +/* Code passed to indirect calls to eval should never be strict. */ +assert.sameValue(testLenientAndStrict("var evil=eval; evil('010')", + completesNormally, + completesNormally), + true); + +/* + * Code passed to the Function constructor never inherits the caller's + * strictness. + */ +assert.sameValue(completesNormally("Function('010')"), + true); +assert.sameValue(raisesException(SyntaxError)("Function('\"use strict\"; 010')"), + true); + +/* + * If 'eval' causes a frame's primitive |this| to become wrapped, the frame should see the same + * wrapper object as the eval code. + */ +var call_this, eval_this; +function f(code) { + /* + * At this point, a primitive |this| has not yet been wrapped. A + * reference to |this| from the eval call should wrap it, and the wrapper + * should be stored where the call frame can see it. + */ + eval(code); + call_this = this; +} +f.call(true, 'eval_this = this'); +assert.sameValue(call_this, eval_this); + diff --git a/test/staging/sm/strict/10.4.3.js b/test/staging/sm/strict/10.4.3.js new file mode 100644 index 0000000000..b83d00656e --- /dev/null +++ b/test/staging/sm/strict/10.4.3.js @@ -0,0 +1,63 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var obj = {} + +function strict() { "use strict"; return this; } +assert.sameValue(strict.call(""), ""); +assert.sameValue(strict.call(true), true); +assert.sameValue(strict.call(42), 42); +assert.sameValue(strict.call(null), null); +assert.sameValue(strict.call(undefined), undefined); +assert.sameValue(strict.call(obj), obj); +assert.sameValue(new strict() instanceof Object, true); + +/* + * The compiler internally converts x['foo'] to x.foo. Writing x[s] where + * s='foo' is enough to throw it off the scent for now. + */ +var strictString = 'strict'; + +Boolean.prototype.strict = strict; +assert.sameValue(true.strict(), true); +assert.sameValue(true[strictString](), true); + +Number.prototype.strict = strict; +assert.sameValue((42).strict(), 42); +assert.sameValue(42[strictString](), 42); + +String.prototype.strict = strict; +assert.sameValue("".strict(), ""); +assert.sameValue(""[strictString](), ""); + +function lenient() { return this; } +assert.sameValue(lenient.call("") instanceof String, true); +assert.sameValue(lenient.call(true) instanceof Boolean, true); +assert.sameValue(lenient.call(42) instanceof Number, true); +assert.sameValue(lenient.call(null), this); +assert.sameValue(lenient.call(undefined), this); +assert.sameValue(lenient.call(obj), obj); +assert.sameValue(new lenient() instanceof Object, true); + +var lenientString = 'lenient'; + +Boolean.prototype.lenient = lenient; +assert.sameValue(true.lenient() instanceof Boolean, true); +assert.sameValue(true[lenientString]() instanceof Boolean, true); + +Number.prototype.lenient = lenient; +assert.sameValue(42[lenientString]() instanceof Number, true); + +String.prototype.lenient = lenient; +assert.sameValue(""[lenientString]() instanceof String, true); + diff --git a/test/staging/sm/strict/10.6.js b/test/staging/sm/strict/10.6.js new file mode 100644 index 0000000000..0c337fde70 --- /dev/null +++ b/test/staging/sm/strict/10.6.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function callFunctionBody(expr) { + return ( + '(function f() {\n' + + 'Object.defineProperties(arguments, {1: { writable: false },\n' + + ' 2: { configurable: false },\n' + + ' 3: { writable: false,\n' + + ' configurable: false }});\n' + + 'return (' + expr + ');\n' + + '})(0, 1, 2, 3);'); +} + +assert.sameValue(testLenientAndStrict(callFunctionBody('arguments[0] = 42'), + returns(42), returns(42)), + true); + +assert.sameValue(testLenientAndStrict(callFunctionBody('delete arguments[0]'), + returns(true), returns(true)), + true); + + +assert.sameValue(testLenientAndStrict(callFunctionBody('arguments[1] = 42'), + returns(42), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict(callFunctionBody('delete arguments[1]'), + returns(true), returns(true)), + true); + + +assert.sameValue(testLenientAndStrict(callFunctionBody('arguments[2] = 42'), + returns(42), returns(42)), + true); + +assert.sameValue(testLenientAndStrict(callFunctionBody('delete arguments[2]'), + returns(false), raisesException(TypeError)), + true); + + +assert.sameValue(testLenientAndStrict(callFunctionBody('arguments[3] = 42'), + returns(42), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict(callFunctionBody('delete arguments[3]'), + returns(false), raisesException(TypeError)), + true); + + diff --git a/test/staging/sm/strict/11.1.5.js b/test/staging/sm/strict/11.1.5.js new file mode 100644 index 0000000000..a0cb72d81b --- /dev/null +++ b/test/staging/sm/strict/11.1.5.js @@ -0,0 +1,176 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Simple identifier labels. */ +assert.sameValue(testLenientAndStrict('({x:1, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({x:1, y:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({x:1, y:1, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* Property names can be written as strings, too. */ +assert.sameValue(testLenientAndStrict('({x:1, "x":1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({"x":1, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({"x":1, "x":1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* Numeric property names. */ +assert.sameValue(testLenientAndStrict('({1.5:1, 1.5:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({1.5:1, 15e-1:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({6.02214179e23:1, 6.02214179e23:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({6.02214179e23:1, 3.1415926535:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({ 1: 1, "1": 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({ "1": 1, 1: 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({ 2.5: 1, "2.5": 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({ "2.5": 1, 2.5: 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* Many properties, to exercise JSAtomList's hash-table variant. */ +assert.sameValue(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, z:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, a:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* + * Getters, setters, and value properties should conflict only when + * appropriate. + */ +assert.sameValue(testLenientAndStrict('({get x() {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({x:1, get x() {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({set x(q) {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({x:1, set x(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({1:1, set 1(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({set 1(q) {}, 1:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({"1":1, set 1(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({set 1(q) {}, "1":1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({get x() {}, set x(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({set x(q) {}, get x() {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({get x() {}, set x(q) {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({set x(q) {}, get x() {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({get x() {}, get x() {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({set x(q) {}, set x(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('({get x() {}, set x(q) {}, y:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + diff --git a/test/staging/sm/strict/11.13.1.js b/test/staging/sm/strict/11.13.1.js new file mode 100644 index 0000000000..6eb4d6bf3d --- /dev/null +++ b/test/staging/sm/strict/11.13.1.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Simple assignment expressions in strict mode code must not be + * assignments to 'eval' or 'arguments'. + */ +assert.sameValue(testLenientAndStrict('arguments=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('eval=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(arguments)=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(eval)=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/11.13.2.js b/test/staging/sm/strict/11.13.2.js new file mode 100644 index 0000000000..59347496a8 --- /dev/null +++ b/test/staging/sm/strict/11.13.2.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Compound assignment expressions in strict mode code must not be + * assignments to 'eval' or 'arguments'. + */ +assert.sameValue(testLenientAndStrict('arguments+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('eval+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(arguments)+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(eval)+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/11.3.1.js b/test/staging/sm/strict/11.3.1.js new file mode 100644 index 0000000000..0de28055db --- /dev/null +++ b/test/staging/sm/strict/11.3.1.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Postfix increment expressions must not have 'eval' or 'arguments' + * as their operands. + */ +assert.sameValue(testLenientAndStrict('arguments++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('eval++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(arguments)++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(eval)++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/11.3.2.js b/test/staging/sm/strict/11.3.2.js new file mode 100644 index 0000000000..3a8b6eafbb --- /dev/null +++ b/test/staging/sm/strict/11.3.2.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Postfix decrement expressions must not have 'eval' or 'arguments' + * as their operands. + */ +assert.sameValue(testLenientAndStrict('arguments--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('eval--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(arguments)--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(eval)--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/11.4.1.js b/test/staging/sm/strict/11.4.1.js new file mode 100644 index 0000000000..3f091bb1d7 --- /dev/null +++ b/test/staging/sm/strict/11.4.1.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Deleting an identifier is a syntax error in strict mode code only. */ +assert.sameValue(testLenientAndStrict('delete x;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* + * A reference expression surrounded by parens is itself a reference + * expression. + */ +assert.sameValue(testLenientAndStrict('delete (x);', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Deleting other sorts of expressions are not syntax errors in either mode. */ +assert.sameValue(testLenientAndStrict('delete x.y;', + parsesSuccessfully, + parsesSuccessfully), + true); +assert.sameValue(testLenientAndStrict('delete Object();', + returns(true), + returns(true)), + true); + +/* Functions should inherit the surrounding code's strictness. */ +assert.sameValue(testLenientAndStrict('function f() { delete x; }', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Local directives override the surrounding code's strictness. */ +assert.sameValue(testLenientAndStrict('function f() { "use strict"; delete x; }', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/11.4.4.js b/test/staging/sm/strict/11.4.4.js new file mode 100644 index 0000000000..9acf7758b4 --- /dev/null +++ b/test/staging/sm/strict/11.4.4.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Prefix increment expressions must not have 'eval' or 'arguments' as + * their operands. + */ +assert.sameValue(testLenientAndStrict('++arguments', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('++eval', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('++(arguments)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('++(eval)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/11.4.5.js b/test/staging/sm/strict/11.4.5.js new file mode 100644 index 0000000000..bf176b02af --- /dev/null +++ b/test/staging/sm/strict/11.4.5.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * Prefix decrement expressions must not have 'eval' or 'arguments' as + * their operands. + */ +assert.sameValue(testLenientAndStrict('--arguments', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('--eval', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('--(arguments)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('--(eval)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/12.10.1.js b/test/staging/sm/strict/12.10.1.js new file mode 100644 index 0000000000..4d78ecb940 --- /dev/null +++ b/test/staging/sm/strict/12.10.1.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * 'with' statements are forbidden in strict top-level code. This is + * eval code, but that's close enough. + */ +assert.sameValue(testLenientAndStrict('with (1) {}', + completesNormally, + raisesException(SyntaxError)), + true); + +/* 'with' statements are forbidden in strict function code. */ +assert.sameValue(testLenientAndStrict('function f() { "use strict"; with (1) {} }', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * A use strict directive in a function mustn't affect the strictness + * of subsequent code. + */ +assert.sameValue(parsesSuccessfully('function f() { "use strict"; }; with (1) {}'), + true); + diff --git a/test/staging/sm/strict/12.14.1.js b/test/staging/sm/strict/12.14.1.js new file mode 100644 index 0000000000..ce6548434f --- /dev/null +++ b/test/staging/sm/strict/12.14.1.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * In strict mode, the identifier bound by a 'catch' clause may not + * be 'eval' or 'arguments'. + */ +assert.sameValue(testLenientAndStrict('try{}catch(eval){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('try{}catch([eval]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('try{}catch({x:eval}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('try{}catch(arguments){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('try{}catch([arguments]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('try{}catch({x:arguments}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/12.2.1-01.js b/test/staging/sm/strict/12.2.1-01.js new file mode 100644 index 0000000000..93c4a22a52 --- /dev/null +++ b/test/staging/sm/strict/12.2.1-01.js @@ -0,0 +1,79 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * In strict mode code, 'let' and 'const' declarations may not bind + * 'eval' or 'arguments'. + */ +assert.sameValue(testLenientAndStrict('let eval;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('let x,eval;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('let arguments;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('let x,arguments;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('const eval = undefined;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('const x = undefined,eval = undefined;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('const arguments = undefined;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('const x = undefined,arguments = undefined;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* + * In strict mode code, 'let' declarations appearing in 'for' + * or 'for in' statements may not bind 'eval' or 'arguments'. + */ +assert.sameValue(testLenientAndStrict('for (let eval in [])break;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('for (let [eval] in [])break;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('for (let {x:eval} in [])break;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('for (let arguments in [])break;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('for (let [arguments] in [])break;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('for (let {x:arguments} in [])break;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/12.2.1.js b/test/staging/sm/strict/12.2.1.js new file mode 100644 index 0000000000..1872db7679 --- /dev/null +++ b/test/staging/sm/strict/12.2.1.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(testLenientAndStrict('var eval;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('var x,eval;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('var arguments;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('var x,arguments;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/13.1.js b/test/staging/sm/strict/13.1.js new file mode 100644 index 0000000000..9ad35ae68f --- /dev/null +++ b/test/staging/sm/strict/13.1.js @@ -0,0 +1,350 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * In strict mode, it is a syntax error for an identifier to appear + * more than once in a function's argument list. + */ + +/* + * The parameters of ordinary function definitions should not contain + * duplicate identifiers. + */ +assert.sameValue(testLenientAndStrict('function f(x,y) {}', + parsesSuccessfully, + parsesSuccessfully), + true); +assert.sameValue(testLenientAndStrict('function f(x,x) {}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f(x,y,z,y) {}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Exercise the hashed local name map case. */ +assert.sameValue(testLenientAndStrict('function f(a,b,c,d,e,f,g,h,d) {}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* + * SpiderMonkey has always treated duplicates in destructuring + * patterns as an error. Strict mode should not affect this. + */ +assert.sameValue(testLenientAndStrict('function f([x,y]) {}', + parsesSuccessfully, + parsesSuccessfully), + true); +assert.sameValue(testLenientAndStrict('function f([x,x]){}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f(x,[x]){}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * Strict rules apply to the parameters if the function's body is + * strict. + */ +assert.sameValue(testLenientAndStrict('function f(x,x) { "use strict" };', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * Calls to the function constructor should not be affected by the + * strictness of the calling code, but should be affected by the + * strictness of the function body. + */ +assert.sameValue(testLenientAndStrict('Function("x","x","")', + completesNormally, + completesNormally), + true); +assert.sameValue(testLenientAndStrict('Function("x","y","")', + completesNormally, + completesNormally), + true); +assert.sameValue(testLenientAndStrict('Function("x","x","\'use strict\'")', + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('Function("x","y","\'use strict\'")', + completesNormally, + completesNormally), + true); + + +/* + * The parameter lists of function expressions should not contain + * duplicate identifiers. + */ +assert.sameValue(testLenientAndStrict('(function (x,x) {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function (x,y) {})', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* + * All permutations of: + * - For the two magic identifiers 'arguments' or 'eval' + * - For function definitions, function expressions, expression closures, + * and getter and setter property definitions, + * - For forms that inherit their context's strictness, and forms that + * include their own strictness directives, + * - For ordinary parameters, array destructuring parameters, and + * object destructuring parameters, + * - the magic identifiers may be used to name such parameters + * in lenient code, but not in strict code + * - the magic identifiers may be used as function names in lenient code, + * but not in strict code + */ +assert.sameValue(testLenientAndStrict('function f(eval){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f([eval]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f({x:eval}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function eval(){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f(eval){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f([eval]){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f({x:eval}){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function eval(){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f(eval){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f([eval]){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f({x:eval}){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function eval(){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f(eval){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f([eval]){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f({x:eval}){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function eval(){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f(eval) {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f([eval]) {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f({x:eval}) {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function eval() {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x(eval){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x([eval]){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x({x:eval}){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x(eval){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x([eval]){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x({x:eval}){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f(arguments){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f([arguments]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f({x:arguments}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function arguments(){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f(arguments){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f([arguments]){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function f({x:arguments}){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('function arguments(){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f(arguments){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f([arguments]){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f({x:arguments}){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function arguments(){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f(arguments){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f([arguments]){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f({x:arguments}){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function arguments(){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f(arguments) {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f([arguments]) {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function f({x:arguments}) {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('(function arguments() {})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x(arguments){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x([arguments]){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x({x:arguments}){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x(arguments){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x([arguments]){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('({set x({x:arguments}){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * Functions produced using the Function constructor may not use + * 'eval' or 'arguments' as a parameter name if their body is strict + * mode code. The strictness of the calling code does not affect the + * constraints applied to the parameters. + */ +assert.sameValue(testLenientAndStrict('Function("eval","")', + completesNormally, + completesNormally), + true); +assert.sameValue(testLenientAndStrict('Function("eval","\'use strict\';")', + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict('Function("arguments","")', + completesNormally, + completesNormally), + true); +assert.sameValue(testLenientAndStrict('Function("arguments","\'use strict\';")', + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); + + diff --git a/test/staging/sm/strict/15.10.7.js b/test/staging/sm/strict/15.10.7.js new file mode 100644 index 0000000000..6f14892f7c --- /dev/null +++ b/test/staging/sm/strict/15.10.7.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(testLenientAndStrict('var r = /foo/; r.lastIndex = 42; r.lastIndex', + returns(42), returns(42)), + true); +assert.sameValue(testLenientAndStrict('var r = /foo/; delete r.lastIndex', + returns(false), raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.3.4.5.js b/test/staging/sm/strict/15.3.4.5.js new file mode 100644 index 0000000000..472a631537 --- /dev/null +++ b/test/staging/sm/strict/15.3.4.5.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function strict() { 'use strict'; return this; } +function lenient() { return this; } +var obj = {}; + +assert.sameValue(strict.bind(true)(), true); +assert.sameValue(strict.bind(42)(), 42); +assert.sameValue(strict.bind("")(), ""); +assert.sameValue(strict.bind(null)(), null); +assert.sameValue(strict.bind(undefined)(), undefined); +assert.sameValue(strict.bind(obj)(), obj); + +assert.sameValue(lenient.bind(true)() instanceof Boolean, true); +assert.sameValue(lenient.bind(42)() instanceof Number, true); +assert.sameValue(lenient.bind("")() instanceof String, true); +assert.sameValue(lenient.bind(null)(), this); +assert.sameValue(lenient.bind(undefined)(), this); +assert.sameValue(lenient.bind(obj)(), obj); + diff --git a/test/staging/sm/strict/15.3.5.1.js b/test/staging/sm/strict/15.3.5.1.js new file mode 100644 index 0000000000..baecace0f8 --- /dev/null +++ b/test/staging/sm/strict/15.3.5.1.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function fn() { + return function(a, b, c) { }; +} + +assert.sameValue(testLenientAndStrict('var f = fn(); f.length = 1; f.length', + returns(3), raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.3.5.2.js b/test/staging/sm/strict/15.3.5.2.js new file mode 100644 index 0000000000..d804841387 --- /dev/null +++ b/test/staging/sm/strict/15.3.5.2.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function fn() { + return function(a, b, c) { }; +} + +assert.sameValue(testLenientAndStrict('var f = fn(); delete f.prototype', + returns(false), raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.4.4.11.js b/test/staging/sm/strict/15.4.4.11.js new file mode 100644 index 0000000000..6ee836f438 --- /dev/null +++ b/test/staging/sm/strict/15.4.4.11.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function arr() { + return Object.defineProperty([20, 10, 30], 0, {writable: false}); +} + +assert.sameValue(testLenientAndStrict('var a = arr(); a.sort()', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function obj() { + var o = {0: 20, 1: 10, 2: 30, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var o = obj(); Array.prototype.sort.call(o)', + raisesException(TypeError), + raisesException(TypeError)), + true); + +// The behavior of sort is implementation-defined if the object being +// sorted is sparse, so I'm not sure how to test its behavior on +// non-configurable properties. + diff --git a/test/staging/sm/strict/15.4.4.12.js b/test/staging/sm/strict/15.4.4.12.js new file mode 100644 index 0000000000..bcedb9c215 --- /dev/null +++ b/test/staging/sm/strict/15.4.4.12.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function arr() { + return Object.defineProperty([1, 2, 3], 0, {writable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = arr(); [a.splice(0, 1), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); [Array.prototype.splice.call(o, 0, 1), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 1, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 1, {configurable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = agap(); [a.splice(0, 1), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = ogap(); [Array.prototype.splice.call(o, 0, 1), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.4.4.13.js b/test/staging/sm/strict/15.4.4.13.js new file mode 100644 index 0000000000..4c6a3d9832 --- /dev/null +++ b/test/staging/sm/strict/15.4.4.13.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function arr() { + return Object.defineProperty([1, 2, 3], 0, {writable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = arr(); [a.unshift(40, 50), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); [Array.prototype.unshift.call(o, 40, 50), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 3, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 3, {configurable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = agap(); [a.unshift(9), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = ogap(); [Array.prototype.unshift.call(o, 9), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.4.4.6.js b/test/staging/sm/strict/15.4.4.6.js new file mode 100644 index 0000000000..4fac5bec67 --- /dev/null +++ b/test/staging/sm/strict/15.4.4.6.js @@ -0,0 +1,33 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function arr() { + return Object.defineProperty([1, 2, 3], 2, {configurable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 2, {configurable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = arr(); [a.pop(), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); [Array.prototype.pop.call(o), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.4.4.8.js b/test/staging/sm/strict/15.4.4.8.js new file mode 100644 index 0000000000..9992df90af --- /dev/null +++ b/test/staging/sm/strict/15.4.4.8.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function arr() { + return Object.defineProperty([1, 2, 3], 0, {writable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = arr(); a.reverse()', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); Array.prototype.reverse.call(o)', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 1, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 1, {configurable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = agap(); a.reverse()', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = ogap(); Array.prototype.reverse.call(o)', + raisesException(TypeError), + raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.4.4.9.js b/test/staging/sm/strict/15.4.4.9.js new file mode 100644 index 0000000000..4efade47e7 --- /dev/null +++ b/test/staging/sm/strict/15.4.4.9.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function arr() { + return Object.defineProperty([10, 20, 30], 0, {writable: false}); +} + +function obj() { + var o = {0: 10, 1: 20, 2: 30, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = arr(); [a.shift(), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); [Array.prototype.shift.call(o), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 1, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 1, {configurable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var a = agap(); [a.shift(), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = ogap(); [Array.prototype.shift.call(o), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.4.5.1.js b/test/staging/sm/strict/15.4.5.1.js new file mode 100644 index 0000000000..e976fe8e53 --- /dev/null +++ b/test/staging/sm/strict/15.4.5.1.js @@ -0,0 +1,87 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var out = {}; + +function arr() { + return Object.defineProperty([1, 2, 3, 4], 2, {configurable: false}); +} + +function nonStrict1(out) +{ + var a = out.array = arr(); + a.length = 2; +} + +function strict1(out) +{ + "use strict"; + var a = out.array = arr(); + a.length = 2; + return a; +} + +out.array = null; +nonStrict1(out); +assert.sameValue(deepEqual(out.array, [1, 2, 3]), true); + +out.array = null; +try +{ + strict1(out); + throw "no error"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "expected TypeError, got " + e); +} +assert.sameValue(deepEqual(out.array, [1, 2, 3]), true); + +// Internally, SpiderMonkey has two representations for arrays: +// fast-but-inflexible, and slow-but-flexible. Adding a non-index property +// to an array turns it into the latter. We should test on both kinds. +function addx(obj) { + obj.x = 5; + return obj; +} + +function nonStrict2(out) +{ + var a = out.array = addx(arr()); + a.length = 2; +} + +function strict2(out) +{ + "use strict"; + var a = out.array = addx(arr()); + a.length = 2; +} + +out.array = null; +nonStrict2(out); +assert.sameValue(deepEqual(out.array, addx([1, 2, 3])), true); + +out.array = null; +try +{ + strict2(out); + throw "no error"; +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, "expected TypeError, got " + e); +} +assert.sameValue(deepEqual(out.array, addx([1, 2, 3])), true); + +print("Tests complete"); diff --git a/test/staging/sm/strict/15.5.5.1.js b/test/staging/sm/strict/15.5.5.1.js new file mode 100644 index 0000000000..6b911031e5 --- /dev/null +++ b/test/staging/sm/strict/15.5.5.1.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function str() { + return new String("foo"); +} + +assert.sameValue(testLenientAndStrict('var s = str(); s.length = 1; s.length', + returns(3), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('var s = str(); delete s.length', + returns(false), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('"foo".length = 1', + returns(1), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('delete "foo".length', + returns(false), raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/15.5.5.2.js b/test/staging/sm/strict/15.5.5.2.js new file mode 100644 index 0000000000..44ac42402c --- /dev/null +++ b/test/staging/sm/strict/15.5.5.2.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(testLenientAndStrict('"foo"[0] = 1', + returns(1), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('delete "foo"[0]', + returns(false), raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/8.12.5.js b/test/staging/sm/strict/8.12.5.js new file mode 100644 index 0000000000..afd94178c1 --- /dev/null +++ b/test/staging/sm/strict/8.12.5.js @@ -0,0 +1,87 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function obj() { + var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1}; + Object.defineProperty(o, 'nowrite', {writable: false}); + Object.defineProperty(o, 'noconfig', {configurable: false}); + Object.defineProperty(o, 'noble', {writable: false, configurable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var o = obj(); o.all = 2; o.all', + returns(2), returns(2)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); o.nowrite = 2; o.nowrite', + returns(1), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); o.noconfig = 2; o.noconfig', + returns(2), returns(2)), + true); + +assert.sameValue(testLenientAndStrict('var o = obj(); o.noble = 2; o.noble', + returns(1), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('obj().nowrite++', + returns(1), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('++obj().nowrite', + returns(2), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('obj().nowrite--', + returns(1), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('--obj().nowrite', + returns(0), raisesException(TypeError)), + true); + + +function arr() { + return Object.defineProperties([1, 1, 1, 1], + { 1: { writable: false }, + 2: { configurable: false }, + 3: { writable: false, configurable: false }}); +} + +assert.sameValue(testLenientAndStrict('var a = arr(); a[0] = 2; a[0]', + returns(2), returns(2)), + true); + +assert.sameValue(testLenientAndStrict('var a = arr(); a[1] = 2; a[1]', + returns(1), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var a = arr(); a[2] = 2; a[2]', + returns(2), returns(2)), + true); + +assert.sameValue(testLenientAndStrict('var a = arr(); a[3] = 2; a[3]', + returns(1), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('arr()[1]++', + returns(1), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('++arr()[1]', + returns(2), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('arr()[1]--', + returns(1), raisesException(TypeError)), + true); +assert.sameValue(testLenientAndStrict('--arr()[1]', + returns(0), raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/8.12.7-2.js b/test/staging/sm/strict/8.12.7-2.js new file mode 100644 index 0000000000..21b15cd35f --- /dev/null +++ b/test/staging/sm/strict/8.12.7-2.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// delete o[p] only performs ToString(p) once, even if there's a strict error. +var hits = 0; +var p = { + toString: function () { + hits++; + return "noconfig"; + } +}; +assert.sameValue(testLenientAndStrict('var o = Object.freeze({noconfig: "ow"}); delete o[p]', + returns(false), raisesException(TypeError)), + true); +assert.sameValue(hits, 2); + diff --git a/test/staging/sm/strict/8.12.7.js b/test/staging/sm/strict/8.12.7.js new file mode 100644 index 0000000000..438a75b512 --- /dev/null +++ b/test/staging/sm/strict/8.12.7.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function setup() { + var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1}; + Object.defineProperty(o, 'nowrite', {writable: false}); + Object.defineProperty(o, 'noconfig', {configurable: false}); + Object.defineProperty(o, 'noble', {writable: false, configurable: false}); + return o; +} + +assert.sameValue(testLenientAndStrict('var o = setup(); delete o.all', + returns(true), returns(true)), + true); + +assert.sameValue(testLenientAndStrict('var o = setup(); delete o.nowrite', + returns(true), returns(true)), + true); + +assert.sameValue(testLenientAndStrict('var o = setup(); delete o.noconfig', + returns(false), raisesException(TypeError)), + true); + +assert.sameValue(testLenientAndStrict('var o = setup(); delete o.noble', + returns(false), raisesException(TypeError)), + true); + diff --git a/test/staging/sm/strict/8.7.2-01.js b/test/staging/sm/strict/8.7.2-01.js new file mode 100644 index 0000000000..322819eb56 --- /dev/null +++ b/test/staging/sm/strict/8.7.2-01.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Check that assignment to a let-bound variable is permitted in both lenient and strict modes. */ + +/* Assigning to a let-declared variable is okay in strict and loose modes. */ +assert.sameValue(testLenientAndStrict('let let_declared; let_declared=1', + completesNormally, + completesNormally), + true); + diff --git a/test/staging/sm/strict/8.7.2.js b/test/staging/sm/strict/8.7.2.js new file mode 100644 index 0000000000..4469446f90 --- /dev/null +++ b/test/staging/sm/strict/8.7.2.js @@ -0,0 +1,61 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* + * These tests depend on the fact that testLenientAndStrict tries the + * strict case first; otherwise, the non-strict evaluation creates the + * variable. Ugh. Ideally, we would use evalcx, but that's not + * available in the browser. + */ + +/* Assigning to an undeclared variable should fail in strict mode. */ +assert.sameValue(testLenientAndStrict('undeclared=1', + completesNormally, + raisesException(ReferenceError)), + true); + +/* + * Assigning to a var-declared variable should be okay in strict and + * lenient modes. + */ +assert.sameValue(testLenientAndStrict('var var_declared; var_declared=1', + completesNormally, + completesNormally), + true); + +/* + * We mustn't report errors until the code is actually run; the variable + * could be created in the mean time. + */ +assert.sameValue(testLenientAndStrict('undeclared_at_compiletime=1', + parsesSuccessfully, + parsesSuccessfully), + true); + +function obj() { + var o = { x: 1, y: 1 }; + Object.defineProperty(o, 'x', { writable: false }); + return o; +} + +/* Put EXPR in a strict mode code context with 'with' bindings in scope. */ +function in_strict_with(expr) { + return "with(obj()) { (function () { 'use strict'; " + expr + " })(); }"; +} + +assert.sameValue(raisesException(TypeError)(in_strict_with('x = 2; y = 2;')), true); +assert.sameValue(raisesException(TypeError)(in_strict_with('x++;')), true); +assert.sameValue(raisesException(TypeError)(in_strict_with('++x;')), true); +assert.sameValue(raisesException(TypeError)(in_strict_with('x--;')), true); +assert.sameValue(raisesException(TypeError)(in_strict_with('--x;')), true); + diff --git a/test/staging/sm/strict/B.1.1.js b/test/staging/sm/strict/B.1.1.js new file mode 100644 index 0000000000..f20cfdf42b --- /dev/null +++ b/test/staging/sm/strict/B.1.1.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Octal integer literal at top level. */ +assert.sameValue(testLenientAndStrict('010', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Octal integer literal in strict function body */ +assert.sameValue(parseRaisesException(SyntaxError) + ('function f() { "use strict"; 010; }'), + true); + + +/* + * Octal integer literal after strict function body (restoration of + * scanner state) + */ +assert.sameValue(parsesSuccessfully('function f() { "use strict"; }; 010'), + true); + +/* Octal integer literal in function body */ +assert.sameValue(parsesSuccessfully('function f() { 010; }'), + true); + diff --git a/test/staging/sm/strict/B.1.2.js b/test/staging/sm/strict/B.1.2.js new file mode 100644 index 0000000000..07c43d9d40 --- /dev/null +++ b/test/staging/sm/strict/B.1.2.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(testLenientAndStrict('"\\010"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assert.sameValue(testLenientAndStrict('"\\00"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assert.sameValue(testLenientAndStrict('"\\1"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assert.sameValue(testLenientAndStrict('"\\08"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assert.sameValue(testLenientAndStrict('"\\0"', + parsesSuccessfully, + parsesSuccessfully), + true); + +assert.sameValue(testLenientAndStrict('"\\0x"', + parsesSuccessfully, + parsesSuccessfully), + true); + diff --git a/test/staging/sm/strict/assign-to-callee-name.js b/test/staging/sm/strict/assign-to-callee-name.js new file mode 100644 index 0000000000..8a7845711f --- /dev/null +++ b/test/staging/sm/strict/assign-to-callee-name.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'assign-to-callee-name.js'; +var BUGNUMBER = 610350; +var summary = + "Assigning to a function expression's name within that function should " + + "throw a TypeError in strict mode code"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var f = function assignSelfStrict() { "use strict"; assignSelfStrict = 12; }; + +try +{ + var r = f(); + throw new Error("should have thrown a TypeError, returned " + r); +} +catch (e) +{ + assert.sameValue(e instanceof TypeError, true, + "didn't throw a TypeError: " + e); +} + +var assignSelf = 42; +var f2 = function assignSelf() { assignSelf = 12; }; + +f2(); // shouldn't throw, does nothing +assert.sameValue(assignSelf, 42); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/strict/deprecated-octal-noctal-tokens.js b/test/staging/sm/strict/deprecated-octal-noctal-tokens.js new file mode 100644 index 0000000000..a0faf75907 --- /dev/null +++ b/test/staging/sm/strict/deprecated-octal-noctal-tokens.js @@ -0,0 +1,48 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/** + * These test cases check implementation-specific error messages for invalid + * octal literals, octal escape sequences, and non-octal decimal escape + * sequences in strings in strict mode code, where the error can't be reported + * at time of tokenization. + */ +var JSMSG_DEPRECATED_OCTAL_LITERAL = "\"0\"-prefixed octal literals are deprecated; use the \"0o\" prefix instead"; +var JSMSG_DEPRECATED_OCTAL_ESCAPE = "octal escape sequences can't be used in untagged template literals or in strict mode code"; +var JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE = "the escapes \\8 and \\9 can't be used in untagged template literals or in strict mode code"; + +function checkPrologue(val, msg) { + assertThrowsInstanceOfWithMessage( + () => eval('function invalid () { "' + val + '"; "use strict"; }'), + SyntaxError, + msg + ); +} + +checkPrologue('\\8', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE); +checkPrologue('\\222', JSMSG_DEPRECATED_OCTAL_ESCAPE); +checkPrologue('\\222\\8', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE); + +function checkAfter(val, msg) { + assertThrowsInstanceOfWithMessage( + () => eval('function invalid () { "use strict" \n ' + val + ' }'), + SyntaxError, + msg + ); +} + +checkAfter('0755', JSMSG_DEPRECATED_OCTAL_LITERAL); +checkAfter('"\\8"', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE); +checkAfter('"\\222"', JSMSG_DEPRECATED_OCTAL_ESCAPE); +checkAfter('"\\222\\8"', JSMSG_DEPRECATED_EIGHT_OR_NINE_ESCAPE); + diff --git a/test/staging/sm/strict/directive-prologue-01.js b/test/staging/sm/strict/directive-prologue-01.js new file mode 100644 index 0000000000..5b26023982 --- /dev/null +++ b/test/staging/sm/strict/directive-prologue-01.js @@ -0,0 +1,85 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 601262; +var summary = + "A string literal containing an octal escape before a strict mode " + + "directive should be a syntax error"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + eval(" '\\145'; 'use strict'; "); + throw new Error("no error thrown for eval"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in eval"); +} + +try +{ + Function(" '\\145'; 'use strict'; "); + throw new Error("no error thrown for Function"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in Function"); +} + +try +{ + eval(" function f(){ '\\145'; 'use strict'; } "); + throw new Error("no error thrown for eval of function"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in eval of " + + "function"); +} + +try +{ + Function(" function f(){ '\\145'; 'use strict'; } "); + throw new Error("no error thrown for eval of function"); +} +catch (e) +{ + assert.sameValue(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in eval of " + + "function"); +} + +eval("function notAnError1() { 5; '\\145'; function g() { 'use strict'; } }"); + +Function("function notAnError2() { 5; '\\145'; function g() { 'use strict'; } }"); + +function notAnError3() +{ + 5; + "\145"; + function g() { "use strict"; } +} + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/strict/eval-variable-environment.js b/test/staging/sm/strict/eval-variable-environment.js new file mode 100644 index 0000000000..3340aa9536 --- /dev/null +++ b/test/staging/sm/strict/eval-variable-environment.js @@ -0,0 +1,74 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var code; + +code = + "eval('var x = 2; typeof x');"; +assert.sameValue(testLenientAndStrict(code, returns("number"), returns("number")), + true); + +code = + "eval('\"use strict\"; var x = 2; typeof x');"; +assert.sameValue(testLenientAndStrict(code, returns("number"), returns("number")), + true); + +code = + "eval('var x = 2;'); " + + "typeof x"; +assert.sameValue(testLenientAndStrict(code, returns("number"), returns("undefined")), + true); + +code = + "eval('\"use strict\"; var x = 2;'); " + + "typeof x"; +assert.sameValue(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + +code = + "eval('\"use strict\"; var x = 2; typeof x'); " + + "typeof x"; +assert.sameValue(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + +code = + "function test() " + + "{ " + + " eval('var x = 2;'); " + + " return typeof x; " + + "} " + + "test();"; +assert.sameValue(testLenientAndStrict(code, returns("number"), returns("undefined")), + true); + +code = + "function test() " + + "{ " + + " 'use strict'; " + + " eval('var x = 2;'); " + + " return typeof x; " + + "} " + + "test();"; +assert.sameValue(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + +code = + "function test() " + + "{ " + + " eval('\"use strict\"; var x = 2;'); " + + " return typeof x; " + + "} " + + "test();"; +assert.sameValue(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + diff --git a/test/staging/sm/strict/primitive-assignment.js b/test/staging/sm/strict/primitive-assignment.js new file mode 100644 index 0000000000..91c52a1b96 --- /dev/null +++ b/test/staging/sm/strict/primitive-assignment.js @@ -0,0 +1,33 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let primitives = [ + 10, + false, + "test", + Symbol() +]; + +let key = "key"; + +for (let value of primitives) { + // Doesn't throw outside strict mode. + assert.sameValue(value.x = 5, 5); + assert.sameValue(value[key] = 6, 6); + + assertThrowsInstanceOf(function() { "use strict"; value.x = 5; }, TypeError); + assertThrowsInstanceOf(function() { "use strict"; value[key] = 6; }, TypeError); + + let target = {}; + assert.sameValue(Reflect.set(target, key, 5, value), false); + assert.sameValue(key in target, false); +} + diff --git a/test/staging/sm/strict/primitive-this-getter.js b/test/staging/sm/strict/primitive-this-getter.js new file mode 100644 index 0000000000..fe356e15ce --- /dev/null +++ b/test/staging/sm/strict/primitive-this-getter.js @@ -0,0 +1,66 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +let primitives = [ + 10, + false, + "test", + Symbol() +] + +let getter = "getter"; +let getter2 = "getter2"; +let key = "key"; + +for (let value of primitives) { + let prototype = Object.getPrototypeOf(value); + + // Strict getters receive a primitive this value. + Object.defineProperty(prototype, "getter", {get: function() { + "use strict"; + assert.sameValue(this, value); + return "getter"; + }}) + + assert.sameValue(value.getter, "getter"); + assert.sameValue(value[getter], "getter"); + + // The proxy's [[Get]] trap is also invoked with primitive receiver values. + let proxy = new Proxy({}, { + get(target, property, receiver) { + assert.sameValue(property, "key"); + assert.sameValue(receiver, value); + return "get"; + } + }); + + Object.setPrototypeOf(prototype, proxy); + assert.sameValue(value.key, "get"); + assert.sameValue(value[key], "get"); + assert.sameValue(value.getter, "getter"); + assert.sameValue(value[getter], "getter"); + + // A getter still gets a primitive this value even after going through a proxy. + proxy = new Proxy({ + get getter2() { + "use strict"; + assert.sameValue(this, value); + return "getter2"; + } + }, {}); + + Object.setPrototypeOf(prototype, proxy); + assert.sameValue(value.getter2, "getter2"); + assert.sameValue(value[getter2], "getter2"); + assert.sameValue(value.getter, "getter"); + assert.sameValue(value[getter], "getter"); +} + diff --git a/test/staging/sm/strict/primitive-this-no-writeback.js b/test/staging/sm/strict/primitive-this-no-writeback.js new file mode 100644 index 0000000000..6c918b1eeb --- /dev/null +++ b/test/staging/sm/strict/primitive-this-no-writeback.js @@ -0,0 +1,25 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Verify that GETTHISPROP does not update the frame's |this| slot. */ + +var f = String.prototype.m = function () { + "use strict"; + assert.sameValue(this, "s"); + // The GETTHISPROP should not cause |this| to become wrapped. + return [this.m, this]; +}; +var a = "s".m(); +assert.sameValue(a[0], f); +assert.sameValue(a[1], "s"); + diff --git a/test/staging/sm/strict/rebind-eval-should-fail-in-strict-mode.js b/test/staging/sm/strict/rebind-eval-should-fail-in-strict-mode.js new file mode 100644 index 0000000000..9ceeaea3a5 --- /dev/null +++ b/test/staging/sm/strict/rebind-eval-should-fail-in-strict-mode.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var BadSyntaxStrings = [ + "function foo1() { \"use strict\"; try {} catch (eval) {} }", + "function foo2() { \"use strict\"; let eval = 9; foo(); }", + "function foo3() { \"use strict\"; for (let eval = 3;;) { foo(); }}", + "function foo4() { \"use strict\"; for (let eval in {a:1}) { foo(); }}", + "function foo5() { \"use strict\"; for (let eval of [1, 2, 3]) { foo(); }}", + "function foo6() { \"use strict\"; var eval = 12; }", + "function foo7() { \"use strict\"; for (var eval = 3;;) { foo(); }}", + "function foo8() { \"use strict\"; for (var eval in {a:1}) { foo(); }}", + "function foo9() { \"use strict\"; for (var eval of [1, 2, 3]) { foo(); }}", + "function foo10() { \"use strict\"; const eval = 12; }", + "function foo11() { \"use strict\"; for (const eval = 3;;) { foo(); }}", + "function foo12() { \"use strict\"; return [eval for (eval of [1, 2, 3])]; }", + "function foo13() { \"use strict\"; return [eval for (eval in {a:3})]; }", + "function foo14() { \"use strict\"; return (eval for (eval of [1, 2, 3])); }", + "function foo15() { \"use strict\"; return (eval for (eval in {a:3})); }" +]; + +function testString(s, i) { + var gotSyntaxError = -1; + try { + eval(s); + } catch(err) { + if (err instanceof SyntaxError) + gotSyntaxError = i; + } + + assert.sameValue(gotSyntaxError, i); +} + +for (var i = 0; i < BadSyntaxStrings.length; i++) + testString(BadSyntaxStrings[i], i); + diff --git a/test/staging/sm/strict/regress-532041.js b/test/staging/sm/strict/regress-532041.js new file mode 100644 index 0000000000..4088205b26 --- /dev/null +++ b/test/staging/sm/strict/regress-532041.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +/* + * JSFunction::findDuplicateFormal (nee js_FindDuplicateFormal), used + * by strict checks, sometimes failed to choose the correct branch of + * the fun->u.i.names union: it used the argument count, not the + * overall name count. + */ +function f(a1,a2,a3,a4,a5) { "use strict"; var v1, v2, v3, v4, v5, v6, v7; } + diff --git a/test/staging/sm/strict/regress-532254.js b/test/staging/sm/strict/regress-532254.js new file mode 100644 index 0000000000..ada023dc32 --- /dev/null +++ b/test/staging/sm/strict/regress-532254.js @@ -0,0 +1,18 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assert.sameValue(testLenientAndStrict('function f(eval,[x]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + diff --git a/test/staging/sm/strict/regress-599159.js b/test/staging/sm/strict/regress-599159.js new file mode 100644 index 0000000000..943c673bc9 --- /dev/null +++ b/test/staging/sm/strict/regress-599159.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Shu's test +function test(makeNonArray) { + function C() {} + C.prototype = [] + if (makeNonArray) + C.prototype.constructor = C + c = new C(); + c.push("foo"); + return c.length +} +assert.sameValue(test(true), 1); +assert.sameValue(test(false), 1); + +// jorendorff's longer test +var a = []; +a.slowify = 1; +var b = Object.create(a); +b.length = 12; +assert.sameValue(b.length, 12); + +// jorendorff's shorter test +var b = Object.create(Array.prototype); +b.length = 12; +assert.sameValue(b.length, 12); + diff --git a/test/staging/sm/strict/strict-function-statements.js b/test/staging/sm/strict/strict-function-statements.js new file mode 100644 index 0000000000..d561fc6d48 --- /dev/null +++ b/test/staging/sm/strict/strict-function-statements.js @@ -0,0 +1,101 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +// Ordinary function definitions should be unaffected. +assert.sameValue(testLenientAndStrict("function f() { }", + parsesSuccessfully, + parsesSuccessfully), + true); + +// Lambdas are always permitted within blocks. +assert.sameValue(testLenientAndStrict("{ (function f() { }) }", + parsesSuccessfully, + parsesSuccessfully), + true); + +// Function statements within unbraced blocks are forbidden in strict mode code. +// They are allowed only under if statements in sloppy mode. +assert.sameValue(testLenientAndStrict("if (true) function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict("while (true) function f() { }", + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict("do function f() { } while (true);", + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict("for(;;) function f() { }", + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict("for(x in []) function f() { }", + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict("with(o) function f() { }", + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict("switch(1) { case 1: function f() { } }", + parsesSuccessfully, + parsesSuccessfully), + true); +assert.sameValue(testLenientAndStrict("x: function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assert.sameValue(testLenientAndStrict("try { function f() { } } catch (x) { }", + parsesSuccessfully, + parsesSuccessfully), + true); + +// Lambdas are always permitted within any sort of statement. +assert.sameValue(testLenientAndStrict("if (true) (function f() { })", + parsesSuccessfully, + parsesSuccessfully), + true); + +// Function statements are permitted in blocks within lenient functions. +assert.sameValue(parsesSuccessfully("function f() { function g() { } }"), + true); + +// Function statements are permitted in if statement within lenient functions. +assert.sameValue(parsesSuccessfully("function f() { if (true) function g() { } }"), + true); + +assert.sameValue(parseRaisesException(SyntaxError) + ("function f() { 'use strict'; if (true) function g() { } }"), + true); + +assert.sameValue(parsesSuccessfully("function f() { 'use strict'; { function g() { } } }"), + true); + +assert.sameValue(parsesSuccessfully("function f() { 'use strict'; if (true) (function g() { }) }"), + true); + +assert.sameValue(parsesSuccessfully("function f() { 'use strict'; { (function g() { }) } }"), + true); + +// Eval should behave the same way. (The parse-only tests use the Function constructor.) +assert.sameValue(testLenientAndStrict("function f() { }", + completesNormally, + completesNormally), + true); +assert.sameValue(testLenientAndStrict("{ function f() { } }", + completesNormally, + completesNormally), + true); + diff --git a/test/staging/sm/strict/strict-this-is-not-truthy.js b/test/staging/sm/strict/strict-this-is-not-truthy.js new file mode 100644 index 0000000000..b0eec89cfa --- /dev/null +++ b/test/staging/sm/strict/strict-this-is-not-truthy.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ + +// See bug 630543. + +function f() { + "use strict"; + return !this; +} +assert.sameValue(f.call(null), true); + diff --git a/test/staging/sm/strict/this-for-function-expression-recursion.js b/test/staging/sm/strict/this-for-function-expression-recursion.js new file mode 100644 index 0000000000..5f8b5b685a --- /dev/null +++ b/test/staging/sm/strict/this-for-function-expression-recursion.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var gTestfile = 'this-for-function-expression-recursion.js'; +var BUGNUMBER = 611276; +var summary = "JSOP_CALLEE should push undefined, not null, for this"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Calling a named function expression (not function statement) uses the +// JSOP_CALLEE opcode. This opcode pushes its own |this|, distinct from the +// normal call path; verify that that |this| value is properly |undefined|. + +var calleeThisFun = + function calleeThisFun(recurring) + { + if (recurring) + return this; + return calleeThisFun(true); + }; +assert.sameValue(calleeThisFun(false), this); + +var calleeThisStrictFun = + function calleeThisStrictFun(recurring) + { + "use strict"; + if (recurring) + return this; + return calleeThisStrictFun(true); + }; +assert.sameValue(calleeThisStrictFun(false), undefined); + +/******************************************************************************/ + +print("All tests passed!"); diff --git a/test/staging/sm/strict/unbrand-this.js b/test/staging/sm/strict/unbrand-this.js new file mode 100644 index 0000000000..e320477119 --- /dev/null +++ b/test/staging/sm/strict/unbrand-this.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262-strict-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +/* Test JSOP_UNBRANDTHIS's behavior on object and non-object |this| values. */ + +function strict() { + "use strict"; + this.insert = function(){ bar(); }; + function bar() {} +} + +var exception; + +// Try 'undefined' as a |this| value. +exception = null; +try { + strict.call(undefined); +} catch (x) { + exception = x; +} +assert.sameValue(exception instanceof TypeError, true); + +// Try 'null' as a |this| value. +exception = null; +try { + strict.call(null); +} catch (x) { + exception = x; +} +assert.sameValue(exception instanceof TypeError, true); + +// An object as a |this| value should be fine. +exception = null; +try { + strict.call({}); +} catch (x) { + exception = x; +} +assert.sameValue(exception, null); + diff --git a/test/staging/sm/syntax/bug1863308.js b/test/staging/sm/syntax/bug1863308.js new file mode 100644 index 0000000000..b7486d9012 --- /dev/null +++ b/test/staging/sm/syntax/bug1863308.js @@ -0,0 +1,31 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +assertThrowsInstanceOfWithMessage( + () => eval("for (let case of ['foo', 'bar']) {}"), + SyntaxError, + "unexpected token: keyword 'case'"); + +assertThrowsInstanceOfWithMessage( + () => eval("for (let debugger of ['foo', 'bar']) {}"), + SyntaxError, + "unexpected token: keyword 'debugger'"); + +assertThrowsInstanceOfWithMessage( + () => eval("for (let case in ['foo', 'bar']) {}"), + SyntaxError, + "unexpected token: keyword 'case'"); + +assertThrowsInstanceOfWithMessage( + () => eval("for (let debugger in ['foo', 'bar']) {}"), + SyntaxError, + "unexpected token: keyword 'debugger'"); + diff --git a/test/staging/sm/syntax/class-error.js b/test/staging/sm/syntax/class-error.js new file mode 100644 index 0000000000..2babd8851f --- /dev/null +++ b/test/staging/sm/syntax/class-error.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +function assertThrowsSyntaxError(x) { + let success = false; + try { + eval(x); + success = true; + } catch (e) { + assert.sameValue(e instanceof SyntaxError, true); + } + assert.sameValue(success, false); +} + + +assertThrowsSyntaxError("class X { x: 1 }") + +if ('assert.sameValue' in this) { +} diff --git a/test/staging/sm/syntax/declaration-forbidden-in-label.js b/test/staging/sm/syntax/declaration-forbidden-in-label.js new file mode 100644 index 0000000000..26ccd0e674 --- /dev/null +++ b/test/staging/sm/syntax/declaration-forbidden-in-label.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1288459; +var summary = + "Properly implement the spec's distinctions between StatementListItem and " + + "Statement grammar productions and their uses"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertThrowsInstanceOf(() => Function("a: let x;"), SyntaxError); +assertThrowsInstanceOf(() => Function("b: const y = 3;"), SyntaxError); +assertThrowsInstanceOf(() => Function("c: class z {};"), SyntaxError); + +assertThrowsInstanceOf(() => Function("'use strict'; d: function w() {};"), SyntaxError); + +// Annex B.3.2 allows this in non-strict mode code. +Function("e: function x() {};"); + +assertThrowsInstanceOf(() => Function("f: function* y() {}"), SyntaxError); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/syntax/escaped-let-static-identifier.js b/test/staging/sm/syntax/escaped-let-static-identifier.js new file mode 100644 index 0000000000..9c8003e4b7 --- /dev/null +++ b/test/staging/sm/syntax/escaped-let-static-identifier.js @@ -0,0 +1,62 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1288460; +var summary = + "|let| and |static| are forbidden as Identifier only in strict mode code, " + + "and it's permissible to use them as Identifier (with or without " + + "containing escapes) in non-strict code"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function t(code) +{ + var strictSemi = " 'use strict'; " + code; + var strictASI = " 'use strict' \n " + code; + + var creationFunctions = [Function]; + if (typeof evaluate === "function") + creationFunctions.push(evaluate); + if (typeof parseModule === "function") + creationFunctions.push(parseModule); + + for (var func of creationFunctions) + { + if (typeof parseModule === "function" && func === parseModule) + assertThrowsInstanceOf(() => func(code), SyntaxError); + else + func(code); + + assertThrowsInstanceOf(() => func(strictSemi), SyntaxError); + assertThrowsInstanceOf(() => func(strictASI), SyntaxError); + } +} + +t("l\\u0065t: 42;"); +t("if (1) l\\u0065t: 42;"); +t("l\\u0065t = 42;"); +t("if (1) l\\u0065t = 42;"); + +t("st\\u0061tic: 42;"); +t("if (1) st\\u0061tic: 42;"); +t("st\\u0061tic = 42;"); +t("if (1) st\\u0061tic = 42;"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/syntax/keyword-unescaped-requirement.js b/test/staging/sm/syntax/keyword-unescaped-requirement.js new file mode 100644 index 0000000000..6c55494f2e --- /dev/null +++ b/test/staging/sm/syntax/keyword-unescaped-requirement.js @@ -0,0 +1,73 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1204027; +var summary = + "Escape sequences aren't allowed in bolded grammar tokens (that is, in " + + "keywords, possibly contextual keywords)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function memberVariants(code) +{ + return ["(class { constructor() {} " + code + " });", + "({ " + code + " })"]; +} + +var badScripts = + [ + "class { st\\u0061tic m() { return 0; } }", + "class { st\\u0061tic get foo() { return 0; } }", + "class { st\\u0061tic set foo(v) {} }", + "class { st\\u0061tic get ['hi']() { return 0; } }", + "class { st\\u0061tic set ['hi'](v) {} }", + "class { st\\u0061tic get 'hi'() { return 0; } }", + "class { st\\u0061tic set 'hi'(v) {} }", + "class { st\\u0061tic get 42() { return 0; } }", + "class { st\\u0061tic set 42(v) {} }", + ...memberVariants("\\u0067et foo() { return 0; }"), + ...memberVariants("\\u0073et foo() {}"), + ...memberVariants("g\\u0065t foo() { return 0; }"), + ...memberVariants("s\\u0065t foo() {}"), + ...memberVariants("g\\u0065t ['hi']() { return 0; }"), + ...memberVariants("s\\u0065t ['hi']() {}"), + ...memberVariants("g\\u0065t 'hi'() { return 0; }"), + ...memberVariants("s\\u0065t 'hi'() {}"), + ...memberVariants("g\\u0065t 42() { return 0; }"), + ...memberVariants("s\\u0065t 42() {}"), + "for (var foo o\\u0066 [1]) ;", + "for (var foo \\u006ff [1]) ;", + "for (var foo i\\u006e [1]) ;", + "for (var foo \\u0069n [1]) ;", + "function f() { return n\\u0065w.target }", + "function f() { return \\u006eew.target }", + "function f() { return new.t\\u0061rget }", + "function f() { return new.\\u0074arget }", + "function f() { return n\\u0065w Array }", + "function f() { return \\u006eew Array }", + "\\u0064o { } while (0)", + "[for (x \\u006ff [1]) x]", + "[for (x o\\u0066 [1]) x]", + ]; + +for (var script of badScripts) + assertThrowsInstanceOf(() => Function(script), SyntaxError); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/syntax/let-as-label.js b/test/staging/sm/syntax/let-as-label.js new file mode 100644 index 0000000000..e8e2746ef2 --- /dev/null +++ b/test/staging/sm/syntax/let-as-label.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1288459; +var summary = "let can't be used as a label in strict mode code"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +Function("let: 42"); +Function("l\\u0065t: 42"); +assertThrowsInstanceOf(() => Function(" 'use strict'; let: 42"), SyntaxError); +assertThrowsInstanceOf(() => Function(" 'use strict' \n let: 42"), SyntaxError); +assertThrowsInstanceOf(() => Function(" 'use strict'; l\\u0065t: 42"), SyntaxError); +assertThrowsInstanceOf(() => Function(" 'use strict' \n l\\u0065t: 42"), SyntaxError); + +eval("let: 42"); +eval("l\\u0065t: 42"); +assertThrowsInstanceOf(() => eval(" 'use strict'; let: 42"), SyntaxError); +assertThrowsInstanceOf(() => eval(" 'use strict' \n let: 42;"), SyntaxError); +assertThrowsInstanceOf(() => eval(" 'use strict'; l\\u0065t: 42"), SyntaxError); +assertThrowsInstanceOf(() => eval(" 'use strict' \n l\\u0065t: 42;"), SyntaxError); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/syntax/linefeed-at-eof-in-unterminated-string-or-template.js b/test/staging/sm/syntax/linefeed-at-eof-in-unterminated-string-or-template.js new file mode 100644 index 0000000000..73d8407620 --- /dev/null +++ b/test/staging/sm/syntax/linefeed-at-eof-in-unterminated-string-or-template.js @@ -0,0 +1,93 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1476409; +var summary = + "Properly handle the case of U+005C REVERSE SOLIDUS U+000D CARRIAGE RETURN " + + "at the end of source text being tokenized, in the middle of a string or " + + "template literal, where the next code point in memory (outside the bounds " + + "of the source text) is U+000A LINE FEED"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectSyntaxError(code) +{ + try + { + eval(code); + throw new Error("didn't throw"); + } + catch (e) + { + assert.sameValue(e instanceof SyntaxError, true, + "got " + e.name + ", expected SyntaxError"); + } +} + +// The fundamental requirements of this test: +// +// 1. The computed string that is eval'd must be a Script that ends in a string +// literal ending with the code points U+005C REVERSE SOLIDUS U+000D CARRIAGE +// RETURN. +// 2. The *memory* that is actually tokenized/parsed by eval must be +// immediately followed by U+000A LINE FEED. +// +// There's only one way to guarantee a U+000A LINE FEED after the source text: +// compute the source text as a dependent string, of a larger (linear) string. +// A simple substr will do the trick -- just as long as the substring can't fit +// in inline storage. 53 in the tests below comfortably exceeds all inline +// storage limits. +// +// One final wrinkle: because we only tokenize/parse two-byte source text right +// now, ensuring we directly tokenize/parse the dependent string's character +// data means the dependent string must have two-byte character data, hence the +// '\u1234' in the strings below. + +function singleQuote() +{ + var containsBadSingleQuoteLiteral = + "\u1234x'01234567890123456789012345678901234567890123456789\\\r\n0123456789"; + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + expectSyntaxError(containsBadSingleQuoteLiteral.substr(2, 53)); +} +singleQuote(); + +function doubleQuote() +{ + var containsBadDoubleQuoteLiteral = + "\u1234x\"01234567890123456789012345678901234567890123456789\\\r\n0123456789"; + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + expectSyntaxError(containsBadDoubleQuoteLiteral.substr(2, 53)); +} +doubleQuote(); + +function template() +{ + var containsBadTemplateLiteral = + "\u1234x`01234567890123456789012345678901234567890123456789\\\r\n0123456789"; + // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + expectSyntaxError(containsBadTemplateLiteral.substr(2, 53)); +} +template(); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/syntax/omitted-catch-binding.js b/test/staging/sm/syntax/omitted-catch-binding.js new file mode 100644 index 0000000000..fd425cf8bb --- /dev/null +++ b/test/staging/sm/syntax/omitted-catch-binding.js @@ -0,0 +1,45 @@ +// Copyright (C) 2024 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +var state = 'initial'; +try { + throw new Error('caught'); + state = 'unreachable'; +} catch { // Note the lack of a binding + assert.sameValue(state, 'initial'); + state = 'caught'; +} +assert.sameValue(state, 'caught'); + + +var sigil1 = {}; +try { + throw sigil1; +} catch (e) { + assert.sameValue(e, sigil1); +} + + +var sigil2 = {}; +var reached = false; +try { + try { + throw sigil1; + } catch { + reached = true; + } finally { + throw sigil2; + } +} catch (e) { + assert.sameValue(e, sigil2); +} +assert.sameValue(reached, true); + diff --git a/test/staging/sm/syntax/syntax-parsed-arrow-then-bigint.js b/test/staging/sm/syntax/syntax-parsed-arrow-then-bigint.js new file mode 100644 index 0000000000..aa68c4f420 --- /dev/null +++ b/test/staging/sm/syntax/syntax-parsed-arrow-then-bigint.js @@ -0,0 +1,45 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1596706; +var summary = + "Properly evaluate a bigint literal that's initially tokenized by a syntax " + + "parser (because the bigint literal appears immediately after an arrow " + + "function with expression body)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// block followed by semicolon +assert.sameValue(eval(`x=>{}; +17n`), 17n); + +// block not followed by semicolon +assert.sameValue(eval(`x=>{} +42n`), 42n); + +// expr followed by semicolon +assert.sameValue(eval(`x=>y; +8675309n`), 8675309n); + +// expr not followed by semicolon +assert.sameValue(eval(`x=>y +78051120n`), 78051120n); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/syntax/syntax-parsed-arrow-then-directive.js b/test/staging/sm/syntax/syntax-parsed-arrow-then-directive.js new file mode 100644 index 0000000000..a91397c9e0 --- /dev/null +++ b/test/staging/sm/syntax/syntax-parsed-arrow-then-directive.js @@ -0,0 +1,77 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1596706; +var summary = + "Properly apply a directive comment that's only tokenized by a syntax " + + "parser (because the directive comment appears immediately after an arrow " + + "function with expression body)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var stack; + +function reset() +{ + stack = ""; +} + +function assertStackContains(needle, msg) +{ + assert.sameValue(stack.indexOf(needle) >= 0, true, + `stack should contain '${needle}': ${msg}`); +} + +Object.defineProperty(this, "detectSourceURL", { + get() { + stack = new Error().stack; + return 17; + } +}); + +// block followed by semicolon +reset(); +assert.sameValue(eval(`x=>{}; +//# sourceURL=http://example.com/foo.js +detectSourceURL`), 17); +assertStackContains("http://example.com/foo.js", "block, semi"); + +// block not followed by semicolon +reset(); +assert.sameValue(eval(`x=>{} +//# sourceURL=http://example.com/bar.js +detectSourceURL`), 17); +assertStackContains("http://example.com/bar.js", "block, not semi"); + +// expr followed by semicolon +reset(); +assert.sameValue(eval(`x=>y; +//# sourceURL=http://example.com/baz.js +detectSourceURL`), 17); +assertStackContains("http://example.com/baz.js", "expr, semi"); + +// expr not followed by semicolon +reset(); +assert.sameValue(eval(`x=>y +//# sourceURL=http://example.com/quux.js +detectSourceURL`), 17); +assertStackContains("http://example.com/quux.js", "expr, not semi"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/syntax/yield-as-identifier.js b/test/staging/sm/syntax/yield-as-identifier.js new file mode 100644 index 0000000000..6833388e12 --- /dev/null +++ b/test/staging/sm/syntax/yield-as-identifier.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 1288459; +var summary = "|yield| is sometimes a valid identifier"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function t(code) +{ + var strictSemi = " 'use strict'; " + code; + var strictASI = " 'use strict' \n " + code; + + var creationFunctions = ["Function"]; + if (typeof evaluate === "function") + creationFunctions.push("evaluate"); + if (typeof parseModule === "function") + creationFunctions.push("parseModule"); + + for (var func of creationFunctions) + { + var g = createNewGlobal(); + var f = g[func]; + + if (func === "parseModule") + assertThrowsInstanceOf(() => f(code), g.SyntaxError); + else + f(code); + + assertThrowsInstanceOf(() => f(strictSemi), g.SyntaxError); + assertThrowsInstanceOf(() => f(strictASI), g.SyntaxError); + } +} + +t("var yield = 3;"); +t("let yield = 3;"); +t("const yield = 3;"); +t("for (var yield = 3; ; ) break;"); +t("for (let yield = 3; ; ) break;"); +t("for (const yield = 3; ; ) break;"); + +/******************************************************************************/ + +print("Tests complete"); diff --git a/test/staging/sm/template.js b/test/staging/sm/template.js new file mode 100644 index 0000000000..311e57b965 --- /dev/null +++ b/test/staging/sm/template.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 99999; +var summary = ''; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + printBugNumber(BUGNUMBER); + printStatus (summary); + + assert.sameValue(expect, actual, summary); +} diff --git a/test/staging/sm/types/8.12.5-01.js b/test/staging/sm/types/8.12.5-01.js new file mode 100644 index 0000000000..2f69b4d429 --- /dev/null +++ b/test/staging/sm/types/8.12.5-01.js @@ -0,0 +1,114 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/*--- +includes: [sm/non262-shell.js, sm/non262.js] +flags: +- noStrict +description: | + pending +esid: pending +---*/ +//----------------------------------------------------------------------------- +var BUGNUMBER = 523846; +var summary = + "Assignments to a property that has a getter but not a setter should not " + + "throw a TypeError per ES5 (at least not until strict mode is supported)"; +var actual = "Early failure"; +var expect = "No errors"; + + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var o = { get p() { return "a"; } }; + +function test1() +{ + o.p = "b"; + assert.sameValue(o.p, "a"); +} + +function test2() +{ + function T() {} + T.prototype = o; + y = new T(); + y.p = "b"; + assert.sameValue(y.p, "a"); +} + +function strictTest1() +{ + "use strict"; + + o.p = "b"; // strict-mode violation here + assert.sameValue(o.p, "a"); +} + +function strictTest2() +{ + "use strict"; + + function T() {} + T.prototype = o; + y = new T; + y.p = "b"; // strict-mode violation here + assert.sameValue(y.p, "a"); +} + +var errors = []; +try +{ + try + { + test1(); + } + catch (e) + { + errors.push(e); + } + + try + { + test2(); + } + catch (e) + { + errors.push(e); + } + + try + { + strictTest1(); + errors.push("strictTest1 didn't fail"); + } + catch (e) + { + if (!(e instanceof TypeError)) + errors.push("strictTest1 didn't fail with a TypeError: " + e); + } + + try + { + strictTest2(); + errors.push("strictTest2 didn't fail"); + } + catch (e) + { + if (!(e instanceof TypeError)) + errors.push("strictTest2 didn't fail with a TypeError: " + e); + } +} +catch (e) +{ + errors.push("Unexpected error: " + e); +} +finally +{ + actual = errors.length > 0 ? errors.join(", ") : "No errors"; +} + +assert.sameValue(expect, actual, summary);